PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/puppeteer/.local-chromium/linux-722234/chrome-linux

Просмотр файла: resources.pak

��#P(�#�6�#0W%��%٥%p�%� %��!%��"%{�#%��$%��%%�&%�'%p(%�)%�*%!+%�$.%M-/%�.0%�/1%�12%�33%;4%�D5%@L6%9N7%]8%]9%�`:%�i<%�m=%�o>%�v?%Ty@%�yA%v{B%�C%��D%[�E%��F%��G%ܪH%f�I%2�J%үK%��L%��M%��N%��O%��P%$�r%�s%g�t%��u%��v%�w%��x%}[y%ydz%�q{%ɐ|%]�}%��~%ܽ%s��%��%���%|��%���%f��%��%��%���%�	�%��%$�%��%S�%�!�%,%�%�,�%u.�%�;�%#?�%�A�%;E�%�M�%�T�%GV�%w_�%Vi�%!l�%}p�%Bx�%���%*��%���%Q��%���%���%���%���%��%���%a��%��%��%��%V�%��%+�%�0�%NI�%ML�%�N�%�O�%�]�%j�%���%��%x��%n��%��%j	�%w!	&�"	&�#	&[+	&�-	&�3	4&�5	5&�6	6&s7	9&�8	:&�9	<&2:	=&�@	>&�B	?&�I	@&�N	A&lX	B&V`	\&$a	]&4e	^&g	_&�l	`&M�	�&5�	�&/�	�&��	�&.�	�&<�	�&��	�&�I�&�L�&�N�'V\�'�}�'y��'���'���'*��'���'���'��'��'C
�'__
�'e
�'ci
�'�l
�'�}
�'K
�'��
�'�
�'M�
�'h�
�'��
(��
(d�
(*�
(`�
 (u�!(��"(�	#(Q$(�%(�&(��'(�((�)(3*(�R+(nn,(-�-(��.(b�/(��5(ö6(��7(��8(�9(+:(�5;(rM<(Dg=(߃>(6�?(��@(��A((�B(��C(��D(�E(C:F(��G(�H(zYI(b�J(X�K(�L(!�M(��N(�O(�P(s�Q(��R(��S(f�T(��U(&�V(��W(k�X(�Y(�Z(x(y(�z(�%{(3|(5�({��(G��(�l�(m�(�p�(�t�(}x�(~�(���((��(��(KU�(�k)�)��)'�)��)\�)l�)/�)�� )�!)g�")�[#)�$)�
%)�G&)u�')��()�))U
*)�=+)��,)�-)��.)�/)0)�1)y�2)�3)�4)��@)��A)��J)x�K)g�T)�U)���+�` �+�0!�+�;"�+��"�+1�#^.܇#_.W�#`.&�#a.��#b.b�#c.e�#d.Z�#e.B�#f.��#g.&�#h.q�#i.�#j.�#k.z�#l.��#m.��#n.��#o.��#p.&�#q.��#|.b�#}.�#~.��#.��#�.��#�.��#�.��#�.�#�.��#�.�#�.��#�.�#�.F�#�.��#�.�$�.G$�.�$�._$�.C$�.�$�.&$�.�.$�.�5$�.�8$�.%=$�.XE$�.�R$�.[$�.J^$�.c$�.�q$�.�|$�.O�$�.��$�.��$�.�$�.A�$/��$/�$/I�$/�$/:�$/)�$/��$/I�$/��$/�$/��$/c�$&/��$'/�$0/�)%1/�D%2/�E%3/K%4/�Q%5/|S%6/V%7/=`%8/��%9/��%D/�%E/��%F/�%N/%�%O/��%P/��%Q/�%R/�%S/��%T/�%X/&Y/�&Z/F&[/S&\/]&]/�a&l/�g&m/�|&n/�~&o/��&p/Ή&q/��&r/`�&s/�&t/�&u/p�&v/��&w/w�&x/ٵ&�/�&�/��&�/��&�/�'�//'�/0e'�/��'�9��'�9��'�9*�'�9��'�9��)�9!�)�97�)�9��)�9��)�9��)�9[p*�9�x*�9�*�9$�*�9*�*�9�*�9(�*�9o�*�9�*�9��*�9�*�9�*�9��*�9o�*�9j�*�9��*�9�+�9y�+�9�+�9��+�9��+�9��+�9t�+�9s�+�9��+�99�+�9��+�9=�+�9�+�96,�9�,�9�
,�9(�,�9��,�9�,�9f�,�9߰,�9/�,�9M�,:Q�,:��,:��,:F�,:��,:��,:��,:��,:A�,	:��,R:��,S:��,T:�,U:��,V:��,W:�,X:+�,Y:��,Z:�-[:�-\:{-]:q-^:�-_:c-`:-a:�-b:-c:�-d:K-e:-f:�%-g:{'-h:�)-i:�)-j:�+-k:�,-l::--m:�--n: /-o:0-p:�0-q:"1-r:2-s:&3-t:h3-u:�3-v:�C-w:�D-�:�E-�:�K-�:�U-�:�W-�:kX-�:)Y-�:7Z-�:;\-�:�b-�:=z-�:�{-�:~-�:8�-�:Z�-�:6�-�:)�-�:
�-�:��-�:�-�:M�-�:��-�:y�-�:I�-�:'�-�:j�-�:5�-�:6�-�:��-�:��-�:��-�:U�-�:|.@��7@� 8@v)8@�*8@�-8@U/8@O48@h78@T?8@�B8@�G8@�I8@gO8@%S8@�e8@��8@�8 @��8!@��8"@��8#@��8$@��8%@�9&@A
9'@ws9(@�}9)@��9*@A�9+@�9,@��9-@;:.@�:/@�A:0@�J:1@s:2@@t:3@�:4@
�:5@�:6@�:7@U�:8@ͤ;9@��;:@]�;;@u�;<@�;=@4
<>@�<?@2<@@�A<A@iK<B@7M<C@`X<D@�j<E@�s<F@�u<G@R�<H@d�<I@�<V@�<W@c�<�@��<�@��<�@�R=�@�S=�@l=�@m=�@~o=�@up=�@+r=�@Cs=�@u=�@v=�@�w=rBH�=sB��=tBJ�=uBĤ=vBk�=wB`�=yBI�=zB��={B��=|B��=}B�=~B<�=B��=�B��=�BY�=�B��=�Bg�=�B��=�B��=�B��=�B\�=�B�=�Be>�B�>�B�>�B">�BK$>�B�->�B�/>�Bn3>�B�@>�B�C>�B:L>�BCQ>�BU�>�B�>�B�>�B�>�B��>�B�>�B��>�BV�>�B�>�B��>�B��>�B��>�B�?�B�?�B�-?�BpgA�B�gA�B
jA�B�lA�B�uA�B�|A�BnA�BĈA�B
�A�B��A�BF�A�B;�A�B��A�B��AGK
�AHKоAIK��BJK��CKK��DLKR�DMK��DNK�DOK|�DPK�DQK_�DRKP�DSKϤDTK<�DUK˥DVKe�DWK�DXK��DYK4�DZK��D[K%�D\K��D]Kp�D^Kx�D_K��D`K7�DaK�DbK�DcK5�DdKӸDeK�DfKL�DgK��DhK$�DiK��DjK��DkK|�DlK��DmKO�DnKn�DoK��DpKEqK�E�K�E�KqE�K�E�KaE�K=E�K�E�KJE�KE�K�E�KVE�K�E�KpE�K.E�K�E�KmE�KOE�K-E�K�E�K� E�K"E�KN'E�K)E�K�;E�KxEE�K�OE�KQWE�KAiE�KrE�KTwE�K}�E�K��E�K��E�K�E�K��E�K�E�K'�E�K��E�K��E�KݳE�K
�E�K��E�K��E�K��E�K}�E�K��E�K��E�K��E�K~�E�K�E�K�
F�KwF�K�F�KwF�K�"F�K�&F�K3(F�K�8F�K8;F�KIF�K}NF�K8UF�KKYF�K?`F�K�bF�K+dF�KPfF�KRhF�K+kF�KQlF�KQnF�K�rF�K�zF�K�~F�K�F�K]�F�K	�F�K��F�KύF�K5�F�KߖF�K �F�K�F�K��F�K��F�K��F�Ky�F�K��F�KɴF�K�FLb�FLĵFL�FLb�FL��FL)�FLv�F	LݷF
LY�FL��FL
�F
L��FL��FLY�FL��FL�FL\�FL��FLݻFL�FL_�FL��FL�FLE�FL��FLɽFL'�FL��FL۾FL4�F L��F!L�F"Lm�F#L1�F$L��F%L1�F&L�F'L��F(L<G)L�G*LlG+L�5G,Lm@G-L
KG.L�PG/L�\G0LCbG1L�hG2L�qG3L�uG4L�G5L$�G6LU�G7Le�G8LK�G9L��G:L9�G;Lc�G<L��G=L��G>LS�G?LxH@L�HAL^HCL�HDLHEL�2HFL�QHGL�VHHL�^HILzhHJL�sHKL4yHLLu{HMLҋHQLG�HRLǘHSL,�HTLr�HUL)�HVL��HWL�HXL��HYLH�HZL��H[L��H\L��H]Ls�H^L�H_LռH`LS�HaL��HbL%�HcL<�HdL��HeL��HfL��HgL�H�L��H�L�H�L(�H�L��H�L��H�L��H�L�H�L�H�L�I�L�I�L:I�L�I�LI�Le%I�L-I�L{9I�L{>I�L?I�L
HI�L�NI�L�ZI�L_I�L�cI�L�eI�L5iI�L�mI�L�tI�L��I�L#�I�LA�I�L�I�L֎I�L��I�L}�I�L�I�L�I�L�I�LZ�I�L��I�LP�I�L��I�L'�I�LM�I�Ll�IM��I	M��I
M��IMI�IM��IM�IM��IM��IM��IM<�IMq�IM7�IM��IM-�IM��IM��IMe�IM�JM�JM�J M�	J!M�
J"M�J#M
J$M�J%M/J&MC J'M�)J(M�,J)M�5J*MM<J+M�@J,M�FJ-MSKJ.M�NJ/M�QJ0M�TJ1MgXJ2M�YJ3M�]J4M'^J5M�^J6M _J7M�_J8M�_J9Mm`J:M�`J;MaJ<M�bJ=M�iJ>M�wJ?M	{J@M��JAM��JBM�JCMˆJDM�JFMW�JGM��JHM�JIM)�JJM��JKM�JLMz�JMM��JNM(�JOM��JPMn�JQM��JVM(�JWM��JXM�JYM��JZM�J[M��J\M(�J]M+K`M�KaM�;KbM_GKcMTKdM�WKeMvZKfM�[KgM?^KhMs`KiM�dKtMQhKuM�iKvM�lKwM�oKxMgqKyM�yKzM{K{M�K|Mr�K}Mk�K~M��KM\�K�MݒK�M˞K�MI�K�M��K�M3�K�M֧K�MW�K�M��K�M*�K�M��K�M��K�M��K�M1�K�M3�K�M��K�M'�K�M��K�M��K�MP�K�M�K�M{�K�M@�K�M�K�M0�K�M��K�M&�K�M�L�M�L�M��L�M"�L�M@�L�M?�L�M�L�M��L�MN�L�M�M�MM�M(M�M�(M�M�.M�M�6M�M�CM�M�KM�M�M�M��M�M��M�M��M�M&�M�MߪM�M5�M�M�M�M�M�Mu�M�MM�M�M��M�M��M�M��M�M��M�MC�M�M�M�MN�M�N�M+N�M�N�M�N�M!!N�ML$N�M)N�M5N�M=9N�M=N�MwAN�M;EN�MSHN�M�LN�M�^N\N��N]NV�O^N�O_NK�O`N1�OaNd�ObNPcN%PdN�#PeNm;PfN�GPgNjHPhN�PiN;�PjN�PkN9�PlN	�PmN��PnN�PoN�PpN�PqN�QrN�'QsN(QtN��QuN~�QvNN�QwN�QxNv�QyN��QzN��Q{NR|N�
R}NhR~Ni?RN�LR�N�WR�Nv`R�N�jR�N�DS�N$�S�N�S�N.�S�N(�S�Nd�S�N	�S�N��S�N��S�N'
T�Nx�T�N(U�N�1U�N=U�N�@U�N�U�N*�U�N��U�N��U�N�V�N�V�Nc;V�NEWV�NXV�N�8X�N}>X�N�>X�NVUX�N�uX�NLwX�N��X�Nk�X�No�X�N2�X�N��X�N��X�N
Y�N�xY�NE�Y�N�Y�NL�Y�N\�Y�N۵Y�Nl�Y�N�.Z�N�Z�N�Z�N��Z�N��Z�N��Z�N^[�Nr[�N�[�N��[�N"�[�ND�[�N��[�N��[�N�[�N�\�N�>\�N�\�N�\�N�]�N�3]�N�Z]�N�[]�Nb]�N��]�N��]�N��]�N�]�N��]�N]^�N�^�N�2^�N�9^�N>^�N�D^�NSE^�Ng^�N�^�N&�^�N��^�N��^�Nڽ^�N�^�N/�^�N�g_�N�t_�N|~_�NZ�_�N��_�N)�_�N|`�N�`�N�`�N�v`�Nڐ`�N��`�N��`�N�a�Nca�N�ja�NO�a�N��a�NP�a�N��a�N'b�N�;b�N�Nb�N�Rb�N8[b�NM^b�Nfb�Neib�N%wb�N��b�N
�b�N�b�N3d�Nd�N�d�Nzd�N�EdO�YdO�bdO�pdO�vdOr�dO6�dO��dO��dO��d	O~�d
O�dO�eO'@e
O��eOC�fO��fO��fO^�fO�<gO`BgO�ogO�wgO�xgO�gOf�gO��gO4�gO��gO:3hOuohO�yhO�h O
�h!O��h"O	�h#O�h$O��h%O~�h&O��h'Oz�h(O�i)O�$i*O�/i+OBNi,O�Ni-Ov�i.O"�i/O��i0O?�i1O��i2O��i3O�Kj4Of[j5O�dj6O?�j7OI�j8O��j9O�j:O��j;O�n<OW�n=Oe�n>O��n?O>�n@O�nAOX�nBO�oCO�oDOEoEO2oFO2oGOY#pHO?6pIO�7pJO�=pKOW>pLO�UpMOkhpNOspOO7spPOb�pQO�pRO��pSOi�pTO��pUO�ZqVO�]qWO�xqXO��qYO��qZO��q[O��q\O_�q]O]r^O�r_O#4r`O}4raOxCrbO�DrcO �rdOיreOF�rfO��rgOrshO�siOsjO�	skO�slO
!smOn(snO�LsoOKSspO|�sqO�srO7�ssO>�stO�tuOK5tvO�6twO�;txO�<tyOxtzO\�t{O��t|OG�t}O��t~OG�tO��t�O\�t�O�t�ONu�Or'u�O�8u�OEu�O�Hu�O�Su�O�_u�O-�u�O��u�O$�u�O
�u�O�v�O�'v�O�(v�O�<v�Ohv�O�mv�Onv�Ow�v�Og�v�O}�v�O��v�O5�v�OD�v�Ow�O�;w�O�iw�OT�w�O��w�O��w�O��w�Ob�w�O��w�O�w�O�.x�O�?x�OF�x�O��x�O��x�O �x�O��x�O�x�OP-y�O�y�O��y�O�y�O�y�O��y�O�
z�O-z�O�4z�O�Qz�Oi�z�O�{�O�{�O��{�O�{�OX�{�O�{�O�|�O�|�OV�|�O�|�OX}�O�'}�O�:}�OQC}�OG}�OĂ}�O��}�OU�}�O�}�O�}�O��}�Oq�}�O�}�O�}�O$~�Oq~�O ~�O�-~�O�b~�Oc~�O#e~�O�~�O��O��ON�O^�Os�Ok(�O�3�Ohg�O�p�O���OU��Oݳ��O;ƀ�O���OE��O�H��O�K��ON��O����O���O�́�O���Ob4��O�Y��O����O����O����O��O4��OR��O����O!
��OK��O��Og'��O�+��O�K��O�R��O���O훃�OU��P}ƃP�σP�P��P�/�P�P�P�d�P�g�P�l�	P��
P���P���PP��
P}��P�ȄP��P��P#�P��P9��P��P��PC	�P�	�Pp�P�M�P�R�P7U�PGV�P�W�P�]�PBb� P�|�!Pل�"Pl��#P���$P���%P^��&P���'P�(P���)P���*P���+P��,P�	�-P��.P��/Pn�0Pq�1Pln�2P�q�3P���4P���5P���6P���7P��8Pز�9P8��:Ph�;PV�<P�a�=PQ��>P���?P*	�@P��APo�BP�;�EPO�FP>��HP�ŏIP�ΏJPk�LP2�MPab�QPZh�RP�o�UPՑ�WP(��XPʐZPm�[P��\P�]P��^P�P�_P[�`P-�aP:�bPKc�dPmz�ePQ��fPz;�hP�|�iP���kP4��lP/V�mPlH�nP��oP�~�pPuޯqP=��rPS_�sPSS�tPGV�uP	W�vP�Z�wPJ[�xP\�yP|\�zPӅ�{P^��|P醵}Pm��~P���P����P���P����Pɵ�P�ʵ�P�ݵ�PY޵�P�޵�P���PU��Pc��P=��P�A��P�x��P�{��P����PG���Pʼn��P���Pݓ��Pƕ��Pe���PQ���P̘��PL���P���P����P0���P���PԢ��Pa���Pt���P����P
���P����P譶�PC���Pյ��P���P���P���P���P��Pk���'�;&��:K�:Y�K�CPDPGPKPNPOPPPSPTPVPYPcPgPjP�PNG


IHDR@@�iq�
�IDATx�t���Fo�$S�ēaZ�����𘙙����������233$C&��~�r����c'�}?�s��%���WUj���8��p���\Z)��(26��M�i6����z�;���V���̕r�A�����${C�����j*0"�Q�@g��.2�˟�������IT.���	�<Q%8��t-�L/�v�*�@!gUM����MW���Y@�/�����o�(�E�3u��i�힀�$h�9�y��>W��~`�7�TƆJAR}k'/j���t�jj���	�HX>�j`̇��뻀�@��G�T�h$�n��
(�;tL)�W`��`�Ƚ_=x����d�G�5/�P�#�g���	����DM��ؕ����<�Q� �Xq��\Y�h��UAŀ����m����b.�G�Z0>��s�b)�w>thƺ/"( bp�K���bNί5��
���3�#�g#	V
���� 81�*����*���F���2��lcY.�?4bY�zs�EPT��m�*]iĺWH�j5?���df?�Q�d~'noN�UE�F��7�mF=vwJ~��>A*z��v’�a���u�S��@�1��]g��푣zӝ�i��oME/�I/������i��	�hkT���P�AD`��{�}�]�1���	��06qtӒ�+���3�mk�K��:UT���j6���|'����wźPT��n�9ɥ���Lc˓_嗮+HԵ�)���"�@q�ȭ�ӟ!od�s��tu��Tt���ҋ����_R.��Thl���/�D��#���/h*��C#��! r�w�J	V���r��j���p�F<�Sc�����hD#*���* ���A� �E�ݻ��B�1�rX��S��x-c�M��l�
S~)����^��%~-p���8d�fՒ<m"`m��78��	N;w��;���,�-�@�|0b@@��bB����U4�u����|�W2�s&��Q)'W� <�	�=�$��$���0���Ңa��>GTj�/��O7S�;$���L�4d�	cZ"0F0�AP�?�I��`�X�d
a��S�ն��9a*�
+W��ᆝ@���6,
jЩ]о(�'ǫ���p�g�
�\Wm�mUZ�a�%p�Z��@��T�m����������

��`�p� �>ϒ��?��C�l�X�	0����@�<,�{?6o>�8Np� �@���m^A�߹�+�����m��
�^��I8b�1���1*<�~+���7sōI�hE�A��7�G�_����8��'@>��-x�}�Y?�+��JWv�|W^|#H��&ʃ��J;����󶧯n�W�g�wOQ��q/g7�������/7�����{�Yv�O��蓁���ñe�7���"�J.|�SP�S^�����`-6i�Nq�~B�W=n�7�W����i�'
��
_�'�q�Ŝ`���>0�N�4n_��Ah��c�ϛ<6�M��G*�Lǁ�=h�ݤ�f���YF�Cmt�.�)�ct(�v��vVy��{��9��[]�?j�jN%���03ښO�a3ye� KHD'���L=@t�*=ɍ��d�(�d��C�f����=_���4�܊onPn�PX��\Җ��eH�	iU<U{4Yg�Ι4��TFK����N̛0j���NMgٞku�S@pX�Z��oud�ss0��X�ީ����iW�m�W7��̬i%Ÿ�:#$��
/��e�B7T;erEV��K8�NC�V�Z�u����˔uZ�Yb�2<��&U�ݍ����ш�THEK>hV�.f�ZI>f�,T�!����>���|���M���xѰ���*�M{� }�r!�TL� �� &`��k��ߚ�9<Wm����a���02$��k4JŤ��sE��axq���:�B<�	Ou�=v��������*a��LG��V�Q@��g��?F�3���W���15_�A��,]���b<�ř����k�G��nn�$B��I�R[���`Z�f7��x�Z�a|���]��j}~oM'q*&e|0\�ʜ�%ܴ�	d�:#�[~�u{�kJ=�9U��L��bR��~��*Щ�(^�˗��TJٮ�U���{����a��o~��7l�=�ZOŤ���ת�I}���o,�TkK��U��|�c�o��qC/t�sF.N���z�&�f.�j���)W4k�Dz-������+G�K����͜[_���Tx����ya�97W��Um��○w�{��z��:`�.˥71
2��(�/��2S�VU�U��FP2�z�d���z���	�����E1q0bT�\}���M��|�ߎ�l8s׶0�0O�[yܑ B�tK���m�L��ڧ^v��O���?o��lih^;C�t���°�d*�M~<a��ڞr����<�h�ʊ��{�3�����MY���ƾK�[�_�w|�7�X��2O�>p�`�?T�ʿ��5��ט('LA����xsٵ|Ȟ�H�I��u~���HQX��X7?�.��6GKk���Ӕ�{��r��Ѕ��J�8j��jei���4�8��_�䆭	�Y�'��a�3���$�o��4�p[����SFu��@���vC[k����YB�@+	���n��l�Zê���Z˺FP1���5��B�ctA����=s�_�b��O_�lb�1j-I*�Mr�*b���w��M�Z�}t��
��X�[[O�x��v��9@�8T�TY�I#��V�NE7��&��m�ަ���t/����:e��X��4o�.n:���D;�8�d|�Mw?|���F��A
{Ao�g-8U\�8�.KH��˼��y�j�T�$ベ�\���$��}$��W�IU���D�"$_����=���5'ߕ�^2��p�G�L&��m�A��W��'hb�8NW�1���s3_��3�8�ȵ�R��^2>襓NXs�m$�'q=l�<{��s���T9�2Nd���0�4����p�R���M���wY|j�cq������<�Ԓ8G�,kW
�:�ή�f#>�(�〛�C�dI�Oܡ����aV�(��~���n�/|]�J
��X<�Z��T�+�~u��{^�X3��Y���ւ�}=PuX�T���JqN-�
7�7�p��}�=Vv�b�[T�+�~p��4�m�R1B��Z\�Ьչ�$`���͝�E�`���9b���\u�CJ�)7��Z���4�U4��1�,s�[���a���t��:;Z�{*�(��?�ܰ���7#

EA�׮�����.Ūx�36�*ĵ�8A��R��g������v.7�j��!Q�� ���&��G��e%�u7�
I��,�O��cC?�, �w��]��I�Zc]���s�I��tDɆU�T�9��!���������l������/�[��Y^�Ȋ��ֈЕ�,���r�0<��q{��]�Y������R�IEND�B`��PNG


IHDR���>a� uIDATx�p�V���Jjr���m&��M�d������󘙙��q�X��d7K�d�� ����*��-�r�=�$���W����9:�Rw8�q�s���8�9�s�Y�u?}�H���:����0xn�x����	,�"ۘVs8������=!^�Q�ų�����@�vV��U�2��n�;È��%��DցS�\��D��	_<!v�i�,rw�涃3�-�c<�K��x&2f����Xkx/6ثf['T:�#��]|HU�%"�Z�PO�ЇQ��m�w"~0����}F����F�}#��*1<hu�Uz�/��@�9�3�H�P5�j�%�����L�A���{Y���T.^S�ϼ�jc�mqJ	�
���G9�4j5�ͨxo���|�U�\��Y��i^紇^Ӭ��F��Z�4g��
����	�
1�N���ꧾp�B�_WV��/<����l诶:ޮ��Õ0�hl}@]d@F��*�g�o�w���(�f�_��+�*����<�v���):�>���ͺG��ӝ�g�w�J��~~�M�g���7q(�O�(��`����=��|�Ç��
�	��}�u��z��c�����8p
�j�tle��5M?r�?��:�	�	��W��08�ds�x��_�]{r'.�r}�p ��V1�6x�H�~3�Y�����)`O��J�����Ȍ
PP��S\0� �^��{j��!�M�
�nX�a�3.�
������zE���8�1B.���9��{��+o><m���!��� 0�>`�P<w�)�3�����c*A�Akm�W�V�=�'�mV (�j�%�sj�s��vW�a>�W�1h�A��f������CSq%Mv��Ϛ�|��
I��w�ˀ1��J|�g�OZ3� �M(�
g�k}D�Q�?��A�j���u�k3��| 
����E�?�r"!3�I���Tn�cQ��w�*�r�������#r��u�S�Xi������Ϣ��ڡ���J�h!o?��)���긣��8�'+)y�O�c�0t���®z (�-v���4��1U���]J����:��.z\�b��:��&4����.�V̿u;�E?�ђڧ�SAox�6��Z���#�.zS'��J�JȬ�$�tkcM̛�f\UP�4w�B�j�Yav#;F�6���+���ft��#�T��\��Np�ę�9&�l�DQeVT��S�6�dF�_�,�U�*��#��������r�I�r��	^2�?lu�E�\6��*@OP͕z�t��e�*�Y��d��x��N�r$�-�n�מ�֯�����u{��H6�5�ٰ�#LU���L~"�|X~�z�u��/��	�
}��Dͯz����~���
d
���E>��4��l�
M���O���D�#��gn:��ӭp{��͹��9G�(Z��{
ɦ@���q��{2��k6)���s��sN�����[��i��c�7P$Kt4�b�9�K���yt8n�� q"�������,�����fd��nN>�GPU�ٌ�����
��=���0��`�3��l����?O�Re�z���͡?
�7���#�:q-q{*
���2X����!�sYNuE�Օ<��`���u7��}Q"�"����_l��ʎ���P�
)��}�}��H��Hn�W �6�YH�ev��5�E���KDp��1������N]%�I�J�g�<���o?{7�(�˚3(�:�Oq�ZA�p��p�v��U���#H��GSe������G��^���|�QAQCl�+����l\�3R�i�]�i��t�~�����Q��S�xz:v 8#j��U"QY��*�<V=��	�%}Ο;'X����:��4_W�3��D~�Q���N�lmOO[�z0_�9��1��	j�1Y���h�N�3=��.
�����nk�tI���03�Z�!g���yM.<�ɉ[�,�'����W&���|���b0i�2����b�{җ�"�d�� F�$٤.�A2�h�c0�(�d�S����|r�*�o���)�����j�@)X��~����^Tu1A1&u*_���$ȺE鹚P��.ȡ.fď��Qn�|'�e�Q]q�&����ɻ�	�Q��x�F�&��Q�4��iͤ9!H<B>�� @0��F&{� �{�Z9a�
O=�ZJ ���(�W�Ֆ�R��}�}|��#���5D��*��[ _G�'�������R@݄���1^q�zjU� 膎;�:��{ҍ5��Q��"��rJ�ߩ̎+iФ^����@�{ȓV
�j���P��7>�b�{`�{��� ��r��wYP0~�bp(����
@aC�Gd
a�p�q�U~���h��fb�����H��I�\��(h>����#��/�$2i�Cv)�_f�6�t;
�2�O�Wg1����UŚ*;O����{�<��8������Cɲ>��f�cZ�R��Cif�L�}�F�:o��t"x�Lv�j����l�Z�������m��$��)b+ 9#�>A�S�C�1Ȓ�����D�8����sU�tP%M�\r��	�۷<�B|�������hd�E1}��L���i1���)�iY�����
̹E�m�q�wog�*эa����''^�I�+gnU��	��*>��p��?�S3n6��Lʝ�f����<�x���;Cr�\��EG���A�Oy��@��xǣ,�g��J�Υ|�����=�~�+Y�{A5+�Y��s*�����˽AU8u���߻�ц�|<5�>���	��xV��FW�!��\X?:�BN��x���AA��x�g���A]��g��Ώ�	����%�ͷ���?�� q�㵧1�����?>�������G1�_�e��|9+n�.N��'����t�
��ާ���e�E�\�<��_#���(��I���4���H�]�e,\��?��B��Esr�Ɨ�/[���0���Ƕդ�H�X2��綽8�@���C��z�@~1W)vL(�#'̛���
��e�M�>��xp�?|�p����N���c�iG^fHav��y�y�Ò�|çEA�n�Bۆ3�:
�3�'
�:r�_g�I�q.�x�jqQ��;�f�8��3#~�o|�B�U��P��=�͇%��>���N�uwh�rp�"�t�8�x������DL�}TFL*��9��^�cic��*]�1���t�K�c�8�Խ���Of��Θ�h��(�v�.j5�[�Q�9� ���=Og8��|Sa�;���(��K!:�H��Y���S氦i�b��鼆��K$3����x�ʛ�-��
O�6��3��ݐ��d�Y��.�,1�x�:u'�9��*.Q�G�f�|p�8����)4��(�>د�%�⡏>@�)��Uv�T�5�7SM����&Kav�JW1yóc1�8�rM"擙o����>�*bd�&&�6A�7t�s��vs��<>��H`���m���~��������e�l�YDR,&3��W�Ӡ`V��sȍI3<3��A<s��nC"�d��!M�ۜ�$�@���Nĺ��]k.dh�ss?O��W_5��hP����~YTW�Gx�g��G�C�*�sR�����U!���y�@9O�f�S@VeT�ʨwy"�d�ۡ�^�
����5ٱk�\ֽ�8��q.�Fk�+�\��v�0��_�e�!�1��'T�q��f-Bjdj\a9�	��s�%"��Q"
5�1�NRT3��v��D�|���!�*p�%cԪ�$e���O��/���ѡ��SA�	g�Pt�l�H�\C�/�Hq9��A�(�-�s��͑6�����JD��|;��8y���<u+G�f����0j#P7^4Q�—,��ӿ��.�G98�N��#3[��.��g�-R�%$ƤJΒM�JD�L���}�"�.M��1RP�(
=���� �}r�
k+�,�:@��bﺓ9��
���d��v��sC��B~� 5;5|>�aW}mPID�LѠ��<UV�`Ǚ'�\��.��
8��3�7v�������ã{�)�1�]����ffj�b�\�}�p�UYT�5�ڐ�^��AQ�TDet�
�֐����B�j�sO���_������1Ձ�_e[�{8�����Zfxav'ZV���oJD�L� oc@�–Sv!8��B��*X��k<N�ڠ��ο��_��廳 ֎���1s
O�-*窬��HD�LѠ�7�1~��'l��U��+���kq�c�e}	�P����R�xC�YΗԊ-�-a�k 
�߾�Z����Y)l�T-|���rY?�K���a�]Q3�
WeeKD�L� �_W��c�'��R@��O�>q�BTh~�V�'3���e8(���9*Tl����	��4s��bU��=z��̗%�3���E��Y�o:Q��?�2E��<�t;�q�	X��
�R��C��ᛯӊ��W�L��_�+ �Vg뎍8Ufe��r�b��7��ae���]�*6����]�������Z �{��׮��o�EC�zT�X�|�
g|����1��:�^��̋�|U���!R�4�~�6ND�LѠ���ɚM�i4��S�8��������/�NJ��Z����D��
�K���y������s?�-8��,�ci~��	�=�0��%��4��^��A��P�F�U�f��������q�E�x�7?���B3�!���D��
b�G������V�sw-?�u~�W��?w's8�R��+a�;��+S4�&z�L��lٹ������]R�a��>�o������C
��~�X�v�ND�L�`{ڻGu��@��+ʆ�[��Iz�����[��7?��3��OQ��M�W��n��+S4��F��.t̋��z��d=�E��s���g� �=x�B/�m�`��� �/O��D�ʤs$.8��cϝS�~�?K���+f~ʍ�a�����a�?6�k��'E2��P�����>�,\���x�9�2��_�'F��/z����A�0LT�{Q$3����@�J\V���G��*��5Rl|�%���N
�Y��O8::��ᓉ(��oG�W��]�A�����Q���n������'�=���߽����?�_~��o(��@��&�Hf�ן���n<Ѕ�Lu�����o��:���0��3�Uϧ�}O��MC�鋪�8�J�@"�dҍB9[�"���|i�Y�"C�4�0~9����� E��}-�]
��?�ҟa|�`"��B;5���* v�O	f����k�U�0>E�����?p�����S]����O?�
�ب�'�j��qe쏭���:���vD!�y��K����d�����Lx��A��d���O��#8�y���;ӨV?���$��ͱ��{�Z���U��n��R	<
�D$�b��z�`�7�|n�=���
����1^p�N��A�Y�S�0|�,��l�XH.
��*A�����[	j|�e�7�*�t�0R�R�F2�ݷ�~���O���'ٲi���_|�������>0�Bܱ������5aH�έ;�÷]��k�XP�*ܙ(i$y�pn��y�N���=w���cA?�7�>�]^z�����_2��v��Win:,���e1>r���׫�S�e�|�7�(g�XZC��a�jC+"{�o���R�Kr�m^��iNu�����G��v���Q�����s3,�"����`��2X�Kp��}�p���u�(�U�7�c-�!1<�M����:tCe�D�5�
f�:x�K�E��#%���e��>7U�MV	�S���p͙p�)J�c ���-�v��]m&gu����5��Ċ���_f��	��P?F(C���B��^PI���{�c.>�q�	0�`Ex��#n���hՉ���X���+>Q�:�w��U�?�$�/�t(�W�T��&���\0T�K�<8e��5['o̞*.��O�<��徯Zz����u�,q��7�t�H����<�����q�첿JT��|ӟ���w��Ucv�s��h�.G�`]SY;��هMڡ#�¡i80-<v�q�P� ������Q�s�0��s&زy�0���_���+��P��2���:�i���J�^ad��.# =_���K��QHFdX����͚�����~'�ݡ��љi��.Xʯ3�s�(e��Al-��2Z��3�3�KdS9�.
���q���8����t��c��-A��3����&��L�QZ��n�R��������U$p��H$��Y��
�ub7t�3�(~{�I�Rdҍ%)v�w�0^��k��s(�"��(UEgϱ\q�Fڡ��;�v[}�ӉX�L?]yN��qعCUWw��q@�EQuh���c�ɣ�����a�s�y��9��D,U&�X����a�������p �S�*j6�r��脃7�,���]��#��~d�=�'O^?�>F���v�W+H���c��p#�����k�۝���毸�8�Ȥ}�ݍ�����������)
�lZ�5=PPUe$p��Ҝ��_���镊��N�}��W&��['�pC��>���TKE3--B�9PU�suJv����Zި��
�v�m�}���eNptm@f�E��O�����iPks�����Xٱ��X��
�������ط�˭��X�L��,]}�/tB��q���<x�s���8�Y�q4�/�`Ü�>��3S���#�̋���\�tcٺ���:��6
�a覗p,��s�MA����|���4���VT�����`_"VB&�X]A���N��6�V��T�ǩ��e�S\��Ӳ�>t@�k�̟�Q[�+&��rL������7u��.��e�.?rJ�ԩ�s�4�U�EW]���
�ߣ,Nԍ���߉XI�tcEu�կ��[l����tnȿT�f�"�D�1(;6�Ѝ�T�S�n����տMĊ+�Xq]}F�G+A������iɷ8�6�Qq�E�i����O�~��;�?N� dҍA�h%���'�vW��X�t�ߦ{Ł:���k��}���7zz:4��ē�MĠdҍ����v��iE��u�%�4ԹD
�n��ӻ}}��ښ�#�����
>�������k�k�F[�o;S�:e��A�)��΂(8k9�&�gp��%_Yk���<�hV.�hO"-�n\_{^���>�3�:�l4�UX�s���(d���e߱,�i�ߙ�vͅ6h�Kı���'ǒ�?(�ƞ~����*�*��t�-i�ũwC\㢐+v��aC�0>�%�=9Օ������_�1DT�a�����s�Z��+��jxF����ZK���R#�%/��tg��g�Q�Lk��F훀����bX|�s�#��1沠R���a�kc�N�_��J�'v�_:�2yd�S�Vo>�:��@̐�={�a�z�&�*�:�ZePdw��&�8w,��-W^�����xU�N�8��4u�I�!������Z��]zsE����TXi�9P7���\�mM��[�����t	[���͟>�*A���mV_�X��聿c�K��(Y�ү��k"u���]�8i�v��Ƨ&��Ԫ���7�Vn��7�C'y���7v�w����kDL������D[\{���vZ]�4�:G����T�?���F�[|��(�7��Sߪ�_1VN5��xAY���/�l��v�\~�'j�qy{t��.C�v방������UL��]�)�������=k_���}��bLjt��/]��/M.���JY� ��nD+
[U����m�:�n��3��+b�y������f�ų��������^=�_.�v���d�J�/��]�:�("
c"�֪�!��]kF�m���_����x�yM�W;���8#�x�	(�DQ�l����1��H�a��*.]����u��'�^�w� ��J����|��l�>��񉶿;v��j�F�F��
��T����}Nc_DT=�5�t���+���OF&~r��uO!�V�p��sW��9��p\�ฎ�q���K��zIEND�B`��PNG


IHDR\r�fMPIDATx��\ey���{���}7��C�	��RD�x��Z�����"�E�c[,���F��o�^��X�����Z�T�h���� ` @.$��&��eg��>3���;{f2����n�/��dw�s������y��"E�)R�H�"E�)R�H�"E�)R�H�"E�)R�H�"E�)R����5R���'F��bQ���"ˆJX�P(����I�
@��‹�ܒ[���"�&�nPc֊�j�t�Q�'�'"=�Y��	��ʰ�#�>�vw$�͈�5
[�ɣ_�Ȧ3���x������?:5��N�=Y�� �P-Aa������*Q����D�pƀg���y�
x��=��L�Dld٩=b1Y�a��k�?���R���>\v�֥����ߓg�3@�
�(���a�#������SU�����'d2B��YS���U�l�]
�Ƹ�_���M�F�TR\����#2f���ɳ��NU��x��,Ţ-�^�:i�%�T�ч�@�,�C{ΐ�
�X��5��_2~�����R�L��������y¹ ��e�`�(Z
E���#-z� 	F��d�m�����Ԛ�EDwF���7>@��')T.��'���3�B���X>bt–�wk��׳���DG��;�l?$����+��Y�O�s� �\E*)�����6z�/�Rc��C����GM PD�E�Y_�j���(���5��#��?^��>�
RH�x���|߼a�X�22q��j��Gi@����6��vCG�`��������]k��"�V���̢��2^n#���#��B�P�%Gcǵ`Ќk�d��N��Nct$
�_����m��}N$RH�y��;;����-F8}t��R����͹vhϙ�twxDVh�|d}aͭ�7K�l!����ۯʊ��x�bd,b�h폛�zr��=(�t��t"+;
Q��}��>|���YH ��9�U�����ѐ��Q�ܾ�.`��9���}]F
����}|�qf���q�:ۺ�k���H�w�H�1�|ؕzE �̴{1=��=<a������TR8��c�ftt��"oU��;22�?Y�m���Ez�B�1���ڿLk
@�7޴������bhOKv\��u�&_ww�G�GƗmQ`�{�u>A�c	@��~`�s�r������?��"i��!"���{<���L���7���J���
޾гџg|s����;Z�F.�����,s^���Q��v�wu:�(�4�߸��v�y�B]0x ,-șmM0�MH](�#gX��ɘ}�|�G���nI�$ƛ��MX�����p��q[ǧ-��M��$z:
K�2�z�!���:u+')�IK�=�����-�_�6Pp�<��<�`��{�L�5��^�moI߿��������œ������Uߎ��s�{M��܀��|5_��ܾy��T�)^�֋;|�ቨ�P�o-�"*��9��s�sM��>]�>���I`�͏�e:��O^?8��1[&�8P�H`�k���T$������U�o>��
��n�v��wE6�	B"P�>Tw�O�V`+	�����r�X~�׮{8-�Q���/�z�wGGu����Vh��:�
�I+�B� T��N��w~���"us
��\ֹ��g.�3T��|l���EA9�R�&�i+���[ �X֟Qk��>UX�Ŧ0��#_P�y���C-=�8��oCL|!�TJ�e����x�~9�o�?-��8��{�O6u�d�2�=�"�
��(?������)�K��?K[�{ */���M;Rh1\���~)�&�z`,�?4�9���rNAP��s��Z�L��X�볠�*���m^�ô�*���ε����C����P����M�s)���Vd۸����z*-�
���s��m��®���kk4�m��D$�A�1�E<5�d%��>��+R8��䆟^���v��1A<��u�MP��q��b~bd"b�`��{��w����ᆟ�?���(�B`A@��������V+ĢQ(�E���e�@�d2r�o��Tf��蟚�\�c� A��D|@P��h�@�.!�)RT�(O�
7]|���0x��^<�G;��p?���� �;F�F|e��J�y0sp�@Q���ox��T���^���l�\�c � ��$r��Җ+p�� ������=E��7^t�֫�yM��o��u�p��=	���&
H���3Gx-/��~<F�Lq�t"��8��syFX�$kA���7�M�f�}�ѷy�{�?R�Q���$�Z��Ww[Pi5()Z�U�

𗯾�KS0x�[.�f��(d��3s�Y�_�LZE@�1�.@k���S��ˁI���+�	k�f
V���uk�J�4q��~!���9d
���K�����_AP��澓HkO9���_t�֧�0�]|Z��n��5X�(Q���)�%K���wǸ�*ł� 8��R��c�؛1|���tU*
��<֛i�k`qI>���$��*�YPQ4�%��BQ��u�$�T#��B���+"�ҡ̦P'zz�
6��G����14�ʓ��5�_gn�@J�4�8��?���v|*�:��z�DQ_04$2)�$�&�C�:!���y�1z\�S�HW�����O�/�Z���%�DW��WQTAU��MH �Mn��X'�qN+3�N@�4�����
@쵭��PZge߃O���|W)1�d�r^9��Ij�p7Q��Ȕ��H<F��%�5X��g�
X� ��,��*ώw&u����_���*&?I3v���m�&����14��i�*Փ1��E�0Tv�
z-�3/�rK.�2���G�
ㅰ�N>T�59
W��!I(j�:Gd��j��9����O�[*R��=�k^��`��ib�,&m����:�wHL͂��o��$-I
�������꤮��7����l(vY˔|��S�kn��h�s���
aq��#%U�:�'�gv7M���%�9T���i��[޽q�I�T�=��=�.%DQ�������!�寵�b��?v\�$n��1u!����Fy�О���3�*'��޵?x�xA�6>�	��)���{�IX-x�uZ�:u�d&�
e�c�`���[�]~R�/��ޟ���~o�`����&��8��c˫��Lj���
�_k�� ��`TQ�f#���-��_��G&B�ݼ�,��}j�X�j�;��z��&�q�qݹ+�WITQ���!�3PT=�
�)���'�_�)�շ�|씍��61Q �j�!�;�7�A�pH^kοKb�c�X�H�}�5���" UZEˁ��‹o|���Z����S�;��
YY��[G�:\LtJ%�,V@��T4�y$��V�R���%4)u7{����t��������5�VoZ��JT,Ԭ�%�U�Ab���{�:��h��GqǤſ�&Yg*0���<�����o�^��B@	�x�?s-a~�.���m��@�1	C4�Hw�S��1����đZg=B�=���x^���"4O������qL��XNgO7��A�F
����+R9&� �S��j�GU�k�t����|�y��á/���\��&��+���S���D�pb��U���Z'P�I��\B���
 i�=-֍0R�ǣ.zߖW���/���^62��@����\�
la�h킠�=fAP��<ލC�:.��ѿ��Z��� ��>w��ms^�b�y���$����bD�BG,R��_�w�`U�X�7��1M�jK�.�=�Y��+��L�?�����~�Ш5Ԁ���O��#O ���֎x��pG�Y�S���6�qHLR�<��c��q`U��'��z�W�`-j-��mW�,�"��_l3����뚵�Og�|���������ec4	>MD[�-Xs���_Ům�(���
yL�
1���M%t��I�Y���A������Lj#����3�Ӽ�F�0B�U�(�$|&c�zB{�G[rYC[Ƅ��=�|^l�h�x�� ��UE;��1���☋ 
�V�
�؄b]�TI��h�1R��uƈԢ�TTE�O�H�>Ĩ"I'J�u	��М�r�;�9���k{�۷�U����C��#��a���r��U�	�����}�T.N#�8.��N^� 3�U�"6Q�����c��6V,ʱj�Gk�eY�(�����&�W``h��C��˳c�8��"��"����I,���Q*3+q�8O"@��ۨL�wD\2�1�{�2�3
�<ƺ��|�:�#�K�M�gn��Ǖ��b�ߗ�����/��k/u�9�r��gF�*��=���Y�Ǿ����
x9��**25�j����x�$�uS������c��$�A*�3�Ua�
�h��7˙�up�N�?��D�ㅈ�����8k�bP�G?�;Fغ}����	q`M��ᱡ�
a0�yD� P��G��!~uEb����A��Ca7�;B�\[���&�Q�O�L�I�LD=}}c���3�?]�|e�}c�H�#�	�����0&3��&�E����Ge����
�+�4a��[R�� 
�?�4��"6*�������Z�����'Qdyd�A�}`/o%����!!X�F�5\W��ۧntq��u��rȮ��dR��H �C���q��������|D��\D�Ș����/���ZyիdbN8����ֱ�g\5;6�;�Y�v��؉f}D�Z�x&CIT�j;R+�*�!&�*�9~��s�UZ�Z&��o�c��.���C� 
8cu�?%�?���v�
�3������G��'{��C�پk�I��zD*_&�h���T�
�!�u�L������y)�~wH�#_�#b����N�T�q"Ƶ����!nMK�}n,�z�v�xO�;�Kny�me���c�M��9�� �?�O&�C�L�ZU]@�����im���aqT�ǻ��ZC�XVu���
�F�B�ؐ_~z7�p	�V�3�s�_��~��(��$o��P'j�v>曺���uDBݴ��	:UD�,	��;OV�A�IAc�Dp	��+�t>s�X������7�ؖv鿹P$���:��u����z"��ؒPA|j�%�[Pu\@��Jª>)?�1q�(�Z\c�qdޅ�b�g.�/��%m�%�\���/[��<_���� b|���:���#�eRY��q�Mc��xqD�N!{���V�8I�:��}=3������P��n}ډ\�2�
�(��\��o����u�͏׎㽈����o���8&�V�fq�E�y�UPMrGW�����vV*�P��c�L���	N[�Ε�Z�ƕ�����v��@�L6��9::j�/WvM�-������˯���1�T�Dwu�I�0ƀ�$�t���\tM6�7�����%紬��'Gޔm�|l4��}Q"��G��#L6{� �q���0ϵ�J��w���`�\eAPI*&��P�� 8ٿ���w��e<��>�#�2��������ݢke_?����@�c�LX�$�f�ʼ��(��& G�n��4np�Fv�Ax纝�h�x@{���f.��EK�ђ)@[λn������c��%��5�d}�b[%*N��v�1�s�0�:
��mAP��]bAH(�)��Tm�-���pم����8kS/�Vu��=r?�#&n����u�|S�_$^�YA A�l#i����+=_
.�H��T��S|�$��.���G)DJ[�o��r�ퟞX��y��3������AE0^�)0e'`L�T@(#� X��v�VnJM��hb��<=햫/^�y�wq2a˶Q��OQP��q�"�Đ09���͹ʖ`�6q��.1����Ll���Kx���^�����u�R�:��63�cъ�_"[��<^�0Ӱ^�5���#[Q/� S�� �d�����R T/�;�y�ED�M],��G�1�^�Ƶ�[����KG`�A�u@+�e�E�=�tf�#'t�e�²X�Fh
6�����Y��w�d��<�l۔�; �2��$��#�����Ѳ�|�Ĉ3�v��k�]ѯZФ'T]�'�u�ҙ�y3pSK	��g~-�ϼ�-,_��]�vS(?KR�m������1�9�:M�8ڡG[yM��u��Z��Q~��\��KJg&qpܩ?{�C�`�0��h�תLɋ}��+କp�J���Cwg��]��;�=�= ��b���w�ޙT�X=�q�g��!��"q����걋�sq���V�E�8u�JX/nj���O�_Ԗ5���)g�F�����d��T�m�(r�y�@@�R��{��Pu�@��O�Qb�	������}�����l�omQ��ui<��g���~��M�/�
:gn=�[F���w�grqD&.ʖ2�]l�xqw��S"��
�x�m\�7d�UkG��IM���I�(H��&��k���������kƋZg�qD
�-�o�B�3m�;G�� �vD�rD�c�@�_'�4C�b�8c"��&xץkx֙=3b��yL��G����s���{=�۾O_�=�_/9��8���MG��g��	�E�L�䱍�)d�x���#� ��v^��y���1��ǫ[�g�5��$�uW������}'���k>S(�N��̳
`�q��/�x�ԗ�xaI�����`�u�V�E 6
�4y��
�����A!��=��Ǐ`h����ܑhQ��x�YB�?��xv���Ē�+��L���1�=���1.�Fw=�b��Z��’�z��$\��������{֟p���*�����Y�?��]O�d��q�Wg��`JvҠT�����!�:��ch���O�XϦ����z���%�	$�������	�;D���Ǟ�����P/3��5���
^������r�T�A¤�݁s��v�%�SX��KH���/�v{���_���%��ɽ�Pd�P�Q�Vo\C&�E�0�	DD����&B��`�eG�	�$fh�T�����7�ޥ\s��w��o�M3G�o����3�#���bi��^��"F�\{���v:z:h�l#����Rn�
A�(y�!F�o��?'�_3�0&�{'`H������9���1�y*ƈT��N8���#!�O잀���e���x�=c-�X,ZaŰ

jAUJ"��־�
u�fܹ�c܃��b�1��d��i��-��[�	�7�>t���|r����7!LoK�����_?�L��g
^��'���z�	�0~8��!;5�Lv1�j����|%�ca*�32UĬ�/=�)�;n~Mh��fm�߼��<��K�a�t��R:�1�'Q�:��yg檸d��8�.�޴�R��]�wM��M؍xq��W��2��x�l��{�ɵ�Njo*����ޫN�q���l�Q�X�B��q'���y.�r�}�E���85�7Pf�P8��Mham��Z��\A�����}�@��*7���x��E~��{���<�73�Wb� ���g�QTi�V��S;(L*���$�y���GV�JK;oj����ǃ���dt7�)�㸙ҹ�ɔ�*b������>C�>;P�����X�
Cg.�+���Z�u��8��3��E��6�e��QD�p��{!�������5%�J��ų�Y��#��5�<Pi�
1*��a9��W��ޙ�`��O"{��qi ���y'D��؞
����	A1��g��3B��w-�CX
�YT��
���
�`T�қ-�׮F��0���|sK��s�'���/@>�!�������DDA�9�%hL���.�	N��!|�H��"į�>�<�	��&"�p�g�k_���w��*fQ��N`զ��X,񛦕��x�V`L������DN�	��ի���6X샛�?y���?ѯ���wŸ|�)օ����(Dֺѽ*��%Mra�A;��'����.�-U��{��(����6+��/�u��a=6U�(Q�׬ ۖ�(t
;.�Κp��L|Am��
��l�
x�y=�wFw���R��)m:�U[A)JBW�qB�)K2����B�X����s	U��T�C%ٝs���#T.�;	CT�/�u0�'D��x�l�6t�霵��zXlV�;j�f|A.�-�XI#"��£��gC'����)
������K�:��i�X�^�a瓣���`D��={V��O��)ٙl�O��wi?}�����>���C�56MeIe*�� \���h������;�ĸ� �r\��I���i�sf;�b!޹��b	�:���;��r�����ѽ�E�9�Dh��}gt�	@6#�#���?��/†�׃U"$ݽ!1��k�dp�$�*g����g�����E1t��?S���~_���p��6��g�A��:�Ԏ�.�]"'�yqO�b�BU»d�j�w�'�����_�5P乪�*�����V�A�j�l(�N�M����"��U�.=���*����O�Q\�1�3wا�]Ze�`*�IFX�u���:��L���H��:��Η$>>��nT!
�9�'"�Ti)#X�q5�\�mAw����w��(�����cT��

��;^��ޥDv����ZHc��E���ⱊu����d��u.���v�ƹ�.GYX�<&RΟ��K��"�A� �5������c���j�0�8,rj�e�E.~�2@)�l-�����J{4�g��Id�ңjuވ['p�<
��]�W����Fx��y�N ��	��Q���Hy�fU�t�w��,q��bYXr�R����aணv�q'W�@�t@��ZPT��M9֯lo��u׃�H�֏��ڀ��Xyd�R/vV/��*[*�u86[uz����⚺��Kx���s*��������/��tжL����|����u�߱�����i�����ڗ�hho�[���IB~�f����Xk𙧶!�jL˜��g����b�s.jFw��T�L��˅U���t���$�5\�*��t��%h�$�UQ�m
J� (6
AmbA��S�����zq珕���j�o�⢷
�WP���^��}� L {�˄�d;_OtO��Z�X�Lx��yg}�Kvq
�n��H�l�1k�A�Y�b�X��lX���~��:��	*q�FnM@Ј�|oC���ѳuzm��.n�i3�vJ�(P�%F%�I��1���O��s4ᥪ���N�V
|v�@0}T��A����a�(�x����ֺ��T*^�N>gm�\l֋���_{F��'�\���?4?@�Wf�<�ZE &Ҥ޻Kxj�y7�p�R�NPz�����շ�.S�k�m����kCX�z�\[,��՚Vi���S-j�I'p�uߟ�¿�`����ֿ�vD��ف���A]�w���o�]�SN�;���.´�������4��� ��u�NO$5�?k=Q�/�8��v��!Qg`Y��<s��[ax���V%�	|�Q��cԁ�&c�(����8�����:b;�Dwj;��=�S�&V��D���`q?aPqڂ	�=��Ģ���s����}�����O�� 󭿪֗:5���7d|�F�%<Z3������)�:�%|-a���i"�k�VNc��Y'�Q�U��+Z�
*6.��w�z0p~j���&����C���K�2���J�x�>;/"���G�]�4P���s��	�A��

���jA���A���P�B����|X��֍��QCSi�BxA�>;���oD���]Y�D1��W��V�P��>�nM�
�1��=����_��e��ͷ�.��X#i�7��^���yef`��m���E�ǪM�Pa���[��� *�n@���u]u����e:Wȯ'��J�G`�@]���h�
��*����*�6O�,s��e����Ӂ=R��ګ
jm|/_��|)ʩ���w޿�.���g��N���ɂChm�T��ޛ�KV������������M� 
�B@@&���ei	.��<#1����>��M�&�$��d&��F�hc\�"�����]��,�~����X���vݺ�繗�.����s�����Ò���:3�VG�'�M>�{R;�`��),���+׫�D���!��m�����P.6Ø�H04>�V-GOZ-X�A����%k�
N�d�NT�J~�褈vY0�j���'�$Y��GvlqgƓ���Q���e��s��>l
�wU�w��v���1?b7R�ս��D��gq� ��1�@}�5G�E�$�n�Oy4��UCm���;SF��;P�K���-C��و�8J�v<Th�1�)�ٸ���!��|R#Oj�1<�l� ���U�J���F�=@$�^�0��?b7i��u~kN����>�Gl>v#
����(oq�Ŵ�##�]�ޗ�.�?�-��e06�,�l���1���e�Y�l��(�Y^��C��2�ش�/���h<5�%��\=]���A�t>"l���a���M��I��e@Ĝ)@����ԩ�c��K��h����eD��;f>��z�ɜaV�_�).!&2�$��i�Vޱ�_�_���.q��"1��n�����q�о�\'��z����@6irМ����#~���%�L��@�WQ��У�@M�i?��1�Z�'��摃�>�����:��ÃČ#ϰ�?P�0�� ��R��]ɼ�O�&m!�L�24�!�+�K��R�E6�I���@�E��p�qQ�@e+��8�2T끪��O��h/4���"�x �$�s�/`���x�N�Ԧ6�3h3�ꗨ�K���.0lvV�S���Z��k���ؿN ��A2��;���/o�K�
iJ3=-��V�K�u!Bț�x`�5��P��8��o9�z�Ms՟���6��1�5�o�Q�[�������֭,�����>�����X��#��t���,L�(���J�|��]�b��7����b�<v��b<��K��P�S�w^~�0���hn�Ӱ]GѬ��r1�h�����?����s�L�ሥ�Y�bq�Č��hVцx=<���K�,�=ƚ�#,2f#2e�|��k��B�w����8n,ٽN`#��c	�r���(�D��m��l�U���;L^0
H�~u�<��a�lZ	y�4y�������s�Z�]���Y���>�se�"��m^C�>�����jஶ 2:�zB�i���qkhw1�QT�/m`ۻ�F�eVg�QP�MrE;��
K:U���a���8�h�gVnYq=�mտD��w�?b6Q8,[��9��y��Ѡ]~m�qP�G�~?v�Q���P�(�	?�-,�vq���G_��z�&(
n��H�pD6����h"l
G�;��v��d��ӽ@���Ĭ0��?�%���_��"/D;,�'��%��'8q,�-� �-!�����	!t/�`7���!�e���u���[Fh�3����_�_r�Ѵ�C;E���VoW���]�Erw� K�|�=t`E�ʮg~e}�uG��+�}�v9}+�Zh]���4ȿz��gg�˃۝@�Y��_�w!�7�7��l�\y����=���֯�Gw�/h���'����zv�W�lDF[$�l
��!p��/ۚv#J\�AWQ�Γ�ذu߸q;��c`�ީ4�z������'y�k�����(�
�����YLpX�d!�YJ��"�o�5��\�<��6�������>!��n72�IH���_?�]�=�ZyXş���y��#�PT����_���-]�4Ͼ&�ٌ�xh�/ߔ�.��,#����������F���` cQ4���+����nŗC�3����X닸���~	�{��^���'8�xc�b�4�g���������م�n�z|z�e�F�X}�G<;�ۭ�Tx��q)O�z��O������OcJ��S�E������kͼ�PRx�Y�n�������|�,�]jp��P�{�K�QG�
�[_�m��!v���vX�W��D�]�i	��Rg$�M�ۧ���~m�j�q�Y�oXJ�����Xu��.�|WH<���L7�7��,ɧ/����iߥ蹟�F뵛��m����H�?\��q���T����P�>+��b2y��$�ߘ����{ݕ�a��_�B��Wo5���D��3�c�/~��;8���Ɣm<ވ𨎫�O�[�ٶxd:�ă�ּ
��Ŀ�ĞVҧ����u�����0��nS��;R,����?�C�(���@���${(�s��d���yv���:����z�Q��߿m��<�}��/~��N��y����Pr�S����~dlo0%����WM��+>=p�������3%~"��ǡ60DZ�/���Y+��_����es�}��T�
q�"�����
��%�{@��?����ȘY�\���,Y:��#�6����_�"|��۬5�P�e�D����O���f�}��<��/~�::w�R�g�S��(��,����iE=� �D��8,P���
EA�/w��gƷ��x���Űq	�ӣ��n]��%Ʃ[8(��'x`W̢%�if�'��)���×8�C�7������0`ސq�)Ή�8(�\|�?���"�����M�s0^�B�sP|������x"�OU
��9:��7�b���$O��������T��M�?fCu�τ�\j����P�;8x}-��̃���w�~!�������c�y%��H���gkh �@u��H0���o<:�A�j!����ƒ��{����/6�Jc�B�`�籔�}�aj�!�ڸ�$�>���dYF��	����L��xJ��5.~�8j�9T&�_�}q��q��e��'o3����_z��ۛ���#Y�t#-!�����Kc����>�C�FH���ifF�/W�"��q���<W����ƌݢ=g��;ſ�n�\�'>28i=��,8u���wnkq�׷32X�r!��͡�U�?�h%�gz"j5�@�����g�ϴtx�)n�aD+w���C"2x��v6�?�o�.��>Q4��ٸlϑgg
���1��G
>�]�'y�r��7��ɟkE��^�>A0:�>�����y*����!�̭���
3:J#��>�<(n�����ğ3k�1�ีƳV��:J�g�5��on�xLs�ɳ�Y�i'-g4E	�����9���{��szaP��ᆁ��q%�3�Z��?3�x��|g�\:�܁�[������&<�s�c��LE#�VfL0< �Lo,�5�`�bX8LWyxG��|q��$^'K�(p�qK�
*���"/�C���F�x�n_�¢�ÃQ%|{�Ѐ1oh��焵�*����뿱���4Ӏ����8��غi#-�쑿ݗ7���߹���N���K�/������l����Į���ƈ/�8"-�{��w����m�F����!M9b� [6�'��q�;�����^_��jt�,����)UQ�����4�w�0~|_ċ�vN;��+������_��IKu�"F.$��Y�Y/ڌ���4��W�_�$�r�_�A��?�sx�܅`TL�?z=�9Ɔe�φ�E?p��97���>!rb�����A:�`��a^v�:�H�J�'#��c_}˫��G��aB������TL�?x`4w<b���e�q��κ%�Hn �?h�#���p	�l��/&�~�N��߁�V��a�.�?�͟7�n*t����F���s�fH�z_ʗ~��F��4RwG
�c
N<z	�=g�-���#�h���#7]��e'�ajt�>�x]�*��]�HE�����Ap�:8a�����=��;Rn�+�Px�48Eb72L��@�� 6q��K�
zS����Ӝ<O�`F�����N�K�֢J��A���w?_���e���9f%�k���7���Q��y����#�	L�p��{�h�8��5��#M�l���\��Lc�:���%�}�/̛���q�V	�A��` 6j����y��u��i���t��?{0�����c���4w�B�;0@B\�	Bp�ɚM�
�K��J�f�>���/�Ҍ���˯�p���1rIQ�ϛW�wy1q	3v˞�0���]0�ɷx,�'��3�����Z��1�-�ccb���s��H9�b�����HX���\��=Pdg�����W�?A���3��%]��"�|���̙;��^�D��h�eĶ�{l���"��@����	��H�H2w�!�$%ie��8��� G.�; ��&�V���_%�f��4�֋V��t�]��m���7:T��J�|�b�^��h�f��=����J��p�#�$ �\�`�ɐ$�����;u#����F�磷��t����ap���Rᙻ�A�$�f��Q;8�r!�0R ���Z�i'u��'�	uY�VJs�yٕ��]$���X~I���$*�u]CG�P<&\``�䀐�Z�"O3j1�j������E���+.X�W3:���
��ڐ$T�%b2
�~�&@fHB���H�.Ҕ�^��z�hf��)3!�b�+�L39J�{Ǻ?ʲ�	���_�2r��WHH�0�2��W~Z-Ϋ�e���W�?Eh���]~��o0
DL͢xC�&t�
iZ�/�W�ɯ5C!c7./;&���ȳ����<C����i�5ZQܼ����Y��<-~���ި��oB�Ȭ�0+�?.Gf1f������i�|�/��	�����~y�]��M��U����Β��;�!���<խ���~�A��l�<GE��_�m�J~w��|t�q
@_�'�=�Q%������a�D����0�Lh��2�0a��V�s�_���:�T��O�Ͽj�\�[��~���޽��<�yNE'�}���	=��r�` Cb�;�3E���b��g����V�������_��L3��d�9i+q�^*���DE�@J�
���I���i��N]ӑ��z\~B�|��p�fo�p�{���P���բ�T�w^w3d ��%@L�@.�)���sؼv�!���_򗌏7����ݰs6@�W���"K(������/�pw�؃������~a��kk����Wɟ&)i���W^��&"#�^����B�Y!�����}Ң!�'���ʟ���Z	�.`���k�U�k���.���Ͽc�C��-�x���W��=�#�	�@��2�&�,Cy��������dl�x^����ϳ�l��O�c��{��ϓ����t�M��u���Q���h%�|�
����'�>��9�"͋�_~��r���~���Γ���A�
�@|��ѧ\�#Ф�9 fPd9Q�t�b�l�U�giF���FV���
�?vJSa�Ԥ�
�^�$4}�H�=��{}�09���Px��S�R�ESj�i��_����}��m�f�
���5[o��oK�Ǒ4���!{�H߾q��7C��p�3�����R.d�ڹ�Sh�	`�/#;ǒ���.]�=BDq��W�p�i��DW�^E�z��%G<����OzR�9z�x�qΩ������I�����W\���=�W�zE��G�$a6 @=$����`�#��0	9x9dI�
k�t�`[m?�2��
�4��կY���=Hhlߚe�x�f}/}/'�&O�w!y ���/N(�9g�m�^���O�f�E���v�������7�lE'�$yVI?�*�هK�AT�",B����1�l��j՟~��4�1�i�6��k��U0��=+��r??o��CQ
�����1"$!���X�`ϙ�q8�%���,���Fw�?œ�K�|��]�(=�?�{�W����B%�4-\BE@��0҄�����ԫ�4K�E`׎�d �/���磊��q>��u��?�C�I��/�	/
���؁�lR{0�Z,^0Ė�i�	`6V���Xta6��`��߹�]�y:>�{8���O$p@A��3'p	�=�<8�f����eۯg��_���9�!^󶋖�@��S�X�?�P��D��5��k�<=,�Z@�P�oÈ؇! K�l�pK�o�i�V�R~gd��ė7��╟c�1���u�]}%����A�o/!T�������o�������ee�O�Y~���/o���n����w�~I��dd�PM��P������/ ����.����&V�
�h���/
v=�+�x��.Z�a�*�k.u��&ccx(*��W���ڃF4i��"ω���^\n�y��ᗿ�v��"�W]�����D�P>u͚��<|4���p���4������?2�!iq��먕m�ޯ�ݔ���n�qŅ+?�%b�w���s}(����0�'@����YY�%�"MX8��k�d|�
�EgH�l�_��_���
��k�r��FӋ���ʈ���(�r��{�����"M9�{�~�fᐿ<����c������
��E����geI��&H�?���;���@�	�W�e���#7-d�²�7���1ֺ-��ڶ�F���>��߾����賳,k����r6PG��e�ϐ@��`i�W{�Y�8��e��~ӆzD~�ļ~�V�o���k�_}}��g��cˎXܸ5B���#�c�1#�����@.��\Cȅ���h���[���.d�%�0k�~���9�}�Xq�[�Y�>��S^�������9����. !y��?dB�.��B.�-^����`,]G��%���f�����h�G�C"��O�k�EQ�+k�<K� ����@Ry�;Hxr�C �Ξ��3�f6{���8c���p�̒�
��޽��s�,o���^��N���O��#;f��}��m��G�~u���{�����>B��|��G����5ߡ���s>���7���.nK��ȳ���|��� ��^V>p<�$�SW`e�ov�wM,�	�G�y���x�>ǘE\�����G��Z-�3�"�q�)e��E(�rM��@�5>��5sx�+h�"�{�C�b���qB��cq�+/\�mf	��x�?��tK(½��QB����? �����`N��XH9�9K	NO���Y}I���$�x��I�D�c�r�����mq\��9s0��*bf  ��|B���=�w��Q�w��s̢��חU?�G�di�3�ծ����,$b���w���i�E��9��<m�ԋs�:P.5�_y���!D��<˨���:��O�S�%�l4��.y�wy>g�,��Ġb��������V�/�j/�K
B���FF���XˆUÌ4E�y�36�$d�]���U�����*��?h����qʽg<VV#:���^�U��'-�X0Ȇ��eۯ/�~�W��v��E
>w��F�$.��{�a��q����

cf3��;���p!ǃ�.�(H�F���7���:��B:��Z���l�h5����Wo�x7U��2�ŵ�!
�'�`�w�����B� ������VOj�����I7���\��[TL%*N~��lټ�Qd�K��������F r�!�^�rLN(�@�r���{Ց�"F�:l�u �VJ��B�D�mX���toz���7,�X-�_ofqmw������~�˙@��/�������+W��@�!i�h�'x���{���z۶@E�\j<�ȧ#�3Q}h��YoU9�@�+�<�PdIB�	�{�f$c,ь�]��M�f���<�Gb[��/٭�l\�'q<�F��{�Dq��D>��#Mj�ƒp�	E �%g�cÊ6�~�ɀ�����V��o�������WP�?�����^��' �>88}�D�$�M��/	� GH�M���]G�C3SO���$̈́4�(���Ƶ��W^��?�8�P���y-��c:�j�Aj��D��Fjo���m?a�?�79��Q.:o#��m����Z�=�K���r�?�+n��
�^���y�6��l!̷(�600q�C����|��(�\��vq�����eۯ��ϳ�4Iɒ���(�"f�&,��y�_@�E��
]aA' �E����`����ij��I������������-��1#M���EȒ�$I	E 2�#�����/Z�cf2UTl{�}�Y\�Z��a�Eq�NT����P��)`�������+������0���&�js
~�fdiN���"��������l��TTЏ\���a���c{E�ٞ �Ո�����쐪����� w�V/��+��D�&��S�y^�~�{P�}�(�RM�����������!�u�Y�|��B ���jўP�b0{��֟��r�!��vr��kٰb�l�uC|Ix�e/�@����Ql�GƷ��b��\}�5�CE���bCo�Z��rm���aQDװx""��ݿn����M�q���Y0�x-Iޙ]~�;��p�bB�@�w�ad&n���w<���7��t�TTP�_{�dp�CƯK���F���3���"$G�'�^�j���sֱt����,��!�B�"w�~��~DQ�=��b7�
����(�n��V�Ѽ����N��,UT�u�.�-|Q�H�(��.[̓��XR�C2>�ʥC:�%43YV0r�NI�0�{(����~���]s��/�֔�**z��_s��(/NܺqhަE�]Y�JZ
E�����Pűr��zs�#�\�x����������������������������������������������FZ~"IEND�B`����?O1�~
o�z6`*�b)̧��\�ⓝ��oOڢ.��,�m�޳b�x���}����G��V��@e�e�=�6��N�e���_�����x���[ޣ$�&��y]h�"B$���ro3x����qI(�=��j��YCG�ٌ��%��s�15��L�;>����6��u�����26;�?�s�㬢�4`s�����F��k��pEiK����8�C��K��3K��f�C?��mI�[�6���B怮�@��4��:���J���r۸��_���JJuq���|ٕ/�x�M2��}�d��@b�`Љ�o�C:ӷ>�S�%= H��d9�w;���&A��/8�pHy�l6W��?��9%�s�c��d��9r@�QD�$I�T\�p�5�I	�5g�H���������_S�А�⑃���T����4�ej�)x	�)B��,		K`��ӓ��Wg�d�":��bqʅ"�颣�h���0ј&J?�$�T�0��e{g�,��`MʣEL����	��qe�T0�=�x)3�Í'A��Wo��ixK����{94�k���U��C���K�w��#Ph̒�>��9?S�%�	3�)ƓrdF�kq(���U����YHE�H
���l�C&O��������G�νk�E�D��_'~�9�u���y
f�0L�NB��A��91A8/p��i^Ln
2P=��)z8�O���I�y�BO��D��-1�Ɣ	�ȵe��O�?�{M@�yH|����n,��L$�&�b�?&	����)1C�M��]�ȶy����{$��d��]�O|�1ܚfI�Z��߂`��@;^��]r�EHN�7�E�h����ww�n7TYȄZ��/Z{0���#�j�ژ�D�!�\W�ҍ��b�Ea��S�)ȕ�M:ӄ�b(oyps-�� ��f_�p
<L���>�e(rEc����Z����1$UI�_�m�]�,�IFd{Dž~P@��@��=�&���ln^1��X|�����X��^p�R�é��cXY��13���V���=\*��b]ah�L�.#DKpQ`���,Y�:[���³��e^�`a�.�
���Dq,�@�� �P�T�g�t�i.�����=�tG��o��s]3��Z�M��z�}�e/�,,�������� �N.zc��S��T�h�c�6�G۪9�AC9��,����5'v�\.*w]kW�:��rq�g۵KmJv�eX����oXO�3����"e�;��Er�����i�?ڗ.¸mp.۰���XBb�w��d�qL���$�=2�b/6���L���W���4�>Qn�Ҝd	S�f�.z����cl`��
l�������D])��Bh���(��pO/����d��@�W[�
�V�� �|���<K��E�_`4���P�.���,�`�n��	5=�<($g���<#�gޏk�[��Fe<y���%�c�h�$b��땵7�y�+sN-e���ोW�ֿt�6�p�4k�������j8n�$�Ļ�X�vP�)�
�Ok�����*�Z~�M�'��B���_Ӛ&Ȩ��X@{d�K��w�<���X.D>����6Fc��B#��k`��`��k�+_�V�7�h�J�a�K�ßv�3y�p?"�k�y�I�?����D*O�I������]��<#�0�������7[���@^�F��N1��2���x:�I�OZc:F�hR��Q���O+V��W}�/��GHV���e�X?}PЈ|�~\9AK�2�NM�\��������Ͽ��_}��������J�x=��gߦ�d\Y�a^З��!}/]�{0����QԨY/b�����@��b�.���զ
V��Fz+w�6��-E���
�L��6���^B��͌�F�TU�)hj���h�4sS��p�!h���8yPd��@��D�OD��;�jO:������g[p�;���%O1�{�	`�Qa�դ#���d{��}�nw��LEXKQ�B���W8�_�>j�)0(��~���N���f��^�ij	`�/�Z��[�C��Xp�,Z�_)ې'��Q7�����
ĕ�P�;�5�cѨ���&����N,��Aqoj?�n
�3z�����»�3�%j��'	9(rD�Ć���Ι��s6��,d�7��C���X�Fc�:�y��I���"pZ"���i��F�~La�
��Ps��k�M8�S�V�p��]��p�&������#�a�RO�t!C��x�0y��U����?�)�''�	�ӳޚ�lFZU5�O*���H��y�KR3�;�\��{�ν�3ѵ�=�ﮀ�0�B8����)�0�e�@f�@��N�2~@�T��R��
a��R�b�7-Z���֧qN�>J�ģ	��4�-wǑJׁ�r���r����@�u���PO5��j���i���a��m���^��&������ ą�C����yi&-t�#�_ǔJ�h8�=�G�*�X萰��'LǩZ�?�P��SRѭ�*��JT�^�bF
$����آ�����S�����mH^����tt�gP�'DFb�̦S��I\�p���JZ��Iu"��J��+�R\v$��b�)&���"�kO��Қ�-T����MB�-���Q���
��Iy�Q�e�[�Qş�䔁>���N�><د?��]c6��~,���}rϓ�����4�0w��[-R(_5d�}��m�	D�)�â/ܦ<����{��5q�8]1׉3�f��8����?���Ƒە����e_��e�Z������̵��\a�4�:O�mUK�%u`�3
��m[Q���l
�E�[S��%�M�}_St��[�h*�ôSks&x�E%p��-���!g�m��v�9��cW{��7"��eE�΄U$���W��Km,jH�R�)�Sh�#j��z`��C礞>*�]��/��Ϗ''�Ώ�4>��xF쉌��C�c2x���z���G�t\����I�`���$⩈@��iW��C�b<d�5�u���k�K�I��L�gI�ǻ�����@�ؐX�G �Cr�$��g�M�%$
�<i�-���؄����D	v�mǑ6a�h��!�|�m�FV�A6�G�
��F��	jII�w�!��'�0�ʚ .i����IU�n[�+A9�ZU�Up��뉔ྰ���
���0�ɓj6*CԖ
�;\OVŃB���:�uL��Ov�CP�[^��%���;Mo�� �ݐ�5X�Z�4
��N} YH�Hu+X�I܎3V��s2p/�%�dy�Ԗ�TubN�#�S��|�[��Ѱ<���Ě�j
�E���.�hg��?�Yu�Uq�'�P*�Ѫ � �x`b���n����LZ2���Uv�LѢ��>��ʜa����X4��2�z�ܑT��}�o���tS�8)��d��?����6���F�K;�U�WdTO�H�.h�gSBB�Bm^`]�4a4	�L�A�Hh@�"��w}��>M"w�Z\:��V(�$��:=�H�&��a�V[Ռ�[�R�L�Bs O!^������?��3����S�ɸ���wv�隀�UF�_+r���M"w-`�Z�
���뭹B	*�wG�{��^�+/\�#$��dj��ڝ�]��?�/]�3�i��
mnp��I�8`��ՠ�n�F'9�8�b�1���-����K�`o�G�{E�<�%U�y�T�ʋ��>��v<��A�_��ś_O�0���I�����(o>i�8�����ݻ�u�vL0��pݵw�^��&�d,G����7��B�������-\���VՋ���E�=������ݡdsJ��nf':�X˨K�p��r�G^��B%��l��h��.۽�g=����[��s̿�NE�aNy�ړ�W��룹���RZ%efs\�$�ܠ�-�ː�R&cl?���M�l�ٺ���~}��1ϪܬM�� �7�[���?R~)n��
��O
ڃ�np-ۭwݭz�t�a�SO_!��d���`eD���ӂ���cKG�R�U����_�}�T4�0�C�$ҵ�̺&^A����]V�BI��]�p���W�8��!�a�$�r#_N(�
��8ɲ�A��X���`#�W�
�k�#����%&�P
R�Xḅ0��Oo�F�A���ݛ�u��%�4I�R�?4>���N>�����jYv�Wv��p�W&c�Џ�u��'�u�tZ�[N(߻�L�DQ���[��Qo�j�����#��!\J���BE%���c�A��W�nq(�m<�Hx{=�wPiyk��-[�I���+]8@��a5�N�%n��x\�̨\R80ī�@T�(e�qǴ�0�9�;�n�U����!N�7��X�/BI�2K�'s���ȑG��S�j�@}�WL
EI�,�})��$�B	��O&(kilm���+���3��s)
}��>gfΆ!\���|�Yx?���3��L���9�J�)m&�� 
�=�/�AP[�7`T��D������60�t{[	���f3f!a6�*mU)S��_�\^��^Ö�x��-��ÅQ���	���5a��e\��c&���g�M'ٲM�Ev�D����iȵ�A�vd��%&aʨ43�:<�q�0���|;͊lpt�Cfs1�o
�#l	⿑vJ��7�yA͹l�{mų�t��\�3.��G��b^f1�~�&b'�:�6����7�2e��Q���f
5F�:
 ʔ��Z
��S�*���?��� �˕��y������16�����`u��
��P׽;��k��z'\/��e���i6B%�^��V=�R# b�4�;��a��f�s:�#;z��t1::�x9�r4��z�"��F�yئuw=�u(�^w��i1�{"Q>z��1�+�bN�.����p���^�%�ԑ�q�U��r$�7;�`G�NmU�o�|�z��L�d�6�qܬ�m�i�JkV=I;;���U;�?����ɟ�H�]_���g�}eƲ��Z�r۸��S`�ve��d;�dG>�ze��Ǜ���F��$$!&	
�ǯ��u��O�� EщWN��M�	� u����Ng�lm��.g�g��t����1.:�(��&�A�
	;�n]	���H�
XH�N�
�		��0�ep�	yр$�&gX�'�'J҄-���	:;ퟜNЄF��h�xθD�@�Ez�.ؠ����Ł�,G4��|��:�IDb���8��;ݘ}`c<�f<�x���L^�H��&�g�u��$�aJ�;|C��c�=�����z9��,e&㨍޳�>&��}n(�7��[ً�?���3�Ii�>c�%HN�i��`�,�W��KrL$��x��

s[:ݐ��P
�_^b?"����'�R͎};mM�z�@���s�q��ŝ3:!�}���ʁs�P��3[�HGss"<1$8yD��p;�}�pR��<�H�T�Z	�6&�D;���C��oh�衁�Ue��Uwޟ����m||:�]�O��[�<�jYN���D}HD y� m��Ʉ	�c+c&�B,qys���wM�;.�B���;���IDwЀ��Tr�TNS�Q?X�!Iʥ7���8���-�}J�O���"�m�P.�b_H+0�H�~�_�"-��z��~DG(!S�����g�m�e�a���X��LPE����"�8�Ӂ�������v#@v���"��F�h/�؁	ߙ��n7w��\��*P+hI*#��D�Q�_�e��T��ב���g���K�w��NմRi$�TjH[���i�C#�'��z��Vd���}7!Q�-q؂*���H�X��P�P��uhD��d�o�V>���`ڈ�)���B[�(R�U��.�&b��Nsf{�OM��BJI�጖�����I
�-���yFME���T����9RQm�e�
Sb%�5��	��V,C�i�J?��#�����'=tC�iD%�TİD۫�פb's�%�>`@0iD�ܑ��]B�\x����j�q��>�t�R���ɵ;���F��A�xAV��<R�d�ӛp'!��d
]�j���5�^v�E�h]%b1��ʮ���j����D'�<L@L�66J��A�ax,I<W^�C���w�7VO��6�˱�6�����:h�.�S]`��.�T��!�q�M^����J�R�|l8e�.�ϖ����֮
ݟ޾}����q����D����)݉����z�Uv�!>�7vv~h���o�����t�I���iH�(a�o�($��xog�`����K�-��vM��YF��0܃�I!�ꕇ�c�	/ Qۖ@s�@�ͅA�1M<0+�
�+����9����!��^�3�i�Z�]3����y�4�����\�ԙi�[pg�$y��� �MжL�YǃgDŽ1~\��)Mz�ua�&)b.u�ʋ��l�����v��QVmվ!�jn[a<]��#��q{��Ӷ\��]����	J\5�[�<�JS5��a���"VGj�ǡ���$ɝ�th����ՆT8d���L���	S&ҏ��[�7|5��7ST��wwu"o���n.˩ɇ��Ȃ�,�[��׿[���d���-(��l
%q'kU���2��F��*���)�s
�$�W�Qs�c�.�����+6я�e�10RUNg������.���]Ǒ�qO��[)�V�Yx��Le'�˷-���l�؇6f�Z�e�xGuuv��DH�>u
�U�f����4����n�Ls���
�i/�5}fF;BAD���ݎ3���lGY��G��.�B�W|
�YVaF���'4�̡���U�bi2a��r$�K5(PC��+fτY�e�rP�o;h:��&
�kwB�Y���a� 쫗���W�K�gyԎ_;.�UTK�����ٓ�-���
�ǒzh��+H�
N�!���3[�a�-�?�O��/	�%�K�d]�kŗ����lM���K�[�eMf��O/i��у��u���6�6	d�<��ȯ��%�K"�W��Z�O�3۶P/m�mg�e�{=�͜�BW�����j賀Y��䛡�쨇Ʊ�k���5���\P���g��+��
ȗ[��9�t�Y�=��,��=�(�f�pc?�G���'s�e�4�6�9�O��`���$v��.�
��hT��oV��EV;�2�|	a���㜠F#X~XM;%�|no(	�O�
�;�'+�/u�����K����f������4_�9�ˌ�k�F��}�d=���%�_	M�Ĺ!���f�n?�1�~�Y�s�[��nW��N=���髦FS?���K�U9z8t�NdM�z���{Pys��]�#�v!H*!�ڋ��a�@¤Qm>G�Z+=v�%�Ȑ��r3cT����A�$��l�
���J��S[�*�h}��{\����r�~���*E���fM��~��Ԯ>ӿ��0J;݁h�J�O��4"%�ծu�iGk�����\ms�6��_��L�8�~䚤\ w�P�PrӹL���3���є��]�ؒ,�
��K��V�G���Y�/z�Zg����)�ӏ��k]=����K�ា�?7Y�a`�a�����C�F�ԇ��-4�����r�u-4hSU���!g��@��)����9�����a�P�\�xB �f,D#��f�#&I�r�'����8�b� ��/�yH�ş��ć�
)��#�4�+o�'��S�z3Ho�㛂d�)�K�z'޼8'�<��g�6�}„����1A��E��.�$����^��`��[����,�4rY����9�D�'̃���2�Ɠ �*��#�����"�7GRװ^�M!ⱜ�q��!:{��Yr����d�R��[�9͵0��9#�!�0�8�Y$i��ϯ�5�6�ll�3�dWyH�x��@P=�[���<hEjfH)X�J@LINx
�O�n���G]�����O��v="��=z��a	a��X��D�6����#	ۤ�����39�l���DB���G�{I6���5�B�&��\�[=�j��Aa�(�@YW�0F�O�J��I�4i�g�_]��e��Y�$�jE��fG3�[�]@7䜉�3QB��������2�WPOa�
�'��pA�rqg�7�+��<�٩��J��`u�i8��N�R^�,IoJ&A�Y��g�5�܁��҂�}����p8����St��)o˦������~8V�FK��]%����ɨ*�� ��Mnc1	��P14�0+<�"K#8�v�rq~X�RK�'J�g��z�FO��&���T��S-_e �vO �@���d6�"*Q���C�P�x��*N��^�M7M�C�T�Á���XhJ�R�tZ�a'^�j�tI-A���@�
ElH㯛ӯ֏��Mw��b4�&�!��2��^p��_��b�ѲX�����"���GӅe�Ъ!��1�0&;z�3*�"�R��ZBc��j�r?6
�-��
�����UV��8���һh��EM+la��JK�;�����cK�,�Hb�!
2O�v��,�#�28���!�>|+�L$�1:$��}��UG��dbW�n:��^���?ox�L�x�G>Fw9��X���=K���	�=��L�Kϴ�\h��{�t�5w�D��pŇ����w�Ns�N��X2���&+a҈��f��=FWy�Ɨ<��+���tĚ
!G'��O]_E
�x��/�6�6�a�{P�4E��}ۨ�Ň�l��X��-A�;���I�e]u;͚���w������c2�)���aS%��O�@�Ki�Q�RW�ԥ�-��955Se8;�3F�6�B�=��!D+�e��'��[�Y�����[�)K]b~�Y"�
���~��}
7��&�2Ü�����6~���k�	��+���I$^&Xq����V��h2�~���:�n;��Ok&��}	�<�ݦ��5��ߺ`�=�`m��.&��hfQ�i���mZɴ�7q�.�[��u�if$����u��4��5W�e�eJ��,rY�QX����j�?8U��L��~�UN�c`c�^����\�j�@}�Wl��+�Ч��4ЗJ����@������\����+ǡo	Ү�G�ٙ3g�2+��x2u��?�!7�gV�D��l:�(�뎨Xf�i�_خ�*ŭ{�;����%%]5|:H�Z��u�>���7�t85�����7�o�m�F��|V�P����;�K'���fpyW�K�t=�6��n7[�\��6�p�k�,���s�?4�G�
�:]�A'df�+h�c�
E�b���po?5{!E
�A0�k���i��3Ā�#�Y�}V9��&awy���s����w/ ����!Qtok�qT��XD�!�熬���"�(�h�Ws�����+�&������O�୉�ћ�M'��_ʾ�Vb�[SsoAz�$B�I� b�ԃ�j�M���X�4P���&�:QhN�ړwC�S�*mw柪�d�SŸ�����j��nJ����{N!�tO6��(��v�VÉ�y}�O��@"嶏�Q�7�ޫn�|8_8!Gl^Tv\=l^̉r����.���܃A��e'a�Ι��$"��@
	�*	��,I*��(��k��p��wF�'����
1e\6�=�j��wRչ�
;�zn���G!Y�t,��Y2γЃ5!��X#�ز�E�_a��Q����}��F�0��� �EP>3�)����hz�/�P��`��<y���C�S��c����F��AFq�\�����l&~`Kގ�o��ڢJ0��V�v�Tz���%�}�v"�8��<����̐}f\'q�@��̐1>��{Ą��|�?v}K��I�?�g~}D�ʂeC/��D�}g�6�H�I^)���U�4���I9T|;��[^Ð�u.�c��M��f�W
t�����E,��*�AŽ&r4��:|�u���v,k:����	�V��}A:�*=S4�CD:2&N��[H�D/�^�y����C��5����I��]��~*dE	|0���ҜPi�;KWĮ�}`�bq��Bp����a����L�4E�i��/P(��"ҽ��"���BHq>��&%
#Jep1��ZQ�RLc���,z�%#���@ң�&����N���`"9��N1#Ӑh&+��r6���,6�|��RA��v'[c��[Yw�Ȓ~�_��K���.U�����d#v�M͙S��F[!������e�60��˙��HdFDF��Ed��ME�d�����s���̱*��	��֫���l�����V蠨��"k��̏�nn*�ȪO��YE�(�n�b�U��쬍o�=�haz�S'�UqW��cZ�hq���nJO��7++�ʠ+ޏ�����k}|�n�&���x��-\}|�����{�M<k�{�	�W�d��77���݄l�ͮ���ҿ_t�b]��O���û����ky���f�"Cۘ�G"��Q�h�#:�o[�xci^׏�͓fX�c��;�բ�r�Nz9�+���@k~o�Fl��̔�o�П+T�O~�R��r������rW�䡶Ѽ�o ����+qZ��<�ϖ����t�9S�5:���A�(�l��d��W$�X��S������,`�_�>6+e�q,:�-�{�p��D����ds_�b^F�|�vi(H��R���('�_�2��H���el��&cž^�q2,�	��?5ͷ�
~��S�o�N��ψ�Y����?e�V��,ޢmׅ3�[Z;m�j�k}�›/+�)xm/.L�b�k\}�;˵�U��]�N��`�g�A?��ߓ����{���bM�#�%��`�?WH�����O?}!���D������ӿ��"�so黕����_��w߿�D���HP�9��
��E֧����}<�wzMh��k��=|nDa�Is{�;��WCS���B�4��I�+����*�pF"$�b���b�/�{Wjz��$�C��U�#�F;4�;�o�ꢷU�����r*�sn�IC�]r�U�qT�x�9�u�Rǡ���*
!�9"��޽����T�4���/KN��:?�ꊼ51ϑηׄ��48=��ݡ�*=^S���J�����7��^k7��ҵU�M�8�'MS��$��t&Bd��|4�7�\�cv˚c�����ڻ��s����K�x�7���uO^c^�����>s�n�h:��S�|L�=ځ
�1����Ŗ��q�̞��G�Z��J�'�n'�g6FU�������J�p����۩��m�3Z�]�1<3ԟ{xW�|��]G]���̇��F���q�x���u4;����cئ��]�¸�X�rBS�����^s�b06Y��l��O]q�޵�u������`a�*��a�:��uu]wI��ٺ�IhԄh�X¾���:a�ؓ���Z�����}����2i�5��9�?�
^N4eyB�����R�@~�M<ï��ۣ�
�]��̎p|X��J�Xb����K�c�f�h�O����|��N�}5��������z�4bM�o5�*�Å���O���gx����>�Ե��S��N��,�w�w8BGŒ��Y�F�[��<<<H��X��,]U;j]�S?i3�=7z�w�4.�%zmt�k$���iρl-��3���$���o�K�7�̎�W!�r!�I�Y.&���wX?�\d��B����hgt\��L������6�wlKWܪ>s1	 �q�]��,���d�L���D�
؎�/m��+�C���að�)�Y�^S]�C���ZSĞ��l"Va�n�1�� ��������ooI��2ÎL��&��Ƶ�t>j��Q������d�/=_�|��C��)�;�X�ئ!�}��"~�$��e�`�U�/?��	���^ۏS���Oeh�=1INxF<�#�B��@}'�[��:v�(��4���lӶM�uͫ���Ri@�V�Ʊo�#gՆ/�#֙�{�R:�?)��3��5V�n�ϥ��L	�(ͥyN���/���1ݿ=b�3���U��;|���62�L4�ތ�u�ν����b�l@��%߯�Hb�?Bn�%��s�W��	��S��x�TL��o?iU_�&��3>Ԟ�|dc�.�L����7�T�Ä���ugܧ9luU����9N���^��{H�s��(r�61�G3��*�ǒR�):C����Z���svu;;8�F'�*7�k[S�W]ְ���b��I�{/p�B��xk*��V�+;;Fx�ʭ��\���LlЪ��n��������l�_z����̟ȉ�o^�O�!ޞ���~I�,߂VI_�MinK�Mr�����fN���-9F�9/���}㴎�J��Oգ���#�{UO�-�̯
z���p&���*љ2ify�\w�{l_�Z/t���8_�?�no�$���J��Ӵ�u��g���[�K���6�@��C�p:ֳh<�lҞʝ�T��kv���3�rЯ�󓐓�̋	��0�����_�l��v�#��'��4¥�G�-��_��4_�i�G�U�����@]L�L�mb�K��;jc�������gݗ�''Oy�pi7�{%�uE�hzF�&���˰��Mk��`�fL@�P]v�3��d�M�v,�M�Y���`,��I?�+��ڔ�(�5�dZ/�!˙�=?]�x�:��6���,��/��|�lˤ|Z��s���unS}�B�'Y��-��K��-��5�uq�L�_�
�c�x�Υ�Qc�48�[ز���{FR�
�����8g��ŁB�~F���֦[<�5���P=���̶˾X�9�O ��ׇ]�l��,�9�s�c�y�}��}�?���N?B���G5�Q���~/�м�/(�i�ԟ��릵\|�o�l�[��Ul�۝'s��9�Etַ�>Om�ѥ����u�7�W}�Ep���Eⲓ�+2��\��^�·��$��	%��Ҿ�g�TЇ��?&�ήؿ-S�O0��q�0^���G[���N2ɾA��V
]�����ikK.h�K8)ױ�%×1�Ė��v�57�T��F�u����3�h;J��cf���������5�|Q'8m���ϱ�x��W�F�kKi����ʈ#�.�^���b?�;f��u!�R\v\��m3�G��:�-ĤޱY�Ӗ�:)Y���ގ���i����v.a�l�2}D�����!����4�B�9�a�2^��՞���c�=�J{x4�k��3繅`�0��LB�A�	�mu�y�x��u�tO�]�@�&��ƞ]�y�u�<�/|J�=U�������{��S>��o�_�mZ#L�Řh�w{&���y�~L��Mu��C}�"GV]�����b�S����?&]�|�Ӿ��I~��33�k*�E�w`���;1u�Z�1d;ґ������z.>����X`_X��_|�B�5��>"��jV䚅'�@�0��3zL�9�I�km1z�y7i�:"F4Rz�Il�3{c}�Ib"6�����%݌�j�~:��Rjg���Ѹ�Wp^_e�+=*�_�kfˤ/?���QR����;=5�I��3�?&�ti~1d��kڨ~�ϼL�Wt��������Kx^� ��1�&��w���v�J�f�w�g=.����9�,B��d}+#)�	��}�[8��x쉞�y��DC���k��OΈ�4��t�_⤢wb�$ʥ��	�O�-���"���S��*cƳ�]��l�۩�Z��K1�=����f�k�+y.���J=�+���vK^�<%[��{uQ����^��5.t���y|(h�:)��ΓR���Z��\��Ƈe[�M��׉�<���p�xF�\�ߊ�����K�<��ɝ�OQ��Ǝ��Z�\����oáY/>�M3}��#���h�����}��6�#�鮐�X��6NbR�w��L�Rn��RZ;ޑz�u��X�G3]\˜�:�E�O�f������K�eq.~�g[1j�;.Ω.��k~��4߲���֜�p�g��sڗ�ͫu6�kIO���
�]��$��һ�l���F��n��^
ui�۽�|;w�UƋ{{��o�\���?�'��3��Z���g4�T�vv��"�]�Md�d{Mh_�A�{@��
�YGv�&������^��ӫJz�o��>zjU�F��G��ӹ�;���q���)���"�E$�fg��Q:�1\����>�rn����:�Kx���t�,s嵲>g��	H�S���|��!f�Y��:�yuE��KK{�]im?b�C���uX��Q��ݘȟ�e�ki�y�;f��cv�_����%=kތT��Ő�[�☆klu�=�����>9Z.&�#l�i�����k�sX����
R��k�<�V�}��z�6D����|���
>�K��*��W��I��Q������}�V�_��!�|�*�����o����5�üW��a#�=�Kڑ�i_H�������ȅ%��f��}ڲ)�}?��Y=��rL�gS��saj���X��L�R��x�y��d��OK��ᅳo��Q�gs���m��뫰��9cp�F�("�e��3ym��K��1�ޑ��њm�#��+��8���H�Γ����l��".�_�q�6���?A�0��t>�����b#z�vr^_��7y���g�=���I~�^:'y���K��5_'�azF}vf��[b3�<*�w�xV��ҁ�7�=��r1�"���'���%q��Dp��A}�^�SOb�Kz��־=�2�r�!�rW�P�[�k�Y�|��\��I�پ�o��I���7S�i�"v��.�n�c��V���A<�z
���;�s $�BE\��{#~�gz.��]i-%z��ͪAu����*󂝤g��K��M���{�Q2>gu��DrG��F���{C��^�KV_��f���'k@��=k��b__��.�i�R�F]�]��~�`�ig��9���ҧ�l��b��5��`b�t'�����A��H���F�_�B� =5�Jp5�3��_t�9%r�3�"��8SU�[��ɽ��i֏�<�=u����.�/)ݣ�W�\6�Sz��%=�E�p}�TR;�n-��$f��	��oi �=i��VE�4|r����tI��������/�׌�R��'t�d�-��]���#/
��#�(�I`�#R���E�X}�[؟����f�'�h�{�/zg�b�5�$�M~B�m��9�x���0���^��1w�K�������=jC�؅Nǵ�����$Vw�nie�b1Xp
�
����ns_�1�)�����|�/�M��x�7Ժ���&ᒏ�9O�=Źgw8��0���c�ewi��	jT��T��=�%�9D����<Կ��;��G��y��`@^v����d�+v�r<�6���I�nT��?�\[{�@�K�W}�&^В�"o
TIHk������4�}31,{��9s�L>�u���g�&�'�g�_ə����,����]���	���^;;Or��c��
��	:�&�b\�����^�a�)��7���s�:���v��bqGbdz��/R��&,�L�]�+������̗Ee�v5��R#��;ћA�4��K�NKz����̈k��>��Ž�<�ښ+fkIx�D��po/��.�p���C.��O�+�0n��o�i��p���y7*�bZǮ���lo�3-ڽ��n�Y�3�0|-���XM�o�M'�n�9��cM�����0�9���+k��U�9�
������ީ4O�v�5����cc݇�/�t��UJ���"}�ٲ�R�O:S�o��/���M����LE����tj݂3��:&ڵ���uN�z�{-�G>̨�?I[�5��Poi;j-��?qR��Ȯ�JquL�C�
�WԳ\�k��������r�ީ�_]O95�;�\N��͚*���D|a>Ճ��z�T���9�̺�������N�yaW[��ߚ�%z���Gm[4�I��ӨQYx�߭�ȅ���o�yx�3��=���BΪ��8�����O�(n�9`l�?��x��mP�llo�W�W��B�����%#��1|���-�r�	#�b�9�?v �<l���m���Z]��7�:$��}�YP]��Ϯ��_��1�Չ���\P��r�� ��W�;0��;��T`����9C�P��}�g�^�M��>��K�9������9���]�%�<x�3��᧴���^�zd�������}�!a�����k#��y!��Xl��3-z�����|�Q� ����=����ہ�Zu�.v�x�z��Х�}�g���M�^����zؿ�A�ó�/�,�ޣ|(���h��9d?�lt'���\�
1���r@�K��;f�_��C��\�"�pq�'����у��s
�Œ���}X�9��"ǻ4~�>�H��~���z�]9�/䧶C#R3Pc�ݤL&�~9��?xx�p�#�elh@
����X]'��:@6�+
+�w��?�z�j|;*H���Q��]��s����w���5.����jK��_
�Db�O����vs[S�F����]�v�H��ya�$�ƉY��H���3���SU�՛Z�!�3OI��z���ުh�[�<A���}ȴ�"���b�/�C��w{��������i�e������֣�\����2��;ra��~���\(&w�"Y(��޽-<�����_��uy����Y����ew��3�/�sY�־ۅrR��{��떸A�;�S�\^D���9&̍��=f����?�g�����4?����T���E�-�7œ`���ќa�q{�ѷ	��0�x&���qϔ�}a��b�X��"oJ5���c��͏U>0g\b��ށn�uO%�	1��O�x��]g��7{�Qf�����{���S���X�U�t��\d�}��{b���H�j��
�]�+�ýA;W� j�^<i��:��NRܱ:B���9̣��l���[��>Gc�6������!�j�^�=�h�[��V���}��Ǘ�3>$r��y��u���1J�a2�}_��p�_�k�3�1�ҙ����х�º#�w�^6���~��@��߽��{N�<�z<�-��H�R�<�؀L�_\���y�"�x�}X���d�A���ʶ_���9Z�k��è3���kX�휺�76��Ġ�>`o���J�?�g��WN� <���q�α�	�w�,jsl)�#�D�l����1�8�Y�A 1��%�{�#��vxVO�i�7�y���K��Dn���9�Ƚ+��	~ܸI1O)�S �#̱fB��'{,�I�W�c�	�}�B�c�����u;ؗ��F���J��H��{����}o�5��1�[�����Tna
�V(L�El�8�^���&m�����(����=��n�k�_������^�����]C�]5�j�S�y�Ub}��Gv�t�C|��%�`��9'~����Kԓ�Q�5�L���x�	���X�=ǏM0w�8OrB��8���_�+]��	N���q�[c��\�Е�<�jnW��I�s�%�'��o׮��/�p���?&���<In�3��?����&��U�
M`��W�^��F�_�v�>\!��9�}�����x�Mշ��n�K�����*�mPg�杗u9��A��Z���FuI�(�
�CD�̱���/��)s�c:�t��l�oV���}�Z�����G;���lY�Q?˺���Y��#�n}.�pga��לC�����q3��5�c����0R�E��N�l�|c~��Qy�˖�}�u�c��L�@��4�Wg��+�0�g姹N�}�O�R��?V���`ض�}z��r�Orä�'�*��6/X�m��}��J �d� k��:��;����c=�9qGu�
rA/�ԗ[X�׏\�o������c�h,8�ǒl��s4�
+�w����-�O�oz�4c�[#���o1��X��rwL{3iK���7�,~�g9~�����y�2��F���w(��9���ү˜��eS`b�C�ģ��L̓eL�ޜ"�hn֫Z���>ބ+?���X*{,�/rx�ȗz3�)��S|0h�>�^�z�����[����_��A�J�!������ɾ���-����ΝWvx�A_H�I�M{_�+tXz��P!k�`�:�9\Ys�u��'�J\�uE��4��Ջ	�}\6Z$/�G��C�x�4��~��ƬZ���c{O/�?�-u-��/��ˍ�әI�;_s��;�U�q���C���؇*{�/sū1"xwlՈ�>�\yF2��bM��"1,cs���>̅q���}��q}�i�K��N=���8�;���`>�W�`��6�o=�̻R�~��vb����w\O��
�N�r}GU��u�j���0'�թ8#�C��MY�~rn�MȎ_�foF{"����%đ?�g��S��Mm��Eb���d����
�v?��(�E�a�v@fM�S��X��#s�}���*���<�Q�84)\\�Nk�ǿsn��!�C���x���zO��}{���4�C�-�-�:K�SSO��l��O�N��}\��5�^ǕI� N��f�C����U�+³��ٯ�+�z�_����u6s����pI�9�o�[�gEo��-ru�����ܙ�1��T��ux���P���p4�p!ꂕ]�a��!ƾܣ'
A��6��c8L��˾�3˾}Og�*����p�ϛ��o-�?=E�"�O��}1�N./�G�l$���s����>ٵr
��
�},c����1�+6��Nq���F��[;-����+�
��>E�����e���4�ŝ����qz��*؟�;�;���Nq��w��[�sn~8�;N���ɻ=������5�aQ��	�|��yN�>P>4Y��_�N��P���n=����kvN���f�����ty��)��S�g[�,S���B~��ȓ��MBn̜v
��9dg�0'w�+�{v��j�
�X�n��f?�E��v��{�z����V��w�(�{�r�����~X<a�#��{.����S�g�+��Ͻ��l��2�ɵw��Xߟ�l��}������3UuX�o��o���k�ߓ�H�_ʵ���wop��e��:f��/���]]o�0}߯��=Pu��J��S;m�nl�`���KbLC��QȤ���^ۉ�����Bb;�c��{�9�q��o�>�O��Sp���@���y��&)�x����vv�y�j~��}g߃
\u���!փ���ߦs�4Vs���1�瀗P��
�����C�/|p%����)��Ej�q�J��_�޷;K���ʏ;2�'7;�A0�$����űE�Q��y~&��8����sX���U�޶Nj��d���NZ�v"8L����7��_��\I{0]n� ���=��q�q��eV�n�9��5���ݥ���N����{O��^�ׂ��M��|6��ʖָ���F��6\���&���o���e�<pi|��ȟ"�������">g��5m��+|�0��U��e���i��h�
r�U�8����m�T�A"9����W)֮�3�!��mG�3��Ǖ� �_E�U��������ȹ��;��Q���gk6θ�
�C[���3C��dM�Q*l]��R�h,�ܮ��.������C
�Z12GP���9�Ow6b-�&��Y���W�JK�Ӓ���FGjtIm�5�`#�wo�U�i�;���Aw-����L����Q����5������ַ^�Һq�{$�_+R/p�^��R+���� �9��"��?��
��Jb��E�!�)��zU�T���`�7DyS%}����jȟD!Ղ��d��E�J�R[���ψ�x�f��BU%��#��,ܽ�:�ZU�,�J[jDY72��=#���<���I�9�{��ŲRC��*�bǝ1ZQ��!�vn�N���F�2␕��8 1sBB����p���'l���c/�P�jx����m�o��f���V�&a]Wm�MV����
n`/�J��Ļo6���r��fH�����hT�S/��L"7�F�P��d)^
5�������.jd�2�+��놭z|�>���D��0z��pQ��z�mQMo�0��W�v��t�
��M{(0���(mi��@��z��(�iQ`��㑏|l.ʲ؇�mo�l.�“A؛;p=�	1Up�̠��U�#!���)�Q!�����F��H�y�-M�Y����H%=����5X�A�����;�ê(�ro~�����t���${��'�B�DZ��+��\��^��(z��zdv���J:���)�]�\�h:!��mc+EN���ŮhJ�
6ɒ�ݭMJF��z�܀$AR+F��obM9�YP׊Y�dI��صB�#ථY�Y�T��j�W:h���(]q��nn��0o�y��AO�gu8���[��l>]�E��:~m�X�џ3��wddŷ�y�S�oc4�Y�&׮S�U�r�����n��=�S�bzt( EՊ3����Oޝ	g�¸1�|�O1{���W�r�6��)ևmǥ�4?3��T�5�L���dr�@�JBB*ZUm?C/=������
�@����Lķ�b��ف#=�99x����GG#�Y�)�H�B'��,�hn1K�vv��"����`ui�}�!�r�o�(̠7o����n�#䲏���H8�=d��.UR�{���uϮ�0�9�kk`�:�D�!�
#E/G:%���-�K��$
�Z*2�i�,m_���2�F���%�!K�� [
��lm���G��4
��+xZ�O�HWR?@\�;d�z�z�cmJ�wR+�;7G��%ҍM�c1��Xo���@�Cp_�=%������?��qb\=Vyi|R(i`��<�~_�����-**�R9*;k˂�V�x��C�
��M��l9ȾD嘤�q�?�:Ә��0������UD�hI��7qT��Za�K�,zh@yom8a�W���M�
�R΂Q˙&�{{��!�m�&F3�t\h��D
1��)9B�a�AUy�z#�!����g�f���"c'��b_���Q�N<�I!P�񇁡pg�4�%:���Z'1$Ke������Ҏ��s�Q��F����Z_y���������)���#*q0F3��mC����k ��p�u<\u��ώ�>^t/?��;����!z��_���rr~s��9"`�V����s�@�_�i�
�[�uiZ���ݟH�uu�_ֶ���&}z~v}�R����e�ԇn�r�Ы��A�_����Y�P�d,�N]UC�tj�OZa�v����ʊS�J��
�X���?n�r��̴�U���<�duѰ?B�?���o�B�:����'!)#��O���z��뛖*g�����B�;�e*{�W���Y��;��x�&���V���#},���h���r@��R���Qz��l��{��4R5�pq��|��C1�W���a�x�io$n�b�\�-�l�j�v�K)�%UhE�[��K':�t"��>|�硠����p���;�����ݪ~���5"������X�D��f�j��NQ<��q���lop��*g�G7L���ҵ�
���3��=v�I�Jg��!#q?��a�H��R��y�"k�W*��B�T�
�'������d6%��{�F���&�p+���fY|*-��I�����<�9�+��K�M�����Ҽ+��u��h�+����8S��+o)eQ��Bg��5M��a����,μX��
o ��?�����{���-`����o�@��xK��6-��k��%�z�H�����S�C��݌�ߡ�RM�`�1��>�À0�lL�g��'��<$~��hHƍ�I8	��)����$�����YB��* �%�I	W�#L`��h�@#�/�1�g�S��L���4À6�&��b	��o��څo4��˘q���$0W�<%��Dzq��d��X!�H�ֈ��.
���	9I$4$�:&�@B�0 i��4����V��!M��5r�.$��l�4M+��i*>Ht�'c\�X�'�1�q\���qr��	܄,�0�|
���{�w������4��z������5p2�w�S�*
����f��m�n�T��g]P_��Z���O��}���R~@vDz�;��K�t��/�~�ѱ����sKi���Rϲ�G��d󩔯N�e�p#�,S]!`�$�U$S�>�N_��<��X�Ba.�c�)T�f}�"��e�%R���U���>��hW���W���:��mZ�gw��z,
AŽ!�}0͚���^zRwF*�eue�5w��:܂m�A:"����_���ֽp��?�}˶\�tW��j��yv\��{����F���?Г��Ѭ��u��e���g�n��oE��B�����ז��w�y��]��(�^+���'��0cԡ"x�F�bi=>E�mv�7ܯ��x����i�+�t�n�Wi�X�t�HE�Q5�/�vu��[�O�J�=�i�D��ϐ����n#E@�+�VȱOȴ��wf�E���x�ȓ��M�"q�9��;grαS��������E%f�Gl�_�I���^8]��w�B�&���{Q�
}h��\r�b���{yg�q�D�m�9�\�L�J�
��'�}G���n
n;��w�8V.��A�"	�����D�mP�C�Xx�Q�u�P��A.��4~�� �Ð�����sCh����q��}��������Y�Ni3�˥�S�J��v�a�"�n��ψu��8��� L�[�z���{W�w��C��	�6�ÛA9z�m/�>�͵�`zY)
Ju�Y���א�oL�#>z7z𑤓�A�ga�-oA�Cn	�[�DZ(ԧu��s��8�|;�t����k�a�5o�'�g��yy��kv|���xo�d
��eED��'���
���n��D�Jb���]�L
���֍�bH�4H�y�v=�!�ės�&ͮ�C��<�
T.���G1��L�W{D�#W�(otx~vC?���Z8��h{����-�8]�(�֛�`�ֱ�>Z��L��A!TSgq��5S�L:=��5v�‰�������$�s�m~$�m��3�f�'v����f.&?���֑�?)k���#�oH9[0�Iۅ�����Ҩ�ߺ7�P��
����6�s�N���)C���\�=P�_�L!]I�窝{T�%����K�q��(P�"��+�IL���q��6���u,�����m5�;M���v"�	�d6�#���+��b�̗��m��}!�j��A��{p���t��>���J�ԟ���2r�QF��xy��^�{�v�� եFx�	�@;E
SA���QR}��� �gi�ϥ8P��C��P�v�!��Ϥb�l��mQ�N�jʒ��Ɇ�Il�p�vX�߭�C�&y��Y	�g����[7�O��Z�`z��yS�訶_ݩ�wV����%X4rW��I!M)K›����R�ѧƄzn���x�ITCKR������sҶ{pD��T�wg�fIJ�x#g�a,�'1�Ҫg��n��X�1s�tX���j����m�f,�OQ���-̆��-��TS�-���՝�K��e
'��A0��]��/��n��^��Ug����{iM��2T;����v�M���g�̙�(���q���*zx�0�C��6F�L���i	m��Dk�*-ĘY��EL+[������;��Ѕ�)������F�f���f�nߘWJ��bs�ON'��c?cY���n3i
?
M>���T�����8K�3�ebъz�!�B��~���<S3���#�Ba&��/uP;�����Iě�cn^A'�B3E��0��vg����!��Z
��h�4k]�����޾x�m,���C�kfcoZ�/�:V�� ��;�r��x����PƦ=���U*�vX=�����K�;2x{;]�۬�ʔ^��\ano%��y�n+z�(ɼkP�4
�i'�v��]�*t�ԽA.,m?4�tU��G��Q�

ep=�3�VSŞ�܋u��I��&�#:K�ٷ�RG�O.+�O�:��Z�n ��Z@|��.[g�"�}}3�dD�")^�/�N~�Άq��W,��п��KK�򖽯:Q�[��To�a��6U-�"�ޟ}�^Ԅ����x�`\i��z?�_B�S��'��y2HmӺ�%�5�c��C�Cl�-+��Q�;��mt��((�|�dR35#|j�Iv��}����}^���i[�L�0�̈� ���)��?�1�h'��
�a]偭���B��Ǟ���	tUE�CJT$���?�zd*�h*T?/S��u
�W0q��_4ht翮��f032��A4:*Yנ���P�]�((̎֕���
���D�#���2_z�8�������U:n\�
��g� �/M��ͧu�5�[f�\���'#�wx��z�l؁]�ͧH0.̨Lϥ\�?��*gh�j��í����f0F,����K�\��J�})=%ӃA�}����l���qO����\Mo� �+�V��_��V]�RU�J=Vi7�V�6Q�͞���@0�lw�>B�ސ���aK~5?V� ���橼w��^�-����c���(d��G��i�g�L�QAu2]��R�HfԀ�dV���!�Tk�Ώ�#���9S:��,�Es��p�2�7��7^�f�Mi��
{	�H�����4+b��$��F����n8l�쥳�B�0D����ug�f4/�$!>��f�GE��.w��{}��
��hk��NWL�E��	)��&w�ސ�UtB�5xpK;���B��D�;z�Y�F-xԁ`]�8�8��EN�o��Be�g�

��A�,M�U�����Q��/pD1%qBQ�8:B�7p,�W�]�
�s�R���3{J��/mUNv��eID2�����D��SV�Ru5�}���RN�+E��$�4��ZN�t���!��A�!����<�T��A Ґ\��4���i��L$;p������[��wP�aaxm\oہnz-_@��,([\��m7��^n����6�@�]��
>���X��-�{��&ʭW��g-�0�v3�Ҏ��DpqG����5����À��c�)�dj>����h�ev)�0Z	@e@���jU��I�ˆ���UA�z�,d��oj�r�&f���`��3�z����
��@ʡ@�k��#L1��f)��M� +���u�R��C���^��7��f�t�97�
[��҆}7V���o�5c�+j��4Nk���ˣ�|�=n�T���#wն��8��#Z䄴��������DO���|2S�S=E��L�Ԣ+j����)���w<u��)�����B�{��,i��8�e�?�0$9�L�i;y�D�a��3��sD��KO�0��|
n��c#�=�B$+������[Y�Q�NW�j���Σ!�['M�1��Ju�_<���xܜL��0_]:��a܇}�9K�x����n�2���MJqv��BT�+Yp�
QT.?�8>��/;h|h�B�	�P<��1bY���cW�x:����ڇ�ӵ;BZ�p
��������6#`�m�6��t,�Ve��nVu�oWk��[�8֨pw�6\����Na�����n������pq5ű�k�)V�ڵ�YY��4�i[dhӎ"�jnd��W�[Ħ���)����Y�w�>:z�n�b�Y�Uĥ����FY�����"iP��`�(�1LWHF��S�^G�Ǖ�U����1�7��]Q�aI������T���0�(Z
��P4�N3K�i,s�i���W�aJ�Z|[�S��1e�F���a�(p�$�K*�=��wp���P���PH=)�ܦ�j�=T����;���7y7J=Н@#.jc+�87�w��X!b\�����w_����@�[`~V��1�C���F�u��	/}�����
lr��m���}�Ɩg��)�A�f$�^ t���ɑ�����6�@5�Aa�V�9J�v7Qyփ���{B���u�%I��{dYe~��`6z�*�VT������Z,n)E�n#�"��.}�Ih)���Y�w_;,��]Nic,r9�Y�āQV��	��v����<�Ә���0��y~�0�bn���ن5��ʅC��̳%���̛}
�0ůT�Y����NP�1����y~���,E�X�
~�&�y�Ȏ���0��|�cQ�c��CF�ʢm�S%S{�	T�q��^2V�e�r�i�nbz����~ȳ/R��M��ݻ��Tw���Q�=j;>���0�Q�I��4RKʊb��6Q���M�X��`��Z����<dS됲	��r����c�5���j�����Ƣ[~ri1Z̙Ĺ�8�i�P(�p��.`�{�b�Ԝ�D��0��T /D��&`���f��Plnbfxvҡ��E9Р��kУ����=\������4s��:��ψ(�� �XhB�7�>��H!�{A�i
���b	!�0w��Q���wX�Z�y:��$�4�4'�t�����3T���M��snP�g��F��#��]�-A�����:�J��.�J��D���ĦIl�G�|��^h�L�hx�N���IAv/��8����v�n<DK!N���=�_0����� �/��=4>�n1Kva�K��e��+s��Zܡ�z���\/�������彯���2Ë���~[���>�J_�����R\�G<=��zy9�վ:�׭��,�O�犁?lg@�z|&�+�����(v�n�ɫ
O��?f1̒��S��*�������5�܁�[+%������r�+Ca�ȇ�]����t�pt����[�J/�x���JC.�Sdqtt}����!���Q6��N&,�N���{�/����hӳ��:�B���k��a����q�:�@N��Pb��=�T�R�(���`p�7�T�P����m(8Z	�[�_��,��8�B]b�h^c!�l��8�(���5�Q�cY*�/ �3�
����[�C����K1$�-{��#�6��a��7�N`��J��e�}��}��k�0��W|���J]�R:m�
��}*#��%VQ$#�ʌ�>���2��A:�陸NJ�ݓ�m�����eU��w5���J�����S�(#;�Ȓ/��n��7��J�]ؼԜm��r��AJs�I��k;�w
���9�ª�n��W���1E��gRb0?�ۂ��Gp�ׄ�)�ڹg�vj����I�����&7%�.-*H[���)O�z������VY�<��5��,�'��/�����|�T44χ�u����Š�,�.kg�G?�xw��]K�è��)��1U|��q��-��!���Kp�	��Mx�a�8L����c����[�l9j��l>%Χ�q�'���/������Ɍ��k�����g�nK��$�hLY�Ar1����/�z�^���T�n�0��+�@?��mOE�I\�=T����B�I9�{�/Y� :��rwvf9��ֲ�U��|���<W�Jɦ���L%�N�spIjT{,�d��?A�`�Z����rY ��N�Q	,`����ǵ6=G�u���L��L�-R);Q@-(�����6P��$Y��	̉�n�b�Z*�R>G
e'rSK�xmz��4�@$�Q�m����)!X��V�A�p(�L�oK�T,���~b�l�b��-h�lQ���{p��3w��;�P�^�_@�i%!��3��9���X�f}rT�����G?���L��
dF����䂉��JWm�P�eh�0�e������������"��w-'�s$h�!C�����Og��`�����)��v38��񏋇�nK�K"q�&�C�¦ctؖi�]�����^��<_+ĽBV���ϩ%,l�U�|޵�Z{��8���ֻ�]2���D�l��tt�Ѿ��Z
+zmY�dcL��W�04g6�s��R��S�J�!����&�X�^]M'n�׹�]#0~����n
�uzĘ
�:�Ҝ3��jmR��N'#����s�d$���
�4�3S;4)]��MG���U�
Ѱ<���<�1�p��٩�������u.�Mnt0������V����'	7'��u>�㭰���6��_������'���XmO����_qZU��b;iw��,�݅��D�O��;�'��c͌	�l��=�b�)-��H<s��s^�(�3^m[e
~O�w��L��|�Uƅ�C��!� ��⁦� �೤���2&A�Z$�R�����),6@��<�j�S�YBKdSQ��TKZ�L��xN���lv5����4XQq��K�]tEh�Q&�D�4�-��dFM�"d�H��{�r��T������y���R~�y`\la�J�SF)�#�S�s�ޱ��E^�)c��q���r2U�#���/�SY���x�>��x���1K+���(�S8_3�d7�?n.�*o������ĕ�p"��#x�6���.ں�h��R*�4�of��|vv}u'0��
Ejx���\��L��\ �������,���^�N�[ђ
�o�7��w�gח-��x��d�:]�|-�I$r.֥�TR�e�(�N�����A����TD�8N����6�8Z���Ga�� ABD �b�|g�$�_	
���b
�OG�?tl\�h� )��3��cH�D�7SX�<��g+VNa�s�؜<k��l
?����lNߎ�ӊ�)�kǾ�!�&��}o*�P�&P�Q�\Y�R���<����n)Fi���c����텱�z���3^�ؐ(L~Ba댖&�;u���j���>����u`��N`߼7�:�f����˗�U��S9�}�!�@R,��1���_�GH=8��"��,PA�'߷ΩL�4�b�9
�����B��P�e�����~��\_��﫹Ū��P��ߑ��#�|{	�Cn��i�$G�K�Wna����5Aݳ
�6�����C����k<\��?l����E	~I�ڞ9%������)_�X�Ci.��pE��^o߾��s�V�ָ�s���JIVt���6`[�%�܆2"�'I-p���j���6a�(���Ԡ�e�P9�Fg�����i=�-�$ �]�PWK7�Б�Aʩ,=��h�$�_v��}��={�[�'����`�N�D)�d4=���	�ה��$COױ�h–��[�ddWE�&2a�;��,�4�p�`�ű&�$��.3��@pW4����Yg$�d�u
��nq�%i��}�R�y��/B�4��z���ϻ�t���#�q0^�Y� x�a�v[:�i;hl���!�1��}-�FA�)��Qr����N��.z���G[f��<��v&Ȧ���j�G,e�	�Dr��Pw���E��z��)U�r8�!
��w��0��H�5�r;�F�_!^��u�`yΚ�9���|���g�b�4�I�4)��o̱$�84�01q��\��ᨧ�I0lfi=�?��˜s����54��*r5j��	�����V*�ޔ��Kr�x�F7�PcFוk-�����#d�b���0\��,^P
؄U-��B:�i;����S�6���۹��;n��8�x�XLI棏'��$�Eԡ�؁뀺fw����Y{4���d'�Mڝi6�F�:�wt2}�]�"5������}yA�@_W�!��'0���$�F�*�in;��uq�����s3�y/����v�`m�wPk�o��{��
#�Hr��"��aS�/����
�&���2�F�s�z�`|^��_���M���H�U�1����/M�6yW���E��Kw6{�W����<h|}Fe|t�;�]��R3���ڃ�X����шB�!��[k�[R�\����mxIpV���.�%�l�9v�_�+c��Q�lՋ�Ѵ�k�ݸ���Dltebv���%T�d���Qk�0��+ΛӐY�޶�4���R��=��u�"KF�����+;m�҇�`!	�O�]!�r��m��oxh�ƻV�-�}l���`<�)��QUdB�1\����z��U^nݎ��
�כ�B<�ъ,��FF(iQR"ծ���}��zus��A�
Y����AV�Fۭ���O����l�[��>ItD��*Y��B��QWOA(_��S�/�L��Җ�d�s���x�22\{�g����*��2��x�v��C���{��_���#��H�p+���	W��=��[�����[,���Foeɱ1��ު��:b���X��Q��qfGT�~D�/Kv��ĚީW��
���^��=�_�j�jd9c��ߺ��hϻ�rK�q���h�j�r��?��	/Y�*5������
���i�Y�L�HOzqɜ��;b�c/�:�H�����'�[y�~\�ps4���R=O�0��+$BʆB��a`a�\����#�/@��߱�$^�޳����ۧ��{��u�$R�����k�A�N1DA��=�m�%�=�YD.�@c�8����Բ����)Ҹ>�&�TK�H�@sr!���Gv�\���MV���yYY~'K��7��U?P
W��ْ��l���0�V�-�	5��� U5�k�4���
���n���qK?q���5��[D�ՁcS-jM�*����-�/Û"1�|�M�K2K��}��e0��`�صL����cp�*Be�&.c���?P�o�H�)l��«���[f��42^�,n}��]�}�I��Q���>�{Hڅ��V[o�6~��8�^Z���l�O��6AW ]�:�'��-64I�Gq���}��9֜��"�\���ܨ����������6z6���0�i�&�r6�7H�R��4M*Z��'��i�]�Z;x��6��y��
�7B�<k�F�%^9��iR��np�e��|�!�2�Bp����SHfy�8�N�(�ȫ"�~�Q+s�4	��JDJ��:
T��>�B�JT��b#�,L�D���F�����^�O��p'���5XYC�Jl��M`c�
N���~8�/�@מA���g��׸9p�r�(���VFN`�����X����T��P�T���JB9!�2�	|��W�SĤ�B���c��q�u���6��t`���E��'TWQ�U��	|�'�|6:5�3�Į2�!��k�����*8-�ƚ>-\�-r�53�/���MX��0.lT�ʳ4�ۛ˛�_V������]���OJ"�9�*�0Bi� `�!�5�Z�!�����W&���Z1=�!M��|���kx�$��:o�i߫1�v�4B4~Ψ%��V��`p�=�������9lm�%H;j��>��u��Iޔ�v�I�zJ�8�O�)���{p��A�1�9ԬY]=��h+b|~�?�f�*Ps��ꩊ��U�]QK{�wwO8�[�ߝ~�p
d�'z�[�7�Ku��Hl6��&�z���M��]�D��Gnl�%����~��<@�O��[�|G+.��h+$c
jms�h�����Yof6��C&n��~fQ������D�<_VD��+��2�q4�dv���ͳF:ۣ���7r�
jJWw7k�ɻR��٩�}�4rC��e�2Joy������XB��^��|YG|$<Ϭ����*��(b�ONT�p|'�axy��D���H�d���e����ۋ^1�b��/�"�w�_Q��]�	��Ymo�H��_�$�����p��m�MSd��S�E7;�hKI�%�%��G��=r6=\>8������t
r�Q�*6�����<F8��̒"�������OS�BjTW{�)|�r	&N4hY�!�}]�+T9F�؀��m6)B��������P�@���EA��:������CX&){{^A�ڨ$4�뽽�g{��a6k�p	���@'�D��WJl~b�|�v�vW
7�v�[���h�s���Ǭ�rV����l~�xG7�eBw��xc("�-s߃c���3����

�h4sr폂AOJ^S�.�ub���bhʻ���������^�'j#��NR������E�@UF$��l�|���"ոp s���c�]\Ky`$x��W�fY%2�u܂�d��e�Po��E�D�sq�B��^�:���wF@�d	�~{���_��.
שџ��f��]���b�o�)�ݙ@2�7o�&�z`*�ȗ�=�>�MXRJ��1b���-'mc% F�DЎ����9���an�N��f�i���j٥����_
'�B�F�u�h�=d��#~�~�f�$y����7�y�P�ڔ��5�G2,�� ��R�S�I~�b@J�$�`T�6�μ�0��A���_��ĺ.U��A�7D�C�,�O�J/eY�ӎ�2
֬���3��7�����\%Oa
ӂ����7ꫭ5��T/���y�-�?m�P?��ၚ��W[%W��j`���)�܉c�N�@�n�o��I*����m���!D���S�c�	ILL�o4�g(�4�d�����fN��T��=yN������{N�U��fH=R���B�^���}��V��ˮ�=5�?v%���Oʫ)���
jf���:Q��`��pB(��^�|YG3�2���[e����N�!&W�H��$�au"��*젨�\�!��p(��C�W"mt{��E���ow|E�����E��_C����
i��t������#{\�������B���q�  �*i���m#|Z����z����S�2b��;��<2j�4&���#z@}�v���2Z�>cx�E�~,T��O�ʉ���'���@W"-lZ2@��$/���UUUU�7T�������&��t���?b�hr�����J#��r�a
�D�?3�&����g�?�����'�MmuLt,M��Y}|(����Ԯ���q������H'D�@�f�&	� �ZI"@�&��l�ّ!E��8�
�h�s;�:ۣ�V~��h��rBÓ�����l>��Bi��
��M:ߙ�QMb�F�ye��x6Sh#c�?�"����r����ɲ��I���uKw��=B���Oo�x;{z�e������-�vo�J�u����
��F��j|�	h�A�������>ߌ�`�����W�g�O<�Plr��p�`��0�H��R3߸����q��nC��E��ѩ$2�"��
���(7Y:ɥ��{�#�ہ:�M�~�-f���,�R�ujC
��ѱ@�r��kGާ�U�M��:R�}���61�Aĝ:uZ�|WYr,���5�O�˔��k��z�sesN_g�vo��H�s��;�o�W.���[�:q{�-@����1#�֣���C��m��x��Ʊzq���V����`U�vtu-�$��A
e�ni���+f��Rʋ�P^e��D|p���$����PPJ��<�M
���C��!B�b��e���ιjt�v+��;ڃ��Ҩ�U>�1#qJ�rD��!iǘ�\�-�����݁�SG�C�Ɋ�C4�z:�#V�eZ��J7Ӕ���D8�1Ň�������.B6����IT�企vu;{���.D̹"r��mo
v-���0�߿��_����Z�U�@߬�����O��{�w�9_�nC�DZ�;��!�����mݓ���dkъb_�F��8�ﶇ:�N�U:��lh����ڵP�R�_�
.^S8?�xFSȢXM_��Տ5����uD(#'6f¸)���
�
�p��-B(,#�Z���5ny觾�T��z��ז%�2ˢ0��!�R�]M�뗑!�Cm�j+�`��<��OF��S;o�0��+\��VU�Tu�Tu���M��|GT�}m M�������8Cy���if�w��̅i+�(r�?T<�H]o+{ ɔ��*>R���3�g\ő&h�3���21�� DcT�B!
�j4�rt�EBn��rB��HM>��R,A�}�S*����}����= ��e��(E]H�s��'i=�-�5�9�I�g$*c	5��1�`��ɥ�Y�t�0�Ͼ
o�N�������je���I��O�w�8SN".�Y�(�_����u��ZPE;è���Ő@��d�!έg�U�u���}�i]{�B?X��&#�_������9��9S�-��n�0E�����H	�%� �@B��~�cO�������{
�r�ι�����x0	��v����Z��y�!'�Clp�o0"P�0�n*|E��GD��"(�	��D��F7C�x;�1͖`Y�+Z22AI��^M��N�]�	�K{���ѳ��J��N3~
�R��ז:o���O������^�|�6�[e���,;*d(����x�}S]O�0}ϯ���M6^�X��N��ٵo�cg�u���w��tR����u�=>vU�̵��5A!'p���)���ڻF�."�·.���c@ߡ*������V@�\�A:��׮CoQ�r��]Nm��-�Q-����Ĵr�*Ж������V�`�e�*ZI��b�Yut��܋'=��q*�ҁ.�7fi#���ؠ%x���Yw��[��b�"%�D!���ɰ�Nh#�,t`
 XW��h���x�M�6ɳ�z���KX�K���<��#/!����O!<aO�*:���Z�E�7=v��`aW�7"�0H���Y�l��
����اK9p��I�����-�@c��`�~�y'��Y�:�;�7�ʆ�OEn�4I�ND��8��Ԣ�?g��6۵{�Q��c�3󰸼����0����F�˜GB'd*,Qx���֊5�¡���F�H��bHI�����Ã��],�d>)��R>��S@J�8��]Ov�Jx��J���a���K�6S��Y�{��zf;Z�����U�E��7t��
?�ز�Q]�)'�gS
��/)��"���y�Ѩ���ґ���zw]����n�0��}
M�5�S����v�=�%&V�H�H
���$Kv��X{�,�~���}���)���۫��g{�RX�z�����Ϝ���,jXb�<���J�nm�!��:�9n���z�#xϛ��(��O�+�Uq�*̨��7w�q�1¶UR��NջG�E�%�	�F�\��`�K3�p�/J%�0%��*�;{=!�u��`�!L���_2�E�̛f�&vx�����Vb�v��;�Y��x)�D���ߴN-��`OMi�Ӽ%���2蛋��%[�B����TlD�����u
��p_�����U0L��"x���o�y�P��aи�9iM�Υ�|�g���!6��JQ���#�xb��<��FJ_�E�}n��[6"��h���n�W�tgQ�#�2��D���^5'^�#�7��S�k�uN�b��Wms����_�U[S�d���I��l�Qg–`2��Mn�
�B#o��[����c2;e)�}���<ϡ�����L��q�*=
-<�F^�,�0�^�f]4$�2�Ҍ�kJ�'�=f�K�=��,�S�"'&���iQ��at;w2^̡,������� �8ESc4���d��O''���(��˒���9�qrbǤ�S�8❌m�]�n`$ĩˢR��:#� �OC1�`BX�A�J����6:v�yIǍ�^�A|�+���ʼn�)��t� N(u�+��t������n��|�
Tp=@v�C��g���5x�]��g�y��ю���WBFq��S{��%�5S�)o���QLh������
e+������%̽A�I�0�q
N*��8`��4+�N�	˳���)<��:vr�{�%��b�<F�^XUu���,iS`���-����D8P�X;��h����~9Myp�?�&��R�1U��H<��]B�ԕK[�W
6]�)��?�#7e��f�)GKH�����N�����]�7�&i�Д3
�5Mp�9
J�%^�����%:��a!vA�<
��x �?ek��M��8������������ɝ����w���F4R�5�쯝�Y���0G��$t�qG������(����o'/��4�$����c���aa�t���k��W�nW��,1�a���||{i��?m2��m����[�|s��X���wUcl��\��l�����n�r6�7�Hوy�Trs�,Ʒ�\il��S�L}c;]�����O}�6S��W��e���푢L�la�0WZ���|�;<��Wؕp��j�am6�S�y.��ps�l���D�.&�0��vV��c����w����x���'�G�>sk>,��/��y�X����s���A�9�.t�~�
��|]Wr�}�횋an>M6�x�VZ
%�&k��`�qM���}�ܐ��`��g&�\}s�]	�]�7@��;�K�/��<
��,6�[�K��-�Φ�ָ��|q���
���a����p��
���:o����ta��>��[x�"�%pJ-�R{���b��]|%�x�ܣ�pmLMΉ�V�Gn�6���]iQ�:le^�3��e!����u��Aj_����aLԉ!jD�Ps(��Ob���+k����h�&��ќms?�qDž+�l���W�{9O��������D��/r�?�r�;3t��G)M(��Z}{dQ<�^����9	A���G�W��R�\��ԁ~��!�5��X�"�U�K4x�k��[�N5":-���Ɂ�՛�'`����D��N2p�ܽN��'\�uZ�Y�xD1?�BG*Q��tq��x, g1#�ͦA�>Càk��]�nm/A-q���t](
-Z�^�0��,�=�ګro�Չߦ�lj`I��_	�m8) �98�ub���i�x���Z����F�����n�@޽}-���u�v��Ph�[VW�|@�!-�d^��P�6i?�Y��L�(�H��E�kBk(��w��n��6�*�$8"�\�F��%H.�j�$5�����f�����Uhz4�~l�>B���kh{���UU���.��g����p���L��ڄ7H�w�8��>�_�?Iig'�Q�J(�,��O�v�<8���;iU0��<R�5���%�I¢��q}i��ǰ�"5�{Nag���n�� ��~�w��� ���j9�p
{}�)���b�v֧Ÿ+Z.S�=k�4���Tp�AG6��)��o����6������Qϖ��Ymo���_���Kk�����ul�5�$E�Es�A�R��Gr��>��>Crw�k9/w_k ъ;���33��1;�����ڱߝ<�=�^v�6z#�
;��Z��Ӳd��2#�0������?�`z��ZZfumr�r]��+}+�[�g/�Χ��J�J��mn�˹bA���V�
�]^���\��R�";��gZ9� �J��
�y����鄱�cئ.����e-lv�ke;�_^����>}w�fl4m�XX�F�{[�o�h�GNZ^�^kf�qF͞����%=UF��l��J��
��/Y]�����O�}���r~su�9$?;�����O fY��Il^	�/:ݹ�}����9���q��<�j�ؓ���"���:3>��n�j��l�~8<|~pߗ؂#j|2�epdG��©р^�����[��X"+��׆+�&+���˥�ca��	�U4߹Xr�w�o]5|�!�/fC!�jߟ| �r���=��/�����]�U����
v��sc��o�&�|2Y�]mG���\ehE��q�2��ƫ���
�k4a-7��O�Sv�W+��m�	c����uY��"�
�S�P���ǝ�9�8k(��~��p�?���@��?l��:��hoY^rkIo6�#U�Y3mu5���vgs�Q���*k�G�̗!"�6&Jз��4�f��č�,�@�R����[�
(��G����A�祠G�rw֜$����jP�K����x�1���գ��SAf�����}/?4y�������������aq�������*+��%m�տ�O�=��)��/}K2~��80t�;�}����ݩ͌ҵ-w�eI������‡���%�u�k�uI>e߰�W��PD�1�(�F�!�ʃ�NSZȤ���M��Y���=G���3�Ė��w~��B�u�T��q���?�����aG�Z�wh�s|A'��ü,��%�S\����T�hI�;�4��P�2J["�j95T=��~��q�3}��k�O�y`:lc�r�;��%7>������,'|W{��5S�QQ��"���vc�H�wxu�NY!��9H�m1�(vֻ��J�?��Ah��"��Pn�!�!&+���S`X��1(+qX�ԜhƠN���m�qaO��2��-1Y�LM?��ѐ�>$:~�_y�]!o;~T�{�<�<�!�����=�xU	U��eY��V/	y�6��������Gp��"�I[cR�Կ���yѾ�OH{`���M���1�}�ޮsp��Zq��g�nGjJ��WZ�A��Űi[Ňq*v��3v��1��-�ӴS�>�[�m�zl���G��'
���iD��ևu�r��C�}�����t�*��R�vA"�r!�vB@]�<�w��@�T��'�,2��	O�����x�m"��u/ǥ�
���5,����D�q��
Cϱ$
���0)����5�8��jL���9�__E�йt\2�9������ُ��W����?��j��,���$z�pf�_�-m�F��:l��-<�AFO
o���ci�J	�w�)�D	�&�z��M��
�c�:7湩e��4��D���%��A�._C9��0���,�0�[���Y�
��
�w��{U��Ή��Vn$��
��N��7�$�Y!-2x��@��}
�䆓��U$��$������!�.����ؗ�{�x�_۷��{����m���~^ɒn��-�.W0��}_ڠ�>�
~��-�c��&pL�����ju���`:�����7�N����
�O�ܛH�`We�Ħr�H�Μ��4���<ťT��E����`%�Oo���l��)歓�t$�J*U�Mٳt.Z{>���%��d�Hk	&�ˆ	�AD�[��,\rԴ=�Q�P�	��TDa�V�x&2|���.�e�e!>�Vn���n+~g����
�=��w�����z'�	���.�]���C�$��o&6��!�NG1WExO �kي���R��@�}��^ gv�
	�R��	�
����R</t�4�I2M�Hs�J�4Z��i4�1�iB��y:gb)�Pc��
}t�p���!QO{1�0�Z70>����ehw�RL�p[M��tjz��Ҩ�]���8�4]b4�A�A�#��A�QGGG��I����6�u�p�e`|ڗ��3|(a>��3n��v�j;���#�eUm��QS�F�8	ͼ�wX���p��HE~���r��;ھ�Ŝ~P�D��<�ڮ�H_����L�9tk�����Ȉ�ka]W>c��O;��w��Z��@�^N����d�rU(�.੫���@gC?�A��:���۩�d���d�E������ko���~�DAq��l_rmـ{�"�A_Ea,ɡ��r��]�V����,"%J']��0|�v����I��D�}��'K�J���������;S��\��J����7�1Gx�[SȪ����ƺ�(ЁE�����g�`2�t�Le�Ĥ�ue�jL!^����}9�VJ&�	���C"4�8�L�S��>ܾ{���{Ȥ��$�Xr�`Y����:�W��g�_���K��&I�9K%�n�'	�r�y}̀J�R@]M�8.G�S�-fWӄ���|N
e�<q����%��f��'��7+���!��[��d�t
����>�D!�z7V
uNh�X2���p�7\��e��G��+��y�Lz6�RGO2����3|T�4�z��{S,����d"�U�]��0��#�辭I���>��>m��@Dlf�S����]�p�(�—7��#�c�ʪ��e��|�W�	we��`��mvɺ1"!T�v&��T�L�)|�_7j�s'�=�Ss�c���_(�ґ�Xy��=�[�'+��Ɋ�-��s�!��P��%�\��p��
��Ȑ&�U��>򦬃c�����]�hb��(��V��(uZ�LĊRe�WkR���WƫW�=_���EuM�-�u���O�,=8����_�Z�ٯT!)��%/�����9蕗�0���-��.�K�
3��_K�AJ�B�
U�+�dȺ��ć�#,�u%�;��ɕn b�^��i�P�"�f�Ie�$���r[���A�\�Y ג!�
<J|
�����X*�,��dT9:�sB���u�I�GTk沜�!�o*!Q�9�Q]���vo���喝�"2�eS��X��y�CԎ���F�M�uͽR�_D���(
áe5�x
��F�eȦ�w������T�i�`CB��v
2�����[��ME�'n�i�n���5`C!N�O~�[����\U���v�z�9d`���=��c�P�7O]���b���[��d=J�֮t�u1J�u�)�)L��P���'���!A�_0��4�
Yt�	Mx�<���1\�\�!U�����H0��.�H�@����;�[l��}�����O�vMM?�e[.�.�1Ͻt�Q ;�Fcc�-6�7P����rQt/�c�DMz�0{��(G{�. A��y�o߃.}.�C7R��2J�A#��\F��x�ܮ/����Gz�A������4�l�?�!��XQ�)��(�)����WnL�.{y.t�eA��;�}��]�^"�i����`�hu���N�@�5��x�&�w�(؉�L��G�3��e(|E�:? ��姉��R�D�|���
n&ʁ�F��Y��	ն�Xh	h&Ր�^< `�����4-3��kn4^؊"ë�ևg������G�-#����նp�ɤ<N���:�����p�˔X-6��]�:��Ȣ���6�!�,^R�f_�8.˸
����l�I�IX�x��<VGd�ѹ~ �۵r$�ws����쮋GN�K_�v>-�Gd8��w��u��ȾJ;��N��M�2�)o��.�	nz3���g5�%p��[��-ઢ�5��OBo�V�DUܺ��GSy��	�"Σ��{'�Rqp�46u���CA8���*�6�r~U)a���q���' �9,i��3)95��rР��][!��
\���>�w��~���p1��Q�
}(dnk�7v��/J
�e�I	��o⟶Q�Lx�R�O�WCo�Ʉ�A�f���1��#
�2��Wؘ��g�2E=��tp���3���><4t�6�a>�{[���m�D:yb���F'���7B�!
 4�(A���I!�I�;1�yV�=��0F���p��<h4�*bjDu�����_��+y�N��p;Z��Cٮ*e�G�z4��y��J8��b�e����SKo�0��W�T�BE��-]D*���R8��x��pl�v����<�����O�����E�5�wT7^�o`�-��{��m�i�kaӅ�8���R0=8��P.���`*
y�s%Bi$���F	E>�}N}���5�B#�BC�Q�2��@��_�lo���BE
��e�F��'�V�%��q$�[�B��ˢ�fFx��9,WvC�p5i������������=�1d����0!�6��u��Mj��]rPX��o0�uף��wc�z�N&#������8���m��y�H��&��Hr��Ω�]e\g��
9;$iL�J[�bo�Ȅ��~�H�V	a�p����}ZO�}�WS���Wa��\�PT���t7/H�ԝ֢;��,�Cv����
N�ώ&y��g�4Z
�?;�S�x�c>
Ǝ�q��r��ϧb%
T�����vf��&
ſ�[=H�.��ŏ��<���n:�G�����]s۸�]��ބR#3N.�)N'�.�8�M�7�z24	IL(B%!;n�����e���!����b�߀�<abuS��d�tĞ�=���-8;XTb�����Z.DU��UQ0�Y�k^]�,<y�>Ԝ����f�XW)g��8��sqū�g��%���׻��)8+򔗀&�diR�K��fb]f,/a��㣃�w��l�<�*�,/�0JҔ�u~�����l�.S��r8b_�Ek�\�*Oe4�P~'$��Ϝ��6�_%Ś׸V}S��:�ZՎ+�T����I*�KQ>�V���]~��zY��Z�W�����+�}~�����������7V�����y�g���yƿȟ�nf���Ӵ�|ϓ�Wz�G=����z����K^-�����x@Ss.�gŭ��IY�h9⿊�uU�M�.��m�˾id�g`\�T�xJ�]��rUp��i������a�L���SF瀣���׉L,�J�,*P��_�����r�^�G���b��a����q$�
v_�f@+�T�u;)j� Լ̆�(�X>cC��\�lLx��"��
1'8���5	+տ����WIU�>�ہ~~����4�����$܈a��ɛ��>�V��Q�h	fU	4���=fQ��4\����Q��a��|Y�kpP]�f�!Y�=��E�-=^U�F�ϥ�V<2\-��M�$E��x�b>/�+׏�cX�/Ag��ʘ�q��p��]��w�p�ެ���<��ԁ�`��0'�O�{�!�!��M8��vQ���ˣ�Ӵ����A7;K��.2mgjݝ�}�h�.�,�WEr�v�lKQr-�CW&�s��q�_d�+���m�jg��@�I�t�!����3�A��u
�j|=�}QR⚎5�x*y�K#�(��7m�.W���q<���҇��:/3q
�(E���y��p����@�>}͸�E�{ A�R�Ӂ�L��Ė9����H�.�R�Y�A@��%��D�L���U�({9yaN\��1�^�3g�� ԥ��=���^�.�
�(�Ԏ�bv
FBKC%g);x��6������J9�6c�Y��v
0�B���o41γ�7��h�Ο^L{B�m�B�'�*)�\�i�W0�j.��%�B0���w��7oŴ�%>)v=GdC�qv�m�#v�u �N��$�'�F�&Jg!Cht���!���J�^C�XJ��p����ɪ��ګn�O�c#�?BdV`�}��
����B6VI�$�PZz��4_q044����l H�Ū��@���P��r�ʓ]�e���(Ϭ��5����'�MuH�	0�J�.b�C!��HG+��<��
b��F�8�w�
(��kyNU/��(S� �t�W!1n-ʭ�8�J����{I�V/Qڂ�20f��R6Z� ����ey��<)�s�&1�@��G^�G��_�h�\B�<X���b���~��Wc9>�5����9�Gk��K������{�a��\����
,�?�T1[����{�rPʪL�%�� ��Q��8��Y:azAt����/�!��,���)�y��゗s���Ǐ�dٙ�
�s�;	�<o������ͺf`��f��?kb��wx�;HRL��'nj��
�I���0^�@'B�F�IO�s�k�%�6>|_�Ș�~N�J��y�岿��9
����l�eb��p���a@�?�K�͔P��U�ͭn550Q:��?�SD�X�bs�>2Ԍ	(K a�<�4{}�w�ER��Ơ�C����Ar��K^
��rλ
�M���_����H�dE3��>�}%�����I[*N���tMA5�+^�$3ݧ�@�h��}�c��p�P̓yB\�/TȀ���Z8�A�ݳ�P��Z����:�*���P
J�'D���g�mA��^\+L���i4�"qC��_㴡n�q����j�Q��"CN���KW���b���
&V�@q�B+���a����4�X�FԨkf���䮮��o�ᐌ��i��ӌ��ugSS�`4G�Llw.V�*���I��![��a�C�9F�f�Q���O*F��R�Q�������:���;ՅNC��E#S:��k�6�u���n��m�+��R�٬�=5�r�#ȵ�,ILmBϽt�nbxU�%'���s��,Y7�z��[�}
�X��[j�R���9���j���;��0b�w��"�u:�~�q0�A��`��H��1c�fdž�ȹ�)���	���եH��i�ċܭ��i�a��CлB�v��ia���n����}�/��'k�Z��a�n)�
.�މy0wZ��7���p�o���j���8��p���\P-�$Z�2?EY<�`�����[E�C�B��?`|9�Y�����\f�c���yo�v7��l����ptьQ*��vB��4��/�{���}Rq]�@�k��݂L
�{�.}(σbf��f�Z�TVph���FDVT��%{��Jk*Q�/kEeo���4��~���/���^�#����>��.
!m�.��e>DjZǷ9
gAB^�f}2�`�D��ehׯ������=B���Qy.	�o,�f��\�捁`���MZ�2�Ԝ�.�}��A��0V�YLSЙ�)xOg:�j��.b�=�� �h�}}�A�I�;����Z=7�Q�	�z4��W��m�
}�~��z}�ӧt�~�
��y�q%X~$��.�C�ϭ�{%
*V�=h��V�r�N�]�1�{;P̌�٨��2�s�2�ׇ�i��G4�mA�&�}���L0��;Z��i�~��%�US*pt���`9���L����aY�� 
M?G��[�E��!�4��D���<_��}z�E&���Xɏ�%ܺ�[ll�4Zi4$@��v�^_����(�{�
u��K``��d�{�?m7_{���q� ژ��ݧ&ݓF�֑�Pߑn�$:)e�|�V�m���>�+\8k��%��u�ξ��YS��[/�:���A���a��dn6��d�o��n�ɹ����K�f��ݦAln����K/te�p^��i��޶��[���-��F�Ú�5�ۇ�k�.a�i�8�4T�m*���{��mY��
!x��u�vR!���}k����vnP��ݎ��@�dȻP�������P�z���iLl����~T^֫��~�����]	�a���@x���3-8����ܲ�h���ރ1.�o*T|)��j*HxE���"��r ��IО��|��u��VG�8���>�����4��t[_`�=��_�z�	s�u�����v��h�C��?�MWX��?B��r�ͷ����;��7Q꿵�N<�{���m����h��_W����6��|$�^v��n�9�L
f�q�;�n�{�)C��>�������f�D�tb��~��&�$�6� `[�m��~�zM8=l���t���!7V��oX��YeJ��~.�+���,n:�[�t�/(��y��Qf?w��I)܇�&����Qz?�1�͵��E�a�B��7�YI����@U�3�$ΕIWw^�`�I�P���]�l!P�A9�N����ݪr�3��k͚��sa}�@�/��$� �=��BB�~��W�k� =�v�x�G����������nb?��Q��t�|�v0�i�v��t��/����ػY�듷Zf�"QE��\�I��>4"s&;��X͎�0��)���)��j{@ĉp�{�ܸ����q�x�v�u�t[va�j��|�f���׏��BsW��n�f���G�4S�P^�,�;�v��I]n)Q�\��bK��و�IL�.W��3ܔVn���͖�N�bJÊ�&�h��,�jJ����QRXL)/�^���؀Օ�`���'��Áx�z�/�r;ԅ8�'�3�o`RKˍ\;b
�
�Ŏ�fb�$�^0����h���:#˥=����K�ƕ`:^h^ٹ�	�+��`�9b�|�}�:iyX]��x��Mr-�݋��\_�7+,�2�[v�a)�Y;�%|�BIfQl�����u{�h��P�aʫ'ڔ0#Y�u�Pf�j��,\O��!�hԶ7q|fz�
�L����6j=���#�ƒM�Z�Ԟ��t���,#��H����$6��A)yݦ7=Dp��b�ۖ_�>>������hit����@T�b�<k��I�*C�l�Ui�\�	nн��A����mI��R'�L��7�����m�Wv�y��q���g���z�T{V�6 }}_p�3�T�:Z)y=�R^��R�V)�?�3�R>3%�t�
e���B�u��rɰC�{J\��e�'����f�-v�`��\:;$[���e����_��%*�S�0��i<W���B��$�!�ob�tKײk����;��-
�]��E��8E�ŷ�;��Ymw67�!fos���߬�=��7pB	Xr�ÿ�;8nP��D��FZ�K�w��Q!���t�-JX�c@��������8s^�mP�����0�Q�=}Yxa�q��#�s����&">����T�����A�5R�[˜^I�0��v"�s�.U�G��>R��E��soF�	�.w_Fڸ�+��,���7]W�LzA�P�<�hLN��7_�����Y[o��~������:��ǤA뵽�l�	P���1y$NCq�3C�j���̅�r6}h�y�s��e�gg�R�;�֕Y�/��R�V$.+�7�ۈ��U��\\Ե�V�d��O��Ŀ,	��RVXݙ�D�K���d*��NH�����v5�Z�`����l�1�JwM)T��$޽��~s-V����0yI+�P�(ȸ��m�,NŪk
�t�-ŗ!p�3�p��'xp��9~���m�����y|FQ+UHG"�������*����� Zk��u���4����:�:�b������U�͛����#���䤪m���3��d�GX�)_h����ɻ;��Ë[y��~Xz[!��4���������RVp8)_��U%�j�U�Ђ�f�m�qv�A�r�m����}�Wg�j�(,����8�͓�-���X�n*���bC��u�覛zn�+��3\���NT��F:��Uz���N8�!˫�C!���%6Ō��’��δ��Xі�%DCTZ��(0�J�ŀ�bc��V
��,>�e���@���l��oXpk���E��HST���TX>
ҏ�����-f
�Xy�c�=+z��^�d~J�{2�6q�cO�3_Df�vR�pH:��C؏���u-T�bK\
t4X�$87�D����\Au���-��T-�y��S�{a-*	qHK#�>zI��"�6�t��z��|�y�{��ςݭ�P�x9ʐ`W�l�n�W�����uN�-���ZÜ�����cU�&i�{�}@��؍,*�ɠ�%wxݹl�|�lD
�w}eY�,����)���j*P�.�5�ʮXe4vbh��U���
f�W�(����*T����EQ����v6�A-XP/j�������p+,8�>�����L�3�I����PB���-���4b.�W"��GI<��1�N���n��;4tT�ej"�B��+t
�X+f��}t���T��T���Ք5���74�_~����u@x�~؃Sh�	F�=�E� �<�Mď��X�e^l+�*Q�ؑH�d�E�7<M�Gn���u
����]�e�J|Y��u�*��G�yU�<H:��6��Fn�.�Tcu'��[<&�2'cV��H���1\~k
Tr@�	��M.n8��g9�"n����X�~����jY|��n��t_�|bl�X0r�\%~���G
4-x�`\�1�$<>]z�q�C-�&G�C;_bL� �E��ߵ���=���1F��Q�f:�u�_�F;�v-��ל���z�n�������<R��mg�lT��Kvq�uAa��������f�*<���!�����S��]�V��s�Qy[��3k�H��Y�-��`��)��j�^N�0��8G���bfоdݧb2�'K@�+m�k!<`^���<�S�
n��`_�#@>����ґf�P!G�|<���E��	#�)L�3+�rq�,�
;�c	vb$����{��o�����	��U��o&3c~BMN<ty��qEL����G�Ž����G���֏�G|ӿ8�y4iv~ē�I�le�'��a�M-û����6OG��#!��w
1]�<7{ُ�F���(�`��'`�=aό���
c��Sk����֘n�����p�y!Ce��]��~�aSC��U^�e:m��[H=�M�#*�H����\�?����5[����e�|�3��31��}�34�X$�4J��Д��)�v2Ly`��I����MG_XKe�\���j`-܆z�X�_�];�Lq��2U�Q���mVմh�C��e„��B}����{^�ϣݾ
���'�x�j4Cy��M�u�uf��Ϟir���\˝�η޽��>����A�O���r9��g�<ø��|݁9�^��N
cL����D=�(c\dO����S�x��3{�0�eG8��L��ē��:�?�ܜ�؀pg���4ү������G�<�j�]�U' ��ˢƩ�bV���A����5�ttr����2[�+��0*~<�||F���%E?�|����m�bO6�PJ��4>1�Đ�}K쾚�e�4�i���N�LW��������v�f�wq>F��5�}��eZ���M9�O
�ȯ�DO�ě3���O8/��,�^O땚���M�әv���[��q��Ĥ8f�7�-O��p��J6M�wp�u�m��t�ѷ՞4�Lo
_�>��
#�Ы٧,�����_���������K��;�G%�f�cT>���e\��[��V]k�6}�?,�6��ͦ���Ж��K)����Y�Cd�H�n����#�#ލ.�Ŗ5gf���
m{tT���_�vs��_k���ن�>t�����AkH=8�������<�-!����Ii�Vv�Π��~x���p��$6� ��Ti;��@����O�<}��4�p�����XGwd*��l���P�/�f���k�i�"u�!4�Ud|o]�F}y����Ƙ�.a=č�7����.�K��v��g��e���z7;،V�MoSZ�Μ��6��m;ɂmy�]�LX�΋
}(0s	�Y�úg�]�	���3(�
�Z�[����~n]�fr�f.+��Է��ۛw���TU�cU[�P��]�(��S�|�A+j��Į(�=�@t��%�%ZIt!+	��BwC�c@d4�V.�<�x���nf'�	�B�NhKs^���2�l_��+f�P�[-�;��4����\8�9{x�뫑��𛌥���`uwW�-�=~?D�L�v3�]���.�%Q�;�/������&����~����$��R#��l-7x��t�+H�}N��ְ�Y�A�Zڿ�{-�:�Zv����S2Ee��w�yX��EW�m�)G)m�P�J�#yPXR��Һ�s�vȩ��=�)��<*���Y��1o��n���
+���ad�37E�"P$���#��3�)*�����}L�ݏ��'ְ��UM<GN��l�T����M�
���j��ٜ�e����ofZt.�8�xoNjy��n60H&Y���a�!��$�<�eY>�.�]��7�&+y��Y��� uI����:�g��
4��c�Ap���{�w�@?~)�Q��U4��Qj��9T����Rn�z8�J
�V����<�
+��a���3c#sBQ����ھ�U_Z��pYj+�{���tS�6�]K�褁���{
  "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqOhnwk4+HXVfGyaNsAQdU/js1Na56diW08oF1MhZiwzSnJsEaeuMN9od9q9N4ZdK3o1xXOSARrYdE+syV7Dl31nf6qz3A6K+D5NHe6sSB9yvYlIiN37jdWdrfxxE0pRYEVYZNTe3bzq3NkcYJlOdt1UPcpJB+isXpAGUKUvt7EQIDAQAB",
  "name": "Cloud Print",
  "version": "0.1",
  "description": "Cloud Print",
  "icons": {
  },
  "app": {
    "launch": {
      "web_url": "https://www.google.com/cloudprint"
    },
    "urls": [
      "https://www.google.com/cloudprint/enable_chrome_connector"
    ]
  },
  "permissions": [
    "cloudPrintPrivate"
  ],
  "display_in_launcher": false
}
��Xmo�6��_�j@%��lgI�9v���Y[��0`�:��hR#)�Y����$Jqwh[y|�����ŽB��M	dg���`a/�S�]& 0�pxt%t	kCWHI��?1X�P"����
(*!k)�L�7�(�͍]���
y; (ǥ������.�q����g�fN~~��tD�V���T��6VxOՖ�9��o�X�h!_ωڮhvvq1"��4?������!��o�?x��;|���aR8B��f����Z�Z����.:c+i����3�ac��,�mwѳ�J9�"w+�I0{�(L���6�{L� ͹uZ��f�-��9��;A�|ݐ+`-��B
�%-
&���F�n0+4.�,AD_�_[%+Q��YIU��O�e��q�fz�/=8�ӽ����ڹ�&�1���p��P�}�:2��0(���Ъ�y��l�����u�E-V�[��X��/����!Q��r�W#��Ji����Ly��Z�6�O#��%��Zշ^�R�Vb|G����dr��3�nsqNJDA��ht��KA	������n���.jܞ=t%Ɯ� ��g�O+#o	(���H]��RH]�5�*3�;��$?��n��nS	�D�kI�l�T,���i���@�$^�_����2f.zz�9����JG$�����p��'�*8�D(�ō6�z��P�/��1y
��|tF8�`�df�t�p_Z\�\�sr�>q�VU����t:a�.ҥ�=���|�f�_�_>{�$�%/���]�̴�*�]�Pzz��E#� �fwI<`�Bh�N,�0�X�7����g�7�R���+p�4p�j��5x2�[0/�Q�{�R�c�|���O;P�,�c��[ڮ�S�r�oaC+nno�wc7�Z�pأ�DT��SY�+���?�@�)�?���0��P!�=���ޑ{�O\���|G��o�S)���r���>������_U�0�uplq�Fa	�fC�ܩnA�d���߯V;W��7�����?�d�WIܑ�@ώ z@���[,f�6Fz������)����~���$�#��-	�3,�J
8)��O&��Ļd�|(Un�į$����y�D��C����m�s��C���ׄۈN�3L^�k�1�j�4(Me�T!2������X��p�҂�P9��Z�X�;"��T���|ꉤ�f�X�,���8��(�v�=�GT}����O�Ԯ��)�����YD(w��B1�0�@
XU[LN�1����tړ,�^$K���/�N�'�M�
xmĝ�N���v�6�֭=nM�zzt�!�����"�kq�J�\W{���S�b���tظ?v�/�w��SѺ��;OqP-�Q=�vD�����4F���ϱ!���ۓ?Zn�EoS&�m��W�"5i�$H׮o=�I��w�I_����1g뿈���7�ȝ'G�]V#u���:�S�;�Pw}yҗ�Ro6�/EW�i>�M��'���:���6{�L��ox���6`ih���Qӓ�k�.kx��|�{_x�돕���v?�a��W��d�K5�
C��/�����ϐf{�G	{���U���/^�Z�S:�ۦE;��v�_ۀ3�XrNK
Eܩխ�
�E�puݺ�sy˳��v���m�����^6��xu?�I��s��/��#�Y`�%9,�=��e��di�pX3SB���{�Lg��
!`�T�GA���bb�:���������UMo�0��W�B�[�4N/�n;
��P$:V*K�D�Ϳ�ٙ�~�"�|��#C���+:v
�����@����+�~+ЉބR�_�-�����"Q���ָh�"��blI@��
���]Q�>��P1��Ti�e�7��6���4�b��;c
+���v�U0A���6v.����D�~w��mg%a�|���u�W�<G��؛r�q ���ފS�A�����z�Ɔ��d���z���Ï!>��ブ$�&�2v�1�򜔣��Y�a
Wp���-*vP�s첹]��`��l�mv�N���P�M�r0�F��0���ܖ,Y����bؤ�ס��b��?���'�NZ�(��6��쐞��mU�L��U;
6V.��0^>���#�<���f.�å��� �p_�sQ�^mꂌ<(o��b�V|������.�V�<z�ٝ�2R5�+�
�Pc��_���'s�T�d ��uG{CE��u�ޟ
Dm�ᕪ_�]R��8��P'k�ov�:Ò{p�N_Ny��>dՖ����͹�w��������`?z��+�p�~���کӼ<W|��41�׼�7���P�~�8|��k�*����A�0E���I5^���q�ځ6)3Ӓp{��y��%Z�l�g�p>�.x9B��499�Є���R��lU��[	<!9�P�b�-a�3�$�,�
���i��
�=KnH0C�H���s��q�ǽ�}���P���MΘ��uQAn1��+�P`׀�n���Sj��"i��y�,q���!QN��/�N��@r�Cr4�a7�ď��뗋o��}��WE��r�+�1�2eJ[rm5��!b�9#ǒ,�FG��1n)rX�`�~�9��<[
�&�X���RKp�u��b��~��=�UeS��@M����pG�͚=��:��1>�St%X��	�U@]tL��V�y��7\ǰ��^��=�Lm��l�Z1�d��;��0r\��yy��;EK97���#���/���"G���Zh�xm�''u����$���
�Yz�~��@/��$�JOG�q���w�t��<O���������5��p
��Q�^��Q GN�/����g�qxe)
�#<
jpg� *
jpeg� *
mp3� *
mp4� *
png� *
csv� *
ica� *
gif� *
txt� *
package� *
tif� *
webp� *
mkv� *
wav� *
mov� *
swfD *
splE *
crx *
001� *
7z4 *
ace� *
arc� *
arj: *
b64� *
balz� *
bhx� *
bin� *0
bz� *
bz28 *
bzip2� *
cab *
cpio@ *
fat� *
gz6 *
gzip� *
hfs� *
hqx� *
iso� *0
lha< *
lpaq1� *
lpaq5� *
lpaq8� *
lzh; *
lzma? *
mim� *
ntfs� *
paq8f� *
paq8jd� *
paq8l� *
paq8o� *
pea� *
quad� *
r00� *0
r01� *0
r02� *0
r03� *0
r04� *0
r05� *0
r06� *0
r07� *0
r08� *0
r09� *0
r10� *0
r11� *0
r12� *0
r13� *0
r14� *0
r15� *0
r16� *0
r17� *0
r18� *0
r19� *0
r20� *0
r21� *0
r22� *0
r23� *0
r24� *0
r25� *0
r26� *0
r27� *0
r28� *0
r29� *0
rar * ���0
squashfs� *
swm� *
tar9 *
taz� *
tbz� *
tbz2� *
tgz7 *
tpz� *
txz� *
tz� *
udf� *
uu� *
uue� *
vhd� *
vhdx� *
vmdk� *
wim= *
wrc� *
xar� *
xxe� *
xz5 *
z> *
zip * ���0
zipx� *
zpaq� *
class
 *
jar *
jnlp� *
pl� *
py� *
pyc� *
pyd� *
pyo� *
pyw� *
rb� *
efi� *
torrent *
btapp� *
btskin� *
	btinstall� *
btkey� *
btsearch� *
oxt� *
msi *
msp! *
mst" *
adeb *
adpc *
madd *
mafe *
magf *
mamg *
maqh *
mari *
masj *
matk *
mavl *
mawm *
mdan *
mdbo *
mdep *
mdtq *
mdwr *
mdzs *
accdb� *
accde� *
accdr� *
accda� *
ocxZ *
ops[ *
paf� *
pcd\ *
pif
 *
plg] *
prf^ *
prg_ *
pst` *
cpi� *
doc� *
docb� *
docm� *
docx� *
dot� *
dotm� *
dott� *
dotx� *
pdf *
pot� *
potm� *
potx� *
ppam� *
pps� *
ppsm� *
ppsx� *
ppt� *
pptm� *
pptx� *
rtf� *
sldm� *
sldx� *
xla� *
xlam� *
xldm� *
xll� *
xlm� *
xls� *
xlsb� *
xlsm� *
xlsx� *
xlt� *
xltm� *
xltx� *
xlw� *
partial� *
xrm-ms� *
rels� *
svg� *
xml� *
xsl� *
ps1+ *
ps1xml, *
ps2- *
ps2xml. *
psc1/ *
psc20 *
url *
website *
fileloc� *
webloc� *
js *
jse *
vb *
vbe *
vbs *
vbscript� *
ws{ *
wsc| *
wsf3 *
wsh} *
msh% *
msh1& *
msh2( *
mshxml* *
msh1xml' *
msh2xml) *
ad� *
appB *
applicationF *
	appref-ms� *
aspG *
asxH *
bas# *
bat *
cfgI *
chiJ *
chmK *
cmdA *
com *
cplL *
crta *
cer� *
der� *
dhtml� *
dhtm� *
dht� *
dll	 *
drv *
eml� *
exe *
fon� *
fxpM *
gadget� *
grp *
hlpN *
hta$ *
htm� *
html� *
httO *
infP *
iniQ *
insR *
inx� *
isu� *
ispS *
job� *
lnkT *
localU *
manifestV *
mauW *
mht *
mhtml *
mmcX *
mofY *
msc  *
msg� *
reg *
rgs� *
scf1 *
scr *
sct2 *
	search-ms� *
settingcontent-ms� *
shbt *
shsu *
shtml� *
shtm� *
sht� *
slk� *
sys *
u3p� *
vdx� *
vsx� *
vtx� *
vsdx� *0
vssx� *0
vstx� *0
vsdm� *0
vssm� *0
vstm� *0
vsdv *
vsmacrosw *
vssx *
vsty *
vswz *
xbap~ *
xht� *
xhtm� *
xhtml� *
xnk *
cdr� *0
dart� *0
dc42� *0

diskcopy42� *0
dmg *0
dmgpart� *0
dvdr� *0
dylib� *
img� *0
imgpart� *0
ndif� *0
service� *
smi� *0
sparsebundle� *0
sparseimage� *0
toast� *0
udif� *0
action� *

definition� *
wflow� *
caction� *
as� *0
cpgz� *0
command� *
applescript� *
scpt� *
scptd� *
seplugin� *
osas� *
osax� *
mpkg� *
pax� *0
workflow� *
xip� *0
mobileconfig� *

configprofile� *
internetconnect� *
networkconnect� *
pkg *
deb� *
pet� *
pup� *
rpm� *
slp� *
out� *
run� *
bash� *
csh� *
ksh� *
sh� *
shar� *
tcsh� *
desktop� *
dex� *
apk *
bmp� *
css� *
ehtml� *
flac� *
ico� *
jfif� *
m4a� *
m4v� *
mpeg� *
mpg� *
oga� *
ogg� *
ogm� *
ogv� *
opus� *
pjp� *
pjpeg� *
svgz� *
text� *
tiff� *
weba� *
webm� *
xbm� *"
 *(
��Xmo�6��_q�	*�%A:�6�:	��d�W��Z�Hʎ7��HI�c�v��X��E�=�»���_q�e��ؙ6��?�,�L�Biu0l�d���3��i�v�v��-+���Z�R1שE�2i��bg e3s��Li@�H8%���6p��C�R�K�ރF9�]J4	")&'� N��a���hT�c4�ؘ��;�8a���I+�G��a�����B��9��������6Q�4ὔ��7��ț
8��AM�&�@a����:Us�9DK`��"�&ARX)�لY�Y
:���S"�u��ף�O��0�p�j4��E��J*�=�ޜ����i�-tO�G?�ތ�H{�v/�\�S��w��4���x�	%:4�O�A�,{(��(t�ڑh�$(jw"tFz������n��~���u6gB����5 ���S���{��!d,7tB�|h�r��n-��c*5��sv�Έ�蜜�AL({�8#�wm��ӏ���G�wO�*����e+�Zd��k��δ2��nQRY7﨏�+���K��
�����K���sƑVJ՘�X2���|��\��N�ߪ�)�,��N-S�r�:��L[��h���b������G�Ɔ"����H\�Yn+�Z��(�~���_&Y����H���@�E�,#B��l��֪�C�lX�k�����a�7P�X��[=J~�JCe��ԐnɌ���|�I�R���X~I97�������3z�P���ɝTX��q�^��^:�����V�T0%�����r�=���G	#�S�t�� 6�
����%��i6sw\qoe��e	�Q�t�NϘ�"VpN�jjp}s�g���W�*7�a<�k+'�U����E�7hh$��$��IAɩ߻��^��
|���~߮[~���cw�HM���ĜI�M�'��zP%j����3E[�RY
#���7��qp�_
\ڧ���{c��'Ns�w�v��zuY[�#�x�"o]�]I�Y1�y
#ND*hT�h�5U�So�o��l��eX&���LwY�����Z�bí`}
m��{q�Q�_�t�=�T��?�c��h�UV�%{�:
�j�ݐ���Q�T�ķ����M�%y���k�R$��s�8�1io!sah�[7�m1����o	$
E�:�V�r�ٰU(6W&7�uj��!/��5�����o�;c�.=������z5_�1�f����g����MN�0��9�[ҪI�ӨPV�t����8��jjG�Zwlj!e�f����ff9�N5-��"�5�+®��$�����6�u���@�!�Qx���T[	�Z�	\����#-)Gv����7�Rj�I:���g��B�2�����?�(DM�Kϫ"�{p�Z�
t�]�WD�x�8	g��vb�r��O��B�C��y��̶f`JZ߈7� J��W��|Kg��#��pS;�>I�/��ס5c�X�޻��[<��
�9똨Y������$D�^|Ӈt�аָMy�8t!�G	�圌�@D麿�3%��p��"u��pc��V�8=E�{���>�1���X�n7}�WL�Z'�:�K�8
�(J�Ԯ�A�<�wg%6+R%�vTC���m�W�vP�d�s8�3s���!��f+�r��痯~���|%Ś�k8.�JH�qQ�]�@�By�Y<:<��
A�WL��LR�!ПKq��c�[H������`)r2ӫDC�p�F����g�8�#���\. gƣQ*�s�1g�"�N�&�P�	�%O5<:����$t�%K��hD�ϟïz�A�{ֱ�߷G�IqKG�$���B*��p]��
��#O֛"^�>!���t\<�2پ�� S�\��ۆ�/����
f��룡(�L�0{4��]��M4՘k˜h�&��zȱ�ȱ�҂mM)d��
�)+�&���/w�,YfS���`@���7d�_�}����(2+'ǥS8�~�3Y$
�K�sm���g3gd�Y�3~6�髀
ImLA�x�mv#���IJ���j�)˙�4���"H!'���
�����,ST�o��O`��d�ƶe�fg6p��Z�5� ���g�h
�m
5����#�����|�3_ao�	,HfT�\�X������1�	���U�<����)��>��MR�i�wݡ���b��;��4�%����i/�S_�S�bꡧ��b|�䩭�_[z\k����t�k�I;/u�K��~@����R�)��^X�x�����9_%|�Yd��|�َ�bn"fGc�£>�RM��G�{;��2�$��;`�&�0�w��L�	δ�a��S�g-�<	zn�-h��߬�9<�y,O��㛄��"�Q�+�IE�l/���M�%.�/���^��K�+/.a�����-q���$�~rKx<??�t��Z�aa�Z*I���t��U`�؋���Q���)��ؐtw^�h�fiY$��kϢ'n�t���u�b�{�}o�&��QEn�;�S�z���}�T���-�2��k�؞�s��"5)���?1�O�����i�Æ�*
�S����������Β#�<D�u��
:,;j܃[�_N=��ӌ�p�0��[���,)�?X�g�aw�K�)h���G��#GzX�Ș��?����N7J��k��
�X�@U*Ya���i:C��7�A��ڒ�G����CsE��@ݚ���T˽P.�"�I�+� xJ��o�]�����_ű5
�E�,*���PZ�!�;�#���]�y�e�L�ok[:���?F�}�E�Ȋ�..+�ѽ�2�P��H[u)y�NU%������MՍ2��k:�!ma�bO��3�:��,��dأڿ.�إ���V]��6}ϯ�<��(�}��lW��E���N�P "���PD�カ�0�P`��$ι��^��v�a�O�	����o0�p6�m�lv&7���i
ZI'��ww�nf�[��$������s��	�$��"�ß�<��dI(��M$aQX�i�2CB'0��]X%)�XV��тG̔�(�B����	I"0D�i�o�J~����������	]��ZKF��؄��G�w�z��g��_�w�ك��X�6g�}װ^hlb�Bw��Yh��NF�TiK�OO������'H�E���=>	�/���և�+#n��;�˵�x��
��d�e���*K��6n�wr�(/1�9����W:�g� B�e�8S�C����{u�3��+��o���G4_} �dCch1?�wx�b�
Tu���d��^	�y�K��gF����\�B��|�,�:��|??#��rj�?&��Jsg�T�T��/3oX�S�!U�+�V��3�ۣ9��8(Ʈ���aGb���Q}S��=0�h��X���I�޻(R��+��d5���))i7:W�[�	��d�%q
��Ƨ�,�g<�Y,x��c��)�b�qB��b3P=h5>o���&�O��
#=ȳ>�S?xڅ�.ʄ
�`,%-�QR�<]�N;��+*m\�
�C�*|�;��V��ңo�(�6�2��	����0U�'J���D�*�H֍��q8'��uж�Z�1�"���8�*5ߙ01)��v
�>'2�������Rį'�ag$8ʊ$�o����R�*��Q�_�ܨ?#��Ȋ{��ɺYK�ไ����5���>����J}
����2�_�֩�,����R�<��Zd��K��	�Dnntm��|z�ͬ�J�`TMG�(����\�V��l�(nw)�"���Ʒsu&OV��0�y����y�k�bꁼ�����r�w�լ[5��љ�k�*}��`��=�.5�v��#ʮ���C�(�C�<��M���nv�Xeh��U��uq���w[E�d�0��D����TM��0��+�'Xi	m/�@{�HQS@$�ce�	�굷�B]��:�,-IWͅx���7���A�mf���O_ ��L�G�?���L*��9� 
5�&Ng0��F�)��i�2W1B,{��*�	l@aN��8g1
[f2j �6X0�2	0a���YH e�N'VN�)��&r/���/�e�\����O��\ĆIѻ���nn/�F��tG8�a�f.���mh��v�0��q�u�׊@3���6��)�u�IygF�kX�L�tu�D}�{�Q#��v������(�tñ�ы��KO������J�x~��Y�Z;����x�@J
�Iy��۟Ed�\-"2y��A���U��[Q�.㟘\�6��pW!���\�os؛[$j����>�Y�i�͟e5��p�^�)Lg��k��k/jX�e	p•�v[�Y�۲�nl����%��Q�J��ײ�p������Ze��W�mƱ�}�O��V��d��ܙG�����e�{kdeO��߰)y���{���/ވF������%���UQo�0~�8��ڬ�P�Jc�	���r�k��������s�L�`J_zg�ݗ��%{!]I�AQe�,��v�'h���!�,F�B!��f�$�T��<ih5~��H��ŵ#�ҥ �l�O��[aB�v�+*̓��m�<%P:[f�jI*���%�[�Oa��
M��
���U��ʻ
�i�1�Ɨ�2���@6����W�1�\-�"=�KW�^+���;�U��K7\4���0ZP���d'p�
H�]Z.�D`w�6\>�P�@�����6%���0R��
�L+�X	��9��O�W�7W��'p��Fj
�Yx��s�����)Lg�p����{���_k;����BJm׭�#K������
�N��Pӧ�=��A�ܔ
ec�3f��(���;��C{��`��[��7�#w�̹����î�uC��x�@nr6��WQ�rF"��"��g���DUs�KW%��)l�'u���G�y��L��4ǖMeԽ<B�A��IdՅ#�}N([�i��ԛGH�1Q��+u&�������,Y(��	�/�"�yK��=o����qu������Ґ6�E�9,u?��»-�%+y�I�K���<����'�i��n���n�0E����l#����h��bC�N<�-94v�"�ǰ<�q�%:�,�Mh�f�_K����	�9Y�Xa�=���Hr%](�	<"Yy��0�&d4|%	��/P�:�Ŵx�w�|KV%*���i�9h��s�ϱ;����S�r]���@�{���/��M�B�^�~�nRb\ء~�Ei�y�{rX����R�N�0��+���T�.p��*��p�Mb���^
꿳.-�%�dwfg��&�qL����]�0i��L��$Q�Cpb-��"��E1�}D�5Pk"D��BP^#��5̗ ��lii�Q�x�ZI���9f��'��8��g����jcQ�
BcmV��dj�$���KH�]��S��Z��%"��<.P�O0��׿�y	c�s��).�O{���n8r�i�*�)�k��Vl̐�ּ�fA6}���L���:�xpȡ��v�2�u�8��Y�w��|��w�FŖ���-��5��?S����6��Ȑ��t�l>�8�ܿʏU�0 ��6�>s<�g!X�еW��$��z�#=�$��<���x����K����/�y��_�*��S�n�0��+��p���&'nPH��N�3C�$�i��0��]ʏ������rwvfgYUX���릍���G<��E�]�S��[�C�kc0$x
�_H�EU�)\�������Bޒ��7�OoC��ђ,��VDHa�L�v�*h�q��rq{��E�
�E!}��֖&�E]k)�v6,m�„��deN�`[�t����`Rӊc҈p�ƻ����`�NL��-�d(��SLֻԴ�>yP��<���‹���M��
���!:�5Y���0M-��0�S��D�����Y�Q�!|ٟ������t�V1�Q�ك���8�1�ѭ
udy���},_7�/t�ڹ䶿-�<�׊�C�n�b�������c��L�<��y�j@;ΉфR+6�Pt�3E�2'���#���/G��Fbe�����¯����S�,���W_S7�Sl.I(gMz��I�2M�����G��w
�t#���w�J�;��Аv�p�i���wu�yǦ^ZYV���}�p\Y���^6�2�
�R�Xth/Qv �|pf���i,G�F ж4�h5
�-����׹�K��$GMl�b8�0Ä57� 5� �9=>����R� �';��p��*�P�PL��u6!��=^1�Џ����tต�g�8�<,�C2%j�ݐ�G�MF�D��\u��ix��ܯ�h�T��E���pw3F����,B�wćN�� �~�yDr���%����ΚjVF��Ύ�����`����x�5B검����_�p@Sn�B��S�o\d�1~QڠiAvhd6/-��/��#��L5�G䯰|�!��Y�'elW���WR��ӌ4y�FqB*�W9����O��BӉ��/Q��_Z\FVW3�0XMF�5W�B)ڭC��1�^��c��RNQ��Bx���@n,~,�D�
n�΍���̌��AcU���d��NF1?WA�jʙM����L&Y�)�B�Z�e�$�B��U���2��z�<bn���?:����3e�Er��N��2rҍ�m�<D���ƺ�����@E�
�sy�X�{�R��ٛ�K��=h�>��[�7{�0�P�*�N~B2|p��u��W��9��"�2V��=�����y��)�3�Z�x�\<�l��f��[g{��Ȩ[���)����ր.��˨(t�U�_�C5��u�oa�m�-w�Y!8}hP�TI���[�� <OA��`Vm��w�Tj��g������IY̥u>5�u��N��u����==��8�򋙹&�V�b3Tn�]Xn-7�q�襧Շ����~Z���m8#�+��m!�D�V���tr��#��Q�[ �8��5�D���,u�b��k��9�ck�J�����,'4<��NR�^����7���j�:[9�Q�ѣ	�c 4�S�
XGJ���:� [\�y�K�x�����E�G�|��u�1���T�dr�� \IJ�bOg��^��f��8��e�+�?��ߟ�����p���D�`�
u�qv�ݳ��x�?�{���!����R��$N�����w��)����	�D�p��+T˾�)�������%�Z69����!��}d�&F�����#DLw�Д��7t�۪Ϭ�ޤ���,i��5U��Kg7ɸ�[k69��h,��_e�wi�A256��n���#�g�ۉf��
�W��pr�$��;ks�Ƶ�+V�LI�2,��L'��ʒr��v<����G�%�
P,(�W��y�i+��4�	�={�/<�N�z��e�^����\ju�l�U�^��u�����P�ȨF���,y�h���]�F�j�̴�U�V�sQ��ԙ�nT�^_�>3�Ъ�g��m�2m�,-�T#�y�.3���\�7�'g�.��</t����o�}��Un7���\���O��t��W�m�r�Ϗn�b
���&�P�WS�᫇����B�ꭆ�W����=�A�c ]��Wge�lv_7Ev�u�@��j���ӴM/��l�%�R�S��90�(<m�[�c2��i�0��B�� 3+r�p�Y��ɫ�D�c�Hak���ʤ���}W�L���b���h+K+�y�R�%F�S�̲�-u����T���oD`U#�S���� �H�FϪ&��>.+U
�����U�P�Q��T��r�U���H7�A���o�!��}�םU�i�	P��S̨C�{�O��t�mj��R�nL��zS=��Z�ٺM@4��(�u�%(,DV�:]�����xZ׀��#
@A�
��F0 KM�n�R�*�4��'���4G3n.�@��̽����b'�K����m�r�Z�l!vG#�Aw�Rߵ�p�Wu�A�Ǩ{>#��Û����/���V9(L�,�J��-ҴNsݿ\�?�TS=g��w��Z�;Q4a'�om�Tm�������V��}F�Z�F[u��b����MjfM^�|�:mҕ��������~�2��@^�F��t�Q�ү$RC7���12=�Wia�����O�K
����^�e"�|
b�	 ���y;0�Ꮴ��dg�P��J	��`�R�xV:��Y�_|N��n�x�����L�^�>A�J���2�����HL<��M�:�.P���G�&���Ee7�x�f��?_�����?��޸j�H�O6\�����eg�
�Q"�s�*N*��W��XZ�g%��˷o������
`�ɲ�tXlt{�X^`�1���-�W�
�Uw�����-�u�Pܒ��ƀ���W�8ʀ1,2G���r��I�����O�]����l��:!�ܜ����1��K��C��Q2���:{Ey@X۽�I�!Hs�dDF0mC�k_���j>6��֕��[q��s�v�;4�ݛ��}�U`��n!��s��8\2��-y7
k��w�YF6�:��p��
"�	����1
h��
��N�d�n*p��ck[j�ψ
@�@swi��p?B�����k��Q�w�'��;��x�~�+$�@��A��9����g�_�������C0_���68�W�#(b���%���]�`l��!$�~�,��bj�3nӼ�ׇ
d�:u/:�>\���K5{5�pG�ŽR�sXXso������UI��$�ծ�,�$/G^��KL�gl��;l2�f����#�Q%1��A1�u�2��Q�1h���ڀ�j���A�	x�Y�--�κ��oS2!:Qۓe<P&�(G�B��Ik�C�s��C��JFt����;��i)z��I^�)�=$�H�CW\a��!�����1>#�vG�Y9��5m��m�u`ަך}s�Ϯ1�h�Ţ��.�,;�����B6�A��uxEt(�|�F	7�_�A�Y=�Fʞn�&q4-*8�8��,U��*��AFq�-[��6�z��Z_F��=�}�U>�b�m�T����Y���{��u�N�
L	U��s�Y���ܔJ"�wD�mE`ccӺ�
�Or�"L�-���eq5��$:5�ZS5���p�osj\2��
	�]���d)-���0�o�!#���ܷ;�ʶ\]b%hL��US���)���ۂx�񪛑!�o�#6W�����=�J�*y�v[Z���X�b���P����((j���SJz� �?�b�
���U�lGj2�a�:�}�v(X���	L;0[�\�ʍT >�>��YU�\�O�"�������PT[hK�v��Pա|�nQΪٚ!	x5=,B�B�V⥾t��_����b���Ag]$�1H��>)�1�����Q�=�PqL�63�(��༕�����Nj�E��
�34F��[#�a�st�_��؞5�xy�3@调_8~(�݀eg8F�oT7{^�b���
�C��|	ǿ��h�l�'\����-~ϩl���u�R���ƪu��[6Yia*⸭'B�j�i�L��H��羢�A�u�}zU~�Ħ�B���YP���+n�-�j]cf�Y�ۭT�.�(�C�~*�������)�dXDI+���(��A��}��L�U��r@H�q@��Jj-r��[��к����@�����O�!�	~|��������25c�4�޽C����'�y2�����$��,��I��;63��^�\�b��ؗ ��	[G9vl^웗d%͋O�;FҼ�B���|�K`)��������>�m�CJ&E�uȊh�%EL�i�8d'�R�����ᢎU��Qo��%d����=x��]����
�;eg� ��R�zV�ﻼnPv��"�1\N��=��a?�W��׶`�P�6h'J�-7(�c�a�x�7�Wx��Å�IH�;���q�"�K2k��kl�^����2o	�J�����G_�i����s]z��
�}�(���rpB�V�<�XGל�yQ-p���ު��
S�R࢐zeF���k�Ǒ
����Z�V�:f-�Î�A)�(�D� ֪ΰ�u�����[m/�ݨCʞތK�:�k����Ņ�%�\�u�=�0��/ecup�����E�}UC`@�
�8���e�XR3Թ*���<�Cێ��tD�\.	�����V^^h�v؄ҳ+�}�	�u�͛_�K��hT���8b�	���$�3�P(*	�l����QS���{r#:���h�~6�:7d���F30�_�-h,`��Y,�* �[,���F�k�"��ց$�,^ҩ��ħ@~�(b����x�1F[ڰ��ҕ%��4:.
P�$I��I�'�)	t('<-�O���b,��u<w��|�)/x�T�w'�:���a��(����I�<!��?b��=��g��6umd�
N�H���M۰5�#Q�"�����m劷AӁ���+�irK�|���J�k�2�A��'�lAE��&���ٺ�Oo#�-���"��%�G$�U�*-���mD�ŗMǺ�v凌b�km�Ir�Bҿ\��.�w����R'�!��$%��.mh
P~��1!C2A�F���-�uY�J��R>Ò�$��t֮1���j���Q,!1C0��en!�)�26jFA��sFvj�Q�hP&_��MW5�ǭO�����8���`��G�E�<фG �$��n �\�†�Bf-�
䂏DK
�^뺵���X�(�|���@���ֺmar7=t'-|�Fm����->�i��u4�
 ��t�	˸��`M���0�	SB��q�:���C��?��pQ_~\��B���6"?����Ř����+�@wE�,�-��S,�L�D:���C2��$�v�&��
`N�h�K����L�������n���%=�т� [�TX�9:��-*�-�C���}CX��
������#{iw�|�L_S8�=�֙�p���@�3�|�����=�a���!xw�����H}�F����E�<�������n�~π�t��$�Ƚ]|�Vv���v,��.1<K��u���B7���p&kC�pkpkm���،\
�X�І�~�L���&\��^�n~���Cㆿ�=�–\G��R�������?�c�Vs_�Ifi
1��	�jM�	�o�����_D	,�x8l0�Ӱ��)��2~�40��g�H�[�H�5���f<J<�B�Vy�� W�����ИxѮ�d�PI�?����G,�ER�q��)��H��G�����l[�9"���y���/"���ѭ�ŏ��$�SL�(��b��"R��o�jm�Hw>G)����\�g3�[���m@�f�1(�m�����|l��XJ�����a����il�m��~�2@$I�' >�ڬ�]u<�ni�b]�#�D*�b�ϔҢ*�W[�����d�8�Z��	Y��-�\�b��S:
S+)���r�S��l` P����sQ4�
t�-}����qg�D�E��5�mC�&h	���J3�8���g#Vi����$@���_e$ρ�^��0�m�By~ŧ��s�������Z�zqvWm|58��K^%���ހJ�����-�n!�cUk�%S��lZ�Qy��Q���G8[ٰ]��{@�e�mY]Q�c�[?��	��~7�E0��S���l�ե��?K����_A�$��p2Hh;�5�
g4�Wd�ꌃQ�9���3��)�ݧ���^
�zfR�O]4��y�.,��$���ᰑV�D���B���̂���nu3j�c�x@���<���o������*#}_&����6����A�!h�[!<�
�2�(F�Ab
�Hᒬ~�
���e��k��U����#�
�i��~�*�h:�[���}n��5�$#>Kj�T^^K�h^�<7�x�3ߴ���8�T���5��0�/�,�~�2��L[��0	M�^� ����M���r|�@��3�R٧�C'����^�q�:
�z�=�A�ݦ�.��	��b����w���ΆW�a�ݍ�젋\xc�e�_
�Љ�.�:�1P��i��<�
(��Ԩ�.���_K�d��+~5wi��"�+,�#o��F;�ƾ����==rs�����-�<r{/x�i]�@e<��*���	�/��TO��G����Lxw�2_��
��2Ae���	�
�a5P��Q042�vQ���2`�X����JK@�!�LA��A��T�n�0��+�%	,?� 	�@��P �%�Y�ȵH�"��E��KI�� 6��%��3�3\N���V[�
�z6��7��$�-U]�c�u~�ZC�G�B1���vA*�֎#p+hY�:��-0��5�a���h(-H�39F����e���oO�?^�a�4F��9��$/Ծ��fL��zY���.�bE�=��Z��@�\�L
����B�"��j�0��N!�Vk�AY���B���e�b�)�a���pL(4�b&�Se�:�5�)�􊯗��m��I[��Z��q�V"�]eT�y���L%�&ȄK�Ņ��Z�5;�S�Bs$�p�mR}��y욚h޹�*�-=zO��k�3�ʊ)24,�("A�MHr�X�1�Be��.�	�#q
�բ���N7�i�S��ӖQDs>�&:�q�ڈ^�ف�ԒS�+��4ۦ`l[^<���NA*!���1����P4��6{xeb�I�-_����+.��H�w%�Y9Gl���q]Ye�@�����7�A�^�Ri����J0���������Jk,���6z����=���%k�*r�![&k�D���.	�v�����f� A�g���ά2I'��띁V"��O�l�c���ف��2
ӟ�����C������`��0i�q��=4��ɴ��0>��&ܵ&��������۰5�M`tv��z�.��x�Z�w�Tu�D�{���
��D���b:6�r�~��Ζ��=�����Z[�۶~�����@O�{i�ǫ"ݤ��6�&�y[�m�K�I�E�{gHI�dٖ�� '/Y���g��̾HTl�r�]�h4�?�}H��,[^<p�0]��I�ej����ާ.S�V�X��¦J�1����
�<�>j6�*t�!V	.�=�O`���y�$9H��l�,�,�9-T�% 2��p}u��盷���Ga�f)g	}��[qʴ�"(�"�6(����G�5ˌd��Uf�&�l�<��nB^�$�rnH5_\1m�O'ܤې���L,��	_�BZ3ƙ�#d�yK�c�&��s�g�J�~�l2�U��鱒JO�����W��F���M/TfC#��S8==��-�Q�ΕN��W�� M��
Y(ٓ*�U>�DbS�vRIK��l��Ly�������!EҘ���4��$�ҍ����,���()¹�V�Ȏ.U�����&��h?/y/њ�(P�#'�*_{o�VB���ʔ�Y��
�C7�B�y��Y�t�8�0Px��0� �`0�Le���P���d�)�������ݒ�q�+a��⻥&$U�c�Z�L��zF��mh�+A�U�VL/EVn�JGs�c+.��	�X�.��+�l��UHL��>�	Ma�9�i�Wt���OB��[2'��A�³`��M,Y^�s�̄��u(��I&�J������vSzl؁T���z�V�1L9�V����C�B�B��)�ª�p�s���G\ey����ozH�g?ѽCS/�_l�`��=�z��H����y/\/p)En���C�j/xU�=�Vܘ����v�$Ĕn)2a0!�&�������O�2-(�ey�Q�:V��z,2a�\�5ɖ�ޠ�q5fCJ��[:�
�/Bk�0֗�$kQP尛=����|�A�wK׌��;<�.�T=��x���6���c~�(G��C�ĭ\�Q`�2E�lƄ,�B$��E�A�be�� �+LF��>Q;�P)�qD!�t����ėp������-�����Ia��� r:�h(g��囸�x�r��B|��|?�����bq�U7�]�qs�C�b�-��ۄY�O0�j���I��[Q=>6�f���O��+�{��ы�CS
�0zGQrF~�,���\#T�(޺��u���u�
������,4�vZ� ���]8k%H��9ƙ���ie�̔ާm�T6�*�kķ����E���45d��g��o��YI[H��@S�آ���sL�wT�P8��E�/2A�np�vC�@��\��z�
Wo��~O2����Gk�,���rp7�*ԫ
5�n9���"OȺM7��f���?ym�^���;���Ç�n1�*��!�L��/4C�S��}�Py�|��bnK����^!x��6�zy�~�Mۢ��o�?<m��M��q�m�P��-�x.�"�d�|��������pei�Rե�Ջp�7�߭e�h�/��yLe���ud�͘Q�ֹɓ��l�V��u��]ƕ'Ќ�V8w��E�����z��ra���1��މ�@��������<sm�����H73wZC{��D��_<�t>���ï�C�=��9^��U�n�d��F��%������5t�%-%W�DB����;����f˅݇��´�_h�Œ�u���-� z�g�x L���D��u� �YW1㜯���B���C�V�����cJ���'��;[�I��x{?%d�
���G���hw�!�Ӈ�в��{�?���*�O���J�;:)����R7�x��;�{����6"�n��.m�;*hr��F
�=�5�C�v!Z{�O���&-fG<�`p���h����y��ݯڇذ�n�Dk���4n��"υ���9�Z�*v�Z��^���� ���E5�p�P�q�C��nv��-�����۽/;%���D?N����D�yd4��B��C�S�VV����O������p����#��<kw�ƕ�+�MO�$�p���V[[rNԣ�=��lW�� 1'H���{�f@��d��ٜ������yqw��Ų����?gsΎ�e������y^ʈ�JSF@��\��'���.{/9�g���d^�SΦy��^�7��x�&K���'#Y-S�R1��U�b�8c��fy�%Ld𝳳��7o�߰�Hy����lZ�<엝�lY�bZ/vv�e���x�cUƙL㊟f��S���@�LV,���g��dG��
�1����}�N3Q�8��%{�b�N�,�Й�2��.�$��oA'ЅR�
�#��>��_#G��H T�z2�K�>�x2��@x�pO^�w�
��#'J�����4���`z8��
��߅���(�zQ����$ysó�LȊg�u��>�yv���p}F kg<}�Gt`���zԢk^�I9>��ˋ��m�P�##�O��,�eT�y�W�:�~M�4
��l���i��,�h�'�g�z>]�e���H���.>�w+�ܧ�� Z^�&��{$G��,,o ��\�o��9O��yi=N�^U���K.��<9�~w�Ɯ�r�`�n��e7���ϣA=�.��"K��(ͧ*�4)���w*�@a�,�WX���Rn��b�IB:�e?��2��(��t��">�"�4�#`$�	��:�XJJ<��u�Q��y}3:�	��Y(�;:b�}׮�k�:��!��꿬�֕�Fw9ϐ7t'�dv��:���9$�W�Re���F�t 5&B.��o��*�PiP���
.�/�i�ܓ��1D�$OƐ�o�\��(�*��8����)�p����_��ͱ~Z���Pu ��h�NJ�U�9*&���u��Rb�b�lk��:�v�.�\�����:�B�m���9�_u.SC�X*�0�2��
>Q�;��3�r�{�ڡ�!�'�)�$���׶���O ���Q.�[�$D��fc9|nY߼���5�RaH�"��F��H�)w���e�̩X5�wy	iV.�خ�V�`dB��l^/�l�x�v&B���E��!d!E�bð�	M���J�E�4�W�ɮS!�`��b�����lX2�d-:Ռ:��L}��r�)"����-��/1~
o�Risp��ɅX𓸊��8���;Y��	Pm}@ǁ�zxP��a�^�����3��HAd��@���[8�M����F��טI�_�:u��A��ּOb5Ë�AF����(�t��/���PE��4_,�l���Әh�h"�z�2]`��$W	�'C�1�淊$՜�y^�0��,r��8����3>�wȂ�yƃ����xu����v��u�<����,�͘�j�5ʺ(����5�O �Ȩ�Y�o�ݵ��?Z���y]��$���P��Eբ�-����f�"kt���g+��N0�Ͻd{�ӧF�Qʳk�^1�A�=r�,��tA��"���r��i��%QƗ
>��pIOW�1�=LS�b��a `���y���C���gP�=NQc�tN�`d�9�T�,&�3JP�#���/�P�3J��N���t�����h%2��#�;!r����>����0��-�&$5��%�ߗ�M�X��r-�+[f�ꤩ=8�,]�� ��7�oYx�&�w�^��N��/�V�7���ʙ��;�`��H�m3P��[ڎ���2J�6��1�4e�2�������%T��ci�����m���„�ja��j�͖B�G[�%䐄��X�~ő�#Rn���2E,�n�8�U�AY+CB�����@�Mp%�.��RR�|���{}���<<s�˺p)~հ��`�˷5�ۥ����5�� ����Q>�i��E���/��*��Ny�	�*yU�.F��8�H@�߬�0��fpe9l1����f4�ҬN�a�&;8ݡQ�)�ܸ�K����wA`�A�j�D�Z5�pC�P^6�Vt�0cJ9�a�	�&�Z'�Г�q@*�Ps��G��3�KB��s�bs~��V�k�S�\���wo#5���B�L���Ƣѷ/��t�Nw>��k�nl��S���x�$;�e�eVvV��}rkEɮ�+kb�V��<�'Y��5�m�a�K��܌•Bz�a�"���|5��iD� �)l��2�8Tz5�'����%��Y�	����e��'��ٳ�ړ����KaG��W�v�/4�ņ[*T�/���؟���i^gU�|�X���E�L_5�&D��ܽ�gǞ8�.������6�5u�Fr��l�[���d��ZV�(Q�����9928֎�Uʝ�d �1n�(}	����V�)3DI��eyF<	Aʓv@ji��h�M���"�,�X\W9�՗+�t���v��w��h���(Pp�вR����p����ӔǥY���D_�>z�#:D���}L9�u}��R6h�rU�I�x��z�Dp�Ae:�@V���l(z� ����Z�J���	S�ġZ�@���65G�j��G���]�*I�-�*��I+%bo�R'���К�"'
	<�1R�
��8��<t���0�W�HCp���j7gQ��(p�Y,�*զGsݺ�1]�٥���8�?��L�-PT6n����7	���l2ܒޓ����z���juz����54���������|Ow|����A<|�����oy��dƁ;�7T_P`Wl�ץ=sӞ�`����֖tH'����p�����AP�gRc0��V��68���^�+Ԥf!U6�k�ǃ�a���^@���Ջ	/?��o��
�t+�jN[tzy\o�*s$i��*��u�?�e��'�>2p`L"�}%wW�RQ(��d""�I���[[B��>*b����\���P��
�t^�`��Z�5��Y��~"y��ܣ�Ԑ��h�_BŹr��"vm��Q ��3�?�~�E�}p���������sS���q�I.">rE&8��f��?�;`�_�}u��u�.҆b9��>O���q�ڭ]b�pD�q;�;�2�
>�V[@����=D%�`I�t���Gf�y��^e���ꊻ��CJr�7q���A���\�sc�<d_�v���7Sh��P���v@��6��x���W�W
܅'H��g,�]y�k�A����ܔ���a�V�4��bPv�+J��|�ʼn=�{ʂO�L�G{G[�s)�"*F�CF�'�0��T#NR-rfI����ή݇m,6�����M�
��BT�j'�����64����5�@eW��чZ��Vz��D���*i��d��P�eN�>|��mć��q��bd�ϧ���v����o����q��:ؓ�x^�wI@Q�~_�b��4�\8���E�ю�Z�
�8�\g��N��W��׷.���LZ��E[�#gP�2�)A?��l�j��V�Iv+$6��-F�.�=�k�l�1M����r�DK�
�1�R�P�,�:r�X���6k�]�d�<V�j���<��>B�ϷB��Eŷ��~�+'Bf}f�
g��W�.~��µJ���(�&K,�ќ�5��VNN�jH�f@�������t#p�3����_No����Ǧ�������/c�֔���Zs�g�~�.L�d��﹐�`��rO�jӻ?��L*�މZ����D>~4�蕦{y��G�
t8l��B6c���i�h�OB��إ���Pe�M%��u+�l�����V�۸e[��W�}��:e��}r
N���A&<n�"�ͩ2X+��I'�-J��h��jj|�?b�{Y�Sb�>����f�(�Ƹ�?�뎆.�`�Su�H�tQ�q-:bH�Gi����<y����7�ϒz�T���J��>���bS�mJ����7�x����1n�Cΐc�Bc����=�(���!�Hc<�5�0￾�8���B��]\��n�G�1}]	�5�|D��v��Q^-k�_Kҗ���ܗX'��e��ӊ��|Z�� >Nl��q�.���K�W�V���s]u�g���dt9o㙇�^y]
<�>��Ł�R�ۥ�.�efsG��
�"���xm�6����;�I^�i����֗v
8c/EV�]~:�-��~�v�@G#ܫ�xZ}��Ѕ!-�)zz�U�!P뇈��{�q�p?��c�h�I~ 0}WOX~mV3�[��q<<����;V>�Kw�Zi
�z��O}��[�M@;��L+����ڜ8�_���C��F�!���G�c��M4�KD���&8���D���������^Jn67;�:���I�wP�v��a�m�݃�׃��Z��#���!vD��G�D�<��щj�tɇ�1�tѴ)��#5?�C_�_�6>���~l&Z@#�3>#����·2�ס�7Z�f_h���x��_�o�Q���Щ�
�^����{���v4���]S� ����[G�
��tb���y�rRwr��Y������A����Hb�7:v�lJ�B�i�6�i`nr�~t�ou�*$�P��'G%�P��v�@i&]��vh�-v��s�hA���ƻG��㹁T�Yy����k��N��{N�%�f��%��j�lV&�lzk��ج,Uvr�]C�a��9��9����r��x9�8w'��y�M%�/p�����)��J���~w�i����$�'x��>��1�D0��%�Bg,8b�,a$��0�'��<���*�"M�̂�n�3ka~hl��c���sb�:њ�.��&�*�6(f1�I{0%�1ĊM��O��<u��
1�!��z6|����͹f�;�a!�W��А���N��[��A)�ij��i2]��K;t��Z���[�s�b�֒�*�u6=T�?O?m(ܴ[Z���Z)�ɻt=�?k@��:�.j�����J��|АO{
  // chrome-extension://gfdkimpbcpahaombhbimeihdjnejgicl/
  "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMZElzFX2J1g1nRQ/8S3rg/1CjFyDltWOxQg+9M8aVgNVxbutEWFQz+oQzIP9BB67mJifULgiv12ToFKsae4NpEUR8sPZjiKDIHumc6pUdixOm8SJ5Rs16SMR6+VYxFUjlVW+5CA3IILptmNBxgpfyqoK0qRpBDIhGk1KDEZ4zqQIDAQAB",
  "name": "Feedback",
  "version": "1.0",
  "manifest_version": 2,
  "incognito" : "split",
  "description": "User feedback extension",
  "icons": {
    "48": "images/icon48.png",
    "192": "images/icon192.png"
  },
  "permissions": [
      "feedbackPrivate",
      "chrome://resources/"
  ],
  "app": {
    "background": {
      "scripts": ["js/event_handler.js"]
    },
    "content_security_policy": "default-src 'none'; script-src 'self' blob: filesystem: chrome://resources; style-src 'unsafe-inline' blob: chrome: file: filesystem: data: *; img-src * blob: chrome: file: filesystem: data:; media-src 'self' blob: filesystem:"
  },
  "display_in_launcher": false,
  "display_in_new_tab_page": false
}
<!doctype html>
<html dir="$i18n{textdirection}" lang="$i18n{language}">
  <head>
    <meta charset="utf-8">
    <title>$i18n{pageTitle}</title>
    <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
    <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
    <style>
      html {
        background: var(--md-background-color);
      }

      h1 {
        color: var(--md-loading-message-color);
        font-weight: 500;
        margin-top: 80px;
        text-align: center;
      }
    </style>
  </head>
  <body>
    <h1>$i18n{pageHeading}</h1>
  </body>
</html>
{
  // chrome-extension://ahjaciijnoiaklcomgnblndopackapon
  "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNyyvaNmqNZsjBwes4YNlrsy64asdP710pdMUM27jtvOe2YkXUdvglcC6r2ihlvPg16mjYK+ZmvxchcEu497KUPqBq34jXILabiUuXLrQJlvl3A7QMLatuZlijSx1qXL/5w5/ggF2Tblo9SHSVtlVyhwyyGkT9ckga5erBUbbwkQIDAQAB",
  "name": "Identity API Scope Approval UI",
  "version": "1.1",
  "manifest_version": 2,
  "description": "Displays scope approval dialog boxes for the Identity API",

  "permissions": [
    "chrome://theme/",
    "identityPrivate",
    "resourcesPrivate",
    "webview"
  ],

  "app": {
    "background": {
      "scripts": [
	"background.js"
      ]
    },
    "content_security_policy": "default-src 'none'; script-src 'self' blob: filesystem:; style-src 'self' blob: filesystem:; img-src chrome://theme; object-src 'self' blob: filesystem:"
  },
  "display_in_launcher": false,
  "display_in_new_tab_page": false
}
��U�n�0��+4aWW��z�?���leɐ�d���h+)k��b?���#i��6X>��z����j)��wzx�q^�e
���ߝl�'��%�]�)UȠl1!�����Q�&v�.����Y���ȿ��n�iCd���ە�}�4&b
S���h4cp��,�Wll�သ�!|�J���0���Jɤ���Z2��Cݴ���q���aQ�#f��0����7���x�V����Ĝ%��Wǰ�*Q�)W�s6.t��:�l��U����r���k��~:��.�0��
�m�lZ`��abr��{߫��o���&�w� q$ߥ���,WI�	�a�ji���4��|9ZY)���/3�s�~{�����FP+���{�\�'��.�/��ꔲ��JRC�6�\ť�(^RE�-'X� ��;/��Î:�۵�t1B$�l�,�&�<�D�O`_�f�gq8�:p>�Բ'��K�G����j��2��,��?��R?�uSMo�0��W��A�����m�Àa=d;
;�mq�EC����$�Y�"��S|�Q�,a���1�ۛ;�bv�sK}���a
���X�c@@��`	_� ��}�P�F�n��5�(x�ȃ�R�.��Q�rPbz���i ��>�?��&�kXn��HkWY�zXeo*v�NB45�\^{�"<g�n�۷��*ߐ+`����|,����R�SZ�k�#i1��_ٿҼ��C�'��5-U���ALX��_�y���uU���\���fǁ�8bVe`����h���h��.R6��I�
D�}j�:��j�����z�gE_j��g�DzX[VI�k���?o;v8=�ԁ���eɺWbp44�;�qw۝^�8{�rr6΋I�q�s��`
T�%^�A��L|O���ɿ��b��Gb��NPT/��&dI�ѩ�Ə��
�h�I����thO��&a�j�����$I)UUܶ���X��L�3�US�$f:�x9����6���X[OG~��8�"���Ҥo�P�hP��QTU��	�kf�
��~g�n�)Ry�̹��;99���<�\9z����h��4Z�Vٚ��[icC&	y"KFZi�2{''tk%����duf"I��%�s��Ҥ2��	�8={c�C")Q�L��V�Q$R�K���Y�Jq.i|9:����B%2�N^���k���,u��.�D���`��Aq��E&���@y��Ǵ���)����G�(�`�uFE.x�ÁWBP�p��wK�B+ml�N��d��F�(�B��L������Ӝ��D:/��)mU_VL��U)��[�����L#c8�A(�S�6��h[��Ts�.�ᰦ2d��D�9b�V-S����Qka��(BZ\[��cp��s��1��FZ����<�D���L�~`w�E���Ȓd&�H��isB%_�ރ�iOڰ���D:E��
��(֎�u���e��c�/+�X���3�̯Ԃ������XK.�I�q"��H�x�-f����]��Z,��t�wi�0��y\�:ɋΛt�����X��u4�@Wb��¡���r�
|D��N��ޡ\Q���\ e�4]���U�*��L�%k�YJwk�c
��H��͊�������<��
�Lƍ�)�|r*�ڄR���w�a��s�`(���2�J�t��~�Fu�t��!�$��W�{������h�J��h��&I���y���(q|�#�=��4�S�N��=��e\��_��fe�?��>g�����Xm��/S\�`��h�7:�����A��a���,�X��9wG⢯`B�d/��s۳U��E|i�_�������i�".�l�����E2��z�_�eʛ^gWy��Ev��-�ٍ@��d�MF�b�]��5ֿ\]����.6�k��4��lr6����~w(%�,?����}�=���#a�ekD���7u�1IB��Ļ��#��)1�	�E�M�օ|�`��|�n]�x���ϩ���:n)�_N4��b���|��lrM��-9�,X�%���S
ޖ]�̢�=�x�_2�����&�Qez�Q3����!�sz���vT���TZKk�#��]H��`� !�#�ٍ��BE5Yv\Z������j@2`$�-l�9N'Ww�ѧ��tv7��R�=, x)����Βm#��~������r08S>>��"�r`����B��(�K�;ˈ���K�������hU"ƪyg��'V��u�
�6�M@I�T.��o�os#]V��<�0E�-��&�1�+�6	7FG�JGUp��f
����@�S�"����z��9�<D�*l�&@$��a�����pz/�&�ʧv½�n�4����i/��w���3�G0a���`$�5Z����"����[//�-�?���Q�dX�X�����92`��E嫍�_j�����aCs��Gxm�s{��#/�E�ոT�f6��Df����E;�A�0�^T������2s�]�щ�*�yz��Bl�hf���s���(6�ؼ��9���Ӵ}�=�7\.RX����3�1	]�9u�l{�9͡��j�4h�]��u:h~��p��QNy t�CE�Z�>�f����'����?3��l�y����0a��U�.Cп,�XA���]�w�6����o_%%2��ݭ]���J��-��Ҵ���dqC�,I�Q��7_�INzw���[�$03���4NVip7���O�"�s)N�i���[��8�<�CA�2��L�o���;8/2)���A&�x�N���S)�ϻ��L#9�+����|JA�|��b�G�V"�Y���"����p�� ���v���x.?���w�'R}�{|p��o��̀����/Eg���2����Q$C��D2��%'9��È��q�O� �g*�<��y�z��`��.�<
&y�*�/��Eu�N'z�R�l�I�3�-�Iđn��{�X�,�S?�wv#N���~D9����ץ��J�5�"���Q��Xjo0������/����E4�=�C��&��2�}�����_h%�ʦ��&i��*��2�$�u'��e�?&�b��P7���y�<��͑��a��cz��.ȀXڅVK-)�R��}�� �<D0�M��Hd4
�;���E�]>pWf0������);l5.��*�UDA�a�$U�ێ�t��Ks���(pIq� ?Z)�؍R�	�{q����s�z$�650�n�� ���N)�ݩ���6nӶ�Y�+�Y�/d����[S���S��ِ^��?U�{�pDdם��)��,���h4�N�x<5�(�'^�A���ck&���HŴˋ�:Cc���hu��o@�MgM��D���;��ư��(\Q���L���D��n��PZ����,Ge���Ưq�ԣ�`��S�ÿR��?b3o�B�c=-��]U9<ˇQ���'�"���ϙ>F��x�[t����2��jh����>�ȗ��-�ܝ�K �e�γ*6�6R r�A�{�����镡V^A�yl��B�V�斺��!}T���%�*�}x�G�E��(;p2h�٠��jO|����	l�?���(Y��i۬�UWS���,dNp>��"f��i�hB󹩱Qm�Ӟ9#�4Nۭ>�8/"ֽƒv����xB�("jH�y���&Ͳ_��
S�Q�'[��TJ�h����&���NiXֶ���}���A�-�5�-�G�*�/gG�z�=�Z�p��X#�EcT�d�p�{�%0�����E�˦�8S���
�m$�����^��5�7�o}\ yp�����KVޞm��{6"��a�I��̶� �@��4�K���;:z8��G�a|��B� ʴ5��f�e�b�數��é���`���������`8'Jh�Z���V���x���g�]DΛ$v��}t���a1�u+��#_]^;!z_,�C�#�&"������`8h&��>��]��^���v4$Y��
�(�
`3è����P�%�M����0��qr�m�Z�q��'�7�#��M"��X�A0HO�5��޶4*�K!��f�C%�3��)� 5��橷���і��m;��-�e6/�����+spd��O���+i�6�a*s���nK���Y�`҇����
����x�$��V�٫േv�
���xY�b(vW��u��#P�T�_�f��B�V�h�
=����=�,������O)F!1�eʙh/�����@�~:��:���I�h(�j�2m4�Z���?"g6jȀb��j���{�0�-og)�����A#�����(�T[%�S\ďVj &Rޔ-�)��2�b��\�}ml��-f�N����E:�L��	��{�[�P�����%T��jA��c6F�xi�(�A)���h޴���@��h���i��!�7ܩ(3hO�=(g�(�H�q+)U(���4>�"�U3�T�}Q�U�{U�u�⩩��
.����d�x�A��R���B�6��N��hM��ޡ������r�-bM���L�
�n`Oe5��������,H�X�J#4.�'T�bh�C
����]��H�u�)�?��Q*e@oMr���Wl˳ !wF���sI�]��XF@O��[f��C��xO���`O�J��^��v�~�۝�s�n�]��2Ђ�'�
��ďK����m��e��IQqÍcKC-fq��ah:f�Sŝmڈ짉����8
/g�x{�vIt+�Yx��.��d�P�u~����nY&l��0+��G�i��h�`�rv������Z�I~��Փs�kt
͊�pE<�y��\u+cw+�Ta��Ԓ�o�ұc��x�� e����߁5�=�+��k'+m�\��-�kjbg�4�`@����J���O�X�4xk�,0�MQ`Ϙ�Lж�nR1u)��Q���9�,xS�N����X�M�H�ڦ�z��~W��k�!�U��G��d���`���!Lg��Yl
x�
lUȂ��:}2��kZ��^c�K����8fH�p,c�
^�<�����G��<-�9K�=�De�-f�9�G�(����1�eU��.\�ӵ�^t�5,7mtw���6�^����V����D�t����
x��*vK�ɐR�ԨP)���Mŝ��@�"��n�uL��w_��q]����zF��C@RL�Ykj|�� ��4g����4��޽�0(ק];h7ɇݜ��ڲR)XH[�Id�&��{T*�)!�G'���_-��x�d;����"(e�j��S�cK�an8�������d�IURqq��P���� ���rh:�Q4&C����%(��[}!?˖�*���C�_1,�X�]�:�
�?��EǠ�*�˖��;�[�--5��F��+gwum^��6���m�����m=��f9�Bj��zM���(�,�k�W���>���wE�,�-T�S:��`4��r�6�aĺ��]�fXV�6/�'|\��$��x�B4f�7��
9�-�q�Fm�U�z�(V�i��N[!��sn쇉�9Չ`7 ��t�<ޖ�0(�o`�ф�}))�ʹ���r7Awb��L�q�اZ�y~g�B�~&�l�����;:���U\�g�/Bpݻ�jK��?��2��-�|��6����.����S��5���:�&uk��F�g6�})�qsVr$s�;s�Ou�S�1Ӵ9��f�
e!�]��:)�W�y�K�Վl���i+Y��H}��i�mhl�?jH�����1�ZJ�ک��YS�z�sxρ����v��SS��-sM�C˥&���T��2�c�+J�T�۹�U�K�˩p�*��~pY-�0�}]��'I�"�bA%�(�j�S�77���(2��`L|���)V�I���J����D�M�I_|j�+iDeѬbe}j
\��+K����A��XF�tN��2A�.QU��,� j��C��:�Z�u�
��M��xv��sZ�WF�˨���H>A4����@��%seR�eJ��T	�j�NsP鄴�ر\D����S��
��D
!�TJO�qd��*�Lq��S5�_w#�$�)���Ue|���O�K�n����;�J�TlX��cj��Ÿʍ��Y��z�J����X0):Ld8g��V�[emV���x�ޔ橥X*�V���޺C��bYP�Vg���|a�o̻M/�h��H�~L�4�9V�-�F�D��M��s+�2j�U$�x��
rvyl�\6܊RU�&�kR�r��QM���2Bk���ҏ��3�נ!pnuU���=��y瀟�?d!�\p�-'8�>X�v��U�����%�� �2s���m��"���@T�OϨ0l:u)�r�
��9bK�w�?݆Zbk��i��U��d�ʕ6�*�եQ��\1g5��T��إE��a������0�6�Z{=�W>����l`A�`���"������e�FiԲ��S�F�a�?%�� �ţDN,�c�s|�6�`�1y)]�j�O�v���3v)΍���PA�p%n�kܗ�$|f
\��+��j�h��C����'%D��#�m+pz�Q߽���s%|�S�HԺ�z$���.�W���2� _��N%�K� ��_$�`K�1<�aD�l�f�cuL���(����*:��Ź��>[���X>��TՌ@��O%� ��2#u+����i �g��Fef]q4$�O!L������Әb�+�����q��a��^r��U��HNFS�':�}1�e�r�h4��#E�
'��Ըв��[
Â�Lrm���f`�����l`2�@@�F1�ydQ�P�b���h���.���#�@'��F�����v0����SF�{���"�v+�a�P�nyS� �s�B�"o|��?���b�ʆX�����E��Qoؿ9�������a�(�PQ�����0�j�)�����29�#�1�g�q_�v�r����>�����Vg����4��Yu�C��A���O�g�����omm�ltӿ�<����4�.�_˻��d-��oz��.����=^@{޿����&z�_��s���nR�BN�'�5<#O\K�I��BPd��f�LP�-���_�:Ŗ\�AEk���~�$�O������_9�j�P:��o�kg����Ϳ���$p&���!a��֟����\L�����O��Qn��|D�ܬ|!�[ֲ�ک�1lw��`
B��ƀ�a�n�����.4��<:>S�0��X��)[�JYeq�r�H��}nSb�ҝy�
��^�S�T�nY^��d1��&6~+߮ݦ�4B�E�G���p��\P�	x��s��Nd�(���B�倡�Ţ��w���Wxc7	N6��G��1����"�a�vsp�aǙ�7�Q�!�V�Ko_����n��d�㢽�?��,{���t����q�.�B!��qs�"���\�EB�K�T��>ӭ�9)9����'����s9b���i��{���d�2�O.�a6
/�v�
��Et4@ӻ�=�u_�� *+�?�@>��/5�Ҫ{`
]�TK����Ǡ0!�U��49_��4��wsP'�a�q���U�a�������i�a�02ٿ�0}��K,�8篭�%���E��"�ر�
X��&�0��2�RE2
f�13����DBt�_bO��Y�9D9����0}:~#��K���ID~�mPo�������H����6��U (��q9T�D8$���n.U�d����/�1~��gY[\���_��AXv�	�lM�6�-�p�~�\w����Pپ�n���<�ul�Y���V��=h:6�(��`�/q�B�1$r�7Z??�_�j�g7P������A,����ڃ����� �骙*���+� 
J��hj/ȍ}����.�H`�@�&��>��?d
����۸f�-� '�5ok��TW[h�
c��x1J3�r�q*o�,��5�	��* �oj��ѶA�"�	,��
c��R�rj�|l�|�%Ȇ�/�I�~2�YH�@\-o�`b�%P�/A��r��àr��%�խ�O�nS&�$�(��Ư�)$��TI<��۰�М�T��+7q���>Z�4Y��[bO�!��o�Y��ʥB��,��&�r���v��L��A>��&c���.K��T}�:��n������
�5�)2#��g�/ɪ~������m"G��\��Q ���3���E�fػ��\]��
~�Z�y�'G�ͼ�8��Sp�\���ly��T���rO�6䱮z����볛�˳��A��3�q�⊾5��h*�ȧ�DyW�[��|5����z�
J�c�K1��y=;XA��m&��2
K_�q)S�D2����ix�=�K.�Q�����}�K;h_4σ��S��P���d���kf�7刔TJ)�_��������g���1�ڌ�
ɟ���O��7%��U����%tJ�xU�~h#��,ӥ�|��#I�#շ�ԇVљ2�����w��*Ml�4���l�'¢m��f��Y����N4���U	l��9�$�K�u��� ���o0^�i��M�JE�}���z��7��͘A4��zx�n�Z�5|���v7�PU�?b;��T	��l�-:�2��F)󤝺�E���:���(^�5"�3��TϔK �EH�mVmoq����~bXP�i��f(g|�5O��}4�'&���qr.��� �$�+n�e.�`��5gz��J�9��t��Y���)�V+
у�¨�F�d�&�U��׿��R�<�!���j]�ʜK|n�o�0�'��f�A�.!�mW-u�t�r'�|��O6�J9l�ǧJ���w�WƲs�>�m���ˋ+D�i��ź���$�-<):��ZNr��(� �V��
��TZl�"���E�f�;��Nw��tp��F�R7˲��C�����]<�kӅg��u�4�'�+6����2��U��+���ʛ��p!�(P�A�tB�x�ª��x���	��k��c�!�\�{�����l�o��FS�spm�����䣅䍫uj��E/��f4~>Q���Jg'�ֽ�2���U���y��CkoZd����Y}�Y�A���. ̄�[0ᕓt��S�A��5��t����1���?����-�CiEC4)�����v=�ؠ��s�.Rv~4��T�8�~d�t���ZN�1��-j�.h9j_P�V(�U��9b�4�`�Nd4��U�� �ʥi��$D��|,�@���X{K�Y�����]"���	|i�	���� �
5.��?&w��c�5j&~���
�`l�1�ŵ�kJ;e�0�7��7��e|����1���]mo7��_��>Hi�m��`øl%QϑK	P������eh帾���7r��]���,PD�r���p�y�����>V��FA�ȫ�ss<�'#�r��8�cF󭄅�.���ea��Ө����%�c�K_�U_-���jG߻(�`��9��2#<_;��ի���zb.�0�t�Ht��~�*\84)�Y&�i��b�@�
&���f��U���u�_�s���z�^+�8����lm�]���JV�c���2��چ-�u���a�X��iK$�o�}j������<��,���봯�=�������oB�=(,��O�D��e^x�� �os�vSw:'���EJ3B��%��QyP
_2�˛�柆�Sؐ���qU^^��1����,PX�b�m�D�ʟ:�|��0B�r#Ͽ���g�N�S`G�ʥ��@&��ѸZӆE����d��.��K<���a*�>��i������l�S�Ç��?�M��U�l�W�Q��p:9O]�<��ձ/�����)b�3Z��Nd0�9���C����CN�]I��נ�E�_*#��m~�۞u7$��D�h��[�yK4o��-Ѽ%��D�h��[�yK4o��-Ѽ%��D�h��[�yK4o��-Ѽ%��D�h��[�yK4o��-Ѽ%��D�h��[�yK4o��-Ѽ%��D�h��[�yK4o��-Ѽ%��D�h��[�y{�ۛ��ܦ�MY[��%�N�,�M�G	�ëaj����w[3���m�̘���!������[@Y!ⷆ�86j\��~����JcOs�7l�g�po��I�T��e�h���E�b��|��eB�з��A�_�l�'Z�����n�M؜7���-~6��?3�qq���uy�Md�&��oU��<� �Zu��*�¡G�lø���А>Q�<TH
�2�.�<�|zCNOV�f��"RmE�\qn��Q9�E	iM{�I�w���
sI�Dl1�%��k`��W%T�^X��aȩ��b�N�oo�fq�P��#O���ak�R�T��d@{��R��y�|I���b�����:[q�'�m���,^�u;��̂����ߖ��kh�xr1ش��"q���'_��O����D�*$5z rR`���Hé�~Z=���^�e>G<
�`��D���4�Q��[r<k}Ey��jޥ�-\x�ZSw[���sc8�G2��Q{���~��1��H+%K:���yC��<7��.��qr1U)��ۻ��a��ح�Bi���|����*��۞��ck/�[A�A����pb�7�҈�/���Y�jB@	Q8Y��C�����#Gx� -�T1]z�W�+`�/�TՔ�䕃���r:��`8[����������@>
��H_N)��0i�Vg��|=�Z�y* ��`
<ʰEW=����:Bӆ��"_�3V��s���M\*���bv�%�;��:��a5�i�~�C8Ov�`�����s��l��b�﮸�̫�#6�s�X_��$~�%������^
@�U_y�۬�5�-�
nV3H�>gc�D��z� Go80ܮ��Tn��2���FRZ�1��M@�e
��>�1PI(H{�?L�����n[��>�0<~�g������~`���%_SLF����gob��}�M�D舉nk�^���˶.m(���Uы�K-�m�[IY���?�����	=vWt!�����<�� ���-pLU��]!��o�va�ö�B&��xt�%�� �Wj�<iq�ˣץ�[�m�XTTo`�h�&�����Ènѣ��jfz�r�
� XR(�W����UP�?�-D��2��C�܄خ�2Qt����p=S�dt������8�β8����z�,��ё����0/�s��Ql���M{o%)��7���A�ql(<2����5<@4W�п[����������RR���X-S���y}ּ�E�&�(��Ua���"�ʃ���|$jF��j��]K�=�bpw�/��t�x�?,
�J�H��Y�F��gx�D������H��m�:���֪h-�����t,E�Vc�"h2
���i�U�.��m�ͷ��
�U�s�]�Q�7���#�Ċ�e��\�UF'6L]^�°�lOg����R�H�v,�n���G����_��_@��I�$���]w�d�:���^R�3hJ���9���ѵ�=�=v9ɘ�?��K�C�v��.�'��
~m.��_�ބ�u|l�ە�_!8�2���b���������C�
c/|�Y���ܼ+v�+x��/�~�����h
U����E=�����b���w�W��Ǒ��y�x�=�FM�89���h�.B���c�~`�������" ��.n��o&?xW�0�b�1�D3���T]p�k��F/�W�{��ndә}7�߫8k���۹gwR,ﶸ�|-|�ɫ���V�>�y�9�����7��f^�T�aZЙ<(J%�N]9�骛!n�X���n(t���ؠe]�n����c�ud���O��G=E{e��t���6���q� �[�!xo����d�ק*3�p��8�|��-��RWE�!)n��xk�V�;���+������k�6�$��ۮ�ۅx����hVh�A�o�/�ɇ<o���P�OP�����+�����^7� ��H�$�m!s�H!�n!􃤰A;��U!�3]$��+�;��4���V:���h��T��D�,�����G�I�s�OR}x�٬��h.�
V��0�%��s�tI^C�7E5)�=�X{�IT�tA4ޚ��תu3�iEx�}�-��0��D4���CqҀ��b�i�|��ÏV��Q-W�tGa�!�ʪ.N�Ɍ�ۢr�t�g��A�/a�9/V%0"��xR��lҹ2
N�疮Ο�^]��B�:��x8�4<9��C�
�ɢ�0��7f�Ǿ�V��dL��^P,͵Y�u��#:���R����)���&Z[�^u�:��]��|�Z/6��cOU]���1�.N����ѻ�l4~7����������Ic�=sqT����9��p��^�hܪ�]p���xł�����H�_D���8|�x��І��k/�/���]mk�0�+����{M�X`��t/P�ib�zI�����Ow��d�l���~�S������96�v�)z��5Y5Q;J��ʪ1�h[�;��ą�]B�(��ڡo���e'�MlK��pT��L*tfֲk$Q�Ξl�ST�.4��%o�H!�5dT��^�baZ'"��?���\�[��ҀI&�N!D�M)�+���/Y��in���:t�Ô._vx
�1�]~�@�B�����4�B�K���V&
:ڣ�V�z��̈́T3Z�8r��&���th��ttY�AnJsژ�m�*N�g�y���c�L��"���E�_��"�E5ժ�|,��my�7;#��b�H#��,^�M�~��2�ҝ^����&�Bd�=�A}��+�[82�X##���+�ª�U|S,��-f������������ɽ�ƵU�lU��,�,�-��D��_~L�yQDIB�}U�"�.��#�i'�J���|N8e�a(��(:t�<��������b�{L��1����	ƅv��΀!���s:��}�
��c�ih@M�����ҝ�Pk�&��B�0P����E�f�ّ-��X߽�����P�`ֺ,'zO��
Q3��	���l�
}���ց�S�d�أ/�`�6�N��h�Y� �l��U�&V�_�QVm�Z�$oa2���VYh�j�^>L7��U⧅���-����pts�RQt}]O�f{��'�	0�F�y2�����8�^��˛y���{؇�2ƙ
O5��EP
B������w�'�ݴ���-�`q\�D御W ��q��ɍ����	5e�U"�&��ި�#���]5����a
U��]WQGk=��H�n��=�pJ=�?Ta*E*<��H�g�h!��+�B��!�_���][o��~�_A���֖��Ea�mKΪ�-#��.�@�%�ab��(�kX��=3s.s.�('Z�/�%��u�\��O(,WwQ��)��j�w��}V-��V����?���)�0�,�#
���h��,� �be����>`�eC�d!a����Q53]"#���s0��G�A�C��{���|4Ν����m
.P�Xj�����k�[k+L���}������zw��.�<��!�Ӻ`%R�]\�,�����*G�'w5n�`2������Q�~4K�;"U3�W\HvS���f�6w��Q��J�?��ڭ�+��>�7	��\���&�ު^g����]�B�����#�X���)`/W5�."]/��z��6T����}�	Tw�"��s���Qx�$�Qe�[����4-�b���a�M@]yj�{U��Y���^c-盿D?�
�'��BN�d~i+����0�-�y�м�7.�i�7]ºh�+�k��t�����9��#������9	�R��k�
� �5
5�P@�P�
8��uW�mz���zT���2^�Dj��T��r̿S�� �E�]��Re�Nje��s] �T6�V�Ҕ]F��D�cd�-���Pi�bY��W�2l�����FM�o��i9Ťg�+]����*�{u��j� W�.:�"�VY�����42�=�T��<�4�ۨ_�B����N�ְ���=ՙ�E�鷌 ������Y�\_�\:�/3��n����9��JH�3&�|�����)�7=Uu��Jn4w�M~)C��J[�s��[����-� U��n����_Vt�q�8�eD�eF݆לּ��Q�Zs#�n7���z���1Tp0��WS`[���Vns$��}!W[��#� �q_�(����/�@)�q����n��M��KQ�l��_�>���L���Q
����h�D1�4{���*���1�8�ϙ�ƱiƌU��Woc�aü�q�nYG;q>��ܳ���v'��zۨI�E*���<QX���4N6�gD��K�ө[�(��c�o��Q݀*�"�@Q���2t�yl��%�Y��Z�����p���R�z|�����Q�c��X7L�5�
Zm�����{����b�!U��T�J/�\��!�QeЍ�3-I.(Vڭ�o���E�����%g��&9:���	lo�W���Z���cȏ�_��`�ä3�9��]�	��&"���t(6\9����s�Y/i6���
OP!��F<<x���L+#��nEJ��,�T��eZe�E�#a	�y�L�����l���f�R��a��rR{JI�i	)VEs�����}#�����&?V+ݖ�X���i`0bS���`�z0@:'�Cv�Ϫ�+���
��qܩ�;|R,J���/�Xb-�E�ӲiYH���Cc
T��b~g�����B2)P�T�\�z^�E:�ە�S1CK�e�\���{I]_T4�(�e���H�E��%��
!^��t^ؽV�$�9Ԯ�b�>�Uq�ס΅�h|#6��DĮG��x�7Hg.�ݭ]
Ӂ���z��%���H>^8v�,�4Qψ�@��VJ�u��镬����R5�xig��DCe�a�M���X�R�ȧ���;�*�`aI��d���7{�5����+A��9�(>]�`�`o�	����B
�!��qi	��0vd:O�m��Sm	5�Dn,���M5�aA�O���n�lx�o7�kBL^��|£��F(dh��.r-�LٞR��6F��Q4<h]�E�e�Jܕ�E#'�Tœ�,ZE,սF�Қg�a.D�6�\4m0$�־Vl1"�K)���@t���#�����RI�E��nzN�<��<;��K8�T.�;�
"���gζJ#P�n�Կ[��y��hR�6��v���%��i�(.P�K�[}Ad��+U@�-$4�1n�u��l����V�8���ú��@�=��!&��.?��d����%���~���a�|F����:{!`Z���#P8=�!f�sz���,�)�i�q�(�Tj����t)��y�*�5	�j[���%�M��|k�8�y������
]dނBQx-���k2-j�s�T��m�N�"����熂�s�ױhZ�|��v x��5ǝ3��mՁh
7�KT����R�	A.���'�`0��aĉ4�D�,��Y��[ouTE�n���X�6G�8��⭌��4N(��]���h�����HL��tx2��H_~Y��X'�$�6jx���f�u�?�P%5C��c��^��z~<}���bԠK(�B=���6�M��������T�q�����M��<�;��B��0Q����	�|$e�!�!�%��5���`n��JU��	rUɏu�T�["�L�>��"�D2PJ��E�����b���%�t���C��)~t����,QL��ATװ�Μ�WZ��T�s�2-'Gn���G���X�yN��*"3]�	�~�4��A��??.�Ǥ
J�j��]I���e�%��ʌƏC�����'�y����(�W�/ϑD dP�[�i�j{�eu�+��0�U4�3
�󒌂+rSg��"�߿���+V�u�ZΊ�ljE�n�ٙ3��p(��!X�,N�������ZF�upk�7��H#�'���!�
��z(3t�����C���[�}=T���U�}}��NW����� �4�څ�vi��.�����*ٴ"l�(ˊ͸[��Pj�h��Jd��sa䉄�F�[be�_����q���oS��ĩ%	����CC��{�5�?��D_��dW;K��x�dEZ�Sv�ls���ygϪKeÛj�
Қڐ��b���� )�ɭ��Y���7�!v�9vN0G:g�-f�B|6���S	q�xp2�U#.��`x��\1
�ˋ-Ȥ-w\�����Sg���F����«��	�E��Ny�E�7w��ԛ:ksjWW�)wp��{�C�Zy�x�I�B�l��O�>�g����V�x�\�Wh�^��`*>]d�t��q���B!���%�!��*�������e^@�9 ��0V���=�D{�٘���>�7��Y��)z�.��i��K�7���Z��]{�lSY���𭸞@��c*_G_��PG_�7�'#�}̙�>��	F�2�~�g����L��i���eC�B%[���P�)j�XgNAc���_� :�|!y:1Kܮ.x�6
�m�NG�Bv~�Ϩ�g�)�Ǝ�T��8���6J!�C���x
Cl���C��0
o���|�k�/ ����(r����H�ت[�\��Yaܓ?�}Vea���6^��c�bLĠ�۔(��1���ī�\q,W
m	�ƀU��>W5��;@�cYH�(";�ɤ"�-�J�+@@K�Px��g�#��BQ����f��k�9����a?5- O�9X�k��\����B�8[�$ڸ�Ȋ
�����$���h�n�e�e�?���$ۛf�+M�d�Y^���U��/'��]�b�'"�1r��
^I�!	����y)�w��5�n_�E�W��9@7$�='�Q�$	��ʏb�ͧ�gG��sq9A	��Dt��[!1����-9����yq�����:S~�;�m��G8��.!�%�d`:e
^����)Q5�X��|{0�b�L����~���o��d̄D�w��fx�=���R���M������	��[��������p4��N�����g�]�b_H2��gK��
e����v�~�ܰy������{��Dc��Ӌr�H�!���a�J�HH��Ƶ���2	��ۘ	��<����v'0�o�����o�f��z��Ԭ�H��X�A���%�A�����ǰ!%,�f����/��m�����8RĿyԷc���2�L&����f]��D���Q���Y=ݍ�GGo�����g��$z�и?��԰�#�[t���;������][o�~ׯ��6K94�$�K#Pd���i7E@P�JZ�ⲻT���}�+��(���9sٹ�9��;�g��R$��$N8��Q�A���'���G<?~w�f�dol.!�N&{!O..o��Ԑ_v�"���x� ���A���[��pX��[�Z���4
�H��U��
��;PKjA�����q���h�j�
Jqm[Q	���W�h}�+A�01.�5u9_h��W�(ݎ�H{�]J�K�Z�{��D�QƇ�vY�'�F�&�S&L�q605����~b)�-9v%$�Z/ےDqKCt��5B�#���۽���Ub�%"�Ԁ+yh�}r�d�Δ�$UeG>��h������࢝Њ%��U�j���Te�޽�\Ojz�.w�.i�j�6��.X���}��5SȷF\��b�Td)�5X�<]n��MمH��^2v6+��~	�t��X\��5��u�n�E�����#b�ZaT��]\10�aݤ�#��t��f����7��*sS)��;T8��]�� �lC�
�K�zKw΃
���x�_�<�ּX�����%h"�(��*`ʷ�/K��@���M	�X�����u֭		_���M
��uϪ�J�l>P���ַ���b<p~J���T�����yycE�����A��l���=:�-3��PR�ib��:5�lYdXȑ&C[��xb�f�Ob׆�p�p+���}�`N�OM�͚�Z�TY?��MW�A�m#lp$�O}M�E�&D$��+z�	��{�7�����M>��!8��F��Œ��k�ъ�ܦ`��
��"�����<i&ӳ�f�7��\���Ȗod��k~8?��j����ĸ�qkm�U�@��Ё�ϊq�*�ŧ���cÂ��hQB�FV���|�A�V�
ԇ��Q����h� -45
�pv-�M'�RniK��Z�N�H5@ )?���zI�gT��1]2�߇]�ͣl��Ww��|��]ػ��/Vɏ5:2U�[�XD��f��5�_�ȡ5!? ��e/oW4˪�"켩�S�p��E���Ԅ���j7墺�y�R�)H��y��p�~��̡�G6cgǑ�͘�Է�*��rK��%Rڌ��ٚ)Vyn>H4���bmց7����,ۏ���>zo�@�<�jՠ 4D�Td�࿎�X�`Ɔ#C�ѕU��ܔ���D��t'���)���e��CfP�о�t��2��G���f�r�T���LFb��*^��7���P��!"����E���MI\�#�q:�:}�W�BU/)��\��!);�j��lD\��*���%2n�BB.V�_~cB��S��	�H�w�u���T%OW�36��d�h�4�2�B�'�E��jy������������>�IC�hF�LP�\md�.��؃�>1qJ��>���:�0����N�Y����H@-D�k��i,��u]��0�����z�
��8�x:�hq�{��3��$��H_L��I�i��[/߉;�N
��W�Őm���t}5E���o�,m���Q-��/"B��(��v���-ݛ6GL0i�������T墆}��$�P��xG��F�
��*}4�j���)�������""�$����utf�sg��?G]�=t����{,F�Vw��wt�����7��{��rΟa�A�}%2\���5�|aΚ:���
�8baYѪ-��Mu3o�I�/�x�Zr�%襂W������s��;��ߙ�y���E��N��w|ST�_��Kv��:�`��}�x�Zq��^ܿ��i��N�K\���y]�Z��(��^�^���;}9{s:��>��^�����c�8a�r�@W�ŸR8�� +rn��ŝ!��6|�`����CBZ_��/%�_��	v�7��.�e�$�8���؏��d7�� �P!�l�ZVtc��I�~�=�ؙ��^���Q�M�J��q�Ы��n�֟2@��y�~ı8�:Y	�P�t5a���9wo����ƾ>����`��L��59���J|j�2M����_a���)������+L�OO�÷�S�K]ٜԃ+��4��]�?ZfV����釗�̮.=��J�y��bڏ���uݧ=}��Aٺj8�]�(�k}���:v���H�e�j��SK3�]�X��%?��[��9�–Jdu!��7.k��q%��7�5�Z���}j]7�O�,_���+��H�8����1���}JQ'<IP�?��+b8�<F����OT��j��ȘeL��B=d(��9K�4:W��jNmm����)/_:�^\�⻽������Y_�3���x��l9[[��P_��q�xl�w䞃x�A(�5�$[�"�uPhl�j$�_�x��3�]���^ܶV�+��	���LvR���I��&��ڇ��%C] �B����8���m��]n�@(�і�M�Yъ��7�M�ʶ��
��E���4������Q��]2�d�i(�m4�QdNGe]7�)å�`dg���4�m��0]�W������/�0��K���ڦ���$}վ��@�-�����N.�Y1oD���kj@�~��Ge�x
��/�o��%N�S��z8��fK���
���r����;ј��l��c'�K��-,<1��zE��2~&�����&"��N�u�=��]��N�<�G�=�6D�p�Ϥ���z�
�J�<0I1�̳�}	�V���<>r� �/��Ye���6q�����/��(�r~}�s�32巒W�	9��$_����i��M�YU�˽�_~�_��=믶շ�'Fx�f��H���X,�z�/�_d�"�}���Z�f:O��X�� ��-�$���C�|�3Nk�4�
�:�4���u*"Oك��5�<egڀ�	����&��\滆w��&���d0�=r��?]�B��/����4%v�|�������:����b+KC�V�J�%�!���rK�Rm�n�,���r5�E��'�f�ȩ��`�~� R�o��tʥVoRN[����qpRo0׉�(��Jx��e��)��gڻo1KR�rws�!�lk��8A����T��[���)VmLǭ/W0�ܔ�=��;��`��IGGA{v���l�¦�Ƕ/݈l���E���Ƽ^o����c�x�OBY�H���բ�J���e����q����������k��춄��t��V��(�|�.Ck���|��1Yt�����&�9�ׇô)�m[?":K��l�s�K�kz���:כ5�)Ì�ԑ��@�G&����!�6�c���2��:hY�@�A*���1sT�\�ɕ{���̡8�S�"7q	܏��'Y!	���2����&�D�2�Rxc�X+�^/���r���t�!�Kʻ(7L�fE�i��jCz��������l���]8[�5���e�BWC���1D�}&؆�ߑ�w��ƈ��=~s�#l�~k�T�>�g��|Q�\W����Gx���t[q�5Ֆ� N����B�0�y`B���|�<�5�l�[�:�����tCmpDb�.��s"�G��{��Z'U^��o�~5L���v$���Ұ�Q�7~�怽k{������Ol����������G9/?��|`x��+����z}*���/��%��0���߃؝8�Cc8
�,(0������5�9�L��؟��dp11���Ը`���^���fUH�j�1W��10BUr��dtQ~���*�8�O��������I���:MOI��
"NA�(�E�N�|!ʓQ4�
�{�=X;���w��F9���D򖓤0��H���l���96�S7|��`kg�1�����K�Y�߲�������'C?9�"��ȣ���?�M����M��%��5��}��x�����I��x�3�q��(绵+P��908�s2=>?��"��d��o����}�k�~��,�������O�@�x���v�	���ŗ$��&�2	ocu(�F��%)L�V,@n�Z�a����F���0S�)��]�-h|M}n@Y��3����Ջ�P�k(�ߴ�y�/h���~�
����'	~P�"��	�/���M����ZR�Lx���ى.��w�&�4gK4���//B�8�9<�����BYܥ�[^�l��S;�}�ט���/1.�e���~�X3��-�w3
h��G��$�3�s|y{�g0c{�wq��m-��ӞV	[Ee��q5�4)5fő��M
G�ִ��t>�������M����8T�q�nFE��	�����)��L˹���kT0c7U��w�X�3�x��2�^�!��
pEC�ώ#�ng�E���c:�GH }�f+��9�by�O|�k]�]sݱS8���<�N�b~�'��M��j(༬�O�i��h�a٤�%Ɠ5
�6�|@sD����O�xe�t���.7G��A��3��Q�
�i�b�kx�1
	�q�s��s[6��\��	����������hnR�7�K�O�s+
�S`���J�hz��2#���P�'h򻨵PՌQ/%�O]2d	W�D&���d[@ǟf��E��bIT�1(V�n/0��;�Bn��0��p�x#cI6ә�qک���ؔ��
e�H��j��Ca��%���H�Ք��Z/�{�>��b�Hq͞���<|������]�r��}߯]�	V�Xɛ�1&����Uq첼/QT.��%�$���eS����\P�V�k��`0�����`��������̜V=��,����+���܉�!��"\�ȷ�cq!+�D���!�\����0W�
�b�^��hJUI����M픨��M������PC�$/-�A !���؜z�C�]Vr�X31nEٖ�&[�є	)ɀ�y"Ihe�	l5����΄B��[1x�M}D�XZ�H[����⫏z��!��n��I;/ڌ�� M�;�#��?J[S^ˇ�To���l�B�Ւ�em�F�#\~T\-e�&��D�ްSɵ�z�Y���~u�c���{(���>�o�;^�J�Xq����ľ9��2B�]x�jXB��)�A�,L�򺱖A��x�܁�"x^4��	%r�E ����;�M"!d���+�zuϼ�H��/���e��b��r���e:_��5�Z��yRР���zX��ؗ��oܫ[�����l���q�t��Vj�K��h��cM�\Y��̩���/@���N	��V(�������񒔣�đG*(�t�K#T�7��$���,u�A�����c�t��
�K��$;;;��@�CHX�)ݙ��Rl�S.�$��R�a�T����4�o���*�y��D���s��S����L��u:1��P��T=�_���6y�@�Z@�f�����S�,k��e�NA�ʓ4ِNi�H*W}��I�NU�2�d�ϼ���f��$G �3���24�J��?�Z> i�E�u��DYf�MyE*��x*UHa�B�'Bd�0T�8��8�=���
���F������u�h�ڑ�N���P�w�� �+v2!�/$�$lfȍOӱ�JFG����Cx��l����"�0�ۦπ�7 >�*(�'��������'pL�r	��E&���]������`�]�e8y,6�}�,ɚ�9�K}M0�1����L�.�B��(E�H.�l��c@��g������⩪p@Sy�ލ`G"����	�qȇ��d*��Sض0`IA��ryOY �_:5�P�R���W;�S\eR����2���n�JǿV@,�/FoS2Ȋ�f	������J�3wF�Lϸ�x�Xv�y�K�ԆtM�;�B�V?�cq�&q��A/�ƍ|�4p(W�	3�VzX��!9n"g�ax��JwI�2"J�ݡ��PP�8xiju"��{�R���|�����J�!�j�����%��^�!�$��y�v�ɲ)�j�d�՚_|^�Ynd6�)�Q,oS\�2�t��\�n�j2��ʴ�/ �5ay+�tE���
�:0�V.���z����&��f�4��o���p��k��1�&VZ��$i_�b�.��&
��z�Z=��s��&�����$T8<�GP���ԌOj��6�Z�Gh`��X��X��k�3ֽ�h\�E�!�b�ad`;g����Y�l�q�֎M���
�v�u���;�I\d8����c�pj�*p�Yl�Q��O?==<x*&1MB��,긘dؼ�]��A�ዙ��ǟ�{j��sp���UT������l��erD��	���
Xmw���;.a� �*Ք��Ű�^N�B�G�e�=��l��7��_�k8n,��e+��(��w��c
s6�\r�^�`R������.�S��4��8���Q����.�ipA`;p5�U~�B��^6�e�6ُS����{�\��c��L�)uw�!���Lĕ�g��6{-�2hM3���`�
���Ӑ��;��R.��E�G��	�,H�wTɹxք�Pr�Fh
yuD�E�3���b�*x�&ڄ�Ya���j��HI�����t�D�l�]����S�'/������Կ�&����e�24M�=G]F ek/���Lp�(�,�t�زp�ϴʌe‹j�s�9B�d���a� (hץ��И���xT��-n�r��4�<c��͏1�،�_H�d�I,i�~�����!�M�"��%�U _�6�o
��x~J���)�/D�����<��Ǔ~�M�{��縿�|P��9�u�"'���)D����z��Hً	�����z{�!�[`À��F��s�03bUz21q*Ł�jr\#f�bk�#��qB�j�pT}`����"Z��Z���G�T����z�q�ɍ=�3A:����E��c���aEa��ɴq�*��$lT�xJ�V`Z�0=u���4N��$,V���Af��b�
�P��ufjf)H�7+R������F֎�J���)-d�`�\�H�2T�m��(�X���ޢ/��;F�
���@���eU�T�1� ����1\-q��A4�'����:1˜�(��!L]-�i��,�h�.Ă���P~2M�/���s������-�J��?�V�S�%�:�S�X,�,M�%$t_�<c�+���U��t���\�p罺�Bq�P�eH�ˮ�'�Md�����pE�#�벸�D֒'%��<�����h��nහ��;)�-.�	~	��K%"����B��ը�<��a�Y���h�ǖ$p;��a{fu��A~�Ԯyȶ�Hi�}�����\n4�dg� �v��{�`�,�d��|���}'�dY7��N�<��C*�Z���R�
���)�� ���\�x��֢o�H��ȟ��_��vElD��r��Oʩ$��)�T�U�tFA��0ve{�f�s�*��م¸;�#��U�[�/M�V;�9e��!~<�ӭy������9�m�{�%�h���i@������ȍ�E�|��"{�=����M[7�e	Q2``kJ�m7�yH����L�sR��=K�x�x��t�2K�@��ꕙ;�w�Fͬgnz�A~���\"�p
���E�An9��μ�׻�ZZg!tW�d�nj'��u��7s#��ӳؗ0�s�-��0������v���arQ��&Q�6�܎�I4����N%��0E��i���CDr��F=��+��eA����?��'>�38�ߧ�G��Ċ/&�K���f�_﴾�+�O�в88z��e�}��`\��>#Z�?CH�b0�,2R\��aM���M�� ��5�W��SF�5:^�L�:0zkS5	��hHf��W�V�#��Cт	��s�{m �uo�€���,?�t�ͳ��&��ފSA��r�/P�8���n�Ī(��ά�
�4l&�	�ףn}So����Jm��{��'�l%ڙe�Ob�m��+�N��V���D�Lx��W0��C�J����F���`��
���F�e�‚A�1jG�jB@�7�S����Ų ��|�!��g�Y��\��f�ܭ����1�o�UAIIh'u�*t� ����!5%�)6��!,5p!%����$r~[�෱� 6J����E��a��J:-�{`3�'��6��+[C��,_'�E~isW�q�]<t,�����*6b��$�KcEp#�f�;����aNO�<{�,�d�G�� ��3���F����ٸ�H)�$'���h��"�'�0�e��ܬ~�����XkN�6�A
��f/��n>h	:'�QG�Z7�u��"���c�^�q�U�_���롺���m[��e=��h�H�={ն�/��=<��Lp���D���?b���Da�����L�9�l_)�D~�����#�poΕj���~��P�`(,���Y*��>f�"�n1��6&���:PJ�{�{ڷ*Gj�hϠ	��EzT�
K��A����d0�B}��Y��D����oM�y\L�a;g)[SX�9s���/e]|����N�@BV������ɓsh�\��]����x�G����t�n�$<�So
![��F�E�w=9�d�:D���&�~�9Ply�zfPFR2�f�iTX����'׀���G����dd�]�+��!�$o���:���O���-Ǿ��(x���>����M'��}������Ȼ��'�f�'|��w
��0� ���x��X�n�8��SpQ,w#G�e�q�'�����I�E{SP-1�DA���� Y�d[�qbi��|3�
�ߢK�)����=d�=͂�E���e�,��2��PJ2����?Ao�׌ �Dy@3��"u	r�G|�ي�1�E]=]Y�
	
�KbX�8G.��C�NKV��1<'�~>�yx�AK�>z{~r��s���6FFw4���w�ԀG�O�=9	�(2�vN�4o�m���,���wN���;C�q�=��h��x;Eːl����hJܜ�xʗQ,ް8�6�0L�����>�E&�½��z�p�3aP?��GbaS�9f1A��(ai��\��Bš,Hi��v�T��		�<��%<�􇩔ɧ`ON]8�>X���?^S/`�8�~��A1�I��Yz�~h!O�%s��v���<����ht���u�L���5S��N6�9�䥉�����j�Y�ֺeN��W)��1������ÙM��Ȭ�t�7�CA$�-N*5l]�1/[��53�)�;,�Yĝ����q�6k���)�F��Lh^ь:4�9�@K�,ǎ��t�q1�T�)h�@چ�Cy��,�)��k2)Cj��3Bv@~�ݨ����D��ǿa�����r�:����ԡ�i��&�JlH?O��$��–
�喇���@��gʼѭ��,?���ӍU�������P�"�
���E��B�0��)�6�7U��Nn�Z�ź�~�	8�b��ةp��*����x�������_X����{�V�yC9o�`8�,���xdS��G8�30>L��Dxd^J���X��ƚ8�4�忬_QYO�Y���xQ�T��C�܀�UF�2)���醚�/�a2ڪI�y��7��C�:��P)��
��uf!��
̫���i	�]Cr8�L���7,=-�[-�$MYz�<�����5�
�hY�����r�䒥���$9���"r�MXy��n�2z ��^�X20���
��6A��^͋J�|8�[G#s�?��I'r���ZipX�l�"S'k���%C*��<P����/��N�Q�&�z�X��c�S�&6h�}pJ�����T|?�V��(|��
dħ���v���Τ���^���z��p����]-^.׋��΋\:���w_ا���q6����V`�߽(=��\�t1�\ϯ?��^E��Mr/_�Y��7{�bO�ۿL<�z�����c��^>�O�W���c��9�����*�n}�;�<7��_�����0���7�����/_v�3{��t���k?�-e����n1��Tk>�wI����ŭ�?��m��|�{�ْ���Lӣ����Xw�����|����i�b���V����M+�J��ϳ�J2����J��$e	��Ѕ�Bv��Kem[B1�=����E5:���?│KB�_Q�6��S�ix��6#�(^��d��~<vn7%�s���Db�1v���
�8ױ��붒}��%DT�����p֡��T-���u�5I{�Ƃ����7���h�t4��qI���t��~H��V��o��5��oO8�3e��`�z��
���Vcq�MJ�KH*�VGc�[���/�I��@Q�z�� Z$/t���iN�sK�+&H^q8����fu�IC"�8)��Ȣ1Z��Vy��pd�h���Y��x�dn��'����$��\F�9W���%�����f�i�jS�n~5�W�4�dͨ�d�:�hτ��r�ׅ���!?)S��4*�p�<b,S1�xFf�����n��iI��g��0���ލz�ZCV��� ����;�{���⾃߹/	LP+��<�H�Roſ�`$�ZU��p����T}X�§��7
d��g��Yh��*cXN�!� P��{�7��&�L���D��Ə���͏�����m���a�tMy�W��U�����u_�~mӻ.�?n���� �*�*-����1�2�y�&�C5r�ī��Q�TRW��Zmk�N�g�=C06��4��ڍ����h�r�w�{��ح;\��XU]��~u|gA4�Nw��4�b�[�>�-�Ҽ�&�.�/S��+��]?��\!&]�LYa�4�[����=qϳ���F�Oa6��|�l��	s��E�6M���6����'��Q_��]�Z|����K�7�%��?H_�+��B�%uU��dXRglU��73���ԙ��{������nT�f.7{��S-oI��&��;Ӻ�j\�~���9+�{%��Zis�6��_�*ә(5)J�[q4㫱:�����i�d "a��,g����A
<�8i�Z��]�,��_���딠�G�s,�P�c�}��]��euΒt�Q?���CCg0D�AgA�D4��I΃$c6:	C$	�#ْxv�3#(Y P�X�g.An�_�dI��xh�F�ޝ[��C�B���s���Ig�䱇h	���]��]�
�ݱ,�9��E�c�8c����|a�mp�C2��,%.G+��>A�dI�$%�O���i�8��#l#|ߕJ���EAFﻮ\;�a�rK��2������!g6\���i�
�wfDo�dI�ݘ�M��y��u�'O��4�'�9�Hf��w�:&�& B�	8ί��<��򎛄I6A�?=:�C�{���x��!^O�"$O�x�<��khO��<��$�B�SI\��P�3��"G|VX��j�p���P�#�ԩ�'1A��(M2�c.	i�K"�
2p��Z�<P*���*VHpuX��)ڱ�
�p����!�AK����z<��rO ���4�(��f!sӒ�Ƌd����~&<��=���p0�CN��b׆�4J��E�*B�p��3��,HVU��a�>*�/����د0
l��(�hƎi��a�O�]��"��:�mAl
�a�1c!��y�y	#����Cd��*�!䩰F�C&%/)�sR&P�����%*�v�NC!��8	=��!��0T"�zuEc����f$�����2L���P�D�����s0C\��b�*�\ƈ����wӄ��Pv�@	HF�&�.e��U&.���2��7U�&q�_�{�U���:::����r)I"[:���$����R����o����5_�'��3\�Q {-͹���Fί{�AXgh���G�^oc�M����;�U�6Na�g�<�)���Se/����"�mEfn�Z��#�Ub��VT��v���Cr��gQ��J	2H�P:�BdXx�T)�а���� ��8l�Leա�<t�� �k�g6�g��[�Pd�2XT��Q����5DG����}cX��a���$˒l�z�!�?��Z�-Jys}�}9�r�d��$y=�+��<���7amY�݊es�f�ʈ� #��n�`�B��2,{�(*��j�eNM��WZ#w��P^Zi	�$��,gzg��n��b�������Ìm0��*��X�4Ԧ����.��$>�p&lW�
a��g�ks<��l���D������~Y���=��C��'�=O�W�޾��_��K7r��'�볣g/r���K�\~Jn�fO�f>����0p��^���ǒ�;��d5;�s$��i��zb@�p����ߣ������No��h��?Gw��5���8����n/O�����3gv��~����ߜ��������d����?���7w'k�m�9#E3[]��V���W'z͟��eʯ��������:���bM"�/���q<�8�����2�Wϣë}����}�R(�i�n5 [��L�²do�|¨�0A6\�fb���Tȶ(T,AۤЈGc�-�z����Xd��J�q챀�j������O1��n5����x��K�,��k�nF�Cn{�-�Ć1�CCɹv��׮���6�}��E��2�=!�p�"��t-�s¸ju�n�XB�X�y}J��M��rP�b�4�����ըq�.v�Ɛ��C��խ[s���I �/��a�#.�Ie<0	��ji�F����%�#pS(�����x򨪕
1���j�HR���RA�Wn�"Kh�̄ɐ�1$�Ӝ#K�b�+�G�;�Z9j�%L��E��̜��!IH��@��cI΅�͔�P���;��3�����|_bS�A�R�~���	�b��m%
�|�L�Ӹ(�q�k�ɑdza��Ho�Н�b@ZP2��A��![Ơ��^�Wc�j�QkX5y�`OTUG�w�3i%��b�<�T$�m��=��֕b����eX/|������,��R'��Ae��3L8�up7pSy*��>��gW�.���N�>~�6�Q��n�Ț�/�ϋ�z�k�)u?��-J7����X�Y�߶�`)��}_��
�u��;�ԥ�Jm��N5g�
B����OJKH���^���U��:�n�W�[��*p�eUy�����n�h��nWW�Mŕj<t�C�[�GT�i�I�EFXP?2��]�rҕ˴�f��C����ޓ�<��.N���j�(�k��OXXoǸ/���ȗ^�z�+,}�9�i���-J���_U��K+w�KLy�����U��V%"�hb"�2��'3C�J&��s����� �Ԥ�꯷z��
j�m�o?35U�X�<���zX�9�A����m}���9�����SX$�k��z�W'�焝c�J��a�z�^>��NoE:���6h�3�$��	(
X=���9a�r��ܦ��S��6[^�<0�׍;�!GwzN��q��$��98��B����b��%zr�Rmɻ�Q	YK�U�&�4H�HyY6��t>�H>��y�’ɢxG'1@F�C�-dx�>ߝ,����]`���q�bC
O�*�8Qey\2��iF=��슞��*�r�:���ͭ�\��.��E4�`e�Q�۹f!tG��i���K�R�b
�Q玘3�	D���
��x>3}�ߺPl6&\</{�i���[�jiH��0��]��q����<#/���ks^���sS�0U��Q̒�`��
 ���ߕ��IOWCE�}����&)�޹li6�
	f���lda�����A
���K0�O?$Pޣ�*�Vy`+���A��t��V�Py��<�
%��qOEJ���b��P���&���yJ~*�43�E����1�I�L%�Ou%A8�|����2%h�f��^&Z�ћJ�cA,l^T�oe�D�D�+V�IE3��
�	�0p���(�ەٰkj�]]p��L� l�/X��d�s��	�`�^Ү������'X?��Z�[��P-�ڑ�H����]
�����UB/V�$ʻ��5���:��PZ�o�
�oh�ɭ��-�f�D#�H�P���M)u�KL��;��W��od�>5㷂��hS.-F��ֵ������Bba9C�4+��[�S&:V$؅2*�57h�Q�Jt"�K`����(omi�jc����=�Uk2F�5��~���u�;�"8��;dD�Vcj8�ՈM�jqw0�$�ô{H�vA�X�XWq&ԷZTr��؊	C�AM�͡�k?���4�L�Y�i�:ѩ���&�3�j�5�6�����c������A+��Z�S������2/I������m��`��@(s�ζ!�:	B��ݽ/ҝt6��e&�}��ٽ��v{{dX,�t6�����+2�32���mZߒ㺚%�q�A�I�8+�Xn��O��bJ�y�	/�2f$.F�문ce�=Jގ����!c$Kc�[5��iN"�HӢ�������pt6�i��pk+.r^�'g7������������H�ȫ?��MnN�!�_\g�ψ����q<��\OP̟�5���ۋ��f<�89>�O.x���U�xr3|q�a�����Y���G_Y\������,{��l%�x�po�*i��3�M:I+0,�#�-Z�q���J��@�x�9�Kg����g,��[��_�����@����o{�`+���(/^��a��Y5'o�
%.K�`����:�,�|/���99zC��ۈ�>�ϟd/��4O��0+b�g
9�e<�z>3H�:%��2G0���0e��W%��?�n/<Pa
7��S�����
A�{@��S)I�x���*m�z�p��W�p�}-���89��SW���;�0VzR�Õ����s�\��C������^�~�J���=+'s��/x���E����O�]}?dJ3�P�%�W ^}��_q]�Cvsw���L���DI�w�zJM%�C�|_~��u@UY8˭���qa��ɰ���y������LŊ����㲤�,��zX�.��0�Y�g})��@�}Q `UO`%��H�F� �����&%��j3��YR��gCen�ΈG�
��ܤ@���až��y%�<�%�8IR�J��]�E�)H+ �t�0�肣C8������g
w���7�u���x[m���-���#�E�����yV��7�U�Hy*�q�B�_b�<oH�ޭQ�@ti�K,�{`���[f�غ�I�b�sFVB�4\���^И'�KF+6�v��l�%�r��`Y�2U���|�$���['*�q���b�	D\���i�4��Ӕ/���ہ܃���(�����:�vLk�+�羧:����6�]���=��!����j��՘Ut\��y����:�:���1<sˎF�ez�6�*N��CʵX��3�Hh�k������ �{�r��$=
�!;�%I�#����"c4_�	&���ΐp�,Z��O~S�u����dߞ#��+P0r��䨭�DL7Q؞�!��ܓm:��zS�%�<���IS�D�X/�בjC�dXx̭�+s廉WQ�F8�Pd]���6lu�%3�Ţ� �v����HhE�&V=t���CMV�h�S\��W�%M�A��V�q!�Wa�����)����~�c�vH<���Nk�%P��V4=^/���fpi�ʞ�\�֓:)�$���]�W[�P�UsAg�Բ�Ņ��R�#�4�n��(�ٶ�R�����c��F�k�'��M�2D���C�xm��˘�N=�[n��h�mVb0޸0G�m�
��<��iɒi�.�gyOƔW�t,wŶ�V��Nz�kj^ܟ�q1�N��L�gR��MɆ7���"7O���m�2�h�W��.�g5}`Mol�<Y��rѸ�s�fY���C���T�׎i<g	Rb�C�N���ci<�L&�3X�~� �����˔�Q��Ճ��c&����8�M��kΒ]��EQV�ព	N�c6���>{��&��u��î �J'��S��.S|��b������C9�'Ќ�F�����j���J���nw*�v�4�I�M���4sg��x�ǯUϺj��:-̀i%i"��K�Y��j���1�MƔ~���a�9�-�;Yc�-��7oo`Y�U�;݌LR�T�Zi'��H ��A��l7IiV@<����ݛY�Nb5�.�FEu<x�����t�D�/R�H��F?�q=��=���dQ�Ԯ�Ks��B�f}��4e6��v@b�ۦIs��v,R;�jZ��#�ܓ�_�.(Z�iZ�J��E�3Є�&�V�)�!��X.�g7�U_�����3�MuԹh��jUj]Ǝs�<(�4���)��TW�	.Э�-ێ��`E�t�v�>*���,MN�#�^�՛`��}?���������z�Y�IsJ�&2���>1�oRX�͖h��k�R�5��$�]/�iB�4�9�1�
d3nfβ��:=�)J��V��>#�CF��@���J��M �5W8�\	��ʗ�B@z���:Lb�@�nkҧ,>�_����I�2u$�K!{��=A_�fp��L!?A/�pj���<C_%QZ�
���S/y�Jq�ը%%�F�t�&
�*>���8�'��k�_�Blmxt��^�L�B�~of��W��,˞ѷ9,��~�4�
�]�	�7�mӽn��l��Y�,�tC�AH]�h
OռJq�&��FJ�\Nc!���HM!j�(wUP���c��_�n��w�g3�������H���:p�FX���\��J<��
��L�7e���"c���8o�1��ճ2rƹ������g�Ҩ�k��a`���F��b���z=p����ݤ���e�w�h
�t�8M��&!j���p�Y��f�cپE��k;a�үE)�d��	Em�,
�����`���HяhĦ!�hz�X�F�Ѡ�d�߈�U��3���F�ǟ�bl{G���(���B��jʹ�Ε������W���\��:*b�9�k�*�ħtJ�drK����~���:&����>׾�;���N�6������=/0η|D~wF�lh|{��4m;���A�І��_���]s��]��<�Α	I)N�N��[�M��ISYM(�d�E�X�Q���/��.�;=�$y��;`��],v����q'#X6����&P)���M^TM��(����[��p�
D������'���Qְ��ѭ�lQB_˙h�7`Nַ�/�֗Y�~��� ��rQOR�vpD����8�ز��8���b�!��vaw��ؼ���u��U.W�&9���gFY��[�3uV@�o����ų�es�m֋T?5��0AP��t9_ xgAё����%���S��S"[�&o�����L�0��y�i�/��+=c�jJyw�ݝ���4ۃy�͎25ɹ������*1�K��QV@�p2�^LLG<��ʬ�uG5�3���w�1�A@�]��{��
�%��n�Ujv��2�P���S�s��ݞ}%�Lپs�i�I�ƭ~�N�U��՚������)�$����ͼ>��B���X@��w�L��EU�W6F�,�|]���f��ȗ��I/;+F26>��c���T� 4C5��g��y�4���q1�C�[�r�L':���+���{��6J�;ң��m���:��.�9�M�]�K8N}���N12��mJ���v�Ѡ��S�	Ldp;��#�"G|�^<���s�W�
���
��tu&5�~f$38W�6:��ȖU�Y���4ȹ�Ք�dUd�N2�� 7�RC���5k��^U5�QYSe�Bn��⃡���椪�=
�SH�{Q�F��x��E��_	c��+�m�Lߺ:���L��]���
�]��c�(;���3�l�3���x@��|^Գu�B-qn�f���J8�i�x��i.����
$[��
�n��{d	\��XctK���g���<^���
i>�VLr&d�.}����1��C׌�)1���?����I����V-�l���^kO|C�ngᱻ���$�`��O���[�h�\Q�]�P�����%sz&B����G�.��\�jg�2�4��B����0s���Z$�
��}۪��D��TDi��%)*�s"D��o�~�AB�<�����:}}��|5�՟�Fm�������Sd�3
��D�W2�6b�HvM2N�EK��V�2V����K~].i�맮i�;F�d�nM{�i	M��2���V��u �b�ݞ��@����⺞6?@(�!���*��-�΀�9aڵ}M9hn����X`*s'�/��t�+0�{9�]nn	\b�V�^�s�=b?o����"��K�b��_R?Q��0&|p�a���7}�;�#�fg��o��ggD�g�&�c-+���슫^�͕^>͹�kd��;�g�z=�<T�l�9;p�zY�O��=ܬ��]��y��pP�t� 6
�`�#z��H�&~�@X��7�ݬom�+=�)���.xf�7DׄfX�aP�����*<��!��p�X�X����]@m�i2�������T9�(K@�a'��mD���_5�f���q�!,>þ�.)/��4m�u�.K2�Iq��ڃ��ғv�q���{$&����>���k^P�\�Ƣ5&��=�(�F�do6�?���Ȇ�Z+8S�����F�a� N��iCǨ�{�R��s��/~�B
�IF�VMH-u��<�ݝr�Z	x<���@���ĸ\r����_r�h2�&�?��̙��-#XN||�W@ߥ;�%wu�3�߮���׮��Մ�(	�"�u>l��^�i
VK�UG����| e������zq�^!���׼��)z��C*��ռ�pp����<Ol@};m.'x�o����I#�)�x�d�$�N�#�h,���Xkf�ؽ�c���/̌%x�v�=<�c�,VʏC�Fɭ>��^8���וí�bt����k*
��B��qR��)�z4��!�H��� ���ap7���\j4�a�m9�uж
z3�/G2�Zs%��#�#i�xm��dE��]�zȬq��٘���qM`�Y"�tX��.�/�[H���4�����`�$��^���̄�E	!yR�,�P}��'ƻ�/	�|�G7D�*����+�������T�:/[�Ҥ�A�����K�{x���R�X�l�$M7��T��?Ơ��s�]<fP�����jx[w��Ο��m�����Ά�
 #���ƚJk赓�:z%NBW�蕬b�8�Q0��:a��ݬ�E����mXL���rZmꦺ���ٹ�v�Y��/5�N��c$s�w5}jd����FW-���a��nz���V����&�o��r��f�>��zZ�ˍ2��V����e=5;�*��;	g[�M��`J�H�m���l��P�co/��cÕ��jv��	��^����A3L�S����LH^a�_L|V\L7��g�i��Q���z�t�����k*{I
��>ƕ�ٕ�p^�~u��	s?�2��M}>�wc�%��/F.�M�e�� g.��~�0B�����M8�F�@W�C�����Ѷ$5�T�rG)0�=F�V���N48UaL�<]�T}`.lX�*�e3p�wg[V�b|���7�3m �3�"k��	��4�H�M�U������V���Ė�)�ɩ�r|��EI�,t���}I1{�`|d&�y�pY��/afj"}{yF�6�[TjN`��,2�����'�L4q	�M�#T[X6/Lw}c�4�VN�?�/�E}�Cy^�;�ڞ��C��BERٚ�E
���f�,�/~�z�1��kb
$��}���G�v���u y�n�ӫ�8��<���%Eח�f1�\ޢ��j��(,5��"P�S�D������w��n`ά�=�%��	����:-���b1���0\�L�~��l�p�Y�� ��i���,s��v�,z>�
�6>�ܲ<Ѫ%��Em�V��;#:Zx���ͱ��.��h(�.�4�tn:dO/U��
S�{ea<�����rv�����pEV��,4�|�E:qؾ!ۙsnо���?�?��j��X��RHEypU�Ԝ�_g��$h�����4P��j>]�B^s2B�c�pP1g`��r�(��E[>�`^� 6�[|�C6��V�<b{�kE$>��2^H0S�U>u(���aT��@P`�a-�(`ʘB%{���1\cg�4"���,�ň�gr��3���Ey�d�^x
�*�40��Un:��6��%���:3�i(}c��ђÅJg�.���ۼ��y(Kta۸�)����@\�k`�\4tszp�O��ܕ��τ5�������k�<�m�K�J�)/�5�y�6�i�7�,ũ�St/���/Wi�$\���H�Nj��:3byb����w
~�eJ����:���$@[��p�&׍��;Z?IV�L���z�g��\8�a0�զ����Wl&�a�X0�D���\/�V9vk�I���d]�<��LF���ſ�a�PA�P�ۿ0�p����VA�q�JT�L��G�4uaᒒ�J�6;,����M�,�����r�K�8��V�Q��<�"l������,]�{�U^�I��&���z���v�[�_�+,���l����t���ถ9�@�����g6R�5︯zoñ�z„�] ��s�Ⱦ"H�M��h��Pov�k�?�q�)�����%��޾]@�zcxw��g�j�8^6d
z��
��D�c�F�
~�YJ�ݳ�b|N�^:��ג�.�ɡ�	O�ܐ�h�6��O7��Q���P���ѐ�!
�N��ig��m�-�'�sL>�w9��sn��h�u
��Eͭ18�?���8��,X����!M���l�5�v1~�D�Ҏ��
����Zˊ�(�Ð�1���1I�Hw5H�S%)��-&�+ ��6�~}(�Ȃ���*%�u�U�;�w��5-A~����&�d94�,�~Q�֑�`�a;���[�W p8GL�Ϳ��"���@�����LLgM��_j�D��I_\����o�
?�_�]6����`]��ep͟St��������B��/@�DZ��)�m�'w�H��b��C]6�^"s��W�?k���[T�z���]1$�m�ڻ�L������?O�<������φ�~]f�?��������+�pU�X�7�.K��%Y}6������:�����H,G����Y�� h�<`��/�*؆"�(1�!6!�y!��y�)o>�e^(na�k�5�8m���}{��w�k���.'6�$jw�h�/6���9n�>�ՁMg����}��_���_#{�����O�j%r�]�#$Tډ�bRj{c�.�uS$�\6���O1d���{��ژ��!}9MF�j��-I+�����d�>��\̷~��n/=���Y�Ƕ�H���3\/����2u�Dߋ�TĠ�&�	�}��=��kA�j"�+'a�'�6���%�ζ���P�y0���G]=�1�"�y�D�����8���ns�R�"&������������MO�0��8
8�+�IL�SU��"��8��W��['!��k�x�5��<��xv�v����ɵ�7�C]i)q�^�t�!!��<8�($��I�{
�[���g34q6����Ņ�fT�p�b.��D]�5/�WzT��8�0��jyr�g$��MV�>(]�ChƲ�"�0�9��ݗ��AvAU||���~��0hM��_�~�	�j��>��m�&�Μ�����V����y���F��#��%ʮ��+]���]E�����YNf��۩���Հ+%�F��,�����W+PMM@1E
h�z��}��~85���?�W?��q�"d�͆�2�M!HtNz��^��J�0�b�߆s���;�$AQ��׸3�#z�J�)�]�JN*L�v+a{�89׼��7/r�KM��`+�4p8˫���J7�uf�$���io�8�{~�Š"_�;�ۦYl��{�`�X�D[lhQKRq2���xH�(�v�����wߏ�ş����~�2�e�'�/�p�Y�H>�<A�"#8��%
�$�B��j���r�%��%��5B	��tGS��RrG��SDs�(f�L0#��xZ�RT1r�P�`S��ȼ�ɋ��lAe"h���j�d�o�r2D�R$DN��I"�����bbA����o�Q�1��&�_��4Oi��_U�.3[�46O��r����0'��;IĤ����O��+�l<t�j
�c��^���p���	z��x� �&Sh>���>g]iyi�EoK�q!��-c�I�k�ұF�"	�k�2*�5
]J�n��MR? ��ݼ�[�$9��+���DSZ�2O!(ᜠ���?�\�5eD󙜜�<}@�����o){X����7�K�np.����"�Ix�@J�~S!H�+Y��?���wF�D9�ɛ��NN����8"��3.�Hl�g�g���S4�ϟdg��O�юh;-Q�Y��Xlh)^,��Ž�U���TX�2�ì$���耯�D:�1͝�G t�3�g�8q��
@��ۍ�ΰj/@����;��	��R:���vg`���C�1T�T8�^�U�^E��
A�@&ԧ)I���c��%��k.�KT	���	�:*J-b�E}����Ǡ�ɖ��ÖpTk;���$�`1��o���}���0���B���㌦)�XűH�,~h�՞ͫH�yJ�.R�xr;��.�
��wa��}j�r|g}o]s��5�p���I��4/J�o�P����>u�c�<nƷ�M=� S���m��lhx��n�RGh�i7�� #QB�K��Kj�JvG�C��(�՗-x�x3o���h��'�V�P?�i�eṴv�Fۃ��u
�:ɺX<殮s�g�ǔ����^9�Y���-�OF�-�-���c�o��Frp/�xM�I�֊�5�Kl���ʭM�>wi�Ү8MM�UG��>Gk�b��,J2��g<M���K���x�r����zָ�%oXz���C���#{�2�5LQ$��^9+;��ؑ�V�.�����ϡ�cjw���ޟ�;��EcA�m�lp��`
E��mMk�c�A�+g����v
w���V�|�^�a�+����P5K�s��*K﨤1�J�m5�<A����p�b��ut�N�Y��<W��ԧ�\�r����S�sq��,�jF�mޱ�pQ5GNa�´��66^T��=���6��32�2�|��9��f>
�����;m��NQ�,Z5��~
a�zA_�z�!C@��CF��r��4G���S�U�0�#j��i�P�t��q	l���+�&~��<�Wv��-I)~����H�l\lT�g���h �Dw��u,���ΌJ=�f\���m� x��5��6�s}ƣUu��vi5@��›�~�k��t~���
-��M�6�JW��s�k�稳���Qb@m�[.������������]S�^�t��3YΪ���4g4'QwO;��~�q�wV5���[��fWX�g狔lL��ff���hv��T���!��|_-��uK����=�*�Bb�BD`pyꮉZ��]�HHp1��Vyb����N7w1���a)W�fqu���n����j1�12���l�#D��ȊOLF��=5<�Q���3��j܍�P��䖤�"�<�!��e5���*�'F�~�U�-��Ҡ���ԉ������Մ�1�m��}Ca��|����8�u]���F�5��(�jn�?J���=�]L �M��sJ[��b+Gq55�� �.�i��<��d!?R�y��(�t����/�T��� ��zx�-�J\���z'����^��_k���`b�#ao;*�跐�{b��������p��&z��.�F�ʄl��'�^��B��$�b,�,�ƚ�
:�э�b/�?o�ʠ���x�H�FM3��9����JG�Hh�z�t�z;�Œ�#չ]	]�^2MT����d�^4U����~��u,}��N(� �Ç���{s�%��ZI�k�>f�`����h��Ϗmd?eZ	st�����
�8��J?A����Q��6�<��Y�QL�H�gA9��/av��B,�j1W�.?Mކ����7�����#���	9�>�bെ�I�A�%��ׁ���w���p�؍��>�:�
/��%D3�`o
���IgΩM��t�}-AD�-I�kb�-}���foR��f�����3��E���*D��Ir_������r�j�>	�/�?lx�8�d=m�|��2����{�î��mƤ�¥
�W�j�}g���f�8���?$�?���@Y$���n�F�]_1�.*:�('[`��/��X�)"y�E49���Z1b���ː^$;��&g�m�=���=��6���񛿋u(�E��$*qV�P�+��XP!rY�^�h6��j#t�Pe�K�@
xݪ{��2w���i�b)�ȗ)�����Rq'��F�i �֥X^],nV��b�F�W�H._�e����R���
�7W;��T{��o�a���f#X/�Xܜ�/�ϗg�^^�֟�o��7�T��w"�Ǟ�[z<78W�ܼ�0�s�MU�"���ju���jhH?*"@�ED,pk"�����>,V��//�����k�K���`_�2��p4ځ�΍�v�Ǹ�2@��4'��+�Nƙ�E"�����DZ&w2��.7*:J$>$�v럙�{��ʀO�ދKI�P�Q�ņ� 4G�,"8��6;�4m��נ���W/d�����=_G�5�`kT�X�f�氵�_�û��S[X�Lj̯��4�M]�i��T��B���Z$Qf�`��@
�e�!���������0��P��__ς`�_�ax�$'E�E�&���k[r�"J!�n��Xd���#�
	�/t�[K����h�An�2vD<(-�;q	��?��U�ɉO������1�.��Oh1��a��4��f5�:k�6�K}J/�VK�{���w��L�����,����"B��v�h"�Z(	�w/�u��Z�p��qV�/}>l�C�oC�������b,Й��r�/x�������L�v�,��I��+�_�~��Ld�'��9��B�I�@A��!��&�	.#�@B�� A�PPxE���C��E�����W�cE�v�,�@i+�|�n}�\�O�D.]=�\�HIR&c0'1,^�cp'-���%�3i���*@���%�8'֎ib���t�ї�_"��C��Ҝ��A�d��[H}���%���n���8e�S����� �G�Ȋ��?(]�dj�,^
�����AJ�.��v	�R�2G&�n��9�?�T�r�/��b!��O�_!'T+S�g��o3'4�%�o�S�3��B��K�a�<U����?��~bn.3(��`�n���G��ň��̒�d����b��f�E�֜8�YK�}�������|��4�!��ghE�U���P'1G�"7F����i��ۓ�"X��|@s@#<?YVxge�=�j����%dj��1aD;��$�����c
+�Ro�̕��L��(�WSp}<E�Y�S-��\��`����Ȣ�p(:��S�x��ؙ���f�q_��+eP�h�IU��z ���;G��V�X�#�~�E�\�{6�'߸��`>��)�ll�d���ڐg�������#v�,�L2�`��.1�Z'��=N�|��d���P�}~X�44����f��ig�o��a�,����`$�G�'M��8`���P��A� Θ���|�A#AM�$�~��;�b�O��w��4
T�:�&W7^��Bb]�5h'`kQ霏��lm里x��rP�(���U�o���'B5S,�~]MP�F8����`�i^,>_M5�!�FWM��|A)=�խ���*����˘���û��2XA�k݇K�
:*�Bn*l���[uJPI�I�m��?���O���fAծ֝��(��]��a�ū*���HQ5�
�D2h�1Y���쭬¾[�Ґ�r�6<��ǡ1J7j� |gF��#-�<^<���(�*=϶H�!�_E�Ө���~�����W�����(��*�;��Z'zYk�� ��?�Jv��zB�Nl��ў+�t�ډ��19�Yݟ���\��&c��k�l��]�h�/�aC��˚�����)�Haj,=����(��\%��>Re��o�a�a�`i�*����8�cg�R���C�����d�K������J�
�����Td�=��T�wP�lf�hҙ�ju�M�2���:�^�U����J��C���R �2-��HdH�t��j�Re=R����kl͟�h��N[�N�E�ЍB"���R
I�%b����SY�^:5@��)f��j�t'p��յl�E���	��<乍����wAܡ����
Vz�$�����hh��a��߽
��C�q�}fҹ�,\^�J��x��cD�a��!g��dPê5����*݋��:�=�n�8��y���̒��0�"]�E�ȂB�8 ��oW����^˴q��lײ��`m�u�"#��W���AO�� �r��n�C�/��Kd3L��~ji��H5���V~�D���k���+%s}[Ck���'����</Md9�v�p/zj�Q�$M*~��@��O��s�y?��&�u{�on]ޙhA�=�z�n��]MV��C%��`�GgF�X�*�W3�H�w����P��R�}|P�gS!���2�N�����Q+o;o��_&'�Mݝ;��
F�`�F�9�ڍ�1�L�8({�q�ᎎ����[z�A��~���V��|NT���=λ�W�cA�:y���	ñ���Z�:
r�f���?ͽ R�>�P�N�g���%~��>��m7�P�reP��=�Ma�۷BF����L�Ǥ���f5�2V<�g`�2J=����Zo��|z閯��A9~h�P�U�>[������� ���?���]o�F򽿂 9g19�N�k��Рm���=���iȤJJv����;�$%9yŝ��ٙ�Z.��T`��=��w9��w�%���ـ��&Yi)9�x��'"�/���0�S�X�zR�ǰ�hV0E-�U����u�\����rGg�/�
�IK}�WMSܿ`���R{��2q��U�3��	�&�G �uE�6�`Z�\�+��ˋH��Fb량iF��0�@0�(���3�~�Ь�#��f
|����c�;b3��n��E�7�<�]kسb]��Z\��%����M��e_KQ��1� zl�n2��j��%�U~>��en=�vP�(��τ{�
Y6x2)6x�k3 z@[�E��,O���a�d�C=A
�����z��2c��7�f�]�U��m�<��x���/^���^�*y2�b��s�yNo1h$�8��{ә�?��?S��'@d0G�0A��ӈ,�'��M����,԰���7R렡�;o7���(E��#�jY_�u/{��Ԃ�<�֎���8UM���y��Fm����������3d`��qCO�nE�����H�6��o�ͣJ[��o%%�����ۊ�"��6϶k6��6�G����#o����>~ó��y	6de��0V���}���sK)v��w����.�0�������YM-Ek
G6o��+��dɞ_=@m����d���H<�A�/f7|-���˧Q��˧�X��
�.,<������ ��xU�*/��Ʊwe��u�=�(�~���	}���Џ�窸�T��T�-j�<9�����)L�N&�$�P�v��{���r��lj��Yt��@��}�i|MgA���U�6V��|��(��}���V� =���m=�$E�E�3F�ّ�T~�c�>ž����	yNB��<�y����B�bb_Kh��>u�=J��-d�u�9�x���,�i�8|7GA����|����0�D
ZzW4�x4�HNJ��s�@=��
��@|���2BϤ��:��}�l��J(61���ܵ�K�zD�7�2�=xk�\8�9S������_
�]e�w�3��#R�	`���P�z��M�9��b|���r�5���+}�&@
[��6�P�ګ}�
���!�Y}���?Q���^������[:� ���y?�10�I�&� @B���y!�"�(��'�S�L�&�Sni8hzd���u��є�<-�5�D�;���/cy2et�2�(�/Y]`��F��623��N�K_��?'ty#�G6��^&U0�,��!V"eH
ѻ�>�	@�>�a��%Cz�vm�)K���<ѧ?$��^�]���cJ2��ӈ0C��vJ��??����M���[�	�z8��^��=9	�,A��Z���N2}0X���-1#)��9X0
2����s���a�m���-�e�Zr7�j���z�����ݧHL݉�c��]���is����\�lX�쯛����߂,78^���-��aU,��7�h�p
�aGu��*����n~�+s�&>��c�����;o�i�mM�f�rG��`��]��Y�"8��wnNEBr(�G��۔K'���D���!�I�2�����t�W��*��k�.�f�O�w�NP���>�y\yZT#��0���0��J�ZX2%�`k���X�I��n�taQW5Y�G�O�s�G��H� ������]�Fh⫠-#4N.�
����3 4{��O�p�Ӥ������p
�P<�i&�Fmf���:�3:�6��̈́	T|�េz{���ƣ�自�)��T��"|�n[U�������_-���̶�P;xӠ�.��!�m���������Ͼ�5;��`Hu���ԫW�B2G�vD����v[lw-D�dߗG蚿za1y���[��D��IY��^���� ��b��L�����e�W��ڭ?������
����r�����fY{�>D��i����M��`T�flʔ���Z�y2��7�
�D)d?�1
�:x��)��R�ޡ��,u�y\2`C݋�Xg3ﺞ����٭]�[X��o�T�c�����C&{��0�����3|��,ɥ+Ɔ��$�F�?�2-_�0���bV��X3E�>���
���	-�l�9]��H;
 0�[u⏘x.�Hk묊	]���>����^80M�����
}�%��ٸ���?:Gj�b� ��D�z��˙�ѿD�\�M=�o(��MRI��|`F7~3���N���ş�f�G����V��u�b
u�Yޏ�d#��A��Dn-h<6ʵ���~C����W��?^Sڠ)H8��z�������D��7�Nz�EW��ߋ�#3��g�3}�ې�S\��T�[	��z�W���)c	�wQ���×�?���OB�JK/�'��ǵ���Mҵ��B5�����7S�~]�n��O���=�M�S��z��'��!�ҥHy��?=L'q#����LK����g��R��;6�)g�����:^L��A�dIP�9�#��݇r�^U�@�9����=r�e�}�i��eT>�}��c�eрӳ*+�4�{�y��"���ퟋ
�,��ڭ״k��܎�x����K&�	$';�l�%&���ⲕ[c�XJ��<���"n��‘�"H�j1�x̩��k��VW��/����U���@}ܢJȘ/0ҋ!E3�D�6jh����J�֏�"��m�"�l#��L���H�����n�0�W@ڡh��A;��4�	N���Jh��i��Ŏ�i��0$�Zl���Ԏ
�`�e���UY�4MG˝Ձ�+�7��d����	�K��%�Y��g3�i�cmQ��b�i�Y��j1�,s]=*�x-y�DQ��T�#���D�אd�9�ͥH�C9��ţ3������\��0����VCy����fZ�]�.�TB���~&S�e�ف�B�7M�6{h
a]���ђ�R-��sH���]=�#u��Ak�`:	��p���[�{���1�E\]��ad;ˬ�y�J
ĸ�_��3(rA?S*���n�аW*G	ȑf�=��Sj� �p�P	)���N�Z�.��X�"�^��fQ�Pz^�arŭD�;QZ2��v��A֊�X�N�e=!�w�Q�١)
�����Z�1	o�{M;ɱ�>��RS���T[\���)}٤Iļq,I�L����SɈ�Q�]=�_j؉��T�����7��؀'�kh8\A͊}&�ef��5��b�J��<Zn��F���������-����0�
�_�<�ЫC��K�6U�f�|��LC��-�g#�����]!6��8���z��E��}��tGγ e�U���X��u�l�0��U���p�B��G*\[��Zko۸��_1)
�-�r�؉����������b���fW���
��;����X���7m
4�EϜ��ԴZ��`k ��DъX��?�CW臌��R�mO�ޚ�o|��B��I`�(�0B���[�M.�w�?���Vp�.���.�V�yp+�h��n�_��
*�&p�c.�G����R�r-��D�CDŽC�H8wQ��+B���Ż_dx�!x�A���c;�a��ҐG�̧�>��|�8�!��jlG�\��9�F��ܳB,�	�?r7򰹭]�~���?��/�~g���	�)�{р�ch;xʔu���st��S�?��l��'�i>>�Ix����}�CQ2���lI�7��ž����d/�3����Fb�'�#�"׌��;'ݣqY�;��el�6F_ѓic�*�J�U� ���iBL�0s��\B2^O���<R�g9b�o�P ��"hA�S/b\om��m-�7S3|.��7��:~@?>^C}Dʹ?�r�vrr�Q>�0�dV}��v�xH��S�,Ǚ��󶺛���Q.��ʼn��GԪ8߸_jI������-5_�ӓ�k�� ��H��L�Ȕ��� ��ia���֑�mB���+���B?��iL-�_%iv���f2�̀9ܒB����eI�n��ڽ��~�VC~�ߙ�/��̗:��1x�2��x��?ҿ���гGsI�=\H�j$�ah3O���>إ{�+є��p�����•��&S�CF����1�p�#P5I_D�^�{��9����"?�~�����R?��3��C�QS`#�t�����l�/���:L��[ӵ*5�N�{���,E�L���]�LI#t�|�o����9c�mz�Qj��e��EI:Th	��eV;
�a�Ljl
0S)��� ���V�23�iI�9Ol�f���Ӏ�Μa�AQ�.��b���̨ԡ����7%�m����"�.Hͺ�C{ ��GT����Uy�;Y���1��h����S�j
X���R'�x~��>+Od�/��2I��MkO
�be���K�ؚ��qOQ3�V:P�D�2꜍49l�k)4MwFu*#6<O)�dO�,�U�,����ڂ�li�k&3	aT�o2�6!���\AZ��/�70Q�el_��+��D$��VI*��IF�Me=;؎C3Z	����-p�)�Mr��c$ejkmpS�;��L8�fM:1���M�5�������"(�{�d��'��"KϚt�x�,fF�^��o=�&>���w�(��������5�Z�7��뻙Άy�z`nUC��q������l�sg@+��೏��������"���	Z�ml�C�.��es	��F�:([�yuSmf�-���}LJ�Hu�N��u�&e:W��Ưx+�>y�]8���R��Н+t��VEދ~�R���2��t���X�º�g��Џr�C���#q�X�i��H����̄21M��)��ʋ�(���x"�����\){65C�48K˜�ie���-8�mjH�@�H�J����]ɱ�s����9B$E�`\h��t1	�F-[���y�1�/j�cá��U�22��l���)Q*]Ut)ʝ���i2f��w�k3�i�6��K����)׏�-y
#Y*��5"?�C�/)�"7�i?�L���E0}��ץ׸�e���~���{շ���1k��5��/a��1�a�����B�&���7��_⭲�`R]�r���u���n
�>�A��)�6A�L� Ñ��D���Ӫ�y��Y����^w��`�ӫ��=`j�V�]�S���6�ȟv����z��%��6�2&�j�m�sN�<�/I[MW��ɞ�j���l�S�R�����*���ۻ]���_��W�ޜ#s�y�Z�ǧ��SI~��K���w��a͵�
�M/�٬*�*���M,�Y��G	��hD]�P��+`<�p��g���eB�Sƛ{̬��#j�rpL����"A�7�*����zE��W{?V��J�~�*ݿ���H�guҒ��G-K�?��r�FT;}�@Bi�֩f��a0�c�.��֨�_/{��(��E�+��OK8��DV����]m�ұ[�#ho4���ew2�A8�sn%f�b�ֶ;�CB���\MO�0�+9LJ�&e��9 qCB;!�UP�M�0.�;u�~�%�i�L\[佸/&ϱ�_�w�EyuZ)DY��ٺ�� ű�8p�Tߩ�R�tr��l������.l�(?��n2�$�	'�-+"Dz
$L��v��֡�xA~]�C��ף�Q�<�(����C�K8V��v��f�[L��}y�R�.݁�VI\}ū��l�{�\���ߤ�ضڎo���,}w�9��hz��N�ѩ�Fk�c8πȚJ�SPf�s]�ޏ;����r��1��[,%j�0 ��t��O�"ݿ!���ד8$޹`H�xA���plh�>��\\���*
6�ۃ)��S�xYM?�db<�f
:�|,��.�;k0N��u��I� 1���Xp;r�)��
��{rE+�@R�QF�r�o4r�Z~#��i���_�	9c��2:�W�hRuNsD(��|>��tC`Gz����&�YDF���"��
u*�K~�@�i=�v٨�Wp�����P�����65��(Qk����
<X���}h�ׂV
_jE!i˥�)4��|��[{H�(D�UR'����&
w���#uQ�:�fQP��!,{�i=A�|B� uj:dZ8Bn��X[o�6~���M�(��MݤX�C���n�0�i�+Ej$e'��wx���ݠ��<<�������r��_ߢ�����C���	'�&]g��95�V����Ҭ����9�9�2�+�2'(��P�;FLvC薥4r?�s�N_�:�R&���/�����mO��=|O�>����V��m2����9��Qt�)��2G�K�I�/�kΑ#�HQm%�{�7M�\#�1��,UJAUB���-Ȧ%��>���X�As�L�
J�@	��ֲ1�����oњqj�L'�D�{�/�WDk�3~�B��п��%���~|�^+��9��+-�eu@��t��/ٕ�`��Ԭ�����|�L.4��E'���Tr�VHm����9z�����'��y��^�Q�J$'v1�j�Ddd�w^V��E�4ؔ:�b^R'�I�쑯9�D60Aǯ8����T�U�$�1R8���6ʂ��^�ٳ�aw"x'R��R���v3��g�c�q\Pl
L����w&œm��¹^%4�
[�*ÆQ��Z�|�ʢ�*�: �B������"�X��,��X�%]�t=�D�Z�a�?��4����M��▌�X��t��M�R^d�
��G@�.8���]�=�W���������) ��xw���cG'��c�M$��A8j�A��u�'Ei�4���� �2�s���4�mSGOG���	���+�mg[w?-��ZHV�M�(��i�R·������R�C�m�x(��K1�vr@�;zץ�X[�K����U�L�SBH#��-�؁C6[cH�$�r����
��vև���xi��
^��Nv��#腗��;�?^���4�d	�kvGIñ^Ek����R���O�!��F���>��~ձ�wh�S��ɢ4c��IB��JJ��e쐪�g�QX_�����ޠ�jy���\�fX�@W�ˁ�P�*V����;�/�T|����]`g^r��p�v
�����Sd|p8��`��>Sۖև�q&�_%7����S��>�����z통F��F8��Yz��U�n�f	��@i󭦗'}�� �:X�2;���M���c9��p�U��1mrX��ڄI-x �܀����
�pԍ�+�4��e�B����e�x��eUpat��m7h;#+�����̖�y�rb�7҃5u©��^Q�<Z5��a�B��M�멆�
{�:i�6��8�̴�*ǩP��W睆Z�s�Y|�@
W�q�s�\_|�̾�=�=G}�S��Y�ټX�yĄب���2�6��S�};ױ&O�$s��P�Im��h�排�[ؾ�5�����Uu�F-���U�f���堫g��|�ZorG�4�b�/?_	��a@-���#f�hϥ�@����p�rz`Fa�*�)�^l��F�Eu��� �	��i_�H� r�M��;��Z�Y%
6��rI��Չ�=7�GE��V�]Wo����D��j9zY�ͩ�xӜ�|Og���u]!"�@N�3Q���/C,F4����?�9����Ӧ[x$l�R���9i)��#��wEM��{i�.�p�^	��)g�4���
���S�z�dՋ�}bMI���ǒj�~�/�RլމTn3�3�Q�y=����W�DX�{
   "background": {
      "scripts": [ "tts_extension.js" ],
      "persistent": false
   },
   "description": "Component extension providing speech via the Google network text-to-speech service.",
   "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8GSbNUMGygqQTNDMFGIjZNcwXsHLzkNkHjWbuY37PbNdSDZ4VqlVjzbWqODSe+MjELdv5Keb51IdytnoGYXBMyqKmWpUrg+RnKvQ5ibWr4MW9pyIceOIdp9GrzC1WZGgTmZismYR3AjaIpufZ7xDdQQv+XrghPWCkdVqLN+qZDA1HU+DURznkMICiDDSH2sU0egm9UbWfS218bZqzKeQDiC3OnTPlaxcbJtKUuupIm5knjze3Wo9Ae9poTDMzKgchg0VlFCv3uqox+wlD8sjXBoyBCCK9HpImdVAF1a7jpdgiUHpPeV/26oYzM9/grltwNR3bzECQgSpyXp0eyoegwIDAQAB",
   "manifest_version": 2,
   "name": "Google Network Speech",
   "permissions": [
     "systemPrivate",
     "ttsEngine",
     "https://www.google.com/"
   ],
   "tts_engine": {
      "voices": [
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "de-DE",
          "voice_name": "Google Deutsch",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "en-US",
          "voice_name": "Google US English",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "en-GB",
          "voice_name": "Google UK English Female",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "male",
          "lang": "en-GB",
          "voice_name": "Google UK English Male",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "es-ES",
          "voice_name": "Google español",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "es-US",
          "voice_name": "Google español de Estados Unidos",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "fr-FR",
          "voice_name": "Google français",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "hi-IN",
          "voice_name": "Google हिन्दी",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "id-ID",
          "voice_name": "Google Bahasa Indonesia",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "it-IT",
          "voice_name": "Google italiano",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "ja-JP",
          "voice_name": "Google 日本語",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "ko-KR",
          "voice_name": "Google 한국의",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "nl-NL",
          "voice_name": "Google Nederlands",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "pl-PL",
          "voice_name": "Google polski",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "pt-BR",
          "voice_name": "Google português do Brasil",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "ru-RU",
          "voice_name": "Google русский",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "zh-CN",
          "voice_name": "Google 普通话(中国大陆)",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "zh-HK",
          "voice_name": "Google 粤語(香港)",
          "remote": true
        },
        {
          "event_types": [ "start", "end", "error" ],
          "gender": "female",
          "lang": "zh-TW",
          "voice_name": "Google 國語(臺灣)",
          "remote": true
        }
      ]
   },
   "version": "1.0"
}
��W�n�8}�WL�-��e;1��:�$�] ���>-M�,�2)�T�ȿdŗ�H"�27��a�/��nQ dn�O:c�B���7��~8�s4E�V��L��=?.��#��LL:�9:<cƢ;�J��o����q�٠��ic�I��r�����8�n���]���8��s%�A�K��&��$��ui=׀cS�k(7�SV��-ĥo!�y[���ba�,s��a���*C8��d9���e��.��9AK�-���?A��2i��
\���
��`��,�!����9�L���T�J�T��p����sHe�]8H:���Aqϙ�I5�`��w��N�%'M��)�&HL�63�\�u���l�78��������y9m�n����s)�\���o����bÄ,-9�~��U.��;��^�_*�R�Fp��`@��m&VR��~�'�_jU�UpKٙa�V�!��p��[)\� ��j�m�8�*}kXQ9[���՛7��(�ƺ�g2�}KQ���K��e�Y�% e�f,��u��BZ_)�C7ᖗ�Q�
��h��^����2�.D
*:1��zoxoS�k3w���L(��	���9$Kv��qă`]��]��@�YТ�[�+���~%�!cA�R>[1I5/�.1$^ϙ���8*�~�v�d��7N���{`V݊M���8���e�EU��l5�&�a����!��"C���>��_�1y�϶
��]������a�^�%!oBԬNMc�\57��Uչش65��(]0D���D�	>�ȿQf"�/d��g���h4]K�J2J	�m���z��n�ː
&5��>�}��ؔ��.�qDA
�+��6�1�x�W���ϐjfZyqل��+�ڔ�lm�����_�Q��P7�>Hkw�6�o���45]�9��p�D�i5j�X&!�Tg���j����A���!��u���h�����6���5V�{�NXu �V
[E�R�V��]�j�=��ڵ��NT^�ؾ�1*[�O���8>k+}vw��la�te,|ĝ��$���%�77Wl��n��WK�^OWPl4k@������5�B��+j�[���^pO�m5�ͽ V�h
w�
ʯ�@���Ӗ2

��Wko�6��_q���JZl�Z/��V }�I�EaP�u�D&=��k���|H���I�zOml��s�}�:�ކ5[hqVXH�<�y�N��B�����W�Bi��^Y�74�Ѡ��<lo���&`a��Js�r�y�.QK�![�����.J�Rp��ff�3	:���dB�:�񳃣'G0%���oa��9�Mx��Wh��3əe#�	q�+�(�ln&��V(It�e����J���w^i��Jf�|p�6��@��]����UC��E60���JZ���z��L5��M�J�����C�F�*��E��K~�1ͦ��ev��^-��ɉ�S��f��,����GH^V��g]�����d��RKa��dJ�HM�P(�	�����X��@ɲ�\)!�+�)o(��9�a굪�Qt\ݩ�_옒���9f�Y2|��S^콂�}פhj�@Y԰�&���mC\Osa�]�P/���$/�<C�	DZ���U�|I��^yZ�u9q>_����P���[�fhl���z��Ͼ�a:��)�H����f}��r-�|s	��L.b=��r��"����gt+�a��>J�P��I�]������m����#����E�i��2��ԙ~IS���A��k8�4p�P" hmgD~l�--Q��b�c E(z�.|���<fL/�T^ ]�9|�|R�*=�~�����j�P��d���D�+�xA�Z�y�Kf�F��n\u��@��e�?C�K�jG��Sa�I��z���iۛv%��ܛU�$��F�H��f3
sP�2OnL1'�n�Z�����cg2�r�R��50��b�IK�u�O�1�C_v��a�H�CQ�8�W��'��h8hp�'��442p�h�@i(��3M6,Ϗ.��1u��u��_>��NJ��܌v�')����5z��-/�;Wx��U��*	q�NXՈ�B��fIv�)h#��7����Y7Y*p��v����?K��yxl/�mm�G�^�����MH6B��x��pg�7���a�,`&;[��E��>?�+A�<*��^��c-K�׳�8����.�f2+��?C�����ז묳R�h�{��Z:�!R�ըȂ��tsyH������<�h�f�CR=�t�`-��SP�$��H���[�D�_�~��Nj2<\Щ��J�a�;������0���H�li�Z}�O�'�t]�ez�*n��uwh̔QD��ْ��A���M�lc�LK���Ut,�n����gk���N<vۂ����@�`�)�<��>�F�,
�E�ݖ��7�P�p\(c[a�*p�w5��填ڿ���q)��7�n��-�iF/j2��Ҭ9�Ḟ n��WV\�:�̔��kg�-̘q��"�Ε�XO$�1\i�������YV<�ݽ4pWש0���Ps.�&^�%�Gz��Y:�Ye1*C��s!�|'�J�9��k��*��{�	�,�W����߱�P��YmS�:��_��ݙ��ސJ)i`&N�B	���F�[ K^I��}%�vlǁ�����u���#��_\��E��/�W��?��|�+n}�?$z��93�d�����z��Ҋ�{5��8>��]+���'+^�X�gT]4���S�a����pDv-!	!i��ٮ���hp$Xĕ~��'~|#�K�n�'�k-�9�.�dC��Rė6bͽ�;�g�cϗ��lm�s������"�3.6@�	�W >W[��w`"`3 },�q�"�n=6E.�.�xP�]��JM�PR0E�ҌE����������0A�]�V�2w~���=L;��
@��~�?$W�kO���*�5�wkS	4�j�h$^��fU�ĔquY�2)Y�ڙ`��7�����C�����֧��) c:w׻ꀈ���P�Ta6B�}�B�>~�_�'g��ï멯���N<ue�_��~�T�������#�Ӌ���d~���/ͱ<��=:ꉋ��}������v��ux񍌣�Q[,��;`�����u�~�}�荘�߿����͓�������н~��6��������z[gD�W��w��|?�L���ùk��8?m��=��O�B�nLߓs�h3h_N�ۑ;<ǃ#jςkʦ����G�9k	���Ȟl_o]6f;�h��?9�r��t�5=���dk��y����w@Y��A�y%��}���9@W匰���"j���?u{��K�@u�!X7����,,�=�[�t�b]�� hGB���S�H�r��!+�5Q�3Q`�r��2묯�p�YMu���ɃX�a���mgg'�֒l���*������B*����@�b\��4���҆��NԳ���J�Ҋ�uH�G����y+K�F%gD��o��e�`s���l����f�G&��ώA�TjY�� L���ϳji�	n0�R��hن�E��T���l2��%���c`b�M)�qLe=@B��Q&�����u��vf��P�[�X!*��u*6�F��0��OI��P����z+0v~�G�ƭ��J=��9u��F+���FO�۽�XK�4z]��g'�W�1'7�*�/ @�ɍ�-G{}����b<Q�6�1��O����!P�]KS��ݵ��Y�j��T�c#�ݘb�y����L0�+/:P/P�t�Z*	,kK��g����jΏ2ි#n�s�r��>��t.�q
V�K�Z� �~������F�@
5�qէ��Ī�$�\�^�6!��e����j���.�Aο!MpOC8F�i{
�xyU���eK]7�M�%SX�q�J���x^uـ+�+0y�����"VZb�ڟ�^g��']_�F�*��#+���R*�
���3<2s��K<2:I��AU&2��*����t�W�n�ϐ.;9�X{U�goUjڕ��ʍ�	��Wdd������+>ҹ�'0��{�=`�:ewo�z�&����x!���,}��iN-Za�4���`H�ķ�S�8%hP����b�*��.��?�W��c�<m�8�L(�B>#/�ܐ+�+���Y�l_���ʞ�ލoʒ!N�1����
�5��Z+t1a����B��.*�Nށ�f>TU(T-�2O$J�N�$����
'RREB�K_�3����m��S[��'+쌑�B;;���9
��d�{y�
|L�,�Eܪ�[�	�"B���B3�Ԓ~�R
���zx~@���(0(�{��v�"�E�g�:v��vU�%��@��/Ѭ+�6�iZ�����Ol[�o�ά*8�|Q
B�4R���:Vʃ�q�](��o̪������˜��T�r�8}�+�jf7s
a!�_H �Pܓl탌d[�,y%�����m���V-.|Qw�n�ӭ��"�HF��J
&7�"��쥎�TE���I�$������T�*Pb)0��X�	��g)�a]n�t�4,��H�Xr��u���~�!���T(�o�@�dHy���
*es�^�ޮ
���r�V6W�fʹ�z
�Y�+����<|!ͫ��E܂4��b�B�� ެ5�:jA���.y���^����LwՂ�d�a�Q��($���W>R����9�Ѻܻ
�m~�iԞ���Io��kӏ^��m��������Q֦�aջw�7��%����m5�n���v�}�:��쎍�]�T����#�R�Tk>�k�1چ}�:��K�5��_��;w�m�ܾ�;v��I�v>Ԟ[�Sɓ���*���Կ�z��;7��dX�B���V�p���y�S�n��Dl������q{B�{��3���x[��#�堢����L�y)h:�F�n���1Mi���Ѵޖ�wa^_�\X�$髟D���e��j�ve�ĺŘ�\x�?1��_�f_��_�h%BQM�ɑ�ɉ컧Ey �X��0d&c�Ccg�3H��{�~R�g�Y'�KӮ��>������ª��V�m���-d���l��f�yL�0l�}G19�_��*m�,1c�9�(2��k�_y�҇�b^����1�e�9�h�-�h�����>F9��\K��87*�)�y�$���k�m�ǻo�X�����~J�H��9��	k��w���Y��@?b`��6-��'�*����֣1"i�ʈ�R6�����\[1Qj���*�Hюw��E�SdʵR��'�Z����F��Р���[ms�6��_��u*)��ǽ:R�Ǝ3�=7s���"!�-E�Ҫ����.���$��f2�M.����]������e�eE����vI�x��UV��Y]-K�#r��Dq�(�쁦Q��qJ�9��'��YBIR�����򁲂�d�%1y7��j�S�g	-`X��+���Q�4/�"%Y�)����0}O�YN�^���yI�?�<aٺjF�2��4�	δ���*)��$A=���>����ܢ���@V��/�
�\�H��IAc&�RFbN6�s��e�JF�(�a�*"9h�+M* �gh�#�N&,
.t��Y��ƥ"���_�����6+҄1ȹQ��^�5˅��d�Em�.p
��F^�fQ�%��զd��6ǽ^�"�Ġ��?"�H��,C�GH�FxŲ����XD�^�k�\(���W(X	�1�uY�(�~-��#9��j���˵x����T���(h`��U�+�:��ˣ+¿�td,]�U��`��)�*߂�\�ܳ���<9�`lv)�/
��b5=x:^�Qz�Ex[���-�`��y�f�5����n�X�c�|� �Z�b �bЙ,�_f�bg�Q^9�|~��;8�qa�ˤ��Ȅ�����9G�+ErJ�:�]&r���3�ƀT@`2����
��Vb�x����%�����uI<+����	buR�Q�j'A:@f#����S�����T�z�<M����@��y������,�߫ـ�{���h<)d�feU��<U�)���w�4���~��>@��O��Z0�b�i�2�F�2�Q�H)S��W����ń��N9]A�j��� G�ˢ�!ܱ�0����,O޺u�r#D��Q���oZ�5J���5�y	�/����w�	�
;��v�6!�%�ºi��4{�>�Ɗ�k�c���[v{:��\�aBe�D;��[2�� -��x{���y�pY��2No���U-h5ie�W)�F�����1B���,+���ባ�Ս�-�ݻˍ��ɠ&�$�D[[�.g�V&�PL2�f����aG�]RI�[M���lF33�0�Y4�
b1?�l��%�O|��8E0񝥅��*%(�d��(����A�l+�eEM�è,���!8��r�1��������J/e���C�G�F?�J��ю���\���P������C?θ�#-#�|���ӟ�>���V���8`0_+�ٛ�D��r�m�E��xl'�K�<�P�&6+��!��kkt�~�a��QvV�[������{��MHCo\���\Y�����v�#�kl
�m:���JD@�
��?��Ͱ��#v�ف��
�[�R�"P'������W3Įs��8�g��"VWI�Eɇ}�$�'��P��~��C!J~�3}޺���N[��������-we"-�u�AJ��JcR���s|��9��Mq�s;I��^�y��s�,q��4`�
�l�j��I���n���R�GE1iЎ�l6�x��c�]	���0Yp*Mi6q��9NFp�%">@(DS1#&�{#���O=�L:������;ı�*T���D@&�E�'F1c�O���	�|����f6"�T9zh��DIs~��<`S�t.���Lq�m�%{�اD1?BH�?	�c�ކMHŴK���4H���oQbȨ���Z[T��'�����Q��W�MP��5º�t��C.F��VU4� ��\�W��Q�?ͥ(���d�<��c�8��&n�������Rwe�I�w���.�D5��ܷ���gm)��߼9��p��i�h��)��M{�x,��[��\����@�̴�BAKXJ�zBK�f���:Ƴ>����I��!]&� �v�A=��eX�P֩,P��Yb[?����>��+�ή��@�YQ� 	�5o��3�S�#sY�Xt��^!�%;ZQ�Du7qo_}@.�#�+�� �ӆ�o���.��@�'&�b�ګ�X�S��kB���lQ�$`��ګ8�t_[a�+髪�w�	��V�;�2�=�
����'UU�ߡ���uauƬ���E�J ^_�܅� ɪ��}�����%̥
*��vuߣ��3P��Q�3P�Oj���Tr�gNF�p���&��4�@�e�Z�ƭ��e�f����kʪ�>�+1��Evq^2�,;^ҍ�q�aV�؝2Tͷ���4+ �)(Tv���V��ߒ�'G�]]*�[CB��2`����H{�F�C��Ŭ����my#�̴B�	�α���g1��)/vZ�
i�d���xN��v4�ѭ��HZ��P� ���x}���bMe����h�㭃���UW�/J�`�"��fO��%��L��*��.�dU�̭�|n�T֙1b�i�th�����1m�V B8FD���M�{��3@�[�s���o����H cr�������rHnjp�Q���%-�R+ͳ(O�#L�Do�ΪC�/���?�����#\W�}�/=
6�@4����z�V�zՄf縸c�	�����N���^��b{�%�(yQ$�7�O��w�!8Y��(v��@�v��̈́�ȧ"��l�"L��5_B��B�a�<�%����V�(3{��������%k���RK_�����5����Rww32�a{��-��_�^n|?	��m`�GvF<����=3Yx�z�����6z1�7�z̄��ߕ���%�a��pXQ�s��6eo�M*YUþr�-����Xa����{ąr{p<��??���$�����%a'���XK��k�����½G�)����A*X�R>�@V�,�F{7�nV`���D�ؼ��( �;݅��	� W��B����B�^ɫ|R}�m�l��6�1K1m�@�>�ȋ�\LT�\_kj��AZ�u#�Z4�;j�n��,���)$�r������B`����@0r�
�R)�6��.�«�<�hLR6�� �@��WO����8\�0[�Z��P�3��\b���]�n���h��F���u���Q���`%H9���C��9t�5@kk�:�	J;�
�Ĭ�tm���
$�-Q�my��Z�sY.�	-�P3��XX��Fހ���ػY�G�����H��2��,��d�ʼnE���p�!tgvB���C��W�Ⱥ���Nj���'�3���Z��J0{
����DY┅H'G��ӁM{1WT���cS|��9��c�(;����S�`w���s�:i��j�L!�#��((	�|,yN�ErwaS+ʉ/q���1���Ӫ?I7e���+��s�����[ՑQW*GDG�v����/��e���^��d:֛q*����I��q�MsS�e\�y���7�����-�ݾ�iB�ޤ�̧��;u��}��x`9Q���nX�z�Dj��.�}�U����S-�\)6�������DYU8���$'�����Z+j+�fX���"��_3�Ӎ/}�?��no'����[�n�0�ǀ����ݲ�$@�\Y��ыz�'�AVJ"%��x�1�G���'�J��/9ẟT�*���P��r֍���R�'MJ���:»B1~�vS*�X�B]B�"���+��e�˟s�MgN�q�*e��/��O�ꐙ����.��%���D�;�*��f6�Q	 ���"ђ���&|������@�9"Ȯ^@���닕���
��_r��g�,��ff�4�
��a՛��]��+�!�u<�^�J�O�v��p�i���iX9�K-��Պ�Š��͒�����)>{D�b�q���3&a�FJA)�oq*HiC�$o��`=�|%)m��E���V/3K�p�5e��f�!����������K��Q�!��87�XB��@�M��n� D�.��kUAN=�R?`��$�%aGj���\z�d��gl^B�rl�E�4�L/�\��BV���Y!���*C��ez}S�@�$���]�/q��s����0��v]���*�U,G/�(Z*&��Rˊw�+��Ճ�gւ_yLnO�C�\�׸	u�V�%�	��z�Rw���b�nj�/m��$�Y�qR�
���.Y��D݋1��?��a�K�mu�Ei��m���G�}Q�j1��W�E`Ǝ#����҉5npJ�E��xf$WS��4n
]$��9�<�9Z{89��>�{��=��uqCo�g���#O�H�U��'����F'	�*B��표!��	_��W>� %�D���`GyRg�Q�&�6_���v�NĪ����X�����CHh��J1��Ab}�&c�{Ȝ�>q^`W����5��4X(��}Q��2)bI�\d&��yv�9��x�.�œQO:��+O��l���z*�x��tldϾ^��/�O�A(�����jb�:�B�E����|(����T	JV(�$�^^�JYǔ�	�V�t�h�Ғk��o�}�撪袑A[���R�dm���[S�X�7Mўʺ�\X�ES�K�(��:��_�2A_g�*��N��<!doctype html>
<html>
  <head>
    <style>
      /* 402 is the project code name used in the content loaded by this page.
       * We need to override their focus behavior to improve keyboard focus
       * accessibility.
       */
      .t402-prompt-websat .t402-prompt-root .t402-button:focus {
        outline-style: auto;
      }
      .t402-css-theme-hats-material1 .t402-titlebar-title-alt:focus {
        outline-style: auto;
      }
      :focus {
        /* Needs to override dynamically loaded, more specific styles. */
        outline-color: rgb(77, 144, 254) !important;
      }
    </style>
    <script>
      /**
       * Close the window when the survey is submitted or when the survey
       * has already been submitted in the past. It is called through HaTS
       * javascript library's accessGrantedCallback function.
       * @param {boolean} isFirstRun Will be true when the user just earned
       *    access to the content and false if the user had already had access
       *    previously.
       */
      function didFinishSurvey(isFirstRun) {
        if (!isFirstRun) {
          return;
        }

        // HaTS 1 library will post the answer through a form to an iframe.
        // Once the iframe is loaded, it will be disposed. We can not listen to
        // the iframe's load event since the previous listener will dispose the
        // iframe so our listener will not be notified. Instead, we listen to
        // the iframe's disposal to make sure the iframe is already loaded,
        // which means the answer has been posted to the server.
        // TODO(weili): Once this issue is fixed in HaTS library
        // (https://b.corp.google.com/issues/143494318), remove the following
        // work around.
        const element = document.querySelector(`iframe[id^='closure_frame']`);
        if (element === null) {
          // No iframe found.
          window.close();
        }

        const observer = new MutationObserver(function(mutations) {
          mutations.forEach(function(mutation) {
            for (let i = 0; i < mutation.removedNodes.length; i++) {
              if (element === mutation.removedNodes[i]) {
                window.close();
              }
            }
          })
        });

        // Watch for the iframe disposal event.
        observer.observe(element.parentNode, {childList: true});
      }

      /**
       * Called after the survey HTML is injected into the page.
       * It is called through HaTS javascript library's afterShowCallback
       * function.
       */
      function onSurveyShown() {
        // Don't show logo on the survey.
        const elements = document.getElementsByClassName('t402-prompt-logo');
        for (const element of elements)
          element.style.display = 'none';
      }
    </script>
    <script src="$i18n{scriptSrc}"></script>
  </head>
  <body>
  </body>
</html>
�œ_k�0��)� �Ĥv��Q:m�
��i���7�:Y�ӟ2��'�Y��6�0=��չ?�+g�QY�\el�Z�[)�(����w�5i2�����n)u!����ؤu3F���@�tQ�e�r�r�09>9ż$LKÕ�.�+��J�Y�d�H��%�
�>,{#�jm�����
帜}8��Q%����A�KjI+����!N�t=��<��J*J���uF
������Tj�J�G���p�
�P��B�v#K�	�k�fp�j�q�f̛���N�3�4���mW�YM�#�����sR�9
7����}��/ܰC�tZ:w{q����I���=���%�b��%U�q<~�6}���iW{��V�\��dIΗ��I6�����NN��������?������Y�^��w�6i�校����,�ړ��s�F{7�y��<~�������t��Y{s�:��O�K6�W��H`��4a���w7�s�#la��6c����,�C��d&��y?~:"�8�-�3�<�N�R~ �F��h�<�)ȳ�Wb/E�p��s�]�R��;�������.�bb��]A#����Y�@�{��rYNv��O("�]�b��E�Ed�.�^��U.G��qd^�9/K�~8d�c&x	V�6��)�G�p����	T5+5t�ԓrh�n,�0�%�e)"�9���)�{�N��(G�Jd�A��s�A�%�����P*�6	�MxX hL��I��4���k4����r�0�%�Y@�ǑK������NcA�P�O�_^
�(퐅Q�YL$�$���H�ک"<�!�"c�ɍ�-G쭃nQrW�s�ó�.Ƙ����/�����S}����^��~3�p>�95g٨Y����5�.�^s�6��:���o�Q߼�]|�����G���I����pگZ�����'Ϲq�GX���֍k��>�w���-��oƏ�����y��oa��k��d�֨��|WX�qwc-��ؚ^kT�ݍLsp�Uo\q������
��kCj.�>�}ÑY��f�%��vԭ8�adI�%��V|w�Z�j0}��������`��V�e��u���)�
����{<�l5�}I��.�+�o������gk��؟�q�uu�ho\��:�N����(�b#�gV�\�ٸ�u�ZW�Z�g�V�Lw5��6�=�y0��Goe���
d�\K�x�
I�2q��@>s��|q��wPa�	T=46T]��g�(����J��,R�P�a�i��Ŧ��M�Ї.�
Y��>��p�Buȵv�a��@��H����BN%P�$�`A�D����%�E�����X�ϭ2]�U�����R6�Q��R{š�����M�.��qȜ��)��MZ�P�nj8�
��E{���iڨmLA�BR�Ѐ�a�X�J!�)�2D8W��%�������j�q���&��7�%e�JAI���2�(��y�U���Z}�t�f��գ9�n*��dM�l�4Os}� !��D��ӚЈ�(s����-ɡ��130�.�:i���{Z6���1<㤵~�c�#v[+{�=�X����m~�paȬ����Y�3�G_�3��dC|�_��|)�2��H�@�F8�6�u��?�!�֐�a��8�0[�J�+=�h���Q�h���y��ue~'lz�I2��\���n�
�.@k�"³<!x���f��A�^�x��4�i�ؠ[7��?7��ō�|�0K�ɑ���H���
�^�of\c
��Ǎܓ�)/�|�M��#G�'ӥk��9��$�b
����0f�bYr�͵�qȪ�����yb;�W�DT��wd�&�������-���!4��!i/�UMݩ)ڟ��-G��c`Z��g{��;�Kդj�'�G�L%x��
��6���AV��%�	F��"`�0�M^$^�9p-����V���0t��*DWr�`����C���4U�֊�����iDf8��ˌIP��J�3tE8�z&��
B'O�QVߺF�pe劖�ف;�<c�nXЮ�we�Q.���%��,ܤ��Y~�O�uW�������K"�Ui����0+��;=~0|~JB�
����pf�(WCɧ>��|����ѳ����]�\�iUg�Z�K�%-R�z��� 3��:�*�I8b( ߷e����L���T'��;�L�Y���! I!KR++k�ڻȃՌ��g�ֿJ��z�� f��P�0��ܚ�fj�q:�=�2맩��'�?i�=i6��貜|��� 9����C괋�u{k)"E�.�)�c��ܓL��N�oؒ2)v.����`��4�6�3(!�6+9G�g�(�AVY��\[��n@n��X��s�.f�pͦ�>�|�dT/�Vr���
i�3�Gps��	\�l���[%s�M�|�����]�:�B�yo9,�`��^��͜����n�����IC�8aoC��26k�6��1̨�sb''S�	�ԥ��Dd���F���t2��&������e���j���q/&�3��v�D���)ߌ�N�PCo�t�_$���C�l,N[7O��H<�c�@���f0ޠ����z:�����D��.b>�c�rcc�s�㒰��O�7����oW�>�4y�f����x�(tv���Ūp<w{�"�kI��D��&�zħ<��<�G2�"ٹ�Ș�r,(+M��,E�*.;z�VR������!`��!��S�>aH3����\Drf�e+�a���뿐Bp���W]o۸}���+�������l�:�ni{��؇ �D[lhQW���M��I}9��"���̙�3��c��jS�U��ͫ���u!i^�f��5�6�0�M�Tk�B�jie}/�tr|L��$�$W(K�4u&)3�$��̽�K��bC��_�ͬ�hIZe��1WG�(i!Y��4eN�ĺ�ˋ��ǫsZ*-��$i o]�2��L&�/_N�%��$�Zl�P,��Pi֕)e�(N@c��\�+�8;�R��T	�Xe�z`�U�L�:��_e���ysj隺��J��N`n�/�Ly/K%ˌ�`ul�M�t<��4u�sc��F�ޗkq'�W�5I~�
U���Y�S��
XUq �!�ge�J��Y��5<鵲۝���­5}�N�+^��
�
����t�H�U�̟'���GI���`Ƚd���J�bM�����~љtBi���D����u��b����u�>��eSf��P��:z8s@�"$a���q/lV�ʅ��`T�ɤ����8�D�.ѕ�=�znJ'�r�7�tG�x8�i�	�Z��A�i,}�	S�-�ɑ(�2Y
� ��Rֿ_���$����*�2/�Χ��������;tD����r�H�:T��I��\�	d�}�ڻ������wd���!C+TI��y����q:x�ڧ���9W���)��Bj��4E�Ӡv�Hsnd̈2E���d����yHcP��\|�������X�jU�U5�ո�=gy��[$��
{P m��a��&�L8m?'9$d��b��W���-�T5ue����~�_��^�2/����g�ru�m����On�f�N��ºZ���	&�%x��c�F#	ح�� �`��<[�y��a�z~ӱU������ur4��I^�o�ۣ�U�g�������_�mx��Þ��ǚ��&�0�	�	\�K��]K��;��M�[Z��h�4֒�q!�WV-�V���$s����ڏ���(�SB��r;ݗ�_�b�#�5U�~�bz�������Nّg�������sj�?�s*�Y��|�8�鿡���FO�R�u�Ĉ�V%w-��<J���[���9SβBfw��x�����5�N���5ղ\�+��!�6n�mj0d��G���V��3s�볿j�󢿎2�1�gr)
��Ζ�m#(g�zR��av��F���ߘ�i��2����c��4��T�v�������ZK���-E9M�������D�}�����4�Y��,F�h�0��3���0ą�=���Gg:o�]�M�g�M�a��jƘ�T��d؝���!���SOv	�S4:�*s�o����oG���
��>�/��{�@�i���lMṴWuq��=o0�_W��B���'�����Txѭ�$*On������g�I���)�����BDy��݌�&������joˀ0{T����в�m32�?��~��q�A�өR���������`?b:�$6��`O\�Ɇ�Qq�����d�oz�2�A�����$���K���*L(P!O�!����v��̶�F�T2���1��'�[oe�g2ԏd���B��d�S�����]�)�o#uv0���Kw�P��ӥ�,�t��Zbf|:��L��؅��'Gt�c�m���7�ҹ�q
ǂ�����z�N����E��"�T�dGN�����q��!�
��!������n�0��<���iڅRn;�g�B��t��bw*���3��S�J= ������퓎���@�uE�_�`��Yr��0>�	����V,�E����|[�9�P�eW�QO�����Io��ʀ�dwN��Cê�c�&U}$��������;��6Y3J�m�7�:���ܵ����I&�p�ʽ����7�ro�_1�K�����io�J�o�#U�^�w۶"�`�D���M�
vQ%;`R�R
)z���cR�ő��l-3��{�J��j|oe��]���
�w�{;�<Eo�K�낰�u�~�rq[���`���P���sfLQ9�Tv.�ٿ��/"�
cx�����
)���Vmo�6��_q�.�N�lC���m�lH�O�Q���"J�I9
��II�d�]�}�%�s�7�T�Ϛ�3g���!C�fZmx����fJ���2�Ѡ�b�F#�� �،0��	B�Rz]�-j�),��������g� x���l�,$L��J2.�;������V\`��E��<��E��*db��d����V	sǍ��@��ؠL��>*\�6x���䇴+YWGc�tE��yz��&œ`��ٖy����6��D�KP��S�2U��S5NlzJ�v��&JZ��G�6�/��<q�p�KS�3d�F�Ȓ,[R�i��6eV#H%Oe!D��8\��S�+
k�,}T�X�.!UI�!��D#�x#н�#�]��CC?�I�Y�����a/RUx:p���k�,�)�S縗�W�ku[Lx/wR�dKlu7�h�ZzO���O�e���B�}LI���g*јK��=;�٭?[h�,��&q�f^��KU�r"�B Ү�B쫷U]P�L2
���T�uy�mj:Mm@�řRQ�ʵ����Ur��>��{� �
\Ԇ�wYذO�;+���qEC+�ea���2"�JS����rp��J,�Q��lbf|{�\S�
1k��D0c��]�*A�~iµ?�{0*��ig��l�d�P:V�
|B�U���&�H������jףf���J�s���򪭴����|ƣ
]gv���m�>T��7�1O�՝��/f8�/����s�V4�(��I��QР�
YJ
�
|XG6s��o>7ه]Vg�=]���E�#0W�р���<wN��^�t{��Ϸ.��a>C�-<������z����A9�E�&�<�C�8�|�hi�B�ڶ��6�� $r��]9����Y��?v
�ޘ��vF���
5�[;�~��[��Qu�
ڸ�g���cxt�L9��|���vԲ2�P���z�Q#�f���R�y�z��R�./Mdnq��M.�3U@�S��*[���v��g R0����pE����׵��
�B=B�^0���ذVt�=�)�5�ں����dr���!�T���a~����X�w�;�?PTP�C�;��64l���F�/�~3�<���{
  // chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai
  "manifest_version": 2,
  "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN6hM0rsDYGbzQPQfOygqlRtQgKUXMfnSjhIBL7LnReAVBEd7ZmKtyN2qmSasMl4HZpMhVe2rPWVVwBDl6iyNE/Kok6E6v6V3vCLGsOpQAuuNVye/3QxzIldzG/jQAdWZiyXReRVapOhZtLjGfywCvlWq7Sl/e3sbc0vWybSDI2QIDAQAB",
  "name": "<NAME>",
  "version": "1",
  "description": "",
  "offline_enabled": true,
  "incognito": "split",
  "permissions": [
    "chrome://resources/",
    "contentSettings",
    "metricsPrivate",
    "resourcesPrivate",
    {"fileSystem": ["write"]}
  ],
  "mime_types": [
    "application/pdf"
  ],
  "content_security_policy": "script-src 'self' 'wasm-eval' blob: filesystem: chrome://resources; object-src * blob: externalfile: file: filesystem: data:; plugin-types application/x-google-chrome-pdf",
  "mime_types_handler": "index.html"
}
{
  "x-version": 42,
  "adobe-flash-player": {
    "mime_types": [
      "application/futuresplash",
      "application/x-shockwave-flash"
    ],
    "matching_mime_types": [
      "application/futuresplash"
    ],
    "versions": [
      {
        "version": "32.0.0.255",
        "status": "up_to_date",
        "reference": "https://helpx.adobe.com/security/products/flash-player/apsb19-46.html"
      }
    ],
    "lang": "en-US",
    "name": "Adobe Flash Player",
    "help_url": "https://support.google.com/chrome/?p=plugin_flash",
    "url": "https://support.google.com/chrome/answer/6258784",
    "displayurl": true,
    "group_name_matcher": "*Shockwave Flash*"
  },
  "google-chrome-pdf": {
    "mime_types": [
    ],
    "versions": [
      {
        "version": "0",
        "status": "fully_trusted",
        "comment": "Google Chrome PDF has no version information."
      }
    ],
    "name": "Chrome PDF Viewer",
    "group_name_matcher": "*Chrome PDF Viewer*"
  },
  "chromium-pdf": {
    "mime_types": [
    ],
    "versions": [
      {
        "version": "0",
        "status": "fully_trusted",
        "comment": "Chromium PDF Viewer has no version information."
      }
    ],
    "name": "Chromium PDF Viewer",
    "group_name_matcher": "*Chromium PDF Viewer*"
  },
  "google-chrome-pdf-plugin": {
    "mime_types": [
    ],
    "versions": [
      {
        "version": "0",
        "status": "fully_trusted",
        "comment": "Google Chrome PDF Plugin has no version information."
      }
    ],
    "name": "Chrome PDF Plugin",
    "group_name_matcher": "*Chrome PDF Plugin*"
  },
  "chromium-pdf-plugin": {
    "mime_types": [
    ],
    "versions": [
      {
        "version": "0",
        "status": "fully_trusted",
        "comment": "Chromium PDF Plugin has no version information."
      }
    ],
    "name": "Chromium PDF Plugin",
    "group_name_matcher": "*Chromium PDF Plugin*"
  }
}
��S�r� }�WP��43��eTɿ�A������ʶ���e'����^��Y8K�M���l k��:Li����ս�)� I��pf��\�G�CK#Bh�A���yjBmW��H09�>RW��{�	
?j8�Sl���E�I+G-���_l� ���f���&��ɾ�e��R�h�gL�M��]����BU��^B(e�U;�}XG/�|�Kz���N���Ϊ{��E����m6k��G�*v�gQXU܃�<���+z�T������#���b�V
\�_V7��U��j�C�3ͻ	Ѵ��oѫ�G�Dh�s��\�7Q�K�K��{Ş�����`����ˉ�nQM�>z.+|�]�6KY���3%�>K?���h���et���o�̻Q��Dacጎ�_����uD~�cAF��������is�6��~���rV�l��v�M\w�6��Nww<"!	E� 裮����H���$$�n� 4���$��:�dw���"d�$Ɋ�+�2�a"�	yEDeD���L�)y�1�,�yF�$>#~0���
1��P��{/��#�Yh2���4&���I��0��Og'���OɒGl2�U�I�}��ͦS�A1˦�����X,�3��x�ȥL���d5��m<�V6����)�f�0��\�yDd�D*j�O�� `�g���"NR��n�C�1�I�����y8�&~�Bz��&K`��#��mp}�\���J�O!�@��6�-ޟ��3�b&6��-�9�G�S�P��1y�D�+�G2�ӛ/��<="����|%�[�w_���X��:�19��2��c�3��oq!
�[���w���R���xq���P0*a^2_ѳx��L����|�)�S$���$0L�?���;	��$�JȊe�ٌl���j�9k��cjh�����I����c�=��fd�����x�s�@O*ٌ�}8��9>���Tȹ�#<!�:��؏�
}�)�'�#�$Bx�<�a��C
����$=><633�%\%bFn�y"1�Pq�Iv'=5�sP�<��gd��j߼��d3����j>d��gdow�/��z`h�8�?��P� ���]�ĬE�Mҫ�W�f!,��m�(���^�	�����ۙzk��L2m�D�%�du��i��2�p�|*�
zC�M��2��z�lT\P�ӵ�R�5��P��5�����`�]�eZ[|�^���I�|!������=q��MQ4���A���YLx0��s����<�|y�,
t1�!��2���&�A<��Ռ�嚕I:#/��.]M�z�����m��<�y,�v�U-%��xu��'��
g���;��W�o���|�E/��k��ڊ���[ʃ�5���4��r�HPM��@�`e��8�U*��"J�O���Ŏ�2��gJE�a��MP#ށ����2�[��n�s~�����GW�p
w�0����Yӎ ��a=�>^Z�ٌ�f��w�`}���,N�Ȏ��7-
9�5S|��ڶ� \@Tch;��~O �xQ(C���]G�l�IGu~<��R���E���Q=+V^L�O�R�,��P��o�)2OuiUk`�e�
1 Ǎ4�[��6�,NJ�׋銍�*P��j���(��+����.w^�+��u�;e�j�EO3��l��j���i�\)+��c�ҵ6�V���5�
�9ў��iP��m�����R$�ƍxΣ� ���mz3���P�VnR����Pl!jݯʀ������>��̈�!4NL-hvX�l2~�!��Yp4L�s5r��C�G0�Et�����p늚!��Je�ߪ��١N+�͈j�9�LJ����!���,;�����F�6�;.Su�
//��V.�_]
<��X��뭞AQCT@s�:�Rď���RpC��1�q�����,M�������n�2�ei�B	,��FU�^�A����BU�A�A�o�oj�紩a�lR�mc��C�l�����=魼q+��	d�#n��p
�@�QA�}8lᏆA��,|���0�u�O�G�5��T�4p��_�
�:t��Њ���uJ<	X���@c��xʞ�A]��}����A�(�KBa�2���A�]��ө%����������F�K�{A
��r�.}ͽ>�myU�aq"�4��%�=B��!_]��S(=n\�O���ҐN	:<-,�rΩ��fvt�
;c<)94�	urX�F����$�G���� VI덒�c�'*�wZ���k鮪�����|�⋮%@�<���
tR���g��AKmE���&��v%ĵ{���g�����u�x���S̻�w.}8���
��D#����`�WU;/
*ç�'k	��
w��yG���+�>�+�s��S����9���M�u�'z�Z�2� <�K��-���Q]uO��o&�f$4�-��b=�9룅gǖ4�8֙d�ɢ��w�j�v�'co��k����N�x��T��U�h���xv����>ʹ��)n���,�s������ȥB���+���8u�(@���q��E}$�?�	��
���^0�! 2!�!e��Xߥ�ߠ=|��%o�>�\�|��w�73���)��Jؐ���2�gt#LE�`�g3rn>��H]8�-z��(��(fF^%��h<��)�M���[���s76#o�5X+�6�o���EmH�yU4�D�hE��~Mݎq� �s$;)N����ʖ�8�V@d���Q@�m��YM,���z��ɳ8��S��$�45b�gQ��-s��ա���@�*(V���ܲmT��3�Ȟ/����.9:֔��%�;�3~7��v���.�/��ͩ��������#�[o���I���P��5vz2�Y�aiN�QH������Q{�����2�aY<����&���L*�
R@G&/�:�mV���i��i�����.�Du�C$�p��x�R	f9N]3Q�]ueֹs���k�%�}�����DX��P���귮.���`Yk{�I�gaū��t���9Dc�PRöH�
~mk�^ZzM�OO޿;���Ռ�� ���8}}~��9�w�??}�_�L�_�\���y}����/g'��X����T��rt��|b�٨�_;VG7�`r4�c�Pն�%�"�k|q� ���Ȃ�����۱�H-�tԝO,�"�T�N+� ��JǽRuԯ^�\8��E��d���N9Mn2���}Ӛ\���p�ö́�d�)����r=&��L:r\���Bq�yk�G�gϪ՝P��{��Z��X�4j��1m�B[
[�����5[]wL6�uB�5}�����]�fn5���Y+�Q�T]+խ��b)��}9w�~b�n�s�!�JեUO�W,�_v˥�$T�1�.�Z��l���s��A7�ܝ�~�Js�DzU��$��裁u��]��f��<��υ��H�%��f�/"��y$71��L?R�����~l��	�~dɡy����A������3&Q�LݞP}-��
w߈A$t5�fI~͙��4�ʓ<����(n��	�l�;3��c�G��/,X��I�#m�[�Q��	d�e��P� �P�[-��,�ހ3���%1�;R<v��J`uK��P_F�d�(s�^F�^a(�=�EYuQʭG�
��ӐE��1b��\�UZ�5��9��e7y�2]�AR���~�l7�ZD}��dM$tԂRY�ԟj�6Nd
J�?7`�Dˎ�
L�Is6��VMo�@��WLN$Q��ޚ�BJ�Hڞ��`#{�	��p�v�bwg޼y3���CKOF�'߾|��	Bkbt,��	M��uhF�FZ43��óE�#���`ub�@����! �߾���"�b7��@(�C�D� �#<t[��~F2º��x�
�R�a_�q���$BsU�[���Q�����Z�R�+�g�)/�Y?0���fkמ矟{pw��b�#X.�@	vK�]d[S4m�V�
N�ƈ�Mf�p�5?}�)I&�9q�l�Ł;T,�2�Y��$�[�р��-0�wZϽ����,����1hw^X�
q�B�{�N�w��n��l
�/�;�����g��v=���lm�[W(��b���@���}H�X�{�ߙ�δ�v��"�0s�)��Qѣ&V��.�=I�QE����(N�9ǡ�
��v�<��~`$���̃�#��mI��k�F9u��9m�(Yja[��\��>-	08��s��]��޵�I9Dc�wX�g������a35R��)������o�M#1�|�N�i��`y��n��w��h�s0F�m��3X�=��H��*���{N��rv{�b�"1r�E�yH~BU�e��dp7~$-e��7�f�Ý������ؑ�J�!���z[�x����,.�?��e�}��XbI-K؈r�8�}���]��Q��K��Y�B�|��peu�,Z�_u��:VF+s܆�������ew@'k�U��
��ջT�~_��G�E!� ~�����;��D�n���R=��^�r��x��~�H	��S[o�0~ϯ8�e a'vn
k'�2iH!x�R�m�rS�Fj��s�nC�BBJ{>���v�����Ud(r�ZiXVCט}�{Wu��p]�0Y��èK�|��-��X��~PTWj�����6(����Pk���-���p��6�*m�}[�i��p�qy�yu[Sk�y������� ��f6���!�u��k�Q�w̎��a/.�\S��/��`����aq��
�]��i�婟���.��P���+�ք���u��֌]y䄕v'154E[�t�[���l��i0E?��E��S�������1�,�Ro�7a\��P
�wL�A�ڿ�������Ly<pBژ�?v&�W"㉜�@�"%x�<��D����7--N�8J1��I�����KYĥ�!��9`<g���D���<C�񔙓���,��w�v��ta%�QƷ�ѧ;X/��k�ShpV�Q�~��{�S��(2�D)�^�0�,C8K���T���m�ߡ$�(����]��P���|��)�3̠c�I�	TL�,RX8��	�"ng#��TH�1r��!�M���:19�O(Iá#�b�h2�)���3<�<�I�i�_�<8�hB�-��x�����鶤�w镝�ӛ�.J^�=�������k9�xs��3��1��V�n�6��)X��
`Y�ǁVΡ�^�@��EP��bB�9��}�}�=���IvH�G��-��p曏ߐCe?F�Va���
x�x�X�<~��^�Ԡ1K:�w�9�p�X�Q�PR�0j9\)pF��P�#QYSC�$�i����W|*��B7$K�䄕
2g����<��Ѵ��"y�lO�ԅ������в�ú��*j?�Q��ЈS�R]���,���'�r>��I$�R�CF�<V|�E_??b,7Ŋ����Fc\�Z�Uʮ3�As=`��ǵ�i�|�p�/H��y��\�?乂-tnl6F)�8�ߌN�`1�U ��ye�(Y��g�نL��;b%�lKg7a����'���eaM����E�n2����==�ӛ
�h�3D�1R#��d���-��)4�^Ȳ�u
$�6K˛=��]���K�{��"������@��X�RG�k���64�"��������v��<FÝ�5A,e�Uʦ��!��;B!�`m5�u�f4�U�?X�s%�|�jgiIݴ��^B��?��u�:��G[��f��2�BZѺ7��==���������͎�k�*^�e�F�#^���{O�{t��6-ҝ'v�Hٴ2�=��!��3���#TC:]���:My�= A}��(5��|��"C�O���HU�����K|� Ah�]W͒��|k
�߷d�����n����2Ỵށ��wm�B+y��<�bo��_�i�`u.�o�O~'E�/U�r����y���‰^�	ŝ���]��g��ǝ�@c�V>�I�a�Oj�g�m̶�ɺ�Yҙ����;�XB�	��YKs7��W���j��8�\�KّhmE����C*p$�F���n�T�������n����)�Zx{v�|Ys���܈fW�YK�3�*K�D�\=�"����W�A.���-�s�e�?��#W/`��f��J��y�lf�䬂'��l�D��s����|z���(y6�$
�k�Dn��	Q�>r��˦ʍ��%j%E�d��>��Z�k�
��,�x�������8���c^A-�d�h�Y���VH�ᕁ�&J�MJn,�g<�՟[�H�咒�_��fWs��*�N��e-�f���}eS��uȹ��M��J�t:|p*|vWU�|#
�1:N{E໥F_��.�P5ey1�e��5���3������4�P'����.ߡ8.�\L����q["i�7A�FUG�B<���BT�V��p�|�@(���V�8���6��[����l�!΂��/�kY�P��Ҥ?�:�-�(A��j6�<$����me0Y�+�R��~z�̥�
 E��q J�j5 �R�_9]!1Ұ�!��'#���%gՈ�cQ��cTÝO�O�a���H1'��D��q�qK:$gK���H���(�+�XJ�5��]�Z��Dv���޼q!��o���#"�	mx�U��X�%'��.)�S
s�3'�S`dW;h0������A������i#{�|la���x�8Uzȋ#�KV��Kɲ �,�M�����v��/�@H�Lfo�[��rw��Lk2f�0�[s��:���#ĭ��e�F�p��#GW&=ց
;��1���tyC6 S�d>�2C_����{�ƬĔQ�}�4*��c��f�m��&O.����_���V��%K,�-�/�߇��Q�w����mJ���}��0!�9/�x9B�/l�s��'�A������g9ҷ��2��h�bXQ� a�;�U�ӊ]0�m�����;�=�� Z҂�g��g�;�J�zX:)I�5mE�j�u�8��gQ)�A|)pp:^e�BY�sM���	���Q�ϫ��c�ixk��,n�{{`�����5&̜jv*5
�˪��|b�)@��N�D;a^i�G�)_��e��B���)��p��_�P�G�a�WL�@��볭(p`��t���O�
$���qm�Q^���8�b�}��`	N�X�:w9bF�]'D��4^:��Bu� ��c4A�!
��сqZ��]["�Zb!�bn��`�hp�Ȫ��}IN�%����C���`"C!^q�dP��	v�堸�m{��N�}w�q U��c*�q�G�k:>��Ѡ3>������8Œ�n��~8;;�8�k��gñº�.�4������b��C�=�-H K�$-Eӆ�щ�VJ�Q�J-틃�r�@��Z�����M9_U��g;�_�[E�F����ƈ���hm�>ӱu���x��&�q����Q8�u1��`�J�u�x��o\��>��18Ү����0���l����V���6�+)!���
Y���8C���$�c�D�ٗ�V`9��_����v��ư��EǷ��'5�A�6M�&X�|qn!�f��#�OQ�\n0��ͭ�v�;��z�1[���>�=���=G��.��VHyTan��V����l��5��о\\af���s���=ۃ^˦,�iN*�yz��K��b��up��b�+Q��
���-d&�9F���~�����mp���kI��[�W��$���M��Idi�KM2���w)iG�4#�nx�vp�(lf�m/�
��5����n���ç���@[kÙ�V��k�$�7C+�*���M]#,:ن�7��,+^�4h�g��AoĮT)��'�@
���b���.YέWX�7��Qh�qi�<fCK�xk����,_���ufIB�c��S�#V
W�x٥>V]m�S5����٠��A�t6틓�b[�0�n�9�_��	���Vh{
M6~;�p�>��=�
�7��})��̃㐱?lo���x�`�L���X�l�}�6��-�Ҙ�Uy����9]Ҿu�!!�N⟨�m�x�o��
i��>F�������H�<�6u�
���N{'Y�i���{J��BH���YmO9��_1 ���n(=U�U��k��C��>TU�ٝ$�m�{�������dI6
-��������x��n�7|���EÁ;���-��n��Q�,�Έ㣧�u�I`�Xq`��U�CofH��B���M�q�D�=�9�\�L5�6��h,�`��`��!\δQ,�I��\HN�� 	���=��D�}PC�C�Xx�Q�5�7(Bk����O��0�ij�*��z�%�y��B��ㇳ�O�s��F3��R	��F���sX�H�8xq�.��jכ�z��k?yҀ'��)aR`��];q�E9�h��B�05���6�GN�"p��筍Υ�7�G1#��\I�d��\�`�uA�޻����SkB1$�c��ֲ�����G8��7��Id'B_ћic���H�QX��)d0]�+q��@�~O�G�[F����ԎD���* `��8��u�J�u�~`_O��#���pl_�_��PߚV6��]{���(�s���T��?�E(6��%�zX%��r�����C���\�ߐW<�Q��Ù�dx������ڵK��5�@��U,B�\��K�8���>	['B��{�~�ge�ԢK&�Y�pt+]>���bu�R҄<����噵BԻ�Uh�^�e/;z�ΆD^���P�b�_�o_+B�T"؊E`���Y0z�ƣ��)H��і������1� i)�$25�HH��,
�^���?دZg�]�� XaɁ̉9�u�I��I������7��3�@Ӊ�b�
F�UID@p�CZ���U�ELrz��"���;����4��r1�Fï����٪�[����L��~Q&k4>k�{�D+MX����z�q9�Ts�v5_dN�N�[�6����e�����]�p+�w��K�Ŀ����w�z���<vm�
T��Z^�k�ȼ�?���a��)4�������|iK��4��R��� �`'s��;�Y³����)d���l�u������6������.�F�t�֒��c�]�H���{��_����O��ܥޖj������z)f=�B%�=7)�{�v�I����%���\���4�sa��Z��?��fu���4�(P@��f1-�+�b׃�I�U����
E�R����#��^�OB��R0�˭�d{])d�z��;���~'�7A\d$��ƛL��LF��:O�8W�|�ޟҁ�C�S�%����>��jK�%c��>�'A��Ό{�=A���룡d5�!�ۼ���@�'���L�I���l�*U�"�*���9���9��)&H+�]��&��$槂�Tђ5ςf5�Jզ�I	���t�H�,��iM#%/�d���X�S�%��c͖�ʍWB�"�],����Ћ�l[��5Q��6a�K$�s�6I��c�<����<@7�µ^��7}��*�g$.�p���F7m�Z�U�Bhߦ:[�_t�$�3?xѝ�i�0���˙0i�7�G8�s_��.Yp�yiA���4��HhM��P�i��N���z0_��'5j�y2{��1\��%����M���R ����1���7�`6���
_K��W�"�ݞ���ݫa���
�d��Bs�b�r*�p�w�Ks�ly��'�(�ޣ�Ø�
�<�E_�k���uJ�.II����Ὠf�͍HL�:�����b�.0����'9�Yc�o,k0��F$&�H�@�HP�|�U>xQ��7x�U�$�u�_k�0��)� �ĤR���2h�u0X���i��X7��"�̘|��r��tՃuu�9?_����wn/S$rtb4�x�ud�Y�5�¦G��o�U���S�y�K(��4��X���z�2>�~<�mKX���u��*r�|�2Y�)�$%F�] �-�M}}Ch�����{$o��j|Y=	���
�d�f4�ņF��E��m�~|_]�\_c�
���I��ˋ�(��	m9�k#�O�<�8
���	��Q����.gc�0;��q3:n������)��(�Yw��s�4�Αȸ����.1A0��^���c��|�+1[�B����Mӯ����ɨ�� ��h���'|�O�j�1/�mm�=�*��M��J.������Κ-�<!doctype html>
<html dir="$i18n{textdirection}" lang="$i18n{language}">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
    <style>
      html {
        background-color: var(--md-background-color);
      }
    </style>
    <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
    <link rel="import" href="chrome://resources/html/polymer.html">
    <link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">
    <link rel="import" href="signin_shared_old_css.html">
    <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
    <custom-style>
      <style include="signin-dialog-shared">
        .details {
          padding: 0 24px;
        }
        #undoButton {

          margin-inline-end: 8px;


        }

        #syncDisabledDetails {
          line-height: 20px;
          margin-bottom: 8px;
          margin-top: 16px;
          padding: 0 24px;
        }

      </style>
    </custom-style>
  </head>
  <body>
    <!--
      Use the 'consent-description' attribute to annotate all the UI elements
      that are part of the text the user reads before consenting to the Sync
      data collection . Similarly, use 'consent-confirmation' on UI elements on
      which user clicks to indicate consent.
    -->
    <div class="container">
      <div class="top-title-bar" consent-description>
        $i18n{syncDisabledConfirmationTitle}
      </div>
      <div class="details" id="syncDisabledDetails">
        <div class="body text" consent-description>
          $i18n{syncDisabledConfirmationDetails}
        </div>
      </div>
      <div class="action-container">
        <cr-button class="action-button" id="confirmButton"
            consent-confirmation>
          $i18n{syncDisabledConfirmationConfirmLabel}
        </cr-button>
        <cr-button id="undoButton">
          $i18n{syncDisabledConfirmationUndoLabel}
        </cr-button>
      </div>
    </div>
  </body>
  <link rel="import" href="chrome://resources/html/cr.html">
  <link rel="import" href="chrome://resources/html/load_time_data.html">
  <link rel="import" href="chrome://resources/html/util.html">
  <script src="sync_disabled_confirmation.js"></script>
  <script src="chrome://sync-confirmation/strings.js"></script>
</html>
/* Copyright 2015 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

cr.define('sync.confirmation', function() {
  'use strict';

  /**
   * @param {!Array<!HTMLElement>} path Path of the click event. Must contain
   *     a consent confirmation element.
   * @return {string} The text of the consent confirmation element.
   * @private
   */
  function getConsentConfirmation(path) {
    let consentConfirmation;
    for (const element of path) {
      if (element.nodeType !== Node.DOCUMENT_FRAGMENT_NODE &&
          element.hasAttribute('consent-confirmation')) {
        return element.innerHTML.trim();
      }
    }
    assertNotReached('No consent confirmation element found.');
    return '';
  }

  /** @return {!Array<string>} Text of the consent description elements. */
  function getConsentDescription() {
    const consentDescription =
        Array.from(document.querySelectorAll('[consent-description]'))
            .filter(element => element.clientWidth * element.clientHeight > 0)
            .map(element => element.innerHTML.trim());
    assert(consentDescription);
    return consentDescription;
  }

  function onConfirm(e) {
    chrome.send(
        'confirm', [getConsentDescription(), getConsentConfirmation(e.path)]);
  }

  function onUndo(e) {
    chrome.send('undo');
  }

  function initialize() {
    cr.addWebUIListener('clear-focus', clearFocus);
    document.addEventListener('keydown', onKeyDown);
    $('confirmButton').addEventListener('click', onConfirm);
    $('undoButton').addEventListener('click', onUndo);
    // Prefer using |document.body.offsetHeight| instead of
    // |document.body.scrollHeight| as it returns the correct height of the
    // even when the page zoom in Chrome is different than 100%.
    chrome.send('initializedWithSize', [document.body.offsetHeight]);
  }

  function clearFocus() {
    document.activeElement.blur();
  }

  function onKeyDown(e) {
    // If the currently focused element isn't something that performs an action
    // on "enter" being pressed and the user hits "enter", perform the default
    // action of the dialog, which is "OK, Got It".
    if (e.key == 'Enter' &&
        !/^(A|PAPER-(BUTTON|CHECKBOX))$/.test(document.activeElement.tagName)) {
      $('confirmButton').click();
      e.preventDefault();
    }
  }

  return {initialize: initialize};
});

document.addEventListener('DOMContentLoaded', sync.confirmation.initialize);
<!doctype html>
<html dir="$i18n{textdirection}" lang="$i18n{language}">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
    <script type="module" src="sync_confirmation_app.js"></script>
    <style>
      body {
        margin: 0;
        padding: 0;
        width: 512px;
      }
      @media (prefers-color-scheme: dark) {
        body {
          background-color: var(--md-background-color);
        }
      }
    </style>
  </head>
  <body>
    <sync-confirmation-app></sync-confirmation-app>
  </body>
  <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
  <script type="module" src="sync_confirmation.js"></script>
</html>
/* Copyright 2017 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

import {addWebUIListener} from 'chrome://resources/js/cr.m.js';

import {SyncConfirmationBrowserProxyImpl} from './sync_confirmation_browser_proxy.js';

function initialize() {
  addWebUIListener('clear-focus', clearFocus);
  const syncConfirmationBrowserProxy =
      SyncConfirmationBrowserProxyImpl.getInstance();
  // Prefer using |document.body.offsetHeight| instead of
  // |document.body.scrollHeight| as it returns the correct height of the
  // even when the page zoom in Chrome is different than 100%.
  syncConfirmationBrowserProxy.initializedWithSize(
      [document.body.offsetHeight]);
  // The web dialog size has been initialized, so reset the body width to
  // auto. This makes sure that the body only takes up the viewable width,
  // e.g. when there is a scrollbar.
  document.body.style.width = 'auto';
}

function clearFocus() {
  document.activeElement.blur();
}

document.addEventListener('DOMContentLoaded', initialize);
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview A helper object used by the sync confirmation dialog to
 * interact with the browser.
 */
import {addSingletonGetter} from 'chrome://resources/js/cr.m.js';

/** @interface */
export class SyncConfirmationBrowserProxy {
  /**
   * Called when the user confirms the Sync Confirmation dialog.
   * @param {!Array<string>} description Strings that the user was presented
   *     with in the UI.
   * @param {string} confirmation Text of the element that the user
   *     clicked on.
   */
  confirm(description, confirmation) {}

  /**
   * Called when the user undoes the Sync confirmation.
   */
  undo() {}

  /**
   * Called when the user clicks on the Settings link in
   *     the Sync Confirmation dialog.
   * @param {!Array<string>} description Strings that the user was presented
   *     with in the UI.
   * @param {string} confirmation Text of the element that the user
   *     clicked on.
   */
  goToSettings(description, confirmation) {}

  /** @param {!Array<number>} height */
  initializedWithSize(height) {}

  /**
   * Called when the WebUIListener for "account-image-changed" was added.
   */
  requestAccountImage() {}
}

/** @implements {SyncConfirmationBrowserProxy} */
export class SyncConfirmationBrowserProxyImpl {
  /** @override */
  confirm(description, confirmation) {
    chrome.send('confirm', [description, confirmation]);
  }

  /** @override */
  undo() {
    chrome.send('undo');
  }

  /** @override */
  goToSettings(description, confirmation) {
    chrome.send('goToSettings', [description, confirmation]);
  }

  /** @override */
  initializedWithSize(height) {
    chrome.send('initializedWithSize', height);
  }

  /** @override */
  requestAccountImage() {
    chrome.send('accountImageRequest');
  }
}

addSingletonGetter(SyncConfirmationBrowserProxyImpl);
/* Copyright 2017 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

import 'chrome://resources/cr_elements/cr_button/cr_button.m.js';
import 'chrome://resources/polymer/v3_0/paper-styles/color.js';
import './strings.m.js';
import './signin_shared_css.js';

import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {WebUIListenerBehavior} from 'chrome://resources/js/web_ui_listener_behavior.m.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

import {SyncConfirmationBrowserProxy, SyncConfirmationBrowserProxyImpl} from './sync_confirmation_browser_proxy.js';

Polymer({
  is: 'sync-confirmation-app',

  _template: html`<!--_html_template_start_-->
<style include="signin-dialog-shared">
  :host {
    color: var(--cr-primary-text-color);
    display: block;
  }

  cr-button {
    padding-inline-end: 16px;
    padding-inline-start: 16px;
  }

  .action-container {
    bottom: 0;
    box-sizing: border-box;
    position: absolute;
    width: 100%;
  }

  cr-button:not(.action-button) {
    margin-inline-start: 8px;
  }


  /* This works together with the button-flip in signin-dialog-shared. */
  cr-button:not(.action-button) {
    margin-inline-end: 8px;
    margin-inline-start: 0;
  }


  #illustration-container {
    height: 168px;
    margin-bottom: 32px;
    position: relative;
    width: 100%;
  }

  #illustration {
    background: url(./images/sync_confirmation_illustration.svg);
    background-size: 100% 100%;
    height: 100%;
    position: absolute;
    top: 0;
    width: 100%;
  }

  @media (prefers-color-scheme: dark) {
    #illustration {
      background-image:
          url(./images/sync_confirmation_illustration_dark.svg);
    }
  }

  #illustration-container > img {
    border-radius: 50%;
    height: 68px;
    left: 0;
    margin: auto;
    position: absolute;
    right: 0;
    top: 96px;
    width: 68px;
  }

  .heading {
    font-weight: normal;
    margin-bottom: 32px;
    padding: 0 24px;
    text-align: center;
  }

  #content-container {
    /* Saves space for button row. */
    padding-bottom: 96px;
    position: relative;
    width: 100%;
  }

  .message-container {
    line-height: 20px;
    margin-bottom: 16px;
    padding: 0 24px;
  }

  .secondary {
    color: var(--cr-secondary-text-color);
  }

  @media (prefers-color-scheme: light) {
    #grey-banner {
      background: var(--paper-grey-50);
      height: 128px;
      top: 0;
      width: 100%;
    }
  }

  #footer {
    margin-bottom: 0;
    padding-top: 12px;
  }

  #settingsButton {
    left: 16px;
    position: absolute;
  }

  :host-context([dir='rtl']) #settingsButton {
    left: auto;
    right: 16px;
  }
</style>

<!--
  Use the 'consent-description' attribute to annotate all the UI elements
  that are part of the text the user reads before consenting to the Sync
  data collection . Similarly, use 'consent-confirmation' on UI elements on
  which user clicks to indicate consent.
-->

<div id="illustration-container">
  <div id="grey-banner"></div>
  <div id="illustration"></div>
  <img src="[[accountImageSrc_]]">
</div>
<div id="content-container">
  <h1 id="syncConfirmationHeading" class="heading" consent-description>
    $i18n{syncConfirmationTitle}
  </h1>
  <div class="message-container">
    <div consent-description>$i18n{syncConfirmationSyncInfoTitle}</div>
    <div class="secondary" consent-description>
      $i18n{syncConfirmationSyncInfoDesc}
    </div>
  </div>
  <div id="footer" class="message-container secondary">
    $i18n{syncConfirmationSettingsInfo}
  </div>
  <div class="action-container">
    <cr-button class="action-button" id="confirmButton"
        on-click="onConfirm_" consent-confirmation>
      $i18n{syncConfirmationConfirmLabel}
    </cr-button>
    <cr-button id="cancelButton" on-click="onUndo_">
      $i18n{syncConfirmationUndoLabel}
    </cr-button>
    <cr-button id="settingsButton" on-click="onGoToSettings_"
        consent-confirmation>
      $i18n{syncConfirmationSettingsLabel}
    </cr-button>
  </div>
</div>
<!--_html_template_end_-->`,

  behaviors: [
    WebUIListenerBehavior,
  ],

  properties: {
    /** @private */
    accountImageSrc_: {
      type: String,
      value: function() {
        return loadTimeData.getString('accountPictureUrl');
      },
    },
  },

  /** @private {?SyncConfirmationBrowserProxy} */
  syncConfirmationBrowserProxy_: null,

  /** @private {?function(Event)} */
  boundKeyDownHandler_: null,

  /** @override */
  attached: function() {
    this.syncConfirmationBrowserProxy_ =
        SyncConfirmationBrowserProxyImpl.getInstance();
    this.boundKeyDownHandler_ = this.onKeyDown_.bind(this);
    // This needs to be bound to document instead of "this" because the dialog
    // window opens initially, the focus level is only on document, so the key
    // event is not captured by "this".
    document.addEventListener('keydown', this.boundKeyDownHandler_);
    this.addWebUIListener(
        'account-image-changed', this.handleAccountImageChanged_.bind(this));
    this.syncConfirmationBrowserProxy_.requestAccountImage();
  },

  /** @override */
  detached: function() {
    document.removeEventListener('keydown', this.boundKeyDownHandler_);
  },

  /** @private */
  onConfirm_: function(e) {
    this.syncConfirmationBrowserProxy_.confirm(
        this.getConsentDescription_(), this.getConsentConfirmation_(e.path));
  },

  /** @private */
  onUndo_: function() {
    this.syncConfirmationBrowserProxy_.undo();
  },

  /** @private */
  onGoToSettings_: function(e) {
    this.syncConfirmationBrowserProxy_.goToSettings(
        this.getConsentDescription_(), this.getConsentConfirmation_(e.path));
  },

  /** @private */
  onKeyDown_: function(e) {
    if (e.key == 'Enter' && !/^(A|CR-BUTTON)$/.test(e.path[0].tagName)) {
      this.onConfirm_(e);
      e.preventDefault();
    }
  },

  /**
   * @param {!Array<!HTMLElement>} path Path of the click event. Must contain
   *     a consent confirmation element.
   * @return {string} The text of the consent confirmation element.
   * @private
   */
  getConsentConfirmation_: function(path) {
    for (const element of path) {
      if (element.nodeType !== Node.DOCUMENT_FRAGMENT_NODE &&
          element.hasAttribute('consent-confirmation')) {
        return element.innerHTML.trim();
      }
    }
    assertNotReached('No consent confirmation element found.');
    return '';
  },

  /** @return {!Array<string>} Text of the consent description elements. */
  getConsentDescription_: function() {
    const consentDescription =
        Array.from(this.shadowRoot.querySelectorAll('[consent-description]'))
            .filter(element => element.clientWidth * element.clientHeight > 0)
            .map(element => element.innerHTML.trim());
    assert(consentDescription);
    return consentDescription;
  },

  /**
   * Called when the account image changes.
   * @param {string} imageSrc
   * @private
   */
  handleAccountImageChanged_: function(imageSrc) {
    this.accountImageSrc_ = imageSrc;
  },

});
��Y�n�H���{3�(���j�4��"�j;`��N��t4��s�%)�6�$�.��_�O���כ�Oï���+�ux���n�3���a��ts5>?�����ϟ?�����ǵ�W\���������7�I�����_��>~xz�5�}�ӓu���6M��v��L�e�޵�/:���/_�!���Z/�p��9<��0
O�I��7W�}ʦ�!:��$���ֹ0V�;�7��xu�\��t%��o]�u}W��]��u!���`}�i�x߹�!.��W~r���v���~�Ź
�l��4��ֈ��^u�[׃(C�o�~������x�pP��'r��߅�b�Egr�nO{��.d�P��M��`c�����8i��)�s�عl|���	 ���(l��ӌ�0�4d� x��J1{ E_����,5J~d��+�%�F��i�6t-
.t�T�7��gKZ��)�˜�q��*Ob�=/�4O�B��k`��B�l��5�M.�0�*!�O�M��ϑg�6�:�
�
Y��Qd�R��uɍ�C��D��B�^��u5����X�����q���C�j3�P�2��ܾ/���.`��b�l�B�[� )Y�	!�CV�6H�t}��%�=x����gx#��r�R��PDO��!j\��r�E_F���V�p%(G�H�9�g�!
���N�];W�T�2*x��@�* xG�l~���A
<!L���u�kq�9��6���w�D��^`�4&ҘVNp>®a�kQ��&ah�� �~�\@RF�B*<��-B�P�*]��~E��Pv�ɮ+y����@Yz�7o��R�`�C}!y�
����X����Q���mߏ6:�e�:��� ��=���P"T$p[t�z���(\�%�
,�6e��o�X�&[	ykQx;|{<Lw/�; ��;~�\E�Ǜ+J��<?ߟ�<>�\=�x��akc��0hG�����TiX.��]���J��p�����F<¹5'7[.!�����<���B�
��h�2=5����ٝ�
	V�hs=?eJ�u�B����8-q�|��3��fo��Vf��r����
ͻ��a�T�)�G�{K�IE����v��Q�W��F����Lkh`r��s
��n���̷�pc�3�x�#�&��饹}�!�vc��\�Y�UF_��2���3��N�0�ߘ@i�\4��m,~�"�`«��h���(�
�S��W_P%g�X0���ID"}E��y�<���*9Ix�,Q�!���z���`z��@���Cx:�̂�v�qI�ZIuSa�(�2��9��0�L�1�%� ��T���BY�ŽJ|���#�[����V�"�[A:��+�(T�s���xS[�
"�2�d�Hf%���u)�3S�iLQ�S/��L]�����Z����a�R�q�6"�Ɔz�	Ւ<F[�:uM��=��3�4,E�Z42��osݗ66X�ϻʈZ�L_�LJ���{
c֏���-�*�X-�ag�#h�:���z�8; ��;O�Xr2aus�O�hX�5j*�=�Eb��d+�Gq���ܺ�i5~&��kR{!=3����{|��A8�3@g� ����2~�ouĀ{Xw���T��G	��G�a	f�'�$�D�Z�p���0��b^��^kTȘ~1As��3��4U�Ϟ5+�0;f�I%�
������9	낳���i�|�&
z�FJ6
ڌ�@�
��I=��E�	y#/xc��}l�v��h��E~fJ�ON
�v`�)��9�����C�yH����1�Hm�8�$�q�#lf���(I�s��C!6 f�O8�{���1�h��݋U�������e*�]��LG�vb�I�$\�hT
�+I:y7�;�aD^�<�6Yh^Ff�+A��Ѣ�̈́��t.2���p�@��KY�����ċW%�$:�r#�V�]��P�`�ӥ�M��N���u��p�=����p	�]��h�T&�%&�uv���dZp�L�x�^�Y.{O�
֋8N���#�~�Y:�N4B'�$=ܚ���+������4o���M�q�4��?�4G�({�Ro����0I�b��=.
�ݢ`�r�zZ^��u�=��X�"|�-���@O�H�$![gf��Q����H�}��7Au��}���sz�o#"w}�D���/}UM�����;Kg[)]��~��*����I��c�<���^rb�a��3��s�(����'��؅��P�m�5qKQ۠��8la�,�� cP#��֯[~)A�Ϣ�C"�t��ˉ�
���u*el�P<\ 0�[���6�[�����	�bh=�o+N=�.�n�
D`e�[�ƚw:���˜8�݁=��Y2WXp��{�u!R��&dyMp�YqRӹ�`JT�,���'�a�1���hT�t
�xٞ-�AU��_j�r�H�*�8r� 0���N<[���S�8rW���~ьCruqb%"w���dx���!�$�˖6�W ����&y�gt�es���&�A�c�f\�s�92˫�"T]!���\��b�L\�D�~�K&��뻑��$x�_#aD��"��NJ�=0��cJ�%r�*_D+(��X�h^I\��(gD;L�}|�����d���5�@a�z͞r�)ض�¯�#��yq�'��ˈH�EIU�R�fќ�5����	j#�=��3i���om}�@����1�.G[��T7�;�Ѣ���0�u�����5@����՚Y��L����?P^���RJVQke�V�l�ٓ�L,t�"J�!�{���p���Y���Tٮ����ke�r�g8�[}5
��۳C/�K��cG�_���Km��"�1ȏ>�����]��^5��jE�xC����$o���ӛ���z$ʋmb7)
�f]��v�q
ք-sȸOZa�͠�h��ˬ����k��\:�ۘ�,�1��uDc���Ų��R�yR!�8dvly�Y_:n���|5A��W��h�}b�-w��L�Bq�.�~��^�|��x|�
������|��w^M"=�ϸh�2�M�f=�����ח`�5��ma�s�(\*����O�P:��(\�a+o"��2[��"�D�
�W1e雇��N2ԧ��`��������iρ��Y�n����Bg�,��[�
Ftf2�b�՞h+���=�(�>��"�ݒ[A�Y��~�}�h�~��4�����?}��nv����p����nzz����}��u��/��y��;l���G�O������;}���<������_>|���ƧiY�'��3nv�q����;��-+9�S6�����`烍�H��QLh�����]#V��r��HX+�N�
q�{��� �t���
q+Cɦ�[q�ସ����C4u��4�,�������>�*X@ܐ��!X��W��� 7��<�F�{���3�u���K�&�Փq��!
��!d#&�G��ctCȦC�WT�u���,|�����dqR<`ưp�l|�(g���OY ����a* i�\�@�X?�b"�@��v�gă�:�:��EF��1��H��\:F��F	�ӡ2��hGKZ`�#R�9���*Ob�</�<N�@I�s`��B�h��s`�\ȃ)��2��T?��VN�#�pm�:�
����J6%��L�O���M3��`����Bk~L�~j"Ks�.�g�:�oq�+s��.���W�Upz�Cm�(
�[��G�N,�m�}l�:x'��?o�'�w���7
:ogɥ_r��v�(8�::����\��^�8xȦ?��6�i���T%lֆ�6�X2�@��p�S�I_&���V�a�vxg$�N��3�����D��Iu�BI�#�T�/{�I���ւF��H�!�;�I`ȹ�A�b�xX��PG���t�¹2�ƛ�1�B��.�H+�84��@S/,���2P��R����<��L���">0���:+��^�xR=�y��j�ꟐX\�������{c��?��M�!�#,Q������)h^�=�L���;7�|�J����"L<B�G���pk�i��j1.����v�4:�F��M�43���2|��x8��Z��8~��_nv�_�Ƨ�?�ژ. �������_v����n�˿nv}fgov�˳Z�҆%��}�ǚ;G�����J�ž�I2[N!뇲	�9+P>GZ��1�c�L��d�0�Q��B�8'��̐�$<���X�m4�*$��R4��fފ܆1)���AS�Q� H�U�����ٜd��g�9f �&B��n���>�����[����B�#�r��Vk�-D��{\�uɭ��]&}����zGw��澰v�N�Y�PS�3̆��[�h� �1�2|4�p	��U�%�P��)�?����7f\�W�'�:y���X�6���?�VDL�S�Q�<�����a���e͝��i���$�V���se��`�_�0�Էg��,�L2�V�?y�?���Q��Z{Ŭ�h�����,@Y�2��e3��Ӭ����>�H(k胖�T|*�	��H��*R�H���"Q���:�R�p(�Ȩ�,5"�4H[H$�1����Sk�{�q�1я�c�µʅ������B>9��:��N��&���PI�,�$��-���-���!����Z�3���oጥM
~��2�Եȁ��C�0��L�Fj�'��֏�EJ�C���[g?�%���#B��5�;�`�1A>�=��`)PLT��x�A���9��{�Zc�C!A���c&V�	<�L�R�%��Ϥ~z�x��#F�,U^!~!s��`�Vk�c��L�"��\�?nE-��Z��5�D�q����5��k�TH�`&{k��Ђ�(y�d�<G��������w�?��*v�2&a��������%3a��Eτ���/Ct^;6�=��,>�����Z}{J�A�f_��wd��n��Nh�t���и5�xm���d\F�Y��b��X7v��r����G�j��5D�.���+�\��s�+���HDÃ!!��rI�'�hӑe
�0�c!�븅��qY��,��Q��Z4fM�{�l�Vlw��E/e����Bo���8�⣲JNP3��'?�Q�PHF��{������Y���X��b]�2�RV��Ҕץ�=(�u�O��:eE�)�ꇄ�+����ٯ��BD�’��i�-*���_8�G�(��k�k�804����lj�p��!F�aą�o����]�
��BEA} n�>Y�\\=B�ld�6�k
e�P)��Q��Vk�#,-�CL�kh�%pvz��	1���z�U���5PSkS�ʝ�,r�V��Qt�<���� ��$��[/�"��-*���B�J�ĤKg&�	�Q����H��rZ:����Vt>�U�%=�ۄ�P_N���CpŠ��a��Y��:t�����iC5}Y��^�x�X�-�6�)��rblup�z�mʼnRG�-[��ܢ������GT�۬FzW���g�����<jI�&5b*nW5�/%�Fuv��h��7�pⶊ��t1e�
Y�\!0zi
+<��ڨ7?
\S�ں��FξK�/�N�rT`e�p0��@ՙ�M\���� ��K�
B��6)��&d��Wp>�+⬦KQ�Z:Q�����MV�����2lIl�Z�p���U�z��:fM�5p�͢}P���aFx�8����kD�)
dڱ/ɵ����G�=a���cp,Ǖ	-m!]��U���5�y�%�E}��v-��ib װ_�;^_"�<ڷհC^�<p'�a3�!�1u�>9�+X��f2�Ë�Fˆ��g�E��\4�J��6�$J��V��fY��C'ᐯ,��މ�GuÜ��3fE�*f�q%Y���^L�K��c
�m͎��őV�<;��
��t�T$�E���D͢��W�޾�'��$��/��J�U�����֢�����ؙ����<���T��U6�V{�~��)��'�JC(ߑ7�Z3+�����7t�(�Ȼa-R����v"B����$=�#�$WT0��zp��dbi��#c��왊�j��jeZ�
�Q*�0TM�Kv,��e�H��h� If~���v��<��Fȏ(
���-�7�>�#����E�-�2�g����(Y��t�^���_&�"K��Q���]�X{�f%k��`M�:����ym�{�͹���/�HK�Y3����mL���f}��lQW��X�}���$M�v�l*���x�x�GR�x3���]�k�I~
e��%Wg�K��;����+
��r@�Uy�2~�������6`�4U 
������S��L�<��2fr��GG��^0yY�@��:!.4~"G^E�C���3�����L�P�ڮ���.�߫�����QM^��X��/ �:0�4rʄ�o��:�d�f��`5��� �������G�~�?��o;�C�!<!doctype html>
<html dir="$i18n{textdirection}" lang="$i18n{language}">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
    <style>
      body {
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <signin-email-confirmation-app></signin-email-confirmation-app>
    <script type="module" src="signin_email_confirmation_app.js"></script>
  </body>
</html>
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/cr_button/cr_button.m.js';
import 'chrome://resources/cr_elements/cr_radio_button/cr_radio_button.m.js';
import 'chrome://resources/cr_elements/cr_radio_group/cr_radio_group.m.js';
import './signin_shared_css.js';
import './strings.m.js';

import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {getDeepActiveElement} from 'chrome://resources/js/util.m.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

Polymer({
  is: 'signin-email-confirmation-app',

  _template: html`<!--_html_template_start_-->
    <style include="signin-dialog-shared">
      .container {
        /* The sign-in confirmation dialog uses a width that is larger than
         * the other sign-in dialogs to fit cases when the user has an email
         * name that is very large. */
        width: 512px;
      }

      .details {
        line-height: 20px;
        margin-inline-start: -8px;
        padding: 8px 24px 0;
      }

      .radio-button-title-container {
        font-weight: 500;
        line-height: 20px;
      }

      .radio-button-subtitle-container {
        line-height: 20px;
      }

      .top-title-bar {
        color: #333;
        height: auto;

        /* The signin email confirmation dialog needs to support cases when the
         * title extends multiple lines. In that case, the height of the title
         * bar is equal to padding + height of the text (which is equal to
         * 2*16px + nb_lines * 22px). */
        line-height: 22px;
        padding: 16px 24px;
      }

      #closeButton {
        margin-inline-start: 8px;
      }


      #closeButton {
        margin-inline-end: 8px;
        margin-inline-start: 0;
      }

    </style>
    <div class="container">
      <div class="top-title-bar" id='dialogTitle'>
      </div>
      <div class="details">
        <cr-radio-group selected="createNewUser">
          <cr-radio-button id="createNewUserRadioButton"
              name="createNewUser">
            <div class="radio-button-title-container">
              $i18n{signinEmailConfirmationCreateProfileButtonTitle}
            </div>
            <div class="radio-button-subtitle-container"
                id="createNewUserRadioButtonSubtitle">
            </div>
          </cr-radio-button>
          <cr-radio-button id="startSyncRadioButton" name="startSync">
            <div class="radio-button-title-container">
              $i18n{signinEmailConfirmationStartSyncButtonTitle}
            </div>
            <div class="radio-button-subtitle-container"
                id="startSyncRadioButtonSubtitle">
            </div>
          </cr-radio-button>
        </cr-radio-group>
      </div>
      <div class="action-container">
        <cr-button class="action-button" id="confirmButton"
            on-click="onConfirm_">
          $i18n{signinEmailConfirmationConfirmLabel}
        </cr-button>
        <cr-button id="closeButton" on-click="onCancel_">
          $i18n{signinEmailConfirmationCloseLabel}
        </cr-button>
      </div>
    </div>
<!--_html_template_end_-->`,

  /** @override */
  ready: function() {
    const args = /** @type {{lastEmail: string, newEmail: string}} */
        (JSON.parse(chrome.getVariableValue('dialogArguments')));
    const {lastEmail, newEmail} = args;
    this.$.dialogTitle.textContent =
        loadTimeData.getStringF('signinEmailConfirmationTitle', lastEmail);
    this.$.createNewUserRadioButtonSubtitle.textContent =
        loadTimeData.getStringF(
            'signinEmailConfirmationCreateProfileButtonSubtitle', newEmail);
    this.$.startSyncRadioButtonSubtitle.textContent = loadTimeData.getStringF(
        'signinEmailConfirmationStartSyncButtonSubtitle', newEmail);

    document.addEventListener('keydown', this.onKeyDown_.bind(this));
  },

  onKeyDown_: function(e) {
    // If the currently focused element isn't something that performs an action
    // on "enter" being pressed and the user hits "enter", perform the default
    // action of the dialog, which is "OK".
    if (e.key == 'Enter' &&
        !/^(A|CR-BUTTON)$/.test(getDeepActiveElement().tagName)) {
      this.$.confirmButton.click();
      e.preventDefault();
    }
  },

  /** @private */
  onConfirm_: function() {
    const action = this.$$('cr-radio-group').selected;
    chrome.send('dialogClose', [JSON.stringify({'action': action})]);
  },

  /** @private */
  onCancel_: function() {
    chrome.send('dialogClose', [JSON.stringify({'action': 'cancel'})]);
  },
});
<!doctype html>
<html dir="$i18n{textdirection}" lang="$i18n{language}">
  <head>
    <meta charset="utf-8">
    <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
    <link rel="import" href="chrome://resources/html/polymer.html">
    <link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">
    <link rel="import" href="signin_shared_old_css.html">
    <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
    <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
    <link rel="import" href="chrome://resources/html/cr.html">
    <link rel="import" href="chrome://resources/html/load_time_data.html">
    <link rel="import" href="chrome://resources/html/util.html">
    <custom-style>
      <style include="signin-dialog-shared">
        @media (prefers-color-scheme: dark) {
          html {
            background: var(--md-background-color);
          }
        }

        .details {
          line-height: 20px;
          margin-bottom: 8px;
          margin-top: 16px;
          padding: 0 24px;
        }

        .details p {
          margin-bottom: 0;
        }

        #closeButton {
          margin-inline-start: 8px;
        }

        #normal-error-message p:empty,
        #normal-error-message a:empty {
          display: none;
        }

        #profile-blocking-error-message {
          margin-top: 30px;
        }

        #profile-blocking-error-message p {
          background-position: 0 3px;
          background-repeat: no-repeat;
          background-size: 20px;
          line-height: 18px;
          padding-inline-start: 35px;
        }

        html[dir=rtl] #profile-blocking-error-message p {
          background-position: right 3px;
        }

        #profile-blocking-error-message p:empty {
          display: none;
        }

        #profile-blocking-error-message p:nth-child(1) {
          background-image:
            url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yNCAxNFY2SDR2MzZoNDBWMTRIMjR6TTEyIDM4SDh2LTRoNHY0em0wLThIOHYtNGg0djR6bTAtOEg4di00aDR2NHptMC04SDh2LTRoNHY0em04IDI0aC00di00aDR2NHptMC04aC00di00aDR2NHptMC04aC00di00aDR2NHptMC04aC00di00aDR2NHptMjAgMjRIMjR2LTRoNHYtNGgtNHYtNGg0di00aC00di00aDE2djIwem0tNC0xNmgtNHY0aDR2LTR6bTAgOGgtNHY0aDR2LTR6Ii8+PC9zdmc+);
        }

        #profile-blocking-error-message p:nth-child(2) {
          background-image:
            url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSIjNUY2MzY4Ij48cGF0aCBkPSJNMCAwaDQ4djQ4SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTI0IDRDMTIuOTUgNCA0IDEyLjk1IDQgMjRzOC45NSAyMCAyMCAyMCAyMC04Ljk1IDIwLTIwUzM1LjA1IDQgMjQgNHptMiAzMGgtNFYyMmg0djEyem0wLTE2aC00di00aDR2NHoiLz48L3N2Zz4=);
        }


        #closeButton {
          margin-inline-end: 8px;
          margin-inline-start: 0;
        }

      </style>
    </custom-style>
  </head>
  <body>
    <div class="container">
      <div class="top-title-bar">$i18n{signinErrorTitle}</div>
      <div id="normal-error-message" class="details">
        <p>$i18nRaw{signinErrorMessage}</p>
        <a id="learnMoreLink" href="#">$i18nRaw{signinErrorLearnMore}</a>
      </div>
      <div id="profile-blocking-error-message" class="details">
        <p>$i18n{profileBlockedMessage}</p>
        <p>$i18n{profileBlockedAddPersonSuggestion}</p>
        <p>$i18n{profileBlockedRemoveProfileSuggestion}</p>
      </div>
      <div class="action-container">
        <cr-button class="action-button" id="switchButton">
          $i18n{signinErrorSwitchLabel}
        </cr-button>
        <cr-button id="closeButton">
          $i18n{signinErrorCloseLabel}
        </cr-button>
        <cr-button id="confirmButton" hidden>
          $i18n{signinErrorOkLabel}
        </cr-button>
      </div>
    </div>
  </body>
  <script src="signin_error.js"></script>
  <script src="chrome://signin-error/strings.js"></script>
</html>
/* Copyright 2016 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

cr.define('signin.error', function() {
  'use strict';

  function initialize() {
    document.addEventListener('keydown', onKeyDown);
    $('confirmButton').addEventListener('click', onConfirm);
    $('closeButton').addEventListener('click', onConfirm);
    $('switchButton').addEventListener('click', onSwitchToExistingProfile);
    $('learnMoreLink').addEventListener('click', onLearnMore);
    if (loadTimeData.getBoolean('isSystemProfile')) {
      $('learnMoreLink').hidden = true;
    }

    // Prefer using |document.body.offsetHeight| instead of
    // |document.body.scrollHeight| as it returns the correct height of the
    // even when the page zoom in Chrome is different than 100%.
    chrome.send('initializedWithSize', [document.body.offsetHeight]);
  }

  function onKeyDown(e) {
    // If the currently focused element isn't something that performs an action
    // on "enter" being pressed and the user hits "enter", perform the default
    // action of the dialog, which is "OK".
    if (e.key == 'Enter' &&
        !/^(A|CR-BUTTON)$/.test(document.activeElement.tagName)) {
      $('confirmButton').click();
      e.preventDefault();
    }
  }

  function onConfirm(e) {
    chrome.send('confirm');
  }

  function onSwitchToExistingProfile(e) {
    chrome.send('switchToExistingProfile');
  }

  function onLearnMore(e) {
    chrome.send('learnMore');
  }

  function clearFocus() {
    document.activeElement.blur();
  }

  function removeSwitchButton() {
    $('switchButton').hidden = true;
    $('closeButton').hidden = true;
    $('confirmButton').hidden = false;
  }

  return {
    initialize: initialize,
    clearFocus: clearFocus,
    removeSwitchButton: removeSwitchButton
  };
});

document.addEventListener('DOMContentLoaded', signin.error.initialize);
��V]k�0}��������MV��2h��PX�Aڽ�d�&VQ$�����'�m�͖�
�|����%�1hTsFQ�)�:�m��g�A�b��1
;CE�b,s_騈rf0z�4k$LQ�DL!Y@�2N�H����cL�(_�!� �L�	�8����M3ݣN�2�A���\X�I�#���$
=mL#?�^#�	�����*�@e���T�Q������P�Gp+Dᆙ��D@�i"�H�	���`x;„q��кtm�&<��//b�8x�#��Kendj96�R�R��鳋�Z��:
,ayp�a�Ə�[�Z�%�k�A3���eѿb�
�H�s�,���Dpn,wN�0��\5au���
��k�_�Op[�Q��F�7i��v�n���u礬O��&�b���c�Cʈ��"��:
�p�~�T��8})�:6!\�Vש�rN�A[q��>�5��d�]�i�[�����A�f[�N=��6��3�D끻�6���#����)N�i3�	}]���ȣ7	�Ԯ�;ZFR�_*t\���T�B~kg��ޡ��M��'�pH��sR�
_<�u�M���ϵ���Q�{dթ^f<�U��v5)�N�iUJ�EcW-�Ws�d��Ϛ����#�
��Y�n�8}�WL�v�Tn��h7E�4�hڠI�� ���V"�$����;�����v����H�\xf8gH���Q��u?A{���0�q?��d�/�p�1�ƨq�Q��}x�r��7
\+��1
T�`�)�!�!	c=ߤ���$�4�	7�N��2�*>�����p=A8�(��"���L����)�AZ�1���� G`&䇖��b��uk,oP	���W�j3Mhr(H�L���	��4��H�z��������x�Q�[�pm�M�U�ӱӋ�0�����R��)��DR����W����gy��ᾭ�3b1^��]���3��i*3'�ѿ�N�T�E߹��S�9pq�4���G�&g�ep�䂔�g"Iqw���4�"���'\��\��w��b]�A�+�2��^5�f�֘�y	��E�3f��J �y�@�f�
��[w�����@�� ���_o��ߟl�׳`�}�����������*y��:jH7��/ Vf��.��X���n���a���7f��O�.řRR��ش��j�-)�F���h�f��ށ_��S�^��s1�0�`:<�Iᇜ$	&e���U�pPS,.Pk�N�e��Y#��OM��K뽾�1��k=�H�鯅�.�ᮯ�͓����v�����P�O��7J2���xB��V����2?
M��.w��rӁj=DpQ��!օ��ܲ:�9�
ⰴn��j�i�\ř�|x�K9G;e�i�Ц�-(�{�S�B�A`���k��9�vz���uq�;�Mrػ�#�hz�(������Rt]���H�kz�͉zĂi33jU��v�>c]A���G�d-���ߏ���Eэb�i
[Q��B	���ӈ�*H�0CH�[�_M�#˰W�� ����H+˟�4�I�k�='�f��
�%@]sm0-u����_�]�o �L1a7h��VV��
<�*�h���U����b�k>��?�Y�R�w�K3]�3�A��úvm��2�a��z��|�'Z�z���i�R]�AR��*w8�B��_v��VIe��v64����MG�N�G���9���R�,����'\�d�h���;����7 ������&.O�sf�M�	f��K�!���>	�K�
�2P[�R��.Z����)
݈��p$1��
X]�z{����*b6�wr�M{����-�6��ٲ1:
s�U�Ub�
M��}�V�Fb���(�5�nGv`U�3�yZ�Ŗ��fz�����/�d-B�
���"\r垂B����:��8��hj%b���Uc�M�28~*n�|3�l�i����e��w��˓w��J����χ@F�\�4�2E&fp�
>9��	9�G�ԕ,�L��zK�*����_K�=�̵��L�/;�v4�p��r.L�ʮ�9ζ9�_Y7�����>K�Xȑ�8ك�����û��t~��_Z�\o�W�.�pw��y�o�9�2���&u���hݣ&���S�ȿן����l�~�8�ֿ=���u������8��+��Z[o�6~��8	�)R��P�K����M$)�0�,�leQ#�\����k,[v����ے�s��!�G��.H��C�Q�v�d0�;�_����A�����<
X��W	L���F�pc�ap�I�B��#ٷϸp��=�9�<�Y�ju���э`�q�Ϟ���1Bo,��%8L�1ҁ� �H�@e*���Y"�!�c�C�Dx�Q�5�(Bc�o��=��M�@^aH����0@%iȓ��}�ǽ���G0d:�vB�e,��_�Z-��˜Ļ����	��;m�����Z�O�ɓ<�7l8���-������I�$:���;C�2��6��mU9���>1a�t��W���o"W���:�����p
c��d��ˉGa���s�]�G���:��u`���'���U�̗2,0ױ�&�.F�'<�Z�s�����_@����U�G�]R�"��n�z�J�mk�0��Z��#��o�<�O�W����?�2��P�8�A)͘�K�Q��X�P*���5��C^�s=��Ō�GBpqtI)�jU=<��$�s���zI�]3�諕� Oz�4�J=aJ��Q/�X`��nO��K�y�E�f�$��K�:½��q8��4���'��0���`���?'��4�-���\����"���<��F�h��S�<��svD�ʈf�-���#�?_��Q���"�-A�d���Jih�OCbU/��MQ�3S�R�
ݛ���f�m)��(���Շ�
�V�u$��(
��}��"z�/�,�_Y�z^�Z��+
�E!�_:&5
� �����Wh�YӤ�PΟ�A�KSh�P���L+�~Y�u7�]��7���aS�ec�$b,4'����h�!�r�$�u�9y"��x8�}§��������n�-Gt�)��ƵR�P��A��@����1��V가ژ1��°��~���4��eH�Yn����h�CP����LD���oG�I�0K��i��mgSsԂ�=�,
�ƕy�rNb���^��{[���������}�Iw�h�d*��է�ꤼ��iVPdL|�SDv2�?��Th�\��}�t��~\��I���L�Ֆ_ELd^�c�K�@�+��1�.�;0Qu}�^�*买�,�`S�4�觚���%#�
6���=7g���(R�&�A�ƒ*�
*��IcxzӬ�H|k\�
]�A���{��Hw�T�i`��{�ɤGC���r�t��1J�-�#^��iV>��KKXg���
�&�u����ajQ�v�n��Qg��d���X��'�J��&�bv�*�הoRI�f�����K�Ys(\C�6��oŀ=m��de���M���&�LJ�$Q�@�}�II��Ik�zcf��$R���U�Z)�O��O���LC���|�2����ylm���NiJ)�R��?΍��x�I�c�k�HY@�	�e���X`EkM���njBlܪ����vS#���P���h�c�#7}*^�B�����Y���(N���-���:=�	ƅ沊8��`�SY�8�
�p��6j��|2�
�Ky(\�Ҟ_P4VQw}>b��<Muv�?�]��+�n�Y��5]�[��yY	�Z�L.n"�.wz�i�#�v^�t�Iםdɭ �й��BqI���[~6֏�5�1X�1~?�(���:�+_S�t��^E@��}a~�wl�,��a��ŵm����+��߲�C)��������7���[���u�8���;�Ǜl�/���Ġ�g��#h���M��NEt�EX��F�����X�s�X.>���F�ֺa[&Ik��L�f������_��Ri��~'�>�,)E!�^4���S���;��
�ى^Zƞ�/�ü�ըl�u�/G����_�)0��Zmo�6��_q)�)29i�.m�bi�n�.HR��0�t��ɢFJI���}GRԛ��J�-��%�LJ���RA���>�a��s��ù�,��T�Gs�)�Q�*����B���YW��D�#�,��W`���<
x4U�왐^|�
��H$�Oz��E|%�t�����}8�!Τ��ti2Ryp�`)���b��Ο��@2#J��G�E��T\��, o��}������uKf,�E0Fmi"�(�}�_��<{����\%��I�U�����x��yz�%29A�o)�$��tk�7|����G>�C�cD���1_&�dz4��4�������0��h�u�+�}R�w���\U3�����{�~��ds��8&?�(q3��QѴS�\7���Lg���I����#^f�uf�=Y���|��R7N������8ŹH���b� �d�FD�D��ԓ�%��4 Rn�n���z����եo�%�c)�\�k���"���Xy����K}Kl�ߗ�r��o��1ʻ�l���v<e0��y�>�CE�'\D�����H�U5�DTkI����)&�[6�_/wC�����h
��[���Y�1��Q�6
��|�����2����S�_�A�R���z	c!BdQ?s�O&^:���,���`A`}�AS;�z"�Z��W��9�Y"UQ�[ EV��y����t�y��@,#�h��Y������NQŴRa���KiY&���A��?V��iʃf���')�.�̓�DG��>��}����~>Oa��=-�V����'�E���@JvU[&5��(��7�iEkI�L
::��ӝ�;�v^�u!�ʐ��ffU��Z�d�� 1�L�)\θ?�ɛ�E�_)
�(E�Q��H[2p!_�=8N��iAJU+V`�1K�HKVm�0CW�ea����Ff@�\Q-�%��*o!�,ޟ1�J{�uX���*���I���wԹ�7������2��܅*=hd��~Zy�$N��+��Z�V�^�����Y\:s����P�\ۿ���).��j!]��?�QXby�=C�&v+6-E�	�L+.�ڡ�
6��$�Z �n�Q���qOM_̨N�B�lsU�Ԭ�jQ���S��R\�T������u9����0�t�v:�rM�ލlM=(ց�
���YjM?�Z�O��-�:�+�E��s��� U��N3_��O� &,T��)$�Iw̢�Ɋ@l���(��T㠼;��ف�Mc�#^�����U��Vv$�j�i��$���u�Y�fl�|���}KG!W1K���΁)"c�<�5��
,�P�)mQX��j�c��6��4;
��6tm+7��R�����$��l�>B��>�lR@��V��0��]�*KYq�`����֫h�|i�"�U��U����NA�T��i}�Aee)�Q��?���(�|�����)�*%.��i}";�r��a%�t���,SjD���+d?�ب���k�#j��[\��7NMGkV-�Z%�ˤ�{UK.��oZ,�:�K&�����^�,�\S�'��x@ ���9������n6�Y�ۧn�A��{��r㦗�F��5\o���Ik���U����ޮX��2�6_�@H��R��$�[P�w���w�/���nѯ�Zk�:��k��?:3{V[�oX�\
�W��ݽ'�ӽ�j��0(C_�`�o�NQ�K_����V��aX\�# ]��m66�����D��&$��>��kpB���߇TzO��<mD��Ѕ��ke@�W[1N�a����7�tG����k���C��
�{���MG��6�xs�t���M+��[R�5������:�Q)j��P'];4B-gMI���#5{e4@
��J� 82�N�6�9��Pƫ���
]�Ed�/� ����Q���b?nk0��Ymo�H��_��*%�8i�wU�TŘ(�X�s�N'�M�Y�@���������l����Ͳ;�3�����E��������]7�ؖ�]��d�
��8碁W��c,�O�;�>���ES�˙Z��'��������w:�.����l�חW�>�H�S����N��!޶Q4�C�L��<�����#512���f�S'&d����K#p
;�̟>2
Mph��Y�c4�Q�D�`٘�0��e��:�N�g9>�7l�t	���4���i^���p6�u_�젗�I�GO���{tR�r.З.^�U476_���Mn�M;�hL��P��&��`�hTt���9Z}�(`BO��Ӧ@!H!��|y�./�/�����,�}66PE��m�E9����=?��ʮ__t~��.��CO��?B9�U
b���]l��
X���:6'X
�"˘@�)�S��0�[��E��%�T�f��SF2�+e��/w���>9���K�J�Mk�~I��C'�q|Jl�:^|K��k:/�y��T�|�徢&����X#�o��}	G�Q�+�e#�J��|��Rf0V�&z̴-h���	�g�|��ka���O�=���H2Y�uQ���kc�� �����>�&H�r1�6�Af3��:+6�����M&p�V�D�m�#�~�&��C�� (��*�+4E�UY�ӡ7|�ou4ԏ�/��1�uPOʹ��#(`�lC�hU`y^���B��'���c��c�c���q��,�iY�YN��7y-��>?ԥ{6csB�y]•)��e��N�$�V�}Ү?Q�&v�n[�K��>�vy�w����$moD���V�ůÁ$H�xm|(��җ��RVt�Fx]R���o���\H~�M��`Ε��>����Ps'`:�0P��X���'�N��ax;�b��:nS���x�o�b�|cv7�z��t���Q�A�>��ҝ��XC&� �x��]�%
Y����
�c�VQ���EԳ�p'iH\��qGxwH�+����%Ɗ���6���x�j�5�-@��P<a�j�p5dN鵀�%v50c�l�}�!s�ڐ8�O���-�n�Z�&E:W���k�<^�bI��<&ր,�Mn��7\�@���55�m6m#�jV��kP
�Ix,��Ԇsa}�F�N�>�g�y��-�^ܭ����E�غN�~�;��>�
�DQT�Ą���m~�xA|��݌�
�os9��s;���z4��"x)�W���ǓZ��J�r����\���9�oԜ�Y��ZT.rr�@,7taYќ��p]LP�D}?E�L�s����įV�wh�#�J�U��Y�	�3hn�������I����b?�z�/�!ɞҘ��t�o�.bChK|;a��s�6@�c�APBg�%�e�.����a�!�֒{Qo��=v(._�g��z��4mۢ��W����l3G�%�z�;t��h�
;�����	nB�L���&���5h��$�h(��JE�5�fzn��+-�$k(uZ�h�%��8�i�b�a5�M�ṭ6M���—���p��-��J!�5�fa�X��bs�aGg��a��p̷W�R��5�-�cJ�3jշu*�Vn�k�vK{G;���Q��V��5=����l��.i�@\��v<`��B���~C
�Q����[V?#�Փ��v	�G�����3��[o��C3^�觀�ֻ�[AN;�7`:O�����}*�w�1)m�bϘ��v��n��c�N�ajl,��"Ew7]ι�\YT�L�����/���[�N�0����S��$NP	P����hJ����^�ı�r�us��uv֓I�c���68[T�4�\�.�̅DOa�	�(�8�������F��t�e�0����=�;;�8ڸ��!�Q�ɟ�DŢ�!*x���2��.s�� �)xr.�qX�[��y�
2]�ҩ����G�E^�6�ԭx���U���"4�IdY�%���#>E
����\�N��R/J�R���E+�g�S�^43�m%�[V��yٰ�MUnd�R��[.���'�k���uU8��;{le̚��a�([Y72�Iu�OM�O#�ƹ�>vH�ˠ�	�\|/ӯT?
�#,J��=��)9�>CN�g7�����͖ю��,�a�I";�L =�i�o���wz+\�[%�v����p����
u4W���h�l<A2��-@f�wd��H�ҙdx�94��� ��aq �7�\��\�n]�@2�ɻ��c�
&�ɮ���Ad��O1�2��rϮ�H��'h�]+j�EͶw���t��>��b�w��S�Q�������_���]mO�0�+^��nB��6�H�@ߧ�8�Eڠ�L��}w~K��%k)=���ؗ�9;�s�s�s��Ho������}P����&"��rG�FNQs��P7H���*3Y�B62�QP�������q[W����M�6G	c���Y4�YA酫������j��f�J2�%�O��pX^MW�����ڒ.��>���bKWl}�x%�g�lnu��)դ�J�rK৶y����w�ۘ��<������mQ�ѽM�T�õ���5�����3)��FF����9�>����=�I�ߋ� �>[Ng�y3>g�Tp�M��]-���V3��%��J��*�g`��*V�2��:�+�l�5�e���aF�
V�?ë�T�C��b9\��0���o�h�i��/k���:�Q��{	|\���.�gm���؛���aB^�s�L�5��oǺ�^`����6���{%M)xTY;���@C���@I�Cb�n;£�-�R����@�,�]y�*�Ĥ� v���O��D���Kx��T�?Xl�����Dk��w�]"�a)������K��١K0�A�,ٽ�$Ya�\`7�_*L�C�ɲ�I�%�l|?�eJ�S넳6����!B{L�M&r�_~1�d{B�}-�Z�r1n��7M�t"����� T�(T�V�`�(4gð�!��\#��b�Z������>�"m�1�:�_�."�z��.J�������5����6��zAYb/h�B{��:�r{�6�����r��	#������򚏼E��^��3[Ŋ�������oi��l��Q�gg�6�&kB[�/
��b�C�����@�o�~����Cj���u��4��q�d�
���a�#K�V0$�>}dK��R���A�I�ۯ�(DTJ5�V��F�&So�<��['Q���8F+z�ֳ��WS�rQT�-e�:FKy�O�{���?���Z/k�K'tc����m�r�	�g+GQ�_K���u�ő$��������-=C�[��Z���<%`l��qD�Կܝ�n�0��y7�-8�	
�P����P�@EJ�F2�L�<}�E2)k��dn�6�~r83P�h�	6���	<�6�[|%C�w�M|�¦�!�hc�B3��<��m�6�ݓ�Z��+��8P[�����ޡ�e�|�Ib|vf^��T�̱�e6��٬un&/U�P]��G_Q^dی����l�gd����_���5�9�݃�(J?��!"�fJ<��ׯ�u}g;�xJ<>���^d�����H�;G�{�p	����B�л�껕�VV&Kvo��r��(B��"��o�tD��v� /��s�Z�o��rC�,�@���T�\_!��s)�{ih
VW����|�+�( ��Y�ޛ(Ku���
~���Y��1�>{��$��<���j��Fuc,j�@���K,V5�k�G��A���z`~�s�����{�jԜ��c�?8�g�ꬬѝk�#f��Y��`�����Ҽx��_y�������/'4�,���r�lEn�J��JV
�_D4z��xZe�賣Y~�������d�7C��PIQ�l�M�sB+���`b9M��Z�Ͼ%,-S�S��W��uE�î��f�k%�Sn��
�,ӼTq&7b[���^�U�p
#g��.���
tJ� ��J�g�x+�U��
#9Q!��(oWd�§� X4{8���*O��I>��u�AAg�=S��ڒE9�u0�e����A��r��A=3�{.��?��}����"
Рӂ�� �YN빤����Ќ6�3�h�@[W����Mtt���Z�3*Hi����F����B�FW@A��I�K/� a��V��hf(JM��d�g�KKJ�I^��F^f�`��h�XU@ӌr���r�Ǜ��U	u��k@����@VC\�5N�(���]A�0{���Ƈv�m���?it���M�ܝ
�&
I�KZh�C�7�骡�~AUm��{�>��o�]#Vv_=��Q�����>n�2��9;�w=$���Md:	zi���jЅ�l�V��lh�<���}�A�i�6L+Ď�y�:�!ީ(�C;�*�ѡ�K��ͣ��8<4g�;pxGa��Ռ���ϸ��6���v�������-�t��<b�A��4x٭4(v��1��|Sf�v"|���B�������
� �g�"z�n�?x�f���@����T~�f��- %��N(�3E�A&���{�[�{ٸJ��\�ϒ|
^6빫zNe���"+�K��k��n��ͦۂ�td���x��z�bt�Z3�a�
�&qpM��K�O���4t�2H��?���4�Ŝ�,���{S����vJQx����>�	-j���<!DOCTYPE HTML>
<html>
<head>
  <style>
    body {
      background-color: #9e9e9e;
    }
  </style>
</head>
</html>
{
  "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtl3tO0osjuzRsf6xtD2SKxPlTfuoy7AWoObysitBPvH5fE1NaAA1/2JkPWkVDhdLBWLaIBPYeXbzlHp3y4Vv/4XG+aN5qFE3z+1RU/NqkzVYHtIpVScf3DjTYtKVL66mzVGijSoAIwbFCC3LpGdaoe6Q1rSRDp76wR6jjFzsYwQIDAQAB",
  "name": "Web Store",
  "version": "0.2",
  "description": "Chrome Web Store",
  "icons": {
    "16": "webstore_icon_16.png",
    "128": "webstore_icon_128.png"
  },
  "app": {
    "launch": {
      "web_url": "https://chrome.google.com/webstore"
    },
    "urls": [
      "https://chrome.google.com/webstore"
    ]
  },
  "permissions": [
    "webstorePrivate",
    "management",
    "system.cpu",
    "system.display",
    "system.memory",
    "system.network",
    "system.storage"
  ]
}
{
  "name": "CryptoTokenExtension",
  "description": "CryptoToken Component Extension",
  "version": "0.9.74",
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq7zRobvA+AVlvNqkHSSVhh1sEWsHSqz4oR/XptkDe/Cz3+gW9ZGumZ20NCHjaac8j1iiesdigp8B1LJsd/2WWv2Dbnto4f8GrQ5MVphKyQ9WJHwejEHN2K4vzrTcwaXqv5BSTXwxlxS/mXCmXskTfryKTLuYrcHEWK8fCHb+0gvr8b/kvsi75A1aMmb6nUnFJvETmCkOCPNX5CHTdy634Ts/x0fLhRuPlahk63rdf7agxQv5viVjQFk+tbgv6aa9kdSd11Js/RZ9yZjrFgHOBWgP4jTBqud4+HUglrzu8qynFipyNRLCZsaxhm+NItTyNgesxLdxZcwOz56KD1Q4IQIDAQAB",
  "manifest_version": 2,
  "permissions": [
    "cryptotokenPrivate",
    "externally_connectable.all_urls",
    "tabs",
    "https://*/*",
    "http://*/*"
  ],
  "externally_connectable": {
    "matches": [
      "https://*/*"
    ],
    "ids": [
      "fjajfjhkeibgmiggdfehjplbhmfkialk"
    ]
  },
  "background": {
    "persistent": false,
    "scripts": [
      "util.js",
      "b64.js",
      "cbor.js",
      "sha256.js",
      "timer.js",
      "countdown.js",
      "countdowntimer.js",
      "devicestatuscodes.js",
      "approvedorigins.js",
      "errorcodes.js",
      "webrequest.js",
      "messagetypes.js",
      "factoryregistry.js",
      "requesthelper.js",
      "asn1.js",
      "enroller.js",
      "requestqueue.js",
      "signer.js",
      "origincheck.js",
      "textfetcher.js",
      "appid.js",
      "watchdog.js",
      "logging.js",
      "webrequestsender.js",
      "window-timer.js",
      "cryptotokenorigincheck.js",
      "cryptotokenapprovedorigins.js",
      "inherits.js",
      "individualattest.js",
      "googlecorpindividualattest.js",
      "cryptotokenbackground.js"
    ]
  },
  "incognito": "split"
}
<link rel="import" href="chrome://resources/html/polymer.html">

<link rel="import" href="/profile_browser_proxy.html">
<link rel="import" href="/shared_styles.html">
<link rel="import" href="/strings.html">
<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
<link rel="import" href="chrome://resources/html/i18n_behavior.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">

<dom-module id="control-bar">
  <template>
    <style include="shared-styles iron-flex iron-flex-alignment
        iron-positioning">
      #container {
        align-items: center;
        min-height: 32px;
        padding-bottom: 12px;
        padding-inline-end: 8px;
        padding-inline-start: 24px;
        padding-top: 12px;
      }

      #logo {
        margin-inline-end: auto;
        user-select: none;
      }

      cr-button + cr-button {
        margin-inline-start: 8px;
      }
    </style>
    <div id="container" class="layout horizontal end-justified">
      <div id="logo" class="product-logo" alt=""></div>
      <cr-button id="launchGuest" on-click="onLaunchGuestTap_"
          hidden="[[!showGuest]]">$i18n{browseAsGuest}</cr-button>
      <cr-button id="addUser" on-click="onAddUserTap_"
          hidden="[[!showAddPerson]]">$i18n{addUser}</cr-button>
    </div>
  </template>
  <script src="control_bar.js"></script>
</dom-module>
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview 'control-bar' is the horizontal bar at the bottom of the user
 * manager screen.
 */
Polymer({
  is: 'control-bar',

  behaviors: [
    I18nBehavior,
  ],

  properties: {
    /**
     * True if 'Browse as Guest' button is displayed.
     * @type {boolean}
     */
    showGuest: {type: Boolean, value: false},

    /**
     * True if 'Add Person' button is displayed.
     * @type {boolean}
     */
    showAddPerson: {type: Boolean, value: false},

    /** @private {!signin.ProfileBrowserProxy} */
    browserProxy_: Object,

    /**
     * True if the force sign in policy is enabled.
     * @private {boolean}
     */
    isForceSigninEnabled_: {
      type: Boolean,
      value: function() {
        return loadTimeData.getBoolean('isForceSigninEnabled');
      },
    }
  },

  /** @override */
  created: function() {
    this.browserProxy_ = signin.ProfileBrowserProxyImpl.getInstance();
  },

  /**
   * Handler for 'Browse as Guest' button click event.
   * @param {!Event} event
   * @private
   */
  onLaunchGuestTap_: function(event) {
    this.browserProxy_.areAllProfilesLocked().then(allProfilesLocked => {
      if (!allProfilesLocked || this.isForceSigninEnabled_) {
        this.browserProxy_.launchGuestUser();
      } else {
        document.querySelector('error-dialog')
            .show(this.i18n('browseAsGuestAllProfilesLockedError'));
      }
    });
  },

  /**
   * Handler for 'Add Person' button click event.
   * @param {!Event} event
   * @private
   */
  onAddUserTap_: function(event) {
    this.browserProxy_.areAllProfilesLocked().then(allProfilesLocked => {
      if (!allProfilesLocked || this.isForceSigninEnabled_) {
        // Event is caught by user-manager-pages.
        this.fire('change-page', {page: 'create-user-page'});
      } else {
        document.querySelector('error-dialog')
            .show(this.i18n('addProfileAllProfilesLockedError'));
      }
    });
  }
});
<link rel="import" href="chrome://resources/html/polymer.html">

<link rel="import" href="/profile_browser_proxy.html">
<link rel="import" href="/shared_styles.html">
<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
<link rel="import" href="chrome://resources/cr_elements/cr_checkbox/cr_checkbox.html">
<link rel="import" href="chrome://resources/cr_elements/cr_input/cr_input.html">
<link rel="import" href="chrome://resources/cr_elements/cr_profile_avatar_selector/cr_profile_avatar_selector.html">
<link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="chrome://resources/html/action_link.html">
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://resources/html/i18n_behavior.html">
<link rel="import" href="chrome://resources/cr_elements/md_select_css.html">
<link rel="import" href="chrome://resources/html/util.html">
<link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html">

<dom-module id="create-profile">
  <template>
    <style include="shared-styles iron-positioning md-select">
      :host {
        align-self: center;
      }

      .container {
        color: var(--cr-primary-text-color);
        width: var(--page-width);
      }

      #message-container {
        -webkit-transition: top 400ms cubic-bezier(.4, 0, .2, 1),
                            visibility 0s linear 400ms;
        align-items: center;
        background-color: var(--paper-red-50);
        box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .12);
        color: var(--error-color);
        display: flex;
        height: 40px;
        left: 0;
        overflow: hidden;
        padding: 0 16px;
        position: absolute;
        right: 0;
        top: -40px;
        visibility: hidden;
      }

      @media (prefers-color-scheme: dark) {
        #message-container {
          background-color: unset;
          border-bottom: var(--cr-separator-line);
          box-shadow: none;
        }
      }

      #message-container[visible] {
        -webkit-transition: top 400ms cubic-bezier(.4, 0, .2, 1),
                            visibility 0s linear 0s;
        top: 0;
        visibility: visible;
      }

      #message-container iron-icon {
        --iron-icon-height: 20px;
        --iron-icon-width: 20px;
      }

      #message-container #message {
        margin-inline-start: 16px;
      }

      #message-container a {
        color: inherit;
        text-decoration: underline;
      }

      #title-bar {
        font-size: 16px;
        font-weight: 500;
      }

      #nameInput {
        --cr-input-color: var(--cr-primary-text-color);
        --cr-input-border-bottom: 1px solid var(--cr-secondary-text-color);
        margin-bottom: 24px;
        margin-top: 32px;
        width: 300px;
      }

      cr-checkbox {
        margin-top: 24px;
      }

      #actions {
        bottom: 16px;
        display: flex;
        position: absolute;
        right: 16px;
      }

      :host-context([dir='rtl']) #actions {
        left: 16px;
        right: auto;
      }

      #actions paper-spinner-lite {
        align-self: center;
        height: 20px;
        margin-inline-end: 8px;
        width: 20px;
      }

      cr-profile-avatar-selector {
        max-height: 50vh;
        overflow-x: hidden;
        overflow-y: auto;
        padding: 8px;
      }
    </style>
    <div id="message-container" visible$="[[isMessageVisble_]]">
      <iron-icon icon="cr:warning"></iron-icon>
      <span id="message" inner-h-t-m-l="[[message_]]"></span>
    </div>
    <div class="container">
      <div id="title-bar">$i18n{createProfileTitle}</div>
      <cr-input id="nameInput" value="{{profileName_}}" pattern=".*\S.*"
          placeholder="$i18n{createProfileNamePlaceholder}"
          auto-validate spellcheck="false">
      </cr-input>
      <cr-profile-avatar-selector avatars="[[availableIcons_]]"
          selected-avatar="{{selectedAvatar_}}">
      </cr-profile-avatar-selector>
      <cr-checkbox id="createShortcutCheckbox" checked="{{createShortcut_}}"
          hidden="[[!isProfileShortcutsEnabled_]]">
        $i18n{createDesktopShortcutLabel}
      </cr-checkbox>
      <div id="actions">
        <paper-spinner-lite active="[[isSpinnerActive_(createInProgress_)]]">
        </paper-spinner-lite>
        <cr-button id="cancel" class="cancel-button" on-click="onCancelTap_">
          $i18n{cancel}
        </cr-button>
        <cr-button id="save" class="action-button" on-click="onSaveTap_"
            disabled="[[isSaveDisabled_(createInProgress_, profileName_)]]">
          $i18n{createProfileConfirm}
        </cr-button>
      </div>
    </div>
  </template>
  <script src="create_profile.js"></script>
</dom-module>
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview 'create-profile' is a page that contains controls for creating
 * a profile, including choosing a name, and an avatar.
 */

Polymer({
  is: 'create-profile',

  behaviors: [I18nBehavior, WebUIListenerBehavior],

  properties: {
    /**
     * The current profile name.
     * @private {string}
     */
    profileName_: {type: String, value: ''},

    /**
     * The list of available profile icon Urls and labels.
     * @private {!Array<!AvatarIcon>}
     */
    availableIcons_: {
      type: Array,
      value: function() {
        return [];
      }
    },

    /**
     * The currently selected profile avatar, if any.
     * @private {?AvatarIcon}
     */
    selectedAvatar_: Object,

    /**
     * True if a profile is being created or imported.
     * @private {boolean}
     */
    createInProgress_: {type: Boolean, value: false},

    /**
     * True if the error/warning message is displaying.
     * @private {boolean}
     */
    isMessageVisble_: {type: Boolean, value: false},

    /**
     * The current error/warning message.
     * @private {string}
     */
    message_: {type: String, value: ''},

    /**
     * if true, a desktop shortcut will be created for the new profile.
     * @private {boolean}
     */
    createShortcut_: {type: Boolean, value: true},

    /** @private {!signin.ProfileBrowserProxy} */
    browserProxy_: Object,

    /**
     * True if the profile shortcuts feature is enabled.
     * @private
     */
    isProfileShortcutsEnabled_: {
      type: Boolean,
      value: function() {
        return loadTimeData.getBoolean('profileShortcutsEnabled');
      },
      readOnly: true
    },

    /**
     * True if the force sign in policy is enabled.
     * @private {boolean}
     */
    isForceSigninEnabled_: {
      type: Boolean,
      value: function() {
        return loadTimeData.getBoolean('isForceSigninEnabled');
      },
    },
  },

  /** @override */
  created: function() {
    this.browserProxy_ = signin.ProfileBrowserProxyImpl.getInstance();
  },

  /** @override */
  ready: function() {
    this.addWebUIListener(
        'create-profile-success', this.handleSuccess_.bind(this));
    this.addWebUIListener(
        'create-profile-warning', this.handleMessage_.bind(this));
    this.addWebUIListener(
        'create-profile-error', this.handleMessage_.bind(this));
    this.addWebUIListener('profile-icons-received', icons => {
      this.availableIcons_ = icons;
    });

    this.browserProxy_.getAvailableIcons();
  },

  /** @override */
  attached: function() {
    // cr-input's focusable element isn't defined until after it's attached.
    Polymer.RenderStatus.afterNextRender(this, () => this.$.nameInput.focus());
  },

  /**
   * Handles tap events from:
   * - links within dynamic warning/error messages pushed from the browser.
   * @param {!Event} event
   * @private
   */
  onTap_: function(event) {
    const element = Polymer.dom(event).rootTarget;

    if (element.id == 'sign-in-to-chrome') {
      this.browserProxy_.openUrlInLastActiveProfileBrowser(element.href);
      event.preventDefault();
    } else if (element.id == 'reauth') {
      const elementData = /** @type {{userEmail: string}} */ (element.dataset);
      this.browserProxy_.authenticateCustodian(elementData.userEmail);
      this.hideMessage_();
      event.preventDefault();
    }
  },

  /**
   * Handler for the 'Save' button tap event.
   * @param {!Event} event
   * @private
   */
  onSaveTap_: function(event) {
    this.createProfile_();
  },

  /**
   * Creates the new profile.
   * @private
   */
  createProfile_: function() {
    this.hideMessage_();
    this.createInProgress_ = true;
    const createShortcut =
        this.isProfileShortcutsEnabled_ && this.createShortcut_;
    // Select the 1st avatar if none selected.
    const selectedAvatar = this.selectedAvatar_ || this.availableIcons_[0];
    this.browserProxy_.createProfile(
        this.profileName_, selectedAvatar.url, createShortcut);
  },

  /**
   * Handler for the 'Cancel' button tap event.
   * @param {!Event} event
   * @private
   */
  onCancelTap_: function(event) {
    this.fire('change-page', {page: 'user-pods-page'});
  },

  /**
   * Handles profile create/import success message pushed by the browser.
   * @param {!ProfileInfo} profileInfo Details of the created/imported profile.
   * @private
   */
  handleSuccess_: function(profileInfo) {
    this.createInProgress_ = false;
    this.fire('change-page', {page: 'user-pods-page'});
  },

  /**
   * Hides the warning/error message.
   * @private
   */
  hideMessage_: function() {
    this.isMessageVisble_ = false;
  },

  /**
   * Handles warning/error messages when a profile is being created/imported.
   * @param {*} message An HTML warning/error message.
   * @private
   */
  handleMessage_: function(message) {
    this.createInProgress_ = false;
    this.message_ = '' + message;
    this.isMessageVisble_ = true;
  },

  /**
   * Returns a translated message that contains link elements with the 'id'
   * attribute.
   * @param {string} id The ID of the string to translate.
   * @private
   */
  i18nAllowIDAttr_: function(id) {
    const opts = {
      'attrs': {
        'id': function(node, value) {
          return node.tagName == 'A';
        }
      }
    };

    return this.i18nAdvanced(id, opts);
  },

  /**
   * Computed binding determining whether the paper-spinner is active.
   * @param {boolean} createInProgress Is create in progress?
   * @return {boolean}
   * @private
   */
  isSpinnerActive_: function(createInProgress) {
    return createInProgress;
  },

  /**
   * Computed binding determining whether 'Save' button is disabled.
   * @param {boolean} createInProgress Is create in progress?
   * @param {string} profileName Profile Name.
   * @return {boolean}
   * @private
   */
  isSaveDisabled_: function(createInProgress, profileName) {
    /** @type {CrInputElement} */
    const nameInput = this.$.nameInput;
    return createInProgress || !profileName || !nameInput.validate();
  },
});
<link rel="import" href="chrome://resources/html/polymer.html">

<link rel="import" href="/shared_styles.html">
<link rel="import" href="chrome://resources/cr_elements/cr_dialog/cr_dialog.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">

<dom-module id="error-dialog">
  <template>
    <style include="shared-styles">
      :host {
        color: var(--cr-primary-text-color);
      }

      #message {
        margin-bottom: 52px;
        white-space: pre-wrap;
        word-wrap: break-word;
      }
    </style>
    <cr-dialog id="dialog" show-close-button>
      <div slot="body">
        <div id="message">[[message_]]</div>
      </div>
    </cr-dialog>
  </template>
  <script src="error_dialog.js"></script>
</dom-module>
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview 'error-dialog' is a dialog that displays error messages
 * in the user manager.
 */
(function() {
Polymer({
  is: 'error-dialog',

  properties: {
    /**
     * The message shown in the dialog.
     * @private {string}
     */
    message_: {type: String, value: ''}
  },

  /**
   * Displays the dialog populated with the given message.
   * @param {string} message Error message to show.
   */
  show: function(message) {
    this.message_ = message;
    this.$.dialog.showModal();
  }
});
})();
<link rel="import" href="chrome://resources/html/assert.html">
<link rel="import" href="chrome://resources/html/cr.html">
<script src="profile_browser_proxy.js"></script>
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Helper object and related behavior that encapsulate messaging
 * between JS and C++ for creating/importing profiles in the user-manager page.
 */

/**
 * @typedef {{name: string,
 *            filePath: string}}
 */
let ProfileInfo;

cr.define('signin', function() {
  /** @interface */
  class ProfileBrowserProxy {
    /**
     * Gets the available profile icons to choose from.
     */
    getAvailableIcons() {}

    /**
     * Launches the guest user.
     */
    launchGuestUser() {}

    /**
     * Creates a profile.
     * @param {string} profileName Name of the new profile.
     * @param {string} profileIconUrl URL of the selected icon of the new
     *     profile.
     * @param {boolean} createShortcut if true a desktop shortcut will be
     *     created.
     */
    createProfile(profileName, profileIconUrl, createShortcut) {}

    /**
     * Initializes the UserManager
     * @param {string} locationHash
     */
    initializeUserManager(locationHash) {}

    /**
     * Launches the user with the given |profilePath|
     * @param {string} profilePath Profile Path of the user.
     */
    launchUser(profilePath) {}

    /**
     * Opens the given url in a new tab in the browser instance of the last
     * active profile. Hyperlinks don't work in the user manager since its
     * browser instance does not support tabs.
     * @param {string} url
     */
    openUrlInLastActiveProfileBrowser(url) {}

    /**
     * Switches to the profile with the given path.
     * @param {string} profilePath Path to the profile to switch to.
     */
    switchToProfile(profilePath) {}

    /**
     * @return {!Promise<boolean>} Whether all (non-supervised and non-child)
     *     profiles are locked.
     */
    areAllProfilesLocked() {}

    /**
     * Authenticates the custodian profile with the given email address.
     * @param {string} emailAddress Email address of the custodian profile.
     */
    authenticateCustodian(emailAddress) {}
  }

  /** @implements {signin.ProfileBrowserProxy} */
  class ProfileBrowserProxyImpl {
    /** @override */
    getAvailableIcons() {
      chrome.send('requestDefaultProfileIcons');
    }

    /** @override */
    launchGuestUser() {
      chrome.send('launchGuest');
    }

    /** @override */
    createProfile(profileName, profileIconUrl, createShortcut) {
      chrome.send(
          'createProfile', [profileName, profileIconUrl, createShortcut]);
    }

    /** @override */
    initializeUserManager(locationHash) {
      chrome.send('userManagerInitialize', [locationHash]);
    }

    /** @override */
    launchUser(profilePath) {
      chrome.send('launchUser', [profilePath]);
    }

    /** @override */
    openUrlInLastActiveProfileBrowser(url) {
      chrome.send('openUrlInLastActiveProfileBrowser', [url]);
    }

    /** @override */
    switchToProfile(profilePath) {
      chrome.send('switchToProfile', [profilePath]);
    }

    /** @override */
    areAllProfilesLocked() {
      return cr.sendWithPromise('areAllProfilesLocked');
    }

    /** @override */
    authenticateCustodian(emailAddress) {
      chrome.send('authenticateCustodian', [emailAddress]);
    }
  }

  // The singleton instance_ is replaced with a test version of this wrapper
  // during testing.
  cr.addSingletonGetter(ProfileBrowserProxyImpl);

  return {
    ProfileBrowserProxy: ProfileBrowserProxy,
    ProfileBrowserProxyImpl: ProfileBrowserProxyImpl,
  };
});
<!doctype html>
<html build="$i18n{buildType}"
    dir="$i18n{textdirection}"
    lang="$i18n{language}"
    screen="$i18n{screenType}">
<head>
  <meta charset="utf-8">
  <meta name="google" value="notranslate">
  <title>$i18n{title}</title>

  <style>/* Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

.account-picker.flying-pods #account-picker {
  transition: width 180ms ease, height 180ms ease;
}

#bubble {
  z-index: 1;
}

#signin-banner-container1 {
  bottom: 100%;
  margin-bottom: 10px;
  position: absolute;
  width: 100%;
}

html[screen=login] #signin-banner-container1 {
  margin-bottom: 6px;
}

#signin-banner-container2 {
  display: inline-block;
  position: relative;
  right: -50%;
}

html[dir=rtl] #signin-banner-container2 {
  left: -50%;
  right: auto;
}

#signin-banner {
  background-color: rgba(0, 0, 0, 0.75);
  border-radius: 4px;
  color: whitesmoke;
  display: none;
  left: -50%;
  max-width: 722px;
  padding: 20px;
  position: relative;
  text-align: center;
  width: max-content;
}

html[dir=rtl] #signin-banner {
  left: auto;
  right: -50%;
}

html[screen=user-adding] #signin-banner {
  display: inline-block;
}

html[screen=login] #signin-banner {
  padding: 20px 24px;
}

html[screen=login] #signin-banner,
html[screen=lock] #signin-banner {
  display: inline-block;
  opacity: 0;
  visibility: hidden;
}

html[screen=login] #signin-banner.message-set,
html[screen=lock] #signin-banner.message-set {
  opacity: 1;
  transition: opacity 1s;
  visibility: visible;
}
</style>
  <style>/* Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * This is the stylesheet used by user pods row of account picker UI.
 */

podrow {
  /* Temporarily disabled because animation interferes with updating screen's
   size. */
  height: 100%;
  overflow: visible;
  position: absolute;
  width: 100%;
}

/* Hide the pod row while images are loading. */
podrow.images-loading {
  visibility: hidden;
}

pin-keyboard {
  display: block;
}

.pod {
  -webkit-tap-highlight-color: transparent;
  background-color: white;
  border-radius: 2px;
  box-shadow: 0 4px 23px 5px rgba(0, 0, 0, 0.2),
              0 2px 6px rgba(0, 0, 0, 0.15),
              0 3px 0 rgba(0, 0, 0, 0.08);
  cursor: pointer;
  height: 213px;
  outline: none;
  position: absolute;
  top: 0;
  transform: scale3d(0.9, 0.9, 0.9);
  width: 180px;
  z-index: 0;
}

.account-picker.flying-pods .pod {
  transition: all 180ms;
}

.pod.pin-enabled {
  height: 417px;
  top: -87px !important;
}

.pod .pin-container {
  height: 204px;
  position: absolute;
  top: 170px;
}

.pod.faded {
  opacity: .75;
}

podrow[ncolumns='6'] .pod {
  transform: scale3d(0.8, 0.8, 0.8);
}

.pod.focused {
  /* Focused pod has the same size no matter how many pods. */
  cursor: default;
  transform: scale3d(1, 1, 1) !important;
  z-index: 1;
}

.pod.focused[auth-type='userClick'] {
  cursor: pointer;
}

.user-image-pane {
  background-color: white;
  height: 160px;
  left: 10px;
  position: absolute;
  top: 10px;
  transition: height 180ms ease-in-out,
              left 180ms ease-in-out,
              right 180ms ease-in-out,
              top 180ms ease-in-out,
              width 180ms ease-in-out;
  width: 160px;
  z-index: 3;
}

html[dir=rtl] .user-image-pane {
  left: auto;
  right: 10px;
}

.user-image-container {
  align-items: center;
  display: flex;
  height: 100%;
  justify-content: center;
  width: 100%;
}

.pod .user-image {
  flex: none;
}

.pod.focused .user-image {
  display: none;
}

.pod .animated-image {
  display: none;
}

.pod.focused .animated-image {
  display: block;
}

/* TODO(noms): Refactor this out into a CrOS-specific file and simplify the
 style rule once it is included on CrOS only. crbug.com/397638 */
html:not([screen=login-add-user]) .pod .user-image {
  max-height: 160px;
  max-width: 160px;
  opacity: 0.7;
  position: absolute;
}

html:not([screen=login-add-user]) .pod.focused .user-image {
  opacity: 1;
}

.pod.multiprofiles-policy-applied .user-image {
  -webkit-filter: grayscale(100%);
}

.signed-in-indicator {
  display: none;
}

.pod.signed-in .signed-in-indicator {
  background-color: rgba(0, 0, 0, 0.5);
  color: white;
  display: block;
  font-size: small;
  position: absolute;
  text-align: center;
  top: 0;
  width: 100%;
}

.main-pane {
  left: 10px;
  position: absolute;
  top: 10px;
  z-index: 2;
}

html[dir=rtl] .main-pane {
  left: auto;
  right: 10px;
}

.name-container,
.pod.focused:not(.multiprofiles-policy-applied) .auth-container {
  background-color: white;
  display: flex;
  position: absolute;
  top: 160px;
/* On chromeos we extend the width to cover the padding on the user pods. This
 is so the submit button on chromeos can extend onto the padding as shown on
 mocks. */

  width: 160px;


}

.auth-container .submit-button[disabled] {
  --cr-icon-button-fill-color: #000;
  opacity: 0.26;
}

.auth-container .submit-button {
  --cr-icon-button-fill-color: var(--google-blue-500);
  --cr-icon-button-icon-size: 22px;
  --cr-icon-button-size: 43px;
  position: relative;
}

.auth-container .submit-button.error-shown {
  --cr-icon-button-fill-color: #CD2A00;
}

.name-container {
  transition: transform 180ms;
}

.pod.focused .name-container {
  display: none;
}

.pod.focused.multiprofiles-policy-applied .name-container {
  display: flex;
}

.name {
  color: #565656;
  /* This should be 15.6px - the equivalent of 14px at 90% scale. */
  flex: auto;
  font-size: 16px;
  margin-top: 12px;
  outline: none;
  overflow: hidden;
  padding: 0 6px;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.learn-more-container,
.auth-container,
.password-entry-container,
.reauth-hint-container {
  display: none;
}

.pod[is-active-directory] .reauth-warning {
  display: none;
}

.pod[auth-type='offlinePassword'].focused .password-entry-container,
.pod[auth-type='forceOfflinePassword'].focused .password-entry-container {
  display: flex;
  flex: auto;
}

.password-container {
  flex: auto;
}

.pod input[type='password'] {
  background-color: white;
  border: none;
  padding: 4px 6px;
  position: relative;
  top: 6px;
  width: 100%;
}

.capslock-hint-container {
  display: none;
}



.capslock-hint {
  -webkit-margin-end: 6px;
  -webkit-margin-start: -2px;
  margin: auto;
  position: relative;
  top: 15px;
}

.password-label,
.signin-transition-container {
  display: none;
}

.pod[auth-type='userClick']:not(.signing-in) .password-label,
.pod[auth-type='userClick'].signing-in .signin-transition-container {
  color: grey;
  display: block;
  flex: auto;
  margin-top: 11px;
  outline: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.custom-icon {
  -webkit-margin-end: 0;
  -webkit-margin-start: auto;
  background-position: center;
  background-repeat: no-repeat;
  flex: none;
  height: 27px;
  margin: 8px 0;
  width: 27px;
}

.custom-icon.faded {
  transition: opacity 200ms ease-in-out, visibility 200ms ease-in-out;
}

.custom-icon-hardlocked {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_HARDLOCKED);
}

.custom-icon-hardlocked.icon-with-tooltip:hover {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_HARDLOCKED_HOVER);
}

.custom-icon-hardlocked.interactive-custom-icon:active {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_HARDLOCKED_PRESSED);
}

.custom-icon-locked {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_LOCKED);
}

.custom-icon-locked.icon-with-tooltip:hover {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_HOVER);
}

.custom-icon-locked.interactive-custom-icon:active {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_PRESSED);
}

.custom-icon-locked-to-be-activated {
  background-image:
      url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED);
}

.custom-icon-locked-to-be-activated.icon-with-tooltip:hover {
  background-image:
      url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_HOVER);
}

.custom-icon-locked-to-be-activated.interactive-custom-icon:active {
  background-image:
      url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_PRESSED);
}

.custom-icon-locked-with-proximity-hint {
  background-image:
      url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT);
}

.custom-icon-locked-with-proximity-hint.icon-with-tooltip:hover {
  background-image:
      url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT_HOVER);
}

.custom-icon-locked-with-proximity-hint.interactive-custom-icon:active {
  background-image:
      url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT_PRESSED);
}

.custom-icon-unlocked {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_UNLOCKED);
}

.custom-icon-unlocked.icon-with-tooltip:hover {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_UNLOCKED_HOVER);
}

.custom-icon-unlocked.interactive-custom-icon:active {
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_UNLOCKED_PRESSED);
}

/**
 * Preloads resources for custom icon. Without this, the resources will be
 * loaded when CSS properties using them are first applied, which has visible
 * delay and may cause a short white flash when the icon background changes.
 */
.custom-icon::after {
  content:
    url(chrome://theme/IDR_EASY_UNLOCK_HARDLOCKED)
    url(chrome://theme/IDR_EASY_UNLOCK_HARDLOCKED_HOVER)
    url(chrome://theme/IDR_EASY_UNLOCK_HARDLOCKED_PRESSED)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_HOVER)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_PRESSED)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_HOVER)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_TO_BE_ACTIVATED_PRESSED)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT_HOVER)
    url(chrome://theme/IDR_EASY_UNLOCK_LOCKED_WITH_PROXIMITY_HINT_PRESSED)
    url(chrome://theme/IDR_EASY_UNLOCK_UNLOCKED)
    url(chrome://theme/IDR_EASY_UNLOCK_UNLOCKED_HOVER)
    url(chrome://theme/IDR_EASY_UNLOCK_UNLOCKED_PRESSED);
  display: none;
}

.custom-icon-spinner {
  animation: easy-unlock-spinner-animation 2s steps(45) infinite;
  background-image: url(chrome://theme/IDR_EASY_UNLOCK_SPINNER);
}

@keyframes easy-unlock-spinner-animation {
  from { background-position: 0 }
  to { background-position: -1215px }
}

.interactive-custom-icon {
  cursor: pointer;
}

.pod[auth-type='onlineSignIn'] .custom-icon-container {
  display: none;
}

.fingerprint-icon-container,
.custom-icon-container {
  display: flex;
  flex: none;
  flex-direction: column;
  height: 43px;
  width: 27px;
}

.pod[auth-type='onlineSignIn'] .reauth-hint-container {
  display: flex;
  justify-content: center;
  margin-top: 8px;
  width: 100%;
}

.reauth-hint-container .reauth-warning {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yIDQyaDQ0TDI0IDQgMiA0MnptMjQtNmgtNHYtNGg0djR6bTAtOGgtNHYtOGg0djh6Ii8+PC9zdmc+);
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 20px;
  background-color: #f4b400;
  height: 24px;
  width: 24px;
}

.reauth-hint-container .reauth-name-hint {
  align-self: center;
  color: #565656;
  font-size: 16px;
  outline: none;
  overflow: hidden;
  padding: 0 6px;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.action-box-area,
.user-type-icon-area {
  background-color: white;
  border-radius: 2px;
  position: absolute;
  top: 0;
}

.action-box-area {
  opacity: 0;
  outline: none;
  right: 0;
  transition: opacity 100ms;
  z-index: 4;
}

html[dir=rtl] .action-box-area {
  left: 0;
  right: auto;
}

.action-box-area:focus,
.action-box-area.hovered,
.action-box-area.active,
.action-box-area.forced {
  opacity: 1;
}

.action-box-button {
  --cr-icon-button--icon-size: 13px;
  --cr-icon-button-size: 29px;
  background-image: url(chrome://theme/IDR_OOBE_ACTION_BOX_BUTTON_NORMAL);
  margin: 5px;
}

.action-box-button:hover {
  background-image: url(chrome://theme/IDR_OOBE_ACTION_BOX_BUTTON_HOVER);
}

.action-box-area.active .action-box-button {
  background-image: url(chrome://theme/IDR_OOBE_ACTION_BOX_BUTTON_PRESSED);
}

.action-box-area .action-box-icon {
  /* overriden in chrome/browser/resources/user_manager/user_manager.css */
  display: none;
}

.user-image-gradient-area {
  /* overriden in chrome/browser/resources/user_manager/user_manager.css */
  display: none;
}

.user-type-icon-area {
  left: 0;
  z-index: 5;
}

html[dir=rtl] .user-type-icon-area {
  left: auto;
  right: 0;
}

.user-type-icon-image {
  height: 16px;
  margin: 5px;
  width: 16px;
}

.user-type-icon-area.legacySupervised .user-type-icon-image {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zMyAyNGMyLjc2IDAgNC45OC0yLjI0IDQuOTgtNXMtMi4yMi01LTQuOTgtNWMtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNXptLTE1LTJjMy4zMSAwIDUuOTgtMi42OSA1Ljk4LTZzLTIuNjctNi01Ljk4LTZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDZ6bTE1IDZjLTMuNjcgMC0xMSAxLjg0LTExIDUuNVYzOGgyMnYtNC41YzAtMy42Ni03LjMzLTUuNS0xMS01LjV6bS0xNS0yYy00LjY3IDAtMTQgMi4zNC0xNCA3djVoMTR2LTQuNWMwLTEuNy42Ny00LjY3IDQuNzQtNi45NEMyMSAyNi4xOSAxOS4zMSAyNiAxOCAyNnoiLz48L3N2Zz4=);
  background-size: 18px;
}

.user-type-icon-area.child .user-type-icon-image {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTI0IDRjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDYtNi0yLjY5LTYtNiAyLjY5LTYgNi02eiIvPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoNDh2NDhIMFYweiIvPjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjI0IiBjeT0iMjYiIHI9IjQiLz48cGF0aCBkPSJNMjQgMThjLTYuMTYgMC0xMyAzLjEyLTEzIDcuMjN2MTEuNTRjMCAyLjMyIDIuMTkgNC4zMyA1LjIgNS42MyAyLjMyIDEgNS4xMiAxLjU5IDcuOCAxLjU5LjY2IDAgMS4zMy0uMDYgMi0uMTR2LTUuMmMtLjY3LjA4LTEuMzQuMTQtMiAuMTQtMi42MyAwLTUuMzktLjU3LTcuNjgtMS41NS42Ny0yLjEyIDQuMzQtMy42NSA3LjY4LTMuNjUuODYgMCAxLjc1LjExIDIuNi4yOSAyLjc5LjYyIDUuMiAyLjE1IDUuMiA0LjA0djQuNDdjMy4wMS0xLjMxIDUuMi0zLjMxIDUuMi01LjYzVjI1LjIzQzM3IDIxLjEyIDMwLjE2IDE4IDI0IDE4em0wIDEyYy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiLz48L3N2Zz4=);
  background-size: 18px;
}

.user-type-icon-area.policy .user-type-icon-image {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yNCAxNFY2SDR2MzZoNDBWMTRIMjR6TTEyIDM4SDh2LTRoNHY0em0wLThIOHYtNGg0djR6bTAtOEg4di00aDR2NHptMC04SDh2LTRoNHY0em04IDI0aC00di00aDR2NHptMC04aC00di00aDR2NHptMC04aC00di00aDR2NHptMC04aC00di00aDR2NHptMjAgMjRIMjR2LTRoNHYtNGgtNHYtNGg0di00aC00di00aDE2djIwem0tNC0xNmgtNHY0aDR2LTR6bTAgOGgtNHY0aDR2LTR6Ii8+PC9zdmc+);
  background-size: 18px;
}

.user-type-icon-area.app .user-type-icon-image {
  background-image: url(chrome://theme/IDR_KIOSK_APP_USER_POD_ICON);
}

.fingerprint-icon-container.hidden {
  display: none;
}

.fingerprint-icon-container.default .fingerprint-icon-image {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjciIGhlaWdodD0iMjciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuMzQiPjxwYXRoIGQ9Ik0yMC4wMzYgNS4wM2EuNjIxLjYyMSAwIDAgMS0uMjYtLjA2M2MtMi4xNTMtMS4xMTQtNC4wMjYtMS41OTItNi4yNjUtMS41OTItMi4yMzIgMC00LjMzNi41MzQtNi4yNjUgMS41ODZhLjU2My41NjMgMCAxIDEtLjU0LS45ODkgMTQuMDk3IDE0LjA5NyAwIDAgMSA2LjgwNi0xLjcyYzIuMzk4IDAgNC40OS41MyA2Ljc4NSAxLjcxNi4yNzYuMTQuMzgyLjQ4My4yNDIuNzZhLjU3LjU3IDAgMCAxLS41LjMwM3pNMy45MzcgMTAuOTM0YS42LjYgMCAwIDEtLjMyNi0uMS41NjIuNTYyIDAgMCAxLS4xMzQtLjc4M0ExMS43MTcgMTEuNzE3IDAgMCAxIDcuNyA2LjM2OGMzLjU0LTEuODMgOC4wNi0xLjgzNCAxMS42MDUtLjAxMmExMS43OSAxMS43OSAwIDAgMSA0LjIyIDMuNjU2LjU2LjU2IDAgMCAxLS4xMy43ODIuNTY1LjU2NSAwIDAgMS0uNzg4LS4xMyAxMC41NzIgMTAuNTcyIDAgMCAwLTMuODE0LTMuMzA2Yy0zLjIzLTEuNjYtNy4zNTItMS42NTQtMTAuNTc1LjAxYTEwLjU5IDEwLjU5IDAgMCAwLTMuODIgMy4zMzYuNTcuNTcgMCAwIDEtLjQ2LjIzem03LjAzNyAxMy41NzNhLjU1Ni41NTYgMCAwIDEtLjQtLjE3Yy0uOTcyLS45ODMtMS41LTEuNjA3LTIuMjYtMi45NjMtLjc3Ny0xLjM4NC0xLjE4Ny0zLjA3Ny0xLjE4Ny00Ljg4OCAwLTMuMzQgMi44NTctNi4wNjQgNi4zNzMtNi4wNjRzNi4zNzMgMi43MTcgNi4zNzMgNi4wNjRhLjU2My41NjMgMCAwIDEtMS4xMjQtLjAwMWMwLTIuNzIzLTIuMzUtNC45NC01LjI0OC00Ljk0LTIuODkgMC01LjI0OCAyLjIxNy01LjI0OCA0Ljk0IDAgMS42Mi4zNiAzLjExNiAxLjA0IDQuMzM3LjcyNiAxLjI5MyAxLjIxIDEuODUgMi4wNzYgMi43MjIuMjIuMjIuMjIuNTgtLjAwNS43OTNhLjUxLjUxIDAgMCAxLS4zOS4xNjh6bTguMDYtMi4wOGMtMS4zMzggMC0yLjUxMy0uMzQtMy40ODYtLjk5Ny0xLjY3LTEuMTM1LTIuNjcyLTIuOTgtMi42NzItNC45MzhhLjU2My41NjMgMCAwIDEgMS4xMjUuMDAxYzAgMS41OC44MTYgMy4wNzYgMi4xODMgNC4wMDUuNzkzLjU0IDEuNzI3LjgwNCAyLjg1Mi44MDQuMjcgMCAuNzI2LS4wMjggMS4xNzYtLjEwN2EuNTY2LjU2NiAwIDAgMSAuNjUzLjQ1Ni41NjYuNTY2IDAgMCAxLS40NTYuNjUzIDguMDc4IDguMDc4IDAgMCAxLTEuMzcyLjEyNHpNMTYuNzcgMjQuNzVjLS4wNSAwLS4xLS4wMDYtLjE0Ni0uMDIzLTEuNzk0LS40OS0yLjk2NC0xLjE1My00LjE4LTIuMzYyYTguMjMyIDguMjMyIDAgMCAxLTIuNDM1LTUuODcyYzAtMS44MyAxLjU1Mi0zLjMxNCAzLjQ2NS0zLjMxNCAxLjkxMiAwIDMuNDY1IDEuNDg0IDMuNDY1IDMuMzEzIDAgMS4yMDMgMS4wNTIgMi4xODggMi4zNCAyLjE4OCAxLjI4OCAwIDIuMzQtLjk3OCAyLjM0LTIuMTg4IDAtNC4yNC0zLjY1Ni03LjY5LTguMTUtNy42OS0zLjIgMC02LjEyIDEuNzgtNy40MzcgNC41MzUtLjQ0LjkxLS42NTggMS45NzQtLjY1OCAzLjE1NSAwIC44NzguMDggMi4yNjIuNzQ4IDQuMDU2YS41NjcuNTY3IDAgMCAxLS4zMzIuNzI2LjU2OC41NjggMCAwIDEtLjcyNi0uMzMyYy0uNTUtMS40OC0uODItMi45My0uODItNC40NSAwLTEuMzUuMjU4LTIuNTc2Ljc3LTMuNjQgMS41MDItMy4xMzggNC44Mi01LjE2OCA4LjQ1LTUuMTY4IDUuMTEyIDAgOS4yNzQgMy45NTQgOS4yNzQgOC44MTQgMCAxLjgyOC0xLjU1OCAzLjMxMy0zLjQ2NSAzLjMxMy0xLjkwNiAwLTMuNDY0LTEuNDg0LTMuNDY0LTMuMzEyIDAtMS4yMDQtMS4wNTItMi4xODgtMi4zNC0yLjE4OC0xLjI4OCAwLTIuMzQuOTgtMi4zNCAyLjE4OCAwIDEuOTE4Ljc0OCAzLjcyNCAyLjEwNCA1LjA3NCAxLjA2MyAxLjA1NyAyLjA5OCAxLjY0MiAzLjY4NCAyLjA3NmEuNTYzLjU2MyAwIDAgMSAuMzk0LjY5LjU1Ni41NTYgMCAwIDEtLjU0LjQxMnoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMCAwaDI3djI3SDAiLz48L2c+PC9zdmc+);
}

.fingerprint-icon-container.default:hover .fingerprint-icon-image {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjciIGhlaWdodD0iMjciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMjAuMDM2IDUuMDNhLjYyMS42MjEgMCAwIDEtLjI2LS4wNjNjLTIuMTUzLTEuMTE0LTQuMDI2LTEuNTkyLTYuMjY1LTEuNTkyLTIuMjMyIDAtNC4zMzYuNTM0LTYuMjY1IDEuNTg2YS41NjMuNTYzIDAgMSAxLS41NC0uOTg5IDE0LjA5NyAxNC4wOTcgMCAwIDEgNi44MDYtMS43MmMyLjM5OCAwIDQuNDkuNTMgNi43ODUgMS43MTYuMjc2LjE0LjM4Mi40ODMuMjQyLjc2YS41Ny41NyAwIDAgMS0uNS4zMDN6TTMuOTM3IDEwLjkzNGEuNi42IDAgMCAxLS4zMjYtLjEuNTYyLjU2MiAwIDAgMS0uMTM0LS43ODNBMTEuNzE3IDExLjcxNyAwIDAgMSA3LjcgNi4zNjhjMy41NC0xLjgzIDguMDYtMS44MzQgMTEuNjA1LS4wMTJhMTEuNzkgMTEuNzkgMCAwIDEgNC4yMiAzLjY1Ni41Ni41NiAwIDAgMS0uMTMuNzgyLjU2NS41NjUgMCAwIDEtLjc4OC0uMTMgMTAuNTcyIDEwLjU3MiAwIDAgMC0zLjgxNC0zLjMwNmMtMy4yMy0xLjY2LTcuMzUyLTEuNjU0LTEwLjU3NS4wMWExMC41OSAxMC41OSAwIDAgMC0zLjgyIDMuMzM2LjU3LjU3IDAgMCAxLS40Ni4yM3ptNy4wMzcgMTMuNTczYS41NTYuNTU2IDAgMCAxLS40LS4xN2MtLjk3Mi0uOTgzLTEuNS0xLjYwNy0yLjI2LTIuOTYzLS43NzctMS4zODQtMS4xODctMy4wNzctMS4xODctNC44ODggMC0zLjM0IDIuODU3LTYuMDY0IDYuMzczLTYuMDY0czYuMzczIDIuNzE3IDYuMzczIDYuMDY0YS41NjMuNTYzIDAgMCAxLTEuMTI0LS4wMDFjMC0yLjcyMy0yLjM1LTQuOTQtNS4yNDgtNC45NC0yLjg5IDAtNS4yNDggMi4yMTctNS4yNDggNC45NCAwIDEuNjIuMzYgMy4xMTYgMS4wNCA0LjMzNy43MjYgMS4yOTMgMS4yMSAxLjg1IDIuMDc2IDIuNzIyLjIyLjIyLjIyLjU4LS4wMDUuNzkzYS41MS41MSAwIDAgMS0uMzkuMTY4em04LjA2LTIuMDhjLTEuMzM4IDAtMi41MTMtLjM0LTMuNDg2LS45OTctMS42Ny0xLjEzNS0yLjY3Mi0yLjk4LTIuNjcyLTQuOTM4YS41NjMuNTYzIDAgMCAxIDEuMTI1LjAwMWMwIDEuNTguODE2IDMuMDc2IDIuMTgzIDQuMDA1Ljc5My41NCAxLjcyNy44MDQgMi44NTIuODA0LjI3IDAgLjcyNi0uMDI4IDEuMTc2LS4xMDdhLjU2Ni41NjYgMCAwIDEgLjY1My40NTYuNTY2LjU2NiAwIDAgMS0uNDU2LjY1MyA4LjA3OCA4LjA3OCAwIDAgMS0xLjM3Mi4xMjR6TTE2Ljc3IDI0Ljc1Yy0uMDUgMC0uMS0uMDA2LS4xNDYtLjAyMy0xLjc5NC0uNDktMi45NjQtMS4xNTMtNC4xOC0yLjM2MmE4LjIzMiA4LjIzMiAwIDAgMS0yLjQzNS01Ljg3MmMwLTEuODMgMS41NTItMy4zMTQgMy40NjUtMy4zMTQgMS45MTIgMCAzLjQ2NSAxLjQ4NCAzLjQ2NSAzLjMxMyAwIDEuMjAzIDEuMDUyIDIuMTg4IDIuMzQgMi4xODggMS4yODggMCAyLjM0LS45NzggMi4zNC0yLjE4OCAwLTQuMjQtMy42NTYtNy42OS04LjE1LTcuNjktMy4yIDAtNi4xMiAxLjc4LTcuNDM3IDQuNTM1LS40NC45MS0uNjU4IDEuOTc0LS42NTggMy4xNTUgMCAuODc4LjA4IDIuMjYyLjc0OCA0LjA1NmEuNTY3LjU2NyAwIDAgMS0uMzMyLjcyNi41NjguNTY4IDAgMCAxLS43MjYtLjMzMmMtLjU1LTEuNDgtLjgyLTIuOTMtLjgyLTQuNDUgMC0xLjM1LjI1OC0yLjU3Ni43Ny0zLjY0IDEuNTAyLTMuMTM4IDQuODItNS4xNjggOC40NS01LjE2OCA1LjExMiAwIDkuMjc0IDMuOTU0IDkuMjc0IDguODE0IDAgMS44MjgtMS41NTggMy4zMTMtMy40NjUgMy4zMTMtMS45MDYgMC0zLjQ2NC0xLjQ4NC0zLjQ2NC0zLjMxMiAwLTEuMjA0LTEuMDUyLTIuMTg4LTIuMzQtMi4xODgtMS4yODggMC0yLjM0Ljk4LTIuMzQgMi4xODggMCAxLjkxOC43NDggMy43MjQgMi4xMDQgNS4wNzQgMS4wNjMgMS4wNTcgMi4wOTggMS42NDIgMy42ODQgMi4wNzZhLjU2My41NjMgMCAwIDEgLjM5NC42OS41NTYuNTU2IDAgMCAxLS41NC40MTJ6IiBmaWxsPSIjNDI4NUY0Ii8+PHBhdGggZD0iTTAgMGgyN3YyN0gwIi8+PC9nPjwvc3ZnPg==);
}

.fingerprint-icon-container.signin .fingerprint-icon-image {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjciIGhlaWdodD0iMjciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMjAuMDM2IDUuMDNhLjYyMS42MjEgMCAwIDEtLjI2LS4wNjNjLTIuMTUzLTEuMTE0LTQuMDI2LTEuNTkyLTYuMjY1LTEuNTkyLTIuMjMyIDAtNC4zMzYuNTM0LTYuMjY1IDEuNTg2YS41NjMuNTYzIDAgMSAxLS41NC0uOTg5IDE0LjA5NyAxNC4wOTcgMCAwIDEgNi44MDYtMS43MmMyLjM5OCAwIDQuNDkuNTMgNi43ODUgMS43MTYuMjc2LjE0LjM4Mi40ODMuMjQyLjc2YS41Ny41NyAwIDAgMS0uNS4zMDN6TTMuOTM3IDEwLjkzNGEuNi42IDAgMCAxLS4zMjYtLjEuNTYyLjU2MiAwIDAgMS0uMTM0LS43ODNBMTEuNzE3IDExLjcxNyAwIDAgMSA3LjcgNi4zNjhjMy41NC0xLjgzIDguMDYtMS44MzQgMTEuNjA1LS4wMTJhMTEuNzkgMTEuNzkgMCAwIDEgNC4yMiAzLjY1Ni41Ni41NiAwIDAgMS0uMTMuNzgyLjU2NS41NjUgMCAwIDEtLjc4OC0uMTMgMTAuNTcyIDEwLjU3MiAwIDAgMC0zLjgxNC0zLjMwNmMtMy4yMy0xLjY2LTcuMzUyLTEuNjU0LTEwLjU3NS4wMWExMC41OSAxMC41OSAwIDAgMC0zLjgyIDMuMzM2LjU3LjU3IDAgMCAxLS40Ni4yM3ptNy4wMzcgMTMuNTczYS41NTYuNTU2IDAgMCAxLS40LS4xN2MtLjk3Mi0uOTgzLTEuNS0xLjYwNy0yLjI2LTIuOTYzLS43NzctMS4zODQtMS4xODctMy4wNzctMS4xODctNC44ODggMC0zLjM0IDIuODU3LTYuMDY0IDYuMzczLTYuMDY0czYuMzczIDIuNzE3IDYuMzczIDYuMDY0YS41NjMuNTYzIDAgMCAxLTEuMTI0LS4wMDFjMC0yLjcyMy0yLjM1LTQuOTQtNS4yNDgtNC45NC0yLjg5IDAtNS4yNDggMi4yMTctNS4yNDggNC45NCAwIDEuNjIuMzYgMy4xMTYgMS4wNCA0LjMzNy43MjYgMS4yOTMgMS4yMSAxLjg1IDIuMDc2IDIuNzIyLjIyLjIyLjIyLjU4LS4wMDUuNzkzYS41MS41MSAwIDAgMS0uMzkuMTY4em04LjA2LTIuMDhjLTEuMzM4IDAtMi41MTMtLjM0LTMuNDg2LS45OTctMS42Ny0xLjEzNS0yLjY3Mi0yLjk4LTIuNjcyLTQuOTM4YS41NjMuNTYzIDAgMCAxIDEuMTI1LjAwMWMwIDEuNTguODE2IDMuMDc2IDIuMTgzIDQuMDA1Ljc5My41NCAxLjcyNy44MDQgMi44NTIuODA0LjI3IDAgLjcyNi0uMDI4IDEuMTc2LS4xMDdhLjU2Ni41NjYgMCAwIDEgLjY1My40NTYuNTY2LjU2NiAwIDAgMS0uNDU2LjY1MyA4LjA3OCA4LjA3OCAwIDAgMS0xLjM3Mi4xMjR6TTE2Ljc3IDI0Ljc1Yy0uMDUgMC0uMS0uMDA2LS4xNDYtLjAyMy0xLjc5NC0uNDktMi45NjQtMS4xNTMtNC4xOC0yLjM2MmE4LjIzMiA4LjIzMiAwIDAgMS0yLjQzNS01Ljg3MmMwLTEuODMgMS41NTItMy4zMTQgMy40NjUtMy4zMTQgMS45MTIgMCAzLjQ2NSAxLjQ4NCAzLjQ2NSAzLjMxMyAwIDEuMjAzIDEuMDUyIDIuMTg4IDIuMzQgMi4xODggMS4yODggMCAyLjM0LS45NzggMi4zNC0yLjE4OCAwLTQuMjQtMy42NTYtNy42OS04LjE1LTcuNjktMy4yIDAtNi4xMiAxLjc4LTcuNDM3IDQuNTM1LS40NC45MS0uNjU4IDEuOTc0LS42NTggMy4xNTUgMCAuODc4LjA4IDIuMjYyLjc0OCA0LjA1NmEuNTY3LjU2NyAwIDAgMS0uMzMyLjcyNi41NjguNTY4IDAgMCAxLS43MjYtLjMzMmMtLjU1LTEuNDgtLjgyLTIuOTMtLjgyLTQuNDUgMC0xLjM1LjI1OC0yLjU3Ni43Ny0zLjY0IDEuNTAyLTMuMTM4IDQuODItNS4xNjggOC40NS01LjE2OCA1LjExMiAwIDkuMjc0IDMuOTU0IDkuMjc0IDguODE0IDAgMS44MjgtMS41NTggMy4zMTMtMy40NjUgMy4zMTMtMS45MDYgMC0zLjQ2NC0xLjQ4NC0zLjQ2NC0zLjMxMiAwLTEuMjA0LTEuMDUyLTIuMTg4LTIuMzQtMi4xODgtMS4yODggMC0yLjM0Ljk4LTIuMzQgMi4xODggMCAxLjkxOC43NDggMy43MjQgMi4xMDQgNS4wNzQgMS4wNjMgMS4wNTcgMi4wOTggMS42NDIgMy42ODQgMi4wNzZhLjU2My41NjMgMCAwIDEgLjM5NC42OS41NTYuNTU2IDAgMCAxLS41NC40MTJ6IiBmaWxsPSIjNDI4NUY0Ii8+PHBhdGggZD0iTTAgMGgyN3YyN0gwIi8+PC9nPjwvc3ZnPg==);
}

.fingerprint-icon-container.failed .fingerprint-icon-image {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iI0U1MUMyMyI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+PHBhdGggZD0iTTExIDE1aDJ2MmgtMnptMC04aDJ2NmgtMnptLjk5LTVDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiLz48L3N2Zz4=);
}

.pod input[type='password'].hidden::-webkit-input-placeholder {
  color: grey;
}

.pod input[type='password'].default::-webkit-input-placeholder {
  color: grey;
}

.pod input[type='password'].signin::-webkit-input-placeholder {
  color: var(--google-blue-500);
}

.pod input[type='password'].failed::-webkit-input-placeholder {
  color: var(--google-red-500);
}

.action-box-menu {
  display: none;
  z-index: 6;
}

.action-box-area.active ~ .action-box-menu {
  background-color: white;
  border: 1px solid lightgray;
  border-radius: 2px;
  display: flex;
  flex-direction: column;
  font-size: 13px;
  position: absolute;
  right: 5px;
  width: 220px;
}

.action-box-area.active ~ .action-box-menu.left-edge-offset {
  left: 0 !important;
}

.action-box-area.active ~ .action-box-menu.right-edge-offset {
  right: 0 !important;
}

.action-box-area.active ~ .action-box-menu:not(.menu-moved-up) {
  top: 18px;
}

.action-box-area.active ~ .action-box-menu.menu-moved-up {
  bottom: 207px;
}

.action-box-area.menu-moved-up {
  transform: rotate(180deg);
}

html[dir=rtl] .action-box-area.active ~ .action-box-menu {
  left: 5px;
  right: auto;
}

.action-box-menu-title {
  color: #757575;
  display: flex;
  flex-direction: column;
  padding: 7px 20px;
}

.action-box-menu-title:focus {
  outline-style: none;
}

.action-box-menu-title-name,
.action-box-menu-title-email {
  flex: none;
  height: 23px;
  line-height: 19px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.action-box-menu-remove {
  border-top: 1px solid lightgray;
  line-height: 19px;
  min-height: 24px;
  outline: none;
  padding: 12px 20px 7px;
}

.action-box-menu-remove:hover,
.action-box-menu-remove:focus {
  background-color: #f3f3f3;
}

.action-box-remove-user-warning {
  border-top: 1px solid lightgray;
  font-size: 12px;
  line-height: 18px;
  padding: 20px;
}

.action-box-remove-user-warning > div,
.action-box-remove-user-warning > table {
  padding-bottom: 20px;
}

.total-count {
  font-weight: bold;
}

.action-box-remove-user-warning-table-nonsync {
  border-spacing: 0;
  width: 100%;
}

.action-box-remove-user-warning-table td {
  padding: 0;
}

.action-box-remove-user-warning-table-numbers {
  color: #757575;
  text-align: end;
}

/* Hide dialog elements not in a correct category. Only combinations currently
   in use are included here. */
.pod.legacy-supervised .non-sync,
.pod.legacy-supervised .action-box-remove-user-warning-text,
.pod.legacy-supervised .action-box-remove-non-owner-user-warning-text,
.pod:not(.legacy-supervised)
    .action-box-remove-legacy-supervised-user-warning-text,
.pod.synced .non-sync {
  display: none;
}

.user-type-bubble {
  background-color: white;
  border: 1px solid lightgray;
  border-radius: 2px;
  left: 5px;
  opacity: 0;
  padding: 17px;
  position: absolute;
  top: 20px;
  transition: all 100ms;
  visibility: hidden;
  width: 200px;
  z-index: 7;
}

html[dir=rtl] .user-type-bubble {
  left: auto;
  right: 5px;
}

.bubble-shown,
.user-type-icon-area.policy:hover ~ .user-type-bubble {
  opacity: 1;
  visibility: visible;
}

.user-type-bubble-header {
  font-weight: bold;
  margin-bottom: 14px;
}

/**** Public account user pod rules *******************************************/

.pod.public-account.expanded {
  height: 230px;
  width: 500px;
}

.pod.public-account.expanded.advanced {
  height: 280px;
  width: 610px;
}

.pod.public-account.focused .name-container {
  display: flex;
}

.pod.public-account.expanded .name-container {
  display: none;
}

.pod.public-account .learn-more-container {
  display: block;
  flex: none;
}

.pod.public-account .learn-more {
  top: 22px;
}

.expanded-pane {
  display: none;
}

.pod.public-account.animating .expanded-pane,
.pod.public-account.expanded .expanded-pane {
  display: block;
  font-size: 12px;
  margin: 10px;
  overflow: hidden;
  z-index: 1;
}

.expanded-pane-contents {
  display: flex;
  flex-direction: column;
  float: right;
  height: 213px;
  width: 490px;
}

.pod.public-account.transitioning-to-advanced .expanded-pane-contents {
  transition: width 180ms;
}

.pod.public-account.expanded.advanced .expanded-pane-contents {
  height: 263px;
  width: 600px;
}

html[dir=rtl] .expanded-pane-contents {
  float: left;
}

.side-container {
  -webkit-margin-start: 200px;
  flex: auto;
}

.expanded-pane-name {
  font-size: 19px;
  margin-bottom: 11px;
  margin-top: -2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.expanded-pane-container {
  color: grey;
}

.reminder {
  margin-top: 20px;
}

.language-and-input-section {
  display: none;
}

.pod.public-account.transitioning-to-advanced .language-and-input-section {
  display: block;
  opacity: 0;
  transition: opacity 180ms ease 180ms;
}

.pod.public-account.expanded.advanced .language-and-input-section {
  display: block;
  opacity: 1;
}

.select-with-label {
  display: flex;
  margin-top: 20px;
}

.language-select-label,
.keyboard-select-label {
  flex: none;
  margin-top: 3px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  width: 170px;
}

.select-container {
  flex: auto;
}

.language-select,
.keyboard-select {
  width: 100%;
}

.bottom-container {
  -webkit-margin-start: 20px;
  align-items: center;
  display: flex;
  flex-direction: row-reverse;
  flex: none;
  font-size: 13px;
  justify-content: space-between;
  margin-bottom: 4px;
}

.expanded-pane-learn-more-container,
.enter-button {
  flex: none;
}

.expanded-pane-learn-more,
.pod.public-account .learn-more {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yNCAxNFY2SDR2MzZoNDBWMTRIMjR6TTEyIDM4SDh2LTRoNHY0em0wLThIOHYtNGg0djR6bTAtOEg4di00aDR2NHptMC04SDh2LTRoNHY0em04IDI0aC00di00aDR2NHptMC04aC00di00aDR2NHptMC04aC00di00aDR2NHptMC04aC00di00aDR2NHptMjAgMjRIMjR2LTRoNHYtNGgtNHYtNGg0di00aC00di00aDE2djIwem0tNC0xNmgtNHY0aDR2LTR6bTAgOGgtNHY0aDR2LTR6Ii8+PC9zdmc+);
  background-size: 18px;
  height: 18px;
  margin-top: -10px;
  position: relative;
  width: 18px;
}

.expanded-pane-learn-more {
  top: 5px;
}

.info {
  flex: auto;
  margin: -10px 25px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.monitoring-container {
  margin-top: 35px;
}

.monitoring-learn-more {
  color: rgb(49, 106, 197);
  text-decoration: none;
}

.monitoring-dialog-container .cr-dialog-shield {
  background: black;
  opacity: 0.5;
}

.monitoring-dialog-container .cr-dialog-buttons {
  display: none;
}

.monitoring-dialog-container .cr-dialog-frame {
  height: 170px;
  left: -46px;
  padding: 0px;
  position: relative;
  top: -24px;
  width: 430px;
}

.monitoring-dialog-container.advanced .cr-dialog-frame {
  left: -110px;
  top: 0px;
}

.monitoring-dialog-container .cr-dialog-close {
  color: grey;
  height: 34px;
  position: absolute;
  top: 0px;
  width: 34px;
}

.monitoring-dialog-container .cr-dialog-title {
  font-size: 16px;
  font-weight: bold;
  left: 20px;
  position: absolute;
  top: 15px;
}

.monitoring-dialog-container .cr-dialog-text {
  color: grey;
  font-size: 13px;
  overflow: visible;
  position: absolute;
  top: 20px;
}

.monitoring-dialog-container .cr-dialog-item {
  -webkit-margin-start: 42px;
  display: list-item;
  margin-bottom: -6px;
}

.language-and-input-container {
  -webkit-margin-end: 25px;
  flex: none;
}

.language-and-input {
  color: rgb(49, 106, 197);
  text-decoration: none;
}

.pod.public-account.expanded.advanced .language-and-input-container {
  display: none;
}

.enter-button {
  background-color: rgb(66, 133, 244);
  color: white;
  font-size: 12px;
  text-transform: none;
}

.enter-button.keyboard-focus {
  font-weight: normal;
}

.horizontal-line {
  border-bottom: 1px double #cccccc;
  bottom: 8px;
  position: relative;
}

/* Animations for the animated ellipsis: */
.animated-ellipsis-component0 {
  animation: ellipsis-component0 1.5s infinite;
}

@keyframes ellipsis-component0 {
  0% { opacity: 0; }
  25% { opacity: 1; }
  50% { opacity: 1; }
  75% { opacity: 1; }
  100% { opacity: 0; }
}

.animated-ellipsis-component1 {
  animation: ellipsis-component1 1.5s infinite;
}

@keyframes ellipsis-component1 {
  0% { opacity: 0; }
  25% { opacity: 0; }
  50% { opacity: 1; }
  75% { opacity: 1; }
  100% { opacity: 0; }
}

.animated-ellipsis-component2 {
  animation: ellipsis-component2 1.5s infinite;
}

@keyframes ellipsis-component2 {
  0% { opacity: 0; }
  25% { opacity: 0; }
  50% { opacity: 0; }
  75% { opacity: 1; }
  100% { opacity: 0; }
}
</style>
  <style>/* Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * Css based bubble.
 */

.bubble {
  background: rgba(0, 0, 0, 0.8);
  border-radius: 2px;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
  color: rgba(255, 255, 255, 0.87);
  font-size: 12px;
  margin: 2px;
  max-width: 240px;
  padding: 8px;
  position: absolute;
  transition: opacity 200ms ease-in-out;
}

body.chromeos .bubble {
  margin: unset;
  padding: 14px;
}

/* --- oldstyle begin --- */

.bubble[oldstyle] {
  background: white;
  border: 1px solid rgba(0, 0, 0, 0.25);
  color: unset;
}

.bubble[oldstyle]::before {
  border-style: solid;
  border-width: 8px;
  content: '';
  display: block;
  position: absolute;
}

.bubble-top::before {
  border-color: rgba(0, 0, 0, 0.25) transparent transparent transparent;
  bottom: -16px;
}

html[dir=ltr] .bubble-top::before {
  left: 17px;
}

html[dir=rtl] .bubble-top::before {
  right: 17px;
}

html[dir=ltr] .bubble-right::before,
html[dir=rtl] .bubble-left::before {
  border-color: transparent rgba(0, 0, 0, 0.25) transparent transparent;
  left: -16px;
  top: 17px;
}

.bubble-bottom::before {
  border-color: transparent transparent rgba(0, 0, 0, 0.25) transparent;
  top: -16px;
}

html[dir=ltr] .bubble-bottom::before {
  left: 17px;
}

html[dir=rtl] .bubble-bottom::before {
  right: 17px;
}

html[dir=ltr] .bubble-left::before,
html[dir=rtl] .bubble-right::before {
  border-color: transparent transparent transparent rgba(0, 0, 0, 0.25);
  right: -16px;
  top: 17px;
}

.bubble[oldstyle]::after {
  border-style: solid;
  border-width: 8px;
  content: '';
  display: block;
  position: absolute;
}

.bubble-top::after {
  border-color: white transparent transparent transparent;
  bottom: -15px;
}

html[dir=ltr] .bubble-top::after {
  left: 17px;
}

html[dir=rtl] .bubble-top::after {
  right: 17px;
}

html[dir=ltr] .bubble-right::after,
html[dir=rtl] .bubble-left::after {
  border-color: transparent white transparent transparent;
  left: -15px;
  top: 17px;
}

.bubble-bottom::after {
  border-color: transparent transparent white transparent;
  top: -15px;
}

html[dir=ltr] .bubble-bottom::after {
  left: 17px;
}

html[dir=rtl] .bubble-bottom::after {
  right: 17px;
}

html[dir=ltr] .bubble-left::after,
html[dir=rtl] .bubble-right::after {
  border-color: transparent transparent transparent white;
  right: -15px;
  top: 17px;
}

/* --- oldstyle end --- */

body.chromeos .error-message-bubble::before {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yIDQyaDQ0TDI0IDQgMiA0MnptMjQtNmgtNHYtNGg0djR6bTAtOGgtNHYtOGg0djh6Ii8+PC9zdmc+);
  -webkit-mask-position: left top;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 20px;
  background-color: rgb(255,255,255);
  content: '';
  display: block;
  height: 20px;
  left: 14px;
  position: absolute;
  top: 10px;
  width: 20px;
}

body:not(.chromeos) .error-message-bubble {
  -webkit-padding-start: 30px;
  background: url(chrome://theme/IDR_WARNING) left top no-repeat;
  background-size: 24px;
}

body.chromeos .error-message-bubble {
  padding-top: 19px;
}

.bubble[match-width] .error-message-bubble {
  -webkit-padding-start: unset;
  padding-top: 20px;
}

body.chromeos .bubble a {
  color: #7baaf7;
  text-decoration: none;
}

.error-message-bubble-padding {
  margin-bottom: 10px;
}

html[dir=rtl] .error-message-bubble {
  background-position: right top;
}
</style>
  <style>/* Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * This is the stylesheet used by the Out of the box experience (OOBE) flow,
 * sign in and lock screens.
 */

:root {
  --google-grey-700: rgb(95, 99, 104);
  --shelf-area-height-base: 57px;
}

html,
body {
  height: 100%;
  width: 100%;
}

html {
  --shelf-area-height: var(--shelf-area-height-base);
}

html[virtual-keyboard=true],
html[screen=gaia-signin] {
  /* has to be with px suffix to be used in calc */
  --shelf-area-height: 0px;
}

body {
  background-color: transparent;
  cursor: default;
  font-size: 14px;
  margin: 0;
  overflow: hidden;
  padding: 0;
  position: fixed;
  top: 0;
}

html[full-screen-dialog] body {
  background-color: white;
}

/* Padding defaults */
html {
  --oobe-dialog-footer-height: 96px;
  --oobe-dialog-footer-padding: 32px;
  --oobe-dialog-content-padding: 64px;

  /* This size fits 675px screen with docked magnifier and shelf. Basically this
   * is calc(675px * (1 - 1 / 3) - 10px - var(--shelf-area-height-base)) where
   * 3 is DockedMagnifierControllerImpl::kScreenHeightDivisor
   * 10 is DockedMagnifierControllerImpl::kSeparatorHeight */
  --oobe-dialog-min-height: 384px;

  --oobe-dialog-side-margin: 48px;
}

html[screen=gaia-signin] {
  /* has to be with px suffix to be used in calc */
  --oobe-dialog-side-margin: 0px;
}


@media screen and (max-width: 864px), (max-height: 736px) {
  html[screen=oobe] {
    --oobe-dialog-footer-height: 80px;
    --oobe-dialog-footer-padding: 24px;
    --oobe-dialog-content-padding: 32px;
  }
}

html[screen=gaia-signin][dialog-padding=narrow] {
  --oobe-dialog-footer-height: 80px;
  --oobe-dialog-footer-padding: 24px;
  --oobe-dialog-content-padding: 32px;
}

body.solid {
  background-color: white;
}

button {
  font-family: inherit;
  outline: none;
}

/* Follow same focus coloring as in widgets.css */
/* Do not apply this style to restricted button state. */
button.custom-appearance:not(.button-restricted):not(.button-fancy):not(
    [is="gaia-icon-button"]) {
  border: 2px solid transparent;
  /* Don't grey out disabled buttons. */
  color: buttontext !important;
  transition: border-color 200ms;
}

/* ':focus' used three times to increase specificity. */
button.custom-appearance:focus:focus:focus {
  border-color: rgba(66, 133, 244, 0.6); /* #4285f4 */
}

button:not(.custom-appearance) {
  min-width: 72px !important;
}

button.button-fancy {
  min-width: 72px !important;
}

button.button-blue {
  background-image: linear-gradient(rgb(93, 154, 255),
                                    rgb(93, 154, 255) 38%,
                                    rgb(88, 145, 240));
  border: 1px solid rgba(45, 102, 195, 1);
  border-radius: 2px;
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 1px 2px
              rgba(255, 255, 255, 0.4);
  color: #fff;
  font-size: 14px;
  margin: 0 1px 0 0;
  min-height: 2em;
  min-width: 4em;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5);
}


button.button-blue:hover {
  background-image: linear-gradient(rgb(101, 158, 253),
                                    rgb(101, 158, 253) 38%,
                                    rgb(96, 151, 241));
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25), inset 0 1px 2px
              rgba(255, 255, 255, 0.4);
}

button.button-blue:active {
  background-image: linear-gradient(rgb(96, 149, 237),
                                    rgb(96, 149, 237) 38%,
                                    rgb(96, 149, 237));
  border: 1px solid rgba(38, 84, 160, 1);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);
}

button.button-red {
  background-image: linear-gradient(rgb(221, 75, 57),
                                    rgb(221, 75, 57) 38%,
                                    rgb(197, 66, 49));
  border: 1px solid rgba(167, 57, 44, 1);
  border-radius: 2px;
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.15), inset 0 1px 2px
      rgba(255, 255, 255, 0.4);
  color: #fff;
  margin: 0 1px 0 0;
  min-height: 2em;
  min-width: 4em;
  text-shadow: 0 1px 0 rgba(0, 0, 0, 0.15);
}

button.button-red:hover {
  background-image: linear-gradient(rgb(231, 78, 59),
                                    rgb(231, 78, 59) 38%,
                                    rgb(209, 70, 52));
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25), inset 0 1px 2px
      rgba(255, 255, 255, 0.4);
}

button.button-red:active {
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}

.label,
.flexible-label {
  display: block;
  margin: 5px 5px 5px 0;
  padding: 5px 5px 5px 0;
}

.label {
  width: 170px;
}

.flexible-label {
  max-width: 250px;
}

[hidden] {
  display: none !important;
}

#bubble {
  transition: 250ms opacity;
}

span.bold {
  font-weight: bold;
}

#version-labels {
  color: var(--google-grey-700);
  font-size: 13px;
  margin: 10px;
  position: relative;
  text-align: end;
  transition: all 500ms linear;
  z-index: 1;
}

html[screen=user-adding] #version-labels {
  color: white;
}

#bluetooth-name {
  background: rgba(255,255,255,.17);
  border-radius: 4px;
  display: inline-block;
  font-size: 12px;
  height: 28px;
  line-height: 28px;
  padding: 0 12px;
}

#background {
  background-size: 100% 100%;
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  transition: 700ms opacity;
  width: 100%;
}

.background-initial {
  opacity: 0;
}

.dimmed-background {
  background-color: black;
  opacity: 0.5;
}

.throbber {
  -webkit-margin-end: 0.5em;
  margin-top: 1px;
}
</style>
  <style>/* Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#outer-container {
  -webkit-box-align: center;
  -webkit-box-pack: center;
  bottom: var(--shelf-area-height);  /* Leave space for the header bar */
  display: -webkit-box;
  left: 0;
  min-height: 717px; /* This enables scrolling. Min resolution: 1024x768 */
  perspective: 1px; /* Workaround, see http://crbug.com/360567 */
  position: absolute;
  right: 0;
  top: 0;
  z-index: 1;
}

.oobe-display #outer-container {
  bottom: 47px; /* header-bar is 47 pixels high during OOBE */
  perspective: 600px;
}

.pin-container.pin-enabled {
  opacity: 1;
  transition: opacity 200ms ease-in-out 180ms;
  visibility: visible;
}

.pin-container.pin-disabled {
  opacity: 0; /* Opacity is set to 1 after the pin element is loaded. */
  transition: none;
  visibility: hidden; /* Needed because pin-keyboard's offsetHeight is
                         checked to determine if loaded. */
}

#scroll-container {
  bottom: 0;        /* Allows content overlap with control bar. */
  left: 0;
  overflow-x: hidden;
  overflow-y: auto;
  position: absolute;
  right: 0;
  top: 0;
}

#scroll-container::-webkit-scrollbar {
  display: none;
}

#inner-container {
  border-radius: 2px;
  position: relative;
}

#inner-container.animation {
  overflow: hidden;
}

#inner-container.disabled {
  opacity: 0.4;
  pointer-events: none;
}

/* Screens that have a border and background. */
#oobe.auto-enrollment-check #inner-container,
#oobe.autolaunch #inner-container,
#oobe.confirm-password #inner-container,
#oobe.debugging #inner-container,
#oobe.enrollment #inner-container,
#oobe.fatal-error #inner-container,
#oobe.gaia-signin #inner-container,
#oobe.hid-detection #inner-container,
#oobe.kiosk-enable #inner-container,
#oobe.oauth-enrollment #inner-container,
#oobe.password-changed #inner-container,
#oobe.ad-password-change #inner-container,
#oobe.supervised-user-creation #inner-container,
#oobe.supervised-user-creation-dialog #inner-container,
#oobe.terms-of-service #inner-container,
#oobe.arc-tos #inner-container,
#oobe.update #inner-container,
#oobe.update-required #inner-container,
#oobe.user-image #inner-container,
#oobe.wrong-hwid #inner-container,
#oobe.unrecoverable-cryptohome-error #inner-container {
  background: white;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3),
              0 4px 23px 5px rgba(0, 0, 0, 0.2),
              0 2px 6px rgba(0, 0, 0, 0.15);
}

#oobe.error-message #inner-container,
#oobe.tpm-error-message #inner-container {
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3),
              0 4px 23px 5px rgba(0, 0, 0, 0.2),
              0 2px 6px rgba(0, 0, 0, 0.15);

}

/* Only play this animation when 'down' class is removed. */
.oobe-display #inner-container:not(.down) {
  transition: transform 200ms ease-in-out;
}

.oobe-display #inner-container.down {
  transform: translateY(50px) rotateX(-2.5deg);
}

#account-picker-dot,
#app-launch-splash-dot,
#arc-kiosk-splash-dot,
#auto-enrollment-check-dot,
#autolaunch-dot,
#confirm-password-dot,
#debugging-dot,
#device-disabled-dot,
#enrollment-dot,
#error-message-dot,
#fatal-error-dot,
#hid-detection-dot,
#kiosk-enable-dot,
#oauth-enrollment-dot,
#password-changed-dot,
#reset-dot,
#supervised-user-creation-dialog-dot,
#supervised-user-creation-dot,
#terms-of-service-dot,
#arc-tos-dot,
#tpm-error-message-dot,
#update-required-dot,
#wrong-hwid-dot,
#unrecoverable-cryptohome-error-dot {
  display: none;
}

#oobe.connect #connect-dot,
#oobe.enrollment #gaia-signin-dot,
#oobe.enrollment #signin-dot,
#oobe.eula #eula-dot,
#oobe.gaia-signin #gaia-signin-dot,
#oobe.oauth-enrollment #gaia-signin-dot,
#oobe.oauth-enrollment #signin-dot,
#oobe.signin #signin-dot,
#oobe.update #update-dot,
#oobe.user-image #user-image-dot {
  opacity: 1;
}

body:not(.oobe-display) #inner-container {
  height: 262px;
  padding: 0;
  width: 1100px;
}

#outer-container.fullscreen,
#outer-container.fullscreen #oobe,
#outer-container.fullscreen #oobe #inner-container {
  height: 100%;
  width: 100%;
}

html[build=chrome] #header-sections {
  -webkit-margin-start: -48px;
  margin-top: -1px;
}

html[build=chromium] #header-sections {
  -webkit-margin-start: 5px;
  margin-top: -1px;
}

.header-section {
  color: rgb(119, 120, 123);  /* Should matching text color of the logo. */
  display: none;
  font-size: 23px;
  line-height: 31px;
  text-transform: lowercase;
  width: 23em;
}

.header-section::before {
  /* Divider in header between product name and title,
   * like "[Product name] > [step header]". */
  content: '\00A0\203A\00A0\00A0';
}
</style>
  <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
  <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">

  <link rel="import" href="chrome://resources/html/polymer.html">
  <link rel="import" href="/control_bar.html">
  <link rel="import" href="/error_dialog.html">
  <link rel="import" href="/shared_styles.html">
  <link rel="import" href="/strings.html">
  <link rel="import" href="/user_manager_pages.html">
  <link rel="import" href="/user_manager_tutorial.html">
  <!-- Make sure cr-button is imported to use in user_pod_template.html -->
  <link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
  <link rel="import" href="chrome://resources/html/cr/ui.html">
  <link rel="import" href="chrome://resources/html/util.html">
  <!-- Make sure iron-icon and cr iconset are imported to use in
       user_pod_template.html -->
  <link rel="import" href="chrome://resources/cr_elements/icons.html">
  <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
  <link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
  <custom-style>
    <style is="custom-style" include="shared-styles">
      @media (prefers-color-scheme: dark) {
        body {
          background-color: var(--google-grey-900);
        }
      }

      user-manager-pages,
      #login-header-bar {
        bottom: 0;
        left: 0;
        position: absolute;
        right: 0;
      }

      user-manager-pages {
        top: 0;
      }

      #login-header-bar.shadow {
        box-shadow: 0 -1px 3px rgba(0, 0, 0, .2);
      }

      /* Overrides src/ui/login/screen_container.css for the desktop user
       * manager. */

      #outer-container {
        -webkit-box-orient: vertical;
        min-height: 0;
        overflow-x: hidden;
        overflow-y: auto;
        padding: 40px 0 30px;
        z-index: initial;
      }

      .bubble {
        font: inherit;
      }

      .bubble.faded {
        opacity: 0;
      }

      /* The name-container font-sizes is to counteract the countainer's
       * scale(0.8), so that the text still stays legible. */
      podrow[ncolumns='6'] .pod .name-container {
        font-size: 1.25em;
        transition: font-size 180ms;
      }

      podrow[ncolumns='6'] .pod.focused .name-container {
        font-size: 1em;
      }

      .pod {
        @apply --cr-card-elevation;
        background-color: var(--cr-card-background-color);
        border-radius: var(--cr-card-border-radius);
        color: var(--cr-primary-text-color);
        cursor: default;
        height: auto;
        transform: none;
        width: auto;
      }

      .pod.faded {
        opacity: .6;
      }

      .pod.focused {
        box-shadow: 0 10px 10px 0 rgba(0, 0, 0, .26),
                    0 14px 28px 0 rgba(0, 0, 0, .25);
      }

      .pod .user-image-gradient-area,
      .pod .user-image-pane {
        border-top-left-radius: 2px;
        border-top-right-radius: 2px;
      }

      .pod .user-image-pane {
        overflow: hidden;
        position: static;
      }

      .pod .user-image {
        height: 160px;
        width: 160px;
      }

      .pod .main-pane {
        line-height: 20px;
        padding: 10px;
        position: static;
      }

      .pod .main-pane .name-container {
        display: block;
        position: static;
        width: auto;
      }

      .pod .main-pane .name-container .name,
      .reauth-hint-container .reauth-name-hint {
        font-size: inherit;
        margin: 0;
        padding: 0;
        text-align: initial;
        width: 120px;
      }

      .pod.locked.child .name-container .name {
        width: 92px;
      }

      @media (prefers-color-scheme: dark) {
        .pod .main-pane .name-container {
          background-color: transparent;
        }
      }

      @media (prefers-color-scheme: dark) {
        .name {
          color: inherit;
        }
      }

      .pod .indicator-container {
        bottom: 10px;
        display: flex;
        left: auto;
        position: absolute;
        right: 10px;
        top: auto;
      }

      html[dir='rtl'] .pod .indicator-container {
        left: 10px;
        right: auto;
      }

      /* Using -webkit-mask on the indicators allows us to tweak the color. */
      .pod .indicator-container > .indicator {
        -webkit-mask-position: center;
        -webkit-mask-repeat: no-repeat;
        -webkit-mask-size: 16px;
        background: var(--paper-grey-600);
        display: none;
        height: 20px;
        width: 20px;
      }

      @media (prefers-color-scheme: dark) {
        .pod .indicator-container > .indicator {
          background: var(--google-grey-refresh-500);
        }
      }

      .pod.locked .locked-indicator {
        -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMCAwaDQ4djQ4SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTM2IDE2aC0ydi00YzAtNS41Mi00LjQ4LTEwLTEwLTEwUzE0IDYuNDggMTQgMTJ2NGgtMmMtMi4yMSAwLTQgMS43OS00IDR2MjBjMCAyLjIxIDEuNzkgNCA0IDRoMjRjMi4yMSAwIDQtMS43OSA0LTRWMjBjMC0yLjIxLTEuNzktNC00LTR6TTI0IDM0Yy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHptNi4yLTE4SDE3Ljh2LTRjMC0zLjQyIDIuNzgtNi4yIDYuMi02LjIgMy40MiAwIDYuMiAyLjc4IDYuMiA2LjJ2NHoiLz48L3N2Zz4=);
        display: block;
      }

      .pod.locked.child .locked-indicator {
        margin-inline-start: 8px;
      }

      .pod.legacy-supervised .legacy-supervised-indicator {
        -webkit-mask-image:
            url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0zMyAyNGMyLjc2IDAgNC45OC0yLjI0IDQuOTgtNXMtMi4yMi01LTQuOTgtNWMtMi43NiAwLTUgMi4yNC01IDVzMi4yNCA1IDUgNXptLTE1LTJjMy4zMSAwIDUuOTgtMi42OSA1Ljk4LTZzLTIuNjctNi01Ljk4LTZjLTMuMzEgMC02IDIuNjktNiA2czIuNjkgNiA2IDZ6bTE1IDZjLTMuNjcgMC0xMSAxLjg0LTExIDUuNVYzOGgyMnYtNC41YzAtMy42Ni03LjMzLTUuNS0xMS01LjV6bS0xNS0yYy00LjY3IDAtMTQgMi4zNC0xNCA3djVoMTR2LTQuNWMwLTEuNy42Ny00LjY3IDQuNzQtNi45NEMyMSAyNi4xOSAxOS4zMSAyNiAxOCAyNnoiLz48L3N2Zz4=);
        display: block;
      }

      .pod.child .child-indicator {
        -webkit-mask-image:
            url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTI0IDRjMy4zMSAwIDYgMi42OSA2IDZzLTIuNjkgNi02IDYtNi0yLjY5LTYtNiAyLjY5LTYgNi02eiIvPjxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0wIDBoNDh2NDhIMFYweiIvPjxjaXJjbGUgZmlsbD0ibm9uZSIgY3g9IjI0IiBjeT0iMjYiIHI9IjQiLz48cGF0aCBkPSJNMjQgMThjLTYuMTYgMC0xMyAzLjEyLTEzIDcuMjN2MTEuNTRjMCAyLjMyIDIuMTkgNC4zMyA1LjIgNS42MyAyLjMyIDEgNS4xMiAxLjU5IDcuOCAxLjU5LjY2IDAgMS4zMy0uMDYgMi0uMTR2LTUuMmMtLjY3LjA4LTEuMzQuMTQtMiAuMTQtMi42MyAwLTUuMzktLjU3LTcuNjgtMS41NS42Ny0yLjEyIDQuMzQtMy42NSA3LjY4LTMuNjUuODYgMCAxLjc1LjExIDIuNi4yOSAyLjc5LjYyIDUuMiAyLjE1IDUuMiA0LjA0djQuNDdjMy4wMS0xLjMxIDUuMi0zLjMxIDUuMi01LjYzVjI1LjIzQzM3IDIxLjEyIDMwLjE2IDE4IDI0IDE4em0wIDEyYy0yLjIxIDAtNC0xLjc5LTQtNHMxLjc5LTQgNC00IDQgMS43OSA0IDQtMS43OSA0LTQgNHoiLz48L3N2Zz4=);
        display: block;
      }

      .action-box-area:focus ~ .user-image-gradient-area,
      .action-box-area.hovered ~ .user-image-gradient-area {
        background-image: linear-gradient(rgba(0, 0, 0, .2), transparent 100%);
        display: initial;
        height: 40px;
        position: absolute;
        top: 0;
        width: 100%;
      }

      .action-box-area {
        background-color: transparent;
      }

      .action-box-area.menu-moved-up {
        transform: none;
      }

      .action-box-area .action-box-button {
        display: none;
      }

      .action-box-area .action-box-icon {
        color: white;
        display: inline-flex;
        margin-top: 4px;
      }

      .pod.focused:not(.locked) .auth-container {
        display: none;
      }

      .pod.focused:not(.multiprofiles-policy-applied) .auth-container {
        left: 0;
      }

      .pod .auth-container input[type='password'] {
        font: inherit;
        line-height: inherit;
        padding: 10px;
        top: 0;
        width: 140px;
      }

      .pod .auth-container input[type='password']:focus {
        outline: 0;
      }

      .pod[auth-type='onlineSignIn'] .reauth-hint-container {
        flex-direction: row-reverse;
        margin: 0;
        padding: 10px;
      }

      .reauth-hint-container .reauth-warning {
        -webkit-mask-size: 16px;
        height: 20px;
        width: 20px;
      }

      .action-box-area.active .action-box-button {
        display: none;
      }

      .action-box-area.active ~ .action-box-menu:not(.menu-moved-up) {
        top: 8px;
      }

      .action-box-area.active ~ .action-box-menu {
        border: none;
        border-radius: var(--cr-card-border-radius);
        box-shadow: 0 10px 20px 0 rgba(0, 0, 0, .19);
        right: 8px;
        width: 224px;
      }

      html[dir=rtl] .action-box-area.active ~ .action-box-menu {
        left: 8px;
        right: auto;
      }

      @media (prefers-color-scheme: dark) {
        .action-box-area.active ~ .action-box-menu {
          background-color: var(--cr-menu-background-color);
          /* Adds 4% white on top of GG900. To/from are intentionally the same. */
          background-image: linear-gradient(rgba(255, 255, 255, .04),
                                            rgba(255, 255, 255, .04));
          box-shadow: var(--cr-menu-shadow);
        }

        .action-box-menu-remove:focus,
        .action-box-menu-remove:hover {
          background-color: var(--cr-menu-background-focus-color);
        }
      }

      .action-box-menu-title {
        color: inherit;
        padding: 16px 12px;
      }

      @media (prefers-color-scheme: dark) {
        .action-box-menu-title {
          border-bottom: var(--cr-separator-line);
        }
      }

      .action-box-menu-title-name,
      .action-box-menu-title-email {
        height: auto;
      }

      .action-box-menu-title-name {
        color: var(--cr-primary-text-color);
      }

      .action-box-menu-title-email {
        color: var(--cr-secondary-text-color);
      }

      .action-box-menu-remove {
        --side-gap: 12px;
        --vertical-gap: 8px;
        border-radius: var(--cr-card-border-radius);
        border-top: var(--user-manager-separator-line);
        line-height: 32px;
        padding: var(--vertical-gap) var(--side-gap);
      }

      @media (prefers-color-scheme: dark) {
        .action-box-menu-remove {
          border-radius: 0;
          border-top: none;
          margin: var(--vertical-gap) 0;
          padding: 0 var(--side-gap);
        }
      }

      .action-box-remove-user-warning {
        align-items: center;
        border-top: var(--user-manager-separator-line);
        display: flex;
        flex-direction: column;
        font-size: inherit;
        line-height: 20px;
        padding: 12px;
      }

      .action-box-remove-user-warning-text {
        max-width: 100%;
      }

      .action-box-remove-user-warning > * {
        word-wrap: break-word;
      }

      .total-count,
      .pod:not(.synced) .action-box-remove-user-warning-text {
        font-weight: 500;
      }

      #user-manager-prompt-message {
        align-items: center;
        color: var(--cr-primary-text-color);
        display: flex;
        font-size: 19px;
        margin-bottom: 45px;
        text-align: center;
      }

      #user-manager-prompt-message::before {
        -webkit-mask-image:
            url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTAgMGg0OHY0OEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yNCAxNFY2SDR2MzZoNDBWMTRIMjR6TTEyIDM4SDh2LTRoNHY0em0wLThIOHYtNGg0djR6bTAtOEg4di00aDR2NHptMC04SDh2LTRoNHY0em04IDI0aC00di00aDR2NHptMC04aC00di00aDR2NHptMC04aC00di00aDR2NHptMC04aC00di00aDR2NHptMjAgMjRIMjR2LTRoNHYtNGgtNHYtNGg0di00aC00di00aDE2djIwem0tNC0xNmgtNHY0aDR2LTR6bTAgOGgtNHY0aDR2LTR6Ii8+PC9zdmc+);
        -webkit-mask-size: 19px;
        background: currentcolor;
        content: '';
        display: inline-block;
        height: 19px;
        margin-inline-end: 11px;
        width: 19px;
      }

      #user-manager-prompt-message:empty {
        display: none;
      }

    </style>
  </custom-style>
</head>
<body>
  <user-manager-pages>
    <div id="outer-container">
      <div id="user-manager-prompt-message">$i18n{userManagerPromptMessage}</div>
      <user-manager-tutorial></user-manager-tutorial>
      <div id="oobe" class="faded">
        <div id="inner-container">
          <div id="step-logo" hidden>
            <div id="header-sections"></div>
          </div>
          <div id="account-picker" class="step faded hidden no-logo" hidden>
  <div id="signin-banner-container1">
    <div id="signin-banner-container2">
      <div id="signin-banner">$i18n{signinBannerText}</div>
    </div>
  </div>
  <podrow id="pod-row" class="podrow images-loading"></podrow>
</div>

        </div>
      </div>
    </div>
    <div id="bubble" class="bubble faded" hidden></div>
    <control-bar id="login-header-bar"></control-bar>
    <error-dialog></error-dialog>
    <dom-module id="user-pod-template-shared-styles">
  <template>
    <style>/* Copyright 2016 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * This is the stylesheet imported into the style module in
 * user_pod_template.html.
 */

.action-box-remove-user-warning .remove-warning-button {
  --active-shadow-action-rgb: var(--google-red-500-rgb);
  --bg-action: var(--google-red-700);
  --hover-bg-action: rgba(var(--google-red-700-rgb), .9);
  --hover-shadow-action-rgb: var(--google-red-500-rgb);
}
</style>
  </template>
</dom-module>

<custom-style>
  <style is="custom-style" include="user-pod-template-shared-styles"></style>
</custom-style>

<link rel="import" href="chrome://resources/cr_elements/cr_icon_button/cr_icon_button.html">

<iron-iconset-svg name="user-pod" size="24">
  <svg>
    <defs>
      <!--
      Inlined from Polymer's iron-icons to avoid importing everything.
      See http://goo.gl/Y1OdAq for instructions on adding additional icons.
      -->
      <g id="arrow-forward"><path d="M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"/></g>
      <g id="close"><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></g>
    </defs>
  </svg>
</iron-iconset-svg>

<div id="user-pod-template" class="pod disabled" hidden>
  <div class="user-image-pane">
    <div class="user-image-container">
      <img class="user-image" alt>
      <img class="user-image animated-image" alt>
    </div>
    <div class="signed-in-indicator">$i18n{signedIn}</div>
    <div class="indicator-container">
      <div class="indicator legacy-supervised-indicator"></div>
      <div class="indicator child-indicator"></div>
      <div class="indicator locked-indicator"></div>
    </div>
  </div>

  <div class="main-pane">
    <div class="name-container">
      <div class="learn-more-container">
        <div class="learn-more"></div>
      </div>
      <div class="name"></div>
    </div>
    <div class="auth-container">
      <!-- Password Authentication -->
      <div class="custom-icon-container" hidden></div>

      <div class="password-entry-container">
        <div class="password-container">
          <input type="password" class="password"
              placeholder="$i18n{passwordHint}">
        </div>

      </div>
      <!-- User Click Authentication -->
      <div class="password-label"></div>
      <div class="signin-transition-container">
        <span class="signing-in-label">$i18n{signingIn}</span>
        <span class="animated-ellipsis-component0">.</span>
        <span class="animated-ellipsis-component1">.</span>
        <span class="animated-ellipsis-component2">.</span>
      </div>
      <div class="reauth-hint-container">
        <span class="reauth-warning"></span>
        <span class="reauth-name-hint"></span>
      </div>
    </div>
  </div>
  <div class="action-box-area">
    <div class="custom-appearance action-box-button"></div>
    <!-- iron-icon is imported inside user_manager.html -->
    <iron-icon icon="cr:more-vert" class="action-box-icon"></iron-icon>
  </div>
  <div class="user-image-gradient-area">
  </div>
  <div class="user-type-icon-area" hidden>
    <div class="custom-appearance user-type-icon-image"></div>
  </div>
  <div class="action-box-menu">
    <div class="action-box-menu-title">
      <span class="action-box-menu-title-name"></span>
      <span class="action-box-menu-title-email"></span>
    </div>
    <div class="action-box-menu-remove">
      <span class="action-box-menu-remove-command"/>
    </div>
    <div class="action-box-remove-user-warning" hidden>
      <div class="action-box-remove-user-warning-text"></div>
      <table class="action-box-remove-user-warning-table-nonsync
                    non-sync has-stats">
        <tbody>
          <tr>
            <td>$i18n{removeUserWarningTextHistory}</td>
            <td class="action-box-remove-user-warning-history
                       action-box-remove-user-warning-table-numbers">
              $i18n{removeUserWarningTextCalculating}
            </td>
          </tr>
          <tr>
            <td>$i18n{removeUserWarningTextPasswords}</td>
            <td class="action-box-remove-user-warning-passwords
                       action-box-remove-user-warning-table-numbers">
              $i18n{removeUserWarningTextCalculating}
            </td>
          </tr>
          <tr>
            <td>$i18n{removeUserWarningTextBookmarks}</td>
            <td class="action-box-remove-user-warning-bookmarks
                       action-box-remove-user-warning-table-numbers">
              $i18n{removeUserWarningTextCalculating}
            </td>
          </tr>
          <tr>
            <td>$i18n{removeUserWarningTextAutofill}</td>
            <td class="action-box-remove-user-warning-autofill
                       action-box-remove-user-warning-table-numbers">
              $i18n{removeUserWarningTextCalculating}
            </td>
          </tr>
        </tbody>
      </table>
      <div class="action-box-remove-legacy-supervised-user-warning-text">
        $i18n{removeLegacySupervisedUserWarningText}
      </div>
      <div class="action-box-remove-non-owner-user-warning-text"></div>
      <!-- cr-button is imported inside user_manager.html -->
      <cr-button class="remove-warning-button action-button">
        $i18n{removeUserWarningButtonTitle}
      </cr-button>
    </div>
  </div>
  <div class="user-type-bubble">
    <div class="user-type-bubble-header">
      <span class="mp-policy-title">
        $i18n{multiProfilesRestrictedPolicyTitle}
      </span>
    </div>
    <div class="user-type-bubble-body">
      <span class="mp-policy-not-allowed-msg" hidden>
        $i18n{multiProfilesNotAllowedPolicyMsg}
      </span>
      <span class="mp-policy-primary-only-msg" hidden>
        $i18n{multiProfilesPrimaryOnlyPolicyMsg}
      </span>
      <span class="mp-owner-primary-only-msg" hidden>
        $i18n{multiProfilesOwnerPrimaryOnlyMsg}
      </span>
    </div>
  </div>
</div>

<!-- Extra elements that are appended to above "user-pod-template" for public
     account user pod. Note that only the children of the template div are
     appended. -->
<div id="public-account-user-pod-extras-template" hidden>
  <div class="expanded-pane">
    <div class="expanded-pane-contents">
      <div class="side-container">
        <div class="expanded-pane-name"></div>
        <div class="expanded-pane-container">
          <div class="expanded-pane-learn-more-container">
            <div class="expanded-pane-learn-more"></div>
          </div>
          <div class="info"></div>
          <div class="monitoring-container">
            <span class="monitoring-warning">
              $i18n{publicAccountMonitoringWarning}
            </span>
            <a class="monitoring-learn-more" href="#" role="button">
              $i18n{publicAccountLearnMore}
            </a>
          </div>
          <div class="reminder">$i18n{publicAccountReminder}</div>
          <div class="language-and-input-section">
            <div class="select-with-label">
              <label class="language-select-label">
                $i18n{publicSessionSelectLanguage}
              </label>
              <div class="select-container">
                <select class="language-select"></select>
              </div>
            </div>
            <div class="select-with-label">
              <label class="keyboard-select-label">
                $i18n{publicSessionSelectKeyboard}
              </label>
              <div class="select-container">
                <select class="keyboard-select"></select>
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="horizontal-line"></div>
      <div class="bottom-container">
        <cr-button class="action-button enter-button"
            aria-label="$i18n{publicAccountEnterAccessibleName}">
          $i18n{publicAccountEnter}
        </cr-button>
        <div class="language-and-input-container">
          <a class="language-and-input" href="#" role="button">
            $i18n{publicSessionLanguageAndInput}
          </a>
        </div>
      </div>
    </div>
  </div>
</div>

  </user-manager-pages>
  <script src="user_manager.js"></script>
</body>
</html>
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Base class for all login WebUI screens.
 */
cr.define('login', function() {
  /** @const */ var CALLBACK_USER_ACTED = 'userActed';

  function doNothing() {};

  function alwaysTruePredicate() { return true; }

  var querySelectorAll = HTMLDivElement.prototype.querySelectorAll;

  var Screen = function(sendPrefix) {
    this.sendPrefix_ = sendPrefix;
  };

  Screen.prototype = {
    __proto__: HTMLDivElement.prototype,

    /**
     * Prefix added to sent to Chrome messages' names.
     */
    sendPrefix_: null,

    /**
     * Called during screen initialization.
     */
    decorate: doNothing,

    /**
     * Returns minimal size that screen prefers to have. Default implementation
     * returns current screen size.
     * @return {{width: number, height: number}}
     */
    getPreferredSize: function() {
      return {width: this.offsetWidth, height: this.offsetHeight};
    },

    /**
     * Called for currently active screen when screen size changed.
     */
    onWindowResize: doNothing,

    /**
     * @final
     */
    initialize: function() {
      return this.initializeImpl_.apply(this, arguments);
    },

    /**
     * @final
     */
    send: function() {
      return this.sendImpl_.apply(this, arguments);
    },

    /**
     * @override
     * @final
     */
    querySelectorAll: function() {
      return this.querySelectorAllImpl_.apply(this, arguments);
    },

    /**
     * @private
     */
    initializeImpl_: function() {
      this.decorate();
    },

    /**
     * Sends message to Chrome, adding needed prefix to message name. All
     * arguments after |messageName| are packed into message parameters list.
     *
     * @param {string} messageName Name of message without a prefix.
     * @param {...*} varArgs parameters for message.
     * @private
     */
    sendImpl_: function(messageName, varArgs) {
      if (arguments.length == 0)
        throw Error('Message name is not provided.');
      var fullMessageName = this.sendPrefix_ + messageName;
      var payload = Array.prototype.slice.call(arguments, 1);
      chrome.send(fullMessageName, payload);
    },

    /**
     * Calls standart |querySelectorAll| method and returns its result converted
     * to Array.
     * @private
     */
    querySelectorAllImpl_: function(selector) {
      var list = querySelectorAll.call(this, selector);
      return Array.prototype.slice.call(list);
    },

    /**
     * If |value| is the value of some property of |this| returns property's
     * name. Otherwise returns empty string.
     * @private
     */
    getPropertyNameOf_: function(value) {
      for (var key in this)
        if (this[key] === value)
          return key;
      return '';
    }
  };

  Screen.CALLBACK_USER_ACTED = CALLBACK_USER_ACTED;

  return {
    Screen: Screen
  };
});

cr.define('login', function() {
  return {
    /**
     * Creates class and object for screen.
     * Methods specified in EXTERNAL_API array of prototype
     * will be available from C++ part.
     * Example:
     *     login.createScreen('ScreenName', 'screen-id', {
     *       foo: function() { console.log('foo'); },
     *       bar: function() { console.log('bar'); }
     *       EXTERNAL_API: ['foo'];
     *     });
     *     login.ScreenName.register();
     *     var screen = $('screen-id');
     *     screen.foo(); // valid
     *     login.ScreenName.foo(); // valid
     *     screen.bar(); // valid
     *     login.ScreenName.bar(); // invalid
     *
     * @param {string} name Name of created class.
     * @param {string} id Id of div representing screen.
     * @param {(function()|Object)} proto Prototype of object or function that
     *     returns prototype.
     */
    createScreen: function(name, id, template) {
      if (typeof template == 'function')
        template = template();

      var apiNames = template.EXTERNAL_API || [];
      for (var i = 0; i < apiNames.length; ++i) {
        var methodName = apiNames[i];
        if (typeof template[methodName] !== 'function')
          throw Error('External method "' + methodName + '" for screen "' +
              name + '" not a function or undefined.');
      }

      function checkPropertyAllowed(propertyName) {
        if (propertyName.charAt(propertyName.length - 1) === '_' &&
            (propertyName in login.Screen.prototype)) {
          throw Error('Property "' + propertyName + '" of "' + id + '" ' +
              'shadows private property of login.Screen prototype.');
        }
      };

      var Constructor = function() {
        login.Screen.call(this, 'login.' + name + '.');
      };
      Constructor.prototype = Object.create(login.Screen.prototype);
      var api = {};

      Object.getOwnPropertyNames(template).forEach(function(propertyName) {
        if (propertyName === 'EXTERNAL_API')
          return;

        checkPropertyAllowed(propertyName);

        var descriptor =
            Object.getOwnPropertyDescriptor(template, propertyName);
        Object.defineProperty(Constructor.prototype, propertyName, descriptor);

        if (apiNames.indexOf(propertyName) >= 0) {
          api[propertyName] = function() {
              var screen = $(id);
              return screen[propertyName].apply(screen, arguments);
          };
        }
      });

      Constructor.prototype.name = function() { return id; };

      api.register = function(opt_lazy_init) {
        var screen = $(id);
        screen.__proto__ = new Constructor();

        if (opt_lazy_init !== undefined && opt_lazy_init)
          screen.deferredInitialization = function() { screen.initialize(); }
        else
          screen.initialize();
        Oobe.getInstance().registerScreen(screen);
      };

      // See also c/b/r/chromeos/login/login_screen_behavior.js
      cr.define('login', function() {
        var result = {};
        result[name] = api;
        return result;
      });
    }
  };
});

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Bubble implementation.
 */

// TODO(xiyuan): Move this into shared.
cr.define('cr.ui', function() {
  /**
   * Creates a bubble div.
   * @constructor
   * @extends {HTMLDivElement}
   */
  var Bubble = cr.ui.define('div');

  /**
   * Bubble key codes.
   * @enum {number}
   */
  var Keys = {
    TAB: 'Tab',
    ENTER: 'Enter',
    ESC: 'Escape',
    SPACE: ' '
  };

  /**
   * Bubble attachment side.
   * @enum {number}
   */
  Bubble.Attachment = {
    RIGHT: 0,
    LEFT: 1,
    TOP: 2,
    BOTTOM: 3
  };

  Bubble.prototype = {
    __proto__: HTMLDivElement.prototype,

    // Anchor element for this bubble.
    anchor_: undefined,

    // If defined, sets focus to this element once bubble is closed. Focus is
    // set to this element only if there's no any other focused element.
    elementToFocusOnHide_: undefined,

    // With help of these elements we create closed artificial tab-cycle through
    // bubble elements.
    firstBubbleElement_: undefined,
    lastBubbleElement_: undefined,

    // Whether to hide bubble when key is pressed.
    hideOnKeyPress_: true,

    persistent_: false,

    /** @override */
    decorate: function() {
      this.docKeyDownHandler_ = this.handleDocKeyDown_.bind(this);
      this.selfClickHandler_ = this.handleSelfClick_.bind(this);
      this.ownerDocument.addEventListener('click',
                                          this.handleDocClick_.bind(this));
      // Set useCapture to true because scroll event does not bubble.
      this.ownerDocument.addEventListener('scroll',
                                          this.handleScroll_.bind(this),
                                          true);
      this.ownerDocument.addEventListener('keydown',
                                          this.docKeyDownHandler_);
      window.addEventListener('blur', this.handleWindowBlur_.bind(this));
      this.addEventListener('transitionend',
                            this.handleTransitionEnd_.bind(this));
      // Guard timer for 200ms + epsilon.
      ensureTransitionEndEvent(this, 250);
    },

    /**
     * Element that should be focused on hide.
     * @type {HTMLElement}
     */
    set elementToFocusOnHide(value) {
      this.elementToFocusOnHide_ = value;
    },

    /**
     * Element that should be focused on shift-tab of first bubble element
     * to create artificial closed tab-cycle through bubble.
     * Usually close-button.
     * @type {HTMLElement}
     */
    set lastBubbleElement(value) {
      this.lastBubbleElement_ = value;
    },

    /**
     * Whether the bubble should remain shown on user action events (e.g. on
     * user clicking, or scrolling outside the bubble). Note that
     * {@code this.hideOnKeyPress} has precedence.
     * @type {boolean}
     */
    set persistent(value) {
      this.persistent_ = value
    },

    /**
     * If set, the element at which the bubble is anchored.
     * @type {HTMLElement|undefined}
     */
    get anchor() {
      return this.anchor_;
    },

    /**
     * Element that should be focused on tab of last bubble element
     * to create artificial closed tab-cycle through bubble.
     * Same element as first focused on bubble opening.
     * @type {HTMLElement}
     */
    set firstBubbleElement(value) {
      this.firstBubbleElement_ = value;
    },

    /**
     * Whether to hide bubble when key is pressed.
     * @type {boolean}
     */
    set hideOnKeyPress(value) {
      this.hideOnKeyPress_ = value;
    },

    /**
     * Whether to hide bubble when clicked inside bubble element.
     * Default is true.
     * @type {boolean}
     */
    set hideOnSelfClick(value) {
      if (value)
        this.removeEventListener('click', this.selfClickHandler_);
      else
        this.addEventListener('click', this.selfClickHandler_);
    },

    /**
     * Handler for click event which prevents bubble auto hide.
     * @private
     */
    handleSelfClick_: function(e) {
      // Allow clicking on [x] button.
      if (e.target && e.target.classList.contains('close-button'))
        return;
      e.stopPropagation();
    },

    /**
     * Sets the attachment of the bubble.
     * @param {!Attachment} attachment Bubble attachment.
     */
    setAttachment_: function(attachment) {
      var styleClassList = ['bubble-right', 'bubble-left',
                            'bubble-top', 'bubble-bottom'];
      for (var i = 0; i < styleClassList.length; ++i)
        this.classList.toggle(styleClassList[i], i == attachment);
    },

    /**
     * Shows the bubble for given anchor element.
     * @param {!Object} pos Bubble position (left, top, right, bottom in px).
     * @param {HTMLElement} opt_content Content to show in bubble.
     *     If not specified, bubble element content is shown.
     * @param {Attachment=} opt_attachment Bubble attachment (on which side of
     *     the element it should be displayed).
     * @param {boolean=} opt_oldstyle Optional flag to force old style bubble,
     *     i.e. pre-MD-style.
     * @private
     */
    showContentAt_: function(pos, opt_content, opt_attachment, opt_oldstyle) {
      this.style.top = this.style.left = this.style.right = this.style.bottom =
          'auto';
      for (var k in pos) {
        if (typeof pos[k] == 'number')
          this.style[k] = pos[k] + 'px';
      }
      if (opt_content !== undefined)
        this.replaceContent(opt_content);

      if (opt_oldstyle) {
        this.setAttribute('oldstyle', '');
        this.setAttachment_(opt_attachment);
      }

      this.hidden = false;
      this.classList.remove('faded');
    },

    /**
     * Replaces error message content with the given DOM element.
     * @param {HTMLElement} content Content to show in bubble.
     */
    replaceContent: function(content) {
      this.innerHTML = '';
      this.appendChild(content);
    },

    /**
     * Shows the bubble for given anchor element. Bubble content is not cleared.
     * @param {!HTMLElement} el Anchor element of the bubble.
     * @param {!Attachment} attachment Bubble attachment (on which side of the
     *     element it should be displayed).
     * @param {number=} opt_offset Offset of the bubble.
     * @param {number=} opt_padding Optional padding of the bubble.
     */
    showForElement: function(el, attachment, opt_offset, opt_padding) {
      /* showForElement() is used only to display Accessibility popup in
       * oobe_screen_welcome*. It requires old-style bubble, so it is safe
       * to always set this flag here.
       */
      this.showContentForElement(
          el, attachment, undefined, opt_offset, opt_padding, undefined, true);
    },

    /**
     * Shows the bubble for given anchor element.
     * @param {!HTMLElement} el Anchor element of the bubble.
     * @param {!Attachment} attachment Bubble attachment (on which side of the
     *     element it should be displayed).
     * @param {HTMLElement} opt_content Content to show in bubble.
     *     If not specified, bubble element content is shown.
     * @param {number=} opt_offset Offset of the bubble attachment point from
     *     left (for vertical attachment) or top (for horizontal attachment)
     *     side of the element. If not specified, the bubble is positioned to
     *     be aligned with the left/top side of the element but not farther than
     *     half of its width/height.
     * @param {number=} opt_padding Optional padding of the bubble.
     * @param {boolean=} opt_match_width Optional flag to force the bubble have
     *     the same width as the element it it attached to.
     * @param {boolean=} opt_oldstyle Optional flag to force old style bubble,
     *     i.e. pre-MD-style.
     */
    showContentForElement: function(
        el, attachment, opt_content, opt_offset, opt_padding, opt_match_width,
        opt_oldstyle) {
      /** @const */ var ARROW_OFFSET = 25;
      /** @const */ var DEFAULT_PADDING = 18;

      if (opt_padding == undefined)
        opt_padding = DEFAULT_PADDING;

      if (!opt_oldstyle)
        opt_padding += 10;

      var origin = cr.ui.login.DisplayManager.getPosition(el);
      var offset = opt_offset == undefined ?
          [Math.min(ARROW_OFFSET, el.offsetWidth / 2),
           Math.min(ARROW_OFFSET, el.offsetHeight / 2)] :
          [opt_offset, opt_offset];

      var pos = {};
      if (isRTL()) {
        switch (attachment) {
          case Bubble.Attachment.TOP:
            pos.right = origin.right + offset[0] - ARROW_OFFSET;
            pos.bottom = origin.bottom + el.offsetHeight + opt_padding;
            break;
          case Bubble.Attachment.RIGHT:
            pos.top = origin.top + offset[1] - ARROW_OFFSET;
            pos.right = origin.right + el.offsetWidth + opt_padding;
            break;
          case Bubble.Attachment.BOTTOM:
            pos.right = origin.right + offset[0] - ARROW_OFFSET;
            pos.top = origin.top + el.offsetHeight + opt_padding;
            break;
          case Bubble.Attachment.LEFT:
            pos.top = origin.top + offset[1] - ARROW_OFFSET;
            pos.left = origin.left + el.offsetWidth + opt_padding;
            break;
        }
      } else {
        switch (attachment) {
          case Bubble.Attachment.TOP:
            pos.left = origin.left + offset[0] - ARROW_OFFSET;
            pos.bottom = origin.bottom + el.offsetHeight + opt_padding;
            break;
          case Bubble.Attachment.RIGHT:
            pos.top = origin.top + offset[1] - ARROW_OFFSET;
            pos.left = origin.left + el.offsetWidth + opt_padding;
            break;
          case Bubble.Attachment.BOTTOM:
            pos.left = origin.left + offset[0] - ARROW_OFFSET;
            pos.top = origin.top + el.offsetHeight + opt_padding;
            break;
          case Bubble.Attachment.LEFT:
            pos.top = origin.top + offset[1] - ARROW_OFFSET;
            pos.right = origin.right + el.offsetWidth + opt_padding;
            break;
        }
      }
      this.style.width = '';
      this.removeAttribute('match-width');
      if (opt_match_width) {
        this.setAttribute('match-width', '');
        var elWidth =
            window.getComputedStyle(el, null).getPropertyValue('width');
        var paddingLeft = parseInt(window.getComputedStyle(this, null)
            .getPropertyValue('padding-left'));
        var paddingRight = parseInt(window.getComputedStyle(this, null)
            .getPropertyValue('padding-right'));
        if (elWidth)
          this.style.width =
              (parseInt(elWidth) - paddingLeft - paddingRight) + 'px';
      }

      this.anchor_ = el;
      this.showContentAt_(pos, opt_content, attachment, opt_oldstyle);
    },

    /**
     * Shows the bubble for given anchor element.
     * @param {!HTMLElement} el Anchor element of the bubble.
     * @param {string} text Text content to show in bubble.
     * @param {!Attachment} attachment Bubble attachment (on which side of the
     *     element it should be displayed).
     * @param {number=} opt_offset Offset of the bubble attachment point from
     *     left (for vertical attachment) or top (for horizontal attachment)
     *     side of the element. If not specified, the bubble is positioned to
     *     be aligned with the left/top side of the element but not farther than
     *     half of its weight/height.
     * @param {number=} opt_padding Optional padding of the bubble.
     */
    showTextForElement: function(
        el, text, attachment, opt_offset, opt_padding) {
      var span = this.ownerDocument.createElement('span');
      span.textContent = text;
      this.showContentForElement(el, attachment, span, opt_offset, opt_padding);
    },

    /**
     * Hides the bubble.
     */
    hide: function() {
      if (!this.classList.contains('faded'))
        this.classList.add('faded');
    },

    /**
     * Hides the bubble anchored to the given element (if any).
     * @param {!Object} el Anchor element.
     */
    hideForElement: function(el) {
      if (!this.hidden && this.anchor_ == el)
        this.hide();
    },

    /**
     * Handler for faded transition end.
     * @private
     */
    handleTransitionEnd_: function(e) {
      if (this.classList.contains('faded')) {
        this.hidden = true;
        if (this.elementToFocusOnHide_)
          this.elementToFocusOnHide_.focus();
      }
    },

    /**
     * Handler of scroll event.
     * @private
     */
    handleScroll_: function(e) {
      if (!this.hidden && !this.persistent_)
        this.hide();
    },

    /**
     * Handler of document click event.
     * @private
     */
    handleDocClick_: function(e) {
      // Ignore clicks on anchor element.
      if (e.target == this.anchor_)
        return;

      if (!this.hidden && !this.persistent_)
        this.hide();
    },

    /**
     * Handle of document keydown event.
     * @private
     */
    handleDocKeyDown_: function(e) {
      if (this.hidden)
        return;

      if (this.hideOnKeyPress_) {
        this.hide();
        return;
      }
      // Artificial tab-cycle.

      if (e.key == Keys.TAB && e.shiftKey == true &&
          e.target == this.firstBubbleElement_) {
        this.lastBubbleElement_.focus();
        e.preventDefault();
      }
      if (e.key == Keys.TAB && e.shiftKey == false &&
          e.target == this.lastBubbleElement_) {
        this.firstBubbleElement_.focus();
        e.preventDefault();
      }
      // Close bubble on ESC or on hitting spacebar or Enter at close-button.
      if ((e.key == Keys.ESC && !this.persistent_) ||
          ((e.key == Keys.ENTER || e.key == Keys.SPACE) && e.target &&
           e.target.classList.contains('close-button')))
        this.hide();
    },

    /**
     * Handler of window blur event.
     * @private
     */
    handleWindowBlur_: function(e) {
      if (!this.hidden && !this.persistent_)
        this.hide();
    }
  };

  return {
    Bubble: Bubble
  };
});

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview JS helpers used on login.
 */

cr.define('cr.ui.LoginUITools', function() {
  return {
    /**
     * Computes max-height for an element so that it doesn't overlap shelf.
     * @param {element} DOM element
     * @param {wholeWindow} Whether the element can go outside outer-container.
     */
    getMaxHeightBeforeShelfOverlapping : function(element, wholeWindow) {
      var maxAllowedHeight =
          $('outer-container').offsetHeight -
          element.getBoundingClientRect().top -
          parseInt(window.getComputedStyle(element).marginTop) -
          parseInt(window.getComputedStyle(element).marginBottom);
      if (wholeWindow) {
        maxAllowedHeight +=
           parseInt(window.getComputedStyle($('outer-container')).bottom);
      }
      return maxAllowedHeight;
    },

    /**
     * Computes max-width for an element so that it does fit the
     * outer-container.
     * @param {element} DOM element
     */
    getMaxWidthToFit : function(element) {
      var maxAllowedWidth =
          $('outer-container').offsetWidth -
          element.getBoundingClientRect().left -
          parseInt(window.getComputedStyle(element).marginLeft) -
          parseInt(window.getComputedStyle(element).marginRight);
      return maxAllowedWidth;
    },
  }
});

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Display manager for WebUI OOBE and login.
 */

// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview
 * Closure compiler type definitions used by display_manager.js .
 */

/**
 * @typedef {{
 *   enableDebuggingAllowed: (boolean|undefined),
 *   enterDemoModeAllowed: (boolean|undefined),
 *   noAnimatedTransition: (boolean|undefined),
 *   postponeEnrollmentAllowed: (boolean|undefined),
 *   resetAllowed: (boolean|undefined),
 *   startEnrollmentAllowed: (boolean|undefined),
 *   toggleKioskAllowed: (boolean|undefined),
 * }}
 */
var DisplayManagerScreenAttributes = {};

/**
 * True if showing "enable debugging" is allowed for the screen.
 * @type {boolean|undefined}
 */
DisplayManagerScreenAttributes.enableDebuggingAllowed;

/**
 * True if enabling demo mode is allowed for the screen.
 * @type {boolean|undefined}
 */
DisplayManagerScreenAttributes.enterDemoModeAllowed;

/**
 * True if screen does not use left-current-right animation.
 * @type {boolean|undefined}
 */
DisplayManagerScreenAttributes.noAnimatedTransition;

/**
 * True if enrollment accelerator should schedule postponed enrollment.
 * @type {boolean|undefined}
 */
DisplayManagerScreenAttributes.postponeEnrollmentAllowed;

/**
 * True if device reset is allowed on the screen.
 * @type {boolean|undefined}
 */
DisplayManagerScreenAttributes.resetAllowed;

/**
 * True if enrollment accelerator should start enrollment.
 * @type {boolean|undefined}
 */
DisplayManagerScreenAttributes.startEnrollmentAllowed;

/**
 * True if "enable kiosk" accelerator is allowed.
 * @type {boolean|undefined}
 */
DisplayManagerScreenAttributes.toggleKioskAllowed;

/**
 * Possible types of UI.
 * @enum {string}
 */
var DISPLAY_TYPE = {
  UNKNOWN: 'unknown',
  OOBE: 'oobe',
  LOGIN: 'login',
  LOCK: 'lock',
  USER_ADDING: 'user-adding',
  APP_LAUNCH_SPLASH: 'app-launch-splash',
  ARC_KIOSK_SPLASH: 'arc-kiosk-splash',
  DESKTOP_USER_MANAGER: 'login-add-user',
  GAIA_SIGNIN: 'gaia-signin'
};


// TODO(xiyuan): Find a better to share those constants.
/** @const */ var SCREEN_OOBE_NETWORK = 'network-selection';
/** @const */ var SCREEN_OOBE_HID_DETECTION = 'hid-detection';
/** @const */ var SCREEN_OOBE_EULA = 'eula';
/** @const */ var SCREEN_OOBE_ENABLE_DEBUGGING = 'debugging';
/** @const */ var SCREEN_OOBE_UPDATE = 'update';
/** @const */ var SCREEN_OOBE_RESET = 'reset';
/** @const */ var SCREEN_OOBE_ENROLLMENT = 'oauth-enrollment';
/** @const */ var SCREEN_OOBE_DEMO_SETUP = 'demo-setup';
/** @const */ var SCREEN_OOBE_DEMO_PREFERENCES = 'demo-preferences';
/** @const */ var SCREEN_OOBE_KIOSK_ENABLE = 'kiosk-enable';
/** @const */ var SCREEN_OOBE_AUTO_ENROLLMENT_CHECK = 'auto-enrollment-check';
/** @const */ var SCREEN_PACKAGED_LICENSE = 'packaged-license';
/** @const */ var SCREEN_GAIA_SIGNIN = 'gaia-signin';
/** @const */ var SCREEN_ACCOUNT_PICKER = 'account-picker';
/** @const */ var SCREEN_ERROR_MESSAGE = 'error-message';
/** @const */ var SCREEN_TPM_ERROR = 'tpm-error-message';
/** @const */ var SCREEN_PASSWORD_CHANGED = 'password-changed';
/** @const */ var SCREEN_APP_LAUNCH_SPLASH = 'app-launch-splash';
/** @const */ var SCREEN_ARC_KIOSK_SPLASH = 'arc-kiosk-splash';
/** @const */ var SCREEN_CONFIRM_PASSWORD = 'confirm-password';
/** @const */ var SCREEN_FATAL_ERROR = 'fatal-error';
/** @const */ var SCREEN_KIOSK_ENABLE = 'kiosk-enable';
/** @const */ var SCREEN_TERMS_OF_SERVICE = 'terms-of-service';
/** @const */ var SCREEN_ARC_TERMS_OF_SERVICE = 'arc-tos';
/** @const */ var SCREEN_WRONG_HWID = 'wrong-hwid';
/** @const */ var SCREEN_DEVICE_DISABLED = 'device-disabled';
/** @const */ var SCREEN_UPDATE_REQUIRED = 'update-required';
/** @const */ var SCREEN_ACTIVE_DIRECTORY_PASSWORD_CHANGE =
    'ad-password-change';
/** @const */ var SCREEN_SYNC_CONSENT = 'sync-consent';
/** @const */ var SCREEN_FINGERPRINT_SETUP = 'fingerprint-setup';
/** @const */ var SCREEN_RECOMMEND_APPS = 'recommend-apps';
/** @const */ var SCREEN_APP_DOWNLOADING = 'app-downloading';
/** @const */ var SCREEN_DISCOVER = 'discover';
/** @const */ var SCREEN_MARKETING_OPT_IN = 'marketing-opt-in';

/* Accelerator identifiers. Must be kept in sync with webui_login_view.cc. */
/** @const */ var ACCELERATOR_CANCEL = 'cancel';
/** @const */ var ACCELERATOR_ENABLE_DEBBUGING = 'debugging';
/** @const */ var ACCELERATOR_ENROLLMENT = 'enrollment';
/** @const */ var ACCELERATOR_KIOSK_ENABLE = 'kiosk_enable';
/** @const */ var ACCELERATOR_VERSION = 'version';
/** @const */ var ACCELERATOR_RESET = 'reset';
/** @const */ var ACCELERATOR_DEVICE_REQUISITION = 'device_requisition';
/** @const */ var ACCELERATOR_DEVICE_REQUISITION_REMORA =
    'device_requisition_remora';
/** @const */ var ACCELERATOR_APP_LAUNCH_BAILOUT = 'app_launch_bailout';
/** @const */ var ACCELERATOR_APP_LAUNCH_NETWORK_CONFIG =
    'app_launch_network_config';
/** @const */ var ACCELERATOR_DEMO_MODE = "demo_mode";
/** @const */ var ACCELERATOR_SEND_FEEDBACK = "send_feedback";

/* Signin UI state constants. Used to control header bar UI. */
/* TODO(https://crbug.com/981544): Sync with login_types.h */
/** @const */ var SIGNIN_UI_STATE = {
  HIDDEN: 0,
  GAIA_SIGNIN: 1,
  ACCOUNT_PICKER: 2,
  WRONG_HWID_WARNING: 3,
  DEPRECATED_SUPERVISED_USER_CREATION_FLOW: 4,
  SAML_PASSWORD_CONFIRM: 5,
  PASSWORD_CHANGED: 6,
  ENROLLMENT: 7,
  ERROR: 8,
  SYNC_CONSENT: 9,
};

/* Possible UI states of the error screen. */
/** @const */ var ERROR_SCREEN_UI_STATE = {
  UNKNOWN: 'ui-state-unknown',
  UPDATE: 'ui-state-update',
  SIGNIN: 'ui-state-signin',
  KIOSK_MODE: 'ui-state-kiosk-mode',
  LOCAL_STATE_ERROR: 'ui-state-local-state-error',
  AUTO_ENROLLMENT_ERROR: 'ui-state-auto-enrollment-error',
  ROLLBACK_ERROR: 'ui-state-rollback-error'
};

/** @const */ var USER_ACTION_ROLLBACK_TOGGLED = 'rollback-toggled';

cr.define('cr.ui.login', function() {
  var Bubble = cr.ui.Bubble;

  /**
   * Maximum time in milliseconds to wait for step transition to finish.
   * The value is used as the duration for ensureTransitionEndEvent below.
   * It needs to be inline with the step screen transition duration time
   * defined in css file. The current value in css is 200ms. To avoid emulated
   * transitionend fired before real one, 250ms is used.
   * @const
   */
  var MAX_SCREEN_TRANSITION_DURATION = 250;

  /**
   * Group of screens (screen IDs) where factory-reset screen invocation is
   * available. Newer screens using Polymer use the attribute
   * `resetAllowed` in their `ready()` method.
   * @type Array<string>
   * @const
   */
  var RESET_AVAILABLE_SCREEN_GROUP = [
    SCREEN_OOBE_NETWORK,
    SCREEN_OOBE_EULA,
    SCREEN_OOBE_UPDATE,
    SCREEN_OOBE_ENROLLMENT,
    SCREEN_OOBE_AUTO_ENROLLMENT_CHECK,
    SCREEN_GAIA_SIGNIN,
    SCREEN_ACCOUNT_PICKER,
    SCREEN_KIOSK_ENABLE,
    SCREEN_ERROR_MESSAGE,
    SCREEN_TPM_ERROR,
    SCREEN_PASSWORD_CHANGED,
    SCREEN_ARC_TERMS_OF_SERVICE,
    SCREEN_WRONG_HWID,
    SCREEN_CONFIRM_PASSWORD,
    SCREEN_UPDATE_REQUIRED,
    SCREEN_FATAL_ERROR,
    SCREEN_SYNC_CONSENT,
    SCREEN_RECOMMEND_APPS,
    SCREEN_APP_DOWNLOADING,
    SCREEN_DISCOVER,
    SCREEN_MARKETING_OPT_IN,
  ];

  /**
   * Group of screens (screen IDs) where enable debuggingscreen invocation is
   * available. Newer screens using Polymer use the attribute
   * `enableDebuggingAllowed` in their `ready()` method.
   * @type Array<string>
   * @const
   */
  var ENABLE_DEBUGGING_AVAILABLE_SCREEN_GROUP = [
    SCREEN_OOBE_HID_DETECTION,
    SCREEN_OOBE_NETWORK,
    SCREEN_OOBE_EULA,
    SCREEN_OOBE_UPDATE
  ];

  /**
   * Group of screens (screen IDs) that are not participating in
   * left-current-right animation.
   * @type Array<string>
   * @const
   */
  var NOT_ANIMATED_SCREEN_GROUP = [
    SCREEN_OOBE_ENABLE_DEBUGGING,
    SCREEN_OOBE_RESET,
  ];

  /**
   * Constructor a display manager that manages initialization of screens,
   * transitions, error messages display.
   *
   * @constructor
   */
  function DisplayManager() {
  }

  DisplayManager.prototype = {
    /**
     * Registered screens.
     */
    screens_: [],

    /**
     * Attributes of the registered screens.
     * @type {Array<DisplayManagerScreenAttributes>}
     */
    screensAttributes_: [],

    /**
     * Current OOBE step, index in the screens array.
     * @type {number}
     */
    currentStep_: 0,

    /**
     * Whether version label can be toggled by ACCELERATOR_VERSION.
     * @type {boolean}
     */
    allowToggleVersion_: false,

    /**
     * Whether keyboard navigation flow is enforced.
     * @type {boolean}
     */
    forceKeyboardFlow_: false,

    /**
     * Whether the virtual keyboard is displayed.
     * @type {boolean}
     */
    virtualKeyboardShown_: false,

    get virtualKeyboardShown() {
      return this.virtualKeyboardShown_;
    },

    set virtualKeyboardShown(shown) {
      this.virtualKeyboardShown_ = shown;
      document.documentElement.setAttribute('virtual-keyboard', shown);
    },

    /**
     * Type of UI.
     * @type {string}
     */
    displayType_: DISPLAY_TYPE.UNKNOWN,

    /**
     * Number of users in the login screen UI. This is used by the views login
     * screen, and is always 0 for WebUI login screen.
     * TODO(crbug.com/808271): WebUI and views implementation should return the
     * same user list.
     * @type {number}
     */
    userCount_: 0,

    /**
     * Number of reloadContent() calls since start for testing.
     * @type {number}
     */
    reloadContentNumEvents_: 0,

    /**
     * Stored OOBE configuration for newly registered screens.
     * @type {!OobeTypes.OobeConfiguration}
     */
    oobe_configuration_: undefined,

    /**
     * Detects multi-tap gesture that invokes demo mode setup in OOBE.
     * @type {?MultiTapDetector}
     * @private
     */
    demoModeStartListener_: null,

    /**
     * Error message (bubble) was shown. This is checked in tests.
     */
    errorMessageWasShownForTesting_: false,

    get displayType() {
      return this.displayType_;
    },

    set displayType(displayType) {
      this.displayType_ = displayType;
      document.documentElement.setAttribute('screen', displayType);
    },

    /**
     * Returns dimensions of screen excluding header bar.
     * @type {Object}
     */
    get clientAreaSize() {
      var container = $('outer-container');
      return {width: container.offsetWidth, height: container.offsetHeight};
    },

    /**
     * Gets current screen element.
     * @type {HTMLElement}
     */
    get currentScreen() {
      return $(this.screens_[this.currentStep_]);
    },

    /**
     * Returns true if we are showing views based login screen.
     * @return {boolean}
     */
    get showingViewsLogin() {
      return loadTimeData.valueExists('showViewsLogin') &&
          loadTimeData.getString('showViewsLogin') == 'on' &&
          (this.displayType_ == DISPLAY_TYPE.GAIA_SIGNIN);
    },

    /**
     * Returns true if the login screen has user pods.
     * @return {boolean}
     */
    get hasUserPods() {
      var userCount =
          this.showingViewsLogin ? this.userCount_ : $('pod-row').pods.length;
      return !!userCount;
    },

    /**
     * Sets the current size of the client area (display size).
     * @param {number} width client area width
     * @param {number} height client area height
     */
    setClientAreaSize: function(width, height) {
      if (!cr.isChromeOS) {
        var clientArea = $('outer-container');
        var bottom = parseInt(window.getComputedStyle(clientArea).bottom);
        clientArea.style.minHeight = cr.ui.toCssPx(height - bottom);
      }
    },

    /**
     * Sets the current height of the shelf area.
     * @param {number} height current shelf height
     */
    setShelfHeight: function(height) {
      document.documentElement.style.setProperty(
          '--shelf-area-height-base', height + 'px');
    },

    /**
     * Sets the hint for calculating OOBE dialog inner padding.
     * @param {OobeTypes.DialogPaddingMode} mode.
     */
    setDialogPaddingMode: function(mode) {
      document.documentElement.setAttribute('dialog-padding', mode);
    },

    /**
     * Toggles background of main body between transparency and solid.
     * @param {boolean} solid Whether to show a solid background.
     */
    set solidBackground(solid) {
      if (solid)
        document.body.classList.add('solid');
      else
        document.body.classList.remove('solid');
    },

    /**
     * Forces keyboard based OOBE navigation.
     * @param {boolean} value True if keyboard navigation flow is forced.
     */
    set forceKeyboardFlow(value) {
      this.forceKeyboardFlow_ = value;
      if (value) {
        keyboard.initializeKeyboardFlow(false);
        for (var i = 0; i < this.screens_.length; ++i) {
          var screen = $(this.screens_[i]);
          if (screen.enableKeyboardFlow)
            screen.enableKeyboardFlow();
        }
      }
    },

    /**
     * Returns true if keyboard flow is enabled.
     * @return {boolean}
     */
    get forceKeyboardFlow() {
      return this.forceKeyboardFlow_;
    },

    /**
     * Returns current OOBE configuration.
     * @return {!OobeTypes.OobeConfiguration}
     */
    getOobeConfiguration: function() {
      return this.oobe_configuration_;
    },

    /**
     * Shows/hides version labels.
     * @param {boolean} show Whether labels should be visible by default. If
     *     false, visibility can be toggled by ACCELERATOR_VERSION.
     */
    showVersion: function(show) {
      $('version-labels').hidden = !show;
      this.allowToggleVersion_ = !show;
    },

    /**
     * Sets the number of users on the views login screen.
     * @param {number} userCount The number of users.
     */
    setLoginUserCount: function(userCount) {
      this.userCount_ = userCount;
    },

    /**
     * Handle accelerators.
     * @param {string} name Accelerator name.
     */
    handleAccelerator: function(name) {
      if (this.currentScreen && this.currentScreen.ignoreAccelerators) {
        return;
      }
      var currentStepId = this.screens_[this.currentStep_];
      var attributes = this.screensAttributes_[this.currentStep_] || {};
      if (name == ACCELERATOR_CANCEL) {
        if (this.currentScreen && this.currentScreen.cancel) {
          this.currentScreen.cancel();
        }
      } else if (name == ACCELERATOR_ENABLE_DEBBUGING) {
        if (attributes.enableDebuggingAllowed ||
            ENABLE_DEBUGGING_AVAILABLE_SCREEN_GROUP.indexOf(currentStepId) !=
            -1) {
          chrome.send('toggleEnableDebuggingScreen');
        }
      } else if (name == ACCELERATOR_ENROLLMENT) {
        if (attributes.startEnrollmentAllowed ||
            currentStepId == SCREEN_GAIA_SIGNIN ||
            currentStepId == SCREEN_PACKAGED_LICENSE ||
            currentStepId == SCREEN_ACCOUNT_PICKER) {
          chrome.send('toggleEnrollmentScreen');
        } else if (attributes.postponeEnrollmentAllowed ||
            currentStepId == SCREEN_OOBE_NETWORK ||
            currentStepId == SCREEN_OOBE_EULA) {
          // In this case update check will be skipped and OOBE will
          // proceed straight to enrollment screen when EULA is accepted.
          chrome.send('skipUpdateEnrollAfterEula');
        } else {
          console.warn('No action for current step ID: ' + currentStepId);
        }
      } else if (name == ACCELERATOR_KIOSK_ENABLE) {
        if (attributes.toggleKioskAllowed ||
            currentStepId == SCREEN_GAIA_SIGNIN ||
            currentStepId == SCREEN_ACCOUNT_PICKER) {
          chrome.send('toggleKioskEnableScreen');
        }
      } else if (name == ACCELERATOR_VERSION) {
        if (this.allowToggleVersion_)
          $('version-labels').hidden = !$('version-labels').hidden;
      } else if (name == ACCELERATOR_RESET) {
        if (currentStepId == SCREEN_OOBE_RESET) {
          $('reset').send(
              login.Screen.CALLBACK_USER_ACTED, USER_ACTION_ROLLBACK_TOGGLED);
        } else if (attributes.resetAllowed ||
            RESET_AVAILABLE_SCREEN_GROUP.indexOf(currentStepId) != -1) {
          chrome.send('toggleResetScreen');
        }
      } else if (name == ACCELERATOR_DEVICE_REQUISITION) {
        if (this.isOobeUI())
          this.showDeviceRequisitionPrompt_();
      } else if (name == ACCELERATOR_DEVICE_REQUISITION_REMORA) {
        if (this.isOobeUI())
          this.showDeviceRequisitionRemoraPrompt_(
              'deviceRequisitionRemoraPromptText', 'remora');
      } else if (name == ACCELERATOR_APP_LAUNCH_BAILOUT) {
        if (currentStepId == SCREEN_APP_LAUNCH_SPLASH)
          chrome.send('cancelAppLaunch');
        if (currentStepId == SCREEN_ARC_KIOSK_SPLASH)
          chrome.send('cancelArcKioskLaunch');
      } else if (name == ACCELERATOR_APP_LAUNCH_NETWORK_CONFIG) {
        if (currentStepId == SCREEN_APP_LAUNCH_SPLASH)
          chrome.send('networkConfigRequest');
      } else if (name == ACCELERATOR_DEMO_MODE) {
        this.startDemoModeFlow();
      } else if (name == ACCELERATOR_SEND_FEEDBACK) {
        chrome.send('sendFeedback');
      }
    },

    /**
     * Appends buttons to the button strip.
     * @param {Array<HTMLElement>} buttons Array with the buttons to append.
     * @param {string} screenId Id of the screen that buttons belong to.
     */
    appendButtons_: function(buttons, screenId) {
      if (buttons) {
        var buttonStrip = $(screenId + '-controls');
        if (buttonStrip) {
          for (var i = 0; i < buttons.length; ++i)
            buttonStrip.appendChild(buttons[i]);
        }
      }
    },

    /**
     * Disables or enables control buttons on the specified screen.
     * @param {HTMLElement} screen Screen which controls should be affected.
     * @param {boolean} disabled Whether to disable controls.
     */
    disableButtons_: function(screen, disabled) {
      var buttons = document.querySelectorAll(
          '#' + screen.id + '-controls button:not(.preserve-disabled-state)');
      for (var i = 0; i < buttons.length; ++i) {
        buttons[i].disabled = disabled;
      }
    },

    screenIsAnimated_: function(screenId) {
      return NOT_ANIMATED_SCREEN_GROUP.indexOf(screenId) != -1;
    },

    /**
     * Updates a step's css classes to reflect left, current, or right position.
     * @param {number} stepIndex step index.
     * @param {string} state one of 'left', 'current', 'right'.
     */
    updateStep_: function(stepIndex, state) {
      var stepId = this.screens_[stepIndex];
      var step = $(stepId);
      var header = $('header-' + stepId);
      var states = ['left', 'right', 'current'];
      for (var i = 0; i < states.length; ++i) {
        if (states[i] != state) {
          step.classList.remove(states[i]);
          if (header) {
            header.classList.remove(states[i]);
          }
        }
      }

      step.classList.add(state);
      if (header) {
        header.classList.add(state);
      }
    },

    /**
     * Switches to the next OOBE step.
     * @param {number} nextStepIndex Index of the next step.
     */
    toggleStep_: function(nextStepIndex, screenData) {
      var currentStepId = this.screens_[this.currentStep_];
      var nextStepId = this.screens_[nextStepIndex];
      var oldStep = $(currentStepId);
      var newStep = $(nextStepId);
      var currentStepAttributes = this.screensAttributes_[this.currentStep_] ||
                                  {};
      var newStepAttributes = this.screensAttributes_[nextStepIndex] || {};

      // Disable controls before starting animation.
      this.disableButtons_(oldStep, true);

      if (oldStep.onBeforeHide)
        oldStep.onBeforeHide();

      if (oldStep.defaultControl && oldStep.defaultControl.onBeforeHide)
        oldStep.defaultControl.onBeforeHide();

      $('oobe').className = nextStepId;

      // Need to do this before calling newStep.onBeforeShow() so that new step
      // is back in DOM tree and has correct offsetHeight / offsetWidth.
      newStep.hidden = false;

      if (newStep.onBeforeShow)
        newStep.onBeforeShow(screenData);

      // We still have several screens that are not implemented as a single
      // Polymer-element, so we need to explicitly inform all oobe-dialogs.
      //
      // TODO(alemate): make every screen a single Polymer element, so that
      // we could simply use OobeDialogHostBehavior in stead of this.
      for(let dialog of newStep.getElementsByTagName('oobe-dialog'))
        dialog.onBeforeShow(screenData);

      if (newStep.defaultControl && newStep.defaultControl.onBeforeShow)
        newStep.defaultControl.onBeforeShow(screenData);

      newStep.classList.remove('hidden');

      var currentIsAnimated = !currentStepAttributes.noAnimatedTransition &&
                              this.screenIsAnimated_(currentStepId);
      var newIsAnimated = !newStepAttributes.noAnimatedTransition &&
                          this.screenIsAnimated_(nextStepId);

      if (this.isOobeUI() && currentIsAnimated && newIsAnimated) {
        // Start gliding animation for OOBE steps.
        if (nextStepIndex > this.currentStep_) {
          for (var i = this.currentStep_; i < nextStepIndex; ++i)
            this.updateStep_(i, 'left');
          this.updateStep_(nextStepIndex, 'current');
        } else if (nextStepIndex < this.currentStep_) {
          for (var i = this.currentStep_; i > nextStepIndex; --i)
            this.updateStep_(i, 'right');
          this.updateStep_(nextStepIndex, 'current');
        }
      } else {
        // Start fading animation for login display or reset screen.
        oldStep.classList.add('faded');
        newStep.classList.remove('faded');
        if (newStepAttributes.noAnimatedTransition ||
            !this.screenIsAnimated_(nextStepId)) {
          newStep.classList.remove('left');
          newStep.classList.remove('right');
        }
      }

      this.disableButtons_(newStep, false);

      // Adjust inner container height based on new step's height.
      this.updateScreenSize(newStep);

      // Default control to be focused (if specified).
      var defaultControl = newStep.defaultControl;

      var outerContainer = $('outer-container');
      var innerContainer = $('inner-container');
      var isOOBE = this.isOobeUI();
      if (this.currentStep_ != nextStepIndex &&
          !oldStep.classList.contains('hidden')) {
        if (oldStep.classList.contains('animated')) {
          innerContainer.classList.add('animation');
          oldStep.addEventListener('transitionend', function f(e) {
            oldStep.removeEventListener('transitionend', f);
            if (oldStep.classList.contains('faded') ||
                oldStep.classList.contains('left') ||
                oldStep.classList.contains('right')) {
              innerContainer.classList.remove('animation');
              oldStep.classList.add('hidden');
              if (!isOOBE)
                oldStep.hidden = true;
            }
            // Refresh defaultControl. It could have changed.
            var defaultControl = newStep.defaultControl;
            if (defaultControl)
              defaultControl.focus();
          });
          ensureTransitionEndEvent(oldStep, MAX_SCREEN_TRANSITION_DURATION);
        } else {
          oldStep.classList.add('hidden');
          oldStep.hidden = true;
          if (defaultControl)
            defaultControl.focus();
        }
      } else {
        // First screen on OOBE launch.
        if (this.isOobeUI() && innerContainer.classList.contains('down')) {
          innerContainer.classList.remove('down');
          innerContainer.addEventListener('transitionend', function f(e) {
            innerContainer.removeEventListener('transitionend', f);
            chrome.send('loginVisible', ['oobe']);
            // Refresh defaultControl. It could have changed.
            var defaultControl = newStep.defaultControl;
            if (defaultControl)
              defaultControl.focus();
          });
          ensureTransitionEndEvent(
              innerContainer, MAX_SCREEN_TRANSITION_DURATION);
        } else {
          if (defaultControl)
            defaultControl.focus();
          chrome.send('loginVisible', ['oobe']);
        }
      }
      this.currentStep_ = nextStepIndex;

      // Call onAfterShow after currentStep_ so that the step can have a
      // post-set hook.
      if (newStep.onAfterShow)
        newStep.onAfterShow(screenData);

      var stepLogo = $('step-logo');
      if (stepLogo) {
        stepLogo.hidden = newStep.classList.contains('no-logo');
      }

      $('oobe').dispatchEvent(
          new CustomEvent('screenchanged', {detail: this.currentScreen.id}));
      chrome.send('updateCurrentScreen', [this.currentScreen.id]);
    },

    /**
     * Make sure that screen is initialized and decorated.
     * @param {Object} screen Screen params dict, e.g. {id: screenId, data: {}}.
     */
    preloadScreen: function(screen) {
      var screenEl = $(screen.id);
      if (screenEl.deferredInitialization !== undefined) {
        screenEl.deferredInitialization();
        delete screenEl.deferredInitialization;
      }
    },

    /**
     * Show screen of given screen id.
     * @param {Object} screen Screen params dict, e.g. {id: screenId, data: {}}.
     */
    showScreen: function(screen) {
      // Do not allow any other screen to clobber the device disabled screen.
      if (this.currentScreen.id == SCREEN_DEVICE_DISABLED)
        return;

      // Prevent initial GAIA signin load from interrupting the kiosk splash
      // screen.
      // TODO: remove this special case when a better fix is found for the race
      // condition. This if statement was introduced to fix http://b/113786350.
      if ((this.currentScreen.id == SCREEN_APP_LAUNCH_SPLASH ||
           this.currentScreen.id == SCREEN_ARC_KIOSK_SPLASH) &&
          screen.id == SCREEN_GAIA_SIGNIN) {
        console.log(
            this.currentScreen.id +
            ' screen showing. Ignoring switch to Gaia screen.');
        return;
      }

      var screenId = screen.id;
      if (screenId == SCREEN_ACCOUNT_PICKER && this.showingViewsLogin) {
        chrome.send('hideOobeDialog');
        return;
      }

      // Make sure the screen is decorated.
      this.preloadScreen(screen);


      // Show sign-in screen instead of account picker if pod row is empty.
      if (screenId == SCREEN_ACCOUNT_PICKER && $('pod-row').pods.length == 0 &&
          cr.isChromeOS) {
        Oobe.showSigninUI();
        return;
      }

      var data = screen.data;
      var index = this.getScreenIndex_(screenId);
      if (index >= 0)
        this.toggleStep_(index, data);
    },

    /**
     * Gets index of given screen id in screens_.
     * @param {string} screenId Id of the screen to look up.
     * @private
     */
    getScreenIndex_: function(screenId) {
      for (let i = 0; i < this.screens_.length; ++i) {
        if (this.screens_[i] == screenId)
          return i;
      }
      return -1;
    },

    /**
     * Register an oobe screen.
     * @param {Element} el Decorated screen element.
     * @param {DisplayManagerScreenAttributes} attributes
     */
    registerScreen: function(el, attributes) {
      var screenId = el.id;
      assert(screenId);

      this.screens_.push(screenId);
      this.screensAttributes_.push(attributes);

      // No headers on Chrome OS
      var headerSections = $('header-sections');
      if (headerSections) {
        var header = document.createElement('span');
        header.id = 'header-' + screenId;
        header.textContent = el.header ? el.header : '';
        header.className = 'header-section';
        headerSections.appendChild(header);
      }
      this.appendButtons_(el.buttons, screenId);

      if (el.updateOobeConfiguration && this.oobe_configuration_)
        el.updateOobeConfiguration(this.oobe_configuration_);
    },

    /**
     * Updates inner container size based on the size of the current screen and
     * other screens in the same group.
     * Should be executed on screen change / screen size change.
     * @param {!HTMLElement} screen Screen that is being shown.
     */
    updateScreenSize: function(screen) {
      if (!cr.isChromeOS) {
        // Have to reset any previously predefined screen size first
        // so that screen contents would define it instead.
        $('inner-container').style.height = '';
        $('inner-container').style.width = '';
        screen.style.width = '';
        screen.style.height = '';
      }

      $('outer-container').classList.toggle(
        'fullscreen', screen.classList.contains('fullscreen'));

      var width = screen.getPreferredSize().width;
      var height = screen.getPreferredSize().height;

      if (!cr.isChromeOS) {
        if (screen.classList.contains('fullscreen')) {
          $('inner-container').style.height = '100%';
          $('inner-container').style.width = '100%';
        } else {
          $('inner-container').style.height = height + 'px';
          $('inner-container').style.width = width + 'px';
        }
        // This requires |screen| to have 'box-sizing: border-box'.
        screen.style.width = width + 'px';
        screen.style.height = height + 'px';
        screen.style.margin = 'auto';
      }
    },

    /**
     * Updates localized content of the screens like headers, buttons and links.
     * Should be executed on language change.
     */
    updateLocalizedContent_: function() {
      for (let i = 0; i < this.screens_.length; ++i) {
        let screenId = this.screens_[i];
        var screen = $(screenId);
        var buttonStrip = $(screenId + '-controls');
        if (buttonStrip)
          buttonStrip.innerHTML = '';
        // TODO(nkostylev): Update screen headers for new OOBE design.
        this.appendButtons_(screen.buttons, screenId);
        if (screen.updateLocalizedContent)
          screen.updateLocalizedContent();
      }
      var isInTabletMode = loadTimeData.getBoolean('isInTabletMode');
      this.setTabletModeState_(isInTabletMode);

      var currentScreenId = this.screens_[this.currentStep_];
      var currentScreen = $(currentScreenId);
      this.updateScreenSize(currentScreen);
      ++this.reloadContentNumEvents_;
    },

    /**
     * Updates Oobe configuration for screens.
     * @param {!OobeTypes.OobeConfiguration} configuration OOBE configuration.
     */
    updateOobeConfiguration_: function(configuration) {
      this.oobe_configuration_ = configuration;
      for (let i = 0; i < this.screens_.length; ++i) {
        let screenId = this.screens_[i];
        var screen = $(screenId);
        if (screen.updateOobeConfiguration)
          screen.updateOobeConfiguration(configuration);
      }
    },

    /**
     * Updates "device in tablet mode" state when tablet mode is changed.
     * @param {Boolean} isInTabletMode True when in tablet mode.
     */
    setTabletModeState_: function(isInTabletMode) {
      for (let i = 0; i < this.screens_.length; ++i) {
        let screenId = this.screens_[i];
        var screen = $(screenId);
        if (screen.setTabletModeState)
          screen.setTabletModeState(isInTabletMode);
      }
    },

    /** Initializes demo mode start listener. */
    initializeDemoModeMultiTapListener: function() {
      if (this.displayType_ == DISPLAY_TYPE.OOBE) {
        this.demoModeStartListener_ = new MultiTapDetector(
            $('outer-container'), 10, this.startDemoModeFlow.bind(this));
      }
    },

    /**
     * Prepares screens to use in login display.
     */
    prepareForLoginDisplay_: function() {
      for (var i = 0, screenId; screenId = this.screens_[i]; ++i) {
        var screen = $(screenId);
        screen.classList.add('faded');
        screen.classList.remove('right');
        screen.classList.remove('left');
      }
      if (this.showingViewsLogin) {
        $('top-header-bar').hidden = true;
      }
    },

    /**
     * Shows the device requisition prompt.
     */
    showDeviceRequisitionPrompt_: function() {
      if (!this.deviceRequisitionDialog_) {
        this.deviceRequisitionDialog_ =
            new cr.ui.dialogs.PromptDialog(document.body);
        this.deviceRequisitionDialog_.setOkLabel(
            loadTimeData.getString('deviceRequisitionPromptOk'));
        this.deviceRequisitionDialog_.setCancelLabel(
            loadTimeData.getString('deviceRequisitionPromptCancel'));
      }
      this.deviceRequisitionDialog_.show(
          loadTimeData.getString('deviceRequisitionPromptText'),
          this.deviceRequisition_,
          this.onConfirmDeviceRequisitionPrompt_.bind(this));
    },

    /**
     * Confirmation handle for the device requisition prompt.
     * @param {string} value The value entered by the user.
     * @private
     */
    onConfirmDeviceRequisitionPrompt_: function(value) {
      this.deviceRequisition_ = value;
      chrome.send('setDeviceRequisition', [value == '' ? 'none' : value]);
    },

    /**
     * Called when window size changed. Notifies current screen about
     * change.
     * @private
     */
    onWindowResize_: function() {
      for (var i = 0, screenId; screenId = this.screens_[i]; ++i) {
        var screen = $(screenId);
        if (screen.onWindowResize)
          screen.onWindowResize();
      }
    },

    /*
     * Updates the device requisition string shown in the requisition
     * prompt.
     * @param {string} requisition The device requisition.
     */
    updateDeviceRequisition: function(requisition) {
      this.deviceRequisition_ = requisition;
    },

    /**
     * Shows the special remora/shark device requisition prompt.
     * @private
     */
    showDeviceRequisitionRemoraPrompt_: function(promptText, requisition) {
      if (!this.deviceRequisitionRemoraDialog_) {
        this.deviceRequisitionRemoraDialog_ =
            new cr.ui.dialogs.ConfirmDialog(document.body);
        this.deviceRequisitionRemoraDialog_.setOkLabel(
            loadTimeData.getString('deviceRequisitionRemoraPromptOk'));
        this.deviceRequisitionRemoraDialog_.setCancelLabel(
            loadTimeData.getString('deviceRequisitionRemoraPromptCancel'));
      }
      this.deviceRequisitionRemoraDialog_.show(
          loadTimeData.getString(promptText),
          function() {  // onShow
            chrome.send('setDeviceRequisition', [requisition]);
          },
          function() {  // onCancel
            chrome.send('setDeviceRequisition', ['none']);
          });
    },

    /**
     * Starts demo mode flow. Shows the enable demo mode dialog if needed.
     */
    startDemoModeFlow: function() {
      var isDemoModeEnabled = loadTimeData.getBoolean('isDemoModeEnabled');
      if (!isDemoModeEnabled) {
        console.warn('Cannot setup demo mode, because it is disabled.');
        return;
      }

      var currentStepId = this.screens_[this.currentStep_];
      var attributes = this.screensAttributes_[this.currentStep_] || {};
      if (!attributes.enterDemoModeAllowed)
        return;

      if (!this.enableDemoModeDialog_) {
        this.enableDemoModeDialog_ =
            new cr.ui.dialogs.ConfirmDialog(document.body);
        this.enableDemoModeDialog_.setOkLabel(
            loadTimeData.getString('enableDemoModeDialogConfirm'));
        this.enableDemoModeDialog_.setCancelLabel(
            loadTimeData.getString('enableDemoModeDialogCancel'));
      }
      var configuration = Oobe.getInstance().getOobeConfiguration();
      if (configuration && configuration.enableDemoMode) {
        // Bypass showing dialog.
        chrome.send('setupDemoMode');
      } else {
        this.enableDemoModeDialog_.showWithTitle(
            loadTimeData.getString('enableDemoModeDialogTitle'),
            loadTimeData.getString('enableDemoModeDialogText'),
            function() {  // onOk
              chrome.send('setupDemoMode');
            });
      }
    },

    /**
     * Returns true if Oobe UI is shown.
     */
    isOobeUI: function() {
      return document.body.classList.contains('oobe-display');
    },

    /**
     * Sets or unsets given |className| for top-level container. Useful
     * for customizing #inner-container with CSS rules. All classes set
     * with with this method will be removed after screen change.
     * @param {string} className Class to toggle.
     * @param {boolean} enabled Whether class should be enabled or disabled.
     */
    toggleClass: function(className, enabled) {
      $('oobe').classList.toggle(className, enabled);
    },

    /**
     * Notifies the C++ handler in views login that the OOBE signin state has
     * been updated. This information is primarily used by the login shelf to
     * update button visibility state.
     * @param {number} state The state (see SIGNIN_UI_STATE) of the OOBE UI.
     */
    setSigninUIState: function(state) {
      if (Oobe.getInstance().showingViewsLogin)
        chrome.send('updateSigninUIState', [state]);
    },

  };

  /**
   * Initializes display manager.
   */
  DisplayManager.initialize = function() {
    var givenDisplayType = DISPLAY_TYPE.UNKNOWN;
    if (document.documentElement.hasAttribute('screen')) {
      // Display type set in HTML property.
      givenDisplayType = document.documentElement.getAttribute('screen');
    } else {
      // Extracting display type from URL.
      givenDisplayType = window.location.pathname.substr(1);
    }
    var instance = Oobe.getInstance();
    Object.getOwnPropertyNames(DISPLAY_TYPE).forEach(function(type) {
      if (DISPLAY_TYPE[type] == givenDisplayType) {
        instance.displayType = givenDisplayType;
      }
    });
    if (instance.displayType == DISPLAY_TYPE.UNKNOWN) {
      console.error(
          'Unknown display type "' + givenDisplayType +
          '". Setting default.');
      instance.displayType = DISPLAY_TYPE.LOGIN;
    }

    instance.initializeDemoModeMultiTapListener();

    window.addEventListener('resize', instance.onWindowResize_.bind(instance));
  };

  /**
   * Returns offset (top, left) of the element.
   * @param {!Element} element HTML element.
   * @return {!Object} The offset (top, left).
   */
  DisplayManager.getOffset = function(element) {
    var x = 0;
    var y = 0;
    while (element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) {
      x += element.offsetLeft - element.scrollLeft;
      y += element.offsetTop - element.scrollTop;
      element = element.offsetParent;
    }
    return { top: y, left: x };
  };

  /**
   * Returns position (top, left, right, bottom) of the element.
   * @param {!Element} element HTML element.
   * @return {!Object} Element position (top, left, right, bottom).
   */
  DisplayManager.getPosition = function(element) {
    var offset = DisplayManager.getOffset(element);
    return {
      top: offset.top,
      right: window.innerWidth - element.offsetWidth - offset.left,
      bottom: window.innerHeight - element.offsetHeight - offset.top,
      left: offset.left
    };
  };

  /**
   * Disables signin UI.
   */
  DisplayManager.disableSigninUI = function() {
    $('pod-row').disabled = true;
  };

  /**
   * Shows signin UI.
   * @param {string} opt_email An optional email for signin UI.
   */
  DisplayManager.showSigninUI = function(opt_email) {
    var currentScreenId = Oobe.getInstance().currentScreen.id;
    if (currentScreenId == SCREEN_GAIA_SIGNIN)
      Oobe.getInstance().setSigninUIState(SIGNIN_UI_STATE.GAIA_SIGNIN);
    chrome.send('showAddUser', [opt_email]);
  };

  /**
   * Resets sign-in input fields.
   * @param {boolean} forceOnline Whether online sign-in should be forced.
   *     If |forceOnline| is false previously used sign-in type will be used.
   */
  DisplayManager.resetSigninUI = function(forceOnline) {
    var currentScreenId = Oobe.getInstance().currentScreen.id;

    if ($(SCREEN_GAIA_SIGNIN)) {
      $(SCREEN_GAIA_SIGNIN)
          .reset(currentScreenId == SCREEN_GAIA_SIGNIN, forceOnline);
    }
    $('pod-row').reset(currentScreenId == SCREEN_ACCOUNT_PICKER);
  };

  /**
   * Creates a div element used to display error message in an error bubble.
   *
   * @param {string} message The error message.
   * @param {string} link Text to use for help link.
   * @param {number} helpId Help topic Id associated with help link.
   * @return {!HTMLElement} The error bubble content.
   */
  DisplayManager.createErrorElement_ = function(message, link, helpId) {
    var error = document.createElement('div');

    var messageDiv = document.createElement('div');
    messageDiv.className = 'error-message-bubble';
    messageDiv.textContent = message;
    error.appendChild(messageDiv);

    if (link) {
      messageDiv.classList.add('error-message-bubble-padding');

      var helpLink = document.createElement('a');
      helpLink.href = '#';
      helpLink.textContent = link;
      helpLink.addEventListener('click', function(e) {
        chrome.send('launchHelpApp', [helpId]);
        e.preventDefault();
      });
      error.appendChild(helpLink);
    }

    error.setAttribute('aria-live', 'assertive');
    return error;
  };

  /**
   * Shows sign-in error bubble.
   * @param {number} loginAttempts Number of login attemps tried.
   * @param {string} message Error message to show.
   * @param {string} link Text to use for help link.
   * @param {number} helpId Help topic Id associated with help link.
   */
  DisplayManager.showSignInError = function(
      loginAttempts, message, link, helpId) {
    var error = DisplayManager.createErrorElement_(message, link, helpId);

    var currentScreen = Oobe.getInstance().currentScreen;
    if (currentScreen && typeof currentScreen.showErrorBubble === 'function') {
      currentScreen.showErrorBubble(loginAttempts, error);
      this.errorMessageWasShownForTesting_ = true;
    }
  };

  /**
   * Shows a warning to the user that the detachable base (keyboard) different
   * than the one previously used by the user got attached to the device. It
   * warn the user that the attached base might be untrusted.
   *
   * @param {string} username The username of the user with which the error
   *     bubble is associated. For example, in the account picker screen, it
   *     identifies the user pod under which the error bubble should be shown.
   * @param {string} message Error message to show.
   * @param {string} link Text to use for help link.
   * @param {number} helpId Help topic Id associated with help link.
   */
  DisplayManager.showDetachableBaseChangedWarning = function(
      username, message, link, helpId) {
    var error = DisplayManager.createErrorElement_(message, link, helpId);

    var currentScreen = Oobe.getInstance().currentScreen;
    if (currentScreen &&
        typeof currentScreen.showDetachableBaseWarningBubble === 'function') {
      currentScreen.showDetachableBaseWarningBubble(username, error);
    }
  };

  /**
   * Hides the warning bubble shown by {@code showDetachableBaseChangedWarning}.
   *
   * @param {string} username The username of the user with wich the warning was
   *     associated.
   */
  DisplayManager.hideDetachableBaseChangedWarning = function(username) {
    var currentScreen = Oobe.getInstance().currentScreen;
    if (currentScreen &&
        typeof currentScreen.hideDetachableBaseWarningBubble === 'function') {
      currentScreen.hideDetachableBaseWarningBubble(username);
    }
  };

  /**
   * Shows password changed screen that offers migration.
   * @param {boolean} showError Whether to show the incorrect password error.
   * @param {string} email What user does reauth. Being used for display in the
   * new UI.
   */
  DisplayManager.showPasswordChangedScreen = function(showError, email) {
    login.PasswordChangedScreen.show(showError, email);
  };

  /**
   * Shows TPM error screen.
   */
  DisplayManager.showTpmError = function() {
    login.TPMErrorMessageScreen.show();
  };

  /**
   * Shows password change screen for Active Directory users.
   * @param {string} username Display name of the user whose password is being
   * changed.
   */
  DisplayManager.showActiveDirectoryPasswordChangeScreen = function(username) {
    login.ActiveDirectoryPasswordChangeScreen.show(username);
  };

  /**
   * Clears error bubble.
   */
  DisplayManager.clearErrors = function() {
    $('bubble').hide();
    this.errorMessageWasShownForTesting_ = false;

    var bubbles = document.querySelectorAll('.bubble-shown');
    for (var i = 0; i < bubbles.length; ++i)
      bubbles[i].classList.remove('bubble-shown');
  };

  /**
   * Sets text content for a div with |labelId|.
   * @param {string} labelId Id of the label div.
   * @param {string} labelText Text for the label.
   */
  DisplayManager.setLabelText = function(labelId, labelText) {
    $(labelId).textContent = labelText;
  };

  /**
   * Sets the text content of the enterprise info message and asset ID.
   * @param {string} messageText The message text.
   * @param {string} assetId The device asset ID.
   */
  DisplayManager.setEnterpriseInfo = function(messageText, assetId) {
    $('asset-id').textContent =
        ((assetId == '') ? '' :
                           loadTimeData.getStringF('assetIdLabel', assetId));
  };

  /**
   * Sets the text content of the Bluetooth device info message.
   * @param {string} bluetoothName The Bluetooth device name text.
   */
  DisplayManager.setBluetoothDeviceInfo = function(bluetoothName) {
    $('bluetooth-name').hidden = false;
    $('bluetooth-name').textContent = bluetoothName;
  };

  /**
   * Clears password field in user-pod.
   */
  DisplayManager.clearUserPodPassword = function() {
    $('pod-row').clearFocusedPod();
  };

  /**
   * Restores input focus to currently selected pod.
   */
  DisplayManager.refocusCurrentPod = function() {
    $('pod-row').refocusCurrentPod();
  };

  // Export
  return {
    DisplayManager: DisplayManager
  };
});

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Account picker screen implementation.
 */

login.createScreen('AccountPickerScreen', 'account-picker', function() {
  /**
   * Maximum number of offline login failures before online login.
   * @type {number}
   * @const
   */
  var MAX_LOGIN_ATTEMPTS_IN_POD = 3;

  /**
   * Distance between error bubble and user POD.
   * @type {number}
   * @const
   */
   var BUBBLE_POD_OFFSET = 4;

   return {
     EXTERNAL_API: [
       'loadUsers',
       'updateUserImage',
       'setCapsLockState',
       'removeUser',
       'showBannerMessage',
       'showUserPodCustomIcon',
       'hideUserPodCustomIcon',
       'setUserPodFingerprintIcon',
       'removeUserPodFingerprintIcon',
       'setPinEnabledForUser',
       'setAuthType',
       'setTabletModeState',
       'setPublicSessionDisplayName',
       'setPublicSessionLocales',
       'setPublicSessionKeyboardLayouts',
     ],

     preferredWidth_: 0,
     preferredHeight_: 0,

     // Whether this screen is shown for the first time.
     firstShown_: true,

     // Whether this screen is currently being shown.
     showing_: false,

     /** @override */
     decorate: function() {
       login.PodRow.decorate($('pod-row'));
     },

     /** @override */
     getPreferredSize: function() {
       return {width: this.preferredWidth_, height: this.preferredHeight_};
     },

     /** @override */
     onWindowResize: function() {
       $('pod-row').onWindowResize();

       // Reposition the error bubble, if it is showing. Since we are just
       // moving the bubble, the number of login attempts tried doesn't matter.
       var errorBubble = $('bubble');
       if (errorBubble && !errorBubble.hidden)
         this.showErrorBubble(0, undefined /* Reuses the existing message. */);
     },

     /**
      * Sets preferred size for account picker screen.
      */
     setPreferredSize: function(width, height) {
       this.preferredWidth_ = width;
       this.preferredHeight_ = height;
     },

     /* Cancel user adding if ESC was pressed.
      */
     cancel: function() {
       if (Oobe.getInstance().displayType == DISPLAY_TYPE.USER_ADDING)
         chrome.send('cancelUserAdding');
     },

     /**
      * Event handler that is invoked just after the frame is shown.
      * @param {string} data Screen init payload.
      */
     onAfterShow: function(data) {
       $('pod-row').handleAfterShow();
     },

     /**
      * Event handler that is invoked just before the frame is shown.
      * @param {string} data Screen init payload.
      */
     onBeforeShow: function(data) {
       this.showing_ = true;
       chrome.send('loginUIStateChanged', ['account-picker', true]);
       $('login-header-bar').signinUIState = SIGNIN_UI_STATE.ACCOUNT_PICKER;
       // Header bar should be always visible on Account Picker screen.
       chrome.send('hideCaptivePortal');
       var podRow = $('pod-row');
       podRow.handleBeforeShow();

       // In case of the preselected pod onShow will be called once pod
       // receives focus.
       if (!podRow.preselectedPod)
         this.onShow();
     },

     /**
      * Event handler invoked when the page is shown and ready.
      */
     onShow: function() {
       if (!this.showing_) {
         // This method may be called asynchronously when the pod row finishes
         // initializing. However, at that point, the screen may have been
         // hidden again already. If that happens, ignore the onShow() call.
         return;
       }
       chrome.send('getTabletModeState');
       if (!this.firstShown_)
         return;
       this.firstShown_ = false;

       // Ensure that login is actually visible.
       window.requestAnimationFrame(function() {
         chrome.send('accountPickerReady');
         chrome.send('loginVisible', ['account-picker']);
       });
     },

     /**
      * Event handler that is invoked just before the frame is hidden.
      */
     onBeforeHide: function() {
       $('pod-row').clearFocusedPod();
       this.showing_ = false;
       chrome.send('loginUIStateChanged', ['account-picker', false]);
       $('login-header-bar').signinUIState = SIGNIN_UI_STATE.HIDDEN;
       $('pod-row').handleHide();
     },

     /**
      * Shows sign-in error bubble.
      * @param {number} loginAttempts Number of login attemps tried.
      * @param {HTMLElement} content Content to show in bubble.
      */
     showErrorBubble: function(loginAttempts, error) {
       var activatedPod = $('pod-row').activatedPod;
       if (!activatedPod) {
         $('bubble').showContentForElement(
             $('pod-row'), cr.ui.Bubble.Attachment.RIGHT, error);
         return;
       }
       // Show web authentication if this is not a supervised user.
       if (loginAttempts > MAX_LOGIN_ATTEMPTS_IN_POD &&
           !activatedPod.user.supervisedUser) {
         chrome.send(
             'maxIncorrectPasswordAttempts', [activatedPod.user.emailAddress]);
         activatedPod.showSigninUI();
       } else {
         if (loginAttempts == 1) {
           chrome.send(
               'firstIncorrectPasswordAttempt',
               [activatedPod.user.emailAddress]);
         }
         // Update the pod row display if incorrect password.
         $('pod-row').setFocusedPodErrorDisplay(true);

         /** @const */ var BUBBLE_OFFSET = 25;
         // -8 = 4(BUBBLE_POD_OFFSET) - 2(bubble margin)
         //      - 10(internal bubble adjustment)
         var bubblePositioningPadding = -8;

         var bubbleAnchor;
         var attachment;
         if (activatedPod.pinContainer &&
             activatedPod.pinContainer.style.visibility == 'visible') {
           // Anchor the bubble to the input field.
           bubbleAnchor =
               (activatedPod.getElementsByClassName('auth-container'))[0];
           if (!bubbleAnchor) {
             console.error('auth-container not found!');
             bubbleAnchor = activatedPod.mainInput;
           }
           attachment = cr.ui.Bubble.Attachment.RIGHT;
         } else {
           // Anchor the bubble to the pod instead of the input.
           bubbleAnchor = activatedPod;
           attachment = cr.ui.Bubble.Attachment.BOTTOM;
         }

         var bubble = $('bubble');

         // Cannot use cr.ui.LoginUITools.get* on bubble until it is attached to
         // the element. getMaxHeight/Width rely on the correct up/left element
         // side positioning that doesn't happen until bubble is attached.
         var maxHeight = cr.ui.LoginUITools.getMaxHeightBeforeShelfOverlapping(
                             bubbleAnchor) -
             bubbleAnchor.offsetHeight - BUBBLE_POD_OFFSET;
         var maxWidth = cr.ui.LoginUITools.getMaxWidthToFit(bubbleAnchor) -
             bubbleAnchor.offsetWidth - BUBBLE_POD_OFFSET;

         // Change bubble visibility temporary to calculate height.
         var bubbleVisibility = bubble.style.visibility;
         bubble.style.visibility = 'hidden';
         bubble.hidden = false;
         // Now we need the bubble to have the new content before calculating
         // size. Undefined |error| == reuse old content.
         if (error !== undefined)
           bubble.replaceContent(error);

         // Get bubble size.
         var bubbleOffsetHeight = parseInt(bubble.offsetHeight);
         var bubbleOffsetWidth = parseInt(bubble.offsetWidth);
         // Restore attributes.
         bubble.style.visibility = bubbleVisibility;
         bubble.hidden = true;

         if (attachment == cr.ui.Bubble.Attachment.BOTTOM) {
           // Move error bubble if it overlaps the shelf.
           if (maxHeight < bubbleOffsetHeight)
             attachment = cr.ui.Bubble.Attachment.TOP;
         } else {
           // Move error bubble if it doesn't fit screen.
           if (maxWidth < bubbleOffsetWidth) {
             bubblePositioningPadding = 2;
             attachment = cr.ui.Bubble.Attachment.LEFT;
           }
         }
         var showBubbleCallback = function() {
           activatedPod.removeEventListener(
               'transitionend', showBubbleCallback);
           $('bubble').showContentForElement(
               bubbleAnchor, attachment, error, BUBBLE_OFFSET,
               bubblePositioningPadding, true);
         };
         activatedPod.addEventListener('transitionend', showBubbleCallback);
         ensureTransitionEndEvent(activatedPod);
       }
     },

     /**
      * Loads given users in pod row.
      * @param {array} users Array of user.
      * @param {boolean} showGuest Whether to show guest session button.
      */
     loadUsers: function(users, showGuest) {
       $('pod-row').loadPods(users);
       $('login-header-bar').showGuestButton = showGuest;
       // On Desktop, #login-header-bar has a shadow if there are 8+ profiles.
       if (Oobe.getInstance().displayType == DISPLAY_TYPE.DESKTOP_USER_MANAGER)
         $('login-header-bar').classList.toggle('shadow', users.length > 8);
     },

     /**
      * Updates current image of a user.
      * @param {string} username User for which to update the image.
      */
     updateUserImage: function(username) {
       $('pod-row').updateUserImage(username);
     },

     /**
      * Updates Caps Lock state (for Caps Lock hint in password input field).
      * @param {boolean} enabled Whether Caps Lock is on.
      */
     setCapsLockState: function(enabled) {
       $('pod-row').classList.toggle('capslock-on', enabled);
     },

     /**
      * Remove given user from pod row if it is there.
      * @param {string} user name.
      */
     removeUser: function(username) {
       $('pod-row').removeUserPod(username);
     },

     /**
      * Displays a banner containing |message|. If the banner is already present
      * this function updates the message in the banner. This function is used
      * by the chrome.screenlockPrivate.showMessage API.
      * @param {string} message Text to be displayed or empty to hide the
      *     banner.
      * @param {boolean} isWarning True if the given message is a warning.
      */
     showBannerMessage: function(message, isWarning) {
       var banner = $('signin-banner');
       banner.textContent = message;
       banner.classList.toggle('message-set', !!message);
     },

     /**
      * Shows a custom icon in the user pod of |username|. This function
      * is used by the chrome.screenlockPrivate API.
      * @param {string} username Username of pod to add button
      * @param {!{id: !string,
      *           hardlockOnClick: boolean,
      *           isTrialRun: boolean,
      *           tooltip: ({text: string, autoshow: boolean} | undefined)}}
      * icon The icon parameters.
      */
     showUserPodCustomIcon: function(username, icon) {
       $('pod-row').showUserPodCustomIcon(username, icon);
     },

     /**
      * Hides the custom icon in the user pod of |username| added by
      * showUserPodCustomIcon(). This function is used by the
      * chrome.screenlockPrivate API.
      * @param {string} username Username of pod to remove button
      */
     hideUserPodCustomIcon: function(username) {
       $('pod-row').hideUserPodCustomIcon(username);
     },

     /**
      * Set a fingerprint icon in the user pod of |username|.
      * @param {string} username Username of the selected user
      * @param {number} state Fingerprint unlock state
      */
     setUserPodFingerprintIcon: function(username, state) {
       $('pod-row').setUserPodFingerprintIcon(username, state);
     },

     /**
      * Removes the fingerprint icon in the user pod of |username|.
      * @param {string} username Username of the selected user.
      */
     removeUserPodFingerprintIcon: function(username) {
       $('pod-row').removeUserPodFingerprintIcon(username);
     },

     /**
      * Sets the authentication type used to authenticate the user.
      * @param {string} username Username of selected user
      * @param {number} authType Authentication type, must be a valid value in
      *                          the AUTH_TYPE enum in user_pod_row.js.
      * @param {string} value The initial value to use for authentication.
      */
     setAuthType: function(username, authType, value) {
       $('pod-row').setAuthType(username, authType, value);
     },

     /**
      * Sets the state of tablet mode.
      * @param {boolean} isTabletModeEnabled true if the mode is on.
      */
     setTabletModeState: function(isTabletModeEnabled) {
       $('pod-row').setTabletModeState(isTabletModeEnabled);
     },

     /**
      * Enables or disables the pin keyboard for the given user. This may change
      * pin keyboard visibility.
      * @param {!string} user
      * @param {boolean} enabled
      */
     setPinEnabledForUser: function(user, enabled) {
       $('pod-row').setPinEnabled(user, enabled);
     },

     /**
      * Updates the display name shown on a public session pod.
      * @param {string} userID The user ID of the public session
      * @param {string} displayName The new display name
      */
     setPublicSessionDisplayName: function(userID, displayName) {
       $('pod-row').setPublicSessionDisplayName(userID, displayName);
     },

     /**
      * Updates the list of locales available for a public session.
      * @param {string} userID The user ID of the public session
      * @param {!Object} locales The list of available locales
      * @param {string} defaultLocale The locale to select by default
      * @param {boolean} multipleRecommendedLocales Whether |locales| contains
      *     two or more recommended locales
      */
     setPublicSessionLocales: function(
         userID, locales, defaultLocale, multipleRecommendedLocales) {
       $('pod-row').setPublicSessionLocales(
           userID, locales, defaultLocale, multipleRecommendedLocales);
     },

     /**
      * Updates the list of available keyboard layouts for a public session pod.
      * @param {string} userID The user ID of the public session
      * @param {string} locale The locale to which this list of keyboard layouts
      *     applies
      * @param {!Object} list List of available keyboard layouts
      */
     setPublicSessionKeyboardLayouts: function(userID, locale, list) {
       $('pod-row').setPublicSessionKeyboardLayouts(userID, locale, list);
     },
   };
});

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview User pod row implementation.
 */

cr.define('login', function() {
  /**
   * Number of displayed columns depending on user pod count.
   * @type {Array<number>}
   * @const
   */
  var COLUMNS = [0, 1, 2, 3, 4, 5, 4, 4, 4, 5, 5, 6, 6, 5, 5, 6, 6, 6, 6];

  /**
   * Mapping between number of columns in pod-row and margin between user pods
   * for such layout.
   * @type {Array<number>}
   * @const
   */
  var MARGIN_BY_COLUMNS = [undefined, 40, 40, 40, 40, 40, 12];

  /**
   * Mapping between number of columns in the desktop pod-row and margin
   * between user pods for such layout.
   * @type {Array<number>}
   * @const
   */
  var DESKTOP_MARGIN_BY_COLUMNS = [undefined, 32, 32, 32, 32, 32, 32];

  /**
   * Maximal number of columns currently supported by pod-row.
   * @type {number}
   * @const
   */
  var MAX_NUMBER_OF_COLUMNS = 6;

  /**
   * Maximal number of rows if sign-in banner is displayed alonside.
   * @type {number}
   * @const
   */
  var MAX_NUMBER_OF_ROWS_UNDER_SIGNIN_BANNER = 2;

  /**
   * Variables used for pod placement processing. Width and height should be
   * synced with computed CSS sizes of pods.
   */
  var CROS_POD_WIDTH = 180;
  var DESKTOP_POD_WIDTH = 180;
  var MD_DESKTOP_POD_WIDTH = 160;
  var PUBLIC_EXPANDED_BASIC_WIDTH = 500;
  var PUBLIC_EXPANDED_ADVANCED_WIDTH = 610;
  var CROS_POD_HEIGHT = 213;
  var DESKTOP_POD_HEIGHT = 226;
  var MD_DESKTOP_POD_HEIGHT = 200;
  var POD_ROW_PADDING = 10;
  var DESKTOP_ROW_PADDING = 32;
  var CUSTOM_ICON_CONTAINER_SIZE = 40;
  var CROS_PIN_POD_HEIGHT = 417;

  /**
   * Minimal padding between user pod and virtual keyboard.
   * @type {number}
   * @const
   */
  var USER_POD_KEYBOARD_MIN_PADDING = 20;

  /**
   * Maximum time for which the pod row remains hidden until all user images
   * have been loaded.
   * @type {number}
   * @const
   */
  var POD_ROW_IMAGES_LOAD_TIMEOUT_MS = 3000;

  /**
   * Tab order for user pods. Update these when adding new controls.
   * @enum {number}
   * @const
   */
  var UserPodTabOrder = {
    POD_INPUT: 1,        // Password input field, Action box menu button and
                         // the pod itself.
    PIN_KEYBOARD: 2,     // Pin keyboard below the password input field.
    POD_CUSTOM_ICON: 3,  // Pod custom icon next to password input field.
    HEADER_BAR: 4,       // Buttons on the header bar (Shutdown, Add User).
    POD_MENU_ITEM: 5     // User pad menu items (User info, Remove user).
  };

  /**
   * Supported authentication types. Keep in sync with the enum in
   * components/proximity_auth/public/interfaces/auth_type.mojom
   * @enum {number}
   * @const
   */
  var AUTH_TYPE = {
    OFFLINE_PASSWORD: 0,
    ONLINE_SIGN_IN: 1,
    USER_CLICK: 2,
    EXPAND_THEN_USER_CLICK: 3,
    FORCE_OFFLINE_PASSWORD: 4
  };

  /**
   * Names of authentication types.
   */
  var AUTH_TYPE_NAMES = {
    0: 'offlinePassword',
    1: 'onlineSignIn',
    2: 'userClick',
    3: 'expandThenUserClick',
    4: 'forceOfflinePassword'
  };

  /**
   * Supported fingerprint unlock states.
   * @enum {number}
   * @const
   */
  var FINGERPRINT_STATES = {
    HIDDEN: 0,
    DEFAULT: 1,
    SIGNIN: 2,
    FAILED: 3,
  };

  /**
   * The fingerprint states to classes mapping.
   * {@code state} properties indicate current fingerprint unlock state.
   * {@code class} properties are CSS classes used to set the icons' background
   * and password placeholder color.
   * @const {Array<{type: !number, class: !string}>}
   */
  var FINGERPRINT_STATES_MAPPING = [
    {state: FINGERPRINT_STATES.HIDDEN, class: 'hidden'},
    {state: FINGERPRINT_STATES.DEFAULT, class: 'default'},
    {state: FINGERPRINT_STATES.SIGNIN, class: 'signin'},
    {state: FINGERPRINT_STATES.FAILED, class: 'failed'}
  ];

  // Supported multi-profile user behavior values.
  // Keep in sync with the enum in login_user_info.mojom
  var MULTI_PROFILE_USER_BEHAVIOR = {
    UNRESTRICTED: 0,
    PRIMARY_ONLY: 1,
    NOT_ALLOWED: 2,
    OWNER_PRIMARY_ONLY: 3
  };

  // Focus and tab order are organized as follows:
  //
  // (1) all user pods have tab index 1 so they are traversed first;
  // (2) when a user pod is activated, its tab index is set to -1 and its
  // main input field gets focus and tab index 1;
  // (3) if user pod custom icon is interactive, it has tab index 2 so it
  // follows the input.
  // (4) buttons on the header bar have tab index 3 so they follow the custom
  // icon, or user pod if custom icon is not interactive;
  // (5) Action box buttons have tab index 4 and follow header bar buttons;
  // (6) lastly, focus jumps to the Status Area and back to user pods.
  //
  // 'Focus' event is handled by a capture handler for the whole document
  // and in some cases 'mousedown' event handlers are used instead of 'click'
  // handlers where it's necessary to prevent 'focus' event from being fired.

  /**
   * Helper function to remove a class from given element.
   * @param {!HTMLElement} el Element whose class list to change.
   * @param {string} cl Class to remove.
   */
  function removeClass(el, cl) {
    el.classList.remove(cl);
  }

  /**
   * Creates a user pod.
   * @constructor
   * @extends {HTMLDivElement}
   */
  var UserPod = cr.ui.define(function() {
    var node = $('user-pod-template').cloneNode(true);
    node.removeAttribute('id');
    return node;
  });

  /**
   * Stops event propagation from the any user pod child element.
   * @param {Event} e Event to handle.
   */
  function stopEventPropagation(e) {
    // Prevent default so that we don't trigger a 'focus' event.
    e.preventDefault();
    e.stopPropagation();
  }

  /**
   * Creates an element for custom icon shown in a user pod next to the input
   * field.
   * @constructor
   * @extends {HTMLDivElement}
   */
  var UserPodCustomIcon = cr.ui.define(function() {
    var node = document.createElement('div');
    node.classList.add('custom-icon-container');
    node.hidden = true;

    // Create the actual icon element and add it as a child to the container.
    var iconNode = document.createElement('div');
    iconNode.classList.add('custom-icon');
    node.appendChild(iconNode);
    return node;
  });

  /**
   * The supported user pod custom icons.
   * {@code id} properties should be in sync with values set by C++ side.
   * {@code class} properties are CSS classes used to set the icons' background.
   * @const {Array<{id: !string, class: !string}>}
   */
  UserPodCustomIcon.ICONS = [
    {id: 'locked', class: 'custom-icon-locked'},
    {id: 'locked-to-be-activated',
     class: 'custom-icon-locked-to-be-activated'},
    {id: 'locked-with-proximity-hint',
     class: 'custom-icon-locked-with-proximity-hint'},
    {id: 'unlocked', class: 'custom-icon-unlocked'},
    {id: 'hardlocked', class: 'custom-icon-hardlocked'},
    {id: 'spinner', class: 'custom-icon-spinner'}
  ];

  /**
   * The hover state for the icon. When user hovers over the icon, a tooltip
   * should be shown after a short delay. This enum is used to keep track of
   * the tooltip status related to hover state.
   * @enum {string}
   */
  UserPodCustomIcon.HoverState = {
    /** The user is not hovering over the icon. */
    NO_HOVER: 'no_hover',

    /** The user is hovering over the icon but the tooltip is not activated. */
    HOVER: 'hover',

    /**
     * User is hovering over the icon and the tooltip is activated due to the
     * hover state (which happens with delay after user starts hovering).
     */
    HOVER_TOOLTIP: 'hover_tooltip'
  };

  /**
   * If the icon has a tooltip that should be automatically shown, the tooltip
   * is shown even when there is no user action (i.e. user is not hovering over
   * the icon), after a short delay. The tooltip should be hidden after some
   * time. Note that the icon will not be considered autoshown if it was
   * previously shown as a result of the user action.
   * This enum is used to keep track of this state.
   * @enum {string}
   */
  UserPodCustomIcon.TooltipAutoshowState = {
    /** The tooltip should not be or was not automatically shown. */
    DISABLED: 'disabled',

    /**
     * The tooltip should be automatically shown, but the timeout for showing
     * the tooltip has not yet passed.
     */
    ENABLED: 'enabled',

    /** The tooltip was automatically shown. */
    ACTIVE : 'active'
  };

  UserPodCustomIcon.prototype = {
    __proto__: HTMLDivElement.prototype,

    /**
     * The id of the icon being shown.
     * @type {string}
     * @private
     */
    iconId_: '',

    /**
     * A reference to the timeout for updating icon hover state. Non-null
     * only if there is an active timeout.
     * @type {?number}
     * @private
     */
    updateHoverStateTimeout_: null,

    /**
     * A reference to the timeout for updating icon tooltip autoshow state.
     * Non-null only if there is an active timeout.
     * @type {?number}
     * @private
     */
    updateTooltipAutoshowStateTimeout_: null,

    /**
     * Callback for click and 'Enter' key events that gets set if the icon is
     * interactive.
     * @type {?function()}
     * @private
     */
    actionHandler_: null,

    /**
     * The current tooltip state.
     * @type {{active: function(): boolean,
     *         autoshow: !UserPodCustomIcon.TooltipAutoshowState,
     *         hover: !UserPodCustomIcon.HoverState,
     *         text: string}}
     * @private
     */
    tooltipState_: {
      /**
       * Utility method for determining whether the tooltip is active, either as
       * a result of hover state or being autoshown.
       * @return {boolean}
       */
      active: function() {
        return this.autoshow == UserPodCustomIcon.TooltipAutoshowState.ACTIVE ||
               this.hover == UserPodCustomIcon.HoverState.HOVER_TOOLTIP;
      },

      /**
       * @type {!UserPodCustomIcon.TooltipAutoshowState}
       */
      autoshow: UserPodCustomIcon.TooltipAutoshowState.DISABLED,

      /**
       * @type {!UserPodCustomIcon.HoverState}
       */
      hover: UserPodCustomIcon.HoverState.NO_HOVER,

      /**
       * The tooltip text.
       * @type {string}
       */
      text: ''
    },

    /** @override */
    decorate: function() {
      this.iconElement.addEventListener(
          'mouseover',
          this.updateHoverState_.bind(this,
                                      UserPodCustomIcon.HoverState.HOVER));
      this.iconElement.addEventListener(
          'mouseout',
          this.updateHoverState_.bind(this,
                                      UserPodCustomIcon.HoverState.NO_HOVER));
      this.iconElement.addEventListener('mousedown',
                                        this.handleMouseDown_.bind(this));
      this.iconElement.addEventListener('click',
                                        this.handleClick_.bind(this));
      this.iconElement.addEventListener('keydown',
                                        this.handleKeyDown_.bind(this));

      // When the icon is focused using mouse, there should be no outline shown.
      // Preventing default mousedown event accomplishes this.
      this.iconElement.addEventListener('mousedown', function(e) {
        e.preventDefault();
      });
    },

    /**
     * Getter for the icon element's div.
     * @return {HTMLDivElement}
     */
    get iconElement() {
      return this.querySelector('.custom-icon');
    },

    /**
     * Updates the icon element class list to properly represent the provided
     * icon.
     * @param {!string} id The id of the icon that should be shown. Should be
     *    one of the ids listed in {@code UserPodCustomIcon.ICONS}.
     */
    setIcon: function(id) {
      this.iconId_ = id;
      UserPodCustomIcon.ICONS.forEach(function(icon) {
        this.iconElement.classList.toggle(icon.class, id == icon.id);
      }, this);
    },

    /**
     * Sets the ARIA label for the icon.
     * @param {!string} ariaLabel
     */
    setAriaLabel: function(ariaLabel) {
      this.iconElement.setAttribute('aria-label', ariaLabel);
    },

    /**
     * Shows the icon.
     */
    show: function() {
      // Show the icon if the current iconId is valid.
      var validIcon = false;
      UserPodCustomIcon.ICONS.forEach(function(icon) {
        validIcon = validIcon || this.iconId_ == icon.id;
      }, this);
      this.hidden = validIcon ? false : true;
    },

    /**
     * Updates the icon tooltip. If {@code autoshow} parameter is set the
     * tooltip is immediatelly shown. If tooltip text is not set, the method
     * ensures the tooltip gets hidden. If tooltip is shown prior to this call,
     * it remains shown, but the tooltip text is updated.
     * @param {!{text: string, autoshow: boolean}} tooltip The tooltip
     *    parameters.
     */
    setTooltip: function(tooltip) {
      this.iconElement.classList.toggle('icon-with-tooltip', !!tooltip.text);

      this.updateTooltipAutoshowState_(
          tooltip.autoshow ?
              UserPodCustomIcon.TooltipAutoshowState.ENABLED :
              UserPodCustomIcon.TooltipAutoshowState.DISABLED);
      this.tooltipState_.text = tooltip.text;
      this.updateTooltip_();
    },

    /**
     * Sets up icon tabIndex attribute and handler for click and 'Enter' key
     * down events.
     * @param {?function()} callback If icon should be interactive, the
     *     function to get called on click and 'Enter' key down events. Should
     *     be null to make the icon  non interactive.
     */
    setInteractive: function(callback) {
      this.iconElement.classList.toggle('interactive-custom-icon', !!callback);

      // Update tabIndex property if needed.
      if (!!this.actionHandler_ != !!callback) {
        if (callback) {
          this.iconElement.setAttribute('tabIndex',
                                         UserPodTabOrder.POD_CUSTOM_ICON);
        } else {
          this.iconElement.removeAttribute('tabIndex');
        }
      }

      // Set the new action handler.
      this.actionHandler_ = callback;
    },

    /**
     * Hides the icon and cleans its state.
     */
    hide: function() {
      this.hideTooltip_();
      this.clearUpdateHoverStateTimeout_();
      this.clearUpdateTooltipAutoshowStateTimeout_();
      this.setInteractive(null);
      this.hidden = true;
    },

    /**
     * Clears timeout for showing a tooltip if one is set. Used to cancel
     * showing the tooltip when the user starts typing the password.
     */
    cancelDelayedTooltipShow: function() {
      this.updateTooltipAutoshowState_(
          UserPodCustomIcon.TooltipAutoshowState.DISABLED);
      this.clearUpdateHoverStateTimeout_();
    },

    /**
     * Handles mouse down event in the icon element.
     * @param {Event} e The mouse down event.
     * @private
     */
    handleMouseDown_: function(e) {
      this.updateHoverState_(UserPodCustomIcon.HoverState.NO_HOVER);
      this.updateTooltipAutoshowState_(
          UserPodCustomIcon.TooltipAutoshowState.DISABLED);

      // Stop the event propagation so in the case the click ends up on the
      // user pod (outside the custom icon) auth is not attempted.
      stopEventPropagation(e);
    },

    /**
     * Handles click event on the icon element. No-op if
     * {@code this.actionHandler_} is not set.
     * @param {Event} e The click event.
     * @private
     */
    handleClick_: function(e) {
      if (!this.actionHandler_)
        return;
      this.actionHandler_();
      stopEventPropagation(e);
    },

    /**
     * Handles key down event on the icon element. Only 'Enter' key is handled.
     * No-op if {@code this.actionHandler_} is not set.
     * @param {Event} e The key down event.
     * @private
     */
    handleKeyDown_: function(e) {
      if (!this.actionHandler_ || e.key != 'Enter')
        return;
      this.actionHandler_(e);
      stopEventPropagation(e);
    },

    /**
     * Changes the tooltip hover state and updates tooltip visibility if needed.
     * @param {!UserPodCustomIcon.HoverState} state
     * @private
     */
    updateHoverState_: function(state) {
      this.clearUpdateHoverStateTimeout_();
      this.sanitizeTooltipStateIfBubbleHidden_();

      if (state == UserPodCustomIcon.HoverState.HOVER) {
        if (this.tooltipState_.active()) {
          this.tooltipState_.hover = UserPodCustomIcon.HoverState.HOVER_TOOLTIP;
        } else {
          this.updateHoverStateSoon_(
              UserPodCustomIcon.HoverState.HOVER_TOOLTIP);
        }
        return;
      }

      if (state != UserPodCustomIcon.HoverState.NO_HOVER &&
          state != UserPodCustomIcon.HoverState.HOVER_TOOLTIP) {
        console.error('Invalid hover state ' + state);
        return;
      }

      this.tooltipState_.hover = state;
      this.updateTooltip_();
    },

    /**
     * Sets up a timeout for updating icon hover state.
     * @param {!UserPodCustomIcon.HoverState} state
     * @private
     */
    updateHoverStateSoon_: function(state) {
      if (this.updateHoverStateTimeout_)
        clearTimeout(this.updateHoverStateTimeout_);
      this.updateHoverStateTimeout_ =
          setTimeout(this.updateHoverState_.bind(this, state), 1000);
    },

    /**
     * Clears a timeout for updating icon hover state if there is one set.
     * @private
     */
    clearUpdateHoverStateTimeout_: function() {
      if (this.updateHoverStateTimeout_) {
        clearTimeout(this.updateHoverStateTimeout_);
        this.updateHoverStateTimeout_ = null;
      }
    },

    /**
     * Changes the tooltip autoshow state and changes tooltip visibility if
     * needed.
     * @param {!UserPodCustomIcon.TooltipAutoshowState} state
     * @private
     */
    updateTooltipAutoshowState_: function(state) {
      this.clearUpdateTooltipAutoshowStateTimeout_();
      this.sanitizeTooltipStateIfBubbleHidden_();

      if (state == UserPodCustomIcon.TooltipAutoshowState.DISABLED) {
        if (this.tooltipState_.autoshow != state) {
          this.tooltipState_.autoshow = state;
          this.updateTooltip_();
        }
        return;
      }

      if (this.tooltipState_.active()) {
        if (this.tooltipState_.autoshow !=
                UserPodCustomIcon.TooltipAutoshowState.ACTIVE) {
          this.tooltipState_.autoshow =
              UserPodCustomIcon.TooltipAutoshowState.DISABLED;
        } else {
          // If the tooltip is already automatically shown, the timeout for
          // removing it should be reset.
          this.updateTooltipAutoshowStateSoon_(
              UserPodCustomIcon.TooltipAutoshowState.DISABLED);
        }
        return;
      }

      if (state == UserPodCustomIcon.TooltipAutoshowState.ENABLED) {
        this.updateTooltipAutoshowStateSoon_(
            UserPodCustomIcon.TooltipAutoshowState.ACTIVE);
      } else if (state == UserPodCustomIcon.TooltipAutoshowState.ACTIVE) {
        this.updateTooltipAutoshowStateSoon_(
            UserPodCustomIcon.TooltipAutoshowState.DISABLED);
      }

      this.tooltipState_.autoshow = state;
      this.updateTooltip_();
    },

    /**
     * Sets up a timeout for updating tooltip autoshow state.
     * @param {!UserPodCustomIcon.TooltipAutoshowState} state
     * @private
     */
    updateTooltipAutoshowStateSoon_: function(state) {
      if (this.updateTooltipAutoshowStateTimeout_)
        clearTimeout(this.updateTooltupAutoshowStateTimeout_);
      var timeout =
          state == UserPodCustomIcon.TooltipAutoshowState.DISABLED ?
              5000 : 1000;
      this.updateTooltipAutoshowStateTimeout_ =
          setTimeout(this.updateTooltipAutoshowState_.bind(this, state),
                     timeout);
    },

    /**
     * Clears the timeout for updating tooltip autoshow state if one is set.
     * @private
     */
    clearUpdateTooltipAutoshowStateTimeout_: function() {
      if (this.updateTooltipAutoshowStateTimeout_) {
        clearTimeout(this.updateTooltipAutoshowStateTimeout_);
        this.updateTooltipAutoshowStateTimeout_ = null;
      }
    },

    /**
     * If tooltip bubble is hidden, this makes sure that hover and tooltip
     * autoshow states are not the ones that imply an active tooltip.
     * Used to handle a case where the tooltip bubble is hidden by an event that
     * does not update one of the states (e.g. click outside the pod will not
     * update tooltip autoshow state). Should be called before making
     * tooltip state updates.
     * @private
     */
    sanitizeTooltipStateIfBubbleHidden_: function() {
      if (!$('bubble').hidden)
        return;

      if (this.tooltipState_.hover ==
              UserPodCustomIcon.HoverState.HOVER_TOOLTIP &&
          this.tooltipState_.text) {
        this.tooltipState_.hover = UserPodCustomIcon.HoverState.NO_HOVER;
        this.clearUpdateHoverStateTimeout_();
      }

      if (this.tooltipState_.autoshow ==
             UserPodCustomIcon.TooltipAutoshowState.ACTIVE) {
        this.tooltipState_.autoshow =
            UserPodCustomIcon.TooltipAutoshowState.DISABLED;
        this.clearUpdateTooltipAutoshowStateTimeout_();
      }
    },

    /**
     * Returns whether the user pod to which the custom icon belongs is focused.
     * @return {boolean}
     * @private
     */
    isParentPodFocused_: function() {
      if ($('account-picker').hidden)
        return false;
      var parentPod = this.parentNode;
      while (parentPod && !parentPod.classList.contains('pod'))
        parentPod = parentPod.parentNode;
      return parentPod && parentPod.parentNode.isFocused(parentPod);
    },

    /**
     * Depending on {@code this.tooltipState_}, it updates tooltip visibility
     * and text.
     * @private
     */
    updateTooltip_: function() {
      if (this.hidden || !this.isParentPodFocused_())
        return;

      if (!this.tooltipState_.active() || !this.tooltipState_.text) {
        this.hideTooltip_();
        return;
      }

      // Show the tooltip bubble.
      var bubbleContent = document.createElement('div');
      bubbleContent.textContent = this.tooltipState_.text;

      /** @const */ var BUBBLE_OFFSET = CUSTOM_ICON_CONTAINER_SIZE / 2;
      // TODO(tengs): Introduce a special reauth state for the account picker,
      // instead of showing the tooltip bubble here (crbug.com/409427).
      /** @const */ var BUBBLE_PADDING = 8 + (this.iconId_ ? 0 : 23);
      $('bubble').showContentForElement(this,
                                        cr.ui.Bubble.Attachment.LEFT,
                                        bubbleContent,
                                        BUBBLE_OFFSET,
                                        BUBBLE_PADDING);
    },

    /**
     * Hides the tooltip.
     * @private
     */
    hideTooltip_: function() {
      $('bubble').hideForElement(this);
    }
  };

  /**
   * Unique salt added to user image URLs to prevent caching. Dictionary with
   * user names as keys.
   * @type {Object}
   */
  UserPod.userImageSalt_ = {};

  UserPod.prototype = {
    __proto__: HTMLDivElement.prototype,

    /**
     * Whether click on the pod can issue a user click auth attempt. The
     * attempt can be issued iff the pod was focused when the click
     * started (i.e. on mouse down event).
     * @type {boolean}
     * @private
     */
    userClickAuthAllowed_: false,

    /**
     * Whether the user has recently authenticated with fingerprint.
     * @type {boolean}
     * @private
     */
    fingerprintAuthenticated_: false,

    /**
     * True iff the pod can display the pin keyboard. The pin keyboard may not
     * always be displayed even if this is true, ie, if the virtual keyboard is
     * also being displayed.
     */
    pinEnabled: false,

    /** @override */
    decorate: function() {
      this.tabIndex = UserPodTabOrder.POD_INPUT;
      this.actionBoxAreaElement.tabIndex = UserPodTabOrder.POD_INPUT;

      this.addEventListener('keydown', this.handlePodKeyDown_.bind(this));
      this.addEventListener('click', this.handleClickOnPod_.bind(this));
      this.addEventListener('mousedown', this.handlePodMouseDown_.bind(this));

      if (this.pinKeyboard) {
        this.pinKeyboard.passwordElement = this.passwordElement;
        this.pinKeyboard.addEventListener('pin-change',
            this.handleInputChanged_.bind(this));
        this.pinKeyboard.tabIndex = UserPodTabOrder.PIN_KEYBOARD;
      }

      this.actionBoxAreaElement.addEventListener('mousedown',
                                                 stopEventPropagation);
      this.actionBoxAreaElement.addEventListener('click',
          this.handleActionAreaButtonClick_.bind(this));
      this.actionBoxAreaElement.addEventListener('keydown',
          this.handleActionAreaButtonKeyDown_.bind(this));
      this.actionBoxAreaElement.addEventListener('focus', () => {
        this.isActionBoxMenuActive = false;
      });

      this.actionBoxMenuTitleElement.addEventListener('keydown',
          this.handleMenuTitleElementKeyDown_.bind(this));
      this.actionBoxMenuTitleElement.addEventListener('blur',
          this.handleMenuTitleElementBlur_.bind(this));

      this.actionBoxMenuRemoveElement.addEventListener('click',
          this.handleRemoveCommandClick_.bind(this));
      this.actionBoxMenuRemoveElement.addEventListener('keydown',
          this.handleRemoveCommandKeyDown_.bind(this));
      this.actionBoxMenuRemoveElement.addEventListener('blur',
          this.handleRemoveCommandBlur_.bind(this));
      this.actionBoxRemoveUserWarningButtonElement.addEventListener('click',
          this.handleRemoveUserConfirmationClick_.bind(this));
      this.actionBoxRemoveUserWarningButtonElement.addEventListener('keydown',
          this.handleRemoveUserConfirmationKeyDown_.bind(this));

      if (this.fingerprintIconElement) {
        this.fingerprintIconElement.addEventListener(
            'mouseover', this.handleFingerprintIconMouseOver_.bind(this));
        this.fingerprintIconElement.addEventListener(
            'mouseout', this.handleFingerprintIconMouseOut_.bind(this));
        this.fingerprintIconElement.addEventListener(
            'mousedown', stopEventPropagation);
      }

      var customIcon = this.customIconElement;
      customIcon.parentNode.replaceChild(new UserPodCustomIcon(), customIcon);
    },

    /**
     * Initializes the pod after its properties set and added to a pod row.
     */
    initialize: function() {
      this.passwordElement.addEventListener('keydown',
          this.parentNode.handleKeyDown.bind(this.parentNode));
      this.passwordElement.addEventListener('keypress',
          this.handlePasswordKeyPress_.bind(this));
      this.passwordElement.addEventListener('input',
          this.handleInputChanged_.bind(this));

      if (this.submitButton) {
        this.submitButton.addEventListener('click',
            this.handleSubmitButtonClick_.bind(this));
      }

      this.imageElement.addEventListener('load',
          this.parentNode.handlePodImageLoad.bind(this.parentNode, this));

      var initialAuthType = this.user.initialAuthType ||
          AUTH_TYPE.OFFLINE_PASSWORD;
      this.setAuthType(initialAuthType, null);

      if (this.user.isActiveDirectory)
        this.setAttribute('is-active-directory', '');

      this.userClickAuthAllowed_ = false;
    },

    /**
     * Whether the user pod is disabled.
     * @type {boolean}
     */
    disabled_: false,
    get disabled() {
      return this.disabled_;
    },
    set disabled(value) {
      this.disabled_ = value;
      this.querySelectorAll('button,input').forEach(function(element) {
        element.disabled = value
      });

      // Special handling for submit button - the submit button should be
      // enabled only if there is the password value set.
      var submitButton = this.submitButton;
      if (submitButton)
        submitButton.disabled = value || !this.passwordElement.value;
    },

    /**
     * Resets tab order for pod elements to its initial state.
     */
    resetTabOrder: function() {
      // Note: the |mainInput| can be the pod itself.
      this.mainInput.tabIndex = -1;
      this.tabIndex = UserPodTabOrder.POD_INPUT;
    },

    /**
     * Handles keypress event (i.e. any textual input) on password input.
     * @param {Event} e Keypress Event object.
     * @private
     */
    handlePasswordKeyPress_: function(e) {
      // When tabbing from the system tray a tab key press is received. Suppress
      // this so as not to type a tab character into the password field.
      if (e.keyCode == 9) {
        e.preventDefault();
        return;
      }
      this.customIconElement.cancelDelayedTooltipShow();
    },

    /**
     * Handles a click event on submit button.
     * @param {Event} e Click event.
     */
    handleSubmitButtonClick_: function(e) {
      this.parentNode.setActivatedPod(this, e);
    },

    /**
     * Top edge margin number of pixels.
     * @type {?number}
     */
    set top(top) {
      this.style.top = cr.ui.toCssPx(top);
    },

    /**
     * Top edge margin number of pixels.
     */
    get top() {
      return parseInt(this.style.top);
    },

    /**
     * Left edge margin number of pixels.
     * @type {?number}
     */
    set left(left) {
      this.style.left = cr.ui.toCssPx(left);
    },

    /**
     * Left edge margin number of pixels.
     */
    get left() {
      return parseInt(this.style.left);
    },

    /**
     * Height number of pixels.
     */
    get height() {
      return this.offsetHeight;
    },

    /**
     * Gets image element.
     * @type {!HTMLImageElement}
     */
    get imageElement() {
      return this.querySelector('.user-image');
    },

    /**
     * Gets animated image element.
     * @type {!HTMLImageElement}
     */
    get animatedImageElement() {
      return this.querySelector('.user-image.animated-image');
    },

    /**
     * Gets name element.
     * @type {!HTMLDivElement}
     */
    get nameElement() {
      return this.querySelector('.name');
    },

    /**
     * Gets reauth name hint element.
     * @type {!HTMLDivElement}
     */
    get reauthNameHintElement() {
      return this.querySelector('.reauth-name-hint');
    },

    /**
     * Gets the container holding the password field.
     * @type {!HTMLInputElement}
     */
    get passwordEntryContainerElement() {
      return this.querySelector('.password-entry-container');
    },

    /**
     * Gets password field.
     * @type {!HTMLInputElement}
     */
    get passwordElement() {
      return this.querySelector('.password');
    },

    /**
     * Gets submit button.
     * @type {!HTMLInputElement}
     */
    get submitButton() {
      return this.querySelector('.submit-button');
    },

    /**
     * Gets the password label, which is used to show a message where the
     * password field is normally.
     * @type {!HTMLInputElement}
     */
    get passwordLabelElement() {
      return this.querySelector('.password-label');
    },

    get pinContainer() {
      return this.querySelector('.pin-container');
    },

    /**
     * Gets the pin-keyboard of the pod.
     * @type {!HTMLElement}
     */
    get pinKeyboard() {
      return this.querySelector('pin-keyboard');
    },

    /**
     * Gets user online sign in hint element.
     * @type {!HTMLDivElement}
     */
    get reauthWarningElement() {
      return this.querySelector('.reauth-hint-container');
    },

    /**
     * Gets action box area.
     * @type {!HTMLInputElement}
     */
    get actionBoxAreaElement() {
      return this.querySelector('.action-box-area');
    },

    /**
     * Gets user type icon area.
     * @type {!HTMLDivElement}
     */
    get userTypeIconAreaElement() {
      return this.querySelector('.user-type-icon-area');
    },

    /**
     * Gets user type bubble like multi-profiles policy restriction message.
     * @type {!HTMLDivElement}
     */
    get userTypeBubbleElement() {
      return this.querySelector('.user-type-bubble');
    },

    /**
     * Gets action box menu.
     * @type {!HTMLDivElement}
     */
    get actionBoxMenu() {
      return this.querySelector('.action-box-menu');
    },

    /**
     * Gets action box menu title (user name and email).
     * @type {!HTMLDivElement}
     */
    get actionBoxMenuTitleElement() {
      return this.querySelector('.action-box-menu-title');
    },

    /**
     * Gets action box menu title, user name item.
     * @type {!HTMLSpanElement}
     */
    get actionBoxMenuTitleNameElement() {
      return this.querySelector('.action-box-menu-title-name');
    },

    /**
     * Gets action box menu title, user email item.
     * @type {!HTMLSpanElement}
     */
    get actionBoxMenuTitleEmailElement() {
      return this.querySelector('.action-box-menu-title-email');
    },

    /**
     * Gets action box menu, remove user command item.
     * @type {!HTMLInputElement}
     */
    get actionBoxMenuCommandElement() {
      return this.querySelector('.action-box-menu-remove-command');
    },

    /**
     * Gets action box menu, remove user command item div.
     * @type {!HTMLInputElement}
     */
    get actionBoxMenuRemoveElement() {
      return this.querySelector('.action-box-menu-remove');
    },

    /**
     * Gets action box menu, remove user command item div.
     * @type {!HTMLInputElement}
     */
    get actionBoxRemoveUserWarningElement() {
      return this.querySelector('.action-box-remove-user-warning');
    },

    /**
     * Gets action box menu, remove user command item div.
     * @type {!HTMLInputElement}
     */
    get actionBoxRemoveUserWarningButtonElement() {
      return this.querySelector('.remove-warning-button');
    },

    /**
     * Gets the custom icon. This icon is normally hidden, but can be shown
     * using the chrome.screenlockPrivate API.
     * @type {!HTMLDivElement}
     */
    get customIconElement() {
      return this.querySelector('.custom-icon-container');
    },

    /**
     * Gets the elements used for statistics display.
     * @type {Object.<string, !HTMLDivElement>}
     */
    get statsMapElements() {
      return {
          'BrowsingHistory':
              this.querySelector('.action-box-remove-user-warning-history'),
          'Passwords':
              this.querySelector('.action-box-remove-user-warning-passwords'),
          'Bookmarks':
              this.querySelector('.action-box-remove-user-warning-bookmarks'),
          'Autofill':
              this.querySelector('.action-box-remove-user-warning-autofill')
      }
    },

    /**
     * Gets the fingerprint icon area.
     * @type {!HTMLDivElement}
     */
    get fingerprintIconElement() {
      return this.querySelector('.fingerprint-icon-container');
    },

    /**
     * Updates the user pod element.
     */
    update: function() {
      var animatedImageSrc = 'chrome://userimage/' + this.user.username +
          '?id=' + UserPod.userImageSalt_[this.user.username];
      this.imageElement.src = animatedImageSrc + '&frame=0';
      this.animatedImageElement.src = animatedImageSrc;

      this.nameElement.textContent = this.user_.displayName;
      this.reauthNameHintElement.textContent = this.user_.displayName;
      this.classList.toggle('signed-in', this.user_.signedIn);

      if (this.isAuthTypeUserClick)
        this.passwordLabelElement.textContent = this.authValue;

      this.updateActionBoxArea();

      this.passwordElement.setAttribute('aria-label', loadTimeData.getStringF(
        'passwordFieldAccessibleName', this.user_.emailAddress));

      this.customizeUserPodPerUserType();
    },

    updateActionBoxArea: function() {
      if (this.user_.publicAccount) {
        this.actionBoxAreaElement.hidden = true;
        return;
      }

      this.actionBoxMenuRemoveElement.hidden = !this.user_.canRemove;

      this.actionBoxAreaElement.setAttribute(
          'aria-label', loadTimeData.getStringF(
              'podMenuButtonAccessibleName', this.user_.emailAddress));
      this.actionBoxMenuRemoveElement.setAttribute(
          'aria-label', loadTimeData.getString(
               'podMenuRemoveItemAccessibleName'));
      this.actionBoxMenuTitleNameElement.textContent = this.user_.isOwner ?
          loadTimeData.getStringF('ownerUserPattern', this.user_.displayName) :
          this.user_.displayName;
      this.actionBoxMenuTitleEmailElement.textContent = this.user_.emailAddress;

      this.actionBoxMenuTitleEmailElement.hidden =
          this.user_.legacySupervisedUser;

      this.actionBoxMenuCommandElement.textContent =
          loadTimeData.getString('removeUser');
    },

    customizeUserPodPerUserType: function() {
      if (this.user_.childUser && !this.user_.isDesktopUser) {
        this.setUserPodIconType('child');
      } else if (this.user_.legacySupervisedUser && !this.user_.isDesktopUser) {
        this.setUserPodIconType('legacySupervised');
        this.classList.add('legacy-supervised');
      } else if (this.multiProfilesPolicyApplied) {
        // Mark user pod as not focusable which in addition to the grayed out
        // filter makes it look in disabled state.
        this.classList.add('multiprofiles-policy-applied');
        this.setUserPodIconType('policy');

        if (this.user.multiProfilesPolicy ==
            MULTI_PROFILE_USER_BEHAVIOR.PRIMARY_ONLY) {
          this.querySelector('.mp-policy-primary-only-msg').hidden = false;
        } else if (this.user.multiProfilesPolicy ==
            MULTI_PROFILE_USER_BEHAVIOR.OWNER_PRIMARY_ONLY) {
          this.querySelector('.mp-owner-primary-only-msg').hidden = false;
        } else {
          this.querySelector('.mp-policy-not-allowed-msg').hidden = false;
        }
      }
    },

    isPinReady: function() {
      return this.pinKeyboard && this.pinKeyboard.offsetHeight > 0;
    },

    set showError(visible) {
      if (this.submitButton)
        this.submitButton.classList.toggle('error-shown', visible);
    },

    updatePinClass_: function(element, enable) {
      element.classList.toggle('pin-enabled', enable);
      element.classList.toggle('pin-disabled', !enable);
    },

    setPinVisibility: function(visible) {
      if (this.isPinShown() == visible)
        return;

      // Do not show pin if virtual keyboard is there.
      if (visible && Oobe.getInstance().virtualKeyboardShown)
        return;

      // Do not show pin keyboard if the pod does not have pin enabled.
      if (visible && !this.pinEnabled)
        return;

      var elements = this.getElementsByClassName('pin-tag');
      for (var i = 0; i < elements.length; ++i)
        this.updatePinClass_(elements[i], visible);
      this.updatePinClass_(this, visible);

      // Set the focus to the input element after showing/hiding pin keyboard.
      this.mainInput.focus();

      // Change the password placeholder based on pin keyboard visibility.
      this.passwordElement.placeholder = loadTimeData.getString(visible ?
          'pinKeyboardPlaceholderPinPassword' : 'passwordHint');
    },

    isPinShown: function() {
      return this.classList.contains('pin-enabled');
    },

    setUserPodIconType: function(userTypeClass) {
      this.userTypeIconAreaElement.classList.add(userTypeClass);
      this.userTypeIconAreaElement.hidden = false;
    },

    isFingerprintIconShown: function() {
      return this.fingerprintIconElement && !this.fingerprintIconElement.hidden;
    },

    /**
     * The user that this pod represents.
     * @type {!Object}
     */
    user_: undefined,
    get user() {
      return this.user_;
    },
    set user(userDict) {
      this.user_ = userDict;
      this.update();
    },

    /**
     * Returns true if multi-profiles sign in is currently active and this
     * user pod is restricted per policy.
     * @type {boolean}
     */
    get multiProfilesPolicyApplied() {
      var isMultiProfilesUI =
        (Oobe.getInstance().displayType == DISPLAY_TYPE.USER_ADDING);
      return isMultiProfilesUI && !this.user_.isMultiProfilesAllowed;
    },

    /**
     * Gets main input element.
     * @type {(HTMLButtonElement|HTMLInputElement)}
     */
    get mainInput() {
      if (this.isAuthTypePassword) {
        return this.passwordElement;
      } else if (this.isAuthTypeOnlineSignIn) {
        return this;
      } else if (this.isAuthTypeUserClick) {
        return this.passwordLabelElement;
      }
    },

    /**
     * Whether action box button is in active state.
     * @type {boolean}
     */
    get isActionBoxMenuActive() {
      return this.actionBoxAreaElement.classList.contains('active');
    },
    set isActionBoxMenuActive(active) {
      if (active == this.isActionBoxMenuActive)
        return;

      if (active) {
        this.actionBoxMenuRemoveElement.hidden = !this.user_.canRemove;
        this.actionBoxRemoveUserWarningElement.hidden = true;

        // Clear focus first if another pod is focused.
        if (!this.parentNode.isFocused(this)) {
          this.parentNode.focusPod(undefined, true);
          this.actionBoxAreaElement.focus();
        }

        // Hide user-type-bubble.
        this.userTypeBubbleElement.classList.remove('bubble-shown');

        this.actionBoxAreaElement.classList.add('active');

        // Invisible focus causes ChromeVox to read user name and email.
        this.actionBoxMenuTitleElement.tabIndex = UserPodTabOrder.POD_MENU_ITEM;
        this.actionBoxMenuTitleElement.focus();

        // If the user pod is on either edge of the screen, then the menu
        // could be displayed partially ofscreen.
        this.actionBoxMenu.classList.remove('left-edge-offset');
        this.actionBoxMenu.classList.remove('right-edge-offset');

        var offsetLeft =
            cr.ui.login.DisplayManager.getOffset(this.actionBoxMenu).left;
        var menuWidth = this.actionBoxMenu.offsetWidth;
        if (offsetLeft < 0)
          this.actionBoxMenu.classList.add('left-edge-offset');
        else if (offsetLeft + menuWidth > window.innerWidth)
          this.actionBoxMenu.classList.add('right-edge-offset');
      } else {
        this.actionBoxAreaElement.classList.remove('active');
        this.actionBoxAreaElement.classList.remove('menu-moved-up');
        this.actionBoxMenu.classList.remove('menu-moved-up');
      }
    },

    /**
     * Whether action box button is in hovered state.
     * @type {boolean}
     */
    get isActionBoxMenuHovered() {
      return this.actionBoxAreaElement.classList.contains('hovered');
    },
    set isActionBoxMenuHovered(hovered) {
      if (hovered == this.isActionBoxMenuHovered)
        return;

      if (hovered) {
        this.actionBoxAreaElement.classList.add('hovered');
        this.classList.add('hovered');
      } else {
        if (this.multiProfilesPolicyApplied)
          this.userTypeBubbleElement.classList.remove('bubble-shown');
        this.actionBoxAreaElement.classList.remove('hovered');
        this.classList.remove('hovered');
      }
    },

    /**
     * Set the authentication type for the pod.
     * @param {number} An auth type value defined in the AUTH_TYPE enum.
     * @param {string} authValue The initial value used for the auth type.
     */
    setAuthType: function(authType, authValue) {
      this.authType_ = authType;
      this.authValue_ = authValue;
      this.setAttribute('auth-type', AUTH_TYPE_NAMES[this.authType_]);
      this.update();
      this.reset(this.parentNode.isFocused(this));
    },

    /**
     * The auth type of the user pod. This value is one of the enum
     * values in AUTH_TYPE.
     * @type {number}
     */
    get authType() {
      return this.authType_;
    },

    /**
     * The initial value used for the pod's authentication type.
     * eg. a prepopulated password input when using password authentication.
     */
    get authValue() {
      return this.authValue_;
    },

    /**
     * True if the the user pod uses a password to authenticate.
     * @type {bool}
     */
    get isAuthTypePassword() {
      return this.authType_ == AUTH_TYPE.OFFLINE_PASSWORD ||
             this.authType_ == AUTH_TYPE.FORCE_OFFLINE_PASSWORD;
    },

    /**
     * True if the the user pod uses a user click to authenticate.
     * @type {bool}
     */
    get isAuthTypeUserClick() {
      return this.authType_ == AUTH_TYPE.USER_CLICK;
    },

    /**
     * True if the the user pod uses a online sign in to authenticate.
     * @type {bool}
     */
    get isAuthTypeOnlineSignIn() {
      return this.authType_ == AUTH_TYPE.ONLINE_SIGN_IN;
    },

    /**
     * Updates the image element of the user.
     */
    updateUserImage: function() {
      UserPod.userImageSalt_[this.user.username] = new Date().getTime();
      this.update();
    },

    /**
     * Focuses on input element.
     */
    focusInput: function() {
      // Move tabIndex from the whole pod to the main input.
      // Note: the |mainInput| can be the pod itself.
      this.tabIndex = -1;
      this.mainInput.tabIndex = UserPodTabOrder.POD_INPUT;
      this.mainInput.focus();
    },

    /**
     * Activates the pod.
     * @param {Event} e Event object.
     * @return {boolean} True if activated successfully.
     */
    activate: function(e) {
      if (this.isAuthTypeOnlineSignIn) {
        this.showSigninUI();
      } else if (this.isAuthTypeUserClick) {
        Oobe.disableSigninUI();
        this.classList.toggle('signing-in', true);
        chrome.send('attemptUnlock', [this.user.username]);
      } else if (this.isAuthTypePassword) {
        if (this.fingerprintAuthenticated_) {
          this.fingerprintAuthenticated_ = false;
          return true;
        }
        var pinValue = this.pinKeyboard ? this.pinKeyboard.value : '';
        var password = this.passwordElement.value || pinValue;
        if (!password)
          return false;
        Oobe.disableSigninUI();
        chrome.send('authenticateUser', [
          this.user.username, password, this.isPinShown() && !isNaN(password)
        ]);
      } else {
        console.error('Activating user pod with invalid authentication type: ' +
            this.authType);
      }

      return true;
    },

    showSupervisedUserSigninWarning: function() {
      // Legacy supervised user token has been invalidated.
      // Make sure that pod is focused i.e. "Sign in" button is seen.
      this.parentNode.focusPod(this);

      var error = document.createElement('div');
      var messageDiv = document.createElement('div');
      messageDiv.className = 'error-message-bubble';
      messageDiv.textContent =
          loadTimeData.getString('supervisedUserExpiredTokenWarning');
      error.appendChild(messageDiv);

      $('bubble').showContentForElement(
          this.reauthWarningElement,
          cr.ui.Bubble.Attachment.TOP,
          error,
          this.reauthWarningElement.offsetWidth / 2,
          4);
      // Move warning bubble up if it overlaps the shelf.
      var maxHeight =
          cr.ui.LoginUITools.getMaxHeightBeforeShelfOverlapping($('bubble'));
      if (maxHeight < $('bubble').offsetHeight) {
        $('bubble').showContentForElement(
            this.reauthWarningElement,
            cr.ui.Bubble.Attachment.BOTTOM,
            error,
            this.reauthWarningElement.offsetWidth / 2,
            4);
      }
    },

    /**
     * Shows signin UI for this user.
     */
    showSigninUI: function() {
      if (this.user.legacySupervisedUser && !this.user.isDesktopUser) {
        this.showSupervisedUserSigninWarning();
      } else {
        // Special case for multi-profiles sign in. We show users even if they
        // are not allowed per policy. Restrict those users from starting GAIA.
        if (this.multiProfilesPolicyApplied)
          return;

        this.parentNode.showSigninUI(this.user.emailAddress);
      }
    },

    /**
     * Resets the input field and updates the tab order of pod controls.
     * @param {boolean} takeFocus If true, input field takes focus.
     */
    reset: function(takeFocus) {
      this.passwordElement.value = '';
      if (this.pinKeyboard)
        this.pinKeyboard.value = '';
      this.updateInput_();
      this.classList.toggle('signing-in', false);
      if (takeFocus) {
        if (!this.multiProfilesPolicyApplied)
          this.focusInput();  // This will set a custom tab order.
      }
      else
        this.resetTabOrder();
    },

    /**
     * Removes a user using the correct identifier based on user type.
     * @param {Object} user User to be removed.
     */
    removeUser: function(user) {
      chrome.send('removeUser',
                  [user.isDesktopUser ? user.profilePath : user.username]);
    },

    /**
     * Handles a click event on action area button.
     * @param {Event} e Click event.
     */
    handleActionAreaButtonClick_: function(e) {
      if (this.parentNode.disabled)
        return;
      this.isActionBoxMenuActive = !this.isActionBoxMenuActive;
      e.stopPropagation();
    },

    /**
     * Handles a keydown event on action area button.
     * @param {Event} e KeyDown event.
     */
    handleActionAreaButtonKeyDown_: function(e) {
      if (this.disabled)
        return;
      switch (e.key) {
        case 'Enter':
        case ' ':
          if (this.parentNode.focusedPod_ && !this.isActionBoxMenuActive)
            this.isActionBoxMenuActive = true;
          e.stopPropagation();
          break;
        case 'ArrowUp':
        case 'ArrowDown':
          if (this.isActionBoxMenuActive) {
            this.actionBoxMenuRemoveElement.tabIndex =
                UserPodTabOrder.POD_MENU_ITEM;
            this.actionBoxMenuRemoveElement.focus();
          }
          e.stopPropagation();
          break;
        // Ignore these two, so ChromeVox hotkeys don't close the menu before
        // they can navigate through it.
        case 'Shift':
        case 'Meta':
          break;
        case 'Escape':
          this.actionBoxAreaElement.focus();
          this.isActionBoxMenuActive = false;
          e.stopPropagation();
          break;
        case 'Tab':
          if (!this.parentNode.alwaysFocusSinglePod)
            this.parentNode.focusPod();
        default:
          this.isActionBoxMenuActive = false;
          break;
      }
    },

    /**
     * Handles a keydown event on menu title.
     * @param {Event} e KeyDown event.
     */
    handleMenuTitleElementKeyDown_: function(e) {
      if (this.disabled)
        return;

      if (e.key != 'Tab') {
        this.handleActionAreaButtonKeyDown_(e);
        return;
      }

      if (e.shiftKey == false) {
        if (this.actionBoxMenuRemoveElement.hidden) {
          this.isActionBoxMenuActive = false;
        } else {
          this.actionBoxMenuRemoveElement.tabIndex =
              UserPodTabOrder.POD_MENU_ITEM;
          this.actionBoxMenuRemoveElement.focus();
          e.preventDefault();
        }
      } else {
        this.isActionBoxMenuActive = false;
        this.focusInput();
        e.preventDefault();
      }
    },

    /**
     * Handles a blur event on menu title.
     * @param {Event} e Blur event.
     */
    handleMenuTitleElementBlur_: function(e) {
      if (this.disabled)
        return;
      this.actionBoxMenuTitleElement.tabIndex = -1;
    },

    /**
     * Handles a click event on remove user command.
     * @param {Event} e Click event.
     */
    handleRemoveCommandClick_: function(e) {
      this.showRemoveWarning_();
    },

    /**
     * Move the action box menu up if needed.
     */
    moveActionMenuUpIfNeeded_: function() {
      // Skip checking (computationally expensive) if already moved up.
      if (this.actionBoxMenu.classList.contains('menu-moved-up'))
        return;

      // Move up the menu if it overlaps shelf.
      var maxHeight = cr.ui.LoginUITools.getMaxHeightBeforeShelfOverlapping(
          this.actionBoxMenu, true);
      var actualHeight = parseInt(
          window.getComputedStyle(this.actionBoxMenu).height);
      if (maxHeight < actualHeight) {
        this.actionBoxMenu.classList.add('menu-moved-up');
        this.actionBoxAreaElement.classList.add('menu-moved-up');
      }
    },

    /**
     * Shows remove user warning. Used for legacy supervised users
     * and non-device-owner on CrOS, and for all users on desktop.
     */
    showRemoveWarning_: function() {
      this.actionBoxMenuRemoveElement.hidden = true;
      this.actionBoxRemoveUserWarningElement.hidden = false;

      if (!this.user.isDesktopUser) {
        this.moveActionMenuUpIfNeeded_();
        if (!this.user.legacySupervisedUser) {
          this.querySelector(
              '.action-box-remove-user-warning-text').style.display = 'none';
          this.querySelector(
              '.action-box-remove-user-warning-table-nonsync').style.display
              = 'none';
          var message = loadTimeData.getString('removeNonOwnerUserWarningText');
          this.updateRemoveNonOwnerUserWarningMessage_(this.user.profilePath,
                                                       message);
        }
      } else {
        // Show extra statistics information for desktop users
        this.querySelector(
          '.action-box-remove-non-owner-user-warning-text').hidden = true;
        this.RemoveWarningDialogSetMessage_();
        // set a global handler for the callback
        window.updateRemoveWarningDialog =
            this.updateRemoveWarningDialog_.bind(this);
        var is_synced_user = this.user.emailAddress !== "";
        if (!is_synced_user) {
          chrome.send('removeUserWarningLoadStats', [this.user.profilePath]);
        }
      }
      chrome.send('logRemoveUserWarningShown');
    },

    /**
     * Refresh the statistics in the remove user warning dialog.
     * @param {string} profilePath The filepath of the URL (must be verified).
     * @param {Object} profileStats Statistics associated with profileURL.
     */
    updateRemoveWarningDialog_: function(profilePath, profileStats) {
      if (profilePath !== this.user.profilePath)
        return;

      var stats_elements = this.statsMapElements;
      // Update individual statistics
      for (var key in profileStats) {
        if (stats_elements.hasOwnProperty(key)) {
          stats_elements[key].textContent = profileStats[key].count;
        }
      }
    },

    /**
     * Set the new message in the dialog.
     */
    RemoveWarningDialogSetMessage_: function() {
      var is_synced_user = this.user.emailAddress !== "";
      message = loadTimeData.getString(
          is_synced_user ? 'removeUserWarningTextSync' :
                           'removeUserWarningTextNonSync');
      this.updateRemoveWarningDialogSetMessage_(this.user.profilePath,
                                                message);
    },

    /**
     * Refresh the message in the remove user warning dialog.
     * @param {string} profilePath The filepath of the URL (must be verified).
     * @param {string} message The message to be written.
     * @param {number|string=} count The number or string to replace $1 in
     * |message|. Can be omitted if $1 is not present in |message|.
     */
    updateRemoveWarningDialogSetMessage_: function(profilePath, message,
                                                   count) {
      if (profilePath !== this.user.profilePath)
        return;
      // Add localized messages where $1 will be replaced with
      // <span class="total-count"></span> and $2 will be replaced with
      // <span class="email"></span>.
      var element = this.querySelector('.action-box-remove-user-warning-text');
      element.textContent = '';

      messageParts = message.split(/(\$[12])/);
      var numParts = messageParts.length;
      for (var j = 0; j < numParts; j++) {
        if (messageParts[j] === '$1') {
          var elementToAdd = document.createElement('span');
          elementToAdd.classList.add('total-count');
          elementToAdd.textContent = count;
          element.appendChild(elementToAdd);
        } else if (messageParts[j] === '$2') {
          var elementToAdd = document.createElement('span');
          elementToAdd.classList.add('email');
          elementToAdd.textContent = this.user.emailAddress;
          element.appendChild(elementToAdd);
        } else {
          element.appendChild(document.createTextNode(messageParts[j]));
        }
      }
      this.moveActionMenuUpIfNeeded_();
    },

    /**
     * Update the message in the "remove non-owner user warning" dialog on CrOS.
     * @param {string} profilePath The filepath of the URL (must be verified).
     * @param (string) message The message to be written.
     */
    updateRemoveNonOwnerUserWarningMessage_: function(profilePath, message) {
      if (profilePath !== this.user.profilePath)
        return;
      // Add localized messages where $1 will be replaced with
      // <span class="email"></span>.
      var element = this.querySelector(
          '.action-box-remove-non-owner-user-warning-text');
      element.textContent = '';

      messageParts = message.split(/(\$[1])/);
      var numParts = messageParts.length;
      for (var j = 0; j < numParts; j++) {
        if (messageParts[j] == '$1') {
          var elementToAdd = document.createElement('span');
          elementToAdd.classList.add('email');
          elementToAdd.textContent = this.user.emailAddress;
          element.appendChild(elementToAdd);
        } else {
          element.appendChild(document.createTextNode(messageParts[j]));
        }
      }
      this.moveActionMenuUpIfNeeded_();
    },

    /**
     * Handles a click event on remove user confirmation button.
     * @param {Event} e Click event.
     */
    handleRemoveUserConfirmationClick_: function(e) {
      if (this.isActionBoxMenuActive) {
        this.isActionBoxMenuActive = false;
        this.removeUser(this.user);
        e.stopPropagation();
      }
    },

    /**
     * Handles mouseover event on fingerprint icon.
     * @param {Event} e MouseOver event.
     */
    handleFingerprintIconMouseOver_: function(e) {
      var bubbleContent = document.createElement('div');
      bubbleContent.textContent =
          loadTimeData.getString('fingerprintIconMessage');
      this.passwordElement.placeholder =
          loadTimeData.getString('fingerprintHint');

      /** @const */ var BUBBLE_OFFSET = 25;
      /** @const */ var BUBBLE_PADDING = -8;
      var attachment = this.isPinShown() ? cr.ui.Bubble.Attachment.RIGHT :
                                           cr.ui.Bubble.Attachment.BOTTOM;
      var bubbleAnchor = this.getBubbleAnchorForFingerprintIcon_();
      $('bubble').showContentForElement(
          bubbleAnchor, attachment, bubbleContent, BUBBLE_OFFSET,
          BUBBLE_PADDING, true);
    },

    /**
     * Handles mouseout event on fingerprint icon.
     * @param {Event} e MouseOut event.
     */
    handleFingerprintIconMouseOut_: function(e) {
      var bubbleAnchor = this.getBubbleAnchorForFingerprintIcon_();
      $('bubble').hideForElement(bubbleAnchor);
      this.passwordElement.placeholder = loadTimeData.getString(
          this.isPinShown() ? 'pinKeyboardPlaceholderPinPassword' :
                              'passwordHint');
    },

    /**
     * Returns bubble anchor of the fingerprint icon.
     * @return {!HTMLElement} Anchor element of the bubble.
     */
    getBubbleAnchorForFingerprintIcon_: function() {
      var bubbleAnchor = this;
      if (this.isPinShown())
        bubbleAnchor = (this.getElementsByClassName('auth-container'))[0];
      return bubbleAnchor;
    },

    /**
     * Handles a keydown event on remove user confirmation button.
     * @param {Event} e KeyDown event.
     */
    handleRemoveUserConfirmationKeyDown_: function(e) {
      if (!this.isActionBoxMenuActive)
        return;

      // Only handle pressing 'Enter' or 'Space', and let all other events
      // bubble to the action box menu.
      if (e.key == 'Enter' || e.key == ' ') {
        this.isActionBoxMenuActive = false;
        this.removeUser(this.user);
        e.stopPropagation();
        // Prevent default so that we don't trigger a 'click' event.
        e.preventDefault();
      }
    },

    /**
     * Handles a keydown event on remove command.
     * @param {Event} e KeyDown event.
     */
    handleRemoveCommandKeyDown_: function(e) {
      if (this.disabled)
        return;
      switch (e.key) {
        case 'Enter':
          e.preventDefault();
          this.showRemoveWarning_();
          e.stopPropagation();
          break;
        case 'ArrowUp':
        case 'ArrowDown':
          e.stopPropagation();
          break;
        // Ignore these two, so ChromeVox hotkeys don't close the menu before
        // they can navigate through it.
        case 'Shift':
        case 'Meta':
          break;
        case 'Escape':
          this.actionBoxAreaElement.focus();
          this.isActionBoxMenuActive = false;
          e.stopPropagation();
          break;
        default:
          this.actionBoxAreaElement.focus();
          this.isActionBoxMenuActive = false;
          break;
      }
    },

    /**
     * Handles a blur event on remove command.
     * @param {Event} e Blur event.
     */
    handleRemoveCommandBlur_: function(e) {
      if (this.disabled)
        return;
      this.actionBoxMenuRemoveElement.tabIndex = -1;
    },

    /**
     * Handles mouse down event. It sets whether the user click auth will be
     * allowed on the next mouse click event. The auth is allowed iff the pod
     * was focused on the mouse down event starting the click.
     * @param {Event} e The mouse down event.
     */
    handlePodMouseDown_: function(e) {
      this.userClickAuthAllowed_ = this.parentNode.isFocused(this);
    },

    /**
     * Called when the input of the password element changes. Updates the submit
     * button color and state and hides the error popup bubble.
     */
    updateInput_: function() {
      if (this.submitButton) {
        this.submitButton.disabled = this.passwordElement.value.length == 0;
        if (this.isFingerprintIconShown()) {
          this.submitButton.hidden = this.passwordElement.value.length == 0;
        } else {
          this.submitButton.hidden = false;
        }
      }
      this.showError = false;
      $('bubble').hide();
    },

    /**
     * Handles input event on the password element.
     * @param {Event} e Input event.
     */
    handleInputChanged_: function(e) {
      this.updateInput_();
    },

    /**
     * Handles click event on a user pod.
     * @param {Event} e Click event.
     */
    handleClickOnPod_: function(e) {
      if (this.parentNode.disabled)
        return;

      if (!this.isActionBoxMenuActive) {
        if (this.isAuthTypeOnlineSignIn) {
          this.showSigninUI();
        } else if (this.isAuthTypeUserClick && this.userClickAuthAllowed_) {
          // Note that this.userClickAuthAllowed_ is set in mouse down event
          // handler.
          this.parentNode.setActivatedPod(this);
        } else if (this.pinKeyboard &&
                   e.target == this.pinKeyboard.submitButton) {
          // Sets the pod as activated if the submit button is clicked so that
          // it simulates what the enter button does for the password/pin.
          this.parentNode.setActivatedPod(this);
        }

        if (this.multiProfilesPolicyApplied)
          this.userTypeBubbleElement.classList.add('bubble-shown');

        // Prevent default so that we don't trigger 'focus' event and
        // stop propagation so that the 'click' event does not bubble
        // up and accidentally closes the bubble tooltip.
        stopEventPropagation(e);
      }
    },

    /**
     * Handles keydown event for a user pod.
     * @param {Event} e Key event.
     */
    handlePodKeyDown_: function(e) {
      if (!this.isAuthTypeUserClick || this.disabled)
        return;
      switch (e.key) {
        case 'Enter':
        case ' ':
          if (this.parentNode.isFocused(this))
            this.parentNode.setActivatedPod(this);
          break;
      }
    }
  };

  /**
   * Creates a public account user pod.
   * @constructor
   * @extends {UserPod}
   */
  var PublicAccountUserPod = cr.ui.define(function() {
    var node = UserPod();

    var extras = $('public-account-user-pod-extras-template').children;
    for (var i = 0; i < extras.length; ++i) {
      var el = extras[i].cloneNode(true);
      node.appendChild(el);
    }

    return node;
  });

  PublicAccountUserPod.prototype = {
    __proto__: UserPod.prototype,

    /**
     * "Enter" button in expanded side pane.
     * @type {!HTMLButtonElement}
     */
    get enterButtonElement() {
      return this.querySelector('.enter-button');
    },

    /**
     * Boolean flag of whether the pod is showing the side pane. The flag
     * controls whether 'expanded' class is added to the pod's class list and
     * resets tab order because main input element changes when the 'expanded'
     * state changes.
     * @type {boolean}
     */
    get expanded() {
      return this.classList.contains('expanded');
    },

    set expanded(expanded) {
      if (this.expanded == expanded)
        return;

      this.resetTabOrder();
      this.classList.toggle('expanded', expanded);
      if (expanded) {
        // Show the advanced expanded pod directly if there are at least two
        // recommended locales. This will be the case in multilingual
        // environments where users are likely to want to choose among locales.
        if (this.querySelector('.language-select').multipleRecommendedLocales)
          this.classList.add('advanced');
        this.usualLeft = this.left;
        this.makeSpaceForExpandedPod_();
      } else if (typeof(this.usualLeft) != 'undefined') {
        this.left = this.usualLeft;
      }

      var self = this;
      this.classList.add('animating');
      this.addEventListener('transitionend', function f(e) {
        self.removeEventListener('transitionend', f);
        self.classList.remove('animating');

        // Accessibility focus indicator does not move with the focused
        // element. Sends a 'focus' event on the currently focused element
        // so that accessibility focus indicator updates its location.
        if (document.activeElement)
          document.activeElement.dispatchEvent(new Event('focus'));
      });
      // Guard timer set to animation duration + 20ms.
      ensureTransitionEndEvent(this, 200);
    },

    get advanced() {
      return this.classList.contains('advanced');
    },

    /** @override */
    get mainInput() {
      if (this.expanded)
        return this.enterButtonElement;
      else
        return this.nameElement;
    },

    /** @override */
    decorate: function() {
      UserPod.prototype.decorate.call(this);

      this.classList.add('public-account');

      this.nameElement.addEventListener('keydown', (function(e) {
        if (e.key == 'Enter') {
          this.parentNode.setActivatedPod(this, e);
          // Stop this keydown event from bubbling up to PodRow handler.
          e.stopPropagation();
          // Prevent default so that we don't trigger a 'click' event on the
          // newly focused "Enter" button.
          e.preventDefault();
        }
      }).bind(this));

      var languageSelect = this.querySelector('.language-select');
      languageSelect.tabIndex = UserPodTabOrder.POD_INPUT;
      languageSelect.manuallyChanged = false;
      languageSelect.addEventListener(
          'change',
          function() {
            languageSelect.manuallyChanged = true;
            this.getPublicSessionKeyboardLayouts_();
          }.bind(this));

      var keyboardSelect = this.querySelector('.keyboard-select');
      keyboardSelect.tabIndex = UserPodTabOrder.POD_INPUT;
      keyboardSelect.loadedLocale = null;

      var languageAndInput = this.querySelector('.language-and-input');
      languageAndInput.tabIndex = UserPodTabOrder.POD_INPUT;
      languageAndInput.addEventListener('click',
                                        this.transitionToAdvanced_.bind(this));

      var monitoringLearnMore = this.querySelector('.monitoring-learn-more');
      monitoringLearnMore.tabIndex = UserPodTabOrder.POD_INPUT;
      monitoringLearnMore.addEventListener(
          'click', this.onMonitoringLearnMoreClicked_.bind(this));

      this.enterButtonElement.addEventListener('click', (function(e) {
        this.enterButtonElement.disabled = true;
        var locale = this.querySelector('.language-select').value;
        var keyboardSelect = this.querySelector('.keyboard-select');
        // The contents of |keyboardSelect| is updated asynchronously. If its
        // locale does not match |locale|, it has not updated yet and the
        // currently selected keyboard layout may not be applicable to |locale|.
        // Do not return any keyboard layout in this case and let the backend
        // choose a suitable layout.
        var keyboardLayout =
            keyboardSelect.loadedLocale == locale ? keyboardSelect.value : '';
        chrome.send('launchPublicSession',
                    [this.user.username, locale, keyboardLayout]);
      }).bind(this));
    },

    /** @override **/
    initialize: function() {
      UserPod.prototype.initialize.call(this);

      id = this.user.username + '-keyboard';
      this.querySelector('.keyboard-select-label').htmlFor = id;
      this.querySelector('.keyboard-select').setAttribute('id', id);

      var id = this.user.username + '-language';
      this.querySelector('.language-select-label').htmlFor = id;
      var languageSelect = this.querySelector('.language-select');
      languageSelect.setAttribute('id', id);
      this.populateLanguageSelect(this.user.initialLocales,
                                  this.user.initialLocale,
                                  this.user.initialMultipleRecommendedLocales);
    },

    /** @override **/
    update: function() {
      UserPod.prototype.update.call(this);
      this.querySelector('.expanded-pane-name').textContent =
          this.user_.displayName;
      this.querySelector('.info').textContent =
          loadTimeData.getStringF('publicAccountInfoFormat',
                                  this.user_.enterpriseDisplayDomain);
    },

    /** @override */
    focusInput: function() {
      // Move tabIndex from the whole pod to the main input.
      this.tabIndex = -1;
      this.mainInput.tabIndex = UserPodTabOrder.POD_INPUT;
      this.mainInput.focus();
    },

    /** @override */
    reset: function(takeFocus) {
      if (!takeFocus)
        this.expanded = false;
      this.enterButtonElement.disabled = false;
      UserPod.prototype.reset.call(this, takeFocus);
    },

    /** @override */
    activate: function(e) {
      if (!this.expanded) {
        this.expanded = true;
        this.focusInput();
      }
      return true;
    },

    /** @override */
    handleClickOnPod_: function(e) {
      if (this.parentNode.disabled)
        return;

      this.parentNode.focusPod(this);
      this.parentNode.setActivatedPod(this, e);
      // Prevent default so that we don't trigger 'focus' event.
      e.preventDefault();
    },

    /**
     * Updates the display name shown on the pod.
     * @param {string} displayName The new display name
     */
    setDisplayName: function(displayName) {
      this.user_.displayName = displayName;
      this.update();
    },

    makeSpaceForExpandedPod_: function() {
      var width = this.classList.contains('advanced') ?
          PUBLIC_EXPANDED_ADVANCED_WIDTH : PUBLIC_EXPANDED_BASIC_WIDTH;
      var isDesktopUserManager = Oobe.getInstance().displayType ==
          DISPLAY_TYPE.DESKTOP_USER_MANAGER;
      var rowPadding = isDesktopUserManager ? DESKTOP_ROW_PADDING :
                                              POD_ROW_PADDING;
      if (this.left + width > $('pod-row').offsetWidth - rowPadding)
        this.left = $('pod-row').offsetWidth - rowPadding - width;
    },

    /**
     * Transition the expanded pod from the basic to the advanced view.
     */
    transitionToAdvanced_: function() {
      var pod = this;
      var languageAndInputSection =
          this.querySelector('.language-and-input-section');
      this.classList.add('transitioning-to-advanced');
      setTimeout(function() {
        pod.classList.add('advanced');
        pod.makeSpaceForExpandedPod_();
        languageAndInputSection.addEventListener('transitionend',
                                                 function observer() {
          languageAndInputSection.removeEventListener('transitionend',
                                                      observer);
          pod.classList.remove('transitioning-to-advanced');
          pod.querySelector('.language-select').focus();
        });
        // Guard timer set to animation duration + 20ms.
        ensureTransitionEndEvent(languageAndInputSection, 380);
      }, 0);
    },

    /**
     * Show a dialog when user clicks on learn more (monitoring) button.
     */
    onMonitoringLearnMoreClicked_: function() {
      if (!this.dialogContainer_) {
        this.dialogContainer_ = document.createElement('div');
        this.dialogContainer_.classList.add('monitoring-dialog-container');
        var topContainer = document.querySelector('#scroll-container');
        topContainer.appendChild(this.dialogContainer_);
      }
      // Public Session POD in advanced view has a different size so add a dummy
      // parent element to enable different CSS settings.
      this.dialogContainer_.classList.toggle(
          'advanced', this.classList.contains('advanced'))
      var html = '';
      var infoItems = ['publicAccountMonitoringInfoItem1',
                       'publicAccountMonitoringInfoItem2',
                       'publicAccountMonitoringInfoItem3',
                       'publicAccountMonitoringInfoItem4'];
      for (item of infoItems) {
        html += '<p class="cr-dialog-item">';
        html += loadTimeData.getString(item);
        html += '</p>';
      }
      var title = loadTimeData.getString('publicAccountMonitoringInfo');
      this.dialog_ = new cr.ui.dialogs.BaseDialog(this.dialogContainer_);
      this.dialog_.showHtml(title, html, undefined,
                            this.onMonitoringDialogClosed_.bind(this));
      this.parentNode.disabled = true;
    },

    /**
     * Cleanup after the monitoring warning dialog is closed.
     */
    onMonitoringDialogClosed_: function() {
      this.parentNode.disabled = false;
      this.dialog_ = undefined;
    },

    /**
     * Retrieves the list of keyboard layouts available for the currently
     * selected locale.
     */
    getPublicSessionKeyboardLayouts_: function() {
      var selectedLocale = this.querySelector('.language-select').value;
      if (selectedLocale ==
          this.querySelector('.keyboard-select').loadedLocale) {
        // If the list of keyboard layouts was loaded for the currently selected
        // locale, it is already up to date.
        return;
      }
      chrome.send('getPublicSessionKeyboardLayouts',
                  [this.user.username, selectedLocale]);
     },

    /**
     * Populates the keyboard layout "select" element with a list of layouts.
     * @param {string} locale The locale to which this list of keyboard layouts
     *     applies
     * @param {!Object} list List of available keyboard layouts
     */
    populateKeyboardSelect: function(locale, list) {
      if (locale != this.querySelector('.language-select').value) {
        // The selected locale has changed and the list of keyboard layouts is
        // not applicable. This method will be called again when a list of
        // keyboard layouts applicable to the selected locale is retrieved.
        return;
      }

      var keyboardSelect = this.querySelector('.keyboard-select');
      keyboardSelect.loadedLocale = locale;
      keyboardSelect.innerHTML = '';
      for (var i = 0; i < list.length; ++i) {
        var item = list[i];
        keyboardSelect.appendChild(
            new Option(item.title, item.value, item.selected, item.selected));
      }
    },

    /**
     * Populates the language "select" element with a list of locales.
     * @param {!Object} locales The list of available locales
     * @param {string} defaultLocale The locale to select by default
     * @param {boolean} multipleRecommendedLocales Whether |locales| contains
     *     two or more recommended locales
     */
    populateLanguageSelect: function(locales,
                                     defaultLocale,
                                     multipleRecommendedLocales) {
      var languageSelect = this.querySelector('.language-select');
      // If the user manually selected a locale, do not change the selection.
      // Otherwise, select the new |defaultLocale|.
      var selected =
          languageSelect.manuallyChanged ? languageSelect.value : defaultLocale;
      languageSelect.innerHTML = '';
      var group = languageSelect;
      for (var i = 0; i < locales.length; ++i) {
        var item = locales[i];
        if (item.optionGroupName) {
          group = document.createElement('optgroup');
          group.label = item.optionGroupName;
          languageSelect.appendChild(group);
        } else {
          group.appendChild(new Option(item.title,
                                       item.value,
                                       item.value == selected,
                                       item.value == selected));
        }
      }
      languageSelect.multipleRecommendedLocales = multipleRecommendedLocales;

      // Retrieve a list of keyboard layouts applicable to the locale that is
      // now selected.
      this.getPublicSessionKeyboardLayouts_();
    }
  };

  /**
   * Creates a user pod to be used only in desktop chrome.
   * @constructor
   * @extends {UserPod}
   */
  var DesktopUserPod = cr.ui.define(function() {
    // Don't just instantiate a UserPod(), as this will call decorate() on the
    // parent object, and add duplicate event listeners.
    var node = $('user-pod-template').cloneNode(true);
    node.removeAttribute('id');
    return node;
  });

  DesktopUserPod.prototype = {
    __proto__: UserPod.prototype,

    /** @override */
    initialize: function() {
      if (this.user.needsSignin) {
        if (this.user.hasLocalCreds) {
          this.user.initialAuthType = AUTH_TYPE.OFFLINE_PASSWORD;
        } else {
          this.user.initialAuthType = AUTH_TYPE.ONLINE_SIGN_IN;
        }
      }
      UserPod.prototype.initialize.call(this);
    },

    /** @override */
    get mainInput() {
      if (this.user.needsSignin && this.user.hasLocalCreds)
        return this.passwordElement;
      else
        return this.nameElement;
    },

    /** @override */
    update: function() {
      this.imageElement.src = this.user.userImage;
      this.animatedImageElement.src = this.user.userImage;
      this.nameElement.textContent = this.user.displayName;
      this.reauthNameHintElement.textContent = this.user.displayName;

      var isLockedUser = this.user.needsSignin;
      var isLegacySupervisedUser = this.user.legacySupervisedUser;
      var isChildUser = this.user.childUser;
      var isSyncedUser = this.user.emailAddress !== "";
      var isProfileLoaded = this.user.isProfileLoaded;
      this.classList.toggle('locked', isLockedUser);
      this.classList.toggle('legacy-supervised', isLegacySupervisedUser);
      this.classList.toggle('child', isChildUser);
      this.classList.toggle('synced', isSyncedUser);

      if (this.isAuthTypeUserClick)
        this.passwordLabelElement.textContent = this.authValue;

      this.passwordElement.setAttribute('aria-label', loadTimeData.getStringF(
        'passwordFieldAccessibleName', this.user_.emailAddress));

      UserPod.prototype.updateActionBoxArea.call(this);
    },

    /** @override */
    activate: function(e) {
      if (!this.user.needsSignin) {
        Oobe.launchUser(this.user.profilePath);
      } else if (this.user.hasLocalCreds && !this.passwordElement.value) {
        return false;
      } else {
        chrome.send('authenticatedLaunchUser',
                    [this.user.profilePath,
                     this.user.emailAddress,
                     this.passwordElement.value]);
      }
      this.passwordElement.value = '';
      return true;
    },

    /** @override */
    handleClickOnPod_: function(e) {
      if (this.parentNode.disabled)
        return;

      Oobe.clearErrors();
      this.parentNode.lastFocusedPod_ = this;

      // If this is a locked pod and there are local credentials, show the
      // password field.  Otherwise call activate() which will open up a browser
      // window or show the reauth dialog, as needed.
      if (!(this.user.needsSignin && this.user.hasLocalCreds) &&
          !this.isActionBoxMenuActive) {
        this.activate(e);
      }

      if (this.isAuthTypeUserClick)
        chrome.send('attemptUnlock', [this.user.emailAddress]);
    },
  };

  /**
   * Creates a new pod row element.
   * @constructor
   * @extends {HTMLDivElement}
   */
  var PodRow = cr.ui.define('podrow');

  PodRow.prototype = {
    __proto__: HTMLDivElement.prototype,

    // Whether this user pod row is shown for the first time.
    firstShown_: true,

    // True if inside focusPod().
    insideFocusPod_: false,

    // Focused pod.
    focusedPod_: undefined,

    // Activated pod, i.e. the pod of current login attempt.
    activatedPod_: undefined,

    // Pod that was most recently focused, if any.
    lastFocusedPod_: undefined,

    // Pods whose initial images haven't been loaded yet.
    podsWithPendingImages_: [],

    // Whether pod placement has been postponed.
    podPlacementPostponed_: false,

    // Standard user pod height/width.
    userPodHeight_: 0,
    userPodWidth_: 0,

    // Array of users that are shown (public/supervised/regular).
    users_: [],

    // If we're in tablet mode.
    tabletModeEnabled_: false,

    /** @override */
    decorate: function() {
      // Event listeners that are installed for the time period during which
      // the element is visible.
      this.listeners_ = {
        focus: [this.handleFocus_.bind(this), true /* useCapture */],
        click: [this.handleClick_.bind(this), true],
        mousemove: [this.handleMouseMove_.bind(this), false],
        keydown: [this.handleKeyDown.bind(this), false]
      };

      var isDesktopUserManager = Oobe.getInstance().displayType ==
          DISPLAY_TYPE.DESKTOP_USER_MANAGER;
      var isNewDesktopUserManager = Oobe.getInstance().newDesktopUserManager;
      this.userPodHeight_ = isDesktopUserManager ?
          isNewDesktopUserManager ? MD_DESKTOP_POD_HEIGHT :
                                    DESKTOP_POD_HEIGHT :
          CROS_POD_HEIGHT;
      this.userPodWidth_ = isDesktopUserManager ?
          isNewDesktopUserManager ? MD_DESKTOP_POD_WIDTH :
                                    DESKTOP_POD_WIDTH :
          CROS_POD_WIDTH;
    },

    /**
     * Returns all the pods in this pod row.
     * @type {NodeList}
     */
    get pods() {
      return Array.prototype.slice.call(this.children);
    },

    /**
     * Return true if user pod row has only single user pod in it, which should
     * always be focused except desktop and tablet modes.
     * @type {boolean}
     */
    get alwaysFocusSinglePod() {
      var isDesktopUserManager = Oobe.getInstance().displayType ==
          DISPLAY_TYPE.DESKTOP_USER_MANAGER;

      return (isDesktopUserManager || this.tabletModeEnabled_) ?
          false :
          this.children.length == 1;
    },

    /**
     * Returns pod with the given username (null if there is no such pod).
     * @param {string} username Username to be matched.
     * @return {Object} Pod with the given username. null if pod hasn't been
     *     found.
     */
    getPodWithUsername_: function(username) {
      for (var i = 0, pod; pod = this.pods[i]; ++i) {
        if (pod.user.username == username)
          return pod;
      }
      return null;
    },

    /**
     * True if the the pod row is disabled (handles no user interaction).
     * @type {boolean}
     */
    disabled_: false,
    get disabled() {
      return this.disabled_;
    },
    set disabled(value) {
      this.disabled_ = value;
      this.pods.forEach(function(pod) {
        pod.disabled = value;
      });
    },

    /**
     * Creates a user pod from given email.
     * @param {!Object} user User info dictionary.
     */
    createUserPod: function(user) {
      var userPod;
      if (user.isDesktopUser)
        userPod = new DesktopUserPod({user: user});
      else if (user.publicAccount)
        userPod = new PublicAccountUserPod({user: user});
      else
        userPod = new UserPod({user: user});

      userPod.hidden = false;
      return userPod;
    },

    /**
     * Add an existing user pod to this pod row.
     * @param {!Object} user User info dictionary.
     */
    addUserPod: function(user) {
      var userPod = this.createUserPod(user);
      this.appendChild(userPod);
      userPod.initialize();
    },

    /**
     * Performs visual changes on the user pod if there is an error.
     * @param {boolean} visible Whether to show or hide the display.
     */
    setFocusedPodErrorDisplay: function(visible) {
      if (this.focusedPod_)
        this.focusedPod_.showError = visible;
    },

    /**
     * Shows or hides the pin keyboard for the current focused pod.
     * @param {boolean} visible
     */
    setFocusedPodPinVisibility: function(visible) {
      if (this.focusedPod_)
        this.focusedPod_.setPinVisibility(visible);
    },

    /**
     * Enables or disables the pin keyboard for the given user. A disabled pin
     * keyboard will never be displayed.
     *
     * If the user's pod is focused, then enabling the pin keyboard will display
     * it; disabling the pin keyboard will hide it.
     * @param {!string} username
     * @param {boolean} enabled
     */
    setPinEnabled: function(username, enabled) {
      var pod = this.getPodWithUsername_(username);
      if (!pod) {
        console.error('Attempt to enable/disable pin keyboard of missing pod.');
        return;
      }

      // Make sure to set |pinEnabled| before toggling visiblity to avoid
      // validation errors.
      pod.pinEnabled = enabled;

      if (this.focusedPod_ == pod) {
        if (enabled) {
          ensurePinKeyboardLoaded(
              this.setPinVisibility.bind(this, username, true));
        } else {
          this.setPinVisibility(username, false);
        }
      }
    },

    /**
     * Shows or hides the pin keyboard from the pod with the given |username|.
     * This is only a visibility change; the pin keyboard can be reshown.
     *
     * Use setPinEnabled if the pin keyboard should be disabled for the given
     * user.
     * @param {!user} username
     * @param {boolean} visible
     */
    setPinVisibility: function(username, visible) {
      var pod = this.getPodWithUsername_(username);
      if (!pod) {
        console.error('Attempt to show/hide pin keyboard of missing pod.');
        return;
      }
      if (visible && pod.pinEnabled === false) {
        console.error('Attempt to show disabled pin keyboard');
        return;
      }
      if (visible && this.focusedPod_ != pod) {
        console.error('Attempt to show pin keyboard on non-focused pod');
        return;
      }

      pod.setPinVisibility(visible);
    },

    /**
     * Removes user pod from pod row.
     * @param {!user} username
     */
    removeUserPod: function(username) {
      var podToRemove = this.getPodWithUsername_(username);
      if (podToRemove == null) {
        console.warn('Attempt to remove pod that does not exist');
        return;
      }
      this.removeChild(podToRemove);
      if (this.pods.length > 0)
        this.placePods_();
    },

    /**
     * Returns index of given pod or -1 if not found.
     * @param {UserPod} pod Pod to look up.
     * @private
     */
    indexOf_: function(pod) {
      for (var i = 0; i < this.pods.length; ++i) {
        if (pod == this.pods[i])
          return i;
      }
      return -1;
    },

    /**
     * Populates pod row with given existing users and start init animation.
     * @param {array} users Array of existing user emails.
     */
    loadPods: function(users) {
      this.users_ = users;

      this.rebuildPods();
    },

    /**
     * Scrolls focused user pod into view.
     */
    scrollFocusedPodIntoView: function() {
      var pod = this.focusedPod_;
      if (!pod)
        return;

      // First check whether focused pod is already fully visible.
      var visibleArea = $('scroll-container');
      // Visible area may not defined at user manager screen on all platforms.
      // Windows, Mac and Linux do not have visible area.
      if (!visibleArea)
        return;
      var scrollTop = visibleArea.scrollTop;
      var clientHeight = visibleArea.clientHeight;
      var podTop = $('oobe').offsetTop + pod.offsetTop;
      var padding = USER_POD_KEYBOARD_MIN_PADDING;
      if (podTop + pod.height + padding <= scrollTop + clientHeight &&
          podTop - padding >= scrollTop) {
        return;
      }

      // Scroll so that user pod is as centered as possible.
      visibleArea.scrollTop = podTop - (clientHeight - pod.offsetHeight) / 2;
    },

    /**
     * Rebuilds pod row using users_ that were previously set or updated.
     */
    rebuildPods: function() {
      var emptyPodRow = this.pods.length == 0;

      // Clear existing pods.
      this.innerHTML = '';
      this.focusedPod_ = undefined;
      this.activatedPod_ = undefined;
      this.lastFocusedPod_ = undefined;

      // Switch off animation
      Oobe.getInstance().toggleClass('flying-pods', false);

      // Populate the pod row.
      for (var i = 0; i < this.users_.length; ++i)
        this.addUserPod(this.users_[i]);

      for (var i = 0, pod; pod = this.pods[i]; ++i)
        this.podsWithPendingImages_.push(pod);

      // Make sure we eventually show the pod row, even if some image is stuck.
      setTimeout(function() {
        $('pod-row').classList.remove('images-loading');
      }, POD_ROW_IMAGES_LOAD_TIMEOUT_MS);

      var isAccountPicker = $('login-header-bar').signinUIState ==
          SIGNIN_UI_STATE.ACCOUNT_PICKER;

      // Immediately recalculate pods layout only when current UI is account
      // picker. Otherwise postpone it.
      if (isAccountPicker) {
        this.placePods_();
        this.maybePreselectPod();

        // Without timeout changes in pods positions will be animated even
        // though it happened when 'flying-pods' class was disabled.
        setTimeout(function() {
          Oobe.getInstance().toggleClass('flying-pods', true);
        }, 0);
      } else {
        this.podPlacementPostponed_ = true;
      }
    },

    /**
     * Shows a custom icon on a user pod besides the input field.
     * @param {string} username Username of pod to add button
     * @param {!{id: !string,
     *           hardlockOnClick: boolean,
     *           isTrialRun: boolean,
     *           ariaLabel: string | undefined,
     *           tooltip: ({text: string, autoshow: boolean} | undefined)}} icon
     *     The icon parameters.
     */
    showUserPodCustomIcon: function(username, icon) {
      var pod = this.getPodWithUsername_(username);
      if (pod == null) {
        console.error('Unable to show user pod button: user pod not found.');
        return;
      }

      if (!icon.id && !icon.tooltip)
        return;

      if (icon.id)
        pod.customIconElement.setIcon(icon.id);

      if (icon.isTrialRun) {
        pod.customIconElement.setInteractive(
            this.onDidClickLockIconDuringTrialRun_.bind(this, username));
      } else if (icon.hardlockOnClick) {
        pod.customIconElement.setInteractive(
            this.hardlockUserPod_.bind(this, username));
      } else {
        pod.customIconElement.setInteractive(null);
      }

      var ariaLabel = icon.ariaLabel || (icon.tooltip && icon.tooltip.text);
      if (ariaLabel)
        pod.customIconElement.setAriaLabel(ariaLabel);
      else
        console.warn('No ARIA label for user pod custom icon.');

      pod.customIconElement.show();

      // This has to be called after |show| in case the tooltip should be shown
      // immediatelly.
      pod.customIconElement.setTooltip(
          icon.tooltip || {text: '', autoshow: false});

      // Hide fingerprint icon when custom icon is shown.
      this.setUserPodFingerprintIcon(username, FINGERPRINT_STATES.HIDDEN);
    },

    /**
     * Hard-locks user pod for the user. If user pod is hard-locked, it can be
     * only unlocked using password, and the authentication type cannot be
     * changed.
     * @param {!string} username The user's username.
     * @private
     */
    hardlockUserPod_: function(username) {
      chrome.send('hardlockPod', [username]);
    },

    /**
     * Records a metric indicating that the user clicked on the lock icon during
     * the trial run for Easy Unlock.
     * @param {!string} username The user's username.
     * @private
     */
    onDidClickLockIconDuringTrialRun_: function(username) {
      chrome.send('recordClickOnLockIcon', [username]);
    },

    /**
     * Hides the custom icon in the user pod added by showUserPodCustomIcon().
     * @param {string} username Username of pod to remove button
     */
    hideUserPodCustomIcon: function(username) {
      var pod = this.getPodWithUsername_(username);
      if (pod == null) {
        console.error('Unable to hide user pod button: user pod not found.');
        return;
      }

      // TODO(tengs): Allow option for a fading transition.
      pod.customIconElement.hide();

      // Show fingerprint icon if applicable.
      this.setUserPodFingerprintIcon(username, FINGERPRINT_STATES.DEFAULT);
    },

    /**
     * Set a fingerprint icon in the user pod of |username|.
     * @param {string} username Username of the selected user
     * @param {number} state Fingerprint unlock state
     */
    setUserPodFingerprintIcon: function(username, state) {
      var pod = this.getPodWithUsername_(username);
      if (pod == null) {
        console.error(
            'Unable to set user pod fingerprint icon: user pod not found.');
        return;
      }
      pod.fingerprintAuthenticated_ = false;
      if (!pod.fingerprintIconElement)
        return;
      if (!pod.user.allowFingerprint || state == FINGERPRINT_STATES.HIDDEN ||
          !pod.customIconElement.hidden) {
        pod.fingerprintIconElement.hidden = true;
        pod.submitButton.hidden = false;
        return;
      }

      FINGERPRINT_STATES_MAPPING.forEach(function(icon) {
          pod.fingerprintIconElement.classList.toggle(
              icon.class, state == icon.state);
      });
      pod.fingerprintIconElement.hidden = false;
      pod.submitButton.hidden = pod.passwordElement.value.length == 0;
      this.updatePasswordField_(pod, state);
      if (state == FINGERPRINT_STATES.DEFAULT)
        return;

      pod.fingerprintAuthenticated_ = true;
      this.setActivatedPod(pod);
      if (state == FINGERPRINT_STATES.FAILED) {
        /** @const */ var RESET_ICON_TIMEOUT_MS = 500;
        setTimeout(
            this.resetIconAndPasswordField_.bind(this, pod),
            RESET_ICON_TIMEOUT_MS);
      }
    },

    /**
     * Reset the fingerprint icon and password field.
     * @param {UserPod} pod Pod to reset.
     */
    resetIconAndPasswordField_: function(pod) {
      if (!pod.fingerprintIconElement)
        return;
      this.setUserPodFingerprintIcon(
          pod.user.username, FINGERPRINT_STATES.DEFAULT);
    },

    /**
     * Remove the fingerprint icon in the user pod.
     * @param {string} username Username of the selected user
     */
    removeUserPodFingerprintIcon: function(username) {
      var pod = this.getPodWithUsername_(username);
      if (pod == null) {
        console.error('No user pod found (when removing fingerprint icon).');
        return;
      }
      this.resetIconAndPasswordField_(pod);
      if (pod.fingerprintIconElement) {
        pod.fingerprintIconElement.parentNode.removeChild(
            pod.fingerprintIconElement);
      }
      pod.submitButton.hidden = false;
    },

    /**
     * Updates the password field in the user pod.
     * @param {UserPod} pod Pod to update.
     * @param {number} state Fingerprint unlock state
     */
    updatePasswordField_: function(pod, state) {
      FINGERPRINT_STATES_MAPPING.forEach(function(item) {
        pod.passwordElement.classList.toggle(item.class, state == item.state);
      });
      var placeholderStr = loadTimeData.getString(
          pod.isPinShown() ? 'pinKeyboardPlaceholderPinPassword' :
                             'passwordHint');
      if (state == FINGERPRINT_STATES.SIGNIN) {
        placeholderStr = loadTimeData.getString('fingerprintSigningin');
      } else if (state == FINGERPRINT_STATES.FAILED) {
        placeholderStr = loadTimeData.getString('fingerprintSigninFailed');
      }
      pod.passwordElement.placeholder = placeholderStr;
    },

    /**
     * Sets the authentication type used to authenticate the user.
     * @param {string} username Username of selected user
     * @param {number} authType Authentication type, must be one of the
     *                          values listed in AUTH_TYPE enum.
     * @param {string} value The initial value to use for authentication.
     */
    setAuthType: function(username, authType, value) {
      var pod = this.getPodWithUsername_(username);
      if (pod == null) {
        console.error('Unable to set auth type: user pod not found.');
        return;
      }
      pod.setAuthType(authType, value);
    },

    /**
     * Sets the state of tablet mode.
     * @param {boolean} isTabletModeEnabled true if the mode is on.
     */
    setTabletModeState: function(isTabletModeEnabled) {
      this.tabletModeEnabled_ = isTabletModeEnabled;
      this.pods.forEach(function(pod, index) {
        pod.actionBoxAreaElement.classList.toggle(
            'forced', isTabletModeEnabled);
      });
    },

    /**
     * Updates the display name shown on a public session pod.
     * @param {string} userID The user ID of the public session
     * @param {string} displayName The new display name
     */
    setPublicSessionDisplayName: function(userID, displayName) {
      var pod = this.getPodWithUsername_(userID);
      if (pod != null)
        pod.setDisplayName(displayName);
    },

    /**
     * Updates the list of locales available for a public session.
     * @param {string} userID The user ID of the public session
     * @param {!Object} locales The list of available locales
     * @param {string} defaultLocale The locale to select by default
     * @param {boolean} multipleRecommendedLocales Whether |locales| contains
     *     two or more recommended locales
     */
    setPublicSessionLocales: function(userID,
                                      locales,
                                      defaultLocale,
                                      multipleRecommendedLocales) {
      var pod = this.getPodWithUsername_(userID);
      if (pod != null) {
        pod.populateLanguageSelect(locales,
                                   defaultLocale,
                                   multipleRecommendedLocales);
      }
    },

    /**
     * Updates the list of available keyboard layouts for a public session pod.
     * @param {string} userID The user ID of the public session
     * @param {string} locale The locale to which this list of keyboard layouts
     *     applies
     * @param {!Object} list List of available keyboard layouts
     */
    setPublicSessionKeyboardLayouts: function(userID, locale, list) {
      var pod = this.getPodWithUsername_(userID);
      if (pod != null)
        pod.populateKeyboardSelect(locale, list);
    },

    /**
     * Called when window was resized.
     */
    onWindowResize: function() {
      var layout = this.calculateLayout_();
      if (layout.columns != this.columns || layout.rows != this.rows)
        this.placePods_();

      // Wrap this in a set timeout so the function is called after the pod is
      // finished transitioning so that we work with the final pod dimensions.
      // If there is no focused pod that may be transitioning when this function
      // is called, we can call scrollFocusedPodIntoView() right away.
      var timeOut = 0;
      if (this.focusedPod_) {
        var style = getComputedStyle(this.focusedPod_);
        timeOut = parseFloat(style.transitionDuration) * 1000;
      }

      setTimeout(function() {
        this.scrollFocusedPodIntoView();
      }.bind(this), timeOut);
    },

    /**
     * Returns width of podrow having |columns| number of columns.
     * @private
     */
    columnsToWidth_: function(columns) {
      var isDesktopUserManager = Oobe.getInstance().displayType ==
          DISPLAY_TYPE.DESKTOP_USER_MANAGER;
      var margin = isDesktopUserManager ? DESKTOP_MARGIN_BY_COLUMNS[columns] :
                                          MARGIN_BY_COLUMNS[columns];
      var rowPadding = isDesktopUserManager ? DESKTOP_ROW_PADDING :
                                              POD_ROW_PADDING;
      return 2 * rowPadding + columns * this.userPodWidth_ +
          (columns - 1) * margin;
    },

    /**
     * Returns height of podrow having |rows| number of rows.
     * @private
     */
    rowsToHeight_: function(rows) {
      var isDesktopUserManager = Oobe.getInstance().displayType ==
          DISPLAY_TYPE.DESKTOP_USER_MANAGER;
      var rowPadding = isDesktopUserManager ? DESKTOP_ROW_PADDING :
                                              POD_ROW_PADDING;
      return 2 * rowPadding + rows * this.userPodHeight_;
    },

    /**
     * Calculates number of columns and rows that podrow should have in order to
     * hold as much its pods as possible for current screen size. Also it tries
     * to choose layout that looks good.
     * @return {{columns: number, rows: number}}
     */
    calculateLayout_: function() {
      var preferredColumns = this.pods.length < COLUMNS.length ?
          COLUMNS[this.pods.length] : COLUMNS[COLUMNS.length - 1];
      var maxWidth = Oobe.getInstance().clientAreaSize.width;
      var columns = preferredColumns;
      while (maxWidth < this.columnsToWidth_(columns) && columns > 1)
        --columns;
      var rows = Math.floor((this.pods.length - 1) / columns) + 1;
      if (getComputedStyle(
          $('signin-banner'), null).getPropertyValue('display') != 'none') {
        rows = Math.min(rows, MAX_NUMBER_OF_ROWS_UNDER_SIGNIN_BANNER);
      }
      if (!Oobe.getInstance().newDesktopUserManager) {
        var maxHeigth = Oobe.getInstance().clientAreaSize.height;
        while (maxHeigth < this.rowsToHeight_(rows) && rows > 1)
         --rows;
      }
      // One more iteration if it's not enough cells to place all pods.
      while (maxWidth >= this.columnsToWidth_(columns + 1) &&
             columns * rows < this.pods.length &&
             columns < MAX_NUMBER_OF_COLUMNS) {
         ++columns;
      }
      return {columns: columns, rows: rows};
    },

    /**
     * Places pods onto their positions onto pod grid.
     * @private
     */
    placePods_: function() {
      var isDesktopUserManager = Oobe.getInstance().displayType ==
          DISPLAY_TYPE.DESKTOP_USER_MANAGER;
      if (isDesktopUserManager && !Oobe.getInstance().userPodsPageVisible)
        return;

      var layout = this.calculateLayout_();
      var columns = this.columns = layout.columns;
      var rows = this.rows = layout.rows;
      var maxPodsNumber = columns * rows;
      var margin = isDesktopUserManager ? DESKTOP_MARGIN_BY_COLUMNS[columns] :
                                          MARGIN_BY_COLUMNS[columns];
      this.parentNode.setPreferredSize(
          this.columnsToWidth_(columns), this.rowsToHeight_(rows));
      var height = this.userPodHeight_;
      var width = this.userPodWidth_;
      var pinPodLocation = { column: columns + 1, row: rows + 1 };
      if (this.focusedPod_ && this.focusedPod_.isPinShown())
        pinPodLocation = this.findPodLocation_(this.focusedPod_, columns, rows);

      this.pods.forEach(function(pod, index) {
        if (index >= maxPodsNumber) {
           pod.hidden = true;
           return;
        }
        pod.hidden = false;
        if (pod.offsetHeight != height &&
            pod.offsetHeight != CROS_PIN_POD_HEIGHT) {
          console.error('Pod offsetHeight (' + pod.offsetHeight +
              ') and POD_HEIGHT (' + height + ') are not equal.');
        }
        if (pod.offsetWidth != width) {
          console.error('Pod offsetWidth (' + pod.offsetWidth +
              ') and POD_WIDTH (' + width + ') are not equal.');
        }
        var column = index % columns;
        var row = Math.floor(index / columns);

        var rowPadding = isDesktopUserManager ? DESKTOP_ROW_PADDING :
                                                POD_ROW_PADDING;
        pod.left = rowPadding + column * (width + margin);

        // On desktop, we want the rows to always be equally spaced.
        pod.top = isDesktopUserManager ? row * (height + rowPadding) :
                                         row * height + rowPadding;
      });
      Oobe.getInstance().updateScreenSize(this.parentNode);
    },

    /**
     * Number of columns.
     * @type {?number}
     */
    set columns(columns) {
      // Cannot use 'columns' here.
      this.setAttribute('ncolumns', columns);
    },
    get columns() {
      return parseInt(this.getAttribute('ncolumns'));
    },

    /**
     * Number of rows.
     * @type {?number}
     */
    set rows(rows) {
      // Cannot use 'rows' here.
      this.setAttribute('nrows', rows);
    },
    get rows() {
      return parseInt(this.getAttribute('nrows'));
    },

    /**
     * Whether the pod is currently focused.
     * @param {UserPod} pod Pod to check for focus.
     * @return {boolean} Pod focus status.
     */
    isFocused: function(pod) {
      return this.focusedPod_ == pod;
    },

    /**
     * Focuses a given user pod or clear focus when given null.
     * @param {UserPod=} podToFocus User pod to focus (undefined clears focus).
     * @param {boolean=} opt_force If true, forces focus update even when
     *     podToFocus is already focused.
     * @param {boolean=} opt_skipInputFocus If true, don't focus on the input
     *     box of user pod.
     */
    focusPod: function(podToFocus, opt_force, opt_skipInputFocus) {
      if (this.isFocused(podToFocus) && !opt_force) {
        // Calling focusPod w/o podToFocus means reset.
        if (!podToFocus)
          Oobe.clearErrors();
        return;
      }

      // Make sure there's only one focusPod operation happening at a time.
      if (this.insideFocusPod_) {
        return;
      }
      this.insideFocusPod_ = true;

      for (var i = 0, pod; pod = this.pods[i]; ++i) {
        if (!this.alwaysFocusSinglePod) {
          pod.isActionBoxMenuActive = false;
        }
        if (pod != podToFocus) {
          pod.isActionBoxMenuHovered = false;
          pod.classList.remove('focused');
          pod.setPinVisibility(false);
          this.setUserPodFingerprintIcon(
              pod.user.username, FINGERPRINT_STATES.HIDDEN);
          // On Desktop, the faded style is not set correctly, so we should
          // manually fade out non-focused pods if there is a focused pod.
          if (pod.user.isDesktopUser && podToFocus)
            pod.classList.add('faded');
          else
            pod.classList.remove('faded');
          pod.reset(false);
        }
      }

      // Clear any error messages for previous pod.
      if (!this.isFocused(podToFocus))
        Oobe.clearErrors();

      this.focusedPod_ = podToFocus;
      if (podToFocus) {
        // Only show the keyboard if it is fully loaded.
        if (podToFocus.isPinReady())
          podToFocus.setPinVisibility(true);
        podToFocus.classList.remove('faded');
        podToFocus.classList.add('focused');
        if (!podToFocus.multiProfilesPolicyApplied) {
          podToFocus.classList.toggle('signing-in', false);
          if (!opt_skipInputFocus)
            podToFocus.focusInput();
        } else {
          podToFocus.userTypeBubbleElement.classList.add('bubble-shown');
          // Note it is not necessary to skip this focus request when
          // |opt_skipInputFocus| is true. When |multiProfilesPolicyApplied|
          // is false, it doesn't focus on the password input box by default.
          podToFocus.focus();
        }

        chrome.send(
            'focusPod', [podToFocus.user.username, true /* loads wallpaper */]);
        this.firstShown_ = false;
        this.lastFocusedPod_ = podToFocus;
        this.scrollFocusedPodIntoView();
        this.setUserPodFingerprintIcon(
            podToFocus.user.username, FINGERPRINT_STATES.DEFAULT);
      } else {
        chrome.send('noPodFocused');
      }
      this.insideFocusPod_ = false;
    },

    /**
     * Returns the currently activated pod.
     * @type {UserPod}
     */
    get activatedPod() {
      return this.activatedPod_;
    },

    /**
     * Sets currently activated pod.
     * @param {UserPod} pod Pod to check for focus.
     * @param {Event} e Event object.
     */
    setActivatedPod: function(pod, e) {
      if (this.disabled) {
        console.error('Cannot activate pod while sign-in UI is disabled.');
        return;
      }
      if (pod && pod.activate(e))
        this.activatedPod_ = pod;
    },

    /**
     * The pod that is preselected on user pod row show.
     * @type {?UserPod}
     */
    get preselectedPod() {
      var isDesktopUserManager = Oobe.getInstance().displayType ==
          DISPLAY_TYPE.DESKTOP_USER_MANAGER;
      if (isDesktopUserManager) {
        // On desktop, don't pre-select a pod if it's the only one.
        if (this.pods.length == 1)
          return null;

        // The desktop User Manager can send an URI encoded profile path in the
        // url hash, that indicates a pod that should be initially focused.
        var focusedProfilePath =
            decodeURIComponent(window.location.hash.substr(1));
        for (var i = 0, pod; pod = this.pods[i]; ++i) {
          if (focusedProfilePath === pod.user.profilePath)
            return pod;
        }
        return null;
      }

      for (i = 0; pod = this.pods[i]; ++i) {
        if (!pod.multiProfilesPolicyApplied)
          return pod;
      }
      return this.pods[0];
    },

    /**
     * Resets input UI.
     * @param {boolean} takeFocus True to take focus.
     */
    reset: function(takeFocus) {
      this.disabled = false;
      if (this.activatedPod_)
        this.activatedPod_.reset(takeFocus);
    },

    /**
     * Restores input focus to current selected pod, if there is any.
     */
    refocusCurrentPod: function() {
      if (this.focusedPod_ && !this.focusedPod_.multiProfilesPolicyApplied) {
        this.focusedPod_.focusInput();
      }
    },

    /**
     * Clears focused pod password field.
     */
    clearFocusedPod: function() {
      if (!this.disabled && this.focusedPod_)
        this.focusedPod_.reset(true);
    },

    /**
     * Shows signin UI.
     * @param {string} email Email for signin UI.
     */
    showSigninUI: function(email) {
      // Clear any error messages that might still be around.
      Oobe.clearErrors();
      this.disabled = true;
      this.lastFocusedPod_ = this.getPodWithUsername_(email);
      Oobe.showSigninUI(email);
    },

    /**
     * Updates current image of a user.
     * @param {string} username User for which to update the image.
     */
    updateUserImage: function(username) {
      var pod = this.getPodWithUsername_(username);
      if (pod)
        pod.updateUserImage();
    },

    /**
     * Handler of click event.
     * @param {Event} e Click Event object.
     * @private
     */
    handleClick_: function(e) {
      if (this.disabled)
        return;

      // Clear all menus if the click is outside pod menu and its
      // button area.
      if (!findAncestorByClass(e.target, 'action-box-menu') &&
          !findAncestorByClass(e.target, 'action-box-area')) {
        for (var i = 0, pod; pod = this.pods[i]; ++i)
          pod.isActionBoxMenuActive = false;
      }

      // Clears focus if not clicked on a pod and if there's more than one pod.
      var pod = findAncestorByClass(e.target, 'pod');
      if ((!pod || pod.parentNode != this) && !this.alwaysFocusSinglePod) {
        this.focusPod();
      }

      if (pod)
        pod.isActionBoxMenuHovered = true;

      // Return focus back to single pod.
      if (this.alwaysFocusSinglePod && !pod) {
        if ($('login-header-bar').contains(e.target))
          return;
        this.focusPod(this.focusedPod_, true /* force */);
        this.focusedPod_.userTypeBubbleElement.classList.remove('bubble-shown');
        this.focusedPod_.isActionBoxMenuHovered = false;
      }
    },

    /**
     * Handler of mouse move event.
     * @param {Event} e Click Event object.
     * @private
     */
    handleMouseMove_: function(e) {
      if (this.disabled)
        return;
      if (e.movementX == 0 && e.movementY == 0)
        return;

      // Defocus (thus hide) action box, if it is focused on a user pod
      // and the pointer is not hovering over it.
      var pod = findAncestorByClass(e.target, 'pod');
      if (document.activeElement &&
          document.activeElement.parentNode != pod &&
          document.activeElement.classList.contains('action-box-area')) {
        document.activeElement.parentNode.focus();
      }

      if (pod)
        pod.isActionBoxMenuHovered = true;

      // Hide action boxes on other user pods.
      for (var i = 0, p; p = this.pods[i]; ++i)
        if (p != pod && !p.isActionBoxMenuActive)
          p.isActionBoxMenuHovered = false;
    },

    /**
     * Handles focus event.
     * @param {Event} e Focus Event object.
     * @private
     */
    handleFocus_: function(e) {
      if (this.disabled)
        return;
      if (e.target.parentNode == this) {
        // Focus on a pod
        if (e.target.classList.contains('focused')) {
          if (!e.target.multiProfilesPolicyApplied)
            e.target.focusInput();
          else
            e.target.userTypeBubbleElement.classList.add('bubble-shown');
        } else
          this.focusPod(e.target);
        return;
      }

      var pod = findAncestorByClass(e.target, 'pod');
      if (pod && pod.parentNode == this) {
        // Focus on a control of a pod but not on the action area button.
        if (!pod.classList.contains('focused')) {
          if (e.target.classList.contains('action-box-area') ||
              e.target.classList.contains('remove-warning-button')) {
            // focusPod usually moves focus on the password input box which
            // triggers virtual keyboard to show up. But the focus may move to a
            // non text input element shortly by e.target.focus. Hence, a
            // virtual keyboard flicking might be observed. We need to manually
            // prevent focus on password input box to avoid virtual keyboard
            // flicking in this case. See crbug.com/396016 for details.
            this.focusPod(pod, false, true /* opt_skipInputFocus */);
          } else {
            this.focusPod(pod);
          }
          pod.userTypeBubbleElement.classList.remove('bubble-shown');
          e.target.focus();
        }
        return;
      }

      // Clears pod focus when we reach here. It means new focus is neither
      // on a pod nor on a button/input for a pod.
      // Do not "defocus" user pod when it is a single pod.
      // That means that 'focused' class will not be removed and
      // input field/button will always be visible.
      if (!this.alwaysFocusSinglePod)
        this.focusPod();
      else {
        // Hide user-type-bubble in case this is one pod and we lost focus of
        // it.
        this.focusedPod_.userTypeBubbleElement.classList.remove('bubble-shown');
      }
    },

    /**
     * Handler of keydown event.
     * @param {Event} e KeyDown Event object.
     */
    handleKeyDown: function(e) {
      if (this.disabled)
        return;
      var editing = e.target.tagName == 'INPUT' && e.target.value;
      switch (e.key) {
        case 'ArrowLeft':
          if (!editing) {
            if (this.focusedPod_ && this.focusedPod_.previousElementSibling)
              this.focusPod(this.focusedPod_.previousElementSibling);
            else
              this.focusPod(this.lastElementChild);

            e.stopPropagation();
          }
          break;
        case 'ArrowRight':
          if (!editing) {
            if (this.focusedPod_ && this.focusedPod_.nextElementSibling)
              this.focusPod(this.focusedPod_.nextElementSibling);
            else
              this.focusPod(this.firstElementChild);

            e.stopPropagation();
          }
          break;
        case 'Enter':
          if (this.focusedPod_) {
            var targetTag = e.target.tagName;
            if (e.target == this.focusedPod_.passwordElement ||
                (this.focusedPod_.pinKeyboard &&
                 e.target == this.focusedPod_.pinKeyboard.inputElement) ||
                (targetTag != 'INPUT' &&
                 targetTag != 'BUTTON' &&
                 targetTag != 'A')) {
              this.setActivatedPod(this.focusedPod_, e);
              e.stopPropagation();
            }
          }
          break;
        case 'Escape':
          if (!this.alwaysFocusSinglePod)
            this.focusPod();
          break;
      }
    },

    /**
     * Called right after the pod row is shown.
     */
    handleAfterShow: function() {
      var focusedPod = this.focusedPod_;

      // Without timeout changes in pods positions will be animated even though
      // it happened when 'flying-pods' class was disabled.
      setTimeout(function() {
        Oobe.getInstance().toggleClass('flying-pods', true);
        if (focusedPod)
          ensureTransitionEndEvent(focusedPod);
      }, 0);

      // Force input focus for user pod on show and once transition ends.
      if (focusedPod) {
        var screen = this.parentNode;
        var self = this;
        focusedPod.addEventListener('transitionend', function f(e) {
          focusedPod.removeEventListener('transitionend', f);
          focusedPod.reset(true);
          // Notify screen that it is ready.
          screen.onShow();
        });
      }
    },

    /**
     * Called right before the pod row is shown.
     */
    handleBeforeShow: function() {
      Oobe.getInstance().toggleClass('flying-pods', false);
      for (var event in this.listeners_) {
        this.ownerDocument.addEventListener(
            event, this.listeners_[event][0], this.listeners_[event][1]);
      }
      $('login-header-bar').buttonsTabIndex = UserPodTabOrder.HEADER_BAR;

      if (this.podPlacementPostponed_) {
        this.podPlacementPostponed_ = false;
        this.placePods_();
        this.maybePreselectPod();
      }
    },

    /**
     * Called when the element is hidden.
     */
    handleHide: function() {
      for (var event in this.listeners_) {
        this.ownerDocument.removeEventListener(
            event, this.listeners_[event][0], this.listeners_[event][1]);
      }
      $('login-header-bar').buttonsTabIndex = 0;
    },

    /**
     * Called when a pod's user image finishes loading.
     */
    handlePodImageLoad: function(pod) {
      var index = this.podsWithPendingImages_.indexOf(pod);
      if (index == -1) {
        return;
      }

      this.podsWithPendingImages_.splice(index, 1);
      if (this.podsWithPendingImages_.length == 0) {
        this.classList.remove('images-loading');
      }
    },

    /**
     * Preselects pod, if needed.
     */
     maybePreselectPod: function() {
       var pod = this.preselectedPod;
       this.focusPod(pod);

       // Hide user-type-bubble in case all user pods are disabled and we focus
       // first pod.
       if (pod && pod.multiProfilesPolicyApplied) {
         pod.userTypeBubbleElement.classList.remove('bubble-shown');
       }
     }
  };

  return {
    PodRow: PodRow
  };
});



cr.define('cr.ui', function() {
  const DisplayManager = cr.ui.login.DisplayManager;

  /**
   * Maximum possible height of the #login-header-bar, including the padding
   * and the border.
   * @type {number}
   */
  const MAX_LOGIN_HEADER_BAR_HEIGHT = 57;

  /**
   * Manages initialization of screens, transitions, and error messages.
   * @constructor
   * @extends {DisplayManager}
   */
  function UserManager() {}

  cr.addSingletonGetter(UserManager);

  UserManager.prototype = {
    __proto__: DisplayManager.prototype,

    /**
     * Indicates that this is the Material Design Desktop User Manager.
     * @type {boolean}
     */
    newDesktopUserManager: true,

    /**
     * Indicates whether the user pods page is visible.
     * @type {boolean}
     */
    userPodsPageVisible: true,

    /**
     * @override
     * Overrides clientAreaSize in DisplayManager. When a new profile is created
     * the user pods page may not be visible yet, so user-pods cannot be
     * placed correctly. Therefore, we use dimensions of the #animated-pages.
     * @type {{width: number, height: number}}
     */
    get clientAreaSize() {
      const userManagerPages = document.querySelector('user-manager-pages');
      const width = userManagerPages.offsetWidth;
      // Deduct the maximum possible height of the #login-header-bar from the
      // height of #animated-pages. Result is the remaining visible height.
      const height =
          userManagerPages.offsetHeight - MAX_LOGIN_HEADER_BAR_HEIGHT;
      return {width: width, height: height};
    }
  };

  /**
   * Listens for the page change event to see if the user pods page is visible.
   * Updates userPodsPageVisible property accordingly and if the page is visible
   * re-arranges the user pods.
   * @param {!Event} event The event containing ID of the selected page.
   */
  UserManager.onPageChanged_ = function(event) {
    const userPodsPageVisible = event.detail.page == 'user-pods-page';
    cr.ui.UserManager.getInstance().userPodsPageVisible = userPodsPageVisible;
    if (userPodsPageVisible) {
      $('pod-row').rebuildPods();
    }
  };

  /**
   * Initializes the UserManager.
   */
  UserManager.initialize = function() {
    cr.ui.login.DisplayManager.initialize();
    login.AccountPickerScreen.register();
    cr.ui.Bubble.decorate($('bubble'));

    signin.ProfileBrowserProxyImpl.getInstance().initializeUserManager(
        window.location.hash);
    cr.addWebUIListener('show-error-dialog', cr.ui.UserManager.showErrorDialog);
  };

  /**
   * Shows the given screen.
   * @param {boolean} showGuest True if 'Browse as Guest' button should be
   *     displayed.
   * @param {boolean} showAddPerson True if 'Add Person' button should be
   *     displayed.
   */
  UserManager.showUserManagerScreen = function(showGuest, showAddPerson) {
    UserManager.getInstance().showScreen({id: 'account-picker', data: {}});
    // Hide control options if the user does not have the right permissions.
    const controlBar = document.querySelector('control-bar');
    controlBar.showGuest = showGuest;
    controlBar.showAddPerson = showAddPerson;

    // Disable the context menu, as the Print/Inspect element items don't
    // make sense when displayed as a widget.
    document.addEventListener('contextmenu', function(e) {
      e.preventDefault();
    });

    if (window.location.hash == '#tutorial') {
      document.querySelector('user-manager-tutorial').startTutorial();
    } else if (window.location.hash == '#create-user') {
      document.querySelector('user-manager-pages')
          .setSelectedPage('create-user-page');
    }
  };

  /**
   * Open a new browser for the given profile.
   * @param {string} profilePath The profile's path.
   */
  UserManager.launchUser = function(profilePath) {
    signin.ProfileBrowserProxyImpl.getInstance().launchUser(profilePath);
  };

  /**
   * Disables signin UI.
   */
  UserManager.disableSigninUI = function() {
    DisplayManager.disableSigninUI();
  };

  /**
   * Shows signin UI.
   * @param {string=} opt_email An optional email for signin UI.
   */
  UserManager.showSigninUI = function(opt_email) {
    DisplayManager.showSigninUI(opt_email);
  };

  /**
   * Shows sign-in error bubble.
   * @param {number} loginAttempts Number of login attempts tried.
   * @param {string} message Error message to show.
   * @param {string} link Text to use for help link.
   * @param {number} helpId Help topic Id associated with help link.
   */
  UserManager.showSignInError = function(loginAttempts, message, link, helpId) {
    DisplayManager.showSignInError(loginAttempts, message, link, helpId);
  };

  /**
   * Clears error bubble as well as optional menus that could be open.
   */
  UserManager.clearErrors = function() {
    DisplayManager.clearErrors();
  };

  /**
   * Shows the error dialog populated with the given message.
   * @param {string} message Error message to show.
   */
  UserManager.showErrorDialog = function(message) {
    document.querySelector('error-dialog').show(message);
  };

  // Export
  return {UserManager: UserManager};
});

// Alias to Oobe for use in src/ui/login/account_picker/user_pod_row.js
const Oobe = cr.ui.UserManager;

// Allow selection events on components with editable text (password field)
// bug (http://code.google.com/p/chromium/issues/detail?id=125863)
disableTextSelectAndDrag(function(e) {
  const src = e.target;
  return src instanceof HTMLTextAreaElement ||
      src instanceof HTMLInputElement && /text|password|search/.test(src.type);
});

document.addEventListener('DOMContentLoaded', cr.ui.UserManager.initialize);

document.addEventListener('change-page', cr.ui.UserManager.onPageChanged_);
<link rel="import" href="chrome://resources/html/polymer.html">

<link rel="import" href="/create_profile.html">
<link rel="import" href="chrome://resources/cr_elements/cr_view_manager/cr_view_manager.html">

<dom-module id="user-manager-pages">
  <template>
    <style>
      cr-view-manager {
        display: block;
        height: 100%;
      }

      div.active[slot='view'],
      div.closing[slot='view'] {
        align-items: center;
        display: flex;
        justify-content: center;
      }
    </style>
    <cr-view-manager id="animatedPages" role="main">
      <div id="create-user-page" slot="view" on-keydown="stopPropagation_">
        <template is="dom-if" if="[[shouldShowCreateProfile_(selectedPage_)]]"
            restamp>
          <create-profile></create-profile>
        </template>
      </div>
      <div id="user-pods-page" slot="view">
          <slot></slot>
      </div>
    </cr-view-manager>
  </template>
  <script src="user_manager_pages.js"></script>
</dom-module>
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview 'user-manager-pages' is the element that controls paging in the
 * user manager screen.
 */
Polymer({
  is: 'user-manager-pages',

  properties: {
    /**
     * ID of the currently selected page.
     * @private
     */
    selectedPage_: String,

    /**
     * Data passed to the currently selected page.
     * @private {?Object}
     */
    pageData_: {type: Object, value: null}
  },

  listeners: {'change-page': 'onChangePage_'},

  /** @override */
  attached: function() {
    this.setSelectedPage('user-pods-page');
  },

  /**
   * Handler for the change-page event.
   * @param {Event} e The event containing ID of the page that is to be selected
   *     and the optional data to be passed to the page.
   * @private
   */
  onChangePage_: function(e) {
    this.setSelectedPage(e.detail.page, e.detail.data);
  },

  /**
   * Sets the selected page.
   * @param {string} pageId ID of the page that is to be selected.
   * @param {Object=} opt_pageData Optional data to be passed to the page.
   */
  setSelectedPage: function(pageId, opt_pageData) {
    this.pageData_ = opt_pageData || null;
    this.selectedPage_ = pageId;
    /** @type {CrViewManagerElement} */ (this.$.animatedPages)
        .switchView(this.selectedPage_);
  },

  /**
   * This is to prevent events from propagating to the document element, which
   * erroneously triggers user-pod selections.
   *
   * TODO(tangltom): re-examine if its necessary for user_pod_row.js to bind
   * listeners on the entire document element.
   *
   * @param {!Event} e
   * @private
   */
  stopPropagation_: function(e) {
    e.stopPropagation();
  },

  /** @return {boolean} */
  shouldShowCreateProfile_: function() {
    return this.selectedPage_ == 'create-user-page';
  }
});
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">

<dom-module id="shared-styles">
  <template>
    <style>
      html,
      :host {
        --error-color: var(--google-red-700);
        --page-width: 624px;
        --title-icon-color: var(--paper-grey-500);
        --user-manager-separator-line: 1px solid rgba(0, 0, 0, .12);
      }

      @media (prefers-color-scheme: dark) {
        html,
        :host {
          --error-color: var(--google-red-refresh-300);
          --user-manager-separator-line: var(--cr-separator-line);
        }
      }

      a,
      a:active,
      a:hover,
      a:visited {
        color: var(--cr-link-color);
        cursor: pointer;
        text-decoration: none;
      }

      .product-logo {
        content: -webkit-image-set(
            url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAWCAYAAADQIfLaAAAI90lEQVR4Xu3Ya4we5X2H4ft5Zt7Dno822BhsE2MXkjaYAkFtKXaElMoEJYrSGMgBpHA0iUNSaONQBam0IW1KA0lwW6omUIyCkOsWoRwIpyiOQ+RianAN2MVgDF7Ah/Xafnf3fd+Zef79fXik3Xe3K0EjVD7sLV2SZ+aZ552ZZ6TR2l1w9VOEYFTbq/R2t5GRkCQO51x3ltmlRbBVjdzOCIEBA+/Mjiap2+PhiTRx3zdnQ2ZQ5BDMqNWNRg7eEYO2/tPY87MbGPqP7zG92VJiJs5B6hxZwZ80s+Kv6lmoFAU4B2aCMuspMk5xuJWJd7dWy259pexuCs7GCPwmzS6CExwDjaz48WiDc1HeOzwQiBkEcWJAXhjHxmxNJeOP2yv+Aud5wXinzeaLIqcoCpz3g2P14te18exc74zEu7gwohziaCnxIvWGzamNF8943JmO37iyLJZ23hs5WSadvEulpXKFkOfkWfZgwC9JcGABi0/cOygCeuMDeYD2akKaOO0zgoGJOWO0adXC7CGNOUtjDzsHDrBQELoSkkovb7MFsl5ulS38/3ee/Kv8tdzJu1D6vg/+Fm1l/8Vdzzy/cnS0TntHlRAM7wznPS8NZTgKPrCwTDmF/95XY2Q0MG+wSslDVhhmRiL1MTulUknuOPe06meTxKF5SNJ2ksoRHtq/mbeZSS6B90ZvyCbZybtUWvZUOvs7/mz+4nn819YXqbRX8QSyzPHC63UuuaCTtR8fYKC3gvPQHKuz+em3eOCJYeb0lejsKJOkKYLzCaVy8pmTTmj/Wy3CsyEYHV29HBjay/1DW3mbBWny3mmvfIF3MR/wq4+PZCedsGgBg3O7OHbwMD5NeH7vKOs+1csda5fw6Cs9XLsh4cp7Eu7Y0stFq07nW19aStfAIAsWnsgpp57IyQvncsrCQU6c10dI2y4LaSdW6qT7hCo/f+QBmo1xpvRR+Y7cLVdJuyi8jMtIHPMD+aacyUQr5Xzpk9vkTukWxaq4fbesjWOYdGy5zCP+dtynWCLflu/L5ZKIokMuk0Wi+ISsoLVl8jlRDMhqaYv77pObpVcUV8o98Z6WCt58cn4oCpo5LP7tpSRFk92vjHDxeV18afUiLl3f4NaNYwwdLjh4tOCHm8c4e90Ype5+PvnhQUaaZVxSQvNgSYJLy/hS+cNpOcGnKZ290N7F1P5c1snL8pR8XO6XNjkqB+Qa+SN5TPriA1oqirNljdwii+V1OSY3yNflNfmlrIwPtV8UH4rH/1R2yatynVwrX5U35Wm5etLb3xYXc5kQF+QjtHZGvF7itX5GbpfT5WdyltwY7/kP5BGZK38nK9LE87tmMH58nJ45fcxfcjIvPL6LNR9bxn2/hi0v5vzeaZ56DphmW+jZvs+4+cEG//C5hGf3eUhSSqnDnMOJOsN7+ittpeGDb8D2p37FpC6KrpHnRPFT+Wa80d0yT/bIzaJ4QO6VT8RxL8mq+MHcKIoL5RK5XrYJcWHvka/Fh/CKnCf/Iv8piqvkujjmp6I4FB/kXVKL59WEuMAHaO247BXFmFjc/htRbJH18d6uEMXDcp9ckIZgnd57MGPseMGcUxfz/n1v0dPu+OXWggX90MjBDJB6BosG4aU3jf0jsGh+iT0HEiqJYQbBDNUWAv1pieFDbw6ze8dTTOpCeVyem/Lxu1wUC6USH0iMIj74XlH0x+2NTPQR+blsm3LeP8lXpEs6ZWdcgBiHZIc8xkT7JJNuqYlnIsf0XKRIxKbMt18OyqNMVJMhKdJgKOUczUaTUkcbi04/leZ4HbMeAjEDIyJmImaGBWsZmxWBZgZZHphSh+xi5pwUMk5rXpqiKE0/Tq88y/QOiEnvDB/9ijQkZ6JEguQzXl9rxfTjNKb8hpM6rXkJHqhhhhngHMV4g7HyHJL2ds5ZlPHaIUc5AedQUC0ZrxyEU+c4Th6AoSPoOFjrazJuwYYtgJmBMbm35HdozcnJoijidjJtzERh+nFelw8wvaWTjpfEMz1Pa46Zq0hCaz2T5jDxM1y/Z3rO54VtQ2EWFSSJ59+fq3LVyoIPvQ827zaGR42jY8a2l6Gt5PjGatj1huPwqKeUGEYMh5ntNJ2C8t6TpGUm9aCcLZ8nFrc3yR/KIfHiZrqJGY5vlA/K1Uy0TG6UJ8SkQzyxmeaK+Sm/m4piv6yQvkmLfJkcnjLe0dLM+3zIi80GRARzzO0OPLoDNm31bPoy3HQRDHZBXwdc8vsJW27x1EbqPPZ8Qn8HBCMW5wj2pMMYH62zcOkAKy6+kkntkFvl03Kv3CXfkn+TX8iAnCAVWuuLFN0yh9Z2xnlXywb5rvyjPBn/TZy7n9Y64lyOiapyonhRzJVOUfyzNGVDvPYvyzPSI07SeG6ZiXyco53WBqXX583GAyHY63iPgYjBwjnGXY/CnT9xXHG+Z8M1jh+u8az7KNz7o8P8/ePGvMEyzhmGUg6HmRFCuN+AoijIGvD+c1YwpYflCnlEtsUb+YYohuP2Dlr7XqR4UP6S6f1YLpcfxY/vTXILE90tt9PaT+IYIxbP/YrUJJMbZasohuQ6uUeeldvinN8WkzdkrexmolH5qmyhtb+Qu92nbz9EWk6/WG2vfqcoAjG8Q8Frw1DysGy+o1J2PLF1mN5qzvWfXMCRWk4RrOX/wou82IDZZ3EORaWtqn1H+MLFizh25BjTm80XeU69NvrdZiP7hU9TFBgU0YI+6O+CVw87drwa6C5nXHphP/UCsnzSAnhPnhf7QhFuwDliJAnUjhU064H/vdk8GDjH+OjYp/Jmc69LUgJgJlIE8EBfhycbH2P5kgqDg+0crWV4Dxh47wl5Uc+z7GM4d9g53kGzecE5h4O3xo+Pnqu/D7Z7n+CcBwNDOThWD3SVc85c1sNILeAB7xzOe7IsP9BsNJfj3PZ3vgCzeWLOe9TBeq22vD469rWiKDLtw4tPS9SO1znrtCpd3VWajUDiPHkRaNQb62Ux8KLD8c6bLWVSLr7ZRZ7dJuu9Ty5PS+mq0cyfMb8r71lyUqcdHG6O6M3fE4I9WeT5D8Dtd86jc/m/Ndv/AOSYkBCb8OyBAAAAAElFTkSuQmCC) 1x,
            url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAAAsCAYAAAA3r2fDAAAVTElEQVR4Xu2dCZBd1Xnnf9859229t7YWWtCCFiyQMQG8QAIYJ4CN8CSxEyeOK9hkHJcTe8bO1MTrTMapTHkh47JxDQ5ObA/jZcbLTNUElAA2i3EgEGzMKlZZC5JarVa3Wnr99nvONy70Vc3r1uvXTwWmxdT7VX119a7Ou/cs3/9837nndrec974naCYqDOZS8hnI5bKoOKoNxYmQzzryOcexUkBV6e/xOYFLG0HfkAY9N0RWq7JShAKAKiGqHhbYl0lkh3fyYCPoPzVSfS5GiEDiIA1KLusoVwMZ7zhWDtQbinOcFOISMoXFPP6dbRT3308ndOmiqiSdFwYA7yCfdRc30vjuci2+pd7QkTQoaVQAYgC18iIg6JDABkQudV7IeMh4+ZFP5FsifDMNWonKgtKlS0IHRIWsh8TLZZVa/Hi1Ht9UT5VGqubsgncCgBcTTrOA7JgGPT7TwyWJd5fksvKX3vOFXCKfVQXlFKVLVwiqkE3oz2fdl0rVeE21HkEU74TEy0xnBxBAaYkXcPadNCq1clye8fKZQs5dm0/4N1LjtoWIDl26uHYCUIVCVi518HSxEq6ppUrihcQ5XixOIPFCUDhaCpuOleKt2cR9LptAjCw8XbpCUAWb8a8t18Jdv7DTNCh+VmkR5kROUhDlaqRUDf9ehFsSD+FlDA1dujhEMENEUASAfFY+WK2lXy1VUrwDxBTyS8GiQ1Amp8NVPXl3byEnL5sYunRxGiPHTQkxgio9OfcHtUa8vlqPtghWIKKqdIpy8jgnaIRyLV441JvcWch5GkHpGI2Iy+B8jpeYPuBVwFnAMlrR5TXAbwNDvAJxlSMTvGCT40wfPsxQpvJq7/SbpVrEOQUUjYCCLRxQFF7iACFgYoAYoVSNbyxk5YbECZ0GBnEZQr1IozLBS8wm4K+A64ArmU2Xi4G/AK4FPgEM8wojGVnay3EETeuSceH2Si3gAY0goiAYgqItFwfaMhR0XkZRaBJDPVVEeH9fwW0/Vg7bEWE+XKaH2vR+qpPP8hKTAseAOlBjNl1+DagCTwBbgS3AvbyCSDZtXY8A4hMypH+742fPjNQbKblsMiMVUkBEUUBUTtgnECAi1NPjewVRwXshkzi8E+IsITS7flTsXqBNQinVlELefTdJGCpXQ8M7oR0qfVSPjqKxwUuMAsEsMpsuDwMXmghGgZ28wkhSyRGikkPPHFg6/EeLlw2z+9l9ZJcsQWNERREEcE3OGgEBEZwTqg1ldKKBhsDSQc+Sfo8TqNRSJqdqlMop/X2ZF0zVUi1DAQdoVBATmCooOIVYk56Cl8+RhA8LwlwoSn9vQmnqMVQjLytdtltEOAO4FTjIK4yEGJGoJEnyxVIlsmLDGiYOjFE+VqRnoB/ViDkniAICCs4pimP3wTqFTOStr+vl0nN6OWtNjlVLEhIHU6XAntEqO3Ye5cHHJ9k7OsWSRXl6ch4FxAkiDhFBBOzJFc674+YcqkI26z/U21/4KxU30W5hMrK6wA0//ikLQpc7zF6RJIQ6ucStS1zm8lq1Tt9gnlWb1vHEA4+SFnL4JINGRRygiqriPdRSYddohTe9Js+H376Mczb1AQkQCCGSBli82P3CBvmVs5fzrm0Vbr7nELf98zg+4xkeyBBVMMcnyXic93h//Oic4MSZ7pR8LvNh590nNdKSfM8gabXIM4/cxcnSpUvivcdnkvcpDkekXKyzbM0qxvcd5OCBwwwuWwbOE23hLE6pp7BrtMr73jLEJ9+zGkg4NFXjfz/Y4PH9MF6ENEB/HtYthUtfBZdsyXL1G9ewcU0/X7t5lGM1z5LhHM45XJKYABwigioIICKWN0Gq8t6MuE9GoQXK4NKE++94kGNHj9ABI8BGYBGQASrAfuCRk3wtZR1wJtAL1IAx4CEgneN7/YC3skU7v9xy6xxQsjpMMpOlwCZgsdW3aunHDqBCa7J2PwHKZgCbzApWh6eBXZzIZmC9ta1uuf+DtMYDA4Cztk1j2PfzgNr9GsxNv9U7AseAAGB908dxyk1tfpWNY87K7wCe50S22FgVrH4HgBmpQxIVcO53oyoAhECIcPqZG5g8NEm1WCTX1w/eo6oIys79Nd775sFfiGAtEPjOfRVuvAsOHoX+AvRmAYGxY/Dgbvjeg3D5WXU+9bYGZ64f5P1vc/z3O4okhRz5rEMxBAQBQJwJwT47J8uc9xeJ515mEaPQPwwP33cz89AL/D5wLjBkTiXW4VUTw/8B/qXNgO/jOO8HXgsMAqlZNAe9CXiMmawE/tyc+e+AHwLvAN5kDuBsoD7SJIQc8E7gPKuv9SzRBvQQcBewnRM5B/gTu8angGeADwLn2/3qQDSnuhf4b0Cw+1xr3+8DAmbmZF8G9jKT5VbvRcCPgRsxgN8ErrT7/BcT3ly82/p0HPiMtQ8798cmpk8CB60t5zYJNdg97ga+gU0g1pazgZ5Zbfk5cINdi0TFbxSRdWpCQIRqqcrA0iFWnnE6P39yF5lsFsnmcEnC82N1Xrspx1/869OByA23N/j8rbByEZy5AmKEaJfSHCzug0YKf/8zeG5M+fof11i3qpc3XwD/8FCNQl4QBBFQOzoBnCAiiAoWHvCJ3+a8u1cjMyj05hndU+aBu77PnNhg2bFqM9O4HQds1loB/Dtz5H/gRIrmKO8B3mYzy04TyDBQMWF8zJ6rP4vR5OiJ/fsK4F3AtNVhCfAo8BSAOdVHgdNtFgw2aFWgz2yROc8ZwPUtRNsDVOz/LwN+C3jOZveCtbsEbLPj7cCHTCzjFimctbkKrLC2fQKYbNG2HhNrMxk7b+XakrWyeRO8QWLnJywKvB24yvp3P9Bj4q7YuEwB99nEcxYw1twWK7fO/OE/AsUkm0suRkGbtwcEqtXwwsL58Og41UqNHJCqkIbIx945AmS5/eEyX7gNNiyHQgZCBFVmEBW8g7NXwRMH4BPfU/7mj1Jee2aWpw4Exkue/rxgIsQJTa98YCJxIOC8vM47QYUZLF0O2799B5OH9jEHPdYpw0DZHOpWc4oaMGKzziU2wO+24/3M5IiVWQv8yMSyB/DmbG81ITSA3wX+M0bT7HsUeB2wBhi3AdsNDNlRgazVd7kJ5Yg56ZPmsMM2G/6GOcevWbmvYQDByo6Z6FYD3wXutJm2167xFmCPtX+LOdojwN9b/wiw1kSkJtirgZtatK0M1JlJoymdibSnbmWrdi+D1Np32ES7EviWjcGETQoXWDt32RhdYM7+E+BmO2/jZG2BVdb+7ySqulVFTtgprr+wcC6wcsMannroSTKFLGOHSvzqq4e4YOsQ1VqNL98JSwagkMH2AubePEsjbF4OP3gCbvlJZNv5nrNPz/DDJ5QkcSiCsyiAmUUKUyiIsAXBzexQJVeAfbsfow1vt84rWni/zjrcYNKc7KDN9oPA7wE/M6EYiDnCU8BnZw36mM1Q/8ny1XXmQLuZSWpO6WwWf5gT+U3Lz4+a0/61icHgiIX2x20GP2zpx0MtrueszncDX551jX1AYo4xbvXab/ebwLA6HAD+AzBlYsktwOait9TyH4GvzmrL8xZJLgcmre932VgXZ43TYYsG0zZOJImTjSEqIkIzIkJ5usHImlWM7x9jYqJIsey4cEsPkOGHj5d57hCcMTK/COyAoPTl4JZHYdv5yoYRx0/3AD4hceBMAAYgiChRMaEyojACjGKIOOo1mBibMxosBl5vnRWAzwNlWnObzdTYzBlahPnUcss6JzIO3GtOCbCqhRC8pRE3ziGCfuAiq69aXn2E1jxtUeCDNuNe3uKaBXPqr9Caey2yiLXve1Z+NvuAHRZFBiyK7uXlpdcE+VVa80/AG5smrW+bCGbzjNlrbDxwaRp6vPe0IoYUnGP1xnUQI/lE2LymB1AeeR6cA9qIYDZRYVEf/PwQHDqiDAwKi/o9AY/3DvFupg4wETThhEVOwIwkyVApwvM754wIZ1va0WuzYpH2fMXsOSBlJoOWNhxgbkatcwXIzeHoz9qgtWKLibcA3ANM0p4HLUKltp5YykyG7AlJldZM2yw/YHV/iLmZBBKzPC8/g9beSGuKFkUHLN17ZJ62ZAAH4NKmHV1lJiJCpVRj+LQlLFu5HAlVlg5nAWVyGnIJxHlEoNjR1JJJYLoG+22Oy2ebrqGKKm0JkXyI8P9MCQreZ9pFBIAAPMOLI9fBrmnaFEniHOuVffMs6h2gJph5sXbl7NorWkSgCeZGzXJWrjJfWbPIy48DDtOeaCI93GEdFSDRljN6M5F6Q1m5cQ1794zTqDXMZ2elPh2IQM1Qs3nQFifSGGlGJZJGD8JcJNYhVaDIi6BDB3C8OPJ2jzowTWcUAbF79zAT7aC+0uGoOH65KC8OMdMOyxpYdqOYnSh9EGrlKv3D/QyvOI0DY9OAY1EfVFNAOhOBQdqAvhysGAKAegpOsLLMj2oVVWZa26ZHq6UHMrx4HC8Onecaoam+CZ2RaeqBlBMROkMW2NG1gzq4X0ZbEpf4ctSAgWqLmolQq6b0L1/BoekpoM45q4Vv36+grQUAtHh7FSam4Q0bYWQxTBfhWFXI+Jb3bXlCRCYx7DMioChzUALEcu7TgKc5tZmyY9bSpMeYnxUmoDowyamFdB5NKQCBBSAJIT6bcQ6lPbFRZ3CowO6SAlV+fWuWDT9SDh2FkUGI2k4EdoxQrMG2cwSA3RNQrDkGC8p8iAghxoMh6JgIBohCCJCmDebA9gpI7WnM3bRnIzAM/AsLw7OWp6s97foB7Rmwpx8Ny4v3cmphEZk8UGBuFgHrgWkWABdVHrMMoz0iDGQDj41m2bHbU8jBn1wmHCpCpQEiwFxrAsALPDUKv7EFrj5fICrPHXJkvACdRQNVnlTVqKqYERp1enph9fqz2znWc0ACbAbeOs/O5odtR/fjQD8vP3uaFr8bgN+iPe8F8iaIh4DGKRjhHKDA+fPs9fQBdRaAJG2k9yQ+QZxD51GDE0WBb9zv+PTayJXnwp+NwXW3wqphZXEfhDjTmZ1AI4UnD8KWFfDpdzhAeWSXsv+oZ6DQSRJp4tJ4v226zTifK8CiZatpw/eBT1na8NtA1naFyxjmdH/QtFeQA+osDP/LZvmjwL+yuvyjfTZYac6zFYjAfmvTqcYO68cpi8j77D0rbZp8rrY9kIOAsgA4DemzGnWXCPOiCssH4ZE98LU7BYAPXAmf/h1wAjsOwOhROFqF6SpMFOHZg7B3Aq4+F/7nB4TFA46de6rcu1Mo5ByCdrR8iqqocos4AcEMxAn1Gqxafw5teBr4OrDMZsxtNuO/B/hDiwJ/Bqxuerz510CNhWEn8LfAYhPllfaOz3utvh8A/tzEIoACXwTKnHrsBh6wzcVjwDutLdeYfcTatcP2Q3oXRggIaRq+I3SGAqcNwfd/AjfdLQC88yL47p8KH7pCuGAdLOuH4R7YuBze8Tq44Rrh+ms8/T1Z7vnpFDfd06Cvr0DWR7SDlAgEVcaA+1CYbVMTcPYFF9PbP0wbbgO+BNSb0o63mCheb+uCHhuQv5z1qDVvIlkDDNGePuB0K9s3K+1aZecXMz93AV8AKnb/tcDlVt+LTdR5E+2nWuxg9zTVY4C5ccBpVnaE9iyy6622PjTIACvbtO0m4FG7h70+zVX2gtyFwOMm5AngHLtWgmHisLa0TVc9sMLKLaU9i61PR2wfIZLWw40hm3xUvEdjRNrk7KqQSWBkEP7HA7B3QnjXr8K6EeUDlwMI1QqkAfp6AXGAEEPkyzdPcsfPSmx74ypyXqk3OnuupqrEEG5kDkrH6qxcN8DGrRfx8H230IYf2YBcAqw3p06afpbgEeCfOZG9wH+1sk/TnidsUMUG2GDcdqxz5rSdcJ9d41LgDBOr1ZdxE+3dtOY5E763Os1FDfimiWW8A3Hutag6OmuX9u+AwhyL9bJNLm8GtjT1e9H68xarx5MWiYvNaaCdvx5w8+wWT5vo+qx+7bjdIu9BAPnDLx0lRiWT8bdmc5krYox0iiocmIKBPFy4Cc5bC+uXKiMDIA6KFWHXociju+rc/XjK/Y8e4d1XLeVVG4Y5PFXDicwtAjuJCCEENOpi7/2koi2FsnZznm98/m/4+nXvp3PI2oBUgcipTxbwFtUCr1xy1o7yKfNr4RVBnNCoNz7kvTx5PCoonbJqGKoNuO1R+MFjsLhPGCiAc1BpCKNjNY4VG1QqNa44v5ezNgwyfrTRkQhUAFVi1M8niZ8UEVohKpSLsOW8X+ckqZu9Uqjz/wc1TjGSeqkEAjHoUyJ8raev99pAoFOiQjY5vm6IEeopHDwKKoIn0pdTck5Is4FXb170gjhQBZlHBIAgNNK07EQ+KiJtn2oVj8KKtWtZtGyV/VxC53TpIr933Vjzr7/2hf7ew5lcbiiGQHva7waLc8RGg7RW4+ChEq8/M8cbfmWEQ0fquE5E4ITQCIQQt2Vzme3zPtr1GYaWCB/9/cvY8dBddOlyUqmROA+ACIQQQ7VcvdL75H7xjhgi0uF7QDr7QwTVyLFSg6X9ytaNgxwrB6QTEYgQQySEcEMmm9lOB2hMKfRkWL1h60kLoUuXJMn3YOAFNMYHKqXy+/I9hRvtKRKz0Y4UocSglKerXHRePz19ecan6jiZXwSqSr3WuDPJ+D8VJx2tWTRGMhkYXLSck6VLl0ScYCCAJgm1cvhKZXp6Uc/AwKctMnQYDgwRFGXySJV1Iwmb1g8wWUw7EgFAo964L5NN3uRPZuEuQoxQr1U4Wbp0cahihtrReU8M4TPlY8V/GxoB5z0z0GY78TQi1BsRbVQ5Z3M/+IQQQutr2MHZKx6VUuUW591FSZKgqiwoXbp/Osp5T5qG6yvF4ra0Wpty4hBxoBgtfRpEEIHJyRKbV2c5fWU/Uy9EA2kdQew33TUaKfVq/XOqXG2iYKHp0hWCicEBbK+USpur5fL3YwiI9+AcCmYzEYFKJaXg6rx64wDVBqB6omJEEO+IMVIt156uVWpXOO8+kiT+1BNBl+5f1RQRRNyhRr3xO6GRXuWzmY8n2eyFPvGgoKooCmoqQDhypMQFZ+RZsqSH8SMNnACKXUtQIIRAWktHY4hfBD57XHSCamRB6dIVQifRIa3Xtqe12pUuSd6VyWbfKt73izjEOUSE4nSd5YPC1k0DlGpC4h0AqkoIkRAjIQ13a4zfUuWbPnFV7zyNNOWUp0tXCM1rh9BIb21Ua7fGNAyLyGXi3OtF3GsU1pWLlWXnnplFVJmamg5O5HBUfV5Vd8QYfyIiP3YiO8U5vBPUFukLSZcu/xd8CDPlW+bFZAAAAABJRU5ErkJggg==) 2x);
        height: 22px;
      }

      @media (prefers-color-scheme: dark) {
        .product-logo {
          content: -webkit-image-set(
              url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKsAAAAgCAYAAABtn4gCAAAH9UlEQVR4Ae3cfVAU9x3Hcf/pH20n09J2pv91pjed6bTTSSdDH9KI4YFDo8bGP2IziQkV0COeeIIPOW06k9axBAuIoOKdIg+FxpaYGGOM1VNApSWDVzCccAfGhIoKctxx3O3uSZLx0+/Kbuc3x+3CBTki/e3Me2CWvWVdXvPzt3sPCwA8FPF4//smlmXJtt7vpG3x/DClwPNYcr7nZ6kFnkeTC9zfT8zt/nos+wHA4z14rMu29/18+Y6+6qd39A1nbO1F6mYPCClSlJLz3TBu8YAg9y7e1rszyeL+LsfKiyvWpdt7f7Di1b7TT1n7YNzqQTqBTCOoKlY5FeuTm9xYJGdxy9uEM7b1ltJo+zWOlTfrWJdZe9Yt3+4RCR1oNGWwqmC1scolUTTaXkvN9/yUY+XNGtYVr7gKl2zpRsaWHoLqYbFS08e6cKNb3maM5rRps4BVXRbM4xIoK5XIsUbBuqSg83eLC7qQke9CxuarMBLYmWB9Iq9H/tkYff8YxxpzVkwsjoj1HOvK7a6lxo0dn6VbOmHM76JcMG6WR1h3TNOApAisv6Jom09oDvsIxxpTqzCxFDHrONbf7L7zVbPNL6Wb25G+sQPpliswbpLBXkX65h4aYad9gcVCVbBSG3qQku+p4Fh5M8aaaw8e3VATxrOvEqr1l5GW14k0Apu2yYX0gm6kFfTch5pZ2Iea926itXMYPde8QlvHrU8b3v0onF/UMZq7q8OfW9jpW0+ZCz/0mYtcvg27XSN5xd0jljKPt6C8b8iyt/fRaWJNoIxKhmlgNTDbJ0y1/8jHacwLZ7BfSv/4EzT2G8/0j4H9t3+ZsOZVS3dlrObDQaSZWpG83onU+2A/RKrFBSOBrTl5A6GQiK5PJDRckmA/J+KtDyT8Z0jCiD+EuhMf4fcHruIPh9zYVXMNRfX9KD46gJK/30Jp422UHRvCvhPDFXpYFTQOTF6uU4ZIrDrbF1EJUfBA+e81IeJx9ijbOjF5adTAp+7bpOzfH/E4B5WgZNc4Xq19Rs5Z1eM2TjHXtWqsN1BWrWPQOKd+yjTnWHMOji2UoW6onmh1YT8WZV9CstmJlLwrSLF04W9nB+AdlfDHYyKeKRXxa6UVJSJW7hFR2yJCEEW8eX6QUN7G3mODKH97CBXH76DiHS8h9WL/yRHYTvkGdLAmMn9kJ2VVapSxstsygP3K1yJlW7sOACOz3kn5mcetYrYzReC0KjmZP5xBY99OBphV2b9fXcf8XnuU4zXFA6t6jBrHYI9yTlm4hrnFaguVmQmpmgx2ieUyFq39J54ksPllHoiiBOvRyVCfVisWUX9RhG9UgP3UMA4QzMpTPsoP2+lR2P4RwKEzYzh8Ngj72dC3NQ5KPSn2GOasTp0RFBrr/RqPk0tQcWmMJPZIQOy+NZAYIkaoRK2r/jhhRZRjME1xTh3qPucU61qbcHr9kTDUZLDZFV4kZbVi0bo2NLcPwXFFioBKMVCXU8/sEXHTK6LpSoBQEkxHEFXnQqhuElDdLKKmJYzaC3fxl0vjP9IYVeXFH+MF1iqNn1+P8gc16owQ2nC0MbP7ME5x/A52tNfCHCesjbGeUwazY06xrrML7SpUtpU7urEw51/w+oJ4/R1tqCrWZX8WcNIpwt0fJJgS6i6GCeZ9nGqom/j6S50T3PiA7gY4tLHqnnD7NEaQRnXkjWHfDk0IVJyxWqc4hgS9+fMcTwME18uEU47FarIF8ZSlHZIkYetfGaQaUOXkuevHt0Oobx1XYqAq1V4cf0L/BMcfq87j9DHEjtX4EGBd8KXFmlUZbM+tkrFO7rk/9WMsKGLX21NDXUqduCzCMxCaBJXFeqRZepxj5Vi/ENY1laEzMtboSWjr8uL9DikSaSRUWi/gxh0RbW5BA6qCtUn68UM+DVD3bYozVo41c3+wVEapVdm7gXshQcKmOi2o1G4BVecF+AOhzxvbwoQ1OlT5AoumAd/Sv8CaU6ym2C6w4o9VY87M5py/WPeNpZgOS9CrtUfCoE+E9Y0IpPL3BLXyrICQIOJ0+6j2qHpxXL4joN5n1buCt8cR68xvXcUfq94dCxOFeYtVXnIOhsb1sJqrJTR1iRBFER/0ijh0TkDpewLqLoi4dkvEaEBAw5lhNGhAVbFWt0glX/BJAX+csLIvIFG31X9SIP5YDcx5us6eJ/XczWusmRX+t9YRSr3WHpLw+nEZ7QRQeX7q6hfw5oVRmPcPorZZnALq3c9pCmCYwdOt8cLKHof+063xx6q2Sjkn7OJXIBrmNdbnS32PZB0IfiqDnE459onW7Atgdckd7HxjGPU6UCn5LoBN/l0zeiFL/NN/Icvcl6ge3//V61lX7xl5JccuTolULZvKLPcjc88gGi6FdaFWNUkDNKp+k8E6s3j8nQIvlfvP59hEGaNm2Wo2CS+WeVFxMqALtbolLB1pDj/O34P14OJYVbB7/f9WwWZHyzZR1kEB5gND9y+q6jSgElKJRtXF/A2DsxZ/d+uLZb7jhJHBySBVyqwIoMohRIVaS1WdF/sJ6y/4u1tnPf65Ac+XDD9H92DHsg6KE0CZ1tC6HXU+1LdGHU0/oycIKgnsN/jnBsQjjpVB6936Unng5m/3B++pcNfsC6K2JXyPudkvj6Q3qGJC+j3+iSxzGv+sq5WvffyVZ3fdTKKvL7+w01P2WtX1F4obB1Mr3w/8RH4KlX/W1azHsfJ4HCuP94D6L6gxcmLEfFJbAAAAAElFTkSuQmCC) 1x,
              url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVYAAABACAYAAABBV1+xAAAR50lEQVR4Ae3da1BUZ5rA8dmpnZlN1U7t8ml3PqWK2dmPW7VL7dbm4gXsjMbE6Eyi8QIiaBqNRsUL4EVyGZPBKIKAQHMRTDQqMRPvUdu7go5pAUHutqjIBRr6fhpMavPs8/YhL3gGOv32Qds+PqfqX82MDedw0v3j7fd0n/MzAKAoiqLGsBDbYIqiKIKVoiiKYH0cy6spzc9hE6ZtaF76+vrm9Dc2NH+Jt8dfX9d8Ydr65nL8+gx+fQi/Lpqa0rxu6rrmWRMTG55/HNsCABRFUaEJ66TVjb+Zvqll3YxNLVexgSlJTRC5qlEucaiJg01Y2eBt/IoGmIi3ryY3AYLbhuDu1q1pmhSRUPd3BCtFUc8krFNTmsa/mdpinL6h5XvdmkZAYCFqlVwkb1RYOa6scYNF4c9gyOKo9338eb8mWCmKeiZgxRHpC2990HLttXXNwECVUeWwyvmAFRsFVmy53AT8GnG1Tklp/ghHsL8iWCmK0iSsCGHYH1ObS97Y0PLDK2uaAFPCiqmAVYHryxj7N5yLNeMUwRSClaIoTcH6alLj+D9san7we0T0lbVNoIQV8wUrTxRW1kvvNbCfx+Zis3H0+guClaKokId1+rqGlGnrGr57ZXU9YtowHFaWT1h5vmHFfMPKevm9esB5XRP+f/8SYrCGYbphRdADkqKeYVhnpNTtmJqEoK6uw+pBtxph5aPWJwvri8vqvU1OamrF+/8uhGDVwaOLkR6Qmoj+SFLCsCKqt0qnrLoFryRi7FbGFTGVcQ0WrC9guP4u/J5/J1ipIBSGmWBoMfj1fRTB+tqamq2TE2vglZVYYi3oBnHVrWKj1uDDirF1t+K//yvBSj3h9JhyCff5PRTBOnlF5eIpidUwaUU16FbcBB3iOgRrHcJaj7eIKyIaPFixpfXw+6SmavZ2LIL1CUYlY8pFN+r9KYI1cvG1/3htdXX/pPcqYdJyxFWGFauVS/TiymEd+3cFiMH6IobzvbkE6xOMioBHFysWprgPRbDykeovp666YY5adgMQVqyK4YohritqfoQVY7DKo1bd6jF+H+tyMVhZ7D74M6cRrE8waiZmxMroAJbPCFZ9rs04PekmRC01gQJXGVZsknfkKuM6SZ5vxZSoPllY/xebtKrxPk4JPEewUhT11MA6P9Pyn4m7+3/Q51hgwjvlELn0BuLqhRWrhih5WgBhrcFuwaTEOoyB1iAnPL/qG9aXhWDluH5MsFIU9dTA+m6h6+bSkn5Yhr25rgZxreC4RiGuUcur+Jxr1IpajmuUF1dWw6Oj1cQGeCOlDtbntUDuwbuw/1QbHL94z3bIeMdT/FWzY2NOjSU29duOmE0mb9GbbuAttrESbys7ojfeYLVHb6xsj07FNlW2x2yqehCTWvUg2lt12zwsOvVmW/T71W0xH9Tcj99ce3dGUtXzBCtFUUGHNSaj77crP+sHBitrSYEDohZdhAl6hmsl4lrlxTXSO3JlsNZgtdgtiFpZj7iyZFjZ7bL0Jjhd0QEulwQej2fU2rvscPhMK2zIrII16ZWQtL0akjOqISWzGtZl1cCGnFpYn3MLNubWQWpePbxvwAoa4cOiZvhoVwtsLjXDJ5+3Qtqee7Bl731Iw7YfaMt8TLBGYDOxZEU6LGwMYA0f4efrsQi1n/TycT/l+mYKrEP99opvc8RI+19ge/Xi/+1Uf5IuXHHf8AD/MPNCZD8SrAkFrjNLd3FYvc39020YF3cBJiRcYyNXrBIiGbCDuEYur4VIL6zyqDUSgZ2xvg6OX+kAJaAS1tXngbZuD9idfwtst8UBuw+1wIZBTDfuvAWbGKb5DFOEtBAhLW6Gj3ebIe3zu/Dpvvuwdf8D2Hag3Vt6WQds/xI72AHZh7r7tux78MsxgjUMS8bM8NOLCdOLwsoPgvhezJhexQg5YoTfyTry7zAm+8M6eL8wFdusU7xv1PwT60sbZX16zAS+lzIsXM0rEIG3ZiWLPw6VS0jsR4J1eYlngMHK804JeGDykgoYF39pCFecFpi4rBpHrjexGo5rJE4LxG6ug9Y2G8eSAXrE5IH1+yV4K1OCN9Llpm2T4J1CCbJPSlB//1FgjVfbYFNeHXyAmH6EmG4uuY2QtsJWhDS9rF3GE8v8qhMyDnbhLfaXbtjxdQ9kYTsO4e3hHsg93jtTHawcPCuILUbBJ6IBxBYTFqYCqXDMJL79fJRjBrHFis0MECs9FoaViewf/sQW+16+rVqANQT2o/ZhXZjnmL2sRAZVWVxGJ4xbcBFxvQzj9X+FiUsZrFUc14kI60SENebDOujodnAgL97yQGyeBNNlTIejynt9sC2HJeixDY5sJQnOmzrxZf1d2I6QZjBED3YySLEuBLQbsliHZEizD1u85RzB26N4e6wXdh7rg4KTtsMqYdVDAIvgiNUwygPayPKBulEFUlbwvSQHsD+MfmyzPoBtTh7hCW3l6xoVeT7qNvrYVpMPFMI1AGsI7EeNw5pQ6D77LiLqTQHrMmza2kovrOMWXoEJi68jqpUwYRDXiThqxY++QsOdPo5q8TkZVGxUWF8f3lYJ4gwS3OmQEFa5I1e6EM4hSLMPDSJ6hNULOUcR0KN9DFEcnfZB3gkr3lrx1gb539ih6LTdVnrp4c9VzKWOtBgwnfK+igdumJ8PdqufL/N1ozx4dQE8uYwjvGxL9mP+LkIJph/brFwXKEYxovvIOMo8Zvgo6zIptnWkdYdhaZhyMWgA1hDYjxqHdWmxx8pAHa2EXCuMX3iRwYqVw/iE6zBhaRXiymC9CZ+fuMdR3XPZ4wtV3jBUefPzJGi3yLBaHW4oONblHYnuZIjiSDT3WB/2I6By+SdtmB0Mp+xQcMoBBaedUMgyuqD0vPRCgDvKPMIDU+0bwHU+RnthfsxrmpUoqnhymQQ/fmkKcDrC4OvTSQL7yCC0jeLbqkTBGgqwamQ/ahPW+bmeny8r7f9hSXE/YKPiOiu1UYZ1EcK6qILjOntjDTid8pH/G7c9MCNAVF8bbMOBoVHrtTociR4bBPQbG2aXEcUQUQQUITUioljRGRfmhuKzbtiFI+Zd5z1QesGzZoymAJSoqodVCY34dlnF1yeCIk+v8iWeUYmK4DabsTAVUzf+bGuY+H/z4MOqkf2oTVjjcl3Pv8tQVaSEdkmRGyYuLoeX46/Ay4jruHcQ18UmKDkyNFpdvlsAVUyJKmvqp24ob5BhdTrdUHiyjwHKK5IRRUBZCKkXURnSEqz0Yj82ALsvDcCe8odFAeykMtG/8ipgTQvCqCVC5f5IU/l7mwXuq0BI+EldpuIPgC4EYNXCftQqrA4dA9Sfore0DYP1KnYNbt+zelGtMntkUIVQxRSoYjhqdfNR68nrNihGSHd5R6IsCQGV2GgUShiiGCKKPYTPLj+E3cNCWC+MwQM44jHCqlM5RaETXJ8hCPtDZLt1KtcHKgAzKL9XA7CGwH7U7og1xl9Y2cGsKe+Z4KX4cnhpYQW8mWTio9WCswGjqoQV7+MGq0OGtbLZASWIaClLRhQBZT0EZUpYP7/ysFUtfr7uH4SfbVQJqyiKOpHpB4FRb/Lj2Ecq/3AlawbW4O9HgnXBTueSxX7CylqYbYGX4tio9SqsTL/FYU3ZpxpV3qtYpVmG1dzuZJAyJIfnC1XeZ1ceWlTOrxofI6zWIMD6syDtj2QfI2cV+4hgfVr3I8Ga61rNYOX9BKzvYtNT6nHUWgEfFDZxWBOKOaiqUWWdrZVhbe9xMTQDhbVfHIAnBqvxCcNqUgHiWMNqHJt9RLA+pfuRYI3Nca5lmIqUUOCE8TjP+uEwWPWFY4cq60yNDGuHhcEqjiqr5MLAgEoA0jQEqzGIsOoIVoL12Xq7VbZjSUJRP2BCuL79pzuwansdhzXpCwWofqCKKVGV2+KGb1tkWFs7VMHaKw4Jwar2SUKwEqwEa44zlqEq2pJiD+Bp+jisuacQzoBQxRSosv9tscmw1t5xiqPKusRg7W8d0xEawVoWlKkAgjWMYA01WLPskxOKPBAIrrHpXdDe7fTCerXRowTVr5f/SlRZq/cMvd3qQq0rYFh3Xei/oupgDcE6M5gHrwhWno5gDTFY52bafptQyGAdrX6e8t8W46j164udgydPkQ9gIaKqUGUZb8qosnO5HqjwBIAqh3VXEI7cawnWiGC+3Ypg5c0kWEPwI636AoljKVrqPjufDrhU51GCKozqyt1ucA+OVutbnYgnR1UY1uJznqRgfkBAA7CyrEH8gIBWYTWIj/gJ1pA7CcuifLdDj6PWoXxjqrxveb30/Y+45pwUAFWB6qwsN9zplFG1211w6Lr0f4Giytp1vv+FYH+kVQOwGtR+pFVg1KtNWNW/9c1MsIYgrHE7nRcZkIG2Zi+7OoAMohvbejQwVG+2sp8hd66yD/YENAXAR6tuPG3g3wf7JCwagDVC5UlYTAJPNK3CGiF+UhPlegjWkIM1Ntu+WA2sGGLqAYdrCMavrknwxwwlqCOjunavG+51D33vpcpe+KJ8QAzVYbCWYkXnPEfZ7xaE0waGawxWVlmQThuoDVgx8dM+cpCtBGsIX5olPs/1vVpc0495+Gf8WWwUW3pBgkWFfwvqHxDdDw/yM1nxzpr6oPScI9B5VQ5r4RlptgpYdT6uBaQb5QKDBsyMJWsQ1rAxOtE1v/8zCGuywPWhlNcks7II1hCEFUet5aKQvjNCqV96oLGNQ8mz2Nj1rSS4dVfyzqO63I/+e5/NDSUnLZBS9AC+qFCHKo5WHXj7D0G6NIsWYeWjJxWXZuH75RmFNczHJVDMP3GZFD1mJFhDENZ523v/e2G+m+GoqkUF8tuw2BmpbncwNH1ntbvgxF+tsLKgB+Z8fB/2XpYQ0MCnAFhFZ6VtY3T5az1mJVgfwdUEYouVj1Q1D6vAHyfxa6ilEawhBysftd4OFNORYqPazX/xwIFyD1yql6DKLMHNOxJcbXTDUZMbdnxthYSdFojZ1g1ztnTCJ/t7YG95QKhyWPGgVT/e/kYtrMrr+fj5hCjDIrQIq/hlkPnUCX+pS7Dyx5PBj8eTQbHvkgnWEIV13nbLOJxrZSiOeQsNj4Zn1YLo9B7MAnO3dsG8tPuwr3xAFaryaNWdNfx3GuMdGIHpsWRFOn5Q5tkqHJup2Bd6vw/0UTp6LGkbVr7E7LCWP05QWfFYbLYNordbvLDO+bQTdh6z4QErdajiAatuvP0nBazBjaIognXWnzv/eUG2/fuxxZSDypuf2QfRGThaxWkA/Y522F8xoApV/Pgqm1uNZr8DwRr0KIpgVS5z0y1xOCWgFlNevKK4fAlR7QWcevDOrRafdSpBFUKVVXDatY9tO8H6VEZRBCtbojP6jsYjgL7AFMGUly/Pr8bgiHUezrGuLeyEfRWqUW3C238kWJ/qKIpgZcv8HdbGhQK4xvsGlReb44DozF54+8/tsPdyvzpUje6eorOef2PbS7A+/VEUwYpnvpqfZetQ4hrvb/kjhwfIAKcb4JOyXu/bq3YHiGrhGbej+Hz/f7FtJVhDIooiWNny1sftv4reYb2L86KqMGXFYQvyJMAPI0D01g7YV+4/qCO8/LdwVAnWEIqiCFY+co3J6PsW50b9RZQXpyg2xwXztvVA9nE7fHZFHNWSiwOQf8rZUnRO+h3bNoKVoqhQhHX4x1634/zoD6KY8vI8EJNlB31WJ+y7Kv7Sn72lKv+k4yB+/Wu2PQQrRVGhDiv/dBbOkVpw9CojKlBsrhvnVnug5JwkPEo1nHb14IGqBXxDCFaKojQCK19mb7N8On+H7bsFiKVfsOZJgJfahqTiHviiwieo2PCj/q6H+NI/D78OY+slWCmK0iysbJnx/p1fzE3vzYvJsnlic5w+YZ2f44K52yyw98qAL1D5S37DKafTcMqRM/yEKgQrRVHahlWxzNlmmT03o68mOtP2HY5M2dF/zCOXy+ZWHfDJVzbYUz4yqHgOVZw/dUrYCXzJH42gPieyfoKVoihtwapYZqf3/s+c9N6COVst1xHczre39Uiz0tq+y/vG7sk7YevCWnO/sdfmnrCfzTvpMOABqZV4ApUX2TWq1K+dYKUoKsiwUhRFUQQrRVEUwUpRFEWwUhRFUQQrRVFUsPp/Exo3/14SCTUAAAAASUVORK5CYII=) 2x);
        }
      }
    </style>
  </template>
</dom-module>
<link rel="import" href="chrome://resources/html/load_time_data.html">
<script src="/strings.js"></script>
<link rel="import" href="chrome://resources/html/polymer.html">

<link rel="import" href="/shared_styles.html">
<link rel="import" href="chrome://resources/cr_elements/cr_button/cr_button.html">
<link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">

<dom-module id="user-manager-tutorial">
  <template>
    <style include="shared-styles">
      .tutorial-slide {
        @apply --cr-card-elevation;
        -webkit-transition: opacity 200ms ease-in-out;
        background-color: var(--cr-card-background-color);
        border-radius: var(--cr-card-border-radius);
        bottom: 0;
        height: 408px;
        left: 0;
        margin: auto;
        position: absolute;
        right: 0;
        top: 0;
        width: 320px;
        z-index: 100;
      }

      :host.single-pod #yourChrome,
      :host.single-pod #complete {
        margin-inline-start: 30px;
      }

      #guests {
        bottom: 20px;
        left: auto;
        margin: 0;
        right: 100px;
        top: auto;
      }

      :host-context([dir='rtl']) #guests {
        left: 100px;
        right: auto;
      }

      #friends,
      #notYou {
        bottom: 20px;
        left: auto;
        margin: 0;
        right: 20px;
        top: auto;
      }

      :host-context([dir='rtl']) #friends,
      :host-context([dir='rtl']) #notYou {
        left: 20px;
        right: auto;
      }

      #notYou {
        height: 100px;
        width: 240px;
      }

      .slide-contents {
        color: var(--cr-primary-text-color);
        padding: 0 20px;
        text-align: center;
      }

      .slide-title {
        font-size: 20px;
        line-height: 20px;
        margin: 30px 0;
      }

      .slide-text {
        font-size: 15px;
        line-height: 20px;
      }

      .slide-buttons {
        bottom: 20px;
        position: absolute;
        text-align: center;
        width: 100%;
      }

      .slide-buttons [is='action-link'] {
        width: 100%;
      }

      .slide-buttons button {
        bottom: 0;
        height: 35px;
        padding: 0 15px;
        width: 138px;
      }

      .arrow-down {
        border-bottom: 10px solid white;
        border-left: 10px solid white;  /* csschecker-disable-line left-right */
        border-right: 10px solid transparent;  /* csschecker-disable-line left-right */
        border-top: 10px solid transparent;
        bottom: -10px;
        box-shadow: var(--cr-card-shadow);
        clip-path: inset(0 0 -5px -5px);
        height: 0;
        position: absolute;
        right: 40px;
        transform: rotate(-45deg);
        width: 0;
      }

      :host-context([dir='rtl']) .arrow-down {
        left: 40px;
        right: auto;
      }

      @media (prefers-color-scheme: dark) {
        .arrow-down {
          --gg900-blended-with-4percent-white: rgb(40, 41, 44);
          border-bottom-color: var(--gg900-blended-with-4percent-white);
          border-left-color: var(--gg900-blended-with-4percent-white);  /* csschecker-disable-line left-right */
        }
      }

      #guests .arrow-down {
        right: 110px;
      }

      :host-context([dir='rtl']) #guests .arrow-down {
        left: 110px;
        right: auto;
      }

      .slide-image {
        border-radius:
            var(--cr-card-border-radius) var(--cr-card-border-radius) 0 0;
        height: 182px;
      }

      #yourChrome .slide-image {
        background-color: rgb(241, 202, 58);
        background-image:
            url(chrome://theme/IDR_ICON_USER_MANAGER_TUTORIAL_YOUR_CHROME);
      }

      #guests .slide-image {
        background-color: rgb(90, 196, 144);
        background-image: url(chrome://theme/IDR_ICON_USER_MANAGER_TUTORIAL_GUESTS);
      }

      #friends .slide-image {
        background-color: var(--paper-light-blue-100);
        background-image:
            url(chrome://theme/IDR_ICON_USER_MANAGER_TUTORIAL_FRIENDS);
      }

      #complete .slide-image {
        background-color: white;
        background-image:
            url(chrome://theme/IDR_ICON_USER_MANAGER_TUTORIAL_COMPLETE);
      }

      @media (prefers-color-scheme: dark) {
        #notYou {
          color: var(--cr-primary-text-color);
        }
      }

      #notYou #dismiss {
        cursor: pointer;
        position: absolute;
        right: 5px;
        top: 5px;
      }

      @media (prefers-color-scheme: dark) {
        #notYou #dismiss {
          color: var(--google-grey-500);
        }
      }

      #notYou #slide-add-user {
        margin-top: 10px;
      }

      :host-context([dir='rtl']) #notYou #dismiss {
        left: 5px;
        right: auto;
      }
    </style>
    <template is="dom-if" if="[[!hidden_]]">
      <template is="dom-if"
          if="[[!isStepHidden_(currentStep_, steps_.YOUR_CHROME)]]">
        <div class="tutorial-slide" id="[[steps_.YOUR_CHROME]]">
          <div class="slide-image"></div>
          <div class="slide-contents">
            <div class="slide-title">$i18n{slideYourChromeTitle}</div>
            <div class="slide-text">$i18n{slideYourChromeText}</div>
          </div>
          <div class="slide-buttons">
            <cr-button on-click="onNextClick_" data-next$="[[steps_.GUESTS]]">
              $i18n{tutorialNext}
            </cr-button>
          </div>
        </div>
      </template>
      <template is="dom-if"
          if="[[!isStepHidden_(currentStep_, steps_.GUESTS)]]">
        <div class="tutorial-slide" id="[[steps_.GUESTS]]">
          <div class="slide-image"></div>
          <div class="slide-contents">
            <div class="slide-title">$i18n{slideGuestsTitle}</div>
            <div class="slide-text">$i18n{slideGuestsText}</div>
          </div>
          <div class="slide-buttons">
            <cr-button on-click="onNextClick_" data-next$="[[steps_.FRIENDS]]">
              $i18n{tutorialNext}
            </cr-button>
          </div>
          <div class="arrow-down"></div>
        </div>
      </template>
      <template is="dom-if"
          if="[[!isStepHidden_(currentStep_, steps_.FRIENDS)]]">
        <div class="tutorial-slide" id="[[steps_.FRIENDS]]">
          <div class="slide-image"></div>
          <div class="slide-contents">
            <div class="slide-title">$i18n{slideFriendsTitle}</div>
            <div class="slide-text">$i18n{slideFriendsText}</div>
          </div>
          <div class="slide-buttons">
            <cr-button on-click="onNextClick_" data-next$="[[steps_.COMPLETE]]">
              $i18n{tutorialNext}
            </cr-button>
          </div>
          <div class="arrow-down"></div>
        </div>
      </template>
      <template is="dom-if"
          if="[[!isStepHidden_(currentStep_, steps_.COMPLETE)]]">
        <div class="tutorial-slide" id="[[steps_.COMPLETE]]">
          <div class="slide-image"></div>
          <div class="slide-contents">
            <div class="slide-title">$i18n{slideCompleteTitle}</div>
            <div class="slide-text">$i18n{slideCompleteText}</div>
          </div>
          <div class="slide-buttons">
            <cr-button on-click="onNextClick_" data-next$="[[steps_.NOT_YOU]]">
              $i18n{tutorialDone}
            </cr-button>
          </div>
        </div>
      </template>
      <template is="dom-if" if="[[!isStepHidden_(currentStep_, 'notYou')]]">
        <div class="tutorial-slide" id="notYou">
          <iron-icon id="dismiss" icon="cr:close"
              on-tap="onDissmissTap_">
          </iron-icon>
          <div class="slide-buttons">
            <div class="slide-text">
              $i18n{slideCompleteUserNotFound}
            </div>
            <div id="slide-add-user">
              <a id="addUser" is="action-link" on-tap="onAddUserTap_">
                $i18n{slideCompleteAddUser}
              </a>
            </div>
          </div>
          <div class="arrow-down"></div>
        </div>
      </template>
    </template>
  </template>
  <script src="user_manager_tutorial.js"></script>
</dom-module>
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @enum {string} */
const TutorialSteps = {
  YOUR_CHROME: 'yourChrome',
  FRIENDS: 'friends',
  GUESTS: 'guests',
  COMPLETE: 'complete',
  NOT_YOU: 'notYou'
};

/**
 * @fileoverview 'user-manager-tutorial' is the element that controls the
 * tutorial steps for the user manager page.
 */
(function() {
Polymer({
  is: 'user-manager-tutorial',

  properties: {
    /**
     * True if the tutorial is currently hidden.
     * @private {boolean}
     */
    hidden_: {type: Boolean, value: true},

    /**
     * Current tutorial step ID.
     * @type {string}
     */
    currentStep_: {type: String, value: ''},

    /**
     * Enum values for the step IDs.
     * @private {TutorialSteps}
     */
    steps_: {readOnly: true, type: Object, value: TutorialSteps}
  },

  /**
   * Determines whether a given step is displaying.
   * @param {string} currentStep Index of the current step
   * @param {string} step Name of the given step
   * @return {boolean}
   * @private
   */
  isStepHidden_: function(currentStep, step) {
    return currentStep != step;
  },

  /**
   * Navigates to the next step.
   * @param {!Event} event
   * @private
   */
  onNextClick_: function(event) {
    this.currentStep_ =
        event.composedPath().find(e => e.tagName == 'CR-BUTTON').dataset.next;
  },

  /**
   * Handler for the link in the last step. Takes user to the create-profile
   * page in order to add a new profile.
   * @param {!Event} event
   * @private
   */
  onAddUserTap_: function(event) {
    this.onDissmissTap_();
    // Event is caught by user-manager-pages.
    this.fire('change-page', {page: 'create-user-page'});
  },

  /**
   * Starts the tutorial.
   */
  startTutorial: function() {
    this.currentStep_ = TutorialSteps.YOUR_CHROME;
    this.hidden_ = false;

    // If there's only one pod, show the steps to the side of the pod.
    // Otherwise, center the steps and disable interacting with the pods
    // while the tutorial is showing.
    const podRow = /** @type {{focusPod: !function(), pods: !Array}} */
        ($('pod-row'));

    this.classList.toggle('single-pod', podRow.pods.length == 1);

    podRow.focusPod();  // No focused pods.
    $('inner-container').classList.add('disabled');
  },

  /**
   * Ends the tutorial.
   * @private
   */
  onDissmissTap_: function() {
    $('inner-container').classList.remove('disabled');
    this.hidden_ = true;
  }
});
})();
���1O1���
㽍�	��b��^��%is��!��s�c�*�)���9�.�A�AҮ�V�3;,���7�T�I��n`;R!yR���8���n�N����ҟ�“��Y��,����8I"R��tt�=�$������HG?��T�_;�I�*q��'��EA8\M<M��9Mfk�)3���r���~k���>�3���q�b��������!G�ڴuɢ-b���K��;��O:�v>�5P�J1��W���t�BW��č���vLsKrk�⿛��M �g:Ɔ���:+�׳�-ac#��a��A,�Ta�=RB�D�LU`��D�-ĺ�ć�	�
!;��Ƞ=A���Lr��4�,�Z��;m�\�8��y����Ta<-�ʒ2�[ 'x�
b���.'�-����>߶�L����v*v.�-��A}_�ŕ�'�һ$����M�Kl��R[��
3X�ҟ]웞�狻�\�g�����%?�6G�kв7}�<�8�|���B�}�*�^��=�1�����Uiq�`,�-}�S(���
����kO9�;�bN���
�}�R��F��T�'���������P�����݄G�*]�b{�3�Ovw�XVK%��^�Χ��J��|Gs=��N�(�ՠx�Ղ����.|�9�	詨��s�q�d���r�U�s/������Z/��x�hz�4d��1'J9/s%�s�8:>�|v
Q�tk+Si�'��D��B/�D��<+�d�y�i!�6�m$s$_k%2�l�����	��Xq�y
��-o8.5���m����o_��L�,Ĩ�H�;�b��(Ey��P��� �0ϴTfg?��pNXE�G�v�[�.�!��|�������$�X$��i�4�B�@)�\]UJjyE�-����ˊ7Tx&28Š�*�+2�
H�
���OO��	��$��R�(t���`��Q��K5����H�&�A|(r2}3�HY��62l9@kZ�������d��
��t@�|�8t�l��2eU��x*�|`H8�R�����_rd4�f�8_����1�O����w4lM���x�!�gt�,�z�$���(�r����^v�>�Ę�4��ͮ6{�ɘq�.��b�P��w�7�?�3������}/�Y&+^_
"4��6��DJ��P&�(�i�I�ws�������
n�;^5YÂ�R9'`QXgjL�x�1�T\av7ʼn�Ęz\��F��+(����$uC��|#�+�I�1�@`#���(�Q��V@V0��Z�ݮ
���En�D�5�5�\�����ܵ��Ҥ`��fn��B-}�|��ٓ��8�(
-�0���hSJ�>.�T7���"�7��؎�T��|������jb<�Њ��#��ŏ�ܠvE6'�X�V�lR��
�\L!�So`�™`��6y���=�m�^\6Iom��K�bb5K~�hL��v(�v^w�:��e�Ap��o<���+0��9G�}�g��x?�R��XExeK��Ϲ?c[,mn�ת�gwf�iZ�MO�8$&�*_��u�}�E�ՓC3FN3Y�U�s���vL�fΚ��@rC�/ٚ%ne��i�PE`��r�Ĭ� ��ȇ^��&�&~v<K�”����E�J�O�V�G�ڷ��m!�fE���	��}�Q��"$�-]�ڳ�{Q�lIX����Mrद�O��qC�-������Z��2�q�M�IǢ�q��^�N��2$��0B�dž���6��l���E��p��W��|�m��5�nS�z�4���5�e*��4�U��ذ	�T��!�~����0���[#&z	mL�j^/�
n�O��Cs�d6�z��7hZ��H�4��P�h���ТY6_�4T�0��e��♘�5��N`�7��>U<�0����Y
��(�?њ�XX,�e��ǖ�P�y����)#����gľ�84v.��ӹ��V��<�#A�D{���ؑ/����x{OL`�@^��8���!��(�#�[Ē�����Xy�Y���u��"����ٮ���8��E�k+GpCx���=4aE��uxo���Zn:��FP=Ѭ�]���:I6���Q;�J|�B��.������7f���)�&D��˭���CJ��Y�����1Ah�t�u���)n�@�:_\vO�N���Pk�jW(Vc��4:��*m[�v���;� >l���@߈rq���G��k�������۹o{�UvmaxHg�c��T�:��˦a��p̹��=���b��6�ieB4�������b�S�MAԖ+j�1��	���Ie����;�덇-6�#���
�"��}[�{��M)E��Ŗ���e&}�{%�6��ʆ_s�������p��6�6J�w7\�XQ~��'_>��d9�y����۾������o�0��+2kW�VM��J�����a'��/��ؑ�E��l'��1�����Cy�>L���~=�-���
��3&ŧ���
�v��T-�{a��v$�@��(� -XK�����
(�|L8���ԋQ\$�A&3o�UeGN
�,�1���`[$Ek�����ei�jgؒY[�S�94�I��~��7S��?�܉W�2#:,�a'e϶���9��9Ez���38�<g���烎opZ�}}�Z�m$�X�Z�u0�~�*A��c�C=�H�;�C
YlY��
�P��j���!����Kǎ>�4�$P�
�S��5ȿ�f[�y�?��O�6������τ�����mH��BQ{9 ����.�+n��D����}�@��(L�m ��j�H�N��
��Z�R��G= ת7�,S��z$������}@���PklS�_�P���:�d�\c+x����u�=+�#��Fp������FH��I���ʹ�o����d�yl�s����;��[������q��	��WKs�6��Wl�NH9
�tz��6���(N'�'���P��5���|�J�ir����vqtS�m�\�~<~�\��X��,�pV�X�<��$+�����`tt�9�Z��e�*t����]�
�#XlA�o�7/r�MbJj&B����Ri2�s����r~K�`0�*�
��
����N�_ih�J�1|x�̍���NFtptxH?������0bE~�u��$��$�RN�u&�X�g���vN���B֘q
RJE���h
���?����H�\���f5�qD��@��)�OwG'3c�W�)Է�~�U+a{4MD�_�5��G���/<x^�f�Lݡ����IK�X�
�s]F�{�Wʓd`��LUj�#iY��ǰ�
���A�A:�2M$����f�?�jL|5���d+�҅�O Ň(�7��-��z�P�����L��Ls���k�ؿ�Ը?H"��!>�0��8u�LV�4,b���C��_��!�EB�,g�m� / ���ܓZ�"�~��e��^i�Ń��u��8p�l��R�QO��7-�:���=�<VEB�Ht�If3� 	���"@;DP�p7f��Ƶ�w{�0b?-�����;�cx���!��Q[]E�gk7�E'h>��l+��6���Z��9{j��:1�mK�}�Z�P?�}4v��t���^�2���Wo �f�O>�򹫝pc�F��a/�9B��d�O[�\uZ{�f���H-�	m�����>JDW��F���-߿�KW`��zx��ZoҸ��y����ݎ+����F�X&���yG�_���w9��ȶ�7�0.	~�qm�5�H2:��gZ��+7�)���$dt����tCh��Ʋ(�f��_�H����9�s
y�RV9+l{��W�Z��J��Z^|.iI��'��U�A����'�l
�yw\|:@�>�2�L�4�n�m��kl�p7�6�N�R��އW$�B���Q��½BM��.ƴ-�W���c1��]�"F@!Ֆ�}{
�A�:��Q�B�m>C�s��N��3mmw�{8�a	�*Ae��>8�(1aLwJ���S5�˜%��h'�k�
~�a@��^�J
�εsZb���O3U�x5SU�����}'.�Pb�t�j��8�	q�W��͇��P�V��w
)����'�H��"IaLw:�y�[��+#�Z�Be����_��~s�	�j�/��^���/�����;�/=̟��.)������EAD���S��&<޿+KoFu�͵y���<Vw@��9��!f�����x�KQ$�«�uk j�t3�����A������d}����-��@��\�p��<�r��i����iu��gI�����Uj5�E e��aG�����T�mU@CC�	e����`�N�y����ĆV�^*Kɺ	����D��yǨ�`���i�zi��2�
��nl�X�������$؍Y�_O,�g����n�0��z��mP9��}J�
�$}JI�)��ŎZ��;��H��K�5�g�fxq7�V5��yqy-�Mk�S����[�n�ZC9���nP�28��j�r�(�
�"���
m��P ����A#hU�a7�
�0Pb�TS0�a;�ݷ���P+�38�Ȳ�w~e-�2�pY�V��,+I�D*�k1,���bC|�RY��"���t���Y�N�F��H�Zm
z8Y��삁�X�KzD�*;����ޖWd�P��״e���%WF�I�F.��_��(q��{U	����))5���Z�&�����=���|3�2}��2K��;�'�o�gpwԌ�M@�d�x��{��۔����#~>Fʪ��G�p�'�y��bB �a�i�<EK/�T���=��?��E�4/UG�\/*��lK4/�i�O�;��
ONj�A�~��!g�˝����
���G�͓�|k?Y�q���,&'��c�#��=Zaf��o��f��jFki7/�J�E[����p")u�gq6h�T$���Jb����8��>=�&��?��n�f�i1f���?ʌ��®��A�%�>�N�'eO��h�`�����a��u���@�w��ގ���8ht`q"'W��8ȵg��[`vi�����zs�����z)3�q��*5��2�=���3�����jYx>��x�H"+�"����:S�!1����x�6D+KMt#O#Jx�ɣ��_�-�ޭ���V=����Ί�H�Ć�2�!i3�F��O��Z����An�0E�>ŗ���PXU����=�#���AQջ�v����}g�k(ؼ���}�|�zǶ��E;lcĿ�R��|g�଄<�Vh��.{‚�<�$�̰�<�Z-s$Dv��[	��ل���\��e'������:4+c^��m)�R��<�����Z��w�B�C�a~��A:���}�Oo�0���P�N�X]OC�
����?��bgբce��R���w��CD��G)�e����	�g>�',��\�ԇ�5���$bDb�{2u���:��28���`nž�'��4�4�NGp�%/X�uB�=�i�ԅ�
��<�v�\�7+t�Q]v؅�������o�=�Wt�@َv�B)�6y`�e��z��\^��O�r��
�ho1��ړ��'�wd������^n��i]&�yq��Y�ԭ�D�bU^?�-��%�!S��e�&|5�K��aUn(5I��嬖���)§ϓ�ݞ�|s��k�p_s��olw8s�����ӭ��d)'�S������*���?���8�~��oQ�5"���7�vI�PNG


IHDRJ~�saIDATx��=
�@D�ۥ݋��ٴR�k�I�cΰ�XY`��+^4[��x��	5�;�H|��P"�J<���J���o���F�|A�\~���1~�IEND�B`��PNG


IHDRJ~�scIDATx�һ
�@щ��pu9�� @r�l��3k��cs��u���r��^��X4ǓPw�O�!�`D��H|��P���W��k>�|5���/�.z�@U;IEND�B`���V볢��Tj3�nv�u6[	���I���Z^Dԫ&Yy�(�sS[-4�����}j2�/ɧ>}��~}�4o�Ի5*ۀv�Gxۥ"�b$��.(���H�qIY�Q(�$�M�N\!��,$��?�h������Φ�vN�C�5��J�8@�m��ʗ���{���2����8��c��)Τ��5c.J�Rv
�Tk�=�:i��:,�ӽpxܑ#f�G�j�R�[�dt	�m�)Q�pЄ���"1YMT!��t�~��M�.ayj�w[�P{�x}�6I���]�
P>�Z�HW{�w�8VVu�<�(g�aO5�@b]eaF�}��$p�'���˾*���0��6?��s�]�T��C9�R�s����3�t�A%8���]�6뮗}ښ%�`gG�!CT�vֽJ	w'�A��*[}�dÝ�B�~b�:�/y���(�8�*%'`�邤�:m�lX��:L�e�BM빧�̃=���K�Q�v*/JK"Bi:v�y+��m����}C�8��H����N2�1�c�6��
�Y*'yG���V�1�H`m��q���(�z�V�����*�ȕ�d܎�*�}Y&��%�6�E ��G.���� m��zL��n�J�2�I����uJ���n��,…��!S��(ҞѝAEݗ6���Q�����A���-����ȕ��/�����[M�nڋ<��_�{�hY�	����n`Jˮg��T����}bf-Yʗ��%l>&zFlE-�2̠`{ӎ����F�?�|�	�6�P���;�.�x�U����bVsg)��
����G�Y����6���?ͳ��4��˸{�)�u�!����>�]XΊ�q���m|�����Ӈ�T���G.�`����j�Y�g��)DM�����#j_1~�ĸ�R��������A�u���(���ĵ|�
�վd��I&0�����t�>�X]���ܻ��vm�Cg�A��a�Q���r��8称A���E����q:G�8�Q����Tb?B�wrr�q&�s��W�Ʉ��R��� ]1�� �g�����.��S�U��Y��'Ƚ���wL�}'��
!ە�X��VǸ���U����\̦y��k�vS���Axn
��M�'t��۪�Z�]�^�muqv���:q���bl�Vm�*�/	�7�g�Y���L+M�y��	^�c��ő�\�`?��h�"��!�����8�A�d�5j���dW����ib�A7������dR�����ӫae֨՞8]�׳9Gaա�<W��֯}�d|N�K;�?�Ş�������.CP���A^�FP5e�����j��V�˾�Ə-�9 z`}�j`�*7��i�_���[]MY�7��A5�_>	�s��ǗO�#��z$��f~��F'����\m�1*]�1�P�MTn���3��*��E�#Û+��R=N�XD�\�D ��d��ȕ�g,
��.5�����ǴW�� N#lg�I7U���ܾ��
�����7��a�#
m#p��zZg�bœ�����H���1�\����p��셁){�O%{��`�KEѬ~�Z�[���r�P�/w9o����(�@?��*��(O\z%ܒ;�uG9�<��d2��;U�~a-�L�<I�C�V�_��V������r�0���[z��S�Cc�y�"�A��i�a:}�
���4c�i���/��싴�O
Aŵ�<d�4�2��D���"��$LkbQ���y��.~��o�)����u����׃�\�JP�/&��b�:�5��Ċ5m����ᙑ[�%g��C+�
�ty>i�Q�U9�周��i�$��m� ���#o%���r�����<꜒�=����"��
�=�
�$�5����JB���k��I<˻
J�L��Ys�i��EVּ#��m�Re����:lZZ�A������XXm�W��l�����Q�m��|���#j���oS� �V?�ev��Y���,?�0��%�Ͽ�p�a�N���^B��K��ֻn�
��UM[��W��C��.ԁ�N~o�����sH�U�]�A�GYry������Q�� �����?����Kz�a��oe�eozR��t�D� hz���X�n���SL������lH��M��6h�,�Y���Z�BdR%���߽3$���޴�E`Q3�p�R�1LT�������~��%�d��*+WpVڥ�fgyNȀF��3���x
�Z�]f�*u������g�S��A������u��g	JR�Ka!��HU�2I��W����Y���`���^�/v]`�xz�G�I�V��
[�c��j����+���ՙ�+��W����^h�T��B�Ze�y���U���6�?�h���Hx��x��� ^�2�������&�$�0
e@C�-�QZ�f=4#9Rl���yK乱��'������{�҈���3~��tsyq��V�������[Z��BE��I��45�sZ=�Un[�)�V�y{ؿBh�8R��U���
+���W��K�$���7HL��I$�*�"_WN��^[�-����W��wIT�)�݇�Km�Q���A=�ʁw�<t9�{��:�T%%Ï��b0GVGC�m%�h���G�L'K*�x'@
	�p��#��G\�n*�S��*��n٩g���C�e��L4�n3�3cG��Z�в�GjÖ���Pt��(�a'T
�	���Ǔ�f��C9�Bf��X(ML�Շ�O�{�zS��Ky�T�Bn�$�ܶ�9�S��Q���\�MUzD��S�.�~o*axE��TE�����MH��D�2l'�C�&�)_Ш�"
��#�q_ֺ����z��A�6h�R%������<��E�t����ۻ'�0���(3)Q�Q��#��v�nM���\NNU�l&���_�`�呌�{�}�%�}��p��Ї<�2seTN����B�OZ���Z&}/�Ǚ�����U��*����=�T
���]��m�r�Z'� _m�y�_nqt���7GC�ã��G���L�_`�wj��Z����é��l�M���yF�_���.b��g�1N#^���`~?"H�߉��(l�|-�ԏ�S��$�鏣����Vq�]���~�[#��S�^Gm�Pd��C��}�N ��{�
�������XS�V�ؼ�R�n�t�ϧ���>Eo	ֿ��6��[��|DJ!����0z~�h�4��G���m�9�r�T�2�n3�,!n���nҐ
퇆���N�)˂�h�o�hʇRڌ��Z�V�Q~?��=������s��:�^���UӅ�X*w���{����+y+�Ϲ�[�-;����Wc�k��Q�c}�����ߢ�n��i�Jm^�ޕz)�Wng�������~w?;��G���gl���oMڜ׶�c^S���^���BX��ܟW�hJbQ�L.���R��&\��s�F}4���Q�+�g������j�^3��'�����.�
��!�4���)D��\���Ew��p�j�Ճ~n��'h>ĸ��s�0خ���\���/�hw�[�4��,A/~^,z�=�Q�=�?���'�f�udu��u��:-���'��Z=����u-�q��ՔFx�U5Ch�-�M���b�|�c�{�X�yXz'�c�r�?�nI�w�hr����Ibt��P��J����g�9&��>��ciJ�����6��iF>A�I��ϨNL'�V��盰/�l~u�x�ַ���v_���p^�B���d��ۛ_:ݱ��)|�~]O[՟_(����o ]���&|O�&@:@\���W=�L���n�[(�3�<g��8䧿#|)���X�n�6��)X��] �'N��(���)z)
���J��:n����ܧ�t(Z�,K��-��p��#ӯ��b&g'S��$ϗ��%Of'�MQ���Hg��K��r��n92@��kx�o��@���i��������R
�{/N�� 
F�:���8O`�K�fD�db-
dFǽ��zT�Q��q��h�H�ȗf.��Ц��:�P
"
sK��A�c�4��7���cx$a��	�Qu���JG��F���hJ���"�ȗ%
ّ�"�Vt�٬s�94�77��@Y�\H�5�B��O�U��s��sA����H%k�G���B��/x&�:d�?�H�:=c�ݯ���2bq�0�w��U����8�Q�
v�5��'HTY���v���pGJ'��XI�C��ݫ�09k�|��xfT"a_�����Ol��"��re��z{���î-�<~ZjUZ4��ލ�Wgl|yM���}
��(��P"G�]������U�C_��g�)xL���J�b��6����k��XS#I�6�L��;:p~R�#W9�J�r�p�Y@���Ɨ�֟��|T;��,�@C2%�`]r�\���-r���sE�S^&�B}��e."�9����j�f4f|.IA�(�GG׶m�j?�8E��J#�����<�iEy��`��n��.T\�fؚ���<c�[3�[��}��D�BvNd�㾰ܓ[�>�n�U��P��-��~i�m�_���Q;�&�M&�N7�tD}��2۶Ѿb���0�lSӦ*���_�6mBQqE����D�@�ZAj����X���sn$M��M�\�fUzѳ�ўmF�Hh�bM�'���E��N��7DfDf�XC�N�-�6RnN�^ݗ� �A����W�T2�����>R"my�6Ӏ�/\��"�7-�X��=-�k�?�E���T�d��ugR��s��T���9 ~�bk�@����Gq5T�4�r�����iP��֬�;�R�	���^ۯ?V�����\�X;�wC�.xX5L>m=���Z�T�q��g�HÚ~ v��5
�����0�Y���P!���{T��ʯm�8�+��z�K�j��I�(@�i�S�Z��g_����Įט���m���;Ƞ�V2�/��R�3U�ڌ僌=�\�<���a+�I���&����F�Rd�)�g��:UjЀ����^��u\��Ymo�8��_�����J�����R7E�k� N�p(���hKYԉT���gH�Ŋ��MX4�3�g^���&2_�"�����E,�$.�2)��Ա,T��Ҕ"�
�Dq%�`���>+���8QLɲe$~]�+Qd"b�5�����H�u*X��"���f!��L���,��%���dr�qz��I*���+A�t���������,ԉ����*��N-�V{l'a�V	.���)�W��H��B��+���2/S��&�1[�(�Ld-E�Y$4ORB�)m�O�Y�t.�Lqm��eb��ȍJT_��xPL&�ms�������ۀ�Ϻ,�]���n��jX���<�1�i:6gI6�[��]�Y*��h�u�d���"��.J�|�� ZOK��i(��3�g�,vȋ��<K�z��K��9O�.���O�)��U�J���@�]n���Iz@��y���ۓS
�qMb,zk}qCRN����	ȚШ2�ql�9�{����qj$��d�	�e;�+�	�A�Y��2�h�b��^�5������Q���!�_)��T�"Բ@�����l:�r�5��ZO,1���@�a&Y����g�{������y,�&�9�Y_!��ֹ�~��˝#��	�q�٫��/{t7�aq~�	�N^���1F8��r�U��Ɩ�.*
u;��vQ�\��6�E��6W`,�"�;ɇ��'�OSa��S�=�i�K{����k�W��/��QVL��bj�4oď�k�χ$����Bh�jԛ�wQ�R�^�tG3^xC��)
�*����܅�����������h$Òɒ����>�=YC�`���q*kr��h�]��>�0��P�:�$�DA�A���N)�;j͸BɁ����
�(���n:��9�Bb��|�͆���8O�m�F����F�r	����w&�1#�<�-�M,�bz%�����/`���h+��7u9!xΐ0��0U=�^\
��V.g�ؔE,�_r|2���'�Zb���pJ ��]�RaEܰ#���	��~"���
ռ2���
2�(b_��o3���?�=-n	+�n"��V1���!�q_���8���p��_E�x�ꆪBa��%�LR̘�m�C���
ߒ�8�E֘R�0��ϯe�谆�0��lX��6ӱC�6Q/���j`���2J��-m[
^I�	ZZ}�I1����<[�sz�02L��ֻ��%�/ld"Q�p-I�|�s�ʜ�Yk�X��Nð��[PqG#g;Ğ&���]0p\Jh
�^>ܦ����;8��M3�{d̞���糺��7}�}��16��ڸ(`&nwƩ�l[�T
�����	������˅Ȁ��fh�-k��0q����<��I����M7��)2q*����s"Њ�a��O�9�*��-��\�/bT�X�Q��~���&�qM�As�&C���U]U�y�jXD&�4�@�ؒ�w /�.��`n?Yt�|x�
w�}��K��Z"}�MGC�=Gu�%Vȑ��k�
�J�]^p,�t)�&����l����~O��'�>Bq�4%�+Uv~%�0u�?æU�h�&@���?���`�g���u��y!�h��P﷌���������RiL8�I�L�p}�11W�����0�ꨝ9*��
�}�4���;6��?�):��fD���
�����(�|M��LJ��3���&���jIt?ԛ��f�+��VG�4w%�z�qFW����R+��*��)����1�c�-�푸=#S�Au\ͩ�$բ��|U��N�k����p����Rۢ�F�ۉ�^�
;��9���׌�4��K?daP�(�x�$�(Z�^�OLw�Kk�;�m���G��%-����V�>vS@+x�Ӯ}sa��}@���f�}��-��֗p�ak;Q��<������9���t���x�:���9�ٗ��}�noߎ�JڹhG����l-�L�f8�=fthm`P��ۍ���
�f��z(�����[c%�G��6��r��^�HԸ��� ?�V�A
v�۳gՄꎾ$_{�F\"��h-�*�2������bC�9�xٳ!��#���K�[+�FȰ�:	y���V��,֔F�x�@�g'i�Rhۉy"�r��������p��r[�AH+Yr&^5�A�;�L��zDbq�>w���j9�v
K�Pz��[>�%X{w	v]׃o7�z�AG���M�j*_��0��$�I^�nB��Y��D�I�BN*�7��z��z#-G��h����_��F�g��1��W~�U�ErE�n�€\�4=7'�D��#q-‰\.�
��p���i?�ǫ$�;Q#a�emM���;
���v��Ɗ:8����+�Ex9��u�:]�ĝ�@��(��F��W�y�bd�w� ��f�H��v_S���Z��ޛ��Z[s�6~ׯ8�xFrƥ��f�&S�v��8��N���h �HDJ\�������h�%9r��A7߹��~(�w�R�(��#8s�=��l�#�uO�Bb/@�x����"F?D\��EW�R-`�1J�1���^������]�K�;��ZD�Z��p"����P���p"�X<�Q�C!�GQv����L���tH8�H���
���F;@�/OPz!D�ǘ��i�Y}4�"��1��������3��V;��JK���V�e��x�I<�<����E�F�i[�9���`��}����g>J"kT��b���2M�@���|�#'M&v�[���*+y��Y�K�S篮�<@Yo���"-B?'L��>9'��XD8��~�Հ��
R���q�o���O��ͷ����d�Ʉ��+���u�:�vӆ�����M	�e,u�#�q��J��L@$�7�H嵊��Q0�����'qPh�p3�?=Y�o'��{)��፻@�o�9�N1`5�;IKR�ܱdy��*Y��|{nQ-g�T�tKE���=q���">�Rȳk��B�4j:/E\I�˥�!�:�.��U8�0Jԩ��k�8��m�L�+xr$%/l��;N.L��	>}�{�t�˰TTR�sT�f��`�ŏ{/�k�����5�C]&�{[����j�^����=G�m���{��1z�
n�'�ҿ���iB�<��o����x���$����!�VÆ������I����,���jAQ<<8OIZ�NF�0)`5�m��V��_+�yD%�Ӝ�,O
���jW��0�m����;��lU�иϸ��F���^��׸�̂�Y6��5��*�����^\ҙiuK��ē8�~8�(�f}�d�w��Х�-w�
��6�9�ss��ے�;�Y�V:�*=aN/�9��G�����+�4Y� �Va��l�u��!��y*P\XI
ɴ�G׈�*�b�8
�Qe������sҮ�`d:rȮѴ�RX�M@Ш<O�]�+;Q�� `�O�>mX��}Ed5��}��!(,�!��x��<ɤ䞿�7��*<vJ��~�a?`�*6�yT��t[ٗ������mVk��?1�����𶬈�x��	�A��4o#����c���D?4~�Ow`�
�t�<!
�C�oLm0\%L����G����>�P|����㐀_)L��(���<�r�ps~�����Xf��U�7zY��!NG}�O 2�����I��X�I��+wS���(�}x��{[��H��0��u��X���Mp?�Z�Ԯ�ng�:U-3e����b���%�����NT�"�*"��*_�_�v�8��|���R�{��J�<����C׶'�Cgޟf�'���H.�e��S?��5w�FV�BD��	\S���S�������
S�
@C*��7g�Vw5_�ÃY�Y�{wϺ�e����֫��9]��,{�τZ�Ϸ����&�wB�\��C�v�
Uf�v�.�/����������N���Y���9\ڝ���
O����k�!�{�3�
2k��p������C�w`�l�����2���z׍�(*��P�߬o��o�4@��f�Ռ���hZ̩�ތ3��+�ɶ��H���?-݈�����, ڠ�$�A]����]��;>	�ͧe��-���˧��J�k�Kn7b���ϛ��<�71!���q��*��B� �d��#Ud��CBО%�f�"dp�4#P�׍P���Q�EBE`��"�J��a����z�u�>�Q�V���+#��6ϛNC<|
�F�ݜ
��̀L$2�}��xvJ������Ti1�QuE��m�CZ�>\���@W<~A���eK�Z�J��ķ�6�e�b,��q�Ya{��3�_6gi�I���}ڳ�lߘ��}�a9�ܸ�y�?=�n�Q����g��y�d�\x�+�
@3<!-- TODO(calamity): Remove this once manifest URL installs are implemented. -->
<!-- See https://crbug.com/896575 for details -->
<html>
<head>
  <link rel="manifest" href="manifest.json">
</head>
</html>
��Vmo�6��_��w�b;��s�b�/�6�b1�V�2$9/W俏��4�rm��$E>|D�\��elN%�������~.��U������#�F��쑌I���%p��F`�偐u��8eJ��x��ѕ�+
����8�R�IJ0P��Ap�n8�E�~hva2xq`����f�x#
����)���T�n�ũ�9D��@�JŠ�Xk�f��aǪ��לOP؄ұ�!����K^e��⍇���L�T|�/nX��y���+R�H��%!;̎j�"N�=���C�����nY��(Y��2�*"�Txvj'�3�Hi"e�M��2>?��X.�SD�I�i%�?BY�H��ЃbeD�
�����j2����� �Ԡ|�h5m��1����E6۬:d�E �9cU��JGdZ{���E�V(��n�g���R`����L2�B�d��6Y-�}�9S�(K�y�!�#��z�F�B�AQ6e\�4r�X�"�[�!@=��	�o2}"aGF�1'
�aD
Y���m�~R&���%�.�v�ʱD�zw�ΰ�de�wُݦr���e��$Dn��G%[�4�>�ɼ��<MD<H������;��wf��^Y_ C�֭���:ϣ�*Y�<׍��l,W�}�;��A+��Yv�+��+��Q���X�Z�dyI���Մ=K�l�V��kΎ���K�����<���!�A�+K*c'��m^�
t����@�O,�z�ůw���<@--��]���k+�.������:�_���ј��A_��!�e)��X�q{��F�t��])�>�_8��� �T���W�}q+&�ݡ�R���`�
?��m��u��]i�;B,�cfۃgN܅���I��?����~3E��lP\�I��ܱ��f�X%Zߔ�Ȯ=b��"
���dǕ����v����,����8��}g��R	���'S,A8)ڕ}�ˡE�{;	�F*ڎT��t��4P\�?j�_8������.p��-P[3���c�S��
��R�o�0�_q��U��@l]�
u��!+Ǿ6.�/�/EU�'YY+�q��>�|rc��.J�7g��C�0.U����Bp�tIF+4"�!<F��6B�&hM!����@���W��k��F�`\*�<�2ͩ��Oq���x��~s�P�Pf���Y�T�֜���$���5ģZ���������E�٪����gw>��a�+���䣨�2�^�����z;;�6�����Ԫ�з%�!G����/uS�V�e���q�,�!��[4۵H��j��ܜla�$�*'����5)��!|�u����]+��I�Zy�0�aE��	r�(O7���n�e�d�6S=�A~��vL��)�&��k�����`�
�����w18M�{�?^?�N'�t�9�n�]6���� ?��Q�]��a��ӛ�����zD�w\]U�Nc�����ķ��X�n�F}�WL�
��S-�:��p�85l}(aE��M�]vwiY��"Z���Тz�Drg����,H�J�8)9Ө%�pD�
5�a���I�v.�\~��ӌ�?j�Xi$LP�bS�-��H���ax&U\� � �L��8��\����ã_�f�pj��2���L��1�d�E,u�il���rfJ8�,U���-���E%< ���<�f�!d<AAbf�$L����,E
\�}�woO��_���g��%-�F���_�z=�^̅!�,���\ȴ�0�;�{v����{��x^d�� �
ܟ1K�,���]�0AN>,��7C�~_ٴ\���3�f�:�pIF+`�  �`��xrA*�����*
� G˄���{N�/G�����8�:J_Гeo���ڑ՘�f��V���_a.
nt�A}�Y��&כg-�ݯ�](~K�Nax �5p��5�ۓ���r,��[(y7�c��>g�xQ-�5���P+>��{����T�(P}e�v��,2�~�����J!01\�3��:����%�Zm):+	xc:��٬)���E_�:���~|j��� FU!��k��j�&��8zv��ß9<j�9������u�I��(e�5W�>�5,8�D�}$�a6�ɔ(���r��%j�G����#�uج&���pQ���n�
�n�:6[�dw
��QCWۓ�&6�n	���9X���۔e�r���z�Y����z�7����ć��ᣛq�h�b�h�#�Al�o�Bm���X��bc�c���"`��]m�0^�>��}��n��tz/P[1k���l�
-�ДJ��v��e��0C 4�[{���X�u��ls��j�WN�&sw��I�k#����:�A޲i8�^�MsrK�Sv��/e/�4Ӫ��[+�^U#A؁%	�#����e��Ii��OOU�I7�5�2T��t�,����E����9f�������j��!�n�N��z�ܫ)o�W+o1�u*���x"Rk���h/t�F%;�W�3;���К!��� L��{sv5�r]0�Lm1N1�]Q�X򉎁��/+�
�M[�R�2-d�1@���	�1��!�VW�ޞC�ω��ݣ3gfK���fiJ:���y�dp\�B�}et����~o�
(��-����o�Zc���5���Ƣi�c%D���cSX�D!M�u
x��)M�����B�7C���Ҕ��0�Y�N���o�W/��h �#R�ZD_��ŝ-v$e�L,�F�|<v��S�ǜ�U$3��+4ˡv�p���n��ie3�ig�iW\|�J�.a���4��7���|�{�J0��v��1��^�4��D��xН�׎�}�|uW�)�b��ǟ�?T�/�EJ�$6
MouseEventCount#
�?
HA
�LD
XE
�ME
NF
��G*

KeyEventCount
?
�A
�xC
�D
�E;
NavigationEntryCount#
�@
�@
�@
HA
�A
�A
FB\
MRUIndexP
�?
 @
�@
A
�A
�A
B
�B
�C
�C
�xC
@�C
@�C
��C
@�C
�D
TouchEventCount

 @
4F7
NumReactivationBefore
?
�?
`@
�@
�A
�A!
TopDomain_1080024851943145123M#
TopDomain_15689501676488870256�"
TopDomain_15061790812729663598~#
TopDomain_17805263144043282746�"
TopDomain_15183327860286992060
MouseEventCount_6#
TopDomain_17609869936025638318�
Type_1�"
TopDomain_10119661862724640164G

MRUIndex_9"
TopDomain_3206887100623121722�"
TopDomain_10043033701369158400E!
TopDomain_959275671374652467� 
TopDomain_87712541284966463�"
TopDomain_1572676409482578135�

MRUIndex_8"
TopDomain_2684509497774788840�"
TopDomain_3871863902853417076�"
TopDomain_13201593719927070652k
IsPinned#
TopDomain_17665177956735407683�#
TopDomain_15894589896585942567�"
TopDomain_11085224173626070834S
SiteEngagementScore_70B!
TopDomain_1388128116188258854t
NumReactivationBefore_6/#
TopDomain_15460036257622057721�"
TopDomain_5161051873882288304�"
TopDomain_7427709185199481811�"
TopDomain_13012715934034554483h
TouchEventCount_1�"
TopDomain_2064774450264892649�
SiteEngagementScore_0:#
TopDomain_15847248848374708081�
NavigationEntryCount_0 #
TopDomain_17348514064360434852�#
TopDomain_15288598938443330327�#
TopDomain_17454475692079618781�"
TopDomain_4498139696238849296�"
TopDomain_9594404622941547504�"
TopDomain_9204579900384785527�"
TopDomain_12525798276078776067f#
TopDomain_15655412894497687330�"
TopDomain_9685155330727019174�"
TopDomain_11018654186523614761Q"
TopDomain_6035613466181606704�
NavigationEntryCount_2"#
TopDomain_17796737512117080128�"
TopDomain_6045732738424972004�"
TopDomain_11227683057626966116V
NumReactivationBefore_0)
TopDomain_11632560942001414[
SiteEngagementScore_50@"
TopDomain_5941799794948841680�"
TopDomain_5841942723928569023�!
TopDomain_196963497794912993�
MouseEventCount_2"
TopDomain_2851264494900985422�
PageTransitionIsRedirect5!
TopDomain_843676498139257074�"
TopDomain_4294201111699280567�"
TopDomain_9606618426864857338�!
TopDomain_1153398345655265072Z"
TopDomain_10895494351168426693N"
TopDomain_10169506825395800337H"
TopDomain_13235606415688235361n"
TopDomain_7449205003113069198�"
TopDomain_12138507100907984281c"
TopDomain_12128704406167545479b
NumReactivationBefore_1*"
TopDomain_4369365699833920337�#
TopDomain_18429447622638145680�
SiteEngagementScore_30>"
TopDomain_4804837807085259619�
ShowState_16!
TopDomain_698916636646710575�"
TopDomain_11164683519288964730U

MRUIndex_2#
TopDomain_17580878206960980545�"
TopDomain_6935756648522340603�
SiteEngagementScore_60A"
TopDomain_14596851351072705470y"
TopDomain_10921456545786979211P
NumReactivationBefore_3,"
TopDomain_1804284032727006986�"
TopDomain_5203230528484920842�"
TopDomain_12335924279508075969d
KeyEventCount_0
KeyEventCount_4#
TopDomain_15741269190621693221�
WasRecentlyAudible�
NavigationEntryCount_7'"
TopDomain_6508721319432249974�!
TopDomain_236703431990620330�#
TopDomain_17390321984555611993�"
TopDomain_2957965146093936771�"
TopDomain_8632220210146641000�"
TopDomain_13208729640320280584l"
TopDomain_12386390640692202738e#
TopDomain_17811530796309643159�#
TopDomain_16768701066384376478�"
TopDomain_6163045271141768870�"
TopDomain_2672907030994913228�"
TopDomain_13115516086556974343j!
TopDomain_878847704185202492�"
TopDomain_7088684986110897678�"
TopDomain_4009933873399061218�!
TopDomain_341490971205980837�
MouseEventCount_1"
TopDomain_4764263413547323863�"
TopDomain_2440596079597823666�"
TopDomain_8555518466344315990�"
TopDomain_8316249495056507568�#
TopDomain_15966429509789767021�!
TopDomain_1448229354234554080x#
TopDomain_16366079186907057253�
NavigationEntryCount_3##
TopDomain_18378977400083720013�"
TopDomain_8501429689397503793�"
TopDomain_6337103823310205182�
PageTransitionCoreType_21"
TopDomain_10187093199053808570I
KeyEventCount_3
MRUIndex_15"
TopDomain_5338723781413972714�"
TopDomain_4760987115333628632�
NavigationEntryCount_5%"
TopDomain_8144375594159422697�#
TopDomain_15262276248633613016�#
TopDomain_18300295044313409868�"
TopDomain_5160451677974969231�"
TopDomain_9664280485523735114�!
TopDomain_1368146020981450700p!
TopDomain_876199788100362630�
KeyEventCount_5	
MouseEventCount_3"
TopDomain_2968749863868578542�"
TopDomain_8723982126215208982�"
TopDomain_14157691472982757617u

MRUIndex_5"
TopDomain_7304754882072794192�!
TopDomain_324364537650936070�
MouseEventCount_5#
TopDomain_15387739340581110685�"
TopDomain_3860317998083780863�"
TopDomain_7350763718700977478�#
TopDomain_17318491964161906161�"
TopDomain_7063227438872759949�"
TopDomain_1946495666138444138�
SiteEngagementScore_10;#
TopDomain_15819600267779402594�
PageTransitionCoreType_83
HasBeforeUnloadHandler"
TopDomain_10758121499324064194L
ShowState_27"
TopDomain_13717026609825930643q
MouseEventCount_7"
TopDomain_9605309396967163933�
NumReactivationBefore_4- 
TopDomain_33819408664442396�

MRUIndex_7"
TopDomain_7049109217806271285�"
TopDomain_13473667061284296256o"
TopDomain_8256838480345576948�
MRUIndex_12
"
TopDomain_11281394909307332136X"
TopDomain_9646924245674468055�"
TopDomain_13771742413608550493r
SiteEngagementScore_80C"
TopDomain_14625437354194983248z
NavigationEntryCount_6&"
TopDomain_13834769092094238000s
SiteEngagementScore_40?
NumReactivationBefore_2+"
TopDomain_12558476351114645767g#
TopDomain_16812564669986576421�

MRUIndex_3"
TopDomain_11912199775964982622_
MRUIndex_10
MouseEventCount_0#
TopDomain_16079275975660711115�#
TopDomain_17705640974703232252�
TouchEventCount_2�
MouseEventCount_4"
TopDomain_10740419527460090491K#
TopDomain_17999381730064795300�#
TopDomain_16369899265487396589�
IsActive#
TopDomain_16341703993826111523�
SiteEngagementScore_20=#
TopDomain_18245469667301336119�#
TopDomain_15921862757681270712�"
TopDomain_11738965776604256531\"
TopDomain_8720606896994407571�"
TopDomain_11389434805263954430Y!
TopDomain_1304085646556006376i"
TopDomain_15005136786217271573|"
TopDomain_1874056532838985632�#
TopDomain_17950719759682742338�"
TopDomain_7114699737129879665�#
TopDomain_18337490325837093757�"
TopDomain_8079398500111676442�"
TopDomain_9499668011696157315�"
TopDomain_14233941029653936165v#
TopDomain_17251037843225226770�"
TopDomain_10901531562134450126O

MRUIndex_0
"
TopDomain_8429031694230093054�#
TopDomain_17093041278158597643�

MRUIndex_4"
TopDomain_9791677860763157788�"
TopDomain_8494204192682713966�"
TopDomain_10072413688749279773F#
TopDomain_16437285489292541054�
NormalizedMRUIndex("
TopDomain_9020261517444911033�
KeyEventCount_2#
TopDomain_15870042273117884100�#
TopDomain_17045289118324886784�!
TopDomain_510821771540594083�"
TopDomain_15045547456553872263} 
PageTransitionFromAddressBar4
KeyEventCount_1!
TopDomain_1035925084514834068J"
TopDomain_3110799877618283806�
ShowState_38!
TopDomain_651058769554286351�
NavigationEntryCount_1!#
TopDomain_16751120787332825022�#
TopDomain_16199790386872945279�
HasFormEntry
MRUIndex_16"
TopDomain_5436730130443146323�"
TopDomain_11954853327857560706`
TouchEventCount_0�"
TopDomain_11796274831969683171]#
TopDomain_17631324395650738667�!
TopDomain_752537756789258043�
Type_2�
PageTransitionCoreType_72
NumReactivationBefore_5.
ShowState_49
SiteEngagementScore_90D
PageTransitionCoreType_00
NavigationEntryCount_4$

MRUIndex_6"
TopDomain_2345074716881772422�"
TopDomain_3177707200991458183�#
TopDomain_16411198922429453306�"
TopDomain_2495968728959269770�"
TopDomain_12094168201145311450a"
TopDomain_2928222190293398513�"
TopDomain_11873006736009776549^"
TopDomain_8944327742448415689�"
TopDomain_5352397048417326769�"
TopDomain_14986263851399781883{"
TopDomain_14429980498988674617w"
TopDomain_1621665845362371393�"
TopDomain_9195558766026703544�"
TopDomain_5011259669684447045�"
TopDomain_11082551044701230453R"
TopDomain_3968615742235786342�!
TopDomain_726059442646517786�"
TopDomain_13216356480294047299m#
TopDomain_15487345791713004722�#
TopDomain_15516523711153697558�"
TopDomain_11279037034026214503W"
TopDomain_2023368772508865927�

MRUIndex_1#
TopDomain_17349310390648753489�
SiteEngagementScore_100<"
TopDomain_7746553357405203507�"
TopDomain_11149338271801532545T#
TopDomain_15449547182571591448�"
TopDomain_2311961509270792991�*Type*PageTransitionCoreType*SiteEngagementScore*	ShowStatep
MRUIndexd
?
�?
 @
`@
�@
�@
�@
A
�A
�A
�A
�A
�A
�A
�A
B
B
�B
�B
�B}
NumReactivationBefored
?
�?
 @
`@
�@
A
A
(A
XA
hA
�A
�A
�A
2B
BB
^B
�B
�B
�.C
�=C~
NavigationEntryCount_1d
 @
�@
�@
�@
A
A
(A
hA
�A
�A
�A
�A
B
B
&B
*B
.B
6B
BB
FBG
TouchEventCount_12
�?
 @
@�C
��C
��C
4�E
��E
��F
�G
�Gw
MouseEventCountd
�B
�B
�B
�B
�B
@�C
@�C
@�C
@�C
@�C
��C
P�D
�D
��D
�D
��E
<�E
��G
�G
 >�Hp
LRUIndexd
?
�?
 @
`@
�@
�@
�@
�@
A
A
(A
XA
hA
�A
�A
�A
B
B
�B
�B|
NavigationEntryCountd
 @
�@
�@
�@
A
A
(A
hA
�A
�A
�A
�A
B
B
&B
*B
.B
:B
BB
FBr

MRUIndex_1d
?
�?
 @
`@
�@
�@
�@
A
�A
�A
�A
�A
�A
�A
�A
B
B
�B
�B
�Bw
KeyEventCount_1d
?
�?
 @
xA
�C
�C
�C
�C
�#C
�(C
�jC
�lC
�mC
�qC
p�D
��D
0�D
��D
E
h	EE
TouchEventCount2
�?
 @
@�C
��C
��C
��E
��E
�qF
O�F
|�F
NumReactivationBefore_1d
?
�?
 @
`@
�@
A
A
(A
XA
hA
�A
�A
�A
2B
BB
^B
�B
�B
�.C
�=Cr

LRUIndex_1d
?
�?
 @
`@
�@
�@
�@
�@
A
A
(A
XA
hA
�A
�A
�A
B
B
�B
�Bu

KeyEventCountd
?
�?
 @
xA
�C
�C
�C
�C
�#C
�(C
�kC
�lC
�mC
�qC
p�D
��D
0�D
��D
E
h	Ey
MouseEventCount_1d
�B
�B
�B
�B
�B
@�C
@�C
@�C
@�C
@�C
��C
P�D
�D
��D
��D
��E
<�E
��G
�G
 >�H
LRUIndex_1_5L"
TopDomain_1550138802547026898�$
TopDomain_1_7350763718700977478�
KeyEventCount_1_4!
NumReactivationBefore_11�
MouseEventCount_13�
NormalizedMRUIndex_1�
NavigationEntryCount_1_10�
NavigationEntryCount_1�
LRUIndex_102%
 TopDomain_1_10332674619623371648�
MouseEventCount_1_4�

LRUIndex_1_12@
MRUIndex_16b"
TopDomain_5436730130443146323�
NavigationEntryCount_12�!
TopDomain_752537756789258043�

MRUIndex_1_14l
KeyEventCount_11	
NavigationEntryCount_1_1�
NumReactivationBefore_5�
PageTransitionCoreType_0�$
TopDomain_1_7730587127592719016�
NumReactivationBefore_15�
NavigationEntryCount_4�
WindowShowState_4�"
TopDomain_3177707200991458183�"
TopDomain_2495968728959269770�
NavigationEntryCount_1_19�
NavigationEntryCount_1_20�"
TopDomain_2928222190293398513�
LRUIndex_135#
TopDomain_11873006736009776549�
KeyEventCount_8.
NumReactivationBefore_1_16�
NavigationEntryCount_1_4�
NumReactivationBefore_9�"
TopDomain_9195558766026703544�%
 TopDomain_1_11164683519288964730�

LRUIndex_7W#
TopDomain_13216356480294047299�#
TopDomain_15516523711153697558�
NumReactivationBefore_1_13�$
TopDomain_1_3110799877618283806�

MRUIndex_1[
NavigationEntryCount_1_14�

MRUIndex_1_20s#
TopDomain_17349310390648753489�
SiteEngagementScore_100�#
TopDomain_11149338271801532545�
LRUIndex_113
NavigationEntryCount_1_3�
WindowShowState_1_1�
NavigationEntryCount_1_15�
LRUIndex_1_1="
TopDomain_3834575017022411373�"
TopDomain_1_33819408664442396�
NumReactivationBefore_1_14�$
TopDomain_1_7063227438872759949�
WindowType_1_1�
NumReactivationBefore_1_3�

MRUIndex_1_19q
NumReactivationBefore_12�
NumReactivationBefore_1_5�
WindowShowState_1_3�
SiteEngagementScore_1_30�#
TopDomain_10043033701369158400�
MouseEventCount_1_5�
MouseEventCount_1_19�%
 TopDomain_1_10299688583541641772�
NumReactivationBefore_14�

MRUIndex_8�
KeyEventCount_1_19
WindowType_1�%
 TopDomain_1_18337490325837093757�
IsPinned
MRUIndex_1_5v
MouseEventCount_18�
SiteEngagementScore_70�
NumReactivationBefore_6�"
TopDomain_5161051873882288304�"
TopDomain_7427709185199481811�
SiteEngagementScore_0�#
TopDomain_17454475692079618781�
NavigationEntryCount_1_7�"
TopDomain_4498139696238849296�
MRUIndex_1_9z
SiteEngagementScore_1_60�
LRUIndex_1_7N
SiteEngagementScore_1_100�
NavigationEntryCount_2�
KeyEventCount_1_0%
 TopDomain_1_17950719759682742338�
MouseEventCount_1_10�
KeyEventCount_13
NumReactivationBefore_0�
SiteEngagementScore_50�%
 TopDomain_1_11281394909307332136�
TouchEventCount_1_6�
MouseEventCount_1_18�
TouchEventCount_1_4�$
TopDomain_1_5160451677974969231�
KeyEventCount_17$
TopDomain_1_6035613466181606704�#
TopDomain_10169506825395800337�#
TopDomain_10895494351168426693�#
TopDomain_13235606415688235361�
MouseEventCount_1_15�
NumReactivationBefore_1�%
 TopDomain_1_17390321984555611993�

MRUIndex_1_12j
SiteEngagementScore_30�%
 TopDomain_1_12068861996920614845�%
 TopDomain_1_13088206131761312419�%
 TopDomain_1_15262276248633613016�

MRUIndex_2{

MRUIndex_1_10h
SiteEngagementScore_60�
NumReactivationBefore_3�#
TopDomain_10921456545786979211�
MRUIndex_1_0f
LRUIndex_1_9P"
TopDomain_5203230528484920842�
SiteEngagementScore_1_90�#
TopDomain_12335924279508075969�$
TopDomain_1_5436730130443146323�$
TopDomain_1_1035925084514834068�
TouchEventCount_7�

LRUIndex_1_18F
LRUIndex_18:
MouseEventCount_15�%
 TopDomain_1_15966429509789767021�
PageTransitionCoreType_1_7�

LRUIndex_1_10>

LRUIndex_1_20I#
TopDomain_17811530796309643159�%
 TopDomain_1_13216356480294047299�"
TopDomain_6163045271141768870�"
TopDomain_2672907030994913228�
MRUIndex_1_8y
KeyEventCount_12

NumReactivationBefore_1_11�"
TopDomain_4009933873399061218�!
TopDomain_552305926330639175�
NavigationEntryCount_1_12�
NumReactivationBefore_1_10�
TouchEventCount_1_3�$
TopDomain_1_2851264494900985422�#
TopDomain_15966429509789767021�
NavigationEntryCount_3�%
 TopDomain_1_17454475692079618781�

LRUIndex_6V"
TopDomain_6337103823310205182�
WindowShowState_1_4�
MRUIndex_17c#
TopDomain_1_552305926330639175�
LRUIndex_19;
KeyEventCount_3)
MRUIndex_15a
MouseEventCount_8�
NavigationEntryCount_18�
NavigationEntryCount_5�"
TopDomain_8144375594159422697�
NavigationEntryCount_13�
MouseEventCount_1_7�
NumReactivationBefore_1_0�$
TopDomain_1_1946495666138444138�%
 TopDomain_1_11978343504809443493�%
 TopDomain_1_15516523711153697558�
MouseEventCount_3�#
TopDomain_14157691472982757617�%
 TopDomain_1_12717776843354106340�#
TopDomain_13088206131761312419�
KeyEventCount_1_17!
TopDomain_324364537650936070�"
TopDomain_7350763718700977478�
LRUIndex_124
TouchEventCount_1_1�
MouseEventCount_1_2�%
 TopDomain_1_11873006736009776549�
MouseEventCount_16�$
TopDomain_1_6027290962994608186�
NumReactivationBefore_1_2�%
 TopDomain_1_17999381730064795300�
MouseEventCount_7�
NumReactivationBefore_4�"
TopDomain_7049109217806271285�
NavigationEntryCount_1_17�
MouseEventCount_1_0�#
TopDomain_11281394909307332136�$
TopDomain_1_1304085646556006376�
MouseEventCount_19�%
 TopDomain_1_10921456545786979211�
SiteEngagementScore_80�#
TopDomain_12717776843354106340�#
TopDomain_1_878847704185202492�%
 TopDomain_1_17796737512117080128�

LRUIndex_3S$
TopDomain_1_9594404622941547504�

LRUIndex_8X%
 TopDomain_1_13012715934034554483�
WindowType_1_4�
MouseEventCount_1_12�
LRUIndex_168
SiteEngagementScore_40�
NumReactivationBefore_2�#
TopDomain_12558476351114645767�#
TopDomain_14490524350918538769�#
TopDomain_1_236703431990620330�

LRUIndex_11%
 TopDomain_1_13717026609825930643�%
 TopDomain_1_16812564669986576421�

MRUIndex_3}#
TopDomain_11912199775964982622�
NavigationEntryCount_15�%
 TopDomain_1_10043033701369158400�
MouseEventCount_12�
MouseEventCount_0�
MouseEventCount_4�
KeyEventCount_1_9&
NumReactivationBefore_1_6�$
TopDomain_1_7304754882072794192�
MouseEventCount_1_1�
KeyEventCount_1_13#
TopDomain_15921862757681270712�
TouchEventCount_5�
TouchEventCount_4�
KeyEventCount_1_3 %
 TopDomain_1_12558476351114645767�
TouchEventCount_1_8�
SiteEngagementScore_1_80�%
 TopDomain_1_13235606415688235361�
NavigationEntryCount_16�
TouchEventCount_10�
PageTransitionCoreType_1_2�
KeyEventCount_6,#
TopDomain_17251037843225226770�$
TopDomain_1_6163045271141768870�%
 TopDomain_1_15288598938443330327�
MouseEventCount_1_6�
NumReactivationBefore_19�$
TopDomain_1_7049109217806271285�#
TopDomain_12068861996920614845�#
TopDomain_10072413688749279773�#
TopDomain_1_435778926935426400�#
TopDomain_1_726059442646517786�
MouseEventCount_1_14�#
TopDomain_17045289118324886784�#
TopDomain_1_651058769554286351�
MouseEventCount_1_11�
LRUIndex_1_2H!
PageTransitionFromAddressBar�"
TopDomain_1035925084514834068�
NavigationEntryCount_17�
KeyEventCount_1_16
KeyEventCount_15

MRUIndex_14`
PageTransitionCoreType_1_0�
NavigationEntryCount_1_9�"
TopDomain_3110799877618283806�
NumReactivationBefore_8�
PageTransitionIsRedirect_1�%
 TopDomain_1_11954853327857560706�
KeyEventCount_1_5"!
TopDomain_651058769554286351�
NavigationEntryCount_1_18�
KeyEventCount_9/%
 TopDomain_1_11389434805263954430�%
 TopDomain_1_14490524350918538769�
HasFormEntry#
TopDomain_11954853327857560706�
TouchEventCount_0�#
TopDomain_17631324395650738667�%
 TopDomain_1_17631324395650738667�
MouseEventCount_1_8�
NavigationEntryCount_1_13�
PageTransitionCoreType_7�
NumReactivationBefore_1_1�
SiteEngagementScore_90�$
TopDomain_1_8144375594159422697�
TouchEventCount_1_5�
MouseEventCount_10�
TouchEventCount_1_2�
NumReactivationBefore_1_15�
KeyEventCount_20(

MRUIndex_6�
SiteEngagementScore_1_20�#
TopDomain_16411198922429453306�
KeyEventCount_1_7$$
TopDomain_1_9664280485523735114�
KeyEventCount_7-!
TopDomain_435778926935426400�

IsPinned_1
NavigationEntryCount_20�
WindowIsActive�
SiteEngagementScore_1_50�
MRUIndex_1_6w
NumReactivationBefore_1_7�

MRUIndex_1_13k!
TopDomain_726059442646517786�
NavigationEntryCount_11�
MouseEventCount_1_16�#
TopDomain_15487345791713004722�
KeyEventCount_1_15

LRUIndex_1_14B
LRUIndex_1_6M
TouchEventCount_6�$
TopDomain_1_6337103823310205182�$
TopDomain_1_2311961509270792991�
MRUIndex_20|
KeyEventCount_1_1"
TopDomain_2311961509270792991�%
 TopDomain_1_10072413688749279773�$
TopDomain_1_5161051873882288304�
TouchEventCount_1_9�%
 TopDomain_1_10169506825395800337�#
TopDomain_15061790812729663598�
KeyEventCount_19
KeyEventCount_14
KeyEventCount_16

MRUIndex_1_16n$
TopDomain_1_1448229354234554080�$
TopDomain_1_4009933873399061218�
NavigationEntryCount_10�
MouseEventCount_6�#
TopDomain_10299688583541641772�$
TopDomain_1_2495968728959269770�
LRUIndex_1_0<

MRUIndex_9�
LRUIndex_157
MRUIndex_11]
SiteEngagementScore_1_0�
LRUIndex_20R%
 TopDomain_1_17349310390648753489�
WindowShowState_3�
WindowType_1_2�#
TopDomain_13201593719927070652�
NavigationEntryCount_1_11�
MouseEventCount_14�

LRUIndex_9Y%
 TopDomain_1_13208729640320280584�#
TopDomain_13012715934034554483�
TouchEventCount_1�

LRUIndex_1_17E
NavigationEntryCount_0�#
TopDomain_15288598938443330327�"
TopDomain_9594404622941547504�$
TopDomain_1_4369365699833920337�"
TopDomain_5501128538880319432�
KeyEventCount_18"
TopDomain_6035613466181606704�#
TopDomain_17796737512117080128�$
TopDomain_1_3834575017022411373�
MRUIndex_18d
KeyEventCount_1_6#
WindowType_2�
WindowShowState_2�
MouseEventCount_2�"
TopDomain_2851264494900985422�
PageTransitionIsRedirect�%
 TopDomain_1_18429447622638145680�
TouchEventCount_3�
NavigationEntryCount_8�#
TopDomain_12138507100907984281�%
 TopDomain_1_13201593719927070652�
NavigationEntryCount_19�"
TopDomain_4369365699833920337�#
TopDomain_18429447622638145680�%
 TopDomain_1_15487345791713004722�$
TopDomain_1_9195558766026703544�%
 TopDomain_1_17045289118324886784�
KeyEventCount_1_2
SiteEngagementScore_1_70�

MRUIndex_1_18p
MRUIndex_1_2r#
TopDomain_11164683519288964730�
NavigationEntryCount_14�"
TopDomain_6027290962994608186�%
 TopDomain_1_15061790812729663598�
MRUIndex_19e
WindowType_4�
NumReactivationBefore_13�

LRUIndex_1_11?
KeyEventCount_1_10
KeyEventCount_10%
 TopDomain_1_11149338271801532545�
NumReactivationBefore_1_19�
NumReactivationBefore_17�
SiteEngagementScore_1_10�$
TopDomain_1_4498139696238849296�%
 TopDomain_1_16411198922429453306�
KeyEventCount_0%
 TopDomain_1_12138507100907984281�

LRUIndex_1_13A

MRUIndex_1_11i
KeyEventCount_4*
WasRecentlyAudible�
NavigationEntryCount_7�#
TopDomain_10332674619623371648�!
TopDomain_236703431990620330�#
TopDomain_17390321984555611993�
KeyEventCount_1_11
NumReactivationBefore_1_8�

LRUIndex_1_16D
LRUIndex_1_4K#
TopDomain_13208729640320280584�
NumReactivationBefore_18�

LRUIndex_5U
TouchEventCount_1_10�!
TopDomain_878847704185202492�
NumReactivationBefore_1_12�
MouseEventCount_1�"
TopDomain_8555518466344315990�"
TopDomain_1448229354234554080�#
TopDomain_11978343504809443493�
WindowShowState_1_2�$
TopDomain_1_3177707200991458183�
PageTransitionCoreType_2�
NumReactivationBefore_1_9�%
 TopDomain_1_11912199775964982622�
TouchEventCount_9�$
TopDomain_1_2928222190293398513�"
TopDomain_4529616190536582584�$
TopDomain_1_3860317998083780863�
MouseEventCount_1_3�
NavigationEntryCount_1_2�
NumReactivationBefore_1_17�
MRUIndex_1_4u#
TopDomain_15262276248633613016�"
TopDomain_5160451677974969231�"
TopDomain_9664280485523735114�
WasRecentlyAudible_1�#
TopDomain_1_752537756789258043�
KeyEventCount_5+%
 TopDomain_1_17811530796309643159�

LRUIndex_2Q

MRUIndex_5"
TopDomain_7304754882072794192�
MouseEventCount_5�
TouchEventCount_1_7�"
TopDomain_3860317998083780863�"
TopDomain_7063227438872759949�
LRUIndex_146
TouchEventCount_8�$
TopDomain_1_1550138802547026898�"
TopDomain_1946495666138444138�%
 TopDomain_1_12335924279508075969�
SiteEngagementScore_10�
PageTransitionCoreType_8�
NavigationEntryCount_1_0�
HasBeforeUnloadHandler#
TopDomain_1_324364537650936070�#
TopDomain_13717026609825930643�
KeyEventCount_1_18
NumReactivationBefore_20�
MRUIndex_1_1g
KeyEventCount_1_14
HasBeforeUnloadHandler_1 
TopDomain_33819408664442396�

MRUIndex_7�
MouseEventCount_9�
PageTransitionCoreType_1_8�
MRUIndex_12^

LRUIndex_00
NavigationEntryCount_1_8�$
TopDomain_1_4529616190536582584�

LRUIndex_1_19G$
TopDomain_1_8555518466344315990�
WindowShowState_1�
NavigationEntryCount_6�%
 TopDomain_1_14157691472982757617�
LRUIndex_1_3J
MouseEventCount_11�$
TopDomain_1_2672907030994913228�
NumReactivationBefore_16�
KeyEventCount_1_20
KeyEventCount_1_12
MRUIndex_13_
LRUIndex_1_8O#
TopDomain_16812564669986576421�

MRUIndex_1_15m
MRUIndex_10\
TouchEventCount_2�
NumReactivationBefore_7�#
TopDomain_17999381730064795300�
KeyEventCount_1_8%
SiteEngagementScore_20�%
 TopDomain_1_15921862757681270712�$
TopDomain_1_5203230528484920842�"
TopDomain_8720606896994407571�#
TopDomain_11389434805263954430�"
TopDomain_1304085646556006376�$
TopDomain_1_7427709185199481811�
MouseEventCount_1_9�$
TopDomain_1_8720606896994407571�
SiteEngagementScore_1_40�#
TopDomain_17950719759682742338�
NumReactivationBefore_10�
TouchEventCount_1_0�#
TopDomain_18337490325837093757�
MouseEventCount_20�
NumReactivationBefore_1_18�

LRUIndex_1_15C
WindowIsActive_1�
MouseEventCount_17�

MRUIndex_0Z%
 TopDomain_1_17251037843225226770�$
TopDomain_1_5501128538880319432�
NavigationEntryCount_1_6�
NavigationEntryCount_1_16�

MRUIndex_4~
NavigationEntryCount_9�
HasFormEntry_1#
PageTransitionFromAddressBar_1�
MRUIndex_1_3t
MRUIndex_1_7x
NormalizedMRUIndex�
LRUIndex_179
KeyEventCount_2'

LRUIndex_4T
NumReactivationBefore_1_4�
MouseEventCount_1_20�
NumReactivationBefore_1_20�"
TopDomain_7730587127592719016�

MRUIndex_1_17o%
 TopDomain_1_10895494351168426693�
KeyEventCount_1
MouseEventCount_1_17�
MouseEventCount_1_13�
NavigationEntryCount_1_5�*
WindowType*PageTransitionCoreType*SiteEngagementScore*WindowShowState*WindowType_1*PageTransitionCoreType_1*SiteEngagementScore_1*WindowShowState_1/* Copyright 2019 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */
import 'chrome://resources/cr_elements/shared_vars_css.m.js';

import 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

const styleElement = document.createElement('dom-module');
styleElement.setAttribute('assetpath', 'chrome://resources/');
styleElement.innerHTML = `<!--_html_template_start_-->
<!-- Common styles for signin-related tab modal dialogs. -->
<template>
  <style>
    a {
      color: var(--cr-link-color);
      text-decoration: none;
    }

    body {
      margin: 0;
      padding: 0;
    }

    .container {
      color: var(--cr-primary-text-color);
      width: 448px;
    }

    .top-title-bar {
      align-items: center;
      border-bottom: var(--cr-separator-line);
      display: flex;
      font-size: 16px;
      height: 52px;
      padding: 0 24px;
    }

    .action-container {
      display: flex;
      justify-content: flex-end;
      padding: 16px;
    }


    .action-container {
      flex-flow: row-reverse;
      justify-content: flex-start;
    }

  </style>
</template>
<!--_html_template_end_-->`;
styleElement.register('signin-dialog-shared');
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">

<!-- Common styles for signin-related tab modal dialogs. -->
<dom-module id="signin-dialog-shared">
  <template>
    <style>
      a {
        color: var(--cr-link-color);
        text-decoration: none;
      }

      body {
        margin: 0;
        padding: 0;
      }

      .container {
        color: var(--cr-primary-text-color);
        width: 448px;
      }

      .top-title-bar {
        align-items: center;
        border-bottom: var(--cr-separator-line);
        display: flex;
        font-size: 16px;
        height: 52px;
        padding: 0 24px;
      }

      .action-container {
        display: flex;
        justify-content: flex-end;
        padding: 16px;
      }


      .action-container {
        flex-flow: row-reverse;
        justify-content: flex-start;
      }

    </style>
  </template>
</dom-module>
��is�6���v�vlJ��ıcoɛ�#�q$5uvv2	��xhI����^���L��û/�x��<]0bsϽ>x�b:�U��y��ْ�+3��O�"��42�ޔs+b���TOL�/��e� �{4�OiH9��͊e;��e.����bŤ��(��yf
�gԄ��8%�MÈ�Z��s��w�u&�~zאc��z��d��F�����cr��d����\ǟ���W���.�l�`�����a���.��EA,jQ�@u~3��]}��:"*����E:��IKm�!c���rb�tcnaT']�%(��Y? ��$b$x �v""��&#�j�,�I�)������|X�mʉA}2e���F�z7��<8.��W���i`��O��������hJ�� ھuA���:4b�%��ig�.HSU��C`l��/�zy�tp�o�1M�G 5�h�����O����������
��N��aꙙm0�Շ�!��%<z��FJ���AX'~���#��G.}�!�z�A��`x����6�T:8���G��.X�$E� �5=:k����;?F�VfZ��)i�;�ߛ�K!��XA`�L�B�*-U��+�i�#4QHk�H�͙b3�*�	y�x�/�₴:�b)�d7�>w�>!��R1�d�;��,=�p3O�ΤMl����Э�uB����2���L�Ɯ~u5��>?%�stՑ��8ULf�� �IW����+������0֯3J�<�\���i���T.b��s��5W�k�N���0
0ٺ�����)�e!8N�f�UC�1
�\�8t�L�酈�F�h�,=�r
1�s�����o�/�U�Wm<H���ק��f7��X�C3���ہg�����a��m���\i�?\
��}4�_���s8=�e}�O[g.���?~kN?L�ﭯ_��~�s>͖�����7W�A�}�|�H���<n���^7�_i���f��]Xs����jii�[�G�k�������^�MV]�v���Xk�]K�u�.{����؈�Q���:me�`}��'-�������]����p|�R��.�^���﹖vR}fpm�Yݎ
�;��Š���؂u��p�I�����w�6��ϳ�L��ߎo��{dBU��4�������-��.�Vx��Fr;Z��n��>�5�hs-�9n�s�?��Π��������yz�2@7BN�����֨�t����q�?x�g|�9:��]�zOMA���g�x�Wv_���f�k��&���]�n��c`�+��3���0�����_j#�>sY��ck��Б/s��#��&اЃ��_��X�5��=�V`#�!�df��@'�
����h��I��&�!�
���XO�*/����7*���Mo���|��Ψ[�K�?�WK��!|K�:�]I��Vw����T�0�v뉧u;괇�
\���q)�]�|G8��d��e�:˜n�������U+���|b$&��m���8���3�!.�f��l�P_F�>t�jj����9�Ɵ#��=X���A�[���o4o?hkgG�>Yi�
6�7u���o�ϡovt5YA<,������@|�o��r����������C�v��7w����3\u·-��S��������l��MHV��wY�4�i�'�t)���W�Ws����QzS)�E)({Ӓ|��Y9"�3�d!�Y{,�^���/Wn�K���*�%���r�ZS�ٯ
�Y!جԈ�`�՚
jy��=�)I`k໠;HD7�X�	
5��5��>�5鹓���
C���\�-HBG��
��}�:?G�T��s��W��,Oe��
��Z�Ӄݩ;1@nD�^��!�)F���n���d�Z/`���{��ЪBD^cg��؟�4M*!�(��u�`�+�i]Vm��21���)�p�H�@��v�*ˮ�â

E���|Sb{Q��o�e�2X �鮉���B)"SrV��L~��. v�eS:_���>ַH���-\�{�ᑢa��y�4U�5@Y�h��h��Q�i�
‹,�cF��4�9�?��@��.,w�2�NE6>%�D.��fZ��z�٣5��rk
�Iȫ�E�x��Z�߁��NJ
���2:�6��I�����#<���`V������6	Z��sHIB�X�p���Xħ��/��C�8��C��&��j�'�|�ָ�#@�m��u~����r$��˶ȷ
��<��$h��!���f�H��	���lWZ��Bh�0,��$)��=����M���%	�=P ����1� ��xx3M�o#<[0���
�lD�}Lq�#HC��ӟ(��?	�+KU������~�,�?��8�(�Z	�{�5��݊�E�!��p#�g�7_����J�ٜ�J������
��ޢ�i�6�YȼuE��WR����i$�m
��X��Q�p��G�����e��1�)�O�d�u=����e*Ψl�5U���;�Y� �^<6$���c݌���R/�DžV���y���*xNq��~�m����ET��`��3���l�,��(_z�l&�=q"�Qj=7FĮI��dk�D����ŝ��M�:��bk�&��.�^�XG��&��\�[��9�fU�mo4=�Fe�D���U����[�{K�/%��r���gSA�5���N��/G�A5��3�X���@^��Vv����m��6TV���wx��n���P_5�?Q��L��
ۭu'�L|S�r�Na�v)�`.�V�,!d<����'���j�V֛��?q�po[��?�5�ue
|:xאM��-�A�Z�+?�E�s��Rg_���bc-r�܀�2�/q���1긞��?:�z��F`��"�v������l��Ío�b��\ �����ob?�s�>����1������%�!��]#�������R���q�������%�\|�A'ίj��w
���f���yL�� ��	H7�B�)xAFa_��X�/w��AIx��峵B%R�٭�j�z�]o�r*�k,
 ��6_9�%�5�"3
�i�&Ͽ�1h���~D{P|��Bs�?r�7[�d/����T�1�S����-��̼L{��qv_�3�]PU�J�E��.������
��t��ÍE���-��<�T��p���@�v����	s��j�l!~$}�ڐ��<mڣ	��mf���o���г�1g�1i8�yʼnu�{&"<3�Y�&Qh�03����,�,T丗��Pv���
��/�`y��\�L�/�$�����Љ w���k�!���ױ�d��6�JPQFæ��p�x��A��u~ޝ���Ǎl-���t9�/;:(����*��_ٵ�_��*��q��\�~�>V
�h�%���ͣ�`*�7�U=����>�mFa�@�1x��_�A��‰M��+����y�9,4��N]p�+�+
���T�sk��M��3/E_S����bi�d�:��_�dM}�o@��A��vn`�.%���r<�jd
OC���}ޱ^6G��� ���
w�>��H�4̢@t�{Ax�N�!��7f�D�q��wr@&�;p
m�� ��������!�ȟD!4$�){}�}F�=
���E�r�����w0��2��Ӄ����'E!C�J�O�b�B�$�T=�m,���X���@�fl�|�k�S��P�L�x9���0Týi�BK�.�=,�F�o�(&?Nc�w�����o��4���!/��N��u+��U�o�6���f�hD���*����
�ŀd����iją�����{�d�q�a@���ݽ�G���r�kJ[��ҽ���*�nqk�'�V��i���~�}�����[��ӫB� /�6hW�֮���Za%^���i9��K)��(WCcwM�h�Pj\��y�U��x�ѨV�hƹ1cW�W�k�Jk�V<�A��\���V5;-���$�gp_"�:(�Vp��Ri���7���8���Z�-��.+�#��B=���C��߽|J�"ǚ�ْY�Y
:��jk��q�Oo?|��k!��q�\��
-���O0$#�����|<d��� �`� l�V�
L��Z)aX��`��ºi�
SH�o����
�`p֐��M�+�t`�Ie�L?�|o�����ЎH
��������IF�1���tr����-h+��P��w�$��'WN�$G���C�t���,��X�t!� S֪*���
+Ϫ�(�#�~IΟ�P�<I����L�˴��cq��GDv�F]HZ���c�4s'#��+������Ji���O�//	~��g3/$��l��]<�L���d�M��<��X�8��'@�8�戣p�l!�4���Ԫ���z$�ېջ3v�9�zю�	�N"�;9uH&[(+��2��pJ�c��G���	�ieJ��d���~O�9m7k�`��l���$3%Q�@Eb�c�Y?vPkJ0�i�;�ιE�r���5d��s�zku�o����}��q�J�A{*%�j�B3Jz�6�R���N�_؛�y
�a����=s���į"�4�K�/�g�b�k�=���1f��1�����2�|�%�*W�Zi���j&׈t5* �=�I���7�Ǥ�TRfL��	^Hy�j'W�i���2�;>�7�Ϲ���8��q�㮷�G�����rɌ�fաP#X�q��~ϲ?h�L���\Ds���h|�]��د�־C���M��O�L���s�S��՗>�z�M{]���R�n�0}�W\i�ڢB��L��.�E�hE��T!ǹ�����T��K�Z��UZ��9�>�:�Ȭ�V��`�|�L ��5��Ğ����RВXth��Ё�C0K !8�-G�@�ai�j, ���n�u�UJrԵ�#�LC����x]��9t4��M`)����J�S�3�*mC�2"�E���������97��>��Ԃ�e�{�]'I�L?�f��\�G"�kdt,ɤ��l���"�ܔ�T�1��\�}�_�9����ryB����زb%F�}�|%i���[uʛ�a�u���x�ȾO~N��v�ģ�o���t|�rKJ��6�����͑�psvȓ���]���ׄ���f�1�T_[����}C����7��?�F�,���<Ko����7:�
�L�}g��;�w�H����fv���6��tzW @��!/o��B*t�	�e������m�{z�wv�NlT��껯*��o���Fh[�|��"TK���P�C��w���Р����R�5I��B������5m�7ٗ�PV
���_x��#aɎ~��?G��}�YC�lʄj�~���ps�oCZ������l���vwGp�s�*[�
@�!�=�	������C�1���]
ܧ�7ċ���a�	��"��E(���rc���wC9D�4G�v�C6D�Xv���%l:!��p �~����!���ĕ-'Ў컔�+"p3H):1�҈��ڄ�=����%���0�t�}S�]�qT#��n�ȉYA
<YE��UH�a����N�wd|�xba&h��q�P�xbX���G���Cܥ��3�>��I$�LVBx�ư��8�d��@?����+k@�'R첱_�E�u��u#$���L���-e
ߵadt��4�\:1@�F����,�%龁�*���:�� �)�Bf���q�B�9A�"�� |1��9�
ƽ/��`�#,�V�?���O���b�⁾����Ъ����<�E>R���'Y>1f���ZՊ0o�"ފ� +31U`�d�2f,R�9�&#Q"@�,�	���#�h�����O��	�įA�#���;��rdӑ4R���"�~�r
��������
�BV���'pHH�4�"%�8�Bf���z4�D�[Bl!R�(0���	��X����r��&�R��/�1���Q�!~E�7����`��p��+d]>T�B���	<�uK|��|����}C�O���_�P�ǹw��O����#�WSY�����f2�n��<Esc�hn|/kZ:�d����������Q�x��s���H"k�k��Pd3��O��w���l����@�Ă�����1Yh`~$�?��P,"�O�;(�AP�A�o�ȑ�hG�t�/Ȃ�>��t�r+��n%5�{%R�+�L<E�BV׊B�u(6`�RW�@8�o�FTv@J"�I; ��j��$�D6�@TH�K��R �<M�^��]RTT�r�B��1�UHB��H�{ JU�xY/�~�9��!�A�@4��(��r��0$d9�{��J�"h�?�� ���a��Y@�������c�r�Lܙ�|ψJ��H ����jp���E\"?��L	GF�@�Sb��"��?2����sA�٤|N�z��s��?2�J��9���]��u��x��6O��m�(t�@WAB�}��w�Fy�qńa�x�R��<Y�|�Z�C�!}S���"�F��93�d���4�Lf?��'?�KK�[*l7;<y���c��ǁ�s"���X�N]6,i��KmF�Y�cѨK��x9'w�Y?���u	�&����;-D�Zt���˨tZR1a$�Q�V�ho,��?��-�e�f���p+I�v۴\р��
��3�:�L���-c{�fAn��@m�FP�6d�n��1m4�Ϫ�ovu]����(%���Sl�)=��V��"h�2N-��,X��9tȍȻ�_�ט��y�C��>�|�I��������p������QsS�7˘	ho={3�ב�Ob8�^K(z���r�7!R��NT��*ښ������z�����ebi)WI�Htu�+�RѪ��Z�j�-TL���؀[�7f;�̬g����~]R[��.V��&��p�&}ig�c�<���n%�خO�Q:G��k���ǭDHV����s<�m��Yi{[T�+-����h	J���y�A�|@f�AEJ=�͇�^�]	�\9�ymv����N��-Ƣ��E�iK|c,גڼ�;����I��k�:{��
��a�T�?�ÄD��)S�6�X��ꬠ�`鰥p����]�b�]��u��~�jM%w�'R���b�g�NR有��f�S_7
��ע�f���p"˷;�H�K��Ű̠�+TW����/��T=x�v�͏�lV�ޡp,�6��Q*�Y��^��2(�ʹZ���`�Ҙ���8k�H�4oJ5�I�D^�#��x�m-�2�%���xj2��l��gkH҈�ǰ�W��g�u~�������y�-n��C�|�Z�i�;WoJ*�N9*qY��K0]�|�n�w۲�>2�N��jm&ݫJ-�7��W�#��u�X�Iw9dC�W��`&�� �����ڒoQ�a��g�,�H�n9�I��0�fG��Dh�n��|b�T��mY�<��l�]؝���m/ة�@s����@"�1U�Z�t;5V,���0n(�l��a� ��,{�mĭ���pUꉢ�4��!�Z��hs�,[���%�iK�B�����Z(��m�s
=9��v}������n��AAi-�RYu��ՋaX��T��k�����V�|�6Kp�Z��(Y5�^�2w�3�W�����fh�Ae�,�2�h�$Ѱ-�1�5�f�[μ�V��`*���Kjk��R���G��*��
��ɸW���Lԃczq�B����t�R�^�c07�V���(��������T���F���
�QӘ�L����ZVt�n��� �X�����=ڕ
F�v���=��`Iݣ��2�Je��G��Ю0���Y,o���$�l��DŽ�"�2��66mK`\Al)��r�U������5��e�h`B.$�v��,/�A�X�9%F��;	4IUnU�[�P���
�5�(�����7況�u�E=�a�(��E�;���tfI��j���=��Sr����KWk���U�B��}עU�DO���UbBOz��I��T<�Ť�d�cӂ���M:�Ug���W��cJ�N���a��Lud�aw����؋5��`�Tw��՘�����@X�۱1a��{赶z�X��L�X=&�dQy-���2*Y3=N�T�)}H�wh�@�5Na	_W�k��ݗ�i)���w�k�1�&��ҥg(ɾ���i��>O5�{�~��N�A��C�]����oΓ��d�|�����/xȊ�̾��5�gT"T�����ͻ��+�؝/k0
k����V��4��I���.ּiъ��\���z^��l�D)m'�ZϩW
v_%S� �W�Ϋ�5��Ȼ"/��T��n��=](߼��__.�W�ؗ��}Ι���׀�략�4x�|��p>�����w4�l�b�#���Ew�u4����� ��vK�3��g�=�Ȥ3��RP��{����ә�����AF���>_�V�lt�+)>�x ���3�D��w0�Os�eA/��"
��#9��w��;���a
:���}���y�;W���Y���+f>�)��$�\9���>�о�7�^l�;��Uyc�Zyғ�Gq�_`i��["��n^�o�!k�0Q
���Ã6�ᕑ���K���Ȗh��f�ӳŚ�F�S�7���J�#��'p�F�[b�l�l��m��ޙ�-�c�h�5���b�CE�-В�;`̌�[�YV5<�8�ި�~W�*�u}��5RQ�u�v���(���D��h�H+���;@�=�
�,/|�����鴮/��� �+W��p#��:��B��ȯ�p$�꘧��z1v��NcX�X��UO���f�`��Mk讍u4U�����f�W��|ƹ�ɴ�U��b*%JhSs��b%*����t[�dM�+Ցo�gJ��*���V��m�$�Ϛ�ͼ�yA�.�BS����5�Io3���lYZ��$��@�\ܲW�$;�]����Nxo]�,])��}.�u��6L,�]wגOV[t�c�#��H�k\�^ȭI�e(��e����e�/��ì�M
X�[���&�$)$�Շ,��x�
�����Djc�����N�*
s^��vJL0��v�yo9]6d�N��v``���t��j4z5@nzz�2'o��}t٩�m�9�4��˙`א�Ɍ�B��!��jX*k�S-�\q��$���aK)I(����q���7ģJ��.T�p�b��&>q��p���>N��H5Pr�׷Y�?$ >�V"]?�T
eF86�ҡ�p��ܢԇCFEv���t�x�o|��s5������T�L��0��II��g�LS�OoZY�̌�_:#F��S��܈@ib5>���5��Pf������f��lYx	�Iσ�U��9f�C�h\��7X��A�)���9;;�`4���CtFΑ�j��X�������.��������{������G�Ay}`(e�DꑄrgL����W��v�V�Cu���^�ұ�6���B����v��`+���긂BG�֝���,@�]/,G�HMa+��6�W˱+�ѳI�Ǹ3>
��G�ѯ �2:ǽ��e_�r"ͥNuۅ���,ߢ̲�4n�.D�����)Q}�40-�K���N'n�I�ݖ�?@6��X��^S�[�Z�%jy.��_�Q쐜����g�Q�v�|���^۫?���3���(?}Q{���)�$�k��
�,�|m��X�]��)�����T�L��Z�&�Bo�t�K�O�S�6Hg�;v�A�]$[D�n�
�C�4��>�O7���@���\�	�t� ���z�pΏ��?R��~��T����+9�'��j�*/E�>��B��M��z>o��.�}
���Z��>��ڳ��3�A�����Tj�|�=`/�9��UΓ����S����E�܆/�s�B\�)�	� ����d���9���xQ�_�|�M���Δ Rl��~��fȇ��}։����%��Η�՗�&��8�n��?��zy��3����["�@TE�gp�����;i��)B�@6{Lh�O,����*R��}=��E]l�=�0پ�Ŧ\��P�.S�ӏt��m*�3E��&U:���2�?�Cy�Ee#���tt��hg�O�۟BЛ��J���EiU�K�sv�g�c��Pv��GNdO?@��B~�L�x�f����d̯�U�:t�w���p�?���1��P+�+��Lc8����<h��dL��9�ڴH�iO?x�r<F����w����rt{��B�=�����`ճ#f�X�k~:�t�I$���R�>l�zL*��l�)�NeB�^��q�����qʑ)�*
2�ma��}!jJ16+'����T���nO
pVѤIIV\���^O5ا�.R?��/��)�E��7��������o�d#��>?���P�,p^�UrT�
D���y ��g�;t�m�Ts|N='�x���@ Ng�J1������#�D���qՓ� FX��6���Q0^�!cz�.���HC�l�
�o��E����Ћgf?�rׇS�`�[-�����j8yB��Ry���t+���;s(�Ǘv/$_:��c� ՠ�*t��N3n����g����O*�Ja��2���_5�ҿEr��YC	�'v?��V"O\�pp��BTR�?�
�kx�
�6�mٹ9c���_�I=٬��w楏��e[�[��Z�F�G?����B�aM�5��K^l$P����]��m��Z��<K�d�j�B߷W�å�HLH�sw��LX�3i��Q-�P�h��&��h�4e����kN��r�̎f5��
cZ:2�t�8���GQ���"?����$=�ٟ����H��܊9���ZrZɮ��V�`N3vC	It7rwJ9(1j��Cu��O�IW��Z��e����z�
��W�@�$uK����2�f��`�R�腂Jΐ+.�J�� ��Z���j�d� X��kSA�]����n7��N�5�ڼܭ��Vy�*�3=��"?+W��x�֩j�\�U�Z7��}�<��bcX�ԕ�[]�{����0�łǀ��]���|�1b�.�߯o\S�3��#��j�ގ_�Թr����k��c�����-�����O��xNZ�g-�gI~�G�*ї�y5��]����k��߈�( ޯ~S�p�g�*ܐ���ه<$���{|u���J�R�7���g%m~��ۻB��u�F�������;��{:k��$��х�7���\[S�8~�_��}�i�$������%�
mys�x��^_ Ig���H�|�efg/f�-K֑�9��w>�ʚ��-e?%�PcZ�6���/�-6�1�]tUT�z&��Q��
��W�zO�`f�n��[�A�G_��{��:O��R�ill�3���!j�u�@e���z_nT���]�.��];:�W��׽~��=�_�^
���q/���N����`�my/��ё{��Ջ+y􌻲�o�Zw?���\ㅋ��ք���/f���e<>��~��v��vw5]w糛f��7g��Qp�~�J������&������f(}�n�x��T��y��
L�6�xӚ��eW`D#�m
L�G�f�nm2{���=\R��64�n��sJ6�}BQ<����ϳZ(�w��P����`�¯�df����5Zi���!��i�. ��֝��
�ŋ~b�R���ҡ2���v�9Q�0%�)X��H��ҍ�Vh�];O0�f���"���z��m4����(hɺS��
�Z���Y���i��Z!C=u�`���'Q�8\3�L!�#rCK�C�ݺ��(��-�TA�cm	�<���RG�G"�L�%i$�U�u0��4��~�5�����h�P0��<�Cw�~�aVpЀ���'7_3�T��N���Ubb�'A�j(%�̃I�����
ӱ��F�����u�f�X�~"f�qzT���J��:����(��=�ܹ�_,��W�։��Tc�����ϵ�.�R�1u��tK�!�d#�Z�k�-���$%��ܟ"Z�y�
�}kHS
�p���\mɟ)���b��d�ʧ��!�3n�<��?��
�����\�^Z�~�jt�"� M+�%jb�V���z�M�%N���*��%�U�z9�ɝ�*�e���F�;�a�2Lwz/*��!�U��/%^����Z����sX'|n�p�Tjt,b�٢��x�X$D�'}g�H*2^|��xR+�X��4��M�
��o��0��$˃I��8��/6]f{�j�X��:g�X�(U�w�iv5ɐ�E6�]���37��6��m"(љ{�2	��F�o��)�{��DYD>S`V��b�+���:�x�R<<�G=�6��b�kA/�7AV�jЄ���L��)��5~*N_X Q�ɭ�=� �|mV��f"d�*e��2S��+�LҲ��/f�6�M]5��%�/E}�.f��g�G���a�ِ���3fn~�Y�JP/���}����/9�P~�a G5|/�S�Pu¥�8�E.N��=,/� V�z��	�/��huԳ���1UI'��w_���1���sP�	�*fVW%v�l��AG��o�-�g`K�����c:���[� Y{�]ͷ�d��{Q��FC7�x�o�<iK?N����"�2z0ش�:<�����x%O�7o�pMM�T�	��xJ@s�S~�h'K�M���_�G�ƅ�z%���Y:
_�����\�R�0���Rg���8�ڵ?�	�hӀؿ��{���F�:ð����뾸��*���%�o��D�;�}�~\�kÅ4�[o�,?���4��E�𢾟ii��m�L��GE����$0�Լ��R{���(f'Ob�%w���ê<Q�^�	����m��^�VE�%����"_5o�+��3?nn���:�@�:�����~��S�6]��`Q|$za�"C��^pT��J�ȉ�0y��oW	�n�t��t=(�9U����z�ڠ�H����(�����&CsLH;���>|e�^i;��Z�
,�|�F"�d�]�����'Vd�v3y"t�t�������/�w�'���A����x�_��k��T�֞1���YQ��vm�l#�vg��!���5ê%IJ���L���ܸr�p<B�N��*p��JY���jm���,*77���!rGz���P5Y�V]+���w;�s����	L�qѩt��dY��Fw��>��m2�3ɩ���
�6��|��
ݑ��0N�s�Y��۟��2M�ˁѤ���8��3��7�%-9,d�@��u����W�Xpt���p�r�������9�r3D��$9�'p�3�˹NW��+�������<E	K{��3���m�����j���u��nG=a���][o�6�+�mg9�/I�bl�`K[����p,A����;7R$E*v[(����xyx.�������������%î��y����v�o�wx�u"�J`���*0Q�9Z��
#�:\�dL�e/n�޲(�K�J�A��3H���2F��q�(22�]�e�mu�P�6��J�0�U�m6/�.�xH�_?8�+��\�=�	��/\���&2{�BIȄ��]RO��N�
k�陲�S�'憠�;��Ld#�s�[c�a���Z2�aR|T6��c<k���)
같<�874艰��i#�i8Xj�q
3vn�`8�pL
��J�0�p&��K�ZX-��^��>��o�S��\;�[(r����B���]�gPT�#tW\|h���_����S�NpG����Im����l<�a��n��/�IZ��F*�^a��,2[n�6̓�bU`�c;\'q��ߢ.`G7^��!!���U�7X�m�CO÷"Aq�0/&n<ݞ#;�8"g�˷}�@����qu{R��p��C�𶷅P��}hv��v_��hq���lKN�>BLV:N�t%�LMԴ�(��n8�U�I�?
�IP�g|��p�5�(Q���|�����s���(��"b�{��T�Gk�X��nl��"iEO����Z{��j��%o�z�K)��h�����30	4շ"r��	�8��"2�_��J�m���~Q�M���x��n�A���98�"\��NjqY������"�u2��͟E��X�g�xe����p(-R]�"4��Չ�Go��@��cF솊n�D���s�p�g�8��:f��.,<������z�����k�Œ)c�{������[2z�8�XKD��d�⢳fKH,ͥ��1#*��?���u��X����n".D�:.H��Rt�;����K�8:AE��s��!�!���x�1,m�Đ�?6WR�ڞ+���psM�V��z��.߾}u���7W�I����ÿ���'[a:���v�k�T֘t��I'��4&��Z���t�IX\s�o���F<"'�@�	5LQ�e�D+�ں:����M�P�{���9b�ͣ`��.�y�(b���me=�����!T�!��k�|�Q.��D�Þ�<�w�h3�jQ�����oa�ט�Q��pH���T��)�պ�!��k�:[`�X7��s�k����#[�gZ�ŵq�E��^��{��b
_o:O�5�.	�H6�Mx�b12*����b�+�F�
6�,�-�y�`�A�x�����;�3#:���*��N�����'���j��Ϸ�F��f�]�-H9���
�G�+���O�5�����a�C?��x�-�1�G�I+_��d6���{�i�լ����9���
�h͌��f��U���M���"	(�r�lw�ip�e/N|�ٸi~K���ui'=C/���g��ִ�,����ܡl�����*��lh<�E�9[�H��U���Kؠ�<v%�^���+�#.��m�R�B��(S>~�m��U��H��
�PNX���f(X�l��<�a��3��EB��.1&EH@A\g%W�P�V����m���\>��J̦D�s�K0���f�x�u'�9��r��/(�\��7SJ��>�>�X���F`�	�� &N�ҷ�����|��
�@�_�7)�<z�-�-�u�}{g2�.J��74�!����<�q[ IP�|$圡*�v�ty$�
ƺ
rP�$<s4�M�>�~q�P]l��/��[����2�������K	
�_��5�Z8�BF�]&���'o�FĎ��%_M����4�/|��7le��X���{>Y�v�3�v)�_O?�԰�� �cxI���/�I����l=��ȩy���z�;a��S�F�D@�F�%�
�[#�}mwG��w���w�@C`��8g!lBr1��X��eF�xc��[��2Ӓm�͓��s�%uWwWWWWU�!Bb�9ή0���t\�x�l����EZ��5ֆ�#�̺���z��ꎷ����l�
�ֵ���R�����
�A�ӄ�d��"O1v��~���-R��%�;D���t��J�d)2�f�2�rz�S1�;�;�6)��hi ]I36�nG�I��lh��Y/a`�?��%]��܉(�#���TJ��^c��CW�ؠ�}0�i���pL@T�4����wa F�*;���zH���9
��uږ*�gN\`:�ϗ7F�Enj�C����VZ�ko'�����R�p�����)S8KXG��6�
�`��,�řa2g�����1���k2_����]��f�����f�+��Rnm�w�9��#��n�n���+��SC2}��R8O�a�:�з<J��&��t���ƿ=#�VH�|��Xϫ~���e�q���U|�ծ[�w��ML�׶t�q��s���m�U��|ԇw�������<�)��_����՛���_Ǐ����,���HF���=�����_�^��Փ����,��{�����gw_}}�VO���������gӟN�9�~w�����E��&O/���{�q������������?=m&s���L����JÈ��Y}/BU��yF���#��l��&XX�O��������7��w׌g���a��n$>�Q\LӼ�|�[*�� ����罸�r��ħ��ẃ�����<ZP6�赠�WA�B��2T�@=��e4��,���a�����e��ʇ�	|(
����V�:���1���IEO�io�A
�cR$C�6��o�i:�׆�[����e;�zH�Yٰ�AmU�����a;mD��N=�^�LG�d�{Ɓ�[�}L����#�=�ŠI�ѐ���i���*eu�LX�W��M� D��s��W���KB�!��N�^6�H�S�u#�ILe�NRv�|�Ƭ�R�؃(j��86��DY2)�\�:�4X��xQZ:I�� %j?Lv:�,WR�/+9��Lѵq2���8O)<j�d5?��
$C�Oj��]�v'y���)�6����8�@�1��y���H���昸�#3�Y��ZZ-�8Gȣ��tr9��{pN�EB.uZ��GG�+0k����iW�i"ۏᠬ�BK:��/<,�Er��;��UY��x[��q[".'�m)�ۓ.Q���I�#sl����v+iu#���
l�N�M��!�X�Q���
�p����bh̠�{��hùm.�h]��FpX�o�?C*:O'�.P�����L|cg������iɖ��N�2�.E��	1/a�1Z�"�,$��kÊ��KgH�h�򜔄���,\T�:�"
���>a�9,�4��d�����>�o���y�^D�%'�E�ujq�T���n����::?
�\�	���5\��)�$�զgYXI�v_,#�Tl�v;3�[��4�^Q����4���d�p[�ބ����Xh4�s�r��}���u9E'�o�|$Q�+�����G��þ�͛`(e�
;�:/�^J�����91�P,X�Q�h���R�R���Ӂ	y��~�e�u0cγ'f1�S���{h���G�.$LڀC��s"b[4��"L.��E:s���H�<�6�v?��g�B��?%�hZ��-�4]�H��o>��r���ր1���j�;�9 O@3�� ���|
�C3��!�#b�@�(�bzS�z
WBMac�����`�*�㍝x�zs�&�q�Z1>��f�|ћ̂�*��\�����i��?�8�F��!KdU���M�"�������;v"ŧ\{����e�����\q��-�ZF�K6�2�׵q	�����/�I��E�����|aoR�Q�i�:*a��]Լ��<�S
y7B����.-���)H�R�*���+@�#���`i�@�Y��y��v��Y<�xX�{���A��.>D���/�Y�d�r/�Ro5��z3 �r��������D7"��A߲Uն���i��B~3Y\���g�X0*[�u]G��F���)���Z���?�^Ii��/�#B�L�Ą˄��d��.;�N$�6�?Kr�4Hq�R�Q���6�����y��D����N"�.�ɼO�i���ɠW™�L��H�`�0�T���h�LH�(�>cOp�{fr���/�$�Wb3���yx�$��p�u�[/�m\��Y2��'�ZF�4eR���0�L�i�yz�p>O��G1��=L�	zP�	���˄����	M��~���A����}�:�5��~"{����E�ڈ�n�~ݐT�>q�F�p6H�v�������tq�3I������4Ԅq~ZT����7th��p�kZ���B]GJ@��PD�秠HV��0^��_��Zŋq���y�e�\<t���Q^�,L�)]�X��e���cؐ������;D���hS#BI�@��BB�l����N�E$a��v��fE�9+j`P�����!baJ�@L5?A�Y���I^*�/옇�Y�)�@���_��t<H�����ݦr�P��?��
�Rr�)\ک�k�x�]�������@�a���u�Ѷ��~4�
ғ5���.��zv6���?���v����:m��]7�J;�t]v�<_1oM0�XcE��݅7K�8��Q�$���'��GפPf)A�1�7n�pu���6���x&�>��$ݺ�X���v◗N7�5���J����Ќ�a$ZG�RQ�J�V��[%�;o�����$��$�S[��E��پ��5����A֩1a��� h�DL���
�Sq�chx
2OB�������."g���]2qh�
S����ɰ��Ɵl��FuGxi�7B���pK������g���R��=�,��i���54��z���X]ҵUW�l��C�����ԩ�0<X���hͭ��Z�ٟ���o����s�پHz�h�dۊ����,��jm{}P2C���
��mP:]���ѓvi�,�S�
�׹�i��.�K|!���KXх$� 6�5�"��S�
�kS8\D�y��
����s0��K�Ìx�g�4گO�����E�J��<��C���.H��w����-�-m�IEw�W|Fⵆ )"��F�ʐ���=J�ɼ�d%_
�p�����ρ�q3̸}^��Y�鶘F��Ѿ�VZ�#�kض�9:��)���i��1:��G�l�a�BZƦ�v�k^F��q�f�]w��e�A�4P�;Ig��ei�[�ƺ�H�j��_w�V���	��1ZS����'�w[A���xR�k�,��I�Ey�NF"*�4S�G�1Ȍĺ��A��9��Ic���WO��Hhg�&��.�(��#�x��a������I��	��e�fD,1}������Fu�CB�c��X�p�2bRt*E���5^t� �B(0[��@F�eӾk���Z������C�`s�wV-pfHn���S����F�>�$�Q����w��?�upx�����=��T��O�:>�]���o������W�!���n?���Y4Yr�k
�T�f��h�!�bN1[c�Xg�'|68`��aw���.ݐ���<|��fW�/<�������w�D�Ǎ�^�DvTR�0�ju\j��^��p��g���,�v�8�;��v9��^.��%�ݐi���uz��Ӧvi��ez�ݣ�f�y��`H��%�nN�QeVLg9gc���lT˟�&�5�r?�y��N� #���n�n#�[�!å��_�6G���ƞ��	P~0�ָ!����D<��,�"��G��_]�c�s(~����#��~c�_���H���͛���Q�?6�Zjp�-$����,˸v�q�=��v64� Ů#i(��\�=�CuLL�Y2sH�L�L��Y`x���Ӊ��L]�0�,��
�\3���u���Kܶ�M5J:�{Չz�I� [�;L?�l:=�9c^,P~�Z�r�x�0��i6a�YV�v�~dh0Ƨ�2���df��=��0X���o��lf�lF=Q[h�.�O@JA2��H���C�`^�,��kjQކ�O�{��L�q���4��eQ�:��n���s<�U�8M���ÀH�(�'.�<�ɖ���fJb��+�Q���Ӱ���U�W'zB�w ��+i\C�n�P3��\��~IL��p<?�gTZ������4������O���\u������ChDs.#Rf�(,f^��B���imRsH'�U��֜ϱ�:��vxڢ�'}�Rm'e���6�E�{~���7�o��$��́i��_B0��������fa6��eSCZ��0_����,�,��<�ۋ�rܘ��3�Z��[ �����!�}�-

jbM�ԡO�ĜkWR;W��m�0��Uݍ�<Mŋ�+����J1�%��h�&���}�*��@�:�:���gF��f9…�S1q,-�y�2�����<�Ot��&3��j�`����$����f�����;�-b���C�Z{ME�:R��54�k��5��'������P ���s��n��q�^�I��}�t-��1Y���Tͷ�:Q��BP�{�*�LS*��{�˂/;,�r���r�碝�:|��_I+Y����aФ��L���0�ɝ��)U6�%�[ �$�$av�ec���1���d�[6�k�.%5�rU��p$�(j��`��<'�q�̲jtAM�=�S��n��F>[%4S�|-�כ��F�(����^�O:�K�*�ԥJ!&R�<U����b!~AVtd�)ɬv���cp�u6*�c�͒�Bx�_f�~A����+�i�8�`=4'W����}_���™�oT4U�
I첛�{M�I�{P���{�
��YkםbGc2H����]gzyi�x'��ja���2�L�oB��$�.�5CC��W�D4��S�}��d3��O#�E`�Ӌ>n��1/'t�1�A�{���2ɑ�:��D�*t�AUu{��r�=V!#���!88�kX9�6�'����ǡ��e�4N�i>|��0�d���Q\j��4GQ���}<����A
F��~gXt���	�Ĕe�Ũ�z�"���{5�w@R�#
]D�[��z���/����`�ee�r������
��V
I�70��̫t�ME��kz/`�
�dO�m�Y����?[GVO�3���*��g��Pn�S
+K��:9O.*T�R�#"��IAA�'0���#��cR�,G1Rg�:�����j]R麘RJ*
(�&=����X=I�@��n4".d1� ��5�9��9��9��C��F>?;IK�6p���\���+����E�@��8�����e�C8Ϩ��PĻ�����Q�	��=�2�\*�y���0K�ry�]J��th<��+�l�b�#���>��0%��wM�	�Q6B�2J9����mT�A�>�	\��.n.
3�p%{�C�:#@��
z)��G'sJަ�,٢E���˙DԸ��Ӈ��ut�1GIO'��oK��hd����j������>o����7i9��yN.�mqc8���Tಎ�y�s�S�YZ6ϡ�d�D'H;�qM��Z�w_�'�)���d>�̑�`yN��`�Y0�Z�:O���Q
�.�����o����C���\1E�A�	����y�j���/���U|��?�ݏ�Nw8�O#<Zx��ٔ��@ܟ��~�����G�"�W�<����!�g���b�V��,q0K�=��QPN���t�A9�M�"����.��o��Ǚ.�%6�y�+Xmm$��$Ӵ���Q��Z{����p+9�n��<���!�:��~���7��_�E������_l�"�(��j�V�!C_p�U���Ƴ#�l�'�8&i>F\��X����g���'n\��
<O�ԁ�����/'�ڀ,'W
��Xi��u�������k�t��ft�Aԭ8�[����+�*�*����	�t�t%�د�j�`M�40���	-�a)���?����-ߖ�Ω�4k���A�2c��%����fE$n�W�aJ�m�[a7�i��*�q��ٞ��ۣ�������GGo���ѻ����:G�-��G�G�v�.�z�:t����~�?C�3XE���sI���J��Ua�!�rD]�A_��P�Ho!��l<�d5��Kf���
E�x�s�cj�ҋ���"j�Z)���e3{���i��I�'�"�
�b��ř9l��N�����Y��0B�\�!T��T:�yHs��8���Q�O���XI����G>�fZ��/�(�*��m���}�C\M'٬��ٲq8��X�ݜ��h��9���@�(����8�c�xm�]:�.�q^&�2�Ynx~����FS\�v��-:�A�ز�8+*י�?)@��g�7ƃ�dz�@��y��3�xW#ރx,.�]b)��&տӋ��j��	��pf����4�ƃY91��Yb>T���]:�[��u��O���T�Ƭd7~�+��Mu۩E-��P�gɘ�j������ׇ-Z����w_=�mI
;���+������إh�aVQ�f�g�q�	�&=y�������d��C���}2F�V~w�����MxKt���(��=3����y�[�v�nd�m/�y6�IZ������.���1;�2���TErӐ�פL��<�%�j�S��&�T����ǟ6��$lD�;�]��b���?���K�5��U�!dI&��_�Z�m�~J�C�;>2b�{$�9вi:f�5@/���xB���Hpq�f�?����t/^F��ͼ��x,e���gV��ʲ�f��j�e<�X�p=�+��(E�@K#�A0T��ݠ�e�|.�g�a;bNw�EH7��Š� �j�w��[��A��`�T�2�F�f�����n3h�o݊�Sv���{�;��Z:�z/�Z�C�b1�Ҟ��E���m�Ku63]`Yo��;oq&j���&�7���h1Pj����'L�$�yٌ�}���U��$������5���P�m3�F��I�y a�������V�p39� h��l��(��1��%��$(͎�dh;�搜�	�%��&{47#ẫ�ù�yI5����F@d�z|�����
�MB�fl��,�o&�%?Ѕ�!>��`�ȱLWE�g�3E?'�%��e�^LA�×�M���E��L�P}%
����Ȏ�
Yg��.��X�)28��t��;	��m��ʕ�eP���ww7�G��M�e�tOM$�3~Ʒ�=�܀�;�n�/��CQn�t������i��X�f:�`,<�؉�"'|��ͩӌjEQ�
�_6��T����#�;������N���!���쉲�jE
�&̷���s���r貓�� GS���Δ��e�g��?����W�
��Wf����V��2Q>N�=e���]����|�թ��/�/������u�T��&���y�D��G��ꍗ�i*'��`����I���Z� ,��g0�S�}���f6#S��=-���"h�xn�s��f�o�6��Qw1�+1�\��Q.�\��V3�I3l�J�ց��7bHs:D���.~���j��7�X<��40;ך���?`�^��+&�0�$v�&g��>��#K#�,Ü��gIɽ�)��$N^��lk�g&,�@�~1�8j�w�ǧѸ�f���ʹ���j�i�r���OO ��{&���hBX��<�U�8�����P+�j�
���F�;=�|%�|�y�w����2)'�YZ���$�"����B��'��)�}��K��LhQ^)$�����4iU��ԙ[�]ן��}p�r�#0��}��&ߥ�K�%|7��4���L��j��s~t>�����Lw!@�S��-\��������V��N��P:������{@�?`�.�����…���K��;�ߌHnDli�?!�<f�kXc=M�]���H6lԪ�,�u�0�N;���
 �-E�ƥ��Wjp�����bW�$����[+�jHjz����O\�|@ە�%�*��JJb�A*�%�|��}��&n0���Rb�%E�/j�>��|(��3���e�.&IO�n���T�e/d���_��x�~��4�މe����HN(�/7c<�!��˺�����~���1T�I2��U�<��Ĉ���R�����`O?�o��u+$lv`%�O�!/���cw*��|�y�*>m�6�M�wÖ�N�
�NK;��.��+�@�~5n�s5���
��:�C�
�<j�>քu�4\pw���/s̎P�� �b
v�;w����޼�$����y��>7}ϙ�S
�>+�T��O(��s����άxE�k`��v�胬T6s�d�q��j���c��k,�!��}6SX��w�~V6ӄ��p��m ���bc��~x�3�<�oP6���[CҪG(��T�<hF�Wx��&xA8���C�N��b@���%C�czh��Ո@��w�CC>A�)�9�f�	b��Ի�f�/c :��?D��M?,��g���]��l+�ۣ�v�/`�e~TA�mu�`�����S*�g>�s\�B׏Clc\�W����漇�R����:�HzL{e�0��T��r&��<�x�(%�|���j>^�O��b�BM�@�j�r�p3����{�yrqB����
FC� ��U���Nps�mA�Q�_���g�7��Am�����3��:�2 �y�3q���xM�S~��4���ǪZ�_��/mۂ���(��4��䪴?$���0M߉F�	�]՛'5��M��'��zO�K��kN2$�D�~I��Ж:� �=�$�R'$��%|�N�m�s@��gE.�%�p�Nb��%�X�tL	�k_���BT�
�v�%ө-��q��C�D~�>� ����g���5�Q���xJJ.o]j5O��/�/*v�6��*G�����ʐ�^�U1�,���M�A+�t4umN.T��׀��(�ʢ��r濘`5Ɇ��J&�R��p�6��E�m�+����y2g�:��4d�
v�D���l1�����P���x1.�:�q�<���ZAK���  3�e3�UK��X0�!͵+q�7�.&���I���:W�fj�^���8��f�(CÔ�<���D&�j���K�N!>|��P�?#Y��Il;�ē���8LQ.�6�B^$��ށ�����ޡ'x�`ƿ�8ۚ-
_�ƨ1���B%X%r�!C"z��N�d	EX�G��|@�8W�G��뀵��'M.3⡳D5m�;wL����thg��@�P*���l(��a�QݫZ�ٌ�Zn�m3�`�7�9r�F���e��DU#�f�~Lɇ[����Q�+(�Qݠ#>�A�?���ܯ���2+��@�U��gh	�!�i�~��C�,-��Q5s��F�7oەtͤ|:�i�9��-,���lv7�F�<1rZ�n�2�����%RJ{�^z���:�i��٥���@���`rF�SmZ����`��9P�/_�?��W����:�Pt�;5�|>�:�F쪬���U�T{�ee�ҭ�r:�‡l8ǬK�WaO�^eceѲy\P��)v�cxW�U���g���J�;���
Y��.wɧ����l�-0�/]�r��jG�o]�~��E��ڪ���,Q�I"��rk�)1�q�Ŋ��|p�1�]��NS��.'��=/l�I� ��)�N,o��;[b���SH�[�+-�g틊��pN�So�^��4vz�ma	<&'l��$�����g^>��:�Nr�D�o���v}'�S1k)UN��޲��1v+=~䡐�xG#���nY
�R�3D�4�*�6�)�f�LWh��8].�m&��jϢu/�jA9�aN�q!�d�NaQ��c���f�X��+J����d�����N�p�"��h�1R��U��z�qL�s��W�
o�|C뤼��
�s@�p�Ųbn.M��c	�?�x}GD�U\ݜ���6xi�J�"m'���Uu&W���t���]���Й�Γ��N�;�/7��f��}��y��o�`�\"�V!ӄS��:��ws�^��yp˽D��TС�k���DV�u:`f��늂�F����~���^�	z��|�q^Lz�/��5��7���}��S�3n3(��@qf)p5!��B�\�uZ�5��Yr�5
|ɭk*K��E��tT�腿vz����?�s,�/���y2�'=�!�����A�и�n���Γ�8A+�T�s��
��n$��
�@V���@Zf���Y��� <�z�|q���5-���Hr���Y��?bB���O�6j�}�[籛�"ֆ�o��/�u���Am���Ϋ�=[�w�:P�q�/�����4��J�̇,�M6��E	��|!��+ڠ�no�ԯ3�л��lT���gc�c�2jIp��'q?���
��`���K�d�{�� `vL̸['9��!j��`����m���=�B��fm$��̶�I��pI����"O�bx��.?�~�h�m /��N��z�<";�-vz��S��MQ��LJ�6��o��ٴ�mm�ኙ��)�[R�hSkmeU5O�����w�/���8?{i]�<���
?�Q�_�O1B
�1-:vf�-QT�<T�1p�죦�Z�o����y��oH~`�ދ�6����%��hQ�T
�m���N�:ї��2�
�Ύ6\��}S�ƍ{��h���
Jq�:N�]���R�	�R�]2�j_ǗxP�d�4�8Ծ"cj=M5��&��!FΓ����iWv�Ac���-j2�Q�<����p��~��ru͖�j�6�k��;}��;-�Py�����m�!��sa0��//,y�>v\^(�|�0ی���
p҅o��neo����l99���X��߃o��;Ϝf�kd��n�ose2�6{�ew��Rj�Ӊ[WQ��e���b��^y��E(B��#Hr���a�6tp�'��>�lK2$�KLE[8��(��,9���&]'9@α7�F�fef���0|���4��{�%�HF��r���d�/�ZO�����If�Y��$��V�;lfM"�A��?�e��bR#r�ۘ�;�/���JzYG���i;>����{���5�Դ����gS��=�|/:��|��p���|��#A�R���'�j�pcHk��$զ��Y�'�b����_�+S�7�8�@��K�8%�Q��p��<8p�4�Zpq����`�.z$ԟr\h�+��~�E
��,$�&��@��Z�O�K�4np���-	w�b�X���'Y֢V+xZ��	l�x�F�Z%�zł�剮t3�f�Bw9��k�R�C����8�'��m�~F�y����@�e~e��ؕ�*�f�o��.��Ç��zOv�d� ����FM~7�,�4�5�˸�M��ո}u�G�;q�{��I��m������
��\F_Vuj����
ђt�����go0�%朸�Pl.lSG����гZ7oAʱhe�aA�c��IJ�p
�w3fSm#L�rh%cR�^[+R}��P�h�
2��Q��se��3d����H2A�C��3�1$o�xJ����q�\��v`6�}<����z��/�NB��?u��d��f���	�%�V��K-�⏣D���=
���UCS$Rx�-��.��S�ڡ�;��ZN4AE�d�sR�ô���Wa��uq���c�}d�D@��r�/��,=w܂&�����:'&[�w����9#&�6�M]A���	�+�:���Be��#�Y��s�؟K�􂫂(<i��T�+~�
�&B*��
�r8k{<��p�&7a�$z�C�@Х/��U�I���u.D�#R�&�M;;��W��gO0���pB��23F�P1���[,GSN�eT�ft'��3э���Dw�d��A���z�Bd\�O�zعYT�IYEљ������
�4X�Ł��@���3�#n��K��l/�/p���X��zW��������!��'�h�P���_u��\D�o�-��mm��d|T��籃�|	��q�;Q�0�@~�F��۵0�9�zgh��
"S��"4'ןL0]C��ot�?�Zh�m�3��2:5m*�6;A��:��2�"�(9�V���aY����͈A��?~2�>�H0I.�7��~�8��[?�<M0J�R\�1�H+{�nu�^�3����/�em�d��>Tn�Y�WU/?��WiJ��f�S!@�&�_���eY�_���2�֜̒+I
����9�&�����w�uE^�X�+a�:&�-d)�IJ������������ڲ/��ܽ�����(��L����?)w�R�H
���Nhr���&>�R��$f��a����j�K�s�b�����nG�_���I�7;N6I�l��V��b6���E�/u���\v��mU�1̜�3s�̜�14�n��is�g��|
�Ƶ6���K���$��H8j=uk#Cqp�H�R�P6���/��3{�9�Ɠ�u�2oiw�&�D9�r��^?�:�	e(�-e[��UNٲ�J�	C�e��|�b���t�D�P,pxs����Nfİ+��W�mc_��Ktt3óѳbs_v5��9��P�hޛX�vQk�{�BA��oFC��]��km�*Ys�FNut�/"�H��.sS6ãU)���KR�g�<5���r'-�=�O�Y�pt~A��!�vA*������V�?7�������)]���2���*��ƫ�*�f�A
�RX>zk���q]�3�:�Tx��]��iu�`hЁaNeGV�����;;.�ۇӔ�5Hu��m4۶�F"`4ISN;eARՉ$hI�E6�3�ГԐ���)�5�_ǣ�3���n�pf��3pr�	�foF��k��;?a��`��L��X6�cԪpb`�%p�yL�O��� �g�W}��
�+ݱ��۰i�B������+�M�u�F�ͮ�T�Q����P]=��շ'�"�����R���A��	i8���u2g��������o�<C��&eS�"P�p���pp1��ɸs~�e�I�Xk���5���?E/�{Kjy@4t4����\>�������ƽ��=��0�����el��(�)F�U5#Y��:�%N�n݈	�Y��aq�f�U�G1��
���/|���D�)��a�t�Up�(�Dץ[H˓}w�q�R��խh�>[T_�)�~7YaB9f��!}H.SLSH&��U�4�r�^���?�9��?꛽1� �׺���s߁����fr���샢�MnS_�)s_��h�d��w(dM�Z�}�e�+���IpNznCF�,���G\�`^��U��l���nP�0�a#�6��X0��j�"�4s��=v���05I���e_���WE����U�S�*��3�|��w�2��(�CjĪ�>�z�A���>�glq���h:BR��\P�����j�Ku��U�CZ�g��X���
����0&�t�~�E����_!�ڢ,���}�R��<9�sC�O֊i�#���Hڍ���lV�Ŋ�쑘��˄r>Ю9��Mz�/��
���,�y�x�Ϊ��n���� �q��>�|�������٣���d����ρ6��v�M���)��L
�:���f��_�a������5PN����b|B�9юs�C>w�d��L#��H�HȔ���Fp�V��J���sP��,,�աA�|�,��mr�eU���P.�0�.��'���aev\���,��w;����^X&���kD��p�fx��[�km��T9�u��a��
�&>��fS�`;5{w�+n�6O��//%Y�"պ��i�b���5ڼ�|ubG�'���Y��s�u�Ҙ�uL�<���l��m��	�\�6��q[�bW4Q6�Q^���
��Nnsr��Bq�9h.�9��b�@Ö(�������Z�HN9��;Uf[(��U��Y_��I3�lð-WI�7���#�M?��m߿��%���jms��2��GP.��඲s(}�����G+O�c�>,��%E��V�·�7�Q�F����w?à�:Kۨ1z+�7j��;x��x����n���M�Q
�!�i��D��|Ჹ
z�΄�0�?;҉���@��у�pO����}@r��:��.���ׇp�=Z����iL�Q���sv��HU��A���rt(M֯`�
�45�4`��]	Z5k�C�<*��~�|O,A��\��p-�l8�Ъ:f�$�
��Q~)	�Eöv�!Cesj��Ϻ�u��DM����]Mk�0�+>&ä9�m������]B	Á��Z�%;[[�ة�$ҳl�:ҋ�q��(�Ixj��P��,16�)1�6�㠔�by&
�t��*tJx+�H�8_\�6�Sd֟i�\�Cc
L��}n�BM\h�	�- p�k��pM�5��^iC��\$L�&+T�Qz��`�쾥4��`��c
��{��_�Q_��sM��+B�?OV��
��k��R �"��G(�&��-�Y��;sH�yc�
�m@�ʪ�&ヱ�A�0�L��k��
GI��Б&��}�ɷ��n^!���}@��(_�=�߿��o��6���!�͸��G��žW��w��piI��4,�z�x̣����];o�0�+��v�x�R�mR$q�.E�?�D�m������{�<�GIN���E������;Y�Oɂ�!���5$��^`��g��#M�K�V/�l�!����)�S�
:Z��3u�W7<i��L]6�V��#���4�{� ��yTAÿ�А����
Vq%O&�$�����_�O�0#M�談��tq~y��Hү(��d��"���R{xބ�P5���Y���zR�/�\z4tֻ(_")�5:��)��tm�bx�9����	ѣ.e��-]hpчY�&�-�;z4�c��&�Su���l�vmhLw�ɡy�Ȅ�i��� 흨��\����&�B�9��.��`W�G�~Yժ���5g��h���n��g��.|���>��q6��.���oYV���#"a���>|��'#I��W:^��)���#��9�5��o��yqaH�bӡ::[�?O�S�~��P��Yzy���,�Q�ѤX��<t�\삳��9!��7���L7���	�u�P�3�!���]�N.�2E��$BP��+de�+xA��Yd�#�BAg.����6=1�7��kC���W����1<�:���꥗�^�l��uP�8�t��q�?��	`X�,��}�f�G)x`ۺl����צ
���v��|:
0�����߄;��I	ڰ]�����s��Ң��iLn�R��������d�7����(/�nK)�h{����bL�r�MNQJ��=���6f��
�a���fK5E^U*H�q�/w޽�_������h99�ʢ�6��A� ���'z���	 Q�
�@�����hT���w������1�#XDa(�O\
k��#|Sk՞a��>>v��O$\��A
b�o/\䐳4���i�s3�.��� ��B�m�
�:�� ���Ї�p=�m���<c��!ș���!��"��&��se?��e�]�{��e�d<�K:��a/������b�dd�zT��Y!3�&�|o���a�1E�֮�V��(�ʁzI4�0n՛VP�>͙�^�kT��VFrQ���^(#�Z$}���V�o6��J��݅=?�����1ԝl��
�,�$�<'(��Y\�	�Z��E���9���jzx���ɩr
���ư��~��OW���o���g�V��f�f�����(=	�Z�9�1��tP娪��0���v`#�ٱ}j��i+�w��8���.o
�E=�hWGT��;����Uw降��=����k�N-��~���R���
�ށ�>��tQ���5��I@ƔKf�zA��
�l|�X�.�k��E�j}9Uc�H����o66c���9�/zn2JoA����ÍU6絻�B�#H�=�,1՝��,R��B�8~
x>�?5M<'��������Wt=Z��T�c�k�׎/~���]Mo7��W�OvKH{T�A�:8j݊"XKL�6�
$5r�俗��w�]E[�"�M�!9�9�7��DҍD��Wlb�ʨ��m1�����Wh@,+3�S�@7��;��8	$�S�ln��cwD��o%v��&��륮�Y���'�a��a�A��N�\���o9���)�F�(�H�-��#���uf���#��H�0�;�'g�`���v^�� �%�X'�`�;ɢ���ƫyx�l�-�n�k�$��ny��n�o�8�z`1���w�dDZ{q8=��9�_	.�IP]��斞]�+������l�����$�zD?+������Wy�X�3�z�A��v�u����.����	� 8ǭUu�	��^��nj���摺ӊ��R-jUO��|p�n�-�$t����������ji�����V�}����B����Q����N��Ɇ����>5���鐆��FD��X�s��G�,~L��1���t=f<*~���@"��{oa��_r��B���&._�廞�-�lʮr��]lg�R�p��|)�v~S�߯����$G��o�q����|1�PN��3h{�;\L���aXo�QhA;C��I��|�|�Y���eO��T��깢�Ė:V�s�I�R�l<��{QȒdYr��}��%S&�e�T;��vRZ0�ĉ�D�-���i��'����yF7����eʪ����!kq�M�1j�З(����[�Wq�Vỳ�vz�Ǧ�&�� Q����/��]�[.-���|�!��5�����fP�¤@�Mp^u�	��*`8P�f=8�� ��vZh�L�y�a�Js�Y�k�`k7u#�鞌"������"�I���`�m#��AQ�Q>rI48�ܬ�Q�^.�Z7̜!C 9稱y����8�i�}>LLB�%X���L��g߂��MD^G��m��:ɜ�]��)��M������ei@B�a��R�X��1��~�w�D�q.F�F�Y��:G���
L�X�썠����BZs��[�H��,�`��U3��Z8��6S��!q�G�6���8ꄦ�o`G&�e�v�cJ)�s3�mw��/bH�KGU
�bI��pYΫNv"��Q��{����8���`Ü&O�������/����<�XPKWSV�bϭ���4����O�ʫ�Z�����`<UV�hg�T)�0n�x��AE�i�L5ڗ�$���.
�Q���龠�b\���Db�{�ѹ�cR7�k�DM��P��ve�Y�׃P��L��xu3_�{�z1�~�.���FeS-���io�H�;��h�Jʦ� �~��U�����R`WUN���N���}�of<I��g�7׻��|Q]`R+�Us��p�]
��Ƽή��ڌw����op��K��u�8�������������ٛ��19��y��S���'b�:3��^��������QM0Wz,���$PTѪ�f*��{9o*�!��Sj�	PG�ۆ�#�4bL"4�x���։a� ��r�Hm������d�ʕV@,ǨG���$mտ��#YNL���X�=f.�*�B3ULIa]킒�͵�Ϫ�:<O�JhEY�?�Ji�+F�S�`��}�O�J�
��v�Z�8�\a�f��t
�B��ϗ�I�:�ɖk
	��$:E�9(87�h��M*y��tt;��Ͼ��֓�ƽ�yb���E���<L�wR#� 0,�p���%8WB��r?���hq߼�wH{�����4�l�^�s-�H6�o�h��$W��|�d�6tQ��Kw[�G�j�›h�j�p��7�a��3w;����V��<�M�r��n�����&XO55�'�ܛ�F�QR��\I�(Y-��ϰ���)Фa�׎cl�i���Z��
Y������JjU�.i���VV.(�8��y��
C
����&VP@�K��^��k-x�=�.0FK��2~��=NF�O9�Kӓ��7���6����f���&���s�|�8SV��3Nލ�	��?d�S�O�Pi��l��5,�M8eMPU��CLw�Gta�TN(�H�!��(�P�%�tV<�k���2TX
�L��������::AW�;)9pHV}6Q�]�I.O�O�Вr�r�~��e䈮{�3��_p�#���"#�F�DH����R����ƹ�B,6e��UH�^�M�#L���N�<�[U����4�$e����ݍ�p	1����ʍ�����j�iD��Uzݗ� 1��ZRʔ&���[x����/���v�
|�p�q_����W dz�W��{����+]�B�����ֹjXH��o�����j�������l7l��̀=s�#\Ʒ����@�aA�MN�Fñ��I���Z�<!��F[�j��_�&�Ƨ�P�RIe�m���T�V�Q����z��E��s7^|m�պC��
Ŭ�4�Q��7�Sy`Qq������2
�6����4:���ᯗ�;��ggDY7f���p��>�}Jw?v��Ut�^L���E��$�
�Cb �?��AI��M�������6�,��G�J�}���ʂ�%܂s>��*���yJ��F���/�.W��]$���Z��-���i#){+�u���r^ƈҐH�[��������>�ܒ�5�LX
��ɼ+W���P��]�jn���ښzi��4��G(rǎ�A?��9���Yk��ҩ��W�x�Z�?;�y+�+^-��=��f�ZN7V�J���]������<F�6�ި����u�0G� �!��w��������&g�~1������(��Ķ�ʇ��r�]Ǭ�4��
�E}�zVG]gu,Wr)�9�Y|�6
�*\�@o���P^�JmO���4I�S]6_Q��I���dr4������֌��`Q?��E`����Ԏ��u�+4S�%ώV�OQZ7��:�֪�=IHh�cI�uKUٛ/� ��*4鎣���N'��xr4j��؏ކ߽��d���\6w��4:�~��,
��vbl^ޢ8��+@�h)��[ݬhgws3�}��@|�R��U��u����5b�CVۣ,��N3���ΐ�� ��C��蔆�Ηy֚��˺B^3
��E�.��G'��:��X�R���l��e���n������s�������lL�W ���<K^���s�,���Q?p�t'xr�u���Q[C����PnW/���k�O�_�
l�U`�H;!�+D:�2`r7���;[�RO��y�*�6�oI'3eƘot����u�RI�%�EO=��޵�3^{�w��tל태�O����A��:�€�8e��qH}�F�ɞ(ʋwI��SB�`�.��c68R�h��*��K$��b��_-�w1 ^�r�Q�����@Ƴ��k�Y&RV�,H�t��*�=�%nr�]TwU��؛C�ɟ{{;[Hd�����5W��
��TU�Ynt��h�}��x��5���|���0�_OӋ`�o��@��8������(88i��O���vՊu�T#YW�Ê���gP���M�9�;��"1
��`˨��M<w���b,o>��q_yؾ��z@Rړ�T�ڻv���G���?�w2T���K	k��kˆ�-�[;$�=��|�*���R�vm��a�0@���w	�{�*��Ϧ�<�
�78|�i�n�d�.����E�UN��v�	Z%~Al�d��j:��<B,���1�cTUqPr�d���ƹ�Ӎ϶;���q�GN*u��A�&r��S3=l��5Z%S�o����—��AzD�`�Yթ� K2�����)\�x����]Mo�F��W�'�6�4�1
ׇ�@H�\
�H�DmQ���^����r�l=4�$�$gwgfg޼��5�n7�o�`��^2��]�3�U���@��\60~݂�F_G".��}=q����+~M�=š���X�i%�m�_�?�0��Ӊ���{ō۩)�j(�E.%G�ѱ�'��	�դ�	k��l�O�A��3(|�Bh�/�B�~��`V�0��-�\\O��[������]�?����%�_.g"s�h�Ӎ6x猢b���Hp>���_�s��8)?�i����z=��m���NW
�����y<�[���q�1"ۇ�*�v_�4l�H�޵��^��&?Q���$�ſ�,b1P��H[H�(,ڧ��ʐ����RR�8�ZR��F�ZT��>GZT�]��0�J�c
�(�pJ;��2������)����ZL
G֨����:�P'Wo(��Y��[sS������e$�ݩ|�7�b�/�2�a\
�����s"�h�����г �Q���YԙH�C��!ٺG���'+e%Q�7����4+#k[K
�N�L�ivi?��M�۵�erx�u���)�z���7"�0)?�n�,pSZfb�Y�^����I�In��5�{���Yf7��_h�e�#
s_�sN�����F�c��Ɨ�0e~�눑u�E��M0�n�Y�_-��[}��S��ŭWj����j,W%c��"�bt��[ߏS����j��P�t\nK�5���1E}Ȫ�εo鹼F9�x
!\5aZs�A4�뫼!�7PT�'��w2�Q��z@�y�p�_'�ԓ�8���$ L7`ua)\�0"�Bh��I1��'���������2��*�%��b*��oP8c-��e��v��J���=Ğ�Ll�6���f�,9p���T
,:�U��$��r�p��M��Z�y��y�t�F���7�/R7��ZC�����Z�לp�_���$�[�S��Lj�=���?�4@�H�0��U���zO�N��+���f�NP1�hx�<>�C2)M�և�\��@�c��ɩ�fV������7'L��>p�l<��L�q ��y��h��Dj�y�P+�z��*�?��b�@��c~�=��p$v��,���T��}֥p��盧��&�4
$:T��Gg&C�����(��4�x`!9J�d3��k7�p���c�$�X��(]<3X!��N�4�p;S�},���~����	�)�~���ćL�s`hJF�kO��̥l�/{\'�2c|Bg�N�r��߆�5���[
�E�fi��������͚�U�d����
T�B-�}M3�)��
A��U�V$���#5���j�w��
�h1���Cܢ�u00���~WM�tͻ=2�/���/Ԯ�2�&�9�gf�ʊ�q�5e,*��a_0��a�<V�{�?Hʛ6x^����M�;�L��K��v�B�H�DrY�j���޾��9cQ�(m�����C�m@Ӱ��r�]eq�A
DD�h`��7�NբչęR���Ω�hdgt�e���ٟ�'�� ��e6yl��h�Y��5��d����x��y�;? +��io��B�0��F#��G��ڎ�֓�'�Kr�{�>x�V8�i��
�:�_E)�g<��`s����!�ܢZ;�«�t�׏B,a�@x6HQ��ͧy����?��)�k�e���Xȳ;�X���	
#��\��+��:u�$�
7J8sN��d�����7��^x�v�������B
�d�S9��L�59T�x���J������.��ϧ��p�Bm�C2ed!�1P�FfZ~Ƃ���A#e�܏�H���8>
b��
�"�.�d����Z�묊벡��3ca�����eQ�NtZ�r��`^Tw��n��
�MP�� �J� �f@W�L	�ԓO�/�?����]Ko7��WlO�[j�S�*�k;@�G�ƨ�S�viI��Dɲ�迗�"�\�$
�D�%���p8���x�swO�AT�q���R}���R�o�=�=�j6<�S�1����s��l���CJ��Q-GU�
]��!i0�hx��@@�睋�`QN�� ���@_�e���f�}Tڙx�d��,�mY��FGA��W0��B�PP��v^�:5Vm2:��CX���;�&#X`
��mU�o����=�j{��x�`�$���Q���ʥ3�9�Cii8�l#���Q���f�P�c���?DT��\�*��j�NV�I����n��̵�/~���<ĥ��|�;�i�+'I@��蓭=��[C��|q�LZA���N::pk��$��\$�7�ԙyK"�c��AG�?t�BY%���l7��kZ���ӕ�1�#[���"	�Bg��q+
�L�-^��')hr�^g2N͎@L��`D/�3i��Oo��K����[��\1;�
܍�m�c&2.�(�N[5�I4W"�� ��7�d�]SY�9�Շq}.J7�k��^2~�O�$���KG���Ֆe<� '(`�W���@l)����΂��|T�1��y`C�����6w���h�a����P�
T�>m4_(�����lJ��
)q'`�f<�0[�#F+����}��9�Н��r��C)�5D�>��P��'���F0�(3�dOA$+y�󉙆�%�
ﯲ%3s�JD\QZ:�%9�z��|���:FK�� u�l�<��_�n�aR��
*�w�^��#.	��!eg��dCޭW��,�ٓj1N�v|�<��!a�H�������-ҳ���_����~�|j�勆3���@53a�j&�QaZ���a/��.����$�ݝe[�3b��k&�v�n�
J��}h�q��:�6�;\��iu���=L�3
�_�n��yp��C�����2��Zů��]ڗQ?����yhe���/�s!�"�m��в�7��lr�<N��d�!��ա�K�+�H(�4�&�7����h ]zBa�6-��R�]bZ��"�+2�&jW*G���h>ݶL9���Ȓ”�-&�>X�_��ND̽�Z/�[*&�c��g�zU�B�u��ٷ�����K�Z�:�4��E������TW��s<.��".�y���ѧ�:w�E]wzg��j�����qr-����
<9�ptuz�+K �l�_-�Q�s��bL�DCP��k8.Gǩ�\#1y
�Aqs���`�Q+��|�.������Ӆ���ق��@Đ49Li�L�I�`��S����b�"Rˢ����8�97�|��a��1l�XF���}O��d
9a��ʡ�Yއ���5����>�?�B*����Ru�pW26S�ͺ��ܵe<Xy]��H/YN����$�|>� �Q�4[����˃�с����kEm~��S/�ͷA��!��1�
Na���z������O���m5UǠ�0��]�.�m�ۿ3��1�
AY�F�
��{OZH�v������n���-
P��^q=�R��� }\S�4���˸��U=feU���'G�3`�h��M�a��+-	���U#�i�K�ޘ	�����`;!ڍg჋Y�ߋ�$B�M���j��`E��qZ�7%E�gk\����'7����[@i:�hF?���n���\?������N^w�ro��m�µ[x�G����]qq
�sT����'z��d8c�4�7K�٦�RUC�H�J[a-�
��j�5�Ini�l��������E3w%闃�!�G�v_��s',ׯn����%��X�ԾE.?�r*�M,&!;vA���ET'��X���fHW\RZEv ɕ=!7�#�a��:�V��_��,~E�We�U7}c�Q|ձ�GM�j�5���4O�M91/%B77v;�󝈬GO�g(6_�]<����W!q�gWcd3��A�DZf��?��c���V�}B'��G�Q���)Xvc�4Mj���ÆY�t��B��#�[
����]Ks7��W��)���C.��]G�6�Ce1�˥�5C{����jk�߃~�ǐ�כM.���ЍF���l�Z��W9�R�m�z%������Y�ٹzp�2
��S?y�:�~�)��50���o�7Z����cRIs���r���D�W(�̪X�y�06���s
�Gy���0��0�#���sh��ov/��f%5����Be���=�e! ��Q�cأ�ƕ��b]�����2qsS�G�r���;~A��v�ZH�)�zb}s����	�Ӫ��@�Y�}l)����
]���]on�%���,���XG�,�q���P��qo���f��GjgQ�g�@&*�!��
�>��?	,���9� ��>�/���e��g>�&i���� P�������;˽<	F�	��k#��=�p |�?}]m�0��f�e�ӄ9�lh`����ȏ2+Cʟ�x�Ʒ�:Y�!�9s�`�.)��e��π�¬����M�C����J�YL[,qZ
�7�{��G�F�w�5�D
e�G+V@��*�	!��~M����`#xo��4��C IJ&^t�!.G���i'�Iz����^��&�n9��F���� �$����t7F�'����9Q�m��R-x�[��e����ż�G�]�V��h�+�MOOY�k��&�$�.[]'�W
.�Bs����\e�P��v7aQA.�w�-�o�c�4;�7����%�~	�%�q��!M��!MH[�w�Z� ��}?���9���g9�E��R�a�u����.|�����%G��9��r .`,fv��*X�]�qǘ�I�#J�6�z�+��n�O�'~i�¡��#u�d\�F̗'yqol�#�j0-B�^��h�r����CH)L@�(��]�3{LP�:\]�)HVi�{7�(�y#Ad��\��~�tk��
�vY�����c�7��&����%��$RC�t�`��%���k�b{|�����-�2�����z�`"}G�����j�U��ਪ>2�a)Г�~>��$1eCO��>�d֚r�cE��ؽr�b�)�cMH}hQl�������_U��C�����	�
�rڟ��6��[��<���1@љu�tc�.h)Ph�5�g��6�B�p-pQ�X7��h�	��h3J`��n��f�=��s�õC0y�&�hB;�����ʧj�O1����5h��C����ۑ��6é�0ru���/�dd��U�"��Ab[�Ee2��i �C��W_3ׂ��shR��rɶ]K)l���5Evr곩��� 8�!Pv��f��u0Go�}�G���E/�f?~D8uC������s��ak��bgc���l���������0��P
���Uf�h�\:�p]��Id"�[�
tZGjmQ
�n��8zQ;|M�"s�X�2�p��Y���?ɞ�܍��$���?���%D�Z��n؎���if_�Nd'w�M#���H��e^QkXT�3�c�9�^Nv�B�Pg�irQ")]�y�M``{2@�p7��ֵ�AK�{�B>._���ǻ٢�C���_K�T�.��,���wj61�B�Q�9|������f`��E88	`����N�����'�o[�[2X�����-DT�/���Ev��Zlq{G��&�F��x����b�Td���~?��V��?Hx�|�|�fOn�|�rC9p��EYqG��^��(����ov�53̶�p�Iҝ�p]������s�[*��g����Z�0��H�����A��g��#���[�D�C�F#��hR}���F��X(�E5��jR����>�7���`4�.��O�aU�+Gq�P]b��gX1I��dRvc1��c}`p.#�`x5��v��l�0l�)�W�,�p�H�L>����h��R��40o͋�̩|DP��^�Z&|���[��A8S5bI�����	��~FS=՞�Պ�MC�.3���Y���K[��Xg�S�u-��wwy�p��e�"�����Щ!�e+ރ@��޲���p��	c(
�;�F;o�mX
�\���+�o2�_e�9?U��V2����d4���c�/
�2��<�!�2���"\����.	l{/�{�=���J������(ޏ&`�J�?"	oa]���/i�亅k&�@u��h��2^��Q�}������7Þ�q�iWz������Jk�FH��bIi��N8_$xV�͖�"��_��q6��@�� ��J�{q�jx����?�φ�:Dz8��"n
+vh�����v��C2`l��F��<���</�O�;�vw��G�X����pMC�g��0z���P0�m�� *�)Omub���f�'�Pꫝx��_�	��&�^�or���+�JL��;�5hќ��g��K����q������S@b����Ȁ|Z
#ģ�3|�v�o}������H�}�V
6�G���4et�y�u�⚠~��2�F���{���*
���⤘f^g��L�%��t�
��/��g\.Ss��J{0�=�x��^�q���GWr
��{�y7CĩP����&�o[�<����x���W��)`��L�yxL7MG.���D�����!M#D��u�0V؂�w�M�=}�C�k�n��>�Z�L�l�'1��8��F�����`i���bw[,��qh��qhiv�,GAT���!�l.�33\����	
Ҏ��p\x���*'d���`�0Ҵh"���LL�"5q^��$T%u4��n��b>�ˊSY��2FãOԖ=ծ98��6}���۰uL�ꎎh����a%PRc��a���p�iϵ��B����j��a�g����'��'���L�FN�?�S�T<��=��mg�P{Q�M�����$�Zb���g�w=|�`��$�[�>qD�a3����o�Z�M,F֐:)|/_c�|��ŗo�~v0�N~�,5\�E(��P���Ju�Ex�j�͂y�żtǚ�=O���ͯ���eO�*}(?��K��B�8q���* B��!
+O$X916%;�f��//{���V�Sn%�&��w)/J����^Ԭ�������H��N����8��Ƥ=SN�¿2͑�e�f�0�HBx�Y��ѓop�iY`��q���s��yO�f?�YL��K[}�f��sH"�8y�3%a3(V��a��EX�m��D�ˎ�x�?�eT;����]IsSG��Wr��r�]$�.H\e�'B������B��=��L�"=��dz��^�ժ� ��Y�ľXLv6l���+;���J�Y�̽��I<ū�6�,]!I��0�iۖ�8�p3e��ܣ�Tw~0^�4zp��F��̢$C��(n�vnf�~+��X��u��#��XhP����1�a�.Ӎ����2��yl�W��)��dBQM���j�YM��/	ᗪ����L���8�tj׹E��R�)
�AE��p�N�oߒ+a,FsS D����:	^��Q�"#�s�
���$��O뷝�[v���_%T�g�I��΢}?~Q11����\�
��g��gpR�]_�n��6>�Q歑$6�N�`-a�R�����	��m ُ�p&�
��[ušKG��f�RI�L�Hk�����F�4��W��)1�J&�=�@��^NB������/��:���<�=[�}���<�Eq�x��������Du��Y�O���}1n����kqS��kրI��#s��	IM?�zp��G@���Bl��E�M�ĭ��6��c��?�;��׈�>��!�1�Q$/���jZ�`��{��Y
�>]+��3Y��^-g�؅	���m��|���1<+�lWJ��s�z����<M�s�E]ޕs�6B���k9�b�D��F�9�a����1�U��E^�;���
;�N�{�mU�Q��o��厨;�_l�7w�]䬎��_}@���)����ڌZWӴtD��!���M3�����U{��|Ad>�������.��SOM=��j�r��L 5�������iK�ˆ� _6��k�E�)$�%�G}Ȭ	]��v�t�Htlд�m��BZB	Y�̨\�6�E?�S��|��E$�F8_�
bBb����%gG�K/�X&m|���a�LDx+N	����x��.G5ܸ�0�I��:�c���
�0��������~�Vn�ʥ0�;e�&�.�f�	�I޻�]��-���]�S϶�4N�*��r?!�V�a�A��=��A������)�\}���j�_��u���k�$"c!
n}�J����
̿��l3��5�ۚ����A�G�F]N �0��l��@�����pV,eB��LZ�=�`�^��V#��QC�a+��M���뇏�̵����v�3�X;r�E֝C��{tݙ�bP��,�k�S��rܳz��z�mR�(��q�O�Yހ��y�nB�`�Q��N�PM�������fJ�/ɕ��l��k�K��h��Q�A��b*�Ԝ<�w��]�B3�yO�L��O��|Xwc�@^|�S&��S�TH��a��W�b}Z���I��u�}nV�p���ymwČ����zV���G�O���zx~3!�t�ȇݝ_�9�i	�t�|�t9��ݻ2����܋�����uo�Ի!�2v�L���݊}�h�^�i��V!~�x���>��Gu�8�+e�B���:D�@;�O3��rM[4X3�6�䷚�v)�Ҩó���Ha
w���F�^�s��9w��!��2v珖�v@�߳�"�Ճf�����0���'m���"N���6tm�տ	���T"���<6��nE
�n!%���O;�Z�姄�z�%&���L�g�6�BlW[��5��B�u��ir���������󄜄#��@�	b��C���Jr��8g�O�Pֈm���h�~���{vC�k���3{��:�>��=K��b�j�"%��*&�<�xz�^q��(�l���C��RN�'���:R��׋g���U�����i�(l���2�yɾ��;��CR�^�	4g�*W%�/H�.�<�sȟ�_0��J�Bס�ത1Gj�B��=����oUy��K����/J]{w�-���H�{�%f���Q��[UR���M�����ѓ���x{�}����~x���k�@�!�7�j�S��3�f-搁ߒ�N���Z����+
*�B�#Z(m����	�m�Fy^�`m҃�׬n��%�9km���ۃM�W���Id�@P\�*�52�-�ZY��Ŵ�z�1�qdbs0B�P�R�M��vӮy����ð|�$
:/[V���~%
7�M.%�ج�����K2�2V�([ޜ�rf�������k�3�c�b+��o38�t�ʙ�_Dxl�3�G��7����������F�ᄗ�@:])��YcQ��9H����]ms���_qv���Ќ����ki�ֱ<�L���ȓu#���HK��^��]wGʎ3�[�^��b�y���uA�I]#%v��u�)Ұ6�o�E�'�����ci_��#�d9�(^�lJ�rR�*>.�]"�8�(�/Y�u��;����h��-���"_Ԋ��U6�h֯n� ɋh��I�N��	$����{�ٸ�M}��#l�>f�ٲ�Z�V�kF\*��-ocm�eM�GC�>�bGv7��B�(_����T��pj
����f��vW�Y���~ۘZ̙�Xǯ���O��,���!A���B�S�nP�~:��{���u!w�P�{�U�w��d+��	�GB
�7�AQ{=q�Oo���< ��&��&P�2A`��29l�v�j)�iR؞�s�۴�la���>7,6����hv���X�9�P��������%0f��Y���"p�l8H�X5����|�d�8�I��P=���Ѻ��	��&/��yY63������{�0����]Ӽq>_�"���1:��[PSg����6K�A�d����������f(]�'�]��/�Z�������z��ܘ�8bh8Swo��_�:~�A
�]	XR�	�1Mw��G��1�1��r�*��Q��eiV!�%�Q��7�����zD�#�;��Z���kT�Ғ�3x2NB����2��
����N{���oѪ���լH(��9�j�
��9�6Z���(�E�2�K��E����� �.���ԆE����;���i9Ջ�a]�b�Z��v0��-
M1bөhx��[���_W���G��c��t"������16닔��ە;�8�srÉ����^K'|���3��D����FɋM��.1m��JS�����3G��x�"��*7���P�Ҙ��S�d`*��-q?�\���Q��ëm�hI3o��<��JI
���B�.�J�5ʦ��	��@{d����
�J+'�^t9����x�K�Y����kD&���<���<h�d?܅"�nᄀ����(�1�s
ДK$�'2��W�5�mS�["�i-RH���h5�,o��}����pdk�|Y>b4y�[�'@����}�pR���5AN�.r�K�,��V��$������N _d'mG%<N�y�Ql1+f��h�1�6t@V-Є���\��9��4_�,aJ6���|�lS>Q׏���G&~�%1��,��I�H���|!�I��"7�7`��t����}Iv��G���7w��㰢mӹ�U�+Hݴ��t+�w�*S9�ej
�e����"��W�~�T�2�z�T���uΏ�7�;/�
{�>/��W�5V�)]�Pll0�'��O+q�O�ƣ�	b�6���zi�}��΅���k��X]�2å�˲�*�8b��]�Zh,�)J_���*YÔ{��o���f�k֬]�yT�W�d5]a��"w�<�۱"�'^˂�
4�u������^]�N
 K�DX񚼇/Y����w���F�;5է
c�tiЛ_g8���D��>[���}��Uq��$"! �-�e�3p���!�� <3�pBJ�d�� �Ҭ�Z�(�Q�ɖ�"�e$N��6�Ac��_�A�\J/��N�3%U��UO"0T�^����|�Fy�ADf�	evB5�~D=M;�\��g_�;?��~q�#j�,"#.K�N����<��E�
��� �������1�[�q�M�6��ņK�[EZ��s=�.fdlnAbK�1�>r�8Fҗ��F�3�>��ީ���?�k"���M�:�����|�<D�ȇ�Q�F,�+@�w~�u:��� �!�>r ������#Q}
$Y�ܲ�=H���Z7��u2�o����u��=�j"�SY�nk�w-zL�!0�$��<��A!t����ފю��by]�UyE�{�ń�)�!&u���Rߺ'7�HL{$�*ao�0�XO.�D�S� ��|���qՊ�&&'k��T#��>��m5��C�� ."�𩼢qU�]�9�a�:ۇ̩}�t�7�!�H���mV�Ķ1m~��G}�6��F�"EH' �{�!���28�H��봟� N֝��uaa��a�D���r��<,JT�;L�Bd��IZ�z�#�ۢz_D�jI��v�Պ�1_͙&v8`�c,mA�5�4�/�_-ى�� ̛/�j�\���yQ@g��=Ǭjm3u;;����ʙC^�au��hQ=2�1p�9�B�-�����Ut�^�
(#�k��Q�
R�@�f�O�WL��/���f���9��$�e�*
�!r7��)������0��O��C�]?ˇX�>\2����a���<U��/а���ѫa�7�.�\�ڷE�H��Zլ��ynؓ�7f��s
��ٖ�m[������eÿH۞=?�y�}o�fG�61jZ���c1�^g}H]�*z��v�
�j��d�D�F�R��ol;(FGT&Z$ޓ���WG	Py�޲�SA9t��̚~%�?L��y�4���}λ�rf���sӇ�pZ:�:x����pO�2Ƒ�Py�������'�؄~�b�ė��T��Zd�4Xr�=Ѣ K��
KSq��1l���1s|�&| ˘Tc��e�ל�Ǚ�c���lOw��ױ�����OP�;��́M0���F�|y�b����I�R߹n�C�/��1�͏x��}�=�3\��������g�d��7
����@�T��8�m�ƵZO���˩��<=��%.krF#�r�K{�VBb��P�6I���`A��P�*0�L�~9@vh(m/���fF�&�K��N���䧵ns�z�c�%X��Fܫ���_{m4 Q�{��������V���>��?�.Pga��hP-J�^�$��F]�	���E��۷�1"[S���!��8@t[�h���H1ݸ=l�7����K�5�� ��)qr7�g��T�D&41KP�3�)���{�
�.��iE>�&�0l��X�:�_ ��oN�N�ղ�`>�����
��]�_@%t�Y�T�;�����dQ��|�)���vx|�5�.b��Q�ܩiwR]�D�c��
�ee�.
K�P�=��EӠٚt��q�w���������g���x��c���X��:p�Gc�0^rb��-:]�Tx�L�s{�:;���,�J(z������Q
�(+J�K�S\ٶ^R��"/�w�{�w�6�J��"X�c�R 2��`ޥ][�Vݤ�i�l+�\�R�(�iu�}�ч�Ƨ-��Uѻː�"�oٸ��9�}`�8%�^y�~�T�{ֱ����wb����j�Z")$�x'H������d�lu�Q͎��"�W���Yr��kc;���k
�-5���Mi�y����{h���y
��C�]`�ߦ÷��ݼ���`�]��2��e42|�������mx�V>}���o+�,L�?8�@"[$f��g���݆#���b��Kr���;�|�O&͟�;��珷�^$_|�����G�p-�$��'qN�E�����Q��|/�.��0y��Aߔ��w���C��ep59�~�M�Nj��%�K�Ņ�eJ=pn1�O)���F=1�G��=���!�#��>RΊ�t\��Zv�,���O�U�,��Lʁ{qEp��`��X�k8�� �$Ѯ���1���e`~?��m �O�6��T��3���@2�k�(�m;�L���E��c�iU�w�'������D|����^0l�g���zF�ߦS�d~dI��y9.������09�h����@-pN�2���`_6�T%-����bZ8��1���A��}u��
�:����إ����q�U�XP����#�{�-���M��|�"�r�F�N�>��3��"\^�{�ՙx�X>.\��0�^e`�+�(kZ@Q}��ҵ���|1�����||��ҖF+]SW�"�j��(e��	^W��֘�Z8�BTR8+-w&$�QP|nf2�W�ύm~��[���S�MT��0��ٷcgZ^R8�K�1���Ǧrdz%`���l}�w�G/^��٫��ۓ㷣�O�=Xd��!�(����� �r�^_�?hNu��zGzO�7���{�f�f�a�s_#��$�xR���Z%Y��h�+���9{�jf&;c�櫥�-�'�Q6��E���ɿ��7�o"�	�0�6B���3;<�Þ2��\/Ͷ�{k^FV��ڣ4���.��٨�
��I:D��vq����֙~Ɉ�ӎn�L�@�
R}j����bk���Fl&|l��늦:X��R���D�
��3��-���<���.���
��V�E��Sz���T�JP�fѰ�_��ٯx=�č
�D�D�
�!����5 i�~4ڝ
d���r�8�=
�^�H���0�T�Ǟ
c�[!�_�%>{q::|1r!O���r��e@U��-�T��͏t�2��-}���R*!c��,Vz��U�hk�N�� �f
S�,��Z�eT�MۅJj؉P:5�Rag�9�ҍa�[9F��3D.�fH�!��4b���U��ѐǫ
bU�w=�������Mqfn�8d�G�8T�͏#r�p~��U�ၷ,�����t��Qpo^��LotmL��oȒ$]��EC��Y�m7dM��;���c�G��{2�Y�k�\9��8�����5�����z�t�%�D_]�\��S4�bȬ.^k��i;��'�쭐���	(y���'M
YC>�}F0��%��>h៼�$hpa6--�c��;ۄm��RMڗ�7���u�ݠ��|Z�z~H��rH�FV,�H�dTa����!e��x�`h�
�������F�ẁ��赵P��$�,�i����oO��%lU�iY_�u
#��gf�ȫ���ɜ%�Z�*{�_g�)����Y�Em�4��iY����o.�D_�f$$DN�3&� D���F���1!����$?�h'T)
ج@�X�f�)�2��
��]+¨�C�J��úD�ع����&�ɝ�ybI��8Y����q��6��4�B$
�B�[<H���h����]KoA�+˩	JV\�$*\�T��Ԣ����H-��*���c�c�g�*�DoI3���?��g��X��x9�^|��WZLe9��z��K���=jkۻa���p'������H^�BO������q��6њ����[X5�y�`PC+X`lXh
�#0�? ��HA �I���/̼�k�"���$b�𵬬�O&��d���̆���2�Y
!�rqd�X@�h��#�y2��r�$�j	�݉��&��>V��
QW�zPK�A;�5]"��R�@ן�������t�ѳ�8l&�i�Y+{Y�4�Ɛ*��
m��pL'�:S�㒨i�)?G��y�	�d��<���v��{��:n��Zt�����B�/0�wή]|z�v"�w��?^|9
�,#|��ň�q��r��/i2�0��m�]Ŵ��ë9VW�گ8�7�,�f�I�HVOM�M��!6"ڞ�p#
6���ذ&>����PG\Ld�"��c[�m���`�.�t�+�ǢHQ}G����9z��^���&��
:r������g�#��[��	o���Yָ8N��	"<�/}�y�w��7�
R!ڪ��q�
��Gx��9:c@m��
z�p���ϧ���ܠaWZ���3"�Y�W7�:��M�vaj���-��`��e�O9L'{��PK�`G�k1�xǯ�4=Y�5ia�e�6�Ɉ�ik�)��p��T�T�	Ƹ�1�G�!OV�9Q�ȩ�d��ؔ&��B@��dl��zB�k��a<
zx���*,��=إ�
��1�p�}T
�٭��
�y+�d�Fcޑ�#�8Q;R��f5,M3�4����Y^e�Y�4�k��K�~���at&��'�9f0{�E�Ơ�q(�pP��y��'X���3��"�h�u@�0+�y:o����IE�e9G1�7�i�'s�Go�V��+ �+8��
�c L�wy�\�6nD�����gթ>�?�t��BMd�ՙ�"D�+����*2�F�҇dr��_I��8
��6q�l:�aoQ�Չ�q͌�Ha��	ec�]f��Z�(*����u }me�`P��ж��m��G�PE�w��Ͳ�ߏ��f�3�Lv�_��0����][s�F�~ׯ��ERBQv���%GIi,����r�L"V*�IH˜$8hY[���}�� )�~�ڗ�������JkL�ʒ�`.��ũg��
�b}4I�\�@(��ڢ�F9��cS(0��&�e�-=8Q��]!�D�@a:�X��@F?>k��F1�]��5�}]�3��Q!�i�����7J�>�Ƈ
;*�5�N?�9�~#A��\B>���db�b�iuS��r��L~]6t��;�k��IrD6'U�T�2�E؅^��9Bش�;(�U'bi�2
� ?��'�'r;@����Q�?�Fj�7�Hz��q�h{���Q��3I�!�dǴG���{�&�CI*O
��FY���
겐ey���o3η�ӏ��
��Sxx���g��6���>\�DEq�U9%l��!�ί�eIhU��6����p�r��Յ�[�jvȏN��2_�*T�G�0�KXp�p�-��%���@�N�`���6�i�c�i��zB99t@%:8������n����ZA�ᮤ�Q�@��w_�@<�����ø��KN��$*,��+�gZQ�&Sw��/C�Pc
�&/��~�]I|l��1��:�ך��X�=P��<�J��?��)E,��N����̉Ȕ�xxٓ��J�f[C�t-q��(�<q�i�$[Ɩs�8ځu��	�
�L
'���OR5�cC�DunS��qEq�����/��|�>���S@�������3����DBc�j�%����>L1^$����_*��aM7��"SKsj���
��*����N���c�*�cO)���˫7o�޽�I�g0�
M��ӏ��+��jS����b�ƨq©��U���������h$��1�)s�Dd0>^�;����Ʉ�RdG�o��E݊��b�O�����\�ZH\��`�
$�"?࣒�֞b�I���/��N��t�ʛ!P��&��O)r�JZ�I1"� ��r�=�hgR����Zm���E�wj�t��,T틀�2�:b�zE�������&�c�IWX߄�j�)��W\��a��ž��B]�t���E���Z1�K�/����ԣ��*oY�������~hi>����bef2���t���[L��Y���tڕ|E�f
��(
��[���J������ʝp�hd����r���v�5��J:5�y�&��p�z5Be{�	l��~y]"��w*n���mA��3k�䷱G>[�$Љ:��_��!@��R���;?;�4��兗���W[���μ\(�����6����	����G���$5h�Q�+V6N#a!��__��������H���#��+I��iw��|�I��f�{v��5
��=я;�G�)�Ƒ�#-Z�/,�h:"�Q��ĭ��"tE��i�u"q2�0�ӷ'/�o��P�wrJ�[:2f�c���x���n�[���(eۗ��N��o�
:U�;��w�i�X���kjyY����΢n�Ju�W�N(Ӧs�O4	l�!��a����TV���ñP�i�Z����g�����ô�%�
~rESG5�@����[:=&Tqv�1{�0�h�2�n�D�x��mZ|Z��2aO.{aݕ0���!�LB*�JKN޴ڐ/v��W��tSV�k�8큷9M���F�Y<	)��ܺ�C��\棑=Z���R�2�;O0�x�"���B�u���uIͺ�[p���7���p�7�f/�@��K�q�r�'��ɒY�x�ޞ]O��{Q�B�b��ET10���N�.�ķ;�3[Ӫ|��xM�a�h����XG&�����}o���v��,�5���|���ٗ�h������v�,�ҕ�G�!�
5g)rx�g���^�T�:��P��~�oX���EY��򿫹�6DC�n֣�=�n>5W�<q�,8U����g?;u[�"���e�I�ySA��f���B���Z�]�����w/?cҶVz׺�i]���y������J�:m\�|��%w�j���`[�*dM��1|~ry5x{��^�2����+������w&�c�TĐ�di��4�\cd�F��D�g)��	"��Q6�٦�h�Q�w~��G���j�{�������v��n�Q5���_�x����v|��
7
�q>�z88��c1����f0t%[�=�2�j���
�+D	R�[�(,��%�8�oQ�+i��#��
J�-r'W-�U��yu���og�\�x5v�ƺQh���7Ntj��+�/]�0�Z�L�*12��^�@Pi4��4�<Aߛ�G��2����Dw���[�43b|�S8p�����
'P�	+M�_5좯���|�uٯib'�{F���GO��><C^�~q��ً���og��Ÿ��ǔf��]-+X��hl��g��Es{��-��[��yZ�O������`L���E��yS^�	r[�Q)ݧ��,,S��{���H��e{�E� �d_�U�-Rv'^��xe�?K�m���o�L�r���ݤ�t��ĵ��쇵�4j��W�>�
�Dq|����
�FLT�ȳfgK��Ё�

��6��/���
x�d��jS���p�}=�_��p�A�+�h�j���l�R�}�$�R��)���N���<�<]/Y-�32
'W��l'6��82�.�t�.��q�@ I6@;W�� >!�5U>.RF�Ha*hq��ņ�2Lt�'o����@�>�H9K!
IJ��'��W.Z�-ʃb3;«K�M
TLʪ�;�t�o���*9n�2s�r{��]���w|���]��`v�Q@Z��"�	5?Z���l1�����3�q
34�)�dM��j�2���ff�����d��<
��6MZ���j���9'��tx[P�h.���u�����-��s����D#-��P&�:�_>BU����)�3��=!Q�sq,�4���` ��3���0x�J9VW���ؙ���2D�С��bʋ.d|
`��51^�I�2���+ �g����N����#�/�B�r�JO��D�|�IǍ���2>��i�5�r�p�U$��E��{hP�`�VEm����s|����/xkQM�L`q��kl�O����G�3�?����k��4U�k���{���,��¸���B��I�(!��~�]ed0��N�As�v�h5?�'�L/&V0=|@;��w$-A�W0����'��)C���kzT�DO<�Φ�Ӑ_�}����h�NLb�
:��~]x\��!D
�	Qv챙�|�%�X+�} "eb�u�(�<a�qs���ڜ�i���Z���q�&�a*�+Ե�śT�	�<y��
BIJ�����v�����e5t1�KAa�L�$�8���֯C���ʩ�G�����y�x�W� �Rb�Aǯ�����I�y�9/�xr,W�j�����{��)L��|�b�yoZ�O��ߊD�;,��d�(�XҝVL��"�p+Α:GF(~��]���`ǖ�b��]sa��-\l�V4�RÁ��T��-�`�K�[b�i���a�k����T"דÐ�`T������z5��ǒ�E{��0�^�H���f�O�Y�I{r������$�s8�MrŻPw�0<���;��J�'�$��{a�Ĵ����<_��9�S0!
�Y�����(��J'�
KΡS�/'ь��Q�v��9����̖�$F:#[^�C�XVpfO�b�Ehr%t>Lм����6X������BЍ	�3��H��)�B�,����0 �ԏ����o�a勊��J:$9u#�c�[���_}�[Z�%��@�΃^���;ԭ5�]]ݤ�4Bl��,�\O|
�Rpv�!S;M��N�T�%�j�<��]_`N
[jKʥʧ��w�K��?���*�sYM��bL>�����8�I
b'�����b~C���u�����S �Re�Z������ �[Y�Frn	F-f�4'�9��d?�{u��E�'�:t"V� p�"�v��H7=n�t6P8�̟��e�kUBW��Y��-֯=-;�q �a�3�V\��7���z5\]��.���y�Ǯ���P�^)�Nr|a���x��c=Ov!���'��T�"�>���
��5��^�(j���BC[���˯��v��,@SX-�Ռ�I����G��i=kK!��x#��<h�(�c
y=�C�?pAo��Ep�A�l�I�uP\�[�Z��Ĝ"�ܫ�+�c'��F,��
�e�x�L*��Z���z����%�����	F���s�I{Zךs`E�c�蠽�o�	��7��d��	���K�}5�B5G�T��aq�꽤~�T5q+��+�hf���̐�~�m!��8PI�_������1�h��j3���@鬲C�(*�$غ��҉�VO3�lq)NK{��m)��?lS����w�#�@����ԕk̄;�ᠪ�w��w���Ļ���z�М��L*���.���U}�t�g?��Nz��a��};t~��,?P\�,�����R���^�i�'��+^���on5�-�Y��.��9]���=ͻ����	S^]h�!�K�V���q���iY�fd���<�.��5�.�K8V�6[&L덉�Pe�N��e�}�C~�c��!�煭ҭ�.=��wR��j����!	�86p	��J��8i�oؓ|7��9bH���x�S����}�J;,�f��jC{��M�&����T���۸��z)�?�6�g���M�q�w�q���Zc���5饭LM:J7Up�-�x�O����*�)�U����WYq�W0^���`���k�k:c�BTw4o���9�>��#BN����n|^D�ʱ
�wK�N�e�:;ȒR�a�
;�R��u�~{����m?�{��N�o��0R�k7uᆗk��d�
��@�j5��mP�w��[��)�������a�P����-]q��J����O��I	�-���Y����r�p�hI�Zթ1��,��I٫�����Н�C��Ƴ�J���	Jv)L����D�%[���ڑ����U`sN#� �R�;	�F���$�������z��܈|S�,)#��vs+B���cqS��%�D	B��O�=�����������A�K���8]j~t n�ѯ��_����6��Х�iƉ�c(-�R{5�}	��T����������^^_�;�;C��0������b��Z�2� b�ID�[k��3�:L�����K���S?��a��3�Ե�Ea��D����@j�ra����T��X�@,�y���U��qG�A�Gѯ��mH��C�A�VZn��x�ܷ��>��Iy��Ē��}ha�������`�
Bc�'q�:���l�;C@��3��0�oݣVVtNQ��g�n4@�1}p�5��K߅.����o+�!����|�K� �n3a����lh�
S�5S���
&0�S���5��`�VabK�u���-Z�Q�z�o/�TZW�Z��3�dz?��e�6%��5�:v������bgl��IQ����()1iF9��N���n+
s�|T��`X��e(`���R�eiuhR�{>d�19����<`�/У�T�#ƥ/�I#�z�3��޳�g�::��hPy���j5�OQxL⻫��%�>@|b:�/�Sj(��L�6���Vˍ�Eso��#S�{�/�=�D]��{_H�њ#Ĺ�l0DV��|�ˊ5i�Z_�fʺ �bJ�:�U`cVK_8\�g� �z��k�4�ص�E�u>��P�{![j��Z���Iz��im���l�:Cj�f�h���„����eY�<�ip��4a�Ex��DH��Y�9.LsXg-��HI���
���S�n}�~k��\��Ѳ�Ci�"�j'Vf⽠��
AL�!���s�	C��{��\c�Z�m�5Bą���c��#��l眔����0�4������#\ޞ�]
g�@!����܈�6�:9�,��e�3AsI���r�(t~,˛�b�@f���/MG���f����H�����w�//a�ǔ
��*�N�AW��;� �2S^㞊��,�-0
I����>β����0	��V��M�\�~vf[ڐ��r��_�y�b�D��������y�`�Ĕ7h�8=;&��q��֊(�����
�^P��ض(�>$�p�"�\0L��o]@�(��3K�!�{D{�w,)���Տ1F}��cb/���?Y�5���������0��^�o>�7mM�ƷM&�<ܢ��􇇏n�0�d�����Dp��D_�'ܮo��󝡿$u�}<�ߤb����T�,ߓ��K�!Cg�5�*��q������%!#�5Bu���B8%�*�aHy�wpn��@��3_j�O:mm'��<��Z���(ߖ���6gڸ�'�lW�-.�|T�Ù	5��#�T>���%p��2'�Xm��K^1��a,�˻.�L�W'k�?�p���4t,�S׫���+�r�
�������ٻR~R�]s���h�)��RK)�R��Yԥ�7��+8�u��0@?�t�66���s���{�Wئ~���
{���<ˎ�g���,[Խ��T��m@�z��c�n�w�̺7�#2�%�IIj�_����| d�����5)iA_8�8�)Ʒ��_���E���r���]@��RyKРfg�*t��h��� ��졜�BI��b���.�\����a���^z9�ZJ�op/����71U�&Š���?�%����fEzpW��0�_�1�H�L-�_�3��&���t�6����fZ[ly[�~�ع��������]{sǑ�_�be'  )U��d�&-�u���SRQ����@,n�#���M�fz��;�K*�Σ�����fĴ*DCO!�ݥ�'6�8�`C#��6�8@p�$����8�BCbӊ��v	o��3�"��Yf.78��j�KPFF8V��ȸW;E�3�g�h�5���b�a�	�欸ފ�a ��AoSDh�~��6~5㤹����L��n'��|%��k���mK<9�M��b��`��&Ex@�Ǫ6�Wy
�sv�uY	��ma
4�5�g�A�0J�J�PY�q#k-���-�`���Y,�@�\Q��8)eᜟm)M/��U!�Z�~�>�޳"�@�$��DR]p�3�u(%l:��
��&~ek��U]]��*�A���K��_^�:�e�<��q�_Iε!�]iZP�E��F��-/���?��K��U!�C�Z�� u��F;O���ʍ_ƺ
�|����T��T��5�N7J
�fAm=V��6��4B&��x� �ϝQ��'����S��^{��xB-;ws�y/{m����j�o�"��tZ�K��'�����iM'���D��m��\Db���^�{
n>~O_M�$��Z�{B=��^P�Sd�&ݮG��jx����f�έ�k�����ˆ�|ޚS��?����x�O�.����[�z|=������J�
�Rw�����4@�f�DL�;W���A�H�;au�)�!$��*"��q\JΨ'��	����#��3*-��С���g_ p�k�fs�\�Q}����=��˓+H�Ȍ����IG�d'���?{upx������;D
�Az�|T�=��F��(��Ze�Lp"fy͉@%��
�R�Z>#Sx�.��g@����`e�(՛�`t��0n��9�8�=��Sq������8����{PCq{�w���E0�fG�Qd<�w�&�pdق�Bp����e��Vs�[� �� �?����^�?qs�-
.�Jt9��F���k�qIGK�J^?}{�_5Wf����x~c�\^��m�X8��~�;q3F� 
g���#�����2#�
�RS"���p�Ó�lU�2R���?�E��k��緑��Y)�K^>U��^�pH��V�K�G�Y�æ�ۜ@`V*L|{{;�}9��˭�[��y9����W�+���$�~P\�u64����|�ùaV��3���*�K�7 c�2'���A?~5�@�� ���c��^`������f�7WZ��0Bl؆�
Kl�?�>
>
>5�z��z��i�u9�z�>�jGl~L�2�����7/~�j�_���J�m4��¹��>�W�����83ŒE�u��渠�����^�
��i���,n_�O`RM��q�׬8<
�Z�ǔ���@r~�g�+8[��gQH��[�W�<�������	���(��X#�K=BA9l1���ia�O��%�s�E!!�ڰ�k�Z���n;�Ǯ�NqDrpdc�Ơ-�`Q{ V��KYԞ�HF�`�@��1�JQ�"��,�P�zR��c������?��#�/6c����I��u�c��\f���a�T������"a���޻3�B'�>���P�!G������e�b�'HnG���]0�^��N�.�O&Id~����{�\�u��L��>.:��EBЪR�|0�A�\�Vu�ϽwcZ=�و���
��F�F8�f��]��1��N�EFs�󠫰w#�z��_��^ĺ}	�?�Ţ�=�Fz%�66�������<��CDR��6��U��FG	:�ѩ��������C��kO��:�M���]N�;����[Ɵ0/�����D�K�'��0��]�C�J?�Q�÷��F���,�����IS黼1|S�I����>���� wϧ���opD�v~���]g���k��=
�v�r�ub���B�I�6��¿�~��(X�d�tܱ*�%܀��˙i������O5�t��?He��wN[j;7��e��@U���<��-UI����h=S�	,�L����U�P��s���`�3�胹Z��+I����t�8����=]�	h����^��9G�Ǜ�`��1CƐ������{�i}��!e�g��L�g�e�r�,�Qm�Cq.��o5)Q��E���cY|�9��I�3��ta��¿e��I
��n�����B�\�,:�
�#���&�L�m��֋EL��b�mP[#��c�f*gf�E��ٶ1p~����1=/��E( F��ŵ�q	g�Ue.�gh����%���A��f�`�4�ܖ`�k�?���o�u����v��vo��uqh�SztK�N�T&&��W�!*���'�َ�괲�K�1����{��v�n�[�������38�]�����
�ާ!�|W@�П���_��L���"6�`ǀ��,I��(PJ_����9�dwޔ9J�S��q��՜�v�D۽&���rl���˝���np��#n��4��j�ʍ���g��̕l��R�ִ�S��G�ؖ�"�T�7��x\@X��������]F���ñցA/MPU�Z|��ը��u5 .z~�cB#�D�{�md�R!0�_�E
o9̟��J�?cp��嚔��
]"�/5%u�,j.
�Z0R1���	���#K\V�p���'�����Gn,"��HR�hD�	�8��2"v\�͞\�|��3R~+�QGvE�zpC�@xE�6V����9K�\�~F�#�jK��f5\��u����1��(괧h��+9]�96�g��E@w��#��g��,���
.A�Mqgz�6��x��Qy���K��G�W�%�\>���ϰ�<u��M˛��A~�x�B��10�������̗V"A	R��T�r�Q
sן.�Pq�6z�E�Ţ��ԩ�{V\��^���pP�#�M釯�xҀ�>=�*gS=Yk�/�L|�4�^�Nя���G�l�_��������{ӷ�k�0�	��j'�q�q#�6������5z��8�_Ce�3
�JR�=���*���J��#3j����1��8K��-��l�0�P�y<�
�B
z�w���@}*Á4���L�M�#�*(����]2�]F`x�˺�� 3s�;h�ρM��4�lz�Cu����4E{����L��6r�H	U���-J
��~����\�j+���)0k������{�[���VC��;���[)aڬ�XJ$�uCUܴ���=1}��?�_�u3�!�n����+@�c��jo��ww���^����!�p�tP�!�l허,o�����K��8� %5�;2�tm��q*�����
��K����/�=M��k�t�� �u�v��d�%b�DY�`3���:7H��Ob�$5x��^���r���1b>�C��X�TwH�
�����
OE���͙Ӂ�p�Eʣv$���V�j��u��-��2��FѾ�Z$û�� ���Y�C��y��l�q�7��q���c�DQ��#\aT����`�z-�9vds䄑O�N�~o���Q3|��$��zⷞ�m�'k�r�}N2X�Ҟ�1���<|j��>�3�d�sqa��5�'�ٕu]�h�DI�}���;U��4_�"�����65����q��r��=��kc7���-ZǷ�ӟs�δ��Eݮm���ν?�S�֣�3E2�;�P(9ͤ���@eBv�dR�4zML0Z���,�!R�=\� �U�g��2�O��k@���Mi�ΧRB"������6@�j�߱lv��
c��@�Vd�����8	Nnb���%�f+VS<�ek���	�����B�#l\R�
�;��т'(����~!Vp��"������:�I��xQ.6��a|�!�נt�##Wa.M���C,���H���4��;4W;#���8^zR_���&�=>`��[�&�VAV3@��,q=�x��hE��z��l���o��Bc=�?�����vv�	cUe���,H쇔�q�Ej�C[�6Ō0��I5����^�(X:ٰ"��Z�U|8*��VR���{����M�%��f���)��������)fېTȽA	�;�qd�Ovv4neˈO��{]�����Ã����*F&K��S����C��V4���?!R3�;��/�<�E�͐��#ۃ{�L�@}k�"%�_ON^fN�%�&J�/�]���
���r��g�X��)H�Z�*
���=�ht�baH3go	_�o̅��q]QJ'2��{_���{N�1[4~c�u1��ź�tq{�U�Yf��Ǿ���E8S���"[�`f�?�b��*��q@�6j0K�@�S���d���v��l9��M��5�4��%�����/�>�\\1,�����U��{�U�:�=#a\���U���B��3�H�ȷ:�}Y�By��:N��v.��T(#W3_����@ehGa��,s6�a�>n��c�@�Q�΁��֨dĈq�ؚ�D�0�ݍ�;�pǁof��_�
[4���#�\�2�����.�b*Lo�S�@�ӬY�h&q�۱�x�%I�h{ˊ��ƿ��N���a1���I��\1��/�O�fP}�{q�3����-��	�EU}0��{c��TH�m����}�9���s��A��E��Lf�G�}B�.{���vZ���E9�Q��<B����0������=}�ڳ��fYW���=��	>W�GI�"';�,�^������G�	�"���,X�p��e��Ba�+'��d����/�D���YK&�T�B�u ����h��b���	qQbR=NI��shxe �F,٘EǙ'�ia+���%��_/��5'�.����񑛱�r��~��>�S���� k��]b��{m�`b:O�)]X3�d�1���$i{�ߋEUlH�[N�94�N��s����>G%Yiα^S��X^֖�J4�E��O�3�e��Hi�V�6%L�k���y&(0�A
�o�C`n�pg�1��B��S"ۿ�����'�*Y|1��'�3��㕧�0hҰ �,Z
��?e�byF"��>r/�;����sS���{�Zը�@�b&�
��Y���EAꭩ8kM2\�D�jq=��c謨f:d������'��M9L)�FK�_�a�$��ϋېp��^T���qӱ���`���X�v����D˛��n�w�YC�r��G��+��c�Sv��q��Ft�\R��Ǩ3�X6O���,�f��ir�xŢ�"��B�`� ��`��RAeƁ��\�����\@�MH��!����&c�kzS��_=�=ϼ�)S�Y��D��C=s%�嵔����Np};Jx�p1�SC�X�xZ��u�iY8".�gu�my�������A�>0�XB76��ԉ�-��㫪�h�>�g����$ΛB��}U�>o%8pm�:y��_�ɳ���5�"�{ȴ!��\k~ ��o�ϻ�Oq�s#��|��}CO��30/�3�w�Y���.����,����1�fP6�N��R@e%�*�5(2��HO莯Us� �6{���t{��F�BU��A>������o�<�x|�ٛ��?�h(���{k�~��f���1�r��>�_�Ռ��`�:3��Va��0?�kb��b}���)L��<"�涞ޛZH|aq�i����U95�c
�^}T��sY��c,����يY"���<�]�p�w��ad2y=��d�Mb��D*�)K���7`�%.�'�p�е-��L3�Y+`w��PRC����myɘ���!ܗ��Z
0���D@��;}�S�uЃ��o�>�QԼ���1;��8�>�9�/,�K.a���|�G���Y:�W�%��Y�z�m_R�ӇՌ���]���+��z�顐�[͎Ќ��GF��}�g�5�`�
�F��׍3��Ǚ���Ԋ�Ǔr�a��qG�pjO|>R���7�a�(fX;\a��aٿhКw���n&�����(��(#�|U>��
˴ɒ��80�c��s�=�#��-6+uȥb��Q~C������E]ƶ �S� [�S�tS�^u�0G5ڏ�=��R1���b�d
)�>Zs5?��9w��;����Bbyn��U�,'�].�koTd��WF'g��*��jK�A�MŵV�oʦ|+�7;����%^ZW
�]̊�򼄼#�c�3��nZb��1�S��^����'zm/&C�"K�Va��ϼ�_ba;(2����È�;wy�m�{�{J�� ���Nua�mm���i��ZA��Ԟ;9�@0�j1"���&F4A�Rz�W�l�ة��	߀P}�,���z-O���d��V�TZ��Ƞw���by�\֥aE�.Vk�3^���{�˼��|4�ϋ��=�r��������A���pf����CTbQ��T0ƈ�3��Ћ���X����)�X�x ��l3�t�#Q�v�oK�W�z:�<�R�57�)H�0��@$Ϋ���s��ɥ�(��%�R�/����6�h��yVA�{��TIt�s㒐<'dO!l�9���Y�$t�"@0<z����FM�'�m�&r@�FM�#HCp�#�� ��ٽQ������=�I�c|D�`[���!E�a�8��=~�H^�L�<z�\~�sp<����h{�u�E)�t~�&IA�����Ϙ\ѵ?ؽ6�;��P$TUD�ˡ���5����Th�ț֖���M�B~��x_�}���s��(�̗k_���o�ki ڛ���VF"?��&��f�U�Yl�D�D�Ȫ<&�Vg�a>1ge�ZAj`^�`VS0����3�eR������%^��=2Ԕ���pyA0�W!)� �푐j�/�gDI�0=��.4����O���*m@G��3�`lK[�g��H�ǴL)�ԿͶ�R���I�*�8��7�[oG!�(��vρ�Gͅ�G�f�� ���8z�1z�S���s�N��+���1���<[L����ԧKu�9p}u�3Zm��9��fm#��^3�i-y�ҩKU��G�!�U!á`j`!�5�z��}17ʃC�~�;o��՗x(Z�ͼ���Ԅm��Rr��Z{P!��!�sɇ�F�5�4hb�=E'0'���U���Ɇߺ��p��nnc��y�װ�B�x���n�%����w^,�|1��J{��
�lmi���bz�Ļ���dž6�y�B�qx)�@?s�
VK�SQ!�f�8���كQ��ZK��X��!?�Z�����-a�-�?m��^�	m�:GI(��;C��M䯕�Q�QLo�Cz��s|��n{�C�^�0hT-�D�����Y�#z�t��n�>\;�ĝ���|��-�߭���I�tP?[����ZC�Q�!���{*�~�8���.��E\!*p�t�'+`�ThaI>k��Bĺp�ӊj1y�.�,\�z#ږ=��ᣣ��&¹\a(Wg,���ol�<YQa�@�"Un���1����琻�>������ ��f9�<��2�5u�{N%�O��o�aH�-�f�)%�ma�9�D��*~�,a'�K�
XG�٘���⢪�F�J�ua���W�j�->��}�o΍=���k`L��k�A��U�
�7=��+�͡'I�G����!�D�R� E�	DʙN�Q&lll���;�FI�W�K�H�p���D��4E�}�*6����=�}l-@�O���49x���qp��
����ģ������I�-(2X!yV�"��Ҝ�C���N�$5��L��8�|FM$#O}��RX���9�m����?N6��mrM�8��PN�X��G):��	~���M�}=����]�
��Ag/%nͧBW����z-��;�E,k�C��ش�9_�c4jה�����3ӣ�0T�r���$��0��A���y���%�
�)�o�tw]�r������X#�	���G�AbC���}�T�pm\���D�%����jƛ������C�k8ge��RR�=fr�/.&�dm��Q)Ê�g�K���A{+����V���~�:ּ�Ẩ`�6��A��X0�g�M
�W�S$�C�7)A��t ���I��%/���ks3y�H*���Y����ٶ00y�B��x���۔�X�/�n����W�e��~�u�Od~��q�f��2?�
�SY[�%kxY��=$b8�~�KKwZ?�)U�5�.5�K���T�zR-��`"��.�=�@�b���!p��D�ks��[Yi
{y� C�	�Q�wc1���{����g��s����%�%K[�S(���G5���Z��_ǺE�!�Y��{�b6�Y����б[�f�s��R���YWL���0���
=��`a���t�P���ˡ�^�a�]���Ei��Uy����{��g��
�P��B���-k�0�L-:4����f� ߴJ�A��'6H��v.ʑo;�5��ua�t�xrt������I��J�vS?*POC�|��b����l'�UR�۝
����u�ៜ���^j��y�z�0L𺪠n]�.�Ps�E�j�٫�k���������&�lu��tP͌ؐl4�I@J��)ge�|I�̤�M�ѭ�n������N��P�x��J��W��co/չ�J�B�P���S5��Q�e4�������*'l/���@h�8y��_��=!���ϓ����ib#�o��E��-�Fy���ĥ��irD���%�ՋwF��/s�´�8���8�mm��n��Jch��ʢ��d�O7���H�bV^��g����N*e��gv?�p<��+��:�J�vӍ�ҭ��II�!r5�H��y?�я�@Q��r�n��lg�֠o1J�����$c{+OQ���Cd�4T@�`���Ԫg��o~��t?�^��񶫖T��[�Oﴇ� W7:^��[��0F/[�m��Ե
��f�
�w_���ۺ5Ԅ`j���s������2�Kن��@�?U8K��?�;�r�[$M��ht3�"	Nc�����DU ���`"W��H���x����_;j`�`�1�`Tr�P��\�����s�F�3p�q��H� A~�8�;e>-�`�/�!�T��l*Lf����H�mF��c,�A#b�%o"CͻI��1%����ĩ���o�r+r�9��q�F?+�gM��a��~�����6�=
[�O�|e�9L�9��K^r1���A�Z���?�?��~E�0џ.�"l��%f@t$��A(�4�`E6U1��|����f�����א�[�k���(}>]��lV����~'��dd[ً�07�c!5I\��+E�����V�y�T���Gx��lIC�1C�`��@Ï&�۝��o���]�I�'��u�D�h���d�����O���%L�!k+op6��ql3?��
p4���� Z��l�G싱U�>
����R]��nm}?'���.H*��:M��cO�鸬t&"�Eno�P�@{�-�'k
&`���zm���_��1���7��J�jq��(�B�H����r����nKdb0H�9��%A=~i؊
I�
��Q���*��u�/�� ��$P��h��}�뎮&va�C	*���Y�T?Q\��+#�м���r`��7�W~@q{郹>J��ݝ2��%�����͕y[�LIkd\�3�:c���j����A��#�����A����(����f�DO
^~&�=ٯe�j�鹞�^x&��{13��ц[�ft��� %8O�ؔ�2�E�h�`������t&g�0��ס�
߾n-}�#M@U�\<D���ns����4��X�i�
�LDŽp��"0)N֕!�P���_y���|��,�I��P��}�J��EY1w�nή���Lic��Z4��B�,��
:S��9%��4t�xo(†4��I���b�����G^T�T!!`�
�)���X	����eS�T�2ŅN����.�N˞"������=��(��Sr�C-�?7�v�v	P2>�6���j79�
L�i{����R6�6q~y�ax���h�v�z>RS^�	�;�����w��9J�&��ϰ���f(���RM�=P�{��!�����ԠWr��?��=2k;Z�6pb!L6q�� -��,����B�y��!�p ��p)Q�63����*�Ybx�d���E�?6�3\>��I(SV��Vl���,gR��ęŀ1�z�����Ȣ� �f"�A6T`�Bk�-��6�ow@ٝ]�w�u�ʏ���ho5�λ��/o~�_D��&\��$hE�Ξ����7-a��^�j@�X�8�O$�'��ߑ���}Jn'nt	�BK��H�a�f-��H�����6ܣf�Lp���I_��H��Q�?B���c��T�jY����q\���Q�n9�kf܉5Qh�U=��[��<Dr�)|Cd�f�k��O��dx����+�ޓGF�?2-��+�2��08ZU�e_�E��	6��.�Q��z�E�:�S�����Q���de�%(õ�o��CK/d�wd�S[�go�P��=O��
���s��ֿ���a���Ŝ0'o�`�a��&'�\
7b�9�W�����wJ'?K
��nlU��P�]��h��|.s�V��`y�=M������6���
��X�	%�N
e��Y���7߼���z�'�Y�7�D/p0�05M�|Z��7����ʹQCG�Nv��.|T݀�r�0M�oX�FQ˜�Ti����]��G�=��M�;b��-��7���hЍZ�܏�.��m���Mԣ����]	���:@��r�]nfJ���<B��
5)U�P���}b�eW	�px����I��|�3�~
h��@۴f1�̗�������w֑84�@+��3[X�~Pːۍy����]�r�}�W��HJ tK�JT"a1I0۩r�����2��q	E����3�3;����{��kOO_�yp�����>q�o��"oF�Q����$��{B;�[h:8;w2b���Q,+(��Ob�P�
��Dw1��"��bi[;�,*��s�P	Ҝk��!�pt�*w�z��
��buc�{�ɧ�v*u(�1Q���٧�h�_�ǎK{yp¤g�"�݉2�/4LI����T%��@��9��q��p��ir���f��B�I`"��)B`qMm�[Nh)�r�}_�(k�oC8�����g�n�S4,\GW��4,�$w�?X�®��@���9��%�F�&
��	"P�Pv���N�J<���r�+Q�TY���{�>k@r���6ZlEJ��
Ӎ�)�7�^�},	��X-��:,߻�
;�L��c��O�8��M}��fo�H��4��ꪂ�7�G�5
>̶��1uC����O莒Ll�`��k)p�J�=��6q�7�
�����;fÉ�v,n"�V,a�G:�@��\�E�ْ�T�lJ��R�낢�*��Xs�UeƂ�Պ9�����EN��),�
	�݌�%�.��:�H����K�#sL��R�yb���W���:�Ř��x��k�����3̕޴�Cf���&Mj;$<М�U0\��h�0('P:�!Gk��������T�Ux�����,>_�.��۴��@!@ۦ[gHL�c(l��ȅ�����cf/�V��e3��B="6!�b9�*��%@�,U�p4�񜕓r={�����3�-|E`��bY�Q�GZL0ۢ�S�RR�e�'�a�ۣ�Nqw&j�L�*��#��"�4y�YC��n�i1[��et�=o-�nSz�Ox�1]�"l���!%�
Ό'�`�/��.g���H��Z�X"�]e�Q�h�/.$�%yMS/�Lnv!pW�Az���Q�#ۧ�Lo���#aqd=ݓ��S�����\�i[v�vWP�!�S��p�v�(�I�~�(7�,:�SJV8��o�G�[\3ӀW����O� ˩΂�*�Ց��K`�T���AM1��\xfg�Œ�ԯP1F�ɻ������MI��S���e�$�!��$�{Ҳ�����Sw�&�@q�S��n�rIv�T�a%
:ɚ�qG��"~J��X�o!>(�n��{s��{���k 
B6�M}m��&�D���!�ݦ��m$p��H�{S�������N��s�r��7�`�CE� �$TH1�z;�A�'5�*����7&Y�{_X��c'��DL҄�JI�w	^��Ӊ�޶�\v�L���ds�տj�:��Z��Ǧ��CHʩ���	���+_�>�k�x��(��<��}����(+���j�LL���C���s�~��U�j+�c����U���Ř[<�R�c�����S���
�q���R��҆� 
4���ֿ����gx�����:�d
gj�R�p�5�=��'OݪJ��<#2�%��.�N.���������2q�J���юݸ�܅Q��{�D�`�N%��GQ6�N���̇2��	k�;v,�V.�83,L�Z�svc���eV��/�ݭ9@�.j�p�R�
�>H�^T�l���ɚJ��iA��'�ΜKL-s�>7�׃ȃ�/٤PY��ǹ鉟;��%�-	J� ��ڇ6�Sձ�*�!���C!s����zTj�~�M}ސ��:_r�ߙ��46)���lߛ��789�f�v?
����'Ss��h7}�:�I}�����'v�)��e����F�()��x�A�~=x���90��ʌ�חR�]�벼��,~ǻT�Q$;�!��f�Z�ւ���N8�A�	�RU2����@�!~�B�×�-{Z"�p��lfr~Cx�h�K*-~S��Z�6���
X`����
T�։3�J�#����-8�����uM6a砈0�C>8����Xb��n���mX�;�?1�J3�3�Ny���S��3���I����.���vp�L
�i��6ZO��p�lYz
_<���L
z�`YuZṷ������-y�F!�H��,,Cl-f�qTj[�6"�~��f�@-8�]�43�1.9�߆�ܦ
7Be:CI��}1#<f�ݼZ�K���e���`�YoN������v�I%��c�|��T��L*�-�oV�x���þU�G�Bx��t�˯�]3��/��m�]{Vk�	��:�3c�{�{U�26��R�C�b�ҩ���X~̦5%�Q睊���A;���f{}�FІ����w���5�џO�p��R�0�
M���<,U�H�1;�6���^둂�S6��!���������%�у�5<AztT��H��è�N�����q���B{�XR�#�e`B�e�~z��3;BW����
����H$��E�^�[����[){
�D�Ë;�&83l����&�fر֣fG{MQ3)�hs؀��^��AD���W)f9'u�j�������^��hQ��]>v�ڜ#��n!��ܠ��ȿ��vH*��[�'{��d�������><��Pc���j}U �j�c$G���&�Jsb*�zG�-���Wc���4�:i�-�8�\�Z|�z�X؍��;�ף�5��
J�Ij4T�}k��=5�D��
~d�y�M���^]�9U���=���Ƣ�I��l�� V�X��Ij5���Z�xQl+����]�T����T:LZ��YId�?G��Uު����`yƎ�/i㟦��_29�g�����`�Z�?9�޼z��F���6�/��{Fxу+��Y	�)�z%i�*ĉ��%�N?gJ�<�8:=��Y9)(��F��(�3e�Q�lpҿ����dBa��{�b���p�^���t���~޻��9�]_�|r 8b�5�]Ww�����M��+�>�z�Ox�3�gSQ�Sq9X��̾_ޘ�G7罟��O���:���.G��:�u޿�>�������߃�`�����\�o���g}S�_����G㡹��p8�_��Kܼ<��N����7��	�y��=v�W����t~��aPY����O�z?܌��W'}�ӣ�y�{ٻ���?���u��r�M��0��]���q8��w��-�m�Yl�'���PXLe�'�|sfFpl*��uջ�d�<�;6�F�q�X����?�)@&#�����n�8�PN�Q׋]�^jh7F�fѤ��0d[N��%A�����y��Pm����Cr^��(���0����o����O�oL��d2�����>�j�l�!�n.<��J�6��{%�5�`�?_��*�$�
vL+��1.�S����P׋	�zGi3u������e<�Q�	�bA��(�j8�Axj���8�(�(��C7�?���Fƺ�Ý}ĨCs�V�FdS�\	~Y竪��Aرf�uZ<߉Vׯe�_�w�X&twDM?C���׊l�Bj������LJ/t��~/��Kr��*jv�HX*�<�x�cb�Q�#��C�5��r��8/�k�p�4��O�%�>WM�AT���X�LTlG
��)��ќ�kc���d/�lw�B�(�ō����;����X��hqx�U>���X�]�23~��~��[�D>�I:�I�!�"֋��6�&�-롤R�Emk�R]���5�s��˯�IM�����pH��M5�s�zJG�7h��TQ���p�VYN�sށ�'Z�l[ħY`z}����κ֡�^�X!Jg��}�6@��K��-C�/�yxk�8�_��&r�W���Zӈ�$���F�\:�^�9�Y�P�A��M��f$ЂA�(�K�d�5͉yR���/j�;+�D�?�䱅��#�S?����I(����,�ø(�|f��4%�i䆮Y���au�L������j�q����׃��u��8ĩ�s�I��vT�z�*p��;el�/���g�р츔�Z3�v�Ɠ�X&�������͸���#����
���Mn��׋�`*�n��o3��8���1ٰneC9-5rn\�1tX)"9g��6���\q[�v�u��h%�V[r�ˈ�YX{���~�w���]��J�FLy;Ike���pf?��W^�-����:��°|�vՈ���q�z��9
���/���� ў�ES�{ǟe���6k^���6�%sDwD��6m�*&�Gҡ��P7wM�]�EX��/��N�mf�=�ܘ����*�����G[~��c��N��@oë��=g��n?6���E0JuYP!KE)J~!�t�-3�j�[ 7u#]ٌ�1��+���vn�۶����8�y��\`��S��24Qm~��Y)�>�r��1<T��u�����,�Js����5���.U�v��B�;8^���9�ir��1
�G)��)��)/�E/Ac������Ab��Q�V��S0�O�nu*ޠ�8�?�V�H�*툏g�γ���΢�&�yb�G֗�d��
���޾4����%����v�ڿZ�)���Dl���I���O<\�gb�+��Eⶼ�!p�<����vTuAp�JuҩW�vYU�2̨R�&m�<WTȚ>�������]YsG�~ׯh��@�,Yvؠ(%J��l�)�
D� ;���)����GUe}���_$�������\�'Wp� �@���௦�ڥs�
����=�cHC�k,��$��y/y�7\�^yR�\��L���,�"s�jT�qV�d �9d�C�F5��S�K�/iс�����p~��E	_D�Vܾ@�2iذ΅�������Ry���}i�ab�G.��Uj�T�J�?�j�*�2(%=(�3a��%��n=#�������W�4t�P��}���Mu���6��tg{͙�ꮚ� U��s��=uKw����~�Klw�M�Y��kS#�5���e7���a��LC�O�,p�����5�&G�zVSܯ��R�[�f�!ת��+����|���k���(k�o��-�*��C�&���Z�|E�I�:FL���i�Ԧ�([L��z�Ba��iI�GNx1˶����?��`�q=��'�Gf��p'����
_�BT�($$�7� 5�z�o�\�����D3�	�!��I�w�	���<=񵵙8�u�C�e�XS�
U��3����yQ�ȉ�T�6��=��T�|6/�g�����'�MP��x�$��_���類�{�y�l4�6�G����'Y���1�>V�݂����>�\�
������&V0wC�(����O�eo�@vZ��"�ܳ/��lj`�P4� t�X���<_}L�IS�S�_�*�[�jm�|
]{d8��bQE��ɏ#��d��V���x�jU,>ѣc6���9�kRm�賍�["��!�B՞�r]l���U�*+sSJ�8n�li�?9+�;y=�p�9��8�D��x�61�+K`_^�-)h���&��1�3�}�mӍ{�3�����X
\���tDŽ�^�~��2m\����̧��[�.���"&&:8�,a�m��EV���SA\��vV�,Ĩ�M�wIei�PՌ.mh��i*�ÿ�Gx�">�^�V
���@!a�&6i^���n�J�1�.")�*z�jClg�����0ܟ�қ�d��z�a���	a."y���?e��]���
�6p�kje皻�X��C��m���W3'�_������ue�����R���2i��8�5�r�^"�2�#���<�-��S L����G
�N ug&4Kos���$��r�3L3�\�����9rcA��Z�)l�"E�U��zf8v�i�4*:�Ej��Щ������#�g�<]����u�����P/�!�c2^q�;�0��.|�/���0��ɾ��2���=c���&%U�	#�����h����9�c�����I��$)��<k/�Z�@R�׬��]'��l�r�#_�>�a#L1#W^'6��xRB��IV�Bp�޶]�����{7
��/�L�Ž>W��o�݈���Q�@�	�����Ձ��[#�>�Z�p�2܍%���\�%�>��ר�����GH���$��:l>�Y]��"/s`U��y������\ �o�QwX��$ ��Wj�x^�׵�)?��{��S��Y��ǃ���t�.ux�D<MT-�YiXb(���MT��mV'u֛��Qg�.����lcw-��&b��ԇ�!�A�Ab�U>�K�<��Ţ���@��F/���"]�0'QC���$6⮐Xsk��늝&��-NQŤB�FI,Εz�A�������ms���8�z[���SΡ�Ϝ'�%S��0�_�Z]�<~�y�+P�Ü���3l�'O�W�Lz�I&F|��߲4���`�W0�L</f���Q����q��D$��0�!_\&��J@;���\:է��|��ќE�G�Zq9�?�#��;#�Oc�����o����Y�T��ʌ*��H��N(x_췭-D��?k�hۇz�fjt��(Oh8P>� \˕(�(,�N�9���ʊ&bDNr��p��~3aGx:.�m>Fu�E�f���1q8�������q�h)k�x�:��q����1���%6�Ъ�+�J~0a��7�e�C#!���@ڃ�5!�Ze�SMy�$]��Kpd���zL����(��Bc=�	I��	N2Wnr|��%��j�TkY�7��NC�z��V��5ص g�E����� �@aUi��=�v3��~=�Ν(�mim�\t�5b6�3ğk�TL5��A�]-���`�P5{�\�M�U]2�����J�,���_F.N�ǥ:o��i�֬lMk�3T3h�@Y�s���
�hān��{V�7>����[M)^��͔�U�|�a��˨�����G~(\�O����5t�wt�8��O����1Uw�c�VI}�(��/�5Bs:�ۀ��^�!T3ab�6��n�=�!�>ջ�� �7�6�K�^��K�\����#/P�dE�~s������X����u2����X������1&�FO���ԳJ6L��>ٕJ�p.��U�GjC��W^�#��C�#��#)nO��$��"ЯB����A��d��
��m+0\2�¨�SϺUp?m0
�4O�������s��rn��щF+�?uu�j�4jWV/�_���#��Xe��Fq/ՙ�S�:joW6�X�v�;Il��E3�s׆��
xo�ށ�؀ ��l�:flu��˴�8н�R0��EGN�LJ��W#R�����~
�}�{�!<.�09����>�TL_�,�Q��d	�4���x��
5�&�=ᖖ�@���,���[�,/���L�oF�\g�S��ܑ�
�H�l�����`$����p;`Izq�yB�08Ä,��닔�`���|�x�P�Z�;���_V&?&F_�*������]7~��d!���֫\�����
]�^TL�6���	� �����Ii��[ـt���|����%�'�(�UZ_�&��G(
�f�j�h�XJ��El=L��n^�dSȢO��r��bD��Fk�"sF�D�[iA�3ټQ��4C��a��*��iE3���H6��c�$�L�5p2s���2�y�f`���4:$�BR�V4;8�[�N��m�^�-ɺ
30�~}��W��'�6��-�n;yoHm�H
_��������U�=(����j�&����Gګr�q
+�.{�~�|��J@�4CD���:2��=Qm�Ӥ9(0�K?��<���@Y�"ں!�G����a��P�y!�Uͪ��G�
I��\�l
�	<�cr7���'����/T����b�v�o+��������lC�8�FC�ݎ�X(�V3v��������u���)|���eQЯc��/��|�Pm�A����{Z�w�4�0��l��x��t�`3�x��_�	Է���x��f���L
��aV�xx0����^^�Bu喦zG�_�8I�i��]��Y�.V)ʝ��Uy�¾ء�/vf@f�SV��]9���@�v�?:�}�}��M�DJ��ʰ��(��]l�FIA�v��	���9#2���G����8�P|�_�4��z����l���O1�m��S`7��,{�g���Kc�Z:��YEQ��M0X<��:������B�f�ZѺ�l#O�Z8|�9�X������^���L=�)=q�m�nZR���aޢuwl���Q3�Jˢܮ�\���Z���؉�sO5A�dX5Z�[�x*!IMLh��׮	P5�+n��՘�k�͘��F��pQ��x��

��馳l���9���n ���M]��CV�P�۬�����p�x���M�ڛ���ҁ�4�P}��qZU���8��6MM#�6fr����1"᡻<!8��Z�xX�3�=E/�����*o�������1��H�1�A�pEܮ{�X�nk��~5�A���;��5q-��Ÿ�4�!1V�(����*�`�W�I��_w OGd%��N���1�T��Y��,���U�m�sb���%"r���^qz��D��u�/�=�Gf��ѡv��{bX�b�S��: Yq�@dA쮇rPZ�w�`�
M�=�"��(�87x�WQ�S!7����-�3Y�Q�6�����h ��c|���xNXV9�3�d���gj����e�C�=���?�W��9�V{���i�]�(��n�2Ac8��0�?�A+�QϞj"y
��0�Q���cDcctA�v*i� ���?�zW���bI�ؿ����]��+�v��5�>|7�	�h�,�	(<��U����+�`�M�ƫ
kr�r:�z��!���=�M�ޖ�� �G�u��.ELN�EiG~Y���(vɚ t�'ؠ���菦(�(4�����B�=*�i�^�TQ�9!�K�I*�cn��F��(���'hz~��[`K}-���MV�Wź��#������C�)�:w�<y�<�6���9�>�_� �_.9��&HK����ߍ\�g���]J��u����ySVoղ$[o�}�QB/����@���DU�&K�ͪص �v��S:$����@��/��_\|�|�nI�9���g���#���%8D�Q��0��hd��/��	��A�㋱8��w���Hz�~����6JlF���}�vĭ�ާ�G~�g��2�p0�-��LgP|e�i����g�'^�_��?���F��l���+��-JEg,��`軇��쵸n(����by����-h���P0��ePx���4dc˾�矅ς�4T�	�3V0*۸�[3U�t�qi�
N:�ϧ'>��5��1��nH�Q��ՍPj�Ϗ�&�D��y��3	�h~�� M�}k�4��_$�.>5��'�zY�[��Db��h`�o�.o@�<9��r�|%KT.�+P�b����Z�1}z�Z[��uoz�š��% ��E\����������J�ث53y���Y�	`{��l;}3��V_Lw���@�M�׬�y�f�/FD
aj�1DJ���aH1"���2��h��ч�f�E�"�T��H�@\}�X^�������"�ON�O�;R%zWfp�W�0�#8��ϊ���'Q���*���˝��"3Z�#�n�~�é��'��c�Ї�fS/>��V�5���P����"�-]��yu�LӜ��:H�ȢD�_��M�5��{̰_���+�td�俼o�M�����d��u��t$Ŏ�E��G1~b���Fױ $�S}��U/��|� m2��Lx9�L�U�C��iŬ顩�~7�m�!��	�ָc�����Չ��j
İe��!��ħC��ċa� .~���'����������ƙ��	X'�d�=�̋6:A{�Yd���#J=G�f^eV��K��&@�]Q�`�K�z�}���1���p���Bn�=h%L{��=�e�no?��W@��a
����TY��KX8�5�9]�f�x����U��ֽ�a޷�r/0�̻/�}л�r���<�y���C��c��7џ�"�Y�עh���ݘ���*��a�
xfH�N7)��#��#�0%�U�*�T�.��B�Ѯ��-�_0�zM�)�$�� �O�u]�
l�ա����U�o���)$$c�Z�e�nu�u������G�3�r`��օky=��F�ySMwޘB�M	��i����n�!�
0	f�u]����^M(�;S�66�[��$����˨g�r�U��H4e�gW������"c��Y3���)�՘�W��ڝr���t�ě�DB�4VF8iK�nW�I�V��'�X�
_�T�V�#jYg��l(���M�Ķ�x���ՉZ�Mws�'N�笮}<��+u�?���BT����=���˰��b��<��x�����9�yo���gu"�8h������s��.�@G8:��b�'�vKWG�]�Ҥ[�Sk]���.!2Ii_���(���To���T��;*@	?j�U��o���h_�~3䦣k
Վ�:Y:?�hj�Ơշi�u�]k�%��5�Ϫ�P�v�T�ꕦ
3�����@V"R���H��V�8ci�m%�4g����O�z�u��fH!����ņx=�3�~c�����JS	G�EA�w>�}���z����KO�d�U��䴧'J
֦>�p\�y�J	�Y�#s�' �M�%�
�v���i�1\��j}�5̢���g�����S�52[
be�{���3��pg?���d��*�jc�����Ѩ�P�%�3%H���+���v
�D6�p�DIn3r���<2m�k�lԋ
�*Gfa�|*>�����N��v���
C$L��j��Y�7��7z?�?N
!6Sr&��ཱ���{�H#GD�;l�4>?���̅��;ͦ���SE<�x�E�,�SE_
�=9����Ad8v��5(�ϲ�x�|x��I/�Z����(!E0�ׄ���z�E�W&���	ݣ|73R�d=��0�c��N��)4�/~fhV 7ڲZNc,-8�m����o��jT���/w#����恔��j
}�&od�sڍ��ӓ��=2U�����+�hJ��Q��8ֲ�Q"r{n�;�r�.^Y�z��R�6@�{�&N�.���(5)|�Y���2w7��Ql[�����Y�G�{.J�t���ѻR��sp��{�khh)�ۈ�	n˂�3�j��(B(��rt�37I��
�7�^]+�f�]F������D�Bt;�C_��Ӏk#dj�K&��8)q,�OW���[q7S��a����6¼��Ap�"���g�\���:I��w]�����������H˙���V�c���(H|�u�C������A�{u�3^��qă��j�V��ۤ�H���c�t�pt���r!VfK	��;�������#�h�E��f5�YY��}��K�~7-�z�_�
)�����"�Wz�/�Yc<D#us��4���5Q��_�4<<b;�P�Tc�p򗞣G��8�쩞��< @ŏ�
/mPk��I�y�c�:���`�]�h��N�7�\Ȃ�x�P��7�؃%E�C�h�VF	����0�_f�T�q�#NaeU���W4��UA��'���E�����][o�6~߯P�v1�k_�&A�E�m�}Ȃ@��V[ly���@��w���Ev�]�K")�<<��3�f�1�{_��v�C{Ր�G0>݂k��3
���,�@��+a��
w�M����nFi�s����{b؀��{z��|���~��J/d[�O�E�T�L3̬�7
o�̛n>n�����_G��@d�nQ�N�$�{�"�}]�Y��u�i�.:�&��j��zB��"CB�����Y[��)�T������ε6~a��NS��|xS�k���>8�Jy~�`��S�h�v�B��77����U��J���QS�ti�-\D�n[DSZ�e�_�u��E��1���Er%��d�W_Ø�x�T���d�vha*k���8p�ܢ���՞���>!�
˘DϚ�j�{�qm3�;
?PY�sL{��:��g�`֨���
dK��<�Dr�Y-3��-E{F}y��걢�Vr���u�|����C�A��Vw&9(�+�6յ��c�I0J��s����B���x��k�s�]���a��1ZϏ��8��E����N	R��7��ա��#�A�����!�>�6���ae�hCs��)ы��"e�ն۬��BqG��a�����
,���e_��hx8[�1E�(����8��)O���7C"j����B�]V6k��N=����B�ɺ�
�+�e�l0��N~��JӘXT͸"A��A~��{��e�My�g�ai����sbBm��EI�ހ�Zx�_���1��Qu"�#�=��wX�.�n΂iY�^��vp�	ln;H�ˌ�0衒:��	���qHp�^��𾲊�b�E�-���}Z�j���?\�}�Ulsb�#\�YH�6��i�ųg�]�bk�Y��&�H�l���f���/�����.$e��?4�;/&mlV;��Hp�4lR�)��v&���ք���弉Ce:	�a-�ݟ�1|A�y�A�>����6
�����[��-x��ѣ���Jo7�����n/6��AʦW\-,y��H��\�A8�T�f�f:j�l�%ޡ$�h���LV\���c��}L�^qi�k�s�T������*�_h�ʜӥ�i*�P]�nF���v^g�+[�^�QH�0�Շ�ĝAƾew?��^ P՝ 0
>}����M�J��`��7�mm�!R`�7wg�瓺�G�0��P�	����⋪����A���"l�	$���B�h�6Rב��Dv)�I�1�!��y0��&!�sRM�\�`h�'�!�*"!9XT�ڹ�\q��3�7��9!V@[H���?���e���9&��� ���`���>D�9����m��_犯�޲�Ӗ[I����r�s�s{lV�Q%�=~��+r�ryh+h��I�m
M���P֛��$ C5D�C_g�"�(ʿkl� >�i�wy��	q�ǔ�[O�5��W�������Y���"� YP,W���l�xV�c܁�����DPJk��
x�ߒ]��c4��c:$�$�L+N��֜g�G�f��z;���p-�50�d�j�q�^��`���<H�4���0�G�ЊIF�WЇ�`�^#+��L�O����|����-	<�Rq��2ܯ�(?]j��:��3s�5��r��:��D�3٬��J�M�$E�Xbr���v<_�1�ExD���@W��t�;�p���f��Z�޴{W���������
�e���`<1�"�[�0��<����`���p=^��|��	�R��|;�/T�LǭKG|":�5O��0�h�x��.�u�𷋤���

�
�Lr�{ƺ��D�T�M��r{�efv���ݚ_���P�Y�Dy��̆1~�R�n�~�t�,�O���`n��ky�W3,	�b�N�UK��r�***
G�&
r�tJ��}�뾙�|�W��b~w+N���<�{�ᎎ�����0��4^�MH���j����2��x��VcK8�tJ*��q$�Q�1����9G G��?��Gt�|s�҂|���	L�ԛ# ���Ʒ>4b!�~�y�j㳪���?�\-6��Ӏ/;D�f;B֡�7!�SH��7�>��ڹI�kA����!Cd��~OU�<��k��:��R��Nt�F�q.AZ�3бm�}]�9���+�jj)Qk�y���%V�S�?Fܯ��:����WB�wo̺�� �zCW�#���A�N2G�γ�.u0˩k���������e|*�P�_��!,2��Fb�՞<�Y+K�iV
�f���Ͳd7Is����^M�4�ߵ}��/�Ȭ1�$H/"p������F0@�p?G]s�`��������]ko�H���_�v#�#�	�ؓ��5�v2��Ơ��$���+Jq�m������"e�w���0EV��U���V]L�v�S�?�����P�j��0�
�2~���x_��-��@���]���  ����'W�w>�{@6���E��h�
���b���6n�i�2���$���z#�ڎ�~ 82�2�g��h)�_��7)�r�d�g
3x��ojb�Rþu[`B̶��:�|��JHG7� �Ve��zI���#}$l���W�-�~-����/\7�5��Al�76�&$sDl��	C��=��!7��)皛V���7#��{wGC7v�w�B��@�$�o�D�Z������Me|�C2^���F�{p�cW�o�A�Xh��m����`&2I�7V������u9#��p�����W��|��AY4-5�.⬶��t��r�V��a��r�$�r#�Q�\���X�8�{�Ds�K^\������v�H?�A=|�j�Eф��m_u����ֵ���ۈ?��^4�^��po���y��q�g��>��9�;l�y���Bk�\���,R�#i�ܨ4��^a����_����"��A����L�M▪�nJ��C�9�ӶE�m��j'�쎉�)�Uc�M���T��I u���+5�n��.x�ڪ�Z1�UZ�o��b�Vt�/d4��|^�T���HY���4y1d״kP���t�+�
M;î<��:��%PV����'��K���<JL�q��sr�t�V�Q�o�U�L���x2�2}U�e�5?9�G�$�b���b���8�4�D��ad��8vݛ\~�cTm/"�߰+h�V�G���z��i�c�8NO��;��iw�Cm�p�h���_���r�n2�9�Ju��\M��/��5)�����2�.ME��s��e�_�Z��,�h�D�ͺ��E.��*z���<(e�
S��F�?W9�*����i[G��0#�("H9lW8��L[7b�D��WN��u��T��P�ڪ��+;^���*w�kD�a�u�h������T��6@u~g�Q~�;��i��2p"pJA�^Ã@�P	����W�iY,�G��b��v�EV�O�:CV������z�z��%o����\*7��x�V,UD,imx�j�����a�@�m�Ǧ�ߞ|�()=�v�3s�w�MV��bw��/��WJ-yU^�7�hHkHk\Q���I�@9���-�a�L�lK�����V�ؘ�����y���B��	O;���o��>�H$�(щ>̀�kV�g��}�2�6F-X�hq���/�^����"��R
戲�^���Hץ�:�%6��S���N���Sf�qآ���M�25t�EKkU��bǜп�o'�4�/�}����������V��m�Vv$)�in	n5�	/��dt�|�n�ߤ	x�����P���I���ێ���˘!>�si��p��;#ǽ/������l3�}6�����?���K%I7
"��"��f�X�[�΋��`h���j�ղMh
S��-�*��Pd[LO&��f_��
��d���b����*���G��@�Gh���*��Vk��_zT5i�	�=�2 �W�Z�;��sA���\��>?���<h��󒳥�dK�w����	�VE�ᜄ�q�X$���&�P��gcM��vp�k�����O[�r?p�u	b9����1��채{�]�T�4'W`ڦ3�iz��M�/܈x���'3�E#����-��'��{��,�ȡ��4�hn�Z��-�1�\�f*�w�U�Y��X.�͍�4
�b�Yn�G���?�� �q�R�s�VA��{�f�O�d��}�������	Nr1u����Icj$<�SO�—��'G���R�,V(\4)^oP9�<,�Bրa�ɵ�紴
dK��-;9��M���RF��L��@˗�Vݴ%��lз���u�#ˆ"!ݏ������_y�1�[,��,k0��4-�א�l1w�z�C��C2F^�zS!�;\M��o/��}�.��n����\(��xύ^D0�f�y7�>7���P>�N�MiɄ�o?�=�}[{�T=߅��\�d�j�Ѱ8���k4U(x^�cT	��J
��Pn�㡧W����Dc����g��}w�@ӻ7%�`������/�Q�5�e8��͖T7��V�W��[b�׀���ϥ8ʼƊ��Z{F��m�����i)`|篳�!
�LP�
������a"��]n)ev��G69��t�n
�Ū}i_Eg2��f�b�QzD�jի*|� ��K�{Bj���T�AՋ1�^�/6�7AK#��}`<[7���&�u;��b��!�;�T�h�F��;
ُI�$DHX�7�v��	`����S���R�!�IJ��i����g�A]"�gƥ�ޗ@)q��]}U���F��ѫ�03��=��v��;�^L���u�I�nd��
��������Ȍ��/�cW���6$0hV���}G������nߡ'�m�����n,�5a�(_C&^9'��r�}��c+�!��Y��:���f�Ls�,���l� 堳p���c3�Ĉ��LSm&
e�,�I���$�!t�	�F�
O2&�[��� �D���K��0�(���Xhk�/]B���i�J>`�Q�gS^�Ŷ�܅&	���uF�iKx7�c�B���<I�tJ�( �bZ���B=�G����	�\|b���>1f+֎��J��v �g{K:{���Ί���W��7�J�[�Z7�`��5�oy�Q�O��XI5���
�����������||��*<�����>��3濃���#�}
4kM�x8����O	it�-%�SQ��S���x�ΈD)�k�%Ȗڬ�d�7jۚ�g��f��*�����Q�7D�X�ܲ�G2�}5�Y�*Ͱ�z�Tg;�'Fu�!���BM1p�=����=wz�\s�w�˵�N&#KJ3�2���U����LR�Jl��#q`��m�E�b�0�҇G�KKPt�?~�)1~����I�9�&8pLF��?�_�t=HC�b�ef6(D����G*#.9��88��S��p�&��Y�4��6I{�i������#����#��%��Y��b^�l��[�f�Z�E���`󚍶1�l����V�+:�ڇ��z���7�Q�y�nb]�/�

5���ec�Fr}^APSd�T��o�0By���,����w���"�k�>�"r��TS+����\�ۙ�l��+�Mz�m>���|��{�ޙ��=��wR[m]o��D��������f5��?d��t��4m��m/ͥ4�G�%�DB��1�e䑉Pouy���b�Y*/L ��}"[X�e�t���Et��f�,�HV����Hd޶�)k}$��� 8��+���i3��և����v�rj<�vLo�,Ԗf3|I)'/+d����?����@�X���0��Op����c��E��wTw7F=�A�惻J�G	�a}��"��|���@Iʀ���?������G�m�t��Z%꒫���d�~�Żn<�na������c6�vT0�M�B�^>�,f�.^q�/��՞��$G�+�|C{�
d�|����f�DŽ�g\E܈"���-UI�P�$|��[|����o�
TmYၜL(�p����hI`�n*W��eM{����5��7�A��A��au�a!���/|���>Y]���D�i����7����[�{~2���mT�"TH=�ay�7q��
{��*��s���p?[BwT��8`+V��M���Z��n+,C☗p �~6����;����D
y��0��o�YqU����`�f��>�/}��7]��P�Ro	��S
���s���0�g딻�"Zr����K޶0�R�j���{|4��Ϛ0D|��mNO:�_,�2^L˷�i?粏��Na����\��#�r{$]R|~�v:[ó�)�?����O=�~�7d�1����tX8�)��⚔¿��޻��b#4���G21�PX�U�1VxK�ɿk�MF�G�����3.����ə�C,��qf|��#4vG�lo:J�,��G�D��Y��6�e$�I	�%�=r��;�t����C�.���tJ�����+�ǖx�E:`�'������loȻ�Ӳ�6F����X[��?�L�Ὤ^?K�S��;�E�,C��2��ɏ.`ɀW��Q80�8�&3ϜM�1���/���C��^a*�pe�8*]L���e)�yz
�Z݀)М�`>a�G{��FU��/�	��1��4c٭W3�jW���x�	�11uȟ���L��QO3ѓb
��jԆ�8�F𻿛�=̛��t���]��yu�Cmi�`�	]wD����]�|>�	ʸ��.*p��z��Mֿ�G���*΢c3`i�[EE��^��dtR�l/Z�NZJ���bۯ0�L�Y��n��p(-n(�ԇdT(�
�k��fC�1/B
A�j��!߈��S�\ɗ��X�2Cn���p������߼}��tr99qvq29ywv99�卙)�ꥂ�b���dɲ��?5�bq���>U3`*�fu��4�'��'qvo2��NL��m��֨E���M9w��X��
y��L�w�bD�C��B�d3d�Eo�����lC���v�iC���v�j����5tau�G�:�O��ZCF0�r��-uI��Y�Љ����M�:�/"��2ln��{Ƣ�[u����T-�v�C��Sz��W�^�VwL�qȲ,�ݦ$�v�O#�9`)�߃�������Q�k9E�(��*-�k�+!'�}��l��ㅏ�Z�1	M��OGd
��[B��WJ���_i��z�¨��"�ԩy�ڳ����m*풬����sƄ�m����AjO�Yzc�%￀�Ma'ٔ�r0���,�+�-v�lT|�"mŮ��A/���t�f������'@K�x�L�]qU�;3�0ͶuM9W����kFZ��E��u�Ōΰ��M
����jv
�|8�� _f�Iu!T�NBx4RDܫ�l���1.Xx��u���]�H���f8�D+we��
��=��=�`��Ӻΐެ�'"���c�I|f�~�\ð�-Fmt{V�
���Y׼�+�q��N����2YO�@��ӄ�W�e"�^{���ԩ�1��t%�1Gd��kA�yI�a�Њ����ph�2����y�������n��R3�睊�^���F��D����@~1@��\���p~�o4�K��;"��/O_|8{�戻���ˋɻ�7�o߽��9��ߕ;�0���s\Th�(�'M�i�JC0�[� ��^����~��U���Ձǵ,L��K�<5S���?h�m�P(z�Z�>�x�9{&�b�I���ȻaO� 2���{
[��;�z��%��R�Q�#��:(�-��
q�Cf����DH�ǁ�ѷ�4pK�N0�$nl�8]���|]�n�0��+|+BU����>��A�Ԫ)p�߻3���y�
�ډ��3;��`�g�Nxu��d�قɵ���h�j&O��g�������~^3�F?o�v�#w�3����NGNO��!7:��A8#�������$�M=���W*Q�|_�K���T�7�<��讇U��"N�3�TYO��&qN��f4����
��I�b0*G�-��~�DO��!�a�Atl;�Gea��%w�`�=~��*�X�X'��tk�n��%2:��x�W6�(.R:�:9K��>6t~�1�J��$���T-|դ�3Қrb/úY���y	����O���
؍�)DyƼ����5����t|J���F�*���	(�g,��oZܮ��C��F��|�<���a;����]o�6�ݿB�dg�^;�֦��E�8�V8�g��̲�m�������>�%Jv[{�L����H�wTM?��f G�.~�<���F�nFu��y�)ȷ�:&W��[��`�&�R�V-���՟<jw��Z2�{����G�5g��N(h�(��ի�+X>��}?t�Ϩ��"��F���V���F���>��O�~Ї`e�-)ɥKN8��<񩟯�]O]���9ͽy\�w��xL�x��MN-ce��-ER�4�Of�i��z(û�Z&�O��^_�¢�͖8�����'8��dS�{	���S1%�!b�l<K
��>yA|V�F�v��̧�I��&����&k}=Y��l&xñ7�B��ȿ�p#�n`�x�_���_߁���Z�\�k1�hDc��N8�j�bCu_��dP��G�[<�1�3�ŷt^�E�W�a�֧|�I��C�蟕rp}��1�֝�7SA9^�GFzr�!/���X6���⣃/cx��N�E.6;"��R�quF��+�7`󭮝pظx����Hё��2�I�I˭�@�H�Ȫ�*R��`��1-%�6F�D�:hk8��8m%J����p`�V��3��{	��d�|@��c��6�c6W�����q>/0�sr^L1�%���zs���j�c������/���9���d:�,���-�[&�A�M�|'^��m�1��ƀ5׶��M9�/Q1C��s�1�n�D,1H�l�{��l �Y�\}�-��c�a�a�6��<�m�@ܛW���ޓ���U�2�4�p����	>jhWmoZچ_G�nqff�I>�=2	�F��B�#�5���Y�5:��˜:cB��L���K8�UUO;H��մ�Z�5�pR��'�����:��w{��V��)4��d��q;���p�0�NAG��S������9�D��</f�&������F�>p$5�n����wfr���+tiX+M<�񁲟���r���#:&T�g�;h��Ɣ�>_i����������
�4��Fr�v�Js:���Y�SG+B��‰��Xj�xG	M5gvt�~�//���=�4>����h[��
�[2c�n$qB1J��[l\R�R���Azd!ӭ�h��9f:Łs�|�G���0����m5]��\gD��)��l�oKw~�d�
��kr�+�^�s�&���\�qR ���L����{���j}ٷTm��3B�MWn���󞰳���Fbv�¸&��oe�b'�@��;gXT�r�(�s;)A���q�j�L�D�գ�x���K��W��"m1�`&E�v��C3�n~���b�h�����{{���s��<�M�J��K�b���	��j
��Nk#<kB��x�ׁ���:6Cc�"����]�>��S�|ib��0�s��tqH�^S�A����7+<b��i��^a8�PE��N��$�F����
��U���L�I�'S.{��y6�";۰����w�a�,s�?Z�AA֐$2,1��T�3����zC�����˲xz����I���0^lZD��Ær�&��6�Ȝ��tH�쭇N�����w�CyKf�.{O09��\a*����kS���ݨ8B�b�)�O��1����IZ��������`���oʮ��;�na!Z�9�:�N���[Nҗ�hO���o��{��7㬛�A�.�f��Px�ӆ�F�UH�/��Iq�]�����>� p��K�[����!4I)�u���~-�ڤ>b�a3�O����,�X�{5��7��d�9IӤZ����X�o.?���xs}v���ů~��
�r?�} ��M�la}�,��z����}��x̒=k����||>�C3ԣ�%�Sݻ�jۥ��˷��
��MxN��?�j�-�d;O���3�������4YC�y��'T�%��?An
��wԠ���Q��3b|8^m�@7n&j'd�f��!�Wk]>D'CǟU�	֠�v���)�w����� t-J8a������m yE��=����UU��>I��D���'{G�<%oQӚ�O�iA+�=z*�;�N��_C+|/s�J;ἄ5�%1E:gT��f7��D���TV�8!+�\P�Qƈq�W�H��z���ZF�Jo�o�A��tΡD�gcf�����K�Уo��Xh���(��%��$��'�|:�~NQ�>6+Xd���,vd��U[O�0~�W�!ڪIӢ!�i�za[5V&(O!'9M��v�8����\���)���9�tE:�4N��f�	B7�bB�	�s����f,(������M� F��A&r"�"B�b,Pr� ���u��Ԝ!0"�j*!
B�!@ci$r���=\�È2t��88HԄ��@@�q,
�!J�0� W�F�0��>LH>���B��rQ��	��g����Bt2T�\�Jh�~��c�`�߻��:�s~?��ﴻ�^]�z�
OԏUh�����ٚ�֬Z�4UT�Ub�W"{hJ�k�IL��u�!e���(J|1�9�,ʋ��c%s<�+�g m��6�hn��[2ę��b#N�ṗ���Ph����+aM����1	�cG�>>��o8��/}�8���{�q��5y�3�4ȍ��(/Ll6̈f)#�b)���X��S���ј�A�H�@Ya#Li�17+�9�-���/S��>�0�=^�;7���ca`+�u�njC�R��#K�#�R;u��ϛ4���^>�0�ʧn$I�("cTe��s��5��laBx�v�=[%�%���?L�ZNu����Y"���!�.���r�H$p�*Zy���Ы�߄�Q
_n�D:�T*��|��S���z�*�z�l/�T��$]�D����R0��Ֆ�my�E�~�4�j���+�pd�9��ʽ�Ӽ0Sa[��h�Y��tkUߎ=ѯ�;z��=�VuيH(���\D�߆W+�X�;��r�*�''t�歯�����=M���SKn�0�S��� �lt(��9�X������^����*�h>��7�7�7I"�z�6�]���r��6�-�1DEPd�4��97��cͽ��&.�ݳ�o��愶�V�<���m̗�r�1Tl�3K���aS1�:2X�yM��:?A�
���}.�)6f��8���ѷ���������\x����U���65�f�L��~��¯��x���	r�Z�n	x@��E���@�hAـ��W�_nK����`�U����$�yqe𔬚��ʥ��;�,���,32{f�����E�oC�����CݫXy=bc���Z@��ď4V�7.�c�	���
�@�k����$����|���7�c��߱����kcw�����m"Z����ܔx���/(�I��8�I��3��2����U�Il����y�E�T`�ӊ��Fމ�]��Dld��#�k����P
����\[s۶�~��`���M)�_����4�'sڴӸӇL��fC�:$��u����D�N{��n<�%�[�`\lvU�>ܶ���*�7�����ڤ��-��J�P�-�_ӏ��tK������7��-"������������aߢ��ߢ=��讨jm�
b��цڛ��j��)�O�.*bK�j�Ŵ�Pcu�tm���=�Ӯ�V��6v[�m⩍Q���ݛ]Y`�����-��˧Ok�T�ڟO�k�� _g�-�C��b�����
ᥲB��p���o�2�u�k��f��+�~y�}Ѵt6�tS��㶢y��x��؂sx��v���ho��X�)�7%m��w�m9�������?N��#�zTVU�7�~�<m�D4w�����m�ًjw_7��u��縡uuK-�F��;ŭ�l��Vu�������j�<|vu[4��6�ު�录Q�X{�iV,����j��ZR��C�g�m��e�7�}�,��߿z���c���d(m���֪r	����s>�������!���l�\�W��ŏ��~~���+��)�ܐ�[�U�����\�df����l*��g�s[YhkA�b<Z�~R����~�v?=�z���+v��S���b��5�4~��,xx�9���E��f=v�,�4�l_�d=k��1���mAݾ��l���ֶ�R�������pv��S)����_�\�b��}{���԰�~\�Π��S�E�-�-=B����Ҭ���GDw��˝�����5D�	�u�aRآ�w�n�_:`���5J@{[�?m�l$W�~�����ՐdO��F;E��
�e@��PL��P��*I.���
��>��+m�"CM�@��t�?w��$��y&��c|&�1�	��Є�zLd��=&6a���0i�IM�8�1���5��v���������.
��9lj.�Xj��шf
����!���J�iT�c�,~�	���Ċ������g�#�,��z�Q���G��TB5<>�8��J�f�
�N�Z�p�<e5VF�nJ��T�i��$2kz,֜��Ig�0�&�P�>�R��¦�L6��FCA�}�H�T��3G��GH���8�i���Y9A�X�����ӱ3֤��r��hK���)`/h��(����uX���k�6�w�vW5�*�d�n^/�c,��@Z�:Ŵ+�Q;��=Y�BI��*i.h49
��e�4{_�ر�y	5��-"P��2\C���C��/Kp/�&l<o���-�湎sw;�H��t�N޼��t�{;�{���p��h��&}T�>�C� �&��s��f�ĐjG���H��$��.�=��D��u��R��%l���r�~1[M{v��]��+R�f��-Ed�v;�V_��f��ԭ�`�ӎuG�k
��%e������^��c�B�g��ڼ���	�8��g=��g=%j�U]m�-z�G?���?�m����̚��W-�y����Z6���7��ӧ�9ڗ�L@��1WE~ѵ��P���bku�91oV����pQ�o/�l4qe:��cB�t&�u��Ç�Tj�z���i�������-��;�N*�+�9Z'B���Á1>Xoa��?���^�l�C�q-]�}TB��]$�}��i�����1��{�� ��#OOfis! �
�]�-?\�:|�����0�f
��!��z/h��aN���8�rs�ɛ�ǎ
YC3��~b�J�qEs9+�o��3���撻W���'�6W���
z!rD���V�F=�| ��WUI�֮2>�֗�k��mo(���L�4��ش�k����#k�4�E��g��}[5�J&�uD�rD�y�3b|	��Xo�n�\����]�~�^��?�M9?WM��R2����e	m���}B1���� �� ���#�x~>��d0�߽X�to��[�*��Km��|��w���������U�x)�|�Xt�6.œ������0I�ŴU��f�\��~�������$�%��u�E�3�I��yP'��t�糮�;��/�
�_��e�Dw�X�VUV�m�}]�D�i ��zOǤ�]�"{>�� �혈7ۖ�>D�-�)Z���|s�y������7�[�x"�_��du�$�Г���'-r�K��ܪ\WJA2cB`����w+Ys�vv���y���
�	�"�o)��vj�z�����/���V��1�}���=���W0%�yy%���C�~g�b�cSB��
P���K�;�˙��9��hC���U��a8��'�}��$�bΖ���Tc���ajo^	����h�
S���#�xi�<�y1������%c�5L�P�V����/�W �vX�='��\�p�R���d'��׍G���JA�t'l�}�Rԝ#j^�L������>6G|�,3b�-�W@.>�/~�pfXL��;
��,�������e������� .�\�����_�Q���ƽ�F77�{E�\z��x��vu�bG'.}��]W�}�q�/���Z_+��F.jJ�ȋ�&���<�-7M�K������U�Mv!*�1�yW������䚄�F!�����Qb[�IDhN���7��=�\���("�E�fP��qS��s�K�i�(�Fΐ�����|�G찂.6���r�i9]\��>�Ąf1ᴘ.6�b&�5���b&�sS�G�}|&����eZ׈:b�1I�w!J �\��'FI��$�I]�\0�e������G�C��Ƀ�b��xB�D��iɞ�S[�A�|�e�Ϊ��v�Lc��s\���܈c�0J�����x�N`�:fYᔬ�1Yq/�M�̺	Y��u?\�ب�/��7����u?�[�ԋI�o��O�����^LrB��pZN"�,��&!�Y�8:}�vv�r�����9�(]i�yP���=�O��H��0�c_�H����V=.?|?�G���������	���u�	�Ǒ�x��?�Y�b�rP��ȓ����:@ n� m�"W�1��2��t�$�J&YF-@*$y�j"��y���@��J�#�.�|-@��$n�~�PB�� ����� ��$
r-����2�xN�w�
(lPCF��y��k�ɘ�4�G�-BW��Ѝ
�,��ODD6CQ�Maʂ8�+���b/�D�7�^��"�gn�<D�8Bn����(�
��2�mn�ȹ�	�<3a�nl�	#�B0�(ڄ��Q�)�q>��0�;qq@�)��?�SB�)�Ȁ4�CL�p��&s�&��!�}��S8�!���3�	���GP2���^��)��߅��C&I�'I�O��c�G�…Q����0�h�3Ŗ7�L���q�H�+��ƙ"!B�4G	A�ȏ8M"� ®GvV&m�����BD$��)2	~�?OsD����a� "\�15@d����$I�=�#���$Df��*�s:���-�X�PŌ�hn��w:��8@��h<Q�'O� ����C����?��4�}-@�ץIB���4���&�غa��Dd���T\=Xdr=B�*dBWxi���DD�f�/�Q�0�n��c�Rx&O\�h&"����	�22��	qd����<��E�f��`�o��$ĝ�%����lp�8�&`*'���8��q�u��9�8i�E�x��h+����qDy���f��x�4J�d6�PW�y��9��ZL-@��A�Et~�Q��x;���Z���9�^c�\�g!��&f��+�CBY�%�'��������|��UDI>��8@Eg8�TD�a-@EE�Z�(�%��"���^I�8���(
�J��$p�Q��=“kZ���2�.�0��]Ds�"�Iy!���*kph�'4����$���q0L�8N=B�Q�_�5���E D`9�AY���c=B`4&��G�+�g�C��ia�1*�i� j�t6�#D�'�oX�Q��<Gy��3L�x?=�ɭyH]N�D�%a�N���8��'r ɰ�)\$�4�xS8�SI�ܟ�WdE&��O���̏`Q����8�Sg(��P������Gy�@i3,�n�ə�:�I�jJ����r'���Ç��k�ʳ8�y4P7�� 2��T)�a��땔'yx� ��Ҕx� O䠐s�J�9��u����i`��<�:z���$�k�h���d��#'I�K����C�Eb��
�'-	QgƔ��ʤ�:�3D�7'$���<�a[��1�S�x&.�<�s�����l�ԝ���0�k�#��I��6�d𪂝��bP�R�!��-uO�P�&�<Z �5��O(E%�ub=B�9��GB�9&D���sB�8���.��Q>#q`�ҹ$0
���4�j�M�.�>q��N]'��.Ɖ���q�Q�؋V&m$M� �,�FH�ơ��r��ʥ)t��.��5:��5�#F�&������h�Sգ�g4��s铸c<~�1�������+�!N�;���4C>Q�=o
'"�q%5��2�r�)\"��;i�|f���3�.IR�8�@���@�B�8�@�L�xX�3Y]}P�:�d||`��ҏ��N�Yyb�P�G���M��(¤�D��JQq>��A�		�B����~�Gȧ+�T���;�b�����D�g��	�#fP�����8�G���Y�u�%+�hrc�-@�\��HWz�GH�I:��?��I1����OqN��(��NFqhF�'�
�;�%�QI��SB'&IfF�g�AD�_+�Q�|����_�n�� r3J�>�=��UߜQh��R��-@;����p�� �Ӱ!�}���P\m��'�vu�9�$�X7�E}D9�h�:e��.>�5��]:�N���_����m���\��k�����Jsws|)m�N.�
�?���sS�����l�!/W{����򇢮+��䂴�{$��~WV*n�.�'���B����KC�;��8~���ח���`#y'm�R܉�Co=cCo�o1������\���$Te������? :���=�!�\�����[u1���9�ZPq��V���V��D!���ݍR��8��0���V�j����;v�V����3*�˯}�ԉ��e!���4�j�mֈ��n�5o�w���k�1��[],�1�{G_v���;�L���w���ܩ��ޝ�Gw�F�����؃=�����E�!L��
թv"v7�]^"��e�??�?殿7rۈ~f�Hψ)���s��=`��%@,�A��:�k�f�/N���$K����(Z8�(rD�3ofx�<��V��U]����?�(���J;��'XM]�ܠ��7�5������n��(���/NO�C����w��������败�k���`�2��G.���9�:)�4�?U:�������q�i�|��op�^Z��p�׏��Z/�_o�Wӡ߃�WO��(/G�F�}V,��#��*_%xk�}�XT���(��C������ vx5�i}���(���Ҿ���+c��2�)+�z�Nr����/���L��)fu�K�{��<��}ŷeϛ�3N5Df���.o2)x�<:x'X>����'�/XtA�m�v�7G�lj�+~�蘈��ߝ������]t�D��	�D�����q����x�N5���wv��X�j��j�V�˺���x{:�m����� u�>�	��׽�ϷI_����݌�b$�/��X�J ��M;:�����Y�a<�=��뺼��jsl�^�Ъ��]����'�g|w��v�1ͮ����w���3����w���+O=��(9�%��$����^�g�w�}�A�/g�bO�$�j��m_��Ƅ�`s:+�6�)����Jfs��d<o.���7m��b�տTՎa.��=c��)"���l��
1o��W�mt�9��|��/}BՏ~%�b.�7�o��.nW

��q���djaL��4K��I��ˊ"��݅�mKy8QS�Ѝ��yW
����+�㺲��'Ci�<)e/��lvm)�`���m�a��^:
��_�@�^L`����8�>0�9�g�]��	���D�0�j(n�n�Xe�B�(MT�6�Ve�GUǑCF���՘�8�j!Y7���&$�7ֳ�S���E�	E
^S!�j�_�2�ć�`e�]&,zm��P���)
=ɥ׹P��&�r���\9�p�\��LfZ^��v=��Jd
�,��Vx��
U8F��cbH�����;͸�(��ٶW��F��Q��M��Q�ٌ��LʤشE���6N���֔[���s{�z1���c:ܛ�7'�oN�8��g������C����Mwk@�Gw��Z=̇$�R����Nq*j$H=�O
�τo��xj���a�.�Dρ�EY"��Ւ��c�H�f�s��}�.m�S�L�	�J��i�KZ�P�)�F�&T�6����i�Y��\޸|/�q�ޗ�jD^~�Q%b���t�@ �j�R�T.ְ��k
m��ޕ1x�F����<T�Y�ݠ�04�,ʥ�i��DG1֨a���s���DqMO�URr�I�#��,JI�1K�N���Nh���Z��I2O���-�$��
�x�K����-V�v�t�fiQK΀�p�$�P�"��kL�md����
\\*���@H*t��C�=jl��N�t�m�ӹo�]�K��h��kϿ<��#e�f�}I6�Y,(ύ�U�1��L�Y��m�y_��r�����t`f�5Į�g���f2D���g#��؏�(��di���
H�5ve�نb�U'or��<���f�U�F�v�|yqSV�	��,�J*"|[1���B��m�&>7p�){
W����Z�`չ,=Sh
}���.)}�����Gev�#M�����(�e��6��`��;l�/������#�yY�l�S�)?�����3�S��.�hA"�
6j�D�؜|3F��l����S�.��a�J��~�@��ݦx���l���n�a~�u���O8��O+/�����A�vaa(%,!2hԖ?sWj��#A����K>�gĴ�<��[G$���q���nyp���b��A���ث�SK6��2�cl�[�+8U�f�yU�r˃N�qE�]���l�98��˲,�5�bz�,�7>�G�y>"��
˻Ǩ�`KJY�A���5�$gW��t����x~�@�@�=@�S��i{���}�fXY��L_dEo?��k�#�dD�F���Z����O?��|�(p=k9������S���n���i<>J�u�(�U��ס¶�+��C4
8�뉨��)H���hG�ˑ�ù����Xl)��[g�4~�PBw/�}K����Mͣ�X0#3sS,�	2�ؗ�ʙa�jD�H��)s��V��?��!�64I��A#w�<ʘ����ݝn[�vi'��� 
�Ya�2BG�ÐO���vn�	�4Pb#1A������s��A�h�C%��*��-"�y� �0�@P~�#�`0��ᐇ��.��O�C��_1��g�N3܊v�`#���<1�ĆX�SDϤI@�ƃ���~;L�HMK{ej	�����&�J'L`�t��ڄ?`rv�"���h���B���F��L&�=�v��.�"�W��$A��R�_s~�\'F2e�����J�&�(gRd��X�M�z@��j�{��p�I�3���nӁ^с^1����=��qٙ꒲�
�bmk�	d�Y��p�q�BgyʕPH(���'z� ��o�o�K�+�%��u_�%N��.>�%�Le���h��L!6�_\
��⺩�E�I@f���S=
����<7��5�=�ِF�+��r�bn�C\m����^��y��9@*{V0��,�c"E��
�$P;�ڠI`�D�k�C�x�A�n!��n:��UuN�G��⺜,���-x�"��:�#�l2��A4��=���|*t�m9
�G=���tz��#��=��Nr ��4e����&��K�*���qV�Ӄ�DT"�r�LT��#�>�P�+oa{�p�]o?D?������]u�_���GF�!̊�h��Cnh�Gd�1��a&>�^����3h)aa��&��&+}P�j_?2cˀ҃C�z���OӔ�&��u<3Rq#�k��PJ/�
 t�w����D���)Ϗ��5��$�[Nk?"����3T�����==�Q��rU��
uF�Z�l�FH9�� ���ž\MNC<O�5���b6;g$�J.��z�J�0'*�`#��J[r���p�;r���:$6aL�m0�l8��?3D��r�0/�� �3�(����$�s�si�aJ�vT2��u7�T����Se[$-&y�G"ё��N8�@����`3�v�-��Z4�E���L�6c��#�ge�["��KDx�p��Q�LX����?6����]ms�F���_���nȈ�A�
�'K�F;Jɖ���"Ag�P���_?=/x'�v��*S$�������3<��k�Ll~Ќi�g1�X>����1�;>oé�
~'��z淌�E0]h���z5�i��-�!�ǒ��C����g�Gy�m\ż�2����o��૱��̑؀Z�j��H�H�,׫�=���ǣi��Y�.e�CJZ{�g<�Xkw-t'y!�I2�A��;T���ʅ��G1�/8�;��O�Ͼ��{�06u�!|u0f	D=B���!%.��y-h}&�H��{�>ݥ?T�Kb���M�g���̙7�[��`�cl��NPC7C��e��!8�}�bwO�������Rd(���9)5Y�Cd�
,�MH�/���q�+u�
�u����lc(�u� ��1KQ�Eo�&��E�E9R�sBe̩h����p�Q�-B&!����j-٘�-��W��r^A�C�c���,�/f0]N��C^�_lE��P�ٻ{�I�����!�C�u��=�Qgw�,9&[��>;��\è��d�~��#���GD�wnoi�|�ud�=�Cێ�����n`~W�4�tz4��Q�Fb��ب$��[�']�Y�$�3R���Z���Ei����^���&6=��e���7;����Q3���4<ȳ��z�K-��KSM��<�E_ s�X�G�"�Ԫ��呵� �A�ϓ�\�B)&���Q��N��2hs:���wI
��7�>w���?$c~�7�yM�V=eL����Q؁k�㔤S�L�nSټ�3�/Hq����@K�I�R���ʨ�-C�x��L�����z��FX�ᐂt��ܨ��C7�9��ޜ�nЌh�3Ɛ��x]��^�Y����ȐI�X��v�H���AS&J��^M'�>P���vV�hE�RN#�G�N��B��-/#�s���'%���ڇ%����>���ןoU)X���=�=3Bq1�����>���[�m��X������
G��cv��-e��I]�Vhl���3rv��A=���N����DzU���;,�I_6�-v�ʨ7�V;l���FJ�^Jo��A���gԥ��H�K�2�8��샞N���1�+b�D�M���Ԉ׋D�	��:�)��`;���;�3+;��mV�;���s��h��ʓ�>Y�ԑ?��x�#9CuÁBu=�����)��t��H"�;�����һ/�^wfÁ2����UQ{g0}�Ы�Q�R����,z/�)���@��@X,;_��׵@�P]�<�|9��Oql����!��IϠ��w����a�IO��i���p�C5�����ʆ�9<��î�s��^��J��)��T��;e��R�g>�Sb闁q\�8�P�7X/�V�R���e�_�;��?�����L��A�H'ϯda����B�(�&��87[F��D�j8��n	n�/���+v]�OK��*�o���_��F��b=�(�?�l	��Z�_�8������R�Қ~8�B��_����"lωfĹ)8�$Cp��Evx�%nT����k�T�Q�a�c�(�Ǣ(�y	y��N#kM�ar�I���.�^=&J�?O������*꒬��UX���;��.�Y��
5�I�Y�O5�w��T);ezq\��Y��Ȳ?�T�ʅ4��NM�I�6O}�f�qA��U���g���;����Q~�	�w�z
k����%�/G��9���v�R<�(Wq��T���̅���oˉ(ߕq��(���8PԵ��3W��P�f[����������I�^Y��޷��(J�u�D��ʮS3�b���)�#���g��ۆ8�z�M���Ւ�r:��|rrlpZC��:�i�b#ޖ����J0p�ʛ��B!�U��F�,�5k��T�*˔V&_�p��E�A�~���vbL�p��K��i�`X�b�(�C(�&ͥ��p�_�J��i���b��v�(��Z���)���G�W*='��U��0�uy���2H;Bo��>E�<�-�f�X:u�xA��2��WlxU@�����>0]S;��V3��~׳�Rin�miX͚>�`�8*��Jl6++�?e��E�=]$���(:n���4L�,�ү���Z��m�����2cmDjMRݢ��Tv:��6@^�l&,�B��)�J�޽4��~����&�]TJZ��*��X���^ٛ�fhT��&?
��E�����6Y��^.3%��m�07rŭ�G;*�Y��&���f���2Jw;P,�ѽ����!���O|��v�g��`F�򸂈d(�06qWъ��� ��1�6���$�FE^1c���帒Dg�)�����PdZ�&*i����r�3��i)/�E)Kۣ<'O#E��|̕����r�\`©l�&�+��^��‹
��ೱrRDe�
T�\V�,�72W8E�[Q��!o��<�:}{WMr��R
�{����1�
�t�|���:R5�b�`�5��W�0$�g�͂-�i�\�
���E��u��:Y/T�4�t����G�r/���t�zyb�`(B|+l���Z��	�{̯^%<A�G;]D�e�]$W�/����7Y�~��?WM�����L^B>�hq�x��0�H�xb�o'6éK�O4��������	O��hH��}�,p���1I �i81\jSP���'�_��`�6'��?�d�0���?y�
�:��@��ns'A˾U���r�ۻ�[}1w��\�>y��{M�-�
�����/����◿�7�J���I8��-i+�0���;&wk�~b�}�H$�q;�W����(@cOp��upC��:�l>��`��B�e	�A�@�.W�
�§�T���7n����v���v�z�^���j�I�M���Ye@�T�����(���n��.���x�@=JA-��F����ż�m������f�G�-���>2�	V�Ĉ��
cT�e�)��G�b F�Q�f^��2#���t������"�3���M�"�w�W7�1��jpm���w����7oJ���[*E�j�7�-e0��M���%�}��#����b�D���v����z��h��H��-sS/ihΊ��R�m���Y�@�>{��x������3I�0MU�ّ$�@�~Y[$.����Ӓ�n$��I�����{fLa���[��|��d�M����d'���7�sy���	\f�i;���Őj�ִ�,lwG��r��xz�!U1�|vqz���]���������G�
6ɺ�	J�� �����j4��|�k�K���±R���3Z���C����,z+�
���ԤѠP�K��6����y�h1��n�ox��S��ϼ�f��Mś��[��<eld�4�ХF��ޣ`%����/������{���y�Y�?��M�"�	g7mt�S���Nf՘崣.M������
F�`v���c��ɖ�8K����S��P�x���Q5���P���	��O�
�hU���"��IyOm�d
Wj�H���#LG�V�)�]���������^��aHY�K7|m+Ϡ�7��̎i�=s��~
�$�{u�{��5wE�H�f�t�+���+*�"�e�H��S*�d�͌�{ѝ���B���9%���՚����o�{1�����T����=��#VǢ�,I|+����tN�%s���E����.^a�^8��"Y��6^4�|����g~���"��-�N�Q`/�ETk��4HR��G�bw��}��ҝ��?�,P=d;�s_�5.߂@���t���$*�Rs���[�c`�p��囯'��5��3��r�\��o�d�yӥ����E�}��M�G�ח���4�n�:b"��7�t���%���j�u&[l���-иbKZ��Ѻ�5H�kLo�n�b�np�:\�UY���j+��w�`B��vI��k��_H���&D����#�g��Ŏ��oa�-��������1v�k� �l���9�Es׼&[~P��1�C�i��࿉��I����A�pco���J��B�<!㈈~��x�~<�h�9_��ͬ���z_i�����CC�W(��>Ӻ�Q0�\g�Ve��Ɂ�PT�#���N���۪��/�O��%}���[yk�ۧDx�T�J��L;�5�'����sN/��D��gƍ��Y�rf1�j������7� ���+�*�k�8��"����"�i�X��)Պ������?��u������_N>�uذBn��8�p:%�?�EM#>@ჷ9��4�2ޡ�(')D�K�
QY�3�7O?�Owk/��ӊfdV�[������R���-��te����8�%��[���Ʈ��pA(����3��A��h�:
�g�R���?1�`K*ݾ�{8;x�YSx��vDMq��|�V�K�1d��u���Iѐe������F�E-E��ϔ�O#2��b|�����X�>U�p�af���sG�0&��(I�|^f���EE�<�X0j)*���w��?"���Lj~~����3�x���l^ٶ=2'&�
�yj���1]L�;���~��T�tl��%��3?4w�J����[�y�c=�<;]��l9CɸK�6��
}��"vt����;���蛣�w��\��$�K��K��٤3�
����M�~��~�8cSܒ���x��?N��4�‰�O��t�>�Ψ�4�>�3S�N.�Wמ��m��y�7�����oG��������
Ym�>&"���
{R#)إ�H�;C����X�����ր�thA'/?� 5931�9#4�2��L*�U_Q�g��|h�F��r�1H	X��VIA���6��T`�$�	�3)�L��b
�kq(�;\)H1�Q�_S^���p���n�@�W����(m�1�B�>�SdU�MK�4��VI��������
�T��\��c�fX�i��&��_�#�`�0Q��G�<�Y��w&�K�x�u�5���������\��Fw���N,�r;���O�F�t�,�y�i�ti;����@C�_Y^��X^I�U3�>�
9�@Kٵ&Ok���O���{�ԏ(P��b�G|y]u:��U}2Z�}��aϐae2��
Z�𹴔��g �`��8|)�^�0�×�c�}p�F?9����iZt��C�)6X��|i�Cj��j�G1�L���>����[X�}�l؃�D�\�d�ls��ƌ�!�F��,���֛	L��/~L׬7j,h�Nٯ�S�UM��A�C�ϫK��3��f@x�t�Q����M��kZ;�s��-�ʑ.�j�0:s�@�1�ꣀ�I�K��W���ĉ3��
,�{��Q�<����ʇ]�㰾�I7�eX���$��H�K#3�^)��&���e��9�T�:裻|<h*& ��F�D�,��l�+���k��QkZֱPAă��xN��^�<��*�xWD�IhF�$i{6B��
dj�9>��>������;K��K��n� �>¼[-ߖ%�J����_�M�G�
�%��p��[��[��%xw��lm)Fy>�E`~���\�x�{fQ��n@p�3
��`�?[������E6ףqv�+H�~���j�x��g
z�e��w׈+:�e˄�ݶR��#*q����-h�x��si�yt����M���z,��Z`U����	]s�GG�X�Ϙ0xK��Υ�꤈^⩧p|X�Cr�u���t��J�����o��e�|�r��`@��<ڣ.��.�*�b��H7�����LC_P��:Λ�sE�EV�ċW�N
@��M�lh�9���F�"J�3\b1�90�88�%�8�<�'x@5�����
�Jr7):PcD�c�h�X�I�pR��P�ؤ��fN����d]à��X	f2��&�g�ܡ��o�#n�:dt���b<w�
M�(�=��R�ϭR�&�É��O��2{�3��H������7��������Һ�q`�JD��%*�rs�FX�d��KY�	^�R�{��Cj41><�Hß�HP��_n�J�ߔ���1�U�F�	��(~KNuJqx�rE�=\\=�DA',!�1�A���A���[Ѡ�BF��`��Ɨ�f��F/aF4wia�w��u֩=4�
�+��h9���O��"����ko�6�$fH	��)
l6�"�7,��I3�6ñ�Ƙk{~�����$����>X��y|ɻ�=HAOB{6{R
`脦�����4F��P��Q��Q��N�{�{rန)��Ȗ�w���̽/qx��9�h�� z�vTY�~�q*�,��;I�ɿ)�ӈ�z��[{{��'��n�Wg�����m��բԋW����ٛ�ׯ��\�_s:�}��ΰ�i�m[mNՖ��WLV�|�>ٜb�-%l�'�SÓ�
yh.��̞����`��'�w?�]�s��hi
���PA����Q�y��"�t��x�.��c���N�e�k���d�y����V+�D��K�c�G���}��BE)�n�^,t�n�&�J���1뜧�]������d�.)��Rn��������~5�I�,6�/Z_��O���!(���]��'�N;�0��z�O5�E�$}�O�'p��6�u�Lg�LV��)�L�1J+��l�=$�d#���C\CRb=��^-+����E��1
�j��^I�<o�_��5�>����LS�&��NP�[Y} �k.�4&��I6Y�o�g��${��m=�	6�j�0Fl����v!�|y\-��@PFW8m�.�l5FE2�;���P�j�D�L���e_ęLpqga{����\k,�4�hvXF|�z=*@�s ��RP: �!�p����T_s��A7��w-Tv6�h(D�^�'�ο��?,�bT����P�P����ek2�;��H*�'c�"�tVJ�{�����m^V�"�G�jl"�~v�������D�my�����D>�z�M�$��U��O~댷v�#�06�إzEEfs���=�n�4
�¿%x�ܳ=p��sY~��tZj�i��a�&A��PLf�,Ou�X�[�ܖ�����|90ݨ�"�����`�#��QOSO�T�<�p<|��_Ճ>�o�@�o��'�:H��-'d��X�喍ơ�"���U.���p�x��%�����7lխݣ�GM}y3['<8�	� ��Oh���Gn�GH�@L(Hz>�����(ҝ1�+c�ɱ?��$�b�@��V�y��xr`�,�B���[`GEh�Lf�S�j���R��.�$��xxr_�V��:h~8���
<~�I�i�e�G�cX�\Gp/��-d�K�U��p�*���4�.�ey���v��]�iC���
�B��-�NB�yd�g4].�2=f�?�,�^�]Ú4h2���V$۔t��h���М@��q�孟��Vy�����+��t�|H��J}	~��/���)˚�-v���n����:���	A%ލ�$)��C!2�rg��MKɗܟ�̓_�#�7b7��q�A���5J���q���<w�pF"��tV4�[(ܙz�����}����wx��JS���Ca�gW�_pZ����zz)jG�Ϋ"{ĩ��t�vrï9�Wժ�C0�Ք�� ,��PY+^"��ʁ��A�=B�4�0��*t����"�p'��D�/R�E�^M��b��+��k{͐u�zn�WH�MJुq\}�wK���'ě�R����5�����4�#�JY2y��q��t#���dIWE���L��v5$����O#G<��,�`��푇�������DVr\4��,���L��R����"�T6�+��Z�<4�
Slb�~F�E}�ɐȡ��`�LhnrS���]*b�$f����2
��e�D�$�V͆����`،$�#E�XJ蒤w�5�b�Y���?S�K�ZG����F\�7z�`M���ww�
ϬV�y���������TH�GՓ���Qmސ�$��g~���3^*X3
�մ�Մ���_�&-!��0��)�b����Ɩ4z5�#��$"�@Hb����jT�&�����_&��4��II$%;[U���
<�MҘP���6��D��ś��J鱦��.�{dZ-��E�?�k���.�1c��61ۉ�}:y�+=�_X���[;d���z�tO��#KS��D��*A�e�kz6_�!�	�"�X���ْ���O��y�
� �Y�Th]�u��6�U���Y_���[���[��ֿ��ĝ�N�0�_epbR[�2!z�c �&�D��w'�k�v�.��Į�ѦJ��?��x��9
�^j*�Wg�Y��q�c.��t���_k����mթz�q�3]�]�NO�{�g�p�S�#��mBw_�F�f�mq;��V��9��*��7��ež+�S�4&Y>���R����R[�c���o���	����:H�v�}(`P��/;?ח�]���!�U�X��#�>Q�/QTBQt� u��9��*
��hT,}Җ�M�ofDa~�V�A�}�~7N�~�G�L�k|�"��l�X�g�̏�]iA���m0�deL`��i�㏣�Y��ȚT��ҙ�Y��5��A�ލl�͝��iW�u�V���ؑ�7��/�Φc��Iż*�3l^�9P'x�����k��YZ�`Qtu�k%�����]_O�0�(Մ)TE���T�iO{���@�QҮd[%��>���w�9i`{	��|q/���w�`pT٭�$�n�! ��P�,_�>�H��>?12h5#�ǖ�j�R���7���y�#��=3o\��	k�1\��:x�<�PA~�H��N=j�2�T���%VQ����$l�Mڛ}I��
��zT"���QL��_��c:0Z$Re-2��o�`,���\���C[��#n���w�4��c�JXXi>�1�j�R�莸.���Ϡ�3<�#�����Ŝ�3���P�,va��$P�$@Cl0Iɴ�N$�X2�_`�I��f.Op��'�$��M�rSp��nS��C*���d�⺥����6z���kNL�M� �K��+��o��͞�z��'#�
��*&��t����j�u�>��[P�-�Ĭk2Tc!lt�gnf	m;�%��ٙ�p�Fk��W���:^DŽ�c+㶞P�� ��#�G�k��7��!J����8+X�H��%S�l��=�T�%�.Z�M�[�!��|$�hF�X��Yk�>���]Q����MH(�H6�H��-�D�;��V��
�Ԃ�cO��ܖ�-4��.X�������êͶ��M�O���戞���U� �N�-s���`X&W�c���Nl������e��o�W�p�眏��r��F���&�׍�����d��C�9�W&<e[^�g�Uţ�v���j!n/��9��8�s
��\�/�j�0A��$��p�/�D��2x�Dez!�RN&�@�K(�>m�R~�(sS���#�$��*�JR�����F-�!_4�`�}� !��BO�mv�d�hY�8H�K��:׉�����7Dl<6i�q���d0�7hőMyq쉖X@�i$ا# ^��OO�g�:jC�a"LTV���'��6��$��Y-7)�9h��ʞ����R����ޱ|@��jއ,�1wXOt�x�;h��-�
 YM��DzT��ū��.�� v��/�^��{S�/b��M�����d�;d藳H�x�R�iD��b��]�ܨr�˥)���ib~�p6DU�pQ	�
�тLLr+�$�ڏ�Rg5i?M9�k�7$�{2��ΰږ��i�Iuf�:&�,�E[��t�Sk�y�q�@[�(84��-	;Ԡ�Z�$�^��%��[�5����|;1W2'diw��L_�E
���̝MO�0�����4		qk�$. �qBB��i[��r����4M睪6qb9u����%B
�!P��}1<�d��d�w(�D�RVf�,�6v4X�rSc��U����U��j��hAvc/Wo^^�|݇9.I�0�c��aT�RK1}��s\e��ݝk_hj�_����������k�`=��r����V�������K�������
������a�^�p
e:�>ۤ
��Tt;�l��o9�R�ڇ�L��xΫGJ�WMc��pϼ5d�XcN���4���5r}�k��s(=͇��9�s��D��B��0}�
)�q��2_d����r��
u����h�&�e�y�E�9��LZ�?�_>���^�Q�S������]Mo�0�+��4Ө�l�����.�8��i�?�Il'y�h��CU��	U��僒^�͸�2]*�pׅج�_]V`�z�Z,G�\�F��O�b��D��qet�ʝe�Zf_?�y�$�q�$U�K�|	z��J��=�}+	���mf6�<�>Q����ծw?�v�zXZ���n����4M�P���f
��Bj��u���B픫�!�z-�4W
�	�R�͹�_��@���S�f�sI�`x�D��@�ې�N��}����6$mI�ܡ�{h���R-�	��|�l�
��Y�l��o�=��EJ�\Z�k�m�������nM^�X=db���Z�'K�}2�'0?�6f'�Ԡ��	�;X�K��
l��c�6;w�am�����]�K�@�W�R��G�
�E[�m�
RB�zL��������fOE�^vfvv�ٙ�ߌ�xqsK0e��X�u^����L�m�)�o�����.��(kWopA�Z݂�|ڬ�b!
-gP7\=`�+�|k�2��'�\s�G=lݠj�+��~��� �D>h�w�D�y���P�ȵF�� G�<i��o���ҕ���o��Ү�W,Qrx(�O�tЂ��@�g�jI}���3�C�&�"�zu��`0�_l̸{��m0.�?�{��H�O�+C�_/��iL�ه�f��E�a޹<y|�G�dQ�kM8�z����۔�kv��;>�KGk�I�����5�V�Q�I\��⪮7��Ÿ������t�|�N���v�g�K�K+Q�F[�m���62I�a�z�:0��+��\��챸���<��Ռ��Z@Yb���}y�X#��ls����A�Ń���@�C�!�c\K��y8?�寪��@�u��N�)�ٞ��mY������uS�T�~������X�I�����Ū����&
��НG}�P�e�ǫ��f(�+gD 
��A��O�֗\����>�ol/���
	Q p�?`Xb���N��@P)�F��s����In��C�i��[}v�>1��j�zhRW8�q?�Fs�>�����D5���J��
��Q���!	{'g�OI��ő�J'T|֕&��.ar*�q�U�F��^���þv�@`���1Q�@;Lޚ��%��b���=-�PX1�)�*1A+]{���js�=`��2h������5d��z�;M�L�n�V��`�$��x\�Ovp۷�d<ऴ�|��:s��6咇���B�w�v��A�e�1�f��W���
!5r�����ѓMҳ�="����
s��ڦ����I�%lp��6C�d\����Mlp9�4c�ߟvW������ć�ZI��j%�t�t���г�(��=8�y���H�_ȅZ%؂;k�Wʸ��[��j����k5�1aY}5���(9h��$��L]���a�#eQ%1Q��ػ�
ڱ(�ꯅ�������a�=Q)����)䶚�F�ƴd��UQR	/ז(��&F��z��"_L!�#���B�l����Yk6�:����>�ko(��yLM���d�Ѷ���� Ot�B��-�M�M铨"�xQ���dQ�z�V��up5��rR<��{�|�;A,
�U��Z}fUwyɤ:"��9DW��5_Y'-S��c/{id�����ؔ�M�g�6%6D%�fw�X��k������
Fy���f��M��,#��
�/�����q��|�2*�F��!aı8�ߘz�ţ����\ʥ#i��\�iy�K|�a=�$���-�J�7��F�׸"�g�2"�w&$m�9~m6����,���uVJ�,���&+(�O�W��^�En�
�т�l�9!Ԧ#�\�x��sL,&�����-��@Q?��W�K�k�*B����h��y�e�`k͖�^͆��t<�2�i��,.%��Ę����U�[3���q�m���L�xly�T�rH�J�$Љ���k��zAM�#�<_�5Gp;�3��Z-}wg��q�:�H��bBz-�d�ژ�q?��b׾N7��Jh�?s�H�yG[����g�;�j�����G�JT�5q���Т�g2����9G�
ml�{Fpm"�BF����`Q zs���]�M�/xWB�B�[f����QbĐ3E�ي�Ub�1��*���\���o�腋$���>#��Kg���P�֘:�3Ke(�Dy�%\&m���)�ݶ�z�W�ꛍ����B7}VZ�Jt^h�ǧŶi��J���mA����������n��^g�넆�7���b�x��.N����g7����T�m����	@�B�q��N�G1�y�1���e��k��UL�N�m.�D��L��c�k�"��-�kA��k3��_��y��|�����u���3Fp|��ϵV��z)-�V>��Q`ә�
���p��`7ʏ�l�0��C{1���d�u����L��r�-�׸�����J�D��!��e{�ßV���/3�x�U)�J$�_���rIDR������?qk��M?���~t\��6:���N�X��*5�}��]�������xg/�F��{�j
Z�W/
��zc�����<±gt�(��LO>��m��O�1�-�����1͐��[yCϯ�xX߇�lPǿ�Ĝ���J]oA=��o���Yn���k"�-?K�'Э2I��k�Aq����5�Z���R�]�+��X��I�̿dR>ነ��xфȄ`��I0�X�u�h2�Y���lb��K8[�M��Φ��sm�E<���
@�*�}v31��J;�?&��x�dKB
) ���W	�eE�\iP��H!+����-V�3?��Z<�OI<6����g2U;��Z񮷗Ļ�u�]��(fk�l6���:r�'�a�vvU�ן��9�DX&�2�쯏��:�1[$@�]�(�ALD�#$x"Б��4������
EPȃ�&�sG�:V^�c� N���'��U�e�c�B�Gy=�%k��B^�d��>0Ս�I�	TPC
�IVo���5�#�<�2�M�50���سuPQ	2�ket�L!B8f��+g"�n/�晐�Y	%	T�LT�!)�(�s"��)�EN�������+B� �q�SĹqʁs��r}wNt�
�ݱ����
�����=������[x�Wr/M&�_+Z��]{沞�[/;m����\gP����#<k������K5�ҥ�Kt)�y�%�Gx;$﵋�Rؔ�eԊ'@R�l4�Po�y`b����+~a3���$��6�3�W�xU��6	��&��s�p`xYn�����d�ץ��2�es�6�:��T�ύ��M��eH��\�u-W8kվ�P����ӌ�J2��dN��y��Jy�Z]T����ޤ �}{�%9nl��J�d�R���T�
��HHr�˲eӆfK�4�)*'�tl6�y��Y��-��<�� �1�Yݷ�]pk�j��rN�Jz�I#˿C�A?���L��jL�B7����Qj�ѵ-Y=��]-Z��:���*s�\�}�'�i���M��9�.(U�עI�vL&T�z��C�d$xn@��A�h����zD��0Tl
G�0�
�U����m�N�ϠT�j
�:��\{���2A�s����-��A�+)f<�@Znc�E}�����%+_$A�hS�L�+��oN�6��)~(���q��$��-��j��#�
c�����.���j`U���T2�Qu��?�T�����)��^��p����F=����r��?g�
:1u
5��N���\�L���k>k���vyt8S�y�����Wax�0�Lآ���-�"Ɨ�d�.��T�L@� ����9���b��U��E,]˧vZքv����{�"�liZ��2-G��1�������0�`������Y�E�3�|�m.��PBl�C�D��g=�#sq-�H[�y�`����y9��hZ���h�:bq��`r#;���9�����i��t;Ug,�;*3|��n�9
��Ok5��=^���m�a˗�"���C��.)�v<�lӥ�s��4���[���՗�����v�4`�51�b�z�_�
�- �#x��LY�y�R���@���T�K�t�1�C��?o��dL�1�"%��K*�<��X_���p�X��*=�W��V�c�Hx����u����S`�ݗ��ȖTi�S�,�bD*�"p��L�>e6�q�)��w@��l�ڿT�6�Ѻc�0��Q]\$l�i�ތ�I�;{T�΋qk1�6�ED�� �|��+4��:��E2��atW�!9�:�m����;��Bar긋y�o5S��<��6zLn�7E�@t[��Y(,�Ԩ�
���̴9�q�AfZ���ͧ�yYF�Ńb���b�\�̦7'\�i�����F����
A�8�����w�x�zz}Oƭ�n�7d�������C>x����2Ȋv���a7�
`E����a{/�V?��;y�Rz��_�{�~��e�������U0`���Q��ն���ؒ�������=`u7��A��%4�v����O;��7��"�� �ˠ���^o��'��z�A��6� z���G���v��-A��dr;�!���
�G�Z��.����^���72��=",��)��&��G��S#�]���w��0��ހ>�A�t�}l������a4�Oۿv��2�����V����\��Ʋ���P��,I��X��������F�N��!���#f5Do�|�;=j{���w��M�iS�އ��=h�=��'�7�����:�!H�`'$������9v�9L��lV���<��s̄M��L�_�;EH���!�����M�"�ҍ�B	~�5�����G�Ւ~�T������F+#Y���ZN'�κ�٢�V�yv^�_�7J�a�$�����.���@V�M�s�G�M�N0*F��?h���v��ڒ
eq��
����R��Ϩ���IL�=��1��������J)&) 蒤?Q���T�p��޹ҙ"��N`�Ԑv
����'�q:'?��'1B��s1
.������l��1u&]��C
ۋ���W�?ē�{�P$�O(�N��D�C5"Rq>��{�'�瓖.��>��A��� ��}�����Lz���@�T��M<M�$b���:-}h���%�*�8@\2~��뼆�=��W�����g�4�v�g�P*RA�{��k��NU�0��7ɘ�2�'��q�mD��/^�+�l�����4�I
I)4)�5D���`���ȍ�.9�J�hG�gly#�_a�9H�rh�(�]$k��	���N,�<Pc!� ��9�a���\<U�k'`�=�jC��2��dL�h��9r�0�C�Xb�
z�\�֯���l��7�~��g�ar�e],�u�sX��L�C-dV(�I)&���Q��N�2��&4�0A�7m�ۚ��rj5��)�P}j�a�t���F&�ND
��~X��|���Bk�!��L�
4��O�4��ākb�+j��P+�������šWz�X���%��(Ծ��h4�dH��
�C2������Ѕ�̠9�"��Qbyy��%������j�b�l�z�<��l�<��j���n-H���J�`}�R�O��Nk;����Š�wۜ�&�
@Fvǘ�R0��j�����mY+�(�
����]�k�0�_�����Ia�C�0:([�<�R�NIn3gkh��O�%�l��}I�u�Y:K����3P��D�IF�^�0N��ナ[F�����C�o��?S
��5�4A�A��{o�,ĭ����wfFd�7,����"�S��nf���k|�MB6A0���c[���T�!��C
:!i�1>uR�OEq����zs^�7�[w�[*����ˮI���H�*��:��JH��#M&e�]����&�`�z�HN�-I��I"maH�@������Q����=�B)f�7L86,�̓K��
�!Ө�$<P��3i,�~�FC�D�AZH���1$�\O'��F#)<����g��9���ֽ��s~��Z���V��f^�H�tt��U���,v��I@�]M���uZ��G�O��sT=�h��4�T�נ����ދ�]��
�^�ˉ*~�Q�lF=�����4�R�7�s�ƕF���K<�	|H@� �ɦɚ�ΠKF��#Oz�V����
P?��9�Y�A��s;����µ�붩9xkۊ���������{A��Nr0E���z�V�?�����o�K�����l~:�z:����3����_r�{X�/؈��-x��x��~�@��]	�v�z��ar}F�l�W@t\�į�[#ð����d��*\��z��MZ���D���C��#.DÊ���8k�Y�d"\Q�8h�O�G�>R��Jy���� �pL푢k�bFQ��"��h��U K�~�v�7H����O`�TW�$�qD�(��?�J��882$���-�)G���#�5[[�������CT�d��������]�OA�W��r�}�zTHI� Ucs��
�F���;_�u�4}�ngvvfw����(�爮��۰���C�\%-����g%i��~<������!�V�}��<��6���l�G�1mX<F�X�O�E$�fjJ����E� -��W�~��@s�&w\>v�U{��r�[�/�����c����<Q�&t�<�L�~w�ƨ=x�x�Y1����:Kx��Q��Ɔ���!��?���!~�ramZd6���7t%���TG&�H�y"G����R\��jQ�+���;R�3���Y��Ye���7�0�aܢ\�]Y�e�r�&��˞P���i�I���]O�^�f���7�u��Vwk��Vz��6;�
"<Ga������`tp�xn�霎�߻w���((f�4c>��îJ?�˹�^��Sݬ��$��2%�ȓ��P�2�,g�>�Q\���i8 �@��s�Ϫ�0QI�:��a�Ѱe|�]�4P�8$w�'���PH���j�/�Nvn3�%��6J�eNh�C.�6�bG�2�o�
O}�@�I"��ײvd<
�D���W���3j�v�bmݕ7�)�p�hj�� :�~�y��R���-:�����qKuxZ��|�!�v�7[�
�/�Y�	����g+HPj�9Z/�L��-���f
�%�Ty��J��jTg�(*�w®4S��b7�lgܟO9�N����QX����v5��V���rZ���`TL@j)S�M\-l'����(��6zuV�BrN"2��j�����"B�Q���A��_���-���=m#��V�\�ٿ�$oXC?)��Q�2�ї��o��QY�Q���no0�B�p�n��ޘ��r�Vr��EQ!���Ά�˳����cIW�<�H%M|7�F�qҊ�d��^��
X���
��J��s�|���&�p��rZQ�&��e��.�����N�Xl���~��Ӹ��֠E�?�ѱ�-j�~*�����6.��,N.��җɉs�����}c�.�ge(�0�,��TL�O�M0���65E�	t�0s�'��x]$
�ݔ(��(����b��-��l-�t�*P_7�^��
����I>(��'I>&����.��?�=kw[7r�+��%�+ZJ6ɖ�u�_��l�Xv�=��R��5E���m��/�^����i���1��`0��{��d��]����~3�ڋ��'�Z|�GPOGKpA�UTk�`~�=�u2$v��u=/�-q�'m)4nA������],'��~Ht� h����U:���^p�l�z�)�#��"t'ߎ|r�@zL�̰��gka4����Zc.Tu�����y4�E?�
���\��"'i3$�`�A<b�^��;��!��]]�z��\z/�r����Ϣ�^��az�ٯ��)�<��Ӣn����w:9GO�E�B:�s,'H���!�KK�8�����܎<��C;F�|��%���B![w��Ƴ��p��y��3	�@E����I﹄�A���m�����Ų��^�+�r9A{&�&�j�4�<Z�	bg�G�nT���]�s�H8���Up�H�H��\��{}�=����|��
�)��J�١��
�j-��_O��@8�����6x1ڻ��f�����ҵ��d�E�&ڱ��RAQc��\S4c~	
Ό����ڕ�U�͈r��VV��������{lje�$g�Cg�<���L;gn�G�
ۋ\5����i��/oa
t��xSP�{��3ˁp�K�������#9��F�m�Wi#��~�(�@5�:%^=l��Q�^UqSތ��lx�b
������q�677���|��J�Ǫd���S�?���{D���
|��SZc-�
�\�sY�U
)[@3+_�g�Ӂ���-�[НP�{~i��z��,��H=�Ȭ���oKv]�~s�̂�v��۔z
\Oe.�L�@�[����|�E�+�p����$
�L∦���Ws�n�U,Z*Z�!UR
}���{��7�Qց: �A=�k�(�l�����Xz�@���7�AY�{�Q��*Evd�rC��pG&f�����T�ط��l5�8����F[V^ĪT=Ú0�v�`��W�;�Z�f���of������~�����j��&h{U���h�+y�
P���d~�����_�+a0n��8��Fω�7^��`�����<�.H��N�L|�t��0&�=�O/��|��͗c@�i�3��.>��GSo� �V���+�S�������<T��N��A���C�)��T.�k���L�+[\e��3�)�xHP��qu�l:���0��B4e�TE1L塺<�i��p7e���\"�Ar�%J+&G֞{Q�C�Gq���rSS��:��0*$�sZB���Vq�d�R��c!��0�RY��Ke/�T8m_�ց��q��^��yRُ��^��e��a�\Wm;xs�_��x��_{��yb��1����";�Me]���sh�Hs[�PJK*���+#����%in��Tz++ZJ�X�	77�T����C����2���j,Mn=ߦn���!4w��������ȳ��ǘlm:���Cyn��4�����E�\n`q߮��<-o�uJx���7���V�j4e}�u�=KF4
����wD�5�K۝zL�Г�|ƽOGp!���?�Rtr���A�6���g�
߳�:L�[���~2�U��pN��*���Ëg��59�e@�����ڵ<��a����k.���\�L��F���\_^��ا�ՈՈf}-�?ϛ�6�)H�훍l�ΰ����/�^�!�"����P����dz���y�@]cP�>��n�6]E#s��(i4�`��@�vr��p{C�'K��W��Ġ}����Aa6��|�����P�uh֓X\�o*.-1�ީxcׅ+l�xVKFj��y4���*
L�M�k��0�*��Ҙލ��8J�Z�

�ŘA`_�K�b߫ޏ�Id�
��t�d��x��;|ڸ{Ե������6��i��r�{o
 7�-���gqA��$�ذo�\��f˕l�Ŧ'�u�z�1����l�!����,�$�������3�;""�xP}�M�@XN��~��A�Yc8�S�k���d%� ��/�h�e}>�N�*�2H\N�Ƭx�)<W�kpƙvgdKX�f�~�R^ΗU+��|/��\fl\87�EI=��_�U��A0�(7�����r
�� �rC!�}nD�}�LM���b.]��O3��w#�m�˕��7A�r���|���������=q��zrYϯV���Rv…H�-���@EƢ���VO�h��͖~
���Ȗ�(�`R�_�d]�b�l�����6�����H�C� N�[/�{P�Bh/�	�	���	П}�*r`��ͤ�� �����z�+U�y��OV��O��(2ұM�i-/�7���M�l����!;����|f��(�4�_�:���aF@EfjA�At��we������D��A![$��5�Zϲ'����D��}r�N��?�����ݠA�*�ݧZ7Ï�C��r'�\���A>� 憽�0���{�rS�+>���!@.&��˰.���?R�]<�����~1(g
��}x��/2���N�]��D<
#j�w��<�|���S5� Q�m|���0i4�L	���.��߂����V�߯�g��#
�e���0]����zKƏAtm����e����������jl�w#;[���݇�J��`�>�u��;�Mq?����Q�o�nY_;m,�#��f�̏�Hh��S��q�=ĈC��[Q�3��F.�]�|��ŭn��\o=����b�eڽ|��i"	�㵲�J��o
%HW0��ߙ��vl%�^�5��"=�D�Kϒ\�6��6�6�tTSM	C'+
�1�Ѵ�]W���c�9�L���O�9��M�K:��;�1ŋ�մ�h�3���7���r�\Dί��u��Cu>���9X�w�h���y�d��:��g�e�,��t9��d��L���7{ԣ�(��[�������wA��t`�	�^�\ZiZ�lۻ���w߅5�c�yr��� �yĠڀG��������Vh4lJ��N}�<�{���G����C$�	�w���,�Z骐��z�U��b�>�JH�ʪ4���;/��uSMB[.z��*��ּ4R����[�?+��D��4n��_�t��:�D�QC5m%A3quY�m��n+>��j+���/f�𦤥�gw���=�K�	V�-�Bpa�H�[}y����B u��O?�OZ2 RSeW�ϧ���5#��^g�ex?��B$=���6y�5�b\[C�nO�����3ó!���\���
9%mPP�G�~�Lh�B%�������\�]go���VY�m���1dAG#��Hc�x�dК�ش�A�p|G'�z��$��N�T������nUY���4t��7��ۚ[���Be-��ʄT+�}�Z���<|h�%�޴��Mrq��rf��E���%M�����A�.n	/t�x��{����B�3l�r����
�7�r��#|z=���m>�q��I������7%NB�Ӡ�3J`|��.�S�u�]/5�����[���O�C����x>�qѧ�����_����|�j��d��LC���j j�G�X?��}��#	{�;+r��@J�1���Y&ㅦt|�Ûf#�-��B��ڳ�%_X�fU4�����xf	?w��xƎ�Od��O���/����:�3y�=^�������
6S�o�D~�W����|�,�
lN��j�h�y��G
��ޛ��ٿ��T��+������=CX�1�=p�vx6���
q�C[�c8��Y�H�Z��2YԬ^���<((���؆9v׶"���P����]n����n�\�je���dEP��!��ճ��ޙ9��T4�:�ߑ��.�v5�~%#���y�	����.��2����
�.�4�{̯�NO�!�1u>�^��H
��᫖�QWl[_	�Y�,�-�,8^n	�S=zwk�w�.��\��@��U&��mѫ-��s}us��y�ib�]��ڳ.���$��Z@�9Z��a�8&�v�0�O�k�-�zn��v"��CŘt1���]N���..ȦK�8ӻ����w
�
}��Q�,#���f4�g���}�Nݜf ��1��i��ת�,o+25�nLz�jj�91�1׭Ys
�,�I/Lt���mǮ�+x
c���RiA���w �0F����[LE5�sg?ɢ����"�k0��7��M�(C�%!��߰9N�H[�	�}�oy{ǡ�MS`_0R̞M��l�4�ddG�����%�<�ei'�a�x%}N���QQ�QJ=z�"�>{z�'���{��Ȇ2;.fW�g��XY�!F�SBp�����y��[:�>
XWX.�[k��3�[��K�E�
�!�7�xs���*���Ct��óD�nwC�
��_d[�\]\L>�m���T�8��oMt`��׹;1Ƿ�j�=�y�e�;��PɃ|���%�'4�#�%V�t ���S���h[��E{l���IN�c7���3�*��к�|`��3�K��9��SK/i�f+{�bROǤ�۳�T�HȉjQ��M[��*��}��Ϭ��
��,i�SⰪ���)�e�;ael��o�I/2s����a�^}�=C��V�1�Ѫ&^��'��(�-8�@;b�d{�/��'d��j��Z����Fp���<�O�1[T�nMWˤ�
�I�FX��t!�
h��)�BA2`ߴ���\�Nx�.Mz�-f~bd&PChBEd��'}��SҴg^��q�td(cX��j�y�<Y��LC�w;�ٸ�&������HU�^Ul�3j:7b�r��t��w���H%���Mkp�6-抎�0�v���4�-J{�a? /իb����l��ڦ��@�4�a�����P��ɸ}"7C�c� k1���Lc�7���+C�c�D����$�J��v�i9��g�a!Emr=[��pHI�]���x$�)�
�0��3nE^�0���t��@>q�f<��S��u����#�̲2�Z�V	K@�?Ԃ!	�_0zu�Uõ~�U\\N륡>2&C��Fj��?-0L�Y;�#X�����d�P)��}�M�[P'�*:!�̞�x���%���3���`�g8�-�c�ځ��
^�]w�b�3Y܎f���a�fw^"tڼ.�d�m-�M�y��A�F��:�O��	���"��N��d��ǘ��:qr�8�
�H�wzi�ɀ���h��C8��!A��`M�!Ej
��=��m'��B��J���Jz4��.�`�1�s�˿���x#o�P�`�`�♰��d�kIa��C�Uy��>ֳ��m�n�ZX�iT��,��LE�C��Z^�8;���jP85l:߻Q�gvH
�ʥiZ��p06%H����њd!������h����S���!t2M_���q)�1�ņ�aS#G�O��k��)�j�$��&�+`�N�`�(���Lt<��d�ғ
��=+$���E�L���L�*e!���`�� p��G�nvBΧ�~qF�X��m엄Շ��қ��-1�`��� Jw�
��#4l���ճxhv�G׏xÅhs�sU��e=�o�.�5,"z'�۠�Uا	q9~4���]��gn�4�/k��1��H�9U�m�TJe�Ŷ��`*U�HM�����jH���z
UVhH(g�!Ƃ�N��wT���B.V��O�`� �6��8a��iL�%b^U�Fm<q6q������p!�D�c�|��a�e�����$ j�_,���F�Äρ��ՓX�D]�)%6��8���\J�I������ꏘS���:1�+���u��W����U����wm�ن%����#'��{���0Z"]}̗������!�ty^�C����A�l�`�!�9�H�`���7�cr��	�QF�k��C��p�-Vw��F�8��G����R�������/�M�����m.��i��_B` ��RPd�0ry+��4�xi�f4%Y���UX�����3W�@u��L���8��l�����N~�gW��k�����d8Շֺ�em@�7?�f�W#HEy��ubd4��M��|�����I�B�|F���U�̧F��p��ߎ�A�SyaNU�c�t5���9�6]lzR x�2��@���������_s�J�%%��^�Ψa����$���	�f]g�E'"��:_��� @�;��� I�E��!��HC U-@!���M��}�!OyZ����ј�A�O}��_4i��"�?�P�*�9�}����c���UĤy:��)"���$n@0[�
�z:��hq���%\���q�c�>�r�+�͛#}�M;�b����S6���nK����7a���"<*D�3R\t��g6�{\ai	�����|�ۈx��C����ś�#x�V�a8�P4��2b4���P�F�[�Ep��m�~ű�����c��٣�!_�uWC%��B��p�@���l*��5�$dl�a%p|.�EĚ�8��p���pi��qM P�ʆ�S��cE`��{���P��b�Q�	�p�d%7M�t�nP��on�NC�H�G� ��qF3��u<V!�]��m��5+M��lK&� ���-��~�`��'�;?� �]�ɞ�dB�ʼ�h4�􆺶_.�T��T�&w��Ѩ����z���p4[5*��!Y���
'�!���-d^�@���Vi��!k�ek��wc[��HӸG�k�#%��1=z�@���}�'�K������B`𻜀O���H��H3��}�Tmٴ5�"t,�V�����=���#�Rk+�8���B���SZ�����a.t���<����|3��d��H�ٵ$;�~��_\5�3yB������I����t<�$�a�c�̆9L� ���I��a��r�eDK
gء���_�Y'��o�ɸt�5S�ɠp���Zo�aڱaV�&P���ej-���V��A(Ր9Nw�I��Q,Kx#��]�S�~*N�
�o�J��=�~3����YU��,0ч��K�}�=�}�"�.�k��@���-���Z�N"ԣ�Pc����޿/�'��!�I)t����D�ha;7��g��[Fm�4Ӏ��9š�ƕ�Tb�&�Y�+�\�\���o��~����B��	U�$�ɨV@�&��� E�vn���"Ȩ� R�������M%E���3�<&mh��4�P�H�a"���&m�ȸ��"w�[W��pużnvK.7Bj]���0㝇FWF���4�ТY�F�c9���=n0��B�j���O4��2@��H�0�f�.,�>li�]^�V�-�q�r�DJmz�Y����P�D%Ms&����'����:d�&��Ï�oݵ�;�R���g�=vE�g���/x7��#r=�	�R>K�'#�xI�8�K�>��GT�[)"�"�d�9]J���PjW�_؝=m	�T)3��vH��3ld:z�^%����E��fc�_�%��0���Ly�,'��/"�Pª� ާR�D��@sxX�À�,;�w�
��J�G�q�f���������馛fE�����Ȱ^v��[Vj���+Ö5�#1e��G��(���fgo �v�ݝ����Q�r�
{�K��4�a�����D.��F��z��z����7v�W�Zf��`���; {����y�ȚHDz]m�����vp�Az�⥚ڮ�^�� �>�Jf�z�p�=˔��5��r����4N�=�T�j�J����Btz�C�:����p�nߛ�D�!_/���5a�W�iN�
0�/N;�j9:�1���$��tu|�ic��Z�<���o�~W4�\�	��{E��W<�C�غ����c� �%���`�t�[�+��o'3���U�΍��/w�@a�p׎S(���f��]]��r1�CU�m�7������Vpr�<�2����/3�58?�Lz�6��0��xj��ؙ#�)T���]=�f��o�x`]aR�Y�)Il&�6����i�ֶ�>/���p�!�ղFV�[�Ԍ>#���(v*r����O��n���3qTQ?�«�28�Fr���':����4�N������Y�Ǹ�A���4y��� �WtN��G@I�Q6(���d��C|L��~;Bg�d*&r��dzc�e�2"��g3�]C5�ڐ��ڱ�Dj0x�e��r4��΂�>�?�a���^�p�ۺ��d�j�Ku�� z����|�=�����}0R�G�� �	j���
"��)����Qr�q�.%�k�:��`R�s"�'�k)���*a[-$k]6$j$�n!A2��s0�~	�62����l/E%�z(�����ی�YO�Ԭ�٦ϔ�gQV�̖6��c�j+JL���>{s�ߦ�;�w\���;[�J�3��E��{+'{�ltOs-x�>��6��b��.֊p�⠺?��* ��P���-���Q�-�?�Fo�M�QΏ����k�L��ɱ����)bb���C�O|)��v��W�l�j��C���M�l�n��Uu�c��J7"0W�[Qm�b���Է�a��ӹ��>�ЪN��LL{p(f����X�o�x�'�j4?E��۪�h~��N��Q"����=�x/�X�E0�����_�G�5�\�U�C�&�p	H�3+���s�v�kq�V�v-�3��De��C �v�����l�Y/9�%��*��.x��852n	���tە�C��߬�u����t���B��4td~ڝ4��:-;�X�i��X?
t�cc�X�%��,�+GUܛ�y��SC�(�5m���>�:�$ʥ�4�@ZH5���w	��4�f9��ɹ���K�k_SA��v}T�,�|?'ɮ'��cd7D��G�&ҁ�Pb0Y��h��Ш��uH�R
6���b�
y����l�D�
�(ٰ��x`ɶ�)�v�aQn�3��o�L8��H%]��T^�+��$;Ü@���D��7�_��)y�R�W�'��v��_l�/��&$Ø�:%xx��9��3K���#c�����]�	�Q�i1\�/y�a�js(Q���"��+ޝts�͗�������w����vz`_1����,�a0p�0���I���DL�d�ca�fx'}!�bPh5 ��3��,��&!�ǻ,���SP���D	8!�<
k<��	]1����8��D#z*Y0h����f	!~߭V���������Lʐ��C��߃�.6I��i�:���xL�CD���7�:2��>�í3|��j@�]Z��?L\��2R��:-����&�eSƛUK�*����o��C/�;��q
��ނ�����:����U0��j�<��sV�x�&�~9|��ףg�#��I��|���ίV�9��Da}��鉷Q\��挹����Z3��R� Z����
�] ]�{�����_�a�Y�W�_����d*��ȣ�Jl�W���e��{x�_\o���ׅPl#g�L��k^�_9��y�X�`��#�)�~p��@�/Q�࿎G{���{�K���`S<�7��
��K�|�ꂫ�Mo���.��[���ovz!M@�t����a�v*�'�1ǀa@U��_�_�%~��~m��ک��[vV�?���w����Y�45�*I��=Fߧ�����?����,\A;k��QW*�g}�w�ST7���f���s\B�Eԓ�ܝ������>Rӧ��I:��!B���t�~�%֛�F��&����t~>��$���\P�Q9�-]S���l�
^2��A�]�ϰ��ͧ��������;(���դ�k~D�W�#&X�(nFp�c^�C�zoA��B�kؕXUR���V�|w(�<ɖ-@8[��kL�K�9��٤9�MV�	w�]�(�*��*����OlA%�ٗ0�
�-���n'�*��z�{�j��X5��K�_��iDp��=�F^����;���g�����'����ļ�*�0;�R{�T��4ۢ1{��������:�{�O�8�Gg�������s=S"GH����r����F
8�ߓޜB��o�[��E�)���!�8�%m��P���{�*�X�sYϮ@�s9�7��}n�K�i��a���q9Y�;V�A�s�,�	۴?�4�Y�]��]:�5��Ԟ�@�E	������}P���h�~(�{�p+�����.,;ЅC�:z�XA�g�v��U©��1���c{�S~�Ao���ѐ�n?�9*f�>�;Nu�0��崴s$�vۦ��A���2
��t�a��+��H�?�\Eq�DE��Ote0_-��p
��H����&�?�s{��[��u7�)�i�98���N�C�}67����2.�������J:�d����.&��L�E\��y/p�7
[&�E����{۵@���C��r9�.!�:
��\�B�#�k���M)+K��fKy4���|7߹q�?�`�^w�z�p�R�w���/~}�Q����^����FS�����f�茽��]ײJ�U��N�k�0��{cR6"����ks��H��V��9��r!�Δ��/q�8,a�
H�t�=ӏ��y�.���$�;=�ޞ�~����2���]DB���p�nh�����^w'�r>1���;ыlt;�q��%�t%ԒƝn�;�f	�'���C�W��Q
=<��(Yr����e%�d�}7����f�xt��'lzx�t����%;���<�oz��J!F]q��h�jp����3�����sWS
=��0�����ʿ���G��#ܕO����}�� _5��D��FzA�\����^�S����0W�gJ/��c^��b����l�s_Ab4�/�3pފ��/LȶYc�y+�����h��E'�z>I����mY����5w,q̓@G�
ك$�>+��:U����b-^^r���O��w7���ƚ�l_,\���ށ��U�Һ��>�2��O+A�؂�I�Jxj+U���0��p�%#���@eߟn{[�<,�ټ<�b[h
Y��Qf�[~`�E̋'�Π�s��}s�k4�i�e��e�k!&"��-����\	��j�Q(�o�T���A��2��.����v�=�������}�5+�0"?�{OY$Qy�Ӯ�A
�Q��B��@nV�����Vt]�,iO$��_?���PE��VmC�,�$Ǣ��7�ol9��j:O�i:JC��t�-��v"������p��2Iu6ƛ�jta��(Dad~}�:����g�^lL�0d:��=��9�L$fU�\����m��P��0� ���EJ#M�Y�'�
��,譄�J)	8���ϧ�@�U�����48@O�G}��Ʃ�ԆN��NBJ�U�7�w��`r<�w�#g�А�Fo�=��
p,�SC{�H{O�H��������p<;�I���	)S5�oHV���
��?
z��.{���L�÷'���f��b~8��i�w>{��N�����`����@[w*v�ކ�9����.����Z��n������T4��q���V�:�hl�~
�itzg��~��
)G��DK�6'�."��ǎv�g����	�\6�V��w=`���(��;	(�1|����,���a��$�C�g��z��P��D5'g��˹^�2e|Dg�m�J
�93
�tl*�S�ç�W��:AgX|�<Qk�I�Af4�?��A6����]ঙ�,�y�\�g�IJ.{�V�3�]�!BO��E%�ng����׸�m��̙!��'E���O�r������y`f|-D����Fp"���
�T$�ٴEN���'�$�gY
I�/�B�%�g~=���w��Bl��K�J%�".�r+F��Mi�S�9HMw��Z�N&5Ğo�
]M�D���*��H�+4Y� �F්T>�/)�\,C��jM�k�yXI�S�f��,rF!Y4��uzfjK�L�e����A�m*j�}���%H���,䷁��sT��o�+:G��!ٻ�)�Q�9�ۙ�G�G���r���G�퍘�	^"�1-�%�w�r��jOuoި����8����E��S:�f�6yV�{���������	ܥ��f�)I�O��B��T~��pgjZx�VVk,�N��uJ�YW�j��p&�d��W#�ݾ�8h��a����F�1�C�tղ���B)S� <���i�|��]t�j��Z��%
��*�h+�y�-J	��^�C��Z�&թ�Y�a�b���=UԳAhVP����L`���„i���rf~Y6�#��n�~�+�x��B�� E�L�I
��g�X��˼�aK���rޥӫ)�y-�a���^	M7 �6�Pb�HɾL/�_�A�\1���x�Z����Z��>���!b�t���R,`��"^Ε+u�K�ʨ�e�(_CGy��V+��/�4���Ϣ��h�ԌL{'Kk,�)��<�`�̼ƒ��K�zD47�|Z� �2#Y��! mG�L���5�W�����L9oc��=��^�v�����#��E��`Ʀ;<G'��h�0�&"�4m����
e:��~{�Z��4�4M�և���%��Nh�c��������7:i�{���;�����jf�_��0�n�7��Z/;�r �Ǿ�G�C�F��x`.���7Y�1���U��3���)��L�)$������d��缹�%r�4�χJ_��>��1ϸ2���>��d�~�"�3���va h�x��;@�6��B3��"���‹U�������U)�AK�hO����/E3�)
�ud$��}K��*����T��\1D�
��L=�؍">�̀����4�Z�w���#�7I�1��Z6p�vq���sM�e	ᶯ觋����F�'E�1�A��ۛx3P"�v�-T�u�^c�()��Ec4$q=�E[�񌊰�VT)��[��g'�:#t����I{�̾A��y�J;f��}���힟�`�VU���>+�Hd*�7���@��jH*�]�䃱�*�SR¤Df��w����* ����:��YSlcn����9�C��ƱW�dU���T���fx��ZMp@?�fLI���$�Q��,= 
���7���9H4���QW[4�;���c&�Х'��쟖�eu./����`-�a��=�;:���,ܒ���2wOe�]N��;�s�6�|�t'���D<�#Xl��l�2o'$��	��ƀ��Ū�e� <-gNu��=ձ*�S)�h��p"��2W����/v��TB���{���Y}B��ˏl5��=�Xu�ij�FLz4�޵�m=���'�'o�ϻL�8לBހ=���.���WЗ�`�oӹg��*�م�T�[��Fu�=:�O��Gy94V��J]@��t�����1]_���N����.p�\;�u��� ��[���Ȅxy.͢
�(�^g1�h(7Gq��_���;��i��ָ���eK���u����GRqZfI�Y�
4�=�����fe2�b�߻*��̔Q{�ם����i�i�O����s&���ڙg�JH7%����b�`rD}�QgBM�G���Loj8(��^唎J��8S��n>�hPY)��S��R�WŨ6�������#@�u����Bt�O��|u�5�j��
./O��Cm��ϲ�Xة~����XD���;�v�S��1)��I��+�l�,��
�c�K�H뚽��%�$����T�i���ϐ��kz�,�_H�!G?�Tn�����ſ0MşL|9������ܻ@	��c��������>4�]��F�{��BMr�:�a���b4+���5�7���=�Wɑ���J�h`"���I��x�;��v���t
�\��'	�_}uw�t����w/��bMwuuuUuU5�w7��?����>�E?��^�]�㦘t$l�u1'Oy��LyC�z\~�I�N��Fp,V�\
�Wm+�������M��n��O�D�ƹ��ȍ�������>�8I���O�^R\Y�
�fb�'�=R��]���:�O���u9��5�%�οwG�G	{B������73��"x�}W'�Y�f�
 
�Ԅd1�O�.��r
k�"+�C��V��g�^$W�Of��|��3�X�2ު0-%c" ���h���U�x#��L
���M>*�
z.��8�3���A�1�����9�?v�Yo4.U����yCa����i�Q�E��vy@��a��b��~:��5Xe��"��Q�Pp4+?��
c�!5\�
 B�|
(ct9�<�m`�:O&���@.�Ia�1^һ<����%=�3�Xam��u�h8Z�iY���i�S	��QO���P081�{7�b#�����>�l�\Hj1��*"w�yz�G���DZ�b)&�7JP�ʚ�m�WSf���m���C�p�l7�j�_"Bf7�;����l_�� 5q������b#��P�U��@�����AZ�‚	�����嶠p����#2s�A��AL��dM+��<ѣ����>��"EQ��]pd%��]�/1A!����Š���^��w�^�
+�J$&x)1{�J\�&:[���&�8eJ|�A/q�*qW��*GTj�.͛�@GN؄h�J��*�L�>��8��+ۢ24���x�sd5����Eo<8���[��~��	��8�G	��k:I�4�!�$�t�8�ʐ�=\�#�^�M��"�rt�6ϩJФyQT����mP�G�Q��+Y�F��X��e
�L0��)�����d���L�V�GIJ��@<��VP�f����M(�	�*���Q�E]D�A"i��	u�i�	����+j���j��e1e�;��]�}5�e�����Mх��x@��a[��ٶ�>^��x�{%k
�ɯ�P�~u���R�EÒ���%�9������X!�b��V?C��❶�#�M3�����^�q��O�֚�Ơ�
��	�<�C1�e��i��O����E�����]]�&�{h���\�u�S4���!;�=6~u'G<���C�'4��Ly)�
�Z�+��b-%�S�.h�a�BgUx|!����B��rGz(�=���yH��(�ҩ�u�Q���^'pY��?�d���O,�ڟ�|��N��K������T��-z�����ea��3�45�Uq���2�4޺q1��
D5��;�ܠ��ဿG�}P ��t�Xԍ�z2E�r	B�Ӷn����>D8���#��(�@�S��";<!���Fӗg��1�E���
}"%}ѲR�."��M)�F����g��;�8�7��\�r����9��w�TX�@添�}�p�YT��,��"`q*���-���b�V@�n>N�Cґm�~�ʢ��j3�j���i-lC���R}6<=U�Dٗ7f�g�ݖ���˖<�������?.�0T;>�$&|颵L�ab�U)���~�dῦ��/iŜ���Ic�ጫ6��vy����Xs���x�����2@�c+j���k�BX�%�V�(*B�'�W,���/�j����L��C�����H(����Uҳ�c�	u�n껋fj��� �Eb����M��)�ĽZ���)'��Չ\���kk�Wc�M|�����Ҭ��'��ບIX^����f���\�SI���M
;�sO��3��T���b��lec�,���`���tU_'�-F輸�f�����j�_�:a���d�׈iٳ�=*���!:`��_/_�{s�����{�[��/�,/G�p���oz��^��E;�學�=�'�譪��C����y�����w�~<{��_��g����V�-w�������,�-y�js~?�a!�(�/`:ayX���s�w����A\2B���j��Ճ��G?�;7M�{Kx,�G�v�D�T���>��.�yCk�
�� ����)Q�1�`�T:���щ���)P�g��d����9
�����q|z�z��Y�7�x���P5��裳G�0#eK�"�(|�j�ZN�6Ѝ���{T������R6�Ȣ�/�w�=��̀:
�	O�J��^�s5�#
�Z��#;tr��\�AJm=p�L'*%�˕�'n��R�T--y�i0��g�&ت9�kdZ�$i�Ui^u",(e�if�/x�-e^>��V����G�S
�R�/ �itt�C����wz����HU1<�[OUpY�.�p�@V,>NN*��Y_V��W_�8�+�N�c��d纊�����[Ƭ��j��C.�T�8/s�od>p��N�jۙ<"Qd9|	��)p����w-���Ӂ�Ce�m��w���%�,�Hv8p�7�mHe���00>���{��;�l*%�[T= �!���g�dwH�Q	Eb(�#�/gd�f�۱0��ee�l�A�?�o,��H/�.;�{t���
��X+�#�\9�dW�I�OBlGmbT�;�zf���0��ѿ��i�urX.C����‚��Ey���5�mp~EqoXrf?�,�<�|8z�[�,k��;��d�X�U��ЬL�;M�n3Y�Ѵ.h�j�Cj/�i,h#�/�y�@[t2b��ʹ��4�K���[�����ğ~���Ak9����M�yG�
~�~�9�`��g���d�.NG�՚�.a�k�$s��5qF��9K�AJV�0�UR�)�����|F�>@�B�L�����o����q��@�]u/�����@w`�?�ih�c������?�~�
��
kɍ�kR2�u*�#=P����s,ic;�x�~4�e9�ݍ�pz|x����Zn�|�nye��pa����H}(�#�M�˙Ԗ�~ظ�Z�c�{��]�72W���yi%�MsC�s7y"G���c�Z�e&�n��d�8+ĕ�� �k~�"L�K�&�r#���úH���j�,��&�%#�˱�U@������
�k���5й^Pa�j���p�"�0���v�4���R]w��6��a�)��h�\�,�A��Q�o&�Kõ��q�2l���G�!�xzL��3�	L�;"�B*S�9��Ksi�foR]h������A��Mzz�RU�~#�i-��_�`*�tP��wN1*B
G6NIXB����^�3�?b`�r��8[
-�q텝*�0>|���'�c'�k�!���!9��C&2͞w��E%²�s��s��9Ҹw�haT
+"aq5O��]�y�C�]DՕ��kgG\�˜,Y���� w�I���F�O)�w����Y6����	�4���E�mo'�ާr�?
G}��x�O�'���Y����F�����׃����7o���AZ�>l_�f�F�����_Ύ���߽=��2_�|y�v��`u��&����c����/��anߺ?�w�N�I��w�+�Ń��vO���۝/��ߋy�fx���;��}>�LQu�kl�ߠk�K1wXc��N�K�o�ى
��#Ϸ��A�\0��s��9�G�C/��!�w�Ʃ$k�'�/���~�W=EJ^���dK^���J��p*�����r����@]v	�O$yM
�J<PK~u�|X��G�|�-M묃�^0t�I���P`wg���������au����Jѵ��T�5�c���:�
���fh���5�H���Ɇ��$��)�.�wco#0ȳUKn�S
n�6�U����͖��xb֘xi�tЉ�y˻K�s4C2Zjr�)ch5��>6���jP����Tҩ�?S�O�V���_��)��Gy�3=ī�4jő�i�R�0����Xc嘼�t��m��ȧ'��}�kR�[��r��aV\
�gx-���aR �E����ti�s1��
�6;���A�i۽��\�_0�_�’��Q���ޘM�u1��d0��d��u9p8���f�?@�@;A��</���l��32���A��m����@gU:!�I>=�|�?�ԧ�s���Bp!�������td �#�MU��l�OAHzV�}�
�A��ɨچ�a܊�(u:��;oK�3�Y!)�Y� ���8���̂/��}��4�L��GnW�<PehՆ��d?牲pO�	��3�
�`Q�"ёlh�35q-�W���m(�0ʰu焨�偰����$T�Ɔ�C
A�n��;�%KDa���
$46con11�V�3��e������n�,B\z��}�3���@���d�rC�	�x���B�NWO�+���Yy��台f{{���؎T���$6�
�(�A)�ש����&Q��O�WU�t�&���+�n�����grR���[���(�Z#${>8�dk#c�;������\���}VG�5m�N
�2�#g�`G��G��
��nE
�G8�(��dWB��n�l��5��?!�0��)�葦�6�*�\_��b����vi�%�'�\�U.�KT�������D�mjn�V7�������׃)��d�ط��3�$X��s
<SZ�o���1h��7�P�/����U!7�*Wy1�,�Vks�{K��1Mj�*IR!��b}[E��^�8ߦ��
�n4L�"�ƖxY�J#v�v
_y�p��(��ȟ���%)��&�J���,L^M�7�Ȇ
˩��7��V�hl��
��O[:nv�q&_�k���~�����X�e*0��r�t�{�yyw����U&��/�:��U�nFr�]BUU�W���Qz/{�GT����Q�B�e�ɅM5ʃgb~Vw����>���m�Ç�	�7/oA���f����p\zs伹%�Dߧ�6��mX5���~����з^��d�)?��iqE5����Oq���J�/�7��6a�2Ƞ�afS;1��
3��G$���Y���|&�բ+`4���M]&��Hh���v������N��`��@cPNy��-�]Ѣ$�y�œ,"3{��#\|���r�N?�F��v�y�Y�N/�2�}���ꕶw��vE��݌�z,qj��|b�J�c8W��J}&�]]����m�g/D]�jt� :�;�����
p9BP,	����,?�i�)�q�s�D�Mқz=�N�NECg�sc�Q�?�cz��S�$V�H��'
%�-L�c�JO�9���uM�c��2�&<�JS�x�̡	o��e}��k-��| _s��b��%���̼�UQ�!u]�Y(�S���Gƾ,T%A�-�>`��M�o�;�d�t��x��[V�3��w�}u"��}z%�V��ɫ����3y�Gp<�_�^m�.6�w����5��[s��������B��6b�5�B���|咱�𨞚����F�H�d�̺l����\�(�zp1��>
%�a۩�(�Ga�d���i�,��7�g ��x=%�Ւ6NI�}�O'2�B�a�0��+��#���6af��Ok�S�L���m2݉͠p)!��Y��PG`ԣB��z�g���=��dQ�:n�I�Ofw���Ǎ���)Zfy���
Gl�$�f���pl���bc�ibL�gs�z�c��·�"�b��%�溕�����&��жU�S,^�d��I_�i�Ȩ^�w�Z֭���ѱ�B���U܉8���չ3�q���"�w�A�1
;UN�6+iD���I����k��Fxy1m\�S#�C}%?6kj�ZA���݉q;�Re#բa��kx᤹�\�%�d���)���A����z�q$

�?��m>E;4�ܜ���ո��N�e������*mnگ��6<<�@�&�Q�a�4w�W�
x�}���)iDr��ͳyV\�HVQ�W�	�
�Z+��t|q�%}����3�%[���{������~z�Ƴ�od�5`G�KƯ#���=!%.�"^ɒT�~�ai����Cw+\�$�����h��(�I[��[���d�-��#�F|�J���	��\x�j?����t��!��H%U�P_���aIkpC�8$ȣTXJm� #���:�@c.��4��Ծ��	��+Q�=�N��f�����4�5�
�~^�)1HD�\ߨQLc2��7�d�Q"���g���%lP+?HLd��A<e/j���������G؏8��������.N�����3
CXY��65�i9����7F�P�m�\l&��1w��J䣨��h�+���F1�6*%�6z��L�R`#�.~��!r��v_��'�(���ß�rL5��\���w���t�'[$1`�-�QpLP,# �!�h(,$�%e5ὄؤ�5�%n��si,�v�TX���V��&��3�� N-�F¾�lW���x@��?ٔ=۱K��9�:7I<�_@�-&n�|�գ���lZ#"U��MŦ�z�JF�s`��^[�I����-�䱛n/~��d6�J�u�2�y����D^Zi\��3B����2_}�mw����f*%�@��u�0Z�p�j��q�,:�������OGp��~�Q׫�Bs~UN�#@"��6�九��/�GҞ�lT0���"i��:{[E�n��i��*��A��';�����h;�ƋT�:Đ�l�C�Ҩkꑑ5�rg���OX����>���,�����:e
�Z��QB>f��I�#��5Ǜ�f2��w�s_'��\o��n����G�{�r|7�8��?B)�����h�!"�n����
&�I������7�p,bX�f����"%�����.�'2U�T�d�`���'��6}E�O�h���zX��J�nL��r�^ ��s�U�;�q�A��20
���P�]�'���ßRM(��&3ޘ�1�l��kzo�YZ�������>\��'*��$0[Hވi|"Wa���^��c
�Ma|	^T��'���b%@��Բj�|.�w�hm
Q�@>���/J�����&��m��gn���
������5�<�M40:���f�xJ;�aO*�@H��Z��N��T�Mn��5h��Z� <�z"��

")2Z9#L9}��pM�gDm��t��x&�˝�є궣*��i2**�	�ͺ����ܫ��l<�T�ȿ�����F⦟���6��T��	�Y�z��J�)�������ѐ22mM�s���)���ݧ��ޱ��b/y�k7�e���E���4,�=�8��6t�]O6����g�m�5+�H7��K3���Wڪ?��G��Z;1�=fllP�tg�
��hT�X7<�_�\YȞg�����c7�e�GT���XR)�!kc�l�����n׆!]e�M��Y�9d�lō��u��g*%��r1�?��9DG�M?�)����\*{5�}���S��U
��3
Yݘ���e��F�f��Y�Cx���l'�r�
�����:>������]�n�0~*
QZ��(�v�m�3TBLhp`�ݗ�ql��vB�n�$Nbǟ�L{� ���-E�`�?�Ȉd)B���H[P��m�C]-�þS�ue*^���!N�B#�[|����
=`�T���W���U���l؀���o�K�L��a<xe���<!�"Q��T���:X��j�߶��ȿ*63��F2���&:1V��R����z''L���}�`�n�L�2�J2��kT<l��q����cu|4�ߝ�U�1�Ī	wdq
�<]#�kt���!&�#/��P�6�+4
�Unl��D*��ᄝ�#NX�2.��v}|�ֱY��r��<p����n�Fg��}(����|V�G�zC�By9��4���g��M�Uq�b�?!>W3w�($9B��os�T�.}�ӆs�JB��T������ۢz�j@�WM�j$��-=��ځ2?�uA_r�~�����x���ͫ6����^�H�q�}N\AS���)z����z��Ca�H���^b����4��&�q���2J����W8�_+5��2��4�^�f�-jNB_7	��M!vAzQ$���t��Ͱ��i<Nކ�+����=ks۶���+d6uŊ�e��Jar�׍w�8;���dTZ�lMdQ#ʍ}m��=<AJ�ӝ�N'�8^�Yh犆��<�}e�߹�6d	B�H��8��O2v��<[�T�5���H��Y[u�/8ux��T�$���-aVb�����u�O��F�5�����I�ryQWX�i�46<g�io3��/A3��^����B���R�'��N�`�[�
=�|-��Fɫ�>i�:�P@�C��n�\�(����&]���#v0|`�p�+SYJނ�D`x�v}�����c��[��[G����y��Cux}Y���W@����m�F[���P��€G�l��h�ԇp�e�Z2#�2/��#��.a����%:L�绵F���H�w0���B���Z�Jƿ����οMl�Z��ר��S�A��ڛV��?�5�����
��,�Ke�cG[���H���\̱D��b�O�ړ=>�K��Q\��s��|QL@#A�	�{9^|�U"Z��ԓ����+��)��i�0�BC��o+9�zQj��&�
�(C��~LxC�*�+A���M	f�z%�U�H��͛)�n欂����u�W��G��H�(W�JSY�|O�u�PQ�4!�S��Z�P5��tM��ګ29	Fb�m�>��J��F��^���z���*hc�vR1��NU��Bv�A&�йr���>�Wz�G���"$�<�L斃N�C��h�^��0h�	���6/��MU`9Ҋ\:��kI��c��m�x��k<�a�%�uC��E|��4��o�#ž�r	�	_��%<pg��� �BHL_FK�oƎ�羋�X'<�?L�^{ׅf�LyUi{[��N���~^���v	j;��������������L�M��/-M��u�O���ٔ=�@�~\.�;��;�<]v��?�7�%_���S�e��S=�62(����:
��^y����m�0M�҉`4���+��kS�>�ly\CZ����l�*]��c=LK�65{���gVƨ0�u�u�"�r{��/y
,d����.���3Nw
r~uY$����޹h�u%�O+���A�=�z�>��
��4��R�SY#���rF��%�Xu��ꅴ��U�����E|��\"$$>�	^y͑('�e
z�!4�U�h�d)��X]s��~��q����\������~�fA�Ӹ2@���c��
A���ܫ|S�v����AM�Uu�����ʥ̊:��R�-�ܪ�(�[��e��bL<}���*��*IGU(�6�*j&̷t�B�{��2U���C��d��6��(���'�ȳ�y���1�^f�&T���k�a��q_3�86Y�z���Zs���C8����֥�q���1pS�Xd?�.�:͆RC��>oD��U/��f��r�V������<��nN�tt���6v�IΓ��zg�u]Y�7{Kl���m��p[�*�ƕ7�1�;�&�g�
���4��;#�ȳ5����w�FƖz�&�t�G*fz{{k�=���nj�ע��cl�(�Q�›a����:���^Yk�6��G�;��1D���h�a/��!a�'�f}�壿�,}�?�+�=m���
�cn�i̿|�1����ޝaR�#U�''��Iom�7at1�Eɕ�.ՙ 12z,X�d����\���4J�����Kh�0�H��5v�E�G��9~��v��_V�
�n��~:���ej�U��H��/W�2�*��*;��(T��X�=��Z�¶<D�0Yj~�o��:��r�l�y{J��B@Y�㲷�|�]v"r��49L��a|�Ti�$9e��K���"=w�P��U��`�3}%|��)��Ř��Qp�>+��bDx��k%i�2���\�xږV����e$�Z�4��ƖhD:�b$E��iHK�e*�\Ƹ�c�dM/�js�{T(� :*�L���{�)��+�q��DE�z�aL�Xt�zS��yj~ћ�72Q�-g�����(�š��������bM(X�n���u7��1�=}����R(g2�\��&c���nK�2�1�K��0��Nr�^zt���I��r��f2������05E�;:��#~�G�c�筺����@"x����/�;�t>M`��4?5o?�����O��n?��>�;gQ����]���Ŵ<��VA����Er��l�^���Q*�[��˷m��|���W��O���{�S�`�çέЯQ����v�e�jM̨���[-f�(��n�D��}�n��aK�o�¥������h���y+.
��D�
��Pp�m�V\����A��_�@��� �1T@na`��3�k�J����̬±I"7�޿iCZK������\�;'�\��'� Äf�����ڂ8��BX$	�Jxx2���R1��V����_:bt�����$BV�2=`8���"��ۃ��1̡�4D�^2�d:=�"����`7�ݠ4ɾ�(R��4� ҿtL_;�`�ks����
Mn'�2〳Mx��0Q�1��i�}�H_r
�DFv��0�9��A�y2N/Gi@�E:js�p���䁎
�/BC'��٬͡|C8�7f�lу���d�i&��x����m"���ԋ3X����*���Lf��1�x5����r9�Z�G�0�X�=�f*����:ل��8��V��g��l�j�p�h����av�H��:X
�mV!�0�Vb{L�\��W�m���h@9�W����sv������(j���rS~����Zc���>[��mh���K��Hް�����d	V�Þ/`s^\�i��4������+i�b��'��9n���L���u���s�#�Z��������O���
2�/ �����������*�	�4@O ��A�(̈́{��=�t6�1��i��l9���K	+쥑����nI�:�}��r�|c���Ă(���t2�'9g~=G��s��!�.��y��������ݤZ$4��$�+��XР�8����ԡ�ϟ)r����
:ś��rdJ1p�	R)�"[�mԭ	�ex�]>c�F!���l���Z�
�ӝx8�uv�p��$˹�	殂�N��t��}��!�
&�:���%�D��+t�!�
=N'p�
�١��sL�6ϓ|��/�<(�B
���-V�~��ӏQ†�w?w��i�n�0W���돉
�X��@��U��QǠ'�q�]8��)'T=,c�<ɌI0���j���$E\��JC'��]6�-����e�b�&�#�O�����	Ǡ&'�NMڋөNFuJ�m�+*͟8���D&�����+��4հ.2��P�!�ݦ�}��:v�.v9�/DQ
���v+���y��7�Y�̜$H�����hw�DZ#Qױ�֩m8�J���)`�.,9�k@�+�v?�&��D��nCr��,/�ڿnv	O�/M�hZl&2��6���Yo��<��2�#o/9K��+<~ 9�\������]�RQw.�iR)�va�.��8޳u�R_�������R����T�(�l3�}����"�5mR��U/�i��������C�������U�(s7@meyP)�!h�f�1��`XЫ�Z�^3��Һ�[�va�#ɟ��̮GqktC:д�E�>{� �]���!�ުe�pX�~�t`W/d�ڱw�Ұ�ox�����;Ё�<J���R�1�oo�Y2:�\�ov�=��~��0<�Ck	C�N�[����Qt�L�է)��e�H���~��3U[]�:������������,��ͨ��Ϗ�@ᐉ�`�7�x�]�j}C�Rm|�/��;���m�c�m�n[�_��C�P_�ϭOĨ6�����Ȃ�˫t�t����{���B��*����0�B��)��V�ko�%T�Y9��_�$~\P�S9��}�OT��ǯ�Y�Z�aU\K,�z3�4]j��Q��j�b�#�
�F�^X�ǫ�q�Yz��ad=5�zp��t	���f(XQċ$�\`���]C��?��D�DV���Gu��o����xQuՅ+����P߮Z:B��ܣlq���h��֭�'�.�\^0��ъ�C�X|��%l-�E/�����r	o%.>����d���2B��)|���l�k^���tx��?��)��\$�Ձ��7���:��v(E�i�Wud��=��{���Ԙz��}�M�]
Gw���s�j�$
J�G�7�:��/�/y�ɢ��MZ#ї�Z�N5�>�^��j�I(!��T�b�Y�j�.���7W�&�;�P�HP�UY�"�?>z�a�ד�5��b'U�).���G�j	f$��p�A�"!�;2K�C�X���ۆ�Z��
�"����x�-Ԭ��L�<�y�悑��kػ�ؾ�)��p\�^c�
��LU��b���d��ub�\�Um���"8����B2�qu�LQ�H0�]�y��5X�Ѕx���*y�����j�U��HF�B.c���P2���]�I�1���{�_�W�.�Y֖�+3���H�m\��x�"*Uek`��E��G|���e�h݊5v
�P�W%���۵�y����N�`e���1��G,����Z�l\Z<��LW5���?eF9qd'�ˋ�򚲚vI���52{Q�U�t5�Tw�1��
�	
�X�^M�k~X,��G��~V��%h�1��ޫ��6�e�7���4�6�����!���Y������wZ�ե`tܶ!�mx⢈�Ɏ�5xf��+�wX��WTi��.�[3���Ա\ �%Ҡ��tq�<u#,�L�vg���>*�57fu��E�#��j�ܮ%��/D)�,ìfԿ�c��`|I�l�A!
Á��<�r�&_���ݰ��]r�
����E�!��P�3ᖑr-ֲ5%��S���X�*b�De�l6���JH�TV:�$.J0�9ZG����߼1<���=��o��U���⭙x�ƋT����<B͞j��[�z飣�k��}�'Y��k�NO7
�
�մ���R�]egY�PE���j�������w0�f
���dʜ��f�"/Ie�4���}���́�v�#�γ��Ȁ�!#Y�Fal�x~c%b�q�ݍu!~&��'p��&�U���dΑ�ة��}�LO��^��PxP�(�%9]��3G1홝1��^��f�~�P�0��,��S���|�4�c3,3����N<�H���oo�Wh�,�źJ-W$���!�wÕ�F�R`�< �/n�=H(��f���&/�/b�%_�ɲ��3pH�yum�����r�n�/�`�)��}!z����P���G`��[fR��r���h�D�Sv�l6�l�N{o�(��RԎ|��sO;��t��$Tl���$!)�w��S)J�n�%����T�K��P�h#7.�MO��OC{p�\�ن�H8N$T���t#����-3��=�]̓Bl'/s7���d�>���	���_�|o}D�O.���"M��SSz=��X���j���t`_����V9TO�hr\LT�+��S��`�_9b
S��{�*��Y�ǎ�ӵ�
�,�P��-\pk�/�Q餷�b�^f�L��x@�S8�����Y�V�<�
P
����_����tQO�$p]��J�@��5��mVm�*U�/��n��*J�k��[�)��@�+Kĕ˲f�Um1X��F��׀q)�o�
v�`:�bKHZpE,�CZ��F��J:?�c��v���>14�"�xŵ��ZnU��օ��! r^^߇���[�f�{�L#�޶q�N%�"������߬��QT�.��Ik/h��C4k
�\�<#.,w��؎3�P��KBL�,�E
ߜ�g�s�)�-z��W*�J(��&W�4�[��Z�Ƶhw6���Z�l�^OF�ۑw#vXļD/����	�L���b�}�����''Go�9�Sq�.�ٸ���
��t����Qo�TJ�U'_W�k�=�i�F�NoӄG�cuW=1ۡ*��M�}?M�7�'+�UX�ʒsC���]��>���Gq�,O���0D���$�Q�� yFk�8�&D<J�u#�M��)2�G�K|�Å&m<;~�`y�jN�m$���強�3�F;g�ڼ<�L��7�_�=~�Y^-�[C�^�p􌑷�ݢfO7������J��"���
�Q	�����4���4�F����?H�����ɂC�(`��B4 �u��/�Yw�F2CI)Y�$��;��3������˷'Ա?�X"7�gC���R�]����A�l�`�6�e*RÇ��71��T9�1r3;����Ӎ��U�Bd|sG�I�������.��Q�*]kni/}�B�c��O��+�o\
UF�6M�sx����8�J�jtD��ռw�B"�z��"����V�!�E���i��B΀���_騦q�t��@>,3PZ�R�[9�A�F2�o��G�����ٵ\Y�y0�X��Y�Q�fN���(�68�:�b�/�P[�S^��j�H�X��4����-lx����:
�
�Φ�i2=b�H�qΚ!=|X��lqA��f��f���l�u�E�3�|�UN�L���Q˹��,����j��4��N��x�J�Ǽ�zSp�Sm
&��.y�):�g���*��N��ED߼/f��ڴ�b���7E����	_�b+O�����yz���3����}o�a����Oߡ���2�)%>z(��x�!ш_�i��ME��A�(�m��ڎ�`{SE-n�]�Z2��JS���m[C�0�	^ ����J����H���z�׌	��P���e���Vi��b[�B���RR�C^K�&�Iՠ}$��Nb9���_i��~��U9����[��N�pT�"[f�l�
vvԂ��S^S�t�ᔳ����S���b��ղ��'P�{�a:�i$��F�}ξ:��x�ݬ�E�z�j�8U�}JUy�8+�VP��/zpE��<]ă�T9\�_��󎟈�ə#඘�c��#��Ofo&�/�!OA#�;�5��Ϩ�@��Ҫ�-T�w��FP��z_pv��)�X�������va����$�1,�Z�ĂY6�����"��b�i��I����'"6%Ѓ����G���:�q�T���� �F�Ɋ��0��d�%(�\f���>'?L�=j����|�z��e��QLD�J��ͅ0l��}%9nh[�;v)����u˱�󌨨p]P2�`�Z���U�o����J����>L�&#.R�AU��ba�Ҹz�-8�����B���r��\�Z:6.5���]Ys�6�+
��f,*�ۑˤ9��4�L��$�*KT�Ʀd����{��8 (Q�d�'��[�c��b�����WoR�\�1h�B��uKa��n�x�}��QL\������3�ڪ�WV��k�HJ%�QU�+n�-8q�Bu#�_���,��I�m���O�
�;�9X"l�2�]�*���j����t؅�"��b��s�����˔�>��z����U��������{���@\�F3���B�TUo��D�^���&��!��{���CWQ����Nt�M'�V)�<�u��<Y�+�3��s(�S�],�c����&�!<��w�о��y�W�F�W7;OA-�o��v���D��!�\�ѹO�OC+)���E����]6r�uZlݔBދx\rQ`���,0򅨵N�F	�М�J���I��4��!�9*�wv![O�b/��g��
����J�z���,*��|	�͐}��k4d4x�i�YqV�:yi�1���^��ҎF��5�C�{�"�Ӝ����	iͶ�h�Z�Rt��ͧ+8����CھN�+X��`���FK��A;���E��O��V�@D�>@^h<%/֩(+H��9���6�٨��rUm������u�T���I��ЛSc�9����/�B�W�{�H!X����xƸ�,Y0Cl�’_����^_��(�����5պ���l�ќ��,���N#�WY�"�×/��x������]�Jz#-�!��_2�X��q5dֿ�;�_s4M~�0cd��4S_�+�"�ڙqnz�{��4T���i*��x�}r���o�!XbO�6�HT�cM5@n�+���3c[��.eH�87	"�<i]\
��<޷*�����&s�(d�z�$�^�|�w)��%v�ڮ��;�a��.@V �[�Ϗp�� }bUdkT˿�"0
�P[�y���ԥ��,S��ͩ�<ͳ���)�g4���x�M)���:��e=b΂?�L24��k�*�����v��~��Yqz��r�A���+�u�4��c�[t�ȥ���d̖�b���6�[)�'v���xG�vJLw�	��\�9c0ul�/M��4�� ���%2�/��*7[����(��	B�ЋY�݃�`%uG��.�F�h�������Zi�LH/���q��QǷ���"F5�a������5��](����v}���9}��W�*�D���NQ��,��x�O�
�yӎ�4:O�Ջ��t[bC���G��;��H�o�1�������%Vf���N��+E�,Ӌ%�u����TmrzQ�)m��\�����N3 �ʡ��z��~�K����Y4������#9�9Pg1��M�l~����2�RWN�=
)�:��ȿF3��#W�#��ϟ�����M»����0	�o����_�DK����I�@��&g��c��pon"�����3Und��0�����H�B4�.�|u�Rδ����&R�y6D�B|��%��t:�a�!]���!�:�vm��X�)"���1����P��q����Je��?�f��Wr����a��˼9-�I���)l���+��6�T~Q�`|�.'B%�e^"3�{c�Tj|&
+�9?*���x�}%,a�ì��R��K�1��Oӳ��#��[JOg�Q��,��"&�r�ⶃ�jھ�O��՜X%�aI��ʲN��
�]���>�NMԎ�2�W:��ݚ�]/�Gx|���'7�_EpN�o��U�?$���Mb3R����B/�X	���.}{u������<��ŭ.8�G��f#�c��K;p"��ݺ$���:��p{�4J '�q�E$��X�we�ޙEgW��Ytwe���e�[��
�I���v��!a;�5xtcΣo%�u9��:�88�<�%��Q�r��r�'�$>�4�mm�ڭ�C+�n�Z�vk��
uk�f����g(DU|3��]�9pcbU��U1w+����"\�FP��Q��^ULu{���%Uh���[�+@UK����]Ko�0��+��FJڅ�V,�p��m�n���F���gƎ_c��.�=U�c�y�xg���yrG.�9a��.^_�i$���F�"�#W�)�;���߄yv�n����ھW�>vE.��B��$�],��K�0������5_�ٺ���j&J��ᡧ�E&<�vm��\-�	r����+T�I��?yUg>B������<|o�D����_]1��0�C�t�Hhg�֌Ӡ�='��)jW4?(=;j@�s}?p��X��ht%m�k|�VFU�VЫ7`��І8�z��2���r�(7�k�Wx��'�ʊ�i�k�4�;����s�q�g�D1��ʢ�e
�~�T��s%g�ܼj�;5�yS,�d����@����NSe5Y��TY�u��M��/
��ѭ6�Vw��aV
/�9	(v��-�P̅K�� M�`�QԹq��\a����ߚz
4�k��;��¤�s��q8�}���>��Gd�o\��D0�JG߮V$D_Ҩ��
�<��]�t��
�zQآW7�$ғ���Џ7F�<�*
�#C7em�F��s
���B9�ep~���vϽ�E��|䑈�>��rzD%�5��K�w|,�c��C�a��7�bek��s�W؊�V2b]�Rp^�z�
��pX�5R���j@-D,�6%�uAU�oʗ�|_X�f�.F`��#�H����p9�K�a�b�O���K���<�G���Z<��F@�kZ��G���K�Z?2k��G�G�L��\Nz̑f��F�������� E�t]�>l7��?�j�
IM����#�}�4d`\�p�‘"�"!D��)�.��d�gKȗt�4o_6,H�p܅)���:{7d ���|s��R{Bsd�~x[\'$�_�U��ջ���_#���ȳ�{&��sݮU	�yx�%�(ɮI�g���3߈�'s��=�r�h{m�ϛ���f��Z��N��=��0,GEL��M�1	d�����3%�2�ц�X�`Muq֊��|�	�H�8��Z��<x���
ľ�϶̐��]��L%P������P����=�r7����8�r�$C)vΡL�dK�UŶ���rW*k$�$�R��b;2���ݓ�@�kH�N�~lR����h4�n4�/��Jd�������wb>��j�_������k��x��O�`[��SF-�A�Lv4Q�R�F;�bg^\�Z�����k(R���qj�+٭J���|����W����
a���Vr�
���K�(Fac��iœ���\|�!9�ї��HPY�W��l��.��A즪 ���[�Ax�Z�A�#�~ ��y�;�XN���D�R�mǩe�I0<�p�9�0mt�4x�W�ɞ�o���)�e3���n�o�./θ�6O���f7@�,o��i0�EJ�D�tf
�D��֒	���y��AT@����ϴw�����r6�U��\�?�6��s�SjHr�)C�B8������q�@��V�Ϭo1g�I�&nR���gyN|g�|�b[�����%�Ֆm���κ�t!�`5嫖F,�d7�}�-�Ǿ��t�����^��b���vGt6�$��dZ��ݡ$�n9ON��
���T�c���av#�8`��W���Z�U�[GT&o=a����`�O"�����=���DG��S]�S6�`�G>c_C'�a�P����
�`�nJ����v
�O
�����q���	gV4��� ���4�"E2D�ܚ�j�1���z$��JK�C0 �=S�x��b���g�|f���{���-�&A`�q9<�h{���LT 44�gA� R=��ض�tn�Nk�5��S&P���vf�?W?�gH��
�x�pW���?��3�Ȑd�K�Pg�$�F�cT��\Ip�
�f>P���$�2�g�{`�H���#��>�A�^���Ţ�NӞ��3QNk�G�7
Ag��9�/,B�bn�$LO2y��3�z��՛N���3�ܼd™?�^�03'@����kw3G�e�Ó�Z�hҼ�M(cI�MR���+��{k"��Lơw.
�܄�$c�qȟ>�7oĀ!�#��z� �7�e\"��?���tP�� N;�W$2{47�;���Q�ST����/�OT��;��ˏ8d�wxu�\��󴀎����4�	殲�<d&��|���Z�k�$�����r�^o�-(̡Ɖp�JK�j�����Y7t����E��g5b0���B���O���pv�#sQ���3�3ޓڮ�sёN�X����?ߨ��[/|����Y>V��R��^�(�Gj�Iqޝ�$���ʯ�$�C`bm>���oŴR���ou�� p�*�C��ͯ�-�-[���U���ԝ�2��I�1 �<fuP�}|��W]��WH�l�%�Gw�8��[O��W�yΒ�u���#�"���[g����6���M,䷄�J��k��!��0S
������ɯ�I�9}KDQ�)�p�,x,�a�X,�Ԫ��`rU�S5���K�P�����二x,�vR���>��"����rm�g_;2��ر9���y	�7*q���8o j�������h�6D �"X��O�ƭ���
ާ�QF�R^~ȥ�~�@+Oq�c�l?����@/d��%�����sk{-g����O��lt����;��;�ض��s�lY�
���gk0�
VHpr�XLOuںh����j#1_+����1�:��]��9��0�?l���q֜_�/�"4w�P�Ib~x-�����s�P�&J3G).��v�6�E-��@��<ljlƖ�m]�lr�v�"�5�)��y`@�r�:n�.ڄG‡h�(�1!I�jt�:�1�#�ϋ�(�
���LGZz6A����5��>�D��uS�gV��[�o��z}y���q����O۝�v��]�]o6�5��z��$V=�+/8��fQ�vօ��ѥ���Mb�w^^V��i��\;9�Ɯ)i	'�+�~v�.������O�e�:�
�g��H}ʡ9��[��=i��#9�A-��h֟-� &�"`�
.^(��ռ�+�~.{���W̐Xۀ��3Gs��e�Sx�ujW�����S]H���
�7�HIz���I����i��P�TT���`�ƛ=@�d�p�~&���u�F��+����������0s�p�T���?
݅P�8��o�8�TD9f|����N.S��Tڟ�>y�Ṣ�E�
P�M���
��yeOǙ^A.�^��Q�a3���z�}8f�0���w#�\��z���鴸*!��MՇ�ew1x;z���
k���1w�p�f�Y ��+�A��b��襅��M��vt�-`si�*�Fi�.&�Fp]{�d�lu:SB�r=��k�NY��gg�ܑQ�6�6����ï����J��RT����IX�#�g�!3~K1�i�	�mdQ���K�^g�t���5�^2��Dž��*n���#�U��n�$R:j8ܻ�;��T��Yd��ΚZ�l����3¸6�ٹ�g>)W6Mz�X,?��U���_�>�f����T��x%|��R�ޕ�+A�e+��7C>EP{J=j�k��ff��,��Y�l��i�^͸�����ug^:P'���{�R����<[:�,�L&����E�ڝ-A���zl��u7�zX�른�j��X�Ș�U�'vi�
m��aγnnM?Ѓ!���?86�؅�u�q+N���#��,�q̷��1i�<��E��c��W�����u-5���'���Q~r�i��B��O�jC�e��;�ۏ��?��-R���x����7��k>Lٌ&#Rl�Y��`
ᰪ��B؂>'�+��8	��,T;| FڦJK��΢�\EM�#}%YQXXh�G^}��U��N��@�Fk}�����ɚ��/�A[���[sO1�D��YoҥJ�
��O�����f5�?���L������Q�����p����4�o(�Q��(
K�O�o�1PX�����>�Nͺ�{��9��h8'�ϼ��o��d���ʄk�>kܶ�1�K`{x�S����2X޵�����(DZ[�p��Me��Aݓ%�׵A��y�I��)�6�[30�Q"�&ј����oej-�~ֲ)i<�����)�Ś,���^B�	apb���W���&r4��MAFU��	a�BN��e�ؓ��
B?,�#5�;W��C�-BF΅v������/(5�G��5�
�
V'+���vaȢΏ��E�j�yӍj�!�G�5w�a1l�����v��drGgˬ!|��j;��G���B�5U�تGA ��4T-�yR[�0Y��ѹ�l���s�����7լl+tY`�gŅ0�fW��;����o��ңi9�eE�i5���#͜�#<��#8K���M��ь�t�7�	ݗ��-�v�c�Kh���P8��(�K]fC��M�`��o�D7.�)��D[�}�M�jVw��k������d�cQKf���g2FDU��#M|ڶW���(&��r�:7S��s�v N*c�3FS�ɵ+�y~]�t��5��~A�Z?�.b�V.]U�A>�@��X
��y�*�dԽ*u�\��FLa��;�
�i쳮T
���ڨ�L����ZQR��(��3t�tpA�r���1��99:z�|��R�����b/.N�Tdl^�
�/��0�CU�W3߁7�f���i�����}�ug���Ɂ=(��kt�Wc�
Be>j7�y�%�ű5s�*�:���4&�'R�v9������un�-������,8i�o^�U��G�Ꮙ2��j�Z:�,؇�m�+�]��VdJ��హY�~5�A��vlg�`�A*�bQP&g�����d���"H������h1�M`rf5H�")=)�H�Q���3��}S
��b�2b��b6~ه�?��+���>�~~s4]\�*�iQ|��zم����=(��b~���}�Z�y�fc�Ns�?�P�U����,n�jA�1�~�d�9_��@V\�w��o�S"�2��T�(1;��6P,�O�g��O�@����F�g*��[�.���[S�?��HͿ�}���׺���~w�o{�g+�� ��T9Eg,6%�4}P#���OD����
N����U�'6>����
(��:�X-�	��QN����{���5k���~9x��u��?W����U����tc
v��+bė�?)I��YY�^6�l�Km�ySO�$�}�R|��M�P�"_xL�Ҧ�t[���aIW^�K�����(Aw�7O��
�P��*"�:�T+vI��E�m+��J��!�=��jրq5�(	d!Lo��z�
�������a�Z�+����"��]
9~���C��>i򼔄0]7&ՂB]Ҁ�I��Gk+�Gv9B�,���7F��l���Y��63�VJ�,�~?{~t���w?�O^g����xX��(p/x/�^��k�9�?���m�>_�HW%�v{������@�zMDs=�
��w�z�E{��΁��h6Rw*%����,��Eo��ޜa��?vȓ��?j�aO�W���p
F�����
��h2ɡ�n��Pq���~��WB�	z���=�rV6vFƈ����(��b\��t��K1��Yq���{h��S��Y=.�_.�;99z����^77���n(��[��Z�`tm�ڹ;�!���9C8��3?��U�px����
����"��n����U��i�Bkձ�
:5��sS��o���\�KT/G�'�u���ܩ�?*�z��F��|�T�'f4',�Ȏ�P���#k���p*�:��T->�#�s'Wp�CČq�t��}�C��@����X鍶����]zc�D��h���>�0��A�)�g�E��P!��uP�i9���E9j���pi���!dz!=���V�"����g���k���;.:�_���)5��_��4r�<�gK\K ��U`��r���v������������?�v� � ��l��o��O�x���?�-b«a;Xf
h�<����͒�d��X���+U3_�ٶY���`�(+�ذ/Jv�����j�O�ƛ���	%қ�5�Dus��Z�†��t2?7�1zd��e
��[��l�P��_�����=+�����꭫�N���K�Z:o9��á�T�Ԉp�S����6 k,ؙ�>��b8t:>�-���^Z�ʀ�D�>*�J������?�Ee�]�W��$Q��_��y9��g=�QM�:���#�|��yUL6ͰpD0eD9!���~��Q���̥!��Z�_�:Z$
�h��ߦ��D�B9K�����[����1ѻIU�jz��$c�2|f��/Ix���kc	����UO�;W��Qç��;���Tz<��V�kv�7�l�IiӠi;{$p4���~���)�Da�j4������j����[�Q�K1?�n/���%�Ǎ�[9��#�ħ(b���9�#����,V�&�1���-����e��T�N��QPI-��JY�|�US[��F�R�s^q��T��d�b@���q�-`^*�LdX♖)���o$H�ߙlt��۶
O��,_^�����c�����7�)_�"[*���L)Q�t��z��R�G�Y�Q�gQ�$��k)9��QC��g��	��
Q�H����œ��F�	�	C#1'��J Ȧ��G�ţ���B��k�
��=��S�q���Z��yF�A"dG�C���sϋ�B��A�I�4t��&Rj���A�ҡ�����M��|X�ء���Y���|B��uRQjbv-�/4C�u
�
���v ���CK`3��@d���2Èbl�y
�!k$+�mu
	e9���ko"G�
�bu����$�攦�ȇ�I�V�	���D@ZE����cϬg<� ɗd��c��ck�X��6v�ĥB%�+��`�����Q�yk!k�<I��ω�R�E����F�
�ނ"a�����zR��q��`s?�_
l���A�p7���]�`X�Ϳ,S��j+7�o�^ksF�,5��4��!F����<�!�UQZ>���\.Ë8��P��Oa5�X�v5��1z��Z�Wp�m�dL��I;`�6�_jOIД����6���9��함��Y�(!������J�Ps�.�Q��:ZSe{^�Qz3i��,��i��>�V����g�b\�~�௱:�؝��hq�5I
���=�7�a*�
����B+WN���w���[vL5��iU{4��
#�ЀӦu۵�d#!Y�,T���:�0��7���`%:M,�3�{"��ׯ�w�^�s�"��9�����"���Q�[��R��g���1�Qt�F�F�6��|‡C�F�6=�g��O��j`
 4Z���
�v���[ߪ'eԀC��<#��D����z��Y��U��ퟌ٧m�[���
��r=��2�A猢�X5����ks����!�< H�I�{�ɥ?E�I�H .����Gw��`RMe��4�bk�jmM�FX�6�F�v�P��}�\���R��#�7u�zX�{þ�޶�j�[�G?�'�۬����߯i����`?��_�z��C"�-�'�6Sk�ȭ���ٱN��v�SIO��#�-�#�WO融����Y�=PX�=<�4-�S��E�ҘO��Xh�����t�s�����A)���=͔�m+ʁ�*�4����$�<�T9�ټ$�'��F�~`�êƆ�Pˏ�3@���%/����&��I�_�0h(��&�2Y�U/���xO��g��b�&�W�C���pN��~�n�]�8��pC44Z)uK���Ɋ�S���x��V-�!G�͓�Ԓg�i.�Ө��ri8Pl�R�S������4�����h�ABL���ZY�;S�+������BbhA��
�X�º%N�"̑t��O��5��@���O�͕nt�+��;I���1�E�y��g�z;�Z+�mo�a��Q;�VX�e
�i�n}��b����PFA�J+��1oQe�����З�o?e�ח�������
��|L;��l��p��C�L[_t�wq���:��ۑ��f��!��k湼���b2Li&޼ܗձ>6�z%&�CU �ͣ���w��D����4����?�Z�q���j�ӹ\,ov�f�6�f}���P;�޵Qs�����}��H!2����!"O�g9B�$��96f�
C��;ղ�E�u�XY�;9yG�˕Nۡ�S��Cm��n!��Ia"kk�㔓�ʛ��0e��b�q.B_�*Ҍ�)��YNhp�ĮVm��Vܲ_$�;f��eW�|�6=�_���?(�@i)��|�����#��=	��D7��"�7���8V[dž/B�Oj�����}Pid�}?��|�;
�@��Sx�M�69�$��$��>���qw]]�M�#�np�
&�
['e�� ��
K���3}
{�ٖ�{��лC�A��x�ܮ�F^���\����VF����)��%j�%%�$�>��N���D0�U���
[�H1g6|��v����R�7��o��w��|p�G�崹�:N4�BM��Pp���kY��/�Km���P�Q��?��*f}�nd�P!dU� �����Kk�@��e�iC{���J�5Ť�b�HL��K���̾����zR3ٍ3�q2;�!nЙy��_�JgH��_�<�h�u�xH�s���;ׂ�[���c�=�5�]#�?9��3�-q}����?C^\�7�/~[���9�I��()�*=ŧ,y���4'[r:gE���s�<8���|��k �(6%������h���{�`�ew�q܏_€��G'yp�O�<�/P�0˪U!����C���g[�>�\v�_��pc��x?�0<��N6�@U���>J��P���E,�t	��Ħ��<c[�HC���ɩa{�fp����|U�Z�B�ml8_�F�S-�0�A��0N*� �揗��k���<���CfX@�L��[+���j��	>d�F�8r*�}0:'�J�%��J�4��x��N�+��:]�`�(\}H��	�:B�w-ĺ��Ъw�u��&�
�>���%4_�2M�!p�P��[3��b̍�Q�%"���{��BS��=i�X:A����
*�}^,����!	�^3ԋ�$���#��������ѱ�zk�҈G�b�
�{��K3���N�0�_��0����
lH�'4Mk������Ď��I�1nK�5?u�q����z�҃(�K���I���*s�LsPsIa}zX,V�˹�qZT�c�#��Aޕ�<��:�B�:^��g���;戙`sYaf���� �Z�����T����$�Y
5��(0'e#���l9���?#���pK1��j1KI�QN���yFlb�}+{2ٲ�E�Cm��9(�zU�ϫ~���ވoU�c� .Kp�l [8�B�	‰�.U�y��?xJ�j��{źq�o��/0�vZ�b���M����;;�R���5�h�^�t}��Lv�Z���_�^|]��ٰ���L�w �`�I��[��5%��,�G
&	!��TU�b
ިb^�I!�yE�K�11�������G�S�xf{�d���ET�����p �]6�v�g�v�����H�0,0�j���o|[1ke�˥��6�E�@����Y�讼����F%��(�t5�,���]ua�>���YںZ�_b�
�r\Q�\�
����y�f�N�V�NC��:��f�_=N��w�sM�}��5�C��1��ۊ�_// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview
 * This is a component extension that implements a text-to-speech (TTS)
 * engine powered by Google's speech synthesis API.
 *
 * This is an "event page", so it's not loaded when the API isn't being used,
 * and doesn't waste resources. When a web page or web app makes a speech
 * request and the parameters match one of the voices in this extension's
 * manifest, it makes a request to Google's API using Chrome's private key
 * and plays the resulting speech using HTML5 audio.
 */

/**
 * The main class for this extension. Adds listeners to
 * chrome.ttsEngine.onSpeak and chrome.ttsEngine.onStop and implements
 * them using Google's speech synthesis API.
 * @constructor
 */
function TtsExtension() {}

TtsExtension.prototype = {
  /**
   * The url prefix of the speech server, including static query
   * parameters that don't change.
   * @type {string}
   * @const
   * @private
   */
  SPEECH_SERVER_URL_: 'https://www.google.com/speech-api/v2/synthesize?' +
      'enc=mpeg&client=chromium',

  /**
   * A mapping from language and gender to voice name, hardcoded for now
   * until the speech synthesis server capabilities response provides this.
   * The key of this map is of the form '<lang>-<gender>'.
   * @type {Object<string>}
   * @private
   */
  LANG_AND_GENDER_TO_VOICE_NAME_: {
    'en-gb-male': 'rjs',
    'en-gb-female': 'fis',
  },

  /**
   * The arguments passed to the onSpeak event handler for the utterance
   * that's currently being spoken. Should be null when no object is
   * pending.
   *
   * @type {?{utterance: string, options: Object, callback: Function}}
   * @private
   */
  currentUtterance_: null,

  /**
   * The HTML5 audio element we use for playing the sound served by the
   * speech server.
   * @type {HTMLAudioElement}
   * @private
   */
  audioElement_: null,

  /**
   * A mapping from voice name to language and gender, derived from the
   * manifest file.  This is used in case the speech synthesis request
   * specifies a voice name but doesn't specify a language code or gender.
   * @type {Object<{lang: string, gender: string}>}
   * @private
   */
  voiceNameToLangAndGender_: {},

  /**
   * This is the main function called to initialize this extension.
   * Initializes data structures and adds event listeners.
   */
  init: function() {
    // Get voices from manifest.
    const voices = chrome.app.getDetails().tts_engine.voices;
    for (let i = 0; i < voices.length; i++) {
      this.voiceNameToLangAndGender_[voices[i].voice_name] = {
        lang: voices[i].lang,
        gender: voices[i].gender
      };
    }

    // Initialize the audio element and event listeners on it.
    this.audioElement_ = document.createElement('audio');
    document.body.appendChild(this.audioElement_);
    this.audioElement_.addEventListener(
        'ended', this.onStop_.bind(this), false);
    this.audioElement_.addEventListener(
        'canplaythrough', this.onStart_.bind(this), false);

    // Install event listeners for the ttsEngine API.
    chrome.ttsEngine.onSpeak.addListener(this.onSpeak_.bind(this));
    chrome.ttsEngine.onStop.addListener(this.onStop_.bind(this));
    chrome.ttsEngine.onPause.addListener(this.onPause_.bind(this));
    chrome.ttsEngine.onResume.addListener(this.onResume_.bind(this));
  },

  /**
   * Handler for the chrome.ttsEngine.onSpeak interface.
   * Gets Chrome's Google API key and then uses it to generate a request
   * url for the requested speech utterance. Sets that url as the source
   * of the HTML5 audio element.
   * @param {string} utterance The text to be spoken.
   * @param {Object} options Options to control the speech, as defined
   *     in the Chrome ttsEngine extension API.
   * @private
   */
  onSpeak_: function(utterance, options, callback) {
    // Truncate the utterance if it's too long. Both Chrome's tts
    // extension api and the web speech api specify 32k as the
    // maximum limit for an utterance.
    if (utterance.length > 32768) {
      utterance = utterance.substr(0, 32768);
    }

    try {
      // First, stop any pending audio.
      this.onStop_();

      this.currentUtterance_ = {
        utterance: utterance,
        options: options,
        callback: callback
      };

      let lang = options.lang;
      let gender = options.gender;
      if (options.voiceName) {
        lang = this.voiceNameToLangAndGender_[options.voiceName].lang;
        gender = this.voiceNameToLangAndGender_[options.voiceName].gender;
      }

      if (!lang) {
        lang = navigator.language;
      }

      // Look up the specific voice name for this language and gender.
      // If it's not in the map, it doesn't matter - the language will
      // be used directly. This is only used for languages where more
      // than one gender is actually available.
      const key = lang.toLowerCase() + '-' + gender;
      const voiceName = this.LANG_AND_GENDER_TO_VOICE_NAME_[key];

      let url = this.SPEECH_SERVER_URL_;
      chrome.systemPrivate.getApiKey(
          (function(key) {
            url += '&key=' + key;
            url += '&text=' + encodeURIComponent(utterance);
            url += '&lang=' + lang.toLowerCase();

            if (voiceName) {
              url += '&name=' + voiceName;
            }

            if (options.rate) {
              // Input rate is between 0.1 and 10.0 with a default of 1.0.
              // Output speed is between 0.0 and 1.0 with a default of 0.5.
              url += '&speed=' + (options.rate / 2.0);
            }

            if (options.pitch) {
              // Input pitch is between 0.0 and 2.0 with a default of 1.0.
              // Output pitch is between 0.0 and 1.0 with a default of 0.5.
              url += '&pitch=' + (options.pitch / 2.0);
            }

            // This begins loading the audio but does not play it.
            // When enough of the audio has loaded to begin playback,
            // the 'canplaythrough' handler will call this.onStart_,
            // which sends a start event to the ttsEngine callback and
            // then begins playing audio.
            this.audioElement_.src = url;
          }).bind(this));
    } catch (err) {
      console.error(String(err));
      callback({'type': 'error', 'errorMessage': String(err)});
      this.currentUtterance_ = null;
    }
  },

  /**
   * Handler for the chrome.ttsEngine.onStop interface.
   * Called either when the ttsEngine API requests us to stop, or when
   * we reach the end of the audio stream. Pause the audio element to
   * silence it, and send a callback to the ttsEngine API to let it know
   * that we've completed. Note that the ttsEngine API manages callback
   * messages and will automatically replace the 'end' event with a
   * more specific callback like 'interrupted' when sending it to the
   * TTS client.
   * @private
   */
  onStop_: function() {
    if (this.currentUtterance_) {
      this.audioElement_.pause();
      this.currentUtterance_.callback({
        'type': 'end',
        'charIndex': this.currentUtterance_.utterance.length
      });
    }
    this.currentUtterance_ = null;
  },

  /**
   * Handler for the canplaythrough event on the audio element.
   * Called when the audio element has buffered enough audio to begin
   * playback. Send the 'start' event to the ttsEngine callback and
   * then begin playing the audio element.
   * @private
   */
  onStart_: function() {
    if (this.currentUtterance_) {
      if (this.currentUtterance_.options.volume !== undefined) {
        // Both APIs use the same range for volume, between 0.0 and 1.0.
        this.audioElement_.volume = this.currentUtterance_.options.volume;
      }
      this.audioElement_.play();
      this.currentUtterance_.callback({'type': 'start', 'charIndex': 0});
    }
  },

  /**
   * Handler for the chrome.ttsEngine.onPause interface.
   * Pauses audio if we're in the middle of an utterance.
   * @private
   */
  onPause_: function() {
    if (this.currentUtterance_) {
      this.audioElement_.pause();
    }
  },

  /**
   * Handler for the chrome.ttsEngine.onPause interface.
   * Resumes audio if we're in the middle of an utterance.
   * @private
   */
  onResume_: function() {
    if (this.currentUtterance_) {
      this.audioElement_.play();
    }
  }

};

(new TtsExtension()).init();
<!doctype html>
<html dir="$i18n{textdirection}" lang="$i18n{language}" class="loading"
    $i18n{a11yenhanced}>
<head>
  <meta charset="utf8">
  <base href="chrome://bookmarks">
  <title>$i18n{title}</title>
  <link rel="stylesheet" href="chrome://resources/css/md_colors.css">
  <style>
    html {
      /* Remove 300ms delay for 'click' event, when using touch interface. */
      touch-action: manipulation;
    }

    html,
    body {
      background: var(--md-background-color);
      height: 100%;
      margin: 0;
      overflow: hidden;
    }

    html.loading::before {
      background-color: var(--md-toolbar-color);
      border-bottom: var(--md-toolbar-border);
      box-sizing: border-box;
      content: '';
      display: block;
      height: var(--md-toolbar-height);
    }
  </style>
</head>
<body>
  <bookmarks-app></bookmarks-app>
  <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
  <script type="module" src="bookmarks.js"></script>
</body>
</html>
<!doctype html>
<html i18n-values="dir:textdirection;lang:language">
  <head>
    <script src="chrome://resources/js/i18n_template_no_process.js"></script>
  </head>
  <body>
    <div id="bluetooth-logs-info-container">
      <span i18n-content="bluetoothLogsMessage"></span>
    </div>
  </body>
<html>

<!doctype html>
<html i18n-values="dir:textdirection;lang:language">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="chrome://resources/css/apps/topbutton_bar.css"></link>
<style>/* Copyright 2019 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

html {
  height: 100%;
}

body {
  background-color: #fff;
  display: flex;
  flex-direction: column;
  height: 100%;
  margin: 0;
  overflow: auto;
  padding: 0;
  width: 100%;
}

#assistant-title-bar {
  -webkit-app-region: drag;
  align-items: center;
  background-color: #fff;
  display: flex;
  min-height: 20px;
}

#assistant-close-button {
  position: absolute;
  right: 0;
}

html[dir='rtl'] #assistant-close-button {
  left: 0;
  right: auto;
}

#assistant-logs-info-container {
  line-height: 20px;
  margin-bottom: 20px;
  margin-inline-end: 20px;
  margin-inline-start: 20px;
  margin-top: 20px;
  text-align: justify;
  text-justify: inter-word;
}
</style>

<script src="chrome://resources/js/i18n_template_no_process.js"></script>
<script src="chrome://resources/js/util.js"></script>
<script src="../js/assistant_logs_info.js"></script>
</head>
<body>
  <div id="assistant-title-bar" class="title-bar">
    <span class="topbutton-bar">
      <button class="close-button"
              id="assistant-close-button" tabindex="-1"
              i18n-values="aria-label:closeBtnLabel">
      </button>
    </span>
  </div>
  <div id="assistant-logs-info-container">
  <span i18n-content="assistantLogsMessage"></span>
  </div>
</body>
</html>
<!doctype html>
<html i18n-values="dir:textdirection;lang:language">
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
<link rel="stylesheet" href="chrome://resources/css/apps/common.css"></link>
<link rel="stylesheet" href="chrome://resources/css/apps/topbutton_bar.css">
</link>
<style>/* Copyright 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */


html {
  height: 100%;
}

body {
  background-color: #fbfbfb;
  display: flex;
  flex-direction: column;
  height: 100%;
  margin: 0;
  overflow: auto;
  padding: 0;
  width: 100%;
}

[hidden] {
  display: none !important;
}

.title-bar {
  -webkit-align-items: center;
  -webkit-app-region: drag;
  background-color: #fff;
  box-shadow: 0 1px #d0d0d0;
  color: rgb(80, 80, 82);
  display: -webkit-flex;
  font-size: 15px;
  min-height: 48px;
}

.title-bar #page-title {
  -webkit-flex: 1 1 auto;
  margin-inline-start: 20px;
}

.title-bar .button-bar {
  -webkit-flex: 0 1 auto;
}

.content {
  color: #444;
  flex-grow: 1;
  font-size: 12px;
  margin: 20px;
}

.content #description-text {
  border-color: #c8c8c8;
  box-sizing: border-box;
  height: 120px;
  line-height: 18px;
  padding: 10px;
  resize: none;
  width: 100%;
}

.content #additional-info-label {
  margin-inline-start: 10px;
}

.content .text-field-container {
  -webkit-align-items: center;
  display: -webkit-flex;
  height: 29px;
  margin-top: 10px;
  padding-inline-start: 10px;
}

.content .text-field-container > label {
  -webkit-flex: 0 1 auto;
  width: 100px;
}

.content .text-field-container > select {
  border: 1px solid #c8c8c8;
  color: #585858;
  flex: 1 1 auto;
  height: 100%;
  padding-inline-start: 5px;
}

.content .text-field-container > input[type=text] {
  -webkit-flex: 1 1 auto;
  border: 1px solid;
  border-color: #c8c8c8;
  color: #585858;
  height: 100%;
  padding-inline-start: 5px;
}

.content .text-field-container > input[type=checkbox] {
  margin-inline-end: 9px;
}

.content .checkbox-field-container {
  -webkit-align-items: center;
  display: -webkit-flex;
  height: 29px;
}

#assistant-checkbox-container {
  align-items: flex-start;
  line-height: 20px;
  margin-bottom: 20px;
  margin-top: 7px;
  vertical-align: text-top;
}

#screenshot-container {
  margin-top: 10px;
}

.content #screenshot-image {
  display: block;
  height: 60px;
  margin-inline-end: 25px;
  margin-top: 40px;
  transition: all 250ms ease;
}

.content #screenshot-image:hover {
  height: 125px;
  margin-inline-end: 0;
  margin-top: 80px;
  z-index: 1;
}

.content #screenshot-image.wide-screen {
  height: auto;
  width: 100px;
}

.content #screenshot-image.wide-screen:hover {
  height: auto;
  width: 200px;
}

.content #screenshot-chk-label {
  flex: auto;
}

.content #sys-info-container {
  margin-inline-end: 130px;
}

.content #privacy-note {
  font-size: 12px;
  line-height: 20px;
  margin-bottom: 0;
  margin-top: 20px;
  text-align: justify;
  text-justify: inter-word;
}

.content .buttons-pane {
  bottom: 20px;
  display: -webkit-flex;
  justify-content: flex-end;
  left: 20px;
  position: absolute;
  right: 20px;
}

.content .top-buttons {
  position: absolute;
}

#bottom-buttons-container {
  margin: 0;
}

.content .bottom-buttons {
  margin-bottom: 20px;
  margin-inline-end: 20px;
  margin-inline-start: 20px;
  margin-top: 0;
  position: static;
}

.content .remove-file-button {
  background-color: transparent;
  background-image: -webkit-image-set(
      url(chrome://resources/images/apps/button_butter_bar_close.png) 1x,
      url(chrome://resources/images/2x/apps/button_butter_bar_close.png) 2x);
  background-position: 50% 80%;
  background-repeat: no-repeat;
  border: none;
  height: 16px;
  margin-inline-start: 5px;
  pointer-events: auto;
  width: 16px;
}

.content .remove-file-button:hover {
  background-image: -webkit-image-set(
      url(chrome://resources/images/apps/button_butter_bar_close_hover.png) 1x,
      url(chrome://resources/images/2x/apps/button_butter_bar_close_hover.png) 2x);
}

.content .remove-file-button:active {
  background-image: -webkit-image-set(
      url(chrome://resources/images/apps/button_butter_bar_close_pressed.png) 1x,
      url(chrome://resources/images/2x/apps/button_butter_bar_close_pressed.png) 2x);
}

.content #attach-file-note {
  margin-bottom: 10px;
  margin-inline-start: 112px;
  margin-top: 10px;
}

.content .attach-file-notification {
  color: rgb(204, 0, 0);
  font-weight: bold;
}

button.white-button {
  color: #000;
  margin-inline-end: 10px;
}

button.blue-button {
  color: #fff;
  text-shadow: 1px sharp drop shadow rgb(45, 106, 218);
}
</style>

<script src="chrome://resources/js/load_time_data.js"></script>
<script src="chrome://resources/js/i18n_template_no_process.js"></script>
<script src="chrome://resources/js/util.js"></script>
<script src="../js/feedback_util.js"></script>
<script src="../js/take_screenshot.js"></script>
<script src="../js/topbar_handlers.js"></script>
<script src="../js/feedback.js"></script>
</head>
<body>
  <div id="title-bar" class="title-bar">
    <span id="page-title" i18n-content="page-title"></span>
    <span class="topbutton-bar">
      <button class="minimize-button" id="minimize-button" tabindex="-1"
              i18n-values="aria-label:minimizeBtnLabel">
      </button>
      <button class="close-button" id="close-button" tabindex="-1"
              i18n-values="aria-label:closeBtnLabel">
      </button>
    </span>
  </div>
  <div id="content-pane" class="content">
    <textarea id="description-text" aria-labelledby="page-title"></textarea>
    <div>
      <p id="additional-info-label" i18n-content="additionalInfo"><p>
    </div>
    <div id="page-url" class="text-field-container">
      <label id="page-url-label" i18n-content="pageUrl"></label>
      <input id="page-url-text" aria-labelledby="page-url-label" type="text">
    </div>
    <!-- User e-mail -->
    <div id="user-email" class="text-field-container" hidden>
      <label id="user-email-label" i18n-content="userEmail"></label>
      <select id="user-email-drop-down" aria-labelledby="user-email-label">
        <option id="anonymous-user-option" value="anonymous_user"
                i18n-content="anonymousUser"></option>
      </select>
    </div>
    <!-- Attach a file -->
    <div id="attach-file-container" class="text-field-container">
      <label id="attach-file-label" i18n-content="attachFileLabel"></label>
      <input id="attach-file" type="file" aria-labelledby="attach-file-label"
           aria-describedby="attach-file-note">
      <div id="custom-file-container" hidden>
        <label id="attached-filename-text"></label>
        <button id="remove-attached-file" class="remove-file-button"></button>
      </div>
      <div id="attach-error" class="attach-file-notification"
          role="alert" i18n-content="attachFileToBig" hidden></div>
    </div>
    <div id="attach-file-note" i18n-content="attachFileNote"
      aria-hidden="true"></div>
    <!-- Screenshot -->
    <div id="screenshot-container" class="checkbox-field-container">
      <input id="screenshot-checkbox" type="checkbox"
             aria-labelledby="screenshot-chk-label">
      <label id="screenshot-chk-label" i18n-content="screenshot"></label>
      <img id="screenshot-image" i18n-values="aria-label:screenshotA11y">
    </div>
    <!-- System Information -->
    <div id="sys-info-container" class="checkbox-field-container">
      <input id="sys-info-checkbox" type="checkbox"
             aria-labelledby="sys-info-label" checked>
      <label id="sys-info-label" i18n-values=".innerHTML:sysInfo"></label>
    </div>

    <!-- Privacy note -->
    <div id="privacy-note" i18n-values=".innerHTML:privacyNote"></div>
  </div>
  <!-- Buttons -->
  <div id="bottom-buttons-container" class="content">
    <div class="buttons-pane bottom-buttons">
      <button id="cancel-button" type="submit"
          class="white-button" i18n-content="cancel">
      </button>
      <button id="send-report-button" type="submit"
          class="blue-button" i18n-content="sendReport">
      </button>
    </div>
  </div>
</body>
</html>
<!doctype html>
<html i18n-values="dir:textdirection;lang:language">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title i18n-content="sysinfoPageTitle"></title>
    <link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
    <link rel="stylesheet" href="chrome://resources/css/spinner.css">
    <style>/* Copyright 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

#anchor {
  display: none;
}

body {
  font-size: 84%;
  margin: 0;
  min-width: 45em;
  padding: 0.75em;
}

.global-button {
  margin: 1px 3px 0 3px;
}

h1,
h2 {
  margin: 0;
}

h1 {
  color: rgb(74, 142, 230);
  font-size: 110%;
  font-weight: bold;
  padding: 0;
}

h2 {
  color: rgb(58, 117, 189);
  display: inline-block;
  font-size: 110%;
  font-weight: normal;
  padding-inline-end: 1em;
  padding-inline-start: 0;
}

#header {
  background: rgb(60, 111, 235);
  background-size: 100%;
  border: 1px solid rgb(58, 117, 189);
  border-radius: 6px;
  color: white;
  margin-bottom: 0.75em;
  overflow: hidden;
  padding: 0.5em 0;
  position: relative;
  text-shadow: 0 0 2px black;
}

html[dir='rtl'] #header {
  padding: 0.6em 0 0.75em 1em;
}

#header h1 {
  color: white;
  display: inline;
}

div#header h1::before {
  /* grit doesn't flatten -webkit-mask, so define the properties separately
  * for now. */
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDQ4IDQ4Ij48cGF0aCBkPSJNMCAwaDQ4djQ4SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTM4Ljg2IDI1Ljk1Yy4wOC0uNjQuMTQtMS4yOS4xNC0xLjk1cy0uMDYtMS4zMS0uMTQtMS45NWw0LjIzLTMuMzFjLjM4LS4zLjQ5LS44NC4yNC0xLjI4bC00LTYuOTNjLS4yNS0uNDMtLjc3LS42MS0xLjIyLS40M2wtNC45OCAyLjAxYy0xLjAzLS43OS0yLjE2LTEuNDYtMy4zOC0xLjk3TDI5IDQuODRjLS4wOS0uNDctLjUtLjg0LTEtLjg0aC04Yy0uNSAwLS45MS4zNy0uOTkuODRsLS43NSA1LjNhMTQuOCAxNC44IDAgMCAwLTMuMzggMS45N0w5LjkgMTAuMWExIDEgMCAwIDAtMS4yMi40M2wtNCA2LjkzYy0uMjUuNDMtLjE0Ljk3LjI0IDEuMjhsNC4yMiAzLjMxQzkuMDYgMjIuNjkgOSAyMy4zNCA5IDI0cy4wNiAxLjMxLjE0IDEuOTVsLTQuMjIgMy4zMWMtLjM4LjMtLjQ5Ljg0LS4yNCAxLjI4bDQgNi45M2MuMjUuNDMuNzcuNjEgMS4yMi40M2w0Ljk4LTIuMDFjMS4wMy43OSAyLjE2IDEuNDYgMy4zOCAxLjk3bC43NSA1LjNjLjA4LjQ3LjQ5Ljg0Ljk5Ljg0aDhjLjUgMCAuOTEtLjM3Ljk5LS44NGwuNzUtNS4zYTE0LjggMTQuOCAwIDAgMCAzLjM4LTEuOTdsNC45OCAyLjAxYTEgMSAwIDAgMCAxLjIyLS40M2w0LTYuOTNjLjI1LS40My4xNC0uOTctLjI0LTEuMjhsLTQuMjItMy4zMXpNMjQgMzFjLTMuODcgMC03LTMuMTMtNy03czMuMTMtNyA3LTcgNyAzLjEzIDcgNy0zLjEzIDctNyA3eiIvPjwvc3ZnPg==);
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 24px;
  background-color: white;
  content: '';
  display: inline-block;
  height: 20px;
  vertical-align: middle;
  width: 37px;
}

#header p {
  color: white;
  display: inline;
  font-size: 84%;
  font-style: italic;
  padding-inline-start: 0.4em;
}

.list {
  border-collapse: collapse;
  font-size: 84%;
  line-height: 200%;
  width: 100%;
}

.list:not(.filtered) tr:nth-child(odd) td {
  background: rgb(239, 243, 255);
}

.list td {
  font-family: 'Courier New', monospace;
  line-height: 1.4em;
  padding: 0 0.5em;
  padding-top: 0.35em;
  vertical-align: top;
}

.list tr td:nth-last-child(1),
.list tr th:nth-last-child(1) {
  padding-inline-end: 1em;
}

.list:not(.filtered) .tab .name {
  padding-inline-start: 1.5em;
}

.list .name {
  width: 20%;
}

.list .button-cell {
  width: 7%;
}

.list .name div {
  height: 1.6em;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.button-hidden {
  display: none;
}

.number-expanded,
.number-collapsed  {
  text-align: start;
  text-overflow: ellipsis;
  width: 80%;
}

tr > *:nth-child(1),
tr > *:nth-child(2) {
  border-inline-end: 1px solid rgb(181, 198, 222);
}

.name {
  background-position: 5em center;
  background-repeat: no-repeat;
}

.stat-value {
  text-overflow: ellipsis;
  white-space: pre-wrap;
}

html[dir='rtl'] #details .name {
  background-position-left: auto;
  background-position-right: 5em;
}

.number-collapsed .stat-value {
  display: none;
}

.number-expanded .stat-value {
  display: auto;
}

.spinner {
  animation: rotate 2s linear infinite;
  border: 4px solid rgb(239, 243, 255);
  border-radius: 50%;
  border-top: 4px solid rgb(82, 150, 222);
  height: 20px;
  width: 20px;
}

@keyframes rotate {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
</style>
    <style>/* Copyright 2016 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

html,
body {
  overflow: visible;
  user-select: auto;
}

#detailsTable {
  margin-top: .5em;
}

#tableTitle {
  color: #4a4a4a;
}

#status {
  color: rgb(66, 133, 244);
  display: inline-block;
  margin: .5em .5em;
}
</style>
    <script src="chrome://resources/js/util.js"></script>
    <script src="chrome://resources/js/i18n_template_no_process.js"></script>
    <script src="../js/sys_info.js"></script>
  </head>
  <body>
    <div id="header">
      <h1 id="title" i18n-content="sysinfoPageTitle"></h1>
      <p id="description" i18n-content="sysinfoPageDescription"></p>
    </div>
    <div id="content">
      <h2 id="tableTitle" i18n-content="sysinfoPageTableTitle"></h2>
      <div id="anchor"></div>
      <button id="expandAllBtn" class="global-button"
              i18n-content="sysinfoPageExpandAllBtn"></button>
      <button id="collapseAllBtn" class="global-button"
              i18n-content="sysinfoPageCollapseAllBtn"></button>
      <div id="spinner-container">
        <div class="inline-spinner"></div>
        <p id="status" i18n-content="sysinfoPageStatusLoading"></p>
      </div>
      <table class="list" id="detailsTable"></table>
    </div>
  </body>
</html>
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Setup handlers for the minimize and close topbar buttons.
 */
function assistantInit() {
  const closeButton = $('assistant-close-button');
  closeButton.addEventListener('mousedown', function(e) {
    e.preventDefault();
  });
  closeButton.addEventListener('click', function() {
    chrome.app.window.current().close();
  });
  window.addEventListener('keydown', (event) => {
    if (event.key === 'Escape') {
      chrome.app.window.current().close();
    }
  }, false);
}
window.addEventListener('DOMContentLoaded', assistantInit);
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @type {string}
 * @const
 */
const FEEDBACK_LANDING_PAGE =
    'https://support.google.com/chrome/go/feedback_confirmation';

/** @type {string}
 * @const
 */
const FEEDBACK_LANDING_PAGE_TECHSTOP =
    'https://support.google.com/pixelbook/answer/7659411';

/** @type {string}
 * @const
 */
const FEEDBACK_LEGAL_HELP_URL =
    'https://support.google.com/legal/answer/3110420';

/** @type {string}
 * @const
 */
const FEEDBACK_PRIVACY_POLICY_URL = 'https://policies.google.com/privacy';

/** @type {string}
 * @const
 */
const FEEDBACK_TERM_OF_SERVICE_URL = 'https://policies.google.com/terms';

/**
 * Opens the supplied url in an app window. It uses the url as the window ID.
 * @param {string} url The destination URL for the link.
 */
function openUrlInAppWindow(url) {
  chrome.app.window.create(url, {
    frame: 'chrome',
    id: url,
    width: 640,
    height: 400,
    hidden: false,
    resizable: true
  });
}
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @type {string}
 * @const
 */
const FEEDBACK_LANDING_PAGE =
    'https://support.google.com/chrome/go/feedback_confirmation';

/** @type {string}
 * @const
 */
const FEEDBACK_LANDING_PAGE_TECHSTOP =
    'https://support.google.com/pixelbook/answer/7659411';

/** @type {string}
 * @const
 */
const FEEDBACK_LEGAL_HELP_URL =
    'https://support.google.com/legal/answer/3110420';

/** @type {string}
 * @const
 */
const FEEDBACK_PRIVACY_POLICY_URL = 'https://policies.google.com/privacy';

/** @type {string}
 * @const
 */
const FEEDBACK_TERM_OF_SERVICE_URL = 'https://policies.google.com/terms';

/**
 * Opens the supplied url in an app window. It uses the url as the window ID.
 * @param {string} url The destination URL for the link.
 */
function openUrlInAppWindow(url) {
  chrome.app.window.create(url, {
    frame: 'chrome',
    id: url,
    width: 640,
    height: 400,
    hidden: false,
    resizable: true
  });
}


/**
 * @type {number}
 * @const
 */
const FEEDBACK_WIDTH = 500;
/**
 * @type {number}
 * @const
 */
const FEEDBACK_HEIGHT = 610;

/**
 * @type {string}
 * @const
 */
const FEEDBACK_DEFAULT_WINDOW_ID = 'default_window';

// To generate a hashed extension ID, use a sha-1 hash, all in lower case.
// Example:
//   echo -n 'abcdefghijklmnopqrstuvwxyzabcdef' | sha1sum | \
//       awk '{print toupper($1)}'
const whitelistedExtensionIds = [
  '12E618C3C6E97495AAECF2AC12DEB082353241C6',  // QuickOffice
  '3727DD3E564B6055387425027AD74C58784ACC15',  // QuickOffice
  '2FC374607C2DF285634B67C64A2E356C607091C3',  // QuickOffice
  '2843C1E82A9B6C6FB49308FDDF4E157B6B44BC2B',  // G+ Photos
  '5B5DA6D054D10DB917AF7D9EAE3C56044D1B0B03',  // G+ Photos
  '986913085E3E3C3AFDE9B7A943149C4D3F4C937B',  // Feedback Extension
  '7AE714FFD394E073F0294CFA134C9F91DB5FBAA4',  // Connectivity Diagnostics
  'C7DA3A55C2355F994D3FDDAD120B426A0DF63843',  // Connectivity Diagnostics
  '75E3CFFFC530582C583E4690EF97C70B9C8423B7',  // Connectivity Diagnostics
  '32A1BA997F8AB8DE29ED1BA94AAF00CF2A3FEFA7',  // Connectivity Diagnostics
  'A291B26E088FA6BA53FFD72F0916F06EBA7C585A',  // Chrome OS Recovery Tool
  'D7986543275120831B39EF28D1327552FC343960',  // Chrome OS Recovery Tool
  '8EBDF73405D0B84CEABB8C7513C9B9FA9F1DC2CE',  // GetHelp app.
  '97B23E01B2AA064E8332EE43A7A85C628AADC3F2',  // Chrome Remote Desktop Dev
  '9E527CDA9D7C50844E8A5DB964A54A640AE48F98',  // Chrome Remote Desktop Stable
  'DF52618D0B040D8A054D8348D2E84DDEEE5974E7',  // Chrome Remote Desktop QA
  '269D721F163E587BC53C6F83553BF9CE2BB143CD',  // Chrome Remote Desktop QA
                                               // backup
  'C449A798C495E6CF7D6AF10162113D564E67AD12',  // Chrome Remote Desktop Apps V2
  '981974CD1832B87BE6B21BE78F7249BB501E0DE6',  // Play Movies Dev
  '32FD7A816E47392C92D447707A89EB07EEDE6FF7',  // Play Movies Nightly
  '3F3CEC4B9B2B5DC2F820CE917AABDF97DB2F5B49',  // Play Movies Beta
  'F92FAC70AB68E1778BF62D9194C25979596AA0E6',  // Play Movies Stable
  '0F585FB1D0FDFBEBCE1FEB5E9DFFB6DA476B8C9B',  // Hangouts Extension
  '2D22CDB6583FD0A13758AEBE8B15E45208B4E9A7',  // Hangouts Extension
  '49DA0B9CCEEA299186C6E7226FD66922D57543DC',  // Hangouts Extension
  'E7E2461CE072DF036CF9592740196159E2D7C089',  // Hangouts Extension
  'A74A4D44C7CFCD8844830E6140C8D763E12DD8F3',  // Hangouts Extension
  '312745D9BF916161191143F6490085EEA0434997',  // Hangouts Extension
  '53041A2FA309EECED01FFC751E7399186E860B2C',  // Hangouts Extension
  '0F42756099D914A026DADFA182871C015735DD95',  // Hangouts Extension
  '1B7734733E207CCE5C33BFAA544CA89634BF881F',  // GLS nightly
  'E2ACA3D943A3C96310523BCDFD8C3AF68387E6B7',  // GLS stable
  'BA007D8D52CC0E2632EFCA03ACD003B0F613FD71',  // http://crbug.com/470411
  '5260FA31DE2007A837B7F7B0EB4A47CE477018C8',  // http://crbug.com/470411
  '4F4A25F31413D9B9F80E61D096DEB09082515267',  // http://crbug.com/470411
  'FBA0DE4D3EFB5485FC03760F01F821466907A743',  // http://crbug.com/470411
  'E216473E4D15C5FB14522D32C5F8DEAAB2CECDC6',  // http://crbug.com/470411
  '676A08383D875E51CE4C2308D875AE77199F1413',  // http://crbug.com/473845
  '869A23E11B308AF45A68CC386C36AADA4BE44A01',  // http://crbug.com/473845
  'E9CE07C7EDEFE70B9857B312E88F94EC49FCC30F',  // http://crbug.com/473845
  'A4577D8C2AF4CF26F40CBCA83FFA4251D6F6C8F8',  // http://crbug.com/478929
  'A8208CCC87F8261AFAEB6B85D5E8D47372DDEA6B',  // http://crbug.com/478929
  // TODO (ntang) Remove the following 2 hashes by 12/31/2017.
  'B620CF4203315F9F2E046EDED22C7571A935958D',  // http://crbug.com/510270
  'B206D8716769728278D2D300349C6CB7D7DE2EF9',  // http://crbug.com/510270
  'EFCF5358672FEE04789FD2EC3638A67ADEDB6C8C',  // http://crbug.com/514696
  'FAD85BC419FE00995D196312F53448265EFA86F1',  // http://crbug.com/516527
  'F33B037DEDA65F226B7409C2ADB0CF3F8565AB03',  // http://crbug.com/541769
  '969C788BCBC82FBBE04A17360CA165C23A419257',  // http://crbug.com/541769
  '3BC3740BFC58F06088B300274B4CFBEA20136342',  // http://crbug.com/541769
  '2B6C6A4A5940017146F3E58B7F90116206E84685',  // http://crbug.com/642141
  '96FF2FFA5C9173C76D47184B3E86D267B37781DE',  // http://crbug.com/642141
  'A3E3DE9E9F16B41D4A2FAD106BD6CA76B94A0C94',  // http://crbug.com/908458
  'C2ABD68C33A5B485971C9638B80D6A2E9CBA78C4',  // http://crbug.com/908458
  'B41E7F08E1179CC03CBD1F49E57CF353A40ADE07',  // http://crbug.com/908458
  'A948368FC53BE437A55FEB414106E207925482F5',  // ChromeOS Files App.
];

/**
 * Used to generate unique IDs for FeedbackRequest objects.
 * @type {number}
 */
let lastUsedId = 0;

/**
 * A FeedbackRequest object represents a unique feedback report, requested by an
 * instance of the feedback window. It contains the system information specific
 * to this report, the full feedbackInfo, and callbacks to send the report upon
 * request.
 */
class FeedbackRequest {
  constructor(feedbackInfo) {
    this.id_ = ++lastUsedId;
    this.feedbackInfo_ = feedbackInfo;
    this.onSystemInfoReadyCallback_ = null;
    this.isSystemInfoReady_ = false;
    this.reportIsBeingSent_ = false;
    this.isRequestCanceled_ = false;
    this.useSystemInfo_ = false;
  }

  /**
   * Called when the system information is sent from the C++ side.
   * @param {Object} sysInfo The received system information.
   */
  getSystemInformationCallback(sysInfo) {
    if (this.isRequestCanceled_) {
      // If the window had been closed before the system information was
      // received, we skip the rest of the operations and return immediately.
      return;
    }

    this.isSystemInfoReady_ = true;

    // Combine the newly received system information with whatever system
    // information we have in the feedback info (if any).
    if (this.feedbackInfo_.systemInformation) {
      this.feedbackInfo_.systemInformation =
          this.feedbackInfo_.systemInformation.concat(sysInfo);
    } else {
      this.feedbackInfo_.systemInformation = sysInfo;
    }

    if (this.onSystemInfoReadyCallback_ != null) {
      this.onSystemInfoReadyCallback_();
      this.onSystemInfoReadyCallback_ = null;
    }
  }

  /**
   * Retrieves the system information for this request object.
   * @param {function()} callback Invoked to notify the listener that the system
   * information has been received.
   */
  getSystemInformation(callback) {
    if (this.isSystemInfoReady_) {
      callback();
      return;
    }

    this.onSystemInfoReadyCallback_ = callback;
    // The C++ side must reply to the callback specific to this object.
    const boundCallback = this.getSystemInformationCallback.bind(this);
    chrome.feedbackPrivate.getSystemInformation(boundCallback);
  }

  /**
   * Sends the feedback report represented by the object, either now if system
   * information is ready, or later once it is.
   * @param {boolean} useSystemInfo True if the user would like the system
   * information to be sent with the report.
   */
  sendReport(useSystemInfo) {
    this.reportIsBeingSent_ = true;
    this.useSystemInfo_ = useSystemInfo;
    if (useSystemInfo && !this.isSystemInfoReady_) {
      this.onSystemInfoReadyCallback_ = this.sendReportNow;
      return;
    }
    this.sendReportNow();
  }

  /**
   * Sends the report immediately and removes this object once the report is
   * sent.
   */
  sendReportNow() {
    if (!this.useSystemInfo_) {
      // Clear the system information if the user doesn't want it to be sent.
      this.feedbackInfo_.systemInformation = null;
    }

    /** @const */ const ID = this.id_;
    /** @const */ const FLOW = this.feedbackInfo_.flow;
    chrome.feedbackPrivate.sendFeedback(
        this.feedbackInfo_, function(result, landingPageType) {
          if (result == chrome.feedbackPrivate.Status.SUCCESS) {
            console.log('Feedback: Report sent for request with ID ' + ID);
            if (FLOW != chrome.feedbackPrivate.FeedbackFlow.LOGIN &&
                landingPageType !=
                    chrome.feedbackPrivate.LandingPageType.NO_LANDING_PAGE) {
              const landingPage = landingPageType ==
                      chrome.feedbackPrivate.LandingPageType.NORMAL ?
                  FEEDBACK_LANDING_PAGE :
                  FEEDBACK_LANDING_PAGE_TECHSTOP;
              window.open(landingPage, '_blank');
            }
          } else {
            console.log(
                'Feedback: Report for request with ID ' + ID +
                ' will be sent later.');
          }
          if (FLOW == chrome.feedbackPrivate.FeedbackFlow.LOGIN) {
            chrome.feedbackPrivate.loginFeedbackComplete();
          }
        });
  }

  /**
   * Handles the event when the feedback UI window corresponding to this
   * FeedbackRequest instance is closed.
   */
  onWindowClosed() {
    if (!this.reportIsBeingSent_) {
      this.isRequestCanceled_ = true;
      if (this.feedbackInfo_.flow ==
          chrome.feedbackPrivate.FeedbackFlow.LOGIN) {
        chrome.feedbackPrivate.loginFeedbackComplete();
      }
    }
  }
}

/**
 * Function to determine whether or not a given extension id is whitelisted to
 * invoke the feedback UI. If the extension is whitelisted, the callback to
 * start the Feedback UI will be called.
 * @param {string} id the id of the sender extension.
 * @param {Function} startFeedbackCallback The callback function that will
 *     will start the feedback UI.
 * @param {Object} feedbackInfo The feedback info object to pass to the
 *     start feedback UI callback.
 */
function senderWhitelisted(id, startFeedbackCallback, feedbackInfo) {
  crypto.subtle.digest('SHA-1', new TextEncoder().encode(id))
      .then(function(hashBuffer) {
        let hashString = '';
        const hashView = new Uint8Array(hashBuffer);
        for (let i = 0; i < hashView.length; ++i) {
          const n = hashView[i];
          hashString += n < 0x10 ? '0' : '';
          hashString += n.toString(16);
        }
        if (whitelistedExtensionIds.indexOf(hashString.toUpperCase()) != -1) {
          startFeedbackCallback(feedbackInfo);
        }
      });
}

/**
 * Callback which gets notified once our feedback UI has loaded and is ready to
 * receive its initial feedback info object.
 * @param {Object} request The message request object.
 * @param {Object} sender The sender of the message.
 * @param {function(Object)} sendResponse Callback for sending a response.
 */
function feedbackReadyHandler(request, sender, sendResponse) {
  if (request.ready) {
    chrome.runtime.sendMessage({sentFromEventPage: true});
  }
}

/**
 * Callback which gets notified if another extension is requesting feedback.
 * @param {Object} request The message request object.
 * @param {Object} sender The sender of the message.
 * @param {function(Object)} sendResponse Callback for sending a response.
 */
function requestFeedbackHandler(request, sender, sendResponse) {
  if (request.requestFeedback) {
    senderWhitelisted(sender.id, startFeedbackUI, request.feedbackInfo);
  }
}

/**
 * Callback which starts up the feedback UI.
 * @param {Object} feedbackInfo Object containing any initial feedback info.
 */
function startFeedbackUI(feedbackInfo) {
  const win = chrome.app.window.get(FEEDBACK_DEFAULT_WINDOW_ID);
  if (win) {
    win.show();
    return;
  }
  chrome.app.window.create(
      'html/default.html', {
        frame: feedbackInfo.useSystemWindowFrame ? 'chrome' : 'none',
        id: FEEDBACK_DEFAULT_WINDOW_ID,
        innerBounds: {
          minWidth: FEEDBACK_WIDTH,
          minHeight: FEEDBACK_HEIGHT,
        },
        hidden: true,
        resizable: false
      },
      function(appWindow) {
        const request = new FeedbackRequest(feedbackInfo);

        // The feedbackInfo member of the new window should refer to the one in
        // its corresponding FeedbackRequest object to avoid copying and
        // duplicatations.
        appWindow.contentWindow.feedbackInfo = request.feedbackInfo_;

        // Define some functions for the new window so that it can call back
        // into here.

        // Define a function for the new window to get the system information.
        appWindow.contentWindow.getSystemInformation = function(callback) {
          request.getSystemInformation(callback);
        };

        // Define a function to request sending the feedback report.
        appWindow.contentWindow.sendFeedbackReport = function(useSystemInfo) {
          request.sendReport(useSystemInfo);
        };

        // Observe when the window is closed.
        appWindow.onClosed.addListener(function() {
          request.onWindowClosed();
        });
      });
}

chrome.runtime.onMessage.addListener(feedbackReadyHandler);
chrome.runtime.onMessageExternal.addListener(requestFeedbackHandler);
chrome.feedbackPrivate.onFeedbackRequested.addListener(startFeedbackUI);
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @type {number}
 * @const
 */
const MAX_ATTACH_FILE_SIZE = 3 * 1024 * 1024;

/**
 * @type {number}
 * @const
 */
const FEEDBACK_MIN_WIDTH = 500;

/**
 * @type {number}
 * @const
 */
const FEEDBACK_MIN_HEIGHT = 585;

/**
 * @type {number}
 * @const
 */
const FEEDBACK_MIN_HEIGHT_LOGIN = 482;

/** @type {number}
 * @const
 */
const CONTENT_MARGIN_HEIGHT = 40;

/** @type {number}
 * @const
 */
const MAX_SCREENSHOT_WIDTH = 100;

/** @type {string}
 * @const
 */
const SYSINFO_WINDOW_ID = 'sysinfo_window';

let attachedFileBlob = null;
const lastReader = null;

/**
 * Determines whether the system information associated with this instance of
 * the feedback window has been received.
 * @type {boolean}
 */
let isSystemInfoReady = false;

/**
 * Regular expression to check for all variants of blu[e]toot[h] with or without
 * space between the words; for BT when used as an individual word, or as two
 * individual characters, and for BLE when used as an individual word. Case
 * insensitive matching.
 * @type {RegExp}
 */
const btRegEx = new RegExp('blu[e]?[ ]?toot[h]?|\\bb[ ]?t\\b|\\bble\\b', 'i');

/**
 * Regular expression to check for all strings indicating that a user can't
 * connect to a HID or Audio device. This is also a likely indication of a
 * Bluetooth related issue.
 * Sample strings this will match:
 * "I can't connect the speaker!",
 * "The keyboard has connection problem."
 * @type {RegExp}
 */
const cantConnectRegEx = new RegExp(
    '((headphone|keyboard|mouse|speaker)((?!(connect|pair)).*)(connect|pair))' +
        '|((connect|pair).*(headphone|keyboard|mouse|speaker))',
    'i');

/**
 * Regular expression to check for "tether" or "tethering". Case insensitive
 * matching.
 * @type {RegExp}
 */
const tetherRegEx = new RegExp('tether(ing)?', 'i');

/**
 * Regular expression to check for "Smart (Un)lock" or "Easy (Un)lock" with or
 * without space between the words. Case insensitive matching.
 * @type {RegExp}
 */
const smartLockRegEx = new RegExp('(smart|easy)[ ]?(un)?lock', 'i');

/**
 * The callback used by the sys_info_page to receive the event that the system
 * information is ready.
 * @type {function(sysInfo)}
 */
let sysInfoPageOnSysInfoReadyCallback = null;

/**
 * Reads the selected file when the user selects a file.
 * @param {Event} fileSelectedEvent The onChanged event for the file input box.
 */
function onFileSelected(fileSelectedEvent) {
  const file = fileSelectedEvent.target.files[0];
  if (!file) {
    // User canceled file selection.
    attachedFileBlob = null;
    return;
  }

  if (file.size > MAX_ATTACH_FILE_SIZE) {
    $('attach-error').hidden = false;

    // Clear our selected file.
    $('attach-file').value = '';
    attachedFileBlob = null;
    return;
  }

  attachedFileBlob = file.slice();
}

/**
 * Called when user opens the file dialog. Hide $('attach-error') before file
 * dialog is open to prevent a11y bug https://crbug.com/1020047
 */
function onOpenFileDialog() {
  $('attach-error').hidden = true;
}

/**
 * Clears the file that was attached to the report with the initial request.
 * Instead we will now show the attach file button in case the user wants to
 * attach another file.
 */
function clearAttachedFile() {
  $('custom-file-container').hidden = true;
  attachedFileBlob = null;
  feedbackInfo.attachedFile = null;
  $('attach-file').hidden = false;
}

/**
 * Sets up the event handlers for the given |anchorElement|.
 * @param {HTMLElement} anchorElement The <a> html element.
 * @param {string} url The destination URL for the link.
 * @param {boolean} useAppWindow true if the URL should be opened inside a new
 *                  App Window, false if it should be opened in a new tab.
 */
function setupLinkHandlers(anchorElement, url, useAppWindow) {
  anchorElement.onclick = function(e) {
    e.preventDefault();
    if (useAppWindow) {
      openUrlInAppWindow(url);
    } else {
      window.open(url, '_blank');
    }
  };

  anchorElement.onauxclick = function(e) {
    e.preventDefault();
  };
}

/**
 * Opens a new window with chrome://slow_trace, downloading performance data.
 */
function openSlowTraceWindow() {
  chrome.app.window.create(
      'chrome://slow_trace/tracing.zip#' + feedbackInfo.traceId);
}

/**
 * Checks if any keywords related to bluetooth have been typed. If they are,
 * we show the bluetooth logs option, otherwise hide it.
 * @param {Event} inputEvent The input event for the description textarea.
 */
function checkForBluetoothKeywords(inputEvent) {
  const isRelatedToBluetooth = btRegEx.test(inputEvent.target.value) ||
      cantConnectRegEx.test(inputEvent.target.value) ||
      tetherRegEx.test(inputEvent.target.value) ||
      smartLockRegEx.test(inputEvent.target.value);
  $('bluetooth-checkbox-container').hidden = !isRelatedToBluetooth;
}

/**
 * Sends the report; after the report is sent, we need to be redirected to
 * the landing page, but we shouldn't be able to navigate back, hence
 * we open the landing page in a new tab and sendReport closes this tab.
 * @return {boolean} True if the report was sent.
 */
function sendReport() {
  if ($('description-text').value.length == 0) {
    const description = $('description-text');
    description.placeholder = loadTimeData.getString('noDescription');
    description.focus();
    return false;
  }

  // Prevent double clicking from sending additional reports.
  $('send-report-button').disabled = true;
  console.log('Feedback: Sending report');
  if (!feedbackInfo.attachedFile && attachedFileBlob) {
    feedbackInfo.attachedFile = {
      name: $('attach-file').value,
      data: attachedFileBlob
    };
  }

  feedbackInfo.description = $('description-text').value;
  feedbackInfo.pageUrl = $('page-url-text').value;
  feedbackInfo.email = $('user-email-drop-down').value;

  let useSystemInfo = false;
  let useHistograms = false;
  if ($('sys-info-checkbox') != null && $('sys-info-checkbox').checked) {
    // Send histograms along with system info.
    useSystemInfo = useHistograms = true;
  }

  // 

  // 

  feedbackInfo.sendHistograms = useHistograms;

  // If the user doesn't want to send the screenshot.
  if (!$('screenshot-checkbox').checked) {
    feedbackInfo.screenshot = null;
  }

  let productId = parseInt('' + feedbackInfo.productId);
  if (isNaN(productId)) {
    // For apps that still use a string value as the |productId|, we must clear
    // that value since the API uses an integer value, and a conflict in data
    // types will cause the report to fail to be sent.
    productId = null;
  }
  feedbackInfo.productId = productId;

  // Request sending the report, show the landing page (if allowed), and close
  // this window right away. The FeedbackRequest object that represents this
  // report will take care of sending the report in the background.
  sendFeedbackReport(useSystemInfo);
  scheduleWindowClose();
  return true;
}

/**
 * Click listener for the cancel button.
 * @param {Event} e The click event being handled.
 */
function cancel(e) {
  e.preventDefault();
  scheduleWindowClose();
  if (feedbackInfo.flow == chrome.feedbackPrivate.FeedbackFlow.LOGIN) {
    chrome.feedbackPrivate.loginFeedbackComplete();
  }
}

// 

function resizeAppWindow() {
  // We pick the width from the titlebar, which has no margins.
  let width = $('title-bar').scrollWidth;
  if (width < FEEDBACK_MIN_WIDTH) {
    width = FEEDBACK_MIN_WIDTH;
  }

  // We get the height by adding the titlebar height and the content height +
  // margins. We can't get the margins for the content-pane here by using
  // style.margin - the variable seems to not exist.
  let height = $('title-bar').scrollHeight + $('content-pane').scrollHeight +
      CONTENT_MARGIN_HEIGHT;

  let minHeight = FEEDBACK_MIN_HEIGHT;
  if (feedbackInfo.flow == chrome.feedbackPrivate.FeedbackFlow.LOGIN) {
    minHeight = FEEDBACK_MIN_HEIGHT_LOGIN;
  }
  height = Math.max(height, minHeight);

  chrome.app.window.current().resizeTo(width, height);
}

/**
 * A callback to be invoked when the background page of this extension receives
 * the system information.
 */
function onSystemInformation() {
  isSystemInfoReady = true;
  // In case the sys_info_page needs to be notified by this event, do so.
  if (sysInfoPageOnSysInfoReadyCallback != null) {
    sysInfoPageOnSysInfoReadyCallback(feedbackInfo.systemInformation);
    sysInfoPageOnSysInfoReadyCallback = null;
  }
}

/**
 * Close the window after 100ms delay.
 */
function scheduleWindowClose() {
  setTimeout(function() {
    window.close();
  }, 100);
}

/**
 * Initializes our page.
 * Flow:
 * .) DOMContent Loaded        -> . Request feedbackInfo object
 *                                . Setup page event handlers
 * .) Feedback Object Received -> . take screenshot
 *                                . request email
 *                                . request System info
 *                                . request i18n strings
 * .) Screenshot taken         -> . Show Feedback window.
 */
function initialize() {
  // Add listener to receive the feedback info object.
  chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.sentFromEventPage) {
      if (!feedbackInfo.flow) {
        feedbackInfo.flow = chrome.feedbackPrivate.FeedbackFlow.REGULAR;
      }

      if (feedbackInfo.includeBluetoothLogs) {
        assert(
            feedbackInfo.flow ==
            chrome.feedbackPrivate.FeedbackFlow.GOOGLE_INTERNAL);
        $('description-text')
            .addEventListener('input', checkForBluetoothKeywords);
      }

      if ($('assistant-checkbox-container') != null &&
          feedbackInfo.flow ==
              chrome.feedbackPrivate.FeedbackFlow.GOOGLE_INTERNAL &&
          feedbackInfo.fromAssistant) {
        $('assistant-checkbox-container').hidden = false;
      }

      $('description-text').textContent = feedbackInfo.description;
      if (feedbackInfo.descriptionPlaceholder) {
        $('description-text').placeholder = feedbackInfo.descriptionPlaceholder;
      }
      if (feedbackInfo.pageUrl) {
        $('page-url-text').value = feedbackInfo.pageUrl;
      }

      takeScreenshot(function(screenshotCanvas) {
        // We've taken our screenshot, show the feedback page without any
        // further delay.
        window.requestAnimationFrame(function() {
          resizeAppWindow();
        });
        chrome.app.window.current().show();

        // Allow feedback to be sent even if the screenshot failed.
        if (!screenshotCanvas) {
          $('screenshot-checkbox').disabled = true;
          $('screenshot-checkbox').checked = false;
          return;
        }

        screenshotCanvas.toBlob(function(blob) {
          $('screenshot-image').src = URL.createObjectURL(blob);
          // Only set the alt text when the src url is available, otherwise we'd
          // get a broken image picture instead. crbug.com/773985.
          $('screenshot-image').alt = 'screenshot';
          $('screenshot-image')
              .classList.toggle(
                  'wide-screen',
                  $('screenshot-image').width > MAX_SCREENSHOT_WIDTH);
          feedbackInfo.screenshot = blob;
        });
      });

      chrome.feedbackPrivate.getUserEmail(function(email) {
        // Never add an empty option.
        if (!email) {
          return;
        }
        const optionElement = document.createElement('option');
        optionElement.value = email;
        optionElement.text = email;
        optionElement.selected = true;
        // Make sure the "Report anonymously" option comes last.
        $('user-email-drop-down')
            .insertBefore(optionElement, $('anonymous-user-option'));

        // Now we can unhide the user email section:
        $('user-email').hidden = false;
      });

      // Initiate getting the system info.
      isSystemInfoReady = false;
      getSystemInformation(onSystemInformation);

      // An extension called us with an attached file.
      if (feedbackInfo.attachedFile) {
        $('attached-filename-text').textContent =
            feedbackInfo.attachedFile.name;
        attachedFileBlob = feedbackInfo.attachedFile.data;
        $('custom-file-container').hidden = false;
        $('attach-file').hidden = true;
      }

      // No URL and file attachment for login screen feedback.
      if (feedbackInfo.flow == chrome.feedbackPrivate.FeedbackFlow.LOGIN) {
        $('page-url').hidden = true;
        $('attach-file-container').hidden = true;
        $('attach-file-note').hidden = true;
      }

      // 
      chrome.feedbackPrivate.getStrings(feedbackInfo.flow, function(strings) {
        loadTimeData.data = strings;
        i18nTemplate.process(document, loadTimeData);

        const sysInfoUrlElement = $('sys-info-url');
        if (sysInfoUrlElement) {
          // Opens a new window showing the full anonymized system+app
          // information.
          sysInfoUrlElement.onclick = function(e) {
            e.preventDefault();
            const win = chrome.app.window.get(SYSINFO_WINDOW_ID);
            if (win) {
              win.show();
              return;
            }
            chrome.app.window.create(
                '/html/sys_info.html', {
                  frame: 'chrome',
                  id: SYSINFO_WINDOW_ID,
                  width: 640,
                  height: 400,
                  hidden: false,
                  resizable: true
                },
                function(appWindow) {
                  // Define functions for the newly created window.

                  // Gets the full system information for the new window.
                  appWindow.contentWindow.getFullSystemInfo = function(
                      callback) {
                    if (isSystemInfoReady) {
                      callback(feedbackInfo.systemInformation);
                      return;
                    }

                    sysInfoPageOnSysInfoReadyCallback = callback;
                  };

                  // Returns the loadTimeData for the new window.
                  appWindow.contentWindow.getLoadTimeData = function() {
                    return loadTimeData;
                  };
                });
          };

          sysInfoUrlElement.onauxclick = function(e) {
            e.preventDefault();
          };
        }

        const histogramUrlElement = $('histograms-url');
        if (histogramUrlElement) {
          // Opens a new window showing the histogram metrics.
          setupLinkHandlers(
              histogramUrlElement, 'chrome://histograms',
              true /* useAppWindow */);
        }

        const legalHelpPageUrlElement = $('legal-help-page-url');
        if (legalHelpPageUrlElement) {
          setupLinkHandlers(
              legalHelpPageUrlElement, FEEDBACK_LEGAL_HELP_URL,
              false /* useAppWindow */);
        }

        const privacyPolicyUrlElement = $('privacy-policy-url');
        if (privacyPolicyUrlElement) {
          setupLinkHandlers(
              privacyPolicyUrlElement, FEEDBACK_PRIVACY_POLICY_URL,
              false /* useAppWindow */);
        }

        const termsOfServiceUrlElement = $('terms-of-service-url');
        if (termsOfServiceUrlElement) {
          setupLinkHandlers(
              termsOfServiceUrlElement, FEEDBACK_TERM_OF_SERVICE_URL,
              false /* useAppWindow */);
        }

        const bluetoothLogsInfoLinkElement = $('bluetooth-logs-info-link');
        if (bluetoothLogsInfoLinkElement) {
          bluetoothLogsInfoLinkElement.onclick = function(e) {
            e.preventDefault();

            chrome.app.window.create(
                '/html/bluetooth_logs_info.html',
                {width: 400, height: 120, resizable: false},
                function(appWindow) {
                  appWindow.contentWindow.onload = function() {
                    i18nTemplate.process(
                        appWindow.contentWindow.document, loadTimeData);
                  };
                });

            bluetoothLogsInfoLinkElement.onauxclick = function(e) {
              e.preventDefault();
            };
          };
        }

        const assistantLogsInfoLinkElement = $('assistant-logs-info-link');
        if (assistantLogsInfoLinkElement) {
          assistantLogsInfoLinkElement.onclick = function(e) {
            e.preventDefault();

            chrome.app.window.create(
                '/html/assistant_logs_info.html',
                {width: 400, height: 120, resizable: false, frame: 'none'},
                function(appWindow) {
                  appWindow.contentWindow.onload = function() {
                    i18nTemplate.process(
                        appWindow.contentWindow.document, loadTimeData);
                  };
                });

            assistantLogsInfoLinkElement.onauxclick = function(e) {
              e.preventDefault();
            };
          };
        }

        // Make sure our focus starts on the description field.
        $('description-text').focus();
      });
    }
  });

  window.addEventListener('DOMContentLoaded', function() {
    // Ready to receive the feedback object.
    chrome.runtime.sendMessage({ready: true});

    // Setup our event handlers.
    $('attach-file').addEventListener('change', onFileSelected);
    $('attach-file').addEventListener('click', onOpenFileDialog);
    $('send-report-button').onclick = sendReport;
    $('cancel-button').onclick = cancel;
    $('remove-attached-file').onclick = clearAttachedFile;
    // 
  });
}

initialize();
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * The global load time data that contains the localized strings that we will
 * get from the main page when this page first loads.
 */
let loadTimeData = null;

/**
 * A queue of a sequence of closures that will incrementally build the sys info
 * html table.
 */
const tableCreationClosuresQueue = [];

/**
 * The time used to post delayed tasks in MS. Currently set to be enough for two
 * frames.
 */
const STANDARD_DELAY_MS = 32;

function getValueDivForButton(button) {
  return $(button.id.substr(0, button.id.length - 4));
}

function getButtonForValueDiv(valueDiv) {
  return $(valueDiv.id + '-btn');
}

/**
 * Expands the multiline table cell that contains the given valueDiv.
 * @param {HTMLElement} button The expand button.
 * @param {HTMLElement} valueDiv The div that contains the multiline logs.
 * @param {number} delayFactor A value used for increasing the delay after which
 *     the cell will be expanded. Useful for expandAll() since it expands the
 *     multiline cells one after another with each expension done slightly after
 *     the previous one.
 */
function expand(button, valueDiv, delayFactor) {
  button.textContent = loadTimeData.getString('sysinfoPageCollapseBtn');
  // Show the spinner container.
  const valueCell = valueDiv.parentNode;
  valueCell.removeAttribute('aria-hidden');
  valueCell.firstChild.hidden = false;
  // Expanding huge logs can take a very long time, so we do it after a delay
  // to have a chance to render the spinner.
  setTimeout(function() {
    valueCell.className = 'number-expanded';
    // Hide the spinner container.
    valueCell.firstChild.hidden = true;
  }, STANDARD_DELAY_MS * delayFactor);
}

/**
 * Collapses the multiline table cell that contains the given valueDiv.
 * @param {HTMLElement} button The expand button.
 * @param {HTMLElement} valueDiv The div that contains the multiline logs.
 */
function collapse(button, valueDiv) {
  button.textContent = loadTimeData.getString('sysinfoPageExpandBtn');
  valueDiv.parentNode.className = 'number-collapsed';
  // Don't have screen readers announce the empty cell.
  valueCell = valueDiv.parentNode;
  valueCell.setAttribute('aria-hidden', 'true');
}

/**
 * Toggles whether an item is collapsed or expanded.
 */
function changeCollapsedStatus() {
  const valueDiv = getValueDivForButton(this);
  if (valueDiv.parentNode.className == 'number-collapsed') {
    expand(this, valueDiv, 1);
  } else {
    collapse(this, valueDiv);
  }
}

/**
 * Collapses all log items.
 */
function collapseAll() {
  const valueDivs = document.getElementsByClassName('stat-value');
  for (let i = 0; i < valueDivs.length; ++i) {
    if (valueDivs[i].parentNode.className != 'number-expanded') {
      continue;
    }
    const button = getButtonForValueDiv(valueDivs[i]);
    if (button) {
      collapse(button, valueDivs[i]);
    }
  }
}

/**
 * Expands all log items.
 */
function expandAll() {
  const valueDivs = document.getElementsByClassName('stat-value');
  for (let i = 0; i < valueDivs.length; ++i) {
    if (valueDivs[i].parentNode.className != 'number-collapsed') {
      continue;
    }
    const button = getButtonForValueDiv(valueDivs[i]);
    if (button) {
      expand(button, valueDivs[i], i + 1);
    }
  }
}

function createNameCell(key) {
  const nameCell = document.createElement('td');
  nameCell.setAttribute('class', 'name');
  const nameDiv = document.createElement('div');
  nameDiv.setAttribute('class', 'stat-name');
  nameDiv.appendChild(document.createTextNode(key));
  nameCell.appendChild(nameDiv);
  return nameCell;
}

function createButtonCell(key, isMultiLine) {
  const buttonCell = document.createElement('td');
  buttonCell.setAttribute('class', 'button-cell');

  if (isMultiLine) {
    const button = document.createElement('button');
    button.setAttribute('id', '' + key + '-value-btn');
    button.setAttribute('aria-controls', '' + key + '-value');
    button.onclick = changeCollapsedStatus;
    button.textContent = loadTimeData.getString('sysinfoPageExpandBtn');
    buttonCell.appendChild(button);
  } else {
    // Don't have screen reader read the empty cell.
    buttonCell.setAttribute('aria-hidden', 'true');
  }

  return buttonCell;
}

function createValueCell(key, value, isMultiLine) {
  const valueCell = document.createElement('td');
  const valueDiv = document.createElement('div');
  valueDiv.setAttribute('class', 'stat-value');
  valueDiv.setAttribute('id', '' + key + '-value');
  valueDiv.appendChild(document.createTextNode(value));

  if (isMultiLine) {
    valueCell.className = 'number-collapsed';
    const loadingContainer = $('spinner-container').cloneNode(true);
    loadingContainer.setAttribute('id', '' + key + '-value-loading');
    loadingContainer.hidden = true;
    valueCell.appendChild(loadingContainer);
    // Don't have screen readers read the empty cell.
    valueCell.setAttribute('aria-hidden', 'true');
  } else {
    valueCell.className = 'number';
  }

  valueCell.appendChild(valueDiv);
  return valueCell;
}

function createTableRow(key, value) {
  const row = document.createElement('tr');

  // Avoid using element.scrollHeight as it's very slow. crbug.com/653968.
  const isMultiLine = value.split('\n').length > 2 || value.length > 1000;

  row.appendChild(createNameCell(key));
  row.appendChild(createButtonCell(key, isMultiLine));
  row.appendChild(createValueCell(key, value, isMultiLine));

  return row;
}

/**
 * Finalize the page after the content has been loaded.
 */
function finishPageLoading() {
  $('collapseAllBtn').onclick = collapseAll;
  $('expandAllBtn').onclick = expandAll;

  $('spinner-container').hidden = true;
}

/**
 * Pops a closure from the front of the queue and executes it.
 */
function processQueue() {
  const closure = tableCreationClosuresQueue.shift();
  if (closure) {
    closure();
  }

  if (tableCreationClosuresQueue.length > 0) {
    // Post a task to process the next item in the queue.
    setTimeout(processQueue, STANDARD_DELAY_MS);
  }
}

/**
 * Creates a closure that creates a table row for the given key and value.
 * @param {string} key The name of the log.
 * @param {string} value The contents of the log.
 * @return {function():void} A closure that creates a row for the given log.
 */
function createTableRowWrapper(key, value) {
  return function() {
    $('detailsTable').appendChild(createTableRow(key, value));
  };
}

/**
 * Creates closures to build the system information table row by row
 * incrementally.
 * @param {Object} systemInfo The system information that will be used to fill
 * the table.
 */
function createTable(systemInfo) {
  for (const key in systemInfo) {
    const item = systemInfo[key];
    tableCreationClosuresQueue.push(
        createTableRowWrapper(item['key'], item['value']));
  }

  tableCreationClosuresQueue.push(finishPageLoading);

  processQueue();
}

/**
 * Initializes the page when the window is loaded.
 */
window.onload = function() {
  loadTimeData = getLoadTimeData();
  i18nTemplate.process(document, loadTimeData);
  getFullSystemInfo(createTable);
};
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Function to take the screenshot of the current screen.
 * @param {function(HTMLCanvasElement)} callback Callback for returning the
 *     canvas with the screenshot. Called with null if the screenshot failed.
 */
function takeScreenshot(callback) {
  let screenshotStream = null;
  const video = document.createElement('video');

  video.addEventListener('canplay', function(e) {
    if (screenshotStream) {
      const canvas = document.createElement('canvas');
      canvas.setAttribute('width', video.videoWidth);
      canvas.setAttribute('height', video.videoHeight);
      canvas.getContext('2d').drawImage(
          video, 0, 0, video.videoWidth, video.videoHeight);

      video.pause();
      video.srcObject = null;

      screenshotStream.getVideoTracks()[0].stop();
      screenshotStream = null;

      callback(canvas);
    }
  }, false);

  navigator.webkitGetUserMedia(
      {
        video: {
          mandatory:
              {chromeMediaSource: 'screen', maxWidth: 4096, maxHeight: 2560}
        }
      },
      function(stream) {
        if (stream) {
          screenshotStream = stream;
          video.srcObject = screenshotStream;
          video.play();
        }
      },
      function(err) {
        console.error(
            'takeScreenshot failed: ' + err.name + '; ' + err.message + '; ' +
            err.constraintName);
        callback(null);
      });
}
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Setup handlers for the minimize and close topbar buttons.
 */
function initializeHandlers() {
  // If this dialog is using system window controls, these elements aren't
  // needed at all.
  if (window.feedbackInfo.useSystemWindowFrame) {
    $('minimize-button').hidden = true;
    $('close-button').hidden = true;
    return;
  }
  $('minimize-button').addEventListener('click', function(e) {
    e.preventDefault();
    chrome.app.window.current().minimize();
  });

  $('minimize-button').addEventListener('mousedown', function(e) {
    e.preventDefault();
  });

  $('close-button').addEventListener('click', function() {
    scheduleWindowClose();
  });

  $('close-button').addEventListener('mousedown', function(e) {
    e.preventDefault();
  });
}

window.addEventListener('DOMContentLoaded', initializeHandlers);
/* Copyright 2019 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

html {
  height: 100%;
}

body {
  background-color: #fff;
  display: flex;
  flex-direction: column;
  height: 100%;
  margin: 0;
  overflow: auto;
  padding: 0;
  width: 100%;
}

#assistant-title-bar {
  -webkit-app-region: drag;
  align-items: center;
  background-color: #fff;
  display: flex;
  min-height: 20px;
}

#assistant-close-button {
  position: absolute;
  right: 0;
}

html[dir='rtl'] #assistant-close-button {
  left: 0;
  right: auto;
}

#assistant-logs-info-container {
  line-height: 20px;
  margin-bottom: 20px;
  margin-inline-end: 20px;
  margin-inline-start: 20px;
  margin-top: 20px;
  text-align: justify;
  text-justify: inter-word;
}
/* Copyright 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */


html {
  height: 100%;
}

body {
  background-color: #fbfbfb;
  display: flex;
  flex-direction: column;
  height: 100%;
  margin: 0;
  overflow: auto;
  padding: 0;
  width: 100%;
}

[hidden] {
  display: none !important;
}

.title-bar {
  -webkit-align-items: center;
  -webkit-app-region: drag;
  background-color: #fff;
  box-shadow: 0 1px #d0d0d0;
  color: rgb(80, 80, 82);
  display: -webkit-flex;
  font-size: 15px;
  min-height: 48px;
}

.title-bar #page-title {
  -webkit-flex: 1 1 auto;
  margin-inline-start: 20px;
}

.title-bar .button-bar {
  -webkit-flex: 0 1 auto;
}

.content {
  color: #444;
  flex-grow: 1;
  font-size: 12px;
  margin: 20px;
}

.content #description-text {
  border-color: #c8c8c8;
  box-sizing: border-box;
  height: 120px;
  line-height: 18px;
  padding: 10px;
  resize: none;
  width: 100%;
}

.content #additional-info-label {
  margin-inline-start: 10px;
}

.content .text-field-container {
  -webkit-align-items: center;
  display: -webkit-flex;
  height: 29px;
  margin-top: 10px;
  padding-inline-start: 10px;
}

.content .text-field-container > label {
  -webkit-flex: 0 1 auto;
  width: 100px;
}

.content .text-field-container > select {
  border: 1px solid #c8c8c8;
  color: #585858;
  flex: 1 1 auto;
  height: 100%;
  padding-inline-start: 5px;
}

.content .text-field-container > input[type=text] {
  -webkit-flex: 1 1 auto;
  border: 1px solid;
  border-color: #c8c8c8;
  color: #585858;
  height: 100%;
  padding-inline-start: 5px;
}

.content .text-field-container > input[type=checkbox] {
  margin-inline-end: 9px;
}

.content .checkbox-field-container {
  -webkit-align-items: center;
  display: -webkit-flex;
  height: 29px;
}

#assistant-checkbox-container {
  align-items: flex-start;
  line-height: 20px;
  margin-bottom: 20px;
  margin-top: 7px;
  vertical-align: text-top;
}

#screenshot-container {
  margin-top: 10px;
}

.content #screenshot-image {
  display: block;
  height: 60px;
  margin-inline-end: 25px;
  margin-top: 40px;
  transition: all 250ms ease;
}

.content #screenshot-image:hover {
  height: 125px;
  margin-inline-end: 0;
  margin-top: 80px;
  z-index: 1;
}

.content #screenshot-image.wide-screen {
  height: auto;
  width: 100px;
}

.content #screenshot-image.wide-screen:hover {
  height: auto;
  width: 200px;
}

.content #screenshot-chk-label {
  flex: auto;
}

.content #sys-info-container {
  margin-inline-end: 130px;
}

.content #privacy-note {
  font-size: 12px;
  line-height: 20px;
  margin-bottom: 0;
  margin-top: 20px;
  text-align: justify;
  text-justify: inter-word;
}

.content .buttons-pane {
  bottom: 20px;
  display: -webkit-flex;
  justify-content: flex-end;
  left: 20px;
  position: absolute;
  right: 20px;
}

.content .top-buttons {
  position: absolute;
}

#bottom-buttons-container {
  margin: 0;
}

.content .bottom-buttons {
  margin-bottom: 20px;
  margin-inline-end: 20px;
  margin-inline-start: 20px;
  margin-top: 0;
  position: static;
}

.content .remove-file-button {
  background-color: transparent;
  background-image: -webkit-image-set(
      url(chrome://resources/images/apps/button_butter_bar_close.png) 1x,
      url(chrome://resources/images/2x/apps/button_butter_bar_close.png) 2x);
  background-position: 50% 80%;
  background-repeat: no-repeat;
  border: none;
  height: 16px;
  margin-inline-start: 5px;
  pointer-events: auto;
  width: 16px;
}

.content .remove-file-button:hover {
  background-image: -webkit-image-set(
      url(chrome://resources/images/apps/button_butter_bar_close_hover.png) 1x,
      url(chrome://resources/images/2x/apps/button_butter_bar_close_hover.png) 2x);
}

.content .remove-file-button:active {
  background-image: -webkit-image-set(
      url(chrome://resources/images/apps/button_butter_bar_close_pressed.png) 1x,
      url(chrome://resources/images/2x/apps/button_butter_bar_close_pressed.png) 2x);
}

.content #attach-file-note {
  margin-bottom: 10px;
  margin-inline-start: 112px;
  margin-top: 10px;
}

.content .attach-file-notification {
  color: rgb(204, 0, 0);
  font-weight: bold;
}

button.white-button {
  color: #000;
  margin-inline-end: 10px;
}

button.blue-button {
  color: #fff;
  text-shadow: 1px sharp drop shadow rgb(45, 106, 218);
}
/* Copyright 2016 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

html,
body {
  overflow: visible;
  user-select: auto;
}

#detailsTable {
  margin-top: .5em;
}

#tableTitle {
  color: #4a4a4a;
}

#status {
  color: rgb(66, 133, 244);
  display: inline-block;
  margin: .5em .5em;
}
�PNG


IHDR00W��gAMA���a�IDATh�YIh�W�/�C���!�n
NY�
E��i�<�b'�u��(�
�k.,�g�	n�U��+��tg@��,�p�<�����w���TJ�����;��s�K�og �o�����:t��X,nGo���Z����U�kr��$�t��+�WWW߿p�B?m��?�����
�y�f�[M0���^E�E��~�/_��92�T���[޽{�f��X>�&J��mԱQ�",Z���ŋ������S��Çg�8Q�e�K��*�D~�����/]����Dg]@GGG+���D
j�Z^6��M|�l���_�p�OW�^�ն��
u�3��9$�@��P��3x
,[�3նq������lYt��<�E��f�T<�[>+��[�*�
E�E=�1�T,�3���ۣ!8ʚ��-�ǫ4�+JLL�"�֯_?144���pϿy��V� �\zQ�-ogZ���ғm(b�M���OC;��!������L&Vm�X�$�Y)�`�O[��08���%K�|�:EO ��T�`�Z�J(;�Ě�Ixɢ�S.�KE4�얖�����뼜lp�[�MH��H�cz�#������M>�e�sJFR���,P���'���Y�o�[g2�-�gJ��Չg!�J�;�;|����Tns��Y���Cw��YX?a�k���y{�K���0�l��6o�</���gݺu~���S?11�j��H�1����,9�j+�X�"q�s�Ì�J�5$��ݻw�={�������W___K��In!V�d�|�}���y~��Emv�Di㶪���e�)���N�|�CY�[�E��f}0���Uv��߿�.�����M�޽{ݎ;$�H������}�E�/_�tK�.M���\š<z�@e��Jg;@�,J_m�,�P����P��E`��a�Sa���r%ڀ�����`�]����R��d�R�ؤꊝ0?��i�᪓lQ��X����**��ʹ�%ص��.�����9�����m-�Z��&����
62��:�e�'�������+�
����4�ծ@����D�M�Ҧ-D^c� 0Vu�q�-�+��<�^�A�j�	������]>��XFO�>�=z����BGŵ> U��"֤�-��R�*e�E���l����X��>�S�Mv^��=V�T�
D��f��g�>��\��t]Ne�M�y�cC~*����8�� ����Z"mp9S�J��ɏ�-�h2��Ø�S桎c�4L��p�#D'K�\�-��;w:������T�<e�.'
gྜ��U��*G,89}N����������R��L��*L~`��L��9��F�e9*�dK�={溺���?[֜�GT�2ymE
w}0����~8{+y���uҋr��s@��	4��%8v[�-
�^�Rܸq���LM�X�v�/
ZފEA���V�:�L�	~p����'�T�x�ⓤ��bh{���;v���38��x��n���0޲e�ʰMg�7(�B΂�2aL	�$���iQg%- �s��*^h��3'[�����G����
�:|d\N1ʷ0|l*�y&dQ�h��0S~�Y_��s3�b*k�O��9��
a�0"��"����R�C]L��El�Λ7o��ؖF��x��E�ۦ
J������[?��ly����V�c�O��y��Zft~���>w��&�6��Ep5Tm1���bȗ୞����_�ݻו8g�T,�cPD��BLlE��3#P�J��}N���X�x�T�)�+��ʉ��sȌ��ɓ'6l�V�i��+�f�j�z�!���z8�|���J�f�{�wV�+񴩩�W�F��ab�&W��EP/��I�Z���|Gցe��E��S(�P˫W�N�7�M2_Y�
�>V��l��Ê�����l۵kW+�U���-;��I�E���UF0�|�BK=(�l�'�@`sx'n����W�0~�YÕ@����|��u�V�2��E���?
K�e���IEND�B`��PNG


IHDR��R�lgAMA���a?@IDATx�y��WU�o@1��0
1/D���*��@�H�A[��$"BuIcS
b)�N�P`���J����@C9���PBHX-H�P#FD2Iz}λ����ٿ�;���;��w��k}װ����3܍�u[W`]�u�XW`]�u�XW`]�u�XW`]�u�XW`]�u�XW`]�����;���{~���}�7��G��wD�p�q�wR�űɟXtq�D�-�/��Bo.�86�ko����/�'�8㌿ы^�U��m�Xo�j���'�B-�����Z��Q��u�^��.K�Q��E��Y�vPڦ�۫�w��}��Օ��U.W�����-���
,?+�]=@^ٯ���j�}-�'���5�{��s�~��_��׾�!E�Q��aJ�Om�C�>�{����7�?��E�m��׊~����{N?����g��R�_o�N].�첻�}B-��o��
�u�K(�_��b��v�m[�(�,t��6�4}��!�y�{nT~����h�|��Y���1�y�]t��د۝Xnf�;*������by^Ϩ��A���l�z뭋ŏ.�ؖ�(sA���������qV`�p�	��׽6�Ďv}a���7��5��*��4��B�b%.��3�U�y���U�րWx;��Å���,y|��Vo�M�<Ԗ2�Q'E�F�`S�!le���${km�7����F��H��
�Ml-���"��:�_\Ts9s��7/����\.>�PK�w���C��:s�qq�I'-������ye��[����M���-Jtt�y��^vJM�Kk�Fv
����[n�e㦛nZ\˯2b_R���^k{�^��I{~{2�!������l��k��6�k^��W�س;e��8�F�������kr��vo͗����+=thQN��E:d?�w��?����6u�����i�%�g�M�M�"�z���K/���=��IvTo���Z��Z�ϩI;�G�_�җ�8.��<4�ک��/�.¤�K_����/]��=19N>����>��B���0o���M8z���
��?��gԢe]�\Ty<��_���p��Р�i��ǐ/1I���xsE�kS��Mʌ��g#pT���V���^0.~��^�ٴ?���>��3��̻�y�/���J�$^�]�C���r7$O�v!�M�~H����M{1sh����%/�l��'y�\�K���k^����m�	A:��Q���Γj�^_�~8��o\\㷓��yQ�|;M{���e|c��&ei��;�M�)^�%�xȹG��}�xӭ�����_�L�7�`����c�K7/w����������C�a��x�;ǧ6=���c�a��Zm|c�C�q�)�,�%�]V��_|��(��&�z��j�RM�ɼYu�u�-e�n�Zp���샗O�2�P�e|��昌�î"��m�����/�`+�/����;˿Yym-���}&ߺ"�YrC��%/9�.w.����;<�q�"Q6���9�1?��o�.&�I[�S_-M۹�1��C[L��y�3�ծ�Ǧ��o�Ƶt��v�m�_��_�ϵ�wM�x��nX|ʲWt&���ۇ:�I�����4}�����2f�b��F���!/��+��|�k_�����n��s��V��˿��w������K�i������gtr���\�cl�&������)�?zݐN9�!ݪ�={�?������i������ߨ��Kk����o�#bl>׿�
~.Pc�s��М4���d_T;ik�ݪ�?�q���[L�O�e�9�O:�G|�3?�ȸz����]������Hx�`˷��~����^���&�;x��/|a���&��T>Lj[����.��|/V+3�e�Ma��X-�q�7��)k�� !���ˣ�z�9�|�#���i��}�j�ފ�uZ����;T`��D���Y�Nt7�{�\�`���~���m�29Ѥ����P�~g�6�	5w?V��k�	��~��}�ꍭK�zq]����k��64�uB��S�b��o�7>�[��S��rLCqsc�a�W�'s��ŋU=2=���p����S����?O�~��=����R��g�h�g�S�I�9q`zx�=:�Hҹȧr��s�Layπ�T�o��Q<g�}�b_m�z�B�꿽��y����Ss��/�h{��D�
&���~��9N-Ps�N�5U#��1��Q�z�l���������R�o6��_��թ���Gs��3������Q��Im})��ݯr�:�6ߞ>k���ֳ�Ko�=�����O{ի^u}��/6@}����*�Cy�ɗT�i9a�NP�GyN|b�G&/U�������ۖ�+.ui�z�3��7�����^X���)����
�+���㡟���on�:h&������Tqcq�f~��^�r��α��ڌ����hzЃ�����r���}&8��k�:~���y�×ҝ�^�z���-�ċ�)�G{�Y�/���X^�M�M���}���эo��oa|���yO��'��t(O{��K�G�s�[,~�R�eZNt�*�%�I��ĠK\+���ll��9�w\��R�¦]�k�#m^�=�5�Zh�{�?l�۾���R�|���('K:�N�vP��L_���C�.�=��V��n�6~��ZH�\�M{�b���20��+O�;~w��jO�\s�wsXv^��˛\��k~>�C��R��`�?�J�ٺA/�	�~�L�1��ݢ�1�^|61��<:[�Yb�.C3>v��˟�F�'D�:��sO�w���Ͳ=�|����<��x,F�7	��?9as|�O:��o�ݐ�e�.������T�={m�b�O�������C�s|�'�S�ල��Ğn���/u�z��8��mE*T��k����U�T{e��W7D{�z2����Mq=�5��O����}��C,��4}J���G}������~����ڳ�ݹB�3�����O��U-�S{o�"ϙ�!�N���61m����''];e�Vn�äޘ���{��m,F�Z>}�k���cu9tC=����(����e��e�ש\��Z[$0C��٧��j�<+??sH�^��X���V�Շ��̱��α+շ}���<��P���ƺ'<��]��fZ��dԫ�k+�sy��b:�v4�So�[�T?/_�Zڋ?��q����M;q��c�M˃�i��l����C�<���Z�6���Ρ�h'�١s,�@����5Ӄ�l�����ͮ߬G^�q�3TL$u����_���ҿT��Ͳ�����W�v�K��'O��{�1��ei�iN|�4W�SP?�U_%8���ص���?������p��L�]d
۳O��e|a3������7���ߔ���~z���F?���X)�e[�7}%�∃�ʢ��g��R��wkL2r�$7�v	T�c��5��hs�9hd�C�b���<�c񇰭��<��ɷ�qK�c7�g��G;1=�:��>c��9���!/M����?k��S��
�kkv�P�}I%�|��s�΁Cہ'���3�;�.?}��ž4mv���C3�9��k�12G����p�Tp}����=_��v��:����=��k��;�� -&Ƃ$U�*՗�c��$M<���'~7��Y˛�rh��!W��[�*}c�3��3����ɕ����
�����0��%P��^Z����7Xe�,��<1c��;'C��/VT����+��-�^j\���N<r��� o��Vi�������>�xe-��R�S��o~��c]t���_�a�jk�,
��k�,��T�6N�{��8�2�9�z��V���8�⛋>�j�L^�,���M�U/�.�e-��X[)�	~G7k�	x=u��G�ˉ��ʲ@ʤ�&����\sd�)��3u��hy}�9�|�c�'��1�d��h��?6ɋ�ʧߞ=k�5U����G�wt�q�/��u<�G�98y'U�Z9�^��oUj�6����ꥉӧT�ʼnIy�[���}�O��%e��3oqP�Է��gM��Xc)�.�9k����O
��^{�I|�i�fa(�|�#Sg�R��Ux}a+/U�~�EYb{2�R1Ҟ<e�kӣ�%�����*��os��~�i�����짟~����;�Y�;� ^Uo_/��8͢�on�-�^�)j����rlz���7e��ryib����J��U|���7N�o+3>6y�Ŷq������+�m���x�_xf}��v�2́Sy)~���Gb�
�O�1n�2���3%÷>�Oy���r}%M^�Ʒ���6�^��ig~���.b�-c7���!�2�K�N}������i��ESo��K{Xu-�*���ɍ}u-��Ҷ��ן���ً�j+E�sH]�K�'��#wLb��U�R1s(c�Mp|���%���sl�0�><���?��z��<��9Y�K��Y����<}reST|�S9���'�9���k�v�Y㫛������K?c��Ro�ڶ�9}n�Ys��9�1̶7@�U}q}�����E�����Yxm�>��!n��>��>>�o}�W�{����#N�N����K��͘)O�yA=�~Y^�9�޲�-~[�z���}J}���g��Ib4�Z���![�ĕ���f^)[�oc���%?CR����r�*fH������V��?�O9XcHS�
o|n��7Gy�Yg�����|e_�l���-�K�ߒ��I�$z�Է��:���ٔ#���>m���o������x�����b��m�	���W_��g�g���-ެo�S�vn�
��۶���Wg�{����fn몚kU��>��'֏�~�����O��-l.L�T�,��K[?�S��K�	?�3?�Q�@�/�)^Ө7�������^�_��o�.�ӗ�Ҧ�g��*y|8p����o~���H�vL�������z�?��s`�6�d��5�3q�ƶP�Y���k��q��g/��D��]+@��;���^r�%�/����KӋse����i;Ļ.������K�;C�c�_+�OT�o�� �KD�x|��+��M�.��#���7�,�W��wV����p������e͜�;-�|�G��4m��Sv�k��s|�0+mބ��m��+(I�bk�^�)�>�Ypi�(�ķ�3�<s����	����\�Ԍ��h=���H�C9�+�N-Ӈ|�d
�G���c+m��a|^�%��6��+_��B=�c��g�M�S���V��Ϩ��n�����D��ɠ��>��}�X�����Y��nz���W�0M�.Q��7�Er%V���p�.���׮�Xn����p�뻾kq�&�?��)��Öw�v����O�'k�5Y.i��-�-��[4���ٟ=�~��6))�L^�4m��J���ן2&�W���=Uk�d��QG6O��/rx�U.E�LK;72��/���=޹=��l�3@}5�y����,���K�/C{��>孿̣>�Ԫ��kco�+�7������mD�&`�yA�����ۙ_�X�Ɔ朦������\-���|�~��G�m������r��'k1C}}J)��j����ʵ���7ƑHC�Mߖc�1�O�z�,8����I�ey��Ox[���5��\�cKm�SN9�ḿ�db��-F&޳�~.Ň~�e��!�~�G��e�%k�̱Aщ���'�������)?�ƨ>�-V�ԜX���?�_j�OT<���'�,�4�"3��&f.�c�۸�e�h���'�q���ۍl��1^uȆvY#p��ډ�?�j�4����ƥk���-�j�?a�g�������{�(�!��1��{��Ŭ��`��PF�=�r=\r�o�.���?�/���:he�yY<�c��`���l\��FS6���O���Yo~=�9xd2��<�i��9|� ���7ޔ?l�s���Ţ�6��{E���2&rs�����ȴ��j`��X~�m�M�/��77x����M=}k5�c��
p�'��ҙ��%��蛸v�,�vZ?���͘-.��F,�իsLI�cJ��������M�S�A?y�C�ҳ	z�
��ڛ�����G�H��Z���go�z�u!?[�-�Go2b�(t��*Ը�7�_b3�\8==~�1�A����2sF//m�`���R���\
�צ�ڰF��A���vL�ۘ��ꯍC|֪�):�}���O&�K$�5ɔ��T�t*�U�Ƃ.G���~��޶J
���G�G�R��T��ԐK!�`-�?��:(-�~��ׯ}�U�St�����Tw�߃��DlrPqm)&��f�~�I~�W��6P�!�#M��z����A�L@,�94e���ʕ�tk�5k��:Գ�'�3��M8�x&�~�N:40}-K������><��H�;V(㲿��[�y��Ǥ���-1�9��ܨksi�=;m�>�x�l�ߩl��:��#��֡	I�O%�Xyi���ƕ��+?in�v\��vZ�O_l�����ؙ#>�x�3����|�Huct�8'.h�!�Ϥġϖ�񡍲���>��k/�ح�؅�uv�ۉ�?�<��y>ϙ�8�_�V�~S'����5���6k�B ig_>#k��)����v�ocF!w:�a��8r\9��$�O|���Cl@�-�>T�>��O�y���<D��uP��M8'�^&Eo���&��i���n�ڜ͋XG�r<�X�گZ�!?��r�{�����km�W[sR��$.׬v=:y�]���?���I$oe�+���"W5f���5�����F̽�i-��cU�t�_.��7���uWf�����6�X�s��<��Q?��x�?���fB����G�8m/^�z����ͻ��١pʠ��L_jSn_���K�p)�7v��h/cn��45��/yd�)�����G���kk/0副
vw�n�Rl�N���w�v+�9�A�d���]��i��Wl#q-w�q����K�A��v���i'�O?-V��.o���R�~ȷc4O��	X[�3o��|�#k��`�M�*�-_ԛI�7�K*�D{��`�M��3�n�m��g2W懎C��>eJ�����'^��G֓/�P�O�0oqP>;D
�o�/p��X��Ӷn�ֳO���n&�704�yi�A�1k�!l/F��)�<̝~;~�����W�bՋO{eڤN�������8�?sJ��<��}&dCy�G;��WF�v�fl��3@99���M�@��Q��>1ʓ�A&�8�.�Z^�V�J���V1�76�x�3�̇s�J���:ȡ�1zzu~��3�2�B�a/UG��G߮]m�Nn�r~b$o`�ɡo��������+�L�!{��J�����b��fc9g��1y�r��c�z��<���ۇj��!Z��������I'8s�����7x���S��`Z^;�6;E�q�)G��J�����O=|;g�Z_ܼ��׽�z�z��%�G���{�
4k��III�`&
��j'�U���X���X�H��u���n��s^ԧ_��/VZ�.��	�����^Z�ɵ�c��$i��L^����l4�`�߳O}�9����ٟ��5֦�g�O� ��6Ƀc�qjl8�<�^+��o�r<�s�LJ�&�r��s��=zڲ����[��| �o�߹lm��%�8���ry�D�\���t�I&�I�f����F���9��؏��xc���Y���9���yb୿�!轡N��Cs��ˋ��5և9LѲ�\���@�3�=(�&��@�<�=��-c��U��r��2kգ���x���%?U������z���9;p&ȳD�6��Y��g>ƺJs@R}Ч9�V�8(V�6�kU.M]�׷�ż�E/�2���mK^���'��vL���lnM2��O���ޫ?��K�U�6P�<�?��is����]tS%w�9[L&��B9@�=:do1�ճEֳ�¶�ͳ��\��l�Sr�si�Ckg��<��9�����!|O��&��<���b���������e�\�ܵ\B�`��L���Z^�X:s0�L?晲ĵ~������3���WY�|�F?4���S���)W6�O�X(�Д�+���	xJ4��0�v'7@
�f�Nn�i�R6���ő٤<��h������Rtb�ib���ҥ<���[}�\˧L�Pp4e���km�N�ۘ���J���q!��щ�&�\]*Mn��K��s����v��2�1-n�~?C�=��,Џ�ȏ,R���8��^9�C:0m�zcW�q䍓1���H��z���_K���;�m����g�
z���j�mBs��B�Iھ��Ĵ}�ȵA&���a�O�K?@�\�vQ^����JI�Z �Rus�]�W�~���Z�9$>���dž��Npd�v��]�n��'�U���p�����}�į�������/�g�> K��3��}��;ɛ_.p�׋��f}�p=�2m�D�E�N�9J��1d��!�%�d��V��8�S���j��7��eĩ�J��Z����ot�<�^���
�h��(���c"'�֎�̀�����/�&�h#۴oy�Ȓj+Me���C�g�j��`r��/�TR��B�9�Č�l�駟1[ukY[}�$�1�2�����=z����Ɛ�Xc�
��T�����S?��n���j;D'7@%�o�A(��+w�K���ϸ�V��#v�_C����?�͍>��ԏ�O��9b�ï���ݴ�k�jm�Я�`S��)����j�y3X&��T�1��[rb���q�i�ç~.ol��@֠7fu96e�o���b�m�'}�l�W&>e�OxmZ��ԧ�![����'��>������-��M�H��"�gƔ��#�8���'V�8�1��7j-�˼��s�ы�&F_=�}�#��ŵ��)�8h�S[c���=�.��6y����r��t�vu98|�"���v��֧���@4^]�����Wi�_O����ɋ�Z�W{��9������C맇m}f��.}��'v�J�m�q;kW�!:yx׻���M��`�'����l����>|+_&����XRtɧ�<zq�)��jC������y�6��ƕ�~�ٗ"�5}���74e�O�7D�^�?_��K����o�`�
5h&��vۡ�ć���bW��-���O�/�<���+ӧz�e`��N9�;d����~��R�`�k��W���G���ô:��̸Y��w��َ�h��,�-���&�;��W�E�/m���l�b#v��+�ڇ�/�xNp� {q�蔉�/�k�{�!�>��C6�i3�CG�վ���V�kV�!:y���3k��o��b��J`;rcJS��erh}��C�ŪN?��4}dN-6�ۓc�����I�"x�tTw����o_q����m�3>��n�w�P�A?�]u[�췼��<�	>}��27�>zxt��ӎ�	�)��G/F\b��y)�\��P�g|�\�'6�>dg��KJ���n>���1z�9{U���uSq������Mp�n���7f�s�����ŎÅ-�r��F�6�%V��ʆh�g��t��o�,m|�%�L:�w��7�6��g��f�;Fgm���7׮�+Kul��J6���)�~�-ܜ�h�6e=?=�2���%n����bԷ���<��r��K?�a��N^�<��8��+�l��g�`XA>T�K ���+���T�t���?�1�T̷����w�"j7�p�]�\�T]�p̏��b������M����?���J�}���&]t:ԓ�I.c�q���K��[*@
���C�J�4e-��伤9���>[{m��F��/�����>����.�n���L �
�<m�W���+����p���}��?��2s.V���óR.ebz��Ŧ��ֺ���):���j��>�C�y�����k���-n�?|���7�x��>0�~r2Q�ꂗ��t���o�k|t�;����0�
p����L�&�j���c�n�[��ȵ�_��_l|�sw�T��ܙY��y����`�L��\Sأ���x�����cy�_?��P��ʣo[�pk~̾����\X<�-�_��Ɨ��ť�[��CA��C��L�i����W��ݳ���u�>������s��|�j��M��d&/�8�l)�^��W�]bw��馛68���Y�W~?#�|�����L�7��!{���2hm����~�ܶ��g��?�O��*�O�%�;�L
Y�������gߓi?F=�az�ce�󳃼�_���?��C�=�[J��m�z�G��L����_����F�#�h����8�D�X����^[�r��ĕ;P��V�!L�w�w��J�'�'[��ư����\�t��<ض�������&P��緧�n̞�T�?ߘ9�ᗺ���_~U]+~ʁľ�A8)���"��j�
�6e���G��g�֬5��۲�ؤm�G�q��C[�%�X��ii��z����U�լ̓�]zl�~+7��	:p��i�Q�X���~��-~r3���)[��儌zM��<v��[_��ɋq���T���8�����W^;�Y���/CW�썵��;�0�����Ny��z����|��-~m,��,��������86�R�����Sgp�[�b�S/m�ť�2�v�uErG�A����+m������T�{S���9 �$́<uCl�9�V��ĉ�octj���O�^R�1�M2w��|g?y㊁f��d���<zrF�j���~�59���#�JV��=~zb�1<��L��[*^{m���Yb��?�ş�������2�J �w��C�-oMS?'vb�ӇqRF�����oH?%_y��o����s��$����c��}����Z���/T^�ݤ���̭�o��a��[��G>�jl���:�"�u��ͩ�9�u)~c=�|s���_y�%�T2o�:%bq�g!Rn�Iӧ���Z,ei'�.~���[?ڨS�[�xc�}� cޭߔ;~���{���*������W��)ʣϺ}kq
;�_y���O|M%q�2�S0�4m����S������������-�+ru�v�n'N�'uП:���FQ���_ڠ��L���^*��a���`��;��_Ӂ�mk��Q"���8�9`)v�>��4q`��C�Zk����G�E6�ԙ�x�CG�L���9h�Z�J��uq��q`��U�~�˚�.y��ST{)~So�)����58�ok��}{e]ݚ�6��ٶ2�kق�7��������+f�j���D��G��x�I[;�P��=v�ۣY���~Rk��׌���,�9�S6�Z~j�Z�I{�~V����{�>_�߲�Y`,�^�[�<�G�m.u.~>�����qRx�R����2��'M>}�Ci�{Pr�2�.�O|���秵Ͼ�Ct*^Ϯ�p�͵׃̖m{��yE�n��
��E�r��i��]�����@�C1�C������q�C�b�I�؃mƝ2�"�e_Y��&O��6%w�Eg��u'�N��[�P|���)�+�n����M�J�m|�h'����S�Ԃ!�7�|��
��G�=�6i�z04p��&myl��Z{tڈ�*�W���?��j�6���1"��fN��⋟��'�cm��V}��#��e���e?���ر�lq��B�'���^�c�+�>�g�����E�X��k�*�����?1����O��}�VL敼z��ث~kg?�>S��b���Nj[ݪ�-?y���>��|鬳κ[%��:=Mv;�Z�,���<���x�;�%F�X��_e�1]3���S&/5FRtcz����y�R�s��=���7�i���w�3?�Z����W��������$7�$��-�؛Dd�}��߽HG���9!�3s׏��'K����M�!Xt-9My�9��7ch'"��޾T�eiϞ<����N;�����r=C��j��{���m��bF��@�4i��/yQHx�һ8)���Ħ\��Uh���o�m|���Ȝ�-����7���e�C���������m�����*۱K ��jxD�Q��]�����|(&�Wpd�s!(�j����%���13p=��V����ӧ�Wg_�����Ƙ��۸�̑�+���+�x����2��N{q���M�EG���ݢ��"㫜l�^CO����F�2��VN?um~��'��#.�W�?u��K�ĭB�5ן�
�>��z���UbO����u��_�ğZ��Щ�"0H��wROL6@��
�ŗ���~!1��X�c��Ƿ��{1�����ǘ�:��R6D{~[,���zy��e�ZC���;�cU�xf�z-��q�W�$�w�I'���[�C&7#.�A<��tc�|���8��|�R6$ן���X��6�жe�Vgf
;�C�F���s�V����P�]y��+�@����Z`���Ŧl�@�-�{���Tϓ�J��0AN���kC_~�l�Q�ʴO:�>}ic��/F;1�[�~
��2Xm�����<I���u�sQ�we�ˮ\9Ⱥ�鬳��̏�i��q���>ͅ���.�!>�h\g����m�?%O}�O��8R�R�R�Ҟ�'�	���^��C�+w8+�3���]ҿ��w���
@���ڟz�Cr�������Aۗ�:�e�sO�&���XFvh|���O.ڧ.y�M:�G���O��=�2)>�>���W�����og���w�(���^Z�����$���/M�ܖ�cS���>�)�̭�����H��b�}b���!?��ݎ�~�z}d�E��F�z�̚��k7�m�Oy�SΨ��U��q*�"-���=Y�{�o�!���d��j��7�ӵ>����o�r�J,���8�9��u&���D�����g��n�~	d�|V��Ͼ�.�.*�q\v�,J���&&��)��ء=�g�
�rH�*��cm�z}o�ϔ=q�H�-e!S?|.�9�<(��qG�@�x}�����n�=��韮>묳j}}�B����R�x�,,��$��nc��v7�X�ꤽ��t�L���s���i��oy�Sk��Q^�}�������` uS|ŁN��~��c�YP0�� ~�ء?�D��Ͳeܛk�F�t�ӥl��1���b�ʭ�};/�OL�ſ�)�ߪ��K�Wt|��R�	�����zxm���x���i������!y��=;��	�|[������?�3�4���tb�bs�#�H96ʵ��O������֛]�W��t�������S���{7ւ�N��S��\:Tx�N�z��82[J?�Ә.��
a�鬛�Z�����^�r�%e��ħ�{O?�t��ai�wi���3���>����
�hC��E+ :.N�/��,34&��V�&m���յ��6����}DžL�_���q^�s��W�Z���?��U����u0�/��~�����<��&�fYl� �§���Ҕ��c���| Ì���n��qK�O�^*F=�'e�ԥ��Y�цW~>�V��S�8���e�����a����.xp�}U�C�`�J�M�%&i/�����k�	�|`f���Z�1lO����Ďa�
��|�O�7�,�z�sa}��_R8��v���U�����c,2?<��s�/��?b�������0o�L�ҏ��'���=�ͥ���wؕ�
<M:G[�8i�#շ}(v.~�W�����o_l�TX�<���^�q�,�4'#y�P�����om�J�%F;N��	Rq��66q��^=�� K|��m��ً1��!�Nlb���ms��O�g��?�����r��Ǡo�'>񉯟s�9�Wg��֥ƣ("7�99�-���7�������'H��ڸx�K��ߤ.��I}b��S�O?�R�8�ң��+�_)op�j�Z��u�;�4AG{D�/N�(��0���uZ�W]'��٥|,vN��z.9��Po!%Vjkec�&�ũ3g���W���I�
5����W}nz��7�v�+�C9͕�3@&��f�mU��W��g�(�����]o�7�>��Y�M�~�41�O]O�J���W�v�d���~�K>��y���}�S����
���N9��}�Ȗ�M�y��B>�6����Ȅ����D��.f���A9��ǣ�c~敺L�����Ħ�:eC���/���z&.�<���j�?�>��?���6|^�Go~���J�\.�x�Mi:Aɷ2t4���Ȝ��^N(O�+^��,�(��t��Xh�o���I�.���=���p�åa����4_�Wi>��j�|D����XQ���㫰��B��7��NLN\&�qʥڴ}�=�x)���8d#����d����V�}x��/�-K��=7�<���G��uO{��$,�E
�s$�����:��&�~<���:y6`,L��M�tL�x���GǦ��߶����o
'Vm>i�)��9��}�K]K�\�l�9x}��O��;Z��ܿsv�s�Mn�닧�b��&�<&�M�fp���w1�r�N�4e�d==���	2y�?���#����ӧ���-��}6�oX֦��΀�Y�]A��
@}k���G�?W�{��!С�Nh�ډ�E�-6��ztl�~է����.��i)��w��U1x��^��]+W/õ>Z�/�C�_�W��,~�)W�}N��
`]��t�Ղ��&o�U�z�8#0YSM�O~H��.m�Y$l�������:�={��1{tn4���8�z��æ���tY��x'�M�q�^%�#�b���I�J��2}8���C�<'D.��U&E.��
�v1&M�<reɷ���υo,�l��?DY��-�����p��y(�nˇ�v;������>F�;��e�W�c���x_��,�;�ci��vA��⇸\~pд��/�:1�Z���tb�-��:i�������-�͵��>���w��]�0ds�ɏ�3@��
j�^Y�ˢ�h���&=��c�j���~k��C�OJ]�h'M;yib�U}겏�׆��R�3��o�r���t��h3�2��4eu���iљ5���D�Ńz/�XH���I�o
ŜZ�S��;�����:��n����z�����t��~��
`��Q��pq]��d�Ǧ5�+��=�Nm���9��c8t��<����3T���j�}�~���⏉
����W;/��A� gA��D{����P�8��l� ���n}.zs)�k����k��w����h�S�	�{�k!>�&�K��ձ�Ⲉ���حK�e6�Ԣv<�!�r��*�e�����Gj㿥>r��ƿ%}�1�rb7��W��
��8py$u!���ͤ)sc�p��'�բ�t��.s�x4_�;�1z�o�,�\pn-6�3j�/un7Eo�%~���fω!fl��K-��kXg�7^~��WM�w����3�{Ew���P�O��u~A���{%�
Q�jq��z� ;�6��=��˘��8��+u�e�ڴ�~ЃtE}q��A��c�_o���?���,��Z��_��e��uܣg�F`���=��x��y���o�l����k���u����_^oX��T	\�[*��[�1��Mt=:|Bm��E������g=���﮳	8X�l��V��븶��Ԃ�tѫk��]]�_q,�Ď�j�n��s<�1�*����.=������Z��Z<�;�o29N�(��n��l�R�z��)�-��o��}s�n.zS����|�ok��������ۺ�
�+�����
�+�����
�+�����
�+�����
�+�����
�+0^������qTIEND�B`�// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Displays a webview based authorization dialog.
 * @param {string} key A unique identifier that the caller can use to locate
 *     the dialog window.
 * @param {string} url A URL that will be loaded in the webview.
 * @param {string} mode 'interactive' or 'silent'. The window will be displayed
 *     if the mode is 'interactive'.
 */
function showAuthDialog(key, url, mode) {
  const options =
      {frame: 'none', id: key, minWidth: 1024, minHeight: 768, hidden: true};
  chrome.app.window.create(
      'scope_approval_dialog.html', options, function(win) {
        win.contentWindow.addEventListener('load', function(event) {
          let windowParam;
          if (mode == 'interactive') {
            windowParam = win;
          }
          win.contentWindow.loadAuthUrlAndShowWindow(url, windowParam);
        });
      });
}

chrome.identityPrivate.onWebFlowRequest.addListener(showAuthDialog);
/* Copyright (c) 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

body {
  margin: 0;
  padding: 0;
}

.titlebar {
  -webkit-app-region: drag;
  background-color: white;
  height: 26px;
  white-space: nowrap;
  width: 100%;
}

.titlebar-border {
  border-bottom: 1px solid #e5e5e5;
}

.titlebar-close-button {
  background-image: -webkit-image-set(
    url(chrome://theme/IDR_CLOSE_DIALOG) 1x,
    url(chrome://theme/IDR_CLOSE_DIALOG@2x) 2x);
  -webkit-app-region: no-drag;
  height: 14px;
  margin: 6px;
  position: absolute;
  right: 0;
  width: 14px;
}

.titlebar-close-button:active {
  background-image: -webkit-image-set(
    url(chrome://theme/IDR_CLOSE_DIALOG_P) 1x,
    url(chrome://theme/IDR_CLOSE_DIALOG_P@2x) 2x);
}

.titlebar-close-button:hover {
  background-image: -webkit-image-set(
    url(chrome://theme/IDR_CLOSE_DIALOG_H) 1x,
    url(chrome://theme/IDR_CLOSE_DIALOG_H@2x) 2x);
}

.content {
  height: auto;
  width: 100%;
}
<html>
  <head>
    <link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
    <link rel="stylesheet" type="text/css" href="scope_approval_dialog.css">
    <script src="scope_approval_dialog.js"></script>
  </head>
  <body>
    <div class="titlebar">
      <span class="titlebar-close-button"></span>
    </div>
    <webview class="content" id="providerview"></webview>
  </body>
</html>
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

let webview;

/**
 * Points the webview to the starting URL of a scope authorization
 * flow, and unhides the dialog once the page has loaded.
 * @param {string} url The url of the authorization entry point.
 * @param {Object} win The dialog window that contains this page. Can
 *     be left undefined if the caller does not want to display the
 *     window.
 */
function loadAuthUrlAndShowWindow(url, win) {
  // Send popups from the webview to a normal browser window.
  webview.addEventListener('newwindow', function(e) {
    e.window.discard();
    window.open(e.targetUrl);
  });

  // Request a customized view from GAIA.
  webview.request.onBeforeSendHeaders.addListener(
      function(details) {
        headers = details.requestHeaders || [];
        headers.push({'name': 'X-Browser-View', 'value': 'embedded'});
        return {requestHeaders: headers};
      },
      {
        urls: ['https://accounts.google.com/*'],
      },
      ['blocking', 'requestHeaders']);

  if (!url.toLowerCase().startsWith('https://accounts.google.com/')) {
    document.querySelector('.titlebar').classList.add('titlebar-border');
  }

  webview.src = url;
  if (win) {
    webview.addEventListener('loadstop', function() {
      win.show();
    });
  }
}

document.addEventListener('DOMContentLoaded', function() {
  webview = document.querySelector('webview');

  document.querySelector('.titlebar-close-button').onclick = function() {
    window.close();
  };

  chrome.resourcesPrivate.getStrings('identity', function(strings) {
    document.title = strings['window-title'];
  });
});
<!doctype html>
<html $i18n{a11yenhanced}>
<head>
  <meta charset="utf-8">

  <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css">
  <link rel="stylesheet" href="index.css">
</head>
<body>

<viewer-pdf-toolbar id="toolbar" hidden></viewer-pdf-toolbar>

<div id="sizer"></div>
<viewer-password-screen id="password-screen"></viewer-password-screen>

<viewer-zoom-toolbar id="zoom-toolbar"></viewer-zoom-toolbar>

<viewer-page-indicator id="page-indicator"></viewer-page-indicator>

<viewer-error-screen id="error-screen"></viewer-error-screen>



<div id="content"></div>

</body>
<script type="module" src="main.js"></script>
</html>
/* Copyright 2015 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

html {
  /* The viewer implements a custom pinch zoom. */
  touch-action: pan-x pan-y;
}

body {
  background-color: rgb(82, 86, 89);
  color: var(--primary-text-color);
  line-height: 154%;
  margin: 0;
}

viewer-page-indicator {
  opacity: 0;
  visibility: hidden;
  z-index: 2;
}

viewer-pdf-toolbar {
  position: fixed;
  width: 100%;
  z-index: 4;
}

#content {
  height: 100%;
  position: fixed;
  width: 100%;
  z-index: 1;
}


viewer-ink-host,
#plugin {
  height: 100%;
  position: absolute;
  width: 100%;
}

#sizer {
  position: absolute;
  z-index: 0;
}

@media(max-height: 250px) {
  viewer-pdf-toolbar {
    display: none;
  }
}

@media(max-height: 200px) {
  viewer-zoom-toolbar {
    display: none;
  }
}

@media(max-width: 300px) {
  viewer-zoom-toolbar {
    display: none;
  }
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import './elements/viewer-error-screen.js';
import './elements/viewer-page-indicator.js';
import './elements/viewer-password-screen.js';
import './elements/viewer-pdf-toolbar.js';
import './elements/viewer-zoom-toolbar.js';
import './elements/shared-vars.js';
// 

import {BrowserApi, createBrowserApi} from './browser_api.js';
import {PDFViewer} from './pdf_viewer.js';

/**
 * Global PDFViewer object, accessible for testing.
 *
 * @type Object
 */
window.viewer = null;


/**
 * Stores any pending messages received which should be passed to the
 * PDFViewer when it is created.
 *
 * @type Array
 */
const pendingMessages = [];

/**
 * Handles events that are received prior to the PDFViewer being created.
 *
 * @param {Object} message A message event received.
 */
function handleScriptingMessage(message) {
  pendingMessages.push(message);
}

/**
 * Initialize the global PDFViewer and pass any outstanding messages to it.
 *
 * @param {!BrowserApi} browserApi
 */
function initViewer(browserApi) {
  // PDFViewer will handle any messages after it is created.
  window.removeEventListener('message', handleScriptingMessage, false);
  window.viewer = new PDFViewer(browserApi);
  while (pendingMessages.length > 0) {
    window.viewer.handleScriptingMessage(pendingMessages.shift());
  }
}

/**
 * Determine if the content settings allow PDFs to execute javascript.
 *
 * @param {!BrowserApi} browserApi
 * @return {!Promise<!BrowserApi>}
 */
function configureJavaScriptContentSetting(browserApi) {
  return new Promise((resolve, reject) => {
    chrome.contentSettings.javascript.get(
        {
          'primaryUrl': browserApi.getStreamInfo().originalUrl,
          'secondaryUrl': window.location.origin
        },
        (result) => {
          browserApi.getStreamInfo().javascript = result.setting;
          resolve(browserApi);
        });
  });
}

/**
 * Entrypoint for starting the PDF viewer. This function obtains the browser
 * API for the PDF and constructs a PDFViewer object with it.
 */
function main() {
  // Set up an event listener to catch scripting messages which are sent prior
  // to the PDFViewer being created.
  window.addEventListener('message', handleScriptingMessage, false);
  let chain = createBrowserApi();

  // Content settings may not be present in test environments.
  if (chrome.contentSettings) {
    chain = chain.then(configureJavaScriptContentSetting);
  }

  chain.then(initViewer);
}

main();
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {assert, assertNotReached} from 'chrome://resources/js/assert.m.js';
import {EventTracker} from 'chrome://resources/js/event_tracker.m.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
import {$, hasKeyModifiers, isRTL} from 'chrome://resources/js/util.m.js';

import {BrowserApi} from './browser_api.js';
import {ContentController, InkController, MessageData, PluginController, PrintPreviewParams} from './controller.js';
import {Bookmark} from './elements/viewer-bookmark.js';
import {FitToChangedEvent} from './elements/viewer-zoom-toolbar.js';
import {GestureDetector} from './gesture_detector.js';
import {PDFMetrics} from './metrics.js';
import {NavigatorDelegate, PdfNavigator} from './navigator.js';
import {OpenPdfParamsParser} from './open_pdf_params_parser.js';
import {FittingType} from './pdf_fitting_type.js';
import {DeserializeKeyEvent, LoadState, SerializeKeyEvent} from './pdf_scripting_api.js';
import {ToolbarManager} from './toolbar_manager.js';
import {LayoutOptions, Point, Viewport} from './viewport.js';
import {ViewportScroller} from './viewport_scroller.js';
import {ZoomManager} from './zoom_manager.js';

/**
 * @typedef {{
 *   source: Object,
 *   origin: string,
 *   data: !MessageData,
 * }}
 */
let MessageObject;

/**
 * @typedef {{
 *   type: string,
 *   height: number,
 *   width: number,
 *   layoutOptions: (!LayoutOptions|undefined),
 *   pageDimensions: Array
 * }}
 */
let DocumentDimensionsMessageData;

/**
 * @typedef {{
 *   type: string,
 *   url: string,
 *   disposition: !PdfNavigator.WindowOpenDisposition,
 * }}
 */
let NavigateMessageData;

/**
 * @typedef {{
 *   type: string,
 *   page: number,
 *   x: number,
 *   y: number,
 *   zoom: number
 * }}
 */
let DestinationMessageData;

/**
 * @typedef {{
 *   type: string,
 *   title: string,
 *   bookmarks: !Array<!Bookmark>,
 *   canSerializeDocument: boolean,
 * }}
 */
let MetadataMessageData;

/**
 * @typedef {{
 *   hasUnsavedChanges: (boolean|undefined),
 *   fileName: string,
 *   dataToSave: !ArrayBuffer
 * }}
 */
let RequiredSaveResult;

/** @return {number} Width of a scrollbar in pixels */
function getScrollbarWidth() {
  const div = document.createElement('div');
  div.style.visibility = 'hidden';
  div.style.overflow = 'scroll';
  div.style.width = '50px';
  div.style.height = '50px';
  div.style.position = 'absolute';
  document.body.appendChild(div);
  const result = div.offsetWidth - div.clientWidth;
  div.parentNode.removeChild(div);
  return result;
}

/**
 * Return the filename component of a URL, percent decoded if possible.
 * @param {string} url The URL to get the filename from.
 * @return {string} The filename component.
 */
export function getFilenameFromURL(url) {
  // Ignore the query and fragment.
  const mainUrl = url.split(/#|\?/)[0];
  const components = mainUrl.split(/\/|\\/);
  const filename = components[components.length - 1];
  try {
    return decodeURIComponent(filename);
  } catch (e) {
    if (e instanceof URIError) {
      return filename;
    }
    throw e;
  }
}

/**
 * Whether keydown events should currently be ignored. Events are ignored when
 * an editable element has focus, to allow for proper editing controls.
 * @param {Element} activeElement The currently selected DOM node.
 * @return {boolean} True if keydown events should be ignored.
 */
export function shouldIgnoreKeyEvents(activeElement) {
  while (activeElement.shadowRoot != null &&
         activeElement.shadowRoot.activeElement != null) {
    activeElement = activeElement.shadowRoot.activeElement;
  }

  return (
      activeElement.isContentEditable ||
      (activeElement.tagName == 'INPUT' && activeElement.type != 'radio') ||
      activeElement.tagName == 'TEXTAREA');
}

/**
 * Creates a new PDFViewer. There should only be one of these objects per
 * document.
 */
export class PDFViewer {
  /**
   * @param {!BrowserApi} browserApi An object providing an API to the browser.
   */
  constructor(browserApi) {
    /** @private {!BrowserApi} */
    this.browserApi_ = browserApi;

    /** @private {string} */
    this.originalUrl_ = this.browserApi_.getStreamInfo().originalUrl;

    /** @private {string} */
    this.javascript_ = this.browserApi_.getStreamInfo().javascript || 'block';

    /** @private {!LoadState} */
    this.loadState_ = LoadState.LOADING;

    /** @private {?Object} */
    this.parentWindow_ = null;

    /** @private {?string} */
    this.parentOrigin_ = null;

    /** @private {boolean} */
    this.isFormFieldFocused_ = false;

    /** @private {number} */
    this.beepCount_ = 0;

    /** @private {!Array} */
    this.delayedScriptingMessages_ = [];

    /** @private {!PromiseResolver} */
    this.loaded_;

    /** @private {boolean} */
    this.initialLoadComplete_ = false;

    /** @private {boolean} */
    this.isPrintPreview_ = location.origin === 'chrome://print';
    document.documentElement.toggleAttribute(
        'is-print-preview', this.isPrintPreview_);

    /** @private {boolean} */
    this.isPrintPreviewLoadingFinished_ = false;

    /** @private {boolean} */
    this.isUserInitiatedEvent_ = true;

    /** @private {boolean} */
    this.hasEnteredAnnotationMode_ = false;

    /** @private {boolean} */
    this.hadPassword_ = false;

    /** @private {boolean} */
    this.canSerializeDocument_ = false;

    /** @private {!EventTracker} */
    this.tracker_ = new EventTracker();

    PDFMetrics.record(PDFMetrics.UserAction.DOCUMENT_OPENED);

    // Parse open pdf parameters.
    /** @private {!OpenPdfParamsParser} */
    this.paramsParser_ = new OpenPdfParamsParser(
        destination => this.pluginController_.getNamedDestination(destination));
    const toolbarEnabled =
        this.paramsParser_.getUiUrlParams(this.originalUrl_).toolbar &&
        !this.isPrintPreview_;

    // The sizer element is placed behind the plugin element to cause scrollbars
    // to be displayed in the window. It is sized according to the document size
    // of the pdf and zoom level.
    this.sizer_ = /** @type {!HTMLDivElement} */ ($('sizer'));

    /** @private {?ViewerPageIndicatorElement} */
    this.pageIndicator_ = this.isPrintPreview_ ?
        /** @type {!ViewerPageIndicatorElement} */ ($('page-indicator')) :
        null;

    /** @private {?ViewerPasswordScreenElement} */
    this.passwordScreen_ =
        /** @type {!ViewerPasswordScreenElement} */ ($('password-screen'));
    this.passwordScreen_.addEventListener('password-submitted', e => {
      this.onPasswordSubmitted_(
          /** @type {!CustomEvent<{password: string}>} */ (e));
    });

    /** @private {?ViewerErrorScreenElement} */
    this.errorScreen_ =
        /** @type {!ViewerErrorScreenElement} */ ($('error-screen'));
    // Can only reload if we are in a normal tab.
    if (chrome.tabs && this.browserApi_.getStreamInfo().tabId != -1) {
      this.errorScreen_.reloadFn = () => {
        chrome.tabs.reload(this.browserApi_.getStreamInfo().tabId);
      };
    }

    // Create the viewport.
    const shortWindow =
        window.innerHeight < PDFViewer.TOOLBAR_WINDOW_MIN_HEIGHT;
    const topToolbarHeight =
        (toolbarEnabled) ? PDFViewer.MATERIAL_TOOLBAR_HEIGHT : 0;
    const defaultZoom =
        this.browserApi_.getZoomBehavior() == BrowserApi.ZoomBehavior.MANAGE ?
        this.browserApi_.getDefaultZoom() :
        1.0;

    /** @private {!Viewport} */
    this.viewport_ = new Viewport(
        window, this.sizer_, getScrollbarWidth(), defaultZoom,
        topToolbarHeight);
    this.viewport_.setViewportChangedCallback(() => this.viewportChanged_());
    this.viewport_.setBeforeZoomCallback(
        () => this.currentController_.beforeZoom());
    this.viewport_.setAfterZoomCallback(
        () => this.currentController_.afterZoom());
    this.viewport_.setUserInitiatedCallback(
        userInitiated => this.setUserInitiated_(userInitiated));
    window.addEventListener('beforeunload', () => this.resetTrackers_());

    // Create the plugin object dynamically so we can set its src. The plugin
    // element is sized to fill the entire window and is set to be fixed
    // positioning, acting as a viewport. The plugin renders into this viewport
    // according to the scroll position of the window.
    /** @private {!HTMLEmbedElement} */
    this.plugin_ =
        /** @type {!HTMLEmbedElement} */ (document.createElement('embed'));

    // NOTE: The plugin's 'id' field must be set to 'plugin' since
    // chrome/renderer/printing/print_render_frame_helper.cc actually
    // references it.
    this.plugin_.id = 'plugin';
    this.plugin_.type = 'application/x-google-chrome-pdf';

    // Handle scripting messages from outside the extension that wish to
    // interact with it. We also send a message indicating that extension has
    // loaded and is ready to receive messages.
    window.addEventListener('message', message => {
      this.handleScriptingMessage(/** @type {!MessageObject} */ (message));
    }, false);

    this.plugin_.setAttribute('src', this.originalUrl_);
    this.plugin_.setAttribute(
        'stream-url', this.browserApi_.getStreamInfo().streamUrl);
    let headers = '';
    for (const header in this.browserApi_.getStreamInfo().responseHeaders) {
      headers += header + ': ' +
          this.browserApi_.getStreamInfo().responseHeaders[header] + '\n';
    }
    this.plugin_.setAttribute('headers', headers);

    this.plugin_.setAttribute('background-color', PDFViewer.BACKGROUND_COLOR);
    this.plugin_.setAttribute('top-toolbar-height', topToolbarHeight);
    this.plugin_.setAttribute('javascript', this.javascript_);

    if (this.browserApi_.getStreamInfo().embedded) {
      this.plugin_.setAttribute(
          'top-level-url', this.browserApi_.getStreamInfo().tabUrl);
    } else {
      this.plugin_.setAttribute('full-frame', '');
    }

    $('content').appendChild(this.plugin_);

    /** @private {!PluginController} */
    this.pluginController_ = new PluginController(
        this.plugin_, this.viewport_, () => this.isUserInitiatedEvent_,
        () => this.loaded);
    this.tracker_.add(
        this.pluginController_.getEventTarget(), 'plugin-message',
        e => this.handlePluginMessage_(e));

    /** @private {!InkController} */
    this.inkController_ = new InkController(this.viewport_);
    this.tracker_.add(
        this.inkController_.getEventTarget(), 'stroke-added',
        () => chrome.mimeHandlerPrivate.setShowBeforeUnloadDialog(true));
    this.tracker_.add(
        this.inkController_.getEventTarget(), 'set-annotation-undo-state',
        e => this.setAnnotationUndoState_(e));

    /** @private {!ContentController} */
    this.currentController_ = this.pluginController_;

    // Setup the button event listeners.
    /** @private {!ViewerZoomToolbarElement} */
    this.zoomToolbar_ =
        /** @type {!ViewerZoomToolbarElement} */ ($('zoom-toolbar'));
    this.zoomToolbar_.isPrintPreview = this.isPrintPreview_;
    this.zoomToolbar_.addEventListener(
        'fit-to-changed',
        e => this.fitToChanged_(
            /** @type {!CustomEvent<FitToChangedEvent>} */ (e)));
    this.zoomToolbar_.addEventListener(
        'zoom-in', () => this.viewport_.zoomIn());
    this.zoomToolbar_.addEventListener(
        'zoom-out', () => this.viewport_.zoomOut());

    /** @private {!GestureDetector} */
    this.gestureDetector_ = new GestureDetector(assert($('content')));
    this.gestureDetector_.addEventListener(
        'pinchstart', e => this.onPinchStart_(e));
    this.sentPinchEvent_ = false;
    this.gestureDetector_.addEventListener(
        'pinchupdate', e => this.onPinchUpdate_(e));
    this.gestureDetector_.addEventListener(
        'pinchend', e => this.onPinchEnd_(e));

    /** @private {?ViewerPdfToolbarElement} */
    this.toolbar_ = null;
    if (toolbarEnabled) {
      this.toolbar_ = /** @type {!ViewerPdfToolbarElement} */ ($('toolbar'));
      this.toolbar_.hidden = false;
      this.toolbar_.addEventListener('save', () => this.save_());
      this.toolbar_.addEventListener('print', () => this.print_());
      this.toolbar_.addEventListener(
          'undo', () => this.currentController_.undo());
      this.toolbar_.addEventListener(
          'redo', () => this.currentController_.redo());
      this.toolbar_.addEventListener(
          'rotate-right', () => this.rotateClockwise_());
      this.toolbar_.addEventListener('annotation-mode-toggled', e => {
        this.annotationModeToggled_(
            /** @type {!CustomEvent<{value: boolean}>} */ (e));
      });
      this.toolbar_.addEventListener(
          'annotation-tool-changed',
          e => this.inkController_.setAnnotationTool(e.detail.value));

      this.toolbar_.docTitle = getFilenameFromURL(this.originalUrl_);
    }

    document.body.addEventListener('change-page', e => {
      this.viewport_.goToPage(e.detail.page);
      if (e.detail.origin == 'bookmark') {
        PDFMetrics.record(PDFMetrics.UserAction.FOLLOW_BOOKMARK);
      } else if (e.detail.origin == 'pageselector') {
        PDFMetrics.record(PDFMetrics.UserAction.PAGE_SELECTOR_NAVIGATE);
      }
    });

    document.body.addEventListener('change-zoom', e => {
      this.viewport_.setZoom(e.detail.zoom);
    });

    document.body.addEventListener('change-page-and-xy', e => {
      const point = this.viewport_.convertPageToScreen(e.detail.page, e.detail);
      this.goToPageAndXY_(e.detail.origin, e.detail.page, point);
    });

    document.body.addEventListener('navigate', e => {
      const disposition = e.detail.newtab ?
          PdfNavigator.WindowOpenDisposition.NEW_BACKGROUND_TAB :
          PdfNavigator.WindowOpenDisposition.CURRENT_TAB;
      this.navigator_.navigate(e.detail.uri, disposition);
    });

    document.body.addEventListener('dropdown-opened', e => {
      if (e.detail == 'bookmarks') {
        PDFMetrics.record(PDFMetrics.UserAction.OPEN_BOOKMARKS_PANEL);
      }
    });

    /** @private {!ToolbarManager} */
    this.toolbarManager_ =
        new ToolbarManager(window, this.toolbar_, this.zoomToolbar_);

    // Set up the ZoomManager.
    /** @private {!ZoomManager} */
    this.zoomManager_ = ZoomManager.create(
        this.browserApi_.getZoomBehavior(), () => this.viewport_.getZoom(),
        zoom => this.browserApi_.setZoom(zoom),
        this.browserApi_.getInitialZoom());
    this.viewport_.setZoomManager(this.zoomManager_);
    this.browserApi_.addZoomEventListener(
        zoom => this.zoomManager_.onBrowserZoomChange(zoom));

    // Setup the keyboard event listener.
    document.addEventListener(
        'keydown',
        e => this.handleKeyEvent_(/** @type {!KeyboardEvent} */ (e)));
    document.addEventListener('mousemove', e => this.handleMouseEvent_(e));
    document.addEventListener('mouseout', e => this.handleMouseEvent_(e));
    document.addEventListener(
        'contextmenu', e => this.handleContextMenuEvent_(e));

    const tabId = this.browserApi_.getStreamInfo().tabId;
    /** @private {!PdfNavigator} */
    this.navigator_ = new PdfNavigator(
        this.originalUrl_, this.viewport_, this.paramsParser_,
        new NavigatorDelegate(tabId));

    /** @private {!ViewportScroller} */
    this.viewportScroller_ =
        new ViewportScroller(this.viewport_, this.plugin_, window);

    /** @private {!Array<!Bookmark>} */
    this.bookmarks_;

    /** @private {!Point} */
    this.lastViewportPosition_;

    /** @private {boolean} */
    this.inPrintPreviewMode_;

    /** @private {boolean} */
    this.dark_;

    /** @private {!DocumentDimensionsMessageData} */
    this.documentDimensions_;

    // Request translated strings.
    chrome.resourcesPrivate.getStrings(
        chrome.resourcesPrivate.Component.PDF,
        strings => this.handleStrings_(strings));

    // Listen for save commands from the browser.
    if (chrome.mimeHandlerPrivate && chrome.mimeHandlerPrivate.onSave) {
      chrome.mimeHandlerPrivate.onSave.addListener(url => this.onSave_(url));
    }
  }

  /**
   * Handle key events. These may come from the user directly or via the
   * scripting API.
   * @param {!KeyboardEvent} e the event to handle.
   * @private
   */
  handleKeyEvent_(e) {
    const position = this.viewport_.position;
    // Certain scroll events may be sent from outside of the extension.
    const fromScriptingAPI = e.fromScriptingAPI;

    if (shouldIgnoreKeyEvents(document.activeElement) || e.defaultPrevented) {
      return;
    }

    this.toolbarManager_.hideToolbarsAfterTimeout();

    const pageUpHandler = () => {
      // Go to the previous page if we are fit-to-page or fit-to-height.
      if (this.viewport_.isPagedMode()) {
        this.viewport_.goToPreviousPage();
        // Since we do the movement of the page.
        e.preventDefault();
      } else if (fromScriptingAPI) {
        position.y -= this.viewport_.size.height;
        this.viewport_.position = position;
      }
    };
    const pageDownHandler = () => {
      // Go to the next page if we are fit-to-page or fit-to-height.
      if (this.viewport_.isPagedMode()) {
        this.viewport_.goToNextPage();
        // Since we do the movement of the page.
        e.preventDefault();
      } else if (fromScriptingAPI) {
        position.y += this.viewport_.size.height;
        this.viewport_.position = position;
      }
    };

    switch (e.keyCode) {
      case 9:  // Tab key.
        this.toolbarManager_.showToolbarsForKeyboardNavigation();
        return;
      case 27:  // Escape key.
        if (!this.isPrintPreview_) {
          this.toolbarManager_.hideSingleToolbarLayer();
          return;
        }
        break;  // Ensure escape falls through to the print-preview handler.
      case 32:  // Space key.
        if (e.shiftKey) {
          pageUpHandler();
        } else {
          pageDownHandler();
        }
        return;
      case 33:  // Page up key.
        pageUpHandler();
        return;
      case 34:  // Page down key.
        pageDownHandler();
        return;
      case 37:  // Left arrow key.
        if (!hasKeyModifiers(e)) {
          // Go to the previous page if there are no horizontal scrollbars and
          // no form field is focused.
          if (!(this.viewport_.documentHasScrollbars().horizontal ||
                this.isFormFieldFocused_)) {
            this.viewport_.goToPreviousPage();
            // Since we do the movement of the page.
            e.preventDefault();
          } else if (fromScriptingAPI) {
            position.x -= Viewport.SCROLL_INCREMENT;
            this.viewport_.position = position;
          }
        }
        return;
      case 38:  // Up arrow key.
        if (fromScriptingAPI) {
          position.y -= Viewport.SCROLL_INCREMENT;
          this.viewport_.position = position;
        }
        return;
      case 39:  // Right arrow key.
        if (!hasKeyModifiers(e)) {
          // Go to the next page if there are no horizontal scrollbars and no
          // form field is focused.
          if (!(this.viewport_.documentHasScrollbars().horizontal ||
                this.isFormFieldFocused_)) {
            this.viewport_.goToNextPage();
            // Since we do the movement of the page.
            e.preventDefault();
          } else if (fromScriptingAPI) {
            position.x += Viewport.SCROLL_INCREMENT;
            this.viewport_.position = position;
          }
        }
        return;
      case 40:  // Down arrow key.
        if (fromScriptingAPI) {
          position.y += Viewport.SCROLL_INCREMENT;
          this.viewport_.position = position;
        }
        return;
      case 65:  // 'a' key.
        if (e.ctrlKey || e.metaKey) {
          this.pluginController_.selectAll();
          // Since we do selection ourselves.
          e.preventDefault();
        }
        return;
      case 71:  // 'g' key.
        if (this.toolbar_ && (e.ctrlKey || e.metaKey) && e.altKey) {
          this.toolbarManager_.showToolbars();
          this.toolbar_.selectPageNumber();
        }
        return;
      case 219:  // Left bracket key.
        if (e.ctrlKey) {
          this.rotateCounterclockwise_();
        }
        return;
      case 220:  // Backslash key.
        if (e.ctrlKey) {
          this.zoomToolbar_.fitToggleFromHotKey();
        }
        return;
      case 221:  // Right bracket key.
        if (e.ctrlKey) {
          this.rotateClockwise_();
        }
        return;
    }

    // Give print preview a chance to handle the key event.
    if (!fromScriptingAPI && this.isPrintPreview_) {
      this.sendScriptingMessage_(
          {type: 'sendKeyEvent', keyEvent: SerializeKeyEvent(e)});
    } else {
      // Show toolbars as a fallback.
      if (!(e.shiftKey || e.ctrlKey || e.altKey)) {
        this.toolbarManager_.showToolbars();
      }
    }
  }

  handleMouseEvent_(e) {
    if (e.type == 'mousemove') {
      this.toolbarManager_.handleMouseMove(e);
    } else if (e.type == 'mouseout') {
      this.toolbarManager_.hideToolbarsForMouseOut();
    }
  }

  /**
   * @param {!Event} e The context menu event
   * @private
   */
  handleContextMenuEvent_(e) {
    // Stop Chrome from popping up the context menu on long press. We need to
    // make sure the start event did not have 2 touches because we don't want
    // to block two finger tap opening the context menu. We check for
    // firesTouchEvents in order to not block the context menu on right click.
    const capabilities =
        /** @type {{ sourceCapabilities: Object }} */ (e).sourceCapabilities;
    if (capabilities.firesTouchEvents &&
        !this.gestureDetector_.wasTwoFingerTouch()) {
      e.preventDefault();
    }
  }

  /**
   * Handles the annotation mode being toggled on or off.
   * @param {!CustomEvent<{value: boolean}>} e
   * @private
   */
  async annotationModeToggled_(e) {
    const annotationMode = e.detail.value;
    if (annotationMode) {
      // Enter annotation mode.
      assert(this.currentController_ == this.pluginController_);
      // TODO(dstockwell): set plugin read-only, begin transition
      this.updateProgress_(0);
      // TODO(dstockwell): handle save failure
      const saveResult = await this.pluginController_.save(true);
      // Data always exists when save is called with requireResult = true.
      const result = /** @type {!RequiredSaveResult} */ (saveResult);
      if (result.hasUnsavedChanges) {
        assert(!loadTimeData.getBoolean('pdfFormSaveEnabled'));
        try {
          await $('form-warning').show();
        } catch (e) {
          // The user aborted entering annotation mode. Revert to the plugin.
          this.toolbar_.annotationMode = false;
          this.updateProgress_(100);
          return;
        }
      }
      PDFMetrics.record(PDFMetrics.UserAction.ENTER_ANNOTATION_MODE);
      this.hasEnteredAnnotationMode_ = true;
      // TODO(dstockwell): feed real progress data from the Ink component
      this.updateProgress_(50);
      await this.inkController_.load(result.fileName, result.dataToSave);
      this.inkController_.setAnnotationTool(
          assert(this.toolbar_.annotationTool));
      this.currentController_ = this.inkController_;
      this.pluginController_.unload();
      this.updateProgress_(100);
    } else {
      // Exit annotation mode.
      PDFMetrics.record(PDFMetrics.UserAction.EXIT_ANNOTATION_MODE);
      assert(this.currentController_ == this.inkController_);
      // TODO(dstockwell): set ink read-only, begin transition
      this.updateProgress_(0);
      // This runs separately to allow other consumers of `loaded` to queue
      // up after this task.
      this.loaded.then(() => {
        this.currentController_ = this.pluginController_;
        this.inkController_.unload();
      });
      // TODO(dstockwell): handle save failure
      const saveResult = await this.inkController_.save(true);
      // Data always exists when save is called with requireResult = true.
      const result = /** @type {!RequiredSaveResult} */ (saveResult);
      await this.pluginController_.load(result.fileName, result.dataToSave);
      // Ensure the plugin gets the initial viewport.
      this.pluginController_.afterZoom();
    }
  }

  /**
   * Exits annotation mode if active.
   * @return {Promise<void>}
   */
  async exitAnnotationMode_() {
    if (!this.toolbar_.annotationMode) {
      return;
    }
    this.toolbar_.toggleAnnotation();
    await this.loaded;
  }

  /**
   * Request to change the viewport fitting type.
   * @param {!CustomEvent<FitToChangedEvent>} e
   * @private
   */
  fitToChanged_(e) {
    if (e.detail.fittingType == FittingType.FIT_TO_PAGE) {
      this.viewport_.fitToPage();
      this.toolbarManager_.forceHideTopToolbar();
    } else if (e.detail.fittingType == FittingType.FIT_TO_WIDTH) {
      this.viewport_.fitToWidth();
    } else if (e.detail.fittingType == FittingType.FIT_TO_HEIGHT) {
      this.viewport_.fitToHeight();
      this.toolbarManager_.forceHideTopToolbar();
    }

    if (e.detail.userInitiated) {
      PDFMetrics.recordFitTo(e.detail.fittingType);
    }
  }

  /**
   * Sends a 'documentLoaded' message to the PDFScriptingAPI if the document has
   * finished loading.
   * @private
   */
  sendDocumentLoadedMessage_() {
    if (this.loadState_ == LoadState.LOADING) {
      return;
    }
    if (this.isPrintPreview_ && !this.isPrintPreviewLoadingFinished_) {
      return;
    }
    this.sendScriptingMessage_(
        {type: 'documentLoaded', load_state: this.loadState_});
  }

  /**
   * Handle open pdf parameters. This function updates the viewport as per
   * the parameters mentioned in the url while opening pdf. The order is
   * important as later actions can override the effects of previous actions.
   * @param {Object} params The open params passed in the URL.
   * @private
   */
  handleURLParams_(params) {
    if (params.zoom) {
      this.viewport_.setZoom(params.zoom);
    }

    if (params.position) {
      this.viewport_.goToPageAndXY(
          params.page ? params.page : 0, params.position.x, params.position.y);
    } else if (params.page) {
      this.viewport_.goToPage(params.page);
    }

    if (params.view) {
      this.isUserInitiatedEvent_ = false;
      this.zoomToolbar_.forceFit(params.view);
      if (params.viewPosition) {
        const zoomedPositionShift =
            params.viewPosition * this.viewport_.getZoom();
        const currentViewportPosition = this.viewport_.position;
        if (params.view == FittingType.FIT_TO_WIDTH) {
          currentViewportPosition.y += zoomedPositionShift;
        } else if (params.view == FittingType.FIT_TO_HEIGHT) {
          currentViewportPosition.x += zoomedPositionShift;
        }
        this.viewport_.position = currentViewportPosition;
      }
      this.isUserInitiatedEvent_ = true;
    }
  }

  /**
   * Moves the viewport to a point in a page. Called back after a
   * 'transformPagePointReply' is returned from the plugin.
   * @param {string} origin Identifier for the caller for logging purposes.
   * @param {number} page The index of the page to go to. zero-based.
   * @param {Point} message Message received from the plugin containing the
   *     x and y to navigate to in screen coordinates.
   * @private
   */
  goToPageAndXY_(origin, page, message) {
    this.viewport_.goToPageAndXY(page, message.x, message.y);
    if (origin == 'bookmark') {
      PDFMetrics.record(PDFMetrics.UserAction.FOLLOW_BOOKMARK);
    }
  }

  /**
   * @return {?Promise} Resolved when the load state reaches LOADED,
   * rejects on FAILED. Returns null if no promise has been created, which
   * is the case for initial load of the PDF.
   */
  get loaded() {
    return this.loaded_ ? this.loaded_.promise : null;
  }

  /** @return {!Viewport} The viewport. Used for testing. */
  get viewport() {
    return this.viewport_;
  }

  /** @return {!Array<!Bookmark>} The bookmarks. Used for testing. */
  get bookmarks() {
    return this.bookmarks_;
  }

  /**
   * Updates the load state and triggers completion of the `loaded`
   * promise if necessary.
   * @param {!LoadState} loadState
   * @private
   */
  setLoadState_(loadState) {
    if (this.loadState_ == loadState) {
      return;
    }
    assert(
        loadState == LoadState.LOADING || this.loadState_ == LoadState.LOADING);
    this.loadState_ = loadState;
    if (!this.initialLoadComplete_) {
      this.initialLoadComplete_ = true;
      return;
    }
    if (loadState == LoadState.SUCCESS) {
      this.loaded_.resolve();
    } else if (loadState == LoadState.FAILED) {
      this.loaded_.reject();
    } else {
      this.loaded_ = new PromiseResolver();
    }
  }

  /**
   * Update the loading progress of the document in response to a progress
   * message being received from the content controller.
   * @param {number} progress the progress as a percentage.
   * @private
   */
  updateProgress_(progress) {
    if (this.toolbar_) {
      this.toolbar_.loadProgress = progress;
    }

    if (progress == -1) {
      // Document load failed.
      this.errorScreen_.show();
      this.sizer_.style.display = 'none';
      if (this.passwordScreen_.active) {
        this.passwordScreen_.deny();
        this.passwordScreen_.close();
      }
      this.setLoadState_(LoadState.FAILED);
      this.isPrintPreviewLoadingFinished_ = true;
      this.sendDocumentLoadedMessage_();
    } else if (progress == 100) {
      // Document load complete.
      if (this.lastViewportPosition_) {
        this.viewport_.position = this.lastViewportPosition_;
      }
      this.paramsParser_.getViewportFromUrlParams(
          this.originalUrl_, params => this.handleURLParams_(params));
      this.setLoadState_(LoadState.SUCCESS);
      this.sendDocumentLoadedMessage_();
      while (this.delayedScriptingMessages_.length > 0) {
        this.handleScriptingMessage(this.delayedScriptingMessages_.shift());
      }

      this.toolbarManager_.hideToolbarsAfterTimeout();
    } else {
      this.setLoadState_(LoadState.LOADING);
    }
  }

  /** @private */
  sendBackgroundColorForPrintPreview_() {
    this.pluginController_.backgroundColorChanged(
        this.dark_ ? PDFViewer.PRINT_PREVIEW_DARK_BACKGROUND_COLOR :
                     PDFViewer.PRINT_PREVIEW_BACKGROUND_COLOR);
  }

  /**
   * Load a dictionary of translated strings into the UI. Used as a callback for
   * chrome.resourcesPrivate.
   * @param {Object} strings Dictionary of translated strings
   * @private
   */
  handleStrings_(strings) {
    const stringsDictionary =
        /** @type {{ textdirection: string, language: string }} */ (strings);
    document.documentElement.dir = stringsDictionary.textdirection;
    document.documentElement.lang = stringsDictionary.language;

    loadTimeData.data = strings;
    if (this.isPrintPreview_) {
      this.sendBackgroundColorForPrintPreview_();
    }

    $('toolbar').strings = strings;
    $('toolbar').pdfAnnotationsEnabled =
        loadTimeData.getBoolean('pdfAnnotationsEnabled');
    $('toolbar').printingEnabled = loadTimeData.getBoolean('printingEnabled');
    $('zoom-toolbar').setStrings(strings);
    $('password-screen').strings = strings;
    $('error-screen').strings = strings;
    if ($('form-warning')) {
      $('form-warning').strings = strings;
    }
  }

  /**
   * An event handler for handling password-submitted events. These are fired
   * when an event is entered into the password screen.
   * @param {!CustomEvent<{password: string}>} event a password-submitted event.
   * @private
   */
  onPasswordSubmitted_(event) {
    this.pluginController_.getPasswordComplete(event.detail.password);
  }

  /**
   * A callback that sets |isUserInitiatedEvent_| to |userInitiated|.
   * @param {boolean} userInitiated The value to set |isUserInitiatedEvent_| to.
   * @private
   */
  setUserInitiated_(userInitiated) {
    assert(this.isUserInitiatedEvent_ != userInitiated);
    this.isUserInitiatedEvent_ = userInitiated;
  }

  /**
   * A callback that's called when an update to a pinch zoom is detected.
   * @param {!Object} e the pinch event.
   * @private
   */
  onPinchUpdate_(e) {
    // Throttle number of pinch events to one per frame.
    if (!this.sentPinchEvent_) {
      this.sentPinchEvent_ = true;
      window.requestAnimationFrame(() => {
        this.sentPinchEvent_ = false;
        this.viewport_.pinchZoom(e);
      });
    }
  }

  /**
   * A callback that's called when the end of a pinch zoom is detected.
   * @param {!Object} e the pinch event.
   * @private
   */
  onPinchEnd_(e) {
    // Using rAF for pinch end prevents pinch updates scheduled by rAF getting
    // sent after the pinch end.
    window.requestAnimationFrame(() => {
      this.viewport_.pinchZoomEnd(e);
    });
  }

  /**
   * A callback that's called when the start of a pinch zoom is detected.
   * @param {!Object} e the pinch event.
   * @private
   */
  onPinchStart_(e) {
    // We also use rAF for pinch start, so that if there is a pinch end event
    // scheduled by rAF, this pinch start will be sent after.
    window.requestAnimationFrame(() => {
      this.viewport_.pinchZoomStart(e);
    });
  }

  /**
   * A callback that's called after the viewport changes.
   * @private
   */
  viewportChanged_() {
    if (!this.documentDimensions_) {
      return;
    }

    // Offset the toolbar position so that it doesn't move if scrollbars appear.
    const hasScrollbars = this.viewport_.documentHasScrollbars();
    const scrollbarWidth = this.viewport_.scrollbarWidth;
    const verticalScrollbarWidth = hasScrollbars.vertical ? scrollbarWidth : 0;
    const horizontalScrollbarWidth =
        hasScrollbars.horizontal ? scrollbarWidth : 0;

    // Shift the zoom toolbar to the left by half a scrollbar width. This
    // gives a compromise: if there is no scrollbar visible then the toolbar
    // will be half a scrollbar width further left than the spec but if there
    // is a scrollbar visible it will be half a scrollbar width further right
    // than the spec. In RTL layout normally, and in LTR layout in Print Preview
    // when the NewPrintPreview flag is enabled, the zoom toolbar is on the left
    // left side, but the scrollbar is still on the right, so this is not
    // necessary.
    if (isRTL() === this.isPrintPreview_) {
      this.zoomToolbar_.style.right =
          -verticalScrollbarWidth + (scrollbarWidth / 2) + 'px';
    }
    // Having a horizontal scrollbar is much rarer so we don't offset the
    // toolbar from the bottom any more than what the spec says. This means
    // that when there is a scrollbar visible, it will be a full scrollbar
    // width closer to the bottom of the screen than usual, but this is ok.
    this.zoomToolbar_.style.bottom = -horizontalScrollbarWidth + 'px';

    // Update the page indicator.
    const visiblePage = this.viewport_.getMostVisiblePage();

    if (this.toolbar_) {
      this.toolbar_.pageNo = visiblePage + 1;
    }

    // TODO(raymes): Give pageIndicator_ the same API as toolbar_.
    if (this.pageIndicator_) {
      const lastIndex = this.pageIndicator_.index;
      this.pageIndicator_.index = visiblePage;
      if (this.documentDimensions_.pageDimensions.length > 1 &&
          hasScrollbars.vertical && lastIndex !== undefined) {
        this.pageIndicator_.style.visibility = 'visible';
      } else {
        this.pageIndicator_.style.visibility = 'hidden';
      }
    }

    this.currentController_.viewportChanged();

    const visiblePageDimensions = this.viewport_.getPageScreenRect(visiblePage);
    const size = this.viewport_.size;
    this.sendScriptingMessage_({
      type: 'viewport',
      pageX: visiblePageDimensions.x,
      pageY: visiblePageDimensions.y,
      pageWidth: visiblePageDimensions.width,
      viewportWidth: size.width,
      viewportHeight: size.height
    });
  }

  /**
   * Handle a scripting message from outside the extension (typically sent by
   * PDFScriptingAPI in a page containing the extension) to interact with the
   * plugin.
   * @param {!MessageObject} message The message to handle.
   */
  handleScriptingMessage(message) {
    if (this.parentWindow_ != message.source) {
      this.parentWindow_ = message.source;
      this.parentOrigin_ = message.origin;
      // Ensure that we notify the embedder if the document is loaded.
      if (this.loadState_ != LoadState.LOADING) {
        this.sendDocumentLoadedMessage_();
      }
    }

    if (this.handlePrintPreviewScriptingMessage_(message)) {
      return;
    }

    // Delay scripting messages from users of the scripting API until the
    // document is loaded. This simplifies use of the APIs.
    if (this.loadState_ != LoadState.SUCCESS) {
      this.delayedScriptingMessages_.push(message);
      return;
    }

    switch (message.data.type.toString()) {
      case 'getSelectedText':
        this.pluginController_.getSelectedText();
        break;
      case 'print':
        this.pluginController_.print();
        break;
      case 'selectAll':
        this.pluginController_.selectAll();
        break;
    }
  }

  /**
   * Handle scripting messages specific to print preview.
   * @param {!MessageObject} message the message to handle.
   * @return {boolean} true if the message was handled, false otherwise.
   * @private
   */
  handlePrintPreviewScriptingMessage_(message) {
    if (!this.isPrintPreview_) {
      return false;
    }

    let messageData = message.data;
    switch (messageData.type.toString()) {
      case 'loadPreviewPage':
        messageData =
            /** @type {{ url:  string, index: number }} */ (messageData);
        this.pluginController_.loadPreviewPage(
            messageData.url, messageData.index);
        return true;
      case 'resetPrintPreviewMode':
        messageData = /** @type {!PrintPreviewParams} */ (messageData);
        this.setLoadState_(LoadState.LOADING);
        if (!this.inPrintPreviewMode_) {
          this.inPrintPreviewMode_ = true;
          this.isUserInitiatedEvent_ = false;
          this.zoomToolbar_.forceFit(FittingType.FIT_TO_PAGE);
          this.isUserInitiatedEvent_ = true;
        }

        // Stash the scroll location so that it can be restored when the new
        // document is loaded.
        this.lastViewportPosition_ = this.viewport_.position;

        // TODO(raymes): Disable these properly in the plugin.
        const printButton = $('print-button');
        if (printButton) {
          printButton.parentNode.removeChild(printButton);
        }
        const saveButton = $('save-button');
        if (saveButton) {
          saveButton.parentNode.removeChild(saveButton);
        }

        this.pageIndicator_.pageLabels = messageData.pageNumbers;

        this.pluginController_.resetPrintPreviewMode(messageData);
        return true;
      case 'sendKeyEvent':
        this.handleKeyEvent_(/** @type {!KeyboardEvent} */ (DeserializeKeyEvent(
            /** @type {{ keyEvent: Object }} */ (message.data).keyEvent)));
        return true;
      case 'hideToolbars':
        this.toolbarManager_.resetKeyboardNavigationAndHideToolbars();
        return true;
      case 'darkModeChanged':
        this.dark_ = /** @type {{darkMode: boolean}} */ (message.data).darkMode;
        if (this.isPrintPreview_) {
          this.sendBackgroundColorForPrintPreview_();
        }
        return true;
      case 'scrollPosition':
        const position = this.viewport_.position;
        messageData = /** @type {{ x: number, y: number }} */ (message.data);
        position.y += messageData.y;
        position.x += messageData.x;
        this.viewport_.position = position;
        return true;
    }

    return false;
  }

  /**
   * Send a scripting message outside the extension (typically to
   * PDFScriptingAPI in a page containing the extension).
   * @param {Object} message the message to send.
   * @private
   */
  sendScriptingMessage_(message) {
    if (this.parentWindow_ && this.parentOrigin_) {
      let targetOrigin;
      // Only send data back to the embedder if it is from the same origin,
      // unless we're sending it to ourselves (which could happen in the case
      // of tests). We also allow documentLoaded messages through as this won't
      // leak important information.
      if (this.parentOrigin_ == window.location.origin) {
        targetOrigin = this.parentOrigin_;
      } else if (message.type == 'documentLoaded') {
        targetOrigin = '*';
      } else {
        targetOrigin = this.originalUrl_;
      }
      try {
        this.parentWindow_.postMessage(message, targetOrigin);
      } catch (ok) {
        // TODO(crbug.com/1004425): targetOrigin probably was rejected, such as
        // a "data:" URL. This shouldn't cause this method to throw, though.
      }
    }
  }

  /**
   * @param {!CustomEvent<MessageData>} e
   * @private
   */
  handlePluginMessage_(e) {
    const data = e.detail;
    switch (data.type.toString()) {
      case 'beep':
        this.handleBeep_();
        return;
      case 'documentDimensions':
        this.setDocumentDimensions_(
            /** @type {!DocumentDimensionsMessageData} */ (data));
        return;
      case 'getPassword':
        this.handlePasswordRequest_();
        return;
      case 'getSelectedTextReply':
        this.handleSelectedTextReply_(
            /** @type {{ selectedText: string }} */ (data).selectedText);
        return;
      case 'loadProgress':
        this.updateProgress_(
            /** @type {{ progress: number }} */ (data).progress);
        return;
      case 'navigate':
        const navigateData = /** @type {!NavigateMessageData} */ (data);
        this.handleNavigate_(navigateData.url, navigateData.disposition);
        return;
      case 'navigateToDestination':
        const destinationData = /** @type {!DestinationMessageData} */ (data);
        this.handleNavigateToDestination_(
            destinationData.page, destinationData.x, destinationData.y,
            destinationData.zoom);
        return;
      case 'printPreviewLoaded':
        this.handlePrintPreviewLoaded_();
        return;
      case 'metadata':
        const metadata = /** @type {!MetadataMessageData} */ (data);
        this.setDocumentMetadata_(
            metadata.title, metadata.bookmarks, metadata.canSerializeDocument);
        return;
      case 'setIsSelecting':
        this.setIsSelecting_(
            /** @type {{ isSelecting: boolean }} */ (data).isSelecting);
        return;
      case 'getNamedDestinationReply':
        this.paramsParser_.onNamedDestinationReceived(
            /** @type {{ pageNumber: number }} */ (data).pageNumber);
        return;
      case 'formFocusChange':
        this.isFormFieldFocused_ =
            /** @type {{ focused: boolean }} */ (data).focused;
        return;
    }
    assertNotReached('Unknown message type received: ' + data.type);
  }

  /**
   * Sets document dimensions from the current controller.
   * @param {!DocumentDimensionsMessageData} documentDimensions
   * @private
   */
  setDocumentDimensions_(documentDimensions) {
    this.documentDimensions_ = documentDimensions;
    this.isUserInitiatedEvent_ = false;
    this.viewport_.setDocumentDimensions(this.documentDimensions_);
    this.isUserInitiatedEvent_ = true;
    // If we received the document dimensions, the password was good so we
    // can dismiss the password screen.
    if (this.passwordScreen_.active) {
      this.passwordScreen_.close();
    }

    if (this.toolbar_) {
      this.toolbar_.docLength = this.documentDimensions_.pageDimensions.length;
    }
  }

  /**
   * Handles a beep request from the current controller.
   * @private
   */
  handleBeep_() {
    // Beeps are annoying, so just track count for now.
    this.beepCount_ += 1;
  }

  /**
   * Handles a password request from the current controller.
   * @private
   */
  handlePasswordRequest_() {
    // If the password screen isn't up, put it up. Otherwise we're
    // responding to an incorrect password so deny it.
    if (!this.passwordScreen_.active) {
      this.hadPassword_ = true;
      this.updateAnnotationAvailable_();
      this.passwordScreen_.show();
    } else {
      this.passwordScreen_.deny();
    }
  }

  /**
   * Handles a selected text reply from the current controller.
   * @param {string} selectedText
   * @private
   */
  handleSelectedTextReply_(selectedText) {
    this.sendScriptingMessage_({
      type: 'getSelectedTextReply',
      selectedText: selectedText,
    });
  }

  /**
   * Handles a navigation request from the current controller.
   * @param {string} url
   * @param {!PdfNavigator.WindowOpenDisposition} disposition
   * @private
   */
  handleNavigate_(url, disposition) {
    // If in print preview, always open a new tab.
    if (this.isPrintPreview_) {
      this.navigator_.navigate(
          url, PdfNavigator.WindowOpenDisposition.NEW_BACKGROUND_TAB);
    } else {
      this.navigator_.navigate(url, disposition);
    }
  }

  /**
   * Handles an internal navigation request to a destination from the current
   * controller.
   *
   * @param {number} page
   * @param {number} x
   * @param {number} y
   * @param {number} zoom
   * @private
   */
  handleNavigateToDestination_(page, x, y, zoom) {
    if (zoom) {
      this.viewport_.setZoom(zoom);
    }

    if (x || y) {
      this.viewport_.goToPageAndXY(page, x ? x : 0, y ? y : 0);
    } else {
      this.viewport_.goToPage(page);
    }
  }

  /**
   * Handles a notification that print preview has loaded from the
   * current controller.
   * @private
   */
  handlePrintPreviewLoaded_() {
    this.isPrintPreviewLoadingFinished_ = true;
    this.sendDocumentLoadedMessage_();
  }

  /**
   * Sets document metadata from the current controller.
   * @param {string} title
   * @param {!Array<!Bookmark>} bookmarks
   * @param {boolean} canSerializeDocument
   * @private
   */
  setDocumentMetadata_(title, bookmarks, canSerializeDocument) {
    if (title) {
      document.title = title;
    } else {
      document.title = getFilenameFromURL(this.originalUrl_);
    }
    this.bookmarks_ = bookmarks;
    if (this.toolbar_) {
      this.toolbar_.docTitle = document.title;
      this.toolbar_.bookmarks = this.bookmarks_;
    }
    this.canSerializeDocument_ = canSerializeDocument;
    this.updateAnnotationAvailable_();
  }

  /**
   * Sets the is selecting flag from the current controller.
   * @param {boolean} isSelecting
   * @private
   */
  setIsSelecting_(isSelecting) {
    this.viewportScroller_.setEnableScrolling(isSelecting);
  }

  /**
   * An event handler for when the browser tells the PDF Viewer to perform a
   * save.
   * @param {string} streamUrl unique identifier for a PDF Viewer instance.
   * @private
   */
  async onSave_(streamUrl) {
    if (streamUrl != this.browserApi_.getStreamInfo().streamUrl) {
      return;
    }

    this.save_();
  }

  /**
   * Saves the current PDF document to disk.
   * @private
   */
  async save_() {
    PDFMetrics.record(PDFMetrics.UserAction.SAVE);
    if (this.hasEnteredAnnotationMode_) {
      PDFMetrics.record(PDFMetrics.UserAction.SAVE_WITH_ANNOTATION);
    }
    // If we have entered annotation mode we must require the local
    // contents to ensure annotations are saved. Otherwise we would
    // save the cached or remote copy without annotatios.
    const requireResult = this.hasEnteredAnnotationMode_;
    // TODO(dstockwell): Report an error to user if this fails.
    const result = await this.currentController_.save(requireResult);
    if (result == null) {
      // The content controller handled the save internally.
      return;
    }

    // Make sure file extension is .pdf, avoids dangerous extensions.
    let fileName = result.fileName;
    if (!fileName.toLowerCase().endsWith('.pdf')) {
      fileName = fileName + '.pdf';
    }

    chrome.fileSystem.chooseEntry(
        {type: 'saveFile', suggestedName: fileName}, entry => {
          if (chrome.runtime.lastError) {
            if (chrome.runtime.lastError.message != 'User cancelled') {
              console.log(
                  'chrome.fileSystem.chooseEntry failed: ' +
                  chrome.runtime.lastError.message);
            }
            return;
          }
          entry.createWriter(writer => {
            writer.write(
                new Blob([result.dataToSave], {type: 'application/pdf'}));
            // Unblock closing the window now that the user has saved
            // successfully.
            chrome.mimeHandlerPrivate.setShowBeforeUnloadDialog(false);
          });
        });

    // Saving in Annotation mode is destructive: crbug.com/919364
    this.exitAnnotationMode_();
  }

  /** @private */
  async print_() {
    PDFMetrics.record(PDFMetrics.UserAction.PRINT);
    await this.exitAnnotationMode_();
    this.currentController_.print();
  }

  /**
   * Updates the toolbar's annotation available flag depending on current
   * conditions.
   * @private
   */
  updateAnnotationAvailable_() {
    if (!this.toolbar_) {
      return;
    }
    let annotationAvailable = true;
    if (this.viewport_.getClockwiseRotations() != 0) {
      annotationAvailable = false;
    }
    if (this.hadPassword_) {
      annotationAvailable = false;
    }
    if (!this.canSerializeDocument_) {
      annotationAvailable = false;
    }
    this.toolbar_.annotationAvailable = annotationAvailable;
  }

  /** @private */
  rotateClockwise_() {
    PDFMetrics.record(PDFMetrics.UserAction.ROTATE);
    this.viewport_.rotateClockwise();
    this.currentController_.rotateClockwise();
    this.updateAnnotationAvailable_();
  }

  /** @private */
  rotateCounterclockwise_() {
    PDFMetrics.record(PDFMetrics.UserAction.ROTATE);
    this.viewport_.rotateCounterclockwise();
    this.currentController_.rotateCounterclockwise();
    this.updateAnnotationAvailable_();
  }

  /**
   * @param {!CustomEvent<{canUndo: boolean, canRedo: boolean}>} e
   * @private
   */
  setAnnotationUndoState_(e) {
    this.toolbar_.canUndoAnnotation = e.detail.canUndo;
    this.toolbar_.canRedoAnnotation = e.detail.canRedo;
  }

  /** @private */
  resetTrackers_() {
    this.viewport_.resetTracker();
    if (this.tracker_) {
      this.tracker_.removeAll();
    }
  }
}

// Export on |window| such that scripts injected from pdf_extension_test.cc can
// access it.
window.PDFViewer = PDFViewer;

/**
 * The height of the toolbar along the top of the page. The document will be
 * shifted down by this much in the viewport.
 */
PDFViewer.MATERIAL_TOOLBAR_HEIGHT = 56;

/**
 * Minimum height for the material toolbar to show (px). Should match the media
 * query in index-material.css. If the window is smaller than this at load,
 * leave no space for the toolbar.
 */
PDFViewer.TOOLBAR_WINDOW_MIN_HEIGHT = 250;

/**
 * The background color used for print preview (--google-grey-refresh-300).
 */
PDFViewer.PRINT_PREVIEW_BACKGROUND_COLOR = '0xFFDADCE0';

/**
 * The background color used for print preview when dark mode is enabled
 * (--google-grey-refresh-700).
 */
PDFViewer.PRINT_PREVIEW_DARK_BACKGROUND_COLOR = '0xFF5F6368';

/**
 * The background color used for the regular viewer.
 */
PDFViewer.BACKGROUND_COLOR = '0xFF525659';
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {assert} from 'chrome://resources/js/assert.m.js';
import {NativeEventTarget as EventTarget} from 'chrome://resources/js/cr/event_target.m.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js';
import {PromiseResolver} from 'chrome://resources/js/promise_resolver.m.js';
import {$} from 'chrome://resources/js/util.m.js';

import {PartialPoint, Point, Viewport} from './viewport.js';

/** @typedef {{ type: string }} */
export let MessageData;

/**
 * @typedef {{
 *   dataToSave: Array,
 *   token: string,
 *   fileName: string
 * }}
 */
let SaveDataMessageData;

/**
 * @typedef {{
 *   type: string,
 *   to: string,
 *   cc: string,
 *   bcc: string,
 *   subject: string,
 *   body: string,
 * }}
 */
let EmailMessageData;

/**
 * @typedef {{
 *   type: string,
 *   url: string,
 *   grayscale: boolean,
 *   modifiable: boolean,
 *   pageNumbers: !Array<number>
 * }}
 */
export let PrintPreviewParams;

// Note: Redefining this type here, to work around the fact that ink externs
// are only available on Chrome OS, so the targets that contain them cannot be
// built on other platforms.
// TODO (rbpotter): Break InkController into its own file that is only included
// on Chrome OS.

/**
 * @typedef {{
 *   setAnnotationTool: function(AnnotationTool):void,
 *   viewportChanged: function():void,
 *   saveDocument: function():!Promise,
 *   undo: function():void,
 *   redo: function():void,
 *   load: function(string, !ArrayBuffer):!Promise,
 *   viewport: !Viewport,
 * }}
 */
let ViewerInkHostElement;

/**
 * Creates a cryptographically secure pseudorandom 128-bit token.
 * @return {string} The generated token as a hex string.
 */
function createToken() {
  const randomBytes = new Uint8Array(16);
  return window.crypto.getRandomValues(randomBytes)
      .map(b => b.toString(16).padStart(2, '0'))
      .join('');
}

/** @abstract */
export class ContentController {
  constructor() {}

  beforeZoom() {}

  afterZoom() {}

  viewportChanged() {}

  /** @abstract */
  rotateClockwise() {}

  /** @abstract */
  rotateCounterclockwise() {}

  /** Triggers printing of the current document. */
  print() {}

  /** Undo an edit action. */
  undo() {}

  /** Redo an edit action. */
  redo() {}

  /**
   * Requests that the current document be saved.
   * @param {boolean} requireResult whether a response is required, otherwise
   *     the controller may save the document to disk internally.
   * @return {Promise<{fileName: string, dataToSave: ArrayBuffer}>}
   * @abstract
   */
  save(requireResult) {}

  /**
   * Loads PDF document from `data` activates UI.
   * @param {string} fileName
   * @param {!ArrayBuffer} data
   * @return {Promise<void>}
   * @abstract
   */
  load(fileName, data) {}

  /**
   * Unloads the current document and removes the UI.
   * @abstract
   */
  unload() {}
}

/**
 * Controller for annotation mode, on Chrome OS only. Fires the following events
 * from its event target:
 * has-unsaved-changes: Fired to indicate there are ink annotations that have
 *     not been saved.
 * set-annotation-undo-state: Contains information about whether undo or redo
 *     options are available.
 */
export class InkController extends ContentController {
  /** @param {!Viewport} viewport */
  constructor(viewport) {
    super();

    /** @private {!Viewport} */
    this.viewport_ = viewport;

    /** @private {?ViewerInkHostElement} */
    this.inkHost_ = null;

    /** @private {!EventTarget} */
    this.eventTarget_ = new EventTarget();

    /** @type {?AnnotationTool} */
    this.tool_ = null;
  }

  /** @return {!EventTarget} */
  getEventTarget() {
    return this.eventTarget_;
  }

  /** @param {AnnotationTool} tool */
  setAnnotationTool(tool) {
    this.tool_ = tool;
    if (this.inkHost_) {
      this.inkHost_.setAnnotationTool(tool);
    }
  }

  /** @override */
  rotateClockwise() {
    // TODO(dstockwell): implement rotation
  }

  /** @override */
  rotateCounterclockwise() {
    // TODO(dstockwell): implement rotation
  }

  /** @override */
  viewportChanged() {
    this.inkHost_.viewportChanged();
  }

  /** @override */
  save(requireResult) {
    return this.inkHost_.saveDocument();
  }

  /** @override */
  undo() {
    this.inkHost_.undo();
  }

  /** @override */
  redo() {
    this.inkHost_.redo();
  }

  /** @override */
  load(filename, data) {
    if (!this.inkHost_) {
      const inkHost = document.createElement('viewer-ink-host');
      $('content').appendChild(inkHost);
      this.inkHost_ = /** @type {!ViewerInkHostElement} */ (inkHost);
      this.inkHost_.viewport = this.viewport_;
      inkHost.addEventListener('stroke-added', e => {
        this.eventTarget_.dispatchEvent(new CustomEvent('has-unsaved-changes'));
      });
      inkHost.addEventListener('undo-state-changed', e => {
        this.eventTarget_.dispatchEvent(
            new CustomEvent('set-annotation-undo-state', {detail: e.detail}));
      });
    }
    return this.inkHost_.load(filename, data);
  }

  /** @override */
  unload() {
    this.inkHost_.remove();
    this.inkHost_ = null;
  }
}

/**
 * PDF plugin controller, responsible for communicating with the embedded plugin
 * element. Dispatches a 'plugin-message' event containing the message from the
 * plugin, if a message type not handled by this controller is received.
 */
export class PluginController extends ContentController {
  /**
   * @param {!HTMLEmbedElement} plugin
   * @param {!Viewport} viewport
   * @param {function():boolean} getIsUserInitiatedCallback
   * @param {function():?Promise} getLoadedCallback
   */
  constructor(plugin, viewport, getIsUserInitiatedCallback, getLoadedCallback) {
    super();

    /** @private {!HTMLEmbedElement} */
    this.plugin_ = plugin;

    /** @private {!Viewport} */
    this.viewport_ = viewport;

    /** @private {!function():boolean} */
    this.getIsUserInitiatedCallback_ = getIsUserInitiatedCallback;

    /** @private {!function():?Promise} */
    this.getLoadedCallback_ = getLoadedCallback;

    /** @private {!Map<string, PromiseResolver>} */
    this.pendingTokens_ = new Map();
    this.plugin_.addEventListener(
        'message', e => this.handlePluginMessage_(e), false);

    /** @private {!EventTarget} */
    this.eventTarget_ = new EventTarget();
  }

  /** @return {!EventTarget} */
  getEventTarget() {
    return this.eventTarget_;
  }

  /**
   * Notify the plugin to stop reacting to scroll events while zoom is taking
   * place to avoid flickering.
   * @override
   */
  beforeZoom() {
    this.postMessage_({type: 'stopScrolling'});

    if (this.viewport_.pinchPhase == Viewport.PinchPhase.PINCH_START) {
      const position = this.viewport_.position;
      const zoom = this.viewport_.getZoom();
      const pinchPhase = this.viewport_.pinchPhase;
      const layoutOptions = this.viewport_.getLayoutOptions();
      this.postMessage_({
        type: 'viewport',
        userInitiated: true,
        zoom: zoom,
        layoutOptions: layoutOptions,
        xOffset: position.x,
        yOffset: position.y,
        pinchPhase: pinchPhase
      });
    }
  }

  /**
   * Notify the plugin of the zoom change and to continue reacting to scroll
   * events.
   * @override
   */
  afterZoom() {
    const position = this.viewport_.position;
    const zoom = this.viewport_.getZoom();
    const layoutOptions = this.viewport_.getLayoutOptions();
    const pinchVector = this.viewport_.pinchPanVector || {x: 0, y: 0};
    const pinchCenter = this.viewport_.pinchCenter || {x: 0, y: 0};
    const pinchPhase = this.viewport_.pinchPhase;

    this.postMessage_({
      type: 'viewport',
      userInitiated: this.getIsUserInitiatedCallback_(),
      zoom: zoom,
      layoutOptions: layoutOptions,
      xOffset: position.x,
      yOffset: position.y,
      pinchPhase: pinchPhase,
      pinchX: pinchCenter.x,
      pinchY: pinchCenter.y,
      pinchVectorX: pinchVector.x,
      pinchVectorY: pinchVector.y
    });
  }

  /**
   * Post a message to the PPAPI plugin. Some messages will cause an async reply
   * to be received through handlePluginMessage_().
   * @param {!MessageData} message Message to post.
   * @private
   */
  postMessage_(message) {
    this.plugin_.postMessage(message);
  }

  /** @override */
  rotateClockwise() {
    this.postMessage_({type: 'rotateClockwise'});
  }

  /** @override */
  rotateCounterclockwise() {
    this.postMessage_({type: 'rotateCounterclockwise'});
  }

  /** @override */
  print() {
    this.postMessage_({type: 'print'});
  }

  selectAll() {
    this.postMessage_({type: 'selectAll'});
  }

  getSelectedText() {
    this.postMessage_({type: 'getSelectedText'});
  }

  /** @param {!PrintPreviewParams} printPreviewParams */
  resetPrintPreviewMode(printPreviewParams) {
    this.postMessage_({
      type: 'resetPrintPreviewMode',
      url: printPreviewParams.url,
      grayscale: printPreviewParams.grayscale,
      // If the PDF isn't modifiable we send 0 as the page count so that no
      // blank placeholder pages get appended to the PDF.
      pageCount:
          (printPreviewParams.modifiable ?
               printPreviewParams.pageNumbers.length :
               0)
    });
  }

  /** @param {string} newColor New color, in hex, for the PDF plugin. */
  backgroundColorChanged(newColor) {
    this.postMessage_({
      type: 'backgroundColorChanged',
      backgroundColor: newColor,
    });
  }

  /**
   * @param {string} url
   * @param {number} index
   */
  loadPreviewPage(url, index) {
    this.postMessage_({type: 'loadPreviewPage', url: url, index: index});
  }

  /** @param {string} password */
  getPasswordComplete(password) {
    this.postMessage_({type: 'getPasswordComplete', password: password});
  }

  /** @param {string} destination */
  getNamedDestination(destination) {
    this.postMessage_({
      type: 'getNamedDestination',
      namedDestination: destination,
    });
  }

  /** @override */
  save(requireResult) {
    const resolver = new PromiseResolver();
    const newToken = createToken();
    this.pendingTokens_.set(newToken, resolver);
    this.postMessage_({type: 'save', token: newToken, force: requireResult});
    return resolver.promise;
  }

  /** @override */
  async load(fileName, data) {
    const url = URL.createObjectURL(new Blob([data]));
    this.plugin_.removeAttribute('headers');
    this.plugin_.setAttribute('stream-url', url);
    this.plugin_.style.display = 'block';
    try {
      await this.getLoadedCallback_();
    } finally {
      URL.revokeObjectURL(url);
    }
  }

  /** @override */
  unload() {
    this.plugin_.style.display = 'none';
  }

  /**
   * An event handler for handling message events received from the plugin.
   * @param {!Event} messageEvent a message event.
   * @private
   */
  handlePluginMessage_(messageEvent) {
    const messageData = /** @type {!MessageData} */ (messageEvent.data);
    switch (messageData.type) {
      case 'email':
        const emailData = /** @type {!EmailMessageData} */ (messageData);
        const href = 'mailto:' + emailData.to + '?cc=' + emailData.cc +
            '&bcc=' + emailData.bcc + '&subject=' + emailData.subject +
            '&body=' + emailData.body;
        window.location.href = href;
        break;
      case 'goToPage':
        this.viewport_.goToPage(
            /** @type {{type: string, page: number}} */ (messageData).page);
        break;
      case 'setScrollPosition':
        this.viewport_.scrollTo(/** @type {!PartialPoint} */ (messageData));
        break;
      case 'scrollBy':
        this.viewport_.scrollBy(/** @type {!Point} */ (messageData));
        break;
      case 'saveData':
        this.saveData_(/** @type {!SaveDataMessageData} */ (messageData));
        break;
      case 'consumeSaveToken':
        const saveTokenData =
            /** @type {{ type: string, token: string }} */ (messageData);
        const resolver = this.pendingTokens_.get(saveTokenData.token);
        assert(this.pendingTokens_.delete(saveTokenData.token));
        resolver.resolve(null);
        break;
      default:
        this.eventTarget_.dispatchEvent(
            new CustomEvent('plugin-message', {detail: messageData}));
    }
  }

  /**
   * Handles the pdf file buffer received from the plugin.
   *
   * @param {!SaveDataMessageData} messageData data of the message event.
   * @private
   */
  saveData_(messageData) {
    assert(
        loadTimeData.getBoolean('pdfFormSaveEnabled') ||
        loadTimeData.getBoolean('pdfAnnotationsEnabled'));

    // Verify a token that was created by this instance is included to avoid
    // being spammed.
    const resolver = this.pendingTokens_.get(messageData.token);
    assert(this.pendingTokens_.delete(messageData.token));

    if (!messageData.dataToSave) {
      resolver.reject();
      return;
    }

    // Verify the file size and the first bytes to make sure it's a PDF. Cap at
    // 100 MB. This cap should be kept in sync with and is also enforced in
    // pdf/out_of_process_instance.cc.
    const MIN_FILE_SIZE = '%PDF1.0'.length;
    const MAX_FILE_SIZE = 100 * 1000 * 1000;

    const buffer = messageData.dataToSave;
    const bufView = new Uint8Array(buffer);
    assert(
        bufView.length <= MAX_FILE_SIZE,
        `File too large to be saved: ${bufView.length} bytes.`);
    assert(bufView.length >= MIN_FILE_SIZE);
    assert(
        String.fromCharCode(bufView[0], bufView[1], bufView[2], bufView[3]) ==
        '%PDF');

    resolver.resolve(messageData);
  }
}
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {isRTL} from 'chrome://resources/js/util.m.js';

/** Idle time in ms before the UI is hidden. */
const HIDE_TIMEOUT = 2000;
/** Time in ms after force hide before toolbar is shown again. */
const FORCE_HIDE_TIMEOUT = 1000;
/**
 * Velocity required in a mousemove to reveal the UI (pixels/ms). This is
 * intended to be high enough that a fast flick of the mouse is required to
 * reach it.
 */
const SHOW_VELOCITY = 10;
/** Distance from the top of the screen required to reveal the toolbars. */
const TOP_TOOLBAR_REVEAL_DISTANCE = 100;
/** Distance from the bottom-right of the screen required to reveal toolbars. */
const SIDE_TOOLBAR_REVEAL_DISTANCE_RIGHT = 150;
const SIDE_TOOLBAR_REVEAL_DISTANCE_BOTTOM = 250;

/**
 * @param {!MouseEvent} e Event to test.
 * @return {boolean} True if the mouse is close to the top of the screen.
 */
function isMouseNearTopToolbar(e) {
  return e.y < TOP_TOOLBAR_REVEAL_DISTANCE;
}

/**
 * @param {!MouseEvent} e Event to test.
 * @param {Window} window Window to test against.
 * @param {boolean} reverse Whether the side toolbar is reversed.
 * @return {boolean} True if the mouse is close to the bottom-right of the
 * screen.
 */
function isMouseNearSideToolbar(e, window, reverse) {
  let atSide = e.x > window.innerWidth - SIDE_TOOLBAR_REVEAL_DISTANCE_RIGHT;
  if (isRTL() !== reverse) {
    atSide = e.x < SIDE_TOOLBAR_REVEAL_DISTANCE_RIGHT;
  }
  const atBottom =
      e.y > window.innerHeight - SIDE_TOOLBAR_REVEAL_DISTANCE_BOTTOM;
  return atSide && atBottom;
}

/** Responsible for co-ordinating between multiple toolbar elements. */
export class ToolbarManager {
  /**
   * @param {!Window} window The window containing the UI.
   * @param {?ViewerPdfToolbarElement} toolbar
   * @param {!ViewerZoomToolbarElement} zoomToolbar
   */
  constructor(window, toolbar, zoomToolbar) {
    /** @private {!Window} */
    this.window_ = window;

    /** @private {?ViewerPdfToolbarElement} */
    this.toolbar_ = toolbar;

    /** @private {!ViewerZoomToolbarElement} */
    this.zoomToolbar_ = zoomToolbar;

    /** @private {?number} */
    this.toolbarTimeout_ = null;

    /** @private {boolean} */
    this.isMouseNearTopToolbar_ = false;

    /** @private {boolean} */
    this.isMouseNearSideToolbar_ = false;

    /** @private {boolean} */
    this.sideToolbarAllowedOnly_ = false;

    /** @private {?number} */
    this.sideToolbarAllowedOnlyTimer_ = null;

    /** @private {boolean} */
    this.keyboardNavigationActive = false;

    /** @private {?number} */
    this.lastMovementTimestamp = null;

    /** @private {boolean} */
    this.isPrintPreview_ = zoomToolbar.isPrintPreview;

    this.window_.addEventListener('resize', this.resizeDropdowns_.bind(this));
    this.resizeDropdowns_();

    if (this.isPrintPreview_) {
      this.zoomToolbar_.addEventListener('keyboard-navigation-active', e => {
        this.keyboardNavigationActive = e.detail;
      });
    }
  }

  /** @param {!MouseEvent} e */
  handleMouseMove(e) {
    this.isMouseNearTopToolbar_ = !!this.toolbar_ && isMouseNearTopToolbar(e);
    this.isMouseNearSideToolbar_ =
        isMouseNearSideToolbar(e, this.window_, this.isPrintPreview_);

    this.keyboardNavigationActive = false;
    const touchInteractionActive =
        (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents);

    // Allow the top toolbar to be shown if the mouse moves away from the side
    // toolbar (as long as the timeout has elapsed).
    if (!this.isMouseNearSideToolbar_ && !this.sideToolbarAllowedOnlyTimer_) {
      this.sideToolbarAllowedOnly_ = false;
    }

    // Allow the top toolbar to be shown if the mouse moves to the top edge.
    if (this.isMouseNearTopToolbar_) {
      this.sideToolbarAllowedOnly_ = false;
    }

    // Tapping the screen with toolbars open tries to close them.
    if (touchInteractionActive && this.zoomToolbar_.isVisible()) {
      this.hideToolbarsIfAllowed();
      return;
    }

    // Show the toolbars if the mouse is near the top or bottom-right of the
    // screen, if the mouse moved fast, or if the touchscreen was tapped.
    if (this.isMouseNearTopToolbar_ || this.isMouseNearSideToolbar_ ||
        this.isHighVelocityMouseMove_(e) || touchInteractionActive) {
      if (this.sideToolbarAllowedOnly_) {
        this.zoomToolbar_.show();
      } else {
        this.showToolbars();
      }
    }
    this.hideToolbarsAfterTimeout();
  }

  /**
   * Whether a mousemove event is high enough velocity to reveal the toolbars.
   * @param {!MouseEvent} e Event to test.
   * @return {boolean} true if the event is a high velocity mousemove, false
   * otherwise.
   * @private
   */
  isHighVelocityMouseMove_(e) {
    if (e.type == 'mousemove') {
      if (this.lastMovementTimestamp == null) {
        this.lastMovementTimestamp = this.getCurrentTimestamp_();
      } else {
        const movement =
            Math.sqrt(e.movementX * e.movementX + e.movementY * e.movementY);
        const newTime = this.getCurrentTimestamp_();
        const interval = newTime - this.lastMovementTimestamp;
        this.lastMovementTimestamp = newTime;

        if (interval != 0) {
          return movement / interval > SHOW_VELOCITY;
        }
      }
    }
    return false;
  }

  /**
   * Wrapper around Date.now() to make it easily replaceable for testing.
   * @return {number}
   * @private
   */
  getCurrentTimestamp_() {
    return Date.now();
  }

  /** Display both UI toolbars. */
  showToolbars() {
    if (this.toolbar_) {
      this.toolbar_.show();
    }
    this.zoomToolbar_.show();
  }

  /**
   * Show toolbars and mark that navigation is being performed with
   * tab/shift-tab. This disables toolbar hiding until the mouse is moved or
   * escape is pressed.
   */
  showToolbarsForKeyboardNavigation() {
    this.keyboardNavigationActive = true;
    this.showToolbars();
  }

  /**
   * Hide toolbars after a delay, regardless of the position of the mouse.
   * Intended to be called when the mouse has moved out of the parent window.
   */
  hideToolbarsForMouseOut() {
    this.isMouseNearTopToolbar_ = false;
    this.isMouseNearSideToolbar_ = false;
    this.hideToolbarsAfterTimeout();
  }

  /**
   * Check if the toolbars are able to be closed, and close them if they are.
   * Toolbars may be kept open based on mouse/keyboard activity and active
   * elements.
   */
  hideToolbarsIfAllowed() {
    if (this.isMouseNearSideToolbar_ || this.isMouseNearTopToolbar_) {
      return;
    }

    if (this.toolbar_ && this.toolbar_.shouldKeepOpen()) {
      return;
    }

    if (this.keyboardNavigationActive) {
      return;
    }

    // Remove focus to make any visible tooltips disappear -- otherwise they'll
    // still be visible on screen when the toolbar is off screen.
    if ((this.toolbar_ && document.activeElement == this.toolbar_) ||
        document.activeElement == this.zoomToolbar_) {
      document.activeElement.blur();
    }

    if (this.toolbar_) {
      this.toolbar_.hide();
    }
    this.zoomToolbar_.hide();
  }

  /** Hide the toolbars after the HIDE_TIMEOUT has elapsed. */
  hideToolbarsAfterTimeout() {
    if (this.toolbarTimeout_) {
      this.window_.clearTimeout(this.toolbarTimeout_);
    }
    this.toolbarTimeout_ = this.window_.setTimeout(
        this.hideToolbarsIfAllowed.bind(this), HIDE_TIMEOUT);
  }

  /**
   * Hide the 'topmost' layer of toolbars. Hides any dropdowns that are open, or
   * hides the basic toolbars otherwise.
   */
  hideSingleToolbarLayer() {
    if (!this.toolbar_ || !this.toolbar_.hideDropdowns()) {
      this.keyboardNavigationActive = false;
      this.hideToolbarsIfAllowed();
    }
  }

  /**
   * Clears the keyboard navigation state and hides the toolbars after a delay.
   */
  resetKeyboardNavigationAndHideToolbars() {
    this.keyboardNavigationActive = false;
    this.hideToolbarsAfterTimeout();
  }

  /**
   * Hide the top toolbar and keep it hidden until both:
   * - The mouse is moved away from the right side of the screen
   * - 1 second has passed.
   * The top toolbar can be immediately re-opened by moving the mouse to the top
   * of the screen.
   */
  forceHideTopToolbar() {
    if (!this.toolbar_) {
      return;
    }
    this.toolbar_.hide();
    this.sideToolbarAllowedOnly_ = true;
    this.sideToolbarAllowedOnlyTimer_ = this.window_.setTimeout(() => {
      this.sideToolbarAllowedOnlyTimer_ = null;
    }, FORCE_HIDE_TIMEOUT);
  }

  /**
   * Updates the size of toolbar dropdowns based on the positions of the rest of
   * the UI.
   * @private
   */
  resizeDropdowns_() {
    if (!this.toolbar_) {
      return;
    }
    const lowerBound =
        this.window_.innerHeight - this.zoomToolbar_.clientHeight;
    this.toolbar_.setDropdownLowerBound(lowerBound);
  }
}
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Enumeration of page fitting types.
 * @enum {string}
 */
export const FittingType = {
  NONE: 'none',
  FIT_TO_PAGE: 'fit-to-page',
  FIT_TO_WIDTH: 'fit-to-width',
  FIT_TO_HEIGHT: 'fit-to-height'
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {assert} from 'chrome://resources/js/assert.m.js';
import {EventTracker} from 'chrome://resources/js/event_tracker.m.js';
import {$} from 'chrome://resources/js/util.m.js';

import {FittingType} from './pdf_fitting_type.js';
import {InactiveZoomManager, ZoomManager} from './zoom_manager.js';

/**
 * @typedef {{
 *   width: number,
 *   height: number,
 *   layoutOptions: (!LayoutOptions|undefined),
 *   pageDimensions: Array<ViewportRect>,
 * }}
 */
let DocumentDimensions;

/** @typedef {{defaultPageOrientation: number}} */
export let LayoutOptions;

/** @typedef {{x: number, y: number}} */
export let Point;

/** @typedef {{x: (number|undefined), y: (number|undefined)}} */
export let PartialPoint;

/** @typedef {{width: number, height: number}} */
let Size;

/** @typedef {{x: number, y: number, width: number, height: number}} */
let ViewportRect;

/**
 * Clamps the zoom factor (or page scale factor) to be within the limits.
 * @param {number} factor The zoom/scale factor.
 * @return {number} The factor clamped within the limits.
 */
function clampZoom(factor) {
  return Math.max(
      Viewport.ZOOM_FACTOR_RANGE.min,
      Math.min(factor, Viewport.ZOOM_FACTOR_RANGE.max));
}

/**
 * @param {!ViewportRect} rect1
 * @param {!ViewportRect} rect2
 * @return {number} The area of the intersection of the rects
 */
function getIntersectionArea(rect1, rect2) {
  const left = Math.max(rect1.x, rect2.x);
  const top = Math.max(rect1.y, rect2.y);
  const right = Math.min(rect1.x + rect1.width, rect2.x + rect2.width);
  const bottom = Math.min(rect1.y + rect1.height, rect2.y + rect2.height);

  if (left >= right || top >= bottom) {
    return 0;
  }

  return (right - left) * (bottom - top);
}

/**
 * @param {!Point} p1
 * @param {!Point} p2
 * @return {!Point} The vector between the two points.
 */
function vectorDelta(p1, p2) {
  return {x: p2.x - p1.x, y: p2.y - p1.y};
}

/**
 * @param {!Point} coordinateInFrame
 * @return {!Point} Coordinate converted to plugin coordinates.
 */
function frameToPluginCoordinate(coordinateInFrame) {
  const container = $('plugin');
  return {
    x: coordinateInFrame.x - container.getBoundingClientRect().left,
    y: coordinateInFrame.y - container.getBoundingClientRect().top
  };
}

export class Viewport {
  /**
   * @param {!Window} window
   * @param {!HTMLDivElement} sizer The element which represents the size of the
   *     document in the viewport
   * @param {number} scrollbarWidth The width of scrollbars on the page
   * @param {number} defaultZoom The default zoom level.
   * @param {number} topToolbarHeight The number of pixels that should initially
   *     be left blank above the document for the toolbar.
   */
  constructor(window, sizer, scrollbarWidth, defaultZoom, topToolbarHeight) {
    /** @private {!Window} */
    this.window_ = window;

    /** @private {!HTMLDivElement} */
    this.sizer_ = sizer;

    /** @private {number} */
    this.scrollbarWidth_ = scrollbarWidth;

    /** @private {number} */
    this.defaultZoom_ = defaultZoom;

    /** @private {number} */
    this.topToolbarHeight_ = topToolbarHeight;

    /** @private {function():void} */
    this.viewportChangedCallback_ = function() {};

    /** @private {function():void} */
    this.beforeZoomCallback_ = function() {};

    /** @private {function():void} */
    this.afterZoomCallback_ = function() {};

    /** @private {function(boolean):void} */
    this.userInitiatedCallback_ = function() {};

    /** @private {boolean} */
    this.allowedToChangeZoom_ = false;

    /** @private {number} */
    this.internalZoom_ = 1;

    /** @private {?ZoomManager} */
    this.zoomManager_ = null;

    /** @private {?DocumentDimensions} */
    this.documentDimensions_ = null;

    /** @private {Array<ViewportRect>} */
    this.pageDimensions_ = [];

    /** @private {!FittingType} */
    this.fittingType_ = FittingType.NONE;

    /**
     * |twoUpView_| should be in sync with |two_up_view_| in PDFiumEngine.
     * @private {boolean}
     */
    this.twoUpView_ = false;

    /** @private {number} */
    this.prevScale_ = 1;

    /** @private {!Viewport.PinchPhase} */
    this.pinchPhase_ = Viewport.PinchPhase.PINCH_NONE;

    /** @private {?Point} */
    this.pinchPanVector_ = null;

    /** @private {?Point} */
    this.pinchCenter_ = null;

    /** @private {?Point} */
    this.firstPinchCenterInFrame_ = null;

    /** @private {number} */
    this.rotations_ = 0;

    /** @private {?Point} */
    this.oldCenterInContent_ = null;

    /** @private {boolean} */
    this.keepContentCentered_ = false;

    /** @private {!EventTracker} */
    this.tracker_ = new EventTracker();

    // Set to a default zoom manager - used in tests.
    this.setZoomManager(new InactiveZoomManager(this.getZoom.bind(this), 1));

    window.addEventListener('scroll', this.updateViewport_.bind(this));
    window.addEventListener('resize', this.resizeWrapper_.bind(this));
  }

  /** @param {function():void} viewportChangedCallback */
  setViewportChangedCallback(viewportChangedCallback) {
    this.viewportChangedCallback_ = viewportChangedCallback;
  }

  /** @param {function():void} beforeZoomCallback */
  setBeforeZoomCallback(beforeZoomCallback) {
    this.beforeZoomCallback_ = beforeZoomCallback;
  }

  /** @param {function():void} afterZoomCallback */
  setAfterZoomCallback(afterZoomCallback) {
    this.afterZoomCallback_ = afterZoomCallback;
  }

  /** @param {function(boolean):void} userInitiatedCallback */
  setUserInitiatedCallback(userInitiatedCallback) {
    this.userInitiatedCallback_ = userInitiatedCallback;
  }

  rotateClockwise() {
    this.rotateBySteps_(1);
  }

  rotateCounterclockwise() {
    this.rotateBySteps_(3);
  }

  /**
   * @param {number} n The number of clockwise 90-degree rotations to increment
   *     by.
   */
  rotateBySteps_(n) {
    this.rotations_ = (this.rotations_ + n) % 4;
  }

  /**
   * @return {number} The number of clockwise 90-degree rotations that have been
   *     applied.
   */
  getClockwiseRotations() {
    return this.rotations_;
  }

  /** @param {boolean} twoUpView The new two up view state to set. */
  setTwoUpView(twoUpView) {
    this.twoUpView_ = twoUpView;
  }

  /**
   * Converts a page position (e.g. the location of a bookmark) to a screen
   * position.
   * @param {number} page
   * @param {!Point} point The position on `page`.
   * @return {!Point} The screen position.
   */
  convertPageToScreen(page, point) {
    const dimensions = this.getPageInsetDimensions(page);

    // width & height are already rotated.
    const height = dimensions.height;
    const width = dimensions.width;

    const matrix = new DOMMatrix();

    const rotation = this.rotations_ * 90;
    // Set origin for rotation.
    if (rotation == 90) {
      matrix.translateSelf(width, 0);
    } else if (rotation == 180) {
      matrix.translateSelf(width, height);
    } else if (rotation == 270) {
      matrix.translateSelf(0, height);
    }
    matrix.rotateSelf(0, 0, rotation);

    // Invert Y position with respect to height as page coordinates are
    // measured from the bottom left.
    matrix.translateSelf(0, height);
    matrix.scaleSelf(1, -1);

    const pointsToPixels = 96 / 72;
    const result = matrix.transformPoint({
      x: point.x * pointsToPixels,
      y: point.y * pointsToPixels,
    });
    return {
      x: result.x + Viewport.PAGE_SHADOW.left,
      y: result.y + Viewport.PAGE_SHADOW.top,
    };
  }


  /**
   * Returns the zoomed and rounded document dimensions for the given zoom.
   * Rounding is necessary when interacting with the renderer which tends to
   * operate in integral values (for example for determining if scrollbars
   * should be shown).
   * @param {number} zoom The zoom to use to compute the scaled dimensions.
   * @return {?Size} Scaled 'width' and 'height' of the document.
   * @private
   */
  getZoomedDocumentDimensions_(zoom) {
    if (!this.documentDimensions_) {
      return null;
    }
    return {
      width: Math.round(this.documentDimensions_.width * zoom),
      height: Math.round(this.documentDimensions_.height * zoom)
    };
  }

  /** @return {!Size} A dictionary with the 'width'/'height' of the document. */
  getDocumentDimensions() {
    return {
      width: this.documentDimensions_.width,
      height: this.documentDimensions_.height
    };
  }

  /**
   * @return {!LayoutOptions|undefined} A dictionary carrying layout options
   *     from the plugin.
   */
  getLayoutOptions() {
    return this.documentDimensions_ ? this.documentDimensions_.layoutOptions :
                                      undefined;
  }

  /**
   * @return {!ViewportRect} ViewportRect for the viewport given current zoom.
   * @private
   */
  getViewportRect_() {
    const zoom = this.getZoom();
    return {
      x: this.position.x / zoom,
      y: this.position.y / zoom,
      width: this.size.width / zoom,
      height: this.size.height / zoom
    };
  }

  /**
   * @param {number} zoom Zoom to compute scrollbars for
   * @return {{horizontal: boolean, vertical: boolean}} Whether horizontal or
   *     vertical scrollbars are needed.
   * @private
   */
  documentNeedsScrollbars_(zoom) {
    const zoomedDimensions = this.getZoomedDocumentDimensions_(zoom);
    if (!zoomedDimensions) {
      return {horizontal: false, vertical: false};
    }

    // If scrollbars are required for one direction, expand the document in the
    // other direction to take the width of the scrollbars into account when
    // deciding whether the other direction needs scrollbars.
    if (zoomedDimensions.width > this.window_.innerWidth) {
      zoomedDimensions.height += this.scrollbarWidth_;
    } else if (zoomedDimensions.height > this.window_.innerHeight) {
      zoomedDimensions.width += this.scrollbarWidth_;
    }
    return {
      horizontal: zoomedDimensions.width > this.window_.innerWidth,
      vertical: zoomedDimensions.height + this.topToolbarHeight_ >
          this.window_.innerHeight
    };
  }

  /**
   * @return {!{horizontal: boolean, vertical: boolean}} Whether horizontal and
   *     vertical scrollbars are needed.
   */
  documentHasScrollbars() {
    return this.documentNeedsScrollbars_(this.getZoom());
  }

  /**
   * Helper function called when the zoomed document size changes. Updates the
   * sizer's width and height.
   * @private
   */
  contentSizeChanged_() {
    const zoomedDimensions = this.getZoomedDocumentDimensions_(this.getZoom());
    if (zoomedDimensions) {
      this.sizer_.style.width = zoomedDimensions.width + 'px';
      this.sizer_.style.height =
          zoomedDimensions.height + this.topToolbarHeight_ + 'px';
    }
  }

  /**
   * Called when the viewport should be updated.
   * @private
   */
  updateViewport_() {
    this.viewportChangedCallback_();
  }

  /**
   * Called when the browser window size changes.
   * @private
   */
  resizeWrapper_() {
    this.userInitiatedCallback_(false);
    this.resize_();
    this.userInitiatedCallback_(true);
  }

  /**
   * Called when the viewport size changes.
   * @private
   */
  resize_() {
    if (this.fittingType_ == FittingType.FIT_TO_PAGE) {
      this.fitToPageInternal_(false);
    } else if (this.fittingType_ == FittingType.FIT_TO_WIDTH) {
      this.fitToWidth();
    } else if (this.fittingType_ == FittingType.FIT_TO_HEIGHT) {
      this.fitToHeightInternal_(false);
    } else if (this.internalZoom_ == 0) {
      this.fitToNone();
    } else {
      this.updateViewport_();
    }
  }

  /** @return {!Point} The scroll position of the viewport. */
  get position() {
    return {
      x: this.window_.pageXOffset,
      y: this.window_.pageYOffset - this.topToolbarHeight_
    };
  }

  /**
   * Scroll the viewport to the specified position.
   * @param {!Point} position The position to scroll to.
   */
  set position(position) {
    this.window_.scrollTo(position.x, position.y + this.topToolbarHeight_);
  }

  /** @return {!Size} the size of the viewport excluding scrollbars. */
  get size() {
    const needsScrollbars = this.documentNeedsScrollbars_(this.getZoom());
    const scrollbarWidth = needsScrollbars.vertical ? this.scrollbarWidth_ : 0;
    const scrollbarHeight =
        needsScrollbars.horizontal ? this.scrollbarWidth_ : 0;
    return {
      width: this.window_.innerWidth - scrollbarWidth,
      height: this.window_.innerHeight - scrollbarHeight
    };
  }

  /** @return {number} The current zoom. */
  getZoom() {
    return this.zoomManager_.applyBrowserZoom(this.internalZoom_);
  }

  /** @param {!ZoomManager} manager */
  setZoomManager(manager) {
    this.resetTracker();
    this.zoomManager_ = manager;
    this.tracker_.add(
        this.zoomManager_.getEventTarget(), 'set-zoom',
        e => this.setZoom(e.detail));
    this.tracker_.add(
        this.zoomManager_.getEventTarget(), 'update-zoom-from-browser',
        this.updateZoomFromBrowserChange_.bind(this));
  }

  /**
   * @return {!Viewport.PinchPhase} The phase of the current pinch gesture for
   *    the viewport.
   */
  get pinchPhase() {
    return this.pinchPhase_;
  }

  /**
   * @return {?Point} The panning caused by the current pinch gesture (as
   *    the deltas of the x and y coordinates).
   */
  get pinchPanVector() {
    return this.pinchPanVector_;
  }

  /**
   * @return {?Point} The coordinates of the center of the current pinch
   *     gesture.
   */
  get pinchCenter() {
    return this.pinchCenter_;
  }

  /**
   * Used to wrap a function that might perform zooming on the viewport. This is
   * required so that we can notify the plugin that zooming is in progress
   * so that while zooming is taking place it can stop reacting to scroll events
   * from the viewport. This is to avoid flickering.
   * @param {function():void} f Function to wrap
   * @private
   */
  mightZoom_(f) {
    this.beforeZoomCallback_();
    this.allowedToChangeZoom_ = true;
    f();
    this.allowedToChangeZoom_ = false;
    this.afterZoomCallback_();
    this.zoomManager_.onPdfZoomChange();
  }

  /**
   * @param {number} newZoom The zoom level to set.
   * @private
   */
  setZoomInternal_(newZoom) {
    assert(
        this.allowedToChangeZoom_,
        'Called Viewport.setZoomInternal_ without calling ' +
            'Viewport.mightZoom_.');
    // Record the scroll position (relative to the top-left of the window).
    let zoom = this.getZoom();
    const currentScrollPos = {
      x: this.position.x / zoom,
      y: this.position.y / zoom
    };

    this.internalZoom_ = newZoom;
    this.contentSizeChanged_();
    // Scroll to the scaled scroll position.
    zoom = this.getZoom();
    this.position = {
      x: currentScrollPos.x * zoom,
      y: currentScrollPos.y * zoom
    };
  }

  /**
   * Sets the zoom of the viewport.
   * Same as setZoomInternal_ but for pinch zoom we have some more operations.
   * @param {number} scaleDelta The zoom delta.
   * @param {!Point} center The pinch center in content coordinates.
   * @private
   */
  setPinchZoomInternal_(scaleDelta, center) {
    assert(
        this.allowedToChangeZoom_,
        'Called Viewport.setPinchZoomInternal_ without calling ' +
            'Viewport.mightZoom_.');
    this.internalZoom_ = clampZoom(this.internalZoom_ * scaleDelta);

    const newCenterInContent = this.frameToContent_(center);
    const delta = {
      x: (newCenterInContent.x - this.oldCenterInContent_.x),
      y: (newCenterInContent.y - this.oldCenterInContent_.y)
    };

    // Record the scroll position (relative to the pinch center).
    const zoom = this.getZoom();
    const currentScrollPos = {
      x: this.position.x - delta.x * zoom,
      y: this.position.y - delta.y * zoom
    };

    this.contentSizeChanged_();
    // Scroll to the scaled scroll position.
    this.position = {x: currentScrollPos.x, y: currentScrollPos.y};
  }

  /**
   *  Converts a point from frame to content coordinates.
   *  @param {!Point} framePoint The frame coordinates.
   *  @return {!Point} The content coordinates.
   *  @private
   */
  frameToContent_(framePoint) {
    // TODO(mcnee) Add a helper Point class to avoid duplicating operations
    // on plain {x,y} objects.
    const zoom = this.getZoom();
    return {
      x: (framePoint.x + this.position.x) / zoom,
      y: (framePoint.y + this.position.y) / zoom
    };
  }

  /**
   * @param {number} newZoom The zoom level to zoom to.
   */
  setZoom(newZoom) {
    this.fittingType_ = FittingType.NONE;
    this.mightZoom_(() => {
      this.setZoomInternal_(clampZoom(newZoom));
      this.updateViewport_();
    });
  }

  /**
   * @param {!CustomEvent<number>} e Event containing the old browser zoom.
   * @private
   */
  updateZoomFromBrowserChange_(e) {
    const oldBrowserZoom = e.detail;
    this.mightZoom_(() => {
      // Record the scroll position (relative to the top-left of the window).
      const oldZoom = oldBrowserZoom * this.internalZoom_;
      const currentScrollPos = {
        x: this.position.x / oldZoom,
        y: this.position.y / oldZoom
      };
      this.contentSizeChanged_();
      const newZoom = this.getZoom();
      // Scroll to the scaled scroll position.
      this.position = {
        x: currentScrollPos.x * newZoom,
        y: currentScrollPos.y * newZoom
      };
      this.updateViewport_();
    });
  }

  /** @return {number} The width of scrollbars in the viewport in pixels. */
  get scrollbarWidth() {
    return this.scrollbarWidth_;
  }

  /** @return {FittingType} The fitting type the viewport is currently in. */
  get fittingType() {
    return this.fittingType_;
  }

  /**
   * Get the page at a given y position. If there are multiple pages
   * overlapping the given y-coordinate, return the page with the smallest
   * index.
   * @param {number} y The y-coordinate to get the page at.
   * @return {number} The index of a page overlapping the given y-coordinate.
   * @private
   */
  getPageAtY_(y) {
    let min = 0;
    let max = this.pageDimensions_.length - 1;
    while (max >= min) {
      const page = Math.floor(min + ((max - min) / 2));
      // There might be a gap between the pages, in which case use the bottom
      // of the previous page as the top for finding the page.
      let top = 0;
      if (page > 0) {
        top = this.pageDimensions_[page - 1].y +
            this.pageDimensions_[page - 1].height;
      }
      const bottom =
          this.pageDimensions_[page].y + this.pageDimensions_[page].height;

      if (top <= y && y <= bottom) {
        return page;
      }

      if (top > y) {
        max = page - 1;
      } else {
        min = page + 1;
      }
    }
    return 0;
  }

  /**
   * Return the last page visible in the viewport. Returns the last index of the
   * document if the viewport is below the document.
   * @param {!ViewportRect} viewportRect
   * @return {number} The highest index of the pages visible in the viewport.
   * @private
   */
  getLastPageInViewport_(viewportRect) {
    const pageAtY = this.getPageAtY_(viewportRect.y + viewportRect.height);

    if (!this.twoUpView_ || pageAtY % 2 == 1 ||
        pageAtY + 1 >= this.pageDimensions_.length) {
      return pageAtY;
    }

    const nextPage = this.pageDimensions_[pageAtY + 1];
    return getIntersectionArea(viewportRect, nextPage) > 0 ? pageAtY + 1 :
                                                             pageAtY;
  }

  /**
   * @param {!Point} point
   * @return {boolean} Whether |point| (in screen coordinates) is inside a page
   */
  isPointInsidePage(point) {
    const zoom = this.getZoom();
    const size = this.size;
    const position = this.position;
    const page = this.getPageAtY_((position.y + point.y) / zoom);
    const pageWidth = this.pageDimensions_[page].width * zoom;
    const documentWidth = this.getDocumentDimensions().width * zoom;

    const outerWidth = Math.max(size.width, documentWidth);

    if (pageWidth >= outerWidth) {
      return true;
    }

    const x = point.x + position.x;

    const minX = (outerWidth - pageWidth) / 2;
    const maxX = outerWidth - minX;
    return x >= minX && x <= maxX;
  }

  /**
   * @return {number} The index of the page with the greatest proportion of its
   *     area in the current viewport.
   */
  getMostVisiblePage() {
    const viewportRect = this.getViewportRect_();

    const firstVisiblePage = this.getPageAtY_(viewportRect.y);
    const lastPossibleVisiblePage = this.getLastPageInViewport_(viewportRect);
    if (firstVisiblePage === lastPossibleVisiblePage) {
      return firstVisiblePage;
    }

    let mostVisiblePage = firstVisiblePage;
    let largestIntersection = 0;

    for (let i = firstVisiblePage; i < lastPossibleVisiblePage + 1; i++) {
      const pageArea =
          this.pageDimensions_[i].width * this.pageDimensions_[i].height;

      // TODO(thestig): check whether we can remove this check.
      if (pageArea <= 0) {
        continue;
      }

      const pageIntersectionArea =
          getIntersectionArea(this.pageDimensions_[i], viewportRect) / pageArea;

      if (pageIntersectionArea > largestIntersection) {
        mostVisiblePage = i;
        largestIntersection = pageIntersectionArea;
      }
    }

    return mostVisiblePage;
  }

  /**
   * Compute the zoom level for fit-to-page, fit-to-width or fit-to-height.
   * At least one of {fitWidth, fitHeight} must be true.
   * @param {!Size} pageDimensions The dimensions of a given page in px.
   * @param {boolean} fitWidth Whether the whole width of the page needs to be
   *     in the viewport.
   * @param {boolean} fitHeight Whether the whole height of the page needs to be
   *     in the viewport.
   * @return {number} The internal zoom to set
   * @private
   */
  computeFittingZoom_(pageDimensions, fitWidth, fitHeight) {
    assert(
        fitWidth || fitHeight,
        'Invalid parameters. At least one of fitWidth and fitHeight must be ' +
            'true.');

    // First compute the zoom without scrollbars.
    let zoom = this.computeFittingZoomGivenDimensions_(
        fitWidth, fitHeight, this.window_.innerWidth, this.window_.innerHeight,
        pageDimensions.width, pageDimensions.height);

    // Check if there needs to be any scrollbars.
    const needsScrollbars = this.documentNeedsScrollbars_(zoom);

    // If the document fits, just return the zoom.
    if (!needsScrollbars.horizontal && !needsScrollbars.vertical) {
      return zoom;
    }

    const zoomedDimensions = this.getZoomedDocumentDimensions_(zoom);

    // Check if adding a scrollbar will result in needing the other scrollbar.
    const scrollbarWidth = this.scrollbarWidth_;
    if (needsScrollbars.horizontal &&
        zoomedDimensions.height > this.window_.innerHeight - scrollbarWidth) {
      needsScrollbars.vertical = true;
    }
    if (needsScrollbars.vertical &&
        zoomedDimensions.width > this.window_.innerWidth - scrollbarWidth) {
      needsScrollbars.horizontal = true;
    }

    // Compute available window space.
    const windowWithScrollbars = {
      width: this.window_.innerWidth,
      height: this.window_.innerHeight
    };
    if (needsScrollbars.horizontal) {
      windowWithScrollbars.height -= scrollbarWidth;
    }
    if (needsScrollbars.vertical) {
      windowWithScrollbars.width -= scrollbarWidth;
    }

    // Recompute the zoom.
    zoom = this.computeFittingZoomGivenDimensions_(
        fitWidth, fitHeight, windowWithScrollbars.width,
        windowWithScrollbars.height, pageDimensions.width,
        pageDimensions.height);

    return this.zoomManager_.internalZoomComponent(zoom);
  }

  /**
   * Compute a zoom level given the dimensions to fit and the actual numbers
   * in those dimensions.
   * @param {boolean} fitWidth Whether to constrain the page width to the
   *     window.
   * @param {boolean} fitHeight Whether to constrain the page height to the
   *     window.
   * @param {number} windowWidth Width of the window in px.
   * @param {number} windowHeight Height of the window in px.
   * @param {number} pageWidth Width of the page in px.
   * @param {number} pageHeight Height of the page in px.
   * @return {number} The internal zoom to set
   * @private
   */
  computeFittingZoomGivenDimensions_(
      fitWidth, fitHeight, windowWidth, windowHeight, pageWidth, pageHeight) {
    // Assumes at least one of {fitWidth, fitHeight} is set.
    let zoomWidth;
    let zoomHeight;

    if (fitWidth) {
      zoomWidth = windowWidth / pageWidth;
    }

    if (fitHeight) {
      zoomHeight = windowHeight / pageHeight;
    }

    let zoom;
    if (!fitWidth && fitHeight) {
      zoom = zoomHeight;
    } else if (fitWidth && !fitHeight) {
      zoom = zoomWidth;
    } else {
      // Assume fitWidth && fitHeight
      zoom = Math.min(zoomWidth, zoomHeight);
    }

    return Math.max(zoom, 0);
  }

  /** Zoom the viewport so that the page width consumes the entire viewport. */
  fitToWidth() {
    this.mightZoom_(() => {
      this.fittingType_ = FittingType.FIT_TO_WIDTH;
      if (!this.documentDimensions_) {
        return;
      }
      // When computing fit-to-width, the maximum width of a page in the
      // document is used, which is equal to the size of the document width.
      this.setZoomInternal_(
          this.computeFittingZoom_(this.documentDimensions_, true, false));
      this.updateViewport_();
    });
  }

  /**
   * Zoom the viewport so that the page height consumes the entire viewport.
   * @param {boolean} scrollToTopOfPage Set to true if the viewport should be
   *     scrolled to the top of the current page. Set to false if the viewport
   *     should remain at the current scroll position.
   * @private
   */
  fitToHeightInternal_(scrollToTopOfPage) {
    this.mightZoom_(() => {
      this.fittingType_ = FittingType.FIT_TO_HEIGHT;
      if (!this.documentDimensions_) {
        return;
      }
      const page = this.getMostVisiblePage();
      // When computing fit-to-height, the maximum height of the current page
      // is used.
      const dimensions = {
        width: 0,
        height: this.pageDimensions_[page].height,
      };
      this.setZoomInternal_(this.computeFittingZoom_(dimensions, false, true));
      if (scrollToTopOfPage) {
        this.position = {
          x: 0,
          y: this.pageDimensions_[page].y * this.getZoom()
        };
      }
      this.updateViewport_();
    });
  }

  /** Zoom the viewport so that the page height consumes the entire viewport. */
  fitToHeight() {
    this.fitToHeightInternal_(true);
  }

  /**
   * Zoom the viewport so that a page consumes as much as possible of the it.
   * @param {boolean} scrollToTopOfPage Whether the viewport should be scrolled
   *     to the top of the current page. If false, the viewport will remain at
   *     the current scroll position.
   * @private
   */
  fitToPageInternal_(scrollToTopOfPage) {
    this.mightZoom_(() => {
      this.fittingType_ = FittingType.FIT_TO_PAGE;
      if (!this.documentDimensions_) {
        return;
      }
      const page = this.getMostVisiblePage();
      // Fit to the current page's height and the widest page's width.
      const dimensions = {
        width: this.documentDimensions_.width,
        height: this.pageDimensions_[page].height,
      };
      this.setZoomInternal_(this.computeFittingZoom_(dimensions, true, true));
      if (scrollToTopOfPage) {
        this.position = {
          x: 0,
          y: this.pageDimensions_[page].y * this.getZoom()
        };
      }
      this.updateViewport_();
    });
  }

  /**
   * Zoom the viewport so that a page consumes the entire viewport. Also scrolls
   * the viewport to the top of the current page.
   */
  fitToPage() {
    this.fitToPageInternal_(true);
  }

  /** Zoom the viewport to the default zoom. */
  fitToNone() {
    this.mightZoom_(() => {
      this.fittingType_ = FittingType.NONE;
      if (!this.documentDimensions_) {
        return;
      }
      this.setZoomInternal_(Math.min(
          this.defaultZoom_,
          this.computeFittingZoom_(this.documentDimensions_, true, false)));
      this.updateViewport_();
    });
  }

  /** Zoom out to the next predefined zoom level. */
  zoomOut() {
    this.mightZoom_(() => {
      this.fittingType_ = FittingType.NONE;
      let nextZoom = Viewport.ZOOM_FACTORS[0];
      for (let i = 0; i < Viewport.ZOOM_FACTORS.length; i++) {
        if (Viewport.ZOOM_FACTORS[i] < this.internalZoom_) {
          nextZoom = Viewport.ZOOM_FACTORS[i];
        }
      }
      this.setZoomInternal_(nextZoom);
      this.updateViewport_();
    });
  }

  /** Zoom in to the next predefined zoom level. */
  zoomIn() {
    this.mightZoom_(() => {
      this.fittingType_ = FittingType.NONE;
      let nextZoom = Viewport.ZOOM_FACTORS[Viewport.ZOOM_FACTORS.length - 1];
      for (let i = Viewport.ZOOM_FACTORS.length - 1; i >= 0; i--) {
        if (Viewport.ZOOM_FACTORS[i] > this.internalZoom_) {
          nextZoom = Viewport.ZOOM_FACTORS[i];
        }
      }
      this.setZoomInternal_(nextZoom);
      this.updateViewport_();
    });
  }

  /**
   * Pinch zoom event handler.
   * @param {!Object} e The pinch event.
   */
  pinchZoom(e) {
    this.mightZoom_(() => {
      this.pinchPhase_ = e.direction == 'out' ?
          Viewport.PinchPhase.PINCH_UPDATE_ZOOM_OUT :
          Viewport.PinchPhase.PINCH_UPDATE_ZOOM_IN;

      const scaleDelta = e.startScaleRatio / this.prevScale_;
      if (this.firstPinchCenterInFrame_ != null) {
        this.pinchPanVector_ =
            vectorDelta(e.center, this.firstPinchCenterInFrame_);
      }

      const needsScrollbars =
          this.documentNeedsScrollbars_(this.zoomManager_.applyBrowserZoom(
              clampZoom(this.internalZoom_ * scaleDelta)));

      this.pinchCenter_ = e.center;

      // If there's no horizontal scrolling, keep the content centered so the
      // user can't zoom in on the non-content area.
      // TODO(mcnee) Investigate other ways of scaling when we don't have
      // horizontal scrolling. We want to keep the document centered,
      // but this causes a potentially awkward transition when we start
      // using the gesture center.
      if (!needsScrollbars.horizontal) {
        this.pinchCenter_ = {
          x: this.window_.innerWidth / 2,
          y: this.window_.innerHeight / 2
        };
      } else if (this.keepContentCentered_) {
        this.oldCenterInContent_ =
            this.frameToContent_(frameToPluginCoordinate(e.center));
        this.keepContentCentered_ = false;
      }

      this.setPinchZoomInternal_(scaleDelta, frameToPluginCoordinate(e.center));
      this.updateViewport_();
      this.prevScale_ = e.startScaleRatio;
    });
  }

  /** @param {!Object} e The pinch event. */
  pinchZoomStart(e) {
    this.pinchPhase_ = Viewport.PinchPhase.PINCH_START;
    this.prevScale_ = 1;
    this.oldCenterInContent_ =
        this.frameToContent_(frameToPluginCoordinate(e.center));

    const needsScrollbars = this.documentNeedsScrollbars_(this.getZoom());
    this.keepContentCentered_ = !needsScrollbars.horizontal;
    // We keep track of begining of the pinch.
    // By doing so we will be able to compute the pan distance.
    this.firstPinchCenterInFrame_ = e.center;
  }

  /** @param {!Object} e The pinch event. */
  pinchZoomEnd(e) {
    this.mightZoom_(() => {
      this.pinchPhase_ = Viewport.PinchPhase.PINCH_END;
      const scaleDelta = e.startScaleRatio / this.prevScale_;
      this.pinchCenter_ = /** @type {!Point} */ (e.center);

      this.setPinchZoomInternal_(scaleDelta, frameToPluginCoordinate(e.center));
      this.updateViewport_();
    });

    this.pinchPhase_ = Viewport.PinchPhase.PINCH_NONE;
    this.pinchPanVector_ = null;
    this.pinchCenter_ = null;
    this.firstPinchCenterInFrame_ = null;
  }

  /**
   * Go to the next page. If the document is in two-up view, go to the left page
   * of the next row.
   */
  goToNextPage() {
    const currentPage = this.getMostVisiblePage();
    const nextPageOffset = (this.twoUpView_ && currentPage % 2 == 0) ? 2 : 1;
    this.goToPage(currentPage + nextPageOffset);
  }

  /**
   * Go to the previous page. If the document is in two-up view, go to the left
   * page of the previous row.
   */
  goToPreviousPage() {
    const currentPage = this.getMostVisiblePage();
    let previousPageOffset = -1;

    if (this.twoUpView_) {
      previousPageOffset = (currentPage % 2 == 0) ? -2 : -3;
    }

    this.goToPage(currentPage + previousPageOffset);
  }

  /**
   * Go to the given page index.
   * @param {number} page the index of the page to go to. zero-based.
   */
  goToPage(page) {
    this.goToPageAndXY(page, 0, 0);
  }

  /**
   * Go to the given y position in the given page index.
   * @param {number} page the index of the page to go to. zero-based.
   * @param {number} x the x position in the page to go to.
   * @param {number} y the y position in the page to go to.
   */
  goToPageAndXY(page, x, y) {
    this.mightZoom_(() => {
      if (this.pageDimensions_.length === 0) {
        return;
      }
      if (page < 0) {
        page = 0;
      }
      if (page >= this.pageDimensions_.length) {
        page = this.pageDimensions_.length - 1;
      }
      const dimensions = this.pageDimensions_[page];
      let toolbarOffset = 0;
      // Unless we're in fit to page or fit to height mode, scroll above the
      // page by |this.topToolbarHeight_| so that the toolbar isn't covering it
      // initially.
      if (!this.isPagedMode()) {
        toolbarOffset = this.topToolbarHeight_;
      }
      this.position = {
        x: (dimensions.x + x) * this.getZoom(),
        y: (dimensions.y + y) * this.getZoom() - toolbarOffset
      };
      this.updateViewport_();
    });
  }

  /**
   * @param {DocumentDimensions} documentDimensions The dimensions of the
   *     document
   */
  setDocumentDimensions(documentDimensions) {
    this.mightZoom_(() => {
      const initialDimensions = !this.documentDimensions_;
      this.documentDimensions_ = documentDimensions;
      this.pageDimensions_ = this.documentDimensions_.pageDimensions;
      if (initialDimensions) {
        this.setZoomInternal_(Math.min(
            this.defaultZoom_,
            this.computeFittingZoom_(this.documentDimensions_, true, false)));
        this.position = {x: 0, y: -this.topToolbarHeight_};
      }
      this.contentSizeChanged_();
      this.resize_();
    });
  }

  /**
   * @param {number} page
   * @return {ViewportRect} The bounds for page `page` minus the shadows.
   */
  getPageInsetDimensions(page) {
    const pageDimensions = this.pageDimensions_[page];
    const shadow = Viewport.PAGE_SHADOW;
    return {
      x: pageDimensions.x + shadow.left,
      y: pageDimensions.y + shadow.top,
      width: pageDimensions.width - shadow.left - shadow.right,
      height: pageDimensions.height - shadow.top - shadow.bottom,
    };
  }

  /**
   * Get the coordinates of the page contents (excluding the page shadow)
   * relative to the screen.
   * @param {number} page The index of the page to get the rect for.
   * @return {!ViewportRect} A rect representing the page in screen coordinates.
   */
  getPageScreenRect(page) {
    if (!this.documentDimensions_) {
      return {x: 0, y: 0, width: 0, height: 0};
    }
    if (page >= this.pageDimensions_.length) {
      page = this.pageDimensions_.length - 1;
    }

    const pageDimensions = this.pageDimensions_[page];

    // Compute the page dimensions minus the shadows.
    const insetDimensions = this.getPageInsetDimensions(page);

    // Compute the x-coordinate of the page within the document.
    // TODO(raymes): This should really be set when the PDF plugin passes the
    // page coordinates, but it isn't yet.
    const x = (this.documentDimensions_.width - pageDimensions.width) / 2 +
        Viewport.PAGE_SHADOW.left;
    // Compute the space on the left of the document if the document fits
    // completely in the screen.
    const zoom = this.getZoom();
    let spaceOnLeft =
        (this.size.width - this.documentDimensions_.width * zoom) / 2;
    spaceOnLeft = Math.max(spaceOnLeft, 0);

    return {
      x: x * zoom + spaceOnLeft - this.window_.pageXOffset,
      y: insetDimensions.y * zoom - this.window_.pageYOffset,
      width: insetDimensions.width * zoom,
      height: insetDimensions.height * zoom
    };
  }

  /**
   * Check if the current fitting type is a paged mode.
   * In a paged mode, page up and page down scroll to the top of the
   * previous/next page and part of the page is under the toolbar.
   * @return {boolean} Whether the current fitting type is a paged mode.
   */
  isPagedMode() {
    return (
        this.fittingType_ == FittingType.FIT_TO_PAGE ||
        this.fittingType_ == FittingType.FIT_TO_HEIGHT);
  }

  /**
   * @param {!PartialPoint} point The position to which to scroll the viewport.
   */
  scrollTo(point) {
    let changed = false;
    const newPosition = this.position;
    if (point.x !== undefined && point.x != newPosition.x) {
      newPosition.x = point.x;
      changed = true;
    }
    if (point.y !== undefined && point.y != newPosition.y) {
      newPosition.y = point.y;
      changed = true;
    }

    if (changed) {
      this.position = newPosition;
    }
  }

  /** @param {!Point} delta The delta by which to scroll the viewport. */
  scrollBy(delta) {
    const newPosition = this.position;
    newPosition.x += delta.x;
    newPosition.y += delta.y;
    this.scrollTo(newPosition);
  }

  /** Removes all events being tracked from the tracker. */
  resetTracker() {
    if (this.tracker_) {
      this.tracker_.removeAll();
    }
  }
}

/**
 * Enumeration of pinch states.
 * This should match PinchPhase enum in pdf/out_of_process_instance.h
 * @enum {number}
 */
Viewport.PinchPhase = {
  PINCH_NONE: 0,
  PINCH_START: 1,
  PINCH_UPDATE_ZOOM_OUT: 2,
  PINCH_UPDATE_ZOOM_IN: 3,
  PINCH_END: 4
};

/**
 * The increment to scroll a page by in pixels when up/down/left/right arrow
 * keys are pressed. Usually we just let the browser handle scrolling on the
 * window when these keys are pressed but in certain cases we need to simulate
 * these events.
 */
Viewport.SCROLL_INCREMENT = 40;

/**
 * Predefined zoom factors to be used when zooming in/out. These are in
 * ascending order. This should match the lists in
 * components/zoom/page_zoom_constants.h and
 * chrome/browser/resources/settings/appearance_page/appearance_page.js
 */
Viewport.ZOOM_FACTORS = [
  0.25, 1 / 3, 0.5, 2 / 3, 0.75, 0.8, 0.9, 1, 1.1, 1.25, 1.5, 1.75, 2, 2.5, 3,
  4, 5
];

/** The minimum and maximum range to be used to clip zoom factor. */
Viewport.ZOOM_FACTOR_RANGE = {
  min: Viewport.ZOOM_FACTORS[0],
  max: Viewport.ZOOM_FACTORS[Viewport.ZOOM_FACTORS.length - 1]
};

/** The width of the page shadow around pages in pixels. */
Viewport.PAGE_SHADOW = {
  top: 3,
  bottom: 7,
  left: 5,
  right: 5
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {FittingType} from './pdf_fitting_type.js';

/**
 * Parses the open pdf parameters passed in the url to set initial viewport
 * settings for opening the pdf.
 */
export class OpenPdfParamsParser {
  /**
   * @param {function(string):void} getNamedDestinationCallback
   *     Function called to fetch information for a named destination.
   */
  constructor(getNamedDestinationCallback) {
    /** @private {!Array<!Object>} */
    this.outstandingRequests_ = [];

    /** @private {!function(string):void} */
    this.getNamedDestinationCallback_ = getNamedDestinationCallback;
  }

  /**
   * Parse zoom parameter of open PDF parameters. The PDF should be opened at
   * the specified zoom level.
   *
   * @param {string} paramValue zoom value.
   * @return {Object} Map with zoom parameters (zoom and position).
   * @private
   */
  parseZoomParam_(paramValue) {
    const paramValueSplit = paramValue.split(',');
    if (paramValueSplit.length != 1 && paramValueSplit.length != 3) {
      return {};
    }

    // User scale of 100 means zoom value of 100% i.e. zoom factor of 1.0.
    const zoomFactor = parseFloat(paramValueSplit[0]) / 100;
    if (Number.isNaN(zoomFactor)) {
      return {};
    }

    // Handle #zoom=scale.
    if (paramValueSplit.length == 1) {
      return {'zoom': zoomFactor};
    }

    // Handle #zoom=scale,left,top.
    const position = {
      x: parseFloat(paramValueSplit[1]),
      y: parseFloat(paramValueSplit[2])
    };
    return {'position': position, 'zoom': zoomFactor};
  }

  /**
   * Parse view parameter of open PDF parameters. The PDF should be opened at
   * the specified fitting type mode and position.
   *
   * @param {string} paramValue view value.
   * @return {Object} Map with view parameters (view and viewPosition).
   * @private
   */
  parseViewParam_(paramValue) {
    const viewModeComponents = paramValue.toLowerCase().split(',');
    if (viewModeComponents.length < 1) {
      return {};
    }

    const params = {};
    const viewMode = viewModeComponents[0];
    let acceptsPositionParam;
    if (viewMode === 'fit') {
      params['view'] = FittingType.FIT_TO_PAGE;
      acceptsPositionParam = false;
    } else if (viewMode === 'fith') {
      params['view'] = FittingType.FIT_TO_WIDTH;
      acceptsPositionParam = true;
    } else if (viewMode === 'fitv') {
      params['view'] = FittingType.FIT_TO_HEIGHT;
      acceptsPositionParam = true;
    }

    if (!acceptsPositionParam || viewModeComponents.length < 2) {
      return params;
    }

    const position = parseFloat(viewModeComponents[1]);
    if (!Number.isNaN(position)) {
      params['viewPosition'] = position;
    }

    return params;
  }

  /**
   * Parse the parameters encoded in the fragment of a URL into a dictionary.
   *
   * @param {string} url to parse
   * @return {Object} Key-value pairs of URL parameters
   * @private
   */
  parseUrlParams_(url) {
    const params = {};

    const paramIndex = url.search('#');
    if (paramIndex == -1) {
      return params;
    }

    const paramTokens = url.substring(paramIndex + 1).split('&');
    if ((paramTokens.length == 1) && (paramTokens[0].search('=') == -1)) {
      // Handle the case of http://foo.com/bar#NAMEDDEST. This is not
      // explicitly mentioned except by example in the Adobe
      // "PDF Open Parameters" document.
      params['nameddest'] = paramTokens[0];
      return params;
    }

    for (const paramToken of paramTokens) {
      const keyValueSplit = paramToken.split('=');
      if (keyValueSplit.length != 2) {
        continue;
      }
      params[keyValueSplit[0]] = keyValueSplit[1];
    }

    return params;
  }

  /**
   * Parse PDF url parameters used for controlling the state of UI. These need
   * to be available when the UI is being initialized, rather than when the PDF
   * is finished loading.
   *
   * @param {string} url that needs to be parsed.
   * @return {Object} parsed url parameters.
   */
  getUiUrlParams(url) {
    const params = this.parseUrlParams_(url);
    const uiParams = {toolbar: true};

    if ('toolbar' in params && params['toolbar'] == 0) {
      uiParams.toolbar = false;
    }

    return uiParams;
  }

  /**
   * Parse PDF url parameters. These parameters are mentioned in the url
   * and specify actions to be performed when opening pdf files.
   * See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/
   * pdfs/pdf_open_parameters.pdf for details.
   *
   * @param {string} url that needs to be parsed.
   * @param {Function} callback function to be called with viewport info.
   */
  getViewportFromUrlParams(url, callback) {
    const params = {};
    params['url'] = url;

    const urlParams = this.parseUrlParams_(url);

    if ('page' in urlParams) {
      // |pageNumber| is 1-based, but goToPage() take a zero-based page number.
      const pageNumber = parseInt(urlParams['page'], 10);
      if (!Number.isNaN(pageNumber) && pageNumber > 0) {
        params['page'] = pageNumber - 1;
      }
    }

    if ('view' in urlParams) {
      Object.assign(params, this.parseViewParam_(urlParams['view']));
    }

    if ('zoom' in urlParams) {
      Object.assign(params, this.parseZoomParam_(urlParams['zoom']));
    }

    if (params.page === undefined && 'nameddest' in urlParams) {
      this.outstandingRequests_.push({callback: callback, params: params});
      this.getNamedDestinationCallback_(urlParams['nameddest']);
    } else {
      callback(params);
    }
  }

  /**
   * This is called when a named destination is received and the page number
   * corresponding to the request for which a named destination is passed.
   *
   * @param {number} pageNumber The page corresponding to the named destination
   *    requested.
   */
  onNamedDestinationReceived(pageNumber) {
    const outstandingRequest = this.outstandingRequests_.shift();
    if (pageNumber != -1) {
      outstandingRequest.params.page = pageNumber;
    }
    outstandingRequest.callback(outstandingRequest.params);
  }
}
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {OpenPdfParamsParser} from './open_pdf_params_parser.js';
import {Viewport} from './viewport.js';

/**
 * NavigatorDelegate for calling browser-specific functions to do the actual
 * navigating.
 */
export class NavigatorDelegate {
  /**
   * @param {number} tabId The tab ID of the PDF viewer or -1 if the viewer is
   *     not displayed in a tab.
   */
  constructor(tabId) {
    /** @private {number} */
    this.tabId_ = tabId;
  }

  /**
   * Called when navigation should happen in the current tab.
   * @param {string} url The url to be opened in the current tab.
   */
  navigateInCurrentTab(url) {
    // When the PDFviewer is inside a browser tab, prefer the tabs API because
    // it can navigate from one file:// URL to another.
    if (chrome.tabs && this.tabId_ != -1) {
      chrome.tabs.update(this.tabId_, {url: url});
    } else {
      window.location.href = url;
    }
  }

  /**
   * Called when navigation should happen in the new tab.
   * @param {string} url The url to be opened in the new tab.
   * @param {boolean} active Indicates if the new tab should be the active tab.
   */
  navigateInNewTab(url, active) {
    // Prefer the tabs API because it guarantees we can just open a new tab.
    // window.open doesn't have this guarantee.
    if (chrome.tabs) {
      chrome.tabs.create({url: url, active: active});
    } else {
      window.open(url);
    }
  }

  /**
   * Called when navigation should happen in the new window.
   * @param {string} url The url to be opened in the new window.
   */
  navigateInNewWindow(url) {
    // Prefer the windows API because it guarantees we can just open a new
    // window. window.open with '_blank' argument doesn't have this guarantee.
    if (chrome.windows) {
      chrome.windows.create({url: url});
    } else {
      window.open(url, '_blank');
    }
  }
}

/** Navigator for navigating to links inside or outside the PDF. */
export class PdfNavigator {
  /**
   * @param {string} originalUrl The original page URL.
   * @param {!Viewport} viewport The viewport info of the page.
   * @param {!OpenPdfParamsParser} paramsParser The object for URL parsing.
   * @param {!NavigatorDelegate} navigatorDelegate The object with callback
   *    functions that get called when navigation happens in the current tab,
   *    a new tab, and a new window.
   */
  constructor(originalUrl, viewport, paramsParser, navigatorDelegate) {
    /** @private {?URL} */
    this.originalUrl_ = null;
    try {
      this.originalUrl_ = new URL(originalUrl);
    } catch (err) {
      console.warn('Invalid original URL');
    }

    /** @private {!Viewport} */
    this.viewport_ = viewport;

    /** @private {!OpenPdfParamsParser} */
    this.paramsParser_ = paramsParser;

    /** @private {!NavigatorDelegate} */
    this.navigatorDelegate_ = navigatorDelegate;
  }

  /**
   * Function to navigate to the given URL. This might involve navigating
   * within the PDF page or opening a new url (in the same tab or a new tab).
   * @param {string} urlString The URL to navigate to.
   * @param {!PdfNavigator.WindowOpenDisposition} disposition The window open
   *     disposition when navigating to the new URL.
   */
  navigate(urlString, disposition) {
    if (urlString.length == 0) {
      return;
    }

    // If |urlFragment| starts with '#', then it's for the same URL with a
    // different URL fragment.
    if (urlString[0] === '#' && this.originalUrl_) {
      // if '#' is already present in |originalUrl| then remove old fragment
      // and add new url fragment.
      const newUrl = new URL(this.originalUrl_.href);
      newUrl.hash = urlString;
      urlString = newUrl.href;
    }

    // If there's no scheme, then take a guess at the scheme.
    if (!urlString.includes('://') && !urlString.includes('mailto:')) {
      urlString = this.guessUrlWithoutScheme_(urlString);
    }

    let url = null;
    try {
      url = new URL(urlString);
    } catch (err) {
      return;
    }

    if (!this.isValidUrl_(url)) {
      return;
    }

    switch (disposition) {
      case PdfNavigator.WindowOpenDisposition.CURRENT_TAB:
        this.paramsParser_.getViewportFromUrlParams(
            url.href, this.onViewportReceived_.bind(this));
        break;
      case PdfNavigator.WindowOpenDisposition.NEW_BACKGROUND_TAB:
        this.navigatorDelegate_.navigateInNewTab(url.href, false);
        break;
      case PdfNavigator.WindowOpenDisposition.NEW_FOREGROUND_TAB:
        this.navigatorDelegate_.navigateInNewTab(url.href, true);
        break;
      case PdfNavigator.WindowOpenDisposition.NEW_WINDOW:
        this.navigatorDelegate_.navigateInNewWindow(url.href);
        break;
      case PdfNavigator.WindowOpenDisposition.SAVE_TO_DISK:
        // TODO(jaepark): Alt + left clicking a link in PDF should
        // download the link.
        this.paramsParser_.getViewportFromUrlParams(
            url.href, this.onViewportReceived_.bind(this));
        break;
      default:
        break;
    }
  }

  /**
   * Called when the viewport position is received.
   * @param {Object} viewportPosition Dictionary containing the viewport
   *    position.
   * @private
   */
  onViewportReceived_(viewportPosition) {
    let newUrl = null;
    try {
      newUrl = new URL(viewportPosition.url);
    } catch (err) {
    }

    const pageNumber = viewportPosition.page;
    if (pageNumber != undefined && this.originalUrl_ && newUrl &&
        this.originalUrl_.origin === newUrl.origin &&
        this.originalUrl_.pathname === newUrl.pathname) {
      this.viewport_.goToPage(pageNumber);
    } else {
      this.navigatorDelegate_.navigateInCurrentTab(viewportPosition.url);
    }
  }

  /**
   * Checks if the URL starts with a scheme and is not just a scheme.
   * @param {!URL} url The input URL
   * @return {boolean} Whether the url is valid.
   * @private
   */
  isValidUrl_(url) {
    // Make sure |url| starts with a valid scheme.
    const validSchemes = ['http:', 'https:', 'ftp:', 'file:', 'mailto:'];
    if (!validSchemes.includes(url.protocol)) {
      return false;
    }

    // Navigations to file:-URLs are only allowed from file:-URLs.
    if (url.protocol === 'file:' && this.originalUrl_ &&
        this.originalUrl_.protocol !== 'file:') {
      return false;
    }

    return true;
  }

  /**
   * Attempt to figure out what a URL is when there is no scheme.
   * @param {string} url The input URL
   * @return {string} The URL with a scheme or the original URL if it is not
   *     possible to determine the scheme.
   * @private
   */
  guessUrlWithoutScheme_(url) {
    // If the original URL is mailto:, that does not make sense to start with,
    // and neither does adding |url| to it.
    // If the original URL is not a valid URL, this cannot make a valid URL.
    // In both cases, just bail out.
    if (!this.originalUrl_ || this.originalUrl_.protocol === 'mailto:' ||
        !this.isValidUrl_(this.originalUrl_)) {
      return url;
    }

    // Check for absolute paths.
    if (url.startsWith('/')) {
      return this.originalUrl_.origin + url;
    }

    // Check for other non-relative paths.
    // In Adobe Acrobat Reader XI, it looks as though links with less than
    // 2 dot separators in the domain are considered relative links, and
    // those with 2 or more are considered http URLs. e.g.
    //
    // www.foo.com/bar -> http
    // foo.com/bar -> relative link
    if (url.startsWith('\\')) {
      // Prepend so that the relative URL will be correctly computed by new
      // URL() below.
      url = './' + url;
    }
    if (!url.startsWith('.')) {
      const domainSeparatorIndex = url.indexOf('/');
      const domainName = domainSeparatorIndex == -1 ?
          url :
          url.substr(0, domainSeparatorIndex);
      const domainDotCount = (domainName.match(/\./g) || []).length;
      if (domainDotCount >= 2) {
        return 'http://' + url;
      }
    }

    return new URL(url, this.originalUrl_.href).href;
  }
}

/**
 * Represents options when navigating to a new url. C++ counterpart of
 * the enum is in ui/base/window_open_disposition.h. This enum represents
 * the only values that are passed from Plugin.
 * @enum {number}
 */
PdfNavigator.WindowOpenDisposition = {
  CURRENT_TAB: 1,
  NEW_FOREGROUND_TAB: 3,
  NEW_BACKGROUND_TAB: 4,
  NEW_WINDOW: 6,
  SAVE_TO_DISK: 7
};

// Export on |window| such that scripts injected from pdf_extension_test.cc can
// access it.
window.PdfNavigator = PdfNavigator;
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Creates a new ViewportScroller.
 * A ViewportScroller scrolls the page in response to drag selection with the
 * mouse.
 *
 */
export class ViewportScroller {
  /**
   * @param {Object} viewport The viewport info of the page.
   * @param {Object} plugin The PDF plugin element.
   * @param {Object} window The window containing the viewer.
   */
  constructor(viewport, plugin, window) {
    this.viewport_ = viewport;
    this.plugin_ = plugin;
    this.window_ = window;
    this.mousemoveCallback_ = null;
    this.timerId_ = null;
    this.scrollVelocity_ = null;
    this.lastFrameTime_ = 0;
  }

  /**
   * Start scrolling the page by |scrollVelocity_| every
   * |DRAG_TIMER_INTERVAL_MS_|.
   *
   * @private
   */
  startDragScrollTimer_() {
    if (this.timerId_ === null) {
      this.timerId_ = this.window_.setInterval(
          this.dragScrollPage_.bind(this),
          ViewportScroller.DRAG_TIMER_INTERVAL_MS_);
      this.lastFrameTime_ = Date.now();
    }
  }

  /**
   * Stops the drag scroll timer if it is active.
   *
   * @private
   */
  stopDragScrollTimer_() {
    if (this.timerId_ !== null) {
      this.window_.clearInterval(this.timerId_);
      this.timerId_ = null;
      this.lastFrameTime_ = 0;
    }
  }

  /**
   * Scrolls the viewport by the current scroll velocity.
   *
   * @private
   */
  dragScrollPage_() {
    const position = this.viewport_.position;
    const currentFrameTime = Date.now();
    const timeAdjustment = (currentFrameTime - this.lastFrameTime_) /
        ViewportScroller.DRAG_TIMER_INTERVAL_MS_;
    position.y += (this.scrollVelocity_.y * timeAdjustment);
    position.x += (this.scrollVelocity_.x * timeAdjustment);
    this.viewport_.position = position;
    this.lastFrameTime_ = currentFrameTime;
  }

  /**
   * Calculate the velocity to scroll while dragging using the distance of the
   * cursor outside the viewport.
   *
   * @param {Object} event The mousemove event.
   * @return {Object} Object with x and y direction scroll velocity.
   * @private
   */
  calculateVelocity_(event) {
    const x =
        Math.min(
            Math.max(
                -event.offsetX, event.offsetX - this.plugin_.offsetWidth, 0),
            ViewportScroller.MAX_DRAG_SCROLL_DISTANCE_) *
        Math.sign(event.offsetX);
    const y =
        Math.min(
            Math.max(
                -event.offsetY, event.offsetY - this.plugin_.offsetHeight, 0),
            ViewportScroller.MAX_DRAG_SCROLL_DISTANCE_) *
        Math.sign(event.offsetY);
    return {x: x, y: y};
  }

  /**
   * Handles mousemove events. It updates the scroll velocity and starts and
   * stops timer based on scroll velocity.
   *
   * @param {Object} event The mousemove event.
   * @private
   */
  onMousemove_(event) {
    this.scrollVelocity_ = this.calculateVelocity_(event);
    if (!this.scrollVelocity_.x && !this.scrollVelocity_.y) {
      this.stopDragScrollTimer_();
    } else if (!this.timerId_) {
      this.startDragScrollTimer_();
    }
  }

  /**
   * Sets whether to scroll the viewport when the mouse is outside the
   * viewport.
   *
   * @param {boolean} isSelecting Represents selection status.
   */
  setEnableScrolling(isSelecting) {
    if (isSelecting) {
      if (!this.mousemoveCallback_) {
        this.mousemoveCallback_ = this.onMousemove_.bind(this);
      }
      this.plugin_.addEventListener(
          'mousemove', this.mousemoveCallback_, false);
    } else {
      this.stopDragScrollTimer_();
      if (this.mousemoveCallback_) {
        this.plugin_.removeEventListener(
            'mousemove', this.mousemoveCallback_, false);
      }
    }
  }
}

/**
 * The period of time in milliseconds to wait between updating the viewport
 * position by the scroll velocity.
 *
 * @private
 */
ViewportScroller.DRAG_TIMER_INTERVAL_MS_ = 100;

/**
 * The maximum drag scroll distance per DRAG_TIMER_INTERVAL in pixels.
 *
 * @private
 */
ViewportScroller.MAX_DRAG_SCROLL_DISTANCE_ = 100;
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Turn a dictionary received from postMessage into a key event.
 *
 * @param {Object} dict A dictionary representing the key event.
 * @return {!Event} A key event.
 */
export function DeserializeKeyEvent(dict) {
  const e = document.createEvent('Event');
  e.initEvent('keydown', true, true);
  e.keyCode = dict.keyCode;
  e.code = dict.code;
  e.shiftKey = dict.shiftKey;
  e.ctrlKey = dict.ctrlKey;
  e.altKey = dict.altKey;
  e.metaKey = dict.metaKey;
  e.fromScriptingAPI = true;
  return e;
}

/**
 * Turn a key event into a dictionary which can be sent over postMessage.
 *
 * @param {Event} event A key event.
 * @return {Object} A dictionary representing the key event.
 */
export function SerializeKeyEvent(event) {
  return {
    keyCode: event.keyCode,
    code: event.code,
    shiftKey: event.shiftKey,
    ctrlKey: event.ctrlKey,
    altKey: event.altKey,
    metaKey: event.metaKey
  };
}

/**
 * An enum containing a value specifying whether the PDF is currently loading,
 * has finished loading or failed to load.
 * @enum {string}
 */
export const LoadState = {
  LOADING: 'loading',
  SUCCESS: 'success',
  FAILED: 'failed'
};

/**
 * Create a new PDFScriptingAPI. This provides a scripting interface to
 * the PDF viewer so that it can be customized by things like print preview.
 *
 */
export class PDFScriptingAPI {
  /**
   * @param {Window} window the window of the page containing the pdf viewer.
   * @param {Object} plugin the plugin element containing the pdf viewer.
   */
  constructor(window, plugin) {
    this.loadState_ = LoadState.LOADING;
    this.pendingScriptingMessages_ = [];
    this.setPlugin(plugin);

    /** @private {Function} */
    this.viewportChangedCallback_;

    /** @private {Function} */
    this.loadCallback_;

    /** @private {Function} */
    this.selectedTextCallback_;

    /** @private {Function} */
    this.keyEventCallback_;

    /** @private {Object} */
    this.plugin_;

    window.addEventListener('message', event => {
      if (event.origin !=
              'chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai' &&
          event.origin != 'chrome://print') {
        console.error(
            'Received message that was not from the extension: ' + event);
        return;
      }
      switch (event.data.type) {
        case 'viewport':
          /**
           * @type {{
           *   pageX: number,
           *   pageY: number,
           *   pageWidth: number,
           *   viewportWidth: number,
           *   viewportHeight: number
           * }}
           */
          const viewportData = event.data;
          if (this.viewportChangedCallback_) {
            this.viewportChangedCallback_(
                viewportData.pageX, viewportData.pageY, viewportData.pageWidth,
                viewportData.viewportWidth, viewportData.viewportHeight);
          }
          break;
        case 'documentLoaded': {
          const data = /** @type {{load_state: LoadState}} */ (event.data);
          this.loadState_ = data.load_state;
          if (this.loadCallback_) {
            this.loadCallback_(this.loadState_ == LoadState.SUCCESS);
          }
          break;
        }
        case 'getSelectedTextReply': {
          const data = /** @type {{selectedText: string}} */ (event.data);
          if (this.selectedTextCallback_) {
            this.selectedTextCallback_(data.selectedText);
            this.selectedTextCallback_ = null;
          }
          break;
        }
        case 'sendKeyEvent':
          if (this.keyEventCallback_) {
            this.keyEventCallback_(DeserializeKeyEvent(event.data.keyEvent));
          }
          break;
      }
    }, false);
  }

  /**
   * Send a message to the extension. If messages try to get sent before there
   * is a plugin element set, then we queue them up and send them later (this
   * can happen in print preview).
   *
   * @param {Object} message The message to send.
   * @private
   */
  sendMessage_(message) {
    if (this.plugin_) {
      this.plugin_.postMessage(message, '*');
    } else {
      this.pendingScriptingMessages_.push(message);
    }
  }

  /**
   * Sets the plugin element containing the PDF viewer. The element will usually
   * be passed into the PDFScriptingAPI constructor but may also be set later.
   *
   * @param {Object} plugin the plugin element containing the PDF viewer.
   */
  setPlugin(plugin) {
    this.plugin_ = plugin;

    if (this.plugin_) {
      // Send a message to ensure the postMessage channel is initialized which
      // allows us to receive messages.
      this.sendMessage_({type: 'initialize'});
      // Flush pending messages.
      while (this.pendingScriptingMessages_.length > 0) {
        this.sendMessage_(this.pendingScriptingMessages_.shift());
      }
    }
  }

  /**
   * Sets the callback which will be run when the PDF viewport changes.
   *
   * @param {Function} callback the callback to be called.
   */
  setViewportChangedCallback(callback) {
    this.viewportChangedCallback_ = callback;
  }

  /**
   * Sets the callback which will be run when the PDF document has finished
   * loading. If the document is already loaded, it will be run immediately.
   *
   * @param {Function} callback the callback to be called.
   */
  setLoadCallback(callback) {
    this.loadCallback_ = callback;
    if (this.loadState_ != LoadState.LOADING && this.loadCallback_) {
      this.loadCallback_(this.loadState_ == LoadState.SUCCESS);
    }
  }

  /**
   * Sets a callback that gets run when a key event is fired in the PDF viewer.
   * @param {Function} callback the callback to be called with a key event.
   */
  setKeyEventCallback(callback) {
    this.keyEventCallback_ = callback;
  }

  /**
   * Resets the PDF viewer into print preview mode.
   *
   * @param {string} url the url of the PDF to load.
   * @param {boolean} grayscale whether or not to display the PDF in grayscale.
   * @param {Array<number>} pageNumbers an array of the page numbers.
   * @param {boolean} modifiable whether or not the document is modifiable.
   */
  resetPrintPreviewMode(url, grayscale, pageNumbers, modifiable) {
    this.loadState_ = LoadState.LOADING;
    this.sendMessage_({
      type: 'resetPrintPreviewMode',
      url: url,
      grayscale: grayscale,
      pageNumbers: pageNumbers,
      modifiable: modifiable
    });
  }

  /**
   * Hide the toolbars after a delay.
   */
  hideToolbars() {
    this.sendMessage_({type: 'hideToolbars'});
  }

  /**
   * Load a page into the document while in print preview mode.
   *
   * @param {string} url the url of the pdf page to load.
   * @param {number} index the index of the page to load.
   */
  loadPreviewPage(url, index) {
    this.sendMessage_({type: 'loadPreviewPage', url: url, index: index});
  }

  /** @param {boolean} darkMode Whether the page is in dark mode. */
  darkModeChanged(darkMode) {
    this.sendMessage_({type: 'darkModeChanged', darkMode: darkMode});
  }

  /**
   * Select all the text in the document. May only be called after document
   * load.
   */
  selectAll() {
    this.sendMessage_({type: 'selectAll'});
  }

  /**
   * Get the selected text in the document. The callback will be called with the
   * text that is selected. May only be called after document load.
   *
   * @param {Function} callback a callback to be called with the selected text.
   * @return {boolean} true if the function is successful, false if there is an
   *     outstanding request for selected text that has not been answered.
   */
  getSelectedText(callback) {
    if (this.selectedTextCallback_) {
      return false;
    }
    this.selectedTextCallback_ = callback;
    this.sendMessage_({type: 'getSelectedText'});
    return true;
  }

  /**
   * Print the document. May only be called after document load.
   */
  print() {
    this.sendMessage_({type: 'print'});
  }

  /**
   * Send a key event to the extension.
   *
   * @param {Event} keyEvent the key event to send to the extension.
   */
  sendKeyEvent(keyEvent) {
    this.sendMessage_(
        {type: 'sendKeyEvent', keyEvent: SerializeKeyEvent(keyEvent)});
  }

  /**
   * @param {number} scrollX The amount to horizontally scroll in pixels.
   * @param {number} scrollY The amount to vertically scroll in pixels.
   */
  scrollPosition(scrollX, scrollY) {
    this.sendMessage_({type: 'scrollPosition', x: scrollX, y: scrollY});
  }
}

/**
 * Creates a PDF viewer with a scripting interface. This is basically 1) an
 * iframe which is navigated to the PDF viewer extension and 2) a scripting
 * interface which provides access to various features of the viewer for use
 * by print preview and accessibility.
 *
 * @param {string} src the source URL of the PDF to load initially.
 * @param {string} baseUrl the base URL of the PDF viewer
 * @return {!HTMLIFrameElement} the iframe element containing the PDF viewer.
 */
export function PDFCreateOutOfProcessPlugin(src, baseUrl) {
  const client = new PDFScriptingAPI(window, null);
  const iframe = /** @type {!HTMLIFrameElement} */ (
      window.document.createElement('iframe'));
  iframe.setAttribute('src', baseUrl + '/index.html?' + src);

  iframe.onload = function() {
    client.setPlugin(iframe.contentWindow);
  };

  // Add the functions to the iframe so that they can be called directly.
  iframe.setViewportChangedCallback =
      client.setViewportChangedCallback.bind(client);
  iframe.setLoadCallback = client.setLoadCallback.bind(client);
  iframe.setKeyEventCallback = client.setKeyEventCallback.bind(client);
  iframe.resetPrintPreviewMode = client.resetPrintPreviewMode.bind(client);
  iframe.loadPreviewPage = client.loadPreviewPage.bind(client);
  iframe.sendKeyEvent = client.sendKeyEvent.bind(client);
  iframe.scrollPosition = client.scrollPosition.bind(client);
  iframe.hideToolbars = client.hideToolbars.bind(client);
  iframe.darkModeChanged = client.darkModeChanged.bind(client);
  return iframe;
}
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {NativeEventTarget as EventTarget} from 'chrome://resources/js/cr/event_target.m.js';

import {BrowserApi} from './browser_api.js';

/**
 * Abstract parent of classes that manage updating the browser
 * with zoom changes and/or updating the viewer's zoom when
 * the browser zoom changes.
 */
export class ZoomManager {
  /**
   * @param {function():number} getViewportZoom Callback to get the viewport's
   *     current zoom level.
   * @param {number} initialZoom The initial browser zoom level.
   */
  constructor(getViewportZoom, initialZoom) {
    if (this.constructor === ZoomManager) {
      throw new TypeError('Instantiated abstract class: ZoomManager');
    }

    /** @private {number} */
    this.browserZoom_ = initialZoom;

    /** @private {function():number} */
    this.getViewportZoom_ = getViewportZoom;

    /** @private {!EventTarget} */
    this.eventTarget_ = new EventTarget();
  }

  /** @return {!EventTarget} */
  getEventTarget() {
    return this.eventTarget_;
  }

  /**
   * Creates the appropriate kind of zoom manager given the zoom behavior.
   *
   * @param {BrowserApi.ZoomBehavior} zoomBehavior How to manage zoom.
   * @param {function():number} getViewportZoom A function that gets the current
   *     viewport zoom.
   * @param {function(number):Promise} setBrowserZoomFunction A function that
   *     sets the browser zoom to the provided value.
   * @param {number} initialZoom The initial browser zoom level.
   */
  static create(
      zoomBehavior, getViewportZoom, setBrowserZoomFunction, initialZoom) {
    switch (zoomBehavior) {
      case BrowserApi.ZoomBehavior.MANAGE:
        return new ActiveZoomManager(
            getViewportZoom, setBrowserZoomFunction, initialZoom);
      case BrowserApi.ZoomBehavior.PROPAGATE_PARENT:
        return new EmbeddedZoomManager(getViewportZoom, initialZoom);
      default:
        return new InactiveZoomManager(getViewportZoom, initialZoom);
    }
  }

  /**
   * Invoked when a browser-initiated zoom-level change occurs.
   *
   * @param {number} newZoom the zoom level to zoom to.
   */
  onBrowserZoomChange(newZoom) {}

  /**
   * Invoked when an extension-initiated zoom-level change occurs.
   */
  onPdfZoomChange() {}

  /**
   * Combines the internal pdf zoom and the browser zoom to
   * produce the total zoom level for the viewer.
   *
   * @param {number} internalZoom the zoom level internal to the viewer.
   * @return {number} the total zoom level.
   */
  applyBrowserZoom(internalZoom) {
    return this.browserZoom_ * internalZoom;
  }

  /**
   * Given a zoom level, return the internal zoom level needed to
   * produce that zoom level.
   *
   * @param {number} totalZoom the total zoom level.
   * @return {number} the zoom level internal to the viewer.
   */
  internalZoomComponent(totalZoom) {
    return totalZoom / this.browserZoom_;
  }

  /**
   * Returns whether two numbers are approximately equal.
   *
   * @param {number} a The first number.
   * @param {number} b The second number.
   */
  floatingPointEquals(a, b) {
    const MIN_ZOOM_DELTA = 0.01;
    // If the zoom level is close enough to the current zoom level, don't
    // change it. This avoids us getting into an infinite loop of zoom changes
    // due to floating point error.
    return Math.abs(a - b) <= MIN_ZOOM_DELTA;
  }
}

/**
 * InactiveZoomManager has no control over the browser's zoom
 * and does not respond to browser zoom changes.
 */
export class InactiveZoomManager extends ZoomManager {}

/**
 * ActiveZoomManager controls the browser's zoom.
 */
class ActiveZoomManager extends ZoomManager {
  /**
   * Constructs a ActiveZoomManager.
   * @param {function():number} getViewportZoom A function that gets the current
   *     viewport zoom level
   * @param {function(number):Promise} setBrowserZoomFunction A function that
   *     sets the browser zoom to the provided value.
   * @param {number} initialZoom The initial browser zoom level.
   */
  constructor(getViewportZoom, setBrowserZoomFunction, initialZoom) {
    super(getViewportZoom, initialZoom);

    /** @private {function(number):Promise} */
    this.setBrowserZoomFunction_ = setBrowserZoomFunction;

    /** @private {?Promise} */
    this.changingBrowserZoom_ = null;
  }

  /**
   * Invoked when a browser-initiated zoom-level change occurs.
   *
   * @param {number} newZoom the zoom level to zoom to.
   */
  onBrowserZoomChange(newZoom) {
    // If we are changing the browser zoom level, ignore any browser zoom level
    // change events. Either, the change occurred before our update and will be
    // overwritten, or the change being reported is the change we are making,
    // which we have already handled.
    if (this.changingBrowserZoom_) {
      return;
    }

    if (this.floatingPointEquals(this.browserZoom_, newZoom)) {
      return;
    }

    this.browserZoom_ = newZoom;
    this.eventTarget_.dispatchEvent(
        new CustomEvent('set-zoom', {detail: newZoom}));
  }

  /**
   * Invoked when an extension-initiated zoom-level change occurs.
   * @override
   */
  onPdfZoomChange() {
    // If we are already changing the browser zoom level in response to a
    // previous extension-initiated zoom-level change, ignore this zoom change.
    // Once the browser zoom level is changed, we check whether the extension's
    // zoom level matches the most recently sent zoom level.
    if (this.changingBrowserZoom_) {
      return;
    }

    const viewportZoom = this.getViewportZoom_();
    if (this.floatingPointEquals(this.browserZoom_, viewportZoom)) {
      return;
    }

    this.changingBrowserZoom_ =
        this.setBrowserZoomFunction_(viewportZoom).then(() => {
          this.browserZoom_ = viewportZoom;
          this.changingBrowserZoom_ = null;

          // The extension's zoom level may have changed while the browser zoom
          // change was in progress. We call back into onPdfZoomChange to ensure
          // the browser zoom is up to date.
          this.onPdfZoomChange();
        });
  }

  /**
   * Combines the internal pdf zoom and the browser zoom to
   * produce the total zoom level for the viewer.
   *
   * @param {number} internalZoom the zoom level internal to the viewer.
   * @return {number} the total zoom level.
   */
  applyBrowserZoom(internalZoom) {
    // The internal zoom and browser zoom are changed together, so the
    // browser zoom is already applied.
    return internalZoom;
  }

  /**
   * Given a zoom level, return the internal zoom level needed to
   * produce that zoom level.
   *
   * @param {number} totalZoom the total zoom level.
   * @return {number} the zoom level internal to the viewer.
   */
  internalZoomComponent(totalZoom) {
    // The internal zoom and browser zoom are changed together, so the
    // internal zoom is the total zoom.
    return totalZoom;
  }
}

/**
 * This EmbeddedZoomManager responds to changes in the browser zoom,
 * but does not control the browser zoom.
 */
class EmbeddedZoomManager extends ZoomManager {
  /**
   * Invoked when a browser-initiated zoom-level change occurs.
   *
   * @param {number} newZoom the new browser zoom level.
   */
  onBrowserZoomChange(newZoom) {
    const oldZoom = this.browserZoom_;
    this.browserZoom_ = newZoom;
    this.eventTarget_.dispatchEvent(
        new CustomEvent('update-zoom-from-browser', {detail: oldZoom}));
  }
}
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * A class that listens for touch events and produces events when these
 * touches form gestures (e.g. pinching).
 */
export class GestureDetector {
  /**
   * @param {!Element} element The element to monitor for touch gestures.
   */
  constructor(element) {
    /** @private {!Element} */
    this.element_ = element;

    this.element_.addEventListener(
        'touchstart',
        /** @type {function(!Event)} */ (this.onTouchStart_.bind(this)),
        {passive: true});

    const boundOnTouch =
        /** @type {function(!Event)} */ (this.onTouch_.bind(this));
    this.element_.addEventListener('touchmove', boundOnTouch, {passive: true});
    this.element_.addEventListener('touchend', boundOnTouch, {passive: true});
    this.element_.addEventListener(
        'touchcancel', boundOnTouch, {passive: true});

    this.element_.addEventListener(
        'wheel',
        /** @type {function(!Event)} */ (this.onWheel_.bind(this)),
        {passive: false});

    this.pinchStartEvent_ = null;
    this.lastTouchTouchesCount_ = 0;

    /** @private {TouchEvent} */
    this.lastEvent_ = null;

    /**
     * The scale relative to the start of the pinch when handling ctrl-wheels.
     * null when there is no ongoing pinch.
     *
     * @private {?number}
     */
    this.accumulatedWheelScale_ = null;
    /**
     * A timeout ID from setTimeout used for sending the pinchend event when
     * handling ctrl-wheels.
     *
     * @private {?number}
     */
    this.wheelEndTimeout_ = null;

    /** @private {!Map<string, !Array<!Function>>} */
    this.listeners_ =
        new Map([['pinchstart', []], ['pinchupdate', []], ['pinchend', []]]);
  }

  /**
   * Add a |listener| to be notified of |type| events.
   *
   * @param {string} type The event type to be notified for.
   * @param {!Function} listener The callback.
   */
  addEventListener(type, listener) {
    if (this.listeners_.has(type)) {
      this.listeners_.get(type).push(listener);
    }
  }

  /**
   * @return {boolean} True if the last touch start was a two finger touch.
   */
  wasTwoFingerTouch() {
    return this.lastTouchTouchesCount_ == 2;
  }

  /**
   * Call the relevant listeners with the given |pinchEvent|.
   *
   * @param {!Object} pinchEvent The event to notify the listeners of.
   * @private
   */
  notify_(pinchEvent) {
    const listeners = this.listeners_.get(pinchEvent.type);

    for (const l of listeners) {
      l(pinchEvent);
    }
  }

  /**
   * The callback for touchstart events on the element.
   *
   * @param {!TouchEvent} event Touch event on the element.
   * @private
   */
  onTouchStart_(event) {
    this.lastTouchTouchesCount_ = event.touches.length;
    if (!this.wasTwoFingerTouch()) {
      return;
    }

    this.pinchStartEvent_ = event;
    this.lastEvent_ = event;
    this.notify_({type: 'pinchstart', center: GestureDetector.center_(event)});
  }

  /**
   * The callback for touch move, end, and cancel events on the element.
   *
   * @param {!TouchEvent} event Touch event on the element.
   * @private
   */
  onTouch_(event) {
    if (!this.pinchStartEvent_) {
      return;
    }

    const lastEvent = /** @type {!TouchEvent} */ (this.lastEvent_);

    // Check if the pinch ends with the current event.
    if (event.touches.length < 2 ||
        lastEvent.touches.length !== event.touches.length) {
      const startScaleRatio =
          GestureDetector.pinchScaleRatio_(lastEvent, this.pinchStartEvent_);
      const center = GestureDetector.center_(lastEvent);
      const endEvent = {
        type: 'pinchend',
        startScaleRatio: startScaleRatio,
        center: center
      };
      this.pinchStartEvent_ = null;
      this.lastEvent_ = null;
      this.notify_(endEvent);
      return;
    }

    const scaleRatio = GestureDetector.pinchScaleRatio_(event, lastEvent);
    const startScaleRatio =
        GestureDetector.pinchScaleRatio_(event, this.pinchStartEvent_);
    const center = GestureDetector.center_(event);
    this.notify_({
      type: 'pinchupdate',
      scaleRatio: scaleRatio,
      direction: scaleRatio > 1.0 ? 'in' : 'out',
      startScaleRatio: startScaleRatio,
      center: center
    });

    this.lastEvent_ = event;
  }

  /**
   * The callback for wheel events on the element.
   *
   * @param {!WheelEvent} event Wheel event on the element.
   * @private
   */
  onWheel_(event) {
    // We handle ctrl-wheels to invoke our own pinch zoom. On Mac, synthetic
    // ctrl-wheels are created from trackpad pinches. We handle these ourselves
    // to prevent the browser's native pinch zoom. We also use our pinch
    // zooming mechanism for handling non-synthetic ctrl-wheels. This allows us
    // to anchor the zoom around the mouse position instead of the scroll
    // position.
    if (!event.ctrlKey) {
      return;
    }

    event.preventDefault();

    const wheelScale = Math.exp(-event.deltaY / 100);
    // Clamp scale changes from the wheel event as they can be
    // quite dramatic for non-synthetic ctrl-wheels.
    const scale = Math.min(1.25, Math.max(0.75, wheelScale));
    const position = {x: event.clientX, y: event.clientY};

    if (this.accumulatedWheelScale_ == null) {
      this.accumulatedWheelScale_ = 1.0;
      this.notify_({type: 'pinchstart', center: position});
    }

    this.accumulatedWheelScale_ *= scale;
    this.notify_({
      type: 'pinchupdate',
      scaleRatio: scale,
      direction: scale > 1.0 ? 'in' : 'out',
      startScaleRatio: this.accumulatedWheelScale_,
      center: position
    });

    // We don't get any phase information for the ctrl-wheels, so we don't know
    // when the gesture ends. We'll just use a timeout to send the pinch end
    // event a short time after the last ctrl-wheel we see.
    if (this.wheelEndTimeout_ != null) {
      window.clearTimeout(this.wheelEndTimeout_);
      this.wheelEndTimeout_ = null;
    }
    const gestureEndDelayMs = 100;
    const endEvent = {
      type: 'pinchend',
      startScaleRatio: this.accumulatedWheelScale_,
      center: position
    };
    this.wheelEndTimeout_ = window.setTimeout(function(endEvent) {
      this.notify_(endEvent);
      this.wheelEndTimeout_ = null;
      this.accumulatedWheelScale_ = null;
    }.bind(this), gestureEndDelayMs, endEvent);
  }

  /**
   * Computes the change in scale between this touch event
   * and a previous one.
   *
   * @param {!TouchEvent} event Latest touch event on the element.
   * @param {!TouchEvent} prevEvent A previous touch event on the element.
   * @return {?number} The ratio of the scale of this event and the
   *     scale of the previous one.
   * @private
   */
  static pinchScaleRatio_(event, prevEvent) {
    const distance1 = GestureDetector.distance_(prevEvent);
    const distance2 = GestureDetector.distance_(event);
    return distance1 === 0 ? null : distance2 / distance1;
  }

  /**
   * Computes the distance between fingers.
   *
   * @param {!TouchEvent} event Touch event with at least 2 touch points.
   * @return {number} Distance between touch[0] and touch[1].
   * @private
   */
  static distance_(event) {
    const touch1 = event.touches[0];
    const touch2 = event.touches[1];
    const dx = touch1.clientX - touch2.clientX;
    const dy = touch1.clientY - touch2.clientY;
    return Math.sqrt(dx * dx + dy * dy);
  }

  /**
   * Computes the midpoint between fingers.
   *
   * @param {!TouchEvent} event Touch event with at least 2 touch points.
   * @return {!Object} Midpoint between touch[0] and touch[1].
   * @private
   */
  static center_(event) {
    const touch1 = event.touches[0];
    const touch2 = event.touches[1];
    return {
      x: (touch1.clientX + touch2.clientX) / 2,
      y: (touch1.clientY + touch2.clientY) / 2
    };
  }
}

// Export on |window| such that scripts injected from pdf_extension_test.cc can
// access it.
window.GestureDetector = GestureDetector;
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {assert} from 'chrome://resources/js/assert.m.js';

/**
 * @param {!Object} streamInfo The stream object pointing to the data contained
 *     in the PDF.
 * @return {Promise<number>} A promise that will resolve to the default zoom
 *     factor.
 */
function lookupDefaultZoom(streamInfo) {
  // Webviews don't run in tabs so |streamInfo.tabId| is -1 when running within
  // a webview.
  if (!chrome.tabs || streamInfo.tabId < 0) {
    return Promise.resolve(1);
  }

  return new Promise(function(resolve, reject) {
    chrome.tabs.getZoomSettings(streamInfo.tabId, function(zoomSettings) {
      resolve(zoomSettings.defaultZoomFactor);
    });
  });
}

/**
 * Returns a promise that will resolve to the initial zoom factor
 * upon starting the plugin. This may differ from the default zoom
 * if, for example, the page is zoomed before the plugin is run.
 *
 * @param {!Object} streamInfo The stream object pointing to the data contained
 *     in the PDF.
 * @return {Promise<number>} A promise that will resolve to the initial zoom
 *     factor.
 */
function lookupInitialZoom(streamInfo) {
  // Webviews don't run in tabs so |streamInfo.tabId| is -1 when running within
  // a webview.
  if (!chrome.tabs || streamInfo.tabId < 0) {
    return Promise.resolve(1);
  }

  return new Promise(function(resolve, reject) {
    chrome.tabs.getZoom(streamInfo.tabId, resolve);
  });
}

/**
 * A class providing an interface to the browser.
 */
export class BrowserApi {
  /**
   * @param {!Object} streamInfo The stream object which points to the data
   *     contained in the PDF.
   * @param {number} defaultZoom The default browser zoom.
   * @param {number} initialZoom The initial browser zoom
   *     upon starting the plugin.
   * @param {BrowserApi.ZoomBehavior} zoomBehavior How to manage zoom.
   */
  constructor(streamInfo, defaultZoom, initialZoom, zoomBehavior) {
    this.streamInfo_ = streamInfo;
    this.defaultZoom_ = defaultZoom;
    this.initialZoom_ = initialZoom;
    this.zoomBehavior_ = zoomBehavior;
  }

  /**
   * @param {!Object} streamInfo The stream object pointing to the data
   *     contained in the PDF.
   * @param {BrowserApi.ZoomBehavior} zoomBehavior How to manage zoom.
   * @return {Promise<BrowserApi>} A promise to a BrowserApi.
   */
  static create(streamInfo, zoomBehavior) {
    return Promise
        .all([lookupDefaultZoom(streamInfo), lookupInitialZoom(streamInfo)])
        .then(function(zoomFactors) {
          return new BrowserApi(
              streamInfo, zoomFactors[0], zoomFactors[1], zoomBehavior);
        });
  }

  /**
   * @return {Object} The stream info object pointing to the data contained in
   *     the PDF.
   */
  getStreamInfo() {
    return this.streamInfo_;
  }

  /**
   * Sets the browser zoom.
   *
   * @param {number} zoom The zoom factor to send to the browser.
   * @return {Promise} A promise that will be resolved when the browser zoom
   *     has been updated.
   */
  setZoom(zoom) {
    assert(
        this.zoomBehavior_ == BrowserApi.ZoomBehavior.MANAGE,
        'Viewer does not manage browser zoom.');
    return new Promise((resolve, reject) => {
      chrome.tabs.setZoom(this.streamInfo_.tabId, zoom, resolve);
    });
  }

  /**
   * @return {number} The default browser zoom factor.
   */
  getDefaultZoom() {
    return this.defaultZoom_;
  }

  /**
   * @return {number} The initial browser zoom factor.
   */
  getInitialZoom() {
    return this.initialZoom_;
  }

  /**
   * @return {BrowserApi.ZoomBehavior} How to manage zoom.
   */
  getZoomBehavior() {
    return this.zoomBehavior_;
  }

  /**
   * Adds an event listener to be notified when the browser zoom changes.
   *
   * @param {!Function} listener The listener to be called with the new zoom
   *     factor.
   */
  addZoomEventListener(listener) {
    if (!(this.zoomBehavior_ == BrowserApi.ZoomBehavior.MANAGE ||
          this.zoomBehavior_ == BrowserApi.ZoomBehavior.PROPAGATE_PARENT)) {
      return;
    }

    chrome.tabs.onZoomChange.addListener(info => {
      const zoomChangeInfo =
          /** @type {{tabId: number, newZoomFactor: number}} */ (info);
      if (zoomChangeInfo.tabId != this.streamInfo_.tabId) {
        return;
      }
      listener(zoomChangeInfo.newZoomFactor);
    });
  }
}

/**
 * Enumeration of ways to manage zoom changes.
 * @enum {number}
 */
BrowserApi.ZoomBehavior = {
  NONE: 0,
  MANAGE: 1,
  PROPAGATE_PARENT: 2
};

/**
 * Creates a BrowserApi for an extension running as a mime handler.
 *
 * @return {!Promise<!BrowserApi>} A promise to a BrowserApi instance
 *     constructed using the mimeHandlerPrivate API.
 */
function createBrowserApiForMimeHandlerView() {
  return new Promise(function(resolve, reject) {
           chrome.mimeHandlerPrivate.getStreamInfo(resolve);
         })
      .then(function(streamInfo) {
        const promises = [];
        let zoomBehavior = BrowserApi.ZoomBehavior.NONE;
        if (streamInfo.tabId != -1) {
          zoomBehavior = streamInfo.embedded ?
              BrowserApi.ZoomBehavior.PROPAGATE_PARENT :
              BrowserApi.ZoomBehavior.MANAGE;
          promises.push(new Promise(function(resolve) {
                          chrome.tabs.get(streamInfo.tabId, resolve);
                        }).then(function(tab) {
            if (tab) {
              streamInfo.tabUrl = tab.url;
            }
          }));
        }
        if (zoomBehavior == BrowserApi.ZoomBehavior.MANAGE) {
          promises.push(new Promise(function(resolve) {
            chrome.tabs.setZoomSettings(
                streamInfo.tabId, {mode: 'manual', scope: 'per-tab'}, resolve);
          }));
        }
        return Promise.all(promises).then(function() {
          return BrowserApi.create(streamInfo, zoomBehavior);
        });
      });
}

/**
 * Creates a BrowserApi instance for an extension not running as a mime handler.
 *
 * @return {!Promise<!BrowserApi>} A promise to a BrowserApi instance
 *     constructed from the URL.
 */
function createBrowserApiForPrintPreview() {
  const url = window.location.search.substring(1);
  const streamInfo = {
    streamUrl: url,
    originalUrl: url,
    responseHeaders: {},
    embedded: window.parent != window,
    tabId: -1,
  };
  return new Promise(function(resolve, reject) {
           if (!chrome.tabs) {
             resolve();
             return;
           }
           chrome.tabs.getCurrent(function(tab) {
             streamInfo.tabId = tab.id;
             streamInfo.tabUrl = tab.url;
             resolve();
           });
         })
      .then(function() {
        return BrowserApi.create(streamInfo, BrowserApi.ZoomBehavior.NONE);
      });
}

/**
 * @return {!Promise<!BrowserApi>} A promise to a BrowserApi instance for the
 *     current environment.
 */
export function createBrowserApi() {
  if (location.origin === 'chrome://print') {
    return createBrowserApiForPrintPreview();
  }

  return createBrowserApiForMimeHandlerView();
}
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {FittingType} from './pdf_fitting_type.js';

/**
 * Handles events specific to the PDF viewer and logs the corresponding metrics.
 */
export class PDFMetrics {
  /**
   * Records when the zoom mode is changed to fit a FittingType.
   *
   * @param {FittingType} fittingType the new FittingType.
   */
  static recordFitTo(fittingType) {
    if (fittingType == FittingType.FIT_TO_PAGE) {
      PDFMetrics.record(PDFMetrics.UserAction.FIT_TO_PAGE);
    } else if (fittingType == FittingType.FIT_TO_WIDTH) {
      PDFMetrics.record(PDFMetrics.UserAction.FIT_TO_WIDTH);
    }
    // There is no user action to do a fit-to-height, this only happens with
    // the open param "view=FitV".
  }

  /**
   * Records the given action to chrome.metricsPrivate.
   *
   * @param {PDFMetrics.UserAction} action
   */
  static record(action) {
    if (!chrome.metricsPrivate) {
      return;
    }
    if (!PDFMetrics.actionsMetric_) {
      PDFMetrics.actionsMetric_ = {
        'metricName': 'PDF.Actions',
        'type': chrome.metricsPrivate.MetricTypeType.HISTOGRAM_LOG,
        'min': 1,
        'max': PDFMetrics.UserAction.NUMBER_OF_ACTIONS,
        'buckets': PDFMetrics.UserAction.NUMBER_OF_ACTIONS + 1
      };
    }
    chrome.metricsPrivate.recordValue(PDFMetrics.actionsMetric_, action);
    if (PDFMetrics.firstMap_.has(action)) {
      const firstAction = PDFMetrics.firstMap_.get(action);
      if (!PDFMetrics.firstActionRecorded_.has(firstAction)) {
        chrome.metricsPrivate.recordValue(
            PDFMetrics.actionsMetric_, firstAction);
        PDFMetrics.firstActionRecorded_.add(firstAction);
      }
    }
  }

  static resetForTesting() {
    PDFMetrics.firstActionRecorded_.clear();
    PDFMetrics.actionsMetric_ = null;
  }
}

/** @private {?chrome.metricsPrivate.MetricType} */
PDFMetrics.actionsMetric_ = null;

/** @private {Set} */
PDFMetrics.firstActionRecorded_ = new Set();

// Keep in sync with enums.xml.
// Do not change the numeric values or reuse them since these numbers are
// persisted to logs.
/**
 * User Actions that can be recorded by calling PDFMetrics.record.
 * The *_FIRST values are recorded automaticlly,
 * eg. PDFMetrics.record(...ROTATE) will also record ROTATE_FIRST
 * on the first instance.
 *
 * @enum {number}
 */
PDFMetrics.UserAction = {
  /**
   * Recorded when the document is first loaded. This event serves as
   * denominator to determine percentages of documents in which an action was
   * taken as well as average number of each action per document.
   */
  DOCUMENT_OPENED: 0,

  /** Recorded when the document is rotated clockwise or counter-clockwise. */
  ROTATE_FIRST: 1,
  ROTATE: 2,

  FIT_TO_WIDTH_FIRST: 3,
  FIT_TO_WIDTH: 4,

  FIT_TO_PAGE_FIRST: 5,
  FIT_TO_PAGE: 6,

  /** Recorded when the bookmarks panel is opened. */
  OPEN_BOOKMARKS_PANEL_FIRST: 7,
  OPEN_BOOKMARKS_PANEL: 8,

  /** Recorded when a bookmark is followed. */
  FOLLOW_BOOKMARK_FIRST: 9,
  FOLLOW_BOOKMARK: 10,

  /** Recorded when the page selection is used to navigate to another page. */
  PAGE_SELECTOR_NAVIGATE_FIRST: 11,
  PAGE_SELECTOR_NAVIGATE: 12,

  /** Recorded when the user triggers a save of the document. */
  SAVE_FIRST: 13,
  SAVE: 14,

  /**
   * Recorded when the user triggers a save of the document and the document
   * has been modified by annotations.
   */
  SAVE_WITH_ANNOTATION_FIRST: 15,
  SAVE_WITH_ANNOTATION: 16,

  PRINT_FIRST: 17,
  PRINT: 18,

  ENTER_ANNOTATION_MODE_FIRST: 19,
  ENTER_ANNOTATION_MODE: 20,

  EXIT_ANNOTATION_MODE_FIRST: 21,
  EXIT_ANNOTATION_MODE: 22,

  /** Recorded when a pen stroke is made. */
  ANNOTATE_STROKE_TOOL_PEN_FIRST: 23,
  ANNOTATE_STROKE_TOOL_PEN: 24,

  /** Recorded when an eraser stroke is made. */
  ANNOTATE_STROKE_TOOL_ERASER_FIRST: 25,
  ANNOTATE_STROKE_TOOL_ERASER: 26,

  /** Recorded when a highlighter stroke is made. */
  ANNOTATE_STROKE_TOOL_HIGHLIGHTER_FIRST: 27,
  ANNOTATE_STROKE_TOOL_HIGHLIGHTER: 28,

  /** Recorded when a stroke is made using touch. */
  ANNOTATE_STROKE_DEVICE_TOUCH_FIRST: 29,
  ANNOTATE_STROKE_DEVICE_TOUCH: 30,

  /** Recorded when a stroke is made using mouse. */
  ANNOTATE_STROKE_DEVICE_MOUSE_FIRST: 31,
  ANNOTATE_STROKE_DEVICE_MOUSE: 32,

  /** Recorded when a stroke is made using pen. */
  ANNOTATE_STROKE_DEVICE_PEN_FIRST: 33,
  ANNOTATE_STROKE_DEVICE_PEN: 34,

  NUMBER_OF_ACTIONS: 35,
};

// Map from UserAction to the 'FIRST' action. These metrics are recorded
// by PDFMetrics.log the first time each corresponding action occurs.
/** @private Map<number, number> */
PDFMetrics.firstMap_ = new Map([
  [
    PDFMetrics.UserAction.ROTATE,
    PDFMetrics.UserAction.ROTATE_FIRST,
  ],
  [
    PDFMetrics.UserAction.FIT_TO_WIDTH,
    PDFMetrics.UserAction.FIT_TO_WIDTH_FIRST,
  ],
  [
    PDFMetrics.UserAction.FIT_TO_PAGE,
    PDFMetrics.UserAction.FIT_TO_PAGE_FIRST,
  ],
  [
    PDFMetrics.UserAction.OPEN_BOOKMARKS_PANEL,
    PDFMetrics.UserAction.OPEN_BOOKMARKS_PANEL_FIRST,
  ],
  [
    PDFMetrics.UserAction.FOLLOW_BOOKMARK,
    PDFMetrics.UserAction.FOLLOW_BOOKMARK_FIRST,
  ],
  [
    PDFMetrics.UserAction.PAGE_SELECTOR_NAVIGATE,
    PDFMetrics.UserAction.PAGE_SELECTOR_NAVIGATE_FIRST,
  ],
  [
    PDFMetrics.UserAction.SAVE,
    PDFMetrics.UserAction.SAVE_FIRST,
  ],
  [
    PDFMetrics.UserAction.SAVE_WITH_ANNOTATION,
    PDFMetrics.UserAction.SAVE_WITH_ANNOTATION_FIRST,
  ],
  [
    PDFMetrics.UserAction.PRINT,
    PDFMetrics.UserAction.PRINT_FIRST,
  ],
  [
    PDFMetrics.UserAction.ENTER_ANNOTATION_MODE,
    PDFMetrics.UserAction.ENTER_ANNOTATION_MODE_FIRST,
  ],
  [
    PDFMetrics.UserAction.EXIT_ANNOTATION_MODE,
    PDFMetrics.UserAction.EXIT_ANNOTATION_MODE_FIRST,
  ],
  [
    PDFMetrics.UserAction.ANNOTATE_STROKE_TOOL_PEN,
    PDFMetrics.UserAction.ANNOTATE_STROKE_TOOL_PEN_FIRST,
  ],
  [
    PDFMetrics.UserAction.ANNOTATE_STROKE_TOOL_ERASER,
    PDFMetrics.UserAction.ANNOTATE_STROKE_TOOL_ERASER_FIRST,
  ],
  [
    PDFMetrics.UserAction.ANNOTATE_STROKE_TOOL_HIGHLIGHTER,
    PDFMetrics.UserAction.ANNOTATE_STROKE_TOOL_HIGHLIGHTER_FIRST,
  ],
  [
    PDFMetrics.UserAction.ANNOTATE_STROKE_DEVICE_TOUCH,
    PDFMetrics.UserAction.ANNOTATE_STROKE_DEVICE_TOUCH_FIRST,
  ],
  [
    PDFMetrics.UserAction.ANNOTATE_STROKE_DEVICE_MOUSE,
    PDFMetrics.UserAction.ANNOTATE_STROKE_DEVICE_MOUSE_FIRST,
  ],
  [
    PDFMetrics.UserAction.ANNOTATE_STROKE_DEVICE_PEN,
    PDFMetrics.UserAction.ANNOTATE_STROKE_DEVICE_PEN_FIRST,
  ],
]);
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/polymer/v3_0/paper-styles/color.js';

import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

const $_documentContainer = document.createElement('template');
$_documentContainer.innerHTML = `<!--_html_template_start_-->
<custom-style>
  <style>
    html {
      --iron-icon-height: 20px;
      --iron-icon-width: 20px;
      --viewer-icon-ink-color: rgb(189, 189, 189);
    }
  </style>
</custom-style>
<!--_html_template_end_-->`;
document.head.appendChild($_documentContainer.content);
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/polymer/v3_0/iron-iconset-svg/iron-iconset-svg.js';

import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

const template = html`<!--_html_template_start_-->
<iron-iconset-svg size="24" name="pdf">
  <svg>
    <defs>
      <!--
      These icons are copied from Polymer's iron-icons and kept in sorted order.
      See http://goo.gl/Y1OdAq for instructions on adding additional icons.
      -->
      <g id="add"><path d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"></path></g>
      <g id="bookmark"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2z"></path></g>
      <g id="bookmark-border"><path d="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2zm0 15l-5-2.18L7 18V5h10v13z"></path></g>
      <g id="create"><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"></path></g>
      <g id="eraser"><path d="M21.41,11.33 L13.04,20 L4.73,20 L2.58,17.86 C1.8,17.08 1.8,15.83 2.58,15.04 L13.62,3.58 C14.4,2.81 15.68,2.81 16.46,3.58 L21.41,8.51 C22.2,9.29 22.2,10.55 21.41,11.33 L21.41,11.33 Z"></path><polygon points="17.26 18 15.26 20 21.96 20 21.96 18"></polygon></g>
      <g id="fullscreen-exit"><path d="M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"></path></g>
      <g id="highlighter"><path d="M10.22,9.49 L4.31,15.49 C3.54,16.29 3.61,17.54 4.39,18.34 L0.77,22 L6.45,22 L7.19,21.25 C7.97,22.06 9.14,22.11 9.92,21.3 L15.88,15.25 L10.22,9.49 L10.22,9.49 Z"></path><path style="fill: var(--pen-tip-fill)"  d="M22.68,5.49 L19.86,2.62 C19.08,1.82 17.79,1.78 17.02,2.58 L11.27,8.43 L16.93,14.18 L22.62,8.4 C23.39,7.59 23.45,6.29 22.68,5.49 L22.68,5.49 Z"></path><path style="fill: var(--pen-tip-border)" d="M18.4,3c0.3,0,0.5,0.1,0.7,0.3L22,6.2c0.4,0.4,0.4,1.1-0.1,1.5l-5,5.1l-4.3-4.3l5.1-5.2 C17.9,3.1,18.1,3,18.4,3 M18.4,2c-0.5,0-1,0.2-1.4,0.6l-5.8,5.9l5.7,5.8l5.7-5.8c0.8-0.8,0.8-2.1,0.1-2.9l-2.8-2.9 C19.5,2.2,18.9,2,18.4,2L18.4,2z"></path></g>
      <g id="marker"><polygon points="3 17.25 3 21 6.74 21 14.28 13.47 10.53 9.72"></polygon><path style="fill: var(--pen-tip-fill)" d="M18.37,3.3 L20.71,5.63 C21.1,6.02 21.11,6.66 20.72,7.05 L15.35,12.41 L11.59,8.65 L14.12,6.12 L13.39,5.39 L7.73,11.05 L6.33,9.65 L12.7,3.29 C13.09,2.9 13.74,2.91 14.12,3.3 L15.54,4.71 L16.96,3.3 C17.34,2.91 17.98,2.91 18.37,3.3 L18.37,3.3 Z"></path><path style="fill: var(--pen-tip-border)" d="M17.7,4L20,6.3L15.4,11L13,8.6l1.8-1.8l0.7-0.7l-0.7-0.7l-0.2-0.2l0.2,0.2l0.7,0.7l0.7-0.7L17.7,4 M13.4,3 c-0.3,0-0.5,0.1-0.7,0.3L6.3,9.6l1.4,1.4l5.7-5.7l0.7,0.7l-2.5,2.5l3.8,3.8L20.7,7c0.4-0.4,0.4-1,0-1.4l-2.3-2.3 C18.2,3.1,17.9,3,17.7,3S17.2,3.1,17,3.3l-1.4,1.4l-1.4-1.4C13.9,3.1,13.7,3,13.4,3L13.4,3z"></path></g>
      <g id="redo"><path d="M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z"></path></g>
      <g id="remove"><path d="M19 13H5v-2h14v2z"></path></g>
      <g id="rotate-right"><path d="M15.55 5.55L11 1v3.07C7.06 4.56 4 7.92 4 12s3.05 7.44 7 7.93v-2.02c-2.84-.48-5-2.94-5-5.91s2.16-5.43 5-5.91V10l4.55-4.45zM19.93 11c-.17-1.39-.72-2.73-1.62-3.89l-1.42 1.42c.54.75.88 1.6 1.02 2.47h2.02zM13 17.9v2.02c1.39-.17 2.74-.71 3.9-1.61l-1.44-1.44c-.75.54-1.59.89-2.46 1.03zm3.89-2.42l1.42 1.41c.9-1.16 1.45-2.5 1.62-3.89h-2.02c-.14.87-.48 1.72-1.02 2.48z"></path></g>
      <g id="undo"><path d="M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"></path></g>
    </defs>
  </svg>
</iron-iconset-svg>
<!--_html_template_end_-->`;
document.head.appendChild(template.content);
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
import 'chrome://resources/cr_elements/icons.m.js';
import 'chrome://resources/cr_elements/shared_vars_css.m.js';
import 'chrome://resources/polymer/v3_0/paper-ripple/paper-ripple.js';
import 'chrome://resources/polymer/v3_0/paper-styles/color.js';

import {IronA11yKeysBehavior} from 'chrome://resources/polymer/v3_0/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

/**
 * The |title| is the text label displayed for the bookmark.
 *
 * The bookmark may point at a location in the PDF or a URI.
 * If it points at a location, |page| indicates which 0-based page it leads to.
 * Optionally, |x| is the x position in that page, |y| is the y position in that
 * page, in pixel coordinates and |zoom| is the new zoom value. If it points at
 * an URI, |uri| is the target for that bookmark.
 *
 * |children| is an array of the |Bookmark|s that are below this in a table of
 * contents tree
 * structure.
 * @typedef {{
 *   title: string,
 *   page: (number | undefined),
 *   x: (number | undefined),
 *   y: (number | undefined),
 *   zoom: (number | undefined),
 *   uri: (string | undefined),
 *   children: !Array<!Bookmark>
 * }}
 */
export let Bookmark;

/** Amount that each level of bookmarks is indented by (px). */
const BOOKMARK_INDENT = 20;

Polymer({
  is: 'viewer-bookmark',

  _template: html`<!--_html_template_start_-->
    <style>
      #item {
        @apply --layout-center;
        @apply --layout-horizontal;
        cursor: pointer;
        height: 30px;
        position: relative;
      }

      #item:hover {
        background-color: var(--cr-menu-background-focus-color);
      }

      paper-ripple {
        /* Allowing the ripple to capture pointer events prevents a focus
         * rectangle for showing up for clicks, while still allowing it with
         * tab-navigation. This undoes a paper-ripple bug fix aimed at
         * non-Chrome browsers. TODO(tsergeant): Improve focus in
         * viewer-bookmark so this can be removed (https://crbug.com/5448190).
         */
        pointer-events: auto;
      }

      #title {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }

      #expand {
        --cr-icon-button-fill-color: var(--primary-text-color);
        --cr-icon-button-icon-size: 16px;
        --cr-icon-button-size: 28px;
        margin: 0;
        transition: transform 150ms;
      }

      :host-context([dir=rtl]) #expand {
        transform: rotate(180deg);
      }

      :host([children-shown_]) #expand {
        transform: rotate(90deg);
      }
    </style>
    <div id="item" on-click="onClick_">
      <paper-ripple></paper-ripple>
      <cr-icon-button id="expand" iron-icon="cr:chevron-right"
          on-click="toggleChildren_"></cr-icon-button>
      <span id="title" tabindex="0">{{bookmark.title}}</span>
    </div>
    <!-- dom-if will stamp the complex bookmark tree lazily as individual nodes
      are opened. -->
    <template is="dom-if" if="[[childrenShown_]]">
      <template is="dom-repeat" items="[[bookmark.children]]">
        <viewer-bookmark bookmark="{{item}}" depth="[[childDepth_]]">
        </viewer-bookmark>
      </template>
    </template>
<!--_html_template_end_-->`,

  properties: {
    /** @type {Bookmark} */
    bookmark: {
      type: Object,
      observer: 'bookmarkChanged_',
    },

    depth: {
      type: Number,
      observer: 'depthChanged_'
    },

    /** @private */
    childDepth_: Number,

    /** @private */
    childrenShown_: {
      type: Boolean,
      reflectToAttribute: true,
      value: false,
    },

    /** @type {?EventTarget} The target for the key bindings below. */
    keyEventTarget: Object,
  },

  behaviors: [IronA11yKeysBehavior],

  keyBindings: {'enter': 'onEnter_', 'space': 'onSpace_'},

  /** @override */
  attached: function() {
    this.keyEventTarget = this.$.item;
  },

  /** @private */
  bookmarkChanged_: function() {
    this.$.expand.style.visibility =
        this.bookmark.children.length > 0 ? 'visible' : 'hidden';
  },

  /** @private */
  depthChanged_: function() {
    this.childDepth_ = this.depth + 1;
    this.$.item.style.paddingInlineStart =
        (this.depth * BOOKMARK_INDENT) + 'px';
  },

  /** @private */
  onClick_: function() {
    if (this.bookmark.page != null) {
      if (this.bookmark.zoom != null) {
        this.fire('change-zoom', {zoom: this.bookmark.zoom});
      }
      if (this.bookmark.x != null &&
          this.bookmark.y != null) {
        this.fire('change-page-and-xy', {
          page: this.bookmark.page,
          x: this.bookmark.x,
          y: this.bookmark.y,
          origin: 'bookmark'
        });
      } else {
        this.fire(
            'change-page', {page: this.bookmark.page, origin: 'bookmark'});
      }
    } else if (this.bookmark.uri != null) {
      this.fire('navigate', {uri: this.bookmark.uri, newtab: true});
    }
  },

  /**
   * @param {!KeyboardEvent} e
   * @private
   */
  onEnter_: function(e) {
    // Don't allow events which have propagated up from the expand button to
    // trigger a click.
    if (e.detail.keyboardEvent.target != this.$.expand) {
      this.onClick_();
    }
  },

  /**
   * @param {!KeyboardEvent} e
   * @private
   */
  onSpace_: function(e) {
    // cr-icon-button stops propagation of space events, so there's no need
    // to check the event source here.
    this.onClick_();
    // Prevent default space scroll behavior.
    e.detail.keyboardEvent.preventDefault();
  },

  /**
   * @param {!Event} e
   * @private
   */
  toggleChildren_: function(e) {
    this.childrenShown_ = !this.childrenShown_;
    e.stopPropagation();  // Prevent the above onClick_ handler from firing.
  }
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/cr_button/cr_button.m.js';
import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js';
import 'chrome://resources/cr_elements/hidden_style_css.m.js';

import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

Polymer({
  is: 'viewer-error-screen',

  _template: html`<!--_html_template_start_-->
    <style include="cr-hidden-style"></style>
    <cr-dialog id="dialog" no-cancel>
      <div slot="title">[[strings.errorDialogTitle]]</div>
      <div slot="body">[[strings.pageLoadFailed]]</div>
      <div slot="button-container" hidden$="[[!reloadFn]]">
        <cr-button class="action-button" on-click="reload">
          [[strings.pageReload]]
        </cr-button>
      </div>
    </cr-dialog>
<!--_html_template_end_-->`,

  properties: {
    reloadFn: Function,

    strings: Object,
  },

  show: function() {
    /** @type {!CrDialogElement} */ (this.$.dialog).showModal();
  },

  reload: function() {
    if (this.reloadFn) {
      this.reloadFn();
    }
  }
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {assert} from 'chrome://resources/js/assert.m.js';
import {isRTL} from 'chrome://resources/js/util.m.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

Polymer({
  is: 'viewer-page-indicator',

  _template: html`<!--_html_template_start_-->
    <style>
      :host {
        display: flex;
        pointer-events: none;
        position: fixed;
        right: 0;
        transition: opacity 400ms ease-in-out;
      }

      :host-context([dir=rtl]) {
        left: 0;
        right: auto;
      }

      #text {
        background-color: rgba(0, 0, 0, 0.5);
        border-radius: 5px;
        color: white;
        font-family: sans-serif;
        font-size: 12px;
        font-weight: bold;
        line-height: 48px;
        text-align: center;
        text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
        width: 62px;
      }

      #triangle-end {
        border-bottom: 6px solid transparent;
        border-inline-start: 8px solid rgba(0, 0, 0, 0.5);
        border-top: 6px solid transparent;
        height: 0;
        margin-top: 18px;
        width: 0;
      }
    </style>
    <div id="text">{{label}}</div>
    <div id="triangle-end"></div>
<!--_html_template_end_-->`,

  properties: {
    label: {type: String, value: '1'},

    index: {type: Number, observer: 'indexChanged'},

    pageLabels: {type: Array, value: null, observer: 'pageLabelsChanged'}
  },

  /** @type {number|undefined} */
  timerId: undefined,

  /** @override */
  ready: function() {
    const callback = this.fadeIn_.bind(this);
    window.addEventListener('scroll', function() {
      requestAnimationFrame(callback);
    });
  },

  /** @private */
  fadeIn_: function() {
    const percent = window.scrollY /
        (document.scrollingElement.scrollHeight -
         document.documentElement.clientHeight);
    this.style.top =
        percent * (document.documentElement.clientHeight - this.offsetHeight) +
        'px';
    // <if expr="is_macosx">
    // If overlay scrollbars are enabled, prevent them from overlapping the
    // triangle. TODO(dbeam): various platforms can enable overlay scrolling,
    // not just Mac. The scrollbars seem to have different widths/appearances on
    // those platforms, though.
    assert(document.documentElement.dir);
    const endEdge = isRTL() ? 'left' : 'right';
    if (window.innerWidth == document.scrollingElement.scrollWidth) {
      this.style[endEdge] = '16px';
    } else {
      this.style[endEdge] = '0px';
    }
    // </if>
    this.style.opacity = 1;
    clearTimeout(this.timerId);

    this.timerId = setTimeout(() => {
      this.style.opacity = 0;
      this.timerId = undefined;
    }, 2000);
  },

  pageLabelsChanged: function() {
    this.indexChanged();
  },

  indexChanged: function() {
    if (this.pageLabels) {
      this.label = this.pageLabels[this.index];
    } else {
      this.label = String(this.index + 1);
    }
  }
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/cr_input/cr_input.m.js';

import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

Polymer({
  is: 'viewer-page-selector',

  _template: html`<!--_html_template_start_-->
    <style>
      :host {
        color: #fff;
        display: flex;
        font-size: 0.81rem;
      }

      :host ::selection {
        background: rgba(255, 255, 255, 0.3);
      }

      #pageselector-container,
      #pagelength-spacer {
        padding: 0 3px;
        text-align: start;
        /* --page-length-digits is set through JavaScript */
        width: calc(var(--page-length-digits, 1) * 1ch);
      }

      #pageselector-container:focus-within,
      #pageselector-container:hover {
        background: rgba(0, 0, 0, 0.5);
      }

      #pageselector {
        --cr-input-focus-color: transparent;
        --cr-input-error-display: none;
        --cr-input-background-color: transparent;
        --cr-input-color: white;
      }

      #pageselector::part(input) {
        caret-color: var(--cr-input-color);
        padding: 0;
        text-align: end;
      }
    </style>
    <div id="pageselector-container">
      <cr-input id="pageselector" value="[[pageNo]]" on-mouseup="select"
          on-value-changed="onInputValueChange_" on-change="pageNoCommitted"
          aria-label$="{{strings.labelPageNumber}}">
      </cr-input>
    </div>
    <span id="slash">/</span>
    <span id="pagelength-spacer">
      <span id="pagelength">{{docLength}}</span>
    </span>
<!--_html_template_end_-->`,

  properties: {
    /**
     * The number of pages the document contains.
     */
    docLength: {type: Number, value: 1, observer: 'docLengthChanged_'},

    /**
     * The current page being viewed (1-based). A change to pageNo is mirrored
     * immediately to the input field. A change to the input field is not
     * mirrored back until pageNoCommitted() is called and change-page is fired.
     */
    pageNo: {
      type: Number,
      value: 1,
    },

    strings: Object,
  },

  /** @return {!CrInputElement} */
  get pageSelector() {
    return /** @type {!CrInputElement} */ (this.$.pageselector);
  },

  pageNoCommitted: function() {
    const page = parseInt(this.pageSelector.value, 10);

    if (!isNaN(page) && page <= this.docLength && page > 0) {
      this.fire('change-page', {page: page - 1, origin: 'pageselector'});
    } else {
      this.pageSelector.value = this.pageNo.toString();
    }
    this.pageSelector.blur();
  },

  /** @private */
  docLengthChanged_: function() {
    const numDigits = this.docLength.toString().length;
    this.style.setProperty('--page-length-digits', `${numDigits}`);
  },

  select: function() {
    this.pageSelector.select();
  },

  /**
   * @return {boolean} True if the selector input field is currently focused.
   */
  isActive: function() {
    return this.shadowRoot.activeElement == this.pageSelector;
  },

  /**
   * Immediately remove any non-digit characters.
   * @private
   */
  onInputValueChange_: function() {
    this.pageSelector.value = this.pageSelector.value.replace(/[^\d]/, '');
  },
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/cr_button/cr_button.m.js';
import 'chrome://resources/cr_elements/cr_dialog/cr_dialog.m.js';
import 'chrome://resources/cr_elements/cr_input/cr_input.m.js';
import 'chrome://resources/cr_elements/shared_style_css.m.js';
import 'chrome://resources/cr_elements/shared_vars_css.m.js';

import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

Polymer({
  is: 'viewer-password-screen',

  _template: html`<!--_html_template_start_-->
    <style include="cr-shared-style">
      #password {
        margin-top: var(--cr-form-field-bottom-spacing);
      }
    </style>
    <cr-dialog id="dialog" no-cancel>
      <div slot="title">[[strings.passwordDialogTitle]]</div>
      <div slot="body">
        <div id="message">[[strings.passwordPrompt]]</div>
        <cr-input id="password"
            type="password"
            error-message="[[getErrorMessage_(strings.passwordInvalid,
                                              invalid)]]"
            invalid="[[invalid]]"
            autofocus>
        </cr-input>
      </div>
      <div slot="button-container">
        <cr-button id="submit" class="action-button" on-click="submit">
          [[strings.passwordSubmit]]
        </cr-button>
      </div>
    </cr-dialog>
<!--_html_template_end_-->`,

  properties: {
    invalid: Boolean,

    strings: Object,
  },

  get active() {
    return this.$.dialog.open;
  },

  show: function() {
    this.$.dialog.showModal();
  },

  close: function() {
    if (this.active) {
      this.$.dialog.close();
    }
  },

  deny: function() {
    const password = /** @type {!CrInputElement} */ (this.$.password);
    password.disabled = false;
    this.$.submit.disabled = false;
    this.invalid = true;
    password.select();
  },

  submit: function() {
    const password = /** @type {!CrInputElement} */ (this.$.password);
    if (password.value.length == 0) {
      return;
    }
    password.disabled = true;
    this.$.submit.disabled = true;
    this.fire('password-submitted', {password: password.value});
  },

  /**
   * Returns |message| if input is invalid, otherwise empty string.
   * This avoids setting the error message (which announces to screen readers)
   * when there is no error.
   * @param {string} message
   * @return {string}
   */
  getErrorMessage_: function(message) {
    return this.invalid ? message : '';
  }
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
import 'chrome://resources/cr_elements/hidden_style_css.m.js';
import 'chrome://resources/polymer/v3_0/paper-progress/paper-progress.js';
import 'chrome://resources/cr_elements/icons.m.js';
import './icons.js';
import './viewer-page-selector.js';
import './viewer-toolbar-dropdown.js';

// 

import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {Bookmark} from './viewer-bookmark.js';

Polymer({
  is: 'viewer-pdf-toolbar',

  _template: html`<!--_html_template_start_-->
    <style include="cr-hidden-style">
      :host ::selection {
        background: rgba(255, 255, 255, 0.3);
      }

      /* We introduce a wrapper aligner element to help with laying out the main
       * toolbar content without changing the bottom-aligned progress bar. */
      #aligner {
        align-items: center;
        display: flex;
        padding: 0 8px;
        width: 100%;
      }

      #title {
        flex: 5;
        font-size: 0.87rem;
        font-weight: 500;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
      }

      #pageselector-container {
        text-align: center;
        /* The container resizes according to the width of the toolbar. On small
         * screens with large numbers of pages, overflow page numbers without
         * wrapping. */
        white-space: nowrap;
      }

      #buttons {
        flex: 5;
        text-align: end;
        user-select: none;
      }

      cr-icon-button {
        --cr-icon-button-fill-color: rgb(241, 241, 241);
        margin: 6px;
      }

      cr-icon-button:hover {
        background: rgba(255, 255, 255, 0.08);
        border-radius: 50%;
      }

      paper-progress {
        --paper-progress-active-color: var(--google-blue-300);
        --paper-progress-container-color: transparent;
        --paper-progress-height: 3px;
        transition: opacity 150ms;
        width: 100%;
      }

      #toolbar {
        @apply --shadow-elevation-2dp;
        background-color: rgb(50, 54, 57);
        position: relative;
      }

      #annotations-bar {
        align-items: center;
        background-color: rgb(32, 33, 34);
        justify-content: center;
      }

      #toolbar,
      #annotations-bar {
        color: rgb(241, 241, 241);
        display: flex;
        height: 48px;
        padding: 0 16px;
      }

      #progress-container {
        bottom: 0;
        left: 0;
        margin: 0;
        position: absolute;
        right: 0;
        top: auto;
        width: auto;
      }

      #pen,
      #highlighter {
        --dropdown-width: 346px;
      }

      #pen,
      #highlighter {
        --dropdown-open-background: rgb(50, 54, 57);
      }

      #eraser {
        opacity: 0.38;
      }

      #eraser[selected],
      #eraser:focus,
      #eraser:hover {
        opacity: 1;
      }

      #annotation-separator {
        background: white;
        height: 30px;
        margin-inline-end: 12px;
        margin-inline-start: 12px;
        opacity: 0.38;
        width: 1px;
      }

      :host([annotation-mode]) #annotate {
        background-color: rgba(255, 255, 255, 0.24);
        border-radius: 50%;
      }

      #bookmarks {
        margin-inline-start: 8px;
      }

      #pen {
        margin-inline-end: 10px;
      }

      #highlighter {
        margin-inline-end: 6px;
      }

      .invisible {
        visibility: hidden;
      }

      @media(max-width: 675px) {
        #bookmarks,
        #rotate-left {
          display: none;
        }

        #pageselector-container {
          flex: 2;
        }
      }

      @media(max-width: 450px) {
        #rotate-right {
          display: none;
        }
      }

      @media(max-width: 400px) {
        #buttons,
        #pageselector-container {
          display: none;
        }
      }
    </style>
    <div id="toolbar">
      <div id="aligner">
        <span id="title" title="{{docTitle}}">
          <span>{{docTitle}}</span>
        </span>

        <div id="pageselector-container">
          <viewer-page-selector id="pageselector" class="invisible"
              doc-length="{{docLength}}" page-no="{{pageNo}}"
              strings="{{strings}}">
          </viewer-page-selector>
        </div>

        <div id="buttons" class="invisible">
          <template is="dom-if" if="[[pdfAnnotationsEnabled]]">
            <cr-icon-button id="annotate" iron-icon="pdf:create"
                disabled="[[!annotationAvailable]]" on-click="toggleAnnotation"
                aria-label$="{{strings.tooltipAnnotate}}"
                title$="{{strings.tooltipAnnotate}}"></cr-icon-button>
          </template>

          <cr-icon-button id="rotate-right" iron-icon="pdf:rotate-right"
              disabled="[[annotationMode]]" on-click="rotateRight"
              aria-label$="{{strings.tooltipRotateCW}}"
              title$="{{strings.tooltipRotateCW}}"></cr-icon-button>

          <cr-icon-button id="download" iron-icon="cr:file-download"
              on-click="download" aria-label$="{{strings.tooltipDownload}}"
              title$="{{strings.tooltipDownload}}"></cr-icon-button>

          <cr-icon-button id="print" iron-icon="cr:print" on-click="print"
              hidden="[[!printingEnabled]]" title$="{{strings.tooltipPrint}}"
              aria-label$="{{strings.tooltipPrint}}"></cr-icon-button>

          <viewer-toolbar-dropdown id="bookmarks"
                                   selected
                                   metrics-id="bookmarks"
                                   hidden$="[[!bookmarks.length]]"
                                   open-icon="pdf:bookmark"
                                   closed-icon="pdf:bookmark-border"
                                   header="{{strings.bookmarks}}">
            <template is="dom-repeat" items="[[bookmarks]]">
              <viewer-bookmark bookmark="[[item]]" depth="0"></viewer-bookmark>
            </template>
          </viewer-toolbar-dropdown>
        </div>
      </div>
      <div id="progress-container">
        <paper-progress id="progress"
            value="[[loadProgress]]"
            indeterminate="[[annotationMode]]"></paper-progress>
      </div>
    </div>

    <div id="annotations-bar" hidden>
      <viewer-toolbar-dropdown id="pen"
          selected$="[[isAnnotationTool_('pen', annotationTool.tool)]]"
          open-after-select
          on-click="annotationToolClicked_"
          open-icon="pdf:marker"
          closed-icon="pdf:marker"
          dropdown-centered
          hide-header
          header$="{{strings.annotationPen}}"
          style="--pen-tip-fill: #000000">
        <viewer-pen-options
          selected-color="#000000"
          selected-size="0.1429"
          strings="[[strings]]"
          on-selected-size-changed="annotationToolOptionChanged_"
          on-selected-color-changed="annotationToolOptionChanged_">
        </viewer-pen-options>
      </viewer-toolbar-dropdown>

      <viewer-toolbar-dropdown id="highlighter"
          selected$="[[isAnnotationTool_('highlighter', annotationTool.tool)]]"
          open-after-select
          on-click="annotationToolClicked_"
          open-icon="pdf:highlighter"
          closed-icon="pdf:highlighter"
          dropdown-centered
          hide-header
          header$="{{strings.annotationHighlighter}}"
          style="--pen-tip-fill: #ffbc00">
        <viewer-pen-options
          selected-color="#ffbc00"
          selected-size="0.7143"
          strings="[[strings]]"
          on-selected-size-changed="annotationToolOptionChanged_"
          on-selected-color-changed="annotationToolOptionChanged_">
        </viewer-pen-options>
      </viewer-toolbar-dropdown>

      <cr-icon-button id="eraser"
          selected$="[[isAnnotationTool_('eraser', annotationTool.tool)]]"
          on-click="annotationToolClicked_" iron-icon="pdf:eraser"
          aria-label$="{{strings.annotationEraser}}"
          title$="{{strings.annotationEraser}}"></cr-icon-button>

      <div id="annotation-separator"></div>

      <cr-icon-button id="undo" disabled="[[!canUndoAnnotation]]"
          iron-icon="pdf:undo" on-click="undo"
          aria-label$="{{strings.annotationUndo}}"
          title$="{{strings.annotationUndo}}"></cr-icon-button>

      <cr-icon-button id="redo" disabled="[[!canRedoAnnotation]]"
          iron-icon="pdf:redo" on-click="redo"
          aria-label$="{{strings.annotationRedo}}"
          title$="{{strings.annotationRedo}}"></cr-icon-button>
    </div>
<!--_html_template_end_-->`,

  properties: {
    /**
     * Whether annotation mode can be entered. This would be false if for
     * example the PDF is encrypted or password protected. Note, this is
     * true regardless of whether the feature flag is enabled.
     */
    annotationAvailable: {
      type: Boolean,
      value: true,
    },

    /** Whether the viewer is currently in annotation mode. */
    annotationMode: {
      type: Boolean,
      notify: true,
      value: false,
      reflectToAttribute: true,
    },

    /** @type {?AnnotationTool} */
    annotationTool: {
      type: Object,
      value: null,
      notify: true,
    },

    /**
     * Tree of PDF bookmarks (empty if the document has no bookmarks).
     * @type {!Array<!Bookmark>}
     */
    bookmarks: {
      type: Array,
      value: () => [],
    },

    canRedoAnnotation: {
      type: Boolean,
      value: false,
    },

    canUndoAnnotation: {
      type: Boolean,
      value: false,
    },

    /** The number of pages in the PDF document. */
    docLength: Number,

    /** The title of the PDF document. */
    docTitle: String,

    /** The current loading progress of the PDF document (0 - 100). */
    loadProgress: {
      type: Number,
      observer: 'loadProgressChanged_',
    },

    /** Whether the toolbar is opened and visible. */
    opened: {
      type: Boolean,
      value: true,
    },

    /** The number of the page being viewed (1-based). */
    pageNo: Number,

    /** Whether the PDF Annotations feature is enabled. */
    pdfAnnotationsEnabled: {
      type: Boolean,
      value: false,
    },

    /** Whether the Printing feature is enabled. */
    printingEnabled: {
      type: Boolean,
      value: false,
    },

    strings: Object,
  },

  /** @type {?Object} */
  animation_: null,

  /**
   * @param {number} newProgress
   * @param {number} oldProgress
   * @private
   */
  loadProgressChanged_: function(newProgress, oldProgress) {
    const loaded = newProgress >= 100;
    const progressReset = newProgress < oldProgress;
    if (progressReset || loaded) {
      this.$.pageselector.classList.toggle('invisible', !loaded);
      this.$.buttons.classList.toggle('invisible', !loaded);
      this.$.progress.style.opacity = loaded ? 0 : 1;
      this.$['annotations-bar'].hidden = !loaded || !this.annotationMode;
    }
  },

  hide: function() {
    if (this.opened && !this.shouldKeepOpen()) {
      this.toggleVisibility();
    }
  },

  show: function() {
    if (!this.opened) {
      this.toggleVisibility();
    }
  },

  toggleVisibility: function() {
    this.opened = !this.opened;

    // We keep a handle on the animation in order to cancel the filling
    // behavior of previous animations.
    if (this.animation_) {
      this.animation_.cancel();
    }

    if (this.opened) {
      this.animation_ = this.animate(
          [{transform: 'translateY(-100%)'}, {transform: 'translateY(0%)'}], {
            duration: 250,
            easing: 'cubic-bezier(0, 0, 0.2, 1)',
            fill: 'forwards',
          });
    } else {
      this.animation_ = this.animate(
          [{transform: 'translateY(0%)'}, {transform: 'translateY(-100%)'}], {
            duration: 250,
            easing: 'cubic-bezier(0.4, 0, 1, 1)',
            fill: 'forwards',
          });
    }
  },

  selectPageNumber: function() {
    this.$.pageselector.select();
  },

  /** @return {boolean} Whether the toolbar should be kept open. */
  shouldKeepOpen: function() {
    return this.$.bookmarks.dropdownOpen || this.loadProgress < 100 ||
        this.$.pageselector.isActive() || this.annotationMode;
  },

  /** @return {boolean} Whether a dropdown was open and was hidden. */
  hideDropdowns: function() {
    let result = false;
    if (this.$.bookmarks.dropdownOpen) {
      this.$.bookmarks.toggleDropdown();
      result = true;
    }
    if (this.$.pen.dropdownOpen) {
      this.$.pen.toggleDropdown();
      result = true;
    }
    if (this.$.highlighter.dropdownOpen) {
      this.$.highlighter.toggleDropdown();
      result = true;
    }
    return result;
  },

  /** @param {number} lowerBound */
  setDropdownLowerBound: function(lowerBound) {
    this.$.bookmarks.lowerBound = lowerBound;
  },

  rotateRight: function() {
    this.fire('rotate-right');
  },

  download: function() {
    this.fire('save');
  },

  print: function() {
    this.fire('print');
  },

  undo: function() {
    this.fire('undo');
  },

  redo: function() {
    this.fire('redo');
  },

  toggleAnnotation: function() {
    this.annotationMode = !this.annotationMode;
    if (this.annotationMode) {
      // Select pen tool when entering annotation mode.
      this.updateAnnotationTool_(/** @type {!HTMLElement} */ (this.$.pen));
    }
    this.dispatchEvent(new CustomEvent('annotation-mode-toggled', {
      detail: {
        value: this.annotationMode,
      },
    }));
  },

  /**
   * @param {!Event} e
   * @private
   */
  annotationToolClicked_: function(e) {
    this.updateAnnotationTool_(/** @type {!HTMLElement} */ (e.currentTarget));
  },

  /**
   * @param {!Event} e
   * @private
   */
  annotationToolOptionChanged_: function(e) {
    const element = e.currentTarget.parentElement;
    if (!this.annotationTool || element.id != this.annotationTool.tool) {
      return;
    }
    this.updateAnnotationTool_(e.currentTarget.parentElement);
  },

  /**
   * @param {!HTMLElement} element
   * @private
   */
  updateAnnotationTool_: function(element) {
    const tool = element.id;
    const options = element.querySelector('viewer-pen-options') || {
      selectedSize: 1,
      selectedColor: null,
    };
    const attributeStyleMap = element.attributeStyleMap;
    attributeStyleMap.set('--pen-tip-fill', options.selectedColor);
    attributeStyleMap.set(
        '--pen-tip-border',
        options.selectedColor == '#000000' ? 'currentcolor' :
                                             options.selectedColor);
    this.annotationTool = {
      tool: tool,
      size: options.selectedSize,
      color: options.selectedColor,
    };
  },

  /**
   * @param {string} toolName
   * @return {boolean} Whether the annotation tool is using tool |toolName|.
   * @private
   */
  isAnnotationTool_: function(toolName) {
    return !!this.annotationTool && this.annotationTool.tool === toolName;
  },
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
import 'chrome://resources/cr_elements/icons.m.js';
import 'chrome://resources/cr_elements/shared_vars_css.m.js';
import 'chrome://resources/polymer/v3_0/paper-styles/shadow.js';

import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

/**
 * Size of additional padding in the inner scrollable section of the dropdown.
 */
const DROPDOWN_INNER_PADDING = 12;

/** Size of vertical padding on the outer #dropdown element. */
const DROPDOWN_OUTER_PADDING = 2;

/** Minimum height of toolbar dropdowns (px). */
const MIN_DROPDOWN_HEIGHT = 200;

Polymer({
  is: 'viewer-toolbar-dropdown',

  _template: html`<!--_html_template_start_-->
    <style>
      :host {
        display: inline-block;
        position: relative;
        text-align: start;
        --dropdown-width: 260px;
      }

      :host-context([hidden]) {
        display: none;
      }

      :host([dropdown-centered]) {
        --container-offset: calc(50% - var(--dropdown-width) / 2);
      }

      #container {
        position: absolute;
        right: var(--container-offset, 0);
      }

      :host-context([dir=rtl]) #container {
        left: var(--container-offset, 0);
        right: auto;
      }

      #dropdown {
        background-color: var(--cr-menu-background-color);
        border-radius: 4px;
        color: var(--cr-primary-text-color);
        overflow-y: hidden;
        padding-bottom: 2px;
        width: var(--dropdown-width);
      }

      @media (prefers-color-scheme: light) {
        #dropdown {
          @apply --shadow-elevation-2dp;
        }
      }

      @media (prefers-color-scheme: dark) {
        #dropdown {
          background-image: linear-gradient(var(--cr-menu-background-sheen),
                                            var(--cr-menu-background-sheen));
          box-shadow: var(--cr-menu-shadow);
        }
      }

      #scroll-container {
        max-height: 300px;
        overflow-y: auto;
        padding: 6px 0 4px 0;
      }

      #button {
        --cr-icon-button-fill-color: currentColor;
        --cr-icon-button-height: 32px;
        --cr-icon-button-icon-start-offset: 4px;
        --cr-icon-button-width: 48px;
        margin: 0;
      }

      #button:hover {
        background-color: rgba(255, 255, 255, 0.08);
        opacity: 1;
      }

      :host([selected]) #button {
        opacity: 1;

      }
      :host([dropdown-open]) #button {
        background-color: rgba(255, 255, 255, 0.24);
      }

      h1 {
        border-bottom: var(--cr-separator-line);
        font-size: 0.87rem;
        font-weight: 500;
        margin: 0;
        padding: 14px 28px;
      }
    </style>
    <cr-icon-button on-click="toggleDropdown" id="button"
        iron-icon="[[dropdownIcon_]],cr:arrow-drop-down" title$="[[header]]">
    </cr-icon-button>

    <div id="container">
      <div id="dropdown" style="display: none">
        <template is="dom-if" if="[[!hideHeader]]">
          <h1>{{header}}</h1>
        </template>
        <div id="scroll-container">
          <slot></slot>
        </div>
      </div>
    </div>
<!--_html_template_end_-->`,

  properties: {
    /** Icon to display when the dropdown is closed. */
    closedIcon: String,

    /** Whether the dropdown should be centered or right aligned. */
    dropdownCentered: {
      type: Boolean,
      reflectToAttribute: true,
      value: false,
    },

    /** True if the dropdown is currently open. */
    dropdownOpen: {
      type: Boolean,
      reflectToAttribute: true,
      value: false,
    },

    /**
     * String to be displayed at the top of the dropdown and for the tooltip
     * of the button.
      */
    header: String,

    /** Whether to hide the header at the top of the dropdown. */
    hideHeader: {
      type: Boolean,
      value: false,
    },

    /** Lowest vertical point that the dropdown should occupy (px). */
    lowerBound: {
      type: Number,
      observer: 'lowerBoundChanged_',
    },

    /** Unique id to identify this dropdown for metrics purposes. */
    metricsId: String,

    /** Whether the dropdown must be selected before opening. */
    openAfterSelect: {
      type: Boolean,
      value: false,
    },

    /** Icon to display when the dropdown is open. */
    openIcon: String,

    /** Whether the dropdown is marked as selected. */
    selected: {
      type: Boolean,
      reflectToAttribute: true,
      value: false,
    },

    /**
     * Toolbar icon currently being displayed.
     * @private
     */
    dropdownIcon_: {
      type: String,
      computed: 'computeIcon_(dropdownOpen, closedIcon, openIcon)',
    },
  },

  /**
   * Current animation being played, or null if there is none.
   * @private {?Object}
   */
  animation_: null,

  /**
   * True if the max-height CSS property for the dropdown scroll container
   * is valid. If false, the height will be updated the next time the
   * dropdown is visible.
   * @private {boolean}
   */
  maxHeightValid_: false,

  /**
   * @return {string} Current icon for the dropdown.
   * @private
   */
  computeIcon_: function(dropdownOpen, closedIcon, openIcon) {
    return dropdownOpen ? openIcon : closedIcon;
  },

  /** @private */
  lowerBoundChanged_: function() {
    this.maxHeightValid_ = false;
    if (this.dropdownOpen) {
      this.updateMaxHeight();
    }
  },

  toggleDropdown: function() {
    if (!this.dropdownOpen && this.openAfterSelect && !this.selected) {
      // The dropdown has `openAfterSelect` set, but is not yet selected.
      return;
    }
    this.dropdownOpen = !this.dropdownOpen;
    if (this.dropdownOpen) {
      this.$.dropdown.style.display = 'block';
      if (!this.maxHeightValid_) {
        this.updateMaxHeight();
      }
      this.fire('dropdown-opened', this.metricsId);
    }

    if (this.dropdownOpen) {
      const listener = (e) => {
        if (e.path.includes(this)) {
          return;
        }
        if (this.dropdownOpen) {
          this.toggleDropdown();
          this.blur();
        }
        // Clean up the handler. The dropdown may already be closed.
        window.removeEventListener('pointerdown', listener);
      };
      window.addEventListener('pointerdown', listener);
    }

    this.playAnimation_(this.dropdownOpen);
  },

  updateMaxHeight: function() {
    const scrollContainer = this.$['scroll-container'];
    let height = this.lowerBound - scrollContainer.getBoundingClientRect().top -
        DROPDOWN_INNER_PADDING;
    height = Math.max(height, MIN_DROPDOWN_HEIGHT);
    scrollContainer.style.maxHeight = height + 'px';
    this.maxHeightValid_ = true;
  },

  /**
   * Start an animation on the dropdown.
   * @param {boolean} isEntry True to play entry animation, false to play
   * exit.
   * @private
   */
  playAnimation_: function(isEntry) {
    this.animation_ = isEntry ? this.animateEntry_() : this.animateExit_();
    this.animation_.onfinish = () => {
      this.animation_ = null;
      if (!this.dropdownOpen) {
        this.$.dropdown.style.display = 'none';
      }
    };
  },

  /**
   * @return {!Object} Animation
   * @private
   */
  animateEntry_: function() {
    let maxHeight =
        this.$.dropdown.getBoundingClientRect().height - DROPDOWN_OUTER_PADDING;

    if (maxHeight < 0) {
      maxHeight = 0;
    }

    this.$.dropdown.animate(
        [{opacity: 0}, {opacity: 1}],
        {
          duration: 150,
          easing: 'cubic-bezier(0, 0, 0.2, 1)',
        });
    return this.$.dropdown.animate(
        [
          {height: '20px', transform: 'translateY(-10px)'},
          {height: maxHeight + 'px', transform: 'translateY(0)'},
        ],
        {
          duration: 250,
          easing: 'cubic-bezier(0, 0, 0.2, 1)',
        });
  },

  /**
   * @return {!Object} Animation
   * @private
   */
  animateExit_: function() {
    return this.$.dropdown.animate(
        [
          {transform: 'translateY(0)', opacity: 1},
          {transform: 'translateY(-5px)', opacity: 0},
        ],
        {
          duration: 100,
          easing: 'cubic-bezier(0.4, 0, 1, 1)',
        });
  }
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/shared_vars_css.m.js';
import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
import 'chrome://resources/polymer/v3_0/paper-styles/shadow.js';

import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';

Polymer({
  is: 'viewer-zoom-button',

  _template: html`<!--_html_template_start_-->
    <style>
      :host {
        --translate-x-distance: 132px;
      }

      :host-context([is-print-preview]) {
        --translate-x-distance: 96px;
      }

      #wrapper {
        transition: transform 250ms;
        transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
      }

      :host([closed_]) #wrapper {
        /* 132px roughly flips the location of the button across the right edge
         * of the page. */
        transform: translateX(var(--translate-x-distance));
        transition-timing-function: cubic-bezier(0.4, 0, 1, 1);
      }

      :host-context([is-print-preview][dir='ltr']):host([closed_]) #wrapper {
        transform: translateX(calc(-1 * var(--translate-x-distance)));
      }

      :host-context([dir='rtl']):host([closed_]) #wrapper {
        transform: translateX(calc(-1 * var(--translate-x-distance)));
      }

      :host-context([is-print-preview][dir='rtl']):host([closed_]) #wrapper {
        transform: translateX(var(--translate-x-distance));
      }

      cr-icon-button {
        --cr-icon-button-fill-color: var(--paper-grey-700);
        --cr-icon-button-icon-size: 20px;
        --cr-icon-button-size: 36px;
        --cr-icon-button-fill-color-focus: rgb(242, 242, 242);
        background-color: rgb(242, 242, 242);
        border-radius: 50%;
        overflow: visible;
        @apply --shadow-elevation-2dp;
      }

      cr-icon-button([disabled]) {
        box-shadow: none;
      }

      :host-context([is-print-preview]) cr-icon-button {
        --cr-icon-button-fill-color: white;
        --cr-icon-button-fill-color-focus: var(--google-grey-600);
        --cr-icon-button-size: 32px;
        background-color: var(--google-grey-600);
      }

      @media (prefers-color-scheme: light) {
        :host-context([is-print-preview]) cr-icon-button {
          --cr-icon-button-ripple-opacity: .5;
        }
      }

      @media (prefers-color-scheme: dark) {
        :host-context([is-print-preview]) cr-icon-button {
          --cr-icon-button-fill-color: var(--google-grey-200);
          --cr-icon-button-fill-color-focus: var(--google-grey-900);
          background-color: var(--google-grey-900);
        }
      }

      :host([keyboard-navigation-active]) cr-icon-button:focus {
        @apply --shadow-elevation-6dp;
      }

      cr-icon-button:active {
        @apply --shadow-elevation-8dp;
      }
    </style>
    <div id="wrapper">
      <cr-icon-button iron-icon="[[visibleIcon_]]" on-click="fireClick_"
          aria-label$="[[visibleTooltip_]]" title="[[visibleTooltip_]]">
      </cr-icon-button>
    </div>
<!--_html_template_end_-->`,

  properties: {
    /** Index of the icon currently being displayed. */
    activeIndex: {
      type: Number,
      value: 0,
    },

    delay: {
      type: Number,
      observer: 'delayChanged_',
    },

    /**
     * Icons to be displayed on the FAB. Multiple icons should be separated with
     * spaces, and will be cycled through every time the FAB is clicked.
     */
    icons: String,

    /**
     * Used to show the appropriate drop shadow when buttons are focused with
     * the keyboard.
     */
    keyboardNavigationActive: {
      type: Boolean,
      reflectToAttribute: true,
    },

    /** @type {?Array<string>} */
    tooltips: Array,

    /** @private */
    closed_: {
      type: Boolean,
      reflectToAttribute: true,
      value: false,
    },

    /**
     * Array version of the list of icons. Polymer does not allow array
     * properties to be set from HTML, so we must use a string property and
     * perform the conversion manually.
     * @private {!Array<string>}
     */
    icons_: {
      type: Array,
      value: [''],
      computed: 'computeIconsArray_(icons)',
    },

    /**
     * Icon currently being displayed on the FAB.
     * @private
     */
    visibleIcon_: {
      type: String,
      computed: 'computeVisibleIcon_(icons_, activeIndex)',
    },

    /** @private */
    visibleTooltip_: {
      type: String,
      computed: 'computeVisibleTooltip_(tooltips, activeIndex)',
    }
  },

  /**
   * @param {string} icons Icon names in a string, delimited by spaces
   * @return {!Array<string>} Array of icon name strings
   * @private
   */
  computeIconsArray_: function(icons) {
    return icons.split(' ');
  },

  /**
   * @param {!Array<string>} icons Array of icon name strings.
   * @param {number} activeIndex Index of the currently active icon.
   * @return {string} Icon name for the currently visible icon.
   * @private
   */
  computeVisibleIcon_: function(icons, activeIndex) {
    return icons[activeIndex];
  },

  /**
   * @param {?Array<string>} tooltips Array of tooltip strings.
   * @param {number} activeIndex Index of the currently active icon.
   * @return {string} Tooltip for the currently visible icon.
   * @private
   */
  computeVisibleTooltip_: function(tooltips, activeIndex) {
    return tooltips === undefined ? '' : tooltips[activeIndex];
  },

  /** @private */
  delayChanged_: function() {
    this.$.wrapper.style.transitionDelay = this.delay + 'ms';
  },

  show: function() {
    this.closed_ = false;
  },

  hide: function() {
    this.closed_ = true;
  },

  /** @private */
  fireClick_: function() {
    // We cannot attach an on-click to the entire viewer-zoom-button, as this
    // will include clicks on the margins. Instead, proxy clicks on the FAB
    // through.
    this.fire('fabclick');

    this.activeIndex = (this.activeIndex + 1) % this.icons_.length;
  }
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://resources/cr_elements/icons.m.js';
import './icons.js';
import './viewer-zoom-button.js';

import {assert} from 'chrome://resources/js/assert.m.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {FittingType} from '../pdf_fitting_type.js';

/**
 * @typedef {{
 *   fittingType: !FittingType,
 *   userInitiated: boolean,
 * }}
 */
export let FitToChangedEvent;

const FIT_TO_PAGE_BUTTON_STATE = 0;
const FIT_TO_WIDTH_BUTTON_STATE = 1;

Polymer({
  is: 'viewer-zoom-toolbar',

  _template: html`<!--_html_template_start_-->
    <style>
      :host {
        --button-position-offset: 48px;
        bottom: 0;
        padding: 48px 0;
        position: fixed;
        right: 0;
        user-select: none;
        z-index: 3;
      }

      :host-context([is-print-preview]) {
        --button-position-offset: 24px;
      }

      :host-context([is-print-preview][dir='ltr']),
      :host-context([dir='rtl']) {
        left: 0;
        right: auto;
      }

      :host-context([is-print-preview][dir='rtl']) {
        left: auto;
        right: 0;
      }

      #zoom-buttons {
        position: relative;
        right: var(--button-position-offset);
      }

      :host-context([is-print-preview][dir='ltr']) #zoom-buttons,
      :host-context([dir='rtl']) #zoom-buttons {
        left: var(--button-position-offset);
        right: auto;
      }

      :host-context([is-print-preview][dir='rtl']) #zoom-buttons {
        left: auto;
        right: var(--button-position-offset);
      }

      viewer-zoom-button {
        display: block;
      }

      /* A small gap between the zoom in/zoom out buttons. */
      #zoom-out-button {
        margin-top: 10px;
      }

      /* A larger gap between the fit button and bottom two buttons. */
      #zoom-in-button {
        margin-top: 24px;
      }
    </style>
    <div id="zoom-buttons">
      <viewer-zoom-button id="fit-button" on-fabclick="fitToggle" delay="100"
          keyboard-navigation-active="[[keyboardNavigationActive_]]"
          icons="pdf:fullscreen-exit cr:fullscreen">
      </viewer-zoom-button>
      <viewer-zoom-button id="zoom-in-button" icons="pdf:add"
          keyboard-navigation-active="[[keyboardNavigationActive_]]"
          on-fabclick="zoomIn" delay="50"></viewer-zoom-button>
      <viewer-zoom-button id="zoom-out-button" icons="pdf:remove"
          keyboard-navigation-active="[[keyboardNavigationActive_]]"
          on-fabclick="zoomOut" delay="0"></viewer-zoom-button>
    </div>
<!--_html_template_end_-->`,

  properties: {
    isPrintPreview: Boolean,

    /** @private */
    keyboardNavigationActive_: {
      type: Boolean,
      value: false,
    },
  },

  listeners: {
    'focus': 'onFocus_',
    'keyup': 'onKeyUp_',
    'pointerdown': 'onPointerDown_',
  },

  /** @private {boolean} */
  visible_: true,

  /** @return {boolean} */
  isVisible: function() {
    return this.visible_;
  },

  /** @private */
  onFocus_: function() {
    // This can only happen when the plugin is shown within Print Preview using
    // keyboard navigation.
    if (!this.visible_) {
      assert(this.isPrintPreview);
      this.fire('keyboard-navigation-active', true);
      this.show();
    }
  },

  /** @private */
  onKeyUp_: function() {
    if (this.isPrintPreview) {
      this.fire('keyboard-navigation-active', true);
    }
    this.keyboardNavigationActive_ = true;
  },

  /** @private */
  onPointerDown_: function() {
    if (this.isPrintPreview) {
      this.fire('keyboard-navigation-active', false);
    }
    this.keyboardNavigationActive_ = false;
  },

  /**
   * Change button tooltips to match any changes to localized strings.
   * @param {!{tooltipFitToPage: string,
   *           tooltipFitToWidth: string,
   *           tooltipZoomIn: string,
   *           tooltipZoomOut: string}} strings
   */
  setStrings: function(strings) {
    this.$['fit-button'].tooltips =
        [strings.tooltipFitToPage, strings.tooltipFitToWidth];
    this.$['zoom-in-button'].tooltips = [strings.tooltipZoomIn];
    this.$['zoom-out-button'].tooltips = [strings.tooltipZoomOut];
  },

  /** Handle clicks of the fit-button. */
  fitToggle: function() {
    this.fireFitToChangedEvent_(
        this.$['fit-button'].activeIndex == FIT_TO_WIDTH_BUTTON_STATE ?
            FittingType.FIT_TO_WIDTH :
            FittingType.FIT_TO_PAGE,
        true);
  },

  /** Handle the keyboard shortcut equivalent of fit-button clicks. */
  fitToggleFromHotKey: function() {
    this.fitToggle();

    // Toggle the button state since there was no mouse click.
    const button = this.$['fit-button'];
    button.activeIndex =
        (button.activeIndex == FIT_TO_WIDTH_BUTTON_STATE ?
             FIT_TO_PAGE_BUTTON_STATE :
             FIT_TO_WIDTH_BUTTON_STATE);
  },

  /**
   * Handle forcing zoom via scripting to a fitting type.
   * @param {!FittingType} fittingType Page fitting type to force.
   */
  forceFit: function(fittingType) {
    this.fireFitToChangedEvent_(fittingType, false);

    // Set the button state since there was no mouse click.
    const nextButtonState =
        (fittingType == FittingType.FIT_TO_WIDTH ? FIT_TO_PAGE_BUTTON_STATE :
                                                   FIT_TO_WIDTH_BUTTON_STATE);
    this.$['fit-button'].activeIndex = nextButtonState;
  },

  /**
   * Fire a 'fit-to-changed' {CustomEvent} with the given FittingType as detail.
   * @param {!FittingType} fittingType to include as payload.
   * @param {boolean} userInitiated whether the event was initiated by a user
   *     action.
   * @private
   */
  fireFitToChangedEvent_: function(fittingType, userInitiated) {
    this.fire(
        'fit-to-changed',
        {fittingType: fittingType, userInitiated: userInitiated});
  },

  /**
   * Handle clicks of the zoom-in-button.
   */
  zoomIn: function() {
    this.fire('zoom-in');
  },

  /**
   * Handle clicks of the zoom-out-button.
   */
  zoomOut: function() {
    this.fire('zoom-out');
  },

  show: function() {
    if (!this.visible_) {
      this.visible_ = true;
      this.$['fit-button'].show();
      this.$['zoom-in-button'].show();
      this.$['zoom-out-button'].show();
    }
  },

  hide: function() {
    if (this.visible_) {
      this.visible_ = false;
      this.$['fit-button'].hide();
      this.$['zoom-in-button'].hide();
      this.$['zoom-out-button'].hide();
    }
  },
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/** @fileoverview Various string utility functions */
'use strict';

/**
 * Converts a string to an array of bytes.
 * @param {string} s The string to convert.
 * @param {(Array|Uint8Array)=} bytes The Array-like object into which to store
 *     the bytes. A new Array will be created if not provided.
 * @return {(Array|Uint8Array)} An array of bytes representing the string.
 */
function UTIL_StringToBytes(s, bytes) {
  bytes = bytes || new Array(s.length);
  for (var i = 0; i < s.length; ++i) {
    bytes[i] = s.charCodeAt(i);
  }
  return bytes;
}

/**
 * Converts a byte array to a string.
 * @param {(Uint8Array|Array<number>)} b input byte array.
 * @return {string} result.
 */
function UTIL_BytesToString(b) {
  return String.fromCharCode.apply(null, b);
}

/**
 * Converts a byte array to a hex string.
 * @param {(Uint8Array|Array<number>)} b input byte array.
 * @return {string} result.
 */
function UTIL_BytesToHex(b) {
  if (!b) {
    return '(null)';
  }
  var hexchars = '0123456789ABCDEF';
  var hexrep = new Array(b.length * 2);

  for (var i = 0; i < b.length; ++i) {
    hexrep[i * 2 + 0] = hexchars.charAt((b[i] >> 4) & 15);
    hexrep[i * 2 + 1] = hexchars.charAt(b[i] & 15);
  }
  return hexrep.join('');
}

function UTIL_BytesToHexWithSeparator(b, sep) {
  var hexchars = '0123456789ABCDEF';
  var stride = 2 + (sep ? 1 : 0);
  var hexrep = new Array(b.length * stride);

  for (var i = 0; i < b.length; ++i) {
    if (sep) {
      hexrep[i * stride + 0] = sep;
    }
    hexrep[i * stride + stride - 2] = hexchars.charAt((b[i] >> 4) & 15);
    hexrep[i * stride + stride - 1] = hexchars.charAt(b[i] & 15);
  }
  return (sep ? hexrep.slice(1) : hexrep).join('');
}

function UTIL_HexToBytes(h) {
  var hexchars = '0123456789ABCDEFabcdef';
  var res = new Uint8Array(h.length / 2);
  for (var i = 0; i < h.length; i += 2) {
    if (hexchars.indexOf(h.substring(i, i + 1)) == -1) {
      break;
    }
    res[i / 2] = parseInt(h.substring(i, i + 2), 16);
  }
  return res;
}

function UTIL_HexToArray(h) {
  var hexchars = '0123456789ABCDEFabcdef';
  var res = new Array(h.length / 2);
  for (var i = 0; i < h.length; i += 2) {
    if (hexchars.indexOf(h.substring(i, i + 1)) == -1) {
      break;
    }
    res[i / 2] = parseInt(h.substring(i, i + 2), 16);
  }
  return res;
}

function UTIL_equalArrays(a, b) {
  if (!a || !b) {
    return false;
  }
  if (a.length != b.length) {
    return false;
  }
  var accu = 0;
  for (var i = 0; i < a.length; ++i) {
    accu |= a[i] ^ b[i];
  }
  return accu === 0;
}

function UTIL_ltArrays(a, b) {
  if (a.length < b.length) {
    return true;
  }
  if (a.length > b.length) {
    return false;
  }
  for (var i = 0; i < a.length; ++i) {
    if (a[i] < b[i]) {
      return true;
    }
    if (a[i] > b[i]) {
      return false;
    }
  }
  return false;
}

function UTIL_gtArrays(a, b) {
  return UTIL_ltArrays(b, a);
}

function UTIL_geArrays(a, b) {
  return !UTIL_ltArrays(a, b);
}

function UTIL_unionArrays(a, b) {
  var obj = {};
  for (var i = 0; i < a.length; i++) {
    obj[a[i]] = a[i];
  }
  for (var i = 0; i < b.length; i++) {
    obj[b[i]] = b[i];
  }
  var union = [];
  for (var k in obj) {
    union.push(obj[k]);
  }
  return union;
}

function UTIL_getRandom(a) {
  var tmp = new Array(a);
  var rnd = new Uint8Array(a);
  window.crypto.getRandomValues(rnd);  // Yay!
  for (var i = 0; i < a; ++i) {
    tmp[i] = rnd[i] & 255;
  }
  return tmp;
}

function UTIL_setFavicon(icon) {
  // Construct a new favion link tag
  var faviconLink = document.createElement('link');
  faviconLink.rel = 'Shortcut Icon';
  faviconLink.type = 'image/x-icon';
  faviconLink.href = icon;

  // Remove the old favion, if it exists
  var head = document.getElementsByTagName('head')[0];
  var links = head.getElementsByTagName('link');
  for (var i = 0; i < links.length; i++) {
    var link = links[i];
    if (link.type == faviconLink.type && link.rel == faviconLink.rel) {
      head.removeChild(link);
    }
  }

  // Add in the new one
  head.appendChild(faviconLink);
}

// Erase all entries in array
function UTIL_clear(a) {
  if (a instanceof Array) {
    for (var i = 0; i < a.length; ++i) {
      a[i] = 0;
    }
  }
}

// Type tags used for ASN.1 encoding of ECDSA signatures
/** @const */
var UTIL_ASN_INT = 0x02;
/** @const */
var UTIL_ASN_SEQUENCE = 0x30;

/**
 * Parse SEQ(INT, INT) from ASN1 byte array.
 * @param {(Uint8Array|Array<number>)} a input to parse from.
 * @return {{'r': !Array<number>, 's': !Array<number>}|null}
 */
function UTIL_Asn1SignatureToJson(a) {
  if (a.length < 6) {
    return null;
  }  // Too small to be valid
  if (a[0] != UTIL_ASN_SEQUENCE) {
    return null;
  }
  var l = a[1] & 255;
  if (l & 0x80) {
    return null;
  }  // SEQ.size too large
  if (a.length != 2 + l) {
    return null;
  }  // SEQ size does not match input

  function parseInt(off) {
    if (a[off] != UTIL_ASN_INT) {
      return null;
    }
    var l = a[off + 1] & 255;
    if (l & 0x80) {
      return null;
    }  // INT.size too large
    if (off + 2 + l > a.length) {
      return null;
    }  // Out of bounds
    return a.slice(off + 2, off + 2 + l);
  }

  var r = parseInt(2);
  if (!r) {
    return null;
  }

  var s = parseInt(2 + 2 + r.length);
  if (!s) {
    return null;
  }

  return {'r': r, 's': s};
}

/**
 * Encode a JSON signature {r,s} as an ASN1 SEQ(INT, INT). May modify sig
 * @param {{'r': (!Array<number>|undefined), 's': !Array<number>}} sig
 * @return {!Uint8Array}
 */
function UTIL_JsonSignatureToAsn1(sig) {
  var rbytes = sig.r;
  var sbytes = sig.s;

  // ASN.1 integers are arbitrary length msb first and signed.
  // sig.r and sig.s are 256 bits msb first but _unsigned_, so we must
  // prepend a zero byte in case their high bit is set.
  if (rbytes[0] & 0x80) {
    rbytes.unshift(0);
  }
  if (sbytes[0] & 0x80) {
    sbytes.unshift(0);
  }

  var len = 4 + rbytes.length + sbytes.length;
  var buf = new Uint8Array(2 + len);
  var i = 0;
  buf[i++] = UTIL_ASN_SEQUENCE;
  buf[i++] = len;

  buf[i++] = UTIL_ASN_INT;
  buf[i++] = rbytes.length;
  buf.set(rbytes, i);
  i += rbytes.length;

  buf[i++] = UTIL_ASN_INT;
  buf[i++] = sbytes.length;
  buf.set(sbytes, i);

  return buf;
}

function UTIL_prepend_zero(s, n) {
  if (s.length == n) {
    return s;
  }
  var l = s.length;
  for (var i = 0; i < n - l; ++i) {
    s = '0' + s;
  }
  return s;
}

// hr:min:sec.milli string
function UTIL_time() {
  var d = new Date();
  var m = UTIL_prepend_zero((d.getMonth() + 1).toString(), 2);
  var t = UTIL_prepend_zero(d.getDate().toString(), 2);
  var H = UTIL_prepend_zero(d.getHours().toString(), 2);
  var M = UTIL_prepend_zero(d.getMinutes().toString(), 2);
  var S = UTIL_prepend_zero(d.getSeconds().toString(), 2);
  var L = UTIL_prepend_zero((d.getMilliseconds() * 1000).toString(), 6);
  return m + t + ' ' + H + ':' + M + ':' + S + '.' + L;
}

var UTIL_events = [];
var UTIL_max_events = 500;

function UTIL_fmt(s) {
  var line = UTIL_time() + ': ' + s;
  if (UTIL_events.push(line) > UTIL_max_events) {
    // Drop from head.
    UTIL_events.splice(0, UTIL_events.length - UTIL_max_events);
  }
  return line;
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// WebSafeBase64Escape and Unescape.
function B64_encode(bytes, opt_length) {
  if (!opt_length) {
    opt_length = bytes.length;
  }
  var b64out =
      'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
  var result = '';
  var shift = 0;
  var accu = 0;
  var inputIndex = 0;
  while (opt_length--) {
    accu <<= 8;
    accu |= bytes[inputIndex++];
    shift += 8;
    while (shift >= 6) {
      var i = (accu >> (shift - 6)) & 63;
      result += b64out.charAt(i);
      shift -= 6;
    }
  }
  if (shift) {
    accu <<= 8;
    shift += 8;
    var i = (accu >> (shift - 6)) & 63;
    result += b64out.charAt(i);
  }
  return result;
}

// Normal base64 encode; not websafe, including padding.
function base64_encode(bytes, opt_length) {
  if (!opt_length) {
    opt_length = bytes.length;
  }
  var b64out =
      'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  var result = '';
  var shift = 0;
  var accu = 0;
  var inputIndex = 0;
  while (opt_length--) {
    accu <<= 8;
    accu |= bytes[inputIndex++];
    shift += 8;
    while (shift >= 6) {
      var i = (accu >> (shift - 6)) & 63;
      result += b64out.charAt(i);
      shift -= 6;
    }
  }
  if (shift) {
    accu <<= 8;
    shift += 8;
    var i = (accu >> (shift - 6)) & 63;
    result += b64out.charAt(i);
  }
  while (result.length % 4) {
    result += '=';
  }
  return result;
}

var B64_inmap = [
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  63, 0,  0,
  53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 0,  0,  0,  0,  0,  0,
  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15,
  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 0,  0,  0,  0,  64,
  0,  27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
  42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 0,  0,  0,  0,  0
];

function B64_decode(string) {
  var bytes = [];
  var accu = 0;
  var shift = 0;
  for (var i = 0; i < string.length; ++i) {
    var c = string.charCodeAt(i);
    if (c < 32 || c > 127 || !B64_inmap[c - 32]) {
      return [];
    }
    accu <<= 6;
    accu |= (B64_inmap[c - 32] - 1);
    shift += 6;
    if (shift >= 8) {
      bytes.push((accu >> (shift - 8)) & 255);
      shift -= 8;
    }
  }
  return bytes;
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides a countdown-based timer interface.
 */
'use strict';

/**
 * A countdown timer.
 * @interface
 */
function Countdown() {}

/**
 * Sets a new timeout for this timer.
 * @param {number} timeoutMillis how long, in milliseconds, the countdown lasts.
 * @param {Function=} cb called back when the countdown expires.
 * @return {boolean} whether the timeout could be set.
 */
Countdown.prototype.setTimeout = function(timeoutMillis, cb) {};

/** Clears this timer's timeout. Timers that are cleared become expired. */
Countdown.prototype.clearTimeout = function() {};

/**
 * @return {number} how many milliseconds are remaining until the timer expires.
 */
Countdown.prototype.millisecondsUntilExpired = function() {};

/** @return {boolean} whether the timer has expired. */
Countdown.prototype.expired = function() {};

/**
 * Constructs a new clone of this timer, while overriding its callback.
 * @param {Function=} cb callback for new timer.
 * @return {!Countdown} new clone.
 */
Countdown.prototype.clone = function(cb) {};

/**
 * A factory to create countdown timers.
 * @interface
 */
function CountdownFactory() {}

/**
 * Creates a new timer.
 * @param {number} timeoutMillis How long, in milliseconds, the countdown lasts.
 * @param {function()=} opt_cb Called back when the countdown expires.
 * @return {!Countdown} The timer.
 */
CountdownFactory.prototype.createTimer = function(timeoutMillis, opt_cb) {};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides a countdown-based timer implementation.
 */
'use strict';

/**
 * Constructs a new timer.  The timer has a very limited resolution, and does
 * not attempt to be millisecond accurate. Its intended use is as a
 * low-precision timer that pauses while debugging.
 * @param {!SystemTimer} sysTimer The system timer implementation.
 * @param {number=} timeoutMillis how long, in milliseconds, the countdown
 *     lasts.
 * @param {Function=} cb called back when the countdown expires.
 * @constructor
 * @implements {Countdown}
 */
function CountdownTimer(sysTimer, timeoutMillis, cb) {
  /** @private {!SystemTimer} */
  this.sysTimer_ = sysTimer;
  this.remainingMillis = 0;
  this.setTimeout(timeoutMillis || 0, cb);
}

/** Timer interval */
CountdownTimer.TIMER_INTERVAL_MILLIS = 200;

/**
 * Sets a new timeout for this timer. Only possible if the timer is not
 * currently active.
 * @param {number} timeoutMillis how long, in milliseconds, the countdown lasts.
 * @param {Function=} cb called back when the countdown expires.
 * @return {boolean} whether the timeout could be set.
 */
CountdownTimer.prototype.setTimeout = function(timeoutMillis, cb) {
  if (this.timeoutId) {
    return false;
  }
  if (!timeoutMillis || timeoutMillis < 0) {
    return false;
  }
  this.remainingMillis = timeoutMillis;
  this.cb = cb;
  if (this.remainingMillis > CountdownTimer.TIMER_INTERVAL_MILLIS) {
    this.timeoutId = this.sysTimer_.setInterval(
        this.timerTick.bind(this), CountdownTimer.TIMER_INTERVAL_MILLIS);
  } else {
    // Set a one-shot timer for the last interval.
    this.timeoutId = this.sysTimer_.setTimeout(
        this.timerTick.bind(this), this.remainingMillis);
  }
  return true;
};

/** Clears this timer's timeout. Timers that are cleared become expired. */
CountdownTimer.prototype.clearTimeout = function() {
  if (this.timeoutId) {
    this.sysTimer_.clearTimeout(this.timeoutId);
    this.timeoutId = undefined;
  }
  this.remainingMillis = 0;
};

/**
 * @return {number} how many milliseconds are remaining until the timer expires.
 */
CountdownTimer.prototype.millisecondsUntilExpired = function() {
  return this.remainingMillis > 0 ? this.remainingMillis : 0;
};

/** @return {boolean} whether the timer has expired. */
CountdownTimer.prototype.expired = function() {
  return this.remainingMillis <= 0;
};

/**
 * Constructs a new clone of this timer, while overriding its callback.
 * @param {Function=} cb callback for new timer.
 * @return {!Countdown} new clone.
 */
CountdownTimer.prototype.clone = function(cb) {
  return new CountdownTimer(this.sysTimer_, this.remainingMillis, cb);
};

/** Timer callback. */
CountdownTimer.prototype.timerTick = function() {
  this.remainingMillis -= CountdownTimer.TIMER_INTERVAL_MILLIS;
  if (this.expired()) {
    this.sysTimer_.clearTimeout(this.timeoutId);
    this.timeoutId = undefined;
    if (this.cb) {
      this.cb();
    }
  }
};

/**
 * A factory for creating CountdownTimers.
 * @param {!SystemTimer} sysTimer The system timer implementation.
 * @constructor
 * @implements {CountdownFactory}
 */
function CountdownTimerFactory(sysTimer) {
  /** @private {!SystemTimer} */
  this.sysTimer_ = sysTimer;
}

/**
 * Creates a new timer.
 * @param {number} timeoutMillis How long, in milliseconds, the countdown lasts.
 * @param {function()=} opt_cb Called back when the countdown expires.
 * @return {!Countdown} The timer.
 */
CountdownTimerFactory.prototype.createTimer = function(timeoutMillis, opt_cb) {
  return new CountdownTimer(this.sysTimer_, timeoutMillis, opt_cb);
};

/**
 * Minimum timeout attenuation, below which a response couldn't be reasonably
 * guaranteed, in seconds.
 * @const
 */
var MINIMUM_TIMEOUT_ATTENUATION_SECONDS = 1;

/**
 * @param {number} timeoutSeconds Timeout value in seconds.
 * @param {number=} opt_attenuationSeconds Attenuation value in seconds.
 * @return {number} The timeout value, attenuated to ensure a response can be
 *     given before the timeout's expiration.
 */
function attenuateTimeoutInSeconds(timeoutSeconds, opt_attenuationSeconds) {
  var attenuationSeconds =
      opt_attenuationSeconds || MINIMUM_TIMEOUT_ATTENUATION_SECONDS;
  if (timeoutSeconds < attenuationSeconds) {
    return 0;
  }
  return timeoutSeconds - attenuationSeconds;
}

/**
 * Default request timeout when none is present in the request, in seconds.
 * @const
 */
var DEFAULT_REQUEST_TIMEOUT_SECONDS = 30;

/**
 * Gets the timeout value from the request, if any, substituting
 * opt_defaultTimeoutSeconds or DEFAULT_REQUEST_TIMEOUT_SECONDS if the request
 * does not contain a timeout value.
 * @param {Object} request The request containing the timeout.
 * @param {number=} opt_defaultTimeoutSeconds
 * @return {number} Timeout value, in seconds.
 */
function getTimeoutValueFromRequest(request, opt_defaultTimeoutSeconds) {
  var timeoutValueSeconds;
  if (request.hasOwnProperty('timeoutSeconds')) {
    timeoutValueSeconds = request['timeoutSeconds'];
  } else if (request.hasOwnProperty('timeout')) {
    timeoutValueSeconds = request['timeout'];
  } else if (opt_defaultTimeoutSeconds !== undefined) {
    timeoutValueSeconds = opt_defaultTimeoutSeconds;
  } else {
    timeoutValueSeconds = DEFAULT_REQUEST_TIMEOUT_SECONDS;
  }
  return timeoutValueSeconds;
}

/**
 * Creates a new countdown for the given timeout value, attenuated to ensure a
 * response is given prior to the countdown's expiration, using the given timer
 * factory.
 * @param {CountdownFactory} timerFactory The factory to use.
 * @param {number} timeoutValueSeconds
 * @param {number=} opt_attenuationSeconds Attenuation value in seconds.
 * @return {!Countdown} A countdown timer.
 */
function createAttenuatedTimer(
    timerFactory, timeoutValueSeconds, opt_attenuationSeconds) {
  timeoutValueSeconds =
      attenuateTimeoutInSeconds(timeoutValueSeconds, opt_attenuationSeconds);
  return timerFactory.createTimer(timeoutValueSeconds * 1000);
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// SHA256 in javascript.
//
// SHA256 {
//  SHA256();
//  void reset();
//  void update(byte[] data, opt_length);
//  byte[32] digest();
// }

/** @constructor */
function SHA256() {
  this._buf = new Array(64);
  this._W = new Array(64);
  this._pad = new Array(64);
  this._k = [
    0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
    0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
    0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
    0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
    0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
    0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
    0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
    0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
    0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
    0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
    0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
  ];

  this._pad[0] = 0x80;
  for (var i = 1; i < 64; ++i) {
    this._pad[i] = 0;
  }

  this.reset();
}

/** Reset the hasher */
SHA256.prototype.reset = function() {
  this._chain = [
    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c,
    0x1f83d9ab, 0x5be0cd19
  ];

  this._inbuf = 0;
  this._total = 0;
};

/** Hash the next block of 64 bytes
 * @param {Array<number>} buf A 64 byte buffer
 */
SHA256.prototype._compress = function(buf) {
  var W = this._W;
  var k = this._k;

  var _rotr = function(w, r) {
    return ((w << (32 - r)) | (w >>> r));
  };

  // get 16 big endian words
  for (var i = 0; i < 64; i += 4) {
    var w =
        (buf[i] << 24) | (buf[i + 1] << 16) | (buf[i + 2] << 8) | (buf[i + 3]);
    W[i / 4] = w;
  }

  // expand to 64 words
  for (var i = 16; i < 64; ++i) {
    var s0 = _rotr(W[i - 15], 7) ^ _rotr(W[i - 15], 18) ^ (W[i - 15] >>> 3);
    var s1 = _rotr(W[i - 2], 17) ^ _rotr(W[i - 2], 19) ^ (W[i - 2] >>> 10);
    W[i] = (W[i - 16] + s0 + W[i - 7] + s1) & 0xffffffff;
  }

  var A = this._chain[0];
  var B = this._chain[1];
  var C = this._chain[2];
  var D = this._chain[3];
  var E = this._chain[4];
  var F = this._chain[5];
  var G = this._chain[6];
  var H = this._chain[7];

  for (var i = 0; i < 64; ++i) {
    var S0 = _rotr(A, 2) ^ _rotr(A, 13) ^ _rotr(A, 22);
    var maj = (A & B) ^ (A & C) ^ (B & C);
    var t2 = (S0 + maj) & 0xffffffff;
    var S1 = _rotr(E, 6) ^ _rotr(E, 11) ^ _rotr(E, 25);
    var ch = (E & F) ^ ((~E) & G);
    var t1 = (H + S1 + ch + k[i] + W[i]) & 0xffffffff;

    H = G;
    G = F;
    F = E;
    E = (D + t1) & 0xffffffff;
    D = C;
    C = B;
    B = A;
    A = (t1 + t2) & 0xffffffff;
  }

  this._chain[0] += A;
  this._chain[1] += B;
  this._chain[2] += C;
  this._chain[3] += D;
  this._chain[4] += E;
  this._chain[5] += F;
  this._chain[6] += G;
  this._chain[7] += H;
};

/** Update the hash with additional data
 * @param {Array<number>|Uint8Array} bytes The data
 * @param {number=} opt_length How many bytes to hash, if not all */
SHA256.prototype.update = function(bytes, opt_length) {
  if (!opt_length) {
    opt_length = bytes.length;
  }

  this._total += opt_length;
  for (var n = 0; n < opt_length; ++n) {
    this._buf[this._inbuf++] = bytes[n];
    if (this._inbuf == 64) {
      this._compress(this._buf);
      this._inbuf = 0;
    }
  }
};

/** Update the hash with a specified range from a data buffer
 * @param {Array<number>} bytes The data buffer
 * @param {number} start Starting index of the range in bytes
 * @param {number} end End index, will not be included in range
 */
SHA256.prototype.updateRange = function(bytes, start, end) {
  this._total += (end - start);
  for (var n = start; n < end; ++n) {
    this._buf[this._inbuf++] = bytes[n];
    if (this._inbuf == 64) {
      this._compress(this._buf);
      this._inbuf = 0;
    }
  }
};

/**
 * Optionally update the hash with additional arguments, and return the
 * resulting hash value.
 * @param {...*} var_args Data buffers to hash
 * @return {!Array<number>} the SHA256 hash value.
 */
SHA256.prototype.digest = function(var_args) {
  for (var i = 0; i < arguments.length; ++i) {
    this.update(arguments[i]);
  }

  var digest = new Array(32);
  var totalBits = this._total * 8;

  // add pad 0x80 0x00*
  if (this._inbuf < 56) {
    this.update(this._pad, 56 - this._inbuf);
  } else {
    this.update(this._pad, 64 - (this._inbuf - 56));
  }

  // add # bits, big endian
  for (var i = 63; i >= 56; --i) {
    this._buf[i] = totalBits & 255;
    totalBits >>>= 8;
  }

  this._compress(this._buf);

  var n = 0;
  for (var i = 0; i < 8; ++i) {
    for (var j = 24; j >= 0; j -= 8) {
      digest[n++] = (this._chain[i] >> j) & 255;
    }
  }

  return digest;
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides an interface representing the browser/extension
 * system's timer interface.
 */
'use strict';

/**
 * An interface representing the browser/extension system's timer interface.
 * @interface
 */
function SystemTimer() {}

/**
 * Sets a single-shot timer.
 * @param {function()} func Called back when the timer expires.
 * @param {number} timeoutMillis How long until the timer fires, in
 *     milliseconds.
 * @return {number} A timeout ID, which can be used to cancel the timer.
 */
SystemTimer.prototype.setTimeout = function(func, timeoutMillis) {};

/**
 * Clears a previously set timer.
 * @param {number} timeoutId The ID of the timer to clear.
 */
SystemTimer.prototype.clearTimeout = function(timeoutId) {};

/**
 * Sets a repeating interval timer.
 * @param {function()} func Called back each time the timer fires.
 * @param {number} timeoutMillis How long until the timer fires, in
 *     milliseconds.
 * @return {number} A timeout ID, which can be used to cancel the timer.
 */
SystemTimer.prototype.setInterval = function(func, timeoutMillis) {};

/**
 * Clears a previously set interval timer.
 * @param {number} timeoutId The ID of the timer to clear.
 */
SystemTimer.prototype.clearInterval = function(timeoutId) {};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview This file defines the status codes returned by the device.
 */

/**
 * Status codes returned by the gnubby device.
 * @const
 * @enum {number}
 * @export
 */
var DeviceStatusCodes = {};

/**
 * Device operation succeeded.
 * @const
 */
DeviceStatusCodes.OK_STATUS = 0;

/**
 * Device operation wrong length status.
 * @const
 */
DeviceStatusCodes.WRONG_LENGTH_STATUS = 0x6700;

/**
 * Device operation wait touch status.
 * @const
 */
DeviceStatusCodes.WAIT_TOUCH_STATUS = 0x6985;

/**
 * Device operation invalid data status.
 * @const
 */
DeviceStatusCodes.INVALID_DATA_STATUS = 0x6984;

/**
 * Device operation wrong data status.
 * @const
 */
DeviceStatusCodes.WRONG_DATA_STATUS = 0x6a80;

/**
 * Device operation file not found status.
 * @const
 */
DeviceStatusCodes.FILE_NOT_FOUND_STATUS = 0x6a82;

/**
 * Device operation timeout status.
 * @const
 */
DeviceStatusCodes.TIMEOUT_STATUS = -5;

/**
 * Device operation busy status.
 * @const
 */
DeviceStatusCodes.BUSY_STATUS = -6;

/**
 * Device removed status.
 * @const
 */
DeviceStatusCodes.GONE_STATUS = -8;
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * ASN.1 parser, in the manner of BoringSSL's CBS (crypto byte string) lib.
 *
 * A |ByteString| is a buffer of DER-encoded bytes.  To decode the buffer, you
 * must know something about the expected sequence of tags, which allows you to
 * call getASN1() and friends with the right arguments and in the right order.
 *
 * https://commondatastorage.googleapis.com/chromium-boringssl-docs/bytestring.h.html
 * is the canonical API reference.
 */
const ByteString = class {
  /**
   * Creates a new ASN.1 parser.
   * @param {!Uint8Array} buffer DER-encoded ASN.1 bytes.
   */
  constructor(buffer) {
    /** @private {!Uint8Array} */
    this.slice_ = buffer;
  }

  /**
   * @return {!Uint8Array} The DER-encoded bytes remaining in the buffer.
   */
  get data() {
    return this.slice_;
  }

  /**
   * @return {number} The number of DER-encoded bytes remaining in the buffer.
   */
  get length() {
    return this.slice_.length;
  }

  /**
   * @return {boolean} True if the buffer is empty.
   */
  get empty() {
    return this.slice_.length == 0;
  }

  /**
   * Pops a byte from the start of the buffer.
   * @return {number} A byte.
   * @throws {Error} if the buffer is empty.
   * @private
   */
  getU8_() {
    if (this.empty) {
      throw Error('getU8_: slice empty');
    }
    const b = this.slice_[0];
    this.slice_ = this.slice_.subarray(1);
    return b;
  }

  /**
   * Pops |n| bytes from the buffer.
   * @param {number} n The number of bytes to pop.
   * @throws {Error}
   * @private
   */
  skip_(n) {
    if (this.slice_.length < n) {
      throw Error('skip_: too few bytes in input');
    }
    this.slice_ = this.slice_.subarray(n);
  }

  /**
   * @param {number} n The number of bytes to read from the buffer.
   * @return {!Uint8Array} an array of |n| bytes.
   * @throws {Error}
   */
  getBytes(n) {
    if (this.slice_.length < n) {
      throw Error('getBytes: too few bytes in input');
    }
    const prefix = this.slice_.subarray(0, n);
    this.slice_ = this.slice_.subarray(n);
    return prefix;
  }

  /**
   * Returns a value of the specified type.
   * @param {number} expectedTag The expected tag, e.g. |SEQUENCE|, of the next
   *     value in the buffer.
   * @param {boolean=} opt_includeHeader If true, include header bytes in the
   *     buffer.
   * @return {!ByteString} The DER-encoded value bytes.
   * @throws {Error}
   * @private
   */
  getASN1_(expectedTag, opt_includeHeader) {
    if (this.empty) {
      throw Error('getASN1: empty slice, expected tag ' + expectedTag);
    }
    const v = this.getAnyASN1();
    if (v.tag != expectedTag) {
      throw Error('getASN1: got tag ' + v.tag + ', want ' + expectedTag);
    }
    if (!opt_includeHeader) {
      v.val.skip_(v.headerLen);
    }
    return v.val;
  }

  /**
   * Returns a value of the specified type.
   * @param {number} expectedTag The expected tag, e.g. |SEQUENCE|, of the next
   *     value in the buffer.
   * @return {!ByteString} The DER-encoded value bytes.
   * @throws {Error}
   */
  getASN1(expectedTag) {
    return this.getASN1_(expectedTag, false);
  }

  /**
   * Returns a base128-encoded integer.
   * @return {number} an int32.
   * @private
   */
  getBase128Int_() {
    var lookahead = this.slice_.length;
    if (lookahead > 4) {
      lookahead = 4;
    }
    var len = 0;
    for (var i = 0; i < lookahead; i++) {
      if (!(this.data[i] & 0x80)) {
        len = i + 1;
        break;
      }
    }
    if (len == 0) {
      throw Error('terminating byte not found');
    }
    var n = 0;
    var octets = this.getBytes(len);
    for (var i = 0; i < len; i++) {
      n |= (octets[i] & 0x7f) << 7 * (len - i - 1);
    }
    return n;
  }

  /**
   * Returns an OBJECT IDENTIFIER.
   * @return {Array<number>}
   */
  getASN1ObjectIdentifier() {
    var b = this.getASN1(Tag.OBJECT);
    var result = [];
    var first = b.getBase128Int_();
    result[1] = first % 40;
    result[0] = (first - result[1]) / 40;
    var n = 2;
    while (!b.empty) {
      result[n++] = b.getBase128Int_();
    }
    return result;
  }

  /**
   * Returns a value of the specified type, with its header.
   * @param {number} expectedTag The expected tag, e.g. |SEQUENCE|, of the next
   *     value in the buffer.
   * @return {!ByteString} The DER-encoded header and value bytes.
   * @throws {Error}
   */
  getASN1Element(expectedTag) {
    return this.getASN1_(expectedTag, true);
  }

  /**
   * Returns an optional value of the specified type.
   * @param {number} expectedTag The expected tag, e.g. |SEQUENCE|, of the next
   *     value in the buffer.
   * @return {ByteString}
   * */
  getOptionalASN1(expectedTag) {
    if (this.slice_.length < 1 || this.slice_[0] != expectedTag) {
      return null;
    }
    return this.getASN1(expectedTag);
  }

  /**
   * Matches and returns any ASN.1 type.
   * @return {{tag: number, headerLen: number, val: !ByteString}} An ASN.1
   *    value.  The returned |ByteString| includes the DER header bytes.
   * @throws {Error}
   */
  getAnyASN1() {
    const header = new ByteString(this.slice_);
    const tag = header.getU8_();
    const lengthByte = header.getU8_();

    if ((tag & 0x1f) == 0x1f) {
      throw Error('getAnyASN1: long-form tag found');
    }

    var len = 0;
    var headerLen = 0;

    if ((lengthByte & 0x80) == 0) {
      // Short form length.
      len = lengthByte + 2;
      headerLen = 2;
    } else {
      // The high bit indicates that this is the long form, while the next 7
      // bits encode the number of subsequent octets used to encode the length
      // (ITU-T X.690 clause 8.1.3.5.b).
      const numBytes = lengthByte & 0x7f;

      // Bitwise operations are always on signed 32-bit two's complement
      // numbers.  This check ensures that we stay under this limit.  We could
      // do this in a better way, but there's no need to process very large
      // objects.
      if (numBytes == 0 || numBytes > 3) {
        throw Error('getAnyASN1: bad ASN.1 long-form length');
      }
      const lengthBytes = header.getBytes(numBytes);
      for (var i = 0; i < numBytes; i++) {
        len <<= 8;
        len |= lengthBytes[i];
      }

      if (len < 128 || (len >> ((numBytes - 1) * 8)) == 0) {
        throw Error('getAnyASN1: incorrectly encoded ASN.1 length');
      }

      headerLen = 2 + numBytes;
      len += headerLen;
    }

    if (this.slice_.length < len) {
      throw Error('getAnyASN1: too few bytes in input');
    }
    const prefix = this.slice_.subarray(0, len);
    this.slice_ = this.slice_.subarray(len);
    return {tag: tag, headerLen: headerLen, val: new ByteString(prefix)};
  }
};

/**
 * Tag is a container for ASN.1 tag values, like |SEQUENCE|.  These values
 * are arguments to e.g. getASN1().
 */
const Tag = class {
  /** @return {number} */
  static get BOOLEAN() {
    return 1;
  }

  /** @return {number} */
  static get INTEGER() {
    return 2;
  }

  /** @return {number} */
  static get BITSTRING() {
    return 3;
  }

  /** @return {number} */
  static get OCTETSTRING() {
    return 4;
  }

  /** @return {number} */
  static get NULL() {
    return 5;
  }

  /** @return {number} */
  static get OBJECT() {
    return 6;
  }

  /** @return {number} */
  static get UTF8String() {
    return 12;
  }

  /** @return {number} */
  static get PrintableString() {
    return 19;
  }

  /** @return {number} */
  static get UTCTime() {
    return 23;
  }

  /** @return {number} */
  static get GeneralizedTime() {
    return 24;
  }

  /** @return {number} */
  static get CONSTRUCTED() {
    return 0x20;
  }

  /** @return {number} */
  static get SEQUENCE() {
    return 0x30;
  }

  /** @return {number} */
  static get SET() {
    return 0x31;
  }

  /** @return {number} */
  static get CONTEXT_SPECIFIC() {
    return 0x80;
  }
};

/**
 * ASN.1 builder, in the manner of BoringSSL's CBB (crypto byte builder).
 *
 * A |ByteBuilder| maintains a |Uint8Array| slice and appends to it on demand.
 * After appending all the necessary values, the |data| property returns a
 * slice containing the result. Utility functions are provided for appending
 * ASN.1 DER-formatted values.
 *
 * Several of the functions take a "continuation" parameter. This is a function
 * that makes calls to its argument in order to lay down the contents of a
 * value. Once the continuation returns, the length prefix will be serialised.
 * It is illegal to call methods on a parent ByteBuilder while a continuation
 * function is running.
 */
const ByteBuilder = class {
  constructor() {
    /** @private {?Uint8Array} */
    this.slice_ = null;
    /** @private {number} */
    this.len_ = 0;
    /** @private {?ByteBuilder} */
    this.child_ = null;
  }

  /**
   * @return {!Uint8Array} The constructed bytes
   */
  get data() {
    if (this.child_ != null) {
      throw Error('data access while child is pending');
    }
    if (this.slice_ === null) {
      return new Uint8Array(0);
    }
    return this.slice_.subarray(0, this.len_);
  }

  /**
   * Reallocates the slice to at least a given size.
   * @param {number} minNewSize The minimum resulting size of the slice.
   * @private
   */
  realloc_(minNewSize) {
    var newSize = 0;

    if (minNewSize > Number.MAX_SAFE_INTEGER - minNewSize) {
      // Cannot grow exponentially without overflow.
      newSize = minNewSize;
    } else {
      newSize = minNewSize * 2;
    }

    if (this.slice_ === null) {
      if (newSize < 128) {
        newSize = 128;
      }
      this.slice_ = new Uint8Array(newSize);
      return;
    }

    const newSlice = new Uint8Array(newSize);
    for (var i = 0; i < this.len_; i++) {
      newSlice[i] = this.slice_[i];
    }

    this.slice_ = newSlice;
  }

  /**
   * Extends the current slice by the given number of bytes.
   * @param {number} n The number of extra bytes needed in the slice.
   * @return {number} The offset of the new bytes.
   * @throws {Error}
   * @private
   */
  extend_(n) {
    if (this.child_ != null) {
      throw Error('write while child pending');
    }
    if (this.len_ > Number.MAX_SAFE_INTEGER - n) {
      throw Error('length overflow');
    }
    if (this.slice_ === null || this.len_ + n > this.slice_.length) {
      this.realloc_(this.len_ + n);
    }

    const offset = this.len_;
    this.len_ += n;
    return offset;
  }

  /**
   * Appends a uint8 to the slice.
   * @param {number} b The byte to append.
   * @throws {Error}
   * @private
   */
  addU8_(b) {
    const offset = this.extend_(1);
    this.slice_[offset] = b;
  }

  /**
   * Appends a length prefixed value to the slice.
   * @param {number} lenLen The number of length-prefix bytes.
   * @param {boolean} isASN1 True iff an ASN.1 length should be prefixed.
   * @param {function(ByteBuilder)} k A function to construct the contents.
   * @throws {Error}
   * @private
   */
  addLengthPrefixed_(lenLen, isASN1, k) {
    var offset = this.extend_(lenLen);
    var child = new ByteBuilder();
    child.slice_ = this.slice_;
    child.len_ = this.len_;
    this.child_ = child;
    k(child);

    var length = child.len_ - lenLen - offset;
    if (length > 0x7fffffff) {
      // If a number larger than this is used with a shift operation in
      // Javascript, the result is incorrect.
      throw Error('length too large');
    }

    if (isASN1) {
      // In the case of ASN.1 a single byte was reserved for
      // the length. The contents of the array may need to be
      // shifted along if the length needs more than that.
      if (lenLen != 1) {
        throw Error('internal error');
      }

      var lenByte = 0;
      if (length > 0xffffff) {
        lenLen = 5;
        lenByte = 0x80 | 4;
      } else if (length > 0xffff) {
        lenLen = 4;
        lenByte = 0x80 | 3;
      } else if (length > 0xff) {
        lenLen = 3;
        lenByte = 0x80 | 2;
      } else if (length > 0x7f) {
        lenLen = 2;
        lenByte = 0x80 | 1;
      } else {
        lenLen = 1;
        lenByte = length;
        length = 0;
      }

      child.slice_[offset] = lenByte;
      const extraBytesNeeded = lenLen - 1;
      if (extraBytesNeeded > 0) {
        child.extend_(extraBytesNeeded);
        child.slice_.copyWithin(offset + lenLen, offset + 1, child.len_);
      }

      offset++;
      lenLen = extraBytesNeeded;
    }

    var l = length;
    for (var i = lenLen - 1; i >= 0; i--) {
      child.slice_[offset + i] = l;
      l >>= 8;
    }

    if (l != 0) {
      throw Error('pending child length exceeds reserved space');
    }

    this.slice_ = child.slice_;
    this.len_ = child.len_;
    this.child_ = null;
  }

  /**
   * Appends an ASN.1 element to the slice.
   * @param {number} tag The ASN.1 tag value (must be < 31).
   * @param {function(ByteBuilder)} k A function to construct the contents.
   * @throws {Error}
   */
  addASN1(tag, k) {
    if (tag > 255) {
      throw Error('high-tag values not supported');
    }
    this.addU8_(tag);
    this.addLengthPrefixed_(1, true, k);
  }

  /**
   * Appends an ASN.1 INTEGER to the slice.
   * @param {number} n The value of the integer. Must be within the range of an
   *     int32.
   * @throws {Error}
   */
  addASN1Int(n) {
    if (n < (0x80000000 << 0) || n > 0x7fffffff) {
      // Numbers this large (or small) cannot be correctly shifted in
      // Javascript.
      throw Error('integer out of encodable range');
    }

    var length = 1;
    for (var nn = n; nn >= 0x80 || nn <= -0x80; nn >>= 8) {
      length++;
    }

    this.addASN1(Tag.INTEGER, (b) => {
      for (var i = length - 1; i >= 0; i--) {
        b.addU8_((n >> (8 * i)) & 0xff);
      }
    });
  }

  /**
   * Appends a non-negative ASN.1 INTEGER to the slice given its big-endian
   *     encoding. This can be useful when interacting with the WebCrypto API.
   * @param {!Uint8Array} bytes The big-endian encoding of the integer.
   * @throws {Error}
   */
  addASN1BigInt(bytes) {
    // Zero is representated as a single zero byte, rather than no bytes.
    if (bytes.length == 0) {
      bytes = new Uint8Array(1);
    }

    // Leading zero bytes need to be removed, unless that would make the number
    // negative.
    while (bytes.length >= 2 && bytes[0] == 0 && (bytes[1] & 0x80) == 0) {
      bytes = bytes.slice(1);
    }

    // If the MSB is set, the number will be considered to be negative. Thus
    // a zero prefix is needed in that case.
    if (bytes.length > 0 && (bytes[0] & 0x80) == 0x80) {
      if (bytes.length > Number.MAX_SAFE_INTEGER - 1) {
        throw Error('bigint array too long');
      }
      var newBytes = new Uint8Array(bytes.length + 1);
      newBytes.set(bytes, 1);
      bytes = newBytes;
    }

    this.addASN1(Tag.INTEGER, (b) => b.addBytes(bytes));
  }

  /**
   * Appends a base128-encoded integer to the slice.
   * @param {number} n The value of the integer. Must be non-negative and within
   *     the range of an int32.
   * @throws {Error}
   * @private
   */
  addBase128Int_(n) {
    if (n < 0 || n > 0x7fffffff) {
      // Cannot encode negative numbers and large numbers cannot be shifted in
      // Javascript.
      throw Error('integer out of encodable range');
    }

    var length = 0;
    if (n == 0) {
      length = 1;
    } else {
      for (var i = n; i > 0; i >>= 7) {
        length++;
      }
    }

    for (var i = length - 1; i >= 0; i--) {
      var octet = 0x7f & (n >> (7 * i));
      if (i != 0) {
        octet |= 0x80;
      }
      this.addU8_(octet);
    }
  }

  /**
   * Appends an OBJECT IDENTIFIER to the slice.
   * @param {Array<number>} oid The OID as a list of integer elements.
   * @throws {Error}
   */
  addASN1ObjectIdentifier(oid) {
    if (oid.length < 2 || oid[0] > 2 || (oid[0] <= 1 && oid[1] >= 40)) {
      throw Error('invalid OID');
    }

    this.addASN1(Tag.OBJECT, (b) => {
      b.addBase128Int_(oid[0] * 40 + oid[1]);
      for (var i = 2; i < oid.length; i++) {
        b.addBase128Int_(oid[i]);
      }
    });
  }

  /**
   * Appends an ASN.1 NULL to the slice.
   * @throws {Error}
   */
  addASN1Null() {
    const offset = this.extend_(2);
    this.slice_[offset] = Tag.NULL;
    this.slice_[offset + 1] = 0;
  }

  /**
   * Appends an ASN.1 PrintableString to the slice.
   * @param {string} s The contents of the string.
   * @throws {Error}
   */
  addASN1PrintableString(s) {
    var buf = new Uint8Array(s.length);
    for (var i = 0; i < s.length; i++) {
      const code = s.charCodeAt(i);
      if ((code < 97 && code > 122) &&  // a-z
          (code < 65 && code > 90) &&   // A-Z
          ' \'()+,-/:=?'.indexOf(String.fromCharCode(code)) == -1) {
        throw Error(
            'cannot encode \'' + String.fromCharCode(code) + '\' in' +
            ' PrintableString');
      }

      buf[i] = code;
    }

    this.addASN1(Tag.PrintableString, (b) => {
      b.addBytes(buf);
    });
  }

  /**
   * Appends an ASN.1 UTF8String to the slice.
   * @param {string} s The contents of the string.
   * @throws {Error}
   */
  addASN1UTF8String(s) {
    this.addASN1(Tag.UTF8String, (b) => {
      b.addBytes((new TextEncoder()).encode(s));
    });
  }

  /**
   * Appends an ASN.1 BIT STRING to the slice.
   * @param {!Uint8Array} bytes The contents, which must be a whole number of
   *     bytes.
   * @throws {Error}
   */
  addASN1BitString(bytes) {
    this.addASN1(Tag.BITSTRING, (b) => {
      b.addU8_(0);  // no superfluous bits in encoding.
      b.addBytes(bytes);
    });
  }

  /**
   * Appends raw data to the slice.
   * @param {string} s The contents to append. All character values must
   *     be < 256.
   * @throws {Error}
   */
  addBytesFromString(s) {
    const buf = new Uint8Array(s.length);
    for (var i = 0; i < s.length; i++) {
      const code = s.charCodeAt(i);
      if (code > 255) {
        throw Error('out-of-range character in string of bytes');
      }
      buf[i] = code;
    }

    this.addBytes(buf);
  }

  /**
   * Appends raw bytes to the slice.
   * @param {!Array<number>|!Uint8Array} bytes Data to append.
   * @throws {Error}
   */
  addBytes(bytes) {
    const offset = this.extend_(bytes.length);
    for (var i = 0; i < bytes.length; i++) {
      this.slice_[offset + i] = bytes[i];
    }
  }
};
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

'use strict';
class Cbor {
  constructor(buffer) {
    this.slice = new Uint8Array(buffer);
  }
  get data() {
    return this.slice;
  }
  get length() {
    return this.slice.length;
  }
  get empty() {
    return this.slice.length == 0;
  }
  get hex() {
    const hexTable = '0123456789abcdef';
    let s = '';
    for (let i = 0; i < this.data.length; i++) {
      s += hexTable.charAt(this.data[i] >> 4);
      s += hexTable.charAt(this.data[i] & 15);
    }
    return s;
  }
  base64Encode(chars, padding) {
    const len3 = 3 * Math.floor(this.slice.length / 3);
    var chunks = [];
    for (let i = 0; i < len3; i += 3) {
      const v =
          (this.slice[i] << 16) + (this.slice[i + 1] << 8) + this.slice[i + 2];
      chunks.push(
          chars[v >> 18] + chars[(v >> 12) & 0x3f] + chars[(v >> 6) & 0x3f] +
          chars[v & 0x3f]);
    }
    const remainder = this.slice.length - len3;
    if (remainder == 1) {
      const v = this.slice[len3];
      chunks.push(chars[v >> 2] + chars[(v << 4) & 0x3f]);
      if (padding == 1 /* Include */) {
        chunks.push('==');
      }
    } else if (remainder == 2) {
      const v = (this.slice[len3] << 8) + this.slice[len3 + 1];
      chunks.push(
          chars[v >> 10] + chars[(v >> 4) & 0x3f] + chars[(v << 2) & 0x3f]);
      if (padding == 1 /* Include */) {
        chunks.push('=');
      }
    }
    return chunks.join('');
  }
  webSafeBase64() {
    const chars =
        'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
    return this.base64Encode(chars, 0 /* None */);
  }
  base64() {
    const chars =
        'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    return this.base64Encode(chars, 1 /* Include */);
  }
  compare(other) {
    if (this.length < other.length) {
      return -1;
    } else if (this.length > other.length) {
      return 1;
    }
    for (let i = 0; i < this.length; i++) {
      if (this.slice[i] < other.slice[i]) {
        return -1;
      } else if (this.slice[i] > other.slice[i]) {
        return 1;
      }
    }
    return 0;
  }
  getU8() {
    if (this.empty) {
      throw('Cbor: empty during getU8');
    }
    const byte = this.slice[0];
    this.slice = this.slice.subarray(1);
    return byte;
  }
  skip(n) {
    if (this.length < n) {
      throw('Cbor: too few bytes to skip');
    }
    this.slice = this.slice.subarray(n);
  }
  getBytes(n) {
    if (this.length < n) {
      throw('Cbor: insufficient bytes in getBytes');
    }
    const ret = this.slice.subarray(0, n);
    this.slice = this.slice.subarray(n);
    return ret;
  }
  getUnsigned(n) {
    const bytes = this.getBytes(n);
    let value = 0;
    for (let i = 0; i < n; i++) {
      value <<= 8;
      value |= bytes[i];
    }
    return value;
  }
  getU16() {
    return this.getUnsigned(2);
  }
  getU32() {
    return this.getUnsigned(4);
  }
  getASN1_(expectedTag, includeHeader) {
    if (this.empty) {
      throw 'getASN1: empty slice, expected tag ' + expectedTag;
    }
    const v = this.getAnyASN1();
    if (v.tag != expectedTag) {
      throw 'getASN1: got tag ' + v.tag + ', want ' + expectedTag;
    }
    if (!includeHeader) {
      v.val.skip(v.headerLen);
    }
    return v.val;
  }
  getASN1(expectedTag) {
    return this.getASN1_(expectedTag, false);
  }
  getASN1Element(expectedTag) {
    return this.getASN1_(expectedTag, true);
  }
  getOptionalASN1(expectedTag) {
    if (this.slice.length < 1 || this.slice[0] != expectedTag) {
      return null;
    }
    return this.getASN1(expectedTag);
  }
  getAnyASN1() {
    const header = new Cbor(this.slice);
    const tag = header.getU8();
    const lengthByte = header.getU8();
    if ((tag & 0x1f) == 0x1f) {
      throw 'getAnyASN1: long-form tag found';
    }
    let len = 0;
    let headerLen = 0;
    if ((lengthByte & 0x80) == 0) {
      // Short form length.
      len = lengthByte + 2;
      headerLen = 2;
    } else {
      // The high bit indicates that this is the long form, while the next 7
      // bits encode the number of subsequent octets used to encode the length
      // (ITU-T X.690 clause 8.1.3.5.b).
      const numBytes = lengthByte & 0x7f;
      // Bitwise operations are always on signed 32-bit two's complement
      // numbers.  This check ensures that we stay under this limit.  We could
      // do this in a better way, but there's no need to process very large
      // objects.
      if (numBytes == 0 || numBytes > 3) {
        throw 'getAnyASN1: bad ASN.1 long-form length';
      }
      const lengthBytes = header.getBytes(numBytes);
      for (let i = 0; i < numBytes; i++) {
        len <<= 8;
        len |= lengthBytes[i];
      }
      if (len < 128 || (len >> ((numBytes - 1) * 8)) == 0) {
        throw 'getAnyASN1: incorrectly encoded ASN.1 length';
      }
      headerLen = 2 + numBytes;
      len += headerLen;
    }
    if (this.slice.length < len) {
      throw 'getAnyASN1: too few bytes in input';
    }
    const prefix = this.slice.subarray(0, len);
    this.slice = this.slice.subarray(len);
    return {tag: tag, headerLen: headerLen, val: new Cbor(prefix)};
  }
  getBase128Int() {
    let lookahead = this.slice.length;
    if (lookahead > 4) {
      lookahead = 4;
    }
    let len = 0;
    for (let i = 0; i < lookahead; i++) {
      if (!(this.slice[i] & 0x80)) {
        len = i + 1;
        break;
      }
    }
    if (len == 0) {
      throw 'base128 value too large';
    }
    let n = 0;
    let octets = this.getBytes(len);
    for (let i = 0; i < len; i++) {
      if ((n & 0xff000000) != 0) {
        throw 'base128 value too large';
      }
      n <<= 7;
      n |= octets[i] & 0x7f;
    }
    return n;
  }
  getASN1ObjectIdentifier() {
    let b = this.getASN1(6 /* OBJECT */);
    let first = b.getBase128Int();
    let result = [0, 0];
    result[1] = first % 40;
    result[0] = (first - result[1]) / 40;
    while (!b.empty) {
      result.push(b.getBase128Int());
    }
    return result;
  }
  getCBORHeader() {
    const copy = new Cbor(this.slice);
    const a = this.getU8();
    const majorType = a >> 5;
    const info = a & 31;
    if (info < 24) {
      return [majorType, info, new Cbor(copy.getBytes(1))];
    } else if (info < 28) {
      const lengthLength = 1 << (info - 24);
      let data = this.getBytes(lengthLength);
      let value = 0;
      for (let i = 0; i < lengthLength; i++) {
        // Javascript has problems handling uint64s given the limited range of
        // a double.
        if (value > 35184372088831) {
          throw('Cbor: cannot represent CBOR number');
        }
        // Not using bitwise operations to avoid truncating to 32 bits.
        value *= 256;
        value += data[i];
      }
      switch (lengthLength) {
        case 1:
          if (value < 24) {
            throw('Cbor: value should have been encoded in single byte');
          }
          break;
        case 2:
          if (value < 256) {
            throw('Cbor: non-minimal integer');
          }
          break;
        case 4:
          if (value < 65536) {
            throw('Cbor: non-minimal integer');
          }
          break;
        case 8:
          if (value < 4294967296) {
            throw('Cbor: non-minimal integer');
          }
          break;
      }
      return [majorType, value, new Cbor(copy.getBytes(1 + lengthLength))];
    } else {
      throw('Cbor: CBOR contains unhandled info value ' + info);
    }
  }
  getCBOR() {
    const [major, value] = this.getCBORHeader();
    switch (major) {
      case 0:
        return value;
      case 1:
        return 0 - (1 + value);
      case 2:
        return this.getBytes(value);
      case 3:
        return this.getBytes(value);
      case 4: {
        let ret = new Array(value);
        for (let i = 0; i < value; i++) {
          ret[i] = this.getCBOR();
        }
        return ret;
      }
      case 5:
        if (value == 0) {
          return {};
        }
        let copy = new Cbor(this.data);
        const [firstKeyMajor] = copy.getCBORHeader();
        if (firstKeyMajor == 3) {
          // String-keyed map.
          let lastKeyHeader = new Cbor(new Uint8Array(0));
          let lastKeyBytes = new Cbor(new Uint8Array(0));
          let ret = {};
          for (let i = 0; i < value; i++) {
            const [keyMajor, keyLength, keyHeader] = this.getCBORHeader();
            if (keyMajor != 3) {
              throw('Cbor: non-string in string-valued map');
            }
            const keyBytes = new Cbor(this.getBytes(keyLength));
            if (i > 0) {
              const headerCmp = lastKeyHeader.compare(keyHeader);
              if (headerCmp > 0 ||
                  (headerCmp == 0 && lastKeyBytes.compare(keyBytes) >= 0)) {
                throw(
                    'Cbor: map keys in wrong order: ' + lastKeyHeader.hex +
                    '/' + lastKeyBytes.hex + ' ' + keyHeader.hex + '/' +
                    keyBytes.hex);
              }
            }
            lastKeyHeader = keyHeader;
            lastKeyBytes = keyBytes;
            ret[keyBytes.parseUTF8()] = this.getCBOR();
          }
          return ret;
        } else if (firstKeyMajor == 0 || firstKeyMajor == 1) {
          // Number-keyed map.
          let lastKeyHeader = new Cbor(new Uint8Array(0));
          let ret = {};
          for (let i = 0; i < value; i++) {
            let [keyMajor, keyValue, keyHeader] = this.getCBORHeader();
            if (keyMajor != 0 && keyMajor != 1) {
              throw('Cbor: non-number in number-valued map');
            }
            if (i > 0 && lastKeyHeader.compare(keyHeader) >= 0) {
              throw(
                  'Cbor: map keys in wrong order: ' + lastKeyHeader.hex + ' ' +
                  keyHeader.hex);
            }
            lastKeyHeader = keyHeader;
            if (keyMajor == 1) {
              keyValue = 0 - (1 + keyValue);
            }
            ret[keyValue] = this.getCBOR();
          }
          return ret;
        } else {
          throw('Cbor: map keyed by invalid major type ' + firstKeyMajor);
        }
      default:
        throw('Cbor: unhandled major type ' + major);
    }
  }
  parseUTF8() {
    return (new TextDecoder('utf-8')).decode(this.slice);
  }
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Handles web page requests for gnubby enrollment.
 */

'use strict';

/**
 * webSafeBase64ToNormal reencodes a base64-encoded string.
 *
 * @param {string} s A string encoded as web-safe base64.
 * @return {string} A string encoded in normal base64.
 */
function webSafeBase64ToNormal(s) {
  return s.replace(/-/g, '+').replace(/_/g, '/');
}

/**
 * decodeWebSafeBase64ToArray decodes a base64-encoded string.
 *
 * @param {string} s A base64-encoded string.
 * @return {!Uint8Array}
 */
function decodeWebSafeBase64ToArray(s) {
  var bytes = atob(webSafeBase64ToNormal(s));
  var buffer = new ArrayBuffer(bytes.length);
  var ret = new Uint8Array(buffer);
  for (var i = 0; i < bytes.length; i++) {
    ret[i] = bytes.charCodeAt(i);
  }
  return ret;
}

// See "FIDO U2F Authenticator Transports Extension", §3.2.1.
const transportTypeOID = [1, 3, 6, 1, 4, 1, 45724, 2, 1, 1];

/**
 * Returns the value of the transport-type X.509 extension from the supplied
 * attestation certificate, or 0.
 *
 * @param {!Uint8Array} der The DER bytes of an attestation certificate.
 * @returns {Uint8Array} the bytes of the transport-type extension, if present,
 *     or null.
 * @throws {Error}
 */
function transportType(der) {
  var topLevel = new ByteString(der);
  const tbsCert = topLevel.getASN1(Tag.SEQUENCE).getASN1(Tag.SEQUENCE);
  tbsCert.getOptionalASN1(
      Tag.CONSTRUCTED | Tag.CONTEXT_SPECIFIC | 0);  // version
  tbsCert.getASN1(Tag.INTEGER);                     // serialNumber
  tbsCert.getASN1(Tag.SEQUENCE);                    // signature algorithm
  tbsCert.getASN1(Tag.SEQUENCE);                    // issuer
  tbsCert.getASN1(Tag.SEQUENCE);                    // validity
  tbsCert.getASN1(Tag.SEQUENCE);                    // subject
  tbsCert.getASN1(Tag.SEQUENCE);                    // SPKI
  tbsCert.getOptionalASN1(                          // issuerUniqueID
      Tag.CONSTRUCTED | Tag.CONTEXT_SPECIFIC | 1);
  tbsCert.getOptionalASN1(  // subjectUniqueID
      Tag.CONSTRUCTED | Tag.CONTEXT_SPECIFIC | 2);
  const outerExtensions =
      tbsCert.getOptionalASN1(Tag.CONSTRUCTED | Tag.CONTEXT_SPECIFIC | 3);
  if (outerExtensions == null) {
    return null;
  }
  const extensions = outerExtensions.getASN1(Tag.SEQUENCE);
  if (extensions.empty) {
    return null;
  }

  while (!extensions.empty) {
    const extension = extensions.getASN1(Tag.SEQUENCE);
    const oid = extension.getASN1ObjectIdentifier();
    if (oid.length != transportTypeOID.length) {
      continue;
    }
    var matches = true;
    for (var i = 0; i < oid.length; i++) {
      if (oid[i] != transportTypeOID[i]) {
        matches = false;
        break;
      }
    }
    if (!matches) {
      continue;
    }

    extension.getOptionalASN1(Tag.BOOLEAN);  // 'critical' flag
    const contents = extension.getASN1(Tag.OCTETSTRING);
    if (!extension.empty) {
      throw Error('trailing garbage after extension');
    }
    return contents.getASN1(Tag.BITSTRING).data;
  }
  return null;
}

/**
 * makeCertAndKey creates a new ECDSA keypair and returns the private key
 * and a cert containing the public key.
 *
 * @param {!Uint8Array=} opt_original The certificate being replaced, as DER
 *     bytes.
 * @return {Promise<{privateKey: !webCrypto.CryptoKey, certDER: !Uint8Array}>}
 */
async function makeCertAndKey(opt_original) {
  var transport = null;
  if (opt_original) {
    transport = transportType(opt_original);
  }

  const keyalg = {name: 'ECDSA', namedCurve: 'P-256'};
  const keypair =
      await crypto.subtle.generateKey(keyalg, true, ['sign', 'verify']);
  const publicKey = await crypto.subtle.exportKey('raw', keypair.publicKey);
  var serialBuffer = new ArrayBuffer(10);
  var serial = new Uint8Array(serialBuffer);
  crypto.getRandomValues(serial);

  const ecdsaWithSHA256 = [1, 2, 840, 10045, 4, 3, 2];
  const ansiX962 = [1, 2, 840, 10045, 2, 1];
  const secp256R1 = [1, 2, 840, 10045, 3, 1, 7];
  const commonName = [2, 5, 4, 3];
  const x509V3 = 2;

  const certBuilder = new ByteBuilder();
  certBuilder.addASN1(Tag.SEQUENCE, (b) => {
    b.addASN1(Tag.SEQUENCE, (b) => {  // TBSCertificate
      b.addASN1(Tag.CONTEXT_SPECIFIC | Tag.CONSTRUCTED | 0, (b) => {
        b.addASN1Int(x509V3);  // Version
      });
      b.addASN1BigInt(serial);          // Serial number
      b.addASN1(Tag.SEQUENCE, (b) => {  // Signature algorithm
        b.addASN1ObjectIdentifier(ecdsaWithSHA256);
      });
      b.addASN1(Tag.SEQUENCE, (b) => {  // Issuer
        b.addASN1(Tag.SET, (b) => {
          b.addASN1(Tag.SEQUENCE, (b) => {
            b.addASN1ObjectIdentifier(commonName);
            b.addASN1PrintableString('U2F Issuer');
          });
        });
      });
      b.addASN1(Tag.SEQUENCE, (b) => {  // Validity
        b.addASN1(Tag.UTCTime, (b) => {
          b.addBytesFromString('0001010000Z');
        });
        b.addASN1(Tag.UTCTime, (b) => {
          b.addBytesFromString('0001010000Z');
        });
      });
      b.addASN1(Tag.SEQUENCE, (b) => {  // Subject
        b.addASN1(Tag.SET, (b) => {
          b.addASN1(Tag.SEQUENCE, (b) => {
            b.addASN1ObjectIdentifier(commonName);
            b.addASN1PrintableString('U2F Device');
          });
        });
      });
      b.addASN1(Tag.SEQUENCE, (b) => {    // Public key
        b.addASN1(Tag.SEQUENCE, (b) => {  // Algorithm identifier
          b.addASN1ObjectIdentifier(ansiX962);
          b.addASN1ObjectIdentifier(secp256R1);
        });
        b.addASN1BitString(new Uint8Array(publicKey));
      });
      if (transport !== null) {
        var t = transport;  // This causes the compiler to see t cannot be null.
        // Extensions
        b.addASN1(Tag.CONTEXT_SPECIFIC | Tag.CONSTRUCTED | 3, (b) => {
          b.addASN1(Tag.SEQUENCE, (b) => {
            b.addASN1(Tag.SEQUENCE, (b) => {  // Transport-type extension.
              b.addASN1ObjectIdentifier(transportTypeOID);
              b.addASN1(Tag.OCTETSTRING, (b) => {
                b.addASN1(Tag.BITSTRING, (b) => {
                  b.addBytes(t);
                });
              });
            });
          });
        });
      }
    });
    b.addASN1(Tag.SEQUENCE, (b) => {  // Algorithm identifier
      b.addASN1ObjectIdentifier(ecdsaWithSHA256);
    });
    b.addASN1(Tag.BITSTRING, (b) => {  // Signature
      // This signature is obviously not correct since it's constant and the
      // rest of the certificate is not. However, since the issuer certificate
      // doesn't exist, there's no way for anyone to check the signature on this
      // certificate and thus this sufficies. However, at least fastmail.com
      // expects to be able to parse out a valid ECDSA signature and so one is
      // provided.
      b.addBytes(new Uint8Array([
        0x00, 0x30, 0x45, 0x02, 0x21, 0x00, 0xc1, 0xa3, 0xa6, 0x8e, 0x2f,
        0x16, 0xa7, 0x21, 0x46, 0x27, 0x05, 0x7f, 0x62, 0xbb, 0x72, 0x8c,
        0x9e, 0x03, 0xe7, 0xa1, 0xba, 0x62, 0xd0, 0x46, 0x52, 0x4e, 0x45,
        0x6d, 0x2c, 0x2f, 0x3f, 0x73, 0x02, 0x20, 0x0b, 0x5f, 0x78, 0xe5,
        0x11, 0xaa, 0x18, 0x12, 0x9f, 0x6f, 0x23, 0x6d, 0x92, 0x13, 0x22,
        0x7d, 0x92, 0xb4, 0xe6, 0x7e, 0xdf, 0x53, 0xe8, 0x16, 0xdf, 0xb0,
        0x5d, 0x9d, 0xc8, 0xb9, 0x0f, 0xde
      ]));
    });
  });
  return {privateKey: keypair.privateKey, certDER: certBuilder.data};
}

/**
 * Registration encodes a registration response success message.  See "FIDO U2F
 * Raw Message Formats" (§4.3).
 */
const Registration = class {
  /**
   * @param {string} registrationData the registration response message,
   *     base64-encoded.
   * @param {string} appId the application identifier.
   * @param {string} challenge the server-generated challenge parameter. This
   *     is only used if opt_clientData is null and, in that case, is expected
   *     to be a webSafeBase64-encoded, 32-byte value.
   * @param {string=} opt_clientData the client data, base64-encoded.
   * @throws {Error}
   */
  constructor(registrationData, appId, challenge, opt_clientData) {
    var data = new ByteString(decodeWebSafeBase64ToArray(registrationData));
    var magic = data.getBytes(1);
    if (magic[0] != 5) {
      throw Error('bad magic number');
    }
    /** @private {!Uint8Array} */
    this.publicKey_ = data.getBytes(65);
    /** @private {!Uint8Array} */
    this.keyHandleLen_ = data.getBytes(1);
    /** @private {!Uint8Array} */
    this.keyHandle_ = data.getBytes(this.keyHandleLen_[0]);
    /** @private {!Uint8Array} */
    this.certificate_ = data.getASN1Element(Tag.SEQUENCE).data;
    /** @private {!Uint8Array} */
    this.signature_ = data.getASN1Element(Tag.SEQUENCE).data;
    if (!data.empty) {
      throw Error('extra trailing bytes');
    }

    var challengeHash;
    if (!opt_clientData) {
      // U2F_V1 - deprecated
      challengeHash = decodeWebSafeBase64ToArray(challenge);
      if (challengeHash.length != 32) {
        throw Error('bad challenge length for U2F_V1');
      }
    } else {
      // U2F_V2
      challengeHash =
          sha256HashOfString(atob(webSafeBase64ToNormal(opt_clientData)));
    }

    /** @private {string} */
    this.challengeHash_ = challengeHash;

    /** @private {string} */
    this.appId_ = appId;
  }

  /** @return {!Uint8Array} the attestation certificate, DER-encoded. */
  get certificate() {
    return this.certificate_;
  }

  /** @return {!Uint8Array} the attestation signature, DER-encoded. */
  get signature() {
    return this.signature_;
  }

  /**
   * toBeSigned marshals the parts of a registration that are signed by the
   * attestation key, however obtained.
   *
   * @return {!Uint8Array} data to be signed.
   */
  toBeSigned() {
    var tbs = new ByteBuilder();
    tbs.addBytesFromString('\0');
    tbs.addBytes(sha256HashOfString(this.appId_));
    tbs.addBytes(this.challengeHash_);
    tbs.addBytes(this.keyHandle_);
    tbs.addBytes(this.publicKey_);
    return tbs.data;
  }

  /**
   * sign signs data from the registration (see toBeSigned()) using the supplied
   * private key.  This is used in |RANDOMIZE| mode.
   *
   * @param {!webCrypto.CryptoKey} key ECDSA P-256 signing key in WebCrypto
   *     format
   * @return {Promise<!Uint8Array>} ASN.1 DER encoded ECDSA signature.
   */
  async sign(key) {
    const algo = {name: 'ECDSA', hash: {name: 'SHA-256'}};
    var signatureBuf = await crypto.subtle.sign(algo, key, this.toBeSigned());
    var signatureRaw = new ByteString(new Uint8Array(signatureBuf));
    var signatureASN1 = new ByteBuilder();
    signatureASN1.addASN1(Tag.SEQUENCE, (b) => {
      // The P-256 signature from WebCrypto is a pair of 32-byte, big-endian
      // values concatenated.
      b.addASN1BigInt(signatureRaw.getBytes(32));
      b.addASN1BigInt(signatureRaw.getBytes(32));
    });
    return signatureASN1.data;
  }

  /**
   * withReplacement marshals the registration (to base64) with the certificate
   * and signature replaced.
   *
   * @param {!Uint8Array} certificate new certificate, as DER.
   * @param {!Uint8Array} signature new signature, as DER.
   * @return {string} The supplied registration data with certificate and
   *     signature replaced, base64.
   */
  withReplacement(certificate, signature) {
    var result = new ByteBuilder();
    result.addBytesFromString('\x05');
    result.addBytes(this.publicKey_);
    result.addBytes(this.keyHandleLen_);
    result.addBytes(this.keyHandle_);
    result.addBytes(certificate);
    result.addBytes(signature);
    return B64_encode(result.data);
  }
};

/**
 * ConveyancePreference describes how to alter (if at all) the attestation
 * certificate in a registration response.
 * @enum
 */
var ConveyancePreference = {
  /**
   * NONE means that the token's attestation certificate should be replaced with
   * a randomly generated one, and that response should be re-signed using a
   * corresponding key.
   */
  NONE: 1,
  /**
   * DIRECT means that the token's attestation cert should be returned unchanged
   * to the relying party.
   */
  DIRECT: 0,
};

/**
 * WebAuthnAttestationConveyancePreference is the
 * AttestationConveyancePreference enum from WebAuthn.
 * @enum{string}
 */
const WebAuthnAttestationConveyancePreference = {
  NONE: 'none',
  INDIRECT: 'indirect',
  DIRECT: 'direct',
  ENTERPRISE: 'enterprise',
};

/**
 * conveyancePreference returns the attestation certificate replacement mode.
 *
 * @param {EnrollChallenge} enrollChallenge
 * @return {ConveyancePreference}
 */
function conveyancePreference(enrollChallenge) {
  if (enrollChallenge.hasOwnProperty('attestation') &&
      (enrollChallenge['attestation'] == 'direct' ||
       enrollChallenge['attestation'] == 'indirect')) {
    return ConveyancePreference.DIRECT;
  }
  return ConveyancePreference.NONE;
}

/**
 * Handles a U2F enroll request.
 * @param {MessageSender} messageSender The message sender.
 * @param {Object} request The web page's enroll request.
 * @param {Function} sendResponse Called back with the result of the enroll.
 * @return {Closeable} A handler object to be closed when the browser channel
 *     closes.
 */
function handleU2fEnrollRequest(messageSender, request, sendResponse) {
  var sentResponse = false;
  var closeable = null;

  function sendErrorResponse(error) {
    var response =
        makeU2fErrorResponse(request, error.errorCode, error.errorMessage);
    sendResponseOnce(sentResponse, closeable, response, sendResponse);
  }

  var sender = createSenderFromMessageSender(messageSender);
  if (!sender) {
    sendErrorResponse({errorCode: ErrorCodes.BAD_REQUEST});
    return null;
  }

  async function getRegistrationData(
      appId, enrollChallenge, registrationData, opt_clientData) {
    var isDirect = true;

    if (conveyancePreference(enrollChallenge) == ConveyancePreference.NONE) {
      isDirect = false;
    } else if (chrome.cryptotokenPrivate != null) {
      isDirect = await (new Promise((resolve, reject) => {
        chrome.cryptotokenPrivate.canAppIdGetAttestation(
            {
              'appId': appId,
              'tabId': messageSender.tab.id,
              'origin': sender.origin,
            },
            resolve);
      }));
    }

    var decodedRegistrationData =
        new ByteString(decodeWebSafeBase64ToArray(registrationData));
    var magicValue = decodedRegistrationData.getBytes(1);
    if (magicValue[0] == 4) {
      // This is a gNubby with obsolete firmware. We can't parse the reply from
      // this device and users need to be guided to reflashing them. Therefore
      // let attestation data pass directly so that can happen on
      // accounts.google.com.
      isDirect = true;
    }

    if (isDirect) {
      return registrationData;
    }

    const reg = new Registration(
        registrationData, appId, enrollChallenge['challenge'], opt_clientData);
    const keypair = await makeCertAndKey(reg.certificate);
    const signature = await reg.sign(keypair.privateKey);
    return reg.withReplacement(keypair.certDER, signature);
  }

  /**
   * @param {string} u2fVersion
   * @param {string} registrationData Registration data, base64
   * @param {string=} opt_clientData Base64.
   */
  function sendSuccessResponse(u2fVersion, registrationData, opt_clientData) {
    var enrollChallenges = request['registerRequests'];
    var enrollChallengeOrNull =
        findEnrollChallengeOfVersion(enrollChallenges, u2fVersion);
    if (!enrollChallengeOrNull) {
      sendErrorResponse({errorCode: ErrorCodes.OTHER_ERROR});
      return;
    }
    var enrollChallenge = enrollChallengeOrNull;  // Avoids compiler warning.
    var appId = request['appId'];
    if (enrollChallenge.hasOwnProperty('appId')) {
      appId = enrollChallenge['appId'];
    }

    getRegistrationData(
        appId, enrollChallenge, registrationData, opt_clientData)
        .then(
            (registrationData) => {
              var responseData = makeEnrollResponseData(
                  enrollChallenge, u2fVersion, registrationData,
                  opt_clientData);
              var response = makeU2fSuccessResponse(request, responseData);
              sendResponseOnce(sentResponse, closeable, response, sendResponse);
            },
            (err) => {
              console.warn(
                  'attestation certificate replacement failed: ' + err);
              sendErrorResponse({errorCode: ErrorCodes.OTHER_ERROR});
            });
  }

  function timeout() {
    sendErrorResponse({errorCode: ErrorCodes.TIMEOUT});
  }

  if (sender.origin.indexOf('http://') == 0 && !HTTP_ORIGINS_ALLOWED) {
    sendErrorResponse({errorCode: ErrorCodes.BAD_REQUEST});
    return null;
  }

  if (!isValidEnrollRequest(request)) {
    sendErrorResponse({errorCode: ErrorCodes.BAD_REQUEST});
    return null;
  }

  var timeoutValueSeconds = getTimeoutValueFromRequest(request);
  // Attenuate watchdog timeout value less than the enroller's timeout, so the
  // watchdog only fires after the enroller could reasonably have called back,
  // not before.
  var watchdogTimeoutValueSeconds = attenuateTimeoutInSeconds(
      timeoutValueSeconds, MINIMUM_TIMEOUT_ATTENUATION_SECONDS / 2);
  var watchdog =
      new WatchdogRequestHandler(watchdogTimeoutValueSeconds, timeout);
  var wrappedErrorCb = watchdog.wrapCallback(sendErrorResponse);
  var wrappedSuccessCb = watchdog.wrapCallback(sendSuccessResponse);
  // TODO: Fix unused; intended to pass wrapped callbacks to Enroller?

  var timer = createAttenuatedTimer(
      FACTORY_REGISTRY.getCountdownFactory(), timeoutValueSeconds);
  var logMsgUrl = request['logMsgUrl'];
  var enroller = new Enroller(
      timer, sender, sendErrorResponse, sendSuccessResponse, logMsgUrl);
  watchdog.setCloseable(/** @type {!Closeable} */ (enroller));
  closeable = watchdog;

  var registerRequests = request['registerRequests'];
  var signRequests = getSignRequestsFromEnrollRequest(request);
  enroller.doEnroll(registerRequests, signRequests, request['appId']);

  return closeable;
}

/**
 * Returns whether the request appears to be a valid enroll request.
 * @param {Object} request The request.
 * @return {boolean} Whether the request appears valid.
 */
function isValidEnrollRequest(request) {
  if (!request.hasOwnProperty('registerRequests')) {
    return false;
  }
  var enrollChallenges = request['registerRequests'];
  if (!enrollChallenges.length) {
    return false;
  }
  var hasAppId = request.hasOwnProperty('appId');
  if (!isValidEnrollChallengeArray(enrollChallenges, !hasAppId)) {
    return false;
  }
  var signChallenges = getSignChallenges(request);
  // A missing sign challenge array is ok, in the case the user is not already
  // enrolled.
  // A challenge value need not necessarily be supplied with every challenge.
  var challengeRequired = false;
  if (signChallenges &&
      !isValidSignChallengeArray(
          signChallenges, challengeRequired, !hasAppId)) {
    return false;
  }
  return true;
}

/**
 * @typedef {{
 *   version: (string|undefined),
 *   challenge: string,
 *   appId: string
 * }}
 */
var EnrollChallenge;

/**
 * @param {Array<EnrollChallenge>} enrollChallenges The enroll challenges to
 *     validate.
 * @param {boolean} appIdRequired Whether the appId property is required on
 *     each challenge.
 * @return {boolean} Whether the given array of challenges is a valid enroll
 *     challenges array.
 */
function isValidEnrollChallengeArray(enrollChallenges, appIdRequired) {
  var seenVersions = {};
  for (var i = 0; i < enrollChallenges.length; i++) {
    var enrollChallenge = enrollChallenges[i];
    var version = enrollChallenge['version'];
    if (!version) {
      // Version is implicitly V1 if not specified.
      version = 'U2F_V1';
    }
    if (version != 'U2F_V1' && version != 'U2F_V2') {
      return false;
    }
    if (seenVersions[version]) {
      // Each version can appear at most once.
      return false;
    }
    seenVersions[version] = version;
    if (appIdRequired && !enrollChallenge['appId']) {
      return false;
    }
    if (!enrollChallenge['challenge']) {
      // The challenge is required.
      return false;
    }
  }
  return true;
}

/**
 * Finds the enroll challenge of the given version in the enroll challenge
 * array.
 * @param {Array<EnrollChallenge>} enrollChallenges The enroll challenges to
 *     search.
 * @param {string} version Version to search for.
 * @return {?EnrollChallenge} The enroll challenge with the given versions, or
 *     null if it isn't found.
 */
function findEnrollChallengeOfVersion(enrollChallenges, version) {
  for (var i = 0; i < enrollChallenges.length; i++) {
    if (enrollChallenges[i]['version'] == version) {
      return enrollChallenges[i];
    }
  }
  return null;
}

/**
 * Makes a responseData object for the enroll request with the given parameters.
 * @param {EnrollChallenge} enrollChallenge The enroll challenge used to
 *     register.
 * @param {string} u2fVersion Version of gnubby that enrolled.
 * @param {string} registrationData The registration data.
 * @param {string=} opt_clientData The client data, if available.
 * @return {Object} The responseData object.
 */
function makeEnrollResponseData(
    enrollChallenge, u2fVersion, registrationData, opt_clientData) {
  var responseData = {};
  responseData['registrationData'] = registrationData;
  // Echo the used challenge back in the reply.
  for (var k in enrollChallenge) {
    responseData[k] = enrollChallenge[k];
  }
  if (u2fVersion == 'U2F_V2') {
    // For U2F_V2, the challenge sent to the gnubby is modified to be the
    // hash of the client data. Include the client data.
    responseData['clientData'] = opt_clientData;
  }
  return responseData;
}

/**
 * Gets the expanded sign challenges from an enroll request, potentially by
 * modifying the request to contain a challenge value where one was omitted.
 * (For enrolling, the server isn't interested in the value of a signature,
 * only whether the presented key handle is already enrolled.)
 * @param {Object} request The request.
 * @return {Array<SignChallenge>}
 */
function getSignRequestsFromEnrollRequest(request) {
  var signChallenges;
  if (request.hasOwnProperty('registeredKeys')) {
    signChallenges = request['registeredKeys'];
  } else {
    signChallenges = request['signRequests'];
  }
  if (signChallenges) {
    for (var i = 0; i < signChallenges.length; i++) {
      // Make sure each sign challenge has a challenge value.
      // The actual value doesn't matter, as long as it's a string.
      if (!signChallenges[i].hasOwnProperty('challenge')) {
        signChallenges[i]['challenge'] = '';
      }
    }
  }
  return signChallenges;
}

/**
 * Creates a new object to track enrolling with a gnubby.
 * @param {!Countdown} timer Timer for enroll request.
 * @param {!WebRequestSender} sender The sender of the request.
 * @param {function(U2fError)} errorCb Called upon enroll failure.
 * @param {function(string, string, (string|undefined))} successCb Called upon
 *     enroll success with the version of the succeeding gnubby, the enroll
 *     data, and optionally the browser data associated with the enrollment.
 * @param {string=} opt_logMsgUrl The url to post log messages to.
 * @constructor
 */
function Enroller(timer, sender, errorCb, successCb, opt_logMsgUrl) {
  /** @private {Countdown} */
  this.timer_ = timer;
  /** @private {WebRequestSender} */
  this.sender_ = sender;
  /** @private {function(U2fError)} */
  this.errorCb_ = errorCb;
  /** @private {function(string, string, (string|undefined))} */
  this.successCb_ = successCb;
  /** @private {string|undefined} */
  this.logMsgUrl_ = opt_logMsgUrl;

  /** @private {boolean} */
  this.done_ = false;

  /** @private {Object<string, string>} */
  this.browserData_ = {};
  /** @private {Array<EnrollHelperChallenge>} */
  this.encodedEnrollChallenges_ = [];
  /** @private {Array<SignHelperChallenge>} */
  this.encodedSignChallenges_ = [];
  // Allow http appIds for http origins. (Broken, but the caller deserves
  // what they get.)
  /** @private {boolean} */
  this.allowHttp_ =
      this.sender_.origin ? this.sender_.origin.indexOf('http://') == 0 : false;
  /** @private {RequestHandler} */
  this.handler_ = null;
}

/**
 * Default timeout value in case the caller never provides a valid timeout.
 */
Enroller.DEFAULT_TIMEOUT_MILLIS = 30 * 1000;

/**
 * Performs an enroll request with the given enroll and sign challenges.
 * @param {Array<EnrollChallenge>} enrollChallenges A set of enroll challenges.
 * @param {Array<SignChallenge>} signChallenges A set of sign challenges for
 *     existing enrollments for this user and appId.
 * @param {string=} opt_appId The app id for the entire request.
 */
Enroller.prototype.doEnroll = function(
    enrollChallenges, signChallenges, opt_appId) {
  /** @private {Array<EnrollChallenge>} */
  this.enrollChallenges_ = enrollChallenges;
  /** @private {Array<SignChallenge>} */
  this.signChallenges_ = signChallenges;
  /** @private {(string|undefined)} */
  this.appId_ = opt_appId;
  var self = this;
  getTabIdWhenPossible(this.sender_)
      .then(
          function() {
            if (self.done_) {
              return;
            }
            self.approveOrigin_();
          },
          function() {
            self.close();
            self.notifyError_({errorCode: ErrorCodes.BAD_REQUEST});
          });
};

/**
 * Ensures the user has approved this origin to use security keys, sending
 * to the request to the handler if/when the user has done so.
 * @private
 */
Enroller.prototype.approveOrigin_ = function() {
  var self = this;
  FACTORY_REGISTRY.getApprovedOrigins()
      .isApprovedOrigin(this.sender_.origin, this.sender_.tabId)
      .then(function(result) {
        if (self.done_) {
          return;
        }
        if (!result) {
          // Origin not approved: rather than give an explicit indication to
          // the web page, let a timeout occur.
          // NOTE: if you are looking at this in a debugger, this line will
          // always be false since the origin of the debugger is different
          // than origin of requesting page
          if (self.timer_.expired()) {
            self.notifyTimeout_();
            return;
          }
          var newTimer = self.timer_.clone(self.notifyTimeout_.bind(self));
          self.timer_.clearTimeout();
          self.timer_ = newTimer;
          return;
        }
        self.sendEnrollRequestToHelper_();
      });
};

/**
 * Notifies the caller of a timeout error.
 * @private
 */
Enroller.prototype.notifyTimeout_ = function() {
  this.notifyError_({errorCode: ErrorCodes.TIMEOUT});
};

/**
 * Performs an enroll request with this instance's enroll and sign challenges,
 * by encoding them into a helper request and passing the resulting request to
 * the factory registry's helper.
 * @private
 */
Enroller.prototype.sendEnrollRequestToHelper_ = function() {
  var encodedEnrollChallenges =
      this.encodeEnrollChallenges_(this.enrollChallenges_, this.appId_);
  // If the request didn't contain a sign challenge, provide one. The value
  // doesn't matter.
  var defaultSignChallenge = '';
  var encodedSignChallenges = encodeSignChallenges(
      this.signChallenges_, defaultSignChallenge, this.appId_);
  var request = {
    type: 'enroll_helper_request',
    enrollChallenges: encodedEnrollChallenges,
    signData: encodedSignChallenges,
    logMsgUrl: this.logMsgUrl_
  };
  if (!this.timer_.expired()) {
    request.timeout = this.timer_.millisecondsUntilExpired() / 1000.0;
    request.timeoutSeconds = this.timer_.millisecondsUntilExpired() / 1000.0;
  }

  // Begin fetching/checking the app ids.
  var enrollAppIds = [];
  if (this.appId_) {
    enrollAppIds.push(this.appId_);
  }
  for (var i = 0; i < this.enrollChallenges_.length; i++) {
    if (this.enrollChallenges_[i].hasOwnProperty('appId')) {
      enrollAppIds.push(this.enrollChallenges_[i]['appId']);
    }
  }
  // Sanity check
  if (!enrollAppIds.length) {
    console.warn(UTIL_fmt('empty enroll app ids?'));
    this.notifyError_({errorCode: ErrorCodes.BAD_REQUEST});
    return;
  }
  var self = this;
  this.checkAppIds_(enrollAppIds, async (result) => {
    if (self.done_) {
      return;
    }

    if (!result) {
      self.notifyError_({errorCode: ErrorCodes.BAD_REQUEST});
      return;
    }

    let v2Challenge;
    for (let index = 0; index < self.enrollChallenges_.length; index++) {
      if (self.enrollChallenges_[index]['version'] === 'U2F_V2') {
        v2Challenge = self.enrollChallenges_[index];
      }
    }

    if (v2Challenge['challenge'] === undefined) {
      console.warn('Did not find U2F_V2 challenge');
      this.notifyError_({errorCode: ErrorCodes.BAD_REQUEST});
      return;
    }

    console.log('Proxying registration request to WebAuthn');
    this.doRegisterWebAuthn_(enrollAppIds[0], v2Challenge, request);
  });
};

const googleCorpAppId =
    'https://www.gstatic.com/securitykey/a/google.com/origins.json';

/**
 * Proxies the registration request over the WebAuthn API.
 * @private
 */
Enroller.prototype.doRegisterWebAuthn_ = function(appId, challenge, request) {
  const encodedChallenge = challenge['challenge'];

  if (appId == googleCorpAppId) {
    this.doRegisterWebAuthnContinue_(
        appId, encodedChallenge, request,
        WebAuthnAttestationConveyancePreference.ENTERPRISE);
    return;
  }

  const attestationPreference =
      conveyancePreference(challenge) == ConveyancePreference.DIRECT ?
      WebAuthnAttestationConveyancePreference.DIRECT :
      WebAuthnAttestationConveyancePreference.NONE;

  if (!chrome.cryptotokenPrivate) {
    this.doRegisterWebAuthnContinue_(
        appId, encodedChallenge, request, attestationPreference);
    return;
  }

  chrome.cryptotokenPrivate.isAppIdHashInEnterpriseContext(
      decodeWebSafeBase64ToArray(B64_encode(sha256HashOfString(appId))),
      (enterprise_context) => {
        this.doRegisterWebAuthnContinue_(
            appId, encodedChallenge, request,
            enterprise_context ?
                WebAuthnAttestationConveyancePreference.ENTERPRISE :
                attestationPreference);
      });
};

Enroller.prototype.doRegisterWebAuthnContinue_ = function(
    appId, challenge, request, attestationMode) {
  // Set a random ID.
  const randomId = new Uint8Array(new ArrayBuffer(16));
  crypto.getRandomValues(randomId);

  const decodedChallenge = B64_decode(challenge);
  if (decodedChallenge.length == 0) {
    this.notifyError_({
      errorCode: ErrorCodes.BAD_REQUEST,
      errorMessage: 'challenge must be base64url encoded',
    });
    return;
  }

  const excludeList = [];
  for (let index = 0; index < request['signData'].length; index++) {
    const element = request['signData'][index];
    const decodedKeyHandle = B64_decode(element['keyHandle']);
    if (decodedKeyHandle.length == 0) {
      this.notifyError_({
        errorCode: ErrorCodes.BAD_REQUEST,
        errorMessage: 'keyHandle must be base64url encoded',
      });
      return;
    }
    excludeList.push({
      type: 'public-key',
      id: new Uint8Array(decodedKeyHandle).buffer,
      transports: ['usb'],
    });
  }

  // Request enterprise attestation for the gstatic corp App ID and domains
  // whitelisted via enterprise policy. Otherwise request 'direct' attestation
  // (which might later get stripped).
  const options = {
    publicKey: {
      rp: {
        id: appId,
        name: this.sender_.origin,
      },
      user: {
        id: randomId.buffer,
        displayName: this.sender_.origin,
        name: this.sender_.origin,
      },
      challenge: new Uint8Array(decodedChallenge).buffer,
      pubKeyCredParams: [{
        type: 'public-key',
        alg: -7,  // ES-256
      }],
      timeout: this.timer_.millisecondsUntilExpired(),
      excludeCredentials: excludeList,
      authenticatorSelection: {
        authenticatorAttachment: 'cross-platform',
        requireResidentKey: false,
        userVerification: 'discouraged',
      },
      attestation: attestationMode,
    },
  };
  navigator.credentials.create(options)
      .then(response => {
        this.onWebAuthnSuccess_(response, appId);
      })
      .catch(exception => {
        this.onWebAuthnError_(exception);
      });
};

/**
 * Handles a successful credential response from WebAuthn's make credential
 * request.
 * @private
 */
Enroller.prototype.onWebAuthnSuccess_ =
    async function(publicKeyCredential, appId) {
  const clientData =
      new Uint8Array(publicKeyCredential['response']['clientDataJSON']);
  const browserData = B64_encode(Array.from(clientData));
  const u2fResponseData = await this.parseU2fResponseFromAttestationObject_(
      publicKeyCredential['response']['attestationObject'], appId, browserData);
  this.notifySuccess_('U2F_V2', u2fResponseData, browserData);
};

/**
 * Parses the attestation object received from a WebAuthn make credential call
 * and converts it into a U2F response message formatted into Base64.
 * @private
 */
Enroller.prototype.parseU2fResponseFromAttestationObject_ =
    async function(attestationObject, appId, clientData) {
  // The first byte of the registration response is always 0x5.
  let u2fResponse = [0x5];

  // Parse the attestation object from CBOR into a JavaScript object.
  const attestationObjectCbor = new Cbor(attestationObject).getCBOR();
  // Authenticator data must be at least 120 bytes in length.
  // https://www.w3.org/TR/webauthn/#fig-attStructs
  if (!attestationObjectCbor['authData'] ||
      attestationObjectCbor['authData'].length < 120) {
    console.warn('Received invalid authenticator response');
    this.notifyError_({
      errorCode: ErrorCodes.OTHER_ERROR,
      errorMessage: 'Invalid response message',
    });
    return;
  }

  const authData = attestationObjectCbor['authData'];
  // Attested credential data starts after a 32 byte RP ID hash, a 1 byte flag,
  // and a 4 byte counter value.
  // https://www.w3.org/TR/webauthn/#sctn-attestation
  const attestedCredentialData = authData.slice(37, authData.length);
  let index = 16;
  let credentialIdLength = (attestedCredentialData[index++] & 0xFF) << 8;
  credentialIdLength |= (attestedCredentialData[index++] & 0xFF);
  const credentialId =
      attestedCredentialData.slice(index, index + credentialIdLength);

  index += credentialIdLength;
  const encodedPublicKey =
      attestedCredentialData.slice(index, attestedCredentialData.length);
  // Parse public key and format it in X509 format [0x4, 32-byte X, 32-byte Y].
  const coseKey = new Cbor(encodedPublicKey).getCBOR();
  const publicKeyArray = ([0x4].concat(Array.from(coseKey['-2'])))
                             .concat(Array.from(coseKey['-3']));

  // Concatenate U2F registration response from the public key, key handle
  // length, key handle, attestatation certificate, and signature.
  u2fResponse = u2fResponse.concat(publicKeyArray);
  u2fResponse.push(credentialIdLength);
  u2fResponse = u2fResponse.concat(Array.from(credentialId));

  const fmt = attestationObjectCbor['fmt'];
  const attStatement = attestationObjectCbor['attStmt'];
  let x5c;
  let signature;
  switch (new TextDecoder('utf-8').decode(fmt)) {
    case 'fido-u2f':
      x5c = attStatement['x5c'][0];
      signature = attStatement['sig'];
      break;
    case 'none':
      // Append empty x509 cert and signature to the registration message.
      const emptySequence = new Uint8Array([0x30, 0]);  // empty ASN.1 SEQUENCE.
      const registrationData =
          B64_encode(u2fResponse.concat(Array.from(emptySequence))
                         .concat(Array.from(emptySequence)));
      const reg = new Registration(registrationData, appId, null, clientData);
      const keypair = await makeCertAndKey();
      signature = await reg.sign(keypair.privateKey);
      x5c = keypair.certDER;
      break;
    default:
      console.warn('Received unsupported non-U2F attestation');
      this.notifyError_({
        errorCode: ErrorCodes.OTHER_ERROR,
        errorMessage: 'Invalid response message',
      });
      return;
  }
  u2fResponse = u2fResponse.concat(Array.from(x5c));
  u2fResponse = u2fResponse.concat(Array.from(signature));

  return B64_encode(u2fResponse);
};

/**
 * Handles DOMExceptions returned as errors from the WebAuthn make credential
 * call. Converts exceptions into U2F compatible exceptions.
 * @param {*} exception Exception returned from the WebAuthn request.
 * @private
 */
Enroller.prototype.onWebAuthnError_ = function(exception) {
  const domError = /** @type {!DOMException} */ (exception);
  let errorCode = ErrorCodes.OTHER_ERROR;
  let errorDetails;

  if (domError && domError.name) {
    switch (domError.name) {
      case 'NotAllowedError':
        errorCode = ErrorCodes.TIMEOUT;
        break;
      case 'InvalidStateError':
        errorCode = ErrorCodes.DEVICE_INELIGIBLE;
        break;
      default:
        // Fall through
        break;
    }
  }

  this.notifyError_({
    errorCode: errorCode,
    errorMessage: domError.toString(),
  });
};

/**
 * Encodes the enroll challenge as an enroll helper challenge.
 * @param {EnrollChallenge} enrollChallenge The enroll challenge to encode.
 * @param {string=} opt_appId The app id for the entire request.
 * @return {EnrollHelperChallenge} The encoded challenge.
 * @private
 */
Enroller.encodeEnrollChallenge_ = function(enrollChallenge, opt_appId) {
  var encodedChallenge = {};
  var version;
  if (enrollChallenge['version']) {
    version = enrollChallenge['version'];
  } else {
    // Version is implicitly V1 if not specified.
    version = 'U2F_V1';
  }
  encodedChallenge['version'] = version;
  encodedChallenge['challengeHash'] = enrollChallenge['challenge'];
  var appId;
  if (enrollChallenge['appId']) {
    appId = enrollChallenge['appId'];
  } else {
    appId = opt_appId;
  }
  if (!appId) {
    // Sanity check. (Other code should fail if it's not set.)
    console.warn(UTIL_fmt('No appId?'));
  }
  encodedChallenge['appIdHash'] = B64_encode(sha256HashOfString(appId));
  return /** @type {EnrollHelperChallenge} */ (encodedChallenge);
};

/**
 * Encodes the given enroll challenges using this enroller's state.
 * @param {Array<EnrollChallenge>} enrollChallenges The enroll challenges.
 * @param {string=} opt_appId The app id for the entire request.
 * @return {!Array<EnrollHelperChallenge>} The encoded enroll challenges.
 * @private
 */
Enroller.prototype.encodeEnrollChallenges_ = function(
    enrollChallenges, opt_appId) {
  var challenges = [];
  for (var i = 0; i < enrollChallenges.length; i++) {
    var enrollChallenge = enrollChallenges[i];
    var version = enrollChallenge.version;
    if (!version) {
      // Version is implicitly V1 if not specified.
      version = 'U2F_V1';
    }

    if (version == 'U2F_V2') {
      var modifiedChallenge = {};
      for (var k in enrollChallenge) {
        modifiedChallenge[k] = enrollChallenge[k];
      }
      // V2 enroll responses contain signatures over a browser data object,
      // which we're constructing here. The browser data object contains, among
      // other things, the server challenge.
      var serverChallenge = enrollChallenge['challenge'];
      var browserData =
          makeEnrollBrowserData(serverChallenge, this.sender_.origin);
      // Replace the challenge with the hash of the browser data.
      modifiedChallenge['challenge'] =
          B64_encode(sha256HashOfString(browserData));
      this.browserData_[version] = B64_encode(UTIL_StringToBytes(browserData));
      challenges.push(Enroller.encodeEnrollChallenge_(
          /** @type {EnrollChallenge} */ (modifiedChallenge), opt_appId));
    } else {
      challenges.push(
          Enroller.encodeEnrollChallenge_(enrollChallenge, opt_appId));
    }
  }
  return challenges;
};

/**
 * Checks the app ids associated with this enroll request, and calls a callback
 * with the result of the check.
 * @param {!Array<string>} enrollAppIds The app ids in the enroll challenge
 *     portion of the enroll request.
 * @param {function(boolean)} cb Called with the result of the check.
 * @private
 */
Enroller.prototype.checkAppIds_ = function(enrollAppIds, cb) {
  var appIds =
      UTIL_unionArrays(enrollAppIds, getDistinctAppIds(this.signChallenges_));
  FACTORY_REGISTRY.getOriginChecker()
      .canClaimAppIds(this.sender_.origin, appIds)
      .then(this.originChecked_.bind(this, appIds, cb));
};

/**
 * Called with the result of checking the origin. When the origin is allowed
 * to claim the app ids, begins checking whether the app ids also list the
 * origin.
 * @param {!Array<string>} appIds The app ids.
 * @param {function(boolean)} cb Called with the result of the check.
 * @param {boolean} result Whether the origin could claim the app ids.
 * @private
 */
Enroller.prototype.originChecked_ = function(appIds, cb, result) {
  if (!result) {
    this.notifyError_({errorCode: ErrorCodes.BAD_REQUEST});
    return;
  }
  var appIdChecker = FACTORY_REGISTRY.getAppIdCheckerFactory().create();
  appIdChecker
      .checkAppIds(
          this.timer_.clone(), this.sender_.origin, appIds, this.allowHttp_,
          this.logMsgUrl_)
      .then(cb);
};

/** Closes this enroller. */
Enroller.prototype.close = function() {
  if (this.handler_) {
    this.handler_.close();
    this.handler_ = null;
  }
  this.done_ = true;
};

/**
 * Notifies the caller with the error.
 * @param {U2fError} error Error.
 * @private
 */
Enroller.prototype.notifyError_ = function(error) {
  if (this.done_) {
    return;
  }
  this.close();
  this.done_ = true;
  this.errorCb_(error);
};

/**
 * Notifies the caller of success with the provided response data.
 * @param {string} u2fVersion Protocol version
 * @param {string} info Response data
 * @param {string=} opt_browserData Browser data used
 * @private
 */
Enroller.prototype.notifySuccess_ = function(
    u2fVersion, info, opt_browserData) {
  if (this.done_) {
    return;
  }
  this.close();
  this.done_ = true;
  this.successCb_(u2fVersion, info, opt_browserData);
};

/**
 * Called by the helper upon completion.
 * @param {EnrollHelperReply} reply The result of the enroll request.
 * @private
 */
Enroller.prototype.helperComplete_ = function(reply) {
  if (reply.code) {
    var reportedError = mapDeviceStatusCodeToU2fError(reply.code);
    console.log(UTIL_fmt(
        'helper reported ' + reply.code.toString(16) + ', returning ' +
        reportedError.errorCode));
    // Log non-expected reply codes if we have url to send them.
    if (reportedError.errorCode == ErrorCodes.OTHER_ERROR) {
      var logMsg = 'log=u2fenroll&rc=' + reply.code.toString(16);
      if (this.logMsgUrl_) {
        logMessage(logMsg, this.logMsgUrl_);
      }
    }
    this.notifyError_(reportedError);
  } else {
    console.log(UTIL_fmt('Gnubby enrollment succeeded!!!!!'));
    var browserData;

    if (reply.version == 'U2F_V2') {
      // For U2F_V2, the challenge sent to the gnubby is modified to be the hash
      // of the browser data. Include the browser data.
      browserData = this.browserData_[reply.version];
    }

    this.notifySuccess_(
        /** @type {string} */ (reply.version),
        /** @type {string} */ (reply.enrollData), browserData);
  }
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Queue of pending requests from an origin.
 *
 */
'use strict';

/**
 * Represents a queued request. Once given a token, call complete() once the
 * request is processed (or dropped.)
 * @interface
 */
function QueuedRequestToken() {}

/** Completes (or cancels) this queued request. */
QueuedRequestToken.prototype.complete = function() {};

/**
 * @param {!RequestQueue} queue The queue for this request.
 * @param {number} id An id for this request.
 * @param {function(QueuedRequestToken)} beginCb Called when work may begin on
 *     this request.
 * @param {RequestToken} opt_prev Previous request in the same queue.
 * @param {RequestToken} opt_next Next request in the same queue.
 * @constructor
 * @implements {QueuedRequestToken}
 */
function RequestToken(queue, id, beginCb, opt_prev, opt_next) {
  /** @private {!RequestQueue} */
  this.queue_ = queue;
  /** @private {number} */
  this.id_ = id;
  /** @private {boolean} */
  this.begun_ = false;
  /** @private {function(QueuedRequestToken)} */
  this.beginCb_ = beginCb;
  /** @type {RequestToken} */
  this.prev = null;
  /** @type {RequestToken} */
  this.next = null;
  /** @private {boolean} */
  this.completed_ = false;
}

/** Begins work on this queued request. */
RequestToken.prototype.begin = function() {
  this.begun_ = true;
  this.beginCb_(this);
};

/** @return {boolean} Whether this token has already begun. */
RequestToken.prototype.begun = function() {
  return this.begun_;
};

/** Completes (or cancels) this queued request. */
RequestToken.prototype.complete = function() {
  if (this.completed_) {
    // Either the caller called us more than once, or the timer is firing.
    // Either way, nothing more to do here.
    return;
  }
  this.completed_ = true;
  this.queue_.complete(this);
};

/** @return {boolean} Whether this token has already completed. */
RequestToken.prototype.completed = function() {
  return this.completed_;
};

/** @return {number} This token's id. */
RequestToken.prototype.id = function() {
  return this.id_;
};


/**
 * @param {!SystemTimer} sysTimer A system timer implementation.
 * @constructor
 */
function RequestQueue(sysTimer) {
  /** @private {!SystemTimer} */
  this.sysTimer_ = sysTimer;
  /** @private {RequestToken} */
  this.head_ = null;
  /** @private {RequestToken} */
  this.tail_ = null;
  /** @private {number} */
  this.id_ = 0;
}

/**
 * Inserts this token into the queue.
 * @param {RequestToken} token Queue token
 * @private
 */
RequestQueue.prototype.insertToken_ = function(token) {
  console.log(UTIL_fmt('token ' + this.id_ + ' inserted'));
  if (this.head_ === null) {
    this.head_ = token;
    this.tail_ = token;
  } else {
    if (!this.tail_) {
      throw 'Non-empty list missing tail';
    }
    this.tail_.next = token;
    token.prev = this.tail_;
    this.tail_ = token;
  }
};

/**
 * Removes this token from the queue.
 * @param {RequestToken} token Queue token
 * @return {RequestToken?} The next token in the queue to run, if any.
 * @private
 */
RequestQueue.prototype.removeToken_ = function(token) {
  var nextTokenToRun = null;
  // If this token has been begun, find the next token to run.
  if (token.begun()) {
    // Find the first token in the queue which has not yet been begun, and which
    // is not the token being removed.
    for (var nextToken = this.head_; nextToken; nextToken = nextToken.next) {
      if (nextToken !== token && !nextToken.begun()) {
        nextTokenToRun = nextToken;
        break;
      }
    }
  }

  // Remove this token from the queue
  if (token.next) {
    token.next.prev = token.prev;
  }
  if (token.prev) {
    token.prev.next = token.next;
  }

  // Update head and tail of queue.
  if (this.head_ === token && this.tail_ === token) {
    this.head_ = this.tail_ = null;
  } else {
    if (this.head_ === token) {
      this.head_ = token.next;
      this.head_.prev = null;
    }
    if (this.tail_ === token) {
      this.tail_ = token.prev;
      this.tail_.next = null;
    }
  }

  // Isolate this token to prevent it from manipulating the queue, e.g. if
  // complete() is called a second time with it.
  token.prev = token.next = null;

  return nextTokenToRun;
};

/**
 * Completes this token's request, and begins the next queued request, if one
 * exists.
 * @param {RequestToken} token Queue token
 */
RequestQueue.prototype.complete = function(token) {
  var next = this.removeToken_(token);
  if (next) {
    console.log(
        UTIL_fmt('token ' + token.id() + ' completed, starting ' + next.id()));
    next.begin();
  } else if (this.empty()) {
    console.log(UTIL_fmt('token ' + token.id() + ' completed, queue empty'));
  } else {
    console.log(UTIL_fmt(
        'token ' + token.id() + ' completed (earlier token still running)'));
  }
};

/** @return {boolean} Whether this queue is empty. */
RequestQueue.prototype.empty = function() {
  return this.head_ === null;
};

/**
 * Queues this request, and, if it's the first request, begins work on it.
 * @param {function(QueuedRequestToken)} beginCb Called when work begins on this
 *     request.
 * @param {Countdown} timer Countdown timer
 * @return {QueuedRequestToken} A token for the request.
 */
RequestQueue.prototype.queueRequest = function(beginCb, timer) {
  var startNow = this.empty();
  var token = new RequestToken(this, ++this.id_, beginCb);
  // Clone the timer to set a callback on it, which will ensure complete() is
  // eventually called, even if the caller never gets around to it.
  timer.clone(token.complete.bind(token));
  this.insertToken_(token);
  if (startNow) {
    this.sysTimer_.setTimeout(function() {
      if (!token.completed()) {
        token.begin();
      }
    }, 0);
  }
  return token;
};

/**
 * @param {!SystemTimer} sysTimer A system timer implementation.
 * @constructor
 */
function OriginKeyedRequestQueue(sysTimer) {
  /** @private {!SystemTimer} */
  this.sysTimer_ = sysTimer;
  /** @private {Object<string, !RequestQueue>} */
  this.requests_ = {};
}

/**
 * Queues this request, and, if it's the first request, begins work on it.
 * @param {string} appId Application Id
 * @param {string} origin Request origin
 * @param {function(QueuedRequestToken)} beginCb Called when work begins on this
 *     request.
 * @param {Countdown} timer Countdown timer
 * @return {QueuedRequestToken} A token for the request.
 */
OriginKeyedRequestQueue.prototype.queueRequest = function(
    appId, origin, beginCb, timer) {
  var key = appId + ' ' + origin;
  if (!this.requests_.hasOwnProperty(key)) {
    this.requests_[key] = new RequestQueue(this.sysTimer_);
  }
  var queue = this.requests_[key];
  return queue.queueRequest(beginCb, timer);
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Handles web page requests for gnubby sign requests.
 *
 */

'use strict';

var gnubbySignRequestQueue;

/**
 * Initialize request queue.
 */
function initRequestQueue() {
  gnubbySignRequestQueue =
      new OriginKeyedRequestQueue(FACTORY_REGISTRY.getSystemTimer());
}

/**
 * Handles a U2F sign request.
 * @param {MessageSender} messageSender The message sender.
 * @param {Object} request The web page's sign request.
 * @param {Function} sendResponse Called back with the result of the sign.
 * @return {Closeable} Request handler that should be closed when the browser
 *     message channel is closed.
 */
function handleU2fSignRequest(messageSender, request, sendResponse) {
  var sentResponse = false;
  var queuedSignRequest;

  function sendErrorResponse(error) {
    sendResponseOnce(
        sentResponse, queuedSignRequest,
        makeU2fErrorResponse(request, error.errorCode, error.errorMessage),
        sendResponse);
  }

  function sendSuccessResponse(challenge, info, browserData) {
    var responseData = makeU2fSignResponseDataFromChallenge(challenge);
    addSignatureAndBrowserDataToResponseData(
        responseData, info, browserData, 'clientData');
    var response = makeU2fSuccessResponse(request, responseData);
    sendResponseOnce(sentResponse, queuedSignRequest, response, sendResponse);
  }

  var sender = createSenderFromMessageSender(messageSender);
  if (!sender) {
    sendErrorResponse({errorCode: ErrorCodes.BAD_REQUEST});
    return null;
  }
  if (sender.origin.indexOf('http://') == 0 && !HTTP_ORIGINS_ALLOWED) {
    sendErrorResponse({errorCode: ErrorCodes.BAD_REQUEST});
    return null;
  }

  queuedSignRequest = validateAndEnqueueSignRequest(
      sender, request, sendErrorResponse, sendSuccessResponse);
  return queuedSignRequest;
}

/**
 * Creates a base U2F responseData object from the server challenge.
 * @param {SignChallenge} challenge The server challenge.
 * @return {Object} The responseData object.
 */
function makeU2fSignResponseDataFromChallenge(challenge) {
  var responseData = {'keyHandle': challenge['keyHandle']};
  return responseData;
}

/**
 * Adds the browser data and signature values to a responseData object.
 * @param {Object} responseData The "base" responseData object.
 * @param {string} signatureData The signature data.
 * @param {string} browserData The browser data generated from the challenge.
 * @param {string} browserDataName The name of the browser data key in the
 *     responseData object.
 */
function addSignatureAndBrowserDataToResponseData(
    responseData, signatureData, browserData, browserDataName) {
  responseData[browserDataName] = B64_encode(UTIL_StringToBytes(browserData));
  responseData['signatureData'] = signatureData;
}

/**
 * Validates a sign request using the given sign challenges name, and, if valid,
 * enqueues the sign request for eventual processing.
 * @param {WebRequestSender} sender The sender of the message.
 * @param {Object} request The web page's sign request.
 * @param {function(U2fError)} errorCb Error callback.
 * @param {function(SignChallenge, string, string)} successCb Success callback.
 * @return {Closeable} Request handler that should be closed when the browser
 *     message channel is closed.
 */
function validateAndEnqueueSignRequest(sender, request, errorCb, successCb) {
  function timeout() {
    errorCb({errorCode: ErrorCodes.TIMEOUT});
  }

  if (!isValidSignRequest(request)) {
    errorCb({errorCode: ErrorCodes.BAD_REQUEST});
    return null;
  }

  // The typecast is necessary because getSignChallenges can return undefined.
  // On the other hand, a valid sign request can't contain an undefined sign
  // challenge list, so the typecast is safe.
  var signChallenges =
      /** @type {!Array<SignChallenge>} */ (getSignChallenges(request));
  var appId;
  if (request['appId']) {
    appId = request['appId'];
  } else if (signChallenges.length) {
    appId = signChallenges[0]['appId'];
  }
  // Sanity check
  if (!appId) {
    console.warn(UTIL_fmt('empty sign appId?'));
    errorCb({errorCode: ErrorCodes.BAD_REQUEST});
    return null;
  }
  var timeoutValueSeconds = getTimeoutValueFromRequest(request);
  // Attenuate watchdog timeout value less than the signer's timeout, so the
  // watchdog only fires after the signer could reasonably have called back,
  // not before.
  timeoutValueSeconds = attenuateTimeoutInSeconds(
      timeoutValueSeconds, MINIMUM_TIMEOUT_ATTENUATION_SECONDS / 2);
  var watchdog = new WatchdogRequestHandler(timeoutValueSeconds, timeout);
  var wrappedErrorCb = watchdog.wrapCallback(errorCb);
  var wrappedSuccessCb = watchdog.wrapCallback(successCb);

  var timer = createAttenuatedTimer(
      FACTORY_REGISTRY.getCountdownFactory(), timeoutValueSeconds);
  var logMsgUrl = request['logMsgUrl'];

  // Queue sign requests from the same origin, to protect against simultaneous
  // sign-out on many tabs resulting in repeated sign-in requests.
  var queuedSignRequest = new QueuedSignRequest(
      signChallenges, timer, sender, wrappedErrorCb, wrappedSuccessCb,
      request['challenge'], appId, logMsgUrl);
  if (!gnubbySignRequestQueue) {
    initRequestQueue();
  }
  var requestToken = gnubbySignRequestQueue.queueRequest(
      appId, sender.origin, queuedSignRequest.begin.bind(queuedSignRequest),
      timer);
  queuedSignRequest.setToken(requestToken);

  watchdog.setCloseable(queuedSignRequest);
  return watchdog;
}

/**
 * Returns whether the request appears to be a valid sign request.
 * @param {Object} request The request.
 * @return {boolean} Whether the request appears valid.
 */
function isValidSignRequest(request) {
  var signChallenges = getSignChallenges(request);
  if (!signChallenges) {
    return false;
  }
  var hasDefaultChallenge = request.hasOwnProperty('challenge');
  var hasAppId = request.hasOwnProperty('appId');
  // If the sign challenge array is empty, the global appId is required.
  if (!hasAppId && (!signChallenges || !signChallenges.length)) {
    return false;
  }
  return isValidSignChallengeArray(
      signChallenges, !hasDefaultChallenge, !hasAppId);
}

/**
 * Adapter class representing a queued sign request.
 * @param {!Array<SignChallenge>} signChallenges The sign challenges.
 * @param {Countdown} timer Timeout timer
 * @param {WebRequestSender} sender Message sender.
 * @param {function(U2fError)} errorCb Error callback
 * @param {function(SignChallenge, string, string)} successCb Success callback
 * @param {string=} opt_defaultChallenge A default sign challenge
 *     value, if a request does not provide one.
 * @param {string=} opt_appId The app id for the entire request.
 * @param {string=} opt_logMsgUrl Url to post log messages to
 * @constructor
 * @implements {Closeable}
 */
function QueuedSignRequest(
    signChallenges, timer, sender, errorCb, successCb, opt_defaultChallenge,
    opt_appId, opt_logMsgUrl) {
  /** @private {!Array<SignChallenge>} */
  this.signChallenges_ = signChallenges;
  /** @private {Countdown} */
  this.timer_ = timer.clone(this.close.bind(this));
  /** @private {WebRequestSender} */
  this.sender_ = sender;
  /** @private {function(U2fError)} */
  this.errorCb_ = errorCb;
  /** @private {function(SignChallenge, string, string)} */
  this.successCb_ = successCb;
  /** @private {string|undefined} */
  this.defaultChallenge_ = opt_defaultChallenge;
  /** @private {string|undefined} */
  this.appId_ = opt_appId;
  /** @private {string|undefined} */
  this.logMsgUrl_ = opt_logMsgUrl;
  /** @private {boolean} */
  this.begun_ = false;
  /** @private {boolean} */
  this.closed_ = false;
}

/** Closes this sign request. */
QueuedSignRequest.prototype.close = function() {
  if (this.closed_) {
    return;
  }
  var hadBegunSigning = false;
  if (this.begun_ && this.signer_) {
    this.signer_.close();
    hadBegunSigning = true;
  }
  if (this.token_) {
    if (hadBegunSigning) {
      console.log(UTIL_fmt('closing in-progress request'));
    } else {
      console.log(UTIL_fmt('closing timed-out request before processing'));
    }
    this.token_.complete();
  }
  this.closed_ = true;
};

/**
 * @param {QueuedRequestToken} token Token for this sign request.
 */
QueuedSignRequest.prototype.setToken = function(token) {
  /** @private {QueuedRequestToken} */
  this.token_ = token;
};

/**
 * Called when this sign request may begin work.
 * @param {QueuedRequestToken} token Token for this sign request.
 */
QueuedSignRequest.prototype.begin = function(token) {
  if (this.timer_.expired()) {
    console.log(UTIL_fmt('Queued request begun after timeout'));
    this.close();
    this.errorCb_({errorCode: ErrorCodes.TIMEOUT});
    return;
  }
  this.begun_ = true;
  this.setToken(token);
  this.signer_ = new Signer(
      this.timer_, this.sender_, this.signerFailed_.bind(this),
      this.signerSucceeded_.bind(this), this.logMsgUrl_);
  if (!this.signer_.setChallenges(
          this.signChallenges_, this.defaultChallenge_, this.appId_)) {
    token.complete();
    this.errorCb_({errorCode: ErrorCodes.BAD_REQUEST});
  }
  // Signer now has responsibility for maintaining timeout.
  this.timer_.clearTimeout();
};

/**
 * Called when this request's signer fails.
 * @param {U2fError} error The failure reported by the signer.
 * @private
 */
QueuedSignRequest.prototype.signerFailed_ = function(error) {
  this.token_.complete();
  this.errorCb_(error);
};

/**
 * Called when this request's signer succeeds.
 * @param {SignChallenge} challenge The challenge that was signed.
 * @param {string} info The sign result.
 * @param {string} browserData Browser data JSON
 * @private
 */
QueuedSignRequest.prototype.signerSucceeded_ = function(
    challenge, info, browserData) {
  this.token_.complete();
  this.successCb_(challenge, info, browserData);
};

/**
 * Creates an object to track signing with a gnubby.
 * @param {Countdown} timer Timer for sign request.
 * @param {WebRequestSender} sender The message sender.
 * @param {function(U2fError)} errorCb Called when the sign operation fails.
 * @param {function(SignChallenge, string, string)} successCb Called when the
 *     sign operation succeeds.
 * @param {string=} opt_logMsgUrl The url to post log messages to.
 * @constructor
 */
function Signer(timer, sender, errorCb, successCb, opt_logMsgUrl) {
  /** @private {Countdown} */
  this.timer_ = timer.clone();
  /** @private {WebRequestSender} */
  this.sender_ = sender;
  /** @private {function(U2fError)} */
  this.errorCb_ = errorCb;
  /** @private {function(SignChallenge, string, string)} */
  this.successCb_ = successCb;
  /** @private {string|undefined} */
  this.logMsgUrl_ = opt_logMsgUrl;

  /** @private {boolean} */
  this.challengesSet_ = false;
  /** @private {boolean} */
  this.done_ = false;

  /** @private {Object<string, string>} */
  this.browserData_ = {};
  /** @private {Object<string, SignChallenge>} */
  this.serverChallenges_ = {};
  // Allow http appIds for http origins. (Broken, but the caller deserves
  // what they get.)
  /** @private {boolean} */
  this.allowHttp_ =
      this.sender_.origin ? this.sender_.origin.indexOf('http://') == 0 : false;
  /** @private {RequestHandler} */
  this.handler_ = null;
}

/**
 * Sets the challenges to be signed.
 * @param {Array<SignChallenge>} signChallenges The challenges to set.
 * @param {string=} opt_defaultChallenge A default sign challenge
 *     value, if a request does not provide one.
 * @param {string=} opt_appId The app id for the entire request.
 * @return {boolean} Whether the challenges could be set.
 */
Signer.prototype.setChallenges = function(
    signChallenges, opt_defaultChallenge, opt_appId) {
  if (this.challengesSet_ || this.done_) {
    return false;
  }
  if (this.timer_.expired()) {
    this.notifyError_({errorCode: ErrorCodes.TIMEOUT});
    return true;
  }
  /** @private {Array<SignChallenge>} */
  this.signChallenges_ = signChallenges;
  /** @private {string|undefined} */
  this.defaultChallenge_ = opt_defaultChallenge;
  /** @private {string|undefined} */
  this.appId_ = opt_appId;
  /** @private {boolean} */
  this.challengesSet_ = true;

  this.checkAppIds_();
  return true;
};

/**
 * Checks the app ids of incoming requests.
 * @private
 */
Signer.prototype.checkAppIds_ = function() {
  var appIds = getDistinctAppIds(this.signChallenges_);
  if (this.appId_) {
    appIds = UTIL_unionArrays([this.appId_], appIds);
  }
  if (!appIds || !appIds.length) {
    var error = {
      errorCode: ErrorCodes.BAD_REQUEST,
      errorMessage: 'missing appId'
    };
    this.notifyError_(error);
    return;
  }
  FACTORY_REGISTRY.getOriginChecker()
      .canClaimAppIds(this.sender_.origin, appIds)
      .then(this.originChecked_.bind(this, appIds));
};

/**
 * Called with the result of checking the origin. When the origin is allowed
 * to claim the app ids, begins checking whether the app ids also list the
 * origin.
 * @param {!Array<string>} appIds The app ids.
 * @param {boolean} result Whether the origin could claim the app ids.
 * @private
 */
Signer.prototype.originChecked_ = function(appIds, result) {
  if (!result) {
    var error = {errorCode: ErrorCodes.BAD_REQUEST, errorMessage: 'bad appId'};
    this.notifyError_(error);
    return;
  }
  var appIdChecker = FACTORY_REGISTRY.getAppIdCheckerFactory().create();
  appIdChecker
      .checkAppIds(
          this.timer_.clone(), this.sender_.origin,
          /** @type {!Array<string>} */ (appIds), this.allowHttp_,
          this.logMsgUrl_)
      .then(this.appIdChecked_.bind(this));
};

/**
 * Called with the result of checking app ids.  When the app ids are valid,
 * adds the sign challenges to those being signed.
 * @param {boolean} result Whether the app ids are valid.
 * @private
 */
Signer.prototype.appIdChecked_ = function(result) {
  if (!result) {
    var error = {errorCode: ErrorCodes.BAD_REQUEST, errorMessage: 'bad appId'};
    this.notifyError_(error);
    return;
  }
  if (!this.doSign_()) {
    this.notifyError_({errorCode: ErrorCodes.BAD_REQUEST});
    return;
  }
};

/**
 * Begins signing this signer's challenges.
 * @return {boolean} Whether the challenge could be added.
 * @private
 */
Signer.prototype.doSign_ = async function() {
  // Create the browser data for each challenge.
  let challengeVal;
  for (var i = 0; i < this.signChallenges_.length; i++) {
    var challenge = this.signChallenges_[i];
    var serverChallenge;
    if (challenge.hasOwnProperty('challenge')) {
      serverChallenge = challenge['challenge'];
    } else {
      serverChallenge = this.defaultChallenge_;
    }
    challengeVal = serverChallenge;
    if (!serverChallenge) {
      console.warn(UTIL_fmt('challenge missing'));
      return false;
    }
    var keyHandle = challenge['keyHandle'];

    var browserData = makeSignBrowserData(serverChallenge, this.sender_.origin);
    this.browserData_[keyHandle] = browserData;
    this.serverChallenges_[keyHandle] = challenge;
  }

  var encodedChallenges = encodeSignChallenges(
      this.signChallenges_, this.defaultChallenge_, this.appId_,
      this.getChallengeHash_.bind(this));

  var timeoutSeconds = this.timer_.millisecondsUntilExpired() / 1000.0;

  console.log('Proxying sign request to WebAuthn');
  return this.doSignWebAuthn_(encodedChallenges, challengeVal);
};

/**
 * Sends the sign request via the WebAuthn API.
 * @param {!Array<SignHelperChallenge>} encodedChallenges Credential list
 *     provided by the relying party to be signed.
 * @param {string} challengeVal Base64 encoded challenge.
 * @return {boolean} If the message was sent.
 * @private
 */
Signer.prototype.doSignWebAuthn_ = function(encodedChallenges, challengeVal) {
  // Only try to sign if challenges were provided.
  if (encodedChallenges.length === 0) {
    return false;
  }

  const decodedChallenge = B64_decode(challengeVal);
  if (decodedChallenge.length == 0) {
    this.notifyError_({
      errorCode: ErrorCodes.BAD_REQUEST,
      errorMessage: 'challenge must be base64url encoded',
    });
    return false;
  }

  const credentialList = [];
  for (let i = 0; i < encodedChallenges.length; i++) {
    const decodedKeyHandle = B64_decode(encodedChallenges[i]['keyHandle']);
    if (decodedKeyHandle.length == 0) {
      this.notifyError_({
        errorCode: ErrorCodes.BAD_REQUEST,
        errorMessage: 'keyHandle must be base64url encoded',
      });
      return false;
    }
    credentialList.push({
      type: 'public-key',
      id: new Uint8Array(decodedKeyHandle).buffer,
    });
  }
  // App ID could be defined for each challenge or globally.
  const appid = this.signChallenges_[0].hasOwnProperty('appId') ?
      this.signChallenges_[0]['appId'] :
      this.appId_;

  const request = {
    publicKey: {
      challenge: new Uint8Array(decodedChallenge).buffer,
      timeout: this.timer_.millisecondsUntilExpired(),
      rpId: this.sender_.origin,
      allowCredentials: credentialList,
      userVerification: 'discouraged',
      extensions: {
        appid: appid,
      },
    },
  };
  navigator.credentials.get(request)
      .then(response => {
        this.handleWebAuthnSuccess_(response);
      })
      .catch(exception => {
        this.handleWebAuthnError_(exception);
      });

  return true;
};

/**
 * Converts the WebAuthn error code to a U2F error code.
 * @param {*} exception Exception returned from the WebAuthn request.
 * @private
 */
Signer.prototype.handleWebAuthnError_ = function(exception) {
  const domError = /** @type {!DOMException} */ (exception);
  let errorCode = ErrorCodes.OTHER_ERROR;
  let errorDetails;

  if (domError && domError.name) {
    switch (domError.name) {
      case 'NotAllowedError':
      case 'InvalidStateError':
        errorCode = ErrorCodes.DEVICE_INELIGIBLE;
        break;
      default:
        // Fall through
        break;
    }
  }

  this.notifyError_({
    errorCode: errorCode,
    errorMessage: domError.toString(),
  });
};

/**
 * Converts the WebAuthn response to the response for cryptotoken.
 * @param {?PublicKeyCredential} assertion Assertion object received from
 *     credential request.
 * @private
 */
Signer.prototype.handleWebAuthnSuccess_ = function(assertion) {
  // Find the challenge to which this assertion corresponds.
  const assertionKeyHandle = assertion['id'];
  let signChallenge;
  for (let i = 0; i < this.signChallenges_.length; i++) {
    if (this.signChallenges_[i]['keyHandle'] === assertionKeyHandle) {
      signChallenge = this.signChallenges_[i];
      break;
    }
  }

  if (signChallenge === undefined) {
    console.warn('Response received from unknown key');
    this.notifyError_({
      errorCode: ErrorCodes.DEVICE_INELIGIBLE,
      errorMessage: 'Response received from unknown key',
    });
    return;
  }

  // First 32 bytes of authenticator data is the rpIdHash.
  let index = 32;
  const authenticatorDataBytes =
      new Uint8Array(assertion['response']['authenticatorData']);
  if (authenticatorDataBytes.length < index + 4) {
    // Invalid response length.
    this.notifyError_({
      errorCode: ErrorCodes.OTHER_ERROR,
      errorMessage: 'Invalid response message',
    });
    return;
  }

  const flags = [authenticatorDataBytes[index++] & 0x3];
  const counter = Array.from(authenticatorDataBytes.slice(index, index + 4));
  const signature =
      Array.from(new Uint8Array(assertion['response']['signature']));

  // Combine the flags byte with the counter and signature to recreate the U2F
  // authentication response message.
  const signResponse = flags.concat(counter).concat(signature);

  // Decode the ArrayBuffer view of the clientDataJSON into a string.
  const clientDataJSON = new TextDecoder('utf-8').decode(
      new Uint8Array(assertion['response']['clientDataJSON']));

  this.notifySuccess_(signChallenge, B64_encode(signResponse), clientDataJSON);
};

/**
 * @param {string} keyHandle The key handle used with the challenge.
 * @param {string} challenge The challenge.
 * @return {string} The hashed challenge associated with the key
 *     handle/challenge pair.
 * @private
 */
Signer.prototype.getChallengeHash_ = function(keyHandle, challenge) {
  return B64_encode(sha256HashOfString(this.browserData_[keyHandle]));
};

/** Closes this signer. */
Signer.prototype.close = function() {
  this.close_();
};

/**
 * Closes this signer, and optionally notifies the caller of error.
 * @param {boolean=} opt_notifying When true, this method is being called in the
 *     process of notifying the caller of an existing status. When false,
 *     the caller is notified with a default error value, ErrorCodes.TIMEOUT.
 * @private
 */
Signer.prototype.close_ = function(opt_notifying) {
  if (this.handler_) {
    this.handler_.close();
    this.handler_ = null;
  }
  this.timer_.clearTimeout();
  if (!opt_notifying) {
    this.notifyError_({errorCode: ErrorCodes.TIMEOUT});
  }
};

/**
 * Notifies the caller of error.
 * @param {U2fError} error Error.
 * @private
 */
Signer.prototype.notifyError_ = function(error) {
  if (this.done_) {
    return;
  }
  this.done_ = true;
  this.close_(true);
  this.errorCb_(error);
};

/**
 * Notifies the caller of success.
 * @param {SignChallenge} challenge The challenge that was signed.
 * @param {string} info The sign result.
 * @param {string} browserData Browser data JSON
 * @private
 */
Signer.prototype.notifySuccess_ = function(challenge, info, browserData) {
  if (this.done_) {
    return;
  }
  this.done_ = true;
  this.close_(true);
  this.successCb_(challenge, info, browserData);
};

/**
 * Called by the helper upon completion.
 * @param {HelperReply} helperReply The result of the sign request.
 * @param {string=} opt_source The source of the sign result.
 * @private
 */
Signer.prototype.helperComplete_ = function(helperReply, opt_source) {
  if (helperReply.type != 'sign_helper_reply') {
    this.notifyError_({errorCode: ErrorCodes.OTHER_ERROR});
    return;
  }
  var reply = /** @type {SignHelperReply} */ (helperReply);

  if (reply.code) {
    var reportedError = mapDeviceStatusCodeToU2fError(reply.code);
    console.log(UTIL_fmt(
        'helper reported ' + reply.code.toString(16) + ', returning ' +
        reportedError.errorCode));
    // Log non-expected reply codes if we have an url to send them
    if ((reportedError.errorCode == ErrorCodes.OTHER_ERROR) &&
        this.logMsgUrl_) {
      logMessage('log=u2fsign&rc=' + reply.code.toString(16), this.logMsgUrl_);
    }
    this.notifyError_(reportedError);
  } else {
    if (this.logMsgUrl_ && opt_source) {
      var logMsg = 'signed&source=' + opt_source;
      logMessage(logMsg, this.logMsgUrl_);
    }

    var key = reply.responseData['keyHandle'];
    var browserData = this.browserData_[key];
    // Notify with server-provided challenge, not the encoded one: the
    // server-provided challenge contains additional fields it relies on.
    var serverChallenge = this.serverChallenges_[key];
    this.notifySuccess_(
        serverChallenge, reply.responseData.signatureData, browserData);
  }
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Does common handling for requests coming from web pages and
 * routes them to the provided handler.
 */

/**
 * FIDO U2F Javascript API Version
 * @const
 * @type {number}
 */
var JS_API_VERSION = 1.1;

/**
 * Gets the scheme + origin from a web url.
 * @param {string} url Input url
 * @return {?string} Scheme and origin part if url parses
 */
function getOriginFromUrl(url) {
  var re = new RegExp('^(https?://)[^/]*/?');
  var originarray = re.exec(url);
  if (originarray == null) {
    return originarray;
  }
  var origin = originarray[0];
  while (origin.charAt(origin.length - 1) == '/') {
    origin = origin.substring(0, origin.length - 1);
  }
  if (origin == 'http:' || origin == 'https:') {
    return null;
  }
  return origin;
}

/**
 * Returns whether the registered key appears to be valid.
 * @param {Object} registeredKey The registered key object.
 * @param {boolean} appIdRequired Whether the appId property is required on
 *     each challenge.
 * @return {boolean} Whether the object appears valid.
 */
function isValidRegisteredKey(registeredKey, appIdRequired) {
  if (appIdRequired && !registeredKey.hasOwnProperty('appId')) {
    return false;
  }
  if (!registeredKey.hasOwnProperty('keyHandle')) {
    return false;
  }
  if (registeredKey['version']) {
    if (registeredKey['version'] != 'U2F_V1' &&
        registeredKey['version'] != 'U2F_V2') {
      return false;
    }
  }
  return true;
}

/**
 * Returns whether the array of registered keys appears to be valid.
 * @param {Array<Object>} registeredKeys The array of registered keys.
 * @param {boolean} appIdRequired Whether the appId property is required on
 *     each challenge.
 * @return {boolean} Whether the array appears valid.
 */
function isValidRegisteredKeyArray(registeredKeys, appIdRequired) {
  return registeredKeys.every(function(key) {
    return isValidRegisteredKey(key, appIdRequired);
  });
}

/**
 * Gets the sign challenges from the request. The sign challenges may be the
 * U2F 1.0 variant, signRequests, or the U2F 1.1 version, registeredKeys.
 * @param {Object} request The request.
 * @return {!Array<SignChallenge>|undefined} The sign challenges, if found.
 */
function getSignChallenges(request) {
  if (!request) {
    return undefined;
  }
  var signChallenges;
  if (request.hasOwnProperty('signRequests')) {
    signChallenges = request['signRequests'];
  } else if (request.hasOwnProperty('registeredKeys')) {
    signChallenges = request['registeredKeys'];
  }
  return signChallenges;
}

/**
 * Returns whether the array of SignChallenges appears to be valid.
 * @param {Array<SignChallenge>} signChallenges The array of sign challenges.
 * @param {boolean} challengeValueRequired Whether each challenge object
 *     requires a challenge value.
 * @param {boolean} appIdRequired Whether the appId property is required on
 *     each challenge.
 * @return {boolean} Whether the array appears valid.
 */
function isValidSignChallengeArray(
    signChallenges, challengeValueRequired, appIdRequired) {
  for (var i = 0; i < signChallenges.length; i++) {
    var incomingChallenge = signChallenges[i];
    if (challengeValueRequired &&
        !incomingChallenge.hasOwnProperty('challenge')) {
      return false;
    }
    if (!isValidRegisteredKey(incomingChallenge, appIdRequired)) {
      return false;
    }
  }
  return true;
}

/**
 * @param {Object} request Request object
 * @param {MessageSender} sender Sender frame
 * @param {Function} sendResponse Response callback
 * @return {?Closeable} Optional handler object that should be closed when port
 *     closes
 */
function handleWebPageRequest(request, sender, sendResponse) {
  switch (request.type) {
    case MessageTypes.U2F_REGISTER_REQUEST:
      return handleU2fEnrollRequest(sender, request, sendResponse);

    case MessageTypes.U2F_SIGN_REQUEST:
      return handleU2fSignRequest(sender, request, sendResponse);

    case MessageTypes.U2F_GET_API_VERSION_REQUEST:
      sendResponse(makeU2fGetApiVersionResponse(
          request, JS_API_VERSION, MessageTypes.U2F_GET_API_VERSION_RESPONSE));
      return null;

    default:
      sendResponse(makeU2fErrorResponse(
          request, ErrorCodes.BAD_REQUEST, undefined,
          MessageTypes.U2F_REGISTER_RESPONSE));
      return null;
  }
}

/**
 * Makes a response to a request.
 * @param {Object} request The request to make a response to.
 * @param {string} responseSuffix How to name the response's type.
 * @param {string=} opt_defaultType The default response type, if none is
 *     present in the request.
 * @return {Object} The response object.
 */
function makeResponseForRequest(request, responseSuffix, opt_defaultType) {
  var type;
  if (request && request.type) {
    type = request.type.replace(/_request$/, responseSuffix);
  } else {
    type = opt_defaultType;
  }
  var reply = {'type': type};
  if (request && request.requestId) {
    reply.requestId = request.requestId;
  }
  return reply;
}

/**
 * Makes a response to a U2F request with an error code.
 * @param {Object} request The request to make a response to.
 * @param {ErrorCodes} code The error code to return.
 * @param {string=} opt_detail An error detail string.
 * @param {string=} opt_defaultType The default response type, if none is
 *     present in the request.
 * @return {Object} The U2F error.
 */
function makeU2fErrorResponse(request, code, opt_detail, opt_defaultType) {
  var reply = makeResponseForRequest(request, '_response', opt_defaultType);
  var error = {'errorCode': code};
  if (opt_detail) {
    error['errorMessage'] = opt_detail;
  }
  reply['responseData'] = error;
  return reply;
}

/**
 * Makes a success response to a web request with a responseData object.
 * @param {Object} request The request to make a response to.
 * @param {Object} responseData The response data.
 * @return {Object} The web error.
 */
function makeU2fSuccessResponse(request, responseData) {
  var reply = makeResponseForRequest(request, '_response');
  reply['responseData'] = responseData;
  return reply;
}

/**
 * Maps a helper's error code from the DeviceStatusCodes namespace to a
 * U2fError.
 * @param {number} code Error code from DeviceStatusCodes namespace.
 * @return {U2fError} An error.
 */
function mapDeviceStatusCodeToU2fError(code) {
  switch (code) {
    case DeviceStatusCodes.WRONG_DATA_STATUS:
      return {errorCode: ErrorCodes.DEVICE_INELIGIBLE};

    case DeviceStatusCodes.TIMEOUT_STATUS:
    case DeviceStatusCodes.WAIT_TOUCH_STATUS:
      return {errorCode: ErrorCodes.TIMEOUT};

    default:
      var reportedError = {
        errorCode: ErrorCodes.OTHER_ERROR,
        errorMessage: 'device status code: ' + code.toString(16)
      };
      return reportedError;
  }
}

/**
 * Sends a response, using the given sentinel to ensure at most one response is
 * sent. Also closes the closeable, if it's given.
 * @param {boolean} sentResponse Whether a response has already been sent.
 * @param {?Closeable} closeable A thing to close.
 * @param {*} response The response to send.
 * @param {Function} sendResponse A function to send the response.
 */
function sendResponseOnce(sentResponse, closeable, response, sendResponse) {
  if (closeable) {
    closeable.close();
  }
  if (!sentResponse) {
    sentResponse = true;
    try {
      // If the page has gone away or the connection has otherwise gone,
      // sendResponse fails.
      sendResponse(response);
    } catch (exception) {
      console.warn('sendResponse failed: ' + exception);
    }
  } else {
    console.warn(UTIL_fmt('Tried to reply more than once!'));
  }
}

/**
 * @param {!string} string Input string
 * @return {!Array<number>} SHA256 hash value of string.
 */
function sha256HashOfString(string) {
  var s = new SHA256();
  s.update(UTIL_StringToBytes(string));
  return s.digest();
}

var UNUSED_CID_PUBKEY_VALUE = 'unused';

/**
 * Creates a browser data object with the given values.
 * @param {!string} type A string representing the "type" of this browser data
 *     object.
 * @param {!string} serverChallenge The server's challenge, as a base64-
 *     encoded string.
 * @param {!string} origin The server's origin, as seen by the browser.
 * @return {string} A string representation of the browser data object.
 */
function makeBrowserData(type, serverChallenge, origin) {
  var browserData = {
    'typ': type,
    'challenge': serverChallenge,
    'origin': origin
  };
  return JSON.stringify(browserData);
}

/**
 * Creates a browser data object for an enroll request with the given values.
 * @param {!string} serverChallenge The server's challenge, as a base64-
 *     encoded string.
 * @param {!string} origin The server's origin, as seen by the browser.
 * @return {string} A string representation of the browser data object.
 */
function makeEnrollBrowserData(serverChallenge, origin) {
  return makeBrowserData(
      'navigator.id.finishEnrollment', serverChallenge, origin);
}

/**
 * Creates a browser data object for a sign request with the given values.
 * @param {!string} serverChallenge The server's challenge, as a base64-
 *     encoded string.
 * @param {!string} origin The server's origin, as seen by the browser.
 * @return {string} A string representation of the browser data object.
 */
function makeSignBrowserData(serverChallenge, origin) {
  return makeBrowserData('navigator.id.getAssertion', serverChallenge, origin);
}

/**
 * Makes a response to a U2F request with an error code.
 * @param {Object} request The request to make a response to.
 * @param {number=} version The JS API version to return.
 * @param {string=} opt_defaultType The default response type, if none is
 *     present in the request.
 * @return {Object} The GetJsApiVersionResponse.
 */
function makeU2fGetApiVersionResponse(request, version, opt_defaultType) {
  var reply = makeResponseForRequest(request, '_response', opt_defaultType);
  var data = {'js_api_version': version};
  reply['responseData'] = data;
  return reply;
}

/**
 * Encodes the sign data as an array of sign helper challenges.
 * @param {Array<SignChallenge>} signChallenges The sign challenges to encode.
 * @param {string|undefined} opt_defaultChallenge A default sign challenge
 *     value, if a request does not provide one.
 * @param {string=} opt_defaultAppId The app id to use for each challenge, if
 *     the challenge contains none.
 * @param {function(string, string): string=} opt_challengeHashFunction
 *     A function that produces, from a key handle and a raw challenge, a hash
 *     of the raw challenge. If none is provided, a default hash function is
 *     used.
 * @return {!Array<SignHelperChallenge>} The sign challenges, encoded.
 */
function encodeSignChallenges(
    signChallenges, opt_defaultChallenge, opt_defaultAppId,
    opt_challengeHashFunction) {
  function encodedSha256(keyHandle, challenge) {
    return B64_encode(sha256HashOfString(challenge));
  }
  var challengeHashFn = opt_challengeHashFunction || encodedSha256;
  var encodedSignChallenges = [];
  if (signChallenges) {
    for (var i = 0; i < signChallenges.length; i++) {
      var challenge = signChallenges[i];
      var keyHandle = challenge['keyHandle'];
      var challengeValue;
      if (challenge.hasOwnProperty('challenge')) {
        challengeValue = challenge['challenge'];
      } else {
        challengeValue = opt_defaultChallenge;
      }
      var challengeHash = challengeHashFn(keyHandle, challengeValue);
      var appId;
      if (challenge.hasOwnProperty('appId')) {
        appId = challenge['appId'];
      } else {
        appId = opt_defaultAppId;
      }
      var encodedChallenge = {
        'challengeHash': challengeHash,
        'appIdHash': B64_encode(sha256HashOfString(appId)),
        'keyHandle': keyHandle,
        'version': (challenge['version'] || 'U2F_V1')
      };
      encodedSignChallenges.push(encodedChallenge);
    }
  }
  return encodedSignChallenges;
}

/**
 * Makes a sign helper request from an array of challenges.
 * @param {Array<SignHelperChallenge>} challenges The sign challenges.
 * @param {number=} opt_timeoutSeconds Timeout value.
 * @param {string=} opt_logMsgUrl URL to log to.
 * @return {SignHelperRequest} The sign helper request.
 */
function makeSignHelperRequest(challenges, opt_timeoutSeconds, opt_logMsgUrl) {
  var request = {
    'type': 'sign_helper_request',
    'signData': challenges,
    'timeout': opt_timeoutSeconds || 0,
    'timeoutSeconds': opt_timeoutSeconds || 0
  };
  if (opt_logMsgUrl !== undefined) {
    request.logMsgUrl = opt_logMsgUrl;
  }
  return request;
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Implements a check whether an app id lists an origin.
 */
'use strict';

/**
 * Parses the text as JSON and returns it as an array of strings.
 * @param {string} text Input JSON
 * @return {!Array<string>} Array of origins
 */
function getOriginsFromJson(text) {
  try {
    var urls, i;
    var appIdData = JSON.parse(text);
    var trustedFacets = appIdData['trustedFacets'];
    if (trustedFacets) {
      var versionBlock;
      for (i = 0; versionBlock = trustedFacets[i]; i++) {
        if (versionBlock['version'] && versionBlock['version']['major'] == 1 &&
            versionBlock['version']['minor'] == 0) {
          urls = versionBlock['ids'];
          break;
        }
      }
    }
    if (typeof urls == 'undefined') {
      throw Error('Could not find trustedFacets for version 1.0');
    }
    var origins = {};
    var url;
    for (i = 0; url = urls[i]; i++) {
      var origin = getOriginFromUrl(url);
      if (origin) {
        origins[origin] = origin;
      }
    }
    return Object.keys(origins);
  } catch (e) {
    console.error(UTIL_fmt('could not parse ' + text));
    return [];
  }
}

/**
 * Retrieves a set of distinct app ids from the sign challenges.
 * @param {Array<SignChallenge>=} signChallenges Input sign challenges.
 * @return {Array<string>} array of distinct app ids.
 */
function getDistinctAppIds(signChallenges) {
  if (!signChallenges) {
    return [];
  }
  var appIds = {};
  for (var i = 0, request; request = signChallenges[i]; i++) {
    var appId = request['appId'];
    if (appId) {
      appIds[appId] = appId;
    }
  }
  return Object.keys(appIds);
}

/**
 * An object that checks one or more appIds' contents against an origin.
 * @interface
 */
function AppIdChecker() {}

/**
 * Checks whether the given origin is allowed by all of the given appIds.
 * @param {!Countdown} timer A timer by which to resolve all provided app ids.
 * @param {string} origin The origin to check.
 * @param {!Array<string>} appIds The app ids to check.
 * @param {boolean} allowHttp Whether to allow http:// URLs.
 * @param {string=} opt_logMsgUrl A log message URL.
 * @return {Promise<boolean>} A promise for the result of the check
 */
AppIdChecker.prototype.checkAppIds = function(
    timer, origin, appIds, allowHttp, opt_logMsgUrl) {};

/**
 * An interface to create an AppIdChecker.
 * @interface
 */
function AppIdCheckerFactory() {}

/**
 * @return {!AppIdChecker} A new AppIdChecker.
 */
AppIdCheckerFactory.prototype.create = function() {};

/**
 * Provides an object to track checking a list of appIds.
 * @param {!TextFetcher} fetcher A URL fetcher.
 * @constructor
 * @implements AppIdChecker
 */
function XhrAppIdChecker(fetcher) {
  /** @private {!TextFetcher} */
  this.fetcher_ = fetcher;
}

/**
 * Checks whether all the app ids provided can be asserted by the given origin.
 * @param {!Countdown} timer A timer by which to resolve all provided app ids.
 * @param {string} origin The origin to check.
 * @param {!Array<string>} appIds The app ids to check.
 * @param {boolean} allowHttp Whether to allow http:// URLs.
 * @param {string=} opt_logMsgUrl A log message URL.
 * @return {Promise<boolean>} A promise for the result of the check
 */
XhrAppIdChecker.prototype.checkAppIds = function(
    timer, origin, appIds, allowHttp, opt_logMsgUrl) {
  if (this.timer_) {
    // Can't use the same object to check appIds more than once.
    return Promise.resolve(false);
  }

  /** @private {!Countdown} */
  this.timer_ = timer;
  /** @private {string} */
  this.origin_ = origin;
  var appIdsMap = {};
  if (appIds) {
    for (var i = 0; i < appIds.length; i++) {
      appIdsMap[appIds[i]] = appIds[i];
    }
  }
  /** @private {Array<string>} */
  this.distinctAppIds_ = Object.keys(appIdsMap);
  /** @private {boolean} */
  this.allowHttp_ = allowHttp;
  /** @private {string|undefined} */
  this.logMsgUrl_ = opt_logMsgUrl;
  if (!this.distinctAppIds_.length) {
    return Promise.resolve(false);
  }

  if (this.allAppIdsEqualOrigin_()) {
    // Trivially allowed.
    return Promise.resolve(true);
  } else {
    var self = this;
    // Begin checking remaining app ids.
    var appIdChecks = self.distinctAppIds_.map(self.checkAppId_.bind(self));
    return Promise.all(appIdChecks).then(function(results) {
      return results.every(function(result) {
        return result;
      });
    });
  }
};

/**
 * Checks if a single appId can be asserted by the given origin.
 * @param {string} appId The appId to check
 * @return {Promise<boolean>} A promise for the result of the check
 * @private
 */
XhrAppIdChecker.prototype.checkAppId_ = function(appId) {
  if (appId == this.origin_) {
    // Trivially allowed
    return Promise.resolve(true);
  }
  var p = this.fetchAllowedOriginsForAppId_(appId);
  var self = this;
  return p.then(function(allowedOrigins) {
    if (allowedOrigins.indexOf(self.origin_) == -1) {
      console.warn(UTIL_fmt(
          'Origin ' + self.origin_ + ' not allowed by app id ' + appId));
      return false;
    }
    return true;
  });
};

/**
 * @return {boolean} Whether all the app ids being checked are equal to the
 * calling origin.
 * @private
 */
XhrAppIdChecker.prototype.allAppIdsEqualOrigin_ = function() {
  var self = this;
  return this.distinctAppIds_.every(function(appId) {
    return appId == self.origin_;
  });
};

/**
 * Fetches the allowed origins for an appId.
 * @param {string} appId Application id
 * @return {Promise<!Array<string>>} A promise for a list of allowed origins
 *     for appId
 * @private
 */
XhrAppIdChecker.prototype.fetchAllowedOriginsForAppId_ = function(appId) {
  if (!appId) {
    return Promise.resolve([]);
  }

  if (appId.indexOf('http://') == 0 && !this.allowHttp_) {
    console.log(UTIL_fmt('http app ids disallowed, ' + appId + ' requested'));
    return Promise.resolve([]);
  }

  var origin = getOriginFromUrl(appId);
  if (!origin) {
    return Promise.resolve([]);
  }

  var p = this.fetcher_.fetch(appId);
  var self = this;
  return p.then(getOriginsFromJson, function(rc_) {
    var rc = /** @type {number} */ (rc_);
    console.log(UTIL_fmt('fetching ' + appId + ' failed: ' + rc));
    if (!(rc >= 400 && rc < 500) && !self.timer_.expired()) {
      // Retry
      return self.fetchAllowedOriginsForAppId_(appId);
    }
    return [];
  });
};

/**
 * A factory to create an XhrAppIdChecker.
 * @implements AppIdCheckerFactory
 * @param {!TextFetcher} fetcher
 * @constructor
 */
function XhrAppIdCheckerFactory(fetcher) {
  /** @private {!TextFetcher} */
  this.fetcher_ = fetcher;
}

/**
 * @return {!AppIdChecker} A new AppIdChecker.
 */
XhrAppIdCheckerFactory.prototype.create = function() {
  return new XhrAppIdChecker(this.fetcher_);
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Implements a simple XmlHttpRequest-based text document
 * fetcher.
 *
 */
'use strict';

/**
 * A fetcher of text files.
 * @interface
 */
function TextFetcher() {}

/**
 * @param {string} url The URL to fetch.
 * @param {string?} opt_method The HTTP method to use (default GET)
 * @param {string?} opt_body The request body
 * @return {!Promise<string>} A promise for the fetched text. In case of an
 *     error, this promise is rejected with an HTTP status code.
 */
TextFetcher.prototype.fetch = function(url, opt_method, opt_body) {};

/**
 * @constructor
 * @implements {TextFetcher}
 */
function XhrTextFetcher() {}

/**
 * @param {string} url The URL to fetch.
 * @param {string?} opt_method The HTTP method to use (default GET)
 * @param {string?} opt_body The request body
 * @return {!Promise<string>} A promise for the fetched text. In case of an
 *     error, this promise is rejected with an HTTP status code.
 */
XhrTextFetcher.prototype.fetch = function(url, opt_method, opt_body) {
  return new Promise(function(resolve, reject) {
    var xhr = new XMLHttpRequest();
    var method = opt_method || 'GET';
    xhr.open(method, url, true);
    xhr.onloadend = function() {
      if (xhr.status != 200) {
        reject(xhr.status);
        return;
      }
      resolve(xhr.responseText);
    };
    xhr.onerror = function() {
      // Treat any network-level errors as though the page didn't exist.
      reject(404);
    };
    if (opt_body) {
      xhr.send(opt_body);
    } else {
      xhr.send();
    }
  });
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides a "bottom half" helper to assist with raw requests.
 * This fills the same role as the Authenticator-Specific Module component of
 * U2F documents, although the API is different.
 */
'use strict';

/**
 * @typedef {{
 *   type: string,
 *   timeout: number
 * }}
 */
var HelperRequest;

/**
 * @typedef {{
 *   type: string,
 *   code: (number|undefined)
 * }}
 */
var HelperReply;

/**
 * A helper to process requests.
 * @interface
 */
function RequestHelper() {}

/**
 * Gets a handler for a request.
 * @param {HelperRequest} request The request to handle.
 * @return {RequestHandler} A handler for the request.
 */
RequestHelper.prototype.getHandler = function(request) {};

/**
 * A handler to track an outstanding request.
 * @extends {Closeable}
 * @interface
 */
function RequestHandler() {}

/** @typedef {function(HelperReply, string=)} */
var RequestHandlerCallback;

/**
 * @param {RequestHandlerCallback} cb Called with the result of the request,
 *     and an optional source for the result.
 * @return {boolean} Whether this handler could be run.
 */
RequestHandler.prototype.run = function(cb) {};

/** Closes this handler. */
RequestHandler.prototype.close = function() {};

/**
 * Makes a response to a helper request with an error code.
 * @param {HelperRequest} request The request to make a response to.
 * @param {DeviceStatusCodes} code The error code to return.
 * @param {string=} opt_defaultType The default response type, if none is
 *     present in the request.
 * @return {HelperReply} The helper error response.
 */
function makeHelperErrorResponse(request, code, opt_defaultType) {
  var type;
  if (request && request.type) {
    type = request.type.replace(/_request$/, '_reply');
  } else {
    type = opt_defaultType || 'unknown_type_reply';
  }
  var reply = {'type': type, 'code': /** @type {number} */ (code)};
  return reply;
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview U2F message types.
 */
'use strict';

/**
 * Message types for messsages to/from the extension
 * @const
 * @enum {string}
 */
var MessageTypes = {
  U2F_REGISTER_REQUEST: 'u2f_register_request',
  U2F_SIGN_REQUEST: 'u2f_sign_request',
  U2F_REGISTER_RESPONSE: 'u2f_register_response',
  U2F_SIGN_RESPONSE: 'u2f_sign_response',
  U2F_GET_API_VERSION_REQUEST: 'u2f_get_api_version_request',
  U2F_GET_API_VERSION_RESPONSE: 'u2f_get_api_version_response'
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides a partial copy of goog.inherits, so inheritance works
 * even in the absence of Closure.
 */
'use strict';

// A partial copy of goog.inherits, so inheritance works even in the absence of
// Closure.
function inherits(childCtor, parentCtor) {
  /** @constructor */
  function tempCtor() {}
  tempCtor.prototype = parentCtor.prototype;
  childCtor.prototype = new tempCtor;
  childCtor.prototype.constructor = childCtor;
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Class providing common dependencies for the extension's
 * top half.
 */
'use strict';

/**
 * @param {!AppIdCheckerFactory} appIdCheckerFactory An appId checker factory.
 * @param {!ApprovedOrigins} approvedOrigins An origin approval implementation.
 * @param {!CountdownFactory} countdownFactory A countdown timer factory.
 * @param {!OriginChecker} originChecker An origin checker.
 * @param {!RequestHelper} requestHelper A request helper.
 * @param {!SystemTimer} sysTimer A system timer implementation.
 * @param {!TextFetcher} textFetcher A text fetcher.
 * @constructor
 */
function FactoryRegistry(
    appIdCheckerFactory, approvedOrigins, countdownFactory, originChecker,
    sysTimer) {
  /** @private {!AppIdCheckerFactory} */
  this.appIdCheckerFactory_ = appIdCheckerFactory;
  /** @private {!ApprovedOrigins} */
  this.approvedOrigins_ = approvedOrigins;
  /** @private {!CountdownFactory} */
  this.countdownFactory_ = countdownFactory;
  /** @private {!OriginChecker} */
  this.originChecker_ = originChecker;
  /** @private {!SystemTimer} */
  this.sysTimer_ = sysTimer;
}

/** @return {!AppIdCheckerFactory} An appId checker factory. */
FactoryRegistry.prototype.getAppIdCheckerFactory = function() {
  return this.appIdCheckerFactory_;
};

/** @return {!ApprovedOrigins} An origin approval implementation. */
FactoryRegistry.prototype.getApprovedOrigins = function() {
  return this.approvedOrigins_;
};

/** @return {!CountdownFactory} A countdown factory. */
FactoryRegistry.prototype.getCountdownFactory = function() {
  return this.countdownFactory_;
};

/** @return {!OriginChecker} An origin checker. */
FactoryRegistry.prototype.getOriginChecker = function() {
  return this.originChecker_;
};

/** @return {!SystemTimer} A system timer implementation. */
FactoryRegistry.prototype.getSystemTimer = function() {
  return this.sysTimer_;
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Errors reported by top-level request handlers.
 */
'use strict';

/**
 * Response status codes
 * @const
 * @enum {number}
 */
var ErrorCodes = {
  'OK': 0,
  'OTHER_ERROR': 1,
  'BAD_REQUEST': 2,
  'CONFIGURATION_UNSUPPORTED': 3,
  'DEVICE_INELIGIBLE': 4,
  'TIMEOUT': 5
};

/**
 * An error object for responses
 * @typedef {{
 *   errorCode: ErrorCodes,
 *   errorMessage: (?string|undefined)
 * }}
 */
var U2fError;
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Implements a check whether an origin is allowed to assert an
 * app id.
 *
 */
'use strict';

/**
 * Implements half of the app id policy: whether an origin is allowed to claim
 * an app id. For checking whether the app id also lists the origin,
 * @see AppIdChecker.
 * @interface
 */
function OriginChecker() {}

/**
 * Checks whether the origin is allowed to claim the app ids.
 * @param {string} origin The origin claiming the app id.
 * @param {!Array<string>} appIds The app ids being claimed.
 * @return {Promise<boolean>} A promise for the result of the check.
 */
OriginChecker.prototype.canClaimAppIds = function(origin, appIds) {};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides an interface to determine whether to request the
 * individual attestation certificate during enrollment.
 */
'use strict';

/**
 * Interface to determine whether to request the individual attestation
 * certificate during enrollment.
 * @interface
 */
function IndividualAttestation() {}

/**
 * @param {string} appIdHash The app id hash.
 * @return {boolean} Whether to request the individual attestation certificate
 *     for this app id.
 */
IndividualAttestation.prototype.requestIndividualAttestation = function(
    appIdHash) {};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides a Google corp implementation of IndividualAttestation.
 */
'use strict';

/**
 * Google corp implementation of IndividualAttestation that requests
 * individual certificates for corp accounts.
 * @constructor
 * @implements IndividualAttestation
 */
function GoogleCorpIndividualAttestation() {}

/**
 * @param {string} appIdHash The app id hash.
 * @return {boolean} Whether to request the individual attestation certificate
 *     for this app id.
 */
GoogleCorpIndividualAttestation.prototype.requestIndividualAttestation =
    function(appIdHash) {
  return appIdHash == GoogleCorpIndividualAttestation.GOOGLE_CORP_APP_ID_HASH;
};

/**
 * App ID used by Google employee accounts.
 * @const
 */
GoogleCorpIndividualAttestation.GOOGLE_CORP_APP_ID =
    'https://www.gstatic.com/securitykey/a/google.com/origins.json';

/**
 * Hash of the app ID used by Google employee accounts.
 * @const
 */
GoogleCorpIndividualAttestation.GOOGLE_CORP_APP_ID_HASH = B64_encode(
    sha256HashOfString(GoogleCorpIndividualAttestation.GOOGLE_CORP_APP_ID));
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides an interface to check whether the user has approved
 * an origin to use security keys.
 *
 */
'use strict';

/**
 * Allows the caller to check whether the user has approved the use of
 * security keys from an origin.
 * @interface
 */
function ApprovedOrigins() {}

/**
 * Checks whether the origin is approved to use security keys. (If not, an
 * approval prompt may be shown.)
 * @param {string} origin The origin to approve.
 * @param {number=} opt_tabId A tab id to display approval prompt in, if
 *     necessary.
 * @return {Promise<boolean>} A promise for the result of the check.
 */
ApprovedOrigins.prototype.isApprovedOrigin = function(origin, opt_tabId) {};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides a representation of a web request sender, and
 * utility functions for creating them.
 */
'use strict';

/**
 * @typedef {{
 *   origin: string,
 *   tabId: (number|undefined)
 * }}
 */
var WebRequestSender;

/**
 * Creates an object representing the sender's origin, and, if available,
 * tab.
 * @param {MessageSender} messageSender The message sender.
 * @return {?WebRequestSender} The sender's origin and tab, or null if the
 *     sender is invalid.
 */
function createSenderFromMessageSender(messageSender) {
  var origin = getOriginFromUrl(/** @type {string} */ (messageSender.url));
  if (!origin) {
    return null;
  }
  var sender = {origin: origin};
  if (messageSender.tab) {
    sender.tabId = messageSender.tab.id;
  }
  return sender;
}

/**
 * Checks whether the given tab could have sent a message from the given
 * origin.
 * @param {Tab} tab The tab to match
 * @param {string} origin The origin to check.
 * @return {Promise} A promise resolved with the tab id if it the tab could,
 *     have sent the request, and rejected if it can't.
 */
function tabMatchesOrigin(tab, origin) {
  // If the tab's origin matches, trust that the request came from this tab.
  if (getOriginFromUrl(tab.url) == origin) {
    return Promise.resolve(tab.id);
  }
  return Promise.reject(false);
}

/**
 * Attempts to ensure that the tabId of the sender is set, using chrome.tabs
 * when available.
 * @param {WebRequestSender} sender The request sender.
 * @return {Promise} A promise resolved once the tabId retrieval is done.
 *     The promise is rejected if the tabId is untrustworthy, e.g. if the
 *     user rapidly switched tabs.
 */
function getTabIdWhenPossible(sender) {
  if (sender.tabId) {
    // Already got it? Done.
    return Promise.resolve(true);
  } else if (!chrome.tabs) {
    // Can't get it? Done. (This happens to packaged apps, which can't access
    // chrome.tabs.)
    return Promise.resolve(true);
  } else {
    return new Promise(function(resolve, reject) {
      chrome.tabs.query(
          {active: true, lastFocusedWindow: true}, function(tabs) {
            if (!tabs.length) {
              // Safety check.
              reject(false);
              return;
            }
            var tab = tabs[0];
            tabMatchesOrigin(tab, sender.origin)
                .then(
                    function(tabId) {
                      sender.tabId = tabId;
                      resolve(true);
                    },
                    function() {
                      // Didn't match? Check if the debugger is open.
                      if (tab.url.indexOf('devtools://') != 0) {
                        reject(false);
                        return;
                      }
                      // Debugger active: find first tab with the sender's
                      // origin.
                      chrome.tabs.query({active: true}, function(tabs) {
                        if (!tabs.length) {
                          // Safety check.
                          reject(false);
                          return;
                        }
                        var numRejected = 0;
                        for (var i = 0; i < tabs.length; i++) {
                          tab = tabs[i];
                          tabMatchesOrigin(tab, sender.origin)
                              .then(
                                  function(tabId) {
                                    sender.tabId = tabId;
                                    resolve(true);
                                  },
                                  function() {
                                    if (++numRejected >= tabs.length) {
                                      // None matches: reject.
                                      reject(false);
                                    }
                                  });
                        }
                      });
                    });
          });
    });
  }
}

/**
 * Checks whether the given tab is in the foreground, i.e. is the active tab
 * of the focused window.
 * @param {number} tabId The tab id to check.
 * @return {Promise<boolean>} A promise for the result of the check.
 */
function tabInForeground(tabId) {
  return new Promise(function(resolve, reject) {
    if (!chrome.tabs || !chrome.tabs.get) {
      reject();
      return;
    }
    if (!chrome.windows || !chrome.windows.get) {
      reject();
      return;
    }
    chrome.tabs.get(tabId, function(tab) {
      if (chrome.runtime.lastError) {
        resolve(false);
        return;
      }
      if (!tab.active) {
        resolve(false);
        return;
      }
      chrome.windows.get(tab.windowId, function(aWindow) {
        resolve(aWindow && aWindow.focused);
      });
    });
  });
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides an implementation of the SystemTimer interface based
 * on window's timer methods.
 */
'use strict';

/**
 * Creates an implementation of the SystemTimer interface based on window's
 * timer methods.
 * @constructor
 * @implements {SystemTimer}
 */
function WindowTimer() {}

/**
 * Sets a single-shot timer.
 * @param {function()} func Called back when the timer expires.
 * @param {number} timeoutMillis How long until the timer fires, in
 *     milliseconds.
 * @return {number} A timeout ID, which can be used to cancel the timer.
 */
WindowTimer.prototype.setTimeout = function(func, timeoutMillis) {
  return window.setTimeout(func, timeoutMillis);
};

/**
 * Clears a previously set timer.
 * @param {number} timeoutId The ID of the timer to clear.
 */
WindowTimer.prototype.clearTimeout = function(timeoutId) {
  window.clearTimeout(timeoutId);
};

/**
 * Sets a repeating interval timer.
 * @param {function()} func Called back each time the timer fires.
 * @param {number} timeoutMillis How long until the timer fires, in
 *     milliseconds.
 * @return {number} A timeout ID, which can be used to cancel the timer.
 */
WindowTimer.prototype.setInterval = function(func, timeoutMillis) {
  return window.setInterval(func, timeoutMillis);
};

/**
 * Clears a previously set interval timer.
 * @param {number} timeoutId The ID of the timer to clear.
 */
WindowTimer.prototype.clearInterval = function(timeoutId) {
  window.clearInterval(timeoutId);
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides a watchdog around a collection of callback functions.
 */
'use strict';

/**
 * Creates a watchdog around a collection of callback functions,
 * ensuring at least one of them is called before the timeout expires.
 * If a timeout function is provided, calls the timeout function upon timeout
 * expiration if none of the callback functions has been called.
 * @param {number} timeoutValueSeconds Timeout value, in seconds.
 * @param {function()=} opt_timeoutCb Callback function to call on timeout.
 * @constructor
 * @implements {Closeable}
 */
function WatchdogRequestHandler(timeoutValueSeconds, opt_timeoutCb) {
  /** @private {number} */
  this.timeoutValueSeconds_ = timeoutValueSeconds;
  /** @private {function()|undefined} */
  this.timeoutCb_ = opt_timeoutCb;
  /** @private {boolean} */
  this.calledBack_ = false;
  /** @private {Countdown} */
  this.timer_ = FACTORY_REGISTRY.getCountdownFactory().createTimer(
      this.timeoutValueSeconds_ * 1000, this.timeout_.bind(this));
  /** @private {Closeable|undefined} */
  this.closeable_ = undefined;
  /** @private {boolean} */
  this.closed_ = false;
}

/**
 * Wraps a callback function, such that the fact that the callback function
 * was or was not called gets tracked by this watchdog object.
 * @param {function(...?)} cb The callback function to wrap.
 * @return {function(...?)} A wrapped callback function.
 */
WatchdogRequestHandler.prototype.wrapCallback = function(cb) {
  return this.wrappedCallback_.bind(this, cb);
};

/** Closes this watchdog. */
WatchdogRequestHandler.prototype.close = function() {
  this.closed_ = true;
  this.timer_.clearTimeout();
  if (this.closeable_) {
    this.closeable_.close();
    this.closeable_ = undefined;
  }
};

/**
 * Sets this watchdog's closeable.
 * @param {!Closeable} closeable The closeable.
 */
WatchdogRequestHandler.prototype.setCloseable = function(closeable) {
  this.closeable_ = closeable;
};

/**
 * Called back when the watchdog expires.
 * @private
 */
WatchdogRequestHandler.prototype.timeout_ = function() {
  if (!this.calledBack_ && !this.closed_) {
    var logMsg = 'Not called back within ' + this.timeoutValueSeconds_ +
        ' second timeout';
    if (this.timeoutCb_) {
      logMsg += ', calling default callback';
      console.warn(UTIL_fmt(logMsg));
      this.timeoutCb_();
    } else {
      console.warn(UTIL_fmt(logMsg));
    }
  }
};

/**
 * Wrapped callback function.
 * @param {function(...?)} cb The callback function to call.
 * @param {...?} var_args The callback function's arguments.
 * @private
 */
WatchdogRequestHandler.prototype.wrappedCallback_ = function(cb, var_args) {
  if (!this.closed_) {
    this.calledBack_ = true;
    this.timer_.clearTimeout();
    var originalArgs = Array.prototype.slice.call(arguments, 1);
    cb.apply(null, originalArgs);
  }
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Logging related utility functions.
 */

/** Posts the log message to the log url.
 * @param {string} logMsg the log message to post.
 * @param {string=} opt_logMsgUrl the url to post log messages to.
 */
function logMessage(logMsg, opt_logMsgUrl) {
  console.warn(UTIL_fmt('logMessage("' + logMsg + '")'));

  if (!opt_logMsgUrl) {
    return;
  }

  var audio = new Audio();
  audio.src = opt_logMsgUrl + logMsg;
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Provides an implementation of approved origins that relies
 * on the chrome.cryptotokenPrivate.requestPermission API.
 * (and only) allows google.com to use security keys.
 *
 */
'use strict';

/**
 * Allows the caller to check whether the user has approved the use of
 * security keys from an origin.
 * @constructor
 * @implements {ApprovedOrigins}
 */
function CryptoTokenApprovedOrigin() {}

/**
 * Checks whether the origin is approved to use security keys. (If not, an
 * approval prompt may be shown.)
 * @param {string} origin The origin to approve.
 * @param {number=} opt_tabId A tab id to display approval prompt in.
 *     For this implementation, the tabId is always necessary, even though
 *     the type allows undefined.
 * @return {Promise<boolean>} A promise for the result of the check.
 */
CryptoTokenApprovedOrigin.prototype.isApprovedOrigin = function(
    origin, opt_tabId) {
  return new Promise(function(resolve, reject) {
    if (opt_tabId === undefined) {
      resolve(false);
      return;
    }
    var tabId = /** @type {number} */ (opt_tabId);
    tabInForeground(tabId).then(function(result) {
      if (!result) {
        resolve(false);
        return;
      }
      if (!chrome.tabs || !chrome.tabs.get) {
        reject();
        return;
      }
      chrome.tabs.get(tabId, function(tab) {
        if (chrome.runtime.lastError) {
          resolve(false);
          return;
        }
        var tabOrigin = getOriginFromUrl(tab.url);
        resolve(tabOrigin == origin);
      });
    });
  });
};
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Implements a check whether an origin is allowed to assert an
 * app id based on whether they share the same effective TLD + 1.
 *
 */
'use strict';

/**
 * Implements half of the app id policy: whether an origin is allowed to claim
 * an app id. For checking whether the app id also lists the origin,
 * @see AppIdChecker.
 * @implements OriginChecker
 * @constructor
 */
function CryptoTokenOriginChecker() {}

/**
 * Checks whether the origin is allowed to claim the app ids.
 * @param {string} origin The origin claiming the app id.
 * @param {!Array<string>} appIds The app ids being claimed.
 * @return {Promise<boolean>} A promise for the result of the check.
 */
CryptoTokenOriginChecker.prototype.canClaimAppIds = function(origin, appIds) {
  var appIdChecks = appIds.map(this.checkAppId_.bind(this, origin));
  return Promise.all(appIdChecks).then(function(results) {
    return results.every(function(result) {
      return result;
    });
  });
};

/**
 * Checks if a single appId can be asserted by the given origin.
 * @param {string} origin The origin.
 * @param {string} appId The appId to check
 * @return {Promise<boolean>} A promise for the result of the check
 * @private
 */
CryptoTokenOriginChecker.prototype.checkAppId_ = function(origin, appId) {
  return new Promise(function(resolve, reject) {
    if (!chrome.cryptotokenPrivate) {
      reject();
      return;
    }
    chrome.cryptotokenPrivate.canOriginAssertAppId(origin, appId, resolve);
  });
};
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview CryptoToken background page
 */

'use strict';

/** @const */
var HTTP_ORIGINS_ALLOWED = false;

/** @const */
var LOG_SAVER_EXTENSION_ID = 'fjajfjhkeibgmiggdfehjplbhmfkialk';

var FACTORY_REGISTRY = (function() {
  var windowTimer = new WindowTimer();
  var xhrTextFetcher = new XhrTextFetcher();
  return new FactoryRegistry(
      new XhrAppIdCheckerFactory(xhrTextFetcher),
      new CryptoTokenApprovedOrigin(), new CountdownTimerFactory(windowTimer),
      new CryptoTokenOriginChecker(), windowTimer);
})();

/**
 * @param {*} request The received request
 * @return {boolean} Whether the request is a register/enroll request.
 */
function isRegisterRequest(request) {
  if (!request) {
    return false;
  }
  switch (request.type) {
    case MessageTypes.U2F_REGISTER_REQUEST:
      return true;

    default:
      return false;
  }
}

/**
 * Default response callback to deliver a response to a request.
 * @param {*} request The received request.
 * @param {function(*): void} sendResponse A callback that delivers a response.
 * @param {*} response The response to return.
 */
function defaultResponseCallback(request, sendResponse, response) {
  response['requestId'] = request['requestId'];
  try {
    sendResponse(response);
  } catch (e) {
    console.warn(UTIL_fmt('caught: ' + e.message));
  }
}

/**
 * Response callback that delivers a response to a request only when the
 * sender is a foreground tab.
 * @param {*} request The received request.
 * @param {!MessageSender} sender The message sender.
 * @param {function(*): void} sendResponse A callback that delivers a response.
 * @param {*} response The response to return.
 */
function sendResponseToActiveTabOnly(request, sender, sendResponse, response) {
  // For WebAuthn-proxied requests on Windows, dismissing the native Windows
  // UI after a timeout races with the error being returned here. Hence, skip
  // the focus check for all timeouts.
  if (response.responseData &&
      response.responseData.errorCode == ErrorCodes.TIMEOUT) {
    defaultResponseCallback(request, sendResponse, response);
    return;
  }

  tabInForeground(sender.tab.id).then(function(result) {
    // If the tab is no longer in the foreground, drop the result: the user
    // is no longer interacting with the tab that originated the request.
    if (result) {
      defaultResponseCallback(request, sendResponse, response);
    }
  });
}

/**
 * Common handler for messages received from chrome.runtime.sendMessage and
 * chrome.runtime.connect + postMessage.
 * @param {*} request The received request
 * @param {!MessageSender} sender The message sender
 * @param {function(*): void} sendResponse A callback that delivers a response
 * @return {Closeable} A Closeable request handler.
 */
function messageHandler(request, sender, sendResponse) {
  var responseCallback;
  if (isRegisterRequest(request)) {
    responseCallback =
        sendResponseToActiveTabOnly.bind(null, request, sender, sendResponse);
  } else {
    responseCallback =
        defaultResponseCallback.bind(null, request, sendResponse);
  }
  var closeable = handleWebPageRequest(
      /** @type {Object} */ (request), sender, responseCallback);
  return closeable;
}

/**
 * Listen to individual messages sent from (whitelisted) webpages via
 * chrome.runtime.sendMessage
 * @param {*} request The received request
 * @param {!MessageSender} sender The message sender
 * @param {function(*): void} sendResponse A callback that delivers a response
 * @return {boolean}
 */
function messageHandlerExternal(request, sender, sendResponse) {
  if (sender.id && sender.id === LOG_SAVER_EXTENSION_ID) {
    return handleLogSaverMessage(request);
  }

  messageHandler(request, sender, sendResponse);
  return true;  // Tell Chrome not to destroy sendResponse yet
}
chrome.runtime.onMessageExternal.addListener(messageHandlerExternal);

// Listen to direct connection events, and wire up a message handler on the port
chrome.runtime.onConnectExternal.addListener(function(port) {
  function sendResponse(response) {
    port.postMessage(response);
  }

  var closeable;
  port.onMessage.addListener(function(request) {
    var sender = /** @type {!MessageSender} */ (port.sender);
    closeable = messageHandler(request, sender, sendResponse);
  });
  port.onDisconnect.addListener(function() {
    if (closeable) {
      closeable.close();
    }
  });
});

/**
 * Handles messages from the log-saver app. Temporarily replaces UTIL_fmt with
 * a wrapper that also sends formatted messages to the app.
 * @param {*} request The message received from the app
 * @return {boolean} Used as chrome.runtime.onMessage handler return value
 */
function handleLogSaverMessage(request) {
  if (request === 'start') {
    if (originalUtilFmt) {
      // We're already sending
      return false;
    }
    originalUtilFmt = UTIL_fmt;
    UTIL_fmt = function(s) {
      var line = originalUtilFmt(s);
      chrome.runtime.sendMessage(LOG_SAVER_EXTENSION_ID, line);
      return line;
    };
  } else if (request === 'stop') {
    if (originalUtilFmt) {
      UTIL_fmt = originalUtilFmt;
      originalUtilFmt = null;
    }
  }
  return false;
}

/** @private */
var originalUtilFmt = null;
<svg width="16" height="16" xmlns="http://www.w3.org/2000/svg"><g fill="#5F6368"><circle cx="5.44" cy="10.371" r="1.411"/><path d="M8 0C3.578 0 0 3.578 0 8c0 4.422 3.578 8 8 8 4.422 0 8-3.578 8-8 0-4.422-3.578-8-8-8zM6.095 3.28a.557.557 0 0 1 .705-.335l1.178.393 1.171-.393a.573.573 0 0 1 .706.335l1.287 3.433H4.815l1.28-3.433zm4.414 9.062a1.97 1.97 0 0 1-1.956-1.804c-.546-.349-.99-.13-1.164-.014a1.96 1.96 0 0 1-1.956 1.81 1.977 1.977 0 0 1-1.971-1.97c0-1.084.887-1.971 1.97-1.971.932 0 1.71.647 1.913 1.52a1.547 1.547 0 0 1 1.237.007 1.97 1.97 0 0 1 1.913-1.527c1.083 0 1.97.887 1.97 1.97a1.948 1.948 0 0 1-1.956 1.979zm2.538-4.502H2.91v-.567h10.138v.567z"/><circle cx="10.509" cy="10.371" r="1.411"/></g></svg><svg width="237" height="289" xmlns="http://www.w3.org/2000/svg"><path d="M162.632 77.011c3.31-5.735 10.656-7.693 16.379-4.389l51.978 30.01c5.735 3.31 7.693 10.656 4.389 16.379l-30.01 51.978c-3.31 5.735-10.656 7.693-16.379 4.389l-51.978-30.01c-5.735-3.31-7.693-10.656-4.389-16.379l30.01-51.978zm3.723 44.885l3.08 17.998 24.669-10.06 4.186 34.748-56.58-32.667 24.645-10.02zm-103.23-7.316L5.44 145.252c-4.532 2.41-6.269 8.09-3.859 12.623l30.672 57.686c2.41 4.532 8.09 6.269 12.623 3.859l57.686-30.672c4.532-2.41 6.269-8.09 3.859-12.623L75.748 118.44c-2.41-4.532-8.09-6.269-12.623-3.859zm-15.52 86.4c-2.623 1.395-5.91.39-7.304-2.233l-10.14-19.071c-6.993-13.152-1.988-29.523 11.163-36.516 13.152-6.992 29.523-1.987 36.516 11.164l10.14 19.072c1.395 2.622.39 5.909-2.233 7.303l-11.125 5.915-8.45-15.893 7.946-4.225-4.225-7.946c-4.669-8.781-15.563-12.112-24.343-7.443-8.781 4.669-12.112 15.563-7.443 24.343l4.225 7.947 7.947-4.225 8.45 15.893-11.125 5.915zM69.311.145c-4.671-.824-9.108 2.232-9.91 6.782L47.69 73.1c-.803 4.55 2.32 8.939 6.992 9.762l51.007 8.994c4.671.824 9.15-2.225 9.952-6.775l8.752-49.634-21.106-29.31L69.311.145zm24.704 34.819l4.168-23.636 19.468 27.803-23.636-4.167zm74.63 175.393l11.988 16.163-11.817 2.084-11.99-16.164-8.862 1.563 11.988 16.164-11.817 2.084-11.99-16.164-8.862 1.563 11.989 16.164-11.818 2.083-11.99-16.163-2.954.52c-5.14.907-8.147 5.378-7.3 10.427l8.856 50.225c.889 5.04 5.286 8.207 10.426 7.3l64.998-11.46c5.14-.907 8.189-5.386 7.3-10.427l-10.419-59.088-17.726 3.126z" fill="#9AA0A6" fill-rule="evenodd"/></svg>��\[o�6~��`�q�V�_���Ҥ��$-�0-Ѷ:Y�()�1��.�㘲#�Y��&��s?y��jȜ0:%�!�3��Zh�fd�Zt�:[~��1�?��c��#�G8(�0
�Hmײݱ?��Qfx�WȢȥ"�T*�:�ޜ��I���F}�t�ű�):
�	e��N�A>bD�!��'�	�#L@���$Ȥ�b��
an$F��_���!ȱM�´`�db
	�4��k!ۅ�	�tq���4�bT�B��6��7�J��g�n�c�[���3�B�T�rv::����˗��jO=�L����LJ�1�&�=NԸ$„W�$6h��#��g���f\�1���C�Gl���9
�-2��
B ���Oѿ�>�h�M�o��9]P=�Ī���br<=�As��D$�bHZo%�7�͢�x�5H�вm�f�.b����=�Ȕd�R-�.���:S��e�!~s5<f�@2�Y688Q ��=��/�
{��Br���c�v��F_��Kf��0�d>B��z�����~�^q���=�������,%娦��(���u]b6u?0Fهȅ+¨崢nn$��6�$XO�ze!�SI����Ӕ2qȃ�	�y�хU"��b�%3'�:�*"9+ζ��>p�L|��ڨ�O:�V��J�ps���.����GL�EJ�
'}�3�Y�3r'��u�B��S����Mls+��_�	��i����Ӫ䜎�
%!e��!L��`5�"�9����"'������κg9r��x!f%��,�/���-8�w�@_�	*�eƻܲ'�bƃ¸r�4��I�@`���I`���w�V��Z�`dl���=cQc��I��W�¾W�c)-�*k� d.��w��x�$��R���_�T�t�S�o�<Y��Wb2�0@F,o�B��0��?b�x8˂Ɉ�}K?AS�|C8֦�bD�n�Qqh.ǜ#R�Pa��6�����j���`m�$�$y��&�BN�]��hX���I�����G��=�~c񎛧��$Q.�ݸȐ�Mˡ�]m�~"��A��]�9u�K��V�Dz@YK�9�3�
��BkՖ�+��
d�S�2/"IJ}愇�L�E���7T�_]�<�l"�{>�H�(�x�=� �Ydd�JZV�9^		�N+!�Kk�s���>�R���IgY@���c�I�"pZ����`i�X��*�V�.R���_�V	Ŵ��7��Ҽe�gU]��1����n��O�(�"
�G��@�(o���=���]�J�_P�X�/�%���E(7(����D9#�)uv�	�G#��B�#���fؗ=I��|M=�;��ۘgնr��l����=�=w)����}�Gސԭ�k��{<e����;���3s򍰩����yl�822U���V��lt�V�o����95�z�k�Y�w��Tw�����	m��oP<�,Q+��M귻�V�ߪw��qa[D��`��qqu�v�ޯ�O�vN�s��|��α;&�`����Qo���f����}��h�71���п
^o��m� ?�qܿΰic�h�+�i���^��V�*���>��-��mvZ�F�s��e��y8��X��� jՔ��l�~8�B�~�U��T��+����2��z�^��i�[-U�8��WO��#�*�]�}A�h(��w ^P��<ab�$�y�띴��n]q{w&���
�~v�8��h6�F��QL�3I�A<�l3���G�X�V��F�פn��ntU��f�[�P�����~ή��f'�i�?���+iqz�-�W�
���WH��l�Y���Z!6/�wq�E���Jzw��QXF.���Y��KD!�R����*��P����enBFQN�,dy�t:����UQRJ>~w��U2	!y�����A�mb��.�ډ�3v��Ô2�b���ƒ�I��
����>�4�ڥ�	�|L�	�,-�G�b`���;�%w_V����zk]�EW��
u���u)�@i�2nY��Ds}�ro{M߷��܉�l*�3/�x�֩�h��i}}��}��q�7�WM�1�N�L�+���h��_D�]�
HYg��:�?m��7��d���9��Eے�����:�.i�ie�%����<M[ϔw���^c��SDmA��c�%���pF�m5t��eU�=�~������uo�{ޏ���67����t�[�.�<�u-r��[u�ir��P�M��n����_'e������vo�E��1�q�a��2w�<x^�I,�j��n���t��
������>�L������FxA��l�2�F:
 ��(*��kȁ�t���F���=�RvpQ}��������!�QJ��Q��j�SQ��j0�,[�輠ihl��Q�������4�G ���z(v&��l�;�j*��EiL`y�p[�M�uߣ��]Qo�0�+y�t ���X+mRߪ�=�!цDJ\�����$@L�!��7�^�/��p���r�tu��R�����R����Ѹq��OQ�t��K�����z
�������`����:��Q�'�q
�:}�TR�T�U:��`ws'�	/O�M�-IbFͪp�]ps�[㗟�0_+�>��q�
$���4��:̈�5h�"�\j'"�Ҵ���&��E�"V�IP��j�Q�2s���%9Y���(N�\L�	і*�Ә�pP`ή$v�9"j k�$�@�'
���ܯ䷜�EF=?ū�Q������Ӻ$��-�m����k׿��"�mn�GM�G�+����o��/��L�ςf9Y [���#t�#�B�\A�f��
�M��º�(���+G�rg�X�2a�3�@ؚ�+#���x�rw~�
	�H梆�J�u�+�O4q�g!N����@,��ҭ{@��P(l2��1f8�OSp~���SּD7�L��Wqƾ'q�~}J��[aF��7�7����,foY	��MgK~��;�f��"��U�	�
�^��0�����z���X~j�o�b��������A��7-眯�<p+�2��50��Ёu��F���������DȠ֭

���׵�إ���#I5�2^��49���oK�Omy��H7!
t�~�_�T2P�x��A`���o��@)�~(�]�R��P���L������Ô@)�N��� ׋n���vKtz��P/r�]a�yB�� �~#Y�P/rFf���0���|���o^C�����F�0LF���9țh�V���Y����SK��0����"��8N���s�^ �%�V�O љ��ܽ�{~Y�K|��#E�ߤt9"td�nQ�H�+�]m��+��)g�4�턥s�[�f�yӎKe[����$��^�v�
�ה��E�4HD�}@�XOM����!���TLt�,�\�����B�4�n
�Z�-�Z�x�t�:Db�#z��C.Bȍ����xs�����)������z�[Y����,32{3fC�կ;��h�	��fcH���Z����C}��r��@YB�p�kx�o�$��c`�U�^�t�]���-��Ƙ��������5��J�����9s�=����,��)���yB��eY*`��LR�clJdk'��C�vt'���\XGSի�ŨE^�§�������YM�qVm�oU�f�����Ǒ.S�ar�a����2�j��IM����^S��n`�WG���3N�/*6'_��ܨ|`&��X°��U#���<kw۶��+��^2����4��t�j���α�ms�Z�a�5E�e[���w/�����{{b����<��|�f�9�e�x�v�>&q��M�,J�ԝ�R�1���4^�I��ܙ���9(q���d��)�&I�cr�fD,)���۹%�E��W�^-�(M��b�㘜ypLf�C�fN�D��ʂ9q��$Koz�DaL>�,JC�.^ҙsJ��2�?���$KR��dF��gAB�WR�0�f���lBh{���~8uԋ���	t��(�u��'��SL�4���'��E	���E0A����Lj�$����R�m��Oڞd�I�����La��o��(�
�&�y�g�?�qM����04�Q夑Ii5��E�yK��_��/`KJ�N��*���ܰ&���t_�3b�2>e�d�G�|�f�5���`���I�ӱw;��1ICb̃��&��l-4�hvF,�oN
��bb���;����Y�/@x1��4�g˱���'g�7gn��3�&)-ɉAIn�wF��bݎ������_��o�2��	���2/��I��V�'W����ǟo%��EQ��0^?�)�нE���P+����E1M
���<5��Í�5�?I�Oa1��!ݧ�۳�[&���$(5γ4� y�����	�J���Z�L�*p?�iv�Ղ���/���]��s��ޓ�&&�ѝ���C/�%��3�$�oE1�Yb���~��P%VAة�;†�}x��ɗY���h�?���M��
���^��?�5�n����.�ׁ�,��^��*"p�HL�Z��BELG1�^���X�
\œnH q�����H�
��P�3O)�8�;��{�1KW�����y�!8��b����8��T�`PDQTl�W�٠��@|�� U﵁���� ~xfm-D5X����S���aa�abx���`�B��yt��`��¡$���i� q�1�g���d$S����a��B��#��b3�:�^m�(�YJ�\x"�,
C�Q*��&c�|4�G9��<��cq�$������ᅨ��K2q��Y�.�����F�9�\hVV8�����ո�������]*��d�Z�Ze�5�{���ݗ���l�; �k�M7aP&y�>L��(���W4����ߠ�����|�.�J�W����E�e)r�y�t#���s����:���AP8�������ms���:��p�<�t�d�,ׅ)�*f�I��-�s�x	���R��x0qQ���o�kQ-�%U?0=� ��	�x��K) ~�I�;�PH�kD�6�[0�R��$��)�y��-2������1��_�ć�Q��Y���Ϫkhv#��,?f�#:�̢8��uD��җ�24чo��:��KU��(ŭ9���F_8�*7�Μy]XH��*B��	�z���1n6X'�DZ<e@&��@�L�dc��s7e�3�7��dɄ��j������-3�2����7� ��D�t����}���Y)�Q�r0�[X��цܳ�g�G�W�g��/p1c)��,YQ�R��D�����%"L�!J��j:��I�|g���'��AUƏ���Ѐ���Ug}rZU���73ug�J�h���W��.*K�{�cZ̴�h��1�-I���Ŋr�D�д]X�g�i���D��t�LJB-~ֈRɵ���Й�e
}��$lr��y�?捋�@�&7��J��(>��j��l5R-�c�-wY�'�v1�U��.6Z��ɴ��V���G�������x�ٴ��t:m�M�����<�O�誶�D�iC��1:�y����PzK�r�\��g-�L�g`l�"Tz�8N'�}�1
�gt;���F��/*��ߗ"U�
GjEIטm����z$�(o�-?0��G',�V���o@[�ާQ�AZ
��ǥ�ڐJ���8���5nc���.���A��G�L"ŝP�f���b9�Գ�f-�I�`!T%#��7
Me�8	���6��2�w,#>���h9�F��6r�������x�����H�G_>j�>�����0�T����V国W�=�x(�
OP�Q�/Ѕxa�~C��8X0�2m����R�������ؠ�4ô<͠:q�Bd=MSw��t�£���g'��p{*��'S=1g�H^0b)�ԈB
lrZ�(��<x���n�蝼q_�5��}�Oݎ���V�s��}�chF������C�7�vz_�y�×�`[��}���}�>ۜ<01��?����HV�O��
�V%j��߱,`�&��GP
q�ǫKx����WT֔�jM�Ϡ�@��p��Q��ZKT��]�JX��ǣ�����ř��a+]�q���CD#\�}�:���E�S���G�oo���W�N`Tv:�V�`�<�b~�Y8�ѕ��X��z=K*��<ir���ܒ��vH��m��5�̆�f���\�0�j��(_Yv���š`��#˄�׹��]<Y`�9<���-��7��3w)�I�	;,|���1�mX�a�oAWΔ��S(�Ҋ��7�}����q��[4vN3�&�vN�p���\`�1r3��*P�\3��UF�3r$���ߋ�߻G�һG���z�et~
���Ϯ����2˷�g���=]Ld��`,^���J�D��:��;�P=�e?'P�������!pÄ�tz?Ƈ[��.�?s�q����9|㙳t�{��C`����3F
�0U��gr&��p�n�^
A/�N�*F 񍿦��.���t&y{&~�� �V�`/l���O|���ѵ����ֻ��6k`ZM�������~î����?r�ͧ��3f���Af���nNDh-X��h�e1TV,�H�$��|6
b(Y3ʫ(8�|�e�l?�8B<J�2��$����@ul���J67'4gM6�K�|R���v2λB�V7&�4��~�E�U����z���{��)�nG��R Яɴ�l�y`��e�G�xeꂿ����ǕТqb�C���./~/޶M�h�^0�.bM�j�@�ՐJ#�:Q]�k�胏��<)K%}>
u��t�op�Qt�7�]��q������TӚꢊ�}z���w��n�B�zė����_��:���s�;�l�2�n����uK�3$f�
^���_��!�b��m��7z����߽�O����2ܡ�����?���7{�p5\D���g^u�0�
�C^6��@u�wp.7:h��.N%[	�����Pa2y~6�Rq:C�Ʈ6)�1�ö^��J>~���#	q�"
�PT�(���a�z�H������ʘ�/J\	�ߗx"V����1���a%���U$�K�1��h�-Z��+[�T �H�ue4{U<yʪ��t��|Ԓ��@P�X恉�7����ȡ�YM�'H��L�.�z��陶�&��~�>�����E�@����^WETZ�l8�5m�b/�;�����|�4aae(�
�V��q�4�p��p��j#���Y�
���ܲ%W�ܼ�R�/]�ݦR�"�/��]�J��"�3Z�Vo��8-�{��ܵ׊Тph�.d��x@��2�}��v��,Q׿x?2��V��,Xm�t0�Ӫh�C��cq��^�:��a�Π�_@��FcC\��j*�Ǔ�)�gM�1���Ik�:%�L�M��cH3�2�A���cR
�5����شs�f]4���Q��V���Z�VDl:
o�L�����+�"���z���-5��\�}��;��;�轢1�pU"Fc\��h(b��`�5�"W�$��l�
��JmL7c�h��H��O\��7�\�&OWb�Pk���V�e�
w���MD-��n���n�}�9l��j81�{_����X�3�U2�,��-��	~Ϣ���6��^�w�B��{�!zC�
�(���'��]�~��66���A%Z�Ta܃��F���.�ɸ�c�wlu�n�*���;����8�l�5
���6�ob<?��obq�WP]|�yg��[��/��#<e���1��Ҩ��{"r�j�Rl�Iҭks�qm�T[,��U56�T&�]1a�/f�a���ީ
�~��q�V��o���.�o��X����W�{����(�W64����zO�6ťx�*�_���AI��%D}N�(�a�qr�݊oX��d],�Ү��^�p4�Ŷ��`��?e암�f����"[��ه���h(+2͟�1Tm��m�'�oN�$+5g5�-A��(v߬������<��o��.)g�/�ZJB���x�u��9�WU������<��L�dBb�i���5?н�;	�{�o+�"���
�
ݱ88�}t}tz��f��w���������������ō�V����,v��Ϊ�<�����O�$����z�1����UO�d���K��`��_�����E��u���J[�e�e���{��N���EYK+�����M:c�g��‹�,�%� M��,��J��0e��)A��B
��2D�p����ZP�4^D�Z);�`L�x�km����^��^6��D��y�ahu���bo���&��]X��4��2�@@��k��`��a���U�mС�{m�h�1��ք�I��,��ïo�s6ݖ˯��M��F�ͬ����:�X��
oд�1�\I�7�v�N��8<Mw�`��%vy�=#�����|��jze��Szr�
�M�3�*/F�#�*�
�0��j;�o�
ϵL��pǶE-�3�b���g�eZ��v,�v*��$�NS�v��W#�oe_Ks�gMVS�Ǝd�e�yq�o���&z[F8��l�>�L����EhT
��N��JxͦmC�P��[$�7}��U����ta��,ZM��̸�zU��R�5���f�ĥ�O�-���GC���i��\L8� ۬�F
�@��]�b�"��$�Ez�-kEU8����"M�M�~mm��?v+���C6��+f�����8���&��ݳ�A��?~�7�rY�gXrt��n��b���w�sǯ�'$����{��,̸l)�_Uȿ�����������;"O�4`���D��	S��-&6�N��N�/��]�K��e�`��u���)x*5�@بihMo�<�}*�9ꋾ��u�42�������'������P�G=���l:<��A�:5�l����{+�I��s��恵!�ڝP�r�E�"H����Q�^��Jg��TxV%f�)l�x���^��Y]���2�R��5�P�c3�^�C0+��>��(x��q�ryV���}A�u�bL�cZ�Au��m���b����D��&$�p��#iV��V�SK̂����qH@q3Ϝ,�Ѥ5&_���9�����
��A6�0�G���Y��#C�7�����N"\jQc�����
Tt�>�e
s#��c�hZ�
���!��L�K�C�"���^CL^i�5!y�"������~�^si��{gg�{6���r�6#W:�6�ܿ�GN��9���L:M����f�H���4�0P�?��윖�W�U���ƅß�o.򃞅�
����_�è�K�{����Φ��]�'���`ȟ�2�M�$+�炡���%ՊٌJ^ra4��-��3�!�Wbs�9�k��鮘�֤ɫD-L�\Фh��f3���]B��C���QP�
��h��W_�x���]w�ο�M��6Fk�!���a�*{mTP���t�i�Ҩ�"���᡺Q65��+��Cm�CC��w��;Zu�%���v�T#�����c�V�!�5��X{G����
�௖$Q�W!�s�
P�W�x��椰�,^#7�5�i��dJ�y���H�)���ldN�'Ēn�����yޘ�&~5~x��18��#�,��f���V�Gj�>�':Agb/9!
aQhB"@�(�5�Ä�fp�� �	a������E��;����:�>m[���៙a�l��>��&�f��������I��6�2�F�dJ�2��FS��l3�F2Α.�QM<%�펆;���E�gd
W�X�
��湫�0��H�ћ���[��ܝ[�y���
m(�5�x*�Q��c�a�ּ���g~q�d1|7V�5�Y��q$�(E~�w�X����X�;�W���g�CO��H���D,H)C����˩fh杅ݿ!�ٗtkC����F����Ŀ�#�z�-�d���WV�
���KS��zY�Κװ��(���k�ֱ�]A.9��CQXm^�c�'�_G 6��X�f/��vѶ�8PPY��C1�@�ݬ����q�Ͷ���	�X�f��^׮WRL����ܐl7k�	m
�ƭ�JŤ����Z~�(-��fԿ��n�0�_�V	$�:u��I7T�u'{���ؼ@ͅ��o'(q��dJN������,�"�<�|�.u�&��<~L�/ۿ��y;y��
L���t���M�4�ғc�o�-�߯9���&Q9���3����dK=?-�N��0Z4rk�>��0\�̵�y�>/$g�<���WW�ծ�t�����\Ǘ�ʗ��eg�~&���m���6������r�t�7�Gj̓���;�*���7s�2�U��о&�� �B@�Q��qh*�!�0"�n5Z4��^1�"l@�7^�=(�F�A+j�.`��Nl���EQP����r�9 s�.�#b�s�c�������0��X#�s�M�g��@m��J��P���K�u/р��\K�;$/�BwE����2;��B$���>Zd���<�g��f4j����U�_���
~���[��
kyH0؃�t��.�g�e�X6�h�&���Xrn��dDY�6��̚�Ě#�h*��<dN�UC�����|�Kn�0D�R Ї�է�$j]�+�j�֤Y͋9�X�$�u�}�gD���Hҋ\�y��~�	����*�!�+���ޝ����(XP�=�!��%������GI����� �k>���pC���[t�eI/K��6�$�1�
��@8O}	�
�4�Q	�=�Qs���c�`�]L.}�̵v#�$�Q�p��DW�� ����q�R�"�Q�lk�M��|�
U8L�BN3gC0D��A��3O0Y�O��a��N�k��&��y�a�3�����{%;�nR6ۨ�����s�n+���퉔�R5
�fr�� <�T�@� �qD[�vN�B���i.ڡ2{o3`F�x��Q4��B�̸�}���'r��e�����nP������z��PB
��q�k��ys�m��][s��r~ׯXS�)nBP�_H�I��CR�Sy���E���x���]Z�O�g.�\z��|�v��,.�����i���JEU��j	�
��Y�;��W$i��%�6��H+/�}d�0��q���Y]�"PK���~�EXɰ�c.Eǜy6#��?�\j�|sD~�c��D����Y��j�k=��+�.�q��>I[ � �&oX���KgC3 ��:+�,���4�xʯ��!J��"+�!؏M�,��Q��8 X-K]g"���7x+���U
z�;�;�9#����7'��SFܑ���4i�!#Z�	�kN���4U�G�
�u�e�ۙh��}^���^Sq�h�U��,�ТH��	!*@�)��w2�h�5
�8:"t0�x��`Z��eC��A��o���3���X��7`ZnqZ�}��VUm�kH��i`hqO8z�w�2N�.��x��EP�{��3ۃ}�C�kT]�Hy;�$ šqN���1OH�Aٕ=�C�����c�u4�I�H�;��z �鸌K�Ա��@w�M�0�*�a�#ik)r�l7i4<Y���~�6@�vm���h[���FY���#裬k����f�P5%
@��MA3��<&�QV���H�6==P�h�s��hĤс�F1I����,#i���y��SV�?�t�p�]U�4�˲��0�,C�~�E#�b��y��U�=<�h`�곔F@��<
�w3�]`0��f�@�	[Ve����"ܩ
-�P�Z6a�:�xﯧM,���b	���x_��.�xו��i��.����5M���V*u3d���VQu�K8X�e��).�B�n�x�`���k��a��E �Y�4����G��4Cˉ�#�!�.#�|(9o:���UUA 5��yЖ�}�5$@�@'��$d6�6O[����Os9�%4���>����9O#�iy�C�W(6�0$9�ikE%���ש��$!�k��-�H���wZ��1�E}�3�Y�h�}_��ss��� ��i�]��auꥁ�h5$!�M�W���)�J�1�hX����6�����]�Q� �\xH���Nij�/�|�F�h:��O ��H�F���6�%�(�5�Ňt<�AĤb.!A��U�eI$4��%�{8�3]��3���ݸMd���P/���GĪ��q�!M���ۺB*��aH
re���H��I�}̤k��A��Y���.B�*�j���
��Ҏ޻���0q3�M��˦-B?23q8�*γ��a��b��K80��H�H��U�Ϝ%���
�<K�{�CVƋ򛌤�u�DI�<_��>^žj�v�ʹ��'\�ɝq?a��W"�iD�c,��'u�D��C����7EFu~�(���>�I#`�E����F��
�N# r�i�f�J�3L@&?��u0�b R�
����C�A,?$@������BV�!�0*��� ��L�4�I�z?`'�D�K�
�vC_�]���+�(�)�Yg,��&n(�.a\�uF�a^r�X���`�`~�oFi�gU^�C�/�T�g�Xﲋ�����Q��mz�\|���~L���~6�Ļ�^��	+r�����`���M/QW�C�ݽ��]��q���;�{gt��~>	����o��w���]m/(�(��J*:���S���з�~Ϗ���_��/����C�,�e�ﯺc�_��G��I�@V��d�F~��|	�|�����?�7��o��t�^	�v����ן��v�W�ޒ�����p<���������?�Q��;��w��_�*�� 5)����E!���b>��*m��%v�b�>/G�8�S��<���։�
�[�SuT�r:�X�3��j�D>�\�3�)zks(�<�U>�ٵ�G�80��x2Z=F ��7u�J��/R)�s��<�K�5*e�J�H��N���9S C$�E
��:���2@�	�h!B�>�g�b�ĽK�DLmԦ,�}��S��,�|�Aș���<%���o��Q� ��G��o"�YZ�S+�B3��70�5?��p�:����:��"�'$Vڬ/���{��Oyt]����e�
�_�
3���CE�F���|��}��)���F�I�j|j>����Ic<���h�zvu㌺�twIY�P/֩Q�O��[�z�,^y�N{A��3���Su�Ŵ�[�;�+E��>�B?�$�>����OX,1!�F�����&�)��D�9�_ng�ߡ۱c���V7�{/BW-�� ��+1�Q�����6�n�M��I�O|�{�\�[R`w����n~ؚ�o�=-�C{x���PD�q~�ݯ�'5��Ax�?�~�/�Z�a�>ڱ��.���G6U�w�Fx��	����a�݉�3rq��|���"����a���|I<f$�y�Ď�,�H)��Q�K~ςsJ�Y������E,aQ����]ˎ���bVk�Q/��W��B�N���Bu#�jQi.�.�+���ҳ�gY�-t��;�3ۭ�^���3v-�,'ӣ�9�+-������,�a`�-�,.�}�����%�Jw��"ă����CWKMfgB^�7n;��3����US~��5��i����tG�#�g��tP^@���q�Ҙ��x$�&�Q,��i�&H��Y�lw@��&�Pl?Ͻ�9
��0Ѹz>G��%Ro��Y�@�QP�J��wẲ���D<�77Hj���;Hc��fH��q�Ҧ.�i��x�V>M�����L�����$0D���tl�]�Tl!l7���7n�Ox��ĸW��{o(��{��9}pX�o-�[�sG����Z�b�O�\y���:�����q�ym[bΟ��	�����և׹�xl0�5خ�M�`J�Čt'4"e���]/��ޔ��n����v�O�5��vKP���{מ�^�v���9��Iݴ��k5��7Î�x�M���W��'�HP$�F'��|NW�X#@G3��,kGk6R��N�d����)���׃i������"�%���(oUkA����_�5E�	������$8cIF�v�ޛ0�(��Z̕�6G�SeKW� 5�8�V��﮶��\"ߍ=���� R�H�ۍO��Dauܡ_������ɡ/"��W߂7Mz�%�ޓ��9�S=.��f���7���B�@��6��X��勫�6�y���Y��|�^G��tRJX{n�ŵ��
eO!c']a�T�"���B�a���M_yG9Q�v���[Q��׷�\�	�M���&)����E�/�f.�{��
]�/E�5��>�Dt�b�yCN�7'�7��):i�K��3hojL��2-��q>��
N��
v���
k��ۿ�v����w�6����8i��,7���Ǖ7佶P���A&���D�"���=�Ğ����cY��c�w��%A��nC���=�Qd��~���	�&���ɜv�1����)�֘$�^Ȝ۽N[�� *{am�ך[}|����z
�2�&e*��$,wהh���j�EM�p�Fa/1@�f���<�����q���W_޼�(�����Ғ۝6�g2�g�y&��y�y͟P7�4�����5�UC���x��ky�艹v�.�R�.�"��k��
�n�	�No�3ҽL_lS"M��ͨ���W�/���򽇚*���(�@�r	G/ș���-����T�b����x��x���I�&>�Ù�i�V�R-F�ii���˰����\�ڜM0�	�uKNf�nF<O�R�ؐ]T���ML��|ٺ��eW0��V���E|;�#T}���B,�D�<��֋?�l�7�:�'*QO�隬�L,`��|9_�׿GH���4
/��L��E,H�bl�ưa��;��L�J�8E�Q��=q똆&fy+c�t1�}L��8m�����Ia
A��m����v��D;���+E�������%�o�ά�s^�s����B��}��:$������z`���c�M����;�M�a�4,Ϥ��ʦj��<ms�EZ`�@�lc�����$�1��yyњ
 �{W0���%xR�f�/�[R��Y�\����+��Q�}&���Z��ٓ9Ϡ[�����P���1}����hk?����ߋ������L�r3��$�M�UNw?UW~�1���T__��(΂�@e�Y�O�ij ��:���j&���+d��d�U�"�eU骻��^ջz����|�+�s���e�W��$�;D�QC�*�?0��rs����?=��w;U-�Y?C�n�O*����~�%��tט���*F��e%���/7����U�W�@Ou�U�����[uY�:�3���{{ALD�Fy�����~/4)+���_��*c�~��z��{�+�?����������K�e�>�*�*���������ef��@�+��8b�4��)��n��)S'Xb�j��(���s���b�h�nQi�=�P���-���t߼��\��O�oUa�j�+�irv�<�ّ?qv��*.��4�[�>12�~&j���䅶���t.<|#Sn8b1A��ǫyߐ|�XTܙ~b�l��Kb�^��m�G-��Ai|�Q���1�[����N�Oek�U�LJ�
��������HK.]��L5T9�~<�O>-��S9��W5:���e�	<��J�F3��(����r�D����c�P�[�Q'#h�K�h�@CA�����)��H3Z-Xh���=y%j�i�����ȃ���_�d3&a���0Ō)B�rƔ!L5c���1u�̘&�IbC�q��$�2���а���әSy� �S���z>^��(�6���m���h"���$�%j/�JK#��8=n����+�}\Ҹ��O��Ã��t�$��nW>3DwK�o���w�c��5]�f�@�]Pê�i�&!Z����껏n3�:�ʛ
��♠Z��g��㕦�X����]Kk�0�+%��1�a�=:(���4F躔��t�����I��%��ݶS��)�ld���(ۊ�Q�0=�<����;�'H]��Yc)�QMOMK��̪����X�qnhd]o:�x�A�ե�Q��@�eFe�QԲ���W�&�K��0���颬Q��n���XY�R)]ٷ-t/�fO�-�Cކ���kb�W�g���q�;I\�a������K�B��J�h}|�m�5�W
r�[)�k B�9�D�)$Nq�qRw�:�#,��N�^��/�k4�����*��P^��9��n��e�o��M��%\����������j�ˮ�-~�t	�&���?Q��J,��� 
M�)h��a�����0�Z�j��T�t��T�
�5bEϯTB4l���Tɵ1���j�y&���H3�0=Z��U>�n)���US�@p�t(�ݬ�?�?U�]�n��$պ��/Uͻ��Wơj	�Y�L2l�kv�Cp���ƏY��)����,�T��a���Wϸ
4��@�Mk=>�������]=�ϫ),	�ɜ��
�����]mk�0�+ƅA�5c���^�<ex����qp��,�ߝN��Ί�et����ӽȾ��	���$lsYp8��Ȁ�8��T�$�OE]�i�i6�
��T��Iu�X!��f�fzP�b	~k0��[�(P�#� �\
�v�h�}tʦ9VyU///�nj��x���/���M�$����T���� �
%��<�rU�U�T䔰T[��r^���Q�<2��ɾ�>����E�"S캙L���O)�J"~�)$=�U���O���8/�ڐ
�6u|_��x�v_�Q��|uF!@�$ma�b�]T��km�\b�3��g�_�=�b��1�gD#i~���&���+G��k��ގ!�!��z(�<��{�(6��������u�@�3�S�-V�w*+.)�u�����~�O�����׿�™�}q@bls���߁~���{�T��h[�{eB�0�n�W#�Xb_� ���N��"'u6����=�� ��ʚ��0e2�pLݺQy���!�+qK�޸q��a�m�>����`B�
X�bU~���~��_:w'DrQ��rq[K�i5��YU��|�۲������Ç�;���S�=��ı�m�Yr�ۯѡ�5�����M��K���vɜ��b>߁�< �XI��e桁��������@����H2�/x��@���=��������rn&����0���agކLjX�K�?�ߛ9ZQ��I�=����ʣZ�Z��9���e+;E9Æ-�7j�9�r<%��m4M���SSEO:B�
2Ύ�����ϋ7.��W����Ι���0�~���.���E�S�s}�T��J-ߒ~x�
�U7z��_�<����]mo�8��+�745"E�eg�\�/΍.���nwl�bg��=���<U�,9����aݑ(�X$��z#%���aoP�-D_�TC��S*_��{W��<{���j��=��?;�����0=�.�q��p�x"w�Þ`���c��uӝ�mc%���){�p���F8~}7�A�٠�?��w�;�>l�x~�|�n�O��V�	�=]?>(?ag{fz���u��N~�s��+���n
��v����qy��R���Ou�� 6�]��Ʋ�x������m[�oZ�v��d�~*	P��.���_j��t$o��ZX	_��'���Z��~`�,�̡}������{wt�\7�����d��_p�u=^�o��~oF����Ko0�K��!��u��3�.��+�o%�3��RQ��͙����L�G�`2�)h"jz��{/���N
8w��s���o5�� ��:5�톇B1|p�>�駋�?]�{I��o)��Bq{}ϣ�t����3~o��o��{yj�gɕԑo�%��X��'�5�[�v�� ַ_�P�!��|�A�/��__�L+]���w��j٢~=ֶ^����/w��i��c�JW�t��~�f��t%):��ys��\�d8��-Ȼ���\��t���zdm�#�p��
��(��[�[Pi�#�� _�n_�,BF���W�7F�<�Jh�"�U(U�Ȗ�U[K���3x�����}��}ly�M�7ĞOTy|>�<�|�X���L�K1�~���fо�x@o��!��)�����<�+'��Lt|���; 'Yo8ڣ씾�7"�|ˤ�R���P^���2��&��#`=�
�t�����p�.&H�[���.�����ћo�m���\���ulL���Y=����ͮIb.�K=�מ�������t��駿�'\{�7R��e;y�#
5����]ff��+�̹��y�Ǩ�YRTi(�J��ƫo�R93�e>�.�o����*A���][��ԫsRS��V�XO.��U
�V��+�"��u�w��e
�ޜv!J�z-ض\�v �m�lY.(b������J�!��K��of&$yfJS#QyS$I�&��InL�L��$+��U&s]� �>2s��j�d�)���{.@��[�6.ɢ^�U&'��`P���E�ڄ�">)�4���.)J�)���#�Ҭؙ�i�"]i��w������V]��,��:����+fp �0h_�")��d2>ߖھ�I�T
����Yq�/8:�df\�I���tf�"��f���;?�OHW����AzQH@�Qj�����A�I����J��*s��\������3ܹ��?7�]m>���w�r*iRH�O�u�T����ě��b���f׋t�e7_���<1���˿l���%��MA0a��R��y�
�����9���A�̋��^�ńz{"x��*��PN�y:V�|��Ef�,��O��$������ʅ��\j�r3H�p��:�E�>�WA�`�E�p�d�|�����T$�$�<�Ր�$�-��΢��b�$i	N�2�7r%�Ye�X�"�	�J�B�G�f\�R�TRj#E���W�$h�KQ1J"@��B
LKꬬR�۬Kp4s�T��;���$
�����M��>�W(�*�B�	��ހHF�5���9v���|e���Ӹ�~����#��,�>�1bFt�M1/Y11���Y���?��$��Ѓ�O���m1Za��3u� ���D�x����(�ȿ\ߏ�(��dh��	�
P!�ʁ)��d(MG�֥-_nK�QK�)j��ю�k0栓�C�4��m��\
�m�a]z�33���(�p�#���Kza��e��P\h�\^K�`�*XX�b8G����Ȁ��a&/3�u&P���uz���_c/�dr��k�O��ge�L�
�c��JhJ!o����:&���R�y��,�\zWy�Os���'E_�k���n'�|����?�ۻG��V���^ATz�3����JH2��iXX��"A��;�.Xudi�i�e�%�
O�/��\:
󳓧��a�_����g7џy1n�[ԕ+(�V��$��A�C��Y��܁�ҝC,�\��)�`��T��n!)����!�t���#���a���F~[P����R��O����EZB��g����?& �N@���,d9����w컩�aW*���}qv�%�����0R/���G���
�h{(�����
��ji���1�4x"t�-M�3|���`�ّ����.U���HX
�vy%�r(�W�g$y�>'��U�*L�C%T�"���RF�7�z;�,�G榮���}�|p4S�P���2�.K���^���@�Ӱ˒r
,�Pq�'5'	�5�{�m�����YɎƬt0T������(���SW���I��,Z�V��ߥ�a���I�1,���ׇvh%�V;�5M	�O��	�E5=o���f��A?�!㊖���LdFXq]f��a�B�Ax�%��ΰ"����v��y�8d��n̄ �&���z�������w$'�ft`�t��،��]�$�J�4@��PI�#,�Kg"���iw��𢫔��/���"+ק[�o��p�|��5�SIh"OJ:!U1�@��3�\-�S���u��Md��g��^�	�j(�N�U�Ѓ4va�)[yjX��L`�����(p�Q��D�5�p��g�ʾ���I}墰Dߴ�˿ԓS���V��\�+������d��G�,��)���Xc���۳`z)\r�5{ꞙk�{�A��&V��0���e�zUo��`�ͳI/���.t$���3�4pȰ.�A?p
�K�R��悈!�xۉxۊ��{�d>�S�4�g�����N���)���ܪp��
� x�\ȞK�v1
dm���/s*=��x�@d'	猒�,�Vud�,��K���������qv[⇖�K4�ѻ�S��;MWڣ�1>���sß��m�_CF�&̊�p��Ca�h���m
Y���Xj]���V��20����7[ٳ$�[�7����҃ Y3���G�L�&��T�W����Ho0e�!tVX�ݯ7T,��4?���%v�r���ad�ݒ�JI�
:R��
�`#w�g��%j���p���Ȧ�gE��8��DF�-�U[Y���1����C�@�J��I*	l�X���]f���ZށS p�o�!�mڢF[hrǶ#���,OZ��%�08�Lǥ[''���Fm����+p�C8O�����!�ͲV&E�G&֑l�h8MxB�i��o��ZU+��cs^��d��
s8�q��veR�0���Vދ����t�Ӗߊ�n�M���3��aن���zq�Y?�v�i��o/V�WY7���1_�3?�2��Ld�F>��|��n��_̟�����d����ϟ׿��d#���][��=��IE6ZUI`.��E��d�V�AnU	Y�f�˩ͨ�����"q�40�G�@_��j�)�������p|D��ge�0)�CA^�+i�%e<C.���
����q�y�Ջr�ↁx��m��Mp��Yƺ��f떭{n|TV;�f�L�L����``^��"O(%�y�(B�N��v�Р��g��vش%>yX�U��}h;�$�i	ژ������	J�*,�$]�,�H���uG̅N@TOFdNG�vF@PD=�n���l�Rx�x���A�!s��]�L���L&F�>�6�wnE�Se:�a�Yq�p}��L���!w��y��fKV�U�'�l.��Q��6��G�[�g1)q�7o�=w�F~\F� _�vl>M����]E����j���!�9�%S����h��J�p��$#�t#к��3��+�4�����^��Bw���g��z$��(y��2�gp5��Ń�Z���#g��d��lY�V+�4��.�S� L�N	�#@�W��.y"���u��lH���9���fp�ks�?���vڭ�
��HOY;�/�:,d�z�9Je���MY�]$��d�u���A����
	3�3�R��A_�؀�C� 
	7vAES��vgm��������$.���A�1��G�5�4f��^5���������h:�Ä�/�~���@)�zd�Dx]�|`��f�CĴ���������8yX�_�q�x����[>���j��M�����=o�0���
VK$@Q��C���HǢc��[2$�5 ���>(~���ݲE�4I)�=�ս�XxV���F�5��&Q���ա�=ɝ�W{K��V7��W
tx�T���`X�ͳ��c�^`�m�U�?b0���N���h�AE>~B�h>M��@-6��"m0�?.�В2���=ɲ��o.Ž��bՒܣ@\�K*�A�����
,d��H
�Q Ś>9&��nƎ���T!��k3��ջ?����ql'�E����Rh6ݴ���o�`�v�Nj�M����y�(��Ә҅���֖frv�1_��'#rt��<[#3�ˎ(�8���o詾��X�E6�Y��v^%��KF>���%�����������l��M˞�3%���+
/�]�hWݝ�4�]fZ�>dp����"�0��V�$P�̛��b~�ųq�Ȳ��=tCdg��ft����uȾOd2E�f/B�f�+ہs�U(�^�*�,����u?��J.~p����d��}9%V�6�)=cY-�Nr迊��H�iw����T��[�0x�Rd�=Շ��N.ꋑ'
a��$�Œy���Jk6���=e�5�����c�\��&?��ɿ�fpH�? ,>B���`��_���<V�R_�Λ�X"�㰩�����<�j����;�6XѭF'V�[�y��%�m�
*¦�.Ǵ��Cr�.�`+�,�#������T��g�%-u���`v�U��)C�Y��X��p�ں}�%򐎆��':�
<V2���&����kSG�
�vȮYd!��[�8�T�$�eH�(JY�޲���0&����1��N�ru���LwOOϫ�g�����y�?�����Tw�e��vry���qA��b�5�	(�����-EP�yo��k�#�᠊Px���H�=�~̼��Q[���+�r�&L^X�ݏ=S�#ĵ,����O�-�/^�w�;ź�of���k���g{bg�x�ܱ�*�zo��tV�L�C|�s�p�V���@���>�rf�xi���X@e����GA�~j�I9Bg?�L��ȫ�"m=���<Ziͥi�-g�v�PO)�E�!�2Y�����r�,��8�H>C�~�sG�IEz���\gEV�n�&�I˗~�k�͓Ļ)T��~�kx�x�^�P�^�_>�'w^�xP�)W���;)���
i����W��s�ڒ����c�!�e�/�;�Rt�G^����j���M�����j�:ᶸ�����-g��?�b���^��UV��Yw�a'��	_�|h{V��55�w���#�"�y�W��`��^FVS�<i�e!�7�#��\|AU̩]9���ec�+��ywE�;�����LJ�zT�E��To������V‰�Z�'�N�+�	�+�H�'����~=���UapyV6ϊ�JP��O���i{�I�~&|�"�
�v�L.�j�%�j?�u䵽+H���3���v�1��\賕Ռ.Z3����v��)K�Po����0�NN������m
��S�y�ŀ5�C>Fٓ��0=�z�!ۏ�W��ťNm�W0�ԩ=�4;���EAs8����D���/�u�wQF��H����<;�UE4(��J�-�$
T'TK#(�ER��K<}�# ���
GzN�A����U��=6��}E�C�mP�cdQ�$�����t�� �}�aE�>$Xa3��{���v�j�*7*�)6�#~�7;y �O�|�!���S�Z�|�h4"L%2I[��1��*ǝyzw���=	��W.V]�z)hh�	�l���&�+ˋg�����o�K�Pp�=$���?E؉�:���ڥNj��������,miqu�]�u��_��kC$�*�%�mm]�M&�=(���E�G�\�(�S������r���"��>�����4�ưC%}�����ZJT�iKWBt�/:� H�$M��AP��
C��'�6:�Ag�MsM��sv����:	dẺ��%I�L,V3�UR1��"G-ǫ��w0B0�O��AG�g�"F^�1�j�$���u�m/y�}
��DX���8�_�^��}B9���~��Y���dI�|`I�}iR��;Ƌ��^��1�B4���lч
�W��UVr�pK�e�a"�4���X�T�݈��hÀ��ɳA6)�Z��W,���"~�b�q�tX�����9���TT���r�?���k�`-2l����fD.z�:t^�pAvA��P_A���$�P+�Վ��L�

RjL4�؅����I��}pwx_.��%| ��t$��q��3[��n!\"�L��mH�v��t��O&��ӥ3|�s{�?��:����?��e�fo�*
>�
L�-����6誉�������k���:/)͋���c���5����3[[32E���0��K���R���[�>۳���=��D�_��K��-F���0�BA��k�eJ�{��j3�,����"}{��TZ�钓���w�%�D�~�D)�4�Ța��2*���~�2�^����[��V~W��
�ri7�i����Z�?U��ޥ�'����i>_x�P)u�<~x����s�
8��r�{��fv�H��Hw2ڃ�h�|�Á��0Z-adG������,��wwӖ���6I[M9~���d"�
�B`���k�-�^�S���y�	H.Y-x�<��I�;a_��>!�"�uҖ����4q���`���� �� ��
�Kq���O2L��O��RG���vs䍐�N(F��2H�&|}�٩xet�O���X�C���k\�SM@&��)���r�M�e���t# ���”��7{�Y$�s�nw>����#Yչ���$��<�����F�_뮍ݓ�q����8	�]��`�B뾶��z�S`�\���}���	�.���?��l��Î�&O���.��8!�����,����aя��*�M'�.�n�]��6R0蘅�F�h��<;Z�lp��؉DB��B�����`y-�m�A��	�t��x��Z���0���_B��x��=������ЌE*Y��.��g��+C��B�2��.5�Q;�j)^ S˭ށBA�z�Z
1B�?����¥��c>��\u`�b�FT�cJ����	c
Ւ�����5�r{���2(�j����dO�q�?\7ݼ����U
�p�M�K\��q>�5�W8���8Hg�q	xs"3'����?� ����vʅc�>CZ�>�u��,`2���Y`����sq���DӮ���]�]H0jю:��ݓwk-�cvY��k�j�{�u�O�9��C�ΫÇm"M#�N�ł&�6�Ys�-��h6w��q~V��|�P�;Ba���A��0@=�p�&�W���b�۲�A3}+;� g���E=�U�bM��߭�2\B�x�؝m��%=�c�*����1�@��F��QR�Z��\�J�۠�T��b+����QY����%�[T�$;��,�	��qZ'��w�@R������=?8<J##�jk8-擯��i�#��G��'����Y��7U�)�22�zMBjD�{��W	��A�Y�t�bd�Y4���ZE:,T�,���D,�v�ZHG2�e�+�W"YprC%t��ZB�$%�^�f�0~�a�>mm����b�g�Z�Y!˳���"���s#���ec��5�JS\���r��=�*>����?eQ�G����Y��I|�-���9�e.~���<���Y/Jt��)u���S⹝Q⯗S;�kJ~��R���j=~���y��c-����������}�գ����h���b`����������!Sr�0�Lf�RHq��_�ۋ��
Kɢ�7o:ư�f����{��_���sP�}7��L�t����yu��[�s�.	df�O����_��M��1$�L����4�Ӊ�� 
��ƣ��񁢒�N^�l�8j�nt��,4'�xg58��D�Z�n�]�З�~x�����b�6�@����yBQ̈́�%�c.��� ��O|�Lo��Aĕ���5��ފ
�q�$���$Is��ղQ���Ut�֍#�$gt�F�XR	 <�9�����\�s>��T&�Cx����-���V�>�Pè�"I�w;rt���$��_]�i%Yq�n--��k�r5$�����'/:��-$��%pSᩄw���G߼�p61�Щ�A�{��
���L��v�_5��JY�
ѱ:2y�6~�,A���7���]eq���j��m�)�C/�{���UqCע��'��O�$i_�X��AD�)��q8�V�`�^?|:9X��e�ȭ�=:��%�Ǿ�{��Y�F��H.,B�d]4A�`�QJ�ksSxw��~yx�0��f�I��b�5�M�y�O�Lӳg��[2��qjg�@�����&��i��y2n`��z�X�^��{���\s�������?�%�E��tX�d�;�3sg9�S
U���jys'S�)Sn���y��T�Y�9����!]q���1�'�v[�����"i~�V�[�*AI��؃ʩ[�m�d�+>�4ώ�YϷ�@�'/�Z����0�17G5J��5!v��|٘�Y��+��93vؐ$Dȋ,ڕ����2`"��{�X��[�U�S
֔���P���/��$zvB����~��W�"&���F,6k/��ó��r��QH���[��wӋB!v��ד�Kv.LO0�,��FZ���iO���&�ƿ��9�j��W�񝉩#��P���lco��ۢW�7X[/����q�?���%�/lҮRo]�J�'�SӸbt�;Ƅ�@�=��S��)��f�
��2�-��������eЧ"N�^��V�Y~��%�����6�5��W�p�_8pw@��u�M�sY-.��ryټ��/���D:oT9����e�ƃ(���n$F�ۉm�I<�{HW�S��E��Qn9�o|7�Q��h
���;5H�UK��'0O��$���Z,��B\8QN�dT*}�gI��ód���'�r�e����/���!ϛ�/]��H�{23)8#���\D��h-"�icK�]�0��>VDUrA$-<7�6�v�j:���:�����i��.��=z���ػ_��R�]E�J�'��z���_��8��oQ��U��TΘ�`Q����&
�ʬ�����yGRu�B@�)��1��5vё��^��f�A$�]r]<,#���J�;`�Yw��b�w��/�t/�uǷ:m�Z6�a�jYR��I��k����V�	>Ӕ]�k��@Tꔽm�[c���M�L��[�\1	8R���&3-sx[�d_Vx��=$t�Ǜ̄b�\n�|�K��K��F��M�p��(S��ɩ#��/���ko9���t��wm�I�i��]�yt�sc�Nvqr�4�&�N�`�I��ߏ���h����[l�у)R"%��Z�7��,�|�Ϡ�+Ew��+9�By�GeU�>'�+IԞ��弚�f������͂�GQ�\#��}�P�t�cp	`�P��݆�+N(SAE��UY������v,�>�1�̒pcC����!�H����8���A�+5о�0ZO�%/�D�_���W���?���*0�]Pz'�]�ؐ8�㑮S�t�
����^�×n����浇^h���YJ��d�{����S76��#-T�ʇȑ
��e�!ʦ]�ͳ�:�����H
�i��s*ϣ�����t��(�1^U�o���Iu�s~��%X9�8!���iF�M-3�/BX[j`z�|��s@���
;��G��S��5@y�SS�aIll<�ekX�_����=�m����ւ�5}{�{�6k�4lqFW^��x.��z�’"ÝK��lE�Ʒ\�ڏ�9�]��j�R1|��X"�Z1,��6�k��C���Ƴ.�o����&�GǓ�|���LÃ��~���[ 7�����$w��n��:�5�_$���U{_${V1��ϦYM�?D���$��_vk��"(C�*�t\��@�p�A��3%_��u�;/
	�iv���y������tv��|�.��P�I������Q<s:c�?O�w���'�Nh}�M�sr��tB���?��l�4s1��ѱY����������.䦘���-0�6�,���999�k��wB_*�:8N�{�GG����!��&9���ǠSmv��{b7Y�0�kwt�;z�	+�|��{��ա��I�@�ǃ���;z���t���x��`?F@�=�Qu^���:-')���#�|7:���	t�;���	�����1�I����=��п�c6{��ht2�ay&��t��$=@�$�"\���u�g4�G�9,�o6=cJ�ţ��8��ho-
q�=l*h�(>T�d=}�܂ӻ$� 3��w�:F���'�߅<�K�d���b��ֹL��D���)���M�/��P�k��ㆢ�5�"�wE�����s����4jj��5�S����m�F�s�m֡�z̢��_d28�$q�,r]	D�9Ug�E� DыAP���,j;_�t���auOr��0IV,&�{�
8�w�{!j�,PO@�Q�Y�'�U��0��S�t����,��ϑ�U|�H��9�� ���%��Y͑Nɾ�T
�BY���Q�K�}���y�~��o�Mr��۾>���LS˽
�8�%k��ظW�R����♮G[Ӭ�����eB���7u�a�M��<����yK���7="Jw(�;�þ0�0�����?F��D>7�m��VOgNC/b�#
{���Wk�b�*���+����
�� 5DHg�I�*'۵)�<�TQݥ�jM8�+']��G��"=џ�k�tg���O8�Y�ET쩌�L ���	�޴��E�\1�MؿI�I	���_q{�t\W^��w�R�-��
�%��s3(����
�i^=�����d,��WD	���	@���Z��Z���M��eMq`��s�lţ�+=�R��ҁl��,���G
�.K5���"���6K^�5�|[B£�h���!c�F:�#��C��i��ӯ��;Fc��`�����c��x,�&3ڮ���������������g�ۮ4nn����J���\m�\4<B.��?.�1��E�$oAV�eg5�Y�M�[/��b��g�ʶ�HȀ./42�k �Q�D�n�}B1nvsq�#p�D��V<[F�n3x��/<�9*�R萞�B��k��/��` 8;�;�~�)��LKE�7�U�c�Ȗ����J�������$����AE9�P���àNi�mKNU�LZ�����	V��B��>���p��톈��[k�/��W�S��_�'�y'��ߚ��`�'ge�0���Mr�z��m|RS%�8��kڴ�b���_�O���2ɀ!4��)m�ر�xFa��QI��`�#2U����3���"O���3_�W^�5��9jy��O+β�QXE�;E��0V�W��b�Ib�����#`4aZ�Li�!)�/|ώq�$�jq6uN&�?x���ڟVƔ��'aP��D)��A78�c=�Ls�P�q�wBL��6�c�*�y���Ԩ_�o�ԾD����t�hk�9�[[���)�m���:�)��0J�1����L��gz�Rv0����ƪ1�%޴��怪ε�4����5�����O�a�(�ⷰݵ�^*��ij�6�
�G ���/f)Xp�[����S�X<U�'�#��i�U��3�pK���l��	����r��\��@�;BQ��ם��|�(^6��e4
�A�Ii���� %�
�*zn�>�1l��BR\?�����F��^&�Or���6ɺ��Y�K��%A��†�gS,�Tb	_�ש؀Hl�@�?�c��;wy|A|�
�}���#�����zBeI�I3H�}I�B���)L�a��s��R�!�����%��W�Y����-�o��rY$A����-bx�g�n%�l�aZAŪ��@�k�Q�I�_�D�"*��Xn�C�Wf�Іbρ��zz����a�DEbz�tC�mՊT\({d�%�A30�����p{���y� ����E�dc��$�K52|��?�b�Is�x͖d�
��h����0���
z��KX�(��'g���Yz��K�z��%���˙x�4��t|@���!��E�����D��@Mb������M>��D��&J$����u[A:�����1w�<u`l�7V�G��FڈNM18����w"S�� Nvw51���!��	#�0����C㨘C{�gk�*�B�\ί�Sb��<���7���=�s�.��qʍ��0���)^7�X���ȹ�g�IJR��K7uzSFZ�C�̡+F�č�˚��pq���Fi���a#ia=�Ŕ��Cӕx#JJ;���nJ��|�M��rL�4/�S2�Yu}�+�.$���cH��b�Y��������잋�)D��<�&���v�4�cO�ΓE�4p_���>Ȋ��Ҟl����L]��
c�`v����9VS��Q�&�J�C*т�L^�<vy�L���)����1��B"jM>9��u�"�}7��5ز��� ��������t	�~�WT�mR�����MG�����f ��Sp�j(=RQҾh����8o�YI^=܏��}�}����^9�0�ᡓ�|����%���!�����;��]��A�u�X=�C�db�{�f�K+���K0�
q�WC���_
4�.��k2�/���@1���wa/�պ�Z�!��x�o�/#��
,S�Q��v��L˚⢇"��i�
����A����v�s�����nX7~r��r��b�P��E&�e)ʭ��P����!��CT�Ε�M:�ɜKe$Em��Y����&����~֬
�!�Ȭ`�о��PR_;�<��N(7��2Q�kh�>u���� <x�*�v�o��6Ƈ%�Лr�􅆔l�}����S��U��Y�\�S[olz2��ϔ0ok:��_�CdO3=�{�̨v�jE���N����v��){ K�"�3�GN�;��"¿Ԃ%6]C�'9O�c��.^����]{s�F��ߟ��z��
B��<��-y�$rI��%���,�Q�k�H��;�=��@*���J"��y����t��:�7�4�Ŋ�mQ��2�2Q�h����!��Ԛ�1��S*�#}���]���P�����p����	x�IW2��z%AHB�Jօ#�029�6�}�k��2�g�$����ʭ�8�q�e����!�V`Щ��c�
o_0x�^�I�Mk$Duzs�?����\�
�C�@��!n��������d�@$/��R�Ri҃�9�T����'��k��1=P~ʫ���D�QہHC_�;�w�,
	�.nzs�4��'�e��R����ݨ�Vy"BC/��-��-U�d��[&Ip�c�q���5D�(�'�;܌e��`�M~��a櫂P;�����#��]�CH�@	���-���
N�=�]7��`�(UHX u �n�%��ו�@Jz�ز���eZ��	�,^S�S��k�7"F��`cpUq�H�kvIj*�+��1����2��O���:��V��BL�{?�GU�q8}��1��o��wmmX1��|~&�[q�?g�<Dji#��n^�����N����o��mh���S��aÍ{�vb^W_��{SoX>��_�;ss
�eި:G�
��J��FDGɻ��h �ވ�Y^s�@��9z
�*G�C�>�+L6�wX�����_�9��C�l����F����i�}�5䯉�yY�׫k�<�7����S�u>�U�U8n�`�A!)%s�n�|-W/a�p+$��H����|1��k!�lo3�Y�Lz|lH���zoRf�J^�߯�?~8>�.�sJ�6��F��¡Up*�.�]^gi��D�@J-EY6&,�g;�@+:֊�[ZT�Tpe?	��O���	��^�!��؜[�-�Li �Gj{��*{��-*���ד2��r��}Gk������H��"ۄ/��x��A"��ʜ,˚�8-
S:c@�<l���c�h9��s���e���jZW3e�	�f�3�]s:�݁��#�~mHB���:�axT@DU1w��m`"Q�SP��G*~�+��̛G�c�2L�u���f(��||�h����vnA�s�ND��U��Ň5���R�w��v5=�,��Irj�ath�urJ^T?7
`^Oنk�����^��N���A�w0�x�uXe�fر!u���]8��b/���3����ȤRm*��!��j�ش�^�A$"v�%Q[J�,��N5��mT�8'���tt���{�W�煨�$$����B�#�4U#fRQ�� !�,#���J&��*���z�P;�X}��Sb�M�G��#�T�	P��6/��r<�Nv�X�PJ��PCd��
���x��I=/�]myJJe��IE�l	Z�������m�X�>�D��`��S��O�	 �@�T�����Ct�r���H�Zk�E���Ť���Ǖ�,Vձ8�b�(������]� vr�^��7��b<{����H!~�P�r�`怕��'-����bA�b�򺪧5E�5��ݦ��_�֡t�Qҙ���s1�,$�lkk��s�*z@�iJX!�źm���K�Ҍt�d�w�q>7i��	�72�O|*�-L;��'_���w
Q@�u�[�mM˖�jո�Q�5���`�˺G�6`2�#�q��5�y1 Y:�k��IQ�j����O?XŇ7��NN����O��������n��A?��:��D�{O�&<:=�pt��>ϏT�=�E9��I�ԙ�N޽;;>�v�C��w�T�.zI%b�KD��?``�dd7&R_r7�B��+M&�+
��A
�N��V�02=S��8��Yn�*ВOv5�B�~)Z͊�w�ڨ�qb�l�k�g�<xë߿4$��K��}'�J�?W�ŏB*I�.)=LF������h��l�fܓ��W7��@���}����'���wY�A�h��?�&
�M �|�?�/���Z��f��0f2.�xѓZ�=�l2����A�P�!e���ww�G�ҁ��[ ��#)��N�-'���޷���L���<���}0���z���bTT1�e�YY���Zk]l��֣y�V0:�	�q� =�s�N�N����T���|1�:
��
^X6;"���b���
�> y��2�8+�!�{�+�f��1�;C\���2�Y��Z�Al��p�B�_q�E�&�c=���dڤ�O��*޸5�DOc��`���A[��AY"~�$'E��~�[���p^n$_��yo>s�4��W{vK�n\���J3��L�'w�_���+�I(�;��G�\(��D?I�����C��2�U���ztM�Qo�;���qq�L^u�>h�M-m7+�ؘ΢/�)i�%��*���^܎*��
�T���
e�7�#w^�J��\��+C���\�xh6f��s�wg��y'��A�Eahh!�!�T0^�����0��o��6�l-�>���K#nk�JKi�����s��Ԕĉ;K�-�M���ö\�r���P>����?LJ��Z��e!U��X5�_gh���(l�1�%���d�RQ8M�3އ� ��,�FD������K�GW⑦���+!&�0�	�k:�%�&��@5`'ڠE^y�z��a�-��)QF�$��s�
T0r��>�E�{��3�a9'P&��ó�1!Q	�d��Z�'���n��Һ�*�HT8��H��A+�%��Le��M�$�do��M�_q�V��`�?�x�VMjF	�D`ҲI	�����"pyY��7��#aߩ�Q����|U�<l!-��+`#S�@_:��F|�8
�e.Ґ���g���W��o�v]�.��rkט�ЁORc!ل�@p�Wxa˻9l�V��&�A?j�iEN4C#�������ˑ�&��Q"@�R&V�KN�%&��j>�dE%&��d�
6ȡ��j�'�[�T���X|�x~��U�s�[{�a"�B�1oԎz�CfWo�I}5���S���Q*D�r6{_��/��Ju��*=����պ�Å�#v!��vG`:�e�7��r�u��6�SWy�e�������2W���7ه�)�u�-�$(uQ�U?H�O�K�_�T��W��^c�_+>&���5kW�B����g�%�A#%�[
'��׀�IS�h}?/��x�b(>ѿҝP���hfM\��Љ�|���-t�z�� ��T����A���C�)M��T��Kh���W �_����8��Gbu���w^�Ŧcڬ�z݅�<�E�0�
��ME�fQ_�����[=������+&U�LP�� ��cl�|Ca�2���r�V!#�i
�5�sظ�(��:�5x�Գ��WLw����NH��F�2�-M��,��M�~\
��	˝���a�`��TU�s�=�8w9�T�z���̢ɿ��_"���g;E�Қ��7u��4�I�KiJ���z�#��Ǹ��e�T�ĚY�Tb���}��36���-ޮVEV}ir����v�
B��ֱvZܔ`A!�@��_��a�D������lP�e�&�]�@���~��O	��z
o	�!�֭�Ԉ�sj��{�f���?�d��ք.turD�	��5h�}*_��o@���~og8�n��&ʓ?{��/�z`��3�v���C[
q��"���Q�-�87���a(TW�����&Ǔ1��^	�	����=�l�3Wo�YT�B�|q@MA�6(��⸅U���?��V�8�5��&;��5�����%Rn��x��q�B�&�V���y'O��f�,��ŝ��c�����ޘ�Z���TN�x���D=h���hF����B8]�R��ST?b�`nFR)���L����~�EW��ҧ�U,���0\j��O���g�,�]ׅ5K�;��(yP�zbu
�9p��R��2`��F&)z闷-��ո�Na	2�CʛC��K_e���xK��3t��2��c�%y��RY��ezܩ�<rVUC;{���~1���yw�S�r�s�����v�(�qv��
�+�ǡ$���L
X�	y��#l4��F*	X���̀��� Z�]	�J�@�D�F���8
&@��>V�D�
�	��V�F1[�\�zKIGbw�^��hP�����XQ�?�Oŧb��ꟊO�߰��$��K��^�ʄ�킾ˢ0�7��=-Fu��c�.��f(�4U�󂴒�
~?��i���;`P@c�,p,������r�|U@�{?P��N�Btr�dN���F�2���"Y��d� ���v��"��'o�c�;�y�Ea��Ƽ�YΘ��|��-��&�7��6b0�l��2	,,���;�*�����A?�n����B/��3��i<�0RLd�E���;_���s�}�?��'�7}��S}gڜ2d��<��5��o��P��U�'��lx/�*iL�?{0y��B!��W�<Y/`��$dl�bi����`���K�E4qidS�w��Pn�=XSqP�~�cWȣ�E�0&%���,5�7
T��9cR�v�O<�L"�ݬb�<K�T�I������;�w��ʅ������KwS�up`t��k&�yͲ�m���j��<ā��W*K�����[�&*�#�v���ݎ�����C-^���.�����l�e���~���RdJq@y���ų�K��3���c��+mD��k���@]���S�{"
w|p@]����Q��z��cT?���7�Th�yZ�.��i�#ui-8���v`-o@p�ja�כ<�����ӳF���*
C����i�
�h���|�H���\+�#���ʏB�~&䨚4EyG�p�hё�Pv�%j�!�者ʕ����?��ޠv�Q+���)�_)&z��绛�.��!�Id#�6fn9�P�j�IHάZ�"��Ǥ}��.,����h�����$�����T���(k���M�
�k�����MoJ������������oL�f	��X���W��{S��M%L�Wr�mQ&|k����R�:T>>g����T��B�Q1�)����B8�`�b�F�G�^���7��Y����/KTP����HA���_�'��2��͍h���b6���4y��>R�d��|
 M�q���5�[��
69��id�6$�$���
���2�J��
	�
����¡+'R�o��A���X�z���q6��J�_`I��d����*]������w��1��~�
��ጕ�%��0
��T��%�%�i���n{��|��o����]�n�0����I%i�R�16�]@��}��vil'�ƴ�Bs��	im�tQ��|�<�_!A�RSєB4���Rľ�g�H�,�,������`�p�m:�U!�S��
1Z���1��+b�$:zb�OlZ�Rg��kb�
\�S�؍��F�f�����/{`l<��#
���H��04/��9a�BZ;n���X�Ns�!!*���	�h�B,;���X�]{%'nN�i�%��-�	��?i.�����޾�LJ*�Uq��0~�9�����_�C
3�3��|�z�ͨu����q�+y`���i��?��4."�F}�i��J��ϧ��n�Ƣj���pxZ{���:��!P�RT���i�4�Ww����t޼�^ý�Sr��*��ݧ(D���L�/�8&cA��Rk2&~�l��IO�c=ܜtY�0��T�ZsEÿɯ�ҳk#����T���\��
'�NB��TR��yua:դ�)���������%ܲP�ű,e��%MWNSFOF������O���]{sǑ���\;6\@ ��ѤV.Y[�Pt$�rU(�$r-���d��Ǹ����I���y����UEq�&vfzfzfzz�{~��H�A�&Nʳ��%F�������^�O����V�j/���1��maJ�b��b�����pA�����=����W��&��r���:�e�Y�!�[x��%�C\���0�!58��_C����`�Y����i����H�.Qя��]"L�0E^σ���rB�½(���������u���݃�T�a��`���y���S�'��6�e�~��ij0���pb��k�X�4Ny�R>��� �a�.9�V����s�a�,��H�NF�q�e��T��#WS��"2���~Πv��z�3��=��j�З茀�M�"Lˏ�3OS^֨d�
䉚��{qr0�ʹ�pA�tXp����?F��9�B�?��Ҹ���mX\��/��~�W�(�:�>@�P�3���3x���SDč��}��Y��,�#��+�%̻�ݜ��9&�;B�wy���=��{^�v�.���o��̉dM7O�
��! ��֖�^:h�6sz��	S��~��_���8ߣ8Mf��;%>�ꜞ+�
��u�U%�u�ǠY���"j�G���`-��ƅH��s �}���k����Z���]cT'��vP���q�9���=�R�A^^-mo���Ls��5�NV����vW�5�D)p���Q�.�T� �St˹��L�u�B�'�ymՎ����C�G��p���\��٥�0�sWN��U���	1�*���e7��Thl7����Y�:�W[Qo������Q��1BqF$�N�����'a�[�-i��ز�
�V�T���ZS��S�<3�V��Gm���O7l� m�΄��$MHg��X |�+`O��Q$��ǝF
H�X�Mc]�KM�S������������`-�г3~99+�N#�
>�A��R���Ԗ�4��V�K�`��)]�4�`8��>���S��G�=���i����"n0�����U�z�)�ϝ6ءd5���yr�}� �xE�Z+	�f/Ґ�
T$
?�P�*S/���lQ����tF�X�D��'x�]Ny0>ѯB̩.R�����rY�3�Q͆�AXP��:��T@l
�%�'��'jC��a�$����	yY'=)N	�p�f�f-�ˊ�/���:k ���vB�뉹fVZ��Bbh�' �:+!88��������[��M���������F�XCa�M@�ky�9���֖UP�n���r�QӉ&c^R���za�?�3�W�|mM��}�е`�]2�N�	�3br�F���n���w&1�,܎�"h��oH�C,�
���y��8��<�7�a�C=
Ĥ�b������FI�kcX#e�0F�!Ocf�Z��d�U>���N��Sg�rz�&+�z�AO��V�(�0‘��!��$�[,k�lAm�H��
�r6�����I���o���Pi��0�6�ө�r�U`�(]��؜�����Y���� Poh��Oz�i�w�\��+j	ꈦ�]���Q�˹
�%��M� ��'��sf��r،6Q�_zZ@D(-',��� Dy8����T2)�ו0��۵�Z����-��H�1��8=�Z��5$����j���b4���᠌�O���pt5vT�
���*3�/��5_���6XǮ�u�#A��V��z�M�Ŭ��m�3�TpHϢ���'��B��X��%�Ø�*"ԒUF\���P��u���MQC��z�'E�C�!WY�)��/�e\x��	��� �'x�U�n��]���(������̗�H�d����D�s��k��܌��ɮ�w���2��F���7�{�(��l��ٯ"���k'ϴGA���NR��SZ,�Ѷ|P}���ŲV���$�H��c8��K�P�<����rc#e&T�M-��j2�ll��kC��V�7�_��M�
�����Vc�(���&��]jHp�/�g+
�aF��L"?������{(���a6_\�5��G��p�5���F�P=:�#E�S&?�;<c�M*�t�3��Z�
�z�v����T���u�R����Yy��Aަ�/��[96Z_�}L���MW�f�q��?�~[�Ҝ��/3Ex��#9Mj�G�E�G\�|]���1��d@�$�Ŭi\�qڊ6-��0�0H�g�B�A]c��m
]�h�R���KY�;�/Ǩ�6n���H���XLXRe�^�D6�yb�iQ��U�8yq��F���2��~�P�p����e�}��.�S;�Y�j���q���ѷ{����61כ
wý�Y`�Dz��x�S�c_��,���7����|1Bf�\;8Ӓޜ]�Q����R���J��oYz�:egnՠ����#6���ķ�C„���د�k�/�Sqq��w�v�4Ljv���d�I�]�:�a[#��ќ�zk}0vk�����E
��T%dc�Ԫ3�1
���%> e�-U&8Ƿ�|$n�m�u:�l}8�,�˫A�`A���C���8�\T�<���u�9��Om�ziۺ�,={���jM:�VyR\
�=�̅���!�m��x5��U�%f�&;�LJ*S�����CD=�b���8�(��啗���*j^�c�p�W�˷g�{�{T�i���?��}C�|3r̴L�.v��W��uq9F�)|�uYv���'-a(޶�žU1f���DY����a�Sh)�Od���+�d���-Pqy9LY�*Ono�+��j%l�5��Ff�NGSl#J�0�W'�N9��8w$����6��ͩߧ�06R!
%�С�����?��"�^U�9f�b$뭛F$���E�^R/���JG���`��Ի���Bv�����"����t�P~��ؐG7�ٻ�9xe�|��~:�E�7�p���d�g����l�ع�f��$�4M�#��(��j�;"n�އ6,���-�(t��J�D�T�7c���e�(��!�-���i��vb��$��Yq���j;��\���oW��� �I �3�A���b1���7*�8l�,qÇ��%�;[�Pw���u�~�$�9vS��.7�����io�[y�b�.�1��k$E�f5���繺`�����м_o��
h��N��g�!��3�<�4N�ڕ0��~�O]��~�����~�&��eqծ�'U��e;Ř�S�B�m{�JW$�03�|�1s�˂��%<)��x:^Œ�����7�,�V���x�ظZ!�#�۱�3���ӕ�+ �{�y��uu䢕�XrLY�m���n��q�������&Hu]3'�p�*�ޡ!q�^�8�r��S� ��~9������6Hٿ����}��H����'o��Ї���Cn;<����Gz����C�V���M�!��u�~�"����
���#�����Ys��8)���-���sϯ���-��D�_�|����&�8V�*z���@͵~�:��4^r�j2v��E�v��wMĤ�6Ks�5��A:���+Wu4�Z+�kSā���W�W|p�95ʓ�^�q��D�k<xvF��lQRlp�8.�y��D>#���K\@j�`C�O��oPwX��	+z�j��M������3���Mv�j��y�
�s�Y��y܀Q��a,SE���uz�j�3���b)u�U&�V�] M�&PH望dg���l4u��:�?(���6�$�&,a��l�Ɛ��%�e�j�j�w��T#�����l#�Z��o�n��@1�Ow�8ǃ
FOE�\o�Ј����]o�밾�Ш�yQ-����g�-*�H�5��G@?I�#��b6��
_����A)���B����+W�E�]�p��0Uxˆ�xcT��z��9:k��(qF�d]��u9|�V�]'A����D0G#x:��ƵލH�7�_�Kd��
&�x���1M{‘��d׊|�#�Jb;����L9�
|U,��������_:7�*зU~{ʕp=��e*2��gƈ������<y�ܻDZ3���VH�m�D"M��~��A��_�Z���;<��������tR�Wyrf��?=}��9ys���dp�+k�z>�,�ЊJ3�"#�+�T>�,��p�CN�g hڜ����0��1���~��N�?�~�M��
eR�M��߃\f�/+���e[��},��۳lmh�R�;���qTqգrg'��R"*+K�E��#Se8F���%��
M�F.���.�<��[/h�L�Ip��Ъ�����u{u��@z<.���~f�,ן������M�Ȫ��G�|��`�rJ6P3m�A?ٙ��ϓ�;v�'��C�S3Rf�W{��E���®�)i��ӧ��/R,���޿,�{�C,�g	�T��EZb� ��Y�l�:#�?�H���>ݚ
F�36�D�d����T)���\� �o.��b*������吋��1���i�/T�glӽ.�/�9��ЄM2GƤ���r	�LφX�o�S�fȋ?�8z�d�������)�ڀr"W��N�sdH|n�������)��m��#�D����w�囧?�2���/��)�Ɠ�z�<�S;���¯�Z2�f��ۙ�d�j�U&��j���1�bM�z�m������Qf�j�/��|��m��5��KDo��8gf(�ܖ�v�_|dR|��ۮ��5�����m�����dǐ�I�x�$�;�(�(˻�4���[�t��‘�:X��2�w���5�E�w�r4��ӻԿ,�פ��<:�K�l��VŬ\���p�Ͷ!�-�<�����ϋ,6ڦ�O��3k9ǩԭP���e���n��{3Ƨ��X�U�띘��=R�1�� �j�tB�;$r��^�Cf�ߋ_�jYQZ�tƴ�Y|�(�J&�M'��SGW�>9�L���i}��A.����?�r�5t�׾,:�_��e��_�Ye��y��Ӏ?�O߽����Ris"�}V󶣏Z[V�Fy�p�JE��oPG���W��Eۧ+^��#H�q;J�NF~+�Vo�
�����/�E�%]�:��|	��x�G"d:,'���s~�{�u���k��s��u�w���l��t���q�˪��3T�����}< ����r�>��q]�h�B��>ޣSf?��S]��~︣�}�b^��N��Z���m3��m-\@YiV
��es�Ŋr���&1�B9�~Cl��,;�r����>�ҏ�����l�9N*�ckF�H-��JA�r����#v����MKA�ޯ�=����`�����V��R�B����D���5·�n���73�|��&��`�n��17N���U�֚م�-0Y.��/��4�3۾��N*h˖�|!
r0�.����o}��g��0���e���tVπHU�h��yf�0�+s��_}��^�A�9���:VoG)���.��FZu�����x�{x{s�y�<��o1���Tɴ��w���w�㡣��xY-���Ӳ����R�d%��lY(�5��*~�]q�8%;eI��i�=8'�;��0��ja����)M��ҨO�%w��+joS������LA0�]�����H��|p�õA�5�OHLm�]�Xk���r+���ְY�±�nw:b{�$�L�i��io�t�^��l���m#�Qfv�R�5:X)�4�\0EaÞ�<|Y�`�����m��mڄ;�����޶�����X�hv1��e�!�:`�y��O�;/В��@��W۹��>�P�� ƹ�G�W��]�Y�U��[�:�n5Ite�P�T���1y�$;ΗdU��	���,1$p%d��^���.y�b�|��_G��1�A�s�8���[^�Uk,�a��(B����]I�0�J�\��"^A?��z�"���|����Nh�g��J\��Y��T"���1�(�;c.͆w����3oc#Dp���l@q�З�Bar��BC�{&EZ
��?Q�lx�����Ա��2]D��t��/��	`g*mn�-�w&[��Ƴ:�{{��@��˶̔��9"�#�
�݅>�,U���A��1�2}1������i�7r�`Q��T&
����c��������[�W���Ԯ+3u�M��țb@E#ÛSZ���������4�XM�����ko7�Ⱥ���V��C���k�q�Ƹ$6"���	��N�%c%'),���<H�\�v��k��+>�䐜�C�	��y����~�&�D�t�0��A�1��,Y0C�Y����#HG��nSk�J*������M)D�� ��6?���_Z��?�W���ͅ��(��+�����
�5�#t�ʪtel(�1�dZ\,�~�DE��^�l�+�0!H�gH�d��4��eG� ��}TsF9����o�^L&]�p���kӬÄP�����n�u�*C�������^��\�$>p�i4���þ���%/�TOț}QX�~+E����&�Vo�z��5����$w��4:f�P�f�8��Vb�'+�l�q�jN�Z�hz������ռp��U)�ATGO2�&��=�c�MHr�U��o:����O����8�BǴ���Nw^e׋?�?�n�4+:4w�rq���9#_�zM�� =bY�1�*(+���5��nB�؟�o�'t)��SL~*��8A��9�	$'��8�R��9ѰM6�E�(H�d��(~��IZ.�XU���'b�ۧ֠,�<�rc�É�w�9x���g��s�[�ʽ��?�c��g�-�j�2�(S�ك_�I!�(�!�`!���].��u��	��0!�?Q����$�����a���ʨ�V@âj��嶻�]f�8�5�DPQ��JR9:
ª4�M3b�vz;U��8=L��6���������� �*��#�!u�4��#^,����6���f�l9'�.��k����ɠ�m܊v(�4<;yw�r88|{����_R��h�?�˽�X�ы�w�Ά�/��^
O޽9K���/��??z3|��۽���k�G�o�Άgώ�<?�5����^��?��,Q�r�#��ø����25
�M��ό�S�}��&mtY��znx�/xw5.~i�zV�ؗ��}n|�L��X�cz	���}/�Ys;�Pu�M!@�SW���D�D@�Aj��1+8x��װ�p�?Vxu��>�>.g�^�D���q�+G��f�+��G?2�h⸦\�%�
ޝp�tA�{��O�*�@>B�(����H��Aw�`O�	����)X��kc�t��NTg�֔�Qje>��mkN� ?J��e�E��s9p�18��
�?:�Q=��x1��R:vG����uq��C%��"X}�{��GiqЋ#��lŤa�&��x1y�Y��!��O�$������~W��j��Rn?�1ϯF����jPJa$*&����s^�
�����´i���g_ࢉ�B��h�����>�4�qqd'>ޢ�qΚ��rs8U#��T�3�I)�4.��o�L�����YЋ0�g���!H�H�z�o�Hޣ�f���E�f���� ^�~�Z�.��i�<è�e�������t�0w�0w
/����s�	\�.x<A�+_l��
j9��޾B�q��'e}�X��<�X3�>]����1A"�o�D��7x��@�56�0�-�IK�����|.���ې53%(C\�g�C���Δ`sm�h�I	�_��X�S��HN-\�Mt&��[H�������L+UU�����Y��{e寥s*�?����j-��*gV�;�g��_��ە�tJ��?���
wXn+��30��܎�@��~�B�/��e���AP��A�zv��ũ����]��iw�xz�O!d\�ĶY���3�hzOs���Z���.i�=��"ޚ�X�+���'�hp�
���**.iCbQ+K�rN{�|�
�=�ݻ�[\M�@�x�X��CMܥn��o(�ZB
m�᏿�����␦vO�*�����ZEh{�Dw
M2�ę+�
��d�Ҽ��2�������i��e����Z�����$��S����7�I
4R�Ƨ���vh�78Q��\F��U"78+WY>	Lˎ�k�͝)YL����@�!@���P��ə
�mRh	s�**oʔl�(�jS�8��C���ŅuN�����iև���Wl�xQ@�	�������@�/���C�Z(̟��ױn�Tem�R{��;}�IKW��������bvw��ޯ�`A_ty���m��f"�����Gβ�s�{�KG�hĴ�c���U��l@�����h�����][���7���j����٫TKT�3�2��b����*��9H2My"	�1r��+�X%a���:[�^(�p
Ј4'B�/�+���Nof�Y����&��`>7��@�Xq/�&���[�rU5�0ob�ў�j4�4�$M�ÿ�e��`�t��*1.&5���e+J����WOҀ�촖��4$ٯ�e��u�P4bV4���g;8�8(&r�6�G�����-��9]�1r�[��,�'r�/��c50;"��طu��kc,=t"�H��
�hk'*��	�J�%����{�"�� ��٩"���o�l�k�%?ϊq7�or���h�;z;�%`)�u1�9����S��X��H,ۑbiOdJ�[/��(]�h�>�5��UJ[���%�S5y�����*!�Ҽ����K���&A
�CH��$�WU�!U]�����4�k��.Ƅ'���p�N2�z���Rc.HBJ[vyš3@���W�&uF�(*5�j )�&LL���r���M��3�ǐO+��M��Z��Vo/
��,���ѽ
�g�:������
�[�j�����%���P=1�ݴ[�ϼ��M]�u]���`\*�*���q���v,JA�Y#�+��v�"��}V��''6�a"\�]�G�t2JWd(���O��<M��6\n�eJ��:c{F{F��NYۉ�@2���޸��F�ͣL�`�r���i��0p�_��
��t~Wd�<n�/�1xf9���+�xHL`0ŀ��i����P��
�bx���l�m4q���
0UM�'::�NrU��]ud�To���%��6�B/�U��d����TO��f8xx��c�8�L�>?���V+�M���EQ��Z���J`k4^����
IѽW���fQnj��6痫�B��1ϰT~�;?!���ݮs=UA�F���
�C��Ta>J..�V�8f������|�h�������a}���BD5��u�\eϓQ��縼�i�L#-p���F����ʮ׬7�J5���(ɣ�Y5Q��<�!�<r���!��vo�t@�K�N��l頽��}4ٸ����ZXW<%�����-I3�����=wQ��'�"�l���6\t].
��#�v`��P.٨����h��z�l�H�'莻��*)��������ړ�BqH@F)����P���u�1�QhQ�	-e���B�!2g`�Ӧ�٫)>��F&�x�~�@a����An|1�=��ԣE� {��>���NBgV���;Y|S��2���X�P��b��bX@��1�]��X��	���ֿ��a �@�=���x6�B��n'���G4ߡ���X%�Qs�=Zmo���r���k��B@ѹq1Q�U5�w���odA�S'���哦^�g�!ٌp0�H7E\��z��}lU�Q�]��`lu�k��&�a��7܌>4�f�X�ǝT��Z=P�U�S���p�Y�~�t�m��Lʾiئq�觶"�(c@��|j�J�\}�k�̺q"5l"QW�s;��)tL��{�K7�-���V?�]2_p�Ġ#��B�5��\;+�����*v�P�,AH+��ąm�����D��;
���n4~��Xa�[t2'w촛�\��;�}�ɬ�_��c~1+���D�l(s[WG�A�$ 槁�PYF������s���|��_*{��VŠ{K�u�=� U��E���Y#<�KWף>��
x=a��9>�9+}R��Q9�h�3��d"6��`����e��KN$��s�t�Md��b��LnZ�.�?n:��B��|���[@�)���q�X��c! �6�ήwРc�T�J�epO��X�V�Y�4gfQ�S��NU9Y'�D]��lZ q�$�M"H�� M��[v�݋˄?r�F�=�r�~�l��Na\\TȸL
��nq�C��?�b���C��;$xC�t3E����'+h>��h�?���~�*���ү8�yS�ހk|�Ga㯩q��1�����E�xQ�T��|�>���"���P��1ۆ��pޥ��6��S
�c����*��:8�ļ�(��z[O�p��-�۾��|���4��ѩB�����9)pG��s$T��n�SsE��&7È�0��G[���T�D$Ֆ�?��&�%��I�ݱ4�!��񽵕��.���)���&�Y2J&�	�K���z���+��L<�X��=�2���z�qF���u@�T�f�\d��4��d�)ƕUxLc}ju�I����Be%�.{���9c����h����)g\��gKi��1�\�X��j6���{!�>Yg�h�h���-�+�/�{�-�s
��	��
��!���V���	���W�P3ԉ��̬@d��Q&�d���ͺ�GX���ZS)tC"�u����ɪw�knr������)[H����3�bqxK\1�fz�D���I�OJ̓jP.�Ӿ�T���2�7()�h�f`�?	[�J׵�MK�!�HLx��o��j=�B"�2E�Q�8n�_���]Ko�0�+���
��"�#�i�}�N�	��ƣ�_���.�D��y4���svnw���%2J���h�q�8�܇�-@ܦ+�6oC��C<�rW�6���qL

����F��z@�I%w�}�O���wgA:�p\(��V3�O��q瑩�.}+C�"aZѡf崹7�H�[���WJcD�Xpe�<҄����,��P'���2���<UPM��V݃�VHf�ɿZ��.�y���-)k��b�/5���ܟ��!��Ao�]O�_
b��q5�(���#������VsL���ؗ{h$�q�hi_�t��WI
�ߩ&��
ۻ�/��e:���Qɠg�<�3
:"���Թ��p4��F���Č�A�&�͆XÏ��J�.:�I���{z�+
�hu��"���6{I�����RѼ- ֪<6,��Ғ�X֘oo/�
�>��٣�_?p�<�͙6x�^mף�d���{��$w���.Л`��$����Eq9dN�^=�%z�9d8k��5��AT��5�MF�9���/��W���Z�Z.��i��`N�-bN$���Uv�GQ8��PmFX�����hC~)�����=ks7���+����H�T�{^R#�V�W�GI��U�\fD-�)��C�V(���
�����]%e
��h4Ѝ~X�\�0Y�����w�סH�l��}�iǫh�>���y�g�+�w�
�Hp�Y{u�8�x�F�Si2��$���=a6b��x��2&
Rl�^�5����$ᄼ�Wx�i�4v�YG�fȼ_�2nV�z%Gۛ�f�J垄L���h����6i�������U�,�
���R�ne\?��cA����;T�t��q��聵�6�r����,�p�La��+�G�ns��p��JO%�y�:Dsx}�m�6@���׾�g�X�f����E��axT5�6�UK�>����d|׎oKnDU�E�z������()�`l��;l�]��}C^�~8\H�<���M��߱�������B�{��a����z��ѴJr�/v�����>��/�?ڒ������K$�)�8�4�#٣�]r(g��Nϵv2x[M@��ڵN-E��/^B�U"[��ԓ���+��)���Y�4��B�ķ�=��(��>�w�q�~L��?aǍ�\�Ц��U���JS_ �7So��9�}��1_�o����"M�\�+Mad�_욆�OJ�"踡���L�?�Q����\2�{���^��Ch땸�F��^�����Z!TІNC,F]�$ͪ�����I3t��c��OD앞��>7l<�J���n���H��s�em��oO1/��ͧoՅPSr�}?][L�G�߶��զc��`�/���
��6?\{�C�W�ˑa��f�D����EE!#72Hq��/c��w&^�羏�D�x�̷�Vׇ�L7��z]�d�pA�>/��.��^�]?�0�s��4Q��Z���Ć���Ҥ��[Gs�L9�
l���ڡ�qo�v����n��g��>�K�M)*�*�����FI��z}jmܭ�rO��BۜQa�<��hb���~�׆0}����O0�lP*�e���%K�-��if������c�M�zsw��"�;FS-���ll�͟�C.l.������;w-IW�/Z��o
J�y0Z'�ُUD��x����E,y�7�e�Pcm;<W/�����,u�[6Y����C���{:��+��E�DڣL�>d�&�M���'�k���h�S$G?�{��
�7^�;[x��ƕ
埜���X��ס$�AC�u9�C�h[��T���JW.V|�.[�2�[Ul�}뺴q9��[1�/}t��*���@U(�s�Ul���ҝ�������:6��I�/C��:7�Ѷ�	��A��o���2�>T�<8�[�a��q�1�86Yב�L�Vw�s�p��~x��.-�K-Xa`]�Xd?�>pK���l!�P��E��U/ϫ�fan���e�`�%!��ϗ����M^�R�M}g�˴x]�YB]W����{b ��:N�V��д�d3�xG�d��L�au<P�$�mD�$g��2W�e�� 62u�s�#|�����z}o�9�ğDaƍ��Pn�y�9��6�,a�z�� �S�����(xך�/�Q~ʁ��8�U{e4��N��8�S@�>��ǿ�{��m��Ǟ���oE��Ƙ[�c���@��ރa�[��"U]Oz*N =n�dm��2a�j�h^�_�p�h�/�Ǝk}B%���ҫ�9�h���b��Kh��1ھ��3~��a
���E��?�k�6�"hx��p����
���Ԧ�RmU��4>�Y���,@��5��PG�o
�Q�Y��q����+�|��d���ƚ=e}Xq@Em�㲷�y�v��D�	ir�xӇ�3eǓTۀ~e�Ev�R�}U�յ
�f�FD!GDs�1m)��#Vr�vD������MtP���v~H<�I���x�2�K-�G��jWKt�M����p��N��3W�1�8��4Y��T���
DG�#�)����;M�v8�e�/�!�D��XL�Xt�z�Q�|��<��ܛ���N�4?>8�ٜ�����)O���2���\�H��-�r�ΊZ��,�g���0U���������]]���8]`�U�ęMgʓ�2��yz�����(j�f�9��9�h5�Y�Q��4�z��I��W>q��%7�P12�Epu	u�G���)�Ū�E�
0�kr�����oc�?_�W�o��ly
=�T��+��/J竨GO��r���U����j������ P|�P�K�y���_�kϖKT��X|œ�5=�H)Oh��x.�\�� m�1|t�hcLL�A���փn�/�%��0.	���R�4����]������;*�oGژ��X<��0@#���`~B����0نc���.菆�g�� ���mo��̩�E��m����1�{��GE\����Zx���Y��R��Vώ��i܋�уh>��xhp�3��a<��as�M��;�e�h�fu͕��V�Y0+(-Vٗ���l����XŐNa�'!��45f��t����n��R�!����D_VC�������dm�`,@�y��a�#���qW��ǟ�z��/^߬�DY�ww{�@���ͫ�Ų����ǂ�~��'F05�KZ(3\�D�8�@���� �
�.2#SE�Ѵ��C�I�'IYN�ͭrr���d���-8����(���v@Y���	
�J8�8�&�Atz�z����?��糓�|vk��o&p���萓�VL1:���2�x^"���9�n{
�?����g�`u�
=��:Sl����<�����DC��4�V1ˋF��	�y�2�t�s.ݻ�]�g��IQ�®nȖ}~�lmSڇ-��ƞ]fv9Vt2�lZ
"��BQ����y��x,r-S���%��Yso^嫳�0��q��c�B��JI��O5z�KD��k G�I�E
�Ka��f�LqK�K(��M�ׇlw&�=�ǝa�����v)˨y���z�L�Q���#,��BT���`�0��:z�+��&�7[���V���%���D��`3��զ�Le�ǧ^�����ϖ�e��`~s��2v�����(�S.
���Me��|��?�2��5�„�d�����z�I���9�m'��WQ������Ѥ���Tϟ���~������K�p��	dcp�-���0�}?�N�����t�iBm�ʚ,[�j��/-U��HFq�	@�\b�ղ��p� �3���O�
��*�]���V�ѕ�^����A��·�ŵ��a�/�ܩ�G��"��A)b���
�������2<C��|���@u@
�� <0d<~-}�N��[������	�k�����?+��kG�?z��D(�;
�?���Y�|����0�w>o��s�3% Z��t��1��n����
3�,�]|��[��:KW��jj�Θ-4�C�8<��!j������~<Ԥ|_�ꕵ�}/j@|��0��Ik��+�b2F9cc*!M{v���"kv���Z���_�!��2�"љu'���"'�|��]^�G�3ÓmL���$��3l׳�;V1%�z����i��D�e>��UT�aӡM���V���vC��f��d��l8��\N۞�{�c3�$>t�Bק�z��k������DP��x�9��6���ǩ˒E��#h��`��)���2�LIJ�zJ���C{�I=��	��L�Q�-’�F�G�cE�G�N<h��`+�L�����zp�R�dn4gl�+/�%�(��ư�KU���?���F�,���m��_��@���~j:�lR��Ǵ�ID�� IJ�jhQU+����`��
<��G
����"�T}W4Y�?cdF�Puj�Mn��$��0IC-6�gꚧ��Y��b
,:��̮�x�����qe���S�1R�m�74���
�+�^��Ϯ���łe����!]�pث��Ao�_/{�,0\����=�jE��Or��,�+�Dz���T��&I���3/�8LS�kP�']�_6
�$�e�`�Q=�K�Ǣ|S.1R8<����1J��X�G2f���x�_�hؼ�;'}�sQ�uz������Ew��w�vUhoPJ*������hS�f/p�6^�N^/~�nq
�K������X����6����ь��6��ȯə�(g�
Y�z�nm傤r";�N��O�#��ӓW�_QΌ7'o�=���%��?��������q������V�	����I���m8u�S،ur�^$� ��J_��[
�|�W�&QC3��X{N����A�F&^���R�4"Enn2m��d�vq��d���8�@�H�7�Pf����H���ZZe���m�l�IPy+#id	�z��;T���lQG��	��ھ��^]f��c┬X��?U��!W$�@2X�qԪ�ێ����7��ή��9�4sn�Q��B��syU"���\��Ft��'t~���p��#���C+�>x�/q!�ӕ
4����A(F�N'����b�LR��O>�3�-gs��Tu�wI����J����̤�&��T.��y�ɇM-͂*u��V�������m5�uu�e��9�wK���p$A)V��C�;��l7IN;�>d�֑�mR7.h��j�K��_f�v�#�&�r�b��F�h�|�=�چo�I���nݓ��}>��GJ�:�`h}��"�a��&;T�]�K�z��=p$�����&�zN�O����S$4J'�?M�_\�`��҉�s�??���
��SQ,�Ъ�ƺ�m�G�n�G��^B�Y�~z���gg�ߝ��n��W�7g�>{v^*zs���Skk���5Ko��C�\���WƆ	V:����'>^�)^��F��L1�sxw3Ou��l��*b+�8���88�s��Ӯ���.`M�G�O@�:�}�z�����v�s,m)y�bi�B&G}�v%�D��	��{Y[�	г6��j@�|�8U N�+؛����V7�<Ѧn��
k��r�D$��l:˖��-�e���5�#�l[��X94k_ngz�����
�Gcs,�?`4�MԅO#F��ύ���H6�6�	�4C޲Ī@yR+�>B*F���˃�ߑ#��o�KlHi��B�QD%��P�S��Ɍ���ʈn@�eP���C��wNTb=�A=J�����+J�򕴜�<���]i�pVxjce��Ms�H��?9�I�I�`�vo�_��w���nH�a	��)g_A��(E�
�,�a�V����f����(������!W��%���p�"�	{�M��F�Ǹ�[ݡ�E�%{���S����)f-]�˪�}���	�u�ιO��,x����z�to~WU��ܷD
.c�f�?��&�{�ؠyl�����*�;m��u=;������W�R6�MM�t��ƥ��S'6_�~���(C�|���9�jA@��UKo1��WL7�Q̂�H�P���C�{d��]������;��j�=�o��Ҋ���P���<��Tn�|T�;�p�"(k�	hn�A�
/p�\}���/m�T��ކn�T�ߢ=E��|6ۡ)�(�1/r��0�
Qr�1,�&�wI+*h\���y?O;YԮ���D��V��)!G�	��"he��P/v}��s'��6N�O��i%���	ݺ(��-���=��X�6Ff��J����q��uz
?�����i�A��;ȭ���J�G�4�K4�Hh��(A��.�'p���Z
�m�2��Qu�y�u�����=Y�BJ�7/4��r7����-��O����r�%T&d0
"�|M5���b�Oo���+��H,QexŬS�O���U���P"�AmktPY��;Bc�ҭ�C�����O�
�uy�a����Ux]k�V;xu��z^�I��9?��.�<�?t��B��`Vo�[�$\�4~�ۚ+�-4���Ѱ�f��K�=��k�Rq���i��]r�E��D@r�0�_E��5��PM���!}G�S�^�I�1�
i�7?�ۓ6�N?
~�X��_���Bы�z�.�1�RI�f�?*��A#�yz�5s/���M�H��FcމEr�r�ߴ�ȩ5���v;u�A���v-nG�߹,�_ŃĜ7:��J�;s�vO��jW1is��ZYs�8~ׯ�Y�.2�(;�S�R�8άk;+;.�"!		IhжF���K"e'�8�Tl�����M�&+��f)����uB���G,�%IV1��O��$����O$�3�3��3A��8bw���r�r%)Kq�!�x��X�7d�o)�>Ni���	�r6��O��|$���Kf,KC�D�f$#d�%��8`��b9a��,>��9g�.�7����Lnp�rzT>ؿ�Y���(Hh|Έ��Pq~y�S�;Ma�Fp��(���"&���	qQ�����{*$I��I�nI�Fũv����/b� ��P� �$91�����G��p�3�pS	�iH��7x���Ϙ�`��N�j��b)�z����h�$�����Jt��%�"@'q�4^ 0E�-��7YR�B��5bi�F3� c"��BT��z��\�Y�h+!,{K)W�]�`A�2��
ޟ��]\��^j�B�G$A�H������S�|�����U���Y&+��B+��zzy1�t���P}�bQatAfk�c�H��
smLE�*C+h$�C"��g�N$5
�,⿀�!���Ǔ���D;�{6�
Pk�0���Wa&$K�zy^�ze���Sg9(�?�h��O��FIo�aΠw=D)K	:0�
n�zy��j`
�4
�_����~,�LN���
4��h���) }��4%
�!�; �蟐8n�b���F�Jy?�VV�9��k���-�|�њ�6���	�K~�|kb;CgI���wN�E�����q�*�dԟ䶩��
��b q���6R�VOȚ�Q+�?Â
�G��xu�e�E��E�e�yم���Ѕ���؅���ԅ���܅���҅���څ9>���u\Cw�j�>�E{-$\��1]�}
���g�a���ʖCn�C��n-p�)b�ҦL�xl6�/p��9%ʬ����6�G4��S���su�>"/V8$ڢ�)�3"�I�'߱��C�S??�U�:Ӣn��޾U'�|+�鱵�b[�r�+�e�	]7Ծ��;N�����.���`Ş����}�.Py��h�\�:v�v�f��Dz���l�]Ob~m���Z��RA�I�јJ%`��z��+̉�xo��	ZP��v�S��♀
D��6F2U8��u��ʙ1	%q++&s#Ӓ��~Ǫ,�ߑ�W*�е�y5��@�	��e��-RZM��\��«W3�|A�mk�%��;>:�]�Y�9�'Q���&��am��e���U�G�h�S�)�]�����#j+�啁<ŭ�m��t�Z�'�R���u�˲��d5��t���&8��D�^�uL��;�^v�x���Y�S�$8
�j����Q��T�pa���R*� g1QO�o�����S#<v�����F���!���]�_�]O��@眥����g!L�e�ŭ�6��A�MIIX�@�WdlI��v��ND�8��c�_�z	���%ݹ�qF��Ҽ��B�<�VI]o�v�v�tKo0e���)��!<x��2��s�2�Z��9<l�^��M��Ҫ��=�5��D+��a�+&��Ho��
`�"� ��qlC�cC굇Ⱥex�����(�il�or�K��j��5� �+w����[x��k�n3_�<���M�F��D��J�<o�渴�AĚEM���5ё=��
C�����[q�^1�ᵿ��[w_�1,3=���"���T�T+4��Fr_��������g3}��3U��%N$�өrj�N-u�zj�j^ze}����W��s�Du����=b]i��hjEJO-��ܕ��5N�!�Ͻ2m�cu�ϡɉ�RX����Jh��\�-��P��Z��~-���c�xxX{"P�wE�6���!DUg�5��bT�}�"������ryM��qh>�9�ˏ6�操~���D�pH�ͱE!H�����\oh�?ހ�C����N�ˢ�wB{ew����.��{%�|��mQ�W\�i��x�LŌ�(�8���f��}%���^�"۫����\�
i��^�����(Z�m���us��-�}o�3�f�_�_:���l�N��	٢	nQ�c�2��۪���҈8�lW'�������ڙf�d΁�j�>l'��p�$��T����g�pva��V��77���ٻ���'�s8��&�YǯKVǸ"��N	b�	P�:^�С
[k8!c

Vl��Y�m�Ãao�d�j��ԵTN�v+���E�h8�Ź�:��D�+�L�@�A�*u�e����jt�,���L���P��Ā8c��� l;\xy���x!�4�`���}��l�躱Q1��^8��nK͸���ܑ�U�^W���ץ'~s:�Q�͈,���@�;�U�ڮ���	�z���x��W��.k"��U�P�r��xՆ�d0/.�Y8v������0�ѷˍ8^,���s�pI^���H��V�5޸T)���S/u����C��*
|��҅��K4���Džz���R�b��,��j�j�X@�)h��[F����b�A)���a��_HT!���qP��
TI���Ή�T:�tF��+�j�>w��y^C��K �s�u��Fn!?2�E�f8��]��#�K~Ų^��U7�*j 9I�x��@9�.�=�����T��1�T�a���qH1~� w8�3s)ڃ2r�V�/��D���]�������sʕ�JV�K*a�m)>���4$�vD�nv��0!3
�nٽv����h1��.������R8��ցa����i?�ȋo�#圡�zK��$T�[q>�,������l[�B[�S�~�=�|jJ@P���bj�Z	*>M�Wa�G1��AD9�A\�N%k��KXWb��ɭ�� �‡�4��\�kx�9^Pz��n�U����V�|�ٍg�b��	g�������+挟Aj�M���6�e{ğ)z�M�
�w�u�{p���2���ۼ�[�]P9�����2��
��[b��Ϝ�pI��.	p,�������{�Œ���n�������0�_i�+��1ӧ�ՌFUo��ڔ&0����@.�ɇ�Ҩ������?��t ^�$��x>�o���2|�9T��d�SU�?��| �����i~���N����BrL!� ��háB�&�z \G<=_�3d"(#~�8��q����#Z�l'RrY�d��~P-g�8`s��I��-c�X�1X�$o�1��31dc
�\n�M��	��C�UZ
WP�����z�(p��e�`��@��d��t�Tv�AX�P^Bb���n�QT�i�_�0�?m��#�R�ZV9^��'S�Z�7�!��
"%���x��6K,|Ţ̒��dW`Q�U^[�v3�U�zy�ʚ�k�x%[�c�8`s��٬�pH��A��eN�H���eAȆ<��]���x[wȏ�m���I�SX�g��~���]��pב�@ӛ�~�O��-��h5�]�Pӗ��v?�I�â��>hz���э��?^P胚@���]_h�G��jk(��^�|�&���O�����i��0F��Z)�4��b��-
�ULe��D�o?�$�gz���"��f��,�#��M��n�)�z�辯�2�趀�l%9��
������&�鞷�K���5>}z��Q=����2���]���;���S�/�����aܺIA��ڳk� b�PĪ!��J�k�>�\m*FA�/v�D�
0YǑ�d�,b�x�ʝ���iYe�n3�p��yor��h0��n�������x�u��ޠ��O��_\n��8I@)�v��4�y��c��䨤'�݅u�s2���8��6�9q�#B�>fH�Cd>�2�T}����
(=�q�NKf>~���g\���I��3�֤LDJ�L�HA$)c�EA��Pc��U{M��� �}&�B2ggV��E�SI�u�+Ȕ�5w֮4���ѸHg�]y�؞_��n��,���m<���.`z6��E��#p���5N �xK�'��c�f!Gv[@�BG�3� ���m^���Ú����D��^�x��Qy��2
�Sֈ4�h7;���W�Wఆ�z.��2P���<�Ӟ��t��M���K��e�,N,��&s3��É�T��i��r9`�L��Y���L���������=�s�6���_�0}��R�e�Ҥ�fz�d�q��Ϗ"����Irb���v��OJ�ݛ��k3�Mp�X�.����yTG���)��|v�^�~D��-Q��4�[�]'@Wt�(�H�<*b'�0�n��,�;H�Q�e�&$F��	@�ƽ��	@�����M��1Hn�FAҍ�~!W�ѓ�ya��t)%�]X�`�D��1!�l���B��a�9�Dӡ�C�$��x�OFn"F��@Ht8�����	@MG�pCtiN[,rwGI�q^��sCH�.ҁ%Q$e��b`{YJ�q6.���S��=�p0�l4�!ȹ�A�3�L3���-���K����U`�enr��Q��!������{O���!��"J�����"䛍=�L�Hy/ƶ�U0Z�eEn��U8Z��8�q��E>�up}Z�gׁٰ�<��:�!�i�~��V*�ɢW�_���x�]���7�I��4$��ITH�`����#m
��WH}�I39t�JDo&�y�p���G�������ð(&��'�l48(4�/⁛�	Y�g����@k���H�l,���	��>)&y����8r��H����*N봾�OQ^l䆠���䈱ʭ�[�L�-'��S3���!�b��	��6Z"b�E1�|Ԋ�~o���]�����?������2^L�qׇeB��"��NF^Aξ�d��%G#Y��a�W�|�vz5��B�c�+���,�BP[D�BH:��h!z����� � �h� 1/�=�#B�#�|c_� HƋ�B��E��壾�dI�ې���!���ޥ�{��� $�Ѽ��f�؇E�x>��ѣt��|�r��8�5Db��3/�H�C?Ș6�~�	MM��"E��^�HY��F�fRӖ��p�6��j"����6�e�v�
W�?���zr���T8��Q���j�A;��n���?�mOJ��<�i<���]����L�aT�?�$�b�
N�~=�`a/��iO5�f��oV�Ūw��) O.��
A�g��i�
A�}<�&�C�.��c�T���A�Cׄa��l�C���{#7��(���Q��Z)��L����b�p���p��?'�D��	��9����M#����	@��s�� �Nbe�9&I����E��;֭�4[��<�C��F�"��h�0J������e�xMjZ�]�h���~(�#�;������ ��g{o��~(����Ȝ�y�����Oe��:��iNQ'VI0[�z#W�0�O����H��S�}�zS^0�M_� N9�����ԍL\uq'�?y�:�_w���|�.D-<�&-����;3��rT�����w?�91���v��I����dEB5�6bb^w�	li�Sj)��Um(��,]��Pz���i�QՈQU�+=����v*���^�F��#�vY�;f<OƞV��V�����jL�þĽ������am+c�P
b�)���kb\��D4�2�����������h�����r�l�jƾ�ܝt�nn+%�4̿>��E��9S�m�t)��Xl����8�DB��J�a�?U��Ɣ�����;�z��}��j|Pk�kG�̪Ƥ�{D鵼y����)�ϔ�>j~tD�f�V�~��I�����O����g(�H$J�t���Q�+���|4w�px�����G�^%U��Ǿ���|t����e���IDn;W�wVW����/i@�c�y��?����l#�B<b�t"�(1�JjP��8��)�7���M���;?�^	��f&�y�`8�3��^��(%�0��F�6�F��mt�ű��-t=��T7'?Q�X�ؕ(��[Iv�Ո���"�X�NIP��\�-T�|���Y�6W�EY,�2�ˣ%/1\��]��Ĉ��w-
�3���0с�s��p��~껮f�<"�C��Wԃ�8Y��t�@M1��^�rDC
|W�uH᨞$�_^}@z��2i٭V�y�qp���=��_y�6�ki�!���;=����J��h���wZ��jY�m��U6�`�����V�>4
cl4T?�� �_�!�Vw�G���0?���V;Y3�;��0J��m/��#DZ�i�	S��ƀ<�7�z���.t��״�eLZ㪟Zm�,��f���uÁY�����nu�.�EOdg���U�U q�Y���l��c]�
���S7��f׾Jo�t[w�N[۔kL�ߖ����
uJU�5*��lGЍ�/yW9A�a�Rh�f�S���e�I\�'���@C'}�Eq
{�.��ފ΄��u��~#O��ږǻ�1�x�������1R��$�S���P!rM>�<��4��Y7�u��[F��}UV�?ֵO��>�ڬ�*0)�
|	�[|�7/*H�&ݵ�!�����΋�w��Jbc�V�U��*�a��~�������1��
�i�JC�L#KC��qs��Z�M}��F,����%n�J���܍M�s�_�ތb,�cCj:$�3A���m�����0�X����N��lv��yU�!x�ov�����e�)w�V�P�K+�K�)K27o����k�m0@9��[�P�vx��r���Lb�,�B��O:s��X.��ܺ`���ua7�����ٕkay�ܘt;���fNi�1�ĄP���U�W 	�B�Q
�^۾��������8.,?����&�,��hu�C#%�}��k�)se�+��PW,Jѷ̋0�b�Ŧ�Wm��eD��q�6_�C[�蹢�Eh�c��&�!DW[�"W=�\ 9:IJNα�)4�4�kɍ�A���v�70D�s���
�i�/`���;hïGQ�u���*Tj�aw�)�j����c����؊ƿ�����Zv��=f�d�n��T�/=��/@�_�ef�y�(�M��؈��2]�>�Ia��\�0-�gC�����{���s0E�-*@��<V>�Ӳ8J�*�W�DU�3�T|��P9�ZA5	�lQ��-Lh�:\ދ%�1�M��X1edm���s��N�t���]��V1���A�1�b��5�6��}�ξ7�^qP8�j<�v�&��
VhX6E�q�`��X�;��\}�8�>r=�T(�m'�����*�$�(u�����/Z�jYD��z;�����jm	S��D�Ax�XQu_�������<a�ބ�.+�V�X�֒"i+ZW��-�]R�
f$KkO�O��RM��
�:�����n����:���~�N�ZT`\�k;��3��VX����q��X ��X
�����B�1FP�c��f�E��U�K�ډ�*3��u0Xm�Q8�n��:E��fêeL�I!tM1�ꨉm��2e��Ϡ�$ã��I��~�
����nYf�W�ҵ(_m�
>^O�h�kE�a�tQ������T���x����pai�A�YzÎ/�
&���jÖ���sl�Ѿ5�"<kU���(�4n�5@�ٲ��oa~�m�n�o��t�U#ݔi��΄
�~n�������*-X'���L�~�sϪ�a�q����ŏT
]I�7��}"	Ҋ�DiA���Q�IЎ��gg���'���xD%
j���d��(��r����S~�G�=j�|�)f�����R��J&s�P�R�
W�4�'�몊��q&y���T�S|����;�����'��+�t����	�}�o��n�@�̀���z��}���d���G?*N�^���*O��&��ş�hV2l#.T�p��4��l�����a��ދ��</���U��^T���g�{���e�n�z$����
�o �_��Xe0C"o"��������t��ڱ/?��Kw�HJ����;�*JA�������J�2��yV{���0^�)'
+V���A�6=y�Q��/��P?6cK���X��wZW�F�˹L�<{=he@�`��%n^���:r��*$"��)�SP@��{���F��w�%DS�F
���0�M�,�A#z�S&�;�}���	^�L�g7Ҵ�nX0oC��{-���t���
�_Twa����9��e?����쨞NNL��f��hD��Df��n�m
���1��)��&����L��U��U�w(̽Dc��c Rk���?�F�B�|n�3�V@ɊM��_��n;����"��9B���jA�,�x�^�kF�ۖ��\M}����_��}B�a��#}a�Z:�h�w��N�8\�
��:A�vS��PnZl��r��ۍ���2�<_�w��%�'���_�3 Z*��:�ߩ�U�W�.����$������u�4�?�-X�oz{֜<��z^�{�<9Q�:J󂶦
��X
�p�t����)��g���@�wɿF:�K�J�bT�
j��;o
��o
C�4��&�>�uaA�B�P�?V���Z����J%@�TY�G��=&�)/��L芟��rj#��Vɔ~�g�����y	>h�A:��=�Q����Q��p�Xڀ���Ǘ$���I�D�� �dY�T-�����w2	��%~	�pq�-zZgKV��TQ|��̡'0"ve�p^ �,�W��)PɊ?K��G)���������V�v�ζ���mu��q����M�
�g�ySpY꭫���w�p������лe5T�w��'ZZ�����v��-
�=΅���M_�Q�~�?)�cα����F%J�R��m���0#X/S`ñ�F���oĶ�X���璻�F�^/�ŕ0_`���+���`�k��;�
�(�TnK�}�
K��ޗ��eފ�0�A��]Ĭ���j��$�{���:tn�:+ˬ����ÃǗ͍G��z��g�Np��Rq���”p7t�k������^��ܱ�@_xⓇ�ꑩL|Y�<��5�A|��m|A�}{.��
T���
�q�����񚂠����02�w�U��ٽ�2��+>��z���=����AO6��Nn�^�P��;�qɏ���!�"�
$�6�p5�{�[6�a(��|��2�w7����G
�=�a�e%�OND��$�zP�����3W��|#�_��QU[��R�75�@� s�H��FGhx�%�2�������C�y�-3�kf�)PUT���u�Pn�n��f�椺�D	^���3s(j��7*y�DM��}�o0x��v����6������e�fs��I[Fb���E4`9y����)o���l
����&�����`��XL[��1t��b[^!>x����;��<-?7H�}��wS�-ӶW�MU���T�ݎ흪X
<>���O��}d����$ޱ�X$��}���u�D��p�������
e�d͞e���-�\-��׵/'^��j�a��,�������m�:{�M�2g�Kk����uX�i��1����]�z�Ʃ����,P%vTHN��3B��,�ꗨ�I(��$9��/��{#썤��O�z������o���iE�`�cΌ{��(ܥsz����b��c7�G|���2��D;�_��>�k�'�3�6DA�;"�=([�=�Y��}�7����4@��N��� �ue�=@�i��4�jC3�UA�YI�	l���5���@���]M���7�Ì��1Z�r�~=�W�O��\���$O��oQ{���q�^���)/|��ͫ����'O7��g^������S1�ds�n�o����>�W��t]|�����j~,�Z׫��"+����t��,s@k
&�x9�0�'�^}.6��-ao�$h�60L�F�W!�8�PX�O��`��ŷrb����N�Ã`�>�%>�\?0Xh����>�rj�@��n���]��5'�l�<Q�w
�%~VY.J�K?ғO0�Ry�=	}+d�/�D�s٥J	9Od�3�-`��/+&�?E�A؊��L6˝��G���V�um2�&�Ё��h;�]7	"��O�����I&��EWwz�S�F2S��㮂+�TMY��
���A���,Z$���Q{2T[��ꓡ)a��伆��v(���b�ٞ�fX�����u���{*���&���A�G`����)i��Ç�JH�#AP1��^�W?�;��o��E;Ǩ�O�f5�l����t��*gDm�D�$��m3gEXr?�D4���
V���8�u0*�����
�fN�
��3H?�{U��c5�e��Hp&ἁ����p�N��Q7
��yrH-���U�i���o�@V�$94K���S��Y��Mԗ�4g���T�|&���9�Xg	ͳ	�u�δ�gT�G�tXM_7"�Gn���@!F��+�U޷�rR8�u��	���0�')���}P�:��
�
�z��+����Z������b9�����S��$�j�A��w|'��^1�_ĝ�I�*ݭրx�J7|�^I!�G����9.���u�Đ4~�٤w�F��1�����
P�;����(����`�Ο��b�z��9�jX�b����<fr~��=|��w��(��Z���|�&���n�k�������#]���%�����3��y�Ԛy:K�^��:��H��]t���w�UťIG����6�����Mj��f���Q&Ѭ�F֢9avzZj3�s^ޞ��47+�h�"-<�w�<,$�%�o�d���Ų=Q�Q0�C���vN_�F��"�ɯ3�^²�P��d3-S��b|t���0�V4Pm�^�K�!N`G�B�
���q�[(,�:�R��[=v��L��.�h��Ξ���j�Sx8�[�]�c�8�g��ٚ�
�.��Z���Š&���tێ��%lk}>�n�H���(su���6�'!��g����R���:�6[_d�g2�}��f��s4�y�*B�)e�O�v۴�˖�T.���h"�+}nNDBn�7|Q$sr�A*f	s�')9�ؒͷ�J�L��$/�(��aԩ��������7N�L�.��>_�K�r������V[J|�[�A�t�.�$E�KXB�25A��F�C?�Y
��!S״Ъ2��>L����K��fi��lဤc�
r�$o�<=ս�D�X�)�Ą�k��a�x�)?|(6�.�E�f�{���tj�c
��q�`JBf���U�|V�Z�����,^�c������^��9�)�E�.�gT<醏�3Պw�t���0c4��O��_|{��/o��x�����_�)�����ŋ�o��{��/?�M�T��>,5A�6n�ŭ�n�����r�&�q�����񂻸}�s2h�eg���9���)����
���~$?RM�5�*��nu��2����>��0
?���İ5���M��"��g�u8G<�j�����1���GV�1��嚪���~|.��vv�W�M��%1��O�Q;�j��NVn�e��>��k���;�iMK.d�g�pǹ�X�~���e�b��.OD����~�z�o
�ƶ��k�����`�۔S��vW��c�OT��[^:�[,r@ܬ�����g�1.o��˜�C;�����+�r�ߵ²�ؼY���uP�懥^􆛣|��t�mlK6�)߯�1ʃ�p��M��j�0�m�"�+9Ip2����-�nР�o�����%"qtv�P{�s�V�WiQ�dʲ�)wh����ޚ����C��b��|^�T�Ŝ�`�IC�k�t��9/1;X�H7�Z�sTT$�R�"Y�=���3V�
�?'O��6eZO5����1*��p�Ə6����������x��s��=�7��9��$v(�����;�L?�{���GT�_���&�����7��$.ޑK���wz����>���]!vؔ�ǫ����d�U���8w�k���0��{���e���4j�a�6�UqR�K�C6������r�	����x�K�l޶�Z�s+��Q	���T�{}U^75g�ŋ��;k���-����a9��C���~�o[��yG!�2:!g˓�G�F�y��T��%Zc��h8u��8i��r���X_�FF� ��9,$�D+cO�_W]4s���A����#(`=?-�h�W.�Y }�fp���4�
O��Ea��U>U`q�P�
�hK�5�Շ&I��><D�"�#��Av3/����
w�;�V�3�3i�7P�or�9�`��1u�u�٫uS[IN.Ƭ�sAͬ�N|RQ��y�5�oA6�(�B�F1	R�b\�RE������8���4��O43��${Ln�N�Zcn�[�IA@�px>��eHmS������C�9ˍHӟxق�It����u��Z*)�5��ݨ�}
����.S�<'V?�Hs����E�To�v�I����l�J��~��v@�WF��^��A�_ӂ��o6V��$I�w-�#�vh;�,[������W)
���;�/�z�;vT�<�.�_�xY �/��U;������f��VS�z�+D�^�oGy�������	CĦ�Pś2}ƨ��p���z!V*�$+��P���\�/��0!C��Z>�R,������`���&����g�xßZ
mV��Na֘��
�lɼ�P�a�S�{�#W�ڑ|SL���=>i)�u}GI�(7���G8�r��wV=Ȑ����Zת6�3���.9S�E��<X��\��{В��A@�Ƨ��5e ����'�p��O����Ϗ�D�P��iG�1��p�'���W��s
gg�b�	��`��F����'��KS���6��9R9��N	~��;}7||XP��o�3N
/�-L�9�tK(܅�M�5�b�]�
���&�_���@�q�9�
��rf)�;��J�^ꓟz�F�253�o�+Ll�@/��D=�pr"�z�|�|!�n%>	�/���7�{�$�N�ep�u>C�_=�&87��4����
%P-�I������t9+�:WuA��7�e-����żzO�V�7|�����w��۝���S�M��r�/��[���e��6����f�3��T���c��Q+8s_k�CB�ji��j�{�S'DƊ�J��v1$)�I��1��
��q��
�ͪ@��q�֐���CV�����gK�P�_�X����]�oU�W�E6��I�J(�S	�RR/!��u�Mbb�����;o�w�۬ۂ���^��w_3�߇a2R%1�a>�e��Dy��-(�2�M�U��傿�f�շ��1�E�%�p�`�o�s���Q!���H�|=���H���(R�mϥn��RJ�;	��\-Lj� ÿ���֛C+!������Њ�Gu��Û�0OK,�>�_^�}��H$����;n:�uȦjh��߅nH\�O�|�^5�y�M�yZ%o���*W��Z�y�,�1�S;���+�:��0!�O�!&�=��%�WBX��%����y�à��4i�KɮJ�TO��{
X6���~f�J2,�Ds�3����2�	&�:�HI�
N�٤Rcz4MF]	d}��[�Lղ�T�����^i^	|�h��8w�a�L�99Qj��tжhG�\��W���W�Q}S��FW���!<�'3d��[���+a��B�F/ٲ\��ڎ?&��'��C��@�wی�g�O�殀�vY�����|�t��Z�G.�k��#Z�_�ߪ���E=�u#�FֵS�Y�ĥ7a%����E*��֮ƍV�f�5ܼr/�ư�G4��w�(�f���M��>��LBW��!�W�iE�d���u�[Uj���ef��J3Q�@��.�m��U-ݓ=�X
N����=�~:�G��o�!Z�5�;��/�J;��=l��M�@6
�O�Q��ȘBs��z������xy��̍�L~з>�m��u�PZ	_��lӃlQ��ԊO�0Bi0��3n�/�K\]pc��2�nIMl����|�VU�QM���G�j��A= ���RU�h��ؕ
�웢��
�G/��)�k#!��[B��o"md�0�N��h;^ �nw�Au* �����tX�ݼ���D�܁���s^�^�]�غU���U�Y=�M��#7=O8t}y=�"�P	dĞ��H�-<�dkfXdmsb'�\����8_�Bf��̾�ZN�����Б'��z�W�	��%����S���LHuy�ؖ���B8�>*�?�>{�UN��8�T6��;>'��u�V����%ܥN
=�����K����ޞ��au�)k��K����eЭ&*Z��o�K�b!����B�
��D'
���{�t8���_�#�?�cq��n2��M_��Xt8|��=�.��qY�7����g�2�
������:	�5&��]5�O�O�_?�g�l>^�S
b��Y��z����C�.�G�>��B\�ώ�*u�J��
F�:;���� v>@���q��^N;��}�V��e
�ٯ�\ug��:�\���
;߶J����B_�+��"�.���5����$�2*@HP��\}�n���X���|�U�|Z�u{�$T�PZ�l�,�V	B�JBn����IU�#��
r�bھl R�����o핱���V��bM�^T�ZA��6�HBP�0��Vge���S�J�W\������V*iQA�����HI�π����ȋH�;��/�Z{h�L�M��Hd|N���ω�����aV enM��h��?�=}�
{S�o�q/Ѓc%�W���aƛ�I=���p:�Z[٬��M�ܧN���6��9��4��E}}=H3:g
�~1U}�GS��g3�S��t�~�W�&�t,!g@���^�}ҔB�r(��<Ԇ��v�����h=�RJk���G�t�e��Q~1���j����1��e~�/��LX���(��p�Ū��CM�^��]�!�Z_N���,���I:�1��Y=^��0Szf�5mk
����0$ü�?/g\~�̩��MMΠ�){�m|5�H�h�z�XbN�(��d$Wݎ��jA���i:��|�>x������y��~������` �:y�����tMe��!�����1
u��	���vS��7=S74��~�O17P�j�Q�d�ӱ�ѐ�4���ᄉmĻ�D7��+�`T�~^iQ��~oo�s���Q�
���Im �g���Ueͳ��꾾���
`+��R���}�T���ߎ�5Qz�	�(�*W�
���ʔ��m�/��N���6=u�<���hh��Q����|4}���/��X<)l�p�B�Ч�K��d\W�r}iD��&`�งag��`v�1	��n�/$>-lpiɈB�t�P���dGٝ�@"������t�	�{g�K4�D���E�C,&Т�4��ȧ���p�O�?1�p)�K*�.�%F�j9D�~�h�V?ѷrߕ��Q�`^��Ҁj��*q��k&!�؆�Ma�a��7i�J;�!Ylu2P���k�!�_<�D���l�-��dϸ��
7ِ���ⴣ����'�nB{{���{O(Swˬ��Kqd���w ���'�n �Q]�"P&g�k�l�;"��ɓ�S`7���G']fGg�pķ���*��2�f�V�
JT�+S��7�\��m�Ny���,:O�SaV�A�4�G9�bz�W�>��>@�Qm��8@����]�o�~�_����ņ��C"�K
\�E�9-���8�8��I�[e�~�P�%%�汰M���p8�|$%Z�Pk�u=���i�ҵ�?<J�坽_o���x�a��� "�W��>�����H�z_y��ɝ�)ʸ:�j�Bw��x�O-�z�\�7�X���~Fy�B��b��4̫wğ���=x`���_�7D�/.��_�5�˿.���ӓy�����Eq*���ᇓ�v���Ջ��u����P�Z|��q���e�xu�����wӍ��С�=���Wi
+��{��c0��:|<_[ˇ�W��8ڞX,���j�;���]R\���n�����<݌������x���zq{�3~�n���k�dk遲��y/\2����%e|�3Շp\�^�12'_������9�"��~�+�-��=BgH�m~�;���uG���<p���'��	�˾RΈyKpa��f��]����77�ӟ�?����e����������o"*D\�����F���$WŪ,�7�.B��|��Cׅ�٫_��qb��P�e�C��T�!RBvjəCk%��u�^3��](�P�٪.�XDu����6�y���*�Rx#˖��
�,[�Ȓ%@7�Ѡ8���ڌ�
�5�)��*�ʫ�v j��)A��U�J�I��(d
�:���6e䙧$�
��I֙+aBm%]Õ�Ɨ9 XY���Tg��A!�Ǡ4�I��rХZ��$ը�Z
NjKe<��tU�j��5�:De�Su�t�f�*��"���X�|QE(&W��3^��T=$[���ba異�lk\d�`���m9����Ǡ�e�k*lmպ�=��G����N$�N5�N�8��7�g��N�)cE)�Mn=|m[m�/�Îa0a�����s�2�@��k��0~(�l���{u���oƫ����-0�Z����]˚�o�.T?<��~Ҥ	�
kϞP�
���q��:S��ON4O2��Q��,���ֳ"�mCjCj�U1b�E&���"j�����|�!�Nu�i�+�.Whx���C[�u�td?4����Jt��"�4P�ҝ�IB�����)PG
Wl5�5�	=�Dj�$���֦�:��,%J�H�x��[K)�r!��_A�q5��;�K!`�
&D4Ka�x)��	�f�@�O�gY�/h����EA}g�UQ�C�gB��
��rr�;���[��U[m�kuՔ�v�jUn��Ge
�l&�j���w%F3XҞ;�T�Xh�`�d��+P���N��a\\��J
����AS�N�w�螃7��Ԏ��a�6�U�
�u[�Nw4CR�-\�K:}���n�qI��;Q�Em���g�M�t�*tIE����0���]��ť��M��;E^*�j(��1�NR����d�Cr�Id��"\�YrV���N�1Ӭ��i��<|�39i	�[I�P���G�o�n9�k���+�ҸAU;�|]5���#��v��)Z���w��@�	bu4N�MQ�e�[6s�J��^�����qH����s���Lw�v\����I�|��qXi
l�1�����'�H�i�Z/�)��b͜�#��n��T���΃lф����;�ƪ��S��^SG5��*6�����-�]]ۭ�QY: (��
/Pt�`��i�
���M#�r��U=>)�	�(פ	��l�-����a����t#YL�|�6IL�)4���H�7�~�@� ��i�i�nHػ�������7U�ݿ�'*�D�F���:����?�	��)����S��|ں������Қ���Hs�Sb��i�	%?���:�;Z��͙�S��Ѡ)H�Yю���,�����8_QD���1�C����DZ�;7?�y)w\���֫8C8�
V�d9M�bY,�2�){�r��pU`������7��<��r�P�B����b�r3��BH�ɬ(j����,�U�+�gӢ[шT��Zf�$�t���Ms̤�c$ӯ��|Z�����$tǩ&������T��)�o_v���q��O�@��rf��V{����_z4��;�'J����GE��3"�N���a�	aXM&���H�<�	%�%{�������������,sK���*D�HA^.&<�=lv�J_�u6��2�B����k�u
,��)�5���K�I\��q` ��1�Gl���ނ�4����\Qo�0�+^�gTc�`i�K��I�S��W,]�(�B�j����3f��TS5MU!1�}w�}w���A��~6	�B�0��@/�46ş�L��l�GX��@�i�ǬV4�p�9��Y岜$l��3$zz��~��—��%�_�[=yM]����ҋ��R;����
42����B���۫B
(\Rݱyi.���l�Ƃ+s�rPX;�+�’�#�o/�^�J���BG-�heӱ��@�6f��@4�H�} ]"���.}I�ϽJA�""p?[@����H��ۊ�q(�uG���!d'/�:��� ��['���מA�<��Q��$a�*��1DUCӵY^V�h��g��;���8��S�31�n`CJ�R(�a�<������(�F~��|��k�yZ2
KP�3�s�cG ��s
�Å�XF]zj�3hٌha�6��kwzv�����AL^E�ɺȎ�{���b�,��2Ff��$#�k��0J'�
 4֏��=Nf�\������.�ei�`��[����/pdh�>Z8f�����g2Q-{��F����fz�[Tϫ!��}��j�8G���5�K.N�C����E��)l\�w�ͮml�_��$N@��(�cB�[r�E�k�'^�q�)��<�r�%̋08L�
(����>�q<�ZZ]�$�&)��ȥ/��TO���sjl+�c��>��#Y։�&Rx e�-a�Z,�!�D�c3���d�,$�n����S�����Zˍ��~|V_n��2&�e���>)Qs���r�橩��$�߷���j7z�Z{��ձS�5�̛��XW�B#�u�
�_o�:=���u�����=ے�Ʊ�$�d0 xY.ה#o�W$��H�U���^@-.I\Iky?#o���%�/s�%�W�|Y��������^!����v�X��ݜ ,-�j}$�If��Vmp�����t�VV���h�ҟ��ڤ�p/V�)�W�7k�A�@�S��Ž�[�Ȃ.�Tz���1@m|��${�1��&��p���?���u�a�����S_�G\^�����@GR��n�:1@jh�E['��z����8�icǥ�@��!ԓS�􁎥4<x�J��~����P@'~�vti�r��h*�%4n	�RXퟵ:� P���5m���6�$w��;#���f����KW��3f@�w2�s$�G�$@��Jn	f
^� \�k)dA5���LZ��xӡE?��EWm�Y�Z�N���NOqu��6��]X�%4K��V�2�'�	��Y��d������?�P�ro����f�ov��Ar;�C�h{�(�:�.Lç��%�<D�%�ꡣ���#N�X.ƕ$F��9�fL\�̔�����/vz��8/��=n��̥4�I/�24ɓ���8�c��8����r��
��b}\��$��ʛm���s�HQ1`GT�Y��.�-�ǔ]�&)<��:�~l?��
��c��&�v"G��;Zz�6���Z�2�z<J��sJ?p�CC\Zc�Iv5Q�S;�uvJf��3ԥ8wu/H�
�6@�!(�.5��Q����J���T�I�,��n,b�����r0��uP�F[�XbQ�6{t���(h�2hF��*�
YӁ�o��C�շ��&%�7)�N|@CS�)��q����'%��D�a	�f�u6��o&v����i��QQ��:p�f�����;X �\��LN,��|T6DU<X�l7��d�?�5�{v˯{:D�E��"�װ��"�� 2:>����<"(x ���fE��c2��u܎q����O��{�rB�v��u��ʋ��"҆h�҈�;�9���q���&h�b讖Y&��8���.�K!>��U�Lٸ��e��� ߬���WyPw�κ�-���0�&�����2\����'�9%���Q��֒Mؘ���w�`����&�����q]n�F�����OmS�q<vK7�u �z	J�Ц[���ч�ՉF��+1����ڼ��ԡFA4u*W�(0�!���6�p�C�x��4�b�E&��x�(�x/V�0��_܁��^O'�$
�_6Y�mC��u�܉/Z΢�C���1�CS�����B�\�qǽ1��z�^xb_���&7�^��z��
(����$lEY�<nd��5#[x�&�
�x��
��r܁b�R��t�qC0��=�9��2�"�]k15ġԤ�{����<p��b
|2ۥ���S��n�"��/r��T�B�l���٣|�
o�ˆܚ:�"��e�U�X�(kRZ'~�5e�|M�����\M���"o�Q����[ѹ�k�(�vQ祕+v)*�R^g�u�{�z�j�͸�*��YL�hӁ��J��#PTl#��n�g׬J��{�Mzu �CL$��1�t:��`�K<���	��餵!�6��1�w���Ӣ(xa/0��|E��׾����j�+mE���T�a�p@��ͦ&Mxyu�9��چ�����;tj�d`x��p�0�B�N?�g���&�O�`ւՒ��� ���2�M���#�՜�\@R򣘳�jx��l�����e5�����mF��z�=�
�(wش&��->���P;^�w^s����~���b ��F���"}�5?�]��@�Ϻ��>�<*���_��/��al�N��x����v��Ս�� �/���&7��bh�L��ib��a�D���d�f�i"=����&:�6�9���Mt}Mx�n��gR��N�P���
驩a;�5��&f��`�^�l�_��S����m��A�~�u�6Ol�dP5��Zmn����9�+��q�R�&Ջcƣ���ց.��_��D����Yi;�c����N;PƉ�`Gd��^ٗ�.�J��ˠ:�Tr�wׁ2Ntjw�[�����.��?'~w(�D�vG��"U��C����h��R}<[-�ۂ��#�"�Z�B��/>��F���b/qS��������v����Ht:�����x6;˟�F�<�����~�]��
�\pT"
:�w�bu�^���e�Ӊ�?Dڷ�������{Q8x���6rEO��eI�_���F���3\�a�q*q�K����.:r��z��)�H����u��eF��fmw��l��D���(s]X,^&0�$$4uz�V29n����T���F�&r��*RR��)�iy)�jZ�ѭ�f=��U4tK��o�Z�����4k�R�l�jW{]�	��s�V��������^��^ڀ�����Ϡ�s�G�;���=Y�)7��=�N�+����x���`��P�X�¨(�|rf�kF+2 �˗��_�o߄�2�$�{����U��庁!��煖�����)��?�v��K4e�a����F�:�
E ��GS���WV��oe"7Y'.��P����"(��v��ה�Ю�1��������iU�(6��#�"j�t�b1�uU13ӓ�.D���2���}~�9��?��[���ݥUP�˘�H^^��0�?KN�WWa�y ���P=}���Jɷ	� �,�Dܢ��K�d��d����[��>W�"� ���w}��_8W�[nc:>@�8k�J@��5J)�8�1�l!��3�^�d�-V,��xB4��E�P�ی�x��SR3̋�ea^��޲؃�M';�T�&�P@��j����7��|wR8nI��O\[^7پ�wO^�^r����j�)@��T��n^ت�xF3�ˋ<���k<X�N4O�u�;�����|����N�B��z�/1mQ<}-�VX���[Q�ph��c->��IM>�3�}A��{0+:�
�>�
�������P�0=������Z�Pu�!�<���e:R�S:G�`����uo��q�XmF[����!�����f۲�E�J��I(�-ۭǠ�ġh�I�0��Ƃ�Lذzl��YIa�D�[&��q��2����\b�zʡ��M�P�wC��\eZc�e���l`	�x�\�40�Ŭ�5>��=����IJRtz4���3�SK��������#���`�)<'��J8n���Ë���F��6X���f�;�3�j��&	��)4Mv|W�>)^
����	�Z��������ni4��U���T��w�T����/�/��CI�g��[��A���m�oN�)X�U��r��|�jѵ"�R,[RsF��u�4aV�p45

�'��IY�_�,�'|��AB-������[l�FR�њ�JIoNJ��N5f(E	�9GOڷ8N�K����v3� R������5����+�:�:�=kF�
���܉�֝���Ehn�_�[!jW�iTo`�����%��nX����P���YR�=�ߣS/�g(�Mt�
'-��dJW�[�ǬM�&��$�;�-�5,_num:� �dw����HY(��><�p0��DȢ��Bn�6�'��_��~(x<���LTr�ͧw�5��2�Z*�(,du��\��R�gv��X��_��J�V����z.}��nw�����-�N��G"�cd(�2��)���(�[��Z�t*ka�����cL�.|�a���9��N�����i���r�t��K�}	�#�{"@
/w����-3���q�p�0R��7B�<��EJa:�ɩ&F�|(��`oXmF�գ&�2ez��bV�*���0�D��#%�"��o�ʛL�31(�e��|}��Ӌb�R��#$#[�.}�P�g��f�Պ3����-���#:�X��T�T+��#�4
E@~��E��I��W�?W���x��E����߰ԛ�:�l���$O\��gI�H�j�����Z�p�Z�*�*���L���0��(L��1����j�kS̗欷%G�7�d�^嬫�&s~��`�V�3Fk��| s�ʿtPaNbc��`J�ZW�>9ϋ�hF^��a�67�T\nnsB_>�F�Z��q.��^f~�5�{Q���8ĩ��I��ŝ��dߌ)��_�^=��Tq$b2�+�"Ʋ�>"e)��>��ҏ�������d=_A����%�h�(<�[��'YW$i>*���/p��b����wˌ���w����'�[��z&V-��o�=���'Ks����Zyw('9i�ДA�L]Ɠ���/��er�&��~�?��__���S����7(��QH[ZJI�lr[�A�E
��&���B_��,'U��䬈��~�em'eEL�R�Z�"�p�X�{�KGF}���u^�">�a,�o`�(��C�wVl�¹n"���c��xC�x�1A��BF~h�6z'�N�3���a���LV|	���c�l�����;�".���M	
����lR�*+��m��n��
��@J$��X���ۚ5�f�WH��a#�8V�HKS1�c��`�;��9�An����u����>)a�esSLJ�#�"�c�q��
%V��0 p���T��f������us��
� �ئpkGW���V\��b��SVi�c����u�]�%	�fQ�DŽ5U$�*�>����|�\�?NB�G��l�:#-3${bbf�C�l���a��2����\�U�1�����#��q׫	���Q�0�"�1>x(��/��,*�΅h�����p�-6��i��9�%�9��V�5,?1�D�qD.*��$�rJ_�<)��WXOY4b~;9�n�Bz�,u�z���r7��W�&�b(�{ ��"m��H�9�e�|���8d��1xf������h���i�uJW���ӧ�#OL�PL'�b�����
f�	���w;�f�i��.a����l��T��l�9G���=

d�~D�[z�V�K�����ɐ2�.���|5َM���r)���aDy)�%b��8�ԗ��*�'�'u`|T�"ne�Q���)�A����8�#Ȧۅz�U�����?�l�s��>�2��n?���N^g/&7�M�E�e{083z���.�x}�:3a��, 1���Q��T��K��V�϶��>�@�M�0�VT��{ˤ;��7|�%�k'�c�����
#{���SnV�+�w�\4�
ă�Y��+xc.����XC��*_m�x1���@}��m��2���'˽�J%�/x"�?�]R�*s���p��!�2d7~��#�ۛi�
�%	zIL�aIoMw�2����� �Y�9�YR��͎�w���ϖ���|�蓲5a���X��G)��P��s���U�C5��av�z���0(�XR�w��2_Fˮ$��ST��ԡ�p->j�zU6[�W�����8�~���*��"ܓCXؽ���yx/]c�CL�@�{��(��5A��=zg��߄�
�,��c,��m�d���e~��jG����[t��,��Ŝ�78��_��В��tW�pA��4�i�7�ً�9��ʊ�z;�5���xRM�Q�9z"Pj	��f�[QD�	������7_Hے�� ��	���W�	#�"��_YF�
�	ڇ �6�N~�?��_[� 0g�ajSf����=�q�?FXFX�<g��#����?���H���M�	����ݴ�ub+[�a��/bC�p��@��e�{��������Eё#�0��?Ǜ�;㍬�<�I���
א7�}EЙ
�P�j#E�@�pq����hcy+F立S��S?z�1�$O�M%��%Y��=�zØ}�;��J=X�-hLj6�Ư�;��-��GC��[�����g����u��>c�!�<�*��`��E92X~,��f�qy����ge�v	�qJ+{�/~�3��h�>u�,��W��%�����R��
�H��W�a��BB%�򌚏.�΍�:D���ck{�_3L�1V1����g2h���\�á���wS\�?�^(@=!r��'%���[J�YF���3>ز�Nu�ǂ��5�|�|f���b�0�z�f�5��H|�e��C2�ư�Z'̣�gO_��x���QH�.�*&o�*3�Y�j�����qЉ��r=Q�emwK�u�sW��%��n`<6�h�!>Ƅ-��;Ws
|6kE#5�Q���VG#�:h�/�`�����]�o�6����u��dCN��I����aؖ�C1�-;F��X���{P:�G�JP�)�*�ݑ:����/&f���(�I�XG��2���r���|������r
�;.~-�U�-������b���|UO�v��̔WV�Z��L�J�ω��BBr�B��1ܲ�-�D���8��� r�I����X%WЖ�V�}���_!]~?X����"%��˻m�����Q;Np�eP�|�v�XA�*�ȁ��3k�@���E�g�_8&m����ǹ�ς������۲"���T}��6!�	F�t�\������-��‘�낸_mT���LX}xݦўb��yQ�2^��{���T��/K+�N�u�&ު����,�q1�y�BG�98X�� mU�z�E�'8�� �T���ut/5���F�M<χ��4�3�b""qՍ�0hc$Td=���8#�R�H<SRM�:p2&~�2܋Uڸ�F�+*���D���Q́�/��ŋ�=}�_�X�v@Lz����Frܻ�k�D���LMfO�Hr����`	p`/fy���sC��Kh�1���'^釴��VíB�6�@:�m�9[�q�P�ex_�ĉ�����?ϗA�[�e��/�%ɰef�b�����K�KO]m&��B�![T��?���BB� �x5�s9&&�iPe������L��`���43ȉ����cuk���п�O�ɮL� I�J�A$�۹^���K�G�^#p���U���cB�f���Q*����q��5��O5�y�
�B\S��V`R�ٔW`A��\s�UUZd������]��H�J���v��O�k(fk�8��Ǯ��]��Aȅ��`Ǭ��{�ԑ���I��(I?�:t �[��E4Yn>����"�y�0��tGI��Y��e��$p�+�X��*O�R&)8RPS�`*�世�}�I(R@�]�m�m�JF���\<�S�̈́[��Ϸ�n��u_�l���7���͜n"������&��%D�ͳw(�w=o{/xT�Ϳ?�]Ml���
UANRA(���!q��J|]��Lef��o8�jezR�'�>�|rS	��HAuFZ��;�Ir=]Q�$����!��Vi��Zioc~h�����Y���\^j��B�l����H⟺��,!8����5/�mw��n�C��K�h6���@{k�jx���v����.����S����|:�/v�䚪sj�Fa���G;�+�,ߑw�$��Z��X�p|?W�;��;�����(B�+2�-7��ŷ~^j{Kmw���:�'�75_m���2��$�@L��-��E��ד�L��,��W���t�������U���֫��r�x�	��a���E�Ȃ'��xK'kw�¤Q�?/B)_>�W&6�^EV�eN>7o
��i�s��k�noѨ��e�_��2�b{�=΁��~c���I���gh�Kn:U���) ��&��|��NW �[�dw������{3�s�Ԑgy��2��k�]J�6Y�0���t�Ȱ&�2D�q]=P�z��?~*��z���,��c��<C��y�L�֗�L���-�������6o�J�JR��d�1I���\s�eN�A����bm��ΰ�
0��cd�?�R����]mkG�+���+:q�eh���6	6�8�Np	A�֙˒��|�������]��&�A�}��}��gZ����3=�yUo쟁�C-���ʼnX7�)���B�&���k|���kqa�) }d��K�Ms�]! �!S�UHdR�T�7�1p�wM}Zpn�ZB�Ar�
��ITC�ҙ�*^�(�r�؂��9Z�ڍG3{�P=&PLޱ_�C�VЛ��`Ų��m�\��$y
�\��J��|���Gy��i�G�����a���y(v��H!S�,��;an$�]0�e�	��m�0GrM]��\"p�#�t]_�)�g�j���H|��ƀ�[�bx�,2d;gU�00R�i2"��鼸ֿ�xn�6�����nՀ߇�F�,;�0n.vM����j�A���F�`\�*�	+����,CWY ��C�Oi؟,�e)����I�>e`Ok��)��2K:�a�By�`	�(�GAդ�&�	�Vя5��*Ơvx&
�Ġ���i�؞�
��I�"�An�!�o���洷��'?�H��#X��·�f��M�q�L�qm�t���mY����+(l-�?�y8�@�$a�DfIt��9��4���C?%��eU�T�x/�Mlmq�l��ĭ�p1�	Ӫ��>��VXuA'װ<���~��	�Q����$�VrA�N�i�;���c�`���y����^�wq6�l+�Ac9j��_%�s�U]|�P�㖭���
���tS"��)��zK�X�r��T����ݫ���?�Ώ�~9ys9:�~�Ы����iC�%����r�G�^�Ljhj�>��~�;%x:��@���͸��H��e��&���N>��A����2S0rW]%��i��bv!G0�z�x^�M��G7��BA?PB��)S��9ĩ�t��8ez3,(ŕ�v�f_����"?ZuRk��ZA�
z��B,`���R����b��,k�%�j�
{�%�u�s�#�F �D�3NS��$��GAF*���^|.EV��ɌZr��̉g	y��I���u�ȘF�4��)�,(��s	�]��e�^�O��J��v�F�eO��;gm49]�ɕ����\<�V��ѷ��*$��T��u)>`�#���ͬ�.�a��1�1�
zN��@��I���w��X��S3�!w�t��<���gԃ�o��<��5N�y6�n��'�u�\*�b�tH��g8��zO�L���c�B������9�	�v��0����Q.�]�1���]9��
?ZH��[$_<����"�ɬ2��z���r�Q��n�ӻr��^ï���|BR��?l �S��/1j�Y�=�rŵ�D+��V�t+����dyF��%/l���{�t��!���Um�m�F�Uv�H�s!�@Γ8A�ο�|P��6!��to�2ª��W�5���d��o�׎�9�_�Z�
��n!��ry��_&�{~
�Xq0EŧB,��6K�v�.�&��L���o�"x�h��Z|�Z1
i�v'N����$M[�kqĭ!_A|Ѡ(]��fIxRė�؉�r!η��å:c�D�fM�yA�ݏ5#�'�pWŕ���J��E��6[`?��Lrw�q�h�s��#��W���<.q��˜��@�=9�@�5OjY�oǼ!1�����|'�I7?,6����j�0%G�Z��A�Z��@���2%�ꌵsh܋���>s*}t��@�[[�&���Q�܈"2j��m��S�%�߲
��&�~���Ԣ�>l�?\��!���p�ߤ�`����]O�0𯀟%te�,�P鶇�"Ĵ�)Dk��偭��a�b;-B{k�����䜻f>�]����G 5|Oq٬��H��@G��P���TR}�j����z�۝@�f5��l�/�򁞔�
�^m0�U��M=`TXC�xC=�k,&�G��vw��\�����T�����N�Y��,{�z�j���#},}�y�w͒j|��El�'���iZ�)��e�$ItW��"�5ijT�H�N�A�1��1�\jC�%�=�M�}��]�|�8��?�f����b���RzDxK�P�C=A�w�.�R�XӤL�05�TvD�t�
%#P�R�s�F�	�bO�hR"/�_-ҜaaOw���t�&cH��hGRvƔ�c�\^�q#���e������v��<ԋ;=��C9S�c�՚�}�n�j{�E�l�^]���]@b��V��CQg�U|���:"�>��J�����D>�Mu=+���1��˼��!áډCi;Zπ�I؇z�:�y�HlSV�r��w�>�M��ȭ9�"�[�wށ��+�Y�+o�0p͵i>A1R%x�ыR�Z��6�kD���3��U��"@8��R�ع�.�����`p}!���p��v�2�
Q�k�Vf��`��M��u؎��6ȇ�Y����3R q\G�r�����雷�n>D�|���/s��Ts-��>��^�_�k�J�YK�����s�
CAu��Ó������Vo��X��N�,n��.�l���A8Yȉ7y��Y�:ف���y�j���
��C_
i�{T�:Vv
7���dB����{=���W���M���'�JN��h��Ԡ3���g���O�8��Ly��>Q���Z�d�C��L�$� �*=�ּd�@$�wH5�e5��M�W�&K�d�&�c�I�nw�����"R�
C��ޝ�*h��\�:c�(4�{	 ��Op�n���/���G����+�8V��"4B�!�E.�ۯ�bRZ�܃�9��I��a������]mOG�ί�X�)6B���HU+%Q���p�#X5w��.D��{�ewo��ΈH�ZU*��̾�����>�">Y
��/��rs٩;��4���{������C�բ��I�i�S�M��2��}.��64ڞ��{�^tS��;c��4���n#n����g��q���P��uv�h�+��>�Q�5���&X��f/H��ߍ	��cΗ�#�Qq2�$��A
�aFqv��L�����
��z�a֡�F�ycΩt7l�Rwd�Z�r�6��s��c��2^74F(��nm^��z+~
}h͏eZ�k��~
���ۄk��{x�����G躠����z^�ҜX搲u��6H<z�y�$��\����m��lavy�-r���Y\}���f5�?��~���b6U�LV�C�zI��0Xa�8/f�D{z`���fF�w�db
��-�)��b��{\=����%�rk�3�f�Ё�i3�>�º�"4z�q��t����Ϗ�~8k�Ǘ�q��tNw���k&���zK�kLw�Q'�s�ۅG.��BH�޿
�Ty��eHK��)CjQ4,�3�0�NV�5������TQ��h1�t2�+��4�����S�wi)/��d+��>m3ȑZT"ᩜ'/�*(\H�,B����e�[KuT!�L+�G�v�Ok�	뼫�Bo-V��̓���F
?�k�*�7E��Ҋ��b�Y������l��|�v5�)��z�!���Q��d�
��[��А�lԴ��w��o���(����������
D1/P�X��a�=6m�l��ࣧX6\�xNjx�t�f"73
��=7E~��L�_�������&+3t�	Υ5�	��F����t�[�&�DI���T�'T�]�k�zM�V#���Pas�OX�I�mW:v{��젓bHm~C�׿��C3���w��I�Z6��Z1�:�)��6�A\a��H0�|���T�E(��`�h\YʝNb�_�x���9��a��E��Ei�B�����Hyu�,��M�B�H�
K��ބ�d�B_?��,��"���?M��?�~��=������TO�k�R��2��Ǖ$U��?�q���H�$�V�W)=���RH�i���bG��~��~^U+�uq�g
H;��7�ܪ�/:��U�������ã!m�w^'q;
�qv
�y���;���ЎĨ1��!U� ����U���D�i�_͞^��ⲉ��J��*��v��A2+,r�.1���}n�?��iE��	��"������_�V¿����ˡ˱���M,��Q�4�~]b��E���l�P�5ъ�@X�M�Ё�
���u񘠝;��šĤ��hאڊ�+�͗b��A����$UJl��%7ȏ2��V�l1���հ���BC�Θ&��/�ӄ1�
*��M6XukJ�/%L��(-�\��P�L��l�6�4@��V5q�����쫬˴{+��l��eJ%c胮+��*"��ie�=�"C�bU2�\�HM,C&���e�"Mr����厙��[@@� ĸ�eKI#����J�������8���e��o�Tܦx�\G-Z�`�Q��ӗ�=��'�E��H#�߈��~ �ߊ�"�P���#�~$ҏE��H��˶���Wv���ݽ��J1�-G����9��:gO�e�#�[��>�ҿ��\�w4.��_� $XF���^�����ׁ�E�]x@0�g�.&������,���G+�Ѭ��9�������f�7r3͋�W�I�j?R|<�'N+��u4?�U����J��i�{L����y�b�����a���V����\����G+���J�O:�h�.Ko�G�`���Ƣ�F��(��]��b�#�n�ȓd܄h6�q>]�}�A�&&(Jm�Xd� rz p��.98(U;ٍ�E�A@Ӎ@��Qlt+��`186��w����J�m��z�_hA%��.��)wu[���
&�q;	݆a�L��N�a�:�����P�?8����ߺ��
]`��K�F��B�V����P�g�qBW��$V=߫LLM�J�t��W���/�o�h�J �0y�=�/���m�ߚ0�=7�O��;�@˩tb�I
��m+i�4�z�6n<i.2�@?^G��)�˯Z����{m�+AF�j�x���e����W��͕�xQ0>w�v�٬#��`A� gꔿ��i:���oxr:C�Է�q��/��W�8>�uv{�=�s��*����va~�d���x-w�q��㉝���Y��@�	/���e�E+K�����x�᲍_�������>+��[�,�"�Hl��-B���"�Y֥��~߰�e�,ţ>ɲ�MY^]������g&�k:���!Ma��(^ys\�4�,���	���%t�߶���@�� SJ���f,e�U�ki��-�[bA&�����N�8�U�H��jb7�ȝz�nV:`\�DU��oQBՔp@��73v'm�e�?N%���3����q�Pב��jv�5���(t_Vd&���v��l�(Fr��нx����2�u/����t�R��uns�\�w"�S�2\+�y�[|ꥭ�������|M3���ֆ�A'�i?�,4��﯅0����1(�e=F�P'O�C#�~�2�m�8�G��G���C�q�rƬ�#�R����u]�yz�A��ӷ5�/��y��km���G~�on���gN�Q�L�6�r�M0+�#y��f-�W����`���
�	4@�8��q�bXw0蒊K'��h��"\���v1΢���Ћv:{
�,��<�l/�~����n�z�B�e�����M0��2b�4�����U!A���oq��}���f����C��o��%���YӆRu�>u��)L#�� B�@ak���
k� ?��p��vG�G4��a����I���y0��z,���2�s��6ዷ�c��fs�)�]��ڬ��Y�3�m�w�ap��=�ap�m@�������ę����zƘ����C��T��yi�U�G�)����CX>�3n�k!OYc̽�~Ȁ���:|�S���9~9��剺H�0↍b)�kd�4;��=Bh:�dn H@���kɢ�0|���CJ�[V�w���ٴ����e��/]�i �I � ���(X�#��Zg��CGo���N�g���S�G`���F�t��l��>�k>ůu�_���ʽ��r�Fw���%�t��*%x���F�Zd��FI�L�������������\?�r�Uo��$k�V���w�2��r��ºT�uF=�2xg��ɋɬ`�-K���������>���7�q�bA�
0�,u��Ȕ�Z��e����?G�{+����WJ�ZZ��)��4(T4V9]t��/2s�LB�Dc@ʥc(CKs� p�˂1b��@\5Q	�Dž�<��� �.�Y��M0p�y���f��,��4!u�=�"�A�I�Vn�z��t�옕�$�ո��;մ�cv�������؏��-����<���.��U@_.;݊�ͬ� �-�Zr]����˹S0�Ҵ��^���������%n��7U�����]
�#��['����XL�\��qŹZ�!W���a0����"��h�y��0B�?�cL�MFE��x^"*�A=��S��`[��<�35A@�"�Be���
c�澭pQ���UwD�x|q���goG�!\��-�E�{�wm1i�߀n�7�UUWd􇫕���|1��5���M�L�>b��-�V�
^F��n�o��d�<��
�����I��0���
�+�A���՝���-|�=Rb=�}󡀬�Kӻe�jV��y��
O���#�	�Z��܁Jg���t6�qV���`�p7��������G��%*4o�E�����)
bZ���PHp�פ� ����m+.t�����sڸ��ӗ��!��nz0�
��9��u��18��)�lH^&��!ɒ?���׹^�%�V���J�]���{�CE��� Es�^ݍ}����;Dy'b��A�IX_����E�k8�S��2��o�c*+bg,k���m�:��:��T�TSOT�t&R8ݓ|
䂅h|A�}�t��'=��J�m��,��7�5m}ߗv��`3�(! �0r���aC!}���	_:/�S5�ԑl%�����mw@��QK��J'��v6�L��=5sJ��v��l���P\m�oO�ϩ\*G1�VN}X>`���M��c��|ؽ��I�-�x�p=�)�e�B*�j#֖�jU
�v�G��]4�����p�6�{�X��=�v�s�Z� ��=�u���u�M+>���]���V��?�O|�u�a��d���b�%K �(�,O�[5w�~߇�_�f��{�60���/� �a��2܋��&��4~)H.�Ztk�B�^R�^�NoyJ���O�kڦs}|L �uGo�_�yȄÓ`���_5�v�=����J%��B%�#>��1��(ڬ�=�)P�OOyu�M�
�A��wV�"c��M%������|pW����&�Z����M��&�,�\Z���Ա9��9/k�_�75�k(J�V"âd+��:�"�qXȥ}Q�6=덻�$����l�����C�,���<@T�'�����+�,(��i�`�EA�R��_f��y恶�
���p���i彁M�����]H���֕��}��Of:��f��İ>�C��Y������g��;�%m�Mt�,���ŸO�k��B˕���mS����yx�� ߪҿML^jD��
~�
�^A��Ukv�q�Y�s�_kxN���1{������q���װu�#���h��l�A�Pт�s?�{>���H�=��jT�R�9�����<��o��UL�d�]w��'M����*ba��δ��7�<�?4-�p^�Yt6O;Sh�U\RZ���|��-���c(c��]K�#�����h
&$ԁ
�f����Һ��`�d_&�v���8����Wn�J�ķ�����q˘tڃ��i�A�O�fc���/��/Ǖ�_��_�}T)9~]9nqB�l�팢)X��
������8��]��cm	�˜��̩�9)�(��4�{+q]n�ߡـT��DF��[pW��[v����Fs�]ޔ\�)�;���"�r�P`�|�������X<�@G��փ�>�j��������U�wJ�q���M�w�o߼�"���r+&<�2�@5 ��D����6��e�F�$�[>&�;~\܅�	�v�^4��ZuBO#$9.+brV����G�Xp!AJ����M�&��x�,��)�; �2�8)�/��B�dQ�	I�'�<k�,�L��J�RX�^+C���jK�R0�GC~�<�>:J�4F��Z�u�e�oͼ�aJ83>0(���<�!���L�������h��Q���d}�O���J�H���^pR�J�	H�t�Ԗ�͋�yct�r)1����V��S�A�ώ&9���J{o���QH]��Z��v�l"FI-m]��"�dy4Duh%���&'e9���奌���)��c1LM�2�ŀ�ZPe!��k���qLMPi�N������Ȋ�ِS'�Wb����NȌA�(��Fţvw��Cn�a?��K`���pp� f�$f��5fN2���z�a�dq�����)�Y¦ƒG���F��/7�]Ǵ%�6�M.��0���Hq�L�S�ը(4
M����U�kiU9�Qxm�$�qIK�C�T�~�iT��("F�A�]�}�ܮr����9	�����[��Ty�2b"}��"�Z�A̱u�N� Ӆ�U
O6�y50�9��eF�t�[/�R��ʛ��DT�N�J�F5~���.�}�﫿��*�r�T���3��(Oy��._gn�K	ѸN�
ިg��Wk��P����^IH�GNtɞA���[I�o^��K�	���OR3\��I"���`w%ס�q*	���7BUخ`4`,�LO�*
��v�|��R�4��!!T-����U��d�+uS�(�{ђ#�h�7�<›(�޸Ynz[�Z�>ǽ����iJ�yc�K���K)�*l2J�r�iE���)D�����>`!�$X�lFEW73�4����D� �"�-R����01IJ�[KeH�+^6��>��|�
A5yH/�F�����7�*}�_�j�'�U�)��I"�zhP�6/����W��e��aM��,7NA����.���4|y����$%�tR�c��9 $������F�b�q��礄A���F�*�txCR�0U�&�\;w�,�B���KSZ�E�ٌ�?��O�3%9k�X�z��]5��"ŒFr[WS|	��tV���e�����^��Ў�p$�����6�QG���J"�p�{t��C.����]��0��C�&���1�`�u�
��3�?�?�ϱ�p�cN�+v4sᄽ��q>|����kOG�{~�q��I�~��D�� �IH�!��G9	l�3���ޝ�����|N���cfvwvfn���2�6����h����C/n�ܲ�'�t}�Z�?'�T���@W8 ��S�Q	F	����{3�x�����3.�	�Kcx�4�9̫�;��fh���+��{;
�p6��>�,�W-��ro�j��b�<LO�,3y�c�oW�v��<F�����s�+bU�uN����f^q�Ɩ
���S[7���벨�I�cݩez0���IP0䓢
���ĥS�����n�ԥ�0C�4�a���-ꔥ?("`��M��iZ���0뼪fx֯ �)��U��ѝ�Ϥ9��+�UU�8Q�gL��%�����Yfb��r�$�+���T���
%�.@Ł|��4���:��VA��:�D�G�,����\�V���Ђ/DNйYP0�-Q��Tl�٢B^K-D�Y&�K�eJ��ص#��5T�\�v��&ꉲp�f;�=��m'xn��W��,)�!3S��283�j�㠤E�C��|t(yX����͞L��")47�M�z� ��4��;+p�z�/R|���(!l9��;��ڪ�z�u��Q�+��&���k�|��j��D]�\�G����X̦#R-��jb��w��E��@��b���k{�Fg	�}�o�΋0@�z�m��	�u1iӍJ!�	��F"ZG����`��bY��8�J2�N�2��PL�<���j��tB�(� _|\�҈�5��޼]o����]�B�n�S�M2m��39�V��6n�f��WH��c����8}=��|ۼ;����������
��'�v���_�Z�0E��v��}�I���T[��G{��|�u���d��\�N�:����ޅˤR�ن��q���a6I��.�����Z���wD@��b�(�.���S1�vJ�dW)Pjs�?�����I"��O4a��+��V���{b��&πC*�D��_u���J�a��ߟ�[{�k�E� m��0��f�p;;�Y|�pG�nFk�PF�`���C.��6F�E)�pA���3�iu��jk��X�9���Э��/�E�^ �<x�N;Eo2t�E6��fT��l%�D'�~R/C20�O�����$���m0���jyW��[���\�pd��I��q�
�w�*�����B�X��1ci����3�F�z��YTd\u�d��Ħ�(��t�A�7�p��.ŀe��Y�ܨ�#�ZR�^qhe3����}vy����#�$r�'L���;����<�N�L};�Dž���6s4�	M�1=�/���/����.������TlT�g{�%$}+/�|1P%`�Xy�e�=��Ԧ�($zg��{^�9�*e\��&�aD����&��~��}hn��܌s0�RR�b_bn�D�})2n��g
�9�I���IJ`H��^t{X��EO����0�N.v�������v��o^Zd��f׋fQ��=O�P�����$?DC�a6�UC}~p�K�
�POKX���Kn��i��(�y׻.�[t���$�1"�Dq��)O�xt�d�L�z�X���.�L^�ؿ��	t��x/8�_�^�%.ߌ(����,&����@��u.~C\��9�=P��Ѿ~���7[��^莲$�Gh����=
ґ�C�,(��W]��(D�EQ��=��G�	�Q@�LоI��034/�Z󜁄�sQ�_�R��CG+�${�L��$�Q?�Ar���H6���a�I�{��ެ���k�(v��I��=@�!Sz�W�@�����ʡ���(�c�7���h�3��;E�#���ct�_�
��Q�Ρ˙�9�8�L�"7��v���~.�Ħ��t�p��n�ҵl�*���kv�o|���*�(�t���,���sL��Jؾs��_qR��.Ծ86ֶC9��Q[Tv⾅$V��Aw�r$�
��em�>���b�����~9�9�og
��Q�Ƨ'`�p�G�.˳�(�Ds;��9V�h;M�캄Y�X�����^�b/�Ȱ����'�V�o�R�m�HU��`���#���e;�.�z5�Q�@
��\,w��L��)⃠���{�aU䈂�>n(���1(��C�b+=�#n|J����ço&}�mѵ����u���sHD�yS���s۹��,i[�H.(���Y���ţ�8��bN�� g���#S�	kLd=��ìs3�k�%��[&�Uac���[�D���<� ��
����oA�?�|��>�1M�u�-����t9����|�5���,[��� $�I+�:�47�佁���d):��{[�JY`��K�kG���4?Y��f���A�ÏI�=Λ�v�|�	;s(���I�bO[$6R�a�v��##O��1_����>�-՝ss���]����"X�����%��r�R���	��'ˣ�f���N"w�J��8�󒏧���������wghZ�ۥ�|F�0�z��et����+��v~y�v����*��daH��vH�k�Hb�D�ѵvȣ-�4���woNON�P'D*ޓ�fGr0nmH2
,�dc�]�3~g��A�6�T1��3Ir�CV�uA�‚&�������X�	wNӇ���J��\,V}t�22�;)�-��?d����#���KLm��/ژ7���
R�/A�^b�;�`
�E=5��ի�7�2�?�˸�qA��[��g�M�zS�r����"�|Z-\������I`ĉm �	�3xn;��l9�Uy����]{OG�*p��;qvm�Fѹ�"`TT������#~(���{w^���6������>gn�Wc3nʂ����Ϸ�x��@dfܦG��F|uz,�2�&˿/����o����L�vG�	��2�]!FQ��Vo�8b��|�C�P�tq&�!G'�	�<_����.
H,mn(Q)����f�����m��Әi�r�ԟ����g%��{�W�Ad
b���[�ק�/��CDC��:I�[�I0&���z�Yr(&_|T��j�8�������h�7��gO��*���7�xP���r.).���fʴ���bwu�F<W
�m�3G������j�=�ɂ;ȌL�b����	�΄5M�.�������q��aiZd�6���o�`�D�wJ�T}5uވӐ��x8ɗբ��j�T��9�<�d̊/0�bB��x_6nQ..`X[�9#C�&�B+T{��]��Y	rWw�����ܑn�]l�󢺠g�v�s��6�ƚ6���y����F��6
3�8�`����l�����H��H�����X-�����#�ق?��(�&�J3�Y�I�Jc'q�!��!Ǔ�6"�2�,g�chH"��!Sq[Bhi�IS	̈^����{e�u���"��]��*
�YlgM�h9/���o�A�&���Nvn5��F��eN�.�j�s.,���Mcf�!,�4�H����2�Ⲉ@�=_��&7j�z�bm�ݥ+���g�R5�a
Q45ף�՜
w6-Վ�,�
�!�l�Q��p�M������kt�G�?x���M*��K�	;�׃ŭ��x�G�ͤ�]"�UϬ!97��i����aK5��ԛc��%�=Te���PW�3����A��tqOa}i8����p��ܠ�"����~�s�q��Ԫ@J5q[;v)�@���F��*X�găL�*�|��,��1���	�H�ӷ�]f��Hi�F��Y;"��8��aI����/$gO(0�>Z�s�}����|��������J��qp2
����h�����`$��hp���N��I�3��}
�;~:�u1=�Υ��.�G�!�qNM<����~�ӳ������,H�����m��ޜa�S�2��l?�?蛅�f��\�G�_
x:i;*�شL�6��OnkТ&H�:V�EB����):�y���e'����e�����>I�3,P�%�t�*C9��ga%���;�<��I�a��8��m���	t���U��������b2�x��'��#<��b��}N��g�ҘYU�*@�����z*
����X���!f��$�۹ElH�Tգ�E���3�7U�i�%��-�Aֳo��XI=������Q"_s�8���'	Tƫ- \��,�$Y��Z=�mg��(�=����u��W%C�5�J�/(�㩶��MAZ�7>Q���l9[������{��#{�';�#����Z��)V�K�_V��n��%�1���9X]�~��K�0\�1����,mZ}�%����y��/ѫkcJ�"�.2���^���[;9�6��u0yc�lh4�-ײ_�e�"z}��׽;o>g�#Rß|,)_a��[���W��nl�H�%���(A	�B�ȉ8KR��;jSI;��յO��lt�C��+�7�'ԧ9�_�x�>�S�'�&�ơ�
���Nw�6"��{a�|��)�Zs�O�%*e�i��;�n�(�;
gwM�{�@H-4�*��I��c��1�l�"$�˃z�'� �~L�"��7�e)�袶���%�9hb�?ʃ���M�1���H��j�����̭e:
��7z���Om�qF�͂O��e�5Խ��>z�H��h�:��Qlj���ҽ�����W�@��]v�E�Cn���J�8H��=.s���@��JH�;�s�[��ìJˋ1I���V�4V7)�A��|C�xu�t�!p��;yF�˟�~
x�B����_��B��aB�1��3�`M�סz�uќ��RSl�m���(#|���\
Ì
��ǔ�������(Ҵ��Z�#���܉2R|�"�3��y�t2�ob2ёU�E
�R��)�K:`�u�c�R���c-䡎�*���ksE�;�B��xW�!98�u �*��2��(lY��YrI
���~������8(�ݙ������h+�<��ܘ�E52�&�Tm��
i�r��f��K�!�@�Db'�3��e�Ğ�7g4��!�Nd4�s	g���dG9��2v�#�v��[Wz	�H�Z��US2����oo^���(�\��#��@p5P�T�4��u]��o�%m�h��s%Ժ�����@>����]�Z*:P�"�>�=�ĵt��z�D���ϰ��@���7�A]��=�E1	S��EA�o�nj@ʅ�Y�BП��QX��d�b�������8&th�*4XmR��hz��p�v�+�N��Hj]��l���rt�X����N��h��j�\1��	uy|�Ÿz%l]���:�H�M
�`�=�/��?���R��]�_k�&��d�:�����,f"�=���,���k��$���+=�U��d�T|�MF��!�0�'�1���t�ȃ�A���P���z2U����!��k��)��T���2 �����W��*��V�dA<$��������41��0�;�dʄi���*#uy���G ȋ�%:=��\6>�ӊI�#��z�p�L��d�
�^o�
f�˩A�"B�2�I��ڱ���@5�惿��#�?�6��lvu�@D�s�U"���f�S��Q@c�T�*�B��?@����n�{Wom�U�!�ł?(n��h2Ev6�u�C�ϡ�G^�*�R�R1V~a���X��̒���C���m%%'6����,�V>{�^+c�|~í���q���l=�v<���-3f.�NGCzmm:��Ħ���i�����"qY�.�TݷkA�FQ�+*Z�E��z
�Z����V�5���z��O=��ߏ��'"��й����i��ާ��Q�{y�����ۨ:���[�d�b��
k�
<S�Gb*�:�G��/���kT�ޚk�'J<�.'��I��+��W��U�Y�-U*��R:�v�(7Z����?Q�]Vc�$�.B�o�f �E4�X1o��RT&tɤo5j�t��~�"�,����
��zf76I�6�P�`���N|E8��V�$�oϣq�`{���b�y���w�nϻ+"�,�9��m6hǃ*��vmm��%�:hVp0-��[��w�/Ժ�,�����Y���6O�ތ��I�h�g�o�HH&�w�eFq̀��3g9G��������;�4}�Ϥn��)E]u��:SVX���[�fV^9ZU��}su좀���q%�9N�D����W|>}���|;�yqeX��v��(���L��J;��"� ����a�/	�=���i�6��,V֧���:�P��9+���!d���?R��*����j�ʍN�+�=��A�b�^��T������Uy�nC*�?��_�'��������fD{�<�'XL�u�Ƭ�+.�y����x��R�Ve<0V#�
ӵ�V�wiE0��m=�>�F�~N��he�:[�H���MZw����)
���פڊ����Xjz@�Ŧ��aT:�7�>Q�� ����kc~jW�����ecN��i���j���*hɊVr�
Ķ*��WG)��9�ؔ�,μ�oz&g�ͨ�ؓm�O�+c�����]��T�����Y���fc&���x�.�����]�*�6
;�}�[{o�����EU�3�x|�'7�x95�������.��ec7'�����`J������2y�4�Ʃ|#F��M$Z	j.Vܹ�����9��zm9���/���4��2K���
��L.p�y������>@�]]����� 
�G�vf��l������N$x��Ye۳�We\�g���Ҭ�V@�Sf3��w�G��,�[&�ـ�-�����F��m;9޲ks���|�񋀲����^����h��\ygg�3%\a�&#]Ӵ�Zrr�@!���F?۟>�B+o����^4���n)g�"��T��S�m�hT&��L�g��B�5�f�z��
�`��YNI]����[�#��rA�?�h@�n��:��9}�8��	��f��qY�ǁ��(�t�p1bJR�i9/������D�E���t|{;���{a<�
��~
���Ή�k�K�՛��M��n�{*9Q읚���#ƈ��7@��yy��&L�NTfD{�[Y�|�)��Щ�}��؎��bӈ͍	-k���|'$�0�����?�4ssƘ��������+̫� 
iw���:�~t8[��y�#6|]��+l����S1��W�h'�rP�dm|>�ۮ9K���P�g��ޥ���I���TAՇ��9_|�qonf÷�=�i�[h-�$v�����C8Q(���8�u����*��U�Ѳb�(�:B����l�H�];��qtT��7ϕ��� �\���&A�PTb��}`�'Υ��5o���(U�j�	6�z>�3y#�/�a��z/P'
�O��N{9�����L�v��0T�j���?iԺl���HY��R�Dݽ�w�ߐ���'���h8�ڷ��V̺� 6Ak؟�Q"�~���_�Rt��U7f]o��=h����D�Yz̍�����CAػ\j�1�_�;����6}
��߈���X�cM�F8T����y�$p5���$L_�}�px�7���O({�*�I���j����X+��݃�?=�(�_������SOq���Q��LoѪ�0~crd9<T$�\�7���H�J�R�/f��0&�ΥO�gR�&�E�?�)^J�
�dG��Z�ڍ�d�%�_¼�iS�;R����.�%}`=r�R��'���fQ��b3�r��o�w�X�ƛ����ڞ{�=}�mJ��.w�j��W-�d�Y�������8��߸�sw�E߽+���H��y�K^�6�����ԍd�d�4=Q���ۧ�������/\pn.���?T<�W�Nv����r6���W`:$d[�b2��MS�c�@m+R�_|8\�f�-R�(�Am�Ec;	�ܐN��=	3��y�0��J6L�]SEX
Њ�m��� �;�0D�m��<�Z�q4y4?�wD��b}��7�j�w��}��(
3c�Z^����k��R��\�
��䧟�TeRp�F��:��T^�-��X�J*ެ�P����?�$���h�c���I�6�)x�G	��ζE}y�]�8�`ל�qe���B��8��P��D˙ʋ�pTkO�L=�B���?yr��x�#���1�FjW��I;���5��e8ǽ�Y�y]��}�Љ�U�ғ+�v$�c�b���?�x��t+֢�F����?|��V�0F����2������7�ɝ��b�D\HB���b�]��ڋ��f��n�W>�D�!���o\�ց���Ui�>g�4ә'�ezJ�&Vϟ�Ǧ9H��|���wT�$Ϯ�h��P���y�	�x=\�$�OtP%�����1�KP�������Զ��f�a�XO$OãV�k���V�K�~�f,�&'c�*N��m�&��C��:����R}8C�r��n��J	+!�+d�~�}�~|1b����C�F�}�O���`B���W����z���?t>Rw����;+"�
D{@/\�n�ju�W���� b6rDxtW��i�䢋��
뤹��S�/��,j�?h�h&���(Y$�EH���؛�ӳ$�;��*]¸��7|�;���؜�dI4���;�+���`^��-��B��S/���X�c�Hx�Hc�L���j���m��"����r4_>^Ln1=���b��Bȩ���W��<6wAf�X�ď;#&�xR��i|9��+*��!�Ŋ�-	���O�
�S��$,��H4Ѷ�n��yH��G�����u]��Z���:3B�h���^w�V�vv�	��A�/�+��@"f[U<"
�C~��-:x��5c
Am��j�a���� �5���_#��b�=��/i���?ή4�WODtI�#/����5Y�ؘ$)�m=��� e��n�)e��->��D�SU-״��}��#M�&�q�t�&۲�(� ����K����B���6��%i�Z�)��NT�úf��:u%ĺg/�:�'Kx�@�
�@��������$��������W�%F �u�?+�OR�	R?���e(0
��Y�&�J ;0�Ӂ��o"�>�n���A�y;ɵ�캞����=ks�F��+ 8�+�$E%q.'����έj�Xe9{u��X�Y��#H�9����53=���d�%�<{zz�{�Qku����X��^���w0P�y��O��o�t{��,T��Za�F�?�d��ח�#�1�}��x�r���Q��zw71R��$�u�c;�L��o.oL��V]�k8��;� 0q���3��Z�vS��[=�j.ڮˏ��}�ۮ�{I[�<Ȇ�C6PIџS�t`Ng�w����%&���9���t�%4~�P}�fG�d�I��jzڿ�h�V�G&d{M�;�[��-]�`�41�5�(K$� FH��	6��	����m���e�mɵ��̉h�_�0{caN�iO�G�w�_c _��t��ڎ�o?e&D�298
�3�$}�C	i�9�SE���Ϳ=]ӓ���:o�NGY�$x�0j��4DR���D��!�8P���#�Q�_�h׮%"�g�S�:���5Q����u�G_��O/?
r
%��
t�^T.�v�͑���%��a=�G�}D�\Ԍ�br���oH�΋���2�ٱ}�;�$N��J�,]{���]��RNYe�}�� �U�I�juur�h	�,�]�_A6���*GtK;�b�@�W���gn�U�X�9�0�����m�w�E�~�8���$?�a�W�=��j��a+��T���4&-R�� �i,/Lj>�ynm�W�"��7�@��p��|*B�`�q�%A
�^�8q�����C:��(t��h`.f���?yr���k���Y頪7\5
,�C��C)QY��KE��-�ے��M\z�W�cF�zY1^X@���\�K5����X�T5�i!�E�'�T|6g��T&@�ME_�N馤���Z�R��7ٹ{D��K��j9J���\��*}�E���3��`���HF@
B�����z�؞��DD!t�H&��u��T�gF��el�z�
�(��wt�]��
�hË�Ʊl��˹��Aݔ�ZIkߏ\�r���?��� G8�hlV�偋�����v8����MG32y��j�L90mba��	��',�c?~%����QO�7�ʇ�5�
��w�l��o5u��7�d�F�{��i%��☪P�Z���0J��O�������K)�\Q]�fv�K���́�F�:߱q���
�_���K�����$$D�7��h�	/{��ms�>D3���Z��ɕT����$$�O���3Ô��և!��Ew����l�l�����/F�W���Ի�Ŭ	A4x��"��%(I��?{�9�����9E�G�	:�@����x��A�+����~��� �J|Lq*�o�D�Ϛ&[���K�LM6ɶ���4I�R� �G�>�d}�������W�����+6�]���͟���|���O��>f��8�;g�����Z��>�ۉ���׮H��-�|�,�
�/��Ղ�p|�}�]�*�/��/��w@���%���Tǘ8��m�A�"˅
��%*����;ݏ7�ܗ�1�E��u���=��֮־޶��E���*��]�']���J��mL��*Њ#�Ř�4J8�s�ה��t�[�MV�[���|+0MD.ؒ
cx���l�!�������vY��8�R�}V;�pN��Qu�g�n
�n���/�8�=7fT7�G^�)�F��a�#��.��'(�ٝ��}#�[��a�W�в�"��*����2Rw
<}���Q���&���G������
���Y�o3�
Ͷ~Q�_��V��Ļ13r嚫_� ��nςR�Ve�eW�dR���n� i��GG�^���!v@|c/�C�����Ao[�hk`��{����{�*#>
0���z�q�>J�D�?dK�3V1M�s���}_W���Хg�����$h�jj�)��Z���?���ԋ_��_�y��$���>qAŋ��V�w�߶�[�5?2�O���9n,�g��䗭�?��q���"��XS1ak�p��%��v���!�78xwx�t?aEͰ�Ŷ���(��^���/Ld�V�_���X�t&eo�	�Ww*~P.��o�$�&s��u�NJ�n@�|k��b�@��6V���j�����MD0����-9����[E��j�ԭ��z#�$YZ��Yji%
�lE�;�e1K\![HU�������i����%r�Kck�bS�8K��8��*�{"v�ƖuL���#3��q��b����cY����eZ���cK�Xp#�P=��-�R��78.�)͏�
�U�[��"i�r��3�=~/�����-�
Mi��mH����t魷1�_Ff"6�v!\$�6���(?&M;�p�5���]ұ��2�=�#�y�<YBA����l4g����Y��s4��f�������<dwUօ'�g�M�<��%�	��MkhL6-�rY�ў׸������~�K�~~/�R������ΐm�y������g3VNGn�:|��>rH}�b���-F�^�i���w(=�7���j�<%�h$$ݴF�g;&Er.H�2��ȷ�LHf"��ш��X�HL[���o����8��3z6Gy�}$�Y����-��ÿxj�0�o��a�H����T��b���dp��׀(_|���װw�F�+��n�Y��å��+��{T'�.z�L,ٙ=�*C�rJ~C���&�
�]i�� Vӎh�Vn�u�{�;Y�؎f��
4��j��)�̽/L[��j��8���D�ټ��
oNd&Wq+f��堞�du0�o�x)g۸6�
~�z{�X��R�O1B���=�B���EJ�Fx'��xGC%=U_Vm1�S&+ۿ��6��1��4�3Ʉ
%�ٶ%
Aݾ��]��^[�1|����"da�Q�V�hN�`)jdΏm˛#·��P
�����|�
�	q�4N�S��g�������y�rQ����s���Z�F��¯4����)�QW�x+0ʽ��H��4�_��9�,B��w�QAs7��3O�x�/�2	�#h�4d�<<L�Uʶl�׶�L;��y)��߻Z�ƿ���|U�
��b���.���`��RY4�_���U<�����S9p]ܓ �ݨ0���[�xt޾�M�~⺳5Y�c����������
0����=����N�4��€��v�,��`��)|T��ڈ��t3���<
�~����LeJ����D�
)(����|��r\����i7[K�}�e�	-`H{rSc��W�OFm��g�,�Sk�I��B�,�l�t'5=s�>�
�M��uђ!08a��M���9���=���c�Bi*��54+>З6�4�`�5���}�!0���tx'�j�"~yc�&a���
D�,�(�'��抆�2�j!�����U�����˾��l�]�o�l� �!������$U?Lo�8���y���HQ
�xXj�ҍ��ߏ�S�VZ>>,xq�u�/��G�]��W)��ɟ�7�����~��q��7�����߃Q�z������+ϗOZ��x����!Ԅ�����d�i���8���(S��WүU�m��X\qc�
e�1���������!C���},<�?�'��[��oC��S�z��减sC���'����K��(��A^�*�;��%����r���4L�k����*Y0��ʣ�g��fM
��6��
�C��[�xh;\ܖ������g��Beq�f2���D�"Ĵ�s����Ā��є��̧J�X4D ܆&��ٷ��0�������E_��eø^`Y褺-&��}aP�����L� �U�f�&Jz��֚{�f7�����ѭ�ťk7�Vw��Ͳ�\�z7-�~w��Զ&�$}f�Y`ڃy;��BդS�'��2�G��l���Т}���(d�=�^I���7gc#ت��&�b�)��7���̭��J��X�ЪƸ�L��g�³�F��x|�J���vY�F��
�d���$�K��T�-�ם�L"�y6ἵ���ӄڶ�	o���c�� s�;YEkv6�@&����dP[ �"�>/Ӳ"�x{�.����-�7Lw-��5����MTd:^q�	�}�d��b{�ƨթFw�3�ĭ��Ÿ�5u�n�H[�$�'��/T����XXLS+�R5Lh��g@w\1�'Z�f+o(}WL�p�/�;��w_�<�8��짳gË��/.d���Q�S5���)x���α!�3!��[���T���3�|���;�����*����ф|U3�^V�{U^�WtVT����.����.UZ-`�z�7n�:(y���х��X�L�E���]�Y�P��rD�숡��Õ��Q�@Y��7�$r��ϖL�a�;
]�6Z<�А��E.ޅ�F�#�0\�č��	S�+��I.�\��>\�E�	��`��i��&	+�M�%�MN�b�	���m}�f�KG�s�'e�d��\�!^�v��2P:���n0�1c����k���\@�sdž"c�2���^
 ���h�[p1��CB�A
��t5Y�����?�/�����ㅸ�5k�dMsI��I�$J�hlʈ��J�$�����)##��.�#�F��`&�W���͢�6^�b/�M2 !w�|�n2���}�~�?H_�o��mG��Q��E��7�?���ࢶ���K��7���
S��<G����"�Iz�bb0p��@<{y��J&s��B�g�PT�nu��|f'%�j��3�r"�.�Q��Z'�D�YlF?Gc����k�3^�
��ZH��V�h�o����M��[b��N�#j���?6V���U��D�yu��)�y�8��΍�/�#C�㣵�tA5;ˮ����R�sP��{
����6D4'��#�5��j�!@x�1\bF���:�G���j��I|�v8}������B�d��%�T��n���le���޽�W��Kr�Q���Xa�Gs�$>u���
�k:]X��F�A��6���e=�Ѥv�u�xC_��j~�y�6��@vXM0dB೦��<�a��73�YL�ol'�E'	D\Y��d�_nlׯࠞP�,�u�y�ƘXꂄ�_�ox0���c�,q3LF�S�%���#����Vϧ�mZ�*�%���v�zAW�tv’\
�ҏ�1����mWr۶���o9.�5�YAW�3��'9P��D�$m�c��U��"����6Ї���GDC��?�Is3�Ѝ���h�mRN)MԖ�"
�bΦNW�ާ�l�<6'i��>2���ihx���0 �Ϋ���~1�m��NG��W���HKVz��wu����X�K�_e���we��7��U0��R�*�e�H�#�}@��~H�#�j�4%�H��jx��r	���l�ہV#�ͩ�c;��[��f�![�؝D�HҞ�?�<}g��*�$I��K�:��G����5ޯ�'�oa�s�-Hx�f��>!�q	�n�˙lO>y�
Ҝ.m$�z	./q���Jr�fz�}��ui���݆Y;�#vƍzh,�br��r2k�g�9�89׮���J�{�h���n�xBKL�K�SlXq��pb��*�cy!�|����K��T�%4����t������&M�*C?f�dE�I�ؤ��#�Q4w�f8<'�"am<��SZr�K�]M���]dX�
��'���)�ѭm���>%b�1�C��M4,�;�T=�AG�yJ�K������nG쮯H���H(r
�$@��N�4=�����땰+ǰ�{��y���F��=	�r^����b$�S�d�?rx������`_�ÏAA�2�� �˅/�t�;���Ӎg����jrE����
D��g�2{@�MAE3�x@���@W���p��`k��$Ӵ�wqx���/_s�N��iD��o��Vnw(�����+ey�B��"��O�M1�D����·��!�
��5LӁ�x�� gi�r���jrQ]M諭O1(��؊ߣH��8�k�mo��ӉK�0!��B@�
��9�
bg�ˌz)͈�t�m��i[m���@�d� ˀ��AQ�KV��7��/D\&��(�%*�;?Z3�G�M����vl'ɹ	�Eʽb�x�9
�|�VBn�ɧ��	�Iն�͓�fx}L��?y�\���7�NFz���
+LЪ6Lrq����6���:`,�1��U��NWJp]	�7&!���0�n�š� Iթ�sw��j�kU�KZz��Fx��56e�z�ܠ�4|S�u?�������cb�v�����?�"♰7�V�t*����+�?����zs�s����P���A=�y20W���4����n��z�Ǵ��Y-�d�l[�.�e���.O�
*�q��+V����x��R|	z�L�K�R	&(�s�I������k����/o!�
5j+��ZUE�� IM|�]/u�
�.�fC8�tm*���-�`�˳n��:ŀNd[�<u�)%��T�*VE>e�]���0:�u��N攮��F�#�.�/t��� Y�&,>�qs�T�č��=��"#."�Pz(3�Rõ�yC��	�2���x����)���\�
��v�A#�w�]*(3���<�/Q�F&�1���U
��tBAJky������'wɉF��3I��݌L/TS{�#��:y����SbK
�Q���.1����n�%��ѶcҬ��(p���@s��.�js�o3��ږ�L)-��
�������*�K���Z�+�gm���F	qL��e���Aśb�|G�6�g#n�㜣X�j��C�6��|c(ڙ����6�A�RtB��b�G�=\��±I`ʉ^��c%:>ڻ{�u4�M
����8�������׼K�Q �S�ۆ���M�{aw%���$#��6�-	8�o���p��X��<�!�_�=�P�f��l�sơ���$׫ϑw�$��4�MYi���X�ɛ=	�3��̈́Hӝ�_��*��GB�la=����f�$��]�l]E�l0$
����#��fAL�j?��L?���&䆬	`��w��o5ኙ���oz�Ȑ/wt�.��P��V�#��x52�&��z�n6Q���N��c\�?�k�K���F�O�;�r���K%GE��z��b�����nV�M�~i8�� �rQ�����@	2L�+J�;�uIhޮ�76��$;�J��X�B�ϰt�dw�~p�>�$ʸQ^��48��]|ڄ�!y,�O1F(V����c'��7��6["~��nG]ђ�� z���G���	�SA��Dy�my�-� ���O�bZ�+9k�A���\�{X���N��J�(Zw�惻N_��J���pR��J��S�7��)vn���\�O��`/����O�I��t`
(�f��<o�����84��ȸ���P�n���5�幹����2�Ύ��D�:'���Xk����u�l5��QwL6o�'�%��Kc!���y7�xj��MW�05�C���/&�<�����M[˝�u�����\��0~"���hB���d*F�ww�t-#�߹��~�]��S���R��S�B_��v�T�n�H��������P.��7p�h�/�L/�t�?�@؂!���Pː^vB�ig�b�֡�*RP�5Y���U׀4�L�(�3���}�70��i/T����0z���T�Sz���s�VAY�>���]�����JĬLm�7�y^�f�R"��X�7�kkv�/���N���,���9��6P\Xv�Kaꦕ�����gc���]_o�6ߧش>X�c�{��������E�,'�(���!�w��I+i�>��ɻ�H�<�~��\��V�!RP�,{��R��`P��"Q���v���۶1�Y�􌁚�k�U$a.�-˘:O8
��c��w����˧���p�X�ZF�;�qo+�4�h�ȃ�J�-oWO[�=d_�X9B.0��OYևp\����O����
6�Fkf�Vu��L��7u���{�31���(�TuO�����&�<��G�J�I&�B��'��Dn�w�F�{�K~��u&�z�Ź�VR�W^!r5��9�~*�Ԃ�N&+0���j#���K8��W�8in��݀����Nm=9�X+P�����J�ӈH7 UXm��6:��my\콘�7x�:�˼�=�On���l��>��/��_}�c��xJS��5�~��
0x���rV��J��v�}U��E� �([7<a���)*=�K%�0��em�6H�4^��L�z���n�x
E���H|3y�� �^�=;?˧�y�Q��|��N��Q{�����a$�h'g�H]���EFF�}38��މ�:�܎�ЪFOO��`� �O���/!����_m6�gҴ;�z���Y[W�7,Ԛ�]��Š$T"<�`�9v�\��m�0P�����I�P�N�<x��r�6ok��
io�xϽ`�!�����l%�軯��@�e�}����R�(H�������;�E��ӜaXkw����C��lu�j_����jã�U��k_WI)Ui{a��A�
-�D�|�b��:~z�T���c�����LHj����*P�\�aj�,����pC�n���7�K�Q�d;�%[������1�$�u@�����n`�<��/�sK�c/��"A�+��O[2���R��QU�M��ƅ�����bA:��bDa����-,�X�����|6��dԐ���f��8�%#����4��<[L'˫��r9�Z����9��v�B}z��*k+*�$�u�Y=��U-LOg�*D;��G��Pn^�q�6��C��]��M�ăj]&����o����7��i�jH����ܱ��X�����������(&�"$���v�_'����y�t^��)�*}ȗ��������x8�Y�����B��T�c�iD�K�)���`�K�%Z��8�^�D�Y
�%�C�K{�ԁ�z�ɪ���JHI�ÏH�`��ݘ ��,Gnμ��6�15�#)GT!I�/���X`i�T�H����
|�O�v�r��tK��a��}�4�w������|n�1�1c曜�+�MF���T=�汩�pt�6�d�äJY8?��祪�@�U]�
���[s<"P;������ ��eVX�2������'4���]ms�6�~����M�	���&w�Bg�鹗:��7���tD��*�F���8��}�x�$��3�Lp�����Yz��j��a�|�F�ھ���5��CYZ��Ե�2c1��I��ò�9\���M�L'��V�Eq^���l�GD�F�$�����u&�4䃄�h!q� Z��v7�������j�h_n����c����Z$/v{O��x�b���Ij�$AMO��I���%�tȑ��6���N1��a�l�_�J"r;5��]C���P̦����R��r!kN�Էb��`7J<��~��|��9��\�aN��`W���h@��f%� ��u��f�1��f[�K���o9�w����0;rmdĸ��<��N��εkj��k�A� ��b�nP��fyu5�q���s������!����lC��[��
����"G~o��P�FW���xfB=0
�C���^`L״�	�Ԇ����p�j�K�eS�ՀT]�=�l`\�`��y
�"�aܼYN���&�T�}�qF��4eF9�0��K"X"���'��,R(E"r�|���< ��۳��޼	��6Ϫ�H�'�d��Pc���| e2�$�V&Z.-4dbD��	
���bH�D9�m{���,���U��Z��@��*����+�����-b���v�:ϰ��4^����gr��b��iެ����}9����z���j��&�
�[ʈ�n��w30/Б��l"Zj/��چxS.,VZ�İ�@�Z�q\I�u��)�5uB�%��q�3�V�3W���
kS�(m����1��/1��p���3F�`�U�+ 45`
�y}����b1��|W���/�ڟ,l)ZL~��rYϹ���u�/��J�����e���{N#�U(:�-��A�0a]�!�[��B����T����M�/��$)�O�m|\���IGt#޴㩞>�3��o����¸���-�SUr�S�6�&v��<����ʐ�O�.R! ph��� ���uRS[�YE�i6����ܮa��O�q|��◓�����4p��!�c</Z�鈼���:^��6��K�D�2�C�<w�z)��{��+v�N���� ����X7�P���}��	��jb-����E�5�1�ʶ�|�݀D�X"��i(ި�Rq��
qOU�O7Q<D+�eF-ޟ�uA
�.��J�s5˲���b������6%O<��x6��]b��p�mC]�nҭ���n�0:��VIG
$���qcu:
�V�+p6mU�
!Kђ�r,6t}�(xg�[}�� ���\Mɛ��2�J-4�Y3n�����
��������-mp%dJdK��:#z�r>Yץ�z�XW�������
Ŏ
A�[tg��%�7���bf3�-��p���G�S��j��o�2��K�k�=t��L:P�aN���ڄ�U����&\;v��d'P�;�}H���8a��`U<��|?I�̽�95�I�D�(M�luC��fc���.���u��?D���S�כ��vE��D�ж��ɞ7|?�ުp�U��,Y������1�1�x�V	%՞�(/LX�[Q)�����M@�K�D���C�u�m���vu�QC�d�~C#uV`�SI�ځּ��&�Q�u��\ve�G2�ϕ�㽀4�G��檥iF!��r�=��a�<GJ���*�a6�W~�g���0e�s�	tD�
���%�������	;�荧U;�_�:r�N�<��5�NQQh��Q���4H"�gH�wM��]��nU�Ý\�ˆ�Oޢ����&��>�A'������t;�h9�R�j�j�k�(%�L~��}��o�7�9{W��
��T�ڄ�	�X?�J����9z�NΎN�.N>�?��G���a���j�i�ѾzU�t�ϩ�G�s"�7��ڜY�9�V:3%����{'p�Y��&1}�/���nSF�^_|8���N��8v�l|�ֺ�A	�z����ۗ���ſ�~�_����)3-lK!����yuz%s�j��)���J�fi�5�`ˮ��I���Y�Fs ~b+�~���WI�����_2џЉ,e�C����ԉ��P�'���>�j��9��KT�c<�$U�p<�D�Q�aB�G,>��Ⱦ�~=n�]~�akʰá�v:?P���|���s�p��j,�9㡱,A��xٚot�XY
�c�P������T��|
�XP�S��
m�y��̅���.{���X�
V�W<��Sr��e���'�B=�K.Té?�&c-9|&�!t��Ch�}J�������6�FK���8�N����s~���S6�2�̟��k���	1h���`'g�_߂�#�4��J�b4{'�$��ܻ�iUW��!t�uw̋=�E���	�ō��ǰom�un��ɳ�^5{�?�E;}4�lkh�4�,�\�o���d��a��0�-յ��l����4��AVF��O�l:�ފ�����0F����>���[��!VV�"|h��P3#��/{[���t��)E�UMQ�ut*�S����Ȉ��/�z�>��dl:�q�C9|�ƾ��)�k#�cj-^��ܿ�b�PAb�+.��᥎�R4��h0<{���2���_���#K-M�FC�bC��&]릓I5k�{V䀳mQA��2J&j�<T�-����E3yX�]ѕ�ŏ�B�;�Pe��6[�[b�3Q	൙>�_h�K���1���ӇT6�a]=s��6�.��د��z���2�H��O�j��pp�P4-��0�I�e��l����%l~�:�ⷑ�f�����[���i^ۓ-��[3<в+�>Z�h�&��w��#~���Un��:U̼�c��*W��^���x
S�д�7���ߍ.T��o�.@=�.��
���lUD�������_g��Yjo�U^-���5�t�Չ���;Kut@�暶J��)˲�/������v$����+� :�E����]o�0�_�UUE:�סH�]�"M������fb�J�:���;��i}�
���l����Ѱ��P����~�M%��K���T��pP��o�ãj_PӚ�M��(���~�֎C6��[G�З
^�X��zX���p��Tbޡ$Je�V�'+�����L`�a����#�Z3�YD��L5qۘiX�V�<r���vTo?�}��&R�@��L����؅��l5qz?�j�j
s�J1`	��^0cb�
���"�#[N�e����`��)j'�+���������m��=>��LC��=�?�$�b�����^��G�������&�ꁆ7 4�����y�����G�`d�S`,n���U�,��8��(�����n�!;	r�g=��ngl�>
\Y/�!*����ve>jY&S��AD��"�Ö�/:]7�G$TK���l����U|�.:X�g����ڹ�*��I��5�0 �[����7lӾ*�V�́�9Q�LT�P	}'�{뉧l��?�
�ˍ�%XE<kl�۔���w!]�jm�u�bZ�^��k��*
i����i�9���_��ߒ��d��ôt5H�h��!��w����^���s�+�-
U셊1�����}������C���F��2���i�z��rE�
%b40޾Lk�E�	0�0���ǖb0�_��Uyv�>���i�҆����8RQ��؁	��cu	_���J,��(e,(K�*qpǩ{A,�/�i�>�`
����� 7Y.CP���3���7�%��&Bha��Xcv��<�v5�SQ�?nhP/��Gy����`m$\y;W��\H�|�pUQkج�Ǚ�K�����t�IK��ӯ��G��1%�x�_e�Ž�\�H)�Fq�
H��T���Cn�Jɯ�6�y���v�u8��>�̘�b�-0�;ltl)����%���d#IL�0�<�X��l�e~.0QH��C�X���e�mՇo����2�h}tr�.�g1YC�u��ٗ`{��*(-΀�'
�R�n�o���fqz�|+�rB�jP�ٟ�'������	ف��G�N�ZCX���au<�l��
��8�Ӂ�y{I���@��i#�<M��X2R�	rZ+��B����p�۟�9K��{s���#���liX��X�C|�b�
%8zU灎�f�T�J�zN�1��A�� 6%?*�W��_9	�B�����]K�@�hI1�ч���Ⴧ�q������H�)"��7_;;��&���qo�nvf23;��p �m��M���+�gN��0^#�mY4����(ÄA�d���"�<t���`����������/�������<��/\.9��<kG��P�`CEBO-r��lVh}Gw
������`�����	�-��Y�s� v�.z��f�hI|y�v߆(�ŋ���կ�UQ���2��;�fA�ާes�&"s��#h����}������)�"#iH��H�nj N��ʊ�g�tV�3�k:�4�o���N�����K_�M���v��[�>s;V���A�H��d�4w��7L
���fAZ'��S��-�.�s�<����!��U�a��p�=��]�s���a煻�L�\�����K���	{~�j��b�2sr"��^��O�a\f^�\��G%���5�ԃ�+;�N�:_�+y����-�r�1�l���	�T�+EHI��f2]�˹ϖ�aPl�!�R�H�A.�p3�L�*��e7�*��y��/�0)�
_�9�_�^-`�DJ��k<-9����'��c�Dkڄ���ܓ�
���n]�/��2͹1@i"�k�T�=d�"�ݞt"Ic��҈7�8|��F��28\y#<eN��^��N�� u��S��KZª�Gf+^�����VYV
��`z��I?x�^�!���Ӑ��lz+����ko��
Y�	Zk%KW\Qh�v?�Il���s
%Z_��%cWvlX���<H�\9�]?�q�|s8��C*�#6�/F-׎����B�Fe9<֢�d��B&Q
�8�m�1+].�H�:~���9t����cV
�4�S�?47�s�q��HeT+�aQ5G�r����f�CC�]�g{Ijg�R�RG�Y�"B>�NU�*N���F����_�8<:M�A�YуH�;"�w���l�������4[�Ɖ��8O�����y�8:m�w��(ᆮΎ�w�չ��o߿NUZ���\.�ҿc������gW�o~9=��y{�{t��,�+f�9����K���}�*����ݓ�����W����Bn���NC�=�s݁���h��������X�,S�`��~�>~��]�[2��wo�l�-�t1l 4�m�k>��-A
�-`p�S�`(zo����2x�p:��/~+��e5��Vc8��}
��둼����c"z
��8{�(������
;�W��0L}���X�#�e�h㳂C�҇q�}§&K��Ay�C�>�f�3j��*����vW
�����2.���@�-N9>�bJ8���^Э]f��ԷSS� A�Dj��l�말����=�`O��\?���m;J�� �.����n�Z���Wv���5�` E�Dij�
A�cp5�?z�Q3n^U�b,5�t,��DuS�����|���#�/�=���8���Y�b�0F�wwx}�l��+"n���I +�)˜��}�z��J���XBDSxAS~�IA@?	=�d:�}����dg%�X�6��oxK��x)��N����Y�]�E9����
��T�8g��U8G1�T+�?��x'p����E1?��~�Gf2@9@tn�����o鈠�Yq�D�}����0���*�pA�9�z;!z�ڑ��+��U���)IG�
7���."��Ȱ?�ƌ�9�@me�:�7AN��x<YA-�z���v�Pp,��̀ϟ�vG�#�Ӡ����:��1^�D�9�z�,�ղD܄±Sa
s`Q�"��t$艚ؖ?`2x�6d�L	�p;�l��b�U�Y�bc��?+!�ݏe~7�d���B�Y�D�a2���ĸ�JXe��1���RU������ʽ�+K�>Py�4`j1P�Z,�U�`�;;g�0^��ٗ�tJt`</��3wZ�k��31��܎�@��~�B����ܿd���IP��I�zv�������]��[���q*�n�Y���%s
�<�|J`-S�����xo�|���B�
��T	48P
�i��!��(�R��y(���*�v�!zr��p5�
&�|8U,
_a���K�z[!�Pq�B
}vᏏ�CHvv
�BrHSw�V�F΍�hr�Ĉ��N�K�v���+W����us�;d%ͧj��v�Վa���Y�uo�jg�i�{Q���[�M�I
4S\���vh�7�P�b��@��BnpU>e�$�,�57w�dUc��lT��B����X?2��a�M*an�B��"��eYmJ�c�v��7�[d�N��쬟�v��U�}ţi~�&��\Z"�r�"v]�����f�—�.�Aa�iJ�ݮ����{�TYٯ���D0=2i�
��j9C����|v��3<���tX�_�u ҉�܌@�VQU���U֑�?��y�����˂̥L��\%8�&�=�C���֝m��c�PQ	��)��+
~��������TKT�g��b17O�Jm��ߣiB�IP��Ӑ�^��*	z�Uʻl^��BA�k��9��~�]I�%vF3���蕑M�ԤvC�K��{j'�XqK?�Z�a�F|�EW�pR��e���|�P�Q���\���x(�;�ܕs`hJ|Ґ:�p�e+J����WOҀ�����4$ٯ�e@�:�P4bV����g=8�8(&S��#m��m�	E�쮤k=F�8�I�
>��%�ɟ�i�'R���.Zz3�H�7/D]�k�At� jX:䕊+�݆�5�E>�A��ٱ"����ByV���Q|��^�F��v�(`)��;����3��8T��e;R,�LIy��1�����G�&�ѳJikp�D`�O�Q��[B%$R��V��w	47{NЇ�ҿR����*�1���K ��ؐfar�\dLx�*y
g�$�Ѯ7y�Z�A��m��ҕC^~���2쓏-ϩ39D^s;q��$�<w�:+�X8�7�0zFO�&��t~ݶx�]t[i��g�P�ݪ��|ơ�C?x	a��O�м�A�� ��5.i���	l���h}���f�ꬫܭp�Q�+F��J�t�'��Ch;�%� 쀬ѵ
��i6�of��ܞ�zrb��?D��G�t2*WdnFSŠ�/��t!OJ݇˭�Li2�`��h��o�����[����G��]6me�Cw��,��5�+�9�E�Wpq�9m6-�̞��Y8�<�Z���l��M�? �n/�o�w�w:j���E���՛.V8�\�)��_Ug�u�9����V�M�
�㶩j�U8��C��$W��wd�.@�a-�WE`��b!�W˪U��	K���1q|W�4{0�`��A��N1��>+q�����(���ī�^�O�B�^y�^	
���W�ks7CA��U餾Y�o7�
/�6痫�B��!��T~��{?#���;s=UA��F���
�C��TA>J..�V�v�<V:A��e�;�u>ګ��q�b*mX�y0C�G�Q
a"7w:W��d�}���-"�Z��9�5�$u}�M�[o��j
N�U4Q�G�i�n���2� ��C�A���C�Jw�X8M�K�N��l頽���h&�sGI	뵀W�$���?vX�f
h�����/��4�8O2E,��9�ƺg.�.�l��{;��k(�<�����h��j�j�H�莋C�Mȸ:{�����ړ�BqH@F�����@���5���H�ƽ���P`��X�GŴm}�p5/��1j�8���+��>WSk���)Ƴ�f��(�`����i�8	�+��_ы�n�ߔ���c7���0T���<�br������	���ֿ��a �@��J�Kq<��_�A���I`����|
��z��;'�`� Ga�����X�u�(fn��g%�
7�cD&���o�C�/4��7�9�B=����L��pz�o��s!����d3��v�1��d�)���+��(����0HxH8�O��T�Ո�	)G��F�ĭw����L�j���V�*��ԩe�H8~�U�(�d���I�6�4���I�np>�C�c�!�u�b�}]G԰}�D]��Ď���0A3`Hp��o,��C���S?,���vI9�J��h�x	lTj�Í_;�HKˍ3;N�
+-���W�m����m�R܍��ӕ�h��q����%��(dN��i?��ڶ?��
���f�?�G ����en����聴��Ds�4�*ˠ3��¶|cN��VYO�Ke�:�U1�ޒpmG�y��E�R�b�c��Buu=t�&.w��;������Xq��g	䬦�^9�ɬ

��-���1C�'�6X1�y}�����=wdr��p�h��q۩�kL���qrW@���Z���

A�Ւu6����NWZ,��N�e+�VҚ�T���p�r�N,����ٴ@�I^�D��cA"�VwW	��{�+����s�;�qqA!�2)`�p�ß^�����c�����
���@:�wV�����!�5�0��,��݀Yq��X�
��G|6~H�����#E}h�c5�/*�J��{�X�P �N|�	�k�mx�ڻ��փ���t
��>��k���R�����Hg���	ר� ܶ��v��ӂ���T�c���xT��s$T��n�csE��
&�À�0��[���԰B$Ֆ�~$%MF+<B����ci�C<f�'k+5�3]�YS,����͒Q19H�Vڷ$�˭�^�g�I�D�	����7�z�~R�7<h����6�"�����-$+-Iy0���3`�S�'M�е5.�*F8*~�(&�=O�ɜ�)�by�c7�#eጋ�2����k��R��t[u�^O{� �O��6Z3!�t��/��i��Gu�6C�{��t�W<���qA8�~���
�����Q&�d�c+�Uw��V7Ti��R�D���-�*;'��ٮ	C��6Fw���|�H�B�M��/���k�A=��&���L�~�P�y
�GƼWc���Ʊ�JA��3��<��O�֪�Mmt��j�,�����^Ͻ���LQ@z�$������]Mo�0�+��PC[(��Ў\�i���Z��A+�_��q\�	����8�������i ���7�����?/��%!0�.�m�0���	� *�Ԛ}�+-���q�9��ʾ��[����"Nƹ�f�>�5wgA:�p\yK�Q�c�
��2��ePB$���=9�KRj�ߺ���ed0
"�"vG��H�k1
���8:�M��b�_���4�L2{K��X<����]��u�G�྿)�K�!�Ĭ�gdn�<�#�k��KB��R\�c�B�q_�S@��`a�bL$��84h$�q$ˆH�?-��𫸆�7�d��c{���\�+�Φ�7T2�YS�ʙ9���
��V��q�N�bFOu�fɗ�;���\��E�:�x}/�V������.�~���k��%���?��������ZU��E�][�}�Z��]m�U��K�-JP�u��Ex`o�*/�[��w�9�l�P���}��C"���ع��<�׷�/���נ�8z��e8j��sz��Ț��&����p�S���R�E-p�L3Z����4@���C��*�.�Q�ֈ^�P�F���4�hCy-�����kOI�\�xČ��=�6���)�D��;ɲ���h�myL 2��WU��~���t�<������e
"g�5���[-�b2�H�8���;�n>_��ߨ�k:t�`O���p�8
�Z�S�2��qb2	[�l�3�[��r�(H��G�W�V�ް'	��E3\fI�lӄ��М6C��6�j�ql^.�ٛ�*�=	�8}?��`i�7�b�h�5rY����*hK(���3�u=<����
<;h9������,%o&|"
0�FB������c�E�����ZK%��7�~�z�����]=����=�f�X�v�����?oYL�
LQ��G�G2�֎��Q�y����;\‚��f���ۢ{oc$�;r���B����6��K�/�Z�c��~��35�Ϋ�iy���y� [�p¶��,�2ϱ���<��vo��#�M1���Q��/ٞA��(ne��Vo�1h�P�V��������}�V$5��?9��rg{�c��˵���Ƿ�;��Q*��c4k�Fġ4�0�U7�p%C����r��"�z@�6o�ܶ��
>�똯�7�}�����P.ו�0���ۦ���7!�S���P5��%_B�5<2�w*��^��Ch�y�C��^�AI_���Z5��C��Q{�$���c�:2i���{l7���^�YQ��
{�ʣ�|a9�=�؉V��-k�����y�u��^��D)r����-&����xmS��U�\��	k�-y�M|��tE)�:�P��+�L��d4�p�@������ї�R�۟����/S	Gꇮ�K�.4�ez���Z-�/�;�3|����r���^�va.��"�i�z�5�鸉
���ҤZ�]W��Q�}Sl
��/�w��;�<v��?�6��!��M�U�N�S��6
(�{�jM��������!��gT�&G�	�����]G�m����q
im�����t���u1�4mx���P(c��:b���"�����{��#����s�B�™?�;Ƈ\X]�#�%�wn�ݮ8`�je���5ȥ�Ao�T"�?V㱓���!f�|�X��O�_���XM���ET���=g�Eb3o8DpHbO'|Px�-["s�H{�.؇4ЌW������DbuͱVz9��D��������h�2�8�?h�!�ܢ�(r"�wZC���1*�}o��v�PsS�g�+9\�ˬ��.
l�ޭj�o�Zx��߈1��mV�[3~W��;��Cُ�W�0a��;a��OP-��:6�j�$S��k������a�M�/h]���
�Cuٓ}�1�U�:�[f���Z�1��hN`UWv��i���N�\��k�\�u�����7ԩJy���(�W=?��ۛ���6V����z�tq��𘫺�a����hט�:�>�s�PץEn�qw�]6�f�g�U��NhR{��G�d��L�ay<�_��6�C�3��<[�аN4|�X깏�|�����Vkw�9C���ˌ�ע���[E�`��x=��"��^���a�@^�N8�n0D���h�a/��!q�'�f}���z�>�mM(��]��7�h�+�s��1�퇎��
�V�׽'�4��� U>O:"N =�&ݵ���	��r����pTg��D�`�o(��/��C~S$�I^}��?���f��M�Ã��6��5�ީ��~��mB���_��Xy[hX5 bc�T��تZ%4>iYg�f�@��%���)G���֮�,�Q�8�WJ�b>u{2T��քdOjּPV��8�-3�;Θ7>BB&��at�B���e�ơ�o�H�](�)�D�m������aD�Q�at[�$8B���a3"�S>�]��TNej�۹.�%�B�eM+��Ljq<�tV�Z�	mf4�HL��aȞ2ʔ���v��ǦȚ�O�ƾ�{TȐ�:��L��`��ḏ=��������E��g�t�#��n̽K��r5����;&&쫃�O'��z9�)oo�����?�~;?�����ߝ�g�!	G���ۨ_[jt~��鿳}Vx����x���r�=�ί�j[�
z��GF����G�7G&Zh9Oo/�,/���?���Le<Q��袵=c�Fe�M
�	�چ.�b�/1k:-g�OS�I7,)���z;o��:�I*sc��	����T<�Q�T�JN�:6����|V�EDL�#4${;�v�m�Q8��D���>��\���?ԟ�jxH=�/�1U�銈�����b�UyS��Z'�B�*�_TU}�:lB�+D�f��3�r
[w��U�}*㦊AX�i�B�����.&�1��E•��@����&*Ũ�9jw�'�Dꪸ_�&��N�EUV"��2��N��2_��Phnǁn2��W�m@��(f	+_�M��j<���̚F�W5�?:a���H���Z�]�T4$�vs7̏¾���셆+rP������:���U�tڣ��:�D�ZΑ�b��-�N.�����-�ku��-�3�Бǥ�ׅ�܁*�P1|N9�øV�)"�$�n�;`��u�����=Ʃ�E��H#l8�v��ݲ:�,La.��1�~�"��Q�	~�(��7�u2��!���.�l$z+;�R�K�pÀ�5��D;�r5-�h�3����8��y[±~U\^@ڨM00���1�$�&��4�
�#9�/�.�	dN��%
���D�~[Nq6��M4�:ͩ�~�W�DI9Y/���ķn��~nϬZ�^cǐ3Bj��b9 �m��W���4u`�e��l�&�Xy��E��P�l"���`���Ǣ�W:��`�;��#G#;�׾�uz,"Ub��I�,j�j@��<�vKK�?�91l���_�E���d.��J|�\�I�!���_Ҕd�	���?���G�/Vr��j��Q�i�wً�cUL�k����6'p��&8b��r�.�|A��J���N��\gs%ކ�z�E����;-+��^/cyW,�D��=�:����&���J�\Ǐ^�
��r��
î� �91t�F�
K�j�p-E��C/dۨMx)⸾N��3�ˋ����b}Sm�l�dvw
>$��4uӦ��8�K�Yjn�^R�)���E�M��J�?��	�d�����}��&"��Z胚�1�zZ)m0�tf�&_���'e��m��W��ε��w̌;�n�p�k�^|�/ы��-Dz�%N���ʽ��i"�a-WcA܎�m4J�U���O�َ�e��͢g��
�7^`S㢪�%eÊ�L����kO8z!X��FiњR����+e�4^��Uf�Ͳ1v��`�ϯ>-�o��N�V]>f5:'�@���O��>]�6��2��#�øgF�ɯ@0��P����Ȣ<�s��c���n5��u+#�
�}��`�h����l�
nv�;t�������sb������bi��O�{�f��j�?����`����-����I�ʰ����]mo�6��_��`g����6�5�$MWiS��6`;Vc�mXN�l�߽�M"ewXQ �$�HOǻG�#\'������)���L]��h�I����{�^&�I%0��نT}
�jW,ʆ��{���R9�^#�~��H�C�%\<k���pQA���7�,�R�	a��
��$��M'�R�U�������lv{�ʞ����3�fwgL�{��lY��x�0!_����+�T>�dy?v�P�����n�3�Z�yu�.2��wq��%��Mq�Ѡ�{�����������Un���W����`hR�"��<NV��^=�Ų�"1@����erh��0�=�]��u��kn��)gC{�K�3��d!��~�c�)���o*cQy^�W���MK�q>�>���p�x����f`�����Q��	0�E�˘�iQ�w�Gb#�.�䨩�k?s��f��1�����<����H�A4�a�;���켑V��߭+A쫢\p�?��c�_[�zj���Km�����*�����K`�j�6āW��c�`�	u_uCEY�����W�	�2�Ӕ��d���-2�/X/H	�/�b$%%�t�.�'
ܬ$��z�⍿RE��'trK��R���r�bD0r�)�F),3|x����*8`DC����J
�֛�]�M}d��#�A�'E���)'���}c��Jǰ�]�T��[�8܌K��پZ~�X��;�Z���c�u��DF��w�����&C���Щ�ȼ�ګ���9*v[z�1�+�3`��0cr���R�I��9�x糏)$�z>D�^��ڵ΃9�UFoX�`��/�i��j)z��B�+����+�פ���
u:������-.�֎��}��E���gƥ5`����{��a	�|�V'�"�`a�^��GSz�a���o�i/���/��
��r���)pI�%��aI,�?�����WG����m>s����C(�a?������C/�q�7�o�\w��3h^d
��5�[�ý$N ���j���8���{���.C��g�a�S�8�
��E�����vt��X��q�^/�nwɍvng뻇Ig��
NN�O;�5u�Z6t�����
z��-jv���Oo�?�q�6eG4T�j��0���EC���L��h���X����Ec	jC�1�wb40�"'��׋H��A������j<_�лG�1R��]
.�!I�B��y>^�
��7�J�z{�@��T��j{
&ы����e���S�gޱ@�u��q	_��Ö�K�N�UR�t�z0�9�kBl�C\�|���k\%�ݹ�J&���$+�c��
��c��� س�1u@6��ń�U�Ly��`;� j곊O��iq=C�����l�צ������Gn%
�.f��b�����=/��O{z��1!U`<sY�G���SM���oR~�
�8)�z*�GC�����S�´��i|�Z<`f�*I���;��a<"�01�}�tNSCF]Ū���Yd=�J�AW��Ď4��s�%�&a��>����4>��N!���Y��`d}UI펱DF�]�(W�����>�ӫ<�os�
�$-�VW8>�mZ�����2SdL�4(R�k��%�>*�-�t�=g�e՗��q�2���pI���:+,$�5r<�-{d�g�]�t�2	UF�c0L:#>2��\�ٺ�%o�-W�5�A�fCte�����Q{y���=iG's��{nj嵬7})�E���׭�f�m����ѯ�t
o��X��OA:��-E���=kf]�$��4,M��>���I�%i]��aVSI��l��6VaNC{���;A@���oթ�ŹM��.c�#�n�2N�F�ȿ޽�TE;�<l'w���!�;570aF.�E�z�pG�W����h��l�.�M�������痔r�d��
2�l6�l�MʦO?�¢�@r��x��~�:��NGg����w��3~2�rU
v�O*��n=��:ӣ��c�'mt�tH�����/���ks۸��M"�$Z��M�R�w�]<M����>��G�)�cZ�Rr�D���],�AYN�G�����b�X,�)ϊ�E�cI�I��zxq=&g6
�-J��p7S�tx]�Cu>H�VՆ�P��
�PQ�����W�,�G5�j�EH���q����jV�!����b�
"���9��H��#�OR�z�ͻZ-?��������`ʥ�����Bf�7�D��"(��q$����)��Y�T�rx�C��J���E�����~��
�AZ�rE����XV�C*|��|>�-�Q$����k��5���8R������
�np�7A7#��6�o��6�$���sS����EW|���`�D����{BF3�NS�E��!$��a����6�p��ax�{�US��P-���ı,e��X������'���К�>/!�A�R��{���HE�g��q���Df�,�Bs��s�c���\�ndLX��P�I�h�b1����v��U��]P���t����Tő�wft~y��a����o����?�7�_Ei��}ȵ]���)sD����΃��K����}��E��O3N8��r�16��9��`EY����;>���-�zO�)��v0N�V\��z��q��V�c[�~���u��o�bP�Q�߫�R�T�.J���E���`P��P�[�f�i���DE�D&�^�g	~&]q�_]�gqP��.vKGH�V����ź{3-���X�k�#ŋ0�H�
q�)x.�%��\�U`8���K�L��^Ҋ_��.��`t(=!/-�jn�xy7�8���^��Z�A���c� ���"ɷ�z�O�8�%��Pp�Ԃ���A$[o� C�5�����ecxB�ŁAԘ��:]q4���=�c�m�
�A#%�l�N����k|]���K�˦�>K^��� ��W=x�7���)
��jK�^��uvC�
Y�S� �f]��@��i3jj�����e/��"Fv���!�=�7���VZ��6��f؏�'�F)�ڍx(5u�����p��.p�4�(H"��A�3%�Iz�~V�/�2��P�a�O�k?��x�d++��/�1��(� ߿
������ax�Lg�9#���\Փm=>^}RQYKT��aq���Ku�t�ߦ����'}/ؑ�� \.��f%�<��:�mv��Dɀ
��M��Ik��^ͅ��oͺ�e5à���Ԭ.�e��E���Bh���M���6�('�`�	�
�5�€9��y��~��-h?+���u[)��Y0�YK��=�n���<������__�d�F��{U÷^U���a�$1unz��%cǷ��Q�}.=3��Q�������S�L�(\��Nj]�V���%8��H�5�(�,��>�V�N@hg�m��n&�1�b��u��{)�?H�n��x�k�wu�[����,bs��T����
y���Tz���mD
9&6�KH����=,���\�Ŭj���ZR�<��j��\��ŝ4(���2�\��)]b����R�J�5��?ƀ��wG'�oLG���vtǍX^Ci���cVS�d�j��q=������sM�"���=��8�Kt���f����1k]�&lz�v��DMa��j]<�Zզ�{Y†��v|�'s�Ǩ���P)���+NP�����,���y�&�
^hJ�O���e=��S�������Ԫ����Q
 E�n���AXJR��F\�o�z�G����1��
\��|�'��|9ߙN��gꟑ۶�!�AlT���Mb!f&A��d�q��C������#���
��%��)(IeP$�X^�	�z�Q�,�"���l�글w��t�c�j�V���$S!D-��P���%[Ӥ�Œx)�f���An�!�IjeKE�����}�ڍ5��x�c���pS�9��j ���2�����U=����F>�7�,2%����N��M6�)
v6�u�7:�:aԪ��H�ו�r�w�z�ð�ؾ���t�3VM�b"�
a��m��j���z��Bc�J>�1���B1+���&Z�����3p�i�,Pd�Q�F8cT����
��ilb>��س�pb ���+��BWk���gO������0֪�K���i����'�kmm
u�n��϶�������R�_"�t]��`'���8��.HJw�D*�A�1������9���
�8��\�k�I�o]�\5^+����f���ΒŤ:4�m�Е��7�T�YY��7��7�3+�EʽH�52Þ��>�I�N^r:h�n���_u��w��(��r!�sc�(�}Uv��<+��"ܦo�wv�
�|m����n1�I��H 8��&�4�cZ|$i���q�r�0�jP� c-
b�V�ua�"=���D!����P�Bg^�4�}�ݠ� fr	���ޕė���Țov�y�ք�*��k .��:����͌�=��[��̕k�BC�R?�\������x��Xt��&���w�h�ҴI��m��v�x�!,�^~=��w��Fg���P#QD:2`)�ڋ���l�H���+��7�'�|3W�P���ҧ�W�}�A�k!���b���~Z�t$U���(8�)#��N���ůs��<'m}���IU^i�/����Jg�d��"��/��Eg5�2�]��X�S#��&����*�]�y׉~�n"�%)��&�RaFh�.�%� NND�Z�9��
|\�:h�bA�+;�zg7�B����[�v^?�Z�I:��ϰ����ʽ���o�����jq��&�Ѯ�d�[����nD{RH���9mX-�ly��-蟲�\2�o��Q��U�~2ELJ"�8�{��,W�P�����e��[:e��g�kx��~4�g^O@����.�s�}U��y�Y��������9��#1Kԉ�pq�ӯ?�cb�L�M�-����u~�N��'i�Ջߢ-�9GBxF�䋩�b��#1Xъj�L��KSaϳ�ߵUf�������I��氼�-�yސ��>�Zl�8c
�LF�&���8��;���*~"��%�5��1@-��`����1���ׇӓuBX쉹͂�J�����}���6ɉ�(��n����j��%��h�Q�p�a��H$�b1��A�-�/,�=���%�8�|\@�H��5ڿ��z&7���򮶏'�:[��4��aR>�$�<�,gq8#���-M�M�P�|��ن(�̗���th�V�.��K�x'TLM���Kd�T'�T�><��b�E�ZO�=,��d�c��D�)�,4]����4�S�ƞ�(�/i�K�_E�2��/�yq�q�|�mkSs�B�p~w��')Mr�h�݄(�#�3��|��/9������U�b%�r��~���s��N��KQ�S�'��O��|�N��!��o"�;��B?���Z�=��?v���p�ͼ���1�I_�S�f��2n�[c�[����,����Z58�����E��ɸ�v"�	n}=E��܏���eH�Eq�jqQ��_:�P@��b.�!�� |n�R�1��8-Z�pb�T;��'��x']*	F�zA��&�sni��p�&!/�:��	�(^eP��t`�ӸS̝��p��2�~`����4V4�ryuB�y4C
J�q0�D��l3�mU�i�4/U�8�dAv��+����9P�]��<hʎ��2�7�!����ﴹ���͡��q"����ަ���"�N��o8�����g�Rb������q&ub��$73B�}��3������cB�z&�_sk��}��Vǣ�"�W|�a�Ϳ�-�'mJ51JYA6����y|�!-(](�#�s�"���ϖ�<�.����,��<��*�9��S�sǟ?�<���}�u���	)Tf�-�
�;!'�?=Ɖ��7
A�@���=�&x���r��G(�,�`$F�G�ǚI��~���+/�t�b��C�b]3u�B�)�	��UC���J��dI��/��r�E!��c��ո���}�:([V�yQ���)2�k�$%)�j �;+3�q/��#���������$��`��z	��5Y3�<�Dn+���]mO1�+�4iLZ�`�nBӠ���>܇�Z���rS�B���⋓ܵW��D�8����Γ���<��
�xkA����,�#�O�o���a�Z��r�V���c��Y2�z�0	��3���Y���3{m��0��k�Rn��\�ƚ�,�i�xZ7H/��ڝ{����H�~�Ն�M�>{�ff�Xz]�G3�V�_MK�.,��XD�<�BS!�{�E8��%Z��$"�\ݏŔ-1�\�]I�@��H��h�^�{۶n��l�$8�<���;ρ��	�9�?�S XU��U@z�Y��2(r�$���KA����C��A���L�(�ې��͠�72,b>�ڨY�<Z^B�ꛢe�̽mY��(�B�ӏ�:TK�^��r0�b�����Ί���x�
�
5Y���߶ġ�{&��yΆ�^ñ:��������@�K
�E�#e���~9gD�C��s���+��-�-�S�����m˂-ym�Co�i�d�#��	�����g>w�ALyW�'z�U��G�EzW�Ĺ"������X��r���qs��z؂u�a���܆��.y��a�TA~�V|!�~�����}3\W5�DZ�H���>F;��/���3�DeG�f�2��X�bژ��m��u0h�ߋX�$v�r�5�(��Ur�:�6��<0�O�Ն:u����M8oQ��~�Yө����ꇖ�K�(w0��T��������1J���`��9#���!Q��k�!�]qoU9i��#��X}>��pH�"���@QM���7�*r�q71n[f��y�{m7@�ɎHgu�g!Y*�n6Y�6���x�lX�f
?��3p��D7�K����f�0%�t�n1�S!��q_�)?��ѵ��Z<��M ���c	�&�Pi���늒ٙ/��o���0n��5�/.%�k��n�sD����;J|��tA�%�ky��i�	�ر�0A?��\�bHS�����Q�:~�0"��\y=`����/?Ű-�3BԜ�s9�v̺*�^�P�^ɦ����K�%_����\�+?���C��l5�$��"��0�`��GJ�(S:X��o'ߞ�1�k`¬]O�wT��d*���d(����]mk�0�+&eдqHܥ �v߶QH�i����[ڄ8Y�����N�Ӌ��1��%�%�|��:I�s�#���V�����V�d�0���;,�tV��(!pd4\�'�g+�!~f�8O��^���9ػH~�%g�$@�o�\O39�/�L6�"��s�� x���t�E2ތ�q:���A���J�]��])�V��)j�A�1�C�n���u
�p�8�\�I!��t�;�0�(��x�U�\�»g=PC���E�8�ٗ�-�ЂnOXlY��|Y2kD�'�|6�ƌ�/p�59!%�'sI<��v
���lF��쐌Y+�" ��(��_%i�������a�nC0�Gp�(���{j(����ǺD�ʍ	�jo?K��&�|��[��!{�yT���G���}�����$��G�(���N	��)pW���T�X����W(�{i������hچ�PX4<�J-%�[���5��ڭq5�{<�j]C�A>x�c�0�~Z�7O�;t�1Bv��O��{��?A*�
S�s ������G4֋9�E��N���ۉ4n��G����Ç��-�w�M����G��
ɒ�	m
^�-L/��~�`3��9FX3�hA�!f�⎒�C�/`N8��쌷����u+�Z?�և��*m�Cg�B	ElR)l*m�z����>��̛��B��D�~Pl�� ��q�ފ�}����i5Vb��qY���۳.�Eh$-����׶��d�"�����ތ7�
��U����sGVQX�:�%��8&�+UX-�&��L~^�����d�ѢM��d��^�]�)�-Ҟ���uUl��?�w�b�Q+�X��_ܒ��E�.�SR�WMUktgN�T�>�Usu�c
��x����kkU��R���W%Yt`�t�1�d�D�ʠ�Uc,R�5*�Qp�mh��05�Q���?��[e����`��!�� dVh�k�Y�t}�Z��S��x�$I��&�{�R�U���vs'NPV�����=�SGҿ篐�đ*���&�ȒR���3p��|.��l,�*�
B�߿��<wF6\*U�����y�����b:���i��}�<���Xj^$sUJ��y��q���̊��,
��J��d���2̭f�@#)������"�f��������y��q���j�.䔘�o>����v��jw.xZ��b
�I�j��ڀ����0�S�CS��j.��D��<u�;�ã8=h�$�g�s*���efp�*?r�Zz��|��ZFT8O��ݮcdO�o�&7��Ȍ��]}iaw�L��v�d��
���-ˎ�l���H7�'(��CQc�
'n
7��}�~~5$
��c�)����r�d���Fٙ,����r�'8C�E���K�rQ�~�ce8���@^��L�w>��� >�=RSN��s}�w��F+�–��jB��vjVt&SGi[����	z�Zq��~­�ߙ.Yՙ�S�>��k@�	5l%�5������Sp�ݴ?�7��k��	K����$�\g#�aϲ��.*L6���FFl�+f�=U_��-PX�Æ��K�۸���~?bb(�?sM���{�����z�a�Я�����Q;GM�M��'Jx݃�ɳi�`E��m�U+H>–W�6"��^C����З'q:�^���q�
zM!u�R��i���ϟ�M|�mWt��m��__������͚��.�+x��7���Ǐ�vm
�����A��},H7���Sr�z�K���9:<��={�wx��]%~>�0 �]�Wt^\���P^L��bi4��b��[Y�����;=Kc�L�u:8�Z��<�Iҽ�fB1��Ƥw�yF�Fk6��M����1��SP_��
K�F�Q�nm9w|�v��g�,��=F�\��2x���9����{���H:��E-�+Е�dHR=�jPtE����'�!0���lwAW�����k���K��l�X�qCY�'���i�^P��G�����r��9A���`Q�pj�P@,�QΓn���%�h��t2,,�t��g�K�nD�'2��Ә�z 24®��[�5�EYpНx�Y�@Tp0�!o݈ͮ G��(� �����C����TqE��	�B���E���2�fCP�^Z�-3���\ڳ[q��HŮ������P��ώ_���%���W��9|,$���l��&���QA0*����ӥOtex�J�>U?;����W�/8���|Α*h�
$@
a������bz���q;GoO���G^�A���Oej���o,��|�յδ��U�H�h�}�F�p|3�3���3�U����1��]��@h(���yut���.(�b	�sp��Ud8&�_M���b
���+���ǡ���`4]�lI�K���\���j�|��7�����YG#�����E���6�F�l􋈃��v�Ű�.�v-�]�Y�7h��lnS���q�*B��y����b�2U$��,+��n�_ԁD��ic��,�-Aa�w��kd�����7����j�����qD�+�����d���_D����+ѷ"~o��[	�'J�َ؟ݏ�7�4V����!��G�_�H�B?��uL����P��o?��"��2P�Ҹ�܂$��� ��ò~fΛ����~����=Uh��%���(�՟;a{f#G[zYC�ƙ
9�:`T������E�A����2�̲gA�t�Cmt��
sG�p�B}�=���9�k�j[����4�׫U�	�cl&ɭ�Τx�3#��s\r����������x<�.P���<:e�	q��O�t.&� ��1��H����`��L��s5I�@$~�.ĒPQ��0-[d��ܝ$�K���i��eڇs�nx���$�>�\+|����QƑ�z�>����.�aTskU�j�l�J�G�HK�^Z�N�������F}���҉����YEQd:�Ю?��o�Y�ޑ�b���gp��8Q�����5���c->I1��	�R�[������
Z�Pr�ʚ�	��_{�\�,��'�ޱ�ǂY�za��L�R��[�S���%�"�s�&pKՆD!f̑0G7�^t�q��!@>V�..�^h�젂>�Uj�
"^���m�cM��o��@3���}�����S,�4_b��
�&�6+�E�=���;T�@�g02��O��.&~��v�(>������Q�M_7!�-X��
�6�;�U�F`	yق�s~��_��z�U
��+ތ̖�
��[Ct���k�>��ũ�E	��&�)��{*hc�R��l-j�:/}��(kb>�'�;4�V��.��מߤ-�ay"@�_+�r��n)zt���ljw;�}|�UAE��XN�G�ܾr�6�"���1�2��0
�F�:��f
�Y$��/1k�����[n��'o�'A��
�����f
	�%$3`X�'9�u����۱��F���RE$�ս�MCCeyIGˍ�K�[J��}"d�t���#Յ�*�5��
��8�H�,�t�7�²�6b�u\$��Gf�i��Q�V�ڸ�ゖn?

r��<��g��BHB"���a��+��7 K��m�9b
D��Cc:pM3]7��\:+)���˶�'-3�jվ�ܒγ��/���o(���+��*��ѩ��I�f#�2��2̶)���ә���T2��W� � ���͒z���X����]}Z��b;�u�==?ݗ�X�w�3�[�&H!�E(�V 
��\l6���gZ��7��Vg<-�Z._u`�i}�o���EM��m��yv~j�u���6�/���?�ffLV"��A����L��
�ib�����uZV��8o	���6{
;��j���s15l���$�_f��n�ϊ���@���=��>�ү�8M>պ�}��\B�
f��4�E:��1Ο�CeWц:���κ:�BG���?%�e���ij�B�8��ҺfšJ��}�<{;m{�[�HKޠ �W+����=TfOO��r7��P�*�����;q��gB>o��U�)��tg����mW�%s�%2|��Zs�����|�؞5����ݓ�`�B��!h�Mo&��]�P)�9,����t��5	�F0�o\��^��L�V���M�owG�K4��䅘斌��P��ͯ�3	��?��C�^(y�ƷI��奨�-�0��<f��?�p�ɤ����٪
Ub+*��?�3#{U�.�j5��`]�F�r��d�,�(k;�/��76W���;b�;��|IE�[|���O��#�Gή��/h]t��m��k��K�'W.�����፮�?WHg$D�
G������e�bhh� ��X%׸n�n-0t����h�췗��;�J�O���x'�T�'c�걝��yk��8{'�V��)UCi}�-#6
����$��J[��/�gry�MN�C�Bܩ��p��[b}ͽ^K�g�{���➼�f�$��D1+��8:��*w���),k��&d6AY9\0K}�p@7c�(']%Z��P�%!��@��gq���� �=�v5��iaMI
C��7�7�6#���|�~��B�ks4��t�Q#:�!���8l
򥽧9�4�v��<��@�,�a���
̶��M��#��y���8����^��l�
P:e13ûF�����i�IQF�2od�B��!+�D�/T\tx��Q_��#.Y� �K��q0�%�*�O�4P���
}�q���� TJ*ؑ���!1����(.�e��!�T?]���yZަ�Ha�Ћ�˼�Kev�%�Sz1�
�"�@�n��h6ؘ
�c��>�ZqPhV�d����l杪.\vXb�̬￸gAFAw8��h�~e��r#x_?�Y���f�3��^X�f�Qw-��B}"�Ҵ_�����0��*8����|aW��),M
qu*�Z�L��U��?�Qt�|Ja%�R���t8���:����r�ya��x�W�֝4TQ���U�x�������Z�����͟�k�7;�V�3ّ�r��)uE�cԘ7s��Y9O��"�TͤYez��jGI�!��b(��l7��d4�}�Zg���0j�r�2��k,/��w�5��,	F�ƾ���424��o��e��2
��l9�"�,d'�0�M\-�EY�y-�<D�OJ5+1�)�����k�����d'1���~���Mrl�_Ӌ�S��٢e,$���M�k��g<F	"3��U"�P���ӧN%�[�[Z�+��� +a��
:+� Ż^���X���I��er�Y�{�G��GZ�����[������$����z�b"�
z7b�'��M^���2\��ib߸��-�%����f4��_�7Y�<�Ո��ȯ�v���L�„+��b:[��
��N'�P^#��U]ܾ�%����З����E����6#Hz�}��ݍ��^q�.��s�Z,���f�/�gϣ!�t7~�A��Sw��M*z;L��&�"E/�h��H(�x͵�_D༆Mo<�ߧ���F�VH�y���r5z���f��n�G'�y�e�/*6�P6��	 �go�N�zG���v����?ת-�n�V�j�>�w;�����ߘH�Z��]�;���8̤lJ:�*ݏRv��TǮ�B��ţ�lP�T�R����r2A��dX�/�B_�ŭ`	��J���bj(�H@h��B܊2�Vp��0.���`���I�[0~XQ����q��I~�1���
�#d�	��+[��#�_��9�>�V��{�|�0E9�?�'r;+��|Z
.�'�Zg��3�L�M��D�U�,8�W��\�(%�'
0�;��a)��iu��b�S�Ӊy����;���fȦ���[vJG~�AV@��>[v1��j�ah��lІ�D�.phl���l���:�uL`��	%u8�IZ5�o������o����z��o��Ȑ�ՠ�^C�[VY�?סO}���a��Kǣ�EuH:?�I�k�p�Zp���F��R����3!���l[�2yp-}�֏f�NڼǠ<%�3ϑ����)(�8oׅ�]�s�U ��:d�/��3Jv���98��;;>�;9;<�����������G�wף7{{�g;�{�z;'j��
=��"%�z$H�_(K�;�l�U|��MP���"���h��p�B=��'l=bZ���ٟe�}?��?L���
�5P��D�H�ѕبeࡄ�<�q�Q�bd/�+�V��y��U�'�Kz��<2B{�O���Z�͒�$�0$�4i#B�����[�ţߧ�=�)�;��aq��<?LFwj�/S�M�fłK��v�s�)] ���A��kG
�AѨ���;o�ze��4���K��{�d�S�O��q����A����h^c���zb`�A/H�NN�@���k�v�P�23�XD� �B�v���V�O�f�Ȏ�U��s0�o͞�X��T6Ł܂��u.������(���7*T�\\��>51�6+NK�m�|W��dٺ��X�t��4���j�Ԭ�!�t��g��G��s82ѫ�쮗���rI�\"aM���*'Q\���ާs$�p=����/�4!kR}D�Uz��#*�U�����6�1���z����x��=)���I���xɑ� $����\82\�O����4ȂR��:$��9��y�)y�XL,��K* 
J����-��(U&��ڎ���&�q2S�݊�D�$d�z��<�K-IS�a�3�;�> ƺ~⻠0� 3�6㟽���ɧ?�>qT)�hK���jy	R@V�%��3��
������z��ω,K�t!�D�@��jM?z�R`���4Ʊì~�۵���`6�N1f%�x�������a0ͺ�C�q�6(����Chj��!ʐ2Ci��@n-8D�X"��a��`�(�-�Z{��Lm�%<�<$&�0ا�{0�Yj+b��0bD+LA�
����3
�9�ە��m+/�$�gӢV��N�W*D��Dj3;�c����V�9�祗�ε��Bٕ|�w_
y��F�5J�W#��J
2�.F���Ǖ�k��惡�o�� �C�M�$u�OdG�vTu����qm[���E6:2�<]����n8Z�����a�� 8C���W�bkq�Q0w��c�z�ɒ���O��Y�?
��.�������=�0���"0t���QU!�T������S�i:�%m~�6���/ o�b�
8�HwyI��L���,�@0�e�H�1u��O+��_g��Wnq��z�g/|�Մju�*iHԃ��V�����iT^�j�`],~�� y_��Շ�c�H)�B=������6�*�긮ƫ+��?������О�:�g�=�$+z��V,���F,�<Kc�ȒԦ��;/�n�u�<��L%�y��]�k�0�WJ}Q��6��:P_�(u���c}�@������ڡ��I��r���
�9���
�ݴ~�VVA������kz���������d�GƬ���M��y�|`��R�8�"J�I�L^5l�0)�Z�-�L�ч ɔ�I,�hUV]�(3��Nl�N�U��lV����L�P+�J8�.󗚊�j�����kJ��-�Ob�+}2[��fm�O�l%�d�S��LkC��Pq}�R��e���к���5��C�\�B�M�x�bQ��C�p��
M�} ��s���yۚ�i���쑍d��uR�V	Ou9c��w��z�.�+�V��4)
Op��SX��\�x�<;������wY�Cȸj�w�i&BQ�/�z�YS���1�(��!,q�K�{`��l�
!da'���y��{��J��=�O�|WUr�����pA�j�m��Ȫ5�}��C�lt���wПwc�(0��O��i�۴�M8�� Ƨ�'�%����#���>}�y����G�S4‡�w׍���yx�ŷD=vgap{�Y�����:}��6�/�
�h�W�4�^4��I��yڻ����]ms7���_AM�R�n���IIT+�.I�ܕJ�P�Hb���8�ZZ����//CQqr�a]������
t?t���L��^O`�&�H�f�{|��"h%�L��*\�5t�"
6��=�wSALAF�LS��!3'ӈF��R�GY��� %P
M�g�kd�+�F˳ymTg]M/���R�w9��c�e�g1Vc-GԜ
8�$�xj�%��a�1��J��[��i��h��:i6n�L5chBX���&4�ڙkZ�kۘ8���~<P���`�u���fi�)=j�“-����2;7#àb��8�X����g�H������4�ne�9��e�N}0͋oL8bq�y��1��p~�V�����4+�8�oE:�uqyY���3�39$
^p9о�S�=���-3��c9�ςe���5'���D�Y���JصK�T:,��,邲bB�TSM+�0�r��Q�ȯ9�&�>;��k����kb �=
�$��U�i��z9%��#�f3�s$����`����q|m����9�8	N�t���ջ*�[d��~�9F�4��Œ��ɾ�@�K^�1-F�W\�03%�-�����5Sh�(4|��HB��^32��U���j5sc�h�1N=�R�����	����ϟ�m��s�P���e%�A$Q��BQQ�6_�x����T��3k�5/R���7`��`�zĈ;���e7�}�u�EcQ��¤��x�A&�ݸ�6��g��mos�:m_��׋������=<�m���8,m[5��>�4,�|�[N~~wt\K]ːY�R}��6j�n�;<9��É&
����,]#�e�SY^��V�@��΀+L Z�ѐ�`R��j��ƯO��$N{�5����?_ct�NvOp`�^l��kTM܀n�nE�	�8�DW�ݟK+��,&��[�X�����p?S|�9[�E�fqGa��(t�e9�^\��$��ᶟ>�Vz�1T	�&\��[fK�r\9��W��r:x�w�Qږ��6P��O�t��m��{��`�֤���9�W
��xC>�"��YW�B��3D/�$ϒ��Od�Ә�Wj���7t-�O��6��l=�P�u��R��b.lĿ�r�E��{KR��$�r<��p>O=�b�9�?Z�0X�SWٳ��٦⻩�u!4h�E�χ�2Y�i�n�D�o����lþ%���Zb�&����%��U�W%_�L$\ˏU)��o���b8��rU�&h�`�����H���{]����U�40ڣ;[���I���5M�J>��..~�QK irV30�ASN�=�>cpi
�h`5p�;j���bݛB�v|m��K�ij%������ĭIᬷ���o�n{1���2px��A��g�b{�S.{�V�9�r��ի��s��*[u]����J�1���C�F%}T��
Zݾ�ף.���x�ZVnR�	s����6M[ݗ�����>Q@�'%&k�T�����C��C}�M�	8���"e���d�Z��Rj/��)��N�w�IO���9��9H)�eq�r��AD��Ɖ�ƨ
CK�30��R���P.�B����3�\v�Q��=I��_��H~wnH��ȃ�&o�#h�?�[��4ӧP�m��|��D��؀'9f��z�_�T�Vr�Ϣ���X]�}p���u���H(���	�Ri+���bY�X#��V��i�`U;^o�M\���L�SE���6K�[��=�F�Y쪽�\��Km�
���n�Z�#M5(�;"4��=$���AVpj,�`/�HRVq���FQ�H���^��[�LE�LDe:ŀ���}�h	��H���-�ӳow��X�v�.���(ć%㸃�c�~P�s|��|)d�3#���
c����߼����#�-�v��t��A�3;�����6^j�q�^ď��F�n��EG�Ct��S5[]��c\B`%!+д?
��r[͘	fB�vs�ə�vn�5�=����qr ����q�=��K"���>�O�ӡ�
>���?mL:�Dd�J^
'�ۄ�E�%���4{��g�gi�����F�ZI�K"�$��di���mG7�o�6�),��n�SrP��=�/��FYQ�uF��h�2��R*�8�x0�����[��g$%�7�X/ ���<'!S �kC�-I�ln�P�};��`(J$Q����A�8n�d�ka�Ф����́��)N�ی��\~9���\#��x�C۞��eCWr}���š�S���CZ�k$�?���/;�+���8b��/�(�<��z΅e&��rXд��s��_g�N���'���@�t�P�Alįg�lHNŝ��8�6�d������Ƹ't�7O5��#
n���Z��@g�p43�Q�']���ŔJx,��W��}z���Yt2�`p�7#��Gu6��S���p�E��>}:=ý�an.���L�J�&���7r����(��s�f�3��/����ul��mZ����RY4|��¤܈�m�uݪ�
�Π�\Ǝ�,��5N�jyt���)�(�US��]�U3�- ����?E�2��M갓�ꬶoV�-k҈�?��~p�kD�T��bj$��5�Um�N���\RI�tjT�c��]W�
�΀Jz��}��NG�L�G���4.�Gt��/뿷��DZ�3O��������OB��ƣ��l�y9�9�[�С�[�)Z��ξ��wC�_$iB�E�dL�xG���UE��dܸ�֝�lp��%�i��'�A�ä�Y$�͙z��s��8)��p��A1]P��j^SI��m����Ն��8LȺ�Ы�2^2$��:,oN `�j�i�ò�M��llu*��C1��^��)g���{R$Ӻs�K���$^�Yp�_��C��d�h��3�:���QT�穗�����!&�e@,9i��H�^��7�NC�m�,0Ha~A@A�.8i(7:&���$h34�}V��I�{�d�M6���
�l�ah`�|&��i[�Fg,zd̛כ�OD�=^�4GW�<:�X�1~�X�0z��WY�a����B5��X�2�����rz���N��w��|2����C�u�cw|�M�.����Nµ�=}
���8?V�-\�6�Fbfa�q�3�q�w[��O�_*��=b��s|�jA��^b/�'+�����܊���N���O�?���:�'�c)�V]�7x.0���ن��t<�07�
?�}��F�z�k�����`bB%�o��P�R��框,5���U��n��$���bV��~[�]@�ȶS�f��~��湂�̓��ց"�k
Rt)9A��4���"�z�x��]R��k!ܛ��+C_Z|�8_(��_��m��(ޫ��6!x�7-�Ͷ�^0=o�6���4W���P�мk�+
��}��FF�}
L�z=)j�]���=28�9��7�|ar��G��5hvH� ��D3�Z��k[A.'���&/�F�|��WN4sX'HW3�4�ab5Qn�Nlݸ��E�wQ�d��-G�N֎/��-`��wWT�f'��U����
�փ����&X�����)�kw��`
4�([��6J�ߙ��MZ��
�=z��=���n�w3�w�_���;�o�/�cc���KM
�o�I�-�e��ƃh6�0�d���N�甕E�(��r�S�C=�Q��gF�[����Fo�����9H��Bv=="8�<^�ǝ��:��P`�8y�83:$ҹ�������A��u���BzI��Z����m��j&h��|r�64�X���⇆;���L�
)�O"�W�kؘ=��Jv����I1��3�H���k�9�=��y���#����U�)?"ȐM�e�p���b2�a���C(��������w���q�t�^"��|$/�-�LK�;�0�X^'F�(
�f��_b& pH3!I�d��m惪�hQC���k�(���{>���L�l�sȉ���N���L�����I/�p��U�AS�T�2���6��r�S8���{�o���>�8��j	����&���;gB�t|`G�<�v�쬹�_��M�)�D�G0r�ӯ�O����7�W��o��&ϟ�����3�2[VM/�����*F��{i������@�+(	��Y��=��;*�9��>f犲�	�ԄN>U��ڱy��X��B�ll�C�E@��0��}?�T�A���@�m�S�c�D^��C�J^�L0躕U	�XY�mG	*�^�߳pfW|�p�����1�A���\6�M{��b� ���P6�@x}�R�'�Xz=�2��}��혔�Ʈ�;��q&�S7L+a5��mRx�^��C9��7	�cԎpE��`I���(d�d$I�w&��Mdc�@��왉t7�;]����R���-�H��_r:|9z~�K��ԇ�z�:�=?���4�4z=H�w���?R�8g�i�_Occ|s[���%��h�\W���yF����~�[�+�cuǶz4/�y0�;�#�o@��۳,V!&�`���͆/S|�w��
^���˫��9:���2�y�X���u�㓣ݭ@z��80d:�?6GdQ"E4��p���u����.<���W�db�;�4ha�J{pk�?˽:`��
/�s&q���l/b����~�{�jV܇�%<��~aw��w��Ǥ �]�!�B̩��ȯ�RkBI��*�[o؝f�[�pD�b�F�`��a��b��"(��r�Y���(��`�#��Hȋf�F�0��hZ��K����#�m�K�%x�6l��e�W�-��?�F�k�t�����A$��{�Em@�P!{&�A�y	�ϊL�4MP<s&y016,��%r�cFO�:���L���i)����%�L�+fɸ�������AM�4f�WBh>���ԥ�xL؏�"Wo6!�A
��2>F}��Oc�1ʩG�P��,�7'�k'Ϸ3�ɐ���W+q�\�΋��^�}��1x�P'j�J$��Zy4t"�23˫�'?)�#��w ��E��80K�C�fk43Sʴ:{R�D;$W��[��鸺��TُX�aP���cw�-��}�G��I)8��G'�/ʢ)6�����4{W���������fK<`��&��B.��M�Q��3fD��x^�fW�f�7\vӫ��Ln�U�ڽ�}����dR��>�pR=�l}'�R����f������:����+�����&�ƞkZ�U�`�!��:MT)�_5��l�ulf�>�1>���pQvfz��'�L]1
��K��>풃B~W��t
�Ϻ$�2n 
����
����+6�{3�^�Ù�ݛ{�˶��B��m?�0���oC�����A�h���ﷶ����I��@�sH4�K3���0��'͐!�����/?3Lאf�B��x��Gi���f8Us��
V��o��.\ak#8~v,B�c��+�i�W3[���b��<�
��z���qу��o^��+hMi�n�86b����Ji'���J�t���A9"]���\���K���p���i��bz��b�M\�Hi�u�R�y@�5u�����[��RY��nc��������
�Mt�}o��B�g�x�X�-��Q���k��*Q�%��z�c��t�}i�w�"� 4��D]���v7p?'`�.��h�����aXP��d�K�7ϡ����tǻ6Z�Ʒԃ�w3��0�þ(	�"ྀS�]���1�����(C�x�-2� �
&���[�(2��/(#���x�7�ldb�X�Ǽ���'�~k�V�
Zi�" 	k���Ù�D�*�S���.0�F�����J<_�9X(�qR!o�RXl�P}�^�<��+�6P�ό<U�B�0��Ǡ"����.�+��e�S.�ҥ$��AHC�W#ld�;���55����uw��3\�_��¯�T:�l�K+�Pv�9�X���E�V�M0}Q�];�����DHstެ�z���xXbB��~�h����x���)j��(�ؾW�U����˜M�!-�6�]�����AuA0��F��rGn��I��x�ս�%�ˣ/�mk�����/#���1���	f��3����;��y	H�z6���)Z;^�SU�S-�t��ԍcЇ.
�/"�!\TfuF�'�����4ՀCb�{:5�@�y�k4�Ulq����MwUuR���͓e�JJ�v6n]�ow�\l�\F-���Z۪�
�T���a|]�*�j�!��մ�$|(��B<����'x��Z��no���֭�J_\���zr+Zfyt��k���RM��B٘�o��\��� �p +8O���)��^������Ye^��G����`��6�:���'�޳e����0��?�i[�P��9�PR�r9��@���xk�7�!�vv
oMG[`L鏩X��?��Ӿ����t�y�{s�F��8��kR�7�g��\��ŋgQ}��Tmx�L���/�4���r^ꋡ�%%��L����,$Gq��{��s� ��K�j�3a��%EtWT���#��+�h^:���#A���N�FP��55�������h�_�F9��5u���ep���������N/���a}���㓭��������a�|�����`k��ѱ��O��x<�y����/[G�{�?�>�~wp�u��W?��x��`�x�ݡ%�@T���-��s���f��nJ��w5-g�El֐gz�j�|AYM�=�د��>��5�M4;1�6�=%:gm���(7f�~��y^?L	|���]A� {�����O�7]���x߆��,�pM����W(jXf�)|cj4�S��c�LY�#V0b��]V�	�8��N�9/�4B]�j��8t�9poq�����9�ig�rMky��g�(���x~�=�`P�@%}6@p&UO �P��
Wj���R�R����]o�@�lL���5Q���A$�K�U������G���.��!�
��w��>�c�G���ANZW��x:����>sU��`�y�Z>,�9m�hz
���ֿA�-Tf�ӈ��r�8�=.a؛�Y��S>Lo_��|�BP���;čCx90�&v����üy2x2C[��S�+���"�B7[������]� $�,qܵ��G�,k�����p�k�����iC�дV�V���:&�F�gI$_���D��ڧ�w��'xrzd�u�9��{���3�y׾�\揅K�[��-�kg���4�?N&m ht8�s\��5��s�ú�e����5�CB]�A��������wU��Υ�/7���L�I)�pUR��-��%�K�,�R�<| pt7��`�d����Zx�>�X�+��������{�������迺o���}�̗S�]a�q�2���
4�2�JZg�{3�\4\���;=B^P�Fs:�Z+~�>�Wӈ�h3�@�[S#�x���,���?Ô�s��'(�ʷ�Y���	��o}^'�w��گa�c�)D�m2r�>N���F�'�˝�G:��H�8�
��F����S�[I@�p�yN�glO+��|���Xӻ�c��2^�
+(�-�:}{�J���*0�0���Շ|^�v�FC��Ty�os��LųQFi�v�S}n,�ŕ㺬�Y��E;�(�_R���5U�)��H+*� e�&��^�X�;��
��sI�NT����]Qk�0�+RD��gK�nvs�Sj�1��>�2���h��r�46�U��jHs�4w���r-a):����'��������v�W�4���3��g,�:Y��)ْ�j_�u�L�!��[6�u�py����h�KLB��e��^E":�׹�4�ă����q��z� ����«�s���-�PN��UL�f�Hْ#P�������aiu/��m�H��2�2l�3��S��g�u`'-�(�&B����W�H��Gѷ��vlgn�B\�B����� �4M�5�.�U�r�{Ï�I�]]E�����.�`9hboBq��HO�َ���5nIW���t5�B�B���I�
!B��)k�n�E.`��$Rdg���N���;);�w�h��>~S�f޽Z�ɦ&7�(����9�^�h�����p0�È��?�8f'��
� �d;nH�89$�j^}ca���D5�Z���B�fb@S�~e�ľ�=٬RA��uv�v�uo��ykvr����| ��)N.�,(Q(.J�UJ��+.I�+)��*V��ч��q���%��UQs�6~�W�[�LHz��tn�
��l�$��lo�#1����w%CH�כ��/0ZI�߷ߧu�C�ݛr]�pտ���@Fo�f��mlXU�?d��E�y����"���҂Ս�2�#�r���(�!݃��x���
�*3Tt�.d
�T�����C�(�0�<�9<�v;n{\�TVv�靟ï�~��Y5��3�����5,y��%�X�X�1��p���K�]�9�
�=�r�T��!*��5>���-��te�������C����Z_�\��1�!oʪ*-ҭ�v��[��uZ�7��.±��H�y�n\������)QI�F��6�#��$��UVs��Z���\@*-A�
P�f���̭J�.ۮ���.ħ&j�U���>5��dU��A�h�zFS�m�[S�6����ܤ"s�V?�r�˼EHx\�]��,"L��\*����I~��Q
1g��f5��Dܲ��7�߷K�mX+41�`�Ԣ��Lɱ����&&��|�<y���/֨��ɪ�׮(����]�zG�'�Ѓ>�ʓ�^e'�bq�2!w�^Zj�n�n+%h����-���Vվ��7�B��'j�s`�I��4�>�>�ŒY�Gb��V���|:��؝Ga2��ێ?�C
%�&�>�� �e4��ޅx8���=q��*Y���5�lf�U<�B��������U�Ꮧl.B���+�݈:lF4�2�sj����iEﶖ)�j��k]�̍t���ה���Kٰ\+a��R+AC!��E�=(�
��a�ƿ��%$�TzM�x;c��\���]��*��@Sf�ldzH�7�)�A�a�m�ĞfB,��GI�f��|t�H<��Ĝ�+q��� ��!}c�.t�Z�Ir�h���8�B/��o�)y��J;Q|�fl�������,��?�`��`��~r�	��oђ�Aň%l?�p0�..��H��7	�gr01$�����|$������6M6���_��VKo�6��WL��
k�^�m��u��hr+
�Gc>T�ڵ��wH=�a'-z�%��
�!G��)|� �^�ۓU�.�:�^\��_<>z�b��O	H��Q�-��Ľ�]^v�k��O�=X)���Y�~���|�D�^��)��VY/;	j)�X���N��}��r��5
�Yfљ��¹L��Hc݌vI�C<�Y—����wTf�p5�+%�4^R�7��lk��:�+�-jڣ-Y�38���IY$j	�iѴ���M�x:�NpW���t�EU�%\��?�2�l%k>
訶�f��Zp���p9+*kZ͗�a�4MOw�4rt6��u�.������I��I<,��RKpJ�Z�5�5�4�j�f���׻S�#Sg�h`���`砑\I����[���G��:]m�����%?Ý��BC}�z�hp�c�8���e������V�ڴJ=L�>�C�Z�B#�*���<bqt1�Xr�5Syk+BU�ېc�]�DX
���t"WXD��I�x���SIEc}6‰\H�k��l�@��0�m4�Nq�;��{��hB)%>�°N�;��V�Ik�O���7WSo�ԯK��1N�,w��q���w��bM�g����4�Ro�̙�\��N���Snn�ͷn��tE��JGF�Y��=��@�g�s���KxU��1�π{�َcO	�DJ�g��f�m�M�S�%�ś搪_r�ഡ���3M]Q#=���}8��*�S��OW�X\�	??���W#M+c*�ie�K��|z�p
��[�_
7���:�8�]��ԃ��|_ϧ.��(;r�P��G^e�$Ye�d;Y�G��̹u2��l��^�u��On���g�h7�}�ϫU�8�Cr45���\VF�A���(�����F��W|��`B5�~(�Ŭ�B���_܍��������+�
����}v��^s��!"��cs�."{9=�H�j�*�jg�G�?��Z�5	��U]o�D}������F�H<��
%H�d���j칎�3ff����s4Ka��ypb�8>�ܛ��l?:�i|��W���u�SC�!��ZC��Уۢ,��=�m �ʃ���j+�vc��J�F�kF��U���B+��@�\�����=G���n��z	��Xf|�F:�#����骺��Xtj+��;CSH��;[�� �̆��2*(���C_f5�;���y��S�_��9]V���ۇ��������7�I��C�1kj���9�d��^��Gxz`z=�a6�4����pf�:�d0���;�l
��)#��xe�o�mQ�&���KΜ�U�jf�qÔ]���~E��Q�-4B{<u}�0����
��[d5>W�Z�=�“�h�!���d�6��q;���E�?����2�@qqND:��Lwšp��+2�X�C2�E^��4日�r�E�	7tE���9'�l�S����s7�>�2�	�y��_��s>G����~$����>�D�
-L*BC@��pu���p���ɽ�������€��#�U���O\'biQ�!�F����91~;�]����Gox%LO�Sz�U<,���!2	��=JbN:�%�ԉ�w�fkF�;���
2�3�旓��?L)J�z�Ree�X�Zx���h�%�q�9>z��9;��?�0�o� �g�k�|H��Yr�h�֨x8Y7?҄ʣ���dݱ�Ø4�h#��������p�匥���*��+�$�X���T^T��4|��M�v6�^0��^$�L��M�1l�dN*��v�J�/���M��%n�_�}��-��Y����'xl�������¼L����W�n�8�BE���49�q�&��/E�ͻ*˖��Ȳ����;I�0l����̙}����|�V�L�3V��Y�3cL�n��j�Um{�i0����Z,�ـ���"����9Acto�ˋI9]]^��m��a�3c��&YW�o������b:�۲aÌ�p�3�/�P�{4VZA��*D�z���b�����ʢ�Z���bv�|Ⱥ}s�2-�O���e@k<_��uS���*�XS��5�WU>Y�o�����:˿�j5�W��a�v����v�\���h>AM�����z�|��f��6y�.�d��1y��1�`���Ŏze+��IL�B*�����i����]��Q�T얻)���O#d��"���.�j�(U)�7��>P�m1���0[,e�m͛u]��M�XN&Y��@�P3V3�n��-$A�*n�P�)�{#<�P�1Lc����������\���„�����m��ڒ�Nh	!)��+d�H�9i�=V$�T�
�8���2�\Tx��
���FNz��w�#���X<����"�e���BXj�px_s�D|�H�Z�S���gV�_'$E�v�@J�C0xP��6�)ǡ	)�����P��p�p���F�S�����1�sp[x%�$�)B����b�P���R��!	��kJ5OHwi�r�C�1��A�(��M��&p�TH;��E�`Ej�xʭ&��l,���Qb�,�
�E,b���b���}��L]���X����w1��+x�d�BI��,a%����*:}��a��Ѱ�>O�(0���	*1
(ŷP����W��./�-Z�PY_M�FaG�3��A�돩�T�����
�T�j�>{3�ʚm�R�*��
RZh��d�!���
GB"M�D��t#O����XZJ2T��
�1��[N�#�>�ƾ�h4:�5:lu-�#�+2��1��ꌵM�XM���0�n�-?hk�с֫���0��M��]���t@�T5�"?�Jgͩ�`v���C�m�F������R����5��� ���)�+%�o�կ��Ov95�N{.��):g����!}�3�e]�����+��zJ'���h�)p�t�k�D�S]��x�H�3΄�g��4��O�:���wf?鵒��P�.����h8(�"�r��[y���m:F�n�c��gBs��f��7��zW����M���Uv�i.4�6q���`�F	�Z��"��Zӳ�����F
��F%e�ZRΞI�>�Ne_jG�Y}�R�a�0p-F��8^zp�*��mO)�MQx1pNpR���inӉq�����i>���G��*lB�Cg�Q֟������WӮ¾¶��C�#��4�#�!]�?}�`��J@��u��nd����WKo�8�+���A49|u�$Mև-z(6wז-%�H���ߏ�b˱��Dž��g���۟��=�&'R���<+�y3N��	{�Y��q�7������?(���#B��ۓ||,���)BB����O�lQ�t?mrV���4a��U0I.�6܈��b�+
�f���s�2��f�$��͵P7�NDK�(�&���8I��	�+�%VO����~\
�=��?����?n�Ys�ެ��jy�~L�{3�Zd��:k���������e��}�UVoJ���|���@�l��n꺘�.�M��f�%�ӦX�v�Np>�y�2/��:m��m��&�~���21��P���˝�ɕ�щ�ι�(����Ki��ф�Nx(�<�<$C��yH�o{�x�!���iiu�^����vن�Q[iT�Q���h�r��֫��m�V�2C�o��z>O"ISMW�b]�'�6ه�{������G�K{�X,p��3�V��y�-�y���{�n^soML�`�s�d�q�c�دr����ODq)&����W���*a�q����~���._��Ste���)(!pR��\K�]��Z�`��L1��dT7�IÃ4xw��&4�����f��?ؽx��S���Fy&��6��"d��6F�Ӕ��J{f�6��R��tj����J��2��{�)t)���#���h%�p��T�:%ýkE�H`�3!�	����EEǑTu*-w����K��^�T�B�T���X.���[F
�J{Dνs�V�X�<^��@�p�ܖ�ù�䬚�^ipBgR���pS7�F�B?�R�Ӭ�O#?��
Y��KXǟF~h̽a�[�FQP7��i'���^S[*�U���ϔd0`+�D+d�6K7#)܂���a*��E<H��"��Fa)�{w�y|v�_������d��b�<\�턬��D9\��n�F�)�M��^�%}�׺���@��
��l��y|���ΊE����gܸW�do���j�;^]*TN��7��e}��(���g}��Eclz�[}�fg�a9YD��V�c�]J�ڣΘ�S��t����R������6�U/!��}X=��rP=��}|��YY�‹+!j^��0O���Ql+|Qq���gO�v�R���P���o�/�Ȣx�!��s�#�G��s���S�n�k1�`X�#������?��=���?㐬�=���^�� ����>	�|�����*��f̱�u
�Z�0�z�Q��Л�R<ϖ�7��d��+`1CX��eRky��[�{�B�AyL�Z�9��3e��3�	\��pt���Q���3+�Y9@��#91<�
]>��U7��8����NH��<��
Ð���8��_H�K�O�%��y�����������<L�X��M�1�0F�=��r�zGi�RE�iI]�6�G����{y���&���S��Z�N��M_hl�}Z��e�W�˷�B��<����\�&s�y��T2�h	X�v|��\[��6�~�_�ic���[I����d���L0�<-ER]ڨJ5��v�`���"�IUO�O;q�����}�����w����u�ĩ7�6痶z>��[v%1�ч��~lꗣh����o.��i��蛺�|���'��o>�.b
ё�Dͩ~�
]:��ˉK1�����-�ZDFwT6�5�}t�����Y+���å���������~���K��b��\�^D�裦��6kP[�F�7���?����@֜��*.�?$��?������/��oU,x�iY2�K��M�,��]t��LE���&�2���R��MDO���D��m��[z�_aݏ�|��ڰ���6��o��S�~�����g�o����D��j���Ѿ�E����c=����|��z�
y�īOѡ�\�����^팺]!��E+���:�,����:������(��e��9
i�̜��2�=(E�������	|��_��nn�إ��nH��7Q�Ӱ��Y�mĺN:R����@y��]v��w��;ǻ��x���E ���G��?k�c$�o?��O������J`,�'J)�A%pS	��DJ�E8�U�M�U�L��?TdA٤bݱ�/bb�҇�7�x�X�G�\�Ǘ�y$$P�If�����g�%M��R��j𶚑��X�A5YX�=ϭ�?D)I�|�}�6�=��<.�""S
o�5�
M�$ �*�IX�P��(����)�ɝfAEن�
�^D]7�g�
'�#��,�y5�=ږ�<~�T�P�2B�F����-e�2���D��8�o���te�.U��w��-]�c�e>�Qe���Y/��eƕ���[H��zf����BzpX��3R��%�R�����L,��Y.����)KQ��4��v�y�kO�vQ�4��v��q3�kG�?�8�{��#a�kO�|�C�k��äLJ_;�Y���������Nm�%^hbX�>2��y�0>�P��~��Y�I
�L �9�#IQ��0F"R��<�q��`�d(���o�ȁH������H&�P��4���3/@�IH,P�Lt�ԯc���*K�t8`�a�a��e��ʝ��
\:�m�V���m,9�$��4%,��eۇ�U��%Y �_"Di����I�9N)(��2�����g!mĘ���,B4��2a�W�JL�ͅ8/(\d�S��0m;�|��/`�y�����3��Ӿf���d���@Qi�m�tB`�[t�8?N�N��IF�-��d
m�a������&PG:c�_���W���T
�ə�ī�Ƥ�M���0�f��h��N�YNRV �/�҂���C�K
�脀9�iH���a���N��@��Dg�	�Db�',eH��Ô�A9:4�c�X�P�0+��-+��\�8Ct:7x#�w�֪`x�u�t"�&Ev�ihGPB=3Ҵ���<-����ᗠ��,uW�@sp��<�٘��/���I��#t�"4�СH�,!2�HOͯ�1�WPb79f([��b�m���pT�
�f����:Y�nB,<"i^�
Xj`y�r?���	!l���eY�7`&��bfs"�B?Ǚ̈�����qo㌷�\�U��Гɏ��\F�v��(��H�kB�%�l�<�0y����%`�-��0�ǔ1��1ͼ�wL )��t�Ʃ�˱d��0�FX^�8 �'Q�XAzA�Ѥtb1�[Fy���e�y��"������]C
)!^�e���H�,O��h�c���Q�Q�Fi�N/����ie��F��#�%����tX���]e���0"R@hK)�;f����� ?�,.�B�:d�\��-��E��(`�Y��92?�,�D�a�G��W�E�î��2eg,�yS��6��������z�r	J�<�����O�qfk��x�y��c�p��K7�� ��n�R��) J�pf�B�n���cR$����`*'�-����2�7�f,Wbx�9�-YZ�1���	2O���M^³�:�]��A/�>�B���6ϲ{�h	��6�L`�3�{:��3@���d�,PRx��\�<A^�9��9�7Ҟ�����tN#�i(�@�W���H򜱎�V�������9)H�N�b�e.�Zp����3c!0ه��'��@4�%��=<�?�yS�m}2Ws\�$!)�9�J
�x�*yi�^}<Z���J�zئ�B�[���*�k��ҏ�֊�$~�e�c�<Z#�7���'���̏04�t#�64!�=/C�q�#�B&Bbc�3�2���~�����H0��͍�$��2FBR,�E�xb=�Y��C�jHN�"CsAX��q��@.
Cr35a��Ts��5-PcC�o�l���p������K�xg�}�1�M��`�G���l���f1��M7��,I�p&!�Jj�����|G�:���i	�x3~c��ě@�T�m�
!��6�<S�	��L�6��N=wL�Y�gr�M���d�R�G��= �-��]"<�<7����y�Q��	)G�]!i�y�"��0�#��!�0+w�d	��_���������yإ������zy:�W���F�d�//�l��zyfw��0�L����I�z��L�L.|�gݳ�����(��q!�̓˜"w�=��6��q���<%�3N�0�<#D�p�L��<���=��P:�0C*�(�&j?ko�X4���;^}����ΔU��c߃��Ѣ|R����N��$��2�a��un��
C2�6�E�b�y�ۯEy��ֲ�z�ss��`.6?=,.:��=��K������n�{m	������;Y˶t�a�w����~i�.j��������/���3G�4\�׾�������p3\�Ή_
�@[:��"�� ��0��H�:�-d��,�N�֩) [
r�@q�.9�ԯ +ȗ
Z>�^��v�
1q�Gn	U������@]V��$�x-�{]}���nEي�0��	ԈJ���`�P����M��!17bD�u���kto�pv��o~q�8���ޱ�V���g�)x����K��v��ύ�+ʳW(�6+��p��"���n����H���`�k��kt�������t[7���F�t�XNj�Dž�+^g�5�Vȍ8J�)B���r�p�PW�9�s�c������v
_�[��q�ԋ/��5u�>F�	c�Jv��_��fQ_(e�廂���[�Q<+`�p�+�^`i�Lx�tt��Ch��MH�ݻ��Eq�_�D����rr����Ҡ��/�5�U��UT���X4_F�#�����~�~����V6L}�t'�|sם�㮬D�w5-D�Z�GZ�uu�;������]}t1��J�Q�.�H�5l�<ly�Qbi��\H��܏/��Hh/�(��8,�!N�����Q�7�@���6���`�V��MS���)_�%��(xE��gI�hM�v�̱�x��f�Nnof��W׎)���z�zl��Bw��]�(1c�.���۬�.�l��~{h[�_���]�y[��Rм��ښ^3�fu�W��H��u�R3rN��4;aX���{]a���t	��$��/��7�׆���y_w����U�(�rxo����X..}ߜv�?�]��KN�j�o]�cB���
�oNS�����x�$%ȃ墤���U������u��WR�����zW�M�%�.����J3%M�;�=M�9m�����=���n�o��FU�s%1=m�>�zl3�i�c�h��.5,����%ځ�rO��v�J���i�4��������h<[��x�0x9YH�&�'1�����.ez�>[R��e�j��Z��Ք�,��B���n�o���br��	Z�m�c�Lu�?���dL�Հ����ũ���[�Q֐^c���{n�]�n�\�ݝ�5����Ӱ�$�2�v�M�N���d�^�;���sM_d��_��y�]ۧVW�9+�crdʎ�,)��ŅZ��JaJ�l-��Vv�,�1x��8S���5��iwL���_�7����U��4��CN��(�� ڪ���KF�^���1l�ݓ?�wץ�D��0V,\�qn��+gd�V�rS�I\�c5�
���e�ؾ&{9���'�)��	W��6R���~�!E]W��|X��Pӹ̱��|n�y�].J��l+��`�<���{/d,��n�1g�)�3Č��� ��
d�z��}7�գ&�hU#�YPML�{�:8��K�
����k���a1�52���R8E@��bK�W`U����W3Mq��}�}���[����*id
�ѓ\��_Z�S��yv��^�Zٌ��n��9tY�ְ�*h��/r9^<�̞�kL�l)�.r�Z����{{�x�,�~x�8.���:��٠�O܊�zL�mؐf�ƣћ'.�}l�E=�_ݪ\J�}(J�N�g��_;�ڏr��=Z�=��(%G��H����/��Xs����w������a3�Ij�E��߁EO��#��aR��09�N-O��s�����◶�L<Uw���� ����/m�֧uh�I��A�P��OϷz{7���,��kUX9�FOLԿ\��m�T��ʅ��:�9�/�\��Q	q�+�_Za�rF���_�T�S��_�C�����V�j�����]
�0������S"��Tܴ�~w�C����$a�fgG	 B�6؝���o�W�cz�n��w�u��h��C�Gg@&~Zo�i��
�+'B�~Y��޹��+�����P�Y�����r��+AZ�ޒKp�D��T�o��rS�S�Ê�R�+q�,�7r��MܚQ�����a���P���F\9�oV�1>ۏQ8`�ܛ�w�ӥ����]{o�0�*(]�P5���ej��7؄�Ă�Xb$���~�ݝ��8�:i����}��=~wG�A�r�C�
����%�G�f� C�\�<�eu_5 ���4UV�ٖ�B|�S%�R�D����OӬ%z�'���p7enu��
X :���i�r]��c��gP[�>=��@��F�ƚ7%��"���zz���4שּׂH2*M�f\���R�1��F!0��[����B�Md�P��bYnA�dU7�O�51kM푼`�%J˫�-�eK��]d��\�2]Y@BAu'��H�,}�;��A�/*�w��"==���bGd�?����$�E]�*Z�K�b�q�{Z!bW[�Y��L�<���Qe�����r+��m��UZ��*�R��D�r��E_�9�������E��z��-�yY����lk:�Λp &�UU̐B<4���Q���~�1���ns�׻t�n�5 �-���*�k.r8�1�ϴ�*��X��z�T���֡�Ҏ��/w}޸H\8�^V`�h��|x�k�G���⮭�Hb:�JO#q�6*3ŭ��.���y��?_��b�"StZ^��G/,�GQ�W���7����k�An�~����a�r\?I��H���}dwޚ��}#��x�Ql��j�t�y���m��fYH�����ȗu�����*��T�ъ<�RNd�`���)���-�g�g��Sp-|Ƒ�������c$���
+�%D��8wǻ�Bu�Gշ���8�jB��|�[r�qa������6�5d�����,I@."Mg�$��Y����a�f��k�$qԩ�#
�F�	���,!� +�`n�p�R� �b�Qj�sF�03����6��ե�O:�8�ξ#}aZ[����g%���ۦ{2]���E�s���:�����a�r�}#�aÀ'�UU��^f[�:�Y@���^^���+���ŽH�H��L�KN3��M��3�V��M��z��v3bǧ\�Ͷȧk�;éZDy��|�Ⱥ{c嶬1F�}�q������+8��<��%������]oIr�+s����y?v��ڻ0����0��L�R�@J����|_u�L��H�.HV���t������q'wGz!�,Zq4Y�7�9��Z|]D��v^�pM��������9]��vi7	:�z����~l��8;�,��@���?�^��o�PAҮW�Jx��E���!B�E��+!�#CxQd��p�>q��x�Nr)����xb�{FUS;���owv�0�iw���r���$~O�F*���s�Y��Mߴ�?�&�N�m��D:���)�,�
o���NPfh�s����ʩ�v&�OmA�ge�=��L�����vk�땳����g%�?%���+�y��%ޤ��5ȑ�)���ڙs]���qN��\{N����3[�Z#ʊ��ٹ����l8kM*w���e&�;���H�xu���5��ɍ����V����������ն�/L�Q1��2�����M,z��Κ�y��ȶr�i��?�C��Q̏��İ��lG��—��5}Þ7��u����A����kr�
���q�z�}����7��5���u�N��e�k	>>~
��{��I��ys�;�Ϳ�'�/����I�/:2_oQ4�/�&���*y��U�UR���<�aYGYY���?�&�*��࿂�H�C5?ypU٫@d�T�+R2{5%ԒS_�Xrʵ��k�_g�*�h
���b��X��Y�j��&�R����[.�n@κ�R�f� ��"B��p��K�'a����
��H�*��N�2�q��0�b��x�r[K���|W$�C��6/u��m��"Bo%]	�<��4�N���^*�3�&a��K$x_f��T��e�bR㰬�
fAYp�ؘ�1m���n4
�=�>��ZSۻ:g:C��BJ��HC�9�v$&ꗦ�����S�_bRU��{�*N�@��R%���N� �@����_'���m�X�U\�Y���s7	�� |8�!8����+	�ގJ�F6dgȆ�bI���
�˭T�q�����7�0МU^�� [�Dl��OqP�N�'����nJYw�
�sj�)����U��:r��*�_�.�_�[\�73hP��q�PE
F
!ŀ�o	�!��l�G��5�%�6G���>�=aL�,�Jn¢�̕�0B8���o��wp��8i��*	���"��
�R�aA���HD�8S)G���.�t%eN6EaRs`��Dڈ���d��,�J�%��0=ޫ�ް7�	��K�$f�iD�@���ޣ*4?	�Ue�5~���	2�ck��@'�wS���9@p��Tq,V*9�b�U�*��U�W�e5[p=fD���nrF�rE|nT�8̈�,�"Z0K"�{�.�UOnu%F�&W@{��Yw�v��6R�:����3�
��;vH��BI�1Y�`�rC4T��Em*U��K�_�����HC{�����F&�X2��47qr ��ʼPq�.�>L,H��C���v#`�A�+�z�Ń�R'�E���*�Eg�R�lJ�B��%w{���L�)J$�H�Eݚ<r9Q�Q��w>�s�7�
�����I��?D���M�Cл1�6�`ĩ6���W��۝^H�J��$�[���i��I���u����h������ڳ�xz\��Z@�l��j��\%(��0�K��o�-��R��]��h���#C+�E�IFI���o�/4+�h�]OO�Ww�����W��	���\�3�
�r���U�R�
bt���zR)��k��c\��u��f&�J��!)�O׵����dVy��'7[e��߁@J\&�-�T@��{Фb�N��̜ljN/!a�C���jd���# �F@�y�L�6��2=����k����H���D4��{�g����5 �{iZ(�7�qҶ�������E�'��R�A��/�u��7|7ٳ��EՕ����I��Ҏ"����~F�<s�_���([-LK��(J��EzO�R����;�Q'��uّ���eL35��/Ҳ,��U����:o��"4�iX��A���aI�'��;(��̛Yr�t��
�i�J�ZJ��J9X�u���#`�`�XZD`�k�7��.��D!5S(�ǰ�s3�P�f�F膦��oQb%�j6m��=m6zM�kB�+Z���R�ي�2!���yቚ&c8ň�J��/'�CN>�Ldk�$��@�]�ᇄ�~lNN �J��҃���Cs��тj]lKH��*Tn*��3���!�c�Wx1�5z�_'IJ�_�Y�����Jˆ��J<�"��ԥs�"�b��R'p�Zn��a�(
\������
��
��z�z�z��q�zg�u�V��6PɁf�G�V(\��.�QJ$��"n=5)��ۻ���*Da��1�+9Ւ1r1��r�G�bcj��do�#<E�R`�Y2(������ɭ_�➹F�?�(ib�9��_��t�U��B��m{D�8�HS9�
�BCrr�c*�'8J�Pq
��~��SEJ�{�"�(��ʈ��}�2���U=����������v�PE��p�߻D<�c!h/dB�vy($��ʈN��]A��<='�I�WN:L�V�ɺi�T^Y����8N'�iSv-�K�q)�ʍ���Mm�hJ |�����Zo�v��;eT�`¬�!�ľ;������׷)d��c�u9R7��-�,Ծ�ua�+5���� q��Rڙ$;8B���lZ�5
��֪Қ�8��5��`�\T�Ф�~د��,V�!��>;���j��s?,���[�T�h�` CA�� �G���A~�����U��7(#V5\GVu=)z��lH��rlm�����s$q"�8��n�P�9a-Ʈ�Kߥ��~����$#��A�Ҧ-7�UYw�U��
�'�ܚ�%��9 �&J̡�''g���m��d���z�>d�XY<�׏_��v�����XG�J��3`0фG7!D@H;ؖ`}%к^	1S�-ND���OΕ��5���FDx|��j�,���o�4�`�q�*��Ee*Laڕ��2��+�(U�=�b��I�/�d�����0�F����H���,#�#҅P��8#�NI����n�<+�	�6���e�%�#��AG��9��3�@�(%NI�R6kW�=�*A����l[`۞Jӣ�%?�X"���2`J��\~�) 
x�����c�%�-M�ħ�q��
���NHYU�M`��􏕡<)Rw~�-%� ���K6�M�\��2@-�
E�`D���Z�����,���e�;�L�8��_�b���Oł��y�_�ۈXp7ur�=λ37�tRҔ��I���"����ë��
�ȳ��4�E��)����WyXbґ=<A�ׇ�^��Skt�Z��w��_�#(\�$��*iA���\��]�U=pg��#5��.F��@�Hy�dvm0�e���+�����B/OE��.&4��@`D#
�WA��~U��{@7cN��j�"n ��ăF��wN433%%` G9Yg���(B�=��D��M���l��&��<�
�y]�WLe8�#��sZ���d
^.Q;�I�zE�R�
��v�L���Ej��NFFD���LuEYJA�]���H�Τ�@���\PӍ1`��
�����p�!��y)�Ă��F��91e,��Xz��k�ڊb�jM��L=�G|sj��|��R�Z��N���geTڟO�a���7��^?�P��#�nu<�S56v�3�:uwb�}
p�Ӣj8���N�e
b6py�fO�H��n��ʣ�/�ޓ֭W�me�,��ϓ�����a�͕:Un�a�L>�j'[�Bs�z��o��@���'���v6#�G6�
Cv�rrL�!�<s`�1� ���4GR-{�!�"LQ�5ãFad���z���d&ma�1�����`�&�)Z�b�la�1�����`����#��(T�@ţP�c�=h�p�w��0i���v,Dn~���	�੥�~�p�7J�\^/Ymo�9};Q�TOϩ|��s�/z:���5�e��ٜv�}]�9���nQ��7��ST_n�:��W�h-�:1�F),y\�v+��i�~��Xu���c�zC�d;{$H�e��3G��D��:��E��ʉ���׌�St�N�%<�9Hz���mҧ
���4v��~f{�x$.�\_?���	�.�G�ޛH#)�h�@���#}�0�dv�H�裈��'p�@.'�����B����M��8���	�{T�ѩ���
a�MmP4�ܢ�����9���c��Ôv!���J��Ӭr��d��<�	�Ӑ8�an]&y�I�i�s6���O�3׹����rO�vT焓����i�ɼ=�>w���m]1�����u�p��V���&��+�b��.h��o�~V��f���ҩ΋��f�ׯ���h��Z��;�&&"HO��:��=�{ΡT��i?��_�xP��(��2֍�5=��3�i�cm2J���|�n{�
���"8�n���C����j:����y�&P�-h���%D�����'�Ǎ��j�|h6*���
�B��D�6���]��5G�`�a��k���7�s��;��e�&�����u�᫑X/'�v��Ɲ��m�M�z�7�w�䏟^=A��r�F������SBn�-5�渼u�p~/U���g����(���ӟNGikN/'C���.H�o�z'�G�3�<>�;D����?<+��x����"��z����Ж���v�d
2?�v���7{�M��8hx����D��G���g�q�|4��O�6��X:(nx�EUU��A*�峂��h޳�.�p�n�� -�xR��m�4
頮kt^nUNs*��9?�t �&ʦ�'D�T_�S��� ӏfz!S}�b�C�/�
�;��RO���Bm'�ZG�z��qǙOY�0��{H;��N��&�~�V?��3k>������A�|����f�;<�cj����q��l���:��Z��x�{F��j�´�l.��nC�d)�TL#0,-q�=3��<7�m��?.��q'�^I���5�l����_^z�/���&�n����^��k^����C �d��3�۲���ō����l�%n�H�eL��r�qR�n�Lé9҉ N(��#m�.��|b�v�����v�-�۝K�b���ߖ_&Ru�B/Q��4t��LH����m>�ο����_�ް+�SWS0�9X����|������=C��|GB�d`�?�v���%?��V�s�#��(�˲ſ /��C�e��E��]1�s	������F\�f7��\���%M����]&��Ko�}	ڃ6�g*��7=�OO�Ɉ�{.}rH�ᘆݒ����#x���
��Ux�=�>�'BM����[;���>��H;�#�]8���Z�3�^F��'��
�jՂ�5�/�f��R�{��$'i0C�?��j���=��M���g/��M�����v:��?�8�OH�.r�������Y��+�Ô�X�[���ԡ���AS�̂,#�懇���C�eeg(�G�
�?�.ʷ�?��1��܉LQ����7[:��0ŧB���w6��|R�uw:Ù��D�/+5�C���(���?�Dm��
63H�Di����Gզ&|���S�qm�|��~ѳ6^�2��j(h��tf��y<�&a'��BQ��Ÿ5��w��?��7�f����8B�����%�|g�k�!�q���DNF�N5bz��xa����Z�2�v+]��L����eZ��������h��Qӌ��N?���K]x�7>�%!񞵂ъ�F��JDZ5=F �x~'�8��%Β_c]p�����lo����JXy����֊�3�4
4g0Y;jw�����#���l�A?�a0��.-d&�|�1���W�x� ݒ���b:�?�G��B�%~+�;���n�km��p�7����x�žo��\�Q$����۾��~��W�/��u+�M�?s�M3M��B>�+�bO`$���gH5�J���/�ٵpޙ��I�棄��t�����s��a;QwØ*�;͠F���?I/`�����]Ko�6���%@خ�v�CQ�E�r�s�����hl��"-��W���b�)�A~��3���O�'F:a��ʸhzi�	@=�\� ����0�v��v�&�4���(�w��}`��9���z�y�Ͻ���Чвd˅ȭ����d��oms����)��ϕo:�zn��2WN5�~T������B��`�uY�":�+7��a�3n�p�s
齁Ƙ����K�^��/nd�Q�c�/
�@���Va�A
!�]SN/u{��6�۸�v<H�y�=��Yx��d�Ԙ�JU�$���Q�{�q��䔁3d
��s��|�O&�(V����a�"�̺P3��\6���b�
�Y] ࣭���
8��f���L�����B�� &M?� �:���eUz�L�ͥfo4��Q�$���4�z��y�����a���Z�I����u�,>�x��mp%K���;Y��Z30�3�w�S,L��—��jH��d�9h�m	�Nd��P�M:"O�;��u��#�T���nbQ���D���	�ݼ�(L+o1y��c׻?�����3v��dX��2�}D
�
����c��LB��6����>��Yo�¢%�K�7����h%�F&RR�Vr��EU����l��6�bs��߆�"�1��cb�<�}J�2SX�̓�'F�sD]uF�^zg�z�SS�>��.C9L�;(`a݈!�{�����!�Ҏ~Ҙ�Y��.t�\� '�[��;��ܦ4	n7s�KS�~���r��Z#1�׃���r{���'�̄����B�
���j�*r�Z%�a��8�̰D#�u�t�z��*y��j��X�0�_z�l;�(�0�1�l��eזC��(��ۦy�sc�HΙO!J��2�I�;	f���]K��!��S�
+�Fw3#�p��M;�!XQ���W��o7�b6�燐A���C��b���o�X�~
��e�z7>��.����Z�H�*�[D���w��Ф����c�Y�1�(��G!�$2�[�EpA��,���.��K�{Z����a>�w8���+T>Lʎ�%��$Jw8����z+������}��9��c:/9=(�W�N2���Z�ˆqg] [��d:�ָ����3|	����E|	_���jV�[a/j>xج��ژ{��a!-�~�2���W�*�E�܋倽�~���W��ݠ��ɲCy�$h(� H��*Ru��CT�W�i�Ī�c�~���I�ׅ�k�_Q��H\!=��G�Ҧ��#-o+��_�>T�\UF!�Ҧ6�~L)m:-B�-�_i��d���t�1����vAZ-W��j��G��gJg��~���<�4�z��l���;!2���q�z0���wk�H�>�h
R%?}��F�N����>�O�o`���xm�@�gX�h	8��G��yi�Z�&�Ӊ`����&Ϝ��1��ZK��E�J�+�I�"@��!��]�n7}�WNK�֖��u'@�<�h�u�CXK+K��Uw�&����[��_R���Rr� @�./;r9�fG�lw22�e@N�:ߌgf������1��W� �1�,�*B�Ð{	f��V�*�Ef�n���vM��-�8bJ0�%Q�@M+!�7S��mŭtfeQnq���NO+��U����ߵ�A�+��k��#����1��4���NAw��nt��W��v���ɋ>^!�'j�g<�ŷ��s��%À3�2��r4�7��������y�;P���b1�f�.1�d4�L�
���7[�S�9�Ɏ�'w��|W_���2i�|}u
n${�=�k=��JY.��J&�f�y�[Ei�.S������,F�uV���Lb٧t�!=��lz�p��Q�Lh(�O�H�t�|/=���>YwH�6��Y�՛��H�2@�%��х�58�A!:a;.0�o�3|y¥c�")��͡�G�����龎X��ܵ��V�KU2A?���E;��H�5�=�:EO�P��A:-_�ϫe�:O����<�U�D0�;��)����e�%	�+.�D�M��2c-(���(Äv�,�����\���.&
�v��^���„M[���<��J���aEɨc���1��!�W�ɼ�T�י΅�Lf06.�"
�"aA:3�m%� 0ɏ�6R�1��o�G�m�a��a�H1S�m��)
�\"��>Ѹuz��#�v�3���� �{�WU�	b�ݠ�m�Ӫߩn���tT[��(��6����k�}^ȯ'�o���>�\<>(6�i�2hN���Z":�+�z[(�q�	�IW��F���(¬��R��rg�9`	h����T�Y�ZDt�
�֍e�s�5�A�s�y)1�P	.��b�^���a�P�d�)�`�H�#g��5@F����`6H��|800�K���p!W��MO�dY�V��',i�JP
`e���W������;�"T��9l�,���١�tF"Ǽ��k.���y�D%�LFCD���>�:�gn�ik�����!bI �r�}"XL�~ 
��qS*�N��#>��i���=ϴo�rf�^�̲/DM5,w��d�V�}���I�������a�e~Yg:�A�σ��H�?4��D��@�y4�N�]A�:Gp�0�ˁ�HP(W8!�m�ɘ�d��(�.P���f�@�U��ȽdXtLjX����l�k�4�q�6;�#>��|��#0)^�)ok�))��Xd���UJ.X"����[2��b��u���?yzD+-���}g�_q��� |=~Y���*xEPr�(p-{�4�ŋ��t=�mQk�4~�:(�D���u��*ς���[;V.ncÆ�)[e�a�5�#�Q�żL�sd}2��%bl�=�)�C�S	k���-�y��Ƞsy9�u���'�vZ�v&S���"�{!��m����G�/�B�X<��'a�яÃ�8z:$y�M���I��V��:�kI�:]s�M���u!�?G���8(�:2����M����z�]�O�N������|s�#-|ˎ�n����GD$���#�p7_�ua���q^I�.�!�C@�k���0�Myni�Q[�ͯ�Pko��:c��6�U��X?�:��p�X�ʀAx6�pp���ʫ��j���6Ǵ��?Χ��ͅ�è���;�]��@��0vS؃��@ĊXEc–����7����vLX��]����Y�a3�����"�ֱ2�y\ah�����:�)���<�A���]��vA��dq{�=�]�\${�ˆ�I��%�P_^�G	�e��b��:�9=yIE��(@�K)�Ho��L����޸{*�Ljq��Ǣ�����u-0]5�
��J�	{TUh>�@�@Us���07��n,��k�,��-�'1l#1Y�&�M@�GD�I9�rN��솇��^�t�z>)2(�N�;�U�'U�����4�j�r�<�	(�����7�H�z��u3���=�ObW��[_�#XӦo
��8��V��
�a��Y������Y$ʨq#�k(^�ݪ*��t��et':F_�2�K�%�o�ʓ����`�n��0�{YK�+�/U/8x!z���+��-7�D�w3]�1��x91��1��OA��C�g@9�V��F谺e#Ȧ�DK�MJC�
�h��!v/	�,W=��XY��צ�n��y!�vݔ�J�)�=����1�����X-~�߈�Ln�;���Ra2�fvW$�/��;��*硇?�>����MQ�ǧ�;��2_��~�M�r#�"�k'P}��e�j���0�A�Si���Gw�7�z��w$h���4889>���`X�3|\���_;K�\T�/��+ֱw��1NĐU
�>iv�����Q];�������"��K���[�JK�6C��f��3s�s�"��ROl�m�e����{���aC��?���|5u6G�L>b�y��h�`�Y�t����aU^���@��>so�6Z&l�V�u-���@�'姽��r�@'�{�Lμ����4_�b�v�ŗ�;���o�� B��O�5us�Ƭ+�Î��$JO�m�B��% �����B|/�h\�7�YS�'��,dl
�\�^ x<܎_(�FSo����*�7�m��)�����[DՃ
��ׂ����Ճ��)5''��8��B�.�d&�����Ҵ�i$�x!`:v}x,B
`\�c�<�"�&Aaj��C�Dр�`��O�<�_)l,]���R�Y\]=`��[��!�r�Ɨꌩ����i�ꌩ��i����A� D�31��O�h���T�=��WuՕʢ����D�ʢ�]]6���p�98v+��� �r1vv�V��.��ű�1v�g���%���ےNNT��Wݿ�QGT�����T�}<�b��%s��-�h~���]mo�6��_a����I�%5�0`C�}d[]38v ��2�}�㑼㋤4r���t:��㑔��h��ඔ�3�q����v"=e=�,�0!���2r/+'=�<�v6��x������v������%�]d��~
9�[}������\ׄX��Y�'Ym:�զ/b�i?�����\`��d�(�(���5�r���b��9Dt�چ��A�Y��7ǁ`��x�hq�W�=����cր~F��dT�pF
�p/R5�o�N���6r,.��I��o�C�p��A�3��8�Cx�S6����j���\ۜo�A(޳{����,�����0e�{;��{Y�_�����M��쑭�r�t�s�>�H���B?0�j��ڴ�զ=���%��?,^�ʏe9��E�<�'Ή5v¹�\N��a^��c�H��.iy�O�>���N����x�J*�w��@ɼ�<(���,�2M.�>�W�CE$���B��lRJ����jĘd�̉ 
��
Vݮ�%�:H2xK�#4����:�|�ĉ}Qg��d����U#I��S.BfV:_T�nq~ѕ�'��ۯ`W�e7N#��z�w�=1+O���1`.\*ل��iXLg��h�{�܁4��v7�W��#h6�;��+���M�}2>��Uyi���~���l@����v��[��Eq�����g���`P|8*�j�/��֣
!EaC	�D���`1M�?�5F�UIx�SG�`�4MԒ��ğ�?o<B���?i���5��x{�P�M=¹a�˹�ג��^�@*
����Ԋv1�>,}&9+G�&����:E�A��FI��w��o����u�k[��R
^��Rr$��yI�aph��>�����U�.Wq:Iq��k�t�����3Űdػf�Z��#�|��7��}:VK��^D���(Fɠ"�e.��л�������/��� �[���F%�~�B3��O�Î�Dc�}��l6O�:�}����b���ߒ���2�:���Wj���K��9܊��0��(�3��B�0g�T@�Pmj��NJ˘6	n�B�
b����nV�HooQ�,"Q���� ��	�.90;b.�y�������L��-1d���T�b]���`\�D�R
ΐ�0��_�@7w�JmW
�D��	b5�y�������<�i���52�2�Aụ��p=��F����'J7j�b9SF�d�HPP��p�nSWd������8S@�k�U/ށQcDr�8�ִ
M����DK{�p5(`}���N*� ��d�_7��7�R��$U�0�i�?�B������Z|cS~�H7�"Ȇ����1&P�'���ה��%��{z�:�ˬ�����M����)����C�J�ܳ��/�j/@<�-��0��y+ND�ތ���kO1"��~QoV��z�U5�x��v��2��|��4Vt�b��Q��h	G�n'Gp�0)�|�Г����|%��]�㓺!�Lp��x3i�X��:t�7}�ia_)�}�ܪ?�z�Z_�������F2�[[���u�z�(�d�	�OƑD	��~�H�U��Y�&q��.�{o���F7�������Hw�ho�`az*�(��L����4���47����օ�*���HՋGz
\�
�c�[��xW��
�p^f���o��Y��<ks�Hr��WPȞ
� ��T]%�.�l���-�)�&QE�!����$��u���!����fzzzz�=�N��CS�̻�������b�F��-����e7��6����Q�Z�ܱ<�����C�F�l�͋v���&c����^o�;�T,]?�����m�P�QYd��a�<�FYZ��b���*�����o'/F��d�f�*늺�-L�Y]�6����޲�MoX�*f���
V%�F�/�Nh$☥�3��m�������b��nĚ�n��ݏ^�/Ǐy�MY_�e")��oG�7V�|\�[x�֨kҌ)*ۗus�ڮ�n�
�Me`�Rϧ�>�O]�Ӧ�����c��`��Z6��ܦ��u���ٜ�6��f�Ҳe�F��އ���u)�a^t^�G|�I���3�.-�,�l���$CB�.���"~�a�
?�P$��������$��[�G�V�mP2������[T����C�Z�����$+�?\��eց�+�"j8�t,�~fY'^����� ӄ6��/8�)ɽ�������6��,qǡO4��cR��m�4ē�������P~��n��5f�@�dq��
=d�9�H�,�"�|��H�ŪH�}�/��Z'���ka���VE�'v���u�v�b�[2��f�Vf���`�-9|�u�X��iQ7ݻ�����db�kd��xQ� ��Z��E�tm�#�vQ��E^0F��-��5r�愌g�n�(Ƅ'*Yu���}|Mx[;/f����[:PO��$�6+��@ܲ�D�+��
]�@FA&
�@�d��(�l�}΋v�v�T}��p:O��wi�.D�[�%X2�a]�� �Ǹ��cU�#<�
X�"�#1_�ObN���I�0�4E�b>3|
�t �ˎ!f���(�ᯠ<���_���Uptz��{A�կ�{֜���"
���kQ����'��s�'�c/�ټ����S�p]�%��m�&Ua]�.��XR��q{_��|ޝ��L,D�)�R>����z2p0b�Z\C�6�!n�ݢ&��
v���|_�V��w�{��[��1��!A�-�g	ͤ�=d*������35I	=�����`�4h��kB02�U�/Q�����;[�7ی�W�~_)�2�F�b
�xNi�8�u$�v�����C~~�z|S�GT�x����S׹�Hd>8�PE	C��E��I�I4P
��ZW#�p�$����Y@���鴄���S����8�V_�r"�T�d�I�N��D��,�S�.9�-�v�Ca����`\L��Eɸ���J��א;��a�Wb.�
-h�J���X=.��$�qX��ҙG���
�V��NY��-V ��Q��`�&�T*���6k��r�9E}�[��w�~_`�B5*q+�̡V��
��s�<��
H]	��=�)��~2t�"��z��
�����$�$���e��&]@8���s�\<�<,��2�X�B��[%�2��^��8g�.6��U2�m"#��Sr�h�Vvk~�0�OE7��-�t,n���t*���i�m{�s-nE�y�ۆ�R�j����6Y䉞��C��[9�,��2�e�kA�f��Χ5)�!�y���{3'tn��<\��G��
�G��EL}ԗB{�7��2�������(vL2h��C��t�(�jY�!-�VK+}�\ �g�1�ʽbB��[���|`�S.v��\�x���n�T�	����� �����'xh���H����9P�m)Tޞ*X	3�Ȥ���ڰ�&^VC��Bn�c�'�
zl���(*v7��;�B�b��!Ol��}�
�c�cG[س�q�=tڄ��Z�#��B^Y|�f�}��QԱ�oWܤ�eځ~�1�'Xn}��Q��(�Ʊ�vڜO�-kNn`��E���G��g;��6b�#��C�l*��d��GŻ4_��u��O����g,�۹���w4IgiS�g��\ ����-V8�F�^���5�B���������:m�	��e��*뷢Qdg�?2��m��St��=@T�B���$ʪ��"`�H�x��Q }�Q-Ӯ��b��/-;/���kJ��@*��Ś�K>����xWT�_�����,]�]�ɘ\.����wVAX�#���ʩ,+���-�0��.��_��;
|��mN�EX,䢣l�6�y�OP
�
�f��V�^��>�H�Ěb���:���h>	�q�FV��`����O�^�$z��WR�Q�����U���!Zx��/ڸ�ͧS"[Y0���D=
�:���(�=Xhz�@��18�O��|6k�z�Sj,��Q
�wD=�0�t�.VĮF���9��o����o%��V�
��(՗�K�\^ё�LZ��`�?u�V	�á���\���Z���)�ȿ>#�]ϼ����	��1t���'�Ap���}�:*/d�4PO	��X
+j��h&I���sku}a�߇���rV-�݋��R{����8�=k9��A/���ٲ=�r�)�t��ȩME��S_�,m�9M�*m_�x<r�a�H��<y�_��q�����$WD�y�L��+�b�s�d<�ܱ9Ys�iY�B�{D�74qd�K��o",,�b<e
^J
ʥw�������q��'?�xֵ��r��69�o0(�JP�U��oyέ1]�u�Y�د�_)���	��}��&�`s���&Y͌V�����Ǹ�0�g��F�!���°_3X!;�qw��+���B�3�Ho���[gx��xpG�/���T�X�q��*�v�B��;)!"�F��@C��k�}+�e;�7�Pm4��q减1���ns��~>���v��4����8�l�`L�1���au�e.�3�6|�Wv�V��(�����L;�WXP���ď9�A5��
b�ab��\ ҵ�\\P��~N	)p��;�s��\i�D�����z��9�f��.nlU��W4uux�[�����M&R��W�뒥��!�aCE>��nAD�ބ�A�t
�yX_��4�G��N�{���r�,�pz�R��o�H��x�ey�J�ht
�!L�E�Ŵ
��a�y�BJGe��x���X���[6��|�f
�2�@�������޺i	���8�#�$4e�b��Ҷ/��h�B�^z�=���>u�C�K�.b�x@O^�izDHA��R���[����`�5�Z��h�XԲ�o��C��#)������gm�+u�
�[�n%$�\\�RB߇��?�:�'E��Ӫۡ�P6+��
�������YJ�[!��_A��	y-ڱ�G�0�+�)�1D�p=p�\(*��T��7m�R�M͔�8+1��A���˺��Q��=.�����]jTob�^&Oz���,Ow�m�U`R��~�No!˲�`�O�0-{�[8�h_�	�M��'����ە��!��mҸ�Ys�B[���RDG�����x����+΃eŵO��K䂁����󐓎�0���j_Fnt�^lb��Ô��0<JHoR.yc�RK���`4U�&�4A���{�L�t�|�1tԶ�d�ꕡ��MZ@+�m�kƽ盐H��V�FM]wԋ�-�xi�tQ�/60�y�y�2��BQ7)���8�\9��6�����U_��l�rx��S���>n��K���|�q�@m6�!�n�8m(o9$^��库\+ȏW�i�z\xw̔<�
�:V�
K04}��g�qh��]x�e����>��`�ۏ�W�,+�#~�j;(�0.-�z�ڙ�6�u�i�ЎQ
A�TQ�8N��vZj:���V��0�K��-����
t~[:t�,��=/�_����9āo���'^��.QÐ�c�\=��Z>)�J@~��G�A_~P/!��
@6xI�ǽ���E�5���	�F�il4~��(r㯪wO�/�>El�0��u�B�d��<M�y/��('�C�ԅ��BQ�C7Pˏ���77��"F
��3|�sS5����GM���	��m�����n����-D�JN�*�Q?��CXu	��ڙ��I��Y0��ֈcz�K��[Z#tf٪���S<�t�&�,�<�u'y;?fBΔ����ZŹ���U��´��,-����l�2x��-	�����O=�R��c���+�dy_z��"'���=�	0��
�5� r�>��:`a�]m�͑�E	�(�W"u�`	��!]�_t��
9�l4��I��Ob�"-�EǠ�e	�c���%X��?�L�eU��1kY�)�x��!!~�m����Y�щ��sԢ���+�Q�1o�����Vu0�zQ�cNk� 8<>ࣃ?
,6E2ˁ�5}���@R��}��V"��?��	!��&Q��_+
��K�&޵���(�HYw
����j�f%8����q��\I����iKU����v�
I�Q�m�P;{fHT�wx��2���[eh�#�^�
ԏ��u����o�����z��q�qM�blD_�1�h����:���1�ZS�����?{����_w���w&��e޵
︬����\lF#}#d�+`Aǘ���5��c�O)=����^�$��=mT�O6F�9iZ��Y/qjD��$ax��?Pa��!��m�h2�P������=���jr�5kp�%Dn;�{.**�;�r&�.�Ն��3�_�Ww�0�|��۶�w�8�T{��
o����	ŀc��|��j\6גHڸ$��P@d&��w�ķ�@�i��b+���	���/�;(���:�Ȼ�,�dڕF��$Zɣ���|kR!Lu�g�x)m��|�.�<m��)HPI�4��^ߜpd{Z֟��g�?hv�Coś�ssK�(��TjqhB�=}\�L_���o���-�7�^ށQ1x��^�]�A�B��Ǎ6�
��*Ӫ-c�2Q�݈�ݖfd�;ꈬ�Z�.�����#��c�/H�E�%N��"�s`��ف �|�8(HXċ�c�׭��cq�,��8#�e��Q���;�5p?�����'�6��=��K���(��d��Q
�}�N.�W�$��p�	W�J���7K��9�HoX�ע~����pw��ʺ|�h�C\ްrq��w@�������0=��1m!+�e��I��e�O���ր�yu�浈Ý�Y�b��Yus�v�-g��-^�F�N�&�I&J�H5�$�8o�IO���K�*�Q�8�n����9Q��q>�&�����
��Y���u��<��ciI�	�Wu+F��������w��ӥ	y�3����<��|�k~��Oށ9�W���M��5_���i"��)�Q2ڔl�8�M��j��C���#���i1*��-�L&�7^�[=�$+Ѷ�@�L(�9�����o<�Y��!O,r^3�I�ߝ��x��� �����#��2�:P���!b�
b��\X6�ĵ��%d�p�w_I'�� j��Z������|AG��Qԛq{ɍ��ֆ�X��?�#p����^3r���ᐍjZ���P���_���ZŲ��oj0A�T���9EV�;�&)�^�*s�W�H�#㘷Rƻ
�\o5L|�oG�
 ty�񁵶���#ˌ-'�{��g}�O'�����A�@ny�D� �q#��n���^�4s
畊Ggo]����Q��c'л��?�Jdϳ�?�b�J[��L}8�l+g�f���S�%B��)���$J����
��O�l�ٌ��6}����yB�ȓs����0F�Q⣓KuU��x�S���K[�0ц\�yڥ"Ş��}�����X+ڭ?~�Q?��RXN�~��c������5�:�tb�>L�[�W�z2���t�=:T�Vf܆���W�Th�+�z��ћ��򏈪�m٫,!����!�~7T��KY�FY�MV���ܵ��m$�,�1�(?bKfŖ{F�8P���Πvɴ!�q]�߽3��Y>T����������{�Gwo�w�ni�z�$[(z�V�����\��GQ	���#����m�zH)փ�07�m�����E��E��e��n�p���_>�>Ύ������@���m0g��Of��@N��\��F�|61�K3��xħ�g>{���Ā �#��B'nQ@�!<�BNL!�8E2&�-�Ŀꉗ+N"[*m
��N�L�b!#��ѭ��/�L��}H��{k��x�y�>��0���:}|@\��T�t��R�ٰDU�R�I���7�2��n�/<�5q˫>A�e�&#e�ަE#i�	ś��1*�񫷀�n��j���7,��p��a�!_���<��jiZ<�f�j
Yk�U��&�򇲡z������14�S	?�"yfG�cp���ua|ߗ�L��>�R�qb��]��~�lr�	��^9�>F��etK�� d��?�i� <m
W��.�M�B�?�/����?]��;U&�dH5E�
d�ot���C�m��b���2	bE<���"���˓�~6�XFp�M��p#�Rd�+0k����j���7"�&����#�yp����l�:ÎC�A�Ħ��!�)�䇎0>���&r8[��!��)�:S(h<�7�=)K��iEO����)�_�^Z~��НT����0��x<9��Y]۠��J�z��8�:�Aߑ"j�ء)�Z#�9������_�+B֗_��)�-���4Jb�f��z�Y7줄���ItO�م_V�F
.���y*��l�Lc�9Z�!�4o
�צ�0���pD��K숦zT��y��r�DqU�q���uS)W��2�(��_����Sj�J�x�˫Y?��?����#�.�(�����ctK�b]ރ4?cEt�U�o~���^�@5�~��.��w�&pݾ��Ţ�gz�_ī��bS��J�r߲�xf�d/rVӐ9ef
�#vɶ�,�J��U�k�f��˪B�o!�U�s(��<,��
�d~�jYW�^��u֓�Yx�5^�j��ɲײՋY��Bi�OVM�oz߁q4����ÿ��L�I#�3�R�����dJcA}q2�x�l-�%�S�_��0�9?;����j�EG�}��!B㑁G�ۏ�k�^g�D��[���ߟ����L>'0/
_�G�g��ЗP���.����<��g	�����Sx8�o�$�����V:<Af������Z 1�;�����[%���)��$���Y�B��(ձ0iL�z�Nup+�?{�pQ�Z�ގv(�������!{��寘u��f�O2��'}L���#dd�ˉ��E���u8, �A \��t���lG��o�25�7�)`�CDž�<��0x�!�!��R��X��lW�<L�y�J1�#J�
b�wC��v^'�+�z��[��3��(���|�C��������&G Y����LN�n!�f�s>ˏob��꭪bT${�ɷۈ�Xn�P��"Y#�:1Yx/�1�y�yb#���6@C�߅������b��#'
��r�}�՚��%�N�:�Z��(P݇�$Z���Cx�_�����ŴXV��vC�1�4����x�]n)7��)�a#(a�w���/�b���>:๷����+@��CE2ڠ����0��~)�� ���w5RD�kRc��>�P�9d���2���l	��s���{�u�J���Z��FP������@�y�k>a��%,�N��l�Sʮ��04��P��_�&\�_�VN�j������ZMө��%S��J��.��4j�t�T �|uH?�xn��նldI����;.�3D�u�i��m�����q�CI䩖�T��hɏ�?�g�x���n�h�ޒ�їa�Ã�3�!�����4tb�*�Ha纴��H�C�DrTsٟ�.q.�	-��o�b��YROL3�chY�F������aM���{��+����u�)�T��:$H�7�tku.Inv�u&�b4�)�`�
*)�yz�-R�߁�b'B򏰘D���N�N��C�݁��M�F�Wq�"�g�'ɷ�~Y���&m}����*
��L;t�&����Sbȭ�U�#���K�\�C�h�T݊�v�KX��
(�#bZ�U&�����s�U�"���z|���[nl�]�nӍ�M����Ƒ������X���~��**Tb�)<Tu���vt��O4	���MN��{8�u�g���[4�y�9�Q��s7�Q�qsh��e�4�yE;�X^�l���u��
c�]�5�h�}���㇔�ǁ?������:���4Y�!�]��6����Z�q��]�	2��y�~kc�,�jee����]O"I�+��6 ���K.��\&�Bd���a�Q'"C@W7������ǀ��
���~��w��anL��͍�H�u(�����VJ�և��X�o�oc��H�,s��b�.W�?�k�J4�����LhY�7�y'5���^J��F�-meW����6y)&�R�z���?.fi������J��cY��޺��P/VIa��~ӬBh�����	�[�v���U����F�sKC߰P�0���xK���ء���%{�3W�c%���g!��X�ɘ=�S���ƍ}���nn�e����n�L�ͭ�	�K4p�Aݘ�I������C�˜7�ݖ"ch|c�W���~�ݛ� {]!b�� ���H�go�nf�Q+�{�q����C�cB�q�lP9�KEӤ	�.��í�ࢺ�nU�Kj�=Z��Iܿh�&�y��$:�BاO���[��H���.N�ɠw9�ڭ�I�q�_Dd/�t�g��p{w�?�g:����䟨�@�u@�}���>�1t���x����N��	P��dt���
��٠���G�3�s�
E�C���'�����^t��%>�&�vN��8*ɒ��2˓��wS�vÿ��ﳫeOWw�A�֑��tvZ\�=�s�w$‡�ݳc�c�	Qa��R�r[��J�`G��'c�T7�,Y�O~=���U�ϑg!/�ҝ#G�u��^�`�5���
��/X\Ɨ�]��v�e�����=��:(ic/BHSy������bz��"�����T�P�,��Uyq���g\�m7��7�{�u���c�cW>������U��q�*t��2!@Y�Ze`����˾����_�x���K�?�%^B���J�IJ� ]|�g�>�]:7���X!������
7�F�*����t&��L�iY��3�^���qz)��,�BF�P����UU�O0��c?�����u6��p��`]��`��j^,�S�C���H«���p�R�:�`�]U�kf����0�I�0�*�H�������ey�B��L��͒$��;vCo*F��
�I��ڑ[\�}n[�Z@��i�G��Ⅰp|�'8�P.#U�w"�XD�2�_�7V�֬�EA樠<b̕��4T�@s��S�0�[����!"�E�^��ߵz�4�<~�#ª��F
q���0��/0�ސ5V���:�����.��Q�XȾ���ֈқ��S����U�k�1P�h5���6x3�5���[eT�l�YÒ�n4��ƻgœ��?���[,a�2Ob#(OI#T����a���+U�k�0lF��l�=�
|)v��!A��9
�r�"�
���WB4e�w+N�<k|Lw8�.�B�
�$�^�a�U綡Y���8�y($��<W_L�5�
Z���a���0'�Go��+L�Íe��W�6z��33Ln�R��ňr��b���HP��쩃#8��’���1�,i6�Xۺ��1�����[4���8M��g0ο�*�TG�_9-�9PK�G��^���^AmF�0`�en�T��l�˞�k5�"YG���=k�R��9bڡeX��q��q|�Pc>�jR!��u�~��۪{�I���/��,����&��T�g����)�[��ٰ^��-%����:=�����{�)���*�ʲ�\�����=�?�2��t}D<�������v�n��\���>>�Eoo,���U�Q1����]Yo�F�+�bD�R��Ae$mh�N󒦆ш
�H�	 �w�����v���E6�����o�!�����
���
�<
�v��>��]���O� B�Mk�h�8M��%�𡻦l��j���GT�>}�{ayJ=\,+��.�n���KB˽T�3��E�dd7$�GK�7&���~���8�~�`I	&S�Y�SR��t3/\� ��]�V�f+�qV��X_�#\�z5$;5��{Xe:�D;�2�Q��w��� �\�{[o���PV�x��C].+ZҐ�础RD�hU[��o_.��ٰ�za���<�+��kB�(Z6cê��ɥ�cNmP��`���
;����G�ϋ��RÂ?b��
�h�4b�h-`�&(H�5�P[�dix�/�����9�/�,�`hZ`�0N\E���_2൤\��;�w�j�����?6�e�Q&��|V�&E��@�A��[��2�DY
�_s�di�=����:�	�%�.55Z�����^=��Ӎ6���Ġ�eW�d��d�26�����lz!�<G�85k�zX��e4[�@�LI�1�M��-?���p�<$����J�� ��H>tT5ɻ��?-�+3����˞_R}QE<+"�=_��~��Y�;��aGBf,��뷙#H>��ȢV�Ot`
ඪ�!e����"�}
�4x��꣣�lb�ckn��Speg�d;Y�A���Mv��3G�_k���&	��M�G�n�GD4��]�Op�ɜ�'y��˃�֡A�-��"Mc|�h��ogcU#.��^��j����~2��nf^������P!=D.S�򦾭JO�`�K��R�0ևfx�LŠ�"��7���X��zJm���ˁd��L}ޕ��|ݠ����T���z�\-M�׷�1*��n��&KwX��ʹf�E�GGh����6}��X�_�P�x7S�c�,nw�E4�!)N��Z[oE���Du�iUUΏQ#}���|�$	�|�4��� K���a��/x�E�0])�y��dI�|�G
���$2�y��o��.+x��D�3�i��LC��P_��]��CiÆă	�(����J��.c�&��G��gY��:E}�uD�hNmqF
�E�,Ӡڠ��"
vG��P�7�E�m��:=�A���]�z�%Ưƻ�*i�(;v��A�q��X"k�J\���œҸ���풧����p�l���f�%-��=�Vv�s���Ё���NQ<F�G6<�����s�G�Sl.���KH.����٦
���8�Ĺء��&`R<��q�!C���K ,w���ڥו>p����@�=�nzި�p@�UY�쨑~.J�k�J�

%��nJΘq,���
������R�����5���x#�X��f~qL~�!�Θl���$5��ݡ:�0�����,���I���H���A��v�@]�7:�c8W��G꫗Jo6,����K�����E.F��t�:+�c�e��#ʬ��+r���7z!V�nԼ(�;#L��8�\j+�$���V@�����A�I��A���u�8I�{}̟�ۘ���S��;�C�̜�F�ڷ����>�
	?5�5�;�(r�*�a\;�<�"����o*�wM0n�#�ΜH��u�@���d�T�`I�.�;�S��f��u�e�C�֠L���2����-�]��HS˅�*V��f	6J(Z��\��ɠ^���=ca5���Ž�H��ݢ���q\�HE;G�;�CzT��Q���SC��|�$q��\�Q��������YKn��
L���O�z$��MH�� &޽)I������8����f�>)I:�u�=N��-%�{)�^	c�^�ԛZ˽�V�݃]�d��䞰�H	�o�',@�M���0	o�S�&��-u�յ@���z(@���r���nǁ4��5�w~u�t>��2�/e�x�h���ܰ=���4�{xqu�!�#�G��2��㘡�B��N�g�s�׾m��n�S�D��e�q˒&ͭJFJ�}pb��<�AX��c{�a���p"���e�M��&yI� �aƖ����d��Ba/���zF1�?�����V
���C �޿�$|IFj�I-�\|�-���8k�c��8��+��8�$GL�%���ZJ/�z�-�
���QfZ���G�yE\�sg�#f���`���\N���-Cy��k��p�Sf>v;��BNG�V�e!��D'�U�$A����ud��*B��I����&u�I�a�Xخ����q�c�}\.Gfy��	@}��8*����Z�2~e�m4 �EbW3�H�X<hN�۷$��V%�cW>v�����	��}Ҡ.����4��M'�h�'&��Dt�[��vfMADiz&ˎ�'<N��G�[����.O��v/Q�5=���Y͒��:ue����A,gķ�H�zJQHO�.�݊V�g�˛�^9n�f�Y�1Q��$�/Cr��WB}gJ�<O8�:�����7!޴�?���]YoI~�_!XE�9Y�N��I2��dĞy1����F�I��߷H��buKqv��d��b�E�#�V͖�93^v@�l����d��&�pli �K�"@u�^JzH�t�U�zg����+5CD��f6�s�d�Ït\��46UvbXj_*��($Y�Hut�G��#żu�T�G�Y��{
!�7�~�
si>b���/���\	F�������w*�{�F�js��)�omF'��Dž����+�ܪ�M#_5\�t�ҫ���gZ�p��rP���;n��L_&.�E��dڕ�ʱ��M2:��أ��E�-,�݅��̽�j)�`1_�ëog�l��
ۼ�l�YY
��P9I���V2%�=��"����CPQ���U�`I�ЯrW���*�`8�Q9���r�۶ԟ�S'�����"&�0V?�Q�{��C����u��`%?��C�g�3��bS+��3ै��K�;������ ��gx�e7hL��kĖv
v���V����g6ς�Y/Ʈ�>��q�t���$+`v֋5u��8#�i@%V��P�I��̞=/vx7�{�ZϥlÈ��r`���ٱ4�7=Z�d�����C���dP$��o;�+uu��c���y�Nb'�܂)I0��;s�g�/=R-��Pi�޵�C�ܻI|ZE������Hwm��K8���ؑZ3H����
I|)�� �#������pq3_5s�����ے�-��{l�ޮG�8���xy핥dSzoc�z��yͥu��,t�$]2B�V�����d	�_�P�xq�FgA/0i[��y�٨)��
���
� �ar�S���t�;��ڤ�%dgKk��#��Z*��%��l�dt�1~�M(lQh*-���g�X��o��
c+JbH%.��3�Bd�
�b�7�m�$k�U~3ކ��=�x.O��ev���,D�	J/6���*kTWE�q��H���J�bJ��!_#*���U'IJ&� ��ɨ4��e�ROsjk���	
�9:�j><�(��~�>V�;w'��<�&�B� ܵ]	E}((���:H(e?.I7���:��,)�+�ބA�]�sF���^P_�z?J�ٗ�f�.kd Fa���F��\�����(j�K����_�Qj�
�ߝ�
D�"� �#;�)�t:���C���
��Ƃ����H����#��[~��v+e��s����n8M�oq7���lٍ�4�5�L�����L�룂�>�l��� H�PI�|쫀d���	媽M\6Vj��.5]pq��H��sx�=
���]�]A��&å��f����נ͹��6Z؄��jhs3UM� g2�v�	�M^�%�ɟٸ��0>7�
��|l�N17��7��u`�խ/����}&���}��H+4�'Ѫ>�iԛ�� �fB�uS�(M�v��G��u*X̤�k�u��
�L<$�K��W)L@�)�ԳZ��#�#�޴_j����S�e�!t1{�\��aj���y�
]��W	3�^y.n}A�G��v�N�MC�y}��=�j����H-��Kts�>7��M�4�14�-w8W�qb�J*K�0�g�n��7��^+.KJ�r�8�y"��i��Ys��Y޻�pK�o��e{��am^�ЅZ->^���bi�j�$��վ��|�� L��g٭��ވ�(�*���5��5jgኩ8���ҽ�W}����m/¬�.N�����3ŢS�]R0B�
2��Vk�!��!�^����>��4&�#��_C�m�ϕ��B�s�N��,2�u�*��`Mg��̀�/	�@T�=�_��e�ӻ�j��
�I��-���8g�2�����p�u�F�$�8�$}�H�=��,EﵘQ�쉂�^�τ��l�!ˡ�<rsþ��E'�"D&+�z�7e�OD�#y����zT<LxM�>��S�ʼ��}g3
w����E�E�I<�x$�ONU�xp��'���Γ��I�	�ѭ8�nd��6]��D������2�>�5B�������t��2<��D�`�c��G�`�j��«�2�*+*G�h^}�{����=�&&5d?�[LńI[xʴ�;�QīZ��Lt�j�����7�u��B^��p��
1�>b�UW����y1%jf���z��M��������݄�s�xԂc0�S���Y����i���)Ѽ��w=�M-�Ӳ�U+�xZ���~�F`o��C�؏c�uL�����"���܋�=�~�z���+i7M�p��m̛,���������
#����a��1*�=w:F�`z�F�ϑ�L�Z{���$�㵷rW7�mr�����d���?w{UF3/Eu�$
���L�մ�3^��,+Н`�T��{��|ok��H�A����>�����>$�k��Eo�:�b0�j]c >UK��D�p���//������1�1��!�
GV���@��ї|��>\��N�����.�w���:7pO�ցeOޘ��ԕKp*Q�G���2����֙�J�nz2��R�=
Y�,�������9f�f�n�Rf�m�]�SV��Z|�Xa`�?�3�m�k'�8d D
�Ff'w�W�@��K�I�+M�60�  �S���P�9�=�Q��T
�i�DKC�����͜7��6yn��4毺Zc�)z�=�X�f�{�6���໖�p}�������x�J���cv3@�;
�e��q�uc���C}�n9���P�k�x]�u��fv�ri+����Ya��֧�=5��'���sLj�N��
�
�`˖1����a	ɅOΖ�����U��ǁ�@�������#w}�^�����z}��=1iR���nw��7�d��(�qU�R^��|��L�Qj�qu�/��}׬2���3�s�G#M��ء[�d����,�|s�u����0.�DqyL蘺�!'�><9w��>�=~�����I�B�-�n�cCvr�W���<����0Y��Y�($��!�s3M�x6_l��`?C��"�Pg�ulA�)� 1MR�Ѳ)�h���=�&Qc���#���y�'S���`���pr�m"����m����`Xv\�s�0���a����a�Ӌ�ZX���a
G˨����4�O(k���7�����%�������#��;�?={�x���[�l5�w��P�5^�/�ח�W�k��V�W�Y3����
��������jq�M#u��öqg�|2n|�k��������*�>����e5MT
�D׊��G��v���^���F�O�;L0��Н����Z5~Y.na��j4���/��
V��KŌ*F��%6�u���r��ھ^΂~�f~��L9�l�Wm�1D���CFK�<)~�!]ML]T���R�,L��;���j���
6ԗU{E?O�geqE��=�*U5�
s�$}4�AF6�'���S����ko�8�8�]`]d7�[�{�Eڦ�⶷E�=�^�V]m�k)u�X���ɗ�$�O�K�p8$��p8��+�X?�8ɇl���s���Zx�֛?-�:�ꦸ�d ��ϓ�b�7BtW3���D��At�:csLK�!��7ٲ�O"d�Z�òd�]����A�u �ԢN��3��S�re�wMp��R8!��'fh�:��|m~k�����8���X�NMkx}N%1�W;�HAB��P�ݔ�U���M�&_��7�
�y��f��1aum�7=@�T������g�6���2E�-84E0 ���n:!������6�I�Ű.@��X������
�������g�O��'�NޟB�*4�8���a���W���L[�lvc�U�z��5li�V-���#��ϳ�x7Y ܰ�l�Ȯ�s��z��x�Klȗ�ۯ��Au�����kX�'}B��n��I7l�Ye����m$L�?M�#��ZVM�()���n����ĥH�^Y��B�|��w��e��:�#��h^,���1�(�%�׸U�$�
���|���Ӿ!!���D�_�9�����0#���hD1T$�8�K��Vt��J|�����RW�m�8�s�H
��\j�HT-~�y���W�b������0�&�\�O���zѥI��Bw����P��n�Z��诰	� Z�G�F0D
��>k��h�Ɲ�N-� D9�o�`���*��*D����Tx���^�����Z��.��_Z�]��O��P�L��澝�~��G���Q�˜����򑭾��N"w�T�݈B����K��ac
�E-�|q��~��o>��	8\V�����5���|��溈v�I��A*��
c;��neH2�S�{�ӡ#�,��Z3�/K��̘j���h���(��2�u���UjD���R�K$*��3�VGX/���0av�������U�{�B��߶2!B<�#�����g�4���e>p��C����}�}�����r8S���8<��wBͩ���BWQ�"�u�ՖkZ��)����6鏴�r�m0��}��׽�T_�>��ٞ�l3a�e&�ۥ���&�ԋ��fS"�G���m��_�W��s�0l��z��Ŏ0�OqT$u���p��d��Xu��Ίj����hU��x�`�K-]�����5�G����2p�6'S0��|��.8�F����P�.��X|���B�P%�K��m�*�Dn����f��?��yO��:v�u.�Eg���@љ�ngH0������5�A�)�J?�&˴�b����o��ܰ
�D��X�����;���6i��i���z��4�g1�B0n՟*
s�C�3��y�1pq�t������}9���^�H�W����{�d��iVl��Gœ�
�ACjt���wB���:���=�5�i�+���
qyk:�P��m��by�<��A[�"2A�KC����ŋ�vN��d�p̹髑���d�V)�5������5�{��mĵ�E�X��,�:���Nf4�l��i��M�O�~tQ�.���d0���.Ň�L�H�E2vݛɒ�-�Qn��ߝ��Y-����rp����&?�:�E�36�/�YaI
EG{~VG �|O:2���S�7��!U���xd��L޽���Y?����ŋ�v;�}Xn�/�;>>~AB@���]H�.�R)*o�Ű<���#$�(��dZU����e�7���F=\3�=YBG��E9�2�����㿎{�H�"�Q��ᡒ�O/4(Vkq� 4�р�ad�G�4��:x���ǿ`����4NJ���'p;������0A�Z�F� ����b�����|�Z
@��P$�h;�/��Ji���!���(Q��R�1��^�U{8N���7��K�I�Ĉnn�6�����&)�+a��6���ܬ I��'�l
m��SDyM�D�ݤ�~�B��6�)E���WL-���g�4SU���ʕj9�jձ�a�Ю��/�+���M��S�����@�oijK�܎��+�l3�u�ݥ�W�Ve��a�~��O���ו�1.�H����&I�����~k�ŧ��V��?˅�ۢ�$���>�[o��؛\��5PsrU�R7����;
6I�i�{\�T|�>��ܝ4p��6�v{Q��	�����-7�RXB���
���i�~�6���l4Y^���DQi8A�t��)�x�E+�W��Q,���O�w��;X��syk��K�_Q� %�ɤ�r�l���t�n��&z(𣦽�d󥋒��6�k�S4�������ku�����M�µ�
�q�DŽ_6'w"+<��#���%a+�� �
��+븎�.R�s�Vz�h�KZ�1c����O�P8OU��EYL��#	�(�v�0�
(W��e�Y�?��CSjv�o�/�`��7�X�h��b��_|<.��r���^��������8���ry��m�5d�*C!�*��=`Y��og��PI��*'O6��~x��-Wk��>l�X�D�Pg�ΡDe�u���+m@��z�s���3{^�LN���c(_�b)͍~F��s�!
�7�&�r�a	��6��.n�塀Y;�y�Þ��F^��͍kS�os�y����@����6�����v	$8��,�Tנ����a�5v"�"'I�/��Ps��ÿO'o~>9;��e�%<l�m,r��i8�w����*S��<��i�TOY����f�72��s�t��F��i��Ğ9�"Pg�,�Æ�}?s�z�b���i]�J�i��8��=}�)�]vqf;�
5��pD�0�^E�>�ÁW=6��^K�����QDR&ӥ�mm&5Y�L��qEY�4��V��m����ԏ嬸.о�I%���M�
�4���ܢ9q�����"]?��. ��8/�gܶ<���l���T.s��|���h����k��@+�x�[�R �Y;��R��ۗG����Lx�*����?���|�	�hC�c̼?C��5�Aя�!	�������mQ��7C�G�]3	oV�G��\ហ:$��*a[bg�%�*��ϗJN���|�Ó�f�:`6w?%���u���d6SAO%�S�X�e�lNg](\�.�	~#�|�wv`v�v&q�0Y[B�#x�����q���J~ټ��M��ȷD��~i�.R��I~��=�/i$gJA��F4YZ�l��5��5<���%x]�f_{=K�
e�.P��džV~Q��…�L?���H9�p8��u�d�^[;+�f���г
�(�L��[�����.�N8RF:y*DnTQ���1F"�*#sA��v��-V�wC��A׺\��ԫ��*ذ�2���Y�|͸��K]��9�CA�����ѤR�ٻ�Ly���D2�TV)���>�Ix`��}_�r>p���Ћ�U�ٯ��Aa���9�]�f�F�g�����L`�h��>1"m	
B��ސ��s�
yb�zg;hJ����;Ԉ�0�k����R����(��[_���B0Z�E����ce�m꣢M��m��j?�j�i��}b!�b�4W�֬.�T�'��t�y��'l$�2`�i<m�Pp�G��~g5Ve
���#�ָ^&8���0݆�j������vV�/vc@s����V&t��x�x����aK��uPb͡	�5����r��K\4Y��T	"A�q��r�J&@Sƶ,�"w�UD�����"���fh�H��c4�b����kr�H�,хa�
���&9�~}�5g�	K#�I�Ug�'#�M�l0j�
�?��?����n7�Wl"Pv����RY7Mj @Q�>D���H��B+#i%�{9ÙṲ��틠%��kx�ICK�qE�<���\��ߧzfv�
.O��C�_+�Ob�ɼY>6�j}c����*�[{)N'�+��+��B"mhD�AA&��]�Qw�g��޵�Ҵ���9}�;&��!�i��ѐ�qc�f��
m[�����g���d�A\Yb˳OԻ~�?�ݐ?���'��FP�zѳ�s��_�C�bعDb��Ǔ�<H��I��^$ڪ8E���
GG
ԑ`�'"�@6�����h�������6k$.}��_����ۉ�xT<�G�f�Ϛ�p�S5��66w��b"ZK�����/��a�Q�`*&h��ʹ̈́���ܮBU�X���Yhƽ�/@�v�̬ힺ��l�ۙ~@��#?*Im
<���h��VIG���"�r�4x�_Ӟ}^��uT�
)$���_/ֿ=�b�u_ң�Il4�s�Q�>��R2O��٪���\�{�D���_�t�/)G�% ��Z0�7x��k���O��%{,����mܝԠ�{b��5�	�	��g=�L6�,6��}�	���laxCU�Rڦ�fE$H=�}�D��#�ɗ1oD�A��z0z`R�7�"���b}�b%���V�O�H#R�eA=ݲ"���?d��*]��G�-.���o�����p�#����x��4�'�J�u+���M/��:ʽtT#�E_�'���nm"OC��zx���X\/�C�>�vug��0q�s��8�o�YZLGm;8e��r���6���t�ÑrG��HX_ˇ��~�A]h
,Q���H0�i`%k$Y�mG�G�>�� C�"�Ħ4�&��x�G��t�L�]}l�Dy����`_�m��u�V��	���k�J��8�NaǏ+*n)�1��c�)Z��V&��}2�ˣE���NG �	��:�R4֓��@�k𼰆y6�SR�
!Y�~e��䛲8׃���x/���q&�&�@�M�t�O�tPG0N�N�H�e������&����m�J\�)I9�`�����>���Пc�����ptɰ��X9�1��N��,�֓����`[Ms���d �]9�K�K{���g�.���Q����N����D��-+�0$���F2�(x���v��L��.����F�����4��<�0=&��9Π�^FxU�m�����$"%�>8��ϻA��ǸS�Y�?�ip!m`Ȑ���2�ݹH<�2[|��>��dO3��*��\涥��MwULN͐�,�H7�` Z	�v`C�:2|:���7r!�p�S���tŲ�"]kc,�mUī��*.�`�OFw�t��\@����asJ���bw�F.�M.�\�p
Y��2��H��z2����rH�����׫zy�� �3�*��-`�!�PC��_"]���n
1s�7M��h�i�5��w:/zŨ؍�ݨڍ����n�v�Q�X���ѩ�y]߭���Ѷ9۫�:�œ>���`�`�L)�߽ye&ǫ��LgϠ7���zr���B���L6ck�BŦ�ZF���:75@�YQ�2h�����p���ȇI���Xgo��0�Z�Z
�?{��ų�o/�(�-%ܳ5��a�P��@�#��gP�'!����Zz�u����{�	N"/��,*�VI�ˮ���'�];wU�h�tu���u�*2�#Y�C�A�zU�/��v�@O���MW�*���8,!���S;��@��e����Sڋ5�����he��r��<&ݮ��#/C����qb�@s&����-$)�tm�,]�[��� 	:��^@��1QB��.8O>�n=6��rƭ�t�pS g|��-Cg���M�\�̨C�E=�=X7�?�����{W��b���_���
�0��%�� �"�E(t�Y���Z��3gr1�ng.^.9�4�����h�|�!���l�w���E��G��4~�n�q�!rnC�a�v�o��/��Yf��q�,�E�
�J%J>�)~)�E�;�v��p���N8�Dif��f��4���>8T�R�Y��>f��9+]���*x�6�+�-������`,��US^�0���B�w������iL�	���Cn��'K��������u��Ab-!"���)J�x�R��0u�̥%7�CL9�����ug�+�cƋ��=�rǑ�"��X���%��Y���mV,QE��],�V� �Â����L�cAPū����y���{�	�l�Ԓ��V[g
���w̟�⇕qb�D�I��=��R���﵍�/?u!��'V�/����)T�y�v��&Pl�#���M�~���r���'�Vd:��ۮ]8�{-�ʱf6����Ҕ��q�)����,*�Pq�xY~���z��v�Q!�w�p�t
uԒ�ֿ�C�#f:��ޒ�e!Ja��`��r���#�:�Ӡ+��)S�pr����}�|��1��k�f����l��s����|��c�ɨr;�y��!�#�Sc13J �Y�,Q�
��\�P��r�L-J���N?��H>F���&�$�l��^\�:�l9�jf|��k���po,1�_S��oR�GJ�ǔ��|~�k�^�W���Z�}�N�Z�p���]�D�@O�, ~|���;�P���A�����9�MEcQ�_@�e��G7g|&�g�֝�w��JPf���D�Dͳ��bT�o��:��t^�|�p�.S��(���8����g���	�:���tI\��\���r�}b��3�;مj�[#6H4�v@S��&�J�a���j�9S��M�#	���<|c��M;
��7�k�v~he��-ˡI��{��uyM��W����nZ�9g̀��������������rR�xZ!cΏ�?���n��^�y�:>��a2���<��x���������
�t�^�{""��/��u�������1�� g�����*�D&����́��W���xK Q6�����_i�A���EI�"�yt����#���!6;́��~����Y^�bx��Y;E�}��
�T��r'N=F:��0���`f�[M�"�j2m���#sӪ���Nf�h?�Uz�_{�gn���j��"]�Pr뢢������/×'�������?��i����}��ۮ½������T:>yi��~ݛo^���s�X��@��v6
�]:*^�$Lr��A-�W�\��;��K?Q"��1�?��	��O�}�ⶂ��ݤ���M
SM����ª2O�%�'U��<b��4�K�)G��6�9;c�F���H��j�a�JH����f�s^Q����;�
��B��&��IuOn$�T؆<�-	�z�2�"<T#�\�9͸9�8Vr��K^��e3R{�hN�*-�
$0������1�M�9q�|$��n�Q/7�em6��^*1z1%�"�Z�����7�Hٝ�
.��6yP�&P�5�֐A;�����m�b8k���L�/�?��qK�dj��gy�Lڐ��*,,����bl�5��^�\x����i<�V`�X�P"Q�6�G��H�b�Rz�bJ�2���*i�'���(J���Q���]�K�r��տ�g�W�_W`mÃR�3`]�B�a�Ih��Ɉ�s�mUS�0�5�M�IAay`(=4�(I3�P���^�B6:fT<�}Dh:�g����?+y~'�y�f]<pS3�^�X9��b�xe�O�I�7��*��ת\�{�ν�)��8�[��9Gۓ�FECP�9%d��{>�&�\�6�cơ_�
'���#�l��]��.�B�13=��Hdʩ�Ci�׻ޟ�(��<Lsྔ�iI歾�5%ׇ�Su��#vMg�YH�[p���Y�w�Wn#��
S�>��ԟ1V�׃J�W��u��G��o¦�MG0��Y���|
���Z��[�!�tQ���Q}��X�̳3��B�Um�{��_�5y���0#]�X�*���}�m��k�[π�>����/(��
B	���|�-��ӒP�7�n��^/��FJ,wQl��ʆm�H>[�"E�|z@�Rx�ŵ�T��-��\u,��!�$rp%�5��&�\��D����t��eo��t�N;�c�"�.$A�b���E�L !ypyQ^�N�{nt���÷�P��7��;6�g������}5lI9��q+��"bD.K�[���Ntj��o�YoV�I��6J?�w���?�F�K��>K�p�=�"a"�i^O�V��޸��"hV�"����ڰ�	�A0����
V�V�^VH�+:{���y�ak#�m?{�OC6��=OԚF�k�}H���fk
H���4�t�R�i)�s{��;%d]�z!�	����Q�<.YE�v�
	�q�z:�ю�pΞyz�ޏ��GAF����1���4VH-̺.,_,�F���Ɩ��||se:d������������`-����/��^}yj2�A �=E�M�y{/��3!'ϧEc,7�������CL;��@S/-O����m��ԭL&��M7��k�*�N�@�i�^N7��(�~���v���˹!i�$SȆp��៦�l�\RO��zr�U^Q��v�ôhx����|��GpZ!b���d�X
�]ؾ��’�7!OLe$�1�E��k��]���(��@�W�������,�>�-A�;�z�����^ҿ(MH�#K�ltp��{��~r]�J�+x7�������4g}�������2�uc.J��&�]^,j�fh��i-3�I9�Ob����s��i��.�
̿������U�p36p[�:&��>*���N����9���v��R�`�f/" ��b�.W1��	�2��#O�E�����ž�"`���S�(!SГ��4����J�����ԝ	E繅v�Na�@n{?��,0{�*��z{��}��,v��Yؿr��ꮚ�_0������\�M�(�j�8ʫ��I��>�������&�}k��D�(襖Ϫj,���`y
oϩ��w�킰����ު�I$Bb/���#G��K䇫�������*�q�X��5D~��)�_�m�h��Z[~=yt���w?�?�p�
qp��(�@Z׬���-��v�[aW���s��J�6�ZI�9v'����YӤ���oSr��g�$53sWE��$�KL��|sn�����3�􏬰X�`\��p"y��澚�����Ps�l�hn1�~4��W��ΘЕ�k��m(��y�*j�,�˯�(ԡ�5D�5O��]
��.	�Kcs,j��dY�cx�Y���
!�U�3���Xnr���f�@b�q#z�&��ۨ8��l�zά���P��3��G��y"$��� �u<�M�	˲e�Nu>��6�y��|:��s �AU;��*g��*�TM&��1h��A���g��u�*z˚���`��s9�=��W��;�Y�4�P$�a����[�?��{�3ܡ����u޸�zq�߆�*kݦ�f�•T<�IL_\��J&�nw��R9�u���9�*�m{	�����-y//=΢;��ʩ�	�V��`�*~�+gV�e�����~plʊ�����<�<7�\SI��Tb���a�"��V�������EY���s��R��N�s���h�3b�Mњ��lU��|�<���⻧��$}�ݦ����pJ[���v�'n��9'��]�KB��SU�sڝ��N:��T�IY�D&N�=����b��Ƚ]'�4���/k\�]������@�=ylM�z�	^'�N�F�ʌMX+�=��xSbssH��HY��
����%:�K�a���N���,�\���^��W��Q��&,�N/%�+��
�����	ʫ�:����
fT_�Fd�g��U�?�O���U�\�J'j"C��e|��?��i�f��N|���Y�P�+��R��I%N��jnY>�y\��a�CC!ӥ
R������8،�y���MGMgVĝ�"��Js�Ϸ��Wi�2�)zq�Xj��<��F|��������2������s�)Jb7��I�&���M��.21�h�Yx�"��X���G�4����E5������w@-����})�"#[�}��$e@r�]�����V%���{��'�����Ƹʹ����$w�V)F)���v�/��e�۲�ױ�p�=�b��kB��D�7f�r�
3��6�$;ܰ�	>*E;B�5>/��P��Sߓ\߹+���d#�W����������x6Їn(h��_��R�io��ۃw��'G��
���w�\��q�!W����_=˯�Q�W���,�z��g��>\�:��:U���U��G�<����?�yhQ���,�|6����0"Nf��X�&�J͠*�Nj;�xL��4��i�������0���lp��3���<�A�+7�%�tl�O�]S��&c}�)bseG�C�«��ދ0�J����'�v<�A��a�o���_�gf��?���>�ż�	���6Z�m�aK67J��\������%F=��@�n�H�˅�Z+��A
K�޿öi搷���[�3Dza!p|ӄ`��9z�20Ey$�!b�PLk���&�*�\qU^Z����l��`����@�Y��D�H���7��������rS5-o!�B�M+�If��ZP`xD0��U�
�)���g5G�ݢ9�`��	U��b�}Oʘ�>�����W���2%�sJn�q@�*U!������T�2���R}�|��8��^����U/���s�[I�	
�
��t�����)r]�Xh=�����~)o]��9U�^�ט���O.k����\���?��6��i@?,�Y
����Pǐ�2�=i]�JK��F9����O�y������o0wd�>}�q;��6�$O��$�.s�Z�q�-�B�y�(�ٳ��2�%�q�U@x�Ȥw_�&��ެ`R	]�O��L"�z3~��)�nk�G��^'W����p3�\�S�o�9n�N�t��Ż�Sm����UY��%]�OF����u�叺�m�߃�gy
鹖_�K��Л���;ɑ"k���F����r�i��7/
��X��ϻż��5��:U=�~��(	
�e���Q���ܰ���"J�t�
��oq��cj<L�Ҏ��{����w~zً7z`�K���+�5(�[��%hNm��7�ax�N�\���"�
N�]�9F�K��ɦ��w��տ\$j���>h��o��d�'��pB~{V�NZ�Z�c�:�̈́=h9�{x���s��Tꥆ��6���I�<�tx��O����k�Y}�t7�!�gzW7�9�ԲA��N5
��a�X�˩A�o��vGdI2�hL�X�T�瑹��l�w��f�/�f!*�e��~�װ0��1֚2�G�Ea��E�L��nk&��8Ѧΐ�j�JRo��dYJ�'�_�)PZ��?��$�F é�5ה�	�r���a���mb�<	���[���%U�)�{[5O/�z���>��h��u�;2%�J B_Ƶ����*��b5�Y�A���q�5l�f�-��u�N�ߠG�C\"[�)􅬨���ݥ4�`^���f`G�?L�BHe9igݛ�|B�|c!��������da>���L�U�jH ����6D7¢�V��<�D���?��^�x�$>D 3�c���Qy�3�1�u ;��)AR~

�}6 ��2�k�`��,�5�Pj
�����6��(�jp�b�y���$��m+�����jj_me��c�»hyU���9��B%g0o~Y�ٻh�r�u1VZ���j��K�񵚀w-�� �����0�r�U�F��hꫩ�
�okÎ�H�aT�v��Qơtw\vr�5���
 I�jaVQO3Ly�i2��E�ຽ���o���%���Hr]��p�XD��z���L�Ef�Xfe0�5��&s��S}'u�'���r��9�NJ{�`��?N"3\�WK�D�aRM��W״<��Mq�����{�j�8큢����B�0҃!D�%���մ������]�SI��~��r� ����J�Cxl�&�6���p
��Z������}+_U�U�B��E��ب;+��Y�U���t�[O���o����-s!�e݂�&�J\�o�ofN�eK�í1Ig3����T�7�|�T:�b���W0��E\B�23�J��`$�#	�M�3�e�<����i�5�i��l�T��*3�������y:	��Q,2��9Ҁ㢉ӛi)� {���z���m�u3��ͭ'�n'_k�
�L�2�B"Z�:D�e�G��W��$-(Mu��hG��}��l=Y�����Ƒ�J$n5F�>esT�9J�D��N*	�
�@�fJ�L
Z4��h��_WRg0�;U��L�lE��ࢆ��vB2ß���������<ݑ-(*��Q�U�����i*���f8V�V�?輻�3��8��,�?�ġ��G3u�׽pm�����m�Y<�{0M<�G��Szu������[�9�`/��l���rj��B��Z�.�!��+L��Xg�L>k�_]�;����A����!ZB:V��F���>�E���{G�]��2�}��XSԍ)�!��7�&A��Js�hXB�V�-�ז9���T�i��\���&Mi�l�����&Zag_�VU�\����g�ؼ5�|vV���U��dRݮ�qgJG��=6&͔^ᐊ�[JJ��'<��r2qI�!~8
�'_,���{�K�0u���51��`�.��􋏺�o��b�Ƭuc���������fz���ޟi��$<�p��j��$;	S
7\��KuSm���E��
�ɓ��$Ja������1�-�p��?�0�4io�
�bdl=C9�_���m�������)
�'"�4jz��yb�a�B)����7#s��CD�{E���e~���YױH�z=_�C���ZWv�\�a��'X���Eܗ�S�5eCWJ뢅��b)Q��l��x�fKF���ev����r��
�9��K�jN���c�鮕|w�9ڔM[��C>��a����B,�[Q�ZB&���()y����'[b}:ҥ �LC� \��Ӛ}��}�
4y��ϱ 2۴{T�_vw���
=
�+*6b����HwO�!�E���]�����vj��p��b�.�4<�t�[��O����
���oNͧ�Ī4?��4�.����tw��)�zG%�Ք����8S�J��9+=؛�̛�=��g6\��fu�DY����t�(�H��g��
��M�,�]���q�1���pp��ـ�б�H#�����۲�><P��Kl�қ���n�`�Z����z���Ɨ�䐰b��P�g<�*�09-HƏ�ٶB��Ȥ��K
�ܚz T��<\���	���{ґp&$P:l����갔�-� '�֦N���{���L(u� /	�"�6S�p�WH�p4p��\DgM�b���!5u�(��Mt:�F��W��%�Ai�Z�	�?}5Žh�{c��E"O%���9\�Vs��J�A�XN~	n.)Y=ˉh8!	W?���&�g�����F{T�
]g��-�<K�O�<<+�����	v�^۩ecA�=� ���[�?
t�o��=$�Ȝ�=Ә��ͧ���Z�4�q�߬q�T�jD�2\�9����D6�0[�B#�D�9���ˆ���+��ꏆK��x.x��h&5�~A�{��� uҔ��fRC����
�L��c<��F��>���.�E�2kvt;PAo��9�9$�>�������~Bu'�Q���O�|�Y����"[e���_bM;(�nO����mS��]�
t+��&�,?y��'��E��c���/�v�k�#!Mv��a��ᮞ����^��K��F�y�*>�f7흝^���1��hx��/:��|�Y͗p�#EvR���Ɔ���ooo����
h�락˪Zm�3����tq��06�f�el'a�I�����ц�Z%���'ѫ�7�_0�S9'����R�؍
*""x�a��5.�)0�5L�,��z�rz������%��	��D�0Jz��A!�C��kϬ�V�9[�_ݺ������ȘY��He~6�]�WW�Y���L[O�����O?���pc�{�}:�nkcp��"�C��UT��o�w�6�{�ȏ��t[�e�3k
��鳿�:(v��{V6.
�y?�X�%E�~k
�T�:(�nWz��zt���Q�T��&W���.�g�/�RCp�(�����n� ��{yq^�������^�����p,ٵ�����UA��il���Fs���e:m=��j��j_c%L��;2)�ZW&Ŗw�'\w���]]C�3�CY�����|~>�/X�-�tf��~x"�B�j���f�/1;A-)c"���ɝ\˴OCX��uN�q��<7�	�������>s��������V�vl�y~���0��=�weQ�eͻ��b3Pe�^�jy�AU�r�.O�M���\,$׏�n��6z3W
B��`d��� �߯'� ��IV��i���4��UfZp3}\��*����6\LX��'�>\:��-�U:0ѷ��T��m;;<_tܦG�&rvR�V8���j>꿧�Vfd����?���-��]w��4t�[��҄4u�hk.��fhT����Y]*����.P(h����=�xG�j6B������M����j8~=|��5BL�:І�<�x��m���.�@� m����������u�k�y<��ۯ�g���~g���i�1�^������P�=���΅�����o]Glz��!���țY�
.��{�*����+䇝s��}D+l��$_͖��v.���c�f(g�Mq�>'��‰!sG�.r���|g�iW��R�X��+J�3Ül[g@ṕDP���r͐�.U���j?��M�/�{
��2p�_y�[�~����2<
���+��/�wՄ�Ҿ<����/����0���W���JM�G�z������WdK�
Ge���:@R�}�{�|#l��-�L3��:��ܤ��'�v��A�P���x��?a�DDS�t��P츕�r�6�#�$D��\�G���58��k�����Zo��M++�i��Y]�Ё�d����YYSY %̹[z2B�N����<#����!�k��NO���W8�_�W�b��X�Eb��g�߂]����%�-SV�fU
�2����ECwm�3��OZ�0cA{����Z�6��P���Z�����������:�k�
(�[���d�8�:����ɩ{�5G{a�fÌ`����pW���9Ve���E	P�;
l	n�p2&�9EDl`�yuO�C�{����t�l��p�`�EUF�]S"}ɓ'��)�{�UC\J
�WN7YZ�f,!OsV־}r���P6���(ʵ6]�X�*N�o���c��gi
;hWx�k�g]!�D�m�ph��*�n��EN�$�B�5E����Kql0�rSA���F�#s*�-H�����2m�)�n&n�aJ��
t:X��dE/^������'�Md+�;0�a>�r�
\��B].J�0Ĥ���C��IdzM��p�t�Q��@��]��m�0���=Z�Vn�f�6d���X{��	~�=#%i��NrJ�C,3-��!�9����q)e�<q2I:�c��H��	�I:����x������߱�Z�YE���퓮��=i\/s��%n�W��F��K;�6��.�j�伍�;x��G3����@\R�1d��b�$s��*ټ֖x�q
��u/p�~��t��$^泠�-����L�`p&�>E�N���\@��C���
�u�c8��-�,���C7���Ih�QpZ[����%�����ϭ��79�:9(,��ؼ��fC�� �4��5�ǎ����C��M&�/�XZ�g���P5�fhE~ًT�^l��0�\�Л$�\��n��()�gJ�&��V$�EK�Z���Jz[����=���f�Z�N�O��\ �s4�;�� L�W����X�/+�3��]���<L��v�!cS�@���̒���MXP&�w�)3��~%7D��Jy��K[B
l߉e����1=�s���3��ϚhG=g�g&.�F�L�
z�'�!Ǻ�hI���]J��ߟV��\���q��I�i�{~��<1���p!���`3M�
��l!�3f�P��۲u�('k�����w��/A�X����Q�ʕR��(��h��S3��
,�H�1�~�7�S3�f&\�1U���t�h�mR�q����؜ݒVr:=��&��q�ڂ�"�+��O�''E0�������.�'bA��OaY�t��)%��J��*]���x�bo�?mzbE�/F*�ӑ'�i
�f�I߷V�R�2g�S�۫MOS����>י:ut��~UV�����^��S�[��l�c0��^��Q�i��,���(
���K�Dn�����7�$�O���Q�9�?EO��� ��

|H��3�Ʉ�|r���M[����c,�@Y������u���^���G�\�u�c�D����,��H
����Q��8��B��� ��	LC��'+C����ʀ�.�\�6|0��j�I�d��\�z˃E���P�j����s�ڰe�	l�3����/����
�/!^���i��A�!*�8�\��dp�"�&y����p1�>0p���0��t� �t��,�{�OΔnl�M����q#	^*8ݦ�KN�ceo���<�(�֍�>�+	Q+�� ����h�o-yǖ���i?q��v�e^-e�w�kY@̓Q)����T�3�z��z����������vp�q8{�
��H�F�l�[���0�4n��$��r���$��oa��F^r����,�v�Qoz��|�?�e�c)?�4W������m1���*���q�i
��wf�]�*���ҩ�^��]V�q��h^���	���b>�j�G�j��Ls���n}<y���bv�;A}�Sz`u���`q�1��
Z��NO`t�WNV<^�҅�A��w="?B��A4�j8�Q�w���p+|�
^��C�߭M:�I�p)�s���
����t+�}�I��Z�큘�������!]�u,��%|�LQ@I��6�hcL�va� PMT������g&.�䈵>�(�'���e8��'�^"�@����m���Cn��֩�q�ebcD�>�w/���j*���V�gnonv�7�B̎V��d$J.-�nio
��#�[Ly�V�80�t�
!j�rw�g'�8bO�"谾�W����к�Vڷ�H�|\�҈�:47:b��/��)���
�pf���
�˅m
�z��h�9���\ {�
�%�Q,P7Ҩ9�f����R]<���
�>��u�
��Qc#7V��x6�Y�(ΫQ��ӛ�k�s���zyOq���j��5h��2!��K!�56��p�]'gۏ�צ<�$9E�#*��~�-���ˆ�SL�#��i=ܵ�l�ȬC�y)�{e�T�MûaNN��N+I1�,m
�ΰ�/7�Dº���6)�t�7h7F�If_�SK�����LÐ ��%3�,�U�
��j�
��Ც%�
_e'�S,pF]dZn�,}� 5�)�![FY�����ހ�3���3�~��1����d'�ϫk'��
�0@D:C�٭����|��m}�2�M�^�Z�
@rn��$��)G2�Tkr��mvNt�݂& X�t�`L�kg�>�T�Z^��w�V�y�.ǽ�K�H�����$��15�S9N��3@u��dQ�TV4�����S}J�9cu	╵�J�xf�'��m�(���gߑ��vr;�膎hv�w�,��lr�U�D�h,����`�B�ք�������a>h6�#S�A�L�ؚ��<�ܥ/'=���VKQ9�Q��"V[��o�����i�fWb�ic�(�<�wJ���軨v>:��<A�e��Q8��~�J�[�Z	|����}Jq�ܘP^���������3�DIF��]J����on���Vv��_t���xԮ':��ۃ��w����f�i۫~ԫ�������GX �E0C�J��mDkY�⤆���S���i�yv���&A�0M���6"�>�B��0Н M`�-�J{J�Vs���%��[mo۶��_�)`����f^�M����M��!Zb,��(������/�IJr�E�</<<|�9$s��evu�R�\]���ѯ�i.��5/6%[���>���g�6���6KZ�O%����Yɔ�b��d��*���&��۔	�%� �g4�h%h�Vyl$�|{�	��(����^D$J�,��aa�L��������p��@>�#�V̗EF%E�J�1ji��}�������o:�<�%���A\�?~�����߷�ke��	��0ߠ�9_��@)�0e���`H�	~$Vs�-9"9"I�$�9��O��%���}zs�ۇ[��WC�Gs�l���H��,Ih~E�*�<�Xg��֫���_`ɳˈ-^��%}����K
������*g��P����V�e�E—xɓ�%@Sb+��%�W֯ 2me�3�Q)�φr�(��6���DR���KE��u5M����$���$��(�*�g���5){���a�-E���v��<�a+.I�Vb�^On�)I�c(ƴ:̗�\�|�FN��#Kd:E�ɹ˗�$�
U)������ȝ�t�&���谂���`v�x:��%zE*瘁���~��/LbI
���g��[��嶛��Ӳ�t�(h���[�L���>���>�L�SZ2�/@Jդ��t�.���h⭸fO���Brl�`K,��cN�Z���=�?͹����"u/�	�Z�r��
6�f�2����;  �&��9/H��Ʊ���p5X�b;����{�f+ш�W�P�Wpf��2��D��M��l0>г{,IQ��Bv�)�y�����ދ�6r���#�8θ��"ٚ��=תq��g��B'j�xKF�jO��KV��/��;�n�v]Y�t�Qb��#g��{T��K2g�G<]Fx\�Q@
�f�l7p�v!T
U{-n�윇f��.�CO`Z�
Dq��{H�1D�b��l��(c���}�hx4J�ݲ��q��W��I^�t��G#��JHh7]�~��(��SK�Y��������M���*Z	:
�j��Q�����1�j��S�����֐��Dz���<A�W���U����e?�3ح@���gԪI�-<>�-�w;$�Fvm�`�����B��W���>8�t���ۻ
�]ڹc�� �uI�P�c���
,��c�R~QA�e�+O�g��|R��Bp��?9;;A����Z���t�q��?��o׸ou��?A��4(�Þ󀮋EG�z�7t<�Uppk���R7�WjuA��k�AH��K��/�U=�V�t�u���q-ZP���?7��_o�:�5�Q�B�<�n������Ί���Ɛ�
���r/����j��Y�h�5,W�MySu�ۭ'�*GU쁹LY���j�:�7ɜ���Y	�6�&�M�9���`��.@�=�(Ư�z�fs��\g]Yy�Q�I�|*�k&�X_�y��sb1���i�S��&|�;j�:&�[�G<�i�S�G.�4��� h��)н��/Q�ϼ)h|�]B��O���b�"�BZ�H3��Q�7���8�=�iBe�^��?�4��,�
=/��tl�-y�\}���&7��C>ߕ�[��R��@�:Q�l�[��:��Q)�٬�,7����Ke��n��S��9�Z3u�l�]��_�TA��$wqY�$L��!��`]�an];j�mo�<����|�HI���#�.X9Aݼ4�*X��^�CKS�^+�[N��	� h�i��Rc��F�Gp���R���,#��/� y<Ju��#�\V���#�:��g�͉�r�D'������<A�p.E��>W��!ӗ&1p��g�O���e�:�ot�<��gN�|�hq��'�|���<����Z�	��
p�'t�b�$)�}��J���w�ܮpu�cSM�I��L_��T����l��M8[�V�0�N3��N������G��[�Հ6KOz�E�9S�9�]���/:svP
Ʋk��"�9�?�dn.92f����8#�x���K�l��X��GҸ��R����Y���6��i�K���rb�7G��i�FkKO���	#G�m�� ����IOl\:�У4��ݦ�E����Q���h�Zi�1|y;j��b��%q]
tng߹W�5?�2�q�&#w��;L)����U*<�\�f��6%`��wh�D���9AѢ�l?{�sno=���Ѿ���){%�U��'27A8��/�T�<����2A����$<S��/�X��2�|��-�_W�!� k�[g�3�ٛ����L��K�����`
�S�4��ݝj�[7�B�=�;��j����+���:3ԣ�5��eӑ^�P`�%/)��*]��/�x�	nI1����e�#��_Mꩆ8��ϾC_��4�3�-��T^��iֳ����ُ��[����V�3������v��ׯ����S���� 䛨�VV�NIJ`!4����.4����`�﬎�W%6���2SB,-$���΀$�^w3P�����!`��L�9�Rަ|�O��Y��;k��h\IU+�+�Dzx��QRBa���ir��Ү�!��V.U����/�"��I`�������lH�N���7U�{u?��;�$�f*��e��<���=���߯��oϞ�$'�w��(����赔��m2b"�JEX�A�i���Il�'�_D��gԓ| ֋�%�ݬ6�7O�7%�_:Ev76��d2i�_,y��]�	�ϯg6���s�\����3�����o�B!��X�գ�c���/V,�ߜ(�k����^�W����j��S3�v�Ut���Zu}aVr2>��}�^��T�c���oɶ����O]N
�aխ[ի����wQX�����R�-砷�#�k��ǯ�u�����AF�L��K/�D�E�V7
wW���T)]��t�14���S����*��H�������_�X�)�:4�d�"v�Cu��x�uㆈnkm#G����|p��
���u	J������F��e�{ʝ��7�Al��_,VT�c��A��r+�QI~�2N�۷=���|�&�m��@�1�=��U�?�Nk�.�	RC�F���$�F�'����Z���ǥJ��{��~�a��닭��M�|�n����J������߉���&�8ᅩՏ"��Բ*wTgP���G�Mo�y{�]�y��o�,��v���?{)]K(�ߵ�_
3�:]�2�;j�Jz��v���X��b��˜?�f�"��7j!����Í��JLJ��[��=�s�T	ٔ�M3�q����6?�p��N@CB�@�,��Y��#*�9���7d�5��tQ�%�:$��cQ��[�")B�3�s��#�P9��V7�(�c��Xe����|��RJ,.-���V�+�PMAh�3�Kq���˔�%�D��	�0\�	��"fIy��J�y$5���\Ko7�+B��@Rwem$pO��ڞ����"T����F���>��˵�ۻ�|̐�y|���$v�R�Fu�����tTT~b3�1.����!F��\�����#cә��(�ܠ�)0\y�e�>��
�������uCLg�9�xpV�����*y�Œ��I6zi�z�Y��� $:Tps3,	���f<8�ë��+e=�)�j�ǸX��ߣH BBI��ow��
X@����r�Q/`_�x��nV�������Ҟ�9_��R��M�'���j�����W���I�$��E���Qu���K劵H����ՎgEU����!���Z`���r�ņJ���hX�Z����a��OIZA?M���i(Qy��}.M���c���`�A(�Mw���b�z�-ɭ��,�M�m��l�9p�ګs|�
�`^8��ӉZQ
D�V�s�B���*��u�gK�΄>�Kj
*��'��A,��.����?������|4ϟ��BS�Ɛ��[pZY�C�"�\!��q�4��I�!6��k����&�� �ܟ��]�g5H��!�t�C��h��#H�� ��6+�펊/�G/�I������1���C�+7G-��X�Dj�����*.`�u���[Äk��V*@D!�`��2QS��ŏ��XGw�,�5����']+i-�bKd�gZ*ϒb��'�ʟ�D`Y��jd�c��S$� ��2�D�
�_� �%KN��-�^(�;}�Q�����^Y��U�rw:]�=%��N{�pͿ���V�V����?�mdD�+�opГ?m�&0.�ɯᨿ���A�
���� ��J�bÌM;�u��Mޡ�-e%�Ƹ�^�G�Ɇ�L��`M��r�#J��T�|��z�2
Mp����el4�Fh=s�D:ާ%��1���i8�n�'G��O#+�1Aɒ)�"
��I!��fؓ�6�z�:e�fq�����IN��8,ː�HX3�L�T$]�������Q���Jɿ�SU�~���]��{WSX|[�r��$3DF��guT��v���/IJ��#�����Q�&w
z�8�&��x�z
;�h�e0lF�'$�W)x�Qc����c�VD�O��d}��#�c���(ӌ�7@�ꌱ'�!��_V��ܥB�����/��`x�n7�y�W\	��2��-v��$��ʔ�q�$�+������/��c!�9�p3��2����o�d��0Es�Ѯ�{I��>,ݍȄ1��� �nj�N����m��#��t���;�o&��W&հl�9+��x/k���Lw���M{	���y��[]��Y
$����.�z����K�R �ɏ@Ρ*�&1����L��%��H���3#�n>|�2��;}�V�"���
���G6G�9*<�tl9��ʥˈK�n�M�6ujX�'-�3v�ۑ�M���,qF�>�7�<e;̆�$-:F�1�)����3I
�?�!оU5�[xx�E��-�{�$zd4R���l�����aT���JJy��͝MO�0����It�C�8G�e�v�:�i���p�_O��N�.�4��-iZ��������ꅕ�Sc�@�O^۝H&M	b���"ha/O���0�l
3u�r:
��[=#\����Q�f�-2�%):س;#)��`s�B����b��YK�|+�����ܙKߝ��(��q���)NHz4]rt_,�	�FI��Y���U�č�d�GH�-#�ώ��|�%h�m��.XlÖޭ�ըhb���y��{3�z�T�YGT���+����Pe�^�R#ѲЛh��������>V�xJ'��o�dX�5�vI�'ܿ�&���T�4x��!ݜ�T#����s������/�rs��$��ś1�����@�ޯP0���7�2(���~w�	�8N���ь�@��7*�j����[�KHn� ���A��a�W(AB�.y[Zb���.4��<PB��f1���8���B�(�mF����d��N��v=�3/N��;7��i0B�T0���0"�I���ϲ��j�����l�낓�F�����A����N�p�e��ko���{�k
��;(
T:&�+w��X���Эɕņ�$eG���;3�K�(�~H�ݝ������ׯ��\�ür��ř̹s2/�"]-��U5E:GY�P����#O�?�~�|,�#fN5OK��"�N,��A<�"�s�v�s<>��:�N��<�j�*'f�sϑ�L���Is��·���3K3�!.„�Ҝ{.<�R7���JE�8ce��H�M,�*Vq%
XE��B<���݈�C.
N�'s�?�i4cY��*�h�'�(_e�V�4��H��M:�v�Q����ߦ�	�UQ𼚰�Wۚ�p&�3Ͻ����)��`�Ƚ"�����/|���\�IRp`p�'�k�Mq|5C8��E�i��с?�x���F<E����_�:�ܣ�>.]��5����aO��.�~��=p��A/�M�9Q��jL�g��ns+���8�n����Q�^��J�U�e|?^G�>h-��pY�G:�3��*�*x�*����V=K��'���f�d�e��F�t	O�p�n�6M��P@��/�����-13�}���^���~�
P����`�����留7���;���Pۚ���ϒn�@o�`�F4F�n�������w�rdI�JI��8�3'/B0۝�_�]-ߌ?��G��	��9*p�j�뎚�P���~hj{�*�ķQh�\bh�p��� ����{x+z�*�yzk�Է�!�
q~U�*`�W�8��h�O�dc"���R���d������Ԕ\;���؊��k����˰~ڂK�e]��_�>Q��9(�:�,}5עL1b�iGy\eѓ��������xrt3�G�'g7zx�^0
���tx����V>���>��t9=��]LO>�Ǒ�b�7� ���y��.�ф�W�ߏ�&��H9;�^� i^}J��d�+q2�y�V�df,X�y�`_�
��ɀ��Oi��1�|K>�%�̠�zt_p�eԋnJ��Ǘ��
y�}8������KT��l�澋.q���~C�-�}�6ޏ�(�������_=T���A�lʤ����iS��F'��Q[c"�����e\�,K�u�)��J,�2>��g�����)M�9��������"0�7�~>�������v{-����&-��G����m�1�C���{)'�(�����B@��Wɇ��x΋�Ҙ���Ꞣ[�0 إ��I̙�T��B�)/����
_��4�T�%�q�����p΋�~�AE�H��4�
2�9l�E&�C��gL0�n��#b���=��B��<����
^A�œ���bɨ�B�Y�,&����1LhXo��Op5C�!A�0��p�+��D�P�?z	k)��U/��`��7ʜ�D,<ž���W���8,wP�N�«��m�%l͂�J ����>I�&�dx�K](��++<ʔ�UY���
Bƾ��e��b䦳��*��>n&me���:aQ��!N|k���qbNv�>?��Y�%0��oG��Մ^*��p���XW��U�)|2����:rC���߂��}Ɠ;_��i���wU� �u�h�u8+���1��X�Cr�фOGW8=��9��ZDa�/e���:_mL�o�I�`HY�"��>DH� �X��3F���~�
-�Hq�-�V�(�o����9m��L���=K��Z&����TK* ��f��W���3�k���uU+�,4��譤bFZ0���Ux߈<�C���{4,�7lP[�a_F,���5�P͢x<���R
Hy	�_?�&�!��,�>l	�[���
N�.���
��X[-��7���8
�[��!��M���L�z����T����b萊@B26�7	����fy��%ĻFd��qi���[۽���U�N�v�#'�]�4��<��)q�a(��}ɋ�i��;���9�E�j�n=�Y�>�T�y�W�ה?��.9OxR��bԇa�owȃ�^��y_���45B�P>�`�x��k��vVE;�#�
�v!'[��U�zW�G@I@ɣL�X��P��tb-TvM���4�)}��Nj�S�ۘ��j�^���$����@аZ��4�aT'6X��3�ud�B$,�܄��Rr?j(�Y��&>Y��2W���C�F�#뎚��?��}<JLf��D�I
n,�L��B,!�۲�W�����D�F��N�\wԷF��]� ��=��%���t�Glva�ȖvU�e��p�YPc:EL�Q3����"B+�����A�"C���*�d���U��CN��Q��K
�*Wh����-z1����:4V��h�S���P( �;�2Sh����7��ܐv��i���dy������W������-a��w���m�'R�R]�|�R�,����i�j�R`yVǕ�
2jO<?�Rm��he'��mx��ٛ.c�9�7+�.�KeoY����*x�|& ��ܜ'4]���a��3z
�-&�g�i����=���^8X�QU�=8(CdP�Z*�K��ڤ~+��
���}�/�!!|rn�9���Yv�H�{�f�VkjP�������m{p<����{���7�/�)�Gg�K��R[T|�)�2���PVN���/Ho�����Sֻs�Uڣ-�׿�`Ebw��N)Qѡ�	�jY��9�`T��E�|���U��T]/�÷&��WS����,�To�
�M
�ݐ�2���Щh����NIe(
G�gނ�;
�S�u8՚�p���_��vs��#RC��f|��`�ũ2iAXZ,�Z�1�@�͠@���0��6�R
4
��W��x6�a�\��/��vGB|%���=����V_Y�*��t���Z���������nQ�'�~	T�-��&"��H�.��sQ6l�"e
�]"�R�~��#T잚��a�n��|�\-���%L,1Yⅆ��C]1���%��t��Q���+����h�ن�����dɴǼz�]'1裘ȅ.ѐ��H啂2�Y�elM�U����D��y�j��I��W{g;���4�G3�O+�]� 6"�l�a��+�Y ��$�zzoO�G�ݍ��+�=5y��f+���0X�m~�2�uSۤJ5����^�=ٰ?_,8�(��6�щw���n#ׯ%:]ߝ� �⬲�P��b�烍#Gq����T�pf����=�����dpxpP���|^ɻ��.�;3Zt<U}ᢐ�	�׉��R�*K�ĸ����l4��p
�O�O���v��
��?W�@}1��Jg�v��J��NU�\f�P+�ș$0�^�ma�(O���wL�R�Z C�����[Ş��*	X��y����K��gd�Õ���}}��O
�I�,_�2xj�jVڗ��
�ZB�F�J�D��k݆��y��b�I=s��j(��X��`�����.H�1`e'-�VF��������1�0�����t߹�'F��p��,���#�e.�e��ޞ��@|t��	�t^E�Ϩ�`NK��y2=Ǡa��o�7�Z�Hܘe1e��g�!�Һ[��a+w�:,��l��W��m����N&+S������Mpo��-�H�ʴ=��<��0`D�\݆:�����'V�{����9��c�������0��L誘n,F��~Y�B�ᩑA؜�tUHZ
��$ь݃ܮn;nӦ-��:�by��
�8�=�h|u�zg�a3=24l��;ڍ{�����
G\B
$��j��cvs/�3�(�M1�0o�(�e,;�:Գ/��
��7��6���Y2�S:Ź�#!����_セՉR�}�I~��{Ŀ+*Kǫ\6���
k�¾�?{�O)A�f?U��7��i��mLOt����v��U	�6{�������%a�J�A��c���1+@�f��K�)��F�ym���m�LO��9V��k7��31l�~���Գ*���_	Ei<��b�J�dIEA�o������	{�N��b��!R.@�b�.�W7�v��UZe�):���;�i|�� 9ch2���F�R���ϕ�L�?PZu,��$��v���s�2�ոw�ѥ��D<�Gt�|rCl�TS���߃����>�L�0����>�{p=>�1���P��p^Vv�Xa���D³~#�x��сyEʤ�ck����9j�X�ψ�P��7�|yrv:���?��'W?�]�V�<,k����/�p�_�Nw\�O:��Iߋ��|���Sמ6g�d���yB��/����vcY�k��r&Ḡ�sdL>I_���7�\�j�@���S��D|�*v!U1
�P�V���X�����;����$�J�O�8��Kf���Y���M�a��M�^���q��H��r�d���_�mw`2mmՊ�C����b�5�����h�N������(�ѭ`�ʒP,��zjE�
��K��z���/_q��؎o�.RAB0�;~�WR����y����`��]$]�pY��5�����6��X��?�C��k~�H|֑�(6�}�������ɖ�}��t�J��j�qc�X����k���d�W���ۢƎAH�pi�w�y{����`'B��k;AYo$�F2����,�To'{�=����l<��|�Ӈ�>8o�@p����o�E;c��yO���V�0�a�0�I�N�*�ɵ�R���\XF�G�=�������:ww0[	+BDP��4@����3�et=��9E�����4�蚖������PF�ZG���ߤ�ډ�-?Q���0$�Z�⓰�j�Ċ��P!�T%j���8�u~A�%~�P҂.\Ûբ2m�iiY
{'��n	i�a�l��糧�~����8�L�]pnJw��,��m�2J��Ic�25�D��I�tB�b�k�,ѝ��
������
������]�NI~��w���"����lb�$HĎ��@��KϦ�#Cci�a�p�dϭ�N]�1$�����]�˩sN}��(����DG6��_]�ʵ������X3������-9W�Ġ"@�*����ƴ� ��r+�)��]��������0�fh?��~���ӝ�nHц����\�����hU
ׄGYP'�~�����^��׾}��j����"��Y��Ц���eZ��~��E�W�̥ꗪ$�h�kR�"K:|Awٰ�/�m}�MN����4TNIv�WY�
�%c��30-I���2a�<5V�&`�A�R�G�ڏ�ڡ��n�D6�ȸӷ����4|w��Q��0����U��Np�q���'(n��t�4F��a�w|�Y3
�x��dsީ[x��0X�<<r{>ش,	Yp�p��ѡk2�
���axZ�������"�J��'��?�Ѕ7���"?�p^t�|����@(�א���u`���z7���ۣ����ɰ?��	K��.��b���;��z6�/���J] x��آ��9�;h��ժᾶ/�Z!�M�H�֨_�L	�	��O�7+��X�ǯJ4�X��:Z:ݴ~@��'Hxtdآ�jxt	{�M�װiO�	�/���ufb�JrK$Y��vBr�d�6�n�6
���y�N��jv�̬��iF-�CVc.�lr�Vָ!\V+�U)�hm�;n�R����^���!MX].t4����?��~�w�r���Mx�w��tt�pH<4t�ܕw {ur^I3�Z8��Z��Z��K��S���@�z�y����O�j�,XP�y(R;�2g�mU�Ʌ�T
��-Ϊ^��x�ڕ���s��2Q6�P_��o�ߞ�w�	��׀sz������3��R���h���~a�q���M������r\.��mU"��PJ�_V���/o*��'{xz6��u�u*V�
/����4��R��-��v��	:�z���֚�J�:$��i�ak�݈�X2��Łj�1�]�(ݝ
��~��#j���ҀR2P��o�)bHq~�bh�jA�a��热_��Iq(�������'B�O ���Ei�m�7ٝ�|�x�c0cB+�)b����k��b��o�戤a�E�u�������
��TE�!���~t�i�὿y�	Iu��Yf��E��g�j1��C�����(K�ǟ2>�C�v�O��?�-]<�
����Y����l�qLnf(�|f��B�/9�:`�B�Nn�RtbX���|XB;jCWX\��lL �i�BM�u�B	���K.�P���Q��ՒAy��òŎ��Ay�����X��/<�����B��W�k�Pꌍ��a�}@���fs"�#?��e*�~m}�E�6��}g1C�'�ܰ���tjg˥ll���I�-$�JF��p���A�l��v��T](�%2ُ�*�V�SQ�h�x)ŝ�"+�i5Fz�D�8�y��

�`c_R5i��Y2��e�
�4Ѷ��f3D�0��`g�%
�w�(l壻�!�&}e�i�U�XО����;	�>��%H����V9�H��7^�!�em�#�w�j������V�E@��m��45	!֜��	�o��P�wN�i���lx�t���s:�QL�+�m9¨A˕��R턛Er��Ɨ��	����^�f~��^��m����e�דr.��e�ϟ�.�gx�5���b���P��n�f��:�p��m�1���y4�?8%)�`4�ĩ��SH�)��)��|����4�(�^�Q`�%\q`SC:�7�q�R��:o�-/W7��k�C��ש�P����	���$
j�����|:��Ɂ�&�
Az1�Ů�T�p���ٸ!�M�9n��d�-�a[�7�;ʂL����P�h�Y�޶�\WJ��%��F������&�wN���tҺ*�.�Fo
���g�G)y��EG=��qO��51������tB�^-o?�+!��d�{�I\ql�1�O�0o�u?���$]�Z������*k �S�{���!-��|�))F}?,k��1�c��T��6�/����-W�	
�'Nz�ͬ�[T���Xw��[am�;��3�9+���	7.��9��ف
]���1���D�OΤ����T�^}4�Ϫ��3��$ݘz�)&���"��+y��\��u��������5��]�D�l@»�_����9��O����<ˈ�&��o�v�+�j��(�"�ng�ސ��G(��"]$X��2N$B~d঑�\����t!�D����,��H��{A�����x�η/�D!���h�x�&�ż����>gj0�.{�,oD$e�@����$�o7H�d���"�J�w��w�y9Z"�E��iײ��q�$Kȑ�蒋9s��"��Iq�k5��0�Ab)m�'��!B���!Ge��cv����(\n��|�c
:�,��<p��6�Qt�q�[f)��ٟߜ��s�3�� ^`�_1�ݬ�b��Q����~�z@��2�>���V)0�CR���I�@�Rg�-�"n|�>��GY[]`���e�9�� �������	��pW�7b �8zja��en��i}ɦ2�ֻ�r_�O������y�Z��#�26�E���tb�LN��e=k !�3*�NQ���\.ǥ��Uc#S��Ws������bkIZjX�lt��!;O]���8�-ڦV62��up�<�+��-�=0��
�} �����.�ʴw	6� ������_��;�S=Q��K�bNԿ�w�GW@������)��S���La�3s�������"���ƴ��q7��€n�NR�#k-:�{8*���_R�.v<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#202124" fill-rule="evenodd"><path d="M7 2h2v12H7z"/><path d="M2 9V7h12v2z"/></g></svg><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><g fill="#E8EAED" fill-rule="evenodd"><path d="M7 2h2v12H7z"/><path d="M2 9V7h12v2z"/></g></svg><!doctype html>
<html>
<!-- Copyright 2018 The Chromium Authors. All rights reserved.
     Use of this source code is governed by a BSD-style license that can be
     found in the LICENSE file. -->
<head>
  <base target="_top">
  <meta charset="utf-8">
  <link rel="stylesheet" type="text/css" href="animations.css">
  <link rel="stylesheet" type="text/css" href="local-ntp-common.css">
  <link rel="stylesheet" type="text/css" href="edit.css">
  <script src="utils.js"></script>
  <script src="animations.js"></script>
  <script src="edit.js"></script>
</head>
<body>
  <dialog id="edit-link-dialog">
    <div id="dialog-title"></div>
    <form id="edit-form" action="">
      <div id="title" class="field-container">
        <label id="title-field-name" class="field-title"></label>
        <div class="input-container">
          <input id="title-field" class="field-input" type="text"
              autocomplete="off" tabindex="0"></input>
          <div class="underline"></div>
        </div>
      </div>
      <div id="url" class="field-container">
        <label id="url-field-name" class="field-title"></label>
        <div class="input-container">
          <input id="url-field" class="field-input" type="text" autocomplete="off"
              spellcheck="false" dir="ltr" tabindex="0" required></input>
          <div class="underline"></div>
        </div>
        <div id="invalid-url" class="error-msg"></div>
      </div>
      <div class="buttons-container">
        <span>
          <button id="delete" class="paper secondary ripple" type="button" tabindex="0"></button>
        </span>
        <span>
          <button id="cancel" class="paper secondary ripple" type="button" tabindex="0"></button>
          <button type="submit" id="done" class="paper primary ripple" tabindex="0"></button>
        </span>
      </div>
    </form>
  </dialog>
</body>
</html>
/* Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

body {
  overflow: hidden;
}

.mouse-navigation {
  outline: none;
}

#edit-link-dialog {
  background-color: #fff;
  border: none;
  border-radius: 8px;
  bottom: 0;
  box-shadow: 0 1px 3px 0 rgba(var(--GG800-rgb), .3),
      0 4px 8px 3px rgba(var(--GG800-rgb), .15);
  margin: auto;
  min-width: 320px;
  padding: 16px;
  top: 0;
  z-index: 10000;
}

@media (prefers-color-scheme: dark) {
  #edit-link-dialog {
    background-color: rgb(var(--dark-mode-dialog-rgb));
    box-shadow: var(--dark-mode-shadow);
  }
}

#edit-link-dialog::backdrop {
  background: transparent;
}

#edit-link-dialog > div {
  width: 100%;
}

#dialog-title {
  color: rgb(var(--GG900-rgb));
  font-size: 15px;
  line-height: 24px;
  margin-bottom: 16px;
}

@media (prefers-color-scheme: dark) {
  #dialog-title {
    color: rgb(var(--GG200-rgb));
  }
}

.field-container {
  margin-bottom: 16px;
}

.field-title {
  color: rgb(var(--GG700-rgb));
  font-size: 10px;
  font-weight: 500;
  margin-bottom: 4px;
}

@media (prefers-color-scheme: dark) {
  .field-title {
    color: rgb(var(--GG400-rgb));
  }
}

.input-container {
  position: relative;
}

input {
  background-color: rgb(var(--GG100-rgb));
  border: none;
  border-radius: 4px;
  caret-color: rgb(var(--GB600-rgb));
  color: rgb(var(--GG900-rgb));
  font-size: 13px;
  line-height: 1.6;
  min-height: 32px;
  outline: none;
  padding-inline-end: 8px;
  padding-inline-start: 8px;
  width: calc(100% - 16px);
}

html[dir=rtl] input {
  text-align: right;  /* csschecker-disable-line left-right */
}

@media (prefers-color-scheme: dark) {
  input {
    background-color: rgba(0, 0, 0, .3);
    caret-color: rgb(var(--GB300-rgb));
    color: rgb(var(--GG200-rgb));
  }
}

input::placeholder {
  color: rgba(var(--GG900-rgb), .38);
}

@media (prefers-color-scheme: dark) {
  input::placeholder {
    color: rgb(var(--GG500-rgb));
  }
}

.underline {
  border-bottom: 2px solid rgb(var(--GB600-rgb));
  bottom: 0;
  box-sizing: border-box;
  left: 0;
  margin: auto;
  opacity: 0;
  position: absolute;
  right: 0;
  transition: opacity 120ms ease-out, width 0ms linear 180ms;
  width: 0;
}

@media (prefers-color-scheme: dark) {
  .underline {
    border-color: rgb(var(--GB300-rgb));
  }
}

input:focus + .underline {
  opacity: 1;
  transition: width 180ms ease-out, opacity 120ms ease-in;
  width: 100%;
}

.field-title.focused {
  color: rgb(var(--GB600-rgb));
}

@media (prefers-color-scheme: dark) {
  .field-title.focused {
    color: rgb(var(--GB300-rgb));
  }
}

.error-msg {
  color: rgb(var(--GR600-rgb));
  display: none;
  font-size: 10px;
  font-weight: 400;
  margin-top: 6px;
}

@media (prefers-color-scheme: dark) {
  .error-msg {
    color: rgb(var(--GR300-rgb));
  }
}

.invalid label {
  color: rgb(var(--GR600-rgb));
}

@media (prefers-color-scheme: dark) {
  .invalid label {
    color: rgb(var(--GR300-rgb));
  }
}

.invalid .error-msg {
  display: block;
}

.invalid .underline {
  border-color: rgb(var(--GR600-rgb));
  opacity: 1;
  transition: width 180ms ease-out, opacity 120ms ease-in;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  .invalid .underline {
    border-color: rgb(var(--GR300-rgb));
  }
}

.buttons-container {
  display: flex;
  justify-content: space-between;
  margin-top: 24px;
}

.buttons-container span + span {
  margin-inline-start: 16px;
}

#cancel {
  margin-inline-end: 8px;
}
/* Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

/**
 * Enum for ids.
 * @enum {string}
 * @const
 */
const IDS = {
  CANCEL: 'cancel',                      // Cancel button.
  DELETE: 'delete',                      // Delete button.
  DIALOG_TITLE: 'dialog-title',          // Dialog title.
  DONE: 'done',                          // Done button.
  EDIT_DIALOG: 'edit-link-dialog',       // Dialog element.
  FORM: 'edit-form',                     // The edit link form.
  INVALID_URL: 'invalid-url',            // Invalid URL error message.
  TITLE_FIELD: 'title-field',            // Title input field.
  TITLE_FIELD_NAME: 'title-field-name',  // Title input field name.
  URL_FIELD: 'url-field',                // URL input field.
  URL_FIELD_CONTAINER: 'url',            // URL input field container.
  URL_FIELD_NAME: 'url-field-name',      // URL input field name.
};

/**
 * Enum for key codes.
 * @enum {number}
 * @const
 */
const KEYCODES = {
  ENTER: 13,
  ESC: 27,
  SPACE: 32,
  TAB: 9,
};

/**
 * The origin of this request, i.e. 'https://www.google.TLD' for the remote NTP,
 * or 'chrome-search://local-ntp' for the local NTP.
 * @const {string}
 */
const DOMAIN_ORIGIN = '{{ORIGIN}}';

/**
 * List of parameters passed by query args.
 * @type {Object}
 */
let queryArgs = {};

/**
 * The prepopulated data for the form. Includes title, url, and rid.
 * @type {Object}
 */
const prepopulatedLink = {
  rid: -1,
  title: '',
  url: '',
};

/**
 * The title of the dialog when adding a link.
 * @type {string}
 */
let addLinkTitle = '';

/**
 * The title of the dialog when editing a link.
 * @type {string}
 */
let editLinkTitle = '';

/**
 * The accessibility title of remove link button.
 * @type {string}
 */
let deleteLinkTitle = '';

/**
 * Handler for the 'linkData' message from the host page. Pre-populates the url
 * and title fields with link's data obtained using the rid. Called if we are
 * editing an existing link.
 * @param {number} rid Restricted id of the link to be edited.
 */
function prepopulateFields(rid) {
  if (!isFinite(rid)) {
    return;
  }

  // Grab the link data from the embeddedSearch API.
  const data = chrome.embeddedSearch.newTabPage.getMostVisitedItemData(rid);
  if (!data) {
    return;
  }
  prepopulatedLink.rid = rid;
  $(IDS.TITLE_FIELD).value = prepopulatedLink.title = data.title;
  $(IDS.TITLE_FIELD).dir = data.direction || 'ltr';
  $(IDS.URL_FIELD).value = prepopulatedLink.url = data.url;

  // Set accessibility names.
  $(IDS.DELETE).setAttribute('aria-label', deleteLinkTitle + ' ' + data.title);
  $(IDS.DONE).setAttribute('aria-label', editLinkTitle + ' ' + data.title);
  $(IDS.DONE).title = editLinkTitle;
}

/**
 * Shows the invalid URL error message until the URL field is modified.
 */
function showInvalidUrlUntilTextInput() {
  $(IDS.URL_FIELD_CONTAINER).classList.add('invalid');
  const reenable = (event) => {
    $(IDS.URL_FIELD_CONTAINER).classList.remove('invalid');
    $(IDS.URL_FIELD).removeEventListener('input', reenable);
  };
  $(IDS.URL_FIELD).addEventListener('input', reenable);
}

/**
 * Send a message to close the edit dialog. Called when the edit flow has been
 * completed. If the fields were unchanged, does not update the link data.
 */
function finishEditLink() {
  let newUrl = '';
  let newTitle = '';

  const urlValue = $(IDS.URL_FIELD).value;
  if (urlValue != prepopulatedLink.url) {
    newUrl = chrome.embeddedSearch.newTabPage.fixupAndValidateUrl(urlValue);
    // Show error message for invalid urls.
    if (!newUrl || (newUrl && !utils.isSchemeAllowed(newUrl))) {
      showInvalidUrlUntilTextInput();
      $(IDS.DONE).disabled = true;  // Disable submit until text input.
      return;
    }
  }

  const titleValue = $(IDS.TITLE_FIELD).value;
  if (!titleValue) {  // Set the URL input as the title if no title is provided.
    newTitle = urlValue;
  } else if (titleValue != prepopulatedLink.title) {
    newTitle = titleValue;
  }

  // Update the link only if a field was changed.
  if (newUrl || newTitle) {
    chrome.embeddedSearch.newTabPage.updateCustomLink(
        prepopulatedLink.rid, newUrl, newTitle);
  }
  closeDialog();
}

/**
 * Call the EmbeddedSearchAPI to delete the link. Closes the dialog.
 * @param {!Event} event The click event.
 */
function deleteLink(event) {
  chrome.embeddedSearch.newTabPage.deleteMostVisitedItem(prepopulatedLink.rid);
  closeDialog();
}

/**
 * Send a message to close the edit dialog, clears the url and title fields, and
 * resets the button statuses. Called when the edit flow has been completed.
 */
function closeDialog() {
  window.parent.postMessage({cmd: 'closeDialog'}, DOMAIN_ORIGIN);
  // Small delay to allow the dialog to close before cleaning up.
  window.setTimeout(() => {
    $(IDS.FORM).reset();
    $(IDS.TITLE_FIELD).dir = '';
    $(IDS.URL_FIELD_CONTAINER).classList.remove('invalid');
    $(IDS.DELETE).disabled = false;
    $(IDS.DONE).disabled = false;
    prepopulatedLink.rid = -1;
    prepopulatedLink.title = '';
    prepopulatedLink.url = '';
  }, 10);
}

/**
 * Send a message to refocus the edited tile's three dot menu or the add
 * shortcut tile after the cancel button is clicked.
 * @param {Event} event The keydown event
 */
function focusBackOnCancel(event) {
  if (event.keyCode === KEYCODES.ENTER || event.keyCode === KEYCODES.SPACE) {
    const message = {cmd: 'focusMenu', rid: prepopulatedLink.rid};
    window.parent.postMessage(message, DOMAIN_ORIGIN);
    event.preventDefault();
    closeDialog();
  }
}

/**
 * Event handler for messages from the host page.
 * @param {Event} event Event received.
 */
function handlePostMessage(event) {
  const cmd = event.data.cmd;
  const args = event.data;
  if (cmd === 'linkData') {
    if (args.rid) {  // We are editing a link, prepopulate the link data.
      document.title = editLinkTitle;
      $(IDS.DIALOG_TITLE).textContent = editLinkTitle;
      prepopulateFields(args.rid);
    } else {  // We are adding a link, disable the delete button.
      document.title = addLinkTitle;
      $(IDS.DIALOG_TITLE).textContent = addLinkTitle;
      $(IDS.DELETE).disabled = true;
      $(IDS.DONE).disabled = true;
      // Set accessibility names.
      $(IDS.DONE).setAttribute('aria-label', addLinkTitle);
      $(IDS.DONE).title = addLinkTitle;
    }
    // Timeout is required to allow the iframe to become visible before focusing
    // the first input field.
    window.setTimeout(() => {
      $(IDS.TITLE_FIELD).select();
    }, 10);
  }
}

/**
 * Does some initialization and shows the dialog window.
 */
function init() {
  // Parse query arguments.
  const query = window.location.search.substring(1).split('&');
  queryArgs = {};
  for (let i = 0; i < query.length; ++i) {
    const val = query[i].split('=');
    if (val[0] == '') {
      continue;
    }
    queryArgs[decodeURIComponent(val[0])] = decodeURIComponent(val[1]);
  }

  document.title = queryArgs['editTitle'];

  // Enable RTL.
  if (queryArgs['rtl'] == '1') {
    document.documentElement.setAttribute('dir', 'rtl');
  }

  // Populate text content.
  addLinkTitle = queryArgs['addTitle'];
  editLinkTitle = queryArgs['editTitle'];
  deleteLinkTitle = queryArgs['linkRemove'];
  $(IDS.DIALOG_TITLE).textContent = addLinkTitle;
  $(IDS.TITLE_FIELD_NAME).textContent = queryArgs['nameField'];
  $(IDS.TITLE_FIELD_NAME).setAttribute('aria-label', queryArgs['nameField']);
  $(IDS.URL_FIELD_NAME).textContent = queryArgs['urlField'];
  $(IDS.URL_FIELD_NAME).setAttribute('aria-label', queryArgs['urlField']);
  $(IDS.DELETE).textContent = $(IDS.DELETE).title = queryArgs['linkRemove'];
  $(IDS.CANCEL).textContent = $(IDS.CANCEL).title = queryArgs['linkCancel'];
  $(IDS.CANCEL).setAttribute('aria-label', queryArgs['linkCancel']);
  $(IDS.DONE).textContent = $(IDS.DONE).title = queryArgs['linkDone'];
  $(IDS.INVALID_URL).textContent = queryArgs['invalidUrl'];

  // Set up event listeners.
  document.body.onkeydown = (event) => {
    if (event.keyCode === KEYCODES.ESC) {
      // Close the iframe instead of just this dialog.
      event.preventDefault();
      closeDialog();
    }
  };
  $(IDS.DELETE).addEventListener('click', deleteLink);
  $(IDS.CANCEL).addEventListener('click', closeDialog);
  $(IDS.CANCEL).addEventListener('keydown', focusBackOnCancel);
  $(IDS.FORM).addEventListener('submit', (event) => {
    // Prevent the form from submitting and modifying the URL.
    event.preventDefault();
    finishEditLink();
  });
  const finishEditOrClose = (event) => {
    if (event.keyCode === KEYCODES.ENTER) {
      event.preventDefault();
      if (!$(IDS.DONE).disabled) {
        finishEditLink();
      }
    }
  };
  $(IDS.TITLE_FIELD).onkeydown = finishEditOrClose;
  $(IDS.URL_FIELD).onkeydown = finishEditOrClose;
  utils.disableOutlineOnMouseClick($(IDS.DELETE));
  utils.disableOutlineOnMouseClick($(IDS.CANCEL));
  utils.disableOutlineOnMouseClick($(IDS.DONE));

  animations.addRippleAnimations();

  // Change input field name to blue on input field focus.
  const changeColor = (fieldTitle) => {
    $(fieldTitle).classList.toggle('focused');
  };
  $(IDS.TITLE_FIELD)
      .addEventListener('focusin', () => changeColor(IDS.TITLE_FIELD_NAME));
  $(IDS.TITLE_FIELD)
      .addEventListener('blur', () => changeColor(IDS.TITLE_FIELD_NAME));
  $(IDS.URL_FIELD)
      .addEventListener('focusin', () => changeColor(IDS.URL_FIELD_NAME));
  $(IDS.URL_FIELD)
      .addEventListener('blur', () => changeColor(IDS.URL_FIELD_NAME));
  // Disables the "Done" button when the URL field is empty.
  $(IDS.URL_FIELD)
      .addEventListener(
          'input',
          () => $(IDS.DONE).disabled = ($(IDS.URL_FIELD).value.trim() === ''));

  utils.setPlatformClass(document.body);

  $(IDS.EDIT_DIALOG).showModal();

  window.addEventListener('message', handlePostMessage);
}

window.addEventListener('DOMContentLoaded', init);
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><g fill="#000" fill-rule="evenodd"><circle cx="6" cy="3" r="1"/><circle cx="6" cy="6" r="1"/><circle cx="6" cy="9" r="1"/></g></svg>/* Copyright 2019 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

html {
  /* Material Design colors. Keep in sync with ui/gfx/color_palette.h. */

  --dark-mode-bg-rgb: 53, 54, 58;
  --dark-mode-dialog-rgb: 41, 42, 45;

  /* Google Grey */
  --GG050-rgb: 248, 249, 250;
  --GG100-rgb: 241, 243, 244;
  --GG200-rgb: 232, 234, 237;
  --GG300-rgb: 218, 220, 224;
  --GG400-rgb: 189, 193, 198;
  --GG500-rgb: 154, 160, 166;
  --GG600-rgb: 128, 134, 139;
  --GG700-rgb: 95, 99, 104;
  --GG800-rgb: 60, 64, 67;
  --GG900-rgb: 32, 33, 36;

  /* Google Blue */
  --GB050-rgb: 232, 240, 254;
  --GB100-rgb: 210, 227, 252;
  --GB200-rgb: 174, 203, 250;
  --GB300-rgb: 138, 180, 248;
  --GB400-rgb: 102, 157, 246;
  --GB500-rgb: 66, 133, 244;
  --GB600-rgb: 26, 115, 232;
  --GB700-rgb: 25, 103, 210;
  --GB800-rgb: 24, 90, 188;
  --GB900-rgb: 23, 78, 166;
  --GB400-dark-rgb: 107, 165, 237;
  --GB600-dark-rgb: 37, 129, 223;

  /* Google Red */
  --GR050-rgb: 252, 142, 230;
  --GR100-rgb: 250, 210, 207;
  --GR200-rgb: 246, 174, 169;
  --GR300-rgb: 242, 139, 130;
  --GR400-rgb: 238, 103, 92;
  --GR500-rgb: 234, 67, 53;
  --GR600-rgb: 217, 48, 37;
  --GR700-rgb: 197, 34, 31;
  --GR800-rgb: 179, 20, 18;
  --GR900-rgb: 165, 14, 14;
  --GR500-dark-rgb: 230, 106, 94;
  --GR600-dark-rgb: 211, 59, 48;
  --GR800-dark-rgb: 180, 27, 26;

  --dark-mode-shadow: 0 1px 3px 0 rgba(0, 0, 0, .3),
      0 4px 8px 3px rgba(0, 0, 0, .15);
}

body * {
  /* Default font families for Linux and ChromeOS. */
  font-family: 'Roboto', arial, sans-serif;
}

.win * {
  /* Default font families for Windows */
  font-family: 'Segoe UI', 'Roboto', arial, sans-serif;
}

.mac * {
  /* Default font families for MacOS */
  font-family: system-ui, BlinkMacSystemFont, 'Roboto', arial, sans-serif;
}

/* Removes blue focus ring on mouse navigation */
.mouse-navigation {
  outline: none;
}
/* Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

.ripple-container {
  height: 100%;
  left: 0;
  pointer-events: none;
  position: absolute;
  top: 0;
  width: 100%;
  z-index: 100;
}

.ripple-effect-mask {
  height: 0;
  left: 0;
  overflow: hidden;
  position: absolute;
  top: 0;
  width: 0;
}

.ripple-effect {
  background-color: rgba(var(--GB600-rgb), .1);
  border-radius: 50%;
  height: 1px;
  pointer-events: none;
  transition: width, height, margin, background-color 400ms 250ms;
  transition-duration: 400ms;
  transition-timing-function: cubic-bezier(.4, 0, .2, 1);
  width: 1px;
}

@media (prefers-color-scheme: dark) {
  .ripple-effect {
    background-color: rgba(var(--GB300-rgb), .32);
  }
}

button.primary .ripple-effect {
  background-color: rgba(255, 255, 255, .32);
}

@media (prefers-color-scheme: dark) {
  button.primary .ripple-effect {
    background-color: rgba(0, 0, 0, .08);
  }
}

button.paper {
  border: none;
  border-radius: 4px;
  font-size: 12px;
  font-weight: 500;
  line-height: 1.6;
  min-height: 32px;
  padding: 0 16px;
  position: relative;
  transition-duration: 200ms;
  transition-property: background-color, color, box-shadow, border;
  transition-timing-function: cubic-bezier(.4, 0, .2, 1);
}

button.paper:not(:disabled) {
  cursor: pointer;
}

button.paper:disabled {
  transition: none;
}

button.paper.primary {
  background-color: rgb(var(--GB600-rgb));
  color: white;
}

@media (prefers-color-scheme: dark) {
  button.paper.primary {
    background-color: rgb(var(--GB300-rgb));
    color: rgb(var(--GG900-rgb));
  }
}

button.paper.primary:disabled {
  background-color: rgb(var(--GG100-rgb));
  color: rgb(var(--GG600-rgb));
}

@media (prefers-color-scheme: dark) {
  button.paper.primary:disabled {
    background-color: rgb(var(--GG800-rgb));
    color: rgb(var(--GG600-rgb));
  }
}

button.paper.primary:hover:not(:disabled) {
  background-color: rgb(41, 123, 231);
  box-shadow: 0 1px 2px 0 rgba(var(--GB500-rgb), .3),
      0 1px 3px 1px rgba(var(--GB500-rgb), .15);
}

@media (prefers-color-scheme: dark) {
  button.paper.primary:hover:not(:disabled) {
    background-color: rgb(133, 173, 238);
  }
}

button.paper.primary:active:not(:disabled) {
  box-shadow: 0 1px 2px 0 rgba(var(--GB500-rgb), .3),
      0 3px 6px 2px rgba(var(--GB500-rgb), .15);
}

@media (prefers-color-scheme: dark) {
  button.paper.primary:active:not(:disabled) {
    background-color: rgb(115, 160, 223);
    box-shadow: 0 1px 2px 0 rgba(var(--GB500-rgb), .3),
        0 3px 6px 2px rgba(var(--GB500-rgb), .15);
  }
}

button.paper.secondary {
  background-color: white;
  border: 1px solid rgb(var(--GG300-rgb));
  color: rgb(var(--GB600-rgb));
}

@media (prefers-color-scheme: dark) {
  button.paper.secondary {
    background-color: transparent;
    border-color: rgb(var(--GG700-rgb));
    color: rgb(var(--GB300-rgb));
  }
}

button.paper.secondary:disabled {
  border-color: rgb(var(--GG100-rgb));
  color: rgb(var(--GG600-rgb));
}

@media (prefers-color-scheme: dark) {
  button.paper.secondary:disabled {
    border-color: rgb(var(--GG800-rgb));
    color: rgb(var(--GG600-rgb));
  }
}

button.paper.secondary:hover:not(:disabled) {
  background-color: rgba(var(--GB500-rgb), .04);
  border-color: rgb(var(--GB100-rgb));
}

@media (prefers-color-scheme: dark) {
  button.paper.secondary:hover:not(:disabled) {
    background-color: rgba(var(--GB300-rgb), .04);
    border-color: rgba(var(--GB300-rgb), .5);
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .3),
        0 1px 3px 1px rgba(0, 0, 0, .15);
  }
}

button.paper.secondary:active:not(:disabled) {
  background-color: white;
  border-color: white;
  box-shadow: 0 1px 2px 0 rgba(var(--GG800-rgb), .3),
      0 3px 6px 2px rgba(var(--GG800-rgb), .15);
}

@media (prefers-color-scheme: dark) {
  button.paper.secondary:active:not(:disabled) {
    background-color: rgba(var(--GB300-rgb), .08);
    border-color: rgba(var(--GB300-rgb), .5);
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .3),
        0 3px 6px 2px rgba(0, 0, 0, .15);
    }
}
/* Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

/**
 * Contains common animations used in the main NTP page and its iframes.
 */
const animations = {};

/**
 * Enum for classnames.
 * @enum {string}
 * @const
 */
animations.CLASSES = {
  RIPPLE: 'ripple',
  RIPPLE_CONTAINER: 'ripple-container',
  RIPPLE_EFFECT_MASK: 'ripple-effect-mask',
  RIPPLE_EFFECT: 'ripple-effect',
};

/**
 * The duration of the ripple animation.
 * @type {number}
 * @const
 */
animations.RIPPLE_DURATION_MS = 800;

/**
 * The max size of the ripple animation.
 * @type {number}
 * @const
 */
animations.RIPPLE_MAX_RADIUS_PX = 300;

/**
 * Enables ripple animations for elements with CLASSES.RIPPLE. The target
 * element must have position relative or absolute.
 */
animations.addRippleAnimations = function() {
  const ripple = (event) => {
    const target = event.target;
    const rect = target.getBoundingClientRect();
    const x = Math.round(event.clientX - rect.left);
    const y = Math.round(event.clientY - rect.top);

    // Calculate radius
    const corners = [
      {x: 0, y: 0},
      {x: rect.width, y: 0},
      {x: 0, y: rect.height},
      {x: rect.width, y: rect.height},
    ];
    const distance = (x1, y1, x2, y2) => {
      const xDelta = x1 - x2;
      const yDelta = y1 - y2;
      return Math.sqrt(xDelta * xDelta + yDelta * yDelta);
    };
    const cornerDistances = corners.map(function(corner) {
      return Math.round(distance(x, y, corner.x, corner.y));
    });
    const radius = Math.min(
        animations.RIPPLE_MAX_RADIUS_PX, Math.max.apply(Math, cornerDistances));

    const ripple = document.createElement('div');
    const rippleMask = document.createElement('div');
    const rippleContainer = document.createElement('div');
    ripple.classList.add(animations.CLASSES.RIPPLE_EFFECT);
    rippleMask.classList.add(animations.CLASSES.RIPPLE_EFFECT_MASK);
    rippleContainer.classList.add(animations.CLASSES.RIPPLE_CONTAINER);
    rippleMask.appendChild(ripple);
    rippleContainer.appendChild(rippleMask);
    target.appendChild(rippleContainer);
    // Ripple start location
    ripple.style.marginLeft = x + 'px';
    ripple.style.marginTop = y + 'px';

    rippleMask.style.width = target.offsetWidth + 'px';
    rippleMask.style.height = target.offsetHeight + 'px';
    rippleMask.style.borderRadius =
        window.getComputedStyle(target).borderRadius;

    // Start transition/ripple
    ripple.style.width = radius * 2 + 'px';
    ripple.style.height = radius * 2 + 'px';
    ripple.style.marginLeft = x - radius + 'px';
    ripple.style.marginTop = y - radius + 'px';
    ripple.style.backgroundColor = 'rgba(0, 0, 0, 0)';

    window.setTimeout(function() {
      ripple.remove();
      rippleMask.remove();
      rippleContainer.remove();
    }, animations.RIPPLE_DURATION_MS);
  };

  const rippleElements =
      document.querySelectorAll('.' + animations.CLASSES.RIPPLE);
  for (let i = 0; i < rippleElements.length; i++) {
    rippleElements[i].addEventListener('mousedown', ripple);
  }
};
/* Copyright 2015 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

html {
  /* Material Design constants */
  --md-tile-margin: 16px;
  --md-tile-size: 112px;

  /* This will be overridden based on the viewport width, see below. */
  --column-count: 3;

  --content-width: calc(var(--column-count) * var(--md-tile-size)
      /* We add an extra pixel because rounding errors on different zooms can
       * make the width shorter than it should be. */
      + 1px);

  --logo-color: #eee; /* Background color for alternative logo. */
  --logo-height: 200px; /* Normal height of a doodle. */
  --logo-margin-top: 56px; /* Expected OGB height, so logo doesn't overlap. */
  --logo-margin-bottom: 38px; /* Between logo and fakebox. */

  /* Initial height determines the margin between the logo and the fakebox. If
   * the iframe height exceeds the normal --logo-height, the difference is
   * subtracted from the margin. The actual --logo-iframe-{width,height} can be
   * changed later, but the initial height, and therefore the margin, remains
   * the same.
   */
  --logo-iframe-initial-height: var(--logo-height);
  --logo-iframe-height: var(--logo-height);
  --logo-iframe-resize-duration: 150ms;
  --logo-iframe-width: 500px;

  --mv-notice-time: 10s;

  /* These can be overridden by themes. */
  --text-color: #000;
  --text-color-light: #fff;

  height: 100%;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) {
    /* These can be overridden by themes. */
    --text-color: rgb(var(--GG200-rgb));
    --text-color-light: rgb(var(--GG200-rgb));
  }
}

/* width >= (4 cols * 112px (tile width) + 112px (1 tile margin)) */
@media (min-width: 560px) {
  html {
    --column-count: 4;
  }
}

/* width >= (5 cols * 112px (tile width) + 112px (1 tile margin)) */
@media (min-width: 672px) {
  html {
    --column-count: 5;
  }
}

body {
  background-attachment: fixed !important;
  cursor: default;
  display: none;
  font-size: small;
  margin: 0;
  min-height: 100%;
}

html.inited body {
  display: block;
}

/* Button defaults vary by platform. Reset CSS so that the NTP can use buttons
 * as a kind of clickable div. */
button {
  background: transparent;
  border: 0;
  margin: 0;
  padding: 0;
}

#ntp-contents {
  display: flex;
  flex-direction: column;
  height: 100%;
  position: relative;
  z-index: 1;
}

#logo,
#fakebox-container,
#realbox-container {
  --searchbox-height: 44px;
  flex-shrink: 0;
}

.non-google-page #ntp-contents {
  /* The inherited height from #ntp-contents applies from the "top" location,
   * but uses the size of the overall NTP content area, resulting in an
   * unnecessary scrollbar. This height corresponds to MV tile height for a
   * single row, but also works for a row of icons, and works well on small
   * screens (like Pixelbook), as well as high-res screens. */
  height: 155px;
  left: calc(50% - var(--content-width)/2);
  position: absolute;
  top: calc(50% - 155px);
}

body.hide-fakebox #fakebox {
  opacity: 0;
  visibility: hidden;
}

#fakebox-container {
  margin: 0 auto 0 auto;
  /* Increase min-width again to account for the search icon: 390px new
   * min-width + additional 20px */
  min-width: 410px;
  width: var(--content-width);
}

#realbox-input-wrapper {
  position: relative;
  z-index: 0;
}

#fakebox,
#realbox {
  border-radius: 22px;
  box-sizing: border-box;
  font-size: 16px;
  height: var(--searchbox-height);
  opacity: 1;
  position: relative;
  transition: none;
}

#fakebox,
#realbox-input-wrapper:not(.show-matches) #realbox,
#realbox-input-wrapper.show-matches #realbox-matches {
  box-shadow: 0 1px 6px 0 rgba(32, 33, 36, .28);
}

#fakebox,
#realbox-input-wrapper {
  margin: 0 auto;
  max-width: 584px;
}

.google-g-icon {
  background-image:
      url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAACK0lEQVR4Ae3WP4vUQBjHcRtB1CLFgW3Q1mIRPTxEfPzTiAgBK61SaZtSsHAbEUEYsNBCYZorhPPIFQoHCnkJ012b2hOJggqnxeNvioFl7kLmyU4SkQt8uiX73Zk8kz3S59q9fiGFHDQY4BYGSigglX+TPIygBO6pgmyosAo4EgMUIywBBTwQtWycAR6YgUQaN4MGeCSZdOXGjMulq2f+2bieA1FCDuRNvTsnm1hxJJ1ASAIfmbk4zr8E51wNM8Gt/cGTx/35dJS+P0wFR8LIFwJL4F8vV/jLrXNtcQ2kU8SlwM7e5gn+eu+s/KwaMDAHXvT7/TH+VpxZjKumaHOBGvggP9UpF0hTBhrgNnsbJ2vJ/a49+VHF4gK5gxYGckSzkMBiwkAKCaTDwHb0X2yxnjrQdATWU0+xbotrPh7n+5vE59/eIUEgBdJdga2vOmtne4Vvb9y0cVb0Vx0CTEegcYGJH7f14bSN8mUR4wi4g9r3d8tu6eOtVRfkayAdafWsbDGQ7JbefXfDj/IZSJaM0wFx+wfTPmfAAWqY9QhLAuOs+UGBBCygQlcTn8uhvvRqPSSugaTtRgpYqIQcyPuxGSiogZ2L+hFffborWz0v0gAPaXX9AV95vtN6tHQFJtAAD+3yi21/a8NOCTsEY0WuvVbY8s82TjR4biXNCJHN2ptnsjgvUg0YVy11rnpTWcVcNShEEYLQcomwGgr5qslDU8hBg+kIqmAOvZ6zv3thp2JBo8GPAAAAAElFTkSuQmCC);
  background-position: center;
  background-repeat: no-repeat;
  background-size: 14px;
  bottom: 0;
  left: 16px;
  position: absolute;
  top: 0;
  width: 24px;
}

[dir=rtl] .google-g-icon {
  left: auto;
  right: 16px;
}

#fakebox {
  background: white;
  cursor: text;
}

#realbox {
  background-color: var(--search-box-bg, white);
  border: none;
  color: var(--search-box-text);
  display: block;
  outline: none;
  padding-inline-end: 48px;
  width: 100%;
  z-index: 2;
}

#realbox::-webkit-search-decoration,
#realbox::-webkit-search-cancel-button,
#realbox::-webkit-search-results-button,
#realbox::-webkit-search-results-decoration {
  display: none;
}

#realbox::placeholder {
  color: var(--search-box-placeholder, rgb(117, 117, 117));
}

#realbox:focus::placeholder {
  color: transparent;
}

#realbox:focus,
.show-matches #realbox {
  background-color: var(--search-box-results-bg, white);
}

@media (prefers-color-scheme: dark) {
  #fakebox,
  #realbox-input-wrapper:not(.show-matches) #realbox,
  #realbox-input-wrapper.show-matches #realbox-matches {
    box-shadow: 0 1px 6px 0 rgba(32, 33, 36, .78);
  }
}

.non-google-page :-webkit-any(#fakebox-container, #realbox-container) {
  display: none;
}

/* The realbox is a "loupe" (.search-icon) by default, but when the selection
 * ends up on match with a different icon, the realbox also gets that icon.
 * Example: typing the start of a URL with a favicon or the user pressing
 * up/down to select matches sets a background-image here and disables the
 * -webkit-mask applied by .search-icon. */
#realbox-icon {
  background-position: center center;
  background-repeat: no-repeat;
  background-size: 24px;
}

#realbox-matches {
  background-color: var(--search-box-results-bg, white);
  border-radius: 16px;
  color: var(--search-box-results-text);
  display: none;
  left: 0;
  overflow: hidden;
  padding-top: var(--searchbox-height);
  position: absolute;
  right: 0;
  top: 0;
  z-index: 1;
}

#realbox-input-wrapper.show-matches #realbox-matches {
  display: flex;
  flex-direction: column;
}

#realbox-matches :-webkit-any(a, span) {
  color: inherit;
  font-family: inherit;
}

#realbox-matches a {
  background-position: 16px center;
  background-repeat: no-repeat;
  background-size: 24px;
  font-size: 16px;
  line-height: 1;
  outline: none;
  overflow: hidden;
  padding-bottom: 8px;
  padding-inline-end: 16px;
  padding-inline-start: 48px;
  padding-top: 8px;
  position: relative;
  text-decoration: none;
  text-overflow: ellipsis;
  white-space: nowrap;
}

[dir=rtl] #realbox-matches a {
  background-position-x: calc(100% - 16px);
}

#realbox-matches.removable a {
  padding-inline-end: 48px;
}

#realbox-matches a:last-of-type {
  margin-bottom: 8px;  /* Last result is tight with border-radius. */
}

.clock-icon,
.search-icon {
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 16px;
  background-color: var(--search-box-icon, rgb(117, 117, 117));
  bottom: 0;
  left: 16px;
  position: absolute;
  top: 0;
  width: 24px;
}

.clock-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6TTEyIDIwYy00LjQyIDAtOC0zLjU4LTgtOHMzLjU4LTggOC04IDggMy41OCA4IDgtMy41OCA4LTggOHoiLz48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTEyLjUgN0gxMXY2bDUuMjUgMy4xNS43NS0xLjIzLTQuNS0yLjY3eiIvPjwvc3ZnPg==);
}

.search-icon {
  -webkit-mask-image:
      url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTE1LjUgMTRoLS43OWwtLjI4LS4yN0E2LjQ3MSA2LjQ3MSAwIDAgMCAxNiA5LjUgNi41IDYuNSAwIDEgMCA5LjUgMTZjMS42MSAwIDMuMDktLjU5IDQuMjMtMS41N2wuMjcuMjh2Ljc5bDUgNC45OUwyMC40OSAxOWwtNC45OS01em0tNiAwQzcuMDEgMTQgNSAxMS45OSA1IDkuNVM3LjAxIDUgOS41IDUgMTQgNy4wMSAxNCA5LjUgMTEuOTkgMTQgOS41IDE0eiIvPjwvc3ZnPg==);
}

#realbox-input-wrapper > .search-icon {
  -webkit-mask-size: 20px;  /* Loupe in realbox is bigger than in matches. */
}

html[dir=rtl] :-webkit-any(.clock-icon, .search-icon) {
  right: 16px;
}

#realbox-matches a:-webkit-any(:hover, .selected) {
  background-color: var(--search-box-results-bg-hovered, rgb(232, 232, 233));
}

#realbox-matches a:focus-within {
  background-color: var(--search-box-results-bg-selected, rgb(219, 219, 220));
}

#realbox-matches .match {
  font-weight: bold;
}

#realbox-matches .dim {
  color: var(--search-box-results-dim, rgb(var(--GG600-rgb)));
}

#realbox-matches .url {
  color: var(--search-box-results-url, rgb(var(--GB600-rgb)));
}

#realbox-matches .remove-match {
  border-radius: 50%;
  height: 24px;
  position: absolute;
  right: 16px;
  top: 4px;
  width: 24px;
}

[dir=rtl] #realbox-matches .remove-match {
  left: 16px;
  right: auto;
}

#realbox-matches .remove-match:hover {
  background-color: var(--remove-match-hovered, rgba(var(--GG900-rgb), .08));
}

#realbox-matches .remove-match:focus-within {
  background-color: var(--remove-match-focused, rgba(var(--GG900-rgb), .16));
}

#realbox-matches .remove-icon {
  height: 100%;
  width: 100%;
}

#realbox-matches a:-webkit-any(:hover, :focus-within, .selected) .remove-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz4=);
  -webkit-mask-position: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 16px;
  background-color: var(--search-box-icon, rgb(var(--GG900-rgb)));
}

#fakebox > input {
  bottom: 0;
  box-sizing: border-box;
  left: 0;
  margin: 0;
  opacity: 0;
  padding-inline-start: 20px;
  position: absolute;
  top: 0;
  width: 100%;
}

html[dir=rtl] #fakebox > input {
  right: 0;
}

#fakebox .search-icon {
  -webkit-mask-size: 20px;
}

#fakebox-text {
  bottom: 0;
  color: rgb(117, 117, 117);
  font-size: 16px;
  height: 44px;
  left: 0;
  line-height: 44px;
  margin: auto 0;
  overflow: hidden;
  position: absolute;
  right: 44px;
  text-align: initial;
  text-overflow: ellipsis;
  top: 0;
  user-select: none;
  vertical-align: middle;
  visibility: inherit;
  white-space: nowrap;
}

html[dir=rtl] #fakebox-text {
  left: 44px;
  right: 0;
}

#fakebox-text,
#realbox {
  padding-inline-start: 48px;
}

#fakebox-cursor {
  background: #333;
  /* Total 16px height: (46px fakebox height - 2px border) - 14px top - 14px
   * bottom */
  bottom: 14px;
  left: 48px;
  position: absolute;
  top: 14px;
  visibility: hidden;
  width: 1px;
}

html[dir=rtl] #fakebox-cursor {
  left: auto;
  right: 48px;
}

.microphone-icon {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik0xMiAxNWMxLjY2IDAgMi45OS0xLjM0IDIuOTktM0wxNSA1YzAtMS42Ni0xLjM0LTMtMy0zUzkgMy4zNCA5IDV2N2MwIDEuNjYgMS4zNCAzIDMgM3oiLz48cGF0aCBmaWxsPSIjMzRBODUzIiBkPSJNMTEgMTguOTJoMlYyMmgtMnoiLz48cGF0aCBmaWxsPSIjRjRCNDAwIiBkPSJNNyAxMkg1YzAgMS45My43OCAzLjY4IDIuMDUgNC45NWwxLjQxLTEuNDFDNy41NiAxNC42MyA3IDEzLjM4IDcgMTJ6Ii8+PHBhdGggZmlsbD0iI0VBNDMzNSIgZD0iTTEyIDE3Yy0xLjM4IDAtMi42My0uNTYtMy41NC0xLjQ3bC0xLjQxIDEuNDFBNi45OSA2Ljk5IDAgMCAwIDEyLjAxIDE5YzMuODcgMCA2Ljk4LTMuMTQgNi45OC03aC0yYzAgMi43Ni0yLjIzIDUtNC45OSA1eiIvPjwvc3ZnPg==) no-repeat center;
  background-size: 21px 21px;
  bottom: 0;
  cursor: pointer;
  margin-inline-end: 16px;
  padding: 22px 12px 0;
  position: absolute;
  right: 0;
  top: 0;
  width: 21px;
}

html[dir=rtl] .microphone-icon {
  left: 0;
  right: auto;
}

#realbox-input-wrapper > :-webkit-any(.google-g-icon, .microphone-icon,
                                      .search-icon) {
  z-index: 3;
}

@keyframes blink {
  0% {
    opacity: 1;
  }
  61.55% {
    opacity: 0;
  }
}

body.fakebox-drag-focused #fakebox-text,
body.fakebox-focused #fakebox-text {
  visibility: hidden;
}

body.fakebox-drag-focused #fakebox-cursor {
  visibility: inherit;
}

body.fakebox-focused #fakebox-cursor {
  animation: blink 1.3s step-end infinite;
  visibility: inherit;
}

#most-visited {
  /* Total of 40px margin between fakebox and MV tiles: 8px fakebox
   * margin-bottom + 22px here margin-top + 10px MV margin-top */
  margin-top: 22px;
  text-align: -webkit-center;
  user-select: none;
}

/* Non-Google pages have no Fakebox, so don't need top margin. */
.non-google-page #most-visited {
  margin-top: 0;
}

#mv-tiles {
  /* Two rows of tiles of 112px each, 16px of spacing after each row, and 10px
   * of padding on top. If you change this, also change the corresponding values
   * in most_visited_single.css. */
  height: calc(2*(var(--md-tile-size) + var(--md-tile-margin)) + 10px);
  margin: 0;
  position: relative;
  text-align: -webkit-auto;
  /* Add 2*6px to account for drop shadow on the tiles. If you change this, also
   * change the corresponding padding in most_visited_single.css. */
  width: calc(var(--content-width) + 12px);
}

#mv-notice-container {
  bottom: -50px;
  left: 0;
  margin-bottom: 16px;
  position: fixed;
  transition: bottom 400ms;
  width: 100%;
}

/* Required to allow click events through the wrapping div of the toast
 * notification container. */
#mv-notice-container,
#error-notice-container {
  pointer-events: none;
}
#mv-notice-container > div,
#error-notice-container > div {
  pointer-events: all;
}

#mv-notice-container.float-up {
  bottom: 0;
}

#mv-notice-container.notice-hide {
  display: none;
}

/* The notification shown when a tile is blacklisted. */
#mv-notice {
  background-color: white;
  border: 1px solid rgb(var(--GG300-rgb));
  /* Necessary for a "pill" shape. Using 50% creates an oval. */
  border-radius: 16px;
  box-sizing: border-box;
  font-size: 12px;
  height: fit-content;
  margin: 0 auto;
  /* Set min-height in order to prevent the border from disappearing at certain
     zooms. */
  min-height: 35px;
  opacity: 1;
  width: fit-content;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #mv-notice {
    background-color: rgb(var(--GG900-rgb));
    border-color: rgba(0, 0, 0, .1);
  }
}

#mv-notice span {
  color: rgb(var(--GG700-rgb));
  cursor: default;
  display: inline-block;
  height: auto;
  /* Use odd height in order to prevent rounding errors at certain zooms. */
  line-height: 33px;
  vertical-align: unset;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #mv-notice span {
    color: rgb(var(--GG200-rgb));
  }
}

/* Links in the notification. */
#mv-notice-links span {
  /* Necessary for a "pill" shape. Using 50% creates an oval. */
  border-radius: 16px;
  color: rgb(var(--GB600-rgb));
  cursor: pointer;
  margin-inline-start: 0;
  outline: none;
  padding: 0 16px;
  position: relative;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #mv-notice-links span {
    color: rgb(var(--GB400-dark-rgb));
  }
}

#mv-notice-links span:focus {
  text-decoration: underline;
}

#mv-notice-links span:hover,
#mv-notice-links span:active {
  background-color: rgba(var(--GB600-rgb), .1);
  text-decoration: none;
  transition: background-color 200ms;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #mv-notice-links
  :-webkit-any(span:hover, span:active) {
    background-color: rgba(var(--GB400-dark-rgb), .1);
  }
}

#mv-msg {
  color: var(--text-color);
  padding: 0 16px;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #mv-msg {
    color: rgb(var(--GG200-rgb));
  }
}

#mv-notice.mv-notice-delayed-hide:not(:focus-within) {
  opacity: 0;
  transition-delay: var(--mv-notice-time);
  transition-property: opacity;
}

#mv-notice.notice-hide {
  display: none;
}

#attribution {
  bottom: 0;
  color: var(--text-color-light);
  cursor: default;
  display: inline-block;
  font-size: 13px;
  left: auto;
  position: fixed;
  right: 8px;
  text-align: start;
  user-select: none;
  z-index: -1;
}

html[dir=rtl] #attribution,
#attribution.left-align-attribution {
  left: 8px;
  right: auto;
  text-align: end;
}

#mv-single {
  border: none;
  display: block;
  height: 100%;
  width: 100%;
}

.customize-dialog::backdrop {
  background-color: rgba(255, 255, 255, .75);
}

@media (prefers-color-scheme: dark) {
  .customize-dialog::backdrop {
    background-color: rgba(0, 0, 0, .4);
  }
}

#custom-links-edit-dialog {
  background: transparent;
  border: none;
  height: 100%;
  padding: 0;
  position: fixed;
  top: 0;
  width: 100%;
}

#custom-links-edit {
  border: none;
  height: 100%;
  position: absolute;
  top: 0;
  width: 100%;
}

#one-google {
  display: none;
  position: absolute;
  top: 0;
  transition: opacity 130ms;
  /* One Google Bar can automatically align to left and right
    based on the profile language preference */
  width: 100%;
}

#error-notice-container {
  bottom: -50px;
  margin-bottom: 16px;
  position: fixed;
  transition: bottom 400ms;
  user-select: none;
  width: 100%;
}

#error-notice-container.float-up {
  bottom: 0;
}

#error-notice {
  background-color: white;
  border: 1px solid rgb(var(--GG300-rgb));
  /* Necessary for a "pill" shape. Using 50% creates an oval. */
  border-radius: 16px;
  color: rgb(var(--GR600-rgb));
  display: flex;
  font-size: 12px;
  font-weight: normal;
  height: fit-content;
  margin: 0 auto;
  opacity: 1;
  padding: 0;
  position: relative;
  width: fit-content;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #error-notice {
    background-color: rgb(var(--GG900-rgb));
    border-color: rgba(0, 0, 0, .1);
    color: rgb(var(--GR500-dark-rgb));
  }
}

#error-notice.notice-hide {
  display: none;
}

#error-notice span {
  align-self: center;
  display: inline-block;
  line-height: 32px;
}

#error-notice-icon {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSIjRTUxQzIzIj48cGF0aCBkPSJNMCAwaDQ4djQ4SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTI0IDRDMTIuOTYgNCA0IDEyLjk1IDQgMjRzOC45NiAyMCAyMCAyMCAyMC04Ljk1IDIwLTIwUzM1LjA0IDQgMjQgNHptMiAzMGgtNHYtNGg0djR6bTAtOGgtNFYxNGg0djEyeiIvPjwvc3ZnPg==) no-repeat center;
  background-size: 18px 18px;
  height: 32px;
  padding: 0 8px;
  width: 18px;
}

#error-notice-msg {
  cursor: default;
  padding-inline-end: 16px;
}

#error-notice.has-link #error-notice-msg {
  padding-inline-end: 0;
}

html[dir=rtl] #error-notice.has-link #error-notice-msg {
  padding: 0;
}

#error-notice-link {
  /* Necessary for a "pill" shape. Using 50% creates an oval. */
  border-radius: 16px;
  color: rgb(var(--GB600-rgb));
  cursor: pointer;
  display: none;
  outline: none;
  padding: 0 16px;
  position: relative;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #error-notice-link {
    color: rgb(var(--GB400-dark-rgb));
  }
}

#error-notice:not(.has-link) #error-notice-link {
  display: none;
}

#error-notice-link:hover,
#error-notice-link:focus {
  text-decoration: underline;
}

#error-notice-link:hover,
#error-notice-link:active {
  background-color: rgba(var(--GB600-rgb), .1);
  text-decoration: none;
  transition: background-color 200ms;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #error-notice-link:hover,
  body:not(.light-chip) #error-notice-link:active {
    background-color: rgba(var(--GB400-dark-rgb), .1);
  }
}

#promo {
  bottom: 16px;
  left: 0;
  pointer-events: none;
  position: fixed;
  right: 0;
  text-align: center;
  transition: bottom 400ms;
  visibility: hidden;
}

#promo.float-down {
  bottom: -50px;
}

#promo > div {
  --dismiss-background-rgb: var(--GG900-rgb);
  background-color: #FFF;
  border: 1px solid rgb(var(--GG300-rgb));
  border-radius: 16px;
  box-sizing: border-box;
  color: rgb(var(--GG700-rgb));
  display: inline-block;
  font-size: 12px;
  height: 32px;
  line-height: 30px;  /* Height - 1px border-top - 1px border-bottom. */
  margin-bottom: 0;
  /* TODO(crbug.com/969062): this magic constant would be better implemented as
   * real multi-line promo text support or a better QA process to check that
   * promo messages aren't ellided. It's ultimately quite hard to make any pixel
   * value here useful as font face, sizes, and zoom can all vary. Pushing for
   * a more dynamic UI or better qualification process has been met with
   * significant resistance, so we keep arbitrarily changing this value. */
  max-width: 537px;
  overflow: hidden;
  padding: 0 16px;
  pointer-events: all;
  position: relative;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#promo.dismissable > div {
  padding-inline-end: 36px;  /* +24px for dismiss-icon - 4px less end padding */
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #promo > div {
    --dismiss-background-rgb: var(--GG100-rgb);
    background-color: rgb(var(--GG900-rgb));
    border-color: rgba(0, 0, 0, .1);
    color: rgb(var(--GG200-rgb));
  }
}

#promo > div .dismiss-promo {
  border-radius: 50%;
  height: 24px;
  position: absolute;
  right: 4px;
  top: 3px;  /* 4px from top - 1px of border. */
  width: 24px;
}

[dir=rtl] #promo > div .dismiss-promo {
  left: 4px;
  right: auto;
}

#promo > div .dismiss-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz4=);
  -webkit-mask-position: center center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 16px;
  background-color: rgb(var(--dismiss-background-rgb));
  display: block;
  height: 100%;
  outline: none;
  width: 100%;
}

#promo > div .dismiss-promo:hover {
  background-color: rgba(var(--dismiss-background-rgb), .08);
}

#promo > div .dismiss-promo:focus-within {
  background-color: rgba(var(--dismiss-background-rgb), .16);
}

#promo > div > a {
  color: rgb(51, 103, 214) !important;
  text-decoration: none;
}

#promo > div > a:visited {
  color: rgb(51, 103, 214) !important;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #promo > div > :-webkit-any(a, a:visited) {
    color: rgb(var(--GB400-dark-rgb)) !important;
  }
}

#promo > div > img {
  border-radius: 50%;
  height: 24px;
  margin-bottom: 2px;
  margin-inline-end: 8px;
  margin-inline-start: -12px;
  object-fit: cover;
  vertical-align: middle;
  width: 24px;
}

@media (prefers-color-scheme: dark) {
  body:not(.light-chip) #promo > div > img {
    background-color: rgb(var(--GG200-rgb));
  }
}

#one-google.show-element {
  display: block;
}

#promo.notice-hide {
  display: none;
}

#user-content {
  /* Reduce margin by new height of fakebox (46px) - old height (44px) = 2px */
  margin-top: -2px;
  z-index: -1;
}

#customization-menu {
  border: none;
  border-radius: 8px;
  box-shadow: 0 1px 3px 0 rgba(var(--GG800-rgb), .3),
              0 4px 8px 3px rgba(var(--GG800-rgb), .15);
  color: rgb(var(--GG700-rgb));
  font-size: 0;  /* Remove extra spacing between inline-block elements. */
  height: 528px;
  min-width: 800px;
  padding: 0;
  user-select: none;
}

@media (prefers-color-scheme: dark) {
  #customization-menu {
    background-color: rgb(var(--dark-mode-dialog-rgb));
    box-shadow: var(--dark-mode-shadow);
    color: rgb(var(--GG200-rgb));
  }
}

#customization-menu > div {
  font-size: 13px;
}

#menu-nav-panel {
  display: inline-block;
  height: 384px;
  left: 0;
  margin-top: 80px;
  vertical-align: top;
  width: 192px;
}

.menu-option {
  border-radius: 0 16px 16px 0;
  color: rgb(var(--GG700-rgb));
  cursor: pointer;
  font-size: 14px;
  height: 32px;
  left: 0;
  margin-bottom: 16px;
  outline: none;
  text-align: start;
  width: 192px;
}

@media (prefers-color-scheme: dark) {
  .menu-option {
    color: rgb(var(--GG200-rgb));
  }
}

html[dir=rtl] .menu-option {
  border-radius: 16px 0 0 16px;
}

.menu-option:hover,
.menu-option:focus {
  background-color: rgba(var(--GG900-rgb), .1);
}

@media (prefers-color-scheme: dark) {
  .menu-option:hover,
  .menu-option:focus {
    background-color: rgba(var(--GG500-rgb), .12);
  }
}

.menu-option:active,
.menu-option.selected {
  background-color: rgb(232, 240, 254);
  color: rgb(var(--GB700-rgb));
}

@media (prefers-color-scheme: dark) {
  .menu-option:active,
  .menu-option.selected {
    background-color: rgba(var(--GB200-rgb), .1);
    color: rgb(var(--GB300-rgb));
  }
}

.menu-option-icon-wrapper {
  display: inline-block;
  height: 32px;
  margin-inline-start: 24px;
  width: 20px;
}

.menu-option-icon {
  -webkit-mask-position-x: center;
  -webkit-mask-position-y: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 20px;
  background-color: black;
  background-size: 20px 20px;
  height: 20px;
  margin-top: 6px;
  width: 20px;
}

@media (prefers-color-scheme: dark) {
  .menu-option-icon {
    background-color: rgb(var(--GG200-rgb));
  }
}

.menu-option:active .menu-option-icon-wrapper .menu-option-icon,
.menu-option.selected .menu-option-icon-wrapper .menu-option-icon {
  background-color: rgb(var(--GB600-rgb));
}

@media (prefers-color-scheme: dark) {
  .menu-option:active .menu-option-icon-wrapper .menu-option-icon,
  .menu-option.selected .menu-option-icon-wrapper .menu-option-icon {
    background-color: rgb(var(--GB300-rgb));
  }
}

#shortcuts-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwaDE2djE2SDB6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMS41MiA4QTIuNDgyIDIuNDgyIDAgMCAxIDQgNS41MmgzLjJWNEg0QzEuNzkyIDQgMCA1Ljc5MiAwIDhzMS43OTIgNCA0IDRoMy4ydi0xLjUySDRBMi40ODIgMi40ODIgMCAwIDEgMS41MiA4em0zLjI4LjhoNi40VjcuMkg0Ljh2MS42ek0xMiA0SDguOHYxLjUySDEyQTIuNDgyIDIuNDgyIDAgMCAxIDE0LjQ4IDggMi40ODIgMi40ODIgMCAwIDEgMTIgMTAuNDhIOC44VjEySDEyYzIuMjA4IDAgNC0xLjc5MiA0LTRzLTEuNzkyLTQtNC00eiIvPjwvZz48L3N2Zz4=);
}

#backgrounds-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjRweCIgaGVpZ2h0PSIyNHB4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU0LjEgKDc2NDkwKSAtIGh0dHBzOi8vc2tldGNoYXBwLmNvbSAtLT4KICAgIDx0aXRsZT5pYy1udHAtYmFja2dyb3VuZDwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik00LDQgTDExLDQgTDExLDIgTDQsMiBDMi45LDIgMiwyLjkgMiw0IEwyLDExIEw0LDExIEw0LDQgWiBNMTAsMTMgTDYsMTggTDE4LDE4IEwxNSwxNCBMMTIuOTcsMTYuNzEgTDEwLDEzIFogTTE3LDguNSBDMTcsNy42NyAxNi4zMyw3IDE1LjUsNyBDMTQuNjcsNyAxNCw3LjY3IDE0LDguNSBDMTQsOS4zMyAxNC42NywxMCAxNS41LDEwIEMxNi4zMywxMCAxNyw5LjMzIDE3LDguNSBaIE0yMCwyIEwxMywyIEwxMyw0IEwyMCw0IEwyMCwxMSBMMjIsMTEgTDIyLDQgQzIyLDIuOSAyMS4xLDIgMjAsMiBaIE0yMCwyMCBMMTMsMjAgTDEzLDIyIEwyMCwyMiBDMjEuMSwyMiAyMiwyMS4xIDIyLDIwIEwyMiwxMyBMMjAsMTMgTDIwLDIwIFogTTQsMTMgTDIsMTMgTDIsMjAgQzIsMjEuMSAyLjksMjIgNCwyMiBMMTEsMjIgTDExLDIwIEw0LDIwIEw0LDEzIFoiIGlkPSJwYXRoLTEiPjwvcGF0aD4KICAgIDwvZGVmcz4KICAgIDxnIGlkPSJpYy1udHAtYmFja2dyb3VuZCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPG1hc2sgaWQ9Im1hc2stMiIgZmlsbD0id2hpdGUiPgogICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgIDwvbWFzaz4KICAgICAgICA8dXNlIGlkPSJTaGFwZSIgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJub256ZXJvIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgIDwvZz4KPC9zdmc+);
}

#colors-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjRweCIgaGVpZ2h0PSIyNHB4IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDU0LjEgKDc2NDkwKSAtIGh0dHBzOi8vc2tldGNoYXBwLmNvbSAtLT4KICAgIDx0aXRsZT5pYy1udHAtY29sb3JzPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+CiAgICAgICAgPHBhdGggZD0iTTEyLDMgQzcuMDMsMyAzLDcuMDMgMywxMiBDMywxNi45NyA3LjAzLDIxIDEyLDIxIEMxMi44MywyMSAxMy41LDIwLjMzIDEzLjUsMTkuNSBDMTMuNSwxOS4xMSAxMy4zNSwxOC43NiAxMy4xMSwxOC40OSBDMTIuODgsMTguMjMgMTIuNzMsMTcuODggMTIuNzMsMTcuNSBDMTIuNzMsMTYuNjcgMTMuNCwxNiAxNC4yMywxNiBMMTYsMTYgQzE4Ljc2LDE2IDIxLDEzLjc2IDIxLDExIEMyMSw2LjU4IDE2Ljk3LDMgMTIsMyBaIE02LjUsMTIgQzUuNjcsMTIgNSwxMS4zMyA1LDEwLjUgQzUsOS42NyA1LjY3LDkgNi41LDkgQzcuMzMsOSA4LDkuNjcgOCwxMC41IEM4LDExLjMzIDcuMzMsMTIgNi41LDEyIFogTTkuNSw4IEM4LjY3LDggOCw3LjMzIDgsNi41IEM4LDUuNjcgOC42Nyw1IDkuNSw1IEMxMC4zMyw1IDExLDUuNjcgMTEsNi41IEMxMSw3LjMzIDEwLjMzLDggOS41LDggWiBNMTQuNSw4IEMxMy42Nyw4IDEzLDcuMzMgMTMsNi41IEMxMyw1LjY3IDEzLjY3LDUgMTQuNSw1IEMxNS4zMyw1IDE2LDUuNjcgMTYsNi41IEMxNiw3LjMzIDE1LjMzLDggMTQuNSw4IFogTTE3LjUsMTIgQzE2LjY3LDEyIDE2LDExLjMzIDE2LDEwLjUgQzE2LDkuNjcgMTYuNjcsOSAxNy41LDkgQzE4LjMzLDkgMTksOS42NyAxOSwxMC41IEMxOSwxMS4zMyAxOC4zMywxMiAxNy41LDEyIFoiIGlkPSJwYXRoLTEiPjwvcGF0aD4KICAgIDwvZGVmcz4KICAgIDxnIGlkPSJpYy1udHAtY29sb3JzIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8bWFzayBpZD0ibWFzay0yIiBmaWxsPSJ3aGl0ZSI+CiAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj0iI3BhdGgtMSI+PC91c2U+CiAgICAgICAgPC9tYXNrPgogICAgICAgIDx1c2UgaWQ9IlNoYXBlIiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgPC9nPgo8L3N2Zz4=);
}

.menu-option-label {
  display: inline-block;
  height: 32px;
  line-height: 32px;
  margin-inline-start: 16px;
  max-width: 125px;
  overflow: hidden;
  text-overflow: ellipsis;
  user-select: none;
  white-space: nowrap;
}

#menu-header {
  display: flex;
  height: 80px;
  line-height: 80px;
  padding-inline-end: 24px;
}

#menu-title {
  font-size: 16px;
  user-select: none;
  width: fit-content;
}

#menu-footer {
  border-top: 1px solid rgb(var(--GG200-rgb));
  bottom: 0;
  box-sizing: border-box;
  color: rgb(var(--GG800-rgb));
  display: flex;
  height: 64px;
  justify-content: flex-end;
  left: 0;
  padding-inline-start: 0;
  position: absolute;
  text-align: end;
  user-select: none;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  #menu-footer {
    border-color: rgba(255, 255, 255, .1);
  }
}

#menu-footer > button {
  height: 32px;
  line-height: 32px;
}

#menu-done {
  margin-inline-end: 16px;
}

#menu-cancel {
  margin-inline-end: 8px;
}

#menu-contents {
  display: inline-block;
  height: 464px;
  margin-inline-start: 40px;
  position: relative;
  width: 568px;
}

.menu-panel {
  height: 384px;
  left: 0;
  /* Pad the content by 5px top/left. This will prevent the focus outline on
   * tiles from being cut off by overflow-y. */
  margin-inline-start: -5px;
  margin-top: -5px;
  overflow-y: auto;
  padding-inline-start: 5px;
  padding-top: 5px;
  position: absolute;
  top: 80px;
  visibility: hidden;
  width: 100%;
}

.menu-panel.menu-shown {
  visibility: visible;
}

#backgrounds-menu .bg-sel-tile-bg,
#backgrounds-image-menu .bg-sel-tile-bg {
  border-radius: 4px;
  height: 176px;
  margin-bottom: 45px;
  margin-inline-end: 8px;
  margin-inline-start: 0;
  margin-top: 0;
  width: 176px;
}

/* Remove left/right spacing from the last tile in each row. */
#backgrounds-menu .bg-sel-tile-bg:nth-of-type(3n),
#backgrounds-image-menu .bg-sel-tile-bg:nth-of-type(3n) {
  margin-inline-end: 0;
}

#backgrounds-image-menu .bg-sel-tile-bg {
  margin-bottom: 8px;
}

#backgrounds-menu .bg-sel-tile-bg.selected .bg-sel-tile,
#backgrounds-image-menu .bg-sel-tile-bg.selected .bg-sel-tile {
  box-shadow: 0 1px 3px 0 rgba(var(--GG800-rgb), .3),
      0 4px 8px 3px rgba(var(--GG800-rgb), .15);
  height: 144px;
  margin: 16px 16px 0 16px;
  width: 144px;
}

@media (prefers-color-scheme: dark) {
  #backgrounds-menu .bg-sel-tile-bg.selected .bg-sel-tile,
  #backgrounds-image-menu .bg-sel-tile-bg.selected .bg-sel-tile {
    box-shadow: var(--dark-mode-shadow);
  }
}

#customization-menu.using-mouse-nav,
.using-mouse-nav .bg-sel-tile:focus {
  outline: none;
}

#backgrounds-menu .bg-sel-tile,
#backgrounds-image-menu .bg-sel-tile {
  background-position: center;
  border-radius: 4px;
  cursor: pointer;
}

#customization-menu .bg-sel-tile-title {
  background-color: unset;
  color: rgb(var(--GG700-rgb));
  font-size: 13px;
  margin-bottom: -34px;
  min-height: 30px;
  padding: 0;
}

@media (prefers-color-scheme: dark) {
  #customization-menu .bg-sel-tile-title {
    color: rgb(var(--GG200-rgb));
  }
}

#backgrounds-default.bg-sel-tile-bg {
  background-color: white;
  height: 176px;
  width: 176px;
}

@media (prefers-color-scheme: dark) {
  #backgrounds-default.bg-sel-tile-bg {
    background-color: transparent;
  }
}

#backgrounds-menu .bg-sel-tile-bg.selected,
#backgrounds-image-menu .bg-sel-tile-bg.selected  {
  background-color: rgba(var(--GB900-rgb), .08);
}

@media (prefers-color-scheme: dark) {
  #backgrounds-default.selected,
  #backgrounds-menu .bg-sel-tile-bg.selected,
  #backgrounds-image-menu .bg-sel-tile-bg.selected {
    background-color: rgba(var(--GB200-rgb), .1);
  }
}

#backgrounds-menu,
#colors-menu {
  /* Remove extra spacing between inline-block elements. */
  font-size: 0;
}

#backgrounds-upload.bg-sel-tile-bg {
  background-color: transparent;
  vertical-align: top;
}

#menu-back {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6Ii8+PC9zdmc+);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 20px;
  background-color: rgb(var(--GG900-rgb));
  cursor: pointer;
  height: 20px;
  margin-inline-start: 8px;
  margin-top: 8px;
  outline: none;
  width: 20px;
}

@media (prefers-color-scheme: dark) {
  #menu-back {
    background-color: rgb(var(--GG200-rgb));
  }
}

#menu-back-circle {
  border-radius: 50%;
  display: none;
  height: 36px;
  margin-inline-end: 4px;
  margin-inline-start: -12px;
  margin-top: 22px;
  outline: none;
  width: 36px;
}

.on-img-menu #menu-back-circle {
  display: inline-block;
}

#menu-back-circle:active,
#menu-back-circle:focus {
  background: rgb(var(--GG300-rgb));
  background-position: center;
  background-size: 36px 36px;
}

@media (prefers-color-scheme: dark) {
  #menu-back-circle:active,
  #menu-back-circle:focus {
    background: rgb(var(--GG800-rgb));
  }

  #menu-back {
    background-color: rgb(var(--GG200-rgb));
  }
}

html[dir=rtl] #menu-back {
  transform: scaleX(-1);
}

#backgrounds-upload-icon {
  background: white;
  border: 1px solid rgb(var(--GG300-rgb));
  box-sizing: border-box;
  display: inline-block;
  left: 0;
  opacity: 1;
  top: 0;
}

@media (prefers-color-scheme: dark) {
  #backgrounds-upload-icon {
    background-color: rgb(var(--dark-mode-bg-rgb));
    border-color: rgb(var(--GG700-rgb));
  }
}

#backgrounds-upload-arrow {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGcgZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0zIDEydjJoMTB2LTJ6Ii8+PHBhdGggZD0iTTMgNi44NDZoMi45OVYxMWgzLjk5NlY2Ljg0NkgxM0w4IDJ6Ii8+PC9nPjwvc3ZnPg==);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background: 32px 32px rgb(var(--GG700-rgb));
  height: 32px;
  margin: 61px auto 8px;
  width: 32px;
}

.selected #backgrounds-upload-arrow {
  margin-top: 45px;
}

#backgrounds-upload-text {
  color: rgb(var(--GG700-rgb));
  font-size: 13px;
  text-align: center;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  #backgrounds-upload-text {
    color: inherit;
  }
}

#customization-menu .bg-sel-tile .selected-circle {
  height: 20px;
  left: initial;
  right: 10px;
  top: 10px;
  width: 20px;
}

html[dir=rtl] #customization-menu .bg-sel-tile .selected-circle {
  left: 10px;
  right: initial;
}

#customization-menu .bg-sel-tile .selected-check {
  height: 24px;
  left: initial;
  right: 9px;
  top: 7px;
  width: 24px;
}

html[dir=rtl] #customization-menu .bg-sel-tile .selected-check {
  left: 9px;
  right: initial;
}

#backgrounds-default-icon {
  background-color: white;
  background-repeat: no-repeat;
  border: 1px solid rgb(var(--GG300-rgb));
  box-sizing: border-box;
  margin: auto;
  opacity: 1;
}

@media (prefers-color-scheme: dark) {
  #backgrounds-default-icon {
    background-color: rgb(var(--dark-mode-dialog-rgb));
    border-color: rgb(var(--GG700-rgb));
  }

  .selected #backgrounds-default-icon {
    border-color: transparent;
  }
}

.mini-page {
  margin: auto;
  padding-top: 26px;
  width: fit-content;
}

.mini-header {
  -webkit-mask-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTMwcHgiIGhlaWdodD0iNDBweCIgdmlld0JveD0iMCAwIDEzMCA0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTQuMSAoNzY0OTApIC0gaHR0cHM6Ly9za2V0Y2hhcHAuY29tIC0tPgogICAgPHRpdGxlPmljLW50cC1zaG9ydGN1dHMtaGVhZGVyPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9ImljLW50cC1zaG9ydGN1dHMtaGVhZGVyIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8cGF0aCBkPSJNMzkuOTcyMDAxNSwxNi45Njg1MTg1IEMzNS4yODc0MDQ3LDE2Ljk2ODUxODUgMzEuMzUxNjEyOSwxMy4xNTkyNTkzIDMxLjM1MTYxMjksOC40ODQyNTkyNiBDMzEuMzUxNjEyOSwzLjgwOTI1OTI2IDM1LjI4NzQwNDcsMCAzOS45NzIwMDE1LDAgQzQyLjU2NTQyMzUsMCA0NC40MTAwNDA2LDEuMDExNTQ5NzEgNDUuNzk4MDY5MiwyLjM0MjA1NjUzIEw0NC4xNjM0ODI4LDMuOTczMjk0MzUgQzQzLjE2ODEyMDIsMy4wNDM3NjIxOCA0MS44MTY2MTg2LDIuMzE0NzE3MzUgMzkuOTcyMDAxNSwyLjMxNDcxNzM1IEMzNi41NDc1ODg3LDIuMzE0NzE3MzUgMzMuODcxOTgwOCw1LjA2Njg2MTYgMzMuODcxOTgwOCw4LjQ4NDI1OTI2IEMzMy44NzE5ODA4LDExLjkwMDc0NTYgMzYuNTQ3NTg4NywxNC42NTM4MDEyIDM5Ljk3MjAwMTUsMTQuNjUzODAxMiBDNDIuMTkxMDIxLDE0LjY1MzgwMTIgNDMuNDUxMjA1LDEzLjc1OTgwOTkgNDQuMjYzOTMyMywxMi45NTg3NzE5IEM0NC45MzA1NTEzLDEyLjI5MzUxODUgNDUuMzU5NzQ0NCwxMS4zNDU3NjAyIDQ1LjUyNDExNjIsMTAuMDQyNTkyNiBMMzkuOTcyMDAxNSwxMC4wNDI1OTI2IEwzOS45NzIwMDE1LDcuNzE4NzYyMTggTDQ3Ljc4ODc5NDYsNy43MTg3NjIxOCBDNDcuODcwOTgwNSw4LjEyODg0OTkgNDcuOTE2NjM5Myw4LjYzMDA2ODIzIDQ3LjkxNjYzOTMsOS4xNjc3Mzg3OSBDNDcuOTE2NjM5MywxMC45MDgzMzMzIDQ3LjQ0MTc4NzQsMTMuMDU5MDE1NiA0NS45MDc2NTA0LDE0LjU5MDAwOTcgQzQ0LjQxMDA0MDYsMTYuMTM5MjMgNDIuNTEwNjMyOSwxNi45Njg1MTg1IDM5Ljk3MjAwMTUsMTYuOTY4NTE4NSBaIE01Ny43NjIzNDQ5LDExLjYwMTkwNjkgQzU3Ljc2MjM0NDksOS42MTg2MDE0MSA1Ni4zNTI4MzMzLDguMjY4ODUxODMgNTQuNzIzNjU3Niw4LjI2ODg1MTgzIEM1My4wOTQ0ODE5LDguMjY4ODUxODMgNTEuNjg0OTcwNCw5LjYyNzc4MzM4IDUxLjY4NDk3MDQsMTEuNjAxOTA2OSBDNTEuNjg0OTcwNCwxMy41NTc2NjY1IDUzLjA5NDQ4MTksMTQuOTM0OTYyIDU0LjcyMzY1NzYsMTQuOTM0OTYyIEM1Ni4zNTI4MzMzLDE0LjkzNDk2MiA1Ny43NjIzNDQ5LDEzLjU2Njg0ODUgNTcuNzYyMzQ0OSwxMS42MDE5MDY5IFogTTYwLjEzMjg4NywxMS42MDE5MDY5IEM2MC4xMzI4ODcsMTQuNzY5Njg2NiA1Ny43MDc0Mjg4LDE3LjEwMTkwNjkgNTQuNzIzNjU3NiwxNy4xMDE5MDY5IEM1MS43Mzk4ODY0LDE3LjEwMTkwNjkgNDkuMzE0NDI4MiwxNC43Njk2ODY2IDQ5LjMxNDQyODIsMTEuNjAxOTA2OSBDNDkuMzE0NDI4Miw4LjQxNTc2MzM1IDUxLjczOTg4NjQsNi4xMDE5MDY5MiA1NC43MjM2NTc2LDYuMTAxOTA2OTIgQzU3LjcwNzQyODgsNi4xMDE5MDY5MiA2MC4xMzI4ODcsOC40MTU3NjMzNSA2MC4xMzI4ODcsMTEuNjAxOTA2OSBaIE02OS44MTQ2ODc1LDExLjYwMTkwNjkgQzY5LjgxNDY4NzUsOS42MTg2MDE0MSA2OC40MDUxNzYsOC4yNjg4NTE4MyA2Ni43NzYwMDAzLDguMjY4ODUxODMgQzY1LjE0NjgyNDYsOC4yNjg4NTE4MyA2My43MzczMTMsOS42Mjc3ODMzOCA2My43MzczMTMsMTEuNjAxOTA2OSBDNjMuNzM3MzEzLDEzLjU1NzY2NjUgNjUuMTQ2ODI0NiwxNC45MzQ5NjIgNjYuNzc2MDAwMywxNC45MzQ5NjIgQzY4LjQwNTE3NiwxNC45NDQxNDQgNjkuODE0Njg3NSwxMy41NjY4NDg1IDY5LjgxNDY4NzUsMTEuNjAxOTA2OSBaIE03Mi4xNzYwNzcsMTEuNjAxOTA2OSBDNzIuMTc2MDc3LDE0Ljc2OTY4NjYgNjkuNzUwNjE4OCwxNy4xMDE5MDY5IDY2Ljc2Njg0NzYsMTcuMTAxOTA2OSBDNjMuNzkyMjI5MSwxNy4xMDE5MDY5IDYxLjM1NzYxODIsMTQuNzY5Njg2NiA2MS4zNTc2MTgyLDExLjYwMTkwNjkgQzYxLjM1NzYxODIsOC40MTU3NjMzNSA2My43ODMwNzY0LDYuMTAxOTA2OTIgNjYuNzY2ODQ3Niw2LjEwMTkwNjkyIEM2OS43NTA2MTg4LDYuMTAxOTA2OTIgNzIuMTc2MDc3LDguNDE1NzYzMzUgNzIuMTc2MDc3LDExLjYwMTkwNjkgWiBNODEuNzA5MDQ3NywxMS42MTc3Mzg4IEM4MS43MDkwNDc3LDkuNjg3NjU1MDIgODAuNDMxNTUzOSw4LjI2OTgyMDk1IDc4LjgwOTc3MTEsOC4yNjk4MjA5NSBDNzcuMTYwODA3NSw4LjI2OTgyMDk1IDc1Ljc4MzY1MTEsOS42Nzg1MDc3IDc1Ljc4MzY1MTEsMTEuNjE3NzM4OCBDNzUuNzgzNjUxMSwxMy41Mjk1MjggNzcuMTYwODA3NSwxNC45MTk5MjAxIDc4LjgwOTc3MTEsMTQuOTE5OTIwMSBDODAuNDMxNTUzOSwxNC45MTk5MjAxIDgxLjcwOTA0NzcsMTMuNTI5NTI4IDgxLjcwOTA0NzcsMTEuNjE3NzM4OCBaIE04My44MTEwMjMyLDYuNDQwMzU3NjMgTDgzLjgxMTAyMzIsMTYuMjgyODcwMyBDODMuODExMDIzMiwyMC4zMzUxMzE1IDgxLjQ0NjMwMDcsMjEuOTkwNzk1OCA3OC42NDY2ODY4LDIxLjk5MDc5NTggQzc2LjAxMDE1NzEsMjEuOTkwNzk1OCA3NC40MzQ1ODE1LDIwLjIwNzA2OTEgNzMuODM2NjA1NywxOC43NTI2NDU3IEw3NS45MTE0MDA1LDE3Ljg4MzY1MDcgQzc2LjI4Mjg3MDMsMTguNzgxMDAyNCA3Ny4xODg4OTQzLDE5LjgzMjAyOTEgNzguNjQ2Njg2OCwxOS44MzIwMjkxIEM4MC40NDE1MjAyLDE5LjgzMjAyOTEgODEuNTQ1OTYzNCwxOC43MDY5MDkyIDgxLjU0NTk2MzQsMTYuNjEyMTczNyBMODEuNTQ1OTYzNCwxNS44MjU1MDQ0IEw4MS40NjQ0MjEyLDE1LjgyNTUwNDQgQzgwLjkzMDc3MzEsMTYuNDk0MTczMyA3OS44OTY5OTk4LDE3LjA2OTUzOTUgNzguNjAxMzg1NiwxNy4wNjk1Mzk1IEM3NS44ODMzMTM4LDE3LjA2OTUzOTUgNzMuNDAwODA4MiwxNC42ODIwODk5IDczLjQwMDgwODIsMTEuNjA4NTkxNSBDNzMuNDAwODA4Miw4LjUxNjc5ODUgNzUuODkyMzc0LDYuMTAxOTA2OTIgNzguNjAxMzg1Niw2LjEwMTkwNjkyIEM3OS44OTY5OTk4LDYuMTAxOTA2OTIgODAuOTMwNzczMSw2LjY4NzMzNTE4IDgxLjQ2NDQyMTIsNy4zMjc2NDczNCBMODEuNTQ1OTYzNCw3LjMyNzY0NzM0IEw4MS41NDU5NjM0LDYuNDQwMzU3NjMgTDgzLjgxMTAyMzIsNi40NDAzNTc2MyBaIE04NS44NTIyNDE5LDE2LjY5NDQ5OTUgTDg1Ljg1MjI0MTksMC42MDE5MDY5MiBMODguMzAxNzA0MiwwLjYwMTkwNjkyIEw4OC4zMDE3MDQyLDE2LjY5NDQ5OTUgTDg1Ljg1MjI0MTksMTYuNjk0NDk5NSBaIE05MS44MzI0Nzg0LDExLjQyNzQ0OTUgTDk2LjcxOTk0LDkuMzg5MDUyMTYgQzk2LjQ0NzI5OTksOC43MDA0MDQ0MiA5NS42NDQ4ODA4LDguMjIyOTQxOTggOTQuNjg2NTM3MSw4LjIyMjk0MTk4IEM5My40NjQ2NzE3LDguMjIyOTQxOTggOTEuNzY5NTYxNCw5LjMwNjQxNDQzIDkxLjgzMjQ3ODQsMTEuNDI3NDQ5NSBaIE05Ny41Njc5NTExLDEzLjQxMDc1NSBMOTkuNDI4MTA0MywxNC42NTk1MDI5IEM5OC44MjYyOSwxNS41NTkzMzYgOTcuMzc2NDY0NywxNy4xMDE5MDY5IDk0Ljg2ODkwNTEsMTcuMTAxOTA2OSBDOTEuNzU5NTMxMiwxNy4xMDE5MDY5IDg5LjUyNjQzNTQsMTQuNjg3MDQ4OCA4OS41MjY0MzU0LDExLjYwMTkwNjkgQzg5LjUyNjQzNTQsOC4zMzMxMjU2MiA5MS43ODY4ODY0LDYuMTAxOTA2OTIgOTQuNjA0NDcxNSw2LjEwMTkwNjkyIEM5Ny40NDAyOTM1LDYuMTAxOTA2OTIgOTguODI2MjksOC4zNjk4NTM1IDk5LjI4MjIxLDkuNjAwMjM3NDcgTDk5LjUyODQwNjcsMTAuMjI0NjExNCBMOTIuMjI1NDgxNCwxMy4yNzMwMjU1IEM5Mi43ODA3OTE4LDE0LjM3NDg2MTggOTMuNjU2MTU4MSwxNC45NDQxNDQgOTQuODc4MDIzNSwxNC45NDQxNDQgQzk2LjEwMDgwMDcsMTQuOTQ0MTQ0IDk2Ljk0NzksMTQuMzI4OTUyIDk3LjU2Nzk1MTEsMTMuNDEwNzU1IFoiIGlkPSJDb21iaW5lZC1TaGFwZSIgZmlsbD0iIzAwMDAwMCI+PC9wYXRoPgogICAgICAgIDxyZWN0IGlkPSJSZWN0YW5nbGUiIGZpbGw9IiMwMDAwMDAiIHg9IjAiIHk9IjMwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjEwIiByeD0iNSI+PC9yZWN0PgogICAgPC9nPgo8L3N2Zz4=);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background-color: rgb(var(--GG300-rgb));
  height: 40px;
  width: 130px;
}

.mini-header-colorful {
  background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjEzMHB4IgogICBoZWlnaHQ9IjQwcHgiCiAgIHZpZXdCb3g9IjAgMCAxMzAgNDAiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzQ3NjUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbG9yZWQtaGVhZGVyLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4zICgyNDA1NTQ2LCAyMDE4LTAzLTExKSI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDc3MSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+aWMtbnRwLXNob3J0Y3V0cy1oZWFkZXI8L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDc2OSIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyOTciCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNjg4IgogICAgIGlkPSJuYW1lZHZpZXc0NzY3IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSI0LjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijc2LjE0NDY1MiIKICAgICBpbmtzY2FwZTpjeT0iMzIuMzE0ODE5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzNDg2IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyOTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0NzY1IiAvPgogIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTQuMSAoNzY0OTApIC0gaHR0cHM6Ly9za2V0Y2hhcHAuY29tIC0tPgogIDx0aXRsZQogICAgIGlkPSJ0aXRsZTQ3NTgiPmljLW50cC1zaG9ydGN1dHMtaGVhZGVyPC90aXRsZT4KICA8ZGVzYwogICAgIGlkPSJkZXNjNDc2MCI+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDojZDkzMDI1O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMWE3M2U4O3N0cm9rZS13aWR0aDowLjQyMDkyMzQxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAiCiAgICAgZD0ibSA1Mi43OTIxMjUsMTYuNjM4Mjc1IGMgLTEuNTU4MDUzLC0wLjY0MDcwOSAtMi40Njc5OSwtMS41Nzg3NjIgLTMuMDYzMDMyLC0zLjE1NzY3OCAtMC4yNTg0MzcsLTAuNjg1NzQ5IC0wLjMwMjg1OSwtMS4wNjQwNDEgLTAuMjUzMzQxLC0yLjE1NzM4NiAwLjA3NTU0LC0xLjY2Nzc5NzQgMC41NDQ3MzcsLTIuNzA5NzQ5NiAxLjY5MjY2NiwtMy43NTg4OTIyIDEuMTI4OTMsLTEuMDMxNzc4NyAyLjExMzMwOSwtMS4zNjcwMDYzIDMuNzk5NTA1LC0xLjI5MzkxMTQgMS4xNjQ2NTcsMC4wNTA0ODcgMS40MzkxMDgsMC4xMTgwODIyIDIuMjU3NzM0LDAuNTU2MDY0OCAxLjcwMDIzMywwLjkwOTY2MDMgMi42NTIyNzYsMi40MTUyODgyIDIuNzc4NjE2LDQuMzk0Mjk1OCAwLjE2NjAzLDIuNjAwNzIzIC0xLjMzOTQ5NCw0Ljg0Njg1MyAtMy43MzExODEsNS41NjY2NDUgLTEuMDY3NzU0LDAuMzIxMzQ3IC0yLjQ4NDQ1OCwwLjI2MDY0OSAtMy40ODA5NjcsLTAuMTQ5MTM4IHogbSAzLjY3NzQ2MSwtMi4yMzg5ODcgQyA1OC4xNDE4MDQsMTMuMDU1MDE0IDU4LjI3Nzg1OCwxMC40NzcwOTQgNTYuNzUwODcsOS4wNjk1NjYyIDU1LjcwNTU2OCw4LjEwNjA0IDU0LjU0ODE3NCw3Ljk0NzYwMzEgNTMuMjgwNjY1LDguNTk0NTI2NCBjIC0wLjY2NDgwMywwLjMzOTMwODQgLTAuOTQ4MjIsMC42NTY1NzY1IC0xLjMyMTM0MiwxLjQ3OTE2NDYgLTAuNTk4NDg1LDEuMzE5NDI0IC0wLjMxMTIzNywzLjA1NTAzMiAwLjY2NzMyMiw0LjAzMjA4MyAwLjY1Mzg1MSwwLjY1Mjg0MyAxLjE4ODIyMiwwLjgzNjEyMSAyLjI5NjE0NSwwLjc4NzUyNyAwLjg0NDQ1NywtMC4wMzcwNCAxLjA2NjU5MiwtMC4xMDc5ODMgMS41NDY3OTYsLTAuNDk0MDEzIHoiCiAgICAgaWQ9InBhdGg0Nzc1IgogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDojZDkzMDI1O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMWE3M2U4O3N0cm9rZS13aWR0aDowLjQyMDkyMzQxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAiCiAgICAgZD0ibSA5My4yNDM2MzgsMTYuNzkxMTg3IGMgLTEuMzIyMzg1LC0wLjQzMTY0NiAtMi42MDU0MzUsLTEuNTg4MDkgLTMuMTcwNDY0LC0yLjg1NzYxOCAtMC40NDM0MjQsLTAuOTk2MzAyIC0wLjUzNzc2NiwtMy4xMTQxNzQgLTAuMTg2MTQ2LC00LjE3ODczMjcgMC40NTk3MzEsLTEuMzkxODcwNyAxLjI4OTI3NCwtMi40MDM3MzggMi40OTg2MjgsLTMuMDQ3Nzk5OCAwLjY1NjMxNiwtMC4zNDk1MzE1IDAuODk3MDc4LC0wLjM5MjI4NDUgMi4yMDk3MDksLTAuMzkyMzg1NiAxLjc1MDE1NCwtMS4zNDdlLTQgMi4yNjMwNzgsMC4yMTE3NDEgMy4zNjUzMjIsMS4zOTAxMjg2IDAuNzM5MDIyLDAuNzkwMDc0OCAxLjU0NzEsMi4zMTIyNTg1IDEuMzI4NTU1LDIuNTAyNjEyNSAtMC4wNjk5MywwLjA2MDkxIC0xLjcwMTU2MywwLjc2MTQzNyAtMy42MjU4NTEsMS41NTY3MjggLTEuOTI0Mjg4LDAuNzk1MjkxIC0zLjQ5ODcwNSwxLjUwMTg1MyAtMy40OTg3MDUsMS41NzAxMzggMCwwLjI4NTQ2MSAxLjA4OTYsMS4yOTk5NDEgMS41NjQ1NTUsMS40NTY2OTEgMC42NDQ5MDcsMC4yMTI4MzggMS43NzAyNTQsMC4yMDk5ODMgMi4zNDM2NTUsLTAuMDA1OSAwLjI0MDY1MiwtMC4wOTA2MiAwLjY4MzY2MiwtMC40MDM4NzYgMC45ODQ0NjYsLTAuNjk2MTE1IGwgMC41NDY5MTYsLTAuNTMxMzQzIDAuODE1NzM4LDAuNTQxNjE5IGMgMC40NDg2NTYsMC4yOTc4OSAwLjgxNTczNywwLjYwMTA5IDAuODE1NzM3LDAuNjczNzc3IDAsMC4yNDQ2MzUgLTEuNDU4MDIxLDEuNDQ1Njc0IC0yLjE2ODQ1NSwxLjc4NjI1NyAtMC44NzM5MDQsMC40MTg5NSAtMi44NzgzMTcsMC41NDA1NjIgLTMuODIzNjYsMC4yMzE5ODkgeiBtIDEuMzE0ODk5LC02LjQyNDY4NiBjIDEuMjU3MzEyLC0wLjUzMTExODQgMi4xNzI4OCwtMS4wMDA4Mzg3IDIuMTcyODgsLTEuMTE0NzY4OCAwLC0wLjM0NzQxMDggLTAuOTU2NTMxLC0wLjk0Mzg1OTEgLTEuNjcwNjUsLTEuMDQxNzQgLTAuOTMyOTUxLC0wLjEyNzg3NTEgLTEuODY0NDYxLDAuMjQyMTM1IC0yLjUxMDkxOSwwLjk5NzM3NiAtMC40NDkyMDYsMC41MjQ3OTYyIC0wLjgyNzEwNCwxLjQ4NTk5NTggLTAuODI3MTA0LDIuMTAzNzcyOCAwLDAuMjY2MjgyIC0wLjE0NTc1MywwLjMxNDgzNSAyLjgzNTc5MywtMC45NDQ2NCB6IgogICAgIGlkPSJwYXRoNDc3NyIKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6IzFlOGUzZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzFhNzNlODtzdHJva2Utd2lkdGg6MC40MjA5MjM0MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTowIgogICAgIGQ9Ik0gODUuOTc3NTAxLDguNTk3OTAzMSBWIDAuNjQyOTUxODUgaCAxLjEwNDg1NSAxLjEwNDg1NCBWIDguNTk3OTAzMSAxNi41NTI4NTQgaCAtMS4xMDQ4NTQgLTEuMTA0ODU1IHoiCiAgICAgaWQ9InBhdGg0Nzc5IgogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDojMWE3M2U4O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMWE3M2U4O3N0cm9rZS13aWR0aDowLjQyMDkyMzQxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAiCiAgICAgZD0ibSA3Ni44NTM0NjIsMjEuNTk4NjU4IGMgLTAuMzQzMjE0LC0wLjE0MTk1NiAtMC45MDk4NDcsLTAuNDYyNzI2IC0xLjI1OTE4NSwtMC43MTI4MjMgLTAuNjQ1MzE2LC0wLjQ2MTk5MiAtMS42MjUwMTYsLTEuNzYzMjUxIC0xLjUzMzcyNCwtMi4wMzcxMjYgMC4wMjc1NCwtMC4wODI2MiAwLjQzNzgyNiwtMC4zMDYwOTYgMC45MTE3NDcsLTAuNDk2NjEgMC44MjIyMTcsLTAuMzMwNTI3IDAuODY4MzA2LC0wLjMzNDExOSAxLjAwNjU1MSwtMC4wNzg0NSAwLjA3OTY4LDAuMTQ3MzY4IDAuMzk0MTk0LDAuNTA4NTg3IDAuNjk4OTEzLDAuODAyNzEgMC45OTYxNTUsMC45NjE1MTcgMi42OTEyMDksMS4wNzg5ODYgMy44MzM0MTksMC4yNjU2NiAwLjU2NjU0NSwtMC40MDM0MTUgMC45ODc0NSwtMS4zNjc2NCAxLjEwNDk5OCwtMi41MzEzNjcgMC4xMDk1NDMsLTEuMDg0NDggLTMuMzllLTQsLTEuMjI0MzQyIC0wLjU1NTU1NSwtMC43MDcwODYgLTAuNjQzODkyLDAuNTk5ODc2IC0xLjMyNDk0NCwwLjgxNjY0IC0yLjU1MTk0LDAuODEyMjI4IC0xLjA1NDUyOCwtMC4wMDM4IC0xLjI3NjQ3MiwtMC4wNTY4NSAtMi4xMDk2NzIsLTAuNTA0MzExIC0zLjg2MjE3NCwtMi4wNzQxNTMgLTMuODY2OTE3LC03LjU1MDUwNTMgLTAuMDA4NCwtOS42NTA1OTU1IDEuMDk4MzQ3LC0wLjU5Nzc5NTggMi42ODkyOTMsLTAuNjk0MzcxNSAzLjc3MTI0NywtMC4yMjg5Mjc0IDAuNDE2MDUsMC4xNzg5ODAxIDAuODcwODk0LDAuNDUxODcxIDEuMDEwNzYyLDAuNjA2NDI0MSAwLjM1ODYzMywwLjM5NjI4NTIgMC41MDMyNzEsMC4zNTAwMzI5IDAuNTAzMjcxLC0wLjE2MDkzNjEgViA2LjUzNTUwODQgaCAxLjAzMTE5NyAxLjAzMTE5OCB2IDUuMjk2MDQ5NiBjIDAsMy4zNjMzNTEgLTAuMDYwNSw1LjU4MDkzNCAtMC4xNjU3ODIsNi4wNzY2OTkgLTAuMzU4NzEyLDEuNjg5MTM0IC0xLjI4OTQ3NSwyLjk1NDMxMiAtMi42MTEyMDgsMy41NDkzOTIgLTAuOTU0NzgsMC40Mjk4NjYgLTMuMjIxMzgxLDAuNTA3NjcyIC00LjEwNzg3OCwwLjE0MTAwOSB6IG0gMy4wMDgyODcsLTYuODIyOTQyIGMgMS4xMzE3MTcsLTAuNDI3NTkzIDEuODY4NDkzLC0xLjY2OTYwNiAxLjg3MzI4OSwtMy4xNTc4NzggMC4wMDI4LC0wLjg2NDc2IC0wLjA2NTksLTEuMTU3ODA1IC0wLjQyNTU4OSwtMS44MTU2MjM0IC0wLjY3NjM0MywtMS4yMzY5NDQxIC0xLjkyMDI5NiwtMS44MTY1NTg0IC0zLjIwNDU5NywtMS40OTMxNjc3IC0xLjQ1MTE0NSwwLjM2NTQwMjUgLTIuMzIxNDc0LDEuNTk3NTM5IC0yLjMyMTQ3NCwzLjI4NjU0MjEgMCwxLjUzNzE2NyAwLjY5ODAzOSwyLjY4MzE3NCAxLjkzNjQ2NSwzLjE3OTE5NSAwLjQ3NTUwNCwwLjE5MDQ1MSAxLjYzODk2MywwLjE5MDk1NyAyLjE0MTkwNiw5LjI4ZS00IHoiCiAgICAgaWQ9InBhdGg1MzI0IgogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDojMWE3M2U4O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMWE3M2U4O3N0cm9rZS13aWR0aDowLjQyMDkyMzQxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAiCiAgICAgZD0ibSAzNy43MDI3MzIsMTYuNTcyMDYxIGMgLTMuNjA4MjI0LC0xLjAzODY1IC02LjI2MDg0MSwtNC40Mzg3MTMgLTYuMjYwODQxLC04LjAyNDk5OTMgMCwtMi4yODY2MDM5IDAuNzk4Mjk5LC00LjE2NTQyNTkgMi40ODkxMjcsLTUuODU4MjM3NyAzLjExNzkyMSwtMy4xMjE1Nzc5NSA3LjY5ODE1NCwtMy40OTMyMzExOCAxMS4wOTc5NDMsLTAuOTAwNTE4OSBsIDAuNzA0NTQ4LDAuNTM3Mjk1NyAtMC43NjAwMTIsMC43Njk1NzIgLTAuNzYwMDEzLDAuNzY5NTcyIC0wLjQ2MjYyNywtMC4zNTI4NjMgQyA0My40OTY0MTIsMy4zMTc4MDcgNDIuODkzMjc5LDIuOTc0MTMxMiA0Mi40MTA1NjIsMi43NDgxNTc1IDQxLjYyNDExMSwyLjM3OTk5NzcgNDEuMzcxMzQsMi4zMzcyODQzIDM5Ljk3ODQ1NywyLjMzNzE3OTEgYyAtMS41MDA1ODgsLTEuMTMxZS00IC0xLjU5MzMyLDAuMDE5MSAtMi42NzY5MzEsMC41NTQ2NDk5IC0zLjgzOTAxLDEuODk3MzQxOSAtNC42NzAzNDMsNy4wMTk0MjAzIC0xLjYzMjM1NiwxMC4wNTc0MDggMi45Mjg0NjYsMi45Mjg0NjUgOC40OTMwNjIsMS45ODg2MzQgOS42MDg1MjksLTEuNjIyODI5IDAuMTY4NDgsLTAuNTQ1NDc1IDAuMzA2MzI3LC0xLjA4NDIyNyAwLjMwNjMyNywtMS4xOTcyMjYgMCwtMC4xNjg1MiAtMC41MDMxNiwtMC4yMDU0NTM2IC0yLjc5ODk2NCwtMC4yMDU0NTM2IEggMzkuOTg2MDk4IFYgOC44MTg4NzQgNy43MTQwMTk3IGggMy45MDM4MTggMy45MDM4MTkgdiAxLjMxODU3NDIgYyAwLDAuNzI1MjE1OCAtMC4wNzMyNiwxLjY2OTg2NjEgLTAuMTYyNzk0LDIuMDk5MjIzMSAtMC41NDgyMjQsMi42Mjg5MDUgLTIuNjYwNzI2LDQuNzgwNDc1IC01LjM4Mjc0Miw1LjQ4MjI5MiAtMS4xOTc3MjMsMC4zMDg4MDggLTMuMzk3MjkzLDAuMjg4NDYxIC00LjU0NTQ2NywtMC4wNDIwNSB6IgogICAgIGlkPSJwYXRoNTMyNiIKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6I2Y5YWIwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzFhNzNlODtzdHJva2Utd2lkdGg6MC40MjA5MjM0MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTowIgogICAgIGQ9Im0gNjQuODY2MzA2LDE2LjY0Nzk4OSBjIC0xLjQzOTY1OSwtMC41OTIyMjEgLTIuMTYwNTU1LC0xLjI1MjM4NCAtMi45MDE3NjcsLTIuNjU3MyAtMC4zNjE0MDQsLTAuNjg1MDE3IC0wLjM5Njk1MywtMC44OTc1MTcgLTAuMzk2OTUzLC0yLjM3Mjg1MSAwLC0xLjQ3NTc4NiAwLjAzNjc1LC0xLjY5NTI4NTggMC40MTE2MywtMi40NTg2ODE3IDAuNTM1ODY5LC0xLjA5MTIyNTEgMS43NTQ2MjQsLTIuMjA4MjA4MyAyLjg2NjU5NywtMi42MjcyMjA5IDAuNjk5NjYsLTAuMjYzNjQ1NSAxLjA3NjYzLC0wLjMwOTAyOCAyLjE3MjM4OCwtMC4yNjE1MjggMS4xNjQ2NTcsMC4wNTA0ODcgMS40MzkxMDgsMC4xMTgwODIyIDIuMjU3NzM1LDAuNTU2MDY0OCAxLjY4Nzk0MywwLjkwMzA4NTUgMi42NDg0MzMsMi40Mjk3MDQ4IDIuNzgyODMzLDQuNDIzMDgxOCAwLjEzMDc2OCwxLjkzOTQ5MyAtMC43MTA0MDUsMy43Mzk2NzEgLTIuMjM5NTU5LDQuNzkyODQgLTEuNDY2NjAxLDEuMDEwMDg2IC0zLjM5NjA5NiwxLjI0NjAwNyAtNC45NTI5MDQsMC42MDU1OTUgeiBtIDMuNjUzNTU4LC0yLjI0ODcwMSBjIDEuMTY2NDcsLTAuOTM3NzEgMS42Mzk3NzcsLTIuNTU4OTk3IDEuMTY0NjU1LC0zLjk4OTQ1NyAtMC44OTAxMjYsLTIuNjc5OTE4NSAtNC4zMTUxMDIsLTIuOTg0ODE0MyAtNS41NzU3NjgsLTAuNDk2MzYyMyAtMC43MTIzMTcsMS40MDYwNTUzIC0wLjUwNTU3NCwzLjAzMjc1NTMgMC41MjMwNjUsNC4xMTU1ODQzIDAuNjg5MDQ2LDAuNzI1MzQ2IDEuMjAwODM0LDAuOTE0MjY3IDIuMzQxMjUyLDAuODY0MjQ4IDAuODQ0NDU3LC0wLjAzNzA0IDEuMDY2NTkyLC0wLjEwNzk4MyAxLjU0Njc5NiwtMC40OTQwMTMgeiIKICAgICBpZD0icGF0aDUzMjgiCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOiNkYWRjZTA7ZmlsbC1vcGFjaXR5OjA7c3Ryb2tlOiMxYTczZTg7c3Ryb2tlLXdpZHRoOjAuNDIwOTIzNDE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MCIKICAgICBkPSJNIDMuNzU4ODYxNywzOS43NDIyMTQgQyAyLjc0MzQ4NzEsMzkuNDY4NjQ3IDIuMTcxMTI5NywzOS4xMTIxOCAxLjM5NDU4ODksMzguMjY5NzMyIDAuNDI4NDQzMzUsMzcuMjIxNTg4IDAuMTM2OTk4MjEsMzYuNDUwMjg1IDAuMTQ2NjUxMDIsMzQuOTY3MDk0IGMgMC4wMDY1NjMsLTEuMDA4NDY5IDAuMDc3MDUzMywtMS4zOTU1MjIgMC4zNjIxODg4OCwtMS45ODg3MzggMC41MTkxNTg3LC0xLjA4MDA5NiAxLjY3MTc3NSwtMi4xNzIyMzkgMi42OTc1NjYsLTIuNTU2MDM3IGwgMC44NDk4ODIsLTAuMzE3OTgxIDYxLjE2NDcwOTEsMC4wMzc1MyA2MS4xNjQ3MTMsMC4wMzc1MyAwLjc3ODQzLDAuNDEwMTQ1IGMgMS45OTU3LDEuMDUxNTExIDMuMDQyMDYsMy4xMjM3NjggMi42NTY2OSw1LjI2MTQ0MSAtMC4yOTQyNSwxLjYzMjIwNCAtMS4zMTI3NCwyLjkxNzgyMiAtMi45MDE4NCwzLjY2MjkzNiBsIC0wLjgyNzkxLDAuMzg4MTk3IC02MC43NjY5ODksMC4wMjc1OSBDIDEyLjQ1MzI0LDM5Ljk1MzY5NSA0LjQ1MzM3NzIsMzkuOTI5MzM0IDMuNzU4ODYxNywzOS43NDIyMTQgWiIKICAgICBpZD0icGF0aDUzMzAiCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOiNkYWRjZTA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTk1Mjc1NjQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MCIKICAgICBkPSJNIDMuNTg2MzY4NywzOS42MTA3NjYgQyAzLjIwMTAzNCwzOS40NzEzMiAyLjUxOTk1NTQsMzkuMDUwMTE2IDIuMDcyODYxLDM4LjY3NDc1NyAtMC42MzQ1MTg3LDM2LjQwMTc3NCAtMC4xNjA0NjQxLDMyLjIwNTYzNCAyLjk4MDUzMzEsMzAuNjQwNDA5IEwgNC4wNTYyODc5LDMwLjEwNDMzOCBIIDY0Ljk4MDc5NSBjIDQ1LjYzMjk2NSwwIDYxLjEyNzA1NSwwLjA2MDY4IDYxLjczMTUwNSwwLjI0MTc4MyAwLjQ0Mzg1LDAuMTMyOTggMS4xNzMwNSwwLjU1NTEwNiAxLjYyMDQ0LDAuOTM4MDU3IDIuODM3NCwyLjQyODcxMiAxLjk0OTgsNy4wNDg3MDkgLTEuNTk3NDIsOC4zMTQ1ODYgLTEuMDk5ODcsMC4zOTI1MDMgLTEyMi4wNjQ5MzE1LDAuNDA0MjkyIC0xMjMuMTQ4OTUxMywwLjAxMiB6IgogICAgIGlkPSJwYXRoNTM5MSIKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgo8L3N2Zz4K);
  background-position: center;
  background-repeat: no-repeat;
  background-size: 100%;
  height: 40px;
  width: 130px;
}

@media (prefers-color-scheme: dark) {
  .mini-header-colorful {
    -webkit-mask-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgd2lkdGg9IjEzMHB4IgogICBoZWlnaHQ9IjQwcHgiCiAgIHZpZXdCb3g9IjAgMCAxMzAgNDAiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzQ3NjUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvbG9yZWQtaGVhZGVyLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC45Mi4zICgyNDA1NTQ2LCAyMDE4LTAzLTExKSI+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNDc3MSI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+aWMtbnRwLXNob3J0Y3V0cy1oZWFkZXI8L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzNDc2OSIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjEyOTciCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iNjg4IgogICAgIGlkPSJuYW1lZHZpZXc0NzY3IgogICAgIHNob3dncmlkPSJmYWxzZSIKICAgICBpbmtzY2FwZTp6b29tPSI0LjgiCiAgICAgaW5rc2NhcGU6Y3g9Ijc2LjE0NDY1MiIKICAgICBpbmtzY2FwZTpjeT0iMzIuMzE0ODE5IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIzNDg2IgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyOTgiCiAgICAgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0iMCIKICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmc0NzY1IiAvPgogIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTQuMSAoNzY0OTApIC0gaHR0cHM6Ly9za2V0Y2hhcHAuY29tIC0tPgogIDx0aXRsZQogICAgIGlkPSJ0aXRsZTQ3NTgiPmljLW50cC1zaG9ydGN1dHMtaGVhZGVyPC90aXRsZT4KICA8ZGVzYwogICAgIGlkPSJkZXNjNDc2MCI+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDojZDkzMDI1O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMWE3M2U4O3N0cm9rZS13aWR0aDowLjQyMDkyMzQxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAiCiAgICAgZD0ibSA1Mi43OTIxMjUsMTYuNjM4Mjc1IGMgLTEuNTU4MDUzLC0wLjY0MDcwOSAtMi40Njc5OSwtMS41Nzg3NjIgLTMuMDYzMDMyLC0zLjE1NzY3OCAtMC4yNTg0MzcsLTAuNjg1NzQ5IC0wLjMwMjg1OSwtMS4wNjQwNDEgLTAuMjUzMzQxLC0yLjE1NzM4NiAwLjA3NTU0LC0xLjY2Nzc5NzQgMC41NDQ3MzcsLTIuNzA5NzQ5NiAxLjY5MjY2NiwtMy43NTg4OTIyIDEuMTI4OTMsLTEuMDMxNzc4NyAyLjExMzMwOSwtMS4zNjcwMDYzIDMuNzk5NTA1LC0xLjI5MzkxMTQgMS4xNjQ2NTcsMC4wNTA0ODcgMS40MzkxMDgsMC4xMTgwODIyIDIuMjU3NzM0LDAuNTU2MDY0OCAxLjcwMDIzMywwLjkwOTY2MDMgMi42NTIyNzYsMi40MTUyODgyIDIuNzc4NjE2LDQuMzk0Mjk1OCAwLjE2NjAzLDIuNjAwNzIzIC0xLjMzOTQ5NCw0Ljg0Njg1MyAtMy43MzExODEsNS41NjY2NDUgLTEuMDY3NzU0LDAuMzIxMzQ3IC0yLjQ4NDQ1OCwwLjI2MDY0OSAtMy40ODA5NjcsLTAuMTQ5MTM4IHogbSAzLjY3NzQ2MSwtMi4yMzg5ODcgQyA1OC4xNDE4MDQsMTMuMDU1MDE0IDU4LjI3Nzg1OCwxMC40NzcwOTQgNTYuNzUwODcsOS4wNjk1NjYyIDU1LjcwNTU2OCw4LjEwNjA0IDU0LjU0ODE3NCw3Ljk0NzYwMzEgNTMuMjgwNjY1LDguNTk0NTI2NCBjIC0wLjY2NDgwMywwLjMzOTMwODQgLTAuOTQ4MjIsMC42NTY1NzY1IC0xLjMyMTM0MiwxLjQ3OTE2NDYgLTAuNTk4NDg1LDEuMzE5NDI0IC0wLjMxMTIzNywzLjA1NTAzMiAwLjY2NzMyMiw0LjAzMjA4MyAwLjY1Mzg1MSwwLjY1Mjg0MyAxLjE4ODIyMiwwLjgzNjEyMSAyLjI5NjE0NSwwLjc4NzUyNyAwLjg0NDQ1NywtMC4wMzcwNCAxLjA2NjU5MiwtMC4xMDc5ODMgMS41NDY3OTYsLTAuNDk0MDEzIHoiCiAgICAgaWQ9InBhdGg0Nzc1IgogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDojZDkzMDI1O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMWE3M2U4O3N0cm9rZS13aWR0aDowLjQyMDkyMzQxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAiCiAgICAgZD0ibSA5My4yNDM2MzgsMTYuNzkxMTg3IGMgLTEuMzIyMzg1LC0wLjQzMTY0NiAtMi42MDU0MzUsLTEuNTg4MDkgLTMuMTcwNDY0LC0yLjg1NzYxOCAtMC40NDM0MjQsLTAuOTk2MzAyIC0wLjUzNzc2NiwtMy4xMTQxNzQgLTAuMTg2MTQ2LC00LjE3ODczMjcgMC40NTk3MzEsLTEuMzkxODcwNyAxLjI4OTI3NCwtMi40MDM3MzggMi40OTg2MjgsLTMuMDQ3Nzk5OCAwLjY1NjMxNiwtMC4zNDk1MzE1IDAuODk3MDc4LC0wLjM5MjI4NDUgMi4yMDk3MDksLTAuMzkyMzg1NiAxLjc1MDE1NCwtMS4zNDdlLTQgMi4yNjMwNzgsMC4yMTE3NDEgMy4zNjUzMjIsMS4zOTAxMjg2IDAuNzM5MDIyLDAuNzkwMDc0OCAxLjU0NzEsMi4zMTIyNTg1IDEuMzI4NTU1LDIuNTAyNjEyNSAtMC4wNjk5MywwLjA2MDkxIC0xLjcwMTU2MywwLjc2MTQzNyAtMy42MjU4NTEsMS41NTY3MjggLTEuOTI0Mjg4LDAuNzk1MjkxIC0zLjQ5ODcwNSwxLjUwMTg1MyAtMy40OTg3MDUsMS41NzAxMzggMCwwLjI4NTQ2MSAxLjA4OTYsMS4yOTk5NDEgMS41NjQ1NTUsMS40NTY2OTEgMC42NDQ5MDcsMC4yMTI4MzggMS43NzAyNTQsMC4yMDk5ODMgMi4zNDM2NTUsLTAuMDA1OSAwLjI0MDY1MiwtMC4wOTA2MiAwLjY4MzY2MiwtMC40MDM4NzYgMC45ODQ0NjYsLTAuNjk2MTE1IGwgMC41NDY5MTYsLTAuNTMxMzQzIDAuODE1NzM4LDAuNTQxNjE5IGMgMC40NDg2NTYsMC4yOTc4OSAwLjgxNTczNywwLjYwMTA5IDAuODE1NzM3LDAuNjczNzc3IDAsMC4yNDQ2MzUgLTEuNDU4MDIxLDEuNDQ1Njc0IC0yLjE2ODQ1NSwxLjc4NjI1NyAtMC44NzM5MDQsMC40MTg5NSAtMi44NzgzMTcsMC41NDA1NjIgLTMuODIzNjYsMC4yMzE5ODkgeiBtIDEuMzE0ODk5LC02LjQyNDY4NiBjIDEuMjU3MzEyLC0wLjUzMTExODQgMi4xNzI4OCwtMS4wMDA4Mzg3IDIuMTcyODgsLTEuMTE0NzY4OCAwLC0wLjM0NzQxMDggLTAuOTU2NTMxLC0wLjk0Mzg1OTEgLTEuNjcwNjUsLTEuMDQxNzQgLTAuOTMyOTUxLC0wLjEyNzg3NTEgLTEuODY0NDYxLDAuMjQyMTM1IC0yLjUxMDkxOSwwLjk5NzM3NiAtMC40NDkyMDYsMC41MjQ3OTYyIC0wLjgyNzEwNCwxLjQ4NTk5NTggLTAuODI3MTA0LDIuMTAzNzcyOCAwLDAuMjY2MjgyIC0wLjE0NTc1MywwLjMxNDgzNSAyLjgzNTc5MywtMC45NDQ2NCB6IgogICAgIGlkPSJwYXRoNDc3NyIKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6IzFlOGUzZTtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzFhNzNlODtzdHJva2Utd2lkdGg6MC40MjA5MjM0MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTowIgogICAgIGQ9Ik0gODUuOTc3NTAxLDguNTk3OTAzMSBWIDAuNjQyOTUxODUgaCAxLjEwNDg1NSAxLjEwNDg1NCBWIDguNTk3OTAzMSAxNi41NTI4NTQgaCAtMS4xMDQ4NTQgLTEuMTA0ODU1IHoiCiAgICAgaWQ9InBhdGg0Nzc5IgogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDojMWE3M2U4O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMWE3M2U4O3N0cm9rZS13aWR0aDowLjQyMDkyMzQxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAiCiAgICAgZD0ibSA3Ni44NTM0NjIsMjEuNTk4NjU4IGMgLTAuMzQzMjE0LC0wLjE0MTk1NiAtMC45MDk4NDcsLTAuNDYyNzI2IC0xLjI1OTE4NSwtMC43MTI4MjMgLTAuNjQ1MzE2LC0wLjQ2MTk5MiAtMS42MjUwMTYsLTEuNzYzMjUxIC0xLjUzMzcyNCwtMi4wMzcxMjYgMC4wMjc1NCwtMC4wODI2MiAwLjQzNzgyNiwtMC4zMDYwOTYgMC45MTE3NDcsLTAuNDk2NjEgMC44MjIyMTcsLTAuMzMwNTI3IDAuODY4MzA2LC0wLjMzNDExOSAxLjAwNjU1MSwtMC4wNzg0NSAwLjA3OTY4LDAuMTQ3MzY4IDAuMzk0MTk0LDAuNTA4NTg3IDAuNjk4OTEzLDAuODAyNzEgMC45OTYxNTUsMC45NjE1MTcgMi42OTEyMDksMS4wNzg5ODYgMy44MzM0MTksMC4yNjU2NiAwLjU2NjU0NSwtMC40MDM0MTUgMC45ODc0NSwtMS4zNjc2NCAxLjEwNDk5OCwtMi41MzEzNjcgMC4xMDk1NDMsLTEuMDg0NDggLTMuMzllLTQsLTEuMjI0MzQyIC0wLjU1NTU1NSwtMC43MDcwODYgLTAuNjQzODkyLDAuNTk5ODc2IC0xLjMyNDk0NCwwLjgxNjY0IC0yLjU1MTk0LDAuODEyMjI4IC0xLjA1NDUyOCwtMC4wMDM4IC0xLjI3NjQ3MiwtMC4wNTY4NSAtMi4xMDk2NzIsLTAuNTA0MzExIC0zLjg2MjE3NCwtMi4wNzQxNTMgLTMuODY2OTE3LC03LjU1MDUwNTMgLTAuMDA4NCwtOS42NTA1OTU1IDEuMDk4MzQ3LC0wLjU5Nzc5NTggMi42ODkyOTMsLTAuNjk0MzcxNSAzLjc3MTI0NywtMC4yMjg5Mjc0IDAuNDE2MDUsMC4xNzg5ODAxIDAuODcwODk0LDAuNDUxODcxIDEuMDEwNzYyLDAuNjA2NDI0MSAwLjM1ODYzMywwLjM5NjI4NTIgMC41MDMyNzEsMC4zNTAwMzI5IDAuNTAzMjcxLC0wLjE2MDkzNjEgViA2LjUzNTUwODQgaCAxLjAzMTE5NyAxLjAzMTE5OCB2IDUuMjk2MDQ5NiBjIDAsMy4zNjMzNTEgLTAuMDYwNSw1LjU4MDkzNCAtMC4xNjU3ODIsNi4wNzY2OTkgLTAuMzU4NzEyLDEuNjg5MTM0IC0xLjI4OTQ3NSwyLjk1NDMxMiAtMi42MTEyMDgsMy41NDkzOTIgLTAuOTU0NzgsMC40Mjk4NjYgLTMuMjIxMzgxLDAuNTA3NjcyIC00LjEwNzg3OCwwLjE0MTAwOSB6IG0gMy4wMDgyODcsLTYuODIyOTQyIGMgMS4xMzE3MTcsLTAuNDI3NTkzIDEuODY4NDkzLC0xLjY2OTYwNiAxLjg3MzI4OSwtMy4xNTc4NzggMC4wMDI4LC0wLjg2NDc2IC0wLjA2NTksLTEuMTU3ODA1IC0wLjQyNTU4OSwtMS44MTU2MjM0IC0wLjY3NjM0MywtMS4yMzY5NDQxIC0xLjkyMDI5NiwtMS44MTY1NTg0IC0zLjIwNDU5NywtMS40OTMxNjc3IC0xLjQ1MTE0NSwwLjM2NTQwMjUgLTIuMzIxNDc0LDEuNTk3NTM5IC0yLjMyMTQ3NCwzLjI4NjU0MjEgMCwxLjUzNzE2NyAwLjY5ODAzOSwyLjY4MzE3NCAxLjkzNjQ2NSwzLjE3OTE5NSAwLjQ3NTUwNCwwLjE5MDQ1MSAxLjYzODk2MywwLjE5MDk1NyAyLjE0MTkwNiw5LjI4ZS00IHoiCiAgICAgaWQ9InBhdGg1MzI0IgogICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+CiAgPHBhdGgKICAgICBzdHlsZT0iZmlsbDojMWE3M2U4O2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojMWE3M2U4O3N0cm9rZS13aWR0aDowLjQyMDkyMzQxO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1vcGFjaXR5OjAiCiAgICAgZD0ibSAzNy43MDI3MzIsMTYuNTcyMDYxIGMgLTMuNjA4MjI0LC0xLjAzODY1IC02LjI2MDg0MSwtNC40Mzg3MTMgLTYuMjYwODQxLC04LjAyNDk5OTMgMCwtMi4yODY2MDM5IDAuNzk4Mjk5LC00LjE2NTQyNTkgMi40ODkxMjcsLTUuODU4MjM3NyAzLjExNzkyMSwtMy4xMjE1Nzc5NSA3LjY5ODE1NCwtMy40OTMyMzExOCAxMS4wOTc5NDMsLTAuOTAwNTE4OSBsIDAuNzA0NTQ4LDAuNTM3Mjk1NyAtMC43NjAwMTIsMC43Njk1NzIgLTAuNzYwMDEzLDAuNzY5NTcyIC0wLjQ2MjYyNywtMC4zNTI4NjMgQyA0My40OTY0MTIsMy4zMTc4MDcgNDIuODkzMjc5LDIuOTc0MTMxMiA0Mi40MTA1NjIsMi43NDgxNTc1IDQxLjYyNDExMSwyLjM3OTk5NzcgNDEuMzcxMzQsMi4zMzcyODQzIDM5Ljk3ODQ1NywyLjMzNzE3OTEgYyAtMS41MDA1ODgsLTEuMTMxZS00IC0xLjU5MzMyLDAuMDE5MSAtMi42NzY5MzEsMC41NTQ2NDk5IC0zLjgzOTAxLDEuODk3MzQxOSAtNC42NzAzNDMsNy4wMTk0MjAzIC0xLjYzMjM1NiwxMC4wNTc0MDggMi45Mjg0NjYsMi45Mjg0NjUgOC40OTMwNjIsMS45ODg2MzQgOS42MDg1MjksLTEuNjIyODI5IDAuMTY4NDgsLTAuNTQ1NDc1IDAuMzA2MzI3LC0xLjA4NDIyNyAwLjMwNjMyNywtMS4xOTcyMjYgMCwtMC4xNjg1MiAtMC41MDMxNiwtMC4yMDU0NTM2IC0yLjc5ODk2NCwtMC4yMDU0NTM2IEggMzkuOTg2MDk4IFYgOC44MTg4NzQgNy43MTQwMTk3IGggMy45MDM4MTggMy45MDM4MTkgdiAxLjMxODU3NDIgYyAwLDAuNzI1MjE1OCAtMC4wNzMyNiwxLjY2OTg2NjEgLTAuMTYyNzk0LDIuMDk5MjIzMSAtMC41NDgyMjQsMi42Mjg5MDUgLTIuNjYwNzI2LDQuNzgwNDc1IC01LjM4Mjc0Miw1LjQ4MjI5MiAtMS4xOTc3MjMsMC4zMDg4MDggLTMuMzk3MjkzLDAuMjg4NDYxIC00LjU0NTQ2NywtMC4wNDIwNSB6IgogICAgIGlkPSJwYXRoNTMyNiIKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgogIDxwYXRoCiAgICAgc3R5bGU9ImZpbGw6I2Y5YWIwMDtmaWxsLW9wYWNpdHk6MTtzdHJva2U6IzFhNzNlODtzdHJva2Utd2lkdGg6MC40MjA5MjM0MTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eTowIgogICAgIGQ9Im0gNjQuODY2MzA2LDE2LjY0Nzk4OSBjIC0xLjQzOTY1OSwtMC41OTIyMjEgLTIuMTYwNTU1LC0xLjI1MjM4NCAtMi45MDE3NjcsLTIuNjU3MyAtMC4zNjE0MDQsLTAuNjg1MDE3IC0wLjM5Njk1MywtMC44OTc1MTcgLTAuMzk2OTUzLC0yLjM3Mjg1MSAwLC0xLjQ3NTc4NiAwLjAzNjc1LC0xLjY5NTI4NTggMC40MTE2MywtMi40NTg2ODE3IDAuNTM1ODY5LC0xLjA5MTIyNTEgMS43NTQ2MjQsLTIuMjA4MjA4MyAyLjg2NjU5NywtMi42MjcyMjA5IDAuNjk5NjYsLTAuMjYzNjQ1NSAxLjA3NjYzLC0wLjMwOTAyOCAyLjE3MjM4OCwtMC4yNjE1MjggMS4xNjQ2NTcsMC4wNTA0ODcgMS40MzkxMDgsMC4xMTgwODIyIDIuMjU3NzM1LDAuNTU2MDY0OCAxLjY4Nzk0MywwLjkwMzA4NTUgMi42NDg0MzMsMi40Mjk3MDQ4IDIuNzgyODMzLDQuNDIzMDgxOCAwLjEzMDc2OCwxLjkzOTQ5MyAtMC43MTA0MDUsMy43Mzk2NzEgLTIuMjM5NTU5LDQuNzkyODQgLTEuNDY2NjAxLDEuMDEwMDg2IC0zLjM5NjA5NiwxLjI0NjAwNyAtNC45NTI5MDQsMC42MDU1OTUgeiBtIDMuNjUzNTU4LC0yLjI0ODcwMSBjIDEuMTY2NDcsLTAuOTM3NzEgMS42Mzk3NzcsLTIuNTU4OTk3IDEuMTY0NjU1LC0zLjk4OTQ1NyAtMC44OTAxMjYsLTIuNjc5OTE4NSAtNC4zMTUxMDIsLTIuOTg0ODE0MyAtNS41NzU3NjgsLTAuNDk2MzYyMyAtMC43MTIzMTcsMS40MDYwNTUzIC0wLjUwNTU3NCwzLjAzMjc1NTMgMC41MjMwNjUsNC4xMTU1ODQzIDAuNjg5MDQ2LDAuNzI1MzQ2IDEuMjAwODM0LDAuOTE0MjY3IDIuMzQxMjUyLDAuODY0MjQ4IDAuODQ0NDU3LC0wLjAzNzA0IDEuMDY2NTkyLC0wLjEwNzk4MyAxLjU0Njc5NiwtMC40OTQwMTMgeiIKICAgICBpZD0icGF0aDUzMjgiCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOiNkYWRjZTA7ZmlsbC1vcGFjaXR5OjA7c3Ryb2tlOiMxYTczZTg7c3Ryb2tlLXdpZHRoOjAuNDIwOTIzNDE7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MCIKICAgICBkPSJNIDMuNzU4ODYxNywzOS43NDIyMTQgQyAyLjc0MzQ4NzEsMzkuNDY4NjQ3IDIuMTcxMTI5NywzOS4xMTIxOCAxLjM5NDU4ODksMzguMjY5NzMyIDAuNDI4NDQzMzUsMzcuMjIxNTg4IDAuMTM2OTk4MjEsMzYuNDUwMjg1IDAuMTQ2NjUxMDIsMzQuOTY3MDk0IGMgMC4wMDY1NjMsLTEuMDA4NDY5IDAuMDc3MDUzMywtMS4zOTU1MjIgMC4zNjIxODg4OCwtMS45ODg3MzggMC41MTkxNTg3LC0xLjA4MDA5NiAxLjY3MTc3NSwtMi4xNzIyMzkgMi42OTc1NjYsLTIuNTU2MDM3IGwgMC44NDk4ODIsLTAuMzE3OTgxIDYxLjE2NDcwOTEsMC4wMzc1MyA2MS4xNjQ3MTMsMC4wMzc1MyAwLjc3ODQzLDAuNDEwMTQ1IGMgMS45OTU3LDEuMDUxNTExIDMuMDQyMDYsMy4xMjM3NjggMi42NTY2OSw1LjI2MTQ0MSAtMC4yOTQyNSwxLjYzMjIwNCAtMS4zMTI3NCwyLjkxNzgyMiAtMi45MDE4NCwzLjY2MjkzNiBsIC0wLjgyNzkxLDAuMzg4MTk3IC02MC43NjY5ODksMC4wMjc1OSBDIDEyLjQ1MzI0LDM5Ljk1MzY5NSA0LjQ1MzM3NzIsMzkuOTI5MzM0IDMuNzU4ODYxNywzOS43NDIyMTQgWiIKICAgICBpZD0icGF0aDUzMzAiCiAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz4KICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOiNkYWRjZTA7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjAuNTk1Mjc1NjQ7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MCIKICAgICBkPSJNIDMuNTg2MzY4NywzOS42MTA3NjYgQyAzLjIwMTAzNCwzOS40NzEzMiAyLjUxOTk1NTQsMzkuMDUwMTE2IDIuMDcyODYxLDM4LjY3NDc1NyAtMC42MzQ1MTg3LDM2LjQwMTc3NCAtMC4xNjA0NjQxLDMyLjIwNTYzNCAyLjk4MDUzMzEsMzAuNjQwNDA5IEwgNC4wNTYyODc5LDMwLjEwNDMzOCBIIDY0Ljk4MDc5NSBjIDQ1LjYzMjk2NSwwIDYxLjEyNzA1NSwwLjA2MDY4IDYxLjczMTUwNSwwLjI0MTc4MyAwLjQ0Mzg1LDAuMTMyOTggMS4xNzMwNSwwLjU1NTEwNiAxLjYyMDQ0LDAuOTM4MDU3IDIuODM3NCwyLjQyODcxMiAxLjk0OTgsNy4wNDg3MDkgLTEuNTk3NDIsOC4zMTQ1ODYgLTEuMDk5ODcsMC4zOTI1MDMgLTEyMi4wNjQ5MzE1LDAuNDA0MjkyIC0xMjMuMTQ4OTUxMywwLjAxMiB6IgogICAgIGlkPSJwYXRoNTM5MSIKICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPgo8L3N2Zz4K);
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-size: 100%;
    background: white;
  }
}

.mini-shortcuts {
  -webkit-mask-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMTE2cHgiIGhlaWdodD0iNDJweCIgdmlld0JveD0iMCAwIDExNiA0MiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICAgIDwhLS0gR2VuZXJhdG9yOiBTa2V0Y2ggNTQuMSAoNzY0OTApIC0gaHR0cHM6Ly9za2V0Y2hhcHAuY29tIC0tPgogICAgPHRpdGxlPmljLW50cC1zaG9ydGN1dHMtc2hvcnRjdXRzPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGcgaWQ9ImljLW50cC1zaG9ydGN1dHMtc2hvcnRjdXRzIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8cGF0aCBkPSJNNi4wMDg2OTU2NSwxMS4zODAxMjQyIEMyLjkyOTYyMjQxLDExLjM4MDEyNDIgMC40MzM1NDAzNzMsOC44ODQwNDIxOCAwLjQzMzU0MDM3Myw1LjgwNDk2ODk0IEMwLjQzMzU0MDM3MywyLjcyNTg5NTcxIDIuOTI5NjIyNDEsMC4yMjk4MTM2NjUgNi4wMDg2OTU2NSwwLjIyOTgxMzY2NSBDOS4wODc3Njg4OSwwLjIyOTgxMzY2NSAxMS41ODM4NTA5LDIuNzI1ODk1NzEgMTEuNTgzODUwOSw1LjgwNDk2ODk0IEMxMS41ODM4NTA5LDguODg0MDQyMTggOS4wODc3Njg4OSwxMS4zODAxMjQyIDYuMDA4Njk1NjUsMTEuMzgwMTI0MiBaIE01OC4wNDM0NzgzLDExLjM4MDEyNDIgQzU0Ljk2NDQwNSwxMS4zODAxMjQyIDUyLjQ2ODMyMyw4Ljg4NDA0MjE4IDUyLjQ2ODMyMyw1LjgwNDk2ODk0IEM1Mi40NjgzMjMsMi43MjU4OTU3MSA1NC45NjQ0MDUsMC4yMjk4MTM2NjUgNTguMDQzNDc4MywwLjIyOTgxMzY2NSBDNjEuMTIyNTUxNSwwLjIyOTgxMzY2NSA2My42MTg2MzM1LDIuNzI1ODk1NzEgNjMuNjE4NjMzNSw1LjgwNDk2ODk0IEM2My42MTg2MzM1LDguODg0MDQyMTggNjEuMTIyNTUxNSwxMS4zODAxMjQyIDU4LjA0MzQ3ODMsMTEuMzgwMTI0MiBaIE0zMi4wMjYwODcsMTEuMzgwMTI0MiBDMjguOTQ3MDEzNywxMS4zODAxMjQyIDI2LjQ1MDkzMTcsOC44ODQwNDIxOCAyNi40NTA5MzE3LDUuODA0OTY4OTQgQzI2LjQ1MDkzMTcsMi43MjU4OTU3MSAyOC45NDcwMTM3LDAuMjI5ODEzNjY1IDMyLjAyNjA4NywwLjIyOTgxMzY2NSBDMzUuMTA1MTYwMiwwLjIyOTgxMzY2NSAzNy42MDEyNDIyLDIuNzI1ODk1NzEgMzcuNjAxMjQyMiw1LjgwNDk2ODk0IEMzNy42MDEyNDIyLDguODg0MDQyMTggMzUuMTA1MTYwMiwxMS4zODAxMjQyIDMyLjAyNjA4NywxMS4zODAxMjQyIFogTTg0LjA2MDg2OTYsMTEuMzgwMTI0MiBDODAuOTgxNzk2MywxMS4zODAxMjQyIDc4LjQ4NTcxNDMsOC44ODQwNDIxOCA3OC40ODU3MTQzLDUuODA0OTY4OTQgQzc4LjQ4NTcxNDMsMi43MjU4OTU3MSA4MC45ODE3OTYzLDAuMjI5ODEzNjY1IDg0LjA2MDg2OTYsMC4yMjk4MTM2NjUgQzg3LjEzOTk0MjgsMC4yMjk4MTM2NjUgODkuNjM2MDI0OCwyLjcyNTg5NTcxIDg5LjYzNjAyNDgsNS44MDQ5Njg5NCBDODkuNjM2MDI0OCw4Ljg4NDA0MjE4IDg3LjEzOTk0MjgsMTEuMzgwMTI0MiA4NC4wNjA4Njk2LDExLjM4MDEyNDIgWiBNMTEwLjA3ODI2MSwxMS4zODAxMjQyIEMxMDYuOTk5MTg4LDExLjM4MDEyNDIgMTA0LjUwMzEwNiw4Ljg4NDA0MjE4IDEwNC41MDMxMDYsNS44MDQ5Njg5NCBDMTA0LjUwMzEwNiwyLjcyNTg5NTcxIDEwNi45OTkxODgsMC4yMjk4MTM2NjUgMTEwLjA3ODI2MSwwLjIyOTgxMzY2NSBDMTEzLjE1NzMzNCwwLjIyOTgxMzY2NSAxMTUuNjUzNDE2LDIuNzI1ODk1NzEgMTE1LjY1MzQxNiw1LjgwNDk2ODk0IEMxMTUuNjUzNDE2LDguODg0MDQyMTggMTEzLjE1NzMzNCwxMS4zODAxMjQyIDExMC4wNzgyNjEsMTEuMzgwMTI0MiBaIE02LjAwODY5NTY1LDQxLjExNDI4NTcgQzIuOTI5NjIyNDEsNDEuMTE0Mjg1NyAwLjQzMzU0MDM3MywzOC42MTgyMDM3IDAuNDMzNTQwMzczLDM1LjUzOTEzMDQgQzAuNDMzNTQwMzczLDMyLjQ2MDA1NzIgMi45Mjk2MjI0MSwyOS45NjM5NzUyIDYuMDA4Njk1NjUsMjkuOTYzOTc1MiBDOS4wODc3Njg4OSwyOS45NjM5NzUyIDExLjU4Mzg1MDksMzIuNDYwMDU3MiAxMS41ODM4NTA5LDM1LjUzOTEzMDQgQzExLjU4Mzg1MDksMzguNjE4MjAzNyA5LjA4Nzc2ODg5LDQxLjExNDI4NTcgNi4wMDg2OTU2NSw0MS4xMTQyODU3IFogTTU4LjA0MzQ3ODMsNDEuMTE0Mjg1NyBDNTQuOTY0NDA1LDQxLjExNDI4NTcgNTIuNDY4MzIzLDM4LjYxODIwMzcgNTIuNDY4MzIzLDM1LjUzOTEzMDQgQzUyLjQ2ODMyMywzMi40NjAwNTcyIDU0Ljk2NDQwNSwyOS45NjM5NzUyIDU4LjA0MzQ3ODMsMjkuOTYzOTc1MiBDNjEuMTIyNTUxNSwyOS45NjM5NzUyIDYzLjYxODYzMzUsMzIuNDYwMDU3MiA2My42MTg2MzM1LDM1LjUzOTEzMDQgQzYzLjYxODYzMzUsMzguNjE4MjAzNyA2MS4xMjI1NTE1LDQxLjExNDI4NTcgNTguMDQzNDc4Myw0MS4xMTQyODU3IFogTTMyLjAyNjA4Nyw0MS4xMTQyODU3IEMyOC45NDcwMTM3LDQxLjExNDI4NTcgMjYuNDUwOTMxNywzOC42MTgyMDM3IDI2LjQ1MDkzMTcsMzUuNTM5MTMwNCBDMjYuNDUwOTMxNywzMi40NjAwNTcyIDI4Ljk0NzAxMzcsMjkuOTYzOTc1MiAzMi4wMjYwODcsMjkuOTYzOTc1MiBDMzUuMTA1MTYwMiwyOS45NjM5NzUyIDM3LjYwMTI0MjIsMzIuNDYwMDU3MiAzNy42MDEyNDIyLDM1LjUzOTEzMDQgQzM3LjYwMTI0MjIsMzguNjE4MjAzNyAzNS4xMDUxNjAyLDQxLjExNDI4NTcgMzIuMDI2MDg3LDQxLjExNDI4NTcgWiBNODQuMDYwODY5Niw0MS4xMTQyODU3IEM4MC45ODE3OTYzLDQxLjExNDI4NTcgNzguNDg1NzE0MywzOC42MTgyMDM3IDc4LjQ4NTcxNDMsMzUuNTM5MTMwNCBDNzguNDg1NzE0MywzMi40NjAwNTcyIDgwLjk4MTc5NjMsMjkuOTYzOTc1MiA4NC4wNjA4Njk2LDI5Ljk2Mzk3NTIgQzg3LjEzOTk0MjgsMjkuOTYzOTc1MiA4OS42MzYwMjQ4LDMyLjQ2MDA1NzIgODkuNjM2MDI0OCwzNS41MzkxMzA0IEM4OS42MzYwMjQ4LDM4LjYxODIwMzcgODcuMTM5OTQyOCw0MS4xMTQyODU3IDg0LjA2MDg2OTYsNDEuMTE0Mjg1NyBaIE0xMTAuMDc4MjYxLDQxLjExNDI4NTcgQzEwNi45OTkxODgsNDEuMTE0Mjg1NyAxMDQuNTAzMTA2LDM4LjYxODIwMzcgMTA0LjUwMzEwNiwzNS41MzkxMzA0IEMxMDQuNTAzMTA2LDMyLjQ2MDA1NzIgMTA2Ljk5OTE4OCwyOS45NjM5NzUyIDExMC4wNzgyNjEsMjkuOTYzOTc1MiBDMTEzLjE1NzMzNCwyOS45NjM5NzUyIDExNS42NTM0MTYsMzIuNDYwMDU3MiAxMTUuNjUzNDE2LDM1LjUzOTEzMDQgQzExNS42NTM0MTYsMzguNjE4MjAzNyAxMTMuMTU3MzM0LDQxLjExNDI4NTcgMTEwLjA3ODI2MSw0MS4xMTQyODU3IFoiIGlkPSJDb21iaW5lZC1TaGFwZSIgZmlsbD0iIzAwMDAwMCI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4=);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background-color: rgb(var(--GG300-rgb));
  height: 42px;
  margin-inline-start: 7px;
  margin-top: 12px;
  width: 116px;
}

#backgrounds-default:not(.selected) .mini-page {
  padding-top: 32px;
}

#backgrounds-default:not(.selected) .mini-header,
#backgrounds-default:not(.selected) .mini-header-colorful {
  height: 48px;
  width: 156px;
}

#backgrounds-default:not(.selected) .mini-shortcuts {
  height: 50px;
  margin-inline-start: 8px;
  margin-top: 14px;
  width: 140px;
}

#shortcuts-menu {
  line-height: 20px;
}

#sh-options {
  display: flex;
}

.sh-option {
  margin-inline-end: 9px;
  width: 268px;
}

#shortcuts-menu.hidden-selected .sh-option {
  color: rgb(var(--GG500-rgb));
}

.sh-option-image {
  border: 1px solid rgb(var(--GG300-rgb));
  border-radius: 4px;
  box-sizing: border-box;
  cursor: pointer;
  height: 176px;
  position: relative;
  width: 268px;
}

@media (prefers-color-scheme: dark) {
  .sh-option-image {
    border-color: rgb(var(--GG700-rgb));
  }
}

#shortcuts-menu:not(.hidden-selected) .selected .sh-option-image {
  background-color: rgb(var(--GB050-rgb));
  border-color: rgb(var(--GB600-rgb));
}

@media (prefers-color-scheme: dark) {
  #shortcuts-menu:not(.hidden-selected) .selected .sh-option-image {
    background-color: rgba(var(--GB200-rgb), .1);
    border-color: rgb(var(--GB300-rgb));
  }
}

.sh-option-mini {
  background-color: white;
  border: 1px solid rgb(var(--GG300-rgb));
  border-radius: 4px;
  box-sizing: border-box;
  height: 144px;
  position: absolute;
  right: 40px;
  top: 16px;
  width: 144px;
}

@media (prefers-color-scheme: dark) {
  .sh-option-mini {
    background-color: rgb(var(--dark-mode-dialog-rgb));
    border-color: rgb(var(--GG700-rgb));
  }
}

html[dir=rtl] .sh-option-mini {
  left: 40px;
  right: unset;
}

#shortcuts-menu:not(.hidden-selected) .selected .sh-option-mini {
  box-shadow: 0 1px 3px 0 rgba(var(--GG800-rgb), .3),
      0 4px 8px 3px rgba(var(--GG800-rgb), .15);
}

@media (prefers-color-scheme: dark) {
  #shortcuts-menu:not(.hidden-selected) .selected .sh-option-mini {
    border-color: transparent;
    box-shadow: var(--dark-mode-shadow);
  }
}

.sh-option-mini .mini-shortcuts {
  background-color: rgb(var(--GG500-rgb));
}

#shortcuts-menu:not(.hidden-selected) .selected .mini-shortcuts {
  background-color: rgb(var(--GB600-rgb));
}

@media (prefers-color-scheme: dark) {
  #shortcuts-menu:not(.hidden-selected) .selected .mini-shortcuts {
    background-color: rgb(var(--GB300-rgb));
  }
}

.sh-option-icon {
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background: 96px 96px rgb(var(--GG200-rgb));
  height: 96px;
  left: 16px;
  position: absolute;
  top: 48px;
  width: 96px;
}

#sh-option-cl .sh-option-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCIgZmlsbD0iIzYyNjI2MiI+PHBhdGggZD0iTTI0IDRDMTIuOTUgNCA0IDEyLjk1IDQgMjRzOC45NSAyMCAyMCAyMCAyMC04Ljk1IDIwLTIwUzM1LjA1IDQgMjQgNHptMCA2YzMuMzEgMCA2IDIuNjkgNiA2IDAgMy4zMi0yLjY5IDYtNiA2cy02LTIuNjgtNi02YzAtMy4zMSAyLjY5LTYgNi02em0wIDI4LjRjLTUuMDEgMC05LjQxLTIuNTYtMTItNi40NC4wNS0zLjk3IDguMDEtNi4xNiAxMi02LjE2czExLjk0IDIuMTkgMTIgNi4xNmMtMi41OSAzLjg4LTYuOTkgNi40NC0xMiA2LjQ0eiIvPjxwYXRoIGQ9Ik0wIDBoNDh2NDhIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);
}

#sh-option-mv .sh-option-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgMmM1LjUyIDAgMTAgNC40OCAxMCAxMHMtNC40OCAxMC0xMCAxMFMyIDE3LjUyIDIgMTIgNi40OCAyIDEyIDJ6TTQgMTJoNC40YzMuNDA3LjAyMiA0LjkyMiAxLjczIDQuNTQzIDUuMTI3SDkuNDg4djIuNDdhOC4wMDQgOC4wMDQgMCAwIDAgMTAuNDk4LTguMDgzQzE5LjMyNyAxMi41MDQgMTguMzMyIDEzIDE3IDEzYy0yLjEzNyAwLTMuMjA2LS45MTYtMy4yMDYtMi43NWgtMy43NDhjLS4yNzQtMi43MjguNjgzLTQuMDkyIDIuODctNC4wOTIgMC0uOTc1LjMyNy0xLjU5Ny44MTEtMS45N0E4LjAwNCA4LjAwNCAwIDAgMCA0IDEyeiIgZmlsbD0iIzNDNDA0MyIvPjwvc3ZnPg==);
}

html[dir=rtl] .sh-option-icon {
  right: 16px;
}

@media (prefers-color-scheme: dark) {
  .sh-option-icon {
    background-color: rgb(var(--GG700-rgb));
  }
}

#shortcuts-menu:not(.hidden-selected) .selected .sh-option-icon {
  background-color: rgba(var(--GB600-rgb), .24);
}

@media (prefers-color-scheme: dark) {
  #shortcuts-menu:not(.hidden-selected) .selected .sh-option-icon {
    background-color: rgb(var(--GB300-rgb));
  }
}

.sh-option-image .selected-circle {
  box-shadow: 0 3px 6px 1px rgba(0, 0, 0, .16),
      0 1px 2px 1px rgba(0, 0, 0, .23);
  height: 22px;
  left: 209px;
  top: 9px;
  width: 22px;
}

html[dir=rtl] .sh-option-image .selected-circle {
  left: 0;
  right: 209px;
}

.sh-option-image .selected-check {
  left: initial;
  right: 32px;
  top: 6px;
}

html[dir=rtl] .sh-option-image .selected-check {
  left: 32px;
  right: initial;
}

#shortcuts-menu.hidden-selected .sh-option-image
    :-webkit-any(.selected-circle, .selected-check) {
  display: none;
}

.sh-option-title {
  font-weight: bold;
  margin: 8px 0;
}

#sh-hide {
  border: 1px solid rgb(var(--GG300-rgb));
  border-radius: 4px;
  box-sizing: border-box;
  display: flex;
  height: 64px;
  margin-top: 24px;
  max-width: 544px;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  #sh-hide {
    border-color: rgb(var(--GG700-rgb));
  }
}

#sh-hide.selected {
  background-color: rgb(var(--GB050-rgb));
  border-color: rgb(var(--GB600-rgb));
  color: rgb(var(--GB600-rgb));
}

@media (prefers-color-scheme: dark) {
  #sh-hide.selected {
    background-color: rgba(var(--GB200-rgb), .1);
    border-color: rgb(var(--GB300-rgb));
    color: rgb(var(--GB300-rgb));
  }
}

#sh-hide > div {
  margin-bottom: auto;
  margin-top: auto;
}

#sh-hide-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTEyIDdjMi43NiAwIDUgMi4yNCA1IDUgMCAuNjUtLjEzIDEuMjYtLjM2IDEuODNsMi45MiAyLjkyYzEuNTEtMS4yNiAyLjctMi44OSAzLjQzLTQuNzUtMS43My00LjM5LTYtNy41LTExLTcuNS0xLjQgMC0yLjc0LjI1LTMuOTguN2wyLjE2IDIuMTZDMTAuNzQgNy4xMyAxMS4zNSA3IDEyIDd6TTIgNC4yN2wyLjI4IDIuMjguNDYuNDZBMTEuODA0IDExLjgwNCAwIDAgMCAxIDEyYzEuNzMgNC4zOSA2IDcuNSAxMSA3LjUgMS41NSAwIDMuMDMtLjMgNC4zOC0uODRsLjQyLjQyTDE5LjczIDIyIDIxIDIwLjczIDMuMjcgMyAyIDQuMjd6TTcuNTMgOS44bDEuNTUgMS41NWMtLjA1LjIxLS4wOC40My0uMDguNjUgMCAxLjY2IDEuMzQgMyAzIDMgLjIyIDAgLjQ0LS4wMy42NS0uMDhsMS41NSAxLjU1Yy0uNjcuMzMtMS40MS41My0yLjIuNTMtMi43NiAwLTUtMi4yNC01LTUgMC0uNzkuMi0xLjUzLjUzLTIuMnptNC4zMS0uNzhsMy4xNSAzLjE1LjAyLS4xNmMwLTEuNjYtMS4zNC0zLTMtM2wtLjE3LjAxeiIvPjwvc3ZnPg==);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background: 24px 24px rgb(var(--GG700-rgb));
  height: 24px;
  margin-inline-end: 20px;
  margin-inline-start: 24px;
  width: 24px;
}

.selected #sh-hide-icon {
  background-color: rgb(var(--GB600-rgb));
}

@media (prefers-color-scheme: dark) {
  .selected #sh-hide-icon {
    background-color: rgb(var(--GB300-rgb));
  }
}

#sh-hide-title {
  font-weight: bold;
}

#sh-hide-toggle-wrapper {
  height: 16px;
  margin-inline-end: 20px;
  margin-inline-start: auto;
  position: relative;
  width: 34px;
}

/* The toggle's container. */
.switch {
  background-color: white;
  border-radius: 8px;
  display: inline-block;
  height: 12px;
  left: 3px;
  position: absolute;
  top: 2px;
  transition: background-color linear 80ms;
  width: 28px;
  z-index: 0;
}

@media (prefers-color-scheme: dark) {
  .switch {
    background-color: rgb(var(--dark-mode-dialog-rgb));
  }
}

/* Hide the toggle's default checkbox. */
.switch input {
  opacity: 0;
}

/* The slider for the toggle. */
.toggle {
  background-color: #ccc;
  border-radius: 34px;
  bottom: 0;
  cursor: pointer;
  display: block;
  left: 0;
  position: absolute;
  right: 0;
  top: 0;
  transition: transform linear 80ms, background-color linear 80ms;
}

/* The knob for the toggle. */
.toggle .knob {
  background-color: white;
  border-radius: 50%;
  bottom: -2px;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .4);
  content: '';
  display: block;
  height: 16px;
  left: -3px;
  position: absolute;
  transition: transform linear 80ms, background-color linear 80ms;
  width: 16px;
}

/* Gray/blue highlight around the knob. */
.toggle .highlight {
  background-color: rgb(128, 134, 139);
  border-radius: 50%;
  height: 40px;
  left: -15px;
  opacity: 0;
  position: absolute;
  top: -14px;
  transition: transform linear 80ms, opacity linear 80ms;
  width: 40px;
}

@media (prefers-color-scheme: dark) {
  .toggle .highlight {
    background-color: rgb(var(--GG300-rgb));
  }
}

input:checked + .toggle {
  background-color: rgba(var(--GB600-rgb), .5);
}

@media (prefers-color-scheme: dark) {
  input:checked + .toggle {
    background-color: rgba(var(--GB300-rgb), .5);
  }
}

input:focus + .toggle {
  box-shadow: 0 0 1px rgb(33, 150, 243);
}

input:active + .toggle .highlight,
#customization-menu:not(.using-mouse-nav) input:focus + .toggle .highlight {
  opacity: .15;
}

@media (prefers-color-scheme: dark) {
  input:active + .toggle .highlight,
  #customization-menu:not(.using-mouse-nav) input:focus + .toggle .highlight {
    opacity: .4;
  }
}

input:checked + .toggle .knob,
input:checked + .toggle .highlight {
  background-color: rgb(var(--GB600-rgb));
  transform: translateX(18px);
}

@media (prefers-color-scheme: dark) {
  input:checked + .toggle .knob,
  input:checked + .toggle .highlight {
    background-color: rgb(var(--GB300-rgb));
  }
}

#colors-menu {
  --check-mark-size: 20px;
  --custom-color-border: rgb(var(--GG300-rgb));
  --custom-color-dark: rgb(var(--GG100-rgb));
  --custom-color-light: white;
  --tile-size: 64px;
  --tile-margin: 25px;
}

#colors-menu .bg-sel-tile-bg {
  background-color: unset;
  border-radius: 50%;
  box-sizing: border-box;
  cursor: pointer;
  height: var(--tile-size);
  margin-bottom: var(--tile-margin);
  margin-inline-end: var(--tile-margin);
  margin-inline-start: 0;
  margin-top: 0;
  width: var(--tile-size);
}

#colors-menu .bg-sel-tile-bg.selected {
  box-shadow: 0 0 0 4px rgba(var(--GB600-rgb), .4);
}

@media (prefers-color-scheme: dark) {
  #colors-menu .bg-sel-tile-bg.selected {
    box-shadow: 0 0 0 4px rgba(var(--GB600-rgb), .4);
  }
}

/*
 To avoid circle showing behind the checkmark, draw it 2px smaller and 1px
 below so that it is always 1px smaller then the checkmark from all sides.
 */
#colors-menu .bg-sel-tile .selected-circle {
  height: calc(var(--check-mark-size) - 2px);
  right: 0;
  top: 1px;
  width: calc(var(--check-mark-size) - 2px);
}

html[dir=rtl] #colors-menu .bg-sel-tile .selected-circle {
  left: 0;
}

#colors-menu .bg-sel-tile .selected-check {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUiIGhlaWdodD0iMTUiPjxkZWZzPjxwYXRoIGQ9Ik0wIDBoMTh2MThIMFYweiIgaWQ9ImEiLz48cGF0aCBkPSJNMTAuMTIuNDdsMS4xNi41NSAxLjA1Ljc0LjkxLjkxLjc0IDEuMDQuNTUgMS4xNy4zNSAxLjI3TDE1IDcuNWwtLjEyIDEuMzUtLjM1IDEuMjctLjU1IDEuMTYtLjc0IDEuMDUtLjkxLjkxLTEuMDUuNzQtMS4xNi41NS0xLjI3LjM1TDcuNSAxNWwtMS4zNS0uMTItMS4yNy0uMzUtMS4xNy0uNTUtMS4wNC0uNzQtLjkxLS45MS0uNzQtMS4wNS0uNTUtMS4xNi0uMzUtMS4yN0wwIDcuNWwuMTItMS4zNS4zNS0xLjI3LjU1LTEuMTcuNzQtMS4wNC45MS0uOTEgMS4wNC0uNzRMNC44OC40NyA2LjE1LjEyIDcuNSAwbDEuMzUuMTIgMS4yNy4zNXpNMy4zMSA2LjQ0TDIuMjUgNy41IDYgMTEuMjVsNi43NS02Ljc1LTEuMDYtMS4wNkw2IDkuMTMgMy4zMSA2LjQ0eiIgaWQ9ImIiLz48L2RlZnM+PHVzZSB4bGluazpocmVmPSIjYSIgZmlsbC1vcGFjaXR5PSIwIi8+PHVzZSB4bGluazpocmVmPSIjYSIgZmlsbC1vcGFjaXR5PSIwIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwIi8+PGc+PHVzZSB4bGluazpocmVmPSIjYiIgZmlsbD0iIzQyODVmNCIvPjx1c2UgeGxpbms6aHJlZj0iI2IiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMCIvPjwvZz48L3N2Zz4=) no-repeat center;
  background-size: var(--check-mark-size) var(--check-mark-size);
  height: var(--check-mark-size);
  right: 0;
  top: 0;
  width: var(--check-mark-size);
}

html[dir=rtl] #colors-menu .bg-sel-tile .selected-check {
  left: 0;
}

@media (prefers-color-scheme: dark) {
  #colors-menu .bg-sel-tile .selected-check::after {
    -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTUiIGhlaWdodD0iMTUiPjxkZWZzPjxwYXRoIGQ9Ik0wIDBoMTh2MThIMFYweiIgaWQ9ImEiLz48cGF0aCBkPSJNMTAuMTIuNDdsMS4xNi41NSAxLjA1Ljc0LjkxLjkxLjc0IDEuMDQuNTUgMS4xNy4zNSAxLjI3TDE1IDcuNWwtLjEyIDEuMzUtLjM1IDEuMjctLjU1IDEuMTYtLjc0IDEuMDUtLjkxLjkxLTEuMDUuNzQtMS4xNi41NS0xLjI3LjM1TDcuNSAxNWwtMS4zNS0uMTItMS4yNy0uMzUtMS4xNy0uNTUtMS4wNC0uNzQtLjkxLS45MS0uNzQtMS4wNS0uNTUtMS4xNi0uMzUtMS4yN0wwIDcuNWwuMTItMS4zNS4zNS0xLjI3LjU1LTEuMTcuNzQtMS4wNC45MS0uOTEgMS4wNC0uNzRMNC44OC40NyA2LjE1LjEyIDcuNSAwbDEuMzUuMTIgMS4yNy4zNXpNMy4zMSA2LjQ0TDIuMjUgNy41IDYgMTEuMjVsNi43NS02Ljc1LTEuMDYtMS4wNkw2IDkuMTMgMy4zMSA2LjQ0eiIgaWQ9ImIiLz48L2RlZnM+PHVzZSB4bGluazpocmVmPSIjYSIgZmlsbC1vcGFjaXR5PSIwIi8+PHVzZSB4bGluazpocmVmPSIjYSIgZmlsbC1vcGFjaXR5PSIwIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1vcGFjaXR5PSIwIi8+PGc+PHVzZSB4bGluazpocmVmPSIjYiIgZmlsbD0iIzQyODVmNCIvPjx1c2UgeGxpbms6aHJlZj0iI2IiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utb3BhY2l0eT0iMCIvPjwvZz48L3N2Zz4=);
    -webkit-mask-size: var(--check-mark-size);
    height: var(--check-mark-size);
    width: var(--check-mark-size);
  }
}

#colors-default-icon {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiPjxkZWZzPjxwYXRoIGQ9Ik0zMiA2NEMxNC4zNCA2NCAwIDQ5LjY2IDAgMzJTMTQuMzQgMCAzMiAwczMyIDE0LjM0IDMyIDMyLTE0LjM0IDMyLTMyIDMyeiIgaWQ9ImEiLz48bGluZWFyR3JhZGllbnQgaWQ9ImIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMzIiIHkxPSIzMiIgeDI9IjMyLjA4IiB5Mj0iMzIiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiNmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNkZWUxZTYiLz48L2xpbmVhckdyYWRpZW50PjxjbGlwUGF0aCBpZD0iYyI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvY2xpcFBhdGg+PC9kZWZzPjx1c2UgeGxpbms6aHJlZj0iI2EiIGZpbGw9InVybCgjYikiLz48ZyBjbGlwLXBhdGg9InVybCgjYykiPjx1c2UgeGxpbms6aHJlZj0iI2EiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjZGVlMWU2IiBzdHJva2Utd2lkdGg9IjIiLz48L2c+PC9zdmc+);
  background-repeat: no-repeat;
  background-size: contain;
  opacity: 1;
}

@media (prefers-color-scheme: dark) {
  #colors-default-icon {
    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiPjxkZWZzPjxwYXRoIGQ9Ik0zMiA2NEMxNC4zNCA2NCAwIDQ5LjY2IDAgMzJTMTQuMzQgMCAzMiAwczMyIDE0LjM0IDMyIDMyLTE0LjM0IDMyLTMyIDMyeiIgaWQ9ImEiLz48bGluZWFyR3JhZGllbnQgaWQ9ImIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMzIiIHkxPSIzMiIgeDI9IjMyLjA4IiB5Mj0iMzIiPjxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiMzMjM2MzkiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMyMDIxMjQiLz48L2xpbmVhckdyYWRpZW50PjxjbGlwUGF0aCBpZD0iYyI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvY2xpcFBhdGg+PC9kZWZzPjx1c2UgeGxpbms6aHJlZj0iI2EiIGZpbGw9InVybCgjYikiLz48ZyBjbGlwLXBhdGg9InVybCgjYykiPjx1c2UgeGxpbms6aHJlZj0iI2EiIGZpbGwtb3BhY2l0eT0iMCIgc3Ryb2tlPSIjMjAyMTI0IiBzdHJva2Utd2lkdGg9IjIiLz48L2c+PC9zdmc+);
  }
}

#colors-theme {
  border: 1px solid rgb(var(--GG200-rgb));
  border-radius: 4px;
  display: none;
  font-size: 13px;
  height: 64px;
  margin-bottom: 24px;
  max-width: 544px;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  #colors-theme {
    border-color: rgb(var(--GG700-rgb));
  }
}

#colors-theme.visible {
  display: flex;
}

#colors-theme > * {
  margin-bottom: auto;
  margin-top: auto;
}

#colors-theme-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTcgMTRjLTEuNjYgMC0zIDEuMzQtMyAzIDAgMS4zMS0xLjE2IDItMiAyIC45MiAxLjIyIDIuNDkgMiA0IDIgMi4yMSAwIDQtMS43OSA0LTQgMC0xLjY2LTEuMzQtMy0zLTN6bTEzLjcxLTkuMzdsLTEuMzQtMS4zNGMtLjM5LS4zOS0xLjAyLS4zOS0xLjQxIDBMOSAxMi4yNSAxMS43NSAxNWw4Ljk2LTguOTZjLjM5LS4zOS4zOS0xLjAyIDAtMS40MXoiLz48L3N2Zz4=);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background-color: rgb(var(--GG700-rgb));
  height: 24px;
  margin-inline-end: 20px;
  margin-inline-start: 24px;
  width: 24px;
}

@media (prefers-color-scheme: dark) {
  #colors-theme-icon {
    background-color: rgb(var(--GG200-rgb));
  }
}

#colors-theme-name {
  font-weight: bold;
}

#colors-theme-link {
  margin-inline-end: 24px;
  margin-inline-start: auto;
  text-decoration: none;
}

#colors-theme-link-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTE5IDE5SDVWNWg3VjNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRjMS4xIDAgMi0uOSAyLTJ2LTdoLTJ2N3pNMTQgM3YyaDMuNTlsLTkuODMgOS44MyAxLjQxIDEuNDFMMTkgNi40MVYxMGgyVjNoLTd6Ii8+PC9zdmc+Cg==);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background-color: rgb(var(--GG700-rgb));
  height: 20px;
  width: 20px;
}

@media (prefers-color-scheme: dark) {
  #colors-theme-link-icon {
    background-color: rgb(var(--GG200-rgb));
  }
}

#colors-theme-uninstall {
  height: fit-content;
  margin-inline-end: 16px;
}

#color-picker-container.visible {
  display: inline-block;
}

#color-picker-container {
  display: none;
  vertical-align: top;
}

#color-picker-tile {
  background-color: var(--custom-color-dark);
  border: 1px solid var(--custom-color-border);
  border-radius: 50%;
  box-sizing: border-box;
  opacity: 1;
}

#color-picker-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgyNHYyNEgwVjB6Ii8+PHBhdGggZD0iTTE3LjY2IDUuNDFsLjkyLjkyLTIuNjkgMi42OS0uOTItLjkyIDIuNjktMi42OU0xNy42NyAzYy0uMjYgMC0uNTEuMS0uNzEuMjlsLTMuMTIgMy4xMi0xLjkzLTEuOTEtMS40MSAxLjQxIDEuNDIgMS40MkwzIDE2LjI1VjIxaDQuNzVsOC45Mi04LjkyIDEuNDIgMS40MiAxLjQxLTEuNDEtMS45Mi0xLjkyIDMuMTItMy4xMmMuNC0uNC40LTEuMDMuMDEtMS40MmwtMi4zNC0yLjM0Yy0uMi0uMTktLjQ1LS4yOS0uNy0uMjl6TTYuOTIgMTlMNSAxNy4wOGw4LjA2LTguMDYgMS45MiAxLjkyTDYuOTIgMTl6Ii8+PC9zdmc+);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background-color: rgb(var(--GG700-rgb));
  display: inline-block;
  height: 20px;
  /* Position the icon in the middle with offset of half its size. */
  left: calc(50% - 10px);
  position: absolute;
  /* Position the icon in the middle with offset of half its size. */
  top: calc(50% - 10px);
  width: 20px;
}

#color-picker-icon.white {
  background-color: white;
}

#left-semicircle {
  background-color: var(--custom-color-light);
  border-bottom-left-radius: var(--tile-size);
  border-top-left-radius: var(--tile-size);
  display: inline-block;
  height: 100%;
  width: 50%;
}

html[dir=rtl] #left-semicircle {
  border-bottom-left-radius: 0;
  border-bottom-right-radius: var(--tile-size);
  border-top-left-radius: 0;
  border-top-right-radius: var(--tile-size);
}

#colors-theme-info {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

#refresh-daily-wrapper {
  display: none;
  margin-inline-start: auto;
}

.on-img-menu #refresh-daily-wrapper {
  display: flex;
}

#refresh-toggle-wrapper {
  height: 16px;
  margin-inline-end: 12px;
  margin-top: 31px;
  position: relative;
  width: 34px;
}

#refresh-text {
  font-size: 16px;
  user-select: none;
  width: fit-content;
}
/* Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

#custom-bg,
#custom-bg-preview {
  background-position: center center;
  background-repeat: no-repeat;
  background-size: cover;
  height: 100%;
  left: 0;
  margin: 0;
  opacity: 0;
  padding: 0;
  position: fixed;
  top: 0;
  transition: opacity 700ms;
  width: 100%;
}

#edit-bg {
  align-items: center;
  border-radius: 500px;
  bottom: 16px;
  cursor: pointer;
  display: flex;
  height: 32px;
  justify-content: center;
  min-width: 32px;
  position: fixed;
  right: 16px;
  width: fit-content;
}

#edit-bg.ep-enhanced {
  background-color: rgb(255, 255, 255);
  box-shadow: 0 3px 6px rgba(0, 0, 0, .16), 0 1px 2px rgba(0, 0, 0, .23);
}

#edit-bg:hover,
#edit-bg:active {
  background-color: rgba(255, 255, 255, .1);
}

#edit-bg:hover.ep-enhanced {
  background-color: rgb(var( --GB050-rgb));
}


@media (prefers-color-scheme: dark) {
  #edit-bg.ep-enhanced {
    background-color: rgb(var(--dark-mode-dialog-rgb));
  }
}

@media (prefers-color-scheme: dark) {
  #edit-bg:hover.ep-enhanced {
    background-color: rgb(50, 51, 54);
  }
}

html[dir=rtl] #edit-bg {
  left: 16px;
  right: auto;
}

.non-google-page #edit-bg {
  display: none;
}

#edit-bg-icon {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCI+PHBhdGggZD0iTTMgMTcuMjVWMjFoMy43NUwxNy44MSA5Ljk0bC0zLjc1LTMuNzVMMyAxNy4yNXpNMjAuNzEgNy4wNGEuOTk2Ljk5NiAwIDAgMCAwLTEuNDFsLTIuMzQtMi4zNGEuOTk2Ljk5NiAwIDAgMC0xLjQxIDBsLTEuODMgMS44MyAzLjc1IDMuNzUgMS44My0xLjgzeiIvPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);
  -webkit-mask-position-x: center;
  -webkit-mask-position-y: center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 16px;
  background-color: rgb(255, 255, 255);
  cursor: pointer;
  height: 16px;
  margin-inline-start: 0;
  width: 16px;
}

.ep-enhanced #edit-bg-icon {
  background-color: rgb(var(--GB600-rgb));
}

@media (prefers-color-scheme: dark) {
  .ep-enhanced #edit-bg-icon {
    background-color: rgb(var(--GB300-rgb));
  }
}

#edit-bg-text {
  color: rgb(var(--GB600-rgb));
  display: none;
  font-size: 14px;
  line-height: 1;
  padding-inline-end: 12px;
  padding-inline-start: 8px;
  user-select: none;
}

@media (prefers-color-scheme: dark) {
  .ep-enhanced #edit-bg-text {
    color: rgb(var(--GB300-rgb));
  }
}

@media (min-width: 550px) {
  .ep-enhanced #edit-bg-icon {
    margin-inline-start: 12px;
  }

  .ep-enhanced #edit-bg-text {
    display: inline;
  }
}

@media (max-height: 100px) {
  #edit-bg {
    display: none;
  }
}

#edit-bg-dialog::backdrop {
  background: transparent;
}

#edit-bg-dialog {
  background: #fff;
  border: none;
  border-radius: 8px;
  border-width: thin;
  bottom: 44px;
  box-shadow: 0 1px 3px 0 rgba(var(--GG800-rgb), .3),
      0 4px 8px 3px rgba(var(--GG800-rgb), .15);
  left: auto;
  padding: 0;
  position: fixed;
  right: 16px;
}

@media (prefers-color-scheme: dark) {
  #edit-bg-dialog {
    background-color: rgb(var(--dark-mode-dialog-rgb));
    box-shadow: var(--dark-mode-shadow);
  }
}

#edit-bg-menu {
  padding: 0 0 16px 0;
  width: 325px;
}

html[dir=rtl] #edit-bg-dialog {
  left: 16px;
  right: auto;
}

#edit-bg-title {
  color: rgb(var(--GG900-rgb));
  font-size: 15px;
  height: 30px;
  padding: 16px 0 0 16px;
}

html[dir=rtl] #edit-bg-title {
  padding: 16px 16px 0 0;
}

@media (prefers-color-scheme: dark) {
  #edit-bg-title {
    color: rgb(var(--GG200-rgb));
  }
}

.using-mouse-nav .bg-option:focus {
  outline: none;
}

.bg-option {
  color: rgb(var(--GG800-rgb));
  font-size: 13px;
  height: 40px;
  line-height: 40px;
}

@media (prefers-color-scheme: dark) {
  .bg-option {
    color: rgb(var(--GG200-rgb));
  }
}

.bg-option:hover {
  background-color: rgb(var(--GG100-rgb));
}

@media (prefers-color-scheme: dark) {
  .bg-option:hover {
    background-color: rgb(var(--GG800-rgb));
  }
}

.bg-option-img {
  background-size: 24px 24px;
  display: inline-block;
  height: 24px;
  line-height: normal;
  margin: 0 0 0 16px;
  text-align: center;
  vertical-align: middle;
  width: 24px;
}

html[dir=rtl] .bg-option-img {
  margin: 0 16px 0 0;
}

.bg-option.bg-option-disabled {
  opacity: .28;
}

@media (prefers-color-scheme: dark) {
  .bg-option.bg-option-disabled {
    opacity: .38;
  }
}

.bg-option.bg-option-disabled:focus {
  outline: none;
}

.bg-option.bg-option-disabled:hover {
  background-color: transparent;
}

#edit-bg-default-wallpapers .bg-option-img {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiPjxkZWZzPjxjaXJjbGUgaWQ9ImEiIGN4PSIxMS45MzYiIGN5PSIxMS45MzIiIHI9IjExLjkzMiIvPjxwYXRoIGlkPSJjIiBkPSJNMjMuODI4IDEyLjkxNUwxNi43OCA1Ljg2N2EyLjQ0MyAyLjQ0MyAwIDAgMC00LjIyNC42OTdoLS40MmwtLjc1My0xLjE5MmEuOTEuOTEgMCAwIDAtMS41MzggMGwtNi4zMTEgOS45OWEuOTEuOTEgMCAwIDAgLjE2IDEuMTUybDcuMzc2IDcuMzJjLjI4Ni4wMi41NzMuMDMuODY1LjAzIDYuMjYgMCAxMS4zOTQtNC44MTkgMTEuODkzLTEwLjk0OXoiLz48bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSIxOC4yMzclIiB4Mj0iODAuNzgxJSIgeTE9IjE2LjMxNyUiIHkyPSI4Mi45NzklIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjMUMzQUE5IiBzdG9wLW9wYWNpdHk9Ii4yIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMUMzQUE5IiBzdG9wLW9wYWNpdHk9Ii4wMiIvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggaWQ9ImYiIGQ9Ik0yMy44MjggMTIuOTE1TDE2Ljc4IDUuODY3YTIuNDQzIDIuNDQzIDAgMCAwLTQuMjI0LjY5N2gtLjQybC0uNzUzLTEuMTkyYS45MS45MSAwIDAgMC0xLjUzOCAwbC02LjMxMSA5Ljk5YS45MS45MSAwIDAgMCAuMTYgMS4xNTJsNy4zNzYgNy4zMmMuMjg2LjAyLjU3My4wMy44NjUuMDMgNi4yNiAwIDExLjM5NC00LjgxOSAxMS44OTMtMTAuOTQ5eiIvPjxwYXRoIGlkPSJoIiBkPSJNMjMuODI4IDEyLjkxNUwxNi43OCA1Ljg2N2EyLjQ0MyAyLjQ0MyAwIDAgMC00LjIyNC42OTdoLS40MmwtLjc1My0xLjE5MmEuOTEuOTEgMCAwIDAtMS41MzggMGwtNi4zMTEgOS45OWEuOTEuOTEgMCAwIDAgLjE2IDEuMTUybDcuMzc2IDcuMzJjLjI4Ni4wMi41NzMuMDMuODY1LjAzIDYuMjYgMCAxMS4zOTQtNC44MTkgMTEuODkzLTEwLjk0OXoiLz48cGF0aCBpZD0iaiIgZD0iTTIzLjgyOCAxMi45MTVMMTYuNzggNS44NjdhMi40NDMgMi40NDMgMCAwIDAtNC4yMjQuNjk3aC0uNDJsLS43NTMtMS4xOTJhLjkxLjkxIDAgMCAwLTEuNTM4IDBsLTYuMzExIDkuOTlhLjkxLjkxIDAgMCAwIC4xNiAxLjE1Mmw3LjM3NiA3LjMyYy4yODYuMDIuNTczLjAzLjg2NS4wMyA2LjI2IDAgMTEuMzk0LTQuODE5IDExLjg5My0xMC45NDl6Ii8+PHBhdGggaWQ9ImwiIGQ9Ik0yMy44MjggMTIuOTE1TDE2Ljc4IDUuODY3YTIuNDQzIDIuNDQzIDAgMCAwLTQuMjI0LjY5N2gtLjQybC0uNzUzLTEuMTkyYS45MS45MSAwIDAgMC0xLjUzOCAwbC02LjMxMSA5Ljk5YS45MS45MSAwIDAgMCAuMTYgMS4xNTJsNy4zNzYgNy4zMmMuMjg2LjAyLjU3My4wMy44NjUuMDMgNi4yNiAwIDExLjM5NC00LjgxOSAxMS44OTMtMTAuOTQ5eiIvPjxwYXRoIGlkPSJuIiBkPSJNMjMuODI4IDEyLjkxNUwxNi43OCA1Ljg2N2EyLjQ0MyAyLjQ0MyAwIDAgMC00LjIyNC42OTdoLS40MmwtLjc1My0xLjE5MmEuOTEuOTEgMCAwIDAtMS41MzggMGwtNi4zMTEgOS45OWEuOTEuOTEgMCAwIDAgLjE2IDEuMTUybDcuMzc2IDcuMzJjLjI4Ni4wMi41NzMuMDMuODY1LjAzIDYuMjYgMCAxMS4zOTQtNC44MTkgMTEuODkzLTEwLjk0OXoiLz48cGF0aCBpZD0icCIgZD0iTTIzLjgyOCAxMi45MTVMMTYuNzggNS44NjdhMi40NDMgMi40NDMgMCAwIDAtNC4yMjQuNjk3aC0uNDJsLS43NTMtMS4xOTJhLjkxLjkxIDAgMCAwLTEuNTM4IDBsLTYuMzExIDkuOTlhLjkxLjkxIDAgMCAwIC4xNiAxLjE1Mmw3LjM3NiA3LjMyYy4yODYuMDIuNTczLjAzLjg2NS4wMyA2LjI2IDAgMTEuMzk0LTQuODE5IDExLjg5My0xMC45NDl6Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJyIiB4MT0iMTQuMTMyJSIgeDI9Ijg1LjE3MiUiIHkxPSIxNC4xMzYlIiB5Mj0iODUuMTc1JSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI0ZGRiIgc3RvcC1vcGFjaXR5PSIuMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI0ZGRiIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjYSIvPjwvbWFzaz48Y2lyY2xlIGN4PSIxMS45MzYiIGN5PSIxMS45MzIiIHI9IjExLjkzMiIgZmlsbD0iIzQyODVGNCIgZmlsbC1ydWxlPSJub256ZXJvIiBtYXNrPSJ1cmwoI2IpIi8+PG1hc2sgaWQ9ImUiIGZpbGw9IiNmZmYiPjx1c2UgeGxpbms6aHJlZj0iI2MiLz48L21hc2s+PHBhdGggZmlsbD0idXJsKCNkKSIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMjMuODI4IDEyLjkxNUwxNi43OCA1Ljg2N2EyLjQ0MyAyLjQ0MyAwIDAgMC00LjIyNC42OTdoLS40MmwtLjc1My0xLjE5MmEuOTEuOTEgMCAwIDAtMS41MzggMGwtNi4zMTEgOS45OWEuOTA2LjkwNiAwIDAgMCAuMTgxIDEuMTdsNy41NzMgNy41NzJjLjA2OC0uMjUuMzU3LS4yMzguNjQ4LS4yMzggNi4yNi0uMDAyIDExLjM5My00LjgyIDExLjg5Mi0xMC45NXoiIG1hc2s9InVybCgjZSkiLz48bWFzayBpZD0iZyIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjZiIvPjwvbWFzaz48cGF0aCBmaWxsPSIjRUVFIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0yMC4zMzggMTUuMzYxbC0xLjk4OC0zLjE0NWEuOTEuOTEgMCAwIDAtMS41MzggMGwtLjU1Mi44NzMtNC44NzYtNy43MTdhLjkxLjkxIDAgMCAwLTEuNTM3IDBsLTYuMzEyIDkuOTlhLjkwMy45MDMgMCAwIDAgLjc2OSAxLjM4NGgxNS4yNjVhLjkwMy45MDMgMCAwIDAgLjc2OS0xLjM4NXoiIG1hc2s9InVybCgjZykiLz48bWFzayBpZD0iaSIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjaCIvPjwvbWFzaz48cGF0aCBmaWxsPSIjRkZGIiBmaWxsLW9wYWNpdHk9Ii40IiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0zLjUzNSAxNS40OTdsNi4zMTItOS45OWEuOTEuOTEgMCAwIDEgMS41MzcgMGw0Ljg3NiA3LjcxNy41NTItLjg3M2EuOTEuOTEgMCAwIDEgMS41MzggMGwxLjk4OCAzLjE0NmEuODk2Ljg5NiAwIDAgMSAuMTM3LjQxNC44ODQuODg0IDAgMCAwLS4xMzctLjU1bC0xLjk4OC0zLjE0NWEuOTEuOTEgMCAwIDAtMS41MzggMGwtLjU1Mi44NzMtNC44NzYtNy43MTdhLjkxLjkxIDAgMCAwLTEuNTM3IDBsLTYuMzEyIDkuOTlhLjg5Ljg5IDAgMCAwLS4xMzcuNTQ5Yy4wMS0uMTQuMDUzLS4yODEuMTM3LS40MTR6IiBtYXNrPSJ1cmwoI2kpIi8+PG1hc2sgaWQ9ImsiIGZpbGw9IiNmZmYiPjx1c2UgeGxpbms6aHJlZj0iI2oiLz48L21hc2s+PHBhdGggZmlsbD0iI0ExQzJGQSIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTEuOTkzIDYuNTY0aC41NjNhMi40NDQgMi40NDQgMCAwIDEgNC43NDcuODE1YzAgMS4zNS0xLjA5NCAyLjMzMi0yLjQ0MyAyLjMzMmgtMi44NjdjLS44OTkgMC0xLjYyOC0uNTk0LTEuNjI4LTEuNDk0cy43My0xLjY1MyAxLjYyOC0xLjY1M3oiIG1hc2s9InVybCgjaykiLz48bWFzayBpZD0ibSIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjbCIvPjwvbWFzaz48cGF0aCBmaWxsPSIjMjEyMTIxIiBmaWxsLW9wYWNpdHk9Ii4xIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xOS41NjkgMTYuNjFINC4zMDRhLjkwNi45MDYgMCAwIDEtLjkwNi0uODM2LjkwNy45MDcgMCAwIDAgLjkwNi45NzJoMTUuMjY1YS45MDYuOTA2IDAgMCAwIC45MDYtLjk3Mi45MDYuOTA2IDAgMCAxLS45MDYuODM2eiIgbWFzaz0idXJsKCNtKSIvPjxtYXNrIGlkPSJvIiBmaWxsPSIjZmZmIj48dXNlIHhsaW5rOmhyZWY9IiNuIi8+PC9tYXNrPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtb3BhY2l0eT0iLjIiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTExLjk5MyA2LjdoLjU2M2EyLjQ0MiAyLjQ0MiAwIDAgMSA0Ljc0My43NDdjMC0uMDIzLjAwNC0uMDQ1LjAwNC0uMDY4YTIuNDQ0IDIuNDQ0IDAgMCAwLTQuNzQ3LS44MTVoLS41NjNjLS44OTkgMC0xLjYyOC43NTMtMS42MjggMS42NTMgMCAuMDIzLjAwMi4wNDUuMDA0LjA2OC4wMzUtLjg3Ljc0OC0xLjU4NSAxLjYyNC0xLjU4NXoiIG1hc2s9InVybCgjbykiLz48bWFzayBpZD0icSIgZmlsbD0iI2ZmZiI+PHVzZSB4bGluazpocmVmPSIjcCIvPjwvbWFzaz48cGF0aCBmaWxsPSIjMUEyMzdFIiBmaWxsLW9wYWNpdHk9Ii4yIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0xNC44NiA5LjcxaC0yLjg2N2MtLjg3NiAwLTEuNTg5LS41NjYtMS42MjYtMS40MjcgMCAuMDIzLS4wMDQuMDQ1LS4wMDQuMDY4IDAgLjkuNzMgMS40OTQgMS42MjkgMS40OTRoMi44NjZjMS4zNSAwIDIuNDQ0LS45ODEgMi40NDQtMi4zMzIgMC0uMDIzLS4wMDMtLjA0NS0uMDA0LS4wNjgtLjAzNCAxLjMxNC0xLjExIDIuMjY1LTIuNDM4IDIuMjY1eiIgbWFzaz0idXJsKCNxKSIvPjxwYXRoIGZpbGw9IiMxQTIzN0UiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTExLjkzNiAyMy43MjlDNS4zNjggMjMuNzI5LjA0MSAxOC40MjMuMDA0IDExLjg2NGwtLjAwMS4wNjhjMCA2LjU5IDUuMzQyIDExLjkzMiAxMS45MzIgMTEuOTMyIDYuNTkgMCAxMS45MzItNS4zNDIgMTEuOTMyLTExLjkzMmwtLjAwMS0uMDY4Yy0uMDM1IDYuNTYtNS4zNjMgMTEuODY1LTExLjkzIDExLjg2NXoiIG1hc2s9InVybCgjcSkiIG9wYWNpdHk9Ii4yIi8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTEuOTM2LjEzNkMxOC41MDMuMTM2IDIzLjgzMSA1LjQ0IDIzLjg2NyAxMmwuMDAxLS4wNjhDMjMuODY4IDUuMzQyIDE4LjUyNiAwIDExLjkzNiAwIDUuMzQ2IDAgLjAwNCA1LjM0Mi4wMDQgMTEuOTMyTC4wMDUgMTJDLjA0MSA1LjQ0MSA1LjM2OC4xMzYgMTEuOTM2LjEzNnoiIG1hc2s9InVybCgjcSkiIG9wYWNpdHk9Ii4yIi8+PGNpcmNsZSBjeD0iMTEuOTM2IiBjeT0iMTEuOTMyIiByPSIxMS45MzIiIGZpbGw9InVybCgjcikiIGZpbGwtcnVsZT0ibm9uemVybyIgbWFzaz0idXJsKCNxKSIvPjxwYXRoIG1hc2s9InVybCgjcSkiIGQ9Ik0tMS4wODEtMS4wODVoMjYuMDM0djI2LjAzNEgtMS4wODF6Ii8+PC9nPjwvc3ZnPg==) no-repeat center;
}

#edit-bg-upload-image .bg-option-img {
  background: rgb(var(--GG100-rgb)) url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGcgZmlsbD0iIzAwMCIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0zIDEydjJoMTB2LTJ6Ii8+PHBhdGggZD0iTTMgNi44NDZoMi45OVYxMWgzLjk5NlY2Ljg0NkgxM0w4IDJ6Ii8+PC9nPjwvc3ZnPg==) no-repeat center;
  border-radius: 50%;
}

#edit-bg-divider {
  border-bottom: 1px solid rgb(var(--GG200-rgb));
  margin: 8px 0;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  #edit-bg-divider {
    border-color: rgba(255, 255, 255, .1);
  }
}

#custom-links-restore-default .bg-option-img {
  background: rgb(var(--GG100-rgb)) url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwaDE2djE2SDB6Ii8+PHBhdGggZmlsbD0iIzVGNjM2OCIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMS41MiA4QTIuNDgyIDIuNDgyIDAgMCAxIDQgNS41MmgzLjJWNEg0QzEuNzkyIDQgMCA1Ljc5MiAwIDhzMS43OTIgNCA0IDRoMy4ydi0xLjUySDRBMi40ODIgMi40ODIgMCAwIDEgMS41MiA4em0zLjI4LjhoNi40VjcuMkg0Ljh2MS42ek0xMiA0SDguOHYxLjUySDEyQTIuNDgyIDIuNDgyIDAgMCAxIDE0LjQ4IDggMi40ODIgMi40ODIgMCAwIDEgMTIgMTAuNDhIOC44VjEySDEyYzIuMjA4IDAgNC0xLjc5MiA0LTRzLTEuNzkyLTQtNC00eiIvPjwvZz48L3N2Zz4=) no-repeat center;
  border-radius: 50%;
}

#edit-bg-restore-default .bg-option-img {
  background: rgb(var(--GG100-rgb)) url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNOCA1LjNoNS4zNEMxMi4zOCAzLjMyIDEwLjM0IDIgOCAyYy0xLjg2IDAtMy41NC44NC00LjYyIDIuMTZsMS45OCAzLjQyQzUuNTQgNi4zMiA2LjY4IDUuMyA4IDUuM3ptMCA1LjRjLTEuMDIgMC0xLjg2LS41NC0yLjM0LTEuMzhMMi45NiA0LjdDMi4zNiA1LjY2IDIgNi44IDIgOGMwIDMgMi4xNiA1LjQ2IDUuMDQgNS45NGwxLjk4LTMuNDJjLS4zNi4xMi0uNjYuMTgtMS4wMi4xOHpNMTAuNyA4YzAtLjg0LS40Mi0xLjYyLTEuMDItMi4xaDMuOTZjLjI0LjY2LjM2IDEuMzguMzYgMi4xIDAgMy4zLTIuNyA2LTYgNmgtLjM2bDIuNy00LjY4Yy4yNC0uMzYuMzYtLjg0LjM2LTEuMzJ6TTggMTAuMWEyLjEgMi4xIDAgMSAxIDAtNC4yIDIuMSAyLjEgMCAwIDEgMCA0LjJ6Ii8+PC9kZWZzPjx1c2UgZmlsbD0iIzVGNjM2OCIgeGxpbms6aHJlZj0iI2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)  no-repeat center;
  border-radius: 50%;
}

.bg-option-text {
  display: inline-block;
  line-height: normal;
  max-width: 250px;
  overflow: hidden;
  padding-inline-start: 16px;
  text-align: start;
  text-overflow: ellipsis;
  vertical-align: middle;
  white-space: nowrap;
}

/* The width here should match that used in customBackgrounds.getNextTile. */
#bg-sel-menu {
  background-color: #fff;
  border: none;
  border-radius: 8px;
  bottom: 0;
  box-shadow: 0 1px 3px 0 rgba(var(--GG800-rgb), .3),
      0 4px 8px 3px rgba(var(--GG800-rgb), .15);
  height: 400px;
  max-height: 100vh;  /* Constrain the dialog within viewport boundaries. */
  padding: 0;
  position: fixed;
  top: 0;
  /* Suitable for 3 columns of tiles on all platforms, accounting for larger
   * scrollbar width on Windows.*/
  width: 517px;
  z-index: 10000;
}

/* Prevent footer from overlapping with header at small window heights. */
@media only screen and (max-height: 116px) {
  #bg-sel-menu {
    max-height: 116px;
  }
}

@media (prefers-color-scheme: dark) {
  #bg-sel-menu {
    background-color: rgb(var(--dark-mode-dialog-rgb));
    box-shadow: var(--dark-mode-shadow);
  }
}

/* The width is decided by the longest text length plus 16px margin on the
right, so that every text can stay on its row even on the smallest window */
@media (max-width: 356px) {
  #edit-bg-menu {
    width: 232px;
  }
}

#bg-sel-tiles {
  height: 284px;
  /* Compress the tile section in order to constrain the dialog within viewport
   * boundaries. 116px = 284px - (header + footer height) */
  max-height: calc(100vh - 116px);
  overflow-y: scroll;
  padding-inline-start: 8px;
}

#bg-sel-tiles::-webkit-scrollbar-track {
  display: none;
}

.using-mouse-nav :focus {
  outline: none;
}

#bg-sel-title-bar {
  border-bottom: 1px solid rgb(var(--GG200-rgb));
  font-size: 15px;
  height: 51px;
  line-height: 52px;
  text-align: center;
  user-select: none;
}

@media (prefers-color-scheme: dark) {
  #bg-sel-title-bar {
    border-color: rgba(255, 255, 255, .1);
  }
}

#bg-sel-back {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6Ii8+PC9zdmc+) no-repeat center;
  background-size: 20px 20px;
  display: none;
  height: 20px;
  outline: none;
  position: relative;
  width: 20px;
}

@media (prefers-color-scheme: dark) {
  #bg-sel-back {
    background: transparent;
  }
}

/* We use ::after without content to provide the masked arrow element. */
@media (prefers-color-scheme: dark) {
  #bg-sel-back::after {
    -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTIwIDExSDcuODNsNS41OS01LjU5TDEyIDRsLTggOCA4IDggMS40MS0xLjQxTDcuODMgMTNIMjB2LTJ6Ii8+PC9zdmc+);
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-size: 20px;
    background-color: rgb(var(--GG200-rgb));
    content: '';
    display: block;
    height: 20px;
    left: 0;
    position: absolute;
    top: 0;
    width: 20px;
  }
}

#bg-sel-back-circle {
  border-radius: 50%;
  display: none;
  height: 36px;
  margin: 8px 8px 0 16px;
  outline: none;
  width: 36px;
}

#bg-sel-back-circle:active,
#bg-sel-back-circle:focus {
  background: rgb(var(--GG300-rgb));
  background-position: center;
  background-size: 36px 36px;
}

@media (prefers-color-scheme: dark) {
  #bg-sel-back-circle:active,
  #bg-sel-back-circle:focus {
    background: rgb(var(--GG800-rgb));
  }
}

.is-col-sel #bg-sel-back {
  display: none;
  text-align: start;
}

.is-col-sel #bg-sel-back-circle {
  display: none;
  text-align: start;
}

.is-img-sel #bg-sel-back-circle {
  display: inline-block;
  float: left;
  margin: 8px 0 0 8px;
}

html[dir=rtl] .is-img-sel #bg-sel-back-circle {
  display: inline-block;
  float: right;
  margin: 8px 8px 0 0;
}

.is-img-sel #bg-sel-back {
  display: inline-block;
  float: left;
  margin: 8px 0 0 8px;
}

html[dir=rtl] .is-img-sel #bg-sel-back {
  float: right;
  margin: 8px 8px 0 0;
  transform: scaleX(-1);
}

#bg-sel-title {
  color: rgb(var(--GG900-rgb));
  display: inline-block;
  height: 20px;
  line-height: 20px;
  margin: 8px 0 0 0;
  text-align: center;
}

@media (prefers-color-scheme: dark) {
  #bg-sel-title {
    color: rgb(var(--GG200-rgb));
  }
}

.is-col-sel #bg-sel-title {
  padding-inline-start: 0;
  text-align: center;
}

.is-img-sel #bg-sel-title {
  float: left;
  margin: 16px 0 0 8px;
}

html[dir=rtl] .is-img-sel #bg-sel-title {
  float: right;
  margin: 16px 8px 0 0;
  text-align: start;
}

#bg-sel-footer {
  border-top: 1px solid rgb(var(--GG200-rgb));
  bottom: 0;
  color: rgb(var(--GG800-rgb));
  height: 64px;
  padding-inline-start: 0;
  position: absolute;
  text-align: end;
  user-select: none;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  #bg-sel-footer {
    border-color: rgba(255, 255, 255, .1);
  }
}

.bg-sel-footer-button {
  margin-top: 16px;
}

.bg-sel-footer-button:disabled {
  transition: none;
}

#bg-sel-footer-done {
  margin-inline-end: 16px;
}

#bg-sel-footer-cancel {
  margin-inline-end: 8px;
}

.bg-sel-tile {
  background-size: cover;
  height: 100%;
  opacity: 0;
  transition: opacity 700ms;
  width: 100%;
}

html[dir=rtl] .bg-sel-tile-bg {
  margin: 6px 8px 0 0;
}

.bg-sel-tile-bg {
  background-color: rgb(var(--GG100-rgb));
  background-size: cover;
  display: inline-block;
  height: 117px;
  margin: 6px 0 0 8px;
  position: relative;
  /* 8px for the margin on the left */
  width: calc(33% - 8px);
}

@media (prefers-color-scheme: dark) {
  .bg-sel-tile-bg {
    background-color: rgb(var(--GG900-rgb));
  }
}

/* The width here should match that used in customBackgrounds.getTilesWide. */
@media (max-width: 517px) {
  #bg-sel-menu {
    width: 352px;
  }

  .bg-sel-tile-bg {
    /* 8px for the margin on the left */
    width: calc(49.5% - 8px);
  }
}

@media (max-width: 356px) {
  #bg-sel-menu {
    width: 188px;
  }

  .bg-sel-tile-bg {
    /* 8px for the margin on the left */
    width: calc(99% - 8px);
  }
}

.bg-selected {
  border-radius: 4px;
}

.selected-border {
  border: 2px solid rgba(var(--GB600-rgb), .4);
  border-radius: 4px;
  box-sizing: border-box;
  height: 100%;
  position: relative;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  .selected-border {
    border-color: rgb(var(--GB300-rgb));
  }
}

.selected-circle {
  background: #FFF no-repeat center;
  border-radius: 50%;
  height: 22px;
  left: 66px;
  position: absolute;
  top: 46px;
  width: 22px;
}

html[dir=rtl] .selected-circle {
  left: auto;
  right: 66px;
}

@media (prefers-color-scheme: dark) {
  .selected-circle {
    background-color: rgb(var(--GG900-rgb));
  }
}

.selected-check {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSIjNDI4NUY0Ij48cGF0aCBkPSJNMCAwaDQ4djQ4SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTI0IDRDMTIuOTUgNCA0IDEyLjk1IDQgMjRjMCAxMS4wNCA4Ljk1IDIwIDIwIDIwIDExLjA0IDAgMjAtOC45NiAyMC0yMCAwLTExLjA1LTguOTYtMjAtMjAtMjB6bS00IDMwTDEwIDI0bDIuODMtMi44M0wyMCAyOC4zNGwxNS4xNy0xNS4xN0wzOCAxNiAyMCAzNHoiLz48L3N2Zz4=) no-repeat center;
  background-size: 28px 28px;
  height: 28px;
  left: 63px;
  position: absolute;
  top: 43px;
  width: 28px;
}

html[dir=rtl] .selected-check {
  left: auto;
  right: 63px;
}

@media (prefers-color-scheme: dark) {
  .selected-check {
    background: transparent;
  }
}

/* We use ::after without content to provide the masked check element. */
@media (prefers-color-scheme: dark) {
  .selected-check::after {
    -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgdmlld0JveD0iMCAwIDQ4IDQ4IiBmaWxsPSIjNDI4NUY0Ij48cGF0aCBkPSJNMCAwaDQ4djQ4SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTI0IDRDMTIuOTUgNCA0IDEyLjk1IDQgMjRjMCAxMS4wNCA4Ljk1IDIwIDIwIDIwIDExLjA0IDAgMjAtOC45NiAyMC0yMCAwLTExLjA1LTguOTYtMjAtMjAtMjB6bS00IDMwTDEwIDI0bDIuODMtMi44M0wyMCAyOC4zNGwxNS4xNy0xNS4xN0wzOCAxNiAyMCAzNHoiLz48L3N2Zz4=);
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-size: 28px;
    background-color: rgb(var(--GB300-rgb));
    content: '';
    display: block;
    height: 28px;
    left: 0;
    position: absolute;
    top: 0;
    width: 28px;
  }
}

.bg-sel-tile-title {
  background-color: rgba(var(--GG900-rgb), .71);
  bottom: 0;
  box-sizing: border-box;
  color: #FFF;
  display: inline-block;
  font-size: 13px;
  line-height: 1.6;
  min-height: 32px;
  overflow: hidden;
  padding: 8px 16px;
  position: absolute;
  text-overflow: ellipsis;
  user-select: none;
  vertical-align: middle;
  white-space: nowrap;
  width: 100%;
}

.bg-selected .bg-sel-tile-title {
  width: 118px;
}

#custom-bg-attr {
  border-radius: 8px;
  bottom: 16px;
  color: white;
  font-weight: 500;
  left: 16px;
  padding: 8px;
  position: fixed;
  text-shadow: 0 0 16px rgba(0, 0, 0, .3);
  z-index: -1;
}

html[dir=rtl] #custom-bg-attr {
  left: auto;
  position: fixed;
  right: 16px;
}

#attr1,
#attr2 {
  clear: both;
  color: inherit;
  float: left;
  font-size: 13px;
  height: 20px;
  line-height: 20px;
  max-width: 50vw;
  overflow: hidden;
  text-overflow: ellipsis;
  vertical-align: middle;
  white-space: nowrap;
}

[dir=rtl] #attr1,
[dir=rtl] #attr2 {
  float: right;
}

#custom-bg-attr #attr1 ~ #attr2 {
  font-size: 11px;
}

#custom-bg-attr.attr-link:hover {
  background: rgba(var(--GG900-rgb), .1);
}

#link-icon {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBkPSJNMCAwaDE2djE2SDB6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMS41MiA4QTIuNDgyIDIuNDgyIDAgMCAxIDQgNS41MmgzLjJWNEg0QzEuNzkyIDQgMCA1Ljc5MiAwIDhzMS43OTIgNCA0IDRoMy4ydi0xLjUySDRBMi40ODIgMi40ODIgMCAwIDEgMS41MiA4em0zLjI4LjhoNi40VjcuMkg0Ljh2MS42ek0xMiA0SDguOHYxLjUySDEyQTIuNDgyIDIuNDgyIDAgMCAxIDE0LjQ4IDggMi40ODIgMi40ODIgMCAwIDEgMTIgMTAuNDhIOC44VjEySDEyYzIuMjA4IDAgNC0xLjc5MiA0LTRzLTEuNzkyLTQtNC00eiIvPjwvZz48L3N2Zz4=);
  background-size: 10px 10px;
  display: inline-block;
  height: 10px;
  margin-inline-end: 8px;
  vertical-align: middle;
  width: 10px;
}

#link-icon.single-attr {
  background-size: 16px 16px;
  height: 18px;
  width: 16px;
}
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

'use strict';

// TODO(crbug.com/937570): After the RP launches this should be renamed to
// customizationMenu along with the file, and large parts can be
// refactored/removed.
const customize = {};

/**
 * The browser embeddedSearch.newTabPage object.
 * @type {Object}
 */
let ntpApiHandle;

/**
 * The different types of events that are logged from the NTP. This enum is
 * used to transfer information from the NTP JavaScript to the renderer and is
 * not used as a UMA enum histogram's logged value.
 * Note: Keep in sync with common/ntp_logging_events.h
 * @enum {number}
 * @const
 */
customize.LOG_TYPE = {
  // The 'Chrome backgrounds' menu item was clicked.
  NTP_CUSTOMIZE_CHROME_BACKGROUNDS_CLICKED: 40,
  // The 'Upload an image' menu item was clicked.
  NTP_CUSTOMIZE_LOCAL_IMAGE_CLICKED: 41,
  // The 'Restore default background' menu item was clicked.
  // NOTE: NTP_CUSTOMIZE_RESTORE_BACKGROUND_CLICKED (42) is logged on the
  // backend.
  // The attribution link on a customized background image was clicked.
  NTP_CUSTOMIZE_ATTRIBUTION_CLICKED: 43,
  // The 'Restore default shortcuts' menu item was clicked.
  NTP_CUSTOMIZE_RESTORE_SHORTCUTS_CLICKED: 46,
  // A collection was selected in the 'Chrome backgrounds' dialog.
  NTP_CUSTOMIZE_CHROME_BACKGROUND_SELECT_COLLECTION: 47,
  // An image was selected in the 'Chrome backgrounds' dialog.
  NTP_CUSTOMIZE_CHROME_BACKGROUND_SELECT_IMAGE: 48,
  // 'Cancel' was clicked in the 'Chrome backgrounds' dialog.
  NTP_CUSTOMIZE_CHROME_BACKGROUND_CANCEL: 49,
  // NOTE: NTP_CUSTOMIZE_CHROME_BACKGROUND_DONE (50) is logged on the backend.
  // The richer picker was opened.
  NTP_CUSTOMIZATION_MENU_OPENED: 64,
  // 'Cancel' was clicked in the richer picker.
  NTP_CUSTOMIZATION_MENU_CANCEL: 65,
  // 'Done' was clicked in the richer picker.
  NTP_CUSTOMIZATION_MENU_DONE: 66,
  // 'Upload from device' selected in the richer picker.
  NTP_BACKGROUND_UPLOAD_FROM_DEVICE: 67,
  // A collection tile was selected in the richer picker.
  NTP_BACKGROUND_OPEN_COLLECTION: 68,
  // A image tile was selected in the richer picker.
  NTP_BACKGROUND_SELECT_IMAGE: 69,
  // The back arrow was clicked in the richer picker.
  NTP_BACKGROUND_BACK_CLICK: 72,
  // The 'No background' tile was selected in the richer picker.
  NTP_BACKGROUND_DEFAULT_SELECTED: 73,
  // The custom links option in the shortcuts submenu was clicked.
  NTP_CUSTOMIZE_SHORTCUT_CUSTOM_LINKS_CLICKED: 78,
  // The Most Visited option in the shortcuts submenu was clicked.
  NTP_CUSTOMIZE_SHORTCUT_MOST_VISITED_CLICKED: 79,
  // The visibility toggle in the shortcuts submenu was clicked.
  NTP_CUSTOMIZE_SHORTCUT_VISIBILITY_TOGGLE_CLICKED: 80,
  // The 'refresh daily' toggle was licked in the richer picker.
  NTP_BACKGROUND_REFRESH_TOGGLE_CLICKED: 81,
};

/**
 * Enum for key codes.
 * @enum {number}
 * @const
 */
customize.KEYCODES = {
  BACKSPACE: 8,
  DOWN: 40,
  ENTER: 13,
  ESC: 27,
  LEFT: 37,
  RIGHT: 39,
  SPACE: 32,
  TAB: 9,
  UP: 38,
};

/**
 * Array for keycodes corresponding to arrow keys.
 * @type Array
 * @const
 */
customize.arrowKeys = [/*Left*/ 37, /*Up*/ 38, /*Right*/ 39, /*Down*/ 40];

/**
 * Enum for HTML element ids.
 * @enum {string}
 * @const
 */
customize.IDS = {
  ATTR1: 'attr1',
  ATTR2: 'attr2',
  ATTRIBUTIONS: 'custom-bg-attr',
  BACK_CIRCLE: 'bg-sel-back-circle',
  BACKGROUNDS_DEFAULT: 'backgrounds-default',
  BACKGROUNDS_DEFAULT_ICON: 'backgrounds-default-icon',
  BACKGROUNDS_BUTTON: 'backgrounds-button',
  BACKGROUNDS_IMAGE_MENU: 'backgrounds-image-menu',
  BACKGROUNDS_MENU: 'backgrounds-menu',
  BACKGROUNDS_UPLOAD: 'backgrounds-upload',
  BACKGROUNDS_UPLOAD_ICON: 'backgrounds-upload-icon',
  CANCEL: 'bg-sel-footer-cancel',
  COLOR_PICKER: 'color-picker',
  COLOR_PICKER_TILE: 'color-picker-tile',
  COLOR_PICKER_CONTAINER: 'color-picker-container',
  COLOR_PICKER_ICON: 'color-picker-icon',
  COLORS_BUTTON: 'colors-button',
  COLORS_DEFAULT_ICON: 'colors-default-icon',
  COLORS_THEME: 'colors-theme',
  COLORS_THEME_NAME: 'colors-theme-name',
  COLORS_THEME_UNINSTALL: 'colors-theme-uninstall',
  COLORS_THEME_WEBSTORE_LINK: 'colors-theme-link',
  COLORS_MENU: 'colors-menu',
  CUSTOMIZATION_MENU: 'customization-menu',
  CUSTOM_BG: 'custom-bg',
  CUSTOM_BG_PREVIEW: 'custom-bg-preview',
  CUSTOM_LINKS_RESTORE_DEFAULT: 'custom-links-restore-default',
  CUSTOM_LINKS_RESTORE_DEFAULT_TEXT: 'custom-links-restore-default-text',
  DEFAULT_WALLPAPERS: 'edit-bg-default-wallpapers',
  DEFAULT_WALLPAPERS_TEXT: 'edit-bg-default-wallpapers-text',
  DONE: 'bg-sel-footer-done',
  EDIT_BG: 'edit-bg',
  EDIT_BG_DIALOG: 'edit-bg-dialog',
  EDIT_BG_DIVIDER: 'edit-bg-divider',
  EDIT_BG_MENU: 'edit-bg-menu',
  MENU_BACK_CIRCLE: 'menu-back-circle',
  MENU_CANCEL: 'menu-cancel',
  MENU_DONE: 'menu-done',
  MENU_TITLE: 'menu-title',
  LINK_ICON: 'link-icon',
  MENU: 'bg-sel-menu',
  OPTIONS_TITLE: 'edit-bg-title',
  REFRESH_DAILY_WRAPPER: 'refresh-daily-wrapper',
  REFRESH_TOGGLE: 'refresh-daily-toggle',
  RESTORE_DEFAULT: 'edit-bg-restore-default',
  RESTORE_DEFAULT_TEXT: 'edit-bg-restore-default-text',
  SHORTCUTS_BUTTON: 'shortcuts-button',
  SHORTCUTS_HIDE: 'sh-hide',
  SHORTCUTS_HIDE_TOGGLE: 'sh-hide-toggle',
  SHORTCUTS_MENU: 'shortcuts-menu',
  SHORTCUTS_OPTION_CUSTOM_LINKS: 'sh-option-cl',
  SHORTCUTS_OPTION_MOST_VISITED: 'sh-option-mv',
  UPLOAD_IMAGE: 'edit-bg-upload-image',
  UPLOAD_IMAGE_TEXT: 'edit-bg-upload-image-text',
  TILES: 'bg-sel-tiles',
  TITLE: 'bg-sel-title',
};

/**
 * Enum for classnames.
 * @enum {string}
 * @const
 */
customize.CLASSES = {
  ATTR_SMALL: 'attr-small',
  ATTR_LINK: 'attr-link',
  COLLECTION_DIALOG: 'is-col-sel',
  COLLECTION_SELECTED: 'bg-selected',  // Highlight selected tile
  COLLECTION_TILE: 'bg-sel-tile',  // Preview tile for background customization
  COLLECTION_TILE_BG: 'bg-sel-tile-bg',
  COLLECTION_TITLE: 'bg-sel-tile-title',  // Title of a background image
  HIDDEN_SELECTED: 'hidden-selected',
  IMAGE_DIALOG: 'is-img-sel',
  ON_IMAGE_MENU: 'on-img-menu',
  OPTION: 'bg-option',
  OPTION_DISABLED: 'bg-option-disabled',  // The menu option is disabled.
  MENU_SHOWN: 'menu-shown',
  MOUSE_NAV: 'using-mouse-nav',
  SELECTED: 'selected',
  SELECTED_BORDER: 'selected-border',
  SELECTED_CHECK: 'selected-check',
  SELECTED_CIRCLE: 'selected-circle',
  SINGLE_ATTR: 'single-attr',
  VISIBLE: 'visible'
};

/**
 * Enum for background option menu entries, in the order they appear in the UI.
 * @enum {number}
 * @const
 */
customize.MENU_ENTRIES = {
  CHROME_BACKGROUNDS: 0,
  UPLOAD_IMAGE: 1,
  CUSTOM_LINKS_RESTORE_DEFAULT: 2,
  RESTORE_DEFAULT: 3,
};

/**
 * The semi-transparent, gradient overlay for the custom background. Intended
 * to improve readability of NTP elements/text.
 * @type {string}
 * @const
 */
customize.CUSTOM_BACKGROUND_OVERLAY =
    'linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.3))';

/**
 * Number of rows in the custom background dialog to preload.
 * @type {number}
 * @const
 */
customize.ROWS_TO_PRELOAD = 3;

// These should match the corresponding values in local_ntp.js, that control the
// mv-notice element.
customize.delayedHideNotification = -1;
customize.NOTIFICATION_TIMEOUT = 10000;

/**
 * Were the background tiles already created.
 * @type {boolean}
 */
customize.builtTiles = false;

/**
 * The default title for the richer picker.
 * @type {string}
 */
customize.richerPicker_defaultTitle = '';

/**
 * Called when the error notification should be shown.
 * @type {?Function}
 */
customize.showErrorNotification = null;

/**
 * Called when the custom link notification should be hidden.
 * @type {?Function}
 */
customize.hideCustomLinkNotification = null;

/**
 * Id of the currently open collection.
 * @type {string}
 */
customize.currentCollectionId = '';

/**
 * The currently active Background submenu. This can be the collections page or
 * a collection's image menu. Defaults to the collections page.
 * @type {Object}
 */
customize.richerPicker_openBackgroundSubmenu = {
  menuId: customize.IDS.BACKGROUNDS_MENU,
  title: '',
};

/**
 * The currently selected submenu (i.e. Background, Shortcuts, etc.) in the
 * richer picker.
 * @type {Object}
 */
customize.richerPicker_selectedSubmenu = {
  menuButton: null,  // The submenu's button element in the sidebar.
  menu: null,        // The submenu's menu element.
  // The submenu's title. Will usually be |customize.richerPicker_defaultTitle|
  // unless this is a background collection's image menu.
  title: '',
};

/**
 * The currently selected options in the customization menu.
 * @type {Object}
 */
customize.selectedOptions = {
  background: null,  // Contains the background image tile.
  // The data associated with a currently selected background.
  backgroundData: null,
  // Contains the selected shortcut type's DOM element, i.e. either custom links
  // or most visited.
  shortcutType: null,
  shortcutsAreHidden: false,
  color: null,  // Contains the selected color tile's DOM element.
};

/**
 * The preselected options in the richer picker.
 * @type {Object}
 */
customize.preselectedOptions = {
  // Contains the selected type's DOM element, i.e. either custom links or most
  // visited.
  shortcutType: null,
  shortcutsAreHidden: false,
  colorsMenuTile: null,       // Selected tile for Colors menu.
  backgroundsMenuTile: null,  // Selected tile for Backgrounds menu.
};

/**
 * Whether tiles for Colors menu already loaded.
 * @type {boolean}
 */
customize.colorsMenuLoaded = false;


/**
 * Default color for custom color picker in hex format.
 * @type {string}
 */
customize.defaultCustomColor = '#000000';

/**
 * Custom color picked in hex format.
 * @type {string}
 */
customize.customColorPicked = customize.defaultCustomColor;

/**
 * Sets the visibility of the settings menu and individual options depending on
 * their respective features.
 */
customize.setMenuVisibility = function() {
  // Reset all hidden values.
  $(customize.IDS.EDIT_BG).hidden = false;
  $(customize.IDS.DEFAULT_WALLPAPERS).hidden = false;
  $(customize.IDS.UPLOAD_IMAGE).hidden = false;
  $(customize.IDS.RESTORE_DEFAULT).hidden = false;
  $(customize.IDS.EDIT_BG_DIVIDER).hidden = false;
  $(customize.IDS.COLORS_BUTTON).hidden = !configData.chromeColors;
  $(customize.IDS.COLOR_PICKER_CONTAINER)
      .classList.toggle(
          customize.CLASSES.VISIBLE, configData.chromeColorsCustomColorPicker);
};

/**
 * Called when user changes the theme.
 */
customize.onThemeChange = function() {
  // Hide the settings menu or individual options if the related features are
  // disabled.
  customize.setMenuVisibility();

  // If theme changed after Colors menu was loaded, then reload theme info.
  if (customize.colorsMenuLoaded) {
    customize.colorsMenuOnThemeChange();
  }
};

/**
 * Display custom background image attributions on the page.
 * @param {string} attributionLine1 First line of attribution.
 * @param {string} attributionLine2 Second line of attribution.
 * @param {string} attributionActionUrl Url to learn more about the image.
 */
customize.setAttribution = function(
    attributionLine1, attributionLine2, attributionActionUrl) {
  const attributionBox = $(customize.IDS.ATTRIBUTIONS);
  const hasActionUrl = attributionActionUrl !== '';

  const attr1 = document.createElement(hasActionUrl ? 'a' : 'span');
  attr1.id = customize.IDS.ATTR1;
  const attr2 = document.createElement(hasActionUrl ? 'a' : 'span');
  attr2.id = customize.IDS.ATTR2;

  if (attributionLine1 !== '') {
    // Shouldn't be changed from textContent for security assurances.
    attr1.textContent = attributionLine1;
    if (hasActionUrl) {
      attr1.href = attributionActionUrl;
    }
    $(customize.IDS.ATTRIBUTIONS).appendChild(attr1);
  }

  if (attributionLine2 !== '') {
    // Shouldn't be changed from textContent for security assurances.
    attr2.textContent = attributionLine2;
    if (hasActionUrl) {
      attr2.href = attributionActionUrl;
    }
    attributionBox.appendChild(attr2);
  }

  if (hasActionUrl) {
    const attr = (attributionLine2 !== '' ? attr2 : attr1);
    attr.classList.add(customize.CLASSES.ATTR_LINK);

    const linkIcon = document.createElement('div');
    linkIcon.id = customize.IDS.LINK_ICON;
    // Enlarge link-icon when there is only one line of attribution
    if (attributionLine2 === '') {
      linkIcon.classList.add(customize.CLASSES.SINGLE_ATTR);
    }
    attr.insertBefore(linkIcon, attr.firstChild);

    attributionBox.onclick = e => {
      if (attr1.contains(e.target) || attr2.contains(e.target)) {
        ntpApiHandle.logEvent(
            customize.LOG_TYPE.NTP_CUSTOMIZE_ATTRIBUTION_CLICKED);
      }
    };
  }
  attributionBox.classList.toggle(customize.CLASSES.ATTR_LINK, hasActionUrl);
};

customize.clearAttribution = function() {
  $(customize.IDS.ATTRIBUTIONS).innerHTML = '';
};

customize.unselectTile = function() {
  if (configData.richerPicker) {
    return;
  }
  $(customize.IDS.DONE).disabled = true;
  customize.selectedOptions.background = null;
  $(customize.IDS.DONE).tabIndex = -1;
};

/**
 * Remove all collection tiles from the container when the dialog
 * is closed.
 */
customize.resetSelectionDialog = function() {
  $(customize.IDS.TILES).scrollTop = 0;
  const tileContainer = $(customize.IDS.TILES);
  while (tileContainer.firstChild) {
    tileContainer.removeChild(tileContainer.firstChild);
  }
  customize.unselectTile();
};

/**
 * Apply selected styling to |menuButton| and make corresponding |menu| visible.
 * If |title| is not specified, the default title will be used.
 * @param {?Element} menuButton The sidebar button element to apply styling to.
 * @param {?Element} menu The submenu element to apply styling to.
 * @param {string=} title The submenu's title.
 */
customize.richerPicker_showSubmenu = function(menuButton, menu, title = '') {
  if (!menuButton || !menu) {
    return;
  }

  customize.richerPicker_hideOpenSubmenu();

  if (!title) {  // Use the default title if not specified.
    title = customize.richerPicker_defaultTitle;
  }

  // Save this as the currently open submenu.
  customize.richerPicker_selectedSubmenu.menuButton = menuButton;
  customize.richerPicker_selectedSubmenu.menu = menu;
  customize.richerPicker_selectedSubmenu.title = title;

  menuButton.classList.toggle(customize.CLASSES.SELECTED, true);
  menu.classList.toggle(customize.CLASSES.MENU_SHOWN, true);
  $(customize.IDS.MENU_TITLE).textContent = title;
  menuButton.setAttribute('aria-selected', true);

  // Indicate if this is a Background collection's image menu, which will enable
  // the back button.
  $(customize.IDS.CUSTOMIZATION_MENU)
      .classList.toggle(
          customize.CLASSES.ON_IMAGE_MENU,
          menu.id === customize.IDS.BACKGROUNDS_IMAGE_MENU);
};

/**
 * Hides the currently open submenu if any.
 */
customize.richerPicker_hideOpenSubmenu = function() {
  if (!customize.richerPicker_selectedSubmenu.menuButton) {
    return;  // No submenu is open.
  }

  customize.richerPicker_selectedSubmenu.menuButton.classList.toggle(
      customize.CLASSES.SELECTED, false);
  customize.richerPicker_selectedSubmenu.menu.classList.toggle(
      customize.CLASSES.MENU_SHOWN, false);
  $(customize.IDS.MENU_TITLE).textContent = customize.richerPicker_defaultTitle;
  customize.richerPicker_selectedSubmenu.menuButton.setAttribute(
      'aria-selected', false);

  customize.richerPicker_selectedSubmenu.menuButton = null;
  customize.richerPicker_selectedSubmenu.menu = null;
  customize.richerPicker_selectedSubmenu.title =
      customize.richerPicker_defaultTitle;
};

/**
 * Remove image tiles and maybe swap back to main background menu.
 */
customize.richerPicker_resetImageMenu = function() {
  const backgroundMenu = $(customize.IDS.BACKGROUNDS_MENU);
  const imageMenu = $(customize.IDS.BACKGROUNDS_IMAGE_MENU);
  const menu = $(customize.IDS.CUSTOMIZATION_MENU);
  const menuTitle = $(customize.IDS.MENU_TITLE);

  imageMenu.innerHTML = '';
  menu.classList.toggle(customize.CLASSES.ON_IMAGE_MENU, false);
  customize.richerPicker_showSubmenu(
      $(customize.IDS.BACKGROUNDS_BUTTON), backgroundMenu);
  customize.richerPicker_openBackgroundSubmenu.menuId =
      customize.IDS.BACKGROUNDS_MENU;
  customize.richerPicker_openBackgroundSubmenu.title = '';
  backgroundMenu.scrollTop = 0;
};

/**
 * Close the collection selection dialog and cleanup the state
 * @param {?Element} menu The dialog to be closed
 */
customize.closeCollectionDialog = function(menu) {
  if (!menu) {
    return;
  }
  menu.close();
  customize.resetSelectionDialog();
};

/**
 * Close and reset the dialog if this is not the richer picker, and set the
 * background.
 * @param {string} url The url of the selected background.
 */
customize.setBackground = function(
    url, attributionLine1, attributionLine2, attributionActionUrl,
    collection_id) {
  if (!configData.richerPicker) {
    customize.closeCollectionDialog($(customize.IDS.MENU));
  }
  window.chrome.embeddedSearch.newTabPage.setBackgroundInfo(
      url, attributionLine1, attributionLine2, attributionActionUrl,
      collection_id);
};

/**
 * Apply selected shortcut options.
 */
customize.richerPicker_setShortcutOptions = function() {
  const shortcutTypeChanged = customize.preselectedOptions.shortcutType !==
      customize.selectedOptions.shortcutType;
  if (customize.preselectedOptions.shortcutsAreHidden !==
      customize.selectedOptions.shortcutsAreHidden) {
    // Only trigger a notification if |toggleMostVisitedOrCustomLinks| will not
    // be called immediately after. Successive |onmostvisitedchange| events can
    // interfere with each other.
    chrome.embeddedSearch.newTabPage.toggleShortcutsVisibility(
        !shortcutTypeChanged);
  }
  if (shortcutTypeChanged) {
    chrome.embeddedSearch.newTabPage.toggleMostVisitedOrCustomLinks();
  }
};

/**
 * Creates a tile for the customization menu with a title.
 * @param {string} id The id for the new element.
 * @param {string} imageUrl The background image url for the new element.
 * @param {string} name The name for the title of the new element.
 * @param {Object} dataset The dataset for the new element.
 * @param {?Function} onClickInteraction Function for onclick interaction.
 * @param {?Function} onKeyInteraction Function for onkeydown interaction.
 */
customize.createTileWithTitle = function(
    id, imageUrl, name, dataset, onClickInteraction, onKeyInteraction) {
  const tile = customize.createTileThumbnail(
      id, imageUrl, dataset, onClickInteraction, onKeyInteraction);
  tile.setAttribute('aria-label', name);
  tile.title = name;
  customize.fadeInImageTile(tile, imageUrl, null);

  const title = document.createElement('div');
  title.classList.add(customize.CLASSES.COLLECTION_TITLE);
  title.textContent = name;
  tile.appendChild(title);

  const tileBackground = document.createElement('div');
  tileBackground.classList.add(customize.CLASSES.COLLECTION_TILE_BG);
  tileBackground.appendChild(tile);
  return tileBackground;
};

/**
 * Creates a tile for the customization menu without a title.
 * @param {string} id The id for the new element.
 * @param {string} imageUrl The background image url for the new element.
 * @param {Object} dataset The dataset for the new element.
 * @param {?Function} onClickInteraction Function for onclick interaction.
 * @param {?Function} onKeyInteraction Function for onkeydown interaction.
 */
customize.createTileWithoutTitle = function(
    id, imageUrl, dataset, onClickInteraction, onKeyInteraction) {
  const tile = customize.createTileThumbnail(
      id, imageUrl, dataset, onClickInteraction, onKeyInteraction);
  customize.fadeInImageTile(tile, imageUrl, null);

  const tileBackground = document.createElement('div');
  tileBackground.classList.add(customize.CLASSES.COLLECTION_TILE_BG);
  tileBackground.appendChild(tile);
  return tileBackground;
};

/**
 * Create a tile thumbnail with image for customization menu.
 * @param {string} id The id for the new element.
 * @param {string} imageUrl The background image url for the new element.
 * @param {Object} dataset The dataset for the new element.
 * @param {?Function} onClickInteraction Function for onclick interaction.
 * @param {?Function} onKeyInteraction Function for onkeydown interaction.
 */
customize.createTileThumbnail = function(
    id, imageUrl, dataset, onClickInteraction, onKeyInteraction) {
  const tile = document.createElement('div');
  tile.id = id;
  tile.classList.add(customize.CLASSES.COLLECTION_TILE);
  tile.style.backgroundImage = 'url(' + imageUrl + ')';
  for (const key in dataset) {
    tile.dataset[key] = dataset[key];
  }
  tile.tabIndex = -1;

  // Accessibility support for screen readers.
  tile.setAttribute('role', 'button');
  tile.setAttribute('aria-pressed', false);

  tile.onclick = onClickInteraction;
  tile.onkeydown = onKeyInteraction;
  return tile;
};

/**
 * Get the number of tiles in a row according to current window width.
 * @return {number} the number of tiles per row
 */
customize.getTilesWide = function() {
  // Browser window can only fit two columns. Should match "#bg-sel-menu" width.
  if ($(customize.IDS.MENU).offsetWidth < 517) {
    return 2;
  } else if ($(customize.IDS.MENU).offsetWidth < 356) {
    // Browser window can only fit one column. Should match @media (max-width:
    // 356) "#bg-sel-menu" width.
    return 1;
  }

  return 3;
};

/**
 * @param {number} deltaX Change in the x direction.
 * @param {number} deltaY Change in the y direction.
 * @param {Element} current The current tile.
 */
customize.richerPicker_getNextTile = function(deltaX, deltaY, current) {
  const menu = $(customize.IDS.CUSTOMIZATION_MENU);
  const container = customize.richerPicker_selectedSubmenu.menu;

  const tiles = Array.from(
      container.getElementsByClassName(customize.CLASSES.COLLECTION_TILE_BG));
  let nextIndex = tiles.indexOf(current.parentElement);
  if (deltaX != 0) {
    nextIndex += deltaX;
  } else if (deltaY != 0) {
    const startingTop = current.parentElement.getBoundingClientRect().top;
    const startingLeft = current.parentElement.getBoundingClientRect().left;

    // Search until a tile in a different row and the same column is found.
    while (tiles[nextIndex] &&
           (tiles[nextIndex].getBoundingClientRect().top == startingTop ||
            tiles[nextIndex].getBoundingClientRect().left != startingLeft)) {
      nextIndex += deltaY;
    }
  }
  if (tiles[nextIndex]) {
    return tiles[nextIndex].children[0];
  }
  return null;
};

/**
 * Get the next tile when the arrow keys are used to navigate the grid.
 * Returns null if the tile doesn't exist.
 * @param {number} deltaX Change in the x direction.
 * @param {number} deltaY Change in the y direction.
 * @param {Element} currentElem The current tile.
 */
customize.getNextTile = function(deltaX, deltaY, currentElem) {
  if (configData.richerPicker) {
    return customize.richerPicker_getNextTile(deltaX, deltaY, currentElem);
  }
  const current = currentElem.dataset.tileIndex;
  let idPrefix = 'coll_tile_';
  if ($(customize.IDS.MENU)
          .classList.contains(customize.CLASSES.IMAGE_DIALOG)) {
    idPrefix = 'img_tile_';
  }

  if (deltaX != 0) {
    const target = parseInt(current, /*radix=*/ 10) + deltaX;
    return $(idPrefix + target);
  } else if (deltaY != 0) {
    let target = parseInt(current, /*radix=*/ 10);
    let nextTile = $(idPrefix + target);
    const startingTop = nextTile.getBoundingClientRect().top;
    const startingLeft = nextTile.getBoundingClientRect().left;

    // Search until a tile in a different row and the same column is found.
    while (nextTile &&
           (nextTile.getBoundingClientRect().top == startingTop ||
            nextTile.getBoundingClientRect().left != startingLeft)) {
      target += deltaY;
      nextTile = $(idPrefix + target);
    }
    return nextTile;
  }
};

/**
 * Event handler when a key is pressed on a tile in customization menu.
 * @param {Event} event The event attributes for the interaction.
 */
customize.tileOnKeyDownInteraction = function(event) {
  const tile = event.currentTarget;
  if (event.keyCode === customize.KEYCODES.ENTER ||
      event.keyCode === customize.KEYCODES.SPACE) {
    event.preventDefault();
    event.stopPropagation();
    if (tile.onClickOverride) {
      tile.onClickOverride(event);
      return;
    }
    tile.onclick(event);
  } else if (customize.arrowKeys.includes(event.keyCode)) {
    // Handle arrow key navigation.
    event.preventDefault();

    let target = null;
    if (event.keyCode === customize.KEYCODES.LEFT) {
      target = customize.getNextTile(
          window.chrome.embeddedSearch.searchBox.rtl ? 1 : -1, 0,
          /** @type HTMLElement */ (tile));
    } else if (event.keyCode === customize.KEYCODES.UP) {
      target = customize.getNextTile(0, -1, /** @type HTMLElement */ (tile));
    } else if (event.keyCode === customize.KEYCODES.RIGHT) {
      target = customize.getNextTile(
          window.chrome.embeddedSearch.searchBox.rtl ? -1 : 1, 0,
          /** @type HTMLElement */ (tile));
    } else if (event.keyCode === customize.KEYCODES.DOWN) {
      target = customize.getNextTile(0, 1, /** @type HTMLElement */ (tile));
    }
    if (target) {
      target.focus();
    } else {
      tile.focus();
    }
  }
};

/**
 * Show dialog for selecting a Chrome background.
 */
customize.showCollectionSelectionDialog = function() {
  const tileContainer = configData.richerPicker ?
      $(customize.IDS.BACKGROUNDS_MENU) :
      $(customize.IDS.TILES);
  if (configData.richerPicker && customize.builtTiles) {
    tileContainer.focus();
    return;
  }
  customize.builtTiles = true;
  const menu = configData.richerPicker ? $(customize.IDS.CUSTOMIZATION_MENU) :
                                         $(customize.IDS.MENU);
  if (!menu.open) {
    menu.showModal();
  }

  // Create dialog header.
  $(customize.IDS.TITLE).textContent =
      configData.translatedStrings.selectChromeWallpaper;
  if (!configData.richerPicker) {
    menu.classList.add(customize.CLASSES.COLLECTION_DIALOG);
    menu.classList.remove(customize.CLASSES.IMAGE_DIALOG);
  }

  const tileOnClickInteraction = function(event) {
    let tile = event.target;
    if (tile.classList.contains(customize.CLASSES.COLLECTION_TITLE)) {
      tile = tile.parentNode;
    }

    // Load images for selected collection.
    const imgElement = $('ntp-images-loader');
    if (imgElement) {
      imgElement.parentNode.removeChild(imgElement);
    }
    const imgScript = document.createElement('script');
    imgScript.id = 'ntp-images-loader';
    imgScript.src = 'chrome-search://local-ntp/ntp-background-images.js?' +
        'collection_id=' + tile.dataset.id;

    if (configData.richerPicker) {
      ntpApiHandle.logEvent(customize.LOG_TYPE.NTP_BACKGROUND_OPEN_COLLECTION);
    } else {
      ntpApiHandle.logEvent(
          customize.LOG_TYPE.NTP_CUSTOMIZE_CHROME_BACKGROUND_SELECT_COLLECTION);
    }

    document.body.appendChild(imgScript);

    imgScript.onload = function() {
      // Verify that the individual image data was successfully loaded.
      const imageDataLoaded =
          (collImg.length > 0 && collImg[0].collectionId == tile.dataset.id);

      // Dependent upon the success of the load, populate the image selection
      // dialog or close the current dialog.
      if (imageDataLoaded) {
        $(customize.IDS.BACKGROUNDS_MENU)
            .classList.toggle(customize.CLASSES.MENU_SHOWN, false);
        $(customize.IDS.BACKGROUNDS_IMAGE_MENU)
            .classList.toggle(customize.CLASSES.MENU_SHOWN, true);

        // In the RP the upload or default tile may be selected.
        if (!configData.richerPicker) {
          customize.resetSelectionDialog();
        }
        customize.showImageSelectionDialog(
            tile.dataset.name, tile.dataset.tileIndex);
      } else {
        customize.handleError(collImgErrors);
      }
    };
  };

  // Create dialog tiles.
  for (let i = 0; i < coll.length; ++i) {
    const id = coll[i].collectionId;
    const name = coll[i].collectionName;
    const imageUrl = coll[i].previewImageUrl;
    const dataset = {'id': id, 'name': name, 'tileIndex': i};

    const tile = customize.createTileWithTitle(
        'coll_tile_' + i, imageUrl, name, dataset, tileOnClickInteraction,
        customize.tileOnKeyDownInteraction);
    tileContainer.appendChild(tile);
  }

  // Attach event listeners for upload and default tiles
  $(customize.IDS.BACKGROUNDS_UPLOAD_ICON).onkeydown =
      customize.tileOnKeyDownInteraction;
  $(customize.IDS.BACKGROUNDS_DEFAULT_ICON).onkeydown =
      customize.tileOnKeyDownInteraction;
  $(customize.IDS.BACKGROUNDS_UPLOAD_ICON).onClickOverride =
      $(customize.IDS.BACKGROUNDS_UPLOAD).onkeydown;
  $(customize.IDS.BACKGROUNDS_DEFAULT_ICON).onClickOverride =
      $(customize.IDS.BACKGROUNDS_DEFAULT).onkeydown;

  tileContainer.focus();
};

/**
 * Return true if any shortcut option is selected.
 * Note: Shortcut options are preselected according to current user settings.
 */
customize.richerPicker_isShortcutOptionSelected = function() {
  // Check if the currently selected options are not the preselection.
  const notPreselectedType = customize.preselectedOptions.shortcutType !==
      customize.selectedOptions.shortcutType;
  const notPreselectedHidden =
      customize.preselectedOptions.shortcutsAreHidden !==
      customize.selectedOptions.shortcutsAreHidden;
  return notPreselectedType || notPreselectedHidden;
};

/**
 * Apply styling to a selected option in the richer picker (i.e. the selected
 * background image, shortcut type, and color).
 * @param {?Element} option The option to apply styling to.
 */
customize.richerPicker_applySelectedState = function(option) {
  if (!option) {
    return;
  }

  option.parentElement.classList.toggle(customize.CLASSES.SELECTED, true);
  // Create and append a blue checkmark to the selected option.
  const selectedCircle = document.createElement('div');
  const selectedCheck = document.createElement('div');
  selectedCircle.classList.add(customize.CLASSES.SELECTED_CIRCLE);
  selectedCheck.classList.add(customize.CLASSES.SELECTED_CHECK);
  option.appendChild(selectedCircle);
  option.appendChild(selectedCheck);
  option.setAttribute('aria-pressed', true);
};

/**
 * Remove styling from a selected option in the richer picker (i.e. the selected
 * background image, shortcut type, and color).
 * @param {?Element} option The option to remove styling from.
 */
customize.richerPicker_removeSelectedState = function(option) {
  if (!option) {
    return;
  }

  option.parentElement.classList.toggle(customize.CLASSES.SELECTED, false);
  // Remove all blue checkmarks from the selected option (this includes the
  // checkmark and the encompassing circle).
  const select = option.querySelectorAll(
      '.' + customize.CLASSES.SELECTED_CHECK + ', .' +
      customize.CLASSES.SELECTED_CIRCLE);
  select.forEach((element) => {
    element.remove();
  });
  option.setAttribute('aria-pressed', false);
};

/**
 * Preview an image as a custom backgrounds.
 * @param {!Element} tile The tile that was selected.
 */
customize.richerPicker_previewImage = function(tile) {
  if (!configData.richerPicker) {
    return;
  }
  // Set preview images at 720p by replacing the params in the url.
  const background = $(customize.IDS.CUSTOM_BG);
  const preview = $(customize.IDS.CUSTOM_BG_PREVIEW);
  if (tile.id === customize.IDS.BACKGROUNDS_DEFAULT_ICON) {
    preview.dataset.hasImage = false;
    preview.style.backgroundImage = '';
    preview.style.backgroundColor = 'transparent';
  } else if (tile.id === customize.IDS.BACKGROUNDS_UPLOAD_ICON) {
    // No previews for uploaded images.
    return;
  } else {
    preview.dataset.hasImage = true;

    const re = /w\d+\-h\d+/;
    preview.style.backgroundImage =
        tile.style.backgroundImage.replace(re, 'w1280-h720');
    preview.dataset.attributionLine1 = tile.dataset.attributionLine1;
    preview.dataset.attributionLine2 = tile.dataset.attributionLine2;
    preview.dataset.attributionActionUrl = tile.dataset.attributionActionUrl;
  }
  background.style.opacity = 0;
  preview.style.opacity = 1;
  preview.dataset.hasPreview = true;

  ntpApiHandle.onthemechange();
};

/**
 * Remove a preview image of a custom backgrounds.
 */
customize.richerPicker_unpreviewImage = function() {
  if (!configData.richerPicker) {
    return;
  }
  const preview = $(customize.IDS.CUSTOM_BG_PREVIEW);
  if (!preview.dataset || !preview.dataset.hasPreview) {
    return;
  }

  preview.style.opacity = 0;
  preview.style.backgroundImage = '';
  preview.style.backgroundColor = 'transparent';
  preview.dataset.hasPreview = false;
  $(customize.IDS.CUSTOM_BG).style.opacity = 1;

  ntpApiHandle.onthemechange();
};

/**
 * Handles background selection. Apply styling to the selected background tile
 * in the richer picker, preview the background, and enable the done button.
 * @param {?Element} tile The selected background tile.
 */
customize.richerPicker_selectBackgroundTile = function(tile) {
  if (!tile) {
    return;
  }

  if (tile.parentElement.classList.contains(customize.CLASSES.SELECTED)) {
    // If the clicked tile is already selected do nothing.
    return;
  } else if (customize.selectedOptions.background) {
    // Deselect any currently selected tile.
    customize.richerPicker_removeSelectedState(
        customize.selectedOptions.background);
  }

  $(customize.IDS.REFRESH_TOGGLE).checked = false;

  // Remove any existing preview.
  customize.richerPicker_unpreviewImage();

  customize.selectedOptions.background = tile;
  customize.selectedOptions.backgroundData = {
    id: tile.id,
    url: tile.dataset.url || '',
    attr1: tile.dataset.attributionLine1 || '',
    attr2: tile.dataset.attributionLine2 || '',
    attrUrl: tile.dataset.attributionActionUrl || '',
    collectionId: '',
  };
  customize.richerPicker_applySelectedState(tile);

  // Don't apply a preview for a preselected image, as it's already the
  // page background.
  if (customize.preselectedOptions.backgroundsMenuTile !== tile) {
    customize.richerPicker_previewImage(tile);
  }
};

/**
 * Handles shortcut type selection. Apply styling to a selected shortcut option
 * and enable the done button.
 * @param {?Element} shortcutType The shortcut type option's element.
 */
customize.richerPicker_selectShortcutType = function(shortcutType) {
  if (!shortcutType ||
      customize.selectedOptions.shortcutType === shortcutType) {
    return;  // The option has already been selected.
  }

  // Clear the previous selection, if any.
  if (customize.selectedOptions.shortcutType) {
    customize.richerPicker_removeSelectedState(
        customize.selectedOptions.shortcutType);
  }
  customize.selectedOptions.shortcutType = shortcutType;
  customize.richerPicker_applySelectedState(shortcutType);
};

/**
 * Handles hide shortcuts toggle. Apply/remove styling for the toggle and
 * enable/disable the done button.
 * Note: If the toggle is enabled, the options for shortcut type will appear
 * "disabled".
 * @param {boolean} areHidden True if the shortcuts are hidden, i.e. the toggle
 *     is on.
 */
customize.richerPicker_toggleShortcutHide = function(areHidden) {
  // (De)select the shortcut hide option.
  $(customize.IDS.SHORTCUTS_HIDE)
      .classList.toggle(customize.CLASSES.SELECTED, areHidden);
  $(customize.IDS.SHORTCUTS_HIDE_TOGGLE).checked = areHidden;
  $(customize.IDS.SHORTCUTS_MENU)
      .classList.toggle(customize.CLASSES.HIDDEN_SELECTED, areHidden);

  customize.selectedOptions.shortcutsAreHidden = areHidden;
};

/**
 * Handles the "refresh daily" toggle.
 * @param {boolean} toggledOn True if the toggle has been enabled.
 */
customize.richerPicker_toggleRefreshDaily = function(toggledOn) {
  $(customize.IDS.REFRESH_TOGGLE).checked = toggledOn;
  if (!toggledOn) {
    customize.richerPicker_selectBackgroundTile(
        $(customize.IDS.BACKGROUNDS_DEFAULT_ICON));
    return;
  }

  if (customize.selectedOptions.background) {
    customize.richerPicker_removeSelectedState(
        customize.selectedOptions.background);
  }

  customize.selectedOptions.background = null;
  customize.selectedOptions.backgroundData = {
    id: '',
    url: '',
    attr1: '',
    attr2: '',
    attrUrl: '',
    collectionId: customize.currentCollectionId,
  };
};

/**
 * Apply border and checkmark when a tile is selected
 * @param {!Element} tile The tile to apply styling to.
 */
customize.applySelectedState = function(tile) {
  tile.classList.add(customize.CLASSES.COLLECTION_SELECTED);
  const selectedBorder = document.createElement('div');
  const selectedCircle = document.createElement('div');
  const selectedCheck = document.createElement('div');
  selectedBorder.classList.add(customize.CLASSES.SELECTED_BORDER);
  selectedCircle.classList.add(customize.CLASSES.SELECTED_CIRCLE);
  selectedCheck.classList.add(customize.CLASSES.SELECTED_CHECK);
  selectedBorder.appendChild(selectedCircle);
  selectedBorder.appendChild(selectedCheck);
  tile.appendChild(selectedBorder);
  tile.dataset.oldLabel = tile.getAttribute('aria-label');
  tile.setAttribute(
      'aria-label',
      tile.dataset.oldLabel + ' ' + configData.translatedStrings.selectedLabel);
};

/**
 * Remove border and checkmark when a tile is un-selected
 * @param {!Element} tile The tile to remove styling from.
 */
customize.removeSelectedState = function(tile) {
  tile.classList.remove(customize.CLASSES.COLLECTION_SELECTED);
  tile.removeChild(tile.firstChild);
  tile.setAttribute('aria-label', tile.dataset.oldLabel);
};

/**
 * Show dialog for selecting an image. Image data should previously have been
 * loaded into collImg via
 * chrome-search://local-ntp/ntp-background-images.js?collection_id=<collection_id>
 * @param {string} dialogTitle The title to be displayed at the top of the
 *     dialog.
 * @param {number} collIndex The index of the collection this image menu belongs
 * to.
 */
customize.showImageSelectionDialog = function(dialogTitle, collIndex) {
  const firstNTile = customize.ROWS_TO_PRELOAD * customize.getTilesWide();
  const tileContainer = configData.richerPicker ?
      $(customize.IDS.BACKGROUNDS_IMAGE_MENU) :
      $(customize.IDS.TILES);
  const menu = configData.richerPicker ? $(customize.IDS.CUSTOMIZATION_MENU) :
                                         $(customize.IDS.MENU);

  if (configData.richerPicker) {
    menu.classList.toggle(customize.CLASSES.ON_IMAGE_MENU, true);
    customize.richerPicker_showSubmenu(
        $(customize.IDS.BACKGROUNDS_BUTTON), tileContainer, dialogTitle);
    // Save the current image menu. Used to restore to when the Background
    // submenu is reopened.
    customize.richerPicker_openBackgroundSubmenu.menuId =
        customize.IDS.BACKGROUNDS_IMAGE_MENU;
    customize.richerPicker_openBackgroundSubmenu.title = dialogTitle;
  } else {
    $(customize.IDS.TITLE).textContent = dialogTitle;
    menu.classList.remove(customize.CLASSES.COLLECTION_DIALOG);
    menu.classList.add(customize.CLASSES.IMAGE_DIALOG);
  }

  const tileInteraction = function(tile) {
    if (customize.selectedOptions.background && !configData.richerPicker) {
      customize.removeSelectedState(customize.selectedOptions.background);
      if (customize.selectedOptions.background.id === tile.id) {
        customize.unselectTile();
        return;
      }
    }

    if (configData.richerPicker) {
      if (!customize.selectedOptions.backgroundData ||
          customize.selectedOptions.backgroundData.id !== tile.id) {
        ntpApiHandle.logEvent(customize.LOG_TYPE.NTP_BACKGROUND_SELECT_IMAGE);
      }
      customize.richerPicker_selectBackgroundTile(tile);
    } else {
      customize.applySelectedState(tile);
      customize.selectedOptions.background = tile;
    }

    $(customize.IDS.DONE).tabIndex = 0;

    // Turn toggle off when an image is selected.
    $(customize.IDS.DONE).disabled = false;
    ntpApiHandle.logEvent(
        customize.LOG_TYPE.NTP_CUSTOMIZE_CHROME_BACKGROUND_SELECT_IMAGE);
  };

  const tileOnClickInteraction = function(event) {
    const clickCount = event.detail;
    // Control + option + space will fire the onclick event with 0 clickCount.
    if (clickCount <= 1) {
      tileInteraction(event.currentTarget);
    } else if (
        clickCount === 2 &&
        customize.selectedOptions.background === event.currentTarget) {
      customize.setBackground(
          event.currentTarget.dataset.url,
          event.currentTarget.dataset.attributionLine1,
          event.currentTarget.dataset.attributionLine2,
          event.currentTarget.dataset.attributionActionUrl,
          /*collection_id=*/ '');
    }
  };

  const preLoadTiles = [];
  const postLoadTiles = [];

  for (let i = 0; i < collImg.length; ++i) {
    const dataset = {};

    dataset.attributionLine1 =
        (collImg[i].attributions[0] !== undefined ? collImg[i].attributions[0] :
                                                    '');
    dataset.attributionLine2 =
        (collImg[i].attributions[1] !== undefined ? collImg[i].attributions[1] :
                                                    '');
    dataset.attributionActionUrl = collImg[i].attributionActionUrl;
    dataset.url = collImg[i].imageUrl;
    dataset.tileIndex = i;

    let tileId = 'img_tile_' + i;
    if (configData.richerPicker) {
      tileId = 'coll_' + collIndex + '_' + tileId;
    }
    const tile = customize.createTileThumbnail(
        tileId, collImg[i].thumbnailImageUrl, dataset, tileOnClickInteraction,
        customize.tileOnKeyDownInteraction);

    tile.setAttribute('aria-label', collImg[i].attributions[0]);
    tile.title = collImg[i].attributions[0];

    // Load the first |ROWS_TO_PRELOAD| rows of tiles.
    if (i < firstNTile) {
      preLoadTiles.push(tile);
    } else {
      postLoadTiles.push(tile);
    }

    const tileBackground = document.createElement('div');
    tileBackground.classList.add(customize.CLASSES.COLLECTION_TILE_BG);
    tileBackground.appendChild(tile);
    tileContainer.appendChild(tileBackground);
  }
  let tileGetsLoaded = 0;
  for (const tile of preLoadTiles) {
    customize.loadTile(tile, collImg, () => {
      // After the preloaded tiles finish loading, the rest of the tiles start
      // loading.
      if (++tileGetsLoaded === preLoadTiles.length) {
        postLoadTiles.forEach(
            (tile) => customize.loadTile(tile, collImg, null));
      }
    });
  }

  customize.currentCollectionId = collImg[0].collectionId;
  $(customize.IDS.REFRESH_TOGGLE).checked = false;
  // If an image tile was previously selected re-select it now.
  if (customize.selectedOptions.backgroundData) {
    const selected = $(customize.selectedOptions.backgroundData.id);
    if (selected) {
      customize.richerPicker_selectBackgroundTile(selected);
    } else if (
        customize.selectedOptions.backgroundData.collectionId ===
        customize.currentCollectionId) {
      $(customize.IDS.REFRESH_TOGGLE).checked = true;
    }
  } else {
    customize.richerPicker_preselectBackgroundOption();
  }
  $(customize.IDS.REFRESH_DAILY_WRAPPER).hidden = false;

  if (configData.richerPicker) {
    $(customize.IDS.BACKGROUNDS_IMAGE_MENU).focus();
  } else {
    $(customize.IDS.TILES).focus();
  }
};

/**
 * Add background image src to the tile and add animation for the tile once it
 * successfully loaded.
 * @param {!Object} tile the tile that needs to be loaded.
 * @param {!Object} imageData the source imageData.
 * @param {?Function} countLoad If not null, called after the tile finishes
 *     loading.
 */
customize.loadTile = function(tile, imageData, countLoad) {
  tile.style.backgroundImage =
      'url(' + imageData[tile.dataset.tileIndex].thumbnailImageUrl + ')';
  customize.fadeInImageTile(
      tile, imageData[tile.dataset.tileIndex].thumbnailImageUrl, countLoad);
};

/**
 * Fade in effect for both collection and image tile. Once the image
 * successfully loads, we can assume the background image with the same source
 * has also loaded. Then, we set opacity for the tile to start the animation.
 * @param {!Object} tile The tile to add the fade in animation to.
 * @param {string} imageUrl the image url for the tile
 * @param {?Function} countLoad If not null, called after the tile finishes
 *     loading.
 */
customize.fadeInImageTile = function(tile, imageUrl, countLoad) {
  const image = new Image();
  image.onload = () => {
    tile.style.opacity = '1';
    if (countLoad) {
      countLoad();
    }
  };
  image.src = imageUrl;
};

/**
 * Load the NTPBackgroundCollections script. It'll create a global
 * variable name "coll" which is a dict of background collections data.
 */
customize.loadChromeBackgrounds = function() {
  const collElement = $('ntp-collection-loader');
  if (collElement) {
    collElement.parentNode.removeChild(collElement);
  }
  const collScript = document.createElement('script');
  collScript.id = 'ntp-collection-loader';
  collScript.src = 'chrome-search://local-ntp/ntp-background-collections.js?' +
      'collection_type=background';
  collScript.onload = function() {
    if (configData.richerPicker) {
      customize.showCollectionSelectionDialog();
    }
  };
  document.body.appendChild(collScript);
};

/**
 * Close dialog when an image is selected via the file picker.
 */
customize.closeCustomizationDialog = function() {
  if (configData.richerPicker) {
    $(customize.IDS.CUSTOMIZATION_MENU).close();
  } else {
    $(customize.IDS.EDIT_BG_DIALOG).close();
  }
};

/**
 * Get the next visible option. There are times when various combinations of
 * options are hidden.
 * @param {number} current_index Index of the option the key press occurred on.
 * @param {number} deltaY Direction to search in, -1 for up, 1 for down.
 */
customize.getNextOption = function(current_index, deltaY) {
  // Create array corresponding to the menu. Important that this is in the same
  // order as the MENU_ENTRIES enum, so we can index into it.
  const entries = [];
  entries.push($(customize.IDS.DEFAULT_WALLPAPERS));
  entries.push($(customize.IDS.UPLOAD_IMAGE));
  entries.push($(customize.IDS.CUSTOM_LINKS_RESTORE_DEFAULT));
  entries.push($(customize.IDS.RESTORE_DEFAULT));

  let idx = current_index;
  do {
    idx = idx + deltaY;
    if (idx === -1) {
      idx = 3;
    }
    if (idx === 4) {
      idx = 0;
    }
  } while (
      idx !== current_index &&
      (entries[idx].hidden ||
       entries[idx].classList.contains(customize.CLASSES.OPTION_DISABLED)));
  return entries[idx];
};

/**
 * Hide custom background options based on the network state
 * @param {boolean} online The current state of the network
 */
customize.networkStateChanged = function(online) {
  $(customize.IDS.DEFAULT_WALLPAPERS).hidden = !online;
};

/**
 * Open the customization menu and set it to the default submenu (Background).
 */
customize.richerPicker_openCustomizationMenu = function() {
  ntpApiHandle.logEvent(customize.LOG_TYPE.NTP_CUSTOMIZATION_MENU_OPENED);
  customize.richerPicker_showSubmenu(
      $(customize.IDS.BACKGROUNDS_BUTTON), $(customize.IDS.BACKGROUNDS_MENU));

  customize.richerPicker_preselectShortcutOptions();
  customize.richerPicker_preselectBackgroundOption();
  customize.loadChromeBackgrounds();
  customize.loadColorsMenu();
  if (!$(customize.IDS.CUSTOMIZATION_MENU).open) {
    $(customize.IDS.CUSTOMIZATION_MENU).showModal();
  }
};

/**
 * Reset the selected options in the customization menu.
 */
customize.richerPicker_resetSelectedOptions = function() {
  // Reset background selection.
  customize.richerPicker_removeSelectedState(
      customize.selectedOptions.background);
  customize.selectedOptions.background = null;
  customize.selectedOptions.backgroundData = null;

  customize.resetColorsSelectedOptions();

  customize.richerPicker_preselectShortcutOptions();
};

/**
 * Preselect the shortcut type and visibility to reflect the current state on
 * the page.
 */
customize.richerPicker_preselectShortcutOptions = function() {
  const shortcutType = chrome.embeddedSearch.newTabPage.isUsingMostVisited ?
      $(customize.IDS.SHORTCUTS_OPTION_MOST_VISITED) :
      $(customize.IDS.SHORTCUTS_OPTION_CUSTOM_LINKS);
  const shortcutsAreHidden =
      !chrome.embeddedSearch.newTabPage.areShortcutsVisible;
  customize.preselectedOptions.shortcutType = shortcutType;
  customize.preselectedOptions.shortcutsAreHidden = shortcutsAreHidden;
  customize.richerPicker_selectShortcutType(shortcutType);
  customize.richerPicker_toggleShortcutHide(shortcutsAreHidden);
};

/**
 * Preselect the background tile that corresponds to the current page
 * background.
 */
customize.richerPicker_preselectBackgroundOption = function() {
  if (!configData.richerPicker) {
    return;
  }

  customize.preselectedOptions.backgroundsMenuTile = null;

  const ntpTheme = assert(ntpApiHandle.ntpTheme);
  if (!ntpTheme.customBackgroundConfigured) {
    // Default.
    customize.preselectedOptions.backgroundsMenuTile =
        $(customize.IDS.BACKGROUNDS_DEFAULT_ICON);
  } else if (ntpTheme.imageUrl.includes(
                 'chrome-search://local-ntp/background.jpg')) {
    // Local image.
    customize.preselectedOptions.backgroundsMenuTile =
        $(customize.IDS.BACKGROUNDS_UPLOAD_ICON);
  } else if (
      ntpTheme.collectionId !== '' &&
      customize.currentCollectionId == ntpTheme.collectionId) {
    // Daily refresh.
    $(customize.IDS.REFRESH_TOGGLE).checked = true;
  } else if (!customize.selectedOptions.backgroundData) {
    // Image tile. Only if another background hasn't already been selected.
    customize.preselectedOptions.backgroundsMenuTile =
        document.querySelector('[data-url="' + ntpTheme.imageUrl + '"]');
  }

  customize.richerPicker_selectBackgroundTile(
      customize.preselectedOptions.backgroundsMenuTile);
  customize.selectedOptions.backgroundData = null;
};

/**
 * Resets the customization menu.
 */
customize.richerPicker_resetCustomizationMenu = function() {
  customize.richerPicker_resetSelectedOptions();
  customize.richerPicker_resetImageMenu();
  customize.richerPicker_hideOpenSubmenu();
  customize.resetColorPicker();
};

/**
 * Close and reset the customization menu.
 */
customize.richerPicker_closeCustomizationMenu = function() {
  $(customize.IDS.BACKGROUNDS_MENU).scrollTop = 0;
  $(customize.IDS.CUSTOMIZATION_MENU).close();
  customize.richerPicker_resetCustomizationMenu();

  customize.richerPicker_unpreviewImage();
};

/**
 * Cancel customization, revert any changes, and close the richer picker.
 */
customize.richerPicker_cancelCustomization = function() {
  ntpApiHandle.logEvent(customize.LOG_TYPE.NTP_CUSTOMIZATION_MENU_CANCEL);

  if (customize.isColorOptionSelected()) {
    customize.cancelColor();
  }

  customize.richerPicker_closeCustomizationMenu();
};

/**
 * Apply the currently selected customization options and close the richer
 * picker.
 */
customize.richerPicker_applyCustomization = function() {
  if (customize.isBackgroundOptionSelected()) {
    customize.setBackground(
        customize.selectedOptions.backgroundData.url,
        customize.selectedOptions.backgroundData.attr1,
        customize.selectedOptions.backgroundData.attr2,
        customize.selectedOptions.backgroundData.attrUrl,
        customize.selectedOptions.backgroundData.collectionId);
  }
  if (customize.richerPicker_isShortcutOptionSelected()) {
    customize.richerPicker_setShortcutOptions();
  }
  if (customize.isColorOptionSelected()) {
    customize.confirmColor();
  }
  customize.richerPicker_closeCustomizationMenu();
};

/**
 * Initialize the settings menu, custom backgrounds dialogs, and custom
 * links menu items. Set the text and event handlers for the various
 * elements.
 * @param {!Function} showErrorNotification Called when the error notification
 *     should be displayed.
 * @param {!Function} hideCustomLinkNotification Called when the custom link
 *     notification should be hidden.
 */
customize.init = function(showErrorNotification, hideCustomLinkNotification) {
  ntpApiHandle = window.chrome.embeddedSearch.newTabPage;
  const editDialog = $(customize.IDS.EDIT_BG_DIALOG);

  $(customize.IDS.OPTIONS_TITLE).textContent =
      configData.translatedStrings.customizeThisPage;

  if (configData.richerPicker) {
    // Store the main menu title so it can be restored if needed.
    customize.richerPicker_defaultTitle =
        $(customize.IDS.MENU_TITLE).textContent;
  }

  $(customize.IDS.EDIT_BG)
      .setAttribute(
          'aria-label', configData.translatedStrings.customizeThisPage);

  $(customize.IDS.EDIT_BG)
      .setAttribute('title', configData.translatedStrings.customizeThisPage);

  // Selecting a local image for the background should close the picker.
  if (configData.richerPicker) {
    ntpApiHandle.onlocalbackgroundselected = () => {
      customize.selectedOptions.backgroundData = null;
      customize.richerPicker_applyCustomization();
    };
  }

  // Edit gear icon interaction events.
  const editBackgroundInteraction = function() {
    if (configData.richerPicker) {
      customize.richerPicker_openCustomizationMenu();
    } else {
      editDialog.showModal();
    }
  };
  $(customize.IDS.EDIT_BG).onclick = function(event) {
    $(customize.IDS.CUSTOMIZATION_MENU)
        .classList.add(customize.CLASSES.MOUSE_NAV);
    editDialog.classList.add(customize.CLASSES.MOUSE_NAV);
    editBackgroundInteraction();
  };

  $(customize.IDS.MENU_CANCEL).onclick = function(event) {
    customize.richerPicker_cancelCustomization();
  };


  // Find the first menu option that is not hidden or disabled.
  const findFirstMenuOption = () => {
    const editMenu = $(customize.IDS.EDIT_BG_MENU);
    for (let i = 1; i < editMenu.children.length; i++) {
      const option = editMenu.children[i];
      if (option.classList.contains(customize.CLASSES.OPTION) &&
          !option.hidden &&
          !option.classList.contains(customize.CLASSES.OPTION_DISABLED)) {
        option.focus();
        return;
      }
    }
  };

  $(customize.IDS.EDIT_BG).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      // no default behavior for ENTER
      event.preventDefault();
      editDialog.classList.remove(customize.CLASSES.MOUSE_NAV);
      editBackgroundInteraction();
      findFirstMenuOption();
    }
  };

  // Interactions to close the customization option dialog.
  const editDialogInteraction = function() {
    editDialog.close();
  };
  editDialog.onclick = function(event) {
    editDialog.classList.add(customize.CLASSES.MOUSE_NAV);
    if (event.target === editDialog) {
      editDialogInteraction();
    }
  };
  editDialog.onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ESC) {
      editDialogInteraction();
    } else if (
        editDialog.classList.contains(customize.CLASSES.MOUSE_NAV) &&
        (event.keyCode === customize.KEYCODES.TAB ||
         event.keyCode === customize.KEYCODES.UP ||
         event.keyCode === customize.KEYCODES.DOWN)) {
      // When using tab in mouse navigation mode, select the first option
      // available.
      event.preventDefault();
      findFirstMenuOption();
      editDialog.classList.remove(customize.CLASSES.MOUSE_NAV);
    } else if (event.keyCode === customize.KEYCODES.TAB) {
      // If keyboard navigation is attempted, remove mouse-only mode.
      editDialog.classList.remove(customize.CLASSES.MOUSE_NAV);
    } else if (customize.arrowKeys.includes(event.keyCode)) {
      event.preventDefault();
      editDialog.classList.remove(customize.CLASSES.MOUSE_NAV);
    }
  };

  customize.initCustomLinksItems(hideCustomLinkNotification);
  customize.initCustomBackgrounds(showErrorNotification);
};

/**
 * Initialize custom link items in the settings menu dialog. Set the text
 * and event handlers for the various elements.
 * @param {!Function} hideCustomLinkNotification Called when the custom link
 *     notification should be hidden.
 */
customize.initCustomLinksItems = function(hideCustomLinkNotification) {
  customize.hideCustomLinkNotification = hideCustomLinkNotification;

  const editDialog = $(customize.IDS.EDIT_BG_DIALOG);
  const menu = $(customize.IDS.MENU);

  $(customize.IDS.CUSTOM_LINKS_RESTORE_DEFAULT_TEXT).textContent =
      configData.translatedStrings.restoreDefaultLinks;

  // Interactions with the "Restore default shortcuts" option.
  const customLinksRestoreDefaultInteraction = function() {
    editDialog.close();
    customize.hideCustomLinkNotification();
    window.chrome.embeddedSearch.newTabPage.resetCustomLinks();
    ntpApiHandle.logEvent(
        customize.LOG_TYPE.NTP_CUSTOMIZE_RESTORE_SHORTCUTS_CLICKED);
  };
  $(customize.IDS.CUSTOM_LINKS_RESTORE_DEFAULT).onclick = () => {
    if (!$(customize.IDS.CUSTOM_LINKS_RESTORE_DEFAULT)
             .classList.contains(customize.CLASSES.OPTION_DISABLED)) {
      customLinksRestoreDefaultInteraction();
    }
  };
  $(customize.IDS.CUSTOM_LINKS_RESTORE_DEFAULT).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER) {
      customLinksRestoreDefaultInteraction();
    } else if (event.keyCode === customize.KEYCODES.UP) {
      // Handle arrow key navigation.
      event.preventDefault();
      customize
          .getNextOption(
              customize.MENU_ENTRIES.CUSTOM_LINKS_RESTORE_DEFAULT, -1)
          .focus();
    } else if (event.keyCode === customize.KEYCODES.DOWN) {
      event.preventDefault();
      customize
          .getNextOption(customize.MENU_ENTRIES.CUSTOM_LINKS_RESTORE_DEFAULT, 1)
          .focus();
    }
  };
};

/**
 * Initialize the settings menu and custom backgrounds dialogs. Set the
 * text and event handlers for the various elements.
 * @param {!Function} showErrorNotification Called when the error notification
 *     should be displayed.
 */
customize.initCustomBackgrounds = function(showErrorNotification) {
  customize.showErrorNotification = showErrorNotification;

  const editDialog = $(customize.IDS.EDIT_BG_DIALOG);
  const menu = $(customize.IDS.MENU);

  $(customize.IDS.DEFAULT_WALLPAPERS_TEXT).textContent =
      configData.translatedStrings.defaultWallpapers;
  $(customize.IDS.UPLOAD_IMAGE_TEXT).textContent =
      configData.translatedStrings.uploadImage;
  $(customize.IDS.RESTORE_DEFAULT_TEXT).textContent =
      configData.translatedStrings.restoreDefaultBackground;
  $(customize.IDS.DONE).textContent =
      configData.translatedStrings.selectionDone;
  $(customize.IDS.CANCEL).textContent =
      configData.translatedStrings.selectionCancel;

  window.addEventListener('online', function(event) {
    customize.networkStateChanged(true);
  });

  window.addEventListener('offline', function(event) {
    customize.networkStateChanged(false);
  });

  if (!window.navigator.onLine) {
    customize.networkStateChanged(false);
  }

  $(customize.IDS.BACK_CIRCLE)
      .setAttribute('aria-label', configData.translatedStrings.backLabel);
  $(customize.IDS.CANCEL)
      .setAttribute('aria-label', configData.translatedStrings.selectionCancel);
  $(customize.IDS.DONE)
      .setAttribute('aria-label', configData.translatedStrings.selectionDone);

  $(customize.IDS.DONE).disabled = true;

  // Interactions with the "Upload an image" option.
  const uploadImageInteraction = function() {
    window.chrome.embeddedSearch.newTabPage.selectLocalBackgroundImage();
    if (configData.richerPicker) {
      ntpApiHandle.logEvent(
          customize.LOG_TYPE.NTP_BACKGROUND_UPLOAD_FROM_DEVICE);
    } else {
      ntpApiHandle.logEvent(
          customize.LOG_TYPE.NTP_CUSTOMIZE_LOCAL_IMAGE_CLICKED);
    }
  };

  $(customize.IDS.UPLOAD_IMAGE).onclick = (event) => {
    if (!$(customize.IDS.UPLOAD_IMAGE)
             .classList.contains(customize.CLASSES.OPTION_DISABLED)) {
      uploadImageInteraction();
    }
  };
  $(customize.IDS.UPLOAD_IMAGE).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER) {
      uploadImageInteraction();
    }

    // Handle arrow key navigation.
    if (event.keyCode === customize.KEYCODES.UP) {
      event.preventDefault();
      customize.getNextOption(customize.MENU_ENTRIES.UPLOAD_IMAGE, -1).focus();
    }
    if (event.keyCode === customize.KEYCODES.DOWN) {
      event.preventDefault();
      customize.getNextOption(customize.MENU_ENTRIES.UPLOAD_IMAGE, 1).focus();
    }
  };

  // Interactions with the "Restore default background" option.
  const restoreDefaultInteraction = function() {
    editDialog.close();
    customize.clearAttribution();
    window.chrome.embeddedSearch.newTabPage.resetBackgroundInfo();
  };
  $(customize.IDS.RESTORE_DEFAULT).onclick = (event) => {
    if (!$(customize.IDS.RESTORE_DEFAULT)
             .classList.contains(customize.CLASSES.OPTION_DISABLED)) {
      restoreDefaultInteraction();
    }
  };
  $(customize.IDS.RESTORE_DEFAULT).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER) {
      restoreDefaultInteraction();
    }

    // Handle arrow key navigation.
    if (event.keyCode === customize.KEYCODES.UP) {
      event.preventDefault();
      customize.getNextOption(customize.MENU_ENTRIES.RESTORE_DEFAULT, -1)
          .focus();
    }
    if (event.keyCode === customize.KEYCODES.DOWN) {
      event.preventDefault();
      customize.getNextOption(customize.MENU_ENTRIES.RESTORE_DEFAULT, 1)
          .focus();
    }
  };

  // Interactions with the "Chrome backgrounds" option.
  const defaultWallpapersInteraction = function(event) {
    customize.loadChromeBackgrounds();
    $('ntp-collection-loader').onload = function() {
      editDialog.close();
      if (typeof coll != 'undefined' && coll.length > 0) {
        customize.showCollectionSelectionDialog();
      } else {
        customize.handleError(collErrors);
      }
    };
    ntpApiHandle.logEvent(
        customize.LOG_TYPE.NTP_CUSTOMIZE_CHROME_BACKGROUNDS_CLICKED);
  };
  $(customize.IDS.DEFAULT_WALLPAPERS).onclick = function(event) {
    $(customize.IDS.MENU).classList.add(customize.CLASSES.MOUSE_NAV);
    defaultWallpapersInteraction(event);
  };
  $(customize.IDS.DEFAULT_WALLPAPERS).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER) {
      $(customize.IDS.MENU).classList.remove(customize.CLASSES.MOUSE_NAV);
      defaultWallpapersInteraction(event);
    }

    // Handle arrow key navigation.
    if (event.keyCode === customize.KEYCODES.UP) {
      event.preventDefault();
      customize.getNextOption(customize.MENU_ENTRIES.CHROME_BACKGROUNDS, -1)
          .focus();
    }
    if (event.keyCode === customize.KEYCODES.DOWN) {
      event.preventDefault();
      customize.getNextOption(customize.MENU_ENTRIES.CHROME_BACKGROUNDS, 1)
          .focus();
    }
  };

  // Escape and Backspace handling for the background picker dialog.
  menu.onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.SPACE) {
      $(customize.IDS.TILES).scrollTop += $(customize.IDS.TILES).offsetHeight;
      event.stopPropagation();
      event.preventDefault();
    }
    if (event.keyCode === customize.KEYCODES.ESC ||
        event.keyCode === customize.KEYCODES.BACKSPACE) {
      event.preventDefault();
      event.stopPropagation();
      if (menu.classList.contains(customize.CLASSES.COLLECTION_DIALOG)) {
        menu.close();
        customize.resetSelectionDialog();
      } else {
        customize.resetSelectionDialog();
        customize.showCollectionSelectionDialog();
      }
    }

    // If keyboard navigation is attempted, remove mouse-only mode.
    if (event.keyCode === customize.KEYCODES.TAB ||
        event.keyCode === customize.KEYCODES.LEFT ||
        event.keyCode === customize.KEYCODES.UP ||
        event.keyCode === customize.KEYCODES.RIGHT ||
        event.keyCode === customize.KEYCODES.DOWN) {
      menu.classList.remove(customize.CLASSES.MOUSE_NAV);
    }
  };

  // Interactions with the back arrow on the image selection dialog.
  const backInteraction = function(event) {
    if (configData.richerPicker) {
      ntpApiHandle.logEvent(customize.LOG_TYPE.NTP_BACKGROUND_BACK_CLICK);
      customize.richerPicker_resetImageMenu();
    }
    customize.resetSelectionDialog();
    customize.showCollectionSelectionDialog();
  };
  $(customize.IDS.BACK_CIRCLE).onclick = backInteraction;
  $(customize.IDS.MENU_BACK_CIRCLE).onclick = backInteraction;
  $(customize.IDS.BACK_CIRCLE).onkeyup = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      backInteraction(event);
    }
  };
  $(customize.IDS.MENU_BACK_CIRCLE).onkeyup = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      backInteraction(event);
    }
  };
  // Pressing Spacebar on the back arrow shouldn't scroll the dialog.
  $(customize.IDS.BACK_CIRCLE).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.SPACE) {
      event.stopPropagation();
    }
  };

  // Interactions with the cancel button on the background picker dialog.
  $(customize.IDS.CANCEL).onclick = function(event) {
    customize.closeCollectionDialog(menu);
    ntpApiHandle.logEvent(
        customize.LOG_TYPE.NTP_CUSTOMIZE_CHROME_BACKGROUND_CANCEL);
  };
  $(customize.IDS.CANCEL).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      customize.closeCollectionDialog(menu);
      ntpApiHandle.logEvent(
          customize.LOG_TYPE.NTP_CUSTOMIZE_CHROME_BACKGROUND_CANCEL);
    }
  };

  // Interactions with the done button on the background picker dialog.
  const doneInteraction = function(event) {
    const done = configData.richerPicker ? $(customize.IDS.MENU_DONE) :
                                           $(customize.IDS.DONE);
    if (configData.richerPicker) {
      ntpApiHandle.logEvent(customize.LOG_TYPE.NTP_CUSTOMIZATION_MENU_DONE);
      customize.richerPicker_applyCustomization();
    } else if (customize.selectedOptions.background) {
      // Also closes the customization menu.
      customize.setBackground(
          customize.selectedOptions.background.dataset.url,
          customize.selectedOptions.background.dataset.attributionLine1,
          customize.selectedOptions.background.dataset.attributionLine2,
          customize.selectedOptions.background.dataset.attributionActionUrl,
          '');
    }
  };
  $(customize.IDS.DONE).onclick = doneInteraction;
  $(customize.IDS.MENU_DONE).onclick = doneInteraction;
  $(customize.IDS.DONE).onkeyup = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER) {
      doneInteraction(event);
    }
  };

  // On any arrow key event in the tiles area, focus the first tile.
  $(customize.IDS.TILES).onkeydown = function(event) {
    if (document.activeElement === $(customize.IDS.TILES) &&
        customize.arrowKeys.includes(event.keyCode)) {
      event.preventDefault();
      if ($(customize.IDS.MENU)
              .classList.contains(customize.CLASSES.COLLECTION_DIALOG)) {
        $('coll_tile_0').focus();
      } else {
        document.querySelector('[id$="img_tile_0"]').focus();
      }
    }
  };

  $(customize.IDS.BACKGROUNDS_MENU).onkeydown = function(event) {
    if (document.activeElement === $(customize.IDS.BACKGROUNDS_MENU) &&
        customize.arrowKeys.includes(event.keyCode)) {
      event.preventDefault();
      $(customize.IDS.BACKGROUNDS_UPLOAD_ICON).focus();
    }
  };

  $(customize.IDS.BACKGROUNDS_IMAGE_MENU).onkeydown = function(event) {
    if (document.activeElement === $(customize.IDS.BACKGROUNDS_IMAGE_MENU) &&
        customize.arrowKeys.includes(event.keyCode)) {
      event.preventDefault();
      document.querySelector('[id$="img_tile_0"]').focus();
    }
  };

  $(customize.IDS.BACKGROUNDS_UPLOAD).onclick = uploadImageInteraction;
  $(customize.IDS.BACKGROUNDS_UPLOAD).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      uploadImageInteraction();
    }
  };

  $(customize.IDS.BACKGROUNDS_DEFAULT).onclick = function(event) {
    const tile = $(customize.IDS.BACKGROUNDS_DEFAULT_ICON);
    tile.dataset.url = '';
    tile.dataset.attributionLine1 = '';
    tile.dataset.attributionLine2 = '';
    tile.dataset.attributionActionUrl = '';
    if (!$(customize.IDS.BACKGROUNDS_DEFAULT)
             .classList.contains(customize.CLASSES.SELECTED)) {
      ntpApiHandle.logEvent(customize.LOG_TYPE.NTP_BACKGROUND_DEFAULT_SELECTED);
      customize.richerPicker_selectBackgroundTile(tile);
    }
  };
  $(customize.IDS.BACKGROUNDS_DEFAULT).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      $(customize.IDS.BACKGROUNDS_DEFAULT).onclick(event);
    }
  };

  const richerPicker = $(customize.IDS.CUSTOMIZATION_MENU);
  richerPicker.onmousedown = function(event) {
    richerPicker.classList.add(customize.CLASSES.MOUSE_NAV);
  };
  richerPicker.onkeydown = function(event) {
    if (Object.values(customize.KEYCODES).includes(event.keyCode)) {
      richerPicker.classList.remove(customize.CLASSES.MOUSE_NAV);
    }

    if (event.keyCode === customize.KEYCODES.BACKSPACE &&
        customize.richerPicker_selectedSubmenu.menu.id ===
            customize.IDS.BACKGROUNDS_IMAGE_MENU) {
      backInteraction(event);
    } else if (
        event.keyCode === customize.KEYCODES.ESC ||
        event.keyCode === customize.KEYCODES.BACKSPACE) {
      customize.richerPicker_cancelCustomization();
    }
  };

  const richerPickerOpenBackgrounds = function() {
    // Open the previously open Background submenu, if applicable.
    customize.richerPicker_showSubmenu(
        $(customize.IDS.BACKGROUNDS_BUTTON),
        $(customize.richerPicker_openBackgroundSubmenu.menuId),
        customize.richerPicker_openBackgroundSubmenu.title);
  };

  $(customize.IDS.BACKGROUNDS_BUTTON).onclick = richerPickerOpenBackgrounds;
  $(customize.IDS.BACKGROUNDS_BUTTON).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      richerPickerOpenBackgrounds();
    }
  };

  const clOption = $(customize.IDS.SHORTCUTS_OPTION_CUSTOM_LINKS);
  const mvOption = $(customize.IDS.SHORTCUTS_OPTION_MOST_VISITED);
  const hideToggle = $(customize.IDS.SHORTCUTS_HIDE_TOGGLE);

  const rtl = window.chrome.embeddedSearch.searchBox.rtl;
  const forwardArrowKey =
      rtl ? customize.KEYCODES.LEFT : customize.KEYCODES.RIGHT;
  const backArrowKey = rtl ? customize.KEYCODES.RIGHT : customize.KEYCODES.LEFT;

  $(customize.IDS.SHORTCUTS_MENU).onkeydown = function(event) {
    if (customize.arrowKeys.includes(event.keyCode)) {
      clOption.focus();
    }
  };

  clOption.onclick = function() {
    if (customize.selectedOptions.shortcutType !== clOption) {
      ntpApiHandle.logEvent(
          customize.LOG_TYPE.NTP_CUSTOMIZE_SHORTCUT_CUSTOM_LINKS_CLICKED);
    }
    customize.richerPicker_selectShortcutType(clOption);
    // Selecting a shortcut type will turn off hidden shortcuts.
    customize.richerPicker_toggleShortcutHide(false);
  };
  clOption.onkeydown = function(event) {
    if (customize.arrowKeys.includes(event.keyCode)) {
      // Handle arrow key navigation.
      event.preventDefault();
      event.stopPropagation();
      richerPicker.classList.remove(customize.CLASSES.MOUSE_NAV);
      if (event.keyCode === forwardArrowKey) {
        mvOption.focus();
      } else if (event.keyCode === customize.KEYCODES.DOWN) {
        hideToggle.focus();
      }
    }
  };
  clOption.onkeyup = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      clOption.click();
    }
  };

  mvOption.onclick = function() {
    if (customize.selectedOptions.shortcutType !== mvOption) {
      ntpApiHandle.logEvent(
          customize.LOG_TYPE.NTP_CUSTOMIZE_SHORTCUT_MOST_VISITED_CLICKED);
    }
    customize.richerPicker_selectShortcutType(mvOption);
    // Selecting a shortcut type will turn off hidden shortcuts.
    customize.richerPicker_toggleShortcutHide(false);
  };
  mvOption.onkeydown = function(event) {
    if (customize.arrowKeys.includes(event.keyCode)) {
      // Handle arrow key navigation.
      event.preventDefault();
      event.stopPropagation();
      richerPicker.classList.remove(customize.CLASSES.MOUSE_NAV);
      if (event.keyCode === backArrowKey) {
        clOption.focus();
      } else if (
          event.keyCode === forwardArrowKey ||
          event.keyCode === customize.KEYCODES.DOWN) {
        hideToggle.focus();
      }
    }
  };
  mvOption.onkeyup = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      mvOption.click();
    }
  };

  hideToggle.onchange = function(event) {
    customize.richerPicker_toggleShortcutHide(hideToggle.checked);
    ntpApiHandle.logEvent(
        customize.LOG_TYPE.NTP_CUSTOMIZE_SHORTCUT_VISIBILITY_TOGGLE_CLICKED);
  };
  hideToggle.onkeydown = function(event) {
    if (customize.arrowKeys.includes(event.keyCode)) {
      // Handle arrow key navigation.
      event.preventDefault();
      event.stopPropagation();
      richerPicker.classList.remove(customize.CLASSES.MOUSE_NAV);
      if (event.keyCode === backArrowKey ||
          event.keyCode === customize.KEYCODES.UP) {
        mvOption.focus();
      }
    }
  };
  hideToggle.onkeyup = function(event) {
    // Handle enter since, unlike space, it does not trigger a click event.
    if (event.keyCode === customize.KEYCODES.ENTER) {
      hideToggle.click();
    }
  };
  hideToggle.onclick = function(event) {
    // Enter and space fire the 'onclick' event (which will remove special
    // keyboard navigation styling) unless propagation is stopped.
    event.stopPropagation();
  };

  const refreshToggle = $(customize.IDS.REFRESH_TOGGLE);
  refreshToggle.onchange = function(event) {
    ntpApiHandle.logEvent(
        customize.LOG_TYPE.NTP_BACKGROUND_REFRESH_TOGGLE_CLICKED);
    customize.richerPicker_toggleRefreshDaily(refreshToggle.checked);
  };
  refreshToggle.onkeyup = function(event) {
    // Handle enter since, unlike space, it does not trigger a click event.
    if (event.keyCode === customize.KEYCODES.ENTER) {
      refreshToggle.click();
    }
  };
  refreshToggle.onclick = function(event) {
    // Enter and space fire the 'onclick' event (which will remove special
    // keyboard navigation styling) unless propagation is stopped.
    event.stopPropagation();
  };


  const richerPickerOpenShortcuts = function() {
    customize.richerPicker_showSubmenu(
        $(customize.IDS.SHORTCUTS_BUTTON), $(customize.IDS.SHORTCUTS_MENU));
  };

  $(customize.IDS.SHORTCUTS_BUTTON).onclick = richerPickerOpenShortcuts;
  $(customize.IDS.SHORTCUTS_BUTTON).onkeydown = function(event) {
    if (event.keyCode === customize.KEYCODES.ENTER ||
        event.keyCode === customize.KEYCODES.SPACE) {
      richerPickerOpenShortcuts();
    }
  };

  $(customize.IDS.COLORS_BUTTON).onclick = function() {
    customize.richerPicker_showSubmenu(
        $(customize.IDS.COLORS_BUTTON), $(customize.IDS.COLORS_MENU));
    ntpApiHandle.getColorsInfo();
  };
};

customize.handleError = function(errors) {
  const unavailableString = configData.translatedStrings.backgroundsUnavailable;

  if (errors != 'undefined') {
    // Network errors.
    if (errors.net_error) {
      if (errors.net_error_no != 0) {
        const onClick = () => {
          window.open(
              'https://chrome://network-error/' + errors.net_error_no,
              '_blank');
        };
        customize.showErrorNotification(
            configData.translatedStrings.connectionError,
            configData.translatedStrings.moreInfo, onClick);
      } else {
        customize.showErrorNotification(
            configData.translatedStrings.connectionErrorNoPeriod);
      }
    } else if (errors.service_error) {  // Service errors.
      customize.showErrorNotification(unavailableString);
    }
    return;
  }

  // Generic error when we can't tell what went wrong.
  customize.showErrorNotification(unavailableString);
};

/**
 * Handles color selection. Apply styling to the selected color in the richer
 * picker and enable the done button.
 * @param {?Element} tile The selected color tile.
 */
customize.updateColorsMenuTileSelection = function(tile) {
  if (!tile) {
    return;
  }
  // Clear the previous selection, if any.
  if (customize.selectedOptions.color) {
    customize.richerPicker_removeSelectedState(customize.selectedOptions.color);
  }
  customize.selectedOptions.color = tile;
  customize.richerPicker_applySelectedState(tile);
};

/**
 * Called when a color tile is clicked. Applies the color, and the selected
 * style on the tile.
 * @param {Event} event The event attributes for the interaction.
 */
customize.colorTileInteraction = function(event) {
  customize.updateColorsMenuTileSelection(
      /** @type HTMLElement */ (event.currentTarget));
  const id = parseInt(event.currentTarget.dataset.id, 10);
  if (id) {
    ntpApiHandle.applyAutogeneratedTheme(
        id, event.currentTarget.dataset.color.split(','));
  }
};

/**
 * Called when the default theme tile is clicked. Applies the default theme, and
 * the selected style on the tile.
 * @param {Event} event The event attributes for the interaction.
 */
customize.defaultThemeTileInteraction = function(event) {
  customize.updateColorsMenuTileSelection(
      /** @type HTMLElement */ (event.currentTarget));
  ntpApiHandle.applyDefaultTheme();
};

/**
 * Called when a new color is picked with color picker. Applies the color, and
 * the selected style on the tile.
 * @param {Event} event The event attributes for the interaction.
 */
customize.colorPickerTileInteraction = function(event) {
  const hex = event.currentTarget.value;
  const r = parseInt(hex.substring(1, 3), 16);
  const g = parseInt(hex.substring(3, 5), 16);
  const b = parseInt(hex.substring(5, 7), 16);
  // If the picker is preselected and the user picks a new color, we need to
  // treat the picker as a new selection and not a preselection.
  if (customize.preselectedOptions.colorsMenuTile ===
      $(customize.IDS.COLOR_PICKER_TILE)) {
    customize.preselectedOptions.colorsMenuTile = null;
  }
  customize.updateColorsMenuTileSelection($(customize.IDS.COLOR_PICKER_TILE));
  ntpApiHandle.applyAutogeneratedTheme(0, [r, g, b, 255]);
};

/**
 * Loads Colors menu elements and initializes the selected state.
 */
customize.loadColorsMenu = function() {
  if (!customize.colorsMenuLoaded) {
    customize.loadColorMenuTiles();
    customize.colorsMenuLoaded = true;
  }

  customize.resetColorsSelectedOptions();
  customize.colorsMenuOnThemeChange();
};

/**
 * Loads Colors menu tiles, e.g. color picker, default tile and color tiles.
 */
customize.loadColorMenuTiles = function() {
  const colorsColl = ntpApiHandle.getColorsInfo();
  for (let i = 0; i < colorsColl.length; ++i) {
    // After 4 color tiles create an empty tile to take the place of the color
    // picker. This is done so that the rest of the colors don't move if color
    // picker is not present.
    if (!configData.chromeColorsCustomColorPicker && i == 4) {
      $(customize.IDS.COLORS_MENU).appendChild(document.createElement('div'));
    }
    const id = 'color_' + i;
    const imageUrl = colorsColl[i].icon;
    const dataset = {'color': colorsColl[i].color, 'id': colorsColl[i].id};

    const tile = customize.createTileWithoutTitle(
        id, imageUrl, dataset, customize.colorTileInteraction,
        customize.tileOnKeyDownInteraction);
    tile.firstElementChild.setAttribute('aria-label', colorsColl[i].label);
    tile.firstElementChild.setAttribute('title', colorsColl[i].label);

    $(customize.IDS.COLORS_MENU).appendChild(tile);
  }

  // Configure the default tile.
  $(customize.IDS.COLORS_DEFAULT_ICON).onclick =
      customize.defaultThemeTileInteraction;
  $(customize.IDS.COLORS_DEFAULT_ICON).onkeydown =
      customize.tileOnKeyDownInteraction;

  // On arrow keys focus the first element.
  $(customize.IDS.COLORS_MENU).onkeydown = function(event) {
    if (document.activeElement === $(customize.IDS.COLORS_MENU) &&
        customize.arrowKeys.includes(event.keyCode)) {
      if (configData.chromeColorsCustomColorPicker) {
        $(customize.IDS.COLOR_PICKER_TILE).focus();
      } else {
        $(customize.IDS.COLORS_DEFAULT_ICON).focus();
      }
      event.preventDefault();
    }
  };

  // Configure custom color picker.
  if (configData.chromeColorsCustomColorPicker) {
    $(customize.IDS.COLOR_PICKER_TILE).onclick = function(event) {
      $(customize.IDS.COLOR_PICKER).value = customize.customColorPicked;
      $(customize.IDS.COLOR_PICKER).click();
    };
    $(customize.IDS.COLOR_PICKER_TILE).onkeydown =
        customize.tileOnKeyDownInteraction;
    $(customize.IDS.COLOR_PICKER).onchange =
        customize.colorPickerTileInteraction;
  }
};

/**
 * Update webstore theme info and preselect Colors menu tile according to
 * the theme update.
 */
customize.colorsMenuOnThemeChange = function() {
  // Update webstore theme information.
  const ntpTheme = assert(ntpApiHandle.ntpTheme);
  if (ntpTheme.themeId && ntpTheme.themeName) {
    $(customize.IDS.COLORS_THEME).classList.add(customize.CLASSES.VISIBLE);
    $(customize.IDS.COLORS_THEME_NAME).innerHTML = ntpTheme.themeName;
    $(customize.IDS.COLORS_THEME_WEBSTORE_LINK).href =
        'https://chrome.google.com/webstore/detail/' + ntpTheme.themeId;
    $(customize.IDS.COLORS_THEME_UNINSTALL).onclick =
        ntpApiHandle.useDefaultTheme;

    // Clear the previous selection, if any.
    if (customize.selectedOptions.color) {
      customize.richerPicker_removeSelectedState(
          customize.selectedOptions.color);
      customize.selectedOptions.color = null;
    }
    if (!customize.preselectedOptions.colorsMenuTile) {
      customize.preselectedOptions.colorsMenuTile =
          $(customize.IDS.COLORS_THEME);
    }
  } else {
    $(customize.IDS.COLORS_THEME).classList.remove(customize.CLASSES.VISIBLE);

    // Select the tile corresponding to the current theme/color.
    customize.colorsMenuPreselectTile();
  }
};

/**
 * Preselect Colors menu tile according to the theme info.
 */
customize.colorsMenuPreselectTile = function() {
  const ntpTheme = assert(ntpApiHandle.ntpTheme);
  let tile;
  if (ntpTheme.usingDefaultTheme) {
    tile = $(customize.IDS.COLORS_DEFAULT_ICON);
  } else if (ntpTheme.colorId && ntpTheme.colorId > 0) {
    // Color from predefined set is selected.
    const tiles = Array.from(
        $(customize.IDS.COLORS_MENU)
            .getElementsByClassName(customize.CLASSES.COLLECTION_TILE));
    for (let i = 0; i < tiles.length; i++) {
      if (tiles[i].dataset && tiles[i].dataset.id == ntpTheme.colorId) {
        tile = tiles[i];
        break;
      }
    }
  } else if (
      configData.chromeColorsCustomColorPicker && ntpTheme.colorDark &&
      ntpTheme.colorLight && ntpTheme.colorPicked) {
    // Custom color is selected.
    tile = $(customize.IDS.COLOR_PICKER_TILE);

    // Update color picker tile colors.
    customize.customColorPicked = colorArrayToHex(ntpTheme.colorPicked);
    $(customize.IDS.COLORS_MENU)
        .style.setProperty(
            '--custom-color-border', colorArrayToHex(ntpTheme.colorDark));
    $(customize.IDS.COLORS_MENU)
        .style.setProperty(
            '--custom-color-dark', colorArrayToHex(ntpTheme.colorDark));
    $(customize.IDS.COLORS_MENU)
        .style.setProperty(
            '--custom-color-light', colorArrayToHex(ntpTheme.colorLight));
    $(customize.IDS.COLOR_PICKER_ICON)
        .classList.toggle('white', ntpTheme.isNtpBackgroundDark);
  }

  if (tile && tile !== customize.selectedOptions.color) {
    if (!customize.preselectedOptions.colorsMenuTile) {
      customize.preselectedOptions.colorsMenuTile = tile;
    }

    customize.updateColorsMenuTileSelection(
        /** @type HTMLElement */ (tile));
  }
};

/**
 * Indicates whether a color other then preselected one was selected on Colors
 * menu.
 */
customize.isColorOptionSelected = function() {
  return customize.preselectedOptions.colorsMenuTile !==
      customize.selectedOptions.color;
};

/**
 * Indicates whether a background tile other then the preselected one was
 * selected on the backgrounds menu.
 */
customize.isBackgroundOptionSelected = function() {
  return customize.selectedOptions.backgroundData &&
      (!customize.preselectedOptions.backgroundsMenuTile ||
       customize.selectedOptions.backgroundData.id !=
           customize.preselectedOptions.backgroundsMenuTile.id);
};

/**
 * Permanently applies the color changes. Called when the done button is
 * pressed.
 */
customize.confirmColor = function() {
  ntpApiHandle.confirmThemeChanges();
};

/**
 * Reverts the applied (but not confirmed) color changes. Called when the cancel
 * button is pressed.
 */
customize.cancelColor = function() {
  ntpApiHandle.revertThemeChanges();
};

/**
 * Reset color picker to its default state.
 */
customize.resetColorPicker = function() {
  customize.customColorPicked = customize.defaultCustomColor;
  $(customize.IDS.COLOR_PICKER).value = null;
  $(customize.IDS.COLORS_MENU).style.setProperty('--custom-color-border', '');
  $(customize.IDS.COLORS_MENU).style.setProperty('--custom-color-dark', '');
  $(customize.IDS.COLORS_MENU).style.setProperty('--custom-color-light', '');
  $(customize.IDS.COLOR_PICKER_ICON).classList.toggle('white', false);
};

/**
 * Reset color selection.
 */
customize.resetColorsSelectedOptions = function() {
  customize.richerPicker_removeSelectedState(customize.selectedOptions.color);
  customize.selectedOptions.color = null;
  customize.preselectedOptions.colorsMenuTile = null;
};

/**
 * Converts an RGBA component into hex format.
 * @param {number} c RGBA component.
 * @return {string} RGBA component in hex format.
 */
function rgbComponentToHex(c) {
  const hex = c.toString(16);
  return hex.length == 1 ? '0' + hex : hex;
}

/**
 * Converts an Array of color components into hex format "#000000".
 * @param {Array<number>} color Array of RGBA color components.
 * @return {string} color in hex format.
 */
function colorArrayToHex(color) {
  if (!color || color.length != 4) {
    return '';
  }

  return '#' + rgbComponentToHex(color[0]) + rgbComponentToHex(color[1]) +
      rgbComponentToHex(color[2]);
}
/* Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

#logo {
  height: calc(var(--logo-height) + var(--logo-margin-bottom));
  margin-top: var(--logo-margin-top);
  min-height: fit-content;
  position: relative;
}

.non-google-page #logo {
  display: none;
}

#logo-doodle {
  text-align: center;
}

#logo-default,
#logo-doodle {
  opacity: 0;
  visibility: hidden;
}

#logo-default.show-logo,
#logo-doodle.show-logo {
  opacity: 1;
  visibility: visible;
}

#logo-doodle-container,
#logo-doodle-iframe,
#logo-doodle-wrapper {
  display: none;
}

#logo-doodle-button {
  cursor: pointer;
}

#logo-doodle-iframe.show-logo {
  display: block;
}

#logo-doodle-container.show-logo {
  display: inline-block;
}

.show-logo #logo-doodle-wrapper {
  display: inline-block;
}

@media (prefers-color-scheme: dark) {
  .show-logo #logo-doodle-wrapper {
    border-radius: 20px;
    display: inline-block;
    padding: 16px 24px 16px 24px;
  }
}

#logo-doodle-image {
  outline: none;
}

#logo-default.fade,
#logo-doodle.fade {
  transition: opacity 130ms, visibility 130ms;
}

#logo-default,
#logo-non-white {
  background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzIiIGhlaWdodD0iOTIiPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Ik0xMTUuNzUgNDcuMThjMCAxMi43Ny05Ljk5IDIyLjE4LTIyLjI1IDIyLjE4cy0yMi4yNS05LjQxLTIyLjI1LTIyLjE4QzcxLjI1IDM0LjMyIDgxLjI0IDI1IDkzLjUgMjVzMjIuMjUgOS4zMiAyMi4yNSAyMi4xOHptLTkuNzQgMGMwLTcuOTgtNS43OS0xMy40NC0xMi41MS0xMy40NFM4MC45OSAzOS4yIDgwLjk5IDQ3LjE4YzAgNy45IDUuNzkgMTMuNDQgMTIuNTEgMTMuNDRzMTIuNTEtNS41NSAxMi41MS0xMy40NHoiLz48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMTYzLjc1IDQ3LjE4YzAgMTIuNzctOS45OSAyMi4xOC0yMi4yNSAyMi4xOHMtMjIuMjUtOS40MS0yMi4yNS0yMi4xOGMwLTEyLjg1IDkuOTktMjIuMTggMjIuMjUtMjIuMThzMjIuMjUgOS4zMiAyMi4yNSAyMi4xOHptLTkuNzQgMGMwLTcuOTgtNS43OS0xMy40NC0xMi41MS0xMy40NHMtMTIuNTEgNS40Ni0xMi41MSAxMy40NGMwIDcuOSA1Ljc5IDEzLjQ0IDEyLjUxIDEzLjQ0czEyLjUxLTUuNTUgMTIuNTEtMTMuNDR6Ii8+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTIwOS43NSAyNi4zNHYzOS44MmMwIDE2LjM4LTkuNjYgMjMuMDctMjEuMDggMjMuMDctMTAuNzUgMC0xNy4yMi03LjE5LTE5LjY2LTEzLjA3bDguNDgtMy41M2MxLjUxIDMuNjEgNS4yMSA3Ljg3IDExLjE3IDcuODcgNy4zMSAwIDExLjg0LTQuNTEgMTEuODQtMTN2LTMuMTloLS4zNGMtMi4xOCAyLjY5LTYuMzggNS4wNC0xMS42OCA1LjA0LTExLjA5IDAtMjEuMjUtOS42Ni0yMS4yNS0yMi4wOSAwLTEyLjUyIDEwLjE2LTIyLjI2IDIxLjI1LTIyLjI2IDUuMjkgMCA5LjQ5IDIuMzUgMTEuNjggNC45NmguMzR2LTMuNjFoOS4yNXptLTguNTYgMjAuOTJjMC03LjgxLTUuMjEtMTMuNTItMTEuODQtMTMuNTItNi43MiAwLTEyLjM1IDUuNzEtMTIuMzUgMTMuNTIgMCA3LjczIDUuNjMgMTMuMzYgMTIuMzUgMTMuMzYgNi42MyAwIDExLjg0LTUuNjMgMTEuODQtMTMuMzZ6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTIyNSAzdjY1aC05LjVWM2g5LjV6Ii8+PHBhdGggZmlsbD0iI0VBNDMzNSIgZD0iTTI2Mi4wMiA1NC40OGw3LjU2IDUuMDRjLTIuNDQgMy42MS04LjMyIDkuODMtMTguNDggOS44My0xMi42IDAtMjIuMDEtOS43NC0yMi4wMS0yMi4xOCAwLTEzLjE5IDkuNDktMjIuMTggMjAuOTItMjIuMTggMTEuNTEgMCAxNy4xNCA5LjE2IDE4Ljk4IDE0LjExbDEuMDEgMi41Mi0yOS42NSAxMi4yOGMyLjI3IDQuNDUgNS44IDYuNzIgMTAuNzUgNi43MiA0Ljk2IDAgOC40LTIuNDQgMTAuOTItNi4xNHptLTIzLjI3LTcuOThsMTkuODItOC4yM2MtMS4wOS0yLjc3LTQuMzctNC43LTguMjMtNC43LTQuOTUgMC0xMS44NCA0LjM3LTExLjU5IDEyLjkzeiIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik0zNS4yOSA0MS40MVYzMkg2N2MuMzEgMS42NC40NyAzLjU4LjQ3IDUuNjggMCA3LjA2LTEuOTMgMTUuNzktOC4xNSAyMi4wMS02LjA1IDYuMy0xMy43OCA5LjY2LTI0LjAyIDkuNjZDMTYuMzIgNjkuMzUuMzYgNTMuODkuMzYgMzQuOTEuMzYgMTUuOTMgMTYuMzIuNDcgMzUuMy40N2MxMC41IDAgMTcuOTggNC4xMiAyMy42IDkuNDlsLTYuNjQgNi42NGMtNC4wMy0zLjc4LTkuNDktNi43Mi0xNi45Ny02LjcyLTEzLjg2IDAtMjQuNyAxMS4xNy0yNC43IDI1LjAzIDAgMTMuODYgMTAuODQgMjUuMDMgMjQuNyAyNS4wMyA4Ljk5IDAgMTQuMTEtMy42MSAxNy4zOS02Ljg5IDIuNjYtMi42NiA0LjQxLTYuNDYgNS4xLTExLjY1bC0yMi40OS4wMXoiLz48L3N2Zz4=);
  background-repeat: no-repeat;
  bottom: var(--logo-margin-bottom);
  height: 92px;
  left: calc(50% - 272px/2);
  position: absolute;
  width: 272px;
}

body.alternate-logo #logo-default,
body.alternate-logo #logo-non-white {
  -webkit-mask-image:
      url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzIiIGhlaWdodD0iOTIiPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Ik0xMTUuNzUgNDcuMThjMCAxMi43Ny05Ljk5IDIyLjE4LTIyLjI1IDIyLjE4cy0yMi4yNS05LjQxLTIyLjI1LTIyLjE4QzcxLjI1IDM0LjMyIDgxLjI0IDI1IDkzLjUgMjVzMjIuMjUgOS4zMiAyMi4yNSAyMi4xOHptLTkuNzQgMGMwLTcuOTgtNS43OS0xMy40NC0xMi41MS0xMy40NFM4MC45OSAzOS4yIDgwLjk5IDQ3LjE4YzAgNy45IDUuNzkgMTMuNDQgMTIuNTEgMTMuNDRzMTIuNTEtNS41NSAxMi41MS0xMy40NHoiLz48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMTYzLjc1IDQ3LjE4YzAgMTIuNzctOS45OSAyMi4xOC0yMi4yNSAyMi4xOHMtMjIuMjUtOS40MS0yMi4yNS0yMi4xOGMwLTEyLjg1IDkuOTktMjIuMTggMjIuMjUtMjIuMThzMjIuMjUgOS4zMiAyMi4yNSAyMi4xOHptLTkuNzQgMGMwLTcuOTgtNS43OS0xMy40NC0xMi41MS0xMy40NHMtMTIuNTEgNS40Ni0xMi41MSAxMy40NGMwIDcuOSA1Ljc5IDEzLjQ0IDEyLjUxIDEzLjQ0czEyLjUxLTUuNTUgMTIuNTEtMTMuNDR6Ii8+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTIwOS43NSAyNi4zNHYzOS44MmMwIDE2LjM4LTkuNjYgMjMuMDctMjEuMDggMjMuMDctMTAuNzUgMC0xNy4yMi03LjE5LTE5LjY2LTEzLjA3bDguNDgtMy41M2MxLjUxIDMuNjEgNS4yMSA3Ljg3IDExLjE3IDcuODcgNy4zMSAwIDExLjg0LTQuNTEgMTEuODQtMTN2LTMuMTloLS4zNGMtMi4xOCAyLjY5LTYuMzggNS4wNC0xMS42OCA1LjA0LTExLjA5IDAtMjEuMjUtOS42Ni0yMS4yNS0yMi4wOSAwLTEyLjUyIDEwLjE2LTIyLjI2IDIxLjI1LTIyLjI2IDUuMjkgMCA5LjQ5IDIuMzUgMTEuNjggNC45NmguMzR2LTMuNjFoOS4yNXptLTguNTYgMjAuOTJjMC03LjgxLTUuMjEtMTMuNTItMTEuODQtMTMuNTItNi43MiAwLTEyLjM1IDUuNzEtMTIuMzUgMTMuNTIgMCA3LjczIDUuNjMgMTMuMzYgMTIuMzUgMTMuMzYgNi42MyAwIDExLjg0LTUuNjMgMTEuODQtMTMuMzZ6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTIyNSAzdjY1aC05LjVWM2g5LjV6Ii8+PHBhdGggZmlsbD0iI0VBNDMzNSIgZD0iTTI2Mi4wMiA1NC40OGw3LjU2IDUuMDRjLTIuNDQgMy42MS04LjMyIDkuODMtMTguNDggOS44My0xMi42IDAtMjIuMDEtOS43NC0yMi4wMS0yMi4xOCAwLTEzLjE5IDkuNDktMjIuMTggMjAuOTItMjIuMTggMTEuNTEgMCAxNy4xNCA5LjE2IDE4Ljk4IDE0LjExbDEuMDEgMi41Mi0yOS42NSAxMi4yOGMyLjI3IDQuNDUgNS44IDYuNzIgMTAuNzUgNi43MiA0Ljk2IDAgOC40LTIuNDQgMTAuOTItNi4xNHptLTIzLjI3LTcuOThsMTkuODItOC4yM2MtMS4wOS0yLjc3LTQuMzctNC43LTguMjMtNC43LTQuOTUgMC0xMS44NCA0LjM3LTExLjU5IDEyLjkzeiIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik0zNS4yOSA0MS40MVYzMkg2N2MuMzEgMS42NC40NyAzLjU4LjQ3IDUuNjggMCA3LjA2LTEuOTMgMTUuNzktOC4xNSAyMi4wMS02LjA1IDYuMy0xMy43OCA5LjY2LTI0LjAyIDkuNjZDMTYuMzIgNjkuMzUuMzYgNTMuODkuMzYgMzQuOTEuMzYgMTUuOTMgMTYuMzIuNDcgMzUuMy40N2MxMC41IDAgMTcuOTggNC4xMiAyMy42IDkuNDlsLTYuNjQgNi42NGMtNC4wMy0zLjc4LTkuNDktNi43Mi0xNi45Ny02LjcyLTEzLjg2IDAtMjQuNyAxMS4xNy0yNC43IDI1LjAzIDAgMTMuODYgMTAuODQgMjUuMDMgMjQuNyAyNS4wMyA4Ljk5IDAgMTQuMTEtMy42MSAxNy4zOS02Ljg5IDIuNjYtMi42NiA0LjQxLTYuNDYgNS4xLTExLjY1bC0yMi40OS4wMXoiLz48L3N2Zz4=);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 100%;
  background: var(--logo-color);
}

#logo-default,
.use-notifier #logo-non-white {
  display: block;
}
#logo-non-white,
.use-notifier #logo-default {
  display: none;
}

#logo-doodle-container {
  /* An image logo is allowed to spill into the margin below, so it's not a
   * real bottom margin. If the image extends further than that margin, it
   * is cropped. */
  margin: 0 auto;
  max-height: calc(var(--logo-height) + var(--logo-margin-bottom));
  overflow: hidden;
  position: relative;
  text-align: text-center;
}

.use-notifier #logo-doodle-container,
.use-notifier #logo-doodle-iframe {
  display: none;
}

#logo-doodle-iframe {
  border: 0;
  height: var(--logo-iframe-height);
  margin: 0 auto calc(var(--logo-height) + var(--logo-margin-bottom)
                      - var(--logo-iframe-initial-height)) auto;
  transition: width var(--logo-iframe-resize-duration),
              height var(--logo-iframe-resize-duration);
  width: var(--logo-iframe-width);
}

#logo-doodle-notifier {
  display: none;
}
.use-notifier #logo-doodle-notifier {
  background: transparent;
  border: 0;
  cursor: pointer;
  display: inline-block;
  height: 24px;
  left: calc(50% + 148px);
  padding: 0;
  position: absolute;
  top: 100px;
  width: 24px;
}
@keyframes anim-pos {
  0% { transform: translate(-98%, 0); }
  100% { transform: translate(98%, 0); }
}
@keyframes anim-z-order {
  0% { z-index: 100; }
  100% { z-index: 1; }
}
.use-notifier #logo-doodle-notifier .outer {
  animation: anim-z-order 3520ms linear infinite;
  height: 37.5%;
  left: 50%;
  margin-inline-start: -18.75%;
  margin-top: -18.75%;
  position: absolute;
  top: 50%;
  width: 37.5%;
}
.use-notifier #logo-doodle-notifier .inner {
  animation: anim-pos 880ms cubic-bezier(.445, .05, .55, .95)
      infinite alternate;
  border-radius: 50%;
  height: 100%;
  position: absolute;
  transform: rotate(90deg);
  width: 100%;
}
.use-notifier #logo-doodle-notifier .ball0 {
  animation-delay: 2640ms;
  transform: rotate(45deg);
}
.use-notifier #logo-doodle-notifier .ball1 {
  animation-delay: 1760ms;
  transform: rotate(135deg);
}
.use-notifier #logo-doodle-notifier .ball2 {
  transform: rotate(225deg);
}
.use-notifier #logo-doodle-notifier .ball3 {
  animation-delay: 880ms;
  transform: rotate(315deg);
}
.use-notifier #logo-doodle-notifier .ball0 .inner {
  background: linear-gradient(
      315deg, rgb(0, 85, 221), rgb(0, 119, 255), rgb(0, 119, 255));
}
.use-notifier #logo-doodle-notifier .ball1 .inner {
  background: linear-gradient(
      225deg, rgb(221, 0, 0), rgb(238, 51, 51), rgb(255, 119, 85));
}
.use-notifier #logo-doodle-notifier .ball2 .inner {
  background: linear-gradient(
      90deg, rgb(0, 119, 68), rgb(0, 153, 68), rgb(85, 187, 85));
}
.use-notifier #logo-doodle-notifier .ball3 .inner {
  background: linear-gradient(
      0deg, rgb(255, 170, 51), rgb(255, 204, 0), rgb(255, 221, 102));
}

#ddlsb {
  border-radius: 6px;
  cursor: pointer;
  display: inline-block;
  height: 26px;
  opacity: .8;
  position: absolute;
  width: 26px;
}

#ddlsb:hover {
  opacity: 1;
}

#ddlsb-img {
  height: 22px;
  left: 2px;
  position: absolute;
  top: 2px;
  width: 22px;
}

#ddlsd {
  background: #fff;
  border: none;
  border-radius: 8px;
  box-shadow: 0 4px 16px 0 rgba(0, 0, 0, .2);
  left: 0;
  margin: auto;
  min-height: 100px;
  padding: 22px;
  position: absolute;
  right: 0;
  text-align: start;
  top: 30%;
  width: 300px;
  z-index: 9001;
}

#ddlsd::backdrop {
  background-color: rgba(255, 255, 255, .9);
}

@media (prefers-color-scheme: dark) {
  #ddlsd {
    background-color: rgb(var(--dark-mode-dialog-rgb));
    box-shadow: var(--dark-mode-shadow);
  }

  #ddlsd::backdrop {
    background-color: rgba(0, 0, 0, 0.4);
  }
}

#ddlsd button {
  border: none;
  cursor: pointer;
}

#ddlsd button:hover {
  opacity: .8;
}

#ddlsd-title {
  color: #212121;
  font-size: 22px;
  padding-bottom: 16px;
  padding-inline-end: 40px;
}

@media (prefers-color-scheme: dark) {
  #ddlsd-title {
    color: rgb(var(--GG200-rgb));
  }
}

#ddlsd-close {
  height: 24px;
  position: absolute;
  right: 22px;
  top: 22px;
  width: 24px;
}

[dir=rtl] #ddlsd-close {
  left: 22px;
  right: auto;
}

#ddlsd-close::before {
  -webkit-mask-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iIzVGNjM2OCI+PHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnoiLz48L3N2Zz4=);
  -webkit-mask-position: center center;
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: 32px;
  background-color: #4d4d4d;
  content: '';
  display: block;
  height: 100%;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  #ddlsd-close::before {
    background-color: rgb(var(--GG500-rgb));
  }
}

#ddlsd-fbb {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZD0iTTQzLjUgNDhoLTM5QzIgNDggMCA0NiAwIDQzLjV2LTM5QzAgMiAyIDAgNC41IDBoMzlDNDYgMCA0OCAyIDQ4IDQuNXYzOWMwIDIuNS0yIDQuNS00LjUgNC41eiIgZmlsbD0iIzNhNTg5YiIvPjxwYXRoIGQ9Ik0zOS40IDI5LjRsLjktNy4zaC03LjJ2LTQuN2MwLTIuMS42LTMuNSAzLjYtMy41aDMuOFY3LjVjLS43LS4xLTIuOS0uMy01LjYtLjMtNS41IDAtOS4zIDMuNC05LjMgOS42djUuM2gtNi4ydjcuM2g2LjJWNDhoNy41VjI5LjRoNi4zeiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==) no-repeat center;
}

#ddlsd-twb {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZD0iTTQzLjUgNDhoLTM5QzIgNDggMCA0NiAwIDQzLjV2LTM5QzAgMiAyIDAgNC41IDBoMzlDNDYgMCA0OCAyIDQ4IDQuNXYzOWMwIDIuNS0yIDQuNS00LjUgNC41eiIgZmlsbD0iIzNhYWFlMSIvPjxwYXRoIGQ9Ik0zOS4zIDE1LjVjLTEuMS41LTIuMy44LTMuNS45IDEuMi0uNyAyLjItMS45IDIuNi0zLjMtMS4xLjctMi41IDEuMi0zLjggMS41LTEuMS0xLjEtMi42LTEuOS00LjQtMS45LTMuMyAwLTYgMi43LTYgNiAwIC41LjEuOS4xIDEuMy00LjktLjMtOS40LTIuNi0xMi40LTYuMy0uNS45LS44IDEuOS0uOCAzIDAgMiAxLjEgMy45IDIuNyA1LTEgMC0xLjktLjMtMi43LS44di4xYzAgMi45IDIgNS4zIDQuOCA1LjktLjUuMS0xLjEuMi0xLjYuMi0uNCAwLS44LS4xLTEuMS0uMS44IDIuNCAzIDQuMSA1LjYgNC4yLTIgMS42LTQuNyAyLjUtNy40IDIuNS0uNSAwLTEgMC0xLjQtLjEgMi43IDEuNyA1LjggMi43IDkuMiAyLjcgMTEgMCAxNy05LjEgMTctMTd2LS44YzEuMy0uOCAyLjMtMS44IDMuMS0zeiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==) no-repeat center;
}

#ddlsd-emb {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZD0iTTQzLjUgNDhoLTM5QzIgNDggMCA0NiAwIDQzLjV2LTM5QzAgMiAyIDAgNC41IDBoMzlDNDYgMCA0OCAyIDQ4IDQuNXYzOWMwIDIuNS0yIDQuNS00LjUgNC41eiIgZmlsbD0iIzlkYTZhYSIvPjxwYXRoIGQ9Ik0zNS45IDEyLjhIMTIuMWMtMi4yIDAtNCAxLjgtNCA0djE0LjRjMCAyLjIgMS44IDQgNCA0aDIzLjhjMi4yIDAgNC0xLjggNC00VjE2LjhjMC0yLjItMS44LTQtNC00eiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzlkYTZhYSIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTM1LjQgMTcuMkwyNCAyNi4xbC0xMS40LTguOSIvPjwvc3ZnPg==) no-repeat center;
}

#ddlsd-text {
  border: 2px solid #aaa;
  border-color: rgba(0, 0, 0, .15);
  border-radius: 4px;
  color: #555;
  display: inline-block;
  font-size: 14px;
  padding: 12px;
  width: 100%;
}

@media (prefers-color-scheme: dark) {
  #ddlsd-text {
    background-color: rgba(0, 0, 0, 0.3);
    color: rgb(var(--GG200-rgb));
  }
}

#ddlsd-copy {
  background: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZD0iTTM1LjI1IDE0YS43Ni43NiAwIDAgMSAuNzUuNzV2MjUuNWEuNzYuNzYgMCAwIDEtLjc1Ljc1aC0xNi41YS43Ni43NiAwIDAgMS0uNzUtLjc1di0yNS41YS43Ni43NiAwIDAgMSAuNzUtLjc1aDE2LjVtMC00aC0xNi41QTQuNzcgNC43NyAwIDAgMCAxNCAxNC43NXYyNS41QTQuNzcgNC43NyAwIDAgMCAxOC43NSA0NWgxNi41QTQuNzcgNC43NyAwIDAgMCA0MCA0MC4yNXYtMjUuNUE0Ljc3IDQuNzcgMCAwIDAgMzUuMjUgMTB6IiBmaWxsPSIjNjY2Ii8+PHBhdGggZD0iTTkgMzhWOS43NUE0Ljc3IDQuNzcgMCAwIDEgMTMuNzUgNWgxOS4xNiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNjY2IiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiIHN0cm9rZS13aWR0aD0iNCIvPjwvc3ZnPg==) no-repeat center;
  background-size: contain;
  display: inline-block;
  height: 36px;
  margin: 5px;
  width: 36px;
}

.ddlsd-sbtn {
  background-size: contain;
  border-radius: 4px;
  display: inline-block;
  height: 48px;
  margin: 0 4px;
  width: 48px;
}

#ddlsd-hr {
  background: #ccc;
  border: 0;
  height: 2px;
  margin: 15px 0;
}

#ddlsd-link {
  display: flex;
  margin: 6px;
}

#ddlsd-text-ctr {
  display: block;
  overflow: hidden;
  padding-inline-end: 36px;
}
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

const doodles = {};

doodles.numDdllogResponsesReceived = 0;
doodles.lastDdllogResponse = '';

doodles.onDdllogResponse = null;

doodles.ei = null;

/**
 * Enum for classnames.
 * @enum {string}
 * @const
 */
doodles.CLASSES = {
  FADE: 'fade',            // Enables opacity transition on logo and doodle.
  SHOW_LOGO: 'show-logo',  // Marks logo/doodle that should be shown.
};

/**
 * Enum for HTML element ids.
 * @enum {string}
 * @const
 */
doodles.IDS = {
  DOODLE_SHARE_BUTTON: 'ddlsb',
  DOODLE_SHARE_BUTTON_IMG: 'ddlsb-img',
  DOODLE_SHARE_DIALOG: 'ddlsd',
  DOODLE_SHARE_DIALOG_CLOSE_BUTTON: 'ddlsd-close',
  DOODLE_SHARE_DIALOG_COPY_LINK_BUTTON: 'ddlsd-copy',
  DOODLE_SHARE_DIALOG_FACEBOOK_BUTTON: 'ddlsd-fbb',
  DOODLE_SHARE_DIALOG_LINK: 'ddlsd-text',
  DOODLE_SHARE_DIALOG_MAIL_BUTTON: 'ddlsd-emb',
  DOODLE_SHARE_DIALOG_TITLE: 'ddlsd-title',
  DOODLE_SHARE_DIALOG_TWITTER_BUTTON: 'ddlsd-twb',
  LOGO_DEFAULT: 'logo-default',
  LOGO_DOODLE: 'logo-doodle',
  LOGO_DOODLE_IMAGE: 'logo-doodle-image',
  LOGO_DOODLE_IFRAME: 'logo-doodle-iframe',
  LOGO_DOODLE_CONTAINER: 'logo-doodle-container',
  LOGO_DOODLE_BUTTON: 'logo-doodle-button',
  LOGO_DOODLE_NOTIFIER: 'logo-doodle-notifier',
  LOGO_DOODLE_WRAPPER: 'logo-doodle-wrapper',
};

/**
 * Counterpart of search_provider_logos::LogoType.
 * @enum {string}
 * @const
 */
doodles.LOGO_TYPE = {
  SIMPLE: 'SIMPLE',
  ANIMATED: 'ANIMATED',
  INTERACTIVE: 'INTERACTIVE',
};

/**
 * Subset of gws.plugins.doodle.SharingLightbox.LogType in
 * googledata/html/templates/gws/head/xjs/plugins/doodle/sharing_lightbox.js.
 * @enum {number}
 * @const
 */
doodles.SHARE_TYPE = {
  FACEBOOK: 2,
  TWITTER: 3,
  EMAIL: 5,
  LINK_COPY: 6,
};

/**
 * The ID of the doodle app for Facebook. Used to share doodles to Facebook.
 * @type {number}
 */
doodles.FACEBOOK_APP_ID = 738026486351791;

/**
 * The different types of events that are logged from the NTP. This enum is
 * used to transfer information from the NTP JavaScript to the renderer and is
 * not used as a UMA enum histogram's logged value.
 * Note: Keep in sync with common/ntp_logging_events.h
 * @enum {number}
 * @const
 */
doodles.LOG_TYPE = {
  // A static Doodle was shown, coming from cache.
  NTP_STATIC_LOGO_SHOWN_FROM_CACHE: 30,
  // A static Doodle was shown, coming from the network.
  NTP_STATIC_LOGO_SHOWN_FRESH: 31,
  // A call-to-action Doodle image was shown, coming from cache.
  NTP_CTA_LOGO_SHOWN_FROM_CACHE: 32,
  // A call-to-action Doodle image was shown, coming from the network.
  NTP_CTA_LOGO_SHOWN_FRESH: 33,

  // A static Doodle was clicked.
  NTP_STATIC_LOGO_CLICKED: 34,
  // A call-to-action Doodle was clicked.
  NTP_CTA_LOGO_CLICKED: 35,
  // An animated Doodle was clicked.
  NTP_ANIMATED_LOGO_CLICKED: 36,
};

/**
 * Handle the resizeDoodle command sent from the fpdoodle page
 * when an interactive doodle is clicked.
 * @param {Object} args, arguments sent to the page via postMessage.
 */
doodles.resizeDoodleHandler = function(args) {
  const width = args.width || null;
  const height = args.height || null;
  const duration = args.duration || '0s';
  const iframe = $(doodles.IDS.LOGO_DOODLE_IFRAME);

  const transitionCallback = function() {
    iframe.removeEventListener('webkitTransitionEnd', transitionCallback);
    iframe.contentWindow.postMessage(
        {cmd: 'resizeComplete'}, 'https://www.google.com');
  };
  iframe.addEventListener('webkitTransitionEnd', transitionCallback, false);

  document.body.style.setProperty('--logo-iframe-resize-duration', duration);
  document.body.style.setProperty('--logo-iframe-height', height);
  document.body.style.setProperty('--logo-iframe-width', width);
};

/**
 * Fetch doodle data and display it if one is present.
 */
doodles.init = function() {
  // Load the Doodle. After the first request completes (getting cached
  // data), issue a second request for fresh Doodle data.
  doodles.loadDoodle(/*v=*/ null, function(ddl) {
    if (ddl === null) {
      // Got no ddl object at all, the feature is probably disabled. Just show
      // the logo.
      doodles.showLogoOrDoodle(/*fromCache=*/ true);
      return;
    }

    const darkMode = window.matchMedia('(prefers-color-scheme: dark)');
    darkMode.addListener(doodles.fadeToLogoOrDoodle);

    // Got a (possibly empty) ddl object. Show logo or doodle.
    doodles.targetDoodle.image = ddl.image || null;
    doodles.targetDoodle.dark_image = ddl.dark_image || null;
    doodles.targetDoodle.metadata = ddl.metadata || null;
    doodles.showLogoOrDoodle(/*fromCache=*/ true);
    // Never hide an interactive doodle if it was already shown.
    if (ddl.metadata && (ddl.metadata.type === doodles.LOGO_TYPE.INTERACTIVE)) {
      return;
    }
    // If we got a valid ddl object (from cache), load a fresh one.
    if (ddl.v !== null) {
      doodles.loadDoodle(ddl.v, function(ddl2) {
        if (ddl2.usable) {
          doodles.targetDoodle.image = ddl2.image || null;
          doodles.targetDoodle.dark_image = ddl2.dark_image || null;
          doodles.targetDoodle.metadata = ddl2.metadata || null;
          doodles.fadeToLogoOrDoodle();
        }
      });
    }
  });

  // Set up doodle notifier (but it may be invisible).
  const doodleNotifier = $(doodles.IDS.LOGO_DOODLE_NOTIFIER);
  doodleNotifier.title = configData.translatedStrings.clickToViewDoodle;
  doodleNotifier.addEventListener('click', function(e) {
    e.preventDefault();
    const state = window.history.state || {};
    state.notheme = true;
    window.history.replaceState(state, document.title);
    ntpApiHandle.logEvent(doodles.LOG_TYPE.NTP_STATIC_LOGO_SHOWN_FROM_CACHE);
    ntpApiHandle.onthemechange();
    if (e.detail === 0) {  // Activated by keyboard.
      $(doodles.IDS.LOGO_DOODLE_BUTTON).focus();
    }
  });
};

/**
 * Get the doodle image for the current color scheme, either light or dark.
 */
doodles.getImageForColorScheme = function() {
  // Only use a dark image if the browser is in dark mode and a dark image
  // actually exists.
  if (window.matchMedia('(prefers-color-scheme: dark)').matches &&
      doodles.targetDoodle.dark_image) {
    return doodles.targetDoodle.dark_image;
  }
  return doodles.targetDoodle.image;
};

/**
 * Loads the Doodle. On success, the loaded script declares a global variable
 * ddl, which onload() receives as its single argument. On failure, onload() is
 * called with null as the argument. If v is null, then the call requests a
 * cached logo. If non-null, it must be the ddl.v of a previous request for a
 * cached logo, and the corresponding fresh logo is returned.
 * @param {?number} v
 * @param {function(?{v, usable, image, metadata})} onload
 */
doodles.loadDoodle = function(v, onload) {
  const ddlScript = document.createElement('script');
  ddlScript.src = 'chrome-search://local-ntp/doodle.js';
  if (v !== null) {
    ddlScript.src += '?v=' + v;
  }
  ddlScript.onload = function() {
    onload(ddl);
  };
  ddlScript.onerror = function() {
    onload(null);
  };
  document.body.appendChild(ddlScript);
};

/**
 * Handles the response of a doodle impression ping, i.e. stores the
 * appropriate interactionLogUrl or onClickUrlExtraParams. Also stores
 * the event id to be used for logging sharing events.
 *
 * @param {!Object} ddllog Response object from the ddllog ping.
 * @param {!boolean} isAnimated
 */
doodles.handleDdllogResponse = function(ddllog, isAnimated) {
  if (ddllog) {
    if (ddllog.encoded_ei) {
      doodles.ei = ddllog.encoded_ei;
    }
    if (ddllog.interaction_log_url) {
      const interactionLogUrl =
          new URL(ddllog.interaction_log_url, configData.googleBaseUrl);
      if (isAnimated) {
        doodles.targetDoodle.animatedInteractionLogUrl = interactionLogUrl;
      } else {
        doodles.targetDoodle.staticInteractionLogUrl = interactionLogUrl;
      }
      doodles.lastDdllogResponse =
          'interaction_log_url ' + ddllog.interaction_log_url;

    } else if (ddllog.target_url_params) {
      doodles.targetDoodle.onClickUrlExtraParams =
          new URLSearchParams(ddllog.target_url_params);
      doodles.lastDdllogResponse =
          'target_url_params ' + ddllog.target_url_params;
    } else {
      console.log('Invalid ddllog response:');
      console.log(ddllog);
    }
  } else {
    console.log('Missing ddllog response.');
  }
};

/**
 * Logs a doodle impression at the given logUrl, and handles the response via
 * doodles.handleDdllogResponse.
 *
 * @param {!string} logUrl
 * @param {!boolean} isAnimated
 */
doodles.logDoodleImpression = function(logUrl, isAnimated) {
  doodles.lastDdllogResponse = '';
  fetch(logUrl, {credentials: 'omit'})
      .then(function(response) {
        return response.text();
      })
      .then(function(text) {
        // Remove the optional XSS preamble.
        const preamble = ')]}\'';
        if (text.startsWith(preamble)) {
          text = text.substr(preamble.length);
        }
        let json;
        try {
          json = JSON.parse(text);
        } catch (error) {
          console.log('Failed to parse doodle impression response as JSON:');
          console.log(error);
          return;
        }
        doodles.handleDdllogResponse(json['ddllog'], isAnimated);
      })
      .catch(function(error) {
        console.log('Error logging doodle impression to "' + logUrl + '":');
        console.log(error);
      })
      .finally(function() {
        ++doodles.numDdllogResponsesReceived;
        if (doodles.onDdllogResponse !== null) {
          doodles.onDdllogResponse();
        }
      });
};

/**
 * Logs a doodle sharing event.
 * Uses the ct param provided in metadata.onClickUrl to track the doodle.
 *
 * @param {number} platform Social media platform the doodle will be shared to.
 */
doodles.logDoodleShare = function(platform) {
  if (doodles.targetDoodle.metadata.onClickUrl) {
    const onClickUrl = new URL(doodles.targetDoodle.metadata.onClickUrl);
    const ct = onClickUrl.searchParams.get('ct');
    if (ct && ct != '') {
      const url = new URL('/gen_204', configData.googleBaseUrl);
      url.searchParams.append('atyp', 'i');
      url.searchParams.append('ct', 'doodle');
      url.searchParams.append('cad', 'sh,' + platform + ',ct:' + ct);
      url.searchParams.append('ntp', '1');
      if (doodles.ei && doodles.ei != '') {
        url.searchParams.append('ei', doodles.ei);
      }
      navigator.sendBeacon(url.toString());
    }
  }
};

/**
 * Returns true if the target doodle is currently visible. If |image| is null,
 * returns true when the default logo is visible; if non-null, checks that it
 * matches the doodle that is currently visible. Here, "visible" means
 * fully-visible or fading in.
 *
 * @returns {boolean}
 */
doodles.isDoodleCurrentlyVisible = function() {
  const haveDoodle = ($(doodles.IDS.LOGO_DOODLE)
                          .classList.contains(doodles.CLASSES.SHOW_LOGO));
  const wantDoodle = (doodles.targetDoodle.metadata !== null) &&
      (doodles.getImageForColorScheme() !== null ||
       doodles.targetDoodle.metadata.type === doodles.LOGO_TYPE.INTERACTIVE);
  if (!haveDoodle || !wantDoodle) {
    return haveDoodle === wantDoodle;
  }

  // Have a visible doodle and a target doodle. Test that they match.
  if (doodles.targetDoodle.metadata.type === doodles.LOGO_TYPE.INTERACTIVE) {
    const logoDoodleIframe = $(doodles.IDS.LOGO_DOODLE_IFRAME);
    return logoDoodleIframe.classList.contains(doodles.CLASSES.SHOW_LOGO) &&
        (logoDoodleIframe.src === doodles.targetDoodle.metadata.fullPageUrl);
  } else {
    const logoDoodleImage = $(doodles.IDS.LOGO_DOODLE_IMAGE);
    const logoDoodleContainer = $(doodles.IDS.LOGO_DOODLE_CONTAINER);
    return logoDoodleContainer.classList.contains(doodles.CLASSES.SHOW_LOGO) &&
        ((logoDoodleImage.src === doodles.getImageForColorScheme()) ||
         (logoDoodleImage.src === doodles.targetDoodle.metadata.animatedUrl));
  }
};

/**
 * The image and metadata that should be shown, according to the latest fetch.
 * After a logo fades out, doodles.onDoodleFadeOutComplete fades in a logo
 * according to doodles.targetDoodle.
 */
doodles.targetDoodle = {
  image: null,
  metadata: null,
  // The log URLs and params may be filled with the response from the
  // corresponding impression log URL.
  staticInteractionLogUrl: null,
  animatedInteractionLogUrl: null,
  onClickUrlExtraParams: null,
};

doodles.getDoodleTargetUrl = function() {
  const url = new URL(doodles.targetDoodle.metadata.onClickUrl);
  if (doodles.targetDoodle.onClickUrlExtraParams) {
    for (const param of doodles.targetDoodle.onClickUrlExtraParams) {
      url.searchParams.append(param[0], param[1]);
    }
  }
  return url;
};

doodles.showLogoOrDoodle = function(fromCache) {
  const cachedInteractiveOffline = fromCache &&
      doodles.targetDoodle.metadata !== null &&
      doodles.targetDoodle.metadata.type == doodles.LOGO_TYPE.INTERACTIVE &&
      !window.navigator.onLine;
  if (doodles.targetDoodle.metadata !== null && !cachedInteractiveOffline) {
    doodles.applyDoodleMetadata();
    if (doodles.targetDoodle.metadata.type === doodles.LOGO_TYPE.INTERACTIVE) {
      $(doodles.IDS.LOGO_DOODLE_CONTAINER)
          .classList.remove(doodles.CLASSES.SHOW_LOGO);
      $(doodles.IDS.LOGO_DOODLE_IFRAME)
          .classList.add(doodles.CLASSES.SHOW_LOGO);
    } else {
      const isDarkModeEnabled =
          window.matchMedia('(prefers-color-scheme: dark)').matches;
      if (isDarkModeEnabled) {
        $(doodles.IDS.LOGO_DOODLE_WRAPPER).style.backgroundColor =
            doodles.targetDoodle.metadata.darkBackgroundColor;
      }
      $(doodles.IDS.LOGO_DOODLE_IMAGE).src = doodles.getImageForColorScheme();
      $(doodles.IDS.LOGO_DOODLE_CONTAINER)
          .classList.add(doodles.CLASSES.SHOW_LOGO);
      $(doodles.IDS.LOGO_DOODLE_IFRAME)
          .classList.remove(doodles.CLASSES.SHOW_LOGO);

      // Log the impression in Chrome metrics.
      const isCta = doodles.targetDoodle.metadata.animatedUrl;
      const eventType = isCta ?
          (fromCache ? doodles.LOG_TYPE.NTP_CTA_LOGO_SHOWN_FROM_CACHE :
                       doodles.LOG_TYPE.NTP_CTA_LOGO_SHOWN_FRESH) :
          (fromCache ? doodles.LOG_TYPE.NTP_STATIC_LOGO_SHOWN_FROM_CACHE :
                       doodles.LOG_TYPE.NTP_STATIC_LOGO_SHOWN_FRESH);
      ntpApiHandle.logEvent(eventType);

      // Ping the proper impression logging URL if it exists.
      const logUrl = isCta ? doodles.targetDoodle.metadata.ctaLogUrl :
                             doodles.targetDoodle.metadata.logUrl;
      if (logUrl) {
        doodles.logDoodleImpression(logUrl, /*isAnimated=*/ false);
      }
    }
    $(doodles.IDS.LOGO_DOODLE).classList.add(doodles.CLASSES.SHOW_LOGO);
  } else {
    // No doodle. Just show the default logo.
    $(doodles.IDS.LOGO_DEFAULT).classList.add(doodles.CLASSES.SHOW_LOGO);
  }
};

/**
 * Starts fading out the given element, which should be either the default logo
 * or the doodle.
 * @param {?Element} element
 */
doodles.startFadeOut = function(element) {
  if (!element || !element.classList.contains(doodles.CLASSES.SHOW_LOGO)) {
    return;
  }

  // Compute style now, to ensure that the transition from 1 -> 0 is properly
  // recognized. Otherwise, if a 0 -> 1 -> 0 transition is too fast, the
  // element might stay invisible instead of appearing then fading out.
  const style = window.getComputedStyle(element).opacity;

  element.classList.add(doodles.CLASSES.FADE);
  element.classList.remove(doodles.CLASSES.SHOW_LOGO);
  element.addEventListener('transitionend', doodles.onDoodleFadeOutComplete);
};

/**
 * Integrates a fresh doodle into the page as appropriate. If the correct logo
 * or doodle is already shown, just updates the metadata. Otherwise, initiates
 * a fade from the currently-shown logo/doodle to the new one.
 */
doodles.fadeToLogoOrDoodle = function() {
  // If the image is already visible, there's no need to start a fade-out.
  // However, metadata may have changed, so update the doodle's alt text and
  // href, if applicable.
  if (doodles.isDoodleCurrentlyVisible()) {
    if (doodles.targetDoodle.metadata !== null) {
      doodles.applyDoodleMetadata();
    }
    return;
  }

  // It's not the same doodle. Clear any loging URLs/params we might have.
  doodles.targetDoodle.staticInteractionLogUrl = null;
  doodles.targetDoodle.animatedInteractionLogUrl = null;
  doodles.targetDoodle.onClickUrlExtraParams = null;

  // Start fading out the current logo or doodle.
  // doodles.onDoodleFadeOutComplete will apply the change when the fade-out
  // finishes.
  doodles.startFadeOut($(doodles.IDS.LOGO_DEFAULT));
  doodles.startFadeOut($(doodles.IDS.LOGO_DOODLE));
};

doodles.onDoodleFadeOutComplete = function(e) {
  // Fade-out finished. Start fading in the appropriate logo.
  $(doodles.IDS.LOGO_DOODLE).classList.add(doodles.CLASSES.FADE);
  $(doodles.IDS.LOGO_DEFAULT).classList.add(doodles.CLASSES.FADE);
  doodles.showLogoOrDoodle(/*fromCache=*/ false);

  e.target.removeEventListener(
      'transitionend', doodles.onDoodleFadeOutComplete);
};

doodles.applyDoodleMetadata = function() {
  const logoDoodleImage = $(doodles.IDS.LOGO_DOODLE_IMAGE);
  const logoDoodleButton = $(doodles.IDS.LOGO_DOODLE_BUTTON);
  const logoDoodleIframe = $(doodles.IDS.LOGO_DOODLE_IFRAME);

  const logoDoodleShareButton = null;
  const logoDoodleShareDialog = null;

  switch (doodles.targetDoodle.metadata.type) {
    case doodles.LOGO_TYPE.SIMPLE:
      logoDoodleImage.title = doodles.targetDoodle.metadata.altText;

      // On click, navigate to the target URL.
      logoDoodleButton.onclick = function() {
        // Log the click in Chrome metrics.
        ntpApiHandle.logEvent(doodles.LOG_TYPE.NTP_STATIC_LOGO_CLICKED);

        // Ping the static interaction_log_url if there is one.
        if (doodles.targetDoodle.staticInteractionLogUrl) {
          navigator.sendBeacon(
              doodles.targetDoodle.staticInteractionLogUrl.href);
          doodles.targetDoodle.staticInteractionLogUrl = null;
        }

        window.location = doodles.getDoodleTargetUrl();
      };

      doodles.insertShareButton();
      doodles.updateShareDialog();
      break;

    case doodles.LOGO_TYPE.ANIMATED:
      logoDoodleImage.title = doodles.targetDoodle.metadata.altText;
      // The CTA image is currently shown; on click, show the animated one.
      logoDoodleButton.onclick = function(e) {
        e.preventDefault();

        // Log the click in Chrome metrics.
        ntpApiHandle.logEvent(doodles.LOG_TYPE.NTP_CTA_LOGO_CLICKED);

        // Ping the static interaction_log_url if there is one.
        if (doodles.targetDoodle.staticInteractionLogUrl) {
          navigator.sendBeacon(
              doodles.targetDoodle.staticInteractionLogUrl.href);
          doodles.targetDoodle.staticInteractionLogUrl = null;
        }

        // Once the animated image loads, ping the impression log URL.
        if (doodles.targetDoodle.metadata.logUrl) {
          logoDoodleImage.onload = function() {
            doodles.logDoodleImpression(
                doodles.targetDoodle.metadata.logUrl, /*isAnimated=*/ true);
          };
        }
        logoDoodleImage.src = doodles.targetDoodle.metadata.animatedUrl;

        // When the animated image is clicked, navigate to the target URL.
        logoDoodleButton.onclick = function() {
          // Log the click in Chrome metrics.
          ntpApiHandle.logEvent(doodles.LOG_TYPE.NTP_ANIMATED_LOGO_CLICKED);

          // Ping the animated interaction_log_url if there is one.
          if (doodles.targetDoodle.animatedInteractionLogUrl) {
            navigator.sendBeacon(
                doodles.targetDoodle.animatedInteractionLogUrl.href);
            doodles.targetDoodle.animatedInteractionLogUrl = null;
          }

          window.location = doodles.getDoodleTargetUrl();
        };

        doodles.insertShareButton();
        doodles.updateShareDialog();
      };
      break;

    case doodles.LOGO_TYPE.INTERACTIVE:
      logoDoodleIframe.title = doodles.targetDoodle.metadata.altText;
      logoDoodleIframe.src = doodles.targetDoodle.metadata.fullPageUrl;
      logoDoodleIframe.allow = 'autoplay';
      document.body.style.setProperty(
          '--logo-iframe-width',
          doodles.targetDoodle.metadata.iframeWidthPx + 'px');
      document.body.style.setProperty(
          '--logo-iframe-height',
          doodles.targetDoodle.metadata.iframeHeightPx + 'px');
      document.body.style.setProperty(
          '--logo-iframe-initial-height',
          doodles.targetDoodle.metadata.iframeHeightPx + 'px');
      break;
  }
};

/**
 * Creates a share button for static/animated doodles which opens the share
 * dialog upon click.
 */
doodles.insertShareButton = function() {
  // Terminates early if share button data for the current color scheme is
  // missing or incomplete.
  const isDarkModeEnabled =
      window.matchMedia('(prefers-color-scheme: dark)').matches;
  const lightShareButtonMissing = !isDarkModeEnabled &&
      (!doodles.targetDoodle.metadata ||
       !doodles.targetDoodle.metadata.shareButtonX ||
       !doodles.targetDoodle.metadata.shareButtonY ||
       !doodles.targetDoodle.metadata.shareButtonBg ||
       !doodles.targetDoodle.metadata.shareButtonIcon);
  const darkShareButtonMissing = isDarkModeEnabled &&
      (!doodles.targetDoodle.metadata ||
       !doodles.targetDoodle.metadata.darkShareButtonX ||
       !doodles.targetDoodle.metadata.darkShareButtonY ||
       !doodles.targetDoodle.metadata.darkShareButtonBg ||
       !doodles.targetDoodle.metadata.darkShareButtonIcon);
  if (lightShareButtonMissing || darkShareButtonMissing) {
    return;
  }
  const shareDialog = $(doodles.IDS.DOODLE_SHARE_DIALOG);

  const shareButtonWrapper = document.createElement('button');
  shareButtonWrapper.id = doodles.IDS.DOODLE_SHARE_BUTTON;
  const shareButtonImg = document.createElement('img');
  shareButtonImg.id = doodles.IDS.DOODLE_SHARE_BUTTON_IMG;
  shareButtonWrapper.appendChild(shareButtonImg);
  shareButtonWrapper.title = configData.translatedStrings.shareDoodle;

  const shareButtonX = isDarkModeEnabled ?
      doodles.targetDoodle.metadata.darkShareButtonX :
      doodles.targetDoodle.metadata.shareButtonX;
  shareButtonWrapper.style.left = shareButtonX + 'px';
  const shareButtonY = isDarkModeEnabled ?
      doodles.targetDoodle.metadata.darkShareButtonY :
      doodles.targetDoodle.metadata.shareButtonY;
  shareButtonWrapper.style.top = shareButtonY + 'px';

  // Alpha-less background color represented as an RGB HEX string.
  // Share button opacity represented as a double between 0 to 1.
  // Final background color is an RGBA HEX string created by combining
  // both.
  let backgroundColor = isDarkModeEnabled ?
      doodles.targetDoodle.metadata.darkShareButtonBg :
      doodles.targetDoodle.metadata.shareButtonBg;
  const shareButtonOpacity = isDarkModeEnabled ?
      doodles.targetDoodle.metadata.darkShareButtonOpacity :
      doodles.targetDoodle.metadata.shareButtonOpacity;
  if (!!shareButtonOpacity || shareButtonOpacity == 0) {
    const backgroundOpacityHex =
        parseInt(shareButtonOpacity * 255, 10).toString(16);
    backgroundColor += backgroundOpacityHex;
  }

  shareButtonWrapper.style.backgroundColor = backgroundColor;
  const shareButtonIcon = isDarkModeEnabled ?
      doodles.targetDoodle.metadata.darkShareButtonIcon :
      doodles.targetDoodle.metadata.shareButtonIcon;
  shareButtonImg.src = 'data:image/png;base64,' + shareButtonIcon;
  shareButtonWrapper.onclick = function() {
    shareDialog.showModal();
  };

  const oldButton = $(doodles.IDS.DOODLE_SHARE_BUTTON);
  if (oldButton) {
    oldButton.remove();
  }

  const logoContainer = $(doodles.IDS.LOGO_DOODLE_CONTAINER);
  if (logoContainer) {
    logoContainer.appendChild(shareButtonWrapper);
  }
};

/**
 * Initiates the buttons on the doodle share dialog. Also updates the doodle
 * title and short link.
 */
doodles.updateShareDialog = function() {
  const shareDialog = $(doodles.IDS.DOODLE_SHARE_DIALOG);
  const shareDialogTitle = $(doodles.IDS.DOODLE_SHARE_DIALOG_TITLE);
  const closeButton = $(doodles.IDS.DOODLE_SHARE_DIALOG_CLOSE_BUTTON);
  const facebookButton = $(doodles.IDS.DOODLE_SHARE_DIALOG_FACEBOOK_BUTTON);
  const twitterButton = $(doodles.IDS.DOODLE_SHARE_DIALOG_TWITTER_BUTTON);
  const mailButton = $(doodles.IDS.DOODLE_SHARE_DIALOG_MAIL_BUTTON);
  const copyButton = $(doodles.IDS.DOODLE_SHARE_DIALOG_COPY_LINK_BUTTON);
  const linkText = $(doodles.IDS.DOODLE_SHARE_DIALOG_LINK);

  if (!doodles.targetDoodle.metadata ||
      !doodles.targetDoodle.metadata.shortLink ||
      !doodles.targetDoodle.metadata.altText) {
    return;
  }

  const closeDialog = function() {
    shareDialog.close();
  };

  closeButton.onclick = closeDialog;
  closeButton.title = configData.translatedStrings.shareClose;
  shareDialog.onclick = function(e) {
    if (e.target == shareDialog) {
      closeDialog();
    }
  };

  const title = doodles.targetDoodle.metadata.altText;

  shareDialogTitle.innerHTML = title;
  const shortLink = doodles.targetDoodle.metadata.shortLink;

  facebookButton.onclick = function() {
    const url = 'https://www.facebook.com/dialog/share' +
        '?app_id=' + doodles.FACEBOOK_APP_ID +
        '&href=' + encodeURIComponent(shortLink) +
        '&hashtag=' + encodeURIComponent('#GoogleDoodle');
    window.open(url);
    doodles.logDoodleShare(doodles.SHARE_TYPE.FACEBOOK);
  };
  facebookButton.title = configData.translatedStrings.shareFacebook;

  twitterButton.onclick = function() {
    const url = 'https://twitter.com/intent/tweet' +
        '?text=' + encodeURIComponent(title + '\n' + shortLink);
    window.open(url);
    doodles.logDoodleShare(doodles.SHARE_TYPE.TWITTER);
  };
  twitterButton.title = configData.translatedStrings.shareTwitter;

  mailButton.onclick = function() {
    const url = 'mailto:?subject=' + encodeURIComponent(title) +
        '&body=' + encodeURIComponent(shortLink);
    document.location.href = url;
    doodles.logDoodleShare(doodles.SHARE_TYPE.EMAIL);
  };
  mailButton.title = configData.translatedStrings.shareMail;

  linkText.value = shortLink;
  linkText.onclick = function() {
    linkText.select();
  };
  linkText.setAttribute('readonly', true);
  linkText.title = configData.translatedStrings.shareLink;
  copyButton.onclick = function() {
    linkText.select();
    document.execCommand('copy');
    doodles.logDoodleShare(doodles.SHARE_TYPE.LINK_COPY);
  };
  copyButton.title = configData.translatedStrings.copyLink;
};
<!doctype html>
<html lang="$i18n{language}" dir="$i18n{textdirection}">
<!-- Copyright 2015 The Chromium Authors. All rights reserved.
     Use of this source code is governed by a BSD-style license that can be
     found in the LICENSE file. -->
<head>
  <link rel="stylesheet" href="chrome-search://local-ntp/animations.css"></link>
  <link rel="stylesheet" href="chrome-search://local-ntp/local-ntp-common.css"></link>
  <link rel="stylesheet" href="chrome-search://local-ntp/customize.css"></link>
  <link rel="stylesheet" href="chrome-search://local-ntp/doodles.css"></link>
  <link rel="stylesheet" href="chrome-search://local-ntp/local-ntp.css"></link>
  <link rel="stylesheet" href="chrome-search://local-ntp/theme.css"></link>
  <link rel="stylesheet" href="chrome-search://local-ntp/voice.css"></link>
  $i18nRaw{bgPreloader}
  <meta http-equiv="Content-Security-Policy"
      content="$i18nRaw{contentSecurityPolicy}">
  <script src="chrome-search://local-ntp/assert.js"
      integrity="$i18n{assertIntegrity}"></script>
  <script src="chrome-search://local-ntp/animations.js"
      integrity="$i18n{animationsIntegrity}"></script>
  <script src="chrome-search://local-ntp/config.js"
      integrity="$i18n{configDataIntegrity}"></script>
  <script src="chrome-search://local-ntp/customize.js"
      integrity="$i18n{localNtpCustomizeIntegrity}"></script>
  <script src="chrome-search://local-ntp/doodles.js"
      integrity="$i18n{doodlesIntegrity}"></script>
  <script src="chrome-search://local-ntp/local-ntp.js"
      integrity="$i18n{localNtpIntegrity}"></script>
  <script src="chrome-search://local-ntp/utils.js"
      integrity="$i18n{utilsIntegrity}"></script>
  <meta charset="utf-8">
  <meta name="google" value="notranslate">
  <meta name="referrer" content="strict-origin">
</head>
<body>
  <div id="custom-bg"></div>
  <div id="custom-bg-preview"></div>
  <!-- Container for the OneGoogleBar HTML. -->
  <div id="one-google"></div>

  <div id="ntp-contents">
    <div id="logo">
      <!-- The logo that is displayed in the absence of a doodle. -->
      <div id="logo-default" title="Google"></div>
      <!-- Logo displayed when theme prevents doodles. Doesn't fade. -->
      <div id="logo-non-white" title="Google"></div>
      <!-- A doodle, if any: its link and image. -->
      <div id="logo-doodle">
        <div id="logo-doodle-container">
          <div id="logo-doodle-wrapper">
            <button id="logo-doodle-button">
              <img id="logo-doodle-image" tabindex="-1"></img>
            </button>
          </div>
        </div>
        <iframe id="logo-doodle-iframe" scrolling="no"></iframe>
        <!-- A spinner, prompting the doodle. Visible on NTPs with customized
             backgrounds. -->
        <button id="logo-doodle-notifier">
          <div class="outer ball0"><div class="inner"></div></div>
          <div class="outer ball1"><div class="inner"></div></div>
          <div class="outer ball2"><div class="inner"></div></div>
          <div class="outer ball3"><div class="inner"></div></div>
        </button>
      </div>
    </div>

    <div id="fakebox-container" $i18n{hiddenIfRealboxEnabled}>
      <div id="fakebox">
        <div class="search-icon"></div>
        <div id="fakebox-text"></div>
        <input id="fakebox-input" autocomplete="off" tabindex="-1" type="url"
            aria-hidden="true">
        <div id="fakebox-cursor"></div>
        <button id="fakebox-microphone" class="microphone-icon" hidden></button>
      </div>
    </div>

    <div id="realbox-container" $i18n{hiddenIfRealboxDisabled}>
      <div id="realbox-input-wrapper">
        <div id="realbox-icon" class="$i18n{realboxIconClass}"></div>
        <input id="realbox" type="search" autocomplete="off" spellcheck="false"
            aria-live="polite" autofocus>
        <button id="realbox-microphone" class="microphone-icon" hidden></button>
        <div id="realbox-matches"></div>
      </div>
    </div>

    <div id="user-content">
      <!-- Search suggestions will be inserted here. -->
      <div id="most-visited">
        <!-- The container for the tiles. The MV iframe goes in here. -->
        <div id="mv-tiles"></div>
      </div>
    </div>

    <!-- Notification shown when the tiles are modified. -->
    <div id="mv-notice-container">
      <div id="mv-notice" class="notice-hide" role="alert">
        <span id="mv-msg"></span>
        <!-- Links in the notification. -->
        <span id="mv-notice-links">
          <span id="mv-undo" class="ripple" tabindex="0" role="button"></span>
          <span id="mv-restore" class="ripple" tabindex="0" role="button"></span>
        </span>
      </div>
    </div>

    <div id="attribution"><div id="attribution-text"></div></div>

    <div id="error-notice-container">
      <div id="error-notice" class="notice-hide" role="alert">
        <span id="error-notice-icon"></span>
        <span id="error-notice-msg"></span>
        <span id="error-notice-link" class="ripple" tabindex="0" role="button"></span>
      </div>
    </div>

    <div id="edit-bg" tabindex="0" role="button" hidden>
      <div id="edit-bg-icon"></div>
      <span id="edit-bg-text">$i18n{customizeButton}</span>
    </div>

    <div id="custom-bg-attr"></div>
  </div>

  <dialog div id="edit-bg-dialog">
    <div id="edit-bg-menu">
      <div id="edit-bg-title"></div>
      <div id="edit-bg-default-wallpapers" class="bg-option" tabindex="0">
        <div class="bg-option-img"></div>
        <div id="edit-bg-default-wallpapers-text" class="bg-option-text">
        </div>
      </div>
      <div id="edit-bg-upload-image" class="bg-option" tabindex="0">
        <div class="bg-option-img"></div>
        <div id="edit-bg-upload-image-text" class="bg-option-text"></div>
      </div>
      <div id="edit-bg-divider"></div>
      <div id="custom-links-restore-default" class="bg-option bg-option-disabled" tabindex="0">
        <div class="bg-option-img"></div>
        <div id="custom-links-restore-default-text" class="bg-option-text"></div>
      </div>
      <div id="edit-bg-restore-default" class="bg-option bg-option-disabled" tabindex="0">
        <div class="bg-option-img"></div>
        <div id="edit-bg-restore-default-text" class="bg-option-text"></div>
      </div>
    </div>
  </dialog>

  <dialog id="ddlsd">
    <div id="ddlsd-title"></div>
    <button id="ddlsd-close"></button>
    <div id="ddlsd-content">
      <button id="ddlsd-fbb" class="ddlsd-sbtn"></button>
      <button id="ddlsd-twb" class="ddlsd-sbtn"></button>
      <button id="ddlsd-emb" class="ddlsd-sbtn"></button>
      <hr id="ddlsd-hr">
      <div id="ddlsd-link">
        <span id="ddlsd-text-ctr">
          <input type="text" id="ddlsd-text" dir="ltr">
        </span>
        <button id="ddlsd-copy"></button>
      </div>
    </div>
  </dialog>

  <dialog id="bg-sel-menu" class="customize-dialog">
    <div id="bg-sel-title-bar">
    <div id="bg-sel-back-circle" tabindex="0" role="button">
      <div id="bg-sel-back"></div>
    </div>
    <div id="bg-sel-title"></div>
    </div>
    <div id="bg-sel-tiles" tabindex="0"></div>
    <div id="bg-sel-footer">
      <button id="bg-sel-footer-cancel" class="bg-sel-footer-button paper secondary ripple"
          tabindex="0"></button>
      <button id="bg-sel-footer-done" class="bg-sel-footer-button paper primary ripple"
          tabindex="-1"></button>
    </div>
  </dialog>

  <dialog id="customization-menu" class="customize-dialog">
    <div id="menu-nav-panel" role="tablist" aria-label="$i18n{customizeMenu}">
      <button id="backgrounds-button" class="menu-option" tabindex="0"
          role="tab" aria-controls="backgrounds-menu backgrounds-image-menu"
          aria-selected="true" aria-labelledby="backgrounds-menu-option"
          title="$i18n{backgroundsOption}">
        <div class="menu-option-icon-wrapper">
          <div id="backgrounds-icon" class="menu-option-icon"></div>
        </div>
        <div id="backgrounds-menu-option" class="menu-option-label">
          $i18n{backgroundsOption}
        </div>
      </button>
      <button id="shortcuts-button" class="menu-option" tabindex="0" role="tab"
          aria-controls="shortcuts-menu" aria-selected="false"
          aria-labelledby="shortcuts-menu-option"
          title="$i18n{shortcutsOption}">
        <div class="menu-option-icon-wrapper">
          <div id="shortcuts-icon" class="menu-option-icon"></div>
        </div>
        <div id="shortcuts-menu-option" class="menu-option-label">
          $i18n{shortcutsOption}
        </div>
      </button>
      <button id="colors-button" class="menu-option" tabindex="0" role="tab"
          aria-controls="colors-menu" aria-selected="false"
          aria-labelledby="colors-menu-option" title="$i18n{colorsOption}">
        <div class="menu-option-icon-wrapper">
          <div id="colors-icon" class="menu-option-icon"></div>
        </div>
        <div id="colors-menu-option" class="menu-option-label">
          $i18n{colorsOption}
        </div>
      </button>
    </div>
    <div id="menu-contents">
      <div id="menu-header">
        <div id="menu-back-circle" tabindex="0" role="button"
            aria-label="$i18n{backLabel}" title="$i18n{backLabel}">
          <div id="menu-back"></div>
        </div>
        <div id="menu-title">$i18n{customizeMenu}</div>
        <div id="refresh-daily-wrapper">
          <div id="refresh-toggle-wrapper" title="$i18n{refreshDaily}">
            <label class="switch">
              <input id="refresh-daily-toggle" type="checkbox"
                  aria-labelledby="refresh-text"></input>
              <span class="toggle">
                <div class="knob"></div>
                <div class="highlight"></div>
              </span>
            </label>
          </div>
          <div id="refresh-text">$i18n{refreshDaily}</div>
        </div>
      </div>
      <div id="backgrounds-menu" class="menu-panel" tabindex="0"
          role="tabpanel" aria-label="$i18n{backgroundsOption}">
        <div id="backgrounds-upload" class="bg-sel-tile-bg">
          <div id="backgrounds-upload-icon" class="bg-sel-tile" tabindex="-1"
              role="button" aria-label="$i18n{uploadImage}"
              aria-pressed="false" title="$i18n{uploadImage}">
            <div id="backgrounds-upload-arrow"></div>
            <div id="backgrounds-upload-text">$i18n{uploadImage}</div>
          </div>
        </div>
        <div id="backgrounds-default" class="bg-sel-tile-bg">
          <div id="backgrounds-default-icon" class="bg-sel-tile" tabindex="-1"
              role="button" aria-label="$i18n{noBackground}"
              title="$i18n{noBackground}" aria-pressed="false">
            <div class="mini-page">
              <div class="mini-header-colorful"></div>
              <div class="mini-shortcuts"></div>
            </div>
          </div>
          <div class="bg-sel-tile-title">$i18n{noBackground}</div>
        </div>
      </div>
      <div id="backgrounds-image-menu" class="menu-panel" tabindex="0"
          role="tabpanel" aria-label="$i18n{backgroundsOption}"></div>
      <div id="shortcuts-menu" class="menu-panel" tabindex="0" role="tabpanel"
          aria-label="$i18n{shortcutsOption}">
        <div id="sh-options">
          <div class="sh-option">
            <div id="sh-option-cl" class="sh-option-image" tabindex="-1"
                role="button" aria-pressed="false"
                aria-labelledby="sh-option-cl-title" title="$i18n{myShortcuts}">
              <div class="sh-option-icon"></div>
              <div class="sh-option-mini">
                <div class="mini-page">
                  <div class="mini-header"></div>
                  <div class="mini-shortcuts"></div>
                </div>
              </div>
            </div>
            <div id="sh-option-cl-title" class="sh-option-title">
              $i18n{myShortcuts}
            </div>
            $i18n{shortcutsCurated}
          </div>
          <div class="sh-option">
            <div id="sh-option-mv" class="sh-option-image" tabindex="-1"
                role="button" aria-pressed="false"
                aria-labelledby="sh-option-mv-title" title="$i18n{mostVisited}">
              <div class="sh-option-icon"></div>
              <div class="sh-option-mini">
                <div class="mini-page">
                  <div class="mini-header"></div>
                  <div class="mini-shortcuts"></div>
                </div>
              </div>
            </div>
            <div id="sh-option-mv-title" class="sh-option-title">
              $i18n{mostVisited}
            </div>
            $i18n{shortcutsSuggested}
          </div>
        </div>
        <div id="sh-hide">
          <div id="sh-hide-icon"></div>
          <div>
            <div id="sh-hide-title">$i18n{hideShortcuts}</div>
            $i18n{hideShortcutsDesc}
          </div>
          <div id="sh-hide-toggle-wrapper" title="$i18n{hideShortcuts}">
            <label class="switch">
              <input id="sh-hide-toggle" type="checkbox" tabindex="-1"
                  aria-labelledby="sh-hide-title"></input>
              <span class="toggle">
                <div class="knob"></div>
                <div class="highlight"></div>
              </span>
            </label>
          </div>
        </div>
      </div>
      <div id="colors-menu" class="menu-panel" tabindex="0" role="tabpanel"
          aria-label="$i18n{colorsOption}">
        <div id="colors-theme" tabindex="0">
            <div id="colors-theme-icon"></div>
            <div id="colors-theme-info">
              <div id="colors-theme-name"></div>
              $i18n{installedThemeDesc}
            </div>
            <a id="colors-theme-link" target="_blank">
              <div id="colors-theme-link-icon" > </div>
            </a>
            <button id="colors-theme-uninstall" class="paper secondary">
              $i18n{uninstallButton}
            </button>
        </div>
        <div id="color-picker-container" class="bg-sel-tile-bg">
          <div id="color-picker-tile" class="bg-sel-tile" tabindex="-1"
            aria-label="$i18n{colorPickerLabel}"
            title="$i18n{colorPickerLabel}"
            role="button" aria-pressed="false">
            <div id="left-semicircle"></div>
            <div id="color-picker-icon"></div>
            <input id="color-picker" type="color" style="display:none">
            </input>
          </div>
        </div>
        <div id="colors-default" class="bg-sel-tile-bg">
          <div id="colors-default-icon" class="bg-sel-tile" tabindex="-1"
              aria-label="$i18n{defaultThemeLabel}"
              title="$i18n{defaultThemeLabel}" tabindex="-1"
              role="button" aria-pressed="false">
          </div>
        </div>
      </div>
    </div>
    <div id="menu-footer">
      <button id="menu-cancel"
          class="bg-sel-footer-button paper secondary ripple"
          title="$i18n{cancelButton}">$i18n{cancelButton}</button>
      <button id="menu-done" class="bg-sel-footer-button paper primary ripple"
          title="$i18n{doneButton}">$i18n{doneButton}</button>
    </div>
  </dialog>

  <dialog id="voice-overlay-dialog" class="overlay-dialog">
    <div id="voice-overlay" class="overlay-hidden">
      <button id="voice-close-button" class="close-button">&times;</button>
      <div id="voice-outer" class="outer">
        <div class="inner-container">
          <div id="voice-button-container" class="button-container">
            <!-- The audio level animation. -->
            <span id="voice-level" class="level"></span>
            <!-- The microphone button. -->
            <span id="voice-button" class="button">
              <!-- The microphone icon (in CSS). -->
              <div class="microphone">
                <span class="receiver"></span>
                <div class="wrapper">
                  <span class="stem"></span>
                  <span class="shell"></span>
                </div>
              </div>
            </span>
          </div>
          <div id="text-container" aria-live="polite">
            <!-- Low confidence text underneath high confidence text. -->
            <span id="voice-text-i" class="voice-text"></span>
            <!-- High confidence text on top of low confidence text. -->
            <span id="voice-text-f" class="voice-text"></span>
          </div>
        </div>
      </div>
    </div>
  </dialog>

  <div id="one-google-end-of-body"></div>

  <script defer src="chrome-search://local-ntp/voice.js"
      integrity="$i18n{localNtpVoiceIntegrity}"></script>
</body>
</html>
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview The local InstantExtended NTP.
 */

// Global local statics (visible for testing).

/**
 * Whether the Most Visited and edit custom link iframes should be created while
 * running tests. Currently the SimpleJavascriptTests are flaky due to some
 * raciness in the creation/destruction of the iframe. crbug.com/786313.
 * @type {boolean}
 */
let iframesAndVoiceSearchDisabledForTesting = false;

/**
 * Whether the most visited tiles have finished loading, i.e. we've received the
 * 'loaded' postMessage from the iframe. Used by tests to detect that loading
 * has completed.
 * @type {boolean}
 */
let tilesAreLoaded = false;

/**
 * Controls rendering the new tab page for InstantExtended.
 * @return {Object} A limited interface for testing the local NTP.
 */
function LocalNTP() {
'use strict';

// Type definitions.

/** @enum {number} */
const ACMatchClassificationStyle = {
  NONE: 0,
  URL: 1 << 0,
  MATCH: 1 << 1,
  DIM: 1 << 2,
};

/** @typedef {{inline: string, text: string}} */
let RealboxOutput;

/**
 * @typedef {{
 *   moveCursorToEnd: (boolean|undefined),
 *   inline: (string|undefined),
 *   text: (string|undefined),
 * }}
 */
let RealboxOutputUpdate;

// Constants.

/**
 * Enum for classnames.
 * @enum {string}
 * @const
 */
const CLASSES = {
  ALTERNATE_LOGO: 'alternate-logo',  // Shows white logo if required by theme
  // Shows a clock next to historical realbox results.
  CLOCK_ICON: 'clock-icon',
  // Applies styles to dialogs used in customization.
  CUSTOMIZE_DIALOG: 'customize-dialog',
  DELAYED_HIDE_NOTIFICATION: 'mv-notice-delayed-hide',
  DISMISSABLE: 'dismissable',
  DISMISS_ICON: 'dismiss-icon',
  DISMISS_PROMO: 'dismiss-promo',
  // Extended and elevated style for customization entry point.
  ENTRY_POINT_ENHANCED: 'ep-enhanced',
  FAKEBOX_FOCUS: 'fakebox-focused',  // Applies focus styles to the fakebox
  // Applies float animations to the Most Visited notification
  FLOAT_DOWN: 'float-down',
  FLOAT_UP: 'float-up',
  // Applies drag focus style to the fakebox
  FAKEBOX_DRAG_FOCUS: 'fakebox-drag-focused',
  // Applies a different style to the error notification if a link is present.
  HAS_LINK: 'has-link',
  HIDE_FAKEBOX: 'hide-fakebox',
  HIDE_NOTIFICATION: 'notice-hide',
  INITED: 'inited',  // Reveals the <body> once init() is done.
  LEFT_ALIGN_ATTRIBUTION: 'left-align-attribution',
  // Vertically centers the most visited section for a non-Google provided page.
  NON_GOOGLE_PAGE: 'non-google-page',
  REMOVABLE: 'removable',
  REMOVE_ICON: 'remove-icon',
  REMOVE_MATCH: 'remove-match',
  SEARCH_ICON: 'search-icon',  // Magnifying glass/search icon.
  SELECTED: 'selected',  // A selected (via up/down arrow key) realbox match.
  SHOW_ELEMENT: 'show-element',
  // When the realbox has matches to show.
  SHOW_MATCHES: 'show-matches',
  // Applied when the doodle notifier should be shown instead of the doodle.
  USE_NOTIFIER: 'use-notifier',
};

const SEARCH_HISTORY_MATCH_TYPES = [
  'search-history',
  'search-suggest-personalized',
];

/**
 * The period of time (ms) before transitions can be applied to a toast
 * notification after modifying the "display" property.
 * @type {number}
 */
const DISPLAY_TIMEOUT = 20;

/**
 * Enum for HTML element ids.
 * @enum {string}
 * @const
 */
const IDS = {
  ATTRIBUTION: 'attribution',
  ATTRIBUTION_TEXT: 'attribution-text',
  CUSTOM_BG: 'custom-bg',
  CUSTOM_LINKS_EDIT_IFRAME: 'custom-links-edit',
  CUSTOM_LINKS_EDIT_IFRAME_DIALOG: 'custom-links-edit-dialog',
  ERROR_NOTIFICATION: 'error-notice',
  ERROR_NOTIFICATION_CONTAINER: 'error-notice-container',
  ERROR_NOTIFICATION_LINK: 'error-notice-link',
  ERROR_NOTIFICATION_MSG: 'error-notice-msg',
  FAKEBOX: 'fakebox',
  FAKEBOX_INPUT: 'fakebox-input',
  FAKEBOX_TEXT: 'fakebox-text',
  FAKEBOX_MICROPHONE: 'fakebox-microphone',
  MOST_VISITED: 'most-visited',
  NOTIFICATION: 'mv-notice',
  NOTIFICATION_CONTAINER: 'mv-notice-container',
  NOTIFICATION_MESSAGE: 'mv-msg',
  NTP_CONTENTS: 'ntp-contents',
  OGB: 'one-google',
  PROMO: 'promo',
  REALBOX: 'realbox',
  REALBOX_ICON: 'realbox-icon',
  REALBOX_INPUT_WRAPPER: 'realbox-input-wrapper',
  REALBOX_MATCHES: 'realbox-matches',
  REALBOX_MICROPHONE: 'realbox-microphone',
  RESTORE_ALL_LINK: 'mv-restore',
  SUGGESTIONS: 'suggestions',
  TILES: 'mv-tiles',
  TILES_IFRAME: 'mv-single',
  UNDO_LINK: 'mv-undo',
  USER_CONTENT: 'user-content',
};

/**
 * The different types of events that are logged from the NTP. This enum is
 * used to transfer information from the NTP JavaScript to the renderer and is
 * not used as a UMA enum histogram's logged value.
 * Note: Keep in sync with common/ntp_logging_events.h
 * @enum {number}
 * @const
 */
const LOG_TYPE = {
  // The One Google Bar was shown.
  NTP_ONE_GOOGLE_BAR_SHOWN: 37,

  // 'Cancel' was clicked in the 'Edit shortcut' dialog.
  NTP_CUSTOMIZE_SHORTCUT_CANCEL: 54,
  // 'Done' was clicked in the 'Edit shortcut' dialog.
  NTP_CUSTOMIZE_SHORTCUT_DONE: 55,

  // A middle slot promo was shown.
  NTP_MIDDLE_SLOT_PROMO_SHOWN: 60,
  // A promo link was clicked.
  NTP_MIDDLE_SLOT_PROMO_LINK_CLICKED: 61,
};

/**
 * The maximum number of tiles to show in the Most Visited section if custom
 * links is enabled.
 * @type {number}
 * @const
 */
const MAX_NUM_TILES_CUSTOM_LINKS = 10;

/**
 * The maximum number of tiles to show in the Most Visited section.
 * @type {number}
 * @const
 */
const MAX_NUM_TILES_MOST_VISITED = 8;

/**
 * The period of time (ms) before the Most Visited notification is hidden.
 * @type {number}
 */
const NOTIFICATION_TIMEOUT = 10000;

/**
 * Specifications for an NTP design (not comprehensive).
 *
 * backgroundColor: The 4-component color of default background,
 * darkBackgroundColor: The 4-component color of default dark background,
 * iconBackgroundColor: The 4-component color of default dark icon background,
 * iconDarkBackgroundColor: The 4-component color of default icon background,
 * numTitleLines: Number of lines to display in titles.
 * titleColor: The 4-component color of title text.
 * titleColorAgainstDark: The 4-component color of title text against a dark
 *   theme.
 *
 * @type {{
 *   backgroundColor: !Array<number>,
 *   darkBackgroundColor: !Array<number>,
 *   iconBackgroundColor: !Array<number>,
 *   iconDarkBackgroundColor: !Array<number>,
 *   numTitleLines: number,
 *   titleColor: !Array<number>,
 *   titleColorAgainstDark: !Array<number>,
 * }}
 */
const NTP_DESIGN = {
  backgroundColor: [255, 255, 255, 255],
  darkBackgroundColor: [53, 54, 58, 255],
  iconBackgroundColor: [241, 243, 244, 255],  /** GG100 */
  iconDarkBackgroundColor: [32, 33, 36, 255], /** GG900 */
  numTitleLines: 1,
  titleColor: [60, 64, 67, 255],               /** GG800 */
  titleColorAgainstDark: [248, 249, 250, 255], /** GG050 */
};

const REALBOX_KEYDOWN_HANDLED_KEYS = [
  'ArrowDown',
  'ArrowUp',
  'Delete',
  'Enter',
  'Escape',
  'PageDown',
  'PageUp',
];

// Local statics.

/** @type {?AutocompleteResult} */
let autocompleteResult = null;

/**
 * The currently visible notification element. Null if no notification is
 * present.
 * @type {?Object}
 */
let currNotification = null;

/**
 * The timeout function for automatically hiding the pop-up notification. Only
 * set if a notification is visible.
 * @type {?Object}
 */
let delayedHideNotification = null;

/**
 * Whether 'Enter' was pressed but did not navigate to a match due to matches
 * being stale.
 * @type {boolean}
 */
let enterWasPressed = false;

/**
 * True if dark mode is enabled.
 * @type {boolean}
 */
let isDarkModeEnabled = false;

/**
 * Used to prevent the default match from requiring inline autocompletion when
 * the user is deleting text in the input.
 */
let isDeletingInput = false;

/**
 * The last blacklisted tile rid if any, which by definition should not be
 * filler.
 * @type {?number}
 */
let lastBlacklistedTile = null;

/**
 * The 'Enter' event that was ignored due to matches being stale. Will be used
 * to navigate to the default match once up-to-date matches arrive.
 * @type {?Event}
 */
let lastEnterEvent = null;

/**
 * The last queried input.
 * @type {string|undefined}
 */
let lastQueriedInput;

/**
 * Last text/inline autocompletion shown in the realbox (either by user input or
 * outputting autocomplete matches).
 * @type {!RealboxOutput}
 */
let lastOutput = {text: '', inline: ''};

/** @type {?number} */
let lastRealboxFocusTime = null;

/**
 * The browser embeddedSearch.newTabPage object.
 * @type {Object}
 */
let ntpApiHandle;

/**
 * True if user just pasted into the realbox.
 * @type {boolean}
 */
let pastedInRealbox = false;

// Helper methods.

/** @return {boolean} */
function areRealboxMatchesVisible() {
  return $(IDS.REALBOX_INPUT_WRAPPER).classList.contains(CLASSES.SHOW_MATCHES);
}

/** @param {!AutocompleteResult} result */
function autocompleteResultChanged(result) {
  if (lastQueriedInput === undefined ||
      result.input !== lastQueriedInput.trimLeft()) {
    return;  // Stale result; ignore.
  }

  renderAutocompleteMatches(result.matches);
  autocompleteResult = result;

  $(IDS.REALBOX).focus();

  updateRealboxOutput({
    inline: '',
    text: lastQueriedInput || '',
  });

  const first = result.matches[0];
  if (first && first.allowedToBeDefaultMatch) {
    selectMatchEl(assert($(IDS.REALBOX_MATCHES).firstElementChild));
    updateRealboxOutput({inline: first.inlineAutocompletion});

    if (enterWasPressed) {
      assert(lastEnterEvent);
      navigateToMatch(first, lastEnterEvent);
    }
  } else {
    setRealboxIcon(undefined);
  }
}

/**
 * @param {number} style
 * @return {!Array<string>}
 */
function classificationStyleToClasses(style) {
  const classes = [];
  if (style & ACMatchClassificationStyle.DIM) {
    classes.push('dim');
  }
  if (style & ACMatchClassificationStyle.MATCH) {
    classes.push('match');
  }
  if (style & ACMatchClassificationStyle.URL) {
    classes.push('url');
  }
  return classes;
}

function clearAutocompleteMatches() {
  autocompleteResult = null;
  window.chrome.embeddedSearch.searchBox.stopAutocomplete(
      /*clearResult=*/ true);
  // Autocomplete sends updates once it is stopped. Invalidate those results
  // by setting the last queried input to its uninitialized value.
  lastQueriedInput = undefined;
  setRealboxIcon(undefined);
}

/**
 * Converts an Array of color components into RGBA format "rgba(R,G,B,A)".
 * @param {Array<number>} color Array of rgba color components.
 * @return {string} CSS color in RGBA format.
 */
function convertToRGBAColor(color) {
  return 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' +
      color[3] / 255 + ')';
}

/**
 * Returns a timeout that can be executed early. Calls back true if this was
 * an early execution, false otherwise.
 * @param {!Function} timeout The timeout function. Requires a boolean param.
 * @param {number} delay The timeout delay.
 * @return {Object}
 */
function createExecutableTimeout(timeout, delay) {
  const timeoutId = window.setTimeout(() => {
    timeout(/*executedEarly=*/ false);
  }, delay);
  return {
    clear: () => {
      window.clearTimeout(timeoutId);
    },
    trigger: () => {
      window.clearTimeout(timeoutId);
      return timeout(/*executedEarly=*/ true);
    }
  };
}

/** Create the Most Visited and edit custom links iframes. */
function createIframes() {
  // Collect arguments for the most visited iframe.
  const args = [];

  const searchboxApiHandle = window.chrome.embeddedSearch.searchBox;

  if (searchboxApiHandle.rtl) {
    args.push('rtl=1');
  }
  if (NTP_DESIGN.numTitleLines > 1) {
    args.push('ntl=' + NTP_DESIGN.numTitleLines);
  }

  args.push(
      'title=' +
      encodeURIComponent(configData.translatedStrings.mostVisitedTitle));
  args.push(
      'removeTooltip=' +
      encodeURIComponent(configData.translatedStrings.removeThumbnailTooltip));

  if (configData.isGooglePage) {
    args.push('enableCustomLinks=1');
    args.push(
        'addLink=' +
        encodeURIComponent(configData.translatedStrings.addLinkTitle));
    args.push(
        'addLinkTooltip=' +
        encodeURIComponent(configData.translatedStrings.addLinkTooltip));
    args.push(
        'editLinkTooltip=' +
        encodeURIComponent(configData.translatedStrings.editLinkTooltip));
  }

  // Create the most visited iframe.
  const iframe = document.createElement('iframe');
  iframe.id = IDS.TILES_IFRAME;
  iframe.name = IDS.TILES_IFRAME;
  iframe.title = configData.translatedStrings.mostVisitedTitle;
  iframe.src = 'chrome-search://most-visited/single.html?' + args.join('&');
  $(IDS.TILES).appendChild(iframe);

  iframe.onload = function() {
    sendNtpThemeToMostVisitedIframe();
    reloadTiles();
  };

  if (configData.isGooglePage) {
    // Collect arguments for the edit custom link iframe.
    const clArgs = [];

    if (searchboxApiHandle.rtl) {
      clArgs.push('rtl=1');
    }

    clArgs.push(
        'addTitle=' +
        encodeURIComponent(configData.translatedStrings.addLinkTitle));
    clArgs.push(
        'editTitle=' +
        encodeURIComponent(configData.translatedStrings.editLinkTitle));
    clArgs.push(
        'nameField=' +
        encodeURIComponent(configData.translatedStrings.nameField));
    clArgs.push(
        'urlField=' +
        encodeURIComponent(configData.translatedStrings.urlField));
    clArgs.push(
        'linkRemove=' +
        encodeURIComponent(configData.translatedStrings.linkRemove));
    clArgs.push(
        'linkCancel=' +
        encodeURIComponent(configData.translatedStrings.linkCancel));
    clArgs.push(
        'linkDone=' +
        encodeURIComponent(configData.translatedStrings.linkDone));
    clArgs.push(
        'invalidUrl=' +
        encodeURIComponent(configData.translatedStrings.invalidUrl));

    // Create the edit custom link iframe.
    const clIframe = document.createElement('iframe');
    clIframe.id = IDS.CUSTOM_LINKS_EDIT_IFRAME;
    clIframe.name = IDS.CUSTOM_LINKS_EDIT_IFRAME;
    clIframe.title = configData.translatedStrings.editLinkTitle;
    clIframe.src = 'chrome-search://most-visited/edit.html?' + clArgs.join('&');
    const clIframeDialog = document.createElement('dialog');
    clIframeDialog.id = IDS.CUSTOM_LINKS_EDIT_IFRAME_DIALOG;
    clIframeDialog.classList.add(CLASSES.CUSTOMIZE_DIALOG);
    clIframeDialog.appendChild(clIframe);
    document.body.appendChild(clIframeDialog);
  }

  window.addEventListener('message', handlePostMessage);
}

/**
 * Return true if custom links are enabled.
 * @return {boolean}
 */
function customLinksEnabled() {
  return configData.isGooglePage &&
      !chrome.embeddedSearch.newTabPage.isUsingMostVisited;
}

/**
 * Called by tests to disable the creation of Most Visited and edit custom link
 * iframes.
 */
function disableIframesAndVoiceSearchForTesting() {
  iframesAndVoiceSearchDisabledForTesting = true;
}

/**
 * TODO(dbeam): reconcile this with //ui/webui/resources/js/util.js.
 * @param {?Node} node The node to check.
 * @param {function(?Node):boolean} predicate The function that tests the
 *     nodes.
 * @return {?Node} The found ancestor or null if not found.
 */
function findAncestor(node, predicate) {
  while (node !== null) {
    if (predicate(node)) {
      break;
    }
    node = node.parentNode;
  }
  return node;
}

/**
 * Animates the pop-up notification to float down, and clears the timeout to
 * hide the notification.
 * @param {?Element} notification The notification element.
 * @param {?Element} notificationContainer The notification container element.
 * @param {boolean} showPromo Do show the promo if present.
 */
function floatDownNotification(notification, notificationContainer, showPromo) {
  if (!notification || !notificationContainer) {
    return;
  }

  if (!notificationContainer.classList.contains(CLASSES.FLOAT_UP)) {
    return;
  }

  // Clear the timeout to hide the notification.
  if (delayedHideNotification) {
    delayedHideNotification.clear();
    delayedHideNotification = null;
    currNotification = null;
  }

  if (showPromo) {
    // Show middle-slot promo if one is present.
    const promo = $(IDS.PROMO);
    if (promo) {
      promo.classList.remove(CLASSES.HIDE_NOTIFICATION);
      // Timeout is required for the "float" transition to work. Modifying the
      // "display" property prevents transitions from activating for a brief
      // period of time.
      window.setTimeout(() => {
        promo.classList.remove(CLASSES.FLOAT_DOWN);
      }, DISPLAY_TIMEOUT);
    }
  }

  // Reset notification visibility once the animation is complete.
  notificationContainer.addEventListener('transitionend', (event) => {
    // Blur the hidden items.
    $(IDS.UNDO_LINK).blur();
    $(IDS.RESTORE_ALL_LINK).blur();
    if (notification.classList.contains(CLASSES.HAS_LINK)) {
      notification.classList.remove(CLASSES.HAS_LINK);
      $(IDS.ERROR_NOTIFICATION_LINK).blur();
    }
    // Hide the notification
    if (!notification.classList.contains(CLASSES.FLOAT_UP)) {
      notification.classList.add(CLASSES.HIDE_NOTIFICATION);
    }
  }, {once: true});
  notificationContainer.classList.remove(CLASSES.FLOAT_UP);
}

/**
 * Animates the specified notification to float up. Automatically hides any
 * pre-existing notification and sets a delayed timer to hide the new
 * notification.
 * @param {?Element} notification The notification element.
 * @param {?Element} notificationContainer The notification container element.
 */
function floatUpNotification(notification, notificationContainer) {
  if (!notification || !notificationContainer) {
    return;
  }

  // Hide any pre-existing notification.
  if (delayedHideNotification) {
    // Hide the current notification if it's a different type (i.e. error vs
    // success). Otherwise, simply clear the notification timeout and reset it
    // later.
    if (currNotification === notificationContainer) {
      delayedHideNotification.clear();
    } else {
      delayedHideNotification.trigger();
    }
    delayedHideNotification = null;
  }

  // Hide middle-slot promo if one is present.
  const promo = $(IDS.PROMO);
  if (promo) {
    promo.classList.add(CLASSES.FLOAT_DOWN);
    // Prevent keyboard focus once the promo is hidden.
    promo.addEventListener('transitionend', (event) => {
      if (event.propertyName === 'bottom' &&
          promo.classList.contains(CLASSES.FLOAT_DOWN)) {
        promo.classList.add(CLASSES.HIDE_NOTIFICATION);
      }
    }, {once: true});
  }

  notification.classList.remove(CLASSES.HIDE_NOTIFICATION);
  // Timeout is required for the "float" transition to work. Modifying the
  // "display" property prevents transitions from activating for a brief period
  // of time.
  window.setTimeout(() => {
    notificationContainer.classList.add(CLASSES.FLOAT_UP);
  }, DISPLAY_TIMEOUT);

  // Automatically hide the notification after a period of time.
  delayedHideNotification = createExecutableTimeout((executedEarly) => {
    // Early execution occurs if another notification should be shown. In this
    // case, we do not want to re-show the promo yet.
    floatDownNotification(notification, notificationContainer, !executedEarly);
  }, NOTIFICATION_TIMEOUT);
  currNotification = notificationContainer;
}

/**
 * @param {string} url
 * @return {string} The chrome-search://ntpicon/ corresponding to |url|.
 */
function getIconUrl(url) {
  // TODO(crbug.com/997229): use chrome://favicon/<url> when perms allow.
  const iconUrl = new URL('chrome-search://ntpicon/');
  iconUrl.searchParams.set('show_fallback_monogram', 'false');
  iconUrl.searchParams.set('size', '24@' + window.devicePixelRatio + 'x');
  iconUrl.searchParams.set('url', url);
  return iconUrl.toString();
}

/**
 * Returns theme background info, first checking for history.state.notheme. If
 * the page has notheme set, returns a fallback light-colored theme (or dark-
 * colored theme if dark mode is enabled). This is used when the doodle is
 * displayed after clicking the notifier.
 * @return {?NtpTheme}
 */
function getNtpTheme() {
  if (history.state && history.state.notheme) {
    return {
      alternateLogo: false,
      backgroundColorRgba:
          (isDarkModeEnabled ? NTP_DESIGN.darkBackgroundColor :
                               NTP_DESIGN.backgroundColor),
      customBackgroundConfigured: false,
      iconBackgroundColor:
          (isDarkModeEnabled ? NTP_DESIGN.iconDarkBackgroundColor :
                               NTP_DESIGN.iconBackgroundColor),
      isNtpBackgroundDark: isDarkModeEnabled,
      textColorLightRgba: [102, 102, 102, 255],
      textColorRgba:
          (isDarkModeEnabled ? NTP_DESIGN.titleColorAgainstDark :
                               NTP_DESIGN.titleColor),
      useTitleContainer: false,
      useWhiteAddIcon: isDarkModeEnabled,
      usingDefaultTheme: true,
    };
  }

  const info = window.chrome.embeddedSearch.newTabPage.ntpTheme;
  const preview = $(customize.IDS.CUSTOM_BG_PREVIEW);
  if (preview.dataset.hasPreview === 'true') {
    info.isNtpBackgroundDark = preview.dataset.hasImage === 'true';
    info.customBackgroundConfigured = preview.dataset.hasImage === 'true';
    info.alternateLogo = preview.dataset.hasImage === 'true';
    // backgroundImage is in the form: url("actual url"). Remove everything
    // except the actual url.
    info.imageUrl = preview.style.backgroundImage.slice(5, -2);

    if (preview.dataset.hasImage === 'true') {
      info.attribution1 = preview.dataset.attributionLine1;
      info.attribution2 = preview.dataset.attributionLine2;
      info.attributionActionUrl = preview.dataset.attributionActionUrl;
    }
  }
  return info;
}

/**
 * Determine whether dark chips should be used if dark mode is enabled. This is
 * is the case when dark mode is enabled and a background image (from a custom
 * background or user theme) is not set.
 *
 * @param {!Object} info Theme background information.
 * @return {boolean} Whether the chips should be dark.
 */
function getUseDarkChips(info) {
  return window.matchMedia('(prefers-color-scheme: dark)').matches &&
      !info.imageUrl;
}

/**
 * Event handler for messages from the most visited and edit custom link iframe.
 * @param {Event} event Event received.
 */
function handlePostMessage(event) {
  const cmd = event.data.cmd;
  const args = event.data;
  if (cmd === 'loaded') {
    tilesAreLoaded = true;
    if (configData.isGooglePage) {
      // Show search suggestions, promo, and the OGB if they were previously
      // hidden.
      if ($(IDS.SUGGESTIONS)) {
        $(IDS.SUGGESTIONS).style.visibility = 'visible';
      }
      if ($(IDS.PROMO)) {
        showPromoIfNotOverlappingAndTrackResizes();
      }
      if (customLinksEnabled()) {
        $(customize.IDS.CUSTOM_LINKS_RESTORE_DEFAULT)
            .classList.toggle(
                customize.CLASSES.OPTION_DISABLED, !args.showRestoreDefault);
        $(customize.IDS.CUSTOM_LINKS_RESTORE_DEFAULT).tabIndex =
            (args.showRestoreDefault ? 0 : -1);
      }
      $(IDS.OGB).classList.add(CLASSES.SHOW_ELEMENT);
    }
  } else if (cmd === 'tileBlacklisted') {
    if (customLinksEnabled()) {
      showNotification(configData.translatedStrings.linkRemovedMsg);
    } else {
      showNotification(
          configData.translatedStrings.thumbnailRemovedNotification);
    }
    lastBlacklistedTile = args.rid;

    ntpApiHandle.deleteMostVisitedItem(args.rid);
  } else if (cmd === 'resizeDoodle') {
    doodles.resizeDoodleHandler(args);
  } else if (cmd === 'startEditLink') {
    $(IDS.CUSTOM_LINKS_EDIT_IFRAME)
        .contentWindow.postMessage({cmd: 'linkData', rid: args.rid}, '*');
    // Small delay to allow the dialog to finish setting up before displaying.
    window.setTimeout(function() {
      $(IDS.CUSTOM_LINKS_EDIT_IFRAME_DIALOG).showModal();
    }, 10);
  } else if (cmd === 'closeDialog') {
    $(IDS.CUSTOM_LINKS_EDIT_IFRAME_DIALOG).close();
  } else if (cmd === 'focusMenu') {
    // Focus the edited tile's menu or the add shortcut tile after closing the
    // custom link edit dialog without saving.
    const iframe = $(IDS.TILES_IFRAME);
    if (iframe) {
      iframe.contentWindow.postMessage({cmd: 'focusMenu', rid: args.rid}, '*');
    }
  }
}

/** Hides the Most Visited pop-up notification. */
function hideNotification() {
  floatDownNotification(
      $(IDS.NOTIFICATION), $(IDS.NOTIFICATION_CONTAINER), /*showPromo=*/ true);
}

/**
 * Prepares the New Tab Page by adding listeners, the most visited pages
 * section, and Google-specific elements for a Google-provided page.
 */
function init() {
  // If an accessibility tool is in use, increase the time for which the
  // "tile was blacklisted" notification is shown.
  if (configData.isAccessibleBrowser) {
    document.body.style.setProperty('--mv-notice-time', '30s');
  }

  // Hide notifications after fade out, so we can't focus on links via keyboard.
  $(IDS.NOTIFICATION).addEventListener('transitionend', (event) => {
    if (event.propertyName === 'opacity') {
      hideNotification();
    }
  });

  $(IDS.NOTIFICATION_MESSAGE).textContent =
      configData.translatedStrings.thumbnailRemovedNotification;

  const undoLink = $(IDS.UNDO_LINK);
  undoLink.addEventListener('click', onUndo);
  registerKeyHandler(undoLink, ['Enter', ' '], onUndo);
  undoLink.textContent = configData.translatedStrings.undoThumbnailRemove;

  const restoreAllLink = $(IDS.RESTORE_ALL_LINK);
  restoreAllLink.addEventListener('click', onRestoreAll);
  registerKeyHandler(restoreAllLink, ['Enter', ' '], onRestoreAll);

  $(IDS.ATTRIBUTION_TEXT).textContent =
      configData.translatedStrings.attributionIntro;

  const embeddedSearchApiHandle = window.chrome.embeddedSearch;

  ntpApiHandle = embeddedSearchApiHandle.newTabPage;
  ntpApiHandle.onthemechange = onThemeChange;
  ntpApiHandle.onmostvisitedchange = onMostVisitedChange;

  renderTheme();

  window.matchMedia('(prefers-color-scheme: dark)').onchange = onThemeChange;

  const searchboxApiHandle = embeddedSearchApiHandle.searchBox;

  if (configData.isGooglePage) {
    requestAndInsertGoogleResources();
    animations.addRippleAnimations();

    ntpApiHandle.onaddcustomlinkdone = onAddCustomLinkDone;
    ntpApiHandle.onupdatecustomlinkdone = onUpdateCustomLinkDone;
    ntpApiHandle.ondeletecustomlinkdone = onDeleteCustomLinkDone;

    customize.init(showErrorNotification, hideNotification);

    if (configData.realboxEnabled) {
      const realboxEl = $(IDS.REALBOX);
      realboxEl.placeholder = configData.translatedStrings.searchboxPlaceholder;
      realboxEl.addEventListener('copy', onRealboxCutCopy);
      realboxEl.addEventListener('cut', onRealboxCutCopy);
      realboxEl.addEventListener('input', onRealboxInput);
      realboxEl.addEventListener('paste', onRealboxPaste);

      const realboxWrapper = $(IDS.REALBOX_INPUT_WRAPPER);
      realboxWrapper.addEventListener('focusin', onRealboxWrapperFocusIn);
      setRealboxWrapperListenForFocusOut(true);

      searchboxApiHandle.autocompleteresultchanged = autocompleteResultChanged;

      if (!iframesAndVoiceSearchDisabledForTesting) {
        speech.init(
            configData.googleBaseUrl, configData.translatedStrings,
            $(IDS.REALBOX_MICROPHONE), searchboxApiHandle);
      }

      utils.disableOutlineOnMouseClick($(IDS.REALBOX_MICROPHONE));
    } else {
      // Set up the fakebox (which only exists on the Google NTP).
      ntpApiHandle.oninputstart = onInputStart;
      ntpApiHandle.oninputcancel = onInputCancel;

      if (ntpApiHandle.isInputInProgress) {
        onInputStart();
      }

      $(IDS.FAKEBOX_TEXT).textContent =
          configData.translatedStrings.searchboxPlaceholder;

      if (!iframesAndVoiceSearchDisabledForTesting) {
        speech.init(
            configData.googleBaseUrl, configData.translatedStrings,
            $(IDS.FAKEBOX_MICROPHONE), searchboxApiHandle);
      }

      // Listener for updating the key capture state.
      document.body.onmousedown = function(event) {
        if (isFakeboxClick(event)) {
          searchboxApiHandle.startCapturingKeyStrokes();
        } else if (isFakeboxFocused()) {
          searchboxApiHandle.stopCapturingKeyStrokes();
        }
      };
      searchboxApiHandle.onkeycapturechange = function() {
        setFakeboxFocus(searchboxApiHandle.isKeyCaptureEnabled);
      };
      const inputbox = $(IDS.FAKEBOX_INPUT);
      inputbox.onpaste = function(event) {
        event.preventDefault();
        // Send pasted text to Omnibox.
        const text = event.clipboardData.getData('text/plain');
        if (text) {
          searchboxApiHandle.paste(text);
        }
      };
      inputbox.ondrop = function(event) {
        event.preventDefault();
        const text = event.dataTransfer.getData('text/plain');
        if (text) {
          searchboxApiHandle.paste(text);
        }
        setFakeboxDragFocus(false);
      };
      inputbox.ondragenter = function() {
        setFakeboxDragFocus(true);
      };
      inputbox.ondragleave = function() {
        setFakeboxDragFocus(false);
      };
      utils.disableOutlineOnMouseClick($(IDS.FAKEBOX_MICROPHONE));

      // Update the fakebox style to match the current key capturing state.
      setFakeboxFocus(searchboxApiHandle.isKeyCaptureEnabled);
      // Also tell the browser that we're capturing, otherwise it's possible
      // that both fakebox and Omnibox have visible focus at the same time, see
      // crbug.com/792850.
      if (searchboxApiHandle.isKeyCaptureEnabled) {
        searchboxApiHandle.startCapturingKeyStrokes();
      }
    }

    doodles.init();
  } else {
    document.body.classList.add(CLASSES.NON_GOOGLE_PAGE);
  }

  if (searchboxApiHandle.rtl) {
    $(IDS.NOTIFICATION).dir = 'rtl';
  }

  if (!iframesAndVoiceSearchDisabledForTesting) {
    createIframes();
  }

  utils.setPlatformClass(document.body);
  utils.disableOutlineOnMouseClick($(customize.IDS.EDIT_BG));
  document.documentElement.classList.add(CLASSES.INITED);
}

/**
 * Injects the One Google Bar into the page. Called asynchronously, so that it
 * doesn't block the main page load.
 */
function injectOneGoogleBar(ogb) {
  if (ogb.barHtml === '') {
    return;
  }

  const inHeadStyle = document.createElement('style');
  inHeadStyle.type = 'text/css';
  inHeadStyle.appendChild(document.createTextNode(ogb.inHeadStyle));
  document.head.appendChild(inHeadStyle);

  const inHeadScript = document.createElement('script');
  inHeadScript.type = 'text/javascript';
  inHeadScript.appendChild(document.createTextNode(ogb.inHeadScript));
  document.head.appendChild(inHeadScript);

  renderOneGoogleBarTheme();

  const ogElem = $('one-google');
  ogElem.innerHTML = ogb.barHtml;

  const afterBarScript = document.createElement('script');
  afterBarScript.type = 'text/javascript';
  afterBarScript.appendChild(document.createTextNode(ogb.afterBarScript));
  ogElem.parentNode.insertBefore(afterBarScript, ogElem.nextSibling);

  $('one-google-end-of-body').innerHTML = ogb.endOfBodyHtml;

  const endOfBodyScript = document.createElement('script');
  endOfBodyScript.type = 'text/javascript';
  endOfBodyScript.appendChild(document.createTextNode(ogb.endOfBodyScript));
  document.body.appendChild(endOfBodyScript);

  ntpApiHandle.logEvent(LOG_TYPE.NTP_ONE_GOOGLE_BAR_SHOWN);
}

/**
 * Injects a middle-slot promo into the page. Called asynchronously, so that it
 * doesn't block the main page load.
 */
function injectPromo(promo) {
  if (!promo.promoHtml) {
    if ($(IDS.PROMO)) {
      $(IDS.PROMO).remove();
    }
    return;
  }

  const promoContainer = document.createElement('div');
  promoContainer.id = IDS.PROMO;
  promoContainer.innerHTML += promo.promoHtml;
  $(IDS.NTP_CONTENTS).appendChild(promoContainer);

  if (promo.promoLogUrl) {
    navigator.sendBeacon(promo.promoLogUrl);
  }

  ntpApiHandle.logEvent(LOG_TYPE.NTP_MIDDLE_SLOT_PROMO_SHOWN);

  const link = promoContainer.querySelector('a');
  if (link) {
    link.onclick = function() {
      ntpApiHandle.logEvent(LOG_TYPE.NTP_MIDDLE_SLOT_PROMO_LINK_CLICKED);
    };
  }

  if (promo.promoId) {
    const icon = document.createElement('button');
    icon.classList.add(CLASSES.DISMISS_ICON);

    icon.title = configData.translatedStrings.dismissPromo;
    icon.onclick = e => {
      ntpApiHandle.blocklistPromo(promo.promoId);
      promoContainer.remove();
      window.removeEventListener('resize', showPromoIfNotOverlapping);
    };

    const dismiss = document.createElement('div');
    dismiss.classList.add(CLASSES.DISMISS_PROMO);
    dismiss.appendChild(icon);

    promoContainer.querySelector('div').appendChild(dismiss);
    promoContainer.classList.add(CLASSES.DISMISSABLE);
  }

  // The the MV tiles are already loaded show the promo immediately.
  if (tilesAreLoaded) {
    showPromoIfNotOverlappingAndTrackResizes();
  }
}

/**
 * Injects search suggestions into the page. Called *synchronously* with cached
 * data as not to cause shifting of the most visited tiles.
 */
function injectSearchSuggestions(suggestions) {
  if (suggestions.suggestionsHtml === '') {
    return;
  }

  const suggestionsContainer = document.createElement('div');
  suggestionsContainer.id = IDS.SUGGESTIONS;
  suggestionsContainer.style.visibility = 'hidden';
  suggestionsContainer.innerHTML += suggestions.suggestionsHtml;
  $(IDS.USER_CONTENT).insertAdjacentElement('afterbegin', suggestionsContainer);

  const endOfBodyScript = document.createElement('script');
  endOfBodyScript.type = 'text/javascript';
  endOfBodyScript.appendChild(
      document.createTextNode(suggestions.suggestionsEndOfBodyScript));
  document.body.appendChild(endOfBodyScript);
}

/**
 * @param {!Event} event The click event.
 * @return {boolean} True if the click occurred in an enabled fakebox.
 */
function isFakeboxClick(event) {
  return $(IDS.FAKEBOX).contains(/** @type HTMLElement */ (event.target)) &&
      !$(IDS.FAKEBOX_MICROPHONE)
           .contains(/** @type HTMLElement */ (event.target));
}

/** @return {boolean} True if the fakebox has focus. */
function isFakeboxFocused() {
  return document.body.classList.contains(CLASSES.FAKEBOX_FOCUS) ||
      document.body.classList.contains(CLASSES.FAKEBOX_DRAG_FOCUS);
}

/** @return {boolean} */
function isPromoOverlapping() {
  const MARGIN = 10;

  /**
   * @param {string} id
   * @return {DOMRect}
   */
  const rect = id => $(id).getBoundingClientRect();

  const promoRect = $(IDS.PROMO).querySelector('div').getBoundingClientRect();

  if (promoRect.top - MARGIN <= rect(IDS.USER_CONTENT).bottom) {
    return true;
  }

  if (window.chrome.embeddedSearch.searchBox.rtl) {
    const attributionRect = rect(IDS.ATTRIBUTION);
    if (attributionRect.width > 0 &&
        promoRect.left - MARGIN <= attributionRect.right) {
      return true;
    }

    const editBgRect = rect(customize.IDS.EDIT_BG);
    assert(editBgRect.width > 0);
    if (promoRect.left - 2 * MARGIN <= editBgRect.right) {
      return true;
    }

    const customAttributionsRect = rect(customize.IDS.ATTRIBUTIONS);
    if (customAttributionsRect.width > 0 &&
        promoRect.right + MARGIN >= customAttributionsRect.left) {
      return true;
    }
  } else {
    const customAttributionsRect = rect(customize.IDS.ATTRIBUTIONS);
    if (customAttributionsRect.width > 0 &&
        promoRect.left - MARGIN <= customAttributionsRect.right) {
      return true;
    }

    const editBgRect = rect(customize.IDS.EDIT_BG);
    assert(editBgRect.width > 0);
    if (promoRect.right + 2 * MARGIN >= editBgRect.left) {
      return true;
    }

    const attributionEl = $(IDS.ATTRIBUTION);
    const attributionRect = attributionEl.getBoundingClientRect();
    if (attributionRect.width > 0) {
      const attributionOnLeft =
          attributionEl.classList.contains(CLASSES.LEFT_ALIGN_ATTRIBUTION);
      if (attributionOnLeft) {
        if (promoRect.left - MARGIN <= attributionRect.right) {
          return true;
        }
      } else if (promoRect.right + MARGIN >= attributionRect.left) {
        return true;
      }
    }
  }

  return false;
}

/** Binds event listeners. */
function listen() {
  document.addEventListener('DOMContentLoaded', init);
}

/**
 * @param {!AutocompleteMatch} match
 * @param {!Event} e
 */
function navigateToMatch(match, e) {
  const line = autocompleteResult.matches.indexOf(match);
  assert(line >= 0);
  assert(lastRealboxFocusTime);
  window.chrome.embeddedSearch.searchBox.openAutocompleteMatch(
      line, match.destinationUrl, areRealboxMatchesVisible(),
      Date.now() - lastRealboxFocusTime, e.button || 0, e.altKey, e.ctrlKey,
      e.metaKey, e.shiftKey);
  e.preventDefault();
}

/**
 * Callback for embeddedSearch.newTabPage.onaddcustomlinkdone. Called when the
 * custom link was successfully added. Shows the "Shortcut added" notification.
 * @param {boolean} success True if the link was successfully added.
 */
function onAddCustomLinkDone(success) {
  if (success) {
    showNotification(configData.translatedStrings.linkAddedMsg);
  } else {
    showErrorNotification(
        configData.translatedStrings.linkCantCreate, null, null);
  }
  ntpApiHandle.logEvent(LOG_TYPE.NTP_CUSTOMIZE_SHORTCUT_DONE);
}

/**
 * Callback for embeddedSearch.newTabPage.ondeletecustomlinkdone. Called when
 * the custom link was successfully deleted. Shows the "Shortcut deleted"
 * notification.
 * @param {boolean} success True if the link was successfully deleted.
 */
function onDeleteCustomLinkDone(success) {
  if (success) {
    showNotification(configData.translatedStrings.linkRemovedMsg);
  } else {
    showErrorNotification(
        configData.translatedStrings.linkCantRemove, null, null);
  }
}

/**
 * Callback for embeddedSearch.newTabPage.oninputcancel. Restores the NTP
 * (re-enables the fakebox and unhides the logo.)
 */
function onInputCancel() {
  setFakeboxVisibility(true);
}

/**
 * Callback for embeddedSearch.newTabPage.oninputstart. Handles new input by
 * disposing the NTP, according to where the input was entered.
 */
function onInputStart() {
  if (isFakeboxFocused()) {
    setFakeboxFocus(false);
    setFakeboxDragFocus(false);
    setFakeboxVisibility(false);
  }
}

/**
 * Callback for embeddedSearch.newTabPage.onmostvisitedchange. Called when the
 * NTP tiles are updated.
 */
function onMostVisitedChange() {
  reloadTiles();
}

/** @param {!Event} e */
function onRealboxCutCopy(e) {
  const realboxEl = $(IDS.REALBOX);
  if (!realboxEl.value || realboxEl.selectionStart !== 0 ||
      realboxEl.selectionEnd !== realboxEl.value.length ||
      !autocompleteResult || autocompleteResult.matches.length === 0) {
    // Only handle cut/copy when realbox has content and it's all selected.
    return;
  }

  const matchEls = Array.from($(IDS.REALBOX_MATCHES).children);
  const selected = matchEls.findIndex(matchEl => {
    return matchEl.classList.contains(CLASSES.SELECTED);
  });

  const selectedMatch = autocompleteResult.matches[selected];
  if (selectedMatch && !selectedMatch.isSearchType) {
    e.clipboardData.setData('text/plain', selectedMatch.destinationUrl);
    e.preventDefault();
    if (e.type === 'cut') {
      realboxEl.value = '';
    }
  }
}

function onRealboxInput() {
  const realboxValue = $(IDS.REALBOX).value;

  updateRealboxOutput({inline: '', text: realboxValue});

  if (realboxValue.trim()) {
    queryAutocomplete(realboxValue);
  } else {
    setRealboxMatchesVisible(false);
    setRealboxWrapperListenForKeydown(false);
    clearAutocompleteMatches();
  }

  pastedInRealbox = false;
}

function onRealboxPaste() {
  pastedInRealbox = true;
}

/** @param {Event} e */
function onRealboxWrapperFocusIn(e) {
  if (e.target.matches(`#${IDS.REALBOX}`)) {
    if (!$(IDS.REALBOX).value) {
      queryAutocomplete('');
    }
    lastRealboxFocusTime = Date.now();
  } else if (e.target.matches(`#${IDS.REALBOX_MATCHES} *`)) {
    const target = /** @type {Element} */ (e.target);
    const link = findAncestor(target, el => el.nodeName === 'A');
    if (!link) {
      return;
    }
    const selectedIndex = selectMatchEl(link);
    // It doesn't really make sense to use fillFromMatch() here as the focus
    // change drops the selection (and is probably just noisy to
    // screenreaders).
    const newFill = autocompleteResult.matches[selectedIndex].fillIntoEdit;
    updateRealboxOutput({moveCursorToEnd: true, inline: '', text: newFill});
  }
}

/** @param {Event} e */
function onRealboxWrapperFocusOut(e) {
  // Hide the matches and stop autocomplete only when the focus goes outside of
  // the realbox wrapper.
  const relatedTarget = /** @type {Element} */ (e.relatedTarget);
  const realboxWrapper = $(IDS.REALBOX_INPUT_WRAPPER);
  if (!realboxWrapper.contains(relatedTarget)) {
    // Clear the input if it was empty when displaying the matches.
    if (lastQueriedInput === '') {
      updateRealboxOutput({inline: '', text: ''});
    }
    setRealboxMatchesVisible(false);

    // Stop autocomplete but leave (potentially stale) results and continue
    // listening for key presses. These stale results should never be shown, but
    // correspond to the potentially stale suggestion left in the realbox when
    // blurred. That stale result may be navigated to by focusing and pressing
    // Enter, and that match may be privileged, so we need to keep the data
    // around in order to ascertain this. If matches are reshown, fresh
    // autocomplete data will be fetched.
    window.chrome.embeddedSearch.searchBox.stopAutocomplete(
        /*clearResult=*/ false);
  }
}

/** @param {Event} e */
function onRealboxWrapperKeydown(e) {
  const key = e.key;

  const realboxEl = $(IDS.REALBOX);
  if (e.target === realboxEl && lastOutput.inline) {
    const realboxValue = realboxEl.value;
    const realboxSelected = realboxValue.substring(
        realboxEl.selectionStart, realboxEl.selectionEnd);
    // If the current state matches the default text + inline autocompletion
    // and the user types the next key in the inline autocompletion, just move
    // the selection and requery autocomplete. This is required to avoid flicker
    // while setting .value and .selection{Start,End} to keep typing smooth.
    if (realboxSelected === lastOutput.inline &&
        realboxValue === lastOutput.text + lastOutput.inline &&
        lastOutput.inline[0].toLocaleLowerCase() === key.toLocaleLowerCase()) {
      updateRealboxOutput({
        inline: lastOutput.inline.substr(1),
        text: assert(lastOutput.text + key),
      });
      queryAutocomplete(lastOutput.text);
      e.preventDefault();
      return;
    }
  }

  if (!REALBOX_KEYDOWN_HANDLED_KEYS.includes(key)) {
    return;
  }

  const realboxMatchesEl = $(IDS.REALBOX_MATCHES);
  const matchEls = Array.from(realboxMatchesEl.children);
  assert(matchEls.length > 0);
  const selected = matchEls.findIndex(matchEl => {
    return matchEl.classList.contains(CLASSES.SELECTED);
  });

  assert(autocompleteResult.matches.length === matchEls.length);

  if (key === 'Enter') {
    if (matchEls.concat(realboxEl).includes(e.target)) {
      if (lastQueriedInput === autocompleteResult.input) {
        if (autocompleteResult.matches[selected]) {
          navigateToMatch(autocompleteResult.matches[selected], e);
        }
      } else {
        // User typed and pressed 'Enter' too quickly. Ignore this for now
        // because the matches are stale. Navigate to the default match (if one
        // exists) once the up-to-date results arrive.
        enterWasPressed = true;
        lastEnterEvent = e;
        e.preventDefault();
      }
    }
    return;
  }

  if (!areRealboxMatchesVisible()) {
    if (key === 'ArrowUp' || key === 'ArrowDown') {
      const realboxValue = $(IDS.REALBOX).value;
      if (realboxValue.trim()) {
        queryAutocomplete(realboxValue);
      }
      e.preventDefault();
    }
    return;
  }

  if (key === 'Delete') {
    if (e.shiftKey && !e.altKey && !e.ctrlKey && !e.metaKey) {
      const selectedMatch = autocompleteResult.matches[selected];
      if (selectedMatch && selectedMatch.supportsDeletion) {
        window.chrome.embeddedSearch.searchBox.deleteAutocompleteMatch(
            selected);
        e.preventDefault();
      }
    }
    return;
  }

  if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
    return;
  }

  if (key === 'Escape' && selected === 0) {
    updateRealboxOutput({inline: '', text: ''});
    setRealboxMatchesVisible(false);
    setRealboxWrapperListenForKeydown(false);
    clearAutocompleteMatches();
    e.preventDefault();
    return;
  }

  /** @type {number} */ let newSelected;
  if (key === 'ArrowDown') {
    newSelected = selected + 1 < matchEls.length ? selected + 1 : 0;
  } else if (key === 'ArrowUp') {
    newSelected = selected - 1 >= 0 ? selected - 1 : matchEls.length - 1;
  } else if (key === 'Escape' || key === 'PageUp') {
    newSelected = 0;
  } else if (key === 'PageDown') {
    newSelected = matchEls.length - 1;
  }
  assert(selectMatchEl(assert(matchEls[newSelected])) >= 0);
  e.preventDefault();

  if (realboxMatchesEl.contains(document.activeElement)) {
    // Selection should match focus if focus is currently in the matches.
    matchEls[newSelected].focus();
  }

  const newMatch = autocompleteResult.matches[newSelected];
  const newFill = newMatch.fillIntoEdit;
  let newInline = '';
  if (newMatch.allowedToBeDefaultMatch) {
    newInline = newMatch.inlineAutocompletion;
  }
  const newFillEnd = newFill.length - newInline.length;
  updateRealboxOutput({
    moveCursorToEnd: true,
    inline: newInline,
    text: assert(newFill.substr(0, newFillEnd)),
  });
}

/**
 * Handles a click on the restore all notification link by hiding the
 * notification and informing Chrome.
 */
function onRestoreAll() {
  hideNotification();
  // Focus on the omnibox after the notification is hidden.
  window.chrome.embeddedSearch.searchBox.startCapturingKeyStrokes();
  if (customLinksEnabled()) {
    ntpApiHandle.resetCustomLinks();
  } else {
    ntpApiHandle.undoAllMostVisitedDeletions();
  }
}

/**
 * Callback for embeddedSearch.newTabPage.onthemechange.
 */
function onThemeChange() {
  renderTheme();
  renderOneGoogleBarTheme();
  sendNtpThemeToMostVisitedIframe();
  if ($(IDS.PROMO)) {
    showPromoIfNotOverlapping();
  }
}

/**
 * Handles a click on the notification undo link by hiding the notification and
 * informing Chrome.
 */
function onUndo() {
  hideNotification();
  // Focus on the omnibox after the notification is hidden.
  window.chrome.embeddedSearch.searchBox.startCapturingKeyStrokes();
  if (customLinksEnabled()) {
    ntpApiHandle.undoCustomLinkAction();
  } else if (lastBlacklistedTile != null) {
    ntpApiHandle.undoMostVisitedDeletion(lastBlacklistedTile);
  }
}

/**
 * Callback for embeddedSearch.newTabPage.onupdatecustomlinkdone. Called when
 * the custom link was successfully updated. Shows the "Shortcut edited"
 * notification.
 * @param {boolean} success True if the link was successfully updated.
 */
function onUpdateCustomLinkDone(success) {
  if (success) {
    showNotification(configData.translatedStrings.linkEditedMsg);
  } else {
    showErrorNotification(
        configData.translatedStrings.linkCantEdit, null, null);
  }
}

/**
 * Called by tests to override the executable timeout with a test timeout.
 * @param {!Function} timeout The timeout function. Requires a boolean param.
 */
function overrideExecutableTimeoutForTesting(timeout) {
  createExecutableTimeout = timeout;
}

/**
 * @param {string} input
 */
function queryAutocomplete(input) {
  lastQueriedInput = input;
  const preventInlineAutocomplete = isDeletingInput || pastedInRealbox ||
      $(IDS.REALBOX).selectionStart !== input.length;  // Caret not at the end.
  window.chrome.embeddedSearch.searchBox.queryAutocomplete(
      input, preventInlineAutocomplete);
}

/**
 * @param {!Element} element
 * @param {!Array<string>} keys
 * @param {!function(Event)} handler
 */
function registerKeyHandler(element, keys, handler) {
  element.addEventListener('keydown', e => {
    if (keys.includes(e.key)) {
      handler(e);
    }
  });
}

/**
 * Fetches new data (RIDs) from the embeddedSearch.newTabPage API and passes
 * them to the iframe.
 */
function reloadTiles() {
  // Don't attempt to load tiles if the MV data isn't available yet - this can
  // happen occasionally, see https://crbug.com/794942. In that case, we should
  // get an onMostVisitedChange call once they are available.
  // Note that MV data being available is different from having > 0 tiles. There
  // can legitimately be 0 tiles, e.g. if the user blacklisted them all.
  if (!ntpApiHandle.mostVisitedAvailable) {
    return;
  }

  const pages = ntpApiHandle.mostVisited;
  const cmds = [];
  const maxNumTiles = customLinksEnabled() ? MAX_NUM_TILES_CUSTOM_LINKS :
                                             MAX_NUM_TILES_MOST_VISITED;
  for (let i = 0; i < Math.min(maxNumTiles, pages.length); ++i) {
    cmds.push({cmd: 'tile', rid: pages[i].rid});
  }
  cmds.push({cmd: 'show'});

  $(IDS.MOST_VISITED).hidden =
      !chrome.embeddedSearch.newTabPage.areShortcutsVisible;

  const iframe = $(IDS.TILES_IFRAME);
  if (iframe) {
    iframe.contentWindow.postMessage(cmds, '*');
  }
}

/**
 * @param {!Array<!AutocompleteMatch>} matches
 */
function renderAutocompleteMatches(matches) {
  const realboxMatchesEl = document.createElement('div');
  realboxMatchesEl.setAttribute('role', 'listbox');

  for (let i = 0; i < matches.length; ++i) {
    const match = matches[i];
    const matchEl = document.createElement('a');
    matchEl.href = match.destinationUrl;
    matchEl.setAttribute('role', 'option');

    matchEl.onclick = matchEl.onauxclick = e => {
      if (!e.isTrusted || e.defaultPrevented || e.button > 1) {
        // Don't re-handle events dispatched from navigateToMatch(). Ignore
        // already handled events (i.e. remove button, defaultPrevented). Ignore
        // right clicks (but do handle middle click, button == 1).
        return;
      }
      const target = /** @type {Element} */ (e.target);
      const link = findAncestor(target, el => el.nodeName === 'A');
      if (link === matchEl) {
        navigateToMatch(match, e);
      }
    };

    if (match.isSearchType) {
      const icon = document.createElement('div');
      const isSearchHistory = SEARCH_HISTORY_MATCH_TYPES.includes(match.type);
      icon.classList.add(
          isSearchHistory ? CLASSES.CLOCK_ICON : CLASSES.SEARCH_ICON);
      matchEl.appendChild(icon);
    } else {
      const iconUrl = getIconUrl(match.destinationUrl);
      matchEl.style.backgroundImage = `url(${iconUrl})`;
    }

    const contentsEls =
        renderMatchClassifications(match.contents, match.contentsClass);
    const descriptionEls = [];
    const separatorEls = [];
    let separatorText = '';

    if (match.description) {
      descriptionEls.push(...renderMatchClassifications(
          match.description, match.descriptionClass));
      separatorText = configData.translatedStrings.realboxSeparator;
      separatorEls.push(document.createTextNode(separatorText));
    }

    const ariaLabel = match.swapContentsAndDescription ?
        match.description + separatorText + match.contents :
        match.contents + separatorText + match.description;
    matchEl.setAttribute('aria-label', ariaLabel);

    const layout = match.swapContentsAndDescription ?
        [descriptionEls, separatorEls, contentsEls] :
        [contentsEls, separatorEls, descriptionEls];

    for (const col of layout) {
      col.forEach(colEl => matchEl.appendChild(colEl));
    }

    if (match.supportsDeletion && configData.suggestionTransparencyEnabled) {
      const icon = document.createElement('button');
      icon.title = configData.translatedStrings.removeSuggestion;
      icon.classList.add(CLASSES.REMOVE_ICON);
      icon.onmousedown = e => {
        e.preventDefault();  // Stops default browser action (focus)
      };
      icon.onauxclick = e => {
        if (e.button == 1) {
          // Middle click on delete should just noop for now (matches omnibox).
          e.preventDefault();
        }
      };
      icon.onclick = e => {
        window.chrome.embeddedSearch.searchBox.deleteAutocompleteMatch(i);
        e.preventDefault();  // Stops default browser action (navigation)
      };

      const remove = document.createElement('div');
      remove.classList.add(CLASSES.REMOVE_MATCH);

      remove.appendChild(icon);
      matchEl.appendChild(remove);
      realboxMatchesEl.classList.add(CLASSES.REMOVABLE);
    }

    realboxMatchesEl.append(matchEl);
  }

  // When the matches are replaced, the focus gets dropped temporariliy as the
  // focused element is being deleted from the DOM. Stop listening to 'focusout'
  // event and retore it immediately after since we don't want to stop
  // autocomplete in those cases.
  setRealboxWrapperListenForFocusOut(false);

  $(IDS.REALBOX_MATCHES).remove();
  realboxMatchesEl.id = IDS.REALBOX_MATCHES;

  $(IDS.REALBOX_INPUT_WRAPPER).appendChild(realboxMatchesEl);

  setRealboxWrapperListenForFocusOut(true);

  const hasMatches = matches.length > 0;
  setRealboxMatchesVisible(hasMatches);
  setRealboxWrapperListenForKeydown(hasMatches);
}

/**
 * @param {string} text
 * @param {!Array<!ACMatchClassification>} classifications
 * @return {!Array<!Element>}
 */
function renderMatchClassifications(text, classifications) {
  return classifications.map((classification, i) => {
    const classes = classificationStyleToClasses(classification.style);
    const next = classifications[i + 1] || {offset: text.length};
    const classifiedText = text.substring(classification.offset, next.offset);
    return classes.length ? spanWithClasses(classifiedText, classes) :
                            document.createTextNode(classifiedText);
  });
}

/**
 * Updates the OneGoogleBar (if it is loaded) based on the current theme.
 * TODO(crbug.com/918582): Add support for OGB dark mode.
 */
function renderOneGoogleBarTheme() {
  if (!window.gbar) {
    return;
  }
  try {
    const oneGoogleBarApi = window.gbar.a;
    const oneGoogleBarPromise = oneGoogleBarApi.bf();
    oneGoogleBarPromise.then(function(oneGoogleBar) {
      const setForegroundStyle = oneGoogleBar.pc.bind(oneGoogleBar);
      const ntpTheme = getNtpTheme();
      setForegroundStyle(ntpTheme && ntpTheme.isNtpBackgroundDark ? 1 : 0);
    });
  } catch (err) {
    console.log('Failed setting OneGoogleBar theme:\n' + err);
  }
}

/** Updates the NTP based on the current theme. */
function renderTheme() {
  const theme = getNtpTheme();
  if (!theme) {
    return;
  }

  // Update dark mode styling.
  isDarkModeEnabled = window.matchMedia('(prefers-color-scheme: dark)').matches;
  document.body.classList.toggle('light-chip', !getUseDarkChips(theme));

  // Dark mode uses a white Google logo.
  const useWhiteLogo =
      theme.alternateLogo || (theme.usingDefaultTheme && isDarkModeEnabled);
  document.body.classList.toggle(CLASSES.ALTERNATE_LOGO, useWhiteLogo);

  if (theme.logoColor) {
    document.body.style.setProperty(
        '--logo-color', convertToRGBAColor(theme.logoColor));
  }

  // The doodle notifier should be shown for non-default backgrounds. This
  // includes non-white backgrounds, excluding dark mode gray if dark mode is
  // enabled.
  const isDefaultBackground = theme.usingDefaultTheme && !theme.imageUrl;
  document.body.classList.toggle(CLASSES.USE_NOTIFIER, !isDefaultBackground);

  // If a custom background has been selected the image will be applied to the
  // custom-background element instead of the body.
  if (!theme.customBackgroundConfigured) {
    document.body.style.background = [
      convertToRGBAColor(theme.backgroundColorRgba), theme.imageUrl,
      theme.imageTiling, theme.imageHorizontalAlignment,
      theme.imageVerticalAlignment
    ].join(' ').trim();

    $(IDS.CUSTOM_BG).style.opacity = '0';
    $(IDS.CUSTOM_BG).style.backgroundImage = '';
    customize.clearAttribution();
  } else {
    // Do anything only if the custom background changed.
    const imageUrl = assert(theme.imageUrl);
    if (!$(IDS.CUSTOM_BG).style.backgroundImage.includes(imageUrl)) {
      const imageWithOverlay = [
        customize.CUSTOM_BACKGROUND_OVERLAY, 'url(' + imageUrl + ')'
      ].join(',').trim();
      // If the theme update is because of uploading a local image then we
      // should close the customization menu. Closing the menu before the image
      // is selected doesn't look good.
      const localImageFileName = 'background.jpg';
      if (!configData.richerPicker &&
          imageWithOverlay.includes(localImageFileName)) {
        customize.closeCustomizationDialog();
      }
      // |image| and |imageWithOverlay| use the same url as their source.
      // Waiting to display the custom background until |image| is fully
      // loaded ensures that |imageWithOverlay| is also loaded.
      $(IDS.CUSTOM_BG).style.backgroundImage = imageWithOverlay;
      const image = new Image();
      image.onload = function() {
        $(IDS.CUSTOM_BG).style.opacity = '1';
      };
      image.src = imageUrl;

      customize.clearAttribution();
      customize.setAttribution(
          '' + theme.attribution1, '' + theme.attribution2,
          '' + theme.attributionActionUrl);
    }
  }

  updateThemeAttribution(theme.attributionUrl, theme.imageHorizontalAlignment);
  setCustomThemeStyle(theme);

  $(customize.IDS.RESTORE_DEFAULT)
      .classList.toggle(
          customize.CLASSES.OPTION_DISABLED, !theme.customBackgroundConfigured);
  $(customize.IDS.RESTORE_DEFAULT).tabIndex =
      (theme.customBackgroundConfigured ? 0 : -1);

  $(customize.IDS.EDIT_BG)
      .classList.toggle(
          CLASSES.ENTRY_POINT_ENHANCED, !theme.customBackgroundConfigured);

  if (configData.isGooglePage) {
    customize.onThemeChange();
  }

  if (configData.realboxMatchOmniboxTheme) {
    // TODO(dbeam): actually get these from theme service.
    const removeMatchHovered = assert(theme.searchBox.icon).slice();
    removeMatchHovered[3] = .08 * 255;

    const removeMatchFocused = theme.searchBox.icon.slice();
    removeMatchFocused[3] = .16 * 255;

    /**
     * @param {string} varName
     * @param {!Array<number>|undefined} colors
     */
    const setCssVar = (varName, colors) => {
      const rgba = convertToRGBAColor(assert(colors));
      document.body.style.setProperty(`--${varName}`, rgba);
    };

    setCssVar('search-box-bg', theme.searchBox.bg);
    setCssVar('search-box-icon', theme.searchBox.icon);
    setCssVar('search-box-placeholder', theme.searchBox.placeholder);
    setCssVar('search-box-results-bg', theme.searchBox.resultsBg);
    setCssVar(
        'search-box-results-bg-hovered', theme.searchBox.resultsBgHovered);
    setCssVar(
        'search-box-results-bg-selected', theme.searchBox.resultsBgSelected);
    setCssVar('search-box-results-dim', theme.searchBox.resultsDim);
    setCssVar('search-box-results-text', theme.searchBox.resultsText);
    setCssVar('search-box-results-url', theme.searchBox.resultsUrl);
    setCssVar('search-box-text', theme.searchBox.text);
    setCssVar('remove-match-hovered', removeMatchHovered);
    setCssVar('remove-match-focused', removeMatchFocused);
  }
}

/**
 * Request data for search suggestions, promo, and the OGB. Insert it into
 * the page once it's available. For search suggestions this should be almost
 * immediately as cached data is always used. Promos and the OGB may need
 * to wait for the asynchronous network request to complete.
 */
function requestAndInsertGoogleResources() {
  if (!$('search-suggestions-loader')) {
    const ssScript = document.createElement('script');
    ssScript.id = 'search-suggestions-loader';
    ssScript.src = 'chrome-search://local-ntp/search-suggestions.js';
    ssScript.async = false;
    document.body.appendChild(ssScript);
    ssScript.onload = function() {
      injectSearchSuggestions(searchSuggestions);
    };
  }
  if (!$('one-google-loader')) {
    // Load the OneGoogleBar script. It'll create a global variable |og| which
    // is a JSON object corresponding to the native OneGoogleBarData type.
    const ogScript = document.createElement('script');
    ogScript.id = 'one-google-loader';
    ogScript.src = 'chrome-search://local-ntp/one-google.js';
    document.body.appendChild(ogScript);
    ogScript.onload = function() {
      injectOneGoogleBar(og);
    };
  }
  if (!$('promo-loader')) {
    const promoScript = document.createElement('script');
    promoScript.id = 'promo-loader';
    promoScript.src = 'chrome-search://local-ntp/promo.js';
    document.body.appendChild(promoScript);
    promoScript.onload = function() {
      injectPromo(promo);
    };
  }
}

/**
 * @param {!EventTarget} elToSelect
 * @return {number} The selected index (if found); else -1.
 */
function selectMatchEl(elToSelect) {
  let selectedIndex = -1;
  Array.from($(IDS.REALBOX_MATCHES).children).forEach((matchEl, i) => {
    const found = matchEl === elToSelect;
    matchEl.classList.toggle(CLASSES.SELECTED, found);
    matchEl.setAttribute('aria-selected', found);
    if (found) {
      selectedIndex = i;
    }
  });

  const matches = autocompleteResult ? autocompleteResult.matches : [];
  setRealboxIcon(matches[selectedIndex]);

  return selectedIndex;
}

/** Sends the current theme info to the most visited iframe. */
function sendNtpThemeToMostVisitedIframe() {
  const info = getNtpTheme();
  if (!info) {
    return;
  }

  const message = {cmd: 'updateTheme'};
  message.isThemeDark = info.isNtpBackgroundDark;
  message.customBackground = info.customBackgroundConfigured;
  message.useTitleContainer = info.useTitleContainer;
  message.iconBackgroundColor = convertToRGBAColor(info.iconBackgroundColor);
  message.useWhiteAddIcon = info.useWhiteAddIcon;

  let titleColor = NTP_DESIGN.titleColor;
  if (!info.usingDefaultTheme && info.textColorRgba) {
    titleColor = info.textColorRgba;
  } else if (info.isNtpBackgroundDark) {
    titleColor = NTP_DESIGN.titleColorAgainstDark;
  }
  message.tileTitleColor = convertToRGBAColor(titleColor);

  const iframe = $(IDS.TILES_IFRAME);
  if (iframe) {
    iframe.contentWindow.postMessage(message, '*');
  }
}

/**
 * Sets the visibility of the theme attribution.
 * @param {boolean} show True to show the attribution.
 */
function setAttributionVisibility(show) {
  $(IDS.ATTRIBUTION).style.display = show ? '' : 'none';
}

/**
 * Updates the NTP style according to theme.
 * @param {Object} ntpTheme The information about the theme.
 */
function setCustomThemeStyle(ntpTheme) {
  let textColor = '';
  let textColorLight = '';
  let mvxFilter = '';
  if (!ntpTheme.usingDefaultTheme) {
    textColor = convertToRGBAColor(ntpTheme.textColorRgba);
    textColorLight = convertToRGBAColor(ntpTheme.textColorLightRgba);
    mvxFilter = 'drop-shadow(0 0 0 ' + textColor + ')';
  }

  document.body.style.setProperty('--text-color', textColor);
  document.body.style.setProperty('--text-color-light', textColorLight);
}

/**
 * @param {boolean} focus True to show a dragging focus on the fakebox.
 */
function setFakeboxDragFocus(focus) {
  document.body.classList.toggle(CLASSES.FAKEBOX_DRAG_FOCUS, focus);
}

/**
 * @param {boolean} focus True to focus the fakebox.
 */
function setFakeboxFocus(focus) {
  document.body.classList.toggle(CLASSES.FAKEBOX_FOCUS, focus);
}

/**
 * @param {boolean} show True to show the fakebox and logo.
 */
function setFakeboxVisibility(show) {
  document.body.classList.toggle(CLASSES.HIDE_FAKEBOX, !show);
}

/** @param {!AutocompleteMatch|undefined} match */
function setRealboxIcon(match) {
  const showIcon = match && !match.isSearchType;

  const realboxIcon = $(IDS.REALBOX_ICON);
  realboxIcon.style.webkitMask = showIcon ? 'none' : '';
  realboxIcon.style.backgroundColor = showIcon ? 'transparent' : '';
  realboxIcon.style.backgroundImage =
      showIcon ? `url(${getIconUrl(match.destinationUrl)})` : '';
}

/** @param {boolean} visible */
function setRealboxMatchesVisible(visible) {
  $(IDS.REALBOX_INPUT_WRAPPER).classList.toggle(CLASSES.SHOW_MATCHES, visible);
}

/** @param {boolean} listen */
function setRealboxWrapperListenForFocusOut(listen) {
  const realboxWrapper = $(IDS.REALBOX_INPUT_WRAPPER);
  if (listen) {
    realboxWrapper.addEventListener('focusout', onRealboxWrapperFocusOut);
  } else {
    realboxWrapper.removeEventListener('focusout', onRealboxWrapperFocusOut);
  }
}

/** @param {boolean} listen */
function setRealboxWrapperListenForKeydown(listen) {
  const realboxWrapper = $(IDS.REALBOX_INPUT_WRAPPER);
  if (listen) {
    realboxWrapper.addEventListener('keydown', onRealboxWrapperKeydown);
  } else {
    realboxWrapper.removeEventListener('keydown', onRealboxWrapperKeydown);
  }
}

/**
 * Shows the error pop-up notification and triggers a delay to hide it. The
 * message will be set to |msg|. If |linkName| and |linkOnClick| are present,
 * shows an error link with text set to |linkName| and onclick handled by
 * |linkOnClick|.
 * @param {string} msg The notification message.
 * @param {?string} linkName The error link text.
 * @param {?Function} linkOnClick The error link onclick handler.
 */
function showErrorNotification(msg, linkName, linkOnClick) {
  const notification = $(IDS.ERROR_NOTIFICATION);
  $(IDS.ERROR_NOTIFICATION_MSG).textContent = msg;
  if (linkName && linkOnClick) {
    const notificationLink = $(IDS.ERROR_NOTIFICATION_LINK);
    notificationLink.textContent = linkName;
    notificationLink.onclick = linkOnClick;
    notification.classList.add(CLASSES.HAS_LINK);
  } else {
    notification.classList.remove(CLASSES.HAS_LINK);
  }
  floatUpNotification(notification, $(IDS.ERROR_NOTIFICATION_CONTAINER));
}

/**
 * Shows the Most Visited pop-up notification and triggers a delay to hide it.
 * The message will be set to |msg|.
 * @param {string} msg The notification message.
 */
function showNotification(msg) {
  $(IDS.NOTIFICATION_MESSAGE).textContent = msg;
  $(IDS.RESTORE_ALL_LINK).textContent = customLinksEnabled() ?
      configData.translatedStrings.restoreDefaultLinks :
      configData.translatedStrings.restoreThumbnailsShort;
  floatUpNotification($(IDS.NOTIFICATION), $(IDS.NOTIFICATION_CONTAINER));
  $(IDS.UNDO_LINK).focus();
}

function showPromoIfNotOverlapping() {
  $(IDS.PROMO).style.visibility = isPromoOverlapping() ? 'hidden' : 'visible';
}

function showPromoIfNotOverlappingAndTrackResizes() {
  showPromoIfNotOverlapping();
  // The removal before addition is to ensure only 1 event listener is ever
  // active at the same time.
  window.removeEventListener('resize', showPromoIfNotOverlapping);
  window.addEventListener('resize', showPromoIfNotOverlapping);
}

/**
 * @param {string} text
 * @param {!Array<string>} classes
 * @return {!Element}
 */
function spanWithClasses(text, classes) {
  const span = document.createElement('span');
  span.classList.add(...classes);
  span.textContent = text;
  return span;
}

/** @param {!RealboxOutputUpdate} update */
function updateRealboxOutput(update) {
  assert(Object.keys(update).length > 0);

  const realboxEl = $(IDS.REALBOX);
  const newOutput =
      /** @type {!RealboxOutput} */ (Object.assign({}, lastOutput, update));
  const newAll = newOutput.text + newOutput.inline;

  const inlineDiffers = newOutput.inline !== lastOutput.inline;
  const preserveSelection = !inlineDiffers && !update.moveCursorToEnd;
  let needsSelectionUpdate = !preserveSelection;

  const oldSelectionStart = realboxEl.selectionStart;

  if (newAll !== realboxEl.value) {
    realboxEl.value = newAll;
    needsSelectionUpdate = true;  // Setting .value blows away selection.
  }

  if (newAll.trim() && needsSelectionUpdate) {
    realboxEl.selectionStart =
        preserveSelection ? oldSelectionStart : newOutput.text.length;
    // If the selection shouldn't be preserved, set the selection end to the
    // same as the selection start (i.e. drop selection but move cursor).
    realboxEl.selectionEnd =
        preserveSelection ? oldSelectionStart : newAll.length;
  }

  isDeletingInput = userDeletedOutput(lastOutput, newOutput);
  lastOutput = newOutput;
}

/**
 * Renders the attribution if the URL is present, otherwise hides it.
 * @param {string|undefined} url The URL of the attribution image, if any.
 * @param {string|undefined} themeBackgroundAlignment The alignment of the theme
 *     background image. This is used to compute the attribution's alignment.
 */
function updateThemeAttribution(url, themeBackgroundAlignment) {
  if (!url) {
    setAttributionVisibility(false);
    return;
  }

  const attribution = $(IDS.ATTRIBUTION);
  let attributionImage = attribution.querySelector('img');
  if (!attributionImage) {
    attributionImage = new Image();
    attribution.appendChild(attributionImage);
  }
  attributionImage.style.content = url;

  // To avoid conflicts, place the attribution on the left for themes that
  // right align their background images.
  attribution.classList.toggle(
      CLASSES.LEFT_ALIGN_ATTRIBUTION, themeBackgroundAlignment == 'right');
  setAttributionVisibility(true);
}

/**
 * @param {!RealboxOutput} before
 * @param {!RealboxOutput} after
 * @return {boolean}
 */
function userDeletedOutput(before, after) {
  const beforeAll = before.text + before.inline;
  const afterAll = after.text + after.inline;
  return beforeAll.length > afterAll.length && beforeAll.startsWith(afterAll);
}

return {
  init: init,  // Exposed for testing.
  listen: listen,
  disableIframesAndVoiceSearchForTesting:
      disableIframesAndVoiceSearchForTesting,
  overrideExecutableTimeoutForTesting: overrideExecutableTimeoutForTesting
};
}

if (!window.localNTPUnitTest) {
  LocalNTP().listen();
}
/* Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

/**
 * Enum for classnames.
 * @enum {string}
 * @const
 */
const CLASSES = {
  MAC: 'mac',                            // Applies MacOS specific properties.
  WIN: 'win',                            // Applies Windows specific properties.
  MOUSE_NAVIGATION: 'mouse-navigation',  // Removes blue focus ring.
};

/**
 * Alias for document.getElementById.
 * @param {string} id The ID of the element to find.
 * @return {Element} The found element or null if not found.
 */
function $(id) {
  // eslint-disable-next-line no-restricted-properties
  return document.getElementById(id);
}

/**
 * Contains common functions used in the main NTP page and its iframes.
 */
const utils = {};

/**
 * Disables the focus outline for |element| on mousedown.
 * @param {Element} element The element to remove the focus outline from.
 */
utils.disableOutlineOnMouseClick = function(element) {
  element.addEventListener('mousedown', () => {
    element.classList.add(CLASSES.MOUSE_NAVIGATION);
    element.addEventListener('blur', () => {
      element.classList.remove(CLASSES.MOUSE_NAVIGATION);
    }, {once: true});
  });
};

/**
 * Returns whether the given URL has a known, safe scheme.
 * @param {string} url URL to check.
 */
utils.isSchemeAllowed = function(url) {
  return url.startsWith('http://') || url.startsWith('https://') ||
      url.startsWith('ftp://') || url.startsWith('chrome-extension://');
};

/**
 * Sets CSS class for |element| corresponding to the current platform.
 * @param {Element} element The element to set the current platform.
 */
utils.setPlatformClass = function(element) {
  element.classList.toggle(
      CLASSES.WIN, navigator.userAgent.indexOf('Windows') > -1);
  element.classList.toggle(
      CLASSES.MAC, navigator.userAgent.indexOf('Mac') > -1);
};
/* Copyright 2017 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

/* This template provides the styles used by the Speech feature. There is one UI
 * used for on the local NTP: the Full Page UI ("overlay") that takes over the
 * whole page.
 *
 * This mode also has a hidden and a visible state to allow for show and hide
 * animations. As such, there are 2 different UIs, specified by different
 * modifier classes (the class is applied to the Element with id=voice-overlay):
 *   - Hidden in the Full Page view (parent class: overlay-hidden).
 *   - Visible in the Full Page view (parent class: overlay).
 *
 * In addition, speech recognition can be in one of 5 different states that can
 * manifest in each of the UIs (the corresponding class names are applied to the
 * element with id=outer):
 *   - Listening for audio (parent class: voice-ml).
 *   - Receiving speech (parent class: voice-rs).
 *   - Error received (parent class: voice-er).
 *   - Inactive (no parent class).
 *
 * For details, see go/gws-speech-design and go/local-ntp-voice-search. */

/* Color constants. */
:root {
  --dark_red: rgb(205, 0, 0);
  --grey: #777;
  --light_grey: #eee;
  --light_red: rgb(255, 68, 68);

  --active_icon_color: white;
  --button_shadow: rgba(0, 0, 0, .1);
  --inactive_icon_color: #999;
  --level_animation_color: #dbdbdb;
  --listening_icon_color: var(--light_red);
  --text_link_color: rgb(17, 85, 204);
}

/* The dialog container for the background element. */
.overlay-dialog {
  background: transparent;
  border: none;
  height: 100%;
  left: 0;
  margin: auto;
  padding: 0;
  position: absolute;
  right: 0;
  top: 0;
  width: 100%;
}

.overlay-dialog::backdrop {
  background-color: white;
}

@media (prefers-color-scheme: dark) {
  .overlay-dialog::backdrop {
    /* Equivalent to --dark-mode-dialog-rgb. CSS variables cannot be used in
     * pseudo elements. */
    background-color: rgb(41, 42, 45);
  }
}

/* The background element. */
.overlay,
.overlay-hidden {
  background: white;
  opacity: 0;
  text-align: start;
  transition: visibility 0s linear 218ms, background-color 218ms;
  visibility: hidden;
  z-index: 10000;
}

@media (prefers-color-scheme: dark) {
  .overlay,
  .overlay-hidden {
    background-color: rgb(var(--dark-mode-dialog-rgb));
  }
}

/* Full Page visible style for the background element. */
.overlay {
  opacity: 1;
  transition-delay: 0s;
  visibility: visible;
}

/* The close 'x' button. */
.close-button {
  color: black;
  cursor: pointer;
  font-size: 26px;
  height: 11px;
  line-height: 15px;
  margin: 15px;
  opacity: .54;
  padding: 0;
  position: fixed;
  right: 0;
  top: 0;
  width: 15px;
  z-index: 1;
}

html[dir=rtl] .close-button {
  left: 0;
  right: auto;
}

@media (prefers-color-scheme: dark) {
  .close-button {
    color: rgb(var(--GG200-rgb));
  }
}

.close-button:hover {
  opacity: .66;
}

.close-button:active {
  opacity: .78;
}

/* The vertical positioning container. */
.outer {
  display: block;
  height: 42px;
  pointer-events: none;
  position: absolute;
}

/* Full Page visible and hidden state of the positioning container. */
.overlay .outer,
.overlay-hidden .outer {
  margin: auto;
  margin-top: 312px;
  max-width: 572px;
  min-width: 534px;
  padding: 0 223px;
  position: relative;
  top: 0;
}

/* Style for the inner container used for horizontal positioning. */
.inner-container {
  height: 100%;
  opacity: .1;
  pointer-events: none;
  transition: opacity 318ms ease-in;
  width: 100%;
}

.voice-ml .inner-container,
.voice-rs .inner-container,
.voice-er .inner-container {
  opacity: 1;
  transition: opacity 0s;
}

/* MICROPHONE BUTTON */
/* Button with microphone icon in center from which pulses and vibrations
 * emanate. */
.button {
  background-color: white;
  border: 1px solid var(--light_grey);
  border-radius: 100%;
  bottom: 0;
  box-shadow: 0 2px 5px var(--button_shadow);
  cursor: pointer;
  display: inline-block;
  left: 0;
  opacity: 0;
  pointer-events: none;
  position: absolute;
  right: 0;
  top: 0;
  transition: background-color 218ms, border 218ms, box-shadow 218ms;
}

@media (prefers-color-scheme: dark) {
  .button {
    background-color: rgb(var(--GG900-rgb));
    border-color: rgba(0, 0, 0, .1);
    box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .3),
                0 4px 8px 3px rgba(0, 0, 0, .15);
  }
}

/* Button state when speech recognition is inactive. */
.overlay-hidden .button {
  opacity: 0;
  pointer-events: none;
  position: absolute;
  transition-delay: 0s;
}

/* Button state when speech recognition is active. */
.overlay .button {
  opacity: 1;
  pointer-events: auto;
  position: absolute;
  transition-delay: 0s;
}

/* Button state when speech input is being received by the microphone. */
.voice-rs .button {
  background-color: var(--light_red);
  border: 0;
  box-shadow: none;
}

@media (prefers-color-scheme: dark) {
  .voice-rs .button {
    background-color: rgb(var(--GR300-rgb));
  }
}

/* Vibrating input volume level. */
.level {
  background-color: var(--level_animation_color);
  border-radius: 100%;
  display: inline-block;
  height: 301px;
  left: -69px;
  opacity: 1;
  pointer-events: none;
  position: absolute;
  top: -69px;
  transform: scale(.01);
  transition: opacity 218ms;
  width: 301px;
}

@media (prefers-color-scheme: dark) {
  .level {
    background-color: rgb(var(--GG700-rgb));
  }
}

/* Container for scaling and positioning of the button. */
.button-container {
  float: right;
  pointer-events: none;
  position: relative;
  transition: transform 218ms, opacity 218ms ease-in;
}

html[dir=rtl] .button-container {
  float: left;
}

/* Common styles applied to the button-container. */
.overlay .button-container,
.overlay-hidden .button-container {
  height: 165px;
  right: -70px;
  top: -70px;
  width: 165px;
}

html[dir=rtl] .overlay .button-container,
html[dir=rtl] .overlay-hidden .button-container {
  left: -70px;
  right: auto;
}

/* Container style when speech recognition is inactive. */
.overlay-hidden .button-container {
  transform: scale(.1);
}

/* Style applied to the button when clicked in the 'receiving audio' state. */
.voice-rs .button:active {
  background-color: var(--dark_red);
}

@media (prefers-color-scheme: dark) {
  .voice-rs .button:active {
    background-color: rgb(223, 128, 119);
  }
}

/* Style applied to the button when clicked. */
.button:active {
  background-color: var(--light_grey);
}

@media (prefers-color-scheme: dark) {
  .button:active {
    background-color: rgb(53, 54, 57);
  }
}

/* TEXT */
/* Classes:
 *   - voice-text - Text area style class
 *   - voice-text-2l - 2 line style class
 *   - voice-text-3l - 3 line style class
 *   - voice-text-4l - 4 line style class
 *   - voice-text-5l - 5 line style class */

/* Styles applied to the positioning text-container element. */
#text-container {
  pointer-events: none;
}

/* Full Page UI style for the text-container. */
.overlay #text-container,
.overlay-hidden #text-container {
  position: absolute;
}

/* This class is used to specify the speech recognition text formatting. */
.voice-text {
  font-weight: normal;
  line-height: 1.2;
  opacity: 0;
  pointer-events: none;
  position: absolute;
  text-align: start;
  transition: opacity 100ms ease-in, margin-inline-start 500ms ease-in,
              top 0s linear 218ms;
}

/* Recognition results text hidden in the Full Page UI. */
.overlay-hidden .voice-text {
  margin-inline-start: 44px;
}

html[dir=rtl] .overlay-hidden .voice-text {
  margin-inline-end: 44px;
  margin-inline-start: 0;
}

/* Styles applied to the text output elements. Common style for the text area
 * class for the full Page UI. To vertically center the text as longer queries
 * are wrapped, the 'top' position is specified in em here and below. */
.overlay .voice-text,
.overlay-hidden .voice-text {
  font-size: 32px;
  left: -44px;
  top: -.2em;
  width: 460px;
}

html[dir=rtl] .overlay .voice-text,
html[dir=rtl] .overlay-hidden .voice-text {
  left: auto;
  right: -44px;
}

/* Common style for when the text areas are made visible. */
.overlay .voice-text {
  margin-inline-start: 0;
  opacity: 1;
  transition: opacity 500ms ease-out, margin-inline-start 500ms ease-out;
}

html[dir=rtl] .overlay .voice-text {
  margin-inline-end: 0;
  margin-inline-start: auto;
}

/* Interim (low confidence) text. */
#voice-text-i {
  color: var(--grey);
}

@media (prefers-color-scheme: dark) {
  #voice-text-i {
    color: rgb(var(--GG500-rgb));
  }
}

/* Final (high confidence) text. */
#voice-text-f {
  color: black;
}

@media (prefers-color-scheme: dark) {
  #voice-text-f {
    color: rgb(var(--GG200-rgb));
  }
}

/* Text area links. */
.voice-text-link {
  color: var(--text_link_color);
  cursor: pointer;
  font-size: 18px;
  font-weight: 500;
  pointer-events: auto;
  text-decoration: underline;
}

@media (prefers-color-scheme: dark) {
  .voice-text-link {
    color: rgb(var(--GB300-rgb));
  }
}

/* Range of motion for the typing animation. */
@keyframes type {
    from {
      width: 0;
    }
    to {
      width: 460px;
    }
}

/* Style to simulate typing the "Listening..." text. */
.listening-animation {
  animation: type 900ms steps(30, end);
  overflow: hidden;
  white-space: nowrap;
}

/* Styles applied to simulate vertical scrolling. Common webkit transition
 * style for vertical text scrolling. */
.voice-text-2l.voice-text,
.voice-text-3l.voice-text,
.voice-text-4l.voice-text {
  transition: top 218ms ease-out;
}

/* When the text height is two lines. */
.voice-text-2l.voice-text {
  top: -.6em;
}

/* When the text height is three lines. */
.voice-text-3l.voice-text {
  top: -1.3em;
}

/* When the text height is four lines. */
.voice-text-4l.voice-text {
  top: -1.7em;
}

/* When the text height is more than five lines, shift the text up. */
.voice-text-5l.voice-text {
  top: -2.5em;
}

/* MICROPHONE ICON */
/* The microphone icon is made up of 4 parts:
 *   - the audio receiver,
 *   - the shell that surrounds the lower half of the audio receiver,
 *   - the stem that holds up the shell and the audio receiver,
 *   - and a wrapper that positions the shell and stem.
 *
 *     /===\
 *     |   |  <==== Audio receiver.
 *     |   |
 *  \  \===/  / <== Shell.
 *   \_______/
 *       |
 *       |  <====== Stem. */

/* Container element for microphone icon. */
.microphone {
  direction: ltr;
  height: 87px;
  left: 43px;
  pointer-events: none;
  position: absolute;
  top: 47px;
  width: 42px;
}

/* Part 1 of CSS-only microphone icon: the audio receiver.
 * Positioned in the center. */
.receiver {
  background-color: var(--inactive_icon_color);
  border-radius: 30px;
  height: 46px;
  left: 25px;
  pointer-events: none;
  position: absolute;
  width: 24px;
}

@media (prefers-color-scheme: dark) {
  .receiver {
    background-color: rgb(var(--GG500-rgb));
  }
}

/* Part 2 of CSS-only microphone icon: the shell and stem wrapper element.
 * Positioned below the audio receiver element. */
.wrapper {
  bottom: 0;
  height: 53px;
  left: 11px;
  overflow: hidden;
  pointer-events: none;
  position: absolute;
  width: 52px;
}

/* Part 3 of CSS-only microphone icon: the stem that supports the shell.
 * Positioned below the audio receiver element and the shell element. */
.stem {
  background-color: var(--inactive_icon_color);
  bottom: 14px;
  height: 14px;
  left: 22px;
  pointer-events: none;
  position: absolute;
  width: 9px;
  z-index: 1; /* z-index is only used to specify position relative to stem. */
}

@media (prefers-color-scheme: dark) {
  .stem {
    background-color: rgb(var(--GG500-rgb));
  }
}

/* Part 4 of CSS-only microphone icon: shell that holds the receiver.
 * Positioned below the audio receiver element and above the stem element. */
.shell {
  border: 7px solid var(--inactive_icon_color);
  border-radius: 28px;
  bottom: 27px;
  height: 57px;
  pointer-events: none;
  position: absolute;
  width: 38px;
  z-index: 0; /* z-index is only used to specify position relative to stem. */
}

@media (prefers-color-scheme: dark) {
  .shell {
    border-color: rgb(var(--GG500-rgb));
  }
}

/* The .voice-ml style is applied when the UI is in
 * the 'listening for audio' state. */
.voice-ml .receiver,
.voice-ml .stem {
  background-color: var(--listening_icon_color);
}

@media (prefers-color-scheme: dark) {
  .voice-ml .receiver,
  .voice-ml .stem {
    background-color: rgb(var(--GR300-rgb));
  }
}

.voice-ml .shell {
  border-color: var(--listening_icon_color);
}

@media (prefers-color-scheme: dark) {
  .voice-ml .shell {
    border-color: rgb(var(--GR300-rgb));
  }
}

/* The .voice-rs style is applied when the UI is in
 * the 'receiving speech' state. */
.voice-rs .receiver,
.voice-rs .stem {
  background-color: var(--active_icon_color);
}

@media (prefers-color-scheme: dark) {
  .voice-rs .receiver,
  .voice-rs .stem {
    background-color: rgb(var(--GG200-rgb));
  }
}

.voice-rs .shell {
  border-color: var(--active_icon_color);
}

@media (prefers-color-scheme: dark) {
  .voice-rs .shell {
    border-color: rgb(var(--GG200-rgb));
  }
}
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

'use strict';

/**
 * Get the preferred language for UI localization. Represents Chrome's UI
 * language, which might not coincide with the user's "preferred" language
 * in the Settings. For more details, see:
 *  - https://developer.mozilla.org/en/docs/Web/API/NavigatorLanguage/language
 *  - https://developer.mozilla.org/en/docs/Web/API/NavigatorLanguage/languages
 *
 * The returned value is a language version string as defined in
 * <a href="http://www.ietf.org/rfc/bcp/bcp47.txt">BCP 47</a>.
 * Examples: "en", "en-US", "cs-CZ", etc.
 */
function getChromeUILanguage() {
  // In Chrome, |window.navigator.language| is not guaranteed to be equal to
  // |window.navigator.languages[0]|.
  return window.navigator.language;
}

/**
 * The different types of user action and error events that are logged
 * from Voice Search. This enum is used to transfer information to
 * the renderer and is not used as a UMA enum histogram's logged value.
 * Note: Keep in sync with common/ntp_logging_events.h
 * @enum {!number}
 * @const
 */
const LOG_TYPE = {
  // Activated by clicking on the fakebox icon.
  ACTION_ACTIVATE_FAKEBOX: 13,
  // Activated by keyboard shortcut.
  ACTION_ACTIVATE_KEYBOARD: 14,
  // Close the voice overlay by a user's explicit action.
  ACTION_CLOSE_OVERLAY: 15,
  // Submitted voice query.
  ACTION_QUERY_SUBMITTED: 16,
  // Clicked on support link in error message.
  ACTION_SUPPORT_LINK_CLICKED: 17,
  // Retried by clicking Try Again link.
  ACTION_TRY_AGAIN_LINK: 18,
  // Retried by clicking microphone button.
  ACTION_TRY_AGAIN_MIC_BUTTON: 10,
  // Errors received from the Speech Recognition API.
  ERROR_NO_SPEECH: 20,
  ERROR_ABORTED: 21,
  ERROR_AUDIO_CAPTURE: 22,
  ERROR_NETWORK: 23,
  ERROR_NOT_ALLOWED: 24,
  ERROR_SERVICE_NOT_ALLOWED: 25,
  ERROR_BAD_GRAMMAR: 26,
  ERROR_LANGUAGE_NOT_SUPPORTED: 27,
  ERROR_NO_MATCH: 28,
  ERROR_OTHER: 29
};

/**
 * Enum for keyboard event codes.
 * @enum {!string}
 * @const
 */
const KEYCODE = {
  ENTER: 'Enter',
  ESC: 'Escape',
  NUMPAD_ENTER: 'NumpadEnter',
  PERIOD: 'Period',
  SPACE: 'Space',
  TAB: 'Tab'
};

/**
 * The set of possible recognition errors.
 * @enum {!number}
 * @const
 */
const RecognitionError = {
  NO_SPEECH: 0,
  ABORTED: 1,
  AUDIO_CAPTURE: 2,
  NETWORK: 3,
  NOT_ALLOWED: 4,
  SERVICE_NOT_ALLOWED: 5,
  BAD_GRAMMAR: 6,
  LANGUAGE_NOT_SUPPORTED: 7,
  NO_MATCH: 8,
  OTHER: 9
};

/**
 * Provides methods for communicating with the <a
 * href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API">
 * Web Speech API</a>, error handling and executing search queries.
 */
const speech = {};

/**
 * Localized translations for messages used in the Speech UI.
 * @type {{
 *   audioError: string,
 *   details: string,
 *   languageError: string,
 *   learnMore: string,
 *   listening: string,
 *   networkError: string,
 *   noTranslation: string,
 *   noVoice: string,
 *   otherError: string,
 *   permissionError: string,
 *   ready: string,
 *   tryAgain: string,
 *   waiting: string
 * }}
 */
speech.messages = {
  audioError: '',
  details: '',
  languageError: '',
  learnMore: '',
  listening: '',
  networkError: '',
  noTranslation: '',
  noVoice: '',
  otherError: '',
  permissionError: '',
  ready: '',
  tryAgain: '',
  waiting: ''
};

/**
 * The set of controller states.
 * @enum {number}
 * @private
 */
speech.State_ = {
  // Initial state of the controller. It is never re-entered.
  // The only state from which the |speech.init()| method can be called.
  // The UI overlay is hidden, recognition is inactive.
  UNINITIALIZED: -1,
  // Represents a ready to be activated state. If voice search is unsuccessful
  // for any reason, the controller will return to this state
  // using |speech.reset_()|. The UI overlay is hidden, recognition is inactive.
  READY: 0,
  // Indicates that speech recognition has started, but no audio has yet
  // been captured. The UI overlay is visible, recognition is active.
  STARTED: 1,
  // Indicates that audio is being captured by the Web Speech API, but no
  // speech has yet been recognized. The UI overlay is visible and indicating
  // that audio is being captured, recognition is active.
  AUDIO_RECEIVED: 2,
  // Represents a state where speech has been recognized by the Web Speech API,
  // but no resulting transcripts have yet been received back. The UI overlay is
  // visible and indicating that audio is being captured, recognition is active.
  SPEECH_RECEIVED: 3,
  // Controller state where speech has been successfully recognized and text
  // transcripts have been reported back. The UI overlay is visible
  // and displaying intermediate results, recognition is active.
  // This state remains until recognition ends successfully or due to an error.
  RESULT_RECEIVED: 4,
  // Indicates that speech recognition has failed due to an error
  // (or a no match error) being received from the Web Speech API.
  // A timeout may have occurred as well. The UI overlay is visible
  // and displaying an error message, recognition is inactive.
  ERROR_RECEIVED: 5,
  // Represents a state where speech recognition has been stopped
  // (either on success or failure) and the UI has not yet reset/redirected.
  // The UI overlay is displaying results or an error message with a timeout,
  // after which the site will either get redirected to search results
  // (successful) or back to the NTP by hiding the overlay (unsuccessful).
  STOPPED: 6
};

/**
 * Threshold for considering an interim speech transcript result as "confident
 * enough". The more confident the API is about a transcript, the higher the
 * confidence (number between 0 and 1).
 * @private {number}
 * @const
 */
speech.RECOGNITION_CONFIDENCE_THRESHOLD_ = 0.5;

/**
 * Time in milliseconds to wait before closing the UI after an error has
 * occured. This is a short timeout used when no click-target is present.
 * @private {number}
 * @const
 */
speech.ERROR_TIMEOUT_SHORT_MS_ = 3000;

/**
 * Time in milliseconds to wait before closing the UI after an error has
 * occured. This is a longer timeout used when there is a click-target is
 * present.
 * @private {number}
 * @const
 */
speech.ERROR_TIMEOUT_LONG_MS_ = 8000;

/**
 * Time in milliseconds to wait before closing the UI if no interaction has
 * occured.
 * @private {number}
 * @const
 */
speech.IDLE_TIMEOUT_MS_ = 8000;

/**
 * Maximum number of characters recognized before force-submitting a query.
 * Includes characters of non-confident recognition transcripts.
 * @private {number}
 * @const
 */
speech.QUERY_LENGTH_LIMIT_ = 120;

/**
 * Specifies the current state of the controller.
 * Note: Different than the UI state.
 * @private {speech.State_}
 */
speech.currentState_ = speech.State_.UNINITIALIZED;

/**
 * The ID for the error timer.
 * @private {number}
 */
speech.errorTimer_;

/**
 * The duration of the timeout for the UI elements during an error state.
 * Depending on the error state, we have different durations for the timeout.
 * @private {number}
 */
speech.errorTimeoutMs_ = 0;

/**
 * The last high confidence voice transcript received from the Web Speech API.
 * This is the actual query that could potentially be submitted to Search.
 * @private {string}
 */
speech.finalResult_;

/**
 * Base URL for sending queries to Search. Includes trailing forward slash.
 * @private {string}
 */
speech.googleBaseUrl_;

/**
 * The ID for the idle timer.
 * @private {number}
 */
speech.idleTimer_;

/**
 * The last low confidence voice transcript received from the Web Speech API.
 * @private {string}
 */
speech.interimResult_;

/**
 * The Web Speech API object driving the speech recognition transaction.
 * @private {!webkitSpeechRecognition}
 */
speech.recognition_;

/**
 * Indicates if the user is using keyboard navigation (i.e. tab).
 * @private {boolean}
 */
speech.usingKeyboardNavigation_ = false;

/**
 * Log an event from Voice Search.
 * @param {number} eventType Event from |LOG_TYPE|.
 */
speech.logEvent = function(eventType) {
  window.chrome.embeddedSearch.newTabPage.logEvent(eventType);
};

/**
 * Initialize the speech module as part of the local NTP. Adds event handlers
 * and shows the fakebox microphone icon.
 * @param {string} googleBaseUrl Base URL for sending queries to Search.
 * @param {!Object} translatedStrings Dictionary of localized string messages.
 * @param {?Element} fakeboxMicrophoneElem Fakebox microphone icon element.
 * @param {!Object} searchboxApiHandle SearchBox API handle.
 */
speech.init = function(
    googleBaseUrl, translatedStrings, fakeboxMicrophoneElem,
    searchboxApiHandle) {
  if (!fakeboxMicrophoneElem) {
    throw new Error('Speech button element not found.');
  }

  if (speech.currentState_ != speech.State_.UNINITIALIZED) {
    throw new Error(
        'Trying to re-initialize speech when not in UNINITIALIZED state.');
  }

  // Initialize event handlers.
  fakeboxMicrophoneElem.hidden = false;
  fakeboxMicrophoneElem.title = translatedStrings.fakeboxMicrophoneTooltip;
  fakeboxMicrophoneElem.onclick = function(event) {
    // If propagated, closes the overlay (click on the background).
    event.stopPropagation();
    speech.logEvent(LOG_TYPE.ACTION_ACTIVATE_FAKEBOX);
    speech.start();
  };
  fakeboxMicrophoneElem.onkeydown = function(event) {
    if (!event.repeat && speech.isSpaceOrEnter_(event.code) &&
        speech.currentState_ == speech.State_.READY) {
      event.stopPropagation();
      speech.start();
    }
  };
  window.addEventListener('keydown', speech.onKeyDown);
  if (searchboxApiHandle.onfocuschange) {
    throw new Error('OnFocusChange handler already set on searchbox.');
  }
  searchboxApiHandle.onfocuschange = speech.onOmniboxFocused;

  // Initialize speech internal state.
  speech.googleBaseUrl_ = googleBaseUrl;
  speech.messages = {
    audioError: translatedStrings.audioError,
    details: translatedStrings.details,
    languageError: translatedStrings.languageError,
    learnMore: translatedStrings.learnMore,
    listening: translatedStrings.listening,
    networkError: translatedStrings.networkError,
    noTranslation: translatedStrings.noTranslation,
    noVoice: translatedStrings.noVoice,
    otherError: translatedStrings.otherError,
    permissionError: translatedStrings.permissionError,
    ready: translatedStrings.ready,
    tryAgain: translatedStrings.tryAgain,
    waiting: translatedStrings.waiting,
  };
  view.init(speech.onClick_);
  view.setTitles(translatedStrings);
  speech.initWebkitSpeech_();
  speech.reset_();
};

/**
 * Initializes and configures the speech recognition API.
 * @private
 */
speech.initWebkitSpeech_ = function() {
  speech.recognition_ = new webkitSpeechRecognition();
  speech.recognition_.continuous = false;
  speech.recognition_.interimResults = true;
  speech.recognition_.lang = getChromeUILanguage();
  speech.recognition_.onaudiostart = speech.handleRecognitionAudioStart_;
  speech.recognition_.onend = speech.handleRecognitionEnd_;
  speech.recognition_.onerror = speech.handleRecognitionError_;
  speech.recognition_.onnomatch = speech.handleRecognitionOnNoMatch_;
  speech.recognition_.onresult = speech.handleRecognitionResult_;
  speech.recognition_.onspeechstart = speech.handleRecognitionSpeechStart_;
};

/**
 * Sets up the necessary states for voice search and then starts the
 * speech recognition interface.
 */
speech.start = function() {
  view.show();

  speech.resetIdleTimer_(speech.IDLE_TIMEOUT_MS_);

  document.addEventListener(
      'webkitvisibilitychange', speech.onVisibilityChange_, false);

  // Initialize |speech.recognition_| if it isn't already.
  if (!speech.recognition_) {
    speech.initWebkitSpeech_();
  }

  // If |speech.start()| is called too soon after |speech.stop()| then the
  // recognition interface hasn't yet reset and an error occurs. In this case
  // we need to hard-reset it and reissue the |recognition_.start()| command.
  try {
    speech.recognition_.start();
    speech.currentState_ = speech.State_.STARTED;
  } catch (error) {
    speech.initWebkitSpeech_();
    try {
      speech.recognition_.start();
      speech.currentState_ = speech.State_.STARTED;
    } catch (error2) {
      speech.stop();
    }
  }
};

/**
 * Hides the overlay and resets the speech state.
 */
speech.stop = function() {
  speech.recognition_.abort();
  speech.currentState_ = speech.State_.STOPPED;
  view.hide();
  speech.reset_();
};

/**
 * Resets the internal state to the READY state.
 * @private
 */
speech.reset_ = function() {
  window.clearTimeout(speech.idleTimer_);
  window.clearTimeout(speech.errorTimer_);

  document.removeEventListener(
      'webkitvisibilitychange', speech.onVisibilityChange_, false);

  speech.interimResult_ = '';
  speech.finalResult_ = '';
  speech.currentState_ = speech.State_.READY;
  speech.usingKeyboardNavigation_ = false;
};

/**
 * Informs the view that the browser is receiving audio input.
 * @param {Event=} opt_event Emitted event for audio start.
 * @private
 */
speech.handleRecognitionAudioStart_ = function(opt_event) {
  speech.resetIdleTimer_(speech.IDLE_TIMEOUT_MS_);
  speech.currentState_ = speech.State_.AUDIO_RECEIVED;
  view.setReadyForSpeech();
};

/**
 * Function is called when the user starts speaking.
 * @param {Event=} opt_event Emitted event for speech start.
 * @private
 */
speech.handleRecognitionSpeechStart_ = function(opt_event) {
  speech.resetIdleTimer_(speech.IDLE_TIMEOUT_MS_);
  speech.currentState_ = speech.State_.SPEECH_RECEIVED;
  view.setReceivingSpeech();
};

/**
 * Processes the recognition results arriving from the Web Speech API.
 * @param {SpeechRecognitionEvent} responseEvent Event coming from the API.
 * @private
 */
speech.handleRecognitionResult_ = function(responseEvent) {
  speech.resetIdleTimer_(speech.IDLE_TIMEOUT_MS_);

  switch (speech.currentState_) {
    case speech.State_.RESULT_RECEIVED:
    case speech.State_.SPEECH_RECEIVED:
      // Normal, expected states for processing results.
      break;
    case speech.State_.AUDIO_RECEIVED:
      // Network bugginess (the onaudiostart packet was lost).
      speech.handleRecognitionSpeechStart_();
      break;
    case speech.State_.STARTED:
      // Network bugginess (the onspeechstart packet was lost).
      speech.handleRecognitionAudioStart_();
      speech.handleRecognitionSpeechStart_();
      break;
    default:
      // Not expecting results in any other states.
      return;
  }

  const results = responseEvent.results;
  if (results.length == 0) {
    return;
  }
  speech.currentState_ = speech.State_.RESULT_RECEIVED;
  speech.interimResult_ = '';
  speech.finalResult_ = '';

  const finalResult = results[responseEvent.resultIndex];
  // Process final results.
  if (finalResult.isFinal) {
    speech.finalResult_ = finalResult[0].transcript;
    view.updateSpeechResult(speech.finalResult_, speech.finalResult_);

    speech.submitFinalResult_();
    return;
  }

  // Process interim results.
  for (let j = 0; j < results.length; j++) {
    const result = results[j][0];
    speech.interimResult_ += result.transcript;
    if (result.confidence > speech.RECOGNITION_CONFIDENCE_THRESHOLD_) {
      speech.finalResult_ += result.transcript;
    }
  }
  view.updateSpeechResult(speech.interimResult_, speech.finalResult_);

  // Force-stop long queries.
  if (speech.interimResult_.length > speech.QUERY_LENGTH_LIMIT_) {
    if (speech.finalResult_) {
      speech.submitFinalResult_();
    } else {
      speech.onErrorReceived_(RecognitionError.NO_MATCH);
    }
  }
};

/**
 * Convert a |RecognitionError| to a |LOG_TYPE| error constant,
 * for UMA logging.
 * @param {RecognitionError} error The received error.
 * @private
 */
speech.errorToLogType_ = function(error) {
  switch (error) {
    case RecognitionError.ABORTED:
      return LOG_TYPE.ERROR_ABORTED;
    case RecognitionError.AUDIO_CAPTURE:
      return LOG_TYPE.ERROR_AUDIO_CAPTURE;
    case RecognitionError.BAD_GRAMMAR:
      return LOG_TYPE.ERROR_BAD_GRAMMAR;
    case RecognitionError.LANGUAGE_NOT_SUPPORTED:
      return LOG_TYPE.ERROR_LANGUAGE_NOT_SUPPORTED;
    case RecognitionError.NETWORK:
      return LOG_TYPE.ERROR_NETWORK;
    case RecognitionError.NO_MATCH:
      return LOG_TYPE.ERROR_NO_MATCH;
    case RecognitionError.NO_SPEECH:
      return LOG_TYPE.ERROR_NO_SPEECH;
    case RecognitionError.NOT_ALLOWED:
      return LOG_TYPE.ERROR_NOT_ALLOWED;
    case RecognitionError.SERVICE_NOT_ALLOWED:
      return LOG_TYPE.ERROR_SERVICE_NOT_ALLOWED;
    default:
      return LOG_TYPE.ERROR_OTHER;
  }
};

/**
 * Handles state transition for the controller when an error occurs
 * during speech recognition.
 * @param {RecognitionError} error The appropriate error state from
 *     the RecognitionError enum.
 * @private
 */
speech.onErrorReceived_ = function(error) {
  speech.logEvent(speech.errorToLogType_(error));
  speech.resetIdleTimer_(speech.IDLE_TIMEOUT_MS_);
  speech.errorTimeoutMs_ = speech.getRecognitionErrorTimeout_(error);
  if (error != RecognitionError.ABORTED) {
    speech.currentState_ = speech.State_.ERROR_RECEIVED;
    view.showError(error);
    window.clearTimeout(speech.idleTimer_);
    speech.resetErrorTimer_(speech.errorTimeoutMs_);
  }
};

/**
 * Called when an error from Web Speech API is received.
 * @param {SpeechRecognitionError} error The error event.
 * @private
 */
speech.handleRecognitionError_ = function(error) {
  speech.onErrorReceived_(speech.getRecognitionError_(error.error));
};

/**
 * Stops speech recognition when no matches are found.
 * @private
 */
speech.handleRecognitionOnNoMatch_ = function() {
  speech.onErrorReceived_(RecognitionError.NO_MATCH);
};

/**
 * Stops the UI when the Web Speech API reports that it has halted speech
 * recognition.
 * @private
 */
speech.handleRecognitionEnd_ = function() {
  window.clearTimeout(speech.idleTimer_);

  let error;
  switch (speech.currentState_) {
    case speech.State_.STARTED:
      error = RecognitionError.AUDIO_CAPTURE;
      break;
    case speech.State_.AUDIO_RECEIVED:
      error = RecognitionError.NO_SPEECH;
      break;
    case speech.State_.SPEECH_RECEIVED:
    case speech.State_.RESULT_RECEIVED:
      error = RecognitionError.NO_MATCH;
      break;
    case speech.State_.ERROR_RECEIVED:
      error = RecognitionError.OTHER;
      break;
    default:
      return;
  }

  // If error has not yet been displayed.
  if (speech.currentState_ != speech.State_.ERROR_RECEIVED) {
    view.showError(error);
    speech.resetErrorTimer_(speech.ERROR_TIMEOUT_LONG_MS_);
  }
  speech.currentState_ = speech.State_.STOPPED;
};

/**
 * Determines whether the user's browser is probably running on a Mac.
 * @return {boolean} True iff the user's browser is running on a Mac.
 * @private
 */
speech.isUserAgentMac_ = function() {
  return window.navigator.userAgent.includes('Macintosh');
};

/**
 * Determines, if the given KeyboardEvent |code| is a space or enter key.
 * @param {string} code A KeyboardEvent's |code| property.
 * @return True, iff the code represents a space or enter key.
 * @private
 */
speech.isSpaceOrEnter_ = function(code) {
  switch (code) {
    case KEYCODE.ENTER:
    case KEYCODE.NUMPAD_ENTER:
    case KEYCODE.SPACE:
      return true;
    default:
      return false;
  }
};

/**
 * Determines if the given event's target id is for a button or navigation link.
 * @param {string} id An event's target id.
 * @return True, iff the id is for a button or link.
 * @private
 */
speech.isButtonOrLink_ = function(id) {
  switch (id) {
    case text.RETRY_LINK_ID:
    case text.SUPPORT_LINK_ID:
    case view.CLOSE_BUTTON_ID:
      return true;
    default:
      return false;
  }
};

/**
 * Handles the following keyboard actions.
 * - <CTRL> + <SHIFT> + <.> starts voice input(<CMD> + <SHIFT> + <.> on mac).
 * - <ESC> aborts voice input when the recognition interface is active.
 * - <ENTER> or <SPACE> interprets as a click if the target is a button or
 *   navigation link, otherwise it submits the speech query if there is one
 * @param {!Event} event The keydown event.
 */
speech.onKeyDown = function(event) {
  if (speech.isUiDefinitelyHidden_()) {
    const ctrlKeyPressed =
        event.ctrlKey || (speech.isUserAgentMac_() && event.metaKey);
    if (speech.currentState_ == speech.State_.READY &&
        event.code == KEYCODE.PERIOD && event.shiftKey && ctrlKeyPressed) {
      speech.logEvent(LOG_TYPE.ACTION_ACTIVATE_KEYBOARD);
      speech.start();
    }
  } else {
    // Ensures that keyboard events are not propagated during voice input.
    event.stopPropagation();

    if (event.code == KEYCODE.TAB) {
      speech.usingKeyboardNavigation_ = true;
    } else if (speech.isSpaceOrEnter_(event.code)) {
      if (event.target != null && speech.isButtonOrLink_(event.target.id)) {
        view.onWindowClick_(event);
      } else if (speech.finalResult_) {
        speech.submitFinalResult_();
      } else {
        speech.logEvent(LOG_TYPE.ACTION_CLOSE_OVERLAY);
        speech.stop();
      }
    } else if (event.code == KEYCODE.ESC) {
      speech.logEvent(LOG_TYPE.ACTION_CLOSE_OVERLAY);
      speech.stop();
    }
  }
};

/**
 * Displays the no match error if no interactions occur after some time while
 * the interface is active. This is a safety net in case the onend event
 * doesn't fire, or the user has persistent noise in the background, and does
 * not speak. If a high confidence transcription was received, then this submits
 * the search query instead of displaying an error.
 * @private
 */
speech.onIdleTimeout_ = function() {
  if (speech.finalResult_) {
    speech.submitFinalResult_();
    return;
  }

  switch (speech.currentState_) {
    case speech.State_.STARTED:
    case speech.State_.AUDIO_RECEIVED:
    case speech.State_.SPEECH_RECEIVED:
    case speech.State_.RESULT_RECEIVED:
    case speech.State_.ERROR_RECEIVED:
      speech.onErrorReceived_(RecognitionError.NO_MATCH);
      break;
  }
};

/**
 * Aborts the speech recognition interface when the user switches to a new
 * tab or window.
 * @private
 */
speech.onVisibilityChange_ = function() {
  if (speech.isUiDefinitelyHidden_()) {
    return;
  }

  if (document.webkitHidden) {
    speech.stop();
  }
};

/**
 * Aborts the speech session if the UI is showing and omnibox gets focused. Does
 * not abort if the user is using keyboard navigation (i.e. tab).
 */
speech.onOmniboxFocused = function() {
  if (!speech.isUiDefinitelyHidden_() && !speech.usingKeyboardNavigation_) {
    speech.logEvent(LOG_TYPE.ACTION_CLOSE_OVERLAY);
    speech.stop();
  }
};

/**
 * Change the location of this tab to the new URL. Used for query submission.
 * @param {!URL} url The URL to navigate to.
 * @private
 */
speech.navigateToUrl_ = function(url) {
  window.location.href = url.href;
};

/**
 * Submits the final spoken speech query to perform a search.
 * @private
 */
speech.submitFinalResult_ = function() {
  window.clearTimeout(speech.idleTimer_);
  if (!speech.finalResult_) {
    throw new Error('Submitting empty query.');
  }

  const searchParams = new URLSearchParams();
  // Add the encoded query. Getting |speech.finalResult_| needs to happen
  // before stopping speech.
  searchParams.append('q', speech.finalResult_);
  // Add a parameter to indicate that this request is a voice search.
  searchParams.append('gs_ivs', '1');

  // Build the query URL.
  const queryUrl = new URL('/search', speech.googleBaseUrl_);
  queryUrl.search = searchParams.toString();

  speech.logEvent(LOG_TYPE.ACTION_QUERY_SUBMITTED);
  speech.stop();
  speech.navigateToUrl_(queryUrl);
};

/**
 * Returns the error type based on the error string received from the webkit
 * speech recognition API.
 * @param {string} error The error string received from the webkit speech
 *     recognition API.
 * @return {RecognitionError} The appropriate error state from
 *     the RecognitionError enum.
 * @private
 */
speech.getRecognitionError_ = function(error) {
  switch (error) {
    case 'aborted':
      return RecognitionError.ABORTED;
    case 'audio-capture':
      return RecognitionError.AUDIO_CAPTURE;
    case 'bad-grammar':
      return RecognitionError.BAD_GRAMMAR;
    case 'language-not-supported':
      return RecognitionError.LANGUAGE_NOT_SUPPORTED;
    case 'network':
      return RecognitionError.NETWORK;
    case 'no-speech':
      return RecognitionError.NO_SPEECH;
    case 'not-allowed':
      return RecognitionError.NOT_ALLOWED;
    case 'service-not-allowed':
      return RecognitionError.SERVICE_NOT_ALLOWED;
    default:
      return RecognitionError.OTHER;
  }
};

/**
 * Returns a timeout based on the error received from the webkit speech
 * recognition API.
 * @param {RecognitionError} error An error from the RecognitionError enum.
 * @return {number} The appropriate timeout duration for displaying the error.
 * @private
 */
speech.getRecognitionErrorTimeout_ = function(error) {
  switch (error) {
    case RecognitionError.AUDIO_CAPTURE:
    case RecognitionError.NO_SPEECH:
    case RecognitionError.NOT_ALLOWED:
    case RecognitionError.SERVICE_NOT_ALLOWED:
    case RecognitionError.NO_MATCH:
      return speech.ERROR_TIMEOUT_LONG_MS_;
    default:
      return speech.ERROR_TIMEOUT_SHORT_MS_;
  }
};

/**
 * Resets the idle state timeout.
 * @param {number} duration The duration after which to close the UI.
 * @private
 */
speech.resetIdleTimer_ = function(duration) {
  window.clearTimeout(speech.idleTimer_);
  speech.idleTimer_ = window.setTimeout(speech.onIdleTimeout_, duration);
};

/**
 * Resets the idle error state timeout.
 * @param {number} duration The duration after which to close the UI during an
 *     error state.
 * @private
 */
speech.resetErrorTimer_ = function(duration) {
  window.clearTimeout(speech.errorTimer_);
  speech.errorTimer_ = window.setTimeout(speech.stop, duration);
};

/**
 * Check to see if the speech recognition interface is running, and has
 * received any results.
 * @return {boolean} True, if the speech recognition interface is running,
 *     and has received any results.
 */
speech.hasReceivedResults = function() {
  return speech.currentState_ == speech.State_.RESULT_RECEIVED;
};

/**
 * Check to see if the speech recognition interface is running.
 * @return {boolean} True, if the speech recognition interface is running.
 */
speech.isRecognizing = function() {
  switch (speech.currentState_) {
    case speech.State_.STARTED:
    case speech.State_.AUDIO_RECEIVED:
    case speech.State_.SPEECH_RECEIVED:
    case speech.State_.RESULT_RECEIVED:
      return true;
  }
  return false;
};

/**
 * Check if the controller is in a state where the UI is definitely hidden.
 * Since we show the UI for a few seconds after we receive an error from the
 * API, we need a separate definition to |speech.isRecognizing()| to indicate
 * when the UI is hidden. <strong>Note:</strong> that if this function
 * returns false, it might not necessarily mean that the UI is visible.
 * @return {boolean} True if the UI is hidden.
 * @private
 */
speech.isUiDefinitelyHidden_ = function() {
  switch (speech.currentState_) {
    case speech.State_.READY:
    case speech.State_.UNINITIALIZED:
      return true;
  }
  return false;
};

/**
 * Handles click events during speech recognition.
 * @param {boolean} shouldSubmit True if a query should be submitted.
 * @param {boolean} shouldRetry True if the interface should be restarted.
 * @param {boolean} navigatingAway True if the browser is navigating away
 *     from the NTP.
 * @private
 */
speech.onClick_ = function(shouldSubmit, shouldRetry, navigatingAway) {
  if (speech.finalResult_ && shouldSubmit) {
    speech.submitFinalResult_();
  } else if (speech.currentState_ == speech.State_.STOPPED && shouldRetry) {
    speech.reset_();
    speech.start();
  } else if (speech.currentState_ == speech.State_.STOPPED && navigatingAway) {
    // If the user clicks on a "Learn more" or "Details" support page link
    // from an error message, do nothing, and let Chrome navigate to that page.
  } else {
    speech.logEvent(LOG_TYPE.ACTION_CLOSE_OVERLAY);
    speech.stop();
  }
};

/* TEXT VIEW */

/**
 * Provides methods for styling and animating the text areas
 * left of the microphone button.
 */
const text = {};

/**
 * ID for the "Try Again" link shown in error output.
 * @const
 */
text.RETRY_LINK_ID = 'voice-retry-link';

/**
 * ID for the Voice Search support site link shown in error output.
 * @const
 */
text.SUPPORT_LINK_ID = 'voice-support-link';

/**
 * Class for the links shown in error output.
 * @const @private
 */
text.ERROR_LINK_CLASS_ = 'voice-text-link';

/**
 * Class name for the speech recognition result output area.
 * @const @private
 */
text.TEXT_AREA_CLASS_ = 'voice-text';

/**
 * Class name for the "Listening..." text animation.
 * @const @private
 */
text.LISTENING_ANIMATION_CLASS_ = 'listening-animation';

/**
 * ID of the final / high confidence speech recognition results element.
 * @const @private
 */
text.FINAL_TEXT_AREA_ID_ = 'voice-text-f';

/**
 * ID of the interim / low confidence speech recognition results element.
 * @const @private
 */
text.INTERIM_TEXT_AREA_ID_ = 'voice-text-i';

/**
 * The line height of the speech recognition results text.
 * @const @private
 */
text.LINE_HEIGHT_ = 1.2;

/**
 * Font size in the full page view in pixels.
 * @const @private
 */
text.FONT_SIZE_ = 32;

/**
 * Delay in milliseconds before showing the initializing message.
 * @const @private
 */
text.INITIALIZING_TIMEOUT_MS_ = 300;

/**
 * Delay in milliseconds before showing the listening message.
 * @const @private
 */
text.LISTENING_TIMEOUT_MS_ = 2000;

/**
 * Base link target for help regarding voice search. To be appended
 * with a locale string for proper target site localization.
 * @const @private
 */
text.SUPPORT_LINK_BASE_ =
    'https://support.google.com/chrome/?p=ui_voice_search&hl=';

/**
 * The final / high confidence speech recognition result element.
 * @private {Element}
 */
text.final_;

/**
 * The interim / low confidence speech recognition result element.
 * @private {Element}
 */
text.interim_;

/**
 * Stores the ID of the initializing message timer.
 * @private {number}
 */
text.initializingTimer_;

/**
 * Stores the ID of the listening message timer.
 * @private {number}
 */
text.listeningTimer_;

/**
 * Finds the text view elements.
 */
text.init = function() {
  text.final_ = $(text.FINAL_TEXT_AREA_ID_);
  text.interim_ = $(text.INTERIM_TEXT_AREA_ID_);
  text.clear();
};

/**
 * Updates the text elements with new recognition results.
 * @param {string} interimText Low confidence speech recognition result text.
 * @param {string} opt_finalText High confidence speech recognition result
 *     text, defaults to an empty string.
 */
text.updateTextArea = function(interimText, opt_finalText = '') {
  window.clearTimeout(text.initializingTimer_);
  text.clearListeningTimeout();

  text.interim_.textContent = interimText;
  text.final_.textContent = opt_finalText;

  text.interim_.className = text.final_.className = text.getTextClassName_();
};

/**
 * Sets the text view to the initializing state. The initializing message
 * shown while waiting for permission is not displayed immediately, but after
 * a short timeout. The reason for this is that the "Waiting..." message would
 * still appear ("blink") every time a user opens Voice Search, even if they
 * have already granted and persisted microphone permission for the NTP,
 * and could therefore directly proceed to the "Speak now" message.
 */
text.showInitializingMessage = function() {
  text.interim_.textContent = '';
  text.final_.textContent = '';

  const displayMessage = function() {
    if (text.interim_.textContent == '') {
      text.updateTextArea(speech.messages.waiting);
    }
  };
  text.initializingTimer_ =
      window.setTimeout(displayMessage, text.INITIALIZING_TIMEOUT_MS_);
};

/**
 * Sets the text view to the ready state.
 */
text.showReadyMessage = function() {
  window.clearTimeout(text.initializingTimer_);
  text.clearListeningTimeout();
  text.updateTextArea(speech.messages.ready);
  text.startListeningMessageAnimation_();
};

/**
 * Display an error message in the text area for the given error.
 * @param {RecognitionError} error The error that occured.
 */
text.showErrorMessage = function(error) {
  text.updateTextArea(text.getErrorMessage_(error));

  const linkElement = text.getErrorLink_(error);
  // Setting textContent removes all children (no need to clear link elements).
  if (linkElement) {
    text.interim_.textContent += ' ';
    text.interim_.appendChild(linkElement);
  }
};

/**
 * Returns an error message based on the error.
 * @param {RecognitionError} error The error that occured.
 * @private
 */
text.getErrorMessage_ = function(error) {
  switch (error) {
    case RecognitionError.NO_MATCH:
      return speech.messages.noTranslation;
    case RecognitionError.NO_SPEECH:
      return speech.messages.noVoice;
    case RecognitionError.AUDIO_CAPTURE:
      return speech.messages.audioError;
    case RecognitionError.NETWORK:
      return speech.messages.networkError;
    case RecognitionError.NOT_ALLOWED:
    case RecognitionError.SERVICE_NOT_ALLOWED:
      return speech.messages.permissionError;
    case RecognitionError.LANGUAGE_NOT_SUPPORTED:
      return speech.messages.languageError;
    default:
      return speech.messages.otherError;
  }
};

/**
 * Returns an error message help link based on the error.
 * @param {RecognitionError} error The error that occured.
 * @private
 */
text.getErrorLink_ = function(error) {
  const linkElement = document.createElement('a');
  linkElement.className = text.ERROR_LINK_CLASS_;

  switch (error) {
    case RecognitionError.NO_MATCH:
      linkElement.id = text.RETRY_LINK_ID;
      linkElement.tabIndex = '0';
      linkElement.textContent = speech.messages.tryAgain;
      // When clicked, |view.onWindowClick_| gets called.
      return linkElement;
    case RecognitionError.NO_SPEECH:
    case RecognitionError.AUDIO_CAPTURE:
      linkElement.id = text.SUPPORT_LINK_ID;
      linkElement.href = text.SUPPORT_LINK_BASE_ + getChromeUILanguage();
      linkElement.textContent = speech.messages.learnMore;
      linkElement.target = '_blank';
      return linkElement;
    case RecognitionError.NOT_ALLOWED:
    case RecognitionError.SERVICE_NOT_ALLOWED:
      linkElement.id = text.SUPPORT_LINK_ID;
      linkElement.href = text.SUPPORT_LINK_BASE_ + getChromeUILanguage();
      linkElement.textContent = speech.messages.details;
      linkElement.target = '_blank';
      return linkElement;
    default:
      return null;
  }
};

/**
 * Clears the text elements.
 */
text.clear = function() {
  text.updateTextArea('');

  text.clearListeningTimeout();
  window.clearTimeout(text.initializingTimer_);

  text.interim_.className = text.TEXT_AREA_CLASS_;
  text.final_.className = text.TEXT_AREA_CLASS_;
};

/**
 * Cancels listening message display.
 */
text.clearListeningTimeout = function() {
  window.clearTimeout(text.listeningTimer_);
};

/**
 * Determines the class name of the text output Elements.
 * @return {string} The class name.
 * @private
 */
text.getTextClassName_ = function() {
  // Shift up for every line.
  const oneLineHeight = text.LINE_HEIGHT_ * text.FONT_SIZE_ + 1;
  const twoLineHeight = text.LINE_HEIGHT_ * text.FONT_SIZE_ * 2 + 1;
  const threeLineHeight = text.LINE_HEIGHT_ * text.FONT_SIZE_ * 3 + 1;
  const fourLineHeight = text.LINE_HEIGHT_ * text.FONT_SIZE_ * 4 + 1;

  const height = text.interim_.scrollHeight;
  let className = text.TEXT_AREA_CLASS_;

  if (height > fourLineHeight) {
    className += ' voice-text-5l';
  } else if (height > threeLineHeight) {
    className += ' voice-text-4l';
  } else if (height > twoLineHeight) {
    className += ' voice-text-3l';
  } else if (height > oneLineHeight) {
    className += ' voice-text-2l';
  }
  return className;
};

/**
 * Displays the listening message animation after the ready message has been
 * shown for |text.LISTENING_TIMEOUT_MS_| milliseconds without further user
 * action.
 * @private
 */
text.startListeningMessageAnimation_ = function() {
  const animateListeningText = function() {
    // If speech is active with no results yet, show the message and animation.
    if (speech.isRecognizing() && !speech.hasReceivedResults()) {
      text.updateTextArea(speech.messages.listening);
      text.interim_.classList.add(text.LISTENING_ANIMATION_CLASS_);
    }
  };

  text.listeningTimer_ =
      window.setTimeout(animateListeningText, text.LISTENING_TIMEOUT_MS_);
};

/* END TEXT VIEW */

/* MICROPHONE VIEW */

/**
 * Provides methods for animating the microphone button and icon
 * on the Voice Search full screen overlay.
 */
const microphone = {};

/**
 * ID for the button Element.
 * @const
 */
microphone.RED_BUTTON_ID = 'voice-button';

/**
 * ID for the level animations Element that indicates input volume.
 * @const @private
 */
microphone.LEVEL_ID_ = 'voice-level';

/**
 * ID for the container of the microphone, red button and level animations.
 * @const @private
 */
microphone.CONTAINER_ID_ = 'voice-button-container';

/**
 * The minimum transform scale for the volume rings.
 * @const @private
 */
microphone.LEVEL_SCALE_MINIMUM_ = 0.5;

/**
 * The range of the transform scale for the volume rings.
 * @const @private
 */
microphone.LEVEL_SCALE_RANGE_ = 0.55;

/**
 * The minimum transition time (in milliseconds) for the volume rings.
 * @const @private
 */
microphone.LEVEL_TIME_STEP_MINIMUM_ = 170;

/**
 * The range of the transition time for the volume rings.
 * @const @private
 */
microphone.LEVEL_TIME_STEP_RANGE_ = 10;

/**
 * The button with the microphone icon.
 * @private {Element}
 */
microphone.button_;

/**
 * The voice level element that is displayed when the user starts speaking.
 * @private {Element}
 */
microphone.level_;

/**
 * Variable to indicate whether level animations are underway.
 * @private {boolean}
 */
microphone.isLevelAnimating_ = false;

/**
 * Creates/finds the output elements for the microphone rendering and animation.
 */
microphone.init = function() {
  // Get the button element and microphone container.
  microphone.button_ = $(microphone.RED_BUTTON_ID);

  // Get the animation elements.
  microphone.level_ = $(microphone.LEVEL_ID_);
};

/**
 * Starts the volume circles animations, if it has not started yet.
 */
microphone.startInputAnimation = function() {
  if (!microphone.isLevelAnimating_) {
    microphone.isLevelAnimating_ = true;
    microphone.runLevelAnimation_();
  }
};

/**
 * Stops the volume circles animations.
 */
microphone.stopInputAnimation = function() {
  microphone.isLevelAnimating_ = false;
};

/**
 * Runs the volume level animation.
 * @private
 */
microphone.runLevelAnimation_ = function() {
  if (!microphone.isLevelAnimating_) {
    microphone.level_.style.removeProperty('opacity');
    microphone.level_.style.removeProperty('transition');
    microphone.level_.style.removeProperty('transform');
    return;
  }
  const scale = microphone.LEVEL_SCALE_MINIMUM_ +
      Math.random() * microphone.LEVEL_SCALE_RANGE_;
  const timeStep = Math.round(
      microphone.LEVEL_TIME_STEP_MINIMUM_ +
      Math.random() * microphone.LEVEL_TIME_STEP_RANGE_);
  microphone.level_.style.setProperty(
      'transition', 'transform ' + timeStep + 'ms ease-in-out');
  microphone.level_.style.setProperty('transform', 'scale(' + scale + ')');
  window.setTimeout(microphone.runLevelAnimation_, timeStep);
};

/* END MICROPHONE VIEW */

/* VIEW */

/**
 * Provides methods for manipulating and animating the Voice Search
 * full screen overlay.
 */
const view = {};

/**
 * ID for the close button in the speech output container.
 * @const
 */
view.CLOSE_BUTTON_ID = 'voice-close-button';

/**
 * Class name of the speech recognition interface on the homepage.
 * @const @private
 */
view.OVERLAY_CLASS_ = 'overlay';

/**
 * Class name of the speech recognition interface when it is hidden on the
 * homepage.
 * @const @private
 */
view.OVERLAY_HIDDEN_CLASS_ = 'overlay-hidden';

/**
 * ID for the dialog that contains the speech recognition interface.
 * @const @private
 */
view.DIALOG_ID_ = 'voice-overlay-dialog';

/**
 * ID for the speech output background.
 * @const @private
 */
view.BACKGROUND_ID_ = 'voice-overlay';

/**
 * ID for the speech output container.
 * @const @private
 */
view.CONTAINER_ID_ = 'voice-outer';

/**
 * Class name used to modify the UI to the 'listening' state.
 * @const @private
 */
view.MICROPHONE_LISTENING_CLASS_ = 'outer voice-ml';

/**
 * Class name used to modify the UI to the 'receiving speech' state.
 * @const @private
 */
view.RECEIVING_SPEECH_CLASS_ = 'outer voice-rs';

/**
 * Class name used to modify the UI to the 'error received' state.
 * @const @private
 */
view.ERROR_RECEIVED_CLASS_ = 'outer voice-er';

/**
 * Class name used to modify the UI to the inactive state.
 * @const @private
 */
view.INACTIVE_CLASS_ = 'outer';

/**
 * Background element and container of all other elements.
 * @private {Element}
 */
view.background_;

/**
 * The container used to position the microphone and text output area.
 * @private {Element}
 */
view.container_;

/**
 * True if the the last error message shown was for the 'no-match' error.
 * @private {boolean}
 */
view.isNoMatchShown_ = false;

/**
 * True if the UI elements are visible.
 * @private {boolean}
 */
view.isVisible_ = false;

/**
 * The function to call when there is a click event.
 * @private {Function}
 */
view.onClick_;

/**
 * Displays the UI.
 */
view.show = function() {
  if (!view.isVisible_) {
    text.showInitializingMessage();
    view.showView_();
    window.addEventListener('click', view.onWindowClick_, false);
  }
};

/**
 * Sets the output area text to listening. This should only be called when
 * the Web Speech API starts receiving audio input (i.e., onaudiostart).
 */
view.setReadyForSpeech = function() {
  if (view.isVisible_) {
    view.container_.className = view.MICROPHONE_LISTENING_CLASS_;
    text.showReadyMessage();
  }
};

/**
 * Shows the pulsing animation emanating from the microphone. This should only
 * be called when the Web Speech API starts receiving speech input (i.e.,
 * |onspeechstart|). Do note that this may also be run when the Web Speech API
 * is receiving speech recognition results (|onresult|), because |onspeechstart|
 * may not have been called.
 */
view.setReceivingSpeech = function() {
  if (view.isVisible_) {
    view.container_.className = view.RECEIVING_SPEECH_CLASS_;
    microphone.startInputAnimation();
    text.clearListeningTimeout();
  }
};

/**
 * Updates the speech recognition results output with the latest results.
 * @param {string} interimResultText Low confidence recognition text (grey).
 * @param {string} finalResultText High confidence recognition text (black).
 */
view.updateSpeechResult = function(interimResultText, finalResultText) {
  if (view.isVisible_) {
    // If the Web Speech API is receiving speech recognition results
    // (|onresult|) and |onspeechstart| has not been called.
    if (view.container_.className != view.RECEIVING_SPEECH_CLASS_) {
      view.setReceivingSpeech();
    }
    text.updateTextArea(interimResultText, finalResultText);
  }
};

/**
 * Hides the UI and stops animations.
 */
view.hide = function() {
  window.removeEventListener('click', view.onWindowClick_, false);
  view.stopMicrophoneAnimations_();
  view.hideView_();
  view.isNoMatchShown_ = false;
  text.clear();
};

/**
 * Find the page elements that will be used to render the speech recognition
 * interface area.
 * @param {Function} onClick The function to call when there is a click event
 *    in the window.
 */
view.init = function(onClick) {
  view.onClick_ = onClick;

  view.dialog_ = $(view.DIALOG_ID_);
  view.background_ = $(view.BACKGROUND_ID_);
  view.container_ = $(view.CONTAINER_ID_);

  text.init();
  microphone.init();
};

/**
 * Sets accessibility titles/labels for the page elements.
 * @param {!Object} translatedStrings Dictionary of localized title strings.
 */
view.setTitles = function(translatedStrings) {
  const closeButton = $(view.CLOSE_BUTTON_ID);
  closeButton.title = translatedStrings.voiceCloseTooltip;
  closeButton.setAttribute('aria-label', translatedStrings.voiceCloseTooltip);
};

/**
 * Displays an error message and stops animations.
 * @param {RecognitionError} error The error type.
 */
view.showError = function(error) {
  view.container_.className = view.ERROR_RECEIVED_CLASS_;
  text.showErrorMessage(error);
  view.stopMicrophoneAnimations_();
  view.isNoMatchShown_ = (error == RecognitionError.NO_MATCH);
};

/**
 * Makes the view visible.
 * @private
 */
view.showView_ = function() {
  if (!view.isVisible_) {
    view.dialog_.showModal();
    view.background_.className = view.OVERLAY_HIDDEN_CLASS_;
    view.background_.className = view.OVERLAY_CLASS_;
    view.isVisible_ = true;
  }
};

/**
 * Hides the view.
 * @private
 */
view.hideView_ = function() {
  view.dialog_.close();
  view.background_.className = view.OVERLAY_HIDDEN_CLASS_;
  view.container_.className = view.INACTIVE_CLASS_;
  view.background_.removeAttribute('style');
  view.isVisible_ = false;
};

/**
 * Stops the animations in the microphone view.
 * @private
 */
view.stopMicrophoneAnimations_ = function() {
  microphone.stopInputAnimation();
};

/**
 * Makes sure that a click anywhere closes the UI when it is active.
 * @param {!Event} event The click event.
 * @private
 */
view.onWindowClick_ = function(event) {
  if (!view.isVisible_) {
    return;
  }
  const retryLinkClicked = event.target.id === text.RETRY_LINK_ID;
  const supportLinkClicked = event.target.id === text.SUPPORT_LINK_ID;
  const micIconClicked = event.target.id === microphone.RED_BUTTON_ID;

  const submitQuery = micIconClicked && !view.isNoMatchShown_;
  const shouldRetry =
      retryLinkClicked || (micIconClicked && view.isNoMatchShown_);
  const navigatingAway = supportLinkClicked;

  speech.usingKeyboardNavigation_ = false;

  if (shouldRetry) {
    if (micIconClicked) {
      speech.logEvent(LOG_TYPE.ACTION_TRY_AGAIN_MIC_BUTTON);
    } else if (retryLinkClicked) {
      speech.logEvent(LOG_TYPE.ACTION_TRY_AGAIN_LINK);
    }
  }
  if (supportLinkClicked) {
    speech.logEvent(LOG_TYPE.ACTION_SUPPORT_LINK_CLICKED);
  }

  view.onClick_(submitQuery, shouldRetry, navigatingAway);
};

/* END VIEW */
�PNG


IHDR

';6,IDATxc`hB���?\�C0,!���ԎiV'au<�
!���JIEND�B`��PNG


IHDR'�ՆLIDATx^��1 @��ϵ�p	0�@O�U��4�䁤�65+jFڌ��i3S0P2C3�0^��.��H����+|�懝B:�0IEND�B`�/* Copyright 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */
body {
  background: none transparent;
  margin: 0;
  overflow: hidden;
  user-select: none;
}

a {
  display: block;
  text-decoration: none;
}

a:active,
a:hover,
a:visited {
  color: inherit;
  text-decoration: inherit;
}
/* Copyright 2015 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

html {
  /* Material Design constants */
  --md-edit-menu-size: 20px;
  --md-fallback-letter-size: 16px;
  --md-favicon-size: 32px;
  --md-icon-margin-bottom: 16px;
  --md-icon-size: 48px;
  --md-max-tiles-row: 5;
  --md-menu-margin-side: 2px;
  --md-menu-margin-top: 4px;
  --md-menu-size: 12px;
  --md-tile-margin: 16px;
  --md-tile-padding-top: 16px;
  --md-tile-size: 112px;
  --md-title-font-size: 12px;
  --md-title-height: 24px;
  --md-title-max-height: 28px;

  /* May be overridden by themes (on the body element). */
  --icon-background-color: rgb(var(--GG100-rgb));
  --tile-title-color: rgb(var(--GG800-rgb));
}

body {
  background: none transparent;
  color: var(--tile-title-color);
  margin: 0;
  overflow: hidden;
  padding: 0;
  user-select: none;
}

a {
  display: block;
}

a,
a:active,
a:hover,
a:visited {
  text-decoration: none;
}

#most-visited {
  margin-top: 10px;
  text-align: -webkit-center;
  user-select: none;
  width: 100%;
}

#mv-tiles,
.mv-tiles-old {
  font-size: 0;
  opacity: 0;
  position: relative;
  transition: opacity 300ms;
  user-select: none;
}

.mv-tiles-old {
  left: 0;
  margin: auto;
  position: absolute;
  right: 0;
}

.mouse-navigation {
  outline: none;
}

.grid-tile-container {
  position: absolute;
  transition: transform 300ms ease-in-out;
}

.grid-tile {
  transition: transform 300ms ease-in-out;
}

/* Prevent transitions on the held tile in order for it to smoothly follow the
 * mouse. */
.reorder .grid-tile {
  transition-duration: 0s;
}

.reorder {
  z-index: 10;  /* Ensure the held tile is visible. */
}

.md-tile {
  border-radius: 4px;
  box-sizing: border-box;
  color: rgb(var(--tile-title-color));
  cursor: pointer;
  height: var(--md-tile-size);
  margin-bottom: var(--md-tile-margin);
  opacity: 1;
  padding-top: var(--md-tile-padding-top);
  position: relative;
  transition-property:
      background, background-color, border-color, box-shadow, opacity, filter;
  width: var(--md-tile-size);
}

.md-empty-tile {
  display: none;
}

body:not(.reordering) .md-tile:hover,
.reorder .md-tile {
  background-color: rgba(var(--GG900-rgb), .06);
}

@media (prefers-color-scheme: dark) {
  body:not(.reordering) .md-tile:hover,
  .reorder .md-tile {
    background-color: rgba(255, 255, 255, .1);
  }
}

body.dark-theme:not(.reordering) .md-tile:hover,
body.dark-theme .reorder .md-tile {
  background-color: rgba(255, 255, 255, .1);
}

body:not(.reordering) .md-tile:hover .md-menu {
  opacity: 1;
  transition-delay: 500ms;
}

body.dark-theme:not(.reordering) .md-tile:active + .md-menu::after {
  background-color: rgb(var(--GG400-rgb));
  transition-delay: 0ms;
}

.blacklisted {
  margin: 0;
  padding: 0;
  transform: scale(0, 0);
  transition-duration: 200ms;
  transition-property: transform, box-shadow, margin, opacity, padding, width;
  width: 0;
}

.md-tile-inner {
  align-items: center;
  display: flex;
  flex-flow: column nowrap;
  height: 100%;
  position: relative;
  width: 100%;
  z-index: -1;
}

.md-icon {
  align-items: center;
  background-color: var(--icon-background-color);
  border-radius: 50%;
  display: flex;
  height: var(--md-icon-size);
  justify-content: center;
  margin-bottom: var(--md-icon-margin-bottom);
  width: var(--md-icon-size);
}

.md-add-icon {
  background-image: url(chrome-search://most-visited/add_link.svg);
  background-position: center;
  background-repeat: no-repeat;
}

.use-white-add-icon .md-add-icon {
  background-image: url(chrome-search://most-visited/add_link_white.svg);
}

.md-fallback-letter {
  background-color: rgb(var(--GG600-rgb));
  border-radius: 50%;
  color: white;
  font-size: var(--md-fallback-letter-size);
  height: var(--md-favicon-size);
  line-height: var(--md-favicon-size);
  text-align: center;
  width: var(--md-favicon-size);
}

.win .md-fallback-letter {
  font-weight: 600;
}

.md-title {
  font-size: var(--md-title-font-size);
  font-weight: 500;
  max-height: var(--md-title-max-height);
  overflow: hidden;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
  width: 88px;
}

.md-title span {
  line-height: var(--md-title-height);
}

/* Font weight on Mac and ChromeOS looks heavier on default background and
 * needs to be reduced. */
body.mac-chromeos .md-title {
  font-weight: 400;
}

/* Apply when a custom background is set. */
body.custom-background .md-title {
  filter: drop-shadow(0 0 6px rgba(0, 0, 0, .35));
}

/* Apply only when a theme with image is installed. */
body.use-title-container .md-title {
  background-color: white;
  /* Necessary for a "pill" shape. Using 50% creates an oval. */
  border-radius: 500px;
  color: rgb(var(--GG800-rgb));
  filter: unset;
  padding: 0 8px;
}

.md-menu {
  background-color: transparent;
  border: none;
  cursor: pointer;
  height: var(--md-menu-size);
  margin: var(--md-menu-margin-top) var(--md-menu-margin-side);
  opacity: 0;
  position: absolute;
  right: 0;
  top: 0;
  width: var(--md-menu-size);
}

html[dir=rtl] .md-menu {
  left: 0;
  right: auto;
}

body:not(.reordering) .md-menu:active,
body:not(.reordering) .md-menu:focus:not(.mouse-navigation) {
  opacity: 1;
}

/* We use ::after without content to provide the masked X element. */
.md-menu::after {
  --mask-width: calc(var(--md-menu-size) - 2);
  /* TODO(crbug.com/1012065): Use SVG for the "X" icon. */
  -webkit-mask-image: -webkit-image-set(
      url(chrome-search://most-visited/dont_show.png) 1x,
      url(chrome-search://most-visited/dont_show_2x.png) 2x);
  -webkit-mask-repeat: no-repeat;
  -webkit-mask-size: var(--mask-width);
  background-color: rgb(var(--GG600-rgb));
  content: '';
  display: block;
  height: var(--md-menu-size);
  left: 0;
  position: absolute;
  top: 0;
  width: var(--md-menu-size);
}

@media (prefers-color-scheme: dark) {
  .md-menu::after {
    background-color: rgb(var(--GG200-rgb));
  }
}

.md-edit-menu {
  height: var(--md-edit-menu-size);
  width: var(--md-edit-menu-size);
}

.md-edit-menu::after {
  --mask-width: var(--md-edit-menu-size);
  -webkit-mask-image: url(chrome-search://most-visited/edit_menu.svg);
  height: var(--md-edit-menu-size);
  width: var(--md-edit-menu-size);
}

body:not(.reordering) .md-menu:hover::after,
body:not(.reordering) .md-menu:focus::after {
  background-color: rgb(var(--GG700-rgb));
}

@media (prefers-color-scheme: dark) {
  body:not(.reordering) .md-menu:hover::after,
  body:not(.reordering) .md-menu:focus::after {
    background-color: rgb(var(--GG400-rgb));
  }
}

body.dark-theme .md-tile .md-menu::after,
body.dark-theme:not(.reordering) .md-menu:focus:not(.mouse-navigation)::after {
  background-color: white;
}

@media (prefers-color-scheme: dark) {
  body.dark-theme .md-tile .md-menu::after,
  body.dark-theme:not(.reordering)
      .md-menu:focus:not(.mouse-navigation)::after {
    background-color: rgb(var(--GG200-rgb));
  }
}

body.dark-theme:not(.reordering) .md-menu:active::after,
body.dark-theme:not(.reordering) .md-menu:hover::after,
body.dark-theme:not(.reordering) .md-menu.mouse-navigation:focus::after {
  background-color: rgb(var(--GG300-rgb));
}

@media (prefers-color-scheme: dark) {
  body.dark-theme:not(.reordering) .md-menu:active::after,
  body.dark-theme:not(.reordering) .md-menu:hover::after,
  body.dark-theme:not(.reordering) .md-menu.mouse-navigation:focus::after {
    background-color: rgb(var(--GG400-rgb));
  }
}
<!doctype html>
<html>
<!-- Copyright 2015 The Chromium Authors. All rights reserved.
     Use of this source code is governed by a BSD-style license that can be
     found in the LICENSE file. -->
<head>
  <base target="_top">
  <meta charset="utf-8">
  <link rel="stylesheet" type="text/css" href="local-ntp-common.css">
  <link rel="stylesheet" type="text/css" href="single.css">
  <script src="assert.js"></script>
  <script src="utils.js"></script>
  <script src="single.js"></script>
</head>
<body>
  <!-- Keep in sync with most_visited_single_browsertest.html -->
  <div id="most-visited"></div>
</body>
</html>
/* Copyright 2015 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

// Single iframe for NTP tiles.

/**
 * Controls rendering the Most Visited iframe.
 * @return {Object} A limited interface for testing the iframe.
 */
function MostVisited() {
'use strict';

/**
 * Enum for key codes.
 * @enum {number}
 * @const
 */
const KEYCODES = {
  BACKSPACE: 8,
  DELETE: 46,
  DOWN: 40,
  ENTER: 13,
  ESC: 27,
  LEFT: 37,
  RIGHT: 39,
  SPACE: 32,
  TAB: 9,
  UP: 38,
};

/**
 * Enum for ids.
 * @enum {string}
 * @const
 */
const IDS = {
  MOST_VISITED: 'most-visited',  // Container for all tilesets.
  MV_TILES: 'mv-tiles',          // Most Visited tiles container.
};

/**
 * Enum for classnames.
 * @enum {string}
 * @const
 */
const CLASSES = {
  FAILED_FAVICON: 'failed-favicon',  // Applied when the favicon fails to load.
  GRID_TILE: 'grid-tile',
  GRID_TILE_CONTAINER: 'grid-tile-container',
  REORDER: 'reorder',  // Applied to the tile being moved while reordering.
  // Applied while we are reordering. Disables hover styling.
  REORDERING: 'reordering',
  MAC_CHROMEOS: 'mac-chromeos',  // Reduces font weight for MacOS and ChromeOS.
  // Material Design classes.
  MD_FALLBACK_LETTER: 'md-fallback-letter',
  MD_ICON: 'md-icon',
  MD_ADD_ICON: 'md-add-icon',
  MD_MENU: 'md-menu',
  MD_EDIT_MENU: 'md-edit-menu',
  MD_TILE: 'md-tile',
  MD_TILE_INNER: 'md-tile-inner',
  MD_TITLE: 'md-title',
};

/**
 * The different types of events that are logged from the NTP.  This enum is
 * used to transfer information from the NTP JavaScript to the renderer and is
 * not used as a UMA enum histogram's logged value.
 * Note: Keep in sync with common/ntp_logging_events.h
 * @enum {number}
 * @const
 */
const LOG_TYPE = {
  // All NTP tiles have finished loading (successfully or failing).
  NTP_ALL_TILES_LOADED: 11,
  // The 'Add shortcut' link was clicked.
  NTP_CUSTOMIZE_ADD_SHORTCUT_CLICKED: 44,
  // The 'Edit shortcut' link was clicked.
  NTP_CUSTOMIZE_EDIT_SHORTCUT_CLICKED: 45,
};

/**
 * The different (visual) types that an NTP tile can have.
 * Note: Keep in sync with components/ntp_tiles/tile_visual_type.h
 * @enum {number}
 * @const
 */
const TileVisualType = {
  NONE: 0,
  ICON_REAL: 1,
  ICON_COLOR: 2,
  ICON_DEFAULT: 3,
};

/**
 * Timeout delay for the window.onresize event throttle. Set to 15 frame per
 * second.
 * @const {number}
 */
const RESIZE_TIMEOUT_DELAY = 66;

/**
 * Maximum number of tiles if custom links is enabled.
 * @const {number}
 */
const MD_MAX_NUM_CUSTOM_LINK_TILES = 10;

/**
 * Maximum number of tiles if Most Visited is enabled.
 * @const {number}
 */
const MD_MAX_NUM_MOST_VISITED_TILES = 8;

/**
 * Maximum number of tiles per row for Material Design.
 * @const {number}
 */
const MD_MAX_TILES_PER_ROW = 5;

/**
 * Height of a tile for Material Design. Keep in sync with
 * most_visited_single.css.
 * @const {number}
 */
const MD_TILE_HEIGHT = 128;

/**
 * Width of a tile for Material Design. Keep in sync with
 * most_visited_single.css.
 * @const {number}
 */
const MD_TILE_WIDTH = 112;

/**
 * Number of tiles that will always be visible for Material Design. Calculated
 * by dividing minimum |--content-width| (see local_ntp.css) by |MD_TILE_WIDTH|
 * and multiplying by 2 rows.
 * @const {number}
 */
const MD_NUM_TILES_ALWAYS_VISIBLE = 6;

/**
 * The origin of this request, i.e. 'chrome-search://local-ntp' for the local
 * NTP.
 * @const {string}
 */
const DOMAIN_ORIGIN = '{{ORIGIN}}';

/**
 * Counter for DOM elements that we are waiting to finish loading. Starts out
 * at 1 because initially we're waiting for the "show" message from the parent.
 * @type {number}
 */
let loadedCounter = 1;

/**
 * DOM element containing the tiles we are going to present next.
 * Works as a double-buffer that is shown when we receive a "show" postMessage.
 * @type {Element}
 */
let tiles = null;

/**
 * List of parameters passed by query args.
 * @type {Object}
 */
let queryArgs = {};

/**
 * True if the custom links feature is enabled, i.e. when this is a Google NTP.
 * Set when the iframe is initialized.
 * @type {boolean}
 */
let customLinksFeatureEnabled = false;

/**
 * The current grid of tiles.
 * @type {?Grid}
 */
let currGrid = null;

/**
 * Additional API for Array. Moves the item at index |from| to index |to|.
 * @param {number} from Index of the item to move.
 * @param {number} to Index to move the item to.
 */
Array.prototype.move = function(from, to) {
  this.splice(to, 0, this.splice(from, 1)[0]);
};

/**
 * Class that handles layouts and animations for the tile grid. This includes
 * animations for adding, deleting, and reordering.
 */
class Grid {
  constructor() {
    /** @private {number} */
    this.tileHeight_ = 0;
    /** @private {number} */
    this.tileWidth_ = 0;
    /** @private {number} */
    this.tilesAlwaysVisible_ = 0;
    /**
     * The maximum number of tiles per row allowed by the grid parameters.
     * @private {number}
     */
    this.maxTilesPerRow_ = 0;
    /** @private {number} */
    this.maxTiles_ = 0;

    /** @private {number} */
    this.gridWidth_ = 0;
    /**
     * The maximum number of tiles per row allowed by the window width.
     * @private {number}
     */
    this.maxTilesPerRowWindow_ = 0;

    /** @private {?Element} */
    this.container_ = null;
    /** @private {?HTMLCollection} */
    this.tiles_ = null;

    /**
     * Array that stores the {x,y} positions of the tile layout.
     * @private {?Array<!Object>}
     */
    this.position_ = null;

    /**
     * Stores the current order of the tiles. Index corresponds to grid
     * position, while value is the index of the tile in |this.tiles_|.
     * @private {?Array<number>}
     */
    this.order_ = null;

    /** @private {number} The index of the tile we're reordering. */
    this.itemToReorder_ = -1;
    /** @private {number} The index to move the tile we're reordering to. */
    this.newIndexOfItemToReorder_ = -1;

    /** @private {boolean} True if the user is currently touching a tile. */
    this.touchStarted_ = false;
  }

  /**
   * Sets up the grid for the new tileset in |container|. The old tileset is
   * discarded.
   * @param {!Element} container The grid container element.
   * @param {Object=} params Customizable parameters for the grid. Used in
   *     testing.
   */
  init(container, params = {}) {
    this.container_ = container;

    this.tileHeight_ = params.tileHeight || MD_TILE_HEIGHT;
    this.tileWidth_ = params.tileWidth || MD_TILE_WIDTH;
    this.tilesAlwaysVisible_ =
        params.tilesAlwaysVisible || MD_NUM_TILES_ALWAYS_VISIBLE;
    this.maxTilesPerRow_ = params.maxTilesPerRow || MD_MAX_TILES_PER_ROW;
    this.maxTiles_ = params.maxTiles || getMaxNumTiles();

    this.maxTilesPerRowWindow_ = this.getMaxTilesPerRow_();

    this.tiles_ =
        this.container_.getElementsByClassName(CLASSES.GRID_TILE_CONTAINER);
    // Ignore any tiles past the maximum allowed.
    this.position_ = new Array(this.maxTiles_);
    this.order_ = new Array(this.maxTiles_);
    for (let i = 0; i < this.maxTiles_; i++) {
      this.position_[i] = {x: 0, y: 0};
      this.order_[i] = i;
    }

    if (isCustomLinksEnabled() || params.enableReorder) {
      // Set up reordering for all tiles except the add shortcut button.
      for (let i = 0; i < this.tiles_.length; i++) {
        if (this.tiles_[i].getAttribute('add') !== 'true') {
          this.setupReorder_(this.tiles_[i], i);
        }
      }
    }

    this.updateLayout();
  }

  /**
   * Returns a grid tile wrapper that contains |tile|.
   * @param {!Element} tile The tile element.
   * @param {number} rid The tile's restricted id.
   * @param {boolean} isAddButton True if this is the add shortcut button.
   * @return {!Element} A grid tile wrapper.
   */
  createGridTile(tile, rid, isAddButton) {
    const gridTileContainer = document.createElement('div');
    gridTileContainer.className = CLASSES.GRID_TILE_CONTAINER;
    gridTileContainer.setAttribute('rid', rid);
    gridTileContainer.setAttribute('add', isAddButton);
    const gridTile = document.createElement('div');
    gridTile.className = CLASSES.GRID_TILE;
    gridTile.appendChild(tile);
    gridTileContainer.appendChild(gridTile);
    return gridTileContainer;
  }

  /**
   * Updates the layout of the tiles. This is called for new tilesets and when
   * the window is resized or zoomed. Translates each tile's
   * |CLASSES.GRID_TILE_CONTAINER| to the correct position.
   */
  updateLayout() {
    const tilesPerRow = this.getTilesPerRow_();

    this.gridWidth_ = tilesPerRow * this.tileWidth_;
    this.container_.style.width = this.gridWidth_ + 'px';

    const maxVisibleTiles = tilesPerRow * 2;
    let x = 0;
    let y = 0;
    for (let i = 0; i < this.tiles_.length; i++) {
      const tile = this.tiles_[i];
      // Reset the offset for row 2.
      if (i === tilesPerRow) {
        x = this.getRow2Offset_(tilesPerRow);
        y = this.tileHeight_;
      }
      // Update the tile's position.
      this.translate_(tile, x, y);
      this.position_[i].x = x;
      this.position_[i].y = y;
      x += this.tileWidth_;  // Increment for the next tile.

      // Update visibility for tiles that may be hidden by the iframe border in
      // order to prevent keyboard navigation from reaching them. Ignores tiles
      // that will always be visible, since changing 'display' prevents
      // transitions from working.
      if (i >= this.tilesAlwaysVisible_) {
        const isVisible = i < maxVisibleTiles;
        tile.style.display = isVisible ? 'block' : 'none';
      }
    }
  }

  /**
   * Called when the window is resized/zoomed. Recalculates maximums for the new
   * window size and calls |updateLayout| if necessary.
   */
  onResize() {
    // Update the layout if the max number of tiles per row changes due to the
    // new window size.
    const maxPerRowWindow = this.getMaxTilesPerRow_();
    if (maxPerRowWindow !== this.maxTilesPerRowWindow_) {
      this.maxTilesPerRowWindow_ = maxPerRowWindow;
      this.updateLayout();
    }
  }

  /**
   * Returns the number of tiles per row. This may be balanced in order to make
   * even rows.
   * @return {number} The number of tiles per row.
   * @private
   */
  getTilesPerRow_() {
    const maxTilesPerRow =
        Math.min(this.maxTilesPerRow_, this.maxTilesPerRowWindow_);
    if (this.tiles_.length >= maxTilesPerRow * 2) {
      // We have enough for two full rows, so just return the max.
      return maxTilesPerRow;
    } else if (this.tiles_.length > maxTilesPerRow) {
      // We have have a little more than one full row, so we need to rebalance.
      return Math.ceil(this.tiles_.length / 2);
    } else {
      // We have (less than) a full row, so just return the tiles we have.
      return this.tiles_.length;
    }
  }

  /**
   * Returns the maximum number of tiles per row allowed by the window size.
   * @return {number} The maximum number of tiles per row.
   * @private
   */
  getMaxTilesPerRow_() {
    return Math.floor(window.innerWidth / this.tileWidth_);
  }

  /**
   * Returns row 2's x offset from row 1 in px. This will either be 0 or half a
   * tile length.
   * @param {number} tilesPerRow The number of tiles per row.
   * @return {number} The offset for row 2.
   * @private
   */
  getRow2Offset_(tilesPerRow) {
    // An odd number of tiles requires a half tile offset in the second row,
    // unless both rows are full (i.e. for smaller window widths).
    if (this.tiles_.length % 2 === 1 && this.tiles_.length / tilesPerRow < 2) {
      return Math.round(this.tileWidth_ / 2);
    }
    return 0;
  }

  /**
   * Returns true if the browser is in RTL.
   * @return {boolean}
   * @private
   */
  isRtl_() {
    return document.documentElement.dir === 'rtl';
  }

  /**
   * Translates the |element| by (x, y).
   * @param {?Element} element The element to apply the transform to.
   * @param {number} x The x value.
   * @param {number} y The y value.
   * @private
   */
  translate_(element, x, y) {
    if (!element) {
      throw new Error('Invalid element: cannot apply transform');
    }
    const rtlX = x * (this.isRtl_() ? -1 : 1);
    element.style.transform = 'translate(' + rtlX + 'px, ' + y + 'px)';
  }

  /**
   * Sets up event listeners necessary for tile reordering.
   * @param {!Element} tile Tile on which to set the event listeners.
   * @param {number} index The tile's index.
   * @private
   */
  setupReorder_(tile, index) {
    tile.setAttribute('index', index);

    // Set up mouse support.
    // Listen for the drag event on the tile instead of the tile container. The
    // tile container remains static during the reorder flow.
    tile.firstChild.draggable = true;
    // Prevent default drag events on the shortcut link.
    const tileItem = tile.firstChild.firstChild;
    tileItem.draggable = false;
    tile.firstChild.addEventListener('dragstart', (event) => {
      // Support link dragging (i.e. dragging the URL to the omnibox).
      event.dataTransfer.setData('text/uri-list', tileItem.href);
      // Remove the ghost image that appears when dragging.
      const emptyImg = new Image();
      event.dataTransfer.setDragImage(emptyImg, 0, 0);

      this.startReorder_(tile, event, /*mouseMode=*/ true);
    });
    // Show a 'move' cursor while dragging the tile within the grid bounds. This
    // is mostly intended for Windows, which will otherwise show a 'prohibited'
    // cursor.
    tile.addEventListener('dragover', (event) => {
      event.preventDefault();
      event.dataTransfer.dropEffect = 'move';
    });

    // Set up touch support.
    tile.firstChild.addEventListener('touchstart', (startEvent) => {
      // Ignore subsequent touchstart events, which can be triggered if a
      // different finger is placed on this tile.
      if (this.touchStarted_) {
        return;
      }
      this.touchStarted_ = true;

      // Start the reorder flow once the user moves their finger.
      const startReorder = (moveEvent) => {
        // Use the cursor position from 'touchstart' as the starting location.
        this.startReorder_(tile, startEvent, /*mouseMode=*/ false);
      };
      // Insert the held tile at the index we are hovering over.
      const moveOver = (moveEvent) => {
        // Touch events do not have a 'mouseover' equivalent, so we need to
        // manually check if we are hovering over a tile. If so, insert the held
        // tile there.
        // Note: The first item in |changedTouches| is the current position.
        const x = moveEvent.changedTouches[0].pageX;
        const y = moveEvent.changedTouches[0].pageY;
        this.reorderToIndexAtPoint_(x, y);
      };
      // Allow 'touchstart' events again when reordering stops/was never
      // started.
      const touchEnd = (endEvent) => {
        tile.firstChild.removeEventListener('touchmove', startReorder);
        tile.firstChild.removeEventListener('touchmove', moveOver);
        tile.firstChild.removeEventListener('touchend', touchEnd);
        tile.firstChild.removeEventListener('touchcancel', touchEnd);
        this.touchStarted_ = false;
      };

      tile.firstChild.addEventListener('touchmove', startReorder, {once: true});
      tile.firstChild.addEventListener('touchmove', moveOver);
      tile.firstChild.addEventListener('touchend', touchEnd, {once: true});
      tile.firstChild.addEventListener('touchcancel', touchEnd, {once: true});
    });
  }

  /**
   * Starts the reorder flow. Updates the visual style of the held tile to
   * indicate that it is being moved and sets up the relevant event listeners.
   * @param {!Element} tile Tile that is being moved.
   * @param {!Event} event The 'dragstart'/'touchmove' event. Used to obtain the
   *     current cursor position
   * @param {boolean} mouseMode True if the user is using a mouse.
   * @private
   */
  startReorder_(tile, event, mouseMode) {
    const index = Number(tile.getAttribute('index'));

    this.itemToReorder_ = index;
    this.newIndexOfItemToReorder_ = index;

    // Apply reorder styling.
    tile.classList.add(CLASSES.REORDER);
    // Disable other hover/active styling for all tiles.
    document.body.classList.add(CLASSES.REORDERING);

    // Set up event listeners for the reorder flow. Listen for drag events if
    // |mouseMode|, touch events otherwise.
    if (mouseMode) {
      const trackCursor =
          this.trackCursor_(tile, event.pageX, event.pageY, true);
      // The 'dragover' event must be tracked at the document level, since the
      // currently dragged tile will interfere with 'dragover' events on the
      // other tiles.
      const dragOver = (dragOverEvent) => {
        trackCursor(dragOverEvent);
        // Since the 'dragover' event is not tied to a specific tile, we need to
        // manually check if we are hovering over a tile. If so, insert the held
        // tile there.
        this.reorderToIndexAtPoint_(dragOverEvent.pageX, dragOverEvent.pageY);
      };
      document.addEventListener('dragover', dragOver);
      document.addEventListener('dragend', () => {
        document.removeEventListener('dragover', dragOver);
        this.stopReorder_(tile);
      }, {once: true});
    } else {
      // Track the cursor on subsequent 'touchmove' events (the first
      // 'touchmove' event that starts the reorder flow is ignored).
      const trackCursor = this.trackCursor_(
          tile, event.changedTouches[0].pageX, event.changedTouches[0].pageY,
          false);
      const touchEnd = (touchEndEvent) => {
        tile.firstChild.removeEventListener('touchmove', trackCursor);
        tile.firstChild.removeEventListener('touchend', touchEnd);
        tile.firstChild.removeEventListener('touchcancel', touchEnd);
        this.stopReorder_(tile);  // Stop the reorder flow.
      };
      tile.firstChild.addEventListener('touchmove', trackCursor);
      tile.firstChild.addEventListener('touchend', touchEnd, {once: true});
      tile.firstChild.addEventListener('touchcancel', touchEnd, {once: true});
    }
  }

  /**
   * Stops the reorder flow. Resets the held tile's visual style and tells the
   * EmbeddedSearchAPI that a tile has been moved.
   * @param {!Element} tile Tile that has been moved.
   * @private
   */
  stopReorder_(tile) {
    const index = Number(tile.getAttribute('index'));

    // Remove reorder styling.
    tile.classList.remove(CLASSES.REORDER);
    document.body.classList.remove(CLASSES.REORDERING);

    // Move the tile to its new position and notify EmbeddedSearchAPI that the
    // tile has been moved.
    this.applyReorder_(tile, this.newIndexOfItemToReorder_);
    chrome.embeddedSearch.newTabPage.reorderCustomLink(
        Number(this.tiles_[index].getAttribute('rid')),
        this.newIndexOfItemToReorder_);

    this.itemToReorder_ = -1;
    this.newIndexOfItemToReorder_ = -1;
  }

  /**
   * Attempts to insert the currently held tile at the index located at (x, y).
   * Does nothing if there is no tile at (x, y) or the reorder flow is not
   * ongoing.
   * @param {number} x The x coordinate.
   * @param {number} y The y coordinate.
   * @private
   */
  reorderToIndexAtPoint_(x, y) {
    const elements = document.elementsFromPoint(x, y);
    for (let i = 0; i < elements.length; i++) {
      if (elements[i].classList.contains(CLASSES.GRID_TILE_CONTAINER) &&
          elements[i].getAttribute('index') !== null) {
        this.reorderToIndex_(Number(elements[i].getAttribute('index')));
        return;
      }
    }
  }

  /**
   * Executed only when the reorder flow is ongoing. Inserts the currently held
   * tile at |index| and shifts tiles accordingly.
   * @param {number} index The index to insert the held tile at.
   * @private
   */
  reorderToIndex_(index) {
    if (this.newIndexOfItemToReorder_ === index ||
        !document.body.classList.contains(CLASSES.REORDERING)) {
      return;
    }

    // Moves the held tile from its current position to |index|.
    this.order_.move(this.newIndexOfItemToReorder_, index);
    this.newIndexOfItemToReorder_ = index;
    // Shift tiles according to the new order.
    for (let i = 0; i < this.tiles_.length; i++) {
      const tileIndex = this.order_[i];
      // Don't move the tile we're holding nor the add shortcut button.
      if (tileIndex === this.itemToReorder_ ||
          this.tiles_[i].getAttribute('add') === 'true') {
        continue;
      }
      this.applyReorder_(this.tiles_[tileIndex], i);
    }
  }

  /**
   * Translates the |tile|'s |CLASSES.GRID_TILE| from |index| to |newIndex|.
   * This is done to prevent interference with event listeners on the |tile|'s
   * |CLASSES.GRID_TILE_CONTAINER|, particularly 'mouseover'.
   * @param {!Element} tile Tile that is being shifted.
   * @param {number} newIndex New index for the tile.
   * @private
   */
  applyReorder_(tile, newIndex) {
    if (tile.getAttribute('index') === null) {
      throw new Error('Tile does not have an index.');
    }
    const index = Number(tile.getAttribute('index'));
    const x = this.position_[newIndex].x - this.position_[index].x;
    const y = this.position_[newIndex].y - this.position_[index].y;
    this.translate_(tile.children[0], x, y);
  }

  /**
   * Moves |tile| so that it tracks the cursor's position. This is done by
   * translating the |tile|'s |CLASSES.GRID_TILE|, which prevents interference
   * with event listeners on the |tile|'s |CLASSES.GRID_TILE_CONTAINER|.
   * @param {!Element} tile Tile that is being moved.
   * @param {number} origCursorX Original x cursor position.
   * @param {number} origCursorY Original y cursor position.
   * @param {boolean} mouseMode True if the user is using a mouse.
   * @private
   */
  trackCursor_(tile, origCursorX, origCursorY, mouseMode) {
    const index = Number(tile.getAttribute('index'));
    // RTL positions align with the right side of the grid. Therefore, the x
    // value must be recalculated to align with the left.
    const origPosX = this.isRtl_() ?
        (this.gridWidth_ - (this.position_[index].x + this.tileWidth_)) :
        this.position_[index].x;
    const origPosY = this.position_[index].y;

    // Get the max translation allowed by the grid boundaries. This will be the
    // x of the last tile in a row and the y of the tiles in the second row.
    const maxTranslateX = this.gridWidth_ - this.tileWidth_;
    const maxTranslateY = this.tileHeight_;

    const maxX = maxTranslateX - origPosX;
    const maxY = maxTranslateY - origPosY;
    const minX = 0 - origPosX;
    const minY = 0 - origPosY;

    return (event) => {
      const currX = mouseMode ? event.pageX : event.changedTouches[0].pageX;
      const currY = mouseMode ? event.pageY : event.changedTouches[0].pageY;
      // Do not exceed the iframe borders.
      const x = Math.max(Math.min(currX - origCursorX, maxX), minX);
      const y = Math.max(Math.min(currY - origCursorY, maxY), minY);
      tile.firstChild.style.transform = 'translate(' + x + 'px, ' + y + 'px)';
    };
  }
}

/**
 * Log an event on the NTP.
 * @param {number} eventType Event from LOG_TYPE.
 */
function logEvent(eventType) {
  chrome.embeddedSearch.newTabPage.logEvent(eventType);
}

/**
 * Log impression of an NTP tile.
 * @param {number} tileIndex Position of the tile, >= 0 and < getMaxNumTiles().
 * @param {number} tileTitleSource The source of the tile's title as received
 *     from getMostVisitedItemData.
 * @param {number} tileSource The tile's source as received from
 *     getMostVisitedItemData.
 * @param {number} tileType The tile's visual type from TileVisualType.
 * @param {Date} dataGenerationTime Timestamp representing when the tile was
 *     produced by a ranking algorithm.
 */
function logMostVisitedImpression(
    tileIndex, tileTitleSource, tileSource, tileType, dataGenerationTime) {
  chrome.embeddedSearch.newTabPage.logMostVisitedImpression(
      tileIndex, tileTitleSource, tileSource, tileType, dataGenerationTime);
}

/**
 * Log click on an NTP tile.
 * @param {number} tileIndex Position of the tile, >= 0 and < getMaxNumTiles().
 * @param {number} tileTitleSource The source of the tile's title as received
 *     from getMostVisitedItemData.
 * @param {number} tileSource The tile's source as received from
 *     getMostVisitedItemData.
 * @param {number} tileType The tile's visual type from TileVisualType.
 * @param {Date} dataGenerationTime Timestamp representing when the tile was
 *     produced by a ranking algorithm.
 */
function logMostVisitedNavigation(
    tileIndex, tileTitleSource, tileSource, tileType, dataGenerationTime) {
  chrome.embeddedSearch.newTabPage.logMostVisitedNavigation(
      tileIndex, tileTitleSource, tileSource, tileType, dataGenerationTime);
}

/**
 * Returns true if custom links are enabled.
 * @return {boolean}
 */
function isCustomLinksEnabled() {
  return customLinksFeatureEnabled &&
      !chrome.embeddedSearch.newTabPage.isUsingMostVisited;
}

/**
 * Returns the maximum number of tiles to show at any time. This can be changed
 * depending on what feature is enabled.
 * @return {number}
 */
function getMaxNumTiles() {
  return isCustomLinksEnabled() ? MD_MAX_NUM_CUSTOM_LINK_TILES :
                                  MD_MAX_NUM_MOST_VISITED_TILES;
}

/**
 * Down counts the DOM elements that we are waiting for the page to load.
 * When we get to 0, we send a message to the parent window.
 * This is usually used as an EventListener of onload/onerror.
 */
function countLoad() {
  loadedCounter -= 1;
  if (loadedCounter <= 0) {
    swapInNewTiles();
    logEvent(LOG_TYPE.NTP_ALL_TILES_LOADED);
    let tilesAreCustomLinks = isCustomLinksEnabled() &&
        chrome.embeddedSearch.newTabPage.isCustomLinks;
    // Tell the parent page whether to show the restore default shortcuts option
    // in the menu.
    window.parent.postMessage(
        {cmd: 'loaded', showRestoreDefault: tilesAreCustomLinks},
        DOMAIN_ORIGIN);
    tilesAreCustomLinks = false;
    // Reset to 1, so that any further 'show' message will cause us to swap in
    // fresh tiles.
    loadedCounter = 1;
  }
}

/**
 * Handles postMessages coming from the host page to the iframe.
 * Mostly, it dispatches every command to handleCommand.
 */
function handlePostMessage(event) {
  if (event.data instanceof Array) {
    for (let i = 0; i < event.data.length; ++i) {
      handleCommand(event.data[i]);
    }
  } else {
    handleCommand(event.data);
  }
}

/**
 * Handles a single command coming from the host page to the iframe.
 * We try to keep the logic here to a minimum and just dispatch to the relevant
 * functions.
 */
function handleCommand(data) {
  const cmd = data.cmd;

  if (cmd == 'tile') {
    addTile(data);
  } else if (cmd == 'show') {
    // TODO(crbug.com/946225): If this happens before we have finished loading
    // the previous tiles, we probably get into a bad state. If/when the iframe
    // is removed this might no longer be a concern.
    showTiles();
  } else if (cmd == 'updateTheme') {
    updateTheme(data);
  } else if (cmd === 'focusMenu') {
    focusTileMenu(data);
  } else {
    console.error('Unknown command: ' + JSON.stringify(data));
  }
}

/**
 * Handler for the 'show' message from the host page.
 */
function showTiles() {
  utils.setPlatformClass(document.body);
  countLoad();
}

/**
 * Handler for the 'updateTheme' message from the host page.
 * @param {!Object} info Data received in the message.
 */
function updateTheme(info) {
  document.body.style.setProperty('--tile-title-color', info.tileTitleColor);
  document.body.style.setProperty(
      '--icon-background-color', info.iconBackgroundColor);
  document.body.classList.toggle('dark-theme', info.isThemeDark);
  document.body.classList.toggle('use-title-container', info.useTitleContainer);
  document.body.classList.toggle('custom-background', info.customBackground);
  document.body.classList.toggle('use-white-add-icon', info.useWhiteAddIcon);

  // Reduce font weight on the default(white) background for Mac and CrOS.
  document.body.classList.toggle(
      CLASSES.MAC_CHROMEOS,
      !info.isThemeDark && !info.useTitleContainer &&
          (navigator.userAgent.indexOf('Mac') > -1 ||
           navigator.userAgent.indexOf('CrOS') > -1));
}

/**
 * Handler for 'focusMenu' message from the host page. Focuses the edited tile's
 * menu or the add shortcut tile after closing the custom link edit dialog
 * without saving.
 * @param {!Object} info Data received in the message.
 */
function focusTileMenu(info) {
  const tile = document.querySelector(`a.md-tile[data-rid="${info.rid}"]`);
  if (info.rid === -1 /* Add shortcut tile */) {
    tile.focus();
  } else {
    tile.parentNode.childNodes[1].focus();
  }
}

/**
 * Removes all old instances of |IDS.MV_TILES| that are pending for deletion.
 */
function removeAllOldTiles() {
  const parent = document.querySelector('#' + IDS.MOST_VISITED);
  const oldList = parent.querySelectorAll('.mv-tiles-old');
  for (let i = 0; i < oldList.length; ++i) {
    parent.removeChild(oldList[i]);
  }
}

/**
 * Called when all tiles have finished loading (successfully or not), and we are
 * ready to show the new tiles and drop the old ones.
 */
function swapInNewTiles() {
  // Store the tiles on the current closure.
  const cur = tiles;

  // Add an "add new custom link" button if we haven't reached the maximum
  // number of tiles.
  if (isCustomLinksEnabled() && cur.childNodes.length < getMaxNumTiles()) {
    const data = {
      'rid': -1,
      'title': queryArgs['addLink'],
      'url': '',
      'isAddButton': true,
      'dataGenerationTime': new Date(),
      'tileSource': -1,
      'tileTitleSource': -1
    };
    tiles.appendChild(renderTile(data));
  }

  const parent = document.querySelector('#' + IDS.MOST_VISITED);

  const old = parent.querySelector('#' + IDS.MV_TILES);
  if (old) {
    // Mark old tile DIV for removal after the transition animation is done.
    old.removeAttribute('id');
    old.classList.add('mv-tiles-old');
    old.style.opacity = 0.0;
    cur.addEventListener('transitionend', function(ev) {
      if (ev.target === cur) {
        removeAllOldTiles();
      }
    });
  }

  // Add new tileset.
  cur.id = IDS.MV_TILES;
  parent.appendChild(cur);

  // Initialize the new tileset before modifying opacity. This will prevent the
  // transform transition from applying after the tiles fade in.
  currGrid.init(cur);

  const flushOpacity = () => window.getComputedStyle(cur).opacity;

  // getComputedStyle causes the initial style (opacity 0) to be applied, so
  // that when we then set it to 1, that triggers the CSS transition.
  flushOpacity();
  cur.style.opacity = 1.0;

  // Make sure the tiles variable contain the next tileset we'll use if the host
  // page sends us an updated set of tiles.
  tiles = document.createElement('div');
}

/**
 * Explicitly hide tiles that are not visible in order to prevent keyboard
 * navigation.
 */
function updateTileVisibility() {
  const allTiles =
      document.querySelectorAll('#' + IDS.MV_TILES + ' .' + CLASSES.MD_TILE);
  if (allTiles.length === 0) {
    return;
  }

  // Get the current number of tiles per row. Hide any tile after the first two
  // rows.
  const tilesPerRow = Math.trunc(document.body.offsetWidth / MD_TILE_WIDTH);
  for (let i = MD_NUM_TILES_ALWAYS_VISIBLE; i < allTiles.length; i++) {
    allTiles[i].style.display = (i < tilesPerRow * 2) ? 'block' : 'none';
  }
}

/**
 * Handler for the 'show' message from the host page, called when it wants to
 * add a suggestion tile.
 * @param {!MostVisitedData} args Data for the tile to be rendered.
 */
function addTile(args) {
  if (!isFinite(args.rid)) {
    return;
  }

  // Grab the tile's data from the embeddedSearch API.
  const data =
      chrome.embeddedSearch.newTabPage.getMostVisitedItemData(args.rid);
  if (!data) {
    return;
  }

  if (!data.faviconUrl) {
    data.faviconUrl = 'chrome-search://favicon/size/16@' +
        window.devicePixelRatio + 'x/' + data.renderViewId + '/' + data.rid;
  }
  tiles.appendChild(renderTile(data));
}

/**
 * Called when the user decided to add a tile to the blacklist.
 * It sets off the animation for the blacklist and sends the blacklisted id
 * to the host page.
 * @param {Element} tile DOM node of the tile we want to remove.
 */
function blacklistTile(tile) {
  const rid = Number(tile.getAttribute('data-rid'));

  if (isCustomLinksEnabled()) {
    chrome.embeddedSearch.newTabPage.deleteMostVisitedItem(rid);
  } else {
    tile.classList.add('blacklisted');
    tile.addEventListener('transitionend', function(ev) {
      if (ev.propertyName != 'width') {
        return;
      }
      window.parent.postMessage(
          {cmd: 'tileBlacklisted', rid: Number(rid)}, DOMAIN_ORIGIN);
    });
  }
}

/**
 * Starts edit custom link flow. Tells host page to show the edit custom link
 * dialog and pre-populate it with data obtained using the link's id.
 * @param {?number} rid Restricted id of the tile we want to edit.
 */
function editCustomLink(rid) {
  window.parent.postMessage({cmd: 'startEditLink', rid: rid}, DOMAIN_ORIGIN);
}

/**
 * Renders a MostVisited tile (i.e. shortcut) to the DOM.
 * @param {!MostVisitedData} data Object containing rid, url, title, favicon,
 *     and optionally isAddButton. isAddButton is true if you want to construct
 *     an add custom link button, and can only be set if custom links is
 *     enabled.
 * @return {Element}
 */
function renderTile(data) {
  const mdTile = document.createElement('a');
  mdTile.className = CLASSES.MD_TILE;

  // The tile will be appended to |tiles|.
  const position = tiles.children.length;
  // This is set in the load/error event for the favicon image.
  let tileType = TileVisualType.NONE;

  mdTile.setAttribute('data-rid', data.rid);
  mdTile.setAttribute('data-pos', position);
  if (utils.isSchemeAllowed(data.url)) {
    mdTile.href = data.url;
  }
  mdTile.setAttribute('aria-label', data.title);
  mdTile.title = data.title;

  mdTile.addEventListener('click', function(ev) {
    if (data.isAddButton) {
      editCustomLink(null);
      logEvent(LOG_TYPE.NTP_CUSTOMIZE_ADD_SHORTCUT_CLICKED);
    } else {
      logMostVisitedNavigation(
          position, data.tileTitleSource, data.tileSource, tileType,
          data.dataGenerationTime);
    }
  });
  mdTile.addEventListener('keydown', function(event) {
    if ((event.keyCode === KEYCODES.DELETE ||
         event.keyCode === KEYCODES.BACKSPACE) &&
        !data.isAddButton) {
      event.preventDefault();
      event.stopPropagation();
      blacklistTile(mdTile);
    } else if (
        event.keyCode === KEYCODES.ENTER || event.keyCode === KEYCODES.SPACE) {
      event.preventDefault();
      this.click();
    } else if (event.keyCode === KEYCODES.LEFT) {
      const tiles = document.querySelectorAll(
          '#' + IDS.MV_TILES + ' .' + CLASSES.MD_TILE);
      tiles[Math.max(Number(this.getAttribute('data-pos')) - 1, 0)].focus();
    } else if (event.keyCode === KEYCODES.RIGHT) {
      const tiles = document.querySelectorAll(
          '#' + IDS.MV_TILES + ' .' + CLASSES.MD_TILE);
      tiles[Math.min(
                Number(this.getAttribute('data-pos')) + 1, tiles.length - 1)]
          .focus();
    }
  });
  utils.disableOutlineOnMouseClick(mdTile);

  const mdTileInner = document.createElement('div');
  mdTileInner.className = CLASSES.MD_TILE_INNER;

  if (data.isAddButton) {
    mdTile.tabIndex = 0;

    const mdIconAdd = document.createElement('div');
    mdIconAdd.classList.add(CLASSES.MD_ICON);
    mdIconAdd.classList.add(CLASSES.MD_ADD_ICON);

    mdTileInner.appendChild(mdIconAdd);
  } else {
    const mdIcon = document.createElement('img');
    mdIcon.classList.add(CLASSES.MD_ICON);
    // Set title and alt to empty so screen readers won't say the image name.
    mdIcon.title = '';
    mdIcon.alt = '';
    const url = new URL('chrome-search://ntpicon/');
    url.searchParams.set('size', '24@' + window.devicePixelRatio + 'x');
    url.searchParams.set('url', data.url);
    mdIcon.src = url.toString();
    loadedCounter += 1;
    mdIcon.addEventListener('load', function(ev) {
      // Store the type for a potential later navigation.
      tileType = TileVisualType.ICON_REAL;
      logMostVisitedImpression(
          position, data.tileTitleSource, data.tileSource, tileType,
          data.dataGenerationTime);
      // Note: It's important to call countLoad last, because that might emit
      // the NTP_ALL_TILES_LOADED event, which must happen after the impression
      // log.
      countLoad();
    });
    mdIcon.addEventListener('error', function(ev) {
      const fallbackBackground = document.createElement('div');
      fallbackBackground.className = CLASSES.MD_ICON;
      const fallbackLetter = document.createElement('div');
      fallbackLetter.className = CLASSES.MD_FALLBACK_LETTER;
      fallbackLetter.textContent = data.title.charAt(0).toUpperCase();
      fallbackBackground.classList.add(CLASSES.FAILED_FAVICON);

      fallbackBackground.appendChild(fallbackLetter);
      mdTileInner.replaceChild(fallbackBackground, mdIcon);

      // Store the type for a potential later navigation.
      tileType = TileVisualType.ICON_DEFAULT;
      logMostVisitedImpression(
          position, data.tileTitleSource, data.tileSource, tileType,
          data.dataGenerationTime);
      // Note: It's important to call countLoad last, because that might emit
      // the NTP_ALL_TILES_LOADED event, which must happen after the impression
      // log.
      countLoad();
    });

    mdTileInner.appendChild(mdIcon);
  }

  const mdTitle = document.createElement('div');
  mdTitle.className = CLASSES.MD_TITLE;
  mdTitle.style.direction = data.direction || 'ltr';
  const mdTitleTextwrap = document.createElement('span');
  mdTitleTextwrap.innerText = data.title;
  mdTitle.appendChild(mdTitleTextwrap);
  mdTileInner.appendChild(mdTitle);
  mdTile.appendChild(mdTileInner);

  if (!data.isAddButton) {
    const mdMenu = document.createElement('button');
    mdMenu.className = CLASSES.MD_MENU;
    if (isCustomLinksEnabled()) {
      mdMenu.classList.add(CLASSES.MD_EDIT_MENU);
      mdMenu.title = queryArgs['editLinkTooltip'] || '';
      mdMenu.setAttribute(
          'aria-label',
          (queryArgs['editLinkTooltip'] || '') + ' ' + data.title);
      mdMenu.addEventListener('click', function(ev) {
        editCustomLink(data.rid);
        ev.preventDefault();
        ev.stopPropagation();
        logEvent(LOG_TYPE.NTP_CUSTOMIZE_EDIT_SHORTCUT_CLICKED);
      });
    } else {
      mdMenu.title = queryArgs['removeTooltip'] || '';
      mdMenu.setAttribute(
          'aria-label', (queryArgs['removeTooltip'] || '') + ' ' + data.title);
      mdMenu.addEventListener('click', function(ev) {
        removeAllOldTiles();
        blacklistTile(mdTile);
        ev.preventDefault();
        ev.stopPropagation();
      });
    }
    // Don't allow the event to bubble out to the containing tile, as that would
    // trigger navigation to the tile URL.
    mdMenu.addEventListener('keydown', function(ev) {
      ev.stopPropagation();
    });
    utils.disableOutlineOnMouseClick(mdMenu);

    mdTile.appendChild(mdMenu);
  }

  return currGrid.createGridTile(mdTile, data.rid, !!data.isAddButton);
}

/**
 * Does some initialization and parses the query arguments passed to the iframe.
 */
function init() {
  // Create a new DOM element to hold the tiles. The tiles will be added
  // one-by-one via addTile, and the whole thing will be inserted into the page
  // in swapInNewTiles, after the parent has sent us the 'show' message, and all
  // favicons have loaded.
  tiles = document.createElement('div');

  // Parse query arguments.
  const query = window.location.search.substring(1).split('&');
  queryArgs = {};
  for (let i = 0; i < query.length; ++i) {
    const val = query[i].split('=');
    if (val[0] == '') {
      continue;
    }
    queryArgs[decodeURIComponent(val[0])] = decodeURIComponent(val[1]);
  }

  document.title = queryArgs['title'];

  // Enable RTL.
  if (queryArgs['rtl'] == '1') {
    document.documentElement.dir = 'rtl';
  }

  // Enable custom links.
  if (queryArgs['enableCustomLinks'] == '1') {
    customLinksFeatureEnabled = true;
  }

  currGrid = new Grid();
  // Set up layout updates on window resize. Throttled according to
  // |RESIZE_TIMEOUT_DELAY|.
  let resizeTimeout;
  window.onresize = () => {
    if (resizeTimeout) {
      window.clearTimeout(resizeTimeout);
    }
    resizeTimeout = window.setTimeout(() => {
      resizeTimeout = null;
      currGrid.onResize();
    }, RESIZE_TIMEOUT_DELAY);
  };

  window.addEventListener('message', handlePostMessage);
}

/**
 * Binds event listeners.
 */
function listen() {
  document.addEventListener('DOMContentLoaded', init);
}

return {
  Grid: Grid,  // Exposed for testing.
  init: init,  // Exposed for testing.
  listen: listen,
};
}

if (!window.mostVisitedUnitTest) {
  MostVisited().listen();
}
/* Copyright 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */
html {
  height: 100%;
}

body {
  height: 100%;
  width: 100%;
}

a {
  height: 100%;
  line-height: 117%;
  overflow: hidden;
  text-align: center;  /* Can be overridden in JS. */
  text-overflow: ellipsis;  /* Can be overridden in JS. */
  white-space: nowrap;  /* Can be overridden in JS. */
}

a.multiline {
  text-overflow: clip;
  white-space: pre-wrap;
  word-wrap: break-word;
}

a:focus {
  outline: none;  /* Remove outline from tabIndex = -1. */
}
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="common.css">
  <link rel="stylesheet" href="title.css">
  <script src="assert.js"></script>
  <script src="util.js"></script>
  <script src="title.js"></script>
</head>
<body>
</body>
</html>
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Rendering for iframed most visited titles.
 */

window.addEventListener('DOMContentLoaded', function() {
  'use strict';

  fillMostVisited(window.location, function(params, data) {
    document.body.appendChild(createMostVisitedLink(
        params, data.url, data.title, data.title, data.direction));
  });
});
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * @fileoverview Utilities for rendering most visited thumbnails and titles.
 */

/**
 * The origin of this request.
 * @const {string}
 */
const MV_DOMAIN_ORIGIN = '{{ORIGIN}}';

/**
 * Converts an RGB color number to a hex color string if valid.
 * @param {number} color A 6-digit hex RGB color code as a number.
 * @return {?string} A CSS representation of the color or null if invalid.
 */
function convertToHexColor(color) {
  // Color must be a number, finite, with no fractional part, in the correct
  // range for an RGB hex color.
  if (isFinite(color) && Math.floor(color) == color && color >= 0 &&
      color <= 0xffffff) {
    const hexColor = color.toString(16);
    // Pads with initial zeros and # (e.g. for 'ff' yields '#0000ff').
    return '#000000'.substr(0, 7 - hexColor.length) + hexColor;
  }
  return null;
}

/**
 * Validates a RGBA color component. It must be a number between 0 and 255.
 * @param {number} component An RGBA component.
 * @return {boolean} True if the component is valid.
 */
function isValidRBGAComponent(component) {
  return isFinite(component) && component >= 0 && component <= 255;
}

/**
 * Converts an Array of color components into RGBA format "rgba(R,G,B,A)".
 * @param {Array<number>} rgbaColor Array of rgba color components.
 * @return {?string} CSS color in RGBA format or null if invalid.
 */
function convertArrayToRGBAColor(rgbaColor) {
  // Array must contain 4 valid components.
  if (rgbaColor instanceof Array && rgbaColor.length === 4 &&
      isValidRBGAComponent(rgbaColor[0]) &&
      isValidRBGAComponent(rgbaColor[1]) &&
      isValidRBGAComponent(rgbaColor[2]) &&
      isValidRBGAComponent(rgbaColor[3])) {
    return 'rgba(' + rgbaColor[0] + ',' + rgbaColor[1] + ',' + rgbaColor[2] +
        ',' + rgbaColor[3] / 255 + ')';
  }
  return null;
}

/**
 * Parses query parameters from Location.
 * @param {!Location} location The URL to generate the CSS url for.
 * @return {Object} Dictionary containing name value pairs for URL.
 *
 * TODO(dbeam): we should update callers of this method to use
 * URLSearchParams#get() instead (which I have a higher confidence handles
 * escaping and edge cases correctly). Note: that calling URLSearchParams#get()
 * also has the behavior of only returning the first &param= in the URL (i.e.
 * ?param=1&param=2 + .get('param') would return '1').
 */
function parseQueryParams(location) {
  const params = Object.create(null);
  const query = location.search.substring(1);
  const vars = query.split('&');
  for (let i = 0; i < vars.length; i++) {
    const pair = vars[i].split('=');
    const k = decodeURIComponent(pair[0]);
    if (k in params) {
      // Duplicate parameters are not allowed to prevent attackers who can
      // append things to |location| from getting their parameter values to
      // override legitimate ones.
      return Object.create(null);
    } else {
      params[k] = decodeURIComponent(pair[1]);
    }
  }
  return params;
}

/**
 * Creates a new most visited link element.
 * @param {Object} params URL parameters containing styles for the link.
 * @param {string} href The destination for the link.
 * @param {string} title The title for the link.
 * @param {string|undefined} text The text for the link or none.
 * @param {string|undefined} direction The text direction.
 * @return {!Element} A new link element.
 */
function createMostVisitedLink(params, href, title, text, direction) {
  const styles = getMostVisitedStyles(params, !!text);
  const link = document.createElement('a');
  link.style.color = styles.color;
  link.style.fontSize = styles.fontSize + 'px';
  if (styles.fontFamily) {
    link.style.fontFamily = styles.fontFamily;
  }
  if (styles.textAlign) {
    link.style.textAlign = styles.textAlign;
  }
  if (styles.textFadePos) {
    const dir = /^rtl$/i.test(direction) ? 'to left' : 'to right';
    // The fading length in pixels is passed by the caller.
    const mask = 'linear-gradient(' + dir + ', rgba(0,0,0,1), rgba(0,0,0,1) ' +
        styles.textFadePos + 'px, rgba(0,0,0,0))';
    link.style.textOverflow = 'clip';
    link.style.webkitMask = mask;
  }
  if (styles.numTitleLines && styles.numTitleLines > 1) {
    link.classList.add('multiline');
  }

  link.href = href;
  link.title = title;
  link.target = '_top';
  // Include links in the tab order.  The tabIndex is necessary for
  // accessibility.
  link.tabIndex = '0';
  if (text) {
    // Wrap text with span so ellipsis will appear at the end of multiline.
    const spanWrap = document.createElement('span');
    spanWrap.textContent = text;
    link.appendChild(spanWrap);
  }
  link.addEventListener('focus', function() {
    window.parent.postMessage('linkFocused', MV_DOMAIN_ORIGIN);
  });
  link.addEventListener('blur', function() {
    window.parent.postMessage('linkBlurred', MV_DOMAIN_ORIGIN);
  });

  link.addEventListener('keydown', function(event) {
    if (event.keyCode == 46 /* DELETE */ ||
        event.keyCode == 8 /* BACKSPACE */) {
      event.preventDefault();
      window.parent.postMessage(
          'tileBlacklisted,' + params['pos'], MV_DOMAIN_ORIGIN);
    } else if (
        event.keyCode == 13 /* ENTER */ || event.keyCode == 32 /* SPACE */) {
      // Event target is the <a> tag. Send a click event on it, which will
      // trigger the 'click' event registered above.
      event.preventDefault();
      event.target.click();
    }
  });

  return link;
}

/**
 * Returns the color to display string with, depending on whether title is
 * displayed, the current theme, and URL parameters.
 * @param {Object<string>} params URL parameters specifying style.
 * @param {boolean} isTitle if the style is for the Most Visited Title.
 * @return {string} The color to use, in "rgba(#,#,#,#)" format.
 */
function getTextColor(params, isTitle) {
  // 'RRGGBBAA' color format overrides everything.
  if ('c' in params && params.c.match(/^[0-9A-Fa-f]{8}$/)) {
    // Extract the 4 pairs of hex digits, map to number, then form rgba().
    const t = params.c.match(/(..)(..)(..)(..)/).slice(1).map(function(s) {
      return parseInt(s, 16);
    });
    return 'rgba(' + t[0] + ',' + t[1] + ',' + t[2] + ',' + t[3] / 255 + ')';
  }

  // For backward compatibility with server-side NTP, look at themes directly
  // and use param.c for non-title or as fallback.
  const apiHandle = chrome.embeddedSearch.newTabPage;
  const ntpTheme = assert(apiHandle.ntpTheme);
  let c = '#777';
  if (isTitle && ntpTheme && !ntpTheme.usingDefaultTheme) {
    // Read from theme directly
    c = convertArrayToRGBAColor(ntpTheme.textColorRgba) || c;
  } else if ('c' in params) {
    c = convertToHexColor(parseInt(params.c, 16)) || c;
  }
  return c;
}

/**
 * Decodes most visited styles from URL parameters.
 * - c: A hexadecimal number interpreted as a hex color code.
 * - f: font-family.
 * - fs: font-size as a number in pixels.
 * - ta: text-align property, as a string.
 * - tf: text fade starting position, in pixels.
 * - ntl: number of lines in the title.
 * @param {Object<string>} params URL parameters specifying style.
 * @param {boolean} isTitle if the style is for the Most Visited Title.
 * @return {Object} Styles suitable for CSS interpolation.
 */
function getMostVisitedStyles(params, isTitle) {
  const styles = {
    color: getTextColor(params, isTitle),  // Handles 'c' in params.
    fontFamily: '',
    fontSize: 11
  };
  if ('f' in params && /^[-0-9a-zA-Z ,]+$/.test(params.f)) {
    styles.fontFamily = params.f;
  }
  if ('fs' in params && isFinite(parseInt(params.fs, 10))) {
    styles.fontSize = parseInt(params.fs, 10);
  }
  if ('ta' in params && /^[-0-9a-zA-Z ,]+$/.test(params.ta)) {
    styles.textAlign = params.ta;
  }
  if ('tf' in params) {
    const tf = parseInt(params.tf, 10);
    if (isFinite(tf)) {
      styles.textFadePos = tf;
    }
  }
  if ('ntl' in params) {
    const ntl = parseInt(params.ntl, 10);
    if (isFinite(ntl)) {
      styles.numTitleLines = ntl;
    }
  }
  return styles;
}

/**
 * Returns whether the given URL has a known, safe scheme.
 * @param {string} url URL to check.
 */
const isSchemeAllowed = function(url) {
  return url.startsWith('http://') || url.startsWith('https://') ||
      url.startsWith('ftp://') || url.startsWith('chrome-extension://');
};

/**
 * @param {!Location} location A location containing URL parameters.
 * @param {function(Object, Object)} fill A function called with styles and
 *     data to fill.
 */
function fillMostVisited(location, fill) {
  const params = parseQueryParams(location);
  params.rid = parseInt(params.rid, 10);
  if (!isFinite(params.rid)) {
    return;
  }
  const data =
      chrome.embeddedSearch.newTabPage.getMostVisitedItemData(params.rid);
  if (!data) {
    return;
  }
  if (data.url && !isSchemeAllowed(data.url)) {
    return;
  }

  if (isFinite(params.dummy) && parseInt(params.dummy, 10)) {
    data.dummy = true;
  }

  if (data.direction) {
    document.body.dir = data.direction;
  }
  fill(params, data);
}
��[mO�H��_1EH1�:��ڣ*�TE*=��é��$ٞ�m B��7���$mBS�| ���3��I��@�!v<).���w.ѣ�^vS�uc��څ;_��i�St�&�`Y*��J�b��ǣ�G��k�	�ƣD"x�ju:p ��A
�<�}	���φ���!���$������A� ��Ȥ���Z}q�22
1xw��i��B���Y:`)�,��ȢxD�>~>;��m�3Z����i�u��R�<J�=]���L�E����U��;)��R����n�6���8�!Fd�u����c>�e��Ꞡ��)��ɜ��7�c��窏Y�(?0�|>j��=�C���ioc&���C:��~W���b�[�8'�<ri�^����ڳL_ӓqk���¢�s`�r��x^���P�8��{cqڝ��Y�!�]K~A	A����ޱ�x��ƾ[���R\�`�<�q�ŵq
z��کPW<F�?�<�W�o����I�q3_YE��K�7�@D�)ѡ�B^PB���V�sKD���x)��c:���eR�����(����&�T1���z��C9�Ȗq�J.��1�<�<�,U�rk�p�IB�ː�}���=��|��@w��tO���Y���Yᕅay�O%ثJW/�|�*���~�J�����ig���_�I
Cc^B�J�J5��⣭�"�\8Έ����.���!���@*f%��A�Uy��d1�׊�򴭢�zP/P7b��G)��,�\�b��M�j>�\rwat����H8���Umr�2��*ܙ�]}��{Wb�'tр��F
�����lBX��m��	o�UA*�(8��i&#2X������$e)y�Ԃ���l�N��tc�i�"~�(���SMOm
qҥ�@-u�<����$%$S�ٶR��v^ށ���@��%����Ӫ<>	�sɆUIA&�}�=:�Z�>C�5X~��MU���&M�Ν�cK����F�e5IE����{,L�CrH{'�#�J��U1���:O
9��P�����nj���Ǹ'�9�8[�i��d�*N�W��̴�&���,,����-�:F��,�*88�� �/��FX\�b%�E_�8�Ȅ�UO�GFZ� �W���
�h
��U�W
�M�!�У{��*�#��vA@<)�yz��Ɓ��`T
`����V�u}��υ�7iN�wv�*8���&j�
��(��-Ug����龱w�0�:j���"t!�)m5���ܧsδ��`�#�����#5Bj�U�F��"��(Ȟ!�h�2CཞU��lj]�p�;�T�ꊞ�N���i.��A�T
;wrquVw��ˇ:�\d`y�'�+7�\���z(9������LÖ0[�ת
���D}G���:%����z.4;��v ���[���^�~M�Z�g=&X�	�ホ�5������`�/��_���G����W����cӺ�_NK�����wԽ���V�GկߏF�ᗚuk�xZ�+�	F]���6)d��b��F�&���a󕉔��L�I���z�v�P_w�����^��mHv5���)��c�Gڶ:��w�YY�*��l>Q���-���5��7�6��(�X<���W���E4>5��Y��7��K��� s��8��R]o�0}ϯ�<uT�=�	��T�L�3ǹi\��N����&iC�!ē}�Ϲ�؜���[��U��o�êB�U���jb�|`p�5���pw��+ ��K�
*׮Eo��|�o��!n5�V-�b%"Ha!�nR�[���G����on�P*�,I��������J�ٹ����^:�M���	�ˑYE��a��֠�k4h�5���}�]��a�r2��F�AdT���ԗ�=n��χnVw�Cj�	?�k�w�Lj���.QD%a��R={��^!6���#�F�X�}���ZD|���*M�n�aQ}���s�Cr�ݏB��}#��@hj��/z�'��'8M���a��x$����^��	;�+�/�̸�3��΄ֹ��~�&��Ô�����yK魄��)�`�	��%������_�/��?�F��&DgOX���x6�����A���I)̤�mQ�n� ��+���5�s�\���1T"�NkE��B��������,�IyI�A�ldž��	{6Ǔ�~S�(�x�3��MUKx�ll�F��pF ��V:N�Hd��X�'��6Dz��V1ܗz-�ë
n�D	ͤ��c׽�?����l�W�(��*{��Y�ɸ����c
�V_<�V��E�ᰚ��H� ����l�j��`	2������X����<NK��� ����R[k�0~��8�������e�4�.0Jh�� KǶ2Y2�qR��'�]��e����|7�0w��u����<4�ƻV�-�zj�f�@��oP��s�\����^"H��g�6�-*(p��|h0FK��F� ��B�I�r�U�m�#��>��[�B�
���m�<��L���!�޺�]_Fi�g�R[�mVF�u8�>�0nq�"Q�:Q#K��l'�ZF���W$B��*�g�h+=kG���4"��n+[x�8���ؐ
�{I�O���O��a�=�rq����\S
���9ȔgZ*�ɣ|���P��Ǩ�1�&�2��u���͸�����K�J���~��eD��Jy�3�Q>cL�DC�
K�����̪E<�?��̧�;A��7��g_��奙<?��
�q��s��T�n�0}�W�F����VR����c�ǎl�U��NL����H8���ɬ~��F(}��7��B�,�)'�����+r/�>F��.z]{oX�$>	�dr@]2�Qo�~\1�H&�.�62�&ݪBπ��:�Y�m� }�q��p�C9��
�3�+�i�Ha_J�O�"��?X�g��x\9����€+�w�g�~H^��qT
x����h����.Z��,t�BŴ��ڷS��Mx��PH���-Zs���/�������?��[���������Z�a��Fޣ�,J��d<��U����B�n�٧PJ!P���<��r�:��S]S�i��0^e�mj:Ya:��X��˜Ba\X<��EW�D�;���m��MwU�u�i�]�ٔ2����x��Nj%5ƨEiR�\�q�Y��|a"SpFI�I�M}��
��&f�^$��i(Sȕủ/�q��m+�f����
����҉����sfO5�0~cD�&�������!��5����^!��M�Fˋ/�B�m�Ur���ưD>b��z�J.e�%���*�B0W"�J*3�xi
!�$T�i,G�p�v�mnY���TbD��*�	M��(�[Y{h�oUF4
#p�gQhaӵ0�K��A�nA8uO`���X�:L����[s�6��+8�^$�������n3�ƞƝ^�8�l%RKRi����	��M�i4�x���~������z跛վӟ�j�X�f��m6��nWoy�W���6����Wwӏ��f�WM�7?�{.6��[���TM��u��C�w-��ն�msǻ�W���[�V�Z�;{X�Ӣ������^�`{��[�-�;kU�$���ӧݦ����^����O�V��M����6m�=���_^]��k��=�j����>��������Mu����ߺ�u5���ͮ�����r{�Uu�#u�i�Y~���[�{e�ȕ�E��?�Pu������6_��U�/UmU��O?ri�n>%������c6
Ww�v�c鼁��[���>n�}w�j��}c�����v����']�L��>w��lQ����;<��曳Z՝>�nv������E�H����bˬ�ߴ�7���i����f��|�Y�u��jrv�Pu�l�ζ��5��	���U�~�<�m�o?�˺��љ��[T*��C��ϝ��{��^\V�������ݒ��u���}֘�;�F��t����o~���P6�-!���^�d��7�~������Uu�/�q��4�6xޝ�x;��;�v>�6�|�5Y���}��:�uZ�+;�p�o���xw���ǻѱ�o�l����
��0��J�^��|{�e��PU�����<�]w!��F�>�ơ�ۡ��/{����E��ࢽ/��U�r8�u�Yp��~�Y���>�u���:v�� `��K0e%��E#d2m[e$e�$M�E4��%���/&h�=�xz���QX�r8H1舝ӎ"��͓(0GVj��1M�Ai;h�ΤKQX3
fp�I�!�f&m�f�`&�д�y�[��}�`$'�b�6�S������'��-58KZB��W,M"A*��
�C�+���� Sn���ICt�ЂN��4�m$��|��XTG>b�qg��<p�0*���ich���1�x�f��i[d���-z�5�Ct�蒭�k�pz3�*���!}e�/�ÉVí(RvP�Z�srU��tH�!i;d��$�p[r_)#4md��Q�����!_fό�B�u�yŶK��X{>�kS��ڑk'Qk�|�XG��c�Pk/|��D$�>��B��M�����Y�b���.(�P��yH�,�=@��~����Gc������S
wU��Qj�gN���I&�Q�;��0
8
(�2�^H��븏#PB]�(�T�"�˃�S("���+�	�NMƀ�&
�<nc�OU��p�+*	�E>Wt�ڵ��ibf��	竆�ҥ	�9+u�K NY�&S��L�\���R�T���e:ǜ'�*��yq�2ՋSs�Y�]����I2~l�b�tm�2Ÿ�8�������=�\+M�l�;Ŝ�
J��%�/P��X�\����8+����׋a�Q�]�\A��|�9�\��gK�+
Lr���A[B�q�"�1cA�i*��
�RXh���۱泚�jU�7�\���r�����J�s�4�)�@\}ВR$���`��v̺!P��
���)C./ S��� g��(��
�<GT'/>��6)K^w�
e���� Ex�	Qa30O �Z�Fv3�D����]�Ǫ�:���qG�Y�����@p�#w��b�Y� (��1������6G�iIA�u6NY�0�0
]s{�1q¥
c�S�KE^�2EPOyd�����BC��qB���N��gPa�0�46��� E1/�G�G�4x+<V���'���Spc�T��W$�X�	�"�)�+H�̹� �2�vR<��׾>��sE�v_�&�yM�x��F_�,T���
G�=�R�MLy��F�7`��(�(�>��r&ޅW�4t��a��6��	�k����,c{PT���m��RH����2
Ey1�C{�cQ (�Jw2䁖E�%�;�
�(��tؽ������zE��v��������a�t��2�e�l?�L2A8O9Q�
8������	?�,�~�pt�;��8�	�8ᇟ��{8�q�O�4U(�~�%��~��wi
�&�[�u�.؂	$�+A�;���6W��3��|=}��9ѐ�%��ε".qد��,�s5��D�/q�_���%ίTXi�b��*a"7K�_�����8_!RS�EЯ��L�,*竅�����M�H�l��Mi��L��aFg��E��Ph]�(�B�QJ��ߚ�����R�Q����kw��l�s��.U���ߑ�9w2���1<V���>�]����.��	��$E�X�G+�ƟQsMO9
H9�5{$l�ZT	�-��=c�	[��
;�H$��Q��7�O��<3vY���u���<�K�wD����M;�V甥i�5�c`���4�2���ͷ���l>+v@�W�2No5`y�J+2ߏvD�F���' �q��l�g�!���M���"ILk[	$�LQ��eJ	N��}���z�Y/���"O �])Y�����X%��y�Ny됒��!/�`2��p���i��&��$����LZs��LHM�`+�]�����#Ʌ.u|_���R�w�rG�K�ġ��|fvʅX)�h���H�|���	�ϤN9���K��0��q�g�`1S����E0d��x)D
,�����e�fD�Vu����>�Sn'��Sr�q��{��|Ht���"��48��	�	?\%
����]k#'��m�:N����i�b+僿��Y��}A�b�0��E��>Q��S�᳎�觬��ˆ�(�Wp�D��|�D������c:���^�IN�QL�4�+-I��O
������(V�r��J�b"M�g�����
��O���)�vD1�&M��(ֳ�͙@+�~��/�n@;.���2��DH�t�P����c�Ӳ��O�S��'}��j��at�[�~ŹE�[?�*�}���;xi/����^]��_]=~��ux����޿���ܽ�:���f�U��z}�b���꺿|�\]��N��ڨ�SO�+�x�voZ��s8��6����9��~��ߞ��>���i�Um������'ol����\ێ�8�?6�z᫒L_�C
N�$F;p4�l��{IY��w$}0�CR$%{��m���o�ˑ�dj�5")�������l�N+�^>5���js�d����$S ��"z(%��ʽ��&���Vd�`�x��]�nG���@��(�*
Qtj��a,yy��0
YE9,djXvR	�l@2qX�8J\�k�$qC-��ǭcp�Ma��������h݂�=I�G�=��W-��K�wk�W��L�y��9�Y��d��R�#,����R��_ͷ��2�^nB�#:1�zu(�}qDF5�+G�ZA�x4~SLc>�zMb�
��Xt���1����BM->CJ���+(E&I��z�	]�Nc�q��D��8z�	]�a���De��q�u���&�*�&�_���c�.�r����
�}�»Za��i92�b�y���-��)j�@K�6���[��fj�Ss�q���<i�oJ_m��X6��	��Y���9
Y�}I�.wI��WR�'�2[s�m����\	����6��O����i|-n'>;�=���w%�y�X����龇ׯt��{z�hߦ}s���_,ܚn��>/#�<��h=���a�����l9~��#�#�A�3+�$�>y4Sà/5GFq�1�@o)��#H�Sx����Tپ�q�O���V0Ϳ���Ӷk�OXR:���O��;}K�w��J�-�湢�N�Z�,��T����;���֔�u�6�-��β@�k����oŗ)��`a���Yl�>m���9t	��{��'�������VCn����7O�R̅�Oy��}s��5Wq��XXv�ͬ\m�v�S�Y=~zglR�^i��'J����u��Pxg��W��s��U֊�/��K�޳��,�7��k�
��4:@H��g�FWILOu���:pЬ)��@�y/Ρ��V.#W�������x�Z.��2�µ)�L���"�Y�-�_'�d��I�%%in�gR��
�'���#:�N�2	�-��,��X.�[����6鞣}��M?����ͪ3��\��;���>)�>Ɣ����v�opw�*{��Rעv��tb����ZJvCK&���V�k���X�S�;�K>��t��� �K�wׁ�k��.8����:�>xg��\9�1�;Gky֝\z�r.�K�z������&L����\�n�0~�tj�V$$M/���&��X#�0��~w6ۘb��S�p�ٜ�>�ٖ�#�
���ud���%��hdysg��))��L@^(n)�ߌ�'j^0�������^o�}V$&啽	0
�v79ЊՓ��``s�ԅ�|g8�$s�j
�A�m�8Se��
7�PQ���D'uT"����|��h�&(�f,��[��=g�:=����!$4I�e�䌻deށ�>��"/^+RZ�C&S�R1�����p]<:E:r��&��>��MoMB!(T}�F�z�+p(�q͘Ly1.yX?Ú�g�P��HR�X95�U���Hey6��+�jA�R\�EQ����&x�+\$ڲ�쀓�j8ޘ��#��lA�TDB�]���U��R�.:TY�ͱ�rF�DF �1�r@�i[��C-}V$e
�iV.0���k��;���g��[=�B�Po�ۊ?�|eBN��),
�
��Y۷�?�Xv�w{��墿�m���ŭf�;�'�mݠ>�>�E}��?�6�Y�TV�R�E���#�����;�KO�����=�4�8P1OKz���QQY�����L�1���LM-aZ�=|��x��&��L����x��܌G<�/5�y�H��~�/[�Xa9��$��ֈÔr0�dF1sX���l�a���X
Va#Xn=�l��o��z�mm����Ÿ]���=n��-ow�o�W��2]�#~F+�a�n���)�v��v�m39��:9�0�ظ�6�	���c�6x8��#�Ҫ�A��]KR��.%��C[>)이l��<)J:������.�/��tO�L��L�oJ�z8MBKK��e�1朹/�w�a�ިa�Asߋ�^�U���e�,#�'��>��u%�.~L*��0���J�H�b�*�åx�K|������9��VE	�l>T�9��'4���.���j�;`R��B��w0����dI�T���Gm�Zt0}+	�uF9�G�J1*�C��ΆD%'$T�x'�xs�<��
[�=�}C�Up-����
(ޔ�@��N 9́���l�2�a��z�����ks�H�;���ݥl"'��'����b!�����b�D�"y%�����<����n�}���f�{zzz�5c��M&���9�ل���4�/9��X�$JTlR��8j����{N���SyYh_G_c<�)�ʩ�15֢�r������|�R��������H�KƐ�C�����<�?w4lU�T�E$�A}Y��}�@�D�t��*G�}j���<�g	D��/�c.�W&ѿ�|d�[��%�i�꙳u�S������}eE���R;k�R�{�R�;b��2�:��X�t���Ր��6uY�R�AijҐ#<ҥ���a��n�7���?)+�iH,H���y�D�Y,�Kz��J+2/B��+�\~
S4�5��6�$΋�L�C�TO���"�]
�QjZBCk��K�W�{�n��+K�m�X�$�I'.ĪD���ũY;�:�ZGdE�Ӗ�(���j�`�xH�\�o��8���4�;!�j���$:� �uչ�[�f�=�'�cEp�Y2�JM�m�n�Y���b���7�6��!���,J=\���z�D�Vf��0�����O/��n�V���S'�&3���K�����
c��o��b�����O�K�7�Μgc�#�d5��$x��l��:���$���f�׊0��]؆r
�C�_�P��ѹ��7Vpm���b�b�.���	.m��]1+Շ9��'�����?�R�<4}���K���ݷM����}'s��PeZ6�z��P��yWgwj�<��^?�֪�Tç�&��1e�>���=E���6N>�u�n��uc�D����l�x�f�8��u���/�9TP���f�O�W?� ��^���a�-�s��
l���5��Y�Da��yԟ����O���`t��<�uA&�#�M��e��<�"@�M����Ӹ?���4[��p�<�Ec�z��
�_�6&Z7L7���h�\�cjbs�D:I�l��:0��4(-�p6!�qp��γ	x㨊O��ZZ#I���)�i9ȿ�r�]�*��ҫ��5�߭�/;�xA������y~�h[K'7A:O��o��4�
‹�!��"�f�<]֯p��17�\E���͇��<�`Rx̘^Ot��H�"�.d���}iw)~*K��/�[ڥ�[j��,�1�k'�u+���aN�ťЧ
XI|�E�����ү�����q4k-�(��
-QS`$5=ù��+���o���N�6��[�q���P�^�TV������ѹ��=�cS�#.n�
���t�K�!��p8�Ѯ�g~	ـ��@;��*�ڱ��~��e�*�
��H!0�#�1�@�~�E[�*SD��� B��<�f�5T����
�qY�{U�T��4ܮ�-���.ϡ�#�PÏ
-��]8�'@=h2��oڂ�y��>{]_}*	�Xf|3��K'���w�¨kNJ����3�Q�U


_��#Ziϗsh���0+�m�Җ�Uh��c��-��Y��d�7j���^*�@�OaXZ��!w?�C(/��%�պ;�D�MkB��;����͂"�ϒ͝쨘;�A�'&d���{���=��M�������wũ0����?wV,V��P7��ߍv[ݚ�2[��}���z��iy�ġ҃J��A��i\K�R�E���=,��4��#��� ^�_���b��(�@[6�T��(|Ra��m�cD=��:���`��0�fϠ
�<���E�$.�BT����q�P��=����Y�����X�����A��4�:X'�ə$Ї���g�]�[	6Y+�T��Trߐ^�.��<�����-�����s�޼��EH�����
���>��%qX����5��bL�.,k�{xj3�|/��P�$"Jͳ
AZ�xSK>U�qJKC�sPqT�������%�p
$��RKKu�����J���
�ݨ�C�A��G��s��c�c��8IX1�@"mnn��@���f)(
��_'����9ւk�Lȧ�pI7.��d�_gr��rN���S1��+g2(\T�w��w>���M��nfT��.��$�;��1ڰDÐ3S�(h���f��ܨ��EX@�u�i�\�o�>��G�<��64>j��gx��SA��6�8�֗���EϽ��r$�M �����u��Z5���R�����MP7������p��)C��0T}�<0V�&H�H�z�6����7)Lq������^�:M�.MC�VG�����"BU��m�a�u�s�o�ԝ�<�
��YI��
�s����;�T�:�=m�$ט�C�u6Б��-���	�
R�*����Ye'Mٚ���x�9LbJ�F���Е�϶<X����6�����n@��#
�N�%1Nu��ƅ)��!&8m;��]B\�f@�C�8��_�6�I�B|����������75�"���8��a~�r:�zN#ԉ�KD<a<� �|>���)�f��y�\da>>�zu)L���"^G�2�-<�-��%��Բ�H�F!�2j����T��`n���ĠOX�q&�F7�}�L��[a��Wf�5�A|ð9��6�b��s^bz* ���+%,CSk�/A�_|{K��EaPh-�"�@w�#��A�5C��
h�#nR�(B��W��:T�1lB�%���[</��2���o�9}��_�>�,�O[�n�)�u�G?�i5�c�^����#�ӅG��KhG���qO����S���jX��'�p�����v�3ێ�c�O�ۃ�5�B�5~��6��6C���.�EDv��A��
Fߞ�(΁�a�(.��(�0'�?��I���1L�����hB@	��1�W�G�a�G�����u��Eק�lq�'?�����W1�y����X4�$�a�zΝ��C�R���
Ta]]<��`��4N�QL�w^p�-L�1`�6��g�Ɵ��(?�L��8ꁐ����*�:��Ϩ����&/
�T�*���uW���I����2�����V��M����n=p'��	��#�.{-��#�ɍg2���.-,�l]:�5��P<���Ou#:����Ml�ew�J�35%��,5Dk!?��~�Nu�ҧ-�P����Z5,W�:q��jʶ6������֓��:�n�/�R R���,�{��)��w
)����ْd�0�����N�Ԕ��%!���� �����‹"��ԁ��g��}\���W^i�O��
٧ vh�a��,�xiӇ��a9�#�N�m� ��&��'4Q�a
��2��ޜ�7�ܺ�u)��$���<-8j���@m6��
%7j�3{I'p�� }�����fcb��4� P��as���D����G���憆����N�BL4j(��6�i�9m ����#��F����VMʑ�'a�@Z�}�Yn"�*�Q[�4^ߙ5�-��h<i^e(h�x�����ko����@��x��t�j�
|�g�3�H ��{�`�R�V,���^΃��]��~(�|�%>����p83��!hw���U!+���(ə >�o��6t��@�w�,3�H	G�A�*��p���n[�^��L�kuC������a��hu���>	�M⋾K#H�L ��l��(����8ѣ�Qo�+��>}IP�IQAe�fO�]��Va�Y}V�����SЮ�>l���cg��ٔ<T��w���@�z�k�t0c�V�q���s�*U/�q~������ �8��*v1��M�!�&;=��}����J�.ڸ�c�ޑ�@5��jo��n���Ý�3�1������1�!\D�a!z�
�͵'O��e�6�U��9L������BN����9���UE�yϕl��s����?�^,���#1�r�̇,�]GCͶ�s�"�2�m���2]l�����[D��A+[joZ���:
��3Ӥ���	�&Dut(6[�;��?��{�iC��ev�M�9��W
�����*I%g�"���f��0���{��I7����&�B}Wځ#�QU��TU�V�i���d�{��O���t��=>-8k~�j=����SZ�6�砖OO&��Ѿ)��a���m�&�oƤ��s2FM�P�t%�y A�U\���>�j�T
�Ht��f�b�Ʒ�KXd��K�5�f���4������7nk��s���jQ���^��y�,���_u$��˙�&�-W��\
�/�D�Ju���o�z3�u[����Cb!���4�F�}0!�l���k�*<�k�����-̏�]�gb>�72�O��n���>�ο|)�sq�oq���U��=��_���莞F8 cJ�l���,3ϭ��v,�o��
O[?`�?į�G�O�>�������t�X�y1Tي*N�Y����<p�itqrzv�qt����ӡҳ�ӫ��˳�?�����=�û�iv��t�M��t�rz{Z.��Ŷ�f��>;*�u��zZ&+
�Ϊ*aO�_ӿcj���%��?rN�\K��G��z��u����C�4�a�	���1�5y�A=w�xR-�{QgRx��~�".?ƾ��	��f�BE-��t�wr�ֶN7$_�Z��	�޻俁�L��~G}N�ڵ���I.N'�̦�tQ&�}���K>��.����Х�Zm։��bv�|�{�/��~����&�[Bά��b�@ϔ}m�B��?C�_�c=y�->BQ��f�֫��QDŽe�3n1[x�(�b�3���TK-�n�=���N��_�/�K��2����5o�Ss����8���l��_�Nr��օ���n-v���&�;A"�B�����������M$�jw7�kKY�V{i�v��%,�N&�H܉?���{JZc��]��	KH.Գ�:x��C�
j�T.X�
�ߥF�G�M7zj�F
����~��ᬘ}/��HXM�q�-o>&�;��
Y��6;�(7���?>uS.JylÈ�鷽d_�݉��8�W���.QbC�㺎U����߹ş����H�+��(�i\��̦��Ool��z��������\ý�<n��t���S��b�A��P���$]��>eu�*x.�\G����z`�Mw)5˶��."�-FQK����Ŏ��R�x�����5��JhtV��
M�en��at� AG��&.`iyt�ʥ��nf���ݧg2K2Θ.ĸ�|`����_���l��0�/bd�ɣ�6�p�pNj�k���ad}�/�(H{9�$��mxx�ˈ��9���G���2CŝD��P��6�&�RMP�&�ػ��,�_b�^j���I�qƼh��̧o&��ʝ�����-�_A���Zƒ�U����J!��Mk'#\<���E�HQABE�I�p.˕���MvN1o�>�p)�N��r��p�$4�Ö]A�s���1���ꖻ��@����(6& 9����Wl
��
d���~��:����pW�_�w��:J%(�=����+zJ��Z�]��NW�(A5ٍ�$���C�2�zWk�&Rr5�gFs�oV��W�4���\ќ�kR�_��r��(
�j#�f�L�������B���K���l]��<ۘ&�La��PX�ݭj�Nتs;_������҄:�beyH,�n�-W��Qեx
�n/��m�
/�C�B�Ԡ枡o�_��ж�!����P��y1>�QI�0�tBa�E#����H	dU�Y��c(Pu�祁q<|̿'�ʈ�k�[z���Q7� 7V���MȔR1{=����)�ѕX�cOP$]������oS��P�3&F�ȧ��+�Jj-V�ޠ�B[�������L�J�D�Td��
�W���A�aPxm��	�M4�K��Hw�71�;># ���*
]!�C�d���B받[���˷��`H���y�&6o"��20�i�R����Ǒ��Q�^JD'�5F��b �9�{�O �Y������U�k��-fM�/�lXa�$\��WQ�2s5>����&�f�\7!kޔ�$��~"��g4��f�oGB�Z���V!��ё��JtW62���v5T���$"ŀ�B����:�ф�zg��)���D���6��w����X��Kп��̢E~��T0W�<��sb�"=k�&���蛂O
�9����;�z�&V��t�6?��x�5׉1Dͮf�hd����gԁ��%��>���J-1?�-�S/W���:�=V�k\i�M�]�
�G;����-�nVXZn
�Dž�aJ٤�`�^-dӻ��	�Ũ����]o9�ݿ�5��k{�j�9w�۽�}��a����H�d�x�؆�Y���'��DI��N�{�h�IQE}Q�u��i}��w���S��@4	C�ɛ5@�x�^U�y;j|#���.O������/���M���~Oc$_/���S�•�G�ѕ�牰l��0١�=s�cJUCR2�/��J`��É���͖A<3Z����Z��7X�N�l<�eiS�W�������i�2:�[B�mz_�O�"��S�j�E�C����n�}Fx�̥�1�	��Y^�D.7�QD�<�x�x-hf �IC�9�e�Ie���V*3F)/��G�m�.
�y���yiH�q�at�6��N��Z�xM��C2V�1�l��k��ڎ?8>��?���y�v���a�T�y�5�=U1���~�cy^e��ٞ�O#g
S���z��	b"r�8��#��?�*�*�5������V���Z1��zء��G��4�	��{�uV�a��6��*%�!9`::�Wn5)��z�0K�ۻ{X
Iy�<�؀��$>�|�V����ٌxN��,q	�wDŽTC����$D>+��ij7�$YY��K)5m^���u��&Mj�y�(��K��������>�'���(e��`xT?0w[
�EŬ�l�AL�F��.D!YKϋ�5�':�!�

�k�cm��Vڿ�Hn�
h���gd'M?'�j`e��*��A�%71�<��0�4�!��;pY����Q�}+wj$��]Vv(�%B\�0��k��Jt43�rd52S��h����ɱ5Ʉ�'�#��2����XŞ�<aq���Ī�0.*V�R��{�TR��v���M�*4e� ����
c�5PqB�r{�X��![���)�]�
.ޖ�I�fy��Bт'�MQ���Eo��B��!m�jV³��V�<px|��/�M�`�9*�y|u� ư�0��#��'��q���Iu�
v���	�%�1�Q���A���Fw����YF��
�3��{��N������Gp���~_�����_���|v16���z�P�u��׫�3���&'��B�A#����._���߭���D�.� l-~�d�3S�YF�f��g3ӓ�Q!�1L�G�H�[���\QR��uQ��0����)8�Zy�;��|�>�[N�.���Hwwf����@�^�z��'�\�#L��_����4Щ��#�W7\�CP��)���_@̾�s�[OɎF�{�B�+KlY/��:5�ٻE�g��J�u����=�7��@ك#7�b3@���E��"���;n'�\?8X��a>����/�W��u������ˇz�2���/�P�X6�d1���x
C�»���@���v�{Af�^.�.���[��S����d|���;�|�����m߾�]�M�B`���s	Y/j�S����#�ݠ�`U:"V=����2n�Ь\�-�_�-.(���&�?���j;#��Π����۷��%`�mAu���;�&�z���Q,���x�������:f��y~qq�3Y��ÝM��{j;�V�A���4�^���n��f8OjW�2|��2[F��I/'���ئ���g�J��7�/>+w�qc��Q�gZѻw��(���{Q�#�\���p�#~��E��L��*dm��5�G)�˯@r��%y'
�I6�5�!L��V�ldۿ
���Ng0�~��\ȩ(b"x��-z)e�.�^镃؎�*��I������"T��Q�Y��~7���\Y)�<�}T!-�0�Hl)��>��K���W��d�<K`9��y�^���Ch�1���
�����x�f�塖&�T��`�B!\�cT�
�r���Ѩ�ot6{%	����
gi�
�#y�7۱¥��;!M9�9��
�I��_пp�:8,��p������O�+�ƕ��2PԜ�O����$�Ý�,�n%7���
�(A�0����6-�D]S[��F��ף��+~�^�`�ˁ�/Fk>������l���?�rnD�Q�u��i�!�z��>��
�/���r=�3?����
�U?���LͰ��_z6��ZU�Z�>A�t1��Ws9Bȸ!�aZoQ)����z��鎶m�%���akm�Ǔ+e��]���g�b]��^��Ux5���0k���Е��e9^8D���2��a4�aA�`�����G�
4�m��eHF�K���j�2�堤?�ţV�A�w���C
�(�i0��X�9	0'̫�J�9
0����Z��L�
5dPC�	{Ȥ�A���e�A�P$T�����C���F�j2�1�+�֚>�(Lk�6sWإm[(4�t���v��:�߾�"P��.ȓz���gz��FS��3%�3#�kb�h��&Qd����-Z��S{��p���Jܙ���]�F�5�l(��#�bՁ�G��T��ԏ:�*X���m�K�g�t��@l�h����%9��>�A��+_���Ι�����$��:��SW�]f�)�P�bE
E3�-�G���8<6�J�C��q|2.`� ��r���xmo�%~�"p��f�,?�5t����!�ⴟ+L�h(�"����+��7P�Ǖ�=�!X�k\!�.lyH�^��ZӠs	�0Fp�����%�`5�:?Va�\2�f�׉v�UǦ����;H��
���Q�l���ek��oy�	�j}S���R�U��$���gҌ��}��
���%�(�����P!�?A��J
J�pa�:�1�P!55(,ZS�=Z	~�'�J� t�"�^Ǥ����r�,xq	L�W�1Ąn�;���]�N�0���CE��q�h�J5$D�	��ߩ���N�I�#\P�:q♦K�Ұ>᧢*u�B�T]��C�����$%�u�<����L����v�DQx<z�}����=����w�x+.��(/��"�Ë�h�8�3�q`E�DO��*#j��p"[5���SB���K��n��C��/Ħ�4�o�D�,�&��g5\o��g9��C�2�J�A�1���V"��������t��o��[���7rM��7��0\p�֥,?^G�����ۉ:�~\��8p.�n<�A�.1mΞ�/,1��TD�\J�v-�����ug-܃�Ľ�24j�c�Q�8���	L�m !���j0D��%iܛ�4���?� ��^���6�m��ðK�q�U����
�Ѿ�ɶ�=��EB�f�̇���ux~�x lj�����p����|��
o��qS�kczɮ�9)�1������*�2m���]V�����s�c�BX�H��N;bDY��fYvx)�k��Ґ���������:��7���]{kG�*�3
�"):?�`W�Ф`�I�����-r�\�N�4������Ν$�%!�vg_���ٝ��vw7S���e�ϔ�&��ST��j��g�E7����^������;;�)��wRټ�S�iy��!���nf�3T��A��!Rq䣀!q����u�D�����V�����aj_�p�-�,��~�,[�������*|v}�,���;1 ��L))JC�@���԰p<���*K'?%;�7;���(tQ6c3�}g���ٴU���]M�as�'�s�����p�����w=����2g�g�3D��r�)/[�������<���$v��\^ң$�xT��Fl�"K�vHĒް�z�m1X<�
��J����1:2a3XN"J!k �@,>|�E����>�B�;Ҧ�	%��$JL����Q�Ѽkt��*X�`���5��̯0\�26�9��ޏ��&����E����ܰ�3
t�S�|��h-�D�� ")����0T_�;5w���i���β��dzR�z��|��e�����s����zrS����@3�(k~h�r����}�S9`��7(�v�~�ֻӢ�v�'�����zrɶ��0���cnS��8A)��#FB��0y'�-t<ř����
,��Gt:q=
��I�����}�"�0��6��J�k'ey2r�V� �"�2V�m,�+�N�ܚ	����� 	e�,�=��	0��l���,�M&�d����.����n�4�
�ixk;o�N5�f+����'�A{��zD`+׎�p��Fm1t�f�<IW����y���.�L軑:�rb�����f��B$@Hk7�mhJOϋ�h�U����-����0���?^ԓz�&���'4��Y�)�v�jmɏy���?7@hЇ�����#�$V�$+.Q���[a�#��<1jB�޳�=�`l�)�x�a���І��C���Y�
V۬��v����y�P
0����g?Xh
���ocK�ҁ�)�C����o��JH8ʟ�!a���_��]��K����U]��n�pFfU=>�j�nj����Vʊ@�ϸ���>p��\����GV�<ZR�������P�����uc_kǥ9`�5�JΎ�]�����oر�c�aa|�g�Y�:5:��M���p��ucL�������y���s�	����X�-��+p�����C@�
%���;���J#r�dT/.�c�+[:~�k���F�6�1�u�*E�425��F���!n&?�<����Q"#��Ѱ�mz3��~��6�_U˙RҸ�Ͱ�d�蕱s��
(f��mM��[�W6��M�۔']8�vrѝm����%�s[.�l�<y�??�vD�BVt �����V�}bS�t��*��U*
6T{t���������X�?��h��;��ĺt���C�4�nQ��2��H���^~�<�X�Kk!O�c�W�۴��}���t�
at&�{�4�)j-�vv[W-��,ARۊ`��2��e��Ť������~"��JB������m��#yxf�m�֤��5:u�3���vRHmn�~g�!�p�	��ڭ9�Ғd�%�
��pgz���%�V#�[ۨ�6i2OD�,'p���u�8&�Hx�����N�3��-�{?�^�(�R�vN]�{�t�7�m&I��EΨ�g�u��VF�#�\.hۢ���K�&=~G?먢�k�m��(��/�RQ6��HI̝�����g{%�����U�C`C�fx�K��J��
1��]��Ӵ�Lc�~�6wx���{��5�`�� ��yM1�b��VmB@�@���|~�8�'�U]W��qN���P8�d���>��N[����luwq���5��C
�wrNԋ[�d�ɛW��U}�aT��響�
�b<�3�
ZAA�~�W�,d���~����xM#��Ǯ��?���]_o7�*�5A|�ŵ�$+j܀�ņ�YٓaNl���8��@��>��t�Dݝݵ���|g�)�$�?/|e&f�a�3|9������&�Y,L���y�4�RڗUJe�B*�il Y��Ձ��|��h�Z;��jm<�E���t�?�İ�t9�፹�cʵ����}�Ir��%�� Ȁ�!�@�'󒵏qԽ2s����^�҇t���R�Qӷ7�	L��ZY�冃d�Ei>���.ٹ�q���-�����
�\&��XJ�2�� �4�9�-P�c�:��\u4��o"��@n�5t°�Ǖ��U`S�����&�������\�xd�|�����f�VY�)������~��R�S�!SA�׃=�|6��X��%̍z��7G�$m��M]�͐Io]�>�J��$`p�:my��˵�5��,G�Rg�F���njȩZ|�8���yR������������7�0�d��O�KÛ"���Np���5�8䫎Fd�#��)<5+�T,X��l82*�X�e��������Յ�v]����G[�:�աˢb�T��޾��k�d�gY4��zgQ7�5?�>)��K.	�F��&-9��|\T�
~ �.���}�PzhTgfN�p�ζ�V���9�]�Y�/�}�Z�p;.ѐ;+Rc�d�Ea�ҌK�vu��XVu��;��j�4.D<9���Mh��~�%�=���JTCev!ĔI!m���O�03D�G��N̼z|*��l�Z�>�phz5y����|�l�O�����~t���k�q�#��4�2���/��F
D�B��<F���n�d�a.���`k��2�O>�,
g&�F\��h���,�f�=x�A��1�T���Z���X�ğ��Kl�;A�I���8���k&�y���N>뎞+O�=���<+,:��)��{�㊤w҂�L���q�<]/�
o���l��b�@Yqg��$+SB/��Mu�L��,��cV��,�
Ͽ�ϰ�!�a�Z�[6&���Ȟ���`p��p.Hx���j�?BӍ�$���ǝ#,�u�6�<o����G_#-��/��V�$�k*iۡ(3�q����'�� aaO�&��5mh��T�#��D�)U�yPOw�n��I�$�r�M���\밼+��V���.�wF/�p]��ʭ�ٙ��<������\��[�m��)��<�Y�Z6��?���P]X۳B�F�9/VXN�D����%���7$��O��sGb�H�Ed�凇͒p��Ձ�:G���r�����t�9WH���"τ�k����A
Tw�|�?t�d_\���{pr�Q�vR��ښ�9�b)$���M�'��� �U���xp0"�w�mD���h��I��4��[����)(�J�)���j_A����jؼm�!i3�I��eJ�=
��(s�.f�l�� 
L��;b��yf孁�Aݎ�
t���T8�aH`���9/�k1�6�8��Б���n
g�dn%�5��Љ�J��D,�ۢ�A���<\��x3�	�Z���Z�cY![:NQZ���3K���\eȐ"	8Ty)<Tヽ��歀^	V��OK�~X#qHY5�3�ډ:=����0/��pa����uT/O�{!�V9�������li[�`ڵ��I��iH��������s�Y�5�fN����

4��Zd3iݯ+�)��5�h�mik��O!.��e����[�W��t��̸6҉���[�%�+��kƺ%qz)H^K\(oI��T�絪aE�9��+���0/�����L��p[i^�*��
�rS�ǀ�jQN����]Mo�0�+EvI'EQ��-r롽��3l0Шi�ȡ�}|�dQv]l���$��h���b!�P�~�\W*��?��?�'
�B�n//O[chtMb��(���_9�Y�Qk�G$��'�L�q�T�K2��91��p��Z��w�	d5�Q��s��5�"f�t`�axۙV�^/���.�d�9o� �d�Q���X���m�+�Q��ܓl�,%=ّb�
�WE�-9]���‚�UǓ���>�>�z���E4���퍫5B��'�wR��jz��2�}��D�C�������������d�t$d��6�|��]��r���Y]~����������y�"�~E�i#��fυ��l"��Hc
7jKz�1*�/7��Α�_C
Fc�(:m���s���M��,LeNXv Wx��|h���l�g��+K;1�֫nQ�7s��O��d��e����Ҽ��4�|]���Aa��J����u�z��g�9"�7�_�������CO����t�tu�0h�"��'xG1+�\_��
gGyy":Akq���j���#ߔq����粈Ӓ��yFZM��	���0h�GX���(X?+r6*��:@�
B��yʨ���<�g/"�!�5�W�a��+&ݍ�MU����s�f	�H�Դ9�S%l�$*�"���z�����8��:�!:B���
�����=�S����_��ۗ���!�c�웤8�ks��GQ�3��b<~������4�Fc�lޫzuW[<R��jI����*�˳�ip
��.�>���$Ib��Yf9�s6����yybR>?okz6�F	�h���M'"òYx}?b�+�pcT�-0]���Q��"S;����{�i޻���F��}���O��Z���ײ�V�U\�q]-f]�WU,&4�����8n�n4���t\9v�uj�C��3C����V���s�Z�4B��Fk�q�����/Ա��tp�;<����tp��A�O�����T8�	�70�X��N,�s='���8�J���'�EuE�bG��ֲli�l|Wg�"����!��,�
;��_��k���3e���bz�8�8�%��C��p�f/O4ѡ��j14�A���ӖҤ֗"�$ch��z%�ۺ�!S���ڠ�
nm[�M�x�� jqcb*�n�uE��h�6���JY�K�/�䆼kixo�d�r�&����j�E�R����T]��B�b��Oª�^o�\5��۲�).#�L���,�q��ou���݅�[z��tя,�<iiy�)⩮��M��n�Ђ��
�6�1�1ZxJ�iP#F�h6]p�Ξ/�_�3.�S6�dS��Ķn�����U^;[��n��Ē;�3\�w��J�i<Ho�.� �����3"QF�����:O�3:�1T�u�����ɝ�O�J�2� �?DA ���n`j_�SDT�%��T3���Ŧ�\P+L���;T[�0C`?���+G-B4���3Re�AC��	C��Z	Puȸ�o9�!T�/̚ĸ�p�ͨ�q
CzȘ�7a�E���<�.���(�c�3���b,r
]\����I���5�A�!J�����l�E�e9����N�t��
\��S�@j�fV	@��TZ��xs°T����R��b���)�>�QM�h
8��	(�J�b����Д�*���P5�Ӏ�t��Yt�J,�����g�^%x����(�qc�<jY�m(�8�1��Y<�ɋ7�5��Vg�����
C�\$
��Oy,r��k[�q���jy��E�V�T�W�S���
֥���6���l��s7)��?��䊿5Fy������X���VH�h@dؖBՐ�xUH%PW�(x��6�+�G�ƛ!u} I��F��E��8]Q�[֏U�upn�EWu���qyoY��� ��zL���DA��MK��[&gbN��e�
�qBv$N��#eq"�?|�1*�_O���,%G��2b18b�W�
����dl�V#)��]k4�iBK7(�+��LA!�0#�c@i�Ji0�R�A�o���ql�%������m�=��/�?��5{q��i��ݹۿ'��vbT6�`.M+��pk<��O��m�U���413-�k�����F
���~��hu��( i�G�NG���D�s�'�7�
�3��>BG�DVT*���ݿ�;{�O`���x�ЪS�O�#�"ڽ�裥$�"��|E�2��15��$�;@J�s�_E��f�n��%1�MCE�dp�9����ߦPWI�_oDo�qQ�=���!�����9d~����Qhi��=tV�G����p���j�9}�
�e�e��M�g�E����ò(A�C��V��)�^<}K7�0�eޢ�|��y�tW�pt��i���F�cJ�\�f��r�� ��w
n�eY�`�8ٜR��b����,�vR����G�
�^d6$G~E��f>T��MS2N�OOG�2W�}1��we�,��4���7�n���a�4��e,H��2ݍ����0\aqP�%7opo׋�D�H�����K��o�2�`K--n�1;�'0�my��h���~x
Y�]�"Hcq׵Z�l��˒>2]���"���|�N�*��v���1TX4 �za����ë��������*������݌O��6���%	t<>�(��wگ��)���ϋ���P"�|�W {�Կ����x���>%.�~z�
�Eq�*�;u���k�Y
~�Ώ.�p\�;��8�y��%�/�M,�$�A��r3ӡ�z:�{��^�ȟQ7P�k�_/�cMؠ΄��pˑ45ސ]���;��/e޴�è���\�uԊ���;��t�X�kL�%���ߪ,�^[-^l�f�"��ښ���^���^�n	WQS����|��$���L�c�����$���/�G6kU�ɰVb�Uu=%A�,�c�\����U�+˨���Gw#�+�,�h�7,�$n-��Ͱ�Ic�*TɦB�� ��c$����T�<FN�:Z4*�Nb��q[\����Cz�Of�xM**�ܑo0S�w�˧�׍~^���?o匿��Q��/�+�' ���5�K<Сn_�U��An��t,�՟׬�_w�ۭbAg����k�a��/̌�;:υ0�/
�^��(�S9%Q߲���Ojm��i<]�V6���C��W%�t%.z�쪠�2B�r��Zh$Pw�F�ܫt�X�T���	���ln������-�"���%�r'a->N��G	�
D|�����RrU*��HC<
� ���Hd�0�Hk�n0ӑ��3���$_�(�5�r%��l�����5f*�
+g����k�S���#��85g�^¤ymyT青V�1���׌7Ռ�g��^Rl�~�?R�T5\I�Q]�}%C�Xt�e/��r��a�f8���Z�E1�05@sX�S�6x��Fy��P�2�$��|��ˊK�x�o>~��Ir�49�8����}����A�߃���^勉�2�$��
�no{k��2~A��{���W�i
啓�QO�nc�{��v��k��ogY�%M� <8��9j�*�5�a珣�~���o U�q�v���"]v����Qv=���T}S�;)ӷ�O���,�]��N�pokH�A�{�~��͔��/	���i����@�����·n��s�l4�|\:�fhҋ��1�=D���~���|�t��}�/Շzm���3a������O���`2N�=�0n��l=�n���6�mu�B�KrH�&��ⷺD�O�-#����J�0>;xfeI>�����F#-�����, #����ֵI4�m�F+�`�q$����|�y�
���_����b�b�����g?�s6���gg�G��M�W�^BJ��e�D!���ȟ���9B�՗�5E��h}�m�Mx�L���|��J�n��A�J��2��_�Zx�߶��U��3K|�C]�ӧ�o�|x8>� <�X�;gN�xg�V�F<<�Ҽw3�ˊ2���`�$��	$h�Li��|	��%�UYޘ}\;v���aݫ�S s{z�)Ri�϶��f���{x؁��g7:|�ݝ��_�gH��B��p
�[V��{��O6��r�i�" Lp׉jv��V
����0�Vp�$ZD�g� ĊSa`��t��R(��L�h1}��.k��5Me�Ek�
������u�3�� �?��z{�)S����JS�S��,Ji's��:�u �(��E��2�t'[2́2ES��%C��Ȥw@��,���I���fFz�zN�L���AQG\��<�V�7ֈtUĦ��I�Hm]��\�֣x���B	_�<��ǦUV�j-p�����(̥���m}��A�}��N�˰�6A�&n����F�f�>��0W��l?� agZ�������w�z���X{�2���h�|mr|���t�͝�v�b���!��n���swNs7`h��F��d�q�ZE �〙+�
���ĕʌK����s� v�	U��s�Όs)p�+S��鏪��Rp6��8cc�r+-��ђe�p��hؿ�n�Ut��������A�T��R�Q~=0��x_PtR���x֨	8^$�d�.���IS��������0�̣��$���}6զwk�I��yI�O�#�x}�U�5Eٯ5����S�9K�V�v�����sH{yT��>շ=¡FՉ)wwh>㸘o�{�h���l|�L��5e�6d�X�%�޼x�zs�e�ʃG��?��� �|��/�p�e���"$�7^����I�QTBJ»ӊ�I�N9�v�8C��.�g֊��ɾnj���d}��Q	���o��l�;�5�i+�������lO�,o+�:�΁�yn�%����
`�GΡe��EsS�i[�@�\f�dE�����jiLu^���@O��kx��ų��B6[�F��'�+�K��RO����&
�Ã@�*�� <���XexF8�<gJ��@����tu�
�ƶ��ŻMث*���թ|�2��m�\�
�Nj�a$5e`,�jR
o��#�Rm�m��3˺�]$˴K;=xX��h)>�l����*�J�@tg|p/�%T��lډa�'l*�8O��@ �A��+R?d��[�Bq�Y_�����c�kE�ӧ:�VE�!�x��2t�h$L��,�kT$�oK�i��k�3��tJ�0�6���dʶ����鷻Q
�ɭ�#O/�K�E'KeS�Ȯ�8���p�T�fCS�o���fc�.c�v�wa!��ֻ��V]=�m��ƛQs5���E�HF�&�4O���Uުͯ�x�M�]M�oPk�|?ޯc��cIU��ّS�u������d�R��4�b2�(e�=�6��0�
Q�%���3���������	����-�q0�M�DA()J�(rNڋt>��������Y��*�
��Pb�	���v�wCOG>ǽ4=�zaG�`'��}�e?�L�@�!�cybl�����h/ŭ)Z�T����0^>���xt8�x�s(�dS�A�ރ�:�	��A��f\�}����Ƒ��o�R�]ڻg�h�߇Pe,�ދ'��n�z�=�|�5@��Ƕ扬_Z��xN��{2�!v�3��-�	�^�@P�h�C��T�X!U��(f?�V;�WO���ѮF�^�_/��w2Ę�W*�9Ͳ�Ã����A}��z�`��Р�fP0k~),C#�kia�h#��nGA���Um�Gg���٣�!�q_��6#*l��M��w
����XGL0u��2�ӎ��ҕc�e���mz��X?L�A���_��m{H�*Fu�ō���5r�CXZ�Ps�^��p5;��=����N&E���s
�M
z�
R�
���>
���@�N4]ֽ��:͐�~���c�;��S���8&,z����d>,,*Fx�Lkqk�&���I*�o"��NC��ÜS��X�ͦ�;ԃ�txB���К�0(�1���I�?
E�2�*5W�>�h�n�{�v�D0��a�<���4���X�)��|���9�mNQ�-�<5 =�����b?�dג0D�����Qnnn�7/@_�x�������m�x~�.�����=�$7��<�֐�@~�g9��G��E�}��
blx��W@�A�O�*�l��@��x��o���(P�ƅ�)����<|�h/IUOފk0�8G7��2�D4�#������K����_�s�b@��3E:�����TX�(�7I�ţO�:9����2-��_��U����1"��Z��OPt�fy�g6��_�;ؖ��i2��IqZO��Cd�ag��H~���*�Fc�|Y�}'�~�d�c�=�������¸�V�~E�����U�W�5hʩ��R�`?�=@o,�9"O��"S���?m�X�B4��`��6���eM!?��EhŅ����D��c���#D:E��;���G�x:��g��7����Q����}
g��7��8=i��
��~x(�g��;˜���n���z�M�T+��57�!g�!%�����
vABO��_����p��#�>�Q���Ww�4?T�߶m�V�D�v�a�]�3<(��p_$�0~[�&����
�����N2�w8X��P�h�:;����
�c���@j��}����a��Թԟ�S�>�����)"ϰ���f�M�'Y�4&��\W���h�%��EUE��(�Q�@�6��8x��{f;�5��v�h���X{�Ih;���S3��er�l�T-���Q2�S�O�]l�It�kbU��Ë��0��ٸG9��`���V�3z�x�5Ƶ۫Q����g��|���{h����k\�{�f�<��G�~�up�9l����ݭ~�H\��]�����;�c9��-*�"��P�
����r���w��?�}z�n��)�QT�±��ʏ
W�|�`��@e����E6���W�9�!�t"Qy���p�)pk'V��ᾚO��
�,�3�0���X�����P����iu�`���K2Ε��JWa|��"�~�48m�B���E�`	H�4�`Y�ǩ��y�;0�SygJT��uXf�ZV��R��7�h�q���4�H��Θ`mH�2f��
�0�%֔)����;K��o������;��͍��/�\`۲%��{'%Z� π�fQ4q}G�T�N�f�2Ƣ�� �:�+O�
A��ND
$�͗������+�D�aE��KA���W�������p�w�lZ��Rũ�5�M6��s��$h��P�U��Y6�}���c��l�V/�LZ�z@�����u��G6FNl���`޶ɫ;�T~��*��t1B3g�@~�Y�W��83+�k���$\��H��!FI�u�_�fѽ�Ry�$�q�?�t
l�1I����|Z(���p�84������7?�{
�B���iu(Άi�8�΅%&f���1�ˑ���o�
 �$����$��̄m445�Z���4��1=Ў�j�mN��˺��d��Bl�,�Ζ��U?e�qFD��w��HE�5]�@�O���Ɉ��I�|N.m{ظ���cF7���y�'���`F4�,��"�+BH(�i�����z���"8��OC��<IE�� 
���Gp�
(�Hlx*��|�"
�Ĺ���.>W��:�dW�!�|4U!���a"�B�X�Z^2�#�"2�D��`#QL#$�U�#\�/AA�ü����`Ğ�}��Wh@k<lm��:�yx��^m����~n�>���ʣ�72Gգ�N%i�?��[ Ѐ^3�hQӢn��n��͗%x4ϼ�J���2��!-fLT�
�x:}�`�i��<4���	�ͧbh(���z����M־��c�<L���E�vb�jKJ�%���Ng���@�[!�s�-א
zr󯒯�(%1dE���"�M�����/�����]��-ŵ����S�ӧbz��L��7k�P�)
�'%Ԟ�t�v�]�_����R����S�k�TUPՕ���9����5��vg�2iX\f9�w�;�&h·+�f�`^=�j�a42�?�{��^fT��)��;ظ\}�3^�:G��mX��{����n�9,B$dJ�,)�^��x��$��*����
�M%\K5ꕀR��r��0Pq
l� Y�nʇ��%�`����z��D�'?� �@}X� ]��wW����P��Y`W�R�]��2�Ď��@ɽ�aٜ�i�\�+���C���"ZH�Մ�%�0��������n�Td��̒�~��&|kYY�4���n�@ǟ���O/F�ɬ�N����d�$S�
�Q&x�sr����~Z��5����@���������k޵��B��Q5�~�|����2,W+��
�'�J�L���x�Գi�cV�c�����*.�>L��ez���l�`gN*Zt�i��9B{��ng������M%��`7�K��?���jׅ0(4����B*QYϹ��U:%�E�8Ѝ�Ԗ��*��[�̉�t�ƣ��+�r����;W�Π��¢N�u�yYT\A�L	1I�6�č��V�j�B�������BSn��^���ҳ/�l	��f�E�y6IƊ�T�A|��E,D0�^ܻ������n���Q���6����:��ߌB����x��*@��L�&�>���G6uP�`Axl����E�E
t�w�Z/{1h\�o�|��?�& $s�;Cc����u���>#��^���z<n��\v(ۭ!����nú;�#�?u�����Q2��8+�����u��|�]L����^�w�]�H�p^%(���i��	�V��J^�%a�v�� ��8%��~�$WoSn���r(�Ź�d�Rá��0�Ƴx�A�Fx-%��SE�x|�
�(����t$��.j��
���*��d�:��󿾄�Oy�(i^c�v߁�����J�N;����r=c����⮃�	,մ�ng0�Pz'�Ck7p�	�o�-��w��T�[GG�eM��I��4Ȃ]<�_�DH_�A������/I��I�f���V�x
��j�b��q�Q�c�G��V0�&Ax����A��wt��k-5w;�!��Q!o�v:�>�
���m~��A����w�>큲��Z/��K�[�lR�!Wb}�b�� �����㪆5�]'�[
��~���+�`��DL�je��'�Iit�IA%k�.�9gq#6�%`ܺ�Q+@RS��$<UP9����'x�n�=�z|.R!��h��V���J�=l��9.cέ(�[�8�p�`�/�_(Y��S{��g�fq��a�\��E���֬��ze�~(/_��	j\"������"�DUL�N����]Kk�0�/>5���u�P��e=��u������_�In��F/}H�b+�#+z`/��LR�@�t�0(����������n��)в�2Sm2	�'(? �y�0�KP�����y��P��@�l%t�����+� 1�SBk6��Hڀ�n�%L�*�Vg��n9qQ*c_Dv˧^5�Y��P*z2�f�2�J�%�pa
p�uR����so	�p�A�����k����f8�ޒ?t�~'E^~(ȔV���L��~R�dd�N,��S]�՗���^��P�8�j�؝��%�M��t�	��*]��*��$���Ҙg�M"۹t�8���p.|`�d�"Ƒ6F�5��\�	Ɗ�)|�����#�D���"(��V#U,O,J }��\n}��i��yx��9�&�1���P����Gbb��7�0��ќ8Y��Zw�[������]�k�0�[�oe��ae����m��"v��QLH�jHc��B�>ݝ^�l���H�r���{��q]Y�u���V��0[�)^p��k$�z� �j,����?�&�%��iA'�/��)y����}�Sq�O^�B:�3�Uc�� B5�4;q�*L�zc�+��4���LK�L�:�UT�z��o��x�Ϣ������{R*C�ı	PǕjsǽL�|o�H�~�މg�R�dzd#e�i+�DV7Z���[ɀ�I�"��Ly��	�i4�l?y��uE�.3�W7Xab�7�2PfC���i�㮬��E�� ��Q<����]��-���c��l��K�9�`0��4���roG��2m�#��A�x0��]��d Q	„�$33�d&��l�W�%��`(��X�W�*����p���e+}0}`_Qו-��x��Q
����!�(
x����wɊe�����%F��T���<�[��7�'�ϳ>�oU"�o�ş�BO�b}��/pʛ�g�ϊ��Ǘ�#S�9�%]�@�%&�������d4��ٗV�a��|-��"�u8�"�����3z��}t^W���d	��;>R�{��R�3�ڌ!��F���|��D��Ƅӓ��y��,��޵����cI2G���3��
��+�Uc��'!��a��	��4�EE1���hݔ���(q��޶6�7Z\yNfk.z�m���g�bUE�~�p�����Ր�d�����l�-���;PM��e�������o%e]	�+�C�@Q-�B�K�m��
��wơ�KeG&F�1���TUi_PR�"~(�h���G�u��cJ˱LC��'��P�:��ɴ�V�r�e�Zn������ko[���F��>�;
�&]7�M����0�K��hvס������9N��S=(��$�"��c���k1dM�ٺ�#��E�����p�)憣��|uv=�~�3*b�%g���8G�Ա����$s��$v��"���Ei^��P�+�u�;_������v�kC������=����Y�8�e}c�MG�9��x�M��gy�}����㍍�Ӭ��wb͕���G
�sOh�w���D�8b?��*Wp
���_�b���S����W�@��7z�&o��#�`���2]��Z�ě1��f�/N+�Z)� �.�FDT��m�/���FY�u�����C�~
��oT���kH�]<����P&���!-@��{�V�p	�v�ϗS 7�c�g@dJ����8F�bT
w�>]	�Q���0_X�ϝe{AcEٮ�#{�ݭ*��׳T�W�I���wI��˭�r��n-��`m��(�����@�}Cd���C��}�9��w"�o�({��-���7/�tZu`���>�+5�=���_h�A�h(зԢ�cm�n�	 N!�mد�kֿ�Q�%���@�X]�=��"9ܫ@�C0�h5G=2?��+��LƵ�֥Vzp�Vm�Q���{ކ��= '۫z����n%�"'�NH9K����	8K��qJȄ���x���#�ڏ���8Ʊ������WU6EZꨡM���Uv(�&g��x���ɖ�]��3�<���m�������Z��ɍ�h�CDo�6��E� �����+��Ts0$d�C�L˕l =�^U
���v���EU��/%���M�C�V�T�^�3�-�K�Q䬤k���Z�o���RS��ts��Dql	[�O�՞��f��ԬM�L�!t1N��F��O���g�Z/���Ux���=HiJ���&��h}r�*�M�!�x�����b�W�Wb�^�ex���)����Y
���[uc��8ɋy
����4G���|���f�gf���g��lr�򡶽`N�^�Pgj|��w$E��Bu��B��p���I>�̲���hv.c�6�v���;'�Y+8XŁS�����+.�0�g�M30Ƀ�ґ=ՠ��T�*��C����	����pi��XPI���%D4t��;�5�~;�LA!�$�|p:�8�p�s�� �_-�j�V?�$�=��(NFO�EiP� �y��b�&V2�!Z؂K�7t��=q�#{����Η�h'��ڿ�����4����Wz��shr�)��&n�hR�ug�y'�Q���J�hbc��{�Y�x�Kr�|��j>�8�Ϙ5�m���$j�ӯ~ǣvI*�n��}`&����΋���l���,���kX]�9Y��{*ސ�ʽ��M��A^���D�R����<^�ԗ��lA9\u�j눨>�ff�N
�(�lT��b��O�O�OG����a����������Q��U{� suD��Jz���='r�ۮʣ[y������(�ݥ��[��!�o�N��:4�3�Y��}Œ�K�r��Q��!�c_�zr�����R��&�¶�7M	y_��(�8%�Ɲ��e(*�TyR��;��4KQ��v���q��S,� U���1��?M�z�@�7C$�mq�+�Ĉ>�m�bl;m����z�<�6U}31*5�м�mA�k������	�aR�!�������Ì�8;�����p������ק�o��~�{�,����s�%��⽛���M�ʓ79QŸl�g��~ysT�������}��!���ߚ�dQ#�������k�D����p�� �H��\�^='?�=!B���7F�ǃ���6O����N��Cx��Ob��#���x��D�=�3i��S]����Y����3U}�m�ڷK=�!*��ki6�nm~�QI���y�H��{�Ą�+j�bj�G�Q�tu�5a���C��>���&Vbݐ�gGo�^������xl�eT�nRN)�r���[�J�OG�~>*0��)�`@y������`.�X��;9:�~�y/�7���(1�W��Vȭ�;i2��'��Z�݆D������#
x�(�3�2��b����8�v�A��!}d����W_�TI�����8��^Bh{��`n�5���@����u Y�xf
RUw�`m�w�x�u�ۅ6���
Q#k&��{aE�/t?�&!c�ݑ�1���O���4�c�'��Ŧ�˱ti-����aR�C�i��n�Λ�����w���ͫv>;���)���l=�O��Y��:����|_b���B
�T��G���ܢ
��/Ɠ�>��}�1$��"a��]OBkC.Bx�������^cib�m�	uu�_ő���_�?��Īn�6�����b�m���no?}MIp�i�],�Ac�{�K��
?�����Y�߰pYE$����\*Y�
4����������Mz2c+���9<ļS׭�S���$^8Oa�Y}B��]{=�p(��p;�$N;���v�{wp �ŒE#�Rv�#��ם�ӓ5e�b����S��y���G�����lM���%VD+�t�7Ʃ¢�M�5�B���]�>�Î,��
��"e$=/��7|-6�:+�
 ډ�'�2{\l:��S`S�=�4�V�|�f�Z�6�T[C�=����0jw����^+������;=r��b�[
�G�2�0����)%�,�q��&�ƣ�Y��[
0cϩ���]Ko�6��W�>E�8}�*Ur�4h����,ױ�ZE2$'�a�w߲��撄��C��ؽ���z�k��f:��^>lO-Nu��b
��	����4�3	�ԛ�?�@ߴEW&}�f��k!�]��k�/��v�}���`�:����r��6��c���m-_l�n�	u�q�bdm��b��[�i�2��y6~��bM��v_�ҀA
ӒW ����q5X~��)rǴE-�!sN��tă�0QdA�
V^��!�w�c 3>��h�o3�5��4*/azE1������Q��
o�h�>p��#A��g��Ұ�躅�O_��v�x�CݤG��Ԑ�oFz@�`�a>7sDtS{P�Y����^�L��&�ϧ!��4G�� +�t����7e�M��:�
���¯��3
�S,��4�¦E�,j�s�ky��r�r�,�S��a�-(H�3g��ЙZP��@@�2����.	�:��	�۪��㝁�EK��?�r{������Y�V)֒�<�r���ȫ��X�E�L���uQwlt����Gږ(p���=�L�u14�|������є�1�Fep��Ⲗq�␼��T_���=O�j��\r�@��Z�Da\VAK���@E�A�M�����[�!4'��X�~�8���M�^�$�ҬCi��k��N�Ϧ2RW��{���{e��g	.<df;kc��J6�;�&�"�fg�(s
o� [���л���%��EӑX4m��6*M���f�1�a���ӳ�o�/��
|�V�)�2G%��|�23����{)S�4�b�p�|y�}m���Ѫ�<���l1g�
X�w�B��<�g��r��(�1�-����0G���s�
:;'��q���y�fK4���q2��-��c%�'���١_W�<��t�:�ZȽA�m�
�I�@��<c�9�V+�
S���y��h\���v��u�U/0�H�s&>w��8wt�����jL#ߜ$/�F@�t��p�"+�]r���Ow��-�igeh�ܕ�	��ys̽���%�1��Iw=^݅� `����{8���v6���DR`�z��X\�<}8���ؼ��zt���2V13<���`D�*�������+����(F��R8�M�����o�d�u�SY�pf���&I.1y��|F�4�<FǗޖ�S/�h�\<bŨ)��8o�d	�S��?�h!9ϋ��&���8Ғ�t�w�Nyف��T<�"pA��:��5?������+iC�>�����?9aN��[���f�
����0�謢��UWv�9��	���
V�v����/�Ta�<�=<�����x���0(-�f�ܺM�jʌ�ЗPUD`7��\��#�x����j��m6ӳ7?sq-�zſ���P~ool�0@IU)(�v�2��94jt�Nʺ*k�3�1�Z�<tIY��x�}��ψ ��D�*�� ��]�o�6����f2@Je�I�ap�Y�
zk6�]ϱ�V�my��mH��x�R]�M�����G�\����+��褨t��Nctȳ�NɨxYY"���
�=���cc��F�1�H>���VgR�\�L~���N6�l���.3V�`lK-����`;Y��%K)���3g�喹-97�E�D�_dkr
fE�S�H�r*,x 54Fk��?���%��W��aA�$����`i!,�;��g5#[ѼEMF�:R�?~�{]�bR��s�2]Z0&1lۘ�k'<���⚸�ݲ#�:E�<K��a�s`��G�xZ���i���c"�-��4��/fi�fԲ�j��J<er�[�.A���\M9��l�N�S�R���qPSp���kj�%��d�}��}x��̾
O�G�lji���E�񦰞��<4�D��H���P�VLy���dF����Y�~Hs M�����,t¢��)�A�`dܫ�o�Bⱦ���dD�R[U,�&O��oZ(�����2�J�H�F�b\i�EI����+���k��#��$cD"a	<�7y�jxA��_�Z��A5?18=<{s���[�7J���r*k���i���$2à�I�{�����k��2T�h7���.\�P����f�r6���B����*&���`�n3�a,��F�{��<8�m�}18O,�ϗ$+ޮl�v$�ns�A�~]�:�Wu*C�~}��"WE��:�i�t1�Ѹ�mW�����o��}6�#c_� J���k5��K�(�y��;
s��]܊��ږ��Tb�
]B��4:���s���U��7h�h��̡�6L��Ү��H��x����y�sN
K�GqT�
���'�66��fn䜠␵=�:�E��-h�݄UpRR�^Di|��7��;�.��8	�!K3?F�S7>7�ZF��Ӆ$ٔ�E7rH��_�s��b+�n�i�(��(��!^�S�m�͜�O���dKh�;���w�E�uЯʦ
B��
�t���W9�&K�$��%F���9��I�D�vr��.f���5�������7:���</:q�],Y�c��:'�+;��Q7Y�1�w���{;�J�%=iEp%x��5��9��UN�Ua\e�rz�IԦ���^��;�[e��*��a�0�N�Ra��
����_~0F�6MG�Oc$���D$�e��7)_��g����G}�����]�-�&X�#=Un��W���n8��v̨�N�S��uD�,�o;C�B,e�t��zU�
����)n�T�MHC����n�"$��ͳ�}$ZrjV~{7�đ��C�m�!�/Ib��X=���u^ɹx}}s�����~K�Ag0�?��n4���nF�2�r��A�%��z5�J*'����8>|�:�4�U	����IPȌ’�D�̋%�����{�L�����*E�-�8]�4j��{���rz
BfP�X!��2��<�G��4��=��L�x�M֐��K���M�����v�/䐂�Dڳ2X�H��`�Ȗ.̲")��QX��"�k�,fr��5�` �M�b�O��@|�e֓����R<z���Y�e���?U��+���m��)� -��$�L�k�~~����ά���36��F��"��G@?��Fz�NH�&E6��0AX|��|��`�y>�Cx�_���ks۸�
���d�Џ\�W9L��[=[r%9��GG[���LzD)vj�w���5�q(<`,�����%�1�OQ+�Γ%�
p?��!E�	�l0����5�@ܤb����Fex.,C�l���0a��.+���'� #�6�[��,��q!-f�v�
�sa�#%ŕ�S\��Y1�<H��[Q��p��g�r����x8�1Hn����%�d�M�����{�I�\F��ܘ���5��̱䶁�Ŕ:ʈ�5��:~^��o����o��L@�����l������#%�(Do�IL/û�w��}�\��Z3���Ar���%��5�Y����L�a�Wg�K���.�����W��h�-:3�&y�HxuZ�䘧��NQ�f[�8����<<����˛�r�LY���F�Mr|6��OV���ݣ��˵���Q��F�~o�:͟�n�r
X��T��� ��Z�{kw���SG*/l��/��I������)��Юai.��O�/8czA�'�=��L@�]�}�0�d�=�T�n��';v/;v
݉��+�X{0��G�fӹ�ZZ.40�.`��)�a�̤nL�p0"tw�'ӻ���Ϝ��W��������%_�IW77�b�Om�T�jG��u�Q�/��e���]���9�����>�圓�T���'V3nn��F�ss�:-uh�Ʌ���d2pl."��vU���m�87A�鍝�#�4��[&�#-�QJt)f@X�j� ���V�eA����c�}x�W
L�s_�Ay38��X��)Y��d�i�~����"<�lgw!$�8s6f�%�z���_HG
�{W��"�$��"�Ʌk�1*�H,�A�iL��ao4�;a����t�MC��H�Pq��r�RM۪,��8ձ�����(�ɝ~���������H3C
�maI�@� �,U�U;���z]���z�ݽ��s\#�%%l��6sgPq��b4&����\��}��<�&(��D��S�_���s�
[�ud�q��CP|t+�'V��\���� �w�z}��j*PM�&$8(>J�m��=\�B�%c�<;XҀ����i�,�T�MN�f��^
��R���B~T��ÛF��i7�i+p�!���%��g�y�.ܪ�VX�pP(��e����nyc����#�L�W�6�6H�q�}�8i,���T�;��*��2��=���wp7I)���1�2'+��R}�NT'��SGŨp{:)���i}
��z�*���m*J�9���w�Ԛ�Y�^�"�@/
��iW��)������f�w�w+v���Q�����x�����r���Av��}ԎwZ�U��=����{�no|4��Z/��Ѡ���ȏ�Ѡ�!��~���1[�@�+ w��~r�F�����d�^J�~v�v�'�D�n��e�*���v{�#�R�!�`�����n�GT|GO��P^��A/���G#�n����a����#����lWN���fs�㙜���!�a�E����
�{j�j�1��&�?�|�ގ{���8M0L�vG�yn��'9���v�� 8�Lr��:��}�	6j�HR��%�zq۰~���"�v��;	�#�9c_}��Dɱ�>9'&#��jxz�ϰ��-�<YL�3�9�����l�.��r�7|�~���[Hv2�88;�Hy����)��f[D8�V_�����}�[K�
��<��R��s�*)�[G<�W~?W�	y�OM�7�)4��?�փ8�
BJ�/fB�/�"�N�CXﲵ�������X0��q����Pn�%��:ő��9��FZ
����F���un�D�b�Xܛ�l0�}�}��x\[��W7}?9A��ސ�!i�c�����0rs#"���4���^�*�w�]I�}���Y�,wlkv��W�'ˁ|Q$Nb~�z��/�o(1ь3K:ߐ��o��k��q�ec]�c��K�>x�����5���kv������
�vԐ&�uЛ��-��tн;�$�A�h�u�K�>8&��*�݇��-��Hܭ��S'Aa��0�8Ȋ�	s��E�l����F�{tEYA�BY�(G�_LD�n���K�KuS��MxuX�R��nc���u%�C`S�8��.��BS��T��+�Ti��]�
�b���E���ۖ�����zS�e��>M��a�f��D��r�Kǭ�S����S��fN`�2��l�5Bs���K�ܙ���X�M+�
O���e�I4gM�쓡�B�Ar����C��]���4�
�d�$�LѤ���և{��h�ﶓ�?��gK�"�VHA�P�����YɜHh���}�u�M=ܭ(F4��l=�jwUh�ԤR��L���R��QcoN���_�P'���Ex����X�k�‹�8N봝O?[�㮙[���^%�r�$KӺx1�N>�c=m�9��;�4e�,�s�_�E$[
:�U0A�j�j�
O��6�N�}ۏ�u�;h4 �i4ي
�H>�2#yӔ]hdU����@�T�E�����ڒ��g	��4J`�e��v��<�cPZ�cl��Hw�7���-��+�J�I�}�ge���֛��ޗ�/]#�+����zq�wV�:?�������Rԁ��U<D�5Ba��z�-��A���C�럵��n��~��{h����g��o0!�<��x�ǚ���@k���S!�>W�Z+�:�m���iXuNg��Y��a6mk!O
\�}B�52Ջd��:n��G��S�֨��]0�-����X��Iq�*@7���-+9_Hna	� ]]�A������L�2�N?:�7�x{S���4�-C�����ҰB5,�A!�X���w}0�H� �̒#���_!����?�]�OG���.md+g
iH�����i�� ^UE'S	)���Qu�{w^����!N�����fgwg���QQ������z�nZ���"�_�6��z�\�F��V���o�N\H��uR����x$����H.�f/@�[���R�[p�xzq҆(8�x���olB�����]��?-��ib�^,�YʰR���U�?,�7��n�޵�'��ɓ�|ѩLP,���^�t�n�qs��Y��X�"I�,4�d��3��(G'�Ѱ?x�]/��F�zw0��O�eDE0G�9>���}Z������N���Wѯg`�<����?��|����]4��v@ȃ	�>���G������!@�
��K@(w��c3��p�����̆g��ߪ����<��?��u��X_ԍ� @�U��c8|��ets5��yj ���%q]b��]��fk@2�vg��9$��⑰i��d�P�/{6I
��^�
{���`[�LW�a�T{��L��|���LԳl�\35�2Ѧ�>��W���bT�ȠRe���3/��9�����f�����G�s���N�˧篏�n��$!Nb�̭��%�mI����8��Jbn���i�K�N%�
�5ܶ0�'.E!=6��ψg�҂���ٜn
���2����}��b�w�ʁ(dؘEx�rQ�십.�t�K��'{��	뻪
�hZ�|pS���|�'�=�,�
jo$zƓBW�eH�ۢ޾UedcJ�Q,*KŢz�]�;�*q�	�R�����u������>+�+�s�c���&�Q�a�>��(�(��7���G����gޘ�ѳ��9*S��ѫx9?��~0����sy��Q�φU��:�$��/�͢-��}����<��`&����rm�w�	/����B�;�<��J�X�)�3�Q��e�]p�9$ -�	��G[n�����.�/��_�����{�,˺���7��KhN�t�-}��8�'�_5��%n�m�r�\�p�K��Lw��?6��{�ه�9,�(lנ��P�bPC
&
�t�V
�n����h3
�O��/K��g���ZQ��I�)���Wa4,��.<��E���4f��^H���tA�f��?]'O���'X]⓺v�2��Ʒ���_n�f3�MY��D�4��
�{�w�[ƻ;TAB�@Έ\5�bK�(\HJǠ2���.<X�kZ�,F�H�C��V5�=)|œӅ)��q�*+�|�ͧ(FO[v\*[t��e4�V,�ĖtJ��Ej.П�`!���H�cεɧH�@�f�17�g�c��VAX�uC؝jm|9����v�I�v�ˇ[B�����f*�Ž"��~
�t%�(�E2� �v !�$�Y%Y�U��Qk��/�ɾ<�����l������h[�������S$h:�@��z$NY�eBS�L���~j�$�~bmJ�Ԙ�Ո����4���j,�����yW{za��P������!�h�q��k���|�!�]Z�(L�9�5�vnTJ��PT�E�����cT����!WE'��~lV.h/b���réo>��Ʈ����e�Ɔnþ�/�Y9�j+4��d���E�ky��w'aeܴ��%|�5���G�/�Q����w��GB0VJ��ɢk yB'���I���P�\g�9�C,]qA
5��ݐ]N�#8T:�#t�*�l��,��V��|,���+<��������~��}�HPeV�u������+�ٽO?~���҅F�WØ6��10R����E��
P�LZ��/YR��$_.��Ɠ��	Jߪ�1�o�-P���t3p&D5��bC�^ZjD��8ck6!�*jI�T��֖��H�*֑G��‡�N�~U��|$ �A�еc�Z=��G`�c�������f5릍.�kEYi����(FW�68t/��l qm����F��5+We�/t֚1�����*��yaY�PL�$�1$��d��
�f�^�u�N�{�/!I�𶓬$��i8	��$	t?��]�9�m�kz4RR�oœ*�ˇ��3!�I��gQt�B�$�8������3X~o��R=��ȋF���W��4M�%E��lֱ�� �����nU`)���=�r���:$L��N�H�" \��u��Ȧ^X��k|�0)W�(3yRXM�Iǃ�)�T6�,��?d#n�u�.=�SN�^trPTk�#��%)nd�nY�Z��,Y~^ڨ"U�;�}���	�)Q	"{%�q��ra���S�Fi^$k�wh1G����T2�Z��d��~8�8��WH�?�pӡe�:�q�*�9_����~�*C���e���Y���˶�G�^��d%���B�Nl�_��TSC�}����:�e�c1bP{�kcx:b��⠻��Up���J�q�/���ko�8�
��Ћ{-Q��M�uqI���"��jԉs��^���_"%Jq��Hk�H�p8����"��bh���˴���t�r�xl� l��Ŏ�V��f�Z�ה��*,�DZ���c�R���9qFӌ�eD�l_m��SQC~���(77�P?J��:o�(��r�yF#e�Ƥ�Z�[��#"��_��%�2�O��c����,yt�S��Y2녎���@��m����W����n��v�M���r�[�
��e�0�5�s�3�,s��q��Fǰ��89�_]�/ό�����(����&�G��>���i�?|k����kؘ��m������O��v���������}���0�B���C6�c|O��ơ��h������+��y�����<��?'"*,(�`w��s�~xgYZb�%����,D[�J>�}��bj*̗�#O7K �H������!���{����X�3�ѣ����G���������|�h�	|�׻���z	]��le��.�wo��E�[j�2غ�Ex�o?�@������8�T��7��\7�����V2-I�Jm��'ց���C�c:H�B™��ݡ��PP+��G�V{�Hg1yj��kVr�c�Vʹ�qٽ@�ScJ���U>2�z�e���I1����g0S5&���V���4e�6X8�ۀB:����_򑞀��4�V2�
�歷��`�"7�u0c�X$VW�L�r*>�������X�=(j]����bzѧ�>�i�3�iD�h:��0	���y.x9ݔ�E��qȶ,)�
�1(���6�'�A�$)b��g�%$�i�R�YF�<C@�2�	�m�`�	@���s|�D^|���$f3��hyP~�k�O�(k�F��iF"�e�&~J�q]e��-ceN�k<��j�j��$�f^N�4'��r�P�xd4I�I��q��a ���qH���I2�˸�EE3x��	��0�k������/��%�6`�=����~����뼎���i�����������a�(�[]a�<�Z�����і�l�1�>d�c�3��|iC[dc�(:i���.�6)ل�A�M�&�&����'����X4��l�<�$(�9�%��}��L!�r�g!�ձ���G�T,�D��5Ͻd��N���tdžtח:�K�� {Hۙ�b�B|���������A$��K��y�&Q�N�8�q�������(�}����I�����/10@�"�|!Z�~&��d�W��ZS|p�ދ����ԏ;Io��7
�#o�a8��C.j�MQ���f���v����g�~���@��(w��h�l��GHz�-��9/�BW�l,Aj�t�d���� /�
�61�0�9J8h{�H��C���hCנ��%H�8^4�lqS(��D�!�1�)6$$�@�.�\C��<\`�?�dK<�t�;F�[F�̴�a!N�m���kR
�dz1'���
�Ys��d��+*<.
ը��%=]���?�'�y�ѧgk��4�����B`��j��Wk��Q������p�Ɵ�c�G@�|!OK���O��|��t6ά��'3[��8ZC����T��%� �C���_��E�c�]P��a^rY"�?�O@��.��
��M��V��,���]
uD]x�˫9:���Q�>���aT�q��$"Hb�Ɂ��c-�c̒A�!awa�';4G���i`���� �1�b���"EH(~��C��O��5��8�aj�j��%Z��%M���A�4���BD��n%��oi<r o���(�#��0��w ��.*��M?��c>"$|D�r���m�s;��9�r��\�d���K�3�J8�0�{��_I��	���W|�ñ��j���PMq�����>c�܈y�����t�^����WMө<D8���%���ͅj���<x��i��ʏ2�PQ
�D�!�R��_F�U8H����/ukz�5ϷD����ٷ�r
�f��:�AU�t�ڱ�S�c.�56��t��Y+U�=:ip��b�����8��vz��]H����5��Sচ���c@o~�tȿ���|�:.-z)I���ˬ��ŭ�Ӱq������"�+�����M���:E��Jql>s1��/1��5��
�y���]���A��1�
_��j\ut�ñ��L��G�2T
�9&iU�9;G�Tq��B�~�o��[�-b���'���.>٭�v���|�a��Ⴠ�3���:?����r���/����D�CX�"N��Z�m�������J׿�i i�����?��$0@��ՠN���<��r^4OQ�������
tZ�A֒�b��x�r^l�'�/��B���qr��@�ٓ3��m����S��t�Z6�E��a
�*@��@W����������վ;��,��٠!�;U�dMN�|��h���ztt�Ze	kh�}?�ݯ����nE{iB�;�.?�ܨ/����n�"���)�^羱��*��*���Ǘ�_j=}&�Abk�I�f�{����-'�.d��C;a�P���6nN�K����(6�eE�W:~7��6~ �K?��������st; t��wv&���X� "�UPϳbŐԳ��e��[We��L���
�K��1j�����YKUA��e���R��a(�sI���MLU�@M$-u��2੪ʙ�)�p��e��%�����(��2��iHE�j�'/bno�$�f@CGy{R�9��s�:�^~����W��p�(-Ąo+e>&�X9���\
p��O����x*_����_.qd��5;:��H��Jj��ᛋ�K����x��j4ryz�`V�+�e��ă�]��9�ˢجG*/W����k
�Zt4ݔtV�-�T�CVi�sc��G�=�Š~,-��b���T��G��d09,���uq��.d����Ϩ�?�_͏�:�~����_ka �l,(m�L��U;��W��J��j��)�.�WE�}u3�4��w����D}�|�U�ƾٵ��4��~U���S�J���e�X�Ne����,_���L���bL	��.�t��+ܒ�	�����\�K:+ߡ��;|�0r��冏'��,��Y���qHWN$�jz��5a�_C��V�g4��[��~����z�:�n��7p�ԓ��|���*0�D��s��x}��1YL�B�Hp��ݷm��g���HØ��٦��ؿ��
�� t�XNb^
�V.�>0�r���8p
�A�y_"6�$��L+D�=xq$��/��4-�ap�o�l��A���K��`��m��t���"����"������bF�[��'�4��zH�	P�����|�D�B�<M�ʱoU���]mo�6��_���0�$D�"�uP���N��ه}\�[�(v�4�}��Q�$��m:��N���E��P���ִZg�N�
�q�~���>�u�<�Q�_�Qy^���Z{�J�ֳg���d�ձ��b
{��܍cH[[�j�>,���<Y��=�����(�;���.�8����C�F��
ߒ�.j�|���I�^)'��K�=��g~w�!�}���//o��^N��b�x��?�؇������×��xrz���?��\�Óӓ��p���lzsw�\G�oζ�h�^�_�)��R�'���5�6��^/���۱uظ�Zy��G.�;;�OZ~����Wb��-�]�Z����>֬~kY���Ñ
���N�[Z�̮����ۓ��>��0l���r>��}�g2^��yzv�f�y�n#q��h�ڢK�p����[T��U�Y3�@f�K�ԩ��_�%�*����t��O���j��%nu�\��ک3{xX�Q�&�W1:��o��-��k�u
���t��E$���k_;@]�@6˕܇��O�ɻ���8«����3�O�>�����r~3�Κ��i?S��O�u`�)R|��mfB��P�r[��i9q�~SCbӍMV�\
�:d	�,_��qu5��RBk9%��$/��D�2���d>�PKQ�RK@޺�%�x�����K`��\2��6�9 ���k�ըnx�g�((X�*"�T���Tb���G�I�%�6ikIq�� sOdV�,�b�n�t�,D�e�f��`�8`�dz��75!�@x���O
�:'A�Z
�)Աrj	Ņ�Bf2�L�g%c�Ѻ$\�@A^�T��OD�"�Z9'�$v�@A,d�>g�)�}@���*�\�b[��\�i�X��V�&
(��@YO�6X��>�{���ZcM�+뗀�]6h�bt�Eo�}��;����H�����x<����\��x�ڎ��+ZM�3�#Q~���Bi��|�q#��报+��&���t1�����/n5�9����=�"�Ϋ-�������8�-i��#]��-i�a�@Fif�xK4��N�L��FC�M�ٱn�)�X�@1I����!CV�Q-�Ƀ�C$'+(����0���b$k�z4i������G���p4�-�q�y�R��j��5%*;�� ���%�����v��~�
�At�p#��0�-�ͮ�_2�R��,�0-�{AV�$�KR�3&@�P�dUN
�^9@}V�P�g�C�8;���8M�t��Kz��w��M3pL�@��k�H*V��������s��6�;�е�)B�j(T]iR���/�[�*��Fi;@3��X'�鑧.��H���T����mrn�����(ʸ9������=��"�u�
��O"�
cI$)k;j؋��j�d��ǝ)�H�%�E#�lK�pp��%��v��\n\�|��@�]�J�������]��۸�W�i

�-9�;\���&�&F��X8���S��\R��fH��ey�6H��Z��!9/r>��k|�
Cz0yK�"�T��I�6��/,����v	2��.�Sy��;A��k/k�X{�O�M���w������N�m�a�m��t�w�bl,7��M�h'�~�a�=��//BD^Ɣj�;�]As�Z�턥v#��Ɍ�9V3\���J�+.5~�G�XP8
��A�0o!�c��e�i� �.�L�����Ք���	��ɪ���H[U��n�YR���Z�<m��A��xjj��k�oj.�_����#�HC�HF鴒�n õ\��`�~�H�4�Ӄ�Tx�#4���n���Y��éM���m�l=�a+�49Vq��{����uŧ��̂�
f^6O:��&���2���zLY2䄗)�6��L�ytDa��%�If��#���_�DH˝6Of����%e��2�3��גeo�sߟyI�� r���@�fm�֗fR&B�!���P����M��1�fٞ���)�_^P�)s0`�<�ʲʷE�U�Bb����,�s������,�!��w�<��a���fD��=�}@���r�]�ۃ��ac�}�Wn�ӏ^D0����+���r,�L�!ݒ�=�i+��D���}y,z���� ��p'�`�ɘ�Gc
���5T��^�!A���C��rY�����
	���c�,��ڳL/�L/s�^f�^f� a��:S�(��3�h������N"��8�����jCO��������#��S59�]�X�qswEߩ�P���>�x�?G�a�2��&T5N3F���w��AM�H�b�"��D*�y��������S8@�*G���r@n�Ȣ��
��h &$0���"��=�fC`�ڲxmX|eo,�ǯ�B�@"�wЁ��;M��t����r��q��$TdA�c&{+��E#JTX)\=���!��z�0)�'�^��H�z���Os��k�J��<l'i%��wͧ3$�Z��M
eE�a�m���o�,8%2$�&�@���Wk�.>u]FٌT�%,5^�
݉�P:�N��0a���Z�4�q�B�����jK=H�Ŷ:� ���v�d��d�]{�TXL��u*�9e�5r��7
ʈE1�����R*�|��D��k�V�yr��T|$�϶8����F����t�1�]~��Pn�M��.Cz-�@�MJ*��ܣ��L�
i��r3�K`Q㈨SRQ<L��9�姑��6����M8L��a��}�����$��Q��񲎸3��=1��v�[���<�ߔ-�3j��3�:���,�dLGs��Jf��>�G�b���O~P��e�,�MU�S��l@��
*,w��|����߼+�n��f�~_��]�>�v�g�j;����֡ϕݣ0Ro*^Y��;�~��ʱ|�0V�]H�Hm���EJfm-�k��H��8ԣ��Մ�֐��x�8ИN�AIF��H��ȣ�F�ا����; ޑ| ��|�����8r{�1z3��`���@�S�
��+
3v-4D��������[�����%�",bШa9_g�y�t��},|d�
;I��)[���>N���/n��$�qH���q�?D)"�InPN����Q2�ms��p�lo�:�
uF`��h�l��0ʏ���/ÜIB��:�t���KK�\: K�y�%��"	QD,]�[�3M_�@�u_����9p�&S�ZN$L�J��(��X�b�J����Av�[t�Q��~�+B��!v�-��J��f�l^SB�X&���[H��F)��ͫ���U��j�yj��Y�!\���*")Y�~h��I��?�W*it2��B�"��&I���t%hu��C���L��I^q&W��h�e���6v�=��,�Hq�<������LMHa�`1��$�#�,�ɺ*l��{���o��ب�&A�8uGH�?���#V��O��]R��uWw&�pC�IĜLJ����ۙ��x��'j&;��)�N2��1�ј�x����S�z��I�
Q�Ee4rlXT���)�/��
��R�X����F�TT�>(�N��I��wYD�]t�1��r@�4z���k3ʑ2J����+���H
�9Q�%�ٛN��k�XY��خ���H���ev��&�����_�
|:��8:`�}�'1���6�ܷ�]�����<�ֿ�(�#�y��A���9�ڜe]��\p��e���{��M1ZT��\pD0P�A�i]�k��hm���e���n�(�q�D�hԨ��Y Ƃ�4���'�w�'�v7[�����'*�"��44�O\��*��j�z���I�nh�n�t�s������QZE�>��`4��2˫�{h�@F�ѣ�_�O�C��}��3;r��O���?��QŖ&��Bƽ8>���	\P���l��������l���,�;sD��]�G#�?d*Nⲩܝ�n{��c��f�+�_7��;k���r[�o�EM����kNf��T�޴L��#�xd�R�'f�ʝu�4�5���i�O�U�����h�=�"
�w��U���W4AR�Sy~pt��xϷ���^�6s�0�߿,�w|bW�n�h�>��>wZwa�Zc�����=cK>��˞��?iջ�H��?�/㷌��B�~Mm�n�8�)5��I?`��G������&�u@p�АG_P�	�cYlW�+�]�kث0uQsUW��$MRg�(�?*���w�WO�ߪ�_��q�&�Tqt�Gc}���^�G�F�漹G&��=ҳN5kͬ��Z���w�Τ�x�nމ�lk ���	Qw�uϸ�Hea���L8��
�`crH�a��a��#ߝ��
��L���7�ENN�z�*�A�z\ �5U�?꫿B]�Q���C�t�߁�]����\L�z�=l��oV�Ozz�h��p޿^|�<������꧗��7�_����Jň+i7��g@^^v��éT�3�_�G�E�ʏz�����fz������D�m����m�����s�����O-�$ӗ�dN�u�e�_4]0zզ����W�����z
D�ۻ����W�'���\��|�MC�7;b���~w��#�H%���L;�_m��ޯ�б]��C��0�Ӈ!���=o��Y�<Zp��m㩧��;g���5s��|��2�>4�M?��'���]mS�J��~�ѦX�F��M�#NpN\K��Nv��\G�JPcq-;�5�ﷻ�E�!�N������������g4(�{�;�$=��F�P�P�D&�fWb��]���<h�d�����g(,ˀ����f�-��{�YkwL?��p������Yr+&�6F�%*��!6_�9�e�W0A&F��Oe�@�V��V
��}��@`�����3B|0������%�o��ɭE�7��a�Ӛ�&3y�|Ug�u���C]U	
5����U��vD
��U�E1��yv��d��4�V{�\G�J�EA���lv�Y�r��jÿ�:g����Y�(z�:����Azܑ�3��ŧ0�`4D$	��V��mwsF*K��q���o:[$�ʁ7YA���{i_�	��a�פ3y��`$��hŮ���쳍ʔ!L�~˫*@�I|o<YE�F�OB:���)���T_Me�Rpc��h�,���2s���F�@��I.�@jj�&34�	�N�o� �fS,�$���}�c�����ɪja�A�W[��Y��U�	ۜ��Ya�6g���[ɤm���i�kL���hL=f�TM#���/Oh4*?�5��v9]��'�s\��f�F8���n��5���?!�d��D>��U# ���T!�ǟl�HA�5(:{����_��_֐<���!�5�u
Iش��?E�<�Q�w�ê"(����ө���8����x�R�Ay�7��8i�7�^0TaZ��'����N��������nE�o��W×�oO�����l��3��B������aH�[eG�&ʃjͅ�c���Ov��@r�et�Ʀ<M)^&'�ZK���gk�"|ώ���0�k��FRѹ��TiQ͛�٪4�r;>n�˹E�G��?g��cV!�^��q���+���V�-�\p|6mA�s>����J�K#x��4�t�/�H��Ğ6�1P+�Ȼ�z/e$���t�71�s1Y�b9G~	Oà7�Z�zv��5{�X&2��UԱ������a�a�݁���y��<�6�%Sv/%�J�)�h0n��c�NG
���@ad���`��o����?���f���)#E\&�'C'�H����>���D�D���i��3%������&qb�*�I�N�X���ȋ�Td��`>��]ˋR9�A���C܆*B��#h
�zîP�w�Ah���f\O��s&HԶ��U3�x0n�C;���G6�:r6���$]�C#��S�[�|�z<�_�nQQm3��{{L<�� �ť͂�g���d�J�
��Ȱ.$X}Ӣr׼[��t��^jr	�Ont#��.빖��=^sU�`}Sݨj�v����c�_��L����x��J8rx�`+�a�=HOF}]H#�"���F��8m��y�M��N����R���|��g��-QS]���˷�ɶ��պb��NR�K,6�����V۲%��qI�<��J�\k��J��FG��+���Q_n 
�>k��4u��N�f=
�QV�����z��G؉��j�&���L����O�ǐ�q�~)�v�K�N�
�9d�p7���x�l�vE�*���-
h��Om1�T��>�0g��,�T7�9ɮ�ySN\�`'��5�$�{�!��^e�ؚ��1���'3��fW#+`�����}�z!mU�q�j2��պi�F�`m�[��'�~C[�~�-���&P��EqI/:D�~~d�}�l
?H��M��[LŦ:�����$�W*~�n���#bw�*}r�7(�z�*�dΏX���z�J��^`�:�ӧ�{+?3�>��j/K�13�!�"�v����z&��~�%�'9*�ޗw41���w�w5}_����NkeBk�P�$*G��˗���
{Á��H*��0%*&�(
[u*?~B �h�r�\GvOƘ��el�h���yY�Ԕ��\���c��\���Y�-Ȇ���G~%ka�z�����#D|��M�+�H����1Vn�`ʮAaݬ	�L���+����؏���T�-G�.�s��]9q������WY==G���Nt�d��Uq���0� ���h���߫3܊W[��bȠ�W�AYZ��*��d��Fg�>u��̸}��"�MÚR��.#›p�/%���Y�`k��N�V'�H���vV�4\��S�-����) �������!�Y��1��*֓+')�7�gG�[g�+0��-�HB����#q'�,6{*��CW�\a
-�i�{��QV
dr����V�[��Y���C^}IC�E	��F����"��R}�p��S���yr�Sp�ATu�/^	=��y@���j9���Ӽ�)7A{;�b����/>�^�߽����\��.�~_����;���y�m�����Z+z@��j��+�k#:43{h4�߂V���y�4����e�"�O������U�Ù?��1�w�m��h�R�c�b�HV����FJ�w���B;_����Y,���پ���*���S%̟a��Ӏ~
?��b����Ϸ�����oSc��|�%\3Ck̄��~���k�}����+��-O��:��ǫ�`88���Eɍ�x�xe毲9�n�~_�g��e|����F��+u��.LO)<�O_%7;b���T�
��
���za�i�an�wdo�/���������i�A_ѫQK�F7��2�-�Vh���n��k���k�Bw�:���f�iueU�9h�X�d�
���k���{�Ho��: W<m��om�P{����z�9;m�z�4)̒;�eH�����[X�+���1�7cc���b��*��~�j�r��E���\��!���v��6x��!_�_�����:� �lQ��{�r��HMY�z$:e"�𓫤��+�e�d�cU1�^�⃂�cw��.�ݝ�P|�J�	�hU��Hy�e\��&�|��z�xhrV3���مv���a�py��2�9�����dc��1g^�����|�].����nXڜ9��s47s�Y^���x��!���ȡ�?�o�h-�Z4&;�Qm�0�s|�\�jb�� V��lz�h�v���pɚO;5j��&�^ee߿+���SDgt��=���vq�S�9,��e�A.���J2cm �
a�
�ͶZm�>p/C��Sy�|��	FA�N
�r��CWg�@�ún0���0�@��D�Rx���� A0*I
-q��^�ǟ^��|��`��s��w�~�y6�0����T���\�S��gm�d�D_���M��9m��B�����݌_�t��*�L��/��4� �e �p��%$�ʽ�ϯo��o�x~)ߕ�P�_Z��Z`S�L ��\�m��Ƿ~�����M`�x�����R�������&���#�J����u���%��,U�E���|1�L/A��Aw�Y2ɿ���zF��sZ��H��u2B��g.�igo�TjVPY�O�	�ʫpe�Aci����߅d:ƕ*��{���([���/-���I�V�GT��BΈ!�5K���.��
6~*�D)y��*��B��l6����q����$"Z������%�S�"a[���s.�}�k���
/�M��!(��p0�x��fe�U�Wƛ\�|ȡ���b F0C�Ub
49���"�[�ңO0d�#ˋ?����/i�1�`�s�`E=��#�����<QM�T��V��ZI��3
"������M�X�\E�|����jz��/c�s���g6�a�P^1j�p�5�m��M#�?���zwJ�ǧ�Ǟ�xK�n���_&�89�7n��u�����+U�ʪs{Y(gW�ϖ����Z���x�\[]e�$��U�3���v�<U3����Xe;w\�pTG��y��-��a�#`W�K��h:�]�֒����p��@,�&��.R��=n�o�8�vO�]��O�t��״�Ub��x~�}��	>:�/��������_�9�H����|`���(9f�͋�Ѥ;��n#~����c�a��u]�~�_�cc�}c�K����5�(��eg�&��-)%��x���P��St�V����	��uol���� �xwLV2'+xY�����?[=��1����o���x[����ɻޠ���t�x��bL}��I�Љ�H<�:�w�6N�ȃ��w2�o��N��n��I��O	�I��N� �w�_o�@��	7�ߠ��o_��
6�U�ʄ��S�۳�(��~���6�N�f~<�K���Y�
�r[�2+(���O�h�K���^ t'�Z�v��9
y�B��!��A6�cFf��1-Bi��k��CV3
3i<���HQ,.��y�L�� C��H�$�	#�C�ĕ��!��GL&ea������v��v�&8���?�;32�A4��˰��mQ�(��R���?�FI�.2�a�؞�H�)��ݛ��U~� ��
Q�>d�!�A����8-�8�<e��T��(�-�sl�����~�gߒ�u^��H�2Zo��b��u��p�N�����OruPW�T4�7��hԱIܘ��N�&���2k��<_� wzRS�1n�L)�[��F1��%hX���e������ɬ���,�0�� N/�< <��,��8d��Q*�ly����(���.���cL�u�#oV���j�,�.�̅3i�eǒ�a��w8�3�LE=��Gr!u�.p��*�Δ���7���'�&��v�%Y��I*�.�U��^Q�6�@��<��&���R�Z�[�خ�	NJ���w<��i�Q͗0E糾�e��N�$bϲ�أ�������L�$m|1B�ᑙ	������e0�y�c'�>�:�G�D�'X�~V��]w��u�W������鉟_��Y�DK�1~���S:�o�L�o�'!ВZ���ևjij�Q���sa.88e���YFOm����>R$0�w�|!�o'�hq�R����)�	nð*Q��p8zb�&�i�q�Ŷ�a9����bB�r4�P|	|||rA|��6PL[��L
�������io�:�8�Cj��u�Wj᫭s؆�`S�Yí�֨kg��/������!���k�C��#ù8,hS\2#�mΐy�+970���-f2��s��䅩iꌇ��C��P�07Kjf���6��=������UT��a����etW��,�MkP�]sY�T�Z��tl‡@<��r����Q.O�H�V�z�	����Qo|֟�h�!�Yr��Q�$�;�|He��b>�Ȁ��28X6nH(�v�Iihi2�?|d�ٗEQ�P�HK���yk|��H︸��j�'���
�<���QHm�]���+\����`r1
��D~���ۛ���s2}��.o��_٤3����/�`��{)R.��䜚8y�R���ԗ8��&���V���S0�1��&�{��6�(���W���V=2��)3�Na�N��G��	:K6}zkg�n�5�'��֛�u֛L�h��f�%���lV@�O�3��e+M�,x'� n�߶�X�Y��]QVA`��z���4Uo�U��
�D���1.��W���&]FD����0zYg�.�O���㑻�l��7K�w0J� ���!!��K�Ð�'(�!Q��ߪޠ5�<�C$B�uG�����aV���l�m��������㋋�pzra0��:7bd~��k�'��:
�=�[%�[��e/
��`3Q���RIrO_x�%�M�}��R�d�f�
?5'�1U�n6��A�`��=��+�_���e�0tk��9$�%�|�-�xd˅o��y�~��R]?�*�E�iUT�M�(�g�X�k���w�5Mp{���<�4;��[Q�ʳ�r1]ٸ��ȣ�K��M;�\,�zg���$?�BT}�2&�V��r��OWC��:�r���E��V��ۗ`V3�8��=i�
�$�cj���70�'���B�7c��2Y�2;�}�u2�ԏ�jr9�M�}Ko��%�]PT��}��4�ny����;V(-~	oBB���[~P?�v����Q��x�!y"��J؏�����T=�2cD雖y^ķ�_A�9Ӄ�H�[�;��[Ψn��T�C���i����ݑ��\��aMn6T͒���0� ����y���[���*]ۥ��R|�\rA/���}rb|���"|N�����2�U���$n�;C�`���b���Vƌ��EE����`�g���y"%���j�R���dm�9Ԇ���Ռ�pCr���9��T"2�ţ3��1@'e]&L�o�m[&"ń�]�O�g��kĚ��W
��=l���8:�V��3�`iҘc�K�pp�f�#a[�u|K�~�Xo�$��,�"ќ�V^z��CLx��q��Ŀ75>���_�J��UW+�K��XK����6�3R����2+�%�F�ສ�`��t�\�/ّ����
f��r�=GU�i�M2>�J�z5�e�����j�pp
�:�ĹS�sA妦���\�[���s�,�n�~�{��4n+�;҅X��c{ŭ����I�ִd�]�ԡ�9&�s�1��63O'q���d=����29�ؼ3d;-,%�IGH�a�L"#a�i��<�HL�)f>3���P�+�^X���3'M�UI\q�8
Cv���e�uu�`��S���8u���� ßs¯�;��l��W����|n��R^�(7��FF�O	�/��S:>����Kr��e{�N��E#���6����N7�X��<�K�V9�Sl2��I$��U��-%g�T�{.,n��=�o`G�L�aѩ2��
#���%r�i�s��ʦ�i�5j�����~o2�Z�7D�s�����+V���k�
��l��-��k�aRs��K�T�I	A�,�NC*���!�g������>�yZ�!�z-�&F!�1���Bx� �|�Y�B��_� B�,�r���h�s~�~���
'ݩ���K��x���4�wM㙓���3����n-ђ���d8��9�����'s��V��� �zp\�Q�nE�x�'gk����w�V�X�)�:��"��j�ɩ��h�7F���T��*��h�[�?"8��O}r�L�onV�w�@�+ޓ�͝'���HfP0�v����,���̳�,��G`!�8�!Ay��БP*�j5y[��u�㏽�e�J�3�Fu�(���r��jz�D_{����"�V�y�5*O`�v�ј�&X���ZV��J?�3�ñ��� -aT)	�@�4�2'G�o�L���E��<�}͙<�kv3�Ht�3-!!K�7<+]*-�(����d�u�t^Q��@Z]޿��y��潪������Ӫ��z{���5�}���m�����f�.o��y��Y��y.����P�r�jaj|n�u۫��9-Kf�*�.�|C((Ho�\�wa��g�p�~�NN�<����aC5���2Vm
~�z�\�װ�(���8Q���!e\P�a&]i2g���(���6`q5����y� K�%�P�Vd��Jȱ�SV:.�Π��.c,�naN��`��,#1�a#�Dk���,�.�ɡP������+��pgX�;��P�����'t��4����֎t�-L�!�

�qW�QU"pL~�,�5�Nվ��w\kӽ��;p�K֍��T3+�HT?w5�S"+�u)�L�E�xY(_�Ѿ�F7YG�L��}��@k
�A�m��t������-�CR�X���	*���*�:#���\�Ubj����>��+@[hB���p�}bn_��.!��^h��B�I�����|5�>�m���.k	\7<�"�'�<S6������+�Hio����u�9:��K�����Z��b��Dx�:#-�'�=0�%�|(���G�%�J�������5��֖�S�.`�����6*�Φ�t�H�<
�TM��q�h�%�H��*����߆c�����!z�=KbU�'��T͎�g���l���SX��Ħ�O��	?�ҡ*$(_�����t#���}��U�y��n�N���C,;���׳e�4^�Y�]4NΠ��!Wn����i��_r0����{��K�B\�!ϙٍ�!�,��.%Fp�m�k�� ���aC�b}�H��`�6���л�#]p���g���I�9���xdq�y`�yH�b�DZ�4
���D��i�Y5�|��!H��}����ژ��*(�
bQQf��|�)�|� �}VwؙN���Y��m��k�7�ƀ{��\��ƙp�h�a#�+�T�'����>ּ
S��D�H��j�j3W�HY�L�&���Q��yB_�T�
ʂ�mݿ���d�rvDZ<g��	�AH�nM[e�WtR<b�
N��M�
%?{P � ��C4\�܀�f9�BΒ�=�B
���+-�G���H�֖�3�.�2|�m)?���<K)�r�zj։,_�ot \�9�P�I���Y|�
n���a��Z�.��
[�|,R��M�3��p�{6[!u>�	��E,9�78�DNvjl�x���d??c7�Z���`N��˞n�iCp&u����1�QXؒ_ݵ���0��P�q����m�9��ͦ����R�@��
�>}��4ub
�<��f��,����Ш��^���8��9����ř� �g�-*�Rm�%��N�n�h��(Pϸ���`���z
Gob�L�ͧc�׏�;��~�q�Ur����=J��@4�2.
�"
z~	�E�˲6�4���\׵�$۠���.·̊1=���S?ui˜*�g+���Hw�,݉�W�C�SA�+�V���AG���XP�o�-�h,(�0�R�-���ۮɢ���ؑ|J��mPH;�e�����,�k1Mvm�����yk�>��ԛ��޶�T��0:�L�
�M��Q���$K�{!K���������4R�%��f�K�n��0(7��Nj�ގ�V3���s�R,��7,�N�g��O�d��]�����|9�H��}����6��ϥ�C1���d{[�ѭj6
�^G�`Ü�X]�%�4��&��(��A����ΐ��Dk3�m���\�R���S�Wa%Ν�҂�Ճamf�]�=����!�nu����"�o�;mC�2�WR%-�P'����@�	�!$ �:b�����M�EN�CiR%�J��E�h����%�_G��)��tE~Ĭ�#<f�v��#���rt��#�c�;�h��yǫ������������run}{[���KܳB
jd%�l�w���b��D�<?x��?9S7�	׎����^`��� �b��ϯ��y�H8�C��RJ]�o�+���f)A8��{&h&?��ӮB+�-�`���f���
���HA"�}���=���T���:��#d=�����>K��.����vaw3��L�4@s�=������1�/��u/1}(�G�>��)�q�*D�|h����}�>�������"}��C�>��H���E����i_�iz�jc��˃�y��ށR��&������db�l^�d��u�
���Ɍ�ٌ������ش�ȴ	v���c�V�k�ڇ�wj��,M�m3l��6öM�m3l;�éC���o(��v��m�`�a�B����ð��:��7��2�U�F�#K��0,;�ò{��z˯�buW��4s{m�7�vטo�1�1�2��	O��'1�V���rp"�:�JN���S���+98�JN���S���*98�rN��!���FM�A}=��I�����+�Y�^�����g��4�u�U���^�>�>�i�I�E�;�}�����'�����=�kx���@�?ܓ\��7�ߛ�=�5hM�O/�d�O�u��G3�D�>�ȪЌ�Q������8�b��N����P�@x���!P��Zr�#�x�������
VV����T�{:
�!'��B�*�r�
� �\�B��`_�x7��Vp9���ӁnANi1Xh2�PX2AU=�4b��K���AJA�2&�)�e�)*4�3�)Y�%�΀��������dP(1�-?'Ef���=�WG���W��,�13B8�7'1�c�[l���#�2H����h5#�,����ꯙ	;ɾ�w��MVWWWUWWW[%NY�/�z��>�z��*��B���xLE^�ޝ
�_�KxEς�)�gx��.��&�������;����
x*��� )df 621ƣQ���g(�(�]���K�ҡ����W��q��8�F��@	��S2��,�2�Ќ�$]���v
��U��I���&�#�ķ�o~����
#o��۶�ZyO��לּ�̼�0���:9<������
%��|����6�gEFI�s(�����3y���d�Xp?��u�;}�S�c:JpS�H/������p�┲�j��O��4�	��	�5�'�,�}ѼÆ��w�|��2�x���2s�(��?�l�s��������5�7Y!��<:@�z����8�c8��^�Ҳ��N?���������#o���m�
��Er��������~�A�<�痢r�R��ԧ\�ۧ\�;���T��>+�>����?S�K��S�F*M&��@�W��='|��[��' �����:/ʐ�Gx��{uz��w�Ep�����7[���h��в�)��3�T�m�i+�k�$���?�AH1&�Ͳ�����~�:����D��+ȿ�T�q���S����5]���Z�����>:�rP�7�5��q���36P�╱>1�Y��|<�N4��2���uE�l���<�x^j�U�g��x_�&�.��'���[�Er��ꃑ�w�W��7�ҩK/%.��``LhhՉ.8�����}Fe=5�_��e�R��é~�z�@�BҺq�#[%u<�:R1�ɲ3��,$̪t�a%����R�狏��1��H�	7}� ��œ�����br�
��FW)~2�a|_R�4�����a��V�j�t�|L�O!^x+^��z,��Jn�)�۹�1�:?�����K���o~��3��=��^p�$+�����y���\�/���>�p]E���x.Ȯh���g�5F+�z؍�.k��d�d�
J�'���\AJ�3�����Qy��^�H�T6�c�,����_4�������������x@wn���d���N�RH�+ͺz��Өa�-�)�r�+OO`��R��ڪ��X46YK�g!��<��2p�������k�ʺ�P>�q_��@�;�^g
D����Wt�E\���ROb���/Ԇ�w«j�y�d\<><җD�)�R:��{���2̭���HɈ�^��r���2���[�+Z5Cr7��&j��s� ���-��^��R�W.ycQ�Ћ�qO<@/b�6ȯ��x}vv�P7hϷW�I���-���D�,��dto���r�63�R	X�sg�܀0��l�aG31����"I�������D��%ץC�<(h�r&5�K|�Q�D���BԈ?"�Ycƅ�!��Nn�Qۨ��C`���ju����"�Z���<�����c��Ow�N>(��7��!��o���d�����(��ӐH*�����N[OlX��;��
�f�<�][��o�x�_y���܍�O/0ـ�K�����k\y�'û�̒k��0��S�|�bH�`^�h�l�jg�d٣�MZ�4�9[�����G�p�Hu���	�"~��n��.�z��ͧ^���T��P�j��AX�Q-x�@U���ķN����,�I�ߛd!L�K��LՌ�j<�Y�+�% *5G�-����њ�����n@,�n
a�4����=��.k�wK[��U��Z�deW�M��4ڳVf�p�D�ǏV�g�0HY*4�2]��Z�"���1Z�����!�oD(�Kx 8� �X}1�k�Z��>
����b"��XY�ylp�L����B�> w��#�8�h���"�K��􍣈~�e��m6��,HG�@�b���|˭���$K��5�y^��1��ob���ϓFcGvUW��3�ѭNw/�<������=V�g9�|ӌ�3��!��cTt@^�"����/�#EH�Әd��?O~�T�մ��-ά����Ѹ����Ϛa8�Q���zX.$�]:��S�	��%w��v��6z�[��F6��i�j��?3��!��|�Z��	�î��E�,�bK��.fh���_���Fw�j��n�r���5C$�1��4�&ő��k[O����u�����9�Ql:�
D����*Q�=��w�l2��Hxt��iF�G5l=J(Nq�vSSX.S�i�}Z�̯Zi���T��\X��)��7Pn����۫�4�~��wگm�F�H��&[mԶz�{{vz���l�q�Ȝ�4Iޘ����=�7��N	рH`�Y#��%}�A�y�(�qt"�~O�G@w�v���[{��g�3P�����]�6�{Ӵ�%�⇜�9f��OH��&��J{e޹�f7��=O3-|�| ;��]�yL��!̎��4dV�F���g��G&�,�E��L�(]�
��z]g�8o/����	_�����V>c7��81@N�Vr�CC��B^g궫��V眍
��fO��0K^vF�
(�xG��1Ofw�6	>*�oӬ����Hs�Mob�)w.4�
u�̐Ȫ�J`C��dÁ��4�d �E�����+T�…�a)�BTKN2�&��fS�����]��+`�x6��'?�����u*Z�W��m�s�\�<_vk��)��Ч�;��z�j���d��\�,, 	kc��5`b��:w�N)¦RJ�L�{����N�q`rW3�r��䔇���m�ݢ��R)1E��j��JzxhSU�~%��*�uWO����ď騸��WmH�a��ɈJ(׽�E��	��`��Z�D����:��l��у�@��N
�$�n�.�m)@D�蓌h�0;���a�e\�>�7凔f�nܒ6�m�k��Q5>�s��1���@3�p[�V�ҭ��2Y+gDb�*��;�-�q:+���]��].�^?����}�����x���[�Is�s��xԅ����889��~���h������w~�z�?8��}A����ؾ܍��b/_��
N^��?�(s��gѷ����ŋ÷��"/�n�?����N���]p�0��W�c�Mq;�eg=���#�Da�k����ۅ�^�~�0�{��bm�/��N�1��$�	7�O�Շ�o���(�TN���8$�P���C���O�xi��i0Y9��S��RAN�k�z��¸4K��LMũ�fg�͋��tt�
����t�qV�5���/J���]�'Gɫ�s�����?��J
!I�sL#`�.�<q�<�V�%�&�5*���L��ֈL���k��wO?O�ր��Q93���P`wg��N1J?R�ԍ����A�A��(�%w�~	�yJӔ�Dm��@� �m/(a#��<t�%��k�`���HM1�
%�H�nTb�>K�)X�,��V�=��[T��bR��N&�m�,�}˚�%�na[����vL��wN����U2�b�SMYf��f����1�fSZa��oPƋ�Ԕҩ�=Y�N�V�t}=�>�l>���c��	~��Ƌ6��V6v.
XA�e+;�x�f^`�Y������I�@2;Aq4y�}�-SO$_����]��15��aP�as$P i#���Ίy<V�I�&V�U�����j����#�Ff�v��ޥy
H��-��9s�s@8�����ShɌW7)RމqQ�N���O$d*7$�^��!~�>k���$�SPɷŧ�,��#E�H�K<-�
�.c�hw$1����l�1&l�NALZ,w6�p�$r+L���1�̡�?%(�t�mn�&���`S�r`�$bˁ|o�n�?I}ձ�H��V�dbz�zh2Tf�jd���%�*|nh�oX�,\����M������d�ːwf��&�Yv�j4��iM	UQ1L���<�����1e>�̩m�!0��0���)&mބ���nt8��*���ͽ^+�*-��m�����@��� �r�B�h�Q#����6�i��Dx�|T��lk��50�����J��F_B�	�9
�!��B�ӃȦʼn����j�t��;�\���]�U≢Br��,)t��a�֖)v�4-B��+���f:b�'���@iP��2�
b�Gu\��
]�	P�	IN})g
`E�>��v�\
�M2�|4�F�X�V�]o�%��!F�}���J�L�V
{BZ�)܆Y�s�K�\,|��֢;�.�$�I3WV*��%J�f�w��T�f
I��
x�J<�<;���}R"�La�ZRy$�Tf|�lKh
b�4�_CUvKr��9Q��lA�*���a��ӲU����֔,k�d5[%��/1Bl��-�#�Cfά[o37���Q*�$�U.T-���JS�(��k:C����������v�a���.�������x�ޒ���Y|��mvL�?m�g�mB?Ё��[�UA9�z��J/�/��'_�k���~�ݣ��_=�u���dҒ��t�l�{^�͇7^��F��]#(�*�Ũ/뻹�����,��������M4ƴ�ǒG|`���Ң鶏|�PG�Q�)�^�C���K�.����v��m�l���GR3�[�t&x�8+ƒ"�M���0M�Dשǘ�0O��Q)��
R��ܦ_� �N�m�$��K`A�M}aY�=hG*5t)T0�Ѿ��Q�ݨ�u��
>��j�
*��'P�K��%�h4����
2�Ճ�����@��Wt�e��V�*ϻ��I��3[�uZ|������N?�Gd�f�s��y�^�T
�&�6�Gږ��m�%sr�̵q*��%z�X�v�}u��͖��H��d�M�=�GOD]�}�U@�����UJ%�����T��U�����	�L�Z�W��k�nS�,�?���I��a0�3��7��#��`�lG
L{"sR^�ytqI�ѵ���=�&�b���&�d]�S7yf؏�% �kj��6>`�BJ�U�>�"=�T^(�uUǐ:�n������T
?��<Q�<D�5u����7����Aљݤ@Jh���t�����J-��3�_��
(6��`d��ÃU'r������B�uS�զ���n�0��&��U@wkd<�q���=�D�`�M׸a����G۸$=>,�g`'j���
o�w"{Ϻ��T���+�:�n/x�zϜ��m�AI���5�t5CC!�O��6��\�''nl�떨�O`�}�q �EЦM�i�y����iB.�����)U&�!kF~3P�v�2�h�j��U�6ie�#6�}V����*.Ǡd1�W�)Ղd��g�>�5�J��Ü�ŋ�?�k&^�f��r
l����ts�^
e>�h�Q��v.������eg�'j�`�?X7$TU���:9��S��rnzG:�b5�G�
,2B�,���0�;N1��8���ñ!�'�gE��,�T9p��bU���^k�M*5����0��`�|�^�
��*���qi�}��fT5�Vۍt�������B��ϰ��q��z�OC;m���
��_��4�Q�M�"[��߽�$^m\�kه�<�z��O�UZܴ^)U,ت�`��.��Dn��u��[�Q��Is"�S��$i��g�B��#�����N���Pk�)4{; ��y5�&*,rK �)DZ�K_	���Q�u�r]"X�A}%�ٙ��[���銧�t��ۂe�L���[��m{~���	0�4�nK�L�����Wy�Y%�=�뤗����7�w�o��֏n�d"߱iȤ{Z��^��m�����hC�i�ዬ3��(#���:�K���!Y����\(J��(�= ���Y�7bu
=n��f�/ah���
G٭�4��1�0�VBk�V��~ef]�ӏ��6���h@W#$��3���8ĩ����X���5U`�;PO'��h)���8�Twc8	���\��-`>䴆t|=FQ�z���
˛�����Ib��ڈ�goN`K1��4a��c~J���O,��?�I?�^8����7�o�o{/a��3^��)���+Uė`[-P`���A"h�H�.���bsDy��xc�������M�y�]�*�m!����Ԣq7V�U��A����J�S�4��yp�1~��n:Ѡ�c�兟(�SNDF
݇�(+z�O`�o{J��{m��n��ʧxO!�����-X%y��Z�@l��.$]�p��%���ƙ�-'T �RQ��յ���ͦ���R�
�K��R066�pcŅ+ܢ}�9����nU�p�WlhO�dQ�)�Bc~���ܩX�_`�H�[;x�{tG��P�#G��,�N�ceۭs66�K�)'��@����b�{K��h�ʃT�:��B.E1�
��+둓��r}^__A'�����m��)��YM�Im��Te��蔐�Xzx�D�����&"�U�l�
��羙��z�l�?�(
뻅��W���r��+N6�Xp(�f���A�"�u{����҇c��uE�b�Q�V�?Z'Pά���be�I��f�<7]�e�,�i�{�`��A��6��b��
�}?7[��[�eTh�H�X��%�Z9Ny�9�g�H%�]7����P��1~�@qLo͸�����]�P���~�Z���[4"�T��dd
�k��Ga�ϑr�c�_���v��xQ*r�O>J�R�H;�UL(\K�m�c�
��ޥ�l���.h������붃�˜W����ߥ,ޣl�`v7�G�i���NPO����hEi�	dc�j�Z��N���
grӍhשc���|XU�)1IX�C����ђ���Lы�h�h1O��^�J��L�/�N��m;Mҏ�d�L���5K���k�l�[�� 3�D�}B��Ӓ7�0�&���	�j���(��Mx��t���<(WV�3`�S�{��ȵ5����@m�<�:c��y�c7a=&���e���4C�R��t���'Fx>�l믫����_�7�}�m�g9 �]���2�c��&�JgV_v@P�]� ~�npf
Dv,e�?v]�Yv��j��J�%�\7$\mlN�W�:Y���Jr^�M��Q�RZ����"��������z����8`��)��i��}��<�~UAm�$��)x���X~
l-+�I���V]lQ�v��}�ˈ�/�B�&����]Mo�0�+��PC[(����L��; 1ML�N��V���&·��R�4N�$v�����i #��+f�5�sȱlu�A̡�h�5�!lw�!	�Z�]3OU��ǟw�ǤPW�ٽ|�_K= �d��nV@�Upwd@�o��Z�J��c�
�^�2���2(!ԊNuT�[ӊ����m�?�LFA�X��N�H��β�ZL��(�N�D�G�>PL��݃�6fE8�d����¿��Og����/1����ޑ�)���x����'�W��'����(�<����\����ƘH�q��I<�H��R�Bï�:V������]gF��K�Φ�7T2YS�ʙ9���
���fTL��1v{3zX�M�|vb?��˹�����W^��[�XQ�F�Sk7A���Qq��D�K�?�jy󆵀�^��C`����t��r����fm�e�3Zf�ԏ�p�/,��U��ڬ����'9���7�4�K\���;w��������0rBb�H��O.�YК�ל�/xDּ��e�+��W��lj�ˬ`��^0'�6�*���Mv!��İFT�@��a&K�p�
�P�/���=[w����߯�
Q�)���ql7Q_j)}��aa���v*���ޙ��� Y�n�b��������܍u.�XY�:��E�xxEL�`���N;NEs�q����a)r�����	�2+����	�c�%8�&�!���I�fæ�����.����ߩ�·�zÑ$���p�'��M.�7�r:�
��sP�ͪiT|Ɖ�\p�7-U�G�0��F��u�ЋEH����e�bLJ�.8TЖP��[W�OTz�)�Q��3�M��ߓ��Aˁ�6������,���La{����Ű�p��ZO%�7���:Asx��n�6@O����FG��v�����oYM�
LU��gM'�x�	];~�܈�܋�����c�%lX���+��}����H�w0��Å�	mj���_P[��v�:rf����UѴ<>��?�
���+���<�:��<w2D�7gk̑Ė'���#�#��9����#^��z��j)j�3�Ex��Kȿʘ�HK=ON^�<؞N@T+]��,��s[�%G�dƻ(4kt��t�0��6q�0z��}r0W��q/��J��m�t�m+gU���}u���辿'�m�)��}�(�lA~�Ŷe�i�-�����j�ʟn)�P�%ӓPe$�ʆB[�
��~
J��%{Z!�І�s�f�$i]\L�dwd�
����n�S{%�"��e��ƣ�bi�#�����[�Z�Y�|&x���K�c��B*�Reȥ>��&iQt���eWh�T�z�1�y0�c�-�lC�߉u���n92�/o�L�����;�)ȍ5R,���K[��ퟹ��/W��?t۬�s�Y=�F^6:<��)\���%���3jۏ!|
�(`�(��a
e:ab�w��5�Un�U1q�ɾ�P\
�_;t74_w�{z�-�]n�G>�rV��YP��6
(�������}����c!��oT��j�0A�p8����LC�<�#���6�J�Y�X��gi�p6Y�\	c��XG�Ѥ)�_>�H�F�`��w@P[8���Đ��"y�d��m@=�vY+[���A.=F�!��������b�ɷ�%���/�[L���x��H[DQA�Y�}.Y .�G�$�t��u�]�,p"�Q�b��@sބXE]�k������%�F�l{�tw�m|�m�q��m8CиEw.P���X�ﴅ }p��4���妾̶WrNe�����x�4ˤ����{k�]\�~#Ɣ2 0Fۭ��f���TQ��/��a�B[w̴�{���T��L�i��eH۬r�hi{�`�������P]�w�a5��
��}�*��x]����Vs�p~O?T�;�s�c����m>ξ�P�>P�34�����Z�o>-��@�*�Ǥ���.���a�ѫmb���LrSTo�O��ХGn7^�M��ր�ܪU�'4�}ٌE�#k��o&ޱ|�_��6l@�d6e�����3p�cdl����|���9R�҇���:�$23vT^�r�̱Uv�f	K�0r�ݬ���qP�Z�/�Q~!W78��{e�ܴV��$�S@�>����eO�&�Ǟ�{^��,엘s{�9�E��Cp����lo�Fk�	R�z�q�>��F%>�	��d�Ί�v�p4g����c�Z���GkY�bV��iQ}�_QBvW}�R������گ�|�DXW������ᚼO���9<+oK
�Db|"�i?[U��'#��Z�������N�q�V�Z5��	���ZI�B�Oݝ�=�5!ٓև5�*�8�e�["`��&�gHH��DMf,�OQQqb������B�\�$�aK�
�f��E!GD���}I��#V��͌�N9G^���2���ܐxʓV���H`.�8�:�\-х67�l&f��1�H9eJ�\	F��sSdM�S���2$��2�gK�?��.qt�r�t\e���!�D�[L�XT�z�QJ�y��"�9��V�4?>>�LNؓn��I}~�Z�&��-�`uzNL��\M06-\ד�C{��ɜL)(��g���x��V��J%&��d>�ގ�<���`�M����pX^�b
�n[�q����re2[oW�b�E2c�)��D�Ӓ%�/�o�T#��a�wr�{�!�!�a�mN�ma��E�䭶5J�,fm�b�鈢Σ�Y�N�c@�"΢��G�p2�N�e.��
��,Ꝇ�P�O�5��q��	��j/��4zߎ��,�KZ��]G��S{]~��P�4 �{�;�L�L�y�kЩ2gHk:���5��t:YV�j��u6��j����A�VŒ�B��&0;B
1j�ה1�}�*?���v�t���T��lN�ˏu��Yk�'���-���^%�E�?vgO���LcxD��hWp��`n�J�a~��& �i��&(r�v�%E�\2�M<ۅ�E
.{�:��f
#���h.8��#XI�Dkev�4�A�|@����T��7`n�AcK��i�z��W-橂
Ǔ�[������G�\�Tph���Gi����$��AL�Ue*;r1���K�F���������D
b}~u;�vf`J�kh�y�Ǘ��L��ǫ+L�+ʆ���0:U��DM
C)~b��WW�=���j��X���P0hh��?�GM��!p�߬���N��p�rA������J�)f#)��hy�`�{4��.��i5F*/_�V��/0���Ū���/�X٨ă��b�[�&��������� \x�o��،Ę�j9�"����ڄї�%��G.z+ظ�-�(��] ������4�ѭu��d�e���
z�o�S�.��z���`�؊˿�/�t�#	N�2V3`*���_Q1�?�vw2'פ�ޤlg�\�vb�����x��A+>�k�i5�4r�2��BZ�3��۳z6�(9Jӈ��-�����*m�g�'VT��&��j!����$��n���q�|�<h��m�Q}��a��=09��|6C��X����4p���մ5D��̎�mp��7$]�lt������1�/��G��co�ݑ��~�5a�d��Pka���2F�%g�tC�oǪi{(�؀��H�H~ �y��^^e!�
Cm�Wؼ�+8Z�ɲC[.4���\v�><ݽ��;8X&�?�q�`iOToQ=���t,�4>�$�;
����m!:�c�:]��Ɍ��vH�G՟Z�f;�VMv+�}��	ɽ�iA!蕠���+N�g�����-���(<!?�_'���5�K.�맷�яEU����<H�D�X�^���VD�ʑݺ�kE�l�.��-kI:
O�n�-�;�N1�y�+9�Q��b›%�o�iBrFp҉
O��tt�Q�����G,�@��r>q���F��bU̪\��l,WJNE-���F�
�Kʡ$@v:X(W�UA,I�h�~rGp�iq��i��\�};���R!!�:ȝ�Lb��[�6�̔�����bC+��,�"H��N��f��__A��a���t7��{�]�cu&���ۙ�(F�����`H��J��c.B�Pv�vV|l۰�{U�hKS첖#�ƚ{�W�����S��2-x2�=>&�<��ȋ>��=+�
^\�M��~��WҽG���y�$�{$E�VG�SJ:ZJ]s1�y
���V@G����/$='h.�,Z]�o��<J����?��'{ȗX\��� :Njz��Y9�m�rt\���<*4����̨Y�.�&�k�Cxe-^�����HU0��/{%�o�3��2�&#`�q7]�G&V@���0� �b-0�<R����G�d�~8����?#��o��*��ՐVX�/�ρ�	o��D��w�M���^
���^:��VM�L�4Z�5�%�k���˧��ᆱ:ֽ�(�X�u�W�C
O*�L�y�;
��qO��$�>E�<.�6�K�����Adèl��
	
�3�U�/�ơ�H��;g�pX4�{"���\����Q����J���e%��V!�i�`�tV���p�0J���'����qq{Y)�u�;���Żf~C��F{�����8^�yǥ�|����D�qeY~�����^�ͯ"���@��)�ټX�P\ҹr���}a����=��k��Z��=��4��K��ڐRQ�C�A�;D�Rf��y;�Vpaj���������@���;�A��8j.0���픲)�k�JD ��b�ή�5�R����a���2�;{}vq��,����g{���8��ݳ�g��}�����ٛ�Y��/߽{�.��8}��5@��M��ס�I(�(��ݻ��w�>�ĪE{2D[��x�N�Y��a�ď�Rթ7�x�V*@Ś�F���o�vt
|�x�:���,M�(R�g�|���PR���b:����4�#f�桔��;�[�L
1�,O������
�1F5m�)�?#!�5�8�m*{�+�P��UX�˲�<��[w1a����h/�u
íU�Mܷ�r擲�Ĩ���Ȋ{o�}0}h3��X��.�*�F(�$[���;7���e+dPğ���	_���tn:0��j�X��5&��ɝ��������@]`��|X[��/F�_�TOr�~u*Z���٤B����PG[,=���j=�Rv�^�6�*��X��lNP:�UG	WKj8�7,
Z]�ϱ&�#������"4��¯SI��i�NK:�U�j�f�B�H��90�"I~ju����l'�j+�*g7�=ǟG}�@#����Bk�u]B����e�q˓�6驱����+���>��={��S���)hFTo˝��3�`+z�.%���t �:Y"�:��#�+�%�)ʭ�MG�j6�7�0Mеd\H�����.U����<�+ץ�)E,+�� R}��쇊� Ћ�^-FŴ�$��a���id�*پL1g/e:k�\���I��9��(��W/�|i,5������F׫b����>P^�Ab<��N�0��<�=ӑ��<E�<-��W\9o���7!Wi��Gl'�f�с?�,SE�Ch�<�?�	CM>����[��j�"h�AL
j��X���7�{���2�B�;�,-d�]%����8PL�r}���
ĪN�4�ީsxo#B����B+�����}E���ʚ�yF��s��S0��q�J���~`��gq������k1��鄖��l$N.�N��=����]mO9�+˞�n�rpw�U
VJJ�އ����H@Pv�V4��<�=~�MB��N4�����36�a
�ݲ�^h���:V�m��m`��$�&�_A��6�FF��]h�S�v�K�x��G�Z4 ���x�j׶1F~gw_���g�*����|	~)����T4��+�����Mv9�AڂA��-`]��졘Cic�~B;��v�� ���e���ّ5<#s���i
�u�Y%A��쨴e!�i�ߵ�~8v�n(������G��`׎��f����n���ZU
��yuz��xf�`ՓS����w� �0P{����v�D(i��<�#��lG����Z0. ��M��Վ����Z(G���J�mv�8+n����ͅ3Ci55��4?4���r"��D��eo+��l�^�g�5]ݮN�T!����l����7y��X�1�gK�B�y��=���ܫ�/*�{X�z����ƉF.?n!�	�lw��v��o� >�?Eyg��MJ���OI#}�Ѷ�n^�\��$U���%�@�y$��cwG��V��N.��@�c�x�$:�O#=���o2�%'7��r��j�{�}�����e��'�_ɚ��W6�$мr�}ّ�T�m7&� ��z�������#�J�ѿ_��҅�<?�`�x)��9�P ��\��Ե�ӕ��!��
��)Q�Q���[0���(�`g�ͫ؆��f�d�r�K�>��v�\Z�#��B���;p&�C�T��ߵ]ٞK����蓼M��s<�/2���4�KL�U�t�K�q�9.�V��i��u���4�/�ya�S(�M~�	~ר3��Hk6x�v�x	?�[)��>�;�a;�б9[�A�a�'
1@��nX�V���b�S�^��L�=��Y�b8]�}_t�y�(���pCW�;��׍�q۸��T��q͝��(����-�uLg�$���z�a?�U��Y�r��Z��)�\E4��rE'jG1>����y�8E\�!�slƮ�eR)]�f�=	��B�eA�7�P��q�J]��S�P��IY�'#l9��RbH�'+�vA�nO;��kvt��-zԆE�jU5�\��Z_3���[yU&4����P@���6��Q),��N��<��_�Қ?�9�Df����M�ؚ��^1^'xY,�A�A��Sԅ8�H������-�	�d�V4=K�VKcV�m&�<����0�����A����D~6z�kk�|g��;�����9�$V�i��m
���R*G��]�f'�!�;��dE��\e�<��o�v��;T[���;�w�
ί��DǙ��'~�.��k�x\����ד?8�ŗ�(~�U]ѓ�7�Y;2Eid8�)<�`�7!���`4k{;�j�Y�?~l�5qk
�g��z}�hXH�s'�%\��G[��vI]�X�O�[&q�k�m(DL�;���(=��i����	CK�Q~�/�x<�vGgc��uݹ���)D���2A휌��o�A;E�O6�1U��z�?����;�3\�)0�;�C�{s�0�N�۪�\�7�5�Ѯ(�k��J��+�������x��D�rO�	�:�C�ЈV�4ȅ�V^�d�|��[�ȧ�R����f��?v�̰��j#6�r���u*-�͙�O����jq\_Rj6vc�"Y.��~#�՛��X^���!��RPD���bR�
�%����݃آ�%ݎz�bǍ?��:���q����Y��z5=�R�]�c�mZ�2����	K�@ic	-��AV�}��}�҆�	�\�����ځ��x2_��II�QX<�u	�(g�&=ʀ�����J�<�+���?Bl>e��Z|��aE�<�#F
�V+���Q�%��ij��If��������2���z�b�������|��'@���1S`\=�/C�b�P�q1LyS/�ya��d����\����AK�qU~u8�Y^���~+Q;��@�,gofHO�u���j1,���9�	ܔa��ǣAzz������};=y�[q�رz+5��Azd�ZԤ���V�����8fZF��g�2�We��*	{�\ee�c'�u���6Xg�/}��[�򄄼�%j��hz߸%�Y~��?ܿǰ‚#�2�MX �{�[,��q<�`�C��1l�D���39��J������=kw�H���W`�{3ұL����x�$a���y/��AI��"�ċ��oWUw�_�Nf�~TWWWWW���PX=���C�yQ2� #��Q�z�Y1��?
�1�����*E�Z��X�s�quu��>/�A��o��oGU���w~�p�1����(t:��D�n#��L�ӥ�Dy.I�ܖl��'%R�h�a�.���Eo$�p2�V�4��]F����i�cҰsJ��Ĭ��a{K>�ϼ�~&4�c�í{���y�+��q{��6����qQʩ�uw[h�\��*@|�/���Ϛ��N��b4�b��K�d�t��;ݶ���a�u�g�a�^W0��*��5r�V���HZ��� �r���8��+��U�]=�^0��s��ʲ�fP�!L�:;�O�y���i���~^���9�r�Y�:�� ��L�_6��l��֛�qPۍã/
R�1�,şa0X`�Z��q��
���:CbK�����i���t�9���Yi��f��G;������x|�;qRPj���mۭ�q�A{k��ї�m�@�Ԏ�p~��^L�<6�_�����A1��3�[��t�Q������=��f�8�����9
B�Rl��_g�馁��`�z���g�f��y::WZ��lK�EGfs4���z�Rī�4I �{��j�r���rzW�
�C,0H趺P���,y/�2=3mtT��6�)��L2�3��
uY�4�<r<g�.4@��4�xY@	�ݗ�9�
���݄UWcv`��9�Y��!W��r��N�NW�ɬ;���v��0fP�]�3�d����[����g���U@i�[C�~��ngZ?�y׭O�0��((���~c"��w6T��	3H��	��C��
`�֍�=�P�(�^CН���
�ɧ�h�<��4��iX!�tݘ/�Km��3я���
ι�(�,z��ŹY�c8�!z��'O�q,g@y�9���<�Kph����x�p�FJO�SܦB�,HL�Z�6����^�%��3���4<5lcR�8M���U�ZJ�T�vx�x4X����ys�Q��X��B�O�uPt$U��Q�bR�h�����K(yA�Ȯ�:��u�hZmCأ�Z��P����Q�yx1h7�<L֏����8��C�:VME�N*�����d�ڇ��8�/�B�z�9|���੨�G�
Yރ�OX+{[W����];���-�����|�C#kѮ��4�TQ.����7Ć�������d-����X�-�3�^=���|-���{�~�Y(�����穽<�vk�Ѭ�(�c#Y8/��A0GYh�`�|>��E1��
-09͠z���@��(a������BS�6���Mu^ŢZ�G�#㈋e���<	��z³���Ani�ouWh;#U9bݖ�g�:$r$4���a@����Bjl�@p�٧#$����D�qB;��T��-H�Ҁ7�W# �}tD��qG�`T��c�M���	�gi���g�[6�1U^�2�a��V�'��wQ��� ����#�bi񙵅���*Y0�F�I�Ԏl��]�F���� �򙋡ͣZ���;�y��;5R�����8�G�
��3x��͕֍�!3����|
�w_�'���kn�4h}We
W3�>�U���%W�S�_�V�86�bϖ�]�{�ju��(F��8LF�k�no��eJ��H����B@Me��;T����r׍��rR�X��!�($Z��v�DriE�Ǹ9��*��M|)s�1�����m+G���W��Qk�M�rB�(� g��ح�%}��6B���
M��x�:�XS���Ln�4�i��eϯO06f�;��ݐTwD��qX�|�M�����x��6�W������f�D��jr5��<�֯j]##��]��J<�%�ˮ��)%�I&Y�un"h[�Z�:Ky:l3��vA���@��_��	{�����Ʃ�WKZ�E�`Y	�l;����~X�����B�����Рi���-
p��*V�Seݾ���8G?����Z���s��QK�=����Y	�Tŷ��"����l��Z��W�ީ5
’"0�{����ҧ���=�b�Q
ֱ��@�P�=���o����Ը�r�<
ӻŴ�i2��DPL[Ĉ�g�]�U��ӅҼ_�W;�6�"8B�,�'���}u�S�n��혶�]�c\k�ʣ[22���9j�Ƹ%k�,:�F^�⭌i��'�s�'��-᪔'�f-;44a�Z��$�Tf��g:��îW�6�`g�'���Qe<rm���H�9/���@����?�� hp�y�<Ÿ���I�����f��n�-�7���u�O0��IqK���`�a�њ�r���v'�p�V+q�[�ƻ�g,
�E���F�i��v�u��S�).L�p4�T�rx�f��M�8�����D��Y����Z\�(���U�0q,�]��
��mj@��G�Ѣ�B n��M"���`�X���#�JB�x�7�r%��a �����-qmY�~�l���Hk���(2W_�����s�vq�;���d��{^6�y{�Ŏ�e��X�y2\>I���9Ka^5|�ކ�U�}���DF&Ei��7j<y���$"H;)�{[1�O��a%��f�_8���x�R{��k�Ґ�.���*Y��=V�6I����A�?"
����
@��Aߣ>d�Ͱ˷j��q&�kcr�)�Ċ��p�S���$xZ�(��ͧl����~x���m����j�\3_�'�o�����9|A7L9��v��n��SN6�ҡ�
��D��j�V3��мVsZ��(q�ީb��X��Z�g��>@Wf��,�>�R>��Ky�¯pVG��<���"Y�iYFj&��J�I�ї�r���"6��Ю\x�dG��ӣ;�?Êy��_*U���w	�-���OcpE�Wj1MD!��#�:�:(��0���N,w{��Tw��=S��@���y��G�R~Κ��C�8T}�������Ԏ:}�:3�$����]�=�Hq�*���H�C]�CN�.ae@5��
�B�W�_�������O�@����G���+��r$�vr�
/w���6q�5�>��x�=�x��bœB��V�2QX)��zS;����R���+�a���?�Y,{-z��r�ѝ��Cd�,����j��Q�)	�E"��nO��j�m�"��|��zd7��/

��O�wxNVrd�rh�9-�h<�;�����`��(�ãw�m���m��-_��M�h�E�};[��*m����Ƌ�����
� ��v�_�	�G`��� .ù=;�����|�~<�Y��ް�Z�a�i='fK3.�E:üi=M���s��;{�V`��Z��ؑ�
�_-a�s�}o������h�T���&��1�2��AO�?|:���-o7�
~j����9�߷B?k�1�Was�$?����j�D���՝��/;�ݫ;i�������Hb���i	�X}���'+H�:�Q��j࡯Z����H�`Ha�F%��%�BhΊ����4>TUun�[Ǧch��T�mY�)�1����a�P�I�o������a�<f\E�'��o�my�&B�-�j��	����ʏ�:wΗ��<i?osF+�w$�f�
G�{|̨L��Sy��C���>ݳ�}>j�t��#[n>�EI��l�a'��|Բs�ׄ���ch�S��S��-�h�Q�.�ධ7_|T�����n�uH��T�-�INzM�:o���v��>.��0���{@�eH��"E�{MOc�W�����+�Z�Z�x.�"���V���������g��|
�p$�v���;��y�	q"eS�y-��V-�M
�e��2+��c���-��ƚ)϶ᔈK��e��y7�j~ѹ9�y�^�4���̊ځJ��������V4�6�Z���4`�
F��n��t�^zu'� ߈n�9Qh��,���W��tw��<�<#��b�)i�2�#w��b�N���l3ͱ�}=~���K/��ռ�Z�^pVK�Ҟz�\�Z����)��!+o5�e�9��ol1�_$M�E%D�S�9o\_'��i��b��\ڰ�, ��%V=|��,|�p��fd��!�������RԈ%j������q
�am��9L���Oc�q]3��+�n�u�Y��)�P�/�c/��_F��yXF*��;z��x�
���f����^��?=m��3�c��
]�2!P�R۫dD)�V�IODX98�jC�w�g�
G,I�%��/A�EaZ���,ڪ^QlCV��V�ףeG��0�E����λ(Հ��)8)�S�;�6��{ͳ{�G���n���g^x��04�=A#��
��oؓ�"����� Bx"�J��^��B�������:�#z��U���
L!Ә���)F�85T3j@��nq��F�%n�=�u�a��������b�_6�>��X��AF��d�&и�`[�A����K0�s�{J���%�Q
໳>��N��+5���ț~��i#���H��X&���z2�(vJD2>̪t�boG��<#��-z���)O��|��������
M�3�<�׮c$m8y���fp�Mg��Ri��_z����L��et&,��d�e�_�r�]��ʌ�f�r�?/D>D��	��v�v���aU�WC��	l��\Ó��a
�]�-���_5v�Lj�E�ۮ-׵���A�a��f>��ˢ���z:++	|g|)ʛ�����.YC�,M	��=��dr�ʼnL�
��
�� >3IԹ]I�K���qS2��;S�%�+�x>;f��`Fpt2g�p>�(iN����$�F9kL~*�6=�}H�P�f���8�^�4ǡ9�>7Ȅ�����2����-���Ji`,��l�/��ؑo��ޯ!�	x�y���
�D/v�ŞP������iOl�Ϛ��y��o����^8�xu�m5<��‹!�
�]P	��lk'�2�V'��x�YZ��jy�7�A����(�X���K���5��eȏ�<	�C4��� أ'O��K�~��|�z�׀g���;�ya��h��k%A�4�|zq�!��grÄOo�:������;�(��y��R��qI��Xx���Eyu ��jkJ#=���*FTS���#(���(�s��$|��t�|W�]��["��Cn��{�e��K"����������0B	��T��me�?���B����D��t�y5I���u����[���v~��N�s/�G�w��[�#��I���|½"yWq$���l`C��Y�m�h�ћ/��h�1��ly���`��(��ɿo�Y9&w�	7�m���'
�AY:��l�NZMN5��$C�d
2c-(���޳yjR��t˨�c�2gQFi#|���Bȁ�[��p�QJ��3��J�Q^��e�}��iU�y�&�V�C��/H�l��)\z"��䊭|c������bL\J,8�Pzf�L&^�S�!�JpD�H��jz�٬P��}�㔅^���B��HBo
=���Og�P�`�`L^r�����n��Q�߬�?�C���4,ם���O���#��1h�͟ľ��3%%"��s�$�1c��r�(�NB	yPi��$Lr���~��&��Lƃ��$T>c�D���*��S�f�>"�E٨R]�75�Q�d�
)�׎aq1�ByU�ˢ9�V�
�5w�<���%�h��EU���B�?s��%�F�i��1	��Z�g���^��G��Sރ9�J��rzb#�v�&���.��o�7ѯࡊ���t~��K2e���	ۮql��傜�H��d��e�����t(�A{�8��Y�9�O�D�/����d��V0�	C��
6D&"�SO�u�8
�<�E�����"tOW�w' �����;Dd[L�f%�ߣ�an�O���vV_��J>[`���M �����3���c�P�+[\���s�����RuU%�����]��x�ay8w�P ��K��2�Ş��-r����	�3�8�ݹ2A��q
o��(o^����L}�=���@-a�*V��>��.\�K�PKRT�L�RD�Dů|lվ�lm1����0Q�%WX&o)Ssቜ�L�����X�xq\Є���	�_�,���g����|�ᚓ�<�۽Z��d��pT�%D�ń|�?�NH�]��b����nky�bT�������!]���#�"\�W~,�:�RʿbE�F����9��E��p�^�Î���%�?�>����_<FH��ёwxvq:���U���n���K/��l��Vȕ(��z�~��o��V���G����q?4�F6"���8b2��Z�6�-ﳳo�z3.DzQK���v�R��F��)p?�LN�c�w'�
,���yNN(�y���bs�:ds'�T%<�M���-?��`M�Ɇ����6�ϱL�
�������谐f.ν�{�%�^����N`5$�w;�nE���V�;zv���I��W7���)�L�X2
�Z+��ѣ[�3y��GZ{t�Ķ�c>�-=k��Ȫ�ŘGC��R�b�'�x��q�K���4�"iF�e�Arw03�@�d��%���
�yE�Q��
�X[��fyC�
�<�&���Aq9��*�e�2�o��,9=A?���q}m"���Ɨ��!��KXg`�>a$ˌ�bu�`��-�oX��'��â���r>G�,+Օl+)�*�Mݎ�e�x���ob=x�a���U���� s�U��BskY2�~�ފ%�C?��<��=6d{�"���<�dE2��N:<Ą'���2�2���E�z����8��[��%��LS��J.�C�;���3�z�1�h4J�oB;�D�	��1>y��xUm���Gk1#�.�p��WP��Saϴ���Wbb�b"-%!~^��X����_���6eUu�ц�4��%#��V�AJ;���R/���pg{:����5�jy�P߻X�.��Yҽ']���O��Bu���8�"4�0����?8��{ݰ�<o���^'���8��
e���!����C�r�7���JȝĐjhy�xN�j�gEJ�q�@[T�7A��f��Ӗ7�td��֔�C����]OA�+�6FZNPK�#פF�Ҥ���4Qb�C9�@چ�ޝ�ݻ}�ݞBM���ٛ��ۙ�o06�"��x/S��]�fA�,�I�4I��>��I&B
���Y
B�9Hh�H�t��g�L��I���:T}�%�j#li:,�K�k��͘B�?j5,��r�>��j��-�!�Z��OY1!mAJU���&C?�ը���%���YvM����J�
R��eȻ��n�T�ǜ���j��k�/�u��q�}�O��pa���ֲ�mbn�쪖#N���M�.(���DZq\�ʩOg�X�W��aʶX#�()j��~ Ԛs'�/�)���š���,	ǖg����܍��I�͏�!��\ֺ�
�η�n���G��ʆo��=�*������D���C�+��726c�u(ջ�o�q�Go�\z�XD#
�"����<��0ɍ���׋��o���4��5B�������1U)���|k��������[
�\Uw.�����r5l�i�|'���z�gj��d��'���@d&��L$��W�P��ś6�m��6���"����*����c�_J���X�����SRƠ�U�on֠[���>���gx�ͤ�����$�8$��Y���@h��<��٣�A��~g/U0�c�q>������8bㅣ���=$��Nї�8
�c܃[e@�O�Uf��)�o����V��3��s����
��Z@K���'���OG����_~3?�lr��
�Ȇ�)��e��jlH�6��$���爅���G���f2�݄��^��0�C�l�'��;X�u|L���Eu�J��t�+ռp:��Ƹ(Ϡ~�x �@\>��毁��8mL[��шPd�`d�3��9�3P*��J��#�����`>��5&F��y�L�L0i�L���c�j�rrJ�{Ys�rЛ
�c��R��g�W����zuꞂ�+fd�C�@t�.�,�`_�w:�#��͊&KO���zA�`*�^��޲V�n�n�n#<p�\6���h��
��&�=��6�re1��P&��|L6�T·FV��6�f�*%�G}+8�访���R�oTJL�J��q�0^�'���&�u�T3a��2Դ��&��Բ)�
i�-s(�r��@@�1N��1ө�����]{s�F���>��ҩ��d({s��KNt�K�d�M���
E�H*W�w��נg0A��JE ���y�t�����5(�By�m��X�)�v�ya���jd���qA�Ԫ���Ǵr	,��mQ�k���q�C�Y{��M���_(}��L�J\��(h�l<ؕ

�*�l=び��/��<���9}��olX<mg��5�1z̀j�&B�p�O�?,�ے�`pv���t�o�����a�Ӊ��P�@�g^��o��bJ�(m��l�Ba�ͦ8�W?���F�?��٘�pFi΍���Ӎ�0mv�vު�C�����^_]�g�٣ٓ̀9G�|9_�����Mg�snjUܳ������C,⛎5٠�.���-�b�7�O��>X��.R�Ӳ��F�.���p�+ɩG���oG�L��Y�A��ܞz��q�y��3�ܢ���S����.@luM�����>qG���$7̐R�j�-�g3�"
"���b�
�
����bc�L�m�$��#�-4�T��A��O�e��|Sε��.��>L�~��z����D��Ļe>K�3)�(�*p1ߋ	4>vh�]�Gnn����"�4=���Z(���cb���,R�m0��Μ��0�dHWwDc��B���J	��$L�'����r�|V���hFռ;|�F3�*_��pH ��p͎.f��0��{�E�T}i]�v�g�Mʽ)�ͽ�Z��*��!��;���Ż���ß~��U�S��:8i���i�`�4�W���Ӌ�����@U�f��\�st��"�|%ƈ�
ʖ�}�G=��r���[ˊa*�ܴl~wվNe5pD�ϟˉ8S�Z� ������-�ʕ<+e�a��b9�o�����,@9�{��%��Avc�Ml�)�5�y?
� ��i?���t��O������n���N�׿�6��>=�/����ֳ�a�^-�o�����.A�z�'j�'��t(�P���c��ZS�t�������t�+��z��\���L���un�9�h�{7N�L3#��d�.��t��7��Qw�,1���,d�F	sy5#�s3r�z7��mu�z4�;Ja��/j�*��M��L�S�H�A�\�m���r�p�Qs���Ԃ�a��<H��MU����$:�"Yd�QBN��f{;��ړr��6MA-�R�t	k�2�x@�|���2�c���"Ж,��b�T^n
��Q"1��d��!r?{0��r�{�iѺ5�$6�8���Һ�Z{>�	,��6��(���︡��~Ҧf�ʪD�Ehg�& 8�(�A3���9:@M1�)�_�(�NJ���[]q"�+�,�T�%����x^��u:��0��p<�|j�g���,uD4��gq�@-P��#�SbN`OQG��'�b��{�ɛzQ��2�_P:���rSUJz�I��p�q��^��ʉ׮$���x��f==vQ��&�0�R��O�J(=8�y�hZh�}c��<��:�6;K��«$
��KBt��tx��?z�{]������U�2���T�*�S}9).LB|�$��@�Duve8e9�&���iLJ'�Ǘǽ��󋽓����o7VZίgA�a(���r����S�I����S$��Y[ؚ0�V&7�e�/����2�:!+���Y
&���!��#�H�AT���f���U1�E�69`�Q,Pd��:��hh��1vX��j�e���ŵ�G�X�h����4Q�F��$���eTA��[����l�C)J��IBVy�Ќ�H&��iLzn%d�wP�Y]�|�8|�5乀'ߔB=�@��7c�R�J�"�� ��x(����>T<�xѨR�R��]8)U'�i���*�8,W�R*t�L����^�v���:�����h��}U�NP!b1�{���@l:�D�l�\�O׵T�ԛz���x	��z�[�����*��k3>e�e[�G��g�q���~2�re�h��_ѕ���$����THR�$�т)�Q_8C3gi�:��P��Q!��Z�$f�6�8̕�W��X��Ct{{�%{|5 �Az
�#�>>�����s��6Y�@���uH?�O8.�i��,����g|3��f51}���D��=[����%3l'/���]sL{w)�ɗr-Cb�D��yvI��@փ���^������P�Mi��ʡ2GV&+͆�p3Q�;�L�-s��.(��djD��/����=������O�(�f���	�{V�XR$�D�r�%��&h�)�0�/��JN'q�}��� ������/�|�z��������L<��%�!�Bs��z��3X�#t�dV�Hהc��s┙"N�t�RyM�J��X��.��K?�GJ['Z�e�
#�\Mb�r�Ԡ���P�%~o<8����a¿V�L)���!��Q�����Sb����1A4��E�>(�K[�&��L�$�3�R(�`0p�Qm�E��5k'�3{��'Q�U��'҉Um譧����N֋Y/p3�M��
�BiWe2���b�80_S����v���+�|\`,��Ԡ��Dp+�Pq�v^>��J�߭�Bǫ��_�mk2U��/�4J+M��V}2�k���p�?�����nL.,����
�~��wE�*��ú)�:
��1	�����A�@Y+Ag�C�w�1�s]�_�%0��Rno����4Çw������#�\���B9jy�lw�>ٽ���]x�@��Xz�OC@H6K�炇�^�����c��*R���&=�/��w�мU-����E<�p[�+e�亘�U����T��8��*��3R�.�,��.�R�`��Լ��H
�xeۂ�/R�
�5?s��l\I�2�R۝6
�M��,-�h^��i�K�$�;$Ў�(!��c48^��Tyz����gNG�ԩ�cV']>�g���q�l��M�r�q$%�+z,���y��C��^ל�ni��ί�a�5�4���^ZU���$�7-)��Ρr���+���vk�B.E|]�J"����AkV� ��i�Җa�I"^�M�|_�EE�M�CD"v�%�A��x(wj)=w�LW�S����pY�2�X#�}�ט��<A�,���
ѪM(u*�����1�<����d�͊�Yy�)�-
8��`��2�J��MT�%F�Q�@Ȯ_"�+�);#���?�.��9��`�̌��8��WH
�L���-�i�hAyO�>M
9kt���
@,��K��}4�9.�=�%"=?��w�z��%�|Kt�c��W�!���m�J���%������
T�<q*��t�2�!\�&�
��=���X��<���t>v�^Z�
Lk��� �Y�ɒ����Mby�3��K��),�Gx7w���T�7e`l�E<�<�#�Y����iW�FY�i�,??&x��?5���i����h�!;��%U�|�VSl.�զV�!�r8 ���ꤱ��7�ӑ�"B/3�8���{��>�Oo6��@�J���o�FH"7��#D<4��%�����$?���}0��V��‡�"ެ�xcChT�C���Ի	�R��7�X�9�?��sʥ���K��2��_��\���E!�^śR��d0��?�tҰp^�z������l5#ٮc������W�ĈM��lAXG~��;�]_L&���̛�-��2�	1���s3F%����Aӧ��11Rmk��¼��h��]MF�S��pEG���
�%y+ֿ{/
L��2�����I!�_L�!%��,������`	�ad�X~{Y��-���K�
Άܱ{fi#����^���'�o;��r�8:��?<�i7fa i�=;����W�^��Q�{p�;<����g4�p'��3��`?����ӳ]
�-��	����AC7�+Ah�Z��/3�o�v�10�
��`2�5��x���o�Gw?�/ Ș�+��M��i�E���W���Ky�3���e���-���u����K��߻h��m@��o�c�Q��\�/+ww<�3�[^&n%�
9�����f�$�W6�jؠ"TM	$J�����3�cP0?���4��D�0�K(��Cy#�{��w�t8/m��P���R4��m�� �:&)�VX��@���D�'�>|IĒ@t����l�L��e<����-M�f�"U�yՂJ��ZP�6_}gY9�‹5q��zUs:?AЫ�A!P�ʡ������9�
�8��A�DԖu���N�jm��?�G�j��#�VU�LȰ�<+'�ZOç�8 X�W���1-<����t�]s޼o��Q�q
'>>J�p�K�ռ[K�zI���?l��L��(�lg��'4dA��?���׾ꗴ��߸�f�i��'�oނ��`F	R�Ȍ���d�]�-�
�=�Q�è?�=��U�ސ����-"��������b\�Q=FB����{H&� ���]Р��-'H~��
M"l"��ɠ�Fm��X��M8T#�K�����8Gˆ���FԻ���-�}r|�r�}�EW~��L)ք���l�;(@C��yk��]{|� `Pt<���N�hFS�ap��������~�>\1h�E��/8P8�}>Ŕ`�(�e������Po=�q�T��p�IN���������Z|�Y�U��<�i�q����:���=�\
�:)c��ƆS���
���	_`�ũ�ً�[�,����
�.�������SN��\�s�9��N
n�W;�t������G��F���=�!X
����b
2��ats�{�L��(�u>�����u��I���h��y0pfZ��=vcx�<���K�p�
[�!݂V��Y�lm�Qk��!I�ʁ\O�?�vZV��ю��u(L)<ك7-js��ԍI���e��e��b�ag���\j�)�&N���&0'��7�Y��΄�M�9�f�z���%�i�k�Ѵ�ٵ$,Ù���[,�o�r�2��,���!��bG�f3rJ���`sf���j�J��p�/{�9�,-�h��\'	dRȣD���~qC�t�=f/���]��]U�^����a6�;[u�J3t���V�e�,4�p �Œ����ʛ��#�i�xYv�)˖v����'������~��E�u�=��f����b�d�g�FY�w��Х�e'�pJ_�M9�Ov���Ѻ�
����3�n�����k�R�T,,yCo'ӛ�f�Ŀ��HX��Q����he�R���i_��N`���8��g�]�m���!E_Bێ�I4�;���az�3�#�J�|J��Se���wt���(C��pb�TLi�i��͎�J��%�"��!�F�Y���l�ai�1�ې��2
Ȇ���N1AȂ�T�SKOM����x@.	�d��'#�n��,̠̘��_���(h<�a���<+r���͏���H2(��4�o�����4J�hH�����0g��B��S�~$���4UA��hTt��)�q�S�?��T�{�����-Bi�25u�x�n����G��-���n���!��C?�T)r[�kŋ?��I�|]��ز�ۀn���<PC� ��r����T�e�>	BK��'�?�o�r�� �Nj�{��!s<���d����;*@�ͦ�wY6��Eh��y�z'!���nt%^�5w��6S����5|JpR�Ꞑ�f�&Uc���ե�vřǓ묃h.���l�a��}1�G��`W4�Ү"`�%����9��=�~B�$~&T&������-�8��YB��|�Hh*E5D��|(�y��	�܂��Y6@���}��o0���Ó��)����-<�h�U(��%gȓ��'rzU֮bA�S���kɸ����$gr��4�F/t>���%������K#9j����&/5���.��\Y�
�U���(�xx ���v�8���#�k:��ѧ�/�)�^�� ��Xp9�6<�;7**_p���B���̺9C?�E�vG�@���aPrǥ6���(��f�B�
U�)��qn����� ��S�
���x#
\!Q~�s8���%� �X����T�J�����kA�
:a{;D�����M��;#lD���(������mo=�$�-�4��t�UH�5
(��TJs��&YX��墄�~���
H�<��3����=/�T�#�}-�q$�|"_����Ӂp~9���P�������:����~z�=�Ƅ`$�H��BE��4��+���<�����r��Z-UQ�0���`Ώ!N�	.0ț;HN���3�ɺj����{�Q,�l�@H�����ޙ�Ӹ)����݅�&�o�M|�2Ƀ�a���:���p�-���(�Y�����6�����"�`-8�CRG��c��N��6�3�rW'& ���!4�:W�s6~ˋW�QB�-� ��|���-mB�d�9ӱr���/d�
N�Vݏ������e�iT��,�;�yN*�Q��R�+���pV0�c^b\E�3��)h<��6�*��F11	4aR���RG��:��(���%4ck����cO�4�2,q`�|:���gА�7o<gޭ\���kw6*U��\�1U�FPQN��O>�;_�Vq&�N?��ӏ� M��G�pA�}��1K>�u)-� �����%�JW�����t#߲#c��O�3�p)18=�
K�9?��7(�Ƙ���<
�Q���{g���˃R�2�]`{�!F$4�C�Sع��Y��(|�>a�E>�H�����Fź��XI�&0}�?�w��>�hd��I���cU�^~� s�p�Um��5AI�t�DO�>�n�"��[��n��3$D�OwH���ӽ�P��/�e%	��͎Չ��m��^bx�H��OwH��0{�~I����t/M+	iD�^�p:3	ӿ�U�&z#N=�v�V���Rk�q�j1��P�1B02F��X/���_�+���6��-�qջ�vڗ���v���:�������-�;5͍z�#H�`sIYaw&A������3��z�֘�
�q*���
2���[��Tx�R��k��4����?��m�Q�}L�������w�6�օ��3#O}B�4k.���Ր[3h}�2�`A$_�{S�q��O�])7<	8v'���:qG�~H0�4����j����j
=V��}�=��M'[�;��̖.��j��'�|�R�
I�է�u�j�e_��0��P��Ss&=�2��������b�W'��.|9$�;��r�w�/���������$U�9b�J�9�>w0J�g�t����aL�lY�9�u}g?>�S˓��
�dL�)�W�o6���1dE�O6v�W�4�=U��?a��o�B�>���#���_y�{@v��n,��EJ�³d8~.�\�CE}+GD�N��2�Q�'U����b�F4F�h����l�pj;���S�J�Y�e^꽾:ԃiP�{}�ԃbB�W�
��/�X���ȿD|�YhK

��G���:q�R*��������b1�ujO��!u�R�n�%��AVS�E��M�B�rR�2��
N�lkR�ׇ�X��Qʡ,9m4�_zW�@�Nbͩ�zR�) Òk1���H1�p��k��E�~!��O�ԏ��^�B}����\B���r�\9���!X�m����~��'�Gm��`K�0�Z����㩙�ZXFz�>��N��x]�L��w��	0���1��Y��Is��ZV��0�*�\�Xg�ܨ�=�z�٫#L���Tg�qX��/�L
?��p�s;��ЁP�=�+� �J�n�h�S31IFdxB����!4&�o-�걂aLS崼0l�o�dJ��?��ǀ�$|�MuV���E)5��)�KCA^�T>�E~�?���Y��acf��;�7�X�_�����%B�e��}�=�g��qv����V�w�m��k�9�<��\v�g'�~���'�?��?��'G�e,�zʦ%������L�8�!L��ӣ�I�A�%�E'�,�2�sת\�H�Z�z�M�(��l��א~
��z�8�-!���^R������꾮�l�d�5���g��(���R�NB!?qz,�CHh��X�����u=^�)yC��H�_����/�FAu��D�kM�❈4�f�g�!4'n�b|-��t�}X���4>�*�G���pH�㎎�B��w�I��M�6M�6�lit�=��}���Ύ.qa�x�`��k%�����8>�?3`\��>3�3��	�� �ۡbcA�j���('���,��ލ�@�a���G֔=|�s4]�üQ=��j	��oo�
J׫jlJP��*Ӗ��P�����~#C+�?p�U�"I�Cl�}�"�j�2Ѕ�
c-�a{{�%L=X�&�\^[���4q��c�"��V�����c���X��n�Ͽ
�k&��e��d�X���N��y�;�ӵ;��5�x+�Vk��:�N'�f��w�Y����c�l ⪈O���s6ah;�q���U�2�[.bn����UF��բ�$�.���%�{�����o7W�;�DͪvQ�"��6�t@��5�7�/�Q�^�`o��,��U��bYΚ˱���_�T�2(V�,�<��3�v>��L4@�*=>�Ns�Lط�*c���/����\��t%�;�3��lk��r]�Co;ǐ�L��_����h�Y3�	��H�|� ��D��RZ�����!�S�qzZ��ެ�y��L���5�x�H�7k�/�ؤ�Ƀx��9�du��/#4ujϔ[�G��J�
xX��L��nf�#l"�T�7<�P�` �0�RH�f��a��A��W��z%
߭$�r��贫5o�h���y�Ue`����h#T���ѡ)
��A��+�'�q���z��kw0l��;	Q�vh��(�c�<��{2&�\u�ľn�êM������/FB��Ε�x1��4�6�i���Aj�yT��{�!Uێx}C�!���n�-�_g�����M�0���W�D���:���bm>2���~����:^>ֳmc�Q@6��6���m%n�؊m�K���վ��b5b�8��Ɔ����hK�N�.n�}��)s����K�o���o&5�<���P.���L1s�Lc(��+���U�{}���ⵍ�a��n!#��^}�����]mo�0�+)�*Ь
m�b�j���5�i�(m�������
�����v����}~;���=�8�a���x��$��0�d�\�{�TZ������"���,.��4�-d�@(�U5���!(@�����	T�¨,|��8ߠ��	��d:�T���P��0������r/��AM�=�
8=�d�?�}\w��_��
�[	=X;�^�.0��Nh�����-��eϚz�?xB����6s�)w���/ʮ�h�6�l���찭�`��s���Y�*t����.�U��s�"m�lx5Jf�"jxLYh���2	g�(�r�4fs�-��DC�*��L��F�|e�k���Ji����V�����K~�k��>�D@�Ͱx��J&DO15[Փ��Hg�������Vq�ڶV��s��<�x�%�l@y)�t��E�A5��vCk�c*)��9�ϛF3{,�r�¥Jh��:�8s+�e�=jF�b�-vȣ�ϳ��P�qVzeTN}*E`>�,_��eg�]J��P�4`�j
D�o{���L��x~~��k�G����=V�C��S*�9�����I��3�mo��Б��*��\�ΞZ���}9ݡ���f��4�B���TU���m��m�VB`?"����Uɜ���fXD1�*dQ��P�����T
�*��B�x�^-��.?�Ɠ��E<W����I��O��_)�
h�xe�����]��x9
��.���]��Ֆ���`Z�“�!�
��I# �Ǝ:����>������j��`v�m���PgȇT�W&RQ��cb��߄_���|��6���'��Aٮp�<A^Ph������T�}�r���Pl�;R
�S��
��9z��B7,�3O��A"�6:-c���L�h��s���ј��%V8�.���O� ��N�6�{UA:P��BWN�W�x58?��Y[o�8~��`=4)"[��ر�`2�b���-��a1X�D[�P�V��x��{H�j�r:�O�Ӣ�E~�|��CR^������?>�G���Z}��fWÿPo��.ɳ�GHʓ�!b8ٖs�{������2�C�l�����H�$ ���p�	��>E�\
�(�1Y�ǂH	�@og�#�I��t��m$�Ip�&�7CwA�9��$C�3�+�nr�L��
cH�ʈ �#	G���
��O��傄(OBP#A�O_FB�A7�p�EXBld
6��t��2����}���|�eV��I���ac���_������>}�jU�Df���wi�����ˇ��ݕ�oU,B*�.��C�|�c�R�i2�BJ�@C 1| r_?K�p�pRU!����o3��WX�����;c���������ş�����uL$FA�3p�j�ˍ��	I%#�f{)�����B��z�ՕSUͭ�mh)�}�������Y@L���?�,11êj�v���
 (>Q���4��,�m(##�n<�
�w0,�e���\H���#R�

��3�r"P�!����'�)$�g�xgkJ���G�H"5#��8t|<l3e���.Q��O&�349����{�*�ž��D��K�.���2֗���r��]�B��Q)I��
�K
��TE��r�x�o�'9g>Κ�ͼ3�S��;�m+�Qi\��E���?�$���p� �0�D(��é|����L'gh
�Ӌ�U��mFvΥ��D���ƽ���VBFά֤1�L`EbX��	i��<�>�D^���h���'��L���y:n�
�&�/��,�z�iU��!T�n�qv�����B�0��D
C�����,��n,PH6e�6�U���G(�3�Ai�
}("XfT‌�(!3�`}�]B�Lh�3���ˠ�cT�m��	Б��hU޵�X�f�i�P�h3߀?;����k��rV5}�w�޾-��w�@3<���8�3��Ð�2��>��>w&�E[urz�7��,T��kv5�
DD��桐u��@���C܇d�s&�}�`�t�>����S��"�H��5#�S����V�z�>�Br��ݻ�C[�`m�����m���܉�?(!T�����?u]U)L8,�7�:�1u�j�M��P-V�j��{羲my^�E1��&��fȱ��J��Ŭ%d�r��i��R�TwO��S/�Ph(��a҆�.�r���4�nb��O�8���v�[�{�}�pZ
�� ��� ��=
h^���Ո
�VR�VOdC�s6-A̻#��[��wR��0�3�a�k̹
3�13��\�0�3�a5fa�\֘K�sw�(���F��F��B�5���m�PIbQ�83�Ax8?Ș�<I�n�耫�^E+m˔Ǽq~��h��S�^��
}�����olNN��"�c[���a��'B��6�f'��?�Uӡ��Ӿ���+d5t,�ZlϑBΚa-�,�&Qw^�2"�h_��I,�B��+AK���W�U�GD�}-�h������c�[��c
��Ρ%��:.��Cב�
�3���2*��9�6O���p��}�M�������T��؇;l.�j#�:8�㙹�t̔7��)F6F��F��3u,s���@�S^U�}Q37�U�T}��Wr� �:�1ζ4�7�(�u�w��QO�7�K_��^uú"Z�V!Ɪþ�آ�����)�3�D42n��@^cV���VK��0=5g�
��
�-\�t�I�aPߵs�����i…�f�F�@C�� 2�2:~������\C#�ś��"+��&�2�B��̭=v��Z�V�����6f�v�������Ǫ�
���*���(��ʚ�
e�����Q��y�c���}�95㥰� �6�h(�C!=�^��
����m�ຼt"Oʷ ���A�E�^S�%��2����	)��f�(��:��_���gȻ�T���r����ݰ	�������"�����<��J2�%�U$8q�8C3��J1류����ÿs�B1�R�k�}A�;�W���&<�1�tД����_�t�o2�|�]U�s���3���rq4�(5��N3맩r���F3���g��Sm���"��_ܮJ��T-U.��*E(5OLV�i��S�$��Te/�D������Mn� ��R)�.�a\�0HU��[߾�%$�@��xX6��*1���
MA�-r:�wyp[��Q��%���3�Ǜ1�ꆱ�i*+"�
�9V0x��]���s�X��E�U6�2��V�uo���Q�~��9�s�X�]V�(�^f�s`͹�*�~��88��s��K�7����H�~i�'���%��c�����p��U�c���8������P�ly��5��t�� �����J�n����r�VuO2���:A�YvNu�S�3�n���Q��ǀ���?��ϟ�b�:>Y�^������m�5��0jS��� ��5V�&��Т<��/��CȏP�YC�R#�����"��F���[�ZX~����O���Ҩ�D����][o�:�~�_�Mp�cl�+J�.�t?���g�i�h�D%��
v��`���R�H�H;�~��q��UdU�X,ѥ��q+@��`C`؀0}DN�*1��DS�ub4���b3 �Ҫ��c�U��˫6�@�~k�S�##��%�#�㒓��Q1Z���:�]г��v�b��e4���sshb3*�%f��q�T.zQ
��sa��=�hR8��h��M�4�b]�™�Vҙw�}rZEU��*�3�D�B����{^�p�4(�+��p�>
"M(90����aH������F�%#��s)	��f�o`.�ࡹ����xh)1]o^�<1�Q5uٵ��ʶ��c��RiYb�hh�c��\���!1f��k��X�yQ��_w�b�@�(�!JLj���c��0�@۰[V�.dL�)op+�w�*
=gՔ�-i�Bs�3�sdE�6��9iʡ@F�DԵ�)9��*�hS�n	+Yhg`4����X��r�p��5�!�(�jb�
e����J0�z%��AYG$��.3�IO��Mӡ+�*��l�� �h��hV�iC�;0#�,��$`5����0�ª�M��Md=��]XF��4Έ.��,���f2(�|���>��
5���e�r�ۡ	�Sk�LvPve�S`v�]OQ�>�]���P�
�������ʬ�`u,57�$@���#�^�<� �H�Z�by|;j4Y��V��Fm`5ڵEV�m�;`5��0��>�>ʺFV�uS᝴r��X��
�;i5J{���(�T�G䰦
C�4Jz!��5:ph�&Iu 6�0�r�Ʒ]-�.�0=�/�ः�s漢�.�V*�>�Qm2�-aK��H? V�kx���D�9����e"������Pv��X�6C�E2Nز*#�߮fEd�v�<�����`w։>�O�8ؚ3A8K�޹�YMR8
;�+��
�mWP�•��i��p�S���H��Xcu�)�ΊR.�)XH�
C�%����Kj��*�!+�@�\4I����fo��H���ݐ
�+P$J!��Ϊ��HMPA�c	]�wE��	tr�P����ҼEF�h������@��9��1��My�O��,�Tl�#`$2HBr�����P��-'i¥ 6}(m��@
!������Xomf�h#�ߡ��0y����>�u��xhx�Ǩ4��ݘy�z�qs��-f
�c`TC_"��V�Ze�aTl��BzHa{+�:�V�=��aG����( HV�P���D�ʃg1Dm��C:�(bT����X���QEB����~'���P��ݬ�#�ݮ�cT��ۊ�����>�[i�,����]R�y��pC��CX��BFU�$*�Q׼�Q�M��e�]2D�:�ꩼ����3�w]x���M�oH
W������ٱV-�À;�U��p`��0�rq�rҤp5ܠ�I��E�%�7I#�,	��.M��>K�j�w�ʹ�ë�թ;�a�T үd�]��<;�9�ݓ�]�A�!�}��7�5�y�h��ʞva�dp�E
G��!�G@�.�*/�����\��c� ؀��5��z�
����AF�m�~��>B�*Pl���A�; ��(s��Ȥ��~�$N���u;2톾�8
,5kE��(�S�q�'l��&k�.aV�uG�=BZ��X������a�oB���G���"W�Y{rƢUՅU���Q�p?y��U����H��y��R��|�Yt��|�Å1:�u<mv3L]�}3[��� �w�sRh�9��wd�%��ώ=�ܡg�a�#����\[���_sh�@�{&˿V�'�J}�Y�?�����D�^+ϼQ�[QL����3|vj�î�d�:)��8�AS<�� �: ��A��Q�y�)�xY꺤��cP�4��T6g��4>��קͳ��V�u���y�s���B�̐���R���������sD,�r��o5���;�m��Y|�Y�t����DlN�4��2������&�X���{d�*b��c��=~���KC�Q��`8���̫+�WI�%J�������%��@�b�
�<��G�\�]\��9W���|)�4ov�7���t�X.j��BمQW�9Gխ<P(q��%B�d�;K!r��_Ȝ���HC'�Q�0|��i��T%!��l9u��f��+�̑�Ǵ�'��^p�g0`A�1-����0���i����X�E��|���q�����Jb�Yj���J�x�m*��.���S�}�����It����\�
�N�e�_Č묘7:�V�Fl�Ֆ�b{��GO|s�����G��:�몈T|3b;���p�0=�x�s��UC�m���M;?�O
[J�V��J��*z�GM�F�{xT}�
i֑�Z��Z(߫K�9���}�$�wz6y�����Y�%�bF3�����h}.�I4�o�_8F�WH�å�R�{�Y�Z��h��Ĝ��e������UO��"�֞ß��u�}1of\x ?~��16�cu!�Ά�t���t��Nؿ��0������a������;]���Cv1���E��i���a�28평���z��…�������+��|^bp���樎��7��n�(��������8�#�	cZ�r��tĭ2�g$�+E��8�Vs� US��Tב�/����lQ��o��}��V-��=s�;�;�J���TO�����ad3������$
�>���۹�� �s�j�J�[,3S;�z}��f2wZ{�f!ϯ];���
�Or��k�+��G6�\�\��ل��;�g;�h����yM5q��[.�=���[.�����AP�ՔbqظE{�A�Y��eW�aߧ�!�Q6rU�
��);ws�܌_* q\aY���d=;*
ޔQ�r�\��d�P�-�{�ݼ��%��4��C.O��4�'q�<_l:Uo2��.�G�9�'\����6��cJ�Z`%�.���l#Y���ّ�ϕ��,��v��J�F@�)����9cXD�bh���.I���s<o��Úv���v�BF'��F��&�b���p�#wb��D^��g���խ&��T�&½��B��g�l���f8�&>2rC}�E�3�b]��Wd��]�x��Lpn�;�߽�v9ײ
=��H��{�j׿��1}²�ٍ�E�QO�
�P���a^�"޴�I��!�ݹS�'k�O�x�y�˖�ʇ�.���|h��9��?�`��L�u���إУi�a��<�[ʔ����8]*S֝����g��4��J������=<–�\7��6g����3�[�Q���g1�)�|�Ʈ�����)��M�Zos[t;�t*vY�u�
�/�˰�gc=����$�;�M�[ !�^�2oo�J�`0�-���@�J���&���c>F�0nv��|\܎��<�����:B8�	�ϻ���R�����O�ׇ�Kw��2��O��-��q��*!^kF�f��X⪝�:�-�3�zw��ן�@�~�$[��sŵ���u>����o����8�&kP�z�����-�̗̞[��f��Đ���X�i6�z�3<����mʟ��W��`��`|�m����.�^�o}\�Z3�V5SO;њ��X8�V%+�S�*��Y�>6���,
��0Ф�;�f�ݝ��tD���-��i��ZXbK��:~=H�����n��,�4��C��n����U��`��g�L�������Y8Mԟ7��+��$:��n�'�W����y�n�C��`$j,�iʩ���Y���n�|Q�����ׯ>����t~�B���PX�@�/_��%�O��מO/���T���
O��J�|�t�"7��|�_���?$���Oe�q2�ׇ��*�k~%?�����Ϟ{�>л*���w�Ѿ!)n�)�e�E<��.�
�ݾ�-�T�Դ��&�Ώ��l��P	��<F��f�aI-�s���9���ό:���-�je5��6Bw��^T��m!�
�T����ϫ.�����-l�^k�m�GQ����0!Ǻۜ��XbZd*}�I�	�7n�T����r�2��O��;B��*�����wm���
� �J��$�"�P��<��SH
�
eunEoae����B����K�@I�g~����9F
������?Am���W�n�loۇ�'����h6�6�aZS���b�t���� �&�1o�@/ugKR��o�-/����B�ē���_��NG���y[*����Vg���i���k$�v�Q�L��(�K�MZI{����+6�w=�l�����I�ȷ�~�w`Ǯ����~].�;~�S���p�����|���:������p[L��|�N�(�V>���C���Վ��.��p���Ω�ħaR˧�O}�����T������Y����G��2<W�@�o�YȖ�^��|�z#9\���.�ߓ-��`On@�$�1m��<ƞ���=��u�>���\<�y<�
m��Fyq�K����%�D��D�
5�|ـ��(���DD��w뜼=y�!4�B諂��y�_/��壦���/Ig�����ԃ~�r��۷1U&ɜ����,���Y���s9���&?�g��Epf�̼���c\�e�K�>5
}O~}��xc��Wy���Y�N��$>�O޴�n?�U�< �Km=�Y����!�����$��y��ߏ|���u>���!����#���"�0��Ӟ��n�l�?l�{�V��A���[�xP$�l��4���v?A״GȚg��aC! ==���'	�*B�,$���ՙu����8F��u	M2��x�!�������/w�W�/gHߖ�r��/�J���J*-��M<?baN�&fi��۩��6v{�0_��7*���Z�NGOyv�P��t#ߙ��}{����cL7g;����_T����=�X,��?�j�!�:/��1�g����VMc���/��ën\,�w�wyY�A��[�Q�W���Ri_�j_�B�[�WBtK�ژ�j�_��^�E�լ�WEV~�,B�	������k�x�f:�o�R)�E^R�����8������d�"_�?t]�z��o�|Q��|���t���E��f�}V鷍�y���)�
$��N�z�JU�Qo�N#
�P�K
����W�d]0��9��5Æʫ����K���]����*�?���]=o�0�+,v[6>��Љ!s�ʭD�J�Z����}�Lt�:w���}%JH"��J���d31
g3әgV_ԕ���
�b�y'�p���r�JK�jU=QG�Y� �@\_]Q�������]�v��V�p��1�JpmOt��Ʉ����<^�$��+;�9����+�aG�M���c�}��#`��w��6����/����?�ƫ��,�紐��0���"1R"�MB-�K�����=�<�y;�j�o)�
�;���͒ɓ�;��A�\�)?XSc>�F���}
���Ao�
ŵG��N���L��Uۡ":6��h4a`u�.+�R����hQًžbQw�gN0mk�Hk
��X1�0�J?�q줝Y:0�#1t(���.
��ZN�sϾHM%x�2�8P
�&�*�c���@��M"�Ha]k�X��0��+(K�6=����栰���H�ԓ�)���PH_���b���]��of��6�|[b8�N��c�%�y]%O�����-l�z�|4#Ҏ�Ga��=�\d�����{NC������_}�]��
T������Â������[Mo�0�+�����pޅ;M�}B�v���nL���3�B'��d'���(j)�? {���܋�N
�ih}4ix!���S7d��)������T��Q�k����b��<�I�s�r�(������~��0'�*���N-���Lӓ�x�`'c�a��QI��TJQ� a�5���e��o"�I��`!C�����ٽ�q�5��y;Z@p�+;����P�e\���Z6�
������&��'w�}��.-��vI��&��!o#`�Fv�&�����u}����x���ܟ�+������Aeoi��"6D/zձ���4'}(Z��9L-���D��>^�/��E_W��#�k�~���]�n$Ǒ��OQ�V���*U^UYc�a�w
K(XN�9�v��es�
~���O�O��Ed�G7gF�EMuYyDFFFDf�G�U��^�5ը&��2?��I}�\��	��NJ���	tA�rrR��#��$��ʯtJe��挛�ib�%Iѽ�,�N.h��g���s�|͗��߉�!)h���'�>�R�x<�'�4m�r��K��Cҗ�W�w�oH]	H����)�AUsL�����*q�h
7�Z�y�~���8�mq^P
����չ�u������#;#���h���NN"��sx,'�7ٲ��!�ژ4Y��i���ʥ����me�!&[���C%��YzO�R8��v�m�PgG���2�H�D�������d�,�ԅ��L�KW�П��n؛ğQ�(Or�=�O��..��p�L_�YQ&{(�\A[pe�X��R�3�w̞�Xq�`�Q2����w������f��d1,Y��l��zh��;+���n�J�R����Y�Ѡ:�Vyn�o6���u�C�n�,�dže�]a\�zF#��	O*���64"l�i����I�^��61�jl�h�WX rf0�聃�	H0dtDf�i
���D�ь
ɇtK�t[�P>�\�]f�]}�U!�e~A�dѣ��O�(?����1���A6[�Y�a�y�@1g�M�:A��rs?&}5@��*�4��s?�R���+�B�(�^�Icek�,*���� �A�wPP=X��ù���4�FD�������xR���n�?�����M���u^�ٸ̸��/�]�L�c>>ؚ���,�~�M�L��sURأ���k����&j�P�G�uq��T�6ۅ|����u��?���	�Eq�,��;88r�+ClG�Ơ24!eo�.����K�+/J��ߨ�z3~'�q�E�	4�F��9�)<��,ሿ��:���Ϙ�;$+a�JExlY��^d��H'O�BwHvb�j�c�g4�*��I�_��%38p�7P���d;�ޮ��a�]�AT&ETN�Al�
�]��ʢ��礟�?ֲ�M�n���˨8#f��F��!��G��:�Ü�X̺����͇�Z(�ߥJi�U<I��î7@�^��n8�v
!�ޕ7-�Մ	�u�ef&S��5��Ĕ��6B���a}�ء�?��I��{ҸX�i9�s?i�롪x�/4�i�v�AH��#��C��w(d:���I�#+�o���<&jmb:���Di�š��/�HD�I
vl�4v���0rS.�y�]���@��7T�G��6�9i��r�K`Q㈨sRQ��F�C�|�I�xZ��r9]ya���x��~��e�sd�C֎x�D��0A��f��� iG�%�~�GI�bŝi�mJ��:�WV�K2��%ix�j�?���$���&&���$�qbH��Ió�SxL���{�Ɔ,�'�[$���z\�{�
��Ĩ�%�74��{y(\�s�(4��a8��;9:6+�J�1�Ȍ�Y�lb6�<�ʂ.
V���~�!�߄O��O$�I	�!Μ�F�1J�X%(b��$5��u7\�4G�Dj�f^��SK��Ǚ����$(�NMTV�Lî��ܤ$\iR��Ą:�
uȢ�m���U�P��YJ�Wv�$�qN�E
�E��$�B:�����$x���b��:3�%��d�@&@��/�N�}��\D�~�n�HT&o>�{�W]�
��ΡJa�D�ۛY�yR^A���x6cO�A�<w`7K?w������=M5��n���Ckt�������Y{	I�DӖ�I4�!��p氪G��b���t1�.�$�v�ZDHʓNV�
:�++�LV��.�<�6�w�bb��E��gD�po�K=i�.Ô�����&F����UU��@��f4H`��a����Q)NF�aINv'E���:jY'����>�uM���d)o���YŔ�i9R
�w�E�F�5p�S�N���G)���|}��x�6�e��D�W`��4�(2���琥�v΂�Ð湃���"�͕����&(0��	�-d>ܶ���_��X4Q�JC��
�D4qpcmT��H�ΰ�D�J�g�3vO�9�����;|3߬Q�[����2��S��P�a����G�vT�g�?�G���J._������Y��$C�������"ޭ���s�n}�ؼ��/����h��8;��ak�n�x��-|up�y~��O.3ol{u�a!���p"��zh~��Ǐ�)?�ڬw�I3�.�m�k���f��{|}��\_�m}�|󈯂��^H�����C/d���?4��4���w����NC�}0�E�F%�����ɔ��S�!ZO�d!v��U�D�"��Uί��%v��G1<�M���{e�b�q��5X�O����>�~{7��2I���FϢ�=���/@�Ne~=>JB	n���|�"��)މ5nO'��E4��QŘkƪ��xz(�qa1�_s~\�.�V!$�>�b�2(���"��'m�w�$�-�UmY�
e���v���F��H�Jl�vo|��&?<�l�t8*,�B�f�VX0�
%v�I�;{pz8M�V�U���iշ�`�*�f�^�Ah��F�~����|�q�Hhw���+'��G
�a؈��
���#>��~�t]��m� ��5����k6���	+��N@�W3c�qy`�8^|X`
�z���{}��n�v�xي��$	��w0dA�#�~���x�0�{t/_�UA|1u���l�N:�GNC�Nb�����+?���������r�/�yܶb_4��$��d���iP�wLf�2I�6��Oy:�S�h+�vB���Dh���`�'�����z�P�!�3r���Y�c���yV�f0�w���>+o;���6�h�����/�w�#\X��P�
��ӡ\$�)%�+��o׋���i�|�:M,B�q�V�
fA<*��|��=�V�h��a�̢�o����V�����^?/{������������ש,�}y@�*�J٨&�y%HM~8o�Vy��Pbg���#��U���^Uy�#�]�*��J��u�K��#��(�I�H}$��!�a���}@jP^����jR�s7��M�����b0�P���6�3�r���@m�,����
�˩���M�h��Y�1��cjk��+lC�}M�9k9FS{Lm�A��q�g�z�p}B@Y����zn?ڈwG�<�a�۪w��g��xqu��,�L�0���e
�{�a,�Y�!P��*�W_5����8Y���^���C|2N1���A:�,�O�w�GZ:m�*O�紗E�B�u�N}��^���0�����϶T%tMb�
���!VCT����FܪGi���'>x\�j.-��ޱ����� �m>�]��Ɏ&M����n6�EU>C�JYP-��l��x�&~�-aFL���U�#js�}Z��<�X�u<��Qj
��z��z��g���"�A��g�qE��#����c���c���+�u�\�+�����e��<9��2��3����3eS��"��u"�(��
y��͛�r�b�����"<gR�d~��߉NJŗ�;*����򑟄�Ej+E+pe@iii`#H.}5|:�8O_~�|�P��c�d����}]�����8v'Ts���N��*5��&�E	m[8�!��`@`T�R�U�#��)�֖�E�.�Û���\�mF�mU��\�$w�*�n�`����0���E,̃��6��3�0��h~X�v����t`���.�	���Y�oE�˹�$��:k'�p����Ѵ��bU���ӂk�� �W�ك�;�K���rt������;�Z0-�;�J��6~݀�?H�W2��
��f�Pyh#T����?.n[ʰl���nW\o��k��v���V��6`�o:Y�-��uz�Z�7�ZPo�:�;��룐�>.rpe��0�]Z�n��kR����aX�Ja/.��SW��\= �RN��9����Zo�׳�g��4�3�C{�����)3_I�z��EI�Pk�;՚ү��ہY��0X�X�@�>C��o�z@�Z����ߞSD��F�顡с��FE�
�X)/83���CD���>T��j��5q���9)�781C��B�����ɖ��Ezm�����A�63�H���[G�ÅU�t�&�:e�؇�4W�;��oN����ym�
*Dbx�݅<���޽!����/�&Y�ꨀB���E�����d)��D�W�
F�`y���ZH:�H�_���i����w�茟LdP��݈�C͕5}d�����'$�ʤ��D����7|R�'SN]Z3N�Y^��P�ƒ��:�=gԋ��!�*�{��E��_��Pj?�O�)��lj1�*�=o��o7������Ƨ�2���������f�<��l}�m�X�A؎�ߕ�js_��Xs�=/Y���m��C�1F��YAd���v>D���zΈ��q���=e狛���]�������l����}n�$�_� T�d+]O�o{����51��޶U��e^��=�wۇ�&���4
.H�(?G�]�z6�7L����v����!�L�����p��4+�p�6��&�E������z�J�Z D��'�Ύ���� ��?��+@	�J8������&����O��#��9ۢ
��mu��ġ������(��+�
�8����'��o���F�����,�&v����g�ޗc��c�E#ƐH*��N���<���n=4
�y|(sf��J7�g����/��O4�o�3�<�)����8���!Q�F�NF��ַY��j�=r��~(	;���Z��q��o=�u�_�x��)�������ԝ�Y�֑>K�|x���a�ܗ3�>�)V�Ӗ:5��i�k�r�o�H|s*}��V���wC2#�*�W�_�ԋ�9"H�#�y޸Γ)7\���1�}�Ҝ��æ�k����K+�!�0��:�\���� �����CV����}��=na�+���aA����\:}��
�j{�"��Ӵl�pG����4>��������o���Ϣ]��i�D��'g�ɳ��X&!"nQe���}'}ICn�g߶Lؒ��t�W��ǯ����?�~�os��K���r���W�&�����1�d����|5\6������C��fP�Hfad�c�&
w!'��K�-��z�v�����N<�H�R�^���S����G�{6R��݃��jq���">�<�_�yP���6���ׯ�L8����<��C=$Y��n�}��_�����6%�n�}����m���-����a1�����~�]���z�J����4�Z�}l�`'�*O��]�`�}]�,�3��$���Nr������$׹��.ɴc�/��;��,ѹ�
Q�]�Xh�@}!o:A$w� `����&��U���B=�Õ%���L�7��'�J�K�����>�'1�d��]7N���Y��V��� T�����V
 	�	B���,g.I�E�8�&)|T��HB��Cm���SC���0����V���Ng{���pR��[�����(G�8�Hs(Eo������LG�,)\����xB��ӥ�Ϩ�h������V���U]���$D�i���!�>���Q/�>�EƧ~擌��Y�fYb
D&C����K���!����D����)n�߳O�M�b��̨�E�B�T�v�>љ�q�L��bN�Bba3���x��b���`�4r��*��7
��U��r�qVא��h��w.���K%8����h9uU�^*���C�jƸh��{���5uK����fc��9
��H�ni��^j��|�Uٍ<�v�J�y4�5�U�"67�A!��5
�9�ϧ)
�lƑL������)c����F���A��!��r�:���RA��\Q�8b,���U�tÖĢ�ۼHU�X&�2T��T_']8�=��i��� ���F�4hu�
�Ƀ5�X�f�d��s���#	��<�s��E�g�rD��>1�C}m&A;�'�V1qH�Z��I��(>S�l~���X7�SC���z�gNe)c�BS
pz�gF>�d�.�����W]��-.
_fR`O�S���%g�g��TYgj������3_�n����}�#���Cw�����Q5��㿂&��n\�k���g��<�NV��'g�+C�5��#�"��qp�B��������{�B�|(5���B������1Y�8L��9ݦ������$sV!H4(��N񙆴�ԥ�B4dY�)HgH���H��j��1>�c�3)Ma��Ʀ�5$b�B���TE��D1&g˩�
#ة�<Z֯�X@��!��U8#u��C��?Z�g�H�g4%�rF�[�f6Sxk���IG܀��<�L8�ּ\>!������"�^q���4>�K�	�h�ʦ�'%=3X�A��yؖ׻���n#�냑�/+|.��ȗK�����[YY)}�����pݠ��e�����������tSDuM����]��?��00͟@@h�TY����f�cC�P����1�H���KS�@9�䴏��p%��d��b\
�5˹f)qv����0��m_�Iq�ނ�#T��� %Ejy���9ÔpXz:R�!SD(���F��܈��"�,�bdҠB��B��އ��iV�LJc,��t�	���}�+��9,1/��lr�eӋT��G�.=d�wc�g�
H��O��R��J->��)�@��"E7�KOt��satӲ�vt�"9�6�?J#��Qx���E����s�)!��p�!��g�C�2;#�#�Kk!�5:�=G���
���hp��h`�A�j�3�ރ��0@s�P�-`��>Fj9#-��	�N���;sRa�����
Ӱ�.�9w�A�d6ia�1�59:����Ɉ
��ir�����X�������)�8�$��C�����S'�uU@J\����G�5rB�)v�!Ya����\�9na�	���}p�p�h�4�d�{�a��h�ԡj��w�������
�Ch���=����x�8�:�N����<�Q�����z�ڱA�rh$�=�nô�*��l���8�Zv�t��}\.���J��t$� H�(`+X�w�tuE���}I��$b[�L`��2�*��T��
�[Cͣ�{�&]���}�!�~�ϩ���kL��`@�"��D�Gr��ihDs:rY���8%@�Zl�����j:��	z�X,w�v4�T#��.�
p��D�z�-��	�X@�:+.�3s��0'�|��[؇6�+{	�L�t������Z�qָ*���4�{��3�W�I�5��˩�����.{p5�x���26�g7�	c���:�@3�BP����:ׁU���-�͗H6�ʦ���*ț�[����ӫ��i��, ��輴�ymr�}�޴L%͠�V��o�z&$Gb�	�Po8 P�Ĝ��n�`� �?�@��S+%г�b(\�
�qYL��;�F)	R�af�9�
��464�b����E���R�Ā�n#C��|�`,9�r��,�i������i/�dĊ
���#�0;Ȇ��!��d�����:�}�ir"�oj�
��(�CV���_�����!�
���H��Ĩ)�=5�E�R��q�7�"aB���P�2��O7a{�b�"᥇�@��L�ѹ� i3�ޒ�C�Ҕ�h^�Č�AӶ\ީO�4����ra8[�S��:͐9ꏐ]����cz#;�4j�������z�0�\�p����e\�L��s��8�������,��JD*�D�?����S+Ww��_��B���9��o3�abN
��&����e%�� 3����C��h�p�\��q���\c�3
��$�1Ķ�$�Ef�&��A�I�~�lkɅ!�h𱝟��cm2J���M�H�`x)��0�b�6�[g��ۊ[K�QW�%QUֳ
c`b�����fO��L� ��d�LsX&Ht@�A�*%����yH�@�8^�������A-�6�*z��b�P�関�yWT 1"|���b�0��^bA��Xj�=ѝ��2�Kx�1��@<����7�ra�c�d2��eTT1�*��� �#T����
�R�0���S��o�h��C��j@�f6��K��F�`1�!4��-�JvB���_�I�3C*=i�3h�v�˱5}F��L�o%0��t�c��Q.�9]�^>CfO�����U�������{�ݥL��$Z)�P�JjJ:KW��=K/.�o�;��˓�$���lRީ��l~����_� ]��sj���j0y����֋�n������M�Q�=p���I˱K���-0�4/Y�jN��T��f-+�]w�;���3�l.���<:XV���Z�d^������t*�iH�so����
]hhj�62E36�����o:�p{*z��՚0?�z�t@�E��MG�G
j�Ș􃮵=p�(�3��y��68g�Yz��:�ֺ��Y���7X��y
3����0�0:&�|ş�typp��0tR;`���诮d�!�`IK1�|�����6�q�[0��7
����C*.�qM|\�
xuQ�sZ�#z��*-���K^��:�a�[�;!��{y��!������vw\`��p�0㎱�+��dCS�P>N�᧞��ь2i�*�vF}��T��� ^]�]o�-�F��Rm+�ѳ}�����c��zV���[�=��@�b�3n�J��%_��^�X���
GW�e�}ܶ�kR�z��$����a�iP�s���E�ڙ�V�����XX��a>��[. �O�|�Ր�l���:�ew5��Z#�,5ۚp<�Ɋ�wq
?�8ʪ�E�q���(��{���3��
�`��$�(�����\���Ĉb
���i��f���j����JdLJ1d��&��
 ���O��!�R� ��eP�3��+=���j˾0������E=�ž�i���^�T{*@o�:pbK%���Vk��A}x�
;ĨF������3(KߤbՊiyK��[����s�n,;�3�q�=ɍ"�R�/��:8'ح�i��P�߹’%��H�S-�H�hnJ����e�.u�+/G�/��+*̺�Ms,�d��X<����2�Z�~w��S��M�ۇew�Logj�>n��9F�Y�J�G�10:vr�1
d]������d�!�l��c�Ala+�V�RT����x���9R�,6Qb=Z�V+�Ŋإ?S��T�e4��9[\���: ���ź�(ql�#L��c�5{���0cɬDU
8Z�����2�ܸT�9�:Lbl^�ъ��"
��7
��E�xn�K<�9��P�'�,ܞ�$�),�}���2wb��l xp
T��3qL�u��2�\#���][�۶~���(ut���yIR`����kkk�(���:m~}�H�J��b�%�5�g��o��8���H�A�pXD\lM/w�>C���z�tggi�>W�Y�eXף��."��}, Y��9�~��"΁�&׋\��!i:���2l�1�ْ�������(��p�R!t�wڕ�EV��h��n�9D�ӿ��ib�3�A���6#���2�ʲ��{y¤J鉰t�+�\]~��w��oLR���)��H�7Ef�����0
��kv�=i��OM෺��[�s�(��
��_bA�t��	f���]�����n&�
��4:ȈJ����'j"yD*1����2��6�X1,���惡q��цa�a��xDJ3����h���/V�_��k;x���U>9t�������l�X�#���ӗ��3g�q<�2��l��rQ�amБ�		S����s��t�P��}%�w��Y����u��|8�\�J��v��e}M7Ԛ*��O�a�"��h��+��.='3Z�bWb��s9��4v�Nߖ}�ݍ^�@;�בu=�p��=���.W�"�:v;�5����O��Ћ�f˒�7�+S�Xl��>1�gIN�hX2��
��P�J"d}�A�w���|e�NP��������}�1�c�� ,���_�HS��h�?�?�Y�=?�A�
�k���v� ��v$��!�{�a�aI��;Ml"ZS��|C�9������J�9}K���q��pj��IQ���p<i�zĒ܎���v�Xh����O�Y��V��q��C��F�o�2u�1�!8%��$C?F�JG� �,�]b�]�=�����7
t3	��H�N?�D�P�&��-�c��&�T�p�ӧ���ŧL�d�Y�,�R�'�V�)?�;���H��"=��ϑ?v�?�ȟ�kci��0�uz
}0ʜ�A��(�1��,��Ft%�)����%ci{���Z�
�/�T�)"�h�cP��l�2���PgE�S5g��=_�ǡ���gY��^�[�:�"������k��5%FVAu� ʢ�jw��4W00J�T+��n*�0�8Bbh�0s�����.�!�3�ƳM�E=�b�G4pL_�C��cZ�=�RS��'�FL�����ѕz�k8#KY*�Z��}r��$�<?%�P�q��ܧ=r.��C=r���3ס�3�"�ybO�{!Z)ӅD

ر*���]8��P��o���%�d��%�
�Z<3��ȪxX�j6��a�ϖ��5(��9dA�+"<L�͂��Y�"2\��'\��UT�^8�e��1��q���Pj���i�s�o����ְ�2O��f~
Ǝaі���8Mam�!,Cl�y��>�g�o$�w���`4<3!�ny (uIx/~X#�U�_B�,B9�q��XzK�(`*��,�q1�%o�ц5 ��g]�ـ�o��W��D:���
�9���A&P���rU�#�a!:��ٞ~�;臱-��`�׊�)�V*G�}�w.B���u�%w���3�ϱ>��u[ZS��)K��0�N+���Knyƽ�K2�B�y�C��5��!t��l�ӻ��g��Wm)ޗ��K�,zEa��u}X�YmՓ�)wήì2p���?����� �䆋���G��u^2�0�k�c\�!��B̪0J���pHS</J��G�FY�آ�]���?�H`���������6gN
�N�훪~2�JD��?�fw�{�8�.����k�	S�'`֬}\�A�7�,){	�#�@�RmM�1��~���ĩ�:����V'}l�|�;�os�ku�o��O���+���Dd?�a����@�%�����u�5�ӟ�����4����O�����F�؟+
����/_V���2`�����NJV�P��E9C2+��޻w��8U[
���S�)aV���V�3E�8gGq��m/
�&�<%�-�K���QC;
Mc���N'`�ۇ��E����	��z+�:v��n��7d��]�܍N8��¤1׌���^��
��u s7@����Z�,����K�gI��
¦��h���Gfh����߬k�n�Z
���+���V�h�|:���
�Mb*��p�mqUɤ<s�}P]��"�X6019���_\9$�5���?C`�)��jKϥ��v�E���� ��Q�SjYE��r}��i}ziނ�xz�|{L(�h���.׌���K�v.1?za�X-��A�>�n�ڍ��~҃��A����W?wc���)+�&h��+�9NlƁu,z=X�E�Li��Q�Դ��f'�T��9\.W��\Z��[���G��ʢ�O.xo����6Sf�=���� �[Zu���D�\z�4�:�o8ꌤrl�a[J�Ԥ��R�9��_;i���5�r��%l��{�\x|y|4k�R�sC�!�����(-�l1C��wp�1d�5��wtxu��4WT9x�o�`_3�'����h��^Ǐ�e��0HQ�ӿ~�ׅ�y�Z�A!p~��]�Wd53\�<ï'Hi�TS4R�a�Ty�j�L�N��
3{&�N�;Inӯ�Nc57����ܕ�y�tl�n�L9��鄗��ܼ4H�l�9�i�wEP����n9ވR�G��Y����R��|T.���u�u�}sRL	j]X�N���kJ�콱=�:m�(:��
ۑ��u8�p ��z�zU�3ŝ�(�l�:7]�"�����Y����]�Oߞ��`�G���U5i�I���aW��b1�s�!:;�J{��j`JCշ5:��u�Af�g˥�m���K}���h�l�4�s�<��N�s�Qؙ��_���]�n�6}�W��Z[��q�k��� v�M���F�����2$g8C���@�"�8#���P:0�'��~��cm�OV��A���8�(6/�x&}z3���]V�<�7��Y�dE�`��+�rv[�����=���*��涞~=o]�	��*��
��緶 �����-~n�ť���䍥���[w��tܵoVjd����V%�V�����Z���$/]{���~��B��zL�o��!~͜Z��=���:��
ҩ���]��ZG�����-w+5�㷱ƳJ-���Rޞ����}Te���n&�z�U┠���*=ҵ�~`���Lh�.����G���z�Wi��|�b���>��]�ބ����m�w�xX���<��"0 �4�:ٔ	{�IB����ۧ�p�w"������c���=�]�d,�‚J"�w��9��T��e���ABҐD
�d�0�҅A1����D)>ڐ�	1A=����c������;��wo�a�p<�,�q�n���Q�Kh��p��n��f6��˹pi�UOA���fZ
(u<Ƣ]jW���$l�Ԁ�Ъ�Y?�����]��A���m�:z��zl����1�A��m�*xn��g��#9'7\|R]�'���p��~��+�Eו��#L��pYl����R@wķq�
}�=�v!pf�ǩ�
x�� <D}���e�\q7�V
�cD���O�͸z�5��e�$��ú��_	!{�omw�D1�
E{����ys�j[j8�zv#��RGh��g�����j�[�E�N����` =�v��n\+-�dj����tC)=$	�T6
����O��ۂ�Ď7뷬���ya�.��kw��ZN����h�M�0Q�~_��dS�J5�~�q���e�{���/�7�:�0�uT��ɨ�"J�A
����0
oHL���DK����Q3C��Cu�%�(�c�:��:r3�x��=�@��*�z�B���ͅ���ᣋ�m�y�=��9SS+���2�g:O�\#8����z��n�be@]�.{M�]��՟[��M�����K���k���Mn�J��S��pkt�hhlp�lܽ�E}�SB��9�)&���~b��p��|Zokb�\)u7B=MS3y�W'��	,$P�UZ=��aPY�G��/]��O���� ?�x'��8��Z>�ZX껅ʗj�zD�&�-@��C��7���Q��_
75;<&=�����Z��;��
��S�ڴ��<���<����_3y�G�fϿ��	�3��ܸ[����c���(�l�"�K�X�3.�o�ԍz�`s`��90��1cd��?ԑ(�"b��f�n������+^��FU���QʀL�r���;��oX�m�[{|1���C���&@J_V'�u�9��\�V�K}��"9c�W!�$�o�@)1)�tB�̈́�!]Ue%;ȔXռ�uB��͛�#~�aC�j�ȝ{[���Z	N��	s�f�K�w�UB�
>s���f	�%�>��D�ތX���;}�	61̏i�2���D���(񆾏z:'�`�[��;RX!U�!���DxlG��C��
g�NĦ26�$�*�1�:�2�����*��JE��	��2D�PQ�&.
)���d*��)�ZQq���_���]Kk�0�+Y�`���l���m�A�;�P�,�
郴e��ϲ-G�#����R'ql9�l���+�̰�܄K��ZMy2q��ϐ��\;��o��38�,A#dy?�IJ`s���V�ָ\ѷ���cs`��LCx�H�Dg�Æ��%�0��B�P���(��!�5�^�`��?=�=p�B�fy|"؃���բ�l�⸷�4�k
U
(N�w�)T��K�y��n�K�����+Y8�o9�8���SE�Kx�)�m2M����k �H���_��@z���ٌJ&���0W��K��n�ϔ9���4 �&��ݩ��C���F"�Z���~
$�䃄����|�#$)����_Ab��__M����x^�%p����o�䖃��:���$���(��H�k(�c�<�O�w�u��23lZ�8*���s�n��������4�eY��"�J��������<��<��Mwj�h�8�����$p�-����ā��t�ŃxG�j�,��U{ا�k�
(�,�����	HR;���ef��u�r�.TL*�	��	�����{p5�}��O�ٴF�f�0S�by���<�DZLy���
T�o���F��z���S�񪠅,l��hM�'*!����y2�4e�4z���H8���Dn�)��`6ۯf�_P��]o�@콿"B�6��{���֢i�D����a(���%�RM��}w��#��A����w�8���F�k�G@��&
}����B�O�M�ׯ�e�*N~5Dd�s;ބdW�vp]�j7't�<����/%!h������]���g,��)�)b���W��c�������W�����ɽ�zQ��]��d%.�y�GF���1�Gl@���E��_�I�D�J�Z��";�����L���m��u�	�bq�L��O��_X��^���ᛟ�`Y/`^���X�}�0�7p"҇����/��y��.� ��N���7�P���@��n�>����ɍ��+�z݋�)�:=��&
��.t�$Jv��!J�P��j�4]��X��:pVPS�[�8�/k�	^H��s����“,�@>�C �U���|fY��zS���a���y���j�a0�$�P16��1�cX܉��:��W��6�Zx�R�Iz�{��[O���6wI���ÍH3ˁ�K��y죍�׸�h�Ms��.śV]�(u�d�{�}:����w����6���c���GA�)]DC�.B��o?.����u�Ϯz�d4_����	D��1�ɸ�(�r�A"8��&����[p��0�n6��p����S9s�V�%�=*/t
s�V2p�8
�9��X����&�,Pـ04M�H�5�	ճ��Q�`QR��^Ҽ�5;�PD���,��:���P��h+�S���)�`�hk�T�r��]ã���Jn�u$��p���ԑ[k�>�0�Mu�U�n@�<Mt?�hibO�3j��-@�n{M���iXm�����#�ML��7�`ع6�a�4/
�GI�L_C2a���ў�O�u��%-d2��WáS��B�_��Uv�-K�����;�b>�.��������/�YAKR+*Q��몾�jvxn��[m�K���]�
��&�<̺��7..�K����3�˦��^���)*�a��J%;g�6���
8k�����hw�]�p�c��9woJө�崄���HV�H�ZkoRYHT˥i�j���;B.#�s���ݒi|O�	�6-�R�����]�N�0����cBH<
�&(�`�ۅ�'?n�Ď�Sk��q���
*�U�k��P(焜O|Ȱo�ǹ!�W�OD�����0ڥY��P�q7Y�ΣT��7�:��`�����~��2WǑ�c�
�7n�{��RG��jzs390�2�j���,@��Ǘ�r|�*��Hw�ξh��JqY�
8-\����1!��Vi��bi����O�����k؛�!� ��F������df�d�N�oI^/K
J�F��zija[�g��m�8
��'"��쁱<h�Ήj��tJYY���Y��7��Ѫ��1�|�_ݫM3���p-9Ϳ��So7ߖ-s[i���vծK��h~��s���mJ����%�����%�K�";G��fZ+�#����Ѩ�~��T��)��ˎ;`�JK����S���?V���ĒZ�vϡDT�h�H��}E_�Ip,��%qK4A�McZģ(���=<Gl�ˬHx�U&U��I,|6Ͱ�m�}	���S�׹���`T���5=���(3Zr%��:Nֳ�����ZmؘI��~��"�n��u5�ϱ��x���5��T���rg4M^%)�c�j����5���"���$<�������NB�ID;�&<(�Zp� N�700»�	}�
�*R�A��u8\�c14���(K�	����e2:
�f� �k��F�dV��2�@��`�1A
t��Ǿ���rĽ%h�S�+�{��b�FP��BW�v�����Z	>ίX�r��A�y((���S
���o<*�U��bk'.;\�����bH����]Kk1�/9��-봧%%`zH�Г�c
��
������HiF;�j�5��zόF��OS�[�[�����.7�%��Բ�hK-��%�6�<i�m�=�-��۩:GN|g�9�	j�D��cT��7�
A��_'����Jϡ���odg5�ȉ��
H�pgW%�P�џ�)G�n�3{��&	�{���'B+G�}*h�Ao�DžA��;��C��	��7��+X�8����Z�:��3
\�X�7�f��0p_�<m�I4A�8��� �.�}P	E|3���oq�>G�Ϟd^�5C�[��֌�<A�JW&��+=�����[�-���p&����dcB�U� V�r���͟m��
���q
���q�-�t\�b��c�GǼ�g��h�I�!n��>t"X�����ɇ�_1�O��nh���1K�_�,��ri���,E�ȿ���_(D�����i��R�M�̩:S��3�l�8?�g�݉��X�<��E��]	pS?�0˂S�K���ve��C�ܚ���)��FR��	CXF�}���z�ƀS)ibʁ6=��5��e��>a_6�<�Oz��Z�e�X(��C�4u}&�����;'��`�c��֊u�%�s�z7�R"� ���wKN��`Wr�����6f���,YB"�� U�P5�Q1#�1ی�3��`�h$�l��IԄ+
�&���<I<��C����"Ӳ�!�R�s*���l�x|L-�Fr�-�P`(;���|���	�3,��fM�Q7~^��m>��P��vϹq�0�3<�T,�l�p[��0�j��_i����K�\"Yx��(���!�������ݟ�
Ǵ�JD}@j]����]�N�0����*:`�����	UbC=P*�;�OR�M�8m��&N��N��ekZ�ʁ�ݹ��a�`z�6�D�~Y�ڞ�H:�uR�{d3�5|Z�L��HPb�yMh�o�����[�W2���f,���Iu􉙑���Mu=�U��d��h�e�lSЧ�����U���iN���dM�S��:\�{�l��:E��>'�_*9�w�E��� uL��8Ý�[mo���y�C�)�b��㛈�F���"�YH�l��[!����r��a��ʍ-C�G�
%U���x0���8_��P�SN�O���eJ
�'ɩK�T�Qj�NRJ���|���hBU�Q����Z��=n����a�6�n�2���ջG��\��{�B��itN�I�q!�4�
&]&��#.�>�9G�G�7C�Rx�x�������]Ko�0�+]wX3ԁӤ[�a=�8�KQ��bƲ�cO�O"� ���x�l�%�H=)ٔH~8[bVW�
��%r<�w<�W���@b�"�(m���HM�L�s�ίoɉ�U(����q�Lkh�;���Jb\��J�*��>r�P�^�����)���K��3��
f����B��+5*'ϝ���嚏�~
��]V��w���fa�qͪ���U�,����M�ZG����j(Nxө�J�ӏ�Ź�k��J�7���B��X*u����c� �r�A��G�P�럤ྵu�b���Nrٕ�g��lRe[��X��Kcm)�u��	���=�c�IC�1W�Sq�W�Tc���+���WQ����|��1��"�]��%�0'!��!�a8Yd+j����`Hhϊ��g�0��O
�w�&>q�ffnLᙁ9zYL��&�V�r���9c�3.e�{#c�RDj�q迬�E����9�����52C�o���_�f&;C��I��YdvN���l�A"s�1�-#2{�.O&B�p�^F��EJ.ܢ3�ɢ�d�
,�F�}�q�|��5X�G�o׬d�9~U��Ԁ>a�	e��&z�|���,)4/G�c_y����e���S|�vP�lE�cdn6�/no%х1M���a5+2<l@x��s7�a,rւX8��g_�V>	UE�
�D�ёÚ���s�@E�+�
��is��$عlh6�f,��Sn�h�@v��"t��q�der#v�Ͷz4�6$[��sZ$�/*&�:?(�If�=����Z)gL�NH�W<�~���U�ɋ�cg1�z���Hm"�Q�W�}���F��2�>^��n
���Nvj���9~n��B��i{'�E��^Uk;~u_�"�@J�P�7�HK��,�M�U���'C$M��U�!mr 筍˝3%!	����IHqf�KI+/��C�����]��>�N�+����X��:�>#�g$}Jҧ$}F�g$������$�II�_���~A�/I�%I����%�a�2�9�ӓ�C%A+����w=ƈ����W7x�y��!>��7��zJ���p����y�ƻ�9��![�2T�s�Y�
$��Y���W+�z��0q�ġ,��-�>A
XEE4� �w��fO��4�����l�\��(�h�W�I��H��iwxL��̐dO���(!{>H��Mha����^*M}hs�"����ƘI���vWܑ��+}�Z�6[К� Ty*�EQ��kL�B�
�b�z����{��d0���v��@��0e�ԣ��f�ޖt-���S�\�T~��0hv=��D�u�%Ho�gD�Е�	�Y���ez���7mëe��,.2m�ͺ�����hg�
��F�&��S�����ͦR(��g��4ܕkG�C��Z�F��X�;�ӦHzd��*�������C�f�
t���1���|�ȉG���(
�����cV]���0&����wbJ�����2�i��gB�oB��Ҝ:S��#u����o��ᡣ��2�S6�
�s�SFQ��"�O�ڣ��U����u��f�VK�^a����������]�� �OKf2o���$.Ag���B�Qh�q!���彼qǤ�OuBT�x"���e��C
��b���G�Sgu�4�HYU���߯�s�IY��o�h���ɷT��p��NAbgu�Lw�:v�
l�3�m]���F��6�YJ	��v3d����	ˡ���U�G�m�=]Dc���d����|�Nq��}��H6(S�T��X�R�<c���<w-S.�i����q�	�P��f��]&�(��*E�{Kgѵ��"%�I6
y;�k����`6K�Z8:KD���ÌF8��E��-D���q�@�2�$\�<&�_��*#\���8��S�P*/,�>�
��f�ȁ�8�mZ�lI)��]ms7���_��6%�V���$�DU�lo\�8��N�֕��ő�2Ej9�m��~�n�
403����[��
��ht?�9t�����^̍(2��S�G���kâ�c�٠��r��𞷖�ŭ�/-��0zRL������j�_������ң,`�
���b�Cx�J��V7�O�6d=ֺ����e6^�M�DG�����DŽaļ��c&Lf:��az	D����Y�	j�c˝�MlE�n�51�M�"�����z#q\�mSwHX�g�{MA00\L��تR�P=<*)��h�.Dz)޳ߑ���1SRS��O"6�7�<�DJh]G_�hz����~��Y��U���r�c�����{���i�7g��[�YX� �\�,�:�2���r�Q�ICe]��S���*����^�l�M��v�F�����X
�⍲(�F��d�.�O>�j.B)@��[���1s�i

H�? �z�~��cE�U�z#��`���\��bF�M���Ӵ��[^b��IFB����`����}c�Øj���&s���/閪(��fk�gxv@��.�x��S�m�v@v$�S�7����z�>�_&���,��G�G��0���rn�v
Z��^"zr��3��lJ�J�dž���*��ۺ��lhr�?��l
�wG���X��x��E7��}y��M��Û�,��❢B��y�>�j��LL˄�;�G�����T-FJ�;Fg��ؠ Li���-%���U�p���b�������L�Μ�����])mNVM�Ҹ2�����?����+%0��Un@�p�g֐�龫j��̟a1V�M\p��\h;��2�IU���v6�:	�
E�2r<AF�L�ix��4d�1���>jx�n
xY	�~��5���\\�_��e�-��7!��&#\��V�����߮~ܸM�R�����à����EX��i��K���R��5t�jt}
U�Su	��Q><׀�X���9�nmo~y^o.���uN�^�{�k�g%����cO1�X��ض�����ȶ��g�~�Lh����;e��}�$U�9�a�s\.{K�4�p�x��|t�*:A�T�+ۄe:�y�(�F	p`��硔�x�bF'�qj]�c�ML�:^ʆ��y���0���6�u0��S���}%�������r8Jme��e����S33_�ϴyX)�ȸ��Vzz6Vxk���N�q��0y��C���۰�ϼ*Y[��xdr	#�7�
��,"Ytp�mTp�Y�^v�@B�i�KЂ�u�b`b&�V�P� �%�W�np�{�]�[Д[���x�z�ʌH���5�ĕ9��ANPa�,s��q�x;��K�
��puYN��!R�lA��鈇�6,��:�hM��=}����*n��]Q���
�,Q�����`<(�HB3�k�3������ 9,�=Q|v@����`��_\C��\�q���U9�YL���Z��(�YY-��Ij�A>�����y���*��\Ym�QP���P�B���f���h��mq_���H�A҅��TInE����@%�
���[�/�>���)#����?��MY�I�[�x�/J�4��Ĥ�N�?����_ٟŶ����.qRŘ{R�/�n�\6l$C��'��r17�DR�l�L��D�Iyk�����ջw��:��f�ڜ�A؉�MB�d۹uXl{�3�{ã��w����훛��cB|�#���<�T��"j��e�Ui�I�~WCD�4�t�l�Z�!=,�Y��d�2����%��O�g�Y/�4{@3mc�n��K�B�6�=�AR��x��n���
!�� ��N���k���$޶��'�s�0DoՋ"$|=���E�~]ΰ.#V�M����$氾��^��
��Nu����v��79�﫡�����dL��;��?���*��
�~��:�qц�]���I;��uUb�ɹ2���#�5�4f��c�\ŕ�N��Q�h���c㫰��Ne�֔���_�
Gt�u6���|G*q�Z�EO�5�1�&���J�Ţb��ϟ��o;���梀��d�< �O����Q��fpB�	M5ig5Q
2¸�IU�ʏF΂_��hp�&����h0oI�˹�ͤZ04o�y���L�N��J�z���	����nA�t�֢3��4	/��+pz�8
N���D[��9Ll�H��J�m��z�tW;֧�,Y6s��� �]Z)�{"Z2DFك��ܸ7��q1�>���qǍճ�@���_��Be�Hu��V���/F$��4u�+�E�x�����`���q��U�:��,��|�ވ��G��r������2QC��tZ��\�'�#Vߪ7o�<�g����b;3�~���\��J��]��f��a��u�H>��A,ӎ�Jh��G���V�K�s��ɟ�%�zЃ�P��,����}�!�����߶3Y���#�P��.mT�
(Q���}��i�)�ui�Ќ����տ���ɻw`(��.7СZI��T$R`+�`�-��j	5��#~5y�Y"El}k\�}
?�5�_i2��UC�F�2�ˮ�*�m�,�ڟ&���3�dZ�`u߄V�_���k��D�U\�XK�В�VP�Ű�a4�z���!�N�.vh��'#���Ո�`)���.��F@E�zH�@���j���)6��`P���'#�,x������ٰ����G��&�YS�Q���2���0cji�-�N�5�	U�
I����ͱ:Ҧ���T����(U[.��s�ڻ��+G�N���{/�3��b�1h�߿�FЎ�K��C����f,?�f���{D&6zwt}��=�p���<qu�G�K����}����x(�`^�n$�f!M�h"���r:�ƃ
�E�ѻPY��t~nc�ς���	2�C��ՕM�u�.�Vs�A�U�����0w�0������9��eYJ��%���.���ۤ����T������=zF� ��tI�A}N��Q�-��������i+6mj:��ry9Wr6��ٍ �
��g��i���7����YO��!IH:��t;�2��?C�!�~�X,�P��e��"���ɐl���_i��s �Ԇa�޺0t�0���uvI�ǭ���G��L�[X����(,z��"�ҡi�a��5]��h5��]�i%"���E�:��R�H@`�Yl�3ݻY��r툨�_�|,�����b�zw�tVy�6�\�:���qi�>�Vm0�Z<��6����<#�TD/��$S�86h��u/�춖��_7���ئ�Ѹ��6d�T �u�yk�'���1���b�Fs�3�Q ���&����
���o�d٧&]‰���K���,���8[\����+ �A�������O����D�#�
a�O	D �Z��<ou&�Rm���=�F"��^�l�.�r��ƽm�v~5�dVч	X8M>��.��ޞ����'r��jm���+&n�������e�7�ؓw)2�-,B5}���4�9�|iP�.����G���֒c��<�~x�����j�U��?�����H�0�
/���0V/6�������e4����\L��F�9�#�_l�pB�Z����,cNaL9Q*��U*���d��°9_�Lp�]��P�v�{���
��W��g"��U �Л�b��ub`��m�SÌ�6�l�7�}PF/nnb��	��4Sk�6�{��h�W��p�01Q���j�D�7`P�Go�����9��T���-~��9�v�!0���p�|�6���TG9/��%��qq�˅9ӝ�*
����#���o��H���QA�����o]��n���F�u�z��H4��r��\����7zԻ��;��T���*��bȜ����4����L����!|��f(�������̉x�̋+�13v�>
7�o�y��C��i�g�<m�!#
��{�b�Z�'#4ז���)S��
�=Z�W���X*G�e�!�,"@EbQ�J>�E
n�8�)R�R�V�9�=��vYȋM[��;�n�0D�
����t��K�VH}���7�]���hE��G	v�Feg2V0�r��~��X]m
.��a���;�z�w�`�����(>ƔS�h��"ʀ_=�����.H�n,��\5!��Ps���+��6؋̒ka�i�,2�Q�?�U@~��D�k���I[�zS5Z��&7�a]�c?�#��ϭ���4 ��|B$o��3k�ݙG���i���)9Ȧ�!��PQ
��t�E��̳�>��F�(h�@�x�urW��˫�}��/�C�{�k���z������yj�B_K����5Z\+*����9����I䁫�1�*(v����J2�δ���0�KA���V��ɨ-�M?ˊ���pfΦ׋�9�܅�y��*β���S���j��}�>�O�I��Ɨ1�$b�F�;�D�+����/I�Z��B	���u���j>>��3�zu��Oa��$|���)�P�9�Â֫�DV�Ƞ���*��Rݞ�+�{;���H�Ѱ���
�X;.��i����_����;��d%���MY�:S&e���H:Ԥ Z�C��S����t��D�0\{�B{�o�h|�ړ�^^†�mh��rt=�4������]��
����M#2�5�b8�W�$w�)���
�e
e"O|i�����y�q���1ܡ�rG�Q��h���[js=x��nr=C|?�踮���d��eY��w�w>�۝oL`,����ɹ�G��3J��F���.4�/H�:���#���ې���\/���KH��i3�	���񴁒����	��>�} ���L�޴�˛�-`9�?5^�t�$�4����!��2�z��D#<E�'�#��~v�Ÿ-g䶝��0kY�n�'\�7s���k������̝�/��@��fZ̿��b�n?�e�C�7oa���`�L,�f�D(�=��"ć����Y:Գ��U]��l�D?36T�Y���c$�I�ա.ӑD>�/+):?�;?3aV
�,��*�4Vu	�d�{-� �ya�����eٹ�4��D�]RG��$O���01�C�:�,�(��"�]��e;�o���]pb
��J��/�!�<���v��1C��Rܑ�a���`��k�K8�:@��R�E�T�ESMDAkW�a�0��v5`�i�%�0�r7�-
%���nEn������C����-.$�r1��F�ݚ��`�+��U;�`z|�Jl�Ǜ�o�Fy�ӭX��˭-;p��<&���Ňr�t�I���S���!c�r�Z�H��YϽ}��^$�P)A�g.�6D4_,�g1}�q�Ȭ~?���QJCd��M7��OL�u_�3,��t�pj�$#�Vp:��[ �*+�:�
�tX�0�\Cb7f�5ұ���J\�>$�MB�i	B��@�q��S	9غ!"���(,�yiUAJ�(E L��/ʏ�W���d��L���7�G�Z��<��@��tæ�M�ěQg}-D�6���gԲM7x�6!r8��A��0y��	�
}J~ȼ��ܼ
*�j@DTW�;��m� ���4�&%�5����5��Xn<��%e���Y��  �x�8�ل���u�	�C �Da����I�!V5���}�T% �w�y�_^>yQ�x�{���(ܕq�"X4ߕ_�˙aӯFo���@��m��򺆟
�_:�1Q�p�`X2׬
_�EΓ�Z�*pt���_^�z��/3��Z�:Nm��z���鳧�N��j=�.�'��N]�����b�i1
�i�����ҥ���k�k�d�<P�u�S�[Jԃ�z��,'���
�|��(v*ބlf�,���yE	��g��B[(x����{d*��{kL� `V��W��S�o�y�u�ξ�6;uJS������P`$;&gk#�EQ�|�d�7���q����E�f�[@��7ݿ��(���`v%-�6��0|�n�45\b�'�9SI�9¹'��~���x9Y�
=���}M;1�Z��͚}�RUE��;�l��Q��iy�=���l��Z���:G�:��me9ȷ���6��&�	D����ݹ��I�.؛���5�nٓ�����G���B��%V�\��͇!A?�d�5�,�_-̺r~���9&ۊ2q���i���_%T�(�]<x\��F��+�0O��]n�e=����[+|{�J��^�n���/�(�}x4.�����b�SvX���փ�4G1�+?2u�~Ã��E�Kk{*�|����5�l�?�hU��T��k՗7ؽ�z�*��EԳ���P�1׊�k{֚��r�~�|���az�E�CM�	%�F~,<S�W�'b]��꿪���6���
��f��sΨ���>׆E�(��-V���H
W���+�c��$�dm\�M>���E��t�du��:07��R)��(��0mXAr=\K������y���8�<��W��"�1��`f�}03=���vQ,k��u���veɏ�9-���	�b���Ѭ�jT6���#ƆT�a/�{T��ED�u�͛�3��a(?�!��KX'5���F��dsL��5�Iپ+^R\���31�`3ga2D�:Pv�����h���B���k=b+���3_ʊ_%��XF&��<�!�9j��.[��4�*��T���)2�)�*�V�*0��o��\]%���]#�hBe}| )?}d��8�'D��S���ZW��	L�ֆ^bx���x]΍��%
�e['��1W�-@|��R��t'�pl�,��.�XdMa��A4v�@42��ђho\
�gK�"ag��|o��|���c��4�M�i�t?���y�¤,`��Ǎ�AX��J-������L�lfƯ _z6�ư�p8Ŭ
�r�\
���ûrY���Y�3��?-���6t��\o��Y�F�2���]|1i@�#��O��C�qPF��?�{�8u�0��*�Y����}�:���_�ӄ�<~I{����k��f�%ȑy�T�.yp~�\�m������n��^�C��qZ�1旻@|�,�J$:�j�y�Ul��z�Q�T=��t�w���
(GSϭ��O���{{�����PL�E�y�qx���F	,���Ғ͠~�E��[0U�	�+��wwu�fP�dZ�ޛK���K��ɇ�mۨ��8I�Kٴ�6�1��e<j ��zw���2ʮ���F�"�W��a|A�Q���~�F�`x>C��g�b��w���-�	TAp"J�=}��N�]�o��C���B2A]���జa%��I.�hGe�r>j��
�X���?	<��k�7��ë��D��9�!Kg���@����/�q���րG���|���R��v4qO��kL�x4�X���6�|�W��r��n�����C��Đ���?�0���~��ɽ�=�0�h?L�e���X����]�s�H��W��^�wwz�={1���Dc$��e�W ��1�
R��}�%!�d�gg���i�RUVV��R��d��x��3:K�)�����eU���r�Ws)���ߊ��/�^wN�Й�-"��C�MNl=Jܵ^C�̱�!O2��`�
�9��\�~��!�c�����v���?ã�A=^e!~_�\��9c�y"G}��u��T\(7x�.z���R��/��(,�����|XK?����g��F�o�y;�8�]�i6gW������ͨ�M²�!/i���y�ـWw����p�<f�b���/��fO}S>�z�ש�����nC;��.��X=b9k���ׇ�v�}�<면��������l%��U�Sk�Kk����C^����A�eQn�dz?��v
�|b�r^�wX�|��皛cONމ`�O�q|������t�fcm���QK��F$�?���6�K�?���C��3�^ԇ&��NY���hB���;�})��;���3�"r�r5��麕�Q Ky4W��/�/��{�U�Ru�H�W������J��>?U���{�_�'�o`��;Z�����_�'�r^�˛4��Ÿ4^��ğNC�S��;(�|��<�L�t����d����7�M����/��v�^�+�B����g�ţ}<�+�#�kϼMy����x���U�/e22��b��ب�(@�y��떧l�(a�S�z�ދ��$*�U#��]5ف�6�U����k�4ii��Z+�.UJ�/��ʹk�q���'�ʯ9UFh~m�D�қB�'=9ͤ�O�S��o.��.�*�y��ׯ��:\O�l��\��}R^%�t�Ϛ�娞���~�
	?�C?ls���\����#�~�}�B���M��A�D�p���ΡU��DF?��[�6�-���!G�p,���
�oۯ~2�
�@�#��i�������S�*��rnU�Xǣ���RS�	�H��9�H��:-��{�qQIP��v�6|�?����^�<R�wG��T_˨�`�R���IG|V�TI�R��o���L�C�=7��K/����x��h��w���(��x�̀�5խ�Չ����9c�8�+�є)�[?��uc�߾���i@����/�8�I>/�LJ���N���J��H���.R���{M�;Ƭ���<�w�o����}�Zci�Vq������P�=_}���'Q}e
�����Pi��>{;{��
�����}��y�������ݏ�_>��iz���\/�&���$��]�w����V����}_>.>]���E��a�]m~J�����wwWm����~���r�A�'ݕ{���M�������M��Ӌ��<s>F���l���l2���V����<�ӯ�;��v�	�����M���h�H�l8v��:�ݭ�o��ݷR���i=�L��>W�fxu���_��}���i����_�[3�c�����=�����ϟ�)~�Qk�sZ^��{���%��U0x���8������nwn�{c^[{�o�wg��3xvd_%˥���,�ؓ�r�����Gwu��M�O��nm���k���G8zm?uvC������@����q@��K��c�L�As[��u�n����پJ.�����_%�s%k3��.38s���͟�>�����	��V���Y��s,����ow���(x��-�޹J�Y?΀K+
����0o��9�Z����-h�ڡ3
��#]�;�'�0��6�=�b<���qY,���
T�\��Y+��k��K$מ�=^w���:{��u�=��b��Ad�$�cƷ��a}��þZ{����~���o�`�b
�X��4�97��U��U]���,��'4jyc(��ZĝY�jaN�g
��x���'���G6h9�9�.p�4���-�s�#�c�G��N�7����:��zi҄�%�"����_�_�����!]tZCv�X�=DĽ�עh���&����=/�mm��x/5�xi쭎��*��EؙN��t����z���I�6�㵁s��x��}��]xM����	x0�m�]Û/�0�x���C?YVt�4-���TWE)�T�#��u=p����������Z��\k[ۢ��K�>�z�P�vq����5mD���V�沼NnV2���|�?M�g��zm�O��À<���>K�,e�*��_��oG�ھ��z�>��o73}Y�k�,��gE��~*��\�2�#
F{�*��B�z��z}M��`M�C���n�{O}r�>[F���9��Oy`Ԃ��i�yiE�?�R�i�ҧ�p���(�ڰ�z8���@���#t�)ySu��{z�$�el�&-�ى�\��`0�
�["#=���������|�v�!u]*v��8U�����F�k�q
����k�z���/8�}���l3mf6M���&��Jm5�����)�����V*��RgP�I��`#�9����4R��qs��r�o0��4�}e�B�[	?�~�9^�WAHZ?�v-�G����:/���<-�M��[i��Z��-�	`V�|�{���mϢ-�`>���1��Č��=�:-���?F*�JweA�n��N7�S���g�Y��C�!n�(�7es�����(5~u<hK��΍h�\�5��u����\�Y�ns��Q�=.mM�������B��*6d3�D'���
���;�/�kC?0�}\"��o!3>q�r=g}����.�0��2��go�qG��*h�S�ᧁϓ�V�\G�#T����1����D� w^�̅/����MB!�\Bڥ��U균=�ǝa|��3�H_�WN+<���h=��Ț&��5�(�!�3�+-�O��C�
��g�y���:�6��8�}Ԇ�a���9��|W>ܡ��7����Q��;�#��)���\{޻Ƹ�}8���eL�o�/�҇y�nM��&2�w�����O�����~�jz��,��c�I�� ��^�m�O�ElA�H��EN0f	q���m���/v���CL#�>�E���+��q'�� ������y~;���V�O�ְ�t�!BC��Ŷ��9eT�P�h�(}<G��9�Џ��o���c�eS?��K��+}�tM+b|�D����F�Oې]>a�c�7G�(c_G�$d|'8c��~��x�\��B���Z�c1g���`}�DNnd�!�7`O��f
���~H]����s�!tu~K��`�CG ۊOկ����?���c�]�Y��n[���°=>�܊�̳A#Gc�Pl����-�	h@���<|��
<�Ry���~A�i�
"�=qM���G�:y����{�1���ܟ���H�g�WZ��]��[��Ʋ.�)��cxk~�W��U�_ʈ�E�v3���/&�Fhb�kz�c;�Q��10��l)��jU�4.
Boğ��|F<�z��(��s*,�*�+Dfƀ/B���\G�5� ��՜��Оy�mS�9,ơW�壗\7��\�q>�-�������!u��-��;zҟ�T6l��������Wӻ:��G�E���l��#�C�����\����&2�
�SI��m`�SI56U�F��b�ˁ��|ؕ!}�^7��y�/�&�L�lZ�)�n8��2A~�Y�S�
�;��a�N�"Н�e?�l�h�`����a�,li�(y5���N)�ҟ�������ӭ)��L�3�7�s���m���,��7�����:Ϝ�P|�n�yǶ���F��$��p2]�Vb����cb>!�`ߊ��w�z/��<l�_�[�e��M�&s`�J=�@��Gܵ����`W�=����$ޤo?t�_7�=#�b���E���>�m��3�2�l���ۚ?�ߐZ�?{_�?�h����j��R���Q�FaKu|XʣR���{!�‡��`�ޞ>|������89��Z�9:5���y���l��_���z�'�绊U����q��4�|
�J���U��&v��?N��7�ߎR��:�Ev�c]^��V�u��:�� ��*u�
�"�6�v`��3Їl�%��6��/�Κ����9涁��:����t�e�ڎ���ͪ�y�vD�gyv,c�$!���|A���3�V}�I}}v�Ӓ8S�g��
�Z�5�!F���m�R�e~�B=$%>�׏>c���l���g�o3�T�
*�qui,Р����UW�ZCy�n���mc��M�h��{�J��Kck-��/e��-�W��#�هؓ��}�Gx�Ng~g|m�m��QΛ/�0���U���y:�i-Fr�k�p
�چ�4tm�V��{��z��h[�%�6S��P��V�[ڭi#�m,��]��ך"���X��id���߁�ؒ���h�wp���2a�\��بܗM\kZ�W��}�.N<�k�,��yy������҇/��8��-r5��x����ΤN�K��j�<m�$��'߰����5�:�)�;0��Zcv�a�z�qCK��/��'�l�����ߋ��\��8��>�d�����	��r_�	��4^Lj�Pd�J���;��$�J>uMCr����b�d����eM��k�]�-��4�+���Aj���lJnQ�8�G�`�Y�b�6z/���|��kӒG[�8��=�.�jW�q+9��4lɗ
�[�;�ߟ��S�T�a@���#�����?����
�w�r֓�^y��EWj������=Im���_�}�w��f̼V�œ��TjZ��
ǭ��'��r]#Gm��c
C��\_Kr|���Y�05�Rͨ��z�qƦ�f��hNh�9s-:���ѻ;�q��n?.	�MS���{(>kՎ��/��^M�-uQ>g����9W�[a`��C�}b�F�
-�'�2м��P�e��/ú��y�O�:��;(��YF��_C��S��u�j�"�'c4�7pꘜ���{_r�ˉ�
��Rk�w�3�4/H}�9�?;�5m�&��D�wZ+f�K��`|�q������Q�}�ħ���:
u�}��;/�H��c�4���wC�_r�KS�0��r�t���O79G���:fs}D��f�P�R["�����xG�-���jm2��f�54�S_����w%�<����o��H���#S��u�H�2�
�SS�OKm[Z�V�V�R�%�3cC�菖�SIMnFa�v���Y���-_I̔Ã͚���v��*���r�3�����[��ޏP�܈޹����%���`ڦ�Y�-���)�c
�Yډ���I.^�����q���ٕZ��\8�r�J݇�P}ב�Z�Q0.�S�sOd�z�H�X�uL�wB�$�C��}��KRQ��bS�ǶLm���3��֊X�=��*��ÞU���
f�DQkܘS�>	�A�����t��˸�1}�u��-���:G(2��=?ԣ��k�&�8t+~�`�O��C������3�A��<j
���2�#K���K
4�|��R��L-D|����"v2V�cM�.�=�x��V��k�9⽩w�{[H��q�ic��/_�R.���-uխ9<�K���~�o�=��-�]S�<ϙ���zm�R�1���^�X�
ט�T���8��a�s�%������������}��
y-��ދ��/���.�d@7�83ǻ�0v��ɽ
v>t��gSͽ=���_���}�&QZa��jN����oި���ԟ��٠_� 9,׏Gf��|�9/�%X�AaGk��L�8�w�sHn��Vcޫ�G)bu�$q�~���=)'�
m�#>"�\�A5W�.ٟ�td톲���#z.����dM䞵���vc�e��E�k�����-�ʞ]Ɣ���>t>�>s��[�s�;}cG�ֱ���-��w��9��2��؄̕8�(����M�q)�C�w��Od�9�cٶ�q�;К��75���z���I.U��{ݷ˞���B�p/4m�.��o��IQ�z��<�nm�E�^X_^–�&
,����=�r�'��m �}���<�J]�d��Ѿ�Z�����������I��>E)�F��\��I�����k��6��w���M�J-lhOCB��:�
<T��kD�tI�������vΩ��(��|��i��u�����Y��"�Z/�ی �W��}<XUG��$������{
AZV%L@�5OXz	}GǙ�bq:�M{�������$ӆ9(RQ�Uq12���T�g�Z��(�uD
j�b6�$�Y��'�q��wƞ�x2N_A�@��3(�<�
k�k�]B�]k&P;�"	$��/�7<_>��6��C6jz���M	��%�)T0M/���f��
_�(K,���o��i�%�Y��|���:�2�4M֔���68Z�.ֻ���x��F�>Kj��|�y�>�e�~y".�G��b�
Q��2��DE8(��A�rH�%ϙ��.�lz�[<O�s���-�	�;:b`�
�7(	�U*������_y|	�K��h,QG^�GF�M\oT��i��Pq������t5���=�jGx��
��K�$�C����(�������oC[+oO�E�WZ����\6��iA.��?��M�F8;k�b�[�ܳ
Sv���=>��ؕ7���"�(�y n+�C@�d>X�x%����UC$�̦���e�'����ҎNwI��r��-��arA^%
5d|&)2a��K1vJ2�e�*��<�Wi�l�CSg���`:�6�}J�j����J,A�	I�┰`���%(�f�Ê�e�b<��ƾ�Ͻ��)+��!g��ɸ9
X�.Zl�R!GRw����5������3�c��a���ů*��p�7�r��#›��i3�I}�����t��$���@�!E=��e6��=#d!l{[�!������8�o+�@LRȆ�W�(R��Gl��lJ���RհaZugo�Z�ݩ�&W���
��N��sx��w5��{���s�����������.�	��W	����%����9�WP?�Y%����O�Vc�}=ۨs�m��d���Y�n@:A��NV�~�
L<r���_�I��6|Yx</��ݙm�"�¬�ЈE!��}�w���sg�kK�	{'�<����p��3U*��=5�
w�J:<偕i<��y�<6�4��N������^��5K��G�"�ӈ�'���
�8)G/W�~l�D0eTqL%��p���8l���t��z&v�\�ֳ�u]��B�K��E�w鑓몱���o����:�+4�,IV�����"��[_�-D15Kt�J?>)Γ��k��=c����hyԧ�x�����_98�2�Oz�gͪ�ς��Z^�?���]MO�@�+�'���x�@�H����6����wgf��Ζ�x�vv�N��
y/�6wn���\�pok}�-TbQ�,.��O���h\=�0��Y�g��3�!K���C!|a�o�m�Y�i�@
��;��i%���!�^f2�8s�Ю�ҖG(}
��l����m:&�'�A���r'b�m��;nj5�6:=�_7�t'Q�h ��*�/���t�����m��ҝ�A�~�����~�	�skz��Ü��u�K�mx���BX�Ce��!g�����g
Ӕ[�n0�ߘ�Hͽ������ylÁek���̨=[��γ(V'�
����hg)�'woj�>�8��@G�dA\��@E�K��2w��ot��~)/%�f+kl�t�,��k�]�Uj-c���CL �3��9n�S�eV��:�9k�V`n��c΋�$p1�m� ���u��^v���6�X�^4�lq��l�m�y\�7p�Lp���ա�6���=�1�i놴lh�{K�c�ND�ر<�lЁջM�����t<�<���3�7��8���U�M�(�%n�����a�/�
�:(z��n2~}~{O�w��h��&�V�~��v���r��s�t
rE����J<�������_�'�Ĕ2��j
x2#_š?��#�P]��	R&�R3�%֪�z4�]��]�e����T<���
�T�\�*9�g�62�0G&Ubq h|��*�G�1A@%(�?a���z��$����	��4[Lq�sD�P����*��xE�J&>)'1/��7a@���̒Jh�8�(�}�U�ʎ����]�
�0�/�/��jp0t�*xؿ�4K�1�;��Kӽ4aOX�����Ty��D�_E�<�EI�#y�`q�\X�|:^B��
���_�a���#`2ԇiV�yYX��r�%a�����sL�N4i�ܱ�LU�a�� k���tVU��5��C�.����zX�Z��/r�~�0�up����F���5Tla���^<�~��5Ǵ����gp�VZ��|�Q8*Ů_\ϸ�����]Ko1�+'*ѿ�(��H�m�4Q���nU�����9���� =��Y?��k�藍�N�8���܂�Y�w���H1��<D�ri����8���P
Lk?[IcDo��8|k�v6��A�	u�0,�qJ�;f%�r\�4ף��O�@�"0>z?� �(-�}�M6e���F3�PI2��n�Q���Z/�r�Г��|)*�{��/S�
�����Om3����حԼ�n�[�+7�uK�k.�+z�&+���2�v��ϗ�g���~��Z�7'�,��6���uX�:���/���A#������մ��,$Q|:&TՋ���b"M���nm�,�1\rE'�����tzqO���h�lEr0�pY�&�ߵi�^�@�U�:�)-B'��VUf��:�DLT����&�)��D	���Q�M����W,��P�m�RbSG*�f���n���N=|nV���n��&��M��h�܉0-L�D�_��$ƏU�D��}���y+���f���o$�T½�s���\zߦ�'�x$y:����kn6:4>�����
�P��`FZ��IAϏ�1n��$�tU�����J?�A�����w���E �1+QV�P��ƩJ��Ѐ�a����s;�vRT%=��jY|қM�y�g�Rۊ���M��.
����ձ��P{>�|\�����`X�)��-
���z��t� c��u!���AJ����	A����KW02��=�WKծ���!n@�)�|�R�6�}�D�/�7��]��0n��=����a҉T��0����9�h����G׸2���.
)���'*S/Ɂ�����/�a��+����º
��n9P)�DQk�����ڛ�xm���]��3��(���ӭT�=q�r�'-j���ڂ,jndN����p��XK��_��
X����"���h���]Ko�8��W�K���6�.F` n�m.�E�=���J��-��"���r8×��e{7'?D��rD��F?������&�k��.je��+�a�b�u��oOVӫ�&�+l˘���@̊�`̌�ݱ��5S
�hTw{5)�������Eש�r��T�ǜt��X�Rӑ%kDk��)��[�){^�庹)�C��.�~�U1��86��0)v��AU&@'}u���WluN�aU�OLU61��ڰ^���ᇂYG�`�S�
���!L-�p���D�{c��B��8�e5#&���
7cԎA�.��'�	�	���2'ps�X�Oղ�?'01�X1���R���&�|ts�	�
e�l�x����ǬZTDrlxз����z�Z��+j�����zY���g��gH��Tg����vzB1���
�l�5Loo��[li����D�DzZO���ÍZ�p���RĻ,T��Tq�{=�k`�F��W��/S3�����xZ(�����Q���>?${?X���z����d�o�i�ZP��-OFZv_�y	��56αG-Y����*Pk���E~s#���b�6�h`b��桄����XԶ7I5�?��e:%s3Z؍o?��������}��h�.���|�HI���W#����.]��U:�}��������ĸh�m�����m�n�d^������Ḧ́⤨�TF�)���uhS�3��T�8�imvdØ\A*�T�5��!�ʽ���]V��4�Ke�e
���!�g��
�ΰSw���7��4��g�s�Vy!{^�u_��J���)���n�J��pq�;�>w.氈�1���(M�!#�n�p�~N^�SԂ���:��Nq��q�"�җ�E�0]uMspQ1��8�����������f�mb"����ZTt1e�#&&$�-RY�#�d�<��M���Ǩ��T��쵗{��2R,_��zE�����|
*)L`<2_�*�B��X�$�sDŽ�C��.���o���??_�f��i�O��|����T^f?L�z2�'��;��Ur��Q֢#�H�z[�!bsqă*����f"
�'lU�%E�j&��ű��5Z���C����F�ͭP�F��$��.����� ��p��9���h�q��+��	�� �қ�п��7"�o��L0�h'���PLA���‰�bBRg;���Ng�<�&��i�Dz[��f�$���{��E��8v����uc��|];��e:�E���
��H��,%�uL�ߤB�����nG��2)�])�1��i ��HB���Z�=j��1�1�xdF;7��dS���C���`K�Po�'6E�ԼS�I�w5��)X.����~�[M�xf�D
���*,%�a�D
`3�G�1p����G�?��<u��"�!6��[[��f	i�G]pdaz�E1��39ew���c'�K$&�S.ho�f�*wa7�L���e�|�vX�*��.P�S1_o�\�%k6�48t�\�X�C��6^�%���4�giS��iR����?���z�"���sDR�|�<n�Nˁ���z��E	��G_��YIv|�0�3~��jHZr�*lc��pZF�fX�Ee�8��$�}/���Q-|o?����(ֈ�{��>��\]{�b�q��uy�(��(t��7�.���&p�3�������wKl�+����;vo�$�~�&,S�/���Q��[���ԭ�U��~gH�@��'g��:,����ד�2�KrK��PS�?���]Yo7~�����:���
Mm�0�8��<�IXi�Z��+�l�)��^��cH���΋-�<��,g�b����E:���^�kU��Iugi�[:�9�%I���W�
b�:��״�3cٌ�;�̳�^��VMg�����.
�Z(ECE/���f�]�mZ�oXĂ�P2|��{:t�:@s5&��X��Y6��.�vT)n}v�Z~��x�nO~[+ݟ��Umf.@l�|��t�����W�PG2탃�\j���LWBa<��pHm+���cP!�����0#}ѸB2�/�N@�`|��}{�i��AR1���M�s��=GZ<.'��a�7����b����?�����^��dS,����Ǖ^�KxǸԥK
��BXFW�^?�d�Κ�Ċ*�i�04�U�I_����<��	b�K�>�*�R+p�0�))?e�%w���;,�v�����6GUm��blH7�KbF�0,�p�s�G�JR:޾�E(�rɬ���E��|� ����"3���J@ѹ�>}�o��`�Q��nR�H.&z���[^Պ�%a��q�P!�Q�W��D����_�(F�Q�p#�D0�Z�e��<[��H��?�d�5�7��#K�����l�˕�Ʈ�e	W��	N�N(��+�C4_Q����p�r}��jz���6n��=��UC�t�o�Ȧ��O�.�o�]�l6��~&����E8W�`�@�+6�}�c57���0�j��r2[��U 0��X��jj���Fr+g:^S�bk�+��^1�w�\#����8:ID�c���e�(��D�8eWm��(�6�nqʯ[�s�S�W+���J��
ZL��v�f�Y�K��T~��WkS!�(U(�>�X��,X�Y
�A�K�����Ā�"H�B�f��)�d���3*ԑ���
�O]����+Go��a[���<Ɍ���N{����D�f��C���KV�aֳp`��dw�Tx�i���I�֬s�Iȭ��
b���Geݖ������$PPcGRJ~��4U�sU�ݤ6���r͞O�?�/(���w<�(�r�ϱ���%�~��I������ТJv�ȡn~�|gҹ�jJW�f	�j�L�o���h����𼡓JP/JV���•ڦ����x��Օܜ�3��R;�d�S�Z?)��Z�J�Um0�v��7�k4*��tx��6�5[e�.������ҁA��Z��2�Y�]	����N|�D��>P�Nr�sC4��2�@��۳�28/�)|[�3I�5+kD�xm�����cQ,8H��3����C��$�2�ª���N�g��#�����.�%����_�a\��8
��rgl�^+KNG�-�	�~�C�m��O@!�5�C��j���` Cyl�vT_ǝ7�S�ar�T�
9m�6��� D~ojj�^]�Evw�jاS���h��̮|���S�;;
��3:"�+1�������r��!��"�_���"�[���f:�<�|}������%�{{{u�פ{�>wj���虽8z�ǶɷK�$Qz��}F9�����=�`���y���6��wn�SD��\x��6#���B%D(���j8f8�w@w:�7T�z�c�I�V��SI4[O_�~*��9S�l����S�cF4Q>���s�l/�7I�r���K}a�0�����
�O�����e.�lv~����]��sśr��2-�]6Z��D7���<?�G� �us�>s�].D�8ա�/qC#~�ڄh���&	ƴ@M�:U��tU͐�U�Aڪ
/B]��ק�}~�ڗº!�ƺ8Le]�1��t�$�{jB�:�
Iig��hj�}Wa��r��n���=w���ADI�N`�P�,L�|��nB�<�����fOr�v0��� �xNL��G�S�ٜ5ES͗�T!���30��uu��8��ů�G�__
x7B��˒E�p�����.9�M暅����|}�O
F�����o�İ��ÅRm^�\���"\���u ��WJ�_������;�:OR��bF�nG�V����S^����~M�I�4n�����H&��7�~���Q�7[�7G�W��-�D�o��L�o�P����Fj�7^ԏo*�)�	��L�y�Ʀ���"ɯK��k5_�D�"�}��eH�]�Bˠ�"�A�F�A�j����e������e�j���B�H��"Q�ҵ��/�ݟJ�d8l���fh��D��+�!ﱷ�6��aBԥ�V��e>Q���PE�3��x#��Y����d�4>h9�m�a��e;����ٌ8�.�ښ����v2�VYC�R ��[I�Y�i��2-N-��8���~x�H#��:t}�ȴ&h�!/�DJ-v�1�G=W<���Ȧ`3MV����9)'*���h�N��κ�l�J�M��/�ˇ���|:��,.�s�5tA�y
���5q��@�J�N��L "�'̊R��Y���<.�'���f��/*��|���]�k�F�_q$/�9���u�i
	44�җP٧�j�;!��i�����~�jVҹy*���wW����~�f&Ŏ\ƪ1�t�r���}�7U�>Z	.�7����T%!���ܾd>
D.�k�u�_��pUS��T�L�F�D#�O+�2<9�8�T�����kԏ�^G�e��ȷ�/���ko	��},��w�/��]������oI��Q���*p(0�q��qT��=�^a!( U��DJ2�\����<XU����pA#G
�A�{n	������PǓ�rG�݅w*��}�N��d����`s2Q
O&Ļb �@f����p.OM?�_�u2��)K���d�����q�)R�=mo�6���5O򁒘��)�`t
��oB���E�|s��iv�9��<��%�]�¡��mC���N�`��{�>y<b�Y�)��C@Etf��b��dbڌ��]:����$�7z|}
pg��1iX���3�4Ŷ���0V�@5�kq���dD���B�4a`B��]��tD��T�Ԓ�ʱ�nk�3Eu�)��S|��`��l�<Ź˅�:��2њ�
/8w�ƼOq�6:P��|��i��
Pe���Gf'1�$9��l�x��^�&�g~����=Λ���.h��U)d��	d(�<�p�>���DZ,�ԏv/ui��]=W��9�:h�hc�:�|�.g/pϸr����W&�]�m�5�ˣ������|�E���@�n��Z���	�,���A���b]v"(w���8ȃ�M�iCwl�k��ͥ#����Q"�%��]�+�?.�t䡮)���#���y-e�^��(����Bf�U�������!�	V�&��zw�]�U9�A�F,=�4=��Qd�tm�)���� k5fL�y��Sp+��(O��D��ޖ
���	7@61�v�u/�����"XԠ�c	x�Q2(�rN���=X�G_ ��L��1��Q�d����J{���9�6_=����L�.��\<��m��l�*���N��?dh�*0#�T屎5���Z�T���+�7���lK�Ҡj ����n0pa66�����MB/	���^n��Sffơ����lp�@G��f�����9�l�oF��$Ȱ��!��!�vri3�X�96�#��6:�ؒ�	Y�e�<5A�63�T�d�ƶ<=����gj��$D�qD���R��Ty���ᓦO,o9�J/n�
Z5�l<$�i<A�	��1�{����ȻYn�����G5�,�=O5���]�>f���xd׊\8�M��a.�kʙᡓT��Ɍ����*Su<~�4��=I)��m�侞k,$0]�g�a�H1lS|}kʿ�!�ט6�U�m7�t��@9�v��Y�wr[֗DՄ��
��1Z`�"��Y�[.Pɶ�ۄ�HՃ�v�}N�NL�]�u�h��R�I���[�$!��Ԋ�iOm��a1�q铗��۸.
�6��
5Y�:�3e�$ZdN����PJ
�]�LL��Q��g�r��ԨqHؐ�Q�K'�^ ��W�l������.7y/B�ń��Yӎ�O^띗�<�ݨ%)A�\�@F�?��Ě-��$4T�*��<�����
R'J�b�T�݆7�9������n�L���Ձ�؜"�<�_����?��ŷG ��05p�6�A}2���AyO;��|�7��I���|_De�QDO����s�#��1�Z��o��Ҡ0-eJ<d\�"���wLRٕ-���Q.…�m�u�SW\A�5�NR7:z��,�e,�O!+8nx5����+)r�aH),v�{�����) �K	��'�M��($hW>T|U�:x+�\?�N^�8��2��Qe�w�G3���|���]=qJ��C���$a5���D$��$��1	�@	�0>���8���~=<��*��oIփ�I�sg����C�S76[gX�D�jfF��_�_V�1�{�ڑ$�"7�0
���������9E	3���E�s�<^� ��
�A��):�+�<��D�{�=��[��
���xQu��S
������7]��9;Ak���<�r�F���)(���$ʉ�A\%oT�-�Dg�Jd� 0$q�h)V��܃ݓ\w�_����JD`�����?g>:ꌒ�C.�y����q�Eg�d��2MV�f�9���$͜�iu0�,c�g89:�|�X'�w�e�u�d����'��"��Ҙ��C��ݜf�C�:Q���w|/��R�'�8�1����������<���&��0�;^C禟�A�
v���V,˼����<P]�6byG��)a"��4c�%l	*~{Ơc�4����K�$ucv߹�'S�y�"Jf^�J�Mk��Q@W�
��.>>>f�8,Z�<�|����$�ey/�)�7i�QؙrχjG�C' �{/�Mb��r�d�rX�{>����$����}�_3�_��,0�s/ʘ�����8Eo	uX��aU	_�`��g���Ef�kV_R�	�!�;gI��&~!4�G�=U2N�wO��D"N�Y)BۡfF�ݟ�@����Q�^��f��M0w;��00�dm�gW��ջ�1K�<Y�a�[z�CP�m�,���Ռ���
�M�A��9x&Zt�i2c�#>�3(F�0��%���ȸ�yk������^���j���3�%�JF�<s|9QN�<
g���F�L��X3�0,>>�ݭ�{}�(ldm7�p�O�S}@g��07_�Ŭ8kn����s�i��"b�fA���@N���C5c1��g[$�����#���a�;^�F���HN�r���0V�j�{ٶv���Hk/��`/@����\�Ygg��Jֲ����JٚŁ�:��C�K�h�P����*�'���&�E����t~b@��b��eOa��Y;;`u�lG��X0�e������E�"�BLC��e��L������T��KaByp��>S�u��WXo58��S3�<Y,"�4�"ҬlΑN�ڃ��{l�v����dJq��4I�Au�AC -�(=�i
�^����pP��Zk���a�����Nf�Y�f��Pp.�	1��0�j��>�ѽ���+�lrӴ���R�K%Y�;��3ф?qPkGkic�9/�DWm�H��P�hjk
���e��^rc�35.?$��
��e���̋�.�<� �Fǘ�n��d�����
)[���&�
��=�!�Q��ݠ<̀�H�A��,�L��C=[��o����'4�-��g�@㳗R.�	�	�#�S��n^�!u���ſ�nw_�-���@���B������
EB�-[ۀA-ƈ�(��U��X
��fy���/��*keE�L�`��o�2ÿ��7�� 39���օ��K���^��\(��س�����raJ=F9k��RH����2�x�6�F}��bؠk,�X6 i��7��MC�M�l�� %,(���]�S4�g	T�T��'
�;�-�x��ξ�C�*�~�ZC��x�y�:ڨ�6WW�.�,W99Li�+%�B�D�h��|P�P�ə�8�g)m=p](��"g���&$��ųPY�㎌(M�+*�w�N�t^W.�nW{q$�ɽ6R����آ�Z~�&+����Bd�0[��bRY7���yPîX�-K�J�P)����3/c��0uk�n����5�w�u8��oa��SQAZ�] �j���	��nZ��s`jߝ_�9��v|w9���},�5l�X"l�
UC���QҰ�l�P9
diF�{+���N֦���>>��
OI��*�&�i\�=�Bo2�]�Q�<GWo>��!DR4ti\:M�����B	<j�U��Ɋc�l9)[%��hFAA���(]D�-���r��U�JC���t�KFQ�*dܢ�!K�c����
Txу��.O���^����PXl�T�.��z�|��U��܈���\2_/P��Bm�c�>��JA�j�}�K����Q�\2ܻ����XP1D��N�K}W��E�x�]S5���Ƣ�}?�S�?3�@��,*�L����2@ ���um��E�O�wo�E����0к��r%�E㵏u���>+���^1��w�a-�	q�sx�t
]~+c@y��T����BԐ����'����5��m��3����#â���v�7�U��坶O_��fAXgA胱q9V�-CH�(��vL�V(�i���_�h�ZJQ^c_e��0C3��~~�`����EQrϛorq�jDj�*D�(�Ͱ�(��qCA�?k��p_K�b����8�9��{8ڰ�L�4�bXR�=e�Bdav=~[�]ň|:�a
�.�#�d��Mk��Tת��k���6ޅYI8,NԐz�X
���~۰�:_!p~������3  ���,�(�
)�&|g��(hj�Z��?x��27i�W%��5v�,F��r�L�d1���k��0�M�~57�׆庇}�"�ك������Q1Z����H?/�4/#�j��T��QX�z*ܲ6:D�M�Ʃgt�x���p=�pŮ69م��jՙ�"��:e�
6���0����Ԋ�}�?ߤ�?�:R��x�n�K/\�N�l�۷��@�c�`�
��hۀ�ә/ YC>պM{����A)��_ބ�uĔ$�#�-����5�4��q�~���b�MXq�w�܆B"�sfI�P�i�!����汗�['.��
�o�<�z��6ll�A�_�"�
� ߓ�ޚ�	�za�\6�2�#�g�Q�ha]o�V��Fy��Gj\�
j�m��������ū�~\Ϣ0(��W��oY�ȗ�F%o���j��w��d�YF��y\P��3����c�!"��Nax.x7o'��3�M�O^On'�N��gsbM���ĝL~��8y��Nr2y����˙+���Ǧ��n,��97��4�(���,�0 ��x�Q�wd�[$�)@ZY����V�|��Q�"O � �Os�}������9���r�����븨�ȯ`���N��9d/wa�u�Y��ˠ2~��<dif�4��d�����?O#��x̖�!,=C�|�2��!Z9oν�
0.��86���8�����ũQ�'���Xʕ6���{��7�����~0�[�UvuS6��g���Z�I�E�"n܅�r�O�Q4�R@�0���A�7��K� "zQ�p�����ӵ;C�ȋ�Z>"�n���bM;Q#6!|L#S���s���í|m'�u*�Q��^$��h(?����"-��a
uO�Ӭ�t�J�ڣ
	�
2a�0�O��–ypny���Qb�$cb����@y�Cpț�w���n��C���^6��7/����<�)�{��
ĸ�5�֚�s/+@������@-����-<�"�e���O��~���QAq>�ɒ�"&�Z�fc��?7�\����<�x?�|syq�n�������a�1d@��3�捯�1�f��,����1���߽1�\�]5�����~_"�J��jx,o�'�	�/�
f�6kx��?C��۷
���X&+ ��D��D���F�0���""߼��cxz.}wuN���o�-4�,�ac�����o�<*6��"�����=���q|���:H����O�����C�G�zi�������L�4g^j��7#��(�}v4T���҉�vc�'7k�r��P��p�a�A7v��
�q�x�����\��?Ae2��	v X+ޜ�e9uY�/i�EQ���`\w��"�u�>��e��x���{qV����2]���,��;j��
L6\G��s�vu��+���2ͧteOom#:�LB�F��U8S5�B	�L��V>��2.:!}쁄�7,����ay���!/�eA�UP.kSEjj�2���(���T��oV3.d�rėݗ���|��}u�I�i:/Nz���"��h��'/tM�=	y��~�o���Ƌ"��
د^�ێ��eu��� �=��A����P��@�����,R����W}���R���d�D��'P.k4�S�V4�!o�*H�<Q.G��Y�7�X��F����
u�͢&H["�ukU��:S�p]ݮyЈ��xp ��芢���ݮ���&(#�@�����$����Ϣ_�h�ZX�jR��U�[�e8yCo"��R�L�2��0У͞`Re^�r yVK��Mp�i�tA��/!�����=���?10J�2k[f��{+ЦS^
�aK�·SɉT�ĕ,ڤ�tîe(�
���wv�:i��:i�NՈ)�PV<�E�W����1��J����_�+���i��W��}c@Z�vyD���ЉR���^K�r�/�[CZmP�[��ݾ��^`���A��x80�
z�!��0��Q+���1�idObz��Uo�N
��ҶVf�%bwj�⥟O��;;e�O����'�Xm5}�yY]gj�-�;y������`�R�	���s;~�RC��o5���a
[&+�[dm���a�Ŭ>�Ff������",��T�c��X8D2���k�t���������%�°�K1�12g��TDg-�kz򢀰(?�p�E��m%6��L����vd�O68~�RkPG��j��\~��î7ٲ��85�]]غb|jR��8�����ѷr��5�V����
�%#��b'�gH���-����/��Tk�X��.�tM�
��US'KR���Ӭo��p��]x����)Y��@�I�K�X�dv�x0�>��tͳ<�'���ٸ�deM�TJ��!oŧ~����V���%/��-n���V�]V�b���[:+��|�H�����u��{���Z4��U96�D&�,���#9�He��x�J
s,��
��6��;5�Ж�uY���o֑�Dc`X��&��+^-��ęoe$�MptC�̂[��AqT�"���U��ie�/���
"�iȠ),��X�Ҿ��}'?��������3u�jW�T��B�땳W��p*k2͟T!Tu�ō�'�o.,-$g6�-�4��,1��q�z)O�2��)�p3��̇�nK��޴�?�m`�VeQpmo9��gRxcq ��nu/�_�`J\5��?Ơbϒ�$��a��Bn��(b�/�# �`�*��[�����T��gDS~J�>�]cov�d�K2�78��h�J��@o���-S��y�����
\3~����	7�W��bɫ�բ������Kg���YI�?�P��FȆ�9䪼�5�a�����J�vJ�^��t%�μ��@���^����S�T��hYZ�"@���g�D	����*�	��x�w�2�Ł�w$y�cig�S���ࡅ�w6ݐ�o���f��G���Elt�L�a	*VU����K -������;�P�2����10Ș�?�A*�	}�Ls��#NbĠ��b�4[V�rk\�ތ*E�!�����^|O,i�yj�Y]`m���E�&W~�ʿ��W��8��}d���5�|ul��'_+)���E���6y��s�ZG�8Q$�ǁ���w�_�}� Y|���d{�B�e"�P��Q���P���>~�Dq��g06wpo�d%S�}$�c��5I�E�e(�0!*C_%ʝ��~�{�:�G�X�ެ���z�=l����_�J���>c䂗=���4�V����$r�g�=�(
�O@���^jٞ��(�6k�6��U�ɤ��J�G�6�&sʨjb�#+w�|��a��m5�*�'(C�7�HiH�E�
<x�\�5$��u"�f��F�Ί�i���Jt����BA_B������p��	e�8�� �@D.�P`�#\���A4a����\Ko�0�+m��9]�]�ڐ!���vH�!AYc�ƒ.��Q��W$��$��m'�%єM~�(�H.�3��kHӢxf#�}��ˈU���ȭM]ka�A�E��0��ᵂU
���v��>���-gaLw��($�P��E��R$�y']����"'�Nt��1y�
c����X�0�x����(mG�)�����奼;��"`���L�l�:�}��Y�5���)�V"i�����Q���mf�z�3�"g�����ߋ��?��}F�����sk���-BۻI).��|8�e��h<�Ͼ�؇n�BǷ�h:>��n��{�Q�sq��:}��L�*M�^R�=�r�o�+V����m**��NՓ�������{����.��.q�LC�[q�����&�H�U?(�e#
���L`o�jyP�	P
d'�52����B�<s�3@P����|��hX�b0>�B���t=�r��[�$�[,�֖��T�Έ��\���g�H}Ļ?���$��!]L��b�:���6S����{q*�x<���D��T�D�f��x��_7��
�8���s���Fǫn$���NRՆ�͠�K�>����#���0�`kK��oi�ğ&!�����Qd�<�����T�,���
�+�̞�u.H�l��b��gg���RSxt��q|B����g��n��T�L��Y���I������Q9`��[��zpi����
*8�A3c�5RE�#e�xߋk���/�S>՞Te�f��[C%�d��*�ɪ�j�ut��p��\BT�p@�,����e�A�!�_��=�q�/�k+{�x)�ݤ�w��iI�"�4$䒽���]�o�6�Wia���͆zY1l����C��J+@�������A�=�����CS�������I��-K��t6�É��hN��͎�����ͦ;��n[*}�Pqs$��~�h^��	�z80��xK�����TPRx
ߋ���+M�2����S�,���S����4P/���y����iTڼ�!,�P쀂��ÿEpH6����7��	t֯>yx��^��t�F����^
�8k�9��dE��B�EUX-��_�_:�(#m����}*yx�շos�6�ΰ,և�n}��iг����g�o���<v}o�����֒��zQ	�f��<��
�	q#e[��L
�w�"�o��Z��S���ݨ�����/�A��p�-kA��F%��U	�/�{�'0�
���k�! ǔ|��Ύ_�t�=,?�+�Y�8O7z�˅ºm7|.���t
�D-�P�m��#L�⨴�Dvc��T�S�Q�RZ!�ێ����j�7U���Ծ�!6hBuKsN���o^�!���<��F��R
�:���@��w`����s6���𶀵���of�b��S�<��i-a��p�I:a��d�lBA��F�W�:�.%����_$�k���X���֑�q�:0�U��Yײ�/e�`��]
��� �1�:�L�Xtf�œ�����1�ff\Kpm��(i��8�.Iv�R��L�g����41*�Z�l�Ng�'�E�Өݏ���Ә��<8ލ2%�:�������y2��_�%�
?}�
�pK�'���0B��zA���o�gpoY&@A�C��&�.���㷴c�j;��q�W8�pp�e�l;]>�]"�
��"�hv��ea��Pt6�ܶ�T�N8hɑ%*�@.��m��<��3�K
��ކ�Dx�P(|�<�J-q���?����x��	��˱"��Ȩ��1�)e�C�r�!��>B
Qn��@r93F5I��J	Mo�� $���+L���۝s":a	����˳,�8�!	���7ά��p���,a!�k]�*
��ا������撌�\q]����	\+��5��X�:�8hnd��Yd������y��0U�}k�Նs, �<�W�gp}��H(�\S�U�����+7��L���H&��n���,�]�lBg�K2��պj��]+�E'�a���~�m����`�1��&�`@2�Qy�]��M; �{�z�X�a�+��"J�/����c��׮�7y��o�>�
U���������28�(P�>>�Fypo{5�����,����]KO�@�+�'*��/���\<p"��TlX�`�w��ݝnQ�G�1�������E�jBX0ޡ=��B�T>�P�||s��*�'
�JB�^U|ʅO��	z�FʭZ�����I�\\�2�c-����gQ~��`���̳�P��K�	
����Ѫ�>��tF�*l/�T��x:��{��ѷH sGQISS�{�x�/��,��Ak�G�(��t\L�V��(>~��IA:�/��� �h�s�j�9M����sֶ
�7���~��hU�@�e�)�))�T�q�
B���=[MB�
��h�_W���v)�Ue�3���]�E�
R�ӎC���!�V^�h�oss+� �;�8�p�e��T��IJ�C����	aw8?��f:��~IRB��nd��z����H�j=��3�j�|w��sdX�D�2� �ZzH��b���V�]�y������Q���i�x��8SM7�3)��]���!�S�p�F�����`����!E���twwڈ��m&�'��:�j� Z��s��'�u��>����Eh4��- �?����@�hs���&Q+�)z�G�YY�=NlH�����B�;�k�C��h�E�� (W�``����A;�.C�i	�u�iIl�Lkv��%��bW���td55.��)����=�
+\g�[cq"��h�M�f��N��_S�
�)��$E[[�r%WW_�e~�.���om�jAcN�X3z�7�4��A.�\�wW-�QH悆De*�2
�4_��$
�
.q6�r���?����/���=
w�H����e�cg��{7p�<��8٬���AN4�� N��߯>�[�R�ٽ�͛��huWW�������� �o2�hw�Ӕby�0�;��&�V��V�[܆�;�ro�3)�[�@=2d1��%b'�6��%M[�1dΘ�h�g�R�DNgH�$��Q�KlD�&r8��:!.��Z*&��Ay�Ґ���
Leʙ�O�i�����]CIn7�����z�j��=>>���'�t~~~FJ����־���E��]��x�`��s̨��8�6K)2����)Y�����#��6����s�<!G���yĮ�9��x�R�d��tF�8�`�.p8q����s�>��!؏v��@��_z����a��}rI
I�j�Xg%��^�~�<�@����;Z���ڑ���P[�&��"���/�ѭe�T��-�p������]�4v�
�(H솁�׼�q���Mwv���:��֎�x������߷w�e$T6(ʣ�+q�7^���T��V{���B�1Y3����u��œ�0`��~����=ֽ$��PV�ʱ��#WJ�?W�#�9���u�`]��$	+�G,ֶK�d@'K�|��;����t
~k��m��0�4�,�@5O\n��$d�bGX�Ɩ�}W��@�X��E�Kd6���y��<wN�:(?��Ͱ��~�?�\U�}6o�Рh�jj��m=1>�sc֧|�$����h���L6�
���=e�}���M&�G�O���s�hZ��U<u����ڑ1�*nϙ��2�+�sRq(�Єن��%�U3��f�����2�T�׹{���K�Uk�+��	����!G�u[��	27bD�+��`>�z�@~l�=�W�u+M��O�~�c[���
�j�2[P��s��i`��eTJ
�+k�)�����Ⱦ�s��(d&CB֪*3���`�B��z����R�ɚ�y*��L�>��	�8؂��8�`�79G�7�ㄗ_�9�r���fko7�������e�j'�vl0�b��c����,~]�ZEA�j�)6	^�T�0-7�Y���`J�'#�E��<N��5y��ڽ�6S*�*�z�#a7A(3���L�}U�p��뿨X:{��p{��o��00}�����Ϯ<�	q���PT@���o�.��*/_-��7
�������,}h��!�*Uu3��̠'��Y�<PNzy{~w���!��	=�8��+|�Qj�x�LZa�MXR�K�kgtc)��f$������
���ݏ���s�PJ#�ّx@g�պ\�[ѦP��b��('.����泬��Tܣ���%�$Vl�Xg�	>#���΁~>?�{���E�s�T�qPVq����oc�<ӊ�+��EN?�b%�I<�ղ���YS��tLr7�\p���2yN
Ϥ��w�_�+lg�q�D�,G,�	��o`���>($\�n�SyVS�T/R�̑Phd/*ο)vw��ǭ���7��s��ݝv�?�mW@R1���<_/��C?^�Q�j�S*�J���v�U�q��4��Ј��$�ӕu�dCiu�Q ՘
��
��G�^n�Q2W�F �SW��$�%��r���]����A�<�HYa�ҩzQ��p�T���9����7����٥���%�d���!@�ʪ���e�D# �T{�!�0�^UH�v?P.{d��MW�h|A�;�n����\F�,��U�����S��ȉ+���$�P�I�e^�.����uL�ԅ
�kk��2"+"�&�QW�1{�AZ�2�D��N�fŬ3t~�5�4T�<|���JT�U��j��8Af�$F�vri�z$t]�fU(M���f���1$,�	Joq�D��&:�f/\����]�e�9\>4���T���J���ٿ�L�b�SOJ��3Ξb��\�(�$�[X�ܧ?�ί�S�&�Q�AӲS�zS.��UQpvM��`
4s�g�S}B��u\��c����``�\���&
���~"SG��ص�[��ݮY�M�ظRbW����	���یn������\߰�œl�I4a��L3�} Z����Oe��)���Q|t�
�!�x���.iM��]!���n �BS�ʄ�%���s�菑 s��$f�	��%�A�Z"u������LjZ=H�(G�D��"�޹�l"�U`A�)-�8�q�[V�{�"�'`�
�.j�+�����v��|
ͦ��Y�0��'$��4��l�Հ7�o���W�%Q�m�y6���V4v9�	5];�xrRT.��r%"8K͂�+c�2j2>g��m�Gd�1���Z�e�~�}�5�e�E����B5��r
gU��sq�Q*�/F.	��ʛ���P��&&�
�r�݊�k
�+�����fV�I��Cӳ4��������0�G�+g���v�|�9�(T%��m�,��=��$3ܤ�Fs�߽�W�#H��{x�B7t��f6���\*雨-�
*�x5��+8*����dU��M�ڦ��d٨�Z�:�g
��ן�v{�vl.��d
ܩ�]ʰ�ɞz�{-�����RtsR<eX���,5ù�u��ʉ6ӛ�qWyhT����ǂu����_WhLj��}��G}Oh���eH�9�Eү<�#Bʃ�4��sW(��Sd@�wil�Pt�5�!�ȱ��fNKc���N�	�T��#frϻ��..k��|�����Cv.���z����
�����	s@���ߝ�����J/_>�VV�S��$�����0�|��k�XTc��?5S�7̟5�հ�,�v�RV�V�F�X�U�����g�F��f��
KY-'/��5�LhXKk���0~�زx����u?�8�u�	?��x��:�Vw��{:�K�VPp�Y�8k�J�B;
	��nI���0�|�Z��g4�yk:ܙ(xFӮ�e���,��m8�G���[ c��E9U^�<>�~��g�<���r�z�H#�Y�d��1���mֆY?�2�H!;�2��S�E�s�m��+�,P�(��[�A����h�ތl���LC��C�v���#�[�du���ā�8"w�=�1��"�R#̒Rҡl�:�^q��?��q�)>��̲�Z��ٕ����O�{qV��1s7S���Y���3���[WΑ�����+0.�H�"D>��х���
���q3:������N����I�F'�j۹�U(���J�R�~��t�wUs-�ٹŧ�#��͈O]�(��nI��e���w�ղ���2T��S�F�H�j�Qρ�|=bY���a+��%��n|�KX�$��~��=_�6�,�`�F`�~���`��$H-��K�͡���(U�W���&��>8
�gx���?�A;�'S(�j�0V/9��3�m�j�*��c�.�,/_�����L�B	�9}«���1�|�jn�A�m��(�V�9�)��E闚k�?��&UIJ�n�f@��=���FV����3����5�<GTmQFp^�~�Yr:�E��4F�F�FG�{�$>�M�A8��!��i�N�]�7���#�}g�UE�-���O��*f���u}���g�n��%����A�)s�VO"�bq�fw�R� ⤱��c��S!K��K�0`Ϧ�B�)����5�q�x����QtJ�ėE����&�W��)��.�Kw�%�1�3�JG8��l��ccA�Ȯ�j�i������(�v�@|캀�ǟ%�J����R'��-���A�`T�
�j�]��~p��E����r1�ܧ�Z7����w"��x�ӧ$x�C*��A�ҟ����H'E��9�(q�

��63@�V�qv�7����iJo�݊���۩_3�_��gg�3�4�?�:5k���>����+�.��-輒���}X�
�N��n2J��I����!���S8�3^�������V�'͚%uK���(aB�;W�L%;��e6�G���JT�
'�"#	���7!��%�&��@�ˤ5�FL�����媮{���Z�O�8���
�=�L�i�����$������X-��=��o��3�c��'}�*����cV����9�N~r��N������R��sT>����ȵ�/jfZ��݊Q���<�,�?<�;˝\��3��l��sYV��<Q
#�-Zqe�y<�.��Y�8�6�w�L�{mQ�nS�3l&���8�P=ѝ�.��k�zzpQ_�qq��	0�z�P3dL�IX"=���(�xh����!��:R�����4?�d=C��y[��G���f���\g(f��A��/Gޕ�¤�WQfZA��<B�vl��d�*ms���U~�W�6C�Wޅix.0n=a�([1L%?��D�K�΋w�S˻a���@'����^'���`Rl�8ߍf�����85��Eh6Q���h��0RX�_�����9f=5a�ԛ��p^(~����ph��Í�S�-ni�mo��>H��9����P�6��6A��0&��'���S�/s��)d�0�재1����E����Wl'
Ą��隢fε�_��\~!Q��,X%aD���B��K��.e�a��q�ڑ�%]F1I�C�M�TٰI��E�)���5�\d�5|��¹t/���P�l�Q=�?����RF18�/�7�r�	o��+l?�n�9��G��/2�vg/�����ڊ�!3
��P@p�/�>E������x�C�Fy�J�z/F1D�K<���!Á_�C����{@G�{��UDj=��ICI�� ,'Yf2�>b
$q����7�߂(��ນv���6zn��Q�k���)$.��K5Z�ܚ
�B�,�q�L���	�W���7L&ˤ�]n&F�`��W��U�oEc�[8gi�1�V���t�5:ި�&J�,e$K�A�ԇ����)͢@��C��ʖ�q}�f 6+Us��y�V����gR�j�{
'	!�MiSI��ƚ EO�,'���޽F�iۛx%Tk��v4�A�g��*��:���e��Ծ���Ug:
.�Du+���~	e�C��9��¥C��C`$v���7�~�/������z���������G�+�E4BL�#�1���Q�p@r��@t?�x#�|@m|o�o���Y�n�:�qgO}`7J�b��%�cnw.���dz1�wF�C7!r0Ĥ�v�W�>����CS��$Fl-\� �A:�x��ͰG��˞iZs��xˀ��F�P��MN�2�G�
]�fB�h��"��r2�f9T�^� ���E�1�y��c<u�y�E$4yʭP��'£3�t/�-oB�p�#�k�!,�A*֍Ig:�L&�՞fn�r�
xn��.��N�fԝ|���|(�*՚��5���#a`��|!�f�ݙx��ص����uЦ�rM�x�v�3�G���
��>�؟[��Ĺ�&�ִ=x��
�و)�fjl�z��^�7��T,�{ ��G��8�����]wF�~ 3$��q�;�x�����pEg�6���n�]fq�9�M�0,����:P2�l�PJyO�S�@��#�[�v����3�p�R�Ӷ��c3]��L����N{�u��H��y]2@��{�=ү����mw����6��C�8�]ml�ĽA�2c�o/�<���h0|3�w��X��$^�+�H �?`r`(�!dtl��y�7�A<����p0��~�6+[�7�1Hԋ0�tػ���M��l�����b�Kj�n���]�uh�,�y���3�D�_<�&�/�JB��Mq'p��P�x���o�����y���{/{�����
ۗSi�>����D�
i4�tZ�r-��Вx
M0o}�j1d
\ı9,��N/���Y�<�O��
���,��C�z	PAޥ6�.z7��`0y3��~�,��M����̏"�3��$�طt,߃F�W�ǻ�����'���{��H%�`��
���׿�KS�
�욠�f��U�v����1o�z��[!�y�n��O�Y�-s���+Me*EP��}U�3�Hm�O�����Ɋ�*:?�^ap�
!��(�6�f>LB�fD����q���
z_�>]N�]�Wߞ5�Z�
AdGH��7�뉁A_n�b�ه��#�����Į6�nw&��R��h�d��[�:�/%��ټܮ6u��:#|��n�Y@����_;�v�_�v��a
u)���l��V�c��޲�[�e�_Q�7�F%�6�P�O��ͨ��腀��=?e�|�d�RL�kx��Q�����3J�I��Ix_CE�A�2��	/#ƃ��z}���kU���҆͐9dZ6�Z�J����,N��:�su]?�s��:a-�N
���:L��&~�1�r �le�2�˓|4��
���(E8��&��fX57����c��>�Tw��}5�{ȥ��2N�̂�w�ۑ�h̋�<UR�D`�A��΃e}Թ��x��O��}az�
����0���%�.E�/#�f��H_���h������"M0�����[���Bcu,��s�9��2A�8 r���)���Ƣ-V�jj���M�W�**�;�Ӑ��8�H` A�U]�+�3v�@\�E5hJ�~�I�H:A�R��f�9�qO���]�N�0~�M�Z����^a�(H M�jA��;K�$�k���pښ8n~�⟲�����j��4BT�د��w����Ų��1�$�x�v��á�,SC���n/��}�7�1���'1�X�
�s��?�!�҆u'쾪�{Ԕ���D��AGw¹��G��<�_�0{�6xӰd�H3���D��0�Y2e��Y��;s̑ ���V��t��h��:��O���*��4���N:�8`/኱�D�r��@x����o��D�����ϰ@��Mf�"a�au���D>�֮�{}�W���
��E�+�����<�ή"�\ynb{�0�7��r׿ղ?���5�$7�wo�E��x�m�[�d���Y1�$jf5i�T�c�����z�a�@ppDB�@�BpSB�DB�
C�����]"y�D!-�y3]��y�j|�br_B�e�K��=ɾ&��Rp�O�C��f!5��}��Q������_S/n��,���}�^�E[��Zw:z��Bl�v�ےM�x��5���ң���4�
���B�Fұ����H�%
�D��LO�'Y�q�2�_I�r��7�f:R8���Eq�:����8�\s\�f��
2�3ZR
[&<t���%�5��#�Ю�v��K-�VǞ�,|N.��P9�в��س�Y]4�^e��*+�������"����;�(?''�	��#� {#i�%)�܂��ݐ�����@�ĢV���#�z�5F�5��͙e�Ȗ�(@�ڊ�\1�Ps�ҰC��\FU�X��1�[��d�5���6���<
�MȞE=o����]Kk�@��W�d"�M�P�(�ii+M�	9�b��N�
�����;;�O�
�V_|���h��ٝ�������԰<����=!�װOKJ�T������:Em6���"A��IX�fmM���zW�iNу���
9�NX�265�˸D�Z�����?���g�����矶<�$l�5�	{�D�r�_8��&�SY�ۙ��W���b�j��Y_	=��Mt�#�% ��{r��ɘd�v%,�iO�۹Q�qt�x��΢�w"|�m��7Dc���Z�jJ�����H�ҩ�Ym���ۃ|���*�����8yͰ̈�vK�t�Y@}Ìus(!���|��.�kk)l	��ڣ�Jxn�U6/סw>��<�Cy2��z�^��̐��2�OQX��
�2g��ďA���!��J��AzP����6"-S��Q����J�n���/�دYT&vj`h���xN�d|�(9�:~t��:Ň#�.	�w�!v���<�G�Ĺ}!��p����D�~���s���L�K8ÇAK:	!�>URaa(�*�4�n�xt��_/aM�%q�&ٜ���Ga�Cp�R05H*|MWl7� ˩�h�|��J%��u/���v䂏�V�F��f�U8h~��\��
;&��3���_�?���>��=L-_��m�0��Fٍ�žJ��������ų���b�RsG��������f9ݬ��n�o�ҵUw��e�1�Q��bX�NU�5���\�z�����n��W䋫����Ԣ�9z�b[�����ē}1�cxT$G���k_�K�I؅��;;;;;���Ώ;;���ȁ���fϗ���pj�M	�Aǘlx[�/~�dg�.u�ʰ�����;1:pPu��?���ykoT��፴����am�!��
��V��B���E�R�K>!��#�-�P��4Ae���qܐ�����,�J�=��3
R�WI=���p
�`�ǐ������� f2ǷT��v�ϫ:����9��@%�:;@}�6�:�AO��-���5씥�C��C?�3��;y?�c�3�
1���V��K���*.�z�xp��������7�k��rM|�q\�8�a��@�y5����K:�4U��Q�Q�>�7�3H`�G�+5�0R���(j����>�q�H��?R�y��B���C�N�=����ֹ��=ĥ�a�#�6��i:�����Drk-s� 	ZT3�G��\V���v˴�|2�P�X�}�s�Q�HJ�b����dv�4����K����.`�w��6����;�A`�Z��4v���Ÿ�3?!��Y$=��&ӿ�X��Y���ܷI�΃y5?5�ө�6.�ю7
�ٽ��aj��<�7�U�Rm�tb�Z���{c|%O��0aF�0x�����Bm�¬w3����S��u����M�uln�p����wZA��4�����v���u���df��n��ꅶN����/c����͋_���6iv���M��&ѐPv�n�&��ӄ�"�r/�馋���/�w8x��,�|_\~@�����O1
�4L{���W?1k/K�jJ�|Ҝ7�2��S^l���+���wp���)j�E��t�p�����7&sx�q8_�S���_����2@��Ts�uY����b�Լ[������x���uEGT(<-&�\'�;����o�s�����ng4��jq���?���۠P��K��*�W��?9(��٭	�iΔ5��p��ռ�b~E�����9ġ��f�,��ݺ4��4بsޛ0)�iڪS{�ti5
��)V�m�Օ}o�`�m`0�y`�����G�qu;J����
��b���e1A�!<�9H�����\�"��)I�$A	�c��R��$�h�kC�b^S܋+��R��m�Vv	Bd��4�-���9!'��q�Es��=PP_�WŢ�v_��$�$+�l���h�b��b2J�F�APz\�buj�
d��4�*�e��~��J�Gj~���
�!q���$]����l�#E�em ��� '��*K)�5��d+�u8��A�e!�|>ݤ%�� ���F��Z�M���Q3X�PY�"p�J�ɟ�ʵ'�-�T��R��仯����ڊ�Y��M���&{�$|�f���m;Tyt�\�?Bv?}j%nu��~�q[@��0�kr<R�$�7t���N���ay�S�qtgU�~o���{3�o�
�R��k��\]"/�!��
n��ɺ��#4�N���f��l��֑���$�����\��������Ũ��&D�����6	�_k9��q�H��_����T��jI`���3I�$"Lk�O���C%B��V�{���	aG7D��]���Ub�>&Fq˩P�-��N�� }I7A/RrƯ�S����8ٜ�f0��Wq��*��Q��fX�x�BF^��!0@*��uv�`-|v���k���Y9��M#����y�V?�h�켢�\|d�6�kUc5���V�~��ў�Zx�:U3'�@��5G6sI��x�`&:0���U�*k�V�Uwi��ڼ�	�u���HQI�Վ�Xך�wvZq���I�/��&�#��?��l����?Y�s��0���<\���k�FB���bO�4)�uЯ�`D�@k�O���SS��r�`V��ܖ8���<��uI���a�}��;n�3;@^ZKHkt&l���ul��)�w^W�R�C�䜃��N���G�t#@�ګig~�CXr��i��ae��y��%��@ò�Z�b�)�-`>S3��V;�|Zv

�~�4��%R����2���i�?�-�<a@D̚<`p�P��A�bP��/i���UQO�]�3�����o���^�7�:���Jϕ`������)�!k����=&��Ԓd�X�1�tS}MX���Y��񵆞A��r���M���h��d�\�4�����l���4���+%xFJIz����`���R~���*�}צ��G�h/Kլ7_zI3x�
�EN�Ds��[=5�-�^8���j���q��725��!�o =χP�k�}�y~�s͆��U�JQo4t�-�!y=*�x�ԭ.�d��ڼ��C�^���O�d�� �6Ÿ§�є��a;ĞZK�\mE�9k5.m�*m�-
1�\�>�ףY������<
T���p1K�Hł*���Zj���
��c8�Eu�����Kg.sޫ�T�d���7�s��iH2L~�J���O��5ւa�!6�F�z1sZ�����&ED����W张0A�����d##n�����7���l4�n�0�I�����=��z 	��1@�'=
��y������s�^�&U���\�%yӦ\�x�p*Q��*��8$Z��Bژ6r	��nG���T���Dž�9=�/
��)�wJ�C	�B������j(J�D�nw�ё����1�@�c@�Y���w�o�K>̼��lj�B�K�X@ڻJ��9�j{x��s�xF�P��V��*���e��*cI�h@����f?�G%�
d|b|)���U5˜��5+�������j����$ɒ�(���6y	����۸�� m������[
~,�	�����vϿ|&P�0h��z�7�R���-r�7ei���x]����Ǧ���i�-�i��nB��Ӂ�cO~!&��iy��i/��6�<U-�O�-r�4$�	��׊�=Mnݡ�&���#2`>K4"�ٲ�EO�+�-A�[︆��	����y`��r2%�p2�k�xN�p��?���Z�
�ʳ U9m��Ѻ��.��kG�!����[�n�y���h����xw,t����/qcJ��rژ��g'x�qn9m�37��#��&�/��EoU��
���q˧�o���gx�k�Z�ش�;��]�դ|	�.Ea�5�"�l���ֺ��7�?���|��
�7�
��r5�+�cmЖv�,p��-K�G|^O��^��δ�P�>7CY��*��]n��萏$��a/r�e�:��w{g:2�c�66�[P��gN��&��z]��.�?n}�֪7eX'z�8a� :Rr�N�Xl�SLlz�R��8��M���#�#��?��s[�!-&�b"FE�F��8:��x���m��"sYi�
�F*�D�q'^��Qk��v����G��U?�&ҽ�x�,j��\d��!��~�7x[���3�/8�h�Ғ�2��/�r��w�:v��=��$a#E�@���H�e6���Џ;�iC?���.�����b��b0ZU�3�<� �\�bҘ*�*$h���p��W���8aQ"k�Ԯ�֮#&�u�8��n�.Nj�
[*���u9�V��+!�[�͍̓ٝ�i�p�|G�8K�d0�=�U��,n������V8����1��D���"B�vͳ��NM��:?�(��D[G*�c�-AW
jSS�M<�ݸ� �T���
Uu�*|n��q���;3ߓ�jѳ���Xs�}#���񢚏��+���nnt�F@g�1
�;F��%pT3���"��t�OX�`MZ�\��L]b� M=�2����dH��'���F�g��
"�J�F�J#KQ^j��
���E���߫��FXN��[ʃ�dȦ�+I��Q�ӲE�[�Gw�Yy���c�v+��
XHM��������A�>��aZ-�fazs}Q̳��)�)�5���Q#�nMJ};�L�۽�b먭Ƈ�>0��'o�I�U;��P��l�[v~����<o�ލ؊���h`��^6���2���q�@% 9S�^�������Q')!��h�f�ؑpc�C�6X��-!�0h��&ݐ~��5'�)�"2�/�V��NY3�?m�A�N
7���Ý$���4�C{Ձ��R�^T�;�qU��O�dVa�+���5Fn���50�;<I�oiS�;�I����E$��C�1���
	
g��f���^@ﵓ���C|��O�1Zu��4�6<`C�	#���B%�XC��H	L&}J�2����k]�}����E]�������Ֆ5��>_B��;iA��n�����G��R�P�;�ݓ�3_ګ���F�TU��1A!`�g�����O��^Dz
JՔ��:��#��-�.J��<���Σ�u"N����`�qI	�Q͙:;�Fpn'�����&�W���Mj�$��Uo3w\�`�u���w~��D�&|"Œ�Y Z� ᵃ}W��G��[:v��n�x7�ށ���Mt�%�rmx�b���6�	9j^�n2n�4��A�@j��z�@��4�������M,�����/��D���C{Ge)uȄ�#������	�"��e�5��Q�a��߃{%����:W���9��f�{�	-ԏ�k�U;�jAƶ�w4J����p�Q�W�ڐ���S��GǗ����R{���ëВQ��,��?5G��Z�t�cKlWO�i��A�,E�qnA�-Y�V��Dțފ�G���Pg�Q�%5��Dۜcɾ��g�i6�k~֘�#Bv�g}d-��u�F��K�/ѹ=s^�M/"�%K7|�������I�i��"�f���|�� �W��;f[�Щ�бv�N�w���{C@�i	!A��2b���|�s�7J�y�Za�v�/䃷�H��+���Q�c��w�����'�>^�!޴jHX7d|?'RwY�)~S��R��
$b(����Y�q��n�+75P��È���&�ѧ,~�q�5�6Ɛ �b�f:gĤ1����k4:*�w���1�d��؎�	��1{��Y&�aj�-	q,<C=Cu�JMx��S]��i��m���f�㴾��5J�'�I!#����}�vǑ诐����t���#���'���NV��!9+�`�2��]�~w@ھ'�s�詮~UWWu׃$�:a�RJ�kCZ�f���`R��h�|����UCk����/���2A�Ȑ%X�G�#"G���L�8(,LmE
��GS<�t��e���፦^�]u���-H�~ׁ�4�?�k�紘�X��[9�ԶM--�z� ����o�k_�Po
�a6��C����q�ɤ�.<�ρ>z�/t��H�a��ac���*�*��R[��L-^���Vtl8����+���n����|�#�̊�$�7�O�}�:[>s%�;�9�%�Le��
��k���dZn��>��U��e5�nw�68����#�刪gzy�ܖ��n������V��p��l,~4�E!p��8�:屘t�T
{�Hx/_�u��{=�|f���@����h�pR�����×�j%�S�y��;6꠱��
:�� |���y���#�{M��ǩ�QV�:�B�#��P�'Z{����h�X��A��3�ݠ�nY��8d�ڤu8�?&�O�B�� DbψVT��9�BlJ#.2����:�Z���>��E}�{�ѕX�^׌A��c�9'Y��S����L,��]�Zm%V{��.��"ʹ�U`�=�t�&��G�t��m}��#�Z��B�3��;�t(�yA��o�?==��N�M�6�e�r�\a�泉2`_/(�is(.��!��Ք��" �R��{GE��6�q�΅�/�zj�+/��1`@�Z�pK��^r-�Q6�����%n!Pu(�~�<m'����;��۳jGP��“s�ҁId��ߨ���aA��Fޒ7�usk+�&c)�X2Ф�<..�M��y���:�Z��YɆqc�&�
I/|��l����q����⾊�j��r&�o7d�0�Y3�;�еdkU�n>3C��M?,{xs��H_�8�{���o���B�?
�yJ_�����}N%8�:��Ʋ�q'�?� 1��)�
���ođҙzx�e��/r*�a������'齺��u�x�{�T��Y�sH)��.O�@�`�][Y�_����;���J�i��r�`�-�{��}��|�Ð)�w��~>a;��rt�+��%l��i/�˅A��j|]����By���2���n20/�nu'Dm_���1���HS�PJ�61z����2l!H~	����#�)u�[5�O�{C1=�m{��#�x\/}cY�cVUL3��iK/���P9�9s��x	��1��-QV&��[b؆����R�2��I����I5�Gy"���3:�^-�LqqP}w�2��I��Dܱ��{�j�\�.�Sh:�缘C�r(`n�C��_��i�]<-��dl]�NЎbK�V�:�ɯ}rE�ܮe�k���V���tg�祔�.`��+�/�C�>��Y�a[��CS+�Td�H��ýDړpT�����}�����d e���Y����]8X��5��
�B� J�qwp��?��GD���߼�W��\��Q�����-�_N��N�]p1⢧�!�t|o�iH��0\s�1��$�M�+��IR5�6�)@n�ڀW�v)i�!�+r��G�݀��&�_��M1��〴�������bOC^�,,Y�
rL�Y9�fOo����J��)�������w��"�b��Com/$ɂ:OL�0*��C�o�S��;r{H�68��'�cG왑��\�%f�TN�YEYJ����S6⎨C��w��+����׿_/�|*����<���921���
*��>qP���뵚eN�}�{�NA߈��L�{?���2H�N�<�7z=`¶Xu2.�^�E���Yp��ı�-���镒F��R	��1���Ш�|�5��$��J�2�'
"�*"@�Q<��4�H�j؈jB�J�_��H��t�@Y��뿽�|5�;���8�'�f7���4d���3t��C"1C��V�>�� ��yG%܂l\9����I�f�%^W�6-gt%�%�}xIʻ��.�R�|�E�Q`��@�1�d�Y��g��\�3�:�|!�e�&m+@8]���M��i5Z�0lB�B+�5|�a-�zJ��q�^�Ec���e*��1_Y[�a9�g0��lN`+�`U
Q�zL�����*�ܥ
Kg�h�B��A�ά��/ey$�E%d�<���9̆4�2DA��R��F�M����&�S��l�6�6��2x���G^wwŰ��˦�3`�t��) ��z��%/_ʿ���u0q���SDdd6d���%��ȼ�^l_�u �n���j��%i�&��|"QR�H��/�}-��X�w&��v*���2�1�����{���3��8�8C\�M�@A��(�Q�gG���.�?SV�o�t^�6NG�L�:�� 0C`r?-'�Z>�X�G�
=ppH�v1q��;�B�%]�z�Nآ}��E�SMN���ʴ�2a��VD;"H������غ�-�8��?�FT���F�Wr�u�qG0���O�u����o.���(D�)��X\�H=A=>�k!7TO��B>��<��f�D�C��R�͊-Hn�$ֽM�l�EY�K�Dٕ�R`�Nr�p�_E��	��,��t'
:���bw�Ă���H+ON��y�;_W+f��{Ѯ�1�a��hzZ��Z��G��k}��{/��$2��sn��oQVޑA
>�pj�A����B���n/Z�F��t-Ja`4�����V���e
�Jq"�l�,����S� �ǥ/i��6��F��{��#�)O��]����X"�Psx#u-������b�s�*6�`��pSN�jJ��@��P���
@_k�eP
z�sF���^Ь�FO+E����p�~�jg�|�-F�b���6 <g����So�B��nA�a�K��,We���p�\mٔ�D=1�LB'�u��ؐBIx��Z����{�x��۪����T7o=|x]W1w���"���.��4/W�hk=��i�A���@���X��S!d�+�X�<���9��2�=���P�㧨��lz2{z(�;ʝf�g�V8+�J�p�t�)����o�bYM�ga�|r3�!���,/B
X��W�z��0>�����"�
&FZ+��b�8(�S��ї�B���.������߰����)�0x�D�0a�_ֳr6'��N�/���0C����阃��.�1!��j�����ݍNE7�H���u�! 6��_�?ӏ��THT�i�\���_m����ه�HtY��%�u�e��`0�'�PmdN���~u��j�\)Q�L����V���g1v�4L�ɵ���wx����j,7K���H�?x���Þj���ް��I`?O�i`+2����\��+xk��k���#�P�/��>�^\Kb���ߑ�+N&�N&���p{P�*�"�ՌG6���ڭ?�Ħ�<+
sN���>��!ҏ�0�M�
ED-Т����ܩ�	�oN��j�������H�� ���I.�uL���ö��C̐i��~��M����p>�l���L�X9ޒ��eyչ,~)�|���m����`;ֿ�f��rIs��sӴ4�>�oO&BԂ�Ɣ�!ߒ�WU��4�PA0ubJᯡ(��YYcčż.�"Bsͺ*���4��ٜ��t��M����Y ��s>�[�� ��vd��iKo�"E�ц3w�/�4x�̴�P%�3U���7�
��"��S�	6�r.�@�$�J0;��}�
����J��_hi0|酋�8�^�SpS���MM&=ӓ|XV������O��<�G_VVy�wRo7<ߌ�"k��"�x⇗�&̢W�A	$��x�7!��o��e>����U�!��isO�:��"�F���Ȧe�C��n��r����./Q��zrvTc���w��<�b~X�R��,�LL/
�F�4�@D,W�
���]��|��#��x�`�ҵ���[�"w�ߎ�hq��j4�0N�,Oӄ�:�N9R�Ţ߰��&�4�c/���(���L�˫��Yk5Tz0B��jz�1�v�~�G�?��h� �t�g7�u�G�q����G�{=
�~<�;���&������b�B�d*$��ׁ8�ķ�����w��k]���D,h���o���	D謖�;���N�N�N8���'�Y��"6�X�Sc6B08m]���Ae������<T��@�xїf|�a-��m��fF�
����v��x�������5͇נ�I�y�U�0:Mw�«��PiS&�n�HU�r3��ƊD� �zI�Lo��b������aӖj��7��ħrf\���a5;)�!N��}�ʉM(P`Z	�p�j��a[��E_�<�l֠!��z��� a�!��I;�Q~%�[	v��[�6�ka��Q���FNo/��*�>vN`0G�ݟ4'���7Ǫ�E����Kke.��}�}�:����-��Yaˮ<d<,�O���q�8��BmQ�[{�UgF�?�̅�,X}Vv���<����}���E��+�C�����ʙ�^G��T��0x�_VB"��R�:|Rb����h�Z�AB`�;���U�@.ӡ�!n
.ߌq��.
)1��u�M4���l){[�dyS`��Q�j��B%��
�:+�����\,.��cU�P����8g�1���4��s4Đ�fiq�ٌ�E�C�׶���_0惎�p.��蓪�@�#�Y�T:u_;�L�J燦VXۮ/�$�&��Ruݯ.�2�
��=�9��l���7���hw�j�{�g�������ڑ�SFS�'.��Ȃr����p�P~d'��;���i�U�+ɲ�7��H���2��JA��!�#c�P���!=%+[�.׿���0�D��5��{���A����F�Ŋ��Mf_�S��삨��&�=��)Y�d��{�d\>���X^��N���L���"���
\e}��f����LwM�I{9��tK�P��6IV���b���͎�S�oT;ǂ����+��9_�w��5/ҽ�6�����ʜm�CR��6
٨0�acp�������(t���%7�m,�Ŕ���m}��\�͚
�870���v4Ӝ>tECs�k4A�V���*��m�
��[�d��~�_}��?�hw�P���tx�6���	�eF�`�<
�)�5��3�o�
�j����0_���HJ��_'IϨ���m����g�o�X;LAȬP����o�؆7�~s0�Ɯu��
�Zl�r
��ʥ���5�C*z���e��f��͆=��2X�`�2y�c�=M�`JL��fI>�U����o��.����mS����0���ªi�p��;�Of/��2S���Ll$�I
��^�v�Gō3���K�1t�yh���b�%|1a嗔ܽ���4�c%qҫX�ڲ
 ���gxŀ���V�������Y�&�,,�z�z
�߆3�DjH�O�������
M���H�Px}�S��#EfBY�a��VDPPݺO:�¢�X����d��#Ѥww����:BdXOQ
���,��6��o%�>#�gL��v�:��?�̒�[�c�KO���U�eb�ﶔ���>�8���,��WP���&6��ՙ=4�����N|���#`����A>n^t��)3#�5"�t��v8�E�X1h��I�x#��^���X��Jn�tͱ�j>"^7�F/��
�~�?:�P�N�|�܏@�'�
����<������>�=��uȗ�£�R�p��4!
�]t��z�"���A��p4��QЋ�z���_�lO�5�3��5�s:j�q���<�t#b$������6^��~Mװ�c�cZb�S�`k�UmYC�v���/�6�UMCVw͎�
���eC�=
c��*�\���xBC{��G';�
_��������_b%�_s�S}�Qu��}����W�F�������1�G����8��{/y&_<�������㽓N��%�_4��VC��M_Z=�bXذ�0d
�T�G��C6|�"���+�9��iD�v����$I�i��N�-��'(A$"�_�}m�a]��Ö�xTX�򦕶����H(	�vb�QHB�$�|gz�迸�e<��1Ib4c [�����ћ-K���6O��Ek��z�_�g�
�UIt%߂��z�.�Y3ʥ���]%T[����-���]�=����M!�@�k�1j���g"M*�7,�Y�M�-�t�
�(��� &�B��aY��L�����m��}��}%��ފc���8C�Q�����>�[㶷����6���!e��4�t��|���\��[��#φ�j���K:F.�=?yo�W��39��<!�:6�<Lp��Vk#�	������$��o�ȏYO�BHjBA澴�)�->n^���D����{��z^Ij�|��L#siѡ3Ǎ`�T���y\"')��]��w�Jמ���T���G�TK��Xt�kL�w�-hf���HiL���;qW����W�wKb2qy�LK�+��-9�ƾ.�7�>�͍Xn�.h�~4�/��=�c����.�
�~�\f����1)��&�^��tY�eϔ����\0|��(����Br2e<k,���RE��ħ(ix9g2
]׮�o�
C%�P�V�@�`CmR>�����"bu��ǣ�������1�|��Q�o6T6�I��(K��|�)y�͆?�\��N ��`�<�n��/���W�іQ�o���`c*j2�}�4��g�Z�v��0�I�+5+��;"bBM>������듧���9��\�.�[�52y�[-4(�&�G;�nuZ�6�5Y�6o�'͈y˼xF�\vi���b<?��p1���2pG��<��b�sym���{���1�m/Xο_�I�&j&	��A��t���vO��w�~<�
���wg{��:���	�<�N��1��T��H�D�A���M�����/�Cc�X��8����Ƙ=�h��'|��뭟�ξ�7�-~Junk���a�X����-��?�+�3O��2J�Z��^�*�6��Ӂ�(��G�Lt�F�LA+*�r�/ �W�F��1B0�����=
�|	z&R�5Zϖ��P!��C
�qF�Z��L�,䵺jn!�bf;��!Du7n�@�^�M{�Hh�mZ)��b4�.�\ӏW4I�=�{l͛ܺ���1L]�4��@�v}`S>Q�эU�Zuo�岊U�,t��RZ'�2Zz��KU~��șۼ��C>�v\˃�eP��'�Kl��5�Ɛ;��W��i��V�/ˬY�������h/o�N��;�U>TU�c�f���Gf{��
�\�=yO��Hz����;�׷�[��g�K���B=:�'�mT�+�U�z����(9cg��/[�
�Ã�ReY�[nߛ�V���$u�oј1�G&��_Y�JH�~�6��pүPE4l�_/�K7
��$��j��Z�E��1�>��,:IR�z})�1�-��,�_]~wo%=!E�>ʳ�M��&����_��
�!�&h�Jq�쏟U�;񝭊a�M�W~�$f$lBP1��>�,^˰ ��Z�s�k�
�Iq��3�~���Ϝ�Z~�0����̤��[{l:7-�"��ȼj����aX�f�����’�>��u����M��Rբ�ֲd�H�PJ�!��Q��d<ͦ��E{͡4�f�dJ��Ǐ�6$��Ŕ�[)�?$�@m���u���j��w�z����o���r��/�_����%}�M4�,ә��!d�M�o�l$X�G�,i�^����@Sf�i��Gp?o����nԇ�B'�j�X3��r*��r��
���u�S<���M*'}��s�S$�̂ �>�&�{�u	B6$y ��X�Y��:��rMi'�fӑ���Y(8L��}W�^�?���P6yx$\����z��q����¬�;&��ɦ��wT�=m�}��A��rL�.t��~Q{+��:z)}�Y�W81��<�`�dL���,T���wF�������IR�'a�A���ma�I�߭1��Ҁ �
Q944�D(.3:�@���Čݰ)��m�Ç�UÉ�B��^��sXᵀ�O�U��fh^�kkKZ��hU��a�O/xӡ�OʢM�X�0��
T	9����1�����7L��H��]9k%�`��S��V�Cn�aDh[?�w��=`Z�_��&eN�IL�/� �=��٪.��$����n-(��u����/^�]!���1Қ���q [�q�]�n�1�J����g��.�x�.J~�-B$��:��x�p]�7B���Z ��|�%7Y}H%�����g�
�Ҋ,}\1ϲ���X-F��2T.#�Q����Ka�e)"�K�,�X)ʫ�K�����'5�(q�Ccrs��%��߰y>>�y�EBf�a����.�0㼷8g��N�J��L�,(�y�2g2W�����[ꩨcu���uY��
�e�n�d�K�k��RM/�l
Tr����??)�XV������##ь\�e�%7[:P��{�gt@�[,�J��z��b�Ⱥh�ⳟ4���$��}�PE���+"���$m-�u���A�OR��9��<����I,�L�a�c�BX�����7�U���R�%�:�B(q���1��O��o�21�܉��O?�N
����w��U/��|I��;$�4�Bn.���Z�	�b���m�1�-�'��[ރ����G�=�>�O�N��K>��k�G?�
�ޝ읾;z�;8�G�ϩ���d|��8tm%O�)+>�_]1���F�O}��Y�g~�FW6{}�A\}�KIjN�1��թ��nt�{�Fn���$�t�V��y�#���|�ɢ6o�����My�2�s>�hz ��p��s&uv���?�%ݦ
9�z���Z��v������M	#�OM����^�j�ߘ���#\��3VS��$�I֍{9�\o�ޙ(��`��d��D�������M�*c��`R���[X*�����Y��/�0/�|:l��[�A�en��޳�Y�u+�t�֑������{q����ʓ��t?���g���yy�J��%G��%��5kl�o�}VIa����q%y�t�}n�T�/�7�h�Z,���<rr�\�jۺ�
}����~t1=*ͯ�����K�g�׷��AR��rr�B��GP��tts{a]u�쐣�
Z�)^��c�p]
q����2�!J�mG�.K�آ���z���	�#{c�ޞ�h�U��6��̥a�4���\�7�H�Iu=�Ϙm������:�K��u*�٩�S�-[�d;]�/����|���Gn�๺�xc��i ��B�A�
j~Z��Tcb]bo�](]"�W�s��<~����Z��t�����Y���L���浫Zࡓ��;5�YN���}E߮���*��!fo/��{KWN�s���[mK1��5�}Ɉ8kk^�1|�˹Tto������s��HӤ[�����V�h�f��	��0��n�NϏ��N�v���g�����ŭ�	E�����(�RM!p_-��[P��g�t�\���f	�#�Ux���e>���<��*��abT���2�8�><��	lฦg��S+�	�U
��m1=Y�W��&���1?
~������v�ܲ�R�
�i�}�XF�XEp��1l��Z|��\�����:�N5T��%�]k�! ��l(o.M�
U��%�?�ޒ[�+���sq�>Z�!i�%ڷ4Xj��J|4.xU��3����	�D�&Z$���S�&�*�dS|��'�[
�Ī)��`(������
K��%�_0_ͧet9!��]����}�6X4��N�n����[s���TH�[[_��cqf^��¿� ��BB��fܖuJQ��3|���f"��lt��n�V$��p{<<��$�)'
�aVM���"ﶤk0鮨K(�5몚j�%5*HSV�.�~Z8<!�DC{�;P�4H���a���0S��X!4����_0]X��H��3�p:�w~���M��4����xL��y!����hja�����%O}S��&���	{�H�4��p��� �:r�d�C�������`~�����D]�Q.s��>������,~�r]p|�M��	�2:U��7�{��m�W,ڪ~�mN1\"]~;�O`�Θ6��g�t��	��L����t�����eP{�����7|,cq梷q�
\C��<�x�������a�~�f��a�_��}
�{��
g�S��_"�c�9��!LǶťZ���Ov�E8��M�B��r����g�I]i���I~c�^*z<��Z�"�IQ��U_UT�1k���%�����H�
3�����h�A0��a����A�Y1����/R�՗�	�jzժ	�:�t�������B�e��#qa�R�_![���֊�9�J�[V�6�����ۨ�4��hK_5�~>�4A�	Iuwf��S*��7@I,�i�I����8\�{�,	�"<O�}.N�k!w
��J�M��W�m���Ɵd��QUoنz��₤�P�B)�[==���������7xn�zh]*`��۳\�U��[FT�[�}?S����lT�C`���,�!�^��O�ۣٱ�-�{�M�/��J���`Y�Z�	<\��{/�J?�]м�{���:
�B��ޮ#�d�Q�ҋ���Q�i�6��n`��gǂ�
��*�����b�\@���ꗌSݮ/�(��֤���;��o���Ox����j�u"�}���~g�et#����6�eT��i*�[A�t$o�u�-��n�kF�ɯ1�Ť�BoRu��R�|�(��R�����wʶ@3�Ͷ'A/��9<a?����سhi��Qk���duC���-R;�}A�*B~�K,��#�!�O��|�#Ruـ��u���HA���f���Z�������nR*��I:�I�zE�mFUA�3�&}k9���%��1�f�3�u5+a�̰Wm}�O�$4�LM�D����dcGc ����US�7CkˌZ�J�U?	���m,���WN��`>��@ئ�e�Z����/�Q��g�I�q:�C�_�i�t�_{�݃�����Ý����?�v�gۇ��'�ٟl����o{�{'��<s�n����`��ހ���@�~W�a	x��������h���
6#�G�2u45
�[�������u���G#LYH�}V>�4����JM�ZQ+�M�n~v-i�|�(0M���Z�X�w�� �r��o���.�_�� N�·��F�m��|������Ux/��h�����t�՟��M���I���՟ӿ���L�ҭ-��Ϣ�O����M��~���b�"
�cD�~�Jϧ�@l�ӯBS�;C�m��Pb�4���%�'o��o�T2�P����G�g��{�f�3�i���`'��Bu�����G�0�,�l�AYl`�����}�m�P��~).?�3��~3�:1���%N�Y�������rH�5g��]t�hЉ��h�����Nj���J/��\ZQ���� ���A���{���E�-OM��e�a��sӻ���#|Tb:�M��?nmn�{�Pf�@X�S6H7�	�N0���$��ƃ�	e�/C�*[tW$���@��
 @�Ϛƭ��l��M~,.��C�4a�9�y`ej7{� �U
{E��"V�`En1?&�V�.�[Yx�y�ն(ݰ˟EugK��k��`�!M����`�<�)�bLA꿉�Hp�P�!�0%��߸����
#oRm~�ٿ��[t–W6�0u����!���VF�20�; �O26_e}:2��&�z�5�S0��ӯ+�c���Y���=h�8��E����:t���U��8�6d$�4��L�ѯKֳ�`�]��,e�v 45٨T�D�����'�S"=��~͒��lR�^�b���n����{%�	>뿢��W�L�<U��3�E��ɧ�;�H���c��w�8����7I�$��Ȓ~���$�H|J

ń�q�Qld����NmYNk+MU}�˧��U��f$�oo�k@��;��^���y>r�-���}ă�7~���������
$�d��Ԙ
 �z�YNP�ʏ�q��W��n�単hD�
׳D�q�crK1�RP��yݰ���"/�m�U�����]�@���X�~�T�~��S���T|MKY�l��)��#n����,��/0����fYg��A��pD�z$�o��3�F����]�j�0~��2({��0
I�`�����PJX֔d+c�Ȳ��q�6ȱ��I�#�D��~�T[1Hg~A�݆&L�_��ܞ��v�t��7��+�v�G��՞��,	w���.�g�i���Ix@Us�Bb�3��;s<����_Y�JT�*�.�@R=�|�/��d�<�Xכ�Qޮퟳ��!‘B�o۴y���������G�r֧� ���*J
iBUR]i
	5i�_ml5WuG���2+XWoI���-����#Mv:E��:�N�`�d�y$���-�JO[i S��2�Z-�r�u���T�N"i6
�%��+Qo
%ضi��!6>
s!>���ϧ�꤁4

�o6�p_��h���ה,?[�h@�q�C	��0�І�^K��,���԰��sK�������I�L�0�㷒�v
�s���*/�k�n�]�S�
G^��(=s�ArN:=��s���_q�׷�C>�`�TJ�!詅�cw:Pv~�(K;
���00Za��$�8�o����v��$��$A���A����L��?Aс�)��y�l��6��K��a��И�zX�:�!��;$��)�.<a�,�0,iH��Ndc9��(������G�N�{�u�8����;v��.b�L�Y�.o��YM�������WA�2Zw~^�ܾ���)�/�]�V��"���m,���=�RI���]��j��wsq��!0�X��ޝ`9���q߀Z�~�_壪���%�g#n&Œ�YYY�̬�L$փv��)�����S��m5���6Z��b��x5����?�Ca�{��;>�`���t���i�g'[��w6��C�LQ`�Tˢv��/l0�k�k��L1�����x8XUJL���D�E��-�jYDL�_�i�����U1T��5wI�Z9_��P����
`s��;#�@�Mߋ[|��z[�H����P��*̖&�Dt9��� ��f8��rr7�<T�����U�#u����X��Ƌ_`���u�� bTP`_g7�"�@��
�mH���:h�N��;NE�Aa*��H�>�p#�6�N�>]�h���)�q�'�A�X�jDk�d����L.lO�sc����;�3x���,��_G��/�D�"/�V�p��؞���S�Fh�Ɯ������{פ����6z�r�������Z�ȋĮ�>��u�0���֕����̷��S̊[��<�jp�̡���"��qW`�
0.�����h�j@���H����� y8�Li�j�����p8<|s��1v��%����e�9B
7�k�*��|�

5���V�o�ȍ�v��z]�=5xj��q����5
L���`q�b\T��a�a�����֊�Ų%�3���j���OK�9\��!&)����DОڎ�܊�6<ge*nka�᣿,�����]�����t�г��}tH5��o�S'���)�UU�=��@�,���
HUd�j���#��4�p+��?�&;lMZ�q
��ί��+�˔�+ʠ�x���1���V����l��$:2-V'�s�`�=�XG�S�'!H� Y� �:E�6!%	��v*�N�ّ<��N1��`29��bk<(�8z��s��gj�6D#�աP��zZ�C��(}$>p�i��G�/��ץ,y5��G�=|�E�#�1��#��Օ�kqW��KR�q��)%+F���9��Tz:���L�
'�N�,���jP�Å��Z�C��l�T�j1����"C��\wdv�%eį�77jCz��U��8�@�>�X�4+*]�,��p��Мeɸ^�o?H?0-ÔK��A�v��<M��c��xJ)�L1�n��|��g(H�@ 9���S
v�oT�ns�a��>�U�j�@)<'�*�Iz|`U�~>��??��d���+K�=�Bt�?t�{X8��
/e*w��p��@� 7bF��P�M������&jN
^E��tO�:o�����9��D!'�1й<?�i��0p�bb"�
	LX�҇���f�C��&‚�V���!�S� D�#�)�ة�]u��pzs�p��f���yʗ_�^�,�~������2?��?��q2M�ύI����!�8=��sڍ^F	_�~�?��?=>��MUZ���\n]�����}8���z>��;�~8�H�3�Fo���M[����o��E�/ލ�>zsq�l�����E��)���.�{�G'o��*z>���)���/?o�`���������d|�~��A��wu���?��w�L�p�x���Ũ�
(�ϲE^L��޻�"���o��w���I����qt.��w���6��bS�(��i��]@��`��Cm�0�/��+(�gYJ��k(���*r����V%[�?�}X�1-�M��1K4�o~/��zC����8�\�0�Lf���@ۃ=<\�Б*q4�8�B#V�f�.F䬥ca�'����P������kMx�]�u�=�W��D��	�AI�X��/Z��g�����@��e��R柿�������=�i��'�=)���|���V���,31w`���_��+^Ry)��Fhj�힃�N��"~.�Z+�`p�5�f,%���pѻ�70�(�������6(�#u�{[&�L�j2���^d��0<��ݓH��v���آOC�E��R�o��p�4x1���f��� ��I��X.��+���)@Z��p��pG����8��u�:o@jX�\GF�s>�f3�������fIm��.E���3���VoE7hx�ԶR9�)J�v�F�E�=�Ü;�C��
b֕CAۑ��Q��%�)���‰{Q�
�l�)�u�!�*�J_�&:�X�C��,���`�G�p���;0�YC��ہa���_O��+�3v�T��H���	�8#U-%�2�fƸ�8�|U�@v�)�|~�Wn�\���1��\��@��B���ӈd���NP��N�z��|y&��?�r�(!o�;�݀�a��3�H�@�'��-�H�geq~/e`^��a�K3���g�8��%�q=T�Ġe�6��roHl#��4��jE��*�V��[���r50�t���q7�&��t���
wpp�6{�ǟ�CHvV
�ks��ޖU�\�lYUj�ɝB�:n���#Wg����qs�;d�N���m�
U\�]s<��6�}T3���E�2I�ܩ��i���E����9���;�}��^m��\��G�:�o��ң�>͝!YLn5/kJT�b3,gGl�L�l����BW(X4Svw�먐��ʣi>E�WZB�qU�Y��O���/���F_qM���(�E6* h�Ș~��@c
��Ok�4�9�~J��*+ە�g��S+��n�=�
4��x�ԛ��eq�|J$B�u
ׁ��Jp5��iŶ*�t���~%?��y
����<5�v�LYI���w�e6=�ִ6��I�;�Ǐ��`@��9U�-�y�*�h�y���8ռ��O�I�p��X����ܫÑ�vCpI���ݐ���;,�zoUʻ�>��܆�PMHs�!��ځ%%����G�@UR�r���^�%��yif-D�I��N:HB5,�'N����0�)��v|!Q�Q��(�:�{�S����ܗK�$��a��.\V�D����J���֒��x�U��P{C��mΝ�^%r*v�t�Y�3�9����ܦ���{�ԩM�?�i~g̾H}"ym]�g%;�z2��o���,�*g��Rq����~�^����s`�&ev�����I�MM��`���A�K��s��Y7���B_b���	d��O�(�b�T佒i�^^�o��B����Ʉ�4QZ���D(Y�FO�Q2�[B%$�c��W�����Z��C�Oȋ����TE\w�;��}-��$X�fLr}��1�1���Q����%ȃ���1$ѣ'Q��~΁C���(뤕�3��8_���#�P������G��v����'��~���t��&�[;i@�gA(w}Dwp��աt愴`s�n��j��Pw+���;�W�Ύ':��j�'s��۩+��B�׀0��QM6T齭�����;�%� �`G�
W�U�g������4���n��`��&w��7������!�4p���/J�F�Ԛa4��DcFkF3RV5b2��Y���U*��d��.���˓�O��é"�'��Y�lV�/2{O7����2g���^"��FqC�bO�m�N�nW��L�^�(�$��*�b�֩f=�ˆ⺡On��)T�T5��ha���j����+(��j�Lu��2zf����e�(n�!p	�"��=@����zt7R�c�8lw4��Q%��6ފx5�����u��žW�WG[����l�v���*���z�pS����_����#a)�ʿ�Bo3��클�&9��������X+�?S����+ܫ�	}߽$�a�+�:Z���q�b*-X���aU�M54�M��d��Q���K�^h-�D\4G���#I�\e�k��j����qE�)ɛ��4P�e�$���1z~��������:#Pnj
ۍ���1b�lݕP�R-�,��e����5���G0���~D�1�BI�tq��J����!w͟m��7q��J�Ȇ'�=Y-9GIp9��6w
ɉ�$i����a�OKk�
�T�'�.O)m�d����d�����ԣ�	t�S�2{��u�Q�<��Y�1��P���)a�K��OSo�PbZ@H���d^W��C�8	�1(����ͺ�ۍ�1���X#�P����It���+}�x���m��|�	�
z`����."��?'���z6�h�u�60
D+6�ǎ���Չ��!��p���7�N5��Ѽڙ��3S�K���%�t)�o�5V��
�����/��	�����%Lٌ7��0���[S$�
@��',<�a�1J�
:"����&$Ga�&���܌�>�O�m,�N*��æ~�vbp�ф	5�	!�m̢Lʮiئq���#L���̢J�]C��}�Lk�ְm�D]���Ď%�'0A-pt����ҝ��9<n/��A�U��ZO��+�,��@����`��7�L��e�:��gUS�!m���=��ߡ����x����D���}�%�t�oݳs8x����k�8�5��(�n��a�d�I��֢)P�iyX,��}�m�'/���[WMH{|��J�FH��!1�����v{�6O�ct�sGB�R�ƪ��7��{	�6�ͬ�൓\��p���n����bN� �Ɇ6�eq�YSB��N�� �9�c���H��A*���ڦ��qM`��L�X݂�Z��t�zJ�q�uL�-&ȁ���̟�8V�T������sT죧I\{|v�f"UhZn�iI�ff%��u���E�XRVo���w3�J�p&6��{�.Q�m��%r�H�[*6k���:��몓E8>a+p�ß~	��O6P,�� �~��u�� L��$�g�I-�O�%�����^�M��vZ�C�A���#&��I[JO����zs��^�w��4B��ziX��E[G�2�������ZF�[xWv���j/�����G��
9��iee-�3N�8I��v�K2BX�B��&�AA�����_=�Z��w��&��;]��mz���݊�b����e��Y`���4��q����W�����n2v��z4 C�EbW��H,n4g��[�Lf�Jh*��|4�~��Em��>��.j����`\������dZ{�8�N@�`�Ƭ�;�z�3=����	O�B��Ł�v'أ��m�'Xw[��*<M"�z��,Yr�O3�I�z�����"�@IS�Z�ˬH�3f�¢c�+����q�X�,��xб����i�`o��;SR��~���U���/�d2�Q�X�����=kw���+�=��
�4��dֺ�,�:�-[N�#�*4���H�.I�֕���������"qw�0f3�4[�MU�$��oZ���%r�:�%� �� ��`�oS�.��ݦV��3��
P�z�f��A38�
�}��]��Ǔn��ĨV'Ui�P)���Ѿ"?r�X<:�7��=�r
\��{�UO<��>��J����?�7���l	ƾ��;�T�a兯�k���>Egυ,m��jmAg-B�3Y�����z`"�0r�Jgƾj��e�f��ٳޠp�qyR��;nufke�KfR�A	?��|��n+�
�����	�|�Q�s?�c)�H0�'�b���_�S�*l˾���&�е*�N;eA��U��~9z[�!�oK������+�W�r#���'�U>4,$��e�:�+f{'(��m���j��	�1�;�?��^Sqx<.E��u+��ot�������s��6���e�Cz'Eǽ���46��F�.�~�`��=c��S�0�z�(h�A�w��*��QP<�Ǿ+��|ĸbm#�n2c���d>;�ْ�1���M�K
(����:>�����ׯ�=��Fj��v̗�a?۶�J�����S��ζ����<H�ø���]��y�LPv��s��:�����pl��ootg%���P��v���ZNnJ�VѨzn@,��4�t������dl�����W+������N<�O�����"+��?g�i+���ſ=�
��7��݈;�����6�2Szkyy��y-Rt�n�#t��d-[{���Ð%R=������~ҔLl��=���M�CK|`;��Jk<�qr������O��`ǹk�6���i���[[�I�%\��}:D+(�v=m,R��l>��R�0T:�ßaś�m���*T�C��"5����Vj���m��u�$���|M:�9�Ky�W�
�HD������f(�C��AuM��#��1�r����'��$0�,m3c�RV�D>B}V�}���@��i��8�#@M)9Vvw����{�8����kwi7</>@���u��^ʋz;q�d�9p�<�2�ǥ6���@8����c$��Rև0�c�]P#9|_��Q��B���b�
�FbK�,��������Ҍ7Q�޷�KX�>�o��TЃ๽&l��H>0|o����۫�c�c4yV��)�A�F�Ɓ�Wz��=�$b���PI�5 ��s��s!*���4�y��|6ߩ�e7��^uR[���2Y���fE$��OnD�t��ǹ
�ƹv?�RkwWLA�Sy���.�8��(��7�MTg;��^���W[Tù-�R�����\��>��5���D��L~K���+E$��M
�v\ٟ^��0=7‘CTNM�1�>A�0'j��[G	^�_O�����?ZH��O������h�>��(�߬�ؚ	M�X7�5U�I�D��2>S�j�Κ���p4�d��$�W�LL@��ճ��@��z3���QGܮ��,�<��4C$#v�uG��{�RE����rx奸�3�/��*�5��.�*���
o�U���0n��RK����\.?��h�T�wp�l���N��RN��ܱ����^V�~:��^������o:Nd$g9bJz�����wB4��Ŏ�a�;�!4�er�J[[_�T�?�^���V�%����IsC=C� �d�eG�A�崼-Q�U�uMj(�k�aΉ-��/ǥS��f�V*͓l�t�Z�q�u
�Кqh=S�%Ah�!����u�B|��V^8c#��a�e����ga���M��!�~,\2sR	_�R���[So�9aϗ���tz&o��Q�Lw�
`�:�&{��t�%SL;u#y$|���u@#eR5I�H$X�މ�Y&��R���^��Яw�s�	�v�G���y�M�.��ClBT��&!�~Q���%�é{�f�F,4&�����m�*)�w�`bO�@K]�Td�I��R��� ��ch�w�}��m��|���a����NHL�잱	Ժx�<��ݴ�m�k��q������o^Ȑ�Gk�ha����`���W�f�4b̜�$��'�ج轧��ԡ���0a�%|�N�GSu
lY3ԦI���S}s��=�Hl�����b������>�;o�@�5��c�e=M�~h��񪛠�7�>�&l]��G-8�n��~B�:-Ci �T��E���2p}�e�[�c�@�&�rd`���}�v���/֙���?�L
���%�u	r�O?�T�l��pYz�j���j%�3�6�MVZv�
�� O��V�C�3��7߈Ѱ�Y� 6r�9L�G�IA'>R3��^�F9�f~E��x�Q���oi��������?��MA3�&����k�.��jZ�3�]=y>�t������9�|nk줇o�
��
��c�<h��MǼ�.�^��?�;���r��O��M���B���dZ\?����m^�iK���#{���/�b���x/�]��$��?������ݝMn�^#���<5��P7]C�:�r�.����¬%��v=��A-��B���b��mk�eAE%���.����KQee��k�"^u���|���4תI㐣u4\�]���IP9�sd����֜mЧn�q�[�ǁ�*y�!aU6��Io%'����]6�86�tn(T��W���0ŨWك(��k��S�a���0w-���7�7Uc�]�6�e�ӄ�ya�ˎ��1�&�c�K���†�&XB��Mɫ�fV�r�Q��y������������w����'Z�����l��p	�%~$uw�/R��&���e�@�����=z��7����������6�>T{��������l��n�^\lP�ņdw��[�pgg��6���A_7��/	�V�7Í��<�?����-?���t�}����MS�-����_��i�������T�o�,�o/�70��S�1�~�k�k�i�l���>�B�[�H�tW�1��l��qp�ʎ]�����b/I�����Ǔ�u�:k�6*w����j�������c�-��%^�SA_+r�gg&:Kv�2gG+��UsՍ��Ԝl��dt\w �b���b��oڮ�4�������
wc0��
�!M���ь�ޕ�����[�R�=�OZ���O9��(ÿ	ue�\�hM�[i,2��yl0#��wχ�)��x}�����������!�[*����[?o�!T����@p�$\�-���(��4�i�GBo��h��b�g�l+$G���Z���x;VD��@B�w���[7�72��ٜ���
�1�b1�% .���v���^�(S/)�Y�O:Q^�]w�b��1�.�X�̬��Ȝlz�ar&��l�M$՝V�P]Y�>wcv������Ԗ�^�n��y8
/�*�(|�X�bc'�V;q�l0^A����{��Fȓ����Oj�`�w��_ƑԮ鸹�"�9�_��]a?�wƓ���<�����i�vʺ���ï��o�Gg�٢:9�\b?9��zkb�WR4���%��a���i*�kֿ���JS��lU���K�?�>�a߿#׭uE��������W3����l6}�O39>,�tt(ԋ���w���1��׉��M��L���q{fö���HƷ���
X� d��GPh1᝹�q6���D����
C$�
/.ރ�V&���H*���A��C�צۧ�R�>{�D������M��M8]�"x۪r���H(n�f�.��w��lr�?�O�	�CuM��	�4�y�z1�P�ᆲÐ��(��HǓ�Ŕr��E1 �xb�'�	���z,�W��y�{ra�e�1�|`Tvx?�y`e�zR�Nݯ�O��{��	\󁥥����zW�8�6�C�&�ʤ~6���c��-	�<�m%lR���̺�J+�A�.l6��lxX�~h3[\�F�H#�&ˋjw>>��Z��(����� }������V@�a�	���Miﵜ�;�al9�B���|h�gӗC4U=�&��_�E���+���*ܛs�����~V�������U�j��.����3Y�y�A�1L]���Yf�];�t�_�@WW��O2*�݁�<����.ZisN�[]�O�t��=޳�ם����e[[��M�Ǭ�b+��V�,��� ��R�Kt���e��?�ȝ�́�'97�Ar�c�me�l�q,ki�i6��"�,�(A��|a	��QF�Q��<�,�g�ug���Da�Ӄ���|6o���
U��W�>h]CP���L���T����cW���{��S��+��:)n��tO洿��^Q
�q�3��L���2+8��,�Frz�|6����(JYn�#W_�9M7�|}�jx^L�f����WT�% k���S�Zo����|�:4���b6+�������j�
�	\��x�
$��e5�,�[:0�8!.�[�."����>\^]��=���T�*��
�-�x5��ƃ��-*����L�[cj!z4'@x-�+$��u2�Cy
���c��U�"�[?M΢RY�#�]�6�&�l�W S�
�L��0o��k��|�r������
�?�p�����^�������>?xz����vqtxx����_��W�fX�f��j-c��U!�S1鼤,*b����b�+��Sc���'��%TF3�������v���v�1쀴z���	�L��!9�B��	��̇U�^��R�V�t�� ����Qb1>
Zg�Dv�Q].��M.風.�SP:s�X��y�b7�n8�ZhZw:�'�iϋ��yQ����L5���x����y�6���.�@JK]��}��ў)v�L�'}{�>�T���5��l�|6=7 �3����'Ǫ�R�H�8^���HI6��*����>�M���NL��p�Rs�6"K1��vPWx`:�~4m�*]>A	Z�ƈ7f�>M�Cc��p-M�s;t_��,?�u����>BS��*#s��K���lJ9�C�n'�B���f@Ƿiϕ?�Gz�8�~^O29y#��}�3�&�q�$`8�)`T����G͠�ii~��Yk��an��J�W�2/�<͇���9���Ջ�LF��g&��U��BdR�PD��3����Q���cQ��������y�
jvf�?�"#㟃Sb�!��{�T	L�ƥ��SZJ�z�O.&KԽ%_����^]���D��cg�R+�2�cP�\���j|5*�rwǟ��@��۳��R��� ��̤�[�ԑ�79fJ�,��2-�._
���� &�pna�	|��"���,')�Z�?�6X��/�J���M���\/��R$̒�o�����Y��0��}�r�툭?�>^I�1�	(2����}�Qغ�|���N��>yd����'5��G�����aƒ.Fg��Z�:�^,g���{=�
�o1�x��\��I��g�	��Nq����j�q����E��k�ur)Q���f����1�u�k=q�7�/œ���+K���{��x�_�:�/+P�߰�����(�Xy��O�*nov�<]��y���gH�h��4�qo���e���mf��;:�J7t���������Pk0IU=c���]��#�:D�<jlZۛݽ���O���y��.�?W���`�gr<ߘ=t��Ê�(C'�i2-�?�d�%�P�~*��M_6rǛ�0|`�.cyp4a�M�qH���\�^��eBV�5
o�DƁ�g
�g]��xop&���P�Y��"t�?�…�hZy�fw_�?[Ag i��e:��25�t%��A�\qQȕ��j��_A{��M�9Q�9�NL��9nY����������K����@l6��W�5�-k�S�_T�o���V�E��������~4��+��i�;�B��-0(i�\�'r��*/��V:�ು�?=���u	�ao����2̞uk��͏"l����N�>�>�4=�����V>0M�NGPD��OiM�~����難��G���b���k�]@[���Rn�����ߏW����WO�����h�����|v�����lێ-���g����۽���\�o�;��-2�t\����m}C`.���`��@⍃
u��G�鸦u�jX]cSզ�M��
��
�VM�%#
PԜ)H>�����K�,)��}ہ|Bx�mѯ�-L�W�~��/����8�'V�sEV���S�"�a�q<����NƠ�Ë����
��l��z|�N/$��
���0�h������~��Z����|�Xɤ��Q�z�#I"��)�3r(qO���i�����X��gx����Lb�&7�f�USS=�`�&Wʜ�(�^єѣv����[���_�0�<L���@��5ސG�E?v>Z��VOx'}�����/4�r��q=}ݸ�^�Nk�'��\�w��ⱊ��(��k�	4M4d1�M8�%����8�����3�����uɞ�)!qaz9�z�d�����D"\���J����E~e�״)��۫�
v0�>#�K�u��~���H3Z��2��D�z���RG�xݑ�%���*�?+1k$5Phd�)��|r=���e)
z�b��L���R]聁k�r��hww��b8��ĭ�~p��(�2��zP�3��ߒ�_:����b��KS<+*s��9m�xݧA{
`$A+�<o�<�3u�W�FZK�WrV�4	R�����8��ks�V�)p=5sa��ДL�O6blz}y(���p��ieV��HR"�1}#��^���P��Ɨ4P!�_\I5�ր�����J:*ڤCA�:�4k\�C�Z�S�B �)�������[ڦ�0>�[7R‹t[�1{̂�+7@`���U015~{�c�G"wL�3����3b���b��Ws$�\��u�2%a��׭-��J�eY���S����Ɨ8E���4]Θ�"I��?X��'�ek�'�5}����l����X������瀞^3���t�'ڍ�h�=��T�/�3�
j�7U�Dt�D	!S�l���E�����l�p��N��!u��a�Âf��}n�P8^��d��Eu����@;!T�}�E݇�����L�Rf� ��,9u�e�� @^L.�i+̨��J
��6>�.�3�bD��7X["��:�A�"B�2�et�Nr+�|�Q� �@�Y������)�ё�յ�.��}��Yi�Q�Yz�P�U��;��`�f�j�!Kl�����1���.��Ow�y���dg`sY�?$�:4 �-R(�%c�G�ʏ���Z����K���b�E�A�ዻ�{�tZ�,iW�V�m���+���u*���N�g3t?��x5��ČS� (Ɇ=���ݑV�z�omQ����-Y�S����>�&�[���IP��%�j���k�''���}$*��)�Tgn�S���I�>�
_R
��Dw1������m����bf\���?�JU�4"�S�棊�u��l�Pܢ�>e�
���
]�$�19�(\I�����CB�+K�b"����2p��[��
�u�d³�!��~+�M:�.����LS����qT��/̇�t́l'���ʮeA1��25��%��S�<J&As
��ן�p�K�o��?&Z�UvZ�xZ�_���Rٛ���IY��u8��v�fyy�o���w�x�$‹���#Ԅ}*e������t
g>Wa흠���u�DK�W���p��b��}��1נ��Kb���C�j��׻��V��6%�`H��>E�	=5�)dn"8�G%����H�JmB�3i��Y�bkdϝ�3����b�"?�)}��_҂�f.��k$,'��A���mCf��%�(I��4��M�J��
�
����Og�_��l�S߾0]g��fc}a"�f��g����v2�d,��]��jX�8*b`�A��� ���0�'#A�|R���Qtͦ3���j�	�g�@�|�q�F�d9H��
�8j�W�
�=qY4�Y����xe۵��'+���$�g�<(㯛'�,Ut�ΈhJZxɢ�֜@��d�0�g�r�p,i�\��Xs׃��:����8�Tl%���P��8L��x�e�&Q�}��k��W$['�X>�6e�b��‹�(P�(]�	og�AX�,SX	�8���A����5nN��JX"gb���f\�h�f����N�W��By|B�^#�����k"��A�8�����&E��I�<�QS�_^��؞	�o
���=�\��l�!�+�ʖ]����lh��O��$^����6	�yS�O(����ܵi�쥠��d[[���߳f����`&[s�����D�ʨ>�l=��o귺�䭝r�?R0���Q�*�]��2cr�UeP�x����l�[[q/�U�%��V
���"�I�3�Q��H5y)�j�vkK~l��e&U��D��W�_��L��=��I,��r\
?��N\�C�K9�p9J���v2�F��ၵ�/x�͙���9�熡��9���vkY�K�|7��
��Q���L��;�6�؝9��l��ۜK-��� ݸ__)�2t���c"�W�3���hf��u;Pj
�!ؐ�����%DJ|���u������J�H�"j	ϥ/�����t#��s��`��PX�\
��P���}(]�<a�җ��[�&�[�f�w__]��Kb�gC�e.�s�+fE�)$����7dӉ�1�έ�Ջ�H|�]��y���O�ןa>V�PD��q� ���Su��*k]KV�|����N��Ţ���x\����j=j�kݽ���w�wᄒ{�ݽ{�?:/�w��Ό��O�s���]<^e�O^��T�j��!6mA-Ұ߾~�H��?z��p:x(��,q����%�>Z�Ha�
��R�-,+j���>��cG�˙d�Ƚ�\ϫ7�Ju<M2��f�j�t��ͻ&{���|������kv��*�k!���Q���
���Iϯv{����e����Ğ~,?�N���X��A�h����y[�o��Q�6�����	�E��t"og��L3br�Y6���|Vld&�'�|��<Yv&H"�����YLq0!Ǽ$�,e/�AaP��˧W@�2�`(8���n;�oE^@���}7�=�Y�ftg�Uj���Ǹt]��ڤ��l�Ok�\�
%�?��=F0|�ï9GZ�����_N'Q�eh�;n���X�4)�=VLon��j���	ʟ7o'd�X�	_�^ay���Œ@n0��̮��N����^����w>���̉c ׶I�qU�ہ�~�����11"f�i黟Ej�����������o~z�y�0)|��?��`1YVA��M��]eI�Q4D�������Ɠ�q{�/E��՝eʲk��"��g_\ϑ3�m�x3B.y�ܣ9N�(a�&�wֶ�F7`ϠwO�1�����+=h���z�B-B@;�u�[š�؀'��P���@@9��g��^�&�R��k ����T
����`���:M����L�SB2.���4���b¦�0�\�&:��sX��`�X���]�o�0�W��m%$���B���<�D�`E�	%bJ��EL������I��I��l�?��wJ�tĀ�i���"\��Ӷ�e��?�S����$������V���Kn(ah�O ⥗���48��~2��:�#:摜�wF��rٞ�Z�k��-��ƭ#9��BD'�!�M�C
�e`�߁3κ��Vh<O0�&c���8����H�M�|Sܷޑ��η���Ւ��2F>>�(g��P�%0�5���v(�����fZS]#�O7���zƒ�>�k�?n�m�94��1��)���iZ_h2r�J�݆�w�
LVc8mW���	���1�!f;�QS�gCh�W�]2���@�+��s����KO�8��.�����ewlNSu!|���3��7A�Е����I�Tĕ���9���t���h�ÿ<Y�
�3ȸR.+����K�̹޼/��_��h�rg���m{$-n���<%����x������DK�������0��}��I�'�X��z��E��MI�$a��}K�2d��\␳���_�`����A���s_����8���;�U��k$�\�r(D
����1���E�'��b��$����.K܏�%{�C�𮽅�i0�S����\gN�(�a��I��|d��<�F��ʱ���1-1�X*xj���
�+%�rn�?p7�f����W��PoIӲ�������~��W�X��J~$��2	ٓ��:3�]��d� :2Z�#U�O/�cL�Ncļ�:e
�R�[m]خ�*^�ё�W���d'Z	#�	��i��pQm��He 驈f�T6�däE�v��6ԛMc�U�Ic�����FS:4w�k����Z3/e�N��=���.�Tm�K4���&�d��-�;���X5�0%�{7~�&��/3��p�����ޭHn*�Ԓ�7���;�T�ud�[��G�镅n����f
�����VM|$�G6�Y=��

qu�s�	��v�9
X���!E���*%�:�N��`m���������]Ko�8�+Y�l�\d�
���8�ǰ�(E���������p��H�۞z1,�3|�p�9�u��7����w���Jc��wy�鿛�b�����u^�EK������Yyn����9�M�y�ѵNW�l�;�͍�g���WQP�_�b�	���M��w�w��v��o6 ��ϻ�%�Δ���pE5!����L�|��K�m�q�!m����	��X���qԈ���1y�64=�e��@Pk!?��'�ZW�S���6�.�)�����_��ٷ�p
E�dH�=��E)N�r?�K���9�P����T�%x�@#8/@X��|ϋ3j2Wa댮�x���jڋ=�w��J�`�a��B"�l�2����F��ꑥ��uC}�de�<�D�]��	�D�>>7{�ȭ<���d��i�����{����~~T�\�Gه
���?���K�����$��R�G���Ƥa�Qr*�x��G[p��6�ss��E,:_�%���

�SZ	?�6���-?��X���C�Ē4�pQ�ߎ��#�VХ~�ĥ������di�la�ӈ�T�<K�,�#�oh�˚ �(��c�zm�t<V�G���B���W�u���E�^��[ݰ�L����c�j�2e��*��:�k���^gu/�����0A��C�.�_e���*B21�#1̰���ΈKQڹ�/~��\Z@����L�-S�K�L�	!�9�smS�>w�=x���x����ڽ�0b�}D)n
��E��qJ�#����L�@#�t�؂( ����܌`����y�(ܸ��S#XUto����&2���_��y`�b���S ���
�_���1#��7�ie$Ma\4��M�����J�{y��l�V���o���d�p���>��w�g�f���^e���MVgIkv��9���K�Ȣ��^S��� �pN�л��Q�P�{��Xi��XD����
���kW�W�k:�>X� �&���� /�򹃴���t��@�t�ӼI	�G�}1Av�t� �E�1��f�uRn�v��M��4���hy�9�
�!�v��w��]�,j�ku)���Y�WE�xs?I���#Y��L6~|6}(;L�	���uVV�=�Dg�(	L����/�<SJ�Jʩ���xWh�M���2v�E�x�WiRv�{��l6���v��ً��Ӑ
�(��k0�	����?&�E�X�w�$"�E�I�S���}�7�ycܳ������.J>^D��6��uKs]�������:䤲�V��ebP"�N��9�_4x�k����h�9=��
]�n�|h���׏?`�bA���MR
�3�D~��ڙ}��Y�I/<�Z�d�R|�l;'��&��6/�V�eets/„��l�bEy����?L?zY`<� ��7�f���T�&�<A[#h*G�Fb�j-_t�ÒSޫ7x���=� $�M<��/���r}98���TF��5=|�����ksI�੭,l�M6��6.�ɥR���`)Ǜ��߯%�{�3���_\f��V��%��G�W�/ڏ�|hO6���rI�1�FJ>�HFfHZ�]�B/?ؤ��qڙ�3Al'�_Sj�R�ؤ�O->O���xX5'�1"C�Qn��'p�J�^�������k�?C3��m��Ē����PͭM{�(�Wp��Kd%�au�'I3�I6�j��oW�}�o6�
<Z	f�Z�x�-r��iJ��TW�U�ٓ㉓�G
��A�̩���d5�$�����v��6kr�J���N��l����릯
��@|��ڷ���ܶV���
l6q���Y�������m��f��T!��G�Y,�O��D�,��,À�U�m�m�LUX��t���3��		����~�ٽ�9�JO��d��3������*�����p/�)�h����B�7t��0��>7s���%+�Ȟb?Q7(m�M~
 ���]�ߡ\�;���z�y[4�����Hb\��J�v�
�Ug-ھQ`u�M�y���XI���r�1Sq�s�<Ŷx�}���tQt�`�{0�I�2�S��+��_B�M�T�B�t���8��&k��w(�a�[�Z��&��M 'ȏq&+��|�ڄ�`���S��཮������U#���z�rYWg)9����ƃ���e���?u��2��t��ߝ�ZlPdfu$�˅!�����D^*����
ٖ���M�ɂ�Կ��3�L�Ǣ_1�k�����T���@^Q�Ɨ
������~>�^�
��D�э����ztQ��2'��9V���h�浓�I:��!��^f�h�2Վ{��L'o�tL��\�]���!(�Ƀ!�ܞ��ﺽd�joG��G�x2�}MZ/�J�p<:�	[<<i���Q|2���q��{�/��i����d���~믺�d0}?����!��MwO�oqo0��sw*`��.�zg���Y���|N�x��Aw�G�'�$�w��֫��(�w��{t6h���d7����7���Ʀ������l�;��&�R�X0�8X�Ͽ
�YCx��?FZ2��� h�Tb �x@.�m�iQ��J7��#�� E�0��Z3�t2Zɟ�u�6�q�d���ily�i,[��^�鳕Sƞ�z:�0�`�rI��ژ�����H$rX���W+��*��,Z\�v\��
�ygǞ�������U3F��^�d=j�Gb�}5��d�ny��������/�5��q�!|�$�q�v�H�י�WI%��n��wb�o�d���i�;�7C���� Iy��ɯOOY+�Gy�x�~;�1GY�!�j<{�d�3%�I�f�޴T#w�$��}�i5�E4�%����4�bb71��X���N�8���b��~�l���U��f����+�P��p��/��ó��w!�jķ���(�&˸J��Q�d�R�#컻]����m�I�u
fRK̿��~>��މ��+������9\����WP8�>�#Δ��3���jĽ�����V[e�U�,媫���G7?%@'�]����^C9*��F�b�k�ם�j���.�@:�;�A��X0A]�H[�EϞ��o:/230c8�{����'�%՛����B�˦@J�QO9}*��'d��t��x�J��?�B2�k(�+�Z�V
��&t�fg3.���$f�6_k#KC7���2�x�H~Q��x�&���do�0h��GJk�!�р�w��\���{����.��@^��+d��h�#I����w���l>���@�%��<6��	L���7JqsL��x�B�ω��m�\"��Δeh	h�2�b�����'��i(��k�{�b�����y�ƴn���P�Q���<QCIV��
��?k�\�,��`���M�"�`�3�RR��)�j��dE;BK�"��r,�h���hBvPq��e�M�#�$O�V���5�n=#�����`n���Z�~���c�
?��c�J�Wm��{����G��98�Kþ��`r�WO�aT��:�����/B���U��ե��������0�8ԡ0�)�	ej������z�Y����I�V����z�S
�C�9�મ�d�PžXɯ�Gz>�H}.�_� <�p�e��Hr���C�5����ĖCV�]�2���.��K3=�x��]+�H�ь�~�uE�(0
dU��O�jI�+5��9U�rU���oP[�� ��B���(
!M�)om@���U&A�a,���(�sLW2��uӖ���#,�jeW]u�nA��6�-o\�]IC�p�}:ա�w5U٩*k���
d1z��+I3��>�k�xCɤ:�K�z�]y�t����/��˜�V|@u�k��25��/	d���u.#f`��h��t�)�r�$u��o0e��,��|�9��w�}�y+�ܐ�B�YV��F���wN^;��@��y2�o�v5�����ͺ�)][��b1�[1�����}S�R�Y
�k	,�o�V�C�;Ν�/O�l��d�����x�<�1E����մZ
��`snG���sC��_ww^>�_��1l�߆G����;튟G���pt�����@.����0�^����i�qg��B��&�gz5�V�uK����f�I\��m�G9���7���`dzQ�`)�Y@~D�m]t�8~ѹ��Zj	b�)m[
"���z{F^����E(&BRL�t�uXRx�#��ƍ�?��*x�Ye�����_�h��4)E2֝	��N�q)��#\�pT���K�K*S�cF�?��(E������ݓ4(���r���+62q̈́4P���Jѱw��z�D7��..�*d	���a���̈�D9h��y���Q��2��s�����^���ռ'eN�T{�FL�ذO�������,>Q�)u&�As�3P]�v�+�"��:۾>�+�R�Xj�q'^��̿�s:eBVr��^�}�tD4�߬��{�E��S\�^Q��/��Y����Oy!7�w#������S���][k�0�-�A��]���`��t�"⥰>x٪�!��k��4'9Iہ�I{r1�&9���|�r�P���A��I���1�C �#Xs$����C�ʙe��H3o���p�8�v[���q��k���g����~.^�G�Ʌ�*�A�ǹu�5�՚�]!�BgU*�RI��{`��2�����K��ҭWݻb�(�f�T�
�B�}CK[��QaJ>�1���1{�E/�`��!�̎~��8+5K�x.�/Ƒ-��S:�2K�m=B�~p�N�
����LČǭ߰
�M�~���]�6�VZ��pEg���2P�J�Q1�8g�\w��?���.��:�L�J�H�o����MT�e}���&ً���ixy
���t�>��3Fi�Ya�|K��Q�|�Ybtͺ���|xx5ɔ�:SĖ�1�d��S�RJ!��M��z��xz�z�i�u8�*��{��yy1��\�{_qm���B] �_��w�Q������s�‚�#��E�Ȩ�����6�Վ?4��e�%]Yԛє)je�g�0��8\��acy���v�P	�X�
e�(�:1��6g�[��K*��b">�2�3���w��i	X��J��F�3R�n����c����+�!p�0f�t�K�	�>�!�K���4-ZE�uIS����NPAp�t�B���	��
I������]Ko7�+�	P��Ћ�m`�J# u����0��ċ��d�p����sH�pw�$�/~��ǒÙ��|�->I4L����ƌ�_UF\ɶ�=dWú�v�_���qu1(u�l�6���J!Z%zЋ3)�M�FD&���Q)�|(�W�SFS��(�V�{
�M���u����	���fZ:/+2�,�u�V�z��V��һ�G/k��yj
&g��ƯO�@�W\�x�%b�<Tò���$m�V�/�9�ϣ�{�}����N��Ɏ��?��7aS9>:�����V�!C���d6>�7��Iɾ+?F^0�`���V݋����l��-�W�{Wl���3�D��3}и�u|}赺��N�i%�7�<��h�&�
�3����Vpk�-�6�%��Ġ�� ��d�{ө�[���E(�Jk6�4�Uwך܊^Z�!�}O�n�ϟ��2����GRq�$!�O�W���x�M�]@ث[o�a���'�Fd�S�:�S��F�������5�ı����19����1N��e{�b�%��A�8�2��¹I�T$.��'e9�*=�d�}�5V�p�	�f�D�I>g�����'KόZ��;<&�/��k��;�=��}m~;�������:�(�� ��ݺ�ܗU!w��� -P&�Z^��XJ
�Yt'��g��ט�|�D��˳e!�6�9�p)�H
eaC�����A|�H&�<}xu�����^ON�>^d>&�RD��B��;�^�
�?R�	׳J:�y�-�>o�3����JZ��&����{��e>�8@ mԐ�pw�(���V}�v��y�s_�n�0�<;g��uȽ�I��r��tB�����|'�X.9dXR��C3����[˙C���:�Kaj"L��ߟ��<�1ʪa�xXNT��n��}˯��V���;!�f�\��r>^t��P/�:�r)Y���K�1Z�i���:]m?�ʧ��ݢ�U��ܤ�
W�N��:��0	f�r��<��0�Z��2�JBХ�}�>�}|ݴ?�����?F�Xo��D\[�[��`
1���wr����$�
��dWL���Q
�wT5�w�Ұ����/!hg�M魖	Z� �<�TY���%��ˢj��^gۻMQ�`��c�Ў|��Q���ŸBr^�-8i�����n�O�Q�F����;��YK+{�D��!+��w�=]{��8�}w/g2�x�䟣���RTX��eA�O����OF�ӂγ��ގ<VyS�sl�L�����+80	�ϡ���Ã��y:K���ť�R���
&�[����f�E\�s~����
���kV@rps��n���p��C47�@����+"#�ܿ׫՗�l��5q/����~��
��|V��L@�U��G纨ڂ4(ܔF>Ў����Z�ZP�NY"�uى3��� }n�$l�HM��q4��.�zln��^�8/N�fw}(>Ül��hTF�wY�Ͱl�n!�9i��	��
�~F���*�j�}������i��:ÿ��2ż�*�4��r�܋����rַ�g�A� �Q��{u9�rzH�S�ܯ����|��|8�7ξg� �rM�x��*�#
�zU�Zl�R��p6.�U۵:ZZ��3@'�>.�p����X.7(�,,��)b9��Ү��5��u��
�R��H�O�^sU�d�H��}���/�#�sS�����/��@u{�ќ��W�,��[4�P짐Bű4�Oҥ,�0�q��Iqa�ƌr�~(��,7D[!��p�A�6V���K�H&��+��(��j#�y7,Zg�D�̄6(�	�m3T��x�_ĥ�D�6��7KIt��YSd�*"���no��}�<�=\���4��dp��y\�ί]O'����ѻìT�Y_�R��S�6���?�F����P!��Y_d�f���+�ă�)���. ]wD���V誙��(��m1�86����t�%~ۺf�bh��.!�����:Y�a�=dW%�_���z�Q�b���ύ�ǡ�ҏ�<�C���ي����P����:�海 ��~�������	1��H�V��7�4
9�@3��x�[�c�B:�q��t����̹������[�k1��!�!�i��nX4!�t9�4�YN����j�@��B*�B�5�g2�>����?�̝�R]~E����>H7h�r�״���Y���e]*nYc�2�?�t�d3j�S5��;H�yp��n�{H̝�c��,�O��զ�L-�j&X��IY��D=E�<-���ڎ��J�3��T��),5��)�F��/�D8o9!1�Wو���"�5��o��qwz�K%�9��t,���t&6��RƱ�%.����W��Z���n%��<�ͣ�bQn����	�1%�E4��9[I�Ƌ�5��3[316�x�J,�^��!�~�d����b����`�oڂ�!��ܥ����D�s*�������q�z�]h5�+}6$	���G�)�*�?������{k3�6�Y��E9����E4�B�"�K�]mO9�+�=!�.���\ګDIE�N���6�^�#ݍ�P�������x=v6���t_Y��w{</�]Cy��e#�N1���*H������)�9!W|��F��
I�&�e�~�Sh�b��,4�K_k����O�Y�FO��GTu
�����ˉh;R.-
,�o~�aU�|�W'��/�$����*���C�87+�WC��i���n[�xY���c�BP�%����@�\�3X�űI�ճ����i�XC7ZL���m���i5ǝi#���Dl�OX{�����N��z�K(�{eGn��~�^�ۆ]���=�~�1rj�p�Tм�>ys�+�<W��H�QћX�@�Ad.d�o}HQ����u��u�η�.�?�/�d��u�b�u����sz$x�gq���Z��\P!e19�S铌w�4�l�5#�E�8f�[vd�r�׳��p�Kn�Fxh�s7�m?H�8�m�Q�+�v6	g4�~�5E��!~�#��	M3��J.�/jh���/��R�v�+���J���vZx�mcl�k%��q;Y	�D�6Xj��ڊ�8�T��Y��&N@��#U��}�M[��� .�4<"a�U��EbxQ�:.&�3�����u��TF��t����
�h�W�v	���Y����;�h�H��Z
K�}�rC��EC�m��sGd��+u�K�UQŷ������1N	}�<:��X�J�����7�ս6�h7����Lw�Sy���p��SA�]_CT���xcn����<L���ŋX;��<���׳��l]����S��eu^/����._�Dd>$�P��2�sҙwPJ�PΞ>zU�Q�-�V�?B���iȋ1�G{SW���s��0�m^!/�&*�"SNE[����wX��(T4�+xb#wE��Aפ�{��%��	�"K�L���Ԏ���n!��I��o����?M�`�̵s
��t��N0l-\$�ao���e�~��F�z���J�T�k��j���k�z���@�Q�p_V&�;^G"�B���2�`��L��'f���C�D�dX��2�Jw~B^�K풆����~�t�����%�+h�����#?���|홟]���Wlj�'�i�X�8��B�."H_2�€���U���=���-����R�^hV��~E�5�U{�6�aYv���b��Avz
n
�|T�p�m��-���r4G���|��]�(A�H��H*�O��
t4��y�2Ұ=4ϑ�Q7�`
m%�ސ��L�QW�ә�Z��8�/m�/$Ҕ�_T�gҲR��xfy�CR4�4Q���]˹��$���D�r�����;��w��E�ŕ���6��0o�Z��h5�-��.��$=�Q��t
�
���|��L�~J@Wv]a���D�Ҋ]���k��h�A4%KR$S����T����wN�n��tl�.RF4�_����{W.az���SnH�i�p�1���,�]Q��Q��ţ4�b�C
Ҍ��;��v�ކ��b��VH!��Q��췈*������Oj�G��g|]��p1���	�0�I�J��n��|veRv
Ӣ��!]���:�ڧϛ�/
g�qb�.EJ�O.-�0�3:]6��qUdB�cu{�'��~�$�J	Ҽ��K ���&��54�Z|��Vac��hy�D	�æ�=P�%裃:���>�P��H)��	�:��X�+�\_��.Y�����b�ޑ��]�_��~^ܵ}��M�=vZb�(y,�{{�iD�'+y�$�s/�1��y�v���>�˂ij
�IY�� ����}�볷c��1�'�3�*�Z^��%M�\�T������1��?�6�)8��LneE"Ff��H�޽hY��{��+�U���'���V�&��s=�����n�)\!3�~�7�4��q�oe�6I���\a�'o�v����	A��_ݸ������N�۶�_�)�����ʞ�G���|�b8�j�VDp�yS����B�����|�����Ϋ��.秫�	ڇ絉�h�a��KyF�i�Y}��YWn�������H�D�N<�y2�3�[�W
���48�/?ڤ�'����Q�{�_�ͭ��IN���}""|a��
�I�}��鶔��a�5��M8����k_��P�D��l]#�Y�}�
�5	�	/��FǮ��_��µ�R�¶`����
F�H�E��'9"�	F�W���tAzA�C*f���kOjI��p/'q6�I�Ġ�d��l�!�ǽd���߷����!��l���x9�������q!��n(/�i>s=�b>�+�Y��3����Q�O�G��k�"��w-R��#�(���h	'�`Bq��E��S��pW�6g�q��T|t8�"�uhN�u���q�e�ƒ�2�x��<�)��� -y`�h��6�B'���\'_,?(Ki�E&��_����D�Ѭ�����BW��+ȳ�U@��ɭe'�.�W`63@�_�������]�:J�ۑ�[z�����!&��.�е60La�ѩ���dmlQ��g�~���ؙ��)�i%D5۾,zg�$����5���C���\ֵ�6��w��~���j��a
�g���W�����!�ѓ?@�"~x,׵�~X`��u���3����=g��i���3��I6r�����|����b���.6̙T����o��O����{�
=G�"&2އ�Q����*�q���駐��8��I�֜���<|ص�pJ�
�
c!�?g�G�g�Ė�Ԣ��	��QPk�$Ϯ�L��(�|�0��}�������z�/��;�=a���'2�YT$\ɉ��=dNj�?L�6x?_����&��5{$|O�v����S���—w�f,X��@Xpp[�-��|In�L7ӄ�����ڹ��v�����+� _����A'N���l,�aOu/����.�"���h`g�˟����3ր}/@|��U��8���=T�s�b5P1�ď�Z
���ox�r���J�tD�!�'5�(
�H�]z��<ߧK�T�1j��W��Tl��Gi���?�ɼS�Й����ח8$;�CK"xE���)l1AA�B+���VJ#���Q;�7�<��'H�����?O�BQČ�S�H�'��P�h��_B#�Y�%��6�#-��K�`�����2� ��{����zw�]�rLj�<%�Nw�!_��dkb1�u=z��x�wfT*]&9TI���L�POD���SDx#N�G�S�(������c�Y�R�'��$�?A��"))_�d����0z�&p��Q��4�l����N��\�q���G�f2k"��=Hk�uo�{�v��B�k&��片��m�)n�wgp��w.��8-~=u�ܛ�5��X+��=�"�|�8>)+���8����E�T�/'0WO�����O2rG���PB��8A2��D~��O�0R��V+旝/Z��䖓����<s�+��Mō"��A�N����l=�e��V|�Ʋ�8;�EV��g�R����A��C�/v
=u|R	��̼'s���ڡ��I+��Ck�8�ق����H����LQr��ø�������OG�$Ȋ�д7҉FF�G'�%�RШ�U��<�:�W�4(쮽��t(�B՗�q.Ƀ�@`�5��J�嬨i/��O?�ޜ������H�Ӌ>�O�Jm,�Qo���O�P=-狈�+�q�K-�ٞ���9f����C�OǏxٖ�TH�"�i�y'��r��r-<0D�mz�qg����4�|05��~��f�J��\L�#a��o�n�u1j]��[�ာU%��BRTŐ���a�۩A�N�2��
E5�)%���>�v��������j��^�����^��>%^$�b�ઋE�P�a�wՄ����������s�c*�k���*��f�C4*��Q��o�V^%�w�v�rB%���<4�L�k�G�Ht���u�}}�B?�+w��6����}�!��<ɯ['�ifP�t�i۠��g�t�b>�i��տP<0�Jꂋ�]�Nl>�_l��he��$�����+y���g�E)p.�ۯͦ�B�у"�ϏA�X�i4�)�N7٭�!ń����p��^�_���U��uh���SH�l$ɱ%��2�g�mQ�mmm+����C���)�`���%)
�Uz��3rZ�G���w��|�%���ױ�y�D�.��� �:�pF�8<�~}0p2'%Sk�3zYO����f�-�`p&�uЉ�F����N��W���¾�n,)�0�������p\1���Ii��JY�r���[�b3��q�7��ی~��E ���֥�iZ:��u��S�Ԭʐ�28�ֱ�&�L�oc�4A�JQ�p�t�������3�h�۝o�ڠu.�B��f]t�o�U�.��o�WөF���g�Ӊ��[��wJF7g��VDAt2��Rj��QsfHs �� ��NL���˃lcёC_N�GQV���沣��&�t�;Oo	��*4�x-I���9��g���
ȑ��Y�`̉pು$%�oC��>�4g��[��:�䀢�=�l�Z�i
�!�(%�i�4K�O�­Ud��?���#I��/����c���\�yF#U���0g2)��[X��5�^ƍ��D���a�>sӨ��\=���p7�Bx���B����w!���N}��
�y�׀�͜<R�e�I�E/&�E�yt��������Pp,8��d��fbjSa�M@mC|Ou�W�L����pAf+a)-졘H0�
�Z�]���mh�oF�C$���$�J�m)-K�%kF�2K)��<��	0J�1��BA�19:�Gf�x;��n���vk8�ϸ���6�ܣ�u�2\��`����oka��s����]��fx˙�(��n&�-���U��i�����|���cn�V��'�A;��dafCC��^���g������dt��j�C��;{�2V2�t��2D�$l��� ��ˀJ���uEݜg:[���K�6����ѱ�\�`�%�{�!�xb�Sũ���.!GE�6F�����܆�j����|��C��ٲ�5�K��TW����V�(Җ(����p1� 
O�52�D��t	<�Oi������Z��AX�21B_�/�G����]mo#��+��`h{k��`uc��$5��ڪ"��y[Y2�R.�����Wr��,;��/w�����<��̐��2Ha�1�XH�#�E������;�4(�H�H�q7z�	�����r�B��4��o���6���&6�;�ϡǁd:bxj�A�3�RF�J����/6���"�REq�} �&6`��(�mx�h,���(�%Kx���ҁ��Y������V��K���X�J�(a���*���F��ג�L�er$�g����2C�'��x���Z�C��z������R�e;�Ø�Sn�s�+�F�׺C0U��c��^�""�����f%��D�,��@�	������1R�����V�>���|}�Ϫ��xuP����PP[س��6����W>kW�X��Y��){�I��z��K1�!����G���VԆ�)��l�����b��
�?�>V�y���E;���(ܦ������v��u<������xϋ�����d�;6l?C)�f3�*�u�NK�E�rl�՗91?�eH�dͧ;0_��t�J4>XTc�
r��-���[K�<Sٟ2C3�U�_ٙJ0�醃���*�隌z��/k�-��RY����!�	g<����,U���:`�jf�A���?���#��>��ȣ�
��>����Ig�q5��*��(��2C}d~���O��������}B�����2n�Q��M��N�.�����et;fCլgw�����+=>q"�@�c`닯W�Z���U3G���f�7!#{%JYÀ
���/�Ja�y�f+�͈U����A6{R�>�#����z��)
V�D{zWq@oꦢ�$i6ʭ
�a
��t�_d�=��%Q]1-8~$R'
����	��{�DBb�RNol!7*Xow��/Oz���Y�)��00�N�<��II��%?H�@8?9�N(�yĢ%�|�?M���]T~���L��DsBy�-1Q@�~75a���j��C��3X3�k�*�-j&�l!�_L�	_��X�W ��񖎉���%(f0I�&"�Ё�=)UE��������"��I��N#�:Y�Qf�霡m�H�/��c�#"��?�2���>��g�D�:.�-H5�����'�i��D�ʈK`�P����/KS$��>
K���;nL��M�קYW�*n8�P����#J���'#��ӑ+'�i�F}�]�W;�R���
�ZV�?���PRw���ž=�s��U�����-ti�
��Sʹ�6åDL�~�Xz�"��_����D��{L�r�c�- �(�z��<dB K BS���V��]ޡ��q���m2�h�a���@�f�?����a��۝���I�QL��P>�	�cDJ�|I��W�?�
��$l��Y�Kc�{7S����ͥM�@<+K���܄d7R%���]F�о��k�}I�D�N��8�3��C��[ٕ	~�nnRā���~5	&��"
}N�q��9Ƹa��Qr�81Cϗg���6�pND	��e��	�7�h�-�7��w����O�ɦ��5a��|t��k��s����]��_8�(^��II�Ko$��9���\�#�[4��/�8}�c}�Y��l�ַ�ș<r�KΐN�;�c��`��lRn
[�E�$�,!�`����~���:x6o��N�ϨBDm�$���7��w������Ֆ����~�XZ5��y
z#�F��wmY7n��:#�턅�%�0���0�$:�j�q����<�?A�:�6x(}S+26붸o�/����f1��}�"�CꞶ~��,jU�f���E����l`��A�j��t)�����E�ٙj�������|	.��Znq���{�p�6[�f�|��li;�["�����۽a���m�Е5G�d���AeD�=�\�i�q�9z��V�̊�{��
^)*������_�fsE��|�\�^B�}M�(���������؋�E��U�.�?�6����X��#:!C��:����/�
x��V�LVT�Yp�8��G=��@+|��(��R��r9��{���{g���z���_��QqN���7�{NM��)��5��"�Z�w>������5-�Nc�&��BC�xj���=.�Wqw�[.׷�(K�`J�zB=�?4:��3����&׳Kt�����unmŨҡ!s��_$�EH'��D�>B��^g ��p�fK9M$���\T�e8�.t�R����x�y����=ZQ��GX�ڣ�j$�S��v��5>���}^���(Pk)�6
�e\�㯵���ex�e��iQ��� P��<(!&���2د�r������!Lo%�f�(��6)A���\�F	����k�
�F��h@�=�k��n�"ԀQ����M�i�Yr�f �����]hC{�W�!�Mt
P�f����N^Ttzp�]◠�=9j��1k���V�y
A-A���[���\@�Ir�.��mEK����Ume|=�P}��]|YK���GE�!ŗA<�4����}���v��(o��K|{)���W��C1�_�4�ۨ/�w�p���gԒ����*����t� �.$��e�ǧߦ�؉�˱�jxVV!�"�	7fy�dMGnJ���)�ͯ����=�s۸����`�vbMMYv�K��h�8N���.�z���h(�x�H=������ HQ�����MK$�],v������"��Y��&A��yΦ/{�<����`e���7:{�{M␥ۻȖ�<��Ko?�{�ã�zμY�^���g�����W�<ˋ�w�$�/��,�ʢ��<.�0����^�&ko¼U�"o�F0L	C��z��:a���M3x��7/�%��@����&�8;|����ǫ�Ay[�!Za�X&�dL�˦^��"��.��|���>^5fi�ǓU�ը?�x������H�(.�X@���[��`�A�-���!U�`�R$E�W�&�̼ ��(��8K��{�A��i���ח?^s�|tvH\�w6ɢ�h��΢��7����/{=@�c�:a9<�%q��<yً�,/{6�;d�<d�!����F{{�ر�y��;TϢl�/�h��#�ES����jˠ�;�	�1K؂�%}�{4��%�/�e���*b��ç�j�-�zt:ϊ��}_=�����2?̒,?������h�I�b�w�a����=��8�O�9�M�}�>��x��g�&	�Ġ�5�W0�ٺkX�9JC�/i6م@��|3�K�n��/��9��x�?�I�<�F����#��K_c�������}�(ˬ ��K�u���{1\_�٫z߰ɗ���`	L<�'�+�C���
Wy�-"6
VIY��3��{z����f�ę�zi�jh,QO��So�}������������_,�o	�����/�9H-�새�&j0$������v�3��kA9�I%)�^t��&�]����]��P�%i�u<�<I�g����M�FN��
WSB�5�SR-]a
�9L/���e��֋x�G��)ʃ���s����Vᜈ�2�d�b���$ȩ�$�D�-��t�@�P���Q9?�H\����5
�6_��Nqp�w0੐y��C�AW݃	��*ń9�m�4��f �+X%ظ��ӄi���
�L�3�n��	������&Ⱦ�q`+��+�!.�8ĩ�B�0{���	�f9�i�'���1�����ⅾly�+@�d�gMu�a�ޓ'�CE�I��_�����ӏS��a`����&6W�f9h�=��r�R�XΡ��.4�
G���u�\˭9��A�+&�vl�^mD��.�B|�F�	K4�8�w�w�0p,�t�q���k��ɾ���/�A�ݐٰ�������2�5���a��fL�8���߇���ۯ19��s\�y�(W����D�%j)*��F�����ߖe��
16�b�@����7�̑сxA�r`�P���7���Ñt��-i�����͠m���o������0>�Gme�4,Cb��<X6�pb�O

���+����߁',�ٍO��AY�n���t&����&l�1�kLЉ�ܶ=�.�#C��o�B==�"��n�q�j2��I�j$��2�����F�X]�i����r2m�~#��O��Gŗtss�n�:�-v�ڐ�.$�+7w��v�UZ���=;$SZx��H%�\�^���T#X������^	���z���x�/?V�in(/.^��ϕ�%ʞ�jQ`�+��!��0}c?L���������4b�@68x�8����T��
ژ<�?4j��E�D�y���Rx����e�uZ�c��oI�F�>	��D���>���c�n�����D�q�mF�G��Ѽ��n�?���h�%q���[\�A�q�
�x��e
�����`�sRx�Qx&k�&�n�J�?@C���&7�3:gwv�t\w2h���<\�*`�g:!Hz�\��CQ����M�S�ڥ�c��<
��(f��Y��UQ�ӵ�ud��V�0��H�[��4$��w�T�`h�����V}f��g����d[S��T\<�6E-��1�X��4��`���n#�/)��Z����yK*��Ճ<d�����^���SR����#�e~!�M�	��j�"��� �1Rv��0�N����ѷ8#IR��l��k������]�ǁtg+B0���������Q���Ԏ>��3m'"����T?gɍ$$(r�-��5)yθJտG2��
ȽUs���7K��a�E�+@?Θ�UT-��SL��3�pԊz���
v��'^�W �uI�貳�$'M�*XH3�d��O�N=�ഹ��Y���M�(M�K6#����G0�l��E�
i��9
kG�����5ͷo������E�d�0����NS�G�=brΎ��˞��|I���b��9��|��A��}�9X��L�`�70��VkP�]��h�����.��@G{�Uh\���s���Ĉ���E^mܟ>a��R��9���f|Gj
hS��
��`'�S'�'|��!
4&J�ԋ��^�9�ϟ���8Z�[Mp�����0�+0��7�흶~��.�4?q ��Ug��m�$.��y�`N��ר���������`��c���c
�6�6�B��!?#�@鸟�ױy�=t#�|N�'�RBni�e����LY�
��#���R����y��aݟ�YO�P�������ܕ����8H��?/Hu�g��_�ފ�
����4�e�/�#1��U7ΦN�.\�`Í<��ٽ"�����-|��-��Gq�+J}1����>�Ng� ��>��ժ,��'Wn�sg[���eK������%K�cY)G�s�Xn�b5�E�O�{���DFz��� ���C
S��q'_r^��`�HCS.���NY�W�P�R����'ӷm��{��|6͊�6ys���EP1����2P8p�o	��d�q}�$��;y&>�'
����N5��[���WM��Q�z��+Rb�9��z��;�*I�pzJ�*t9c��X���o����ݾ�;<IVy�[�YV��+�՜����	ּ;j��`�=]�QV�,�K?��$���U$f�$�ݪ�{���[D"m��pu �E�RN�j4G�Ho½�M�3�Z��� 	����g�Ep�V}ϧ�}��;��gYGʒ��$���~�Y��P��-��m����d錓�{'�I��qތ�yF�|vJM��iV�@M)�^Mxִ��Ȝ,��4��Y�U�2��X
���8��苁oUvֳa�� I� ��}���g��߶�����@�\�6	��0�
F��)=�3
�"��}����0(j��!b�]r��_r�}��Ɯ���m:���؛L�2��k��9�nD�MB��ݡ�Q��~���}�-��`�@ �ҫ�+*q�bi�>@��8��U�h�%K�p�Ь�I�(L��t�
�h8��vX�[�z���.t}ԉ�J��5jln�w��1�B;(���6ͺ.���rz]I�~�1�G�˫͡�I��x���k��e�+�s�R��8�2�
u,`h�ve(��2Y�H�%�����ͱ�+[H !�!���D*�Bk�?�Z�pbV�]��C�z¶�[�H����ט�=-�D� �F5�rΥ��8mG{M,�A!W��������V�C�
N��m�j�)�J��]dU�=��q����� �m��-���"���3�Ķw[̀�'�Ȃ�UE��`S�������8/q���<�߉u��E3�ܟ^Ы�`i��0R��xS�(��x^����b�(k u���J
Ӏ�i��8D)�lۣ�fp��Q�G���I�j��;��v�s�e��)�����G��ҥ�,b�.�z�����
�x�RF���,ق�Lٷ�yA=k���Nk2�t'�kaSй:R
���7ĬC�OR�A'�����9�UxԳ��J��D�c�8��;\�γ��yOPW�`Eo�As�2�R�q���i�i���/�U�9���\PB�1
���۹]K#U	��L�^!� $e�t��.��
�yFlF�ž�D���-Q_<0�1�V�MZ����I�:�d3���9�9�a�Ԡג�����Ίk<Æ�f>�^�*Q�F?���" �9o:�]ͤ��f�3,y�1��ɣ�~r���-���@�m����rQV�tp���ŊdZ�z�l��S���1���G[OA�ڼC=�Y8��`R0_�&��YO�+�{��i5â��Nk�9kz�͏�UY�(k�4:��@�<��6��E��Q����"�U�iD�L�-êb^R����*a
;��cE���u&}�O����
���¦b4�7;��ɓ�*Vpt	�g�JV8��JM���u���T��Ż��u���U�Nr��h���G���+󞥫�,�\��r^a�sڢ��:�C~@��=g.���<?�EV��(.u��2�k���\��;��UI����Aq���E	oߡw�AߠE�!���B����,�j�?�����>7�[ͅ��a|��VMMeW������—C�*���u����~e[4:� s���xD#�fS���X��>n�\j�z�)p��C*�AV0M�9�|:ve�;@�7
!�36:�A
��mo\���50�������s �NhQ|���o���b�`2��f�Ɂ#�
d��|#��b����O�mP�Bf�`���v�2�����$����^z�}S���^q�S�
OS�^�]�$"��X�|�*ܶ�e?�S}�����p��ر�Zj��%�yׯJME����5�5��ʻ
��{��ٓo���h;}5��!��󊎟m����Y��`�l�L�53q"�]#�F@�����A��7�"��axj�ʓb�)hb1R}^��1nRA����7N?�����-X�,ڵ�)�<<�g�`)�J,y�a�!��9��)?i_��\�]��%�X�����o�����s_��N�[��Vc��8M���ka�|��M!ـ����u��Zq��7@���ln�C�{R���௳��S�`�q��W�Q�c��C�g��z�=��_��C�ź������<�q��,4!];�X����f^���B�{X\gß|�x�	M	�'s��b��^i���8�ѕw�#�"N�B�e=2����!�]x+��y@�hVI���#�Y3�
e&���1�˱?�/�?xZT�h��m��l��7��4��&���W@9Z�����f�Ӻ�q;	�1�_�4����{u��ĺ����B0���^Cr&�!�
�r����/�����xA�L�Ұ�V���m����m���Ew^��c�Z歟��$��8���[�A��?4�:L�?b�x�D��.,�K{T��k-6�P�Z�YBXe��e�Tu�X����w���q�u�CGZ
�:L}h^z����8��]A
#q�1��J;�T�f�:D'�R9�E_��S<o�{LEW��������������g��/lM!��A�o{�?�S
�>�7e��K*O:v�ퟟlѾ2f��B��ġ?a��,��8|w|0x��`����6:�l#�Z�j
��X�:>C?ݺ�Dxv|02^p��wZ!�B��N�SĬ_�Ku�bM�'�1��&���G�L��@
C�7����<7v��������v۫�ępG�~0�zu��O�C�m�x�r�+��V}�X� �|K܋mo����m���{c������^�:(� ����_W�py��|VP��<o��o(y��1z7t횶�Z��lı���ryT��x�!'�B���.�Zv��
���m������%��B�"u�Vˍ�Z9҆[��r��C*��rᤙω-n��]4@A�C:,�d��'V�nf�d��?����+��j�n���>�ہw(��`��'�=��{����8�)�o�8����H�K�&�e��f�+�Y/C����e��7Y�R��P���=u2-�T1���|4讑�E�����Z6п&+�y�z��ˮ.#.�LS/MW��O���8N�KG���5�.(��3~�B�m@��
(��D>{"r�%�Ü͖A��{M�զ�R߈��wˋNV�	�̪F���G/5X�IK4�;��� �b
�=,�u3�$A�Emu"��|6�gxC�x�c�@��S��Ţ���D�,P��q㰱�}�.��V����yv�C������]�c�ϸ����Z$xc�|#M�.����Z��͆@�A�z~-��7�?9y�(�y���)n\E�Ȁ�M�����o��7�o��L>�O[F���]�(V���`��q��+��@kV��޶J��3��{��lJ��ι�u���H5��Vk�^�����L�mA[��1��*�U���WK�?ve���m<{�gJʈqB����z)�}�D#OV��+�~�m��{��>�v�[J~@&�j��zpT@�����`�5�کu�^f��`��Z�w�"�x��(���!{�2�f�o�t�B�+�:��QK�P��2�C��u���-��P�Z�Q9N/��t3wV����\�i�1u����X���,�kg�z!�W�dT�o��hFG�#F�Jn�q0�@�p�;V�����!̝:�j�[j}���r�ӎ�ܟ�K����c��Zx�8�S3�r�Ľ��	���@�HR���i"��q.L��X���9�FA�L�v!��0�LUf��d|`�;��b�,��P�˰���-�X�_�����Z��c�k|���

��z[����z���0�W���I�rm%�SzԺBեW�z�³�9A{�	_�^@�W4g��5=&�|\|W[Q	��oESl�MJ���+�	�< �!|y�_̃��>�jDq>��ma���>$��и������tI�Ɣ�\�����ݝ��]�[{Ѧ��Q�in]K7��j�����V׹�g)�:QoQ˩|Ze�\���F�t����W��S�:�w:Hj�0����S�L���o+ �rm�f���ߴ�`��_,�l�S�[ٍ�n%��	�ha6$��D^U�N@T�饸
�4�'�r�mfFq�^@\J�6��#�O5]�Z]lV��r^�d�D�AN�֏���0G�o��)E��>�ʠv]�����2����~���m��H�~�_^���?���~3H�{A�#���{n�H��:l�L���q��i�qX�BWZ��I��Ȕ��[��z@��Zr�ڏJa‚�/*ߪ�]����&��d�g��RI���yn��5�2�4v��V���.��o4�v�B�#x\�E�F�	��J٭���խ��Nw�WW����>tw�g���꧉a��nol�%	��r���m�9Eퟍo�ه�Jt�⿰���<,�W9��;�@�N��\ů�[�s#0�dI���0�I���~��G�n����_���`t��:���|�E���FX� �A���\=oT�7սs���Eo�v�n�f���;6ܩN�	�AyY�?�b����Tħ�u�Ԧ��jp��XV��W�.��y���m�\�!tw�u_x�m����]�N�0���,����p�[N�1���;��4v�$���X�6���v^�g�#�%AN����'�"���X)E���ȡ��\�'��^��:c�z2.ٺ�j9B�h��6H����N��{`�Z͸a-�O�7Xc�
�u��1�b'�:�37�H_1m����KՈ��紙N0Mw��޿�۟���x�Di�p:ew����y7-��^��[
!��T�?'�M��
SxN�+�p:g�>�	>b���[
���ri�˥�.m%�Սf0�p�Y�ֈ8���X�<��*���u�E��5n����*�a8�"G�)�wy��V�M�L�Z�O(�u�X٢���A���vw�f�
Xz?+������m��R��L?�
�!�9��f�
�=����<�����&t`��̡-�%�^��A/)<�wX�/�u�W	u�줣�D��q�沒M�M��T�:,Ϗ+ a"7Gw�E.�5�Hڏ���tD�Z���գ��[/��&G�|�rb��j�_�.C�h��c��(�����]YK1�+�>	Uć�GE�h�/E���-����o�Iv'�c�v��'��L&�N�3_�ӹC�o�3Ś���er�E�CzC.�(
��b��rvS8���,�Q�ߴ��&�_���l���"��b= ��~#���:[.����g���_�$z��>������~7U�\�d�f��TU���	1✢I��6.J0G~ŋ߂���dk�h۪�R,��Q܍p��Wh�d ^�+�+�Cu
Ki�HC�̀��$W,���:Et$N;z%	���92vY]%���b�B�CU�m����5���U��5u�X�`��JvV�u��DRC@�J�6��!��q�y���V���rI�p6X�mԏ,�x��f��уׁ��5ݐg�Z?p�F�X�j����ݥB���2As��@�
>�~�~Rڮ�����d�w��}�~qG��(�=����r���7T~�}[B�ȓ�ǔ�-�	b��m�`@K��*�ֻ>�>G8���$z����Y-����{u+�Ebt�R��R1���1j�Ǜ�H���U�y{n��E�J%n2����N���6^p3�s�YIvg,Q&o�Ym|�lB"����N�63{���D�To�FȌ1FZ��ƙR�!d�7�r���[���ڎ��A�ɂE�~������E��β�(T�%���C8ƻG�7jui�LR�+�>7�t~[�@�/���s..�of��]KSG��W�q�FkI���L�)�@��T�I���������=��3�����!�Y�LOϻ�����������r�Ҫӓ���~�4F1��vTf��e���;�de)>
��8Z(���]��S%7����\�:z���Q���G�LP�;��ᦡ=�ӑrѿ���2ܧUiK���hZ�K�o�C��s9ਇ�R��cD�y�-�,��|�ؗ��b�Gw�0K��I�ȃ���Я���t?�EI9M:�R�TCf�a�45����cO�2���R�ѯ��oњVf_X�E�W���Zk��vI�v�v��e��C��o�뇥Vb��ԓ�i:�1U�1�ozntj����*��6�q��k&'���#%�Z��r0�Fe�O��n�=�q.�9�����\�\�
"|ϲ�5�\ �R�F��	�`����b��Y��S��Ʀ�`x��؜�7[1��籇�(����
�����늬������@t�PYs�Ll{�<�+��>��+	�l�xR�|}C�U�94���<��f�
h<Czy����2؈�jJt-`�P	B��p?|@�W:ZU�cn�,�E,�'��\��~d����N�
V�O)���^%w�;��.B���⥨O�,�j*�>���AD��d�G��z:G����b�rIG�iT$��p5�`�Rj+G���a{�.�g{��:2���&0y~�>���!��4;�b��/�W�=�~5�ݻ!���\����2X������O׬bN����#6����p8%BG�)Q�f��X#UO�MQytV�����.?宕K^&�n@#�4�x���>{�1��kq��(�ܕ��\��i�;��s��rv/.T
(��zBm����Z��I�*��'8�t���V{��+�hx,�5�vl1��{�/G�|=}���Ax9jY�
�nq�V�%��������-
�(Zj�͹u�!��*�\XR���f�����+<;OW��6��f�w! ��vW���o�`�˄)��>[�|�Dr5I.���&=�b�ߜT�H��W�E|�"�sa�V���սb�n<��M�DM�#z5;.4@)��ֿ���U{5�
�G�r]uQ0�j+�t�t���ٟ��1�b�Ы��슺��}E��
-
�,}տe�ݓ��};�6ao/�BP��w�P��z��~��曠��};��t�:IE���GD��E2�D�<qZ����6�eO4������L$��y�SJgSJm��02W� җ.�+��N��{�r�m;³���	!P���m%�và3Y�hQ�F��^6v�M_��⊑�jM�痠��M�fOj�6m�_H�j�hh�c��rL *�K��|4lD��bl.���-,_���x�ht�{�:��E[�g�Z���s�����Lκ�]���e���Q�;8�PN��<����T!��9/՗Y����`+B �3��j!9
� D&�N�+-����lE2*�!|�
���l2�~�"'�/����|%\����6�E&�	�q.*�$�dLՙ%#��'����fħ(����^��n������f��n�ݕ��I+Q��-�RIvTFS=�荬�ja�pG�};�f��|�׊&W��1<�����u��5w����*+�P�Y��jm���u ح�f�W}�wìw]�w�f�\O�����lW�}��z���ku�ZM�7]�o
�]�����R�k����v.X�D�M@�;|&WhT�M��h�s!�oo������x�VhC>�͵��8�06`u�ס�V�����
�h��ٴ�k�*��cQ;ּWrt[)NPM���L�^���QW5 [�����3��Y��2�[��
�!�V<�f]A���g���tÓ<���Lƒ+[#�[�UÖc�U�d^����~<�7�3
 rӟ������SS��A+��Y�V��#.��MI�W���5S3&<b�~$)���X"^�_]�E�n1�Y.Y��X���Dv��]B�I�j4�g�)��7V?���C�%��D���|)Kc	�\�O�Q�o��"d	�J�767��,���C���}d;��dx���4��$�����dJ�p��4���@9[ŋ�����������w�����|8<>:띜|<<���zw��o�ǿ�/5��|%z0�_:sF�3ol�6ő�;����
Nm�3;{��{���vu9h��҈.7,5�)F|J�����n>kNh��	(sK� E�Ւ�ʍ�-�F�a��d�L�cQy
�AF��`a{��e�@~F�ӧAz�Ά�k��)V4����]�o�����B��
,�n���p��]�	�k�a�H�*�AJ�
�o����>g��l���;;�cv��j�5��oP"Ȝ��p� dr'�`��?��=�$NZ�%{}wl+}1c�5o�IG�_;���J�X��o��V.�?��tX��a,�;�Y�C���ʇM�T��jn獬�x�J\�1�>d�ؕ]�|��&^�"y}C��t����$�D9�F�`��}�GE
����?���ҼT�d_iBߌ4��i�V��&�����߾���y�!�mQ�(����#�
�
Twψ�"T}T�&�&���
��wR��g�R"?h7�.�����WЯ(q麫=�JH=���C]�_<��yY?����H<�p�g��ې�c���r
�Jg<��r���oV_�`^�V���ݦnh
dGbz��?��@@�C����\}�,?��[�odWC�Sz���
�<��cp��V���a
��1�,�JЏ����6�	
�_��LJ����U�A?2Z�lB��]���i^8�Y<������E�֝e�F�@� zC:̅p�Lx]9�X�6��jw���0[�g��X7�e5����=��?̹����VuxpCu�|4W��!`j�0]�p�={���0�wbgw�ٚ	�\z
{M�X�)F��]_�xq��)�����s5��܂�J��ftw7S��5F�����|����������N"��n@'��>j����6��GUj 0�F	�6˺YTeq3��z=���qW���VKE���9�R/�G:�`@���/��ʛ�d����w���/�g��m�`N�[f�,D�#�D���x�[��x��G��pTŸkk�u��Zk����L�c��5�]_��Q���]C_T����7�9{5I�R%?ם�|�QW���#��Yݼ��0���R�@Y\��R�5?=�rw>���^=>�`�zhF�3����2�]��x{_c��#.3�*�Ӆ5����&��щm�ڄ���4>��98E�H/�qf�OQ�t-~e��h������0Y������u=�E�M�ka$�0r��M�oQ�ޚRĜ�9T�B��[nB��ub��]S��gS�3��q_��\�
��C�R=T8�c���|"u4=���E�O�@��
���������[�P*��k~E`������i�
nZ����B=\臰�֠Zެe��P��dJ(Һ��*����)/�Ҡ��)���0I��!y�
#v}�~��{��r
�=*G��B�&Ru�#�MB
P:��`��j��Iw�Hiu�/'6�`��9;SSx{��܂�����C�{U��R���Uf6)�������2���]|k������e3�Á���KUw�C�Ă��$�e��2�.?"���m��,d�E��2�����P�̛E����,�Y������<vr�W�J�X�K̿�d�JצP���75gj8�Y������,u���.�rD2M�����׿C,���	�9,���3�:���ӄ�9�8���[�K>���Z����(�D�����W��n�B����<+�>Dt�d���s�\�Rzo�#A���_��s���H'��K�3L�o��H��]}vx�WtrD�`���2_'�,��<�?����^�-�%+�
����<�]���=�miW�4ܽ��8�T"\�����'�+���@KiY�3�Zs����x)�~xO�#��1™���X��K��HF�w�ƃ�� ��h�jw��ꏠ���<Ǖ��}���� ��'L�.���������!�"��XM�p���� $��1��8��3���+�B��U�Î�Et��B��P\����N�$�g�'�iq��0oB���8���"��ŀ�e_� 2�[��0=k�
��TD�&�S�	]�����k.���<xw���rj.̼ll��p��ͅ�KZeXVAnw"ռ�$�����j��350�#�_�%��˝���� 4U�㙇\��w�J�t��pMc2���5 ��"
��3�5g1�ug��Բ3�;Li<��xV��7E����Lu���d���Wɉ�^�24��X���R�LJ�R̈́_ Iy��]�$����ͬD�4(���ܡ+ϟ�X��֏໖���@��!	C�c��5�B�<b��j����\�D��j	�"�����t{!���+�0	��^.�3l��	�[�B�4�bZ�$�~�Y�7���<N��.O���( V˛��հ4�ɕv��:&�=������P��m�h�),�;�0'TǦm�w��/2M�	�OɓgA�2~Vt�͖�k���G�0:X�U���P�YV���8H}��գ6�v��ި�%ϲ����X�7�7 8i�=}c6�Ս���g��V/�xXQtE^�
���&�V��3�[q����W���X|܃�!�`�mTz=U�[|x!�]�H��t9w+m�/Bog��{�BgL[�������3>����������}��>�&���Ƹ,�kc]7#��-.NO��u�C�gX�_��Pi�,H�������شD���޿�{�^t���e7��՝��`���*�J�f�
X[�0��3>+���$��9�����ܘ��o�m����8��l9��i��؜
T���(z
��jF~���*�F
 4B5E{�u �{Y�X���^hBgs��u�S2Ph/�O^�l_u�ITD`"�s���i"!iF$7ù���`��Q%sHȴ�������\h��o�����G�|hJ>f�d����)��$�����gCp;��C�@?��ދ[�u��U���b��v6��!*��=�VFb�w���Pl��X!\���Z<zK�CL̄��'�+!�5Iˌ�D�
L��^@t�ň�+��f�;���
� nS3-�v����#��:_'qh�mS߷U�A��
�˛XM	�3&G<l-u��f�c�����a埾�_Օ�f�y;(�8@����/:��Uz�c�no1݇v�G�759P�u�{��$p��ho����g�
],�
0w�)��'ëɓ����tv|��F�[�:�2(j37g����z�To��f{<>Is�+���M6�������–jsb`.�-�O��b�7����_��)P[�D��>��Z��zX"'3�(O5�*�{�˲|ebnQ�L�MD)8]�t�ʒ�~J��G�+���,x:�����L���v��R��XR�l{��.�A�i�Ey�a9܉��(�"!��o�
�3p�/���DӔp`aD�� �<[�$pD�v�SG�%���]Mo�8��W�r��6�Ţ���@b�=
����:�!�.\��}9R�!���${��rH�{��2�F�U�[
I��]�\lIM�p�vW��y�bԍ�
Kdz�ڛ	{������3_�#�V����&����ǝ-U�눅�/NG�J�ߪk�&��bl>,�2��1�O`��,ߪ�֌
.K�8L�>��U�	��|�e~	G{�g�ũ�Bl[�d;]�-�ڦz��>��O�!�<M��*��He}�n��G�]��Ц�E
҅�>W�*7T���sxw�V��6�z}��U9�yVaj�8�J��D�=����Sa�-"��Oz�2x�rb\��4(�?HU�8���%ٯ�@f[�)|x�����͓g�F%��}�e��c�q�����ج����S�i�����͇R�m�n��/��S!QB3�x>?�s�����QM�ʊ���d�sU���xU�TeV:��3��@�񂬰<��A!��ug�h�2��?7��k.
���9-�֬��
��6z7yP��(��������FtU.�U!t;\�K��"��Nb���H3���I�v�H_Ր���2��-�1�
���l�>�0V�Y�/y�kVDV{�@^ �7�/�S��[�f6�n&�ʋ��O>��<À�W�<��	��P��+r(�/�;��_�Z���gN{�m.��65�_��N�E��g�g��p�V����H�{G�"y)�'��GvH��N][�(�с]��8y0h�b�S�_���Kr��r��,�!�h�M_�Om��Op;�{�4r�h�FzMgs�cp��v�0�ܥ�&��}��zR���L����G	O5�a�*U�1�M�w⡽f�oe�!9�g���@��#��ީz��1 9�?�,�������T�e%�2��T�]�bA�M�{V�B�Y�a�tu{J�V�UF?5�n;��&:CRp�t�����F��I%����m��\�rf��:��{��������K	ϼ�m����"W��&s��H��q1�W�l�Q��<���H����5�7�kOl$ț�	��ri���I�<�� �
����HulʍZ����Α-\�t2-ЁeҴ�ۦ��:���M\���-(4:�H��͜&	�Bp8���)у�\UP,�IH��fPP~��4�ߕ���`�H��V�GR������To��̛�|�Bu���07d�R��V���@�*4@�'V����9�.Le��V���б3) ړ��a��$�V �B��AD캺���]����5�u�N�£��S��<���1N!Wi��=��m:.2�-2���9�'x���<f
ȝB�y��|X��zX"�gę�t~U�:��3W���4k��a�Ʈ��[�F�)h`����x:"|X�
q�v���SCi�c�����#e���5l��77�D���r� 1�cG9�dSY�))�@�E��$+����]�n�0~��]���n\Vm�=E; $�x�9?���
��qb7Ic��6����ݺ+��4_^�7o�UxZ�1�FU%��xx����i?x��wǗT�)#�W�p��o��t�Ze�G_��c�?��ap�b��OY��x�ϻ�LΗ��)��3�����C����a����aF�����3����7�����q��
�4�PA
�5��E�^z3N��
��&�d����L
J\T�;4�>iL��]i�
�ȄR�)5�@�M(Y�A���7� UqG'٠����Q�� T� }���]]n�1��`k�xl>������u�T��e��0x��t}\��F!��wC-��u�ǥ(ǘ�	?Mk�i�
5Q^��a(�*Ě+zY�>�D� 7�n@�y��P"�RW@
��2�V�f)i`ɟ�𠱻���f�5oy�4ȟ������)��F����ɨ�6�(�m�X��/_dS�'�Q�M���P}���R�������lGWM����6@@�B���˨�XUw��l4�% ���
�P�c�syon�-5*�Ը��`$���E%�	�)���|��I�E9���"��&��m�X�n�~�}�e}����:�ah��/�J�n��fR��ႝB5ǤDA3���]Z�
y�je
�b;�
c�g�K�ŋ����h��6f��T���z!�5%x$��7z���с�~g0�~�ҽ�����5�9�5]��2l�nK8 �9Б+s̎z��^.�}�jΨX�͙W�{�̞�+�,Y����'4�}���:`��f�ǘǘ05�ª��Hm��	�&ȱ���s��B��z�8a�#جpm���QU�hZ�8��z�S����)��z�x�Jx*Xa��=�^rZ�^烗)����H|�'�6��T�5� D%2f���y�j�#h�l��2!)-0^x�V0v�Z
Yz%X�zq��Z>�rr����)3������W0�����-����Q��L��8��P�^�݉��oO�/����E�zb��xZ�F�Y�Tt<R>)a�	�g�N�h�+G�Ǥ7Z�]�u��0a�B�i]7�Gs]��������G���Jq$>пBvB���]Mo�F��Wꡗ��r�$�m�4r`�.�����Bn����̐;"E�@
$HO	�������ᰦc)�f���-}�.��A��dJ�6�����(�+��Z��l�Nġ��O����Š\ LE�a�Q���R+&SH5[� ��9a��{4�83m��˪���}�!�*�h��1M	#�#�4.�-]��`N�,mt���C��׉rW`�Rكؑ��A�|z��vә�.ļ����@� nxE(S���'�Q�Y*^�4e,8�5)1\�e�Z��,/�tbH��v�j��H0�����Ќ�AP�J��7�2a	�N������^%v���mԉ �d&8L��QPh42(�¡����˜0�zZ`�a�HTLT����vg�z�ˡ��E���Hls�3E��y�D���Admasপ�9P�����C��Ф,�™G�,<�2r܊�ca
q�㡬U�
�p:en�u 
	�c�`��d�06N4���H�/9�	�Q6eL>@�=���e^��J��T��m����C�4;�H.r�K�E�����Tr�)�Ί�mW��FS@��R���m�rKk�pJ��V�	"M�£�Q-�*��2��G,M��DSf�ҹ��6��
�K��	�U�Lm#�M�g!��d��$��������H�{�"�t�[0ϑ;�3�`�����er�
���J_��N�*�W�$��!��*�R��2P�pI����YE%h\�'��c���˳��O�#�?@.�+������+C����c��X}HI��&�`Z�t�`���do�}�iwD�f.�f�Y;w{�b�5��3�?�>��n��]�ϻ�����n��mn���܄��c���'��<�5u�Ѽ]w��K���ά=\�U���]9C�n{��Y;��K�R_�u��=]��V�I�n�H���N$��5e;<T�i�wL��������y���ɕ��~�ٓ�� ��J��B�%r�{�\/�@]��;=��sv��8E���˳����/痟.����rq�Z���O���Ak}K|��L~�7�G�ɯGg���+��e~h�~���f=^��M{q���o�W������9���_|�~�}����7㧿���S?�B��3l+W=���'�Wo4]��~x�B�~bW��Khxc�X	M�~~�o׎|zd�op���7R�գXq�+NI7���
Y�]
Ũ�3W3��e��}�b��y_���[.��C����R�d���
/�K��Ujv7���u�')�s�ܜ�Iu���#��ceMȠ��Kj���y
i�� }�m�-�d?�ǣ�T��#�c<����a������s�
����w_��z�=O���ޠuBi�	eDӝ�4���512��{g/.�տ�kk1쯔� �&K�n�~(�RXa�����K�4#͍�����Y��'��Ҥ��S�Y�%?d��㺜7��D"R4�A���b}	�
q�Nh���U��Fw��d@��K�o,Xi{�u�/sp(�e�V|��or�R~�x�꨸���(l�r��G���S*��)�]*�s�`�Q����; �A
`��x�;�`񎊳��	4�70ߌ��b���HP%����_ڑ�M�mJ����b�԰����,����l�Y��)�^ͤ�H����'Xbè��1�Nޤ��	��M	A��u
�(��#7�]:WC�t���I���(���x��BM�����=�G&/"�E�'V�
���{4�p@��r�BK��ʤ���zp��
��B}jZL~i���<y(���=ˍ�?uV>�%�ޕ�߷��f��zj���H���6*���U�S���Y���MN��It���REj}�T�_A�h\;W�5�'�t����ʽ`A�r�^���nJy�6�����N����xeX�!�$Dk!�M�PⱨAcZx��f���@z�����T!����ph#ۊv�=�<{�x!䞬fW��l���j�
Ɓ&Y���N26�z�o��e���Ԡ�13�J̵�;��-?��>�1J��1)�v�2��J���o����l�������u�k|TS����4Ip
x)�]��4w���C�ݤI>O��>�����a&E}�Z۸mʻt�r��q��y-�^�df�C�d�PW�+�Nݥn}�vy��B2>(H�e$��
VJ1'IsG��I����͏$A�Elf\`�i6e.B�k����J�@�LC���FM��#K��fDC{��� f��*�/y{��������v%FU;<.%j��y�P�����(|�LG��O���](���?b4硱:΃�+]�*/c����"�ȉ>�����K�h�,�N�R�U�1˪D�h�u�
��`�)q��a�[4��uE���K�CU�UEho��g�Q�P����)�غ����.[E��Ѩm�*p.�a���>�vgNcո�������*���ƥ�dl<}h���T����PA�M��/�
�X�A��s%6[�Y�{������C9)�� ��uQ���dŬ\��?��ӹk�Eo��l��_X�wM�8��{�H�8OO�O8�,�^"G�ϖ�ƓAy���q�M�lV6�H�ӣ�*Q"�w��{yR���c���Q׷w9M���hύ�����]�n�0�z(bLH�����v��B[Vё�$�vؿϱ�4iBe�nH�K�$��ڬ�Z7�G�Y�:����3�"��c������Y�Ϙ�J��z�Mߐ�``��Th��fS�nj<[�q&���>,`��F��]ƞ
qR�k�2v�b�=����q�g(w:7��X�pF0
��uV���]M����I��8�v�ӭǼ��[���<����9�.�F6��3gp&`z$ε�����2��߲�[B��N�����2T��^*�%5P��Bt��+9���B5C�vv��f�=��>�e��%��c9����{)u�*�x��sS�9��
�Y5������=4���h�<1B���lYg�x��Qm� �V*l��'��JrQtˡ2n�v�-�g��w+DU�8y��yq[V�q�kB���*\ۯ���&W+��'�%DΧ�zf�]�NR��PuC�u��D�K��CÄL�,mp�P9����?��nA�ޯ@\H�@TU(�^ҴQzjTz_m%�!�Xhˁ��{�$]5vg�=��홱���F5���1(�1��q��c���vBf�(�8�ɝY\W&��YE�y
h%�ά1�U�y�	6��!Au����%�'訄��jA���I��b=���n]�-�c���-�!s�QDh�U6J$����N����j|�0���?����%�O�2Μ�V[p�="K�v�s�����ۮ�:v�n��<\i�$�\�sڇ�$��T�Q���@�0������Ķ}d���!��M]�QM�h���
q!0��6Y�\� �^mA3m����v�.<�v��kO��'���=f>�EZ��4.�s�U\�Z� 7Gײ���e�q���9�f����q1mub"ʏ����c�0�ϭ���J�?��*2�.����~5dA���W����X����*��(f� ]�4��o�������E�0��ɩ��唛�k���pqS=���i/�P�����>�>l���B��$�bB�>eg�e�45��Q	P����#���9 $o���r���:�.a���`���g�A����@s7��)�:ق��F>�u�����3-���y�Gq��ң�\�.U�t���g�x���J�L!\�˟霦\֘;����v4rѐ�G�Z_<�W�8�*��
BnmU]0��AxٕY>���~��N����{��j��\��udeƑ},�Y���.��Y��\7U��UK=%+�j������Eq-+f��୼N�#:C��q���5��I�@gH�b6���b�
M�M�8Tg�3X��ժ�`�
��\����{y��X7�+��ף]}�=<��RL4PL��Q�NƜ��j�x{]|U�A!���(�m�q!�,�y'�����][o�6~߯��a��R�dY�7�/�:H�`���>�#G�ɰl5������sHJ$EɊ{�4��rx����,-	G'`-��U��i�3���r1P&���D�U,��s�l
J"�xIߋ<�GK�^���J�|��yQ2�6��X�Tܜ%}�SZ[,7�VS��z��Ɇ�H�:��6�UD_=Q�Tn��
�bs��n_ܐn��ֻy��kc����%�G���Wun���!x��R��t�	�MB�Rn�@-'N���%�"�]
��]�|���-�I��V�Mr���ֹ
?p�ڂ�ǖv��4��\.�?/ڵ%yL��\q�1���%W�p��]�"�xܼ��;�IW�υ�៌�_�e9N
��2ré���2�+߫~�x�|�Ο�。9���sFKߍ"�u� !3���_���
�~��0"��Z��;��ćp��E�]��f�w���?��s��l��̉|�1g�C��� `�9�cpMXzPU�� �{G�����,dкE��
���z�0S�I�A�G��m6xu?�P�4VK#�
�U���|r`A�{�g�;a�5(�s'�=tBD
Վ�^��������C%8�U4t�i�w8��)�2�၅)�{��G����"�N�a#��!Ĵ�E�7<p���ۯV�z3�7@�0¦	���#�H
�I���!�H�����=㔗����X�[�S#Y�Y�D��,զ����&�N�=����A �$4=�v�ծx|��9~��q0�~=��#�O�����|����

�{�/x�\����-���v��!���1�a�+�
T�B��J�gi�'$Bl|��A��/S䶦vͲxS&�12r�L45a��j�U������?&;"y[l���d1��tiL@��
k�[��Q����#�5�Be�����8�A���r<5����V��PL��m��\-�Tn)o����͗�:�y�q(|DI2��\�,�+?��3٨�ݛ, z�}���<�Uft�߾��$Sh�8�S�V�#X�������ֺ��S+ܝ=�=�~���0��C.�F�jY��e�,Zՠ�I�C��1�_�s��%��U�[T���j彩�ϟ��\�x�"�""⿡��j�4�?��j���@���t4�*|�?q~w�K���}�p�Q�0OSqq�)�ZX���uoq�T-�S�y2>��*�m)�����V�F5���j�*+>t|�G"�-X�5�v@
">'��K��^i_����|6��n�ȋj��y�S�֣Ad�g�㣄d�2�)&"TWҰ1]���ҵ��2]g`��`���t`����2�>�S7,\���6���m0a����,���6�֯�:����#;�.��Լj�y��oe���)-X�a+G����ߝ
�E�(rj��ڗ7V�^:B�H�#��[ri#�J�G��\T��8u���t��EG�'�I���
�,꓅��kg-����,�)B��E��?����������W�K�op^�@\#��U�*�J�ZЦG���"cA���{B����RS�#��=J��W�}b��K#��CT�h���u)W]!�P;�q��A%�a����4�	�v��E%,�vV�wL �l7�等s8���;�f&wK�]�Z����gc
l��+��)-�ك���˭@�F�Ӌ|~�
�J/��d�"4� UQ�99��WTTk�օ49ށ3�ox%��h�Np���X�����@�ȴ�,9�}l��U�`_��0�`�W�<�������_\:εy��Fb%�n�rtw%�`H�!�j?G_r�_���R�(�_�ٌ���M,���,�ܰ�z���+� S`~�bV�2I���򃁥���];O�0��`)+�*1��G%5Ɉ��������ql�!��q�^�l���]��$��Tp$l��>�'Q0D�?�
���&���'���a&�G�5��Qy���OF�ѓȻP8|h�|��/x�?�d�/w���O��݁��Q=
�:Sz�fx׮^n�-na���ӧa#p���,���
)�嫄h�T��7T�z����c*��n)|���j)J�4�~9�XЮsc�CCB�7lzV̮*��nk�]��I#�Ul�b��4�G�R~B{�M��<�1Gs�[[���LV��h��i�~�����g��
��|��kY�U�E'
�w�=��t��	j�s�5��D��q��y�P�����N�M$���Q��K�tɾG��X���e*|i:�T>a�xY���6�+j�@����?0�t�t�(x�HG|L�Gr�H
l�˗��{��+<V��f�%`�:�L�!���D�hNB��:�{��%�l�Ы�I�	�L�-An�ȿ�������/b��͎@3j���i����/IG�U�CV
�%��a�hIN��P�=��C�!�;�����H#��A���s��ﰍ����.�Eۃ�DeG�����]�s�F��q�Jҕ�ؾ�ޖ7�*J�l�%R%R�eS)DB"�`�l���{�7 E+��C,b^=�����_�N���|SXoJ5�d��P~�뽺����T�[�O��u�g�D�+>:$��=@���1D"Y%c��Q'@`�X��m�/��㞡�!s�c���UFְUt��1��ʵW��tr.�^]��
̕��G�sbk�z��Ч'��渉��ᷤH�a�.3{�����S��I�����$��yQ�J�`���l:�O%Q`�\�Y�Ha�p�(A�1�"&�!�>���o�g4#��j.i�3jtLq�3�i��n��!i�tc0�>D��q!L���h�cw�| ��A�J5�>�MԠzy������q^i95�Y�tɐ�c�%5���*1�4^������/�qt���vy���rC�)�H�m�&�t�N��<.��h�0��U1-�y
���U��P#�"��WCn%��R#L�cY8�&}+�l�����𻁓v,E�zp��#[����r�,�+�O�����w�Gwx�Z��m��/��I�B!91�K2���@?�A��g�t�qMw�e�e��S]YD �D�
���MM��m&�d1D\���2n#<+OP
aH��$l1䜁&*����1������N�����e_i�����2ӵ��ΰ��]J
����b����*���~����m�o�l��z��6~c&�(�c�
�Y���?Ȕ�@.����p���ͯ��x��}�7G�G9�6�@4�_	����DQ�a2;��JkBJ�~6ZIv)��>$4%�vd��`���A�I�d��2T��<�' ܃�Ȟβ��0]C���
߭r|rqԵ�l=/���1��Gغ���z�]���q����@s{w����c�<0;v��M����hY�v$�n�����y�"g���R�,��ي�d{a~�:
�dkaaFj+*�8}���2�P��M5�ӹ}������j{�X�p\޾r���Qw�B�!JHƺZ�C�1v��-��^J��g&�7Cbvp�+��'��C�Q�A&��"rW�+J%���^�	��4bR=��z4�fJ�-+��J(5�Y'�-�������W�3]�ű�!�z����<�
��e'
���3�ߜ<S�1>��̷8�o�#|�	-�ɤ*@�2Y9}��hß�h��Z�RZ�A��kKat����!��W5��`.�,~�$�:�BG��>iUN�we<:MC���gE��P��-�A�jgd�a.H�-��r�g�\���9�#U��x]�aN7;�}�Ô�\T�Q�*[l�t�bMKT��
k���a#���1
�"��:.�Y<_AL�l��<"]��XҊ0;��sF��	�R(.���j�r�i��8,��EO\k[�^[����&�QU���=+�2�����n" 'W�p�GF!���u�8�-#��5�o �`��h�!�Xy�:8:�S�RcT��Åd[#�R�lѮ��[�\�˦�-ʝ��K׈ĮK4lMd�	��f�w��1���A?��~����hG��4H�:������}���Z�z�Ҩ�;o��B���џ�M�a:�n��;���@�������&�6��VR��Ym�����j�S>��
�Z|�.,�����Y�3f׿��P��o6�ls�	[�~\��I[�C����뇊��e�K�=��i!������zg����������@�׫ƾ1ȑi�q�(�딤���m������^w����^Vw�Yf`AVP���ŋ9
��'s�1��]�/-�m�H��i�(<���f�_�|��:�$���KQ�"0��	�c?�L,0��-��G��]�brӞ�ÑH��������
�em�42�p-���c��Y����l�ӏ�C���#҉�l�$���).�6%�33�<[f�l�&�r2M�ǚ��>= yW�9��XC��cXEy�������VN%���?�\r!g�\0hŒ�-2���ŢB�f)�b�rX���6*�j�0�_ɮ����i1��늚������oqQ��D���p<��#bK,�lOyX�}�ţ1|�#�~�����2چ���
ϴ��z�5����OI�9PM���Jn-�a�tXZD,�
FY1��H�5ܗ�Yԗn���Pr=�Ӯ�o�T��Ȕ�����96��Ϙm*��#����C�Ϝ2c�Ԧ�x���2�e��Ll�_�
h){�'E�����\p.w0M�������L�U��k��r5��\�ք�'���M8���~f�pv���9=��oHtF�n���Z2D�d֠mfD��WSwˇ?�T�ʶ�Y>��B2�./,��
�O�`�'z����.�kl_�I|G$i��
_,bn��}D�vp$Y8�*UU++��YS鸄����b��u%�S�P�`���Ҡ��c�[�epB�	�����12q�Ή<�
�VџM������1����H�p�^�'�raGƵ+�[�e����3+�cz�&*�0;����"\�"m��[n�G�F�Z9<Pn�%S	�Q��	��w>/�����)�s�{���rFt7�z���OO0���ʩ�+���0����|���z<�)#g���qJ9������8]�I<�T���m��ێ?:)A]aשQ�x��WznG��.j��ܛ�=܈�����Ֆ��2��T������y�ʟi�Y*x��^Rx_:3�8Az��vn�_p���W 1��иiq�!\hD��;�ḓ�rH5H���C�*��-&�hlh\�$���‰0�UYEg�zפ_�'�v��d7>vd�f����-ы 7uZig:-���,�دS��cD��*��/�8��R;h	Y�lq�@���ʰK��8m�c�D��j�.3���vE�LB�?�_���H�C�9�3d8~�����E
�?7�m[�����W��:U�ݩ���I��-��(��������Ok,-���-2��˭v������ɭ.E��ڋ�<����-S#Ah��A�tXf��v>�pm�9f�v�QI�L/�<^��R�3��(�&Ƭ���A���q�/�[�=!�*����`�~е
:#9���8�4�wh6vֆ�-{P�d�>�~�U�@�o�M�>�-*�߶��Y�����g��(I&ⓓD���X��	}_9���;X~�4���ƹ
h���~�\��!v�;�&rm֤hoNV�*O(ZG�ޥ���c��6"��2��5t����Z4��S����S�ZoF�	\�5�ˎ���Hvo�!��\��IɁ��\؝�0��ĭ��E��VNy�͍�~7�/����ɝ�mq�=�\�����ò,���٢:���;�e��U::�n�v���;�&I�~��1��Pw���մ27q'��
J�,W5���{���(q�Z&�'��P��sg��:;ŝ13��d�N�mWcz�;�䪶�vOЦ"tM��s�T����B��F�JgS֋p�=ng�Z0�6�l��
�� �qA6�S�Q��5	R�Bh�E�1ƛ�\�M������,9;������['&�i:������v:#�I/M�[������-'��%���6�4v&}ے�5r2<^}o3��l=2���ң2��:�<�����;�!�ձ;�it��(��:���#u�nt����e���`ہ�e-dc��kG2c��&�����gT�DՋ�L�/��&�I��K0�H'��2dw�c`�~�*�Յj�j���r�p��ܔ;U���S>�,��Ր�3��O��ˁ�鿕��z�R�~�C@TOo�H�4�%߮V�H�p��b/W�r�З�wO[�L�qpI�B-��s��h��V��"�TA�5��;�I���5��3�OM���Ϫv�����Mwp68�z�>»�:�_�a�<~��$��<��g,�4�N��wλ���t�f�}�䱇�c̰b�{�
��tL��?���㭐7���aI"ߕ��d^��sHf?�i����z�=�zm�ϳez��Y�SZ���F_η����3<��]�,=g��>�f��%2m�􋳫7=y�N�#{|�.��O	w��
����m�,n3���u�b�#���3����ut�}����s�Y�f���G�f�
����Ɠ�G���ٙl�ȣ��7����I4������aΘ�u<��@����9�>R2n�e񖁾�Ǥ�Z0�
D�6��ZVEҎ�kW	��<�
Z!��F�{�et5��~�~�
�eEf�&\������ExW��yK��I/:��[y�,��\0��'��+ �\[!�jx�~U\?g���jگD�-�8���Yt1��"�OۋL�a����xD�:��x9'��1X�E>|(H��#K�Ҽ՚�Qd���F���.a��Q�<��7��)�O�4�L<e"��P�he��b�<���z�;�����uO�9f5/��T]!�\��V�����Ѡsi;�muq��9��O�-��َ����Eoɴ�u/mbZ��D�	@��[��-)7�e��H�j��?&�$�M��N�x��U��D����h0���ǝ~��c���*Yf��]���SC�}(>��=ﺻ�r�y�㰻���ΫV�H�`�0&��]y���_k�}����������{��/�Rw�Y���C���'iC��<���e6Iq)f9��kD�[F~O��d�XhYr8Y4+�#fg�,��	��/��1y����/��_^Q�x!�Y����CܑN����J�X7t@�O�i����5�FKN�@2��L	/�" ���W>�Vx��>f�Z�t'��h���V�#�P��4�Oi�&�TR4�a����.W��>ٟP��J�6ui�7�����b�*���_�nz��6���C"n?k���|*�~Գ`_6e>'�,�hы�A�f-��s�0�5K7j��͘��	�H��RE�P�RrRL�Ť\{���wߐW��tJ��@��{A���y���!�E��hD$�a�9;Q����O��ZTc,ʏE�x��HFϝ�bޘ�tqқ�_�"�ȣ��
(O�0�z�!�}pl�݃���ж�1��$qu]*�T[p�e��b-0�TS^�{��Yn���r��[��N��vADO��lf�8g�6o�L*Bd�B�w�y՟$�N+�$t~:��Qr���cwr�?�Og��i����)*�_��"B�y�h�Љ:�_.��]�J�g��̋����᳅/��(��t�ثy�񺇙���l�
B��juѫ,�\w��,)fk�ԝ7�����TS{��i���7Zi��
���8YCx,���Ƃ�ә�ӳ��-��0�6�?��g����LPBI$��.N��Ş�&/5M[��f>�t~(]��
��
���l��B�wOhr�}OM;���
5�<��U�8
��Yt����K��)8��'�s26}���ʚ�*�+)�{+מ��Mά����h�`��W��g��3i�M��j�Vkk^&�d��>P�E�
߫J�O�VSY��榓L��Ƞ���2׽�A�''�X��4�=a�W�v/|�i���U y�$&x3�����&��c�I�a<�^4����a/R"�%y輘4ךV����[�]֐��I�7�D�֊`�\\�5c�9����6������'t,�Q[U�b�v���#���d���~�=�g�\w���tcNJ��S�h����r��־���`p�u�w��t)�Y���
&[H�O�*
م�z�r�m��Z�7]��E}�i"J�;�D�''Y����>���}����
��SD�Z(��J�C#�u^x��B��)il�P{������.<X�PS�ֱ�Ee,�"�W�zrJ.��W�E�%N5|�?�0��@��|�3��r0��ȵ�x����v2^�K�0iw��+,؛��Zk��<kؿpϘF�/������*~/k��gΣ�sњ�C�����@Pig�j̡ŷ��ߜ��Z�[�4T���1���5R���m�ʛ�[���p�Ӽ�$�:nnu���^��m��oP�/5>�����zc�PB��D8=H~��<�%����?���B�es���G�xN�σ<-���kc���sx yT���K��R��oI^�l�.j��
���b8r0w���0��‰�؟��Mr��F���$ɯ�\��{�-��Lqan^����:��W2�^p���?�����;���<��J"��������ԝL�%'��j��b��lD���6�]g��[�J;Q��OC�<(Ć�;��m��m�1cGr����a8�GЋ.���n��b�r�|"�9G;H@4�`:bl�8/��J\lG��l�=�BUR���`�"�D$I�E�Aϰ���y�z���:(���4u�x#���_��EKnNـVPM[WK�M�y��q�.,&aJ�H`��K,����D����쮪M�k󃞅�K��O�]���E�z4v�!Y"�E&���4�[���Д��%�X��v���*by��� �[�-�K\�%dN��K�T����P���x�[A��/$PSl��kP04\R_�V��8.h�wD��9-�(����&Tk2ou��8�����bTovJ\$j��]'��X�sD��Q���@���HZ�����+GfA�m�x0�0v�����,O�XA/������ա�=�cD_?!%��������`Ҩ�C2_U�T�r�s@v�-Z�I�wL���nO�l�k��}
���d/�O��o���Ѣ'�P��!�E]����l&ͼD.�xɅ�6G�'�������]��oY)��5���X?��a�Ec�4�[�lZ(�l�:�Z�Cx�����#�7;��	�%p�Y�@~����'��P��a��	��*��9�"�u�E	��<�J��'�[���k��\���/ڝ���X�T��m���|��
���hħ4�d�"�7�Qa�,�x)!.�	 ל�Q�lB�w	���\|j4.�qi�x��(-�ȟ�.B�H,Tc��,C��7�:��UO�A�C�n�\;�
�\:������o�a���̬q�j��^�>�nI1$�,�?�˔zﴜ�҇bOG��.u�� ؛�3����H�)�&�pP�(�x�fŝd��Oh�;H�t)���6������GN��-�9��Mn�����#��8X<U��L�ѧ��j)�j��v��\��u\���?�=�`=j����K�7���{��N��ahV8�y
�^-3�-x��U��?�M[�7�
����$�޾��VU$R�&M�v��I4�H�T�%���R��8�����Cw��@Uǁ�ho��f�H>�.v�dg+kq*8m��9�<�PS�Q��)�H��p�Ӫ} �X-��J�M��*�}=>[n��X�F٣>t�[-��5U<��ԯ&��\�ii��]�q���WU$?�ky��T�g�2h������w+���5�1z��q�@Y��E)���6>l�o�kR�m���R)s�k�bf����A�5�Ɇy�x��ZƳ����-�wN��~F��R�v����j������;�`�>Ky�՛t�J��n6���
I7|�br�TU�^�N�5:e��+hw�K;2�`r������?�j�*�7��E���P�6������6�b(˪Fm&X˕�����]>O4�'�Ó�||�>��ɐ%9P�՝�f�E�r8�w�Pa��vL�wXd�^ߓ�zj̑�tj�'i�<���z��(�壵�z���Ջq�@�c���Zc4�^��^�F���ģ×$H�Xs�^�
�8vK�58��҉���k����S��u��2��h
Fo�+��O���X�{f��6�3$K�`0���o�Y���L��%F}�����gܺ͐�cЧ�.9�������/{-�jH�+ʩd�¢Q�� ��z�	&:�AD�׬ 
G�βE���}�?����]��� ��W��;�PEUU���d��= �v]+�َ�=��3����1��y�a3��$�ȸ�(��{r2Z���a�V��}Y���ڰ#�!�^,Q��_�[T���k��9�MVܫ};�a7ƌ�G3K^_H\a>�c2Pc�>5��w
����5����4�:0*�@<ʼs�(�L�D{lf�����h��:�^��[q���>�"%�d��l�?��P�u0'+�Ah���I;Z���oо%{ ��qQ'�-�/���9Au3t-��22?Y�0N���c/.~"����[�w�)�qr}�����B�'Q��Kc�;�/~^�!$�VWْl�r�ܢ�1	���k���h�~�
�`8}��pD��i^)�OW��	ο˚�j�K U��^�|�X[�#��r5�s�yd��`��S��ꦞz�#�����}��bZ�u\{���Ҿ�q�V	{C�'ʭ�"L:��gE^S�#!��Tz�b���3S/�P��ې��63�L���j��٨ ���t����h��+�ɹtSM��4�}W�7/��-t��)�K�.�0��{�2L�c��yt��N}'�#Yۈ���
ݟN����x�q'#������b`�4�8�a>u�E�r�^���ݚ���3��y����L$̓�'9�����=�?<D]\K��]��]=��bClQT�M�,~�UD�,P�
<�G�g�60�~�]�2�Q
:=�e�=btVW�������6B�'="b�spa�!VE��L	���g�Ҧ�jW~�W�@C�P\��]_o�0�`���[%����T���2�XP�M�$��|���$8���$��Ͽ;�w��{I��_)=���G���)J�܄"
Q}@����W/Mub�Ԫ̢6�,tc���#��6��j�_���RUU�`#� �R�/�E�u�\[�߷>�o���6����u�#ϒs K��a��R�T��F��Y��a��{�'���h�
�Vף�.{����Pw:�d�Ϸ�a�\�
�1?��ܭༀւJ��-�WȢd�[�3{�5�KV�Ί`�z�bu�X_�FVyo"�%�oT�`����c��F����W��4�?�uߕ�~�U�?n�e��ҳ7�/:=���R^�=O�>�~Ѩ�C�/����#(XG�=�ԖЊI�OQ	���1��8�1��/��,�r;���(]jB^��9����w�ć|$���Q�S��`G�QRE,�6,@�G��Am�M�*1�����j]-=3R�"
��ڒ�4!�AY�i؜���j#��=�$�?��P=�����Dc�z�^���q};=*���v���T��Đ�G���֛�~���q��bxHi�OP����i�ː#�Of�j����,z]���O�uө�=��]B�Gۛ�-2/)��7�B'�=��Q�(+2)�sFE"J=��*�¨�7m6n��_{.�k�Ԝ3&^Wk���:uΌ{ҽI>ʧm*�2^Op�E�p�B)ɛ��}�| 6*I3#�cNs-�����3\�s+\���`0��3j��׆	��ķ�v������Wm�]O�����h������>2漒~A��Q�1|�N�ӹ�@��H���F�������e��Q*|�Wo�ꯦ�SX�|
3O��}�be^��R���6.��័�G�=�7��-$6oK����
�����6:9O��
R��ū�
�v����5Q;�`�a�-�v�r��#j�2��
^�?Tn�~E��0��.z�Оg��_XK��prP.|����#��]I�
����vAL��I���)؅�f�Ļu,T~W��l�<bvyp܎H����d4|;>�g����*N�+Χ^,b��U�]�n�0���i��*��Ҝ��H��'���/,C��L�D9r3���ì�G�{UP�1�:שD��52��7�
|'�w����aa����s#��[�����������Ա=]ITA'Z}���V6�����C=5�fs546?}�~7�= L��v�#�m�p��5c�g1�����{\e�=���H�(dQ��c�o{�z���\|�� �κ����Iwр�;4��[\ll]<[l�zuЏ�A��|K��&�O΂=�RjD��¥�����+\�IY^�~��	Z��@;ZϹ�`�I4�
NJ��c�K߼��S@R]mځ7�_$'�n�!��M>A!Z!�TBc,��I�Ļ���������N
һ6�4R�]P\4{5�$
8����!j�QJ1ye9��Ol�xː=;��YԂ�/0�Oͥyʼny)��GjJ@Niz&���&��(L�02����=t�~��~.N��.��+��}��̔L�T�T�J�#uZGr'	�I�����3��5���u �5��#cR��8��	<n"U�^����pMd��N�Ō����"DdB��%�b�1��C����ZO�I���Ĝ���*NT������X���HOS��A��>��A!tNTh6�MU�]I�d��U���K,�,��R�+���Ë2KR��M4P6�z]5��@:V+HH���ݝKo�8��^���&��b��N�ր���Eу G�F�,	�����;3$%R"���d{�#�1|�Ȝ����O���]��xW���m?l]�~�p������nc{#��;���{�?�.���x�ZĀ�<�aP\.���h�5�S
�gq��5>�QFήg���{����c61�01L�F2P}W7l�|e`	��,٣Qൾ����]"4�.���������X-���@�p�,�x~
�J^)�����J��%7����7���\JLxt�7�ӻ+���2�U��h�}����s�ۙ�:���准`X�0��� 
�]�g��-��>ks����Q_���_,�ls�v�Z�/��+��FRbS���Y]�'�����Ѕ�@􌍷�-n��ه�����V�K�<���Y�n���׉AʹO���l����	�b�Ff��5dM��$<$��v{��1�A����բ��ʪ��cq��?���w�{}����j�z�D�Q�_ΰTr뼓H�<�6@b`]6b��^r�Fr��-I%¿ܲ�A�G���9��`�j�c�F
}����rw&l�¡������&�4���=)��?�5���<����J}xa19�e�a��:ȁ��ܚ�ʔ`0l"�A��N3V~��pZ��i�c9��+!�M���)0�/y��1Q��\r�u G^�P����IR��w�v��;��&�<����^��˃a�t�}r��7�+n�D��x��S�9O�X��p&G~LWeM��4���-���F�X�y�ȟ���c$sX�3�0*-�o6L-�C�z˟Ni�~�X?�	&��\�����Y���g�K���{`��c�|����	_|�Q
���JL�~:⯵1��J��-o�
.�E�r���Y{�X��xHY�0���W�.�܆k�d	��o�M̴2�JN�߇�V
Ȼ���e�J�AU?���B�h�R�ߏ�x�`�Z�>htĨ!+MK�H��WS�l��mSx
�hѢ �����t��G��jE�R����epm�9���2�p�R�{����[�|�n�2nJ�P��|%Q���b�z���.
��Z����*U�&�x�ش\��!�9���Pu_��`����$U&Xp�ǩ�eC�u֘����f�����%��j�HY2�`��O����@%�f/Jv�+�2>���Oͅ���!��JA��L:�(���S�ݰ`~\'0������9�J���a��؏4I1��##�$��.�S��1)='�I�#��[�����ň���(��Ό�ؗ]�5R=ۦ�5z"��a|�wOEԢ6v%�[�8���àY%iFO5qY��F�����nl�	�9�	y>ELI^�Ȏ�P��Db��Gs5W��oPd�����$�n�����!W��`��~�霦4��O�s{�G�?ɿ�O��<is�8��W(�<����d�R�"۳���e��>�K���
Ejy�x2����E�x��f�Ø����h@y��5�VO�?_���n�}�zA[�E-�l�f�"��5�JZ1Mh|O=�/o߶nڊf�t�'�$�b���ȣ-hΣ{��kM�Z��y|�Iҧ��ߥ!����\��)͢,�Z~��uv::��f~@�4m�Da��������i$4M�p��,�ԏB��v�$�s=��q���](2�GS���wOB�z8v��s@hxO��L�W4ԡ�b^�7�w�\�9c�fq؂5$4�~���%�:�Ŕa���침-���NHH|���6��VA<oM�P�C46%��k��Z��H��؛��ZOɈ?��X3[7�$��Ѹd�h�c�}�_r���\�K?���Ѻ'AF���taÐ�C�A,�k�̜���'�`����?3/��ƶ������E[9
`��
�H�X)[�W/ bi���Q�CY�Idё�����AS�[b_�����*���蝵��(�ԧI�	��_�O+�E%b��rK�L*@n�\e)���H��b�'���a�tP7���i�S��qF-�qq߈BIa� �0{L�sp��Za���'Nm�,���<��wV�w���l&�J��e*P��F!�Fz]��
XaLL���`�M�IHV[���0�ɓ6�Χۻ\���h 9	�s`���E�p�C4�g����*}f�������"JR�	���o�ȕ��c��atH����}�B药:���ja@h��*
�w���9y�d&f
��
��
�t=
2��p�]qq+r3�^��J���!D?�8�Oޙ�D��
:V��6!!/y�C��� %zNV�~����{��1q���IS�.���(�A��t�<�"�H�����0�[��c�Ќ;�q�8
�CיpB�ave��`��rjX�ޝ%:nV��Z�dN�Ql�AzFg�ai,���+ܛ��^�ww�|5��1���V5������Ϭɭ&��<]8N/�@p�,|$M$p^毦�x��w-�tz��F�+i�@A�2�(L`���1N��1�a}@�
adʔ�ň|԰
��i��}��=�%F��0>5����o%C�Eě4Z	�h�&~�	slԛ�%$���B�1���P�#�n�F�l*�OsM�Қ5�u�!�m�0_,g/b�##w��[� �0��A%��c�,$�*�FJ�L��%�>�^��`l�51� JQ�,�)�{/maR�9@3<{IYx~��d��R�M��qME�9pj�$C4���h��#
JeZ:�q��a�c��U�� IA�]�ev�C�a�^=��~%#aZH��f�L��P�"�Y�~�l.�
8YpFV1�{Dg$R0+�p:�WdN�����p������B��D�
���_�(KM�U֍B��%����b�|2�8\%���ޞ�s
������IW�
L'<�9�֫�	9>L�X�˛MH�����xl�#%7�R��
���-!N���Q
��2h�|P�ein��Κ�f���R�ʿ�cOցQ�J����R���g�a�l�K��VxO�¡
]Jt\��֒����I?+�N��K�,X�G���̧��_�0��?DR���
dHv���w�O�z0���{��p�(��ַ;�'Ŧ۔�7-�����z'�rkob�R�	}z��p�v�*��^�+9�<6��o\���)�mV0�|�J�(����2�%8H�@ϧa��S�
�O���Lt�Wv��(X${{%C����O��������)�ƜƦ(�����q[Lv���ϦNcI��0��€ӪTr=8��̠!%B�]��Q�����:�o`�уa}<ؕa�XLn�w�oa��&L;��	i=���E;,��c����V���!�	�[���ED}N8�9%`�1��
E�.���#���E��~��>�ԑ��n�#�z��S��r�\��Xʣ?��DN_�$όE�����<c;5q�A|F�!�q
W{-��1�G�� p�Y�~�>Y$Q���dXC�u�߼1eCor?����ܚ�1�<��I�Gr����sgK��.́y��}ρ��WC��"���'�e
��Q��I�6p�c8�D��� 9u��(XX%��(�/>��ۣR�Y�5�G1����eLg��fH)g�/��~�l	iXFSa��UEV_��&�IY�d�	�ۀ ڪ�-��������@\s��zS�[��F,6����f)��I�0
��ҵ29�K+��0�S���'#�
��?U��X��X0�1ǃ�������v�4M��#b:7�k���I
�S�V��[zͭ4����2�;�ۖ�S�^�ҫ"�p�V��ޫj$T�R���0�Z�"Ʒ�jM�`��Z�ݭV�Dejs�@!iCo�n���M�4�%0�KU��Oi���@���8�E�<�#���)G.J)wIA�nM-�J٠��0[^W�^!fԃuz*�Ӊ��#O�&�i�f�d�J�'
�M�I��f1���m�|������c���	k�^G�D4{~�}t�C���
�̇t!-Ɋ���`U�����n�1�2�NM�@g3�{��	��Ə�5��3�>�/�#���8 ��n���BZ��ʁ|xP�eq�ѤIl(/�(�r;Nj�۰�E�%ٲ�9/�C�>��y�F���3`�6 C|�:)pp/�P�O7�2��{`�1�񏘀�)�45��&�#��g�|����O��xr5���ع����Z���۷zV���꽷z?Y��~��߷��Y���A�:ط�Y�w]��;�����w�O�w22�^��ߜOj3u���O�k��w,�V^H����V�LJG瓹ff��1�Md-�9K��G�ZQc�3�W)���R.y����NoN��}jsfI��Vg�M�]�H�p�/�/���A���&�K�o���7
A��lp���􊗞�x_�@<O���U)W��fɮ�̖'������d".䢿��^��sv�y��(�t��O�o�'(�I�2y�T{�$
dYV��_�
�&2?�����<�4?��%*�gv�q�XP�O5�p�+Y�iH��%w����}��y�E�^��J��;>ekB�>��!v�;Z�I
�X�k���L����5i��p�����m�����]��)"Q�J��
z��BO|U��������;�aw#�QLQ��T���W�������0�̹���f1����ID;�b��
��ʒ��O��v﬐,���]��=�:b���r+T�Vg��r�k�����L�v;E}F�z~�Ax��G�Z8x-�C�1Yb�HT*�����N/b���e�F�5e��(o�Y�N/x���/}I�a���t����lx-ǿ�;(����r��
֚+�]�)��c�'(�-wZɂ@輊����u���{&Y��J�S�.V=���Ȧ�_�}�v 5\y�rh�� F2%�?O��O���ʆ��ǤC=?�� �oLЫ�8�,�)>��by"���Vy���[y��{�
���4X�?1ѯ1'b�ԯQH���i�r��	��=�ʥ����p���������1q=�T	������L�ܢK>�)��h��=
�������6�|p(Tސ�\#88�z{�М%m$9�8[&�=N��L����i�NyL�D���參d����)ϡ
���vb��Dn5�Sc���JQ��:�6��A0aj�����4] ����F��)�ƀS�U�?���F'�<��%IM]\�gl@_Ž>Z,���U�T,vZ>�|�W�5���$��i�z-�
� y��EK{`����\���^��Fa�����7d��2�#��^�Ov�h�E��P#���Ly��������h�4��aD1�W5�B;nd��	�(�<��Nw���d���|����[���/�eP�^�TE �`T.��eT�I�f\V��񺸳�T�>��u�|~6Ɨ���<|��90;�?cp����h�U�옫��S�k�j�ㅮ�s2�e�=w��k$)9���7�RÈ�ݙ�aש���Z�]��n�%�:Z��Q rk@�K�ɛh�1QB��[wMq�N-�m
�c[O�KA�{����XG�W�J�'X����KJ[�����z��<��S�>9�^�F�q�S�'�|P\&���6�����ᵅN�����8��0[G|Թ�G}�5��p$‘���q��"�����ؿ5�̀m������x<���^�smB���V=$~�.�2k|Z@$���2������bx~�R��8˂�UrX�lE�]v�j��rx����p$|B�,ɭJQ�=��<��l��D��Ӡ�R��ۨ�6��S��2��MF_�jJZEX�c!igr�/Wק?7�K���}�����g#A=hz�	w�_�^D�e�Lj
�����j��܊�S� __�O
�$�}'ղS5y��+<�ѥ���I�'H4�>xi����2�%okp��Q-�\S��S��w�=h*!����u����F��3
5��O忟P$e$��rmH�����h;��w����}�sG��b�%*2�Rv�-��K��DKr�rr[.?�Ys�H�eG+����!);�U���:�4��F��_�T�٧\��B�������u�Oi�M7�1�؍%<��Tje/��M�\2���9���m�
�c�,�k�η����$2I�К���0�%��jf��'z����Y�N��;����R��g�Q�lT1�mڕ�Й����0	�;-��H��Z��3?Я�ަ&q�c��a�!�����t�o�1ԗ>�I�٠`�}��&������t$�Da�R~uƯ
 ҟU�tQ�LYn��1
m�%.{�I���h��]�dh�`�c&C��"	��4M!������F�e]��D�o��$�.`x�f�f�X���>�[�����,>a�E:."���W��^@+�|lә>_\�$���
�{�(�3��s-6�I>����)��1�����2Bm�-j��eEg�W�ǔyJ���U^c���-���˳�Xf�d%�M�[�@�l�wKl/
̆��TFfcmN�`\�%��W,�7e�v�glv#�wD��nh*XZЇ:��B��R�m�Gfq<#xQDKm[.Fa��Vr��^Ϥ��$A�(��9ߩ��ȴR��?�Ʈ�F���z0�l��쑶�sk��`�c�9Y��M1�cTV�Q�����Æu��^�*&)^,�m��6�=�u���JM��V���T�w2�S��B|zAU.�8��x��Å
C>;ת,$����Uᝍ�,�&�mk����T�:��z�7%N=�&6�%�
��	�H�wF!�z�@�JlSd�єf�������m�
��]R/Tb��(�XB�����,�x[4��
�����^F7��[	$&���*un�M�B��$��廉WH��,��Z���t|pUN�-ȥ��-�?�S��Ǖ؄��n��S1G�8;�B:���rqk�֖"�N.��j׍��R��4�@$����#"H��[u�Δn�k�����'�0�Ѡ��^N��dwt�lBH�W��
U���T�&��T�\/�KR)�,�}�lr��dթu(/���#N����`J��+=,��x�
|�Ƀ�����b��O�Q�I]��+�^�d����V����OaM��6㣄�PP$�P�`����BG��|y�}�2;��Bx�ʫ�����@+#\3OG���9�=�^2��'��M�����H�2ղ*l})�ѾC���stD����N��2������S��]^�"�����شY�{$#ϔ�Tu�c�ܚI~�ک��X�Sn���r���]%bY}%��O�xi��+@�K�*��T(/
9;sI��F�[��Ÿ 5���'�Y�MT	Q��� �B�\��! �.\%=ǽ�P�cQcS�A��I)2�
mg;��K�dz�&V��=Gp�ʒ�d�j�^�
�'�X}�Beh�٧7��!�~<U�w�嘗�_�j�$^i5�qԸ�^MrP�M��'�8�g�*�אE��\^�BC��D"�H˴�u8���UGE�C]׀T�]���^����/c< [ZxBн�������
YZ�+>�y�
l%��-}��z4���^u`���A�A���1Pc��^� �M�kX�X;�1y8��ԅ�M��T8e�$��yhy"�!)Q�*�R�#���k� ��j#	�����p�����q�XyUG��X�
�S	(ꮄ ߴ�yx��� G-��00xJ��{�V�y��c��ަK��&4t����Rh���~̼�aHj=����&c
+���������㻩�(��!��
Yҩ#�V�l���o��`�q�41[wĤ}O��`vo��1u!4�q^ݾ�L"(��|�	�D���)4E<�ʄ_	��gL�P��pl%�W�(�[^�x �����4���w9�ji#��}3��(��u�VN�n3��k&9L}D0�z���M�œf�&�D@��V�����8�N�IO�p�&��@a�:Y
���^�J6:E%QhBx��������n�R��W����#i���o=h^{:e�y��ǜ�ɼLf�0��*�e���h�!�����m^�K��9��ڨ���2��j�5�s0uW3U�:Q�р�t�ˁ�v�ÜZ�DY�.���Gb2xB�g,�������E7��$�����ُ���M؏$ퟟ��w�O�To��Z9��㍾��6�U���b��㋼:,&��I����%���F ��K�,U�X�fq���_U��D$��*^�R�%��1F
JCfM�.n�M�P%6�m7�.*3m���D�M踳�v�����T=�-
�Q��G����X�zÕ2[i�+�O_�d��h�up�I�������x����z&4"[5�b4�ȿ3��æ�Z5��:�ē&�רzk�V�3zSiˠL�I3�gO%��;�$^_dL���aA@E^)��_�6^]F�đHT������ri͐��ME�ѯ�����da#6��;�/eSU���`/=X
c�o7j��n\tv	���r�*R�uFGc#Ėt���s��"�G�67��<�ą�����C{9A�e�u�;o��ʝ��cץ:P�L��;��H;��V,�sM�ph�Ƙ��R��=�Z�!ݜ	�\��ϝ����R��k�2x}p���m;����_����_����{��0\���ӣ��v��Q�r6D5o��2����%��g�L�2�5�g�M�:22�lz���L�g'Z%HCo֐�w掊ƕ%����o���8@�݁�*K%'�K�9�}Ҩ��po�dz��.[7���@��Wd�=���:�O<�]�HW<uw��v��V���#T��~��%�YU�-K-�4V6v)=m�.Ve�f<��b̊�!�����MNY�X������>"U��P],�=��]9����9=��Mb�ܬ���l}� �)�KOE0�R~�������x���'����Nş���I��bxzv���ji�b[��c���3�c$[[�_�yh�k�`����������܋���s�geG,}U��qL���c@6-M�X��G�sq[�D�/��d�.�F�l2���g�]x�������_5�2��7��|v�od�D�+UE�y�?�zv~8P!.J"��CA�*b	E+?JrԵzYN?�|�'/GtMl�a��&mbؖ�(}WG��p��L��[��<�$���F�k�"Q�71��V`�������A���~3߳����!O���'�$-�*��D�S9`����z�GL�����j��C/�	�;��/�}=Ã�21g%*2���ۈ�
l�V�:֩ڸ��I@V�;�jW�i�	ó�3$�[�Ҍt�_]h󶅬�qM�=@iW�~��sRYR�{E����T@C��&�+ҌY4���8kL�}�q�Sj�;��p���
\���C�

�5Oy���6M0�D0\)��L�
�7o�#�XF8d�A�8)�2,h%��f拴$�Ŋ%��±ou���3(w蔪_EJٍܸ�r����]���\��a�j�[B��,��E%���X�O��E_	���˦�ň5k�`_�̴me��~�en�h��`�a�6bXI�Xԝv�]7���56c��׏�i}8��8=<����|6o��pDU�\a�=�u5o�Z��\=}�[[����㩕H�3�Il���v�gCP��||���LҜȍX�͝�\����Қ�}�pӹs~۩g�En���#��s�r:�܌�JNl�Ttv�6~�n���`���Lč��7óc���o��ro���(&fnT%b���k�LQ����7`����Fd>[��Be���$-�?,��>�HO?���2Ӏ�Ԏ�0�~��Y��J+؞̫��^��륪4z��F�?T���,��&2�ͣД\�@yoͦ<�ca8dlh�b�l��_+���6�2���Yh=e�Ɗ�%^%)�V���!��_2�S��>���I�_��	��zR^��~=��m���kMt��&���l�Ny_j?`��荳���k]&�_,�m��9[E��]���eB��/6[Iƍ<���n���y�8���ѻ���v���Gƻ��­�Dt��
�=�.��T1a�$�{I��~����+������?�����go��{�&o��m�WĚ��u�������?��0�2�r&�q�ǗP�>d����[��\����P������ᣛ�>���I�y4[[��+"�	e�/,�oz�������}�L\r�U�ᯟt5�,�z@�q'͒�d{��-�xo�p�$��zm��%Z�i\$�.�k��c
�GcLŠ��颡^@����3��8c�B�'��ƒ����;#<�f�Aգ}�kde�R�H=�D�^�}�����@�E)�J�HӖ��zbf�/���`�u.��s�i�g+�����(�n�{�C��a��O�M[����<��P�V͖`z��l���醥��J&�G�e6�7J��y�����U�nB��m��@h�ղ�(����>|A�����Y�9��+s�"���|�yu
{��=O�M���V�Nv�Vp���h���:РqeM�vO��G�fĦ�Xh���7�#�MR����4�#��1NC�&�R�(F�d� �j�Uz#�Z���p��Ҍ�?@��7a���?ޑӮ%d�Î��n_�0<���׬�.f/q2�
�=�i��B��l��[^����$��-Ԇ���8����`�
��������ULe@�r�Y�������Nn��d�
��!���Q��u^`�6����o��1��M�:�&�c�i���b�́y�14�\���=�������J�>*dz_���,�������`
(�R�P�ӯ;�*�Xd<=�LD����
)��F�g�JH�ΠR��:�����$`_���_y�Ҡv^\��R�C��4�HA��y�E���Q��P۬?�ǔ����A���D�}u�NT������'�6�&4=����{x��|��l�Ag�'7�JI�Y<ik�Z�����g��ϝ^��Q�������]�GA�3���������}�\V�kF3��|�u6�|ր]� 1��b�SM�JJ�\+���J+�^/�wNƮk�5�=�x�
���a�{���p�&��ѫ@�"G\�H˺������l��wc�q;4a��%����DC�U(6��zco}u��0�7��;#��Soj�5��'6�3|�����QG��A#u��0n����g:�ӛ�B�@9��u� (;Y��T��+�.��V�_�Tg�Z�S�����cL~��ݪT�M�]8�����N�ڲ�Ok�m�)�K�o�ȫU�C�1q�Pc�(�A�òF�Rgr�P����E�򰊅,Y3�=�����t�<d'by/��f���x(�gf����SN�TL��l��L�<�a�����@p�o|[��|a96����m��
�G�<U���_�����_�O�����K	D��i-,��	_7���6v���(XŲ�&���%�	[�戳�׽�κ#3��5��������7ՄC�l\M�E^-�������h�X>���,�!��a�h>WXD]��Wu� ��E辞�g��O{��[�*�P��P|κ
���WZ���p��:��f�sa���<� ůy}.���$��:I��X�*�Ct�X� `"y��Cuۢ���W�����N9~�G-�rar�P�08�Pb�F�����$꧚&o5ƽ"�:
_T%�:Vv*x=χ���+�:�¨!b���"�����֌#f�o�}�p�惄s͒D$���9r����0]����/4�`�Q�S_,i�*�_P��>�髄\�V��b��G5w����ն�4V�og�'�ԃ7M�H�;�P[mm��l|aͣW��_C�x��ѷ|'�0��ч���U��н�!�6G�+C�,��s�+x ׁb ��
���%��v�?ò$�y�W�6p@�=u;\�^��7s8z���%��x��9�z
������8�:���mf��>3�{F.Hzt���5���Z���`��f���.�U��/Ԡ�v�-}���x'c6��i�'�)�.����:�G��a��n�5֎��j���ʚ�I�f(k�/he�H̓����8�/����
��y��x��y�[3}��og�����Q_�"�,+�?�(�c�/����֟]O�w��v������\g���տ��W�D���`����ӎ,ߺ\k���Q�z���<�4�)�U��mn�&���k��$K\�i
Ӝ�,�֚��l��9n�uqCԦA���'�7?��
I1��I����e���2�:_��ħC��vT�W�̤�[v��Od :�ƚoS��C�M�7�lZ���f��\���m���'�'Cの���U��xƐ�Iѭ�y
�TS>��<��=�
���fW��,�9L��O�C�ya���K�"��"��|�v����f�t1��*;/����&C[?���4�2N�c�h�,>Ɲ��+A7O"v-� ��yg��c�
H��ub�͡��;]ol�~2�����<zD|_��?�B��9%�W����$QW΋����lb=�H�|5�<2EP� I6�d]��3�����];�!��:3t�(8�����4�wQ¶�Sm��ϵO���ə�kU�W�ضۖE�ݎc6	�&R=��!j��D�]�
^z4�d*����{�t�����7(��I~�_bpO�?�`Y��Ԇ5tކ�~:����v�(UBz��kk�ӘǾ��n�o�A�N�1_����ͪ��U9�OvBQ�U�X��˲�,�:��ݝ�͢dzOS؎E�C�'���5G��|Q\ˇ��D=�‰l%��MG����U�D(V`e�4M���yҕ�Eu"�pMc��LN=��eq��|ϡ/��f����U^�_2��E=�Շ�%���f#-�Bi��_�}�ɴog���Ŧ����T��{ݝ=U�@���:����b��H�&&̛^%�Wa%:.=Ε��G9�6�|[���	#Anq5A�X��d6�^��I)���r��zֲ��6����('�r	x&KP�0{�D��L�i�A�=.C���3�D��O�K�m�BN)����V*�xvM	�.g�Ĕ��I�bh�;e@#������V�g�=*�DjߙXwT=l��]�*��c�{�Lk��°^oZ��K�>۪��_���Yp��}�N(��K�M�wk`$p���D�F�~���-uM��y�R��y?���])7f�d��S!M�V���(f���yW�*��.M�x6h�}�<��vo���j(1���5o�f�<�r�P�-B}�U�m���ۿ��}f��U�����s�yS%h��_�dPXw����j�";�	O�@�	P��y��������%v0u�*j9��B��º�^Y�Pu=����F{<3D�&?��^-F7	R{����e8������pп�8>�q����a��4����r<.�I�e?=���>=�r��G d S8Q/� ,NfpͤM�Ij=���db���V�;1t��Z��JZ�t1�1/s��P�T�$����-8=P�r���3<Jf��L$���\Q9�	U��[@���aP�K�'���!A�� B`i�F�V�$}#s�m�[;�(Df�m7�HCCI��`NQ�`WZ�I;��V� Q�xmJw��Ru�)i#�nc�c�V�K7�A��-�x�q&-ͱ�3�+�rǮm�����+�G�� Ww�hcpϭ龾��Q��Ы�v�KY�f�_R��[�Ʊ�^�6�b�����v�P�2f ��x����%��-j`U���*�2���t���{A5(�pfԭv���f'���?��r{5
-ڲ�H�~5��Ўh쵳G�:;��_weS��3tV�)��U�SZ�de��bنR��7Έ�j�ܷbKwN�/f��Ҷ�x>:|����W���&SYC��[q��ף|^����D=����B�}pA]���%�gD��
�-h�d�+!9n�ȳ4� TU�[XWz�4P?�[����G�c`D��O]����7�<�4�U�1l���m��ʲ|<pN�!rzW�:>�=��V��*�nM�zʇ�yC^K݋��5�X�Z�tC��n,��t��rS�_�+>���m�����@��=�Bх�!��k��w�������эa���sq�4	�������ʧ5\�N��f|l��f�Y��
�$�ɡnq�z$����5���/&9A�)�~�]*��	�_��E���P�s�
1uA�p��*�������5�F����Lf���l(�m>�uC&'��4]�r��cG��B�V�-��	g���Nmh��U.��?n~_�2OgSk0�|;��	��W�����>�����q�9(����`�����2v��]��w��O��~�$�9@	>��6��*k�J���>Q���=�-���V�����o��z�<X7���MW���U�j7�
��b,)�aou!8Z�pww������.�H�����G�^�?���W�G1�����X��P����	#*�	���pb����,������>[� �y�2�~�
�G�fr�&�yY��f�-	�?�]ʛ=w���ڍ��Tq������/�ܧZ��%t�N>����;���Q�#3G���kF[��g��`����BKm"#�{ҹ��hA`
��b���j�(�\G�Cb8�9��B�m� ��+�3�Ul'�w.�8ے��
I���9&{_'�~u�
����tgY/��gr��Q�{{�~��@nyn8�|�r�8�'�j�d4���r0�^��~���\�1�N�y�[ƥ��`������}'a��Rt��*M�C���{�"�|�Z�>dE���,%�Z��~���b!��U��.���a���b��]Y":��y,;���sx������E��N��iΑa���=
637WB/}Ęa��Q1?����9�V���M��Q�	�XK�HD��B��	a0��l�������X$G01��}�L؄��h	��"��j v��J�H}��咪8��MU�3�j��\-�왔�l&��=�٧�]�̞����g��3�AMȕY&�)y��
��T�����Y|9z����:)�*���0� .G�ik�#�P!������tw{@@s:�qa`����!�(�T:�EB��ЉF>\�	��[��/�Z�Wv�g�h@v�Z����Ѡ��rZ����Z��I�94K����i+�-��LNDŽ̼N�X �9�B��s*@Ɛ�~�F5��#}�R��������D/fX��[�rZ@��Du:9��HQ� H�ZB����(�jv�,o��eY�{�ݷ"�8NV!*T�"";�M!��MW����+H�
~M�ܺє���4V[��x��{#(='pU$��m�Ŀ��+�_�H���D�-v@Ua��5^�P�M�k�L}Z�I������)k�4:u����d��Rpڍ����A�co���^K�l��K��7b�Ԯ˲JPʲԴ�̪��ٕ�+�ɓ0]l1���� E7�5�r�FS�b�(�����/�ϋ+6�U�ى�3��QG��lT���\��n�p�3����&�Y���d1I��_W;?��t����3���G�}p
�T�櫧��t6�����+�ݗ���?v���d��W��kM�%ü
�	}�j6L$�
���)l��	�A�L�]\�
��Vӭ��y5�ZH_N4���{���a������zN�r�TL�E�f���
F0�����cQ���e.�Х'���	Ʋ�9J�'������{�(�Dn�BPs9�sy�QTK36��Lfb�(��D4W=/0�Ohj�j�k}2�j�?�Q9�	���
�'z8��M�?4�d[�E$��Y��Y�&��X�X��*c��[�1#�����u�G)���g�{`ԓb��
,�E("���-���
�ϊ��0�5�tU�u�#j�[C�59�DP��C�ڐC�>���P󌬵ަ�Ѝmʦ����@�tG��������@W�q#���ތ���=�*���p���eq���ݷ�Aer��Rg����{���%{ud�I��B(#���5�o�Z�v�J⥔�-k�n��r���r�P�Z�-�}‘���NY�k����q��4��j�*�������k�̥���+�J�Ԭ����~E+{}i/����ۍ�v�EJ��-潿�7�<?�to-E�����^�DGx-��TƇ̦S+�Z?�.���TF1
R���Ͽ�?��V���Yu2u�H���U��w`חrU�p�3���q�߸$�J��Z���պ�$�ICSg6
��Q��ݶ����òQ�&��f���WJT:���O%=PB�}UIp�zj02���y��s�Q2�˶IOm$��UCjSIT�l$���C!���z����7�&/<�-�X/�u����p
�it�E�(�� i�F6�5��6y��Op��<�f�h	4o�eIZL��wL�^�}��	�%��~(uز����t��nM	���Y=�x��^�}PP�ٳ�-�'��D��ߔo�	,y���c�7I�L̳�_d�|��9X:b�I���]�^?��x=�N����v�Z���T�����o�����'S�@�^����f���C�g	b����$i����Y����+�b^��Cʊ�fL��-k���>��p61�e}�����mYl�e@祦�m�>֎Y�uWs���~}uW.;��\���Rݷ��ZB�߫z����oc"7���?r�����]�O�0�W�
U��{M1L�TM{�x�0Z�������}w>;!������|���c��@���M�=���gZ�)�,�0}�/dBR��1d!�����B��z�5̬�i��QKF�؁EZ(�`mB`��tF@�i{�1��Tb��e%��8s���y�N���庪�~�?ɭ�<V	܏Fq��"��w?�m��V�D�"�=ZMN!3-�I㦕�I�k'MX��y9E�������@R0L(�g��F���:���FGu�	܉������U�Rрw�̺��@Tyn���j�G,?_f"�������t�r���@��{�V?+�{H�}�g��n,{�I�쌸?��i�njq�it�QV�"x����8.�b�AN��.���+��pbi9i����y'���ՑwP�N=,���g���|����Yⶂ���*��r3�2���'�)�*�m�v6�&p�H�9V�B�әWw��S|�13/��%6S��Y�x���`��-n��H�	'���Z�X"c#�s��	�&hk�\��,7�R�n�HmȼE%��<{5�W��#J��*�W�c`�V�a{K� �ȳbo\:)I��˵�F�43��cu���|��L�4Sn+�t�ݾ���x�_�~flh�϶5I�y�d���vk :Rn�Py��!q4D��(�~k]I˫�c,'���;���u�r@H��4�1:��o�dO���Y�~N��m �d����rVP�vs�r�����^U�[���P��� �];�$�4�=�����,������23�vOq����Nŝ����4�
Rs��ƛ�z@5��,�ʇq&���'�vdA�
�8K�w�r�k@rҷi�d�uI
�)�]ԖB���H�~O&�Q�P�F��ǥ�'�Ђ�i�h|�[��
܄q%Ծ��6$[�e�-y�w��
�X����8
�^�F•ZMNe�%�谼I�N�?X��щ�qh����`
��z�⹺jl��c�� ��Z��`��Z�e��W�>�y�6�̕c��e�j��~]���}5�9u}I�]߽�b.L&���|B�=ޣj?V�A�٘�BϫF]���e[rN�iK�3��ڳ8�������|U��:��� ��PX��@����}�츮V�pZ�q�:����E��yN-�Jʔ�[��p;|�\�R͜	0��9�=�Ź�o���l�*F����Yt0a^�E�
3Q<�&r�*D&4x�Iv���fO6xn�#��"*����/
Au;��B�+��M�S�(��XW�;,���5��c��4E�}³6E��N:''�nb�/4AmS�&q0�-��;� ��:��sf*q�!�X!-=���7PK�~��p��=Z{�ɥ�CH���G�l�
�i�oΡz�3�.�*\�Z��+r���]mo�6�+�Pb��>(�p�t3��E�6+��pLu K�d��b���x|Qo��Oi�#y<�wG�9�wpK0G�y!�
�K�P��R �-*���U]c$�-i'\'/�n�N�"��3�Y'U�
�����%�pn��ʼ��&�Σ�Do�o8:�v�Ȣ�?n��Q�����j�f���ક����ĊXÚ�VGxV�.��q�
~HNY'N�X֩�	��l+dʎ�C�$��x]�Ē�Ph'�,Z�׶�N��V��Y4�Z��2RR.�L�������5�ߥ5%�J��ks�/7 ������צcH�-�v��Mw�ξY�
M�E*�߰M=�$�]�%2���orvF��v�z뀻S�=��+���u����4Z��6�sx����w��OO���Uܘ�����*V��w�w��G�8�!��G�E$��P��3FIy*�̌��B<@�`((�*~r�Rk]�?:�C��2-�>ޖ����l��Dk^�E�����B��;��F 0e��Q��Q/��ف9#I��#o��p�c�Cq$��^��kV��G�y,׫��*�eGY/"e�ųB�e���4�@3(��k��k�(�{#ӉH.]���?*�>�]"����?C-�IP|�m��XU߇N6x?+���C8ο�@8΄(`���O&����8��I���YAD9�}�_�N"[N�!/H�ɀ�1xH?��a�gx�l�`
��(1�{Y�Y�g����.#�pD�U�ꠤ��9��̣ ���}*�~�ꦑ�k�nFŪ����ѷ�4%ԓ���B���Y��7IVu"9�X��i�YM���X�,Wf�wv��H<������}��6�
��C(�Z%N7�'�U��ܤ��N;1C�8�g��#�(�S������
�t��e��Y[���|��Y�b��IZ�]��}1�W1|Y{~��[Am��ki›(������U��e1~�z=J���At&��5�M����찭YFɗ�+��-u��?ݒ��Uu��;�A����>%��k��m`7`��v|����er��j 8u1Os���)J�8��:E�_}���xyg��/d���֚e<y��b�Q��(�Ͱ�[�"Re�N��z#��5+hil������B\C����L:�H�
u)T�y�?s�5]����z'�Hv�F�\^�^���ºw��|i7=��t�����^��Vc�Q2L��7������P5���:b��M�eԪ�h\����9uQ��R��z��T]�O��W���`I�8�}z��f2��G�5?��2�_�g_&7�۷��d���7=�C�
�_��a���oد���-+��u���8�46���p4ѦF7
:��{�z9�n�>��&߅�]~L�@�ĹXa��i��n�Q3[A:̏��;L4�ˉ'�1�+O��׍�S���(�zU.T�

��U:���hX�W}�C�t��#Q�z�I`^�p&�/Rr��’:�Dl�Ю�%2�[C��H�h�L���$��c���_FX�ί٥��*�Kj�f�����Ft'��!Ԇ��aD5/:#�R���
+���AΔc��}�^�PM ��H�fh	&$B����t�=�֚�G�M��"�;.�߸�W
��Ɯ>g�_�K�)� !ȍ�ԑː3�ׂ����]�o�0�[ʪ�L,"���%J#�L��T!VhAMI٦���l�fٺ��|9���|�/���
�'��x���j\>�/��H��5�8���qb<��|�9��Q�/��OKf�^]qM�_.���
U@'�0��Rg�\�(
L����+��vG{J���@�.���a��]^Go�$�'���@P��4b!�F�#p5C?͠`�������*ҴE��p�Џ��Ps�(*���x:g�c'��醜4���Bs�F�
O<��Gg�+R�d�4u��j;_-�b�٬�U�.����׼����|~��"�)��
@�cѲ�+z��䔨t���C�
���[��V�b�m&�75$�EVL��qr;ID�͝�-Eڮn��2^�5m�I��C�Q�C�*�t$8�j�GY�x�TR�5���{֍��O;��!�>>6�M���1�Z��`���3�nE�[�Up����ۘd��BإX�<��Q7p�4����6�yi�t�|rl�cj�;*u8=`�x��r��ݹV��EK(^���)�!� s�; b_i�?-/y��vxc���`1Ta�]y����hV���ɼ�D�&�Ґ�O(�`lV;؃��S/�C5@W� T�\����,�����c�Y��������<u���g�Im�BP	_
D��?d�涿�����3�,���7����Yj��W_��4��Ⱥ0�I���W���2O.�)�x�� O~�1ܩ�+r��n>dS��^�aj�t�}Bϵ�_�koG�4���sDJ[�
���X�C+!��؉Nu|ƾ��$��;���
�_���������V쉚H<C��X~kdR#aJ\ig_vD��"��g?ô2��9�~���Vx��d/�,��ƣ�v�=��Q�2#>�<w��O��T��Z��)�����hG����ܚA�3�s
D�q�#Td0�|���@���9�B+��6��q�i��-Ѵ'��
x㔫����^��~�)��kD���w�|��
�4�q`����o���J�}�kw#�[�%L��ǔ��N��{A�/egA;��+��pa�<����b�Y��ȵ-vE���{]ҋT%��W0���q�gfL�09�� �{��:!��GR�%���(3�kNia�������D��Fu����]}L`@}�v��+<=78�><E�B�|:�ԛ�+�F����}LK����=�d��bѨ��yu��5A�J�*�ZU#0
f�'�;0�������|t���f�4��K�g�R�jY55y3@��������4��rM�Q����cA��<
ԡ�?;�5i.8�L}�è$�xp����$Ȫ��7[�>A�vyo������tc��V$�F�{oVTjqۢL���m���]b`v��c�v�ګ=f�A!R��ɰ�]�L�gcI�v�]�C�5�VϰD���q�C��lW@W��0�B�i��f�8��Yn���H�
”2$F�cz��[��
h���!2Cȅ}c3T��B�.��.[-3& ��O'-�.>�u���OF>IŃje#���m<��fa4�n�{��X1D��^���o����L��O	Z\.�w��\0	
\�r�bԿ��b��
�ɝ�!�h�O�WR�`�xZ�M�9�Bϛ�\��ֲ߭�������k�]���z~^�g�`�[^��W$�Pop�#�#�z�Y�;h0���e�ms`����pp'q��P�T�nWtd�ߊ��s�~2��Iw��=<��<�LN�����)���G��J,�*S�B�/�ɔ�XH��د�h@s����7���<9��g@Soq� a�N�⹞uV��6d�����@��a���n(+�jf��_�u·�C
v�mD9r��������0
��B��������*l���'�����-����Wg�Q0��a��N��q+�N6�樤���!]�h�C�o><�X�;]����+��ˇ�M���~�	�N�f���ht�����κG�n�8������x���go	���œ���͸�xNҢ�0�a`0;:��jL�����
�E&�x1�h1�7$�!*�]���	��4��[����S��
5Tv���I�������|�Q�FtT.�,�̶	�DA�ˢd��$��PS�����<g�ã���jeŌ�R��[Fi���(��<�dε����ȈGג4V}(�/������,!��g�֛�E�OʆkP
:��!��d���K`w�H�����	���8s�%)�i:�>8��u64N����PG$q8@Á�H�qb��L����e�!({|������Ei��-��+�a���T��Iqyj�HX,�Rn�o���I�{o	t��(��t	�!�e�gԜ�a}�0n�ۻɛtt7��E�E��bd5�i=U��&i3�f͚�QZg�ڴv���ixʲpU��,^�C�"�r<��t��.����UQ���R��dn��,�ɂ[tX�l��\@נs��ΏF+�S9�c��~��Dy;L��~݋y<V��,�d(k���<����b��;O=�D��rI���.�����fZ,��ќ�+��3op�-��
��4H\�j�⹉�Ў�we�@}86��	��!as����5��T�l��G�Ĥk�JA��q���C����DA3P9�+|��K�{<W�t�/��5$�����3є[��0��@j�"�F4��3^�j���'ɝ>%�Tbrt���4\���߯J��h(A0�n��m�;16�J���F@�m�Y�%؜�͠\b�����$6{���$uAwgc�� �O�ddE�\i��(LonߤM��[�s##;ȣ�t�����D�9)�E9���N�7L�ݐ�(},N�1�UNX<��a���W�Q*g⺺x�[©2�|�x}��5d���V��X�q��5��KgR��
����@����^+��6�|�oA�+aORr�	
PWe���dEB�F�r��J�T�3Ǚ/��%�༟�w�x3m�<$?�����;�p��\uG9Ǥt���%�$)������pBwu����H��^��v��s�H ��<�3�<�$��,^
�Ql40�i��k$��v�$_�6#�ӾH���fo�8�|�4�K��d/m��x@$Nջ�
h<�rI�L�d�`�X_5�Un�j�� >
W�Tv!���d�ͼ�?���kO�H� tpB����*�I��)�t_\�`�<������׬�v����~ $�����<�3���!��c�|��v� '3�hk��O9������f�5�4�r.#��M�UѦ�H��ɧ��1tة9e���E�:[�Q�
�橨��a�� �swX$�!:�.`�%�F��X�R�M-��FGV�D��!�����YS�~�Ա�U��3;�em��Z�����@d��F�V��5-�x�FUwmĭ3 ��V����8�l"��T�D�
+�>�e�sJ��G R2"����K>J����Yb�U���wY=��D��01��
q٣X�:⫛$�r�ez�ic�_�7�1[f�me�L���*U=��k���ZΌ����xI�R��1��S}ڐ<�M�v��sv�����S�H����1J��&f���tq��&		��QÑ�ȴ��g�rń��Ct�g�D/�:(��߾Uw�ٳJ��	�BU�����Ş���_[��k�w��с��}1O�:_����>bcoʪ�ژ���H�r�/�,�	��tV��Ө�A�O�)�B5��9@�F���/*&g���Ǫ��/\�a���೫7�᮶���AnK�͒����#�,IoU�,Z�s/��L'��t��:���\�P���Dɫ�
J
�t��T���/�4	 ��i�;����(���e^NO�e%�ۉK#dX�(�޻�WS��
BϟxW�p���9>>��|�4���S��5~��N/���8��y��;����������	�ԅ/n=o��$@: �trs9�c���s������xz7W7g?������k{���ҏS{��m���}>�`��gg��ɉ�X;��3jW�'�t�W|��,�;�4��$�h�~����$�G)u@��8Ro��v�*C���CB?O�ڃQ�<[>&�Y�����yŏ�%=o�������
n`l���s�d�O5�(O
�2�G�� �L/�<>a(��
!����P��n��ɢg7�����ܥ��d1c_b:[)�E���8qbz���[�����_:w�}�_M���w�����P&C��&d�a}ЈzXuG(�F���kxPF�L�S�D�I	�OV��\��}�.
]����A/"���τ0�E.�ۦ��g���v*����
�}�I��z�5e͎�ӑ�v�p��=���W�6hܷ��>���Ka�0Y�!�d�A(�O�,Y9����[G�A���l��8p�C�jD��H�CA��;�z�&Q&�4h0�ZE�j(���)d\�Pf�
�a��wQ�]�����;�?�8ݷ�K�٨۷�wr�Ѕ�4�ʚ�r4�E����qNx��;�<�^��FZ:{TA���-�-s8�F9]δ�=CD%�g�80<�ºM�3�㠚ϣ�q�>�@s���S�t�.��
�|�QJ�E-|�\�4�1d�4����2����Ԏ�9��z�ڠ�Du>]Ysl���ǬQg�ib;e����nB�O�v����+����d��XDbSϠ���۱]��A
�3"M)3\�@�i�I�����C]�F����3�	���Z�+Q��pc;�a���(k�)�������V�-��l�r~�L�9�IMh�m�h�����r�t�C��z�BI����a��%g
���U04�!mk#<}���풚�ں��6횁�j{W�()Pyf�;�(��2����]�k[7�[�%��.l6�煆9v���P��jV��NX���'�N:I�/�v���@�$���Nwݕ��a�Y�G��p�
��Ǣ�{;�J��]L?�V��@B�y8
Ӭ6�-x�uP���,���|Ղ�WBmG$#쑀s�6�	�3l���	4��D�hyu=��(��T>��b-���_s��|M�>�h�N��B�R�"���'ʅ�H�J)\K
��gC_�0T3�0��Lyoýp��`��g�pK�<��m>�	W)�V4�d��X�|]����Q$��sf?�H�s�a8V]���3@v_��~�7w�zG�$�@p
�qM�h�3_
T��c��s�B��}jf-��U6{M\_
y�O��5���i��ĖPL��0ݖ��L��Wꑵ��C�)�TE׺��[�A�)���D���Щy=x֓��i��uS*���=��V</��@�閯�%�?^q~?����8���TM�xѤ*1
�]�f@�q�Ji�L��b2��N��9�u�%��ؕ�N��[��G�Ə.�&��y�<�g�a+��N5�"���"Y�\	�J��<�P�sc��ڠ��jޚ���k�v���0G�	�#�7:�|Z>���cV�}6�o�����L�"Wr�ㄴ+de�e�GBhh��-��*�D]vW	릁�J]֛�8�0vmp�N�y�[Ƈ�A��e�/��'�������t�s����z�\�
O��@���U�bG+o�˻��al ]�(	���/��h�����;K�x=v�ݚU*����ٯ_S�([I<�N�ӻ;�B�
/�ԙ�8y�ؾ�N&�m�*�*H�˗��7��Xf����;Xy�ߢ
|��
��X���߽^]����B�ͫ��Q����|)�����~+��Wr!��27W��0�V[�X�F�����D�i�dY��ґG„��R�DYF�9�js>*>�'��8%�BR$�%�F�7����f�(�c�t��jM�/B��ry��m���d���j�o�<���|f�4L�bɒpW�&�»�&�K��~���B�Н�v�Yq�l�?�}���֏�4�0�tĨ��7����^UDS�DU&��Ͱ���&�&[q�
��JPD^�C�8Ax0G��J���;Q��������4�O�rJ��%�ܒ$"�"C ��*N�;(��]���֔<I(tM@��!��
ۓa/Pb2��W)���hƱF��.��F�ќ��Fv4i�q�tl):栠!^�ah����]GM�/w��`j�ٲ�j,��a�Y�eOOM���]S8��(P��*Oo��m�.��?�'����o��釠ǭ���d����[�邓��b�}R4!a�g��zvd�U���E�/lv�6ʶ�Қ
����_�Q>��˸C[��dG��>�ܲĽ����L�K{`�hF�L���^�2�(��y��4S-��Q5�a���/�K��ꁏΆ&�;Nݩ>����rdf�ݵִ�L[�>ޣOB�b�Q�A��C�-����Li�.�:�^���dPQNl�:��m�|[�ld�O�����]n�( \��+�R��O��2"fY � ���HN�c%�B։�\L���Ne�^t(�[ʟoT�֭,P�0#�o%q+�1#!��K�*���6�΂�5R�i��22�9�&�9���'tR�{U�J��?�M�{|~z��Z�E��I�����R���&j��L)��J�ǧ���OMy���r��Ї�]��m�w�b���b9	Yj]��zJ]_չ�&�i�Q$>��P�XW1�:!�V
�Vj��	C�{�.��s��v�D^h��p����r)��Xe���;�0G�T[��;�16�!�;�z���Clmyk`+�藜��#�RE���:��|4G��fL=�`�f[ԓ[�p*�E���N���g�eL�d�����3T����v��p�p�˃�Җ�=<�8>\~��y~(<5�"`�Pe�M�'���G�0
����tT�O�_a�Sɢdg'����=kwǒŞ��@$'�{�IB�b�Ȏ��%#ɳF�A���z�s�g@�����������*sy�<��0�+�\��{\Y��~M�6�|��e|�j���*��»�LY/� ��ɼ���E������U�"�7P���9T��IJXuwb��(�	���o
�LF�9��앬m�s�M2�ɲ�
�21p!�=I�Q�^��1�t��DG:��eD5+��x���!IW*2�T��8����3�f��c��́!b<����&�b��S���9V8cp }ЛW�i�6�+
�}���5��D8F����`��]V�I��L��nPu��Y����A��p9��b�c���>�Z�U�.0�;�.GM�A�<�g*dv�p��;InA�\���>*���i��W;��9��w���`�
p�{R�F�U�+�l����A�L�σC�
��R��x�_���)�X!	Fut�D���N0�)��Ђ���&$>���h��?�D.965
[3a1A��8�����e��-�@xHF�;�ic��PK�k��*/�v�6��9�<�t�.��#��s5��U���0gJʼJ�^�+��\_w�Q�'���o��F�5]m��vh��w�18�w�����|(?&@�0�`x302<V������$��7B���.��4�����{����A���3�	����6��\6�*���T~70y�6��h�^�5��Vq���u��6Cໃ$���ͬ��Lee+h��Z�d��
<����o�p#q*yu`ϒ f�P2�r\�c=���*������z�Q���4Q[O��qX۵0�Ќ5���
/8�D��r�dk�%����b��̦oqfY��a>�&#"��J�𠿭����rDͯ5h�Xz
�&�Ѿ�_r7@$�N���QN����P��I<��+��"$7vt�u��y9@��0�c�i%$��v6�v65Aȁ�4ݼ(�~
$g	��T�Y�z)���_ʶ�ţEL����[�o�PO�i[詊�P�t+��$�[A�x֑�+X6�l��V�~����6E��~I���w°Q,����/����*Fii�Fi��������u�@��	������ӑG�AQ��q.vx��"ؿ};��Q�S��k�u��t.���+� ���q�'O�t\K�w��Mt�/�	_��٤���;�kX�����콅�w��M�9�b��)�r#k�gf#�*N`�P]v���G��u_�\�?��/f�v���(�hV�q� &,����������e:r*{A�&�0��<Ȓw0]>�ia��M�&0e/>a�p,��]���̷���-l��ͦxE��$�y�tݡ�~x�����s���_�bE/����?�i��Ňe�F֋��@����+Z"
O�O�s��g9�g��`�S��y�Գ�*�
�L)�lF!u�̈́���%{���U~�V��W�"{c�½
�x����/*N?�i��({��l�z{��.��o��j�p�I3fK/q�-���~��|2]�������LV�!~u_�+�th:�t�n̠��V&H"�=	���F��8��1���Y��D&�g�ѩf�PD*�_�U�t
MnP3�ϓ{�=S,�: {Q�I��yY��\(3(�5<ͮ���@�$����L��F��5�\�Gyi�ʭ3�iJ�'�ԫ;��V�D���1\-���T��Y5#4�K�$�	i=�̪῞=���
s��n�G�޻a{0>n���/����-^4���e�	g�2�$�)���S�����cq�EO���3o�l�j�SDH����S���P������sFNLu��@2
��,��i��ڒ^3�d�Kٟ��^%���K�}ݛ���ۻ��}�{
�noC̳>�L�܉h�d���=7�����N`4�P� ����:g.��E��E*YQ����R�K攺|⪼q�*�a0{+��5�>n����@f��_���7�ac��W~�Y}���"��V�^�3b����mm|'k1N_��
Am�	-�y+��aEIeV����P�Qw�$��/�f�Jb_�յ�X_ܥ�]����'�J�dM��ќRez)e���na���z�	�g�][";�^��I2�8Ԩ�� `��F��[!��sʧCj
ɖ�9���dPdAC/ɳd��h~*1�IE��d!�u�4��w��SU<//r�1�@�H����Zͽ��i��z�N"-^t��n���
AP%6�9i�rG�,���`�>��iI`qzb�>�h�3��tt��i9$�d��+�tҞ�t4��q�N�1��x��Τ��0����y~��<�♻"@�-c�H�5����1��^��l,hܑv���R;�b4�M�ש%".�ßE�,���D��
��k�%��UV%+�ߟ��deu����E��4rX�f�C;�A�y>:���樭�p���4@Q�7��ɠ9��1lVEO~tsύ�q�<J�tȳ2�1�L;��$YE�ȘV2
.��Z�<���ډ�=�Q��`�d�pU�0e��2��lڟݥ\��u���*h֡�
��`��H�����7|�%[��c7G�R����U)T"uL[U
�*�ژh��B�F��J @h�2'T!�0��>��iX��Ʀ��tt[�˒�ՙ�U��a��E���
^�EQ�E@��.�*+җV�R�O/�EC�+���O����@<߀��#;�+)zY��f\��e/���C��^|D_8��Ѽ�DÙ�Bk�|;'�@��3�ӣ���V�m�
�ѩ}�z�n�z�t�C<����;��7�S�1�����5蠷��
?�,�z�c�6���~��M��-fw7��{��>&$��|�i�����$�~t���:�;�>��:�L�t�i5�[P�B �2
ok����[����ə����F�V�;>i�w�z_z��%�%^%�dVc�����φP�k�x�;�1��" ��N������kC�[���,��w�c�Mjx�W�mDF�z�Gg
س��������2R��w><�w�Um}�	P��A����0ts�q8��C�?{��q���݅�?��6}yң��1@1�Hg�5�@��@>��N�n��k`p'�xA����ao@��S����]�K2��/��C��T�s�6����s�=o�z��	�
<뜽�^���CM���t���`���Q�t�n��a��?E5��H9`�%�coS4烵�x���e�6�'���bĪ�I&!o���#v~8�𰽳�{�@��8�Ͼ�z��h��4yAQ�7z�-�M8_�%�M�(��a�>띵1Q���%�����a����cHL'X�#QH>���v�#��浫LRz���	u<8w��#z�=]�֦���ۧG��^Ën�@{M �W�Đ�z����ZG���A{�t`���rz���1����펇�:��I�c"R����{���������A�����]G�]T$h"(�*����[u������f��4�7�����h���0�l�����?�oڍ}�L���vhv>��aI��
	��:jv`e�`�i��&�F�ST���p4~�z@�[|恎��p�`��
B�=��0�����v����t�[���;�[��魅��G�`���s�?�
��yP�變:�,��#�P�]�������c�������*\,�"���ޫ���α�e���-��D�����[|�pk��Z�z�y�����k�1��q�*-�=�D��D�{��:��>q����gA_���Q�,b�@1���tg��H�CF9h/
�h�Z��*J�-��w	��Oش��gq�n
����>�g�;|���ѕ��P��D�[����(�
�n��dfN*��H��h�ϥ��!`�}A0 ������6�ޏ� p��N+�M�2�E}��#9�P����? �ERH�/A��n��
:���,�\+��/���O�S#��x>In��*Q�3��He�z��6�h:l{�[��m�&�d{�0�Sn��&M������YH�k���(5�[Җ_Y���|���Z�1���:P�%lLt�^��2E����O�22S���r�@�B"��$����\G��+f`XCTZ�>ʒG(��ޕ�uBC�9�LE��ab��F2�`��V�gى�������<��X�w)����=cWNU��ߔ#`�)�w�
�J�͘vc��]��@)�-nW#���›ˡfq�PxG�^�F�绠<}g�NbG���,.�a,�v�lS�>d���4�=�Ճ���9pv�E��ȗտv'�Υ�H�L[���]��Ȭ �Qu�m�����`l�,���ai�]劂�ʪ'gw�b��ZP̫�(��̬�ǫ�$�l�3��ˢ�eu�PT@D�ɺ�2��O�5�N��-�Hβ`8��U-������_U0�B��2q.ߪ��W�Y��o,�p�e
�CX��N���\��c����:JK6Js���4�����BȂ���#f(�ua0��ZY�j�d����Y��LG�	L�h�\,Y��
����W%�N���5f��FF+2�S>��Q�V<!��H�����z삎u��{��Ɵ���g
��6�k�+�M����q��菡�RئΗ�K��MqqS���}B<�ԍ�Ybv7%�;��U����a�Z��K,�!>��#�'�U��`9�ݟ���Q�CFK���N�Bͦ��ޞ]
��(�����ٛz�˩���~����~�����I<&b5�kK�B�_���E�Z�����J�lKe=)%��f����6�bA����R�����U.��_r�bt��|Э
��GX�Z��!��3��:'��o��Y6���s6r�An�T
��A`�ي���MFYP�-�յ�Owl�"����ޠ�>�h=�q�=�"�����.<�?�6��B�؊���%t��з�|��z6t�FjV#kd54���U�|n�� d��$j�z+ �2�[������t4�X�k���O0�*	�Ai�	�����j��Crj
�E��A7*`�<�u��£jG�֎����I�
L{�_�b���_�›��k�)��=��"4
�;�V{')�:F��e]�}4$X;�ʺ*O�Ͻk��������W�鞿��?��� cŸ��ٻ�/��k����㵜'7�<�V��u$o�0q��t��g�����~��4����;��3��݊�t��^�z��Td�q/A�ϵe�^���@0�J$��H>���X���\��Exhk9(q��g�i�ܻ������2�v&su�-^��ɳ��3�Z�A-�?T"^q��?ǃ���G2���y�d��M9N)w���r�^+BC��I����o)K)9/��n2���W—6})lnz�)�*�U��N������ݜ�Xy�'����,݀��)c��N̿�I?��+����<�^����1��[X�%������Q�%l�X𧃇��/�p�Yw\&<Vk��F7��_ϒ{7��u?<}3�os�J�0����5��g���
�l�eg�y�
��@�_�*�(�G�ja>c��g�fP�����ݜ��ѓTׅ�Z�4E���T}фIO�����@_i%�E�e�f�����Ͼk̓U��^V��*Ѹ�LZ�W��~��X)��f�"�Z��T��eB�Sx�����3���F��=볞��I��:����s
�8�M��)�q�*eb|(��%b����|�JE�{Ts�	8oc�,�\[8�T�^yF�{�p�Y�
čUʆ�V��C�9�B�	��K+��c��I�N�+Lk(�
ZQ�
������J&�w2�� �����eN*/0���R�2^v�3)�v��%
r9J|V3�r�h�۩f(Mc���P'���~�%�fLc!Id�Z�/���׽��iܨ+5G �i�YlA�6��벨1
�Q�����T^d3��0��@�:�g(��928�$̘�LWߘ��O��18��b���ڋT�ʣ�F���_��J^�_a1�8�C�U숭9��kJ%0��i;��!!����LW�<Y��`jc��z�t�C�O��>X��U�F�s)a�O��"'�,͈}��!�{�o�$��j�%�dc<�){�����Ѩs�fh�1��uy��ɇ~�oSF*�^
tٝ&���H��nWܓ�"��Gu��\*�����i�%�z��|UJVt38�� /}�hV�ԧ�����h��"��M���*yG���(�FST��u�n�v��*�O���M��S���-9G��v�eíS�oUV8:$g�n�e�=����Ô���d0I�$�F�;��z�n�J`hS�А���w�b�H)�-&������>2\G9����l*�i����`�H��m�?7�Η�=�7�1ѱ�mq�@W��,1��6dB�3O�lq�`�d3�<ccY�ʯ�cK��Q�����R�Ci<#�LF���n�;�ҙ�ݹS#޿[h�_����>C�ywØd`^@��uĥ�8%��.��;�V-5|��M��Tb�|"%g�@�@��+C�)u��3%�I��d[���#�aWm
�Wfj��:iw��	��(�	�l(��p)�_ɝo��F���~[
�Oq����̒�p6��zD����i���w6��›��My?1�ǰ�8 !�[.56�];,�l�U���3#>�{��]OO�wpǔ�6n:R��6��Ж&Ӡ�z��4�=�o��v�¨*�SF�Զp�Q�Kb�o��i�=�/7��ރ����'�x��"��nUމ-�9�.b�k���캲�~q3AN��R��� ��^��L`f|��q��qJ>@'���7�K)9Z�d�=,��M�K�z,����qU�J��:ܕf��L��l2��AA�/`���r*��Ї���S	[�t�
=���5z�%p�P/���G8�݁GҬu�D��`nuZ�cpb�	�u��ұ���R��r�h^}��r�$����um���[͍S�t��bI
��:�W�/��b�Ɉ����*WQ2�� \�D>���7�����k
.���hO1�ũ򒺽#XZw�����5���zJ���co�5b�aC����/f�H��F`�D�.I���
}�*��cT.A�h�vf^#���S�lNy�i|���Ӛd�qy�"'�L�&�;�A��1
񸀅M֝;\D��G+!VuC_E�
o�}K��
]>^�(j@��'g��2����:)�{�.c����6����ʏ�	�5�������1R�����A�y4���f�W��]��s$�[��7~~�v'R�<m01E܉3���s��
��6}J(̆�Q���@�����+M'�F�nѸIa���`겟��[)�E�@���rl���h�R*�/��n��=�P��"6�/����洎f���\�R~�����@�Ѿ]�������cu�:�s�FAau�c�4&�u摠ݸh�v�k�u�ҍ�yT�%K�����-�t����v�H�a�ZE�Y��-���g$�1ӧ����}ᙍ{t����LL�3�%$?<P�O��*��Y]ϴ�2J(M�b#]��Z���o�wf������]�n�0~�@�v7��C-�a�a��
�ƺd�[���'��DʒMgð���(ꗦ��6V����7�G�O�H�л�-0��;-��Aޝ͹�H�
;��ř��a��尠�-`.�/��ݯ��v�#An�6��.�A�-�wo2<��v�C��
9tO�����{�����d�Ӧ��݈h�`�3���F䈊[�N�dCq&��k`��!1�H�uz�n�4��{x�^91'�N�6�7yN�~h˲�B�&Y�v�gB'�
�+U.�q�
-�-n�I�ȑE"��U��(ҀA��MtU�>.}࿻
��Z#�Y�0;B���Ă�>PzDïl7���^��DG(Iˡ����g�.!�ݗ?Qt�ط�Z���w�e��^uf�JT	{{\D�?�K�:�>�s�{����g!rU0LJ�ZU��j������9~��ƌ�����|��QB�S�wބ	ϯ�Pf��v��}�^0
o Y�ۿ�h�/bEH��x
 W��6�j����R�O���I��VO�2l�������e��"��Vח����_��SU�����t,�!�x�3��9���.e���ۭM\��t�z�ݒ21C�U�t�
�O�8��/|�5s��R��k�3�B�l!�*�̿���5���Q�n��4i����\�DK04�瞥i���8�7Xk �\m��Z�R
��w��&���sl$�w��m�G��pҢI��ޒ�y+�ZHƌcU�$�
~:Ii*A����F�+&X`��/��y��v�W�ɘ�F@��X�_@I`���]@�$��2/ ���%,��@B9�!�4BG�79����m�(L�Q蓢����{+\��6L� ���4�h�����]_k�0�*�%�� �+�lk��ZVb6S�=8���}:�Nw'K�HJ�O!�u:���r��MsM"QP!�P�� m(iF��~��_�!�IJ:+E��S���Mp�0�{���$��sNx�r�8I��"�Ȯ��^v�@y���~ű�b�4��kg\\���m�Ӣ����1�A�~�>��dv]e�1�-e�#cPҙo,[��#+]�&�QE�U��f�c5��CX���}�o]+[�q`�&l�c�|���r~v9�uU�wAQ�z�a��#����Ԣ��Ω��oY�8�4�ma��I42K���MA�LUqxc^F���(��LJ����e&@�z��NC7���y�ӊ��!w�A�QtX��^����!���Q��#��w�,nb�|��`?	�Ka���Q=H}l��!�7�.<;D�;�O����[ /N�6�PQ1�ø�%��(��Y:����$+>���qO9j7�\q��p��0���ëq���h��'��go5#d��C��K8��(�~��c��Av'Tȇ�h�`=��~�GpEӏ�p埡��
�6�*��p\�R���`�\Mו:v�ZjaTY]�m��3���n��,��,���Y���5�7�A��ʤU�e����ܮb;&L��?��6�
�}L"z^)Y��Q=u����}z���휪�,�ݠ�q��*K��!�9��֖���s�b-�H=ͺh�s�SA{�ʛi��oMG��n8jU���<���`�XX	���X!�)y��5�f��^B��U��2�b�L4�^>�'�0A"S�䮑�'~�VŨ��N������EkR�7b��˷Ñ����KN��?����L������]�j�0~��5�~��	]��B�J2x1�x��w��O9Gw�mRJ��H�Ng�O'��22xz���:�,�4�!ώ����ǹYT6���u<7;��v�窉�+�;�RX�X�L8�Vq�,���W�d��r�����&2�_��Lj	+�?�س����.[��C�vqU��<�B�l�b8�L���sM�Ԛ�v�h��P�%\C�ĹB(
>��d�`c�1,��C:�JVشu�oN�M�a�E�;6@����uG�j"�:�
�[���s�{�.�����8e���g�z���lE�Z�8x��{
{;u*��d�?}��ޤ'��I_���=e\�[�+�z����6
��n��p�ܘ�8��� ���83$Rw͘���H�Mr�sEf���O)`�;���x��I�"x`�j������@�1��Z��=Z��xeG�W�����*�Ο��H�s���@� �@wh�
�Тo���Bv)zw��`VCW"z7��AÔJ�y��u�P�D*0���Ā.�A�6_�i֢.&v`i֝8�#\	��r���koI�+Teե�};5Z�T���RN!�&D�MԴ�����ޙͦ
�+�/����y����h��+&2��
1��l\!�q�܄�oo�:FY
��E߸�sk�W����{y!���l��YJC�ˆ�`��.�MJ�Йx�N[�ϋ(0ʼ���⃘��o�ѯս�R!#o�6�(tGuﲬ.�N[��b���_P/[�������>^9�[��'�\��m()(8&>�;y�ލ?�|��;��sq��΀����?��l���Cc���y��'7g׫��o��>���g/_��pr����Z) �S8A3w��{p8��@"��-��ۅ� 1e/P{zχ���{2Q!d�����Uԫ���� ��/*���-pҢBO��ߋ�RvG���A�
�器׎W�1��,�\2Q�4�L,��=����O�G��觛����=���ٮ�m��aɄi��m�-
�_��6��l�+��N��c�+5���T|ihE`%F 4��>~�ژ�z�?7y�'!�Wg���Zvt~Q��R�(���_�m4�7��2f�r�2�%���Oβi�qw��d��;�ơ6�^\��b��R��@�^��n]HI7��[r��L�� ^�^A�B���~F�6��V��ASܡ��pb�H���a��KTSL�0"��V*�H�?�x$��p��nܶ��r|<����b)�&�ڈ/���~;#1�J�]� �s��5o�ts��z���ܶojՎ�C=�8@ɦM��
�}u|&4�n}��>�G��L��•4<��GoGJ��n����(jfn	��{��lD���Łe(!!e����Ўd;2'�vGP�cC8(�2��9�D����I�ZUx�STc:����j}���-�ܼ�L�\��~p���bu��� 
�[����X�y����w��=�`�U&	�5G"�0R��^s<�x�g���q�&�$#����L���e%�i$�j�<{�	��6�Rb�r���M�㤐�֥EEL��p��7vnR��M�n�!{�@:���׻Et�+6��gW�f WH�N��O
�L���X"=��.�'9�0 4�'����e.�]É��D+�t-�b��:b�?����q��8kޚQ��d6��&��6!H��r�F(e�7���-�cO�m�Bj+t.�'8c�: ������6�q��R�D��B�w��d���4v��]!x�K_�g�	1lݚ�v�g7WOFx`۳*(L���]4�I��;��^j��/,𢡄8Ċ�j��[�K�b�q4�}��3x��9!�BP�[��ɪ"6�2
Os�
�D�>��#��	��#��w���LGS�"g�Y���#�i��zA���D�0�fv�v���qTN�һ�tK��	Ȣ1!y2��S9��&�kX��%ёp�’����\���U����f}
U��+���8!Vk�6����l/95]BW���2ِx=oC��ʦ�ϩ�f���������h�	���2Fw�E)[[�e���mI��S�K�P�7'�5�k��=�M��_� Q�=X����b���tq����n��.2A�*H�)N�+ǽ������3��ӞF�[����P+��ꢟ�P02h�:�_C�Kh�Y�P�#���S���Y�BK��}(	iv�
�s���&!���*��~����Y!��@*Z��+�`���R�UJ���t��R-�	�߬8ɕ��0��LF�)b{��'���s���_n�����T
��໤���}Mgx�L��G���M��߹�9����5�an;����C�*�'��OFsw
���c�=�q�"4�`��$�uEq0��>�!�I�&*��h�,C�V_�}<���~9�'W�f�pS
ƥ���͊� �4�"��ܜ�==��u>��h�XT0�^h�Wp,Zhg�����1y�"���&i���!��.l�x��&���}0
*�X�?��{X�ݍ
2,p��z6��S����W=�L�6+��QZɳ�k&��s� �]5�c=r��m-������	[��B׍a9(�mM��G��4Xu�z���g�d?9�Kd��E�C�A�x�P9����s�A��+$H8�헚���8Fiq��_�`�B���?"�~���lS�S6ŵ-��Z�tM�V��b�L1�yy�7r"�d\E��_*�)����"
�9=ϋ)Mx1*���7�Nu&]������]Ko�0�/=m���
�0��ĴIEڡ���V
(���!���J��&�pA�?;vI��ISs�V�O�0J:R�-�m�W���l�xw�����@=�R�	]�,a�)]�\��'��3-�@Q�m��o�P���A�n��8V��ڙ5al, �)���e��4�""kz# ���"/DP�K��bR�I�7vlu�,�U��2)#�k����{��1a�^'S\��{���0�#_e+���a@Y�"�]����U�gF�5���^,� H��z�*K��*�I����R��I08�ه�Pȣ��65�r`Uv��ó��S���J<��X��8���<+��pc�)�8'�*�&�
�2��7�x&�NH�~=����J�}������K����(�OROnlvBZ�]�Mm��Zs`��dQ䨯����D��g!c�i��2�W,�9Aqq�y���-p��C;JC�_̊a�cd�(�Tr�0�M��z�B�Ǚ��{�gZ|GI���F�p�a���-燹�{sk�A���#N�B5�g��~���V����0�psg�
*�'�������P�Lr2��1�-���)��	�[j$l��v�ݲ��Q��s'��o\� �&����q��c5o�hŅw�F�k���O�*'
�������]KO�@�-�)��^�V�H�T$7U	� �k���P�;���í��-�>�;���̷�ܨ�-I�x?�
�2�4��~���i[�u��!�ȭ�叱���F�?�
�u[y�i��ʥ�?Ӣ�G(��V�g<�#�k�Z���۲������N���GE�-Ժ%A�+�k3ѷpXz)��*2J:*��r~i�^�h��]�5S�z"�)[�}P�Q���w/������q���e?�E�*23�LA~�I�S�a1J��~�3�Ō*�4 �IO�AW\��8�p5�bq����ͭ5鰣JpG��o�7�~�Z�b7��j��l��Ӻ*`���K��e���F�7Hz"ѥ5I��~A� �k����F���|�Q6�Ċ��p����M��3�#�n��yo+Xt��柟bW`�ȑ^���ɸ����i�fX,Z���N�Z�h,8����fG��'�kX�"B�)�������
�
��-�r;�wT)��&���Cڀ@^��o$�>)[�����W�(�B�񺮚(]���1��5��=���h�C�
c��Ba���Uŏ��-�"���sD�0���X�0��"0�#���𬬠�|OZ�7�G�X:1}0ɨ��*'з��鼐�j�y>p��_��fp�VP>��L�L	����Ɏ;�L�84:�ٙPS3t���/�:�!!��_N7U��:��љ�m�bV�
�R1o��#
ҙ�99{L�D�l��'�j����=5�6!O�oXf��5�
uA�ݶ�KV��
6�i�;7�j�׹w�?s���S��l�y��@A�� O�Y����]o9���E	H�{MD+Bh��BTyH#B¶��Di����3��ڻx�����3c�xl�G�a���w��#kx��M��^�a�����u֌�V_#
xH���g\f}"�����N���j��q��"�8q�t5�ko.�o~$�o�X��F���W�(��=r�۫:�֐���d-$��%� �u�C�
���IJ���D�b�"���U�NJ�ǧ��Z��%,�+���bZej9m\b��{n7�+<�%�֮&T�
��>�!
O�9P�����W�.���M)j��&Z/NS����Ԏ�M��@8�Dw@ODrH�ھ�T��*��#�Qy�X����ŕ����F�j��<�خ�{}s�K�O�;�3A�|��q�e��]i(<��*��x��˯�]y�v_o\��t<9��B���3c�H�3>��Z����Hs�ͥ5�F)�����g�O(�
-��W�gy�{bi��C�gV�m֔%
V�Ͻ��b	�!$A����7U~���)6ե�J�j���(�~���b��ݐGYI�4`����IWל��Nτ���2]@:R
WX|�����z�����&u�������U��6���	'�U�S�
�\�!�%�ҹ�n�
��<{���ji������F�"�M�����
���igYO�@+��x���_�s�x�7KJ&'�~�<���|~��WуP��ls�E��
�I�ՈM�\���V�|�jGn��`n-����T�����*m��'��p/|�0ؓ�J�ra�v�L>�K��}�	5�I7�%B�����NK*S�V�4�
��@a��ܞE�wA�g�?�8�W���Y��'Ovϧ'�'iAo=�K���)��S��`�0L~�!�N!��U���#�I��w}�e���at����4���x>q��*��0J>�ky$3��.N��}P�~�f����[�r%�`7�=��o���`��"��2B�ȚX@��X�=��"�AƠ^������*#������FQ�o̟�O�/PN|㵅��UE����������p.�L��f����צ\���I�b�>�O������	�@Q����A�?u������1�}WX��θ?�~�/9*�t���bS�����x�G��b���NξvF����x�n�z�d޷(/�bLv[�-2jY6�+��H
8U�U�e!cir�޶y2j�`��wgW��`�t�*����
�e�y�tz�NCF�(�)�Ck5�0t�����ʳEb��@�T�#n���7h
C!8�ˡ��2���{>U^]�[M'�iv2��܂��Z�Wf[Lד���.I���#}�嗷��|��<TE*���}iA�-3�1���ox7�F�����<���,�q3���	�T�*��5���.Jm�˦�1�@�vc@G*`2� 4�c1�Qh}��<g��Kœy}�;z��Hi�tZp��O�Z�Og��H_��Pѵ��Õ���n��'���&��|&��w�1�uP���\ ����|Xc��!+�L�8E�jpI���p���'$�w&��,�ix�LɆƻ���2�:�Q�T��c���Mk~zt�գc����<�"sݻ�t�q����ﯳ�l��5g�����!.Z��r.�#`
|V������C��vh���E~��0g02{_���R	I�e�	(R~�U��-�<`�Q�}##�*���)�D�]Tq��6�*�3De�A<�<E��G��ˢ&df�@���3��*M�4+�l�jk�儾��F��-{��i{p�9^�H�,Y]�5�u݃W�ኪENV3;��lZ��K"CdSz-��؟FQ/�s�@d!��j�x�_1�]/ܷ�T��>�s��o	i�v
��N� �A:YE�,?��髺l%'�Kz��p�<MєZ��#59�����f� #��@*N�e�E�8�,v@,�������1[y�I(/�\�2U>T��ȯP��S�6�ñ��z7��9����\�U8)i�"���DG~��MI�) �	jo��G��3�Tq([E�Y�MgZ�3
רťqq|](z\��b%7�ǒ�J~su��w�_G�/��0���^��6�ztR6D)Қ0q��aBR�a��~��f
�лd�@s�&sAʗ�d#���t��2�ʎ8;F�Gtjٛ@��{�Fy�6�o�)`$�WW���`����k���]mw9��~Ŧg��4�������L6|'���a��qz4K��d�}UU�ZjI�����2ӥ�{��Tz
�����1K��ep#��lM�p��J':ˋ>V�����́���*��%�!7y�F�ȁ���(�^��-Ew.�Ā��n�үk�_/J��x���\r(Oi��Q��L�����i� [<L�C;|=������c�F9���v��t�
��)V7�01�Pu�m��r��G2��鍰8́��o���J��y��S>�K�AK�/e���W���UQvS�,ش��V��h���)&��[��m�_��(|'�Bh�3����V��g� ��i�9MS�8+z������7F��w{ȩ#f�Ϛ�
�=b&+�n�wK�K��etuU��;�T+��ћ �V���5�˟�T�}N�?��s�jWFX�mc��)���
PŠ昮K�u�:�
ًM�sf��U���^k�*�,��L?f�*albI��_o��B�L)�.N��I��l���H�z/`
��U���i��$x��)�,
������!����kp^5�ň�g�t��/�y~u�lg$T����1H�@���K
q.��/��)d�1�j:�_��ё�-���.�ǚ��VeF��z�X�f���\ξ����x�X�5��L� gNB����`'��⭒�"�ˣ��뿳�
�wY��RJ�OK�arѣ�����L{#�e�MSi��P\�Դ��G���+�f�$��k�+'ʨd�&�|��$�8�)�x���#Dg68����tz���U0�9�e0	>��I���5ybJ�H.��:��|on���+�q��'��U��9v�W�ס�$��@�s�u�� � �&���qƩ�9��^�H~�6�o�e����(.���δߝ���#�&����~
�k-���}{:�!�ɇa���f±8�2��Yo��R&%+Š�j��0�e������JGY���������C�C�7��ɠ7fL���Y�j�VL�[)��yיt���3�5H$
r�r0�a
	�։�����ߌ�=�[Es&�?���Ny�ѷ@��<���z8��_�����5�J~�-���Yo8���g��G��@o�6v�l��)5�)vu�܄�#����̱}���e��e�wc�̬԰�f:�|�N�2y5�k+7"}�n���ra��,� ��Z6
�fe��9��ht6���VՓ����[�<��PRĬ9�0�b�A�xyW��^W�Y�_���Cް�6�o?5�R�A���9�kv��Ŏ���5H�q��V䟖�����z�`�: �����v��ޏW�A|�)���Sʈ��?��`=��c]�:߁@-6��X���,'m����ﳩg0���@t��H��ݜ�����PĞ*;�`��4@:��Q	V �F��@5:Ò4A�p0���+X�h��3���%������\8e2���p�[��\�FD�l-��e���T�7�e���"�s-K��
8���P���������ēk�@��6��O��mv�$<6�ӯ�q��tK�)e��g�豯K����v;~`�y3^��j+�`n�`#�\n@_�@�R7j�K·��znИ��@U���׆̄Ҿ���d��9e��Ї`��#,�����[~$)�c��]��b��3��7ny�!=��-�Ѱ3haފx
�gL�|$d�|ij=}HPq�kKC��)�l��zX<G��h�LR|d��I��
���A����>�-0~���g�\QF�3ZD�o~�,�pDK�)=�n֌zQYK�}�	�]�|(Ͷ|>g#soQ���?�B����.a�f����+@Uͥ.�B���g��6FTh�k'�o��?ӱ
��?�W���X���/A3u,%��A"��כ���bqP\�A 1�<���M?g��9��ڲ�<_�|s*w��|��A����z�;95Y�٬"�����0:H����gkC���c�󈽺C�Uk�dc�s���B�e��ޘ0����xM��ky�R��ٹ�Z�~�V��gz?;�����E��+��
)��
�KBd3����b��_n�xĢD5�&$E���6ԝ�Ci���+�=6xt��K�q��A)�O����™��fz9�8-]�m�,��?E���D�ԃ�,ԀRCGެg�(U���d�RL�k�s�I��wȢ�/-C��Z9�Ťe��7�z�'���,?�[�zE��<C���4�M�5G?�#-��@vr�Pe�4�����-����I*ܜ�b�
���<»�#�p�>@��u#�m�]
9e0Ē��L��6�~gaQ]��q/��Ik�?z�ˑ��!d�l�3�yS��i���ː���J�=@����f|y������v*�c�F/rD�g7��h>�V���u���V��;Χ�G���+�m	���g����2�.�����S�$0�qCT����H��ޝ��i����;�O[�������L��%�k	����>ʩ�=�#<��63a=����W?�
�&<���c�<������#����;��npclr[lK����d�!��ɳ����)��B�!����]�gP�<x;�s�����Y��.�0�*WR0��,5aOs�b���I�P��S�Na�fH��:ӭ'�ۃ��0���d���r�j����;�`�>c�d��į)�*�2�W!��.A��nf�q&��kU2�n˶?\a�5`=V����f�z�4�5a�!?��*8���_W��m�UJ�Ԣ"����iBi|�Y?N?��ґ�� H�=GD��zCoaL
zF</�[K��Sg�ӲSG������g�@�w3'���|W�c�Kif,�|�t�]�@�5Ӡ�	�m���S̰�͜zږΗh�a�\_�Wf?�]���V'�Â�y��A���b�e}x�Ȩ�bNO)�{F���镳G�%���2n���8s��p�;��l�5V6�s��ѝT��s��`�W4��SEgi���ޥ5K�<~��,O����mk9����>������?��������Bݵ+\����S�#CW�1�s&m{�'�H �_�BT����}��G]�IY7��</��[>�f<D!��0*�:ꗸȇ���-a���u��\#5������tsA�b~��u�c�o�>�:�0C���)l�<حL����􇤪�O��u@��B�f�,��?@1&�E8�~�T��\�R���i��僇8��?�ʏ���a�Z3劖���H��
9[�|�w�|D�
2�?9*d�8Ym������&2�e���J�?7�C����oB>���֭3�&�b d(m*^7eny�42� K��D���!n��Vx���@�3�oPe���w�i�A$�"�����:�r�3f;�£��&��_�NP��@T�b1=��y�r��΃�^�[߭���"�Y�aFao�z3Y%|�7�J���J��<��N�<*�4����@v�hJ�L?%pj����R�}�� ?�_�����^O<�`[��5d5�Һ��ɩ���1	o�<m��� )�h�����(�=(��qs}�.մ>*c��m��աA����l��M�`%lȔ��O�������݃���,�{���rj+�4M�vkk�j�_u�%��^�TF�g���[��
4w���V����^BR�J��^���|��e"�!՚^KC�a�]�;�C~��#��O��ظ���f0/��=�������b�z��s����6��\p�ߧ�Y�VK�����6113N�6o
~8��z��𲪂��];v���ri%J�e�a���/�U�#?����fs�y�-�D�;��k��_b�>d��Z����̱�>���֊Q�\X�n!^\�d���k7��\�yu��lj�D//�Z8��4ƨ|��̫_U(HWb���1���sG
��}^c4-`��5�12o���|�e���P�$�]g��a���ݟ����_�a�B��s$��/�c;H ��5�r2T�B!#g�LZ�ؓ��Cx����:ZF�_S[���P�S��V�,Ʒ�m0�,��X�|dT�8\�It��M&P���_�욹X�>��1�y\묉+�{�]�ϓ ��Ԁ�6wpt��
��{ñ��oï	[�u�۠9Y^of=`XVJ��wQ��Տn��6�ȟR���@��,�zt���M{��,��@J2�H�7�X��V��r�GE0i���DKYjЀ��Uhd��7������EcQu<'Jg�)YqZ@k��Ty@�����y�T�d|C6H��K%W��cv�����ĕUb�츟�$}\h��8�g��BH��-�R�s:��Y�"rx��E���5T�Z;M?� S�O�k0���ϩ[s�	C��W�+@*�"dF��J?�Æc�L���s3���|V|�G��@��N�Y��H�QB�E]��F�����^�G�!��,E�K�5^Q��d[]��s|�'6�T?g-(NW�۶�Qm�Ҩ`��,CW�H�Sw���':l _Y���D�L�����Fe�n��߆s���ق}��-�f�Ry�~�3��%G`��u�$��Yo�ftRק�5O֚���Φ�N������6&g҇q��Bm�	Ԕ�{!jC�b��_M} ��~��lQJF�GG/�s�[����D�
(Q�wa.ֵ�^-��|�"�׭쨑ֈIjNk���:W�z0^��̃���>�M[��3CC�8�<�5��'�ag�a�7�j�Nv��)�������|�;�w��gdg�8��%>l���2��<�펱\��)��:Ó��ht
�ͽ1g�צ���\�@���i3,���R�j�"[",J@\�y�F����=dI�t|�W�����#��J�A��P���Je��8��a=`v(�e�~��^�(R�(��qв��'\Z=�ZO�s,�M�Ǝtt�_/��6��!��H��8
�I�j":Ym
�/���n�Go�»T�`�߬�5g�\iC5ZQ�)ٞ�P7M ���E��V�6�.Ǐ�54��+��Oe�n��Θ,�g��K�f�>ÃG@��	���P���dƔ#q0d�9�$'7�)���nj����m�
�}�w
S��k�;�����6Ƽ���7cQ2%���R���VP�I獗p쌟Ǧ���-�HOn�g�G�7��3?�%ž�i/�h�jߊ#~���4�� ��N�[O.�E��'�ab=F��ZEpqY�Cz��x-�h�������o�EH��@-M�Z8FJ��˟&m�T�>�	�-�6��{��6mj�
Z�����t����`��k��T*����i�YS�q�)���~g0:=�/A;Z�Ժ���t��/�H�v�n�+O��X�mস"�q�_�сƳ�޳ي�"�$���L@�~a���x�b�6.�|~���J�e�*<��l�"�o�D�X���rh����_֣>o}I2���S+ʒ>��؀{RuQ��!�?� SAk���2^�CZF�.�� �!:$�B�b��[;?��2z9&�,j�s����jA9����'�
��PD��o_�l	�[���5$ �,TV�}�� W�껴nB��ib�;ju�G�@��Jl�ӵ��Pe�Wm����QL%B8����V�K1�Ս�DQ�^Ϧ�.�GH)�_��画YIZ"c��L%����aL.�+�=3��@g���0��nx:L�b&��Fɂa�90l5h��{�[P��7b��_��NҲ���ܟ��K�Ԧ�~$���9F	�Ao��y�x�� �2���;�s-��{���	^������_�jؘ�!�\��|����$�Q�R8	m�Փ6�6C�nG�m�9�g+��ɴf/�i���G�n������6^.���|W!R�����l��m���j�f�$l$��+���[bSw*�`js��@�.���z��FE�NƝbF��υf��r1Q�o\��pPڕ{x�g�{Ѧ�\Z����7-i�
���E��
�0��y�=��EA{��U��4�@~J����&����0���r#YO�Z�G{��Bfd�
�����vVV����JS� /Ѝt۞��l��P}%f�̟�e.O(�'�`���Q�����5���B|J#�󨮺�z�0���x;���5�A� @ѽ� �/��np�d���z{�Two�]֤�Ė�P�J���6�8ȭ��"�e�sM�cp��Pj`R����7�Zi�c6�U�w}��?���_��zi��M�]�0��=Ŧ�l�d+8�R����xz��ħ��̗�l9N=|n�>V�z�<rB�����B�9� ���F2���[M]>���up.{�]W�n�e�V�d�$H"<y�`Yʋ(��,
(B�fMhfN��BCT)��B�HP��F�g���t����4oW����^'"�2��G�e�.��Ի��$?�-�A�0ᄁ�;��b�~�]�&�RY���&s��󒌖ز�+��%�u�qv�[{?U��{?Մ7"�=oC�Aؼ�HW?�x�q�LX<�M�N���/��/��|�mO��0������Rp�a�R�
*5~�@���d�����#��w׎��BB8�
5�R2;���@Lp�4����y�n�s��p�@f2mWU��5Ê
`�	�E�`���4VJ�/H�3�
*�S<Y��&�*?,Z���Ĕ2����\#�/�6"x\"����{��2_�.wo�U.h�%��j�0���Vd[���	��(M����Y3��SS!�>�������޹y]��M�mn	/���DԘ�vֹs���i���)�����N��o?�ع�1�/��`�ܧ0fN�kZ<� ����1R��L�RM H�� ����U2�B�G�"KЏ�B
Q��"��*��,��%[5&����Fﺳ �/��D�l��'BV=F�J1�XBU��[��4c�$��k�v�j�sM�>�տ�h=�X�}��
�0�{�"콍]�ӗ�4
�њ�훋7����0���~Y!5�1��ƒ�>�sr4��u����+�UU�rH�6���1}�w��|�}�ݍ��^u_GgC����&�1�͘q��kc��َ���������������1����`��� |���x���v��-�߂.��+.��{b�X�'����W��v���j��Kn�@D�9Ek��P��$��$��ML�ӧ��W�T��9��y�<z���i���C�z�i۶1�ѱ���;-�:/{���/�n���lS��t�����w���5FB���'[5�T�X=��+!1�G(\5{)C�j����b)�B�KJ^�E��p��2�d���gS���E�`S�5S)$��Q��$,�h��"�5�
!$�k��}x�v��&$��XYs�~�hi�%i�C)��E���U	�l�e��J5g@V3`H1\��4�9I9q�i�n����J,7�-
=9�
W��3��u"�
�"M�)�TQ��q��� ��@�\F"S�ׅXQ�i�
���*�I)�,��tB4D�ÌIs���u
�W7��70g)
:�-��Ѝ�^t<��05�dHS�Q��D��!Ȃ?T���W��Ìp�������ǔ���0R���B,p�,�j���&M	�_X}�{\/���Ҹ�Jj.��!QaL�$O�eh.�1�g��ḧ%*VZWlm�B����I}��9��c�� ���5���2�H�Hۖ��,�'�n2*�#h�(F�_“��g���1�2��[M���[���5]�֭1�/i��B��5U�.��&�y��
���=����/�i�L+�1���05�^
��|I�G��H�f���W�F��K)��J�A8su��۷xk����	3���?��l��$"O��PX���p}�q��4Y��3�#�w�YR4�[�
��t=�����.��sw��'�T�a�8Lf�v;�;�T���&
?�8O���/eJ�4V��Q:_",�Qs\^C�,��P��x�4���10O�ڙ�B��#C����m|������>�����͇�L�H�{�o�/CW^���tn	�İ��*�gH���Ǭ�04��y��ۊo�W�!C�%-"��ۚN�b�?d�����o��zzu�p�&h.T�_�[K}�!������m�u\
5E��c05���p��r��:�w�]d<J�N�#9t�µ�c�d��֠�)��#&�˙]�c��{zr���)�`|'���PӸ-�*1˻N���pMg���^�cX��5���}�������p@�aC�G�
<1�-Ѕ�]L�
�Lh-�1��iFRgLJ纵T�Kr-��R(f
�r�2�[��
V-���T�N�
�5�uҢ<�`a4[��'�5���������I���ӓ
����V��a3į�J�vr�!J�mN�I��
�r>��F��JNIgU�K�m&ǿ�����c�z����ʷ>*��_%�/h�;
'�J��}�Sx�	Q�2̖�6�di����K�V�
�ߊ�h��Rb��k�Q��x�d/�{y]�ݠ>^���T��!�iVzA�~�	�t�;��;�k�J��	�Y��3.qbT��̩���r
r2��1`KO)�Ef�D�gS��$ʼn[	hbUytb�h��M[����/;p��XI�]eE"���h��D�PM�FX/3l�݊�tʩ,ɺwC?-#�<�oW���k���
�����W�(sk	޼�ud�%b����Zs�$�mTi�7�x���$er��q��7���w:�T������5:E�8��՞�/������4bs�*Ă*��@_���s3�i�TR^.Q�V�'�򦼸�a�񢇩Qw�["b`�t��
L`�^����Yo����[�_�
��hrf�V�^?X3?�����+�}?)�y;-s�?�;��[kɝ�r͌�a�o\!>��?���6Z���z����q�\�
��xSLl�^�Y�d'���x�$|�ZC�НQ�\i����G�L�$�C�CX��h��zڭ<����iB��.��A-�pLЍ?���t�oL��GGT�U'�����<��X�ja�~�W�v�m�O>k����RnO�vڕ#�>�L�0GҢҗ�.5�t��_�Ϝ��=�Q"�k/Ҵ�}���18���~�_�0ܐ(�7�z�H�_��o��iS�/�_M�'��*��-����.n�\E�u.�d��(�Krjl�܇
�L)>������^����P��a�ww��������`�M���WmW�FW&�����w�{�ݬ@�4D�1�J7�ɽ�rަ�����F�.~�n;`���p�#���us���|Xl�=k�<���:�)2Ki|����6���P�~���؍�B~�f;Pl��FP�cZ7�w5@%�g7��*�����.�P`�*6c8[ml��:�f���o��U5PN�&�,�`���� �5��o*��V�*��Z�;="�
O{x�2�?s�j����}�d{����}x�4Ti��ׂ�!G{�!��(v�S
ȳ��t-ɫY�4��]�SD�4ߖ��-�%�޾�u�4�#ft�[8�ly�%H����#ƍ+�Wx=ֵ�H��^d�~�@�(n��M^��Qw)��P���8i*j�u�慽6Z68K8��S4���%5�CL_��<Q�+A�ܶ�''M�gZ��+?b�v�.���=N_�G$��^��Z3&�U-�Y.�G^%,�횮s��~,Zf�ü4���@�����WM��aP
���'���{צߵ1�Dv�'+��o�C����Y{o�6�ߟ���5NΒ�l�]x�t����y�(�@�%��F"U�r���7���%�	�����y�f8ҽ:��R��L���Gt;#�x&xD�
5�B�h��0I$�$bN���;I� 5�I�� ���)��H��K���͉#�2$(�>a �fX!34&Zӄ',@���������)�А���b.��_d��Ƙ��#!�S��8Q������֧�j�>g�2r�	�9���k��i��K
_��pћ��v{Tp��H�OU�k��aF#�(m\���8��{6�8�"�GY@}���s)A�4�([z�?�#2�s��
M �MxP��Ɩu
�g*�o�^�o��y(
���1�A���Bh��D�hUkx��� uMX@D�Tv�U�����/�/T;Bؓek�2�j���]T|��@���"�A
d�k�("3_ q,g*��Du�c�����,�]	�X�}EqX�o�glY�X�T-�� 	�9��Q�./Jٚ�dn�Q�F�D]��v��,�!
��d�eL��_9��d�6��J���Y�p7��KJ�dS����N���ӀL��
�%�����B�v�$�&�H��(Y�F���ʊ�~�+t�		f��Z���VH��4�/y	���2�z�M`���X����ӠِI$X�]��N�8�^�x_.��nNO��z$�1�"p&�O$	4�vv�%8�h擄;��nV<����f�����q<�)_��By�s��O�=�0	�A���6V'-2k�Իڒ��#�n �`�:8�SH���?>}�=q�F�|�-7��i��ׁ
kShvg�.+�P�讜O�?�фz�1^�H���Y�(^�8c�+���s�D5���R�q�sD�Q'dB�t|rן]TҶ��!�7��u�"Ye�9,`z���8�/�X�6�t�fъN��#���`� t���'Ї��*>����
5�T2�HϿ ��i
X/*�~���B�?Z`g�3c��?	�O�g�3
��c�o�OYy��βA(�G�tQ,0�K�!d���R�KN7��#p@X����6� �ҧjL�i�IH%L'8��Y�AU�)e�["�,��*ʎ��L�\R��Uؐtn#Sk����)�3��u�1J'CG7�J�`�Up\�٦L�]�?�{�0�:�	R9|���]M���r���c_G�`%S��9^�Ҡ�r�i��n-�_�	M<M�^��]o���:�'#����*`�YwߗZ�5��#ʪ��Lʳk �j�_@��W�6��pX3�J)��"LUNQI��P0[Hi��c�#�&�n1e���=��Z[J{
`|�5Yw��a�~]���m�a��k[�س���x���ٰ�o�C��$�HNNq��:�:�ճ�:ؕ�Mi�*�n�	�p�_>�2Uk5x��sJV�}IԴ�
�BT�7 
f\���-T�>��@��a{#z!��۲��l����\��`����C���f�j�:޼Um��x�5���S/��g��v�Fz���#��F���TvZ��<;vB1Cr'��)=��F'7��gǗ�������s�����ۄ�@�/�XB_M��9��������[���jF8��ϻ����[]325�̡����������lx�f�
����<}G�.N3|F�旄	џ}?�nN���}�oV���~�\���9�C,%\����ܥ��+FF\u�n��0�MA�1eY��~�����<���'D���n�����z�v�7f��%9&;���=.��Gvrh�K0���A�~��r)�K�}�6�4�p��70�f��K$tx�=%j����u*�������x��8֟��&ǜ�Y�f�R�	P��8m��2�F�w1h�ؤ�c���Ra-3ph�T�-%:��f��>�Z�����Xq����H�f�V�a/Mb^��l�jET��2���V��A�og�=�#CjW�wa�L!�%�:��4^�.�sS���ɟvQ��W�3]���*o���N5�:�����R�ͰԻ���W-�rl_����%l����j�C��j�����P)zG�!�S
",�oA�ף�&�����k����7QJ@$�½������/�(�P57t9�Xv[��4�\ӻ�x������X�9�a��ʳ5@F�j]�� ��6�ؾ���:W�\����8LH���V�t`+�Y}�ac���o�a� �k�[���*��:����PwοM�J� Qy��r�2m����|��Z���,i��A۾d#FU==�8�RAAp�,=�f��'@7�4<��p���T���c�bFl
t�Q5e��16��W͔�T�3��$6�؀tI����6!����u�0�~$�h��Q��*W��"�p7�`B��6��6g��S}>o�\Q��)���>ܠ���
V�y���7�#�u|ZP����Κ[�y#D%��֤��&��*�z~$�LjGpS�_�x��p�sw,�8���g��r��Z�!c�#�|:�Q�(���HW9ҟ}Vp��nD���M1�0L���"�:��|�+�Z{΅v��.��5������ �Z��k�T(=]%���Gp�\�m�L�.��:[)�V���%�a��w�6'�Ǧ��q�T9q}��H7��00(��x_��)�]ƹ)�%���^P��S`�`��.��\�=�-A�<Q6-$�ܣ�ʏ?��r'\3}���A�Y�i�Šr$J��D��6�����ZKk�@��W�O��U�95���@K
�=�^9�
�����c��u��[�]�����1GP7I�:�f'
�G����(A �rg2`'��f�]���JԀSa�y�DhЕ)P�yR�Dl�E�����=�NbB��<S�^�m�e$�#@��wH9��9A��O��CK���e���~�S8 ����
����&�Η`uv=2�UO��s�:92��%F$	��GYjȝ�eK�7���yi��K󭿀p �]�����Ex^�/�oO��'7P��֜��Y�O��M�PMOh�H���*�ke��p��.��W��x�95'��YVi?��phT�^o1��n�:���~.��>p1q��p�O9]7����kkА,�x��!\�?ao)�:p��ߺP��(C�&��uy�&�Tr�F<3��r����j
�h$L��_����I"�%�՞��$Du�4�
x]�8$I/���W��m䫀DP�:W�X����!_@ž�ĕ0����������l����%`˄p�;v�}��ݠ�I|��� �7ϷX�g����>X�������S��OY����"���|��v�bbL3u,�G�pu�afD.�p�s�_��2�m���j�����N�tp��4�9���ߑQ؆KIhL��H���i j	�~?DE˾�ӹO�X�\�Y8,���T4U�Zw���΄� �˷�k���p'Ӵ��N[�D�A9q�ũ����c@'�j�핺M��*	zX(��N�3E�E|�t�$ed7
!����m�h8K���8�<�F��1Wn��eP��Bb��q�y��`����W���[9�b��'��_�HB?rf��4����Ck
�g5}�;!���c��y��.k��^Ɲk�;���q�%o����':9M%�#�Vsx][qD��YTG����X����9����A4�*����J�<ȼB�V.��kڐ��/pb�}��	�kHnZc�Y�Qd���M��r��=$��|1
pZTk\��+
~7$t<�:� ZZ*��6�8�j��3~�F���7��w3��X[o�6~ϯ`�vK���'�&�ˊ9��B��c�	E
$�K���RW�r�m��X�|�~���\�t��<6��xxJ�b W��	�r��X*�KΉ#�D����?�g
DΈ��&Zf*�~�����Lׄ�w�kO�5�Y�LL
	� S��f2aρ|��z;yOf��p��T*C�����18ez�8$ ��=͌����'����SQ��J��%7«$�~A5��%�0)r�
=5�6�LD,�F�]*���W�ʫG.it����>��n��20HDH�e��0�|�!
��t��z^��A�^0ӂk[tl�'�$_'��4�,^��G��$"�ɔ0���J�����-��]�'����4�O~��]bA����6cÈk�ь�wJ.1�o��ِݔ�ә7$a�*0����l5s����\�k��M��r�<
&�:�r� �T���˽���5"]���ޣ�+���\tՈ��y����������wqp�W$!�"w��\�,?��P�9@�^B:ߣ��ň`Pgx�d��\�eAf��vD2�{�2:�<Hd�q^c������6_/�g�?b��G��vo�e��_�`iG��i��O��LxS�垌��My�d��G��I~�P�M b��R3P�%���a��?"U��
M{��EVRà��K��K�9�yo=�������ƾ~�Ϭm��C�+�P�`G�y^��T���\*�˂u��<;!���ZA�8^Q}|����(s�A^z���v`IGDH�_�=�4������\3-���ϻ��m����62mfvBW^���F��|�ySZVlUJ3�=���^]����@��}S����u�[��S�ǝ�K��Ѽ�5Թ8�¬0t��V�7�\�Ć���V4�@#�%�x�3��L�iMu��q#�5gxLtU�z1�"�Q4Q5�k�9[��"?$,w"��:i� |w�����wP�R�`�S.pPI,4�i�UI�w�|a��Wy�vba
��� '��q��R̘J\Z�.|W��1 ";`�t#��8��8i�;I�]�u<����<LA((���yk�0yl��GG����mz�����s�}9qؠhB�$/dN�m��\2�[L��@E�3c'�7�.�)�����L��<�k�ն�U��ʭ0�sv�ubK��+����
�x�����D=l��E���DH�^�&��#`/���C��W�N�-��v���6���8t=8��n�{o��}�ծF������+�*��sm˥�hZ1Ӣ��HoK�a58�L�z$��]�;��b��rI�w�Xg����T����}�7�m�Kέ���?�j�ݷwx�a�1���v�_�|8rk��7�u�N�,�,G��.�"R��U� F�ǵ����M%U�=�s���^�+)
�ϥ�M��	v�ݷ�����0���*c�R�
/��M_�'>+
���?�Y��L=�6��u���w�����6����:a	<ć�G��o��!�n��ʾ�;�[ih˪=��;p�)���޶U�-�J�'��yt�3���V�n�8}�WL�v
K��(�H��&�Q(�"��CQ��4��Ф@Rv���}��|��}X�X"gΜ3�*��Z�+�g�����p�!\gZ�y1���fJ�.�od@�A��4lE<5�qF:AHT�@�3�@-1��
\�}
�]	���f3f!a&萦��)pI�_n�G�L������\i���³(">����9J�'��J��y��t�_CȕX�QG�?�Q�r�%Q�SB���iL#�X�d,�|��y�󂭒�t��,���q���lM.�������Z2�[Mxf�o��,K�?1��0%�����YƖL�l��ٹ��27�ճW�T�t2T)s.h~a����˯Z=�zp�r3��&n�r7^�v���:]�|�,ޫ��d�,�=�ktdW�ѳ�=�U�E��!�6�2���"!�WZ-�X.K�xRZ�mU��>����:���I��Z�[$8b~.�?o� vO�
*5�m�A�M\&�Hq�f��=yem�6��+�*�U�UPU�/(�:�]u��	[� E�Vgp�燹9�ݵ���+K�%�#�RI�n���{{+���A��o�"/��|<�%-�X��4�OH���,ŀ�� j����[�(��#��&�<w׃(;-���N`ل����qϭ@��Ή�R����	����м|��㒦��vﱗP�Q�]�h��k揠1��K�G�&����4E�v�����3�%]jI��Ǐ�H$߹����y�� ��DT�w�$(S�"?}SmZ�Z����m�Oi�[�dT�d����k� <x��:Í%�]�T�WJ	d���o�DA��^��Pgh+�n��9)���=���G�d&���,�h@��q+�)�L���)w���<��kd銔���]ńa�wjo$M-�`��|�LI?}GҢ���%Y���G��+B����Wqw�Zʆh�DC8���eN�d�[�������O�19C�y�p�%�|
��'ۺ��|{�M��.~GUU��^.�j_�q�6u�oe�7�죗L��Po�]*^�9��R��sᒈ:9w�u#��}}T�l�7��c�Ȭ�T��w_���oG������ntۃ��k}We�6~�τV��\���՘�[k����j���VQo�6~�����wP$v�$-�E��0*-�%.�Q );^�#%DZ�y�'Q���}<}G*I�RW+#������-.K�粞�y�Jml�JAY0h�,0�{I�-���+��k�!d:G��B/��0]���ɧȺ�BP2C�e�2A0E�4�5� ���^]~��|��T�zr^i�� ��$IXCHf�̤�p���xZ;�i;������5�J��M��%=N*Q�i�2�V�쮏[
�y"2'5�J�]�if�KX�s�����&�T�S���������eZ�m��u03�泛"lB����4_Ìk�Ҵ/�L�b�%�ѓX�B8��؎���MV�n� X�X�|ӵC��'�I�-hg{Y���%.o��_
`o�j^�-�
�t�Ѵ��]�?Pe����lcr�t��i�xJ�k�{��n�8hD^���dz�Cf�Ҝ��?F?EQ�G�6�0.���ި�I��s����Ɖ�wb�a�=�`���G��q֭͢�����G�(G%V'0��xnO9����a���X9i�&<JBr����|��49�(��3g,Վ�3�c$�6J:q��|��~�_�+���/���z�p( ���TR���~4����ag&j������d�Ke|Xݍ��&��ҿ�a;O�מ/y$��+�2_��RН��6԰o�G	��킔{����t
{���
�W�$GG�2r���a��BAk8J86�$���O��	e�c�o-�._>�0�Ju��n�awg�����|����ˎ��J}�������.90~����q�Q���N�4������y�|Dk
��grh^�-;s����>6�i��p�OJ���d��u�38�˷	�J��P�w��4g�7(k����R�n�����-�i�6���Ii�w���߾���0cZp2�aY"��)�o�6`�dU�k��m���e7���=U�d��Ihhw����7�9'���U��Tܓ�{d�����U6�y�O��k��ro��a�(�
��is�6���f+*);G����q�OsM�lg'�Q(���,������$xHv2;�a;�Z�}�Q�!9�J��\��{����9%�s)R�H��Bͅ�r�$D�DҜ�k;�!��S"�D�YNr��%��)��3qM%�1��HH^���s�J(IXD9��y�Hr2�Hi*<&��9%o�N_�;E�,���K3!�E(
� �f�#9�	M)W��d���է 
�潃�R`��7���P�x|�|������d�R9�~2�2)���U�����29KC�@-��h.xrl���+���Y*!�PJ2>+/ݞ�����	�&SPo�5@�'�a�[��x��X�D��4�Ƅ[�kF.�ؿD<N �S��q�u*z!����ިs�ր�3g���Q,�Y�r����)�Vċ���`�(�pV�R�'�P�Ԁ�3)nVu:�@�&m*|q3V���
Mߩ�E]�$&���8K��̐�l<)�	S#�2T!X�=�Ļζ2t�`+��x�����O�^�Oߜ���#һ���e�OE��i�86R���kDz`x���`�9��#�1�����S�`��P�������x�,bz�[�&������@~4 ;JA��p�Ä��@�TT����a�؆^3��8չ���!�١Q��4��.��D�u#���ꚎȞ��Щ*��,��Z��+1����P7�D���,C^ T"�'{{i>(����u�5�0R�Z��"�oA�&t*d�3|���A�7�b	�r*G"�0C�!��N4b�Gæ��3�c�8
�?�a�#��MBoo@���O�'��A!Ӈ�.bAl�!��[o���G���@c�pK���c�E*��Y����V�i�!�{��'��W�lN�����fN�,V��@�6($)
�a�`�з 5�ʘ �4�#f.`f4��HIX=��@"�� �i���s�����&`�٠�C�bMXZ��SI!�!z*��O�LX�J�-d�A5�>΋����2L�,̠�$h� ����}�kvcN�P��.�pO�"�.@��>5Z��)�YH<0Ɣ�܏D"��Ds�uD�P^���[t�V����Ժf�_	���<ߏ��I (W�.p��E�_[m��g���������^�T{�vzZ�	�.�8N�EF�wA��
�z�9Sc&�|g�E(sόD�ɟ�P�<.�gEWA;-R�cxb����/�d��U	��i��ٯ���	D������@*UѼ��2����kϞ��*Mz��Z`�&b	���1�A�q�Zu���V�����pv��4K���u/��
�2,y&�,��W���9��0����|��}�)(]� ��fs5�;��?�"�z�u*�FmI��4Ԉ��ɥH�V�w�-5_���=+434B&���ሁq�6lk
��)�;EO��9�B�s���"��ñ�/�W��E��?H�o��$���a�M�A��e9˛�}6�x٩oi.�Ss]Ѻ���M��D$@H���Rm�g?;e��e/Lgu����&h&ۓHkp2�4�?�Y��y\��?
瓋"%��Rm����RfT>��k6s��#g��#X�7Ȃ	��Hj��沆���G��26TL�:��Dw���
�X1��DY|�۪�&S!��A9�ż	zQB��%���@�xGs Q�Ѯm���wLS�ǖ@¬��	�1�9��w�������4�$�Y�>��w��E�����k������"�w��n~����Cb|yi��T�2�`
Х�!���HѸ�w�!���O�@�!d�7�}~�]�q�G���EV����>eM�L0lA0�̓��`\*m�P��>ly�j�`
�;(N�1$�,�^���@W���S	���a�;�W��[u4ٸ�S��x
P��Y"�*��5��ù�8�+���D���$f��N�/��0��4ёR�3�Y�uؖtV7T�CF\�m��ãua�r7J���r��O���)a��4��-���;P=p��E/���LŸ55w�i.��@8���Є��_\��縆�^�٫j��#�~�2P��$�u�E�ֺ��ґ���(&z��!҂<�[���{��MP�J}�?��5�N�W�Z�[��#�"I�T4�q�&�IQ�i�䴃�D���ܒ���,#BѶ��ֽz�D���F��+LK��������j*i��j�u�x�܏/^�j�h�ڽ:�p���촨�4�"Ge��tI���m������\�_a-ޤQ�XPD���kq��i�HT����e0��ETjw�	n��H����,�##���hϚm�o�ۈĦ�{�Q��`)�&��N�EqɻYѠ�h��,��Ю(�<�J��t,%�	���i�-1�� pQ�'����j�q����>`�r��Lx�s�TGࠥ���9~[���RxG!�H!��eNU�VL$U����TF���k!�pa��O@���m?���2\��B�����^U��-���y��d�ϻ�X�V��D`�>���%.Rr����VQ�A����"��y�qt�Q��&�Yo���1��a1�b��*���ֈD�&��+#[����0uL��_���F!�`��)6���e�[�?��J��W0�U�)l^�J�raC��X�o`m��������R��oX��0���������חf�\���_�J��ͺ����V��{W�…^���P̓i"��Z^%~#�5�׃;<�m2��!���yuFEq$|WO��N�z���zk߱��������|�ۯj��A�v�H5��̂���C#����&��_AA�7�k�!�k������\�9�������h��qU2�W����
�Q�]o�����=��k=�m7�5�̆N�ހ8�����{���� �ڰ�M��L��÷�շ�s �ޠ2\���Ɋ^#��A?e16��`s��sw�J�M�}u
�t?��P�1z(�H��ڃ��X~��@���i<�]Q�4���E)A��P��= �����
�v�}'Kڎ�׿3���
����
��5
��1��6���E1����S/����<:��L��X�@��!�b�Ϋv\�k���3�*���ʕ��<I�gߴ��%Si��pa�ze3�P7�^侟Q,�Aa���+�Hb�<P���ڗ�-���4X;D�N��(��2Υ3��X?��v)�6f���Q��������@,��w�^w4wP�S�������B�H�o�s�w7��Z���z�}~������]+l����.�\�C���Pu�?�.��_czw��]������|W�v��~�r����ˆ6�������{�u=S���x�
.��TkO�0��_qWmJAM{H(�<hB�Kb�����6ǎl�P���];I��aR��u�9��c'	��z�����vo�~�g�Vo*8ml����T�h4�X�A��O��f`Kn��F��*h:W��.��ǫ��إ@<GIa�dr&a�i�Y���������̸�8���v��M��	%X�$%-���A�$]��dZ��H�XN�}ҡ1�+fI#^J�V��”�s����%�l���y��	$	xU+m!�]�0MB�u0I��N�IL�4قi����U|g��ut�H��Y�����~�����w%��̈�Eʺ=�,�e{�I�Ϧ����U\n����,xά�_��� a�cf�5��:ç��)�.8�}t8
h#�XՂ����~;~E��72c��Y��\�)p2p���RDT����2$�FL�8!=yɢ>�7��La&��-��S����?�M�Z1�"�w-�N9U�@iV��>�٢�Rp��T����*�ݓ��v�bz�e
{�_z�-�G�2cr���mC6D��q�+J��M��
UEkdv�z���u���nn|�ǾT�`Ƽv{tmN=��[ʆD��#��A:�;.��(�蒞���;��p������Q[�T�6]��p���b�Y
ߦw�[��E֚/\��9�W
�pS8՚-G�R�����O��.fئg�eb'l��o��S�1�hM�z�Q��&����Uw�S�gN�&y��TA%�;}�	\�K�x��?S���W9����S���Y���7���1<[&����J�f�U�$�j���������<������L&�;�C؎B�����
}�X����Xmo�6��_qkQ��L�o�S'+�e�0`�u�O.-�m.)�����QoVb�I�pb�&��=��x��J2-Vk����^#\���E��Ԯ�6}xE�w2�Ѡ�`��x|0j	v-��!P!�����p���/��,B�D����5�p	t��*�!I���v���`)"�w:��q��{uV7�(M��(Ɏ��ih&��Az�ϯ��ê�Q
< ��>�Y�R��>N�S��Fl<�\��R� �A�W�ja�d��tD�(m����Q�TQ��
Kb�G$�<����/)zx��|P������������Y�S�~��:�#%��P��"=�u��8�ȧ84��`l����rm猽��j��ao.1[j��E�"�"d�v
nb�|��8�$�"v8����t!��ς �����`��n5����gţ�ow2I��._;��`�w�"��N�"[iD�4��U��D44�5�ke�rw|2q�ǴƐY-v�>��#�\�`2�f�Q����X4*N��d��:����X�b��V�N�'��&�M�S��l��-a,���L�>.m�s����V-.;.I
�"Q��2���FE�Ţ=��5����3����B��C�)�R��H9�p��̭tH�.iX�P`
�(��r�O��S ��J�.�Z���^�n����q�D��v��{�VZ��z%�X�i:�P�6_�Ю��Ѥj������f���J/z�b��a9�"^���$��}�3c�y3��v��Y[�~e�(i�RT��<
���`��x��!y�vE��y��Ce+AJj���n���c�89��}eW�����\� �Q�����-pn6+z's��\�^�T���\�9���{��Z��{�ܢ!_"�g��˘��̚'ȊI܏e�8�������mE--��n��d��۬�������-��X��P�����\���^��Z�S9�wcES���hz��}�8�.gh^�׆r�j�j��}{�p����|s��>� ���"lR7�L����
Q�%�R��y5���-6�v
v+�W��oJ���M�d���5�'�trkM�n2~�d�mqwx�����yM�C�5������J�����ffb~]���t[2�����[��y&9,g��?Y�k�]�֓ф�Ā�6{��%����q�(+c���~�TR]wj�jãC77��TԠ���]��WiT���Ik�vK����ho���T!��U�3��Ȋ$�np��G�K��ob�n�q��,�	��Ő�˗�;��0�s�y�:��{��Pl@�?=���g��ݩ���(y�M�@T�AY�VwS��l�#:�T7H��Qy�B��x�ߑ�vEm�RM���UV�j�Q_oL���(냻�!r�η���k"�z��z+8��T0�����os�m��(�v���m�s�䥯�2
w?���J��'�X� ��SMo�0��Wp��	P�κ˜�X�؀v�v��ap����Ð�F�>9��$�aǝD���#�ǰ4ukŦ"x���]����Q�Qp�Pe���JJ�9���n���8����@�p�Lcs����1[�X�����G樕R�}U� ���!������?/W_nWP
�QUK�/L��s�sqmd�����,y���l�!�g���~�p�ю`Gd%Q�&����MgF�EN�cF1e�Fb8��I����k�~�x�XV�������qKc����;��x���r�J^ �?��kxS�\P�B2���c��f��)8�tR����ڕƪ���}�l��0�g0�zC��M��tP}#��p�N��Z(N�hV��sٓ�3�HÌ���/i��0�o��>S�I�7��H���I�i�$��lX��rwy�#G�F��t���V���>���2����M:|/��-���td.�K�uK֣z��{�,⿺��S��,-n�#���U�i��=���TKO�@��WL�$����$J�Z���*!d��I�t��:$��	B�����o�s8�͒�p����j����խ��6֞B��@��0 �Qe�<��O!�:@�-I��3?Gr�`��
>]~!.
���ź� +LHS�:ڱ������s�j��`�m�)�P����s��KrI%��b�C]�r^Q(e������_��*2��定�Rz�W�5�ƛ�E��o˽'a�.'L�p�v+$�]�е�/	Ơ�l�g&	��h
���z��
6�2�җ�o~{�F���֔mc���X
q28~ԝ���h'M�p��芞�`�;� �M���N�T�׌��
ඏ��$dEJ�-=
��
�
�o�1F�U`��7nEt�~C�V�q۵��|�]DzTO
.�����ꋄ�Z�[�̊:m횟_�*���2{_��ž����E�o, �p���>���1&�j�]��Y]��\���t�ę�����(&��sb2!���8���)��]�ę4��c<�T��I���橆H�SO����ϑ��?�jL
�}v�nOs���P`Z&��ť�a����M�{�b���V;�v�>_o�����]�n�L^������&�E���/^��C��Vێ�H}�+j�@Dc_�3l���JI^�}v�]`��n��!�V�����s1�X�k�S��:*À9/�"�$
F���a����f[�p!�0�2�I(Q�0v��|
*I%H�B�cz���cX�!�O��T�!K#,��PA�Bʹ��"�������/�~[�:�p��yɅ�n���;� *c҈D��X(i�$�P� �r�������8���&����>Ga��|y8\�E�Q��80E��
�,�m��h�o���P�zݘ�,��6�n���
Ӣ@��/�	�c�cA��,P��QR�B�}�L�w;ӊD��%�\���`�w)[q�`ϸ�Jb��
��F�	\S�	�M�\:�F	F�,�kx�kE�NV>�~�C�5.��b�
{GW��g��>�0tNM�R�dnşm{������|����U4�Wn�?8�ڄ���h�mq�Jdzo��j�'���!�iꍼX�;��=���wk6��`\" 3X4���&6h�M�ݎ�9�Xdܱ��9,���tZ�%��6A=�­�/|gd�-�=f%0�J�������N<<x�}�Fb�F���㜺&�����W���Kg~N��di�Q��`a��]Mը��|V4'̭3:/��a���`
���Z�P��T�?s��z%�@q�3��դx��"���n�7ܿ"�$��*��hݑ������9W���߉��d��jw�]�r1Y�uŲ'$������'g�Е[�b�|�G��Sw�Ě��{��H],���d�S݋�lfμV�3}с�$����7v�Mz{]e�#�\O3�SQ��z�is����7�\-���F]�I�K$oU��8����q=���@rap�"�cˏ�yG�&�(D��,�8풔z2�C�f��
��TMo�@��W�����J��Ri���¡儐�^��mֻ��8U����qIJ���|�y3�<Y��ݐ^�of���M�pZ�kt�Iǵ#�‰1�y �Hk,�$��Gpp�=xבBP�D�K�F�XB�	�τ�A0Z�
i\K%-�*���
v�ˋ��/��Pi�i��u�0Q�γ,p�LQ���3_K�2_K��>m�;?9z)�uf� e�,ke�4���8������!��h;�H����׎��x%�\"=@П-r��:�U1-wC^��c��r�3��χ��(CJ|M���1����+;����d7)��"}���鷋WB�57&glZ rϒ8�8Y���`у�7��cv6����"�]�}�?�Xi�mQ��
�`�ţ���j����'vG%Ҿ���¾�B(���x�ґ�1�Ӗ�Fs�} ����Y��8����,*�h��H�G�/%*G2����!�G��C5Y%�x���AwK8���^b%;���Ri�f�ỽ���y��Hr�6���i/���Xk�������
�o/�8�.y��Y�3A[F��>Q�R����d����E�+pa5����ZVnͨ�pt�C��E���ua�B��ZZ�XiN�g��0':��NG�@�7T�#��TMo�0��Wp��َ���l]�
�viwv���ɒ!�I�a�}�G\�[ם,�"��#�8�[m�Z�d�n
����R�%��Ca�����^��У[��&q�<�]B(�ok'���kt%,����G��V#h%�PX(x�
,�ɴ������>_\~�����M&���0
.��0��|,\�K4�Ǿ�e���������d��b��*V�B�W���m�.^�����֤C�L�IX��4/;PpҊ�9F�!;�Tڒ�V��'�qP��A�����ߞ�b,/B��e�)E�w!g�|r���ON;����x���e]Ft��;�	e�*�����Z�(�π�Н�.�<��f��x�36g&�C�5bu]�����A-���C��f,�[)
�u��MV`3_̒��ؾQ2'I5��W]i��^����b6Pk�g@3�Ϙp�r�lY���is0�"�̫�����1^��!ؒ\#�+؊`�}���[Q��K���T�/�E��ֱ�'�ή�˃�i�����p�V\�@�N��$B�5�b>c��b;�#[ťTf5;KG��}�����l
�_��6v�x5��	J�C�z�o��N�_����H�
�:��>Ғ�[��mF#�]�}�8\)O�����U|��u�\��ͳ��lA����TMO�0��W̍���eU�D�dQ%6T���En2M�&ve;�P���-m��
�f<����}�j��"�-\]\~�a��͵*EUBP�\i� (
��h4���2��� �1�\0��	B�R235E-1��8�ܝ�(
���4�s	�0B�4V�LAH�#<�a4a,
d�'ʉ��<MBfZ%��Z�+U8Ic�>��i���f%{5'מ�(i,DϿ� ��E�q?��^4���ſ��S�G��n<�s�Shc�*�"�Q�:�OP�	�.S����$1�J�R�ٙgU�c��J�bHlRbʋ

p�@�FK�Y���K��\UE
RY�@�#��4Y�q� ���J�/�j���bU�yi|�eؼ,��[g²AZ���H�9�X�,�=��Lv�Mvħ"�D9��E.k_#W��Ή6�omou�@q��9�g�8z�IJ?�0��9��ef�fp+�ݘӳ�q^?�����Eଯ�|Q��1Q:�v�:�����:=�k:>��v�\�6��I�%JZ��!���(�&\c�E�"�{���Z@�����Q,���lrzMu_�|'�W��S�M�/�l �(v8ЯV���+������n��[�&@�)�T[o���$m�6�$[��cM=�b��_܇Ԫ3�9��l��l����$�/���㧄�`�_���X�r�F}�W��TEС��yْ�I�κJ�S���*Nd�Avf �+���\ ��G��z���ӧ/�$�3٬U�(=����tV(�,�%����J�tZUd�4)���y<H�҂�LQjҲU��L���B�U��fkJ���ڬ+AU��j�H
eiM3��沭s*k�:u6�^Nh^V"�e#���T�h��9ܣa�^��$�G�h��׉����{=<�Ӝ��⣹u.�gL4�Z/�Jn����������
W_���?H�>�S��=�ߔbe1��7�"5��>KŠ�~Y���Em��e�V���9�Uj���Ve��Up�T�X��֯1�S�ta�n5�3t^8�r:r�^d��D�b9�o��6"��k7X��8��TP���`k&����4��
��BH�XbKiQ�)����,�>$s�V���@�U;x '�J���F�qe0�5X���@x���7 3P��������e
��SJ�Y9/3k8Q�^I�JZ�.��s�{8��M�����i����֤��a#��KZ�9)���:]"x�3�F��j����J⣥k&�`M��v@t~:}�j��1
+0
C����_��.'X���#`�/&o�.���J�V�P2�;�^�H��#��
��@�FY��%u��bl���a��lʨ��:1��Jo>��@��w׼}&��[;;����:;=����Ϳ�/&?N~I���d��69|���Q�69%'^�хP%3�vq@;V���LD���ixpt�l8b<��O���|�j�1�jS�*{Ԙں^T�!�S) a(��V�U!l2(��{)A���rC�.I.� �D��S��(�s������WbDZ��#K"
�fE�[!D�.9�ut��6��>uI�a�d�ѭ=�v��6ݎ�h`�c�u�f�����S���{g�u�ԃ\�Ӷ2�=����Ι>�a�U�0ڃ7���5�ެ��d�|�k)�
�6�n��oOz=�]Vq�#�����g绾	k���Vq�Y���#�TTD�d�,����ݑ�c��uŃy[g�B5Yw�E�GL�=��E[n��ډ|,�1��v7�~�.�j䃺G�!k��a�_[�rي���;zO2�#�6��3�E����&iVDү��o?�Ù���{��4"{�c 3�%�d�Vc�W�?���͗^���C�د�0s)W��,�`,�(�܇](��뉃	�D؊	�ۦث1Jc��ix�1��u �:̨�A���?�wl���l�n=D���h�a28��ͫ�^%xz[���h]ʀ�M���ǐ-S=���h�3�69�Rf�~)�����q�B�U�vJGW6l�]�k��''~ �����
�5�0��� Tɝz2�*Uk�
Z�MW�0�4�{�L?w��sb8u�g�#�ve�<2lN���/�Ǽ����7��(���/���4�.z-�;��=�k�ɸ&u�v�Wt�6��.��{,"��Z���pv�kR�.�j�����;�'{�=�W����.��:�ӌ�׺�d{qgR��qYgU������E��}�b$�oE(i��w�"ot��XOB"�_��̹�[��k�l��-s�E�x�nޒl��Ø�{!��`�]���Ut4�^���(=��|���\8t;ә*g��k��͝]W���B�1�M<a,��f���v�'��DP��1w̋B�,{��؋TG�U���m!���6w|��������!�:�/����[ܚ�h^*�ui	��Y��C��(�<�yT֥)�p&\���ߍ)�ҏQX1<M���uz��P����x�I~f3���4�<T<�\�'����X�^K���ži�^�8nx��|�\<8����л�ȸ�;v���ȅ��dc�n4�{����_%�N��)
�]
w�Y���Ev/r���;���N�O�۞������0��lN� /�����TMo�0��Wp��Efo;
�R�sC�m�
=à�t�F�IN����8�S4#���G�G�!ܪ|��2������3E�M��x��uaS�M�B@d@�A��8��~��M��
!D*F�ץZ���bn�wo���#��fSf!b�U���s������{H����x�+ma��x��R�U�Z�ze��m��Q6XBB`��"�n�˄�&�t��f4��܃s���cL`�u��˙Fig���ڸ9��
�Z�%=C��B�U���YV׃+.�s�hJ��UW�`�MMm<o��@EEb�2ؾ�"�ӳ𹐑�J�4W!,ZU!=itm	�e�w!g�-�������r��<��l��)E����q%�u9�ɿ���*�-�[���:Ϫ%����0�o�m�%u�(����,kn:�sʖ~�_�d���$6�=�z��(3�k��+gnMCy�t�P�1hf�H#�؏�P���"C3Ʈ#]�Kx'g�u�収BGc���XaX�
�Q�����8eԔ�"��It�v-���5]+z�ҼZ.�`���}��S���a�֘1����7&ْ ]���#Ed�޵T[[�5�Y��D�*az�`�vF�LF�N�qwK�E��5�r�	����/L/UR�L����.�`H��ngY�D��i|�D3���=��|�
�>h�>�!��Ĵx]W� :��X��Xqo
���a��Yms�8�ί�oj���R2�)!��LC2G�v[غؖG�!���ƀ�Mo W>d����g�싈mC��3�<_��y�}
}_�%!��s!-�!	�J*&Ե�
J
|�g$O�C��.|����4ף�7R�
sh�۔O8$�'�5�y��"|O�m0
`�j5��Y�`��U|M�gOh��HQA�x$�FIhi)��'$H�"(�TH&z�8�÷hI�<	\��Bn����Z}�H
��(z�y �*�i#\�=ABi��z	#�Y?�<U��7v���\ RtR��	�
��ёϧQ��|��!�G^/r�d�<�XzS2�BgG��sIG�,��E�␾�.�Ջ������wE29�K�S��G$V�ׂO�D�t�]�b�<{������e�Đ"��2E�����*ϔ��{�ű�5iR�1G�1�7��?����fɍ�T�jk�Xo��]
�·
�J�V<S��I�d�+׉RE�.��s�?֒M���ˢN�.�;A�3�':&X,��H	w�Mz��A�9hA.�츛-�/���'�E�RH���{��e�Ki�-W��+��=��T� ݰX� ����|����P‘[�`xb����70�(y�JА��4��Mځ�L�v�i��1�*3�(E�G˺f�U��j%�57,���V�h�D�`��.M`f+�+�+ކ�Ba����Z����G�\��*H*���c��U���V*=�Z�ʵ�t�h6`�)�]ࣕ�lg�������L6ww���F��[�x��,w�؈7�5�f���R��V��#.@�{�9�נu���{br��p���0��z]�N�c����yQw�����HySo�>q0����H`,�'�;�)Vs6�]!��rgdϯ��g|�/��:�|�X��8��K�n6)t�w�Jٺ��UZUl;�(w��RR��d�_KA�ҋ�'�4�Zs��D[�UW�lk�eɿ��?E�o;�q9�lW�萲���"�)c&�z �џ6S�Z'LV��ۈ)F�u��j��h����%ڔ�]ۆ�(��.�S������o�X�R4JܙQ�2�m��je������)�E!��	���k`+�^!�!�I�,7�i��c9$��|jm�a�+r�V�\]�����
��ʗmX���^|�bJD��3e�:��k8;�u�AO1��+�D�z2p�$(&��t��l���Lg���[5�\��7���{J����������aX2U��`�HI�0p��0���D)�*@J P��P����=搵�!}]i��}�&�0�C�ۗ
j|�G�0��O/c(��n��N'�<H[c�|~nK���7U�|�^W؃ l�b��!�vd���J�&p(�-+�˩
2���5�vG2���x�#��[���1����F���h����(�*,i�o�sELg;eT�X����[ƴ�ټ�z�'����v�ÿ��q�8���AF�P�#��
:s���3�x�Ӊ�_zZ�13�aw��;�ߓ�O|A��O_�W���U�N�0}�W�A�>���(�,i7 R�}��d����^T��w�^h�����3g�В���ya�����V�d��
��)��>4�����3�x������U��������Awn��ڌK���((��@�t�"�d-2����V'!�x����/��	˲���D#�-�j
=�
�e��  v���u�*����Rh���N��Q�y��?�(n��V;��;��C�����!\y@��W�<�qH��p�G�Q��'<}�An8+�?K
��&��=8��muՀ��|�Jʓ,V֨�)J��6$��Pʜ�$�.d]f �!��EENR��ֶ5� i,e��
���IF�U:�Q�U�s��S�̐�d	z�d���r(pvB�
xΈys��
8���p�~f���mS뼸QrHz���|=�41���w�gL���c}���#�D��b�:��v��hC�8r0-�֎=O��J��N��T�R��#�L��
�,m,~�ߊ��⪚٦�U��
�����]�D�JrH�+�96V鄶�ߟ-�H��-���:�$$�%�;?�{
��۫��ܢd�1����JY�}�-��g�嵌��]_˛
�k��A���f����-�Ξ~Q��0��CJF�����+M��59Y�y�O��@��7[�Mb<	����Ao�@��R��JT%�DRE�C����E�]kw����c���悴�3o�y3&�14���Y�����aaM)���ƺ��9Xrd�EAc�&�/��3�M	��|��YM�%nƷ_�_*��)iN��H�FB�Rnj�Aj�'܏�w�;�RQ����X�,K=S�Eޓ]#gT�Җ�.��:�]�ڨ��wq����V�[Hj0@A�"��)����EhH�,�J̘�0��H_�RmPbM�nD|�����r�F��v���i�x��y��u�Uti������y����LZf�Z�U���o)f��!r.'g��-j��Й�A��Bx��H�JgX���8����TIM���%1F��?[�Jm;#L�5�<�5�����{xK�F�z���yVV�JҼ]�#.�?c�5�v�#�2�O��Q�f�"G:{ǒz�
�
��\��쒥�Vyg���a�UON�S�9�_��Xg���I��FGۀp�!ij�H6��4H�7{*�g����~'��ۈ�
���_Axb)8��7������0E�>ŝIu2:!2��
��MJ?�����=9�V~eo&���xhB�=�&ͨS��C��Z��O��B�(��	��@X�9�BޑB�!q�.��%X3�[��e� z�=����q+'ܮM{�Z��R���g���,�d�ۓ��/OK����R�n�0��^�B�bi��ؽ
�!IS9�6���Ki=N���=�ϕ/&�til�\�!���`��ۮ�&�M9E�����jNsm��:a������2�h�(b*X��|ǦR���rH�yD/�X����M0,V0L�A$]�t:x�T�n�"+�{'���3���tq-bb`	�Ӗ2s/ai�B�(��tp��6g�y�����Qu.�ʛ���3��e��Aw�M�`��H���Q[̃�(:o�:���T���D�k���9��?G���ѯ�1[��EN�lp6w���4O�e��q��h[����)��}R=k1�+^�ug�
9R�gc�E�)u�������#�g�w��*3��'i�]�O����盯��;���u�m-.����{�C�2�#
���2!�(�3r��lR�R���^�?�r�ϖ���3��1����Ox~�=��>`dO�Rz�Q؈5�m-d��?	\P�ׁZ�R������%S"b��.��b���K��C��VOa%���غ՟3�LArIyA�'�y&�[�h�x����9���(9��-N���D�f��[��~��r�U�\^)��p��4��ˏ�9qz��ty+��F����m�߱bNqo���3G:;>����>n[�x�2�!"ܞiݯ�?y�=�M<�&!�@V|����J[�?�8�V��T�n1}߯�<A"��U��E!d�"%iTUrv։�^�^
B�{�^ 	i��l��̙�����҈Y���W�a�#ts�QЩ\��eБ����3�1\Y=�VW&EHu�@י��Q���8��N_X��R��(���A�ܠ�4Օ�@(zG8�u��(���ȢH�6V<�FB�$:���94-���k��lq
S:@#�-`;�	n�e�[����6>�R�h}Wpsw.��9,���6��XU��[�h�(>:�����Lk��)K;B��ZY@U�;����
-P&(�X�B�8
R��:���dJ;"�ȥ������b�Ee=�t!����q�Έ��D��3��@����
�:ٚ^�(%t�Y؟`�]tz��d0L��qrچ�-z�~y5_�$mx����
��q<��G��چ7��O�����_����:9��ƗC�x׊�5�p,Mo�I/
a����Mt���@m�6�e	�ӚU�S.=�^7���z�����`QEe]���Ny��
��9�C���Y=�Y����KNt�%zY0���m%գr�`?��:z��]e�u��xْ�
Ɂ:2|����	A�:�H��A�{<�������:��[�OP�i��2���kiܥ9h��҉�����\��:yFel�`�M6��=0k�#`�[���m��cy��!�En%�~#��ay�Po�K�|w��s�?�����ev��c�C���W�A������_3���쌁s���	

������"�u�J�>��5o�-0�*E�����[�,�7�dgw���gDq�$���7�R�O�|��T�7�Av��u��N�0E����k��v����*A�(�Q����cG36�B�w� @��=�s�4vv�&����
a�pl]n1ɩ�,
�1	�������ƃ�
�q��
�DK(�u|!d�A���Ł��'xg(����	�x�is�p��	���l��a�<��rm9᭶v���S��R"�bU�bdv��T��n�!�Y�aժg�}n�͞n(�3r˱�����c���y�u2�\��b�O��45���xl?���!RQ?�_��S�'
V��U([�8�y�7D��x����ұ��Ԃ^�G�/yG���s��W���m������?Ri{6�&BK��V�r�0}�+6O����L�^&�8-3���I�7�c/�Y��L`��+c�%���	I�gw�Y��Г��bif����O0�z��9+r�&�J;��J#
5�1&N�u�N#�!��iвP1B,Z�r�J`�S��<�x�͔#p� 7�E�H�=Z��,DL�>�U��C��i4X>��,J�������;��
E��Ʀ�qC��ؖ�ץt˼����X9�󠛟�!/pܜ+�De��P.��Y�0qE1	�t�z�ڈ����?a�
�n^x�ݻ�A��m�7�_��Oop��~��_@��%S�����S�d�����	�tu�K_PaQl�6�{rҀ��#
(�ܱF$1;�x�(w��iC*	\��K,�L<!
�O���=R� ��ڪKp�LRr��h��K:��(׮���$��]�l�4�wIӁ��Œ���R2�$:pڦ��YQ�ݧhځ�v/xd���{�@�Yv�}iPĤ��O�?�@PgiV)���(��vc^S� �]��J�����S�:P��Q�&[(
g̞
#�0DN�n�y��6c�ؓiIT��J��j�/G/[��܂i���l��hÌT�۳
��SK�<����A偣�,o�[M7w�1eb�ޖ�N�6�%���c����l��Zd�	eE�c�%X�Ҳ!*��S��ߵy��<���!�5*�,�c�����a���v�;�õ�
���R#��yu�
�����9�S�_�vƩ���f��P#Ύ���[c�N�{/����	���Ŧ�F=b�����@�1�X�V9od��u-���f�QU�Q0������P�?%�뙶kT�UE��;��o��?i(�$
��VMO�@��W�D��!T�(�
���B�$^�w��u ���;�8�WA�9D��{ofތ��*�i1�,||���E�H�Dd	�g6R�p�P�h4���N��APc��0`T�C�Pqz��)j�F3`pq{���Y��%�l�,�L���Xe���t�p=�nn01���HR�-��BNb�J~FkQ�A�
}s)�aL?���((�"/<� �~�?���B�Ʀ,|�h�Z-BCR/�a�Ƶ�H�>����>�Y
v��������q�{�d��(�� a���R����F�L���z)l���<�/Ed	�J�d��I����ԘQoB肴)E�@YC��h3-a��p��@Dd�!y�0�;�8'{�Z����Zn�^�7A�ܘe9�v~�L��e�9d:�.ւM�ོ�uʩ�X1>tv{D��5�J�&h�"�ߩkb�k��-�Iމ���+�WcwF�AzOw�i�
�/8y�j�ZLP�{:_on��ps��{��ี��m�:��*z�|w���M�m�Aة݆��0	�����ܾ��xH���}8�Uh�_Ick5,����E���JR:J�T�
sO�Hb��0TGy��U��i��M7t���V��V9�\�>�cH|&C��|jTjcʭ�'5YL�E�Lq@�N�����E����~Ϥ���G^R�)��Jj)d�pA_����EC�:r}�pf��}?F9���mߴ��KAx�u���be�=���?�ɒ�nJ6��e���-���+U�]���ۼԉ��h&��	�}QKO�0��W��!A��`4	&��<��kiR�tB�w�NL�s���ö�0��\U��]�0�)6.5p����
N��������ѪBk�g����D�D���U|F
h�a
%�-�X��;�!ä.L�{�UL��9�p5�L�)��GU�i#	���.\�<J�(���lF�w��Zgw�
֏�
�F=��d�pm�x�B��
�n=kZ���ͥ=+�SE��Y��h(��.	�n�e��Y�=�F��n2�d�/��E;�`~���YJF"�w��i<<�3�p�r����K^M��w��Z�n�5�s��ފ|U(�[/��(�W�S�r��؟+�;����f���Xmo�6��_qX.Ry[��箉cd�$����0�D�jeR#)'^�;��%�%)P���Z��<��S�C��Ur�0��?�����B�e�/�,7�tgi
VH�⚫��V��59�H4h���C$c�x'W\	�l
Χ/�Y��$���313N��21$�9�GW�̓���V�ŋ���ي�H%�Aig1�W�J~��*�#t���x�^�;Ksn�4����-����T��0��D�͜�3��}
�\D&�"�cQ�[��8n��Re���2�h&|)
ߐj������Ts�Wh�-��g(ItD�_O��H`W�^�~�i�р#����f�LɌ+���C][?x�h��.�F�N�[NZ�Q����5�I�K������������ݨ�؃e���Ok�ˊ���\�5��.�]&��q�>MGW��Na,�]�ԉS ه5D)���@�f`�J��b���C&5״kD�Lݡ�m��Y�C����G��j��G���(�g(%�:Z�x�̓�0�0MPo�T4�*�9%(9X�si��T�3:o(�9c
݉o��>N:3N-L`}�� 8�dj���>N�Yʗ�`Z8����H�&��2��E�s�j?6�-jx<i$]�
��G��##U�_u�@;c����
�*�	rM�H`�e�O�{8ʱ��ƽ�Qa�t��Ps�t����g�����M��3ߠM�M����i�|�]��qk{
�S�L�����0�F.�s���X'K�17,I{�(�F�����ӊ�m{�훍��i�q�]�q�ߊ��:��8\O�ֺ�Tu�1�V�=����u�".}c��Q�D|��g{�Y1��(�Fq��s��"n%%�>s���m��(
�5pT���H����})��i
g��\���R���F͑� ]A�
�O�>��"��a���@�b^�|��ɕ�uC7i�9��{�h۱ƭto�vk-���/�
���[,�e�+�H�P���#O
�v:�Н0���p8�N;���+���u�Y~����ׯ_����N&<KYa˥Td\w��\)�ꊖtɸ�:�,�+c
<���ݞ5�>����~�k�6vB���P�N�tDm��(�h��
d��jm]�{�#�Tv��R�j\�����j����)S�����JaJ�k��ȁ���zm�(��ݑ�+|�Dx�>�4�V:�P�S~��4�ow�����Q���3m0�ݘZ:B$�%�%���O����J�M��oεG_\f�o���Iъ��;��_Rt��}
:����S�lzf	:)�ٓ��[3I�M#�������K�{7{�.��Ym6��Ӵ>0�Eb�&����>� =)0�$ע��!Ѧ��1�9�pָ�F��x3pC�*3�avH�u(�8��7��LWȁ���gũhj�U��=B��2�}*©p=%IMSp�C�
��v�г=��t�F�p�L��QL�kG��z�����P�i�+`�����+�'=;��o|F��SogDޓx[�_�����A�z���\�e�M�2�v	��CbJ����Z+c�(����FW%n��Emo�j��/H��4�N��Zms9�ί�\e����x��[���[��^��5�4F�0��f�P.���^�
���d7�wT*�����iIn4���ac$sOQ2
�ט�O|�p}7�Q8��]�bt>I`�$�p�!
7FF3�]�#�,��C��'���!�1���Z�р�f�]Ob8:8|�	Bk"��%Sh&��@3@w� P��A�Q�W��!���'�C�ʭk~�"4�����g�C�'n����1OBXH��:�v�߆1Щ�&�]Ƃy��Z���簐���/�9���x��=%@�Ƴg5x?x<�1���kxRVt���0�}�f�٨-�uZ<ы{(� �G�[RJ:�*�a2��M��#���F(��Q&j��j����p�O��������g���6;Oz��[��A�}q5��J2��e��C/7u��{�s7k��.//z�px���̾0�a�bxv���
;�a�I��sj��<�������E~�IQ�I��&�}VS#�kar,:�#5��%}��nî���V�>n�v'�Y��nɶ���Lg�>�x�So5_bk-o
f���,��
���b�����_��6���Ɲ"��i�Cbǻ2�c��>9NY޹DM�=��l��Lz�Hg}5��<���ƒҨF(r�K�D��G7�����V�4�ģr�n��i�T\��Z4�;V�[��
���]��t8ed`��:)X��c��)�q%��΁G�p���[
!�
+�d��f��޻����|��[��#����yA�o��+�L��S��V4�J���?7�Pl�����d�������l!o�BpѾ���	�*/&.�$�s��5ƫ5���3%���Q`���.U
O!x�͞Kzn�����ᾑ�����/&��[=]V_�-I3pN��^���������pY7�Î56�TKV�B��y�<e�V4.����+�&�#kkP�1��"vx����˓�'/+��O������Ta����>Q4��y�^�jK�K�����!J��	��[tAi��A�d8OHt�yJ�=�w�^�L��Q)��P�*��"Q)�V�-�b-�FE�Q/�D�Z1�~ĀRT�
�O�&��[�q�d��VΘ�|�o�Ƨ-QHѕ���m-ח��V���f��N�t�b�Iy�Q�L&�uƨ<�o1
���~t�opƍJ�Bή�W$”��3��z�%8�1�@>�N6��;�W<<]g�iF˙ٞ��]�Ra2O���ʜ|b��g$��D�m��	L�L�T�+KYLM9�J��(�lT��TT��hca
{nL�s/Ql�K|HA�ƓEL7KWs+�N�	0���f�Y���g�qc7��'�9�I%��0k@���Ȍ��W�ⶡ�1v������,�f�_R�)��g7�+�<%v��K�tV�.Y���F`7�_��ѱ�3��7QA9�)�R��>K.B̚�Q���N*�ܔ��s�8��u|3u�n����(�+S��m���B��@�z�����N
e?��j���TJ(�r(
ï_���)T"���gC��s�
�2��1�"i}�E�R)bP��Q��t<����B��V"�$R�!�X�
i
��W�aU_}���-�h���o�v]�����|E֝S����2m���T�x��̲��Pl��9Tl<���|r���Kin]io����A�x/-����f���΁l8:�;O�����;���E�Һ����xm�|��ۂ������?}7`C�N�*[��Ե��B_��S�ߺ.̓��-�k��=��/�K��=�p�M�4��U�ؿ����s"��\lcg�*ސ�WIoz��)x��[�Q4�pgKv�C'�wK1�`2]d�K�W'��G��z�>dF*B[�z�<��Y����*�Ի���8>8���h��Bu̴�c�2�
C����c(uN����{1�R�Q:tӡ�����K۫���'��O-�*L�`������K� ��5s����QD�֌�݃�{>泈p���a�:�
��m;9��j�STC�~����M�#)a������<��������$�U'�g�B��1Mȹh\�&C/�������84��^u�O��M���w������Զf��]���}�F˿z_�>=;J'�R�7��B�bA$T�k5Ēf�ЩmF�Q3r[G�B�)��-K�}�l���ņ�o4Ȩ�ܯu�I�V��}y܁:��gty��{ ��0\���K}Pf'����8��~��hP,�!:�F��'�!��B��D�Y{��30�SS`�*J�ܽ��������)���ZB���i|$_����U���D������f&�  :P�%=� 5R�m�Ĥ�TD0 �����9L,��
,�
�
L�*��B��A,T0C(�#`�2D�����������Ⴐ��`�z��E@�ue��s���w
��,Dt����Ʀf�D��J��|��zR!)4���M�,-�"B	�����
����L���A� E��Ҹ1�h�{%wƻ�@hk��MZ���?4���O�ˏ~�����twa��)��I8SX ��P���Plp�H%
['���Dh�G�0;R��Q��3�oA*�������ُU���k�S�@s���&�v�VAl
k:�ܖ��FoM���p�"6�kI�6�����Z[����y�R�Dm���ĥ��(�2~p�)�0�Ty[r�F_�b�(U�|������u�n������	�vR3�1s�n�ҿ���Q�
`$��S���h-%�K�-#ʜ�e&���/�4�:w��˞��Vْ�6���"�d٣�'⥢ݝ��@�
����:��:������$�̙-9j$k�s]e��R?�x������qU����]�n�0��n��4(2w�\ s��  M�N����)Q��6��^�%S9.�9���;����;ۃ^��|?v!
ϡ��h��;�?�Uu9�C'���X?�Ɵ�w�Ӄ����q3����:��U�H�#QW��N�S�k@�W����F�kZ`���k�f7
���B�2-�z�Z���}v��C<JH����lLד�R%By�p���qZ32�9�|��<�> Q�7�3����u��M�eV���8��L���q_�-K��Y�}��ɹҴ��Ƶ��?��h���\��c0�Α���bO`��9���Q�J�OLjq ��m�%�PSs�	�W{¸�#���h�!U�Y&��'^9S�j9��'G�"r��KP.N���$
�gAh�&�(&������e�eL���|<��H�\w��La�x�3�I���R���o�e!�9�`!�I'M��Ι3�>��}�x�4��]��K��K����/|8c:����T]O�0}ϯ��&% �l{�bZi;�	JE�Þ*7�i�R;�������IJ����!���=�8i
#]m�\>}��
�Qa�Z�k֮��2�%� -�
�)��:WHV�&Cȴ@��Jo�(�����x`ݶD(e���\�d\�}�\�J�TdG��M��	�DE��i��o�͌�E
^943��3h0AN�!���<M�e�NkW��H�K�2��FQf��\*Lb��YTT(>��V��Z%'�������lr��s1�N�p\\�ÞC<lV�Y�+N�C<�Ok�J:�K�9�_v���*G�Y���	Mș5��.��<�|Y��ƽ��V����"�w �ZOb;���M�n����&�st���V%��0��;$v�I\�\�P/�ĕ���;T�q_K���ކwCi��ԙӦ��l]�ُ��_���$���G֚��/A����"�V����P��%%̌&(n;nx�#�ɡ<k�>�r�xUQ��B�"y��+�sBq�Ԃ���>h��S��I�*.&�э�D��.�����Bo��/{n�Ȧ!{%	:�f���]G^
�eE8(��j����mA�lK�=كݵ�]�p+B/C���$)�5����D���u9_+n����o;[�G�f=U�B�6#
_*�H��Endž߈�	>J}����8x��{�?5�v]u��5
�C��𛐝�s��`[�]mT{F�.��}����_[H/P��UQo�0~ϯ8$����o�]Ce�֎��I����#�)LS�;g'͚��xI���w�}�$	�tuoDQ:x���{����襨�p^�R��\J�,�hV��(I��"��RX��6B�sZz�Fa�=p�2�8��^"H���0WrW��GZ�Z� �G�\��W�1,�DE��QG𝯸͌��6p�i]Ltq�<��,�9d�?~H�T��v�P��piFPI���B(��ǙK]�+BâV�Z�Cx�(;�eZY����Gh�M��N�W׳�����v6��Og��W_��#��غ��q�>F
2]�2_B#�R��PS9�4���$��!��X,$��'�_�*�@Eւ��~pEW�¶/�K�ӟU��%<�Z�_zɾlT�܈���\��ťv���Ё0	� ��3�M|0bز�
��ԄV:*�U�zd�o���*��T�QÎJ�
����ɻ��{C��DUK��w;ݷُɥ�j7��D��;�bk��W�B� ~#�'�z^�26@�ڏ��V֓l?>Jy�7�@�_�x�hLU��!�~� �n�r��]=�]��9{�Z(��3]rbI�7k@i�)�L��,�%iA���-�i�&[G/L˳^��7]l��D����5�FhK�N�'��`��k�>�>�]�C��+�$�{� `�J����c�֎>�>�����w���
��S�T�g�x��W�4��@ު��z��AԪ�\# K��c��SЮ�xU�WwT
���۩�"����fg��#���	�+V��e`��F�Y����U�c�g�$�Z2*��k�ں�����/5����t�3����,��M����t:a�E��ڂ
����Ö,?��|,���K��C�Ownj=m8���?��
��,ݲ�F{�I�܇Q��!�9�4�Cx�)�k��C�B�F��)=�,���@��b|��cL!f!M�o��$����:�'��)|��Of�	�YL������W��N$3�����$#!��9?�7$Q�r���֨� &>�Г���xOy���5K3!q>�jxuf~D�,�=/�Pb����'!gi��÷+��&(�(��qL8��ֈ��̞����|�u���UL�w@��Ư�!
EO" C`����-��b��<�h���Bp\)���;��#$dKs�T\:�m�i�Nqyi�C���w���ç�|�%��>N�QX�E7�M��@>y�=�|����㣞x9%�fbH��h��ɢM�U��($9G�o��Z��!���s�8
��Ҟ>;dC泘��j�z��*��X�r�>��L�ѣ,�XH$�T��3×&\EAΞ0I8G�=9�]���WN�qv��o�G-C���L�]!�\�����Pd���|��~�Øt�a˦M��CQ�uaRT�l�)�pUjA�H5�P�R3�	�o��I��0��D�ʼ�|�c.�X_�Z�I��7r_Q[>��ʁd��Qg!�pB�biL�(�
�	-Cc��-��@!�x��̯2�0�6�g�=X1.%�	]�;%��>�i�Gv���o���o��ҭ_'�am�JI���"z�4�"żD�
��FzZB�N���"�IQZ*RO�4�=��80��uR�*6)?��
��׿����H�i J�T��E>W��x>s��K&���A�[C��i����C_��RiJA�|кZ��4C:�3�YR΋��rʆe�(
ӰL~P�\9�kkIr;h�`X;&5ć{�ѐ���x%5��ՙ�U��:��7���XD��2ia����aL�\(�(rۧk!ﵐ��k�k�Je�����x\P^.n��B��
ttt�*��z/�����L�����l�J�^a9��H$:>��L��1 �h������?d�2��,u��>������m�MP��iq6����{z���u��žY�x���;��G�e~���
���$�|2;�-]�eO8M��|�������`>Y|z�mX��3�9�E{y������`�N�$�t6�ޏj��:��L5z\��̖��8XL�6�������E_�k��r2#}5��v�gxЇ���IдJ���$��"�y��ծ�,�&����Oh�F����r�6z����lQ�;�xN�?��ѯ�o{���@�y�gi�S<ݫ�V���J�c��:�c"�k��Ӆ���-��3���qz��rk�z��m��U�Rqk��-�H��DN��>��+��^c\>��ʵT�-V����
á�EQ�Ǵ�C��[aX��◰�f~�W-�C�fK��cOý�]}���N��E��ނ�s��׼���7^�F���?"�$��Ѓ�!ʏH������Q��\?F��J˹��k���.�*����e�%��'M��K�%
z�_��1;�o����hӯ]�ٻ6}Gb��.������:�ke��'�V{�Ӥ�#��ء�k�ڱ���I_[�R-|~r@&����F5f���p?{�3�:t����)�ۆ�RӶR�Or����9��F[�XV��h��g�W{i_z�*r����QAꎊ*h-"�t%4�p��jJk- D���ܵ��.��*&ێ�T�0\ed
0j�g~�Skj�#�l'��g�"k��	W��:�kr��Ӵ9MqQ���y����⸮��D�9N�ݦubW�pN��TC~��$���ە����v�Q��h>Y��o
�<�7��*j.������W�󪥩C_r��t�[_��s�6�創b���ն���9o\M�}؛ju���z;�*McJ����|N������3��Ζ�j����vǏQ=��:K����x�sBJ%P�}֊D��*�z@l���z�"�PzLV����ƪ�z�'�0>�
Aӥ�8�o�+Ħ�x�Z��$@:J&���"�wy�������}��!IRȅd��Pu�S�>��"�y������<���;yyW^W�f/�6L�k�����u���Ŏ����P�^�o���=�6�3�n���˺�:3�0]�R\�U����_/�2��q����4���VՊ5�?Q�Y���B|�W,Qu���8�v�A.ޮ�H��kS�6����+�jβ�D�zF�:CӐ�pcTź�f�z^���w䖡W�����A�N�?���U�rPyȟ���A��7�<;�_�r?R	�T���m
�b�V{��J�zz�i���"��b(6Q����U'��YYo�8~ϯ ,`7,Er��L�`��@��k���'�$�TϠ�����v�'�"�u~u��y*��`�\�eߐ��@�rQ�Y�'?�*/��O��I�d��@�'��[�r&�,k�I�~ܕ/ 
�Hr ����c Ձ�,����*�҂$�)m˺�+p�o�>}���Od�8�{�..6�,�� Ȩx*��T�����Kf����݂,�h��n1�9�^�����^��2ܜ��mH\��P�e�2���n����T��ؐ�r���IT��AkjCVw՛}�����ۺH�NX$�1W-Hx��8nFX�F��5�[���.	�\P�,C��4���%�"(`��L�x%��셊��y2G�ͽ�'Ho��R|���՞/.�2;3 s;�rD�X{}d��f���rA�o��h97[BVlK�P� H�"I�TY�2/_�9j��@(�sa9�BU�vЯ��힄��;�])@��`Cj�gax������~lV^���
}1�E�k˗�цGN@�Z��~�&m��\Yk�5�;�4�4LsH�12F9�5���5�/))�/;P8�����[E��&z�1�t0q�__��ذԡ-]Z��V��, %s&�+���ᾛ�Ah�J�%+�@�䑺S�=��-��a�)ؓ0��E𸹒r�+�S��0�č�L�bܢ��7�zx7��9�?��H�|����O��1Yqzؐ-#��^��7��V��J�z+��H�9O��1y<�;�,��w��T��D��Iy��|2�R���}����/��u�7�5��Id���
�Y�A1M�%�M��=����L��M�����u��m���+u� %�9�����y�H��ǏL`�_V���u�(`��l
EB��u��!��=d�t
���ٞ�5Ȇ�P��
ٱ�&.3��gZ�g��G��sR�}
Mv�G�I�=:M"��;�)A��4`Pd�(Ҹ���S'd��Ơ�w�R��=l�ϧ�.�k���&[��^�š*�&�7��RhӅFU��)� G�=�J/�.�6�d8w)�(����CO���q��F����=u��b�C
YQ��?�`U�o�G����w�\i
ۨ��&+O��}><tT�]��2}����U?��zUa�G�9�$����՟���U��=p�K�
}��`@��k4����{�~|���W�^��I�z���$Kg��zx�ܳ��۾�-ݦr#C�ꍭ��!��Y���=�1?Y|�5�O-D4�G�?��6WV?ö�,{$S��m~��"c���u[���t����m�t&��\���OT����`�c��NT��9e$�@5�@C.n��o�8&!&n�����f���7m��M�-��w�Ɍ�z�<®Y?����r;�q�or�9���H��y�Qnb+2Dg��uӿ�����̄U\h���64�_:S���u���=��j/ރG�h�d�0�\�S�Yo�ю8�V���Y'K�4��\dp�}E�;�x?��A׼D��a־�"���J"�4�N�s��j)RCӴǒ�&zT��&�_��]�s�]o	�ME�6үA�^��)�(�����H>��jQ��djc�}�+��jܢ��P��j���/�,����ڋ���&t�F���J�YF
8M�;?��K��܂�����Ő�^�
��se�3>qd҅��@+�/�͇	�_/���J�X����&�����5=Br1��|v����A��Դ�5Iy�<N�)�KԽ��N�W�4Y����Bu����|�;�= �@�HT?T�M䨣CXLP7�Ќ�1��o�q��n�h��Sp]U R*at�S�(>&Mߕ�w�]���u'�ww^���ܽ�у7�i?����fHf�X�m�ģ�G�iz�^�7@�۟�zAn����P�)��r�&���_n����_�(ПN6���
���vc,V���2Z�π�8u�j�B��hۖu+�3*����"迓���/x&�L��Ҭ�f-�
b�����N���'���l�Lt2ˆ��/�F�'�sM��)}<���PKgM���7w>?�[:#��|�����4�Y2��K3R]�~k�09)��]��S^��X����W9�r��O��v�6z��Ъ��`�x5~<qbS�<(����-��NU�^�c����ko�6����L��a����%.��M�$0�AKt�V=�vc4��;����c�쐼;����p%V[ɟ~��_�q��j!Œ��p��!��,�@2�䆥d0�'�@�A/�%�2a���.�Ćɜ�0����O��f2����jHh3f(��:O�������as�12�ONp�
U��+����[��+
��[7�-cp��E2D�'1��x���B/Ny��[��1A��`�H��9��0JK���F1��y��ȇ#�6@z"G.���k���@�$֜Է�K���
Y���Y�/���R�C4B��l����&_fT"�*�$~�
��]�.H�>@p�|�bŤ�BN�LY�;{��s��dY��6
���ܾ��~���8��{z{�a�������(��h��)1_n�T�<�.��ܨźX��*�[eZ9>9�nK���g�h�)���;'�Q�~�;/e[�\�Ү$_r�7�ᇻb��i�V��Jeo���:��bgE%]·7�뒥�,��Nfim]GF�<20��4ŘV� &z�&�>N�N0tP�<)�سfy����n��(�|PuD��:4���āٸ�بp)�tY��}툨��܂{@2��9��N�����G����f}���𕫸q�����,��]1�I����%U�8�R�PC�\C�iC��W��"$R�F�L�e^��͝A�g�2���;�0s��K�9W;A�U�u�0kӄdC��fe�<�ɂ)O��LbrE��P_>GlaC�K�oM�<eņӪW�Y�����$ɨRF:BӴZ�N
����hT�i�7.�L=��ήߙ�ӥm��m1-�i?o�~2�v��k��[SV��� b���ה+,���i\�ԊL)w=�W�֒S�3Z���eVWn���r�u׏��[
�d���j�uS�
A�2�����h+��
e���uU��"xLz־�abz™�l^�_���,¥H���?M�|�*d��H�&t����|�*��%���;/ 
��,*Y����{�ȍ�;<���vBW+��W���.�|���֨��ӽ�Gx�k8�O;�YLu}Ue�_�4P�}P��\���B�f��g���ھ49jph��Qj�`4�a��ԁ��#�/��r�����m�n�
�;O�BV���N�A��og\�v��O}�i�I��8�um��fc�ï����D�Cӱuuk�S:�I�#X��$�Yf��W�k���U^M5_g�1j���]�v?���yO���ؐ��k�i�X�Q�w�Q=�c6Y���>�?܊�(xg���nT���kŔ)�4���L��?4Z�@��wԱv�kT?��*U���G
�+��{���ќ�;@�#�y�h���W+G����KM��r�-NK�}�S��]�6�y!p3�\n�-�9sù�O��=#"�"g���0ͼ�����áo�d���P��{�=Q��o\[�V�#�+r6�E}4�{sFǠޕ������v,!�Kә_����(��v]��J�t�|��U/��u���JN��y�̎�x�*�h��
+U������$��{m�WՖ��?��jlJ
o����d{��	��"��uP�N��
�g_���a�5Y�`�b��^M�.�ǵ�c2�����[��{����X�|{D��Քث�VgU��c�^c���U��K���?i/����UQO�0~ϯ8�HQq��L��(���ƆF�<�ɥɖڙ����}��iӔU�)��w�}�]�"�r��Yf�û�a�!�2%�y5�ae2�4�aQ@�A�F���Q?5�L�d�-+#�2A�ϙ\���t	n��εYE��4�q10E���J$��G�z?{C�Ȃ :;���ױ�KC�
\ԯ��P������Cl��(�)Mv�Ctx�#f��\�	j��s1#^���������ΥA�`���Ny�ab�,�%rC*����ea�c�KA+�$�sn�DM1Mǚ��"���2D
tF��sI�άq����(��_JI�Z"D�Pkd�1�a�遗��(z��k{N�����-�]~}�h�@��Ѱ��M͢@�4���p�*�AĊ%����=�N��V��'�*�W1��}�# ��-�F�
n-�<�L�J��VTW��6�y���z��>���h��J�a'K�����O�S��6��N[
m�@��!��9�G�:��,�}p�L3����j�_�6��*he
��u�M����پ��Th*%`�F�7uZD�6�C��$~N���W!?���]�z��B�)�]��+7VM߉`^�nb�An��rK�ƪY��
Bj@�)��KZJ?ض�����/��6�F��p;���k�9���(�?�{ɛ�u�D�,�;���R������혎���Q�W�`�C'�Z���Ú	ҏʮ��z^W�x�17q��-�7�ݡ0���G�5X�|�����h�~������YԎ����
!�������VKs�6��Wl.��Ȥ�Crܩ#�wj�`�܁ȥ��4(G�w��C���t��D-w�~�B��\n�����>��¼Prë
�V��J�p[��4(Ԩv��Q���F�9��kвR)B*3���;T3X����Km�%B�Sdf
f eVh=�pAr������r^bE��E�'�1�*�5���w�j.�Så��9������Pp�$��B#�).�0��:�I+��T��\��,s>�N[�gS�+�'��=p`��/1D��R��0Si����[�2+�VC�q�͘!A���x-xZPDĸe$��Τ������Jj1,�u,�P�������r��?/�h�rET��4���6���BU;YB�G��q���\M�0H�����*}���:�3ܱdy�|R1.���[����@%WƶJ�x���$��λj�Hr*3ܡp�R	
ix��@�\�(�=��z -�X��%�z�N�������g'����2ň�wN��J�*7q��_k`V�5(�L.֍W�G�
I�U(k�J�T��< ��ᵓ������\ӭ��_�)�l�LZB`YF��FL@�uݼ?��F�e�_L�B�vפ��r���k���P\�X��>t�M�zB�©r��	��ϡ9	nn���m?
M�DP�<���oPUY�"�B��S�G�-�@��Q���J���b)�G��N�t*]x�,V��v��@N���ӓ)ˬ7\�Y�yjH�����}~�RqAiͭ.7gv��� �N��g9��0�d^�9������X����#c�M�N�@q�5ڡD�e��P�ȡ9��黣�y�`��ο����v���h�Ib6A��H�%M&�vG7�G���ø�=�zq���Uw�.����E��&����c>�u{D
H��K}/i�x��M�_2(�J�#Q�'�&����K�y_G[��t�y'y[�&�EИ�Y�I�����V?L���i����z���%�0�aft/��p�<�[e�kd�#ͅ��qy�H���W�f�O�ͩ��FG ~��&C��1�őB�(�[ZBj���q㝍$�26����7lE�����9��Y�o7�_1])���{9���:���:���'�ڥ,6+R%��	���~�w�[;m�"�g~��d3�?I������7<l)̶R�X���\o�T1�dX"�**4��	|R��)P"�	�D���8P�i
�x��}��)����r<��DCB8���9O�q\��n6�_�a�2��/��CD%��5RK��duK5a��H)�,�B��>#'���QH��I�Ԟ���{s�L9�D��%���)�'Nv,A^'#�:˩BoW�kԏd*6&�A� 1�ѫɤ$~UO�d0Hd��
�t9YV^ĕ'�&�f�G�e�*W��׀�s�_��26Ӓl�I�yM$�*�5.��T�=�Di֧$��*�Q�=��	U΂G�(�i�:-m�a�M�[F�tI��
ތZr�2g�;� ���M*�>��]��2_���"\At��خ�4E�T�x�u���g�s�NS�w���'��R,>�Y�4����ryW��*�(�[C��K���@��b�GYsG�Ö?:v�t�ʵ�A�c��u-�j��Ε�]��N�
OYi��PrG�q�CZ�f��\r+%"��{��c���^p�)����29P(��{@-���dD�I��OS�*g�K�d��D�|QZ2�x�6w^�h�;��ŕ�g/���M�d�'Z�!K�5��@�[���x�[!o�cgd��K
?k��2y�f�b��T��������c��7�9�S�{i�k�y��\����eqt'4�,���r��I7��8�>�y��7=B?��h��5�Ez��2�I
��5���2�ׂ�`�U��ut�y��4Y�"2�����o]kWW���o���������a�7�I�7��n�MB�e���ij-��a*���f���3����ʧ�W���>�F#sf=�N�2�zt�2�F��=��Fu�(9G�ڽ���\&���Ba[���D�1{?Rm������桩C%X�}n!՟Ӈ)o�*6.�`�����nh<v�+-v�w�$ڛۼō��?�W��ڃ�Hl��7N�Å�(���w�6�ze�C��D�}k<�����..�u�p�UY�G7ISI��yP<�0�Ԕ@�F'e����}S��r�:/J!>�0H!F�g&�:��\�R�@�|���MV��k?�f���
*l-�g����½[����Ƈ�y��*�;����y�>W]D�q6eo)�mUiu⦹�"W�)��]b��v�Z7J"ւ�2N�R��+צ��6Wƙ i��.�$��0I�jk�%���ML^��R
�T�p�	��ҁH�\*�XaW�1�ŠՆg��j2��Z�܆Jʱm�aN6}��
��׏�A�-;je���CGM����n4V[ql;xӈa��ӥᇅ,ƂLa����{�x�X|X�!ZP-O�8ȩ���A
�y����D_Yo�M�L���!�g�]��K�}���a��^
���h�/U�`Z��!������Zy���"1����S�t�(j>�HT%�>Y����Z�o���嗸f��]���]�m��T��i�w<`��:�5|
Q5L3��6^���̘�(v��W�r��4���kF�_����O�3GMk U��?\���wP[���|�Ʊ"k�c.��D�u�����$��!B�o���N�_=b�Z˪�Y����k��x-p��.�������:�y:��>����0��@W\~�m�H#�!��0;���G>������,�8̎n�P�B��r�� 2G}:���v�?�Uj�&>���

EbGX�����:��'e�o.5��E�w�#e'xu"�R�
�ec��c��d�272v;cpϘ*����8�εƏ�"q�䌃�wI״���
�Lm�Ǡ�pO��8){����=-�5�xM��r��/�oA�t������4s/��ڞQ4�>�nK�͓�!��6���Z�4�/)�OքK�s[UM~4�o����cx΀�Y�*U�3�W�w������K�Dgd�.z|x��\{s�H��O1N��8��G�K6[u6P�ٻ���4%Bҍ$;.�}{Fo��C8+�9)�4ӯ_�LO7§�H���O'��mðg��3�T�tn|7��(�.~�Ts�-�ZHrl�c��
�<!6e<QuE�ﭱ7f�|:A��t�FXQ�R��u�3�*��0�̈1W�9j;�� �ښ��$la���ZSd�@�p���l(��uo<`��
I�b�ݲ�4�� ��=�l$K:�`�ij8��T�ct-t�ސGSU�\�ȁ�MT�>�P*��y���^�8��4�}c(���Gv.NGǔ~N߾-���l薍����{tgtC	FO&^���r����[n@�ihb}~�.΍םy�->��1�B��k���(�B�����Q��^��v����k�ow��w�0��w��;��p�$���^$|�ӻz]���ڷ�+�7b���pكF<�f��F|�wb��#!�k�}q͏���{v�}�M�q1:�����ŬHލOǴ\M�r΍�m_��ݴ��׭��I�s�l9�	�n�gy��48�E��8�$pYew�o�Muw6+�P۝��H��9y�V�i�Rp�3��؜�(c��F�V�/jr��'"���F��ϓ�
<��Z��
�.��R�l1~��yk_�ŷ�,*�{Sv�;ݙ>�?�]J�-b���Ke��0�
o;~����?{���w��-\�5�հ.�p�Ѓ�Z莯����*�fcX'7�(���=
c_��9hb���v0�!���dLǾ�o{���U[lwF�(�3K�]~����/.
e�ju����yX�v"l<'�
d��Cn��q]�-��'��He��t�-.�������uRc�Ap�Ȳ%Ǖ܇�l!�QpR��bk]s
]ڎ�u�);m�[�M,i�S�U[k�
����D�Bunjx�u�n�㩏��J2�ΐ߸fE��e�>l����hOP��&Q 0HL�H�Ph꾒tE��=c��)B,�G�"���?f�>9�$�!b�9���1�#�t")�7"�Zm��Îiv�xn�8��Pۏd��8��p,b6{��D}�@���J�z]H��F���E05���sw~t���W��#��*'�.��%\���^�;"�p.́�!x}7D<���q�[�1t˶j�<!� �EÁY�a艙�x(���v:�򱻒�3��=0�E�d����l���(�G���
�h";"�݀�x@��E��aH�;�^�;x���
������6�`U<�>5ޣ?�v��q�@7
\�5:���_�@�*�f���K���k� A������y���Q�dAI�&DzZ^?Cw��Sr�k[����V�ުm��/dk¼0zI�֮~�>|��hy�2�@ղU�#�Nlb&�񩖏k�Ԗ�h��+���&�&do�$���Aq�s�kyF�O8������]hǃ�B߻��%XR���_k��>���[��V=k֫���Z���m|v��Ac�U��n��T2d�j�1��g�n����y�l����5�.���9��c����G��LT�����
&e&�p��R�L�^i5Z�Ju�$�g���_�K������B���e��l{Zi�k�z�r�U�	u�=QEx���ts��nOq�'�U�F��h�j�e�]�0��/��)0�[[G��;T��q��3���^��8�u�e������aѸFRZf4
:$�q�`��V}\I	)�N }^�2��f�ϴ�g<��v�:%��mҁxGt������LL� �涫>%���t�o�[�AyM���U`���E�Wb��JE�#�V�`]P��i4Ը�������c�vkE���b6y=���
�[�O�m]��:��	��&��N� �ٳ����rFF#?�+?�E�ȿ�_-�}H���q,_�,~�G�KXo�b��!;�p�W�^��ϖ-�@�T�0��'�q�c�7��	j�@��,$)���-ET+,����VX���X&�x���s���;hN���i�2�k�^��G0T3�d�UH��$�:Ѱ/X�4�V�!;��9�*
b��$��:/�ɾ���v��_���a���j���YA鬁��=\gIwc�>V�">`���n�V��Ww�X���@5q[W[���|�=Q���
�m��~s�RM����+	,�L��˼GwS��
��#�b�H��C}��(��O�+�r4�.���%��S�J���}�%��	ӀP^{�-/�����ߪ�h0��R�	��ڛW��wS�m��9�t‹V����k �0Wl�j���'�>��� ,lw|�))��!�(Đ)@a�����8e�>��`�3���f[��P��-^�G^�^T���)ő����~��E�e�z9IЊ��D���-p7+��:=��TT翦���ݷ���W��\r�sD�EY�X(^�wz�"'���0P�6w��#?
^G�?�<�P�V=9�}�
�
]������a]M�B���k,r���04,�4�P��)�a�
(�NU`�w$ѣdy��64i�E���owԗYVW>���,�<y�w�����k�0���ٍ�֮��H_�Ľ�!CV���2��/&QS��4{��b?�ܥͷw�5?��}p�4�=Uk&{(�@8Bɟb���[�~����}�%k��Ӫ�#3�|�[S=g�I����a�����淘����mN$��/����0� i
6�Y�I?����)v��yTl{��<���d��j�4�n��P��H���A��I<mܓC�|�+�l�J�4n� O&yw��|���	AV�ַ5IU��-~n��ϺC��Oȍ��w�0����"��7�D�M��p���(ۧ�ȑ��Hg��D����aVOק��*pT�Ys��@���]��
�('y\[I��;ěFEPG�iBHW1TO���,4y-A⃖"����k0�þtG�#4�ƺ�(��kh�k����Ԯ��!�y��0M�{lįz6��4)a�6˿��+���*��I����Ё.m'#��l&���"5��F�:��#���Q�!��X�"hrBi|R�
�eձ������d��$���	Μ8�q��7��Z���]�
� �V�
�#���G�D�b�v����'E�a`4��"�iѵ��LA$��uL��^�3N;󐗙��DQ�ŝ�12EĦ*��Q�e\��`A/O�=%?#�?N���(���C����J���_"u��sOR$J9�Y��~iШ��ϗ��rKnab��p����i&)t�.wX������0�8ͫѲ)A��Tk�5ۿ�v�~U=zR~�'��O7�[ϩ��b#�Q;�̖A|�_�b*��	.�z��	�O�}��Y�s۸�_����D���r|�O�Գ����Kƣ�HH™X��c��.~��=��̓m�cw����b���2}P|����ɻ��Ն�x���[8�F�,��$�(�2��X�C����
� ���D2f��kyǔ`1, �_柎3��0Hx�nӛPC
X2������gp1Of�	�x‚^o��M�?û0�O5�V�ݡ��p�B���f�
m��N�F��2ə�Ro���hO�d��
{�H1[q�|/6��dyX�"�\
��=��L����lgf`v~9��|���e2����2�OG�O������ϳ�d|5�<[̯ίP�Ov�b:�����v�=�i�x�s0�Y���')ky!���I��qB"�X�t��,lc�$�2�_9��+P(!�E��I��2+�e���4��I呖ʍ�?5#k���0n�$l�Jvf��D���3@���L���*~j�Ε
ޗN���
���XɟwV����y��Ϩs% �QN�|�J�g�c��ӿ�����X�m��r�����G�Ċ��'7@Z��u�Oɕ}��v� URK����O��[,F��Z=�(X�ȝ�ThQ�]!~aL��Qf��0�0��Cs�6��G!�`2^X��Pj�˜)�d(����칧� ���OR	z��1gbv��NgF��7����AĒ$��xt���c�G�	EE���a����V�n�s�Ҁ��A���V����*ܢy.�Ԗ��s��T#
_dL�Y���w�Li��
����H0)�h�;b��w��EmM�]�0�'�].(}�|/�c1�Z�P�X���`�E��H��RA6���#N�،�J\�Ryj�������<g�7�q��&D��X��P癭��˰
5���26<�%U�J�LW�ij�#�X?Q���30;1���qKLc@�3uϱ�r�e���gfz������$�����iuی�f�Hk����"oG\(��Ά�s�/U��d����yU[�?�U[7���2�RSG�>�O{�|�d
���j�&�h���Ec�����^�d���¦�q�i�5T�=k�3��Xָe���5�\*�c�C��j1��1	������	ܒJ���kE#�R"�5Ϙ��@2e���;����.�^�{���]V��nmmҳƲh�K���_ϑL�y���E��3g��lu��Ds��0�,o�JjÐ��w����K�a���;����*�]��v���@�U��KF-�6�o����y�i�d�l���-5w���ޠ���
���O�)o�-^G{n4Ft����J~-\�z�/�F	�GO�5'���}�$L��g޾��{�-O]��}(q:�b8�����9<^q�����2�,(%������#��hj�����^����s��J�W)�6^��x�����
���,X�Hs�!f�6AL)Y�1r��T!T���_�೪U�C߻6�BLs^h�}L6x�j����m<�n��R2#�{�15�~MD�؎�1e�zc���}B"���7m�j�-�Bd/�F����^{�ŧ�%���o]����9�Òv]]>%���bZ�5!ϊ�!�?._�����L�z��V�57Tf,�UzjVֺ9^�>�Չ=�"PK���|G�,�b���S_ym8���U�뮁�5z2���z�Ze���Sߣ@��>Ut|u}2�/fi�.���3�(����o�zQ!u�"i<XZ�x����z�0�s�SW��7��E��k��T/u�n�T��:K,y�~�+��R�Ψ�Kº�M+�K�N݋����/U2E�1``R? -��̃-�x�����^m���vִ�+�9m-$pf�W�̘���m�@x�<+�t�ǤT�	����?ʫW5s��b���}Y�~�B��3���)&�fi��+��4�Ӈ?�Ғ�Nl��X/y�t��^}0v��K���j���axV#�pDTݙl�5\@��YN�j��B�҉3�����pɒʁ5�{)�����oO[{m�?�rj�9������UQO�0~ϯ�i)��I{(bZ��������xK��v����8I��I�!��w��|>'	Ty��4����G���V3Q�࠲�҆�AQ�w2�Ѡ�cƢ$�+��&`sa��J���h:Us�3����p����)J
�9��r	ct�&��Iv�ӓ����&�@E��f��ϹI�(-yk�R�>E����lA�&Dą�_�Xa?I�E�V)�oi	#/L��+��T�'Bb/��t�%号`R��
%{pxH@��$�DG�Xn+��9!��v�G�G�1ꅷ%�M�4F�cT������ݖ�.�]��}��Nm8?��f��¯}p��n-��"Պ+i����$G�����e�X��Ƭ��-��	U	�}咾����g���*�r?S��[]I�x�
��n�]M��|��T8{ �&hzm��
��E.:dC1g�,	� E�[ϸ����k�g%ï
���t��o{le�p8�Yv4GiO�!��J�'�Dg��O�"kX3aJn�܇��Ae������P��3����0ZԺ�wg>B��]ҩ��p[���M�Pkڄ�\s*�7A�.<�>h
���Cl�
�p������Q���uUf�bM�
�$���a*H1���ȉ�o��L��fꇚ�.A�Ѝ���J�IaNj8BNו�Vz]������yN��(��'�Z���x#���/;]^N͹�d�����N%�fti&�Fq�QOK�c@��_�)��^�3���>����D�xHC��KQ~
mT�҄��Qe�/iQ���VZ��Zz?�˓�r��K����h�դ��WMo7��WLN�
k���6Rđ��E�C��j9�%J-$W���g������lK��p�̛�����<h��-������s��̵ډj��͕6	�K	�ȀF�z�<�,�� �l.U�!U��n�u�6`���an�A"H�bAn6gRV�]�LUQ�:������dBb2�,��'p
�=3��%k
�o%+8�H�(���[z�����-d�q?�Ç���FVh���\��e�,�ZL&�N8f�����kIa�7�UEj�*fW�<�x��|�+��/w�-�Mg�-�M�����\|�җ'gN��`���n%��c(�w&�J���&�o�}�J��q�Q(n๛��o/�̇m0��bz�qm�R+��D�r�X���z}C�����qy>`�4���AD�;W*�U�S�
R���#�H޼WW0W��6�GbW��̵�$��{G`-8ƅ���cB�}�7I*�1[�8o�g�,]�Z-0[���T)���%���W!�ٔ��%��~s!_t$�՞>9_,PϦ�?�to����u�����n8V�Ħe.d����h�CE��'�}��r#?�{�h?^4?��dR��4�v✨����P����&N��R�4��F)��86�j�e~�ZԢXmOT��s�?"u"�.�цV6Z�ʣ�����߬G��H�L�NŤ?�Zn�=��h�SvY�F���Q�zY�^�Z��%V3�X���
$;����b��%Mݔ��6I��a��^/b�D�J{��ư-^��4����.�^t��4���;bj�I�q6��	m��0S�����$�v���=�a���Kɱʪ�Z3}㞨����m��oU��aJ�[[ܻp�>���r�Uۙ;�N>�
RDg0���ψ��Qy�5;<��'�p��vSn�Engr"�� ���AN{I��h����<*=�֗�H���;}h�:����͑K��������8H`I6M e��k�~�W��iu Z���l����J��/��x�	�:�����@����uT�	�R��j��'�.]�1bu��-�Ѿ����F��Dóp�|�?h+]���mS��Ÿ�ioB�A$�Y@'$1›1Dga�Ʃo#���@�EZ��~�yz���u��f�ı���׀rtJ�?Ԝ�H��+�������'���~}�
t;�R:b۷�i�˾ƃ���[�o�8������dײ�W�8�qi�&^�N۸���P-1�Ð(?r�~ÇdI�\�)pWñD����o�C�����ߟ���t|788w��"��E�������?4
M��fh�v���q���=ꣻ��.}%(b!��4�!� t�����0"���vR�<�G.jJ�� d5d>#>.�Ŝ�,�I4qSGԧ�bW��Grђbe.|pc‚�9hB��yS>�D.�_PH܋Z��.�B�3'$���鄁G��fH� M5����)͉Հ���J���I��!8���U0_��vj�c4u��2h�˘9A�t]$�"�7"��9@���A�1�FHvֳ�[;X�
���5����P]"��s0C&��A��Y�X�	�]]O�ь����<8�`Y�P]�,�h�z8\kf�a��q���Q�uRG�~t������թ��-`8n%�tA- 6�~��5_��\j�w��?�l�-�Yq�
�>j�{^$�p~�pK�Q�d��<Kc���f�oJ>36��䕒�ѭ#��Ǡ�ҦD����]��QT�9�,�JO=��8�|bK߅.�k.px�y*�����������Q|;8�K�~`�ZL(gS�����uI�$�O�ut����G��A�Y��)8&r�Ȉ�F�K
�.X ���Q�:l�J�l�%�W�Œ��rW�z6�8t-�p_�7�����s���n������5�Z��N������ձֽ�x�[���?_.�W���g�ѭ5��|z�'W#�9l;zr�蹑1��H�r5~~��G����X7�����z4�c8�]}���둽��^�����д����M��j|���ǫɺ�+�wlL��8�L��x�~_����}2���{�������.�/�1������h��_*yR.����U�r]R�����W˿��%�|>�����C0~�҆�h|����ܸY������һ���]��{!�13�!����%�*]o�\o�My�l�������g����z�뇛���[�WE�O��דۿדk{	Ny�4~|ز�jL/ן_��ٷm~=�׫�?�a���߻�gI^7�~�����$� ����%�<�-������9_���쪻����	w��{�}�d���;�����/.$*@<�^ͱoaB������2�hl='�|§<�Ŵ$	��
{���)�!�@�X@y��������I2rg"���P�2⡆R2�T� �����S�a�����G���G8��ϥ�}F�A�ɛ,�]�KĨfн�TC=�:�#���S�N�C:Or6���'�T�nR�\�R���-l�� �OJ��J�E"3�s�o]L
�v�/�����O�+L͓��,�ȡ�E�jy���
��Y�w�H:�XZߛ�.]Uz�O+�xs��<E��K=�\2c*�hC2Q.$]�8�F	X���Д�k��F}��9p�,U/�����E1� �G0rt��U`!�WGBlYW���VT�OO���ƛ5�N{%$�0��蹴� 'I�ʤ�l��X��m8‡�*E��d���V �s�z�N�5/M:�~�5��� ?4��#*�]�o�Y�,�'�h2wr|��T�~No!G
��l!?e�d)	�U���c�˺0��8`ٷ�yr����<�ǚ��
@�9l2}v���E��y3y�A.�
yJ�ע��a8i��9�l�U�ֱ���S�ɋ�Z��䌴��R�)M\�M��s�$��U�ґ��/��n
70_$��r�*�m���h�G�u�<��|(֋�e��l�z�v��*%IP�A.t�jѫM���Yz��w�T�u��gO�@r(���A]��j�nw}���_��#M�&Y)�(�5�����[�dZ����%e&���	DL�ߝ8��gK��7�v�C�g���
��*��"��uԂE�ڝ4�-H����B]c�_�,�D��W$�NOO+2{���Ƞَ,�<^��W�PE����3���X6BHJ\��x�����8�����ND�G��e�#����S��z�*O��ǜ
˿#:�H~N(WA

�C]T�x�w�N2��
�
x,��O�K��xTW��Y)��EU�?�G�h��aP����X��bZn<�6=:���rvë�E�~L!�W��������ڡ8:@LT3f�Ef��x�$Wg�J���UJ�B��G���r��j5Iz�ԓ++�ΎRD*�}AP�
��U�����Hh��[{��wc�CG ˵�>��4�n���P1�J�F�ΪL�򀬶N9�~� ��Hҽf,ٸ�b����!��I&G+Ր���[8�m=�}[)C�4�V�T�P��0�*�kD�M��w���q�آ1���2�M}��?��1�F=yV����d�[[�l��;_�{�M�9�G�@]��IM��&��N�<Q�D��$�,���- ,�@�	ToJ�*b��!$�mO /4X4$�1^��4�V�i�0c�x>'��#R	:��c��	�YW�ޡ�z�j�?�89��}~ 8�)��,S�Jo���-o�(k ���T5'�K�8�s��|eOc;�$�׫���Q��ŦI��:';|ϏB�����8�v0�^[��\��[� Y=���-�0�]�u�0H��m��۲|�G�R�ZH�7����GJ\+"��D�6K��Sъ����R�bj��ȡ+����g4�E�wQ�ҥՀ⋱��_�=������U��V�����;�Sb�B�7$пɺ#�A�Cb�v�X�rq}�(<5Ce���z��1#W��-Bo�T�+�6�i���w��y,��`)�����3Gfb+}ؖ��Q0�vpޔo��_n��|����FB+>q�o(�"��3l��m����	&�&쭚4q�O�"��3���9铇}p���Ry��IV�$(7p��_c!T��
Io�����]�8b���q�}�V�3�����@��džK��l{2����V*��&�qQ��8�V��{� {�j@A1(KPݛ[x�ooz#y��&���͛�}4z2���v/RM��0��X�w�pw�nN�����$���?�����A��X���5b��
�h���� j/r���/6�P�#39)�a��3�7�k��U@!�g	Ԓ���ct�SU�7!���lR@�J�\FrDUK lA��aؕ�G�&��H���i�ċwn9��R:4e��.9��)�H��yIM�HS�|��y�T=A~J�	����ț-ݛ <�R)V����j�ؗ�<�L=��Ok�e}6<Y��+mO}+A�R�s̝[�I/O�/�����N�)�B�y�Y�Q.W��w�rE��{/2b⒋_�c�7UI��Ԑ(�	�o�'��e�Lw��|�y�:���G����[�7�~�[�o��?�p����C��f�n�4�Ă�
��(Q����9���@�%M�?
�6%�%�UA�e
�K�Y���� ��\m0���&s�9�e�D|���n�0�����w�k�З���n��ť�K|�9�.�a7�n0c�w���n.�S���bۣd[�:��fƊ�,�N�A����p�&ck�
{���e�dO_�:�\�Pؚ�r���0�f�i��o�8qN��=�98u�a/?�7!?�\N:�U�O(�+}�V[����r�I�3��Z�s۸�_��eNt*Sw}�3�Ė�Ɲ���|ׇL����3E�HP���.>H���ܴ��m���~᷋�c2�&狥$��翑�%#�e.V�\��R.E^��4I��T��,_�8���ׂ1'r�R�2��D�<.Ě�)��lC(9��r�0��@&�T���dƐ�\�iLx
�|��\\O/Ȝ',�o���O��E��L��̒�I!����I.�*- ��H�?��N��긢�0k<@).�fdC�����W'��&c��iD��\<�<<Տg�i�<&	uG�;��I����5��>I�"�E���I5P��S�..�ٌ��T��H���j�a��<e���j����Z88"�`-���>�VV�C���j���Iʓ�P]c=��[�,|b��5V.>�EE���XX��mM�O��~�w�4%�z,t��DӔF`V�(̿�kϺCu��qpq����>9R���t��B�P4����賰�#�\�ɣ���S&0=FUh�+�X�缈D6SV`�[���٘��W����!,!n�%lqO��Rd@=���䯴4gV�+�o>�4N��#���Y�\Xc�p���T��c73�k�B'45�M�`8&R�2��d����v�hL5��J�������*Y���}ڵ��l��J�w�l���0˅R�
�B�����	�Z��
�|��^���z�����I�#Oc�&"�j7-i��%�?�_N}�&n
Sca�ǔA��T�0$
�P�1WFK�#0Э2����!l5�r�hq��j^�D,�r�RB�b�#�<*��ãP�'b(������_~a\�u�@��咬��� �����1d��)TU-
q<��L�!\�&|�a�.ۀk��0����n�Zr��ZE�љ���S3-��xd��j� I�C����Xo.�2�H]��s���c9�q����/�=��2hя�PkC̠��U	����khh��
���m�h�An�|
sp�5�\F�ɒ'q�K`W�Z�* Y�h��HG=f8�(���i�a��P���Z>w8�ȡB4�	O
[Ιx�t�2'���W�
���N��{��"䫉!��~���Ժ�me୷K&9- ���	���k���Z���Y�������5�A�Vp'�HY��<�+�v�w���;*���9����
�B�HmW��"�;vDR�-h�M����]�S�p��˱��%�덭�����ն�^�i&@uPݷm��>t�@���-w^���m�.����1�cq
|N:"�Bvc���6�hD�Mu	��M	ڣ	ç`X�C��C.y3����گ�v(�g����=
u�k�q8���)q�|�:r�������Gt
�V#�Р'��+��=�0$���Q��kRQO%�e83�G1udۘ���"4*(���}�>Cfد��o�_��'���1j�B���4C}����8k�|���+�x�j
��Ho!�e�.����57y�^��]M��L\�̢���-~ҵ�Gf�'.J�K.E��,��Ѿ�iT*���O�:Tu��#����4'@�>b�}n٩{`٩��;��H-5���'5'�d^�P�T+l�Z�6��3m���):������
�@=�\^ZX�;y7E�ef��M��	��&�R^����H�t;B�%gI��pM�����-3��7_ȻA�+���k���N��]�:�ۆ�̌�j:�������Y^���	�Uw��4��b򞠨��6�n��oXсc���ҲL�W2'���
�uz{
�U+l}Hq�
�b��PTE�Ma����3gs�^v$�V���[ \âp�^�4��7��2���۱E4��HF�xZ�[�:`�𠭤�a��*�V�Fz�����­y��O�����.���M�6�k��J�Fˠà����JF�O�黑ZLc�r隵�
V%��������׮�e���ls���]kV��Y��u�S�n���e�KJ���ϔ��t�_vuBޕ�z�)�e�����'��j.
9��&��Ҁ֣�4EEN��ĻKqs3�Nե�;����)�=a�:`x	��o�>��l%�L���7��uۺ��|��Oo��2�Gj8���G�F<��)�M����$EZ7 .�\�,R�/(_����3C��ٞ�n_��?%�#<��fgh��ѿ�$s@ի*_7�!T^�:E���J�����2Q��ֿ�g����i@�`Y�;�y�V,-�g2Ŧ^ƣ�G�e��q�L^ێ���*/��LDE�k��#ymE���O�?i^�/�
}'/��jR�w�J�z(��-r��nM�:#x�y<�x��5_�΁s��)��ڹ۱�;���c�+ރ�k�ˆ+ҡ�ÂP؋�Ы�l�	��u�rV�<���~L��Kv���uN5��l�\_u	pP��UT����gn�d������v9#t
Ё-B�X1T_��Z��nY�e0�>��b\�KN�o�g�5f��%P.1�\�aw��ϙ��'P?�"Eɱ�)H�r�XUt�U��,U�	�PI�5/%�1 C����-�o*�x���d\�]8�Ȫ�h�,�C����;�[Q��6���s�����l� v�kwԾsE{:ۻ�ۣp&���~nU�dMuO�'i�N�N��W�z���0G(���F,;���K��'�J��f H�VI?��n麯R��7��/6>�-`�)cCb`��a��)��[YS�H~��h(�l("C��%�@�M�B�v�!��d�mO"k�#��(���9tX�l�\&������{���1�&8]�{�l	~�hƬy�-���b�8��̏P�������o���cZ�B`!�qġ�>
;BZ7��\���2�^�g\X��*�|�,�՚M8�`�n��ַ་p(Udq���Eh����@R�]KN�;D�m���G�c� 8�E�V�_��Z!�޿
��c�4-��8�-���<�]`>}�������#h3�Z=��a$��wk��4�J��:�":�n�a��L�/�a��\Y��
��z��=�ɂ�Aꏶ��YHQ�	*�N�AF6��|���T����'�	�����z(
sa�i�����{p�pLB�>t�o)>�L�rWC��&'��X��&��ed����_���HMD��1	�18�����L�>� �(3?{��@����]R�ܙ���:�C�u���͚9���o`O?���WP]�F:��B��i9���C%�R]��(���l�
�9���>:�\]R���F
n�F����V�rI�e���G-�@����C�>�]{n
��v�C��q�[@!��8�(ʓH)��l���!�������lccs{c���zC�{q8B��iUx�c-er���w_r1:�d����є!�}x��
W]�t)�����zڴ��P9c�R�����8&-�Ȇ���V`V�ѣLWRX&��U�e)a0T�$a�Z-�ky֔S�D�U��^`V�	�@��w�d����Ee.�Gc����)�՘�� ����x�:�mK`�����4 ��Eh��Nu���ؤ>��T��#���}�~��'Kea�w��^	������vɮ6Sǭ��&�t�S5��$@h�9�TO�1�'SG�1,/$������g�@O�i׾DI�������iT�D���ZT6�t�qhaF	"Yر=� ���K2��S�֤�����7S��5��q�-L7%���\ڦ�XZ�z�+������yY
���.�������K�i-)�����'m	{4�͉�T�"%����U(5�lQ��H-0'����*2\v�teHv�v�B�e;������dixM1J���nT�*�MZ���6��Us-(��4���T�<����!���3:{2���M��uI&2����MA4���߃&ܗt��˶B�eJ�}y(��.E�Qyw�3kq������h+�Rd,G �J�h���\ELBr#"�0���|N�˨���+:J���?�7��������T�_Dd��Y��k�}81k��2��`mF�:�+;4�>ɦ2��F��t��&k6�[(�Ag
�7��	x�4h��>`�i�[��ßO7pZg>fCpZ���'x�~�`B�'���6u���M܁�ҫ}�c��'�U-��YߐT1���rLWps}s��7o�ɷ�����d�
��:Z�6��p�] �\D�>����N��l2a'��!?ZrUGl��^�~��f��%%��~)�W�Mw��*�
�1��BOw����m�		�):�Tz���D0滿;ׄ�z�Y��W4��f���?b��Çn��.��w�'P�c5�'���/�Z��-�R$�k�R�<��yV��k�|�k��%��H��'����e����g\��.!�r�2Ϸ/�u�J�p�K;7ɲ�w~`��w�']�=|K;:J"Zb(F��i=h��!_��E�L�<����D�{��߷��Uq�
e�w��"�^}z]�4��K��.��C��rd���UX����`�˄�f����Vf$��)U�"��k�o'����F�W�g�[��w��'���gw��6�ҿi�v"obcoږK�Gb
��������b2H*����3��oV�!sW8[M�ո�4��÷�d��c��:P��8�%�1� ��S�����C�!�pc���|���%P��a�K�3�$��3�ڄ�q��`���x�>�A=��}�\l����?��9���a�uU�n�8}�WL�,���E�b�4�
�m�u�<���F���b�h��;$us��.�p�̙3�,�KU4�T޼z��V��V[�p�l��I�BF4�;,�Q��7��J�7`��9B�
�ܨj�������؃@<GI�l�,�L���R9Y���������
J.0�r�Xr�ɘ^O�t2�\�d?G�����A�����P�%'�L�@kg��`���S�Tl�rl�+&4��@�PR�o�A�]s4�io�3G1op��[(Ү�����?�֠tAK��=���;n���g��@)�Ǭ�C��謱�RJEH�I(�w��8+l�T���,��>�6;s~�6n�^��GK��5�l??Sm�GP��W+�pe��c�����)�V�@����m�ڝw��*HZױ��+��H����pY�����A��e5imI|�=�@Aj��O�!Z"QBEJ
^���#��׿?E�&i�M�uZ.��q���B�}��@�
�;_��l=H�̽i��C}XQ�s�4uU2N��,06'�$�m��&�It�MZ�N�^-��ۉ�T��؊6^���x�O�~�[�NlC�*�SӴ�X4:H�L��	���~p�l֣�Ǭ�Q��|�{��w�6б�8<f�^Xz�5�
-a4�-e�Qs��
H@�f�F��낆��$��	�)w�'�DZ1�;	f_��v��Tj��-^\�f>Fe�T��k� ��}�t��Ii�晾 D��o����^��WLn0z�m�g[3T�}�<�v�K?�۾
��8�&i�2B��&�As���Q��*��sY;;�_���	;S���xB6m
�D�<j����P��S��$,;kRS+�f)
d$�ƈ�v�(�_l�VZ?.��{��S�UJ�v��S@3��q�)}�DXvX�m0$4�u�ڸ�X?3)��-N��#��/x��bt�����9��V�n�F}�WL^Bʕɶ/亵c��')��(�9��v�ݥ�ѿw�B���]ș33g��n���l���+?���/�B�����v�����)\�58#
5�-i�e�E#�L�5h٪!��]�-*��������6���9
r33�3+�H�lE\�s��۫���7P��(�NN"8��l�t�xc�Z��տ��?8��=�9�rX��7(�nj��b�@%T���`�5�5ߢ�J��Z����]������Ecdċ5%d%wڥ�,��+�O��n	�q�Z�{G!��3�m\dيL���:��w�֙�΢(Wi�%��>�e=�Cي�p)�<D��(��1G�v�55p�Ő��hc
^W���$������r��;)k$}8 ����9���o���V����+̿�\b�Z$�)��p��k������%��9��
̾	��R��
�i��
�Q6��Ǝ�0�r�Å�B�@mn���͠(4<����]'��ۃ����M4�@Bh�QG��l���)Qk�-��,0,���r��'���ș[��J$|���O��%E?���C@XzW��Ub�0��|]c.3��ͷ��L���%s�E�[��c�|^3��h&RV�`�N8
��#��w��E	P^�� ڎ���(��$���z�̃�~�	���YN��d[a?�uT
f���j�¬I9�2f�m��MW�+m�,���j�Մߎ�=��FQ�]2��%��O�5��؃�Jۧ�*� �[��³о�����ly���E�Ybmmư���0�9n�2to��_����Ѧ9�.xM�*��|aDj�b���\�q\[ё�P�lY���U���@����y~p������8&�����Nh����l�Ҋ���!9�Z�-=|��:��w��my	I�<?����[x3��!x�zz�C4��>nA������wn�w!��mTߋ�_����x�u�M��Li�`
����WD���C�JҭB��'��E�D.�i�x��x]$��q"��We�y�Vnvᔁ���Q_�e�Wl㕿���'$�^�x�s����Nbwy��.
>�@)t����=��ޭ��@�2��ũpԐ�x�9̝Q�I��1�X��b��^��Ӂ@�U�!���)N.�,(Q(.J�U*HLO��M�REzY�Jv6�i;.UGD(��Z[sۺ~����t"*֡��>�Q&�$uf;9�C��$$��I�����]$(R�3�C�`K���zo�U����ܰ?^����;�Uu#�vP��R:fE��fJh�nE���/Z�j�L.5�U�R��*�.�[�J��d�8;���ͺ���(�1�s�R^�D �EU��%�v�����[�B�;;��3�������/�G^�o5��E]�FVe4a�w�{�~���S{
�*
��V
�
2������f��k�P%�)�
�T�
��o%��K�����鼺��(�2Ï�?H��0(��d)��+*�M�\�:j�
R093�V�*%������J���.��$f'ijҠZ�T��4z
��`H�'�1U�����r0�,��9�����i]pը�"�SQ���zF��HL�{�l�M��ט�P5���
��:[�g�Z��[�^	�=��B��-��_����+��ӝ͛�-�ף��
�q%��L�%��V���HZ��߈���P}(��
�;�vij��6y.���ebN��l���W쏿���LL��#_ip�;�~O��?V�d����+py�6��o�3:��ף^��h�7]F�X���n�W�C�M�bw�Ls�����JD�o��ƛ*���f��Iyo�&X㍿${�R��E�s{�#"�'�
����)*#�.��8���D��>P���1�?�7TyF���^��`�H�I����*��.�r�o�a�3�C�y�;�"@�V����k��Ռ�~Ľ��
��Z��8�`pq�s�|��q� 﫴��) ڽ@��ǰ!m��}���B̳�b�)z@E4֩����`�Ŝ֮�D�Y��I�d�H����
tԥ�nxY�Q��Mx�g
m�3�P��mQ�yί-R��BD�o�RH�ךU����S	&c��\ԠTp��?� �"^�N.>��+���X�E�BGy���Z�E�X)(,�qRek���.ƓF㘺"pH&�����u�H\�rirX��m��3�`<�U^���|z=�+ڑ[��������$��xw�,v�>��uLײ�^41�m�c@���4+��p���0��'���A�pՏ�����@��Mu��~xM.�,+
I�A�:>���_J��
	�)5~A���]�*w&2J�'�����h���F�!��6�9��@�*��;�[����!�ʝ��o�,��xC��K3��+�+LX���WP�]�N�>��L�bM����a���k��]��9������	 ���ـ(-v
�v��0t�\�٬tN?Д��+���jয/.$m��f(A�fi.�������]��
e�X��S6�P��d��p>��.7���1<� ?RG�mZY��&��a�7�W�1qH]��(��&="O�9�W�rse�0N��h��2W�*���cWj�>,��iu�1�Es���a����J��b�"�'ݠ���*,�MnZ+:�l8\���~�`jE��i�8l8oj(�����Ud�t;J�d�g�Q�#�i_�?2 �{1��p~�T��+�Q�m�6m���ʥ�nȥ�p�T�/n�0`2w�JA[���/��H�"P�&��s�-A�L��-�J�
��9��,��R��%I�?�����Z�"k�.��p��D@nOs�{R!���G6���a��n*����efk��̎7���B��z+��к��X���N����V���	Iڕ:�)N�`�tX;����{���lh�J-�t����"D,���[.K�uQtZ[٣3�v�_q�����5X�!��n�$v<�Ϟ�-����hf�r%��#	%T��j)LOv��#x�,/�@��
=����ܹk4	�� �X��F~X/p5	_���Vz��)\z��2\?w�r�n`�eѫ l�Ĵ��k��H:	��s���*�6�
�d��ag�ޅ4���:G����0l�Fzma���Ɂ�s�ӱ�G��?�Gw(87c�Zu��(?eDPC��^cc�S<��4��@[�
�t���h�����)�9_�`#��A�h�١+����ݩ�ԟ�?�V�5��l(8�����J@��*",�ۻ�ph��SǺ���e��� ���0m�6��?�C�6��G"�R@��>{��xu�ȰDy=p��u�K���鱦�k$l����Q%W����c-pV�8㢪½Ӱo���T܁�n/�j~hy���ͦf�q�M���R���;Oį_Ů�>o��ͼ����︶�R��B�"�ڶ�ӖX��ۈ�8�K(B�*M�ݴ]�١i�g���Q�`�&��cy�w{[�O:��1�
*h8�!��2���A��H�Bl�z�N�#NE&���N|�(�/��ɚoj�yP�����MІ��S�;t�!�l�$�D�N�~��S��܄��1;��8�Z���—�hFY��+6[A��������Z�;?(�X3؞�,�����gPPw^�����h[����ۗ-�z+��8�"��p�'8�j�M{Xc�
��w�>�C�;�a�g�ehK�pC=d��\aS�h�L=�J�@}�*�\��D�|��#�4�CB�r�Q3���_���Ŷ���X�&Pq��e����*��:��|	ʍ�eI��[ѽf'�(ߤ5sOD����g�3A��S�d�[
�ۂE7쵘�g�w����FhO�����߆~��е
Q�j�#�KeAY�*E��'�C@o���P!Է�<-]'�m�U�����X���>�����'v,t*��Ւ˚ž��zh�c�~��=%d`	BG����}O����9%t��G�C�t]����ɟq2*�֬o��F�!�d�
�O�����[�nU}�+\	)���-J�C�HX���Ig�r�XO�����s?�q��8��_�Y{�=�e̊˞X���]ŃZ�[�DL���WFs�
��X=����_��'�KJ8�xA�Nj�����y�
'��DX�(�icvd��Mh���ư���CTH?�*��a�#�'M���)[z��Y�:'O �l�{)tH�r[����(��}�^X5spU�X
-���|��鰵��{�I�x�g�8��i��3��{�
Uv��Rx&*�g�qU&.y�	8�<����q?�%���ŕ���S�{ɂ����c=@����J��jc��=�Yf��㫿��
�S�="X^��@�|�H(9�H�׆g$�<���*������h���DvG����pV��p�B	�Jg���M	�X9���C�}���W{��9u	�� a�V��l�"����p�����N
/�5+Jϱ��g(;J*\��#}^�xX�I�}�B8�Nq����ċxU��Z�'
����D�P�	�梣���B)Vn�����'&��q�B7g��
�J��)Z�zd;^o�@��-�%6U��~�d���Ǔ�(
��A�z�JW�F=4_#��U*�s��h6���t#��Q1/d��I��cݣe#�;���v`P}��s�'�V��~L������Z$�����+Z"l�=̎UG�׀b�#�Uxr�w��x�a������s"���
�J#����<�G<'���۱3mG�@u�Ӊ���?�ծ�R�6�"�%s��Z��%N�(��uC#���;���Sm��O�k�z�7�gY����%�,.,O9ۂ�.�����k��N?ޔu����Ŷ��h@����ݯ�z�7�k!��,uD�U�[L�{�u6{�]VKyΥ7��m'B�٨5_^�ך��w8��\E���ܓ{�?�[T�[ѵ7��Q<B-*��c��$��h>M�
�o�	d��/�ff��\u)!�p_�rf�01��@�'D��m�_��
Q�7����f3L��Y]D�؏,Ht�5xbA)��@�_qFП^zJ���r[(E���v�9�ǵ3;�j���B�j_�\����& �K�#�F�	V�C<�8�Dj^+��:T3V��G��pe�B��hT<+�aM6�����w��Q�
$`�Wh�u�̌�<�&?f<��L5�W��f\=��:��eJ�;)����Dxn/9�k�7��K��'YǗ�pǾ��0��yyx���Ya����]�k����~�P��!���c�u�\H���Š��p�0)��C����Ņ�ᶁ��&��Oz�%�g�
�!8��T��G89��6���3��L8E�U`��1tw�����	=�H��a|�/��[v������u9��o
�4R#yc���͗��Ѣ�˛�q��|O���Ci����}c��٫tR�8��Ƴ�B%v<Ɍ����8}V�����|�8������#f�9�P���'t��Bh�*��ǥ�3�]�'���& i���ѓ�<�R���8��;Ѭ��]6l)O�D�Y�挞4N2�`�Y�|ĘJ�X&�W(�I&Y�⸱O49����Pީ�/j;����F��K3#����^�S~CЮ:#�2��S<���t�D��ݨ�]h"�Z�t23V̒A5d1�	�1[�l#T5=��U&u(�=K�F��M���CQ�"�*�?��;���S�5��z�v*BJx$����&�6Y���:�:���};��I��m�����Ӕ�5�U�{��[嬮P�-�9���ÎXX����<�D�W��I͢f3H�f%�;*bV��6Fe�Ȯ�����\�N1��M\�B|� ?�~�z	��aA%������&>����l;s有���F����,2彏<���s��)��<�����a
-Leg!;
Faw�� � -U�x�/#�ξu����%1���X~�/"	Z��؟��
�4PB�Y���a�#ק&u]H���^T�ur&W9�Z�d�4��%7�M���j�"����vbi��L��\�W�ʆEN�8�F�x��E�KG$W[��#��U������R=2�P�g�\=��"����h���׽��|�+�w#',ƶ_ُ[��Nƿ��~dj&���a'�2�/�nP�¬�1���y/g����M�;x����Lyr���]zGLkL��������kJ=���u�Λd"r������T.� ���D��:!s�ֵ���C8�:l�oJB���ZCRR��lzT��
��<�-t��(*ڳȩ�F���z<m#���ļ�LV
���I�}��mZS6yx�#����.���5�h�qd�)�"�I�{���}��)��'�T6x��W�r$���!�I[UHZYk��64����w�8T����%��:{�=��"�y3(���UX��٠����P�ΨnZ-X��%=z�ZA/j|QJR���J�%�6I1�铊8�0��8K�:r���M灔��0�7���\�n�@��j�Ǫ�Q5RD��?�rQPF�4�!�ޝ�ݝ٫
/$���w=s�̹���I"�8P֠´o�-:�q�a�5Fǃ�Fa���(�v���N&�
��JרC������#��"��"`���[l��Eğ�c��ۊ�ż~��,��,��F�[��m��;���~�=�Ũ��i�DS7ڬxf�0bC�_�dy���QO�]��,|��p�	�9�m�ߠ��'d^ D�stgQ;����kT�4s�a�~��yp3*ZEj�,ok9��)��
xޚ������� V�j���%s}j?@oO��N�����tV�#u��x���G4�eR/E#h�&�W�/;cZ<�j�����%&(�g���+�g�i�˘��eF1��>.�r�&0������>s�<nwV.�s��=�Y�Z����bx���YAݠ���5��[,����Yu��]��lH #ӚE�V�^SEDػR���el��|��A�Pj��wc̤s+L�L^s����7l�I�L8=邽|�G��O
k�q�Y�������]�R?��ɍw���|�2�]F�y��c@���'�����L�>���2�DO���k�%�ҿ�,�α8l�luP
���;����sk����[�E�V��J�Н�.�����uB|��}��i���!#��dR~�%�u��f���y�bÚ����t�N����E�c�(���}�>�G��� �f�-��L*�me'�E�E�f��'noj'V�<�ھEa�&|�}odA��D���\����-���S+��"�Ϭ�g�,*[K WV�#��JmĜq"#�+����ԩ��M#�ݱl�4x���~@Tҁ;-*N��L#�"HP�nw��dq9�'"��,v�ܢ�	`���?��1c�%��
� �;S����U�哶��w|�i<^�P_S|��y���j�!��Eh�W)	�qch
9ng��|�K��Ymoܸ��_����nn#'��h�s��k�&qp�]?E���+6\QGR�l���I��V�{-�|�m���3�P���\5{-6�eϟ>��]W��WZmE�eg���6;���"�47\�x���
gj�l%3��g�*9�?7j�u�K�ڳ��p�ꉱ{ə�a��rˊ�f+��֪�K&jx���7��.�ZH�:+�Z�|>�_[�5����k�_ϖl�օ��/ؗ#
�Ʋq	;e�mY��v?~�����+dn��1���T�f9h[���5�H��E^T��	_H�jr
�E���%��Fե�7�*x��ڊ���f�؁�-��w�%jإjδR�H��F�$_�V�:<pPoT���e�[n`9�H�|�Q�+ޣ�&���E����j'J4ms�
)���8�_�y{�w\�]��W'����'�t	;� ��H�1F��O��ϖץ�^�xm�s�����~	n˷싱<y��|��߲�eV��%�u�Zj���V��VL�Wb�z�*x<1*���A�1��<�m��Q�eP!���2fچ�r�a�ed�)�x�>wf�:��7�֧�I�V�
p�O��Vh^^H��̇ra+T�W�����4��L����Hʂ�T���B�^��rS	�+��}�J��l[iE#�/X�(�T����v�@��QV���':�����|u�1�Q�;�K�VU���l��K`L�kr����SW�(H�IeIvfq�K�o8�r�n�u�}s���S�N���%pE�hU!r��a��}���P<k���݄�Q����.��f���F*���q̅iU�ص��FY~@@�_��6+�.c��P��]�װ��]�����-�D�tP,�7���b�4T-E˪��q�Vc�Dq��R�-v���RJ�қ����U�4^����*_!��P��(IM��Rb�����'���J'�"�[ޘE���]�����U��ɿtroG���4L��<'!��
v��n�w�Gö��V�R���Hb�A��;��VQ/��0�t�K��<e?c`"$��c�N 5�ˎC`E@䰾�\��jMt��ıW��ߍ4/EyN^��ÊCn ���B�����+���S5rA�-t�[�AG����jВyl�.q�5y�v��b*b?��"��Uk-*��k(ɹ�%ߦ�����YDF�I�T�N�$�ʉ##k`@��;�]C����ܘ\�Q���VO�a|L��!�}{��k�z>�m�8�V�b	�6�tM��(����V�I�]�1����p������l�-^(�脾?7%���<��]���c!�"�.�.�cb"�¢�$����N�&T���.�-��j<�
T�Kʄ �X�s��ٖ���m�Cg����j�U|��A�@-P����(X?O��)��9r{����>EjU�_x���1©xxx�����9���P�z��O#&�a,ʼ��V�wKƳM�tU����StM?�����^nݫK4/4���B*�&�+>���W��tV#h�PQ���Q��.__�{��'h^��:�ƓP�}֍�}S�T�=�4u'!�ݻ�jܧ.����%�„�f@5e#����S+(�jB�”B�4�K#[׮U=�
0���yq|\�U��
�=~�����lXu�F|��T��f䷀1ᙙϠ���9q��iJEb�v��(����qā�NE��@$C������&D<׭����
�>
��µ^����Z�'	����ư�P}#
N��Q+�8��&m�N�s�F!���EYp�#�t�^��K�ߏ�+��ތ�~��yH������?Z�o�N;��u�&�K���"�^
�[T�j|�Z�d3�l/��-�&.i�O`f�(>�A�i�ʏ��5ͷ�b�G2�)c$L�z��+HѩHXO�H;��l�p���9���=CfJC���`�L�M��m8g���g�H��W�^(�/����D��$��$`U4��˒�z��qB�\�؁�b�F;G��i��z�UxK�l"��$=2/�E�?^R���_i�頁v�<bl�����Nn�ǑA�<��}z�8�Y�̶[^�e�Q����
�pm�?W�Fr>B�I���Pr}��Â�X!0����-Pn3�V��n�"i`6���)Q���,r�yh����s�?�5},8t����*��k�±%�����ps� 3���4>�Z}�}���Z4�ז��/�Ϥ��(�f��d3��9��	��~|�/_%�7��'�~����]�#v�8m�	���*�{���RF��G�����}��y�p��u/�r~=�ga޺���aX"����'`���ZB����r��xg�J��c������O�G�BDٺL�u|EMG�8	���I��OI��G�Yog�A���B����A�x�HT#��<�3�W=•������0��;��J��a�L5y����fU4��}V��S!��<Yp���O'q�ӧ[���o�nra)>���n��i~�m��]X"/q˘�M���G5r_
�YA`����6rh�Gt=~ތ���m!m��W�,"���P�>U���ׄ��=x�l����`_�/�0+'�ϩ�2��@@�qp�gN^�`<�"✓"`2 ��E�<������x� �{G/	*���?hB�}��6������C�R[pY&y��
�F�R-y!`�Jt>���E�J�z�`w�M��W@ ��8U�w��뱘��R`X�Z���f9��
��"���ߕ�������=�o���?I�\���(��h�ZG)/H����O!��$��X�o�6�_q}��9�6� h3��2�i��d���E������ݑԧ%'i�����}�N�	L�v��]b�_�n�Dɍ�7p��D*�E��%Ҡ�����`2����\�I�-sq�d���=W�a�.f'��R��x�l&a"������̳D��>]N�W�9�E��`�������H��Aj4e}�C����18;a��;�D�?�LVi΍�&9�A;Y�'!RM�H�1_���D.S��a�g�2�����U_(�v3f�gt<�s@�\��㳒|��Ec�*u��/���I��H>�LD��EƢ�+��M�����v��]�t~6@r@\���rev��
�.�f�!z��/#�e��G��i��H��(!͆�L;yD�cy��%H�ڗ����/����W����" �S.g��>y.�~x��k�B�k%6L��<���_@�� ��S�m-�1����V�J	�v�4�yS:j%�9�x8܉{����D=9!.�����r�|Z�6-e�b��$0D.NT��uNC&
����<3"�Ǧ�B��V�J�I�k�?#6�>l�b�񦬾p#��MX�p5S�l�(���!��"��y����Y������,6�T���**���fԸi��g�K˴�͌?t�ptf��p����\"KKkhߘ��ln�z~C�LM���<�C{V	�*q��ns7�%;޶u$�+<U��*+���Xz�-����Ȋ~\�c�blg�Wh<���%��P@P�vS�--V���]�(����+�E$OZ��e�!�Xʲ��5w��&]�J��8PtN۷	��=F)Ӛ�Y�w�	|B#�x;|o\�Y��4[CW��.^/}�R�G��>��&tE�°ٮ��`\c�Ԕʡ���F��H�ӊ��k��Cx��7�)L9|*$�k�O|��^L�E]�]j����/}���g����l�b�ڒQN�������J�C���^�9o	N�����0�!?��r�tv@L�O�
�v�}~��4��Z�E3mؼO�~�W$By-�,�7?P�����'�(z�a&�_�h7�u�;��(v��eU���X��EdU�
�^�64�&a�H��R���7gL��m��6^��'o�L�'e�w�l�/���d���ꃴ�R��Y�^�׳׆��-�8�����ow��PѾvmi�u�7G�q�*����!�Cyk��a�@��v�ڍ�q��+�]e�5��_]��a��9}��1�ps��
;�[ê����iz�)a%e�Y�3��_�5y$e�R͛�zdL��o�f�Mbw�+Y`��#}�^�ҮWP��0�5��Տ�ԣ��qF;MWJ�M(�OXn�n��$��2��A[f}��.ŒI2�2���Ќ���7M���]�R8���y!�?�r=�
����$^M��-��$N�]G�k��^��a_^<=���b+�l�H���*ET�����kk�z.1�_Ty�x�+%��]灼�3{���F��Ά-8�n�̽�)�����Jd�s���@�ذ�UC�!���͏i%_	ɨ��Њ���n���W3QR��e+U�O/��G�P���ƫ*�>����-�c���eƍ/y�����@Rp�
-8]M��z{6��쀶R/z7�O,��ֻN��[��~�PZ����+���WKs"7��+z�2��'�=�*^�Uٔ�N��)��Ĩa��DҀ)����4/0~l%����֧�{�c��rk�2w��w�a����
.+�kc\�EZ4kl0��A/��҂Օ�2-�q��h
�o�ç��#�B!3T����A���#-t�HE��_�W7wW����`|r2�����͌,�6p'ι9��,�iȼ�8��E�Nk���r�/��x0���
��F���ʜ�*���Ln["�����/�0Xg�Z���{�<�v�@�x����|�eZY�n�a�vaq����rE�.�<�$+�1֛o��ȸ�;�PU��BZ��^V��[P|-�|N�{L���莩2�M=Rr�W��U���vP�Y�CD��4��R+AG���z]�L��^<	���;3��ͳ����v���,�\s�}W�~1Ⱥ]3��{:�V����Q�P”�pKN�����B���=�i�̍����l������ƱC�U��_Lɜ&��y�VɐQ6]�,O���
���q!��d��B��Q&�M��i�#~�fl.�N7G��U�oa«G���M���zW�!�k��
mq�����a+�+
�I:2����j�+~?�H��	|<;+�ɰ
o���2�(4/ }ƣ����s1��?��������)V�5b4"�fal6�����v��7m�	�s
7AzB��T6H�,%��~�#k Z���.�+b<�~f��gTR�a���*T�n���1�IK]o�q��5BO!�g��ޠ��H���H/Xm2����*)�}l��H��ӫ/K$^T�O6��S@�:X��Ru���\"���ٟ�Lu��'14��l�
	�**\�TH?��2WWT�6��uB�5��"fۋ����z~�B�7�"�HM�Xo�s�Ŗ��%�ɢ . I�,Җ>w��ύi����%aA�m2|��[r��ş�(+�2�B)篓���F5m�%^~
��e�Q��:�
�c���P�g`ЯH,��|(>u�.�c-�Ł�4+;{��`�"��綐x��M#E�.�'��?�R.�_W�r�u��%����c�h��:�L=�%š�ß�[Pj�}EXKK�"�#�*���\�f�G�ˏ'��^�no^�k�Φ`���¿$���xq��Gk�u�<�w��m0FL�M.��
�PE�R���hw$���u��t�������
=�*�̀��?�����q���7�z�{BR�}��a�UF�C]�'M_B���v�� ���Ymo#���_1�t�I��"v�ƕ�F��N,�(j���[�$W�b�w�o�ݕ,z�;��3��`\lvR<�4|���[��8�W�X�r
7�^R
�&�)�\q���3�šX�^	�(e�!)R���r��;`����w�L$<�kz�4$,�'Nˢ�S9�s�<��O�`)2>�tF��w�=�ĶL%Rl4RK��,��`_̵,25+,Q|HH	~9-���Ы"�(��h��F�N"�)_�����q�`Y�E���K_��nÑ^�e�k�{◠��� | �)3<g�7}	=��U6ϧ�&�TbDt�l�7������:�����{�'[)������Ǜ���������Չ;�Ǜ��.�7?~��_����E�D��C!R��R��X�^��4��-���<�����k��N+G;#���&�?<\BW�ˢk��/���t���Lt�;����~r�<f2G������O���4g����K�0�=�j�A*�&c;R���
B�!��^"ߺ#"���Q �y�A��2K!/4����,ׂi4d*$Ot���9KP"���c���6�?>�iu�R��R�܂�YJYl����S�TA�:%�����,]H��4�S/?���Vl�>�܅��8,E�Tl�}c� 'ʢ�u>7g�%ԟ�hC�D���h@E�ff��L��$c
;��P���P2��g�ϣr�\�����f�19?4/JY�F)�S9aP�9Z#-�Ҩ�y���{l�A��W"K{MF
J#�gT��ʮ%�@&8�\��z7�.(�O5�z&ּ(5=k���p���U�]/6���ٱ�h�-�Cf�9�����8�rT�|g��Tn<*�6�x���y�e��}ē\`����T���W�n��<	^[^=�'Y�RTG�@�1�&c$X���o�L�o�d���5j�ܻ�XA�(a#("�I��S��3�W�C�SRV8
�#ܫ�
��н��[�^̦�c�vca��%��o�_�!G/���\.�(��G�4Ţ���!�S�b:Y9�u�v��T�'6�tvRÚ�W����rŔ3��r�<�C;Dzb��R�"�b-��nY퀻�K�p�v�o恺��
��q����o�7�����.�C�Ի�ѓ��ͳ�D��|�;/b�u�
n�+K�<R�b&�.M��3M�4�8 
0Y��T�0˰��ի,ܪs�ܫ$cO0�8�}��Zy�c�����`%�1�<bc0:)�C'��9Br�#��zw+��L�byՒ�J=��c�<�T��G9�%}+q�s�΂Lw������1m�W�5�U>t!�,��g�;/@�̧$��>W�<@���"b��b��U=��J�u�wP���D��Z1�χo�Zl��S�;+Y��=�x��P�S6�\u�D� ���ނ
�6�|�i�y_����7��^׽U'+)�D`V|[<��H�vy�b��&/�8q�׿�Yj�7/5�1�Բ���D��hɊQmy6'f���G�b�Fܪ�WyW�
�l��4M�v��0���5�%��@�ט�h$��|Œ�
Wg�Qx�VK�g`?�:����Z�:m%����zcɰ��ī����C/���	1�}��O���	7)��Ȅ�ф�6<�����O����o�C0�7���BSlai"GӖ�����Vw���'.���n��s�c"��/�p�>a�E�9����o����k3���N��-��B����J��Hբ�hn_4�"2j�96�؊��s�� ���["E�GSI��_4��G�[�GT�!~?	�2��xi�T�������X;��EO}�t]�<L������ovm�桰�������i��8���!m=i��mR����/{׺X���Z�.ȗڈbXM�a�u�js��U�j���T�^�ٗ�`T���}��Z������i8�Rf�P�~����Ո����6n�1pc�9����}p���~mV�u��Pu���co�&׾��O����)�KݫM��?W�Z��ǐy�������l3ˌ%�t�g�r���(�s���u��/3��mt�<Һ�d�� \�徻�����|Csf��_�3f��c�ҁ�q�vԋW��jɇm���(By��W���>=�dV-�D�RM��9��;��n�7Yܗ�l.�_���T�����	x��K#��u�_k�0��)� �ĤR���Rh�vPX���i�b[7��"�*̘|��v׮۪���s~��#%tM�2��9nd+�k�wOn/c�J���L�)@��vdɗL
U�Q�Xi��݅����P�1Hi�2)�rm�a|:�x����j����u�� pmFQ��@�@J�M �-�I}}M������;��SC%>�oNw���C6ٸ)uiQ�@ںh�My�׻��-�ڐ��䁽�9�Ȳl؞Ж�4�~���S��<9����`�,��jg�G?;��t?8����Q9�S(���b���Y�T�2C=f�H�����¼?.p��z�[��5�G�{+��r��C"���}���~�d�Y���Sʗ8]�����g�Z�ј�ٶ4�vd1��*]p!S�����������[ms�6��_�tn**�!���VsWWV�$q�v���z��-&���lM�~�x!�YN����ˇ&�ž<�]��1��
O��|s���ł���ˤ\��R,r^Pr��D����5���xL^��WD,��y�#F�<f~^�k�3��������BlRF�$b,�P�(�Ȝ!����b�d0�ȋ�����\%)�{{�Ǐ��c��pOV�9�5LK6�3��tD�P�
$'����9P�<��$ M�c
��{{�1�J2���2R�#rUf�H�,�{���ga�~r���ԌMT�k������#8�O�@���?1[����t]�B�$�U�xT�?��S�"�aGM
�Dm1S*�9�jz��ʈ��r���"a B���9�-tww�c�oʄ2ʋ<�OW�����Ā�����+����P�ZkR�췣�����ыC2x�nØE�2��O��	�k�{=dɏ�;_�G���\�x`�y�!�
�[f��9�&R�#�-��,S��R�X�I�Ja%�Y���D{Y�I?V,16@�!,�v!�{�[�
p�Ć;:�x��d	�Fꎗp�#+�=����QY��wS�H�Tj����q����jH��x�kr�\��|�,���C��_�I��5���������&��E�!��3Q�!��W�\3!g�Q�4G扜���%:�I��g��v%Yє��Y	}u����T�H�=
%��a��@@���)�ERîXA�\%
��k7,��C{�I� �#��R�z*%y�F����&т��vP&��Ɠ���R�i����)\";��L�t�Y�~�׷�D�>�H���w�_�`�&��]��=�1�8g+L��߮�5�>���׾��N��,��"�ȥ��>�	���RY{���� i�rq��h�bK�9� 3U��\T!Y�[��+U׈g5��V�N�H�@!MYv-��r�ګ&��oڑ��[F,�vDž�|�N4��+f�-�������n���_7Ң�Á��o��Gdpp;��2mmWi?f���a�w*�Qs�~��}R�MC�'Z���M"�ԅϚ�7x2�<�`vw&Y8V9�dA l䋃�/�`��S���J������&0�����R�v(�
&}�#'�*�E�/�t�=��t2�E#��o�kM�{plɬ���)H<٭��P��cR�*}1����7O����
m��xpX젍O���~>g��dR(Uf7��peՏE]��q�FZ�G"8�J>��tme.vr*�-`.M��Pi�`�>h��]��]�d�Pw���[�Ou��}vx�������_�T�‚S?���p{.y�nL\�+��f�`Yц��	�"5�L��e��V�
���>�R��ֱϔd�RZ�a���!4Pȃs�G��U��,7�^�:)u�+�lV��Sq�E���f�#e�~Y1�I�a!;!�U��򒵭*�J�
��c�I�L1Qݮ���g��L�
�	�wC�̩�)ۦ�y"�|Kc�ݬ��
��[�,�}x~���q���l	���8�z_�8-���'��d]�������񷳴͐���y�v�s1�@%�vd
�`��y�����
C�	X<�Y�KF��S�M�^#iq~R
�@��:�X�N�#u�F�,�aƱ�#d.yqv�8�n����N��&�"��qt}�S��ӊ�2~�J��4�c��7�O[�z?R�Uϧ
t���U<��a0�g�5:%�2Mġ�~��z�t'&�	�<���R�[_oCW��4���o��GOg�'�.f�fg��,\�I�S�t^K��yT�@��tX�ŷ׻�St}�"t�'d�4�\"�8�HF��q���'����,�JtN5�,cp���k���k|���ʆ�*'R�e4_R]�5�^��$wpv�6�.oR��i��oF�J#�
����N�\n溣s�8�Tá�AG�
*PrB�t��{�)�*R@��������{HP���}�Nb�s���M�c��[X(�3HmRBn}�a6�-���)�;���N�`��7�&QG��
Tϡ���S5MO��
.��"I��j;P;����g������jQf���3�A;e���$zo�ƿ�P��iy%~���º�opb�A{�Ē�Gdes}�?��vEӒF�;W'���A؂߾���ͺ)�L;�\���,��T��.1Lv-��-�Č��p[Jl�9'u�8C��U��^�[JN���I�s$��L�;�_؛�[[����x˝Իdc+�a�E�ާ��f�i�*��+'��$�ī��sy���ƐW�����>7�KY�Tv|��Ms4jZ?�i.h�,��ݎw�8��f�[Q���|����-��*�r/���ҰQ.��}���&R�����$�ε+]$q���t�����/I��]���%�E�n����xH�`���>u�7g'3����~6��=/ߜ\<?}}qy6;�����:��G�a�*o���Cߛ�ݸ�t&��.j7��v�5�D���cq�Q̊����'�ݹW&�کB��'�u�;����[�c65�ߵv�n�/_ Ì0leٶ"Լ��Z�[�R�Puo}u��\q��ؽ�?P�즩6��S����crqz|D|^^�(_�����o���`l��S������$N��h�袢�^�X��3��T{�sK�f@]��^k�eE ��{��Cٳ�Y����u��m-|B��bo:	MD��l�+�y��]�оC{����l����$�f�IL��$�	��ށ8���D�ŒiI$����	����fS�n�8)]bD	^Z�Q껜�=��R���ԋpВ���S8hf�CQ����\�eu�ʙ[7<�q�0��iɆF9Ϩ%��wp��>���P;��m���:#� �Z�U�l��0�aD���>��篧��y�l�W%���=I�-�e�Z6���wQF���M���\�V���V/뵻�Qf��ܰ5������=g�<)~G�l��2j�*t�7��޶36��
�f��џΆ��rGl�������t��S�W��s"�����q�,�d���|��r����J��?�ߨ&��|'$�lF����|�!��7�C������,1���"�q2��Wmo7��_��Vd
z>�M�±
tI��a�5Н�;9�ɓxN�a�}���$v�ɉ�C>�HJ��&�������hQ����P�Q`0E��:�aT�8��
R�qt[΅VR�2�$��o�̪���0�
k��O��T6C�L\���E�AR���y&�R&�=F*R�H��0���aK�oG��,�a�h���Aaq|�O�\B��$�E�ɵYR�8�G�9\��ª� �u��@���T5�Oƺ6|���c��e���C0c�B9��Bf$/s3G[��t~����K�*ÒaT�L����46U)A�,G������3���6�'�Vj��a�cSR���؇���W�[����rl���� 3��>�<���н轇އλ+ޓ�ʹX�!�&{��6��x���	}�h��©��*c23�8��eO���
��N�~����/�	U��b���h�X�>����#ai���$K���I'��)�H5�G$h�Mr7��G��Zc=0�cn����]^rv;�׻W�Q�/j��n�bI-6G[�-.P>oh+6���F�QO�����_Ew{��
�U�|�\^ĘnP�jJ��B	����M�"ȴp��u5Z��g�Oͦo�h�����`���Y}�O#�)�R$�g���c���n�U�R�u�R�+\\4�/R��Ce�)����X�����VBv9_���j�M��J/���xFP�9�<��r
�b�
��&Lq�グ�I�;�
���h���]K�2��і}F4i���[�o߇!x��=������^�g̢s�B_P��� t�A�9�w��&����k���d'aZv�f'Ρ��8�p��p�T��
I��Ŷ��Y�r3����)���=�|��N�EP}۞�����u��?�p"'���dܼ>�%�{CubH����������F	����	�}#���F
�؄E�"�?���#�才v;��^�kIHS��1����3��a~��x,���N�\�(iEd���/n�e�
H�|�ӱ$�����؛�k�q�D:2����z�>df:�1��9�P|��q�B��D���]s۸�ݿb���X�s7}�O��I��|t�N���"!	1�Ъ&���]|� E��e�]�x}
/�v��jm���^��ڈf��]+m
��kp@47\?񪸸����Z�]F5��P�����גW����߿�2v_s�E�%��5�P2	N�������ܽ|��5,E͋��R_
��$�x!��EŬP�dSX6���|_.��?�_xoT�jxbZ���[s��6LH��Y�[/��EQK.PTO�!�Q�=�_|楽��kf�:��%4[$���R� �SP������j�B�����l�FԭJ�U��\
�ṟ�j�,E�l�'�{���	�$����n.�(�C9�wX���d���w�
�U�e*:
��c$��^�C��յ������Qxn�ֽ�^�s�-����p��-��"�%߁�|c:kN�S�y���+�o
�?7V{�4�m���?��p��w=T�vb�����!�GB'�^!���XqK���>AG����X�6�H:���LsF���-�l_<؁v�rc�.0;���#J��������;Q� =�C@���z�����!
�|m8\�SI�2ȟ����c}6h�m��v���
Y�Ae��tŵO��
�􈠚o)�ȉ�|�|O^�����v�%�$B"*8�bۘu�OA��E�c��yX��h�Ww�0K�*p��
�����\�5.\^v���򼤼~$���ӧw���&�W
>J���l���@��S�m��W�b^#�KL�y�8��w�4�ѫJ<e�ɱ�߯��[��3̯ƒ�C�m�P�k	����;�#範Aڣ����W1Z"��,��bƾ\3�������U�ʂ�;�KJd������G�'�T "�GƧ��>���(�\���e����7��%�����TB�?
{G8���Ѐ��(�!��^F<'cY��\!p@��Lp�G�>�՚�x���*4}E�������Y���KI���1���0����Y��߈8��p��r*�9y���[��>�]��ے�F�tN�kTO�@��-O������9���l��g�O�Q�|D��쏐��f��"P��wlmپV�pVc��a�$&0=��`u�; �|P�4�9�xK�d�~=;��L?R�>��66���q�5L)gԟb t1�"X��b�ru��K��/�.���v�_C�@!:�ZK���J՜�C�K��5[��4lo��p��0r
g{z",�����%�O��v�1�8�u���8����]R�heTđ�{��me�W�h�ӆ�$���t�Yk�WS8�,�r�p����c��wN���}��WA�I�n�h�g����@=6���sȲ�zb"#�a"�i�	!��m�z��u��a���ک���"f�wڮy]��n�S�,yN�0����E��:Ƭ{L�
b!˺���b��H�WJ_ֳ��R�4�+_��s����_J���Ѳq�k���I�4��GV4�Z-�y�Kg����:���K���$����zgI���x|Z@O�t���1��Ï��T�����nȤ�'��{��(�� O'_4��R;�9DeR
{n'�h��{wߣ�ٹ�]w�uԱ�vi�E�!0D�4*�/���j�|����	���l��.F������2Ϧ�u
v��U�}�`�R����>���k�N�z��Z:އ^$N�'<儯
翮^>/�#$Vlu��$R
��|�-��G?XT}
1I��Q�~���cU�X.9!VCN]��bC�Z}Je	�	Ut���e��9)'sj���e�8�b�EB$irr��Lޕ���������F����0g��o�\����9M��F���7���d�I�r�t�2��W_�PU9J������|�1��F�+��q�X'�h+�2<u��01^Rg����lHy{t���Qp8�������s͒զl����q�'�0z�&$z�q��g���W�x�R��T���n��G%�G3��0��k1��hVtN �49/V��v��#�͆�u���d9��n�O�[����@��;���[I��nt�>��"���9�r��]�S�X���)Ȧ���~������H,E��;�P(B&�@8|�C_�4g՞�B�c���ʵN�nr�b�|�]Ͽ�텯���5�ث�!WލPj%�Z�����DG�
�Ž��d���֌�=���;��*�:M����E��h�7흼����9�lt5���~6xOa0[̺����svb�pP5�W�T�l��8|�~‡7�����٫�oCD�a2���7��	��R�	�����n�0��z���)�k��}J�
��}�\Klh����E߽��$H��� ��|�]�M��� ��"f�t�oa�	om��y;�P��9�MB�dO�*0��@�
bg��	�
![ޓx2h(|��(C�YM>�b�"��h(�6�{�N��y}������(6~H}>����%>�oW��xc�^9kT��Ci��Q9Rf4hv,KHۼ�0?�t>;��}}�J5c�Ωa�Ʊ�^=�O��?J�ӧFv&�[%��e�]n��d�bʃ�$y��rO���qx�zg=�wY�we�f	�G����x_<X��97?�}��2��Q��D*U4�nu�
��dc��u+��nx�X�����s�"�K�D�A��||�4�y5��<
z0���)_?��T�n�0��+�J$Fey��T�
�i�^��� ȱĄ&�r�����
�ِ^$q潙7���c��e�Pٹ�D��z���`�޺#R˕\� �,7>�ݐW�'"a� ��%@+�
�q��Yr��Vथ�a�-�T����U��^�\ނF1��]
4����8Ǵ�j�Y�j4��MJ�I��)�i�5]gi3�$�������A�?��
��G���[)m�p&�q�
��n�e�l�
�I�*��Z��ȠX��Wߒ��(�V�%
�f���tv����?�.`�v��FQ����9�%��[ߟF�(���>S�&��������z�J��~�j��eR(k�|tk��������_[��yBoK��'�2ܯBֶ*p�B��DJԏ�T	��,��G��Ǩw�J3t�~}�+8���(��D��Ե�w��>�������Epc�>�Y �&n�����{��y�s߾=0��U����������Ie3A�Mh�;j[������WQ��K֗j^[0�>��7&����s�2bI���ho��X.^��]�����<�i{3�~�ϟQO��e�\-��%���8�z�ݷ�k��;&O�L~�{$?�=J08�CF��K�)��<�1�k�R];����_�֓hG!.P���-�[�K"/����<m�ಇ�=�`���Zmo�8��_1-���r����^�8[nR���l`�ms#�>�J�k��wH��(�/ur�|�aj�8�p��J�]�X
6�I���p9�Н	>g�>�r�E���(-���	�4��\%��%��TR��S~OELC/�����D.#
h�jrF$$�1U�&<�C`1�S��a&,�~��98h�|��Ii�!(��%R����o�]��4�	���IpGc:�I��#�JCT��f�75e�'���j��q�)��K�Hy1>3��l]t>|JY��*6��2��D�|I�u�Q1��[5�������z"��O��JT���X�����1]�D�J˱��`�֎IuY���U1au�+*�����T�6�������7��7c�Tx-_�ty,U�NPH�E���lNO�$��ʡN�Y�{�c���"��s"��S_?��T�0d�>c���Cj�?q��2�4��nD�/a!�=�i�����Xqc��&\@3���=Ư��M^*1�ZY���j�V
�q\'� ��s?�ы����Bv�M'7�$�����������#+@V�3%!ժ�xY�TБD3�m��N�'�.���pSЪL9 ����7�ba'�&��]k�jw�m�|8����k���Q��b>P��K��B��L��{G�
�e<�Y�fȘFY�[pxǙ���m���1�3A'
�*G���Nj3[���hgE� �1i�@�!H�B�v/�pz
����+m�������j��Y�Y���[��.[8,�|����O���W���`yg�������n�v�I����H��nU�\
��ˋӋ��̨h)�Y*u1�J�Sa�h���p����)����#���o��k�H������û����1�W����
��Dl#�#c��AP�{!8�́A*
���]�K�"3C�0
�a��އ������"A��i�4q{à���K 沂�d5*�1b����V��\���3��S:si}(�|��_��{��Wܩqm`�eI��RSی0��5�pS����Tx%l2FRm�>�0'�I׸����A5��;���K�~�x�[>��p��?D�}�SJPhЏ��h�>3s�.h5sTp���C�,"D:��N�{�1i�q�d�[�#������{쵬�S�w���&?�r�M^3�)�Sdh���٩�c2�A�b�/OMyJ��y�J�Ȝ�V�U=n���;��u�/�'fi3R_��qI�5��8"��>݁�4�q:U��"�E#)�[g��i#*��.T��e,h�O�]��"�	r�C��k��P�+�+�g雸�9���SփU�\�\eÛ�t�@O!��v-}v�]ϟ5(Q+�2�����c	�ui���^��+�ʈZ�������E�s䱓q�<�gS��W^l�5�![�"5X�!���>f�c�q��GZ|��Gs#�#A�؛� �e�
�>b'�u/6���{"44���3tVR�'�Dr��aCU�^��e0p�\T.��U|�ؘ����#�^k�`);�7��5�߃?�%��{-Gi��<�Ә�r��(_�����v;$ymD��mq[��q�1�4N� @.:I�z��UI����t���54�Ә�7�2J�j��sj[�+4<cT][!9uO�H�g$
t$�l��9ڮ�v�v�Mc���q���@�jV��ՆՔ��A����L��ڮ�,`;�u��G���ά��#�VU,��;ҋl�Xٺ.�s-b��s�9Zq��4\��d���B�^�|O����V�/��e��N��3�N�5w;�����<��/��l�;��/��s���q#�����\��&�;t����A^�Zi��nI&j�>��S��-��S�G�ƪ���Wڱyr[�b+T����2F������l���|�͟H�R7�����w}#����o�*��y'���ꜷ�[{h֒�bP;d	Jb���������o���Fi��I[�$U
R=�lz�����&��iM�7��޵�~��Dg�{n��P�R��6��ɧD��p��b�9����``�/��/�������5#��Yms�6��_�2s;g�v��uI39۝x�6�ع�~�@$$�&	%�7���Y��(J��4��2�#��g�軋緿^_�w�?��F�-r��]�U��r�Yv����g/�m&�y�U!낽�m�����<g�aZ�"���`j�l&
3�։`�J�׹Z]��MW���\�Ʈr�r��d6�%�dS1���L�,�(����_n.�L�"��d��(<��X�Y�qm����?�b�|nY
	����V&�$<�圩�j
�̳m����`!ŲR�������Lm6N�J���	ԔV�<$�b|��8NO�)��,�CE:j��O�T��
�z��y�dB@�L��8H(.bLj��cb+���T�x�[a���8L���ř�`�(���p�ًx0���|�E��y0��:��R��\CZ&tC��N�}h���u
�b���?��T�+w�4��j9d�LSQ�a�X ސ�h��\����I�B�᥁]�;fOS쇹��!{)
'�n�I��t��K�`V�o����<#�a�Q.�s
e�s���%9���_�������b#��o9a�-�]{țC��4�y䖞7�V�lL�5��=;[���κ(�L�	���'�\�����«������;m��l���=�|��D�.�.�����˔�����'Ϳc26���j�\D͉p����M�/�:O���=�:��6J��<JV�'CZ��n��"Uy��W��p�T���e&�M�A�K�+�L����kw�2\H�S9Q��C���w�c��4ی2�Q��4�d�/��2��Lig����`��JQ�����
)[0Z㧱�6)�交�s�=}_���X���؃�->�`�LHxV��%�;L��dw�0$?զ[,���x{I��,3:��V~3qme��^Bw�`�DLW
JԺ.ynb–��Q���Cr��=`{�S
D�0X���":��ٶ����ِ�5�c&M;w�ĸ��]�NA�ww�O�E˻�dG�o
�đL��-g0���"l�T��Pgu�`��+�q��ԥ
�Ӕ]�#�h��@bĽ�u&{G1�P�2|�T���8񔧨;�ކmfme� iJ(�+5ϛt�1j�WM��G�ұ�ٛC����hqΦ�
�v�t��=���)��+Z?�#YV�evU��-��S�G��<�q���=ֈ��i�n?��Q�/R¸{)v�%t ā�90t��1���R���k�[���Мe�}�osLx�	_%O���;lI�v����_�XҀ�3��(�P�d��Y:y'���6Y��E���J��֭����i�`�s��;Pz�|=��a��F��Fv��ǎ�-P���#���>��=��~[s��P6�w��g�bS-��9�ɥ�〜5��}��*��:(Ԍ=K�\#�Z��
�Y��H���b���D3���@��V�]U�����?]Ǘ��o8nWƁ��	q���+�sL�@Ew�#���z�P��R��˩�!�1˻I�ګ�]�n<�Qm����P?��"��
�M��&�w��ט��L,�ռ4��즱�+["�4���g�7����s��>��MZ����2Zþ��83���?c�+�b�R�Gv���Aa?���e�`7�	TpP�%B[��U��dN����5�Ʉ��i-��D��$�{���g��h��\�j�͎{# 7a0gҺ{�h��Q\��e���
!�z?\8níb��p��s �ul�2�Z��L�8���r�k18Mu|*rؑ�5�SSO�s����Z`<�r=���-����`�n�t�@H�4�����3+�c�`�ӕP��ė�魩~�<�#���x��
�.s>�	�u[�M݉�Lo����:�������z�"�Y��ȳ�w��-~��d1.��(X9�k��8<Zq�1�3�.�m�!�w^�,u�H
;�b�<N5�a��ZHǦ��pK&�P_���.��!��Ae�������Kr�� E�$hS39�u�P�e�0?T�V���`m�>��pOy�,�0�j�j��{���Gg������~��{f�GTk|�&�%Z���ѐ����&��t/�}3�8�S|�{�{���;�D�=�y��"�wqy+��O$d��<�Ro{���+���S�!�
~���Ava�N�	܍ܭ��9=.���@�C��Z��.ro���6E���A{5c�FYO���
�i]+�!��
�4�I᧳GS�x�E���8(9��O�g�>�� xB�.9�R��ȫ�:3.*Mն�"�.ER�M민��y��HkX��"��X�#��
��t�����WU��h�l˴�+"e�
�9q��O���v�ۗa����<��0��r=L�=�޻���ۯɝ�p����瑫��_��K�ǚIw�^���;ˆˏಯW��a��L֏�k��[��t�؃�7?������3��\��v*���^UV��ٵ�j!S��
��y�n���@�ϪV�}�A�Zà��l�eO����Z��0~W����p1ƣ7	:����m77(��FR�om��[��W
:e]�`�&G{�@/�&kO�ua��(��U ^-�O1�Xc�p��sd�?�PK罿]�CV������#֤��b�򘥛�l�+)�?�9�&��K�<�(�IA��	��������
�aQ� ����d�ͶGNG�T$�b&t����o���sK�r�2ֱK}U�~��d�V���Ҫ�A��^��XE�bfjrk�y��!�o{c�����<�«!�/�Rl�"�|�E��%��[ms�6��_�t:'�Q�-_ϱ��3���j��s�H�™"x$(ŭ��owI�8qz���I)��],v�}v,��R\���!��~d�9g��R.D�`G��˲��,cԱb%�x���xo��Zq&gL�E�*Y�	g�L9���r�˜�lz�b����Y�n3�2����<V,�s6��i&�<e"������|s��D��{��H��w{�;v�axl^�T�Y��gՐ��8y���0�;����x��xr��x{Om�=�沲�@�)�5��
��z1����Q;8��ߛ�y��p�K��@#K<d�1- Yb������c}?dO٠�08ػ�*?�z�C{�k������m6�)�2��^�M��P�J�h18M%~'/t6𭳛=���-zw�2>�F�G'E`�������]��x�cL�;#��$��H��x��#���z�y�
+�k�^'Y�JLE&�-D��Kd�KL��x����y��@`��s�Y5�+��عT�sp"�"�o�>
���S�,���
�9� ]�L&�:�#Kd7X]@���D���i��e����u��0��_����D�O��ۖ�}��%��g�'�=6>J�
d�C݁8<'�w#J��gw*�~/��:��'8&ƕ��;�:�Q'�g�_!3��_@K��R%�-=2��3��c�ݵd/u˽����[��<V��="Ϥq���Sfd�צMd^)"�u��r���D&51Ճ��#���G�����R�w��N�������Ӄ&E����s�ű�����46p46~;�7Oz�K���CO��kdx�[X�Nۭܰ#llY�v��>a90Ԟ���M�u�M�Y49����.����-��;|��;$�4coX��<+tn\�7�Uu	���2�@�$��
���K��\	��B�4�9��$t�W�>�,Q��К�zY���|:�'s����M#��(+u�h��,��A6(�����RĘ�Ws���nt�r�����̕�e���#��y\��i�3R5�Wz �KH�/�R������Vb�Lć��;c�4&��:K���!s�3��$�t�j$�2C��b����{t�
�#�+k�B߉����ϣ т8
ۀ�TĪ+��r���kۛ��+;A��%/P�?1�f)����M8ݴ�Y�8L��l*?��#;��M"��=���ZטsP���}%b�J��@o���fn�]�NT�Y���y���(���
�	����t�;
�@j�L��<��AG�x�¬�� �r�Uy��;���Q��n�&F�ve6'~P^�}H�x]��xФ�_5�T�x?�[o����T�vO���G8~�����،r[��k���f<9��Tj��t�����
C���9Ou�Lc3���Tw��c�$��ĵP)���X�:����������2 ��Nd����CH;٭���:�z����8g������a"܆�z�ݵ���\��p4[�KX��0�sȐ�ǖR{�ׯ�b�L�)�PO��!���+�Kj���gFlZC��3���e`��`�&]%r^{�hB�"�y�[.�7B�QqQ�t-�&�*��Y\Zf@����I�(�,�
�I�3��#;�$�S�ϗ��a%-�e�դЙT�/���S��X0>U,��@A�^�O9�>�F���`]<3��������S�?��%�N��Qn��Z����r/0$u'�;*�k�I�����O(P4'��PS"��?��	���|d���2v^�����+��j���%Dc�u�ɗ�i�$�h�	Pɳ�kp̉X�w0E,
�;�)��$P��l�q����콏R,�]��>�����@�I��WU�j:&Puh���A�T,�Rkhĕ�3�5X=�n�q��dÃ=��pˉ9�[�]�"�'��O��1�hX?0{.��āp<�|jl�ܳB�倨��)��Y\gʬq�o�U�U�Sҁ6N����*��z�N��}z����̨c��M���h�S� `b���_]=�g�a���G��>�c��s	}d���8�Z��`�X��>�w��
��Vhٯ ���9��l����ݹ'���9
���A5G�[!��&H�j��g�gB#^HU�1<7��93^mR���b�θ�Ž&"n��'fф�Kb�eDZ'KԈ����Ѧ��}��2Nӗ�����C��-8L�`�Y��-�)�aF��M�r���(/D9�|��:�k:"E�.��+���j���~����L�>�=N2��D9��?
�ԎQ����AŅ�&*���ö�`��qs�L�+
bE3�Y}��I���Ni����1�����/`{�������1+��?�!(>��w��H���ݧ�\�w�g���Q��˒sK�]-ߜ9��(2���l�C�J�ˏ{{z�4	}~�Ӊh[��=�8?rb3#�#I�Ԩэ���;�mK�W��ڏ(ԝ�����s�����9�u�{��.�4�`[�1jiÞ�F��0��
}��O���9�h����\��w<.kR���qƚ6��ˢO�pO�����/Z�,i���ar�������6K�6~��̓�W�?S:��+g�<٣nd9֏�)��V��+�a����d�������T����-�.W:�k�ܤlJ�6KNN�!/���56ؐ)}=wJ�=���e�ǠH��%�b
+x�U���M|~
�Ԋ��?*�wQ!��`(�$�^/�9C�g�x�F�<&�'u�%J�-��x�*���,�2������af1d(��C_��ɿN���7� OKY��=����,c>f����Tz����dH���#�����e3�ы�����	B�8�2Qm-	��O��J�J�N���-�%�.�i��P]H��[�>ͫ�����<ί���\KՑ �Y
?��޺��p�Md-�G>6�l�k�7w8�Dڬ��A��\�7~����S�V����9���0��-~�{ߔM#c�u�6�S_me2u���;0v��堹��#Rs�#�Y�(::^?��G6%O�CϨ@#�qdf��B�j^s�/�{��(7��f�œP��^����p��އ}yKaމm�$R�f���	`���
C�~��HfL��(��1�␍�VS�Nj�Լ��;]?=���#��ž�$����cklb|s&VERٛ�j\L�XE�`\y���7r{�\��/���-
YԙWfiT�\����t�Z7#��,(�����qG<�ӑ��ݝ^0��x����;E�`v[�B�#j����V(���}�:�vz�F?�u�t�=�(ۀ�P�ήQ�7�g���*���SvG61��Pߋ\�|��:|*�q�ƻG���1�=�#`��E��|��HH+�	(1Q.�T�w�bMI�"�e�*:�0C׈�چ\�~�Z�+�_
��a&DE�3]�n#��vܦ5��es�M>
�6�;^7"Ujӷ�`���
���Pqe�땰�?�z��4\Z�>��	�q�
]�BP�^���u�&�"�[�$����l�Dp�]p��f{�	��Z���k��s�ڟO�Ibl��nD��O�0�X�v8葘���8�Ob̺0�Du��� �M�H���C�����m�,2�i�@�ئe&H��t��'�h��bS�kcG�(��7�����p�M�֩�ٽ��:1��7��G
�tV!dM߉�=H�a��
�����N��燄���Uv[2��2	���Vx����Nf�ޯ�����Ѕ
��ĝH"rc
��SȢ7������}�"�(�L���H{��[a���p;� ?���y�A���q�
��ҭ�}N�?�[��`�C������� $��\ق�f�[n�E?�/�Z�Z�sAp����u��$�ɏC�+���C��ᗖ�d0�O��!l|��F�J{��Á֧�[��	����\_O�8�O�=��Ҕ{e9$h�Z�A��]�	��%�F�I.Ia���f�8�;u(�p�ؿό�3�?�U�_x�..]Ek��/�a`\�M^X�9>�g)9���!�$3�zF��ޥ�#�x7%���ux٫#�e�?C~�$I�Ko3���I���d���M��-�q�SXe6���t��ջ��4�����B�'�<]�b�����5�Gx=!~�0�״�O3�m5��`�����D7�q��UUa���$�B,��3R��/�b�3�Φ��p6�L�)-V:�teI�̴�{p�� �v��25z�z
�2vS3o
�Bg��<9���>�w���#��3�g6$@I�n� &��}ܷ~��q�8ނ}�0jS���Rq��r�: {�����䏔�U�Y��r�.���͖a�%�Y�9������y*}.�	
zw@Q���ׅ˳�-��;�����~���o�'<6��^_�n����D]F��Q�ls.�����G7�yQR�||L���b0�q~4������^���B�%;����?f�8�x��	���v<�!�`�>X6S�3[�y?&^�ÏAzb�5�4��6L�n��v��oG��y�W[{R�������^���ߦ㊀Q��xsY1m�1�2�G#�i;=uHx��+g�����n����v�	s~<=����uL�t@]J��3Q:���Ap�;8��oh�ˤҰ
;ջ	z��ͽ��~o��M?Cޓ��_�}�h�E��{�՞�Ҩt	����q����8$�Aq�G�]��vG#��ŵ�P�Q;��?Y�V��*dx���ubbH8d�A�M���
�C#H^!@�7	}=��1V��}�Q�,����y&$a�	.�ޒ���
�H*)�žT�-�"��$SZ]�#c�@�I ���b�0����4��QN�u͎Ɫ�X�S�}������l�>��b��DV˵���s�hE�ܬx%`�Cg�(�
�/+�b
�Bljj>�_^�Z3_��ª�d���*k"\�����6�Q�c��S��?-�&�����$����ŕ���_%��E�y�h_���PL�.���5�VNi�����l�eŠ����Q$Ue�m
�1��&��@J��.����fFBl���#�U3�IP�i��~R�tin9I4h�5�6���۲�=�6�9�3��N����'}��~�i�ׄH�F���R7XԾM�\�32�������D��6��?#QP�?��\�X�q������u@�G� �j��Z��E��򖑆)�*�	�pн����|\����T����Rn�����Q����N���9��mLCФNS��qR"ޒ������?��~#�����F��X/��aI5̀D��u��ˑ��d���X<��uzz��/GdPl�N�=�k��4rr"p�#��t�0�H�-��^� ���
@[ٜ-�o�C:g��;sj����'�
�
�t�c:[��s��3�!�;��	��A��ҷ�q��6yJA �x�|ƾ�6���
�����91���`�"Y��X� R�`-6F9�&A����[��Ú���뽪�)���U8�s�I�Kp�>(���_�/��@�V8*���F�	�'^�9%,}���/��L��]��)_}q>�'k+�g�NA��c��Ԟ����\�|J��l��
*L�_�D����]�o7�޿b���:;�RԱ�Ĉk���+{I�ە�����<�&W+��-��D�!9�������+�o��FS9.#2�1i�%FH��V����Y��C�Bw�i2�(J�����I�j'gϤ�Z'�v:8S�����%��F4�|�47rcӞ����'u
p�e3�E�G=��]	�`�*B�;��Q�Opl[�-�f��Vc�\]I
q�ܧ�F��7���L~l��؊��n�8�&�4~7o༢ͭ�Y)n"�k�yV3Z��vE󢦮�h�19��v-��u4� g])�0K�+�fU��I��a��~v
�	����Fe� ;\�h���[w-��C%��u�"�6�1~/C�'�ք���X��]q�>�5q�=ʼ=��!�Z�C��_\��e�4d]�ѓ�eHNT"�X����m��g���^�Ύ���:�WP���*_�ஹ���э�F���2[WmV%=Hz�F��	��KL�a��Z	8	�C�	��)�#3�S��Gy��&��܆�YL��kLj�S.�Œ)�]�L�Uٴ�On�8���2�Xz$��L��:�� ��WJ'�30E��{�Ѡ1:f�n��Xiׯtx�n��kWp]�~<m:mp +f�5�lH��$z0`|{V��X�Dj�+���6��L����˧�;����:����p8��e��f�4_.��0u���ٙ���[�}ɾ-1y*�G�Fn*����Rf^�7 �����"]�/�����rq��� �[��_�l����RF�H}�-}��>bz�n��p��~df�	�L��La����71 @���=÷���N��_bX�e�����~Q��Hz��W'�UE��RLT^|�� ����7vFY_9ws��G���8%���ó5Ltį!y�Q���'L?�����^�uۇ�81�ͽ�^Kў��X�z0y0p
�A�#�&�n6������]v������Ia8�v-uR�Ƅ�C;F�U5՟�@O��r9��S,:g1Ŧj��$M���Y?_o;bA�@�E��_��e��򶼥�Y����.��!���'b���i-�^�}u�g�$�'H�ol%���e��h��?c�"ږ �[��� ~�[o��h��[��zM�f�z�ü�"<�F���A����U}�6�e-H�-��]�2���|<���|�%]��Tv�Ъ7Y���<w[Es�wifS��1P�؝��@��P%�uZ�(S�U=�X'��Qإ!Z�t��z4�Z>�=�� ,vry[.�i��.�GUry򤊂8W�L��of)�O�/p��@cZ,
N3f��3�z)������ �=K�jj��À>����v���e�8�V�g��vwܯǾ�\�k�8�<��^��k�X�k$n�dG�d�7��5��G*��Fc2�T���`�-�#��K��U�Q؝�]�1�*���׹��>5j���\�ZUM�_�zpOjR2�؄_�)\-���f�G-��� ��%n�Ό*Q,%��˞3��*�o�
�e��3�[Rrt�4�U4
WS�O�iE��ܺ��$1v��W�$pH<�-B��W�
�ڮ\�+�x�ۚٿ���x"ܕ2���s���]%b53;Ay����������LF@�
X
7*AvJ2��=������Я��ʳ&�)��r��u���oX�}����/RHi˜�s?�ݿ���q�n8��e�F�/8�p����S�1���'���g%�ZVy�������Q�c�_�S"��I	��0�Z�8GJ�L~*�5P���6�6~�g����4ma�3��y/�B��_g���O-Y�n��I7V\���ԹK�e�5
��E{�|9�����|���
�ѭ�޵�:~BZ\'x3;H�i�T���ċ�[\�Ez�`0w ��uZ�~�`{b��űe_0�iB겑�����+ �]Wt�'o��B�LB���F�B\*3
�…��K��qf�|!��g/����E1��Q�3�t�F��V,��8藸�L����k����N�^0�g�4Ǖ$���ðP����!3X�I(G5��Q���O���`VLH~�+��������XU���`��n��~�D�z�p�h�+���n� A����%K�k�{F�_�T�W�4N��`|CU�11^��U^Is�=�b�,d��q낡�o#'߾%/�|���аS�}�ꚡȼ
,�&Zb{����&>?�hT�@��$7	��8��F�-oi�h*m�f䖜����5^1vʚ�3����C_\1\;��5����$a��Cr�ڇ�}(c���B�C�c9������p�����S4*F�鼤3��I��I�%3AkJ�}�/x_��p,�7&��G�V90��s;��fU�w�H��D�6mw���\%\@�c{��;HU�u�,h!czI���Q49�1�I�bttu����0�
���X�N8�ϲ$ )�s�n��);Ė���ᧅQt	:��m�;sr5mWIA��F.m�}������|nD3��^�;��kI��Ѿ)xB��pط�$���>#0Qx����H(����B1z5<B�C6600��/�l��	�.�%�t��%�쪠`)��W�G�PE��Ћ�7!PPH��4��V0mcc؟�Q��Zc�.#�#�ŏ�d�ͨH��.o�� A_9ѹ���.3���wEGUa�F�������#����<f��H��B�b��ő����GYΊ{�hi�����|�q�)Z%gj�Dx�&����d�K��;2�'p�ʚ�w�X��6H<��3�=[�U.���^���1�h�0���!R�Sl����`vM=��mD�s��3E;���J��;۰�� �_���''/7D?~@��o($��{E�����j�$j�ٱC%��vz��2������a=���J|c9J�4"5���8?>ȅ��6CY�l�i&�P�U�F�'Z%�l6~h�`�z��
�w��1tT�+
P���clMI=p�}�RHIx(����t��;Ы_4�4Z��ػC�)��&�i���8�J{(h���]JN�i���"��^��t�[�;�>
���5>m2�}�	��gb�=�Mɪ�����
�@3J?޻���B��Ӿ'����&t�FZK�_<����1i� �X������l�t�W�`�X�e����g����ax����잕��M�B����vZ'G�罃��G���n����]%ƀ�A�����<�HU%
��YY��)���B
����+�b]��Yi�T����X}Ҩ�U��6��J (s�%��t:7�dX����?�D���(U8�
�*���N�b�(�S Ϊ&@�:��W�앴�Z�V��k��Z�)��SV�
D/�(��˕�q��Q�>�2�O-p�bUH�K��,�Xb줽�;i��;>9����z��G
P���E>[�
�3�I͵:��r$=XZ�C@`��+]d
b8W1��]C��Q!�g���w��+˵��|�:��,�ϝ�(�kɓ˴P�:E�t>��P2Z���O��\=a���1�?�ŋ�}�|��+�oha󋙽��&�o�*�m��D<G!^&��/�9L' @�n��z�����V��Łd�	�.p��$�D>HL|5�����b�Fp"p��G��r��%�l Yh��e��߯o���Q~��߄AS�(�K:�/n]'#����d1a����D�@����0��ݙ��X���/��O��c�Д���׸0�0GB�'$M �%���hc!��L)�=4���/&��ۿ�!�/�@�co7e�1a�v6�hs�n�2����|a�u�Z�C�����=�`�7G���>�b��j
��?vw��ϟ~j�;�� ��;�sz�E�t!��/Fx���[Vr�M���C���/���y��4 
�M�
�������e$�͟��M�߀�X�p��n'sbf�lYCyIz�0<Ha��Œ�׼�G��G/�)R�_�<����9���Λ;��\��ߍ�p}�
�4
E!iQ�w���pKOT��*��B
P6�`k�E�f������e���,��T��h���FE,�/BDA�I�������ȓ�Z��7��#T%;G�����:�x�qh�
��#��h�����ڦ�~��usA��1ng���-�"�+�R��XbqK�N �Ƣ�5�̡@�p[�@�J�L8tȩ ��6o�*E�Y躽gt/�F���57H�IH昕�҅��*#�Ʀ0��l�לa)�� �?�L6�TG*�a����%�^ݾ%6�9oV<8iw�D-a�w�����$���r�C��w�~��x�[F:C=蝵�'�w'�^_|"nw�'�!���fPf�JE��r�SQF�nM����
���L44���2��<{�pJ�a�n����U̔G
gD��ro{�
>��bX�9�� �U\�q���6I��"�:o�������]_�9�O1�N�U>@�鎲�w�v�V��(-V�UU�w���'q����K[&q'����j��lWŦZ•��L�Z�^��]���)��! ��\4�E`���>2~��a����
m8j����\|�����OBz����	r��
Z�Vx��:��<�%�ga��{&OMǏ`� ;����Y�T��ݻr�l&�n���>���C]plCvb����l�=��٤J��#����(��5�	2���=�|�2\s:l��J�z�I������u���u�7#��^���'�ݟ���O����R��y֌`�9�)�!���/��s#����'�
}%����N�l��Y��N�ٯ��eD���7&a~�f��U�;K�g]�>�Xּ���y�S�ޫo�{�0ۦo�pq�<����:���zu�q������|���S�D	S!��x�4�Jw�(�����v�\(��o>nD��?��
���ĺ�^���jW��+��
F�@�.b�k��)�͒}�!�hY��s]�����Ғ��H��@��yXY�G��2����]�!mOFa��@`�����I�"���ׯY�p�8�n��t�+����U��m+�u�TG7��X�uI�J���b�l"��������
����
���Y2}����Tѳ�`~7sgV܉u~���>�5ad�@�D�Cu�?�����	K��"�2��ʼH�q�4���޳��O}g�si
k��1��:���jN������dZ.��w�}�8L�`�*v��d�W:�����gd8��0�W�(�@D�Q�4�oF�f�%��>9
�=��҉�)h9���<#0Y2�/�޾,i��kh�w�n�<tWو]*v)ee�s�8�1���ט8\�yF��bݍ�<��'�"�5hV�%��z�I0���.`j����V�W��_o��E��Tch��u`�̜��|մ�^�t�av�POy^�sޫq�t�Kt��Z���t/N�+�#�~��;5]'�󫂔?�
0���鹢f�]��9K��U����Ͷs���x9������v��萺:�vbX�����/ډU��=얇�N�'��E;P��Jl<��S0��c�w������1�ē\�ܷeɍM���� (���3IN9�P�M��&�"��̵/�`�����c��|R�'�+��M�S{���q���x��l�<7��1�e��r,h��⡟^.)]<
��Hj�NA���l�`?,j<F�2;.a�E�/x}L)��#_��x�U�g�)�j�z�Wc{6��]1��+qeՔ%V��R�j-uɨ��
�J\�k�Il�$Z:Rj�l~�G�%��Px�����-�c��е�b]4�4�!c��@�)�RVu����!�
X ѲJb"��I��/�m[��0�s����w�}����Ҽ�෦�K��L�k
[_B#M�D�;�c֍zac3cS�jr�M���V�U�p�c� �����ڨ�����Y����;�r��v��L%��IQ�Ǧ�*�T$Nq�-ڊ5�r5�&��F��H0u#��<�_������ .}�,3�!��>�����?��
G�!#c�{{g�C<��K,(�F݋=B�|&)q�4��</%rh�--���g�PD�DH��)w��eO�a��9$<�Sϊ��#
Fr鱋�p[�H��Ɉ��#vV�+���#��w^�e�x��Glx^rƑ�Y�R�X,��aqʼn�d3��eC�x2.��M����B�"L#>K��9 ��Q�ƌ4O|r�ȱ��2��<�6�@A̢'��/�S̈9�1ш�y���'�%vJ(��kY
-�@�c*�Cb3�4I�p�9#�v�wwM��ce�KeoO��_��1C2�Z��ӽ�����MՊeQGrX��D� ��~���!9:>>$�z��Tm�E�(��w���M��Q�D,�����@)V��<5�9�p��q�ѴA�S��ry�-
������4q�QU7<�� ��P�
��*�o�X�>,��T<k@���o���yV�*V�v"JG�F3�ĕ��o����'`'B���|1�ab�U ��f����y\���OP���>��RI����.�*v$����W�ർbt����#�z�����c���v�*����7�2B�l:��X�w���c�5$wZ���-�p�9 A0z��5�>�˂�� #�>�H屍����Nc�a\N�_��P��G����:�������,���I��_Z<�gO1����Ėh���b�$�Xn��G
�h
X�R�(K*�c�t��#(FM~�t�q�<��U1l��(xG�
="�t`-���m�؄��QY��S�
�Q"Co��$T�щ��Jg�{1���5<��o
��=��cqy�=��rO���P��$b�fh��z�S��y�Gb͟���"u�(b�t���F���1����������T��¢���h�J���Q��h[k(;=$��p����ih�T�(��s4ܯ�R�9�v�C;Aj:dD��k���ɴ��K]�0z�σķY�X��-��ŻꆙL�� �w�u�
-�Ml�Æ��Pٿ�V>~,�@qg�fS� ���x����7���>��Kty��4�y-��#�A>��V����<�UHۨ�Mtj����������a��E����]^���S��L��!�J��D,dT�~��ʺ�BZ^+�� Ǒ屡\��+Z��I����
�`_��un����*�D�>yM6B�1�9�v�2[�uA����L��=�<曂��'�BM��	3��֊C��a���$�j�9�2�F`%�C��#��l2�C�
(�,�7�`&J��x>*�ŔF2���$+
,����Y�WZ�B�|Y7-Mn���s,pwˀk'�#{�@�j��xϊx���.�4�X8)�H�bm���oME��F���J�q.f:Ic��t�s�j'!G1B�]�s��	(������#bZ�	�&~S%��:d
��df�m��Ra��b�̎͗lE���B���LZ��kh���kβ��"�.���\�Èk@x�=�[�mA�� �b��~t�5����i䌭Mlq����$�^�x���+����N�k`o��o{���n��g^��c�i��α{�'��������r�m�����۷n�p�Q��k��f{Do>��q5���nUy{���7����Wc�f4z���Qg�i�|���q�~*;�v��^��֙|8��]f��v�r�m^�z���x�������5��hx��]���t�n��~:i�>$�IW��Q�6�k���sb�^�~�4M��z�w9CzԳ����N?���|����K��1�}�w&��6���!m��>Zf�}�I����*����s����,#���
R��4ӝ��Oz��(�-iMڣ�M%\�d;GK%���U����^��-�޿��Acs�P�5�)H��{s��d�ק�k�.��I�m+��x��e��j��Π��&���j
 �k�<cI�yeI������3��>h]-�3�r�{7S�=���G[��0�a���U
�N>��أ��p��۱�oN���~���i��}�wg��ߥ�۴��#,P�P��K�G�{?������=��un��J�W�𼇂��v՝��w������0���%��Д�g��#����\M��aO�o�Ҕ�Q���Qi�w���W<��v�����E�͎?O�I��t�o�kyp��f0��6:r'׵���}�6���cPZ�?���/��O��7�wmޝ�|���v�׋��Ft�3	^�B�S�5-���;_�lϥT��m�m:�o7��
�aV��$�����#��T��2GDf�GX�	ge�Nș˟���8>/A5lF�k��\j�t��S�l�9�%�x,���V󏁆���^,��Jd��y�[�D)t�W��C�I@+�õ� b���8/]����ښ��KO��|ͳ��}�A���oH��FS��2,��;y����޳
����ͼ��֫�5������z;s�%��5T[���ApĨ�����aS��)�<��.�������cbF�8bp)�SL�n���E^�PB ��E(q�t�#����D>�#� �P(kRE(��qo��yKS�B#�y�j�p�?j���6�ἡ�L8�_�kh�H�j�����‰�\��C����ty|	��i֭2(΅M��J��dD��4܃hl���� �vQ�����@�d��9�ŀ�H�<]���%�OS�]�H�bj�@g�U�mvr���u�����h}�A�������e�ӓ�������K�5OW}-.`���ĂWkZ�c�/	d颺���0��f,E�Z�M+�Řo�VI51	_�AR�1lC#0z0L��m�C��q�2m��`�5TM:��9�#y\^E��h^�
�t,������i1�K���t�V�iD}#Q|V	�3�ouF�C䣔��Rk>�nD$oo�.n��?"A���w{���sK�:�aj���j($���Q�~����d632���
f�"a��2�|V �1��� "A�?�M�S��K�&��3�.�xor�ƷU.�0�#�O��� f
�dz���`+���
(T��w�S�pMӤ,���|a�0�5r)2����dA�_h�r4���Ҷd���W�<*����aܨT��iy$��ce�����|���-��-T���a����/��a�`O�{�B�C̽��C[PP$ffݸA�*�8��K�33RW�"������[$"�e�Ut]A�I��9g��̉x�
EG�h�Á���ŀ�f,|��c�S��y����\F4Jɧ��ξY�0#U]�k�tV.fL‡Ue(���:/b{�26,�~"�_K�Im
���;�|�rrH�n'�NV�b�����ū��]�s=�> y �!8(��!����4]5��1�k�`Q1����L�w�wxk.�Y0]���.�m��˝9�ޚ�l�Ұ��X�E�~��pg��	C�iۡaϠ��F}���b�X۸��˰ E	�^�����2�X+-� A��d�h��6n���D$�<�w��h�����2^��b�)�)�������۪�!��m�6Hm���\�������?$�<n�7x	�C�e^V��l-D�hPlR(/�~$a"�)�)�eV�� �%��Je>D�O+�2�KB�T9&�d>O�ԀS�}�\wX��'P��j��Mϖ��C¸�8��ꨱ�(Nf}*���%�C"`�O�O$�L]���=�?VS/�
Հ��f�"�>�z$k0;4�zT�����0F�.q+�.��tI��Zi��ξ�3�w�!Jl>�R�Xp�4��T�[�
DM�+E��?U=�+X��@#`>�U$G��~���A��}�b���E&8�W�ھ�6h���I�h6s����4Jw�#P\N��1B�Wmf�}�ZZ�Z���x���4�ɕ�=�3C�n�����C�Scj[���Ȑ��Z,��e
�߄�+FZ��7�J�"���-����.��Z�e��LW-��r�ɠ�0���Y�F�0֟�b��i�5~:6�<�^�.�{�螿�{({P�y�µ)�t�Jc�A!��:��Ի"(|��eE�p�G�J18�b\��N�1�yu�;�'�L��C|-�7��m��ir�؜�6<[U�r~I?8�I-1
�o"�������\KO�@�+VODʦ%)
-��޸��I\�q�C8��;O��6$�[	s ��1�ov=;3��@�@��k�p*�[b�-F�:�mC^J�0@�@��䟟\�i���Z�5��d'�"�����R�O�	����^��g��q��=�-�*G��G���Y�=Sq�XCQ_
��=MO�P0.S6w'-2TfW})F6ľNV;����z��e�mvS�-c��p�Rcc&���Ԑ'A˂HB�g�,J�*P�2��?
�⦅�
�#�<�}H������{;C���g�:��x��qZ47���6�2�4�d��7��� �<%<��U�������G8�Ҹ�H�k�����t�n��|
��u��-O�CmJ�|�W.ɂX�3�ٰ�>}A/���o��>}e��#�5C{�
�~��C`[V�+� c�m���'<x�q�Oo@��N{�4�.؝�p
h���>\��Z8!Z�9��c�K�A���RE�6���磻.K��mP	����0�閽�	��0*j\b�0a������-m��1.���w���M(�jb'qB�|聳�wG��j_��;t�`�����$��L�l��w���6n
�a��=`���B�ۨ�7�+Lk��˾�0�?�k=��g���0i~�Z�C���i���/�48X>$�2D��ȋ�AR}��I�<Y&����'LD��Jd=�$��!���s76��<g|���K�B2I�㞎��ސ)�ReZ�3S7��l�sy���S+�`�2�l4���p��	�=dѽ��wz����VA���_���][w�6~��	m CN.��C�&N���iO�e�	�`�?ߙ�,K������k4��4�4�o1j�-^����lj�Hb�BU������zZZ/�9
)���o�H�¹�ҳ:�ɯR�2E�la'u-&V�)��5����=�S�X�*�"PeI�G�ԃQ�dw��f���璶P�<�`ٙ����NE��tF
��?�]yt��fl��Ί>��&6t���{K����#���BP��!�}x�f��sJ�-��{;���yU��aEG��	�������Ơ
t%v*����B��L���wR�+
7)�U����yx�x���b&����81j;���;���p�$��-�F,���݃G�#���٤ʵ�!bvY
�K�O�͉S3]���q���Y��<��".�
E����ɦ|��=�%�˖��.V3�JHp�5u#��7�,1�pC����_�*\J�nsO崰W���j�Aq���+��E4S
Kp;�s�YP
;����	�"A�H�L~o�Sof��3�.w6�i8���u�9f:��E3��
�*�Q�s�k��U�ω
��A��VgB"~�=~XY�a�ʳ�so6H��GV�񀗏�sr�X&�8��%8�br�R&d�S�xI�ɹ���ϮK�U��.�E�E0-x�{���ۆrP&��+�BE��>ڶ�=nlN�fQ�o߭ߌ�qc����C=�Z�8���fC�ˢ_d(�~�P7��_
����d����5�)H���.%sɜ_9�f��RS
{���*Bgdbσ#�􎊜����y��{��1���p.g=O��u����j??�]�����sɻ10��U��M��}�׍���D��`k�z�ʹ�5�J�7Ƶ?�fcd���˗��q��i��}�n75�il�_^���'��4t��_Z��BX��뗍�jkG��G�s�{�^�FV�<��{��U��SR K~��k�Y�+P\�T��#E)##��D�,�(���w^�Nvq���O�`-�M�w�S��Bq\^�>v+q(�	W���h�G0ύ(��籪ݦ��t�/+�5B�
��gߜ�Zgܭ��Z�t�<4�����_Y��4�����B@�{
O�|�4�q��K��[յ�@-���&�}��8�R�4��tD�����n�Mz�e95
l<���o�'�ؓ�@R������omj������ʘ����e������"�
�А�"�:��>��L
F�7Z}��c|Qdae�[����l��M����*|�Xn���>2�
�#����5��A�>�D��W��d������7y��b�։N]X(�\R)�]��nQ����7���AJ'����K~ۿ�E���/�7@k?���)�"���xe�\�T��J� !�$F&`o�z�U���5�S��C��l���2�)�n��Z�u���`&���O�)?0*v�H���	�����p(�ӎ�3��@ސD$@.�v~�[�����K(Uv�A�9+HfZ:�vc;��`��W'HzT[�Bu�{&�,�s�G4/\�AP���a��…��a�Z�u���D�N�xJ����3��,vQ���"75�߆��ǣ�"�
���Q��b���Ayq!�7�K)2{�H���!�_5��=X�ic�eP�N� �+NbL��t�<b���q&ƍ�n�Bt��]��ư �q�r>���S�8�3���O����j�q=i�_�Zkd��#O�HbY`�gO�-�Tގ���;{$gH���p�x[�0i�V�L�pf�PJj�h��<�nxx<�U�������GHJ5j���tW|EcŔ��d<(kJn�u5\ל]\,��lXo��]65�	r��!Į�B�K�R�?��餩ƾ�^�+����TR��fS�VS&�]
�(w��w�7�́��NEG��2�Aָ��!G
L���e�qU���(3�!�˄`����U�]���W�o�6~�_qð��"�q涓��.�Àa/ݞ�`�$�""�I�q���;�(��e���D�~}w��4�����T�����w��Ҫ]�:[)mf�2���zˋ�n��A�`+a��N�rUp�׍�r-y������}͡9�(f+f!g2�4���������_�C)j>���d�E��#|�´5ۧ ���hZ�-�v=�2���2�K����V:��˕�Y�!��&��pi��[f��)��>�)�v�ȕL*�O�x�s�j�3jͭ��ٲ�6�.qΣ=!OE���0d�Y�̪�ǘ��i�v�Ю�+͔.8.ܵϘ�Z�e�U��:��c8˚�8ZVBnRX��›w�H��a
z�?ɘ&u"a���*	v�����"e�^)�p�r�>g��k��(��d���!+��]��F|���4��7+�
}��
�!)kU��=�7�"aɉ�k�!�^:$b��ę��%;(��ck0��D	�R�S2JXb>p�XJ��$l$?Tk���[HK�w�~��jӗ���ݷ�WW��}Rn�d��L=��ŬC ���4�L�/�/�9�:����e�d\v�z���i���9�k���3�ga�ca��Fx�M�_+���'U�����B�SB��n���9�g|<J�<�A_�gȈӘ֖'�v�|�Y!:�)m43c~�Xؽ���.\p������؉�V�v����f��6u�N�z�-�%j�^�h�rf]~���>��ur�M�������~bf�iG���'c}�U��"�<c��K�AN���'վFd�v�-�<	�	/PlV��ə�o��wO�’B�t�&�e9�j{ӵ�w��rp���$`��X����?ĦGg�V�ДP߈A��L\;q���aǴt�$;��	F�`�D�6�J�@R,�sӱ�F�-�qY|�
x&�?nO��׀RLxW!��<2��q�j�㡋���$p��0Q:�����Q�G��w�8�l��ss���r�r#�F�0.p��%�3�Z���4�4ΑK�)��\8�c�З!��K��Y�C����m�Ң� h�fcW�E�A�x�f9��4/�G�a '}�q
)r��9>Y^"��H�E�,:R�ì^�I��J��
۠ϝ�_�f��o'�;��_l>��h�$�C%��™�n���мč�B���Ѐe�9j���m(��)&qo0Tz·��bz:9���F�,�ױ16��r�dVw�
�c,��i�s�U�s��2�p�ĝ�>	�E��X[o�6~��8��5"��:�lX�a���n��0�tlq�H��b{��Iɒ|I�CRG�|�BO�ცv�����~+>Z��.�]m�M�Od@�A��y<�k�� �؂0��B�r��Z=���C��?���g(���B�$��$�T-s��#��󇏿~�+.0���h�#/+�-�Z\�R�Tm���Um��u)����ę1��()���yE�uDtJ'��b�x��97�`��t
.1J��F��F�k��2.�`f��ނ�-"�kaM(�WQ2��2J���L`���� �R��񇧁E�zoԊ����&*\�Ӆ�!�R�=��V{�)�EǙ*MRI��d���WQ��qG��e\����޾�"B�&�-��+ɜN��>��v��{rlL�x�Wz��;])i#���oˠ-U���F�4�j�3�҂Um
�-� @�ޒ�n�$��B���tI(С8���&G��~ ~���K�6j�|:&���͛�޼��jzf����:�(<.|�)���h�Y�SJ�R�쑜t"&Đ?�p\	�I��y�r@#!�D*{�x��O�0
���[u�P^n�l���r�j��@!�Ii��Q�������e��wZm��f��f���m���#
���;�	�s)+�6Ԩ�z��]��V��(�i|�aCSĦ�:��=0bp'��-g|�y��8��(kS��F�l>��:ۯ��c�혨�9q����Ǩ�$��:<:2`�V�t��u��n~;��׶��=�A�!Di�(+�ȯ�	�L���H���w�V4+�;���NMh���5AXJ�͡�1M5
�
z�i�ݱ7����H)�;�V3���ɑD��Nˀ`����5�E��Т�	�&1�2m�3��A@Ӳ��^��m���$M)�8~�َ|oj7͂���ւ��J�.Ru`9��hdh��3N����s�q�x��AAƊk�V��U8vm*#��J�'��2ʑ;��b\Gdd��x�^a���7f�z;���3'��y��qk��m�=r�xi9�L��o!'�v�v;�KU��5Ē$�%s�"ڢ^ab*�W����n�艢
OxG�v���=�(Ia%l��=�_p>�&ZG	j��׃e��<�f0�J�=��3;��?��i����x_�+��v�_��i���aeCnVm�y�~M�H����9e����@X�\5�yM`�
��x�ԇ�����Eo��c�r�b��q:Y�q��fE�_�� %��&��������.�K����߁���pt��9�5���<c��%
]��iz��^�
N��K��<[_������6��w��-#�Uцi����rی3%�˕�]�`5��H��
q<��.��eE�����q�)���I��Z����s�t1�J:_��	ϖ��H�X��u��w+���Dk��Y�L5���M�N�{mך�<�w��A�B3���0=q�S.��
n�4�S�2	NP3~��Gj ����?�K{���{�.L{�'L鳗MGi&^�2�:��[@�[�g��t0I]�;�l��"���Ə��#��u%�|-u��ꃪ��ӎJ�e:�i��H�Q�,җM��,	J�yVwm�&����Fg�oF�6䛎?$��pC�Jb+������u2��<*��8�-��%S�ӫ���o��X������]�M$ih`���ł>��^�^���u��n�0��~
^z	�4
���N]�Àa���Ht%L
�vf{�)i��nw���?R�\���A�s0ج���g ��}�p�Y`�ܧ'HAHIz�
�܀���܉#p�	��{�Lv |y�Z�
� EG��Y@�vtTj��b.q��߶?���V����U �$u+�����mh	�T��-|��������J�cvSj=�g�lz��Nbk��8�n�T8��\�I��͌-m��x�)橙��	f����CUv�|����_���&e��SL�T�ˏʬ[����gRz���3	�ćb׸�QA��{4ΐ�Ш��Z��/[‰Ρ��l�L}�N���sѾk�"����7^�*�w���T]O�0|ϯXT��]i���BT��Px.>g�b��v�#��kDŽ�!Dۼٻ;�3;q��Tխ���珟��U�0-��DS�Ac�Me	>ɀF���$JS�6j��j4G�*G��Bݣ��ì���c��%�قY�L��\52!���tz|��\��DQ:�D0�,k�KfXE��j��/2�s�fb42o�U`�J�]H��=�MSUI1S��]��qK�4�Q.��q_��(s'W�gOw��ƃ��iV��0�\t`��Kf�4wp@�H
5�*?�ƾ����Wpb&�ZƋ�`�z�Wi�#U�u!�#}`oc�d��*�;��0��R6a5A��B���R=;����l��zZ/�\M�������r؁_���T�-��h<‘��6x�(2�4P*�J�����=�����m��܊���F�hI�B���;R�۱O|�N�|��a�����w6��"�������rś5%^wڛČeVpx��v�n����uY�T/Ȭ1y�i�a�p-Kq��)�"���2�p��������MUUӓ���մ��d���}�!��x�u�-�?��i���!0=0��)��LrT����x|�?N�!t�;C�͹0�8Q��Fhz�ػ���U�MXL��1����Z�o�8�_��.`9����)r�����5�$�=���h[�Ԓ�_��?$�%��޽$6���o�áOOь�[�/W�뛷Cw+�f+��y�F�jŸHЇ�@j�@��7$K�NO�WA[�j�$X�S�R�_�lC8%�oFo/bQm��<%Ȫ�P�)��i�j����8A��f��o/�"/Hrttz||���j[��,��`uYWw�:C��9]��q�b����˂Td�h�YQ~��S�4��`�K�3_�ȫ��3D�p3�_��m�\Q�t%'B�+Z��J.��l��9p��oo%^�Y���y�{��v���_j·W�D�ݰ
Ŋ=^�F�"��6r��p^�_8���yR��}J
�a�޸���\��m��5���I�"�=�Y;xY�5X
���W���T���uIx4azu��W��+2��S�$��̖���	���<���04z/��a�r+JJҊd3\s�>�
)Yֺ4����xM]�%�7���8Db�~�������14�A�E�-L�iݲ�!��K��nVB?�ݨA=�T�ޑ�,���ݸ{\��Z@�S�f��d��%NW�o���f�ƞ?��'�	βˍe��,S��&'��Q+\f+L�$�O�9�"9?5���2�-@T�W&�s��B�����:n��
Er��aFs��)�KkZ��<�1��̊`/�%ߔ��Ҫ��Z�K�H����6��i��Q��6i�9��f�p,x����JAR���}cz��1�
��S^.s^�|D�G�m�K�={G\'��jA�s�7
I .�|�ͩL�2Uv�2I��`�?ž��@gq8�+�0�%�Cэ	�����
B^���1*
����KE<khG1d���2`_d�}�~�>�և������w�GKڻ�qJ���JW/�E���¾lv���M�E�:./8^Zg�.F�(�d����.`�����l9�c�q+�:�FҴ�3$�cy�	T�P��u����:ߡz7�C��T�Ĕ\����ϡƇs
)�o���5�葶�y_b���/���5պ���f�4���:��&R��u�:	��CRH�H-�W��k}p {�a7d�='k`�}�b���61�օ.B�CX(4;,�l�8Lo�5j��r+_+Q�,~�\VA�i�ʳ�P(���'~���T�r�\�.qj�i��H�@2�(_�h��i�P��npQG�]o�ic#�R!�P��%�hV�����D��ME�jˁ�u9q����w7���!d8Eϖv�)K(Z-��
�QʺY��Д)�n��p
���H뇆�}K��)��=^ѻ���Z�Z�$
��?����R���#p��W�Ю��(�[I���%.ps�D����?vmbw�h}d�� �,���l�Rp��y�.���}A�x��� m��`$if}�a�z,,��ˋp9`��	��SӁ�x�A�O�0�}z�>��\��pV����ڃq��Q?��!)]V+t�ou{5����L�6;��iC�ߗ���@�ުo�y��N4o����t�@�+�n@W��rY՞f����9	F�l�6ht���P��G�tF�Y?���k��`u6�ai�*z6�Z㧝S�-~����6Tۙ�;?G�7����z7T6��%O
�P�c�W!�j�"�/�FhM�}���Ul#�!�Qg���j��_�0�F'1c5�Ӊf�V�<)A��@y=j�p9=*åڷ>��z��Л!:(ȥ��<�6��Q ;qn��J�Y�G8/�7	G/+_9�C���7�θC��^Y�<Dy�M�5H�>Qy�nC�Go?aY}B�]�#�޶:����-�Ξ���6z]�;�G�^3[��*	z�]�}�}^ƇA����k����9ק��G�y4�C����
d(��}y�G���~��{T����S-ߗ���1Xli��-sW��=�G���x�/e��������2��507�}���f�V=R��lRaY5��������z@p^�g�w�l]F�6��(����
�qL��ߣɝ�n׳kȼ��`;m��ڂ(€�v�!^�A�T]%�
��Ld{��1�~^a.�f�~�e�B�68?�i-�tLhd�b���{|���WF_&w���w�Y�#{�
m�mݤq�WI���y{�9���M���]_\GkL���]-�����٢�WHTRY}���.2:��
�i�+����s����}�u�ܵ�n(�,�p��S�*p�N�0&��je^�F��N�<C����g��7^��n�΍��a?�k��p��Ք��}b�l�+�*KfHIy��{1+���ȋG�R"7�E��,0+6�Ø6��@8�Y���n�@�J��-�`���P?�=���)�,����*jd{�c�\\��ZD�-E���_�u�:>��
�{�n��)�
s�{BT��gʌ�F����mn+�	�B�H����{��N~Y���J�Q���ތw)��k�s�ƻ{�����`��&��*��sJ��������CAUx�+��\�s�6����DT*�I�>�Ե{��^<ǹع~�yT��-��#(;����v� ���<<�����b��@�j���YC�{����zF�ɬ��rN��ͬ�YL����N�Ԕ��f��>��(��H3�aղN)I���x_=к���HB~�:�fUPR�)-aX3K�&%�R�tW-ˌ�%�S����������u�ѻ��Ѡ�����8���b�F�nY�M^�ѐ<�����O^�4��Q�<=�B�eͪ�]�r�=)��)�G�q�ϩטU%4N���I����	k꼼ogk�Ɯ]� ��3��z���m�{ʖE�Ni��;��!�X$u2'O��
:�e�&T�����'���jZF���	!��N�j���5���@��,���0�.(��J��1r)⒯�Zfm�UO���L���4C�\к]бX�qC�"i�`��?B	u���I,�Z�
�b�
�@��F�ˌ~��C����<��d���5�~�汔\8:rY��	{�3��
���eT��r������!���<�hfu^I��̇HFN�7��I��E!�E�K�aC�kXd$=(�����:BZb)��E�����Q�HxnYh��Ez�-�T�S�̖��=�]�l��O����@�D�D��:={�`�y�<�ܾ�L��6�+�4���6yT�Gr��^s�Y�ğAKf��o��,)�i~�)�~�{�S\�򾙭�À"�B�<�q�zV�D�CjY@�S�Yk0�#����!ϟT�XNS����Z����[n$:}\�7-����ϒtf.��\SP�IzO�2��˳65��)藾���^R��
�/�l����}�i�5��>�<�$YiR�V�(W��9�	Dφ/*�i�ldL^��t+��r<0L�`wx�gb�%��g�v�'�_��J�,�hr���AZ����b��,t�iϒ���
���|
���,�a�[���I ���?�)���k��'ڧc�p�c����b�"�ZL�f�v'�$x\���x�X�ukG�e]t=ʉ�Y��d��>�'�4��#�ϱ��ؽ�v(9�9>"�G⏸�~ȩH+	�@�m����Y>͋��P�Y�g0�����k�I�W��T5��P�=$u^-�dF/RxF2�+�3�zA���W�	^
��*��p�}_��
��>��)ь�V�ꀶľ��p�	'����*BaiH�L���Te��QT¼ 4��*�AX��l�j�A�DKN��wuOi�K�7I �5�uXU,�� 3��1j�0��%�K,��К�_J�A/�����G�-�q��A��G���ɳ@
��y��JA8���0(�#׎+ꘉ�E;'�*=�m3��Vä9l�ٴơ9��\�v}�4��Y��'YE��PxFOhQ�����Ѿ��[P~h+�����Q�	=�Ԍ�"4$KM�e]������{ڐ{CBI&��"z�e��
0r��{M���$���SH��ۜ�	7��o�%f��\�&8?!9�����)19o@��;)(c�a�����Ö�y�4�mRX#J��%���� C����)$&U($��Z�Z��R���"��#���� ��HSU�czOKZ�a
G$�X[IL0ge��8�
���s��h��
�9����Ű������-'�a^�T�\.P�K#�^+3��0-�MiQ=�-�)qD/���aO��mǴ;�g���.k`-R�sj��:�y�O�`��й�?(ȍ��Υ��pk�C�j����,-�u��X��B�:��|�p��X���"������*p~�+6]�eJ�䮚���}a�dq`��&�,?��B�� ��<	�t��g<Q��=ȶ0��<�� g�����7.�^�s���YHC����W�F�u�Fh�Gǁ
�n��Iћ��k���K��V*�r��.���ڈr�EQ��e�V�XT)�y9q�T���N�q�q�O0Yy��2ᑖ ���Dǧ����o��L޽�|w�����j"���\AO��B,����k��cŲ�y��؂utY�2����}��������B-���$RV�1���l2�H��`��㢂��m2��
C2	�:K
�4�g:y��4���Щ�8�Ëh�1�Q�t�:�vm���gv]&���$8E���"����z
s7��ޝ��1�D}��NNڳ^����p��x.V�K~�+v��
|>h%�O1O���,�v�7B��C��+���Z�RR�� �3��C[K_գ��`�n��r
:W	�)�~.��p0A��Q��*[}M���B�=V����m��A^�9V0�"�x,�eё�a�,�8";+��¦/�Ii$2�}�ޱ��D��☑�>cg�G�A�r�#LE^�X�Q������1�^\/
#H&��Gч?6E"[�[�!A���s���c��ga���=o�;���
d���� ?#���y8ʱq�]!�v��@�D����d��a��t�7�8���6W٢�k�S�~�}���Aɦ�l����¬��s~�C��-DU�e���旐TǷ���/(Ɵ��H7r��U�VS��(���N���]����='��V�iF���(�ڠ�Mhҷf��C�4Q��jE��)n��@?��?�a0mi���
��R��|�lqL�q��BM��$Gu�@E��i�`|�A�s>pY-z��C�T�C�?$�#b5�k�Z;�(p�F�%Jn��
�v!jn�[�Ҽ|h�a�r%����u����$G=�I���Rw\� �Ad�����r��$�f�h;SrJ!�X�D�w����A=�-7���T���]O��
k[!�I(;�X��6�Q�A�M���P,�ѹ���)�:�m@�����B����u�m��O��!U��Y�M�Z��n�$O�A߱��yH��=��Lu-�u�ѧ�y����lWfy�����6�e��/1#ӻ���KجT��8x�u��t�Du�ܫ�!89u�1�
���
"�%�}�y9$O��#E��@�����)ei�/�� �c�^����6��?�$�(�R�-�d��[�b��(��v��
�YY���JHsd�/t���7f�[M�:����խ(�%�kun!��$���SLrY���f���*�a�jt1B�=�8'�)�<p��N.�^}�8;�\]~xrf�@z��(a��MIU��]P�)����sб�!&���C���}�B#r�ֻ��qH�ݞ��Ƕn4Mmٛ,*�

�v��_�|�杖$ݑ��v�W���k��������@Ǜ����
aNA���ҥ�^$�[=uK���|�LՈ�0Z?3L���OAѾF%���%7���8�E�<<�3�3���_Ӓ~���,�Y���+Ru	�f�VR�0�n�e�qIg�}!�g�)�dH�+lqsqbVpBI�+���0n���+�����sܔ�3�3�1�2tTz���2R�[�>��׆�����z��F3���A�Y��ۂ}f�\I)$�0zJ��jx�Ư>�4��AN�w����t�"?�iYg0N`8t���L�*������vM��-Y@f�EgVd�$�+��Em��N����uvK0����C��փ����:�k;���DG<;�G��3��=�;ل����
Ǔd��F�/���t+mC�{0	�=,����N[�3�#Gv*ғ1�{��B��R�e'�i���'��iij�������;R��w�Js	�'���}n:T��0��?Py�#[$�9[��@��q�o
j&�8̻H���}Xy�m��V��)�^�X[��_�����@�Jn�iK��U�VU¥�
,�q?�6���T�w/�H�,�e�s���������-&!�G��&�Wk�D�ddq�g���
d�#����8
���Y��*5���~k�'��!|5��6�P����7@X���~��_�dǞt��ڍ�X�'�}^�ŷ�@���,�*I�H�z�7t>�y�w�Q	���cr]��N��491L;_Ȱ`?��nz�/ �3H��;j�4A\��B��k��;ɥl�KU������	�|��>R�"ǫ�q'�+�5���4�x�d�%):2$0��wC�y.�z��J)H�H��̪:��-��
��ks^�
2���i0����3M

a$���.)W�}Q�CF�h��Z:5?$�%�/�SbSE�@�)��ˆ\��(*��"�_6
ޅ�{$*
�1��N��BL�!�G ��m���4���~�/����ꏼ(����i9�p�a��B��'WW�o��s������M�״�@���m��Ȥ��='�`��/�b46K�'S�<RZNаYة��D՗H8��6�CT.��[�Ҥ�&��f7���yV��l̤;�&���qq;�2��P���&���}c�z=
	J;��(�vX��KR}���X�C�7��tvd�k<�Uȋ��>����1��o�LڐZ�c�������Q�[kМ���sQ�kK6�$u��k'�� B�b�(��`>�ϳ�C����6�����Fr�
����W���*�?���N�E/z9"c�@��B�����n�8���[�*)Q�n��;8@�lZ�uѦ@�`g��,ˎG
,�N���wfHJ$E�V����X$�Cr��������;e�(Z�ո���[]��m���a����=��+P�
��sv�X�d&q�"D�J|#to!�h�ܢ�����Ѹ�<.4�������d�/��_ij.P�z�}�ik6A�� ����8Ԇ+��Tl0|��D�
�E�f�0x�#@����tr���No�}��?�N��B^o�J��S�D�&Ѣ�a�L�O#uQ�Q�\z�>�����
���ib���9OB����l�C�zc��Lo�q��1V5�n���տ���ů�X��B�g�}�P0^rq.�b�5%�$
y�RY/ҝE�r���B�"A�Cʮᚐ�-÷k
�+kxjb�C�pf:&��>U[Da��9(ms���kԎI���a�.�g�lt!��al�*}��)4�J�-	�*�_�$u����4�^���9}��!�,m�qnS1��Ɨ��%�:��ϯ!ۈw��5�>1B����{ـ2Ns����y�l���ȦC�m-�X�#�g�1G�¥ߞݩ+����5v,�6΂��ŭgEEk>�2'����P�L&��d�}6�9'��g�g3D������$N�c�Ƈ��boq	:0�)�1� ��_�D��$J�>6�8�H-�p��Z;mSj'-������e���:̯s��]w�m����n����V7s��4��Ȣ�M
,,�7�o)_ѵD�gz����b�>�"�1L��^`�+�*
f��{�{!�O{����X��{ul�X�D/�DM�
U)3�"�#Ľ��?�ܾa��W0�?�Td�]��hZi)��?4%
0���m��;p���k���V���myo�+/�Pl�.60�!_��ͯB��j�\���I�j[�S�������=t�����}��]�y��ἀ�U��U���2��Y��RDE[���帙ێg��SqD�K�N��asV|�d���Ǔ����$y���}e�Z'�`������ԧM�M£��9���/�ރ ���Z��(���]3�/��<�/�W�::�i��T�RFž'�����X���1�$_��ږ@ke���Ѹ�~
"\�������N�V��vѫ�����+�u�٫�S��(���@8K�[ u+u�^�wP?A��Q�	g��W�+��h}��;-Ց�óX���'>�Q���������#��$��,J?X���aa��h���(Υe�
��Pe�8�5]�8��_�&�珳��T4ʺ��9���b"?�"4�a��YEAp��C�Ч��4�����"U�={f|	h�
�7r}^�tj��h��&nj���O�w�(ۢ &{s�Z|��>����$�j�l���0[���&9�����U�-Aj�/��":���+���5A�`��7����l� ����s��p�"���d5���ma��Ly;�X�X�z?H������|�Ye1�;�X���e�����nڇ���Ij6A�@M���f&��P`A��(�\Q�#/�l�P�X��4�&(~�fY���8�›؍S|��ӻc��g)��!�B;���\Z}�j]M���B~=�y�꥿sO��tG8�N~��t��Q:<��7�`+T��\C�m4�:�F�̧��
��Ͱ���"��
�|S�̦[�W2`n�1�3�)I�7�1�3�O��.1n�+��7Z��62.n��*1�\��cߎf��`>��7���3�Aiɍ��_��ۭ�(����{}@ro12�J���Q�X[�#kE������t5�骦���-���G�(�4����Ȓ�C�'G/\��䅍��P�+��DGr���I��Rv�����c~O	����ww߸ƚ�����E�pE�f�/�A��=��Ȋ,�E͉�̌�4-��T�9��,{��şp&����B�:7�(��Y�Ba~��Q��� �39J���?l����c~���W|A�,i�^?LYx��l@p��xB�������~�V<��`�d�>K��Q)�A��9���X��1�TOQL�h����"8u��h�g� .��N��8��LI����-\�39*����^X��%�l�5O賔�߲-跒J
n��s���閭d�ҘKu0��4�����N��w�y�~�z�n���� �w�;ϜJ�0���.���<�����f����z�1��u	OA�~��oo1�]1|t��"�b��-T�����W&�u2�*�D�C5&1��e�&�}d�R��:��K��5�Γ�8�t�?������˛$�l�`d�	�0�&m	�������Y�9��	�l��G�����g_�@�a2a`���C��NG�S��gZ�1�!�쯒+f6~����������8{�����'�=�ۋ�ϵ� x���FuM�n�d[�N�f}-�2v���Sc��*��}z3�G�!�C`��e��j�dt�,�!(�
��e�|*/�:�V'ܿ��=t���ߣ�w�ý��5�H-ݳ�7<:rm��ŠQ�'G>�j�6g��g���x�Y\<F{F[ͼ%S,�
�̶�?��w��"J�6%t�IE�K�J'��]�Ԟ4�D��|�@�J�
�77Hh�'���d����pxT:1��a#LB����]B�)/��ջ��m���d�0��4R��fKfw�xV�9�2A�i� ;��;-S[ɹI����o�����z���i�1�T��&=�L�	��TuEQ�a������#㓥��̦��4����`@:0�8
�l&	�ET���PN�P�q���"����"�����qm0�D��q�@ u�6h�}@�"+@�j��#>-!^/�TvD�-%>��ζ��Zui*��KH���D<,����������9�~6�{-�H��	=	_z����`Ǒ���[�NU��L�w��;u��LEK��a�nzܮ�qQ!���tm���A��`n���A4:�~���
�j�>�t&Ю�g	�[�����]k�@콿��!� m쩣���h`��fO�v;��줣�����>�������I�;Y��ۼ�_�*�$7�A���d���mZ7 a�N!���{)0�5L�8���
��bU���t���O��4$���9��Х!�":���]T?n�G�+s�n@c�\�%z����jh�.3�7�]K��t�.��I�B��ʼ��>���d�K畈}m�t")���q7�:6�bU���u�3��I�/{�N�|�E��ΑY9�����v���������/�4H�4\����
4n�iQ]Dl�S�ƻQՈ��\)[Ɯ��NJ
�E;��
�9ZX<��HIYQ��k�F�S�J͙�A�y)���/z��6�gf:��N��Ry����؆����<�uM�s����cn耉��Ro�.-W�4�F�E(�1�gX�҇���O���^���H֝�=#�V�.�=�<�ܡ��9yY�|��^�}�Kp߇���ؽ��r�Ka��9r�[Q�<�
9��]]��Q��-�À+�� ��u��9�97L�z�����FU�Uzů��m���/�C]����"s�:�)E��TH��&ȊY���fŚV��8�QP�<A�R(g�>WU����#�i*�ÇN)�R�`�s��~�nO��^���n/��F��C�q���@�#����'o��db�x�k�b
����'J��L�&�l�	�L09�@p�{�p�D��yO�Q�M�
Z����9��kG����mx�確Ru���i��Z_�Y�3��Zϝ
�cZ����>֐p��GT�7ϵ�y��k��h�=qѶuZ���1:��6e�t��Y_T3v��O���1��w�'v�O�;8��iD�Tr%�P��.y�����Ьx��$p�}���z�6��tWݴq�.�c|h˞]��Ou���c_�����CbgjKC$��B���;g
�HR�XL�Ip�T��Q���=�E�6�?pQi��}�S�׼��ɲެ{�Dg6CF8��8��P�y��P�u������@p�i��&v|qxQ��)X�k�RK�ѐ�rL�v��%�7^5�>[U��)�{j(�~^��?��Zt�n&�QՑb4��72P=���D�Ak]
�+Ё�� Y�g�U� g�*5����E�S�Ç�l�]���ԡ�b�t��8��g���.�3Q������3�KF��V M�#�:����hO	�=��R�En�SA1z��l�R��،������~�B���keO����������Ы����[ms�6��_�d:'���wn�s�\۽�.�sq�ތ�q!���
�Vt�����D�q���X"�ž��tp@N�b%�ټ%I>&�~�ͷ��ӹ�u���k�\Ȍ�TQ��&��gE�wp@~���)i�$�w"g$�#�u��hXA&+B�Wg��]U�Te���iKrڐ	CNS�5)x�ȫ���7W�dZV,��;���=�%���2�jAxݔ�1��u�-���$G���!9���QF��I k9)ؤ�Y&D��lfQ
AX�2�˪AX��E&e#)�0c7�KPH٦��� xb0I*�A-z��ikږ�AJB\$�Z��zQ1�G�C�R�%~��-yW��dY�sE��Xtm����%2"|��-L<-Q�J�����JeقP�� g��@��a� y��ۦ�$Y��b!�B��ec\��F�{��W�	�l�h�j�z`�v�@մ�WSR,�@he:	�=iUMh~'{�I$]� ��ή�5P
��eE'�B����ۗɂKYN�ړ���X7�cdN�|��5%>���E)]�'h����d�59�<��hW�!��hŽ���.^?�>$�͋��uv�����(��P��4�����F=^��L�r��1����eR<&���A��P���tL�.PnyHN����y��Ӵ8���{u�`y9-�8�۪��}��pi���jH�ъ���P�-��3��ヒ�d�?.�0��⒇�Q&@�Wk;`�=<
�
+%�#��Ðܼ��]�nF_�o�p�4�E>c��G�,x+�+*%��B��Ղ
Z?)K �C0��a�T��NJ�e/�{����o錝�S2��\�JaY��%ǤaK�X�6�B�bo������'2Z�T
b"Q<���&eS$H7=sn��ϝXzά'�\2qQ���hK�'̗u�,�
��6e?e�������h�ʸۆe3�ꡉ�T;2��=�J��pL��X_�e�BߖX]�b��^��M�ņXj]b%d���C	)�xL>k��Bj��׀X�[{;%ѓ����rM7�`< o`����pu[b$
�f:-sT$ ��
o�6��+�(z U�UjN �}5y�x�l
��0��*�JJ��-Wh�I�n\���:%%]S�ض��ȥ��TI�>R�~i�՘F��3�q4�[�m	`��iq5-�q$��ߗ@���cl�$�ѠG��s`"A�Ǣ(
_�%#H��װ,S�*=”?p�
<�b��=��ӟ6�����z�;M���?h(�(͵zѮf�q�n��i>R7��aÁ��(�i�V����C��5\�²���α
�*	�s�;	\�}V/�U�EA�	�8k�E��Aw�i���V�S�mF-�W��4�B*�M<�,!G�Q-"V$�$���Zf& ��qzU �6�Q��^���@<��Y��3��X3k�6��l	g�0yu����e�!�?<ִ����Cr1%�n���
����qH3��j�o��	IE����°
� �u�
!�]���X^�Z"��7���*��3���B.4H�O[/XS��
�Zib�m�"R��*�(vc{؝��F��>]��<Hb�i?��
.���mn����t�W]��]3e�TǼg�<
���񶤍*
sX���A㒞Y��?!�ߞ���ȃtfDi���r�ako��dZ���ܧ��	"����\��-1�L�n6�l�0����=���o��2�o��Z�^*H&��O������s�CzcM�V��
�0S/�]����&����]�M#-���R�j���P���t`���Y��0�,,���0!�ꞑ��f/HI��n���i�AR�A6vuLhO��T�g+���Juc
�!�
�B5ŭ�gs����5
��8 �b��dlu�g�鮺�$_$#C��T4ҵZXGɟ�Xk"��oK���/��G��3&l*���@	�j
��JU�G�@���T3�V�c}����9�����2��ܳ]n��!�C�b�!��~��x:8��~�f�Vt`�}�٢`3�����{��:?�%V��3f��Tzz���C3���ъϚn�8���n�_~��s(5�U�s{C����G���4��*NE�]����SK�|���������B�}	��iϺRt�NQ/��}�7P���w�67�+p��H
Y�My��eڡa��
Ѩ��h42�|��A���p?u���vn0v����'��1k���m��1��Pa�&�{;�lY�}(˵C�c� /�X���@�À�7���mI�a�T0�%�Rv�yMi%�PM�!:�<�z�]z�M��yqO��½��I���V׮�~
�v�ܩ�Yp�ԉv㰀���4Ҷͷ�j���#����㩤��*U��@�֔�j�}U2�>�wN��+�,��Ѷ��)N8<xu���7�m\���H�#��E>��(�p2jB��tm{¬�\�A�j��t���x|(�a���R�Ds��]Em餶2�����JZTJl�A%�T�L]��5�`�Q��S0��n�q�7\�)�7�f.�\59�$f��ì��&�z����Fkאh
�� b�}irvՁ�n��H��aH@����I�2��K�ݖ��'ف3#�!��!�Û��ȩ2�kji-؀9�� ���yK�P�7�S��YMc�����$X���iu�ET��*����y77{ض��x���:as��%}�D�FLb��`xڤ��"�����0__G�ws�� :�~*ځ���$[tr���YZ�����E3宔$&r�a�����V���~���r�r^�v��>�쭡0G�/ku�^��~�W0�ܣ�E���#˻�^�⼣^��
0^Ίd\PQł�[,��#$$��f(�UѴ>�{&� 	ߛ���������:d�+1o���u\�;76I�!�L�I%^6��Er�VQ��oj�2��8�)�7�,RϏ'L�.?��)�~�+�l�Y������8�UK�E<�k�
���(hcDa��;/D�l�됁(�@�3���VKg�([h�â��P��a�3S�����u�@�S���2��_\]^�}*[*�n���_��ŭ�	�b����1G�1� ���$�4�f\,ܪz_�9����@��yy!2�E���w�a��RT9eN�J�ݢR�-:̖�D��)�+�D�f���z�1�3�E�`�1
	/�I\I;��Qb�|����5&l����80L�)��,��-�5�I�UI��!����׻��Ҟ�L���^7�4Rē7e3�Pq��
�z]{�{�Q�Kl/�I|#�e�h�|��4>���5&���r��=�5�~+��F݃�m��ʈ������//=���|�����͘\$�]4��46�4S9B;�N܇����j���|�il_NW���TU����pj�eܠOa���-�ت�M�¦1��q��ѣև�c��Q� "�RI�ljf�Cl� ݸOx~S+(>�玲��n��evKr[�:>�ճ���O�
�k�q2���-�g�e�<�[uUT�1_O�It�d])����U`=o">�J�}3>`�Z��K
ɭ�-��B�j��R؅)s��@���x_�O����а�l�N5�������p�I�_�.�*�V�SF�C'*`�ӻWY���^*|O�w@�a�N�4��������fsH�@	��׋8vk�� R�d�x�E0{�V�ξ��fUU�hu���*4�K�c�cר�q�3u�o� lu����4����.VDH�РWD���9KfP`���x	��F��o�A���7��)�&����$s;M���5�LߺR�R�A\���n}_K�؄��Y.K��怷��E��4�O��_�}�˅��-��PB�N���t���dK�kPU��W�)z7m�}X~R�w���p���}Xekm��=?}~v����'��
2��Z'�(���C݁��n<�I텴�WP<ߗb���͞IVZ��7?���8�}}~uu��s,�B����Dž�6��h��N�+n+{&6;��F��<g%����_��jx��+�&
:ʏ����v�Dn���/�����j!e�e�~�a6�נ�Y)�ߝ��OVf$��u�잧ލрy�*	�?��!7��ѲQ�4����oo�D`�l��$��p[�)h4�������dCc6��ǟ��ƣ+��H�uN	�\y�	��$;��?�qg�?f�6868��YmO�H��_1EHD�4��J)Rѕ���p:E�=I��x}�kB����]�'&	-��| 8ޝy���x��o(�[=��E+f�1��/���o�ogĿ���)t�H`�Xq`��U�CofI��B���M�q�D�m�9�\�L5���h"�`�`og��C�
��#8�Ր�q�Y$A ��A�ћ?K�5$���C�րߠ- �^�{.�$@��!mSCW���C-�������NN?^�B��46bZ.�`��x�h4�y�wo#.�9�����M��~Z[[
؂7l8,�Z`��^ő�\�!�=dd���j�ߖ�?r>Y\�|�~�����\I��D�pG��9	�{�04�Z,u!�{䪦�}�lN��="���l�'�u�}Ew���"
�eF�Φ����i�%���Z�s�GS��֙��+�n�5�H�
r�`�3��[W�Oϖ���i���l$����
��8��!4��K��.l)pC>��&���q�*�(B�M�����J���]0oy�Nx��O����"��Ǵ���𰲒�窝�zI�M�LџF�~�0K`�\L!���匾$i	��kҰ�KҨ/ �D�9JYX	p�����y��9�{UTֽ�X�U����o� ȯ~+D]
�|~_D�N���ea�+sU]��<@J�SSK�q���J�PW7��G9u
^,$\2�z���W�`�R�/�j���-}?�d̅_k>�$��j
�Ğ�l��s3cl|(W�ĕ��(&�����tI����C�O�|���'�nB�l۲�������i����*M+G�>�䴞�n�ⷖ�<��z�q�=@���{_(��xȼ!Yjr���	-��G$ud�4c��k9�'�ea�c��ü�S�[@p+}����\]-�n�Y�������HZ��7�=�=:�=Q��6��Z[1^W:;�����\l�ah.|�,���m!,6�{tE�͹<��Z��&�"��X�WG�Sj�2g��<�+~��jQW��"ܮn����B�\*�� �*!Yi��i�c�&E�X�l�莰�f�d�Z�Ƶ���]�-�޶��:m�w�LE��u�y�W�$���Ү�_`�s�нA��sai��.�Ui�Q�O5[Q����b֣׿D���n�|�ź0lP�xC����ݙc�,O�6C�]֌%���e	���0�컁�:q��)�y���oc\���τ�Svv���>V��nD|����8�/(�Ҭ��L^�k��Q!Sx�ֶ����L��ɱ��&|&#WyC�C�+M8�\����T���8�Z"m�'�zt	a|�3}��+Ulz����ׇRI�O i�y�!
z�|�dR�2�J�r�bSM)e{�R�����?]�3¸cIf�>�e���*�V�PU5�R�(Q"穴D�<8�@��3w'xL�&�P� ��򥌸>o�j��uW�z�.{��p>!��'�<�{
�e��4}]M��%%7��k%���B��CRl�J���CM�Z���7u���^�I\Z�`��d����.�fh3�;�wS�M�W��b�9�����G���&-G,?�l�iU��4�1�}�(Y0��o��<������[_��T��5������u(UqK�btvv�w�/:wT�� �|�]�>���֎|��s��FE�vqС�-M�~�e�E�`�`e��9:�A^B��و����s�[�8�cz�Kog'���z��Զ��ڻ/��S[��:��%�6��'�e<�Ɠ^<��ŏ1�����\Mo�0�+*�J=�����v��C�j�=U=�ਨ�MREQ����|�	O�=��<{�͌��o�
��}�����i4���ja�o��؇�n������w�EV�7��M��-O>Q[e�P[��I��[n�Z��e�U[c�|�,X*;����}ٮZ�T�F�jۓ�ML���7��h�ͮ���fSM,��vrM���eg�璘�ۏS-�W[!�x��m�Ԗ��[���q�CEW��
ɭ�ﱿ����X��@�$�$�=�0 ���A3Wˈv`�Gmx�I������	=�Q�0��L��g�r�T\�rIP��iF�����J_AE��,}.�DL[Y�|���Y�,3�1�
�Sz������3e��1A�pҜ�W��$�x�*�j[���#d�%�IITC)�ט�8kh�A �>�o�����\Ān|O��+��qr`䢵�-����s�K��-3Tc���R�?�?`ƙ�_�N�p$�9V�F$t<�b����A��V ��n�-��T=ޜ�BB�O��҈b��L���fP/�D'�˕���N���ڌ���Ȣ��
�Ŕ�yl5g�Y=��@a��A��CL�8�6?�e�u�wd�+t����
���27R�K�Xh7P�< /^���q�j��b���\Bֹ�eF��p�E^����T.�_S4�A�X#;O�D
e�*pY�@�[g�6�Xb�����H�<�ft�Ԡ
G��a���qxl>0�/��������(�=�?Bj�?O2ͯb5[!�̒�D�^�7A�t��R_��7��x$>���}G��dJzQ(��X.P�/>	�T>�$��+B��n��R�����~���ñ��6��W�4>ɕk��W�>={��t�1�����
&��6��@֠j�h�F�8��7'�/�Ǧ�?Z�`DP�u� bڎQ��\�"�T������DM)���TڽSV8uݝo�-[o:�Ej��tg�Gݛ8u";�g�;��ǤU&F֏lAh���(�ۡl�8d_�.;�
��(<�����yc��VmS�8��_����@�1��B���	�BjJ��aK�d;Hr�ps��V2�4�^�i>�ڵv���]7��<��	�D���4߸��瓹�q�a%\����&|H���S^��)t�KU��`7*�L19e���A�N��2d��q>e2cFs ��\�炁�!��L'DCH21'ʋ��P����q����"P�(���в�dq�²
��\��&p�i<���J��L�ÄH�t�R���1V�g��hU,(�0�+�H�*�	�5<ô!)/T��쳾�,"�Ъ���Z���������Ob=}�Lx�9�N�M�o`B(�Y���`.�h6�u��>�4�zᵡ�%��Y���8�hɘ;�l�y�	�J{V$r���Eژ�<sg�����Ư֓��L'n�pAWrJW��	oci"l��G+���u(��UkX��fi#�ʟ)��	��ҕd�_�Іr��g�kAFL�a/���Ĭ�+�hҰ�7���Q��:��]�6���y�� �1��F������8�3�q_���Ww['�A������z�u�n��Վ�G���^�ӆ���{̤?\�n&���o�~r~��a�~�����T2�ow?z�t����A�3ěEP_����y� �~���+��N>�����l��;+��i,�Ý���s��ߟ�o��d��7��������ڰ>>lp������:8h�4��*,�P�%��j��BsQc-�����P���cS��7x�c����%��c'x�9޺�F�#����^"}����J�(u���dX8��/z�3-��CK�R�Z�P�&D�	��;�즼	ɨx�(�s�D�F��6��TfQ.��"M��7
��`��H:�;��7�Ȃ�.���1�p��K8���P0��A�Ԟ���M�|�ˈ�4rQ4
����|U�����ri��D�fp���B��y��g��i�b̭5�-���Yލ���(-���<�7�p�P͕��H-Uڂ�LU D)�P���j�����2�x��T/�e��ɼ���i���((�Z�/���Bp�Bk�Kf'v,��-U��E)7�R�Ȉ��W�m�(<���фj,��%�'�KYYD�@�	�y] ���1�
ˡ7'�=�8�`B�s���l�㲌�e�����"�>��[{s�6�ߟ��R�,�y�W;N��5n����n|EBc�T������ow	��M:s�L$aX,~�X<�����,���%��{����.ǜ��lW�W��,/l/I1,��x4X��`Wgو��`EV�!gaq?���<b����zQ�Β8�)���da��!GM��J#����������	�!9�Tq����n��<-o� ��e�ZŮ��2nBι�P�	����*
�8K����U0�����v�З/��K��4ȃ	�z>���r�2�d�'+32�<�G/"��*O��a�%<H��+p�ͅ��u!��y���o�)c�~4��3�ŭ/��B��az��(Y�6i�ɮGAR�hY��mh��ڢ��M�l��2�J�\L��5�xQ�i��.OH�\�B"f:sr�ء�%���]�����J��aU����͎�>�ʇ�u|�v%�7<j0���DԂyg{�ϲ��=q��_J��C�T����Gq��#�r����:-m!Zӻ����y�<�0=���ԅ�T):����v���mP�j=���ɨ1�P��t��-��T#�\Я�N������.�_��zj>g0x�S9�r���
&L�\p`Q�#��n9� �0C'<�+��8PJtd�IM�I���ĨNj��'H'I��.R�Y��s�僻�	���1ȣ[��!���8�|�����]c���D�8��l� +�>l`��d����b����{�9���`�^t�a��g��=׭���}m��z�`E�����q���܁4�CS�I�A��xTJ�WG�M��CL2��I��3`Й�����
��
A�i��_Kh�|.|͂B}�
g�H
 �c�������?��3~
޾c��	}���{"���X_��X�nG��p͙0�c��!?�(��O�1����Қ/˭���Gu�.��D���>{#�Y�Q�s�>D^��b�ǺDXRsԠ�Rf	�Ύ/�(��_�ǩ��Y|\���)��Â���z�u�֍��k0�D�vz}���n��'���c�l�T3uˎ�wϫ]��
D�_
���[�I�$q�a"���4D
����i�YO �lno��~��y�϶~�~\]�ܐ�[=L*�..��i.�#���?�4�]��Gv�z=�M�A�xR@�������/����kkssS˞�]]A�w�����~<���h�S�����o��l���ѯ@��c����ڎw��Q���Ҩ7J�E�V
�h�e(�f�0'J8�=۴%��A�B��
f�3d�3��!��P`�<N$�S��{�e�5�tЬQ3䒧5�S;�l�u�?���A)L��AU����
f�����u�[����dQ\ܳb�\��(BE.��ilA)c<P�(Ì�^oo?eY��`TrF�p�L�8K"�'`o���9R��G�7D����Q�����%�isl)m¯|�.)*`	�*�\�#eHͿ���1�2.�z�U�P!<J\e���-��c]Z� �� ӵ��{>�q�.��f�(Ḉ}㐋�6p��z(�i\�A��� �Ԝ6�5����W���)f�;^^Z�@*���-� l����^�274�=�_Oհ�)�+�V�gZ��w"�6
fID��>�*;�y��N� ���d���S��^8�;�K5�U�aOi��:��q�xb��a7�'}q���)��a9WLy�bB)��3t�U�P�69��Ŧ&^;��j̽Ծt�/L����]Lk�`ّ����:�l�����Q�KX�����q����ēm��`_۫б����L����H�[F�W`�1 �xM��@��n �����*Hl�b�eL���&*a-M���rK���&�bV��gpn4+x꾚sԚId��Ԃ
���.�D�g�Rw����Z�K
�h��DS���Da�� ���ʴ*O�5"�,��s�q�����K�{n�
�e�&�-X.E��ٯ5����Ŧ��qC��5���ȳ�l��s}�:��M}-1D�5��ma�h*
�G@`BǠ9��+��d�U_Q���kNM���"2��,�.�%s����Jt��*�|�8�&d�{Q��]��4S��@m~�6Z�9Jt)uh ٷ�|�q
����S�������l$��(��|
Ee�'�Pԏ�b[��1����R��VP��=���0*:�򼠂��$��*@Z����Sy���
���Y�biO CFW��k�u���QcS��[1��K��oYB�W*�7��_.
ܺ�$ҋ�t�"�
�y�=Nä���^_|U��۷�s_5�m�L���f��6���f�
[uH�г"4�
�d)���ft,Dh�YW#�F���k�̮$f3�`J����0<�/<�T��0�"����e����A��;G��Ϣ��"#E�Y��
ʔȩ��	&ӄ�l���~VD�%h�g�S�!�#�N�~*ƾI���:�ИV�='�Tt�f]ux��~E|���q�(S7�X��@�܁��Z@^�W�b��Bm�)��;�^u����Q]�-��v�b��U����=vۻ���+
�g�(X�A�Jǃ���0~2bQ�aE�=$k�^F��a
��]��)�^�yt�U���'��Xm��֦t$AQ���e<1�?	�"��;]�����E��o]�]��DҤ�,���è�$	s:���uur��7}�o9K�Ζ�r��c�L�̹4Jȣ�9��v�۩�v��nzcE�n��<��/2uc���a����*7ܫR��?u&o��K߮�7K��5B��
�6�F�N#�	A>[b5�Z]�����\_O��S22*"�(�Ӊ�u�g�qh�+�(+���9���Uxrh��zi�����t�ӈ�/|�X�6�� ]ϧ�Z�]�Pc��C{���=���������f	�٭!ج���sD�F��
��O$T��e:Гp��?z��'�x��@��
H�y�`��y��,��TwL-;iz���~�"v2���	x����k3>sQe�%���R��`gPu�f�H�ePj�Tq#Y�5��+��8B1�1j�R��+E��W�Re�����b&Z��QԵя�`�:&�Q���b�g�GE�hb�M?5iH�+]-��$,c˵,��Z�4���k��͎ŔH�4ضl*� �K��.%���V�F
�8U��)ŧ>t@�2�
�>�RĎ-���.	8�K8ĕ��4U)S�������5�.�d�<�&��]7n�jH��X �[����wow��iy��8g�w�ԯ|�!��G��#�~.3��f/�X�M��%W���S�����(��kY��:p�_�6_�7啀�C���[}�뇂u�`Zc�v�z���l��5����������U�|�H�t�+��E�vZ��5����θ1�80��(� �c1���I��_#�����=���"Q�����CSס�.�X��$�=�ᢁ�&m��ȩ�����9S:Ȥ*5<�Er���|%6@:ڕ����-����A�w?��-�B"��&(�A�^����~�8?�$�f�W�~c�q����5I�+W�RU7���e�5��c�v��}9tx��
�hzF_-�	��d�	D���ɏW�a�ū���KO��|���G
Jԗ��u�%�㊫%��B-�T�>
}Z�!�P�ڳw�%���ڲ=m������D��,�#�c�=כ+J}��������A�iQa]��e�Oe�#<y�������"�9��U�N1}߯��ݠtS���R!���$����M�|I�P��c�f�`r�g朹ۣL��ň��A�����)�/����/�̻�6��3)!:Z0hѬ�*��,���-����\W���5��^������^$���s����Z{U�P����zz���j!�̂����M�h�7F�F�9f��R�wB��ltr��	�Q͑X��������Qa�bs�%�kՔ��
�O��P���>�Zp�(9�5���x���}�a/�9��hۈ��C�#ʡ��8�={�*�XX��B�,�N5�EN��v,B�wB�b�@�i��]>�h#6)��jBoY�U�����#�@j?�e�AMXZTU�����=�)�r�P��4�tr�~�Z�h�mCIk�6�,Ǎg�hu�fB��Ļ5�aEm�j��)��ɐ�G�[4W�I������P��s�:�mkm�b�-�5�@ͷ]���rFY�aXA��_&}Su������^yRݞ5��9�n�!�.W����ے�e�UgW�E-8��A?LFA ��1WtD%��][ĝ�$�������m7"��]�Λ��H��7n}�
qw����t!3��i�ǒ��8C����O>�O5�)Cr�#��q��:]��K�Ƶ��^4F�"POJo�N�ͽ��l㷨�hr驈��W��4�K�[r�u��"�z��2.��cH)�p=s��XM������R�����5ib#��-�x�tި6����Mhn�*�6$��q�T[��'J9����{��=:�AۿZ��֡��lK=�)�ƞ0	// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Creates an element named |elementName| containing the content |text|.
 * @param {string} elementName Name of the new element to be created.
 * @param {string} text Text to be contained in the new element.
 * @param {Object} opt_attributes Optional attribute dictionary for the element.
 * @return {HTMLElement} The newly created HTML element.
 */
function createElementFromText(elementName, text, opt_attributes) {
  const element = document.createElement(elementName);
  element.appendChild(document.createTextNode(text));
  if (opt_attributes) {
    for (const key in opt_attributes) {
      element.setAttribute(key, opt_attributes[key]);
    }
  }
  return element;
}

/**
 * Creates an element with |tagName| containing the content |dict|.
 * @param {string} elementName Name of the new element to be created.
 * @param {Object<string>} dict Dictionary to be contained in the new
 * element.
 * @return {HTMLElement} The newly created HTML element.
 */
function createElementFromDictionary(elementName, dict) {
  const element = document.createElement(elementName);
  for (const key in dict) {
    element.appendChild(document.createTextNode(key + ': ' + dict[key]));
    element.appendChild(document.createElement('br'));
  }
  return element;
}
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Handles the Extension ID -> SyncStatus tab for syncfs-internals.
 */
const ExtensionStatuses = (function() {
  'use strict';

  const ExtensionStatuses = {};

  /**
   * Get initial map of extension statuses (pending batch sync, enabled and
   * disabled).
   */
  function getExtensionStatuses() {
    chrome.send('getExtensionStatuses');
  }

  // TODO(calvinlo): Move to helper file so it doesn't need to be duplicated.
  /**
   * Creates an element named |elementName| containing the content |text|.
   * @param {string} elementName Name of the new element to be created.
   * @param {string} text Text to be contained in the new element.
   * @return {HTMLElement} The newly created HTML element.
   */
  function createElementFromText(elementName, text) {
    const element = document.createElement(elementName);
    element.appendChild(document.createTextNode(text));
    return element;
  }

  /**
   * Handles callback from onGetExtensionStatuses.
   * @param {Array} list of dictionaries containing 'extensionName',
   *     'extensionID, 'status'.
   */
  ExtensionStatuses.onGetExtensionStatuses = function(extensionStatuses) {
    const itemContainer = $('extension-entries');
    itemContainer.textContent = '';

    for (let i = 0; i < extensionStatuses.length; i++) {
      const originEntry = extensionStatuses[i];
      const tr = document.createElement('tr');
      tr.appendChild(createElementFromText('td', originEntry.extensionName));
      tr.appendChild(createElementFromText('td', originEntry.extensionID));
      tr.appendChild(createElementFromText('td', originEntry.status));
      itemContainer.appendChild(tr);
    }
  };

  function main() {
    getExtensionStatuses();
    $('refresh-extensions-statuses')
        .addEventListener('click', getExtensionStatuses);
  }

  document.addEventListener('DOMContentLoaded', main);
  return ExtensionStatuses;
})();
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * WebUI to monitor File Metadata per Extension ID.
 */
const FileMetadata = (function() {
  'use strict';

  const FileMetadata = {};

  /**
   * Gets extension data so the select drop down can be filled.
   */
  function getExtensions() {
    chrome.send('getExtensions');
  }

  /**
   * Renders result of getFileMetadata as a table.
   * @param {Array} list of dictionaries containing 'extensionName',
   *     'extensionID', 'status'.
   */
  FileMetadata.onGetExtensions = function(extensionStatuses) {
    const select = $('extensions-select');

    // Record existing drop down extension ID. If it's still there after the
    // refresh then keep it as the selected value.
    const oldSelectedExtension = getSelectedExtensionId();

    select.textContent = '';
    for (let i = 0; i < extensionStatuses.length; i++) {
      const originEntry = extensionStatuses[i];
      const tr = document.createElement('tr');
      const title = originEntry.extensionName + ' [' + originEntry.status + ']';
      select.options.add(new Option(title, originEntry.extensionID));

      // If option was the previously only selected, make it selected again.
      if (originEntry.extensionID != oldSelectedExtension) {
        continue;
      }
      select.options[select.options.length - 1].selected = true;
    }

    // After drop down has been loaded with options, file metadata can be loaded
    getFileMetadata();
  };

  /**
   * @return {string} extension ID that's currently selected in drop down box.
   */
  function getSelectedExtensionId() {
    const dropDown = $('extensions-select').options;
    if (dropDown.selectedIndex >= 0) {
      return dropDown[dropDown.selectedIndex].value;
    }

    return null;
  }

  /**
   * Get File Metadata depending on which extension is selected from the drop
   * down if any.
   */
  function getFileMetadata() {
    const dropDown = $('extensions-select');
    if (dropDown.options.length === 0) {
      $('file-metadata-header').textContent = '';
      $('file-metadata-entries').textContent = 'No file metadata available.';
      return;
    }

    const selectedExtensionId = getSelectedExtensionId();
    chrome.send('getFileMetadata', [selectedExtensionId]);
  }

  /**
   * Renders result of getFileMetadata as a table.
   */
  FileMetadata.onGetFileMetadata = function(fileMetadataMap) {
    const header = $('file-metadata-header');
    // Only draw the header if it hasn't been drawn yet
    if (header.children.length === 0) {
      const tr = document.createElement('tr');
      tr.appendChild(createElementFromText('td', 'Type'));
      tr.appendChild(createElementFromText('td', 'Status'));
      tr.appendChild(createElementFromText('td', 'Path', {width: '250px'}));
      tr.appendChild(createElementFromText('td', 'Details'));
      header.appendChild(tr);
    }

    // Add row entries.
    const itemContainer = $('file-metadata-entries');
    itemContainer.textContent = '';
    for (let i = 0; i < fileMetadataMap.length; i++) {
      const metadatEntry = fileMetadataMap[i];
      const tr = document.createElement('tr');
      tr.appendChild(createFileIconCell(metadatEntry.type));
      tr.appendChild(createElementFromText('td', metadatEntry.status));
      tr.appendChild(createElementFromText('td', metadatEntry.path));
      tr.appendChild(createElementFromDictionary('td', metadatEntry.details));
      itemContainer.appendChild(tr);
    }
  };

  /**
   * @param {string} file type string.
   * @return {HTMLElement} TD with file or folder icon depending on type.
   */
  function createFileIconCell(type) {
    const img = document.createElement('div');
    const lowerType = type.toLowerCase();
    if (lowerType == 'file') {
      img.style.content =
          cr.icon.getImage('chrome://theme/IDR_DEFAULT_FAVICON');
    } else if (lowerType == 'folder') {
      img.style.content = cr.icon.getImage('chrome://theme/IDR_FOLDER_CLOSED');
      img.className = 'folder-image';
    }

    const imgWrapper = document.createElement('div');
    imgWrapper.appendChild(img);

    const td = document.createElement('td');
    td.className = 'file-icon-cell';
    td.appendChild(imgWrapper);
    td.appendChild(document.createTextNode(type));
    return td;
  }

  function main() {
    getExtensions();
    $('refresh-metadata-button').addEventListener('click', getExtensions);
    $('extensions-select').addEventListener('change', getFileMetadata);
  }

  document.addEventListener('DOMContentLoaded', main);
  return FileMetadata;
})();
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Handles DumpDatabase tab for syncfs-internals.
 */
const DumpDatabase = (function() {
  'use strict';

  const DumpDatabase = {};

  /**
   * Get the database dump.
   */
  function getDatabaseDump() {
    chrome.send('getDatabaseDump');
  }

  /**
   * Creates an element named |elementName| containing the content |text|.
   * @param {string} elementName Name of the new element to be created.
   * @param {string} text Text to be contained in the new element.
   * @return {HTMLElement} The newly created HTML element.
   */
  function createElementFromText(elementName, text) {
    const element = document.createElement(elementName);
    element.appendChild(document.createTextNode(text));
    return element;
  }

  /**
   * Creates a table by filling |header| and |body|.
   * @param {HTMLElement} div The outer container of the table to be renderered.
   * @param {HTMLElement} header The table header element to be fillied by
   *     this function.
   * @param {HTMLElement} body The table body element to be filled by this
   *     function.
   * @param {Array} databaseDump List of dictionaries for the database dump.
   *     The first element must have metadata of the entry.
   *     The remaining elements must be dictionaries for the database dump,
   *     which can be iterated using the 'keys' fields given by the first
   *     element.
   */
  function createDatabaseDumpTable(div, header, body, databaseDump) {
    const metadata = databaseDump.shift();
    div.appendChild(createElementFromText('h3', metadata['title']));

    let tr = document.createElement('tr');
    for (let i = 0; i < metadata.keys.length; ++i) {
      tr.appendChild(createElementFromText('td', metadata.keys[i]));
    }
    header.appendChild(tr);

    for (let i = 0; i < databaseDump.length; i++) {
      const entry = databaseDump[i];
      tr = document.createElement('tr');
      for (let k = 0; k < metadata.keys.length; ++k) {
        tr.appendChild(createElementFromText('td', entry[metadata.keys[k]]));
      }
      body.appendChild(tr);
    }
  }

  /**
   * Handles callback from onGetDatabaseDump.
   * @param {Array} databaseDump List of lists for the database dump.
   */
  DumpDatabase.onGetDatabaseDump = function(databaseDump) {
    const placeholder = $('dump-database-placeholder');
    placeholder.innerHTML = '';
    for (let i = 0; i < databaseDump.length; ++i) {
      const div = document.createElement('div');
      const table = document.createElement('table');
      const header = document.createElement('thead');
      const body = document.createElement('tbody');
      createDatabaseDumpTable(div, header, body, databaseDump[i]);
      table.appendChild(header);
      table.appendChild(body);
      div.appendChild(table);
      placeholder.appendChild(div);
    }
  };

  function main() {
    getDatabaseDump();
    $('refresh-database-dump').addEventListener('click', getDatabaseDump);
  }

  document.addEventListener('DOMContentLoaded', main);
  return DumpDatabase;
})();
<!doctype html>
<!--
Copyright 2013 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<html dir="ltr" lang="en">
<meta charset="utf-8">
<title>Sync File System Internals</title>
<link rel="stylesheet" href="chrome://resources/css/text_defaults.css">
<style>/* Copyright 2013 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file. */

tabbox {
  min-height: 650px;
}

h3 {
  margin: 2px 0;
}

th,
td {
  font-size: 14px;
  padding-left: 0.5em;
  padding-right: 0.5em;
  text-align: left;
  vertical-align: top;
}

thead tr {
  font-size: 14px;
  font-weight: bold;
}

tbody tr:nth-child(odd) {
  background: rgb(238, 238, 255);
}

.log-time {
  white-space: nowrap;
}

.log-event.error {
  background: rgb(255, 220, 220);
}

.task-log-details label {
  cursor: pointer;
}

.task-log-collapse-check {
  vertical-align: top;
}

.task-log-collapse-check ~ ul {
  display: inline-block;
  height: 1em;
  list-style: none;
  margin: 0;
  overflow: hidden;
  padding: 0;
  position: relative;
}

.task-log-collapse-check:checked ~ ul {
  height: auto;
}

.file-icon-cell {
  display: inline-block; /* Makes the cell content start-align in RTL. */
  padding-inline-start: 0;
}

.file-icon-cell > div {
  display: inline-block; /* Avoids wrapping between image and text. */
  padding-top: 1px;
  vertical-align: top;
  width: 18px;
}


html[dir=rtl] .file-icon-cell .folder-image {
  transform: scaleX(-1);
}

</style>

<script src="chrome://resources/js/util.js"></script>
<script src="chrome://resources/js/cr.js"></script>
<script src="chrome://resources/js/cr/event_target.js"></script>

<link rel="stylesheet" href="chrome://resources/css/tabs.css">
<script src="chrome://resources/js/cr/ui.js"></script>
<script src="chrome://resources/js/cr/ui/tabs.js"></script>
<script src="chrome://resources/js/cr/ui/focus_outline_manager.js"></script>
<script src="chrome://syncfs-internals/utils.js"></script>

<body>

<tabbox>
  <tabs>
    <tab>Sync Service</tab>
    <tab>Task Log</tab>
    <tab>Extension Statuses</tab>
    <tab>File Metadata</tab>
    <tab>Database Dump</tab>
  </tabs>
  <tabpanels>
    <tabpanel>
      <script src="chrome://syncfs-internals/sync_service.js"></script>

<table>
  <tbody>
    <tr>
      <td>Service Status</td>
      <td id="service-status">N/A</td>
    </tr>
    <tr>
      <td>Notification Source</td>
      <td id="notification-source">N/A</td>
    </tr>
  </tbody>
</table>
<br>

<button id="clear-log-button">Clear old logs</button>
<h3>Debug Log</h3>
<table>
  <thead>
    <tr>
      <td class="log-time">Time</td>
      <td class="log-event">Log Event</td>
    </tr>
  </thead>
  <tbody id="log-entries"></tbody>
</table>

    </tabpanel>
    <tabpanel>
      <script src="chrome://syncfs-internals/task_log.js"></script>

<h3>Task Log</h3>
<table>
  <thead>
    <tr>
      <td>Duration</td>
      <td>Task</td>
      <td>Result</td>
      <td>Details</td>
    </tr>
  </thead>
  <tbody id="task-log-entries"></tbody>
</table>

    </tabpanel>
    <tabpanel>
      <script src="chrome://syncfs-internals/extension_statuses.js"></script>

<button id="refresh-extensions-statuses">Refresh</button>
<table>
  <thead>
    <tr>
      <td>Extension Name</td>
      <td>ID</td>
      <td>Sync Status</td>
    </tr>
  </thead>
  <tbody id="extension-entries"></tbody>
</table>

    </tabpanel>
    <tabpanel>
      <script src="chrome://resources/js/icon.js"></script>
<script src="chrome://syncfs-internals/file_metadata.js"></script>

<select id="extensions-select"></select>
<button id="refresh-metadata-button">Refresh</button>

<table style="table-layout:fixed">
  <thead id="file-metadata-header"></thead>
  <tbody id="file-metadata-entries"></tbody>
</table>

    </tabpanel>
    <tabpanel>
      <script src="chrome://syncfs-internals/dump_database.js"></script>

<button id="refresh-database-dump">Refresh</button>

<div id="dump-database-placeholder"></div>

    </tabpanel>
  </tabpanels>
</tabbox>

</body>
</html>
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * WebUI to monitor the Sync File System Service.
 */
const SyncService = (function() {
  'use strict';

  const SyncService = {};

  /**
   * Request Sync Service Status.
   */
  function getServiceStatus() {
    chrome.send('getServiceStatus');
  }

  /**
   * Called when service status is initially retrieved or updated via events.
   * @param {string} Service status enum as a string.
   */
  SyncService.onGetServiceStatus = function(statusString) {
    $('service-status').textContent = statusString;
  };

  /**
   * Request Google Drive Notification Source. e.g. XMPP or polling.
   */
  function getNotificationSource() {
    chrome.send('getNotificationSource');
  }

  /**
   * Handles callback from getNotificationSource.
   * @param {string} Notification source as a string.
   */
  SyncService.onGetNotificationSource = function(sourceString) {
    $('notification-source').textContent = sourceString;
  };

  // Keeps track of the last log event seen so it's not reprinted.
  let lastLogEventId = -1;

  /**
   * Request debug log.
   */
  function getLog() {
    chrome.send('getLog', [lastLogEventId]);
  }

  /**
   * Clear old logs.
   */
  function clearLogs() {
    chrome.send('clearLogs');
    $('log-entries').innerHTML = '';
  }

  /**
   * Handles callback from getUpdateLog.
   * @param {Array} list List of dictionaries containing 'id', 'time', 'logEvent'.
   */
  SyncService.onGetLog = function(logEntries) {
    const itemContainer = $('log-entries');
    for (let i = 0; i < logEntries.length; i++) {
      const logEntry = logEntries[i];
      const tr = document.createElement('tr');
      const error = /ERROR/.test(logEntry.logEvent) ? ' error' : '';
      tr.appendChild(
          createElementFromText('td', logEntry.time, {'class': 'log-time'}));
      tr.appendChild(createElementFromText(
          'td', logEntry.logEvent, {'class': 'log-event' + error}));
      itemContainer.appendChild(tr);

      lastLogEventId = logEntry.id;
    }
  };

  /**
   * Get initial sync service values and set listeners to get updated values.
   */
  function main() {
    cr.ui.decorate('tabbox', cr.ui.TabBox);
    $('clear-log-button').addEventListener('click', clearLogs);
    getServiceStatus();
    getNotificationSource();

    // TODO: Look for a way to push entries to the page when necessary.
    window.setInterval(getLog, 1000);
  }

  document.addEventListener('DOMContentLoaded', main);
  return SyncService;
})();
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

const TaskLog = (function() {
  'use strict';

  const nextTaskLogSeq = 1;
  const TaskLog = {};

  function observeTaskLog() {
    chrome.send('observeTaskLog');
  }

  /**
   * Handles per-task log event.
   * @param {Object} taskLog a dictionary containing 'duration',
   * 'task_description', 'result_description' and 'details'.
   */
  TaskLog.onTaskLogRecorded = function(taskLog) {
    const details = document.createElement('td');
    details.classList.add('task-log-details');

    const label = document.createElement('label');
    details.appendChild(label);

    const collapseCheck = document.createElement('input');
    collapseCheck.setAttribute('type', 'checkbox');
    collapseCheck.classList.add('task-log-collapse-check');
    label.appendChild(collapseCheck);

    const ul = document.createElement('ul');
    for (let i = 0; i < taskLog.details.length; ++i) {
      ul.appendChild(createElementFromText('li', taskLog.details[i]));
    }
    label.appendChild(ul);

    const tr = document.createElement('tr');
    tr.appendChild(createElementFromText(
        'td', taskLog.duration, {'class': 'task-log-duration'}));
    tr.appendChild(createElementFromText(
        'td', taskLog.task_description, {'class': 'task-log-description'}));
    tr.appendChild(createElementFromText(
        'td', taskLog.result_description, {'class': 'task-log-result'}));
    tr.appendChild(details);

    $('task-log-entries').appendChild(tr);
  };

  /**
   * Get initial sync service values and set listeners to get updated values.
   */
  function main() {
    observeTaskLog();
  }

  document.addEventListener('DOMContentLoaded', main);
  return TaskLog;
})();
��UMo7��W�
��U,�����C�����^�嬖0�\������+K��m�Ǚ�o�/�ٶk�f5�x�����v�Q���T[��5� =���.�/�`+�Zy�v�J��J�;�t%L� �/3Ok��U��aT�R�b�Tٹ���#��ӟ_>A�4�:׃�������5xR����ȶ�¯�K�$.L�3a،C�o�2W|x|8�#.����bB���Le�ĢS�$���Z��c�_1�!�j���������]q������.ܤR*3c�Z���n�ՑG����!�y[9�!\Q&��žq|
mŌ��.n��٩#",�����m���q��^P%��;�
r(7C�q؄!%�ҩ��˦s"��}�RI���ht�JF��K��΢�%H�פ�(��(��d
m	���=KG��T��b]@�1V
�H�����3����N��5�y�����&��p3e�����F�YR�:�iP"�L;������M�}��oR;�̤ �Mׄ�B��j�0�-&�:�+o�q��:���ib<�I8ϿV�(9�u؛T��IJl@�����ɻ�֠T����{�p{6j�X=�^�l
CuV�J���\��]�����������m�����O��p"���A��q:����6��(���l�?�濲m5^�Fiv��e�g��	6�~���Tn,��n׈�e�žݚ�Ql|��F͖���=wv� oB���k����<�g�qwv�Rc�')��j�r���M�Z�hu�[ܷ��)��}��K�j6���S��"Pح¡�	�9#�9�vbo�}�?����8�R8sj�q��G�%�
��[�s����b�ޫ2΂��&�~�Z���}~ ��nm�A@!�:|T����1:0�qR�U���~=G�u�u7��\��8>G�����s�V�Fr�\ϗ�lۈ��#>�n�)��h��.P��|仡gd�&A�s���!&�? �:��6A�e؂��4'T��
Y<'��u��DE�&�A�͛���o�ox�&j)��p��M�*⪡�O9�A'C.�П�,'����%x_?80<�$�!�C3�7�P��U�#�\�r���(���
o��L�x����
�샦��)�э2�0DW�qYF�N�u���@p|y0�I�{&�N:`ڿB⃍�J�A�Æ���kU��'ݱv��Ƴ����:����麣�>�g�XNz�x�hc��k����hJ�@�{0uV�'�89e��yp�襠�5W�8#��]O�r$����RO�6�.';���㞼m�ӔR*7# /'<K	;�I9M�2?�|#w���,�8n���evӗ��h<Ȫ������ZG�����	�yJ<��-�P6�{��.�Zf���VK�SeE(�$�y�����k:�?1��Q�ku�;�0���%K�&��0�!F�"���0�Q�7Q�l~��3�'�{e�H�“���p:�%>����;\L�b����Sf��9z:@>=4u���Y��h3��}�,C��0��#���=�f�t
_Z[���"�w]'N-��w�c�w~$|�MPŮۑ�e'��jLW�~
*:�g9K?�C_^O�kP{��`��t���y��>Zl�e��s���L
жQԢ1�>h�Y�8J�^'
�
�v�,�%�̘`�B�2���o�610�SAu��2���
V�\���R�S-��S���S!�),�d��aS �%��()��i�q�J�6T�S���BN��d��.���6�Ǵ��!D x��O_NN�y�]k�����[ܨ����o[��ټ�:{����I�
���l��'��S>gOاܠ��o�g�C?{J��m��j3��Tb�^����q���5��Г�h"������U�h����JC�Of͆hk01؛�z^�����12'q��PR�r_�l�T^9q�\J]^�NKd�q��� �n�P�Z�їi����Ja�x�^k��g7�ê�lS�>�u9'��†�@-���f��S~�N��#~�tSo:��evꩲ>ӂ=�ѝ>8N)4�r�Hb�BCZ�@���Oփ�"P?Q��������/O��8
�1�O�N��y
�BO~��=��_o�iJ�4_&��
����+'B�0��
�ާ��h�p�Gw��h�ag/�׆��OL���X�m����eH����Pz�ӳ6 ]���v�U���ٹr��N��y/A:���a���Kax�fw�P��0�K?�٧��8ƞ(1ҝ��)Cʶ���3l�
�/|>t�A?o�����&��"��?ݵ4��
���ͅ6�#
�g7�{�P����M��(>"�u��GDXg�2�{��T��"�Q�'��L�
��0��)+��>aVʏ��EV��&��dd�y�ʦ鳆�#�A�DK�Y�a�3�k>S�#�*2�8ض��ĝٝ)	����㌷|Lʈ*��ۜ�K���KES{���f��M��mo����A��	X����	m��V��Kg�����C�l�Ra�-rWI�X�鯐xbܲm��o|��(�h�bcU�_���.Y���rtt��!�����+I�)XP���h��=�%	��!���˂5���u�m'b&�A8\Xnlt��Ģ"g����5�D�i
���y�j�S ��4N���Rxy����[s�k�j�,ixRhI�G�~d��q��\Dϓ�
Ϻ��2� XktT*sV��R�4�F�Mť�!�k|��w�Gd�U8�O����?<�߅�LI�K+�s�G��XwC+`Ѡ��!�*��D/*���0I���l:[����Nƃ��쩹Y|.}ˏ�O›
����l�"H)x��ԮA�r$2`��c*�ۑg�N ��l0?V���򈙘�_����²ƹD���DwX��C�$��PRTp��r�3E�/[�*���i�rG�����5�z��=�! ٰ-��aU�-�E�҉�Ǟ���
���4E�����x��n��/	<L��%fg���u> �A���{x�o
�/˲�=��v�?ˇ.�3^D�hK�?b�D���V	0�BX�v;�@���,�FR.�؛!^ӈ�|zW�����W�J�2��'́��L�'+4��5���X��/��L4xL�S�J�����y6xN�}q�oX�1�w_���
�'��(�-�g�t�����*��#h�!H�cBX��=�o�ٹ"�����*n6��A��t�T�$��
�و��>�RP�����������^;j��BA���>pHA(=�JZwj�W�R~�� W��z�%c���j��Ljj���F��#�
!&�Q䢋0Զܯ�q̄]��0��&�V��rPI�&�~M�
G�~O���g�8�$D�S'5�IJt���1Ot“JK�z��Mԥv�#�q�iJ\۱�b�Tk�"��<\,�;�(˸���Ͻs%�%*�.H��Ve�P�B�5��ۡ�.�zr��-������¶m�%QlZ>L��f���� ����--�!Ut������`�g--��~A�g�?V�%z���m�����8�t��+�Q�9��1c�\��[A�b>�>���+̰�h3�}R���OO(��N��6�7��
"����5�p�kV�y@�;D����q��T0ݳ'�p���=�p���A8V��L����]�-�x�^LȬ�Di?\]��۾�Y~���8�����![X��u]��g-ɺ+�,It9]P��^dVc5�t��%��KZ70Y��`ۧ��ã�h��b�w)�ٹ/B���9�S���6d�m��v	|?i�5Wu�:�."_k�U�&|���g�yPe��LYÀϿpr!$��#����%��?�ȭW����$��Uf�sҤ��Ѫ浧�^{�sX`��IL~�x9sr��+d�>_����f�\�7	m|�����f����s6A�(��F��@8���z�O�m�%,��R����*�#���H�9B:-�����O[�܆]cV����B�����?�
������=w�u

o�3�G�`Y�vk��i�2����#�/�w��Ř(>@D_�n��T��k�B.*@o�U�Q�#'jv�����jh��.G�T����k�	i��Q$�wcC���R��r��P����}�M�ss�S�R��2���O6I���p����$w�Jߪ��q-��u�|v�;��Bn�x���j�����N�F�J�D�Zԇ*�n�E*+�A�R!�N�R�v��=s���\��Z���3s�����@�R}��zi�"^�(��Pa�|%��,*+�� �RE��Ҁ'!pb(#�`��6��J�X?�!�J�6�EQ���`��g�n�4pҰ��r�$M%��q%�-���(�C�b�f�N�!4}!Ζ,M��_��jy�3���b����������~l.�ӆG���el(>!S��OĜ�e����:�8��8�u��e��K���~P�����m>��}�P����=D��G+ǟ��ںaYr#D�w��f��Β
�����!72���A�(''m�����-�qJ��3�%�GH�m%�{?�~E_��s~~��Uu�i�spm
�'�	l�̾�˝*��q��N��7!��:8��S-���z�tq��B+[8C��c�i��(����ٸ�<c:WF�J��e�835���}M|���h��/ܫ�X{�R (mAh������c��!�>5�.��긭������-t͆d���F5_qc�M}�I�%kC�
 +7�l�&�᝺E��pKl
V]@�	\F�%�j����O���)aaq]8^��0O���M�<$�næ�pPZ��u-J���p����	��E��vc��d�xp&��H�t�ѭ|�o��yR� w�L<���ɘ��w{��)�U�K�f�~�Y�pW_$��3&��2�
`,?����Jt��m���E�w.#�-:�7\A�"���O��&	N̸����Q�Q�'	elN�fB��� N���P�C�SJ�{�X�c���4�FM��(�O?��2��ҵUD��nS
pe�&-s��v�a��f��,qC�%�3��f��K1~�T�Cj4c�}C���_�X��U������?�����q�/�FM���K�0S��C���{-c�	�V����eq=i
�}����i�5����6�
(<X����t��\F/鼞��(~��`��O����5X�9'������q�'H�����hQC�˖����Nφ'�<}=�g|Ʒ�k���a�3zmxO�"�2�X�׃6���_/�'�7�$&J�8��85Ӗ54{��&Fo)���;6�_ҹ,�Sr�z��'�0�_��N�D�XB�����qD�H��6����L����@�1�ճ�F��)�|�@�"��Iw����Ж;A��F��
��W0p4�U��E��DՀ�|^�NW>���.Q��0�=hfKZc��լŴ�;^F.2w?��O��
�ۧ��q�K-���,�q`�Ҏ8��폩ĕ'>����Ix�ҙ��U��,��y��!�{Ή�؈}�FNzL�\B7i��o���޼����FP�3u����"��
�����M�y�\g�a����ʟ�3�'�sЮqA�[��0��� ��J�(b}��=hB�^���N�eu��[ER���@
����j�5�0Pc$�g$m��/�Iʏ��[��7�%4Zߘ�_S�U>�0���h{͑�����mb
L�^�
�t�`ط���G-���][�s1�K-׮�I���������4f�	��ڍB��	�4�=��b:�p��PGg��?���]�n�0�a*�['"���*)�@B���{c��9��0tC�ر���w��p��zw��By��K`ŧP�O�_�(���+x���K�	X�5��1���E9�
��
�c�7$��K���w��Kٛ��Q�ߍ�}A���a����~���W�t��5��6��
����\{�(I_�=7Q�?��<�v2�pCWG��)���?E�z��<T�3P9��p���m������ރx���
���F쒩��[���P�U�W��怞��kq6#͗:�zoE�����|;b)�Εq3z��U,7X�����=�yt~3�@mvdz�4Ǻ�����@���u�V�i�ᠺ��ITS�N�$8XZZ�
r���JY1���MP���fa�=�,vko�s���\�Y����W��r�V�r��\$��6U'B��][o;~�X�f�4J��U[Q��U{zx8Bm�,tQ)U(R����z��N�Д�pI����s�Y�vdU�!~ؔ�����L)
�"��ݍ=�/	h�,����#S�l-p�~YA&�c����9�6%L�~��C[%�=����[	��v���&�0�\�}XpU�'@��J�5��|%9�,��	�g7h[]�p�>�${�vv�5C�2G!1�
M�$vz6�sN��z���q�L��'<4��t��ppg��yexߦ5ꘃ�>������J��s��E�3��IYZ�g�y�w�mzA�w�s�Σ�2Q�I9�P���T}/�pJ�$�k��J��eh��2HS4���C���eN=z7ػ�
O"]�N��)��r��f[>NK.�y��Â�nąk�ͼ��u+RyN�–3�WC�$�0�9�v�:�V��H�qC�#���e-�z+D2L{Z���@ܰ1�h���_T�I	�{���\���xP)	���e�/e�C-��h�N��Ii����!��b�Q$d�8&���\3K��^�%���M޸ Q{�
9�A��J��1�Z1�@����nx���rV�r3��� n��l$٘4��fS����bg�^H�;�d�!�s�XV����:5�������.�g�;�3F�,�+\�e,�=�;�D0�M��O���艢��<Y�V��8-Rj?��2�iɪ4�tD���N�De?0������D��-��nA�kIq�7�do[y3��`���Uͪ�%S�� �9�%�”�`6�O�S�i.r�s��ͦ9�%�ȁ+o�l��rĜi�p>e/U�"ɬ�`c��x���y��x�ؖ����λ�`�W�ܯ�9S�|:��"E�k �@����5�MW"BB�HsO�vE�����M�4���L>��Ah��?8�D~1�
��H2�b�RQq���Bw�`7�ꛔ.`�y�������r�/�ය�`8����qGxJᾖ	i��Q��aJ��;`ԊYl�x�j	%,��\
���2�����-�e�W�~$ڹ��8��I9#L"�%-Y��	{���@i��-x�T>U��T�7�3 ��)�/g�mt�!�ǟKN�E)��Ó�J��tՔ:�礁��S4�������YM+[��H�g�x�tO@?�k^ow����O�L�� @6lTg��~��b�'u�cѬ&���o��!1���:A#U>p��7���@�W��`��ʹ������ߖY��'��ێ��PwY߫� e�����z��5{�-���@����B�|�y">n1�B��~��Zo)�%���ro\�	��ɡ�l��8;:x�����;�����d�<�VM\B��g,�2�>=��q��s��t|t9����<?D`�y%�m!�1��\ÎX4��l����P��%	3´1����"�I�k��K�"o��jYk���dRa=,d�F��%n*����)ߖc*�[_�����JN�R��\�����u�^��E��k^ا����qȡ��ס�%�-�o_��L��9��}��f61�]�pg'����V����uxo���
���|C^�W|�\����:̈C���j�t�~�9�|��kD�)��u5�^,iȅT"y����!���_�-��/�52�U�3Ы�\�(�����!����mۣ��Ȫ�Ce�m�G�j��B������Z♗��|a9W�c�DF�ЩPv$Am�⒢R�!�zo#G��Bw�#]Q�0
�]��k���"�1 ��hyB���/
QK~k.b� ��RK5��~D�akE`8l��\�ku������ia`�)�؉P5D�V�m*���	5i�׺ck܀���:j+�R���$�U�x�?�uR
��x'�9��2[E���][o�F�+��eI��J��[)NJ�%2d�j! Nb��a�y�=��+6I(��pf����7�W`��Ǣ>�jBN!�G�S��"��h���{T�ӣ蒥��N-�9ت�Kw��z3��O��z/����~{�[��=��^X�A�В��W�)�rt�7��!)�_�
d��Yw4���Eq�ZMa=JB�D#��$Q5w1oPB���dp�DB��f1�$(�ʆ-��IB���Gb��-�.����e��5|;�Mp���d�s�J���0w9�#e�f���Gx��{P{Dn_9]�"�!mG�#�qIb�j��w�(]��U&ͭ��h;F��6�(�R�D���7��?�3]���6wN;w�<rI����p�^zI�J��T���4��j���y}�����YN�F����>��������Oov׸���i�[�����λ�����|H��Q�VXx���E^�ڱ�o��qGME4^�{�l�I�v N*��di�*K�	;+�?D����BzJȹi�$t�����w�)�H���6J;�����ƞJ�!��a6����
n鿮qc[��%y�c�C���j�Dq#�'�ݓ���'�j�-�<>�YF��L���7J�I�OK���'�RLҕ�=k""��'ާ�sBB��9&�h$J���W
\�%=L�ِ��0BxK���OΡC>�j&l�UH�	<	��
�n�j.�j~a`�
�j#UЭ���#�T��Y�S��OE����m^}HlG��~�̂o��0�"�P*�$xRq���	�t\h���\H'�(�Y��ߞ��vH�m\�Ta)�Z�m����c�*�t���f�T�N���k�Y!dž��=u��$�h�8I�4�0�޾T�$F�D�C
|����\?���"��ȍ�%@�	����Z���4F�)��n['���6	S+��Z�-@If��ڈ	Ku�C"e���%-�U�K��q�,��9��a&�f�g�Z�\���^&����n��XYÇ�B���Xv��G��c��͓L��T���"�{�uZ%�J5D�k�Dڽ2�u�zR��O�ԥ.p�]��a�,9�BDϣ�]	�{���OA����g*	̩�<r.V�Z>��k*�ih��}�9��)�1h�?��_�23�(V�n8�tPXxY�)�!:r�2��RhQ�z��՛,\R
߉�	R�6�Z���C}��F4�_UQ�2�,��+���#�I�7i��̾H�%��ak@�w���H<b��4kD*\���3rsw�*|6Ke���
ņ��J{U{޹�bN�m�2��ӭw�a�p���1l)�5�+��CG��ƈ"��=���s���9
M``y�jw�;��FW�
��w	7�k�wڹ��NH�0�aK��ӹ۹�s�9���\����-��w�~
؉Kw�~�s�:}��|<�clɼ���>�#��w�
�vw���^�|�?�V��c�l+�fwK���9�xA�Ln�D�Xٸ�#�{�:4ݛ�n�%��b�cތ����}o�\�3vF
�4Xq���k��{jֽ����z�6���
s����6BBHa��Z�wר�Ĝ\s��f.l�l}E�!�2z��_Ǿuq���j�s�/�w����E���KTI3�V�g��K�l-f�����S�qV4N?�'}`^Kn���fr��������>j۱=�[+�4���zcf���T�sD��}�%��9�Oc��8���Cp�R�~~%ڶY�:���e��m�z��W�ݽ]�A���G{�Xz-�>x�+A��vO��r{B��ӏ��EE��6ߑ6?)���n'3�?vP������]KO�0�+���*-H�=T�H�
�^��B��P$BW�p��I���;!q�t�T����|{<_����I�d�V��\^:�\]\s�v�]�^�Rt�q"��[��r�-D~.�F������:��|� ��p>]��uFm��H x�J��V����3+��-5c��3��C�~ƌ�5`֛G�*We�,��J���7���߲�Q���|9�U���Z�{��msu�������S��_oY�;����/�=��S^�
��0y@
��I����mo�^Ԇ��BjQ|N?�ъT�R�qԱ�%u���)�n��Ĭ�A��ҥ�8�Wj�"��އ�n�u��Ԝ�kzü�j�h��c7��#�t��Ti+1�ɿ*��՛l�����C��VHHq���lߛ��pY��fo��s��٥��29���L�X0������P-�R:a<vU�]O#9u�޿�B������2����h���T��'��"�ʀ��-A�W��nx��H{,7*+/%�)����}�����*za1Ddk�l���eЪ��@����+>�]�a2���	�v�K�Xq�j�{w>��JF��\T�<�l�6O"Aͳ�S#�����*><c,/[���NS���\Ɩ#�^3��G�v0{ۗC��`$�@����:�=��l��;�#!<-�(�{�5�������N�M����-���^%��=%/�኉�t/+tԸ���A%e�����J���c�T$&

j�-��>(�o׫���:�W�Tt���b3�D�V�g�v�1GKԦ��OjV�<y��Lm^wGR���2��'���]mo�H�ίpu���"�ғ�����Q��w���`���1ȘK���~;�k�mZR�O��̎w�ݝ�����ȟ���� Ve
���X7+��@rˋI��L}0\{�E�k'�I��zz�����=+V�&T�S��<7�=�n��Uc�+��ա�p8+�����r'�#�~��TPq�^��3����`��a�yx�~��!lZ�������v���m)_�K�S��z�e��̻��+�"Yy,�B��
�`['X�M�S8�ޭ�\
E����CLf֧d
I�I�>��)iQ2��ae�+�֓ʨ�f�1���0�i)J������;ze�БPQ�c���x\�0f>���4�p�gPv���	�~:���'�jUXЄ�꘶��	�|����]��(Ix� �u`�l�-e�4��Ao��IL�p������*f��A7���Uڙ���|�V��k�	��@=�dm���$z�[�s�� �,�ܪ�E"V\]f��&�%L��S�|.�-^ֻ.{tSJ9��Wg�ik��q�@�]$(�gՋʔ1�l���;w3M��8l�T�uQنA?ә����"L��O1T����V�(�0��(#�C���?�y�!�Y��xg>$D��eC&q�”����p~���/Qګ�#L���\��m��2��E�#��en<n?����r੢�΂�6Ji�A�lSd0#4	����dW
7��u�=���cN���ֿ/N�����ٗFI�^�����	@jV8X�E'�����BE�"P��3b����h�G���p||�?��G��Ɔ�՗�G�m�L�v�έU�I��x�����!�n3�Z�����R�F6���84��
k���g-9�5z��)Id�I�J��Pg���Pa�
c~��{H�+f���^�gz��8�~��DZ�t�<���u-�p�P5������~{Q�W�)*���)Ը�S���{{����	p����a�"I���C�D�@�^/�	~���j�'L�<��~��Ń��˗���u[.�%6_(�5���[�T4Q,�tY�D����y!�;D�}p�>��<���[8p���}"��1��
�"Nk���x�U���j5,��_����1p��W.SM6�u�#�ۇ���)��!�<x�E��ؤy�07�!K�pC���,�al�t�����`�Z����	�G6�Qb�˿�6�'ĉ
��|G]�>���%jA�-h�c�H!�����@�t�~�y�ʵ�271�)������`�T'�;Z����m�aZ�XV�n���Q��M�p/
�o���ɿ����jUW.��Zޖ�\~��S^���"��&J�@�SU{�+�B����\Q�L���z�s�l��]�+;���T41����h�z`�l�^�m\��r�-�)��+T���3dB����9/ȣ݂��Q�$��V������?$M�Q��&�$�3m��{�y�tﻯ�tW�FY����i�w�w5�v�Lptһ����7�M���;�U��)�oBr����xJ�N�����
��P״�gmTOǃ�=���g#B��2��ǃ0
���tq�����<�=�J�XL�Y�;:J��|���o���%��,�~}<� 42V��ѩ��7`O�BАe���:#���	��L�c!��6,02�#G�wCӈ�n��PyTA����K��*��a5�)�
�P�h7������XLk�����M��F���"��1��bl@l���c�Y�zV�GiB�n�$�=y$�yX{�P*�cX��h�[��t7��3~���0��|g��ߥ8�U
C���Z8��,�(�UX}QR�i�-=�$����yL���2J�b|l3M�;�%�3�̓E�'Llg��8�al�(�' Nu2$��̧+��n�4;��"0&��c>P.CU3��ϊ����6&
��-�e|R��Đ?kK ���6�x��<%��i�8^��j�k�q�&����~���&t�(�0�_k�&��%��1 q,5�qJ�'���/Qd�����9�P�L Mr&�(SHU4�}���X�Ip=�M�Q7�vg	>����]�N�0�
oI$�\1����C�Ԧ���Ŀsw��g'!-C�V���}w��s�}�A����)?5�v������j���=��G1�=xX�(;7�P��k~@yF��2�Nb��f��b_��\�-��Fi�E�z]Oءu5a)֒�q��D����Ƕ_�2GVA����[��槺갤OdH�}�ѽf�_�E�>�����2��##])n(g騧A,��t��Ä�i7�\߬8�����F̊����
Xu3��y�;�8�֯f
Xg��u�iڵ—��-?ɗm7��jݣ���R=���>�%=`L��W�j�]��mg	 Q��)�^S���
�]�h��Y`J�}��琔����O�3/\�g�;�h�k�@�	$���]TYD��¯�%qAN,=셌V��OǶ�������Ćm��SOߖI���[��^�^,$O�S~��ȟa�y2p�:�E�HA�"���S"�� ���97�4#8�9���J�S�����բ�i9���uh"������H���@7$���F��F��sR˰�ҥ�w�Rs�~��cB��#�{��&��Thq�m�S+�-�]P������A+P�`N���m����>)�1�0���*��z
�-���Z���L�p��"�mgrb���]mo�6��_�b���EP�ˀDq�lNl�ξ�b˝0�
,������o")���^�ONl�<�;�ۣF��Ce��S�@mB��]���9���D���0���;��`K����GS���q���D�P�\t���=�i�\�Et�,]��o�#c�ސ]Y�~���I�E@U�R*��]�ථ��/���˱݋ji�̝����'��^j�޹l��b���8_�VQ�����"p6Se�i^@L�FӖb��5*ڕ�U�`�N�B���J[$Ϯ��m�
̒�5���U�^��6n�%���jp/�
���1#���AC|=Ep1F�+��x��_<#ք���N5�m4��d���Z�	��"a�f�ۻ,w������6�w�ı>�L��}�\�( ����2��5�xd��ɓpg�Z��!�ܗ˵QLʨQ~0�Bf��6�S�{͒�O�1��
�K��fP�QN�BC�;��9郮
�Dd_c2���+���*5���� ��
�_h���e�+���@�ވ�;�G��5S,�d�C��O���^T�
,/V�Z�sÖ�ex���ʖ��Wc�7(��VJ�R0����`(B���4�h�ՁT�+t�;��N�Nl�n�r��$�J>91R�тe�X�2Ȑt:a���1	n���Z%��;����^��pC�~�?�*�_|ϹKf��<�`�D��'�vG�\X�$�>�����@�% �e�*��E'�x�L���2���R�Y���z��(��*E\%ψ�����Q�a�j�뎻��oA�NF���_����[��L@�+�׶/������m8:���\g9w��� �^.]��: ����m�@�"N�mFO��n�g�b2OQ�8R�x>���9�6pk�_���u7׎Gj�i
�ë��Hd�__�īE�ɗ#,jԵ�-���d>GKt�� ��4x�-���$2}�;L��ծY�``��T�����h�	_c����r��b˵5k��ⅲ���}����S�a�H�#^�i<Iќ		
f�t�h�~�/^����Eo�����IN��I�֟����*:�()-{�5�y*�I[G�m0����e<�a�mhw�sF
�����
3v3����ExW�!*+���U�Ԟ���K�|wA�F˦���i|�ώ�z(��q�R(P���
GCkCw6���(�F�'�H���*]`��]�-�;q	o�b��a傼�l=�s��f��Ǽs�[�$�m��Nh`�S'�R=�M�o���6/s;�v��;oK���W�h���̽��2����$k�X��ϩ���^���}�ж�Ky�w���g��
�n�u�����|��B=�T1�}���.�+��c�)�ޜ1��;�����W_�m��޴�Ϲ�QX���� r���?i5'
n��lFH��u�~}��o�{�[�p��
�*-b�I���H�qz6�c_���ko�0�~E�j	
���R����R`]WUC���t�T��|~'����	���>���综�6����v�1d'��;�϶���)1K����c�_��3�u�%&%��wD�g� �����K=��#��x GO�n��nj݈�	9��$�TP����1�?Mfvq=t�9v�����V4�y]{��&�u.ɤC��@O������M=h��s2��j��fB�g�Y)+)�|\I9�J\�J`�l�f;�H�!B��+�
t�ǣ+-��2KO�0Wj���6.��0�T8�x�g$K!�Vؔǣ	�pEA�0/|qb�gI�����zQ�M%&���B�Lc��2NY/� ��0�x��_�;����E��W毐 ��{(���Y.>����B�:�e��mѫ������DM�����=�Aw�N�+�۴lw5e���n��=l���x� �E��b���گ���8��{��F��;����t�+h�Ұ�
z�A+?I _�G�a��Տ��Ul��vmϵ�^�}h�n�ɳ̖��P��͟��aj�v����{<�@7Qi`�1�f���͡��?f�:�wc���?'
���7<�6Y2#��!
�!#9���>��]��,�G�	��Gz������jN�U�=�n9f]5e>��f���Ybei�:DSF���d�9�
4u�p;AKGPSs��a�Pb$��}�>����G>~1���#(�o�Z������r�o&�s����*�S.
��-��Z(�{�!�I�	��|n�p�^'H	;�c����.b>�S��X=�-�+���ǖ�	���фT�y���Q<׌*��6�ەp:�5	0-cIf�P�ǹ�f֫m�j{�6��n��
���>G����W��&)T��!������\f�j��n'6�8l�Tf����n��B�ள�wfT�;�NC�(-QUX*�yFth�VSO�T疍9��������q��B ��B
�z����E���i��P�����RL1
әx�^���D�l2��"S�"Wr�Od�&�m`�3@����}B��U�EHO��������}|D5�Hv
�[���ks�6�~:����B'�^f�>wΖө��cɹ776$B�TAҎ���.�ER��6��X�����d�m�x|�*�o���V�LV<[����*�yH�����p�3���p��OnrF�%)VqN��FY��x�=0���̟%'��7y�0���¶bE��)�3Ĵ��4"q
�9?�|��~ �8a�`���w��}���Ǜ�99e�*���lL$Od	�#(�Y��`���o�nh��?,x�e��`ID��4�e�.�8K�y�,�t.�]�uV0rD�p����Co�p��A��YZ�8�A!���㄂��Æ�,!Q�o����H���	D��<%4�mN5I$��
�tM��i��#Ma��n	�H}Q��ſBv^.��d��	z@��Tғ�BM�ф�-��thq���$��8/n��\�|��LMH�$	�)lW�1��ѬԚ��͟�i`B�A�x�&C�>"��EM���Ђ�L���Vd�A-sN��Ѣ̳t��h)QR���H�:�ˤ�5	(�=ɢ'ݫ,�M�GZ�L�)�?�>��p���㌭�P�7d�r��"��d�i�P�`4�o	�q�(�u"J�UG-���O��㿿_@��Q��H��a(^o2^ t`��+��}3ÙVT8.W"�������"�����RL$R�e~Q��ƞ�h�h�{��~f_���2�g����ם{6<����M�T�k��K�(J�]3�H��`؟�ֻ��x�m]�V#ɿ�#i��)#���w��~�6=Ϝ �o�~Nʢ�H�hY�p.V�����BE��><3. �~�����GW=�c\,V�lF緊c�Idž����,j���(l�-�![?�`t�a���$�b�	�&�C1Ls�,��#o�@yC�(2�l�8@��2��.!a[�<'���H2Ț�
ٻ9i�B1�W3��P��1YpF̾I�`R�sʟž���V!ݙY��K*��YdB�}G��И1��#��rd[�aE�p�<��?~��L�3�Ѓţ�2d	#g�a�厚�3Fb`��ĉ�%�ªR��v$j>�C�?����#�U2i���yi�S��Y_Ȫ��VjvT���G���V|��R�?���"ԭ��ٯe�Y�!a��!�¢�p���h�-�)���/�*4�Ɏ��b����x�m6?��w�cwV�Έ[’��"EUJ��a��[�E�N]P�W
{�"��=WĶ{�z���H�7n�h1N"�t��C�W�!j�ñI��W�ӆ����l����-7g�n5�j���UEs���a�F�!;��Y�9"�dY!������eās<\uNz��@��$�A��CeU��
M,[vicK�;Q���`���{�ն��	k�o��B+���>a!r@���
�����$������9�:gh�
�6e"�h�X	@L�J�a�'��Ө�L���)r��o��m3���2�6m��qer�;��\�ӭ�����#ۓ%��Ά�֓՘�[��[��fR(TU�2���3y=7Zbo5�>T.��t=.�iL��ˤe��U�W����]� ��A�s(�/��U�a�it�s
5r�=	؁{�a��0N(T"�ɖGAX�V��D�SJU�{ߗ\T55�-$L�;�^Ą<�W�.QtQ��5
e{1m�#h��Na�
l�i�ֆ~�S�y��Tv'*l/Q�E�%���-�
�?��ա��v�c�93Mxh��,��iVˀ������Gxq�`m0�vK8d'��U���I
�����Ǜ�`Q�E�F�3(�����	��������SW?�_2�
�L\�S	R[���X�U����D�(�,>D��`j�&$����ϊl�%>�����D^z�X��e�D�O�"���m�	;�&<���H%ͺ����ƅ���Yl0�^W�m�[����v)G��YɏUu��}��g7/6�]l4���c*v:6�y����G6�`pN���T��	2�W��\A��QJ�wf���h���:��V�LS�{��α\���_,[����g�>�[g�x2�΃]�C��'4�<�Ԫ�0w
�oC>x`��b�R��\
�`.Fl��]<������d*)v%���-�:xw%ۖ�í�6����Pa�\��n���w$D��e��\�P�{vv��&%�d]����j�5'��*:�䅢.LX��LՔ	JJ�L��̬��g��f�C5��kgpL��s�WhV��#�d�<�Z=���
}t���FLc@O�^��;=�`��u�׫�D<�),�q׈��w͌�m��`@���G�`iXby�1i	}���|�U�Qb�UI���M�9��Ns��9�]������6$w���`m�e���`��)�-��	�Z(C�����ŀ�J�✬a9zKq�FrG�d�����K���>k.]cW����_�󚃯��J�ٮ0�p�n=��u�^�n1���Bh�K{�TԈy�e�r��S�^)`�.�h�(���Sќ՞A�8M�%�Վ����������@����М3����.of��*��Z�����y㑔��N��MM�8��\DN./fח綠
�WkV�:�^N~������v�� _G������r]�>\_�\ͺ���z�m*���0v{D��щ�.>��M��.mS�?;�t��F^s�����Q�uV����(k��d��i�m�?^�Ί��a���ٛFl�1�k��y���˰1��5��½g�i�Fߍ��ԑ���tj�U��A-�ۊ�u2���.��\�*�iv�b�a�u`ݮ�#'u0�c'g湧$匀:��$��%�f����]�4�d�}��j,\�Q��^�i\h|Y g@=*��^&���
�2.��B�����v��t}X{�r��3����hm�7��^�x�'�I�'�]&���q����ۆ�'=o*ړ�I���l�<�ڎ�KQS=܇
�?y�rR�w��/Ej����' �
�U�-5�^W!������ـ�
_B�
k�	�r��$t��.�z��,K�Q��7G�B�Vc�iBRQ6c#�b_��5<%�A�
$�X������=���?x�~I>���c2|;���f����ù�^J8#&U5a^"��Ǫ�H�]�h�Sh"���a?{�Ҡ����@k}�*D��r0�%B��P5��8:�Y��sŪ�n�j�c�o�!f�Z��w��ʶ>2`������7��Z_s�6ק@��5鄖�8N�Țsl_���Dn��f4 	�H@����N�{)�WDŝ�<�"�����bwr�C�}�N	�T�棙��NV�I��F�#�f1Q���S'S���1�*F�-ޡ�D�`&gc;��M�"Aة#՚�	�:~$xL�� �g�'r�K9V�A-�)y#��H�NAH	`����9Oׂ�"��''�6"�\�,Fg�����1d�$�Dܑ�`�~F�I�x�TD%������q��$@�a�nq���Q�$��"������,	M`���W�׋KRF���h�����S.��<�"���u��O��P��Iˆ�@�^�"���H� �K��<Lы��?G#�� w��D���$ DM�<���é$ST�20m��:��Z#Ax�&�������+��MV�0���$	��8}蘒
�O�6M�F��C3�2vzK������S��
�+3h�f��'5�S�	R%$(�' ��v�A@�/h��p�L)�-����i�"����Ѧ���3Rs&���y�P�,!!LӕcvH�P�2����#Io���)�����b�����D����79���X�h�z��_�@�s6������24I3e s�j�5��A�����
�®�VĽ��yeP��Z��6�D��n����@7���=/���6�b(SAzAz7(0$�<�ʠ8��+�gL�Xb��>��<E4B�<3�t��i�"׏(�NN�g�)��6�1��$�ԟ�s�����o>�r�0~��3y�f�>�C������ch3y٩��`m�v�fZ�!�)�,�0�K�/Iܟ��l�ԃ"��!%,�5���Ζɷ�7�y��uM�,�m����A��>�����9z3y��z��m���i^��4�T;������4�I�?�T�ư��Mƴ$�@^�*�$|]���:9�H�V,�!��9p!�h��^�z��
[���d(���G�Q4�I�wv�_�K���,�Ӑ�w���>\��N%Y�Aa���qF�f����gJ�~�:�������ܺ���/��f��N?.=�rVrɠ��T�(�~u��x�aI�]-�,��f��K�m�9�o¶=����3�r\�Տքˤ�����h�<��>�P���$�����Z�T�����K]��1�⠿�E�vzi���B���Rn������<��
�<�07=�mK�O�0���'֙�����)K4�n
Ҍ0�뢪井�訡��i�ۂñ�gP�K��H�T�4aq/S�!C:��1�eEݳ"(f�#���=69�8���*��:i֖�3���hp��`t��!��rZ���
~C�V�������2<�m��H��l�?v1t�)_Rm�&8��Z1P�������R�,0��ʓ�,F�V�U�T�0f�Jr�B��V-�'d�*N�����������cs�f�t��^�ҍ�P�=שs|�v�C@�:���i��
K�?R��Cw֘Y&W3=��y�B�̋)lf���N����^W�AIϘ25Hj�9�AX��6�z\��o$ᄐݝ�wKҳ�4'ڹ(���$��;��#�$���碫�C� ��Y?��d!l�L����fT����g�ңmI��RT�D�DtU�zM�-�>�N��^�Jd
�~K��0o��4�Ku՟MCdM�e��zƞ[8e75�tZ
���*�u!�6�L��=��H5��J}l]�W�H]R�L�/����O1��o��TS��k�䠈�>�e�Yw�'!]e�d�ncDH��J_YT%Bv\]���_d�ʾꠅ���A=�6�o�i�@W�n�Q|��k��zk��:���tR�	��.[_:�����Q1^�B/���s�N=XN�ꗏ�>Vr1�/�B�%��J�\��
;���r�P�7��[���\�P��::8��I���Ǐ������[}�Q��Y�^O���[W��o������~���i���]��>AH�鐰�[�%��Z�jRC�g�;�./�D���ina�}��������,��7I�w�=IV*jO냪�ݭ�i�*�W'2$�
��8<�y�C���kk���YZÝ@��q�'���iҎ��Fim�U
NUX%�g�g�.��Fʹ��
����b�=l>_^_�|چ0� 4�7����+�v���r�r��Ep>)A��o/?��l �e��&e�]>�� �ؔ�mon��˴�}}Y�!�5�d�f�]�O"�"N�Cg�3�Q���L/�hh�dƽ�򺸀�p2��UK�Ç>�ش��o���H����1$������6'��R�
�3�~co��湖�.`=�	���ٴ~�����9�����,!�z�<�O��8�֛�֡��S�ٷ�5ѶCp�Cg^S�C��5���&�p6�"6� 6q̍`y1��1M��9�t����W�{ؖ=��d��߸5߆�^�����/�����+��VMs�6��W�L3C�cAI9ģ��H&�خ'v{�t< ��А��j���H��(9�E��v����)\�j��|a���7��a�p�Ъ��sgJ�E�ȀF�z�M��AP9؅0`��)B�2�;WK�3H���jb�@(D����[H��=R���@HZG��|���@6MONFp��%7��%k
�$�BZ
���,N�N
r�R��O�d8i
�����T�s!1�vp�SȝL�P2÷@Zpc�h�yk�iCIc�K���t3
�ܬeJ<����W�����2S+fк�Si��i�����`�X0NX���BM%���d�7��[���
�3����1�"p��FA��N��������F�v�p?q�g��G����]���h�`�,�P��ؤĐ�g�=@
�%�e)��7��A%Z�踽x)�eB���u��-�%�k�
�o��0��n�k�ϑ��1 �W���{*���	ls�bܸ�O��
^���������(���qOMO��b�m��<�謎���Mʲn�q���5�z>�q�z*�$:`o��;���v>��Z��#�eߏ�:͉o�h�h����Ƣ$�ȸ���H�~c����o� '�&ؘmim�_�TcNwљ�@����	:�Ti:�8�<I�E�7xr��ȝ	u�M�n2���ֳF�2R�w8f07(�/T�&R��bAA���֐	����5�D�5��U�Kp�J]I
��=&r�S?�ta��2r�A1Z���(�,�8���5���:m�k�?���3�O����k]��`��!
:�Nn]���qx{ġ�����9]��o٧��;ꉲR��������FSK.��YK}V��Dv;�a��@��D�J%\j��A�\%��u!~Ta�T�Q�Nd�4~�b[�M�wW���Pf�Qdq ����|K*�e��W�sW�A��)΀}��^����!����ͺ����(M�M�,ޚ�Z��;�K�]=��?8��3s��H-
��mȒ�Q^g/@/�[�f=����/�o�I���v)�p���m���Ҳ���xY7g�Pb��/"���۴����uʐRU�2<�s���Ů~�i���D]�}־�vf�-����S��kߍ
��5�yIz��Y�NI}�W��1�l6�,Q��
R�" ڇ(��R�;���t��o�e�`�c��~�=��۩�:��~±�	��/%�~���{.�K�ԏe��K�7�<��B�&����(|�0KK#�������&�qH����t�}8��D��X���+8#h�X��^��\H���"	���<-�Y"�!�1�!y.B��G�����:���gRMb�������
B?���!��XJ�#|<:8�tvC����\*�B�}��ttx^��W�Gy���	�����Wc��%Y�	��uS��2�C<�3��;A�)��(����f�k��O��28*�r��F1��0�B���v�x���O�z嘴X�)�ͧ�
�_J��!�g_7…x�-y#&
�ӵ딾�;���M�2�&,pg`GL0��SL�™�W��N�gj0��^
�����'0��h�kߗ���"i|;uFk@g�_M`�ޠW�����R`�6kr5�(�7P**fq�~��X�5*���ǹЫ ��8p<M1T���BpqxA%�sZ�|zx�ZI�W���ٚz�a��N����a%�j~^	�{s}진��1�Nk�v,��[z[�Ĭ��B�xbj�K�q�R�\Uw;�ϟ��r���˪���`�.7':\y�a�U�<���/�ꭇi^_�����K�vi���_���}�W���0�p��F��^
<�F�
�c���?r���D�
C�3���L@P>V�!��[�k��e��0��J
]-Į�h�Y!+��q�S�:��M�	���~�8sVI�^j���
�8X����Ho�b�=�������ޭ���q&ޞ��t�|�o{�.M�N&0wm	���pX����P�7�\����\�_��}L��EJ��]O:��-J*_�������ʉ��iv�$��橑��$i0��%�ȕv\C�$(+�ͧ��������H4S����P)+XH'�V�H4RX��*	��0$�,�͂3�qLѾ6�5�t�Ϩ��z�t��3u2Eo@o��hW�oC,+�����Iq�e�)[����'l��}�y�!Ŷ�F��[����֌�Oxy�2�K�*��)��݆q��U�E�WjufF�S��(#p�GHLqDLf�
Ǻ*ǘ�/Mu~�]z�w��e9@^Q�I����ޝ����M�D8d�<ÝQ��4h��T�8\�O��%�Ƈ�ZOQ��E��j������mD�^R�e��/�%��$E|�0���f6�Rcu�Ն��9�'7�f{��R��Ӟ��G���,絡�#u2���ʌ�Ѝ~m���InLXO5��5wގ�R	|���meKH�
�49�w^�Ӟ�Ù����>:��ZcU�y�~:�s�#���0$��	6d���;��;��t�'�W­��[�챨5��λ����oC�p
�k�[iңVr>�p��y�ܭ�=sװ��֋"c7��r�,C�z���W0�Z��_5gf"������2��V��9_j�L���Qծ�Ř�݄���l5�W��6H����ȁ�fV�'����Q���a�d��]T��"~���R���f���<�[�Ȳ��W�g��
T�E�Yfu|�c�~|!�@$$L�����oUw'��c�9��{�QIRU�]]�x���hl6��φVc��t�rss�R��Y��9|DU~�T(��Af�O�><�����d�#Cu@�绔?W-�!�HW���3�
�S�֘�ت�x#����aj�+�fER(�C�T��z���|f�q|�����H�f�ީ"�n�Z�= .��r�Y��S�r��R�,'F�+�K=�w5�)��l���SC�-��Nn3:���@�t���#5�_Ʌ3��f��H�T�'��G�n�C��Y�q�"iZ�@�QwL����<y�8l��1����9c`<�IwFTr�pY�C�Ԩ�0��h�M�)�o�Ĵ��\�/Z7-b�-�_����ծ㳂i��!�	�LV��څ���~��WK����_q���8��Ru0���:Qǎ���Rb�
��N�^w��`��*{��_�#��ج�@�\*������3a@�1gX'��"u�a��a<ʵ���7��YX�@]����,j0X�Ϝ�M���]�^�u�"��8]�x1�4s�6���i�;���9RW�=wP���_v�Ïj5/�ƣ,��M�U��Q:�?RhյM��Qb��Uj�I�¬�h�G
�d���F��@�tf��z�����e΢�/�Y2w!=�7r?�g�0Ȋ!+ˇ,�h��1�8<\5h�~�)$d�p|���7�6�*�nA�]���;Ʉ�a)�����9Y(�NP	T�dմ���̲�ݳ,� �&�C������'d�c*󅦮�脠�*�L�/xĨ�+�vN���Bj�:��p�l)sU�0��@`imX�M�q�:�NaI��܅%�m���V�<��40��=t&��L
�������,6L��!8@#U�a;���t��B���%�Z!�J�ⱋ��4�w�Je8T�
\�D2��X�I��r��a}�т7R5�=ۙ��h	�UO�
�9]����u��9�c/�B�NG���GP38)�YJ&$�"�E|۴��~J4�s���SE�<�b���a�%�"Y�b��З�e����zJ��lG��e
�Q��l�P&4��(��l1�;�fj���Ha���ʘkve4�-a��7
��棹]�տ �����$K��].F�ۘ�J)N�RZNeӠo���hy���6��b큿���>��%��C�B�`����v/���G%��*Ɖ�ڀ�wK(���A<&}���r{��2(��.��#T�{�$�A^B��@���̊�>�dâ|.��}Ƿ`w(X	�;R{t�#%I��Yρo/ow�f���ʄ�R	��Gfd����� ��pT�/5�#���N1E�ူ���M��H���Tpz|�	��ե������ML���N,���i�����{��J5��G��E�a�E�&BAk|K5��)!!:O��Ce
�����ne�.���}�aL!D73���ߦ<�A�s^�ɡ$sn����v��:�0�p�����:q�����?_@��YRA�F_�܋���S*���_��J�
�1` ݈QM��RW�g�3H����Lp�'�j�2��9㸩�ej�cYX	�E��le�r�`4��)�B���
���|�?/�=��.�
�@´@��_�֎�2�ί���;�=<�3��o�'�wozN�n����~���E�3����iC�pև��K��އ���ۧ��K�|g4K�|]��5�������v��{��tt��*6�k/w����7ڹZ�z[���>������ͫ�(t��N��؟����z՟
�����y�k��KǪ�qj���(���u�*�n�]*l��W��ӝrhe0>T���Λ����_������8V*�6�4z��؏��nw���Û��b�^�6�)�홯�V�?�c��|Q��/WN�z��W��H�M<ep�=Tv���1;<z٥��Ҫ���Y��qW�K�sM�
�ot�G��'E��=PƊri]�Wl�ru�I9�{�T1�quV�엻o�={��<��_������rT=�ޑEme���Uy�X~U/.>W��ףO��)���s�|k)�`z73nJ����x}��jW�_�_����=�o���X��>~��￿O�o~;<({�J�PZ�w���J�T�M�^\i���{U����dw<)��n�p�Q��=�N�}�+U���X�/���F̓&3l�yq��U&(_͇���wՋ��Y>��?�a�9���H?�er�`„gXo�uj�p�ز�2.�E�-
��ݴ����H�_�f����i`�>���3�ŵ��
3�Ui���Ց�D���-6�vR"�K�Q�_ۊۼ��ѷU����Wl��u�ՑK��ݸ.��ʏ)�-X<"������jY1]��S��9b�s��S�O�+��u�/^�8Vctm#�`T�>�6"��)���^T
��P�!�q7%��oǷUu0�J��k�n=��<_wV��3N�3�hm�:L�; ��"�QKtv�db��9��{u���Mq���q}�Vcu0VY�O�����24�Kp�魄�آ#Sҕ����R"����-_9C�NQRd;L��g������_�/+����,y���K�v1���ؖx*8cR�/@��7�>����E2E+our$ᅨ8�pf6���C�S>�ǣ&z��ܥCg��~�y�S���q�j��:ʸ.S[�ٔk>>�|��|A�8L�[�F?���era���q! ZCw	���Mr���4��pXޜt�1蹸�M�i��::#�

]�bvA�R.�#n�k�"�^�Xj�"���%��N�ח���9'A<�c���%\qq� �a�#P�I4cT���8��,�S�$���C�f&u=��IlFB3�;��5�2c^i��R@�U��Y�\�a���K�(¡	�#�_[�0����px�R=�*�r��z,�p0�~����9�_��*�B�\�c!n4s��q��z�ƪ�S��d��z��me��lo�:َ�?l'IP>�>����	l,�]m�7�;8Ğ8๧K���MүG����X~�v
I�\�Xf.����9Q<��~�M�3	p�i|y;�|v%����GE˥_��L�&�3�q���|��ݖO3�9��k܋K�	=�Ă����X?�5�l��%h+�k��,�f�Υ�ђ�.�I�V#t�,�=w5���E���6�ab�)�_��m������T�9�:�˨X{̈́���Cp�T�i�+��|��yC�o�M�\��l�ی�5��sU�&�+j.[Q!Ph�
�z��E�W;��9��ώM'(t��E�\;�j�z��y��]��7�8�6ǭ��

���x<��a�}��)��4f;`�ؾe�J>A,t&Q�������솙�<�w66��;�������t�Lz��ύa�Q˹�i9������gR/�)��c�c�6z���N
W�>u,�:B�Q�1�iW.��/�K5�pD��'��}�cE5`c™E)`NL?@J�m��h�_g� ����z.�1Y��P1��
mr�`��
���lH�Ɠ�glG�l�sO�E�T5�ޜ5�]�D9΍…����=A1��7�/���D�aim��Vy���4��O�Ġ�Z�%,B68F��8���R�#p��ph�`t'-)��S����3G��)7Y��v!>��8~�4���e.��d>�;�`�m�25&�5ީL���A�ͰF���و���B�����k2Y0w�S��!���f�&ct8ZD���Ђ�����Z���40�t9�
fI(nW�1>���)U���G�'*`.9��A�
f
,0Ep�R�ɟ�R�Q��"KY4"NdM�B�b��.%��˓��фBE�&����nDxn֦�.ia B��l~�j,��.���H� �xí,�!&D㇐��D�
��K��-"���Q����R��!İ���9v��i/�X�×V	mo�ΰ�U��6y�t�9��TH�}��,���a��"�#਺~���^��|$Rn���̑�CQ>�J��9�=�y�`�'�kݢ&+�ЭӾ)2�D��eу��H%�2�]�y�3�>�Ncu=7R/��85"E��b�hA�"$��7�7uqx�-s@-~~P�m�+^��"��i�/_M���E.�̂jk}�/N��������}d%�w=q�G�6�)��͋��,�����}��o�S���GsEB<$�V��d��>��B4���i�^X*nb䏗�R�@���]�!	�eP�I�q�H�����^���R읕x���O�5�Uh�M�Yh��"l�9�w��CC��O�&��e��0c�����д}/�Q��@r-�tP|�QEw�^x���DlOHۙ���an��uCH}���9;�;\R�7ӂ��k�MV����\�+�t��p�/��3����P��f�N3�	i�.0�i@�K���t�ԕڂ&=��Dv4�ua`� hǓ\����;?�%��`x�l�--���(�g��u/�T�9j��(�]��.C�ٺ,2-�Wt7�n����K��^g���s�A2Q��T�4\��17ñ�S�h��q����ts{�y�ixjun��[�JJ�c�/Wо�f����H���_6��3�S]�k���k޷n;,��+���R�<t.��L^���Q��F��J⭩���ݽ��h^wZ�[�7�a
>E���p�W�ۉ}�:`��lg�P��m�t��ϥ6N>'`�c��.���z���7y~u�q��}�&�0�+~9��{�0U�}.tg9ѫ!N4/E@�(�^��0�d�ȑghP3��Z�x�u�,5��f"o�4C,�,�__}���2<�4��ۭ����e�%�	/*˕�?3�s��d��VV\��w
���u�bP$���M���Yk������_w��-��sgD�%��S�
��M��{ٺ^�V^�G	4�3�>d�b�[�
Q���0d�4�w[�C��;���~#<vr�"��Yl��f��.��pM�379�&��B��$0;<Ï[� ������/BҞ��$�����c�	��a}��� ��E�hF��b���ޘ�%�����[7+du*D=��W���
�ڧ�I���OX�O�W�LK�δ���/�$-`[Gs�#Ӣ��>_�T�m��?W����؏�N�u�ɎA��y
#!u�4�0'�퀔�C�\]�N��.�Z���+�S-����=��wGO�.B�+�����;�Y繧��$Ŏ}�ab-��<�{4�`4���[���F�l��=z��#(�n�����F'i�S�r�`vj99��a�y���Y@K�A`gUl�v��%
��|�2N>���R�*K�z��jJ|y�]���"�Lۣ`�-��*�����J��-E����ŞZ��)��3|��x�ԣ�����xz��=5)bYp(�8�+����` F�j����񨚆�Ds<�f�o"�B�-9������Z0���t�<�\� �e5~�� n�(PC�����s���Ȏ�$�!��C�)��#c�'xwIK��ߕa�deʫ�=a���S{��m�~�����#a���uSݠ<��݅��t9�Dƞ�yۗ2�d��ѡ/��z5c����{��P�l@1�
˹`�E��X_s�8�Xx�CS�t8��\�e�p<0��J,�HF���t��o%Y�����>����Z�߇��ג�S
A܅�ӧg0I)S)�X��Щ�*�A��%T ��rI��߇O����N�%
S�EB?�bI%�	L�@��ʼn��B�bʑM�DCL8L��4O�q\��r8�0��e4<2ے�(�D�2����B�̬�fBg�Ӡh��<��`V�X3��.�t
ԯ�d���B���
O`�-r�R���,(Q��zc6BG�:��Ү��w��`bٍ.\�R���O��$��@�h:	+��CJ���"��9�[^,�Tnj�dK���X��w���h�&R�Wp�,!��{n�7GG
Q�����Ri
��(�J�?�1=l|i���c;�.��`k����B����zSKs��Ή$�5���
p��s�?6W��%�3�6�]M��Xo ���LaB�"˨��m9OTNc6c�'��L�����8��(�y�n=1�b8]���
��<�ۨ�vh�QaS�����Ι�T*�ԒƔ-)�K�����3�E��<uLuMM��e�⍐�hV/��$��ub.f�.0��l y�	S:���r��1t���}�;u�l�M�X)WY$�a-M�&(��!�z�[�h�TYbjn�i'
K$M�SQ�K>���I��S�it��?v�~�(��%S%�.'[����[�-��͔RM���>y�,W3��57k�=��=�9ƙf$sQ�E�1�ì���W��I�ed��Ǘ�w�Y/������ɺ'���㽐b3X!�Y������֨�8d
B�@�"�#��)6e���)���f�K�2E�K�c1-�v/�B�
J"fC�.��I���+X���b���6�Q$��X�I�����Rм��Bd��_�>���[�J�KB'�T���^��]M�@�0b��e��k�cj��,��Q)L^���i�ʼ���rQO���r����.O�"7��(�{�҄w5K6'�ˤƎ:c��:J᮪Q�`��L�*��U���Vd�����`�>7w'�{���靰��6^�{���y���>v���9��{� ���h����`2�>����4�֐�Ĩ-�/�6|?\��qC<��^�U�?1�-վBY�L"�������3��}ôs�ڌv��4mƔ]�9�g�@��`:������134aID/�e�5i�"K�L���;;`-P�M5z��k~dTW�W�-�� x�ї�\����b�C��\��NI|�@���U�=zS��f;�َ�T8�����
�b�F�?lM̭a�B^��3�ʒ_ !F�/ō
̱��ðb:���Pm%��K���-���i%\*օ��w�٘oA�4��Ul����l_*����g?�O�S,�lm�b0�6o���^�۹&�����Yb1ڦkNT�]551�?oV�';�����-`I����[�|
*"�iB���V�
G�`��?='�>fE�OG������*�崘�x��_�����v���Ϟ��F�q��ر��	��/2�Pyi�Z�S��a����b���AA���Ӛ��@<wg�O_��>�p���0�>S(s	�af�_"#~���!Ҽ`�L)�S/LS� �iT�ν��n
QqaL�[��tPz���&>�Q�co�G-j[앩�3~G�K{�;#nt`�WO���1�k��uh��CԐV�����-cCth�q���Qۢ�n�w��w��^E����m��-�QW�GԺ��mA��mh�>�`�=��D��VQo�6~ϯ����
{j1`]�a�p�>}Pl:�Ŗ<QN���GI��&i�ű$�"��#��f�j�\�~��_�1G��F��.Ặ�6�uQ�7"0Hh֘ƣ��Ag`sI@�6	B�S^.���
����٦@(d���l.,$B�]�L�*�x��v6���2Y`<%&N1�
�q�RØ�Ķ�����*�R�h�p�,��Ǵh�^T�+lwW#>�������Fl�_���`łs�b%�D�ʊe[#B�9�A.��b-d�]�ʴ)��#�g��^���naz��9lr���P^_?�`�T.Jt�!┟]��E�L䏃�7��B4-���6F4�󋇂��£�\�A�PIe501�[�{�E�7�Xr|����j|N���W�PtP�$&ml4�9�\$y��d��8���)���`p	���診<��پtV��ը��/��g�$��@
7��ע�1��F[0zs8@����!;��.�����߹{%�?���!�\Z)
�/z~�ʸ1*�x��k
z�!�Lf�Y�6�e1p�r�t���뚰p���K���R�5��^�,��������F�����µ
nCY�*�]N�+�7
\Kz��Z���]#ylܱ�C�J���J�N�n�{

��Y���^I2��Ӂ$�\��F1����K��/�h�4
j8~<&,y����������{1�<o/{�ŏ�6E�Ɋ'��3JV���J�gS`.\y}}�u
]�6�I��l���!�-�C��6
�%A
W5[tJ������u[m@'���Dy a�X���E}O:}��畓P�ë-}���~~�wֺ�;i)'��k�#����	�nO�ub�lߒ�Hӷu~@�+����L���N:�����At"�n����g4��h�N������Š��j��e��L�F����.�c@�7��{�{�〆�?Eq��DA���G)p�	��VMo�8��WLOrRGn{�7@\'d�A��������F&�$�T����Cv�],�3�8�7�dU5Zl
#~_>}��¢�j+�-�k[(m2��%xG
��Y2���A��€Q��\��Q;�sX5������ئD(GIa�`8��B��V��AH�G��^\�.�`-J�g�w-4N���9�����a�ޠu�drz��)\8��N�3m����EC)�jj����B�23�R�����k�J��L�7���2�&IB��G)w���cXג[���^�������,�	����k��|6J7p���b-PO���גә�ͭ7r���qo�/-A.
&7]ljn�d�#�ϕ�J��Z�!h�0�*�oXj[�h�D��Q��D�Ǖ亩,�M�ў�� �����������3�*438��Jo[�X�VUK:G��j*�R�x�u��ۥ�*[ͤa�������N��U\�1wq�ʱ�
���g��9S�%1��IT�v�� ��!:2���N[
(C�|�FR0�k�5�1Q:��ZM�5
��
�m���]�f@2OYU��Ӏ�
��ʣ���<�ĩ��s��
�"k�2�{�G�x1�[�����Ԕ��d_���kR��V�$Zb�'nw����.�8/�Z�f��O��agm���^�?/N�e�S�5\�Y������쎎��ƴ�aB��n�.Z����cn���
�z���Z�!F�˨$?�â!�CK�0]�=M�A����Ƨ;�r|:n��|�
m�ӌ���>f%ʍ-f��8�̠����A<Ά�}�ϢZX�{j�&����2�'��1
���PԎZ�Q��X�dM2�r�w�}$TL�Em�N���3�(�bm�����Y�C�&�p�iA7X����xm�����_���]�r�'Ů�*�)c�B߉�)w�n�����p�N������{���9�"܄tS�;3rw��n-N���C�e<�q��s.��Bˇ.C���'�G�F�n6��O}�����d`	�N�Ao��A/[k�&G��e'J���,V��Qpi�A�e9�//�m/�jS���N�k�w{xZI[Z3W��:K ��(]x�����L�W��4j)K�_�4�=���T��"b4:Ey=�N��q�6]D��p��)�_U��)>��Y�n#7}�WT��5#���e��4-|���<,�MI���&[�0п�����e{��OLV�U�N;�!�e���j�!���~����\nD��Q��2W!������+�oy�
��8�%�P�d�G"s�?Wr��ǰ����s��	�DD<E5�f"�‚���,�D���f����"��m�B�Dy�M�V���\�s�9�Ei!Ӡ���>�o�#X�$�9x�b�y�)�c����F�Y.�����g��������m���o<��H5����5�����g
�����
J$n���.��X���7��./����{��x3��q:���6��?��	?�@�-��u�+����Jly
xE��omE�c�{`����2�V)<��]Z�1w��/D�2�&F�<Alv�n�WBij������b�d�A���W���㖢�ɤ6
i̟馸��"�,Y�����5��H)e�fil�-E������a���fr5��:sU��X���.8�D�����0�.�e���\l(�;�װ�[<š3���Y"�L�?~��(�Yܑl��Xn,Z�&�#����l��5S���k.��z>X3�f��{�C�^S���(lH����Xm �r��f���ft=%TZ��Ɖ�[Ra"#���X�8���Ga���.��)?f1���)X$&�
������I�y�/��J�E��ӌ�Kj�Z�x�1��PY��)��T���o�Z�F#��3��"	���-�;�{.�-�p-�osIu�\�S�q��m�KM�,�T�gm)	����A�\�������h,1[��^��e(1p����~9P�k�~g�?���}�|4��a�?w>��!�7�t\ҡ�����Ƥ$8�N�M�o��d�r/�t
B�f�D��a�!�L֚I<�2<$O��8�JT���;�4V�'�#���y8��=� e/�0�0<t�������9����9����fK���Բ�K'-�	[��m����/g����b��Ɔ�a[n/v9:	s��\�J��N(l�&¶)���y�rj,����J`WHy�NoP������>5z�p��2�{�nN,U��)Eg�#A/�l�)�P��B	���«�c��~j᠒ؘ��!8~�EBu^י-̱�,�NjC�N�f�uF���FT>�(8��J�n�2ׄ��lV�>@>����@�=���e�b��\�����4����	m���q���]">�P�4�~咗Bb��h]=�ކ�!�nj(�?xL�of��G�TD4�
�@{$��q�iD�
�uc'�>��ԾW�=bK�J��(4i+-�u�H��,�"����Tg�D<!�*��K՗��&ț��3[�mf�?p��Ϲ]��A�[�ԃ����6�A����\���Z�G5�H">x�rjEӡz���P���?:�.�]���ۂ�5Ocd�e�^��)Qe��dV$M��㢫�ۅ���;
b�,�'�1����1��$�F\���F�U�G��ț����F��ҵ"Gu���v힮�R��vk���t�W
sR�O0F<6��G��z��d�C`�ʩr�؅Z4<?�0�E�/4�K,AAӒ�:vC]�p���x����a��v`&�:7s"m�G~�w��(�}����J�n��D��iǎӺ�7�_�zۘڣ��#����"���1e9����#�N xm�F&�2�	w���-]^�-:&��,%�]�r]�� |��}���yAޛ'C��sj>nP�5˪�!U|�΁�[2�J�b�͂@C��*�>e�����5Oh�䴇�hV9�\���7�=��zN�����y\D�:�a�|ө,ěEL��K'��/�W��c�&��$1M8�Uu��!vF�xC����u��
x�V(��E��퇰�VU�vR�J�vy׼m��@Rg�����V��(��Po��J��\�ӽ�q_��^�g2=�8��jo悎y!�s��2n8�0%�@���/ԅ�;��H��P��J^h�v�Q�A�Xn�Sd����l5M�O��c;a�>!+ٛv9��L&T��
q����*���~�^��ث��Dbi���g�;�iKlD�-]3�FB{�����>R���]��w硬��w�e��~W�:��@E������5�����}cj��O�~	=R�Q�(�	O�5�cm���,MFut�eG�W����켭���(���'ҿ&���Xmo�6��_q�d�q�.ۀ!�����eH��I�EQ���b#S.I%1
��I���˂a��X����sG�FpV,W��3
Q2��W��]�p��b����:+�bp��`HT(0e��>)�b:�
TQ�!)Rz�(�0]Aoo�_*��r���m:�5$��)M��)pA�./�&W���Y�,K�Qr�ǐH�]�z�/���-2�I�R$�"��@�d���c�d)���I�j9P�oJ��[-��G?��BhY�C�ON����D�f_��:КH�5�V��ڧP�*���ے�K)�ј�3�=�E},���G��qy��y��1)$9��P��{2f�FgjU(+�\�2^�σ+:�K���I����m���T�xe1�:~��;&3�dN��<r�a�PTr���o��F	��$�u��u���m�u!*��0�-�bY�F�ϟs�����b�z�WKW)y�P"�T}����8��V��1�x&UT�U���ਞj,�
	�8)>YdW__wԱ�\g'pxhZ4��*�[��/v�W6G}�	r�RSͥ��_Z��
ں�j�ø�B��.j����.�i:!i�F(���-N�e�QK�z�)s��rp�~�-U�l1Vh�0�8�� ��U�)�b��iMt��Ә0o44��h�K����̵b->E�ka>#Î�;��x�R���"Y
A1lo��F7l�Q�^�{x�S�˴����s��G�����2
��#v�<7\���=~[���t�#�Pj �,+�:�B L�������碐י�e���<�چ����r�ԓ�ͶOE�O̚8�#��*1-l
�C�>�v�(�$��t�߾m��C���Nz0n�<4댴��mj+�ؓS�1{)oS�¨5�����+�ʍ�Vv�D�Q
�h���y��K�����l�ln	l�/*L,e�S�Sn�D=���:�1�q� I	���$��ZmSS����`FL���Q#�IƗ�C�c'%���!��(U�5oc�����{Z��۲3=��mo"��!�2��S��Q6-�6u�K�T˸�)W˜��Z�"v{���8�o&�t +�Tyi���
��e>��>Hl,��c���w�Vֲ5Xmtú�����{&W�ʹ��S��%����;���=���=�G^u����9�Y������M�6��zl������~p�EO6n:����R]/�.<ѫ����2{\6�t�gܑA�	��Ut��g���!�U��kބgI�;�z�u��|g�G�pw`�:��4�o���('F�؆g���,M���kHG�7����ϴ���^\����S5�n�l�y43�$��
�[*6�*B%mS����>%o5�����(��v%��Yr�4�
�t�S󶵷��&A�?"{y��V���t�w˝��������ۧ���O�oW��'���׽
�h�hY����e���kC�^0�Pr>�>���L̙����(��rNc�b�ǯ��~������%��h�9�43�;��zrS��<�ݒ���%�*�-�;�Nv�jak�J�E�����8��~�ɨ��d(�H�{*[7�~D>�Cݒ*�����F��X�:v�s}W���x�#�^h\��\��1��dgN����jH�97U�8;�����`��
�{�z���zG�L��Y[s�6~��@<;%�JT7��ff۝�M�L�t��DIX��rT�����N�I�f��&�
߹j�`����:�'���|�n��ηF���Y��؄�I�<�e,�d��b�>Z`z��VXfuiR`�΀��� c�=�����ܺ�&E

��-w,劭�8�u�2&>������%[	��Qj��BA��$v�҄�t�>9��fl]��	���p�؂lS�e=C�XǬ��jG:�Y�ԵN�Ԉ��`/����_�2�=!�W��-W�b�VϘ��/\Θ�{��tΥ�y]���/1���Μ3bU:��Yt��G�#�
�Ai7Π~Al�4�*�&�����R#*�fq���KE��X�{8�j��}�x��,{#���1�`�B^gY��w(�ee�W���r��i��@������P����c�Μ�{j}�5�V)���s�=],2���%��CH�m6P�����#�-�$��G��ѻ8��՝pgJ�L�T��D.-T��8Ypnu��nn���Ɠ�k۳�q�:�������!�?��?��k%�g�{�S�6Ƌg?���H��u��z�پ�Z5Z,2����j�G�F8���Os;�,�0זa����5��݈��:�����'ͳ���JN��~�c��܍㮴g��=�O�IBt��'b��6�<��M3���:�Q|�(���/[;Z!����4^��dW+?�uT9n���j]~k2����!���!$J�:��*2/�"�����p"�kI�*�K���Le�:_Y��n1ټdX|�Ϻv!Z��2��y�ܖ���/i�5����Ա��8���rZ|�����JO�|��!�x���>g�AR�t��
&GS�^̦U���lS���B2��|���9��\��z�]p�s�pN=��
<�n!��h
��(�����zdΔ^,!�\z�z&�n�{SQ��W�&&.m����QX�߻̻�nuA⟤R�
��)���]o�a��
�X�8a�ІÆ2�ny�k�x��y)}��f�0��T�PH1��n!���|�����e�?�r�mR�800��?d\�
)��6���	�z�W^�-r�}^ض�jn�K���7G��Rl$�f�en�7�}�d|Z}Ve����⛏�Kn0�"�[�C_ږ���:��D�C���kn�Dm�^��.9R�@M���W!V*�{	$-C��{�6&�L7��d��BS�nץ��8i3_�^�9�������7��TMIQ�m��n�4�Lm�����ܛ4O��I��)�%8�R
��wf{�[�5�f��fs�j~Dbm�1t$�7��CC�=�'�@W���jhM��4$�Љ@���sU��2c�����m�v��&���&��p�K�"��z���
P�#ԍ"�I�a�&O �^Ƚћ�t��ঀT����J�JIy�(���_�=�c
}ꇷ���n��m氋�����e��e���*{��jڄH����١tՉ���ڋ����1��QW�LX^���!�gO�0z�f�Ch�_�)UG�3����n�L��w_y-}�q��OA��<=pC�j^xX����nh�.�<��-�����$يSt��%O>]���y`Q�lH�-������eg�x��T螋�i �i���-���O]*�Bb{�N9 
w���@&�~�)����e7�u�oK@g��-/���!�^`��O:{�=���F��K�g�M�:�����z�X���y�T)匽hըN�����M��r9""�/��&$R�1����������2m��D�ڸ-u�?tr�Ga�|�Q���vC�ǘi��W�&Q��n���>>��(z2��0G���o�~v��Ϻ�C��q9����k�
Y�7��I?_�c�y�X��__�])�Qd#�<e|ϕF����t8Yu�p�9mj��0��rC�ckL���F��`�&���_���������)�u�XJ�6|��F��YG�(7�́ӌ�������E�Vo6�|��T�}cՠ�Je�
�.��>X� ;-�`�z�K�xECFa�	ŘF}|���4m�-B7$��
8�r��D�T����}Ss|�[G�t*6�п
Jy���H*��.�|%��q��c��70�HkU�usu���,�ԕ�ҭ�Y;z
8%�~G�;گ_\�u�#����|����*<�j��>l�5��&�r��oq�o���t�$n y}��Mo5��
	���2��	�P�@%p��L���m��C�����h�5��t��lލG�o���X_�WV��D��4����%��-*-�k����~�>��9�q�G�MRuA�*l�����w�v���u(��'m���z��1#���*�v4r�o�lr4���MX%�=	^��_�V�:�k��0/���o`J�gUᥭMm��[�5
���3@p��G�r�����3�<��tZN'�/��~{fcR�!7�sR�ۤ�����<��X[o�~��`���J뤏�qzdIA8��>�A�Rk�T�\�j����{�d7=E�`{g�Ïs'���@��9_,
	ӈ���{2]22X�jŋ�f�r���
j�3��
�⓳3r�Qsb�\��<e$U#�P�K��ٖPr���l#��L�2����T�CMsUȌp	tF.ǃ�U2"s.X|r���d��'��ڐ�X��jʞ�Ea��䜜�R�Fu
Ѓ�W�RC���2��EA�W�,m�4�\&Y) ~:����H���p�G*��>�~���+8�7$#`
;d�t��Y�!̤p>Bs(a�`?���s��?٦&��B�S��~N&W�69�>߆���Lc:S�����C�ҷ��~nx~�2|�S�6{��E,�:��}�K�8���q	��!(r�^E�	�1��@I2^Gr�dk|�R!>q&2
�;X��A�Mn��_��&�}}9
n�����1.������M2�\R��/^0��-ڦ5���7���C	���Q�ptْh�VP#�t�f-��z4Om|ރ]�+�i���J��G�i�\���pR���,b�#�����g����Jӌ�r�D�?�Zg}�V��ɅY��q��0���F���^{͔C���5�5KS�5���]��9��Z���D�'�cX)�293E.�P�����۷'�-�/�JW����W���X���3��$�ڀ�5�oi+7%����ml�������9����(r�VJL�k�����_�/8�����	�s�ߨ��xE�u��#�	��h	?Sѳ>'N�����rmi^�
�0@�ۏ����Fͥ�s�͵*R�=�b�mwR�nc>LƿB�J�/az4�����P��������Z��\���XW�Y��\Q�.Y�Ȳ���܌����]�߃�������C�}��Yڐ�5���C3�wG��#*��$]�F6��j�팞)%�;2�kA�[4�G��g�4P?p�k�1׉g@�P\�/g��=(5�ez�&'8!z�.�%��S����޹�aТ�5�y9
��lh4��
�f_��32�a+
�m��A�3��9WY��u������ +��.����"�޲�����
�P�C���$P`Ks�dt��`���'.3���\�)��j;|�������')ͮ RªK~R�
�pt9�M�������tO���)�Q���{:I�To�
*��f�jbӐ��vhۚς;���|��Ch���wlߓ��鼏U\�A7h��1�f#�qZo��itpPM7|A��㵠f&{[xs��&���R"�#��p��?1
�6��e+���5���n�����2j�Lʉ�S�,!w��	��Ь.�qjH�Z�|�)�y�شA'R�������
�/%�,���i�"n���
W����~^����F���Q�$5�R��	�)�E�Q�`�ł�X�ʨK�U�_��X:S>q���n
Ó�)�1�4�,���݋.������B/Cw�A�W�n]��5�W"N=&48�*[ e�,���I[�q�8�iߕ�F��*�'��by�<�U��U`�r�U:g+�%Ώv#kb�l#oE��2�p��a�:��ƅ[ZV���9ղ��SgkD�|��-j���VK5�+ӥ�ۯ�]�p���2gs�l���)T&�l�}��j��ֈe+c�Z@7��6����q��4]���:NK�Y��2�7x�Ui��r8F���o��
A=4���K�L��R>�h��ng#�JB��
E�p4�\1N2,���t��3&^j�%Pȃ��|a#��21�a9�20�I叱��X�f�o�$����$��U�U
q	��g����[����-)X5��*x��a)���c�dn�(<���v�8c�\hkwݫ�DC����P��F�/l:���6�����(8�p`�����蟔��Xr��Xy^ȉ�����!�L����m�`9|`N����K�H�o��؇�9P����#g�L���}��V ��Y��6�`�꾨���{�K�K.�t�$\���&<�_�B�VJ<�]�����A���TMo�0��W��9@���N
zh�6tݰt�a����R �i���}�Wc���a�����l��{��R9�����#,r�
]pS������x�w�x2�����6s ��K��fn�ޢ��ܮ��C��%Z��\D���+��+�m���b��Z�F�I"=W��S&+i���J�;�1��bͦ�)����t/	+)E�^���	t�]���ak�>�9�t"8*T[��n�	r
u��g�u��@:��҈D�pv
�Iu���X���Xz��2+�B��P9x���X�
Or�0Nz��ʈ��˞���M~\���S,�)���^��	�7�to���)g@cǽ��ڐ2|�
�P�����ƽ>`>oU�7�:M6W�L�x����u�� �J���_
M��	�0O����Q�N�q���]
��`�U3�+څe�
�p���kԶ������z�� ƈ�>GBvF�ו���vڨ�s�7��'��;aZ��[���z'1��e�»�Ujϛ�Y���w��	�V�1����j����
��VıEc��nѪ�S3x<�T?���7��B�
��oR�Y�&�ɲ�鱊��|�-�b%����j�,h���/�Ɍ������N�@��<�M
���Q/J%�D�
>����vffM㻻4jЃ�;���P�eCf^	tu���`R!�ڄ΃T�8�ska-d d�g,�N��##�He��ڗ�;��HK�6�`8�HY�`�F1���V��:�|p%��W��v<����u�4�*�Д�=�`c�XGS�%jOJ���s�t[V8�5"H�6��6�;�h;4f-�ap�^����N�[�vJ�C�N�9��b��aSX�|��Xu]�Q���Uka�[$�Ad�~ΤY"��]Nn��AĻ��+�s�|5�0��$����[��^��G��	�k���\�Ƌ}�ܴ�2�Ģ$p��ְ�^��Ζ6dZ�(cy��7�|&�e�AO�0��> ���� ���v@p�Q��kD�L�ST��w�vC;E���좀�zg�5�����e�lkB��u^��i`yp��u�ER��l\���������]����s� 4F!EגAI����`(�#l���v
�iP$�rBce�T
�P���1�'vH��9T�K�~8�������?v�n=0��p��#3g�bg���!p:�l�t$;��Ô���"ʎ�eK+�9I�+��1������Z��6�3���7��+����98:�&���$�����*�w�}����C#Q��C]ZL�IS��y~�"�EF��VQo�6~����Er��^,���1�IV4ކaZ:[l(R#)�F�)ɒ��1@���}���sX�bo�6s'S��ݏ?�*CXdF���t�6�����
-�hv���|X��	V�&AHt�@�n����{����rf�^"H��"7�q	W��*�F�*��=����n	!�M&�a����}�.�'@�(�0"�{�0g�f#�{������SP�H)In-<y{ \�:S&N�xھ��F;�h�ܡ����J?*�y%r���EeWt�.��MZ���	�w�������z)1'���1	��B�i�:4A(DczW(4�4�����b�z*Տ�61ZJ���������΅c�X�
��(xZk-��'m��0b�1D�*��q��&�{a�jߕ��z����	E^���uF,��~=o��_���"��u�gz����k9���c�I0�M����w���K�<}�K���5UD%Ԕj�V�X{���9<y�}3��_��V�1AAM���1v��T)�Yu����	$�����2n�ڇ9z=�odrl����x��c����(m��w[8$g3]�4h���,}�Q�w��XG�%hm�o5,~���j4���P�_����11P;���/@J���K�[��V��}�%)�`S6����!���[��\���*��I�i5��-��:�����M5l��g�J���kaA}�V!s�l�1�*��NG��h ;�E�@�*m��	pm5'��b����zm�$��=Oå��	Ўt��3��a��ݪj��LȔ���)Z��<Gxs���?����R��-�Kbh}$4��/��6��"ϼZf�Lf�RJ&���3/��IF:��B��}�*G$�[��	���r �`�%�~U
OGky�Du��y
.->OX�k��痒�6��@��g���.u>��#��6Hԛo��S�F�%ӯ�V�]��]�ִ���Fs��a���פ/�B���
Z^�
�#sttXv%|�8�U<�mt���"�
�it:�S5�h�P���v�*NS��j��w��Zmo�8��_�Up�m��k�M]�@.M�
�������%�bC�I��-��o8�dI�_��p�;�MLr�y8�x�]vnd�Q|�2��S��M���+r��D*�#�B$�D1��=�{�hF䂘�k�e�"F"3å�g*e1�o%��6�f#<b)l3	5$�)���B�iLx
��������d��u�p֙~��כO��pK�0��H��U �
����*`i`��gB�+f(��43WAn�e�]H�]���3�L�S�R \��$W1��!��NE�#*���c�l�7sJ��f�R��}7m	�K�t��$'�2y��t�L����7�Ι�)S�w��FႮ��LȵQ��لY�2�d�+��<���d4�y��#�cA���1t>�x�'��,A�P�j�f�;n�$j&XS�2��`	�f4eB�86�	��BW�T֙�Ԫ���z%%�ݒ���S�b{���LP��\���MSB���*�(�4�������BX�47�" 7��1����ʪ-���jB�r��O�]2|��KF��v�_['ܰ���k'�j���i��x��0Fnl؃	�K�#X5‰��/��Q�c��!��?^��b-U���+F�B;��J��N2��cDT�t1��H�0`�Q�}d3Q�\���,�1T����4��.C�#��亜vh�O;�%׆/6��p2gf�X�D8��^�S[Fׅ��3��A��� �|��zC{�m���\¾U�	��:8����������4��t�=(H��uA�cq�A
��8�94��ᨮٯ
��scdZ�SH��eJ��TD)��ɵ���,���6z�s	VEpl��=�ܞf&W��s. C2�H=z�xT�6����I͝-.�sA�l	��>"x�9����] k�2ܕk���g�O�2�!0E쉇g����l�
��_1��Y�]�	���6E5�4��*�S����G��{�݌*6W�PZ:��^�ba��y�@�#��.d��σ�avۘR�߫W�޴��V̥xD
u���{:��Ђ�"d�|���Ѕ��a����.q�z���i�{{�x��s&z.�.d��Kk�]���C,���9��h)xL��9{����r%T4�9�B/��h�)��v{��b�Ϋ��W������BT�lE�X?]�d�<��F^2��Vl���i/�y��f��Ǩ'Q¢;xb�HN�]��c(��(#����Z߽{wJb��1 -N1����#��Е����OǮz���m���l�jt��&�Q=&<�YZF����4�h\����:te�e�J�_{��BG����c�n�eT=���r�1g-�����ѫ[�n��q���}�^*#k��Q��y� '\|�Ꜿ�+Q�V�p�ǂ-`t��ĵ�1�>��k�p\�;%N{��Iç�����}�~�FD�xf�V�U����n���H���`����]��?yc��Y�Ɗ��tɞ�#7\<���0���U�r�	c& �b���"��VI�c���0�3��O���Ӿkhu��ف���*h�d�ܧF��,�_s`Nfc�H?��\`J����ml>1<
82a�� ���/YU��gڼ�BХ�6�y,,��IB] M��M��n�X��ԧ�:���j��V�%<�>�H7�"�-\�x�;��-�ȍ+���"�aW��Bp��Fם�J���"��OovU�{ڠ����ƫ�#��{K���D�&�$�u���F�C�
�����l�
)��Y�����V���2EA�"���g�>�a�����!$��6���h
03�aEp���rT�:�7wE����@�H�����FcRZL�ir�<-�Tk��N�lCP.jp���;�`�i�<[�U�L>�MP��Q{���Q�5I���Yg8u���$J��Ҕ�)���Y՜Bҙ���,i������-�\�PK��|j0��Z�+��U������g�$S,�qx/�����9t"���L���'�<8Q�D_XH��f������֗wX�Q�;$��H����
�.W�>!n5��/,e�
H��I�����ڳ�����jw\�=:�
T�J
��)	��w䏍�ς���<
�D�?�F1�:
�F��@���9��vZAU�=|>��쿑Tx��=�X��+�+=�׋̠� o��vX�͡�����FC�;�Ґ���X��l���f����"���~?�g���7�Q�X�#��-��Ix�:��g><�>�nڑ��y��k�JP����>��!xCؖ-���.:�}ۜ-�t�H��]ث}������07�M�"�7��g۱v�m[c��ef��E3(��%~���ь ]��([;���M�Yѭ�����8���w @���O���^�b,����>���FBz�-~����ٵ��&��=sۺ���S�oz�R"�Nzsw#��sd��6�3��^�h(��B�:���{�w��� (�I��޻7�$"��bw���]���lZ��e�X���߱�%g�eY��͊o�eQV!;�2F�*V�w<	���ه����˴bU�)c��"�~.�;^�<a�-�ث˓qUo3β4�9��Q��(gs��n�M��4�9����<e�i�ý���d+��;b?=�a�_�Ϟ�g�-�be�����Z@Xp�iS�yp��sS��6�a0{�o-{p���:-���XcYU�i\@ƨs�G^B�|�e�p`�,��pџ	�g��T��P��ue�p�.ӢduA
i�`�XA�*$P��'���GL##�
D���i;��BQ�ڬ����9/��x���Y~[��a��#��@�
���\�<���1�uɣ�ITG�I�&55�g�|\��E��E����R�l���\k�7�/`܅�_ӄ�h]oJE�4���D������]���&��"�T�5@n��iR���l�6���E<��y*w���
C�ڌ11�<Q� �7y�����%0Bw�{��Y���,��gӤ��bA�}Z�K��V��j�G��8+@q��!A�Wŝ+Y��L_o�|�^��;�ob�Q�L�m����^����GMg?"��>���<_sK]��NWH�Z��%��tk��[���Α~�H�4&G�Z�!y�K�|�����<�F�8��Y,�A"Ӏ���>Rn��ϒ�T���='c�
֜�ц��	P�*b�F�4�%�m��^�<����2i�*��$�:�?VoS�Ոb� ��!�7�F�ӜF|J
#c�e��e����F6u���.���O�x9� �2Z�F�F��ȷ�~����ZR��5ر�2b4�c#�������V���Y��Ͱ8_�H@�4-q��l���-�YJ#���dS�`ְ��a@��<)�C1�}�=�>�F����i�V8E�'YĶ�SV@����`8����?�O�z��{v�TAQL��J�M�<�pVQ�|{O��g0���!��g$�Ay|F�	�hK��7�0NAU�\��&�+���ҫ�_E�eT-��(@�@�{/��[��\t����z�9�'��A� ��r�2��U�@��-�;.�a�m�e�=JcT.6�s5a��NIC&�*�W4�~`$\�G����9S��D4��e�����
�XIҘ�ʭM�b]�۔C�C���nv�x�mfZ+h}6��Ն�OJ_�:��K�nT�k�����4�u�t��!2p �$z_C����Z�=�:F.fE:	lA�TW�#�ͳ�l���K�Dg%�|����
B�G�����}��M�pPc������h���6�Z1閇�%��a����M�E_9�ƾ!�W�MT
�#�r�����4߀�U�4��Η��
�00�`g��A{P��_؋������I��W�E|���%	�G��d��(��4@��(��1�ez���}N�ZӪY	{��j&�*�s ӑ��
u��c�G�
R�8��T`z��5����;�pRm�qH���FW����x���Н��D����|��I�u$X����o�����^��_�t������j�v�~}s�4���&�l�nӲ���A`����?� �u���.��$�&	�N�F1���"��o�T��ˊ��O^P�-�(���+
J��>�0��D�����)����x�@�̤����U\�s^Y��+$�J�P�z���7�d�����/֊X�1�X-�'"P^`A��I0Ph�`��9ih��`(���N�L��hGuh�;�����V�C��4��0a�0��H��Ġ"�6ܲ�'rZ�EiM���;��=�ak>g��E�ʇ�j4A���LL`)��c�G�?L0!N�/4פq��2)��7�r`���#����y'$Ý��XL��9��iEm�F�.:�˪u��4[s0�I��ޗ��m���`_���a����u�F��
��_l��	��OiU#�
�8�b��Epq�O��ㆴ@�r;^)�L4�@�*Z�rP�9L���=2>��bȉ��Z�g�∉�∉(�d�9B
<:e)��P!/a�SA�xYH���0�תH�#�ه�&��Vg
u���"��-�E�j�O�J�TR�ߢ�4��!�ɰ�b��b�N>��W���|�o6���c��xNmJ]C)��Ihz.��V�8�,g�<�~WEV�+j��Q�FT-㜚�"~��,!���hKjO��b�Lz*h�<T1���ưȁ°Q��_��:\	�eq?�����`"�����w��� �KLF�?�Rc:�9,����Z����J���B�n��.�?���yo�xC��H���5�k5䠩��S�D������l�&�Z��ݞ�҈B�
�|��&VQ��1�*�~�*_�t�0(E�LaE��ʂ',tW��0�:�e[fW�"�XU2�2e^�\�Bd^%�&���AK'Y�U�FJx����H�Nv�}:^�8�E���K^���q�D2<n�_9t�
�Y^s��N�c�I��"s(�y>���<
~S,^Gq]���������"B	c8HHG��2(w�`�
�C�O�%I�_Q��g��ē|���a�M��vJ%��w��pÖ
v{\[�n����93�%��9О<��1ɍ�rFh�D��ƪz�� �!!��ma�ԥ��>8��VN8�q�9bы֝{���\c�JG[�+�NsD?ݹc[�}��^����>6���"j�aq��g��O��� x�'APVu�Q�Z:�t�!Qh���Ĭ?�Yf9��ir���:d�6�(��:X��f�c�D�)���@�1�LA�!ޝ����s��Z��Z�|���tB�"��E'A��:;��
�ŷ�v����$���8�ȳ�}���:$�r����w8�U+8����H��2E�ApՃ��+{�#�!	��B0W�îlp]����������tU6�����;�
��I2Q���L`u���'n�'��!击fy��L�ލ���5:��dQ���z�aBI �x|S���{���D���gEc�IX�fHZ�g��g���4��Bq�<Z�����־�2��x�+:�.Q���(0���O_���T7�4f���T#gO?�2�k�&1�i��}7x�o�^�<������v]��N?�Lug����������ٿ�<�Y�(��O���:g:�c�5�OAɁ�\E0	^����O��� ��
&, $�wz��p
�(Y�F,*)�)�Aߦ��i�a��)�ʔF:"�j�No�	3E
��*�8:�(�y���7���
�M2�r5�-��ٖ�z��q�X"z�!T���x��8�S~

-�W��wC�k��%����➨��N?�dz�P�ܦ�Hn�`���`�z8��_��)���-t���_���E��sN���M���Y�"E����>�1��507��i��j#��i0�9]u���D���Q҅�嬕�p<��"�!J�k4ϔg�l��'4F��kH�]�����o��m�	mۡF-�>a��a7;���Nis�L�]sE�%�$�a&��kf8�5��b&6'�/�]h�IYJ��2cu�N�W�7v�5Y��2���Ѓ����/*Y�����<5i�S�T`X�7ਜ��QJ*ɴWf80���W���"����1�Q5�kk�/�^�<PO6�����K8�a�t��"�V�9C�є��Ƴ=�Atm�
L�{��E�m"�4;�@�����cN�(��Қ��T�k�'�w��XM;�5�LX�53AP2f,�-A��y*;�l+�m���w�K���WZ�p}E�9��X.X��v��J��z���Q���U
������M�8��]—ռ|���iV����Ko��W��d��=���q���ݦ!,r0���
4����])Ne�D�$�`�Կ�8N���Cp���;���[i�l'
�vX�<۔f:Ug���E5
����(&�MI�����v�E��d��]�@�wT��ᴡt�_�oM,�qh|��:�;�ЭwrLj�U�c�M5�!���5�1����Y[{�h3�\e��
B�����2/$�we���/�6�������L/頁2�b���h+7W�W�G,j�8�� ����B��Fu�ቁ�_�Ӫ����g������rvy��tzuz"����oߟ�;}w�{�+�q}�CSb�2�L.ԟi�58l��E�*�N���.�;���r��ڃ�.8�,y��U]ʣc0R�=C4W[�D��WoNg�>\]����%���������*1��	G)�H���]�%�6]�YR�|�m�(o`ȯx��z��� �
�:�� ��/C��C��X�y��&��r�1��(��U�H.���<Iٝ��x�'z�
1�p�"i�Bj�WFf
�U��Tz� ��md�!=���>Y��n��
���4]�7�������[Bi�V���6 |����M���m-�3���D�|-{��U5"�Sn�5&����(�Ås����6��r��?�v�eV:�S��c�+�o!��et�9l1�K��bNr�s���E�
m䑫<lmD1���tR���NTQ@��n�D���L\|��#1@�'2��M��q�T�%�?�\�t�`�-+�l�6�A�4S7�^e�|p�nF�'܍������yޡ&���˒�B�od�s���N��)q�S�٘^�1*XRW���i0�Kt6��j����N����j��Ҭ�`�i�ճ����Ywj[��2\�r�|D��L�Ȥ�s/�Dux^��f��8 �0�Ut
�J�v�N���PQ��l�Q)�v@84b�4^R]���*UZ�m��Z7}v�y�v}����<?��Y�eŘ��>?9��x����j8�U��7��P?�8BH7��D�כ"�f�
�%&2D�����GT�Qq��Z��
��u�N?�����9�'���-��=SH=��m̚�.EG�*��%�l8#�a�֞|��.�Q@�Œ�du�sԍ{.ܭF̚#��X
�g�:��߶ʸ�6xg����?�kv���[�v�o�dD˥�keH��lO_�35�Q�5�_�J���e��?��a�*h�o�U�M86�˅֨����(��9�M<��n�tU#��K��:�2S��N�'����E�ไ�2$
>ڴʡ�*��*p����#_T�.�l�1ov�*�i�Q��G��)���9��_/.�ZSx:,��JKB�V�V
��S��h���z��YEQ���]%&��C8�'I��j����Z
�ƃ��^�u�u<�y(|�I�>�����ӓ�c!y3
Ŝ����*��5�B�<�Nwm�`Sf����N댢�dsf��g�X�A�{���iR/�K��@�~e�	�<�6�t�鵍\�O����I�ҭr�U���Ϫ��(+:h��1L�`<u�ӕ0�0Q��oW�ʁ�!KN!��!��rAM;G���
�\���[��$فH`���/v���o��[c�G�B?���TXR�Q��M(���d�|�)0[b���i�jeOFt�"u���N�H�Z�:�Ŏf>�X4�a�69O�4�;�m������نYh���PKT�ΖQih�j��ݥJ=*���T��L[��U�`�@ƞ�+k��u�پ���:�^�#���1R���;}W���/��l����ۧFP���O��O���½��`�V�"F[24��+/b�R��nݝ�XO1��C�`���ƪ�l�?�L~��o���5`t6~�Aإ�E�.�.��*���lr�&8?dA�l�<x��JQ��3R�r��c+%«鼒�o%�mYp'��y�Y��޽t5�*.R�2��v�ì:|�`b�~11Ƞ@bNcZ�u�g�20)e=],a��!���5����
�C�1/�s\��IL}��1�E��Z�!�A�+�W��|�g5&xAD�]12�$NT���6#���P̊=J��c�L�h���/z�W��e����p=b��D�F�)�{\�Z���O�i!��}�'� ��:`AM��dur��M������1�4�D�$�(^V�W1��#`x��,1�̟T%n[�e�*��
��2Q�{#
�ܡ����}r}��`V�Wiq��O����a_V�`:;�U��;��,u�������O����)2�Ѹ�ܬ<3��d�c���X9T�������j�C�󎁥y����lGG�R��#��H�ޜ�[���ö"��gS�UW�MM�x�}�}s�_��ݕ��ಖ�"�
��-�W�T	JT�1{Z�8ddP;�bv���yw��=����7��I%�{=9h3�p��̅=6�(?����
�Z=G�M��v�H����ns/��
x?�f�82��#�َs{o�T�Kei�,=�E>�XF�{�������ֈ����9͐�y����F����Z.k2N^�X��2�t /���b�49l
C��1_�ޙvR��%�
��@�.����.��F��$��:�N�Fz�bP�x����;������B�>���U2K��H�A�ƭkݺk;NDMO�ky�O���?���o5X�FN������\��֡�٤�q��+�?�P����榺A�z�*pw�d]Sσ��B���j��)��Z���àS�q��s ��rխ-���TWc�����w�ֈ>"�
h�t�c�P���"���>��s�ܼx�P2j'���9�K�v�Z�O=�H����9�4���i����Bc��p�}��}��pU�Ȃ4�Ҝ��Y��&��,�j9����ka����]Ko�0��W$��@j�;.h�6�N+6�u;dHh���k��DR�HJ�Ul9%������s[�/҄Z�2��t����ʝd��&�Q!�7@���LY�I��Ƽ�
���`F=U�B�
����&��#9K4p��K�����c>C��!.�>�]�<1�t��[�Lo�#�a�&�p��Z�h7�
o��\�'��k�R]]���e��\R/RI���,�	�\x"/�2��f����#����r��Ee�('�B��X��v1����
q��*н��h��Ϲ��<B��j�BP�=W�4S�����Y�WQT��r�{G���������rrc�+��5F�8?K5���	��ďIoe�l
�����z��M%�N]�6��"��Y?ң娨9婆*�6	�����GQ.�iߺKbr?>�=Ty	2��ǹp7	�i�U!��$��
"j�����Ù��Ȩu�*����<%��5t�?�b!g\Y`IŴ`�?3l�٘5ο���b���;��:{}���.������[�D�@#���Q���$�M(�
Ư�!�C��0��s�~��SI��HJ���w�V�^�q������}y�Vk�)9�"����u�S
>�~}��Y�V#����؝U(a���RK��̀$����x�}��v��`%(��ձ�C5;�==����&D%�Li���P~ҩ��3��c.!���m��^"Ƴ�j��t�?O�w�����XE��N�_�m<�����s��$cj�l����'��	N}�"!$�-Id���,QtZT�������=ݖޣ�ID1��T8�K
og2�����CZ�
<CB*�.VhJ"YQ���C��l�B���g�{����t߂�w��7�r����<ks�ȑ�+f�\@�$yS�UY���IvYt*�Y���Z�=�=^4����݊�,����t��k:8`�n2�\��ѷl��l���Z�kvZ+��>;�cF�r��g�<��ǜ3�`�J�,�erʈ3����<Kx����7g�y��9�E�+VA�� as���L"&x����dz}3eso�1�ؚG"`'����=��`����=����e,�A��
ÒOe�� ���+@S�l��^Ԗ=X�IX����=�<�ey����@ ��� 	�<��I��x`�,9�qџ	�g�.s\HH$�A,��Y�	��BҀH�Lo�4�}Bu?	���0� @\)F���;��gbQ�*�((��y³ >-#!/�����t�f��};�IY&x��#'��"�,(��jȐ�l���:�	O
4������k���_ฏ뿉��I�e��W01h��.��=s�E؇��v��˰�o
��i5dX6��g��.ډ�H�A��@'o�s=0�6��b\��N?��2/������'��{�W�{���`X-(E�b?�˼Z~����X����a%����cӲ�,B�A�ؤ|�^��;�7�|0_#�ʸhS��J}TM�f�����g�R^sPb�A��i�A)�ƴ�=_���c�"�c�t09a4
I"���3�W�S�y����i�\�T@�Ѐ���>�6
p��3�0��cF���)E���0()Nٙ������U�ȕ�@���]ש����Z�ƖYT�U��4�B����ؑ���������Q�tɨ'C-aTL�ɔg�f�Ux�(�*.��̧A�hA�{�C����ڏ�p�O"�z`-�o]�-�,#FD,�:ӯNؑ�}�2t�����ڜ���處%n�VC�b��?kkD� 0o��
���D	�$�H>�
���w��<r��G��͟l�S�r�De��{σ�������Q�'v�RAS��\��F2�
@Kj�l�h_��*
�U9#%���#gt�0��Y�}f�	x��k�P��a�q�6�N��ڃu���|�rD��
m"�A�0��d�\LP~m�fZ�:�� m#[�q;g98�8b��+|8��q,���lY"��-��<�(�L�Uc�	��(dd��G�5�O�A���!
@��h=���� gi�c�+�`�"�Unꢐi�.9��ꡍz��p[�E��wx37Z����Fl6\��0��q\���\Ru�Zp_����)y�E�S��$��Q�E��}S�*�[o����5�$�I��0?F���l�lJnL'
�AR�G,�I�<��h�]嵟V�)��,V�Ou`�b,��u֭c�#�U�T���v�������ƹ>�����w��p�^mјr%����dy�|�dYa�='��W��Ų�`G���#���i�QW�G|���%��)�,��x���耩,��U|ݥb���P%�l^�.�9��@�,e�]@�q��h��B���F��b�d�"A�aw��&��Xݘr��
K�
��{Jde٤��9�t_G����r�>薲��3H����epLO�3UoFzp;��#�ۻ�j�]|P�h�R�jl!����B����T�?*� ���YW|+u�B���/�L�kD��g�L�
]\�X.�h|��N_�LCB�#���6[�0�~E����R����WM��O�v��E%#<31�y-6a�%�LmFO3��~c	��u�N+����k�#e9�%�"���˜�F�M H���VF���A��
߉w�&r�F�F�K�d����c�(�o����:�L>Q�f��\��&PZ�SIk0���5�Ed`��|l&�GS������2v$�߹摝ƤI��h��$����޿~Z櫁Ê)GF{?o�I�D�;�sc1�;缀����VSl;��i��2K9��(����_Ҷ4���S����3��G�2�
N�hT�אn�����#!(�$���PR <�21�મ�L?�rC�`��O�����ĞK�� �1b�0k٣�#,����K��Mz6-���+���"�If�#� ��B(��iy�-��•�(0I5�Z�H%"�}���;��I��'��h�A�~-oQ�>��U�1:s(�=b��Y�!��p���i=�`�`|J�oˢ���<���+���4fܵJ=�NHb�p��"��p�XS�;�"�XH�ײ�/��(@3���о��x�*g�HT���:ؐ[�jU�S�t���C*N��=��$ũ�Z1��?_ɧI,ҹ�f"���ͻk_�X0�A�LFt~�R:�9,��9���GK��8c���Z
��'�'n��ޱ��H�����qig�]�ZQ��"��;!�Z���G��*߼��&��IS#��'���t����*���LELqUç"t�y���IW=27�+h�P������|�]�R��j9���)k�}�A���﮳�Xw��\����/����&vË��d}�_~5�afhdI�16�!9v�T~�N�%�*5m�'�K�<�Bf��[/�E����Љ�ˠ�s��K���l<‘H���l�kϖ�q����Σ�q;%�Uv���-ܜq[Ct�$U��A�"�����o"w�3�����	�f�����=��IL�"�[X�M�Ns���wN���x-�5�b'Y�����:{V'�v_�㴆鋭;F!�{�I�N���}���盨{��+D<��z�9������l�:��jJ�u�H�B�h�c��A]e�D�VDw��j[VW���
(������b��Y�p�m�Z�ǡ�� �-ޭ�W�j�5��Z��Z|�$:e����J�kg]��n�Ջ�ҵ���.�mI&t�q�a�]�[f�!��`C\n�;�*�n+4�[��jx��k�]I�&��Y-W�d�S�ďD��YY�Ϋ���1��e"�u;A&�K�S�Իmҽc��L]�b��R�s.���u��o�K��ۆL��[v`��n��p�Q����*ڍ�J��/�7�7ػO+�+�U�,9�a��&�`5x*�������Ⱦ�i��E:I�n535�z�E2�Y�Ц�L�����b���s��\w��1�(�X5jv�	�s{7�Rp��18��᧣ׇ�7������4->��Lg�/�{zy�������GP��B��M�|�K�ʜ�����K\�7��^���?�>�F��ޘy�|a)�@60���X��Ѧ"烿��Y�ᬊ�Z�b���r��J�G���[qgЏ�kjh�����	v��B�����
֫O��a/gAeݪ��7L�EZ�4�̥��c�Z�1�:�߸~
-���ٳ��-q��|8rK�fEź���ӗU��ډf��6졐n����%�N�$�N  @+_{���k�cB^4�{i�	��7�#�cE�@������<�F���n�>7��>Ω8�J�w��NRy�kPW�p�����Y��uU���d����e��� �Z@��n����֘�=nt�R�W���S�^��tlN�#�(Bn��B���nx��ҔCNB+h����!�+�<a��yr��'��O�NS��D���O��!t�O��7저Q�}�e�V���+��LV"��Mե�`io?CX@��!�!]Z��T]���c�.�0n�$R8T��G
:㟊k��:Çg�9.�y
��3��H��
�jWq��Ke%2!���4�&���qx�x4���au�
�n�ɣ�;���%&����W�!0'J��@�[oآ���^�������F"���2n�i榟 �k-/A��ca��伺N:Mr�,u�a�K
v4O0jbE��W�.E�������*��*����8X��Q��9��ucjjhJ�9�c��j���oS�/�
���Ώ�@��89/�q�C�˦v�T��
��es�^82}�I���	bبy�kW�;A�M��l�<U�`s��_��,=�ʌ�������D?�ْ`�3��"FRZ�/S핶���ȗov�d[�1C�L/V�1�&*��ރ��m
]
�s|�$<�nvu���u�q�n݃���`�
����z��~٥5�մt����cw��;�DJY�}Em�:�1ͣ}*!�-��c�J&�4�.����g�˱ST�e��j�#�w�M��~>ۀ
FS���
�#��\�X��.C�p�0��9;�$�e��YzRߓ�N6��f�R5&-0�>�cZ�.
�+��oY���B[�z���]��Zw@��6�Zٹ�/h�uQ���X�`�>_���Δ��i.���噅����N/��ϧ�1���&"u����L�ʽ��`,U�W�1�v5ޘ��n5���25�`�9x:��y�
,(�}�3��7�����,��$�x	�@�~�ZH�}��>��e����EW.�$u=�Vx��ʠ�	���NA_Ǭ_��{�
T�NO	�~��EXwa�ի�IAcvWې��ܲ��e;�z�G6�^�G��Ď��A���X�A=إ��!PY��q�^5jB��?�`�@ؖ␪Ln��6�B��]}��\�œu������U��G��ӋZ����dP�/�I������_��������r:�M�L����&�޿��^�Ȟ�/���]�#/v�� �B��V_@†�
L�p��T,�/�e�_Q|C7�~TB���a��K㹯�il�72�;�@�V[Pj�����ۏ�ٻkPS���&��Mof>"V�̍����H�Es���%5J�3�x=2�D�S|�fbICoH�
`&8�,�|FO�����э]��B�f���e&�]�H߫��<i۽�#ȸ��z
c����Z����e�{ż��"���A���[��k��y�����@�r3+�����u��k����]_o7笠����N��i�6m1`k���0�q���۹�9K�u�}"%J�����
�-�I���$���(�8{8�n�}�UP��NuX��M򁗶���>cГ۩���iAi5�C�"�}��<�^|���WJ5a,��u-��Q�	�1Պ� �9u��9���&Z	����/�5Oa+�b��S]�i�Q̔�k��Ѵ)e�2t�Bth�Y�G��oV{1��U�h�������؄���}D�
zm4�ɘ��M "ج��:s��էn(1�E��\@��Q�7�F5	��H�u[�ï�=ۄ5�*��}8��4:�8���v4CX����䍝l�Re�j��4p>o����_�:���N�����i�xR�S�^=s�F�odi�yk����+#��#��@?:N���v[o�`��
�8z@�T�����(t8QN6�Y�)��c�u+�]۲�̏�[AvP���w�=��u����Iނ�h�!�"�����`��_����W՟�c�L��������?pRJ��Zڅ��9+RL�&ů��ЎFuu�BHi�-�D�$�O8��[�ězZ����TOWF�t��x@�z�k�ș9�zG�R�E��0��r�Y�l�7�D2���.z{]���m�C�E��1)˸H����J]�M���>;�j���ߚ�����EaR���r���73�e��e�k�ݒ����Ac�g'@��o�<��4d��6)6x�D���=�"�.���}�y7⏣�zg�-3�?O�Pۻ�R|�@/3�oB��C���NNb^e�-�c��@�}(�������s�y�`wWV��+O�d����� )�ssH�b']ۉ`��[�]`�����W�P��ư�U�YZk���x0��]b)N���PdR3��Ջ_^���\k�]1g��:8d3;�(d�i�	a��4�MTRY��?�z۠wϜ���3�e�$X(��M�خ����-�ɺ^N�v�\�ү����|�O�!ze�;/Ɂ��߿̖����nI�Y��u#���5�ߔB�@M��]�.�<���`${m\?�ּ�ţK_,�H)�_؋)���y/=s	�[E6[��k�{�DM$�`��{%���L���k�LA�EQ�`k ۫	��.����ü硤���\D�Յ�l�	�
�y“��m�E;6S{K����<s���}<b:��	aK�c�9�9#2�^��LV�Ya�+��~�uQ|h;n�/�tr��[5�]�醍� '���;�-!Tc�d^���Ad�b����?S�N�K
����_�0���_��"��4�3w�Ξ���Af~��I�|������i��1�馶� �#2���X�[?ϊ�=��⸈̃oW�U�ϰI���h�ܔ�Dt��jr؟J�l���h����~N�U�-u��xz��1@7�Ào1<:��?>fl ��H��sJ|Y��x���?��?�6�$�]ߴ�&�����B��O-$ݲ��ă�G,޻��xU��L UǶ����L-�+��d�H�Z���{ϭ0h/-���u�����֩8��F��p*"��w�(���F"n��\zGG�@��x��fs�t�DԖGkL�e�;Bd`L�y ��TF�O5J!�g�ik�
!`�z���R���&Pؿ�q����K�˛�k�F�>��),'�>���^�΁=�*��{�%�H)��*Nz�8����"8��>�:*��ku6A&Gλ�)'I5��{Ux��Ȼ�Y��NS��	�p�[#=��e="�Ti�a����:5e�	j4���sⰹ��;m�"��K����?�[���0AP�����ˣ�X5���^�f�����|Ky��������)A)��ѝ��Յ�ϣ%ߢnW�r��7q/���l����8k��<o[�цØ1�����;�������4~H�@��Uս�/�RW��aр�����y2��//�eZ؇,8p˓K���T�/��M���$���Q�bt{ۛ��ӎ1����z��0F`N�L��;������`ūm g��҉�t�}�*vo�{wR�6�?��Kw����AY���3�i�'�G�ɮp���ǧe�}�e�wL�����`��Qyb��^_&:Z$Y�H�����%@���cSi�A�|�z�~�,5T��졝K%�2MT|�1��@�R�F�vX&z=GF�}%�f��Ó}U��D5���9�m'�C��hZ�r
��;K.��v�Rҟs�2/v]JFa���x��4����^̡�a��I��O�/̩�˅�Q�62�̯G�L�gEY�M�.�W�����*�R�d��#�/���]Mo�0��W4��@j�;.X���N+6�u;K�c���Ú�>��,�m[OiB�2�Jz|Lm�rj�����}=���}C��D���e�2%!&���N�6<�u�%N�m��8���� <K��G,Q�]�TV U�ޥ�z��m� ���BDbV
t�/G�\�
HG�bOL��<�`�h4�uf2�G���������N��%�3�4eUtᕉ��td�w�xW*G&�B���Y��"��?1�Jb����@�F�7Ğ54�LV��7j	�Q3��?��9�[j�D�^1gv]Y ���3�;����g�7�=@���\ѭ�!��,��2&P���RG���#ʼ5l�ynj��.W�65
ۇ#���g�|H��^0��S
��n��)��+�������]"�����!�EȔ�:�B�$��EV?[�]R��A �����E����G�l'(��� ��c	�B��J�^bB����Ph`I����_+��zɁZN@��c*Ռ;��;{}M��Ώ���G�D�~�@#����O>�ǍWb���$k.�D?q,��k�q�rgr�+j7�9����h�$m�$O�o����0�״SR>h(=�A6�W�u(���D2ѿ)7�`�͡iA=L@C�B�$���#�o��&VϷO:��Y�x����6f-"�f��0�ߎ]{�{D��-ޕ�Rk�i�uѬ�ʖ})$$ޑ�m\�s�x2Z-�Ë)G[�~�:/�`
�Bc_��eٲ�#s�4Sw��ڀd(
��6�ߑ�Zf!����$�i����D1hQj'�n�ϫʟe��(a�����R��Y�0��t���`���X�3/X�+�dEC��m�c�������u?�����0+n?���Vmo�6��_q�>�
JKv�Q\]V�~X;��@�'�
E�$���{ԋ_b;-���B����sw��?I+¦A�B�W�eXV�e|��Qq�1��hC�^_��
Wa���[xo:õ_&�zo�Æ��K���Ʃ�
�\��y:����m�l��޶���O���zp��ݣ�N�����P)޶N +���ޓo��o�ï�~c�[�J�!X�x�
��
�	��:‡���>~z��8��d2�LDDŽ5EP�0��
s����*�	̫0�t��Zk��ʔ,�!�:����f�Q�����e$\t=��<d���`�d�2X�=_L�,��6�#��+�:�r.�JS"ں~�q��_�4�\lok=/����_��L�²\[q�AF���뛓zt���g��M�(s�����"��T&bXC:ޏY|�?����+���@Y��LTJ�}c
��k|:�m��v�;W�ӄ������nm�q���Z�ŀ�q�JR�Ƅ��(���B�p��{����C'̭��^�Vz����P�����^���3vUt��Oߞ�It��{5���I�'fu���+ÆA�
��&B�;�w�T��dz/����T��ף��6�Y�{4��=��ĺ2>��/a��ؗj�60�_���K��X���V}h�u>�6V�]!�o4��)����Y+%%���l>(X
-q5���>��)��kk�Ǜ���ɲm�Q�e�V�ͨ,c��z1��!*�H�5>d����ηf�2��K��j��3�_[�1��eBs��$�c���l��7���ng�b��T� �4�S�v'���0��*��L��|8օSM:�\�x�c�$t\w�O���
JO���;��5�.����pd�L�/�e�z�h@IrK=A�Vw.�_$IӣzcBw4�[
�����<�s۶����@z7��Ȳ����q�)���ꏌ�����P"$��HI�Qk�����{7sʹ�E����~a��#�K��T-��h�Z���ߋ�R��2MVj��M�LҬ#�Q$h`&R���N����#�1�"��|�2�%�t&�,	�����N���t+�vt~���H�H�d��e��Y��DH�d�B��\��A�=ꋹ�d���.H��Q8����q��dp.�Dc��d���<���qzp0K�,7ƃ��ɻ�x4�G�y}�ҴQ�a���7 ����f�pd2l����}�5[��a��]��u{�����r̶�:�
p`iE�`�e'�H6i*�~w%��!���Sf,����00�D�)=˲t6���U�z��R��$��,WI�q�S��I�>7�u/�A�@�^�]�
�b�#� z�@�P�	��y(gIv�ˣ�΃<����)`?(��-�Bq���Ffyf!m̫�~0n?��U�ΘN���I��|�  ���0�d� �m"\3��j^��PT1�04[[Wdj�΢ �jF�Bnl��an�����IJL�k�c!�m�71=���q���5��PV0]3�����Su��<A���Ҹ	J�
���	��������b����o��J�̆�d�ڤщh4�#�~��Z�M�'�v--a��9�
�%$�9��>%N�2ߤ���S��>0y(H43��U�"�[�J��͟���L��:H���X���#.�l��ᥙz/�b
;V$�1�y�n���
���^�L���� 牁�<�5�H��
�nW��] g]�vp�g��Ӻ�e�0���v���3�
_��خ֪��w#�jP�%nݑL���P�j%#�s�Xw5W2-d�U���(�J��%���j4������|yF�jV���%��<�2{+��}R��2/>?���؄�*z�j��f��f��M~����`�
,!������_b���}G�Ő����Kd(��E����V�α����d˦�+�	����e���"4[�b��D,�xE+���y�زl%�~`u�ζ�<�ؗwW�W��`4ެ�`�h��\'�����l>r�Ce0[��鈛(tG"�{q�T�l��9LI6��_J:��s�p:�y��?O8�:�7�����NjFG���A������"��I�Bc�2��#��;���݂)��|�[p���0S�*�*�Ne~/�_�#y#Cp��5�`�q#J�&Ov~sEV���w
F32X4I
@v�m�R��`?���92!
��ȂP΃M�P����4K��Q�il#�r��i�@#7���z���Ӂ��\����$9�H��$�2��,�Xt`v���4YM�n�5oPx�a�>-w{�>�<���I�;�s���0������I�$ܺ�jP���@�DN�"��'⺉
V�.+��t�ʾy�:OV?>f�cT�p]N)�h7^��E�
҉M_�f��5o�X轆�l��<m�N���$��"������m.�b�M=K�0r&���W����D��%і��x���=�r�;��zC�1��9c�w��p���N`��Y���
?C�Eir/L�~�4��xk0�����a2�ml5�f#[q�:Uܡ�: w\�����������V��������l%�����&>�����%�T�2m6f�"�4��M8�dҙ�8$.��(8\К����+��c��Xo�B�/,��6ZPU+n�-�ojʋ����c�[�P�jL]&�6a%`C�����ߩ�BF�SZ�y_�_<��Lc��z�IQ�xr
�E�)`�[��&�Qe-K�a���B���
=-[ߌ���4{���UcҺ=�\҃�|`Dд�J�J�����b2�:�R:��[�Aq]�L6�b�����0���ծq�u34�XX���~[#�ʰ��?1�S�4[Z_\U��X9=[a����1��=V� CO�:,3�	��ae>����0��P�͓v3Ƶ�A�V��舋�~	ʄ]��7Nh�,����x�Z���.���H-�XՀ,�i��o���A���I�\�D�Z��%Q�C����;�W	*;�hs9�%��rm��%(�IV�,�`��	zG@B	�Z��/R�aP̾ H�RJ B��M�4�ؿ���?���u��*��e�ߙ�A�&�1!�Tr	�@Y��:�g�m��D��!+��:�����%��/d<���5"[�H'B;vb�M4�s�m�AD#�GAtl3d�.�C�-�逌@����Q�u�tJA[�v����="�t���թp~a��<�}RTp@��(�f{3�(�9U���r=�����O���&Ǫ�}�e�#�lu�����<:�������A��V�R�}���a���w���ވ�NūW�E��bX�s�>s�oW�\�ɌHN*�!梪eQO˼c�.��e L��@�w8�R�m�ۺ�����J�����.���,�9�o�1g#B`,�����2(v*gp�w�:	2r�q�!�ˬ��W*��}�2���'�CϢ���.Q�����=.��6wDv�?y�W	_�`V�݌�+E���|P	9=��'iaX��:���谶������4��./bO�4՞N�K���,:Mq�5xЇ��` ��l�G8��:�l��
���$`�]ɒ��{Z�"�<Z�A��<n`�Da5?�Ju&`�'m,�,YH.�Ǜ����:�"ZZ`��CsH[l��:+L $T�|���,%�k/ev��Y��:s*n}}~=�3�$��9؁�z,�A4���Ӄ�Zmg֍+<��j����t�߸L-���	�K&}
���;tȮ�*�7��c�0���Ȅ_踗��iS_ac��'R*^�!)�������6�ւa����T�'����Xu��}�ʾ-?�<?'h74�ށ�x�jTm�€�6��K�c�O����C
\sO���2��;)�V5�
�)� ��q���X}r�̖l2<�3'�x*g����)�V���=�Ӳ��t�o��0յ��;��ѡH��i�@Ǐ1?�G���5��ڦ:����dʵ;:H���Ճ$`6�\��� (P/�0�� R��:�ƀ�%�y�ikJP�8O�U��{�Б�vq�����<�|�i����X�3b����O/@�Ī&s��f0�T/ ]D 
����	�>H�fc�n�/	c���I|�
��~4�&4gx^9c"f��c�B��7��}����]�K�#�(���a�$����Xl�3���K5��m�l�I�	ʟ?3l{�G����}��YC57�7�_U��Z'�ԁ��nQ�y&1��E�b�G�ᴍ�8b�&�o���N���R�p'��1`����9d��J㈾v�xyc)�8�ixl�h�Ũ�mK=�Ya@`'H�
�#�*
f�qB
::�PT�F���V����4�Е��e�G��U���1q�^�:M (���:�׿� ���|����L��|��1���e��N/r5��y<�$�G��O�)1�iҺ��p��?�?t����I;��{�{�����T.�f:BH���Bb{(�Y��~�'�;����&�bп<wH��&�E���j�`A ��l���Av�F�ޤ��a�b�3���!ʓF=��Q�qW����̱�W�:�t
�/n&o/oz?�����N�d��a�Gi����d�NB�銛_i'>d�c���U���p�`�ɉw�L{��?�U�“`:w
����N�2��'�'��:l#��j.d����k?Ձ����y��;�:Rys��j��_
`�*�~.%86��GEM:�.vrǎFwR�Ċ&�;7��uma|r\Jh�p���2l~]�vhO�	m&�t�k������1�e�g�����R�d3e����C��]Z�s�X�3ԙ�[��O���v�Һ@�W��1|�[���Hdk��X������l�Ցx�[���j�]�GK�S��,u(�<Ov!s��~�0���)���9;�ss��q�]w�,7�����I���C�1��x�y�ѮAf��:��Z@9
t��>������E��/�
�n��&LG�4���v��%�*��S�+��k.*���cM�k���#�O���L�/[�f��އd�׳�O��Ԝ�тnxhs2��h����S9������L�����<�G��&KQ#��Z/��#=����5��2�����WCy��g=���uf��bͳiua>����ą�Lp�
�����x%���ϧ��P����%J�柱���u�!G�h�c�Ċ.��5 <�E���_Xl䦑�h��*7�@��ˡSV����_��/����,:���c*b
��[F(a��������ʀ�>Vq����d�掹��ˣ�b�z@���^���.�`
rJ���
��#p�s��C�����[x�u��^�<�)�P�ك�CӁmΟ�q���n��S�/tI �0����V��sJ4��-Q�	 b��X@�;�fa����8:" ����H����׽�\v�/13�7�퓆&�u0�x���h�t��ޱz�Oy�AC�D����`���OR�n�**gEz�rD*Å]C�ȸ����{ؿw��Z�}"@�s	���T~����T�廿�_r4�P����
�8�D+�==��m����j��15-����VQ�[��~�bi+˱SSS�ˤ��`4i�4��_���;iD!�7�Oz7�7C�c�K�ף�)v����ؾz���nx��ڝ{qqѰpQ������`4��F��>6�����'oŢ)���+�Sn��}�d
�LN�X��?�[?$�su���a��F/��/-Ƣ�m���6d�R��3����_=�3�s��ł�r%�l�rG.�,�V���f:�=`ǭ�:��Ƕ��
e�A��0�5
�/�|��p'��d�݅�^WX[t�ܮq f�=�v�tE��cz.�2��pꤸ[����l*�>83���ȼ�Z4�?�U��ZWS��k�H�����Rg�%��(e$G^� �D��02p�F�$IlWꛞ�Y?���VL�e�8=p
"��3���.�n2�AS������#�Q��6#�9�@��9vy��s�U���ȝ�z�?#�|���,t�*��dӤ쥄��q2���L��R���XS�Ք�K�<;��;b
�Vy@>�7|Ј���ߦvhF�KQ��q[�.j�lvr��|�7dmZ�#~Y�Ϫڭ�ɣ�W�̛�ti=z&�s�¢Ԅyi	��>VAp\׾4�F���Pb�G�m��B
6�[�H�mY�.��cM�7�=0-���|ժ͏��I��V��\Z\�ґ�q�z������{8�
�5�g܍2�J���7^��]��{T����n���{�r����ƀ�B��Q�Y_����������Q��a�ols���,�k�e�3<��h���LBU�.ueg�^��p�{,s^Ʀ�ٱ<~d����F+�Td�m�ɓj#c�a����i`�~[�Q�n�ƶqx����->ȿ�0a"���?�6�[<�]��>�ѳd�Oªv9
cF��Ѵ=ۭ�U�!E���f�Ui �����>��㔁e��܋�F���+X���x
�#���Ŷz}5��3�]M�
��ͽ'��]'�X�;���)�ު�wK�u�M�KF�
g���g��(�v,��c���A�ki�Z�9�4����A�|��k���٘p$���[r��쌳��R8iX��]%����D�Y ��)*_=wB:��xr�l�C�'�:9Iƨ�FN��d|K���;��ꯕ�t���4߅
�G���C6�)�'t�ȍ�PwV��֌�Y��~�-������ӭi�'�3��+�$!�!*�_�!E�1~�O`�{��__���4���*�x�yԼ=>��ϯZ�G���^�u�җ+
@C�pwz�65Q�%*��-�:kGo�YD[��;���	r��#�y�R���f�ÃV�7�/��8ԡ5�9�\oV����{�}Ձ�#1mߊGQiY5�w�x�,A�euo����Pv-�IA���
0��!^�xP�\r��������.��ۏ��!�K�
����M���t��%��Z�wŠv�p:�}�܎�9��ڔ@�]Em+ےV����b�
!���3ں����%�j'�h�[^'<�<Y�vw��:�.�D�K����$�z�b�ʵ�*�����D���sF�̸;l�u5��(��\�e���mn�#�`9�j�ĺ��Oy�Ml<iF�e���S%�ī��-|х��`�H���*��N
�L(%yco�2lMW	�в��u�.��@�{~��#��bw?���ս:C��"=��@�
�FP:Vc��m3
�+�'�A�4�2Ih��Vw�~S	�jy��^�菌�P�B�N��,;a��X?J%�ruK<̿�'Y��_
��m]8�t���*�Oh�񇣓�d�Ic��/a"h�^�U�t��F;�=�3��w����w�6���ށ7�7}����gK����q>{������=@51��4�ȡ�>f�(\��E�\
ZO9Hf
�HJ0�ٍ����̷�qI�X�(�M����%����b7G}�4?L��i4{�)�G���ƟS��jb�N�o��:�iЗ�ժ�9>���y��rS��̈�]U�6��A���/��O�?���Sy���]1`�2_�w��۟!�5���#R�J�d���G�Uv�e�YbJ���$;�b�zH�7�Ҋ�3(�x*>ޱr�|�%�&_��/
ƣM��h�[x����g��7p��?k�Iks���
��,0'7i���髟��I�sҢ�B/�R�x4Mr�C���h�_@�K\D��Qy��ߺ<���}����?M��arI��U��mq�Y�K/����0��0	�J1�HtY��؊�q�P���ז���b��)?�(��V���G�)N+M�6lVd��OB�^c���wJSt�v���8T�D�?�׻ȉ%���p�����K�Y.L�/���O4��7k�	��o)�~�ǎ�t��&�H�����Y.I'��&
��ǣ��E-(�^u���3(~�]{0�
^�t�MyJꎇ0�����$����U���J(Yd�_�q��C��d��\��4�P'I���]Ys�F~ׯ��B�!�c�Ԗe*%۲W*I�<��.��$�"HKڕ��N_3=�AƮ�>ؒ���===}|��P0+��o �?���7S1�7���xY_�i��r��P� �pi)�7�Y��O��uάGj�%�W���
F>���{W5�)��O���^Ow�!��8\F|>P��T�4���-�m�(U��Ch��e}�<{-S�
Z8�J� I��jc��ܡ��X<w4�~��Kg�g2S�{v��0O����X9�\�d�������B]UK��2��(|7���40�C�gѳ����NYC�hp�ѷg���ո���K3e���-W�:|ܓ��E�<�ß�ò�P���:���
]�=����/����H�3e��{�s��AE/`R#�L7U�
�קꧮ���}nٻ�e�	�"0T���� <v��aQ&�2��g/�P��OC�*	V�� �u:^��$"��>�v]��`�<B��mop��׆�Or��r]�a���ub���xO�b
��/�i�0����\W�0 ���	��͘�|1�i�w���o��pç3�����i�̼.�`��#�u:���ם���[���;�(�otU[�X�ہe�욏vᷟ�I����J���w��C�s�1X��#J�uh��G8��,E�
�p�X%@�Bl�F��knvUÀ��5������
˯���!��8J�kd�,�7�y]
���GI���t_6��pMy_n33`
\)CP���5�)k�f�m漏�CM.^^Z�6pʳ���k�C�{~V4@f|��qq�N^��0@W[$}`P��Tss������S%��k%e�v�7��t}��M�;��;��������WgM&�_�l�0{!Fv��c>�v ��+�Վ{����uV�b��yi<�N�ƫ��A�v�:3��\^�4K�crr��:JE�$g�cp5C����4`�f���g�1J�Ĥ�e�f�Y8�[���%i�C��������j?<>�������vO-��\��X�Osu��M�Ͼ�	�7��ET5v�1(/K>d����=.�O�}�o�(�Ah�;�"�<��� ��j��e�BTNq��/�6�#�RN���%Ӫ�bL;I������Tͯ7� *��*#��s�� tܚ[��I/5b��/��#��cſYv�6���C0s�.�;~Д_Ƃn���Ł&�b�|�V�6Q�(���Rx	�$���K-��d�����zS���W������6��
;�l���vw�n|��0.�d0��o�)�h,Æ���q�iM}'��n��$uS�_EvOk����\�d��'0Rz�F镘�:��ȵ/�#�b�HK�V:���.���֋!I�eKvʹ�.����3M���zMԍ�5�/�ݩMv�+��ʬ��n���ߚ��I�N13s���<�]Hv/$sW�����dD9��eSP
��;a�7 �[�}��ݜ�ͧ�6d�$�VkO�yj���J�z�}��LiTv�̽�>Z@l�{~��V��J2LE�
~!!����#�j�ơ���`7!W)��r��q���"��kt};��9DR��)2)?z��|��#vk����Tʵl������$G��D��A�H=*��|R�1z���!zf�+<��m.|�G�ަi��
0������m��$��P���=�%jb�H�qS
�4�ߒ�`m��0�K���)�L������.=J� 0��4�yw��k�3��#,T�Ƙe�j_����D�iՄG�_���3�ŢYYy�ս�<��։�3�eZA#t0`�F�f�?���͉�+b�v3�uV�1i��%z4�Ĝ0Ř��51lMW5w�ג��V���`��=�Μ���`�[-�*�c����F�[�!B��ToOO�a����SLfhT�h��X@�0Ŭ�K@^P��ѫ��_�^:9�xr����O��ޝ�����:�ey}��SN����-@ݜ��Yz�֜�d��ί�P�_�᫟��?A��ɧ����_̖:?~�V�s@6���H�K�A��6�[����$F�ڹ��_�73�}��\�R�i�'�U9�\\��t��KZL@Qq�O���[dϓ��)��Z�P�LO���e����ǫr>��X}0[��
�}s��/��*Z��=��_��X��^��:�X�z��S(�(�V.]��8�T���*A�Bz~��l����M��1�>/O�>���-��ës��{ߐ_��|T�tū.�Њ�.Tz�}�9�����]zh��k9D���Ě��O�à��vS�	���י��#gL�eF�-5�#%��/��yi��Zw�ţ'������ﶓm;�o����d��*l@�{���Z�-߼��<l�n���#L�>��HGh��a}�b&��l(�r����i]��cL3䒈��ܡ����qE��v�����ym0�"�g�֚Z�X���ض��r��˞_7���`|�5�r�����K���w;oD2��+�c���%H���4��,
M �]��V�*�f`��4�6�e͛��o����0]��܉�o&��O/)��@�A>&�a����w=��4�ۤsnFXE�8��랂�Q�\넵|91;�V��
�	g�Űs�z���QD��}�����,��U��݋���#���ټPu��X�ZTgù�yF9L��ঙg^:<��|l1(?C�T�8�+0M��rQ���9f��yz���
;��>�J@����H�Mĵ!���s�@Z�[ty1���-�����8��.�`�1�@P��ƌ19����|���u)8��SM�d
p�����_�؀��Rss-�6�-�b�t���0hHҙ�q�K�C+�5DQ��<Ⱦ3��wM��e��a����^�z[��Ԋ��#m”g9�6�8O7SL
9��ZZ�i��:-��n�B+��5?���0A��T�$_85]$=4�Wd(�|z���F�.���k������}Yu�?(��aP��O��f��9렙ȋ�36D%�qN.9b�-��z���m�,gT_���dk%���pֈu6��}k;�Ɩ”���q�4�q&�_�Of��:���W�ω�+!��J�wV߈6��%F����$Fy���g�|�>�	���"!Rg����}Hl�!�`ы�)�vxX���Б��g�k�d�ƺ��
�LY�����0��\�W���C�s�6��'8�7��l]I�CG47"�"�	�XPv��b��3��X���\�5�Qq����D6^Q�˯��:�)��}N�+������*ٓ(��Eȝ�n��^��$���)y�n��;f�#xL_�Mp�D��~E��ڐ�'�^���mT����~�Kĩ���bޑ+rn����Zу��N�e�G��-�@Gv ��	f��tH�������:j�9>�ao@��O[Zh&�
��c����QO��٘_�O:p�1��$�ed�K�UrX��y���N���3E�g	�a��Ir����ܘ�y���T�{�E�n�E|ѕf��'����^�xmz�˾��"2������=�Q�W
_˺ɴ��#RY}%Y�稦�B���C�������?7�
h��n�-R�hYe"/}�)�B��!�ͤd(�:��d�>��S���\T�����v����`0.����ܫ·�h0������z�%��WA�r���>I}�e��J?
�S�\_ue%]�u���qm9��:�v���.������0X�ݱY��@N�V^��ΐ]U̙Q
 ��u�����)x@+�<dG78]�%�L~
�V�k���@n����
wb�ti;�W�����	
x)Zֵr��-r��MO���s��1��ez5Ԡ�Uk�|	�G���!��E,s�>�G*�
Л�t>� �ـ�
�2I�0�eeq}�VBb���F���+�`�(��iٛa1Z	�
��qk���k�� �"x�_&��u%^gb�8���dXLǓ%t�<����n��k�O%t�褧�O���2<h��ik�l<��������xo�Ͷ6g���ӏ�a�J���9X|ڿz�a����+�Q?�xc4jJ��U�OU�x�27�o吠&J_7�#���nC��fT�"�k^$���
X�~-�57�.���.LZ�hu'��~4��`X�9��q�a:�24�`�Fx,PF<��0y����K�O貍�p�uPH+i�"��B�Xw਺Ql8a3Odo2�#+���E����P�>������}}�q��U���T;���
�$�+*s~%^�+?��N�W�GCma�b�@5i�i��*tT�J$ޱ�Q��<����E����,%-��%ʼ4ԩ������{cR���k�����$u{�c?1?~x�����������{
��[?�����H���e�(mԅ��4���t3e�`V6%�Xظ6(a~�^�*Ç��g]_?�������WQR��h�����@L\��$��u�8�����pD���Hg��	t���0J�y���U�]^ZNz��S��m:#�/�е1D h��|8)��r��@%�	n�>��kڔ���
��Z�I[}��v7�׆�%�󮸛_m��u��d����I܉�rIn�"�/�[kj�[U��[-WaL����i/�����V��E�O]4���w��!��6_��{�wE�4���N�̊���Η"�ͯ��@�X�5TH�5
�:�1Q=
�+�}	&�)S��f����,J��Aw��@����lcGz�jg����Ԛ�<��^�d�nC�Q����O}l�v=r�[d����iy;��݁�ՠ���M�mKJ���j]�q���r1[.��_����Ү���O��k��&):(\��b���쪬zϓW�IN-��.or\ui�y��|����⩎4�b�k��e�S�$��E��x�Z�7�y�h�D�B��hM��Y�%���WN(G�'	��Ƙ�eS�9PSRՠ{�i<���>/g6��j��Iz�˛�b����ʉ�<��YE�a�M׸;��C%��o�z�Ȥ�����H2|����cS$�)>7:c��y��9f�0����77��E5K�/��?�_#�76�U=���F�z���w�BRV4A+�t#d�먨���0���/՟{�m���	;�S�z�
Y��?��'`�0�|���z�z퇕��}8+g��/��L��ʁ��������vR��+�B���\�����2p���n����]�ٟ��X�'����Y��
&i3ǬY�J��v�
������
�X��i�#��U������Z^�\P��
���L��D�0^l�c�X,��J��R/8O��ӂ����k?�ý�͖������[d�p[����]~m��p@-ܷ�{�G��6���m�	�
N�kęN�Kn�A�a���6ކÓ��'�5�ApV�
<�d�Ս���`-�J��Ҽ�淀��"#L�uU�Qޮ<C��o+�&�'�&ĕ��	�Hݗm���oa2�$�j�N�}15��h�3�c@˴Q1���Mc��g���/���[��40�&7��t���������]_O�0�SX�C�H�žMHP��4���
U($)d�M��~�}�}���9��2���ié}���>ۿ�:Y��^ܷp�~*B꒞��YVO�l���COo�f[�/��}{[��	��g!��K!��-�Z��u
{l���x�_Q��D�NF��JKoh�RO�uhi����!_Φ��S�( c��J|β>/3��k��G�E��?�!H��BNb�CU6�>��
b�r�%�B��׻pwvwn�s[�<�y����U��Z6~����������.�����A��hE��ʠ���1_��iM[�$G�n
����\�V�]���d��,2XG	�)���8!Jm����i����xRJ�Z$�X&�j��1�YzZc�qQ���[S��UD���C�G?R�*�d��E~���v�^��?pK N>QTo*0�x<~̯�t�(M��tڐ͜@Nt� �,����ي��x}�n��~�-O����qu�Xy��u�祯TE�� ��=��2��Wa#Z�Cl��Z�^��|�P���)ۿ��'3y��L�0�&�%T^Fκ�u�'B�q�J�-�\�/1��D���"D��;�R�ҭ6n�X�+џ'9,|�<��g��ı��؀��2�m(�i�� )/Ĵ&���~��z�wAԩE7`�񓈚mi�U��=K�^�aiU
Y`���ѱv�t6Qիk��t-l͛(7�ߨ��}%$
��~q�$���[�^�.�t3+�kq��D�OZ�k�cE��+����N��\�V�MG��&��Eܸ�d�;������նo�0�j�I�\d��H�i���
�=��CD�ήs�Ӽι��!��Q�q��_��>ή���=qoφ�1���!,X�h7�[A�=��¼�al�0%_�/�ڎ�u=p��b�ҙ���2�6�1!`�s��'͆)��7k�9���V|Ėws�'�K�ٔ��	��7��S0�ߧ��6�2�I���+���ۛ��!r�T���d��EՊ)a��gFX�H�I�3��;z��|�)��
�t۶U��4��|����rL#U�]V.G���k;��+����.iߺ�0�f�ړe�ExKC%���!�N���Gb�P{`_�	�hLbfM��4���42-�z15�n�zje�
�2�.6#㮮�pt����NA�a��N�t,s@m�|h�H��z�*cK���Mݙh,���C��6�x���K��=��W�`"��)���H� ��%�GSd(��6�kg�̑fOK�#Sd�w�������N1�ޯ�rل.�JU�""z@j�
�^PT�PԄגV9���ۻ	�a��dz�y�3�4�%y����M�j�����yH���}�����B�����N�d'��{�)P�G�R�ݍt�OAMBq{�)������{ٍ;���S�9�l`DQ=<
h�E)���f�~C��>P�t�5b^�a^()})�²6IG�[�����;U"���h�#�S\�G���y~�Y��0��\b���;2�"��2�=j塅���n��-z놾[!v����I^S<pt�T���[�l1�:�L"S��k;g�P�L(%'�(@�¤��7��y�т���z
֑{6�y��F��c�0����,6��U�ȚfS�x�d���}hΩҏ�V�㔤+�/�=#45~��fԫfT�Y\���b����0�.�D�Q����I�s�5���kvUp��*Ɓ����3^c������x���81;��vQ�sn�4Q<|��<e'㹶�S�x�B�0���/G��"i�=u�q�-c�
n�'r�Q�B�����5�ۤ�~�Λ���9�P���>Bsoui�B�bsocKo���.�O�N�Z��V��Y��<R�k@Ǘt�!���������r�ش6~躳��x��g\/�B	g���߬j*#lSXTƇ`��p�.ġ�Y��y�J����!�4�Ua��S��g�PŊ̀p@���S���6�����K��44/���-3-'���Ȋ�M�|���uT�D��Q�H�{��Q�C�@�=:7�G�rG��y�A~#�i�e*�r���0���f�<��Xn�vsC�äCY���)	�BP`�����c�ICI3rf?�(\��i3�(���L�4��v�|BK@(@�`r񷍏��Z�v�܍3�M��?��r'��NW��ba�Q��P���g¡i:���|��3���1!�hD�Jz��꬜��v�Y�wP��ا�|}��L�L�4�����!�R��"��W��@G��Yd@�%r����+�b{�Ț�m���f����
;a�ϼ���H��rג?��a�O�(Jj���U�/77�!�!�}��|;]/n�t[�Sj=��:�
-��@5�1�5����pU�))7
1�1���H/ٴw�M!��Gt��I[�VfB��m�b�S���Z_:Up9ó�P�G~|{_P�ޓ��gU���Ԅ�+�XA��	e��ݍA���"]��s�����3��j'�3Jv���i�/�,�jMT�D���7B�Z�<y���ʄ설E���o&��� ���զP��>�3�>�]��u�;x�~#�p��j��~O���ɲ~.�#���p9���'��
�ޭ�&���-�ɂC|F�A!�6QG+*_��b	��C�	�~k�Mu���׸[R�����(���%�N^�#_/�ń�!��96V����[�㶱oom����ks��~��L2�ȸ�vZKb�Hv�i�xd��ǣ�ȓĆ�1w'�n����`wGE�4��C,��bqX,v�X T/�8&BU𳵅]��FN�͙�	��R/�l��m��š�譊؈����j��_�����	΁f�ת��6M}w5��<;5�40���F�1,~����1�@�({~�:�Z��`-L�ͥ�cvO�'8��U)E?�o}��aV�8�$ӓ1��p0��ƃ�r�įv�X�X02���t���og2��8��(�ՌxO��!~Ӯ%X�ժ�?�lW@}��)M��)��n�i�ӽ�T�I15�U��c7:܋��m��n���	uw&�?��ݴ\L�Q�1k�GMW��۾g�*c&n�V�A�?�**�;�1�;�H������{6�B#i��;�M�KʇDҋ�?h�p6go�q)����o��0�R�Uq�!І�J�e	\W2��$��$�Bb=2�3�J�0�KL�3�q�����怫��텵�l9ն��3�#*�FG���j���$4�7�����'/�H�pg$�VCF��R��.]^N��{�$�b�a������Hd�b���6��&IPw�=��|����͹��
�d�,��
#9�Q��%i���
�WV�Zn���`;�u�Yb@�e	Hd~��dٿ�_�B��r�!J7���z������&���1s��n�R��h��/�Mw�y�5*
4ƀ�
`p)o!���>��0��Af���gkdʦU���}�nF�����46D�k���eٝ���[�����?n�a/NL|�,�k��/;
\m���z�=*R�a9u'Dh�)��@�l7r}B��P�a�8&��Qtx?1�Z�b�`����������q�uݵp��҉��F��ݤ�3n�Yyy{=�+�?�����)�i��.��x� +@�p���v��W��yX�I�G�o6��x��M�fb�������F�X�.�,r�+A��@kF[#f�!"ݺ�˷$���gp�8/��6O�
ƈ���:8޷^�{,�~�%4	�\@�����\nb��4��`e�����м�@�zWo�ho< 苡z,�
���10�b�eo���xw{-`��b�I�o�m��7
C���>>����c�-���F������'�u�;���}��dާ��g��|Tq�!��
Jq���^�,�w~�I��M��\5����ꢕ��e}�R̃E�����a�kJ.��f��by|2�Tt&��C7���	Aa4b��}���������r����G֨�R�\����`-0��.������M��npO9��.��vY}$��O:��Q6��TG�<��M�6��4�G`��?�	o�*�� �V��)��fd�z	0s�������Y��HL���<u9�:$cNe�E%��6���s�u��C�c�O�E����|��Y����Ѐ���/�2!���a4�w�n�}��|Z�hp��j#�,O�C�k\;^��L4s�!Y���[	,?s���?6�jb"d��2�#���'�,�����J&(g��
�_L�h�/�p�<�ʵQ$�)ڝ�vL��b����,`;�W;%���P���&GO}}�M>�wGZ�L�&�8�LՋ�ē�o��<���}�p��Ճ�w�8<��=Zm2�v]�
b+��S��]DJH��b�}�r쪾]e��/~�CAQ��I1���E���tt�f��нZCz���X��9T)�a݂��y�{�*���ȼ���hf!������\H�$����.1��z����K�]���nC-�����'���WNz>в�Vo�x;���%��P"hVeQ��TW�#
	Ίm��P�2O��3��2�_�P��(���o�� 2���A&7]g�;:�,A��p��hw8b1m�{�ĖP��
�
X���� ������#�jFu�ѳ���I�O4
�nv,�>�X��v��Q5KZ_�`������
-�l����{A�q�O�⅀���TtlT�P��dT�_����XsI��X�XH��„_�+pGS���j�w�J$�hTP�R"U�FT�rbv�d��Lm�}���\��a�`.��24��]��&�f@��7�\�إ_5��j9�&.��A/#���I�p�E��(���L��\����\�u{�	�z�{j�|ݪ'�e�eb���W�]�л��B�&
�8,� �-b��EeG�3x.7#� �O��Og�߳�ǯ�7K��o1���t�tC���h�`c�e�����§1�������ՙ�́��h����e����o��
�l��JwHIw�It�w7���_��ܔC���x�g��DN��n�b�΋�S���
a�eМ���Т����i��rx4@��A3����#���G ��׺�e��y�8�Gg�nH���s�A^�Z���e�Ю]��e��?[v��y��{'�p~�U�lY\;�M��������+I��O�J���&�_��?��滯.^�^�z�����פ�O$�W$0U�>Š�rV�á��ae�O����<���Iy�.��t� ��j|H�2Z|��n��
�Լ��(��린�dXi�Tj�GT�����%\S�Qb���`���sx��ڌ���·�<��,)������x�b0��D3b&r-f�!�l5��������&�׋�P����e1��z�@��%U|=�A�@˲��?�Au���>�s��i�?q\�B����Y�ί��";��s���gk|�"z�ŵVaG��j�.�1��>f��!�)�:�7��M��R5�}x1c����Cȡ	]�]��޳D׶~��7��z,��.6nYTyϜ �FR�V�=fo�[S?'k���ĝe�?笨͂���ʆj㗂%���D�Z+�!�{��� ,�ֳ:�f�l,ui�r����e�E	�a3�6`�QWf4ZM��M��S�
�7EU�ʫ�%D�^�
�3�!�lAV�RiY��50�y� ��Mcb���I��wǶ�!@
��޵M�̸�
�Z�ݦPol��}��+GD�K��+Օ*OC��V�����.C�K-�^��1��r&��jd��s54��N�����9�5�����o���N�F�����r��סּ��C[��sa���W���>��"�HT�6jAeZF�Ӭ����v�{Xې|:�߮6�&����b̲pʿͷ�
nE(k���1*i2[��փ~�6;3����n�G��҇8Iu�"�jn}��f�9�نlUs�g��wT�᭟�_0�����3vf�2��_r6e3�K5�G��.ff��<$bg���%:��S�S�}�R5L��z�.���wp_T���J��'�<j�{���:�K|ԩ7���<^W[�
\��v��Q���r���B`GM�	7�?�?(�j�/|kH��v�OG� p(�?�ko�#u
H�V�
fS A�	`!���$���6�.1@r��m���{�n܄63�$z7��M��O�.�܈�D����
���}��g=b�*���}<�<�`��HXA�%��8�{��_�s�eY@�T�k�~�n"8‘�"���힪�Xˏ��� f�J"k��b�ȶ��b�=2��E� z�`�4b��i	363��k���n�G^'����@��}h׳�����eg��Ew��%�Z<�(���9�qzz��m�A*'��0��OO�(0�����򶮋�"��b���j���:�Oz^4�p�����ȫ�����0N�

Tt�:�e�^�}�Ɲz��^�cҩ}�|��,����x��� ��w �S�}��29n���H�)����t��?��l�Ba���Z$�F��PH���P�/H3	p�KtjPJ������X���Ѫ�Ꙣ�@g��(�{�Ai�����X�Yi<9�'��)ܾ�#���H1z!	[5#��i&��Я^����\�HX��	������VK�����ļ�/:_��GJx�(�^�FD!s�	HX�l !43�h<�`��k[�Ms�%��̶����:���J����3�K�6N��R�n�*`2��Ue�]���&DkY�Ν�4T����)�VD�Ā�jdˠ:���#vu�x�;�`)槱AQ�<^�b�������V�,����)�0F�|v�Fh���4�OL���FE��=��v�Γd(&�A����3��D��!V+ �u���3)���#'����g\�0��)x����]�λ
t�
�
}T�z"$�3ض�4MkXx��ۊ|�� ���ٰ�etQ4m�epf��J���x�H��Y~S,3^(qs���!�h<y�M�GLR�q�.
�c �"�G\T�0��_�IP�M	�;Ԧ\��S�P���.1�Vs���.�j�r���8�>,L̪<n� P�� ў�o�+����Y�=;����	5h�_���kOG��U�tv�:�i�Ʉ� �8�*�#w�S���Ih��y{�Ah�/ۻ����3��3� �OT$(&`ʹ����0��N��X���e��sF�.D��A~x�L��>�*���l耳E����OP����̈hoOJP�a��B-�aAjiq9��U���\���O5�z�}jM��4a�.��!M'�5��x�	l��.6�@���6��F&F J$�݉EJ³ꃁ!�P`��o�A�+�0LM�D 2����E�\�Q�Q�@WK3_�>J;]	uYS�C�}�D�ue_�j�RiBXZe�MA�EX��q�y�]h��,9�����
��4��Y�F/~<����x�g�h�.PV$��+˯u�1��+����!B��|8z�RV��,�����y7�%�(`�7�_�J�
�fp�dY
K���&��r+w��ɄJ<�I��l�s�
�{8|�ĤY�K��b���~1��g|��ڌF�#R�����v��G��>nV��薧%ܵ&���Li>sjN�5f?K�Uajpc��s�ưw`�(��e��@�5�Lr�7B�*��K�g��Cz��)���R|Cd�&8
��(KN�F�kA�Cl���a�C���2e`�ɴ��6�S
xG��뙃�'ISd���ķ�:u\�����u����#H����;Aڹ��M�]��ɓ�CQC�U����#��TL��&+[���qK�	ʊ�K�*�Ϙ�@�'TJ~w<�"M���d�L���&�R��Fzew�]p8{j+�(.D���V�7�1P�m�-��u������Y�S����ڽ�B�@7dV�=��p,�O���ǭ�Vsna�v�ťDn�vr�ڹ5�>�����ƽ���oU�C�Uk첈�x)8��0`����|g4'���B�
,��v],��.�!jH�7���t���rLKs��S����R�V0�?\%�Dy�|%��"������Y61�`Ʃ\�@h�/�*n��b���>�Іiɱ�̞FVn���hN[	 ����e��ݘ�h�k��I�+@<~	
�a�l�=%��_A�:�$�R]�����Z֭���t�5c>�����NR�b�b̭����#*��c3���{�E�����ȍ
�ϭ8�RR{A��˳�2�?5��,�>^1~Wc�$�;-I���Dn�'�N�Tތ���pW@�΋�LJ ��vD��D�$��;j^�M��bqq�8�����ˮ�@=�"��s��W���S��XQ�N�	��f�6�g�h����ze��"A[��ϝ>H�Q
���
J�GK��4�,f�����T4ܓ'^�꺠$a��OeW�l�LUOB1�$�\��(��Mh��!��ZQ8��F��i{�d~��W�D����;�8]��#-���x���b�l<�]�ߣ���n?�9x�7z��{S��X�Z
"O1w���#�N�B���%�x�(�&������Qo.�*��v2S��@���sR.R�y+��S�J�bOXJ�D����޳��ņ��\�]Ni�m�5-�ysQ����Y���3y�(�ƆL�E9>��()c�ڪ��K,G��Wu,M)r��yYt�wD4:ُ�s�*�g��M{r �MM�VE�k^��G�0>|��ҁ�jTPIL
���^ƴ|~u��N�r>5�,��pV�$���#{����ALa�5�l`.��b�񙼧�_������P��O�ױN�n���|�sC�£k�q�3�˜�ۤ��j�QQ�A�Nˮ�j�'_�,E��t���Ԑz@{~��ƛ*�-'�t���~c���{vG�k�Q�sξ����H�7&��Xe��?�J��Y��q��}����/(�^'�/(��ބ>��t�Ҕ�U�&���@�5����w���"�{:-�s5��	=w��K�kB�9�����t-$�L�Z�ڌt��g�SeU��%
fR���3 +QfA�٩��p�?5b�@x�����KG$j�
�L­�ȜLn9�iB���w.���&6B�Z��� �������P�e�S4$a�h�A"85��+�,�=G�_�Z�/l��F�W*MÒ"���s:O\o�9���d�7�lM@;K�5l$��e����M9tu'�k0�բ�9�9��DR4���$���\b�e�O�~ǔ䴆qLD�%�%���d)�F�OD&��흲�o"f.a��@��A�]�$ �R2	�Q�_���]Ko�0��W���$��a��1�
h�8E�4N� �;YQ���IQO:vZ���Z;%�"%R�6�@3�r�0����4�mJ�1�-����$/�1ף��hL�=�f.s|K�wDn9�;�[Ҏ��]ۀ]�_�,|�p�cnt##r	�H�,Rl�)��;�؞��%���U��c��|A`�J�XnI��yB�?;��Քd���nB�X��YD^fE�l����`���q�b���U�:�<rg2�a�6��2�]j-Ê����L���*�%];_gK��k�X59�xV��r���a'�Q���v�X��Χ��,'�򠳿���ƟYՑ�e~Ň{x*]�@�T=�[��S�K*˄7���6��Ź�"��pn	��N	��3��֘��{�dq.�y�o�A�І���Ǭhv����];+�u���P�>t����f*<6�e��u����
��Z ���grM��$x�n�^/�
��{m�����*_�U��==�����L�M�`�?n�
�������?_�N�P��mפ�����ӫ�'��׶^���H�g��9� �C>�wpxA淖{��N��_zԘ[��k��\�B��U�,�5�X��WXiW���s��tU���텒�E֦RB�]��wg�)�8�k�?�1]��#�exL�7h�D�&�ΒvC�x_�Q*�q�Ъ	�&��0�e�Lt8�}��~���G���<����զ�ү{�.Nϯ?�����zxb.n�Ǩ�2�ܶMTD`Ij����dX��~�9g��v��@�`�nP�D7�1�uA���hjs$��-�t���Z�ϊ�g��h����|�[iW@[ZtC+T��Ir������+$�"��u��A��J)�5��Y�#C�	����b�ݡ��9��-������B	��fvj������*l.?�W���j��_ǧR�/t��(�5�u���
�������|*��)J�=kX�MT+��I�gG�Z���K^X�
,��x�ݿҢ�b��5u���6�.AmƞߘD�l}.�;��W��b�X��`�_��Q�n f_)"�I��,u�>拎3����7"L�T{&����!�ic�J�By�b,�s�9�;wq}F�xk�0d�q_�g���Y
���
q�@���;��6E�?��Cy�a��GQ��4؆���������}�7��T��Xu~��K�t�F��[��/����ػ(K��ӆ_!<�z�y���ܱYG>��o2@��// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This features file defines extension APIs implemented under src/chrome.
// See chrome/common/extensions/api/_features.md to understand this file, as
// well as feature.h, simple_feature.h, and feature_provider.h.
//
// Note that specifying "web_page", "blessed_web_page", or "all" as a context
// type will require manually updating chrome/renderer/resources/dispatcher.cc.

{
  "accessibilityFeatures": [{
    "dependencies": ["permission:accessibilityFeatures.modify"],
    "contexts": ["blessed_extension"]
  }, {
    "dependencies": ["permission:accessibilityFeatures.read"],
    "contexts": ["blessed_extension"]
  }],
  "accessibilityPrivate": {
    "dependencies": ["permission:accessibilityPrivate"],
    "contexts": ["blessed_extension"]
  },
  "accessibilityPrivate.onTwoFingerTouchStart": {
    "channel": "stable",
    "contexts": ["blessed_extension"],
    "dependencies": [],
    "extension_types": ["platform_app"],
    "session_types": ["kiosk"],
    "whitelist": [
       "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB",  // http://crbug.com/717501
       "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE",  // http://crbug.com/717501
       "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80",  // http://crbug.com/717501
       "307E96539209F95A1A8740C713E6998A73657D96",  // http://crbug.com/717501
       "4F25792AF1AA7483936DE29C07806F203C7170A0",  // http://crbug.com/717501
       "BD8781D757D830FC2E85470A1B6E8A718B7EE0D9",  // http://crbug.com/717501
       "4AC2B6C63C6480D150DFDA13E4A5956EB1D0DDBB",  // http://crbug.com/717501
       "81986D4F846CEDDDB962643FA501D1780DD441BB",  // http://crbug.com/717501
       "A9A9FC0228ADF541F0334F22BEFB8F9C245B21D7"   // http://crbug.com/839189
    ]
  },
  "accessibilityPrivate.onTwoFingerTouchStop": {
    "channel": "stable",
    "contexts": ["blessed_extension"],
    "dependencies": [],
    "extension_types": ["platform_app"],
    "session_types": ["kiosk"],
    "whitelist": [
       "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB",  // http://crbug.com/717501
       "A3BC37E2148AC4E99BE4B16AF9D42DD1E592BBBE",  // http://crbug.com/717501
       "1C93BD3CF875F4A73C0B2A163BB8FBDA8B8B3D80",  // http://crbug.com/717501
       "307E96539209F95A1A8740C713E6998A73657D96",  // http://crbug.com/717501
       "4F25792AF1AA7483936DE29C07806F203C7170A0",  // http://crbug.com/717501
       "BD8781D757D830FC2E85470A1B6E8A718B7EE0D9",  // http://crbug.com/717501
       "4AC2B6C63C6480D150DFDA13E4A5956EB1D0DDBB",  // http://crbug.com/717501
       "81986D4F846CEDDDB962643FA501D1780DD441BB",  // http://crbug.com/717501
       "A9A9FC0228ADF541F0334F22BEFB8F9C245B21D7"   // http://crbug.com/839189
    ]
  },
  "action": {
    "dependencies": ["manifest:action"],
    "contexts": ["blessed_extension"]
  },
  "action.setIcon": {
    "disallow_for_service_workers": true
  },
  "activityLogPrivate": [{
    "dependencies": ["permission:activityLogPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://extensions/*"
    ]
  }],
  "app": {
    "blacklist": [
      "2FC374607C2DF285634B67C64A2E356C607091C3",  // Quickoffice
      "3727DD3E564B6055387425027AD74C58784ACC15",  // Quickoffice internal
      "12E618C3C6E97495AAECF2AC12DEB082353241C6",  // QO component extension
      "06BE211D5F014BAB34BC22D9DDA09C63A81D828E",  // Official xkb extension
      "F94EE6AB36D6C6588670B2B01EB65212D9C64E33",  // Open source xkb extension
      "B9EF10DDFEA11EF77873CC5009809E5037FC4C7A"   // Google input tools
    ],
    "channel": "stable",
    "extension_types": ["hosted_app", "extension", "legacy_packaged_app"],
    "contexts": [
      "blessed_extension",
      "unblessed_extension",
      "content_script",
      "web_page",
      "blessed_web_page"
    ],
    // Any webpage can use the app API.
    "matches": ["<all_urls>"]
  },
  "appviewTag": {
    "internal": true,
    "dependencies": ["permission:appview"],
    "contexts": ["blessed_extension"]
  },
  "autofillPrivate": [{
    "dependencies": ["permission:autofillPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "autotestPrivate": {
    "dependencies": ["permission:autotestPrivate"],
    "contexts": ["blessed_extension"]
  },
  "bookmarkManagerPrivate": [{
    "dependencies": ["permission:bookmarkManagerPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bookmarks/*"
    ]
  }],
  "bookmarks": [{
    "dependencies": ["permission:bookmarks"],
    "contexts": ["blessed_extension"],
    "default_parent": true
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bookmarks/*",
      "chrome://welcome/*"
    ]
  }],
  "bookmarks.export": {
    "channel": "stable",
    "contexts": ["webui"],
    "dependencies": [],
    "matches": [
      "chrome://bookmarks/*"
    ]
  },
  "bookmarks.import": {
    "channel": "stable",
    "contexts": ["webui"],
    "dependencies": [],
    "matches": [
      "chrome://bookmarks/*"
    ]
  },
  "brailleDisplayPrivate": {
    "dependencies": ["permission:brailleDisplayPrivate"],
    "contexts": ["blessed_extension"]
  },
  "browserAction": {
    "dependencies": ["manifest:browser_action"],
    "contexts": ["blessed_extension"]
  },
  // This API is whitelisted on stable and should not be enabled for a wider
  // audience without resolving security issues raised in API proposal and
  // review (https://codereview.chromium.org/25305002).
  "browserAction.openPopup": [{
    "channel": "dev",
    "dependencies": ["manifest:browser_action"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "dependencies": ["manifest:browser_action"],
    "whitelist": [
      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
      // The extensions below here only use openPopup on a user action,
      // so are safe, and can be removed when the whitelist on that
      // capability is lifted. See crbug.com/436489 for context.
      "A4577D8C2AF4CF26F40CBCA83FFA4251D6F6C8F8",  // http://crbug.com/497301
      "A8208CCC87F8261AFAEB6B85D5E8D47372DDEA6B",  // http://crbug.com/497301
      "EFCF5358672FEE04789FD2EC3638A67ADEDB6C8C"   // http://crbug.com/514696
    ],
    "contexts": ["blessed_extension"]
  }],
  "browsingData": {
    "dependencies": ["permission:browsingData"],
    "contexts": ["blessed_extension"]
  },
  "cast.channel": {
    "dependencies": ["permission:cast"],
    "contexts": ["blessed_extension"]
  },
  "cast.streaming.rtpStream": {
    "dependencies": ["permission:cast.streaming"],
    "contexts": ["blessed_extension"]
  },
  "cast.streaming.receiverSession": {
    "dependencies": ["permission:cast.streaming"],
    "contexts": ["blessed_extension"]
  },
  "cast.streaming.session": {
    "dependencies": ["permission:cast.streaming"],
    "contexts": ["blessed_extension"]
  },
  "cast.streaming.udpTransport": {
    "dependencies": ["permission:cast.streaming"],
    "contexts": ["blessed_extension"]
  },
  "certificateProvider": {
    "dependencies": ["permission:certificateProvider"],
    "contexts": ["blessed_extension"]
  },
  "certificateProviderInternal": {
    "internal": true,
    "dependencies": ["permission:certificateProvider"],
    "contexts": ["blessed_extension"]
  },
  "chromeosInfoPrivate": [{
    "dependencies": ["permission:chromeosInfoPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://version/*"
    ],
    "platforms": ["chromeos"]
  }],
  "chromeWebViewInternal": [{
    "internal": true,
    "dependencies": ["permission:webview"],
    "contexts": ["blessed_extension"]
  }, {
    "internal": true,
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://cellular-setup/*",
      "chrome://chrome-signin/*",
      "chrome://discards/*",
      "chrome://hats/*",
      "chrome://mobilesetup/*",
      "chrome://oobe/*",
      "chrome://password-change/*",
      "chrome://assistant-optin/*",
      "chrome://add-supervision/*"
    ]
  }],
  "cloudPrintPrivate": {
    "dependencies": ["permission:cloudPrintPrivate"],
    "contexts": ["blessed_extension"]
  },
  "commandLinePrivate": {
    "dependencies": ["permission:commandLinePrivate"],
    "contexts": ["blessed_extension"]
  },
  "commands": {
    "dependencies": ["manifest:commands"],
    "contexts": ["blessed_extension"]
  },
  "contentSettings": {
    "dependencies": ["permission:contentSettings"],
    "contexts": ["blessed_extension"]
  },
  "contextMenus": {
    "dependencies": ["permission:contextMenus"],
    "contexts": ["blessed_extension"]
  },
  "contextMenusInternal": {
    "internal": true,
    "channel": "stable",
    "contexts": ["blessed_extension"]
  },
  "cookies": {
    "dependencies": ["permission:cookies"],
    "contexts": ["blessed_extension"]
  },
  "cryptotokenPrivate": {
    "dependencies": ["permission:cryptotokenPrivate"],
    "contexts": ["blessed_extension"]
  },
  "dashboardPrivate": [{
    "channel": "stable",
    "contexts": ["blessed_web_page", "web_page"],
    "matches": ["https://chrome.google.com/webstore/*"]
  }, {
    "channel": "stable",
    "contexts": ["blessed_extension"],
    "whitelist": [
      "B44D08FD98F1523ED5837D78D0A606EA9D6206E5"  // Web Store
    ]
  }],
  "dataReductionProxy": {
    "dependencies": ["permission:dataReductionProxy"],
    "contexts": ["blessed_extension"]
  },
  "debugger": {
    "dependencies": ["permission:debugger"],
    "contexts": ["blessed_extension"]
  },
  "declarativeContent": {
    "dependencies": ["permission:declarativeContent"],
    "contexts": ["blessed_extension"]
  },
  "desktopCapture": [{
    "dependencies": ["permission:desktopCapture"],
    "contexts": ["blessed_extension"]
  }, {
    "dependencies": ["permission:desktopCapturePrivate"],
    "whitelist": [
      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Media Router Dev
      "226CF815E39A363090A1E547D53063472B8279FA"   // Media Router Stable
    ],
    "contexts": ["blessed_extension"]
  }],
  "developerPrivate": [{
    "dependencies": ["permission:developerPrivate", "permission:management"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://extensions/*",
      "chrome://extensions-frame/*"  // TODO(dbeam): still needed?
    ]
  }],
  // All devtools APIs are implemented by hand, so don't compile them.
  "devtools.inspectedWindow": {
    "nocompile": true,
    "dependencies": ["manifest:devtools_page"],
    "contexts": ["blessed_extension"]
  },
  "devtools.network": {
    "nocompile": true,
    "dependencies": ["manifest:devtools_page"],
    "contexts": ["blessed_extension"]
  },
  "devtools.panels": {
    "nocompile": true,
    "dependencies": ["manifest:devtools_page"],
    "contexts": ["blessed_extension"]
  },
  "downloads": {
    "dependencies": ["permission:downloads"],
    "contexts": ["blessed_extension"]
  },
  "downloadsInternal": {
    "internal": true,
    "channel": "stable",
    "contexts": ["blessed_extension"]
  },
  "echoPrivate": {
    "dependencies": ["permission:echoPrivate"],
    "contexts": ["blessed_extension"]
  },
  "enterprise.hardwarePlatform": {
    "dependencies": ["permission:enterprise.hardwarePlatform"],
    "contexts": ["blessed_extension"]
  },
  "enterprise.deviceAttributes": {
    "dependencies": ["permission:enterprise.deviceAttributes"],
    "contexts": ["blessed_extension"]
  },
  "enterprise.platformKeys": {
    "dependencies": ["permission:enterprise.platformKeys"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "enterprise.platformKeysInternal": {
    "dependencies": ["permission:enterprise.platformKeys"],
    "internal": true,
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "enterprise.platformKeysPrivate": {
    "dependencies": ["permission:enterprise.platformKeysPrivate"],
    "contexts": ["blessed_extension"]
  },
  "enterprise.reportingPrivate": {
    "dependencies": ["permission:enterprise.reportingPrivate"],
    "contexts": ["blessed_extension"]
  },
  "experimental.devtools.audits": {
    "nocompile": true,
    "dependencies": ["permission:experimental", "manifest:devtools_page"],
    "contexts": ["blessed_extension"]
  },
  "experimental.devtools.console": {
    "nocompile": true,
    "dependencies": ["permission:experimental", "manifest:devtools_page"],
    "contexts": ["blessed_extension"]
  },
  "extension": {
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app"],
    "contexts": ["blessed_extension"]
  },
  "extension.getBackgroundPage": {
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "extension.getExtensionTabs": {
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "extension.getURL": {
    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
  },
  "extension.getViews": [
    {
      "channel": "stable",
      "contexts": ["blessed_extension"],
      "extension_types": ["extension", "legacy_packaged_app"],
      "disallow_for_service_workers": true
    },
    {
      // TODO(yoz): Eliminate this usage.
      "channel": "stable",
      "contexts": ["blessed_extension"],
      "extension_types": ["platform_app"],
      "whitelist": [
        "A948368FC53BE437A55FEB414106E207925482F5"  // File manager
      ],
      "disallow_for_service_workers": true
    }
  ],
  "extension.inIncognitoContext": {
    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
  },
  "extension.lastError": {
    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
  },
  "extension.onRequest": {
    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
  },
  "extension.sendRequest": {
    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
  },
  "extensionOptionsInternal": [{
    "internal": true,
    "contexts": ["blessed_extension"],
    "dependencies": ["permission:embeddedExtensionOptions"]
  }, {
    "internal": true,
    "channel": "stable",
    "contexts": ["webui"],
    "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
  }],
  // This is not a real API, only here for documentation purposes.
  // See http://crbug.com/275944 for background.
  "extensionsManifestTypes": {
    "internal": true,
    "channel": "stable",
    "contexts": ["blessed_extension"]
  },
  "fileBrowserHandler": {
    "dependencies": ["permission:fileBrowserHandler"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "fileBrowserHandlerInternal": {
    "internal": true,
    "dependencies": ["permission:fileBrowserHandler"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "fileManagerPrivate": {
    "dependencies": ["permission:fileManagerPrivate"],
    "contexts": ["blessed_extension"]
  },
  "fileManagerPrivateInternal": {
    "internal": true,
    "dependencies": ["permission:fileManagerPrivate"],
    "contexts": ["blessed_extension"]
  },
  "fileSystemProvider": {
    "dependencies": ["permission:fileSystemProvider"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "fileSystemProviderInternal": {
    "internal": true,
    "dependencies": ["permission:fileSystemProvider"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "fontSettings": {
    "dependencies": ["permission:fontSettings"],
    "contexts": ["blessed_extension"]
  },
  "gcm": {
    "dependencies": ["permission:gcm"],
    "contexts": ["blessed_extension"]
  },
  "history": {
    "dependencies": ["permission:history"],
    "contexts": ["blessed_extension"]
  },
  "i18n": {
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
    "contexts": ["blessed_extension", "unblessed_extension", "content_script",
                 "lock_screen_extension"],
    "disallow_for_service_workers": true
  },
  "i18n.getAcceptLanguages": {
    "disallow_for_service_workers": false
  },
  "identity": {
    "dependencies": ["permission:identity"],
    "contexts": ["blessed_extension"]
  },
  "identity.getAccounts": {
    "channel": "dev",
    "dependencies": ["permission:identity"],
    "contexts": ["blessed_extension"]
  },
  "identityPrivate": {
    "dependencies": ["permission:identityPrivate"],
    "contexts": ["blessed_extension"]
  },
  "idltest": {
    "dependencies": ["permission:idltest"],
    "contexts": ["blessed_extension"]
  },
  "input.ime": {
    "dependencies": ["permission:input"],
    "contexts": ["blessed_extension"]
  },
  "inputMethodPrivate": [{
    "dependencies": ["permission:inputMethodPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "instanceID": {
    "dependencies": ["permission:gcm"],
    "contexts": ["blessed_extension"]
  },
  "languageSettingsPrivate": [{
    "dependencies": ["permission:languageSettingsPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "launcherSearchProvider": {
    "dependencies": ["permission:launcherSearchProvider"],
    "contexts": ["blessed_extension"]
  },
  "login": {
    "dependencies": ["permission:login"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "loginScreenStorage": {
    "dependencies": ["permission:loginScreenStorage"],
    "contexts": ["blessed_extension"]
  },
  "loginScreenUi": {
    "dependencies": ["permission:loginScreenUi"],
    "contexts": ["blessed_extension"]
  },
  "loginState": {
    "dependencies": ["permission:loginState"],
    "contexts": ["blessed_extension"]
  },
  "webcamPrivate": {
    "dependencies": ["permission:webcamPrivate"],
    "contexts": ["blessed_extension"]
  },
  // This is not a real API, only here for documentation purposes.
  // See http://crbug.com/275944 for background.
  "manifestTypes": {
    "internal": true,
    "channel": "stable",
    "contexts": ["blessed_extension"]
  },
  "mediaPlayerPrivate": {
    "dependencies": ["permission:mediaPlayerPrivate"],
    "contexts": ["blessed_extension"]
  },
  "mdns": {
    "dependencies": ["permission:mdns"],
    "contexts": ["blessed_extension"]
  },
  "mimeHandlerViewGuestInternal": {
    "internal": true,
    "contexts": "all",
    "channel": "stable",
    "matches": ["<all_urls>"]
  },
  "networking.castPrivate": {
    "channel": "stable",
    "contexts": ["blessed_extension"],
    "dependencies": ["permission:networking.castPrivate"]
  },
  "notifications": {
    "dependencies": ["permission:notifications"],
    "contexts": ["blessed_extension"]
  },
  "omnibox": {
    "dependencies": ["manifest:omnibox"],
    "contexts": ["blessed_extension"]
  },
  "pageAction": {
    "dependencies": ["manifest:page_action"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "pageCapture": {
    "dependencies": ["permission:pageCapture"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "passwordsPrivate": [{
    "dependencies": ["permission:passwordsPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "permissions": {
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
    "contexts": ["blessed_extension"]
  },
  "platformKeys": {
    "dependencies": ["permission:platformKeys"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "platformKeysInternal": [{
    "dependencies": ["permission:platformKeys"],
    "internal": true,
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },{
    "dependencies": ["permission:enterprise.platformKeys"],
    "internal": true,
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  }],
  "printing": {
    "dependencies": ["permission:printing"],
    "contexts": ["blessed_extension"]
  },
  "printingMetrics": {
    "dependencies": ["permission:printingMetrics"],
    "contexts": ["blessed_extension"]
  },
  "privacy": {
    "dependencies": ["permission:privacy"],
    "contexts": ["blessed_extension"]
  },
  "processes": {
    "dependencies": ["permission:processes"],
    "contexts": ["blessed_extension"]
  },
  "proxy": {
    "dependencies": ["permission:proxy"],
    "contexts": ["blessed_extension"]
  },
  "imageWriterPrivate": {
    "dependencies": ["permission:imageWriterPrivate"],
    "contexts": ["blessed_extension"]
  },
  "quickUnlockPrivate": {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://multidevice-setup/*",
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*",
      "chrome://oobe/*"
    ],
    "platforms": ["chromeos"]
  },
  "resourcesPrivate": [{
    "dependencies": ["permission:resourcesPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://print/*"
    ]
  }],
  "rtcPrivate": {
    "dependencies": ["permission:rtcPrivate"],
    "contexts": ["blessed_extension"]
  },
  "safeBrowsingPrivate": {
    "dependencies": ["permission:safeBrowsingPrivate"],
    "contexts": ["blessed_extension"]
  },
  "sessions": {
    "dependencies": ["permission:sessions"],
    "contexts": ["blessed_extension"]
  },
  "settingsPrivate": [{
    "dependencies": ["permission:settingsPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "signedInDevices": {
    "dependencies": ["permission:signedInDevices"],
    "contexts": ["blessed_extension"]
  },
  "systemIndicator": {
    "dependencies": ["manifest:system_indicator"],
    "contexts": ["blessed_extension"]
  },
  "systemPrivate": {
    "dependencies": ["permission:systemPrivate"],
    "contexts": ["blessed_extension"]
  },
  "tabCapture": {
    "dependencies": ["permission:tabCapture"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "tabs": [{
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bookmarks/*",
      "chrome://tab-strip/*",
      "chrome://terminal/*"
    ]
  }],
  "terminalPrivate": [{
    "dependencies": ["permission:terminalPrivate"],
    "contexts": ["blessed_extension"],
    "platforms": ["chromeos"]
  }, {
    "channel": "dev",
    "contexts": ["webui"],
    "matches": [
      "chrome://terminal/*"
    ],
    "platforms": ["chromeos"]
  }],
  "topSites": {
    "dependencies": ["permission:topSites"],
    "contexts": ["blessed_extension"]
  },
  "tts": {
    "dependencies": ["permission:tts"],
    "contexts": ["blessed_extension"]
  },
  "ttsEngine": {
    "dependencies": ["permission:ttsEngine"],
    "contexts": ["blessed_extension"]
  },
  "usersPrivate": [{
    "dependencies": ["permission:usersPrivate"],
    "contexts": ["blessed_extension"],
    "platforms": ["chromeos"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "virtualKeyboardPrivate": {
    "dependencies": ["permission:virtualKeyboardPrivate"],
    "contexts": ["blessed_extension"]
  },
  "wallpaper": {
    "dependencies": ["permission:wallpaper"],
    "contexts": ["blessed_extension"]
  },
  "wallpaperPrivate": {
    "dependencies": ["permission:wallpaperPrivate"],
    "contexts": ["blessed_extension"]
  },
  "webNavigation": {
    "dependencies": ["permission:webNavigation"],
    "contexts": ["blessed_extension"]
  },
  "webrtcAudioPrivate": {
    "dependencies": ["permission:webrtcAudioPrivate"],
    "contexts": ["blessed_extension"]
  },
  "webrtcDesktopCapturePrivate": {
    "dependencies": ["permission:webrtcDesktopCapturePrivate"],
    "contexts": ["blessed_extension"]
  },
  "webrtcLoggingPrivate": {
    "dependencies": ["permission:webrtcLoggingPrivate"],
    "contexts": ["blessed_extension"]
  },
  "webrtcLoggingPrivate.getLogsDirectory": {
    "component_extensions_auto_granted": false,
    "whitelist": [
      // Extension used for API test.
      "ADFA45434ABA2F1A4647E673F53FF37F8F6047A3",
      "4F25792AF1AA7483936DE29C07806F203C7170A0",  // http://crbug.com/775961
      "BD8781D757D830FC2E85470A1B6E8A718B7EE0D9",  // http://crbug.com/775961
      "4AC2B6C63C6480D150DFDA13E4A5956EB1D0DDBB",  // http://crbug.com/775961
      "81986D4F846CEDDDB962643FA501D1780DD441BB"   // http://crbug.com/775961
    ]
  },
  "webstorePrivate": {
    "dependencies": ["permission:webstorePrivate"],
    // NOTE: even though this is only used by the webstore hosted app, which
    // normally would mean blessed_web_page, component hosted apps are actually
    // given the blessed_extension denomination. Confusing.
    "contexts": ["blessed_extension"]
  },
  "webviewTag": {
    "internal": true,
    "channel": "stable",
    "dependencies": ["permission:webview"],
    "contexts": ["blessed_extension"]
  },
  "windows": [{
    "dependencies": ["api:tabs"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bookmarks/*",
      "chrome://tab-strip/*",
      "chrome://terminal/*"
    ]
  }]
}
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This features file defines Chrome Apps APIs implemented under src/chrome.
// See chrome/common/extensions/api/_features.md to understand this file, as
// well as feature.h, simple_feature.h, and feature_provider.h.

{
  "arcAppsPrivate": {
    "dependencies": ["permission:arcAppsPrivate"],
    "contexts": ["blessed_extension"]
  },
  "browser": {
    "dependencies": ["permission:browser"],
    "contexts": ["blessed_extension"]
  },
  "firstRunPrivate": {
    "dependencies": ["permission:firstRunPrivate"],
    "contexts": ["blessed_extension"]
  },
  "mediaGalleries": {
    "dependencies": ["permission:mediaGalleries"],
    "contexts": ["blessed_extension"]
  },
  "musicManagerPrivate": {
    "dependencies": ["permission:musicManagerPrivate"],
    "contexts": ["blessed_extension"]
  },
  "syncFileSystem": {
    "dependencies": ["permission:syncFileSystem"],
    "contexts": ["blessed_extension"]
  },
  "webstoreWidgetPrivate": {
    "dependencies": ["permission:webstoreWidgetPrivate"],
    "contexts": ["blessed_extension"]
  }
}
��Vmo�6��_qut"+NZ,u��l��X�|)
�OkJ�s���Q��ĉ��-F �w�sϑw$��IhY"d��V�@!��. 2�ҪYFpt�gQfM�9�/(3�u�\k��Xth�QvZ�q&ʔg6AH�D�ϙ�F[��x	�����R#h�`�0�A"
���J͢��
� |���^�!U;,7G�d�:�A{Aip��a�XU8�ډ���0d��~w႔�|w�~X;o�Ă��SQ�i)��1VNsQ�ک*���mRhU�y>�]%�2DjCf1}RH��:N���G�<�,�/k������u`k�j�i3��b�~���Ts�@�`����
�@����.���(����1��p���5�ŵQR���v�&)���Bw�0�NR�R�e�C�Rp�c)�h	\j�P�z��	.��$bW�*�5� �Z�o�P���sy�(�&�?'�r�.6m��u�=��8_U��S.,�{p\ޞ�g)�d����^�T�J3kn
�J��iEs�(IY>>��X�R�U!,��cmdZR���Ȍ�)��o� �(�,�??R+�"F����r���z�n�[CU��J.+�G����m"��A�>��c)w��eD��� ��pqw�	%:�&�1���A�e�g�28���#U3Zs�|�7UU���7�2������%������[z����d>����=؛|�dW�/�㲠��8oA����(���hń���Q7�0��}��s�|in'G��p[��p�7[�C��Q�l!�y��C��x8if�� �������򖛓A��k%O_ҏ	Ɋ�Qes5My�V@���b#����%��"���˺<.�ue���x#�o�����~�7>
���y9�J�'[��W	��Ù�}ٷϮjd��|«!�����/�{R�hr�~�A�z�ɤ�J�KW^�ݹ=A5͍T�B��^��7��<�B��2�D�9�,�ϸ<_q�0�Qo|^���p�����
���W�w]bf�\�&������ϺL���թ�^[æ���/(��p���W�o�6~�_qXjy-P`I��m`��hҽ�{���D@&�rjt��wG�r��i�ۃ����;z<��n6F���7��>��
aR���
.[Wic3��k� -�5��x�,�^����[�#�@��R��(,`��n�#�65B-sT$�*� 
Ț��UHE����������d٪�I�@�\�i��;���Ȟ�hk*�p?�Z�P9#����KH
� �k������L4
�bRɺH��+Ғ���Y���*3z���#?��C�\/:h&�B��P��>t$�p�9�hE9�P֤r�^Ae��K���)�j(���A�%���:�u9ge��+*a9��<)������k}/UɊ��M��Tzsg|8�i��1��a�q
��Z�-+�
D%����H �r·A�n��HD�'��� �d�u�L-��0�24�F���-�Xɝ���{Z�����ᯌ�����]&헟��+ʼ�ad9:��
@o�o���<e=Ŋ��a��`�1a�R�`���x�Q�fT�4�;C����A4�C��o����ux��$
����ɶr�'�Xt��8큯���E�:�Ry}�V��Lo��,�2�j|��׷�o��=)}k���P�u��+e��P���V9�����2BZ�jj���-�/DT�L����JP+���BSr}��>�{no�d�_���/�(=1���ivўu��E�uu��}S�w�c�ã�B��д�4qꫮ��4F�'�IW�ML"zpr�-�u�}��*Ҥz=���0L����?���,�S#�]�-̓.?�D4�� �r���a�wN�H
<�y��k^@q;%�*��Na��Wԃ��Q�(�
K��ĨL[�1q��\�J:}tD$b-d-�o$WQ{�������B���{�E����E�A���#(�D#���1T��_�H��T�F�����#�~j�Z��B��Ǥ��@���.6Y!� Je��ĕG"
�!���)����N����q�Ћ2�=��$�W���W^�Kݿ����c�%��0ɰ������8���E��`jW|�	��p����lM�"Q$M�;	Oǹ�+�EH��]��?�)T�S��<Py���	(
��TKk�0��W�Pq��nzh�
�K!�{)=���%#M^,��;r҆�8-9K�=F�OabS�,J����~�qiM%Wܯ�4�
�^)h�Xthט
:Ѓ?��@�t��ʦ����0k�3Hv `���v
A�5è�А�g��Jg 5�#�x�g�3ȥB�v:]e�B�"І�u����H�;�WH��BK2� a�F
�v}`\�x��Z:�(�����r�,��'��&+�Ou�gmd��J�"����גJ�1Ա_�k��78��5�O� q�˅r������団D�t���/�!�z/�vG�.O��ܯ�����\��1�"˘��͈�q��\TR1ke�q�Hq��l��̨��jx��ZJj��"��o2-�T��g�`}2�_���E�d�/�+{'J$�>���l�)�
[���M����=��(�!G|KԐsz�^IT�(+Ahy�҄:V	S�d�r_iP�X��h6�G?�JFk6·�0U�4ʹ�H*a4��y���RS��E���.���H���!�kDН�߻f_я�/Vg��Y<�jA�'��(���b.�:������mz�J*�h�L&��|���?j�[{�ŷ8�����D��ԝ�p9��'�cP��x��wG���� ~ڕ��_�cCBY��a�y��x�5,
�y��H��H'ps\[e��n�_�VkCd����Cz�U���\1�!܈���e��Mޮ
mJ���kBUUMM*c�i��� ����P1A������^v��$K�	*�΄�&]��L��z���gC�qfS(J:2xD<7e����_�l�]�Ub ��(��w�d�����q��]��0L�4�-GId�0�%ޅ�\������RGD��r���{Φ]̸oaa�g�ڋ����q1t��D���-<��ʼ�o�?�`JI5Q��G����b'N#�����_Ã�N�m��K����qb,G-�߅�O�_�_r�!�g�D��Q:���Gƽ�_�Z� R��NI"kU�i��c�^�I"��r��!72w���dz��>p<�׹//�w9މ�1����M��if^L�T��ݔھ<��$x@����}:��]o`����$䦬�QJ�X6.��1li�S��{_N�r*͌�':*J�����P��B��J08�N��_�VOS�{'3�s�V[q��P�*?YX��GO_`�)�n!
]�oS�{�l'�ST��	N�0��g���$��}\��+�D�)]��g�����售Y�����Q��lϲl2D���"��nV���ۄī�Uy%QA�W���Y�~.H.Hأ�ݼQ�S�)��:�TS��x���U�� ��D��W�2�D�ό�s@p�U5c"!Z ����7yY��A��sY�N"�s�wX��䂾�'�ꯑ_���y<�-��t��'.�sֆnӀ���D��1������%h��" .��������䞹�׫��y'Q7�/�Wv(C���D�l����S�S��먩���ͯr6�g���՚��f�S�2���y%Q�CjP��"��#tf�}U�YSPk�ۨ�S���I�{��,�}���"�%���_ �(�R���Z�ûr8�U�v��v���y�KD����y��W�N�͝�j@�C� W8Q[S��.]�F<��6P���Z@i�%A$����+iq��*X�C1���PI�R��{������*��R��z��L�����{��p�g����w�����3DW��� y���f�A3�4w�?�_Av��`	~vk�R�j0�o-G=�QOF�JM[�zT�q��ej�ߩ�FNa��y�j]U?�v���V|����� �0Y�`+�b:G�fꅪ�@h$�$����LI�ON�&i槠���;o'����i���ꪮ6�D���wN��K��2�d2`�{�9��ۆR�5����ރ�H1��dw)م4���{�L��A4���I&��!E�(H�{��^����PwD^svU�s�{z��՟��RG@a�d�R!���!�Q!��
�q����]RJ˿���{�kBRP(�c!$�'��=�H��B(���ʬs��"��\eX�h$���c���:|��d�L̶9�"[4!�@B�G*�n;���(��*��΃D��w�7	�0:�*�R�jg�׍6�җ��K��� ���E�^v��jM��S�	�+�)��"S�0��S(d����=/��+�^���D��w��I�h��Y��n�/�F�)`�qZd�z���M}�(��O��k �fZ���W�Rdž%2\8��
 t��(��b��D���=Ӵ�n%ɝW�X@p=yel9��>k�p��O�U`YMG��j�9GNkV�Hf`�W�9l_��u[�$
�k���U����i_��Ŗ��&R'����dž���k���A��`��gu�YV�'�Ҧ	!H���������$C <6��ģ��6�<E�Ⳇ�5�3�U�S�}IlQ����&�ݞ
�&�$ۛ����@�qN:7�)��֯�9=�u���>�%@K�.b5�̃~Sc����ۚN9������}�'��$�:�~n���B֪qW�v�Q�G <A�N7W�?���l�� D5NrY����yd���h�m!�8�i�_�8J���弞o�<�⊱�lW�m�x6��tOr!�Z)^�n��T�Ҁ�k���G~c�u���Ï_#"��4u	;�毷�]��7�i%}�����_ȓ�y���n#�m~.r��a�۽�'�}�/j�
�O��������ϥ������g���kZ��<��
��2�m�Y�bA�K���^�L��R^��9t+�SS��޻�أ�hcl��Q���^��C�ɦ��(~���ɠ�e�������/������#Iz��x͉��c7w����=�ɜt.O�
\
��>�4p>3�����^i�dWŇ|I%�T�,ɨn�ZRS-��*:���zGc�^���x�8x-]Ew��S�sW��)�'�8���c��
L�����)�%��Y5��{�h�T}
]�}JW���\)���:Vcʙ��q�YV*4f��|�u8|��1�b��"i�z��=��c]ò��:zQr���H��Q����%K���/mxm��Ɲ��rN��V@Xҝy�0�y@��4��d�S{�%J*�*��j2�+��BA��Nq�r����Gȑ��{����.t%��q��An�e\��,������+[�I�B�1�l�B��jÒ��{��R����||�-�>�����L����o�ed(>�q�7%����x�}����ѐ�lJ�k5�<^�~[�?�<v�w�%�?G�i�?��̫e��"�lz9(�8}��x����5��Nǯ��H��)����b���F�u�U}
��2�UP`�R���)4ٜ�"1�u�n�*_|K���g��V��]wX�7| �jj�Ga�Ww2ޮh�[~������C�xș3�ݍ�g�dt���v�ns�?]L*��>2�n\u�e���-ɋ��1���:O���~��e��:5�KR2Q��Q�p0�`�I��˨��6�N����F�3����'<?M�;��nꑼ�?�On9�D���AY���5�Q
������Y�2�`��	i1~�Na�m�L��6]wh�'7p��Ĝ��d��1�?ƷRܫ����a.��m��t�?#�^�
�(��|w���
�p�N�zCR�mN��d)��sc�M��w�@��l��ĺ�Y��2��)���Gq�ٕ��N�N$K	�bOn�/X���d��8��F������3}�E)W��)'.�[��_1=�̣��N��xMA�w��{<m4Y!�`�`P`��qǡy/I��g���$h )v��U^��&�wT|kr��[�K2���#H+ٞ7�
325Š���\$��PΦ��Y�Ja�HJ��He
u)�+K��%#����^��y����p�2�0Wv�i��Pkm8�\���c.��������L�ŋ5N�=;�!L"/1��H�k�����Øҫ�ƀ���	t���sX(8���yA�`�׽��ڋ�q�YT*�}*qUn�:��{#����he��������!cs�V\�.������E>ђpAH$�&+!�@�y���i��N.�d8���^��s�h
�����8�-��"�kTbW���g$6Rn�pL��pX�:�p�k�K���&H(i�AG��E[
vG��1Op�*x[mϠ�q�\4""����srB��}E?�^k�7xf�[��k���bQDFt���{�ש�|w�[ޡ�2}������.��7�Vu�wڲ]��4�<t��>�c���@�G���ѥ���	��f��CW2'q4�܍U��=��_�⎯z'J��ŋ��A���7@yE�
4�,`S�7�A�>z�TPi���m!MgT��N��X��ѡ�T��~Ig>e�b"��=�}��y��815���LJk{-�"`��p*��F�_�0A��s6v�Z��"O�m8�W�]7��`c����dA�0��q��F��T̟n�̳D��^e/��0���UkP5�^�+� �-�Neok�G�G����ϵ����INB_[�iܲ���h��#�e�UrmjY�5�r6r�����h�M�t�Y
��:4��_{}|)�A���NOad�i�H��t �K��n��|$���@N;�2��G�Y�~i��AtA:����He�a#�X&6��a��Z�"O���NT���x���Ue��P�O��p��R���*w�ɉ�{�oi:+������-�'Ay�^b�F,�y�U�J�Ehvb>����<�E�b�M��k�8hZʲ7�Em�Ԃ��7R�	϶W��z�<��"��
M|��P�^���3��l�����e� b� �H�Q�SY@C�S�Ĵ��iZ��v���}���1MY~��S���FTF�p��h�5;���9��t�e��ۣPF@{C��a�,R�/^�<^�r�Bcm��=G֬)���Z�>A-�xʊ��EtQ�RX`�'ل�ĐǒB�ޕ��F^ԉx{k�����Y�P�2@�6�>!�/ %t��q���#���%��XR��I�=ޱiz�8�l2ВoA�O��x����Ӡ��W �%Ќ�c�^Г�E��Xfʢ�u��Z���O�TfQZ�ё�]�7�lIY����E��B�p��a���m���8��D!�B��d�t�?
�8&a3��R0�L���0�{�ȴ�_N1�;`�Jv?�e���U�� �j���R�@���C�����n0�}�Ɵj����'��2�
-�5�u�9�j����7HG���)��߽U&�{�!����;~� �~k;�JKєU2��<��v%��\�Lw�3ʈ�R�D����+�V��J�-�5|~mYJ��� ���1���‘$���E���â�����#͌]R�ਔKLT�e�{c�$E���"��#P���.UE�v����՚��!��uK���蝝Y��e�H7�
f�hY��ޖ�$�z���5���_g���-'��M����<��$�~���Ct�n^�fD@^�"րr�r���מ+l�	$wU�����~���G�/NŤ	�&��2��F&v������1wbAڷ��;ɦ�u�h�[�$�f�X4�r=r�@�"qU�o�ݞ��}�#W�� �@��m?�.�,����m
Ҋ%����������)�1Q/�#����O�BT�.�N�����4)��ؽ�X�ޫ9��$��%��=��.7~�J��!`)\��h0�1a�$�R��@d�IF$��iK�5�h�#�(��\%�=9�r
=_8J�ޱS1͹��99}
D�}��S`��c[��(�ɸ�_Fa�
�IM���@�O�y	.,Z��"�T5�d�����~z=��#񤓨��ь��k�ދ|�.4)��=����Sf��G�՞w{� oA����<��Բ)cw+O�`��:_��pR��>���e�
;oDe�8�/{5��י}��(&��k����yK&��\6���Ew��SA�:��/0��ܼs��E��4"�O=�y,��O욌#�|����2���x�����qj&h]{����4�)�^#�
�.��†$%փ��˿֑hi��������b���@�ԮQ��~���xTz#��+�!N%��.,mS����߂:��&�l�at
��h��'��<{�i�Y�MH��tߡ�ٟ����o�YSŽ�D��om���v1����q�
t���"�?�1z���>S�)�x��pЪ24��Ko�!m��#7ԛ;]�X��ƐN�J�c}��*���#y��M��+���P��kf�<�{�=��8�)+3l����17��%k��C�QV��:]�~L�_�D�ۅ�&�@�ހzp;�)�3�!	I�[�w�᣾�!dY$���V�D'�L�!0���4��g��'�1di�f�g3f2�c�6�_+n�Z�g���9��g ��	43P#���^��kR�
�l�����"*�]4;1�(���*"7�h�dJ�"Ҍd*u�~�쪎���Rѵp�G��#2'Ţd��V�(O��a�`tX�;w�K٥X����us{���nS��P��L/W�-�l��)6B�_�l�f�,�1��C��Fd���w�ͯ��b��U���9E|qz�oe�-��g0�x�Nj;Z"�I�{���x����ڬ�[��9�c#ł]�v�kA��)oƵ'�h;�Z�ZP{�NA�0h.~���4�3v�H?��x\�3=1��/WQ>��Nr�{��<'p2���n��*�G���/��0�����t�X�bg4!�(�"Wx�����3��d?\�6�0�Ή&ܚ&�F�Rd�dt~R)��OQ��
1�98B�=�0�F��b���Z�WC��g��\�P���)�ը���8���T��7q<H״��t� Fܭ���5����
�%	#+.�%U�+��(ÎQ��3FI��
��s'}xN��_ϐ�g˷^eh>��7��M���a�8g_a$�#នXT��
�\��Î� ��9V$I��5	u<�'�7��o�$-w�Lw���2�2odb1���j�+E%��\+�$�]��>9ؾ��jյ��Qeđ���S;�^*�,�Y�$��G~?xsjX5�z��R厴��znޝj�:�\�Oq�w3@!~���f����D_ڹ�ݚQ{}�I��K̍^H�х��+�'cE�̠N�E�aK!��a b/��*QH�w��j�
��ﴮ��Xt���
]h��G���Ȑ6,�	P�g�t^�Y�EL�KϝZt�t*��ЩA�{FkXi�g��m�6�\�L2��	�S	=-��f�*�`���}�
*�&ڂA�7�P��&"R��>����+o�)���c)욁���+�!����+x���l5�Xh|k���;�H�� 
��h�Cq8
m#�x D� ��j�{�ǥ~��L-?c_����nVջZ��-�?�����A���q�'Z�=q�f��yJ�V�I�#�(��R���Y�'FF��ӧ����83��*?V�04�ݸ��a��x��X�='�RA�=�6���X�Gt���5�K��Oo�ٿz#����%�:p�
�År�W���GA�����P|���i������(�s,���0���� k�U�G�Н�N{�
&,��`�LRp�U�y�|��|��גW�[�8�y.G�8'D4�[�t��uE���tĖ&n��X�(��՛��J��I'�qס��9�f[=����䎟������~��=���a��d�-vG��PW0�_��z:���S���x�*u���/��u~�6���L'r�.JЁ>-�ĪZ|�Ɋ�k6�R�Dd�r&s��Vm[ۗF�ݲ��0bW�bjb�&�m*
�UYƹhR;���N�j���͌j��f`�Zy��nE������4��
�9�o�]>��\��]��09Q�m�U#��J���`��>0ݿ枉h'\��"ެ�����^z�i,�b��7Pj�N�`��Qݩ�[yH�;�-��Ҕs�����"iL�O��8�]:
���n_#ґ��ſ
)B<p���D@�'��4�j�"J��G���
�'��NN�hTT��s8���ႃ����/��-/-�����s�0�0��U�����_%�t����w�$��D�VI�]bX�u�u�ѡ72��F'�
����A��"wMk���E ��[E�R:�=�a���Y!G�K�ƍ�eyd��N�LӤQWgc�ƀRr,�ퟓ拼T
Β�6�a_�t�֡�ɝ�.ӓ����wxM�w��\�y5��^������'�^Ο;��lw)��?�x����X0��(vG�o���ZB���
�|����?��ԏ	3�W��>�O�'�F�_�C�n��_vۤ��A�',��to���I|�{��N�w���l��1�``>ӑ�d����Xi0�]c?9��h�
����{x�z�� ��g"��"� �6�m{l,��ܻ�!M���E��J�|<qidH�l��a��iu7��#�G5�k�<$���.�g;K^�qi��.9O"ۚ�L�O	e$_����׃г�	���D`�K�1vg[����V��<���}��ip��Ӱ6�ō�l��ڮ(�ZҖk[,�!��Z�uG�����hH�'���Fv)�X��f����G��>>K��ߪ���g�&a"���{��%_�2
���7A�K�\��ͽڶx�J����6E�6�M

V��4�H����soP2�z��яn�;����p
�̂/�:A��O��}
�j����҂}<Wmz��
tEWT�2��\���iQ��O� Ecڼ�5�+[��e$�S_\C�����L�6��r�_�YHݎ"�*j,�;h�T�LK<�]�n��Q�{���:su
6�MqB�Bd%׆t\�V�	�-doS� �H(��Yd��=���"����D��Q��n&W0SB;�K
�D^p	��N�8(�N��C�9��h�@�����6D+s��To�({��/�@=ώJi�O(m������<ĶP������^81���*ܯ�z%y�Sd8x����?�J^�*�jxG��JO�%C���`��RX4>s׊*��*R;�0��
i{5����/i�P~�f���*���x']���^a�m�–�B���##��V�^ ��D(��'8�-�^(��k ���j���?:�)�nQ�&���*�����IdC_b4�_o`��gY���!I����42qmxW3�Y�w�5�����y��H�������.��J�>vdt{F&z]v�
�'\���"�����$���/۔Fg���y:�Ci�`��M���F�j�G��_�&bI�,�N�ƻh�o�%X�����}���eɍ�ُ���D�.o�J��5W���>�d-UK��e�+2oP��1/p��m��#���`+�m_A�LN�Le6�>�Iz+���h���;�3���!�\ham�!�^5�w4�x�e���ۥxYuѬ�_���'��NUK�d�k�U�p����tW/+_;0��w�)`���ou�	�ŋz�e� ���"��KI�(D!(
��>�?��$���svm�{�T��u�©b�}T
�p�&�N�|a�w�"X��*�UV*�)�@���W�>��%��}=��0v��-�l�39��?�[��K���9V���a�>lNc��,�^7.��� �����fbF
7��Ρ��G��qȶ$<Apޞ�D섔�;+1�|�d���|ј||���qUo�����N&_g�Q.�f!/:�S�݀��ƚԧ���Dh
Z�m�Bm,k��xژ/ք��]d�|x� +��C�t�͡ɇ� �p
B��#�.���ǯ[w��0-ǵ�1L����F��e�4�}�'����s��t�+X��}�ʾ1�u��F��{����:=7&�HDv���Z�.>[!JK���1��!�H��mC6�M,�M��'8�£Z8,wp�o�[=A���{F7v⤲"��8�N&u�1b���k;�7T���ȯ�b��ُ�Rd\�H�$���CQ��w�����9��9i�F~=��s�fL,2�����~h?��d��I�1�&�=AkϾ��j����x[�C��X.}�5��m!��DZU���
,��7�M����i�ݤ�x�Sv�
��e�L���i
~h�t�%�׷Cb([}�1kVj/:���[}p�����D��8J�T}7�TNO*�V�R�l��c�mH�D!'�}Qk�PY�MAz���1)�C�L�\_>�˲�KZ��1���A2�T<2,nq\Ni��Bl�qj��z�l��&���N�sx��G�Q��e��p��	�k֏~��\��>`ӎ����%M�'�[MB�_�$R���#�α��coL;����.<�hd��᝗y�?���Q�e钄��>�P��q�T�<�!���1���O*Icܙi��LD�\���i�=j���D.��\��x����$��4����5�e�J6Z
˻W<�����`�c�M��	��xN����g��aC ]�dm��{T�6�M5B�ٟBH��мη�f��h6�����E��m��$<.&_n�Mv$��fouɻ���o���z~ܝ7�WG��c	�楟��"��Տ�S}��g�5k^�U+�'���ԩ0�ނ`$2½�a�#{�����L/�U���*��y�b�P-���J6�>�r +u���ٮ��� r��;L�0p��5��{��e�Ë�6`i�9j�KlG=����z��|�\[�h�T4=�,�D�!�vQd*�C����\Y��aJd�N�i��ۍ������j.���_	>{�s(���{Ug{u�叩k�d�����{俆ʬ~r�ꪑ�2�͚~�s�n<m��`���R�
C�9��Ō#L�x�/ �;�{���
��<E��k|��v�����`$&��K��D��Q
�x1?�1�y>3��V��������@�?7��N`<���K@��ٛ����,�&1��jd���*�4y���Wf���! u�*�'K:A~� �~�ܤ�nY��[e��w8�9��d���7�<�|	I�D���cե�x�6��۾�>�/V��TN����AO!���8%��L�lb}��4c<�<��$��A�J�������6��H�福x���z#�\�a{)7-q�v&S�P$���Ы��~U�"0�=�]�����[:3����7J�?�v�Z+$
݂	I��9�zbxQ*�9?=�ň,���I}T�f�mF��nˤI��vb�N���&*h�q�)O�����sKK=��׹�ӓgE9B�o��䬺Nע�$�$A��?b��f���X�_�r��5*�N��+���+��MD��?�mr�.���=�O����th�"��`\Y�,���I�o�t�<���6��M��o�e�'O9�^%2=��4fו�j���*�$(�p��G
�SK]+��;&1Y�2,^2�dl7@���!�7EM�w��K�%��w�/����|��/�}�g���k>�m�@��:��F2��Q����N��7$m͇�ݺ�/\qDV�:��G���$!N�!}�x�8�(;9��R׆%LY�U��랓�/}P����F�u�J��Q�ǝZf�J~�em>χ(��o��XY�k���,x,�g��y���f!EK��R���(�}����Vu�	[�ZFװ{]!] �3B���?$�(�^�e�PDs<:>m�4H����K��8rͼ1��9�f('N�C�_�����}�&��Y���]��TF�{J��˳�����)��JP�#;�eޏ�!��ǻ��껢g���{�@k|���c���7K��M�|���L7�a-�<�yC�|1�>�~�Ŷ�wq�e[H�x��A�\�e��t�A:iK�x��
Ws&�j�S䯯}F{q��"m���v�}L5��H�s��5'���16n��>�Ѧ�`�a�W67�.P��u�q��1؋���0v�ON��U�o�{�\s?o:.F<:���Iuo���8�f|5�]^�<Q�]3"vJj���|\�Tg9‹ۋs��_��Q7��T�;�t��^�������s���`�0�CL��B[w���W�P�t�}��Y�m˫���$�9���۰���1t�dQM3�k{*����~�.o�
K�k\-AX>��am��M��6��=D����]pлm�����4�fPQ����o	�m>T��z��r��P��5s�L�fe����1����&��d���B!�Lɟ��2��<#����y��R��hH�P�8,�'���*`���i7���1G#���5�8�\VCo=�D"�ϒ��P���V	�'�s�?� ���;��x�&�� �w8�_U]����܋3w׏�'�x�#o_"����{!́��Ŀ)uT{�[6��s=Hcj?���M��OR�3Q�
�@.�\>���w�����|އ(�/����_4_�=}�0	��d�R��rewv!L�`9���l��+�W9���A���v�Ol��Ѽ����~�u��*܏>�k���:Хj�s�@����gWa/ [���'���!=^~B������5xb>@$|��΅�	�Uޱb����b�W�:�_[&&�]\�&�F�R!'=�_��51�`:pD�lV7"@�l� zH���
��B�����{�J��o�Vg���7��+8����b�����O#x�q}X�uxځ
*/^A[^����W�SR���$�<��`�� A� wC�np���r�#ј�L�*�YCP�6 ����f��}�9����^S�y{�R�l����L�S��3D��#kT!j��B�-d�/�6@��(��ݓ�Ӊ�]ll!���N�U�3t�jg�}�
6p<'T�,o|���2`I�[p-�]0l��F������T[��j���df+x���IH���"S�w\,I�s*u˗>`?�Y�`����=쎌Ӳ2Ɯ�P��V0��R����A�0*4P�pj�'� ~���6�gW$���g+^&^>��_�ᤢ�'�$g�b˖m��$8�/E���Ҡo[o(IN�ž��$'��Ed��X�kR�hr���%	�)��Q7��]
��&S	�&ݒ����k�S�Cw(I�W�P�\�S�����35�D�M�z�I�>һ����S��I#ЃzY/�׎�j��J����$��`����ê]l��$�?r��Wj;\}�C��0`W��&4j��+ǿ�J�KW�f��3�u�v����лŇ�8Ѿ�+�$`$�_՗��d��\�$�f��l�=o��8Ϛ�e�o���>#:��)�8�Z`[�͡���`�9��G�>��&�Jܖ�}�z@I@ݲ�-��_�w}���&%	��f��zAI0W͟*����7�$�Y�%	�^�����5����]v?I�KR�8CK��mP���\�ܹ�u�����Y�%	@١\R�|]$6�?��i[w8I�F��p�l�������,ĸ2�}[O8IGږ^p�@�Ңw�
�L�z�I?Ҭ��d��Y�@��8$;I�}�M��:I�G�{_(�B��Rš�I$-{�u�����Y-G]=�u����A�)	ɞfC�l�R����$�#����&|�������`�)} %�w"�-�6���$%H��&��R��+�$�#=J7HI�G�;]�6��;�$�#mJHI�G>�7f���$%��f��${s�S�̱�7�$�#JHI�G~��ѻ���z%)	@%��m���/e������R���$�#;�L��<ytҋ,n�!%�iXz@J�A��w�M砝u�)II*�tm�)	�tS+

z%)	@%{vm} %ؾ���
af��$%h�f��: %@!y��l�;II:�3k�)	�v1�'�!%��Mz@J�6�%nmx��E�����$�<z����`�V�1�r3蝜$�<z����`[<�}9�y*IN�a�ӯ�Nl���Tv��
'	�H��
N���\�|fF��x���I�/Ҩ�b�����k�	'	�H�ҋJx��{3�9�o�[aq\�=����i� $��B-�ó^�t~!��w;���]uWn���׫܎��w.xzZ0�*�э#� hZpo��o�o�U�U�����[c�M���I�^(�smR��lCt� z�0�R��'��<Ym�`���%�FN�:�Ќ���t:�������r7-=p��.G5
��o���%YV�0�U�g�l���a�E̛uFִ
@
Z��2C�Is�m���1��<�c0ҽF���8s~�m��y7P5�`�۝
5�
1\u|�꾺��/��r��ͻ�l���[z�g��!rFϻ��|��PJpzH|f���e�
�.I�a�~�B~�j��u��`���E�l�e���Z-��$�
�q4)'q��i�v����������fl���!�[2Ů��g~��-������x�g��w^��dOx����j��GݼpJ���tb�����EK�Y'G�e����N^ߘ�[k���9e�|Q�������l#�Z�J�Z!�4��[<0�ʴO�ߪ!q�Ҵ��\��_m��H)>ˀ����Y�x�$���}�Z�J�Bvf�>���5�~j�Ųz{����A�6��=C�X���H�ۖ���}�N���S:ܽ�tX掝<����#)%f^��t�G�Ws�;�5:ۀ�;��v��̰�	�O-���J�6��n��ӑ'��Ö����W�|�>���&�/�Ӌ�]J"��Iz��4���ZfE���#Ӹ��<5.�ѳ6�2Zx��	�����&��+@X�<�6�M�
���I4D�`펍��;�~t&�,Mƍ��i1@�]|��iA�_�@i=Y̲�ͣ�o�͋
Vce�hР�VWɜ���)���n�L:8�Xh4��S��Bq�/#�<51W����0�4�$j���D�����(��;�A3XF`�@��#J!Yk���NK|���w�D�X�l���yʱD�no�=�A�G�R�7�ĺ�%A}�Fj�y'�۔n������̢|�������ZC̴�`����W1E����"�����
���AY�5�ٹ����T\��8��侇Je��)=<!6��͞M��ƳFI|h�[�D
�;-v
�j�$�j$c�GA>	��tI��Y���Ws�Ýi�?Bz�ן���I'!���G��;��I�+���;4�	˛p����S����@!8�"j��,�����0�	|�M����4�6Q#���@�^L�wO��N�Ŋ��m%�
�?��'��;�7�����m<�|,*�x2<
ؠ׳4��)l�]K�`����F�F��]���N���$T}t�ϴ����xE�N)<�hj'J[�s!K���&�Z���e��ۀb�苴���'0U���B�J�)l�E�H%fZ����PB߶���	���\z�^kI��v;��Y�w�Ε]J��yH:&�|1��璝t3Zq���Ң:H)ɳm�egyj��d;�hY7u�P�ѷI��V}�D����Hܐ��<�#�\C��;E���q�逝�U%���'R�u@��;�� �H���'�:>SS�T�1�7j�oW�/���IC&�u��Gx������:���u8O�<]�T��2�85V����+�.�5�0�0v'��:D�S"q��k��-���O��ƙQo��~WS�:�ES���)��RQ Mٰ��8��dK{ɷ,�Q�5��C�H��T_fo��P�g��W�Z�����(ֵ��0�x3V�2=��`jʧ��T�saB�F#[?�����ڎ'+�C�6�j��1�w��1���UG�����6^�-��\h�Q[��jR��3�Q�e���ơ��a�A޶̆6@-W�I3�p���P�7�1cH2Z��a��\����inG�ϊ���<l���H�32�u�����U�~T�>S�ul�8v�;��K���;v�NHɴ�� 2n�1��W_P�Ú���8�\��Y�1�w����ޝ�
6c
F���D��ޡ���KcQij��m�6�M%��8���?T����)b��}�
�>g�[U����

��ɧNR$S��G�e`6F��L���=�a�����s�z�p
+�Vli0a�؜S��܃�V���z�[U�x���Z��j��@	U0����ۢ:Q9ڞq�iO�nMM
�����]ׁ]l����H�?O��[�T���n`	��@\��po=ۉ(n詪^jU��%�E[�E?���vm�ԳS�~��`�3�����?S@ٕ(����@��@��l�!�Mm�N�0�)6
V��&z\sCs>�c'� �6
g��0_�+�I�9A|�eo�`=�"
��KaH��N1�Ԭ���=R	a�Z
�H-,�Ρ��S`����J���х^y��(�t�'C��/ɍ�ro�~e[�s��}$K������4)�G)x7�z7I�B��͒Y�
�:T��U�:��lT"��Uv�E
lv���Bod#
��iSiqb�J��1���tm�D�=�&z�!�Sr%��+wzM��$�.��l�H�(=�.h��V�kT3r:xS�X�������cϗ#p�S@vV�%Z�����c�Uf�X�F�
JS�Ր� "����;�a����܏�}���l�EK�*Lg�/7��'�ͤ�BW�������%�εO���4�g�P�U�\���VB���!�O��j#���X˥Ɯ鸐O6���荭�Ĺ��K��:�G��%�-2r��M���"L�]:�N�K��$��Z�Gnɦ�}��&�,Ј�ʲ����;<kr�j�Ъ��Y	Y�1ѿm��z2�۝b�1s�!z�qF�Z�4���ɨQ�DȈ{i+K��q�a.h^��\��X-�JR�0ɨ�u(�1lU��h|�˔M�^�=`S�����������|'�mc4'�e
����a������nM���0i�ڥ�G�Z�k��Oj���ֶk�jZD"�^}i~���к ��Ȗ�C�|����Íy�&(��f+�ȢZ勼E�����gZ���#YY7>Lܧ6E�`}0C�k֜��ݥ�m�#���Â��Z������\~7����$�c��i
K4����:�g�H����׳)����WP�7��IǠF�]��K�N�&��9�@L��v����[��8�V�qq�~��&*�y���Q6[�P}m�I֍��G󑗆���L�:�:��û�Ka�`�v��c��D�3zր����2y��a,�#Y.��W/(�vS��*+��>mj��3���0eJ`Z'Rd�o��֎*���p5WN�st��)�t��@�5����{[ȏ��$�Qc�\1TGJ�_��v{Ehu��M�x)PWJM�#a�:l/5��ci��*��*ŋ��ʝ�Uj�*o�坵�q\���*6_���
�Ģ��C��ɐԊJ�U-(���N�.�F�3 �R�%ٶ��5���]RD�j$ꐞ��X�1zُwd+���d����fэ��DW5-("������Vꇮ1�0��jy���-!7��jC�4j�*���e[��o��pop�mD�v��6���EEJl��ܚY��⦏��;yz��7��5R4Ӓ�v���e2Iwb������YE�欝�IN0]R)Y^€=�b$`���K[�R˄aM�-&����
�6I�r�8{�����A�S�:3g�>���s/�6��(�
f��j�v�glD�g���o�W�׮�JM����>���K��D�5fdw���G���Wi
*�<{��E�4OX�)BsӞNJ��]��5������\U_��,q9�ȄR���nWڐ!���
{�-0/�0��6*���F֢L?���,WDX��d����KP������~�����j��Թ��.ό�J7��%��tD���e�H᱘fB/���wTϟ&rFϋ/��.xzD���3z�㜷�q^J���m{A?#��?J��8�t�Ώe%/�r�Q�CʙF�^�Y�BϺX>o��=Ot�l���y>r.
��^�Bz7ɢ4��n�����ܴ_E،��|�h����U@<Xzc��\�RR�����8W�xLc�L趇)8ˊ�̌`TrZ0��b�	��C�n?[��7�J]��<9�-�����	�m��/���lJ�z
��K�*�,�VaC��A;�m�m�
�����.�~���/�)<��wг�
�
�~���d��w{�?HZ@#�æ�ć֜�޿�A���d�DqJ԰]���VÄ�Fnq��fEm밖�DL�o��LLw~���l��
�6�M�7JtĿ��J�X8�C���9�͛�+y�sO�f�j�(�y�6�U�ęH��ѨN;�xZ� �w�>���Y�E�5k֌76ȅs���jq�%�K������\�̲��_�6���eq�q��3�\���Y�{�\�᧰���X����o��%��u��b,w�Q�*����"(��(i������'�V�R��|UL�Ab���i<_q�'�9�Н��u6��q�[��e�rD;U&5�b!w�^[^�����M�m�2$��ӱ�a�����-#.Nxq�.|
�t`QT3>5�*R�V2�*��֚�nƲ������%"F?S���/��R5�Lw	8VJP�VR/Oout�5��}�iv�.�z���NV��,	l[����g�pi�>|5���ߎo��.�x�"U"�Y�`5��Şׇv��K�[`l�q0T�p#�8`�[nɯ]C]ƶ�d]�:/��Ya]�`��
�J�ꡳeI2���^��s��}(]��c��Q����B|�������L%���@��0����*�E`�ۨ��Q1�ЦMI�c��zȮ��1̨�F0F��<*l7����-���#K�}U�ۜ4=#M^����2�~��਺��j�8V̉$@��+l�	3AI����m�S�y�{+�Cqo�@V��a["���4�4GQL��4�3��`�m>��T��y>�U-�|���,��u+WX�k�1�J��H�Ѭ�/!��Xd�5Ry1J���Q\����V�B^��k�k����l̀�RI�[�tw����غ������`�1�֯�������J�D�v�a�{�5��hDj��������fow�:'a��w�GDI�H
�esv��_� �,d>��)(wyp��΁}MBF���>��C�m�0��Un��Zf}�X� LA�
 ؏%L�ǹ>�8z�.��"Od�7��S�c������1�C:�R'��@������X��4=�f�X���.T�1�N���݃'�����V�j�pueZ������ڜ����j�8�,{��/b7__�`��e+\���AElkA�~�6�1苐��#ڳ0�o�
�0HH���G���7�, ܻ�M��Q�!f��K?��
%	���k�M1�����$	���"m�%��!OWI�)����R
����|��V9ۮ�������B����1��[��{b�ƷY�-������+�rC��v��M�nD:��Y�C����-7ou�_]߃7��F��{���:/TW��g�"-��a��6_^��uذ��6H�!-��n�G�t�L�V��!@"�����܉ī��9��ܩ�S!C�
/t<�
"d�d���D���$�����h<N~3G;�?��O�x<����`8?��ځ�Ղ���
���c����x<����x�r
�x4���z�ǃ�x�D��u���%�p"x<�
|����D�x<�!0��x<�㡊-T��m�@1
G�/;�v��
�ÜyP�����ʣ�G���g����O�U�l�j$���{�=�
�����^W�{���ч��=�zٛ���.F>7�bv˲ZZn���D��fVi3U�g�g�:�aLJu�fI�U�ȼ[�xD��^5�Ά�+��{ewE�^�7�!q���/�{�':
�
H5F@��;Z:���;�^f�3s���D�O�c��C~=T���0))��l*ǐ�
C�(�im��]�`��.l�P��`ǂ���m��Z(7�|)*��I�����{�`�A�"[_�S Y�m����d�ÄyB�!��G(uA���\��־�������8�ٳ�=������%f�}�8^%ίOsܙ�"���̃aL�f����g�8N�2��	
�#Y>>B�F�y�IG�{1�ڹ1`��~�pQ/bδ�A�2��,�8's��{�${��qYIxc��]�C�_&4�%Z}9I�^�L�+HV�b��a�zΕ�!g�<����Ss	�#(�5��`gf�y��q��ǘ�0�]�npNk�9ש˾���uf
��ɴ:3�?�J�r�{�A�jB��;s"�T��Mj��0v]"��H��;�m�3�KH�fެF�3�~��Q��h���ʼn���u��C~��XAtg�4l�� �l��7|@fn�&��3�ݎf�د�sF��,\�߫"<6 ���IHϕ�n|	6�$�W73Y�������Z�MBZ��N�~��$�=_m�B��`W���.6<���ϕ�Y��і������2� �Z�]:)�
�s�˔��	�e�ل/H$E���t�}����@�{��/.OƷ�.@nY���o^�A#�-�\'�E����D��a�S�p8�('��8C�d�)k*V�.�FP��1�R�&��m	�7��n�et�a��l<���Qw�d6�H7�afD�$L꾦�#SF��"v͌4��@�C`yR	��:�uo��l��۾n�R�
7�2����2ʷ#������
��V1���\s@�׍ꗚ{�͖3LKʟ���L'��V��잚1�#��L>��zj��|��@Ip�јW�\e<a����
��	F����a}l�P�X��^�r[�u�Z�)��Z�R��m�P���A�����b4����F*Y�x�I��˂!�i�x�~O�SH�Ր�\�Z�Hcn��Ug���hǑk��<ӝϏn� ��^��U^j�	�&�7���ۅ7������\�{6�KAb��1���Vڦ�{�I ��S��1���7<J��� ͓S���տ	ͨ,�J��z71�Y�n�v�hbz��+I�Ұ���)OX��~�jþJ�a��R�8��9ۈ�=Yn�e�ab����Yf��q	�Nw���O?@�!<'�%7p�t��<)���7�1�NN�:W�$ߧ����6.)�w��P�Q4�-����mV�C�b7�a��D�z��
UA{�8|��Z�Ƭ;;�_��CT?��D�E��+�@,��3��l���NC9,Պ�zBfΪ��	��
?T�sV���qc��cq&�t,�(�Ya�nnVip�n͓�h���ޭ-�$b�sB1w3�C6g
+�l@?L1�G9�G\�Sd�8�b,y�,�~L��UӃ�~�5ݼ�?�*��вM%f��u��k����FN}ͱ��#�[㝛vs�}�Ȫw�R��`��Z�"�teY�� #o2�K��4�97A�zR��R��QM����.�1�>����s�,^"A%	��M�$q��N���%i�Y�[u�j��ER6e�7"H�����ܜ�&�X	"�����a�X�@䲹�u)۶r
��n�Yh���5"(s��cB�N���!yƶ���i<߽
��t� w��;;Ώ��P�N��c��
+�%�j\gU�z�W]�>XVA�����%eox�ͧӻx$��2ج�CpdV^ �2��
h��+��1��ޔH 9��Tgi�bo��ʍIn���:�0?W����6�Đp��x�d�����!H>�=���H�O�h�Qa��1R�O�;VU4>�*�5�����2#�#�Tc�G����ֽc_�5C- ��W9�~Rn4�WB x�X�nD�-��l%�a�j֟Z��h��q�ӂ�8�&�=�Y�r����8U|�#�w���PE��<�qS��f����UV�ˈ$g��,���o��XW ž�A��$��L���t�C��:���}c+ώ7���3ϙ��u��^ۺ���t��"���#�Tr�I�i�!k���1��Y�h�S�E����S�K@/�
#�@`S��Ҭ]'����v<74���d���G�AƠ̂:	V	�c<x��jg�gq��"���N��݁�]ޢ�|&��U|�M}�rQ鹭Ï����}����qKj�e�X���ˢ[QD��t���6�Aɇ�º�b���e0D�%*�Y�~�ff���8���2BH���;�!��(�q���Cu����?}So�|�|��C�[�țZ��O��P�'��	{Д�g$t��9����!��@�^=��׬���o�1�;ah���bE%䦓}h�͓YT�Hg�s��+����aes�d��~���϶���C��Cf;��tJ�'��#�q�V�mw{���[/�YŽ˿�%ގĈ�Jk��$���b������j/ѾuFEc��$"N��#m�ʛ���!'�>e��D�
�KM�����J��W��!�B3C�M��ea�s��>Z%
󥎑*+B,��Zy�d���,@�k`�/
�p-�J4�����u-��-+��A}.�jO�2k*a	�{<�Y��iA�Y��^��z+�r�@Y<� �
�Ґ�"��,{,�_��➧F����	�	A�\m�/4QXQjD���&Q��#%�MM�*�]�ޠ@�e홮[!�u5ݲ����7&m�2�&>�@Q��tH�\�hl1jv���<E�s��g�gJ�L�o	�
l+��ָ��wҕ<�m�e��k��P�멢(����%��k�f~*��qLl�5�i�,����5����X��������%TF[���+gX���R��n�]0��8��qR���g剝�BzQ._<9�%��l]�y�^=
6�����F8���N!��YLen;Y?�QZ����TR&�X�5+�¸�Ge+���9�k����
�5!��;?4�"S�`�aF#��w��(��f-,�ߍΖ����.9�>OB.A�"�Y\�|5�8�1���4�D�����+�fH���J�L�:>�,j���ϫ��5��3|��F��9rE�ۢ�mZH'zx�*�0Dn��_m=�@�1:��%ypN:	�~�0���qE�.��aY0�a�؇8N�Q��S3�B
٣<Y��Wl�Z!ɜ#�O-%X�m;�����>�+�<����ǁ��Ss��^z_��bSp����ܶ]���ͪ��x�K"���g��������7�5pB�9|(yª:�Y��֯ڭ��(�͠d@����E�|Ϛ�X����Yi�l譗$L>��K:=VOE"�W�a<۔�6oWHH�m,�p�b�I��z���6v>;z_���Td��#w���m̸78\��p �%������ ~�sa�2��h�ؿ��J�M�01c�6
�P͚��4o/���#�nM�O<L0ru������ ��}.��do���f��ky�G;^�z?3�@mg���7�:���̦
�Ɍ��"�/���U�y�<v`�no�A*�4o`)��	��|V�t�M�(P�!ha}�R�#�Pz�b��A\Dw]E�z�1�����B��u�ՁG+��)'"�1�ʤ�1�K��Lb��$��6�sb�(�����hRÝjO)Mi�?;_1��3�j�^��)2u��s+��"�����_�o��c��/m���g���cf���;9}x�>�Fs��g��Y�AwI�u!MCe���ģ�b�1#=]\L)h�g8�1��@h+/���uα�T��`�ϖ)n��Z���v�����Iq�4�[貘���Y%�b.cyl'q�⟧ЖC�'GU�L�	:`1�5�s˦GU�� ֱF0�d�>b���>H�ё.�x��g�!4�	b	��\9�%���xR$cG�nZӏ�rpF�@�X�4<����A�4�<"鳡*�S�ς��X��Rn�s��,�A-$H�����X�w9`KOz�t
?�<��ǘb#k��E
��&d�/�Y��),:}��%��xlB.$A��V$��BU�Xt|�����Y�V>Lh<5����E={v��NoAȻ�"��Zx��Ṱ��a��U���I��5)�-��d��n&c`5�@�rX���!�;�&���j����66��d&��I�%`��!$"z���CCE����!2aL���Y������5���(W�C�� N��)���8��J/I��|~� �!����4w��4�x��3���C2�<h������܊�xF��l[���K�w�hU� �+���hq�-�*�	d��nAs��wC&p�]���9��|nb'�E�d=Ϋ��_OO��ൻᥤbu��N�7��>�dշ:j�����}�[ԏه>���%�N���Å�x�7�m҆q�<���]����h>�{43z�@�B[��)`�%�!l�4���	}�"j��
����]�#M�����'t?uGzK�0�_�t���e+E�=��?ֈ�og�?(D�������a#�z�{�T�=�Q���F`2�:\8t��3��n<��?�ɝK�td�p����,�-Eo����h���+��tD��U����a	�Ý)�~��|?��/MJc.I�L�ϼ�f�<����4�a2�K�y?#|I�[�GWa�Q���9�Rƹ���03�6^O���b��{�մ�����Z�^=D�<�j��-l�)��|nO�qoH;�s	?B)�GG8&�+�x
9���hv������cm�oWMU�4���A����~T-��W�VY��a/�,�k����1p��5O8)+��Zdi�D��K�K���\�J��i*�9��*y��T�4�[6���Wg�!�B$�#��"�-l*�ڦ���:P!�߄�'��QSkZ⽭���
��(R�{�X7�k��o_Y}�+Sp��dN��1׾C:�-�Vo�
R��(����d�2c^&F�nX'e�s�^k�.!s�����F��qg�k����Iep2g��1��^���Ҡ5�m|�Q���k�a�5c^��N���j�O�"r3P�H��!��D�6�B��v��O��8�3�K�A6��@'i^�V�`���:uK$��iFH�Oh��3�k�x��x��5�їK�s0q�#�5�:�g�NY�:�F~	��o9{�X��v��j�2,]c��B7��8��n?6�H�60���_�����ł@�YOK�DE��o� �y����B��`��R�F �����Ϗ�")�A� � D�
�Q�	�YW[”sf��KE��9"��
k��)���#7��;��b���
�~I#�ZT�� �&d#�Z��
��>�"���i��[��?�K��q!䦟-��)�چeQ�v ��81��O7�%ׂ�p�4Y
W�Z�_yB��Z�p�P81�C&�y�t	De�ۦ�S8���ZӅ8oK�^�4��
�+����ko��q_jB�+�c�u��y`ݦ�˩��)�C)4�lȵ�F��)/��C>!��da��5�O�IK�Щ�C�9N�Qİ���ήR�Gk��N�sm�A�El0P����D6#�����,���r\������Pe�#�3�� *�8�l<Dfa€8H�H�Q
�b}��^�e Y�%an�/ptΚҠ�����5�h�z�[�>�h���h���v:M2���\r�.�R��Di��6�Ltg�@+uí���V���7�X�p��o%�d
�G�ba�랚't'1=,�)�}�r�ݿ-��)/C��HL��}m�x�˻�&8�dҺ���K9��z$0A����a�Gg��k��?� ʟ��7߫�V��m�Z|;V�f���u��5�]/��X��}���ڮ�|�H�:�HՊ�C��;ݞ��VPw��.���')I�H�{� fx�ڴ�t��+��]���x��%Ԙ�Y
�cG���w[^�c0�B�6�s��~��Ӷ��1�!Ĭ
�/z�s}Kݙ��1ac���lj��a�@�� ��k�~�/n	����0�v���@)���Z8{R:X��U>�B��/<>��I�F��ψ�2%WV?��ٱkNb��7m"�eLD�3L� �T�	)l���&X�1�]T��<�m�,���n�_���wDZ(8���僕�����_b���,�s"����^�5��ǫ�	�a�HD��C�m��hG y�c���b�Oǔ��j��ד�W�Z:yC���|����`��?�o)�l��v��ڂ������S!y{a�V?��W�(�� ��&=JV|��w�_��N��4֡��f��ǭ�K����CI���\1�۹��)61Rw6����s9æ�|��yN�]��G�� �x��4��+�A�0��h�"��5	Tg A��Bάc�.���I!e`X����������9�, �K�qnq˺����}7ܘ�e����7��[�Q[E������|�ZPǔ�ȴ�W�B��}�+[n@-�
��x�70�px$v$�M�8����`�,���f���{|�9,��Ə�ڤ	���4J�.�I�v]����njO�;|p�rHv!X�1�9}��⍰����wmL�E���&�Od�ڦ��ExP���3��o�n��z�8q5Eフ�q��\�?�_�4�U�����;Ek%���[V$ڻ�����װ�;�mz�DG��s�UD�Mrn�q��O���q�Ze	�;�X���h��n��K�3�ix=Ġ9w���f��P��(����϶G��m̻~�t	�G70�n-�mڌ�k.:�j�_�9O���%$�8~����j6˳j�7���ᦰ]	�c
�>���{�P7o&}�����`�tl��/x��7[n�r�0�l�+���MXh�'�s�.�����s��$^s-�vI�!��9��ٛ뺇����B@�������} �����@w<mL̞.fŗ��D��)N�"��po{u��p����]�7L5��n�����Ox�>I�����X|ެ ��j--���7`�=��q��˄[!��{�	]o_D�r`#����(�}�ol������ӭ�a�����k�-���UDj�h6���E)�c�r
��/tV��Y��^�G���Yĩp��+O��c���O�����M��OJm��X�j�KZ$�]�+�h��uEOM�bZ�pR�;_�a�]Q�Һ�/�,����>�a���L����_7Kfe��憧
vĽ�Z'h{-3�Tt��ո���]t5���0��Qp�~��n�����3z
١׋����Dǜ4ks.y@�ڪ��b�Š��,�3�k��R���O��1���6��|���0�>����E.���FJަ6��)
�nb���9<6^/��6�j+��%xŷ�iŕ]
���Y9Gג��SГD�׉(�ҧ.��0�?����N����~aȴk��iڔu��4��������.��x���|�kķ)ܗ�$�)NZ�ܫ� �e��7�3�$!{M�G����a�E��
�J B���jZ���gTB��@G��#�CMMP3���.�k�L�����e���R�����߻S�|�����hS�o%~skx��f��-�ܑ�T�雏`Fܡ��ة�' �"u*ܺF��3�I7wsڌ�$��G����zN����T�A�$Ԫ���F�|�����m�E��m�}����6��
����.#`v�!�"]�jF�V��:_
��U|�c�ڍ.Tn��~�����xZY���{,TZ�j\�W�������5!m���A֓��#a%q�z��s�&|�x2ჶ�M���lh� �E����[����{��r���8&VE~C���PM2>���*�K�,xe}����t�%�=k^-�����TX,�@b�6PP�vC�&�薷����q]�s�<k�”�^$?�B��;G_埭���A������X��[�J'6X2�b��I	��ÍQ���k��Ajn���c$��Ql����R ݒ�m�����!Mb��B9Y���Ic�;>�A�%�~�	��#G�����k]�D�AcB7kb���b��N�Қ�Q���]h�P�wHC���D6����O`�u�vD#��x$k#F)vS|ᜉ���l������{��p�6��#	�,W�\'|�ݳ��0��>����j�C�����*\e���[��!��	�
�˝w�?�����#yT_"0�T�<�K��n�Q�΍A*y��!E0�a$\��Y>�h)7gml~�qc��T�p�;w�P�6�6��)?�j��
}�Inc;���s��`g�v�e��^��C�X_�Զn���G"��Χ�/"&��=��.�X�����=�����'��Tq+��T�a���N�Z�O��0����h��]1,�>F�`���ɢ��g�{؊2�b�K���G�=8~$ő�Ds�n��,�^�ÍM�5�x���s�m��9��l�	a'v��PH�M$��h��Q^���G{D,��f�|˿����K^>�:	��jߙ�2術f��EG?Y8�Z���Y��ʬ�<�J�w��f@h�p�㸘�‘�1/ζx�ꐸ\<Sj��1�uKu�*S��#|@1�r		���a��ޡp�ȍB���A�s����X����g��H�ϒ拾�-��^�L6�.��:�׈E���L�T����#e�h���8��K	�7S�(�u�:�J��su��W* �d�N-�'A�w�V�%�CA���%���*Դ��&H�	�9Z>Y�T�i#	�q��n���x�ӖQң4{m��.6�"�3J�E	�!;�=�t:�P�k�ؒ�������$��Wb$��P6,!�U��F�4(K�ҍRd�ON���x���a��y#\�i_ݱ�����_���A�_�CE.���$첬�@��J�ܒs =�ۓ�;�M���j���P�0y�j��2��A��j�K����/;�N�Qw����Ψ�LX��|�����wa0x����^��D\)��yEI2��.EH�~��ϰ�B�RO0�bd�A���� �qNv�/ {W�[��`�3�T0��&��
E0�oF��a3*�qW���� h�v<M���[�^�<�Z`#'%�;`��{���=Π�!~v!?�NM��q��$�{~Χ��5���[�@,�08D��8/�\*n���O���m�	2g��O@�$�+���>2 &UHK����@�tx!9*npk� �]��,�6�dUK�N#��p�s���_;"���4�^��?nT��������Y3�h�u�@��/Ə�ޑh<�vI���gh�0b�
�Fړ�)s��#�ni���	��g��tG�`67���d��߈�N$=Ҋ~� ��ZFa�!��=�sU^�0k��̐��h�rw�L�C`���:�$s�	dZ@%�_�.�hL��U�a��ٹ�HA�,�f%�ٗ)�0;��s~z�=<����͞���(���a���,�@ �r�C}k���7�Ú��ЋS��+5���=P
��&������x�̪�f¯돏gm���뱆��H�UI?k_�m�q	+Y9nZV,qu�t`@�SPЦ����D�¢�e�ɇe�΍�q�.���4Z���*ᲄ�65�@
�D�GY-]k�]/�Q����(��R��)�g������څ��RC*ک9��
�oA���BT�*�B�ȅڋ�B����
����/n���#���p9�:Ҫ��޶�A
#�Q�,�U�V/.��]+:�1��#:/���>�f�*i4;�[Ps�S�L������
I�,�}�5`����(��خ��m-ƩG��)�M<��x�b�K�J�XG1���,@2�	�O���a]�8"!�ae���$��5���D�`���d{�-?��cs�\ Ţ�WJ$Nv�8d39!<�k8)�Zé�I*Y�b�gS�E�G���%��<��R�ؽ�<,��t�HV��G�/Rrɯ� �4�!���`W� ׼٨�4Xڶ�g��Dz\�?�InL<����k�Y�M�uV]��Q<i���z�ٗ�ү��y��F�Hg!�&7���U�����C�i4h�)�������;���~�ޠB����{A�̓ɍ[����c��_���ҧ[3�������Z$�pc��C{��~�Q�=�-"��HV�(���/a����M��5�qO��I����B)�������+ԗ"��P
�B�$��(�.�g>�'��0��'���"p*���a����Pt=����0�GSxR>�K/��T�����Y��D�ͷ_WQ1��j��4|_����7�v?N�7C�!K���9ےC	;`g�z	��E�3'a�R+�*'$��8)�^�|܉oF�3)�0X�6:]C�`#4U���
���@�P���n}S�@]rPz@�d;P8mF;�O$�aj��zgа<�77%�#�~�t4�]K$z�c!D���&Z�Z�Bc%
�*\�����fO��J��?��UB�D1���<�7[A�����D/neՀO���wRsƊ��1�:�}&Y٧F+����Y��[�Ǭ
A'|,�"jfc3zw��NJ�ս.}f�ה9�}P�fq����A[f�/���P
꼕|	H+��X{@>ܔt�h�7m ��ڣ^q64��ǒ���$]��Í����Դъ{7V��;)�	g��Ŭ]���o�&`��ES����Ҍ�A�ئ�A5U�)@�q-}#L��^G��ew4�{�Nk��oz�� (�1NB�H������r9�#�nI���9�T��^CQ-�lC�˒�Ok�V4�Ї�5���F?�ٓ��� %ν�}���b\�A�����[�Qq�/���w~�Î
�C�|&�k�9<�n�&�=4G��+u�C�ǽ�7�蘀H'���AR]�6tr��v�_������б3衏"9�)H�N����%�n��\�ꍖ���Z�S�[]�����ː̻�N?�s7�-K��CdvH�D �M2q�M��Z�EŊ98�o�j����¼g!u'<�.��O�y����pm�~	,�5)T�̥����V��%և�#!8{��ι��L(��w��QԷ�^�q���=�܎^���X\�SXL�;���v���TB�ur-�@�ApM9+_�+;�vѬP�$�&UG�;���o/�7�"�~�3��ژ�(+��>��(�f��`�����G�m$<�F�Yi�#c|��L�sN���ۛɢ'��C�Oe!:�=ԏ>���ߋ����% >����1�A/�K�������U.f�+�
�"6�)A��q�ZD\�@[���8Jg�h[�%?����+�����@��$:{�ŘW�F�?D�	S���K�W���T��rv�,י��3,����7z4��ߍ�()#�L�ު���V
&��5Lֆ%}DZ�|k��
�2�F��-9��S@}��Ĉ��	�8]�ȝ�Y�Œ.6y�)>�l^��{���}����9ˆ�N3P�(��'��Z�`��;NJ��
(�=N]B�f���zU�׍?0�%"�L��!G��U��z$\�ȱ�^�u$�0%�{v+.�
��]r"o����UDk�w��3�%���k���G!�*N��nI[� �Yh�8�>BS��O���:�+a��VaVN�p�jAA��xNk�[6�9�icWe��0�_t�KK�*��J���FM�%a"�'z��ś��Jz?����n��-��l��
Z�I�vA�n��1�2֥�5�#~���g�g�#8L�l�:�,��:���'xS������+�“���/ʀ�����XH3��Z�
�i'� �=b�@��$�#{�
Od��u
²�E_���ˆ�~�U�N
<Y2Z
�pbz2�����J�O ��Ai�n�P���C:�������B;`�6����@��pj`�ϋ0)�a���I\2�m�ו������4E�K��1�lpU�yϛ�R�i�z��P��=`��9<��yI�u���Y��q���~���g������j��"�T`�w�g&V�)0_���MEkۣJ�lT��<�+����\� f��FwA:�N�Ј���q���jԠ�^�o$!:"�ჹ8h1�F
�Q܂���lC��nk��=
�7:��s�p�=��]H?�W����J��Z&�"�|�߻�^|� =�5��`8�(�\��D٥�~��9})��M�s��g`��;-��0�V���g��US}����� ��V�S��9!�����sKT�a���B�T���=�v�CX;�y��\�.�78�6‰[�B��:�ʘa\;��*
6B$���9�s'�j
;j��=؉��ͭ�����e��bY�x{g]�ZjJ>KH��Z�YA��^��3�������?��W���r�Dk�ȯ%�R��%t̙O�:C:��6'k\/ ������\�
��s
�R�P�ǒ,n7�Hq"�L _��X�.~@���,�p�O�T�;����`0�K��+�m�l�otsS0�58����o�S�t���JJHr| �ͤ3�6���{C}�4>��$K� 0���_;��^t4r苣��k��ugy������P'\5�.=F�K���>�ۙA{x��e�Dv���)H�&3�XZ�y\��|����%�(����1�ճ��a�@|�y�L�08�9psʧ��<��GM����B
U�1W�1.
��t�v��2�^4/$C�����t��9l�v1O��3-�ř�z�U������0�T
VmпFCZ1d�es*�ЁR�ؕ������v���&�	$x�
�	,���{Ï��oxі�h����~��Lԙ�z1R�$^v�q��:h��m=�����ik�Ԉ�ٌ�\E�E���Ȅ0�-�/�@tFe����2��sZ�p�f�kXYD�,��B`�ՓЎ<�t���đ�a��ᘙ5'�f�X
��R�_�f�(g#:��
tϯ���Z{��J0ء�[ēZwX^����q��7�J���t�	��2�A��K��=]�6�KP'W�����W�aak	#\�&�z�@��nd��i)ic[�I
;2�9HB6Oh�=�B�{7��󅁻4ُ�b�#��"%!b��/��Ҩ�
��ԱF]<�
�ө�g�/�F���	u%HV����Vi��ھ#M�-}؀�d�uo)wO�3��:f�K���@d~8W� �O��i$|E����6�.������D	�
Ý��8��*K�ܙn��m?
_8y����X\D�-�u.
y�cԐ�v��<,R,&��As5�0�w�}�
g_�!��	o|�5)JK)�sn���<k���j�I���e��N�Y:>�����Bh��s��I1��w[~7�����l%Zp���}i=����=D׊F�f��?����`����Z�w��E���P���:xQ�Jl����jx�~��˲��9r�IH��8T�����[���7)\_>���)���	5�Z�|w?O:1Jy�m�q����{{��g��nO�4��,k�=��ob	z�hW�х2�)�0�~�	
*�0����Q%�m�3Ym��Qm.6���/�|Sw4
9Q)#��Kb\j �TKrHzI��#1�u�x�4�tH�⑦t�>{��
u���M����	��Ɇ6�A��g�\����;�#k*7���Jo�ʜ���S-����fy�l�.��)q�H1�T�o��*�N�R�B$O���'��}皿��#
I�k�Tn�L||���}�~�햃���Ǘv���1����O`���P�i�����h"4W9,pXV�=�Z�d�L�+s��c$�y|$4�tf�l�\sϳ$d���Y<uI����8�h�����X_�s���J�}q��cAֱ�c{�b������u�B�Qm��T�
Xc}z��f�ǻ�Aw���O���X����X~2x��$����b�\�D"�<�B����b�X9�;�+��J擅S���c�����؄�,�X���vH0�XJ,�$�)��RFl�
(_���>l�G>
�P�a����b
[�	�|a9��WX�),��b	�F�(��h2�V��9�If�/X�l!'ؓ�_,$X,�!}@p`�b`0�X
,��/��p�p�@,���,`)�\���+\)X&4��J���聻��[������c��W,.��dM��0���_�����>/|\����
V��{�	[�Q��o�������6�ou���Э�<�;L�/��>�1��4��i-��[f�4���@�3��׍U�����^���i��:�ݕ%A<����m�Ӵ
Ŷg�2�W!�Կ��.�vdUt���8 ��7���:���Z���V�{�'�{ڄ��H ���޾���{�{�+b��2Mso!��&|��|���kr��Kƾ3�e��&.��c0X�>v�m�f��1/_��1��M��'p#����W�k@��4]8D�%흎�K_�l���6[����i�M���ID���SG����\ϕ�s �x��`����[��Y܋gAI�א�\�!�Y�O�� �f�α�R�{'�`~�u!(����C�uG>��1:wJ���CTMA�(@�a�b��e
�r0������)C����a�--�"��0�{�t5�d(t�������/N�ϵn�zhi�m^�U��N4�=�	ϣ?�=�6Ԭ�S��Z�Bpz�sJie�s��%����e��X��KN{��tG����r�}���u�Cz{�\�`x��c�ȋ(H�1k�����%����0Ԡ
�QY�8��)z�Syz�b=�){��	b2u���h2�}�(��Y�W�B����k�}�)�ʱ�r�#��� �S��F8��Pl��
�z�dq�*������Z�֭f�~���wo�H;$�P������e)�����Z ��z�v�K����T���st��쇈�K����6j��7��t|��`y��Va���o���̠d���F����r��-��?�WX�ȃ�u4|z˞_1�����j1H�+��j���t�3Y��ʃ����)3x���u?>��:��{�%m��"�OI�>�������y�ȧ*z?�
5)������(d�Dy>*�ߪVl=mm=s7�O�e������.出R[Aj�������r�q�����_�m�]�2�	�m�B�J�
6!Gi�I��:�e�4��é�9���T�B×S��(�y���IE��:*
�eM�O{v4 I�?b�g�a��7l���x]Ӝ�y�i��
6�P!<']�:6��ԡJg339]:��2�pS�B���`
��$Z�֋�_GB>Z�KF��<;R$7��z��k��S�^�𦊅�����ª�?����To��5܎S�dL67d��-WwT�0B�ڍ�ڧɎ3t���Կ�y���
G|�]�7�Q�s�
w����.�O���\������""5&��:�6\kr�ˆ����,9��	5ΎZ`2�d.��I�̤�5&-u���B�Bq=0="s�u�is�'j�H��Y{p6�}u��A����U����:3Y!	�c�N'q����dN�o���Β����3"60�a�6����t�FY��i2�7�<�~>D�KJ��.�/�����I����&�������y��˿?f��U~�(��Պ����~�*��|���˻��_�T�H�e,�&Un�ˋ�	�҇|y�c�����+/��h&g�7�>V��)���W�i�阣!� ��U��J�h]V���J�}8���U��3W�]�\�#��((��}�Ǵ��`O�I��Hh���l��@���*Y�&淨�V�d�j�dY��yI�u�*�.|�V`�����Ǖ�
؊Pu�ْ]��o���B��OM*X&�k�g&]�i�z2;��1�g8q�^d\���ѡ�e^'�(ݑ��kf�!�r����I{Q va����ܷד�u*6U�d4n��ĵ��,J������`]~�{��[��yNNLu�sZ_䧣@!#�����!%[�$�ԥ�ez^�J`�!�8.O��?���w��ߋ`��@�2o�/—�iG�e�
lT�zG&�?���{^���zU�����$�;P'�2Di$2� �Zr���g�� <���	ȶs���W��)��Hۇ�2Tա�|�������z/&'s�py5p����e��6>ﱑX3�6<k��岍��YHcS��IAd��V����mUC�����F��{�?/=v���}B�ʿ�^*-���=���K�Xũ�R�7g�6��Ku
�/�6�B�.���RVwk6� Vw!Xv��B@�\
��%H���K��@��A�\P{}�ߪ{�Z/��u솩�m����o�B;X(@b&�qQt���~�������j�4��뤖�ū�!{ᖎ�mʀ:a9�
	d�ncS�����PMf�&�����^d���,=R
sٓ1]��jW���`7y��,Xd�U$˔�SN�_4���:� N9����1_�Ϩ�"�'�Β�Qr�����o���V�}��|4���m=X7��o�
���2�]��'�ֶ�ע����0Ǭ��؀΃0i��;`��	�2EL�I?z�opl�4���hu�s��K_�'��eq�_�#�`⛱���y8#�zMZ�m�g��|mzh���+ҹ�a91�U������e(u
������vq�R�z�i��+�H�hQ���u�i�Wi��漊����pV��J.��C�d��b%���� T�����}\����o�\X��P>[K�:�+tf�y���0�����c^�5����)�2�—S��HR�.��KkiiNn�D+���b�?b٘�n�Pe�ӗ[�W2Q�3B!�
�M#
���%9m��{�{����qd��s�y�I�������P��WR,��]%d6S��U�Rݮ2�n�?4�:�f9ðKl����';P���t�7����(��k�`��
�+
�R|�	����-}x�s2�k���_���/������-����t�S�� ����#c1���Uc첼�D'��g���U}"�6��o#���wh�O��}[�Z�/>�~�����Ȫ����+��pe�����b��6�'f�nߛ�_������q5}]�o��r�b���%�5P|�u!e����C���R�7ŪG	]�G<Hi�}�j�S��b�"��������j*n8��,�i��%��jpv���v�z���9�����]���+ZkS��r��g�2�R.|��6����C2o��3���Ӗ�=�πR˓�	�2]���v^�����
M0F���h@���I��5�gYH����E�3 �Z�H'˱�r4��n�;/J�Z��׷ey�?{�cug'=�D��w35����Uo���ʬ���r���
o>����ɪ�*���B��*��UE��
�l]��82�K����kvWL�=���V؎ "�Y=�ʫm������е�[曅*�N0UE
 �1Z  s9R���6����􏷇Y/.�!�fCM�V=��ZZ�8���}���,���/�g/A��Hz�v�!'���a���%����_S�>��RG/�ÔI�n�^:���͢J֖��KW�f�%�j���12E��Ә��N!�j�B/4;4���@A1�ߩ
P����Ϲ����i|9����?�:lT娎q<F߮�g#"Uy��E����YʻV.'^S��aT�$��{|U[pesJ:��Zkmt����%�2�+�Kǃr�܂gk�8J��܎"yg:R��
�f+�r��b�Y��Zx��sk������I�<_�d̓�[���Y	'���L�2|N�B��
�E�QP�F[�R&pÛFVC��HG�#�"�[S��"�B4�~�\��飼`�7:5B8�[����v#J�O��qPCM8c��d�[��h���l �Sf�Yk�X�^���3��b���X_"���
�o�3<��>�ճ���u�dj��,�Ʌ��'�5�?W1̲��>����F�����kK�}�zc57����e�,�c%YE�G�f��`
8l4��NG�Ey�gރ�8�rA�-�4����C�:E�Y5�L�!μX�Yh�$��Pb�c��z'���_�=�9�J_{�G^n��i~���+ҋ�\���`!�ָ0�c;�Y�{]��j����mw�\�d�b_�P��$�61���*u�G���x����bҨ�j�E�T��#/7�ơ�r�nI�j�>@�_IX��|�ψon�a��s
~�P�=����	NR�������҂�C�姜�3ʋ[�O]��)� ���z==�M������2�����Q�rl<���$��p��nߵ(�����a��˒��?C��W��q�?�b~%�a��A薿��t�}o��|�V+���*U�B�aǎ�z�
8��>�Y��}�X����i��
S�r4���ߘ���%�۷:I�'\±
��.H�H+�PJk	�׻���$����6^��PC�����|s�zш>>O|>x�T	C�ܾ
�`�㑝 �[H�6��]��v���b��U�'f�8�2wx���Y�f�m�����<5w7�5���K��6�DH
��g�Q�U�`���I��$i�?Ɔ���p���Ղ���r���悍�⹞�u��y�!l`�w�͗D�}TU8O��lܺ��N����������U�0~���s|A�Ҁg<�O��/�g�
!�$��;�X{��mu��^[�."���0�u��Bd�W�r0,e�OW�aϰp�k9H��OC[!}�}`8o�|v6���	i�;/$��Q��1B<��6���j�-�Y�TDH��z����T:H�<�
�˙�f�ׂ��A�t���%S罠�A�Y)�2�`��P� Q��F���� �o���.*j��)�]����� $���\��VcH�E"�=��`�qy����mGl˭�YH2�0����v�8'H^���F�y�;$��z��8S�-�!��)��S�>��e�&#�Dw�e#�:X���!G�H<�k�ʷ��R�U�������#8QP�	����b�3�q}��I��C咑xM��]��T�W۶�`
#w3P�+��Z�GQHJW�%���@�9x��M���=��v̡Y�R�*�D�K8[ ������ˣe"1�"��Gd��q���7��Im�rp\ey���G�I
�K�(;�]��j���J�������UU��������O�{%P���;�S���*���4�$��ɣ*���T~Á�P�7�N����B!��z�	P�5\l@

��ɕSU��ڰFI@G?�l��F�������J�=H��U���~��Ĝ�vuT�i���9"��|�hܫ�����!:�q״,�Bl�rCb"�����8�
�A!dyP9
��HA�����ji`���?�Os�J���H��r���	�j���_����
q�r
阱��S�2�D���P������HI �l�1o.�EKb�n�
���Ǜ�C|��6����9�}��&,�?v܆!k���ܔNY�-؍6�4$��I�L�ʹ�ŧ�}^�l�u�
����:���=ZM�m�n��l��՛
֚�0�Vر��G�٘0��~�d�*�� � ��bZȫ�k����;aJ���$���7�4��[%״�b>v�z$>H8"��8�"��wC��Ѓy�0AC���Ԟ	��1� ��㣰�.�2��xfy�1�x�`���N������hNQ��Y��<ow�HZ����A���$tH���I�si�YU8�"�{	��]��_�_Z�ء�����U����]���o�z����J���o�f }�Em�x��ZES�D��ʪh�"�L-�U:��Nxg�̢(�h۲@�iq2Q�R��t�T-;�5[�+�<{����V���	��{	B�⢜�D��(t'3��7#~��!jv'�&���ѥ�t��Y ���"9]�_�S��EiaB�{=f1K)�ssU�$ĬIa�*�!Цt�p
�0t����H�;��t�*~T��~Z$�	@	;U�h��6�(�ό���"�@�)=r�Js�C��.KZ
�B�}s��*+"A��'�E�'��Ĝ��H~�߃�f��?Cz���CA2�s�z�0e���ԑJs���/�aEA�r|�f/9�����9��e�c�"vu��^6���3�Q�B�s��el�Bi8���g
/1r,/�@��^���K�'�w���R:�?�':̷l1�<բ�b��W�N���	u��t�����+��nU�Cԭ�x�d�=��{�FL� ���d`�\� ��Q
U`�(\����Ic���*�{0���.��S��	��:`'��s�`CIr�"��)&�?�X\�J"�_�*��B/c��,��1��/RB����(�3�����1�Da�� &����!�gbi��2�H,R�L��Y~;�G�(�����_h�����z������P��ޛʧ��t�":	��/m�0���RE���I�ޝSCބϜ�E�#%u�\��@&�ߪ6gI����
�������x���� �(�P�/�뽧K?I@T�~�/��o:��F��;�o���~ӳ�B�+sN���X.��5%���
倎@J����r����g�;dcm�7�D]|�{	��]�o�L߫gH�iN��=���Cv��^t��<cX9��R�ca�!۩r� W�\6�DT�s;5{�A��h�чZ�mw�W����`ǜ�iT��ĥ�����J3�Z�C>OA��4��A�A�]�CI2M�����?�y���!^8Slq��%�S�U.Y6�h��S�5���L��Dbm ��Bwh������#nb�e����e)�8/����R=b�C�!����.>���S蠻�M�lد)l��N�f��Ǝ�pr��N/@Z� [d9�8J�J�
7�([n�^�_�W�<an��=mB"���0t��o�����Xi���bv���[gWSK����nY���qзcQ��������@�G[���P:�W;W�1͝YQ��[�Mym~B0��Q�8������w��B:���U7So{���N�*�"GF�UZ���!y3��:`�Rpb{؝5v�V����Gm΅��jhGk�q|d��>���Txj�.�u1��4qcG���أpڧ��N�,��q��ڇ�T1Z�F�~��c��9q����h2�0��S,�n�����
��ԋ��L.yf�t�T|D�B��/�@�p"���v�_�7H��`��rF�PV�V�L1Q�S�$�	)�Et�
w0N�T2��o�?>�>ڢ�����m:p0�gn6���5ϳ�Ȼet���R��8χBF�Cs���m&j���*����Z��&�d�f�Y�ƍ�:������L��� C��,��>�1��F�Cp��^+t�:����B��B3�ɑ���i�Dk{�R_���Z�5��Ò�uŇ�P�.���"N����ӛ #�j�S������C����c�O|Gm�c�o���jk��~㢐�P��\�d�rマ��B*421h�SLMW��T�Y�L4�0CV����l��,F6�c���L���"E���c��Q�k_����+v!(E0�7 �XU��J���A�P%B[���S���,h��i�;�K��ﲻ�|��g�~��8J͈��Tz��Q�e�mZ�4��"�Hz=m\���V-�pl��D6o��F{z
�K���'��X�X��a�V�A�l=�d�̓��ױ�/u��Tq��D�7�G]x�M<����X�Q�)d[�ִSc䃓�:�(�8��vPBI90!oZ��;�L-R^�e��oO���y �|@tOϕ�٘�G�ݓ��sދ��#�V�&J���,�Fe�<0�H�,+��������8zH߰�Ă�5���Z�Ad8�ӱ_�-��. 
U�7�E��K��e���H�.5�i���3`��BI@i��$+�����pi�YNj�<`EV����Na���
(��Vp� ��7J���ley__��CEP���,���IҠ�.�$��q��?Y{��e��w]���J"lj�ѯ[�=�1w0�֦.����)W��1Vyھ�����2���$���y�.�]�.f}���($yJ:���J�V�Y�E�-&���8x�J8�|��l<��4h%KHRE��I@���ũ��E�qNwm���Mg�ˋ��H1+�=f������8."�B6��̲6D=E�Uv]qM��S�[$?��rED6u*�q�=��*��.g|��u���q':�{���YE2�^�mZH;�c&�?�'�V'F����{�],�=�z?���Ϣ�;���/��X���Q���*a��ۇ�Ҙ�Ѷv���D�ǂʱ���{o������b�lԞX̊R~�J�C����zގ8�C�BXP�R?K�{�[W���ڶ6��2�8/��F(��-w�f7���oB�Xn5�_!}Z����<o���X�6��ޕ2+X����B6B�Yc�l�ˆva �u�1}F��*iV�%�-y�b^|�7wa#𑵧���vIl1����$�G�4U�܀����#F9�r�[k&�ۿ�Z�$�3��8�אZ0d�o���v	v�+MI��q
����,��+ҌLE�	�y����P�{Vy�����=��_�%#*An�aَ( ����EƇP��J#n���ct�y��VU)qK��21z�-�[�g�R���?�����V�sC�j�%�)"P$J1�ve�����+��51γ5E��Or�9Ne�	��ݏ:��ӹ�����N���LJEd��/D\�ʐ�'���+�$t�����;�c���8&܁���O��_�7e��Y����HVl#�����"h'�D�/Z���qG��?$�0wM	D~z&:$/h���h;t>獷Ur5������{�T��w�c"-�����aP�̬�c������n�ޞcE��O���l�"K\�	Z�*�����^�#yg#��݋�s�g��(�彪V����e��l�'gX�{3����T�<4ʣW���3��nuh�)M�Ӳ��p�w>5K��|Sd�����+	
(q�D�l<���>�Q?�2w0��۳�U)����Yk����f���FeS��elPN�S3y �3V�BrG�
q�'��a��v^���VSh㋌�l��q��6�r��ě�f'�,y�;�SL[�C�\�?��m2dIm�k^����}hD�1K%�˔��Ö��M>����?X�i$I���J3v��-W��uG����L�պg�wV�,���N3�
P���#G����<��e7�Q��T�͑T�A�[f0��!��#��(i�?DE�苳�������<
����P�Y|�K7p���	/!�tC�vx���n�x`V�0�$�tJ�T�~#/�DiC�Pp,ziG�v��"b�T���)�Q7kh�j���q�0���hA���fo�͒�!/e�"� O4��F�����2V�zt���͗�<��u�q�!UAX�O}��@�{�����
�d�w��+ޑ��S��Bay�����S�R_�N�2�$?@Q�Ld1q�B��
�D�ɔ(�]�h��C�h�x�k�(9�.��p8�&J��/�o00[���1I��Q��W6�ؚ@��*�qY�A��mn&?�^���
�:F퐊Ce����d�gM�8�u7n9�R�f�w!^�M��V1�e*���#�L�f�)�4T@� U��y�B~ȏx��~wv�v��:S/K�o��&wJ:W��#Fm��@����yX�Ap�-r��1�22�I�!���A�
���ώ�\�p���H������y�x���!;���õ��wov)B����!�����g(zV�23�
���W��\����bw���v�1�"���n���
و]pW��o�[��XG����o:I!0�'Q�xd��K}AE��#��O�������lqTk~@��KwފKOQe���v��Nb|��\(��6��'��+�ۢ�2�!�:�7U�s�ەك��e|l�!;��5��JQ/y��C��٘�
gzyD��82[��V��{�Ƀ�J��'�Ext*sŠ8=I��O��G�횑=1ylԾY-6�,?N���j�)S>JW�cH���&
S�z�~y˜]�S������\������p|~4xA§�����t�'�=E�ی{�wF���p�� s5���Xz�
��y(�}�R^��ܜR�j��$"p�zK�6J�ˬ��ԩ�l�&8��T��7�I���h;uSR�:H�o���З9�-�J�����D\	�v�����`�P�N�dֲw��9���zo��	_z�Y%�5�B[$5�?���/�ھKE�>'�*EiC$$�QT�F>��!�凊{ETR$�ۺ�)bG�b�Q:Al�5�Δ�GWU麯](�&���	s���T�ZS�tq6X[�)��Zp	Y��ZZi�Z�9�ל&p��t��_I<eYb�N��A��JR�+�Aiʎ^�4+%�Q@��a^)Xʞm:��J�uf�l�m���=e-`�i�E�Щ�*�iA�
Q%�$���R�#qU��F�@��Պ���oxzLjŐ4�=YaY��IC�O
���"�*�{�=f(��5x	D���E�t�H�R�c�Ņx��V���Bz�
��Q�\�Uז�L��5Zgr��8k��A|ߢ��l_A��`�`
�IA)�2%�'��y���	�p��;�xS���{$�*mI�j��B��Çq΂�F�B�d���3/���bmc���H�a��WZ��҄S�+nG�>��t��	��������=�(�X̤
d�*-��ei���B�T����%�1ٽ�?����(��G�y��um9�Caؒ��ՠ�b)X:ԮdoӳxH=��MA'A;*dڝy�^aŴm(Vv.�F���Mp/iQ���Q�e��;�D���l�.򦷇��gy7�4�Κ�ZE��I�sF/��D=X�B�ek���tp�Na��X6��ě���:t�a��a3I�; $7�Bڝ\^���G��i��>۷���L�`Jq&¬=�2vn]W4��
w��g)O�ۭŗ~�Xj��GЁ뾧ʁJ�C|�O����c��Y�8v�LC+�~�	�R����?K�t=��'��Fڭ;�NI~�o��fO16]�Ӿ��>#�ma*6�p�8��:_h�o4c�x��D	��uR�����u]Yh4q�o+�M�P�^��V��=$m$���v���G@�W�t��6�S���|�E�7�VD1 Rz_�{:r
���H��<%���7��'v�{�6]>U���5m$�a���7��2����`;��$�;f}���*'��n�����`0ٻ�˩�Ȳ���8F�ZPho�G=e�=��θ~
�D�{4���1�.�<X	<��謁����#m$�	i0��O|��M{�i���3m$�g�ƭ�\嵐1���J���-�JI~~�����
u��Ҹ���Y�>F�.�ˁ���U�|��}T@j�q��*su�e D�ن`��J�]
�QJ�=�n��x��Ȃ�|"�_�7�k�"���,�;w�T��^��w�v�3����6:�ֈ�J�շ�?�?-�Kg�G�e7$�x'��O�� s��k�R�#*�9K�E��[{̎n��=+��,���`�0T��R����[;����v*A�Q�~�����8;�Ї!Q�WRe�C��3|�N ��\@����"	�i�.�')�(%�#�w��d��L"�"Sh��G�s�:����
�tx$N���
��1H�
e��.|�ę�#wx��i*~}{͉��|a�r�ɕ��^�4�ي��/�#��8H$f�P���Sg;p��2��,�u|i�����A�l�\+P��%�i3�@ct��B���1��>؉�x�汢��Sd�޵6�C�X��^1��>���_GC�W`~�����2�nX��1|�k=��	�_��[�:�m~v��z>"y�77��O3�m�MrF����%l��8�QIs���\���a�zy��'e��/�S�mC�I�K?�bB@�S����M�w�Dy�r��Vkz%��dY�*UyP��.T6i��Zs,/K���j���{��> �Bv+�M^ɕ|���:Q���k��X�q�����+�M�����h_���S:�#�_�O�-�ݳUL��Za�'�7�e5�ky�$ݼ���/�J���ф���;qU����PEU���"�}lȞ�U�5Hb�H������$���@���0�fu�G�*����i��%�H(�^I`X
���ճ��V%�NV�_>�<%=>T��f� ������\��?�
�V�6�eH�A��)��_\�7s:]y4�b�6�������G�����%
����N���4J"^!k.\��&V�E����������o�*6�a�� �Ӝ?�f�VO����˒�Ù����#k��0�˞���y�a2
��by���hV�K)$ڋ�R���R��>�Z�T�.[��{+I"oN�`�$E����ޏ�0�&ڶ��)l�‘�ޑ)Jn��
׎x$�`��&>ev�4���PԻ�Ta��&}�ʙ�e%:?ۙ��{����Dc��F��k��aԣ��&C���`e�	�n��c�$�V��<��f�"*B�/��66�Şoܯ�@u�̭a��hk�vrG��>(��h�sÀ��5d7n|`E�#3��5� �
�hlOX��!1�Un�j��*
7�P3�b�N�
�U4����[�7-
����0�#Q��Hj��0>>��6�k�/���6��aNG��M(D�Mm�����X�A��f̉~Y	�K�"��څ-��;7~���U]���L��H�墸l�]�/� 7�d�1J�.z���Q�j;���HC�I��(�6M=*���n#g|F%=�J����*6�FK�7&h%巳��e!�h��,�*
�
�WG+ȋ�?�{��t�g��m�HY��X���m�"1<tO���t����ҺM^`�ۍm�L� ��^j�
�O[��e��W�|=���$��y�V�$f�U�x������k���6�R|qY�C�UoţK{�6�v�AO~����lR	��v9���+���Umۭm�~�^����O�vwDkš'��XåкB�1z[�/��`ަ�:Uh���85n����_�Z�a����˧���"���#�� %�4�-T��!�/��y���ݜTb��6�q��|*$��gV�F�rk#/šY�$����63u��-�\��i��_�l�K_�!hoj�N^"�B��d2���FQ�ZV��5��m�g���)O���P{{O�I'j�kaՄn_�D[�*�n�}c[>�~[�Q��A�:F����3�B?��_�}P:���a�u)�̄7��XН���e^)��0'���^n:U����^�x��./j�����ԍw{�9铤f�-��fE����4�?��4�T�j����w�������M?��"�A��6<G^��ں��Ơa�I��]���i7��3��UG"rT�C�"W>�6���J�v+��^jQn�7M��7X!<<q=�||��Iȣ��T"!�h߅�����&gZ�	��ԇ��u�H����q~a炻R���bۙF��������$�/j=�_���(>�f�����H�W�qW�2���5m-��RZ�x���c���rg��ejf�M�S��IB?��N�A?��p�P��l�#�#q��v�B��;�i52t??�~��<��n�[�n��0�3]5tܶ���&aA�>"�
p��D=$E��~����r5�'��'>#��M�'�X����V;��RP�slv:Zh�r�=K�7���=j8j���"bz/�¨ֽ!�׏>5���)}\�M4�.�%b�eS�O�:�F1�@�*-��/<�/=;߽�����4�D��)�AK5W��UQ��LU��y�^���TY�~y�W��%)�^l�yR<�^K�����V���{J�b�$�w�v�z�[·*�`�+�����MU�����t2���!��v��j3p������/�n�/�v�����>Le�j�?�/��F�m(2v�a��p�}5��b·W��|-�2�azp����!��ļ�|�oA�U� �Ӷ�^/T�/��)����l}�'R~fK5�o]:���bW֘�T,x��>�l�cR4?�].V���|�V�J��|^���G���i'���n�D�j��Z�)�ƭ�}Q٢�mC�z���)��
�&M���`��s�n�,d�O��,��-���H]룲����E���i��|�(U�j�'������;ʅ�0KB ��NA�S��OpB�j޲�p�ՠ��M3�Y����N������.*.�\c�N�.�7�!�l�0[C	���b��y�(T[��E}������	:�֑����զwi�����L�b��ab�Mi�!�J_�jRbDq�v�_nM�k&�£&ޒKÛ�5�� ��{��юR
]zk<ވ*����L��BbzF�1"@;��y�����i-���x��s�2�e)x[nt�c��ܜ�]/�S�C�mq�۽4�R�nT�&#�������J�$W���|���vܙg�l5���.O�j��-����2=0bϲ(�P�&%>3��S��Jz{q��|�R^�z�����s�mU�L�H�$��A����ձ.J� �m�NLq�m8�Pt��)��i5A����۾�	T���
�[�p�E"��\O��½![�&���~��������-%m��R�N�s"��O��A>ww��G�.��k<���������
������5�����	���_������Ipo;�:I^��.<�Xw�&�-��}�T�&x]�I�ٸ,��uDkw0f\�
|��α��Cn��}�(m������[НwAvs� �s����_�Ψ�$*R���݃f*��#o���ҽ��d�\���� B�ƶo��/��p$�����gU��wWչi��5;)�b�X�c�+��P���z<�L�Ʊ�x��
�t:5�y�7�і+�_�x��2&�v�I,���̿R�T�'P-E�' �fZ����f�Q�bs���w����������d{N����Q#�����j�͡�a��f�����݄�)�M=�������\ŷ�Óh�8J��9؊�ZM�����8����wg����醼�b�l�s���s����X��Bk۹p���R�v��ݎ;���Q��4�b�t_� �<llo�<��m/Ae�`��:����ƒ��v�j�<d���[��V�=$v�Eo�a�z�<v
�y�B���>Hi>�<�"�<���������ͣ�6�&���yCi8g�d�y�~yh��!�����U�'x����7��jAW�'�<�,y4�n�$yq�!��B�?<=�:�x��x��x�1C���M< ���9u?�W͊��(�x8�A�������Q5G�G��f�	{�7D��m�
���j��{g��'�����y
<$�����C��Z���;x�;`�;Ja�`M��c-y�,�Y�~w�twH����!`u��
Bwh��A����Ak��L��c�%\V��*X�d
L���M�ª�v��8�;VB��X��c�s���;��Nr�Z�5�X�?��q7�c�o�*��v`�vx�!Am���C�c	jk�2�Վ%�v�,�'n׎U�|�k){Z˫�;�(�����U����ᝪ��k??�呔z�<
cc�B�&9P�hm���y�B����Q��)���yxE�ꦰ�F���&|���+�gV|�Wy�u=�T�ruI�r�+i%�My+��V�%M>{����Î]V���Z$�Sb���*c�^ɏ|��n����8A?Ғ��#��IR�e
ɽ��d�%h�,b���t�DV@0t2�2&�S�ػe�0DA�P�?4��V��V��?D���co���G���G�����
D�?�Y���J�?
0��6�?�	����-�>W8߽�_��Z�0�?�����C��x�O$K��_���)�g?���S~�����+��3gkz���k�v���6����:���V��c�k�v�4!��pR���.���U�h|z����5�
��u��F�k��n��ִ�|��*{[�}�~_X��.s��勋n���˜�`��~X5�?�<vK\������Y������<����L����|�=�ɬ#h��_��H�� ��x7�����~�_��0L2<v�n��pw":aQ�R>U}�1�|�:I?1knQ�Cآ�D$̦;��BW?��gF^�|��RxK�{0��+z�W�BD�3�;2�LѴ���O����&{��Ls?X��Lׁ�p�D�h7>-wh���A`ZF
c��VXI��Q�	��Wxu!)̄��1�~cSAE(����Va{���t'������G��D�K>^�y�{6;܅�2��)KmM�\�sr���\
�˼�I6 ���l�]����`��^��2O�!�	v��<O���=S�!�Wi�L�e�d\�t��[��s˜=�1�e�yv��k��,[�Ľ���^�*�s���sɱ^�;v��.:���.�&�ܙ}��w}ǔ̡������;h�ݧm�X��p�"Ƕ�i�u���w 8g�I�
)�1m���L0l6�����i��HK��ANE�rV�l����7����^NڌӸya���y�|�D
�!9v�H�e����2Sl������%p�T���5�N�j݇.۩���'a33މ�p}+��	iA4�Ci��*K�+H��:����|�s�i�0��W�-F�`���1x��2k�U~D�3�*�w�{��yU�j�M�u+�B��&�s�Ҥ9j��?��%EΠ��H�W���2^ҀE���|��ҁA��"�PڂCm��w:��o0�����(9d���P���ꪟ[K��S�9*�>���'�y�1��Y��ߥgx��%X,��k�Շ{�o:PtvTqo��V�RM�Dڑ5�N�-��<���]q�~���NG$=&_F��'h�M(>�H��_��,W5�9wU~���;�t�\� \2p��_o9��(v�ʗ+p:�J'yj
�ўᗀ>���>��I���6�!;�4h��Qor(Ft���;vp�E3s�z�J~@�Ɣ-븾��eO&�P_���V[�U�a;�6[X%�;��/6V3�8ε�8f�O�Is�ƴ|;���2����O���[�Ƌ�>���+b�<��`��$�W{p1X�
��1�gW.�X�'�����BQ5�<�#�2�Ok�i�*q�mdb�,/��C�o�&���k���e������3��#��Øt�F���a� +�R�]g^v�,�v�v�Խ܃�-��3��Pc8��*���B�@u�D���L1��x��l�7쥕��]68
�g8�P+�7��r��*��dm	ؼ��@�Yؽ�vr�h݅CɗT%O�#�^�U��i
,�_fs�YV�bF$
(�E8�J!�U�KB�e�4z\�n��U-F JXM6���D��2�m�10�)�C��D7��� F�*� �{`�SAç�W��6��+خu�K@��$�����V�� u8���2�`9Rs�����j��)�x����DX;��,QT��]3�6n��g������9�P5[���GSj�-��f�mC�[��,d��	�8"s��k�d
)�_�fװ�2�3�u
�F����U��0�#��Fp�Un�)�:��U�"x��˚	��v�ׁq�Ãv�m8����Ū�g�L;�8�d�cn^�.p�M��E�0�\�%c�>}B��!�_]�C��m��M�*�Q�f��:�a���G�Ǔ��m�����a��g����a\��L�6j��پV�ix<_����NH	i��3�m�z�o"qj;�-a��:im��s�K��֚��ޙ�6��"`
�!I�;j�+�t����6x
��t�\9�$�sJk��i��J\������56�:��Nk�����������Y���B$#��	/%����z�"Q%�3%�Q�8c P=�(�8��t�^�`!�F�>(�����kYfjzh��V�5���D �����➊��§�BB*t��m��Ӧ���b{U����;�?T��@8��R�^`Q����4��O�޶�+�&r��i��텕��_�1w^���<��֡Z@c���bYM����W����C6�G�9λ7����I|=���#^~!'ɑ�^5,?�C�>���"vTh镎b4�a���aw*�r�WUC?\�ǖ�n�X�#+ej����w�.�6_P�u��Oe��GS�n�\^k��<���Op����d<�X�NhSZ���+���
�������F���bw��:ךҎɻ{!�>�i�&���ź)QӊX}�L�:��W�""��-�Y�vQr�[4M�T��Հ�/���s\�W��H�U4��T�m��X��\l��$��c`qJ�-��i�"�c��*���M��ܝ:��� P�n�i���}pR⦋�[�ӹX��K���l<<�Ð��{�Y����.B�+�m��td���a͹A~�Fl�÷D3����Ć��<�+��
��V�T��Y*t��ˊ�	aˢ�pĬu�� [�����9F!�k�P����	
v߇�Uѳyb�
.J�^��7�U g�Qca$z�iyA���n
W�_ܐS��ŵN��P�mvq�.stV�c�TC���ko��8�s��xc�i8�Cd\K�'hVztnb��d$�|	���$3���} h�5��j������Ƭy-�b����_���Ƽ���"iD�WV�~���Vs�f�e�X��^�Ԗ�{bL��Ԗ�r�w�bb�+]��q���������������}����lh⍢V����y0ڂ>���XS�Cs��Y,H�]6�ǩ��
�hc7W���%��R2��VTe7�)4����ש�V���Ƨ(�N����B��tQҾ虇e��'�V��H��EEa�A˝\o8{ b�'�
��)�>�A���TwN!��8�Έ)���Q����-�4��%�H����#F������:.2�O�����b�S�� ���bz�Ռ霕b
�B\
j�����i�X��)W� �f��Ge��2��P]LM��:�1
��w?��u��3ĬQ5:7v$�!��2�Y��)i��LڣnW�3�&�1L����#!�Lr5���y��!O��u�P�2��S��D����ډ\��!MҾ��z�d�i��`�/�ȂE3]{5�T�$M�M+��q�����(��缡���~uVA�̮�"�3�vOo�F�m��Y��&*��~7�g۷UқT�
d��u9����_��h��ؑJ�b��U����赃�P�0��[�6��{�0M*��(x�O3�Ӟ�T+o���p�r��w3c-X^���`�	�T�>!���T��S(�H�?m�=Zg�U��E_C�[�M}�]Qe�Q�]
$]+�
C��<�K����®��|�.VQ��сG+Xv70����YD3�ؓA56��w�ԏ���6�3�S�Y`|k�d�07���!Q&
[ٓ;�}wƶ�eNJ*
ΉT��w2��'�q�w�c�?��<���N�#&?�­Z4®��9�N+.?
�;�Ik���~8�H<F���Ͻ.`	z,�o��NO�$��7:`�G2b�w+b��XT#��v�?#S��|��*&���(����2�
�e�^Q�jP9�Cux`�����q{�A�3��z��C�6r�C�Y��t$��Zr�bU��	qV
VO ���A篸�w�/f�KH���5Ĉ閌H�2T�q��/2��B Sg��(tR���DȐ��j�<me1��Ѳ�S���l��N����?E��V5>A��z��<�Ƨ��<�Ʉ@�䍞�� C42eosӥ�Iu"r��| ��
�L,n� #B����K��n`�$�Y�i�	�t�Y~��c��@0�Bs��3/L�E�
o�!�؀x�ҡ#��ǔ�9w
#7
F�n@�ã�״�њ[�hÙHr6�k����H�4�]�W�g��/(����������=��:�MV��E�<�X��X�m^Gc,-M�5��P�O�a�@��2�]�%R�R���3魂��
-��P=>�̯ll٣Sɀ��b�j)��!�%�!�cP܋��a �u�A��s�'ᑗB��z����
�
Ml�zSf����z�Թ,Pթ$c] KWM,Y�훃ZM��U!鳾�Xo_�"�)�^֦�:DʱJښg��h�U%�ǝbqA�C�,���x��A������?&o�U]��
��g>�P��7��mm�r'l����R{����U��-<;�yƲG���$�`,���8�J�y���*`�%#�I���zMr�h8�hH��E����q�-zCE�c�$%�ל��IS�*aRn2>9Dv��#t��ђ'�Uy�:���o}�-KJ`�$��~��E���bPL��-��
��1���K�Z���J3{�R��Rs�`Qt��Ʂ����>͑�n�d�Y�o=��hV9D���<h��]��ܮjȱ�"�s��Y&��Z��+�(��.�?Ј\	�rL@�~L��z\
�T��]�W�R��KWh�Q"}JQ��b�5�
9_^@�N�	�uhG��WIpq�����hK�0D�Xl�����N_��_6ؽ��н�m������ʱ�
��#M*-��nU���l����f�A-M�Bm�@SL�2<`9�em\�g���.op�:��z���~s���f��=}5l�R7<Y��Ä&k���ӛ@d�����嚼�+�w���k��$i��vΙ��JEx�B���bH\�TJ��( `]��-�p�pe�G:��tK��F�~�̷��۞����R�Ws�Us&5�O��lDI�M5�;[�^�bԼ'y�t��1/�T.���� |��-�}�K��s�Л�gX]Kµ�Q�G���n�ZVMJ����*���[��{Ŧ�x�yب<S��Q-^!5��H�DX0MT�'0�Oz�����	y��&4WU~*����m���E�k�]s	��-��+���Sf,��N2��1�mb��$���*�v��*/�<�JJ;�y���mpŁ��A��0�l�e���Dܯ��N�!�/�z$��.{0���ٟ��N�g�2I�|F�c��:�Լq��[Б�VˏA�캰5<L)Za�t'���@��O�E3��!�3�y���Vi����x�Z��N�A���8�;xJ��75��?;�H-��`_s�^�01���r,�=e����	�-��A�a��hf�=F�К�����Ϩ��Z�yhF���z@���� �\30���`~�8��GI�9�
cȯ��UӚm�u�p�"j��+
|
�������a@L�4�^��tg�Uuք:����`�3��չC�?P��eB&�2���?����S����o=� =H�מ���[����re�F��ݍV��@GKSt�2���p��0���wt��I@��a_d�����y����+̚���W�l�@�Ŕ��
��>���*l�bϒw[��@��(p��/B8�c����h��	Β[���h��VA��Kڏ~��C���g��$�Ӣmiu�
��&i��<.����nb5Z��7�����?֤�?�E�[��\;@�ER�]���f�K��xx4��Z_-���>�xA�|�ٷ�{zy�}S��z��&@Ɛv4nj�:��6���x��R, �c�W�C�1�c��2,�&7��uq&�HgbwoY⨁��]���[B�*��
�.7��~n�|4i|?%�tcS7@�ύ�i�T�䚞;�c�|O�MI����L�6ն�j$�JWX�k�z��׍�������%�ǫW5J��5�ݼ��%H��KGk�����Ƴ�G�Ķ��!��7��'���'�wl��p�]�̆�ee3��W��%Ps�:՞�aƐ�2�3��j�c��D�L/�h�3M��A�����R�հ�7�3k^B/�f�@J���:��p��6�	mcy0PGf�$dWoQp��s�˳�ЈDl��~�ҽ��m�J�X~�A9�-�C~�x,b��*��3t�����p�5�Pb2�bf�S�r�j�6���v��W�x�k�Յ:'�:�0��+�lըŝ"bJ�t!3a)=/r��*��$J�T!PtI}j�O���.D�%�$C�?75]�MI���6�����x�M�V�W�reu��ƹ=r&E��v��a�J��Z��bȇa�(Dn��+p?��-��T�Z����T!@#c�9����B~z$�J
ux�Va���k���P��g�����8Ĵ|P����QiP^�2�`��f�1�FS�-�,�
�{:*tBt�#�U��f��Z-y�T���Dp-:R��`�G��^/��wY)^��-w��8Gjk@$��S�>��"s�B��@�ؖ���Y;
�C��B&G�:Q�и�])�B��B�(D�:�
�%����
o�3�a�5�^�2����)�l���X�ͭ�j���g��k08��;õS���`�U>�X:�R4!�$Kj�asĭ�RDZJ��C�d�
�-em�$�-"޷�M���Z�-Fںz!���$ʭ#ad���
��+���w�7e�/y9�yRt ͍���Ԓ�uk�kKF�5r�i�^8ThGep�68��#,ʣ�p��Ka�(b��5D�ű0���.[PN|A(�	�	�-F����g�1�荺��Rk�q��x��,L�CƸ1f�<_�=�?em��ߑ�d�I� q���5�W���)x'��]�)j��%-��y��J(�C)�ܞըj��|��Q�aXF:�@4�R}�xy(K%	����]�\2��U�Ɛ,�]-�3Qy�[ZB�#�f��wo�\�{�)�֮�u�U?ǂY�
l:٠����O����ܼ��X�uJ���lY�����%k��RkA[���1[
�䘶��/���S8�W��
���1���%�;l��o�,-1�@k�w���$:ّb�W�������4'�gr�d"D�T�u�e�����q���}<pG!A��P17�ď�RN�`�{�e���>(������[�Lc��P��
�����ۀ�j7*'kO�-�B�u��c��	�|hf[4�g~!P���V.\�$RG�r	w�Hl��a;Տj���./2�ņ�F�^���E}�b�0-��~-ڄ�a!/)BقD/l+ھ��HEͮ;Eԥ�4@��Z~��ч�z�������@��0U�>�.�>�BH�4�X�_�s�&ΩL]h>ٯ��ݱ�.�z�2g�����](�H��j�(Q):&to`A,F�Y����f�����sފ8��?%!���Xd��Y����%��k����EPX���/�Ta��!q���Nv�t�6K��Y��Q}�6J��]�r�K�h����=Lw�6�d�E5z��	0�G�sb靟�㮀��T�#]%>�	��uRp	���_�4�Rk[�gyk_�j��pk�A��y!�F�9Y݆o[�������Я]?�L�{&O��dz�?�����=�ҽ��;�U���wt�e/��űJ���޵��dt��~�d,�M4�j��� ~�P�(�r�Q��=�5�LjG�C��ih����4�.CX�]�a����J�v�p�6��+��
�W�6)4�243��)�����+y
��F4K��h��4X�J|*?ܯ\ᤒ���9/��0Z�|��(���ts��'�)��㌇P�������V�5\��gc�y���=z&�*�� �0�^Ѧ�]�ѶeiQ�f�D�+��gV��zvf����gVP��� �+&L���3��mы
��K+�rO�4#�ICh�l�6����B�\Z2B�>�$t��f˹��ks�Tc1X+�悧���	.`���aՌ;z�0�sh��MQ'n�ޱѰ�(�`p1��$�N�PQ5��E<�i�g��{�Q�J��n�g^�T�l� ��QFMH�}�0jB/��N#ckf+Ą�x��D
C���\�Chw$���j?�x���	Jm���a�̍�GҤ�K�aY�0��M����dJ�����,�v��R"D�p?m��&J�m7�G1G�Vϒs!8l��Q�50�
^�6aZ�K3w^�̳�#�lm�\��f��G^��3=a��<�}�G�N�Ce��"�u��@��H��iy�/5:b`�
�) �V��.��@b�g\�,$y�Ou��~��L8�qz(y�}Ƹ�i���c`X"�����vzGqQDH�y ���k��1{�!�H.�<ʗ�ꏼM�'ݧ~x.p�hEԏ�eO���{t�z{U hN����ɑФ,���W��%�EG!�y�L#�@3�ZD
��c9�I�T�_*����}�@�l�>7 Ҩ�^�w�K�?���BRű$�F��X�*
��>Y.m�$G��1!%��h ���G�3TM�iV������ҋ-���|�絜�oX8u�8\yݪ��l{nP�{���n�`�������uߺ�[rI�^�BЮz9��屄v�oɶ/�jU��#n�x���c�3��ɏ�7�������(��ó��W�pv%�C	�\F���>E}�="�:x��jz��4�[��1�hb��N�~�^�?v���K��%*ڂ��/�rz�լ��d��Qm�/p�P,����T�fQ�����2vbO�mı�l,���]�
[�χYo`P�U�n0�s,��W7
uX-P�>r�Kv`C��${#o"��h����޹��L_��:�[X��c�!�Y��������s�����pZiV|[ک�lB�]�Ge��/
�_:o��@?|f��'%�|m�[�����ř�>�|��k^`t%��o��ɱ�#�Q�S���{9�Y9�暁�2�����2QW
��1��7�
�yLg����اc�i8�h�B�����bjSX��m)%��0,l���;�=�&<�F��s�-�	���Ng�����IaO+�%��!.��E�0��:U�]��9W�<����j��z�%c���(�@��0������.`+o����v��|El�9�ABj�.BCg�B���&�.�O�@���	4�p�;��6$���,a�y)�G�G�}�}�n�@����I��v�<{�K@�h5Z Fuˏ]P̧���Sٱ����3�7谳��zZ�h���+��Ͱ�im�n?��bF�Bd���C�TB
��Jb��g#ݘr��nN��ƻ��(�x+����J9�\}�pf���xȧ�F}��K�C6t��O�;o3��ָ���=�
�a�PQa`�3�/��^р����w��C���;*�ˋ�~��3ڤ�7�s�d���Y�
�0�������{*H%S��X_�*Cmǵ��_	;���/�O����Xi���Iw��S2w{�n���e��6�2F��zn�	���Yy~�XA)+ʄ���>D�1~j(Xy�
ԫ1���5��Ų/o���˫�`��8Z{�V\��q�}n����R���1�Y3].��U�z��;qҭ�����	Jj�|��l�^�<}*�Vl�'�{���2���L�iw����
s�Y�}L��[s�CrXE�Ճ�q6���5�
��!]�qL-�KZ��`O��;��W�Ր��L��M�a�󄈳�U��*�?�d,�,�Mϴ�z���	�Y�=�r����� �*ڗ���,���q�ٲ������C�Ŭ�9�L$V�x#�Y-9�/C��]�#`����\��g��2�ߛY��N!;l��%iu���%�x�ȭ.�4�`�V�'&]}V��q'�d�g���M��-VP
:��Qp�G��m�Pj�m�<��}%#V��k��0�T&���_D��|u�}�iIm�ܧ>E�y+��ĉ��h��|�&�R�잜��}��
KjrЪ�8�2�l��1��s���1�#�����a�ϔX�����I)�	��2�Y�!ޛ9ѻs��X����ـ>r�ԭ_��]���ig0�޻��V���%{6���	+A�i-���Ut�*��vR�B��9ɢ�	{�0X���O A��5�=xV�+|3�W�Etr�:��}S��:^���զRH�E��֩�^��Z�{i9��*XA�� ��G>����8F��"񾍄nmwee���pO��]2a�/�6c�~p
�Qb���/�6A������ޞQ/%wNP���baR#�P������	c�_��I���3����n���k�5`�=��eۚ�Im�8!�p��k�Ħr��ԗs	`x`n0���:9�wYk�h�������@��O�)�����/��nm�`ѶD��Og�6�4yo>h]q�2F7�\�����g�v�~w����0�����}5�޺������ �דqwj�$p)��S6t[��A!�|p�aī��(���(޷Q[�B�z���a�TTO�v���]��B���^�j���Ƞ�Q
�7�F�_��o3��6��?O7����E�8�K���f�h���	I�ː�@�������Qɭ��h1�#��L�h�*�7�K�#TA����$4�P0Ϊ���J�@"+\�T.�o�k5C�c���6��!���pY��"X�Hd6k���Tl5	Q/�&Ҡ�^h)�|"0�"^z6T�+��^l��b�/�)_�A(<=���'JGQ�W�0
�܎�t4�cw9$�{��GK�2^8B��i�����Z����c�����R,��
�
�7��<���&��Vv��b�+[��EM�ϛ3�Ō��V�n� ֭�%�_����k%I��ෝˬT�B4��@2ϵ�K�Q����o�Ѩ�ݼ�N��{��+�LΟ?���2��յ��q�d+�K�L1��t.�,!�E-Zϋ�S��Ė�����X!12�˖U��k�]����*s�3���N[ߖMS��mV\f�
W�c[�]a=��eH���/�a����c�L����|.��q(i^�@�%�4����yn��+x�qۖ��~��*�F�AP���]ߖ5Г2ś�c[D�yV�~aB���\�Q\J�$છXo(V�.��iM�w��#�9�tPR��.�O�v����W��ip�tP����q�90>=��#6֝�Ѧ
3>/����8�����"����ޖ�/��wI�ȇnU}!�����*�?�/O�]�=�q9�!Y��ԟg��bC��xg'R=�r�<��o��l�#�~L�^�%;�0�41S]RV����kQ�W3��Nf��l2�<��
��e">�J�n�.�9RK�r�0�ꤌ��5?(�s)
��g:�w��09E��<��B��2��9���y��tc���XE:��I>���XyR��
Rc'gkL5�i�zS��͵�R�R�~�$�<3"�4�C�ӹ�a�.u�����#�ӱ������,:�%&â�z�lrI�J�!.�ZU��(��/��Sa�����D��K��s����hU�'����������t�8�3,ᛶ�3T�O��X�����~����=�:-�G^�"C��-�N$�\���Yu{�v�+t�
4����N2<�l8�hH#�V�Wo��r����u�đ5�D��D����v|
8q�?r	���;��D�G'��&��/���ч�H4��_*�fF��vY��7���w�J���7�|S#�6��?����\��.�m�����RV���u@�	�?�[���r�;�:�Ip[<����y"�5�����}�c�%�s.?U-�.����PB�Tk.��[�f脄i�J݇��<��>�����oP��m||����Q��0~��,v��g�Y�M���`Ǣ>�Ⱥ��Lӥ�d"!�!�M�&9�����l�~5IJ���@o�RK�G[݊Iw���8M�7�g�.���Y�f|����!;��JM�K�0�f�̱�ӱ.�׶�O��:�h��Z	��ǥ	�M|�]��&q�X~���k���� ��x}U����L:��!�A،'�̔nb���˅#w��]:�f�;�Y����kr�e)h���3�NDC����vP�Y#�;�Z�9�d��� �D7{��8O)�ʟ�4�:
�[�hm㐺��2�O#b��-�Uf��|^��[�i��<y���:��S���$D�M���{�
��;;�j�I�q���C�ë?��wC/��0(��8�eO�#]yaT���("�E��U��6�3~�<�=R�u�X|�;�%�->t=��=����\�3+	~�U�\��y��Y�uc&�X���A���$\���P��5����[m�����x)b�wp����MZ-D�ѻ���P��ƞ��	N4����p�2��m��<	>�YT�k�k�l�/�'ad�W1�	�p��n�>���v�=�Ȋ'�9Љ@�?�]�̼�zY����.X�'<t>�(n�Z�/�	JH>w�7>}��p�i�0�y4�C%��`ʼn�ˢ�h�x�����C[� _7�6�g�-��Q�_Mg�����G
�Ό��)�TӰ��2&k�d���5yBa�7�Ɖ:W��M�����2�??��X���������HQ?\1���t�,����h�z<}���[Fo�Aо�CE�"�0��L�� ��V�o1�&.�
o�y'<`L��������:��
�9�˦A��V��[��PRd���'F�Vaεi��*�x���-Ss��芴���,.�қak�W�Ea 9&-M����ֶ�� ��R�7G�q%��3�x����U�M�3�ΙFUx ɺ#B�"�5+���Y=�0��0�,ò�����+3�q��qT�X�)qĊ?�x� 0g�{W�]����q����A�%&A����G»�7md���8閐I:&m���3ˏ%+�/�ڐ�Je�Bu���+�vߑYb榃�wޙ�)�.�]�%�f�����6��i�~�U)����E�6��<�ܨ�	�e	�@�uŧR��a���Z/�t<ؤV���+�C�2��)h^n.��c�R� ���4��GK�uCvX���Դ<M&�8�e�Q>ɓ�+�D����F�aI<P�K�?���+;XB��m�6�"*�$c�����ݧ+9�3�ե�F~.�r����͚O�79�o�B	�-_��y6���.޵$PR>7#�u��x�b�E+O�s�V�CyP�a��m;��(O���s�6l��"���YƲ��d&��3`��e���sXӑ�g2�E�Cܭ�w��I'��ʦ�l׊P|#�<��AR| /;�CCI@���C	9���+
dsɆ��Uq�� ��V��_�Y��R�Z&�m�7����5e)*��~K��n�Bn88��.�;����C�R�.�yFi��T�s��/�}��|crL�v��@a�a��U���([آ#T�I[Z���z5yʳ�M�J'����ӕ�KN��h�Eh�\�L���m�q �=����bK�J�����Z�)7��������Iy�����|��6��|&w����|mn�EV���?�܏Q	�)7�ƻW׊v5D�
j��im��/⸸�������7_gW�}�����4�sK@��.��ֲbW�`�Ƿ[6�q j���}u	�����)��h��; k�m!�����!b-�r	�V�@����_�.�����yw�w̉�tS�9Յ�Qu>G7S`X]w>�IT�ۙY��<o)>K����u^o$%/�]�]��,�~�Q������y�j���u�ۿ޴�/<�6�a�R��j��*��gl����6�ą�֡�����`�1I��@nm��#u��o�Ν
uA3�S�C�5<��U�;�q�)�;��:�(��C���ٳHwo�O=3��R�}R�J�߿6%�D�����,�*>��k�8�9UX;	��.�?d�
\Ÿbg£�_GW!�RNg1�^��wԙ^�k�p�9t<�9��m�=0Y�krs��0�M�~�!:�8��"Į�u��5���)T+�7�=Ny��D%�MOI��>s�����rE8�+�#��-ݒ��lO�2�������j(���ݡ�CM�-6�
��N0��@��.��p�S�j�CP'a.���Y`���?1h�+��<��j��x\�x}tk����/�jE�Ȇ{�t�߁F5����7aU釧,R8��~&���D�ڼ>U�5�!��j�΢xۛw�?w�e�'�!4�Aғ�)!�	y�ʊ6�Q�灛r�! �Ϧ"=��[V��Q��_���U���9ʷ�Oc�_g��eo�Ч!G�&Ni@���1���k��+��4�u:mf��A_�Na#ʻ	O=��&��^�a�畩7�z���&y�^��tR1�o)	 �g5P�0E��wn2�:�NP��yD��;8}7$��SQ��ÝS�P�|G�P�ˠ�l>d���nʤ���
�-:���1�!4c��F3#N����,g��7@��e��OSQ�^���F5�q�ԡ�'ʯ���a�.u��� 4��G��B8<�!-
���-�WY�N���B��?��v���(m��	����W�;��-�?��<#�[�:xf�ٴR^���a�m]��^�Fz�  ȭ�uB�-^�����̩Oq.�\�k�a��<H�TU��3�~
�
�h��y���
�%q]�#�E�'x�ZkuZ�܅�5r���阜B����[�Uyv#CW���u&$�čpY�[a�;��^��4��kF��}/S-�$̛��g��ʷ����7��+{�/��D(���3��_u��n�^�dK������t ���}���R��üS�O�
"���p��n$0�E��^��T̓J�j��)���������;��*��C×�	�E��#�*$�R����Xud���&{(s��`Ă~T���UI�ɞ��m��C�m� ��bv@�z�����1��M�Q��N�J�A�h�z�kfg�i���ч�9�.�Wz���b��3��?��jN��27���j���A:,����P����7b�8��s�ӊ���l�r����}�m
vJ����2=�:���]�{�J�����X�um�2�|�.�xyM�u��W�8����	Ԑ��
;�-2�),%�������2��*��"I��έBa*�Fm���Y�>�0?S���:w#��h�P�g�HM���L��Z�SV�"K��]�����ȇ�x# ���E�T�
���N�����)����qa�2�p�a#>�!��вd<Cy�ъ��6Yː4���dRb�Vl����u[1��} �ݹ��;z�p�g�KUrf����"�_����]�J��,R8x�8�l�8��P�r_KЌ��! Z�6-(!�����K��aui%�u�ƣ�}ʭp�'P�J�a�ӫƧ�
��_1�A�7��BuiU�	S>��4��S���^��Z�h'�߷�?����sqו�&�2����	�9�u�\b��G��Q��ub-V���qKw?K���
��8�A�t>�=D`/x�.��\�B����/k��o]=��z%<�=���Ϊ@��E��miu�)F���-&�5R��b�2юt����m�|��n�`����-�^{L�%p[A��ǂg&G_�2]#�E�KSi ������=r�P�Lrb[3tP*���On��z�Y�6�����4P�;7�a��E��y�G/��D�G�0m�$W���u�"��EjN�G�����c����N
����x�&��X �T��R9ɩ���=���Bo��odj�@I��t��초�KzY�4A�:��HOJ{������aQ�Mr��

���|U LS���x�#N�G��;�Q8��pR�9�n�&q��t_όȉ���M�5�˘�#.�n��"1�WZ���ͩq	���fn���%�0�;N~�6�ur(y��*OqH��d��w~WkԴ�j�2�Aր�X̹�LE:}����K��ZԒ�=Ċ�}nbwu[���5�(M:x��<�u�Z����b�p��Lx�Xt��3���|�� R�
f���kOm��Y�Ԝ+�"�	A�5�%�|M���ʶFI��4Ƴ���e�a܇؛:7��ëޫ~���#[v��F��0ud'V1"��/�RŌ�m�w�y_��^[�W��m�w�Y���r^����bF44~"�g�@�ȡkN�U���S���̘+���P���!���?�W¥�0c�/8�T��� �r�F�N^����񩥣���s�����ѡz��c �6d�cr�ӕ�!�V��I���wE	�b.n�E�����</u�⁼��E4�zN0f�+W-$��KӯCMXy4�\�Uƿ:i���W���E�Ҕ�:	����;�P�<�t�=ޢ�&������,R�=�NJ�Lt�䒒�)�2���%����$\S���G"<��tI���T�}���QլBs�Q����"���~I�� ���T�
ہ+����}@),��W�0%����Mh�S=B�����80��>����Ed_�mʴ,v����Hb�5�*����!�X��(�f�/Ԣ�7�Z�/f!`_��k��2[�Дa�FK�L�v��$��i��M{U)��}�5�U>���?G�=��Cc,��Cu����( ��򒟀Y*��S޾*u�҃��^F
���>��^^r�E��mxvGm�~2R�9�����/����f�*���N��j�
��IV}��~�����5��B�>�f��k���!��Rߓq�A1Ec�Zh퇽�K���bk�!i㩹L��j�[#�LG���g6����*38D���u%����|���V��Ϸ%�G���8�c�bx�5��At��ǡ�]���q"�Ab~&��_G�ׅJ���m�+�^��r`=�w���	ξJz�������S�%kgr�����p&/�#1��G�n5{����8��=#V#L�#0o�^����+Fw��sX
�����Q�	�^bWSBXl�N.�K(`��@��Q�nn���d�{0���2ňj�󕣈��O����kgD>P�DyQ\A���أ�DW�0��>�j舘C���>=)��sZE��K��T�J���N�Iߦ*{��-Z����
�4�=+Zl�3LN)u�:z˪��0��H�!V�����|�w�vcX	��2�)�zhzRe��qbUt̊�BZn������&J���,�$�z��F���d@���o��nZ< �t~l��C�e��MF	��/��#q�F��3s��S�̽��ͯ����.�'�\Y������]����S��a��x�M۶wD5��V��Ϸc;\��ZhK�7/���	0�lv�xW�h���js���u�cKcz+��Ƨb��q�5�=?���
�y~�Fw��?X�r"\�;�P��%O��t�zlKB\�91�IV�����I�{��6���yLx����U�*�}�ܫ��q ��f<�m��Z����K3���x�V�FEVz{��[ZR��b�>3�19��)=�u��7a��˶�CI�iS �Qy޸���.�Ar��g�)�2��E�r�x�WL����n;�4�'�&�
����y=c3ed��\?@,:��!R�?���3g��άk�������spfxՎaEΎ�a2ם��p�m
��$A1G��P��ێuJכ�A��i��(���R4�:=Fe��X��8}��}LXejw0?���;�.+��5��#���i=Z+;d��Ό�N�k^�R��T+X�%��O�'~d���uZ�l�.#�5�������^���h��9Y{��"J��Lc��-8�Y�A	Hj;�$�x��q(c�����/�ˎ���G�h_
���?<��l�(��R�S~XNN����+��ɾ*r k��x2'�U ]
�9��BCĔʿT]#��#)�q?Ǯ��1�Us�����l��2�L�"lo֔�Ԕ]����Ϩ@[�ݗ�=�3�j��p�U��q����^��3,�#�� _�@FP�T�		�, �!B����i�Dݘ.��3@7<C�}��GA2$1�G ��o�o�^��
��	@Z�y�Ĺ)l��a��{��hf 7�r�3O�����~q�7h�sf��+i[�~I�mm�┟�/��q�!"�!ᔊ�^�|�`^<�N*)%L���I��?��2t��#�/��frx��6q�%�-!ۈ?am�zo)]�$[���7�DU֧;��p���KW�y&�c��5�iŬ�R7�xQ���̠�M��pl����,�fb/1��
(�x�����Ķoh��&�ҤV��Z����o�����T�Y���"��a1���m����G��v���A���Ⱥ	Py�/^k��]���Fuݞ�гbJ|�E���u'/���p*m��^40dG{{뼏~
���X����B.6%���%(�}��sqg>��
쇚�	PK���^�w?��d9>��p���x�Z�\�Z<�9��x0�QLC�Y�>J^Qb�Ԧ>�^Ukd��;�#�y;s4������aة҄4à�5��O˪�𺠍��OUBgC�m�);D��sI�yԒ=3����[ӟy�Q�,�v�Qt���(�!��g�5s���Q����0(=D��V]
h��j��C�e�����m`'��u�Q�_�jڟW�K�81F~���"�j��͂y���<%�@�����}S�h�ט��.B�&[`����>�%�g�B�+o��z3o�)'s���5�s.B�"n��Д-��qɌ,���6�O���h�ȁI��
�QA�d�4ABv_cj+̝��!�Ԅam����N�|�Z)E���%"
D6���C��������e?��Hm��7�@鏋1��zQ:G�	� �`4	���Â�˔T�P�
�XA�J8ION;�5��9������:F4{L�
{��~����9^2Y��N�xc;{:_�#֗��a��R�Ӷ|5��A4��^u�<�u�*��3:S�� ���e�}ᦑ��}��e;G�c�$�|&hR_;���o��ٖ�8�^�&t�%hѲ�rt�g������;_���x��^�ֵ�+]�O�el4ɬ���D�Q�V�ő�Q-Ǝ7�1�%�~���k.x�y�▵/�?S�E6N�d)޷��g���J Ċ��VU�Q��3z�|{G�,�|�?n�VU�;���3nV�Bm����?��.�������:�E��m����r��9=�k/���7gM���l��Y])����;��m�L��_�U���ތ��X�2Aw���^T����F�F��!ms�%<�~�,�5����-��H,��Jvm��kx�_�Ӗ����l��;��>�=q�r�'�Vy�p��9
C!�H:o�Pw]�ODd��<��IR�(��R',*g�+XV;ݩF�9q�����Oz�5嚻(��������FP=i=�8�ϕ�N8z�)d	�֓�ʛY���X
�J�Ib�� ~�ѓ�6�Y��X쮂C͑qsN���X��>413�y9rlUI��P>���>����0�C��-X�L˔��媑82�#�O�"cЊ��
�EO�Ɣ~��^�77���B@�n�� C*���E�\���������eU5
K;�8�8� ��b
�NS^vr�^![^TClj0�e_kgH[��l�#A�u�
����B<XE��s��J��I�!	"�
v�W�X6#y;�,������J�5�v����r�'.�Qq1�*#�q]#\��!� ;�\f����E��țoL�9�^��f�ZEdV}��(V�d�+S*�\*
d�l���
Tj�����ː����3�]!y��D���
oI0y�o�-S����d2v�OƬ#{�A���r��7r��sS������Y���3�xIN9V?��H�U�(*Y�8��O#���w_�yJV� bЗal�Q�K�g*0�����r�����p����Gu�iB6�f5^�K��f�=p�>���2S>N�3����l���l������d�����n:$"���XP�����1pN�2�屓s�2nd�pa�ju���Q=�!7�a��T��N��8i����I3�g���l�����W��EF	��ɜ����d�`���_M5���t*P�~J6��bZ?�K^�4�ܰ_�p`Y9���Y�O����:u_�J��'[�00|�A*��3Z�dM�����~�����;�K�$Eq>�&g&Z�~�A@#�9������<W"����5����]�3��+��<��'�MN�h\�]�h�a�4<e�5�7��f���
&z�}�,&c�0����UR�M-�2>�B���X�:��ʾ�T��›��G/��'J�8vN�x[z�[B�к:�t��-���L_|�f��n�����;����|�lDqЍ�fq3$���뒰�k!(��0�n�zq�M�h�]�z�����}�|������z׻%߾�ZC1��	�<)�3�!���3,��G��>��c�[�~E?��a.j�V�πm%�0&$ˢ�}�Є����"��}�+��3�}�te��۟	��:[z�"x���t��(W��Z8
��z���Wß�O���Pɻ��}����)
�mEI�r���\w���L3?A��W�M��1���=t����W��2ҵ+ž�]�'
��O�D�tJG��M�!F� !Z'v��{���A��=5��l��.n>|mW�[���N2!@޷����j��o��-w�����FH�\<t��k��D�iSE�m:KTU�g))!�q��)i9"ƣ̀�c��'�N'����G�0A��zA�}����H� i�|�M��B�%@���=<Gr8;M�[AU
z��[XDk|�l�����FT��D��i�]1�����#��/����|?R�ot�B����7��{>]��+���{��3�g!X��{z�ׯ7�0�
1i?��;���qG�w��f~Xk��n&N��3E�-�{[!r�A��%`�3F�s�;@h�uB����o��\
�칽m�fM$����n����i����;����΄��s�{o*��;	$�LQG��7�J,l3ǃ%!w1��_
��q�d>�/F)\��s���yGdEۍܶc�Uc�	��l�(�-��j���3F��
TJej
A�j���A���IB� �E!���eQ��[��@
�9HTB\�e�D`�"��σu+z^�m�_����;���c]���>��mظ��?�'�<{@]@8����iapv�k����Z��o�v���P�:>��_,V!L�pf��)<�I��ɣl��=%�Y3ܨn��g��=��;o�o��.���E@�iP�Z�-;��{�]�%K��(0'G���w�+�8.n�s�gzX����aR�_����0�P`��Wel��Fa��0���b�����$+c�$�,���G8��,ךj~��xy��ؒ�@�/KY�SzX�R�F�C�2�$r�՛�Ka�-i�Z���c'��ӡ��i'9�Ps�'T2���n�.�����Bgftי��a��QH	煁�" �������]w�IHQ�����ʦ'U��k2&�bN�]�L��c�.�\��8�
t���8�[��������+�K�xےN��n�u2:�,�0P�T������tD?N�`%��lT��x%��"��x���p	�Ķ��]��i!-����,�I.�2��G:���m*s�r�"����`��<y-��F�Et#Ό��K��m��_�:W�Qj?�U�]Il�t1p�rm�x�O�;�E����LTb7+nxX�~fA՛�䳚�G�5�%�"E�r���2Rd�,��w����7	� J8�2P���rͯnTkH�hz�z�/0܇��P����h�f.D����J&����'$�:�(�*�n���]f���f�����?㰞S-m�2��ja�}�Y����H��<����0D��Pq��Epѧ�s���\űP!rA�AΨ��M�%���|�"V�~�N���|w\�4^��� R�!Y��U�s4�}-3
��,�/ǚ����0y�d��*���y�K-��z�,U��9����l>�v�d׏f�H���f�ا%y�4^ݳ�^9����*M�q�y��=<��Q⮁vc�=���|:h3�&t�w�{"�*3`"�'͔>\�뒐`�N��Ƭ��l�r%]�q��}�P�����'CG\�E_fYK	�8-R[��
E��D�.ɽ��pK}2���&�Z@՚��!��B���r�__�rW�8ݼ���	�s	3�A��O�J�av�!�5x�5�V��^��ǃy��ot2hrI��ט���,Y���zR�4�����ް
v*,��>w�t~�����tT�
��6�F��0�����4�&|����zuBo/�����!��ͯ|��.��ɭ����O��qK�?���rMeSX'�;����δE�"y�Ȃ6�5� 
gú�;�\�9���@�����4�[�
dP��ж��MX��_E]U�]�΍Z�â%���9ϲ���%n�*+���
�F�u���Ћ2��V�D�V�g�I5�Vm���Lo5�ގ�v�̱�T�!{�+_#�yd;+���ƲU��-�
���Q�g�ט�9���:���J���xt��n}]�V��xO�<7�Z��)��(A�)�����)��G�%a�W����ƙJ�����Q� /H5A����籨~ϥ� �a0���d�5T֪}�AZ��MH9����(�����X���&�/���94���KXC|^jm���A	Ǯv*^��#k�XO�ĊAw�~E�����ҙS�j�U���;,��?�l˵
�)k[!��z�����N�Bp�����)� ��-JϜD޲$`�l;s��(�^�c����{��z����$�U�d����$}�Uz%��¾68�v,��3C)>�>*��F�`"����6�G)�G�w�]�ةpB�9�u8(��#z����,W��4�	T樄P}��0X�2zc����@�)Y���\�Q�ޟ=�Gաi��ύE�Ӹ��J�S�vaw��=K�B5�va6i����Q/W� UuQ�ZT�2m�N�q�
%�Z��3A����	t�
�i������'9*h�E<m�n�ؐ����P#|�1V>�P:�W�k�~�����<fg�h�)����=)Sc9�
y`�g��{Wr�xXs{�}.u@�=�Z�:�܉���p?8҃��C}�s�ؖ�T�xFc���#[�T�9i��#j=����0�۲�B~�$�ٻ?e��k�uz!ٍ���R��E��51�VF���&��a#9��(�`���6r�X�d&��-�o`�������m�j��tr҅{�t�2G������E�S�}Q�Cq�s
U�0[��/��)��7S>��w#9R��B�>:Cj���m��-a�C`W�OG��@�=}�H�ܮ�:a6��=�g�~}9	t��b�)S�w��2&�e��d�5i{�@s�b�2)�.��&�M�5�j����'س	8�N�%C�9J�EK̔�������Lk:ʗ�%�N-h��$j�<�h�*�hg߃�Q���S���"�ZwvU(v�ţZ�o�b��C�.���mjzƂϓ��d_^1�~�M�g'�uLrfj�[B����IW����X+r&��z���IW*���l� ���>�RaX#�=:�B}�}�=�
���d}����@��Q����I8���"^B0���:7c�N��:m���hq�횵{r��-��#5�ݧ	<~����A����'��l����q
B�+9����h���'����E�5�	9��/Y��DYGuK������Ksh�٬b�ב�<�

�Q�5��
Y���}$��D�w��AxJ���ӕ�ѵ�P�b�%Ϲ�5�?��붒9_��L��N�7v%6��y���P��^�b2�9����-����-��޽aFC,�nXT4��/����ӛ��^��zƌ)�/f�џ���j>`Cg]Dw��x!i��+Z!��DJ�A��Z����MgqCP)�|���݃��b��t�}2�8�D��ȡ_�H�\?2����Z�9 b��x����UE�������ꇶʐ�@�6�e'N���~�O��o5������.���(�VA'�@�Fi��h���.���l�eR�9�V�H���d�j�镐Q#�s����s�R�秌ף{���	a��+��D��cV*��q��(b1�R4��Us:�wT�Ʀ�v
lh�dN�l<M���C���|Tڲ��+�!�(�����y,�Ρ��i4�&7�M-�߰��
^����PO�,��k6U�D�gC��;�̦:��u0����wQ�!������L�8���&LK6!x�i��v���!pZ��ƨ�(-k�Ǝg=��Z
W��]C�m�H*}�7�[�M��{�5��:}�����
_o�����Ę~8f�V��ߺ�n��t;���(D���TDʅ3.X�q�`U5z7���i����q4q�&��z�g��:�l�L����
�'9���0�&jРB�	*T���_��c�[�"�X�3ԦX�=���!�%ؓ�H�F�EQЄ� iHI��g4.����b�ީ��\r�8���Ċ��v�WŰ�O��ś�G�F�Dq���J&�!+��`�.��!Ö^Ta6bD){��3�	�Y�w�7����KC�|�ٙ���"'����s�s��i8ZG���!v�(f,�cЀ�}d�"j,�L�Z�:n��oG?
�>�MT/���I��!	tu4u�x�	@L�Z!�0�����2+�[��B�[�a��_����73�3ӫ�?D�5�؇F��wE->mH"6�ѹ�jR3 �R��O�_G�"�ZSH"B��X��{݄=H����J,��L�+��������׿@�p^ω?׋@\.��vff�/fa�9���]��+���Kt����.�q���;]�c��m���[��~V鋺1�#��@�I�q���S��ג�^h�f!΄�^��p�^-v���_�v_끾5@�N�\��[C8<��t:?*��09Q��Z}¾�A�7��čWv��x�f6X�J�/f{a:X*}F��-����J%���'%��(<���8���g�n�~�����0�O)	}O��)�����F��u#ˡCl`W��{�E�<�Z�����[�Z�u7�@,y<ӣT��J�#���jjLN&!N!l����n����^�}�P�"~�l�6G�įiG�$�����7�V(�t�H�BbA�M��D�b6���B��ߪ*{�jֳ&����\�+^G��̝v�O�G�H��ص��&�~�\8�5^k>2ιo���8U�8��\cq�9��3��1>��{sߍ�r�x"=k��ƪ9�U+�(\�%C�9��Ie�Kt�?f��v��{U�(�:�4Va�#���L(�a����F,�-������,ݒK�
}�7F��e���4-
�~��F�赿~��!��@x��(��ee+����im�kՀڥ��J`�������>�sI�.K��<�Bb�W��?�3�'�a�~��A�%�+S>cz���]��`KƇzE���eX�$8�q�e��
�zJO��3��-�!"@:$>:�[%:��ԕ�{M�k�bl��=00["0.����l��S65_�E裡���Q,��#���{��~۟���S��_��n��_�h&7M�� �05@��	`�622*2�e�M���e�OR@?�8�1��0
��ԍ�T��z��:I�����柶z�8^
G��\;���a�?���^tWaF���2�
�$/��,	&����t*7�SIh1��R�u4{9���0a,���˅�(�N�}`*���b����et[���s=����
�o����"Ɯ�{M�#1�0��L#��07��
w��0�0�
�VcJ�u����ytK�D�q�!~0��'�c��&�}@5�	��})g}�H'�3�@�!�`3�k9���0��4����j&�@��R�@�"�A�`�~H�e��:�4^G?�LvxڟL`l��Թ�x3IϣDD�س�p<�]�A��04�뽩��������naP3Xڨ�&�X�S��d��Z=������P�
(Q�Ó#��N��'ɐue��քT5�/�ץ �Ɏ	&���z��ej�3�$]�k0 n���y6�Q%���l5\?k��S�2���=a�����~k'E�������C�U��툗��Z��h{��\p���8
q�Y�A&�W���}^TV�<���f:��/G4��l�c-:f�����$+'�wG�"̽�
�(�Pl��dJ�� bs!���f#����K	ݯ��H��ν"�8K��
MH��|��M�l�8��%���[��H�ĸ�W�O�cIү�{يƻ�P�0J��A���j�H-5o1��6=�8a��	z��m�+Uw��-H�V��#�������n��+Thʿt¡�SO��N�aAD��[SQs!-��K��ҵ�N���r__��l_���"��N�=�j5tCB��u�J��@h��E�L.U��H�>�EtD�}�4���4Ѕ,s��+���(z)i@�S���i�p��=Wㅳ;<?N�
|:eB*hv�BRQ�g�+�Be���ã 6��*h�BZ��Hs�X��������p� �	݇6��?U���Ile�;��%F����W����
�%e �6_4��{�\_�%]^��]�R��3"�"*����\9&�|��q��y�
]�Z�.Ӄ�1ݰ�;߇c�4���xhX¬
.X�02ݙSy߼����HK!�Ó׌m=;c!kP�^Q&��E�"SU�H{vQ��iK�8[��iJ���1�EA�]��k��
~Z�AB���i٪<�*rG�~o�s�bI�G�y���O��[1AB�YO���jW�~;b�ڴCU�K�x
�?�V�r]��0�͞�W���`���7�($֊
'��oAѦ1�>H^jRP3)���:q���J|ju]o���$���~2P1}�1ۢ�j�l��Mf냯
�G�����jL�r�13D��6�(�n�qx��q�6��3��P���w��u����Hm��`P]m؟�6��45��(�ⷊ�}�,�
��?&U>sH[�XU%jk�m%�t���/EW�Z��h_h�x��p���,Y�ԡc�QRVN{
�G��%�4�tl���»4`s�+��V4��[���� )���Q=������ts���8��"c��N�\=�&BIu
�磧���E���A��'џ\�����g�p��~����O��;a���{|q�~{T�.Q//t�}��<�#��[	'�ŭ��
�"�Zz��0��+�ť�#qO�u��|�f���z��fC���Z�qZ�c��O�%��6�����!JdI֒����� �Q��l˅[�8���V�Gh����v�k{n�/RQ�.���N�7��y>�
��4+��*fb�ܩ��*�!w�]�ǝ�1���J�Z�Cǒ`��Va��RڅZ9�5:��<�ϒ[b�<{�K:��]�(9JlkrǰZ�Y
S��:�b��$B���Qj�b��H7�]��(�&����5�v|{�hq=�qn�B�=�U���
�4�1i%�9�Fy�)PJ�$,A]`��ɴ�~W#hmE�%L��=�p��e��^	�0}��j�"s5RNB�(��,J��-u�vMƎ3�̡�	?`�<5����r��0cYuJy�b�F���\EN$U2?B�T
d�HdXh6ݜ�~��I��$��y?��!4:�C����F햮��N����"�\�7�TNe5�<�"8o��A)+kB� �s�-�mm�r��e�:9l�����Uo�a����"T�C����L%I�D��<���EKP�~(�2N�5DN�y�C/k8Ix���M{y�p�ȁ����$����XUED��/�9+r��_���Z��\��8�s(���<��W���`�Xֽ���3�-�d'�����+O���� %]7�03��9�[���:%)ټH��S���O�K�����G�(�XP?Ue=>���a�8l�sȾ�q�CҺ�0y�!�9<���"`������m��n�+T�>��"�5��FskBD����v�;TJ$�Z������Ho-��po���Q̷^�-�
��fe���R�Ѻ����Gp�����怐�ĉ��;�����`�uJg�c��:i(‚�L$���k�٧�j�!!4�kכ-b���l+�A�
-oF�?-����E�y��f���!<���Eš� ��K%F�"��:�t��]p�䢔�ޔE���~Sbb��ʧ�F��c r0^y��_%_B+Y
�ǽ��D
?͒�ư�X߆d��ӵ�h?8+������k,����墽\͆l:��[g�;o�l"�;l�(`��Wŷfs\XkVa�%�g��n���s�C:εɿ�-�(D$]6��A9EH�%�ұ55<?�Dδ�~es�\��s3.f-��7)K���T�ؒ�/_m�P7S�\ʰ��"t��YJt1��'#m/XЖ��4Q��9$�������6(���հP�0�6�J#�E�'q)9��~#�XwR.V�|P2Z�t��a`C�#>��Qe��)i�K�^#x.G>,v��Y�^i�%t�q�S�
Y��p�8��i3Z�/g���\����ڲ���to/��O�&^�|i��rUW������	0����E�er�f��U	��.!M��6>�,p=B��Z??WUa���aNnh3l��^�2��:�k7�@{�+	wo����KP�&X��A�aD��ǭʎS�-�G�=��z��#**^��S���6<�؈G۴y�l9b�^'3�V�[x�b�o���%
�
�a�'1�B����{?-[V�o��C���x�u�$���8Q?a�}}`o���l����U����Q�nv#�dP�<���2��t�K>=�WTxXVlȊJ������c�B�8'r#���hu����Pp��SZ���"n�r�L]�|*����t<FwFW�M�V�x�6��A)�˖�զ���[A��q+��}�	�RD���Z�_#�X�ǚ���ǁ������L��55Cm�GaW�˞��"@|��~�@�`�����=��pέ�f��2�8���Ct�,�ixU_�e&J��'P��q�Q��.�qJ|���E���4`���lb��y�6�?���Q������:h/���ζ
��l)������Ȝ�n��$|��O�Ͻ���o0aЛ�H3.z���]��dQ�x��sΜ����@n����%(<*+�5Yq�"��^;��";���@�ӌ[Z��~wAn�i���l�pb}��5�V'��:alB]�s�*>%~�Ż�W���!�8�~�槦}N��S^��
�͋jZ�\M@.*i��J�4�T<��_�]��3��fP&���ܱ@�����X��H9	E,e���0w�Ȅ @��u
��F�Q��U+	|M��_�҄�Efh�)j��V�2Q��s]��\��y�ԐJ��I�^���ԓ�97�h%[R�!�y��M�I�N�7f�x�(��.�ĵf��o
÷��fd.=����P22�h��K�Vԕ��zL�O�%&���(�y^�������DcP+0a�ș��wٛ��|�\��:\4E�(Oux,�B�[������˕x�~����eq6���ׯǙ8�7�h浱��0�醈�a
��V+�X�
�a�%�-tK�1�9�M�H^DU2�D;��
p�a�a�ď�Pwn��U89D�=8*)k2i?7�/�t؞lG,��]�1L.u��f��c6�r�:b�ցpB�	LO����	N�&�O�b;��|��l���Qp����*��>��@;��O/���O�{�(���_Z��ncX*5�߳�\�2��vT�k��i0TC��y<�|!Q�*rł$R��/��ŀ���N��2H@9u4�W�����$1��̗݌�G�=��J$�SGYH��Nc��&fI�������u�c謘�>O8��<�.��2�E�mv.R'�튠��BPô��h�X��9a�!�uD�p��
*�P�w�z��{��.CتI<��	bw�l��{�Gő�^�����*|�x�Q'臕�~�l�u/��rwC���_��J��CNH��7d�)�]~�Z�6E�I��_�[E�A��5>�Rf�_*�?��_�Xn	���N#�����A�2��ު������p���qJ��.�~XgP����ʯ0/W�G�g����?��'k��5�����n6�x�
�,&%��d��!ۘ�sX��+�8������I��"�-�^��d�M<׽M'Q<n]�C��0^C�F��ׁoD�^���yά��q	�'�1�_�߱�=��e��ob�~e��b\d�h��`�{>,~rW%�+O|ib$#�!Z듲��Z]Ҝwn1}��C+��A)�'�����#�&u��~&�� ��4�%<���UAS�*���t<8V|�T~�KiP	�S��&���s-�@D��Ɠ@Do��W$�~0\<j{�˰�E�HP^t�`�
.�=(���;��y�,<wgO�B����A�|D*W��1|@Д�)3�Q�`�P�&x�k�
i�'�v������:�fE��l1��p�J�7IJ)&{�2)�
	����T2᫺���s��ÇU�%D���xZx^I�8�i�์|��a���_	��o<���Wq:=�gM�A�W�<�Y�}m&�а�>$���Maw�	R���Q?�e�����6+s{�S���?�N:��X=���g�rNV6c���N�+�'>Lu\'�8�XKD�{o��_��_m�;�[�g�I]�?���h	{�����w9��r�:v��QNXQ&!�=������n�&('q'�e�"�|Ԋx�+�ݣ1�g��n[P�)����F^�1�
���Ȧk��X,�ep�Hٽ�	I�ħ
����~.�[Z_[�X����&�繚�I��ɽ�5/a�9v��Z~���ER)���n��X&��w8�Az���]Ȗ� �*Ҧ^�lӁ��&��0:�b9
^��CG%�V+��Z]+�*ٯ�d���K��<��wN)�'�N3��[8���N��*��~�3~�F`���*_U���h���–0==E��:��-<�Y����
��
B�/��dQ%\�ѥ�s!9U-�����VpT�YNo��$�����O:,K�-	U�a��:԰�8�!�K7���=m��%*o���o#ư�mA�
�d��S��,Li���I�s�����1g�O
������h]˪�{�-���|�21yLY��JSa;vuQ���C>��NxF��~]�?{�	[�v�^{��ɓ
۬0�ҿ��b�J�[r�a�C^LGt����'���ʔI:̺�lW�tHힽ1�љS����t��IY|��	Z|��������Q�QY��1�7��H	��M3*�3�X�B� ��#�##u�T���jg�N�5�:N���;��CH����b�+n"*v�bI0O��<�j=�0��b�>6�qm����
��U,x�k��P+2{���L��g��`���0)��I�<���L��翺���}e�3�*C������ƒ����?�q����5��_⍫�u�B�����f��)�	����
�>� *�U�ϛ��޺��-;�6,cB�|�e=6�(�Z��L�D3ҝg�t6ܱ��aUx��,:���2� �(W��N;��_1�vH�z�Lx�^J� ��cfn��	�����I
4���(�)½��8���EЬ8�
�vd'�
����5�+Էr�֌ɧ�؊=?V+6� �#�@����Y�T�Y��گ95�K�S�ji�a�
�R�M�!Q���pEi3҈�-�.���+�AԿN�JұP�iO/J��wY�L�B6����@��t��CքnGNQU��v��,L��h��CNmۧKCL��E5"���}Đ]��.�5��R�
j���rK'��]����D!ʟxg���=���|c���u��g�\`��=!��c�"���&"p9��dY���D���+!<�B|w�	-�Ĉ���iK�=�|�Fmel'�X�Q+�P@d�<Zp9?©DArR�ݜ����B\eU!�T��Y_f�OQ�@�@��T
&�e&���f�p
�vgL]@�3�-+����.#�������9�'j�����L�>�ϜlV�0&��mc6��v���
��ā/9�DFH��&:�8��t�k�)J��LMe����b�S�.��N�c�;���S\�EZ�k�Ki��<�r�Y��P��|{Z�6������Iy��d�BԲ^�N
[R��9�
jH>�-i��x�ȉ�Hu5�:%���D$�Ĝh�!�,	������S�r�|��,�t�u<����d�",��h��ii�
��Ŷ�q��l�1m`��jҴ�0nY[,��3���@�"�4QX
so��joa*v�xZ}^�d�U��,=�=n�Ns½�K;q;.r:��XF3�B����Qa|oN�Xmy���Ө4�T/���Kb�z��Dc�/��2�t�/�g��@�E�/ᄂ����񝷄�<m�y�T���eև�j�Is‚�:mE�r���RN�b-�^�ӓ��?m���],Jx���JޛA�Qu�2$��6��f�1@*p�X�)4l�-�>��(̽�;}��?U�'^�x�j����&�/B���&�45k(7�
�:�~���{k�����w�gw:�@�u��kL�s��4��e��*����9U}3�b��zĄ���
L�R���8��,<_ׯ�ABg�"M闭,���������)�(�W���
��Y�+��_���ڎQ�vRǖ��$�Չ ���%��
.?l���sBu�;���|#/�މ�gbuDXW@=�^���3�
��K�?i�[,��P;��M�
��	�kGFH��}���g�YTT���S!t�羪��f��}3��|�fr��Ւ��N�=����jd�G�S�Z�P��g�r���ͤ�P�9�;Ջ�~Q0���*��I���r����zU���=��:x��.��:g�Ŷt���
㦝�p��TJڅ�v�̡��,���c�d-B�ΈA��ݎ���k>�|�4�$9��������<�_X�e�^�~�gS3jT�Oe=Fy���L��Y]�����#S��;Y��@3lv�Q�b�V����N���I	��qZB�,Gߒ�O�<��ፔr��Q��<L�c!zG!C&`��
5v��+?�D��?�'łF3/]�h�fju�6�Վ�y���,z�L�8���Ș}M���5���HW�bj���M��RX7{dC�y���ʙ��.�8��a��
�V��膰f�(޷c�+�7�Aro�K�)��
=�ِU�^�=?�'�3(?�+���B���i�>�L\�f��0�8Ld��D��ݨ_8O�2!U��>�T��s��nAی�:y��=����&�R��q�}�F��;{��+[�*�Mvd�Y�?�#��;���>��:�J�p}BM��,;;
5��������hu�B�=8�����k�<3g�b�Z���e|�6`=x[�"#��΁�#�G�FL��%KMA�jju�Dߐ�\P�u2聟r�����A�0�D'�\���B�<�=n�5�t]��!�
�}k>�	J}x �r�Ux�/ V�:�~G������;$�<��⹣�Կ������+��{�;|/��A��e"��D��\a J��)�:��3h>����yP9l"i2����G�Κ��°��2�GO��$���}6q�.����7�JQ�-~�YZT<i�]t�Z:�\��a�3�z�8Z��O�}�Yj���G@�5ݼUt��ԏ��q�ڂ9l._��8���d�&9
�cH� �"m2K�%.�����.e1�B)Nv\9B�Ba���ED%��$R��i	�`���^�O�-��Ou,'/7��Ȁ:����r��e�k�UCru� ���_����u�g��k^����n?�V++�b�h�q�	0�,�^-�#�#~�eF�q�#]���i���bL��±8�>wx�C���!>N��rp�TIM	R�7��Q9�h�R��Ja�66�}�pf����O���mXw�q�+:%Psv�`4A�)��%�u�DfaEn!u�hZ6*#kf��2�F]�����?��Ä2_�V����`D0R��է@|��˝��C`-wX�=vp��#�'�J�
�-�	��*��oQ��8�y��8F���Ӽ�l
�o��0�ޢ!�40fk��E��9D�u�#`������t(s�<�#�40}�3�(�;�+���-#ꠂ�Lێ�M��I�h�"K�N������7�&],W˔�(s�7�c(�6v�0h����4.���Y��������t�n��W�)���D=�����H��V�`�#%:�!_��5):�CK1�d'T�Щ�vI"������"�$�'@��L㷁��q��
c�M���0�[��r{�w)E]��E-JG|��`���:�x�᷁@�bi���%f�`vj� ԘP���.��#�ͦ��	�݄���nu1C+��P����Qј�!����^�Y�K�{˖�Cr�oş~=��S��p|v/��h_���V�64��қ�)�TDZB���;t�)�:
�$���4��G&l]��.V��{��$��^��4|�_X}g3M�uY�@ew5�w?�y�N�nsyڢ�PGk6M'X]��3�t���?��	w^1}�����'h�}0b�iS�U���~� M�;gbi�Jf�;��
?
����4L����U��Y�\@��II���߀A9�����
���g�����y�9�]����Qx�y:%�c���o�"��}���'�q�xyy�a�!�\�N��+x�Tr��,;��RBO�6��^[�4����@����[����o'�5qɤ�ɣ)W�;��z�KV�R��1�ߣ����\L��m#��Ƨ� �c��iv���6޴�2���3.�V��p��V"MTL>��{hE���΂\��	�g#}9?�q�� 3�֜o�^{��6}��8�4M6*�k�p'9���ői�ө����RFjX�T8��a�C��&s:78�<�
�.��V��6B-B�����Aw��aRe��th@�P��~���	JYF�s}�@��xu��T׻JON4��N���SD�rS�<���f�CEf���2,&
����)��J�dꪺT%Μ�_�H$'gV�{X$��Y�<`���"�=��)-K)~̬F��/�o*��T$�՗�R+
��Q"���_<�T�(�J_��\�t���Q��SF���uy"B��#k�i'�μDD��l��
T#_��}�bh���m�̆ga�����,��z���9�ɬ�FU��RY7�[���3�^6
�@~e7�X��eJ�"��hG\�J��`��G��Q.�W���O��r
j��~M�߯*$����F�6���AX����K��B�\04)�@���fM����	��.�_�	㈜(N_��}��/�P7�+�_����Nj���É@J�>+[f�vB��3'�"�E��ᅤ���Ƅ,�@HÏ����yxyX$��“�0��%�#�/.�0�v%�k�/���(�e{kq�ͯ`k��b/�lC �ŋ#�"!q4VN���N
<)��¬���Q� '��*�܏Q���-����h��$�E��d�3.^�����*��N�P����6��f�6�Ŭ�	�Ϊ�"��w�8>�yyP�v�@�Ԅ	~���k���,A��Tذ5Ð<�<�k%
C�_�;SĤ�ٕ�8�P�<�����$\|�W2�]��҉O�w(��<���Â?�qxߝ�x&5���:?��J�Y/��ٱS"���B!��m6��@xǜa��21ۗ"_�$=�r�z,^1�Xi�'�74,�%}�r�w`so�z��jbx��,|���G‡�DVh
J^�Bdȋ�LJ�u��ԛ�`��p_`�E�"ec�%)���T�9�
� �%=I�{ܶ���L�<��%�e2��w1��B�<��M���}:��Q�!�Wä��ء�l����#�9�{��V��K��i��|�V���V�j��P=<��/7��o�۳j��<��I_�X�d��\4䷴෽ ]�g�-H�V�	N~x�(z=Bݾ��1
6YVչ��Q���pH��G?
#��V�����t��GBC��yߠ���y^ى�X)2pF�T=�^v��z�щ��;��Xoչp/T�!U���F�x��[*�J����&o�P�S�v�!�~�s#��]
6�?Ag=��J=[>��Ͽ߳I���{�6֬�RZ��g����<N�8�}����o��*�K�B/��{�߿����X�_�}}̳�\����������I���o��j�vt_�񃫪�\��6��a�o��y�}�A�xX,�����	�UH?yq��濲X�O����k��Ji�,��>�j�
�	�X-D�{�5'VV�i�8���.��S��{�~'�����xL&��^���4����${�f� �����������	A�1����'_�z�+7�n��p�|T�;�2�B���ʪl���]md��:h�M�!�2F`�
��(~��ȉ���/ՃԴfCC�=rI�����(^|�0�{S���0������n�5H(9�l�Ѡ���D;����7a��f����>��0��5_�CG��������ꏒ��7aٯ
?V�f�G���V��� ���\�v�Q�G�z��i�+�锨A��G~�9`�C���W���lA@~L
ϣ�ֆ`�B���w� 7L�܏\�ec�\��J)��bE���KX~��$E����|�N-)���&בmK���ŷ���7h0���H�4�j�`&�I%-O�0�弊a��>�7�R�+�F�X(����t̾'�߸��L^؄q�
K�+w`�9��4
H(q���sVt&O�"�o��Heh�����וx�yl4�H���g�?O~H���s�J�	��s�v;����E���,�#PrK)N�j�rq�q��jk�+P/�D�դ��'i,�j1Se{uf�{J������v���ew@�,91_[�ɒ�C���z��8w�^�|��[%J�㪬��_�_��`����@.�"^%�s��ʋJ�����&C9ew��y����7d��	��v%��z��G���n��w� V��#br�l���T���Z6P�O������X:���Ða�/^�2=m�At� ]�y�2$Z�j�P�TI
�^��D�M�Y�(��z:��f�5�c�ƥ}ޏ
5c�ƺ���mì�к�e�1����'}�-��Q���`�|}trhW0��q9�D�"˓���fuM�>�k��Y��Ay��Ŕ�y:'5��Y�i8=�Fq�h�k��8|O
����S��Z��Nm߃�o$��j*��P�h�c�ܰ��� z:�*,�-�cc.�X�qJa7��E�v��N,�<�#��=*(F�9}���+��W�:��F�d1������4��jL�e��z_����f86YՉ�.�|�{]d�Ӽ��GQ&,]_W��|��ō���Ze���k���X��2*��R�Ru����o�z�.��.�C�/�P�f�e�O5�D�,��bL���L`�ZRð�{��C��0���ߪ࿥�MH��U�栍��\���n�L^iG��ض��M���Z�g�Iò�(������2Ć���鷞���Wܴ��8(���R%`Ize}%����2�t�{��kf�f/y�l�T`�EX��V��KƟ���J��W?��/k��W��O���5�cI}}�]D/u��g����]�,�fM���L�1㤯%f�tX����)���N�1�ޜ-PŠ�d;��$�^MH�p9h]�m0d���e'�p�.R86vRШ��G;w�᭓��_.%���-v���@c�s�D�ݻ��"u���V�	@
�����$a�{�H:b)LGl�N���(�/o��_��7���$��a�ε�u7��&U�\���FU��a��q"$��^c�J���"��{ь���y
>�Pj�e���ii���t����A���W,Iȕ#�x�5���W�g-٩�ٶ��R��s
L��(���"j}Wy�r�_W��U��=|��!l̜����6���&Vl� ���"��6(�MZ�R"92W�S��8���G����Lm��G�#��Aܱ+��:�fE���E	�:����~�'}
��fp:��A](�(��fr٘��8�"���y� ��@��*X������ٮ�e2�4M�&k��N�d�D�X�E�W�\�\�kv���_�����p"c	T�*����E1����$G���ʛ���jK;�L&xDZ6G�G6�H:6 �����e�pI�b
��)f#��{��B�e�}�8�Q)��5���@Xz�Z�z���|���ҬT��K��-5{#�f*�lrE�^�O-�`K���g�x~U,�`)3%x��c���D��tK=Mw�)��l�i�E+D�&7V�<��]1�З�F�pZ�^�Y��F����[
���P}c�����k�_��L\���
�@��ҝה)�j�#8�9�7��R�	<�Ѧ�~4l��}[�G�}fn@oW�f�n<�R��k^��0���u�����L��">搅��C�]�u��/^�J�H��3�e�����I/��;`��i�7���:���lS�G�!�ܪ�Կ�܂ew��|�^nC�ҬD�_���,�/�}4%�^y�WV���Jd�6=.{ʡ	iG�<��1�p�k�P�����n��ow�~~?�0�g�襖��^�{Y�uׅ�EU�t���J��~egy�֊Yh<��՛��n��_~M�i����G��t��m��0<np�V+t�0-"�el�
p��r�'�k��Ax�z�4� ˼�V4{�14�-ݞ�_����?!-���r�կ�K�ʱ�ː3{ڸ��yٸ�L����t�Jt�u�������$�l�o��$�Y��~�Ħ�	fb��*���7��&����V���뵏��u�=�=�?bݢ���^L�����22��5X��������r�H|����	_V��
#]�H�����D\��.��/�C�c��r����$�Y4�]���:�	���}u�T�cH�w�_��gxݯ���ʴ-�ѷ�E�����V�?��G�`�����=�yD��~��>��m���g<f%NO�����Ǻ�/vދ��%�>���9H՗j�͡��{Z
49�Aj��嶊x�RN�]*=���]�gEG�z��-X�H \�Fy�mn��m�翔�O�:�g�qB��u��E��{}F���;
���20-�;}��\��-7U}ٙ�b̐l���SP��K�誡�u_<�8K�
QC�v�+77�C��-��F�v4<Zu��rL�L��{Yv*�{PyD��}���5��2w��߰M���r;Qw�R}���m��C���^���^�<c
��^5�c���L��N����B�"�O��#�#���2�Y��jG�>6ڛ�ꨭ0V2��I��8.+���iF�o���+�Q��n��un{���c�!�#~�;�e?L���&�'�^��o�ɐz_S���3 �Sm�oF�uq۸$�'��ܘ{�e,�i��H.2�t,�im���rL,H�:�FhQ���R�~�Ok�o&N��]V�Xf>�
'c}3���3����ͣ������4��L��]�q�Xo�i	k�<O>1��(.��w�y�<�9��,��'eܛ��y��⸢2n���:�	��+z�
�x�V��i�Qu†�IE5�Q�o�K�kN�9�8����yA;E�����.�
���r�Y�](�ʌ�ԥ����"9�]�U9�l׺O���Έ���<q���2Vmz��=���$V�Ovb�{(,-F;��$�T��������8v:;���na�(h�<k$js�_��We0����p�8�x6��F�-tw�$qJ��U5�=09uzZ�D��!������+����Jde��Q��©n �gໞ`mK��[e���B�4��@������}kઅF����'��v�s�E'�Ì��֚W��ٰӠ�t6�T�
G^PY�^��]���ZL�NX>Rܢq�����H�8�v�G�@�J��6F�%���
Yg��'�!g[V�Uk��ew�P��ɆN�/6���!�m��9�-j�c�*�t��*�[jv
%���]J�\s����u��W�wӟ—���wt��<t\��pěԬ]w<j�g�u�7�H�:f O���A����^���
/�Z�D�O�f��e��s��obC�bW[
���\{U��h�B!m�&�`�w���}���w?�	�B�'0b��J�L�dwdf�e�JRuW�h��i�K<R�S1�չ��^��Bv�sK7��C�5�����x�~Z�԰�����=h(�FЌ	tߑj����Q$��4�8�Ea��>,�V/<���w�yl���dY��`c�՞��ŧ����Ѧ�C���\�_�Ε�^�Y*G1��IM9�UeѬ�&r��3|�_��p�Q)�!��
�wcϪ��
�dQ��!�8=�_U1�4�Ms�����B���j<�猻N�z����H�>8
-[)�`S��5S��������D�|�A-P3�s�X�v4?ϧ��<|�(�U*9pZ�)�_����Dg�%Y]Y���B����gL��'��ji���	09|Қ:rj�����*����j�DؤA��c����T��ձ�xL[�@��W`I�A
B�.�>ܲբ9�F���*�1f3?����|���~�hO��C�_g�m��}�3JmQ@iW]SͩE��=0p����'%ҳ��f��W��F�<,�{�-i		>'?H�5�^
�8�S:�e��'�%6]��A�|m��W��@`���$3�:%Jn�Sek�Isi[S���W��UjD�o�v�?��=i�n���z�6]�qм�.|��S,�6�]6z]Rso�B�m��Y9{(-��%]��io�0����ɫ#�n�u�+��s��&+y/�4�Ώҽ����̰�S{d��e"�w��%j'-W}���B�E�7��n1L����4%��$r��aw�c�	b2�hT��]�O�?�U:��a�Ҕ�"�C����]C�*��T#�vg�V�;2$��PBG�S�z,���R��۰�X���ѕ��x�z?׉�k:γ����5���E��8�H�A�B>����N�ۓ���rZ��<<x+��/�_����:v� ��# �g6.*n=�D%��V`�x�Ymi��[4�W��m_�ܔ��_ո��m�w�T��� C�	9�ބX]<��}1�C�d����Οo��	���;	M؞�G���j�K���)�J�9�p CC��P��L��:U����9���	�X(�m.x���`��#ʻ��T�g��3M��k�h���p� ��L��lsq��!�wd�6TF�����Hؤ�m9����6�Zv�Mp��Q�E4���u�$��F���w{Z���=!��$�Yyy�Y�\��G>���u��{�x��ﬔhf����!A�Sl_q��d���L��-���}�=������V�^ڡa\8
�D�n���vaV*��U���u��hi�.��7��^67�-k��:ը����y�O���B����cg�s9Z-?ij+��MW+�a�&��)��-�O����L�f���L�_���Y��{u�:1^����d]�1,}�˽�FX`h�q�z$�ޯgV�_)S����XIt���è#���U��=CuP�#K�SG���>xX��NY����6Д)"T�11�\��T�=�QE��uk����ػ$5E*���kP��ϟY�Ǹ�B���|n�E�Ig!�I*�z���ۡ`/$`(�ȠHU�܇m���}�"�(�� ��Og�o2<�2o[���#�
�=q����ʩ%"ڐU�n{Υ\�}MW�5ـ~�Y�N�vo��}����
fȲ "����m�������Xr�;!�S�߱&���ٞ�pevY+f?r`&��+Pk/�v�x� C �͂��*N�[�3P� CҀ��)���7nrX�m��J0�"$MS�RԀ
�����bu�n�8��4����1UMl��"��؟v�1�7�gN_}g,�(�������.�@{�h�,&]� j��3�讀���E�l�|�L��ɣO�	���o^��F���G0�k�y%�)���84��:�i�Y�rQK�Y����=�7�[�%��GrvJ���'l��\��}KR��j�Z��,�z£�F!y�ѧ��_�u�i��E	�SX��.��c���YvB	��m��m{c�V�W����B%"$K��KV�G�dQ�V�,��z\zu��T�bYĖʈ(.�L�{qЯ�1��\+��3�^b�xՑ�!�d���􇜾�#'����ur>�#��"�&����X�rG�H���nb�!"�J���`�Ǜ��#H�\o���
�U7��y��*d�Y�f���B5�����|~��g\]MӬG�_���17+�O�sW&obȁ�uS�ªP�r�xbc�뉢W}��yC
�w�既�H�,�ub�VO�����L��P���
z�iBmƷ�6e�C/K
hB��e�e~���_�bh�[_�K'�U��]���;����90�h�II^�Hw�	������p�AA�6�׹).�0J��sjfZ
�!.�A�*A<Zg�kg�m�S�`��k��4��*1�a��}���c϶�`�"1���A��\�{�4�QCh
�#F����-�S=��Z�������-�]�
�b֔�,�a���s��ck�6]G��fd�O���̤a��"od�����p�Վ8�L�.���4_���D�q0���2�K�UM�=E�u�Q�-�dt4��F���9���������un�@���M����cnc3)�6f�_~�[[Of�M�|Ӷ���<�~`���
G��&VWݨ����x<A�}�Q��,���4 w��H��&N��c�Lߵ��T��~��V�
g���3��G֌lGA��J��o:�{�'���j|�$6�?V�{)0�y�21�n��Q�����e:c��pɻzH)�)͙KV�����W�E���E�s�
"e$�9 �6CY�e,E�i���	q��J�+�A����	�J1������H#���
W�-*�A;ąi[���@8瀓@r]���ѷ�m�p[蔑@���Ř+�ҷ
_�v�k��~��X��� c���M��j�B�޿I������F��]�I�H�sf|�W�X$���b��FAC�_}�F$�E��$O�3��Қ��d�E��_��_?F��Kw)����n�=ա��3[��A����~�C7�h���\9�MI���qKfe��1�@���'R�kV�}�'���竘�xo�o��?�x�0���G��&^��_>;�5��uI��Wx���;rq���^ZG꥓._�`�=�@��T��(/0���AI�q�|��������9bsD�����2G��L�h���k�Nz�z�rD'�Ն�,��j�m��؀�V'2%���؈g�J���Їo�)��b+�r]�2
�)H�NGk@'V��˺L�-�,�Z���U�?yl�f%���BڝC���c�6]�?�\�L���u
n�b�*�Ôw{o��
��L���	�Q���-�Jn:U���9U�z��v�n�bB�������jL?�~l�Uێ,T�~f��;�̓��r���\jh���0�H��'�#��꺰��edP˝U����[]
���F��Y�S�0��^i#	����rqw��)1�a�ɽ�F�o;y��"�q�x�tļ�>i#	��-) �rn$�U�/!��;��_�����*�N���H��w��q0)�|m
���о�H;,&uq���V�W�ANy�LAvF
�-�n4���NQ;�{v��.~z��R��k��?�P�,rh��[z����I�5t�hTrzw߆�ъ �����f��u��1`�`v�;�D�Ea�M2�ˍ��%���'���d��7��R�4����A�T�Q�
�
ohoho�'�2�ՍJb�0��7by��T��b* }�/�/��]jq�D&��t�J����0��/w��[p�}A%Y�����^���=uT���T�/_�F!ez�8Y��+N��
�)#%��ۅ�4�G��"��ĄlQ�s��²ޫ����j<��#=x���Ț0�{8��XM���
B cm���_�B>HC��n�9��H��`�1�<��/�Ę��QO�Ai������������t�u�+�w6��t8��n	�%�#ܻ�u,��JE�"N��	6������(�HCaR-͉��_��6K�jt�<�!,�:�]��T�iOs��!^%vq�?�=Vf
'	1�Y����'I�J��K�ܬ�rq�ؼ��z^ ���r�=�B&m�5��s�9FI&l�h2�\�I#���YP_o�e�{8�����Ա���]���������V�v1�o�=[�	x"��t�[�ժ���W�m3�ؓ�?
_�����%����@�O贅S}�)�m�L��R��+5��k|��5��0U��SYp���)D��f.(\�S��I`R	TC��j'gS�Br[�t��۰��q�t���Q�(�Ɲ�
��
�����WB�A���-ZX�߈5���)���lS�Ub�� :�I���S	���o���6�WV�-7 �K��~��E�}k-�4%�:x��mҨ�Egv5��Y4�:�1�c�5pU���6u�����H��OJ�����MY�e�ԛ-	t?��y
��׽b~�u�>.ʞ�e5�F�Cտ����q1T����]f�=���K�.���_~[B~�#í���pǀ��ەzĠ�a��?�'�$sآ�&���>�&���HD�	O�J僙C5Vw�a�v�ʝ�%�5F7�x]��r�\V�;����$i&�Q��w�|��2oc����d�@,iǠ�����BH@'R�{�|C쿾鯶����{,�JSs�J0V�M�T�C��2]���֕�U۽Y5Z�A[֖�-)=5t�>���8C�V�D$��ž०��ͯ?����w��1�=.܁4!s&LzC�z�9-����:R��~����l�1��
�cK��J�/��т��CCA
�;�GuT�P-���q��/��|��<�Qr�z��R�Q�`��{��ݖ��Ϸ�[��**�Q�,~a��/T-�LUt�iN�H�_Q�xO-:+�*��$L�	�]`����Ӕ
�N���{l�>��P�ğJ:��Pn�lŽ��*s�C�ܛ���!u��j7M��_��n�L��JwM$�,Xğ���<��Q�U;4LH�'�M�fi�>��B�^V���:Bv��9�q�\�BswP�ԅ�Lk
�a!��T��؎�Rkǧ��k��^?ﳻվ�]�A�2��=	kG'x� ��r�K��ay��O�Ө��3��;R��d�����y�2�ػ���ޮ�8��!���H��݇%fq��y����DO��V����I����l!d7jXbB�RA؉�t��N'���p�[�k%F����=���N���J*3��:����W�S�c"Y
���C���D3�!�y��q*��]#���#�iqT���DV4w7J߀��AYN&1VS&r0p~�W����'b��(P�`r[�(�Qo�V�+�v
p`��g�aCN
�I|Sv�r=Fa0�B�N��=�|�:���!9�w|%�[�$#Ԩ�|�|��%�b��q!z���YWO�e;P'��pPN���OC�۰O���HW\�!`b�,
�D(��h�S��#�T��k�z�c�З���Kz3D��N:Ӻ��|����d����)��a����j���s;���o߈��c�;��i�[n����Y��� emW㣒>�|]���k����iޯ	-f��kt$��9�u��+��T�}axp�8��#���p�8��R̯-��؈��(I-�h
	{F��Gj��ɽ�No8�ĕ�%y;R��Gg��c��W�X4ȉz��	�2����΃�d`}?��Yʧ�0��T�8˂���7;�`��A�Bt�ɞ�]I-��`��9�;�߲	���܉�HZ����F�}(��K����
��%�Iوڀ=k�I�r�hn�:-��NuM08�Yc+C�rAVK8�uF�3n�%"x�����i�4�f3�C�O���zNo���L]�A��A{��nJ;M@���k��{F�ϬB*��,!O�ш��N�|'	\���+AP[��֕ܳ��Y�r�Uz�Ʀ�k�`�*��&��P�Y���K(�3�q�@�[3��#1G:�yd@���^��}j�g<��8��}�F��]��ψ�m��<�;쮋p_�M��b�Ƅ��I)���هHw*��,`78G�>=HD��*(H�C�A��eX�������	��N'�w�p�O
t�Cj�l6�ԮP�Jp.@�>�Z�����d�L���-����(��Se�=�~���~��u1��/�ФR`�W�Q��m��}-�؟o7d/0Q����ãb����߰���<|~-�{�,U�����e׿K�z�t����4�>K}�v��]�˒!K����W�`.R�*G͟����{������گ_401h��)O�����3N$m�W��_�3�º�c�1�W�?|A�]ͬ_�Z�C�J��,�xn�n �� "[��;vL�z�z�c\ٽv�l���Z2Jb	]��#ǁM����������pʥዷ��*BD�I��7>�(K��\�r��
o�YJK��]Q����x�S�^��q�X�u��h(�����GD�g�Q��^���„d���Qe�x�A&�mg�Y�i��[|t�D[���"�����u��b����O��p�D�~�$�Y���p
�ޅx�)6��=�s����Dl�_4ډm�Y�WU�;֨VWC��R5��E�+���6]��Oq�Pē�2tވH@+��#���o����co*2�V�%M�.8����r"�,
.C�t\0�R��=�,l���?�;�N�%Y_��֬2������TTs�$�4�=�_��i�̍�����Ph�sȌ�&ᒛ�h�����<ܔ��� ���>�G� �`�
�f#:yg�[�$3��	�m�8��/��H�K-Zu�)�=K��"������wH�Ә�0��vZ
��z�s�=�;ϩU�S���DJ?7S����3�F�j�½N#
B�N\�,��`�Sq��3�K�(9�Gy�;�	��iЊ��X����[�,?3_���7�Ҷ���-Y���ó/Ԕ���qvbwKfyȂѶa@Ź~�~�o�M�j��'�I�fH�����V����o1@d��݇<�ŕ��}`�x'�G�?�Fi'�V���Ӑ�B��d�ޙQ��b�_�Ưy��@u�$�U�3{��FX�σ� ���h|Е*��G�o1پ�>ke��?c�o1nwB�6��О挛)�XP�q��B[-���SMR~[��j�dwn�1��|-��*x�
6���n\=�Z׾�u��~\t�}2���a�I:T��J~�1"i]i<�#�a	wuA�y���M
�ͣ��J�����Om�����є�=~������[��>��(�B����9�x�ae;t!7�	N�]�ʣ�y���N�~��DU���4~�y���Z�xk��͊�n,�վ������	�j�,�]���Dꛦf�[Md�?e��Uz��=�zh��~�qkK����k6�5f1�S�t���ю��x�|�*Y���q����_�mʛ'��|��P�B�����j�CTg�
��4�2$ח�u��֞�1f���n�z.y|w�PS���D�Lje�˨l9��u��r�}��N"V��ۑ{2�;����*��4��,�
M��c!�
�ч^<ۦ�cUI����x�AI�:TJ�:Y�6��k朓�ģapy������!P{���a.Sk%窢����ɢ�X��H�}rK��U��r���(�]V��jb
���h�y���T�J
GCWV��r��ԨWI�'Gd�5�i�K;'��d����>�%��75I�X��y{w���Ak!�
���nCu�\��e�X��XD�&��tb�pwPΣjˋ�0�X�O�b7�O�~���9t[}k��O�D\^5��0��z���qI�]�����BӾ�MD��	��(�8�˾�,�~R�D�ȵ�{��JG%��"N�M.���P��.Y��heX����L&!���K�� �}K�=�d(u�=�&:�(�&��'Pzgt�؈T��y�/�e�ٱZ�O��X�K��̠���z���C�SD��ݱ@��E����o�ML�>8�u�%�T��	�2��a@�^?,>������zT(j�|UI��5�1���P_��#�@��w�z#������s}��.B�U��.b�}
ɚF�ʼn�F�U�͆���O3��Jb���V�I�?���s6���cW�Ht�%�Pp�T�J-��XA�=x�j��P��QJg���@�$�=?��bԼ�#0��a���g�;Z����),/�t�a���]��l����Vk4���v���"�T_]���p����ə3��=�u����񡿢��`ö���X>=2�s~��~��:39�rQ_t�ݾ��m�G�/}鉣�����*P�M�;ćpV��/r)�}����]kCб�F��8a�K��rMM�[Xu[G���jw2<~� ��T�O�)��,D��S���:!�cM���w���waO�h�q�ZZW�D��Uf9��@�Z�5	F���CDv�ZݍO�l��V|��Y9D��;��=�^T��=��`�I�e�M�uݵ9+��H#���C-��_�����B�ߔc���~���w�סbj1��k*�e���.|�U<�"�3���š�87�v�M�Yl������vp��dP�g����8�F���]���:;U'��D�[V2�\���g���ȢS��,;� +Z��t���}��"(��Y���}�4����
n��C���/�]͏3��u�4ڥ|�X��:A�گ�~�7{�Qlr����w)}�3��v�6g�Y�w)���r�U2؀�����Rc�*��Ġ���y�ޡzL����{J	H���3�Ś3���Ё1�i��q[M���I�b�y�_���6xT�tA�޶p(�Bi����c���U����9.�T��6��?�]H����I�eI:��)�����PPK˺	J 06Y>3�0��4�d�u�*��(%q/_FE���m�s�=⎜r�:}Z��y��������{�n��������3ٸ\����/�?�&~a�T��
����t�W{�6
/�u��A�P�.O����gs��.1.���E�(�G������_�W}Y���4Rʶ.K�0}20�9��(����#�B��%ʢ>�ǘžɞ��dQ.G/�
}p4�p�4:�n�����޳)K�\@'����c�s��|�14D���Nv�Q�\���tL�3�56�\X�1��8��D�zg1�9#����M�?�?k��ح�N���+h��ݪ'ńyE�Ͱ	��i���Uz�3בoow�p���8o�s|�� �ΈE7���b��|~vn��*��A08��M��_زIf=����AV�q2��aC*5��!%��N���fr{aX�������o�]�*��PL����R�+N�G�fna�0�K��j@���n&Z��A����S(�g��QY5�5-��,�];x�r�2��>C��M�u��C9�#�vr�=�/�J
���kcC�DvƗ�;�x
��}�5S.���#��
l|G�89L6z��$�s!J��%�ܢ�n
�=Xq�wII��ZT�ʂ�zԻ�A�X��/I#�b=$:Xw�0���q�������_������ZqB�)�
ll��#���G�a����fz�!/0��%�űy����U��m3�۔�F�Is^n�e�T�.(B�8�V%L����1A��5x���f���N;�WA���
���l���G�b���єl���0�`h�\��I�_!CM�B*�t��؎�E����)�C¥�(��?Fka7;�@-�yy�B��F>���EIUCZ&���;2�z<�5�,p������
ʲz��ں�t����VK�B{
�	�{�Wr��������Pc��,N�RB[m7U�:�n�ŷsG5A5T�MbcR�*@�L�i\S�
9�!��[�����֜rR��U�i�9�T��ܠ������V$Tnk`ܫ
֡Q�|U�ʼ.��0޾{�ra�O�au�-4��֥��_+�T\�-~�mC���+�hx��R���{�kb2��X�
H���Ƕ0�
��QibmCfYJ
Z�x���H�7��Y�Sj�-"�6t����e\*�+`�Oi��\x|؝o��_������(�@,�1lNY�X��c�e@n�(V���€*�3��N��GvlL"i�r��$�g�}��ѫͻ��!��86�#Ů��H�}���'~��;O��W�	'�B���/_$Gۛ�pzΪ�M�
�f��[���a���sU����x���Uk�DW[>�Ѡ��5�X�P�����F�ػ��ϧy�x��m
�%�|��%���{��Yr~��ry-�={wo�|oV�~Y��y��X��׀҂9f@��q�"c���gGI�˟KRf>��R�E����`���J�g�U)��Y�MYJuA�͎�88Z`�m�t�%Lj������YC��h�.�x�y�%�Q�-���C�r��'!�C�+2�~�OB�����y��{��A�Q[� ������s��8���S�ZB@hYd��0ր�I]�}�?"X��*\1`�S�gn�}�������Zo��C��uT�FA/��IZ;�`Xva;��Pq}/�1���F��"�
��%��_�f�oT?��AyG������_ɘv$yY��G,q��'(�6��wy5m��o�SKM���H��9�'�z?���Y��{�ći#^��r�<��
� ('��T���٭O�m�]ϫ^V:[�!Y�������m���o� @�����u�pI5@��]��u,�ݥEmM���P������������<�)����
���J��6�aX�x���n����-P�P�c�:��k��ާe�0���ű��¬��L氽�1<�Ѭg��qJX�Q���#F�[��G��B���,@�rh��5>��ls��u��sJ/p~��:U�%����M�M`S�mo��<[w�h���]D�
��B=�Gfd��y86����Ӿ��W��B����hɥC!DL��q��e�W5灬_8.P
-A�y�e������kO��\ƛ_d���m}9�K��ۮ��ŶN�4�v���]؍)Ц�7��n�����u���m���kn��˾�8�~Rf1�=y�'����u|�E���}��*�c"ǣ�E�Q:6�udd�/>6`>˚g�;����,l��DqX�r���&�T�n>{0+l�
KU�2A"��:MhC����1�� �שjr��8H����戀H�]��	�Z���<&,H�m�l$��G���������=�$�Țp�5���!g��?1^(e���2��/=E�����,�(�
P�ӶΠRs�&�IР��x1<t����0���
���l�y���4���c��0�p�O�m�m�z
D�H�(�ik0yk���o���e�ƱJ��7�����Y���^r\G��'6���u=E/��C=��?	$F8.�+z��`�>�#PH8ĵ/9�h;�@S����C(J�%;l~D�c�;���u��e$�}�'|��#
IǓ��c����Y��<����
��.km��g싟���N��}#�׬'e���I�ib�%@��U�x]��Ttl�Z��q,_H�J�GL�/��Ϡۨ�71]�5
�yYXs������pv(/��|_��Є�Q�� �\ه,�()�b<�h�~�����k�Dp"\
j"�S�E�m�lW6݇4���=��.$sCqi�8��F5�ϯ�X��6���’@�_�[?(�r>1Ki-��x��r�	^�ܡt\q4�!o!���l�O5�����?�s!������x�쳡�O7|��4_:��
��B.�)υ:�$ٍU������ו��$]�!H���$]�H��*I�-�2Ţ9��˟&u��ӸF�r���X���� ��p����c}���\-�bo�C�Pv�M	�غOŋl0��a�B�O}dKsR�Qȋ$y�7*�$�`�p�o�ɹd�64M�7Xj��̑S��"�D:>����+��*'��)�Ņ)l$ZH�_}jmw7�{`�����~ߞӳQ�`U{�pK�J�-��j���z������4�P�n�������!�qE����	��2���4wg%)F},|�C�e�wO�%�5�z��@�G��u��8��i�KR�S>'����5�(rf�@f!
�m���'����n����:�OJ�c����ö��WF)�]�%�n�fQ'��	?�cvA��OZ��,�oz�z�zң��v��}����Ԃ9m.���>��b���Y�T��Ev�J}U$oӂ;����^�"o�ޟD�p�w�o��sN�߷�:����v��/@a�� g��p(җ��w��e�^�� P\�\���/T�'u�p�u~ñg�_��	n��+���:��yo��>R��<uY�*�5�{\K�*&U�"��Ӓ��&�� �>fG9�V���N��-׌�w���I0�	���94sA��	��]!Å)���l*�,���)a�O���a֖�iUs�9�6m�������B����s�?Rׯ�P;��=��=��GtڤY)Sj��(	;��?�
�î�m�c�$QZ���^M�FsSo�Gg�.)�S����"�=_�u��d���>�ȷ���7)wi�_�O�8�#
�TE��z]ϵ�@�M�[��f���a��y��) +�?��W�@�)=�<�1���#��S�媡Z]f��D���v������e���q������ͫ�V��H��\�D�'2�M����u�o�-��4ۮ��;][N�/Ul���R�B�������@���+�l���+�-8[KI[+���>�>�L	z  ��{0D/Z������t3�])�xr�<�ʭ,�g�Nu߼���6rUGa�Ȉ	\����V�$�z˓�*��jɬ�7�������:����L;��I�(��JXK�GW�
��	�Jl�>ecK�O\��~j�"R�QԐ����D
��l�L�} �	�g��{Y���\*�"y�4�ڿ����ŋ���O�`}�NIN���eS���5�[�6����A�bn}V��5gX쾷��$��i����l���Y���	��
��J��]�>�J�*S9��՜��9[_��%�w��)p�9�ɝ�D{���Y�f�������K
j$�"
?�����y����=֯S��S�!�#�
{����Z+Ɩ�..�c���JO�f\IL�d)C��L��"O�V>SQ��"�z�^�]7:qV�R�x\�=�&�3��7l����.�p�J��=����T�CZ}�$���{ۆn{y����D7p���)��VjQ�+H�:��ë])l�+�q�
�R*�Bǝ���.��#��L$i��[W�y��<mjOL%�*�Ѧ��V�3d�<U��Lj���l-�X.x%a��]|�J��$vH#�~SFcE�,)�(�'qEݓ4�� �/�Ħ٪��Ю�ﯴ��q�*��$���ڻ�iFM�]w�+Di^���1,��-��9�a=�J�J?�bA	��ǀ`/�!�l���e�'���!���ఎ̈́����`@�0��2�zjJ��nbbrV��z���
&��@=)=�ٍzzz.3�j�1�R3�vSK
�B����  @0�ɩ�@=955��]��rzzj:�@�M9�x0�@=i�j-�Ԉf�ʷ���=������
H��b��C��^
�a�vZ'��5��#��ly��~���e�h<r�&,��ߎ�Y��{����[Ȼ�
�E~���[�Jd�:���!YH��'��л!T�맫x愖i{��JZ�������w��.���B�����>��}ٷ����f���/��2qꚩ	ID�&,��Q,��geS��R?����Y)�����o8"��A�K<UM?<i��묡s��5:��
'�_Zd�2#�ZG�6�2�r%!J�߸*����|̑2/}�=r�}�����V5���rh`�y�TEo1HwA/g.��I��H��A�t:���D���#�<a���M[��E�mh�$�ȐuRH��&+�5*$*�	�O8Bfr���
	���S���)G�g��Ĉ**HK)uH�9ޭ<o
�J�+ղU�!r&�B��Y�ޛ��X;L���`�Q�„�#n�_��.b�g4��E@��n�T��⹸c��]�#��ja��$4љ��e�.��Z��7*f,@!fp�f�7�f�>V�Xț���ƽD��.���2U�?
(��ݷ��c��O]K1E�@��`��Wr-���	���J4�w������(�B�:@��E���!욾�ؤ�߶�(�u�t��p|��!v��߱d�
r��i���@�O����
w�zWÛ��e�$Y54����gn!�J1��A�YY������#}*�P`�%�o6�Rv5��l��₩��_� o-�
 >:DE�dl!����^�XRJ�Y�j�AsQ���n�ӿ��U��N�8vJ��^
���T��6dY$hpe�&w�u7u�2��Ƽ.ź)�?6��5��Ӯ��6]�]D���ǐ��ȑ����CX���>ξ�ؽ
֟[�Q�X)Z�?�TnbmU�A�Z(R�Q���w��Kc��Űw}�Ը;�>�T-��U�1�S>S4�L���[�!�;�q�hi^�]ˁ������ER�Sw�(ޛ\W�)�*��Q�����돧�.�);F�N͡x��ի�>�4�AdK�W�������<��B��ұlh�器Qw�Ϊ�,���W�*&�4���`�H.쀺a�)5$�v��"�׃0�)kp�ˮ�#�<���v%���봫�v��b4o/�>~���T��B5J���"Z X"�U ')�#0�*>�W�����L�ӛ	e^�	�L(�pE�J�~�u���]ݛ���G{�����:m���o��jIa�M�'�iJ"�C��sIZC���I�3�$D�oo�Ϳ�
6�0^}�n�
L.����Yo��V@A)��C����;��j�X�3ރ�v�C��D4G<�$6�ov���g�T�}ϋma~K��C���
���z!���r.�9���VA��<~t*��Ln�b���k&1C��{��|k�&�(�uy�>S
ե-�|����|�
��i�y�{?����._�/��0��{��q�����,s=�J���`�MKJ^]�u�\�����t{]c�.�ĭ4�V��3W5�r�U���0�2��M���𙈊��y!�( �w�מ���vȝ���׈~y�����
��c��,m�h��%Y���i��8���s�Ib���T_5
I���H'牠mJkf�gn�8;-s����w��<�L4���J鎁?.eJ�Z�/G�^p��n��4�ܦ�+��n�$.�5�/g�6F��r�{OP���o[�+������1���jy:�Բ��0����M����ʸ�ϩŲ��u�-��<�e]�i"<�e�AO�T	�.&F��?���F\:�'���K��~fମG}��)�m~�P�$7���t
n+F��T��6��ў��hl._X~�mU١�����l����M)bj�1�'V?H�ʎ����Z ���w�,���Ɇ��NPX*lB&�K:{U�\�a���s��"�^h�>�M�i��v�6Km/��Qe� È.��!��2���R��#�:HD��d����+v��6)pa#k�9�6v�- ������H����!��i���u��cb:�1�@b$������O~S�8
�$���޻{�;�Jd /�J(ވF�'cɶkk{��DSA���z@A��S*F9��l��,���J�u��d��M�eTU�C�5I�abtݏ63C���a���PFPt�/�]�zgK����8�2S��g$�:i��bX�>H�' �����>��.�N�l�����I	*zHL�NIl'~�S�6̝�8����W�������8�E0Y� ���z���{��X�
�0���;l_7n/�tR�N��	4�U ��Ը��c#�&�E�2�+����s���G�rČ&ee?
���s2l���Z|Fv�yha1n*���(<y�&�I�*���=.�[�0�&v;ԩu�z#�`>従y�d ��&�O��?EA�%�6	TŒ�=�漵����DU��B�REP%Z\(�%�����py1�2I��
3@�i܅�]p1�ڞ���oUm��k�N�C������4���uP��ԦU���)� 3E]�=����U~(���`�π���I
N<��'[_6�ȁ�*p��Ƞ�ʆ��_夞���sp4����c�vLo�BTp�z��h�eʡS�{�@���6�Z*��Bg��jd�_�Ap���t�_�¯�(��������#�΍����E�.:F����@A�n	[���'5�&9���9��joP2*Vf�zIFUW%V��g����}F��G������x��h���PA��)7���]��'�a��;.��2����Kn�>�G8�"R
��BYVˮ��@�D<�"G��&򌥷Y��&k)R��ſ���m�]�������$�`l���.>w����}�$
�9Mzݛ�`�|����~’iNZB�|o�!�o.ۓ��r��5��e�txԋ�(o��z��Q쩋�\���[^j�K0`M��i�{1֤�.�"�'�+Öj�B$o���ɜ0�{���l*p��2ֆױ^�k6���6X��.5��K�iXm43t_��5!s��:y�՝�wz��|����D%4�v/�ލC���em�h�y��>���%��~�E�����$�!C�Sz�Q�<�Zk����)# ���!Ha��r�i�����r-��qM��9"���"��nn�Y����M'hP�!�M���#�Z�	$�-�&�A��zwaæѯ�g�K�����V�GZ�P]VQO�	^	�~ź'꟥��_�V�I͗�"� �;�|Ik�]�K?"��ü[Oex7o0��e4]���M�*�R!g�7�ln�xTe4���%y�P@����Dy$G%�7Q|�F:�r1mD٩_�L�i�0,T�Ȓ	�Q�@~T\�����dB".�4�ܧg2��KVc��n��;��zbn�C���wQ7��*ӤM!��	oGG�3sA�b�\��������ř_q��,>[(��U]�qϗ��lo��y^�ΔXh��q�b�*�-lM
;�]f�S")�D��a� ����~�U!u���x�q��BN�#�A�9W^�Y�7Cp�JbP��tN�1Y�،L�y
c^�)S�#��խ�O�"����`�K`-
n�Wi�hrH�]	q��KAx��0��q�VF��a����M�l�>L�p��Sp�)�T�n�����R���3? 
A��2��'�(����H�Єe�0�Δ��Ԙ��:�>��\���c�
%{Kf:�rx�b����V_%-8��y��9Ϸ��U��n�ys�‰���~�M0Q��vh���G��6G�!��E��{~���>ʳ~>J���G�k��Y`����a'{P^d�E|{��B��r��%�q�t�>�
0q�d�<M͟��@ρŒ�:0m��ę"!���;V�e� ��k0�XI|U��	S\y�=�3����#z��H���W�C���ӻ�Rd|qkG0�����߯E�W�b�6��f�x��Ͱ_*A�;yұe�o>7�rNW�#�7����;����ݑ��k:A�k߫p��ثo"?��mȬ;i��jm�R�S�5ji���S�d����d
MV<�yj]��a��%�3sЄ�)ˈ����h����^�YG�Rn���@U�Jl�
�o�`P@��̌c�AC5��<Y)��v�8��_�OS?��fK�ffd�1̬���_e�c��/���+)�,��{ds|
���c��8+9��;�Jn�\<���JsX�[�U�<�����K�w:�o��i����0�i�M��,fPad3����Xobmy
��$�Ī���CY۞�Q�%�3�e�����~�1bнiT�@���L�3mC��)�Xр)����D���R�JjNQ���ve���yl�)F���@I�R�8XQ���a,�wOT	ߣ8�GYnjQ魢�$�ag�`T�\�� �;�컛�}��������Ko*��ׁ; �0�cd����_���9��w䖠�]¤2��R��W��}���+Է�䎴�अ�o�3d�E�!F����M��(��{�o���7U��A�-�ݚ��88��ڞO37���w�sN�YH�g��&O�W~l!Ց|�|�����\���E��`�`���5�oeU�DΩ�|_�J��e���4�j/�GX�ׇ�X��g�ڣ65�˧߽���_��������?Mi��J*�c�����"�K��W"M��;��3��Ez	��B�)���^�p	��3��E��y�>�3p^�O՞i���49��4V�b��v"]Tø��R?]��*�[1�n
.�+�~��3��M�k�|��:���o� 2:�ׄ',�P��+�s���=h[=�t,�z����md���.��T/T�,ۧ;��M�G��>���U@ǃOX��7���04�p0���C���B����m��1�� Ho�3���6R6��8���,�}����2�q�it��x�3e�q�ӝ���Է��A�bJ58�
ir�=��Y���ԻC��HiK����eD�K4�S&D�i)�8���f���gMY��S�/�A��I��;ִ�Ty�JQFE���o�'����o_�R�nH��5l���Yڴ���D����[��領w�j�^r��0�M������Dq��eJ��Z[�C����{��ꒀ�K���-��\?u��g���k{=��Z/	>b���a6��s���\
b�7�C-P��"�w ^��O�ɘ4�j|�H�05�f�!}�n3)
��R).�'�� `u����r�$�W�n-iw����;��v/����ow,�Ƞt����s����,Ňj�AXoN�u��:�<x(y��E85gd������n6��w���*`"0`�?�OX�K���4�YN��$?�	~j%���&�LuY�C-�`��>@�>�2���{�x���=Lh�\
�	��El�S��ܯ�
��|;6W��e��O��$g
0D� �:e$�7T_�'<�<���\��4쵅�{���O�٩�ԫo����K�#-��C�h̔��� �0�ݕ�N�p�M|���d%F�d-��(�>��ag��?Cs�O�!-P|��iK��뿙�"���gx%#�,��:Ȩ�f���P�ea���j�e	X�����^�G�ٲ}S3�*�Z�B�	�K���	����|Ι�c�
N��m���QYN��-A��
P��U{�e��CWH�B:-�n+����7@M�m&�ٸ��ǽ1��jϔs��[NLQ'��Z�sjG4]"8PsV��|��Y��`v[���@�(L�N�h�;��V��LO�&��t'�]�?�B��L�mY�ߥ�MMx;�FO�~h|Ƭ�m���׫�h����,�'ш�l��FO�E��֌�+��t�H�߳w�yU�f�A��3��򞇇W:W&7s~��G�Ϯ�Ũ�S\�ǰkFK݈����q��Q��8�9�/@jF�h�iG���Q��o&l7�	9��;�\p�6�I��ο^ǭ26<�9:]~��
��Oǜ�=��Cɡ탪lYf�&>�\-9*][��<Wn��9��S���V���6��CǺ��Bb���O���&&��i�D"D="@#%r?�&Ս/�s���n�Ϟ�.rc��ی3�,tLd��ǩ�?�oڼ��[���f�o�V��'�U�#�&N�ݶe̗��!���B�W�%=ϕVt����oD�����V�"1��\#|v�>����|���qK��6[I|d�w[���K9'�Tt�ٵ%�>
6m�,p�����̷�?o�p��� ����&2��u�w��L;!!Q���|���
�5��m�_���ؒ˛�N�.z�@O� XB�%�8-Nn��d�'��#����K�h̿�LZ�9»������!��[j�%����r+},��BK5#'���h�ܩs*���3�����n��X���<L�p��?����c�'C��-�YR(�csS���_U��41�H�D��ʤ��t�|6n�o�΍\pM(��%�X욐��p|%�-֠ Ӡ�T��6#�@'7�4��(���-PQ��޿�ٝuU�:#ѧ��kr��t�6���G��9
9e��gH1(����3��T2���SA�M��Ğ/ɺ�g|@QD��	�$�Ո!�L1!��4�{���'i���7B=�4L��x��~M�0.����@悽�(��Cb���A�}�=QHt�b-S�����\Y�
�?�_ޑ�E�Q6M��8��H�UKbZ�������%Gc�)�2V�������A���'yW����ë�|�p��aG.��wHTq�u!/�2Ƴ�/b��ߘ[v��nq���l9N&� i�,k+�#��¾�AƷT~�<����Ԡ�%�IKz��IhK�|�Q3�;�˅﫡����p������g�I`�
s�G�Q|X3Gr^���.J�(��Fnm���^]!C��\X�G<�R�� ��=f��H_5Y���R����D�XevmtKv�T��R��Q:G�>u5]��&"{z�J�<���B�ڰ]��<��A!<M�@W���œ^��͔�&����{x�s����۔?(�u����@�I)?�P��i��]�s�jSZ�GCj�Ef�Ų&����9����ˍ�;�Vq����Ȅ;U�QX�y$i4�6�a�``��d������������F�;Xn$-K����7!uXl߇=�K������q
4v�	��*UD-$���NK�fT[)w݁<��;��j��	��n=֑����f�."�8y��F�O�j���{ ,m�C��S���D\��ڱ��Z:b�Ė�䟋`{�`�^{���3���&W��O+Mwl����ۭʝ;ߥ|����*�WP��Q,d���/��/��v�՛#‰uF����4uv.�#�_{^����-�n��O�+�.��L�5��6Oڹ4o��^ Z&�8��a�S\��iXt��B_��@�xop�v+w�����L#V��`�5�{T5���6���Tt8̤s]��<�„-g-�uc˫���9��E8��fͧ����G��0���s�6y}�C���
�e貍���c��!`���H��s����:qzm��T�6
�5�i��H���F��%�����@���W��Ы�R�m�q�=߾ڳa�IH�չw�H �$���Sr��{F�P���Lzւ�o�Yvt�hg�C����MrԠg��2F����62Nb����PF�~7Ν�E��?J2a�;c:,bF�Rq�(/b���_��wb��3���iv�K�6/J�p���]b?[�ڰ^�4�d��H7�.���i��E�O�|E�1A'J?�ZRW7���V8˯���#�O�A���l/wy�i�H�?})��qlɤ;��[��]�}ۄB���I���G�x;,G��i"l�GS����
�$�����XB�X7� ��=[m׿`�r6�j�VX
� ݵR��M#]1��!p՘3.�$cV�r�#�M�&�I�1t����C���2�E+M��V���	hjP�v�k�)��Gđ��ȰL���Y��p��Vs�)Nri��@
r�dn�u�Y�C����[�U&O�D���I����@oPF��nJ$p��0ӣ(uR��ݡ�d�+&�6�K"oz)�������h{��YQSc�1��F=��x�t3��;�c��n���!7ȧ�S/���j����8����=dmS��	悵�K���y��5�J��S�n�E\lRB	�P�a,�?��E����'V�wM7�V=��n��(��"G]���ٮeA�h>�E^�L�)�P���R�zez�"}�!*��P���P����ֺ*�Kq�r�f�m"�cN����
���%-2�c���b}�\�nt� �k�.s�肧�_�"cl�"COc+?�B
����n�����Ӄ�}�a�`�^���[}�F-�D�L͛��s��e�>;CL�����Xl$5��`Yj�tUO|�;���Y�T
��oZ�˨���ۊʍb�	�̄����s3�q������Y�k<y�Ż��{>=�O��K����`�
3�#�ԕ��A�k�I���w���ߨ
+�?]7&���O{�qgGj9�]+�p+Y���ک��h�����6�ӼJ���X��b��ջ���
w�p)ў]A!�U�iф��/���,���mb�\.�_]����b��E1��x�n�y��������R��)[�6&���l�߯�ISpb�0>��q��d�L ���^�!*Q���]7.gĸU�b�^���4�Ņ���{x�k��[P�����	L�+v���p����n�����g��=Rv�I9�s#A�8�N�&>-
�0���V���,@g9K��-�6�)�EaO�m�f�|��c6C���oġ��6��|"��oJ��[���d�
��Պ��F.�?`^c�,����@Ъ�ߊ���<^�������B5f^�s1��<�LĴ�֦1�r|/�{���eW�A���x�z�1d}Ƽ��[Oos���.�i�5;�맛p:��=̴'͈����ւ���{�˜F�UB�7����}���7���Ɵ|v(6��]����Y+q��4���n��U�����m��G��|=�о6�_�&��߸/�,p��X\�V��:�۝y���u4aM7��LW����[��ڙ���֣�~Y�Ϩ�/�����TH�����(Ԫ�Yf(�$EE�ros�Q��A1��:�Z7��I�vH$t8��������?�V1 `��Dw(.�)Q�f���A�^֑1z�.��8�M�y�d����Sn��#�[p���u�۴g3�3�y�ǝ"!e#���2���S%��BOB�a>ry
�.�Yp�4�3�Y��>GT�({S�6�OdB'�s��\M�=�+���|q�C{9Qۯ:2�g_����#*Y]��N5O�>�T�{+���?��O]=�-��!i�>�j*������T\�"":�ct�
�Cs.=6��[�.W���&�jՎ*��6���b���p�����+�_kA�ֵ�z!��3�.9%KC�S21cǹ �=���_�D�Vᅌ0<V�.���g�lr�$��-U���/˽����s�Ic��C����93��͔=���Wf�1[i�b�������ѾUl�B8ajZ����Vt����E�V�=���k+��x��v����M��:�Az��z���nl$����7$1�;���>�K���[�yv�8,Ƕv�C��)TKHt��e��3x"�26p�]��<$<�*��ޅ�S�-+�f@~���ق�dPj�zE���y������c�sa�qK�0)=�1=;�-�����ꩩ��*���|�aYz�Ar�����\pB��Ц�x�K��%�C���;yLY<	��*?|Kk
���{�5���`��y�m�[�Z���!��\F�,�(Nt[��Ъ�]q7H�,�=�:[�������Ok��i⌝����&�nLK�G�@̮�<�F���焞��**��œZ��G�����i�I]��Nr3ↅ�0*m�o���Ҹ�o #�v*�$�� �q��U<�:�]��~K�Ka����.��W�I�T��6Ċ��ˠ��Mu���A��{ah��Re��-�9; ��\��(,�z�Uk�������JPI3�G��*A��Oc�:��F�sy�p1�a���^�g��ҞeP�t��:��"3�B��ag֚��������l�)��$����>A%H��]hNGCv��ҟ�"\lK��m�j��Ow�
�wu��c#(�Q���^�i�6ɇ���Mq����[���.i.�ȵM�W�|���Y�D}���T�Q�Ip_?I���k��peZ�;D15��
���i}pF1�r�ٳ�)ұV�n���W�Dt�<V[���;=m૴���\���L��^�<�����)�uhR�������@�v3�@!r�|W��D�E�9��v�v�l5w�c
e����?��o�����t�m�&h��7>~.)����I5�����8����w[��PG2?g4��{�������*�%���n�!?T&&��S����.�n��,�r����������h�n��S�G���D9׽
�����O�����>��$�wr�kT���p�ʳ�<S�MP��+��v�^He>C�򋏈�e�l%�G�;�ӂ_�e����#Twڍ&T�U���
U}s�.Y�1j���Z���֑�PZ)��e��e]z �i����ׯ���h2������%��ܰ�4xC]���5S� 9yr��Z�Aɣ��(K���Vms�8�ί�9י$-�1�J2�K��\Hh���Ȗ�Ed�#ɀ��W�!%4w�)ȫ}�U�]��@̗Y�A(#zQj� �ύ?I�,�&�J*���������S�gCb�.J�",!�C���F*g�3�WœDR|QH�����zn�K�(�����2�X��4@�����C�"�4M�K����aj/���Jq�v��մ$(��:r��tY�q��G��*6�t��F��ʐqqڔ�(�m����8w62$&�����#�e�ΨW��J|+1B	|kM3���X�c0p����%��O��Y*ye�r>�< qS9��>��K����{"��@�H(c��&�X�0<�?\�(�H�o��"(a3�M�ޯ"�Ƀ��>��4�Լ�*����[��Š��(�Wݬ��#���K��X��'N%�-�9�_]'�W����-�"J�u��=�����}��?҉�d%nFשgש3���W�-��Q�z�C��t���egh�Q�OG�*��ZP�˜���f�-�`�J��~���p��
M>gӑLn<�L��vm0���-���ةy#k=�`|�D�Z��������s���~'DW��}�|8yP�tl�$���5������:}�?/U�k��}�GwĹ��p���K���$ȼ�#�(X���9�k�ڛ�R�Q;s'����%p�-sz��^Y�۵2��H�K�Cum��E��q�h��&�nM@�L�19N0T��ͣ��X,˂�U�U��^��Xߩ&�E�v���Ķ�=&%���c�Ī�B�r%Kv/�j���%�l�̛!�<�9�Kv`c���e\��Ю�?��Pu�H�+n%Y��@	���9D$ʽ����Xֻ�(���	� o�"$��7?I�F]���P�ǯ��u�#���h�\�խ4z����j�1��M
�,�!��HO�����zУ��G���1��J���կf�'Ʈ!�(�w	e�9-�՘�Y4����$�9�„�|�s�d����e�����Q�?�f�;RI��	�U1�_(/f��eC��H.�i�/Za���!�x]Fm��I(S��.A��pP
�s��fYg��Q|nx�*��ȕ��|��h�~��
���zx.��0��Tμrj����	�M|[L?�IGho I�������Я?-3y��&[N<cƋ���]�x��JR_"�ݨ�N�̘m����p�e�_�u�ͅ�QB�ď>��N�~���<��+�w`��C
��Yms�6��_��dJ)Q('mg:��r��6�sl��4s�f\��$4��U]���]|�(;ь-�\,�.�C�l��ln�����p;�0�+���s3�J�p�$`	5(����q�7�{�AN�̅-sq�d����{�R�dNƧ/�Y%���93�&�8Me�� R|���|tv9>��Hx��7|�1R(0�E�E:��`FD�g���#R�H�6!���^�M�zD�.�
2:܊O�;$���9��?s��|�?�(r
S��}1��y�g'��<���)�a׎u�_�""5���:���{�r�K���{�R��64!��"�����1��e"e�Y���I��0�H�e�J�%�x&�!1��<�v6�*e�xH7�ٱ*�"#O��т�9K�g�d���ǽ�ܿb���3�Ŕb�u���-���k��k@+Ԥ$��(�D�-�m������8nyy2��r���(B6��g˔X0���Dj�%X�2�<���m��x�Pˠ��AS�K�?(���60g��z��)WA?4�/3�!Yn�V,�)3,�q3�����F#Z��T�~�����Ix:3�����;��>zy�L�7�1w"9�@����B[��� ���"�9Q{i��B'��a&�u�'�k��7<i
���̭mι
�S��/�� B�xz�y�$=�]R�d�����Б�;3��q&�8hhcb�9�H.�mLozu⾧;t��	��
M���k��[44AP�y�d�G���C�@c0��W���X�k���_-}�/��5����thߊ)���	Yȝ�0M`��L��u��z���	�F�XF9�(�GW;s#s���4h4Opw�x�FaنQ´��0��/���1�$|���G_�\Hʃ:���p�j0+��Jݢ�Pq��{��SZ���&�n緼��s;[�m�-������<���e��/Xֳ���ߥL�~ȏ�*�!�P�ٚ��
|����!-��w�9���,�IwG�Y��A5�wA��-�U��%Q�αBV�ύ��Cw�g_
T����0�&ÿ�$,�<~e#[?�\q���ⲓ����/�bY��n��/ץ���,˨Dįdճ��}<a�[Ք��\wT�P��d�`.��K�RE�jE:w����%��'���n��n�rK��<ˡ�X�*�w�Rw���/����/g��4v���
l�ܔ�{�D��7��k`�+�:�o��N��I��jB\h��*�LJ�j�NɣC��{rAo��m�X;8w}us{|y{��vӗs�}C�L�v�X��!6V+��`2
�E�
����^i�!\cM�Z���5��|���p%s۰b�q/��m�[Hl\D:����Md���	kj���7�_]�~@��b���ʸb�o[��N���o.0+M�"���>u'���d�J��������]��k���]���������;��l~�mK�,�	E�%�[hBK:�9ɄOI�e+��_G�
��k���N<���\^������/gprvq�nߞ������;?=��ɿ�a��S�p�v������,A8(��X�����	�x�^�[�+J�_n�N�z:��,f�;�aq|��	F jF�?4�{_bI�]!4$ׁ���,έ���XQQ�a�O���v)���s��Bcu�����O�B�f�l���TL$C�u�0��$%oD|�ꇟ~�C���r[��n8��y���˗g�0��a���D$¬^ZIZ�,�.tB튯��(
�™-�B�7�,P0QjUf$�ԔK���r=+�]\<���=z4p��K�_�6"rR+������J6����C���U�-�{#
��*@oO���%����|��ޫ��"Ȼ�y�'g�&Z�H.c⊛rA+���1��=�#�bH���;v���h��hq�U�����|����\�?��l"��B��SV��*D*�S����[oH�>SB/��H����0�E��lƃo�Q]R���:U��o	�Sis���%<��6�˧U�[TP���ƪ�5"��Uj~��M�8��ˋ�+)���l�� h=\�l�m�Mϧ6�j�U-:L��b	{1�5��n�"q3b'Q,l>RAU��g]��)����i\�LZ��2c�
�֭���:%�r�:h�Pip�XH�Gڻ�K��BR��ԧO�48��b�>n*ɔ��72>���
�o˙��������k��ANY^��	��1�
���,�C�1�+X�F,׮�umI�ֆ+Ljz���$	͟Qh�h�L�]�O�~�Ŵ�V��E�ʫ4<�9
:�!l4{~64؉8��;���6��p��jY�m?���+�ҿ��=���0�$��^��~{�r��Q�
��,��M�8�ͻ<�?��HY,��X�n�6}�Wp��u���v��]�I�] i�:-Ч-�-6)����;$%Y��$N��^l�g.<3��7���qsI~������7a8:��F�Uf��d|Jn3 癒9+srV�L*}L�8'��
j
���7
D.�ɘ&Z�*��6Wr
J@JB��P�
�Y�LF
I� -e)R�v��r~��,��Q���ɹ���F��9J��*
f�f~���0
���L�	��,5�4�5���[&�a��:���9}`y�7�g�t�m!{f���Dr���n�f8̎�q��>���,�AfL����%z��WR�8Ђ��D�C߿_Ҝ���P��7_�S��~
�4p���x�Tr�i��)(�������IJI��dG��x!�
I8�z���)[��T�n�5�S&�
P��F1.���vD�SIA�Y�R�M#����)��F�����M�T{DЈ؏"#!Dzp��YjChQUT`.֊P]0����d֒�Y�U^�2G������a������Փ��\u�}A�V�P²��W7@��J�ch���[�%\j�Q]�:T�[�-=���qʜ��	�}����,�T�rca��
�s3�?
�
��Ar8$�Y"j
��rd�c���*\`�N���{;n2{�}�58`6���5�%�5U(����l�t�,����ʜ��p�\
��V��u��Q
q��M���?3�>'����-��sX+�����{��Wy��J>���ںw׳4h���mx��8�]Y�a[��[/qQ���=M�ڇ]P���k��V��Q�2H� ��x�J�̩�f��A�5a*�n+H����!�P0���ͭ������Lõ�o�J��/��ʽ^��W���Tg��	S���8�w��۳U���]N��5j�"����
�y�Q�:�5=�:'�
� Z7�q�3���a>�z*gb�����Ӟ�*C'}�Sj���,�Ƈ'�'�)�t���pfC�B���7�����w`O��?���`?���d���~u�ЫL��v�{E�r�)��Vc/U�9�x��u���mP�R��a��l*�pL.�$PW��U�CebS/���i��ri
Vn�	��v�+�О��{���[��=��b����Q�2v����I�T�7���;��D�Q�%��b��N�#��k�ق��v�-��?���$�4хc�~w��ч~.4�?X5�tc����������Y�o�F���6Łt,�v^m����\]8��h� (r%�!�<r)Gm��7�Kr�G6�˙��y|3�:<g�\U�"����#q�Hq�T*O�\�6:QU��,LT�JֲZ�8�;<�R���IZ�Z5U$E�b)�PKY2��ų��q�W�Y�l:	���B�$I����EZ`]�ˋ��W�s1O3���B�Wӑ���N�LVWŅ�?��;K-��j$��U%�FQ����u�z�p��q!?�1V�(�xV{�Cѓ�t.|�*%8|%NNN�}�"bo_��'6h�<�j9���7o�H��aߨ�p!�D��TQkp/����e������癤'��[o›,��(d����K0�^oR[�g��� ]��²�E|��Y�C����[��43y���LT˪���j�$sP:/ܓ�
��VgYXׯ�\���g2;\���384���	��{ :�d��	^�� G���M�IX�j]��Fc�8�ᘜ	g}��\��ew0���T�aϕ�-���VW6�N�FN���]�	�$_��t^�t�N-OSe���˧��www��2�T~�=q�='&u�����\�:k\���QW��h�������_�;�TEA�#�uLR�����ռ��t�H.	��շ���ɿb���n��MF>b{�cPIV�tl��#��σ\�uw��8-E�F�V��֗a�	x,V킋�p�Ӗ��I+Nl��į��4�eቧ�[�u
|�>�S��A��SMP�k)�
-����s��btd�q`5Eϙ<`�8�J���Ѩf�k%��\�d�+`��V��S^�h�O)�[!~'n��3�ւ��3��9�)ʰo��HH�7�5�3;�����0J�V�o)Z<2�#�{�a��Z=
6���E�KᢒRܥ:a+�a�E���q�	����w��E���)�J�[��z��"�����*T]"�w���C)~/��
��N��Q��r@ޚ����
G=�X[^Xio��
=�ԲWkC���`�]�Z��-�'!ӑ�$�/[�;܇�\~����u]F]!9+��{e�;�c�YB�&W`�!C��^\�˾�%����78•�->�835%���Q*��ՙʀ�k9ݲ�@�ݖ�AvR�}1�n��V�6��9�1�����u��-;��g>b�-��X��^s��f���
�g��'Q$�571��e�^��g/~9��ǡ�Drl���S��)��"v�xL�^����>���Jn_���8�(� ��k��h\"��4CAy��IT�?匈����� �N��j1�T��Щ��B�h��fv�T�Z��1b�RC�x$�4Jx�����0S��)"��g��D!���>o���Ϡ�H5����-�C�[*�VB$�\��cU��)�.�f͂[⟎��<>�q3�نxc\օ��BoH*�OI%�mG^�%7�,�Zd2,Ӛ���:g�>y�f
m�a�$w�<)׉�ڮS{L/�=�7��D��46��MY�J˘Z�i����G#q�O���?����>�Gx~��&��Y
�����-}M��Z&�P�s]�RVz�[p��c2�s-.ՐN�8�����h_�_�G���m�!TɲO�Y�S���VS`cDͲ�>1��#�k��vf�<��A
�B�{�ږ�gOC�{��P�����㉍��J
�G(��c��&�Q��\����xpx�~⸀
ZL���n���-����*甥V�A��%�}�<����M�v)��?R`�k�Z��t��t�O[Ỿ��=`����G&o�=&����
5W�����bi���,q��,+�
B���&��K�t�PUf����Sw���eL��85
����B�@5���l+3�� -�-#3��b�����9�SY{h�E�t�Mf�<�d�d�>�3�x6�����e8��s�ߡ=�t��6&�K�a56R�8$�$�aQ�g��@MU��s#LW*�9�
��1�KG2M��O�d]xt�-�f����HuU;�Ӎ��}el�5
�E{��L�����FP��E��Č�nQ����ѐ�e��^ڃ�
н,�R�iM�³<vQ��Iݜ�3�;0
L"��YΈ�W�#�
�0�}�����+�n�0/�������Ft�����sĶ݌�Ղ&�&��y��m[��xͽ�qp�xs�fm��&�&�k�`=j��"�gY
�i�	�楌����yܽ��)h�<o��=�]Hҹ~3x�ej�6<�R"�P�M�"�;��)^\��y?=;�<��˛��ˋ��t����<^^�z?�>}����o~�G���w��.)D^�*"3�y�y;f�^��`YU<�;������/$=��H��N�K��\���B
����̳���w��#�H)��M����!����(�n}�$�K�?d�t�z�o7o{7f�Ï>L?�Oi�?�F�z�U`����_��#�r�gw`1K;&"L� �=p�
�� g����)Ru�8S�[H�0�49�Ή�^���x���!�;����G^G��c�n-�8*?��{�L~�nV��{��G)�賡���p)�p,4Q��m�PPW+N<�m�)�mF�g���uܔTm��a�ӷK��_�X�,efX��3�:8��0U��\��
 E�#���g4fC}�T�A���z,�3��H���n�V�>\��ʅF�w^u��sY�Yj=0�����������%����	�~v­3�)VخEx�ď7��F�U�[���
o���5E[g��*��伪�pc�7��Tޤ�>���Ǒ���9�=�䚯�*��|�z}͕����	�T�&g�k���I�
�.�9(*^	�%�B�����I+�{9�UE$����p�6�@+`45�fH�T�����Z��O��H��Վ�&o{��1�2���/�?t��wc3� 9rB��ޖa����2�:R��dU*Z��x5�+u�K�.1z�M��(,�����k
Ј�84���av�f�a{k�7�e���ۚ�8;9vv�u����5�5�?����#�zjd؅�;�A��m3�S5v�Z��U
8E��5?��`�L监��r%��K��&��أ;�@��M&o8��i�=Jh�N[��{z
���7?���XB��r6��p��J��m�s�+�����j��/T�1��ZKO�@��W����G��O1*mH�ڒ����ߝ��ng�;�	���uv;�����RH��2�?Xɫ;J!� +C�~U��D2�U0�>RWB\�Oi�����j�W�}.�
t6���Ъ2�e$��Ϋ�g����)�5Q��:}Lt}g�T�]�ꯌ�[�뵛w?�l7y�������~�]�;����&!��!�\컩����[ol�5��Z�s���γ�"F�n��^5���;��Y�-��2�fN�֕�1RXt��(��0+ڝ�,P�2,7��{��P�L��P���&�_�)�D�Z�����mrhB��SH�B5�_�$���|K"�����(���X<��������7�⓳D��j��`uu�	�}_�k)y�(�c$@x*�$��>[`��j��.Æ��:,�D�l|Q]I�/7E�X'sӃXى�{)��MV�'e����K�N1*��*�q^�!
D�%��`��>��a�-4K^n���zw��o��ϑ�8�����-d�DM��B�o���^^��2͋X�?k��"$aG�
/�
lU�8o�E�ܔ%�{��q:o��v<B~�Q��A^V9TBPL��psW�)����,�4��~�9e5�8�+�i�k ��&�V4�d[��J�$T�A�Ҕ�"<ȁ�sTk�(�|�
��82��Zk[۸���_a�p��p�B������K˥3�LY�C����(�����B���9�X�WҺ/)o����!
�2�Qw׍�+a�x<����iv'�clG�!�F"R��D�z�ƸH��Fv5J�4�&\<��a<�D��`0���Z�=DˆF\L`Zv�2����D
��$0Fh��Ao��l�G�p^a���m4���wFi6�"�|L�,��y<��$S[�-
�\"�i2I
���S�N#8�ŠӸf3��dt���ٛ`�3�ye��	�F�Ċo�#͒�d8
.�iv;�l��U�<��(F�1FوE�²e�a�ΑJ�	��@�;�ݸMb.����(0��X Ն�(s��<b��Z'c��e{�?י��X�e�@��a6�M�nz��(Ba�Iߩ� �Ђ�c����4�l,HQy�R�:ӌ��y������ΐݒ
�==7:�FǘL��L��W�m�7۽��F����{__�mll���m��z�^o�KNb�6��v���I|F�����;'��m�MA޴��W��U4�ѭ�6���]���}W�xw��Dܦ셙�-,�@����(_��bm\l(G$
	;�!�pIbFn�u��,�q^V�{,�>v�HQg����?a�|c"���{��_�U��	����ـ�Z,�p괝$��냎�W��^Ҡc]���ž����#���G���%K�<�zIV�ׯ�K';�ߙm{ �V@�^�%C)x���0��j��.��@;ܥ'$
�F�]�+]$є��ǜ3�X�QJ�ν*;�����Dvip?$�fߖ3���CU�c=?�y�Вs��}ؖ�U�����H&� 1W(�垈R����Gi�"H���o�T��Kr��oC���_���w;�x�iך�o֓�Ƴ��s��-�m����kT�	
X�7�tIHy����0�FC��yc�E�)Ɲ0 9@�&���m�)�"��9��`� �UϪ���i��jg(D9��|b��F8e�w	��*��~
���0bثF,�νW���K�F��fg�xi��9�@�p�m��6����7�{��n;Y|&}�嶪#�|	�w����̂�/r3�h��6�[���R��/ԟ���W�Oi��R�ȆJ�-9�EZr�2U_u�a��nUv����nϤ�U��ҽ{
bq���5CB��hqAٕ^��I%k�r���'H�V�JS�}�֢3m��B�R��60Ր�^�.~;ژ�5���>bٕ3f��*��J3����ݵ�9J��(�Gaz�5��
漷l%�>j��;�P��	5�f�wn:>�Z�C�v�Wk�gz���̰�`���yUjm���s�\P��e��ƴ=��Y�c��O��j���{��){�)���ꭹ�yE�syby�Ri�I��k���4���_�y�̨�ܨ��>����Z}&i�9W�TGϻʀ�@�^��tլY�k���Hڑ
�H�	|��7ߧ�3S��E��gO�&�p�W�m�;!x�v܅#�_L���_�-��0��<i�����;m1�7ÿ�?��X*��蚂��<쟹�Fo��ފ��0�=’g�c���jp=~��n��ׯMs���~l'�K�sڡ�]A�)��J3�fb(��R]����Qad�f�E\t3���L���C��[�N��'l͵;X�Z�D���V���Ex�����q�h��~��������
U�,|�.�~=�}��Q�6�aw�$fI� /4;]b"��a�v�*�K�nI�����.yt�Sp򠑖k�=�S��a{��_��K�RH�����,=u�A/���J�+��wY����`�am��9�X�Z	Ċs�o�`c����&$�q���d)�([�dK|�V�Tw�%[@�=�����B���!^�	��V�4�ܢ��	6Մ�a���V��T9Sf���*�����(��"�o�L-�sUR�$7���3�`v��ϟҙ����lW�ܦ
̎
� ��,zPg���n�s�X/C��)��o6��qjZfMm�f�F^f���Q@�gD헔�KI8�T��R�D����z(�)��Td磱������]%��bN�e�BE!_Fc�kN�\1`��A�Mn�$;<�:���k��k�y�_ȱ�s�HRd���ZKS��Ґ�0H�,y@���V���9���¾C����R��0O�Ys�2~e
%֐�8Ib
A|m��!B�D��`��l@�%���N����?�AI�'`�g\%oc��k��EZ�"�
���k7I�ā̙ߜ'`�G�QM��!4�8,X���>���by��!ω��'�U����Qo�Remg��Kpr��WZ�j��r܏st�3�"]�UZ����x���KJ2��+��@�"�����r�n篴f���[�l��W��_�G�nZf��B�P����&��aOSs^nԹ��W���W�M@�u�!��a.�-����f�F�@?[�~n�2T<[�6�t�{.ͽ��$�
������9rj+�óL�8���+V%.`�PaJ=W���e4&Y�U	H��݀r%�wu|�FG�\4��p�SMA	Uwv�>菩�\JܖF�=EKz8�oxb��=.Mڂ�����k���\(����1�b�����rmď��={G}m�@Lq��l>1�F?�t�2�|1m�N`��4~�O��_����$��n�т��<���'�"]T+�p���2�+5Ih�ԯ��
�O���&�� VH�Z�!?�[0��@��E]�s�/,v9K�T����j}�.���Oj��W5�&)F�|��|�H���<A�򟹑���դ�9�{�l;���4 ��MhL|�̶0S�e	���8�޻2_��9h�0Q��,�<=�\q�"�BDZ�y��c��K(�_c*��狪��=�B�v�ULC�����,��^���h�.�|~�^��0�bU�ޝ*�ރ*��mUzx=U�	�]U����x��1�>��a���q����J��w�J�w�J��2!K���Q�]QqmO�cT���ug}�� �%uҿ}H���<d; ����C@�) G9	ȗ���" � ;�n����2��0��->hH��#*<��"Ξ��Ґ�=u�&	sgwo�����x�m�q�CF����ʺ����O!�v/Ow���d˞�B���c�P���.��^��j/��^���^��Q*W��9�q�>����@9�����t	�|����T��4h>8_���+���<X
������`Cl��PO��z'�%Z
���l�0��R��%�����
g3���q6�ng�D���PrZ�u�K�[gK�{�'gg���&Qlml�� Kl�_�|rp|�������9�c,A�|B(��
����/��J�k[k��K��Y�8�@c[cwr�e��-�T|Ulml��Q�غ�Rb�F;���1�K(a��Ȕ(�b|s�����i#>����}��3p_\�.I6f�g�H�@h�O,^�B��?<��xu���>uE$0�� X}��c����*ޣ.ߛ~z����*����Z����*��
�ĺ������,�	-�8�-�O����$�Y'�`C��E�	�P�."c�̼�T�ÁQk�*��v7�Խ�*"ߋ]
!���⿈�dԺ2���ZH"�~�;�;�g�h@�.�3�6��SB�-��:����}Jn|g}����އ:[�z
�mx��1�(g�0Z�9=F�:��U�>�T<.;7;(�ZCVܼ%!�FY���<�����[���3rw�@*����m\!�>���x$c�.�c4>����|j���u^A�����ª�?|���a��у�I? aWt�|���*�܆,rH#/���g���">�5� Oa�o���7�Dp����{4h��o�=^]��h!"��;��x*��\���H)�$��zyuJ8���Bn��A��:�ŗ��򨴜Wi��"�YhO*6
Y'�4������N$=�������8G����5wE��3�L�k�,d���<0NG��ܦ���9]���5G­�8rka�֋����Kㆂ��&�^�#���^�@s:���w�_l|e1���߲���徼��db5ZUSC�W����wp��9Nӑ�_W�gl��^�41~s���82�Ϛ�o���˟��o��~��Lrrɘ�h*Km�6�X��$Ό1�^��,�N^�$/lX`�����q"��)�c��=�������xS�ᾼFz!�S9�ϴ�z���t��1H�}��3�C��� ȩ G�&����=
;o�	̄igj�m}ҧ��j�k}R�RP��a�p����Zqm���~�$� ��oy��f����W���+�S3�W9�`�z�� �/g�hu�7�/X�,��;�
�iX���R�^d���Ӑ�����.L#�O��,�ݬ������[cj������mD��0�ǽ�gCV��"�X��� �Q��@|C�Xt�S`��m�1/�?'�.�D)
ln�˘�4>/��&Jc��F��BJ���P��Eȟ�*E�/�y����u/,��\����[pHp�w����Z�&ah��YA��i�c;�\<��)k(m �vK�l�!<����b�e�5��Ö\x~)2�Pd^�[��c�|� H�G�|�!��0���&��V!aX
�
o�]���	����~A�6�9�O8����K�M��0�w��=f~1[^����[{o�6�*��$���e�(�5N�G���8DQ��z��$À8�}wǧdz��GlS:>�w�{�X�V"H�Jj9��l��9}&cE���	�d����`�_�[0,Օ�v�u�����p0��>��p4�'Q�:�.��~�'����H��(�\4��ޘ$3�\��'�?�9[�{;�����:%��f�q����
��G�-�
�_
�$]O0׹ɰ3�>%@������n�5��0������ɏ��|�>ԩ����+�������W~��6�����-�������f��쁨�Zt�F5���-b���ƕ�:�p��EQ#[��"�8�S�"e�b�2��¡�x ��%���cU_�I��U�1G�v�=��U�*�^P�&����/W"�w�2~[tzwi��s'\�8�1Dg\[��[��븯[��P�]0��|�"N��:WU��"%:����2;��A�L��_?Vʲl�7�*�I��裿�Or�"`}�
�̻��W��.�P�:��O�~ش�_U1ȭun�S��?��h6A�b�Ò�4��&4�E=Ģ�|#ߏ�MQ��q��~�6�k8��(��ϳN�K�@@0kz�2'�u|bF�W��A|{U��?Tm�:�!$y&��K������C�;������qF�3�cE�Es]��%���*��u�@�\v��!����C�X�6�,ݼ��+�S��0��G̗����7}��a�lZ��&<^��"#@�k��rY�h�O	ʴ�O�_�"�����f[�
l`V�9�(��i�^}{,��JxI���`����/�b7:U��;�X{�������n�C).1̔����X�[�w�d�$�O�������<
�`��.o�,�9���<v)�x�ٶ����r�u��~�)+FyZ�Rk�J�ل��b��ZS�-�k��w7�J�-q�-��ْkt��Q��s�B�.�	`/xJ�{�y_�1�+��488/����~�S	�eڂ�x,)�%��6^����GF��
#i�m�i���(�Zh����}w`�#;�G
�ɏ���.Q��D������x���"zc�{�,�T!�#`��-Ly��q�� �2������9f�J
�3z�Zp��;�;�Z��0�P��]*��j�D�JR�����2J�QK��BY�|ʵ�D���}9{�P����o?�#�H<�����@��],�S���8<�^��.�� k
�d振��d���,�;vGf�M8�{��#�:stp_�< 1�3�:��t��Y�H
\�a�ǫY+�I�>�d���K�eL|'�0�`[!�
نf�k-2=�#��
u�n��~�.�
b9jTw*D��f��[���O��M�����z���t�Q\ �	�!e0N1`V���3%�V��R�]
�u�G������^�==GG��ݿe�r�F�%}Xo��qɳ]��a8�%�T�[�GmRu����[mo�0��_A�%K@����[���n�:�/���P�P��Zڒ�`R�|�\B��}�ر���sw�=;��M)_Y�}��͛�3�D���U#�@#����d��*�H�A�nfr7���t��="i��>mYY�,��
a�!&)���)1����>7Շ�j`C|����8//�����7�P�.��$���Q����2�<��	~٥��/]��1�Qt!����U�R��ҡڦY�p�$������70�xH�����z���H?"�]^^X�{Tљ��I{dް���l1��3�jf��"ZX�HO��nUq{T_��Z |�#�Bz�c���P�3��
�x/�P�E������u��$�F���(��(��>"$!�!��
�SB�4e6Ś��z���)h���u��O�#���pk�ơ� B��57�&yR}6�<F,�
�!�.�����X���GW� .tOg�3�����z��Jt@�;�)�aڠIQ���pX��븀3c�4)��+�%�e�Y�&�92RnzU��9�>�uY��C��#K�o�Z�9�E��uH�	��w\�		�w��M�v�6���%�@Yچ�)?���Y��_n,��׺]z׵,.��+Zֹ"��+�����G�C�UR���{(��Y|����3�%A��֪bJ�l�'��I��_���~h�Zc3������~�(�e^��|g���!GM���hR<�6�
\.A!??PBt�"@@��?J���|��H�RH��زk�p
\r"��%�O('nPP�#��S)�W�|��k�H)���N^NI�	��V)̰.��Id6��J��â�}� ��H��l%X��m�`�u�'�%:~.G�/yt<݀�`O}ܩ���+?�d;|d=�y)��/���=kWۺ��+ ��m��hcX<[��n�嵹]��b�	!$������Hr��	�$�ei4Ҍ��8X��C�S���L�ys.�j�G#K���MG%s�	Tn�|
��0P9�+H�;�p��P���&����-)��qy��$v���L#�ͨ�HyZ)?��H��%c�/�
�՚v>+D %����BOF�I"�Q��ʦY�S����	n�c��w�'�#:�D'��Ge*�N���6;��3��x�J�}�Zo�D��~y"�
��k�>tx��,�ߕ��[�q狜&�q3|�6߆AV�G�,j�u��'�d�!(L�c�5��qA���ϕ{�i�r�?�x���aY�J,�����iS�9�5�� �^�P:�g��d�tFCo[\0�;���n
�n
Nn�az�����s��w�9�ǜ�]������<Zl�j����A��5%t�Dg8�
��c�������@�Ŏ�_
>�R?֗K(�0��B�R�rl֘��8�BT��ߴB�9�Uԛʐ��~ܿ��|���Sc����Ah�B�}�,�t�>k`�ӠeՠҖ�pZ��\m=�^Âj-���E����
��S�;|*{�JSן�����t�j,�u�}#�DP���Z��
j.v�ɖ=��V��ǖ�_\�&�S�ԝ��,u[�N��6���A7bS魽�7��Z��!E���?|u*eĦ�[����Ϩ�g�ˎa�/b7q.c��br�_���]+� ����=���o��0>m6�5��+��bu�E�j��$�GHR���ݑ4�b
v�ڃ���Q��s͞7xj'.�\��N,�[�����VV�;��S.�Dѣ(��f��m���F�t��:!�U��P�و;c.>���R	Eb�7T�#��}xʉ��
X���sڶs�ӈo�D�`偵�e���HLt�
��$�$/i%�X�R8cfb1���B},�?}B��΢�S��̜��6U�~��YZ�b�쟈B��Dџ�Y^�DOc�
AO꾑����,�N)�G�]L�����5�m0��h�Ea�"	A����j�)2�n��)i�n��H��xK~u9��hT-���"�c�*���Hh����
1ᔾ�rֈ9!q��
m{�p�)4E|A�n���M�0�K��I_}�� ��|o�s��޲uNq >��ޭ�kf�HD!A��n�0���՞�ъ$%c<8#����i�Hl}=~Xī���/Q�D�:3���(��`�\�ŕ35��`�Wz��޷5V'ml��J��;�1������P��U��<�&:�Y>)`�z�=}I\�9�]AX娘`�����7�ғ�ƚxo��A<�;�wu�C�F�D�����
ܣl�7 0*Q.Fц��ʐ'/p������E�<���@	��D��=?[�!�[)�C���@!T!@)��Ta�
�Â� ��)�FL!s.y�����E&�P��E�a�뒩R�`�n�B�!����5��p+��"�f�G}��.�����J�;�d��oU�@T�����3�9hC�Y�̙R44��15��� ��mw�n�	���TnQճ�.�g�M���.�B,s_,)_JԜ�������5�34T�w��Lg0T�N���$���6�1�ҷl��3����/�辏'2�q�U�u�(��璔܎׽���cf���S��Q!��b�d�+M�����ƺ�a�[e�E����"[A{E�F_��=w��;:�'�K�}$hW);R%�7.�I�5Գ�d2�Rw����������4�3���<���v(�R�N�%��ѱDF�-"Ŕ)M�.*
�$�MZ���M�c��m1z질��xA\`ss�i��+���x��w:�����3L�ZnkLbP��e��
p�WlP��N3�L^) ^���;
OC`Sv��&��ȏOM24c��'h	� =�)�8r
����Oy+5�ʧ��6M��)}%����渶�3��٢�z?e��r���/�yE_�K�V\7G��nf)G�"�0�	d���k�*�8��v��22�=�������p���B 2�| ��#�,���]K��(m�"���n�rS�U�h��
^7M��{sQ�hK�Y����B��L���+�|hN�]4R[*�j�Z����[��#A�����dr���ES��TM�O��=��ͭqU3�5���򗸦G7��+�=�r�~a�oҮ/UNyA-/���d��馚��Ȅ�xoᘛ����Sd��O��<�(�9�S��P�zi)˻8~g9SM)d�5-���$!c�&�?2���JLu�v�b��dM�{Q>ūj�/��P����0������xt��5�J��b��A4L@��>K�������s���9��0��>�هS
υ-�|ߞJMg�ʧ?�����8��%�O��$�q���·1�+zhg#��p��pX�3�yD��
1)��0���_��z|������s�Tޜ�W+�����М�ۯ�?
�/d�8�Gcf�BI��ї����8�=�e�.uBY@�\�$Pa�u�����M�fbmQ�6W�Z��alj�hZI�e��M�U�ʇH�۴x�a�<Ix�q�݆=�YLJ��Ǧ�J�j%�nZ��D�s�ԍa�f�w�7]�����R���r1�&�`�dD�DW��N�`4�G�91<c�1�dj�޳�!n���e>ejB���G�a���;���Y2�ݜWz���+u9��k���/X�r���K��ղ�٩�����˧9&��M��3tl�D���Α1�HeUoƦ�C$��^u$�z](A�:��x=����#6l��n��$&�!�۔DY�U��Bz/�<�w��X��D��h�;o����:�G�R^���TvG�~�B��^����򺭼���}�ۘ�ϯ&�I`��Cؠ��1?�w�Ҵ�җUPe�UR�҇*\��$�B�C0�I��M�E�Qc��k�!�1K�)���������ql��ލ�p����֕��w��i�
��8���?71&�Z!��:}���Z��|6�#���3j��x�ȭ/XX�IK�A�0�!���Q��!״3�2�O����|��FpG~Ф��,?�	���Rãg���Nr�6��� X�kap����I=�,���aܭ�6i�v<�A�1�3Y᲌��H����]bSQ�C��'�ˣ��u�i���n�1md	Pf��@_�<����M��q,�w���G�G�|X5�������̢@a��,}��Yzy��e�<�`EE([Z���8%]�����'.�fϽDǕ�'XO������pm��7��
e�3cܡ,hgf�Et�Q���g
D���:E�0�|��$n��%4��U�JSL���e� q巧�!�m%Fh��������VY�c���D�1�'�d�O�c�~$l;q�Q�2��LN�����P��n��o��
��Dҡ���+��>@> �K�¼�+�c��ƚ>��F��1��T�O��R�5��ձ$�[c��{"�	�W�ϭ�}>P͑�wL�'��8F~ �ڨ�u'����,LOȾ��F�S�k�~���-M(�#��6���!�x/�^�T�# ��0xʨ�ێY�Z8���U?�I������{���,f�Jt��`R#T�X�g��4da1���&Wn�WTu\������E��ץ�j��O��lU��?�UP�>��Eܾ{�coG^	m���h��U4�=s����3�}�W���hV��U}c�U�n�M�U�����ō�����]���7��^}���
��y�$��0���L��꛵�V~�5�bm��WV}C@��֗7r��?������x*J���K�|bf�<�����^�+�,��D�}$�lT�FP-�	&�Z�p�#C��EP�a�H�7.��9��K�6rL���+��K��i&'g�����6p-�3	���7}�;�wr��<]�O�Ls���F�ș�����^{+7܏�L[�HG��5�v�*-�4|��d<�����X��-����k	&<֊X�VƲ�����vVJ�&��N��2�k?	,s�u������|n-���Vd���b���U�}��W�d�4ۙ�}J��F�>'�Q;NP��R�s���z�f-��̗
A�����;�fG�sx 6����ҙk�2�"a������~���E%e��=�빍W�$.�vaU���g��?4fҰ�xd�$�h�
8S�A���� �r@:���g�!s;�e>��;�.vᳮ`��g��K߹�i}t���%q.�U-����`��C�}:1QU��W+�y7x�	y}�D{�Ɨ��
�DЋ�[��.����_�Ӗ��Ob]���\�g���+��@`���}��O�Ƶuz~��;������˩�n��M��O�ԘQf�Ԯ�,��`oD/l��NxK_1���V�'�4�ܲ�u��a��吱{�	۫��j�2O��d �\�9V5;{��Tm��ݓdn���c��C��0�J��.��Ky��<!�+4���}�o����e�j7��6�t����3b{�I>�����{{O�R��
#���F���`W�s��9.�3��e����`}�`��d�E�:��	���a�y.�)�&�/�Ux�/���b���A���UM�<�8Wr�_$y�#o5�'�F��yN�EX`Ci��b�2�`�#��b��ew�Ǹ^A=���ll����ס,�>��q�)�ĹN�C6[c��u1���u�רS�l ؝t����-�E��Ȳ�w\�tp��'�
���9�y��Cw�p"�xTd+\��u��S_Z�`�QP<�J6���uؗ4%x��^�0T�7+;��n���u�V9��nx/a�\���ܩ5��+g�;矮����99>�;>�Ȝ�?$��wm֋X�����r(u5B�,����!:
�@6]DGW�Zu{Q���?"kǣ�-��*U��Cˋ�{٫3��8"hF��RN[�&���o-8�frA�O1ϥ��������2?d���p��s�rwh��	j<ta�C���d�[7�O@������Pgfs���om�.�)��ym��Mϗ7=�M?DϮU�.�߆녰�f��V]ƿw��e�w��I~v9�ªKT'��(,	��
��j�w߫w˫�Y�Z��W&=q�_D�'L�7."�{R�m�:#���	���<<�ٖ`������
"vϝ-$7羰��5:�u�+�>_�0�Zمrب�ʾǕ}�W� R��-�f��#����"�£��̙��S�!>��G��(�3��0li�9(<��!��~��[��X8hdx�&;�{���q�7��U�㶟�+����pv�0��%p� ��qj������DK�^�L��h�$H�^v�^�����g�����1��<FhĪ�'&?FŮ�?��x�ͼ�Q7$>����IƂ��ylW8�BS�ۍ]QF�OD�A�-��-g8S=��Z����Cq�?����ʹ�ǽ�݃�xmȬ���s���3�m��I�(f4lbb�:����
�p[=��8��p�L��8g֗��Ab4�T��Մn��O�x�O>�~��u��]����lo��� �
0=:['�R4��DZ�`��?�˴�'n3��	��E����K�����>��fP�bg�j�&�'Z�z��	�9��[�|�hA�	;���@��	x�!�I(����{��a��>椋C>���3n�����b牻'���i/�j|�ӗq��Դf�^����'����A��V>��Y���v,��g׾s����/�����G��~a�E�ҁF�5�h�� G鑇(��W�����t�qz$�΁p�0:�@l|yǂNV��>?�:?�A��ͮ��K��B����>����,^�Z��
;�/�m��]�o�0~�H��"�Q�צ�'����xA�w�:�X'%Y����q~l��/-��ξ�g'q���j�A�<�ݦ��Z����݁�z���zіZ�7wF�J�#,���`U�l|~FQ���}��:�K��)�gҼ��,l���~����Ɋ%�#%�=�Y�d�4FK2�3�ƫ��%�x$���qNi�߂�����:Zl:VСՆG���\3T��q�=B��Zia���=���q<���p�	�����=��҂���<&]�a3ae�Wd���G���uD�Gt$��4$<�7~��Vy~r��KG�{�L�I@� �Ps�8�<�饜�U��@E4�62I.��2�Q0D6������ɫ	��8�0&p����(��t+��X�(?���J����[X+�k�@ߑ�JD�*���	z��A���S���y�ǿሰjg��z�21봪3���^����*����$
��-����(�=�{bB���ЃvP�+�(&F�e$��pO���P���g͉���ֻ�����8(��0ad��Ơ���5+oo�qjЄ�0!��s�h�<�3��''���D�8���!�F�}��̼x��$=i�H�gP�Ab�$�'�|d�s��DXA�ӏ3u���������M�@�Kn�?�
�m��F����^�G��BC�ӆ��ms��J�����]mSۺ�ί���'j���sjT��	�F�P>�o��8NRh�����Vl g�������j�+��Z�{5bTMs���R���)�Ո}��}݀uB�/K$]tx �~~������uG-�,QW:�]u"��Yϡ���\$D_!��"�N��3�Fq��#N�,u�-M���;x�!$0�S��t��b�X��RO	�i�������{�ˠ� ��O�׺=��)‹@g�8�E÷Z��i�J�G�ogD虦�����g��3��,��̯,���Ϩ֧���F�A��y\�N�����9
xƶ�]���·��er�—��0U�/�6��:'��5�M6�
@x
��s��<�41���/������|
�+��:��:��W�65�x���� �Pa.�M�P����a6�X*�f���	�K��&��̒�SO����^,������g��s?�����%}$ۥ�l��3-2���K�ER��@?��?g�����`����5{A�.�C.��1���8S���3ę��"j���Y��^S���ˍ�&�&�����+j!����Ŧ�$�MMKȣ��%�(i%ͬ��,ørj-4��Kg
/����z�}�����j�ဒ���8A��_%Y�(��v�h4��\�hA[!d���ʉ��#3��S.��r��HN(l`o��M<�>�s�<8����5���8�D���/Z�h�D�A �1��ԳZ�4`o-Tk$�����%�q��Y��_bnV,k�Z������ԓHN�[t�#���f� �k�H�z�i�q��U �)��ѓ_$���6�02-�������P��i�~@e��,R�7~cwgo��p����u �p�]�Sci0f6�_��6�7�yZ,�1/+^���팗�h����D�f�9F0_,�$�z~x�5s(�e �	��ja����3!��-:��}���ajd'k�e�CM���f-��ncG��Cm�dmlC�{[Jv'P{ȰK����)zA`O�tt��O5@`��'T�������?��~�u�H`��%�=�g�:5Щ=��]�l�Џ�:3��(i��9�X�Ҕ�z�t��:���U��3{dA����\��q��;��+�"��|�`��7�O�� �T����v�l�H��j�Ҟ��=�N�����1;����ǛB9Y�9%,׮*t;t���^��6�y5w��AA������oww�e=["��:)�lum�&]����A/����%��;JVxЅNJ�2WQƈ�J~O#-�U��5G��^��d,�mm 2�3)s�<�t3��Ď�zA�H^#Ib襭H����LI=N"�D/j_��}C'l�Ǥ���so,�6�wl2їA�r{K�!���cstv�ee���I��Т�>��+�b�K����BF��sQ�:��d�M�{}�)85 �#)K[*�hi��u"�թ,֫	��_����m����V������*�eK�8Ox���^�K���]�k�||�fKǏB�Koy	��{�WW�/��uDң��;���ϵ��Hm�P��v�
7�+�|q��X}k�3����o��x	��әdF���
��Ό�X�閴P>���fR�쓞�'�LG�׾t�[߽�c,�	
��&�Ɗɩ����o��Xh�\���|�K�d��Ac˲Z�|�s��j�5H;9�(o�K�6&�F��b�ye�,c�g��'j�v�c�~�|}R�����8���'1��b⊥#��=`�w�����|b�	�����Х�%w��-�,F��C���TK���u3;�7�]��y;�o6;pL~ʌ���̈=ښ�s<07��$刓DPxB����%̜c�Wq?�� �_��q�q: �H��%�u���nE�]{I�^jb�ƕM�q��ilA��W^p�$�'τ���N}�s08K��:ܚ�G!��:u���k����� ���Խ3Ef�(�.�HZ���W��R�J
(�v��Af/+8�3Ɇ:�����6f���u�<f���P�Ȱ��0�9��e�1YI�3���G�s-)��;;�R3�kw�}R������F���Νg�莲���{�װX�Qӹ]��˥8C��$p�Ų�bY��J,$��L,k1�l����R�\^�5p�� �҇���N^:��r#/g�T3z3�x��_���v�W���9���I���S����W	f^��T�L�J���x����iȫ��+��D���Z"����K�ө��D�ƺg&:5�=ld#/_ʂ�"R�+b��%�%��sP�qE�c���̭n
�����Ǐ��O�Duʖg�N�'Qt`��#
�qx,Q�d|;�\���PU#Kc��@`�T����c�V�!�C�QJkg�Ͳӥ�q�UKZ�XzG�r<���v�ݥڳ�gƕM�-=t��P��1�)�1[���8�@��m�rWM�"�s�̌z��d�p53��w�i>C[�y�ހ<�P=+e<�ɓ[ѣzv^p{v^p{�+���w,���NG�Gq�
�Y"�b��/�"7ש����-tj�E�<_.��{��h�����t"��~��z<
gxR盡"�L.K�(Q��`�q�73�z3�;���?�r��)nf���!�c��ʷ��nj}/
M�f�朧߰��y�>�n������RC@86er)��X."��H���M��H.VJ.	����)=p����8o��ܗ�'�|�+B�d��@���˛��׫�0�|oߌzh檏,M�B򅺘P��Q_��Ȑ�k��D�g�[\�蔊4������$�X;�Ԗ��2�����`��`��`��ܝ�fDOem]�~y'�u.r��
O�=3��1��@��K�w3����(B�����0��(gH3�p���,M1T�ݐ����s2<;��CZ�"�H9dg�U΋�щy�)�a�O�
��
Q�qM�Q�l�Vɵ�TJ6�����3���!V�B��`�*'b��2��u�3z�AYR"3�^秆�ю���!��mIH����Q����4��7��Y{���g����A�c��
����������|�L|@���\/�/k����A�=���L���~7����#�J��?�x��)�:�L��n�����J�•ݑ����g�'����o켬Y�%��m�#;��~e��%׍z�
�K�ї�Q�N��ߡe�����IW�����]kS����_:)J
c�f�-e�l�R�[’��6��~�{F��-���w�RĚkϭ��g���e�ĭ���E�@G��}���}�W��0�������A�auQ������Wח|uA��g�-�~,s��W���z�a�(����R�.ل�0��`�<����`uH�馧PS�a����Mp���n�n!��/^�	457|�Õ���������}��UvAɦ�*�co�{�L����o�v=RGIFm�l;f_�sծ'ݿ���luK��Y1^����&0̯8H_��mb��P�}�C���k~��Z'�k�َA��WB�'̠v��U6������r���Q2�Yos�}������~��=ˉM�z~1��p�o_{UPi��w��j��k��,�,�
��钰i��:N��m�\��a����v �8��;��e;1ۍ�^�c8� f��o�A�/��a����gG1zl�G�
B6�U�B�}��u�n���.H	([�%…��߿���v��|7���יU�R���̱ku^3�
���-2w��^n��pC]��22�U�?̀iUk��i�sƞ|+�?�6��+)
U�sf�ݤ'�xaQ[O~K$�5w��
V?g����>Xڟ��N,��v������w�/��nu��@����_߇wk!���\�Z����y��=�L���pB7��q�V�k��ؽ���]eV[?fn8Х{1(���h4����!�C*����
����6������d��fMcք�S��Q��|��o�:��/X}Do	����;���jm��Y���TP�&.֤�=2*�ߴ��al�L�-�~���Յ����8ࣅl�d=��c�8E�o�xR�6>n���\j/J�����(˖zYjE1Y"^Q-���R,���P�k���2�!��6��Zx�0p�
Kl�C�Viqd}Q�!H?�Z?������+wb�]J�'/�
�4����G޷t3���]��6�oFH�|��7�z�p�x����h�,@Wz&:��V)f5�I�!4���[NŪ��IT�� �c�y��Ŝ��cF`�����Gj�圊IÕ��뫅�`8�������Z��?��*f���0�x���F�8Ii�䅚?�[#�|�����+��#�a~�j�Y۰����Y�Y�PP�G�p��`�<M�VV������rk	�gC�|q����Q���=E�fo�ꗜ�?^+:k�`jֈ�N��f�a�a��9�[l�>l.2���j���z��%y2���9KƳ�	���9�a��h�mqr�-jU��{l�������\��K��K��:�C���I�;b� Sr��1�X;�
�&��S�#��V�XO��;�_��s�nv���y)V�n�����A	���P�(�r�X�-�"
�(�(��g�O�(�`�����&4`J$�c�d/f�<�OX$�~l57�!b���<����P�!'�y?&U�/f�A~���N�ʻr������o�Vn`�LQ�3FN��*����6M�V�tH�G4ܚ:��(�
�7��t��oL}+��
7�)��f���M~�	��,��N}�枬7��.$��D_jd�BD����"���VkI�l�&<�R�����x=R�>�+�g��� +�l�	�X0C^���L���,N�?�z[C���G���QN�V�m2HOBӶ�;�v�I��t��y��<\��l7w��E�Si��"mw՚��; ��������?7�QP=��U��r�ؼs<'>��+��i����1?hX�Ҡ��՚Q�j�&-)GIP�%�(q?�)pQJOq����F��.s\��6��.k��4fc����<f�9�-�,�kg1�ĸ���J�vBsG�ۈ4�nv��{m#���ɶC�1q�]t'����)�K�/�~e���'"��KP�B��{a>��H��"){r�w��=I�.P�)����P��2��`�"���`�B�@R���/Rp )�G
$�@�)���A��N5o�xub������(4%	GH��"	���#$�P�p$��+�J$\�v�/wI\��SȎC�XR�	)��H����Rp,)������:.Qp]K��;��G�1;	�ih�H
N���E
N$�H����(�����I���Z
~��H~�4fg!;�3I�9Rp�H����)8��}��3(�%
>�O��� �?�eh^�ŝ�K��r���B��Y�%T��u9iV��Z�9������X�Aߚ�
O�0�^��KF�\C�V���f�5�l]�V�fխ��˳E��tC.���9��f�g�ps��۵�� �GqY�n��]�a9n�,��D�u�NȮB�J�V�Y"�J�M�f�(��+yTyP�{s[W�"���n���PO��ɵN�ۧ��lÈ^ЈQ�m��
��9C�z�벸���4�1���Vׇ�l0�<[���fQ�6^����f�.I�f�;�<[J�J/���l0�S�-�l�ɗ�fv��_�Mzl�l�PØ���}����t����#���o��G5-G�gߚ����<0Q�M��r핤|Z����V;a��K���T�ׅ!NM���<��P&z(p���/����z�W��n�
;������Dos\~�6���y��l��'��'�,[^#�$�t-D�4�sI�U���,���ٵա�/t�ବ8x�χe븋������p�pӶv�ߟ\�\2U�ջ�^��jݺ�ѫk�m�_ح�N��x�:�'�nw��+��))O�s~rީH�~v�$�>�Kx��>��㺃v�ϡ���+Fא��Ԋ����-}���q����>�� *���/^q6�>��(�ѽu8^�W��槧v�k[�p����@/�HGD\���s�w}W"�Vɑe MF��a�b�n�]aK6����p���\U���M�q[.L�9��O���ϲMv4�!�t�F,�p�+L��X�W%�����S0u�#��z3��u�I<@�nt-��e�©�Ɲ�꾟�l��	=
י�
,K�%)r���܀�����3��TXl�R�AR�Y�4��k#�`���\�ڧ4�9�i�v����t^�ݒ�œ�๎�P��炌xRU?�)-�2'�
��So��<���Zx�l�'�O_&�-/��s��1�� J}OC$ X�Y���(��>ʆ++�!���8J�l��L����k�|�c�h-�򈢉���R�S�p�B]�P�k��ؓb�q�*a�2��&���u�/�7E�� O�A�
T�䟗����h�H��0�h 8`�X׺fk�����xt���^�0�n6��J��I�.`���w5��| �;��9�~/�G�Ծ�F���^ҵ4K}��N��߳���֍<�Oy(�d��0�xon��U�k"r��o��g��������}�lS�|��w>O0*,��Y�+�ap�j�x��᩻:�v�V-�q�K��/�>�bg�����p��N{�x.,o�30b�W<t�ߢ�u{c��l�=\�����3�L+l�g�3楊�V�C�,��|�߲;���f���ҏ�d���-rqOލ�^�����g(��K���#�s-cw�o�����U"��>CK=����,�<g�^љJ'\/tB���a��ao\ ���`��g<ͯ��Z#1n��M�����t��"��f���BꢂD��,1��.l��M�dɵS<
p�%n�6Ot�o��s�Sv	5�3�$�2�������&�2r5���H�c6[	B ��Eq0k�8O��+ƹRPvU!�U�䇊��!ߟ���?O:�b����X���O�-j�f�F�O1�ė
��C����N��v�؂��Z�+7�8��DYo
$�������e���8��͊2��ڰX>�����ޢ�դ-�=[I(�
M���ި%�=���QU���x�rP�ŃĈ�sx�����-�����"��3���fx��(}^��/ɗR��m�*��#cn<�.$yv~7��=�Tԋ��~�o���W�z��T�ԛ�w����g9�9�����
�.���J�
	����!h�� M��y���GR���?זy��ҿ���{�m͐P��!�E���y��`!��Pj\3�3ơlj4zd�}�!RZ�B^�
�	�(�kwX2�|����W��|ge��Ж~!�7�%]��k����� ?����ѯ�d}�6B��Q�V������F�G�l��\��B;��ݬ?˻�EKR�{p��i���|cy��N�;+p��_��0�T���>�����'�d嗮��Ƕ���G-7�=
�\t�L��
ȰӾ�>:?�M=��W>kn�++�[���V�1D�Ƙ�O�m��+��9��:p64�	qa6C�9�������_��߽-�<�{k�w"H����[���-�{�O�<E‡�(�!@)���D�F�ň!`�s�/؞�5�G|��I^8bo��g�ʌ����gA��S�]���%T(ˢ�6Jb�G��]|���9��&re�>�v=��l��"l��+
|�G��`��e���	���b$`вR����3s�"M�^g���p��Ƹ6fR�2��������;����BcE@���YI�/B��F6�IP���7����ނ�;��Q��?$p�*�LU�,YA�@���:�xQ��W��$�^����d�t�R}�H>;\�c�5�'q�"g��d�f4^zO&wyi��i��<�n�7d�j��l��"���%ܣ�e���0롉 �ta�S4z�i-#��$��|���dղ�{�F��VS�Z}K躊�"=���b����a�[6��	�1`9�Qe�>R����Q��.M�JJ����Nh����/�����``���|�f=��;�-���}>y���~k��r>�3�RG{��s�s"���%�#�^�O��@���*e1B��s�鞋���?�U�/��
:�
�򾈲(�#�
���.�5�JPUt�0��_�k]w���ťt�7�~�+�dd
�,��yJ�[��!/��-A��MX�.�S Z/b��_o�3�(�&�Gb�΍)N�8��A�˖��
=�l-,�����==uP�Xi�=�T� IE����"B�P���(�-rJ�ۑ9���b�8�!�G�d�.t1��C廼��N"�����ZY�� �sP��slV/��Ը
��&���2/~{�J��k���!��[J,x�\M��.`S�%/
�܆��Y^dy.
���S����GɃ
\�¿ù��c����
�2�E��^����눥��?��8ަ�pD��co}�8
��������	�ʃ���	|�xʩ<�K���u~��8s֫=����OE��1��|U����9�?�t7��tM��j,BD!~�<���_�N7�̸����ǫF����Ѩ/��ea����#����0 ]�ji>��ڟ���[:ƯE��x1k�*c���m����@��
�[��G$��6ͅ/������:MKw��ͣ?Ȃ���-7��>��`O���mF)�L5I���R�*��nZ6�)�n/U9�~���A���h>9L�~�
!2�[�Lu�<(5s�W2f��s���^E���A�'1n1v��{2�-ƑoU
2J9�UE6HQⓈ��h|UT;�R�!`�V��z�w?�0{E�$� z-�?�GRM��肤�D�+���52�D�Ij䨜��{�"$M.���������6��t�ğ)�َh�l�_4z*��e��z�ȡ�;��D���%��$�!�U�ri�������PJ�n�������d�t����x��9��b��؛vu6��Z!�� R�T�!^�r�!�J*�>�x��Y,�
�3V�P	���Yu��t<���lz�ƶ8�V��C����]������	b���)@3dž�b�mv��A[��k6�U/���h�j���[�����RvJ�Q��NI	��+c��7�<Y�#q%�w6$�/~@�B���+NH)R*���2�r�T�j;��I���^]��޴�P1�3������y�KC_WmK��*ij�����+��bX�m�)O%�2+k�[�|�ss5��[{N?��"*C
�"�wb=��-�%J�!Ro�4�����T}����~lζJ7>~|�
tj��Ahk�\e�"����$gm�2;�q*� �RՓ����V���cI�^p���D8 �6��`�����l��O{5�ުg��K��.�8�~f�E��t�!������~C�V����ٕ�;~w 5o1c8��YLni4��~04�r,pN5���z(��g$R��y`���n�r��.����w+���H�o\��E�\������R���G�QSg��CV�n�n%���JLZѵ�Y�g'
��<܁��W�M<+F��l����ʚ�/k�xH<��{��͠�*��铞�`Sj����g�9B����J�#"���Q_\�Գ�^pф�gR]r1V�z�|M|3�Ҟ\��Ҟ
T�o�*6\u"�	x�Y�R"����+�j�ȾWv����-a)+��E���Y�o�%Ϸ4�ʦL��)�n�4���ɓ�
J���4m�ӓ�=]�>̨L�2�jY 5�?.��z;d�,��˳��ܕ�zD����z� ��}�u���d��-l�_���釃#�X��X�O�N�*��{7���EF��E%T�:�0�{6�'}X���7����eHH"��No�\Y\�~ca��b3�ڊ��&�P�xj߹]A�-�B���t
d�ҍt#S[��5(���-���G���j]x#p�0cr��>��6k�|�K
���0�kЌ]���5@�D T9�~��F�c��D��dR;�ɟ
�_�h��`t� �1p�UIϘ|j@��d��=�y�u��#��f(�:n���*��*?b{��'�����C�,eMu��B__���/7=4���W5��l�*�����ox��k^10."�7�c`���B��l�Yp�M2��W����y��,�1q*�p��<Jޑ�E3}�B���{�EG:���Lr��޼����.������c�.�a���Z!m�`�и!Ѽ9HY$g���m]u��3t����o��5��k|���Y��F/�ydd�I˝a�m�	�}"/ˮ��#�rd� M�����ɻ6Z��
`W����Oۂ
��"{*����7m�@Gmx"�K���:�D��̡�D|��'�kW0��ȳ�wND�þfX_̈́�l�@;�w>J����oR��ÒχqXsr�t���'Ր޽_x�8����8�Ÿy���n�uY�:D������.�FȒ��g�@69���xh<=�]��|5��T���³k�
X��uC��� qz�Mv
g��ү�U�%[~�����)��\`;�����[�S]C,\F|��L��򥝔#	r*����|]ks۶��_�҆�G;�hF�L����$v|�r3$AR�AQ)?�H��]�DI�`� �7�Xg8�E�M��e���?h'���>�}a+����X�^v��m~��#��lt3R8��z�U>���x���Q���,�v� �����}�;�L��-���|i�%>4^k���s��[wp�ЙEÆH<��+�	��Z]hD��
�C���8���P��N�HJz1��K;~Rm	��!Z�v���C{_�?�%�3*LG�/�D���j��8a6*�%���Wo���#ZX(	1��G�;>:�?Bxg�
�-�T�{����b�R���"ᡱ�ں��~ְ�J	��?O_��"�Hԝ��S����N}���L��Aty��̇�2 )}�@)�w�
�v�2��P�_�a;ID��:.>�<MQ�;��U������vt�T��=h#K]�[d�r�����J5e:act�Ay�!���K,v����e	
��_�'������,�E��&bz��J�}s�˪;jZl�\>
���xѿ<��m�ʱ	����_c�A�xǷ��t���;V�M�eV�Z��r�Ҧ�ء���1̤�Y�5t� &K�9�Z7*�$ɢ,�W��)���=籨���e��K2[�3a����ά�$U���G�?���Q�(��A�
�4{a�i����s�~V֫m��ו�?[!Qy�r�ֻP�%�s�{yv����p����W�N��]����9m�|�����×��͕�}�+ϠO��wWF�Kp�wWxξ�A7b_iwed�`��ݕ���
��!�n�\a�+P���l�Ν+�
��!X�R\�ļ	/����b�ظ뻛������3��fj٥��Uv7��L�2~\�W��XZϊ�R9EƢv@���:�,
�*W���r�ż���~�{Y��и�a��l"���zl^k;G��x�7�-��@��+��P��۴m�i��NWU�A�S� �qm?wȁϽ���D�'��p�Ç��r�l@��h�(�@��p���dMe����G�	���ip%m3�c
,� ج����
5��BՒ����w�����G�~$����Τ Uֶ�趫��mZ@}v�6�l-T�'�:m��j��BEdKH������V(�{K
�C�K&2�@�z��$<Z�⻬X���j�VXtJը��8;,�I�,<-���Û+W:0p�.K5��9xw'��2B��aN<�"Ӗpɶ%\h��SF�TI�}�u���&�5��CDR����/�͊ɬ�1�Y�[ם\\O��M���z�$�t=����Ir���7�x�� �*��z���́�������>��r²D��2!
KG�\�B&Lф/c����Z�2�9��'�ш`4NN��lp����♘8$�HS�<��� ���'/跡���߰P[�qPEB���<D�c�M߷loL�EhO���{1ީ�3� /�����v��k[F�h�M5쀥S7;Zz|�lY�b�.c�X�Ǻ��`
��Ė�-Sݟh6�)�Q��ȅ7�$=�v��:���w4O�u�{�)�T��|�h]7U��dŢ(�=n@f;��9hо"fp������4��T������Ҫ�wp�Yf��]�!���p���Q��h�Ǐ���βzlѪ�۠��V,�0@�Z�;�����+����r�����7�|�=�5~1qF��uw�=o<u�85nm�~"�?Evb�j��)r��ȼ��*�W�ΐ���.,F��\�0��s�`Bץخ]w�8�`����*m�	aMK,jw�VXO�
�F��e	vA�D+�ۙ��
8z`�
�X�z=o��5M��x���-����A���>Ϊx%k�]�|��_ө��/\�2����h�xpf����GY.![KDa��q��}��,�FjQ���Q��2K��A.�R��-Ue�Fe�f?��&Q��c�6��Q�ATɤ(�?(%���	�)�Yp��<$B�d���%�*�B�b�*��=�Y��+Y.мd��̝56Y���O��
\��-Vd5��.n�ɳ2Z���A��n&Pt�¼+��=JXH(/��R�7O�|?�*�n���0:��>+�����Xb�8��o�@�2HAHO�ap�r�w��_n��l�&5���ah�H�t����с;y���}O�&d3l��n	����o�J���e��ĺ��$ʛE��=���ȣ{:R��2�|�`�T.͞��J}�3�@�[�aP��XM#����� #їn�pۈ��ì���9Dz��"�)�:'��|���[o�֖H��^(��W'Ц�u��5
"���VE��s���u�V9[���}��r&r#���&.���Z���Zh-s%"{C�}�X��0V�3����][WI~�W�'L�A��h����
�fw�q��1�A!ɚ����3�1/f�{���TU��+ַ�8rΦ'j$�8O^����Ic*�Pfq�(��͒T-���LSzZ	k�:V��)��i:�:�=چא�
u
3��x޼�}�>{R���~��	ǀt�E�t�Ϩgk���c�kM�F�Y��F�.���(�Ӣ�p�@����Y��-+���(3}o»�sZ�R�A�f0��6���d�r`���i��Vm8��f@Wvײ�D�y�h��H�J���Z��R�=T��@B7�5.��n�Àm��f?��E��Ռ~"أ
G��N<��][�n�-(S?A>z�8��I��^1P����b	��t	�^z�6ܫUqA�"г����6r�j��(�7tS*�1r/�F�µA�����F�i�����7���Z��[#>�sF��l-��J�i\��-up��>Z���g�Q�h�ye�����gKr�a����Q�ʚy�C�H��H��`�ر�u�s��.t��������9�9����RW��x�������
#��&�uL"k���<zJ� ,��f�C���*�g�����hˌP�&IL��|��teW�D���l��gˁ��a�%��PYaE�ce����T��[*<C�9�Ȭ"���SDG���ʊ<�ϑ��ڠD��@
�C������'���l��tԅ�|�Š�m�9����Ϲ�?���c���*7u�@%\�C~�u:�����R����Fi�+/���&y�I����M��ӵ����d��gq+7�0=O��ə���>
�–��NKE�G��=�:�u�L6�Jy� �	*%A�f�'"�.�g_0�t�I���C+��_ŠBfG��I��,^6#�DRА���0��m<��hλ��LD��#��~�=�f"t
�3`�
	MR�Rӊb�0�ĩI�T`4i�A�8PZ���祮�
\�3�Į�.'$�7���E1��>ġ��`�DOHd�
+���U��B�
��NiN���S:,'��[,oFqI�>��0xx��I�%�T�L}B�2"�Z�Y��G��d�ym?2��M��}6�Y�2�Z�Of��l@X~aB����d�w�|���Ȏ�}�b:�3N�C�Lo��EE&��/|xMH|M�¼�\�.���V��4�g>�)���M�Zi��%�_%��>U�_�JLd)��>��}
�g_*t��(�Ŵ�Ō&ф��]z��ɫ�CV�ƶU뭙�^���Q���_���s����c7�چFE��XVO�J�-�x�Ɂ����yw��vHE��d���B>g�1�^�.'DK$Z*i;P@����oN�&
��f�7y�و���J!^����͍Rsۃ>���C�*�H��KГ�d�׉ij:��d?E�\�����H��P�k���Ko�MC�4DSۅ3D&�g)���'E�ah�p�Zc	cw%]�Yt-��Ϩ�~�i|�T�j���6!h��NZ�����1/z��-�Eo�g��d{��^dO7�e�~6e��
O���x]g#�2_�<��_԰��Ml��6=��}�L��n�ݽ�a;�q�`���;���+�L��,=9���hL�N&.�¹+g������ݏǽBY��^��Pv|x���](���B9�/�Å���}���'�e���vU�T'��s3�1��y����{{���Eͮ.�����Ƕ�3�CT��:)���C�G��	�Dt�'F�SF��.��۳C-��{�;j�`3���������{�6P�U�_�FRv:&Q�
^�����F���ʥ:/���5mm��E�ǔļz�S�ɘ�\��%/O��]�5�#>��`[�".�����M'���Vq2�IY�m��TT|+V�ˊ�Ŋ
Y�X�)+��*�]T.�kKtcJ�2ӷ��4oq��T+֗�}�!	kց�&[�*j;�J}��>�r,��F�ImX��Ձ˹�"����
T��˽����i�ܑ��˴t&�󑪰DG���`PeuX��~�-�D���]Q��|?JA0����ـAa�w�H�ӛ��?���]KO�0��/�8��ǝ���C�8�i��e[���LT�&�;�c��m��Q'����	gq_�+}h@c�G�B����@Qnl���7S���r�H���/t/�&9��y�+E�'�9����gO���=gv���xk4A#��r�tH~Ʒ"_}�Tv�e�N��h�ٍ��_�����	-F�B!�+Y�t̓I�b�h�z��(�Wɛ�e�F9�0i�gY�C���53a˜ȕ#��r�!��/>v��x���E��w�M��6��l3���6��ij����4�H��D�h1
`\����%���J�7�ā���B;}9[��7�����^�j�1��*���$J-lV��5����O��3�ɏK�w� >��	�Q�m�T��mi� �?�pZW-:C��3#�ln3jY�]Q��X$c����yg��j}h�ہ�a��oj�Z=�+~�ںg�����|�1�3�j�L����GlH&�cw�Be?��
/X\Ђgv�Ʉ]��� �`	�#-~���]Qo�0~߿`�aH������	
V� :4`OIyi��B;������>�I��I{�����l�}Gah�CYؖ��}5�`�Q�����4;���&�_��X��<��㜢�������哾�.��������՟'��h��X=i�Ҧ]7��
[q��pʼn�gn�xV,�r����#?�#������m�Fo�g5ȴ�7s2(ߺD뒯�z璗��݂l�']��X�Lo��D��WJ>�6o}{�^.�o�u]�ElV���'Id��$����z��T���V
"��uz��8����}^��*6�P�[���Fw\m����j�kn�_���j?{l2�-ȷ`8d3�챍�?�6�K���wD6f9'f�8a��_߈�n(�c=���:̂fU��F�H�iՓq�Z�4"�i��t�)-�PM:��әf�r��G�r��&����ԍ�.�\�nHw�.h
������n�m���c|��K�>�O�����R4Y��~��>X�`�i~��&'���*�6V!��Jk�[����� x�xsw��U�o��[��E���w<ӓ�>r�۳�k�qaɸ6
���{��K[a�\���}���@Ya�})��3&�:�nz0{�3ch�o? ��������he��>��p���ĕҽ�!��ԍ靀�h���i3@�.�R}F��ԁ��'�כ�Ō=1iȰ#�Lph�C���y��qӹ�*�9�>K)K/fS"�`�p���ܫ�Ӽc3�J�c�P���j0fK�_~�\d�fK���(�pQ�ك3�E����9oȤ�`V���B
�J�	~��(U����˙�����NStT�����㿬'^苦%%�t�i.&�s�Dv��9n�M��lM������]�r�0}�WP�u�b��&�`��	J��4�_B���C����Z�d �N�h��,]�={֊��-���Gu;�
$"�A�M>��B���ƦS4`�����]����F‰��v���sT'h@�����e�c�F�:�W����zS��aˁ1��0֘&.[�a
A��A�m��߁Vi����N�W�5
Y�'N34��иm/���j��"��fӌ1^��\�'�քl�Z�i�o�U�.H���)��.�9w>���E@�bb}��	�b��ƨE�n6~!�5��&�����̻�vE���Ԁ���\kF5T�z
�n��#GV
�x��2M�zJQ�j�0y�PM����ZT�}���Z�UC�
���W�;�m�9:<f-��?)��y��}��V����Ud_X�$@.�[[���o
��;k's:��ږ���N�e��;N�xG:��%�ہ,6FbgvH��g�����h�{�,Y�d�3��#�j�Y����&��.$	c�J7:����Zu�儡�H>a@E�R��S)*
���U= ����9�j�x������z5�*���-��S�E�U|{0�ݣv�|~�[�K��d—BQlߦ�r-����tGm�D>�2�﨤�|jZ�����T`ME__OS_|�z=ŧz��K$��8��Ħ���IN����iY��6`M��ճ�k�~�mV�);roO��l���O�s��r��u����^�.�q?|�dc���5Bua0;��4�&�j�NN>�r1�WY�K���c�ǝ︽-�������%���IS2�7c4��/z7�n^W���x��`��f�e^��TK*�% �bK��I��m�HR�J��D��^��`9qa�M���1A[�k3��G\�x>E3��)�N"��Q�,�O�,����\�cܸ��eL���bʓ��f^L�"���V1��s.CJ.�@�9����I��%�3�Nm[\ث*gw����J�.cdw��5(��j�M�]�17�%{(��&4��*YN^��	i�����۰VKY��PE>���*�:!����E��|��T��r�Qռ�*ʝj�B>W�M&��P�Qe8*8;嵪��Bb�<#��
��-5߼��h�Iݪ�NIl������]kw�Ȳ��_�YY�'�3���0�����B&H���o�����-!rr瞓5��n�[]��Gu�޴�_:.�ʝ�:�W�ӧ$��@Z5��zz�2��������݀|��ZS�SE��"����(��@ISF�r}t�Qu�g�5�|=���2N�ź{���3ݤ�.=����&�OM�*YQ�I���P����WMIg����.6j<�O��
�t�DP�^�Eh�#��تB=BR�P��'�O�>�����)�{��υ�=C�[����}�>��5�c�s���t)�R�i�[H��p���'2�0vX�2��t^��
�����U�$:6�x�#�ၪ�W�~��d&��6ڀ�����k��G~��pduf����Pŝɖ�v�@w���z�A^4R�E� �V��]Mp��4A�R�����U���������sxG��Ť�(�Zx�Y�g��������U*>"'�1����2��ku��{���2��A]E�6|�C�?�1���F,��V�D�GG���Jn��V㏝�i
d*@��U
�aD�72��6�VD��m�v�VlUbINy7�g�Rz��F��$�K�''�Oq�+� 'uzl�E��r7���:��?0���yh��9�N��`ʷ��+=��|3������\�M#=T��{�#��W�#!�|Ǜ`9v�L��\.A�jd@?n�/�7�z�*�_��*�q~@@��B$��z��de,�1���3I�Szړ_��Uv�4vdvg���?�v��([h���Na�B��94��b�ϙ����[���X��&X��;��a���s�Px������ץ9�,�s���O�N|b�^g�CV���N�fIJ���D�Q�;�=~����!���!no��C��f�����__�b$����3�t{��;��v�^w0<��;���v������͛��E٢�مn�I�?h*9�Qm}�y��~�~;����e�����V	�-��{Q�r��M2
A����Ԩ��p��;d�9卾�st��Q���Tw�נ�6��3�Z�/[�m���d�E��\-�@2��x7��ح
�m������v��k�%�������#��:��So�4K$k=�[�h�

��\�'M�4D�*�t���TZ�V�"��8�c4�ӈ@�-��h΢e-�i��&�,�?�ôś�b�H�
H|�4�AR�T��5\<UHՎ��n�ڏ�F�1*����@�{&�V"5��u�ӎ�.�؎lBK�mgUh;,�D
�lF�5G�w2m��m�\5}��Ώe}>��!��˄62 ^�!ݘ�20F�*��A���7��7f��y�[D��g3��.�ǀXky����q4:��{w��(��*�h��1}^���RI�W�/=#
��ML��.��-�@��>8
�#`r��[MJ}�p����7�
nc�<	
����ę�GF�~�a��U�wWâ��|��e�����Z�^���Y0�z�M-��P���=!��n�U���E�J�D�����WKz	X�wS����_b0�4Rwbw:���,b ̚�Ƕ�Ȅ���\{2C�����S�~W|5z�аRO
H#Ӑ�q{p,Nݰ�9Qa�n���F`�Q��i8���H���&��*��kL�����A��<װ�*��Z�����Q�: WE�1���|1��G�.v/����U{B~Ih��h���DD2U�����]��^u^���ӽ��%y6�Kޥ�q�(6�uP�D����ȵ�*��n�hG9�!z�Nb��M�LԄ�<<h3"� ���`�a��FMxnp3�f�:�c�mvb�a�^!%ew�F#n�b�AE%��2:S�!^�f;ŝ�rE��(�]��޵��p�]�IF��g�'7.Ӭ&���Y�S������ٶH�y��x���ݴ����_��S��u����/���8��3\tڏ]͗����� ���(���� �H�YbwJf�c�@r2�Q}T"{���I;�&�~��>��-`�i�^�������{U����`���')�l}R��R[�&�m�|,�>+$Rm���r��r�x�(�.��
"���(Q�U�s9t�J0t�@�$4�;�U�&:8ד��{��5���ss<{��_c��cT�����_o�ub,B�\og00��$�NAw]ޏA7R_��9*�uVD'�#+dՠoq���kV�.g�o�:�4��(�x��J�C�V�&��?++n=/CpI�e�^e3�w���}���LA{��HԀ]�˘��Ӫ�+[��a��f����e�`i�nX,GQ�������y+���p���h�M�Oӥ��~���1�?�:���U�7]���H�)�JHȀ7E*!D�<}�G�4��a�E�ۆ�v]��nS���dK1Z�?}*��B
=/^
b��:P�ݤ>C�%��9T�7L8��$�4S�:�!��X���R3��9��v
-�*�O����Jh����Mܕ�� 'r��mu��)^28�z�W*�ŕ�Ҷ}�ZU�pBRGO럗��B���O%�9�0ZZ��G\���L�����1u�ʒ��-�7_�T�c��%�5˫ly��[��dg�8Oo�3���ia?�R?�������	=T�C7�ݤoty)Ͽ�!g�d��u���8z�H�v}ѩ����~�g��>�74��;wA}D�Mz%�t}},U�I�-���c.��x[O��A��'�7� �t�� 7�s\�Y��V�����tt�t^�%�n���F���1��w�o���I-�$�R]WU�<O�ߙ�H1��B1�\�j#7S��w�i���Ӏ��#���'�|��]Vj��P{���X�}�}����u4���/��*WT�Q�������2���'2��o��E_Ϧ�����:Qc+�9<�~�5s��WQg�ێ��?��i��ƹ
FrB�9=3V<��Г	�3N�����H4⅀k��4h�?_<̢�s�-;���KNI�_]�5�5�>-�9z�>���m��p�,KԏP����!�{p|��<$��s>�,��l�pC#��u�|QYi�s�v��r��4	�ۇ��$����:�:7�4
�D���E�E�?�P�|,�Dz���uaօH��%lH��-S����Z�u-�R(<ō|��0M�4���v;Ǽ��;�
c���2�i�Y��rZHia����mm��<�ɻ�ݰ1�ш����g���~�s���
�|�9y5<z�or�=�j��(a����/�'|�#V6mYRqv��v��
iYςg���i9k�H���&]S�q�n�-N�o��HH�'�;��2�'=�BZŤ���zd=K�*9��%k�b��yBzҸ���h��oCa��ԛ��Y��>O�%Ua�F�ch�Ո�G�˫�ݫ�M���U�^s�z��Pdh+�s��H�ӫGze�Ǻ�
�s{QcF��J��B֯���U�X��L
y[�9�!*����(;Q��;�#Z��{��92�3���Չ:E~�J��;�;4��SCo9?��o��N�<�t��TS�TGYf��H�l�d|<O9��F��6�T`9q,py�R�)�1OFx����i�~A��'���yG��Mc��Ӽ6�?�"T�,]�zE2<ԯ���{�ct�5��CWW�����Q������<Io�R6
��HR�sY5��Gj��̺�LK���L�%��׵'����-��.��%ӷ��|���Kv#٥E�ɍ4��:�䚈��N��eeL�^�O��9�%(�w��ۙ�Q�eh,��ɟ�᧎�77=Č�~�n5���^�1Jq�~�3��L�$��,��z&T�'��M��p�@�4R�>��i
M��8�#�j<κ��.�Hv�|���r��h7��&�+�ʝ̇�s�GƼ��i)�,%���[�-k]-�Zz,%vl��n&l$sƷ���c�:�UPl'Vb'�#.u�#��1!�+�O�ChT1��~���
�u�n�`�}a�Ժ��մ8�O��2���Y��n��
���r]E��V�(�nRO1�g��u���{3�o��!X�U��y1ju����t����G]6@tZ��i�4Y�H�d���~$k��~���Tfu���괼�﵉q�:�;/n��GFs�Ԝ͉�L�m)U��B��2�&��TH��s�}�TRT�f��֛�P_�q�}\���6�!W��x�">K��<(���3�T"����R�����1��
>��+bA��c�LR�Y�\��I�r��Μ}�V�,�
^�_�}�K#�iT�ю�ʭ�ye}0XN�FN`�\L`�<�d�`�����k4���v�k�Kc��z��"�u���?f��|�dB�+���AX1MqNcr��fG����}�Nj�I��&H�FmV"�`�p�B���S���g��Cj#�*���z�y�J�o��V���Yw�_g��Z�S�RIv��ۧ�r���C�Vk�Y,vCc��6�>��.f"��0�#�n�P��s쎣�3�3'Q9�ۣdy��ZmhB��%��f�`/m���&c��O��7h��8p
�:���&横u��)SY��H
�[�:��G?-���GCv���N/���	���Ԇ�P��N�¬Ԡ͇�Eh�!�k=z�����`ɤ����7a3T@�1+�=��_�� <�
��$�s��/ʟF�U�L�h}�HP$���A�5N�v��Wn�όO<��+:�r`"^iR�Zȟ(�Pf9���9�7����^���n`�X�g�"l�hI�F� �-!�?C��(���!o��E�����oNT��]\��r�4Z+�ŸS$��Ybu���r����
�B��C�g۩;r����P|��? ����VNt�7+=a�=�ey����_�)��ɇ�A��B�65C>Ŗ.	+2usp����iZ(�Q��'�l����]iS�H�ίp\�])1�6�KQ(�@ 19Y*���6�M�n���sh$�,om����h4����t���ȳɏ�z&���|��S��-θ(@�ݔ�M�Y�U��)���U}�NQ�̦d�Y'���v(x�Y�0��e5N�޴z��(���!���R�dm����*�ͪc���|�$�����v&���vݺH��tBL�:"2h�����֌z|kqa{Y�����X�F�Љ.�i$7�'�Ko,�3J�RQ]�wRE�q�d���c�O�Y}�cV��c��'{��G�}tY��j^�缪8�� 
8�5�h�n�	!�<��5�Àu�-�Q#yOnd�ؠ�v�h�8�+<��1�m��A�{��h�[kiFe큑�N 39��@	���|0�s���9�
N��0�e�9B
,�!���'��ϙی������Ч�
J�5|K��hK��;��?�K�T��Cn�E����)&�+0Rڿh_��e}�W<�[��2���{g�4���ȁV7�ڌW����O&��ʱk�u��>���@����	��Y%��,F<�(r�D0)AҩJ|$´��&�[o>ywn�|ű�AV
�,T���K��j	6�	�)�c�l,�����
m�.E@��?s=�������c�P7�+~p��+�6+�9�=xe��b)����y�Tg�R;�ގg,�����H>Oh�; ��OI<�Hݕ�|e���_1�uh�8t/�@�*�ow����H�\��4�����b�ǔ#c�r��A�3�'#A�`�qsc�#�9�r`w�O���k�
�N��S60�+�I`4�O�/�OX�j���j'T����D�r[��a1k��K�ps�w�[��Eo�N�P@�*�ř��XZ'����1[-�bq����0I��9C��TZ#�n���j�T��o�[AX�Vq�=K+e~p��j
�D��Z-�����F�^�6�pn�T�B�28/֋PK�L��2�;RHg�+�B|�Js���ǀ(�QDL����
��VK��i�2�k�$9 ��F���,s j��]Gp؉t���3��T�B�ݝ�l>�1�lzribL2t��@b�]�
��4�G�>eB����t��'�%$��wE3��։�8@�r���p����&�#�~�+Y�
W9*f�Cx���0(��|92��{>��g&��S�
vYC��چN��;o����a��ɦ	I��ԤJb���a}�a����Y~���y/9~Y�9�3h�ש۲ˇeM�u�%�~��jَ�"��C�^z�����5��z�yϩ�
�(�Q��B�bj����4�yǙ�g5��^�x���{�E3��؞+�
�G7חuS��Mh-�&���Y�O��'����Yv�<,��Qt�>�)~#�xH�i&�"�������?�;-14���MZB�ū��n5�>�YѴ��/�Tm	���x��D5�iz8�_?���[諃	-#$_G�T�=Ȼ�R�B���[(�{@�!�R�k=��/�m���C�ch8Q��}I7}H����Ap�X,
=>>}��ƚ�E��j�Y�ƍ��/��ku�=�=9Q'�}����_N��kЇ<>;��Go�ᡮ|�w��tA��twO�c9��8���=W���L��T�p��x�[e4y�a/;�U�>\\��:"&�<9��;�C�=<aܱ����v��fe��HӲ/c:|~6�[��[��93�@m�2s*c��ʗ�����L��C�HGn ����)���
�!#��l�;�V��x�����n�no���H�IDa]D1�R.D�_�[z��8�ޜ�G�P1�}!�36X�t���ġ��+(�Q�s��I�sh�}ev!�����f%�.���vń=�s��"�2����4�Q����)�W$��ɔw�/t!(�S>+��Db �y>�9��=krm=��(8?�/m�K)%4��C #����ԾK��c�f���:�kaY3lJ��B��wv߮�K��˻z�n�{2=��z<K��ܰ@a�w��=9`7LZ!^"0�������S�1��0�$�+դ�W�"�2S����҉*�^
i4����E�|G/��JV%b�f+�p�v��]��/,�9��Q2xGg¨,�	Ģ16Y*����vR�.0�f��P3�"m(T �{��w�Xi�Dt�ě~����o��)�O4tf�`6 �ez����~a^����N���&lA��Hb��d�*���$�t#/|�DJ�j�X]ƌ��I>��ed�+Ӕ(�$����f!�nl)yh=�,�8JMIV���v�Y<=`�&�2V$3��cCj:��,����@đ�a1���WO���ڰ�W�qEž_A-��
�bV<c���>�&�v��Q�F�pU�%���z�Fz�Tp4�۷4���Q��\�KE�����ɣd�f{E���iA/r�%)fg�W��4�~Y`��)��%�k���P/}'RA�Ӿ�8�y+5a�(%=�-e�6��Z��k뛫��&"��[���^m��7��/��%���.\@�v��4Y簂�ƚ(ov�֛k�HF'��IR�������Pb�LR�����%��t6�@�X<�Y�r�$���\T��ֲE�o���ϼh�Y{��4F��l��Wo�n��6;[ۛ/�k��j��6�z��67.��G��/�Ŕ��
�j	��R�q_6���0^ܳsv#�`2�$z�ը`�1BRdv��'� ����$N?��'��߂�I��/VaÍ!���Ɛ�[[������G��q��]7��+�[Itj<�ٷ�(�"�����/�R��
Ԕ��@�`ѱ���"��ɮu8Իހ~�yէ�~�~�7��Q��:GggV=�>�00xf@|j��O�F�ep����ն�qͲ%Vu��hL���@�i?!9�q0��*Kno�����˖�����%�p�O���`�x`�&�@[h��!	\/�1{B"c����> ��(�~GX�6s�8��ѽ�a�m�>��k@�v�&�/�+jЮi]�g��
}���
]+	�tـ�iu����
��c,ؽ>v�+B��{��#!S�j<����eX6���	u���((��$�v�ц3�Z�gY��cRR����C#N�#�#$�������oׂ�U8��4��X�Ի���N�^�fGf�xd�T+˶+��(�V��-8��Vz�Ur칗2O[D%Nm8��૳=o���H)�6�#@y1q	č��qB]t,��柘�rL/�nT��Lw*�q{GB����3�l�H_ԁ�Hb0E�1`<�������y��~�����+;��\�r�&2�O��rf�	���򲚌/A�Di]�^Q��#mx=��Չ{i�zuu�,U�
�bX�`9Ǖ{�Ak��+�}}=�q���t|;q�'D~�J	�8�Ⱥ#��=
�j8ꥧJ��ע�y	λ++@��z�1�f��GT<���IِW\cA��R�U2���Zԟ�����������QE`ٺ��FM&Iŏ*iĥ!L�iNJ*��)��7��w�)=�Ag�O+���?���X�}M�άVqٵ��W�O?�Xb����Q������˙��{����X�>��AE�Ҭ��bE�~5��q5�4%���?����Nr���ʟ�g���F�"z$<���M�c�M�d�fK�o�f�m�j���+��bo_�>�B���������Xko�6��_A`P8I-��W2�i&EL;E��X(���H������=��d���‘C��^�7���=�j�e�6
�9�-�!Ӫ�M���)]��>ϙ%������#v�U���d�f�jt,X���3U�K��h�8���W�].X.cQ��dܰ��,$i��2a�ļ`|x��鑭e.|v�v4z{� �f�Ei�,�����؅�Z�5����U97k��K;��J�r-c�"˔��3���OG,��c�ad���n�+�>KD�lT�n�*Q��$%�62�ER�T|n�����V�'a��4W��8R/^-��c���P4��=,��{oV+�6B3��G$`Lk0�k��ذ�M�<�(D��ʴK<���s�J+,�wĘ�J����m��t1aa0��i�? �j[z�f9���;<����Uފ	g���AL�< ډ<W[oa��c}~���Q�T�]���5�LF�G�u����h��_E�ldY\p�R�G+��#�Y,4%k�h	�ζ�ƶ�W·Q���/�2b2�T���b^���(I���Z�<���Q�hR
NFY�g�g�g�g�g���"%��+�W��
!�a�d�Rg��� ���HU�T����Mt>�E�
�5��hl�è�h�F���(�e��|��_��y��#'��]|C:�T-�+�	Ԟ��E'02��s�b-��O�Z�:�(��!�v>jCk�*�Ҵ[�ǴP5���1Y	�Ul?F2��7���U�sΊu����V\k��a�)�4C�mMy��b�1ʪ4�>*�B�5��S��U*E����,3En����j]	�X�ʘm%�I>{��D����?o��
��=T8�\P���ߊ�Y�7�F��s��QM�ؼ��M�/��R���5Ey��ڊufd�'�Mv��L&��"�x1�F=m�R(��|��d.��Ri^�d�Fs��"��h�ҪB��JO�~�s�����=mV�޺)[c�Eć��5?J�Ú	K�~�U�Jrj�m���Ar�T���Z��;��#���WK�h+����I����|���ql�ʷʹ�?2w��|O����O�c��A8�!}���}��yV�FW��NO��끼���!��z�
���p���g�X\U:O}�O{v۸���gK�J�ߧ�j#�F�1���G�]�8Pn��w�y��!����@C�g��G����~|||�/���P�V��qYإЇA��]@�/�����
v��9���9��b�c��ѫ�d^��<�RIr����Y�W��\���U/�ȹLN����u�%XD1�=Lt�D;|U	��$�!��Щ�ֹ{欋�W��ym�
az�_�#ԁ܈�xĵG�8t8��v�t�����
2�j-um�
�ʔ�!Gl��F�N�~C�v�7$��c�5/d���N���i�] ���y�x�T��P�"p"N���Σ�'s���v&+�U��X�\ހ�O�m�j]}}�^��_� ,����:p��|�a��@ٲ��yx;D�(XП�.�δ7���<�[]�
g��z5����L�9S�q�q�O&�tr~�ޤV�)r�4�:��׼CI��S�tj�,9�2�e�p�%bJg��o#�V��"�ܣ���e��c�8����z'Uppј"AX��W?r��Kސ�@"��O�Na �Z#g��攲9ř���b�S�i��i�K��2�n�ד(؛�/��0������e��smci�j_��4�	��]����r_�j��>��&��P�b�{E���B.����n�m�ApNGQD�l@E��N0q	؆��p��|���nJ^�"�F��ϸ�<E�C�����e�J�����Dh�4��n|�u���X_S��bp�����
Px�NG;�����r�cܶ��l#�%T?K�tv�:��ʡl}�ҁ��=���� ��M�%>�'5�öܦ�?}�욲;z�e�sp���FGlj�i[E�c�
���I<��.#��t�0��������{��-�B��U�+0;�wE&���ǵ��5����S�i"��^8�]��Gwm�e.�"F;t4t�rz�W%��F���>��?u�UοE9.�N�V�j�N�q<z3�#D�1V�m��9�-ޮ��X[O�F~�W�@�&H!���t���ۮ���P�al��ӌ=�̘�E��=s�3v��Z �\�;��܋�F���d2ߒ/��B���%y[�BH���{I	
�#d�9'�) bAt�Q��)�Td@p��G�d$�J~|�)RzÁp�B�d�����"	NQWa����/�Ȃq������9j�\�Q��y��*M�����@-�X��֤���2)I�~}p��R���!Q�@.�+|Ծ�s2�|sgO�,�5̉̓7����/�d:9�����%ڹuA���\��1����[�6�����x���������ڄ��\�̉��R+*QIKxR���8wH1��5�Bs�d_C9p�J�Rt��^R����c�J�*�@Q�HT|c�fL�8E3.ҥ�.\Ȟb�`�2'���]+�f��Yƪܯ��be��C�����Oњe�@#G#-��Z�9c���n%BkQ�]#
C��TE^ �̕PL3���D	^kIJ���]W�[�ڂ���oZkqz����j��b��"����ZE1��#�sI7{�F�kL��C(�&i�j5'���G*�4h>{Ip\R�N�<bx��"{��ILS��Oֳ#�٬]���VqF�_��k����~��Hku�e��myH�S�
���M��s���D��%�ʉ�-��'~/��I��$ސ�w#���a�En��$��$�H7��[`:��Sc�3{���ų�0����	¯��^�6�ꒌ����0�)O�ٍ��֊�۰j��v�M>{V��j���%�ϧ��� �!�9�����0���-��:��_���wG�e[���2x2-�t%\��Ն7E�c�YTb��g6e]Ó6�:'o �cTPh샠��
`�F�Ҵe�bm)]�lg$�x4p8��d��\��G@��{ёP؆���87�ܹ���iN�2��.�\(�Z��"Ws�\�
�P�WM���a���!�����nv�$�f���:^kq.���o$�:ʩ�r���j(񮆹͡c70Ycb���6�D̯c�ݽ4=������ Ծ��׷��)�qFh;��׽ōק���P�|�w`��/Xs_l�^4ӟo	�E%���%�Li7�Fz��m��]%#�.+S�������U��ݡlm	ȍ=B�
v��;�Y���F��ML��nZ^C�d:��P�n�4�wP�ac�5cne����K/�ٍ~D� �|w������N�z�i:ζ'�z2X��j8
�Ө/nh�
ά�;=͇�u���px�{�VclCߒ}�
+ykA��h�Kج��B�l��v+�!�
M�����>�y��B0�7uQ�ɋ:�c7~;!n��aϮ����ώN�4o�NI�t�g���*�ڲ�lg��Iez�{c�{̅]��w0�N�}��E%Z������@�@Jk]bR�G
7�`Ơ������j_�C�ch��F��8�7���o����ǽK8{=R�����>�S��h��l��#�F{��]��l�q��؞{��Y�Ue��\T��}g�G��a�DbE�����ț��˺�V)��|*���{����K��&���r�i�����E7�zK��b�2��w�o4�<x~՛tC
Qz
P
�>�p$Fw��ՇV�W׈�mX$��,Ֆ��2��c�,�)'��(4�ċ�� �뢚QM���7?�<WR`���Dh"*2ʾ"T��^P��r�X���^{cق�.X��u}Ld�?�vH�BBX-��;HH�[e����S�}����2��A̍�'�d��X�e�OK�@����Z�K{j�D�Cϛ�I3t��Oc����Ed``f~��1����Sqw���kG�;/=��;�a����B���E�o� -b�A��-��˓\�;2h&(�*��,kry-v*B+��f�V�3`�������|<�eK�ˢX�Wg�X+#���W^�inY�'K!>;t����;5��p��L6;�Yv��^����H.����3Ǫ���*�JQ6�W��j�j��$�:?���m��p����Y����w��Wms�6�~�b�N���
9B ��]�a�������KG�e���*����J�Ƅ�pg��գG�����x��#�e��h�L�T��H�|�8���^t���u]��W��}˘��z�������`��p��|i@D�,���#����rd����?�;
�,l�`r�~����k��M>��s���,��2�L���H��!���R���1�@|��\��Y�R�Ld����%D���D�	��)�UNG��K�Bh>�rZ/�2A��v=��'pws
�/�O��'P39�Rٔ>o��,��R6��̺=��g���5�γ�W�w����EwΛqJ4H��S	Y��Q �I�<o�bݍoK�v��IF���E/�]�$
@}�,���`��M�&�N1k�m�E���iF�.!�|FE����%�l�3�	�(`$m�Ag�QMV9�y�RI�
�IN����:g��C�i��!��7[�&,($JAd'#��ߠYG��׵��������f2����t]7�E�����U�̊3���V�B�}���ք�*�u[ĕ&�(
E�z<�a�5�!#$���d5�^�>�&�2���p�[un5�,�%©/�X���t&��Lb�W���J���iB���4Q���#&=,)�7(���c�/g3�n������V�yւ�?0i�XSf<�ְ��'����s���z\D�� ���K��@W!'	���f�g	|�!0(,.V���Se��8b�!ٲ:)�K�j��R$[�^��\7����}�Q'�N��`:ШW�נxZE5��$��ᢷn��^0}B�AGya}�HX�<���p������*j�^�z}W��b�l�=v�Y�~]�����n�$.��l	�3��HȌ�j��+*N�P�\R�U�bO?��ǻY8Ů�f5�O��<m��i��c�OG�x,r/��e�F�J�~_?�3.^N������{r��5�P��T�7���XX�>˄^��m��*S�����wVsO�*�?�g�uO�c�7\�kb޺��3��4��4�.��k�>�<&+K���ę�)�d�4�(�[I� d|Ax �j���g��)CF:��H��-�)ۻ�۲�
zeW��Vn�z�Jp��M�����lw!W{`��e¶��1�
BN}b!��>���Q�1?&��I\|�:�Z�T7t&��4K�5#�d"-��>0������e�,��c�����I>28&e`\5���3�|5TU��.��p��}R�n�0��+�jgȜm�.
rȼl됵������Ȓ'QŌ!�>ʮ�4Ek����Dj6�¶�S{I��O���t�Q��e i��a�5�Izt�X��l7��@Ry�6����{{��`�|�|y��Z�hXFR��c��S�2�#�/���f�Ҙ'IVS��&���d@
�m�H�{������ʖ�AC�DQ��n�\I��2ΏO� ����u�3����ų�iO���N欫��lh����`@Ր�����9�����)���i�i!|�X@����,֫t,<n
����{��Q�9$�`gg���1�'�қ�;>�>�?6�W�'��^�]3S���;����d��H��x�m)�nr��LhV|n&='F���M'��>$G�Ҕ��,�$_�k^�ʚ�e�-��Q��4�O1ljL8��W����~R!���0������e�]UiPSW�E)��M��[�b@���XT�EQ@R)REe��2�"bE�X�&!$d���P�����3��R;(�jq��BȻ��̙s��|�U��+�ce�fџ6�����tQ�	
u�@=@��'if��i�ne
��͇~L�n�QGZ�?�Gz��4��b�����%�� ��\_�|[k͵7q} x5X�8k���:Ө�*'NI����1�bI���SG+p��;�@�<g�ђ�
���UT�����
N4�9�P]Fv�5̅ K}����f�˞@�� ��/��x�1벲/�C0���1-�Wbj
�|��d7�S�	��Y�.0��.�b ��L�[7Zh��ڄ�{�����F�'����.n1w�<o�����d�O#�3Hr�P�����~�� ]|�����#@ܝ̠W5�t��\�ݷ�aa�
뢹�z~�I56�@޲#�Q
2!�J�/�u�jD:>OuL��ɼd��������Y��Fw&�����	oŸk_��-~�2��JyQG�G����'�H�t
�5���~*d�W
 �Y�W�ت�g�Ό��]*$վ�p-�xJ�2��N+��r�k��@��Q�Œ"�Ү� �r`M�m%څ�=���r��7�i�v���9A��Ԩb6ͺ���1W�ɟ|�K��s�]�z���<6��e��
�7E&�
�4�e
�{��!�eu�rW��Le]��Ra����z	��׻���RxY�U.�t��<�jI=:�}�����s p^�4R%7���2 %@�F��OV60\ч�t/��Kn��ВdbWl
�n�>���0	�(��di޻�Ar,;�{ɂ<�q�m�uv�|�f,2H	��!�b��f�)1�t���*ːmцC���w����3[��86.�Vn~.&�r����o4g,.u妇�&Ȱ�c��W� 6�,vm6�,I��������LՎ�ʥf��̳��`����zf�֖RhUO�	wya;�>�=��L	�$�M��n)1��ܺ_|vݱdz	�o�wK��:�'�ɰ��q�C"�
�VruK�^��Uכ�r�x�͙�1?5���
A<ܲ���B0���_�g��Vn��o{�۟�@��U. [�H����5/�=����8.A�sfѿ�г팓��M��Gb,�ٽN��d�_�Rx v'3��i^]��ӕbl�~i���rjJ��=Z%�S�n�@��XJ��>6�+��wF�@�;T��E���yg^ƶ�;�Z�����i����l��]UiPSg}��Lh
�uD��ic�F�];Ŷ,�a���h�Q�L��%Z\�,.,!!���!J��t�UK�*�X�Di��.��/�>��3g�w���o�:��D��w\(�e!œ���jf͠o�Q�R����E����(5�R�4��M{��Ռ����l���*��dA-�����:��nF�2�ά���x��SV.5c=SC���`w���u�",پ�!,�`溌�ͅ��e}�z�f��c��Ԫ�0���}s���ϊ��D=�2��)U�B,���e�g����ޒ�Ax��曵��Z�Ծ�Q�d����댯�<]�G9��5z^��+0��w��!t�q]�Ug溚���ߛi�W}.��P���Mͼֺ�M�uA�Y�?��7!��ܾ��ڪ }?�'$�k�tle�#�\�c7/N�$|P�F���ql���מ
��9*��JKec\a�i�?o�0s�G8�M��j��^����==Ktw�j^}��n�����e�̽�V��v*]"�TFL~z�MK���l���GR�B~���b�Շ��+4�C��)&�;c�m�
Ap$��A-������w�L�n߻!��r"g��#�]
-����C���q2�2��vī��f*���V'^)%�<�PT�q[cu痺���_�o<:���B�4�f@J�.�!��?��.����$��͙�4��J+f��'�m4,u���Kn��w�gj��ȶ+&f����4o���r�,���L��8��l!綢�Ijsī�Z���c����#���f!�I�ا�A6%�� %"����d���Pm�%G��뽋�H5��E'}�my�D�s�l;ĂR���}�=K�JY�ݍ����Nr
g�2�ߔ)��N&ϛ�J�����XJ�Д��G�f�*��5��g�Nm�G֋��Sg�9��N�G���3�k��	���^��w��蘚�p{��Y1EI����#�g�H�25Bw���~�� �٫���l���T8��U�k|)���}��Jz���72�����|B��]��Ȝy�"t�<^�f�m~��[�9��d�P]�)B�tљm��~W�O��d��6���1hvtV�ij����>u�'=30���I�,�T�dBT��cBg�+�D�	{�pSy�d4s��&�
m�,"t�W0���*I��3yz�A9��
�Y�p��ϲ��9wrrN��BK1�7T&]��>�37JP%�W��c��Y�k�,��� �Z�o݀���-4<���%��s6�+ȱ)�E!{��F��౭��~u���-�c�N	_�9^��,�����!��a���Z�n�6��S0��Ŏ�I�]<��h��.�N�
Z�qJSI%�-���}��<I���t�E�H.b�����g��ˢ�]
��G��X�R0�I��	�T\o��Z��4%yI��I}H_b�!�G�#l��u%uB�Jh8���p�rH�g�	���)����9JBA����I���J�TJ8l����VY&AU��Ae�R��wzW��6\�ݱXb����Ls��]�?���:sm�yn���*���*���D�|�[�!�oq�:sC���5,;Ty�vU��T�k������-v�aWPM��WZ2�Jɼg��?
vCX�IL+HgQӖs���+�K�WPܫ���T��h��D�hb<y�_H,7#!5�9�G<������鞉�m����m�h���:�4.P	Q5p������)W0g�h]�$�"�r�YW��S@��N7*��/z�U�b�j�hr�S��)�<��|m���N;�Hܤ��!�b..k�#����+Mu��#(���Y5�V�|Vp�g0rb��$#��3}�*YQ�l�1�Y6���j���	��y]^u��kV���@j���,d�0�0�W��p(R�����b�Ӹ�|߇�����Fۅz�n��*,R��C[o%?ybX�N�����]m�Wc"��Zk�V�e��7e���TC�"*Mx�%��
���68B�pG��Z�2XL�is�5�3r[��$L��-I�����M�E�
���5������8pK>�˒��b�k�F"�Fv����Rj]+��.1�dv���Xa���
��&�b��߀5m�_u�:��CÃ�afQ!��3���JF��V����PƱLJ�~�.�8q
�?2�=餺��[(��E�����a�l`b�Y�,��\�i��)Rc��f������MX^�8+���l�s��������:$��o Qne���k�gp��O*�vݷ��M�ԆhB�����D��3� (����A[aVԑ�&�oAVd�X��L�P���ޮ��8*�a�@d�u�X���H���m$U�L#m)�S���hH�bb{F�	��aZ�a["�6Fp�a�8���h���&�$��0ԡ|1��z;!����a���~��׫�5Ez�����_f�x5�8T�z
j�x�/�VL�}�,��.0��M�Һg%�5;�ewv'���h��Mnِg,�t®NPj�VP2c���";�oi��F�-K�)l��3"��/�ְ�)��]TV�%A���D�5%��"�!�s����ю`N��m�LSji�J�5ַ��c��ĵ.ɖ<�v��'�u��a��D�6�.}:�#|f;)c�C`^%��w�������z�eV��M�"sk>ܭgm�ԛz}?���y�L8��I,4�}���/���ܺ1�#��H��kr�5�M�@����@���Y#��5���`��U(���j«FM�C���AbR�P���i����4yTF�@C�<A<���!|"�O��>¿(!4�;��1��-��H�sps�HI!��խT�'v�{��埓]���e��D�)R�p��E)�<��n^��眽74g�?��H�Ǖ�U�p0��󽍊���S��=b�5�R=8�v����ӟ��u�Y�M����gp~�uO��#�ٟs)��s���^�_s����S�#2�?� ���G#�/�`�rf��'�����'x���ט��eã7�&�	�B��S@'����߹^�&�ۃ�����K+CU�ST,��/f�S�M�<�ܾ�kk�����#7V��%���J��T�Ů�^M�@���˾­�9#��nvķ�܅���ބJ�ow���2���o.e��oRd�'��<ks۸v�+`�J�E;wڙ�^'���]��f'v�Τ$Bc��%(?n����@�"e;���͇�&����>�����L��J��}�3%�ge1O�s�fY͊R��M�	�E��*�Uo�퉏Z�b"�Y��.��X�q�(N�kU�*�;!��󓁮�2%�t�r�V�d%�2#��&�2OD��s%ޝ?�I��xk+S�Ȥ��g2��#�/���=��/��|\�BD+YVo�UU���{��]�2����������[[{ϟ������^O���J���?�.�d%���r5���d�8�.2ج[߇���R+����Ð�P7���W�߶�CK�ч[+��-��	���e*G@z]��1�C����
��(�A�G��/2Y)�(�A`ڸ(K�=��b��4z!��1ܫCA^)M���vp"+y|_,+!�)�r3K�3���-����q �p�`��a	��La1	�d��g�<_�݋�I�£]"�X�Vn{ ���+���#K�x���5mQ��������Z����|R�s�"ƛB���V��;W
(3�_29�Z���)|3ڈ�x�
+�*OTya��B�O"��j�vQ�d��� m@�_U�D�
`t��%�e���
�LT/�F�VF�C�ev�Ϻ�iL�+���UI���r�\����队� �$?�,��y
)��5�Ud�������Ȫ����R��<l��Jx�Ā�gU!0����ip�E��;�X��Y�%�5��[����=��;@��fj��gWt��	)(��eV܀��"};�yKZ�Y�7��%��^�L��v�7�$�+�"���E�S��\�D��n�o�D�#J2U�%L�r91��A�*�D�]��*S��0�|���n�n<U��<~{w�L�.�*�T�+�	�{�x��"i[Ҙ��"�DŽkf�X�0t��]����NL�xB�11�uR�
p�=3�k���JNAun���7ؗl�DfZ��(�4�_R�0$��'q�N���L\��Zd���3$t[��͘�q�@\��
���Y_�֎<(�/b�%Qk���. �M�Ah3?��Vs����;X
���®C� mv�ʪ���`��T��?w�5aQ
"��?�8���eq��b�0���\e�s����1f��;��ȋ�2�i����'&�T>�f��ŋ���o>�_b�$����Uً�h����	�b��O�D.���h����m[�k
���K� ���x�[C\⪘N3ءU�����hͭ�C�0�M-d(0c���`��O��s%���~
��9��~,������ހ�R`U덱@s�l���T~<S$
7i�71���ٙJRًzsy;�I�jv ����}f'J�O�z�D�q��%�*N���Ed�օ�F���D�I��
#�t?P�@�T��ɢ�D���$S���-cte
���<�t�,���������uV��k����6ˢ~�� YF�$3��3��?�	ƛc��	�BfM|��]�CyP��))���o��p����Rr����_)�U)IJ@Yu�!'��L�5(��o4H���4
$�,�Fj1v�ev �����Pc)��Ɯ/�d�&`8���������Zl���Z4��O{��
L@E��\F�d[�z�N��Tw�(����f+4�D��/`�{�VFٲ�a�i+�0�Z6~�����{1N)�4ە"-�bL)/�
l����
cG�DB�=)��@�N9C&8Q��ȲSH�+U7�>��S�`Z��;=��7�eȊ)2W�)e"U�	9�T�T�*��>�<��[��\`�U!��UC�:u�H�ra,��C�T�����v��>tBSI�2��A�i�{Q�p�\ȉesoHf�`��A�!闰�t����x��R���6]`]����c�=� �M�5�s�20�`+��M�&
S]��H��:ܱ�ٔ�ּ��S�L�F�2.
�†�㇈��!έ�7`�x��\�uۚ�������<�����ʓt�,����ꒅI�c,v#�{���x��=X�,$0ŷF�T��n͋��몫h���`�UN��9%r�V|�Β�o�&|4G@o�H�����ꏈ�~,���3����������*���Z"�_��bdco+.��Y�̒V���"�
h�{8������@ӈ��?��>.�ͨ�b+g w@S�o͹=
�A�oW�������U0.+�%�#�gAi�6����~<]�X�u0����ݏ3x�oXgD�
� ]��Sω_�p����������e����A����[��\!� t ��hIqnʤHU���1>���+/�#���IU��P�{\��1��Yu���G�ف���N������"��H�h�22�C�7պ�*�Rw$�TՎ�Ss�jJ ���7s��+s�]搠S�k^�=���+S�9��y�/����S�P��o�R����U��/�J�+x�\,�^\bԇ'0��6/�s_��j˞�y>�$�i%��6O^� �|�P��� �-x;��s��Qa�{_v��1�
عO��a��u�]
~�y
r��P%?���S��R
�N��[}�gt!�3=4�t��A`��w���ݎ�df��u�!���G��Y�i����7�E�"3R#�Ѯ?�1
�J���� �5�I.�z-<�)rșл��׬�a/�Ƙ|��-�`��������&��(l�<H)��$- gr@�k��Pܤ�1=�L�x�|G%�9�O�:X�ٮ����>l��.!X�s��纂o	�]�~	��Z�ƶ�39n.�K��m�حX?l���J����,�R�C�Cq�6��;�	-k�nӺ>�ն��+��׫f�Й<�~T$wǜ\R+�h0��"�=�蟒b*(t��v�ʋF�j��w���¶Da��.�L��ë��s�D]��e��4J�C���S���T���7�7`YL�Q�u��Q��6E�$�u�Yx�t�^3�����Qgc��U��c)��q}���)��c.-�p�6n���p^1�!a}�Zq�w	Zl*�`�K�u�Ot�*��(l����3�v���M@pT��L��<	�m�#N#t��ppD�#��s�eDLzy'��m���)D����u���T��x�����M#�As�VL?"��� 
�<ɷ�!��ti�:���f��Xd��F�bKU�����ʖ5V��I(A]?��C4ji��<զ�-��qo��f���;�����ڳ�2��H���{k{3�>�c���}.���\�&�f
�!�~����$�ʶ}`2�u͓��=B�lӂ=~��T����.�Ol��3"�U��>h�T��Iu�:X%xՖj��,�l�%-R���t��1H|iJG�B�/Ł�
Q�i�4����)����������T�i~]\a��v�9w@y ��܊aBl�'��q��j�NR�B����Ҽn��7s����7R�v�$��֪u�HqnH���"�9��i[��ئ��kvF{%L�az�V��^�Oy�}��R����7K�:��-Ui���� I�~��5��
�<��@�X�qo��S<����A�AH�*a�m�E�U���z�G��p/wsp�!kQ��X
y�^��y�
�2l�4[�&0CZpG�4�}[�p��^�s�ំ'��L}[�^r��s�L�}����x�{�
�%j��kk$j
𺧨Z`�N��΀�
��ҿQhfr���8Q��CA�k��$����.,:�����#��>U�o>�vy2|������ˋӳ���9���_�k�`c\L(�1B��N6�w�6ܮ�e#^cU$7�ʁ2��sEt)?m{v�A�RocT�c�W�쒪C� �����)��$uo>�˴�}c*��i��`m�f�`��f�CZ�m��Jc�ž߳eص�� �;��DA�eQ�[���1!CY�?Gŭ�LW	y1�1ȩ��AG�Nl�υ��d�4	
/�D�A�;XoMY�t1�J�;�]$+"6)�?�^.1�:���i)oC���O��K�܍��q��ඈ���b����s�����_n��n��"ٍ[tm@t#c��
x�d�Ծ���њm7]Z��p�-�it';]qd�F^�j�'�=�z�[x:��D|`]~w���{Z�;Io]дc�v.��k}T�\+�D�3vDS��b��o>��ӭu?�
J�u͞*=j:l�Kp�^t����:��Rɫ��C=��k^a���؆����>W!G����
���hw�w��]S���yEϹ+O`������ a�U��\u���P'#�ኞxN�u`2B�)��(YUuc,WSiS^�8��J,��u��PoO�,~Pi��f��[C%���G)�튺��65�Ԗ]���nܕ�:�|��2U�&�΢!��b
:�E@�c�x���=Kl�R(�Sr3��`Nf\�!#E@6ݴ�l��
h��6��X^�<����$e5��A£u��ebIIF�N�;?��U���.���l��Лi�}����qU�+nTy6���X��}?�жv���RE��
0����ݓ�8tL
�%s���'(ۨ�A�-YR7�w�4����q}%�}�^�i�G	�ڭ8j��|5�Œ�޺X/G,ܽ}C��g��]<�u�/�ul��0hb敍�"�,uçߢ�;���}�"���@�����rB$��3u_lX��Ats�-�Eyʃ�n�c�dz��ؕ�Z�װ������r:k89�]l��ƴ�y-sC^#���{웠cz<�	2ic�0�T~6e�J�
v�w��\�~!�;��.�Έ��]Z�:͊v� �I�_�����fwןtP�4��В3(�gc[.�3o<P��wz���U%r&�;��П���� n7��5'`v䫘��g�:�VpE�����M�%t���
?^�����Ķ�Q�)�M	���K�Bߪ�</3��a�{�H�2���^��RfH���/^��b?����S����?���1��k�� *���B�z���%X1���F������
Da�<@��
53���ͺ����{�"D�n��c2���+W�Όiqw������㜇�t�
WE�M�M�ZR?�&��G��`��n������0�t����E6g\Q`�k�}�J:^���ށ��/�kx�uqx����zke��-�2=��|
�/4�e�΍��~X��|{�Y;h;<���
��ˣ+�am�`��B%G�L����R�S�`l��b@�ն��d}��q�?؆��&���%�6�T�_�9:M��-�Zt��6HW
6��ʥP>^9
}!"��|�U���U��țE�U���NHhzM��m���~$ �)J�5�_z;ڗ�sx��d�j����-K��'���,,���tXW*D:_�XS[���̇�IƩ�RO~g�KM�3)��i9�*��z��%���(��(��Q,>�[q������x�낺�W����Ç�����ftm͗H��B��k�{�~:�N�́�ٓ;��Q%̚���aF7�����]}����o�P>���o�_h�T��U��|�����06���X�_h~f�}
�>�Xu���m�@���!���5_vHR�����+:�؜
?�¡he����2�i��n�L���T��-�s����"�����*��^5��o:� ��<�a<
(��X�M,ݜS���n�F��_1@P�JL�I�e�b�mTDr�-��9i�"𢋋�-�i�%{�Fɡ-�(��HmY�3�~����y�ڥ���ѡ�C�i���'��O�(("4)r?I�>��!b�JIF�5����J�P�ʒ"u	r� ��L�$���;�ч�#�w!Aa���>Α�c� �]R�
bxNЧ���!�w?��M��"�#��"�@��2���G��='i��p��x�����ܧ��[ �'^��9N�$���@�I��vc��|��l��-��}�O|Be2F'�jK�G�#��Ƞ��̳��~��a�#����Un�\cA����2�&�e!�w�d>����&a��Q�\�C
��S(�L�eH�EX�1M��rN�	@ڃ�3�x���E��^5��,��9<��G��$c48ǡp-X�n*Fr�M�[C@����@,�a�u�eJv�U�
,J(�Vh���M7�_��R��Z�m�[���5d�Ȥ�F���S�����w*�(�T�G�D����<9�&�%�p_x�������"���;�ا6��))���8�d�!}
W2f��5Q�:�a�)v�`M�h
E`]���N*��E���'��K�
N� ^jAū"7�}X�4��[%��[$8����-2#�M��w��|�y��s�p��)ΓTJ����<I�.���g*G�)B4�߅� *fn��!�x���`t�J�I3���\�Dd�@�=�ȸ����^ʶ�=�=T��S�#�WyC�N��%�vZ�~^�N�e���!��対U�7T�u���K!<m���S�X$�N�We��2{�t{�]��)I �h��
$j�GA�_�E�'��,x�3�'�=$���?%�T��p�8��CD8��]F+A���ux�v��h��)��굯�<��6��{
:�)���>rRV[��H,�7�6H�e�����<f���E��I�w-Ҍn�J�c�0M��
էAK%�$�Nx�(�ۢ>Ҫ�~Z��8.�b#�56����C���[�
�$��?/ <(�N�]���
�����{
5%�����@�=����ټ�CZW��yQ���0X����PKJ]q^��\��TK#%���!6�'j��i��@��G۬��B��jG�Z�a.���|��m��f���RW�#�p�����*)�I̲UH�ri�Ip;c�}T9E�Tz��Q<�/ӱ�4���7�%!�S=VWz�Xt�{�1�O�=��}o�.'��`65f;����(�p��V�1�0�w�
��+ĝ[1$/۫/���s]ӷ���kE
�(
B��Ǧ�"RVUG�a����CEz8�c�K�c�^��F�������ǹ�m�a��m[��f�?~5݋d���o7tf��ڍ��~����>z�L?z�o�&������t��u��M��[f�3�>���~f_�O�����~^.���K���rv�5�t=p�~����{77/�O�_��D~n����|���!]7���b��]�wC����z`�5�bv�xo�Ӌ/��~��;kno�o~|����|0����f���z���g�&�3�}7_a
������.x?:���3��d;\Wה�[�l���ﲸ�y`�8ܥI���f�:��������܊��!�x��)�3pQ����b/(�1r�	u�!�ƒ� ��J�h�sFq3w���U��`�9�[�5����σ����Z%��1k"xh��V+[
C�9�}25��p��@��xr#����g(^���˚�Q�AiS~�{F����0s���غ��˝����_� �CKa��ss;�i�%Y3��7TQ�b~�f7��IF�L�s0�+����8���Fv���Ǖ00���B��|/�~�����x�RS0��n�FW�S��y�ΫU�#q&+���vX�z����bN�װJ��o�qm�Ukt[V.5�T�����Y4�(���]�#*1�m,�V:]T�Ñ���*M�$�:K_��O�e&`䕭e��oe)E��Z���M3؞��bI�.IU��
=�����Cf�Ŝ�ġ���`E�#7?4�ؿz�^��ʦ�K�_�H�-�DS���8��B��V�&-����
96���i�H,{.��^�~a��ɤ>���O���F2���>��l�w���S�|��e��I&[0뀝�eoM��yQ��I==�3 ي�A?X��4��ȇ�rN%S��U�t���5�hC��j}��]�*��p�`��35�^�zҾM�2b�
��!���ڣ��2���\kJ�ҙm�,�CM�k���!q��)A��
V�EYu�������1��T���+z{m�,�i.2�a��4e
$k�Q(�|�&'�����+�b��
&�~�A��VYh �K��a"g���ɷSz�0�@a�t^�Q
b�p�H���#b���	�d��tC��
!3e*h*S��G�
Eq�F�f�ÌA[a޼��})��P� 	!C�"wyhӕS�O��Ix�C�$�72Z�Q_�����*<�Ίԁ��i�5�9S2lUD<������M�^�A'�R�i�־3��tQ�X�ԩӮi^����6�K��;�u��?e��+^@�s;?k��h�tZ��9�6[2��Y]����(Xa*�}�%� �����ؕ�j�����j�)��aP��J����PY�[ڳ|�H��
�l�zSsȦ!L9�ӕ;��S}zHkD��l�E[EY��JS̗HձVT8�o���Я�Q&�����h�g�Q!+OT,E1}Ek.�~�}ڞxq%�D��U+̭ce0Q]��=	?�CcdX\�INso
Q��]�V��C�'ʐIL��R�2��t[a{�6]�-
p�Z���	�2h�Y��B�.��6ͧ����������T�Y�Z%)ݬ�:�D\�P�Q}o�>�Dm.Ú����Qyp��ʣ���E=`m:�wv����Q��.���,�0����L�Ȳ���]}�T^u�Y�w؟T�:�����v�qי�%Nx�R�+���[����:�e�_K���e�-�C���F\P*�S�]9I�s�ΊN�js�'Qe%��ֳ�s��N5�*iZ܏�(ǻ�1��	�l���Q�ʩ��Fh}pn�PK�c�4y�-5W��ټ:3Y�=��_i�RKJw���'�@O���El���A��Hڂb
4���՟�]�h;��p,�p��1�^�0P�a5�	��vnY��#������jN���%�F�^N���[�)�ҋ�-y�֊��ۆ�^�l��Y������ȗ�b�۾0���gM����gU������D�޹�5٩��W
 ����/?���#�������iOw��c�V(Z�^�0VY���(�Vp���Y�M+�p�G{�ӿ6]"	h���RW�8vlM��s�Q���X�xi��z��3?
~u����(+а��e�j,E��)��Ṥ;4��X�r�6��)���΄���mG�8��N'3I��ӳ"V$
`H����G�+tP4-)�;����ŷ�q ���?�7\�vY#�vVe��}zUVGP1Y�"���BƳ@:C� /�6hG��N�"�a��0�y�
^H�Z�ʤIҶӨ�|�Qd�BS"�J��Q��Z�p�$���M��X��7�l^Y�'I��Y�ƪ^jQ�'�g�D���|s[*m�pQU����<�����-��
���,ԂB@�%0��2��P�%�ْYș�	���j.9Ir��/�W���`**��Ӥ�+O�Or;W��C����gpz6x�oO���Ӆ�C8q��q.d�W�z�{�VzV��J[�y)*~�8?�j��/�s(���	��8Dg^��?��<��s�a��swN��7�J�:��0Q��i���=���rN�m�;�l��
E�k����y}'M��A���Jާ��ZJ�p\�+���*�2N�66����� >��.�bV���A�U�"�lBٰ��<a�k%xl0�HȄDŽD�r!�X�|H%�Y�IH�+������JD��QI��W����7V��3�>�\'s�9�s+��v�j���V*�ٍXu�5�4	�*�(�t��t�)���r���bƌ�&�Bki2L�QD���/��MxH�����+� ʮ-�ެ��+d:�D"���������Hr��!-٥�j�a��m�tgu2�i�!p�u�_ju�<��[\�l��N#骬駦f!�U���'�n��z�V��uu8J'Y0"V��G�lᏻ�ku��疐]�Ѐ��V���5
����ly�`�`�*��Poͧ{�<�����ޖCh*��V�m�A�&��+����ν���Ֆ���S �XI�ӧѐ�v��FǟC���l�d�(1/�d*l7s��Q_�>U�q�8�o��&]/ꚺ�ك�[���55E�@�����V �:�9� �ǾWn�*��idž�̂�,/4~�=�hFv��>'�q��>M87!�sP~6#���5@�]�`�b��������W��M�%����L�鷓�Ha��Yx7�;��&�&�����x�]�E�/1��4�� �{������B��K���s]�A�VV$t(��;u�_�i��Q,����G�s��o�B5	G��Es�e����ee��%]䖵ό�3�_��O���������0���οl�oF�M
꭛�L�U������"YQ�-����}R�j�0��+rI�ȱ]o.�m��K����5T+���٥��+i�f��3���̓6�s�i���n�F�iv{Z���ؗ�h�&����,`/��4y�n�ap
!��; [TП@���/‡�A04����e�AZ�11�n�
��:·�����O0��6E�k�U@$7�;੿���C�6�м��>ƻ��lUJf��)g��"�_��|<׹�A�A�Q�N��������i q%ش�(�C�\���~_�	sh�y�k�m⹄|9:�+&�;�QY�
{�YG���<u��O��q����^����G�.��D������VKn�	�����	��؇�I�ƨ+��s����AHCS��e)�&dÛ�r#�bGJx�rԓd�K�����a�ń���a�����r�6��_����Ģ�N��x���4�:G��)���D$��5����t9��M{`/��s��jc�"w��_~����In�R�K��]��M�(��,i�Y�,99?��=�+V�&���L.z%M)3�m@�wW#�6��B��D2��(a&��\�e��}	7����k��B&''�I29W���E�����Fg0���)]Ƨ� ���uF�.��F!�r+Sm2U.��H(��En>�>��	'���Ο=���s�F�s
�⃄�@.,TFWҸ
�8#�,r$|'��f�,Z��\��i�Y���L�pK�=�Z�i!�a�*�~��K����L݃�/ ���
��0Kg�$"ت�܀٫\<��N,�X��j?~�h�q̨�������y�s���l4�_S�٘�;l�yG)m]k�xw(c�Ps���͆
0<]mJ��p�"�Y��{xrqkPYG��Lޛ�]@GX":�8Q5�ڈ��>��,Y���X=���j�Dl�F�]�D�̌V�4���HeQ0�a�;���T���D��=�ì��M�Ļ����z�(
�ì0;\�bVxz\�dX��
�;�(S��C=�"[�c�����#D�qY:�V��DŽ)�u�\�_T��(
��T%�~GE��2r�KidvYUӌ�yoo$�
��a`e��]�ZީYQ�}�����cg������K,j �r^�U�A���6)s��ڻL9��Cڴ�W��Ti�4��:�o��c�g(�km@�4���l���D�a�6z��%G�%��ՂH]�:S/Ќ�!*l�وp�سƭu���Z��rA��<nж�.���!!�}��ʀ�`@R4�=�~rk:bt�ʬGcc7���o�<K�!P��Kb�q�V�m��1v�L�s�~^1<)d�p��?W]��u�<p�Nk�[((G�P4앨�Ε��G�R���SK�7}Y%��da�9�M*�Db�r
W�������9`wYCm��x�8tc��h��i~�����sg"��J����C; �>���}4$;=T�o�c=�яض���L��<n[j�eB		^��T�1_}�6�~O����B������Q|%�glnP���;���m�K?�-ǻ�ۡ�-*�ߣܧń��&�bR+��v�v���*� �L�Lݷ`�M��)Q`
h�=��@4ҟ&�[�*��d��/C�X��/��w��U�طw�ʚ�H�n����$$�Α�
��p�H��qGnY�� *���\:�<y�B�m"��nSP���ʍ��;9D4ND���:C�
����q��Z�*.5k�rύ�
����|_0����[���|c�����R|��dd�p��iPO]Fl.���x4����(iyEPlI���V�WP�3�ڇ��4�>Bi��B��(i�x���ճV[׮W�ݠWv+v�V����{�=�0nj>�>�����.�̃�-1����Ń!�.p�b�	�K�D���p(��_��^;���#��;XF��Z{C��Wq��`��t06�y8��}P- w�"��y���S\�zQȄT�K��{Y��=��iy0�8+]�Iеg��q��4>�j�ѡH�h���rR{w�ja
�H��p�S�����:�|`�oڵ@�<T�'Xxf3m���OT�I��s6�#�,����L��ٮ��9�g��N3(�)�.�mv�ڪQ[�ŝ�UW=���"�q��x�Զ/w݋�M��I��}�)O��m�Q�eG�WRO6{�t��=$m��Q�Y؈]�>�8�T���&��ct&�M��΅*��
Yt��|�O�r�i)���f�.=6����p����U�8NE>A4��6k/{��6�c/��g��Mz�o���'�@�cf��TN$��8�z�6�����_��NDdt�OS���* ���u�9���Y�r۸����0Ӊ�����]��������w���ɕ�3H�(Y������W�i���\��U2#
���o��?�5~��ĬK���b27_�R���0H2�4�Ӡ2��`2���N/
h��I�d��(R�e��ѯ:��_u0G��ɧ�J�'�)Єx_Je��m��?)xq
�i��Z��M��N�֑�{s��U��!�V{z��sY�_d�Cxu|����--^�pV�L*=�3!�m��_�Zb:�K�I#�9��k��B"S���KT�����ٻб�,�ɘ����4�U�/hazy~�~vs.���X�k��hcaB��#���woh%gj���`�f��y�x&���Q�S9�W<5��;���c������,:]�U"W���QJ�.[� 2�{�)��I-�[ZaM%�"ݐ�o�,My���x!O���d��D
�F��o��x}�Ţ�*g�/��}�X�9-�C�R.�Z�0�Ko�Z�׭�v늩���
�0�q��ehwkL��Np�Y��U�,��d&�\���QwM�撂�����\��sYH]�k��2�HJ��f��"�}Bzi)x
�Yl�m�Ḷ�#�y��6�lt�3n�=��Tw0��pI;��7��W��8���i���}Go���{8�ZO�g�+����*��L����aƦW�y	W�XÒkS�Ɗ�\���ρ�	�_.���m�P!�ّt�Y��W;
N�~�T2���VkY*�Of_/��m��4X�+)4i�+>�Oi�VČ�)]۞��T
�c�qǾ
zZ�4LfN�i����qT��$�iM���2�9aĝϱo0�WN��ʈ֒����j�,ZrT��ZW��y�̌)5f��a�o(�""O��A��R�%�!z^aJ=:h	҇d[؎�6���h2Ctz����Xs�.ZrI*���B�6�rF��q�Z�wbxӄ���a9�'Wn.�������:Uˢ9�y0�q�]�t&+�z0�ZZ:R��I&K�è#JH:��F�b�Z�EYJ�ބ��K�)3�
�vr�����O�rzOA��u�d�������ח?��\ܾ;�9�����M)f�5x�䁹�ܚ�+}��;�k����R���xu���4��yY3�r$�8j`�w%��Xغ���[��5�ܗ�;�����_n.f{TVl��8���qS�F[|L��=ϩ��`&8�q��@��=�yᔤ��V5{�E����q�Ȝ�m�:xk+��

U!xNU'=~�F�O��
�l��,�+]O
P��������ʲ9�p��
�3��4 �K
;'����ޝ�+�.��fz?r���Ɋi�Ԉ�HEk��
+�����6(�xɰ����)|\��#�v��d��Ew'y-0)[�B;q��I�%�VԌ��Q�ЍXN��]*V�7=G��n鹖���NX�N�����o�QIn�������Ȃ��`�­��
�_鄊v�y�DRwk�nQ�?�b?����yG�ZQ�j��f����4>���A.c:{��9�j����V�:7r��ޑ�dW�)��~�LJd�<�Շۛ�n��Z�+Zl��3��CBnd�1,�6]G~�3�ZP�۱��%�/
�$<���]�AG�f������%�@^�O�A�E�r��3�
Hkz�灳Q!"��9<��vho��t,uݷ+����6^���m�~c#��ޢ�}��z�>���O�P�?�`Hͷ��{K�Y���v�`�A,�L{MO��#�@"��FQ��T4A�������8P�QnpYH��B��͡�t�{��)Z�tk���}WP��m5���];ۑ�ߎ)��7�VI�(gv��y\訉�[{%K2
�v7�w�k{�����۲�8��7��q�
:�\��:@R��#p��O��`�f
�i��9ɕ���}8kj�Y��G���*v�MPB��,R59��z��	����bt�$�_�^lluQ�E:�]w�n
>����]	�[*+[�mjI�)k
WǛ��U�p���T�������pfZzr^�
xT���.�~��֣V&������^�hw��B5#g
�E�6X0jH�!�U}'X��x�߮�[G?��+t��uJ�6Ē;�EN�9�QOI�&U�^��j���#(0���:��`1��+-A,�\�"�A��WW�L;Q��wd�|Q��`���m�_�OL�tY��c>�Q��sw_�'�.}J�sޓ��f �:�x�!ˁl���Կ�xnw��%����~���?�SRyL��Ymo���_�xX�K�O6R4������=j��X��=�+E=��wf�}�Vv|h�!���p8/�<C���s]n�\,K�{��ۿ��R���+Y�؇�-��)�P�&Zf�f-�����[������d�e:�\�0J�l�e�}��[�-+d&,sK�X��	�4וʙT0.�������e!҃��7o�v��P�lY����Eh�	ZV�`KnY�y��7'�JeNjӮ`8�?���{�����t!�DY�AP2:;x:8�uV�`����~���	%Lrtq{}���1���8�����S4HVpkA��z�x�q�ϜƔpcA��5�6��� +բN+�L��}��{��g�;������#Љ1��������#.�^I%��h��Y�0��à�ʉ�Ю	+�g_��L��.����;�˲���;���?V��O�.��rx����sWz�=�!�ԛO�#FƘ���t�אm�d~t���aeP�E(|\����N{�v4k�SX4��~�zD�@@��b�gۯ���ڈ+�qv���AAв�/�.�`\�_4��\��9
�\<�[a�,^�_����шw�<UV���+��"�‡��;����T�ӆFN��{����a*���Z��_�s�)��|Kxu?A�W�}FY�2������9T_<L�Ɖ��R-�����N�\��b��QJ2,>"�̓#���7�����h��FtjF���|�LP�=��TUh�'�+�8~Wc�g� y�^b�,�F;�y�T��hi�R�z|�Q���r�8ڋ�����Zu���E��w!@��T���4c�f(�=H
���އQ�i���0�;Q��Hb���J�?�8�����fK�=B��5/*L;�ĝ\-��1�c�STĪ�"c�uP�m�-*�\����n��(lR�GZ�V���9����'Is��j��Z,�,/��������erΒ�H{�o���Q�*:%G.W�^�X�e�9�f��Y�
S����۟�-�ר�T���)��>
�����xh�߂���ݠ��kc����!i�ˠ�3J�T��}-9�b�ef�H(K|-��hG1�B��GԂ_T�X^�x�,��.@���Y�7ˤ��~�*�pP��k���*����>���pe%
�lƳGt �rH�B���\��C�x��xX�����eZ P��d��%8<�e�4��s��G�ʀ$��^�W �9.7���d�\[
�3��–x���ߌ�����R�fr3�N>\M�uy�ƞ�K�b�A��R�.��I���!o��9�#.�K���
��o��C�c��]â�uHcy�����
��\cMU!E�����7ogl#�"#W+�K��[��Ln>7��5Rw��V�\�G�v�b��?�m٪ʖ�&J�u��T8w�J���qh.�Ñ�)Z?R��hF���8n�����&���L��d!VF��!,ba��2�Hd��P7�Ӈ��ϟ�t�9��!s�W��,1ƃ���#4�<ߎCrL�^�N�D�W%�)��C�R
"!`E�>
��D҄������Mގ�7��x�?���=Zaz���%��B�B,H�����1�I��nz����N�$�H�%_c����4B�W�DK�l>���i�|�=joy��7ͱ��"+$����g�)��ڂP>�ѐ�p�i��X�>��0�Ϡ��[�E[_�j�Qa�ya Ob�#l:8��Ev�u恬�:*���Q�M����3Q�
�\$��)l���F�k���H�`���-W��ZF� AĤ�D�2tc��v�\m�4��"y蘐�^-�v�|�8?C$-��O�`ѭY����:�)@�
�F:�wMI�.gθ쨇uG���nVu>��Dᄅ!!�!��.��ڱUO(2�=L��x�(S��B'sXcU��߰UR՜g��$�S�ZqP�$I��NYv�,Pqj�o��^y��꘦��pՇ���M����
&�^��	@(1�*�tU��Z�PX�ņ9>�$yC�f�ʢ��l�~��a�ߥuv�=��Я~�����������$�Ӣ��65e�ٮ��3��{)��u�����$�c�*�(�{�-('���@��/�BZ>+�O@RD�f��7��@"�"TB��i�T(��5��6m#����	�.Gz�tU
���M^a�a�
�?6���N��D���≺�M[�m��n5�;�%u*a�
tJ�[p4��u�|Vl�p�l���p_���D�Ѯ�?�����{i8l;D�!�����B�o��X)��9���+4�9��AȜ�d--A�e��\D�9��mX�����ﳱ篟5�}//�i�{�2v�Rl�jau�#/Œ'Y�N��
�1����'�B�"AC���O�$,m��d�g�B#���"��
m:�*���3�!�B4��<�
�a�dNb�lc�s�ƍ�!�
\�)����[~��y
Z���1^���n5J���“j-ژ��)L����E�Y�$�X�c����:�:݀�>d���I)��E<�L�4��_� >�ԽE�}��U6Y��ٻ��>���Ju��O}e�t��yI�B�h�
��8�>�q}����-:�o����.C{��±�D�Ĩ��:��YUz�E��i�2|����:�d$��3�ڱJ\���ъ����4Vbtv�Šd΁.��(����Z�n1�ᖀZ� �U��n�IU�T�S���c�$7��r����q2aG]�9�R��v�aHiD����q���>i���su����7��W��T�Ds�)�<���(8���}�騥3S�h�=�oLH@��x�3�O��c
;�Oy���J_�rN��ne�����Ȗ*	|a�v�t_�!��	nh�+��5�1N��e�����6��.���
2ŧ�p�z���FL6�3�Z C���_;�<~�	:�G�>���%��EOq�*�ZĎ�IIU�p�
����-��a@��P�]��k��Z�U'����x6�Ӗ��?��@�,�Pu<���j&��_�V�x�K���}��(��[ys�Ȓ��?��{_L{0 �X	�e�9OLLRI��:��ٷ�t �����6��������̒����-��o �r
��O��J��o��[cj�w�\�J�f�?>S:0�����
|�!���DQ������o�=W��>o����>�+h��d���,Ӆ&���(J�t�Ac�n���dw�M�[M�y���L�Հ�w$��oL��E|�g��fxFb�9�&�
�V ���:�#4���{1�ww����R
k��5u�R%��RO+H5V�eh�A񞻲l�@�N"��!Zm��'�Wj�@�R(w�9�cy���2��W��Bۄ2��S�&�<Y�ґ�&�殀KI���sR,ϔ�A�8��
q0)E�a�������#����-����f��ݸ��ӏO����'T��Hk�����K��{ж-;��̟�S-K�a^��>_�雀:]��34}G���k�AF/���[� ,G�L�vK15L]�er1G�1,�+g1��t���ˈ�9���}����51a��AX>�Rê}��X����h���$�V�+ul�,c���Ms-�3c��H�z�%`-"âq�W͠�GT��-UFf)G:`�L��/�c_8:\���~C����6y�@3QH��M_�[�S��h����痞�Zf9����-<�*�fgM�.MÈ���7O�n�h����B�D��	�K˖�}ٸl,OjjR��D)���w��.�0�h�P�K��v��#��I�F�1��}���w����9r&�|d��o����!X��Aӂ	����T�\o���lb 1٦;���P��5�Ҽ�~�����X�-��Q�eB�����w��l����!n��]i��d���`�GwIyA2��k�
�s����s�Zy�E�F�O����&�,���B���;� l��1����Ɔ
��	�$w��&X%��67��m4���N|`4R,�L��8���@9Oʋ�nIk|�`)
�cH�6;�^Fҏfa6A�.L'�/�Y��c��7HU8�p(u���sr��4�%8���*Wk^����~j�uq���r��^�y�F)��)��֏����ߋA�|�z��T�L�c�3�^�����#�m[�sGU0�����!J��E7۳L��4��	X&�8��B��B�#`MQ�
LG�] �
ȖO1,m8h٥&��A�+]@� *�
]���JPG�a�Ľ�/������U(�7�%@���0���t���qݲ�@��0�ىaU�y�FMb��x��{Gb��6�r��8	�PK���Kc蓺��/X�O���E�����b-Ȟ"�_d��T�w�n5S�	���;
x��>��;j2�@�{J�IB.�D2BG
�\k�e�D��P�#��ld�b�U���h԰L��	�g�B�D�,]`��~<�5<�5YZ��
��CH��@?,V.1��δܯw�f;n�R�|�&1/���K�t'}� ����H�a!pWB�t����[�P��N2hBÅ�iJ��� �-4�SK���_��
�K�LF�6�&�±vIJ��57)��8�xY���b��S=\kK��)�-E��?��f*��}�%�B-t��𤐺I9.�v�&�迥­Pb3#.��W�s����\�V�����Oz��H�F$h�fn<�O��Pe,���E�Y(J5wAPݝbI�C�/U����CX��[� �F�Er���{Q��jnMZ)�љ����T��`��v����=1O�D|!�ǀ�TH�Am��8��I��2��ڸ���w�<s[>z�EF������ɘ�D��F]H�a:�ȳ)F!��Ɗ�"2]��X&ڠ�]b�%
���_~�-)��{�,��g:��KӛE�� t�J��/U""���3��
�`?��IPfl��o�y�,��9{�-d�U��v�
 �ws�%`��{/�v��x)م|!��z�J'w$}d�HG'�k�g{v�X��D��>����^B��b���N��:a��xN��Hғ��F0h ]�Z(��ɝi�g	p�j�#�lF�\f[.
ݯ�
+���UP&�+T'Q8i�XT&@�>�5L���o�(��=O=8�ƭF:	_Nvge�8J.�����1��}�^��v��LB!T�GS�E]� �ew�f�P)�2D
E��(r\t���ӹ3�j��5��Ix�����'���
�;�E��>rƺa�%i��u��҉���-f�:F�Ө�U��QR9��RE�J0꯳��A'a�>r�QτJZ4�|Ϫ��$�����_�B�*��
�4E�(|́$O`�����ԡ�R��VdJ�#��$q�lM2�nY�Huk�CE�N4ס,���-�����S|/>pV~v�(�8�m'�Q����;Q>ŝ�r�&�Z����|� (V��Q�5�)gi���'�dR�_*4��q�w°Rb�S�g����,w�|���J|�AQ'��yۚ'��:� u��N�'w��ڍ`z�q;�F|#η��!L�L�����W���y��'��72h��+i��З���
��]�r:����C|̲5$pؤc����&]�}���	�/g��V����C����k��P�t`�v����&�tn���Qn�D�uR|�K�:�Fv����hz�k��f%�3_��7ڋd ���d�+�Hx�[�����d�r�䣿�I|._�=.�N����D3<�9;-aO7�|3�ȗ���������kqmˢ
�F'Q-|RAdAڱ5�*�&�{��~~œ� N�"YPv�dYN�<��N�Ʋ��Ҡ:.��p2����`�Py��s{J<GJ�]��OT:���1K�����R��n�cg"��l�������O�M�9YK������b*�oάr��9�LG#��Π�QQ�����p.��8��wԽ���]�1��Z,;���T�q�w��G�8�FTOp�RF�f��)P+(�ҥq�z����2�T�g�;�������],'����܅O��]��7a��(53�З�yp�Ƞ�c�N�]�~hbFtF��L�F8����Uyәe7}-A];M�pmw��/�/��Y�\�wm�����
#A��������y���eK�+L
����m@9ޒ�&��?���BO���_K-�׺��Q�Xr^t����? ��3�i90�~���c2�O:O�SO���a{���+�h��f��79�;>?��痥��/�C��l�G�b����qu=��x�$�-���
MhkaDN�(�
��HtP݉���������x�8�{ >=?��n�q�m ǰ󔇊D�36.�m3�E�EAc���V��+4��=y	yW�B��f�8t��Yʳ��2p��Sܘ�oK�@�r�̈́DZO߷U�G���J���J��.?���mw/��@Ѕ�L�⫧)�h��R��|<y���q�x!���ؚ�V�=,��G�A[x�<p��������V�]_	�fs7����z�ov[`����(�%��2�<�#UVl�7`y!��FFyJ��LgȾlc��~�����um�����iVJ�V/֚�ā��z�_��6����C���F����������p,w���Ք:3�ln��?��S����'C��������9Z�����^���ͤѬu�(�n���?�cڻ�v�����h�V���w���+��̉o?�O皣Iމ�p�����KK��7Si:�̦��
Z��C�����E����*n���T���X��30�uwמO�^�
g%vW�7��|:��=��5�	O�X荧�h�{��~��<M౵���E����`�����]�L���V�	�f`�r`E��g�ۙ*x�|O�3�5�'���#O��W���qެ�E�����mM��\���s��=��p���c��X�'���W݉X3�U��eAC�ZO��r俾u��z̋Z�����b�>�Th�~��G��,ؕ��x���<��Q��݌�M�#�^�'�,��)O���f���F�0�h��k�(�h��K�~������/:dS��`[_Z�6{�Y�[x���ך���`���0���+���J��
�g��.�o[��_��b��:�Ƶ��s�^����s�Wf��+(
.'�2+0m��;Ƭg���^{�G�Kc�L%�a�ͼ�p(3ښo��릭L{̍��9��ٻ�t��̢���J��[U��e[hM&Ź�N�R�;�4���T�<����1/�'w���p�A[܊|�wO=�`̡�:�/����zP�(���?���f�����۠Wi2;��KN/7�{u"��R2ç�e]���ư�y�vؾZ)n���(5�m��],�bi��٭ �_Ċ(�ӧу&��`�?5�����;2�讻�YjY���a_=����]����7������c2���^�Kr�-Fl��~*�1o�^��dG���yN6+m}Q.����Ӎ���yۮ
�{�KU���ʕ|�l7����n��jN�G�}]l���8Y�����ד��&����}u���
����5��QqŹ����6�'������%Ү=[�[m2�(�d��/}�Q�Z�ܶ�S`��a���h���\� =uֵE_i�MQ�N]���u�)�W�[v8^ ��n����Fwf֛�S�4�i?�]��*�湢1���ڒ��������Sѓ�&��s�A�S+��(C�+�C��3g,i��{.�5�2%���ܢ���G��܁�M���j�.c����T��q2�[=�a]��P��dz��˶���s]�/>8��U�^tޖ��r7�W]��z��W����Eב+�s���mԻ��
fE�}�M�%ӿ�Q_��\k����~~�9���I�-
��I&�h_h맃�<D�T<��~���`?f��(v��UT�k�J����@�xS?�|��8[���E�&Aĝ�Z{�xa�]@�t���a1Y��]�������ȁ<���>:
p>A����S�ۈ��B.�]��C�b�_�d�Ta\�l�����@!T@�A�W
��A6�2�1M!I����W}�d�
�% ��E�!h�x^�~�Q�?�x
��*������̐Lf�#�+��8�Gy'y�:���E��;P����M�@貚ԟ�W
����,K��G���K�X����$�r�	���NZ���t�����`Y	�SL�2t�5��������f�ޙez��X�����{��bga�78sL�z4ޠ�߳�E�������2�7��K�L1�_(�{��|��R����Q�b7�/�o��< ��}a���on�����zFy�lbr3��͞�u��e�Sh�	��9���P�����$�iǟе�e�:��	-X^�\��)u��ÿ"�p&{m���MB���x�-h�iG�7G����>��`�	��kFnɘ�*�B�
�иE�V
OݹY��-N�G��o��A��M���<d&KW�ȤZ���%P��)��$I���,���裸R*�O�U�h��זLͿ�1�Kļ�OC�Ua;�́�kK����S���W1����ԏ�OT�Jj���#�r\����Cכ*e���8Y1%�n	(��s+h l��#��a7���,�wy(���K4W�ݡ���~����@�͊�xX�t�vހ�
�,g�0)�܉C)ȐP��E��I>�_��C�=ӍV��`N�!{uTT�`E���Q���sU� �1�i+��z�\�%y^���T�F;��4CW��h�����_�
f�S��U��$Kc��ݽI7�@���\t�T��`�<�/�G��ؑL�$�@�d��ƶ��L�{�l����cWd����d�W����M���fz�'�w������
����3=�7�O�W\����eG1Y���o����ڶ{�֯O.ߛ,���⍕l긳D�K�����= �JgU3��)�������`˴ᬖ�OlB���O3���Ъs���22��_��vS�^��p�l�60���i`��zs�9�С��2ڐf��F��|�sT���HϔE7��:[>�S/���mg�Zkz���fW���E~Һ4
c�к��[�d�2����?'�A����6�m�����'}F�3��S�K�>kl=���c��e�8<9����iS^(�S˓���钃�^\i��Bv_��Z�4��x�������s�ɱ��Rw)B0�6~ߧ:+�n�u��-�^}6�Ƽ�O������~>�op��3�(FK��N~�hCM�ho�s�E>/z5z>�C�x�br��N3V���#�7��D����Q�'K\n��d��'�&ڗ65l?�Xbf:>����OƼ�ҾǮ�
3���㞛^7O;��H����<�u��pSmʏ4�XM��uzۛ�L5t�r���%hm�$���r��h��n�~7�q���Vߞ0���m��!sγ2	$�G�,{��:�M�o#�f���fQ�d���l���?<��N�O6���ύ�<C����Td���
���\����gy��8yY���ʀ�f��Ȃ��ѵ+*Pː ������	�]���%[S��C�P�s�t:ycV!�&�+�F肅�4�_ML�� @>��K�|�!9I�
��P��'��빧+�ub��j��%�J%�;�b�Mȵ`�,��XA^g(�'ŗk���hҭ?�~J]�bR���I)���Y�>�M��H����j�b�k��Tv4�*�L��Z�n�H�[��&Q�����z˒��h�v�����^ѫuni��n�����p��#�f�R��	B�R)�]3H�l����?2�U#���s�rE��~�0+��+���+���`�@��p+�eIG�91��i��hD@��H����5�p���\j3����&Jg
S*��Y,=~��׳��,��M<����b��	gYW
V[�,w
䲗q���B�=���Q�W�����%�歬^4�As��;CQ,��n�vB̏-.i��ǐ�����G�5@�
�Ue0��y�䅨��R���ŒMPM
�+�Q\Yd���)mU|�U����������#�?9G!��)��v��S7%�5&n4����9�p:��!�O��(�G�Ű�8ӉT�E[��U�Z�����dy�F�88zZT��U@q���� n���C2�ώ��4�"ŒZFη��p�؍�#�}��S4Km��ax�n��
j���K.����
�Q�	V;�B���9l~U��p�,_
1u����nx(�\�J�⍅�KaC���?��I��PZVcx��ֆ��`�a�m�{#[�n�*P3pm'm�G��%�G�=_�b5 ����q���P�9��� �~=>�&C�I�C����T�PIg�
�{ׇ���v�t�-��(���O�'E765
�O��f�^y���Z�i�g,vm����ݞo�ͫ�FC��W�~fu.x_�7jNZq��τ_�n��(�4@=lf}QIv���@���$�f�y���!��(��a���÷Ž�?Gl��g�i�[�k<���b�\��'n�וL	y���ݣ��4V*{q���P�t��%�J΢���=�p
/����	��*�&G-wT��Y<r���w�8í<��_�$���h�]�V��I2�%���m��/�˨�,�.���??Dn��7�������2����/*�?���]Mo�0�+{�â@B���C�5���h�aMBi*A�_�36���n��Rq0�'��͘��s��~zc����'+���ի���}e=pl���������ƴ��>�����줶��3,j�i#7�qQ�k�����>����f�z�`Ɯ~���'��d��(�C�I�Q�JM�ʻ��$M��wQ��UYd:)�%����۲�PӋf$�:f :_�4���묛�h�T������ۀ�r~}��:����K��:�R���'�V�Vp#�+c	@1p�)��!c��$S4���S*)5�
̓a�'f��p�bW����G�$�PMۧ�N8q-V��Z��´rb�mh���ok��O0��y:�Ҩ�~��N���̖-�hG�\�ܢ[��^X���V���E�0�"Ų��{��q���\��᳹���p�
��\[&��'U �2�A�w'qp��
A@
�m��
S�)J����!X���Y�D	�4Z����2�c=�r|!3F$8��
^�~`e-�eJ�P_L�c
?���Ȼm��4���`$D���ǚ�gs�L�7�@�Df<�
���g}2G��>bٶ���׍.��6y�8Lx�Mny�s�����+n�6|���]&��P�Ɉ�q`�5����!NR�'��kbe��k�8Y	T���c
M�,�+|������Vc@&w4.��4a|8Y���'U6�g�!�x�M�[C�5���Wy6��H�C ��Mw?�j��}xWnj˜�7���;�O�C���}���~�q���%:,���WX��N!��z��'��V]l�ˇ����]Ys�L}���&�+Ka�7�U��
�b��2$�H���-ݭ���d��*N��z_����~Nʳ�˽��m^�1&�/� ��.�:K!/uhw�.�t��5��\�Q�N�(|�G�9�� ��s�n]��4�`��OGDŽ4DZ���LK��;��F��Fin�I|�@e��d�$i����?OOV��;grb����{�c	$�~�ro�f�&�b2'&ܶ�qm*o8�D��I[en�?X�pm��ɏ	j�V@+���C
����#��3o���nm+�(d�l
ܞVzo�w��Q>�N�co���9�$e2��r �26���h�Ss��v� E��4oH��
 �꾳H�ݹ���!x7k���Ӧ��\ܑﶵ��Q\H#���ܰ�J�^�mD�`�ei�rơ�<����tͩq�=���7uwQX=@c�w�/(�r{7>�k��T�e<B��?O���4���?�g��p�9�+��1��v�_jDo�rs_�?0�n�k�46K�@��Ԡy�]AȌL�� u��j��?��(���U;��	]�N���Zǝm�_�|���Jf�9��k��^W��:�ߘ���@F�%t\���.^v�����CN�I-y;¹��eQR����H{����W�Q���^	=��@=h�q��2�g������o���#M��g}�������d�eȝ���c�D�%r>�;+�-y�&�G
�?�����3�c�8�+Ї]A�u����7�R�8�f`�����A�� =�m�U�ũ
������		���:u[�S����y����P�(�X��@���l%�̀[̸�'�vj#�s��J����Խq��S�+� wj�[t�Q�@�7��@�m���f��j�uO6�9��lb�<����}�{��_��!#�ʽ;0�Z[<u6�>��@�
��K��o�oR��iĕ���-G�ǿ2i����U&��(F#x`�,tA�ȔRX�A��R���_���"�Swo�\
X}{70=��Kn��p�����n�i�	���u���Q�s"<�c/�����A”���Ô�S���}P8�BL�q���A
�֎�Qn�Őa!.,�|C�0=���1�5��I�w�	-T%(O�� �‰%#sD�׃��V�$��_�c_.�T�*'��O�¸\T��ӫ����۪�?3�*L��`s�F"rx��>h��a0�}0�w
t7��H��,+IU��������tB�ŤuK����|6M;��UQR���ԆGs�K2���U�_���T�P�2�����wF�U����CB@�U���n�G�ܯ��G�BF,d�q�-XAa�(�	YA��j*V`*���K��+���#
u5���S����e������D��k�0/�eMA���E@l*��?J��

�O����6���=\���g��Łr+��Xm�l�@��0��P����6>�_���/���Y�VO�T���v�q��T+�9m
�h���U�a��t�]����m���tVѕ����;��``�[����u7�c%���˵s���ҩ�=?8��J���G�|�<�A��(k�Qv�ne9o���E�V�Zm�P�OO��:,?�u���{�>{����6m���Q��\w���:��U����]knkT�o�n����[��(UbbQ�)s$NȎ�u�J�}%���c !7����9D�w	^�	E�wU�f�!C@��w�B���qL����šV��޸)�R�V;娍�L� (XABm ��WL]u���:�no��F]���ގ�E@���>1�.e�.�@L갍�~���Z_�Er����q����]Dv�Լ�0�2lE�P�Ğ�����`e����À�k�s:\�%��+�U\��1�D�����9m!Ȕ/�u�;��{�L&�|��.�p��Ұ$x$�h�v���G�/�����0,1SE��˽��rd7�p��Pí����׀�/����„���1���J6G<�=uP¨�_U�eZ[�DŽ<9U�$Nd5,�u�a��q��;e��B$X;țw=�����β��:,��{Slڹ2�T`�;K%0�DL��UO�>c*����'��C�>\6�9tYx�����:ێ���v�c��~��017�1�#Dg8^�()MP�ZH�H�W����,��E���C��3'Q�T��˃tg�����^s�*$j��崑վ�ō�<L�@��0!�ߣ��U��J� �xu?V0�QQ�$ћw�B��W�|1�D�P���N���"�7�˶7�J�d�b�2lۤ),�He!ո/��Fy)ea/�%����-�Y�nItm�HzuJh�p�viNDլ�\PQ�����)�BY�Yc�TP����}�]'o.d�e�{�M��%<��~���/'����C珵�
��J}����BҰ\����x#&W�)X!Q��i���M0X�����3�T�-1�
1
�c�[8BҼG�����gY%�[�?19қq��W���Qf@?&�2'��c臣���zGK3��onh�������H)^��
~���5l��k�BKL�hCar�4B����:�<�ߍ���P���CQ	�)
NLKUp*�/
����|]QK�0~߯�>8��%
k�kB>�27жlUc��������.w���rIJ�+�DI/�*8�o@�A֊��X$���ȗ�z'l5��=�Y���]3��(+[��b�_"_��,���������T�o7@��.h��-���;�*�A$���2�j��~]���t!I��z{�����A������Tǣ��	#mw𢺭p1.h�KQ��e#�ѧ�f�8v
3�mg�z]~},p�ź���g'���0+??)��	O��W�x��#���O;��k�Y�G25��$�<B��j�� ����橦]�n�t�I�h�X���x�93B��-c�x��<Q9����U�p�JmC�����bVڷi��Fl״�x"Ct��&4$��N5��2�S�>�5�~ʛ��AgX�� K�� ��:�^��	�P��.�s�^h��Q�ca�
)�ճ���V5��0���%��������{E�����C�({��Zc�/|*p1�bNH��߶@KU������)���{yࣶ�!	�vm|�t�g@��K�@3d�T�7��*$�(@�����YY"�_`!�.
�H�����Ql
����K��Z��<��&��>�bx]���	���C*�5����i�{k��'���X��O�uZeC�C0
b݁Z�Q�H)����ks�F�
�PH[,"��ԁ
�Ws��ʥy5�֫=Ik�߯_���k�J���fzfzf��=�o�tB�6�y��,�#��Z��oe*L��3�-n:���S��7�r��P����c]��v+SrX�u�b���_�.~���lɕ=Z�W�YVsV�@ {5���<ũd)˥�Jx����
���!ң��1H+z�Eg�U����
����LP�2���[y��X8U�B�(kɺ$���sF�i]�&����$[Κ�T�^A�=�S�<;/�K��I�<��_�&�IILs��V,W#��ԓͧ�X��s({
�
��JHDF+���;��D�MV��:r�ͬ����;ł��.�QOc�*�A�U�SI(S�
@�,5z���<�Z��6�J��d#��wO��zPbܚxD�~�y��Ǣ>Kxx��}�����翤B>#u�?x�]�.�����„�I�,y+!ͳ��4s�V@���&�S�U�$����%��?�%P0t�I�C�e^aK�g���9��Y���Hj�%��w�%���%pO�=]���M_���(»�����_��}91�gr��G��}o��j�uFA��r��73��KN��0�R
2�ک�!��UZ4��n�+�1�2l��i�����H��<�ph0ҽY֩h��m�j�K��o��ݐ��j}3�s�e���i�����2�R�Um&~h�
k�k|踬r!�8Mei���9�m��ә�0;����1̨g{:AtC���e'����d6��\S�n�3�_�Up�1�U��%����������P�oF�еe���Y.~�'Eh��6o����cC�C� D?o�?�M�
t�$a���_�V�k�娀g�tH�鵙���xE#y����+�6U6�~d���y[X=?=퀱\�(��/�G@�T/Dܚf��?�hh��?�NT����F�;m�z�mL�مBI��WY�������aרp�?��=ꦛ��Le�o1
�>{��Ë���߽x�,J��֑���+�rTnj�{N]��3���<�މ���J6��*k�c�
��4�� b��sxX%�{?}��zL0ҙ��6g����MѤ��]C�x>)j�M t��`�t*=m�b���_��Q���hd^a����H��
mnIs��mW��9g<�<ȓؓ��N�\�[���P�p��Q��-.i����	*U�8/��qP�AMU����&�'�a��������w�O�a��~0�p�3涨����mK�j9
ٞ�"�;������
v����+ŃkIO�V������@��cjW}�u�e~�cH,0���ё���H\^��(�*̲�r٠�fK!c"���iK��
Qڬ.�%Y&���iCY�$����pF(�
5���N�޲Ÿg�gZ�R7 ���rʊ�U�O�C������|�`	�RK>�~$H�'�$�Ԋ9B�B�-�6}c Q5�ZF$����P�e�Ha�أ��G�5ȋ�<VBVk��p`���
��[��n����~~��4��4���'u�H�q����(��4A�zO3J�~-.�4����F��l����H����"j��]�@C]��n�4^�rY�.�H9���p1z�1"�~Ix
P�YN��Z����ᳬ>�<�y�����&�&6^��޿���a	��L�77jjA�zZ���tҌ�@�� 3� H���RZtsm24���ҠI�@�07�.n�󓢪���;+fy�/&6=y�xJ�e��w�
=�g�М�\5t�b[C�WIB?���2�pG��j��7��5D:���*v�c�uw� G���!�þm��5

�ۍ�a@�Dqv�8&F;^6*gx�P�w,�r	ACC�1kl�zǎz��#$�@m^pp� �� _����7f�)��:1]ϊM�X��Y��#;�)��0zu�hq��eЫ�D4���-f	O3dm��YŘq��6Ei_c�v�懜{Ve]?��)1�ucd;��	��hAV�>�.�ݽD����@��"�
�DMv��~i��{�m~s���j�ѡdW�t��b>�C�S�z��)`�in���Kj�}@Y�p܀����u��W���H"eֺ����F�<��#���Q��{�c�`�m	T�C�E3Z��͗�1��I^(?�[h�Ҭ&�e� \)m&�C6<�v�vx��-"Yj걉�}��@�T3������;m�mQIn:�N����7T�4�F|�I4�ōR;�Ԗ|`�\/B�H�.
�6�S`���<`e�����g��C�,v����)R�m�;�O��c�G�3,1��Mg�
�d��� m����f�������!�����F<8�..�'f����8k�V�:�j�/��}��+^��}�xY��q��/|[S
�V�~���ac�i'�D9�ӊ�ƖW�����?7=�C|��&�y�Hikyd�Nu1���պ�J�p�
��4�B����Hx��;?���?��*��|	�i�b�D����驀eHȕN#3�/ж$��JeF�V�h�[�o�Զh2D�4����k�y��r�%Hk �U�
Ԍ)E}��2"��$S�>Ȗ�}�U3�[�����Ԧ,[d�]�s�B(��[^���������D�qL�v�e&�ǁ
P~S.���c�N�X`7�d��)	f��c$X�`��PI�~DoԻk�}]�Q{�Ak  
�p�t~���Q�^��ڎV�[*��	2�U��׬�a�:[�H��$Ӫ������|{��0kq�S�8t$ַ5��C`tףm����M��Ϋ5�C]~�.O�y���>��^���L%�
������^�O!lz�$\�}I"nm��A�~qAHG�Hl
��j�����@����I&�gd;L�S���#�K�
�Ԡ.�ίRј���4�fe�i��A!0�U=/@8l&��Z�B�Yc����I���Y*�4[LD��X��ʌ���F
�e��!�	
�.����Dd��.�U"���4�%µY�V���A-�L��]��T}�1OJ��G�>uT�,�)�����3(�(��V�Z�

K����F��,t�S���h䓮���e}���j�Z]qq��1�u�+��޽s�kϘ�;O>�t�kM`j�%^p���0�A��5鼸xB3'�K��`�����F?b���A�|h��v��Q�����o��6J-ߩQ/�d�P��Xh�G�����o�{��=Пe1O�(��I�E��;m����琿,�Zǣ;O�n6+~v�t�nE>�_�x�#E�Y�6��C���gp5�η.��-ENL�b6Y���`��;#��M�]�
����9�
�݉s\8J�)N�˼8)T�����#
�}�Vg�O��
o�&�"�~5��CІ��G�;��㡁/���/��	��Ie8h��
Bb{S�uƁaLjUB�tqT�Q�@-����W�8�ӂ�d�fy텛��U�(4$-$i�eG�YsY�y
�m�r���ט䈖�stn�c�X�DrFѩ���`�>Ml����=��&��`N�%��W��g�@�)�C�5���'����׊(������@O������gח �5�����oO�*�|ܳ-O���N���tN���e-�[�[�h�-yW��}����l{m�:X~��]7��ʅ4!Ӣ�
�B
+!Y��>6:�ݿo�%}�,>��N��	�Z���E�.=�lx<�` ^�Нpb,n�{n���l�s��]�-q�:�ŕ������Uf�a�D��=*�pS��������G�\�H���~�J]z{���5��-ϴC�
���^�����u^g�t���f;�D�@���_��M4bG�3�� Sq +�ݔ�Iq��8�S�_��ܜr]�aO'��X���T	B��a����U6�u8X6��V�k8�	�m�h����ߍ��Q�u��$��\�]5zؿ���A�'f�].wr���)~�����F������z�C�����{���wO����LH��#�1�|{NZ����l9�J�xp<ȲF6��¨ɼ��+�XK��
��V�a�t�u�Wfr�����E��Q�������k�_�#ڶ�y���.���O|+���;^֪�z�l���G��|a��76l���mwq��\o�&�m���~s�a��U>o��M���N�0^�p�sv�ZV��;���u	�h���,�U[F���cH�����B^(T}���$��Wz�8@�b���c��ZJ�#8.�쇔J�d?��
���A�ZyPoՠ�`Ia7�X�[I�]e��-Ç�a�q>�O�����B–Q�ց$i��7Sx7��O��+0�a�DẀ�S���^E܎��M�Rv�s$�ů����$�1��0��r6�oA��/t�M_���#c�?�#N��H��D^/r���� ���E3a5����¢�%�E����_�mX�g��:�H%���6v����́"n�tr�+Oc���WK���������=�sGֿ��j��aY��Ȼ����8��RF_P��9�߷��ݯ{z@vjk+U���_�~���|;"�t�#v'Sg���Ft�>N��j<6E:��S��W�@ỜRb�A2[�+� �W�B�<�I�n!:��M	4���@]H�A�`S+����l��@�b���$�(�{�n��Ys~rԬ�+���X.�"1���A����_R�^���Gu��N^&K�P��՟��Ǵ�UV��h��?����[�sW�Y���&p��Nt��w�f2?�7�N ��^��5�v�D�۳��K����f�R8y��1۷����� �g���n�K ��ߍ����"MA�kZ�}Ӹ���
��501U��eo����ŭ��鿏96��&/j�:w!��:�PfTR�ri��ϳOf�}p9]Aؘ<��!$��\ !�q���I�{>�^��{4�R�.ܡK6�J���Aoj���:��"�+<W�3����Q�.\�`|CU֌���i#����������i9o�m���eL�ӬVv�V�ע+ih>����;j��q�^d�t�]�T��TO8Ք[0��ncޓ�^k[6�f�rV��:�_��΅�����P$0e��V�u�%5�r[\m���جF&
q�@�E�Z�@��ó^c�k��B�	]{�s?\��k��"<���*�S������+żl#��,Mڪ��@�Vh2�~o$2�ǚ�,`���Cm�-� /1�W���_��]�܈̋Do߾y���qt6��e� �ͣ�4RX��I*�ާ�c/��Js�b�j6c���KE赓o`�m�����5o�d����Ѐ��CH� 8Hly;[.��ZVQ�����Y���gt[l����Z�R]))��vw�h�+2�:gGk�uN,գ�Gpv�b�T�UZEJ ���a����^���{x�A�=mt:��^R�R�U ��,�U����!��������mv/�R����_�}�V~�5��ڕ�q��\k�b�ש^V�Y�=�s:kU�٭�!��^�iϋ����J�'��z�ʚ�R�rvV-U+���D����j�W�Z�v��Z���f�c��(a���;�3؋rW�k������j�S��`l�~Y��;�U���0�+�W�s�‡Ʃj��߫U��QՔ��M%fE�_(�ڧ�
����J��D�fRU����J��m�*�N�Y���n�ÛѾ7���<ޑ��Wn5<�\$�j�vT�f�]�5��d=Y�kVZ%ޱ}̼�#�elO��xW�WL@�j���3L���ep�X�%B��Y~s����.
�h�@�'I>5�b��s�,X�Ul_�䘯ï��
ݵ���5_G�X/�>�a-�8�1m�(܁�ZX���.z0�V�V�yڇ�r۳9�W"3boiT�����r��d)�˜�.�,ێ�5u=3�R*�:�v�Vl�+������A!zTG� k�/���88x�րSIEo����F��/16âׇ\v���o�V�N��(�a��_�Թ�!���Vu*�:�Ķ�^�<%(+�*�x���2�Ons����ȾdG�7����(d�Ga�������vp���@�?x{���������ӑ����Zr�Z	�$:�A��1�d�PT�.�{gRO�O���U�P-���.�zt�SyQ�JoGK:ӥF��*�'�ywO���aw��2	�?��'��M��
7�`�՛䴏r����"tWS�DU.wK��ឨ�[r�s���K+Hg�4��<�J��F�z��W�q��f���*"�%u�~
GyQ՗�_ˍ_�֪Ń^Y�6��j�_��*$�溳)"��ϥ؆˸�Zz�_�[:]�&�4OT!%<;�ΐ��xDz��vU]�����+ߔ�k�ֺ@���+"�g�RP�z:XRQ���9�f)�O�z�D�
˫��(�����=�O�S�	�k�ڠM�tG��0�҂7
<��SL����]
?���
�2�����#Pݭ1�s_F�euxaK.|
M��Vj.0_
��y<΄����fl�+	h8��t��2a���ކ)�����l����Ě5�h�ƚf9/�����h=b���?�M��v�ɔ�D{��.F�o�l��i&	 �R!;�"�SJ���5A��~N�7�V�M����[2���Hk��@�)g*`5�s~fK��	�3'�G��h��C��ar�����"
X9��[H.��:x�Γ#N	%U]&$�/j�a۰03u4��HcU�(�J��(�?s�%��h�I��
rG1�,�e����d��%�	={�,œ�2�$(�f��:���n�1O�U�<Ay���t��7ԥK�}H'�޳��W]�D:�30��G:K�,��6�7��d)D�e��J)��Z%h���i��mɂV,��H568�b�L�=���F�<#��|�Y����d��/9� ��~�3�����̷�<�+f�k�C7&��]:��^��t�I���� ��+:ʡ	[��P�t�WU�O	LΧ�A�Cb29�b�(%�ĥֶaQE�,~A�GX�M$y��⓱	Xo��Nr�DX���m-��ڎ������Ӿ6�;R�$�ഄ_�����g����m;^��Lٞ͟�bu���n׍�|����Ԫ�f��h7�7�U�1�tf!N�i0�b�dݬԝ� ��
��0�	C/��w�}�iP�W���4���$͖M�&����}�!ݭ�.i��1
���$���y�H��:��8iMw��^��ݧ�`��,�q��`�	�C2�x[��b*�Oa,�@l�A��� [&��W�y���L�j��A]�T�<��$k�Ϯ
S<�E�`g�~Mc����i?�t�Og�١��\��=��o��,}��OA<<���I,��B��m�
��A�w��
w	��C�wΩ����f<+}*$���1���R82|Զl�_���.�bqs�%�q|M|��C	���B!.���<�k�.)�2JR(n�������=��Z�`hXw��z4��!^���	��e��{� e���}��S���t>����&�����"���D籤�j�o�-]�ܓ��q[�m(l���gC�-�+<p���,�5�����*%3��B���2r2�C�T|�-G���;�`0b�
;�]
	�q��VK�Z/I�jj�HjA�x$W
	� ᲏޳(�s�'��O}�T�.�+8f���,�uOD;�e�(s�@�ң(q<�U��¾��r!P�����{9j�v�Rk��@�K1��`�X����l)��-��vj�h{��븞}Y����s)��r�
tkzـtV�LGe�OvU���m>c�P��,�IйM�q ���(��d	C�6�	���RW4>rw���8�x�=[�c&��^Ș#=='�F�:�����џ���*v%ۧψ.�/x.�ޣw3��C,�7��P3SxC>�ud��ۘ���]V{���Q�p�l;�8��d ��Z��/�x�zѳ�1:x�2�Em�@n��]�h���m|7��]��+�j�]�Ҕ"ҵ�������S��E𪴹�ṓ��
�ؔɜ��h�U<��j������w���Y�qzF�6*�~�*��t�_m�N	3�n	3W���+D{&)��B�u���~H#Z���}��F�dW^��\x�ZHY�=J|�;��m�dÖ��q��O� ��O�T335�	dvuw�ո1�-�Q�WMf�I2N[W�'��q��&���(P����zT���߬L�õk��+��m�|��;��y��ZQs�^�W�Zz[{7Z�v�n]`���,�rÂ�쎁V_��}
��C~O��%��}�L�;�+�(�*�Ud�_	� ă��eq2��T���4�~ם+�u����j�1b�y�7��I���J�p��ꭌ���ҞiI�8�!����v�q|�s~�����hδ��	Ӗ{�h㻒�4���zi
�*���3y�(�Mh%q���][Y����q�6s���(�
r	?e���u���9oL��x�2%�.�WWp�)�X�⨩e0q��o��[O�vsT��
@��	��-����o�y}9�%�7Ĩ��r+,5󝚸�@
� ([����t�-y?J�9)v���O�>M�|���u��^̆�����8��Ϗ��.U��!��'��J�9��ǣ^~W`چg�"���q���n���:2�:�5�:�=Cň᎘����4*�d(�Ť�6�>PP��n�n
Ld�d��3��;L�0�N1��#K-M�w[[!n�\��纐���n�9U��4�$��\�^��<�K{�0����K�|�(?mL�dM����ӂ��Y~,�H�;Q���$NA�pe� O��Z���[.��"RÌ�vF�)�>[��yRv���l&��f�Ӈ:���w�vC���@R��[���:���3m6.��N=��l��Ӂ	b��;��-�P�"�����t^ҵ��B�@q�{Lܣ����T}��$`Y�Q@{��Vh�K��?��C�⚎��^���2.�n��ZPKS����&����H]��X�'��1�⇘�z�U�Ah��ƒ�4����2�AT�β�uiX(~)5�@|o���@p�E��Ȅ��0k���dEтUllQ'i'w{�UXt�䟵�jo��J.K��~��x�l�����һ�Ch�������ll��=��QK�9��at���
�Ë�g����|qI��Ҭ0��˲�J2T-Ȱs6˹�D�e

�F���q�O�Yμ-�ǧ
�K�.E{�r�����|,��r��:>$�����i��m��	/���l,gѝ=��t�4_��
�:�F�x�;�n!I�t�O�����T�"�����˶F�G����f�NQ0Y|��0�}C�nӴ�s@c�Z��[ߣ�ʰ->wf�L{u�26�Öc'�0���Μ���9�0
uQ��uxb�@��;��<����#՞�x�X���M�Oaߪ��7s#N?��oFk���|+"���m�C���A��l�C��5Zr�'�p��	<C)vSg��a,��9K��R:��'�R��:&	Lk,���g�wz�Rwea���e��P�6\<��T�Mq�:|�9�O챠/��s��gl�XL�W&��m�ֶ{�_�����r�qA!yZ'9��7Y#D���iʅ>�%C��Y/�p�u�y
l:*��[+�r��̺���E�<+ØC��#��R��,�Ó-E�5�PA�qFDަ#�QW�A����|:+�L'��) ����%N(b0{,ϥ��[��n�K��5cCq��R=u�h�B�2��#��޷ ~Q��i��ҤYP�ͧ�U�%y:�9�|������sV"ᛌ�|�{�����Y7\w�ߌ5�D�Q��op�}�k�
�'Q��k��8�gT5F��h�=����Bz2�)�N�f��6}d���k�Ҩ,5��F���Ʉ,R���dܟA꼫����st��Kw���X��]{L�����]Ko1��+Lz�	=�$P�B�U{��a�Ͳ�d����^��o�AiO)�{���x<�]	/I|cÕ��m��`ˀr�C��|�w2y�50��DL'^x��$)�������	�0.d�Vs�'N��B��{/�6��yS�!��<�#MS�>�t�eZ�H�~t�|ʏ��l㸫�����
�N
��[�?�X)�pa�
���e5P'��>�N���j�\)���&p��_r)����D�p&���|��3�������j_�b[��$�_ M��r&6�½>��Da������)��,�RS�<!iS%���I3י�ٮrxhMM�I�)��euĽ����\_��aE��|�ee���н9�v*��L�hМoYz�Iq1����Iz[��� ����֗��3�5g�KՅ�äBY첊:<�\�Fh@ǫ<7m��M�|�k5�r�l���6WO�p�Æ��:��DG��wo)\�)_���J�`i�@�'i� l�o�"x��5���B�6���X�������`p-���â_����]�3�VLOs�~#oF�w��C-o9ko"n�w��MO|2u0�ȱt7��;�$�q'���	�h!`-7�h�/z
fhF��R�W�֫f���/4�B��X��ۢ$�_`�%�5��ٳ��/aK������j����Q��-#�XD.����co_0��Zj~��Ԫ�aUR�f(���;._���9��8�!�;L?�9��=G+s��"��n(���3�l�W5�c}V;u��^��h4ܼ�<�H<g˽J��[
�S֙���!���6L�Ψ���p2�K��C{W���.1]�<f�69L��u��]��V��o54PSg}��5N"��ZӘm�
O�����â�Q�o�1\y�u�ǠTw��h(R5m��t��	F�����ȇGOK��l��&A(	��Q̳�I
��aVyҤ�y��ދ�V�D�gM5:��jup��2z��$�[p�M\��A!A�����{qk۽g�#��O8��'#G�5��k� t!���ąz{�3dgT��Wث�/�qhM�j\^��ǎ��0�vی9_����]Ko�@��W��i�"q!�SS	E!�I��[G�CZ��w<�ݙ}9i�x�������q $Ap*���X���D&�N=����8�B��|;��r��k˻`�!��,�}��bl�T$�VJ�?�J��5ļ��!���#�\��w�v�AJ�i5o6�c���C�u����+�TJ�����/u�,,յ-|���fp��1�o�V;�����H	��ȫ�1o�E�t|��g��/�hk`�^�2T�k�==���H@3��9%�X2"����~)`��Ĥ�71��`��{m~��].�B��L� �8�<V�:!($���-"�Φ�ń)t�5f�r%)�Lٲ���X%�)��#�F�_��b��&9�c,��)�*U�7��Ї>��l��Y� n4�<~T�q��0���d-%���\�d\N"J�Wcn�j[-S�|0�fR<�P�aȝOw?��_��Ź����D����,p���\���ȞQ�:!��h2B�IB�
8��:�q�]&��A���:
 rL�����
��a���,W���L`���:(^Β+!+�K7��!O���e/���zj4[hvı���w�*����uF��K��ȹ�I�^��e[��#���K�M��06rTA�>��uY�ﻃa	�Lxomז��sZ��C��I��
�uЈ�9��֜�C��87�l9�0�SGK@�^Y�9I�x��Lu��7�C=Q5X��>?	&���H�55�H�q���36�y�
LS������e�0���	:Fh��.��VG�Ǫ�mw*je��s�S�m���$����&�o�
�e����P�����M�ǁ�$��r�� Yx�����$B�" Ob�l�;OW*�~m�4�e����*�O'O� Xm���H��
��>��0"��p��@`^�K"����:rP	����ڳ#:I� 4Z��Q�(��p�Rp�ָ�R����5�/T2��K1����ʫc�"�Z�〕<ܴ��ױ��&������c�'�Z��&~7�� ���~�n٠5�X��n����B�f�CT9��T��ˡa⃻2��>
��q}��I��yQ�Lu/��
z�J�������
����[����.C�8dJ����c�ԃp�6@P�53��@փ�J�n�ݦӋ��lU�i�/�w����t���0o��a�A��ݤ�uM��N���Nam�	Wl$
��i7��T|���F\��S��1�ѱ:y��!B[�CT�4y0�mPJmwF�mZ�V�8�'���o�ڑ�:��؂�V/^3��F����몮�yb�D��3K���6��ܖ
��/��,�u�D;H��W���_���Bڗ
� К�	I6��'�C]���]KK�@��W�'k	�o�7�ޣ
�������y���[hww�=����17�Lퟗ/��n�U
σ�lDʀ��Bқ�X��̄�}m8�����-��{MLoVb�5.�A�d��x?��F4>���%�̧��NV��)��'��ޖ)?"��D���J�>�ݹ��F�ϩ=!E;�>-T������J�m5jS�M�nn���}�����ֽ\J5��u{iv���Jo�G"1"Uz��I���w{C��$3������&���'AJYY�B�*���@_�>�[V��(��Ю�#Fz������@��p_K�^@�,<�m����a@6bd@^�n��Zk��1��̑����d�z�q�8�d �8��Z�J�9�ׂ�%�s��FX��$[�?�kd��p�������M]��'?��c�^�?�YФ��)�@%:�l��j6��3�U��D����.��\��F*�%g!ue/^���mUHW�,I�R��pa�sW���������=�SSK���W���A1	�<��,A/�EQ�do Y����}�3�=��p�u�Z�Ԝs����ӯ���!��WNU�c���2�*/�ucx�	y)
$�����S`��̤@���~�Q>���D��3L�B�_���Ӥ�:r={P,�����y�a��f��d�?��m1N�#ae��#�/�>�y	��DהӶi�x��nnl���`�uC�o��lcT�����L�V�
z�4P�Aa^W��whDu�}Am���k���:�6W
�ǁ��>ڻpXf\��q�DfF�%:�,��N`v��}�'��&.�-!�vstV������A*
om�t)܀J�})Z��	�q8�L�@jPm���~l���	�>܃��f��H�ٕ�TI�|�Ho��GJ+����ʆ���.|�R`r|8�)��S�7����*�,}F[[p��|钵��i҃�&QVb��F�"w{f�J&4SXH
���v78Wz^�0�>#�f���L2�����s
�\
>Y�Ֆ
��(]�y��=(�ȡ�
�x�)l����9?�8��$�#�Hx�69/�&
'
�
Z3,,����1�*�;�L-��{d5���f�3g��T�m�M�j�1W�gMk�Ʀ�~Xe:И~e�H�j�Z�7ME�(���yЪc�u���,3�=��cJ�|�f�*
���Y!��f��c���Qu{E��'�U�~�I8�D�qnGSvR�/����	„��$�"<�d)�R��+#��FMJ���ps����wt�_���s���}�z;.ŵ�p���*Gܴ5��٭�[�nB+i��.�
�.�h��\(�
}p���gpM2,.d�:��Y�p���+h�t�F:A�C,G��e�t[>
�Y��*U��A�%]��7�����`(�G�R�4K�U��(�B[дD�%���gي#��*�{�?ILyz(�
���v)>�H�0M�4�����&+ҿ_u�r�i��v�o��q�2���υ|��	����Y���� ���XA�Uʗ��K��������]��b8
|�w�a���/�g��S�
-Sb��JW֭��,[�����?�<O<�����Pg�˕v-J		&��A2�� �!o�;6C��Im��L5���s5�s�ű�f7�z2@L���5N�!c$���wF�O}e�F���3jw{�����u�݀��`���P|�H��>�q�{�#�I+M�����ص�I�Q���Y]��a=�0{��0oDq�LJ?j�s�?���щÖ(��b_�i�ѳ��=��PŠvޘ���`A�a��l�
\�6��`f�=���ĝT9xHu��C��|�'�����\`�:��Y+'��hW���o]8'�o�sD)��=u%��(��&N�H7�D�3���{9���7�W3\��6�����ċ+�LJE����A��R�6�LO�S�	�=����ԯ��L���N�?3q��5!��Jp��������<��K����(d�
�i0"z���Ԣ�8Q��<�|1��>�;ޟb\�)&���p�$���u�'&�:�z,����ё8��F�������(���Ԧ))ସ6��_Xf����g1&�[���3��źn%�1�ྏ�+��lȾ�uݐc{��J� E_�Q��~��Fz��H&����c瑛����^6a4-�[�k��@�k��}/�+a^�ީ�!���=9��{�
�����J}�K�g�
���1_:)�
i^ؼ`�������ĕ��Z�o�f�sy	ac�1��n�@��.X0
����p���:c`����>�)��;'ub�r9u��C������_@��!ɯ���$l٫�91
v�yp_ ���]����B��G$�����pcsw�tw{��a|��F*�#$��<4�D���x[5|_c�Ԉ��Iv_O$<TY\���)��a�,�	2�*��͍����z�Ն~�APB�*���;��]�k#�]�]{�FE�T�d�7}7닫��܌������fT�t�ަ�yH���dmj;|��=�?�X�}O�����g8QY�z��N��
U�>\��{�n����W�Gp26^��
�N��=V���!-�P����P�8"�J֘�ʸ�~"��4cs�h�Dq�	-�Fο��$���|'ŽaK���W=�u4�P�.R�?��W�-"(���y'�~�*��(�'���9{�w��&�]�u�Fo��?!I^L�a-��-ɢ����#�+q��CyH�'U�?�揅��i�tz*���4�����~�O��+�,~��[7���s�=�
�]��h򩘧_���O3ğ40�>�3WH���.��=�s�Tن-;���['ҳ7[�~�Nu[��7� ��o}ؓms��&`Dz���O9���p
��:��w�zѨ/&���#7�\E�x��J?!^頖�3��I�gDu���!ް�J�1�o�ˡ��&i�jPX_�Tڕ�Vݝ|z��A7��i`5�r��՘Aʭ���6B\X�ro͑�DP���}�YJ�&��̍J�5�f���d�D�GY/���g1.�"@S*�r��#��	���.3h�Bn'QZR�	�cDO�	E�KE�E�}���t'�L"0�)k��ȁ�z6~N�V!V����ǃ�y�l4�2#�L�X���� jőKF�|K��/&��'31L��|~2!�*��F
�SX���܌�yf��h�*��Cj1S#ѡ;�BWEkqq'��fٰ;�,�@������f����Ȕ�#v�!�V��n
Ӹ��I�#��0���P��J�M�Y�Hxݽy���<�S�U*�^n�i0+�d���W�J��7j�+�~�mg3M+���|�8�A)�e����	��eiƼ	)�٤-��.cиa#�:��^	��f)�H�|B��^���8~�Zr�G!��)�I��Yo�H��AhU�C�'-�@7�0�Nڹ�j��#[ST�ۘh��q�x��M�z�h��b�$E�v6⧼�V�$��1��"�uF�;�C�aL)��p���v�=�r_ɟUd�(�i�br�FfΩ!�n�:�����*Sj7�l~�Hz��{� #t�p����\z�y��k%�BH��-/~G�
^'�
��1�×����'|����K�1��������7A1T�=�z�������Ӄ��3%��B�4_ң�"=L�
~�o�Vý��"��WF�hs5��eY,�E��l�+����_��B�P�Y�֚�X��_&���mk��5L&ˍ$H^�
�4[8����t�&���rL�M[
�k������O�[4��,��@YP@�Z`Ƚ�f�I	,�m÷�8,^��*�*��y����C�.��%X|,ěf��נ�b4
�[M�נً|�` ��|��Z@�j�^B�_浣��/^�^g�_Ay�9/���%<RN~�K(R��I�x��M<�h���O�tc���c�k�n#�_c�Ea ˚����]_r����(�v)i��-5���
⽈�DW�m�[_��M�x6�����|�8��B�,{��ld-�C[��&��1�b)
�\?vn�x�
�a�ba�b
;;��a��r�Ct|�5���;��:ȅl���f��P�K��?�4'�
���[�f2w�k3��x�"��i7ڈ"��}gqSP��i����/ۻ��;��+���w�6��c����^[x�N�#��;{;;����pK��l���O����
o�4߃T�5�4z���z��Oq�B�[)��#�L���Z/�2�K�ֲ�9XXp<��e��/�y����e���%8�	�@�A��#�=�b�o�C��+Zd�\��Z-�����)״g��-��"bK
�1�Z�'fTf�:�#s!Wf�::}�k;Qk��x(�W�=���sM��r5�3����[�5��=ÿ�-�
��H�
�<�;]Eh%Ʊ��������⥡m�i�FEoCo	�`��o�-i�9��_�hxkf+<�]��v�2�A��%H��ʷ�l�&ܒM�ZxѰ��*է��>��i��|K�
B6k�W(2��9y��DIW* ��
ݬD��?�!Pϙ�^�ٛ#`k_f���?<�p�qcK���aߵ(`�oH!��Eb�z�_
-ˆl4d��t0cF�L�OPKX�	̭�'�Ѽ$�<0�i��Q��"h��
�4�maz�D[6��
F@�^PI�|ApH��zs\g5��NkQ��=f3O�%��g�6��"��_Lmݝ+~6�=4:hu���,0�1��]"�\�����B�ϗ�&���[2����<S�+���O�!`��d_#�D�i��S�Ⱥoe��G�?�cTɤ� ��v6zȿ�G9l�6a��P�y��\0n�B��;u�:�Y<��x�Iv4���Δ��WZ�1��x騦�d6D1�J_#�=��3П��A8o��j�vI��2�@?r��/^O6�Ly~~>�ˌ
򚍆w�~c�G`�8��T	�J:�̢(�ѱ��,��Nd4�
�8�v1�Дw���^���w��8��ٱ�ȑ�̖/���v֗�
�h�!~[K���\�5�D��A|��NQ��
Ex7܍�>&S8��x�D�a���rpyxRë$^T;t�P�)r`q`��(���K�>���Rx��6�W�ɻ�Վ(y,*��I,�~��n«0�p�D3�t��n`h����P^-���!�6�b�>3ƃ��s����R�W!����?k�6z����N�w��zò�$S�y��Tx���D*���ċ�?���� �E�g�)£%�7�i1(�	�|
�H�o.�
��[�Ce���$Q:�����4dtF�\+<קba3��Hy:�p�%�;7�6��S9�c|s���爵�ɴ�� ̺7g�F���#�}��(JO�w?�˞,����j�y�z�8�c�f|7�X�(Pi�
s`H��|��/����Q�hd"�f�Wy�<X�
��j�9JO?��Z�vZ��2x0}/�hϭ*yW�g��K�I~�����S�煬�`��cH�.�!�������g�Ù���A��.ت��N�@1��tsB��?Ө�f��q��kؔ~�A�sS0Zp�[+�~�,*!��~��,nX��\����jP��&���t�������	(�M�ca��%I��O��R�>���y}��a|�ع��\��7�Ts:������XPdS�	��V�P����ct�,6�A�+����H��^N�,X=?�Yg��h�4+�ЇF�`��u2y^�*�IV�Z��Yx�O
[ֿD�	�؈f�U��Z)��z��>e��[��f<5ؘ�\����2g~�&��㛽�T�0whӽ�.��ڽ��-��E���&��g;5��j��{ْ�c�R��o��!og���3�[�<-z	���ɤ}o���2���>��\C��[wx�$3���d����Ћ��R�Jl��;f%�#�-�:Q_X�t�}��Im�E=�7l���|�M���	Ga���QP�|CP
O����Í�����{;��ʳEb�rrIDQփ��(�(�
��BQ���|�rC8v; �n��]+Iy�nZyO
l����aѨ;'f�9B�_O����W����/�E��N��	.��ɪ@-I�p�3�dب=,	����mG��J�X�v�o��y9� ��
�rMml�������ڮI4����/��ɇt��o��1FE9%Y)��@��K�Qo�� �}⌄�����{�D����ߏ(��I��nSs��.{�T鉸�"��Uw䮄�7�zz���i�����Ƨ�
0�o�g���^�i��#
`9Ӏ?3�a�7e�}�w�?cHo���<��YU7{��+J��똲�>�E�K��a��N���gIb�̝	�3�'�gb�N�r�ٹ�t��*P�W�`���c�çjz��`��0TW�_���q�z�m�{�)��Z��c���f"0�P�jbXJ:+����g�w�1�	:�ߍ��t2@�`ͱ�֖��H��2��q��a�[�_�΂����&�a��Wݓ�<el��.��[���ز��{��o����7=�d<\୏;�NѺ�@��I���)L�)#�����VlhA�� �H�n�r�.Z_j��>ץ���
@f���Z�f��m�e�f����|��U��K5@�
+O�t�e�*+�6��u���/6Թ�`.1�^[-1>A �(�0�֢7�^fI.���0��W\#��F������H'�
s�ۆ^K�{�TI�o���+|b"��
��$���j�.3��3������!4��^L�@(���Z'�om�`%�I���_=9��b�
]�W�0@��	
�oΧ3�3w�%ޓ�{J�]w��du��,���#�E��ʮ��&�
�Mx�^)�^�q��vP��7�8�O�nz��?8�dT�?��Sb�>:P��cH؀[܀$"!���*}�4�"����ȧ�>��Μ�͗z��-�e[�z<m�
f���"T#�}�D�Z��WQ%"ׇwgf��SB˲����Y��j33Q�Ї��%����WX5���i��?(bzl�<VB��+��	�h7��Ox��]Q�W�N�_�DUKҔ�8��ן�GR�o�czTN�Kҏ��5�h�M��+�z�:WB���,n�#�'��E�f"�<�U!�5�F0<���icW����j:L�##���9��5�3���pOpQ�/%�Zy:e4�4�\+pe8�>��Hh��>xSaJH&��H�.�jU�J9:���ߜ�9n	&uE�I�Y3�:!s�h^$�S�9�<<䥵��L�a���f��9�s���<iw+$�����ׅ_���A(���-N��ѓ�Q�	���Q��T��ۤ��ߤ�Lq���@��X(��t��9��J�dS���g���z�>z�iA��ߙ0Ć���Ͱ
\0j�#?0@7
��x�� E�l��l�q��qXg�$�R곏�t���8Gc;����`�;O��#�����x�Ş�?��a�����xbW�\W>�b@��uFq�#�~X,�OL$�(�I#�.4���H���Pɮ���ܚ�0��4$�*tgʆS��X}Ø��]l@�1Q5XKq��U<�_��72Ai���=�3�9�n�5܎��8�by�=�2�_���ec�QP��̹<�1���<�m�f�jJ��U|�Û��̕��/�Z�D�2W������
�B���y�qhn�|��^^Y���b�-�?��އ�kO�io�D�Z���LBx�\�V*��*!E�\X�<��ԫF�6s�<8mz�3� �"�ϝ�_�x�.@享�u��2oS�\Fc��!�z��2%�f򷄄�n�'�\^ά�Y��Ϸ�n�9#��3�&����g�R)O���+������-�1%|SN'!�Q����n�6l��}L�����
6	�� w�L�*gu���&���;�U�DȬ�!Kg&y	ME*rD'4c@Y��;Q��ej���gF֗3p�8���{b�#�w�T#�(�~yV�^��g�N�FڿFߡ��u�ȇ�d1r�"#ݿ��N
f�I:=���&$P���5i]��p�D$&U#��g2�a�R1=^�*_���2_��c��4�6�ū��"8e����[�מe��Ƒ/1[�p����Mv��P�p�Ƣr�B�C���_ǧ��_�we|*Q��poEїMn��ZŴnYкC�q'��ᥫX9?�ZDK�ʄ4�6[���L�MP�V�1jh�>1�h�Zx"?��w�s<�o�0R�2��Py�W�3��X�R���&�=���0�qH~���q�B�c��?@�Nmb<S����ͷ�m�g�W�����=�|hrw�sd�e
&�Q���颐�b�e����`иbTr#q�eP�G�$�x�;��8�fďb3&�����IΡ�+�Х�QDяW�w���(���0�����~�Y�A�
�z�2�%�R�yx���}�wFѵ�h�0�����"'s��SQt��{���m���֙w��>6L��a�j��@�#���!vv����( ��x&���D���L7{�g.�
����~�/P
w�+<�\Kp��¦Ʈ���e��)w��@��G@���V��e5wD�S��ȿm_������jj� ����Ă��o�䠭ѡjZ�h�G�_�i�_��~\*m&P�滔�	)��`=���}�ʍ�t!�bI��H���s[8�A����R���T|�2�kS�=z� ���s��T��u�5A�B������u�i�;���D�%��v.�*۶�*˗^Kɉ�Jsk49%��ٕ�өȝ}Ǽ�;ߜr��"=)��e�t��D�N@�������s�R�a�B��5�ĉʭc��WRR!z�8����5�\P܍�e�KpR�52�v)���V�8�>�c�c`Һ8��:�;��?ռ��y�������B�H�n JF|�"��"7�a�Z�
[rc$��gq �]Mt3+Qu�N�:x�p��	j��ޑGJ�x����_#�#4���N��ڟG�:���{,'y5����Mp�[����pNz���TCK!t���#g��N˚�n�"5��2��j�M�q:d�h)d�(�
hd"��a�V�n��d�Y��ͅY����]OG�=��xI���}hHU"�S>�Pˊ�(W���|H�wgg?fvg���Ż;�73;ߓ�؈�=A�i��O�:ju���8�> ����ҍ#+��E�>Z3E
x�W�@�Gv�蠍�ԧeQ.K��!M�ɁR�&�7e;C�^�eY�=���d�T*�����M*�K�B����4���p��>/?��Q��S��/�����J�M̀���m��P�bU��A��׊6�gH��I�
�Wr��,4�O�b�_F�J�g�k��;���\� ݭ����:I��+߄�d?�@��5��;��fl�!Ѐ|DޝVb٘dZ������!�ݴAԺU��� ��d���n+�ו�i���}9y6�N)������a=�6��*$�m,9�n�2Ӈ]���U���I�k!b|3G_'�ck��G�KD+[�V�'���[J��xQ�p�x���w_����9{�k/@������l^���q+��4S� �M�olG�R��9ج�o�zPt!ԖP��[8�-����H4�w�����?��Vv�[����T:��N�)N,�n�� <�	��)p#D�Lf�����x�(��X�\1cz�6��g���m�^�ݝю���J��)w(֦��dFW�� �C���.g֛��:'�F�l\-2�'�p:Tz|!u�Í&Jze9}�"�'ӄDž"qM��z���l�����7�5'��1E@P����T��?ڶ���>,�|���ihۮZ��3�Qr:�}:
kAcT���'{�
��֘A�Bf8l�
�ǰ�2�c�w�f|������
�

�z�����5��F;�A ٽ���������ޱGyp�j}�ӣ�z'��dw�E�)]p�i����$��R|8;�E�m�Ɍ�ao����PTj�n=�c�B?��on�.�0G-��R��k�Dت(,��5��3�
ǁ�����b���<թ�b�Ӵ�֊~d�r�ĴR��B5{u���h��p���͍���`�#��*B	1I�b�1�I�2�l�g���0<2��u��k����%;��c�p"[���be'��%��P�_X>����m,0
�؏��HE�7�l����͞��盨r��	/�_���n�x��VT��hL�r����>�u@C90�QW�4�25����Ṅ����i��-R);�D�e�ɈsgKIo�{nw�[���ܔN��a����X���|�W�����@�g�u���Ѝ�AhM
��R�w��BZMR.5�?RU�x�r�_�*I�n�����и�M��<="r��]N�fU��3!r��3�wn�H�~!;Vϡ	�m��{%���<&��R�v�0&:�.�]^W˸I��v�+'��mx7<"��^�z�e���"�_gkt��R����sgSH�v�T��Ll4�"��RAZٻ���m7�2O�;�ʺ�E�'+F���t�.`�*5�zT����/%
�$s��c�68�~k��mg�m�SՑRi����xP&(���|��Z�O�G�|�oV�e1ʳ5� �Z�0j�]��.-�Gz�c?�{;,&:�
x�ꟾW�r7���`�u
���}��+���T������;n�PA ��3�<sM���F�s�Uy���঎
vK�Yˣ�y�J�h,�ݒ�6��j�$�8:��r7�=�O����94����=;�m�x�ˇ�O�G{X�6�=aevG
�*W̠��Q�����]�n� ��zI7ʭJM.U�Z��@by8m�*���6^��m�1�0<�������	�@�}�'s4R�i4?�3e�p��c"_�03�Cx	���}�i]�;��6Ţ��:�E��PQ�4���x�!�=FU������q��m=br�u����
���Njuti<P9�����QP�أM�>��ٲ�㉇Qp{$�0r9��FA4�+��s�o `�f��-�s�@kj&gks��A�������1@��N="[�d�ael�k�YRz�dQ��.<��6��DF���h�`�+���29�ȝ\>e�dS.���m#7T|�P��#�m8�\f�A�	�R��6���9������G�JQ�j�.�Kaz�⥡VL�H����r�Z�|���o��o�YQf��d����m�QK�
��^�s3��>g�0CZ�D�[l![)$YPuF%NY�z��a�nj4���E�pl�e	�Y�s,�H�c�\;�h�~��W,�i�}��q��*�I��EOj}LS���R����]�N�0~��cR�o�zЃ'/>
�&M!v�շw��@[��x�-��7����H�Pvl��:(�
/��ʝ�wj7�Oh����n1�����5�K�>;���0�"y'(6xky[A��ķX&�E��qԅF:�fu�y��Y���
�u��Ϫv��s����D���2rӔK�:I:���])�wF�G���cH��[���;ڥ+z_����6b�����gY����ZHk&�yV�18?I�٨cn.7��Ws��'QZ��Lr����EY�z�0����$[��%;�b
y5������فb��a���-&��ҽm�V�l[<#`$�Ѿ4��Mp�_P\|��Ʋ�R����*�VUkHk�s<?n������p��[eN�AGB�5�_���}ײ�Hr�|EL6��0hf$E�;�{��{o���<�>��3;z�PET&+++}H���?�����_��o�o�O�������G�_c�N��0�~�U�GƑ���ˉ��E?����&K>����0�o�c<�M�|σ�[�?�z��R}���a
�^2�FZ�SF�~���r }��}��>^��?��˝�W�S�����_l���>^՟>������?��I�!������q�Eu�$���Kx�7��z�>}I��??�䏐|z{F^���S���
��{��Q�^��:�_�^�[&���G2_ſ����A��
�'�73�	{=����Gy�&����b�ߢ�k��N����o��ߡ��4�P����J�_ǜ�u,�����C�/#�ٳ�]|z'�N�~��$�v��ſ�a�jō��*�~�Z�j��렟�����[��(�|�+8����t�C�o�?�a�������#I���C{���=��:2���ߏ��<0�������)�/_/��㇄�P�%����Ï3�?��H��^���T��9f5���(>X�/�bO���1������Vظ��v{��߲���!����|����|��'�����|I�@�����Y�~|���m����?��G��e%��:}_:}�:?.�>O��҄_������g����ǯQ���~�ۭ�������}��}���קO��G��3�^�;�_����6��Ϗ>^;r�����򷭟�C�M��%��z����oo+o�^'������ۄ��&�|�?���W��;��~d�>��C��s�/Z�oy�~�	���8����������]��58�zA�5�pY[A�I[�h�nf��b.Q�)N�����2�-�<�H�h><
��/��&���ctJ�Q��9�nT"�ʁ�x	-�5�6c���!=�`��3I,v>Cs��S�m���k)����&
I���(��+�r�)pq�iV�nVX
��d���=�ifI�s6�C=Jyc���q��~]Ԓ�goޕ�Gq��'��
��H�s<�t8Jۄ��o�����Q+8�1h*<��_J♦ƬQ��k��%GmA)ڛd2%�Z��d'S�~֊�d�~bV{t����t�ڒ��-Z��ZO�)�VIg
|L�4�D�����U�A�)�BJ�62�
g7$,6>��Dqh����:I1��ęC/ �Z�`f�Z]V��.�=�v���ڂ�t׉n���������ŲEm�U+�M��GTҾ��\�2��L����ewe,�['K��qW�
�w�0tb�խb4I��U�w08`�8�9�!�NoWw�-�����@;���?��$�+0�K�@���9��TI�4�F��-�8˞�7��~��j�"@e�Q���k]��1����$>P-RϢ�������5�L���|L�*���\��m�eb�A���K��:���j�sW��TL� /&%6�\��[�Z��t�&f�
�Ze�8��`�}5�(��n�;���=��QbK'74q����Jp旮q5b����<p8V�K��A�2� �8�彍��ܠ��l���R{.����)�\@8ŕ�;�X��u!z�sy���,�!�I@�;N���v��1�l��N4�~��mKHff�c�+Ӣ��3Y/��Y��D-�?��R
^M�)
�|�f�+͂,��c���{�D�N��n�m��ƚ��sdZ��"��ᙧ���ǡ%��
>�}w$B]�����鰼[V�)��'{�.u��3a0[u���tI
ݫn�	�`��Z���~�J�ހ]��<_|ۘԗ�t�c�����E�ȩ�=�^���)�7n�V��0���|^O�M���BT=D���1�r������j/O���E��$<}N�+1��M�"8�
J�\zY�/�l`���V�t��NS N��G��Ӳ#��E�p�N�ŰM'
�P�N,�S�uSr+n��o��/�W��SB�n��Y�3���`+}�P�./̚��P�.-+a�G\��p;u[��Cx��l�[Xu���w��oЃ\ju�
�޺:)��i�R��3�x͂t�]���_tc��k�E��=�Ӳ��ˬ~ıNgQ�m�o�3��loA
�bz�6�@Z��G�Ǖ���v�p�-��7��o|���*ׄ~[��N�>g�=���o�Z_�\Y��"�N��0�beh��������:-a�S_xM4l:�/LʷqY�U	l�̝/IA�(��o8"
ד����A�Ƶ����^��u;czo�yۓ���ץ��NgU���H�D��S�C��z�"�L�1����T��sR��ބX���nв>�Oaa�e���^QB=&�N�2
�]����mF��~��l�q�=����䡿���ug�}Cײ�4D�#�TgP�(����eO�z��z�9𳯩v�^�1��bYFf��{�1����c���hd}�R}�U��^����X۰;�ֲCXF]�X�83���Nnԁ��qGn�}��������r�	�K�<[c`Oh�h�=�;S�*�n4�P�
1܊��Ú ^*(d$��N>q9�[����@�=	��)��T�iMB��&��sw*x�E�>��>���+r�j�"�?�/X5ʜ��u���鲮mw%������O��:����M�n��������t��L�w�r��|�?MӨtd�0WޅQ ���{#����$�i$�z�E���Ɲt�� :i�`��Z�5�|O�݈�I(������q�]2�B6w��p�y"I��i�z��!kiw�e?b2��̟��j�uٙ�E?�)etzY��;�G���u�$�L���Q����#y|��u#�e.��fgw�P���l`z�6G�[b�yFu���	n9���Co\�A{�מ�d�8��1XrX6i	�S�M��@��.ta�堇S�le�eܯp�<��I�lVd���V-4^u&�11�YѨmЭ.��'e3XT
tp�����>�3��@������rk�A�:M�S<�о>I�6ȣ�n�$u��b+赟��a�L�Г�����pC?K)���oJx���R��Z�SG�t��XX�M�5O�!4m��l���^60����("�§	�.7
�����8�]���58 ܙ߄C�j�]I$Q��4��%Lp6!m�o��4.����_H2�t�Jг�@Y#B��U(��zC����X����(e�5�a#Y��9CgO����T�1�Y1�F@�V?Pm������+v9N	��<GR���V�8���9
��(t�W�ߗ`9��	X��I)֛B,�Us?��K�3��v+Sc[(�@F�����< �Y����Tk������M�J`Хi��8Gb��V�B�L�M���֛�|+�
8Ca��⃧�|�PDn�n@OR�������}�D�QΠ~���H�R�G�ov��@�N]"rF]�B�(��%,=w�NvF¼��:J�<��TOF���it=u.��O�B�1�a�Ik���F5�϶o��S8��\�A�Wh��T:�5V��k/�*ޜˠ��*N��b{�T����=^�rO��0��r�x�U^���Ћ���8g^,
Xm���r6�H���Ŗ=sҷ��6&C�N�QE�Q
�6��>qx��&

�Sdo�8ݖ��O������A��l��F=�2��o.t�H�݃O�{�W�@z��I��%)%9�Ym�7ao��ce�+ܓ�F&#��EԹ�2b�q�IL^4J[��H�]Dc��k��@��z���
�6�P�yI���{��g�z�Z���V�L?
�OgO|��`Y'�x�=r��[��f_��&�[�G]��>���5Sr[���F�1Oґd~>](�lGn�p�]���ZB��L�c�*�V�z������/�.y/�0\}�i����sVR�Պ]�Gn����8�%f̂6�^vO5j�#hߧ}Q��� t15��;
<E1���5$v'�̣�L5gg��s�|�!�bA���Qh�9�k�l"��]�`��	ꈠMh��]`�P�}�����BS̟�S��F�����
{����!/��0`���hfa�1U���;�
��#:�.��VpS�vX^EL�j�����}=]�R.?v�t�z(�"V��KS_�3'����]I����(ގ#�=e�N,>�I']tN4�^wN<��æol���|�!��}`��׫�|BY_�웴����l�a��������'�eeI;A��j���8��c�f%bC�++6�؄m��O>eduf�h��\P�4G17&yiKς�i‰3����1�O�)'�T^�����e&`ږ�N�s��T{)��U[IJ&���L��Dȅ�c�V㇞�|���#�{;l�lc���k�H�Ҫq��u^��D�T�J�nM[@�NjS�'�9pdgQ��D���2�e��WΛ���mEc��=��B�^�u����o�����nI	+T8�VV� ����,����`r�#�������U�����O$�Y*r���ұ�+K���W�yn����-@x�0�gr{�a�i-<Z̒��G��BRu5.��mY����1�z{ɓ��p\;�C=�(J`�YL�����Ľu,z�5��<ɡ'�ks�,v3_~�l�ɱ.��^����	 ����rY�sP��s�ߥ^E9�˙}��*t�dGE.�=�-��Uj���K��	�I����$V���^�����w���)�Z%��hPAHi[�F�K����n5/�t�I��.E���w�m�����lP�w���zo�C��d��U���)=�{�[��<��
�3S��,���yg����f�^�9˨_$�����a<{{�&��.���˸��n���G�4�Sa�XlR Y��y�+��-Z5ܰA�vW؋Z�'"Q��Kw&�Ӭ��U\ �S�A�4��
�^�8�ԇ.��Q/ڸ�����y
�:P�P�b�1�W�.��)�Q�]�G���pp���a�.
�BF�&[�m_N�%����.��|Շ�D&��/:Eγ�w_F]���SM�!���
R�[ι�'O�9T{�Rlv���b,7YXg*��4�
C�-
H�-2*�Q6�ʵM��h'��<t���|��7fp��6�P�K�KA%}r�ҙ�s#aa"lY��Ǜ��<��fu�k�jSSս(X�yh���;��s��� �C��#���$<Ɨ�x{=�wkbҗx�.]���lQ��z[�0=8���B�4
�u)������8�r/:�P��,7z�m��FŖ"�����C��yؤ�v�{���b!=Op|]��^5�G�}=x���!~WTZX�,�:PC��U��<��� ~�}8yE?���d�	��j���Z$��d<�
��mR���^"�U�:pљ��F���LCB�kE�?��8Ķ��*�[y��oc�"tSYz��T��f���Y�읍yn��w\jCw2Ȟ{_�ς5/U&R���Ь����
�gmHq���q��G?㐚�k�2��Q�=�L���|wrb��hZ68��p��܍��Ø	\�_^�e�Ȯ�(usFOݟ����q�&/?�GeR
2mR�1�W�Ÿn��o�-50H*.���g��5
��`Ff������g�;�r"�i���y���&�&��H�S��<'��:b���ٹ殝B\}��qsLh�q@�^ꕜ��j�G�>�Qb����^���Ŷ�9�-=���~���3�+��6�!T��/M��(��0z�����o���
vŘឲ-vZ�q�X2\������Lƪ���ꟊ�þ͍Cv9�F^锐�xE�rm�x�ʣ�%뇆0��Pts�ѻ4o�<��h������uX����	*�J�Em��4;Q
S��c�Y�b�y��I^�}����S�D�ъ1��W@��Q�J+��RS�2��u��b24���%��g�`���MQ�2��Ѿ�8S�(�H�6q����Z�!�I*��ۆ��p�8�
�
���nL0힒�
�/$���h��}J%�]`��x��<4��_����0�M偞��%�z�Q��I's=/�P�T�s��'o���*���`.�.Gw/�Z�Z�I�V�9*<GR�0�ړ{��g[��!��w���4>W�@G<�����2ߔ���3t�*�`��;s4��d�2��r��[���f��P�i�����0��{}��m��������w�^7~�X_/������� Pw�׍�s=����u�������)
g>������OQ�
qLy�̼7$b�7K����z"K��	(*~�N��[W���vNhE~�Yi��㹤�X`�TP�XhGd��H�G�K�����?�g�s�ֹ���5߅���B�������*�-����VU��W�X��xE���$/ڷ�
Q,����M#B�Cx�B��邪�YF�w�H~9��9�I͌�p�`(��k�v�Q&��@�c]��TLO&rŸ�fT.ʼn��؝�����5���LMW�p�a{y���Gjg�
	ܓ@I��8񡶹��%t�{�{��j�;}����,�p�Z���7�:���i�^V�$#0��M�ŹV�ڼ�Z"�1m��K4��b��b�}c��#���SSp.�5��5��5�̭�>�|���s?�ԏ�&M��C���J�jb�K[�{�=z��1W�9��+��mO���@o�Q;�Y�՛��z���|ɋ����K&'1�Q=B��w�9L��J�o�M�L {��&id9�Ջ��z79�^#=*�qޮ<ڭ�^4M#��>}�Qݩ�.�:���Q�o�_Ӱ�|���
�n��V��^p�uE�=����%��<�mV�_p���X~5��������l��kqR~��6��l_+Tq�)l6�BG�4�2:g�G�&I+b���q���tSNӪrh]��/�&0
;��4���-M�u��iF8��n8�]w!=�^Dq<�m}m��a�|�\ۆ�p9Sf%MR��EkON��2����DɓVJ���8��u�4���s�>x�	B�c �[/ѽ�����*�7�25��'p� �h˱*� ;��=��$���z�Vn{V��ΑZI�)ˡB�a�_y�0��r���}���W��l?T��E�ų���xE�ŢL-A+���s`Q���c��cYv`�G��(�/Z����>�ʹ.e.ve�u�,"E�N�����2$�ed�u��uޮu�\�=_������|1������	�kr�w�����u�?��/�������wљ�`��
s�5s�>:��Z����s�(n<e=�K_�QG�͊�/���.��b���r�����e<�O-���h�!C_��bqL�T��-Zy?�r�y�<��nF����>?�bE;f��45���Y���(�*��U�%��E��8�>T��L��[a�P}p�����1���y=���ji��h�"��?��fS%T��_/J~��_��7Po����ѳJԯ�y|��}Gϋ//Z�[��?��
8�r��KP&3p9ƥFbY�R�
��6�H�L�E�5Q�X��𐆒^:Š�ϻ+t���0|Ш���
������
�j�C��6�T'H�����B�o�����B����D�i�r)�Q+��\Wa*�!�5%�>�mޭ��ӥ���%��'�W�b�7��V]_���oۼ6����m�0�1%l|�n��N�����jIy��|���W���Q�i�]]�|ۂ��KC��C��"�}W$��:�)�QDv�<��-����2��z�9,s������bQ�^��B��B�׽D�
吋QG�bY��ױ�����ߊ-��_�\I�����AY0C�4�0;B�	s���������I��MK	E1e��U�pPD!t}1�N	���rW83S�`=�W&R��J�q�χ�>�?��|���x�W�Ϥ�z��b��9���x�Q�&zr�V�vz:9G���A솃�1�\c3��
�xy�`����>�g��?!��z7�������(W*��40@4�����$�C�QS�*�V��
�h��U�_���UAݴ��ۆ�8m�3�qE�Y������h���c%-�`z]wx�����!����!!v��h�A
N��5����|���?�y����}�ټ;UӖI�t�'`!^�_?k�*�ڊ��,�A��+T@_&1�UC�$�ԝ~}�1�������з�)>E@ܨ�U��#��"z��飹ڵ3��ƿ���Z�k۠üx�d�Ff.��' .g�Ċ�9��++RW��7)�ٽ�C�Z�Ij��܍�mC�]IB+*
��?��P���Y��k`
+kI�jRe�\�ݶ�������?�9��m"�(����T�}VU�/��&����DiCq��s5�������4�r�AP�Y�B���;��~\F��5�[����C�p�6vB��e�/�v�8AO���z�y�Z�y�!q�������. ޴��{**�(��.@�׻�!4`����n�5/ø4,��XY�3V�GJ���
����2����Pdz؎�IY䓯�w��
����8�	Z�Y�e����Nh�^=��e9M����۶�DA�!v�V5΁�hUUK<�:����_B��ѯ���	�p����i9i��qٯM(���e	����Op�+�
��ԛ廪Cr�x��trI���b���||��NO��d頖G���-P�D9�Y������ [+�O�P
[J�0�T.-���� �UN/X/�&�7އ�k���JVtQ+�d���������|7�
[�Ili[_ry-G������ZK�S6"��2�f�J�2���������$�n?b��`�ҿn/z��\�#x���K2W�h�?��lm��FW�?M�x�7N��U�/��-ط�?_v��Z�BB����⹗u������,~'��,�@��I3�./���@��W:�Qď�m��ڤQ��{�%.���t/B�d5�7��/\{�x��Qp�\M�<{��~y|�q.~�y��c�7����^j����Y���8��$�c1U��#z4��J���p6�1��S5B�K���%��tᔒ����o�֨�1j4�5��JOC��(��L�ȰZ��i��xD/<�cu2�{�p|��e;�Y,u��HLK���5�b=]�P��"�^�:`	�k�-��]{KQ
|n��z�C������x�To�tYdV:N��)*�j�	���l��� B��`��ME�K���d�s7�Ҟ�,D,-2kZ�%�������ZC]�M�$�k�M�Y�o���U�`y,�M�8�>���6k�R~��[�
��[�`��9��o��|l^�xT+��
Þ/��Sjߢ*�0’ĉ�^m�>�[k���-�uE��܋=���K<�O]�f�5Ru��,��O��Bld�%�}���u��
���iA�����y�:��������ni�I��͊�¤��0��B���W�Vр]�l����3�i� 3��YX]=�8��W�i�UU9����)�+�]�%��<U�)[Uꟶ����.#�+Vk��\m�)2�U�wjw}���\>ⴉov@�=_�d��[�S�3���^o@o�S+6���^�tE&5
�D�{�ɣ4p���[~e&�1XCv�V&�zM9�_���d���<�8f~�Iv��y=��f��h�>����_4���CH|�5�r�M"W%{�➙�Oh��7�q��m�-�܌���BKkSB�����B0��haʈ���19�l1�V1�?k�Ig=��Ƥ_��C�5��B
�vv,��+�@��2�r9���~����R��������`J�!����e�OrrMz!�v��A).**p�wmD)��d�Hl����"�`v8�>1��/}0|�fycJc�GU���BHf�6�6C!2̻(����y�3o`S�,b��W�U[Ȗ]б�����d
p��`H'k!tW���
��^�r_�<}6�E�@y�4?�s�a���VV˟��'��Ihڟ��'��Ihڟ��w�ǟ��'��Ihڟ��'��Ih�	�� ��-����|�9�ڈi�0�2��5�7��hHo�r֝�0�tֹyT]�V��kc��f�0����2}nd,Kz���-l_�u�Rm_��>7���j8fE8e+���e�>��8%s�+�`"���KL���v�8T�b�+�GN�jȳ�[�=�F�0Ð0�]�s<�i��Z^��@����Sq4�ۏ#[��#�iZm��gy>��$��/������|����駬���=�X>�w2���,����[���zu�q�%�*��M�.�� �]��5������Jx�H#�A���8f������F;����Nv1Fp|���G��g�1�q�ַ�0/��8��xu��eI��cA?����B��X�[�a+NJ[��<އ�}R����mSq�H��C<�.��O�;�	^WM���I�Uu��\z�@�T���׼��"0A���3��8ތr���.o7o�Z�
��r��� ��\�u���i"�;�O��:l�b���s\�n�<<%���T������ �4���G�4�b����7�
�ɯ�>˦�uۚol J��vN�ۇ��n���Cx,o�r��,V�l�i�+>�4"�F#.�lW� <�TÂ�T����'(�+i/�'k;?�d�\ֿc�����Xhc��&Z`�Dܶ� ڢ��a�ٶ�w�����(,P�{܀X�B1�KF�b�g_���C����o/�&W%.�9Lߗ���F�&�ԯ�N�Į�!�]���>�ЎN�u1E-b�-xM~���K�Gp�&�1�/&z��|;��$��}[�8��u-:�F)�+ҫ���C�&��SF��f����w��G��(z��o��B�9E�|K'�7��i�ye��/�z_�^�<C�H�))Y�b��n�p��S#0�� d���d[����T�^3S�e�t}�/K�|����!�=}WD���\������Ca&�9�Ҭ�~���#j��dZB��B���x2������x�B!�I9 �k�d����v�%�b�א@�F�0�!�lDjyd+���U�,�����#y��a�S{|n�����N�,6�z����i���z�2��0��M���n�|�A��X�2:��?)�e2ߝ�ϵ����'��ߝ��Os�u>!5�������ϔ1�gNþ'�f�~�<">�1�/��f�I\��	�K�k4րrޭ��*�_t\��J� /�i�L�`2;��c�~���[�f"]U}�����C�c���!~���E߮/��I#�*��%���,�A}����j
��y�n)���꼹s mX&W�e	�����Հx���$�/�@���~��=�E6�+**�6*��iwW~Nn��3"�HV��}�k��p搝�2���@��̠�*1��F�d�0'�v��gl�U�`��H���
���޾���O��KEC#g��a�o�14w#pMS!��5y�D��T��:*P��#\P���p0z���K��<��C]���f
�q��#���?޹������8����[,�i��x0�=�7�GSU]�pu>��������s�6�<��ܧ�5&�W��Fx[��2�\���8�'�:�`֔���+��Q��!��ur'�?4׷��R9v����[ b	��p���2n �vu�Q���t�V�B��(醎Dt���i�o�3OWd�Xǖ�%�Ÿ�DŽ��v�0�z�f�R5'��	v#I�ݽ��q\��+Ė#ޯ�Hv���%-�~<#���I<��@�l#
D;��zF�=�,O�k]�gڨ[Z͕ǟ�E���%%UkH��r)��!�G�|��+��c��^��˾��8�	��D]���lXK�����X)�i�t
�\&�;����O��a����܇�����Nyއ��u�q��/��<b��٧���䳍vn�A�����s�|�Ծ��i8�'�_�ݓ�\{�Y�=8��5}*�H��x�qn�N ��n��:Rjk���=u[��@�r�C�e�
ߍ%s ����/��<ؓ�Tžl ���x*�)#�����GIrC�}69�G�凜��-K��c�3�a���]��a�,�ՌYߞ3ş��I���z��mn��ݾ�54�Y&s����X��Od�X�b��9��7�'��2?LVH�6^��6�}���T.�K�>Y�7��9Z���X���_����:�s����o[\_u=�ԜQ>�<Ʈ:�4!|
�%�W�h9��笻\�y���G�3�q0�W‰�|o�6U��g�z�N�7��Z"��:s�u� #��r�'/\y��;�&n��@$g���m���vXcȸ��-DB�_�wT�6
/q�!Q%<�i�
������G��"��ǝ�a��f���N�pG�p��
;���Yc��=�}|ٺ�4���/���CB���x�;>/fs�5;�
���r�l�?��˓#�b����GBy�%"g3꣖S����or͆��솊*g��H\��w���}o�3��um̍-����)�TQ #բ�;Y:���ȹ�� �pBYq�r�,�N+���Ceu?CK��p�:�1��WS���0�"-�D��U<D�0�贄������"$۾n�"f3m\2@n7�[���Ը8��C��DQi#�?����oZB��J�@�q9PtY���庛���[��8�OЩ����;�+L.���f<��u�"��vJL����Hg��\���C�����������_�Aň�E�ӕp�-�84"�[f>�w��M����H��
��+��G�wбW��~A�x
�R��,Y�ٱ!+�>���&\�øub���iU�=Q�������^g
+����pU���,w�Mb�
ju�������888�
�Z��>�7�-���Nx�/�U[
|w�B��p)��-޵�V>�x�*��
�>P!�2�(��EIl��wܫ���1�qN���c_e�Fក?��bEZ���)T@|+؛�����I4>n>r�����t�t���(w	��GAx^@��S��{T��S��c���a��_�?x	��qid��ervr�/��20*���]I��0��A.�i����q��Q}'޷W_uU/�����@89�9�n�54
w�}�&����A��XC�,�*2�@T�֓2'���<1�	���8�Y��w�k�w�ڻ~�]���_{ׯ����k�=~�����k�w�ڻ~�]���_{ׯ��G{�4�g{W�.�IV�o{�Dގ�=��[�Q��|p����.��֞��h�^����V3dž�^�:��׫4?��^��K�������Ҥ��ߺ婟@!�>]w�2h�ق>/�A�����5^"ivZ<7Xlm�����x$OC��Þ!z��5LH춹��.�'J�əuU������34�U��wݰ��p�y4K��r]M�k�c�yXiC�Rau] -T&=���y�*��C��<-��?��0؃PSV�f!�{��}��2wߦ��l	�Ə���u.�����g�=ò1���'�l��a�%�1c�vO�타����K�uS��
����bԓ�/z����`���H{8�2�����"�����̫a";N!�^���t�I�Q�������3��vrǾ��Ȩ�E�o܁����;�b�@����vaQ���]����{�:k�P����=�}q�qX�0��ݾԖ��Oa��-���n�k8��Xj��o�Բ�Ȫ�S�&J�b~�X
�o�uY���|�ɺ�ု�,��GzY���vF����5��5(q~L9�Y[����	��gH�ҳ�¸����2�
��Z>��9���
���Z0����.�|��׼c��i�O��u�LPV��+������[���{/�Ґ�6̎�T�=�p��݄���3��aDl�1No���$@�� �I�?O@
&��c����.�:}�ό�VE`�:o�>�_���M'�VC7�g�>��y���3����᲻<��"o��M=�S
�d��!`,����G��V��3SEA��OR�@������(��@��_���GVL�9����Ur6/;Ķ
T�S����Tiefb
����$�c��^J��uk�}5o�#�18`)�e�0��
���2����ڻJ�pR�꾵��U�ֶ�{�+:��PDųũY�0����O��K|d����7�h��� b�^�Oe~(H�uS)~6F��U���b��u�6Y�j��ue��z�@�Fj\e5>�k�i$�S�%����+�r3���
�fq�F�RJ=�(�6"^E?�}}���GΦ*�(k�JL���cя�(�"7��ʩ����������q�j�_X�={��V{�]�ʵC��r���
�g��k���Qv���qBh��vc�]S�
�8,js�`$#su��$A�U���ay�Nk�N4po��"�}�6�| �c/nz�q�!�t=���A�P:#��1Q�Y@ѣ�<���~��μ�q:{��n��|��,���b�l�q��1�U5qN�w��&���	8�~�G3Ȩ�o����]�K�!�"7ҋ��樶+����+��pfb���zjDG]�p�){j�����P�L^M�k�%���<�z>��[�э1R!QY��	?�^g�8�C7��m�ym��Ւ��o��W�V+l��-)̎��Y]��*T۰��m!��[D26eW�G���Z���*���&n�5֮�d��$�J�����k �6���
�T�y98>��Z�5j�/ױ��<����
� s���?&A�潔 �Hޱ���+zs��8�k�\w3B�q �b\Ǹ��\<->=�1�3����������^�c��s�OMe�g��X�q�clmFٞ��!��[��n�-�@�Ae׼x��v�-g�_���[�N!�F�6''���Ƒ2�yג�/�u������K#%,D���Gža��O�q,�=.b�]ǀ٢���2Y�π�d;�zmz�s���~�{�e�2�����v׸��e���%���R���KZ�8I�|!���7|v�<���F�K�Z�rY5�:1�8a��O��wޘJ,�/�c~����oW?*��-!9}([��_�TQ��bĢs�(XZ�L�	��һU8lZ%.�iS��ׁQ�v�@�q�ܕ:
��2Q�kc~��d����Ѷ�(�k�����1�$��.�n{.�������Њ
��;�{B�q�(#eZ�
^��$`����Bj؝j�q�0����ـ��aP�*���_h;�Ē�\�r�Ďe׽Z%���-�>Q۾/��
�٦B�g�p�a���*��jأ�c�+�@�s�l�P�Ēt1��S��[���g\^�}	2�q��0���(�������%~]��y!s�OV�����[�@���c��4�P�A�u�D���l���DN��	C!vI-��=����Ɲ�pd��Z2��B��Y�ħ}n}�WPm����ةU�
��q4�YR���:����L�ׯV��9��}���R�βyULg1o�iS}u���ٻ|�k)�]Svwif��vw���}��}x��.#�p�6W�y^��~Bbs�jS�?y!��;3�
�垱�;SF��B��P�eҕ}����=���8@3�}�ֿ1����Y�������{Vκ>�3r!3K�kWX=!饖�������=�;�"j�re:�nB)�ER8�Ac�f2�y�ĥ~��@PG�O�;��Z��{E�n�1 ��*�i��X	��}+�����cέ��S�a@���C�t�C'*�H��U��âb��Xv��@
@ �k7
_Le\�CZ-�"[�E^8x�c^��GY��];��6�}|n��k0,�nw'�|����AX
B� ��0����'�͎��)W9A�Q�tG�����#/�6�0劉0��k2^|��`�y�%Lo�%|�?��a���YY��x㒞����A��mYVY��hC��z�$�_uie��dلW��Ƙ��P�/&��y��n1�>芺�q�`i��%��w��@,5�hg�b��T,_�kSHXƱsc}�
�xe�n��e-:/�ä;�1���S��hv�$�� ���/�xY䊝k5��C&��-ܤ��T��Lϵ�ٝ�됍i%W�V<�Ҿ>�g��Y��F��n���؅�/QӒ�`Fi\�Xx�Bd&��}�{��:�S��z��.��1=�`�9>`��H�	�q�o*�W����)�oL�ĉ��x��g����X��Nw����&�ݽ�c�h�	/d42P�?�ΦtP:�|ȩˌ�(5�Gݩn��b���~ӝRd\r[aF$��x6�M�`��!d����L�����3e�/�]b�}^���|��K�W�hu�o�h����B�4�����$,7YD
��?m�cE�����}V�S^��С�A���=���N��B:oA���չ�pŭ^9�X|̘Ky�y�:��Zʶ�+sb:@s�#Y�R�EDYH>%��8/=y��藩������^�!��h;F=/�[?l/�m.͟�|�:��<ޛҾ=�f���B�<E9�luDF����hs�1����V���|OL�i_9���}�)!TI�վ;�X8@�t� ?Pm�v��6��Z�T
y��.�����C��[���B3b�I�䄪Ϣ���J�rPE������m/�WUױ�(D��+��H���97r6��_<;�՜��x��V�����E�}��F�I�A�h���p�@1��H=ck��+E���!��x���v��-�3�!LR�4�>ThMRĿ��(o�,��zf�
l7Dڢo��-ͳ p�	��j�%\�I��t6��!e�UqL��[B���?�Ř��C���P�dK�fb��A�Sa�>���f�z�&/X����h7/�,�O�v�����
z����un-8��1�,��� �-j��}�M�Q��y���),�'&�R0��7�-���~aң�Y�d�#Kw~Lu���H�͸���(�����<�q�j�YzV���ùF#n�~���CB)V�7<<�V�|!w�촂�p7of�o���q���
i�o)-����H��B��$4m��s7�_W�1�FWO�����)	\4[, ՞�“ٵ;�٤6w�Oㆮ�!��e妍�v(����Ga(/(|Z�=>��]"$7�5�.����̹X���V���`��m�>���[74�.&i��܏����h�J�LP�@�� ��*�`�_�Ɠ��_�$�s�LI87K�xxm]ֻ�`y���3����$C��h�f�$�]���{]r�Y!�K�4�57f�׽�����v�#���L�ʳpو"�j��|O�7'���g���k/^c{��n�n��G��e(��'�,�����k����gX,��qk�f&(h�Q[�yݎ�Qcpp�Z��f�oBR�C�¶��!} �a��?�6g�V�t��ea0��n��Wָ��n~L,P��H6����c�t]��M'o�I�� a]HSO��*~�\OZ������;oQ��K3�N�zz�q�(�Z\�fΎ}Z��V�P���L�����w�
Ne�SF$M<�<W�I�[Xor/��M�+Q��#G�9o��eo�h�h96<)gN͸��@����:4�u�P6�~+���J߿���L�y��1���f�:�Ƨ`��_R-��`_0ṣM���;��j���4b��7oXQm��	áit����@Tɓ��>��ݚe�L�����+*9XP�-b�"�K��;�
�8U��_����%�|f4��!I_���A!	N8�DI�S@%��p��&$�L�i䘔j6gq��	�k����5�z�x�`��7����I����&T�P6��]V*��;!Ef�'���;�\��;uVKp��/mj;�!�\�e3��u|"z�Rb
 |��Y�u�n7��}z��O����qʩ���Sq�Ý�������k<-��ɼb��!O�J!qڐCҗ�sD��jP
�2bs�0bE`- �Lo���Aj����+*GR_����Y=�b%@��F�;[
[��LE!ME�:t��]vق�H�WMIs���!�<k)F,���{t�_�~��p���z���O0��{�����ǿ�QS����XmW�6��_!��o�	h���C!m�R©;���XJ,P,I��v��w%�%y����KY���o�z�֎�9g"�J6�4j��F����H�	K'�4Ց���N9GVH!I���ԜkE�!1��HeHQ(E0�{*cJ�p�0z�{JO9E��4���F!�ѐ:#���^Rt�=�\4b������y��UEz�a\<(&�P�Qa��n��y����4Ӝ���+�U
uc
a�Z�l�iq߁;��Z�TD�vQ$��&�Y����5U��k�U�kU�7n5=�)]�-ȯ�B�3�^�'JhZ���8&��/�\�=��M�7�z��8���
5���ˆ��ho�c���M�A�ސ���LL����t���Z̼��o�k�"F͖��;1��Q�N���Dr<|��p�6vQ�`��qه��|ա�ZL�hϪ�Q)K�(���xʐq���EB:�rCލ��vf]��W���~��^.���jb�a��qi�,��e-̔o�a=�1פF��S	�	���k��<�
��T/t��D$)�һṲ�*�͑mճ]�!�,�H�p�湅�#k��qbE7��*M'P�B1I���J��d�ل�x{|��C�a�N@?t�+��*���9�� S�f�!����-碐c�`�e�5B 5� �M����C�e@��h�̊�V)�A��B�P*FF>�02�j)n�
��A��	�G3��,�RX�Y�46���%���\�5�	m�G�]j�����bQ��1��vp��}'�w{�� �|����<�?�쒨�t<��dH�������ќ���l/�BzX�QF.�ӄ����f��v�ٹ�"D8�@c��:�%�2����4U�2�벑��ͷ�U�����
�u�?_�wt&��HF��J^�՜
&5V�@5IX�
i$8��i��$m#7��,�rZ��$�D��f��%�����3�f��+�+<�[7T*h�ܺ�+�R�ʗ*�Uhxr���ł��3��򚹾�[4�@���횣�J$-��@�J�Ӯ
n����{���}_O[�����4��^~��xĺhYbn�7����m]t���G�L`�X=C��]��1[�K��t	���&�
)Lp,�[2^b� ���f�_3q�
��!�&d����G�A�U���g\�=�?99�o�
x������e���ū�����ӏ��A�����G�����r�����}�\����gc(���d�:݌$��a��,ӝ�39����e^w䖶%4�yF���%��^y�2�aV��㠟����7����B��1�Х)�9���.���r=/�����e$��P����G�N�)���;�!�C9p�R�[�¹�H��T��	S4�z~	TϮ�9�{����T�n�0��+�`� v�vH�C�d@�l+�u�a(���9�!�i�!�>Z�;i�6_,Q|z�����:��N	޿}������,6p^P��
�<�9Y0h�lQ���n,�N�Ri������]�-�V;���rX�e��Q1�҈ ����)х �����a���&�H����0T���[��i��zCH
������W0�%#c��zl�����d��G��1���b�����A	1ߢ����

�� ~�	�<o�p�07�?�$*2�g�i�E%|�f��u^d���`ds�Q#�\/���6��0�FY�ç3i0&mvG8��_DO�6t��+���h,�������}��������uY�і��A����6�dy`��U�*�J��_��	�-��%p�c.��jnE0�L���M'�R�Uu�R�K��!�f�/������t�
��\�Oڸ�ԩܷڒ"�-.��P�nw�%n�&�;KWF�h���.휥9ET{�{qW1ճ\e:4��u4γ�)�g�H�Q��M����^R
�Q7.�!׆l���X�i�ZW}q����YJwv�J�+��q�)�郝}�\�x�#��k���P!0��qH�n�uR�n�0��+֠v'i1�Ԧ=v���XZeѐ�ٰ�,7E�6A$�{|�t1�
�{oZ�P��K��6�Sg����C��B���P��W@�-�6
^"HR1li�ޡ�fn�o�{�`�Di����48��<�o���w�5�]d�����"�q����i���2evE@Ɇ\�<ź�yY~^�P��[����5�ƒ|��q��-� �W�4�!{ܣ�F)�Z�h;r���JI�|
�m�\-�a��ΡZ�g����6�L]
e�*�#1TS��H�������X'\#�C��mO����l���juv��5>()l.�i]
L�)|1]�����+���H�<�B��G/N+��s�����~���C$N�7?�j����Օ������o�0��W�xI�����Hc�4���x@hr�Kcͱ��4h�;g��V&ї&���<�…nz#V���ӗ��B����E[�y�*ml�RB0�`ТYc��S�jt	��n
G�@�ו^�QX���n�O��%����9�L�}�R����;������J!1�Vq'���J����Ľh�l8��
�E�����:
��0E�@l�����9��_�y�M�-����ӆ
f�X�\K�+�'K����:;�X!+�Ze�� b�7��!�
����F�
VN:�F5�G*�*�Y�A���`-B�^jCI%
�����Jr�j�����EqU��!?t���@��X�I�	+<z��M!"v'������j5�PH��zx�_� \
1�2�!J$��!��'sx��/fd��p�;���1�5l�>�ԌF��7K�bE�SI�;)�÷4"���fo�[�5a�d���	�8VZhbR�C��+G[nD�R�HW���I<���o����`S˨ňhV�=����i��Jï
���!�O�o����=)׆���*�5q�(�<�=؋E���"l6%�#�[�$x�&���*���C��f��$��;����%�1˝Nw˺�燭 #�gWƉۓ&謠��,������ �M��a�cȴ^OF(�tѿ1������}�c�~p�V͠E��B)4���t�=�.O
�L4�n?_�����V7��Y�e{I��y�l{Yg������l��o����K�0�ڠOL���]B��Y�_ߓݏ(���Un�����VM��6��WP�n���Ի�H�9(zI{
z�űĘ"��G����b��n�����7o���M}��(=L�X����Dx,��dS��Ɨƺ>(���E6�[��!�
�R:p��9Bn�f�V���8����Q!(��&3_r9װ��ic-@jZG���Ǐ���0��דI�+O���g���^
_v��L&k#�񠐮V�����C8~��s/�^P�T�݈ϊ�B҉Yx	il�ٯ��B���=��m����J��~��8%�4p�o�ۚ!uA��!�d������)�_7c���m�^�-�����&FK��>��Xvg0<<�Jĉ��~�9*%k']�����y�+�foy�@ֆ�d��IO=ӄ�{S�`�⵫�Ԅ�!����T7��{�ñB#d=׉:XH�J
�ŚOgw����&9м�&��j��e�g�U��"��n�j��hf��maC0Ҧ!�f���"t��/i"��"���S<F{��T���h�u��Z����5ׂf�	�(�,7zC+��nr}oU�x�q�4����=����N��hm|��qC�̓v��'��,���ջ��.�ȷlO����q�/x�-���!�����Ŏ���If��O��ԟ�@���	�=�WK��H�HT��_o��b�@�hQ۽��wӸ�M�Y�W0�ΐ�}��
i���em*��=�<c/fU��q_�;��R*16�fWn�H5�W��&�ʝ��X(�3��;U.�;GΕ��(/‹���Jjp�m^�H�Y�GYM���ӰԜ����y�9�����y�q��w0�/I9oQ9yc]ج���D	̍���q�6�*���(ڋ�º�2:��D�hB}z~��t�^eU��wtw�*�Z��j��Si���D+}�_c�w���S�]p�6.#���'�"�o
��Ymo�6��_�	�֪��d�:;�g���j7E�Š%ZbB�I9Q���Iɶ�"�Y�̗��s���j�0_�)�"ӳ�����[����??I�b_�<�EIXΩv�B�l+F����D�!.�lٙ�8�r8A1n�S�Sƥm�,�8�GȨ�)�;o�L`�Q4���0%EI�YL����;:jR�<XӖ-dN��0�5"�'-ۏ8��G�M%~^���Pbw��X���X���*��<A�b�(�k
��TZ��k��1Gj�w���t
��.�>	������gb�2	x�(F	�0P���$1H���3I�2�k��9fA~vdY�1WM�dj�	Ѳ͸�٣m&�oK��I�LZ$h�B%�v)H`�șLG90���:C�]HQ)E>����cc$��'�'��W�"��q��BY��M�q&%K�r��-�>�q͊f����u�:�+�p)��຿*E�T"D��,���h�������i�	�І:[0����Y��Y#8D���b��8����V�Z4w�4�h����	5NF�E���RQ"�	��+m��|*"A��Ƌ%dM����jٹ��e�*��k�)
V��8��ܕ~q�FDX�a�-��%U�V����	Dr�[��Y��f�����-����M}�`_�Ւ�"��(q�xMO�lZU�
����v�Rj(]\w.��)'_$�Q��d�)=�̼,ϸ`Ւ�	4_e*���;D��� ��x=�G�s}H(�@džl��*�_ o7��������W*����3����k`�s����BJ�lq٬�9�KDP��B�8�q�)�z8��9�����R$��c>�5X
Z�OG�����[)()���ZkWXC�0����@
ՁS�#$�B:ܰ�*�VW]�SD��pRо*�2]���mV��i��v���F$F�!ܽ+�(�䚵�N��f��v=�\A�,ڐIO�pl2���4�f�M�̹����:ɷ�=2��-�h��2tGkj\��q>�6��B�ިֱ��J�J��T��O�YۤTk
ddZ�\.�/V����.�|F�8)1��1�uIjU��lA���^�y/�.j����Y��(EV/��)8�VI=EV/)�B��`��K���!ݠ��)�|�f^?�@��@:�	�Ηnn:ZP�O�*�����)��7�ِ�,]y4XY�*���偮j�R�>�!`�ص>�C�q��W�s;��ngY�U��W������aoj\w�V��+^�|�|������W�)���6�$�%�7�ј"�/���Z���>���84/�J��$�p�4|��?�H��O��\����N�ߞ2��1AW_����A#�O^~:�c�ݷ��?~�O�WAzw����y�������}t\��b*Ɲc�q{ٿ��_�w��\}���0������۹8tn������~���"�v��w�~�v��#�<��8�>�1����|f��˽78y�c�8�������0`��H�����k|�Q��C*zÇ��׃�/o?��������a��{�ߟ��0< '��K>��1:�9[��n�h��=��K��$�ő��ȶRuo�JR���_|C���3��犕�ˠ�yv��E�`�y���j����g�.?za�[z��q��jy����$�O�ZH|���Ȭ�tͧ�
_�ϵBr��N
+_xG*�϶��Q�N��-���r�6�]_g:�ԑ�6;�{eDZ��g�������Ih(�%A9ZG����B����a����C�𐜋t���L��G^�����݌��Y&漘��B�D���,��:����,[�(��_sFĄ��I.�l��XD���T,X�������׷�\.cFb>f	���dL2b�i"�$"<�uF�^�_���$���g!���L�P9��ˠw����C��@^�e�"6!���?ytDr��d�����$t��F�\��^~Dβ�.��Ϝ�C��{���›�����ib��Ѵ��"���΂�Α�Ǐ�q�Fx�8:i`�4.6�d��}=�c��)G[�_] �#B�e�~�E2�?�&�4�N��H����bn2P#�1O>��,�2�m�~h�*���eS�F�8q�p���V�޳I7�5<mt��e��h�'md��(f���
+��V�T�L�d,�H�=�x$����Y�l>�
�\RY�Ʊ("��D|��}2��� �X@�5�W�5�K���Y�$���/w�o�pG�L^�l��Rg;J۹$���k`iH@��[I<���Ґ|�
4��f �<��dA/��u�'�E���!��IP����*f?c��uV��H�Z�fB
�.P��@��H�*�U������W��G�A�~Gc�B^%\r�RT@iIe$��D&8҃�>��P���Xd�����֩/�셦�$����"���҈�t�b�4�6�g�[T~�F@Uc\�x���	IDEd�$��
��G+Ms��XHW"�QW.�h��"�My�Q5��E���تU�[�br�p�����kvq��;�/��	P*��74�{��Y�d9�o�,���c�R9}G���ʐ(g7�iCEw�#P��?�-oA��v���΍����|!A`A@�:?#BP)��O3E���r,:� ���7"-0ƕ~1�=p9SS�4�ĥ]��#TqQ�`��B�0�"/t�{�'/L΃?uv��|������?@�+"\Y�fK�-O���:��H҉��Kp��86\��!oS6��"݌����]PI�)�z�����kI���Z	�kL�zo X��]�W�AS�iiƕ����B��M�t.r�"4���+�FbNM�1� �Y��8f�[J�8�:c6�����%����h�.���u:~�vk(�Ȱt���f=}��	��S��u�+�E<�"��@�B�()�f����9�bt#�k�V��ph�^���ɡ�P�K���U��fݵw`>c���`#v�	��L�㒜�\���=Y)�4�5ݔ;g)ߠ����8z��Y/]E�	z1�f�?�e��$�c���AN(������JX�V4z���L~A,g��$E�If'�~x>�OM:�{�Zb�;�jp��$���5������4z�vW��A��3/��Ӕ�m3�_v�XU����L�n�R�`�]4����A��y�ڪd�{�j�X�z,������
إ��j�������8�~�Bi<Qx�0D��c<p�Ӱ�y�Z��Uׯ<�^���-���_�|POw7
b�0n5�=Y�ݮl �t>��BE�N�|��.���d�=��}mJ�%�o��� ���f9���;ќ�;;
���<�$�\26�X>��nq�-lл}}*)��� p��4����+��+B
]�ѿv������ -P�ξ3�m�����1���l��d��O&���%s�8g<֛������Hh�̵�lK�q�I�_���H������[V�iVg���*���ö���;��hU�j�ݵ[UVj�&����^lчU�)<@�UK��`�QO�岥�-X�5�(��-�9�9���,����=�Bp
%��-d� zj��D��T)U!�LD��L<���Jlj�$�����S�9�����y�ݵ��S4��m�;�7�����9�Qt�!����
���'��
�>u�9�I����]�q��Z�2�;��+�Qɢ���KXd�!���ڷR 4�l-�0�.(�%��CR$�+���h~�o�rDzp`Ъu{#���:���72[,�������M�����+�^��.>c�rPe�6̼��wl�oOI�W9��%A�p��fQ�m�y�����^��9�AOZQ�%6�U�76Ͻe`�k���a��ڪC��c�b��{0cq:�s�j�
dMHj8�Ԧ1#���]^�ګ�I+|z
<��K������Ӆ�5'��&6�)k81�n�@l���T
w��n(�W{77�#�¶pn��U��s���B��T"�f1�#9&s�v�ܚ��.)w������$B�2�U���a��5?�x�v"��Nq�\�[��_�P
W=�~2��9!/��s��֐���cX^�����Wp��/|���}\�5ի�-�7�b%��齮 �D�x0�P���k���y����̋:��0ӌ��S�뼘j�M͖���6��P7s�
��9�s:e�-�c.��qď���r��ց�B�0�-*�L�j�ډD-d�N��i� ���ӝƮ�D���:7�۲v��Y͹
R�-R'M>�6�{��y��m���K�=|&�h?��O�!x҅6���e']�Z��y�ZH7i9�_�~}l��P/.�xV��Q���Z��C��M}lt\;�¦!��i�B}>��8�X�Ȫ�}�����m��j�ܖӻ�k𝾦z_O�WY	����Hb�W�nɴ��,�i̤���"E_^j�e﮺��\��-�r�s%f��\{|�
�ZH+x����yǽ
5��_1��Ql�����q�6�9ވz;�Վ(�vm��Z�qU��8�m{��{����.	ϭ�;�M�qj�8��rT�ѡ������짲ۉJ_��i��5:���t��g�	�FsE��𓇋�,#�rƨ���4V���@��Z���C%����@�G����+�~�����^��3&<$�1�Y�\�t�C
�2�X��/��:�::b6���p��g)Km6Ո�G�y��
�&8+����W�Hu�0zP�#��vi��z�f�.5��w��
��ic�OT�����GJ�zv�@j}}�T�!��p�X�1$*ܡq:�Dd��I`��@��(�?N�OЦ~:�V�N+�f?%�5t�X3�;�>�l���@�{�����\_o�6�P��QG�s��(Z��,A�`��86�,O�������#Ey)�=š��'��x�h�x^̊a��3��1%�Ԕ��ݱA�4��W�'�%W!�Æ��~�5�vz ��xy�D�K��-��"�ج��WU�b�z���[m�5��:��,o��l����@`���\�"��jֲׄlp$���`I�~ҶBDv�}���,s�9���ϴ�P6F�G��cO,ٶ��z4�GXd��9��{�$������lWc��0�-A���l���R`�����V�\	�;q�+�ɑ�Y����P��ׅ�f3�<$~M_4W!F'����yDܑ�1iF�0�??���)4�}�=`r�)������A'g��v�?����ߗ��$�Pn\�:��Y��w�t��;= ��2����������_��	�r����o^��n��փ�W��B_��ݦ���[�>���-`L�C������҇��u��r~o(�8e��C���s����9�M�
�a�=�H~�p���ϱآL��"�8_�:��Yt�"3�xA���9���bׂ	6��
P���}�f�R~xhERD�41�A�}b�q�-��E��?��
_�Ӈ���N�󅑴hZ |�,��hMXn���1k��	\�Cx?iH��c�w�>ƉAX<�+,���i0%A�R'j�z�n���uO�?�"�K�3�L������%Z%M\�w֗k�T�K�
0�Y�	.��g�s�����E0����'����	�½��
�{$�W���)��.�k7��G*�t�O{��[)�tY�Gm�(��JZ�� �W�MO[=�і4C�7]�ؿ2Xn�{Ե��vp�^�!��V���z0��bY�6(%���p$x�4����j�m�%���̿��Ծ�}�є��r����A��ڠPm��gB�����O;n�l`�i��Ńyjx��
��ֿJ����[��EQ�\
3hLp2t�S(1���LN($#��7My��¦�D�&����hOOb�R�w "!C���g�#�U�n��шJv����4;�N#0�͈�8�e�#�w��������p�Mo�C��}�w�—�n�
t��x��!��G������,j����=sG�:�=�V��˺«T����=%�D?�C�g{:@�,��/P�����������و(���M��jc���ϟ�ʹ2��0�?�-�r3�de&_���X5G�7
�q��tI�(�UtĽ��7M_� X��@__m �yPo��t�}U||�)��U�.X� C��G��Z��%3_rP���[a�0�R���,�xl��1Y���������\G���b��?�˔T��mP��0�\!�y��z3��S}X.ѣt�C��w.�$���@��;ӪE´�\,߷t�V{Ŋ�(ࡎMwL�Yh\e?��4��}{�ۙإ���s�v� <��Rz�3����+#���UV;�y�O�ate����P�&�������Ѥ���Ɣ��֪֩a��C��/�>��@
��>;��L�u��n�0E�|�wR�Xv5� u��C��Bb���CE���J��+��خkh�u�48��T�pw��q1�4���ą�콇͘ b�8�UE]�gB=��)L� �`r9�#��n
���6��<�<&N���J����s�|j��K=yT�*?�7i��CLB�ӷ
��fK��^{��~9�E]���Ô��䃶ă*l0ӈ,J[��99Sd�e9vǷ�&��BA���א?X�{���I4,+�w��ؖ�:��¥�@~��W�n�F}�WL���R�L�-tRA
8�a}	��&�ҢK.����Z���^x�d�уE�̙9;{f�Z|��D�J���j���0N鋳�o�ȗC�w�Qa#1[��9΢H��LPE�R��G�W�Y\q�BZR�^
�E��'z�c�f����)S%�w3�8>�%�4M��D3A���U^�a@^�('�*B��q�	4�B�%�cb��Ŕi̕�M���v�2NSV��Z��6�1��(���Q�H�1��"?
��Bc�}G7��h<B�Y�\轢m\L�\�� �zc-�:9Ä6�)�%fc1?�%�����\����0��dI�R����$%�n.�Mt�ڻ�Qs�Rl_��a_��0����3���
(3.�3⚦Xt�ܚ�sV*��q�!%LU'h���q��-"��HV��`�U��8�Q����4�����E�G1���W8�<%�J�i���R�K)J�z���9L�8Kp�v�����I�s:��̙)j65�+ �_
5�[�h�nl����!	+
�WaYG4d~�34�r��\�}4�7��3��H�6�r�5B$��b��4�� ����޻�'����\���d4�`o�C�ce
*��[)3����V:�!�_~�|�ά�6-�U�����������]~�X��s�E7��Y#Xu�Һ�N��Kpvf{�~M�HB�(s���v��`N�]�H�ơ'={�,i|$���?��5�"��2
�9�(������b���<�W�2t]�e��������ݼ�A[ٞ�[���ܩ����Z#��,��f�M0B%�w��F�x�dS8��E�a���Ѫ��ӕ�M��;�cE���ͧ��9p�ZY�-�pgU�H�$<Vj�d���R
V����#7�4�~��=��p�F��s4*�[`��7��+�t����^�k����GcYE=-t�/�K5.I�!��.�-�
�¯����c�˅����ZK�/�0�v�Ε^�MZ3�?�j4�l9��;�ө�l�-��qsy7!��`"��������Ou��ݸ�f�x�_���!�s��2h6�ԕ��f�Ց�M�"R�֮��|�:Oz�5��ˤ�'>�F����&�S�q��
�NP��0���p&%���E�%��e�a����е԰Ufc�/��L��"ra)��I��+hD���WMs�0��W���9(�������9$S���#�V",W+��ﻒ?�|4`�ެ��ۧ��Z�}��5|�=�c�Ϗ�O�����c�D�>�sV�8����N������*<�)���Pf�^X�Jf�̀�h�
0�K
L�B�IT��b��P�=��ahuab�����w;I`*
e�T.�(062�M��aNF�0qF�s�B�^Xf�;�
+UW�a!O��S8х�0�d.21�{G�c���u5�"�,+�D.�L���S%�U�7c�}!��^W!1�u,�H�;�E�y��9E��z��*d�>�V���Ž�Iī��[AV��K�>L*0屈S��=}���޷:���PIȬ�s��1���1�)�~��-SZ$���Bl��Hied�Ƹ��7m�Qe<o,WZ�y0?���w��é+Ir3��l��PJς����G@���C����\d�6r�m+�+�������S؉���ӮJcEa���Қ`}�V�^�8��h�	�[L�r]yn^G�k�|��֡bCJ���b�>���y�H���l���
����l�
�Q:J��#�Q�x��mx�g:|���}���\2����p`��?�MO3UG�wSO�s��7��vy�A[����v�-'.iIrIg�5�᥏��I�?�(�!8���c���)v�8���3�����A
��H�<�3V<�����m%�I�.sZRE����d�{�X �m�C9���ڸrl��j3��f�|�_W���̝���2�̡��L�������"�KB.�*h�l).h�޹��Zj��gl��Y�@%�����V��	�`�K����~���ڈU�D(�m��Q�n!��W<ɪ�Zfc;u�nN��C�������6���֑�K.�73o޼�Zb�t����-~(�^7�q�Ø��ƃ1��"E
/$�
K���!)�ZB�$!{�B��������i2�[��,)��rA��s���6�o_��ߟ�iC5�WU%���B�7.4�x��n���
77�sd�׶���:U~N?(��E�[j��C྄���D6�Y���}(
�+���^Ⴄm�1�h�Ģ�r.A��clp]z�K�m�k>��-1E�ֻ�`K:eK��.�aQ��2�4\�a¥���JmVP�|�W���+�ua�武��li�_#���.�+�(,s�>�15�>�,$-�������e"n�q3�����aޛ�</�gW䜪�P�����Z[o�6~ϯ��Kn�4@�d��t�t}ȂA�h��Bz�'��wx�H]|��>������QG�h�VϜ,�9�����v��x��)�y�/:�2���X`������#6G��$X���b���9�)�=���^�"�0�H�)���8GIL�KMsV�
�]MƗ�O/ќd8B�����G�R�0�8���lƞ�C�	���={�(��	��_3�ւ������`��=@�_�"�$�'�<:<�_p�\|ʍ������F���ǘ��(gh�sŔ��YV������V��L�4��s�1M��4���ݔX�"K�U�,��izY��P�M��u�(�gl=�F�k�IN��
H�(0M��|y-w_�beJ�w��,�D<
'�zw�'<��d�%黱aTK�J��l�6+3��`OS���*�`7+�Ɛ�ױk�Ӛ{vU�-a���÷��EI�)���	�3מ�P&qjا9��J=�"�,���8N���C�L$V�,����xfh�f�c��5���ƍċ<���Dg~/ؚf,No��]�':��fW� ����O��$�OX�k��:qd^���j�A�<�<����)�A�ԗ.�����Dȍ��X�`��A).��t��F�wnӦ��H�N��L�;�75�g��{���o�O�ז�2��Y;8����������(�=���Ō{0��R�N�b�{qz�&ϥ�85-zxl����c����{�=�bC��`4��!X-B,E��o
��''�sK��#�r�%5��荼ph5����;!��3?��ݪ��Z�e�ZkKIh�\������XIK�
chϐk����<;�m�[bKpy��b�������+��U3x�P<X<J�\�Ƶ�����L��0���`Ԟ<6��jP���H���&�+��3Ú~��[|�B@W�U�n�z�M�U�(�BL�F�
���M&K8~Rч�z�1�eLh=��U��7@1{ ��Iˌ���7ɑ[#��y+�aD�G�oS����<^ȋg�.�	�aK$�[`�M��#(O���p_�Ƴ`M(4zQƒX"-���"�/�ng��T��.佫�xn{�}��	��I�?bh���c�,���AI+�8�	�5Vn6$�eR+�@�'utM����J=�JD�ɒd)�ԗ�^Z��3Z,eBS�to���Ai$�#W_DR���Y�r�NBj�
��ka�
�E.�hz��g�;ù;ߑ�If"��7[��L`��	�uZ���G����*��w��dz��Y��.݁<:�GG��w:���E.0�e)�3��Dq�r�F(����OW�q�?���a�+�t�cu0{�ׁ٩r���Uu+���60��iӌ����#,/� �?�o��_��F�����X$��cY4+���5��SV#y|?������i�e�`�?��}W1�Y-̚{��Նe���j�ӡ���P��D��bF�5�żA
>�OΑz���L�]�\���N�M�a��l�WI������Z7�m��W���)!m��SC@�����ЂA9�
��2L$��[3�eڏ�N3Eo#��� ��i�<���k���
��ld�<����<����^�>L��t�l��y�>�ڂ���}C�j��N�vT���5��Բw�zmo�^�C��U��޽ۮ��m��c��/]��̊6����	�/�o�WLo��r�;I�?���J�+	�ᑵB�߰�}�G�dP���=�xQ�=U�I��z�A6 �GW��w��,lշoKe��6��Pъ	"Y}��e]���{O��U���ͫG�%j~�p��
��P���g��x�e���LE�.�lh۲HrmT]����	�.R�o���G)�*>�x�L�:U���]���JG�te[�rg7�s�ަ!���<m?hBu�8�Nݖ˜h�h�,)�t(Q�����Oч^�"g�u�$��J�FT��_#�՛8s��ΎF��~^ί�*~���@]�y0[?�:�!�T+�M�
.�g��r���]k�e�jl�m��JA�S���yA�����d���+�H���L+z��c�wVo�K������2<�C���"i�n2��f��Fr?Rk�
C�P1h�`"�,�B�BT �
Y!�Ar��\��]xN�at�u�$��RS��eQ��D�I�߭�&��Y[o�6~�� ,b{-E���-����v���>}�HԈ�FH��N��{x�H��@��px9��|�#��}b���F�U����>5���~8ʆq����Iq"?�*�@�W�j$*�`G^T�� ��g'�;R�����_~L�|i	jiI:X&,Q�;�#j���
��	��??���O��-I�����QJ֡o0u�xE�eÇ�����g3����v���Cꛒ�֞0�L����/��<��Y&z•�z�B���$�j�n�[	��uRD�(�xW���-���������g�o�y��NPIY�5�6�bO(/���cw�Lv�+%�2K�7(����
ʵYG"HKJ��cy�����׊���sپ�
y�����zZ��UR��|��n.����H�3.q;���=�>��Ƚ��]Rs| �Nm�2���3>���niGƁ���Bx\Ö�=	X��-,���p���
'	��Cw���R��G�H�2sv���S�]Ev�^��6���[���Yz`b��E�(�	���@uR/V+��(DmQ�# &,��d����&U�D+ل��\
���0z`=.��y�
L��fi1?XRٚ���O֓k++�i+�4��T1�3�m��嶦\ȄՉ|�ɕ��X�r�RA��jL^�hS��ܟ*�@�ڔ9��
�d��w�r���z��ݠ��F����9;w>3/��ip7����!��n�]�O�k5�U0�cC5Y��H��ߦ�8~���f��3��Gh6�����2C��%�l?�v5�c��ҏhM>7�!�2��X��cZ�����ì��U�8C���Զ�2������;�neh�G�:3c�R�XM��(U��lH���MoƠJ�|q���Yy�(uC[\K������#
P�>DR3*\q�'��)n�'�Ufme-�V?J&F�ho���O�9�2�sb��Y��}D�'�{��	X��2�Du6�'�%�m��i�6����Q�w�
-�sZ���� (0*u!�P1d���j�gNpӀ�L�;|
"�U�.Aެ���%����������N�w-�E8�6�8>�Ko�n���0H�U"��@�v.�)z�b���{��55��3Ѿ6�J���'�ubJs9(��U���4�5��Y�Tg!I-b\�N�qzUuؓV~;
ԫ�I�&��M�f�1Q��/۽#@�s�4	��i��2�ճ/��`x�[G�ƃ��ez��׉7F�y�x6B�>�^ƙ�ҽL�EE��
*(��7��>�AL�
�p�V�x�M�T�g��3T���Ucބ��]*���dɦW858�m���(F���)v7�n��x�PS�l�в���n�$n�z5��. �/Qjtʈí��)=�S���Pd�
��>z�?�Z��t�X��z�Y���V�5����'9̼���Vm�6��H�V�Y9��ըV�p�܃�%q��x4�����Y�N��#:k�U0�f���@���������%R�p`����Ot��ͩ@��we�P)�S��%v*9!�^��M��@p��ۚ��"Ǟ��J��S����U�]���>^����Y�m ��O�m4ڂQ�h��.���!��x�1���n���A�p�uc��nஊy�g���Πw�`�*7����<�u�)�U/1(ͯ�㈧�
���kk�^���&�uNYg��@q��βa���ǹ�����o���5Ӭ��
��"\���c���i.���t�l�>iqj&�<��:�3�oիؑ$p��zC��c�������c*}h�ٷ��zV/w��W7o�����e�/dl1��iOD��{������Q��ҿ����K�89/�F��k2,�����/����op̖�������f���v�LvO�s��dv��/�;��6Ӿ�L^K�0��d��/٤3�iE�����G�K�KН{qpZ8P1J��gM�羧����w�|�8~DbT6YT�跂j�eA{�s@b!AG�f��G�I /,��p��w���%��R����¾���-�W�cF��끭�z� ~օ'sbG������Y15�7���5�g-����AQ�
���K�r�^qw)��"���T������+0x՘?Ŋ�����JE{�З����ȭ�4������d��>�n�E�p��}4����Da�]����-�BJc�yJ���l�����~Ɩ=#��ia�:�cg>����1�Eewv�A�{Mx��;�����E�M*g�_��:���XH'� ��Vێ�H}�W���43r;`��e�IVZ�Kv?��zݦI�x�Y�߷fƀ'�ed�O��W��<��E�X:���3��:���dJ��(%Ԡ4���/f���*��JU�!R1���:��p��3+�I"HaNb&�"�C��)QU�����?����$B���f��qK�wp�1)�=�O�?�~�f��O5���G�T[Fv�-I��j�4�V�t�R�D�j~bkǹo���PV�\�فNû���a�\��_��z�9��^m�A��	�
�;A\�#�����+���j�]\�XWj��~犿"Ձc� ��l	W[�!;�ݥ��gY����yK>o���!7-̚[�@m[����Ga�Z2����Z�v�p)��kC4�3�PEU"7\�ʐ��3��E�bZ�>��2F匊^6x�##��ʪ�"nI�cb��u�|��a7(Ѷ�Ϗ3i��|ܣ
��Q�����;r��
��1sSO0��!
���1�~ܦ�Hyठ_AS跱^�Ң^g����0�wO7��y��P#�3{PO�EΏ�M�������$6�iځ[<Ӻ�"����ډ�,��D*nv���+�y*�8����l�7(�o3�ظ�������mf��,O�i��;2�[���&�Z55}CGK�]C.���1�6F���h�Q������Bc��<χ2��@0����@Kp���
�G�p9o�-����G.$%vw9�z1veE�?�cV��ä���v�����۷�w|��u�=��1���Y��;���۬*�~ZKgs[�'�N7{?hc�x��i*�{:'��o�6���OW����h���{c�^᧣�V���� �,��V�O�0篰��@���{�"1��98��uWki�K2v��s�0؀��u��ϱ��I�*�n$%�<�H9��rh,�$�M:����	P��ntM8��qd�͕�FS�]���2��G���5�C���/;Ņ�HΎ�
ec�����$�q�4*�1��y�
~��;P�!*aF��vNWǰ���[ˉ\�r�^0�:�N��ć.�^��E
��6=h,�~��?��D��,��,
(
��Zy�����Pbw�:C��*�ɰ�ۋR�#�Z�n�+���td;���N:bNӹ�Y�po	���qf�U�f��y� ����m���$<�PTO�p�U� J{^dA�ҿ0n#�$���%7��[��zP��Q����24�
ʄC�,h�.*�{���Ёn���A�����U�Յ��s�Y��ڐE�`_�.�����ܿ�	Z�zgs]ĈSW��˰*���8l�k_�(=m���>L:��'�(���%5�=ʣ�\O�!Xx��`����`%�_(��V�@uI�32��K/������!(�HO,\�u�_���3I\OK9n�:�^���]N���ϐ�����D��?&���p��/����y�^Y���Y���]����į�6"�-J?�ד۾'�h����i(���Y�R���|��>ҪS��`�G���z����y�>α�_�0�tQ �K]{�g�aJ��n��8L��X_;���p���Q��2��Ǡ� ��W	�\�1�����9\	���J���he	_�i�S�3�V1����ZYw�Ȓ~�_���{��1 ����}_�Y���Z@HB���Ԇ@��܇��mHEFFDF~�E��K�y�l@B���_~�A1~�o�b�?mx��[�ۊ����P�&���kH�x"�_�=�������c�Y�����W[�{��uU7����PC�����=*�5t����W$�h��5k�@�?�b�F��:�*�-��Q�a�{�k�[����~���yX���F�t�l*�l�*o2$j���gOp�-릕#8U%<!�0��#r_�߈�	]$lY�KwL"�H���~��bs&Q�ճޒ��,��4[6���@�I�M 
�C�ߩ5��!**���|ğ_p`P4_�#0�e����~���/_6�p����
�w��5f�)8�?�g�4u3���ި�t]RaV2�9[&��t0�Q��H�0�ͷE��B��)��P�*�/�b��"�D$G�H�����!�,"9��B�%
��K������&HG��%�4C�_L�`�2VX��ؤ��Lpl�Xk��"�\A>W*��4�P�� mL9E�J/D����ϴ�I�s���5�|],r��	�p�,>�@Ѡ���h�F���C��Le�sv�ض�eQҫ�| H:�;�Œ�hv�4��4��ɳrph���6��+PjA�S��M���KG�$���Z��1�|��x_�ðf>���3��-Ϡgҟ�zݗP�~�<�=W��3�-�x%6&�,��4����Ā&�������O6ѷ�ۦW�2N�\���h^|?�N<�OXTu`���A�幤h���@��`�
c�|oeE�X�
��|��#^eq�f��z�r�Y l��������{O�P����\�˚Ѐ�����
uxj���aB�V��I�+�b���`�ƍ,�@}	��Tv�8EF�4h{�1���GłBֱ�	Su~���tQDy��ަW��H��*L��?����cV�H�c�K.?*��x��\�a��?9��'T.��|�������b�@#�B��|�Dp?ڄ���Y�:���}��=��{&�c��=�A;�`��Y�-�z%J
��	���J���4��1-,k�
jf�,{����[��3`M�	4K��ګo��%(��[hٍ�g7�@��C|�B2��.��a�U����_��մ�_�M�b�B��|���@H�|���븪�;�*;�u���1ìh���GT�����#Ԇ� ^�XVL�D���]���1�xZ�X�Oyï>�]~z1�{��)��7�$a�nʭ�a)o�}{�������&e��؛�g�ڀ3
�x��E&�D
�l��RU"�O��ym�m�^E9+����ѽ��xx_�s�S�e��\���\������
a�P/�Z�Ht4�7M�%�0^5��**�egu1�o<���V�y	Jw��7•F��6l&q�C�]͵�z!r��/�]��0�lR���?�ǫ�%���%F7�Ϲc����zp& a�P�E��]�����{��)���-ᡙ��(S̵y`�D����_�G�D��>�d�
M������e|�n�QC��G��
tꉋX�\��-:��p�p�r���x��H�;����h�c�g�OČ�J�{�ttJ�BP�ܫ��E���^�hAX�x�Y3���T.��Y�{vQ>���(�1��6s[ ��Q�W
�
�ݛ�DM�/^��C�$� �t��Q�^��*�S7l�o�;z_���-^3��"Ԁ@���T�
�E�b�Fm� 9{��1@�MP��&=$&Db��}�=��T�A1���>�*&�[���W^�_���ƽSZ�sW��<z������9��������R�B(�yF\)W�#����D�H�kw5S��@u�O�D�iG���vK����_5L_����.dsAƄѻw:�#�+�X9�a�N��ٝc�&zf%��l�"(O����>����s��#Ko�x¬�T�[���N������i��z��j�����~˖h�-bA��B�8���F�R>���8�A�
��~~��~��D��ڨ�H���.gɺ�O�#�>�ԛ�B��O���}b����BDͿ�B��1�H�n��M��T�l�H6Q�u�"&n�� 0�w5��Mx�����'��
�ۏE�\_5c�0�z�y�������+	n��ITN��x�c������<���h|2I�x�<M�;��M�;V�I��
�7�Q�
	ˀ�"*<��9Ђާ�CpT$�~{jC	��2��w��E�&i�M5o~=ز�"wTԭY��(DO|q���������(^`=���'���.^b4���f4,�CW�$����C�(�Dw��ϻ��@knJ�@ҼC�A�O
�K�D�8��n�
�Ual�u��,�^��f���/�SR铟w�M�߶f=��i�\�_:�Q'���].&vß���F#z�[��s�ı&��3�§�y��7��7�o�+ɤ+����&
�}��9Y	>�����n*��I�peŎ��$���Ƭ~\�^�|
n.��:����B�Q��҆��
���R,��14�	k�
��^����-�c:8?�F�{φ	�Vd�r��p/�馤�9^�XpD�g�>q�{cZPl���/������h��)=|dҙ�yfw5w�%���oFp�y��2�bt�����3�x�e������0�4H���OM0���*�� �]P<ĉG$
��,-�PF6��XvS�D��e#����6	ы
��[)�s���#�|��-T~\�i��@��g�a�ݙpe�p��g���O��ќ�%�J*;��)�Jԛ��<!5���h��A��R��lt��Fǝ���G�����*�s��2���A|h�Ċ�lDx�O*���9�r�P��V�Ǣ�(o?��b%}�5-n'F����b1��O��.|[��*�o�+�_����Q1��)�}-�	�K��OML9��e'��7P)�Ҙ7�J��g��m§�ݓ���8
~�gw'�1~������}b��_X�H�Ou��Y�߂���7���{�74��X�)�(����%{-I���p6�s	�j�_�N�[���Ͱ�^4uRmLާ��S�g�����6`k=��䬬_�w>k���3�9�2����\uٟQ���9,�R��)�۩��;olF;l�[���?v��z�ʹa���3|�^�Uv�<��e8]�����w��^�^�ւh�mES�ˢ��\v4�L8��1�1>���:١Tά�.���d�������s ���wk�Z�mC��
u�L��mX�j��۾��c�v��*[���2\sЩֹ�>�t�M[._�6fu��w��N��r�u�9U��2_�w�y��\�������U�4u�e�b
m#[#nT��qT�Tgri�Qf����p��3�T��üfsG���@E��vqO6�Ũc/�e�6����n[�w67���<Km�:6R�s�&�YU~��<\'C��)É��Q��
ε��x�V��|�l@��=3T˵��v@��Nl�s(HX�'��잶.�桗9Yy��N���y���Ԫ-i5�#;��b����59�v����
����֙�l_����2��Z�y�m�{[�o���N�����:c���]��5Wߐz��5@�͍�uO��cy5�-F�Q4�ڴjT��ce�1����Uɒ^�uJ�m�.S����Zr�	�dhS�N@�S�j�'��X
k�gL���mU6v<z�)�U�~�z����v-�<����v�̈́U�&u�.�֤=:4ܣ�h���~�X���b0�*S��Ԥb��OP�e�ڲ�ƠT�m�ӴAn�h�ʭW��j��eV]�
uX�s̸U]�n�`���Nr�դz��Z�Ԫ��o֓AfBW��p�j�Cc6�yw4ڳ���=�O鴒��%�Vl�	ƥ��=���R���ӄ������*|�W��˗���J�9w97��ne�*�yu�<3�
��ok���(����`�ĵՐV��z0�=�x�5��ߎ��Y^�V�m��[5O�hX���+��
כL&���&����~�φemAK�z)�,�W���:,dmW�ʋ�����\T��-i�L�u7n����n�k��v�5��mƣIu�Qo�p��2pEL�%�g�K�&����ԦG��k�7>n]�̟��h�s�q�:���ޘ�U}z:�j��4����a?�̉���]N�k�����{�v�r�Z�SMov{���yw�v�1�*�eN�!����RR�r��
)y��9c(,M��v� �'�\Wf�����I�j��l����
SZ�Ωu�n��:-�]�n;,��zo�<��NU�V�Y2��n�='�nh"�P�,�kt�d��X�5����e۟���-6�b���/��Ym��:-/��H�:���_��
ż����jo������2o��sn�l��Td���7��)4���'kgir�ò^Ժ���n�ڪ��p,��aV�����MR�͇ՊX�1�2d`��l��.^��{�n��Δ'[�]o�hV��tk4#���v4ޖ��r�Z�Tv��:��։��s�)-��V�O���1�4��$���Y��^w?ll΋�ep�ܒ*�����ޤ6�/����3�e�A�9��b7ǹ���U�Y����AR���S��e�iP��_��q�Y��O��E���Yby	��J��0ѯr�Ȳ�t-Mu,�Uڎ�9n!�����Κ
�:��^ �s���/���T�Yw�@� �$��l��hPI�¯�[���<��ݮ��ƒf_�
�r��uF1��!�W�bt1��౞�K1�����ٓD1X�
�!�-4���F��1E�GiGk�����ly�%�A�4�9�7�����=�ծ���'�$Z���s��5��|�9��}�o~�OO璞����cJ��5��~�ݟ���u����k���w��{�8g�Qw}�B����<YE�Sf���9W���o�j��Ջp�.I�������-M���|�*��#�Ђ��-xt�$�]�x�2�9��>16��`HD,�$���"��J���I��#�)�c�9�'��]=?�g�|��yb�X��*�K������+��~��@�����;7W�E�������k��q�Ŕv���>@ꉎ8������_Dޫ��2�P�
zX������bMA}��g�u�:��6Ϣ�q����6����Y�8��%.��f�w�Vv����Ƃ]�5[*�>I�Kg��y�*[gQ�q�����Fhj�2��Zmo��؆���o����c�w�MzWS��FU�5��#����ԛ��ܵ�_ŭEAfCႜs�#�M�ħ7��-,���		���c|k�Fqx�/ii�sa9;:�@��UޗT�V��#���~]5`�VZՙ�vK�3���_G�@���n���w�{�/L��|�y/W��,'�w>�����	�2"VI�Zy��iFD �k	`�ym��dZQ��=��xbxщgN�J�Ŝԛy�s��W��V�Z�LŔ?����덑�S��b�sS���'��-�e���y��eC^�c���:{|�^ۜ��
=�î�K�a��w��k}��{m���G�cu�^��%kb��$߳M
���߼&`)'������S��q��o�fD����|����|t�U�J3�,jB`6Yc�q-�;n���@s�v��ܘ!M��ɍB�t��n��& �`���NJX��[��6�"��,���H��+�E�:��"�נּ����/_
COb=��X�xW��c��ƃ�LO6A���;����>~���Mx����m�G���ǟnP*��ůAl^�(MN��-��5o]�J*����5�Y$>�1w�R��k>�f�-U��&xm�8N�${��c�TPO�.�w�%�z?��ȳ��
k�*���'�DMV�B]S|�5N���µy�gw�x�\�N�bі
��y�X����J.`��Z��C~Z�W�����'����lK �m-���/�wO��xcu>VK�S{I=9��ȿ�p>�2E��e3��n]sR�ę���x)IKůI�}�Bb*Jd\�&��K(���s٘Zȏ�ӳ�]@fړ'̝����ʈc짙�ݶEPa7�^�hk��o�E֕
��=���ܷ�����`c4�	�ty[��~���Q��Y��aހȄ�	wm�K����Uy�}���>�9���o���5-��F�u����r�*�$l�q6�D����c�-�C�Zj�t����D�0x,IA�tcAL�Ƽ�w��D-�ނx���n�Ê�Xr�@zt4��/���_�Sb�������1�ђL۽���B�uS�Dx�|�.�:G�qn�8�mv��k�U��N�g4��+/�t	�5�%�^z�(�0v��3o/K�����[�j�y[I����!�	7�}*��	-������Mx��"�@X�g観�or�$38�4O�=,��J��o�c�o-^��O�
�[Z]�������㹟��ۆW;�zO�Qjx`r
�n��{w��.3*�7M�D�a�>�T��
Y�}g#�)&XȲM@,g���`h��LYNKk�Ox�N�`ֵ��N)a^�RdA�{ȐǮ�삅 5/59�&��~dt%��-�GL�lw�(�H:XZ�l
��.��W�
�J�I���W��mkrۢalh�X�,�3Q.�v�&��WY�SU��I�Y��A��V'��n�C=��jk90-���ݿVuO�[�.���ůRB��P�����+?��Rm�`R��B��B��/"�,F�%�6�Y�2�h�&eO0:X>�@��%B]�x}c=aF��\z�tZb�)7;=���#dC$�G��QȞ�뵤i`ʄAd�uR=��}�}��e��V��o�LyҮ7GpF�;�;�"�q�V��J�wfԫ���A��@7�]cO��^�vY�}2��`f��ǁN�-G҅���*�Y�c��:��@#&��oY�򜁒����8>�R�P��~�.�Z���3��
�ҺZ��{2��+n[�\��5n���^|�p���U8���p���EMD}tk4������[�Xm�@�oA�qZd��̉oCX�̣�+H�iL+��š�
Z��o�|Fְ��#/>�o�(|�,�� κU��);).�F���p��������Ҿ�/]�J�&X
y������vlyP,ݱ1�a��_�x��8��ǯh���fd��;�4����nı��}��,!7 r�u��Y���"�jI_����a���݃�&��'|ب8'I"(����?^Txc�p�}O��}��〾h����n�>��{EV�6����:��NY@��lqyx{!����t�G��é�AĽ^�~�$I��Q�R�[��>�Li���5ku����]���@Ч7��ߋ�i?�x7#�x&���J��D�&�A�:_ϗ�7c4U��1Ls�cF�(Ž��R}
<x��#�w��? Ňy��	���l#�y,2k�h7v��o뤺�
�u���%����.��W�ߥX���zx�r��tZ��/'�/گx��
�-8�M��J��9�=� ����J=⺬-���M�}n����=^�9ߙst�}�������c`���<�XZ�(#��q1��
2�$�Ѫ�>�TR�-Q��Km��Y���HQ��b�Hp�
9���n�W���&�(cz0�nu��5�O������疄u�\~�k9��L������8��?��7��߯������~�d����Kǟ}'����Ŵ&H�S"����������iS��7���hJ�!A����a?��=�$6ň��l��<G���)�k�2�:H����< pg2�i�^�d��C�����X��<0Yl����ų(#yV�(aDF�ִ}{���ԩ���.Յu�N>�n5|_����A��W�ɭN+D��j�Q���keYtt�?o��P������c�O��Š/X�qD]�r[�w�J����x��Y%���L>��\�`,c��#Z�X��EOF�F�_o��-�Rd^X	^�:Y�G7;�0�c����S�����x-�P�ia�� A�45[F��|�EE��8�D,1�#j�؋��tY�ct�2�zZ]%ׅ�Z�O���
m�H��
�	[��n_Ym�W �NH ��9�Y�		���2bN֢��=��w��/�{8 �W�����?�Υ�1�����wKtF���{v�"��WB�Vu�gC���	7|�u��0�D�Y���kT��;��p܏����-��Oz��(ڤJ�'g��tG1:�=A�13F�!���*��(_�|�Ì�ϩ���s|�]��er#�t�_������7�'�����o�Cs/5}��2�q�FI����H�׸x���@���9Ѭ��r�5�亮7�����پM�]B�Ɯ3�)֏���~�����J��hށ
�K�5�
fJ�2Y�[?4�ז2�WޗI�ʒ^�ʒuYb�-����-I8d_CS�؄| �=�i��^	R`��ْP��D���bI�|^EC,y�w���ú��M7�A-��긹"9~��!z�ǢH�c�nYS�8���3�R4c3M��g�¹�_xPt�Cߵ��[>���*j����*�����k|��NYK�Hg�
�X�Ƣw��:��'[:�A�Q�m�lO��M%H5�)������
Xlk�����r�����):9��++����n2��P��!�-VDc$��K�Y!�q2c-��[@��~i[j��)��$�
�G�-ьi˜}JU������~�i�+ĕC̗jN]_kgQ��{d^b�qQ���7_qn��:������\6��!�� ���Ң�p�5׏Ș���'���*��x$+c����h�k�ٴ�9S�`!vm'^FMh��~1�_Տ9b���DS5e&����buz���5f��L�'�`js��C:e�=�[�?u��G�û��Q]��
)J�������^��lf���+�t��#)kY ���W���fGVS@uY��@2��jS�k��Ro�8z/1�q-��T/ڂ�)4��'��kL�1��yX��D��?�XU�?����6��ˤ���3����S�\�
ƀs��`ߚ��<�&�w���y�?F81i�q;�
�#X���÷4���"��Q�b4"pc�S
ʮ�~�Aq2<�r�O'���03Ux��cD
��N���`��7�G~
�a}���~1h�`D@����!j�À�È�'�2g���j|������V�<-/jE��/��K/�����\G��y�+9F�@g�H�s�-u�]��#+�d'�D�	�ݥ�<�Sfg��y�VT
P�_�Vw~�I���l5!�$[N{k��:f�L� [6�l���
ba�5�q�VQP�qC;�k����jf�ա��ROw��rQ�r�r@��!��s�V+��4��!�EP�p	h��
c6]�+�G��&�~\��E���2@グa���ɜ��gi��i�'W�xX���
�9Q�z��A|~��+f�*-x�X~?mDJ6wr�2&�C�&G�>< �7���:ȿW�A�4��By�~Gd�eRd		� 4�X�������X@Z��a�y��ZH:�)5p.HrY�I�S���"8@�*\^�E�@:;ML��FP��u]�&���ub0*pX��lE��j���(�T�W_U3��t������JP%K�)�����睮��xA?c?yvs�SS
2l�v{:�@��LU+�8��;?X�����M��@�Gv��)~�F�ZMC�߫�)�����H'EWTP5n.�h�x��h�
I�:�<�x�m�fm%0���op5��R�R���g���� �~��h�8B��I��#�W�]�X;���^G���jF���W��o����+���<�v+I�Vw���1�t,;yO�P�Wڀ���Ui���k�f��/��lX��϶#(I�gQd[�=K�WY��B�&Ha�OIy��p�|��.=n(������J�p�/��c(��5�ïr!�IGt�V�,!��T�2��b����ɉFb�߰�fP����ƱZ:gs�M!�%�~�7s���ȵ��,U)U���2o�[�����*ވ�I>�{�����M7��~xU5�����U���L����_,.�"r-��/hԷ�G5��a%�8dp�k;����o1��(y'0o��!A9M��+�Ib��t��jRv_1��Ŧ��tt�Ms{�G��Kޛ�C\~13Dऐ5�X��wt$n|���]�2���p�u`2��g�9���C���"��-X���_��(N*S��X`(
)w��x�M�^S"�Ψ��])�R���fxw�tbol����J2W�P�����!8�y �fHD��\�����,��gؾOt�8[g��<�W�g(��8��{���J2|Q^��{M�| �����vR�n��[?CG�\BTj��sģa��T���
N&�K��m�+;v��	�I��x0���hx��	O#��=�O����e�Jtž,~ǿE��;�kR�
L�X���Gi�BĠ���g\!����]���*���*��{�#�.���/�UE=K�K�+���ا3�K�y7?
�%̖��F`�4�/������e�ç���~�H;�L�L;?�s�o}���'���_���*�r�'JyS�t���)֠���oX�և�!�6G�^h0|(�q�@��w1X��*ŤUQ��|��yHU�H�L���,�?�<<���#�g�����%'�3��&���_�_ ��i�>R�c�uv�>�!H;S5���%�>��>#=�	$T���o�&P�x���<<Yy���*�G�Z��5y��QL�gԽ���.��n�!g,z�`_,�j�?a�[(�g�$s�6���XQw��
�6Ky�H�_.N��}��?�L��G\C��V��=V�1j<C�� ���[֛B�g]*;��K� �b��A&{e��nJ��z��z_H��l�`
��Kȑ3�T*��C�J����$����F���g�ђ2����C�~����em�z�2FT����D�F9�^��cR2H��b��	�Ί@w+35�ޓ���|��@Wh�J�g/N�QbVi��H_�,������P��b����?�|�/���P�t�U�ǪF��C1�50�\=�҄�e��:�+ʐ`f3
.7��'k�%�Xm0T���"]vH�Ƌ�2�困!ݜ�7�����憘d�Z%�hy�-�C�1�(��'S5S.s��v��(�v�-Yae�s�yj�ϸ)�k4[��9B�`/(�#��V>ξ&"Z�%��)
�e�Kr�H��f�L��b�1�8��~�����5�vY�4���-�vQr�ˤ�+��+�)����5�̭��)P�%����_�:����΍�c�s�)n�+r3:�l�Mb�ɥ�����D��p�o�g��bOږ>�9�|�k�#�`m[-�XU�Ƈ��G�O6�}e����Ό,�^���1k���w
tH�g�p���L#{�⾋��� �z��cL>�kB��]��	Ď�f��`�9͝=�r�M~��b6�2�ϳO�꘢G)Ǐ�
�?���w5���g0v��
��r��o���?�*S�oG��~�_[�vB�GC�7�����o�E�td�$�ˊ�ě���L�-`Yr�jJ�-[��ëo�u$b�IM�x�' ��
�y�N��#B��{��nϟ�V���11՜6I�b���
�=/�FC���U~͏�.O?��Kr����*v�x�Q�p��dѮ�?GAO\�`"�i.�j�Ir��aw]~xk����|Vz�Y�Y)_��L���gfX�e=����yg=�b�%Qo��|���*�$q����9�u@�&g�(� o��ڗ�`'�v��MXc�JB�.*�?w�´J*a��x,�h���e-(�@�'����4��A�!�y1"4�T'��FG���;�?��2\|�9����Z2��k.}�J��A�s�
D��J��-����_�ę]nߙH5�� ��9�[u�����R�h=?�26I�f�3��y�����0�ӗҗ�wzȁ�%���Ӫ$p���Nh��H�82���G<aJ�g��ꠎd�Y�b�T:TJ���l_�z�@6�e�Sip�T��(J3'ٷ��͹�Ac�`���ı��z�p�GB��z?4+m�H���6N���%@�F������(���t܎��҉�o�<��IZ$��x����xW�x0����Si2�E݃��8I3�a���6S%m�%�6$H��0�r��'��!y8	�������@�]��M�:ٸ��[n�b�l;�|)]q_�H�ѣ�1{��D�ç�	��{���:gb��I\�˭ީ,-@��Iz���nM�}���������(�S��u���5et7��*�i�btC?�eV���)�S��Ob:�w���&)%)��(ڍ���Gv�pb����ܡv��l�����OĈf�d��b���Ա?����_��R�bf�;"v��0g��vUq�ӻ�d5��0��E}P�^�m�7 �����m�*��̑N����D�
�@��Tzܳ�) Y��1�]JC�o�=I��ǭ\�=�\8�~���Y�-���	݃�:<	z1 �<
#,u��dT�k��SjfMk�����6�6ߛ3Ld�w�6�cT��A�X�h7	��+����oL�y��@+<�B�,%Ñ��L������n��֦��8�N/)�	:�i&�c�F��Q�+o>\�h(c��P�̱?���^S
l]ڜ��g帱���믨���)N/����B�ʡ{��o6��ʃ0�R���F0,��0�hb�a�bs|0��n�>���g2�Պ?���oj|��5�.�1ʥi[�$^��V�qn���Q�����/�V����k�ݰݳI�0;=o�K�?kZ!� �%�r��*⻆���m�*hEu�_�FE1��2W'��|f��$��mN���N|������r��G��� |��"y`wwߥg�W���ݠk����;�1�8j�'�x���+�}������۬~S�� p�j1lڊ�Lll�WV��a����I����A1S\��=R�NtG~;���)Qob ���^3j��W�m��_|�uX�w�2�mM +��eY��H`�X
�"�g���B/�H��{�h��2V�U��o����=����Ϭ��ͥ�3s��jU���FX�.�-Z���
��%�׵��:W�G�#o5����
Z��� ��vpc�Mq�3��tf%�,LH>m��k��E;TJu	/j�=r�ߕX�G'����O��)՞o6�(��=q"ny��>�����}=N�_I�*��'|t�6�^�Mq`��7�+���!ZG@�c���{�I��o�%��\"#��{�>T�#I�uɞU��|hnRٕM�uϾ�,1�n��?,p�n�@�o8��m��ĩ����+�^3?�Ugԙ��0�a�xWK犉��'����e��o��m��G:�V>>�h����J��4���U�9M~�/�9�.t~x!E��L}���&�z"�I�Vc؞S	�A�r��Lΐ��A
�C��	��t�z_k��(+X�ͨ)s��<o	�Ӽv
�����/P�֚�\�qD�T�{8�X���͟��|M���ӕ�T1C�/W�̿z�=�ME��Ȟ�BMh�U��`��.+ 0%�=���9H|�*����e�/�-��R{�g-wY�i��qP��)�O�����h9��l�j��d����2��1��7����f���Wo�i�1�|����ew���g& ��#m�2�*�-��(�����Z�^�-�E�Xȇ�@�&Fc�P�oF��b�hd+0��s|V�4Q1��Sq�RD �;��!�y�!��2"6�O��j�#t�%������ɋ��!��(�T��##�Oq��E�~^�ӝ�1"��w�X��y�hQ6
yIr�.�igi��;6ͶL�Dzq0���r�n�bj�a3(Oy?��zD�@\�7�Q�7�D�� ���@�$�â�`�
=.�}��2)4֛�>�ۅ%��,U�*���Z����jGj�`<5\o�4K����!�a���"����*P��Wg�7�6�~t�u�K�fp�3��V��\����>o�uXˤ<E&U��c�5Z-A�'�r���)����<����(���z���1�AK�E���K�݉�e�i,�|��j�:쟶ʴN^�y�Y~����V�9s`�%Tf��^��wQ8�m�O��e�m�'�lD�46qI�^��c��!�9IQE<ֆ׌f,�򮎯�=W_2�K���_����U�Ş.�ӄd�𼱎��#�����( ��6
J��\�"8$>
��)A/�ϲ@d�����X:���1�'oGPS
������'Q��G��cR��y�#�d�F�s��#@�[�e�,�n �i ��)�ws�YEɎ��)����V���S�Xb|E��������B����Ɇ%>��O� o���������X,XM6x���~DQ�R�G���/� �@��*jW�H��1/�c��X�֫C�m��{wc���v�7mdǂoF�)�Z�N�Az����)۸�A�'��IN�wA�y�M��P~�eC�A�=<������1g�o)�x�cC�m�d���7*ֆ,D�[��>`aw-��Ӕ�*5�e��{*��G��t��_Q3�[��L�|l��J���E ����5�o���O4��\�v�`��Լ�0�`P���(z�v(Տj֣7h��ʃ@�����}Y��ʑ��3����5��ذC�@�$$����;��t�OPuιGҽj���cv��'�#�w� ��1�IY�t�ј�n2,�]�r�27t�S/�O=��UOD���J��~E����Q^u`3Y'\*���k`f:nl�5T-�N '#�|�����Dkf�Ir{�Q7j�j���~^DE�š�#G)��R
�0Go�׽]]�G�=$c�=��
R�CI'|��n�vyϟ6캜1����><�6�A�i�	&
|��=��e��F�fG��qA|�\B��Tj<8���ڼ\�
����fhp/g��z:jg�Q��ne�)���!�/��&����	��Iu��BE�b}3���tj�4?G�-��zga#췜84ݬ'��&x{���Cw��XI�<\�&
J)%�7���8�=i���B�8)�{����{	`hg\x乵ܹ�z��N��=+C�^��:dl�B��:����e~DIѮ��(��]F7*�y�x��zm���)B�J�s!�B���2�u00`*��:�=�y\Np腠�j8��v1�v+��Q`��~$��W���#ξk�Txt�Y�L�j�݉����)�j�E f*�P�la�k�
���g�Y�<�ts����-.�vU.���Y������R\�����I���0]�J��c����
?�ɱ�R�>����`��F�}�5*ۉ�f�)�zs`[Յ�3mO|��J�uv��z����1���S	d��6*k�ܶ	X״]$ͳ�>+�C�H���¤\
�J%��Xu���^�˞0O
�l�K0�ϋ��;��9�ي%1��cz�U�NeT��`��Y�+�S!��L�4�ޔ77Q�!��tX)d�][G��)�fT�R�]�h�i�e3X� mO��k!�@�j/ܜ�˳�yj�h�T�T�T���e
6��8�gvw÷kǜ�lQ�k�Jl�S�~@�KT	O�}��xƖ��ܸ�Cؼ�5�5��N'�u��*.�ac4�5ڣP�Yb�l�߱Y���|��G2gi��
�exI�`�4��$� =+"C����v�|Z�(Y��s�y�"�E��UJ^�x�3�m³�U0�����|
�SXU��r�;�N8ƞ{k���{v@��Q&!}��b�2DS�%�%]X�v{G��z՞5��Z:P\-��?��>�K�ksϝ]�K�tR��M_
���ijޛ�B�3����%�F#ţ��ɼ���AS�g�?p�3�h/�I/"Z�WϘޡX<���&��u�G^��֝Qw�G'��k��LDPʟFž�7'��~��w�J�#��֥�9���3����� ��|�^�h�ŭVK���o�(�Z;��R"E2�T& �g�rB�c3�D�AAM�F2h5��
%5�b46C�b;�#n��]�֨�&m���/�S��}�W��^'
�M��Jl��C�p`]}����e�3;o��n����*ּm��f�=���4%�Ŵ�絼3��v���v���z3��.�UV^;�x�dL7�[%�Z�*];�׋m
���R��=�h�w��{	�β�O\w�qsca�f|]���f��^��4<NwT.|�rX��3�jvJix�(Y�٠��z�z@m2��n���ަK>������.��1y���=��7�j�31����B
$]���c�%�%�bNu^���Ъn��vC�Q�2��_�j"������\���e���g�P����\�}�ž��a�Z�\�%����%�ۨ>ik�q̆JNܛ7E�ƈC�Z��-���s�j41p3��%��$t�X"x�ym�,��$ܗ޻���‰w�1�e2����UD�m�w�.���3M�k{�2Ț{
kY`p#@�Y4�����^o��d�t�:�*�4�w+�،Mm�h�
�S�Q���(�5���}>T\]��T��b����ܽ�˕�+�4��N�S���b�`X�<|+(w� �{�%\�;���cq7j>~��@�i�6��|.z����:T]����bEu��L$�J/T��z*,~
�'4�=�� ?���K�\r8S�B��\���٣"ƺ�������a�S�L�>�N����b�.�8����O��%�&(�e�d�|��ke��Z�~�+��KT�E�y�z���M��ʚ4�#��{��m��ҋ�Ţ݊�����幬˵�_����d2���G��~� �� ��6�Z�(w��K9��1hO�7�M.���u^A֜.�t����ݵ�5��ұvI�Rrӌ�Z���p!U�1t���Fyg�2���@��L.�p茐�9�pBug6���xW)T�\Ha�~����$?���V��Ρ�<���6Ε�ϸ��̆G�FD�i�Ʀ'~���S�s�bFl��fIni+eIw&���F�T�rBr����'�6�������tm��QE�O�&_W\
�oH�M�9��u,<���u_͍@�1 ��-۔�!�=~�b�LĽ���|\����1<�1��ݦ���/պᶝ�=-�M�� ԭM�\�
�n�t/����ihf����@W?�/H���#;5��w'�&��7��RU2�%$���*i��!�[�V4�2��qq�ټ�->q����A?�u�@U�O��a�߹�^t��n�+/�yK(#�V�a�G��k��Ua�Vˁnt�V80E�;i�>�ab�׳y"�]�l_�w��4��)�M�иw��EN�N,l����Dž�O�#�}�Yң�I�gJ��y
���#�黙�̛�d��Z�u�}@/�
K���0t�Ǐ~Y^eO�R`0q>ݡ(fe=(^�=�#�͒ž����R��S����Ub��1��\�pB��l�͙7�����zP�ބɴLIQ?
��y�g�&�ZMF���v�;��4q@�/�ܼ.@˄˓�@ݡs�9}�,:�����6*�"�
\�T�O=TQw��R'?V��`
���� M����eO�w�@35޴y�%��J�'��w�t��S����F�	2�.o���\ȍw�${�jҕn�~S딨�	)�Qw7kq�J9���L��T�[�s��p����ށ��qn�%2d�.���R|���'oY����Hۛմm�b�F��=�y���'mR��k0#@&Y���1�q5��g{�?$OKC{e�8;�;��XW�(1��Ė٨=�6�=
��ċ<�(B��
k�U�$�s�<��'��{c<y�n@���kaW;_8��d(�%��E��3���qm��zB�8/��{�U4E�3�ŝ.h-hw!wҤ�`}M^;�ȅ���{%w��9��:e��UA�^j�bW'G~V�B;�eٸ@�}ZM���
�r	C����
�%"H�6�+B+Mh�
��'&�Eث�]�D1s���Ħ��&���;Ӊd�T1�鈧[NɠL�1m���Sa5C>�R�Zp��_�E�~��E;w���5�1�0�҂��2}�Gh�F��Y��ȱC���M����n{_�����w�	��bO`��Pqnߏ�Dz�_Z)�˫�����3�qT��V���jJ�#��ט�g�_�8�m����NE����*�k��7*0�����ME|�¾��$���B�S�¢���Yn�Ȏh��ǟ��&��ᐿ��`�_��}ľ�3���ۺ��{��S���W_7N	���)x���(��w�ݏ+�~���/#��el�_���z�_z͟M��Q�.�Qx�?'�)>�Ͻ�o�H��V�Y&?����DG��Ŀvʿ����h�!%웤���@J��W����/���j�K��0��wg�i!�_d�����2�-5XG�i��D?�)þ���k�N������x>��e5a8��!t���[u�w�Ƕ�T&����U`0��%�ѱp�ğ׃�J�x`b(��f��s��<�S`"6D�8ʑ`	6��SĘ�G�e�@&Y�Mj������v���pl1�\a�Z���K6��lD�0U�4���@Ks�+:����M���⟾��X��)1[��f�`�r������G��[M<�y�pOl/'IK}�1�9�wz{�PL'�[���l�"�տ:;���2eS,��5&�)�=�!_���w�T�T�U.���V�ݔ�sd�-	�;��p�=�8�EH�lq�[�,��X
q^�� �����yU����T�\�vG�0�b���#�䯉�C��=��E25�b]ww��&����J�	����!�2��/f��g�2��1���Q�0��]�l�<�����@>%�G��������:�D���
�w#Г�ڼo��i�=��,��!<�Z����e��{n�8��(c<��Lܳ[�M	r�9`�v��'�o���}KN�H��[��}#�w�u��R�6��w���vz����|# g1&9B"T�F6m��K��3�!>�RHE�އL����ѻ���t��jq.���V\�I�7
{��D*b8^xh�a:���~�
T?�e*�w��Bb5`Ĭj�.�C6n���w9ݧ���m�ac}>�B���i;�����E�v|�$J����a��7�����E�@C�g�^)�Z�D���Hs�t����0��M�7�(Z|�.l������TvG��]��
�N6B�$3K_;l��X�t�/L�|��'{��0՗<��_��l�ޚ�]t�ݾ!ߏh�����hy����?>���:Hz�恦��z<�o(�zu ���h~����?��݁�R��q��q��1��������2�|����G��?f���ńX���%M�����]�0eV����4�|K�q�!h8��c���sATG���E�����"�N���B*C�e����c�U�m�g؇��M$g�~�k��Y����2�y]���x~���G���,��e=�+x�����{�u�|3�4�Gt.I3�U;nթd�ܪp��`�ʸ��ʍ;v�R��Be}:��	�S�1Τl����7ٻ(�ʾ1ahb�)��%��khI�N��ީ�]�V���~VMx�pC�E=oC[f�*��xNv�;K����G����4�g1r��tk%������w�eJߋ�4msڕ����}�2�=�-�:.��T]�yuqq��E�m ���/�+$!|�0�m'"�E,ml�����#&�ɹxػ�O�5?���V�i��l���q�.C��r�}5�3��
�{�,/$��2�һc�,�C�����K�i�h�����_��!��\m� 8�0|�!%BR$��z韑�R"nyK����{��'󜖳^0²��+�-�\b����ș��jr���	7Z��,T�մy�W�N�d8�����oMe���k#;#��6?��^gfn�=:{��2u�f;g2C]�*B]v�5U~�w[CSj���1L�_&�EH��ת�P��m����������F���i���떒��z�~��]~4T�zE�jse���Ie�zO����&.����g��Y'L�5,#�	'�'�0]�+)������i~��8��0���"���2n��]��ڥdD�@>���̀����I�"Y\�BQ�pO����h@/����%e��<����Z�ȿ�n<�wJ%U�4�&�]%��]q
�Uչ%��Ϊ�B!�*�ۣ�����XV��������[�O��G��\��}��8�%Gu��h�E/�̽
r���pư�ÚW)�^�Q4|:	/�LK���҈�|ߝ�����R�
Re�A����b���u�7�#���Y=��*&���޸�P-Lx/������g�fr��擈�{Y螝�^���y}}�֣P$�����#Z�e�����u0a��uGM&9�5��B��rntZ��v���n�V��ͣkz��)r��2�n��������Q0�5@��|r�q5�uȚ�e%�(.��A�˙��c濙��9ց��P�'7��܀��i0*4�9�XF��B���
#��ni�P�YBrsq�epΪ�w��NwJ���n�	��v���^p4�@w��㔗�N�*C���zB�j��+���s�>��=˲��~�7|�Ί��$ۄ�;����@���s#�ڇ:
��V�e�x��f��ߧ��L���|���coeb�\;�ĵ�!ۨ�ROh{�J��D��f"2��vC���_�U#�*�=V5gS�Yz�-g�N�b��
��D�\��MQ[�]�����9�㽝P؂���<c�e~n'��b2�EAn��tw����B�x⩱�;1q|��x��"��%����/�OD�q���&ϟ��?�OQ�4��,�&[N�1���[�t
ڨr��H��9��GZ���W�����+p]UG����[%_����q�gx�O�y�*0���
�=�����ܣ�����w�st��0��m:��s7��o��r���͑]���{<?�]�5�e�a��wL�!ߜ�r�T�(!�x�D�O����q4,����s�Q~h��9��ۘa�φM^�x?@��[���5�>|ا�/�
K"_i��7�Lh�iO�񡫁�
�s�s7�����}��ե��>f�d�-֕���.y*��TZ����!1�x7��<��7L��m�����dg!i����aKR�2t�eo�]&�"J�ߌ����z��R%���/�e��f��A�H]��5Z4�d+.Ɋ_'�r��7~��}1�����e)�sS���z�&Ν�,w����(
�q��D���������|?MNL1���E��J�'jo�b
O����m���*F�d�WgA�Ŗ���D���¡GC���j�C�*�2�Ud���*�Y5}�h��S���S��;�>��y�9uu�un.�S����I3q�T^.�şUBvCG/��fQ��aY�E1Ef���}��G삲iە���@#b��v&ƐKE��9ÈuLl{ո��u�=i+
=�t�
熰F�ݓH�ݞk+D*q&�4�i�q:�F@\{~��TD�ϧBHs����*"+UE��N%^G����rzj7a��6rOyr�SHk��\"�U��ljY�p��h��[a����O��X��'N�g79��3�ӳ]i��Bw��'�p�X^�6��dP�\�*Ϸ�EZY��3��@[��tM�>ݲ�Կ��O��殯>��ᵟ����B�x:Vښ��	C�+��It;�=ȁ����J�"�q@X>;�@�U�=�@����ǹ�@<�~�uj��E��5�o(�XU�i����O��|�
���O���s��<8>x|�G����(��+��5H�@v��3/_e<f��]?����+Zh��z �Q�oh} ,@h�(����P�<P�@a�*@t58�@Z�V��w��(�H����@y��	��@w�����z3��L��;P ?f��1+2?�=��������}�8��=�Tnr���+2(^>�e6��񡲫�H���w���cT��<<.@�7uy���/����@;<�[z߽һg��d���ϝ8+v^�B%��T0�Y"v:˼�(!�1�!v5T��ؾ�0��{n���M��'�*r�|�C�	*Ŏ1���[�x��bҺp�V�TZ�cIoS�$_V�� \�F�)`��
=�+i�|��IapMs�!��s���o��J9"��	"A��}ޣ��\	��Aݢ�R�0J����C3���m�G��(���pd*��2�U�_��{�z�ؼ'�[
n�ϗ�EPӌ���xc� r�E�ł݃�eX�pt��c��(����L�S��u_�sI�_�E���w�)�)�5���o��jA�4oV$�yT�Mku�a-:���@J�%����^��W�˒��� G)���43��lZ���y/HWLo��{�sӄ�l����ٯ(�+,�x'���$��D��g}��B+�E���������su��P\(0��Yk�nM8i��J
՘a�݃!�~��/�.H�x��?f�,��I�"'�!$\]׻�2�
��Ȝ�Km~��<�7Z��1��ҒAم�jS�^~zA0GR��b��w��f�����R��2He��]�ՍV���w�r��'�y}3˸X��!G�K�E��k�y*�,6t�{�����	��W)D^�]
����▅�k�Y���՞�� ��"��癷*�iحp�+���=u����O�BQ�	�Ndi��p�钩-�U�Æl��gV���h�[n�k�p��s�����e��Mu+?���@��KN��o����F���(?���]j�P��2F��fx�Jk,k
�c�
��PyE�$.���8Ѳo/"^_���,Ncr�t�w�BC��ĔѪ�u�{�]���#9@${J`���܊F��[$��W0sb]��a�i�!7��Aל����u��Q쏺d�JND����G���rUb
!`$�-E䇼U*��o��^j:�zP1�@��TǬ��.'g����DP��e��B��*b��aң��kd�	���y��)t���cN̮�&�m���EW�i�S��4A�e�O�>go����\@K��{A��M��s�r�wE�+,sT�y�l�"�MV�vQ���1m��M`��>�_�8���tM�R�CKFuFc6��1����f-Ú��;��W�_)F�@��ƕ�Ӆ��Y<C~�����!���y�5%��:Q�܍���ƹG^�M��J������dlw(��޹eV��s���ْ���;[:��8[��A�ͭ�p��]Y;����2����;[���s�L��K
�h�2)�o�z2�y|�Ό}�H�@}�2B�<6	c6�7���*�����PW]�[�7��UX�T�ʝ�{}�L�.��z��_�S��_`O^��z��U�N���<���'�����?�u8�yn~�����?��W�����_���~�����?��W�����_������~6t��`҉����0[�}��g�+�Ù>~�V�(�)��y��)O������o���	��3�o�LN��/��(�c��/�����`h�i���K
��78}>�C��j��?�Y��Ӎp�$4��J��l��C����S ����7���W��_����}�e~G����;�����ߏ/jʃ�ߏB-��c�˔.ϩ�s�T���ߗ�.\�/���Na��ߜ?}�N����z�|tPP���%e��@p_�~�Z�CH��
ߠ�_�3�Ȼ���e-RP�	�6�&iV"L�~��G���K�w��a�|�x�7�@���g��I��?�^����O_�����V�߮@����/�BYX6���UTG���{�Ꞡ?� �O�L� �m*���{��>:��S���:Z�˿M��l���s�C:�	%�T�8G�A�A�fY��7�C�
�!���>��H��n���=���9>�������\�����;�ᆴP��wi�˗���y��o>(y���G�~��
��?~�
8�@���O?j����+���Z8����?�@�7}6��[=�ӛ?)�.fLv�d��cP������?%��m �/�}��?b�|�Sn�`a�~��,���(�;�}�?e�Z���'}���y�y�Ai���S��a�^\��GQ-��OQ}���^���1m|.}�C�Fs�����>F%���&�?��CrJC0�?����K�����K��ǚ�O���@�L;�k�`���q�O�?��ǯܾ��E�tq��"(�2����!������_&9�w�E��ڿ�
0������?�D�],Y9���e�23_䟿������pf}J����=kw�6���+�'��y�v��D�*��ֱ��R7�z}h���H���h��@��d;�ٛ�9�X$0�H+���/L&��|~-'=�5 �KZ'��i��ؐ�Q�ʜe��@c-`MX6�A�bv1�Z��*W�tG���Y�`q��B῾Y��Y�R#M�y&,m�꾏�킓�dM@ʭ�ܬf��#�~�X�^�P){Ψ�_�vH�hw�]e\X��&9Hݽ�0���2ΎG��*��#e�fpw'ZP�l.����%,�`9��$2fL�3�1@5;�_�Оg8]_Y
O�g�'!XS�l�T�li�c�Y	�FC����7z��~,�c���
	��I�iΣ #�D���3����n胞C�K��Y��������vYs\;@M��n��@�@�Gš�
�k�75�%7=�2Ν^n���xQ�y�e$@���_\�=�C��"X5↔WQ�B����f�������1'����8�!��'m���*,D��m��Pd��G��amp�ϋՅ���E���Z՜=�$k��Ψ��y�8lj{���.�P�?��]�xVߑ��[,��IqƋ(��j�Q��>��g�Y1�}p�}rL�@�3�-��6ʩ'
`K�)���R%IC����"�d���Oalk�=��|�|�u'!�Sĉ�x)D׉��4I�Z��Z��9�ek�lҽj�x���Lf#$�)����ÇN�3J������?��ܪ��%�k��܀k\"��B6�"H�%D����`g�s^M�g��8\Uʏ~�A+�m�� >rd�{��C��^��$
�)�}�Bh�s.Rbc,/��P��vx�\��fs�`D-����ϔA<�y��D5��hG�S��O��tė���7�o�hȵā�___"0ʏZ�-�����M�jN��S
�J�0����*RO��:�Z�^ W�F��lHM|��C���x��AMjڽ�
��G�LJrE0^q�u&uwF_��XH����lBSg��
�@�M��̑�&�a�PV�L�o��$�g蒜i�a���śp|*���2��"O�T'.=�P���!_��Zr0ߔf�5Uw@�
�$����0��U��`��p�8D�؝�"j�bk��^r4��(�2�F�Egx��\P`ݪ�>r���;;0oJti�i��瞑�~��FZ1e	݂·@�XVU��S5.�ŵ���̣�R�lK{l�u�(]Q�E�g�#�*�et68�[y%ʠ�gM&��4> �4���s�D�-�q�Y�u3�r������%xr8�>��`��(�g���\��8���‚Z��<�Gʀ4au�@���`�y�M/��[�%'��]�ȋmNs���4�=�+�cEd8�"�
��@���U˞��k�^�d&
جP���8���S�'N�g-��_+�^�j�)���lX,����w>����k�0͜�ph���Nf�c�vڒ���_o@���rM�z�o���k�ڮ)A�JN�
C�[c�>؆�Gϵn����㈆��Iw��Օ��o�Z�4��M,)ޅ)�
�
�W2�<L�H�0��$B�M9M��3rxAm|�
J�T�^g���p��_��!e���|����ce�Za�@U��DZ�f[�p����5�ժZT6.''�;(R=�erm��Y.E���#>u��Ƨ�]�.� '�jС����`�{�E�m'�g+.zS�}���j�>-�2����K��|��x_�/�6z��Z�	j���V�O9+�yi
�ST`�p{PH���JTۖ�ʄ�M��qٸ��~3i�a=N��>%�3D��P?�lh��h��$�E�<
��:���i�yp�ap!��g>��A���0���&B�BA��X�(�1r'�īT
ݷ�s�M�$#s�D@��G�Ɂ�F,V�"'UO3pa�7����v!������Y��0f�X 7�
bX0���D��l�P�UNp�E����0��Ex�_^�?#�	�3�|����꺜�T�5�]�+1�R�V�"m����;\[�5�Fv�EZ�b�t�"!�!�-6�M
4@@4́��̱�@}#�(+�!>�|�s�h@�2�f�`���>�L��'OH#Q<���@[!�wB\���E本�SV�6�QF!��˜��6�Л���љnj ]�}�(����s�%u�F"�>�c*ə���$�HN�P��or���d�{k[��Poc;9�+j`h���͈��SuT���I���d�˞�t]�Ov��H�Tg�\c;��E"�a<9M�[%���F�P�e���L�l[eAc�&I��)�Qk!T1mv�|��E=�5Ѳ��,�f�)����@7�7��rH���QA9xX���D�1�����O�;D���&��y������x��O�
�ݒ�h��*�U��@ȭP�aA}���{�����h��B�S�=�~�(����lN]���I�"�bH
���n��o��J�*��=�3��i۳��3e�`)<��ō�/�y�>���s�&
O����U/_��Y�˯��﫤�˯�����
��)��1��՝E!�@���d��`�A
A��z�\�3�%D�	g����;��W��p%���,/R
��H�����O�4�ԋ��_ɥ9%��;�����=����<]cj�}WWCQ4zS�9���zAûT|%��(�Zc�R��!d��^4_��BQ�x��ɳ��v.
�S5'd	��\�˥��!H��50m�Y�V��tr�Mk(H�B�ݖ��9�AsK.�w!ޯ���?;~5�u����ߌ�qm��z��_�_���{��H���o��2�5��s�vx�H�ey��"VE �1��
�b�W�/A3�[��8��z�0�+V��P�{:�7��(X�i\�`J��RT,�r�F���N�n����B�9�I~9aS/�<+���^w2�&A
��'�[��=b�k�z3�H�*�u�u"(K��if��G&��8'���`a+Op���1��=�-�֗h�G����V�Aφ��ϖ�(�;��t��1G8���8��"��sf�PA�u�ɩg7,� ;��*)ݺ��:�q*�����Y�H�\�:�	E��Z�xG�k�+��)��$3��mI֯�F:���9h�����"3s�>�¹�+.���d�A���|'ae�]���2�sh�ި�'y:�?"��4�b�ʒ�#W�}^f�md�q��9����u�[6�pO���TFM���y0�Z�q����#�fb�u~5��+���A�Mgn�=y�?_���V�?�����q�]������v��ͷ<���?H�����i�u'mF��px�'+�d�Bl��s�!f_�A`=�4�.fa��n��۵��(�����9�[`�%zfĹq ����	��iT\ �1C-��^"�t��(�S1_:@<Q��;��]�陽��<���6� ~�4�L����j(�,�Ho��l����-�-p(�K�7b+�W�9!6�Q����y'�IB�mX.��-n.�Og�X�&92�F�������c�T�Ca��*�&����9������7�M�05��fsa�E��/R�]1�六)�U	�2S�D��O���5���1Uq��Ri_��|���~�QC�$�I��t�vw�?h~����OL���#�N�-�Z��)�r��T8����n�(}D���pR�~��;)����?P8���g�Ҵe�x*CJ��8��ykMn��o:���a��-�-��H;r̆�/)Z5�}K��3���1�`�Ia5�de�#�gQ��[���R�+��Sۤ���.�+O#zU�P�$��vw��9�j��RZi3A�K7>��L��泚/9������
������K�OF����]^�=��P�.�(�ªK�K\�R��tʮ.�ss�-NS�٥
	gG�^T��u�V���ha���b~r�YD�ԍ��[���6��R��QFW3[ջ-Ơ:�s@�!�I� ��Ԙ]���]7�Ky��u��~g`�f%�7�X)�Lt����5޺�v�x@���I�G����u�)�N@6�apVl���O���@1�/ ��)΢���5F�A�J�v�9o�gX�Rp�a�6(I<xϖ�@g���5x�\�%v���>j�^��`���|[Ol�;�vVw<u��y���
����V}��~��	�-_�Xm}��5t���>im��Iɪ��v��u�
2`�H[�J�[(�s�݉j+5���L��xFU�4��*S'��,������+�ƏE�Ԅɷ;�GQh��'���.�H��\u�":�T���I��)<ZhʂO�|�km��([wv�������D5D��Z�Ny!?M>����L�kd����%p�i��?(�%����J?�y�q�zm������d���S�"u�d�u����� �/4"%ڊ#^k�۽w�|�N	����.��×z��H&Rh?�4H�wȧUdg9��t�Ҋ��CI��0�)GA�U;�!9NO �t��7�@�>>{��^�v��
j�wI*��o*Z`jnx�E��

�Q0��sR� �Zo�	m(r�6�
M(1X�.L8ګ|�_"L'���,�\nhv�=��y!�>0��t��Z�ky�����gA��3�g��P',$)��C>`L��:����m���?�WC�"�2�������C���A����'u�X?yZ��P�'�<ތ�lFΝ]�!;�{G��z����u{��n(����w�� ���`��z��6����n<96^8��$�i�A����^������h�=�o�K�X�9?H��d�f,M)��9���SO�a
�Oax�e��f���բ�r�3��e���_������}��z��ܜ�7�
:�2�.o��	�}$��B�F�ڋ�A�0���,NG��8�$7f�2ٵ3Y��C�3>S��Jv��ȠK�X��m�,�N^�!�]nx)���{�����=m��$���w��C/�g�u9�-%c󹈬)���a��{A�P@w�������Th��m�L�R�w��a��V�wA�|��������?�’�E���,�]�_���%�D����|a������5�rB�k�}��B�wa���)a/���B�L������ߍ����(n�:/�4��W_��Ԯ��K]e�B%5�8J�Pv<4��$ð�Rg@�kk!�Z���G�{q�3܄hN����������%A<9�+����1�:�C�\�S��cS�Gӵ�d�
p�y�F�b��&�J�ct����:KϞ�D�K��|��K���ܯ�[4���KLn�syғ���=HG�kq���t�`��e�A[&�t_~�}��b>^=)�l��f�Ó���r�T�d��ہן�b<�ҕ�bR�O���mA����#�:-�V�(.�W\�?��
=̰����S��Й��X��9_P�,W)h���%��%8�x��$��.�����~fQ(v�t�WJ�{��B8�y��?�%�?�?�e�Ktѧ����H��ЇP<�����Ie����s÷��ɳ���|8�e^l�:�X���k�Q�baI���H�ɣGŵ�%�h���̟�E&�mH*xPkΪV��]�9��G�2��R#e �Т<Ì�����#�$T'���
K�Y|�$(q�G��)�3��W������To��^,��p���*�U��b%̖3�뇲��-F"<�M<�Y\� �'lq1�$�`^+Z�?چ)�qem�\m��h!�R�#_��J�a�� ׇt��ԏ�"��`@dG^�qDt�x��6,q�uy��Xf�J�5a��x��F�;���)l�wD�j�k�e�Lֻ@٥μ����(������>�eVKH�n9nˬ�:���4����I��7��l��mx�A�]�����]YO�@~�W�V%��B�
q�PTA�Ȑ�D�-��3���6A�������ٙom��/��4�֢��_�0BjD�Ôz<�7�-k�˶sa��]6�$��Q��~�Q�ǰ]��$��Q�V��ɔ`�(��4��ϰ-Ws2�^T�.��^�����>�JH;�t��x
��mBh�;9 0r��9��x8�5�lH-R,v�zh�`"jo��b��B���U������j�W�ka�u:j���?��y]�F-\�#��׆�O��?3��#ؐw���4����F;�N)�w�|���HHS^QY9*�C����c�GƭK��;{��=['xW��&���H⌑d�(�l�뻬�-�|g��匚>3��d#�hb�1n�t�-˿���)�nK�S>�ą���ߗ�뜨BH�����m����/�ވ��Y
���O߭~���}Z]�>��/��>��j�Y�X�iP�JYI��	x7W��G*P:�_`8�m�pY��&�<��rQd�zs�TCd��:����<����ު2 �v�._�׽�b�|�x'�:��'^A�v"\��PFq������8r�
����UQ�F��`f-�P	�b���p�4$�5k�`ܽ�ĩ��	"ܑI�/
�C������5�X�g�!6f�=o��>0D��?�o�ڟ��_%��
~x�	^���o��:�5�� X�7|T��t�k��E��XH�OZ牗t#(#�X��kJ�w�����ߴl�$�3(U��?����#���O�#����xx� ��:�\�?>�A3���W%&�C��{��5CI�Ֆ��Ci�?��+p.��9��]^}Nÿ�b����dS]O����Ohk��{�n�A�+�8ޏH(1ho���:�9c�����~1���(v����Q��N�x �C�6��c��A��Iٱ;��1}/N�$O�N���+?|a�b��Q�8��#x^�:V�Pߪ�iy/%���1�qCQ*���H*���C�
�d�I'�v����}q��B�>���O�����Mx�~�&p�k�ŢW�����<V���c6l�#Ϩ�>_��[9�X�75��:ߦ�fH�'���1��95�_ۛ�pS4�l��k���������Ius�Jc��_aMf��N4؈��XK#�&�$v���r��|��,X��;�}��R���xd���?y�3��iMv�N���i�a#:���Q]+e�AF�K8>{�K�.��(��<$�\����!��koN�}
�Fq2�+#5�"o0Q�"΃o��p�7�:��yd���l�����ݱu�����2+>�aՙT�"�ټ9#�ގ$w�N�������'�����Iƞ3��Zkw�H��_ѓ�]C��96�g��!ǐ�`{�gN#5�AV-qq�ߪn�aOv�a7s&�VUu]��n��'�3�Ռ�q�ؿ��br���/�r�~
�2�Gf�s�/�M]+~��Cj��dd����7(1��,8��ɋ�Kv�b��b�X�?���r��S�,j��J�8��N���f0>7ٜ�,��6�5R���~s���@+�v�\x��ϭq@�z�5�����C���`�B#-�&�H�	�ϙ����V0�H0�/�
ʛ����͙�2�W����vYnIl���`LbP�Jy�k��:#ם��^�����4��������dN�B�lswZ�+ų�����3W��\Rcj�(���<���;�_F-��,ϳlV�|�*�����V�v��]o���D����W��CX�	+���� u�$��8�xt�����N耤�׀�����;հ^�=��^�!�����)Ҟ<�FbJ�[��q.a�3
���o�TLL�T�75�Z;�!Ll>�OO��<Ob2T���Ρ:��j���[j�
X�ܵ���i�i�)Y'`��?"�y�pV���e~N-�%�O;n�l>w��*� ��2$����pfζ��3�9�<��}ll��򯐳 �4��W$T00�̈z����m$��f
I5�!#�<���}���n���ǝ��S8"
d3�)�&5�KL�)I�!'�,�-�o�OgM2���qA���ҹ|3c>Ѷ�8���AT�05Ie��vass_6��F<I<�=4��!�-�6��3jb�7�	�P9�-��cn�L�er1��*懷r
��e��S��dejNB{�Cn
�/�R��%�;+�lƔ���͈�2�X���LNIa��E��3�Ӣ���f��Fg
j��e�*;��r�m��sY c� B��f�C�f{��j�hy�H�o�;�~$��]������{�,��	��ЫZ��chU��y�����b�:m?Q��*���$.?��_�Z�.
W��s�юs�����g�j�͑�����T��N~f��p�g�-��,�$�F9K�	�#�p0��z�W�aVhS�Du���-4յ��a��z�Ihx��xT�+Z�D�m�7�`�
>>l��׌���b�Cn���3��k0Q�`�kP���r{��ɬ��{�'-��E�(	����|w"¬�I3���9�̩D��M('�*9\棿��r���;َWٕ��?*�r}��%����xb���o�^-N݀d�lև6�Q��㬙y�sG|�L\�3A�Y�����Kɂ�~�aB������X�з&
hS>���j��gC*e>��UVok�F�m�w'-޹����L||���?̋a�:�LZV������=ޱ�UE��i������f֌�|��������[s���v&��ˡ�K�!Vv����?>T�W� �pߘ?\}�&�ŗ?n������T�\;�9��}�xg�E��x�Z|y��:v���[+sr���z��e��	p��0�\��~kq=�ד)�_�M>L�Hw)�����x��+ד/����z�Y,�'���JW��{=��z�;],��z�Ӿ
{�V}x����A���h�m躠���oU�'�����ܳ�,$m���������NA�Ag�}'���w����{���g�8����}of���vx}��w&�E����tq�~�,d�>Y��[��r���3`���RU��7 2�
�.�ʫ�Sk�r)���hf-"����uy�P��r�ft��1���:��s��F7����\5j�Ucn8��gѽ8}4�Ɯ=����EǢWw���X��_}z�vl^Yփc�!���9
����z�;��^���6�]��#�xy�����Z��Y�.�En-�[���]6�-��&tUuș���Ns�f�k�6��z2��{�݅��k��P3]wH�Z���yA�wO��Ij3�8��!��7`I��}��T����lMM�����B�?�u��+EgU�O}ж����~�������Z�cm�U�i;U�*F���!u��x1��-���l	�z��l��lYN�OC���!�T!�1��V���7��V3<�n6*7�R]�_r�UGݤ���jaѮ��Gi�DCp�J�"GI���9�fP�ʜbI���qA�N�T#w*.E�j�)���oj�5\.E�ѻm%G��/2��qO���g��p�s�!9}�2:HN�9.�T���g*'��-;2L���HX.Sc��<�g1�ZW�n�S����Dr&��B��
F�5ņ�p�	���0G�J���,���(sB+E<�U��~�)
$�?��럹�76�+�}�qE@]�y�5���P;Ro4G��ó
t:
�qlv9��L�?ò���C^�ē��R�G2Ғ����p<G%�wx�X�ox{ G�o�T�E+Y6>B��$��8�; =$n��@>ΨO�u�&	9ie���5�`��6��8���Vt
S���I(�?�0�Ř��>8kN�P��d#�.���������<�;��)�d��[ϳu���"����0�ƕ�"�7�coA���[�3��
�oa%���!�9Ef؞�O>w8ޘ��+4���hA	��g�[w�zw��1���Bh>�����!��:L�_TLm@ߟ�R��KȡЕݕ�}�����
[ օ��b(6o���4���<Th��;eX��+r�$��WB���.y
\.�%~/�2T��
�
d���tgE�)���C�*Y�߾l�g�6���u��c�nT/Sn5Xb�x�HQȝXP�)KdT���H�_֦������[����i1�Pi�\�`>�"	���.(��>�f��`$Hɪ��m<��%�3
�,�����-)i����`���T�
D@�\.x0�
�i�!86�2�B3�F��Xp���@�K`.��U�J�^&Xߌ\�n�����~|���c3%H�2�0��1^���A��u�E��ٍ���,������#����מkK�Øǃ�F��D^(��,@,b�j��QT�B��ͰS�� ��w� �J]��9���_?�7��C�H#j��FX����L;9�HO�R��l6��\G�a�_�{6�>���&���i�5���"�g���(P
���93m���7��NAX�Z�@8L
�q3Ğ��	w�x0�2觐v�*u�t��Ų�]�bJ`l�W�h�t��jq�(D�9�S*X��l'�a|+����%�dhq����|S�=4�GB�1��컅�R�̝8yZ6�B�&q�j?�6ïoWS���%A8�b��t�#:��k��L���br"᮹�
qk�7�n+��,��h�|�d�����$�\��4
�U�U�c:���5�
��b�
�_JX�.�
�ᯞҶ_�e&eF3�)&�9pȗz�]<˟G��Jf��f��8H�?v�=�A����o����R6VEҔ�TrD�&��6Ŧ��#������D�!��
A=g���;\��,��p	�>���N�t��e?2��T���m<HZHNtȎr'5�� �r�(jD���p�����G�7kb��~;ě�4���b��d��4�&���bi+Zc���๰����/�q�T�pħY�,��Cʓ%��'��R�4�~��L�d���jW�N������T�QFB�����-��̀�M�9|˭��5Z�=��,wP\P}��6��2��*
���vu��d�%r�##m2�D/�V�J�����8I�kR�52��g-�z��n/CTܘ�n��SCu���#�������|kr&�u���x`�n|���~�?1�!G��ےM���UW
�VYR`(^l�Y)�Bdb�wc�F,p�R�\Zsx���+N��*���t����T�����W��\~h�"��d������.�Eح.f�|̢��`�Բ�hJ*�ad�7p�ua��2��K��0��$N�,ޢ/7��w��x�Χk��p��S�*�,��UR�-A_��09�oy�����P�
�J�'s���loVE�o!R�k�&����<��rl��כ!�v�4�دJ��5Krã�܀B��k�-�`�d��H^_���F4��B�c}v��t��[��ʦaͪ�����f.\����#�����i��mǞMJ�l���%/�e�C׍Ng7�kr�y2W���F�H��ڇʑ�sr��aV�+��t�=D�M"0�%�p���ATã�:��
�Q-��P�
ؚ�XU%��{�T86���"2l��
��$�E<�ˮ(V���o���\�w�8�������Jݤ��w�����&�KtӾe/���
6�M����$K`�y����6���h4�g4�*�9@��0���زv���w���0˃y�X�5�^�T&lT);�)h�4�p�|�|��9��Z�e�͒�Bz8_z�>#�l�=�Jq�:�N�
�C<���"�mJ������/�5�李v��U#��)Aŗ���ɭ���jC�G��l�X�9g�hx�+tW��fz��|�ל��v���Pz��R�=0௤�y��>��a��x�>r����ux�l|w
���4�Z�,$��o�А2���j=��Už�X�0 P�'(:l��8�� +�X���mʡFa���b�C�y�,��g:���-$�<��O�{1����8"BW�}��k�	�4(al��3XPδh�Ž:�_�C�}�p�x�;.pf��[$I]�9����Q^�/�5y�ݚ�>Z��
u���2˭��P�T`�p5($�i��Ӷ"��'��AZ:m\W6?���T��u�p�Z�c�[D��l��磨䤬 �%�<�V��f�w)�;�$¿�9�
�jH�	.alb�T�Ayä���Q;�'�&j��mK>GܴHR�.&H(p�9p��)���ԓ�Z�Ǎ�d�d�]�v p�l#�8�F��s�A�!�F4_�Dn�Us��q�o��q	�Y��1x�!'�s��@����{��4^j�.˱E�Qs>����LQ��J�9��)'3;�[�-�Ru�I�&��	ԣ!!�!���M	T�`�4e	Xc��
�FhQ��)���}
Y4!4�x���<j�/�����!�Dx����Z`&�ĥ��~9و۪G�/3
R�L��@k�ʃ�u��b�C_$!��H$�kM�[69�����7⡶R8�g����h��`��s<ͼ��oB9��8NN�����C��Z`����v�O�ѨOp�3�,�C��c#ZA����>�B�a<9M�\�I�5��cN�y��db[�4���D���y���a���51�um���Oh�]3���0w �
�&���Y�j�U
$�ӻ�$x"��[�>|��!�_�x4�E�����H�>|���oM��W��W�~m!�B���y�����]�Gs]����9��*lBaB���l]-��q^����4�/\�-���-��88T4���n��VG�gJ��Dx�K�G_R�^=uRx�'�nIn<y������7\xUX�ͅ��qa���O�y���\�{1�Tw@RV�EsA���HDW(K@�1G�f�����WNܜ�kz��:�H$.�<�s���*jک_���u�c�i�I�m(��LǨ�tv��}���P�FP*1�9�T΅`x�J�$���Z*8�05�tz���v��p(�z{��;�r�X&�jMHct�9%�SS)B��5>���yA+Kxur�Cs(h�
�z+�F�f��խu	��k��������~��{�Y��z��{��V��7��^�E��=۵����L�����Y<�"V!��?At��ZxB�n�����J�wC��ɷ���]*����U^M���%�f���w�PD�����(�8���ϡN�ˉӈZ��Q�O�z�(�3���Fn���Y.���0�\�!0־�(��X��YJ(��\r�s$��J��JM��c��
y�5[F�/��S���+�C��?����{�xU�`�1#��hT�8���ysc�T��Ճ��gW�� ��id�@J�./��0N���J���$���i#%�qC��K*
3�A).�85����_|�t�3���sБ-o�
De��	l��Ⲙq��R%����SI+��Ԅ�-X3�(�*�
��%#���I��!�+L��2b5��ef>�AlN�]�܄m���ex��z*�&lg�{\qP�⸍���K#����j�^�M��h���ͦ�"|�6]��J��;��T�	��ͻa�t�&��I�v�f�� 9�&m"�`(�_���Ϧ�kF6b�)�q��P_�`��/s�di	&�Ɖ�ۆ5bp_��hR��zK*��U�<�TH�(�Z�c‚��K���tgq�l��^HaQ�--D�\����&��-�v��p?��q!�(&��m��Z�2|u��M�<��NS��B�Z����Pv�]I���t�1�f��]Xz��ב���Z<��=�D)���}n���tå_;=�8l�u/Z�f�^?�sv��[�Y�+��<rtŎc�Ɲ���i�]���k�F�l�y�7[����I��c���s~��գ�f�ۨ�9?ʾ[�b�#�
8
F�j�O�U`�6�j{�vgG�=�'��y���&���%#/�ъ�%}�����)=��g��
݃,�Vk�֭U�ѭ��-®�3���tR9S�ףE���F�i���&6��r�����!���T;���ό��y�}�UC�i��k]�i�"J�쳢��(��p�ɳ9�6�R�Q><�o���2ˌ��	\Ã&��&C��ג�K��MA�Yɥ��t���~}�P���kŇ�7�Ӯ'����:]�����[Y0
��aoi�†a�6�"�7��i������e47���?
+l�7a�|�o�;���[����s��lb���%;�&���%c�܄�����X�߮�6��%�@�#xA@���1���,��g��~�[t��,�8�I1�r8׉V��n��F>�+�|0@!/����T>���V>�O_��wP֦�Ta-�W�����f�Bpvkē�O0���h��-$���D�k�Pm��w	8�/����+� qյ�*��j�%!8�£0�*�b�f���<f�F2��K�'ߢ���p��]3-�����N�`TnB!�*��K�6:�5�τ�rƫ���(1�\B�z=
��;s����&���D�I9�fa��[\�Z��F/�,kX�����k���u]Qv�!�v�	m���|�%�,R{I1p8�/�T�g�+�~qK�}X���9�VBm�q!�	G[�S1y�
�-�51az��K|��B�SE�	p�G0<7L/�>W>!���u�S�ު~[f���&%S9�!�B��E�c6Mp^*�Y)�Tq�;�w�_����:�ySz/�:X��^��c�p�tCS~�H����[�eA9{���dȅ�+�( ��-x��̓�HW�a-j�}8�ă;	
 �Uz�o�-��o������
�0�Wf�B�^��Q����6��� �w��kQo]Ӽ�.m������w��o��բ`7˥��$��kU�_��w2�x�9��X x[��0�-���+���C�4���6]s��k�΃Qw7>!��4�|Q#i����6!@�1�
pD�_�#2��Uz�Y��A2sȕ�#肕y��<#�PV�Mq��qԉe&j^2]�㡗T��*1=��=|oZ������#;?a&��(d,J��*4+ke�ŖMO�@���U�K�'Tٹ*��J.=E���kwU���Ip�[B*��~�3��Y��w_ϧ�o.�����x�dt����{<9�?	�� 	�]��Qe�xHHƝT:k;��r�쬲�Stj$"Y�����Q�
y�@�K�)�8#��<F��B'A

�ɇ����B���\�%$�$^g�h":�-5��S�y,�|LS�U^BHeis虂��4�c^�'�W�5:��Á��8�o��Y��aAz,)
^�O��Y���t�8턚�)A��~)2�G�#�X����,��kv��r�A�"�Z���?��(K�k�M�����dw��,Xk[�7Q?�~^�f��f=�z[��9�K��8�ک��6<��*q�ak�햧��og׎n<.Aw_{�-"Ty��j��Ϡ�X��P�R`�~�Wռ�2�TM�l?avW9;�$�6���Z'͍�������d�]d�\�G�*�Sw
T;���.�v��-z0�+���g�_��9�N�ñ��o����d�V��*W��Y�<�$s��T���jX��ܫ���Ä�V�t�Vz�l<q@�F�7��ƣ_^AM� 	�uQ�n�0��+��,P0���!@�K��c%��’Jm��J�
�Ifvv8\nV��p���]��������}{<�ų��1bee�wru��e�(>dd�,;�;~'I�`N�xz}^�r��,���x]`u��٩�19�4��/�×����jSU~���k�BZv�?TU5ƚ��NN��ߥ�K�^a;�g~�΅�)4�=�h��aƩ']|��o���3����eߞ
�#Q��-G�E{�m��p=.j��I�D�og����B�D�s�g�3.t,kC�"��֑e�%�T����p5_�Et�-�4�qH����Q(?�2��u���kޏ�'#�H����j�@��
H����$��؆�:ɅRrY��XZ��1�#;���;��FJ��d��oggF�Lh�s:/>�{�n�I��U	�r>��1�<�G��,F#��h\h�*�"��!�ߜ6�,f�܁��d:�3F�h%�Ő*K��VT���u��|2�Nf��� H�z��t:��6Y��>AX�,C����)k���l��}4���If�J?L�1:Gn���Ɇ�XeY��B{F�.
S��O�Q2�~����/����s��7�](�S��[r��N�S���=�h(}}�Z�G�sy�+���V�8U����Ƞ5���h�����o۵!Y���(�k��a)Uu+���m��\zZ�V9|�����zw�][�6{��VsZ@�n0����9.�/�S%��	�-<O��2�
��ʒ�*qn7��,�%�ͻ�ߡ�OtnW�&����X�/���^�ٳ��qQ���y���?K'��G����ȿ�������l
�>�Sh���m]�#����Hf��SH�MZ����$���Z&���������ӓ��6���G�/Ѭ���W$�0����}�$�IFiUJh���Մ�ldM��LN��
	� �R��RMK1��W� ���S�d~@�z�Tb2m��X���"���CA(�fޛyo��xx����>���p��m�����/�O,-(�1�i3 ��zS�-:h��M��l��x(�22e@1�pV���T�]XX�1!%*����`�JWe%����������h���UPm�+;>H'hƕ�l��I0T�=�2� �.)�L��6Ϝj���a�.�9Z�ܚ2n������p�j��
�Y���_���W�������s�L�m!���K��@��}ҭ�øA*qt?О�wſ.t�'{sd>���.��#6�oCz���mP�N�0�gAj#�4Y�TJ$�R�����V;��6��I
Tl�<4��v�SB������ζ�o�郴�'�h���Ñ'w�:a���	�A�����U��ք	
{$g�F9��a��0j�V��-HPq������2Ox~��^�;4JS�(e2�'Z�2q�]���5;3��ʚ�Z�� ܜ��*��<��
cOa1ـ��Ņ�i6��)n��w7���D6�^��|��\���#
�S^�^}Lke���,H��Z�.��T�/<�/sU*�����PNG


IHDRHHb3CuPLTE�E7�D7�DD����F:�ff�U9�D7�E7�D7�D<�I9�D8�H;�E8�D7�D8�G;�F7�F8�E8�E8�E7�E7�D8�E8�E8�D8�E8�E8�E7�F8�D:�F7�E8�C7�D8�D7�G6�C5�D5�C6�C6�B5�H;�B6�D7�@3�A4�B5�<0�?3�>2�=1�B5�?3�A4�B5�?3�<1�C6�;0�A5�=2�>2�:/�;/�=1�=1�@4�@4�A5�<0�>2�;0�:/����@3�@4�9.�9.�A4�<1�B6�>3���/tRNS��	��1�'���=X���sJe��꜁WKfr���=�e�'�_�kIDATx^��v�07 =�mo׽�;)[����6�5�l��s>I�����رc���v<��[������DW�����e������#�S�9�x��=��]Â�8��c.:>�!�j�=%X�Փ<�%N�Ew�.�'q	.�D��EO�+�D (�{@��+�W�!ԅ�J"\�*�R�+���D��i� �}��HY��\4|R%��V�=��)�*�}墎��d��ր�AF_�T��Hm=�QS���}EѸ��-M2����@�ƣ~��IS�7x�n��9-b�-mb�J\�7U�h�143�t&����{z6H��]�t|S1/�W�==�A��z概x_%$w��M
�N�#y�0��{!L�A3��^�� 3�!���Mٔ@_1#�������澮�`7�kД�m�+QȎ>C?Y�X'zR[��į�fm_��F��L�L�W��+���U�
�W����C�}���'�ma|��+E<w�˚d/�{M����n�Л�TV�J���+���?�E��{�$�J#����O�}������W���W�.�nA�����(lb�*��'���,�s�U�}�_�@|NP�IEND�B`��Cx��%TT��$t��"�'GzK� $("�4AdRĵ,m�;>�-R^��ၡ�t�td钰�+A9�Bޟ�sf���~sϜ�rws��Ք�@ ��N����4���(gC b���(�X	�t��7V�`@Ș92z�$�,�`�,	D��N�E�5�b�H��;X�X>�J@�
@�D�X-֋"�?!0�A��k�(D4 S�X�E�$��X��;X/�A����k��#L8��D�@IVKN�Yf���E���Z��k���G��Q/��D�4	ݎ5��5AD
�#��6k����-|�9f�xm��Q���=�
|�9h��Y� FmS��y2�g��9`�'�_,{�=x�.�E�l�P(��t�8�
%�p��K�ˈ+��9���V6��m��^p)�[�_@�/�cl��K	���Wv�\���8�����;2h�ߊ�@$|�{�؀�Y�lQ5���^�RN�O�IGS��黔?N2��"J
rO4���h�Z����S�����&.ÁR��O�a�fg2l�N��>OQu��f2�zVC��ro���|8�G����f^��Zэ���𺏩�n6��tH�7>C\��8s�����%DG��[�t���Ee>�¬����-�d{�b��� �m�����o>{��06��҅�Y����K4�;�� �G{)9-��l��{�w�����K����@�=�z
X��bN�q�<��vQ����'	��g�PUk:+=L/��AX����d���h��.=;���c��	)�G���(|N��EtZ�`��.ߥ&�kQa�Q%�o�Z��}߲,'�PZT��]���dI�����.�2V�J*��(aP�%���E�n�9H������s����
�އ�M�J��^�y>5����J���`�M?���}��X��rp*j�xkrJ�R�Y�)�<��|t�6���ٖ:�,� V%�.k�b��5
6�y"d<ꮤ0�5�|=�{�JV��^��>:�L�2���-w��<���$u����oUl����;�8b���
�BϠ�oS
��}��n5��{��!}�U�J?S%������g��K1��P�4XQW�����·>ŷE�������/7=a���9��p�į�C=��~W����!*L�ܮ�@"A�X��j_�NvxUJ}/�!r�eyYoS���B��{6+,D���5�^���+_|��m|���E�"L�FI�q�����V�t)}dZ��T�6��h���%�nq���Pk��=8C9�sƥ�
����!7F�
b�Qj�'�ŭ�ԝ&
�$y��Ќ��,I�|f�<BY$l��nY�{v���q�q��&�P@܈SI<��}��ef���Jm"61�y���@Ӯ��)q?ɭ��΢��FL"Bb
�yqoBu�&��{'�tF
0�����+o����23�t���,�/�tUJs;gKc<�@�~��
�5��"����u�	��m��I��!��X�Q+_���f��#�"
�l�T�i_eN�Hw3�VP�V�X�L}<g�;��)�S$Y�����nB�#�ڠ�?�y�%���smj�V�.*�ȉ���p4�����k5mۅ����Nfjh	C���od2~r4T"�S�ni-�:��?7R?����~�&��#ؗ�TqVc+L2�f&���4ױ�bYE��2�ݒ]ޝ�^���:��bK�W+���7K���ơ  &��Wa��}j�Ŏ1�$��/�$�'�Ʉ�#Hl���w�FfXc�K��Tm�N���)��ߖ7�1��
q���������9�9��Xms7�ί�^��Θ��y)&��6��~�x<�p2��)��w%����'=�h�����:?p��!���U:����HZ�d��a�)d�W�dh$)�m7��a�U�'L��Ă�I7JR�2l�����M���]�7Q�S���Vȇ�I���qf�nc��Gf�PR�c�(f.Ѥ�6�T�t�Ę����!�Jkj4R������BM�Z�RG�1čf�)…c�Χ6U���\J�@C�3�
<����M���0$�#��H�P��a0o�o�~Y�"���l�,$,�:����DN��..��_�PH���z������(�t�hp������	ĭ���
Un�F|�64�'n(cz$��@Y��64�*�+��'�j���$���8��أ,��s/@��?N������7�|D�6��������`,l��f�F6���N����y΅�H6oSDHw��J�n��6]�0�h�(�m�|�J�0m��P���'�:Qj,p�i3l�
H�bNu'��Mw�n�6�&���Hq~\��/�Ӗ����bۭ�'\h�z��1·�eh %I����IO�W	��}��L�n�{�a7�`��n�����}�xq�-\��f�$��5�Y.2f��hO��ц�9+E��}{%|�(�pԺ��i�:��L��xR�$��X�͎Q��͐~�s�3P|+X��OW��i�G�O%�C�=g�Ơ��w� 
dB
��$�0'�V�k�i�D�
XҮ’���R�<��s���̘�"Qx�v8�ª�Iy������'׻k��x�	ixq�,���^�t*#?r'k�_�<�Zc~Ӽ��<G}M��	��VL;���I�J&�w��evj����d*Zk1��j
T���l��6����L�֍�J/e�{�D�S��dZ�Xd՗F�H*J��Nn�n�M��h�j�~I���L���Џofa�<[���M{}�I���$���%(��'j�f�)���^��r|��	9��s��)���]ec|�n����k�:��ߌ��Z_�o��vgݚ ���Z<��}����"^�7ї������z�
5���#�w��60,*��+�2#8�$�)��ߘ`p��l�R\pa�T��z�)�
�S{��gw���͜�� fĂl��7��x���]���%i�\�2��1�T6$�S�Mh���B����V�p��m^�z�/c�̇��!x�Dz��~���U�Y�3ZĬd��՘B�.O�2��
�L�~�M�t�·�ʥs
܋��پ�?<!�x����z���ޫ���v����o�	s�;�{���n-�%*��|ϋ��S�E�3��ƧS"�p���.��"��X[o7~ׯ��j��㤏v�]�cc]$�"v�C��#
�9Kr�(���~�����h�k�s�|猎�Ĺ�6V�
/�l&~|��Gq[�8/�Y�z-�j_�RqV�":aɑ}�<��_	��PN8SیDfrx\���r��)�u���MI�Ti��Bz�I-Ē��ֹP�$�^�_���KUR:�kr��0WN.J:���℄6��N��M������	�_����ڮ�V_�		o�Zih��69O�,�`�t�"������KY�-�i�(��EU/�����:����ME��u�}���$Z�6�[+����dY��+����\��~s�<(W<J_̎�-GZ��Ae�ބ��"ٍ��� K�~r,�����PKQ�Ԃ����,�
���;��<r8�L�S�J.$Uzoբ�PV�A��N��G|�t�u�W��B��	=hX�S��͍�N$I���ҫdv�р+�D�-8�4R`�t*~�A�ϑ7j>�7�B�d��m��nn���!u%2K�C���
Y��Z9]��[�RS��E�		i)D�O,;4�^�Z1h	^�ѱ(�����Q�Ҁ)]�/�,ej����tD%�!)��,�u!��`��$�GZ�+��Z��:��QՉ�:��F���N��"����v5�A-��LHJ�|�<�������)@���*Vt��Bt�
;ӛ�"�5�C����/���B��:����	Ӓ���{��
�s�<�S�W�ǯ�ӝ���y)�������j��ã8���)�|m��~!k�Q���F#;����6��ox&�Nb"��F�FN��¯�� 14Jk<pb����
�Ȍ�|�8W8!�Ok�0�Fc�@�1�MwC<�#G��'�p�E�������$!��ݨ5:�P���D�DTk�#Ns �7���X����GFc��.�����k�|���y��p���CH��N�����:��N��n��*L��=	TGw?����Nup���#^����܅��%ʭe�8�#ֶ�>|=���]q͔��w传�e���x����o�դ!y�w�tF<F�l�k��~CieI�q��?BӁ�E@��;/�lV��f���ސ��sָ�9�f�q��SF�?+��A@�9�<<�j������>��o���l���\Gc�tT�8k�9��R܂�� 0�ρeq�
;D�k�Bq�3�-dv*�O�a?�~��u\��j�ak�y罫4�퍛��$Ɔ�v�	>�Vn,�;"e�PԼ2��\�\o7�5a�TVU�It]b�c��=��	���4q-9/����.����4K�>d�\�P[{�xK;"���s'p�#�ZVLXO2��{�A49�2V/���w�G,c��ͷ5�҆�4h�6�u-�\�����mj�M���K�N����ܘ{E���C�]�뉘�B�b惮[~��όa�t��#��DͿU"�����/U���|�7�<x<x��<���0��l�,�+#Ž�#ڰ5/8�^
6õ��x���k�mP�L�I�5���v�^7[���}��_�d'��򂢜,"ã�2[�&aKK;�z�����E�Q�, �L��f��m&DcНO���F��<�-��G�#�kl��^6�VH�����������и��������$3fYj�)>
g�ϰ�{'�KւP��<�����妕0;X��"�
�l
�O�~D�1o
c��}��Px�~�+�?�f�Qه���^�%��qiE���d���V�o��m�}�y��5`0��1
cž��B�����0�vkKU�&���~(7��Њ��В�-1��ه�����E������-=5������I�~q��܀�
>O��q�8=����7���2����o�v��!�y�IMf�`M6�6�'��JL� /u�#o�1�d��>E�Z��)x�Dï���u$��1vG����׸�v1ح�8(���,���Z�2���a<���ss�跰*�W��>Ovl�4��YM���{���ػÌ��Kb�tn�z�/\�����:�����R�9�i�H�?��0����Zms���_	i[:�n�����b=�(����m3
xyg�,�͘������ȣ$˞63Ɉw���W<���c�˵��&�O^�H&#�L�2�Jҫt&�JH�(�Y��d��[6K��ɕbD̉�rE��d�H*f��υ�e����	%�^�)�.)�qئ3�IJ9�2�4����sFΆ������%�z�'xѕbfi*����:��r����X�1I�*�fdP��qMT*�6��Ű�,��8r%p����,f�%K���� -�d�!����-�\�OP��@���f,�g�N�\Hf~�NJ��*r��f��ӂq�Y�F�8����%�$��?�
�r���xq@^�'b����-����sg2�A2���`�|*�\'(��^2��J��'��L���w��w��/� LZ�tGtQ���m�o�G�DB
f������t�����:���X֝���y�sZ�`0ǧN�(�;ǎ��A�9-kbH)$������
��}�MB.$f;NEY
~��ڬSIf��_J1��k�C-ԣ��W:�3��`<�����|�yCN���p2�
�ݛG��f1�~�^_�_^]\�Ɠ��Y�U�=�ѽ��{�gͭ?�����&��A���>ʽ쏇���/nů����x�~x����g#x�7�:�wwmV7e��K���%3Q&����2����G�t�S@�:��׺�	c�� ��}�FX�ד���?:\�ֻ�9yc=����G���t��n�밤�Yw���j�dt�d�� w�!��{o�$�4���|CNf�b\e��xQ�ߓ�ack^��Z�K++�	��Li�қ3�Ծla]HiQ@I0%�?���K�"��m
ayBJ�Rc�O���c��&z^�S&��
��N��'�3G�2��]k�[İBnW��l���F�;�d�Ti�.���~����5�m	ڱb�����$9�fQU7>�h]+
K�S�qo���4b�L��$D%�:f�������}�!-�4���IB�9���!Qm��
D�?�C4S�bmI�$ <-S��)nRU�2�������G�X��5.��j�T�ú�C��0����}�TY#�e�'��e�Z�L�Č��S�y�wU��h�]���m�*~��@�*���GH�?�[�J&���WR�zYҜ�ːY)����}^�ʉ#ۢծNWi	��n��G@�P/\=���g��f�6�U���=@��Iu����Ewղb��5�8��z�d����H�.��/���O5�v�F?>�b���Jw�:�k��kXT�R, �Tw�8$b��={��|�MD,��ea��bI:X��l�I��08 ���ޑ�#2������騫�Z�,/��!cVB?M�F��6�)1�4}�rF=x��^����B]�Z�C�I��*��о��NGf�+m�V��Ir��W{Ի;Nq����k3{!5MF��U�}R�߃��o����B]�VB�(�ۜ��2c@�gH8�k�ጔ��e�
�-�ؒ�-�<�:�.��j�sC����ф�e�����4�p�	��
����P��O���9[��N)����ʝ2π���+Q�b�ř!�&Ζ
�V+�V���������LM�	��W��r�
���A�r���M�˜��%����R%E.��TH�a�i����gOA�6K-��Bz6UF�Vcܯ�������b�����ViГ���G�$��⡓�8Gǯ��T�~�~:X���y�ɂ������H��5d��J%�\@mA��p4���o�eI%-#�b�o�ĝ���������2o�c4ϳ=��B��}o+���J��_i�p�^��â%��x;	�J~�4C�c�g��ձa�W|��>d�`S��>�X"XU������q���UNC�7�tnPZ]���9�F�h�ڍ��e���c�I-��p7MuCT�
��ޅ��@�~.g��w5C��H|�f_yYx>��ֶ�l���(o�
c����a����
�lC��	��\_��^0s	��/��F\`E��$d��-�ׅ)�k���Ș2�8*�I��9Z�V���ܰf/N��"��J��A�ʥ^[���Um�K4ȇ2 
��73�;:|�ـ)O�6
�C��ى���77e(de&�c���<:��?<��]�|ùِg!����kV{�N�x�“���:A����C���9�͛�+n&*^�A���e�S��,�%N�ɜ�D�p�̌��d�|F6�X�B�څʋ��	�#�W#�-7ų�F#�=�v��B��1V�nVh�^za>��M��)¼d_�~����S���d-���=B�hK�6��Ń���4�W$x&^���L�)���u�}]�j��3(��1(�/Qά�%[T�P~͌�Ȱ�b�������}΋�/�����
\S�54�X����C�,׻U�}��c"{�E�k�l��o���Ѣ�_��ߩ��4/��.�1�VY�f^��?f���0b"����+�{e����ZKo�0�+��.�y�NÀ��݆eXQ��.9��R���9쿏�d�V�
���)��O$�]ڀj2K�%7ab����-_qxr�m�zc�M��{v�cB�9�
��CM|�3������ ����b	
t+�.����`8x�2�c_ڷ�
�	L?�uc/.�l�6���:�eP�
�5�~	��^/�a�V��iQ�e%�"s�PV%!m��{���Va�i5�)�y�8cw�!���8W)�H�o7�8a|
�Ї�ɲ�N�	�G�l�N���8Px���J�Gl�B���~7�`T��"j�ՙ�֎|0ï2�5~�����5�\E&"�ư��aS|t5��.�FJ��Q��.�	�Ph�3F���+�����a�g@�5p�U�*)U	�����=�40-Kķ㧰��={���)-��~�t��})'iH�9�6�>��jvP���V�8��pD>*)9Y~�e������H;��.�s��6��+S������	Bj��Ƌ�ܤ1�ϒtj��:���ᡮ.���9MY�NzE7H`P:��5,5���U�u�3�@^&�DaY���hU�����j��7Yӄ.A-J|N���Z@3.E��5V���nq���A^�5^]�O�s�^L�Z�$�U����\u'm���b��X%O�)�r@���9�X�@l+��7�/
��_�fo�m
ٝ=��I��W��eYm�兎ll�q9U�{�)U`�����<�8B,�6��u��m7�j��>��+��(�x�'(�	��!���D6����dp�ϋ&��὚RY ���i��۰��]�<�^\�haƔ)��z0l��f���?C��C���Q&謹j5A�@��y/�u��j�0D���v��S�(���YZ[��֬�S���s��̼�M���E��2v�v�G����W��XR�Cx@	B��F�Q��< ;��xC0l	��Fɢ_��r9�)/����β�FG�T�����kNx;w���	�Ԡ�(����[w�3�i҆��|==��B<�^��Q�Ym8���ԵE��zm�
��g���S]��0}��^hs�'���wWv}^�d�d7MJ2ݵ���|���H��3�9�N�g�	�E��.]`���5�:�˾�f$Bq���Jc��
�d����I�v6�%���+�4�>�Gs�m�B����X�݌�<�z����g��8��Phc���������I\�_]��B8'%��pZI9Z8��h�e[��ep#���PN"���=��(a؀�ۛ�&���H#�	�0`R�j%h����Wn�`�[ر��"|�Ο�&l����'ϗ7�ׄ�큋��'�F8���������>��X�&�$�^��>F��i$e��V��߼5�|��2���X٨npr��%=�u ��N1MI~(�m±���вLi�c�\��T����Z�UT�v�g��^���`�s�YK^���9��${�g.��TKo�0��W�0 ��N{lP`Y�C�a���B��X�-�,(��GJI��E|�ŏ��SU0��&�eCp5����a��١��@���Y�BE1�ДEU�SD���F�~A{���K����@�?n/"mZ��jt�F�"��A�2i�g�:>G�u?���p�bY��i��S�T�����xV��w�l�k�!3��-"�w��U2�Q����`=,�8�X���X�,��طjYGkW(3"T�hWl�A/�
۔�y�� ����uÒD���"�j��=��q�3B�]�;~Aͤpa��d�_ܱ��Hl�X��b���bvG\���崢ڰ�LY������l1S��B�2_=	j�Y��a1��{|��T�&�i4-� �Leֳ0#n�����H�;�Q�uN8�Q�0�`�{d;������
�ѫ�p�-��MmNu���<�7�Mپ��6h�>3�v�Ž���]ڇ{��G'�Ch`��z�XD�y��Z�����"C�WP���)	���;_n���T)�9���yk�����+�_s�\N&�)�]�jF��$�h�7`�u�5��Ri++����C���N�-w��_�+���T�n�0��+(�8F�Ȳ��|i��P��%�P�J"Lq���������q[$��xvfvH�j
k�;-��$��(�G�DX��*�Vpߚ�t3�{)��ؠ�b6`
?�����Z�"��!�ǂ��f�t����֘N"H���c��R� A��S�2��߾��?>@.$�`z��$�+�
���ر(c�E2���K�us�:#ލD�[,��ڲ<�֢�c)I�1l����zń��B��1�Jap<��
3�aRk�Q7�k�+�!�zs�6x�g4x���;ۓ��P�y��/O�Iֈ_6�<�;�2
�b�N�5��T����xk���8C
�N��{�;��2��p���k��̄R�YͳL��TbG:c�F����0��љ�	�����:��>eB2[y%�B��׏����a\��aq�;lD���d>�;~��<�~�v��G���c�̀�_����
�#K����e���<Ӂ948��$'�RUs՝Wq�W��~l|�q��/^�Şs^	��P�"�L߈m����s���{�\��'�2���I��N����o��o���i9�?��WM��(��� V)'�h�ݗ�*�4�|
�6�IzW�߷���=�۽7(�=��3a�?T@
_��j�~��+�3������CY)�Tl�4
Y!�H�I|B����|�F����.p����(���Xh���lW��`"4�Y�g��:�y�&�C^z�H�묍��J�Ă�$���M�kJ��2�Ԗ�˸sY�H�V�]c�Z@]��h�u4��丕�'��Qw.�0(�T�r}��n��q�0A�,�
��eU�/
��z�[wM�����l_�s�J�w�����Csg�!r	y�9�4�X���2{�O3�g�|��&7��Jp�$��>������ ��#�n�@��!�>��L��|���_��w���_�LH	B�M��
�YSn����tC�?���1��J�����&m@sx$D��G;tF���7n�x�ܔӇ$^���&l�ҫ�
�8��v<�)h�Rk,�A��	!�-����3V�
́o�k/W�9�!�թ`U�$g���@��ĉsGd���u��a�х�3��	��&�<�\2�e^MQ���K���c���N�
}�p�'ƞ=�n܋-�˸�I��k�jd9c��3�jV����~Bj�8�9�x��(Ǐ�}inǹ*����)�}�d�`�z_Ҝ�c����Q�l�[P_0C��Ɖ�8'�v`)���_V��DM�a����Wfɴ���eb��1������֥��2Y��g8/�p��H�9�6�W{�3+�/�K]��N��>G�2у�t><����1����I
)�r�a�����H�'�1-=~��2�_:�\O�y����J;�z��{����݊/��G�_Sd9�
��V�o�H~���l"b����R��"嚨�ڇ������v�P�߬`�Hx���ffwg4��^n�X$�x���-|I&�ѩ�R��\����JJ�
-�hVȣ�h�X=�Vg&F�5G�Dž^�Q�a�����m$�1*���9���z����h��vr�izs!1�ן�Ë<��).�晊�����k`�|3)ѳ8rM�7�,��;�ص�<j���	sw���t�Q
�!�'
f��FŔ �3KH��H�u>ҳ���C��ېN+f+b��:�W��4��R(�/+&Q'��d���\�w�+c��uF��a�x��(�/�["�*]e(_+�[5����v�=�� ^>����(���K�Y"R�p��U�-���$��d�?���_.��lfх{��j����̼C�|���=B�9������]�)?9A��@8��&��K9B����K��w
��8slF��מ:�w<%�%�.�R�M�	��ns�曢A������x{�7T�L���W�Jӣ�=H^/ۣ��m8�.�%�	�Qd��y�{㯥�����l!���$�%$_|,�$6!M�:yf,~�9��%�'�7��Z�p?}�@m���ҊS�…;��,m�j��R�\�t�ݗ֭�/�u+��6
�@u���j_����䥲����:�<PK��̚d�������ǵq�%G�:/�v��k2Em��x0t�9��@�[Vt�f��V���p{�JG����vw�m�~�/�Ů$Lڨ��-���~��y��8��l���H͜I��n�t�Lj>x���y�5�4�H�x����}#���H}d����<�֕���>��<;��b��z�wE&u�?�:�J3���^��o�7��~��'s�9m�N��r�H�
;��SN���&��O2����\�
�6��~�4�7�3#EY���-h��A�c��̃�'}4��2%����mvX����ήk�un>�pg�A�7+��'0Th���ҁo;�Tк)���X�[�}O��0;ïpA�?f���P�,-) �$eS%��r��N�'��G�.o<�죈A�牤�ڞ�]�$�	�7�����4�Q�P'`v@�Α�Q<�˸�r��9��X��tR4#d�,�C�I\lN�Me���������i�Ez��e�L��x��	��`�j<P�;~��LAo�6���}Q;v�0��Sd��8��x�$6U�#������e{�GA�GS<�Dc�p<���=�?�B�x�	����2��[(sM�y�6;���}4�WG�Zb��~�<L�aF>q�eK�da�b�Wji��40;Nr�Fγ��rc��ɞ�2a(�Y���&։%'�i�N��+�̈́=B���hЏ84MTb�z�Q�Sr"T�{
*:��^˦��rU�:.�$Ām��FW�f����Tz�ӂ��icA�
��i��%tkU7�ҕ��\Ca%qw>�*~q����4�օ��d��Zڹ��&�o�����SS\5h�*�̺5)�+�zǿ�]RIv� \'Wɳ^�9waӒH��@$�o��(^Q=WucF�sI��?M��"�ؔ\��f�2��f|��p�Qn��F&���bSx�U�K�yUa��p縗oo3�rE��^�2�^vkC�fx^��5Gv8Ƹ{{Hb���L��Ɇ!<E�*A��8����cq�*T���M�s��gu�&33�U�n������)��e҆���6�m���a�lX���5�RfOB�Ә!������
��b�����s�(��ץ����j?����e��s�a�FF~]��ָk���d�ߊY{�����Vm����-�g�B��T%�̧�?��wB����E��S[�. 8��LQx�ī��h�������󇮭�)�o8t�Q'=Rm�mb�>'�W�z�6]3�i�M<~&���I�N�j�m�cs��2��$@�)��W�r�8=������u��gr�%XbB�
��_? �9Nw)��ac^/c�M�'��5��~�ަ)�+�_//?^��X�.�@�%p��}�ܳ�o�`|㔡הv�ojGl�ի��_����f���I=�-���bS���wd���Ye���.��|�,/�;2���7o0vy�Q�Q�*:zx�ʜS���G�E}�h�f(�32��ɜ�_}Yd3���D`k�|W5嚍�����qd�gA�r�AP�$���c7��Y��
�G1���3�����@$���l��q���J9zq_��֛��߬H��fUjT�_��;���7����b�"���r�h�((��G�$-��9��¸�T����l| 	v��&�����5���b�sH��-�p҂���k���,��r�3�K�*ն�s�|���3�>)�>Zʪ�Z'J�����8����3ir|g�+�M�FY.90��Q{��<Ҟ7"�L�OjJknQS�"!�p�����D|�)Z�tA_�L-�+N���b�9p� i�|'N�>��"�G��4�űZ�>�� ��ƪu¢i�i}�]�&Wڲ���VK���۪Vk�l��@]1�?���Q����&�|��TZP(CIy���
�J	�Q
#Q
fO8��"){���/�0��1XI�{�y�x�2ʐ��Y�VR�!�+`C�9�OL= ��.�#��a���T�z�4�N�IH��HBˤlc��h"�Ef���%g!CТ�dy���~�1BK�P-��מS�QZ\�c��w^��h%eu��د�'#4պk�$��ZzRT��	Ӹ�m��:�-���Qn~���Ź%�Xl�.��#��=9�BĒê�nvJ�g]��Uw��d�W"2c�$|k6��$���#�4�K�Z啰��1�_�X܌m'4Jw.�����!�X+T�<g�ԇN
C	�E��.AJ%��vti��+��]������y��D���#���CS:�?�����Gmh8[�y��CI27�u�㌣�u�
������S�h����Q�P�
F�H��ݑ�+Nxt���K�6��DJ53)\;{Fx�
���Q���)����ں�:!�,;��
Nk1�e�f]�����[N�5��_D�'}�:��ݽ�w�7&�>S:����z�P��#棙�|���{~��?OS�]�_�Y�&���Ύ����5�wu%�ͳ�1���G�{ob���d��  G� �<��&�^���`v�
�mUAv�0]w�2��M��.�`��곥T�3}9��GvR�,�,@�|ȥK>^��!Q�Y�J!�—�%�_�n�b7b�q���Q�S���9����$��s"���ja�'�_��ا(��y6Nn1�����W_�BQ=?  �'��"}�E���J>���͇���5S��v�<�B7�>=��vB�f�S�
PsxVg.z��&��!��y9j�p��J�|�z'}��m7�oڿ���G��i��l~���v�$��g�!@?�CA^D��$$��"�j�)P��D�US7�:WV�D�=�;6h�I�(s��_3k˻����kv�iU�z�ϱf ���\"=+��:w�w�V���K�ﲪJt���DQ�D���^h��kcj�df>�!~����q&��zA�W��kr)�>T������YS�G}�4O��� �E歚i�!��ĉ{Z�o��I&*�;/�ࢠa�mǣ%[Ɇ�aY��z��5�ܭ�Iū��wH�C�"N�3!�a��6��?r��e��o�K����L���ʂo�\�O��V��b֕�K�g�����,&�
q���`-�R���}�����R��t�#	�Q�E@�m��E��b�\���0z�"�a_�Ez��d���z��
~ݬR�B���	��f�Q��xڅm��!�G^�N���� =��1�8��9WJ�c���+�:7�u��	�2�#Ⱳe�v�%�}u�X�M��rA���+o��^��4��V�%�PC��J�i��nv�_�v��~�}1r�Wk�o�o��#/��'���ƥ5~1�8n��
��V˶#'\�|�w�ș?�p7c��㿏�m�drr�1B�A*��������$'k5=6Y�&�����w|.Մ�p�5m�%$?�F~~��}�҂/rAm�r��8����2�˕�q�a�
��M�{�W*�dZ�I�9��_�_Ei��=�'��S��d�|��ͻ`�|[Jp+�|�J��u����W��� ��,Ÿ�?�(��/%�
}u�悓Y�o8����+�o����{U��_�`'^O�߱�_�Y�sZ)�p=|
�v���ܝ
�OO	��m.w#^/�˥mϰ
�J�u��o��-�cޗ�5Xͤ�Hx��׷�0����߮v��l{��Z|��1���M>��������;,��8�a|���⾩�'Lp��F�>�M�S=�G�x5-�b2����n�v삉�(X���-�|$��cv
��=��[���L�"��m�3�l�y�#�/��C��+������w7(��U���I��vOlb���00������Ԃ@�x�|�r�aUpd|+���:���H	���m�]t�Ŏ.H�iv��Pq�U�YՒ�B�ﰭ��:�/.�C�R�;��F�EC����Yt�#�-o��$�jAS,b�]%c�$�,��l��g���@��P�w%OIᔺ�%��:��m�͓e��BJ9��}ʳL�����\�'Z�%���e�d�9�;򲸣M�_�&
|�)\!24]���j:4���Z���
'�x�r]eB6��Dܖj��\�K�*���z^'24Uț��L�O㟔Q�LD
�Z� �CX7��n"2&�^%%��MR�%�~<d邊8�Dѫ�\I���K$�a�ϫF�DH�z\��ѓ}���l�A��I���ln��&�.*�@b.{S�)��}�7Z��,���
�\�&.�4�o�OVu�	^�b{�["�f��Ym.B7V��4�R\�J�K����W��'�WGv�UE;qb�6Se��.#�lc�	)Tb?{�k}g�;a?&"!�^��wUU��&]я6�ql3��@�29
$��B%tQJD��ƥ�Ge�'s��
�%�%dD�q-Br�$DTʷ�}ܞ�K�h.kǁ&��	��/��^5Ov '�HK^��&��PDy��6w�8d�;Ǡ�����[�9Y
^�W�"�Ш!�q�����'���0J	��8�W ���H���/(��p�
�]�W��D5sN̸Af))H��B�/��dPx����0Y^��,(�d����H?�v�y��Q�Sk(v1��6*E�c��(�8w
�-�Z�v�[�o橵ܵ�hC�u��Q�/+��c�� ���H��!&(րde[�^A3	�@D�u1!���s0���[_yr'��ص9����y3}Y�bRg���5��+��L%������`q�!�cF+�_�%�
n;?��'��;���e�
7��������߱��k��d�t�nH�8d�:b�>�M��ڧ�呸�i�DQ�2��||�m�:�����#��1>=m�uVK��8\gNѻ,�y�|'w�`=4��#+:QJv���)(�Ew�BX��C�;����H5޹���n��9C���ya?�4�R���S9�wvu���y����h�5A)8����͑Wʗf��w�.��xv�B�������e�+d��gȔ���ԡ8�@+��ruS�J���䈥86�9,p=���������d:�_#.d;W,���n
Pg�~��׾��싁��h�7O�h�L��L�j��\�X,�<�5Ȓ6�Q���Օ�V��Cq����%1>���D_L s:~�<>��#q��W�LG6�(�����i��j9#�ѓ�̩�?m��
��֭�mF�+� ��9����2%W�ډ�����e���y���o��u���f�#�U���w��8���d�^�`c�f�0�4u���-�p�FI�`�����]v�:#չf׫}�JV�����-��i�1�+{tC��|���&;i?�;�jEU��.��a��)��,��`��O@R�cv.�S�	c@딝Z�X\���$���ŵ�t|o�!���&�T���� G�0�b����W1t���J|�(�&%Y�(��
%[���C0H��.{�<0'�u⎜<�M��9�l,�z�$��v��7Œ?�+n�����F�1�Y�a�kkhh�Fkg��i�]w�1]`ִ5�^���q��L6��V���g[�z"� ��������@��ݨe{�%��3��+H{)�d;ѭ����M"EU.�ҍQ�-:2��b�<�9ޭ �[���W��Nמ-Fr,�;9���"��uP�on�md���-��\����X�q_��R`ɾ�Dy"Q2Y��&�U�/;��y��5.�4�k�~�eFD{n��V�duն��FǏ3�Go?�lԷ�fϷ-�E7����e���*�P卹�<YM�x�5��=z[}���r��Mؑ�
��,⩅�*���>�p���B�.}�Q�&������qW���B�,n�.P'd7�L��z�X�x���xjߤ��1n�#$=U�M��ٮ�e��M�F�f}ܤz��d��R�n� <o��^�n����!4kɁ���k;d�������0dt�9�1?L��Cy`JYt�m�ò�ѝ��nt�.p�)�/�#�$L��c̫@�P8���@c�#C,s:rA
�E0��P5W�Hq�.��6Q����
�c�p�$�O�(^�PtȾ�a�Q��K�����	�����l��d��Ф��׆�Ӂ�������`oztI�x��,�C5JOwzW��'sk��M� b�٣�^��f�Yְ���.Һڴ����KW���Z=��.��0]Fb��IJ����M�L�I�L���K|�VC �mRAr�0<'_ɗrA1��r��l7M��.�j�5�0�@��EpYS-���f�e~^�)���u'M�g\�T��	4���C�gd�P2ʌ�T��*�a�&K�g���ܤ����.�0���0?�HL��za�h�,[��{�
j�V���(>�Z��tR�A�hZ�w���tJ1���%m�
�|ذ)߇��4���x�ݝ��@�Q	�W��?��=P�t��'�f"��{�f���Y���itk�J�1LtzD�q��h�l� ������=�U���U!�wGD11�[�b\UB���h[�5%�ҽ��n:����57���`��<�&�me����Z�b�?���6I�:�ɤq%�]�Av�0D��)�A���0�C����;�v�v7�a��4;%��Һ��L���O�ܪ��>-�6�����D��r�.�m��O�l�oy%��r[%}��1�Y��bsSY���������h ͪ��c�C2�爱�)K]������(� �V%n�:C���<t�e�'+�RF������Z5�)�v$U��U�EY��t�ç��; ���'����
��K�=x�l0�y��eT˒� <'�����"���,���#5`�&����R�Y�L�В�TO�X���{�(��˺�gJ�Ȓ˞�Ͳr첢0�w��{�7��UKV���4Iȭ�%O/J$�V��PS
A9�)�� ��ް)w�P��E�#
��{��;+L#����ԫ����)����
z��_���zL��Q��8w�q����T�S0�B m1g%N���8P����J���C+��+ʥJ%�4��2+�T��?��/e����T����Ao���	����)^�S-C�߹7UA��j���+�jq�'a���p&�K�6��?N�.�%
��[�����;�	cM�¨�3o�u�7�&���	�;
}]"e�^�&qQQ�o�L�}�K?8u�7w�ѳ�G��2�<�>��vtV^�N6a�wO�.�Z�^S�m��[
'�KN�,ѳՉ)��<�IM���
�W����Ss
,�	�F�q�^o�q<�*6i��[.�n�L��h#�j�"�/���+-�T��Z��AL���H�1b�?$
x�YgG�k��)s%��%�4ן��1^ĸn���/1���eWKb�6\���mlK��.�P-�U"JT율���
@Zy���0����j}g��_f�ۙ~������W���[���ޞ}7�0��n�v5O�>�Ս#;G�����3^N����\�y�֎��x�ф�!�>t�!�3-������[�o����DV�v��{Ct�/f瑜�Mq��v�?S�-�۾5�ԇ�y�MI�3�q�:�����n�bo�畃x�P�2��M�ٟ�5[��q~��^*r�!u76q���-���W�䩑�y�G�0�}��,o�c�ÖM	s�<�cLZ��Q�����4�˼��q-0�������JUή�� �������NR�7G��Q�/)
��o�|��9�����G����S�T��V��kf�O�i����'�0���Pq3͹����?�P0����´��^9U{��ֱ�7'�z�P�d���G��HB'DA
�rN=n8p�`H����˨���:z)������3u�7ly��&�٬\;՛Q�X�t���{d�Gͨ���I���&]�!�6=h�-1P�$Q�p�.�S�g�O�͠@CQ���Ÿj3�ch��&?����3�`t�
>�YB�ʰq
�
��8"�}P!�9R�Ѭʌ����C�,�c]�p��il�2�0�ܨ��D�i��y_T�ѿ:�6�v��a��9��#W�z���fx����fq��$xM=�I5l�Иh]�0@��۫�Cf�a��<_.��㶂����I���q�&Yψ;g�ܤ�$l�]�,����Z_|f\M�\�r_�}T�٤{H�?԰S�Tz���%��P`r�_<�&�9�QK>1�f�R�]G���f6���TRe����T�4�	,Kݘ��3�\����Y�fi#�U\��*:�
EǓy�Н9	z=��]8��QI��
�f�I#����OU�����Χ���%�&<�S��U�U�f�5H���\�%3}�Ϊ�`jG%�W6��U�z����BRC/o��ջ���֗T�F3ɅA��L�X��b_��{q�9!����@��آs,��"6�,���Q�QP7õ;��B�1|�[�O1Bjy�o�G���
���F�B�{*/O#�\�G�@���升p�Hh�i���rS�	�d\�aGw1��"�ĂK�Ma���F�>3P� ���X�s�V|����B=��0	�!�D�+>c��C���f������_���h������1
w�D�g~�Rh���oi���QDŦD!e@w*<Ë��!^�y!?ͨRx�����\(����p@P��,r�Te��k��dBB	d���T@��btj��rʯ��]&�+%f�Sp:����B��Qw��,W%��Œ �tU�.��fEy<򝦫�
��'�?ye��
�uX˖�(]w}E�f1]�E��m�y�����J<LD�,2�z\]	?�y��
���C�)�_
NǤ�C����R�_�N�	�/�p�K����Vmk�]��D�ɢy�ɳ�u�,���k,pጞ^S&�h�����6�Q�ox+~��z����J�s�`M��1��^_�ѩ�Z�`�����v���L�ZOq]����4ʓk`�MZ�U�^���R����(�w-T]U<�(�X	'���JĢ}�T
�F���kֆ"��A��fù��'��F*�\�VwonV��쵑��G�x=M�
�wH�Qĵ�QXr�Vk�j:l��%l����'���FT�5Q�E�.Z�~iKϼ&.�t܃WJ<��ᑞ�X׾�w2�����i��%�l�^q���Eޘ��h?CM��ְ�I�("]Z
��G�=��f?�m��)ּt|�`��f&<�dK	����ϖ�qh]�W�Cxl�g��ն�~��|u�hd @��j�ا��~����da#�a5���L��V�?ɪ+U=a$���Љ!��z��x{`��㔿�;�Ԃ�<��*��O����I9^�hV�DB�B�bv��o�t����I�����p�wP���9�D�����|�»ζ��#�����(-��7�e�Q�8�D�.6��/Ϭ�Jxy.Gh5i$�&���ԛ���H�
�P�?r�f�����H�Oe<���Z����P
����SHl���jӳ�}X��Xs����;z�J<g��g����Lj5�-._�����b�{/�>�i��&��t���N'u���K�8���2�N�Is!y?-�i�ΐ�=Y�	K�H��N�-�I����2�.�+�)��
[������U{qRm+CA���g��Xu���
���&�֮�9K8=�D�q�@<���B�.D돢��N�ω�?��3�IHqg���J�PJ�Iqh
V�2�UCG��N����(NqlQS�uK���C�h�oun��s�,
U��:K
����^��N�!�w�K�,���HoLC&��Pހ�ٍ+�g���i�텔��}l>��kN�����E���@3cS��o�6DrO��o�s\O�k�Z�s�k�
��|m�PbPg�z���vb:S����0Vs���ݹ�u���!�fH�7=T���bն��qΆ?h�������c֩�N4ጿ��9M�����i)q����&�^�{���G����/�Z�s���V���h3�f��K���֋ţrB:�wm��k4�e<Gy�h�t�y���-��-�1
~Ӏ�ྮ�o�'��11�Gf-��l^��@��.<Gп]�\��O����O-F�1
I��E���ܤE�Z�4A��|�v��f��Y��Dܐ@�}��0��T��P�*�M�'U)�{�Ja֬ �w	�Z�{7+�=�v�d�#Sq��Η��`	�Qa�@Pda8R�A�EB,���F�^��8(O1C�yL Ѵ�&2(x�1d䠤�n�J�tv�έ���箤ac����&C��~�\ab��tD�ڎ��Ѷ�m��0MX�ޚr_�Ǔcy���5����$�9P�1c�z=����7|�-;�B{���
�tp�Mϕ��x�C��]2�7.C��vv	/�NKm)葢}w�5�5_*
�4�SÆ����+v��&Jn}1l��;S׎�#��dl��C��?J
|����	#.�N��j묣3�D�w�2�ư�7eƅ�<A���K�A��)W��w[s_]1b��b�00L��`l,��::
B[�+�h93#�m���IƔ�W�;�9��w������:�9�V��,�M����P���De�Dž����	���p
�^�K'�1D�"
���1����A<1K��F\g��FNuR(����L��ѰR?���j�]׭����e+wFC�LU�d�����Y��lSȯ|�FFף���F�PF��	0���d� ��<��	d�֊`��/b�(�?�*���z�H#e�e������Zd�?	Lx�v�w��|�\�pW?Ӑd� ��"6�cMt,p�#�d���CB}~�.b��鱊K~[�K�����������E�bC|��>�)C�b�k��	��CTXT�f=�3�W��T݆hAZ��0�YĘ����hj�d5�@��Mp�ώ�e�j�?]rR4�;lp��Qte�eYr��7�k$��!L�z�ߩ#�CRXR�沑:���~x�dЧ���]z�k�.�(ɻ�_�A^������j|�u��O�-�}
R�n�
�0X5$�kS0S>Y�21n4�6��L�I&�E;�$m:����h�������im�3g0��h����|�<9u\�$b�UG,������ge�:H�#
�
�!'?�$�Am�B�������uܫJ��P��M�2/�
��UiU�>W}�6�y�C���C�/�ʱ�����,�1yy�eT�v�0<ge/��K/"��`��K�~��i��͒,y4����R����{&g��X��#���IB݁~�wd��+H�x!����\pfI����I����m/~���o��^ݣxc2l�w�#��Aّ���xg�h<����i%���=Ës5>�aYlQ\ĕ&#y���B�q��zS���&N�0(d%���TD����B9�8nyg��F{�y_h�O�v���Qc�o��ҏN���[`<�^�B��#�Q��[�io�1��J)P{lH`��SU�f�[v�9�H�K�y��$��J�>�sѪ����m9�H�P�	Ē�cAkʂ9z��]�8�ަ��s�c�j7�o�l�u��LO��i�w>��p/���BN��LU�٤i�1���e��.C.�;�sr���|(�^I�`��#����@[3�0���C'�6�H��'W4S�0��\���\ޚZ5��Jc���pRA�B��ku9�K�<1��'���=[�w<}���Юu�@FR�
/��@�g�PꠈZC(:8^0�G~�i0P���kϼ^��e���������}�W��d��J0�>�Z��a�4����v�Ғټ����
�g����[��E�����v�m����T��SA����%���E͎ᎌu%�'���J旊��bu"̒�apC/�U��В[�.���MRIr�0;�_�i�.�E+�E��}	J��$�@�Vg-/�V�}gO6����=�[W^��Rr���4��e���$��Krs�$��f�8�=��[����]�d�P�4h��*�^
�Œ���j�ɔ��r�@Gm �������|���C;yҾ�V�"���N,A|+T>�y���Eq.�����F�S���s
�&�Y"ULPS�&��Ք��/`^c's[�
��?�P
��|�Yu�K�O�N4	՘jhj�3�e<���c�_ţ9^@zLŪ;װG�砏�����)���RI��0<{�1�T�Ƴf��(qh�����A�TlW�����A�U�����%ml��\����ThP�K|T�`L���4��M�j��ia��Q�q�)��-5�6{
Sf�R"�_��yZi����?H�څFJ�#o
��\A}��)���餳�\6wu�����Xs_���
�gw��m�k����x�T��G'g���� Zt0t�����)��>r� `����0+��+��r���dkj(��w�[�mv/�О�fs[ۂ<-䫃�f��҉���dQ'`G�ߦ�"7�ދ�g��`���9��A�KE̳�磵P���w��u�9�7|��}]m�ki����r7�K8���v��oh��M�tG�8���j�Q�!J���&��t!�,��*��ٚ�3�?1:KS(�
����Z0x-��E
�
��'":��=���[�Z�=���� E�3��
U�zD�ASǿ�I���{��iڂ�����x���ld��<0���ԢFD�[/L����9I�Zq#ggI�-��,��nWA�Fۛ0�`d���c�d,TQ����́©[*�U ��( �/q��?����H������d@2p�n��
�G�0`"����Bj�"���T���^$H�tjݘ�S�k�g�p�t�d�,CY@Y��A&BEv�k��uO=���~��j0f�s=;V�(կ�&iS��fm��|�fj��6Ou�D�BW���m�o�����?�ُ�̳֓v�\���n��j�>�?��`$��}��r� ����љ��4���odC1�'���/�ظ��M���I(M���y&O>:�Hc�>��<~jZz�#�����<B
噒'hO4�*�r�&3Z֟�hӿ�vWlO��^g�
��T���aN�G�X�'h�`��>��)���a��l'��e��4�Ż톑zr�
��T�w]���.�ij�c 5Ay�
�pMΞs�Tq��{BQ+ũ�̂ݳY�T�Wò��<�0j�V.p��{��B��:э.��\�ʧȌZI��2l��(]���8N��~Uv|D�4%	�PvS�3oқ����=�51sS:.�`�n�9��I��I�r��u9��!����0.�79
�7�+ܧ�;n8nO�\T{�	���r<X�s�5U-�ݙ�h��J@����{�-���􅸜}�ܘ���Il��9y�[#�e9T�gt��/N#���"�ȉ^�uw�׆��Xp|��#_�~�k�UI.����ͼ���C8�ߤ4�8%�s�w�;*�蕿c�(@���up��O���JUJƌ횠�(	>�k^zXzY�u�su����5;����Vr�=HAU��<T�н{�R�;�J;������Q���u�/B�9>��]xV8�p�,��W^�i����0䕭'6�ޖ���P��eZ9w�A�$��`\�b�6�r�W����P𚋚��}�����7���o��4-Cs�^�@���#�T���1u[��zx�̆�ԥ氂8a���YK�p�H�P�.�J�h(QI?�,_��������s���n��e�U��÷���t���+�i�`��5>����R�eV�v�8<���\:N;˿�BQ��7�&)��_?@���7�����
~
�+1����.�����k�1����[�5�n!��'�q|�/l�.e�k%��k�Qη��[	�.���o�)��/|\��(V��7J�\����we�	>i����|���j]�F%�Y,a�����P�7�W�ו���_�?���q��wޞÈ|��%GN��ANq�o`�d5��%�%TWr?[�@�ղ����v/✣��������y�4���)�^�,��EJy���n�)��g7%���z�^�k.J��䶹�?J�rm��jn� ]$W}?��:-]l�"�*>}�d$�Jq��3=V�?X$�@�S �</���u�7q��˖���:R�T��y.H����M��qЖL��*I�\ƫ���\���sM�N�/��c`���τ42�!cg{����R�Wz--�����}녷��\�`�e����U��uƸ1���X�gI\j;	��)�7�h�y��;��/O��7��&��ej�CB�M�(Z�L�$6n"m�@ݺ��<�2��`ybfJ���µ�ʒzl;z?�45��-Ĩ����a��D*N����2Ax��໤��A��'���zB^B�*��F�P��3�]�y����b!��j�x�k���r���ucPQ��*�S���2^<���S�<�H
tf���=G�
�󂢴�D�����]Q�W�3D,��P���1k�C��C�(G��h�PT����^��s�@y\.��d�M��,o���&�n�T�~2�&��Ro��h^��fYr��Q�i��_,�\�B$ԗ��PބV��X�߅u���aT�u��e���5���YO�ތS#�FW9�Oq`�APU�,ne05��F�ִg��'��h"	2����nb�e^��ڢ��H&�����6,)�hkUYֻ��2��5J�_<x0.y-��]	�F'u��BIq�7�����1Fw�
���L;oy�"ݤH,uZ�I�$ܠF��5-vl�B�߰����A��$ ��ɣN�9c�r���.�%�ْ .�a%�MnK���pk��QV뤁�_�,�WDB���8��E��
̈́�R��F�6��n6=h���k�(��-�Tq6Q�™xX箮׫M�'
W0l���{�^4�M�|�oD���>x]�`�!?B2��<i1�$�Qt�~�����3w�q7w�q������y��A�Z�
z����"2W�A-yȦ#�tĐ��Cʥ}c�{͐�$F��d�<ew0�ܦ�#�^xZA�p�h��*�J����Ko]O®&��KyE ��uO��{����b~��-����_G[6���{gǫq�x�XGя�%�g��s
/2��A>w��ׯ���DWg<l�S�F�O-�h�җ˧v���~]����#��z�r��Q�����g��co�����w{7	j�>8�tG�X�Gc�}g;;��+�^
��N�X븳��N��+ E�;
��� �\���]��{Y���q�6t8i{{��w������NC�z�?Y����.��S����*���ԡ��*�_4Fc���t[�D�?`�O�D~�]RI�� ;�|e*?��ӡ�@�@fy�H��]s	�llYd���S�9�$���/�����Rjm��(A��]2�N�"^R]�,I��c�H��kuZ$d}�#$��׈Ylz��hu�z��D/USOP�Du�S�'=��ɧ�`���⎠�H$��;������a+17j7FE�ݩ���NUf��X�$�Ċmx�0�w����L��d�\v����ޤmZV9K�M^.��� �D�jeI���S�����u;K��7�&��+Ir�BmD$����/���Pd���\�"k4q\�L5��^�S:M���L<�dg9?(��z��.�\�Z�����n)l�� ��w�'�UԲG2��������D�mT�n�0<w����4I�v�%Jf���a��r(;E���E�C�'�.-D:����A�Fy�ɽlGN���b8KN���N�տ��Ri�-���E�'��m��'46*�9U.JӨ�™|n�#-��F��%J�Iz�쭅T)�,x�����[�ݿ�)��1�ʌ�8'M�(�4ҵQE��*���Jt/
,..TΠf�E�BI���嵛8��\ƻ[.�/p�}=��%vG%Ι��bR�=�4r
�Q���<7�UՆ���"\Դz8�~g�,�Ӏ���%YPI�.�I�Y����0xj�l,-
=͕<�2\%{���[�PyqҾFK��ŋƊ#.(�ы�"K�[��&&�����B�,�|l��=m-�?
�DQKP���=��>��25g��Q�*P� ��N��=�ӽ�†��d}+�WZ��,��.Z�l�7WY����uEd��(�7�;��(ۮMpK��+�t�N`%Dw�����m��t�M»�c�o��f��?`�uy���O�ֹ���Z��^��?��0��x�ƼXdp��t*�jX[	-ق��~���+��}�ۚ��I�M�I�,�L�I�̭�)M���m�ˎ�0�ם���eŢ���	�oHFN)O_��u�w����a���gc�O�7vT(lD!�����u�k�q��!F��l`3���r��s��y>���]��f
�!�Q�C�a�RC�[�[�$O'6��L$j�H���5X�v7q��
7Z�r�)�ĸ��Ы	���l"o����5_���d(�č�=S"/J�D=m�>�l�9�&���1�0I�$lP�W�c�-MD�7�#�Q�E☥�V��Y��=�K-�	�1����Bx�Y�#�K����d
�9 \{�`��px�u9z,�h��Bkf��B+l��*m���w��!Y�ԔD|���%�lbʇ`މ�ݫ���o
�Q�;փ�0�Ξ�A�oCR�6!�.�1u��������$�����P�vDa>ך����]8
F�Ч֦�_+)z9�����^�؅
�ŷiL�Ź
�C-�r�F٦��G�I>^����MPA�� <o��R_�ŀ�D%&2��y�zL��y�̘u(��~3��`}��s�&&162��(��Y�<��?�XG�4ˑ�J�-�tcP��Xz3�^`�'�y9_�w���Ӊ���@S.�t�6d�U��s�2�{F�ue�{�><ԣd��
d5���!7t�j�m�B��
@]}j�T�	\���+�������r�����3�NR|�ɾp"G���q��3¬g����<�[m��+x���F�~��IJ,K��LI�I�L,�I*H-*�R��� ��I,�2򡌔T
W�s��N�E��� C��7�JT�P�J���S6��gL�-�R[�
���<���l<�2��f�ů��Ut��Hz����x�,l�P`�,'i���C
�
�Ø�㮨��_��=��v1y�y�/2�Xl���;s��_oZ'>m���]RKr� ]�W镲�
�Pb��'��H2����y�|[b{�#@��O��+d)��X�oK��N.#���.�j2Tn�0{����L!��������v�r@϶�x�y~�X���(۞��$		�e�Z`�C��A�qxǃ@�a&F8z*U�EA��Sp�@U$A��yl%P��%�����¦���GŌo<g<g�J�g�4s��v��6C�M�Ee��C�]�SQl�$��.��gM�s���r@��뇞8&ޡ��kR��r�Őg"j�O��!Z�iU��&�ԛ�Ð��|����ْ�.�o��c���6P���EO1��0����^ /�"'B/�6$;�����LJ$E�lT�=�F<T��5�*��Ww,n)��ګ+t��n�ÙT����}�����A��ǴsY�hw���N�4˾DҶX�-����ա�;)U����D��%N4�4y93ZL��&;���݃� b�B'%�Ӥ!�_j�ű��a8��+�ۿ��o;�\n�>e>U�"8^�e�����ꌢ�MPAR�0;�W����_zqS¤�t��e�.�eY��9r�J��v��d�T�T��g�h'�c�ֹ�Q�͸�KT����w�N�Wetn�R`��ӛ�L������h��߻�F����W,����h�#�t��v��^%Y������?���6�P1Y
ЕܢT��L����/ղ~�ܾ��l��on<@ }�W��_�I�x��I�*�{�������{6�����q2����I*��M��L�I�,��欰��eP��P;���ܼj�+&F�@�_���<����[�-�P�n�l�@�f�+��4Û
J
�Bv�h��F��I�ҝ��vDO�N�cԴ�"�Y4W*��w�ۋ�:��_��@"A�.j����|�۬����~�0fa��)G��s��;Z��o�6�o��\�9+h9r�����v
Yĝ�@�������I#[��m�Kz�0���Uz%6rP��!>�!mO_���nء���bpHf�s"� �2��'kJF.jGGN�\���n�T�~���RE�Ǡ��1
�*�	�'\�4��{b�΢5	�f�r��D7�>�M�t�	�T�L�����T�d���B�o�Z�A��w�i��<��j�]@�7A-���������A_��!�25�M��J77Id��s
k�Ȇ����#<�U��eY������������E�.�
"�3I���Y?��/ճ����Iz�c������`gÃ��X�`g��(&��$�+&�$#13'1/�$c�<3��I*)-�άL�I�,)�sS+!<L��u��Z˲�
];_�UYd�M�v�/�aK��EjHJ�=_�Ⱦ~���&(J|8��Wo\�|���G�M�ч���
c����O���y��7'�?�&&į{~a�؞F��q���uPI��,&j�2r3C�NG��6���]�`���fXՆ���B/8��w�M>��/����ﴅD#iă=���o*$ë�GZ4r���������fW�†ӛ��q�8��J�׌��s���E]����\�rz��T�O+���:x��`�K9E-�rc���4��{��6MZ�=�n�ݻ��߃�t@y>^�R:ៜ�3����[�+���)���x����>��uy\�t�&�i\�m�é���-�'=������թ�fS��zD��[�tӉv�I���y�:7�{/�}l���D>����;����#�s��C7�
�H�.�fĘ�Cڲ�(k{^��)>`�:0vr��1BY��Oc-w7=�7�ؚ0�x�xIʄb�B��
�����a6|O: z�-��{(]���@s��F��˩a�A]�½��a�މ��&H^<թ@d�1�"3��S���)j`�%���S7�z!dׁ�L}w��_�4u�<�/|(l�vN�/4�0─����\�vn�2I+�u�w�|�3�|v6��ˇ���*P	d�����O��[��n��g<�U+��$�N��n��7#��&�p�یO����^�&LF[^�<�D��< ���k{���.���o��S�jX��S�+�ޕv2�p��zt��vZd��-�'�w�}�L$��/љ�P�:�,d�V(�i�
:X����)�ǒف{����`�Q��V��n��N_�T����$,~�U[�XYeRBd��7w<�ب�~=��|;�5�wd�wk�����V�FM<�'��=
:��`����g��#�c���p���s~:�Ϟ��X�s�	�ح����',��h`f���2��E`o��T7k�[���(Z���$AS1�������q�*���"�us�D#8�>�pk��/��)����鿰j>H�▴N��e�gٟڞ�$#B;XI�la4���B�/�+S��Y��_�&��S.�����&�h[YC��Oj�`J|�va�	��q����%$����p��#[.���;�c'� ��3']I�H�ѕb&���"��_��4`�k�����1����83���Z���n�X��O3�Qj�j7��%���mz���y��p1�M��)��I��a�G�dP�yQ�h�
�O��I��vX}�q�αQ���%�0��x@�Mj�N��/�'��cJ�#���mc��M
�K�VϢ�V��Q(Ԅ��$��d;'j�Ν�s�hP$�3[,�h�_��^8�&�7�V�l1�Z(mR����˒�-؏|^�&"�0B ~�c�p[�AA[gؒ2�������h�EٷN�X��h�8c�!�`2���Lh�$�aaR��ǮZ��
����N�]��`8�yj��9?� ���`WdsG\`Vh'���·ۯ9��7t8�� �<7���l��jC-R�dz�#@c��@2ı���⒢�	�#b!�4�cճ���(TIǰ��W^�U�Ā��BK��W6�m�։Jr<��ΝfV��`��.�A������
l'�qa�MQz\(�>���_�"��&V{�bPѬܳ�׫d�*�	}�Iv��dJ�%F�t���gL�j˞��R>q�Mhu*��"zCZb�t��i*������=���g&�䭰e�6_o{�S�S<rG��f�S3s�a�&'P+��Z�
vζ�4&���82��H�pсŸ�m���O�np›���R�!�ʐy��d%��.8�f�
�G@�L����ެ=i�?0+q��Ƕ(��j�X�Kʈ+�/x}�j���A�ƌ� �;�01g_�G
W�C-'@�8#�"��x���-
Β�`B\��$J��Dn�n/xA���#�}�dnܱ|Hp@���8�ݧ8���b�@�et
���l,=��Ě.1��Vcƈx��9.��7���	�nҸ)�~����PH>�8%�hF�}��Ʃ�r��Pː��X��YsG�G�� u�@����t�	]q��U8fDp 覤�6(�������i0�~%�=�	U;ID��i�r7B_��$Q�b��~�
Ȋw_0�H�$�6H��^&sd�Լ��"���|xA�ddك,�c'���*������49�v���~���`���;������=~>F$�� �e>�1P��
@>�T���0�����8�@)0xN%Y�c
�<?>��j�&�V�4�z����  ��Z�3V�����ߋ��ׁ�;�5�W2t@I-�u�@�=J+\�����,"R�)	GՌ`�ౝ%b���I
�N�{sP��'�w4��G*�g���'@.�DVl��S#ck���K�����t̵90��Jy
�Ԥ�,��3�X��V)�4�qjdQ�"m�Y_:z(�
�Q��Ql/���8pڀj�����7�/��%"�_����U�DY���%�W�����{�L`�
�ޫ�
�����*@�Ҧ���Ff�2H�D�o�5:���pC��;II0˫ȫ�F�#T*����Z�����\�X��H's�'��F��´o��˼ϻ(N���W�^�Dkf�W�PNauv���`�ב�㖴����+�i-D%<�i�a)���&k=KuF�%�%�=��9W�j؋(�.��B����&c��y��)a)�z�c�.��!c�p
�t\G��k���.駣�#��lD����ȧpO��I	`Np�IXL��nK�=�	���+�	Q�J��I�*���*9�˟��Sx�f��xl&a�b�b�b�3i��BY�X,����җD��)�9��Bx�۰��(�"�X:J���
�0�V�7	�i!9�� �����
�Mx
��JYv�sM�6��%7����<v����������Zd�\2�K���QI���›B�R��-)G�p��uJ�
��u�W�:��#1�k͟��b��/6a�M���~�CJ�/�E�R΍!�����>����p�P�H�q�`���B��ew�p��{H5�a�ƁK�J�
�B:q�����R�^�Q2�0�����kaW!�­�d>p���-=��	 \�{G�{襖�)�}˵:��h�3��B�"��
b���P"��P����Zy����d]��17O�f�uH���v���to��a�5HW(Ϋv�M���M�'��y�/-t���]�5�$z��?��p^J!喓���V�*#�ze.V-��+���	R}I=S�f�J��.�He�6��b�uf͎4o���\�=A�O�φ=;
����:ײ*H5sj�cTP�h3-VV�?�ѹP�ܣ�W+t7,m%>l�9\����Q�1��pc�Ǝ!�"�����u��2uhs<+�g76D�ϛ
���y�����nnkY�B�=76��Ҧ�j[*�[���Ԛ��lNJ(�0`G��L��:B3����zŶ
�f�$X_ɗr�ʕ�
-y^.Qc��7�����1�\���S�#"��ei��aUNؕ��/��%�k��ƒ.�X�,̈B�9y��j�1s�P�0_K|��wp
%�M��ѕ���O5��1���\����\#|kҸo�-��{|�s�tU�ܽ7w⅖$�T�I�B�vYw��xg`I���tK_���W�?[��@!��w�x���^���|u�b�}!p�&��P�$M\_js
H�&ոӓyox��E*��掂�HA�6�@;�c1٦�^!oѦ�L���#��42�r�]?j�G
�4�Ro�2��4�r��o�̮D�C��(,,��k�:�ޤ�=z�B�0����y��Y�E���.��X�;0.���'��Z=b�(���P{�
۔?�	w<ߍy��˧��*
���ET��m������زG��_�c���R�n�CTV"�X��3o�u�!V�j����.�?Z�Y]���U�uֿjB��ͤ2WY�Yg��w~�?���g-�mO1� ��Wd�/b���5�}m��]@��,�'��}���|5=q��߈��B�� �7�B"삐��/�������\(;DAp,��[���F���j˧�Cj�Of���$�K�z�'�	)�J{�ͻ�k�T8*�Z�,�8ݺ���M�d@�mPA�� <�|e��%`DJ*)}�&��[s���t2�\M�v*?i�OI�Wya!oa2���l
�����1���Qa+0B�����0�>��?}S�B���[�`{�;�N�{��B����c
���5�L��y�p���KDC�R�8��:E<J�=�����N�ޭ
N)�vJ��SNRmÁ��|���DR��R���ͤ�go%ХHWڮ88�G��>����&c��XYo�8~��`�9Z�j�C�
�I��
���>�H[LhR i;���J��3���i��H��or���B�2~Pl���UD�i���g�dn"�t�p�!��T-(i��kM�� 1������P��u*T	J�a�����S�YH,36(��)M�\�S�����Єq�n���5xu����_�Pdf��?D�z�(q,�C�
oX��bb�qF
Fa���f�����)����8>�aD��=��L܁�|�%�uD��P��d��94�t��ɺj�1���:�sntF2=	¨s�G���q5:�Zmǡ����V��c�û��+�Pr������w����������IE��ԋ�*g$��}|�z_>$Y�2Ꮵ1r���}n4E�c1&��i�ާ�)����M���o�93t��.��Uu8����0)vl؂�0�'�9�?���n,���1�x2��c.ûT὿d�D:�vS�6j.��!T�].؟����|�	
��)o!]M��)�,�L۩e��u�Cj�
�eω��{`H<�<�V'O>�&���	���ne�dL�aT'���
��QR�v�n�3�[�a�&T��S���ۘ�n�Ӊ�~�|J8�p�X���w��
��s��O�>=�h��Y�̹���>r����mQr���-D��@�@0��k����
V�A֐<��ݔ֠���u�4K��
�[�q�Ȗ�d��JV�,#mr���z+�A2$ω%�[��|N��k�?	��ol�X���0���t�k�S�����f1�s�P�`�`m2X�2!��T@�M�;�n��y[,���CoQ�8�u�����ͩ������K����T��<Ь)�oIeQ��@�yy��8�?�B��[G�v�Nk!U����Ctg=�T��k۲}��49&;a��7�r��[p]���~">'��\��(�W�Β��$�2�1xY*D0g���m�p杴#҆�:��|T}�V[�S��6�
��J'%��q��43.qu�{�#�ymM�2�6�,����t�..�,���oڜ��0�H��-1�`~� 6�nF��E,�z`��
	�g����A]�S�t�O��%�{��?�fԖAt�f�摠Ktt�Cb1~E�ǐ�'!�Y�,��K��Z�ױ
ӳ��0O���mZiqk��\��/���x�Ί[V��7�T��fT��5��i��^f��3�Y�*&����s{e�-$�����~��2�A�Of��Z蝕ø�w�w8X��sMS%S*���W���'M�>P��z��֐X 2�
�M�gF��+[m�U?��Ջ�ً��o�\}-(��mg���Vm�$8.�Bۆ��>W�fOl��>���K+~���+˲�
&�k��S��i�66��{�-�s��6ҫl�
W�e}�.��5�z��/ga���0�*��Ć;�WڲY��
�*��x|�;s�x�6��ֆj���E��J`����Vg9{52�<$�A'�>�2�X�����h���r�6��_��;%5��;�)~p$�֎�fb5�3��&!�5j	ʎ����9  D_�t�~�D��qpn��!�m��,+���7� �%%�eY��͊o�eQ��9@��������!��SR,H��8�ŦL(I��x�)�h�hJ��$&�������YB�U˸"I��5EJ�b�R�1X�d6MޟO�"�i����QJ�a��I�,i�'�
K��`a��w��`DyUfI�`!)�ȧ��_W��x:;��O�='G$���{2�U�����t<i��f�O����x6�:��at<:� �
��P��H���'��|b��4���
�P	��Kh�4'ә�p�k�5�*fق��a�#rq9�펅���!���g��@ԡ�3I%ܔy���jه�g��a�2�*�6k
��a�"*���>X�PM)J���q��j����MYl�Ӵ�>�]�4�đ��G~��*��}��gp�M�ɀ��a_~3��`�yh�*N���1K�AQ��[�p8��>�KЀ�M�DH� ����=B�K���D(�?��U��k
UÔ�ڔL@x��Vt�n��,�,Hy�g���}r�pvJI��DX��"�Ҹ2T��
��B��68�t�'���D��.�I1.�Km��T�G��C�M��5-�
�	�.��@wSU%�*�.�ڼ�Džkok�s�n�e#w}����.��0��x���0��i	�[<
��[��|����7=m6Bs��
,���۞��2`��z�y�;
���8'p�mO�I�`F���E���6�W��ir��+����f(��þ��o���Vs�Ф�T�@RuyF���h	�sP�&�mPo矆���pm��q>��p������<R���N��P�oئ8�&�i�����8D��^[��3��������Dpd`���=P�SjQ�$�뒉�oM���~f
�9*Xn���N��!�;i�prZ�Q�V�����GȃT���5E��zۖ����nE�](!���e~;Q��^SƠ��:[�~�e�����#r�Qe	u�)����!캣N��<��F�gg6���o�^���J������-������a'*�ꅶ����.Ȝ�����O|	ܑɩ&��"��
�cJp	�Y^�ک٭A�z×Z-m+Y854��(kHu��u��n,e~��R��1��!��{�$�X`�
T�a��0�4�7p-!.�����S_ZXk]�v����.����,��R�啳V�b]\^ܘ��bƊ��eq����]@��P�O��@��9����o&�D�v
ӭ��nܐN?�B���TCC���S-���,>�4:��_�A�q>��l=��W+�P%> <�l��"��q��uv��l�<���bH��������nU�5}Y�w�AfiMG�A��\����6������2�jb�!U_����2��
,G6څ�͍���7�c�D�2�R�yi��K��̩`�<f�|��)�&��#v󊖏ȅ �:)J�ݰNJ�1RSp�2��n
5ԣ��y~'�ݢI�61�
�ߊ��A�A0}��j�'�`��ԁ��\m:�u����A�E�w*�8���Rߣ���}1�*��Z�OӶ��ԝw�s����Q=��6]�z_���V����T�����6�mg���R{W�T3M��4���R۵^P�ռ^V�a|�,�����OA���������j=� �R?�ưY���j΅��US|O�y,ѓ%��򵩌E�i,I��l��8<$�D	�F�y���W
��oI��4�h���~J���LZ8ƶ욒8�"���Ӯ"���/\�/������^Wy������x�%��V3/xt��yۈ�������6| �[���yh��NN����|�hP*�1�����G+��^C�v�[g_C��ː�}ܙ�wbו/��N�DħP�Ż�Η�x�'��N�B-G��z��j���f�ZU(�Q!.�$R�ba�XŢ�Ri�>�	��pfnDV�"3����[��+a���Z@��� �L��
,�>������$�3����LK��_�_�����O0��]	�>ciq�QX؋`m���i¡�q�!��
��Nr�Oa���9&�ʱ�����Z$��ZW��=��8������N�j@��\nĹ.ҭ5�k֟Ǜ�i���Z��;��gM��+�6p$~�V���*��~�/첤�˶^к.B�W�y�n�-�\���kS�=�v@)S�$ۤXo��2/I���������2�֎;��05�m`�&�����=����
�J���x])�PkKA��8���k�O@h��8f��8u�Vk㍍o�[���"�����
S4-��4��OC{�-����^GQ��+;�5N����]3�v�+7
<k�:�|�h����{:��i*�����_�d�3+��`LW]a�������k)��TMo�0��W�e+��v�~����a��K� [�MDIn��?�&Y;�qæ��)]��=۝��	�%�
�5��㖺�а�s���$=�'T���w����<x�\�P�B��5?�3��؁�����;���D�B#��@�=RŝQ@&��|����i����l6�֖�lP��m���@!�u�JQ�f������bu��&>�7n�<v
�lsH�6��I
����қ�P0�F�(8ns��ۃ舐�1+�"S��+6Al��)��Z��~vNۡ��t�'�Dk�S 6Qj�	O0;����Q}�dQQ��y��.��j2(
��z$܊
���J����Z�y�CCJ�9������
Ba�N�}6����Z���_�&:#��%��'�s�b݋2bf�Eܣ^��&�6��mQ�Ti[t��U��
�g�Sr(ע�T�����P�>�O�zuٓW�}
i�����ے�`���MOb�� &P4*rO���ﮮ���h�����d}��f:��pzߊr0���h�G
�$=��0���&� ]x%7��>����_��i���PNG


IHDR�aRIDATx^�SA
0��7;:us�K��HjtAa%���8�1d/�<sZh(��;*0>���T���8�|��!姜?S��:�[��üIEND�B`��PNG


IHDR  D���	PLTE��������VtRNS@��fcIDATx^��I
� ����ѽY�JpNB��W�+���Jp��T�
g����, 3�2� s���� ��B}QIV�ըju��}�0�cic��p���x3^�+�o:IEND�B`��PNG


IHDRJ#+�IDATx^��1��0Ec���{��.�T¸�L�vqve1k�p	�#�"�y��$\^�#����3���tT���
*a���th��2�u�m��!D`(�B�W��'�M�B<r}@g|�31�>#b��i����@s���P
�HLT�*3����s�h��s��ãm�׷�3�{}\�#�:��uB�������n|USgL�4�ݾM�]5�ף�m���IEND�B`��PNG


IHDR..����IDATx��O��@p��.���p�'��e�NZA��b71<B�Ur�@��͛�S���Hަ�&�*^��QT�� B�;0x0��~��l0��3I�`C[��p�C��%��|ABX��+؀Osٶy�Y�VFm�nŊ���e{�����N�n��/��t'��/��:���#��Cf}5�M����H�?�/L�Ο^��+c!���G��y�9��r�������N���ew��-n��&z)?9�5�e�Ե���r��C�#�О�k\-9p����3���6}2�w-~��gew8�l��O����?�JC�/��rȪ�Ɠ�$K3gi��[���,��{�O�Zx©u	A�d�Z8+z<�uK�Zw��$�
�Z�Q�x���_�� °���bT�K��s�b�kq�ʭcQg.tE�E�*�F����e
�W�/�_���b����@�aIEND�B`���Xmo�6��_qUQ4	*+Idpbi�eڢX���0�HKL(R �8^���#�bY~M�/�bK�=��wǣ.�Q�y� ���.�P����:Ad2�p�Y��U>�<I-ćpz|r
���S�2^dpU�TiӇ+!���0}�h���0PS�)7`T�c���5Q�LKFa2o��
����L"̦�BL$LXo�
I�Kd���O_���[#�2f	H��ap��,W��OZ&�0�qj�!e�� �/D��jG�#�������L��)�!]�L�k

,��J���?��Dѹƅ6J��))�u�)j�$�b>C�A��S7�J��c��I����WF8�8��k�S�(u0�M.��36�㶶M�)uv��s+�-Wr�z(qV�*K&�ˉd�x��9'����*�T�E�
d�p�;���Ѕ�_]�Y�T�\�s�S9j6RXu��
-��%��h��v�,��k��9��P��1�7vـ�k!<sFt�%�[�2���Xk�[��aց���+��jZnq'��=cnk]vڕǨ�D�܉�$7l��E+Wj�{X��W�mE��Q�.��(Zr�M�_�Lz~~~���I:����D�f��nHO0�Х+����h
�uu\9e����fL�%C	��L�_���ϯ�p#n��w���գ�;=;C�VT��|�:������#2,�(���ܲ��$���uY-��XC0.�X�|��.�Z[ZHpy��D?bRư���M�A�DV_RLa|�>>O�c�%�6&�<�`t�q� ݿEQ�ً�=V�1Fj{A����*.�����$a��d�ݏ�
E���)����r�HT�nU��<\�{O�t�o����I^D<��Xe��Q�c�c��#��F�lON$@q��*[7�X�V�����u8#L�Kwlp:�^%��>���M�X�>~5M��E�|�2/,�]��Hx�J	�W�a��1�v�A׍���*�ףM��~)�.|��o��+!<�cA�ua6^�ؠ�
�RR�V�{9S��h����B�[�ѭ�H��Z�m��5�Z�9�u�~���-��IZ����.�GTn�*��t��]��k��w�]�c�`�
�1�tF\���Pg��{R�T�bg�9�)'��x_�k��ˁ��7��R���G�)=SL���8���.��
'^vo�=�9�a}�L���S��*��ўs�����[������F�:b)'�T�&h{����Bw
c�F�~���F�g8߂�Oخm7��"FC\w�bI��`b$��G-��Cïn>ݚ+����SSwط�Zo3rc�^Q��z��C;~?{��y���ҕ3a?#7���ŎP	V#c��5ܚ�v`�3����M[��A%�,YT>���S�fj����i�Ih>K�6�i�z��h�*Q�׈Ԋ"�7��1��f�����Z�o��9p����OMKT�xX�4��,�kd��kc��/��ڄ�zz����*t���V�/��:>X�śzk����U.1!ḛ��x�=\�V�[�=$hoee׌�*���*-��Y��]�G�H}N{N��h;�[ᾢ
�4<�aN��N��Sŝ�D�X�m��֙�n5����u�,~���l�}׼5�c��e��\�ʛ�a�_��Idi��Y[o�8~ϯ`��Hi�-v_�
0m��H�E��<���h��LyHʩ���D��t���EK�����Cv^-VZNg���!{���v;�|������Umg�6{U����z)��`8d�`Մٙ4�T��˫B0|�VK��(�x�8{}sql����P8fgܲ�+6�iRժ`R�`�W痿�\��,Ev@��?$�uV��T"M��:�I�r++����
�=�O���޼�ư����W'c-��Hp��t�y�dέTS\m�P�_r�k���C
���uum3��T�V���_R�71�x5`"�f��EZL�kv'�>&m+��gV
���Y�-g��A#�uzC2e�r��^��^��N&�Y�
(��˥P��며�
8P)cu��J��S/>���0��"2�S�%��B*�X�
z.j��"Ad���0j���'oѽ<��3Q.؝�3�G-���
��U��z:m����=}���3�`t���CD8��矛[������	K�t��4N����
�*���ÀY����)M|$�
l����,�l�pI/�0P�|�����b��W{�*V_,��L�E�yK+�Al1�� ��ArU�՞�Ư�#�|��r��(>}��o�+���Ko2=?:�i�r4�
�T���Z�B.{�#�R�*���d�7:�IO�+%���(b�;^c��	
��ƣ;G�>��H�4�cdMؾ\��9֊��8J)';�a�Ԫ�_M��y^i2n��9�961��II��W���N���{��a�4z��LJ��6�A�E)B���$��q�㢳�C�@�3���>I�?�� 񃰵V����ГJȬ2d݀L�*�jN�x:�p�'�#sxI��I#�r-��*��	<�h�@S;��1j�7�y��M|��xh"�	u٨����DUtTeea�(_TU|\J�
�I����;�iCO_����� ��7hOt:zt�
� �����9:c/��ϧ��g�oD��	I�%Z�P�;^��n��E��u�~�2���z! f��0�A^��IH�x�Kxo�(T�6�'BBv@{G���6�����w��wp�Λ;?P����͝!�ʸ�'q���`��S�]j�v"��$aGQ��3d�F"ܔ�٠�~�&�	֢Lx�wC!Ja�c�l��
�>���
HowB��}<A�l�rS6�l�C�b��ob�N�u�,�%f����:���k��>����[\g\�J u9��
/lt�䋆z�6�tJQK�NSǨa̧�0������fg+зL��m83�pwIۉQ��t����r��z�X�z���fP[���ʹ@����r�1��	�"$ڊs{ۋ�5�?[����~?�}���鹟
�&�CD�5.D�k�P�Q��b3E;�vdid��y>�|����7��ӈ@q����nh���`.�QN��L�B�g����7:�p�6�o�V�R�)��'g��fxw�=�֚�Z3�� ��'n�2�a�I{s��o��X`sij�|E�h���Ü+��T���x; g �6�;�̎���`s�k���òF��7\��(�2T���Ҵo�^�[�����I�=�d�ףl̍�]E��sʎ���T�]g?�ϝ(`����)[�I+f��`&wƩ��_�M��h�,^}�m`N���Ӄ{���]��ɭ߁�g��Ll�`��F�Z�U�+c4E0��q]�3Ʈ,��䜣�FL�R!6V����c�>�0��c�#&�+�_�A`� 0��5/��E�0�*m	���^�ov�[T��ѭ�Su���3�|1������~��l�I����0d���{�Dy���\�Sd���|�<a�����c���ʮ�|��F��ht�';ځ��B�F�w�n��[�fͩ�-I<��;���&�E��ZJ�t����qL���j�e������-�^"D%&x�mB��¼��q��I��V*�)u$Ƕ:�H3���f�����]�Q��v�V�
�B9F����r�^9F�a�\�| �L�i-%�7��W�9���3Ɖ�$o'%u��#Y���sL�̬���w{Ȗ��E�}�[��4��U��b���~(3�R �lu��WUݩh��a� ʡ�`P���Fʮ�t���৔�+��4x}U���!4:�^�E�o��k���_����_�ʟc���"���K
4����g�/������
�v�n�3niž����i֫��b�uc`���H�&���Ӌϛ��-ĿϬ]���0%5�Vմ�Vf<�7C�����~�)�=H����p����d��JU:�zmN�j�:%�f�Z���4�ѱ��H��Qt�Z^3�*#:��o�NXJC�-3[]ݼk]����n�m�m�w��Ĭ���|��h�{��s��&��%A՚�)�K����A�\s��\�Tb�eM��d���T놨�9� Ө�iD2e_�x����BKXڵ=�u��{���3�<�Ҭ�̫_�\_�/_%����y���d����yy�5h�m��w����90
)|(t���V�sO�(�֞}t��h7R=ɲ���&~���0Q�J�
M�Uk!�TU�rs!�͔��W�|���nQE��3���<�Ͽ����n�H잯��jPˇ쭋=l�&�E�u�{(
A��ڍl��<��{ə�D�KR�=E�rH��WbM��o
�ˬ�?:_>\z!�7�2FE3q��
r�Y/7Gx��޵�mQޤ%FX!�*d:D��E^�K%�5�j�Z�N��I��*��
�/�����I�G2�KXyb��&�����f�����{�Jp��3��O`���!̹�Ɨ��{����—w�a��sށ��d�~F���
-�Z�i��诣��]�=V��:�)h�rxϤ��TJ̳E��m�5Qtk�i�k���D�«���)�U�m1�]S�h��&�(DJQ5�h��j5����4�ߋ	5���BM�İ��Ԓh�Q>�6���D����?E��0�x��,��B�Y҄�0	�-|<�1W].q���v$iN�c��(������T�K>�s�SA��&���b�	�#��7+7F�i{����Ҿ�X��U�4#��v_�q��k;D��k9T�M�����<���an��u\�q�S���о�6�r�ڭ5�5��"��:�n�{�m��a�����VB�s	b���8��C�ѥ�~>�B�z
?�j�Z�@S��X��U�pnU/Ն��$�8mP@�n���cg�M�0ɂ,Μw��
oF~��S�]Ы��!�`�˗v��Uv�J+�����M<��]|.yA���l�i�5G�rq�i�s0�����Q�<y:'p�δ�����v��u<:����=7���踱���m�T�;�U�`����[�+�/�)�z�0ɈQ�L
�$�� Nk}�<��V'e�<��!�Iw��T���|X��vЅ��j|_��H�4z%"e��3��=m��k7KĢV*�PAӻ�-��R��y�6�})]�4ь�`)ݡg>&.%���o�#}Jz�GUT�E���zG!w��_���R�2�J�Ȏ����nѩQ��C<Rr5%�L}��	xf���;3�_@��k��]I�w�<˯�}ۛ!5�l�,��1�P���W�=:uI�b�\�ڟd�m6��������!�7U����\!�0Y���j��.��%~ۓU
�BV����L���5D��3xX`�8Py@tI�&��3=DVK�+��������7YWbCQ�yH3�
��E�O��u\���:���|g�թ����	iQ$���<�=ESR���I�ε����z�@��c��J�8!Qq��/'��B<v����t�b��Z"|���*]`�nW���L
�s=D������΋W��Y��g\/g$]��4�A\�q��Pzo6�.�fd�S30�MԝW�U��p,����%4-\��~*Z	�xB4���EM��>î��Q$̎�b�Bb:
.Z��%���$��L�8��K��&�O�8AM�<.(����tY�n1@b2)4�܌�������y����)l�ᇙ�@kGKK@˯�n.MrR���!�)	>���F%�����`�����ҋRS��:5ްه5�!c��Z@2�5wr�m
8X�f�Jn ��RH%��Z�ŇP5�y��-Fpo�U㗘�
Z�����=׃eR���ˎ�@��WtOi�+���"��P!�>Ru�(i�=�L<�=�<zm��_c{�`r�ݲ=X/��l?5�}.E����Q���[w#{�T'H���~�|�=��{������3pc��y:�(��;Ѕ($�����|�z��3���ŷ�T-����ʗ�@^d�t��?/�]33�:rZ�Q:��<0��p�mo��'7�0ޠ��F[����36gQD�+��Q��
��(�1ʍf>���%4�����F]Qt((CЪ�(@t���gݯ�$_w9�:��#�Z����?���ɍ-3D'3ݤ���}�II�pX:��[�h)�	Q�ʥʑ�l��R�������7H��p>W�Y�!��W6$U~�L6���|y�����sOŢՁX�V\(�{i�=^�X�6e�M����)�'~Z��C��k��Z��Z�ŽjSP�KŞ��hǿ��?V���<ƪ��T`7�1qR���~#ŀ�X`2�ie����A�=�p<O�B���T�'���h�J�ۊ]�"����	N�c8%��"7�_,P�1
�ױ��1�?�Ӽ(\m�[s{9^�~7����;��k9�l:=�8�+'p�ӨK�_�8'�[6q隟�&U�L�m�.ZG��@��NX.yf����f��i���_��k8��#�u]f�֚�xFV�����P<.te�~�:0O���l1�wh�*���q�k���JK�gz��f�dK���WCA�'
�D� �V��F�;�`(�m�E)�]�*�k��x�eL��!E��ή>/����9́ѸR1�������戙�L?S�3��6?��?����FQ���K_9�8����,!���U�.���혛��y|��%5���jAw��*�
�qM�
8l=(�h������R�in@���Z��� Uy��I�E��
�b���D6���O/3/9��X�PGj8i�-1���Z �\�I�1)�ؗ}���͜�K�0��+

k��9D���p����g��������������&]�|�k�K��Kz��#�FO۪}܊��#�oV��z���yǥ����-�&Ȍc��^�U(���h���l!�Hg8�=�~�H�����
�?��}x�9fY�O��+4�����٭��^}���m���sݐx�vJR��+�bK���lk��ts�C�u%v53ۍQ��N���Z6gP����lY�u9��?���&�����w<���ޑ@zu�CK�Ƕ�N�Psf�^TJ����b��<�Q�Jf��'��j�|cvpԶ���v/+v<1H�(#?�JAJu������Ł����D|�R\���6��f���ʆ5��>�8�<��}�#G

�W�\VU���M�"2�1jKz�
��P��$�Ċ�c�.��gW�����S��o�ŴмAhuqn6���KYm.�p�w}>[��h��˽��ˣ|��o�$�4?�f-�H�#��ύD(,
��s
e��?�Q��N��Hw������M����1B�H��$"j2���t�FL,��j��x1Qx��X���Ϛ�6�,R�Z�
)^d_B`�L*E}�+��6���@�	&�4��
W�Ƀ��d&p�R	j�#yo�a.P9�
h��g"�M��Y,��W��`��R���0��Wh}O��ii��v��B�Ӟ���^��X��	L)�R�dK�I�{R�4p���޾�����r\|Y౰��Zx6AF�|A��!�	�y�%-��s�`^��
>�>6�׀��U��i�W8c�4ŲZ���|>>}==���M3�;
_��%H\�>*pV�:
WU!�v������8�	yP���Am��e3(S�⻮]��^�3�}!5��N�ϪTm#|�� �_ӣ����9�Y/��W�u��+�s��Ӎ�w{��w�A�����Ч��Z���)K	�e~�|�9�����\p����c!Hz��Fm��rԳ�3r%�^t[���o$y�\��
�*�$F85~�/}��²��Q~+�b%���������uSaO�0��_q����-�4�1��J �T��M^����g���{N -*�J�ޝ��Γ	fv�:���?|�UE�U�6:4�����u���Ñ'wKE6�Lp�	�W����rBn�|��-9CV-��'=�5��9�q��2XQd*m0��u��l6�X�Qꚲ�h��?�>Όf��|���O �t��ٮ�j|&��QL�ښ��ӡ��q7jbHŵ8B�ʊ.�6
�j����6�+��Q0owf>�<;m��8?ȓ�̓)~i�~Fi=�ɋђ=�8��TŶ&L�3U�+�ߠ.�7��_!M��A�E��Y�?6JJ�{7uN����?�0���b���}��$��h#aX�6��i�m�֎���2�&��I�6ͭ�!��=��~����˟���j�U�-ь�$CNtl�W%�I���%�h*�����p��ྦྷ���^4�Х~��cɽ�!s+2`/M�'�Lٻ��hg�]�V�Y��|�����CE���,�!-MN.�g�p\6*$^On<^���R̫d(kr��72ҋ`F_�I2�<�v���C��ZYs7~ׯhORK�񐢎ئI�)�r��uEN�ak�@$00:6���9�!93<t��A"4�ݍ���+��3m$�GC�(�#OX� r>��\#t|0��%�DfG^bg�;/��
6�$)�g���a/kp]���L�<c3!cփP���B�"6�43*�3����e�vBٌ$š.�d ����.T���<��:pr�?��!�7O"���PiӅ�B@:� ��-��#x
�j6�2`e�_��i�(L���W�~
�L��
���H�27�L%�����󧋟~��	f\�.��uy�:�MED?�_��)	n��	��J@ϧ���7pr����|�F*M����Џ�4�?��
�ߟ�"�h��s�O��*���J{6�I�J���h�)i�;�t6@hA?�weܲ(_�V��
l� V�[��9����O�h��\R�;�H���x���H��y��ѹ�?*�)��;Nm8����ڙt&��BN)�+�_�_�J��huN�S(M�eH%Y�k	„��&�Qe��I��̝&��)�dJй��ن덂�la�ս@�FoW��ӭJJJ���c"����]&� ҍ�t
�E��\Ll��]�~��e�,Z��HC2|���\��W��(Hl�dŧ����Ms?͑��[B����w��]8�������@�'Z�vr\5]�?�.�9`�e�j3`��V,/���(m("�=������]'��Fm@���h��r�l�5�/�Kt�l��5�:�r�f�㫢�[{�p��R�
)U�յ����wvP��H�'�TR�#�r��J~�s�N�n�V�`����ɧ7�y���s�@�پy������2?de�p���8:|�7#���٥�Tj��%G/�^�t�-�‹_L�-F�?�斈����m�.�&��K�o]��]m,�,�A�)������t<�f��9u�܎�"�u/ZJb�
.�]c�x�r6b��a�MQ۾��W��a�d��[��X,��n�w���tj���9���iU�s�C��bQW�zf���P�C�22ٜ�M�L6�^��;�\[��0���h2Ńҍ[	���D��h�+0�ˋ�)뭵��zv�#��|�m��GB1r?���%n��C�stZB�b�	����2W�z�Z���y�Dቓ�	z��i�z[ۘ��/���4�8=���4������V��6���n�)<�s�lW��_5|�3��}?ʰZ�?ޤ�Uz��`*�C
;��P�>'��c^��L�����\�
�a���shml�^�����s�w'�g�Z���z����J˴�{�����C���v�O��S��^*z�V8j���Ȇ���ITJ1U[b�EE�'�����A��в1�U�f�1b>��!�A�Q�8q�&nm�>c�-d�L/�0�j�
�L/��=S�\=J3����&v��c�PS:]����u?��y-�X@|-�߲�1$	�i��z��A��_��9�SI�h1�h�� �.�G�b
J�UH4�(}�t��_	���L�q�F�M�z6ܑpIˎt;��τ�G�����ԓ�qoJNo;��E��`��I�8p5�Ƹ�YilHL�������m��J�)��-c���'$e�S2z{���W�s����
���A�,<0��/y�|Z�_y�!����]�ݠ�ڑ�<+��Nt��0Y9���s���Kd� a�|=�>�	�����׽Fj�en9m�dxy�XJ�3&�.���M���&%�isV�9��$�r��;�����c��c��O�Ή������(}'ۃR�_�1S����z���ń���l����b�>�%��L
A�RLw��+���>Mf7^�:���_�
��[L;/��9zo\�g�
F#h��
��Am�y����v8T�Dg�m[��|jz��n�^&���N�L�}�G�t���g����զ���ǰ_�O-�vTu��V�Jj���M�y���*������E�:��M�,�mrz�KВsԵ)�&� �1*�M4�e�D��A�?+\�BR'��W[o�6~��8C%���mo������!k�%{*���$.4�TR����7h�m��"�ܾ����3X��$u�Gs���?�M��N�މl/3�jcx)%�Z4�ȃ���at.��L�i�@���G���^]o��$�*rs)s1[�#�:S��q����7���l��c,��P? �[oq�"'����i�e�:#"�3��)�p�I�+S�(���E�}/AG�@��7����7:!�
a��ƗB�Ց��(ȇ�=3�\n���9\��ȑ�p���f�X`.��R���l�c>�S��f��+�93�c�����"������@~� M��h(�7.��~W |{K(��+�_.]@3������KN̤�1�XӆYKm��y�!��(����a����*�ۀ~.��m��0�݆\�ɗrˢ�1#��qe����1�C�D�j"|�Kt ��EH_?�A�*qiϟ�:ǀ���xV�"�_2���#L��g
��A�si����^.k��8�?�7)�0��1�j����-�ء)F8LH�%E�~O��~��ȠSf�1�r-=����"`)��5ժ����wd��\V�η)z����F
��;�����>�l(ݜ�c�q[CЖ�,�|j)v�T[J��dn�C���Ӣ�e~2y�~_�hqʗQ�h�{R��[���[I��E�%���0�e��V�q�ʋ��ϒ�P���YxІ�t\��.���+ءc��M
�-�a��w��1��i���n��N��ºem�U�����ݯ�|7�阖F#�U|�
�:`eD�3:�n�����^�3��ij��n��G�������Iש��٫�NmK]�]Q>q��"N_�=�[�E��\iH�}/�w�3�]��-�
�,m�44]A<hv��4��3`U�j{�'�	��N�<�y�|}G�D"�))ԣ�+����U�w��{��ط$^=6Q{M�9��ᾇ�����r��5��x�l�Z�}��C��-v��7`�_���V�n�@}�+F�K�bB�H��4��������WY�Z�c.���]�6妄�=sfΜ���g�m�\$W��p4��	�sbM*��rJ�uxR
�Xth�(=��?�́��rn���0K��`��{�h���=�F����Hs�kR�s��?�_~���\*��m�7�Z�����)�x�Ō�-l�Q�F`�U8��@8~�o���cy�X�6 �E0��>_%��hzw���R�����4��l�9/���iƄ�z��>�M�
�"O��c�o�I�V5�q���Ț2�$I�}���%�έ�"�$�������1U5
�2�6��]I�A����J
J"��5u�ҹ2�)�N�T)�ԧ�k
rcYY�6[�v$��̜t��U�%\�8��e�~���7��=�?T8����ݰ~��.���p]7Z#/"����.�!ܗ��A������\�(��6���2��p�L;V�+��`��W�q�T,s�e���a)�9�\T���yy[̩Ϧ���gӪ$��8n��D�h��P�j>�uzaM�]��ºdYu:��M�j
Sr�U4�D�ݧ�t�M��A=�4��8d[I>[��6��G��� m���a9��ISI�1�v��	�.���u�}��"|�i��Z�}��b�_ �'��y��%k��_J�oy�&)�6�_�~8��*ڗ�lV�znӬ_	��TMo�0��W�>��l(6�v�.�a��K�s�Xt�F��N��墇}C��d=�=����+Z:�z���v%�؄�����^���11�v��n$b*��9�I	"&�Gԥ��Bdl���"�A#�q�=j؝A��Ǐ2��!8ۢgE�*;]��D��is��x�uX
)�ZQ��{$�Q1!5�H�|_�Yr�~@:�x��k��}!z�cS-����R=�g���d�G�M�ì�?p��)r�� 2�D욢��UU���T�)U1���?/���m�6����_W�|\���41V���`Q	��߹�^Ž�+X^���-/�����J�S��V����Aim�^:�&�晣2�Ǭ�.�:� orB8��f��cm�A���~b�c��2)��#���dyFZ��Da$�^�%��|z=��};����������SO�f��Kah�h{��bP{L�@�J�)&�I���ܬÜ��	��Y�}T]O�0}ϯ���ґ�I{:���1�F�&!Lr����С��];m㖍<�u|�9�~�9�lnĴv�q��'������<�Q�jmlGRB0�`Тy�2K��,����‚Ս)
]"�q��(,�v�^�Z7�R�����A�ܢG�t�J��#�O����TBb�$��J��”�1��²�P5�pB��/	k�:#
������v��0��ԫT���/3n�����wX����`��,po���N���o��Q��.[w8=N�� HTӖ:��*J�u�5g�ѷ�A�t-����H+|�p?��'m�w�AN9��	Xc"!�R$�2P�̌$�S��z�cEzS�����a�ITSW��~%oE�o�H�"y�o,����s�r�j�yn�i�7Y8����p��mo�`i�aׁ��3H�X�u���ڴd|6CUk!�t��ud�\.-��r��R�ڲ޿�H�X$q�	%��R��t�ÞkCyT����ߜ����
Z�.i�>�D���ф�mt�n���V,��e9z��z-~�4/�)Ʈ�D�w�����`0����83�N+យ���8�h�-ZY3��	w��uE�����񊹉���\QC,s+�BQ\��O�P7��!a�`�EB��{��؄"3��w�jce,��Ŀ�(ɖ��v�6���+�~T��A�}����.����rƤ}���A�_s`Z�K�-�AN�0E�>�_Grڂ*�vUB�*6�8�$�p�hl"��q�?���G��Єif;����n�7Ch�����L�X��V)�)�I��#!�H�FĐ�#tA�:�;�'�v����E�4;���RKF%tʣ��R�װ�p�Ҝ_og��Q�j#D�o����m���x,q?Bd��z���o�V?�x,tRZ[?HG�����V>k�2���!R�_o�L� �MP�n�0���Zj�H�i�E��s ۴�D
�
࿯�p!�Hޝ1��7y2i����v2y�6È��]�Z
=�1�G=/��3��D��S]�-�K9��^^���!l]���,�cҰ����3�Z�%@\��8���/�F>c7=>��u��#x�0�5qV��ZT���2D����~�;ȣVuݨ��p*_���i�(��ú�ڔ��5sn��{L�Mhr3�d[��>�V5�z�"�)v��1�ړ�>��Y���R��܅��Wmo�6�n��᪢�,�q�4Qc]�
�aX�O����bB�I�I���II��k�}���>��̟�1���^�una:9:��9�y�U���T6Wڌ��h4�o1
�w��V`sn��J���h�V��%f���_�{/OQ��͙��IX��R�̀K�#��8���[Xq��8^�O3��!��������HX�`r}����lA.�ZiδA{Uv�D�@pyCu��ȧdrDA�qu��vL�c��dƩ1c�w�*���5#�O&ռ�`t���W���5���A��R��V��V�OY-	f��m��\f\�͕��[��k=WZ�E�V#��[�޾`��5��z\�o�C���}�������ۭ8�̭���`pQ�Ku��:��Zg�c�|�5q:9�<8�L������I���	�r���f��p||�N2nJ��X	�s�ӥ��r%gZҟ(i]H^�^��`z��h�6��P�Xe�O�YJ>��}Z;�����d�|�\&�'grMԫ��,s���*jcHk�3����7qQ�'k�;�OYن�@u:�)Au4�l0�i,�	,���p��9�tQ���m2��#˖��b5uO����qK��fҔLS
]�W�ٮӑAA-$~�{�)�q��:9��nˊJ�,YzC�a�MN��u�nKZi�NK�	xݠ��s���si;�*��0ȕ�m0���n��Tv�����l�����>ļ[�Rp�ly1�5��n��,��q�~;t��RI��6�^� &���,㤶��T����5��Og�!<���N��?��e�3D�&�,�ҶB_��S6���(��]s1�+0�l�h��
7T��ܩ�	��y����5DZ`KӪ�a�pOo���+��\��?2?�uoxO�ݏ��Ԋ�s�)(�0�~��{���f��n����E��F���F}>ǔZ�R��QL����g�n5U���?�;/��3*jCv��Nx�E7
5i��)0��>H3�5��-~
�tqW�
��i�.;��C[��� ��ť�E#'L�%��d��W�[T�F����Ƣ�G'ҧ��ɫ��)hIw����ͣ�@ݢ�Z���ͤ�æ�l|np��/�͏���^��[�I��>�jnC��ۉ����r�<�ݼ��N�>��(��(Z���q�۳x�D�,y�s��?�|�޺l>拄$4I,M�Z�g����Spܢ[J/�L�Vlr��)
�O�Y&TzC�U�:~��`�V	4n�؉�o�U74)��*UE�-u�Q}��nX�}x�n�9jԋ��~����?��Ɗf�
��Z[o�J~�WL�H��:!M��I��HM%9�Cu��=����k'A��~fw}�`$����ޝ�����ooo���p�-��D�-F��o{r���?x���B�~H`�(��E����&�6�]�we+�Dž��r�y貰R�ކS�B��i�u�'x�E}8��҂c��H�@Bz���:�%x��<Ҙ\T����@6�\�&Á��1}���ۇ6*K�.0��#|n��}�:��ЪT#j.C�����R���Y	!�\��܍<�U�Ы[��ym?}Z����D�����c;xʔu���Kt��F��qC_����ua"�L��]E�3��ْ�V�la�a�䜬�>#��OeTN�X#��U3׷t�{�&�uG�a�b[G���tgT��s��e��9�fB��g��<��g؏F���UF@v/G��T��n(牌{"�b7�Nl�o�,Ʒ��i�h��w827���-,����XQ=�/��y��$c�M�A���\mR*,�O��Q��;徏Nȸ&g7��<�V㳇���<smu1,�T�2���*i��0>/ԪJ�7�dw�<Qk�߭��02*� �M�=[��5k�<���I
�9���撪qp�8|���ŋze�4k},xl]�9+�t�ͥ�\�h^�tc��o/�!�~�J��%�y,�=x����Vں�5��@�9nda�w�/w��4���ϴ����;�4*=޶=o�Ѐ4v{;��� ����(3��@�N��
ۧFfʙ̓�+4]|�i����/�Ҥ�e��biQ��L�Eұ���z��1�G��M��"�!���%)W�Ek	4eLc�tS��<"m̴�d���.���3%�����ZH����8�e:���*�N��m�Ƹj]B����b���%bd�ۂ ��
�����6_^@����8�$�1�X�mm*���*���e�~���M��d��:�Rյ�s�v,>�?@2$��2�p��v+O�)�pf�l�M���8I��-�&8���˩����7uq�2J�UҚ�(�����Jpc�ۍTK�>/u?	6YЧ5F�0�)�X�(�'3�r�w�CK�X�ή@_���}�J�d�夂M���&�x6���lG���=L;4��#p�)iT%
F��I��9��Q�'����Y-�xb��n��j����TEK$G`�n{���dLφԃ�r�c�?�{�֦6�o/X�Ǿ{A	�l䵭����Ȇ>��7�P:�x��,�t�Q�o�:9\&;tz*+{�[��h��Oi�Wӟ�oxGi'�Enj��€6��Q���N��S���F�:([�yu����ߦk���u�7�%���,\X��ƣ1��Z���I�z����m%��7�̜�G�1hJ-f�])(*�%O���jc�I��1~���`*��#��^�<��hv"�� 2��0E'�z~u�gi��M�?�V���UΛ�"feSfm��{_��,�VwsY�ҹ�����W�ӎ���sUy�|� Ƀ&�`\hկ$6i�ϱ�
�a�sm׊*��h��\�:��%�nm?����u��/SkFs7�Yc�P�ܵ&O{ZC{�p�U!L�X�_�<�r�BlRo�wP%�J�xJa�Ɂ�Ld@f��Am8ڂ|a�PT��2h
�i%0M�_������yr�]e�s�۵�zE�~ݸ���+3�ٚl拏�^�sB��˅B�?�śUs�q`>���>>0��LvW�[��N�kw�Es֝�z�;��>hW�֏<�n�F��`����9p��J,�~D(���͛��0������+p6=hb	H����	���*\EJ�+[i'Td�M�|ɼ��M��{տ�5�~�B�~ו�0
����֬׿��
�#����W���H}��+b�Y��g�K=I�B�gUUH�"t�~��p���ʛs�tf��g�v�""�H(Ouѧ���*Y>�2�sp�Ե4�^����R�_O�B��	Z���>��N�,*�����
 ���
rx:��"mX�3<{�87yib�l���
!Hc2���~ 4�r���4I����a����v�,,�[c��|�I@1D@F�L�ſN@�Q�}=�uT]o�0}G��RU	�)-��R���äi/�~�_�Uǎl�B���]�	�^���9��z/���.�қ�]"��FW���q�6v
�RB�`Т� �`,�^�+��S �#�r�7hr�w����ĺ�D��@Ei�d
� G_i��A(�G�������0���w��mbŇP��&����`P�J��=�n��*����I��6�u>�{���~���N���d�V�~�.Nh��ԦR�D+�1 u��Cp�#@��ZPR�^�������負L(4�Y��z!^��X3�$$p�4B��Mj�9��8]g4��]pW�eXw}Q�C���n�SV�[I��M`IRݤ�ѩӹ��@��ӕ�1t�BI�K`�u��Ա<)��V�v���E�%oI���l�q8..q�՚��Z�4B2��'GD���h::C�yCԢ:9+�H:2l��^
����X��XZkA›N��l^��D����}��s��~<`��s���n��:�m^.�˾��y�R	��n���Ҵ`1�P>O�O[���ˆ����z/bD`��ȸ��a�sU���j�Ć��|��t���F���;�OM;��t�0�K�e��d���b|��6\iz�ځ["zA�g��f�Z�o^ĩ�D��k��c�D�2p�uqF��34���
e�����{�Uӟ���Y[s۸~ׯ�N3C*��O�N7�梙dw'v��L���
D� (�j�;H��8�if�}�X�98��\���+��9�[����n�]͍^�f�^4v�M��J1GT3#jaV��Fgg�C-�.��˚պ1�`�.��L���D����߯8��F	�d.*��9�,��
�T�*���.������_�R*��Fi�T���J��n�4஭��M.F��ǏG�1{/JaD�v2�<�" ri�J��1#�M�-ψ�{�Y
v�п�E��ѹ��Ie�6W�^J��b��؂�l��eK>��dU�T��Kn��ݑr�l�d�n���nF��T�n���ڲ�U%����.��}ZsY-��-d�� ��[ՖY>��P�B<.Y��f���?a6׎G�,M��{2��r��/bo/�!	�Ҥ�+9�k2> (���1x)��KV�]�KmXJo$V�^��_c]3%���c��oξA`�8>�OC2���
����� �
�e��%���u���3zyo�x]���ͬ�͔HQ$'1����>F���~�tj]p�y��ֲ*�:S:w1�漞3o\�`���v��IWo@w5��L�1��!�YM�>À�z-���|Ѫ�c��ǭ�r2�0\%��X��.AT����1��@5dKЫ˘̊�l ��Gtghn���&�i{�
�$QrƪNk���=A+�?Ūz#i���r��z5��H=ߞ��(^� ��OH�H��w�Ȧ\JE�d��� m�0��v;u�3���~����Q	����e�q+�M������U_���R���ݺ?���\�	��Ц�}�s?l�>ۈ�8�u*��2.	c��n�B�� �H":]�
!�<�X����>,EPzQm�bvlj�T�r���yq��ؔ�&MO�6h]�����-w�LZ��Ғf�ʺ�^��IUj���f�F���S˕P�Ӡ?ƖfZK �����Ѡ�e�t����v)Gu��e���g�3��K�& ?�@�\�s�_L(qn�If���in�r���~��|*�ѷNǏ��<�23��]2�!a��������IGZ���c�B2no�b�5z�ѵ��L�̿M��v@=|0ꠐ[�,�-0f�Q^��&(��d���h�G7`����a�+�޵(�<���R����؝�
��N�ϊ�b;n#�-��
_���3�b���{������]�O��nL#��0QP^?�z�7���ծ���kI�wK?�['�E����A̓6��O�L֫��8��.d�Q� x��#��G�8�|�/��N���		#	�๬jw���(7X#��2�%;b�l�/��wC\�T��+
E�ꃷ[&�h�s��y�eVZ��������c`O(ݓ��,�
�ck
�ӫ�k��և5�ѝ�
���L=�s����%u�0�+Kz�Ui'����i�e�7�R$�5��-W+�ҍQu�fW8~c��%�)h% ���F�k̴hCt�'yh�ͷ��z�KD��@�9�~-,��L��^�K8\�L"j�1Y-;L��^6
G��(����s��45rE��lq��44t8I�{P5AQ�<�R!��#?5e��t|���dT�#�Q�vJ���;�9���C?�9�Ⱦ���x�����H�B� �j_<M�	��e�0�����5��B�`��G�3
Sm؁@���+�lv*)�c�uzx����AG�0Pr��Z9�3�ܝ������
�16����x����ҕZ`��k��P(�K�	�)7��nvt��(g3a��9v�M�I�	C&�֕ڐ$
V�7�X��8��S��o�AS���@�&A�ONB3d��[l��,��S�4��k�.O���zWs�=�9�z~W��E��@�M�<��#��ߴ��R��JM(Ccv�|��^�U�
Y&�r�	�s�l��VtO��g�
�v�?mE��
�!�e��XB�Xj��
V�^Az*rN7���b%uSS�qD�Xž��:ĵX�'�tO`nt,W�l(��\�/|9����m-���(����_@(ʒ}Q�D�����f��
ơ�I����({��c�Ay>����.��oa�~-i<�
�j��C,�d�6е�.!��T��V��Vx�ʲKȯ$c��]�j &<���:�\b��P����"��wj�.d�w[Ј�DU����J��_Ll�o����%���6s����Nұ\e/�]�F.��r��z=�'�A�.�v�ˈ���{�͒�����o���[�V=0���,������tf����ӻ��[td�b�}ͥ�5]̳w�)��)�ޗ�����)�Ǵ�Nb]�y-\�@�b��#@-�3"�vH��$m����*<)[�Sƃwz�cSK��w�;��p�0���FGH�ljko�B��7�Ouc�a:{N�1���������r%��ޛR���Y�n�8}�WL�i��'�M�
d��"�"$�Ѡ%ZbB�I�	���EY�d9V�̓#Qs93ù��20�	���ho`�A����Fy�����}DI8�̨!�Dij�^j��w^��0��(���Q���T�Y@R�R�a�P%׃�����[P�=m�9�1�ƃX���+�(�e��{��=C��8�S�r�����*i�ˆ�ed���+�(�{Ţ��Q���>Z,��Yjb�t�8��H�^k+
�{�
�593
N2������h�{ ��էN�8�I ������P+i*S�N����W�a�8�«��^��`��fD��w4`B��HY�@r�|P������C8>y�?��_~p�R��nd�C?�C̜�u���C�?�XrjT1љHc�̇7�]e�I9^�&$��|8Y�L�0��~�Q5?�X3�:����nRX�H�f�I�ۭ@��&�FLE,e����_gс�$q�%�Cw����A��A!�	'�>�
�$�L�n+�XSs�3�t�jwz'��tH}RP�h��::!��E�&Ը�����zN���Q�Ψ0��
0�Jr���I�M0�e��Ǒ�ɋ@�>~���[�?���W��gI��頧f�sC5t:�b��q�e<��4��KE��:Ki�h��,��Kk�Ԇ�T���$D��>��m����G�*%�h�6��{n�Iw)�J>�!��pT*�
�X���#�B�OB6�&�;1!�;z��IE@� �e� ����-�L�8g���Z�%f�*���*{�:�%A;!��p
�y�j#��c+l'I�K�k�0X���w�#����1�18��p��hT�Ot�UfE1��۵���ҹ���}�����w�M9
5�%<V��lٯ��`s:�iH���j쨊�����>�&	Ʀ�*.#���7zNxJ���e�q��?/�}(e���yJ.P։g[^�<�;E
~�2M^b������Y��$��+��٪Y����`��H��7�~X�|u��.2o��m�C8����8����]!�A���n:���†�@�R��v�!=�
�O2�܁n�2K��4�!�,��!ܔ���n��1�˗��Ly�]�[��H�x�8v*n�~������?��^���6E�llC�\q�6B*'�dzQ�}��5��Y���{�$!��d�麑)䤐��m+e�\¸P������^*"���1�cx�%N�x�x�=�NG��X|�-���o���^$�4�5��XD% ���/G�G�R;��SN���\�Z�W�OjQY���%�ׅ��֍k�2[���!�^�_�?Ͳ+�!�~[�����2�y�^7�W��-e��xഃ;o\ޯ8de���}e�;��ڴDw
�m�"+R)�M�LvҮ��ͯN5�ku[�����"��`FB[��E�˃;�=V\�i��~�i��Z��x{��Q�y�>��\�P	�u��f۫�L2ϕd5�4��Ȼ�9�P>��Ij�~G)�,��t�Fc̡����$,;]V�oMm�ؿ*�8WX0�BBRM�2'�t
�
�l
�ǐ�9�-�d���RA�!�m��}-�+�yT0�Px���ꧢJn(�NH�S�����/ۄ?|�W\����5� ���q���c�Õ���t��6���(�����O�VA㗴��]Ļ7��7#n����*���]T�襣ǁ�%_wjbp��>)���O��=}����YQo�6~ϯ�C� ��
{r���I�mZ4m��-іY�(*����H�)Q��ذ`�-��xw���t~�f���l�
���O��۔�,�l��8�E�x�i��"��ӊ��D����[�H�
*V�B�
��f7�4���vy��ۜB�Ŵ@6�1)`I������)�x6;��<�U���� �QBWYA�@��n��<���.b��"<��A��+��X��`�Qr&2�gQM
P�	�x�Ow��ф���*Z$a�W������^S��zC��A,:�Vh!!k>�Y9 ��Q-w��Wt���燇�U([A��Gq����J{�'�0��t����x�\U��V/����0=�:��%�o&Uۣl%�לŴ�‚�����3䧟D��	�x�eEYc���YS���9��xca���b[ғA��z�>}F�����P��c��U�rZ�EzGGY�嵆`�-��T3����Z��
�#!I�v_`�PT2li�_K�`�,�mо\�a+8{[J�	gL���	�1��8'UuA6t�t
M�%6w��2�C$�J�H^Q�|�)�V�kj����wS��l� T�H}�x�gŵ��SQ��RT�B%�{�a��6���DDmg(B���m6�H*@!�ċG,��D
�L^-`�������˗�g�h�<�+ѳ\U��˯u�:(�B�E�ҭ�P�;��c�Ǟ�c�(!=�
�g��_��9J�
�g���1n�p��5��&���Mr���Ċ�ƫ�`���^_#P�w�,#��3a\�y�x�F��g
Mm��V���<_��ZB�ܽ[���_���R`֞%
t�-�$E�ﶲbp�-�ё
�}�yG��P���5�U��hlX8y�$�2+dTE]";���Zт�Q�P�%Zԯ��t�6��k�usz]a����q	�2� T��wK��M��N��z��_b��5�Q�YE:
�r�VՆ@S@;�
�w����������J��D&�>fx5��h�
So���쇶(h�ꇝwcn�-Z��S(�`�����SkeI�42�ҟ'6�|(�4<@1�G$�ׄSN�}ͅ�R����판{W{a��G��@E�����A�r�\�ɉ#�����r1�}f|�C�Zv���F
:�S��"t%Q�X�*jH��{��W�r����*Lu��2��q�H����K��о�e-�`B�c���H۹CC1�G'�^p��V�c�X��Y���8ִ��d����kFK�ڍ���r��x�H�� ���|�M��&�9�Ӯ��m��:�W"�A�Vא��<����n�*�Z{ۂ�8�$��^�Y�%���ڣ��{��o����g�y���]��|ݶ���:}��F9��-���կv��&���D��ܶƛq�zF�O3�UcEL[��4��^c���A��!#��t-�m�]+�H]��v&.m��|o�#�
��
�0��ī���o��(��x���!�Լ�^�m3��}�[9��>��VF���w�@0YۚvVv\QF���n��Q+|K�a)5��)÷�ۮh���͠Ƈ*މU����عr��k��vMQ���MuI��V�f�q��m(��]�3���dt&o��fMȘ�L]<s��Ѝn&0�q���
V�x�t��Կ���جqf�ù�]�}������/^��4&� ��k��f��ԋ�Ct�����a2���Mf��)m�k�|�L�3€�nz�v�{v��&�#�	j��j���/yR���3���(�W;f�-�`�l�����`kq��v��h�o���xC3<pM�=~oa�9猿�%�X^B�B}���cV����jQ֢t�4*��ԱS�����E$:*��j�A���Za}�g�a�����!Їz�n��PZ�sIc��sy6v�	]V1+�ײ�ѯc�oo���[��Z�1�R��Ę�d���������F���m�i��;@A�������A����i����M���EC�~M��ʃ�S���p�x�_0T~웎�>�L�˭>���m��4�L�˒3X�rm��٫��1�5��i�5Չ���i��7`�~�\!��R�n�@��#��Z�1؎crJ�*U�$��ew������FU����nc�TH<޼7�f&���s����d�¦rT붆�6T�^��#ɃC�n�j�~z* Tڃ��II
�?Kڡ�� �@������A0Z��P�RXȱW*��
�e��돷W(��)L�hڛr��]�ۺ��_��-]/K2�2pe~�Η����Z�??Lr��5$́{6Z�������X2�٢�6�)�3xl�A%=��PJ�2��	)Ȇx�}n[���E��9.���-�s
y4Y��z�����'z�hsn�]�%58r����Lf)�&c@J�ƈ.�m1�
��4�s�0��<�X����,Y~�+�(�����{'�[]���K{�/%�ݎ@�6����;2��~P�#ȷ:���*��9f�i�Z��z�;��u�AO�0��fg�7�2i�����J��H�*v&���u\�Y�=[߳10љ�\�zs�'�YFS�X��v[�Lz3��)B`�EFL����n�Mm�i�ϣ���A"tA���J54/9�^�����<B�3M�Lp(�)��C���22�:����b0��#���J5�s��Xx=�U,KDX�aZ��[��&�P
T���V��9~��0��ZU�^���0p�_v�|��AP�y���-����_�R���[k�0��+Na���#%���RH�M���ew�JY|���ʒ�%�1��#��eC�C� �3�i�9Z}�y�)J��%�U��ڼ��s�)6&O�p��-�E�FM�L�Bя�vWU	U��SN�*
��.I8�Jw�u��������j�n�oq�]��e����%�@��[K�{�&��ڛ�Pꊢ�Z?�Q��7�'��.H*��&w(s��"i��� T8'|x������^HbI��:#J��N�$^�	�>���uڸ;]yI�4�n��Mϔ.�~\|�L��U��u0�._��bŦ��p�8�<9���ϡl�L��x� ��K�^�r���=��a�x�[;�K7�ќͲQ�>O����4��y�w�d5TƝf8�~��!:�[�>�ax|	奌�½�?ؐ�kpq��\|���<y�D��=��N�0��~��g�7�P����¹J�M���F��Rޞ�"n�����*���/<U�2�2N���a�)�B݂-?w>Z�|��8�y��eD���T}��jx^������_�иē/E�lp[)#Q�t%k�w&�q+F�zBϖ~�F�R�7���7�e	��{��L\+�ۈ��%Z�������y:b��z���'?r�_v��u�B�w����?���)�͖aO�0���W�$��UI��	�&Q
HH01��i�\�ژ9vf;Y��KR�ڭ@��I�Ώ�.��0H�P�<�:I�
����TW��}��M)���9
Th��z9�&ݞP�P۝<�&H�&D�v��p����in� v����W1B;6:Y�����ZRBid��E3�((��-�����p�#,�z�FU@�:Ǜ��A
���\�p���E���TB�}��ɧ�	���32������B9
�d�w�6�BG�ĚO��2���r���
8�ZY#m쿛�qQx\�)�ǥe���7
ܔE��s+8��8���QE:)r���l�-����h�2j�q��\��,w�ɸ��!WKI��,��eF~�|w���Z�,Z�T��j
���q�߄�1f�3���׾�:�bCeR���3I}6�۬G����'PJ��)�·h���,�y��ª�t��L���O������:A�$�h��7m�Hm�Њ�wvW����֏H�s�I�/0�&���6l?2��%BV���g���i�|�M����+L��8���'N�n�*V��5�U�kz~�.�K��b�Rq3��juM�%E}q��Q�f�v�HБ�Ǔ;G���|����碋����e�
/�̣�������p~ڭ$���q�ν�ϗ�?�[׫��4�������}o�8���S�����B9��ꤥ������R�t:U&��$��R5����v��Bw�ڪ^��8���x~�q��Y"���O���Νoq|#�x5��ht�o��� �h�"3�fB��3~�<FY5I+(�(�A@D��8�C����\�z�m��Pg�hDd��R�)�U�CdqĀ����Os@t��\qp*�ȧh��g@��C.�PH|��ib��q�&�-M��Db����t/�]4%!TE��s��/�DžBAO�Jb���
�	e�2�RQy.�P�@U/�\.�2��Ә�@�O_�/�&�	#���`�f6U�)<�^�^�SN|zp�&�O&�ߕUet�f7�Q�=�	@u��z�{�u�5
�����T��v�b�=�G]���j���z�Π;�溮{�Ѹ��t[���v��ݨ�qw�w޻X}?tMG��UG�RX�	}�2IT8p�����jP����T�Ԕj�5��e�}�ż����k��\����\ǘi��o�EW����T���{�DNh|�hL�TT0�L.f:����r,;��x�d�vt}���ls��$"�^�a�����?�)`!�U�F��ȳ�O	NqD��-��iI1L��dL�ժ�*fhq�bv�mf��w�v]�@���=XY��+��9{�[�Tѷ>�0\��P�RN�t�*���A�H\���R@�=�ƪuT�9�;4����ο�t-JpH��el^�gJV��$7���Z�U�gt츫�"���eT�/��P[��E�~4$JB�T��B�����}F��i���m��I�pv�E�\��Sή!K�4Z���'���#Q�{��SI�[TuMհ��ȳ@�[T9D�k3�S#����k����X7K���nAԏc2�,��8�镬[�CA�Z�'`����.��ZšJˊ�Ȃ�?������7w����l��€m�5>Z_&m�1��`FD��
�f�}ȸ�߷�@?bR�}��ς�����=�ϋ�eQE�LBkX�7��
��;���ӀM+7r��lY��|F֘���]�H�P6-v�#e�f#e/N�h����hiY$�d��2\hf#!����el[�s�jB/�qD|]��j���Ӵ��V#�i�h���u�v�2Gh�tv$m׆��50�+:F&Rd�a���;Y�rà�����t�Ao�\�����O�PȆ�g�w)���(��J��
�8u���e?R�>�Ahv!���̚MO1���ޤ��E��hB��sai,�tA����]�Ic�vN�Ó���yߙV�����Q	�Ap%�b�&�)#�ȱ2P�m5Đ��ȯBa���=0k�S���*l,�|�;���r�+�u�����6o ������NJ�/0�`�_��`�u��
�`<���A\���`���s�B��5�r�l�h�#`jOkݪ%��Z�ϛ���ބ��I��a��������;���n�"��!����C꓄n����~��dC�YĄ�7?������Y~�K��/� ���q���JO��6�Gu�ԩ�@�~��,�	�6�I�u�V�_p�Z�f����i�\+J�����	��@��.Kv��<��I��
��%������z_~iO���^p}��;7�
h�M�:�sx���O�Y\^2�u@���}`�1y��;ӧ5�0i�5��E4��Z�VېFV��9W�M�s�Z8ײ��H���̜[O� �?�-j_疨�3��sS��B(j��ri'-%����X��s8��?S��f��X)�#��%���bY�,*��'�5�uخS>/3��Q�Y��������Q<�I�Vb�3s��C��(r}��3�)x��q��F�	x��%Ԟ��("�ѻ^8r	��n�8�p\4�'˼�xe�!�Z��[�H֦�g5�9/ia��w�
�S������<�(_P=xe�U(�j��k�&��)��S��coŴ)��HJ�����+6h��Z��N]*�\z��Tb�>��zv�(���n�#w	���m�sY��'E�9�+�m	���ɩ!��:ƕ��<�V��s�|�҃\���E�ü�N׺u�$B��$۶�xt;]����Ӡ���FX�,%�1m����pq�����!HC��~6�Lw+>6e�ի��f�.?+Im����6
ngLhl�Kڵ�8l)0�3����X��4�>�1�oSX�qp�M9Кxv�鳜�?�&�XA�/3��@�_��L<� Ń�'7(Hlu�aѝ�r�ݹ����m;(ĜX��SNt�1ϋ����oxV�c�q��
���,6E���
����p;
y���\���A��-:�����O*-.�t�rLNN-.-�4��l-(���S��̝]k�0�Skm�[Ga�Q�®3��@jD����$u䈌݌�+o�����(]�g���΢�F�=��~m�wP�E� ��?����ι%�����r��9���1Ֆ��{7����R����� �\���;���H�xt��`�[�{�tD*šכ)��c��������,�z�\�Ľ�Jr�R����<D�t�\L��(��9�U�9�01�]X�O��8+B���
�hM���yR��Ȉ;D�0�['��_ek���m_V��S���X�#�)]�j��Q�_�i7{'�$k*���,~0�"�A����mb������C��$�v~x���R7�ՄB`�鑉�S��&��~�3,�Rp�1݆�.�97�uefv��X(��&��BX�ߥ����Ĝ�X8���
/�,IEw���͝M�0��>Z�z�"�0����}۴ͨns����I_��6���D��pZf��U�n�aԔA��k�%W�QIe4�b,R�ݙ�T,��&sLD*����&�y�yH��9x�fK9���z�rA�_p��
�b������L&X���C�$A�V����b���%tx��0̖G�l�([ʂ-�Q��ܦ*U;YI�mՔ�`gh�1�����~��*�	Tُ���A�{)~��f�����'m����h�׽V���>�������n�+��{��8.�صK������p�v�����z���Թe���uI��`���\���T�Z�ب���d�fk�5�f3=~є\f:}�nn��y}������r�8�=_�(55Ɍi�5�,���1�˱gO�x65�$���g��>�[�)�%� A�$9��$��h�}�çG�W�8Fc��'����b�Xw۷��Oh��",H:��MɄ�ۊ1=*1l��E?O�t�u(|I}i]-�BN��R{ۊ��3�aD��D��v��-2�
"��ɟG�/�^z�;�����Õ��L�`ݫ��;ۿv�����>G}qh�u�ǟ�����'������f�����9]�N�����`�����9bz�#S�G�ۛ�7�wvo�s{��9�Χ����cg����I�ܜ�w�}�}`�v���D�:ݏ��l�no�3|s�8����q���+�8���G�rj_�6{�'oN��7��DC�IN��q(<:h�e�揆�cP/�XR��oJC�V
L�Dr� #�"x8�G_bB��r�:��1���!��3�����a;|"i�"E`�}��O�|���Nt����=�a?�"27]�fԾgҺ�D��K�}���a�fc�~��O(�yg��/R,�"��q9͸S6˘��v��tٜ�z�f�ȱI�kE�W8�(S��H�|:@��i�����J����c�fT�Ԑ��V�P��D3EV�{4;3�d7�d��{[[(��l`���vs��z�8N���b|�~��ݫ�j��� O�v��ġaٸ�>��ȷG�Ju����l!������FY*^f��:�x"EE�L�� �{m��bN�t��W��p��& �ߠ��r7aݢ>YbdJ�}������U�ȕ�g���R�%a�l�4J���I�X9}&�r�i�+6�tə�����J�j�teW/�gU�\.f�2we����h�zy�)�k�(���0�1���ZYqެ�%
(:~mTZ!�#Z���i�a[�<��L�I��}��	�B~L�imV�aY�6*t�b:����a��	�k(K�T��a@��:l7n�6���Ó�VC��Jw9f�xKw%�C"<�d“�EN�	�lk,�=M8
�4lZ�aS�W}Ƨ���V��3��
%e-i�S��Q��tT]��R�zكR��e��{����T%��sɱfc&���g�R�(-�z��Z�:�%��?�P�U���1#���^TS�j��S�"�ؗ���<Ex���%u�2c]�0�~lp����`�����#s��}�R��Q�e�5[�Li���e\.�9�Q�?aX�\���M`#�hd%[SFgZ�����tZ��<�c�WY��bF����$�f7y�Y�O{~E6!���P�6�r�&�:3�!��?�vFc���4c%��������Yf?}���Z�O*!U�Ef���������t�)��2����87m�0Ɔݓ�0�0��t�WoJ}�ΌY'��u2��f����?n���+m_�tB�PO��ۜBM��a.�1����Ym���*^�>�9]�q��ԯ�=�J^	;����OVE,��^^P�	�����N�
T(�Mdf8�ܫɕ&D��"[Ƭ��*
��G���q���N�֬1�Ai+�	�D5+��$�^�X�y��^�Ԍ:U?O��Z'?.#�܍eOK��/�n����v.���
%mrlSer�d��t!�=Ų���ǣ�.:n�[u�dI�58+���ΊC�~-ݕ(
�+�k�"�nv+c^V�~�A
|!��u�Ρ�$��н�R޲�����z���.j��.����4�����:���q�ӑ��u,r�������l�N���V�u�B�j��n%%���
�F�6��Z�Rg�ʦg�P�
Ifi���\d[��u�e����3�eҥdU���^鋄t?�n�-����{��eT���8�_u[��k�^B,?�(���V5x����߿%[M����!k����a�-�q� ˇ�Dz��8
`��/"Y���?no�J���mǕ̊�q�_��B��9�N��,��'�x�6���1���k}����~m!ȓg�^K���%��POL"�nj�z:VO�*�xJ��3���&�B��/�$��އH�ܫ�_6@�MӪ�}=*U������+��eF$C*�q����sDj��
�2rr�UY*��9h:�A�
�L̫��0�Hb�b��P#I���]�����i[�E�d���
k����jUΠ��Y��	�%�6�ߡ�k��kQ��7����ʊ˄R�;�ƓB�ޏ�햑,�����5�)/Iw�R�F���x��?����n�6�_!8�!ٲc7HE��C���!���JJ�n��ޙ�H)Jr�����g��!9/���Z�469��|���r˔��a��C����f2F3��2�/�ë]{�L�|P����~.(~�&��7��Z��\�|}�e	m��M�te�^k�M3�r��'�O���_e�x�:@���p(��l��Vv3��ɯ�U�@�����l��}i�WV�gL�i�m��z9os��t�18�C�)�1�2��`>�ض�gz�~=��0��z����Sd��;RH��P����.:$���\,�L��D�J�>˞��F,�U
��W��!�N1�6*��:MP�|gE����z ���p5�y�4��]6�g���>����%�s��]�kX��M����L�j��O-�Bk,2��#��sn�?���~3�{xz�L��kEo�I�K��k�&B�J��ͧ��]&���l.IIq�(6�ȝx��e�K�W� `U;�k�s���5To*5�v����ݴe���W�ʈS�;�7�V�l�Y����i���6�m�Ī�r��уr�j�-��aWY@��� ���єQ8�0R!���*X�ٽ�]�!g�Rq]����M�Ӎj�:�4O�>��R�O�_Q`����
�������p^��\�k�C�ѭ]
Z�6r�Fh�}1�b�}�Y^^B�3�P�B�kW��/���/!|u�$���B�D��_�&���ֹ��_K	YqԤ!fb�E^�Q��&G��D$*�^�Q�X�:�d�����c�"�i�s�j�+��n��)O�0>�w�vi�3�,�3����`/��*�a+�}p�oO�rO��-��Qx
���N�`W?�y1�

d
뢯��^y�����0�m��	�f��W���ɰɷ3�)��D�n0M�#�����wց�O���k�b{ڼ:V>���֊բ�����?e"�-���/�|	'E�`���� ?��-�W0�>)r���]�Ƣ��V�.`ؕ���9t�&���x&rm,��(+�I�x��aتq<�b8���a
�/�,mt#�T�V���T���4���u�OW`$�^�<�u�`J��SU�0��-��I��T�
���1��*��?���x�;�n��XDx�0���óPZ�݊U��V>Vr&��|��ͻ����ۛ�ݞ�+$U7!��pT�οW�u�p��mS���`S�ם	��R<����Oh��qSͱ^��t J��m瓡=�J#��&�m������`��y�"�`�,b�t��I�3�EȈl�wH��쐴�O΁��?v��Np<v��Np��I�ݡ������4���,��'��x!ƣ��\"Z�?�H��`:�"I&�to5)��*eR��90�@,
>*x��;6T���!�39<ڠ���$�p�B��
j��
��`/�{��g~�L��N�>��.�����s]�V<>6�ů-D�q�?dQIw_����[ˊ�0��f�lfD�g�F�"nB�Z"�B[|,���s���&�Jiih��4ܜM�$�?W�㿠f$�\��s\٨7L�;ԗ�>_k3l��cF�@ўc�Tv*/��K1�郢�:c�-�� �EP���p��R���st�8xB`��������`T����(��;c��$8`Q/�]ѕ7{/�U�z�	I<�E(�^�$�"ũ��i����g�Ζ�&��eƭ��/[�ԟ�\e���[��nyX)�~4�)h���C�<Qc��M�A�\�v�����iE�����Se�@���bo�r�:c��c�b3��gk��M}!�!����0��[���_$œ��,����Lf�FX;o*�Z��� ���A�P< Fv�v�T�0�0���X�Ր(�	��@��@�n����$~Q���%�M�0snj.xusinhڣ@7%�$13�X7�(51;%�<w����Q�p���t���]K��6��W�e�l'�6Ŷ�K �EloEaȶ"��$W��M���pH�"�!EY�����s�yq�#4b���:��x.���`��������O�����Pg��48�,.�UD>a`���Վ�~v߮�iI�Q]��,���D����k�%'�V]���iy�B BL�f�3���>�Yr5~{��ʕ�����vȁW�
��J�L";����V�WڑzڢJ8�NK& �<+�� P)Y�)�;��|�շW[{J���V���<�}�lO�v�sHЅs|i3�}�#֭�2�!�c�L:�s�S�7Q�&��⓱{u�˸@&`�%ǡխZ�d1���L�1���d.�r�Y5
�)�g�� *f����c��Ӡ�r�h�y�+Y:�;t��[��7�]z�9O�A��B����u�>m4��R��z�@Qt���#)Ѹ@��?zi���\���0>�&<�s�[Gw���8�lf<‹��
Zj�QS޹�
4K��F�y�n:���
H�P��|}$b�@����#'+ѫ�Gy��b��WygE�V"�H�9�+i��(Ǵ	�>���z>�׺t_5�X��v�
D�ΞO�C�s^ᏋB���|���9݅�"���3�<�l�%��dKz��۷0d������Ʒ\<C����^-��C��p1l�'	�C0���~�6��	�0]��N�q��h��'�%�}�)d����EEa.�X	��J}h����+��eIT�"�ؘ�LԇѸP�5�"�聩H]��6\B�
Q�v���R�����`Ѷ�����6k`:KO�<��`*��T��N(��	��'�p�hp�Ռ��M�|�^!�L��0�y�g�b��湭
\R���+pEq;���]2��,ڄE�˗�d�%�i�/�?M�� t"�gYL9{!+$������2P&��<s���sz5����O���DQN�y��\����F���͝�?U��2�������r	���\O�f���hS�brX���\�V���ˢ&eW�f!��k״@���c��/R,<me�Y8n��nS�>5Ȥ$I@H���:3��BJ�Ew!���f��P��~����.S�������)�k�l�H'�X��"��2���l2�q�x�u�<��T?�1B��{�*�A^rW��)�Ү��i��"{�t�F��G�"^��K�G��ek}S���3N?ɇ�6�-#�V{��5�M��bfى`5AU���>U6��B��"
GYb)o��u��ТD��u
��p�~C����M��&�����l҂�<�����ϓ,��/g�$��
ZT�y>z�cLC>��_����(������b��d7Ĉ��#��`�Næ�i�_���FJG�ouBk�8(����~^c:�6��Չ�Z3o�Y�u�z*%;�rR�ק�_��4aY-�zV�,[i��z�RgM��ߐ3~���t��6��,f%�Ҍ��:vO����>�\}G�C�R�PZ-�/�l�vIa��!�\f�ȫ�V�P(��m���������4�D
����f��!��.M�<
)V�ܳ���.�[�f,�L��3�`e�A�?��+�
eZ�",�
��N0���Q�HY)F�h�5��9��y5¢
�I�B��0�1x�D=8@���3t	�8�r�x�i��吝*޺������I��S��Y3RZ��3�~Q��͖���X>���y�U/�L}[r8���Ϝ;�2Y>�J�\���7R&CI�	�4pw�x�O�I�S/h��Z5��)T�r�y*�c�o8���-c �g��p�˻�&!�^�9n$׬�
�Q�N�:
�BOGb�G��7�{Ȁ a��O��'�I1
�U�]-9��8��4�����R	�5��h�4�J�uKk�:稲w�]�	>��N՗*����Ջ�hU1S>T���.RhPF����I9ܱK�t~����H}묔㷾�Qq|�_��ѿ�^ַ�;:��BR��@ۻ�m%-L�)u��m飷�Lݔ��D�r�;�2�������"N
5�V�.t�qZ���Ì��,�P�u����<R?�G7hՇK�;�m�'Z�������8?Դ�E�B�c�ˏ4��v�(�4����c��隨?
	߀�KM!h&?�~�*���&�q��n�gj+�=�aKB�z��˳�#����3� @(pn�6Rsu�N�y{[����*P+@+3M�!N��W���4�*R@�:M��B�I����-�D4Y�=��2z+�C/��r����D��ڏ�5�4��(F� �	��2&��|*�yn/H�pE���o[+��xsᦃ���ƌ�����n]Ud�l*<�v��d]��m!�67cΊ��V���L�9�h^�%�xH�#
��b�����k��ȳzO_�գ1���nW�����$�З�I_G]�����]铣ƒ�W�_���d;^,7H	��e���o��_��3}LOϛ�[;�MH��
����ʬ��}���8����7������>/|5��6�At=ݣ���^>��߷��^�2�!�����ciQ�׹���?^<䥬l��_�$��{�����C�v�1����@��}jiv��t�=�D]��&���������{��K~'{�n=��?�?�^�}��e���ސ�~}����S���r��恗����>��JEw��^�)�������p�‹^���a��
�@�A���pa����·�j��X�g��q����s�t~��¸�Ei����Y���}V�߂���9
�=�5�gM�<���_�5�P���v_���^�
�/�DX,���%4_!������_oG9��g�?�m�2�;�N��O�~~M���%~a��Ga�㧧�No��Ss�7�Ǟ����?n��u`�����韭���׏6�o�ǜ�Ot�X�Gw���#�3�����OfT���\<���ϛ��z����<�S����x�*�c��e|k��?�5�3��1j��-�q�o��_˸�z�̫����S+F�������0�|�p�'�=���f��{�_�F*���g���
�p�[��h����{��7��hg�����G�������<��高|�=�tc�7<|�i�4��	���Q��`a�9���,�[܇�5��-*�#j�[e�N?��)�/�	����E�}=�/�TO3�����D1j,{��v��r���Kmz�G��ٵ���/�o�.}h��(�w�w��Z�\��R�OP�7���;,�*���r9��w�u���7@�O���4g���'�ݞ�����%{nmQ�V�=t��9_ў|�v|�G^��@?�0>���'�;><8>��|���'���=�! Rx�o)�w��C>��>�/a��W�S�a���{�7%��z�g�/��C���Vλ��'���f{ڠo�^�"}_���X$���%r�M�ϢO|�x����m(���̃�n�6�?"�<*�炂X�$U-X��a��B���ۤ4��$/Q�.>&��"�*��ˉ�,y�Q �VwtP�CP^�ҋ��6�:��W�X�3/�Y���v{9ޥ��m��n�d!Jɴ@���j������Hg���e�Z���:9��g�OW+@�-�����#2�P^Ƥ�$&87T;�2NK�>͈���v����E3�i^r��E�D4P��c����4�c3���� ��՜�[�A#n&'���9?��)��b�'i�S��B�hT\_a]��qst@�%++�0�P���H�l�#B,��g+�r��;`8N�3�[�Pr�Z�d{/3�ZƝb��}�5���:ٶ������j�уE3B��)�W�t���h+z���x���8nW<���fA!�#�3q	��
[�W�p (&rQcP����Iu��
��$0E	;�]��C\�ѕ��S�7S�]`�C��� ��G�k�P;E��IF�I0�FĞ�#aO�Ј��"�X��}�!��uW�"�%�qnl!d�"f/w�弭V�ώ��N�֊�ȟã5^qܣ��	�#8M��v�z���Rc
V7P�BN�z�/5wiC1������Y���6�θ�!v�]XL���h���2H��Nvm4�zt+��8��j8؜p��
��z�l�3�%�����L��=�`������<��p
١�u
�\o��f雞��Z�cK��~V7��ɘ!��|
V����:�^]�&pZ����MM,&hw��~��l�#�)�+�$2%���CEu��ܞ�#J-ݰ�Iu��O�@?u�i�L��e�ReĽs��ሏ�`��=Ȭ'���̇�qH�ܨh�$�U���A�[��u�L�>A��+�(�^�f/���R��
�Zܦ���ؖ�[Zق�b�&��k�b��+.�ǃ����\�0�(
=5�(R������m�v�S��x}������Ns�#O��� .oi@��)
aL�5+6�s�:��NK�wA@���!d6�̍x\�
���!��(--u�*�ɋ�Z\_#�nC[��|�:����Z>3
��w�Ǎo슲MF�n�b���ɶ6��0͌��";?�;��zR,e�	R�X���H�>(N�uU�WS��v��*9���ґ6�s�<��$�!�x����!%�*e*��^'D /�Gbn+�UܛK_lr�c\%b9�����|>Cy�*��#"�mc�KgR���l��Wf��E�00�W��h���M*8�,ܽ*�i�%�͋r¶YY!҈C�ܧ�l����yA��'�jԗ�)	*؉�+O1F�u�x�*��(�|��(���i����]��r(�>��:"�u/���!�e��
ol����ɐ&�'�Ç��~����n�
���ە\L��l��P(<�W�Ј�0-���>	�'�tָ�٬���"R�]���;�;�:t[���9A)�%*�����}� ���x���Y/id�,�RD|Qy9	y���G�Ft�p�]y(7�i-|,hlNѱ���
7��@S�����Ւω0��O�ͨ@c��%EX�CW.�W[_�b���Hi�vBD�OG���!��$����O\�����Р��3Si%O\�p�v9�r��w��%D�+Mj:+S�R��ܝ�x�6��VV .��8�1
��*+'��_�hziE��	�>��.<�A���@�kń�'c��^jp��Б]eqM��:r��9�~(�2J��a0���W��zp ��:����ԓ�2i�,O'���`��T�[���L1���c��AW�$�:�E%P��A.W����Y/bI��Pr��ru�G�1��R�|7Sdl���c‘ں���vˠ�/xF�f/�g?�K�*H�L�"�R�OF���8q��B�g�b�?y*����&8Ӕ �I#�\6h�-J���i{9����iˬ��h�[ZuW�pۈ�[�JN��|��,��'�������h^tn{��<_�[��|
�;}������ȅ�=]׃ �m��1Ҽ!l{2�Na�6X��58l`c�
/o��(�Gt�3��˅��Κ
�f�FO]3\��mƢ�9��Kk���M'��2)��j�V]N ����+)��*,��%B+rd*�nm��8\82���6R��X2�r��k�B#/�D�xy�*W��uY\c�p.�2L�E�sQ�<�kg��X�l���E��~�Z)</r?�,�v�G�95�M+8R�"+��p��t�ga���<ϱ�>]1G�-=�mY��a��I��`�xt6_��5
�h���l���b��4��mos�j1w�
�J*��XY]*����x�g�d���Fv�5���%�C�2�&8�+��E�N!�87������5���yΧWh���ѭZ�T���ڡ��Э��k��s��ʔ7�����F�"����a��<*�-�6�x�ƃ���|Ui�hmnw�Z�H�����|�yv��Cݘ��e�;l�}��Ԩj1�$�5U�u�,�!��O��	R��t�X'B�D{�t��#_�!�2�	-�(�YkËh�[��D2ʈ�%K�E��vU���
%;�Щ�^r	VבDa�4��s�^�Zj���i5�s��Rh�uwZ�mP�%�y�N[�βc�#�^Ҙ��nt�V��Cp
3m��jS�mcְ�)��b��hQ�);�"��tQ&���m�p� �s8u�U�"���+9=���Oe!�*�\�F\^�;���ա��Gb捛��������-;}:fea�Et��t�k�:Hg)%�"��_�$�-<ϥ�L�5�߰�R��B�c�-��֌p���EÇ�KAqfĝ���!�.�o��(ՍL�&Z�Vubp)-#u��i:�tI)�M��G����׭��$�����s&=�ZY�+%e�-�3��f�1���`�����}]_*���D-�����|/���}��W-iN�cO�'P�R��;�b������F���[�hțC����i3�-�#�`��>��4���)lՊ�\a%��8��2��$�.���Co�]F��J�������x�J��Q�Ǚ�9ɲmmFh�Q�'T_��[;G���Y�k⋉c8@l�**�%�� �6T�
��'�L��k�w΄-����D�~�֩�6�-����Ѭ��c�M���)�vƁ�:2�)��0%�pV�;vqZu��k'4;7
���#��/�	<��𥉧A	ybUc#5��$2\#�����d;��<>�h��s�"�HG���ZR�Av>�s7�'jQ��8<���VI�z�u��19��ޣb�;*u�~��5
T��56�.8��
"�RFE�H�b1<SCs����$$Td��a��χ.��c�������S]�"ɔ��_��g>Ĕ�i
2�X�Z]+���1�u�4k��1�{JO���,�KNN�{ȍ8��wj
���ʳ���,Mג��S�Y�2�I�d��"��y�.p��m@g�{=k�%�M�(�y���,��n�^����"XfaIx��PC�4e�v��`	�I��Z ��O�R(�KM�~��DⶤVg{'_�x�G��SK�R-qH�&ΑS׋��6Z���Y��~�ጁkN�����O�9�B���/��bt�-3��fy|4�����O���ic�b6r�I�~X���y�P��� �D�y$�ٍ_�i(bpt��U"��[��ok���c)���<�k�	V����ފ�����k�/4��F����8�=1s����~7�5tjsQ�7��-{l�XF�Q@����i�P6h�˞=����Nْ�[����d��5��{`��/+����#��nC*��|�a�1��!�c���EuŕC�R�
P}��f|���,�Ҋ���%=K�,�ϒn�T���z�o# /
D��Ξ*y�t�0v� `�):SYG�`sO���Z�؁�<�����F�5 �{����l�3��>q��T�x�r�)���ٰ���B�W�a_삐��C��WBO���&J"{ʅ��"�!9e�ߋJ)�`Y;uK=�2F�h7ȫͩȒ�悚�^��S5 P�K��O�0�}���l\����&q2�;�A:P�W|�'�j�=V�S��g��I@�xV��j����>P���^������}���go�_���_,�dƗ!�7�y���U�>�����=_c:_c���_��!�cp��Կ|�I������q�wu���y���֜o+
��{w�)��l�GOP5�?^�E�~�t@�v��_��>��!_
`��_�v�?�����U�@�o������V�m�-����������[�o�m�������]KO#G�ﯘ���
c�bmE�f)�h�i!��0�xF3ccbq�9�O�/IW���1�1�h!������뫽	o�ߛ�&��	o�ߛ�&��	o�ߛ�_̈́���.�]��elRnX��Q�Le����3v�銍�����?��w�9^�8i:o;�-��ƾ-.�;��9���5�:���B�&�N��@��a������
�Vq�_�%�w+h-#��<&�|�I������\-����Ey
⹑�����T&��'�d(]����\lA<��l�Qx�4�):�l�)E�x �P/0�α��
��Ã��`}@FƢ\ϭ�ݭ5�(��K���<Gu���ڛ"B�X���A疡����o0Y�g�M�ZM
ݴ�r+HG��r��1�xő�����n�%A���g�n+:�SPo�Io����4�l�r����>o>��49��
�n�&�O�ojB�kg�<Ok��,x�b�(�˓�8�ۯF�A���a�[ѡ���J�o7����Tb@)I8��7On�q�'��1Y]B�R>�5���l��^��"�T6ߌA�Y	;m��m�8a�(q��ADF�+�s}#c��7�-e����qų%J
'"pAn^����F�Yx��`&]T�&u�uܐ��O���H�	�����Vps���U�x�xK n�q��
���s@��L�m�����3@�ؘȶ�P���Ҝm�����g��Gc�3�e��	[�M7eӨi�?��|�	q=�)�J�.8��pAD�I����4��l�<\e��m`�TX�'�$�q�g�V����u�@u���v�p���}
���1��Ӣ�)�M�s�MDT��^�_���E�b�����:O���!�7�_�1ϒ5�q��.u"���z{y+%0I!}8�ʆhpNb9[����({��%��Jjtiyτw8�x�1'E�I5�fU�^p�l���*;�U��X%^EY���"���YT3k�ҿ�S��������
d�fKu[��������!�9��7ˢ9��G��Nu�^��Q���K�h:��2����/+�z��֛����j+�GI��(l������yoHE�,(�@��"�N�8�����鋍�(����e�W�h�jH
�������!�ӗ���ȋ�}���Χ+��`%�
���q��<r`u���)�=G�aH���͒9�f|���/s���D�S*�|�dl@%�ʩ�c�O1���UT����# �@^�]f*�3|�-S�Α��:�_R�-*��y)��%g��?A������n�
��.����H7�O���,���"��Y�.��ɓ�T��	�p"Er'y�Z����mH ����?�wZ�;�r#X�v��Xw����I	>�9`!_is<c9�5ɣ[���LK����F��Y,��`X��r!�X��>���@�U�40z�O��UV��k��`5$/ ���"�`S�[>$��d��J� X�3I$_.�"�(��N}1��0�p8z
�U}��K/�s����<��I%>
��yxop^ш��|�L�~fC���I�4�m�Z��cyRK��^ui�Y^V]n�nRE�=t&���4�P�Z�������'P��.�2s¤�*'ר|����O��!���x��|gH����rl[�,�+����������,��<+�́��C2�u�pɔ��`ؼm'o�ƾ-�eCX1��[�]_����肫���W��+|�GX��
»�]Mx>�}�*a멇��c���K�އ�Ռ!h��M+zC�͗�3�3�VKM�{o�yKwЊԟ�]�$h���@�����]���g�9�_��sSdh{H�p\p���ޝzh�1ֈ5 ��d_��mD�Mb����D*�	����|^{�C&G��Obh�Z��a2��`�ߗ��C�z�F�؃�[`8���7R^0BB�l~4��b��,a�\g����J��̌�������*ك�[C �A)jA����b>�Ԑ����qW����i��"ɀW��@��������]�n�F��)

4�e�rก��1R�@����!���D�D(Q )+v�=}��(}���.�%�2�&@b��������FSz���L�4^��Cٻ�Z�j�[%�.��⤻LJ6M���ϻ�J�|S�� OE�����RiU�����ɡ�W~�v����- �݊�X��V'����q`�4m�`��jC�!uZR9��
�GFZ2��͙��2r�����Jv)�@_�X��wZv��ETfI�dY���p�>L��������l��>aƩ�WM�qg��l{ME¹��E	0[e���х��l;�询��߄3*:R�x�z���I�܌���]*�8���?fa���Ϩ�y!�[BX�=1�7s ��g��!�>&=��񗇝����9P6F��T�$�?�V�,!:�H�t����P�^u��Jܖ�L�n� ��qv��%,2�������'�g���z�kO��ۮ�x3G�&R;�P�L���(�v�i;��/ؐ'$�� ��)F��ѳd
EZr����(IF7�`	�.��b|r��F ���`D�Pƻ�����s�)��}�9�w��wޚ��`�����2\���]�:-�5�O�'i@M-����-�K�f����9$�P&,�e�`$��s��!)]�Pd؏rA�_�L�ʔiHp�qW;\UTih�%�����$�ӻ�/4綣�^+�9�N�EK�e�<XAŰd=�
RA
�l�]��w��n�{o�@���]0��o�-̽S����
��AxO�i4됀[��@S��ϯ����C�����)d�~wɉ*0���j᪅��u��g�W�� �֏;$�7�dWt�T�J�	���e��u%<�
��}�ʕ��r��eϮ���Ks�s�&�֐��"?��8Ֆ�<����?�t�~�`Hn�ݎP�Q�m RrCm�SL�7[���2����$��&�m����slU4l[���k'eX��\��8�ꗓh��Zl�p!O���(ɘ���4}F@K��vl����ٖ�$�a��#��(��~�!c �	IT�
��$�"Q�-����9q��Y8{j�%�R���JZX��*��Mq��up	[0hJ�ܒT��
�|?��F�r�� ?e��S�T�W�ֶU
|[+]�b�U^�ZX�%�VT�C���N�2I~\�ci�����y�E.�@9���`�
j��j�Z�Q3Z�>�����\H'���T,��!f��bNA�	��Z�>O>�Z��Vy�ya��(N�C;aH�IY@� X�M�gڄ�vE�k�<��pŞ��+�u�פPg'B���ϹZ��
`��
��@vg�\.�Ǚ��TU���d��#�m�E��yM��{�E�
F�y����j�w�c�]�*��%Z�$}��0o�P#\�#�_R�.��z���ʤo�4��M�����XaP��'�U��'��1)��~&�_��M@M�Y�+��2�y�`�`T����9��*y@�fw�:+OSnD;�^�Zw��z�<�o1�N�3�&��M�����-)�U1E���4@��fԮ���՚\�Aֈ���fZ��#�A{Q�}an�����G���YHiիS������תf��\ط�hL�7����Elz��Pxd���[�͠&�/D���?�A�3b������]�n�0~��Ǫ��B���ZP����ݿ4I!MR�\��9�@{���$�V*��qr��gǟ
;�e���I���D1�����K�2��~��V��Z"��N��.��6��!��ی�-��%D��&�‡�g��X�� J��ШV��T��AQ5�x�Y���K�-% ���JK���g��,_����=w�]f��T�����\2�@W0�
XNTq��qw;�x9Mi�]���n����?N�F�B�\^-�Ҵ���4�E�ƾ*|�k�Bԡ�X�v��"7��%v�:.�U�$��.�WсA���djՖ
>�[��Yv!s�!4j��P�H����GM�K�׮���5��T��v���`X�K���:�YAH��bK-�,�����-5��U�O���ߥ9dB}-����e�y�7��M@��&���,h'	 xD -5H�����"+-��lp|AJ�>,
�0~��B(ˆ;P�Fl�"Lŏ�	�m�4D96�,8fX^bS\�����A� s�2|A�����}g���U���S��T6�;f��64���H[`D`⎈�7T'�w�C�BSh˼ɴ�gB!^�Z7B;��^{�CΊH
���U��H[��eNmq��@����n@�҇�}P#��v����B]�蘦>9�s~�r�y����X�7�6��X���|�����0ý��
ƽ���mp����N�/[c󦷽����?kZ_�n�=ݾ	����-븵��3�����k}������r�S��L������4gA��4�ǭ��*�k��F�g�
~o�-�T1��]EͿ��v�ZD?H1
#f�,fƯ�/g��Q�>�]�9��6�lj��i�ip=�	�
�/i�ND�Qt�"�C�(��ο�S�IB�g,2�L�O2
w��Ck�=
��[�x���*9�~�.��<.� ���o���޺G4x���#]�p�H�+�Ia�: JC���C�) �N�-b�/}F�z�
��lz�(��r�5ւ�����ؕG��q����3��#d��9���v��)D=�n�8�Љ��
�QB�?D�É����(s=(h�hC�FΣ��.�)���`& 5P�/G���!M�(c&x��-N˖��@�`Їa�;zLpq��s|�˲@�Z�@]�\j�A�%7��kOX��Ùu���n�&vɋ�fO:�Վ���feK��8S0��0A��>=�+�F�fzQ4TvT�d,��,��;���I�g�m'`e�{"ʙܟq�vK�@%?O̴��H7��Wf�`�1K/P�w�dQ�� �������pƃ��l���0���nԀ��@\�5��(��%F�r,q�K��̢�I��r���㈹`�L�2�Z�J&
 �����i�U���� ������	�޽�h$���^Om�k�?��h�Ml޿	݊ƥ��#Q
F&�,����o�Gk|�w���8��:w��5��B4�B4�gT͑���$R�[.��ͮ��D++�h�vn��ӫ�b�4]��A	�ʾQ�d����B�ư,Q�c�L�=\��@�ǂ.,Z�p�q���r)I��f̧(�� a�;����;sz:���h��ٜ�I��YEpsis4���û�@iG�;���?1#:�^7���y�-  ���n���73��(��~C��z���'��Wm�w�Z�<�=�eYQP/a"?T5�x��ȱ{�
���t�(�&5V⇥���t#�����>�e �Y��(��Z4"o)�m\�ܘi�p����r��wP�{u�/�x!��٠T(#G��C�Y���'	/H�����DA��]aE$P[��ߊ7ܨ�M�������ثQH�m�~C7>��@-]�w���wql�_Z��'!7��h�����4�34��L��-���]F�	���*��K]���cq�̈΍c��Y�S�C���J��Bi��_�r�^�pk�h�c��w�4]�P���ھ��[��Ux�G��!Y�Y%����%\�T��FϲJ�w$����YTz
�/Q�T?)���v�x-o44�ح��������|����c�g�@d��[Sǡ(��Ni�zn�v��'��1��q�^>��0JvX����f	�e�M�qi��'�������'X����sx;
"Z��߆���,f�%ȩh	�ga����a%(K��W>#>8y"hF�T\4h�߱��';	�5�m�a]��m��0��8d�������΋��3��8��!��r�$����g{J��.˪�C`
��թ3�~���6���v4V<�)�U7������A�M���N;�3(�oԿ��o*r�����dJ?/�4�:����;ۍ�P�=���D'�����}�Ɗ�kwZ�$�]k�ϧ����)/|ެ�,�����~Q뀋�G�A��sď(l�2���W�|`z���U��S��bT��o��a��^���=���>x�?��N$F��n
�At)����<��H��]ͮ��$0�H��a�g_�r��-)h�5��g�T��T��b����
��,�)���g$Ć#����h|c֋��֋Bg��oM1�X2��_�S?����]��V!��L7$3NÜ��<�&Z��@�H*�_D���jn4�a�����e	@0H[d��E�
�x^슱o�R�z3	��]p��Rf�`��mu�؝R��dy�8A�B�sC-�c�Qr�P"+��)IT��F�8&��a�^�?���vc�&I�—�ÇB�S��?L��>��W�S��Mz󆷷�}1����
��7�b<��Sn`��^�T�^;˫��j�P��������~u��E]Q�&�Rn�nQXUG��J͌�(�8�� �M����B1��p�	��_pv�3�i��/y��C߬@�㹂O1]��s��4B,,M'p�ہf���T��8����t�B\{y��������5��e�1��'N��!Һ���n���b�o"\8�����4'����Z�V����܀��K�<��]��0���3&�O6��q���S�j��4�'�[f^pm3+�Z�|\�WvS�&�Ҳj�_���4˂�BmPl3�zo�`����l^c@��}�d�ҧ��?B���FsW���D��)�c�W'�z���,��a�č�|�j���H+پ�M=
��L�p�Dқ���7p�bQ�{���G�=:y��oJ��&���j:N"9����h[�8M�[���9^q���C���ڢ������@�ok�22��Qu	P1Gr�@����%g��:���r���I�΋(�8V�@�^��۳��p����C��Vv��z
�~�:���Gz���,:�8e������KD���x���jI�e��Ş��d���ϛ
�?��cճ|�P���֘�Q��+�	��5y�Y�+��n�n�(��ɯ�Q2����a���ϖН�+����FM�=�L@r8ӑ�M\g�Xk	e���kN�
4)j[��
���p���<�ߎѿ&qt�k	]v�7�醂c��_4�6#/��3�!�Y������ig����%aN,�5�c����HI1xg��&ۘ	K�-�K&Z�������9���njQ�
>����ʼT}�Z�� �-�q� ���M��s]s�8K�;��o!�Ȝ7�s,�th�Y�B.�P%�R��hw�=�1���_���c7��i� <� ��v�����!�ZB����~$C5����PoQ����L*H��)�z=��^�a�j�ڛ�!�PwT��2�ia��X\�n����~C�҅�ԙ��f��
c�.��ε�W<Ib$A�ُ����݈9��!�>�1�Չ8Y
\��"��-�O�;� O�D�UM��4֢0N�LEMwV��(�,~(_^\���U��Q��#3��>`��†��݇Ѱ��I�Pxwa�YȮG9ֿ�B�p�	n�;��9;�������[}�}�J����׎�̿�����Vb�6��|���zr�U�u��� ����{�+Q��D� B����D�"̭���*@�!!?g���1/�68ؕ'�����,�W}m"�fX��q�?Q#��>ҵ�O��5;݋�����_��܁��
��A�i��2BK=�&�cfza����A�� �C�T�oH�d��!��Q*s��諾��J�r��_O�S�U�O(;mD���`�\���K��b2�d�Y��K ��_qi��rX�-�|��p����l�&��e���)V�hH���O>˜��!�KgV�x�$2�rfAӄ"D[Ν̇�Ʋ�pφy#�a��5w1��0$�yJ����l�|xxW*UXt8W."���|�>$���J;Q���+9�2A�ɐڃB�ہd^����ț�t��N���w�#x|��Tr�D�t���C��K��7��2$�\Xv�2ݘۅ��܏�F8��~�%�R��Qm��I@�d���u�a%���ר6)\7C���r3�F�j��ʫ�"L���X��$;��v���Hy��+�
��e�*�����Z�R	fx@;@"�D2$h�� ����g�Jߴ�����J�Ga�Y|b�U}�,/��ڦ�gDS�N��>����ܢ
�Ґ�/��Ų=vr6(M�M���K-4�wmG��
�cS1�����Q4j��`ᄺe�x�'b���$�VZU�O�L�o]"v_0&?��@��2��%L�R�e���k�D7iP_Iao�����alZ��X�c��D��X�K��f.�f/�"H��� �� �B����3?�jx��F��U�.�j�k�9�`�8���;-bŭ��ׁ�KG��ɒR��v�F��"L��� ��•fd�Ο�N����G˳7�c�i�����D�d�;��Tu]:��x!����q$��H8`2��:�J�>n2M�j&P�y�c�����2î�����Y�h2���������,R#q���`��E'�1��L��]~��`����@�A��l���8N[ȳU�='�Dw�z����)��k.��=��M�
P��,[_Ȗ>�5i��i\��=^&:Z��Rs?6_dC=�b���3��'t9?
{b�~ªo���_5�bȇ�5���%	EQ7s\)pGvM~y�
s�M��I����C<�V�*q������$˲��Dϼ(�F*�&H��i��`R9Ї;bm*�Mn�����2��R�,���XT1I�K*�I((�D��"�v9Ue'��;2�;u�x
Dsn�����3�U�,��db�����Z/�i1.�;5,��<Q�0Qc�
���O��[+�]��(Ix��~d��j	���M��=0J�7��;J�r�}�<=S�@AT	���b3
�H6�Z��a���0�$�1�{7_���ý���ͱ��눻!�e�ՙ��5�l"��� �p�՜a3
n��g`��u�k�ʝ�H4�?�1�N %��:�c6�S�A��>l���a��(��2�1ׅ�+S���2D�'NS���h ]�%NM�ؗ�0_�w!�{��!�X�^����8��9�*�̐	w�߆�
̆��S�\�W{*<��*�$E��W��x[.I����o�?*i
s�/ϱZZڹ��>���9�Q#kM���=�
Ĕ�7�Sa(�Pans�:ڐ�������4�h�0T����WU�
S
�;��HQ�5���
[��n�k�K�EZy6~QBз	�?H��ɰwC�[<�݇�dR���_��{���C�v���u,��QY@������OY����
z�|9Ѥj
�#f��J�$�<*��`v|Tyk�����q�,
W-?cF�q�`���)���GD�ݕ���j+깱�P�f;^�meG�T�܍���x�t���L4?���a�����_��0/,��R�Ua�i��y����k�t�y��I@�v5m��tPsZ#O�)�J��X$� �i�/�g���A���g'�\��&�V����Sχ�F�K(�;R(n�V�R��6��詜��	��o��[����m�1�	�<�qL����	�Q��"T��%ɛ��G(�JL@��/o���& y���o~_K�ճ?�ų?_!s�&�%�~]�!�q�{��_%����/8��op|hy�ʞz<7R����'M`���Ԛu��m�
9�/u�����8��:⛞Z�9�Ԣ,��sB`�(�������Y�9~)QP��6���0�-�s�wą])�X9
���&я[�!���߷#�#�'���z9E��;�"�f�ȭ��+�(����g�mhUj��Jm���T(Y�0�u�v
�j:��)+���k��z&x�3�G���#E���<�D�[�^�6R��&7>x�'��n?7��a���{��_R����X�Q�����\�h*��P<tKdf>
2����i��~�u>�&���m��_�?��ߎͿnG�q�tQ�>���<"��n���q!uu���/�y�u����dqb�I����E׺4��f�=�B]%a��$P����&o����/��ɾƥ��d#[j��~����8�6�C]ӓ�H�����a�Z�����J�zYֿ �1&q��`td�,�6)�5��e�N{5j�h�\'8^��0�n��1Ŭ�u�X�#N���A]*V&��
���2]��c�I�u�ekL�Ɔj��ِ����D~jpА0I�����F>��w,������5���{$��	@�=nA��@J���;�A�l��/�'�Ra�?tK���}��SS�n�7�����Q������� ������c�Ό��u_	����F�ݧ�irG�9��0�e>�"h�eyb]��q#�J1��n�s�4	�.��Qu�$�ӹ�_�r�1���`q�i��+)��
�~�RDŽo�\���7�)�B�}�0�8,�
����4�-�5��à4�K��
�lQ�p­9~	�hO�%f=<��x����=��l�X�P2�}�O�ʙ�o��s���Q���-)tR{G�y}
�y��HH�Њ�m����c,?�^Fx����g.�#�;.�u��*�l8 �`7`���?��ݭxp}J� ����I�+��{v��&��jA�A�'㽌5�72���*��0�!)����J�$�*���^�
T�>�ڃ��B����'�u���(Oҗ��֩�@X����)�ܞ��hBrc������
����K`�{���pqH�{�vm`%���i����2S���?���X�B�w�g�e��V����W��ak$�����۵Oֻޭ��8��	��6�����!��T9���R5�h���;��k��͢8~��
�%�G����d^RU��^�J���9X�P6��T�x%)�<ɾ�i�[�~���P�_�O�r���q���/x�gN4�Q����v��mE��s`[�§3th�6tr�M�!�#�3S*4��m��s������F5D��xrr۪#e���x�X�U��.�4Գ�: T��'�v=n6�-�����������*UյʥZ1�AvZX꘧o�Rt&u��6
��g��x�"��}ޝ�J�W�&u�����[���=�B/�Q��ck�q�A�&�ij},����t��Qr���J��$�c�
hԦ�Nq�|߽�VD��<��;���vH�.�1�2w	%�h��?2ަU%��g����8���F�$b��r|��hK�3��I��w^���v|;r2�w�#����$k��r�:}1�rkT��i�p��5�em��j}��z�/�7���#��l���ն%�NS���L�,S�%������J�`�)o>s�O�����ه7ٖT��w���4A�ލd����Õ��Ē�!,G��-���L�.7��K �ʂ�R�:{Cpk`}�;��i�G'�B<Z�VSI��.��?ͫ�(R���z�n{Ț:E�;8�h�Sܧ�n�dİX-�+�>����^y�Cg�-�G�>6O���W���X�R(��܄z.�[��+b������M�M�4fb�'�[����K����nD�f�ġ=9��G�v$5�CH�9UH�EJ�9�b��Y��Ȗ��+(��і�\�m��ǵT;�LúJk8B��Y�����r�+�E,�lw�c���/ʰ�ﵐ�/+K����$�4tˆu-͛5��f�q�=,���Ϭ�+�����[���ٝIL}��"7��q���T�n�,վF(�d�׫�~�'��q2�`�B73��S+�{�:X�����`M.��#>�C'#y�
��p����a����Q~ɧh8l�,��p��f�?��/H(��|qh|�~B�Nh��G(}��?�Ñ���W�.�%�L��.��K!�~�b
�+��G�Ϻ>�^���G`�2���H�P�3ڬO�J��5�g5�ނ#c�3���m3W�	��z��sن�	����wa �m0Y�'�k����j��ع�B'c^<��{\UPˆ�U���[��w�%�I�j���%��Ͻ9zaW<v{/H3��5FF���.�	��j��Z��K����k^8�w`>�&qDv��ǥ�g�޻y�"���X��&�V(yj��e��\"��q�[d"�ϥn����
B��h�f��WfVqE����q#�]Qq:�0\w��M%i�>It���H�Q�K�9��>G�P�Ԅ�
҆"G��>�&D(�.#=�� mn׼��I������{�<D] (�ff����
���,�gZÿ(���ˢ��
x��,"����)N~LMp��"#�� _��s	�����i��;�@G-6@�E4�ȢZ�v
����ect�w\X�͋��r�v�=�x�s�F���S�5�����\�긙T�{a=�n���Q/�O���C��᪲RH�'����oڲ�:D@ʢ;1�.;�
�Q.���EB�K�6R?.�:lݲb*xSb,Jʡ�����(�\İ8��jf�]��<�{�.!�5�=�m
���$;5(B���;M��*�!���d9w`t�@�u���k^^��1��y-�F�vO��n��
^����k��yBR��#-C�:�H��~��g���"Y�\)�j�ZY���޶�09������/��#���IQ�����FSd~�k��Ɇ��Hq�>R59�{'��.�J!�f^.if��3H%^��1�Pp��u���`"â�
�o�E}o���e�7�R�P�#��v�ȃb�fWp��n)��p���^���]/�,扎�Q�u�O3a��J'b���	{����{!���}���nJ����ŵp<Ζ�
�B��y�ӫ��9�nyq~E���V���_����i1l� ˳l<����}Ÿ�����+�O�Ɵ�=F�Ei�����@�ܼ�hy!���3�U�e+Ï�2S�A���_��ۧ�ϧnZ���Ա1?����,�@s#�;J��2�z�dAN2ѻ���
V��x�J���Z�Xb�D�LBT�w-�#�%H&\b��~��8��{�וV����Z��Gt^�I}�|2C�():�o�;�ie\AM+�>e����%��O�M��ֻ�f�<���������w>u2�{Z�62��v}�\3��g�o5��̎#��ܾacg^M7=s�*�S$���Iu�����P�g������G~ی��)�Sj�fϣ�/�Uf���O�A�DQ��,���ʤQ����kMU���ٹ"���[��U!�A��F�4REZ��(
w���-;�^0�
Y�M��Q������~�]�zR�pT�%��n��0�a���]f4���K�#[��ݎe*�̍�zdC�W�DD3���'[RD�����-Z�Poۥ��rA�L�◍p�י?ss�a�\��*yTi�L�#s?����J�C�*#~��G��'�����=r�9��^'����(=v�t��p��w`#�1q�f���m�;{r⚋UF���KՂ�E��o���m��2�������p�s���M�w�Z�?��!?���A�O�f�,g�+
r,x�ټ����u�͉�D��I3�7��{�q=�*c�>�8��ogS#zZc$��~53
�	)��߉�`P��:51j�dPa]�y<9*��H��@��~�fy��l��c�p����ĉ�j��y� ����q��b�iR���cm�_�r�Ԝr����(�1e��sw`�&�tϙ�e�J���ȇ�A����w��OÖQ���nV7���A9Hg��]�My�?3+b�G��X�	�4�(h�؀o+�1�6��-�C��*r�S"ǥ��r�����Gvy�3P�a�X����/q�z���}DD��.���4����+l���ƍ��\�e�K�������ٌ�vO��H	H�!��qgq��]1Ki�1��;!~��u�4��':T�_� >?Ŝ�l���5�KJ�/�Š	Z�_�爒�ո�[�,Z%({���@�w��>`S�$���B��b$/�k�?N�T��T���6�\_$�,�A��i����&�Y�az���V���1�>����]	�.=Bu�'��2�R5R6�hTeC4�al P��W�Ƭ�o�r���r<���'�}2�������8o�A��($"
܀��˾�}h����XX���Q�a���st#�啍�I��ؙ!F�S������z ��P��⍩�|�k��á� �*��o�ķH�N��W�}X�]��M}�7�/�$'5-��SB�K4�F��z�kfCh��efD�
�Sݎ�4�=�²�����Ĉ�3��
�Ty����K%���n���E/A�&��0L4�PӲFA@*)�~_T� ㉷�N�����X����{͆"x�?Ɲb�u��xb{�Ê��(�F�AG�?�W�W9����3Dy+Y]�rE�s�Q��z1}oA����B���^���4S��U�e��-a���@^��sre��{ٵ��W���f	@/���HĔ�{�
î&���b��5�%�g��q�'�h'�^�_���E��w�)�� �ߢx���^$_{z�2�^Ѧn�;wP����O\��t��v�u���M��W�u}�
Z�@5գU�?�}�CJ���1ґ�T�dWT��h�X�䛴j~��
��a���V�+���~������_$���ޯ��
�N1�:D�d��!d�8D_�_��h~OӮ
y˲!"�w�(��UR�]�ԴԜ}���A5��)s���B�����D��%�����?̹��*'��E� �'t�&�+��/QF�h�Tըn`���~1����%�9ڲj>�GUU���F���t�w�}A~*�͉��N��@)�.�&%o�U,�^�~�o�L�MWKRQDc~� �ֵ��4�]�,jg�/?���*+r�_a`\٫�����	G���E�e)��hE�/���sܴ9|������s�ܘ�M���,�(�o�q����uX�W�KUN�m���q�i���:\�O�1��$��:�Iц8���g�q�|F�Xqy�8q��!����H{���C�}>ڤ��G��D�G�U
]|<�U�(�i �];]����$���M#�v
��c�����2�/� ���kb�F���c�=ĮunSߍ(��`��Њ�7�e,`��Dc�#k���6�����>4����M�����1�w��x�n�EY���-I�'�4��a�K=�J�o�����\���7)����n�jv�:凒7��_�0Ll֔ծ�x1<��6@��+��%IIA��J��v�q~@>��)X2���n�q5��=t8�5�Tп0��Q4"Fay�8�Ɂ����$G7��cuʇ�ȋ?:���n�#n�g���F�&v�
s�����8��E�8�&�%����_��׃H�S�jҼOC��k����pa�Aү��<��q3�N���&�;�:�iϧI����^�>Z�Vy$_�\+^WA���IEB�=6\^��G��y�4�&�B�rU�:_&�br�=�5?��i4�9���ܡ�����`�p��/P�f�e�a~<=�UP)�ʮ��� I�'�` ��0N41�3&���{>mV»�Ui�ͺҝQ�hK�L�ūu0�x������5��6��)�-�g]rn��[��=���WWfQ���i
V���l�-����_#�A�&��ξ)��=m!_�[��F'��C��PQ��.�c��gĹ��k�ZA�ܠ:u����?�:t����鏨O�c�/ɲ���q(09��g~C�����1![�	�>@�Us��e�oyכ�Y��C�]�?hm賂=�HG�wB�<.�堵�s�Tô,��!r�w� b�&&#D'�̪�"���2c� ����"�4�<��0*����ߔ�|��i�uo�Wj�z�`���ş�@	i���Q������Z'�=,���(	QěrD
�_�#�y!I|a���0m��|v	���"$ϒ,�)���dV&%�����W,��D�e�*�옃�K�n?��X�uM�pWp}t�$���9��$L�9�מ�Ue���z��l�0o���p��Z�+��x��gs�J��P͚TW�Hr�^�P8�M�W�W'�l����m�8�\+$b�%2}X9E���
=5�c�汿#7h֍�%-��c���Gr�T��j��z��[Y�,^!\J �X�Tp�,Ҡ���E���$��k^i�b��7�^/�������)�j���|��y��3.�m�x�ke?�g�r�:2D��bO"�y�z��?�(�8MM��7^�v�9/�)a|�B����l��4�U\�t?g�PT��
��^��|��;�ct�$�|N�(���������B�]��a�@�6�ߧ߾��M��
V\��Eլ1����z�:-A�8bB�x-���1�M�����>����v������~x^�V����Խ���H�&x�O�s�!���H��:7q���bc���;��n�����#"3"3�*�P`���鋹��gN�>ʁ��z�4S�ԝm4��S�7�T5̅��S,�X�u��-�9`�q:�)������~��^˪G𫕞�a3��QóG�낓�(�,W���x�=G�Hy��j��$�Y�l�F~?K�hvD���rv}�K}�	|�6.�HyyD�H�y��r���xB'Z�-���yYN�\N2d�"��C���u
�Y��[�Y��
�>������C��C��*ʓ�����V'֪y:�]��ŷ�6�R
=[�]mg��F1 l�2[]?Q��EqS�k�
��!/�׋�\�3؊U^�� ���!*$}W���!��E�Ȭ��ow:��r���Lj��ZP��S�Ra �ul��g����5)��O�����x'Q�i"&��>�B5#�yF��b��T:/�����́�v����̇�p+W��9������ʳ��y��̃��|�_AE�%DP��ח��	�&�3�O6J໪�c�T�W�`!#���-wK[�5*�dyHZ��
:����Ֆ*��5����bQboa��Ng*)4�����|�%�;�&���@;��
Q�DӉ��Ҏ��ʫ~(]��uL��,l��2��rk~n7q;�,ޝJX��Pzs"�W݄ŗ���n��k�/�������GU6F.O��P��xh��BPk,��P�sX:�g3���H_�
�� H�^ŀ��UQl7��R�7zj�3ɰ��~s���Z��˜�T|i!��"zc��K=�i����i�T���H���b��䁂x�1��@�\�O���p��2���p!��1�F�[?��z�M-��3v9�����'<[�l��7Gr���fX�t�|�KK���Xx>�W�0��8���
[�>*庢����4�6V�ž
9Q���Rqž��eN�cr�l�+�;����A��2�����Mc�3݉��,�3|�).?�,dÏ�üin�R����O��lEW�R�W�X�( �e����!�d�1�R�u����2��S��z�tKޖ �Qz)�W�l��]��9�wN�w���S��ff)Ǟ&����0)h�ӄ�D[�5UC\hM�G{�D���vq��)H�P`�
a]�*6���SL.����t��^dײ3����TkV��/���y��QH����hf/J�V,�����]�`V����SUT%�;���=��f�Wu�O��΍��*�T��:�A3%P{
Z��A�uW��LƜ�
fd����=��Y��R�i_�녲#`�Ճ�� D���4���9�M�(n���Z��
�@2�<jS;�c�+�h�qkƘ[\.zL����e]��`��3���Z9CO0S2}�	'{Z�G�uxMK�K��g��O$[�"��5��$e�1?��l��"�[�I	{��v�!`�`���:����z��1k5E}�O�����M�:�������M��Cz����2��w����)/SY��s0��`�dx���{�W�Z�w+�+�����E�L��$��a�K�T�ApZ	�R��+q���w���a����[��[-Wߪ_���Se���,+����^E��T/��^ś�V4�.;�;�oOC��A0.��Ex�n����W�DV��N�
T�vs���
n����b~Vavp���Pϙ�w������q032͵�4
}e�<�a�:��	7^JD��ͥ�]�P�HhV�%�vGZ((N�
�ʼ��,�#R�R�g(e�*�}���[(3�B�����Ѭ�l��Fݢ^���H�{t+���7�<i��-_��z�wo��,�뜀�@g^�^�1_ń|z�
��8�2*��$�UK:��ݦ�G�-c�NkWFO��9�™�j�`{F\%w
���� �%�,��+ʍ8f �j���(S
�{� hW�~���Z���O���
l»��fp���zu����xר�ֳ���{F�
���c,Ǫ��x�ۤ0���D|sl*�~T0sw�-�@����N7��٪��W*�Ɵ�@2����a��<'�-�T�gQ��n�.5�`AԃI��`q�{��|}z�v�<��5�L��N��g�]b��|�3A�����{��1��PGX^e��I�ĺ�����Z�q"�S�:�����c{e�l|�AD+.�2<,��`w8��g�w�'��]"]n�;=C
��D�R���
��s6ιQ�Z�~����#"r��W������y)��5|lh���=8���.������y�C$P�d�yDg0�;)�O~��JL�UÝ�U�m�uمﳊ I��j�tz?�o�ȞqÓ	�o�40�SU�L��?Wn��KT�l�3��i�X�yS�dɉV���z��B݂U��l��͇WeM�A�<��NF$�%���oχ�a�8���
o̷�s8�&����p��ɿ
y�im{���^q�*庖�Ts�F��|������R`<N�yBс��d���mF�ԇ�_m�*�F������������ݼ����넿�^����$0~m�␣X���|$l�D��.	Ũ�/�9��`~�WQSh
�5�~��c�ބuؼ}
7y/�����]eCs{D�f�*��G5���~\_�%8$�#C�k@o��gr(�l cܳ-�3.�
�1Oؽ�%*�هr�f�%�&wF�x�pƣr��ݷ����w�([�ܒ����q���jHl^�艐1Xz���h�xөq�1S� ���8.�Xс$����)��#�aC���0�nTd���Ӳ)�(�>�٬'�,���Il\�ҵD�b��x<(�I����������.�
nKp�[޲�c��{�Ț
pμ�֤1<c!ă��okT�7�׎Ѿ���n%~��e�U�eF�2�����.5�W����Y_�
8�3���w}Ϯ�_��
����$��&�hX��O�7�1�K�FÔ2�{2Y�
R�pA22��d/mo5�f
\d�s������z��-*fҘ��$��}+�}zm�V���{�'ɺd�YV=���8�Ii�:ےrQ�U��L_V�kvW����u��\d��)L�SŒg;��y�ME�8�~�9�Z�a]ko���2"1.&��t��4�(��mؘ�::[Y�\��OC��)E�����$bK�	0�T`�>:Z:p�'���e���V�e���{�+�4_ia�j"L��StH�ʮ�w#���L%we�O�Yr�\��������'*ԟ5�;�!�1/2�1���$oPM�C2q��%D#�B���H��fh�|Fz�޻)��l-_�tj���e�8���N�q�t��� '�x�9��B˩��y���Pn�]W�%��ևR��)������e�*��C^ۺ/��2�Q�-��ژ|ކH��k�ݐ�Hb�ԡڙ����ޔ}�6�����̠��lv~`1����
9�'A��3՝P6"1��$�$G�|{0��@2���`�/�ޕ��֫��@�-���+=�nfŕ��xO�~��3h�4�K7�3�km�E'�hyB�<"�C^f�m]���ϸgL��X_�+u���(S�Ht$U���@eWVfd��n��,��ôC�C ����&���Y.Q�w���������|�o�;������v^8p�&�mU�;t*W�)v�.����AK�%�&���-I�?W9�["�g�����?�GznW�DIps�E+�
nS+�4˭q��(���=�|�Y�3|+S8��k2�h|�|d�����
^�b��Z�dPьY�#w���rj�^�ۼ�� ��,��B���o'%��y�,�0�a�9��Ah�_ˠ�U_w���C�e�*K�Ф�ЉrS+*���~�X�ۣ��$I�K���P�� pM�$�/��p��G��Du�P��t�&rw��\�;u�]nM���J��/�Rd��kl��f<Q�r�x/��ZZ2�z�O-H�*j(5��A|��w���{�^ow<�ȶ�k�?_6�r��rm���Y&�G�L\�oQSk^P�p�FB�k�P�x<�؋�녛�U#��
�|��T��F�>���ܜ��kOo�2��+�I�j�5S�P�
���=}�(�u͐~�GQ�%5՟
�ef7�k�W�dC�&ܩ�mi��Q�|3N^�/������q�i�V( 4:�9B�A-�4���M{T5߸ƴ[����i}����"���a�t�
H� I�9E���[�G�N�=���a�j�wx6���2��}��	6��`�G^����P]BP��{�2Φ�G�B�ŗ#qnY5�1�Z>!|e0�'���O�:�t���njO\ª�� ��+v���6�W/h�5��>��ʓ��0��[H&;;x(��y�1��)n�Qb'V�E}�;*����Mjt��'m��.S��_*��t���S�Q���	wC)%��Ǜn���u!�᫰���թ)��ؿ�^��[c|�$SCsŌ����n)�b���u�J

��GM�{J@�Ě��	�U�a��:��ϴτz����(z"��b%;m�8dK�q.t���lj�3��L�<)ɋ�7�+�BP��>����^�d���2��r���*]�֩2��k�"kUO��B�u=�/N��4؟̱���:�V��2(�C�C;Wrm�WƘ8z���+��u]�T\)�U�LTn�B�L���K�`7�m�E�z��s���hOn
��Z���b�������87�aEG������ZB��Ӡ��	��~�%7E��f�J��5��\�d+��9�/W)��)���	�/���\��n��`0��P)��}����C_��
���]�upX���2D"��W�����z�0�u��0o�6�2N���B��:�@����G6A+��b�+H/�^�70�z�ʚ�.�8���"?w���8]�=��b�=,F:�[(ڬuF�B��= ]�dR�D�a`ę�b���ZF��Iaf[�0=�ȩݷD�?Q�}e���s���w�7�����f]�a��w�O����O������?A�4Nq�q�9���7i�9�����"�W���_S�O�%��flu���ϩ�?w�˒:�~���`�]�w�������a��~on�!��A&��<�8N#�/��O(d['R�B��SD�'DV�jQ�ƣ:�� h�N����3,�u;�+^G\���EDpKu5��R�\��j|�N���1��t�����A�I�.��:��5��sM�ٮ�Y�v�%���N��>>�	�h�ON�y-��@b�Wyk�h������bv��Aj���/�@h޿��	If>��;��v��4�n�d8pSl��R��-�Y��bɖ��^�)!�zGh�����J.�8�G���G1�x��Q3�I�>B<q�m�!9��M��F�%��
1�]4��\�nMWu}r+���鼀wE��/p:!�3���JM��ɝ��5KB	��7��Li52w��!�92p�fS�P#ӨA����%��&�#��̯mQ64y�
�.��Qt��[d8qrⳀ�)����R��t�*�h/�7\$�V���ㄑnj�\|��PVg,���b�I4�])����)�C>~�j`7�\�.O�bD��x��"MY3�B�g2Gj/��n�m��jP�[r^�06x��ZW刄�
!��!Z���IO�M�Y�x1�#tR�1�h���Jn�<�,6��u�b�)E��J�1���߆�q!�K�d��Μ������c
h�/htj��c5=��\5�qb�����"��%�Ҹj��.�	�7�����z��9�[�Bū�b�z}R#k{��;����Ȟ:���j�a�{,�2�V����s�������Mx:��S�T$Oo��Y�7u�֙������#R˰+���i����W��@����tɵ���$RG��P�1�X�p���o� �e侩����
F-)��D3-��:�|�g�$�
O�r=uɱ;�Uo�I����&�ب�:/�����Đ
�d��Vr#�!yi��wk�h��J�&��J����\Y��So3��)�lO3;����ˬ�;n�ԺT���/[��M�tK��F03�Z����i&q�ȱ},�u��X��|���w��N�n��[�`��wbu��2.��D-J8J�6�]�f��1�b�������D���M�Z��Ām^�i�Q"����-�5�^/αǐؘ���P^<'�6�?�>Ck���'�l���Ɵ,rg�=��Fq`�!�6&a�WX�D�S�H������iOq�b�����L���S�슘��~�^��B����[�������?͏Q�;��#���az�,a=�YcN�`��6�U���=����������!-�$.���a�]#�Z���g<h�r�xL�hkk�
9�θ��Ä1L��s�� א�圷�����gK7�#����J!�o���r�H��q!���������x;�N�9T�P��VQ�Y�����Y���p�ė�5�g��<����K����t<w�N�"1',ȱu�P2�LU�2��M�,���'?��+�s�.�;X�=frNe���.����r�$�p*n\>��Y���z3bs�c��]T9�E~%��2;N�M����և�D�j+�5���}��6F@jy�-O�q�y�u���edCZ����+k܆�O����%;ǫ/��Z�+>H��-i{2�KSv@q�@���O��X"!�-c���2�\cP����'8�/	�+&��0̈|�:'��t+�h�q;��qm�^-w8Q�u�-��ħ����Q��D���n��`��Ƕ�܌+ܲ[V�W�{��.J[|�������M�D**��>��.�34�hL��»7G�j&�K�2<��,J?Mc��Uz�	3��o.�;��P����k^�4�k���9����P��N(Xo`Z�g�g��pI��ޞ���&s{w�Qh2g\��<��H���i0�%6�z
�U#�

9b$uy�i���%J�K�膠,��{*������A��3hi�Ҏ��!�i(*%n��*���>t6/��j����6F��/��]�Ё�Îϥ,�^�b	]R�����YS��!���2]�|�@��wK�ܳ��q:�0 � �D�|'Ļ�d�(I�S�5���w�h`m��^]7x�Lvp��}�qT+�	
wY%�y(LDh�K����[�� �e4����r�^�zc�^�D�N�;���xII~����1xlm2Vw7�FH5�_n
�<�aBE뚪�=x�9�zܯ7]�'sυL*TM*�6
��Pqq^Z�\�R�o�mO��,x�k��_�z��U2�%$��V��z��JF������꽠�}OA�袗W;�	z�l�I��.�2//{e��E};���*�K���>y��r���Wנ2q����ޠ)�i�Y�`�/x�t�md�۷�5s!�{i[��5Œ*"u܋��c����i_�!�󘂵��!j<DŽ(�sԭ)|��.I�KR]y�$FH���/�@2�A�`���F9�����!�F}"j���v��m�'��3v�JH�x5�C�R5^������N��l�
�#��?�@*ݵ�v�����_��ܝwzPW%n�-��F���3ȓ�y��<ݦ"j�k����h�[����9�w��BF��:ì�VW��UAL�x�bT�^�T�6�9�ҵ���&�E�K�@�.g�%�����i_	���r"sx��`6^{��F0�T��<8��i�
g�;3\�B[]{	���A\/��[�7"@�
C����jM��]�G��W��*{�J���+\�:u4@�{�S�S��$���)#FvaW@m��x<�]����XUD<2Ӛ)�Sz������@Gj�]L��}��iyz���%��.�[O0H?ZWە����Ti�6D��q;iS+f�(�`g4�Ú�8�5J�!��8�b�u��~���B
=�� �>i�Y�4M���E�D��.�VLy:[��(�j��c�t��S��ek����1�D���F�?0>��P�v�dN8��b�".N��4�;:B���B4��
 ��&%N�A ��D��K��OAY^�؅"ˌB��sd&�t
��(�Gq]M����N�׵ʌ�`^U��u��yrh��$g�|.nu_��m?觭}��.���V(���
4�lԱ]����!#��";�u�a���v���p� bf��v���0�v�}���N$�C�d�Ʉc���9P������0�;�Iؚ�=t;�rO�z�=S-�Kw��x���S�'K�}0T=	�=��v��2
��Q�=�"t{dD/���nD@����˩M��'�d����(u�up�9��M��x�t�&w� .��q0B���E�z�_׉�7�Hߜ�c�/��k��A��
^P��O?�P�AJ��I*���;2��I�<�ߓh��2�[�^��ܘ�n<����[rr����W̚�;�2�ij��χ�����{��_q��y��?D���;l��n>�~&����pޤ?���ͬ
~����W&���9�T����AM�31�ף�ǟ(\��y����9�q?��O����?��_�c>�P�M��������5~����?��ϡ���Om|)�%G���d�(c�?N1��x�~O3������}�-�������X�U�K��c�?]��͙�[��};�oٻۆz_���4�����T�{��������_(���p����_H5��i�[:�ߍY�y�������wE?�D�������U�aDB��V/7��!��0	R~�,~�.�E��$!�!�Q��=H(m$e��y��[�"�~E��T�Fh�P�\��(�]��H0m�M5�}�`1�L^�k��Ϊ�O����|���ϖ���P{.P��]�n�� ��+�r����=Yۅ�	��s��]ڥQ�w�(�}���3�7�TcZ���A�ژ�.�T���N���\�O�{���f��
˿|V�!��>LΧ����}U���t���M{z�G6��.�������7��7h���)��O�����{���ӟ?�~�Ɵ��eg��Q�?�?��W���8|?�g��OA[E�o�a,Пmŗ��w�Þ�r����}oi�y?�vޓ}~c���oS��?��/ׯ�~A%?�����@Y��ҷ��7��������w���8
�r{��=��5��Ou;��S����O��o�O�f�?�j�V�_��'~����i�?&�髖}y^����P���D�?���C��3��7��/��}����|���P���ⷔ�m���R�y�u�����qu���3��oh�G�}�/X��V�����K�nշ5��>�B�d�׿���Gg�q��~����>W�	|>�د��xh��s���	�Ys��B��ђ�������i����_�'t:�����ӉYN���:�q�����߷���g��6������+�D�u�r�|����/�0��]�������M��f�~���ɿ�˛#�p
�o_&��w���;>��ߪ|<w廗?@�ϟ��1�X��&��+hF!YEq�
d���������o?����w��UA��?��<g��{ ?��pߔq��9�/W	�al��6?����$~�W��u۴��_~)����u��B�`���3�?0�����i�C���������o�~����Ә&?~:t<��/���v�^����8��I�kg�7g4���ƿ^��_K�
�����Cx�燫����W�#~�i�#��G<�v�i��/K�e���E�����쿗�?դ�!���s��.��/ψ����<�����S;��/!�S�x���>��/�_����n�6�_A(/I7q�&��^�u�V݀�d���Ȗ ����ؾc/��}ľd�7��H�����sxxxxn<4}�9B���
����|�Z��.R���1�
\�F�p�8��_�<D�����JV�-��+,�g<�_>AQ�����q4�G��6�����Q8W�)�
��?�(6Fطh�'���K4��#S�V~�0��^���Y/I�o*(���6~}mc��*�y��m�;��|�#x&u���v�$1�ƣ��
���Бy�W�&��Fbs�F����n�6�>,��i���I�9�Kpf��e�+�5™�� �}a�R{��W�\m��`���6n�V��s$���O��rG����_)AIv㕬%�E0�Y�����곊y(M��)V�$�Q9���>;�8ܐc��-���2�wپ�!�]�v�������{)���c���n%k�$�4����	�p8ф�챞dYO79/��-P�eB|q��ԏ&y��䃝+4Oϋ�-"�r��hs��?��%���(<'�3�)��D�8���+�<vEq�h�G7��V�B\��)b����š_�:�ե��I#���ӀZ��D-R�A7��m3�_!w���2�b�@w,WR�Gx�RǓ�����>�JӸ;L�]ԡ:�_�}f��K�OR���񡆖6��UO��0��a��d�M��`�-����)�V�J@S�A�^�i�(͖DﳥC��=��E8�����A�O�v�$�ӳX�5�� �6
�-�Ʉ��&�z'��p�j-AIk��7���E�b���U/�mʉ�"�<�������o�E�^콷�JV��bo���1+��$�s�׃wo�@��cP�l��^u<ɇ��Q�$T
�II��H|���HR�a�Ŷ�	\��-P\<ѧ�/�"@�Gʜ��L[��{1
�1����ٙw+���
�B���qJ7�w�'���̔�@	Li�D��B���߱�4�x���~/�O|�]b
H��T��9Ec�ζ*F�)"9�%�6%
H�J���ˀ��f��f�����S�.F����Hm��q�A���B���U��ue� �z���ew���d^�)��b�2�}�/
�&�D:�'�҇z�T
mzZ��!�\�>����ƨ���1J �����!�HD�m���	�E֥R��G�쩩Sݫ�N�\�y��rࣃ1�G����@S-����ǔ�23W�{I8�Z0=�ɚ'W�.{9f>��0����z�0����
�/_�OKo���YFwwZ�z��?�hu'��u������	o{q��G�_��M�'Z;ֿ"8�>mS{;�n�=��ۣ��&����
�@�D�X�}9�oL�
��Z��RSD}�G�h�Z��>	�;���"u�I9�TVqF
`�jpZ���&'�>g�>9s>gs��ܜ%�	;�`'���\p���q��	�@��\�M͚<7_�5�YO���^�3�:�mTvu��[��
y��lpkI���q<����^]�H��BH��A.\�3�4`���g��G�k���\}����"Ԣي�5�ڗ�*O������RL�V�`�"���9�h�}���#9L��N�փ�US���T
.����-�h�b2<o�$���P_��3�l�f�q��Q��9�e�.{�G��p��y	A���߽"yD<�v�,Pe\��`oЍ�s~�bpk�r8I�?#�z�J	K�c�<��-����bj�YO1��o���%�U��QY!��"�4EU#Au�`��pP�n�I݊YAk�R�r3?I��;����rNs�<�y�z�-p`
.����=7�o��Ơv�����FZ��y0
F�M�HZ��/
B�k6��r's)�,��+$�F�*3D�����K��дԲi)�P�P�Ϊ��ŒL>O�ȷ�b~������.���ɘ�=�~�~���Kٍ�RI����΅rQcZj�vD7
�\���*]`�E��R��JD?��N̩âߞs|%kـy�j�G�J��*���Z��'*p��.��$���>1WK_݇�_=�4�%g�Ŧ���l��V�+IT����[�_B����"=�[p��^��p@�%~R#�����2˪'A�킟9ͫ��N�������5��s�tpWl�4U�/��ęA
 ���(쐫eYt��as��`bDE]����1LOͽ�	Q"wa������A@M��ˎ塬�Z�+��T�L�5h'(!����,�e���]Ko7��W�2z	l�Ak �A�h�CP#1zVZJ�F��UQ5��̐;\��0`�>���pf�~ү�e>l��Q������W�)��`%��	��ژl��p��T6,�'٪j���ֽ�5I�W�V�q����1��S����?{�������R�
h�JBYz"lJՓ��0�$Ȩ�[2�nI��a�"��zc�d!<��4lCf߽Q:h�?��T�\�)e�F��ΈF9ﴰ�%G��c.*!\�����fU��O�Y1�ǑW>��$��gِ�e*�w����[T�fZ.�\¤��}̦O���=���ZA��j_�v��Ra�D��68��]_0r��ޥ�u޾�\�J�I�uX������u�s1� {�V*��2�A8�k���t1M茟k	O({�ٶ<gi���n�m��RS����<�׈se�Qj{	�v�*a����K�>�@~�&��7�����t
��Q����_��FS'Q�!q�)��iUAtԕͱ1��|aW>G�,$���h�Y$h�w;�{��⣀s{S�>��c8?���xO��S�׍�Yԏ��fܨy����O5�J0�\��Ҝ;
J<B�J��I�1�7k�SK�RP�F�a�w+�`��φ�
��ۤ�p�Ss����=����@C<���
�]���̫�?R�FA�tQM7���t��FnV�X[{��9�.���>��͌V�?~�9.����l��ƛ��e{Ϳ���<����J�t
�ҝ˨n&��R�Yб�j�:�r�����D՞��hJ���}h+�&U�8/Z�[�2iЗ�C���,�c�X0��̄�Q�M��Ѭd+Kı�/��4ؿ��$3�͂>/G�W���z�%S���J���X��;3��j�Xi���V�|�A���}1��M�vb��{=��c/���y~� =�S���w"i�o0b�P��, VC�YNƼP�M�{ddFa��I��w�����C�=�0�Z�j����C�v-򻷂�XFE�h��l��^m���k���Q�ۧ��R�V<Iö́Ž?a��bA�Y�{�k6��3"�'���a����]F.1l��������aO�	�	�w����Ad��w{N��G�T��걉M�фF�'N��37��}3'^��wK�z��l=�4�K��"���q�܃'�^�K�U��#~/�H+�����M�#~�����k\��թW<��<�2F.@t�12x5�f����1C��b�3�Y��7n��e��d`�3���.h7����;hRY��Ϛr��waE��3]HdeE���h������+p$��o.���'H�f^�|ж�M-��Fw'��C�^�_�VsT�b$��^�;�qD]#qPc$�	n�&o�f<W���ks�6�=׊TC�v������8���\����z4	IH(@�Êj���.@��3�K26��¾�yg|�-�bYy����_�lY��W�i]-yQF�i�{bR��$�ɢX��$�{Ւ�^��"%^�3��ߑ��̛m��{y�jTVۜx9M	�e�2��4aތ �9�Y�Qp⽹8;��>��4'���w��W�����>��p�#�+�-#ER!E�w��{�=�+�d��2Z��ʷ8vtp�װsY4��	��O�aUT�-+R���w��Ox��I�7W�W>��,��jz�g����U�K�y�0���dv�Wk�`N�v,	c�,'��.)tËOކ����k���s!��d�2��`��Ir������D�J$��7�}G���O�9P_��X�����guY��������(�R ��{[^���l��<��3rGr��U�!ϳH�V�V`Hr�[����Ӽ�B�@�����#�o��j���㿇����)\H@��In<F6�yQ�"���S�O	X�+DW����`Cp��vE
P�SH�LO���� �����2���RHܟ��,��GT���K��l���uZ�LA&$�k��f-^���`1�w��NJ�(��?T��Krج�3�+0�8���!I��;��v=�R@�������y�0�3XƓυ!��!'m�^���+ǖ��+<v�v�<�z<b�C�k,r��L��!¨$I�.��Up2��uN�@�`����q�'�'�2�	[T� ����ᄾx1��1��cX�o�oa����oc~sr��UE-�>h(�$��'4n`hD�1��LJ5�%�9IX�Nr�[�j�&Qۥ
�r��Rۛ5H�C%��c�|����6�`��ա�RP��MÄO�1�
��C���w��5��5�.x��,�ۢi�eI�ւ�B��2>|�lP���G�}�t*�?�v���IQQ�,�����b-N(�UR����t
'<�h���?�Ov�ق�qt���p0Т���GT�k!\�-�g��H�m�{�NR0�9�]�s	|�K�y��J�t܍��Kˋ�_
���f�j��N���u��b�����v�\� ���5_���2H�v|�[k��fasڇ���R���CO�l��I4O2�Z�t��5#e�]��$?FyŒm
,���cu��n�?w��Y
���5R_Ɔ�q�$\�YO>Cd�ɫ5�Mvt������FS�b~��2՗?Z�2T{�ʍTv;D3y�;5�㳤$���%��7/�.Hu.�I�N/�X���.ʤG1�B�i81x�Β<�%駠aٲ)��2kH~tD��QLc�$5}g9�>�7����n�
��Ç�h߷m�,�!���O|�j|s�9��q��"^��E��/lz�ߎ=-\��iv�â,r(��u���X�[b�"О�f�j}�bɩc��y��ƈi�DE���)#�nU��i]ptd`��{��h���11
A@s��-X�M�T��\�
�uZ�uee�-���0�HF_�	@����s�<�Td�c��i��\(w�$�J�j�ҙ�J0z�5ɰ�7H�~`
�NW�'�B��-1�(;�\��Pf�2m��!B:Z��m+�x��e%�w�g
��ѕP��"Y;nuI.2��€�9X�%�9�5��8%��bH4CJޭ�("�n8gaR`J/�� f~�E#»6�¿ia�EB!ېI�on��d����ݑ&�Š��5 �����I�s`�aXV>����X�9��أX&
���|����1����=]^W�UยP"�A��P�V0��CS���R��4��-�#�AV���O��h�gh���-J ;�K(����P�i���қ�����[%O�}<ՑZ|��&�J
���Z?�)�5{�;.r�Z������'v�wJK��蛰�L�2L�,{-;ZF��ť~E?S&<q��8�	K�v��A��Ͼq�3�C�����m��r��d	�/�m,̴3��	�
�bw
���Q҆Dh��h�g�R��.`J�H��_����V��k�h�$�@�j>{J-1�X/
��s��3J/m����Q-g�C�a�*�@#]�H�9�*Zȼ�$�#J	�fI�L�X�H��)�s��-%9��p���
����c*��+=�R�l�BU�;����Y��d�༒��k���.ڢz�1�f��f�(("���n��ӥG�#��!A��ԭ�CU�B������x��A��k�}�dc�#\6<N�4�b������^5���l����z�Ï��,2�γ^[�4T;+Z�@5�{�o��X*6��"Z�#�0�*(��ݛ�7uF�ά@�=��@�W
k����llE�V���q��Xl�:�¥�������i��`\S������T�a<�Q�l��E���!�3SBF6�A���z�L�%_'Eh�W�v`�C�=�ڎ{c'8�Gv2�
L�Ne����+"�8�f}��ByE-S4�ʾ�U���n��}	X�H�30���\���}cn~d�뭅+`��PR �+I���`C䬽\8m3
�s�a&!�W�n�[D�,�%P^�eݢyEJ�DR�*��`�
�f	��|��k���U1��A���`pZ�]��P|A��O�z��
�ƽ�6�O���a',�6I��#��^x�=�1_�u
(��� /��In�4��$ʹ��%�<Q0.Lex�{��@���]��}E�S�]p��K����vJ`�]���P�JaT�?��Qt��
��[�s�ܟ�/#��#�-��t����[��nw4���~lV���M~��Mo�-��o�۱�sΪц��3co�o�a0X���H����O���o�bcy�׆7<r�R�$�TM$��A$�w��E��^�toTz�&��<0�B�S'��g�3�HΙ��r��W){Wۮ��_*�@�+�UzϨ3[��>xxg�tU+����X�{�\�'ipEҗZL�5+~2q�M�~p	�,{��cog���
�1��xF��5mO�(���n�L:������ƽ^7�9]A�y����:s���x��8Kxf��o�����	� i���'&N~��>Z'��+����4(��Is���W!?� C �������v�bx�*��o�%W�o�y�Wmd
��o�j$���I��8��f�p,��؁+���eݒ�VZ�y;¡YL��N�D���2�Gs���C��E�Eu
.�M,Q˂�q�	��ȯnl�B(w��Q��0��(����iJ1��m�{�)[�W�*^E֤W AA3f"�
��aϝb�~|����7;�7���u��t�N�iE�A�ؖ6A���
�&*�P��j��/��!���\���{Q�xb{��:��>S4�E*����	�W|��*n+��H��ǥbM����km�Z�e%:/ε�� ���C�eg��������Ny�|���B���׭�:�Z�{�aU������9(N����U�S}%
#�{��Y�U�F���VeK��]��RA�c��2r�tg��k���L�_ʨWH%𖰽�<���~�j�������DX��N�S��a1{C �����G':W1D��{M��%�W��n
X��>���(�S��QKv&"�3��8e\�h��r�Cdr��o���B`�4e�<�;�AU�)��w2��.I�I|'��e�ߦ���?x��ѡ-NĊrta	�9�����Oa�C/Ϣ)�iJ����^z��i�w�����=kw���+�>�+N�M��'u�6{�'����zǒl+W�9���K<H��Hv�~���ApP�b/�<�R[�`!b3u��G�����H�m,5�ѵm���5M�dܰhӚ�QB՘�eU�|6�V,¶�V�-򊸫��|Y^���"�4�E‹�o�]Q�
,���~��V�<[�3�c�%	&��
��}/\�=�@��%���?Yt��ʧ/��vy�y�vvJt����-8f���W��H�'�J��0Lq᧗��I����N�&–��ýEg��V��E�b��N4��J��8
�Ci>̲7p������fC,�EZӚU�E��-D07?�*"�*q?(��@G�lTpݟ(��
�b{���$�2~=诔Ťao`��o�j��5%�_�Xv��eZ?[�d
E?>O|�=��r��l}�k>��v�5���'3u��&���63������)܎�Ȫ�-I�$oދ�E��@h��0Dޛ�rޫ(�X7y�c5��h�0[�+�x�������J�)��(���W��m~�'6،�mX^�P��[T�}�d:d�
ٚ,�Y����ۚ�hN�:th���}z�Fn�ě�j���n��6��>��Kzuyi��d��rӭ���4��b�.���F�
a��#�����}G�մ��#�}!I�ΤRz�r\�́�4�ɞ�.2Gϙ����._tGf뜝�_��5�c��{�`�[u��Ϩ�^~g�+i�zO�=����Q���^�Wj�U��(��ˑD�$�_��;*0����~�����[�
>��'��ޓ�A~��ᓫT!���=xq���Γ��T��&�� #�!��d
��ڑ����sr�t�CZ37�壉����Uݧ���3�}�j��b!��"Ҁv�E�
\G�Ƽ*��UUOir��4�ʗ�M�'Ҙ����ٞ]���ɯ��q�*�>����=,.V�񚩪�^xԩ�W�C4	��$���P�LH�Jʨa>��˾�аA�r�C�gBZtZ�b�����ut_2�24�0g*�p�;���T��r�vx��F����l�n���͖V�-n
[�E��KE�љ��8��r���`�� �~�t�	V���R�.ur�B���L�+���R��~���$��`$-@
�SU�X�)]�l4�R( �=���z���ű*�	�'���a��E�s�f����t���B#Ÿ�ջ�V�Zw����Yv[��v�
'p���6��uu=Wg&��n�'
�}���ɨ��S�|��Zf>�T�Ӈ2�!R@���R㠳��J�5�$�`�2:�i9���llغ��
rv���\L����>,�d����n���q�L�U!�5���N���~x��C�=z���u�;�&j����E��$*�&�^O����v6.�o�;�`��i7/w�����x	����+~FpqjZ7��L_~;[�ؼ˞@�L#��o�XˉhSvAXNz���$�9bA2�Iz����V��N�\#:�m�S��ՠ��"�K,8��^�;KPٱ�n��IX��k"�&Ld�<�>}��/M2L�2W+�)������R�v�K�NPN���S�/��/���5�3�2��-�:��<���lC��,ۣ�<�|[���#�ur����oߞ������9Io��ta sUM�A�)Il�Sµ�d�K�$�=Sh	��vB�a�s��v��� ��/��>��Y�~�RPƻ�JgYnU�in�y��
Z�vn2<-�5`�CrwǠx�dc��2�)�� �A�k��U�X,�V��i����o���؜V�*���_%�j�H�Y|�t
� �%�#�,��_����MJ�ͮ�0���f���=~[�>�g;���^1"��ܒ�qw'
�&7S��~c��p�S�m9eɍ*��C?D�8�xB����u,����t����,����k#���qR�O���q[5���$<0�.p8vz
4��Y{�T��t~~+�̉sS��/:�P�j���_/�7<�F�����#`]s�Y����'I��i��[XK���������i�t�\!�园���
�b�&�rqq����S��oL���BC��b�6]��ӓ�]����~���<�R��'�֟�w��O�s�%�l-+�'?Sͬz�#����T���~�Q��~5�V�sw��A"~�}|�b��T��@�Ssrf(q慆�-�4w��r��f/�����tgT��z�ۧ�6\�-f�Q)f��YQ��\��KB~�Fu���ϸ�Sn:XI�l;j՛6լ�.׿oà�j��j{d�߁��gժ=��[�jV��!:+��t���� ��-)|��d7��/�@jK)�b�����;sptj����3���Kl$2��`P#���C���3Wj�"�]�(�6���Ȉ�7Qʯ�k-2���3y��c�e���5Kft7��e��\)�]^�=]���B�9�֛~L
$�"p+��{�}[�天Z���e@R>]���`�:|N�D~�}%��M�e�2�k�GN�ԡ�cP��̲P�ɭ�5(�M�P�$�#֩��'��}�9	���������Q�R��B�zՔ�����3�!�t�1G��`12�F9�Wv��2��r�^<{�ԱJ�~���0EQ�Ȇ�D�ow�u��X�N�,WoW&�Μ�B�L3F	@P�����qc���x	������~�u�퇖N#wz�ed���2���c$�j�C#�\c��h�Q�?j��ul�O�8��g���x��F��l�C�ǝ�V��0��4�Ԁe�~f����i*����1~��Q��9pD�;u��߶G�v�̬%MT��.�/�)(��W�m��]J:�qjv
��X��=�X�Z�'?���図�^�ϫ��~��勳W�SIy��e�G�|���+S�OrU��y�Q��,fmP6z5��`��֯��wj
�!�xU����Q��a�h�^ο�c
%�B�h>��)��4w���c�7��6�	� l:�uW�奲���e���l�~��c���r4|f�����H�lҫ�8b�����E��g��NwS���L�m
�^I5NF0��2v�N�P�g�Mf�6�����Ԧ8�(���>,&,5��ݜ#��4�~c-��A�t;�^O�������G�ݓe�� !Ʈ�N���a�7��-Lk9ty����u�C>�L?:k��ʹ�H[��3,��1I�|C����s�HX�&R��lJA8��b�K!���]�U\ Dz\7�$���۹�
v
��Nӏ|ž�m)F����žN%���O$�'&���lD��gp�:l[OC�~��R̠ߒ�;s���v
gL��"�.��������Э�u�sdHv���Uӛ�xg�KPd��ˎ�����*�}��TV�qA/U�(S��E^�7���4VoD�a��ߧ�� �7c��x�ad;x��CU�:uL�������Zpms\��$t�w��s7rq�hJ�Z&�>#P�����t�S�n�@��Qu��V���;�u�IF�=�"w�ԯ)I�ӜpbR� ������Tׯ��0�5�S��X�*D<4m�n(�7���a�?��ab�n�A��EM��d��D��*?��;.f}����C
�q��@����61��(KtՊ�8�6 9�pbYT���l�_���7���8<�~h,��G҈	��J��-h2jwLò�y���-�&�J���\U�c��� !�)́-ρ\`r)�a�U!0R�b��`P^����MQL���
�L�Q��[����W�ٓA����ы�_�|]DE^�<,��9�qG8*��o�G�w���e-/�V~��'dm�LRg+��\�\�/���۹K���ő�%4��he�m���]��(H�qx�t����S
-A���ɪ�/�����7��j`�̚��%���,�e>��2l7��,��4c�e�*3�{s�ýC2���W��!szs��-�w�>�~5)�|�#Mn&+hm�/��3D�t��X�#�j:���,�7j��~El
��j$Kk����:��8��G1� sL+�O�&sա��g���;����w
/��K�Gĉv_��LmA��޽zv����W=�>ϯ�2k8C�3C�\S�V���b��J@r��+i�p��d79��.�@$�/Ɂ�a�!���& ������ғ?`x�B��^�W 49�$Ϟ��@ӂ��WW8=3�~a�1��V+���d
<lB\�d�AFG�p��L
/�g{��Ɂ��2p[K*kʆ��p�����b�6PP�l�_t�{�b���Ύ3W��K�z��V<����]�k5�P�j�ᷧ�6��-	,��#P��~���{�Xh�!MN�o�r�\�կY���V�^��G���Qu>�\VWg)�nW<[NLO�l���	��8L+Sܜ$�,��>�쌤2*ѽ�P��C�/��[�?���nW��>0�1�
A5$BxJ���c{�q�@p��`Q
�Կ2��;xDU9��N�
�+��>������0�l}���:n�TB*�:?7k�Ւ�*�?��4(KqO[g�{��ƭ����c�v��U ����@ԏ��V�a��BQd�H��)٣�h�t�)tl�h9����8�z"��%�*����
�a=b�z�ԳB%��6Tdz|C��u�>�[f�a��)��Y��U�3�[�¯\;�A4�~��{�,
	�U\i^/�*��5���%JG��@�$YZE�5K6���)B��GO�Pv��5rfy7�੠Fh����L����-��,(��jG�����
�4�d�+�G0մ�~�#��E�����
�B"��tV�,��n�u҄ޗ��j�{d�.[HY��l+M4KŅS�X���~��!I��~
�M��D�C0��|9�Ǘ�{�o�p;Y�C�9M�K�bm����($c
y���7$��_�E�ʃp�F���w4m,b�/�HٚQPm.���	/�L|���)����X�~�~9���~Ŋ�Θ���h=O�
�b��R�N��:X��<"i�Uz]W:U+ʍ�Ǻ�0�"G�J�;��V�_*|��z�ٴ��RV��:J�	�㘋n��-;�v6�vӡ�2
E�.&B����
]Ԓg�ʮYDʃsATu'��������+p�����$_�Á@�ʯ��WC:��UJ�]L�b����d,]���P����"���~���7
�Y�����PXm�76ߒ��T�M
���G� �*Ⱁ���	b܃I<��˳�ߖ���v���J��۪`v{�4�h�jӆH����wiR�nh@Ya��1sx�h�٦��9�cL�u(��u"�՘-�B�8�
����'bE7��)C?\ z{�u�P3:+!<Su�P�sJ,��%�K�ekcs�s����Z�g�t������{*2�>e�Z<c�H���_�F6����[���db_�C6;
=�m.-����O>�?3cG���n���ٰH��a��{e2�����I��8�0���틣�����
����~
I��x�Qh��}��\��J���S/
i0�B�-��Aܿ-��΋�L�ښ��E�k��A��|5��n���׵I5ٷס
?���۬�|��b�

�u��R*��)���D7��Omo��luƘL.~����h��-[])6��@9#h��A���`D������V�<��H�k�7d���V���eH��X~������K0�Ee?��M�֏�p��,"�1������� �Ō~�%�Hn;'ժXQ{��Je��J��������e�.�wۯ�hWy[Sn���5���:�Ӱ�^��Y��)ww�0��zI-#��H������U��Ʊ��Yhd��Bkm����糘�WW�h�y��S��&I���Î\������+������6s������<��	��^o�}2�he�S��OEvDu���lj��za�Ԧ"썥^����\�M���Ac�l'�$I��UR�������>�s�^Q��Z~)'UQ	�4Y̰���dז�]������w�����v�]��0hy��:��D�6�D�I �Y�ܖcm(�O�sڌ�DJ��b��3	��jZ�R)��GN-��b�;*�x,W�dojD�)ZϘ�h=OA{��z�/Y�QB�t�K2�iOD'�Pi�����!2�*�u�����V��;����tO.~6��z�,�w�f~������g6���I ňi����iMeQ�D^1-��iP�Dr3�S�,�ќ�}a��H���$��dْ�k�`8zƐjH��P��������s��?�u�q[_|�Q޿􈐞�
�8�*�����
l��S*��Չl<�:����[��
Xq_vM��f��]2���5W
Y��7{,�x���,�
�e2������㙤Q�M)g}��@�9���7^ϗ>n<��U���J4\�Tڌ?�>�+��IJE���t�TK�Vk���T�_n�"*4l��c��>_5LS���9���f��;!�<�2�b�`A�)Y��F�~��le��SG��0�\,;N`j3�E�������v��`V�Sq��֫��[Jz��z��zMH�6�a�k��zb����P�CIm(5#}��q��e~e�|���ZV�P�Ol(�~L0�n%��%�gcۧ��SE;[�}7�Howwub0��ζ��l�ݷ@	����M��¶/
�:5��E�<��ݝ��̚�~G$�4`^�h]!hx�w�QC6𾤣賓�X�Eޟ>y&i��ش�	��	k����9� �:}�C�
1�,�Z�D/B�|�,�)6����}�-�3���q��f��@��g�~bl�0A~�m�
���}��l�M�j�G��<�#R���W��$*��#�6�ul�������v��a��!.�LR�b*UE�j�d��eJ�4���Ŕ92TӨ�)y�.��e�v���b��%k�͡u_?Ap�6>�GV�Ew�;l�v�w#���
|�DR�LY��?qГ���_�V���*�t�D!e�^~c�6��/6�]�G�Q��mq�R{�[��ꛄ{�v��
^�V5^>��fU<���B�O�n�Y�����bĉ�{��aV�[D�O�l���N
�6�t�E_���/�z(:�
K��Hի�J�i�A�q��Ѱ����b��Yb�{'��	7�'��<DD6��ww���lh1(�휣=��J 0��e��'(h�W�~�B-r#�x��T�PE�Q��SX�UM?���
���|<+J�A�V�~Mb���Sw[��}M&g��_wI�>^@p%�+^*E,ap#d��K�#- �T<"���Gn����ל��
��]�2A���,#��(�S��xO]��V}��l�4�䒏�d�O��k�ռ��:�¤�����"f��Љ^���Kt�x>�B�	�o�{�z���M�5�����JH`c�^KP�l6ȴ�h��"��^\���&zdS'/��ϴC	g�rw���ʄa
�"h)�����񞸪�m�䷯Eg�I6�m׍?�L���\;�0�}���/�1%�x�bS�'Q�ظ��ɠ��vwZr����h��d���u ��$�AwWtb%p9�Ł!1A�h4���Q�ć
�n=�訕�q8���	�ʯx����yc��?�}�Ηyc��Gx������BߞL�_s���R8!���6����*����R�	���
�0���G�Y��_�=�6"��5E%�ʲ��\�L9!�n�%�jڀ��PvLG�Q6*\� ��s/�j�Fͺ[-ؘ��y��$�8��O������� �ߞ
��8�<B@aƕl<x�j�S�Ȏ*:�S'���g��n��ą�G�|/�^=�J���h<����EsH1a`�}	����>(>Sf?���f��������bSB��O�����s���hN����-��R�x�&@\A��t'���$��֗J�a�5_;�Ĭ=���V���H��>D���G鲱&[Xl.�LY���s\�wz�h����C��j�m �ɧ݂���=NqR9#rx�;kk���i��`���a��ƃ���tHy���,��[�/Hi|s�/�>h;���n��`��ɘ}�k�������R����0��yMq�Ъ��6�I@ì	�LTWz�|y�|�ĭ�=H��0I�c\O�h2�Jی_b�9��ؕ�)ޮb�~20��e���^F���)��a��f�J:�t�WY*�7��o��� \q�A"������!tj.��qB��P[Qݸ~�T=��ւ�a�B�7�3C�>G�ݿܚ������o;���==2�䃜�>��v�eo��rޓ���\�o��Vzn�"�%�P�í����8b��d"N+��l���44$���fduϢ:wv(a3���ػ��6`�P��r��t!��lBA��|���8�d�rt\!�^7.�yVQ�Moq���/����žvo��BV���L���T:k� �+�ñ�<���z�KNA������,�𲨩I���B��j���V��0�%�-M��[,�%��O�Z����=T@/��ț��G	JN$�+)Z,թc����w�ÿ�(c�/�	l�=8�������2���	y'R�x�¿��:�6݌�r`64&<3��dl*����z��]4#k(��,.U�֡iu����W�Cr���ҡZ���	8��u���������z�C�/��D���Gx�[-����޺ ��܂#�E`�dp�]�%��d��E��Ȳ	�j��	�9�X��?�d�
�[DP�Us�į"��|uX�dtR��$�x�çl��@ʑ�cGZɭi�߀Y�zѱ�p�]
�q�#Q�fuj:2��*ݞ�����m�0�\�|�l��S��6."���5����5�������3:�ń0���<lyY¶���{;�T*�"'hĜ��h
�S#X��dѷj	5H r�w�~�׌fwf����p�M��%���Żr��̦���w��_]�6vF�~��JjH/jU��`t�VM'#�{�-��X�Q���$��"�k�?h
�B�]H�6\#U!��ǀ�m<���5����)<��������L�l}Y�l�d�
��n���6\�����Q^T<(�VQu6(��ƥ7+��4�,.�N��،��$���Q�+�p�RD0e_mM	���+�a}��d��_p���E�)�����DV��W	�%�S=�^��(�PG����88����cR�O� =ԇi���E�a�g�B�����=�m��jɾ����:#2��8�yG|J���A���@G~P#0��iu4��]G�G��PI��]��"iww ��m��n>Hދ��E�M�-��,f�1,<�Ϩ�D/'�K�Ft��_k��!�[T�Q�aU����91<�
(�53��G[�$�⑳�^��]�f	�1,�3��M�z?
�)Џ52���̾|��n�����$��׺Ն�6�;�s>�7(�u������wTnp�l�<�x9w���ޘ��]HJ>�]����
f_��%��۔�PL-(KW�U �-^����*�ҜE���GH���S�7�qn#�J��YT#�֤�詻�{ϲ�}���M􃝑�Ի�3�m;�t���^���'�,+'�??+݋�ju�DSH�p�Qv�(�C+�À�����@�+��z:����]mW[��ίX��7�����rH�f9M�H�S��1���c�&)�����Foצ��|��Ji$�F��G��c%eV0��V�+��nG�.��u���)�U�&.�z('�@i�0}�y
��l5ik"�Xgpm���_�=d��p��y*�Pwl�W��m����l�ue�w�*�[��/Z�q���#*�jKs�eF~4�ten�[�ńE�-S�,#�Ve�m�V�*Z-�6T��=�Su�+�Bw�
�Y�=ܒq��[��.�
�Y|f��ZE��<H3?�vEG�����C��&��+��sP�x��I�2yA�u�@�v�꘺�CKwS#=/o/V��إ|p�>�vjyP�hh��_�ڍ�,|���[��/�����W�K9o7z�`\����/}գ�T��ٽ�i��oy���ƶ�za)���03s$���m��\��X.jD�z�)���?�w���z���N�,��w[s�o���eP$tv�>bȧx��NN[!`擧
�!~�� �+1��o��*��;��Y�+��Ѡ���z�����sK���Q1�
d0>��䯷iIUԚ��F9@M�`$��bҺC�	�K�s�q�^���_-K�8��2�B� ��r�٢���t:Q��='��#�-�N])��kaX���.'��=2J�7`
pA�&�A�G[���x����r}�#�Tj:H��;��<m��Lg%D3�t�e�-V�si��l������,Ľ�™ ���D��b�A�
z^c�|+0����V�(�U�d<�ԯ�$���`>y�O�m��>I�IY3��n�.�~�1�h�iI�o�@{�U�״=9-���>��<�j��ɶs�6d3�lY����L5?>3=���
��t�Tμ�ֲ+v ��T�����/-���SLP�=���G�˗G�
2J`g�30�`�Ķ1o�9K`��=���u�1��tZ�d���6��)+�(F�eRz�먬4E�A^�*���l�8��$�����?1�h6]M�W�G���E�"z�	���Reta��M�h�t�i����
�0����X\x����p\�X�mSܭM�u5�i8��3�qh)��x��,��;�hv�G&#\��6�}�\QK-��n5T���Ue�	�A;;��si{+h����Gq�:2�O����Š4��O����h�}9g=��—��uN;�t2�\����s�DǬ����XZ,�0_o��ŀ,���S��Z���d�`����w�r�$_+ �.;��n�&��[P}�e(8�O�+BПF��ɔ����OWw�۸�,�,�E�w���3��7��r#�9�,n�ִ�c����7����(<n�ɥ��Uk��\�CwM��ZO׉�ԜdnF\����go&ʭ���u���7WjݡڕA��W=�2|� e/Y$S�g�a��O�`Z���3���4e0_	���Ԗbi�����8�v(?9�͢�/7E�G�s������h��;�w��E�KD8ٰ�����zL��:���;>�UJxv6�:kYt¦~*��t�/@������g�?�� �!t��b��kr^��×V�o�%����[o�v/��?�^��A�U��7��ο��ϑ��zwe��q�^|��G�,�@�;������}
{XM�`U�`vT�c�D`�V���r��x�k3t��Z5KU=��	�,�s�"'�T�m�w95���kp �����	Z��q�v�B���{� 4e �3Ʃ$B]ȱƶ�1[�7yj�ZbQ4-�D�ГxEWX��q�(�"*��l��s9vλ�q9eܪ��8l#EJtDW�*�FP�a�"Ν�n����o�\DA�P<J��x)���Cx�lG6jB{� t�,�>��W��y��Qy;�"2_�t
]#���VCE�r���oXbt<�lM����`����G��_�Xu�p�1J��
�V�a���"QX�:0"[�d��]�(8��.���2���>��85A�]��N����~�w��}:�[L2glNy��j0)Ӂ�iKLX*���2$���G�:/Ǻ�#�z�~�	f^��β���#}���!�Zz[�q�w�gd�st٬,�Όt��^��X�O5D�����J�'o^�Pߚ͢\��⸦��p�:�^޽}�랝�.'���v���a�q|�:��_��*�ź�ܯ�AC��(t�_%�ۦ��ﱹ�V�W�Z[�����Xld4��_0�IEr�Z�̷�,��C���m|�\G�����l�'�R�Uw6~���t��Y
��DwŻs��U&���$qQEtI�_��/�ލ.@(���ؖ�V���i���Ӯ8��q=
���
�[YJWp�Ђv=<t��f�@Y�Y�q݈į1H�u'��b8ZM����2�AVU�Q4o�"�OO´|+��5��+��IxQ�g�+���w5�	8�I`�F+��Ly���l��54�ZxY�;#EZq�L*�ҩ�@�Z��Sg�D�9BV�r������@��x]�8+lF���\g_j�d�-�j?gc�\�]�W�k�`�8�Ő��hp/��3���M�q��g��k�����,��t�@�"���)�{�~v)?�\�V6ޓܮ�'D1�ʏ4�) ��K�����
��9[8�s{�Z�������D��̣	����v��#���ah�����/��7�;ט�Y;�F�[Y�o������<��\�3�Y�o�jb��[�vO�?c�>�%�lyo����^�I�z]؊�v��F,}����,Ō�U�u���G,�o��#Z.8uXj��0d$T�D���l4N��.��ÅQ3��FHA��o��G0W�Fq8�WѠ�%�C)�,φ{c�t�����޷��#�L����P0jn*4Qo4P0q�����)���#{�- f�3"Z�tS���+~cGP�ZQCU%�7�5#C��ϐp		��ۏ6A,0b�H���V���U��r�/TB���z`����LמL>N�����a���j��_4�Mk�~:��w_<�w�
��/�@���{"�wڃ����_��]��6�z��}k���ӿ�w�=?=;9:~m������f����ų~�e;Le{���x��(R:�G�ݼo��7����5"s6�&���O���_*�؜���>�ᱤ��]��y���T���oq�^i��&qR~
^R���>Y$`�,�~���<9x��.P�M�����|�S�z�����1�}}p��׭m���p���O'��ӣwǕ&Ԧm�o�+��=]s;���W$U.�T�\;��d�r�s��Į�9�)��0�c�v`1�}�_RK�g7[w�0�V���j���\#��=YN�]3i2H�E$�˷����{)�_��9�a8������]a��e��Q,��m���K�Iu��VFծ�f�#��f��	��پ-�r�F�����]��N�He50�*c���K�W��bMџ;r�E.�Pw�@��@F�{��d�;Ȓu֊�Hng��=i6
���e�]�(��a�/�OE�}H�y�
G<�h��9� 0����d��0�&�I	M�/E�UMo�����m��֬����>�Y�ٟ�p��a(�)\Ȍ���-;�>�Bq�7b\�'�A"�qq��y���_�fI��S�:��s�v�Zssȧ���I�N1s����(��셋�v��r?�,�-0�r�~�����a>#��À��+[���5?�	����\���&)�@����%�?���>�t6��u�I�Xi�>�]H���TT��9t���?ܹ�w��S=Z�����Ch9A�F#��T���<$Y;�w8���?L���Q�����>��tW�:�3l�5tьy�- 
B�nԚ�u7�e�>�i�fաU��/%T�s�܊E}ND�M$��/�N��w�PXD��`��͉�W��� ��&�~����0.n�[~wR��
�6z!��4�aK��r��ƞx�M\m�c���c�/�U�2�5$���=8`�Ś�3XsX�m9�l��x�g���=g��a.��l(al	CT�xl1�]�h��,C��"TZX\���zÈ큾�	���hN}:�pB,Sℐ�ah�K/�(�6��:��أ|���fH�NFH��=ڰ+�I���\����q�'l١LC;��[�𣞍y���I��"xF���f�x�%�e��HIb
E�ݜ������ D��:�@H��v�Q�1�E�$�����ښ�=�M������`����p�oc��VA5r�y+wHi(���D~�AA"�)�)ӟ�F1���&���[n��3	�((IS?�E��`��LG�l7�'��CUW�mcg]���<�'^�a?{ ���`at��r(�e'|�æ�p�l�����pQ�Y&��1���uI��Rծ�Q�EM��O�J>Gl�q�Y�VÆtK��� �r���l���~a$;_���6)�R��-FՁ~s\����K�FqUd;^�Bv��|^�W�|~s9yg�F��q��X	jj
y�tkV�s��SP�l����+��pm:a<�+)ӳ_c�V��"��F�U�XC,Ĭ��3Dgl��Xl
�sB��P��E�,C��C��8r32��a<��5JN�<+��O��@�*%�Xmn��
���k��vJ��*�a�����9t���ǽb�Ź�D�WRlu�ym�ar���s���ʍxc�l��b���>W��ŷ���8���B��bc����Y�<93
H��(j��4S�%����;���*$��!Q��Qf&�2?�oԩ3O��%~2-�%��
	�R�����^ֳ�
�y��W�vC.�&f���4.ޯ
Hr�iJ�d��/��{�PG�f��㿻���ݣ�n��Ë�~k�߾�6<UحT�f�Ӿ�wsӆ��!�c�B-@p�i�	�\}=m�J���l7@w9�4DK4��7#�^�Iӓc�=mi�b��R�L�Y��|���COd�LN���~d
t`X`�φ��q�Cd�	�|�����/�I8w,&%u�e�U�y�r{���d���x���%Z���lH�P��#Bz��T��/X�������:֛$	�G1u�2'=�]�!��k7��GL
��� x:5�`�*�;�[S�_>)��#��C�6 �m,�Y�� ��+���!�}{�!��KЉO�����+����/c,�s$�W������8��v�ư3�n�����45�G�S1d� �e&"
}.��C�e62�.����I>�iR$�Q 9>I������03��g���r�S�/�K�:�����QzT��p	�T�Cg�c����9���b�"�^yx�>���7WAI��՝�-��8h�'�0���3
Q���������q� 
���*gd���+6ܩ�y��A��N��&�����Y���[�.��	�>�PT�-tϠ�$�Ҁ!�|_���/SZ@��<#
�(Wjs
{��>ث���y�~'�F)��A�b��AfA	���v�n1z/d\#���6�����xCM�ᣓY�B�a�Z秹}0!.�}б��z�|��� R���W&3p|�{�!(��(լ�YԵ�?)�j�ܿ"SSOZ-�{���f�J�(�ݟ�H�	r�J:��4�z7ی�������+,[�͋�8LT�����pJ��xu�n�Z��]��ռD��_���Aw�b���iY=a"��T����g�m�pF���eR��M�
;`��9�G�5�v���cs�<q#������֪GC�Cn@|�B�Ɣ��zÖd�r,��;ZP�/�r+��}�	�_��W�|$�oh=Ŧ�K��|���i!�#zgx叓��\ݪ"��x�((vMk
��5j&�an��ӓ�G��_�a�=�����r��*S��t�@muGmS��ozf���'�b��x�{v��I��[���v�M�sQ�T����j��z��S�����E>�̟`��r��h20�,2X��̳~Fm>���/��c(]����ۗ�&Tn;#�&\�̸�-oY-�܏�(�ݹ�����c��/�%��l�Ho�Z����
ov�;�6˧��sH��ߎ/�>_��~ruy�����@�)�~c�X�K��}��;��2��~=������/'_���jJ]�Z�Ѱ?�~>��p����#eh��T���˻߮��]��i���?>�zzqy���I��O�V�.U'~8����o�KL�x�������ٗKS��P%���v���nb`jh��l<�
#��	D��n������N�,.Ϯ�~��<�d�9L��M_�B}�ע�l���}�n(hG�tݽ_,@m{��7��Y�#�0�Eϙ�K~��XsU=o+Pa��p��������ˋ����7�i����������B�X�L�|�����`�P��K��1ܡW[2��ʅ��m��
q��>$�]����^��Ÿ�(.f*{��Vg�n
���B� m�9�=��pzA�:���^��\K�Aώ���s��L�'y��x3�)���ɰ�?tXG4����x,v���e.�1���z��4��l=$/$�^��|ރ+K��Xz����h+�������g��I�Ղ,�x�h�ڿ���zM�e�
��&����������gCW.O�$�v��)�������G`{�A���۪|���\�P_]�(�Go
��>�� �2o�ߴ�"5���4�ӇK�n1�c����+���n�����w�R/�Ϊ�z�P�ɬ@�mFW��e���X�ϓ.\V��{�]r?6%����͙�
8\ή��-ܖv4Қ���޻[/E��Y%E�'�{.T��z��x���u��܀(�{4#���b��㥬�dNfZtLͺ�|s�th���|�wۿ!4%.[ΙŹ�9�7��{7���Cg� ��\�v��!P��7�C7f{�R��۟��xqS,��w�w����Q*���X �E&L��f�x"D���gdn8r�����3�kt7֓xK���P��ҕ��*O~���3ӄ����W�az�1_�+�34�V[QVwb�~WW����F�l��єh{Ȭ}��4�Em�Hs�l�+�o�o���l2�/z�~�ob'�����$-B��l@��<K��$)�
���8c���gm-ӂ�<�Z]sʻU�S�\��S���9h��\��޹���뱡[�ڠԌ�k�d(���V5-��-կ�,
0�@�~r};C��Q��	c�&\o�`A����l����Rō�Pj{��a�w��d3��>��Q8s���R��I�E1�
�\�[��LWJ�k�ɷ�h����\�{� ���V��'�=��N���_��B���ɽ�U���|:��yB�<%��'s�5 x��6|�%/N~cNk@o2<Vda�\�\�I]�^	�����:��Q	dJ��<��64υ�D��x��U#I=,Y;���Ou{F`��I�0Ti)T1�(���
��z�'���c�X�s���z��`�т�rX
��^�>�<��G/����J�x��^�,�S��p�Hm&�T�G�g�4��F��a>���YALj<I�D����[�F�7��x	�h(�N�M?�C��qd�;� �6���R��ZZƄ�(�F�li0�����Z����8�(��:=�xqL��Q��G$1q�͟�(��C+�e�d��;�
gy`a��]W[˯l���-�U��
Xr��"9�clN�2,�"�||�Te���e��JZ�6pP��ٗ�f�99߰W�B�\��e)<!�D��@���C.ۦ��9����j�w˚���`'�(�!�@�?�;h�U:蛭
}z{�$d����;��jށ���k��suP1}bR��Ѡ�M�L���.���Z�A�A)t��k�a�T͍S_5C���~a_~��T��Q��:�,~IѢ{�3Rk��D��6!�NE�������F�����à_�ɲĈ,�Q��j�0�eb�w`�f�=&َ�p�H��p2hމ����`b���/AU)�-���l;zK>4�$-q(q��3�0;0�F�3��S9X(d�e����%��"+TU˓�ҝ�n�u􏶒���W���[c������<����J�8���z�w
�� ʎ��Aє :'v#!M���]L
7l��#����x�7�?&gyb)�'sbWb�%�fR#����Kh����Yu_�Xf=A�����m�R�8m]~������@���E�Sw�� ^7טQ]���’�7t��M�{��r=��IZ�5�H���1!�4�B�=���:2�f`�<�J�ǘ��z��.hP�Ἤ�N�n.@�HM�%�
��im�+ԗ(wʶ���e�Ӷ~Z���]��ڥU��S��Kŷ�8-�g�~��3~�0���>�c*�{8��E���:*R�^6��#ҕ��5U4��۴�"dʲ���^�9�q�z����*�Ѥ��Ӷ>_��g��MH�(�QE�Lx����Qcgd֏�	9��1�~��g(~3�V�%)El
)J�,�5B�v�H٭��d<���>�b:^�$p��Vޗ��J
���OƓ��M����F��G�b ����q�,�ռV�=��u�ۑ�`��w�{��q���Jw���K��g:�p��)޵��Mo�H��e��~Tk��^=v�ϧ�>�V�]�o��]s���j��F��������dE\���J��k�?����k��B����=�,�����-��a�������b��=űt��ݣX҂����A5��ioQo��(�{�����]0��^ip���i�������)~Z��hA��Sob�9�*����K�ҟZ�#:T�	
S��B�m�J�(��L�}`_��e�u�o�e�f�~�*o宭�"��=t9�V+]6I���EM��&�w��̨������`Y�w�^�P�ֿs����)R^?ˑ�����BQ.�*A�S�ɀ�>]TZf��G�o_�٤�< ��G�+e�
fG�N�'I�)�{�^Of��Y��o;.Q/��AHz�<�PU3�(Zv�0�;�,�Y��-O�vR]4�4˼�_�����/_eڼ�V�(��ԕ�_�
hDJ�l��?�Ŷ����4���OP�v��<3��]�i�/lR8qɹ+��dͲ��@�]v�Zg�-��
�
�,T�"�>�r03ê��w�'�f��]�O"鯟2�'�����n
��ھ$U����]�x�ҶMu	-��j������A5J��iW���5.x����O���/f+���U�
����a4���p�q������N����T��]dZ�Eip��9{�³g��bG��i�b;m++C�eN֛����e�	3�p�U1���:�N����o�:-&�z!��ٰi�߼oݙΨ�#�&�.9�b��j�ό�NOrŒlR��N�����]��0l�*F�(e�4�T1 ��U��p��BG�;7X%ϱ'N�=8�mm��]:��{c����=��*���/�@ώ�9����G;&�{��"'z���}g���d8��L��m�5�I��Z7�WAc%�PK1�۫Պ=���.�G�ݽV�ή^q�x�1�T��Og�M9���?�7�0��qq��Mp8s�J��r�&N����]Ko�0�+�%�����P�v�KoA���m��I�lq��ď�D�r��.�-���ԃ�DŽ
@���0b�<���uH��
��{f���f�RSMgd�~x=�P6g
��>�{	�,�kd�Mf̔���T�n��?�А���"�Ci(��6��B)��>���\��2�Ķqj���Zo�覔���ִU�~MJ $h�zm�V���R�Ic�1
�7ο��I)rm�4�Ii���ZS�|0uP�{�!�������k>��|ӭf|ޓF������3:���e�nJ�.�o�/̘���S/�ŒI.��q�1�]����'U;#��
f�����(�؉�%���P��鑡��I���a�p1G���>��R��z��M�Ԡ����y�o�]�+A�Im�]"�f~�-ዿ#�E9<*��l��fE6��߿�8Gѝ���S�����V4��fY���m��$0:��{6��.�(2#$�ͽ[�=�#�b^��l���n)dH�{��]wx��F}U׹�������]G�	�Yw����Os�f���%�o���A�²�ߡ@ug���Vn�0�q��3�M�fֿP��w��3�%��	j���TF�g�����{�m�h���(���/��S�*�}���K�^�-�Eu���CT�����1�d�V�X�z�4j���i���J+�vc�ߥd�fN�񚁩�a�z�����=������]�K���3›\Z5���Ђ҅�����!�n��<���I8?�F~T~�W�1lE������Cu�Z��������H��s�ޒ�Fc�OT_7��I;~W��u[ק�ǃL��42� !��X���DR�l��a���q�M؂%-��w��c t&�4#�ix�xZ�oKy9?,ػ�g��v
g�b��a��+�x[�ϙ���z���lP�'A�_7����4�fE�U'��`�����,���5,�-��˲��r�D|ץQ��o��`P���i8�KQcg��A��-����P�zoQ��-s��:�E;��	��*u�]��˕�,}b�+�h����+�@��G<"�l��:Ǘ�ۿ2P�6�_䆽Đ�.^��*�c�Me��"��rӃ"�����u�YbB����R�%g�I28n!_�8-����![��Y{���r!�ߘ��j��>We�P)��j/����FT��jc����Ϩcrƴ�V,B_��#VG}�͙-twg��&��M�Cб�f��z�A=�D�C@�
:C~H��!*����=kSI��+`�AKKÀ�n/V�^���zl�ې9E#5F�BҩƇ��W����j�/|�������|����h���{oYt����}��
'�6��͛������G�B����Am�x��f={!
�a�	�63�����A��oO	k��t[�g.�f4��-P��܈h����
�M��^�v�3������<Ą&�܆gw���1��ŋ�����_����!�Lo'�|�������x�pƳ<sD���1��f�z��;����Y�_���hڟ�LF���M�]��*�b�8(�A��V�xJ��[
��u*�$�*W��FY�3q+�"_���m�1�N,,OM���������L6w$�`� ��f6e��I��c��,��g�8�K�l��4'y@!t���O��"c= M��P����u{5����nR�$������/
���I��ؘh2�;p(�C~�=��R	��)�ϺZ�E	ƒO����P-�n�ax��k�{?�kd��԰��	!Pz�P{8^n�Ŭw6�0�:6�.'5>�����L��O�Z��66*�&��w!	��@��Ƚ^F ��ŋqk��y���x��U��$��ZO,�8�ϋ�7�����!m�-�⸘��@�R��J��S�u�j#�F~��5п�X� �BPd����f6mn�)��2�`/٥��689�1�R�fū��F�&����/vwŭ�D�iA��0r��*P��	<�{�O=u��&j��Ý,�>x�k�|)�kX��yz=�O��D�5�6#��Z�d|�
�T	��-ܔl!������^Ŗ��o����r:�'P�PTr�M�݁��+�m�8#%ol�s�wӯ����(0v8bg%b���#MwL_g�~;x�{�C�������Σ��bʔ��g�P�8#F��A�e#Z� ����s�AR��8,���ů$���EF�ލ:�L���ٝ};����+(���|���t��*rH��gQ��o�_�[c�Nn�Ád�5.����^��aD�>h��?'��cϴ���rB</ ��uY+�F�.'a�lk��1t�]r�_Aw�oB��C�"&���%�h�;�S󠁯���*��%�H��i����7qD�=~;�!�p��:���}��`�uk��l�^�0���}�xM
���Ɛ|%���]�� nRj�d:�\���������1"�͆�rě����@q�$�<j\�	V̫iB�aC箱S\P#"�|E�c�*�]Y����Vb:r���\�ٰ�2������?4��,)��,�מ��ĵ�q�ZX�{��.��?|�bMgB�1{W�����\>4��2��;�Η���7�����>��C�#���m&�8���dV�B%=��^D��,��&/�"�q'�jhe�1&E����NI�d(�}�|� �����u^ΝEgY.��{�S8B$���T؞�5��i�킅2sR����˰L�[��ن���Ջ��ED㊺7
<O�T�Լy�+�P���������!`��j��U��V�5��]1��J�V��~�amR#>/�tN�kh
�v���<��w�|�6���#7|r"�6EFۚ�9k��J^�gbP4������l~����׭��`gDg ͉��N̅���"������F_ZG5AՔb�+�{ pj�M�p�� ��H��]C��	m0�N��2����{�
�D��'���>�W��0�Gu�=�%[��m1�}�H�mýC��j{�(�N �xgIQ��ױJJ��x+t?��0�T� <j���H����ML�~��Μ&m�#�k3{T�vW�_�?b�
T`�d��S�%thD�V���ϲMI��ޓ��w=Vx���mOŗ�Oǝg�A5��:��D�^C԰1!do2z&���8��Όc��*����{��8�<�@�Mo�c�w�{!)��{��8��SZU�[Ho�0�%3A1˻��Kx�[���i�|^�o�8�a�F��%�.Y����"�X)bg�PU<����Q �Dr��* 3��i
_E�Gf-KG�,@8�<��1pNRv�tnEKt��‡��q]L��ކ~hSx&3����\����ްN���*�`N=�d��r$J�߷���{%�!z�ۍ��G��HUA��}�pH��̜&ꎥ1�v_��a'��
�_�\�P����
�n�/,�C�F)��-�B�$U�@��5�5:D�inOG�wWp�EY�������ܒ2F����O�`O����O6�w�w:������?t�wB2����/�'9�u{I���C��^�w��x�|�m��o�̋���m��N�p&1uY-����}�Ӈ<�p�uQ����nͽ��������O��6?�r)u]�e�����E�M�F8�xፐ��GW׳��!Iv�q��R���ۜXv�~�����!�A�0p:�Yw����t7��^Y�������`���}����$3�Rd;�=�\d�ُ��8��x6;�����?~�z%]7�u�P	���n�_
�h�P�������:��H�_z���2C� 0եϫ,R�"%�d05K�A�yl=�:Hm�!��KYn+#V�C���ko�7�YI�,8)�2UR��j��M]a��q쭚���r�M��v������Lh/X�G�����/�J��9Xc%+	��i>U�XN��6d��Ԋ6�Fbjl�@�Pq��i�jɂ����WH9aESkh�ח���D=��T�Ƚ|/��I
�7K&��1��z��%��/��j(��%�y\t��oz����������J{��'��U�5��Y��P�\��@o"���uJ3ƞ?��g7�
��Mf�8��*��Ef���=���pܫ�j�&s�B�7��U=����ִb}@��{��v��qZ���z6�N�v^͋��OP�����d,������՞ȎH�	�t/'��A��g�g�g�����M>\.�6Y9�A9j�_��M���N��yA�ȦwlД�@��ť�`=�{�q��).�o&O��H�rZ���~I�㹗�H���"l���b1�5F�I)\�b+��C��&l�ӳ
3�����<RVeG)9W�ї>W�ڡ�p�"JV�$��~�������P�Vn��}?�OM(�d�t�`���(�q�auV-+JvT}\J5O���{�\�:��m�;��2m��iu^^M��DL?3����m���g��7�rޟ�s1@ái��M�3oJ��	AZ��SʛTP'2$
c� Bm���.ys^v�>�e��I�yYؙt�u"iBV6�S���5��NbERbR�q8�X<:��Q�덈"��>��05S����4Zfԟx�'��M/^+�d�'$� I�7LAP*VEk�1N��qv-*�b �ϵgKz^�,R�x�7�fX��)��/_�A�)�^�9��iSTJ�f߹�j��bq]��7e&=�%\��FiX$�x��3��{|�Q�#?/��:�3�mE���`��n�/&8��f»�X�g��y�EB���O�	}5���%��\�t�W	֎4Ϧ���oL���f��Vn[m�F��Ad4;)M���r!���F0>�EG�$8dt �F�*�(�f��%���i`��7�/ԃ�4�D��#���bpv0��@���)�V�6Q�Aa�XWjL+T*���6j.ql�v.XR*G�f�j/p���ܥyd&�H؊�g��'�H�4����$F
�
E� �aH万5�CCk�!٭�U�b'g93����"�]�JV�
+�k��7�C����c�6cs�xC�j��M�i�Ð�-Bc�'A��}�ނ@0��ms�$��:rۗ
Ŭld�ȼ��������������U�D�.�3�����?�17<�8�tW��5����Ϋ�����)�NT���'�U~R���Y�0����ի���V��Vt��ml@�P�3�c��_��<�³�*�'�����!hN�p�Q�#�I���t�
�}���׊�i"[��~ÒE�٠�s��cwp2$�s�N���2�g�	�k���ѯ|4�`q9�>.`I#b/^hW�%k_20n#�\�@�"'��>O�пt���0�֮n��v�Ljuھ
�Fۉ�v��B�
/�1�C������"c��.ITcF�W���3�E�Ѷ����KG�焙�r����#)��`R�Ѳ���ƯQ�C��:��N�<�gХ�K�Bz~�*Cg�����!��_���\�	r{k����&U���M�,F����N^)Ǝ�Ɗ끹^N�m�v�Ԉ"����tZ��#8(6��h:�`.���7|��S���D�á�pЙ�
�
��@�t�i�}�Y�O#��D6�^��
�=K�eA�s�j?u�hS*�k��6C����!6���H��i�翈г#�o��'dY]1m�=��p&)Ac7��a��5m%A�Q� ��s9m7�x٘��S���,M�ˆN{��R�m�l���e�h�8{�h���B	a���E��jBZ��R�F�Y���o�]z����~�k��n�c���}#�g�xzޤ$'��x#�gں�$'J��Yn���&�&��miܛ}7AU�C��@�K�%�<��wi�tߤ.����xKt��|3c�u�tqa
��n�ș�\�h#2�7��Cyp0h���.	:��+��j́���a�u�.����A3=����5��^FS�n᭞��=�}��S�K �S����E�� p���jVX�syy���B��N9����OX����N>81d��,�o��r��]"�w��ɀd�HCD�}<��|�:hB��6-����Э��?�t)�Y��[��l:ww�� ��X�dK.r*x0Th��_]�q�خ3�Eym��ֳ|�������5��m�1�ٝ�UsY (�����u�u�^ξ0�b�<�o��v��S�v�u�����ԟ�Dn0�F �a�aiN�AH�����
+>(�Ӊ	��%�~�A^����n³�ػE�X	ڬ�B$MI��M�n-w�S/9��©WnsA~�9���ώ����,��\n��U=�^U�F��r9m��9�r۾
��c!q�m�v�ܲ�����d��iu
\���~~99�^�3��J�T�ݶ�H:��>����}��9;3�PBB�QJ�\�!�tϡ�x���*8���
E�^�n[ΐ	1M)�4��!���N x���ý���ӳ��%�>���!ᢘ��su5�_�łJ����dܓ�]0�A�\*���m_��Hj�5��4��Wo�xt�m�µ蚟mS����J�G��(6�Ah=Ц�0^���G��A��u	:��[�ӂ���~�b��$��1�Y�i?�����C��#�I��aL����E9��MF.���Pj�澻���&}-\�ۛk�S֫�,��Yw��Q��A�XQZ-_

c�:t�[�*��q������k��B�ʒ��������3U��4Fr�x)�;|��3Jj6����ٲ��j쬥��������G��ъȧ&�R�w�!�Q9Qsz�;|��^����fr�RG�u��n��.��`���Oc��j=,Y�a��b�mŔK��zܠR�n�D�Jqf�v��\n���������Ҍ)�O��A��4�oցV]
V;�f����Ү<#3'U"��,�@��
Ե���:W=&&>n��"�6�Tp�XV��\���u��
X)��O�P!��zh��#>��a�F�}A�@P�,E�1/���`�(��XEK�0����T
���ko�8�{*Ҁ��t�IA���Uѕ�t�w:�Rw��-�KZUp��<?����O�	�x��x����#��jBX��P1sF�2e�v�S�R�젇z0�꣒��h�����NºTeuϠ1����e�|��������;|�Ϋ��
B�x>3j�ȬoD��>��_���9K�ݢ��$4���}fZD9��?M���z]�8���"^.nWN&�N"�ތvFqF����_��,�/�h�����AXT����@�F��r�ִ5�M�YmZ��)�Vm��ڴ%��Z�s�.���۳Z�
M��Y7��W��4;��a�ѐO�ì֍&sL�?�ʤ=���!�k��	z7�����5h�=���Ymz֝�C	7
��1���dC���ri��r�uԚ_�ߚ.n	��J�f�ַ�Г+
�@XD\����>��%^����=�:��k@�ϳ���a-�ٗEp�_�?�K7@�W��ߋ���/�f���DA��~��PЁ�鍇^.�0���חqt$�P[J}t;���@q���e|
@��{�@.7�&V�4�LH�&��{�
hxӿ�\r�V�/�KY�����<�2�g8�O�C��
���:��Ė~Xm�\
}�I���_�����=xF��au|�Ss��[���
��vS�Y�T�\��4��!�o��T�
v��{e���t��>�7<���)p�7�6, 7?�[���,Q��B�2�Z弌V��_�@�PF�|pL)��꺊�����U��9���|\� =Jztx3Y��ë%*�z8�fSs�UA[I�+GPǣM�>�n�@J�D@��}܅`9�%z�Ps$t��E����X��x!&��z$��(�Z�D�9�2�u����Zѳ�l����

F}}�n��4�V
��j���&��H���V$5�	�J���^��L�2��9Fa�%�{R���1~�ء¥c1Y>�t���l9c��[p�b����.6���!]��p��e`tNQm�Y��+��q����ɟI��Sǂ�V���F��W����m�眩xg&f�T�`��JbD�����j#���G<�]��C��ɐ���6��2��ۀ���"��Ew30�8�䬟��m�i�rc���=�C�u�>,ݴ9�(M
,}
�΂J�qep;��3��4�3�:�`F�1�[���0m�E�e:��`��Dk���j	�eĂ�9���,�|ڦ�Q�t�X0\fnx~�I�>�;+�m�ѵԍ9�L�1R�[�����/\-��Զ�����q�� y�ʏ�xP:�(H>]��Hޥ]7z���w����ZmO�p~�R
d)���[�>�V���}�V�d���`O u�.a>��K�'�n��]�e��O�">���R%���h;ݩ&$m�=���麟>�����l_���㭟��1�OLper�G�IN�\�s��4�Q%�	���T�Zmlp���D��{%�k��o*������� ���[�f+�L�Ra�	 _��U��IN��g��׵0Gs���Z�ï����(]�؛B��ι�qNnd�9��b�
!�w5|��+��D�/m���
��߀'(�5?��W;�q��Ve�*��#�>�Z�pXto���Š�KUd�0c��f�M]�H���/m(�����kc��c��`]�e�;hH3%�c����BM�[�L�q_5KUQm���_���UG-�@#(c�p��u1rE	�
��݊�1U�Z��G�45u�ljajBk��B���c�E�G���
`�==���35�jrd[06���T����u�r|��ٖ��&��9T^7!O�d��r��B������:Tl!\\)[PA�|�]!��g��� ׀�&�y)�Bg
�i�6)�Q��0�V/9�y��$�.3 ���p.HMq**CK��\"�Qq���p��J,�n�!X	m�8�$�]Kk�@�9��.T�SJ���CK!�K���@`�L�{穣J���8;;��:߷;�S=>'�����s�C�#���T��em�-��hZ9����EL��9�+��j�	5�
����=�]�a��?�3λ	�IS�}cpȠ��k ,_S�C�pTbN�&��X�;L�>?n�Wn����y�D-�����b�:�.T�+���r���95�9�Ї$O��{��a>B5^
	< AIS%W���@�N�]}nQBwA������<@�4�S2�sFƞ�k�`3���[t���-Xƶ�Ŵih��P�D�l�aG�|�#2�b�f͗˗�7��.���ܔ�9	��V�w,�Y��	o�5e.�'/\Y�)�w-Á�cR0����kS#���;��0�g�|G�[',��7ٔm(�p0W�QSuW���Q?$�43��ò=ZR��j�[�w�4�
�4z�����Վg�/�{'�7�B��Ⱥ	������8�׋r����d��Є�y&����t��x���0�.��&��/���Ԭ�ꍠ;RXN����`8�:���ZD���Ώ�b�D�7����lǝb<�T�:��F-��unFZ�"4N��`-��tt�#x��1�5���Eִ�ݗU�x'�*���r^H���]jF��/�P֗��f��"__��X�����杅�F�䡈�,8�/�;��`���a��@h��4���1i�m�?��\=���������0�#3��'�����=sJ3%�Ӆ+F����l�m8�D����~y�i-dz�uו�B�+p��7����w1���F��Ts[�Kgd�4��e3kr"p+-Qh�#
��>3-�����S���H���J_]8 �eڽ��n�}��\�+�̞'�
��<�ݫ6�t�� 9	�F�\,cm����ٷP���Skt
%�(�-6��,s�^!��zu�/;9��(���e�y�~/
kQK7嚆ewؖg�0��G�����S��}!��ZۻT	���֊�XT|K
s��If�K�S�������j��.��QY���n��@x�-HhQ��n���?�	�h�f�LZlk'tI/
�E�,gw}"�
�FD$��b�T!�}V�X%2�v�i�ZH�� ��o�����8��x8�[$����6��#�F>��<D�M6���G�i��F�R̿�hE'�2j(7c��ς�e.p��P��7N&�w������4���Ǽ�^�}��	v7�Uk��y�^zBu΁���[��2��ۏI7:�1�|�C��N��%�[J�3��reFg�n��a��5x<�|~�j�
�ǹ穌���� �=����5T�yµ�G��cݡ;��6��C)8)ƥOmN���
�E�{B〕5X�ֱ�in��J�S:�h�2;��q����6C;)מ�?������f6G�3����,@o��8u��`j.����0����ڸ~�-ĈIѻ3)c3:]�֩��ҷ��o+�?��q[McN��_ �� =2	XO}�6�I�Y�آ�ly�d� Ru����^RB�5��m�3���䈯�]*j/{<8�3P���ö�F`	z�Λ:2�ÜxS��y6�*c����b�ڼ��(fQUP3\8�g��'��+'E��""��4�9�Ww�Lh�o��Z�ۭ(E�֒]p������N�IT�&�u�kŏ������B�6M��H/[-+�j��k#�|�w��J����A-Q�C
�#.q�&R�����yl�=����I�������D8�I3����蝟�æ,fYY��<�����#�f����|����z{��<�H�&�!��W��wx��9ɵ��ERZr���U��2Uj�ʘv�J�0�-�>( ��0;,�c���\8Bj3�<깛M�V��ޕ}��Xgs��GV�H��訁�
IN�^21	�����,�g�f}l�m_V�	�A�{_N|b�rێ��SB{7+���r�z,��
�.�I�`��v�P갱�p�'��v�~/�'#%�n���<�}eq��"#��G�)%V�]�^x-��ݎ��������硭�G�5���uо�h�ꧨƓ��~���z��G��r����=�~4����f�0�	�~3���;�W�~*L��_�ps-ܤ��陂�

�$���L�V��wW8,m�[q�t��'���n�+;;c2<�b���
O�Q�Yo���3�˹�aQy<#N8��$y�	�[��	�����(_��� S4�D?sU��:
!�L�ˊ��ڤ&`u�|��)k{�|�1�^�
w�̯��Z�O�\u�*;�S��IW��Ǒw�=M��2:~FB�M}SQF�
g�Ǘ�1���$��ɸ�N�[x8�S�d<M�$�k�@�Z��q��qo�c!�Egj��N�-A��ǂ�o���>(.c�\n�G1K��6S�m��yT+`���|���
B����KF�W�K1i t��fm���G����v5�Hp3��Nd3���)�C��QES� E�G.
Mq�H����
�X^��~[��e��-$̎k;(( @�>q�p�3${Q�� f��Y�s��f�S�0�\��~}/9$\Z�斸P��Yoכ�jkK�Q# �x2�;�a�t}�u��I�`5ȭ��N������ы����{T�,�B��ܾ�gfC�&��;;I�Iwߧw�oP���n�n���߳�1V�Pd��,�t�$��EW�Z1�#�
1{,n0����(�g]�muSpO�㤘�2ۺ)k:J�Nf���U4���ez]�}&�4)�TESk�G���0��|~6��Y�EK�WJ>����m���g)�A���ѱ�ʹ��p�+>�L�x*p�B���H���/K5�Z˜ L)t@;�L�_C&���ӄ�
�r�z���6����rF^G7od�<P�X�����"TzI|�O��r�I���CRC2k�A��n��F�d%)wNJ�pa@%��z�y߆�8��j���dt#���-�f�Cq�Q2f�$�N�˪l�嗒���b*.�X�vl�$���\B��U�E��!���(�?�/���N��[K�۩�}9W/Sz�fJX�ɍ෎�����/�ұ�?�N�$M���������&o�G��EyH�P�#��wu�|������tz�?�Ի�T~	08 j�տ�o��P���������
��3r��Ap����A(	p����209t�\�U������'�f�f�
�
������4��O�
bH�7�*@�.�B�2������Ev���Z�j=�Fh$�_��<Q=�oZ�%�q�����6���=��K�w7A�SP��N`�A�Js�b�(�Nx%�&�8��
n��e+��9ѐ8�=)����;�c���I:[��\���I�Y��ج��'l=���P,f1�W��6.�����$��]��)�୫��lG:���i�[^��䩱�Xԛ�#2L��`��;i\�<�@�,B�"U��`6����#"D+v�����^0����|���e6`b������G)&���ɪ_aʞZq�G�w��}H��nW��1�4J�Иd?f.�ڏ����Ɛ)T�[ĵ^Xs�o�w)Q�ACJP� 9i����]KO1�+�%�� �ZU��
�$*R��
�D��x�f��®�c^���قΥq��
B�K��&�˞�[��o�2�j�ah�`J�8hs����:��#g+ݒ��a�X��*-�s:�J}ڣ/�y�R��.-�t��Ǵ�gv?/�<S��Eu��v�nqI0+���Q���C��<ԍ���5B2���%`9��@Kc����eӂl���ב�P�.�sm.%����Y�]t���.#��?�|�H�����7��B��	�Q<*�8�c�����l ���f��3�;��F��e�Cn}�~�t�&�M��vU���:�6���$�/�}�p\�0��p������G�v"��3ѭ���VFc��*�
�N0j��* U�H�,��B�wC~D:�TM��q�i��F��y6�E�`̧0��U��àIqii+��0��ʚ^٨��}KJ�lw���C�A�k��m|��:�j]��È	K~�wv�k<�\���.�T����t����L�9JFR�\�!��S�X�=�N��̇Y�P�q4pv�
����T�q����7?�+C�v�ڛv�顗�U��Y�-y�Y� n����b	�5e�Z��2�*ՖKp���lX/ϩ%Ҋ6"�^G!y�
&h�O��h��M�}�E���-�wժ�����	����E�f� P�s{��9������~�s�}.8P�# g�T���0�����rǀ��Q3]<������5p߂A�x$���Q]d��qi/W�Q#������X�n4�l�=):�e0�Pq=�P��a�&6әD���4hC�Z�
g���8ԲU�\�H�A��tE
܊F��
ܾ<����yi�Ut�YĒ\�a����V��R��>�:+���Ƥ2��uf��V4�f�p /�`I�@��L뵔����ȆA�f��*���|f��/�OoY��?R(,��X�u>�� ��|�����][o[G�~�����H��i���3�c{7�$k��l��D�bF"�<���>]׮��s({0q�>}�TWUW}Ş\��}���-()�`�x�R��!/9����Ǎ� ���iN;��5y}xb����f��֪!�m"�"#��%Gm�N��`�|��mN�!�w
r|�e8<Է��������)�G�د�@���.5�s+��Cܚ��^�U�O����20l����7�2r�.#7!-�$p�ϱ�|Coo6=�A�Ϗ,��WD�g'?t�`�ݮ����v����|��D��h]��'?b6��ۡ�o�a�n(�GPW&>��}�'�8%Ѿ���9�W��w��=���v��3�i"gp��� �k��p;J������lU���z����fna6�zL�)~�ދ��ݒ�W�D6rq���G�S	���3"O����/`����0/Z8�3	�
�?qh���bGh ����G�f�hsP�?%��@"�&���^ZR����o��j�,c�׸H�=_��/���&1�"�|��2����qx���q�@@���"b�����_�o������6�����e0�Y
W�?����=a�V
�S�MknV�]�-��:���Y
�
��E&��2�ɇ���z9�_|]0�W��F�z�n3ă?*��l~���(��7;9��]?�".r�R��tX/"�NTF}J��@��1�x�>(�{fbGDƦvZ�I����1����:�nV�X���bű1���XG	��7�ˑ�i�0���WF���C�%�^n��'�.3.(�6��}!g�Զ�io0lV7�~1���k�"aD��C9�`�d?�.���G�y�-�3q!���G�di��Ds�����\�#�.������;E�w�6�����������{�1�
�����%�[
�̠5�oO��Z�0�x&C��"�N�n2�C�Wk���5�d�O�SdJ��'��M�lb.eF�;Wh3����ަFY��:�<��M�2x(<���U�]��ɴ��Y�]Pm�-7m�P+Bio�_��&T�o4�n,I�#a������A�"�4cq�p�RR,kBk������x�ɉ
�p���iG:�����Tab�,�N�f��S��� �ϰ8�5t[�:D����N� #^��-��(���]�<�2��?��/�S��pޜ�D�c���h:�FL܇3�}�H>+��U�{��2]` eU��#��{�٩FR�^,xh��q<b^J�\�E��ڂ����[f�uПі
�����J�8���H'�I�R�1!��fML���{Ѧ.�g�'T,���n��cѤ�u�t��|x��x�f��tkE�q���yK����8L�Z��~�۩�'��xܳ��x��;P��|�2��u<#������E;C�~>Ɛ*���k�F��W��P��l�Ȍ��LY�ڰ����x�𡓣5-��xㄞ�鼵yeWw��;��yP�}p��Y�Vp��Q����wܠ�dd�J����Y�O�S�汙�.�v��ljd�����M���o�
�*�����-}զex���^�f2ܱ�&�45�t��(IgcYS��񰐫�3DY�c���j��$F]��ZO��쮂����b�X:�	g10�������m{ʖ~3�����E�w�1T���
V�I܅�xE������&��EK0���6D����=�[Ǟ�yFIډ��QWC��0��t�R��Lg�_W?.n�6DGt�Z
H��*��- ��
�$6֝�9�il�Q��W�����"���
T�ù���B����	.0p��.^b�7D�Ε&)��ў�x�߶[��P���q �X:�N
Ԉ�+�l6�{iO"�h`.LQV�,�/����p��]�A�G5?�H��t���ք]$�Qz�q��0�MFg06�z`44F��h�_��Q�Ġ�θ�R�@�_��#Z�\���+�N�(
_q%T�|�
;��a�9x��*���/?�?�{�W�M�i�TY���ufD�C$N�V*�w���L\�����S��6\.���\tD�*��Cl�_�$�%�Q#[���qZ�AT\�~tvD��ʬ���R����H��U���kCN6
5�d.�W�h�KA;�.[�a1��$�q��'�ct圣�H����� ��A�?�-�,�@=̹D�:��沆G>��}�n���%��Dl+��;BFdoZ��̤Em�0�6�jl?]��Qe׮l9�G�n��z��]��%ܼ,�m��ݞ�-��X���9ѡ�O	��\oΜy�.���g�L��U ��j�ON\��}[V딷��VO\E_��ʏVJw�%�@��\��1�r��j	�d���܎o���w��:�>}�q�lЫz����Ou��g�8}2��F{Xu����sޝj�gN��մy�ؼ�d��,*X�=\���e�/�I��r�be̳"
��$G�ߙE��2�X�7j��~2��FX����4fR� �']�����c��׵U
[xgQ
�ǷjDY.��u��1�e{�ӂ$��e��(&�E�XB�Éb%���|���ju�w���b�l�MԐQK81�TB�0>l֡�����<��E��-��at;u}O��2�bď�nW��Q\Ġ����~kX�n�V�DIr&�Ǚ�"LŌH��ِ'�w�-��КŸ���ۣ~k8	�_�Ϟaɘ�?�)do�ƊrÓ��ž�ݍhS���dKZ���yk���IB�o���+�<������t����ڂ����&^jKm<+1��V$,yi���5�>��]�z"��R��:��ݾ�,�A]����
p�wo��e����W��m+$=�2���O����n�9��~�H������v~�"�y}���bNKhZf��D��}i�rF�T�Ӓx���;�u�<ݬŰIm�.�y��5�8�k�o���g�u�JƮ5�|Ʈ왟�$D$�)T�f7�P���]o����|q++E
�����aW���/_.��CƏ�����=?��I\ʜ�6nր�Lf05Hw�q�tط+�|���o�?���������� X��E����K���{<h�1Dž�����'ƒ5?�*A5d5,�����~���as����h�.���y��xW��)�S�a�&��4N�f/�=���\��f��6s >+4�i����;�1B�bk)��z>݌�׶rU���k�xbEyB�ԆA�u��u�ث˧��GM� �ݰ>��r�bpx�����#R{�n�h��ј��b|�_�<�Ѹ�*��u,�[���j��e��o���d�K�8a��#��[�!*f2M�����1&Y94�x�|z��5m���Om{��J���Qb��e3]��#G�g�J�Ig�����zΈ�N {LJ�x:iR�0�km/�$������\�r�t$�^�T����
U�=NK�LI?m�|h,�Ձ6�Y�A��mnwU��[9�쥷PuU�سu��z��o�,Ʃ�%1N郀]���q�E�:7���O��ݩH��yt���9w���N
�V_r�Lu_�<�v7�z0��y�~'��<���B�u�B��yo������&���خ�H����{	�W��3���&�K���dN�n4��;��M�~�8"�s� )d.r$F2�qN6���E?ұ��b}-�q�-"_t#]���]׺�Gx����;�i�n�����l���m\0f���Է�qq�u~��q�	AdS�"�@��)���‡P�L�Lw��M=s.%l(�M�)-��{���ò���?˚c��4��Ȣ�ה�Ƌ��@��S
��C�ni\��	k�6�,Ya�ܮ��t��I'ˎ�
�T.��͔�0�,0�~A됄3��C��€?]��]#�h��'+	ɱ�in��*��^�f4	�P��eOz���G��L4*<׍�A�݉����AJ�үI8Β�10R�jh	�B���K�x41��#��D??A�(���%���p�߰���oJ���0�P���P�*+Kf���ʉV;��3'���f89�k0(ZV0v�įr�w�%aw��f�c�n��|�^�O�KS�	��ȭIȜg��s�lt凇���Z�>B�Z����RJ��Z�nU�8��B�mG
C@"Hk��ȗ�Z���ZE�Ѻoa6�*�t�j󠵸��
�G�}�����v�4ݏ��F}�6}��G�v��j�f���8u�3��}+Y���Y?��?��Ʈ�&�ZP����HQ�6�g�qMh�U;-e�kd��92��MŽ�#g����3%��\Dd^�F/�"�,@W�3�8_�UQh�*���ɩݢA3�5M������=jhZqr�m�^r(߯X�s�M:C=۴k$��v�䙰U���|D��"l�q\�5�Aiа�i@�s9N�	A�T�A"Ȝ6� �+�_1�8j�߭p3�a�{�M.Hd���yL��[v:�ǭ�dp��g�v���Ī�F���&F��Ġ0l$����i�'O�R�&%�#�/F<ޯ�Lԕ�0�QS�ԅ��t)���A1W���H��B]���b��Z���&F0�T��m��M]��ηS�,&#��6@3v��,�H�*��8�����(B�+��m��c�~�ɼ�6�PX�65�i
�bh������t�~����	��2��j3�RQ=�=��!{dJI4�J4�y�D��0�¬��&����
���s���
��
?�枰��)�S8�_On��6 V����Vܐ^�?`H�Es��Q�*V�YT�N��jDjF9��o//�ԥ�8���/ p�M=5nr>{��A�t#��b�J�q �2�0�R�t��I���}�J,�f��W��I���%`�t�}�Q�?�?��05�����L�	\Πv4yr�g>��6��|��˴�3%o�(
���;S�ƥ�8k�4�<Ԋ�H�����M����Y��f�	d�:���f�Ҙm͹D}��2��o4��,^�v��v�\w\R��taχ�0�K�0<���$�,���/�����v�4�`7��_s�7�l}�{�>����G�	{0��+]�Å��ͨG�)�9�e�q�{��lzm2���}@
0
˝Z���qS�AoJ��!�����1�iKlI���Y�
Z�~�
�]�REAN�'-wC��s��+yl�<S����2*��A ��|b4C����U�8XW/�N�n����BZ-1~Q��MF���{��5B��#��On�g��"�.}q'O,��}�mkG����-�Dr���<H��l$��2�ؾ����c�*8���r7ৠ����R�uVy�PF
�aς�I�OT-Hƍ+Dh�G�$k;=��w�>����I|����x�Z�#��m��y��%I-�ȱ��I3G�f��Y�_D+�8?k��O�e��Lj�qH��
�%���]sE�J/��ݯ���
:��ݷ��@�*�vY�Y�]������Do��mZ���O>T���x��
s '�k��|���p�(�E[���5(�wX�Q���CŨ�̄�y�m��X�*�ĨoT*ܝ8��$�j���%"��<I�/���B���YQ�Y���-c�a&���l.�>��N�LFz��z��j�姐M>�v(-3O����ruD�)GJR"�Å*(iҫn�'�v7`b��#�7�ubl1�2�%թE�Ui���Iㅺ�r+���G+�*"�;�>��
��ۓ�6���i"�k
������kZY܏��-����Z�)�
����|	�\\~=��^�C��$P����ؾ��� �q�󲪓�.5'�i��qOy�Y|�h�۲�b�m`/��Hb�f��z��yV{��Mϯ+z"��v�d	��ӵv��v��I������]�n�0��-z�[���С@Vl��À���X�uN��4�>�O$-i.��%KMK�G��A�&)�,.d#�rX6:�f�$���ʣM�T(�/���y+�>�Q�r���q��x4l�ʄl@b��0�iU:O4d���H���Aހʞt�R���*ۺ8=�I�g�h����Lo#f,��K�`�t�bK9�(�a7�ʄY��������d<:
�=�Yk4
n��ɵuA./9jF�!�+
P#;�54e)6ei�&X�n*N8�ϊ��dv��L��}X2�k22
�O�%d���]4�8�"�-�����C���C�J^���_L�?}���-����F�n�Ҥ���KPQ�����x�	k8��m~2t�v��̜]]�#f���U5ƍ`�Qwp�� d��<*w�δ
�|�&m����l�;��ME�ͫ�;a'i2��G���r��t��E��ٙ�r���G��nM�iK�9�?�V�����V�Ew:�x�weJ:UF������#&‚��[���#��w�#���z�I�^�L8BC����=�+b�o���F��^�2J�O c��.���p����@o�V=��ɴCT�s�}+�C��-�'��������O�/{nݯ���_����1���o�������F�
O1A�ڽ�k����ӹR�A�x,���O���{	�Z���n��"��J¹�0J�09����'���šqq_
�o��v��䇖;�r���S:��j��c\�T�[0O��P�z��{��R���Ume*7�Q����
����]�n1��)��ڬ�B�� ĉ�(B-�@��D� �V}w<�c�7	P�������L�w����֫"PX�J���p�۸�������.��\�0\2m�V�?#C��l8�ct�6���{�H���Yt�.�(#�u��#a�DE;�й��橐�$���'K&�K%D��$����2�t×�f�R:���j8#��j�	��޵��r��ΰy�S��&%?�&�Ѷ��l>��z�W)á6P,��r�ʲ �h�dv��l-z��	�B(�P5�2��A�ԴF�bQ>a�6:�.^�Z�(���U��K��	�<��A��oz(u�򮢘0�����K�B��>�#8����)��1�.��L��q��"��v�2�Q2��&U�+�7OY�p=��;kf/�s�AZE��m�{��5��h���'���R�ŕ#���A;��L��)�SO��hasfᣣX7]`6ubC�n��EU�7Q�7��(�)tCH��iip�I�S;�,��Ʋ�U��/J�>f�M�Kkԗ1��cw��m1��hk)�������!n��n>�ᷔp�*�����m�ޠqC�&�
ׁn
UD�ʉ+��u�N��R�Y5:˓\��Y��{,[���:���TB�;[�����ĤT "ҏ�)�O������`�u���1�%{Ր
=j�d{7��)|����a��,Y7_9	#��U�!�j�$2!PwΠ��nX�p��%sòO�'ֽ�,W���7�q[ܐ�;�k#��Sw�3i�7�k�a��I!��=%�fy|���W���}g9z7��j�S�Y>Ԗ��Ӝ5�/շ�wl��_)p�k�Š�C��g���b�!|�\]q�'L��O�m@BB��j^��u�P\K�i
	�ڵ��+!�NT�<��#�ą�5#&��~~}��t�����e�U�M��6ǘ�T����ctǡرd:��"�}G}2)�3�NS
T���+��SX���0Qw�>=��9����]S���k	��C��bO���I74�ႆ����l4�U�h|p��7XՋX�"��(9��(����z��XH+��$n	��;��=I(�:泓�_�|"Q���d�����'kF�4f��w�;��o�´�a�#�<��-��Hv{��K�0[��Kc�z#~�`�'��A'�����IH'�jv�!�'3�$����C.k�M0�󥩹���D��~���w	�Hh��X9��$�*�ӝnŰ�7?�MY2�W��&z{k�,K`����6�����]�%�	�b ���/����N�0��_p�"4q�6!q��	�A;�X�����ǯ4I�j�ҵ�㸞�ر��_�(��Y�w��Ů�b�z#]�=�'�RÒ2?-��@5���D\�� "}QS��7E�ǣ_��P{ q��
*m?=������Ӿ/�T�z,�-8C�؎A?���0M��-a�9��}� d�(���l�ݦ��~�[��l�<���4�
n�3�� M!���0o/j��/>��jL#�3ԁ\��x��װ�eoW��~�-s�dVR��|qx�������m%�����g���Q�V�%~���gvf6�L!s�)�)L�_�B��y3E��f@������cL4<�k��^zO�%��q5N������Cz�I���)L�>����o��%�3N&^��p�㔮��� C�f7�F^
�فu�m��
��P�zCƨ��cV�K� ] /��W�t�y��*گ�He���v	k�u@�md8��2Yvr4��7g����ks��~=���𤐓i�c��I�h=���|r5E��({<Erd�����#��c�qD`,p����Et++:�TFH
�'��T�n�a�w�b'~��nN�#aB8��Y?e��v��*�
cO��O���*��`$�(�Q�j�CnJ�f��X��S' �
�8?��p������y!��
��P&%ѡ�������V���:�n%���r�lY
����2c��N&,��1�p�b��F���8��I����9["�mT�d썓��`�i��@�@o$��Uy-.
�Jl�p5\/�XG8=t�F�r��)�n��?W��V�
�e ,�w�������ֻ��CB�UUm[��8�y\����^��E4?�1��~X�=
�X���,��~N�I�ݜRX�K=���LJd�/�f&9�>I��d`���J�p���
e�?�P%|���B�;�5	�3~��m\ʒ{
�W�𮜀򪒠9���٢���I~�����7E${��z�Q׿��0���e��V+�A��bE):��Q&f�<���][��pi���\f�o��5,@#w��M7$��Alf͢h/`�Y�1MIMO��bO%ѽÔ�j��	G��B|J�D\ΆF��'W���,L�To{:r��������u�i�Ig�� �u�U�K���pw���W��=Z���7�X��K[�aG���=c�:)��0�疬�m��z0�֠sj��<$0z���_Cm��0���`�pt���پ��ƀ��O��Dc���7��c�Du,�"�ů���F8櫕9-���o85~�S�\�Q�4W:V1��n�W���Ps�{�S#����yy�:�����(ouj���q��E_�p�"ſ
�u�=d�A^�o,������~O-�g<��N\U�'(��$0R���ƾm�qYp~�����
=ai6{<��\���7����T~fw'�Q�4RBi����}�Gc�l)�4�
�0�~��)g���i�c����P_j�G�C���=2��_�~���qx��Pw*�D�(�nj��h��u$�1L7
k|ɶDah9訅�� �P(Y g��������~����nG~��
�U1{��6=<
�7�h�ⴒ˱ӓ�U��U���8w��D:��ݍ�
�ݍ�bѪ��j�0��ꇉ�y�Y�[����[� ��T=�@�m��v	?�Y�u��SW�r��F�[�)��057��t�8�[s�9<��E�G�V5���x��D�Ip�I�*���F��m)��8<��S@aR"�.�/}V�N9�y;2��d+�a�����-P6��G����j���ú�d��5���Ο��]�Qaɋ�ñ��^�Q%�3��ñpq�=9����a7X���A+��ߤڔ~�ԉ�����v:�n�z+���S�z�T�$=:mE_!��Z�Ʒ���VY5�谶6��А/3Y��IP-ձ�Ќ�4���?h�:�Pq��q/G���T E��H�>�5T�j���D{6[Q@����y/Ҭ��li��l�d��z�@��Ԩi�_6"���[�����턭N�N��x>�S�V����[�����~b����!��d�m��i��$)e Pa�&ފ:.&q�h��)��18D�?�Ѩ���~��A�NX�/����71�U%Z�y����
��lݰ�I���x�&m��wo�;7��E����i�]��"�^�2"M����{�mIDp�ZӍt×���I��y����!h�g�$��y���뾼�'C�ʽj?w���t3�Gb�)׹z����`��ĥ���� ���t��D��Dq?dC�m��H�g�6v�����F�w���z��{_]���WY��������R�e�5��&�F)�?=�b��(�[A�v�SJ�8P�����(�;�:Ԗ�j::,�="[N�`�?ѵc��I�]��/�3E@��Y�eB�_i{���:���	[2����$k��tQ�Q�N�F��˫e]�frbNG�mM�|.����
���!#�v��<;[��X��v�@e�X�����6-��V�bu���ĂxI�`�q�U�$���V^��P�EAϔ:��)y��ic�x�"�Dl�:���5�0����,6��>h��������~	�=�|t��<���,!]�wg�/Њ/��S��q>Um;h#/�[׾�Ÿ��
�\f
����p�S
�%�Ȧ�)ݪ�7ㅣ=@Po��~���3�V6����X39��� �)*�礭���8�1����6�o��+��'Ф�Y��c�r�&h3�~�wh��`{����i���+f�ܴ�x��ڄ�j�h�{w��W���Gս�H?��|���߼{�꧿��D��c�S��視�R.z�m�����	��ʼ�^�X���2�n>�f}J`s�b"
&[�M��)�$�ja|�ę
�7�A`C"[}�XDؘn�{�}�7�{��:|!�66<�l��E��
�峭�w��ױ�p������z��x3>g���
�[[+�YxAVQ`QOs���l�-�l��Y�<_�5�#6z�Q��m��f����'���-ͼpK:�W�y�<O����5s��n�q���<F'z�&�'.�	�Nz����[F2�m{����
gB.�C�7dY�pu�<��z^�0̮ǡ�oC�����N��r�.�c�������3x{��T%֗,�)F#OTҜ�|NA]LȜ~��屄����p�V/.�eUol8�k�!X��l�U�8�%b\��#'��sC�s�H�Q������j.H^g�Om$���6։��0I����E�gi\� ��La'O�l�.�9��eՋ�������`p�P9 G��z�f�	�kc|5,%�B����������V򙩀bY,�X4��kT�}��@�:ej��������H�mH��&����ۦ~�3�e�H��m;sHY%��tz߻�v�
|��n�<�i]�Cӓr�����Y��6jI��-φ�
.E�>��I|L�?�䏮�#�G~���Y?�9�$ir
��+W��벺�P@
jHF8�7$1�-��)GH;�Dt2��5��,8o�*B��`bU�7��I�XQ@6o�ɰ�[��g���ۖɰH�X��j�dH��q��XԘG�Ŗ�~`0���Ƶ���ʐ���_P�fJ�b���+��p��a��
���o�'���>Y�C:�	m��	J����m
B�lz�sH9�I8e^b�&޽z3.Ք)��vz�v�,I�������|
W#�M�ġ���y�9/�"�ϋ�ay5�$�8��.�ȑ�I�,�,�>/@6���h˗%?�oz�rY�AҚ�@޼.���%��J��3�t	hDl���2�wq�g�u��G�?E��-O#5k��	˿��}��MA��ɢ�i�l]��_�pL�O��Od��\E;�.�7��:|U��3��{ӫ�Lb�ptW�ey�%
Ġ�%@o���`�:-Qd}f˫Z3f�١��B��#{�k#�e�)D0o����X�X�}W�� �,�]	�~;}�Gؠ>���0.�h:��>��<L�{%fx�2�m�[]���<5��>ڹ�����W�6�i�b�8�℔&Q����h٣a���|ҁ͋� ���$�NZ��Y��N���N�N�:ӿ�/�c������C�t/��|�^^s��^7�{N���A%S�K ��+�{�ߋ��:R����
ʘ����_�MN�W��T�u����M=�HG� i�m��w��]�;㲬��k�Z�B���F7~9T�:�0������>���u|:&�]��Ĵ�&7����2R{�@�qY��I\�E����h�Y�W�?]j��u�����>h:�%��A���Qb�z��y��2k9ɻ�u��ɝ/�r���q�(�_E���oj��f�"2�0gͼ�򷣉
�'�OR���#�3
,���1���@�9�=Pd׳��*�[�_��h]��	�p�ޫ��|
�[�*�_��uW�������,]�؎��{��q�=�|��=�I��6��@��<�skF6��k5q# ��q�9�O�Q�r#`_��^�Y.c����-F|���:�uK@�a#�n`��fk��45��M��
��W&���EBM��y�?�ӧ?߂��8���g�7������M쏜'ߒ����t�?�OSf�!Wg8��Av���f�R�z�ЫT�#d�#��>�a:1G;[K�x�K����x�W+ᢌc���1�@@㊠j��L(xW��
�����F��y��To�i���#�q��C��A�ow��7�L%�)P�lVi��6���-v'zO�%�n�42'4OP-��6zL��#�2(<GSS�4�K���
Rq|:�9��
�sq3��rG�	��$�s��*�5�+�]P=�y�n}��ڤ*�T�R��Gn�*��1A$I3��v0�]aT*��#��0qI�\)��^���[�K���í-�A�q+���c$�gE�mْ�5�r�_B��A�,㑎��H����>�g��xh����s/����ğ�~��,�z@T�	^=����e��n�R���$e�7���*�d�ueDU�#҄�	N��E��	�q�(����Wh�~��Yo��:�kK�[(wQnx�m�f��p��B�<G��������q�M�w��^��M��>�������VG�v��X}�S�����yC�?�~��z:��B)>Az��q-"{n
�j�7v�A��7��l#b:Íқ����{�i�caK�?�B{���Qg�%l����q�2
��'�N���[�3�7{γ�G����N"p����3gׂ3�͸d��g�-�U�{dQ��M8���+�ehA�2� ��`ر�ᐂ���n��l�įQ�{���g'WqBJӭ������!o;8C�ts�L(��.�Z����9�0N�i����F_O})��#���f�6��@�y�Y|L,�+��v	K�d��EZs|r�
��$����-�h������L�<��?Ɏ��@y��xT�)��,��=��;g�X��
��Fq���o��|�i(��<�|[/Z3��hB;�����)��00�3޿ؑ��S("e�7�?X���MD�Z_���xx�,Z���Uٱ����(�ѥ���^�_?I���+���4����0V��5�ی����mO=�{E��d#�ܷ#,�/�SiQ�zz�P��&Yn7�忟��o�
�}t_ k�g�c{<���5�&ؑ�b��q�6��I���h~�2�萹A�>����lm��㞂�u,�
��7O�������T=TPɾ�߬�{����zJ4\ɓo0!D�P�>��w8DHV[����S��%.�&V�@B�e������+ $�#�K�*���������)�AS8��(M7�u2N"P��S
Ц'
��8�#�_9q?ǀϛ���B���N�s!�s�UӤ����kW-w��C�8�N���
�~�;v!`�l~���&Ss�߰U%'G��I9JƩ�]�w��1����";Ň^�y52�u�Z냺��Z"���cG�:3q�m���R�k�/q �;�z^��M0��kbI�
�L��?ȟ }m@hVb���%uuYXA��b��:A�ڬ��:yP��E�܈y�,x`S�R��ȫz��X�h:QQL)�ls1�I-��Aۀꑜ���I��ݐ	�`ǿ!e�� ��a�^R1ԦׂUy{�WG%�����88T��b�~&�����ϟ�܆&�^#j�|�$M�-��0��J#YcH2Ə�b�&��$`"d7��pԄCIl�7�c!�tУ<;����O�)��*�_�܈��$�R�A~#Y��a�F���%l/���zX�����Ŝ�:.����87�4�����d���M��励I�u�F���]^-(��%XS5��׵Y�_B]Ah�B���2�]5���N�#1*<�>s��g }z���i8%���Z�P�V�M��ܼ�c3R��#�Z�n�
��W����zz����s�M)��(d�U�|ч�,�0�wÀ�X�Z/�$?�~����"5��2�C���aE���sy��v��Gx!�xT����\M��=���c�o�'���f�uqu�Z�&+~\�dRhS�A��۠R�v
�59�J.���'d�c�_�
� I�C�f�r��Xb<k�:n�Q�����BƋA��\#`۟�� ��.����B{�ճK^�U��?�Z����)�
ܱ���	qPAc�Q`�)�;)���6N��.�o��NR��
ӗ0Ξ�ڶ��F��T9+�L�
�Y�H�Q� �t s�M���Q�# 7�'<[S��Z�+J��[,��W~��������=�-�Ê]�;da:�]�+������)����50 5�'���
� n�!�
S�����0��f��DnE��5�jͯVSI꺀���`dz>�J*Y�Ub���I�Q����^
�5T�>�[줢['A�s��es��dk�i�L�2�4}��NJ���B�_�F$B�vk��uC�_���%�2n��%�}�2��h�c�JQᝍ]�1���E�����Lci�&5t�����D8���b8ap���;,�n�K�'VX�].��л���فC�i�m#C���\4�k��X��|�
��/\�_���T��3H�6�wD�`��9��ӨT��@D8ٙ��цž��L�^QH�0��5�X�1
�6I&��>���]�cm�F%�o�5/+�
�e���[��Zll�v&��i�z~��u�V*lW��,��p���`
h�ZC������rQrҤ^�j�^�^�z�0P�j��`�J��s�={P�n��Tsy�pU�4ũ�Y��wɕ�i���ʬ�=vQ��ן��-��AV�p߸NPx�$�����b&���<w�uA1N�O�qQ�S�K����Z�p2�S�a��@Xfyם���'C���E�|�G�>�r'�Z@��)�ŗ�<�g/Z���!'@����gr�(�_{䦯�OC�����}
n�&�`'A��K�_���À��X���a2�v��
kI���4z/N��IB��bo��v^�G_�hݥ�,ހ�4�o�t��P���}��:Nth��g�fhL8Yq��tm��^��K��WE7J�m�nw�#؏b�.�4���������]���W��!j́4ڕ��%��i�,�Jy���t�T���ʮ��} Ө"��r�\e���Æ�*n�r���S���jWe����(l[�'����{xX�M&T�$*h�Eq��]Q�;n+���D��XV�=�H��;��L���^o��魛L�n��v�i��#�@#)Y:?�}rXx>�6��v�����Moݶ�5u�&e�j�ᶂ{�0�Q�,�Gi��c��xz��c���dd(��<���j��X�v��#Doo�{��`2Y?Kz���Hy����B���RՂ��ܥђ'?N]'�5�9O��xѰ��F1�O�������VЕ�a�����M'2�=��W���fn�;8HN�4=a���+-�(��	
�C���R��6�x�&9�4.�L���V������ր��u�oH� �k�M؉���x)'1�)��I�%Jg(�G��Ӊ�
�cRrtX5����~�C���,-�VX�c~������G���{�4�Ӹa_e�ߐS�E�.�}���O\�2���7�V������7M��|��iC��G�`X��F��A��_���bl����Y[��b�.	�*�VC����w�mž�{"���m���0��b�9��Т�a�e������$5�yrP�–��H&	MrXpv��	e�'��z��MM#���n@T$�2� ǭ�Q��>�}�;����Y\�Y�� �y�պn8�e�K���0;b��������o��~�K{�D�p����X��}��H�w�?�Q��O���p���&�0Qp��dT=~���#3�&7�������Xw��¨�4gNO�i��r��0<����q
G����|n���X�3�4|#��*���Ǣ0޴	�54.�<���.�H�>a�����Cx�+w�g,�A�T>�E3�`��B���p�h� �Eq{��|�b5r�ԯ�[���U�Q3�u4�Ɖ�m��'&^oP�Ql-hT�
}��k��<�>�B]�ij�˜�R|��W��=�;��a��){���<i�]�ғ߂�c�5ɺ��	G���Ʋ�?ʤ�����ޛ��<M�z�n�W�-�5�КڹU1�6ţ���K7�p&5�B��@��jƕ�z'���N��lD�;+&��v'~2p�8%ݩ}wm�ɡ��l��2y
���C+����p>40�2��#m��Z�J޷�Z����E�!���̍�$P^��a�mM[W��;��t�^�^`���j.�K�F�TC�PŒK4$�l C�֕�)�/.R����]��0~��}F7݌1D�4A1:�����G�&�^��\��u���x��F��8�ة�o�������QQT�W���sG��#�|&.̈́�$�C�>y��{�(�Y�i�����DW�5b�a�M˘��y�vϔ��	��,"V��ځ��wu�^��dc�Ԁ$V|�_mM�Mu<U\w�������C��e��9b�u�A�]x���[��Y�Cn�L���N��e���1�
���FQb���h���[K{1<��׉n�ݎ]���=y�FPW�N�����~�C��H�2}<��yt�0=���ƹ:�Bl�E����i������d}��B�'��u�&ጄ�D����J�@�W�KU�P�	A<�M�^JE[�
��fvwfg��������k���d8#�����貑&�ar6�W.�&&9�x����cF�{�?���ĉdg���Ե@koE��.-W��c��AC�>�}=�Tע-��)������&g*%E�,�C��V�_/��y����d)$�u�i��a������a}�ળ�Uzeqf�@���N���+�QZ��yC�m(����e��yKtʋ�Q�=X�iFq���ʓ��y��ȷe�1���T��C#ݏgy��͚-ǿ��x �Y�2JJ����L�E�r,��ì�G�^��oۣtˢ�𚙷�bo,d��.�>��r���G���J�������8X��_	8$C��N���+B�iud�B���X^�$]�Ko����Ro�\��^��[�a�}��uv&*�O��Z��T�qh��f�d��h��H"�ik����M��\~���EH���σ�D�"�֐q8�W�'�Rv��	���F_�o����Xb쭂�yx|aJ��۴ᝠ�'i@�6]8	~�6��^�菐D�h�͒��V���zy;���o��C����*7Q��Nux��;X�]8y����m��2�D��23UET�e���P���['���c�o(��7d�0(Ԕ�l�$N=>�a�B�F�T�}؋��HaIG�o+�fň$C�U�r;ƌ�kO��u��c������@jTѲ��چ�d#
Fo���@m�Ai� �{Xz�����h)[�y�*�<jq�f*���hu%J�[oy�}8I:R[�x{((;֑W�(�����]K� �{��h<�ą�1q����є���4�]f`�����LZ:��{�@���Ǔ<0#��nWY̽#Ӊ���P8
�j�fܪF�ݜ!����%<�Tf�m�=���}�9��%�gqJ�T�1Ro=g��\��O����^n# ��}.ya�
2p!�W��5�v2�(i��0���|-�>S�d��r����R�/l��c����U�Q?[���L
M�
�w���R���=l�6Q���n`ֽҔ�7�jQ��oN\��-�8�Q'2�IE�D�u�@��/�ꕒ|Ҿ'�30G?�j�
�K,xή]�w�hz�5���)n#S��Y������ko9�
*U]H��<�S �	\��DU.�()۲*��
*�濟����$���}A�=3����w<S�0}ʸ9���*BĿ��l�<�x�ZK��'�ΔON,g�u��<��
VtI��_��
�.E����(n9��y�5�eх�0�
�+��%%�Ay��|�i�sι!��������N;��Y���}�8+WNlx��V����P_�Z=y�%�7=ѳnxbLw�5���.xH��'䅽�<NG����;y9f¦I��Y�$���P��)G%�2\)Q�J��
~� �q�zN"���4�~h�i�����ac��,"�x�Q�ys+�]�N`�0k���C��{�?"�1�(�vq�#����r�HOdK�K�!3�X�1�p��@�ӭ͓��*§R���j*�� �T�T�*@�a?��v�	�U�
g�sD���D�F0Nݩ<����4̸5��:X�UQh60Xn��,��T
$��o�]��ΰ~d���'B����8��s�z={�;��UޖWEoޘ��$�Tf��j2�Mz��q�j�`�άz�;�p����YMl1��
�
�D�7���OO�.�СK�s�R�P�ڥh�0�(+p:U��K���]]�1�ʼn)�����
�;�?��((/Q��ł�y�M��%mI(C��u��o��P��k�֪�	y�Q���3V5_���b��G_�a�����^�\�l�g㘞;Sc��2_LE���S���R�U�x%O�j�B�̳�
��?vXB5Om���_�N��/�8����nn�]�!�P�y��v��H�v�g�V��o���~�Ѻ�գ�����ؾ�D�/|�V��\;��>�O���F��z]�v\Ѓ����}�X�V�c�y�'���	\��,�_�:YW�"rF�2�{VA`lHŋ�b�
@�>�
89��K+�9v����g��7^2KJ��l�X�굟h�7���-Hk����(`���݀2����ؖ����`��"dWs��y�I��*jŢ�
/�p!˕r�T��Zz�BMeb��]�rO ���V9�N��,���� <�I��+TL8\���ч���+�Q���)�TZ8&O��ˊ�0���K�ȣ/��ށ��<��l�ZM������
�'u�(�*�1� TD���"�(2�3�\~#�9��O�T��c�%[N��s����0C�¾^K��EL��廍D���9,[����@�\a������w�u�92B�k��!ޣ�s��x�溩I�
��9�4����.Yْ*Z�D�䨖^B�ΨԲ�G]�Q����#^�y��,#	��T�;��E�3t�I9��C���v��!�]������z-+���OLdی�]�F��(ɴ��a�d����� aV����a�gG'TW�9������z*j���ޙ�)8�SRV��YF��C7�0�;ܤp�N�<�	R@��-�}b������bw��2�ć��,8m���� \�=��i���^i�0,�q�cx�8m��4�E� ��,�}
���L�� {�45d�A�}A���z��8�������=V�S`�q֡�G�ֻy����?P�&�U�KҊF���w^�uGZe\c�N�~�%��A�Ѭ�l��?
�`/�ԇ��Y'���S�E��ʃAa��2l�$�g��[I�.:l�|ȸS�����vU�fY��V�a3�E�
��&�>�a��j��l�6����΋
{�.�&��;l�	�������E�|B6$�m6	�!��zj�^��m�-h!�ކ�wL�@��r�alW[�O�Z�c��kGs�WZ�/<����$�V�(Z�7�=�o�=s�@/�4�=�-����2?��+�J�Rt�E�G˺{-��+�|Ïi�~a)��|��L�?�O��\K��7X� TM����m���r��8�	JJ��IDH��4-R���l��#	oi�>�����]��0�� ��&>�O�d�p��]������`��|���ncNv�����u�=p;�֗Ĺ<o���٭�{qoZӵ��P���
��a��=;+y{M�-8o #E4	�?���ߧnf��(2q#�]�B@�*�lddM+D`��K3���|�߈�x�� �����I�P"%{��� �Y�h$�Ȇ�#`�i����E{�)�E���'�g����
#��o��
��Kv��0 
��\�@��gւ���Vw��/��� �~���p�G(qEnr��kS�H�$�-�lٱ�+�W��cR8IA6�;���$@{B�J6I��߯3��4�`��=�gwϨ_ӚY�����~�x�2�q��!�1�
cz�ݐ����({t�����
H^B�4��4�Y���tJ�Ŕ���S��FZ�B���G������qg��#wp^�|����o'{��U?E~�7e���QQ�֠���G���7|�?��RQ���:�2���̆�ٱ��A��x,�|�ܨl�<T�@1�	�hh���2l嶔5��3
���!�Yh}�{-���i�"�;w
��� he��RTG/�~2�{���Tώ�g��'��g�UjbB��D�7u�g���Q�O��#�����z�3�k����,��,�AݛW`G���;|=�;/�߼�e���2`��]S�j���P�&���8z>��02���U�<����)�b{]���'�ve��K#��'� w�X���)a���*O�"-��cWNf��,�i��;4t��%�N���}x_	P���X>�T��z����i~�~��cDE�o��Ϣ��Rq}�]��N������}�-�W�e�nI\�}X��엁]+�TiY:.}]�ĩU�)����j.գ"���($����"�e��t���\���jѬe;<jgPlH�蠈� ֎Z�����nf��-5�+����:5w �u����_/�*�2Q�^���%�
��eD7�K�Z�=�
�(>�x�8�I����%�fH�w��rJ���	�4���˸\���e쨫�C/��K�ƈss���6E�*����@��T��آ�z�����6��V�@�k�(b���ؗ��
��]�]c�ν������Y��c �O�9�C{bS`�Xk<�\�1���N��oڈӏ�����-�xg�6AĂMD�=�8N�����_�y�}um�U�b
Q��I�.>��)���J/��ӫ�������8x$e�襨��)I�*\ȹ���'���;�g���Z-u�:^?��t[c�]Sj��ZC���݊I2���=\BD����ͷe�U�e����Uk��ݕE��6�~J\���Ӎ&��x�~8q�䯹&����������3b�9~�u:�Zl�����P��k�e�v93mb�qiy�%R�C,5���^H/�:���Q����ߣָx�极�����7����T:��.kdbp�y�Ao�f�
F�F�.ssUj�+*�|��K���tÏ��\�C���%(�/n�ҷ���(܏�Z�����y��#}.湣D��wě�=�-]R��`c!D���J�0�w
�sZfdZ�
�t��`4�-n��E��-�"|a]�	T�|@���[u1��8I��E�	fxC1����n�����g�o%b���I��	���<rgi��iͲ�uwu�����":�1tZ�`#�%h���ƽ��9�-Qٟ��
�v$���{F7E�+K<��W�BfdLi���W?�0��]��=�A��s]Q��/vģ�v�fM���o����Z�EP�[!�1�&�j����~�J�V�q҃�% �]�H,�Xif��6�̻Rg݉yÚ�����L.-DM����0v����&���&?{Y�%�S�8R�4���;,�n�1�����PÌUj���a�r$G�+,�i�ވc�_ya0�ܵ|����y᭑	5�5wD�� ;��2��t�ɿFx9����.S���&��m��+�s�M�l��ϓ}��7���`U�7I�&�r�F�ʛW�m��җa�M[�2d�P̗t���5�w���G�'iXn��kQ[�*���D�^[
j��� +�c��l� t��(%h���q �JHG��V ^v�*+Q��\*���b���_�sB�ջ�L455+�j4��q몓�1��XT�q'z�p�ظ�ȧ>n\\�}�0�7�����-[���%�P�O&��|��u¾�b`d��x~�f��D���褆x St5�2�"�6
-��W��dı��]�YM��ߘ@�K�Mp���i�5�̘�c��x��EX8���	&^�~�_��Һ=qlx�xм.
�b��O�I^|��5R��VZ��h���3/	�F��R�>��o�.}V)]	�Jt�߁�t�}?y���:�߭�xR�����[�l~Y�^��2�2M���_�٬�ΗB�i}��i	6T�^Ȑ�*�|q.�~�w5
��<�Ӄ����xB�������e�&*=�S���x?���I�܌��{�
m[�?,�S�r/<���0��{f�������A,�3�ظ����,����I�c�jEYZF�)H�n���Γ��$2���ox^"�.�����̆I5~V��a߅�G��]R�)��qqT���k��8k�+L�C���k%Wi���?����E�@�]���FL,����w؂~	��#{�Q7��'<@�Qf7¶+�G3��;q3������w�k��%�^����i����g�F���J#ωS/����Ǧ,���N�Nlx�f��~Qp˸ߨ��ޕ3���~��ښ�X}��:�'��웤wO<X@����PV��C��aC<l@zS�7!���?���ۘ�}l�L����Hc����S��f
a�z�?�|x�҇O^o��p�ߧx�������rJ�6�����?��:8���D�l���^A&K�0��C]}n�L�>�jC�n�,R7�����Yz�����yl���L-m�	i�8y�Cq����:l���˥��������ߐ�6(����I;�3Y�g�}b�N��bߐbj��
Lm@��O���2+�Aþ:�ľF��׳�FR.�q�O�<tk<	��-�0�0{�k��
XEv��6�*cʑ�'���ۜ�Mݬ=�m0��Z�;x�:¼�2]�RTN��(��1���Q���<�n1�b*2&e��d�W�4m���m�[]��Y4���X�D���1gj�P��ar�(,;�?(��o��׎:������KΡ$g$BxH�A��AFF���Fz��(�2@�'?̮ͭ��$���H"	cW�O@v�e^>��.t�RJQ�GW�1QK8Db�����Q���
��
�<P&�Rƣx���.L[��/6/Q��,3,�5�J�Z;�9�05P��Jm@�^�V4��g6�ԇ���vG�T3�Ռ
̰q��W�W���4�q=��GɈ��`j�)��z���8�~Nt�>�D�^M�o�����|�y���ᐐ��������g\��{ʡ:e�(��A�IXxm�݊�k� ,|),|%,|%,|),|��N��bS�g�h�f�2
q�����}Y?a�3����r�,&$����5�mU��d���3˽���丗P2arx�J�;#����e�t�/!9�v.���s%BJr�+q�&�(��Q����/�/FxH9����0	�<9�D�b��n�H֙�C�Es���먬ʾĨ[+��`E�˩M��ge���Y�آ����	�g+�>����x��v�全tp�'hw�]�m*鷥f{���L`(69~v�#C/������F�#H�v0�����z��jL�mE�E����V��1iI�2�R��w�0�����#�
&p������Q*�mi{���D�<tγr���D �&n7o�;h7�{��=�<��'���]���k֦.�׌��=�wnSP�������P�������%�\4�s�%���C�'+u�Z{���]�T�D �\R�Jw�
���;��=�6�T#G�"I�Z�l��%%�c�(.v/0!>�1��C����Rfs�Y�9��pږ�s�����!�6����!�����s&�%��	�*1+�׬�^�2;ee6 e�ك?h~�+�Ufi+1n��k9S�'nG�!fkk=n��q�3vM��$�&��BF9��4�B������A�Ch��`Fd�<�{���|�&FE���e]Y�+QDR�R�(	)�d�=��oDE��F[ p'���Љԉ4��.`�>�2ڀ
<�y��@�r���1����b�R���B�bZ�
L�&^��嬀{G���Z��v���́M.\A���qЗ�yp��"�?��̚�o�0�z�-P�]PU)tCJQ��0`Հ����&�P;0�t9��~�{�oΤ���w 0x�����(�Ç>񗢳-s��֚�)v����bgl��ȗfy��T����;��8o饇!-نV�gץ&-�j���n]��@��$�+��Ր�����P�vT����ϔ�/�c`>NT��h��4��FS�Qfp2p�&�L�!6�l����+W�_�Df�!
�#��+��((ѧ@�(�flb�g%"�|V�0e��Q�DJ��ȭ��J����]��Gf�:C�BFW�'�a�.,��}��R���3�J<d��N�	h$�|=M�XB)Q�������,�c��d�;\hd�Ķ�T�e��K�������r�n�趋�.��~��ę;
�@D/��)�Z�ג�D�����B��#�`�����j�{�o���]�
ά�ϢۚڃZ�ڄZ��?X��9I�(� �Q$A,�L�hF��R	"��1�'JU���(2��#;�F2��$K�V2�p��3z�	��=�o۸�������5�l,�N���E���w�����"(���N��r������)[N���;�+PG�F��p8��6�0<����N�ﵟ��\u��6�ڲbnN�9�Q�)�lJ�!�� nmʘ��@���JT������e����&
Q���|�6K�Ms/��}�f'� U��&s��4�4M݇�C�n��3��5k��F@�Z��I��	�*�IZ�r�h	��T
m��ڿtEU�!��7�UC�������jh�V��"Y�eǒc��cC譙�^�u
�}[�[�k��K	*�P[9�UE�W+�$ڶt��X�aP�ȝhP��ɇ���]��B��!+�]�i�VA5�TiEjf�Z�Z��u���=�ꯩʄ*��,����	;��T����8�&D_%�aK�j&���B��R�R�Hrg0
�}��4�Bu
4�kQ�ЇkjYЩhઘ�tWەMcL�U1���1IRdgM��՗�U*m������M5���)Z�/A�OIї��DuI����M��/*�?�F�������OAя��))zV�'��T��CPzǠ��A#ނ
�q��g��QSR<�T<�x���I�3���X΅����`�
[/�S�ΝZ���5��\�:w���3�4�N��P(L�p�Z�ã.���vm��0�Ci����6�;h�w،�=�;b|�$D�`�:ƣ&�A�	e4�D�o�kGb�*{����F��F��u��
0{�+��K��7�
o��[Pؽ�a����^+�3�>Y�,l]:�.��3sQ"����80@��$��M�p��h�0|�6CJ�@Bt/��댟-��k�b���T
�Bv}�}k�U�����W8s�X30��|ɠ��qō��+�[+'É��I���k�u��9����]Kߓ���I�����@�r;���B�n{?�q�́Fa�f�Ѓ���z7ޅ7�w�x_��Ǎ�`���)�R�G:<t�\�����sZE!������r�?�
�����w�ʉ�{������Ff�n�~F"�bX�C�6�p�E��|��!������o��g)���|�%���N���)^���z�����3A/���� N��O�},�
0�M�5��ܸரx�ȝ���e�����c*h���-ة70�^��
�1�qu,Y�FP�B��
��1�qu,Y���:%K 8BP�	���p)�e����sI���A-8�����$<�s;ل�ik�m��4�@�Ġ�Nθ���w�;��N��N��x�R��O�+m۾o���*�j��MA7���x2yb@+s1wɈ�eX����Ue�Eb�
}�8�9�/���32`F���֌|j�mkFR���GJ#�B�b`�?Q��+F���	L��H`"p_HFh�T���}��0#�����a_-.�Y隬tMV�&+�jMX�dה�S$W$r7˯/���Q�s���U��dŴe&=>J�"��qۍ��J6��ڼFO�	�A0�G�h}�.�'�&��K0��3�Q[�.͵l�_z2���Q^2�t��1D��[Q�b��t�l�޺*��neGI�&�Jj���O��>����ym+f�����'�Fy��Ъ�,��d�bw��zJ�f^��g���keRH��]���#u��{Z���U(A��R�\���E�R�‚�1WanF�
�Gw����+u�e�t��l�a�9�Xv�o<ZPf��R��O_E>�W��k=�k=�7���}i��p3o�%��̿���0���\���9!9W�Jɹ�8W��f5��o^��U���T�
̱m�V�N��s��~��f���F�;��z�F��C��̆n�Z.�µ?䛠��_زdnj�9O��t������c�>q1��$֗��`}&Y?!�O��b��X?����1ux_�.�=#Ot�W���ɀXx�7�+�F���-3Q�J�^�P+A��^Y`G�e�̰��F��a�Ȓ�^q�|�<�C�Β�0�3��.w�SN�t�H��~t�|J� ��������ǒ���*J�gSuu�ԁʔ2�ό��IU�~(�j;e]��A�ќb%`Y�?�}�p%��>�U�g�'t����6h�x�ܝ�Tʓpc�nG�V�����lh^U��w��D^��썅x` �4��c�V�C2���&����
,�0�r��:��]��
�4�����ۍ�nۻr�Y�s!
�8��2cf��N�2*�y#TbB��4�
�p:6Ay�+]\c��qV��X�[� <���G��e��L�c���\���${|�L�\��
���2hj��
�1�4�5usT�r�GU�6��NH�쿏竍+�Y��RV�CV�ǬBϣ���J^R*ՒR�0���j��������>��7?8��L�M'Ys��Տ�F���:hh�
-;��9}7uRw�,l��D�^�?�ɢ[g��8)��f����<w`�t�P��%#猜Kۻ�d!x+I���k &�~I� j�<`~�:����>�Y��$~
Cެ�8�p
w��U�#����	�>���?��y���ʉ��m�x��`jb5`��H�Z�.NϠ�Chﱚ�}�%
(��BZo��Ŋ�,4�͙��W���#]��Dc	4�@�	4���/�5j��N��������Aw�U:/��c�2:	��������6��p��l��Rb�lo
7hZ��G�^˃q��K[�믤��p��S�^fs$���}|�aV��DJy�<��񀧷o5@�թ�P4F�YM�ˤ8��S�瞜�m0>>Jd���3cbfĽH��Ջ��ڸʯ���Z~�~MP���VE�(�Y,*���2�j�v����ޗ)ݼKv�x
?����D~^���jO�O^�I��䆏6�̫Vpbr�%w=����ތ�p��~��dه���ܵ(K��:yo-z��~$3�Oh���_���.�sW%`�;ЁA~l��'>�*�G���L܈9�`r�&I����*-а8�;���.�<��#�J��!�	��%��S�j��)�c��ؤL�)��/�0(c�(�2��RQ�:(1�忞�a�^�\)Ƙ�<�����vd��,l9T@��X�/\�"��
�A���
N���a�
�n�,�3�RAA�<�f�TF#0ogvٵ��X�}k��_�>X�Y>>������s�'K}y;���?� a��
�B���6,��&L[�Jl���X�)35��D�6�ę�͵�8����n��R�EbN��橣rмA�\e�c*W]A��p�h*���R�?�;�Ǝ[��uJ�e�)��>��a��\���	Z���?��j�K}
�o>�N$��/�f�K�D�7e��ᩂ�����X}Pͧ�Rum̬Ml�XcPV���-;7`�2u�;�=��`�W�}\l�9�-\���s���G@�>	UD�"��$���	D@A�Npah�8��u`�{:�B��T�w�S�%_dnv��U��D�f
��4��#�l��գL>������&�O!��P8m�';�t�~�X�jKX��;�T�X�o���U/�zOP*�'�lLO�hg��b��ix�~m�Of ���6� u�f7��wsMCy5�s��ѯ���k�k5F�އ��r�(�:
G�X�&��E�_G�_G��@}���%��&Mp����B�i<�C�c�x�P�u^��'���Pу&T�9�t�S�1�è�x:<^��5aVri枒d�	�$�*�f��gd7N�\��t�����|��Z�Ƙ�mU��`sxf���:b�M���`񪯄?e��z���ԕ��Y8��*u�N�GaT,pJU���n*^b�T�����ux�*�kU��C�l�}T�[dF���RZ�4$JcH�Ɛ(ն�l��!���K.9M���|�q�m�m�h	{	��Toa�z%74X9Ɉf��Ґ�PG��!��x�F)uP�%0<2ɢ	�+��Ƶ�$I�ٱB��۶@��C�-�{������P�z�{�*[�3rq.W�bR&�� `��R D���JB���Ku��g"�[�yc�
�E#pp��M���;��~4p�u�GL}��O���A���/��	S�7�1�S?a�2)�}_U0���3��	uL�e�E>�A����v(y�δ�6k�ï�PcH8Sc77~�a�GG�Zpsڌ�����]�Y�A������7�}.m��������7��.m�a��`B�9�x[��@��j?�Q+�ʲ���\���'?���*�G���O�ABAk)[�
�1�16$0\1uq�	����~]����L&֦&�bJ��*��l�;q|<�ɗ�k��E�_�Cu��\(J|x)3S�ۨ׾a��]֌|m銺�+�nI��#Ǣq�)!�m�GY/�����RW��{2��n��u����1Ý�2\%�U'�b�je�ʌV��m��ۗ+D�=�`3�Uf��:Ķ����}�ʉ���
�/��ZyԶ�.��2ħ��h�xSi%��U(�{��I/q�ܖ3QRyM��]��E��b�!��Jy�U7*)�~��ʆ2�Lo��V�e�[{<U^?9�v�0���+�T2�CVmm��Z̸�k����)�(�x�o��6����8�V1R)7�*9�Rr`��JI��y�?��iY]m\��0�
�(��\Ӷ��B���f@��-�1�j|F����w�5�R?h��)��8����ixy�G��+{j�b7��&�ύ%��H�Ӽf4����;��#8U��V���xŘ�fc|#���#ʼ��5>#�ԼX9�U�jQ�L�¹:̶��Uu�4~��%Q%ZԡCg�葛N^�%_.�a�Ζi>T�OL+']G$��p�]��)SR���:�_lX���h���ͱ��D�O�mr8ٿ�k_��^�e꼶�$����m�'�ߨ�[�JmvR:�Z�ݭ�nrW�rP‡���Jio�2gG$gG$����flr1^�T�mx
�`������7՟ox��~����L޵y�b���h���]1mwm�>�x��H���B�d���9*�ENaH�x�	���LR�T!+_e5cZ�v˔[٫�_۸�5]_�jX�
7̚�˰�ʞl_��^j�/AA�l2_���ՌK�y��KZч�ϲ��̃�� ^Ѯ_î|�~|������U��Ҿ�{{e!�@=�`�׳���iv�|�v�.)~ʆ�c�M���	���������T�)~�=7���kϳ�����ǩM��w�(��^��~6,a���M���ZA���7�
?���y_��i���.�:���wo[�IR����`_3kn��+�=ϐ &��䇓�������'�߿���x��{��ӯ?���xr�%�x������ijY�-�U�w�һ�"���s�������%���vb.q_%=����~���3�6ͼIR��BZ;a#��2�R�D>�y<�n0ܱ�&��f��4s5�Cfu�m_�9_��ˠ2{ߢJk��8��!pd\� ���e�E�]�|C�#k�h-��4��a�~
>�Aoi�)����.�vއGݣP����;�����*mG��Nt��a'P��ȇ�n;膭�P�v�utZ�Nx$g��v�����-��#�IwX�[�/�:s7����v㶍7!���s��/�m��l��"q\�~��b����ꁇ|�ix�s}!S?5�m��yH��$��W���@��'yv�=��<�q��e����͕x�Po�J_,VH�;�լ�������^}��woR�����N���"�Ze���
�4�ʤ��G>�f�Ryܽ�=�"8�_o3:�d��4���Yn�UY9��#�!�ʐ�B���$yq�i8E����x��Mի����K�s��9K�@�&��A�)��셷��\��o���LI>�2��Pu�b���{����sݤ^MB��^�j%�*d�)8?��o��*�dh����
����$���W�;�J�~�I��Ϛ�k2��2p+R�~P�hQz]��*�+e��_ud�)���$�,�~'�^y��
ᰫ�I����E��R�&%H~��A h;�Q�E�qoj��u����,�p�/�Ո�fw��H���2�
�PF�z�*$\Ϗ��4-��$�x�vв��6e��9vPE��5�Q���B�g٭�E6�g4,g�I�WӪU�۷�����5��G�(����,U,LN��!h���9�~��I K!�0��g�5��

�ո
��E�
M+����2X�RT胅�y�.��
6G�Y��i�d�g�Ë?���@64�ɣ�Q>��ѯ�b�5�6yjQQj
ģ>�E�E!�y��� �E��2����\Ko�@��WpB@7(�^pȥEUzh��XU�)�"LmS��{��}
��\���\c�.�.�g��K�6��Px���_��F��9[ƾ�
�9`��y+���Q[iKzkM
bZ���=O��G�I�M)�!�1<�J�4�e��m�2��Yfd��
�ߋ֒	�`	$u6�e/k0�ϴ߸�:�ݛ,��d���Z�YVb�L���0�_)�۪����+��i��ig���bU��p�u�l��k�F�U�H�)��m��q�?�x�<~A�)������i3m���n��Nw,F���Y��|�I�=VyJE�:���4n��I�Bǧ%ᩌU�o5�4�
���l���^���0Wl�c�D('~;��ɼ��m`�<��Vݒ�,A7�z��J:�<����Ø�:������'�^�ͬ�@'3�,��/7Ar9ǻ���4#����]w�`�'�<1!{���q��W�
��St|�q��(�$���{ݐ�9J>%&|���W,/�����F2�:,{�DK���6P$)m�i�n_�D5Hz�wT�0���(��(l�1�P�Uϖe2[{���Y(�ي���H)}�>P���@|�2m�d�xIV<p(?7�,ـ�����r�����J�pb�]���+Oq��߫x�5z!����Zग�+�V8�:e@ٙX�'K�-��v��Ş.QB��k59�3u�+�����NBH����w��9d�13KPT�8��آ�j
Aq���~e������5xk~(�WQm���H
�igˁիb�a=>��h��	����)!�)�������`�n����=-u���_\�3��y�2T�����(�tJ����]��0~9��wń��p�"7/��	9�&���m�u�s�B+[�}�~]	k<���b�G�m���%�9[�PУuJy�5Њ׹���J⍈�esy
�I~�ϬL'��5����h�ʢ�1���@�w��4H�m�����Dž9�C��U"f{h@�7@�%5�1����6~k�3���]^��	�j.~�Lk=o�t�SR�~Bj�Lk�lq��4����A���݄����?��і��Z�J��K�g�/�JQ�0m�k�0�:�эo#�.�i��F{oi�z�t��+yl�/h�D$�3�"�N��wfD������n1�W�a��m4m����
ik+�[U�+��p�r�:����Nr���vҞJ�vl�q��y���Ty�h
�''Qqp[%�_��%tu�C�I;5;L^Rݥ�]x�(��Dl�a)/��T2~��C6��w��%�s���
�R�*��uk�g�u�l�J��ŵc�p����[���A,bX��\}�v;�ד�{}5���u�u��Irw���&\oi�B�2�s�\�����/b��%�O8a8��G
��y�� �(u?�u��t4��'���o7� %��,���a��ö�*�¯<����q*i��Ң�Sd��h�W�Xy&O)30J��g�DK~��:�|���(F�-�XC�)>6��B��7�VC%�y�?s�t��(:��f.���v�~���5��<��ZY�͓�TnzQ��1deS�ƶt1Č`���о<��L�M;�B7<�jH�8Q�Ej��"
�<i�ԧ�o��V�5��s������ ���V���i&�Oi�}��!t��(;�Q��1�
a�0΂м��8X'|_ۉ��:��("h�l���`|069�=cx�;q�E�J��~�c0D�y�N�\p�$�Z��
��/�D���}����٢�{N|�Ԅ�~0Iv��<dyz�ZqI�OzX���oz���.��y2�q�,�"���@����;�:���#>
l6���5�����]��ڀ���a��V��a�${�y�$s�t"s�z#�sͳ|̅Jc��섩 ��!�
o��q��]5�Rw����yN7b�st������6�
tE�+����u<�*	�.�)����r%���T��?}��
��}��(��IK�A0J�����Y��j�KE�X�ԝ��ް0��� �<�N+]7��]�P������+Pt��W˻ܵ
Y���W�"�����f��
�I���C�h�2�p���a�As�����fL�1��1����������ko�H�{E�=�%{�Xr���͢�-�A�6�á��I�*V$W��
���Gr���M�����p8�ŏ�j�H���F��}�e|�$�f�=�X[Ƶ�>Q-��;�Z��!�j}U����BO�x�B�
�$0�qV�E�G�XG-�Qz�Y
�5\�iR՟vI^w6��ZS�WbM�l�i��(/���.��v�����s�Jm�U"��~g����)
$G9P#>jOāԦ��H�)yϟA�(Wq���[vr8��TY\@�]\�_��"�M�-R��r�;�3���W�U�/@=����Wj��uiB��&�G1eY��fr�uBS���0_�l��[��.]uN"����X�n֩�U4������+���`,E��q��o���
tȾ���ی�|7�Ǔ�R|����ƇtwI]s��$iJ|�Yk�0s�:yj�q�{�R�)}c4x.�y�X-�?zjL �'�6Ӝ&�x�^��c�C�l���&�Ul���WES^�2d���\��M|��)��aͻK�����`~X��G�?��ڕ����D����NWA���k�������֘P���6�<���Q�E�u��tlQN��m攉���6�	����}�	�x±�l��>7��3A�*V��'�I�7E~�"Oo��Q[~J��x,co=�F|�����jcvJ8��4�m\��mMM\��'�g���n�E��}*:}
��m�OG?��C��Ui{|6BŴ�*<�5��qwY�'X�$9�
Icm�h'�\�q�d�X�����K �V��'�0vq��#h�W�R��G苁f<��o‰�2D�,&K���U����%���f�D-�/=�Izg
�+I�隹ᒭr�_]^�~�����˷W���qy�DG�9S�1��v�����)1D������A�Y3���o���K�6v���_d�lO��![�ݫ(�Un�M����Oo��v�@� ���R�PeԴ��3���;��o"�����5A�v^��v^��b�*�g<�Z�j��Hy�h-�eV��H6�@
}�zU�x=�l��{��E�~��t@��M�j��#27��[%�[[����:æ'Ǖ��s��C�.����M�3�8�6Ӄ!|�9C�0���!mu�У�8��X��J���LM��w�s�O{���J��"�cZ ��z?���)�ޯ.�,�,82�62'�2�"�w�"��_5u��\f��3�Ǿ{"f	����Ql��I�UCM�ݯ�-:�5,�����QG�����a<�������3+=���+=����ǐ[�f̱{	�a20@?�I�O��o�_�u|Mt�j��@Z*"ә�w�#��m��ܰ�L���~3�hO�4�x>��A؁�y��G�F�2�3O	&mh҆
`��d���	QeQ�"�͝��Q~>M��}/�Y>��y�V'��~>�<�"��Ae�2;џ%v�����~8���ì���n�-Q���j4�-~��ӷA��˃<�[�9�	�|���L��1�	<�Qݲs
85��
x�^�)IJ�\�
P��eC�.��sAp pGq��&���K��=���ʜuچ׭�*����@�������|�FE����#�e-���;;�}Ngn�A��T
E��}�u!�d�2�@&��D�0�k���{�v��s$M�L&�#y64P�AUA�H1��_z�0s�7)>0�����%���\f[�C��������ڢ>X���z�-Q/�:npQ����˘"�T�v��{;�E;7r�Au`�p�b�	��?�찾�I�V͒��>���B�B�d!����9���~^�@t||$��J����4�'r:�ᙐ��,�y* #�ˆIҘIzG<̶*�����o��9�K��#Ya �N��3~ZFE���Ƴ>�ȯΑp��S&a"Q΁E�\*V9��7T��e��?��@Nv���At4S֙�
��+.�XF��^
3��hy�$dA�$|~��P�H��a�Z-R/�����x�
��?>�~���wD�W�僫�ԇc>S�ᢀI�\��G<�
�?�|�s���Npa�\�*��Ъ�<��uzU�V���ɶ�J`�˲�{z�2�n�H}�Ǐ�Z�T����F�:����V�/��|\Lp�[4Kè��r;����̩���߁�z���xòv�t0�]���^E���>vp7p�S
��� �C��h�
F���WF-�Aɺ9w�y~��)��G�,�G�,�G���)�{�Qxzrگ����C��`ƪ��~��W�_b�x8=�W�3�Np����5��5��Wp���n7�q��0���i��zNk ��2�-�޸��qW׹Y��(R�r��T�p3���n�q��F�erb�gH�xOd�Ƙ�an�q����G�]g�|�V�?�D�v[mʚ�+��É���<���7vRP;�8�b��<a�|��s0��yv
��!��a��:�}�n��lu����
l�W������,k�T��6]p܋{��YVi���o��ۂv�T�M���♪ ���,�,8��{l �ʻxմ���+��-�j[@AY�|x���PN���ɄGc�"�<M7�2B`G|Z�b]�wE���S`=B���ryF�d~�ޔ�|��ٴQ�'��$m?��\�M��ӽ���������"h�t��)��z~WV�ԧL|�,��@�k�pq$rQo�J�l z�s�yY��w�*+�?>�[��ԥ_��4�˻] PF��n�ܡ����
�?�N���x�pG�,� ���<����a��I�բ+�prZ�R��!ZT�vz�3PЪ�n�T�y'�2�7�2����
:w���T�11JZٚ�V�]
�����|1/�E:���!��!��v�y�lzG�m��&��+�鄑�ơ����S��#��q�w+�'ж�c�7
�A�wYC���eG
�P��M\(����$�?_��A�i�q\4�H����=�S"I���_�D��02�8�>����`�XE��]���j� p4��S��W�Q��
���ۑ����ꬬ��̬��Wn
�v��/�E:��y{�N�Ú}���$�"���Plj��4�:��W��3cr_2�+����IC:��_�T�o��RqV�'�eJ�Ky5������D..��gV�2VS�A�˶��ڊ��x�wԩFJ��.XUZA����U�,�LJ%W����Z[GXU�1?V�|����J_���+t��Z��!6��u?Noo7�H��I4��S������O�G�cBW���Ł��Kt�6�րV�?k�O����-8����i�R�k7 �3���}��p�QD��o/9��c�N��!�r��c��F<U:��F
����DX��8��@J����֡U~F�l`��o4r��eX3�y:��	�ʣ��
��o���{v��@3+1B��;?��;�ww��Ap`C�o�e)-���������kO:�M��#n��΋�N�}�o4�����뀱�ΙlY ��
 ���R�梘>��է�
�ɤ9�O�Ȓ�i���j�c����C�g(��a�T\���1��Xk�T���|�zp��ڧ����J�y�l�{�n�`�=j��?���Ee�ur����9��/]����,�t��g���}ڼ�'9�����w7�W�i3�ORTHZ��8N~K&BI���
<PqʌIϯ�ͯ�tQs��b���_r�O�R<�ϱ�B�@o���cT�Ż��\�������ѴJc���K�Y�*N�.� *G�aq�-!0�%s��߃X�	�WV+��
S�JH��X#���$n�hf�!��Y�ˆ�	�3U]R-��%��]
0�-Gs�����z�U1}�]����
�)��;{up)7h�?�7nM�/�b���\���gq�|���s'�\���:ߣ�=0m=⭀��$�vX!Gm�C��Vú�h\쭯Aܔ�2Ѯ�t,'�ً����N���0�f�t�&b���X�nÕ��_�A�A#k��yw�y6G��2�O��(��Ó�{�e9� +�F4芡Xk^�P1��
T�-��W=�q�m�r��ҫ�M����r<�9<'�FS�N�^�;��'|���rfD���ѽ���)�+]ϋ.��e�S��uk�^Ϯbl� B�+���RpS�oT���>��Ք�HL�~��'�1�B�g�j�ʾ$�TG�UX��b�ẅ.sx@�#(�_-��Z$4^JT��w����
��_h.y�z��Vsрp��-�+�Z�'�pq�U$�'Iŗ����?�2�?�MXh
���	��
V�[�%-&)�<>FǗ��N����)ʖ���H��X��c�����`a�
�_)�r��۳�A:M�X�����X���lu����C��.8Pb>�d���O�n	��k����!�̏f
�%s%�R����J^"�,�7g���ro��9D�\��7V��@k�pX��C��^lkD{h@�=���	�la�����r?�6r~�.�:�a�f|/,y�.�!�S�����nm����&c�K�����"�C)̹4a�?���|�J^ 0��y��0���UbO;��p�O�fq�ME�m"x�vޚ�`z�=[���y�+@��9$<}@��Y@*h$�A��DUAn}��O�X�z���l�bi�β%}�n2��v�qI��F���"�����ڮ#�2����h�{�2)��&����1�n���'=���z�����ԝz̲�:����6T�
�[K�3W�Rs�+��n@��Th���A��J꓉F�YI�h
�}�~���jN����/_ԠD)&87�Т(y�'�p$�$
�#�pI�%T�pR7����M�n�"���NRg�gѓ�s6�o�Vo��<Yd��I��t�'�~�9��qt+����B�HY:�<�s����ov[��A�_���K2���Z��RT�?�މ�T�.|0�Ù>���� -��LOs��AO�����V$ٲ�1��)Z`z	�L|~��,w����[������IU��=�1@��i%I
�V��8&��LeG�Ed΢�+s�1͌T��K�1��Z{	J��1-�r*�op�pm�s�:��T�pY���[pB��ͥ�W�p�G㇖`�]����xUc��%y��8oE1���|=I���W����q��A�G  ز�b*]e��,��Y���q�>�C��+�A���_iN��A�#�o˂3p�EGO��)@(�����q$oi����x_��9�'Ve�EӚRc%��PaS�|�P�ݟ&����~
	�+MNA&����Nʥ�6_�Y'U~1��7��H'_�X�F��qPO5 �����M�hj����	�.�p��6���te���	��l��)���*6@@�#r���\\�z�y��G{!�HAG{Г���B������J@���8��J�^ɟ�)O��e1�G��
�AW
�j��!��@՗'�0s:M�4�q)j,�6P�"�([�c��+���6��ޠ-�l+�`�:FuQ-�f���n�.��o�?��`��V�����%�|�W1�)7"2E[�%�p�E3I>v9 v�H�V�~�)�K.�Z�E#���$%�������
���g�[_���φc���
��h�l�bF�q&;.G7ࣧ��H=3�U>�IC�5���*��-�#*���\�V�š�6]v��0�'�߿hА8�><�4�� M��8�X����{�cK�8.f�qH=�V�/�R9'cj��*�[���t:��(aA�WG�jk:_-�v�Mʸ����ct�f�kx	�s�pC)��Qߗ_����9_$c/`��@���p�#��XPt(��Я��/�o���:�j=Me�
����#����>ZB4�#i�:A#��=Ԇ�DmpLsm8�'#���o_S�:���h�j#�Hё�����s���HuH����;_
B.��I�=P7��o�B�N���
�T/���W�~���A��o�v[͞z��<�&˨��̮��4�ˏ������u��]��1����LSH�?��$$�T��9�l>��r8�Yj�m�y���6g�e;�[��
��co�N^��Ӭ�i��u}�ٞX|Y@�|���rr^��l&qV��5V[���E�ަ�����9lm���ֵ����-%6�,E��q;�e�`�g���H,�!\�|_[��DJ^�;����YbP��J�A���~:I����=�^԰k��4��0�u����?\���� o��ҋ��{�H(��Zwf�Ɂӟ�t�~��WS�N]$OW�t��|�~��l��<oEpP�(�GY|�u�L���$����uF.{��3��]b�Ç%u�Z֚g�>\��4�d�����2$��KO�e��Y��"gi:8�0#I3ަ賜�t��:�Y�����K[{�E-��\��.=�8ζ�S�ZE�Y�t�B�˚��9�i� ��&����-��M�n��;�(�b��Z��`��*"kk�����ԡ�n���c�X���wb,��V�E�vgZ��N^A�:l��g��K�ݏ��Tt�LG�I&zJ����M&�bo�sY(_�.<T:h��@3�1�Z-�����N�����]���|��Z�͒yz�
�z��@
(��Ʌ�<z�(��y�.x�3�j��V��(!�b��q�����%�2��nM{c�TS���1Ln���r�<���!#sg�E���k��ǟ�{E]��I�y�86H)�u�gS7,�������}9���o��_��!�o
V(5�j�����׉s8��B��ŪO����*���ب�C�3cڽ
n��1���&�i��(���T��sW_�l`UprV���
v�V���m��%����&�����dƴۇb�۠�d�)�@9f�{�G4�moo�!+�r{��fڄl ��pX���<������{�'V��ڔ��%Eì?K����wc���ɨ�.�; ��4>�L^���\���Q�7�Ad���h�>=r��Ո�1���li��SnL��mSXI�BD��U�T�r͟d�K��߀�$�'d��\�_��81DR�0	��;=r�;�<�>��joLŒ]�_��:w�,s~GJ@Rm��k��i�5����z$G`	���_,�r��vy�5�BUo�?����
&R��ˮ�7._�3��99g�7z���p�L�x��O��t�\��/�pow%V+Ep�o2Ĝ��hifO�������n*I����Z����M�b�xHՈ?[�`��v^V�6�@�<h�
��Z�� .�]_�a��k�yf^9�S�Z�a ϛ���ta�ӇЭiѐ�A�F&�ܽKM��*$U7B�C�J���Rd�8q	?��ꖶ���Φ �o�x˄��.���[d�9l&�i�!�7P׭$�ei�\�C�fA#�Im�;��fu7�Dҵ�%�Z8�*�%�i�l0�q7%@����~3u�o����yWޖY(:�FYq+�$�������KM����Zd�|k����e�)�i��p�u[ӑ��;C�@�;!~M��_�?��󰗈ѻdU�]��ٰ>>��F�f��Cf�.�V��Q�Fo:���:�Rb�|�&K��m����t�����Z���I�o�Z��Y����z��n�}��mQ(�����a�]?^�ւ�0|i��u�	����o�l��>�
z_�����f�o{�<��($�f�D��o�_8�N⢿�Q�Y�g��-���^��B�5�`�~������4O��=��9&��g��q��X�0���6�<�<�֋G��^Ը.�J��yO	�ᾉ��v������>��g�$����1��7��F�X5C1�;�DB�n��H���s��ӯ����~v7�E�n��^��Y5g=�G�5{�����{Qo&���X(Q�����.Nfb=**s��ryL��Y������7���T���t1P��@}=j¤`�כ&��j7����dt����Kr-����ٵ��X��1��r�<
6z���fT�=8�h8}�Z��kv��^O����u�YШүwTq8���D�� ��ϧ���O�ĔȖ��jt�a�q�TH_K�R1�(�3o��nc�Gd�݄}{�7�1P�g<�8*�z���ll��d�p8#���+�#͎��!;˛�D�𭀃�h1�0d��M���x��ot�nC�
��n�˽U��PcPt�>,���[5�G7������6�oA/g[�SE"�[���Q����i�T5b>�^A�%�d=�%Z�+��0�*3+��g�5&�ӎN�I��B5-��G�=6���7|-v����!�б��n�����sF��
��C���kƀ=�1�G8�_90�컹DZY=��b�Pļ����%��d�2��)��������H�����l�Y�<o�8��̞�Xj9r'�cmE;���[�ʤ�^�Y�-�|B��V<�8z�!R)�|(�c!�f��(�Y>��Dg�����T��}Ѽ��M��z�h�F�D�f�6+�tR�I&��;,M,'�خp}�b;�_o�|��
�c@�6�����w���j
2}Q�a�a���3޵�iB��]e�oB��,.
����{!�>�;�">�+�c��$A#���,��N�>�^��?8o&�؛�S�v�`ZH�*$�>�Q*�bts/#��ږuM���C[@ou�%�\Ʉ5FHQf׬��+�.Ҽ/(-'�u�q	�lv�v�r��:ߠ�ꊩ�`�՘䮇��*�Ɔ�9�d� �ۀ�ĤP@t�]�!D]rr%h$4Z�8�}�޳sc�İ�w/�6L��3�mL���ب�9�L �d"Ԑ��<�p��؅���PyB׀b5��6�\ʹ���l��Gl��A�I:2��e?�`�dT�StG���S ]=�J�U��
Ջ�:Y�s�v�\����f�
������(q�Z���G��H(K����[��ܙӑ��-`�مX.��͹q��xI[f�'�h�E�*�@Я�!sg�����7 �>��E:��lU|n�6�҉U��o�4���k��쮦P��@��������*W���bJ�N=�����v���6��il�/�����Ӡ�Ϟ�(���ݙ����^�l�L�Ȏ����^|b�O~m�/�T$N!kpRV��`d1�_�K�<��:&1z�8���j�P)�hlÚ�m�E��9����J��:�l���&��Ѳ�h�d�]�;�ɹh��[�JUR�А���ˊΗWj�sxG�&��bxW��ք�lV?�2�.f|X�-�.mL��ʵ�q2+�͕O�G+�<t4�I҃�%'�aɶ�f�l�aF��f0���hL��=���9S��Op(�������@X
&c2y{�_
լ��/k����^���nM�%�	VI�p�P�&1���I0'j�O��FU�[�(�(��tR�M��"�����O��o�w�ܙ��6�
3	W�d���A:6�ʷv_Buq�n�oel�2��G����-q*]K|�@��?�IM���./db�OW���;�����n����~���
��v(��ө١�JY?l�7��MI�V�=��h6N6�r�j�zG�}��%K��\4N�ɢ�5
K�3CsbJ�Pj�7Y��V}x2H�8d��\~�-�;l��G|�]F;[�&X������,8r$n^��Ύ�jq�cY�;��Wn��J�s�������PamW�p2�Ǥ��.�HB���8,��+ŇG�6��V?���e��05ЩI����$�-��n©M�
�0�6wF����\���d�19����t��zW���q�'d��u���=�Y\@
b(v���҄l�F�����r�6��_����@��%�
�i�өgr=�/�h:�I��%�ᑐQ����C��>�Ʊ�X,q,������pV�'氳z����׿�2X��Y��O���^���=ė5���D7�����E�>�H���-zp�����M
;�G7Vt�m+�a���ŵY�FR"o�%�|��6�u���V�#����}��N�ڮ��G���͑J
˄�I��еdU�����8?�ϛⓨ-����^Ǎ�ɋ�����7�8f}��>����8���cp��l�#7 �sk=<qCf���#�L��9�Rk5����3���dN���t�'v~^�����j�M�|��%N$3�w�-�v�<��Qx�S'�l!�ކFm'�o�fmc�l�&W#vV�U#�R#�˨3��1��sK�Q��NY���r���)\g7�z��X�
��z�Z}��Q�R�`(�ǁ��r>���� �8��	�h@0֦C��s����Y����oø9�fq�Lr�;+^h��_g����9<Bu�r�r<�Ԉ,��X�A�}����͛mv�T�3�[=X��L��T`����֕�����@�zD>����^�$�=�7�d�'q���W�>m��a��c�LH�f��.�i�ZD�S�z��1^�4���hl���2ċޢ�.L�X��4�N�BCN�%�6�07�����	��������,�La��C1�E԰��!����`L�S�|�R�%,�`�TCT�N�E��x2���Y�@x���,v�H'A�|�6��D8+�wū�\Y�j)�5L�	�ŬQ7�%#G-A4�M�ۥ�l��z���Vk&ȸ^d��?�.����,�F ����횁�p��Z�[(@��E�o�[�kQ��Æ-Lj����F�����#���(�f��AvjRB�ț��ul��~�B�C����So�.MMS���|��б�#��yP����i���:^h�=KM���e;�P(�4j��D�m{�Bj�v���-R��	<��'5Cb���ȏ��	�#�<7J͈���G��z��Q�9�n�Q�k#�J�H
�x�,��7�ı�&�B�Xa�<����.ԙ�v��0T�:3;�!
�̢6�+	�� �3��#��D��^q��㵆��Y�}1��^��@Iʆ��X������ff=��<�9��3E�Άy��tx���]��;l�%j�sh��$1�d
�,�s(rx����-^��X7�I=�-�#���"��mc�ſ49��܉v�d�|�z�r��2R��1'K�ئ���l�\|��ۙ,���𡕢�ް��.{����!Y�DF;<2* 8;ֱM��N`�$%���QR�lHU�����U��S�+[9��b�p
�2c*�� �8f�t*p���+
�b�x}_ �����X�sT,-:�0�,���c�b��/�AFM���;�9'��EU���d�F�	�`T�tSa��fU+UHƢ�1�z\5d���y�U��T�{P�d�6��P9��wL_��v%��y�zb�P!;l@����]�i�!%��/��&)�v�s��pL�y?xj�1���+l��+y�W�mW���N9s���\( +��A�L��LX�h+6�\� q�4u8Q�+�v�1�_W��+�ht=u˭O��y��rNV�B�T
I�G��ݢ��}�;:�Agz/ԥ
M�.</cð�0�`��ͯ�&ԘlT��=�,��C���wC�L�6�f8#.��*ˠ_�Y�T0���J�{L9���+q���'ށ�>���i]|Q��>�}s����~�[�������LH�.��[wh�Rz{�}:����m���S�����bG���_�6���<���\.���c�U.�~���g�t�Н��z���H����G�G�J��"`�!/��Alp�"��b�bV��u�#��F��Ej�V��kG;�:������hT��U@f	���@�<R����
�Q�m�������N�@�W�q�q�Jj^�R����ԗ
U!6�R�\�V�{���m�g��<;3��م6#am�?>��w����n)R���+�s6����*V�A���`D	`!��f^���d��Wm��<4A�ZUQ����D#!Q�/��B==o��.��qݛ�@��^�+�6���de�_d��q�"A����C�$R(�u�<M�
c�3��&p#Mg�iH�]ï��*�T��ܴ�u�^�EO�~s��kX�&�ջ.�;����ŧc�3~���^v�u�_+�M�d��3���^�V0g���:
~���=�j-R;��X��8
�8���C��8�8��%��h���(!�)�4�}�w��W�Ϩ�buz	U��&[���M��D��V�m9{���\�M��?y�U���¬�gD�[T�t ��x��<�А�&�'�!R����������%�O#(�E��>�@?�����HN��%��r?�k�5�q��
G�+b˫{_����wq7Ã����7\������ �)�.�w���/���;N���	�Q׵��.�J���ՌٙX�`����f���`�h�k
aB�����*�<�Q��hc$$s����J��&>���>uBz�@b����IaQ6^b�9J�a2[���r��>S�!�?c�ve���I07��q��D�
g:�

�V�rۦ�FZcI���x��|l�ݳ��$֬�s��{L�ȷz�p��#Y#ۿt�f��Ӹ�{�uww��L%u<�
ݒw%��#�_���ks7�E>� ��~�/3gsIiyx8h��d�����q���j%��z�����jw%�V�]k�߾�&0�/�-�\�
��xy�I���Zt9����js
q�}~����ֲ��_�3�_O,ZU:���<� ���?_�{�?�0oY�VyWi�gqÖ�
<7��f^�/3����*�P��~�w�����:�E&�PE}q��l�b+k{it�L�y��=������M�>�a�xg��<:�uCR�Ym�(��e�����
�$<FS�
Y�#:4��<��ه�(l�(�m����0�{u%��.��MF4���(��b���b���A�	������$\�c:_���P0P����ɸd��j,Am׎4C-c�)k����rW�ym��� �����GO��U���iDX��ܔ9�^�2g��
)��0߈�`����*񞕉�f�3���?	\|\��K�+s�\�ˑ��f���}�՚̈́�bO����nQa^�e��^p<��l���Q�*�.�V����<nɾ%sn���f�ҵ���B����(��lp����G4�V^��*�)Vw���_�� ��R �F���u�X=��6]��A��R��z��ӫ�R}g���Zlt|�+�+��վQ����rt+Z�)�D�t�`�N�FЪ���<�4�(Rl���i5)~A�T��č��lQ���
ׯ�m5�mmx�6�$K�����I����!G|ݣi�í�g�W��MP��h©ٽ5��P��ZwiR2�F����8�%]���~>�h�6���&�v�\�Op�Fl����O��0E��r�����\9ߧ�'}�U"3�
�5�-�#Hb�a�Y~<f�������*�]���QE�#��"x�C;����+�60 �ȯ]��lLZ	5T��!F�a���+s8�xC���
D�MR~\�1$H�2?�������D|<���1"l�yF��8�	�ʄGFh��bwQx�,,Y���(~!I�I�[�$B���e�7�h��NF�s�9�J�7��D\>_)I� 8�?���m�ƙ�uө�4p�Du��u�E�缞5x�My}�q�Oɴ�#DJϸ�E��ޚV	�\f�VOY�r���h����_"0�ro��%�ݻ��$`\��O��SQ�M�+�&J%
7S	&��{�����QnB˚ְj���L*��HI%��+iJ+J�|�����1�ҩ[D{��q�Ct�*�b��]e��-��	�(����ۚw\�U�zy\��N��xܣ�q��嬝/��r�97d	'����p�)�r�N&��:H����Jr�8�Ra�L��?�մ�F4GH^�u7쇷���D(��i+�ɇx�M����1����^��$��zI{�ƽ�n2I;&���K��G˿�&۴��й���f0L~I�GA���?ĝ�d4�`q?az�a2iǣ�����=�&��0i�� |��G~* '�:_����0[o�f��"܄�,���VY{z?����充��$*dʱI��
`��/��}��*�L�YX�I�9:�V�֤���6�->*c?"�y�+f����]`�JF�AFQߏu��p��M�.Wߐ-+ֶ�}���-��+±�c�M��z>�{G�6=Wע�Ze�ȍ��TM ��q����syu4��3r0�}�6�x��.pj0|�R5���c\�.-�5D�����-
�,�U�3͎�f��?MҤ�D�n���ɟ��x��^2��tp��08HJa.¸��������Rj;��A-��:�Jy_��`ߩ�{���x��Hz݊�C.�p�*���~3�ӆ{Ҍ�w4�����L�e'(I>n03�������u�vx�dO�0�;x�~g���,�I��ɧ�A<l���w��Y4d��=95x6	�B�g�h�Y�L<�fIx�-s<�����V�5$�`�����GV�{v����u�ɠ��ϲ;�k�”i
�a�Wg9@e����k<�QlPU�ᯰX��w��j��i'H�&[u"XV�#2/��<,Ҋ����)[�2t�f���z���ܖ�@2����Lk��7|�r�K�gU�cM7�>�ނ��߫�N��_�����"n��6�R����lL�bO[o��`u ���?��l9�?ɬN��Z����Jo��o��	�3�Ը�	t
e��r�9�1{-��n!���V	l]
j"v�&�UIf�,�J��I�!잍P���9�to��\��(�N^�	���Y%�A�0W�x�nw��bK�)D���׾f#��5�
�B���9�`gK::�
�r6���R�L��:�1c;�_�����wt�B�i��L����p�"��*���GPV�Փ�rW��{�r�x>��`�4^z��k��IG�O��o'�/�A�p)nׯ �PҪ��Ȣ�wA������:J ��{5)
Q�_���X\���Z\rf�&�
�� )>��e�?$&1�̙F{WG�Ѕ[�)���Pᰘ3l����Fߤ���K�_���|!���^yЎR�u�hئQ���#la؁E���hG��/c�S&������D�<�v����մE��BP:�_:���̢"��R9�Q~�����=��u���۱[���@A�Ժ�G������!�q�"XM�d�pT��xI�Vg��M�"��;�Z1��4�_zdӉ|�w;LG�iؿ�V����][S�:~��N7C{�m�I7������ťc'@���wwu�eC�'��i�����J�u��]1r�0�H�B�rAB�!W�ϋPF_r��&B#$]~h�,]H*aG�a���w����p��>B�gBI�����ъ��h��N�����J�N48�LÈcf̠
c�K��f��SYn���0������/�,�{d�<A
��u�Pc��:�4��E�C��u��x��s��'�3�j���r�\c<n�@Ղ��zП�zz�l���g�I�W��!�v���?�Mj��6�R�7;�����%���g�iY6�i'�5�SZ梐��2�[}��V��U�}"�2�ΣJx�>jj���L9��]p�%����1@�����lЬ��-1�M�{p 2�҈5����r��1�E�;�mB~^�U�t���l�z3o�����7z2�J�%�e
��fP|�<L6��P�e��%��)��b_k�Hw�r=�3�
�0������H�,�:.M�*��b(��2�\��<}��)s�uq�	~�-��yd��Ynx�
w�SV�jAAm��V��yY�u�V��%�Φe/X�/����z{
��?�Ѳyid���c��2�G7�x^�s��T!*���<	�]Sa���ƚ��MSV�A�&J��~��J���G�p�Gc�y,k�N%��#p Y>�TˠW�[������tU�d�]���+��2�`�Zn*�n�8�&�
֋ծ��S���t�*�ޫO��
�^��H\BB9!m���@GN���͊(��<�;�)������:TU'�,R�`�3�Xl���m�5��o�ﴚC���
:#�P5�P�\���ɍ~�ha�H�飡�M{�S��m�6��oٕ�G~���c�Z�M[�E�����մ�("��i'�߀���Iܹt��e#��%������٠�I'�F��j���хI�̊*:�lՋ;��F�c����4,����,*��Ϥۉ�`Y�س�G�WEVI��Rq�ʅ�^g
�d�Ug�eY�x҉'��f�|l���a��`�R�4�	�h����r�S^j�_�v��Yh
�5�?-fۆ��*�8p�d������������4<�L��i�G�t�^�Ҝ�qd����Ǵ+����C��I,���V�=��P0�MCfH��i�t��*�����Z��|{Gc?�~�����k�M�Oc��e�t[pʼn]�nëQ؝0��	s�ɟ�΂b���s���ɇ]f���_�3I��D��
�=��{6c�z}����ݻj>YT�������.��.��`�۬SO�+zä���6�b��u�n��Fv��K���:�a�eq򹡨?����;���Ї�hy�f�2�S=��l�e�-�lwx�5�(O���wv_�z6򥉇c�6��M��;]Ϸ���B"k��]��Y�6��GyF۪�v2�q��x�/b,yH�Ş��G�C5�L$H�̓�1.��"�m!PR%���2�p'�V�h��K�
��?��}v?c����b|&�,��6ߥ.���Ƽ{��6�KzT�w�ڀM�q��}�f�U:�f�,�y�����͆�|b@��g ��N�0�1���n8��q�߃E}�A��M
V�+oCV\�=��p�F4��_��[x��n�+�l����a��������Ј�ø��)�N�g=ļ��q9`��ui�:��#��M	��u�4��/(�5є�1�VjL^�z/Scd��h)(:�L�������Q8J���I5_� �?_I6Ѫ�8�7��`�Ri̵Xl�'�eo�i��G�i1�㤉�զ��bؒ�,뎛����Y!`�����M�S�/U_|��%��%[���\�Ļ)���.[Z�Ů7__
縓����T[&�� �k;+(&�R���}��>���5�3�5�{g�9^�Ӿ�/=�s�T�i�8e�Z����]Ks�0��W$����L�0L'��
�i�c���P��i8���J�v����mo �z�V�}|�>/�4Q�g��*�O�	�|�R��m@dw��9�����U�~�c1V���=�Ag��/C&�Y�9&ۋ�w+f���+3�L��T��Ei2Mگ�—	U�7��q6�LF^_��|���+q����aL��0�������)��Ь0~>�G��!�Į����N����f��*����e���0%�A3�VT!��+ǿW�f�X�Ϥ�{��6�=���軐g	��T�HXB��c�핂!���������&�z��靽J�M�t
���8E3��0f!nu�� �����x��2yN!���T7�X��z�ȇ�b�_�PTd�C���?�$(�zj"r,)4�r�>�Ioߠы���`
��1��
Q��0$�0����W���yRx���C9[܌��0�m>���U����B���0%��`��
����C<��iFؘ��)�%�2�g6g~׍���8���n��d]Ϙ�+���BC)�v���8���U�ya4J�\�H?�v��-	=,�,ۦ�c��KB�	ѱ��c���� ��/"�����!Q��T������-H-�|�������lg���O�b1̟������
n��д����H��N6^#�9n=�����[�&n=Hʫ��#E/W��s��煵Nw�pk��r�V�d=�C.��Z�}#�9��T��|�yQ�k�Z\_P��V���£��8B�x`����^�rM�V�]�2�����8��a�cW�4pT�~��I��L��,���,I��0�cu�&���u$��~j|���fK&���3
dž����ʆ�U
U�I�)�2���G4j�<_�-�6�SNr!��М�f��Â����"�E먊s����	���(�$�_/�@B�HgSK�6Ws�=�y:��X�$f����È�K`�oҟ��o4Ʃvj�!������Q�%#ƛ�G�?�s����حH[�"CǓ�3	)Z�RB3K�+O�?N^ތ�az�pֶƧ�
�׬����]KO$9��+�]%��^�)V�R��0#Į��B�f���x��x�h��Ǝ��y�z`vo�U��r'N���;mS3�9Yv�Z�D�g����:�'nm
އ�r��.����q���r�t�q�ν*�֝����'�����ݏ��z��Z�΃;�{��)�<v�L�V�W�|�3��)���`���@{tU��������Ѿ�m
�7�	���y��� ��y�
P���Hu���=�[�r��]gi��5.��z�
�����|c(��<�=V�~@O���.뾍��*��yy٨��X����2&up��<�2r�u~"L������x��� ���7�Z+nUCy�A;�C3I�{�k�,Gv��ר�k�x#u̐3	��]�A7�C��~��g�ڻ|c��m }�V��J�����P�R�,a�Dڂm���KVK<�)��_��F0������G���>9���� ST�]`޶ϔ��n�V;�[1^WM$T��~�~�fA�yM��\�5H����(��P��"&�_�P��g���>�-��Q]��	?�he�&A7���/�B��d0��		'�չ.n��U#��Zy�b�q�����	�=��(!���K�K��SH �U��˻�%�y#��?gd��NQz�HA�{]��K̍�׽}YV�D����+IZ��)k.�ٓ?y�|{CƤ�m�X�A�׉Yy-��VQET��S58����������T�ȓ�\��
�"ly����7������
p���dFO���74�jg$V���ԉq�U>
�."�e���R�+�t�W��,�l�yT,e�2.^K��	�:���.�R���IK������IO�ҒP��J�k챥W�r�H�wz�90�?��ŗ��w�*Ȯ�/�����I_r�X����?���):6&	-�o�ng
iu`�?�gP��f�7r���FG�j�*Q�|v���j
J��sEL�oxpmL.�1\̾p��D�Ɠt�]Ȍq�]���(k�\�j��th��a�6A��lB��u��՛|���K�q~���Y}uv�DZћ�|iWԨ]�E��o�jj�v?�W���_V_5���H�3I<�dz�J�[E����P���`�֩�OZ_9#p��E��:��5�$���}��ޘ�O%V�[��S����N������i��Q�X�)n���,׶�q0��r9�r�]��x	�)ekJE���#��6�<�{��4��������"�l�s�,%�2�.
	�i
��!�#g�	�un�=���r�����zO�:�G;ҽ9;�݄qU�4�Bc�E�Lj�$h5��$�ⰶL2���=�J,p��Dg_�8AFB��{t��m�D4����Z�lR-Hm�͙&{]}�L/��4)���Yh��g���I(\=Op��$�ݔ��]�G.�9��kb� �$����0�BJ��ןS����k���*���֧�nH#Ē�0e�ꂣt�٢��"�vRl��^�����~�8P-2�b��;�*�w~�ǻ�5S��kZGK������c{=S7�f�^���eZ�:aB���	 ��Vƻ�
���������6�t3&�A����ᙔTG��nųZEKG�y"�n�5B��7�Ν��䂗z����8h-�����>�����:C���$����ݑG;�O�/�jh#^�G%}����Òh�������I�D{Xh�#�ʃl��� 0��?(g�����]ms�6��_Af:g��H��u���ȓ��M'��&v���)��(��v�bɲ��]_fڹ i��Z�V����Y�%ݬt�e�R�V�{��U��VSDB����"ګx��sC�cɆ3�^�ey���?�[^;�U�s��.����Αc̘ZN㪓��ӰZ�ș,��*�����PC#"�McDBu�tZ9F��ͤr�[��~�x�~�0�
^8,�F�zV��'��>˸��ȴ�)��橮4�?�7��</j#�8�TC���L��������r��	]F�E=����I�����DO��c	�g[��X=��1-yˣ
p��TY;�~��O�a�8y�S��O����b�%��Z���1��g�R�
cfqn�@�R3��ڀ�WW�UZ�A�5a�=m���F�����̏z���}��"�P����=�*���=s���gL�.��b����P���N�S�!���W�ƾ�q�<��=�����`���
W�^]���EO��8��«�֪������k�_,�L<�Eڃ���S�	+���Pq�
�|��P�|}��or�h�0���H�6�w����H�	������I�UPR��~8��0;��OZ���~�_�=�����ar[H-�q�Kw^�=�o��I���S�k$��U������Z�%tA�"�f��Ԍ��o0��WE�!&�������֐��p̬$�W�b�.�@�D�(^G��z�:d�"��`���Y��ЦV�H鴓?���[o8C��=R[D2��������w�֊AiK�y�#y{��$$D�9����ww��������O�e��8��vu���!f��d��Ƨ/	@�I��ȋg��$@�	"(�~���WDe�8��O���ҏ�;��׬DsO�7�ְw~Ѿ�~���s~�<PSTs��"�޶�.����ָ_���<��g(V�x�>�/%2DZٞ��?ݜ��?�&���x.�n���Z}�ө[n�i�A�l�:��f�]��sw�����W��b_�Z��I���u���7���v�c�p�|�Eh� b[�,�k���W�q��BQ�9H����u��ڬ
,+% ����
���4�_�P��Gmw⵿h�t'o���K��V�"���@��),�.ܵ�3i��<���g�i?Z�!�u�1d���%�U)EΪ��Q��&$x7	�w��(1��5��rN��t���=i��"��T,BY����/�V�b���G3�V۽?_�����<j�ܞ��j�TT�9����5��w�EP���
�L�!:��y�PL�^
�^�;��E�!e~���̉�埊�N󣤎���W�`���y}�5i�
����"�Gnx���)�86~Z�W���m?�/����25�y2�z�B����,��#a@���5��y��T{�J~��)+
�����H�ܟ�A�P<�Jϒi0ǿ�wy_�K4f��_��1�
)0"�9'^�Ux)��\�7�v�.���~��~P�s��gh�*���� �e�x���>��eRq�1ݩ�V�2�{N��	�!�v�}����7U�ޡU�W�5�Ih� �@�l�F��S�XD��+�y�k+�2�����D��D�!��?�$ط��]<Gz�7��Z;'�l��Iul��^�N���'-/�f����[Qe�Q��N�O�L�
�U���V�O:4}5p�
K��G�(rE��
U�;�4
���!<�K)A�di޴�Q�ͦ�|R�!ma��j�?�tSe����l���&-���T�(C����tyg���E�T�W�!�^�9�l��� �^J1}dRj���"�+:��d�zV~�S�Ɂ{q��fg8�u�����(^-�Ѝ�.G���%���r�y�Z�܊C>-��y����k�GV
���l�9�
���a�7��h�|p��I�T���z����n"�H�*��u>���퐂v��O������W���c8bϭBȀS�PXp<�W�9{��b��d��O�7�d��_JP,��e��`��H�)K��}����X!�D��6H/ካ� �f��P�"��Gvб��}}8�8�C?��!
..>��kW�rMg_�c�+*��H-�G,w]XV_�U�ߊ5X`~��rUF$�׬jM��p4of��ϒJZ	���
!^�1���|*�*�Y$#+���PZzU~pb��ܢ2�5�����b`�����n�aRC�Y�j�j2�
������Ev"B��Mn�p�^d���)��V���\����Kg������o�B����]o�0����a��`��&TP�-Y&s&�`���@�dY���]�+G��}4O?�?���i�5��!h���6ZvS@��F�8��:��n/]���#���>�L������xd8qpP�r�ch�\�X�D\�)�B�rjߠіf
%j�Ԧ6�?W�[%�l�н}i��5p�7vX��� :�����Wr��0��1K��]u�m�f]#��|�	�pڿ*�B
�2q��J!Wd����J�VF�����'\���=k��t���0*�W���t��o�W�Ȓi�w�*�v���n�q�j�F3���Ew���,Q0
�I��H6�̆�f�t�E1�Ý����r=���ПG(�&���ky�I�9ԃ�.P�z������$D�����B�p A��Z�˖���V��ak���`*֩�&0���6��.���]+�a�_�rpЖ�f��=G��;U�%vF�<�g0`�O�YgN�j���C, cq���|����F|l�<�t���l�M��H�Veǀ�;��i�1��W��y������r�!?�]s�]����lC�_�����z����p:sQt�O�m�Q��X��>�T�&b���\�p0��'����]o�@�}�"O����i�$h�ZJ5$(SiB(@���ВP����w���W����T���|��g�|���Y�`bE;H����Mn��WC /
������-oF
���K��
�*di՗5
��X�3$B���^���Lqu�z�ܠ�c�
�qiּZΑ�a�/�k\A/L71��*��%��P����(�XM�	��A]�.xJoQ�	��7xuPV�c@0�H��\�BL�G�l"j&�Pޞd�4�֑�[�/�e^R-��U���:HU��&�\xL�vt�s�3KyJ-T�{���@6�I��=��G����p%TK�6^Q����]y�8Ƈh�l7�R��2��O�*Wr�2�zZ{�h���1��h}j}=È$�_��Li��L"ԶɈ��~>F�|��yɈ�~м�L�a5G��ݠ�
�Á����+'�1���_�ҙw��b��f�
r��3�'��,��^r�D')�5'{,m"�VӦ�N��5&����c�Ht��Þ855W��e�ou�F��+�v�VZ��$���q���g>�;,ؽL�n`�O*�"�⚡D�u����YEpX��"'Gj	�c�QsvqgDJ����C��п�[ѷ
H�oטB��:����8j,E��jN�\�I�r��<aR����s����R�/@������K�0"R�=
�0���?H@����QK!�	��h�d��X��C�i�d��^K����8�7P^E�*�}��-��
��-W���5��.'�Ҩ�^��	��qnxVp�}��%ʀS.N�<l^hJ�(��"i�U 0�n���C2y�N3T���'��;��J�[�`�3�<}ЮRɥ�l�;�}&��:����ɤL���������;�WFJeZG�?#��b����"�A��a�ɑ�;"$��B�)��M���ZIة�{����	*��}�4�D�N�^�	D�XHrI�jW�i3aCPh�!\�e!��Vc�<~�-nL��-ݍ��1�I̽���$�J1͵5�~�����dvU|s'x��z��|3�k��2�Ǥ��\���v�&���U���'K
в�s0�/��=���؀���b�>C�u],Uw��g�zŝe|TK󼨍�3]�8Z%�x���!zo��/���k�W��{����x�$�X''�Ѝ;����S�HIl<Z�ȯH�`y������]�
�0~�Pz��W�eC�cC��k������hMLŤA�i	�S������0Sβ���qՑo��?�C+*��u#��p�mTr>T�OoVTc�&b�*�E��Π�	e6��Q�ho\'"8"'�����uq�_A�>
a�[��,��4��̢���J�Xa�]�n�@v#��#�m�Mg��v�J�I�uq�z��t&�����"3�)��[�4��&,O�XdE�}������G?�&	a���ӼdVG�Rr�J�MM4�Q�J���j��ݘG�H?���]s7�=�By�J�Ziz}����ܤ�L���v�:�'#K�X��j%�G������j�S?$Z A�Aϕ��67I�p]��BI�i(�6WC_�dY�����R��08`�cy	G玹�Ӣp�]�`6��(/l=�.����)����m���Srmiy���
��yf;�_�RQ�x�=�Sid��'l3�V��<�.���|�g����v{3��Mc���]&:��6�Q0(	�����Jp�UW7+�v�\��YK�?�ӚDb�a��4>��󓋔syjV��U�<��kh r]�Y�'2|p
�u�X�E,�5
�ێ���Ƚt��J����U��������[A�9����Z5ſ��{�ȧZ-&(Yٺ���)�Ḝɷ{$�.o�R���$6��oˑ�Da��-�����"�y��O�_����T�����?w��qEk|oH���cT)9�~MP]�ŗ�pg����9�riIZl�M���~5.�TAt��7�vcw�i��[��`�o�/�i�$��[�^�< ��uL���:MC����#��V��{�St�)+ױ�=�h'�"�P#�E�������r�e�C�<>$��OL?��~��~�ˉꊍ��$��w��і�x9�����:�"�-W�=��<�(�|>��<X����Ơ>.=I��I��1|n�F���f�|`Fmמ�CQL;����sI��ka��@[5��Et.�t1X��{m��*<�z�o^�Mk��1Zst3���<��#C̯3��'�1�m�&�`��V����?X��K(V��1���?��.��[댞�h��N���88G�:j�z���p�y(_H�����=�ĥr�j����cq��(RI;��W�$7���c���JY��gƦ����H��(�6���0�y6�;�Sq�f���r}�:#m�
4ϟvT`6���1^����ży"�E�l��y�?Ѯ�V�s���]��������|]��4�w���
�b�ďN�(A�uYK|]o�erф�ntG�S1~K^�N�A4[:�ń��J�8��"�{D�����nE��I]�yWB��cʲ�^i�$��{]y�%?��#,������}Ԍ,n>"�=�C�Q�e.��F'��z����Ы�6}�#��*у��
kٓ�\ϑ��o�T����6ذr�45�8�
�� ��

��q|om� ^���6v�����I��V�Ό2[>>�K����U�k�8����Of/�:PHf�K�w��#�H`6ygG��0�91�T*���DL^�t������1s8���)aW |+'�[���v0&����3ݩ0��/���Xf�Ņ�8��ÛL8�%`(�c�M�Ep2�1A��Ki^N�iH�=�(��Q�]�G��?�����	TȄܩ�`#��e"n��i0�/Gz<��(��u-q8�U^"����^�<b�}�	�����=iG��9�ODž=��8�<B^�g��{��ɵO'�&�5{VB�;B�^Th�W�w��\��G#��D^�.>
��A��;:*�}�P�M�Y�CP����r<߿Y���lW��Ek��[xDW�&T�/�Mu
 �� G�9�Qt�~��-JA�М�/��f���6,�t�A�x̏�_�6$���A:��G�ƺ �+IHc��s_Ť}��-�����G\�"�#��HV�С�,���=P��&�r�)��U��bZ	��<L�,�L�I^=����u��
l���m5�mNQ����<ɵ��M|�呉�G�7o��v��]߆K��"�F��>t��#�{m�b������;d~������ݯ뛌�~;<x}�q/�o����8Yأi)��-��&|���3K���k���j�#�ԶQ�}³_h�i_�M�<ҿ~
��B�N�\��B�*I��`��A
��X�HU ��Q�teu��``�;�x�����:�v;���a���dh 0��@O�*Q!1�j����Of�iը��!(W���
%=�D����D��8w��W���[��,7P�S�N-�yk*2b��t�F"��l�Ʌ]��s��Hlk����f��(&�7�T�ז��O��D4RX��;�ѫ^M8�`���w�f���x8��㱔���O���.uh�5�Uvp}�
C�=�d-��u�v�z�6�o7B}�������v<Y��N^���ܩQ��"e~"��د_[�x��
'\�{Ӫ�$��D<-�:��-���ܰ�2";7;��Q������H��й4$G���zu���mn��g$,� ��Ֆ6�"��>e�+}��Wkr��x-g���u,&�j	�^�9�1a���t�8���f�v�N	I(�k�8@�l;#���c�Ԃ��
y@C*�����j��
���R%�_��^蟳뾯H���;�F��h���sS�I�=���w�s��eu;��7J��6W8d��ꬃ��t&���+�<�p���������,���9�lv�ö������C�7�d{6Pk�Q��4E�6C�j@x��?�5G�i}pI{�f�I��L�U9 �m{A'+�h�6H�n��HJ�nTX�_��n�ȸ��*�+^){z}ՃY?î@@�3��Q�Ě:��7j�^O�����4m�L�;�<�?�}�A=STg��cIͽ%YL���֟Φ���8ϩng&n<�g�-h$Dc�τ6Ԏ��0���n=��ojc�Z���j�6$�e+�D�nGF�:�q��Î���mc�����Xl�I&}ݎ��s�$��d2<���ZL���9V+�rSB �i�S�fY�c�iq���Y_����#
�գ6	��b�v%�j/�ˊ���^�������@It��R5
;ZF��ɫ���d(��i�M�3���>.�I�k*�1:-����i��tR���� MV���+�#�;P&�>R �=�2D0g�<J� 3�A���u�X�e��� y6rzM��@�
1T8@N^�M���N����b�h��/�꥚P{.�j7[����B;FZ�1�F��{>֎�/�ٳ��W�K��X?�&EG�F�\k�x
��`�af�ݬI�t�A�@F�˸�1��)�N�d}݊~�}M��.�R��� %r�Jނ�Q��(e���?8���!V��L�������gU�!�z>B[�ļ�^�i����H�ZQxږ�-�/^��Vj��:�cG4��U��./X�I����%����y����c5��t��c�vI:��c�[t8�}����JP���H�Ҹ4T񮚯����h��j���*����/�9W����SJ?s��j3����tvF~��b.�g������2�s:�-�K�.^�`/Yf���.ǟ�h[O�7H�]b����]2��()c���̴�Y��~:輛��
V�Љ��N��^U�s�ˌ�J�A���r�V+R����h�ڎ�i��E�Q���������co@LGZq���-�#�z�^����9�?a�GP>��Z�5m�d�dwB�UW|��5��F E�f�G�;;l�fY��r�G�.�x4�J��[PφUk�4Mul��
�N��w�s'�����†�4=��:V~��)T�[K�.�T��n0���'G���ryYvL����c�{B�~t�
<p�n�q
��|]���%
vxDe梺#0ĥ<��.>�[q�>w�m8xИ�*kS�>PR�V�����g=����h3�D&�J��L0J9*h�\�㩈������eYJ�X���H-6^���{�n.�����P�W����Qz^	�}.��A�ś
����wX�>��(?�	f�n<���sZ�^*������d��
 J��p
��끑�s��-�w:���������oؤᏵ��e6]^��r��r��6O�)���~�}���/��}�3��]�dߪ�;��.��*�B\ɥ�`HT�m*ē<[㘣����"B��?e��h�T�`�^�z~&�����!�_g1�8l�imn�!\��ލ6���n��5�,�z�o���Ϋ���2�����{�!_�>��������zD&���z�ɧ�\$�����un��R���Zid[3�{�#zJ�A��l��eyy=WV�i�j�q�p��ε9 ��B�jE �ꇡ{O�� A�n|�?�ꬰ	�ɕ+Uw��_��X�P����
 ���n��p��ͮ�Fc>x˄r8ˑ��ح�؅�����]�����g'�lۭ]�-��zۃ�F8˅[�.�~��޿	#ȇ��g�$�w��'��lZv��ZMfH�2��K�\��]"fҚ��>�:�2�F�eC
a��K�[E�xI���3�*�>�0�_@���M�ϗ�sgS�K"�&�7A�Mg|����j<W��Y/���aV+��x��Ik��6I�+N��ż�<��-����|�������AKNSCRs�٢�e��⫁�-������sP<�=~�9����h�6�U�ƻA�}�V����4 �ePkL�(�� #���q�/�u��*���ř��h��^~ZZqj��f�A
�/�����Zt��bU���]o�6�]QI+���À�B��+bt]
��^R�ͮBlI��������HY�bO6���x<y'�x!k�1�a1�e�Y�S�]�"�,��3W8��3B��	�����Y�������̣�����%>�=+��:���/[����sW���M�0���x�ʓ5��!I��Q�C0��FC�z]��X!��~Gx�����E��$8*`����S�����"%v��dG��G�㗐���ѯ�M��D����RH����yJ�O�y��gu[�;�����2Qt�ǩJ������6�B7w����,]��w�Y|�/�T��}��3��.���MJR=C�`<������:�g�s��f@Y���n�E���g4':%$N�jm�F����x1��O/'i�~��jY�����P�^~����aG%烰İ�����t�uƆ�&��?+K��6>_B�����p���T��Zm�dk;�00x�A�c1Y�
�r�8�wv;L�ӥG"�������S`o��f�a���Rbs	�n��=0����įIq$�9]~�K�ѡ�H@zͰ���⦺'����{Yʆ����[
����W(;{J��~������E+%�Ŋ��vjh�"u�JVdtn�ì�����p{�"�*��h�"��%�kd��{�{��J J�h�H�'��,������]޾��w�R�ͯ��9u�|QD }t�/>�̯�lQG��-q�z�A��v>�ee�v�nP�����y���&�1%ɨ=,Q���x���ohSʤk�����b?!��Pg����5�vma��
5��&��%�«�(�C�X����Ad�Uz�U��W����Mu�:M]���	ʵT��z�/�~{�M$��_:%n5R��n�Ԧ��q"~
�k�1�g�-^����G������J����n�����k�A%��K�O�)���z;P�.xyG�.���Xd39��V�M��{kE����]k(f�9a�̜,"b4�sA~��y`E�I���^�V'��
�Q��$|�!튅;.mDp��n@����c1�e6����Dxh�ݦq��!YM������$e
b��.�_l���4uD$��z�ϟ����]�����G�Ag�.+}Fq[��S~~�n�`T�\��5	�D�R�
���dw�6�|
�2�����ko�6�~���9Z�O[3gH�u��"A(�\ٖm%�eHVR�߽��h;E�%�$�x��A�x56cD47iF�����&�V�����Y:��N���8��}�v����|�T����&~�IMRzv!!La�?E�4�����T�i�X4b*���3�J5�&K(���p�H���t�A��z��g�n�tD�O��d<jdk3�֢�-��u_M�LIZ�D�S�`Q��ߐ����Z��
@S�#,�h8/�$�>cH`���B\�$&݁���⿇0�k#�*.8��H}6X���׮z�O�Oa��=�9��Jj��V�E��7܊��lxC��]x4ܮy-�h����P�Ex�$T��U+�z;{-����k�j����&�q���/T���`�b�2_�ea�䋲��t��1U�g��,mĥ���tI���Y�+l���?r�k�-���EI)�_����H��K�2���H>)*�G#U��U���0�`�Rݘ���>|q�.�q�#�	j9(&Б����)��H��|rOp1���"���oa���̦�g!��6Ԡ���`��K0p��<
`�	z��-m��	:)P-�ˉt�i�V�oY\�L��Ұ��lX�ӥ����j5����Ud�m�-�X8r�v�A�6"���B
�e	ޓ�Pk��iv�w��h��t9+(��L*%c�A�Xó$����}E�8�C���2B{�	��|��g
�'�\��븰]��|�2[#F4sT���`�--��`ɨ��>�Dm)6��F��jh/��N�Ey�u�F����RJ/�t<�����Pa
C�|:���'�<�#�QY�aГ#tW�.�"�h��[u�3O�kIj�`x���+�(��Y�����dت�ˀ;L����qF��E7N%r���AL.w�3����aNPʆ3
��~���Р��śW�U��W7�6��I['`�hD�
g�K��%^k��u�u�H��r��М�0���갟R�q��&x�&X����<���j�}��GJ|��h�N�I�G�nG%��|� ]H��xڴ
��%̙mz�O��~A���z~@�fR�e��;Vw��~K���@�����ds�� �X�P:�K�X�����Ƞy0o��[���-��R���	�pjlO�3�f��b1n��obyjf��nȩ�K�8w�ӫ��ى����d���#�P���TpQ�c>�$sMu2r���1"h��f�(�>��-�O��2+�l�:\5^;o��F�cn��]�Ѻ�=�`Q�]�B�Xr�S,��_vA����Pgfl(e�m1�)�;M�5Ǔ��Ь�#�
���"��<�H]+�zYH�TJ�˩�m	c�|���:���?�5��vZ=�_w�l���I�nL��V��N�)�@��Fp��E��/;�36���u��m�]\����<p���t�-�ARޭ�x��e9
����<�mN;2y2{A�m9M�Qi4�o����]<<�ZA�AR3�D��=.;�|�a�F��V�'�~�;F��~�����f�P�a<O��{U�7W���M��A���5�ge��>��12˝�t�E$!+��Hx�w��Ee�h�7Xx�����m��٨�$<�>���ҝ2�鬽tO�C�_�i�6tDPfLP�?�b$�%|�8����^P>U`/P(��_�֨7��5����D�ݧ�rb���|0QO��BgX�˒5�`Z&����;�w*�����6�D�Vʫ|cG4�/D���O�J�#�C�\-��A���jV���}������L4ގZIQy��[��!&���%��@��c[��Ϩ�E��j����r;[��gr!m���TB�ŸEqG��By��t��J9��S�#�ͦ�˴*�Z�G�c҆ M�������Cr�)k#����2������QR��*�) ��i9��]�X�S��˦��*&�ʓ�w�వ�`�ZX���p������e��Qm���;���"���f��	թ���=f�p-|�nIO����Z�m�{ܐ����I����_"��6�����f��p�n���M�qY�
n|b���y1���d��x�!��>�(ተ.�12�KN�9�G\).�x��Y/�+�z�}���9�f7USwیV�5�}�Yf�kPn�ʤ����|�0�~ƽiߗ�ق�-�����'E0��'��4��!X����KlS����o��@rL#�����y�}׎�.�c�L���e�a�K#�/՞F�X�U������v7w>�W����o�j�jO?T1��s�s��2\�1@_��[QN�V�����ܺ3���U|���
��i��c
z¼�
9��E=ʆ�9)��M�l��j�nЖH�|��B���v}�啝�����p��nz��M�\��F9M)��nӨ���3��rz���X=J]:[���%�n��͵��N{�l�D�z.��px8+�����p;1�kAm�b�%0J:v̌)Ȩ$G��y]��C
�ۅ����z
ʎ��mQ-��qc���)����]o��=�B�^	^��k�m��i�^��S�!8�X;+������{9_��cW+��S�l-��p8����`�C�v��q��ã�!�d�j������ج_�Xh�s块�[��Pk�E��qO���]�V�7.��g75��糙��FƩ�k%(O��Hn�w֫}gs�sLW�8S��Qh�eC��K�J:q7�]� �}��E�*��w�PE?�c�ru�
VY�F`�=�zP�c�iU�V��q��&���/�);-ZG($�q��p-+v��
����[`�T������׊]˲yU����p!nX�5��t��k��Fi(G��S}��Wj<ם����<H[��S�����)�ѭ�I���Z���(�J��SUpa,�����V�z3���Y&gW�I�u��c�O�}q{�{�y�ŋ�*��f�e�����_f[��vX3.wv�K�1�,�����6\�ɡ^¶�QtKֹ_�i�8����_k�j�,h_�+cV��g�����GP��:u��ud�3�(Ϧ[�:b����Ɯ]��E���'�X�j�q���'��{b�H�ڮA<�ij%i8�T6��'D/��AG�o^��Q��~�)��>����	qfk!�*1Ͱ�t��`�vg�~K����3k���TT�lu8�H�����W���u�G?)�b4�Q����H�����%)l�A��V�箬��[޺§ ,JqCD��UL��IG�>�늡Ȯ�߁�<��`����%8��Mxh_�
M��x���!���J��P��j�c����1�
���\���f�h�؏����m���7�j
��A��ِn�A��v�˜p%E7������|*Y�����B�H˫��jz��-��j�z(Tc����
jx��"�TD�����?
��@]���9��/�����O����gxL(�!�$L�d+c��SXJ�{�u��'{�r�g��%!������w}��m�eỎ��(V�{w��T�A~G�
k�=�Q=��D7��)/��z/�	���W&�Q
�O�����k+"9ȣ�"^�LB<�UL�|�j���H��P�-��:i
��԰���[�3.�Y�~�R1�ykV���Ŵ�T}�"G����U'u.+l��w���檫r���@�Lا՘�wf����9���ਁG~
%�3��n$�#p�����f�Ը�wQf[������o I�;�,`v%��e��FE�6H]���p�p���.Qdwxn�W� �W��D_�}��&1�?n^C������y�hܷ1���D���RK`�D���E��v)wLq��ڒ���'�0�&	d��w���E�ϠE��[��OuS)���0�����cLM��
)ۻu�N����2�n5��h�KH.L�g��m����Wц�t��@J%�8T�9q�X��Zj|5S���ALGo����퀃a�x.�����C�[���-g���AE�w���m������ KƜ�h�RY�.3ק��o��ɸSb#���s�i@�!@~��.v���>4Y�KB�u�1��!��,h#��#�Dm^�~s���u���Q����� gOi�*�~�7ݚ��Z�]\�z)h�"�琰Sb�Hm5K1cԁ���*�;N+�Hi�	�'{V��q7͕�U?ٗh��������)a�޶�$5�����:��If���'|���n��C���G�k҂D�u�s�r���Ιͨ��0C0{�ڵ=�kP�E��Q_܀W�k(���Cs�#@A;���7���ԄRCyܔz�O(_^����$6U��qb
�
�j�<32o�{O@ȓ9g��v�b!�?�*�O��3R�ci��#"�ȍ���q��o?�����k��A�7�<_�l�c�^l��ၚV2�@i���g�[vj���\7�f�3Ez��J6��Lޓ�$�0�PO69��/#D�����M��3(Β���L��W�_�Qy�.��(0A}WP4Vii�7���jK��Ji���7;�Mz�Y����pPZ�WNv�H4�H5��&�V�q�V�[�Č�����7�w|a�PvI�L�ǖ�̭g�P�ޕ�Cj�/�]Ϯ$�vI�z5��R�AxupmxU⥡�yID5��e���Ŗ����]�	j�#�^��2`M��K���]�S:\i^S�������A�(gRD�<��U��_��H;�rXB��#�YNUm�湚�L�}OӕT�GT��7�/c���E��0����b�-�� ئ�_��o-��f�n\c{d$�QѰ|8���p�;��L㉆s��Gf��rio��/.��7���{��
����%�6W�3�������:oV��#��a���+���!��q������Px���A��i|�=$��h�w:���
�+��܌�vBQ*��K
o]lpS\Ҿ㣪SKIb��g�faS�8��fM!t�g��T�C�� (ŵ�Ŏ�_���j"��K��U�9rp7=Y2���ͪBG���o���ut�!Ha���@sw�{"��S�0d�m�����2\{3�x:]m6�w[�>�
�Kv,��0�K���w�#���AU���T���y�� <
��>����_���#b�g��I y�-���qY4��_��g�
�̲���8�I�n����Z�x2|��˟�ei
�,~��'�NG�]�3�i��֝޹��9�ѨW��5i!�V}j�eJb�Ղ�v�ֵ��7�j/!=�ǔ�5F�V)_k�б�:�9X��EV��Fj�*�,�^�:��������A�_.GVc��K�U+94�"@%Aw�l��;�m��C4���X!�@/:) 6f�!��)1��ў99��'�h�M��O��K��GEA���O�
�jYd�P�G�G_�G٥3\Z��o�l��;�e�i1P�F�'���϶0��.�Y-��Z���4S�f�vj��r�L ��qC�^2|މ�)��g!���xU͈,>��[���s���i��\��JL��2G��E��A�iCRf�(��'B-6G�jJ���o6��"�l�A�o�эU����8p�4��{ۂ�KO�7E���鄹c�Ӵ�Q�j�mK�VrJlT~3�-��RG��yøN8!���6�|{�,�O��e�6��QG�ohz+��Q��QY".�-8Ox����ʿ1>[oX\{T&�:k�t����M�������	��u���A���cѫ�V��w��'�R�H}^��l��VF�W%���e_?WXiQB�����W��v�F}b�q��8&�����?d��?�|�PĜ{�ئ�#%�80��l?&�8���L&61�^��]��b$hi	&n�ݚ�QO��S�uL*ub�@Ԑw0�3��5�ϕ�6
�1Z�BeX_�$y��.)����E� �O�����mR���'��r�'-���#�����D��(��pV7��:@�X���x�����9�O2U�P��?�U��k�Ex���D���1��3__Ҿo��"�K�S{g,P���J��8���+��^��ѵL�_4�ў>�m�\ˡ<X{yˤ�!E�F��у�j}���F9>W@h�A�Lt�&U�_&�v�Ir@�В�u�țh���Tb�t�B�N��K"�e��
�_��}�j�^�V�l��)G�� *�7�o�(G��Vk5sbB�����]Yo�F~��p�B�!$-҂[؎���Jr�BVZ�""�V���\{񰄶/��Y.gwfg�;�Pa-M$\˜�=!P�R����
�%�ߓ/�tA�|���PO�H�h�����) �L�Zi1��9E%�\1#˟<�q�Z�_��iQ�Ydݭo[�p�/Q?w|�3������ުZ���
Uk�r�R����V$yPP�v�-�FYS7�E)�Qk���3�Y�%��N
i�9��"
�Ð�n8�[�]տ���0��Ө���F���x\~G�a[(�>E����q�2F7�
x�E�$�{;�n%�I>�Ѣrr�*+1�����K��K�������\z�E��I柕T�m"�&�n�����Rx'�X��QV�*U�o�GGo��oW��tq��t4	�{�ëu���D�B�1�Vdg�0/>,�O}��`2=��@�4e���I�l���ϳ�?'�'W���|�'�˚���=j�E�F,���#I������"}�	<H����" �sD_$�\$a����5?�ťH�����%܄Q���1j�H�dmBp��6�:��2'{���h5I���a~j��a(��=��1U���ȍ�W2�}����=Š��Su��	q}{�qdO6�i�6p�k�u�9؁��7"�&}n�����0��3�ﱖPFh;i��s�{Z�8?5�9
���#0Z�09<͗�B̬�A�	/�Ԝ{�\����ݖ�4/��?�o똿�4���(�*���Sl�
��(�)��Cfr�
�Tl�.��%:�3#�G����L��e�$�й/$����c�'.J�P�<��>�M��ŭ����ᒎH�W>�9C���(3����m�ޮ�����4����G�X�\�3�6^����Syt/1�h�^	��{\����[q�\y��(�Ib�n6Aн��w�}���r�@�N"��h�yK��X�y��.�1�<T���Yd'/���E��j��5^⒋C�]C&T���^�4\5����P�T֪�Y�a\/WD��zܸ^p؛���ԡk�y�@q1)>���c�붆h��@���:��"�#�U��}��8V�6(�j��:g�B+f%B�5��^v�!iX�2]3_KdO��An)������M��E�@�P���=�{�_��[��i�)D�i�'��꥝�j��@V��<z:捫VZ����SK�g��q<O%�%��T\�X���jlY�3����mA����Xk&n�3���Xt�]�"	�n�M�>���9&��4���P�i�h�
	�0aR+ϔ`�ۦT�(�ǎ�+PW@��z(��K���L�%����{q�;�n6%O���Z�o�߅[�m���[91T�ҽ&7<S�Hu`�p/R�iE��_ZےDN�U�wb�U%,a�NjB�u�ߘ���;�� e\3.|���{�ͽ�����m��Y����z����\�0a��K��
��ZY0Q��5@��z��6o�97�F��I�V�E��Ŝ]x�{�9�	��<h"�.mk_��rsG)1�s�q�����L�
�*���D�>�O���n�j�z@4��y�.��a/�6�c�}Q��V
��Ұ$O_��z�"�@�y�5y�	)��B��b��lܢT��d+
t��B�_��S����?��U�@,�w�i�!�F*b&�=��=l��2�\���,���f#�\���?
J-/��H�@J��*�3��#����]�S9�����>��.�᪮��J���j������2fN���#	G��O��Ԓz�a?�gZ�=Z�V��`wүݍi���{��H�zo`AȬSC)>v�7����w
<F����
�.�+t]Ƭ��^��_�{�%�27&̜�D	#��%��n�`���b��5�/J�y�e{9K#�o�u��@J��^^� �L��:|_����g�p���s�?;��:�pۥ�2�ѳ"�-e�VM��x��AX3���S��Av����%;o!+����KH
��}\q�.��p�loo�H&zg��+��B��R�G���{F�Ռ1z�ֵ2��ӗ<���u��^Ê�,U��+*�[%�ZwG���:���-�I8l6]�yr����k:�G�����*{(q��-#��V���V���r��ȖMհ�E�a߼�و���1������ ?(T/��k����,��~<t��'�{�h�;��}x���&��|B_��r7������0C���_|J�A�7�l餕��{)k�|��5[���	-���LG�{k�\PvSV2\R��
�`5 �	+@���6�bc�nkxT�����.�;V�E@&^|����
�KK��;�)�� k���-C����~˴��ʻL�$(��#��� �bx��^�7��\�ݢܩpy��Jsx�m��b�>��p��?Z�8�T츺����"g��)���Wr���������zfv����&��Y�6��,,�<��Y��@�+Q���倲�w9���7`=��#��"=�b�/6�;�S�fw�W��D�]�z��?��s�5��(
�G�`�� �[�p��
)�eQ�GX���O5b�"8����}
�P��{ ~��h���D�\����3U$N{8/��A@\%��ׯݝ���?֔����{���h��h�kL������q�nlR4�5�T0�@�=ި����S��0�M��ܧ	H������ =,�B��������"J]ρ6{�Џ���W#2�	�1��>9����)�u?��ć�4W;!�G`��#�ױKN���<8�!R�螌���:�?�\D)j��:�����¦Y!}aa_�����o9-=><9<=)�n�}���9�VS�,vp�e�T�#�>4+c6�֦"��Z�a��0�
&��Vpn5W�hftxd��)07�~�k��.��b�lgjj��o�j������x�d}H��c,�=�Xg�ٗ�M�-��I�o_u����g	��	2�>��J�5�4Z��f�j�0�m��^j�җ��:�b�Z��S�_���}���:<�}K
�xl&���r���L�Ͳ�FƷ�J�[,��h�[�o�w�U��i��x����Wo�Q�>:8���w�`p�����[�|sw��4�q�e��
�*�G�8y|��2a�y4ݷY-C߈�yc#�7��޼=z{R�?�7M#��Z������n�x���_�a-
-2����R�A�>U��H��/����.�Pщ��(5���p�ܡ�)l���l�&��.�r^��s�שv�$�B�-���%��4��}�V�
,�5�d�]�z�42��$ȝ���T�/^��Skeje�A��:9��;PT�E��g�~�j��ÖQ��&	�sМe�6�Q��w��f�N7�3D���r�Fo��h�F�ģJ���|��K�57��������~7�J}��#��B�S�n�϶�ƿE}6X�t#��+�V��~ПY�L�˲�ڃ��''ep��4�B���<Zl�Uy��b��x�ݡ�?���TzqB՚gDfrvԭ���хb�B�H��ֆ�J���m��125-��
.��Qꔨ�Lz}}ϸ���[�u܂t�&��ٌ�Tb>�#t��/kd}su�Zk���%*,b�W���|Y�{D�ʗD���	-g�i����3�mSc��Q�/�p�����E��\���5�o��Z�^���t]7\��N ���֥�{*Ϩ�@��`�T�2��[V�vu�m�T��ŝ��~�5�ߚ�bp~�Qia�P�X�H��{��|�:)-k�+[����6�+O��R�-�\[P�
���9��86U��B͸�������#*��P�O�	 @��*bB�=(@����vw�`��_۳�B�D#��I)k'�*�͖��ml�,>CҮ�u`�<tv��ެ j�2�MY���a�R��dǂʀLR����j��i�a��`�'���tװmW����Ѐ*���^�8�	�6�>n6p�B7φ�8rr�'�yE\c��2*I|P�?��V�^ܢ�؝q��Ļ,����+q{��6]����k��g"�n���p�� Rz�;w�W���|�wG,c!5\CZ$�j�m>�[�,��X>���BЂn�蛎����߂2�燘'�Iҳ�%$
�_�B��l�7lk;��b�V�O�W]�G^��.;z����زy,B�*���wy
^�m�@��u͸ݢX{hK[�����8,��eO�ԟ1T���*��t��6%��(Ö�-�%�4�yC�U����'s�"͝�ƾ��IM�򳣢��W�n�}RH�Ζ@y�۳RԬ�fդ���K���}�j�����*��O�pb#%Hp�K7|s K���dY�����1��W[j�3�d��	mz��)?�]&�����;ۛ�iD�D�M���T��U>��.����yz@�sr��eŭ*6�d͒�'ڂ�Z-��b�.�����p�seM�[�fG)�6fZ�f��i�.�|�r���J�Qw��F8����W� ����7�K�@�!n�k���↰pk'��E7a�����	�hA	{��:�p�d6�bLa�x�ns���j�&�<'@��Pr�Q��G�"˅fx��8W�p�rQHA�AE���#&Ȼ*5"��t�����l^�� 0h
k�Uy���E�f7�	�۵<v����X�Η��5�����1�#�ܱ�v�������$<#�|�CJpn���t	"�}>�p��=#@�䱷,kM��1C�q��p������r>6��[�l���a�ම�~)h��JI�$O.����9��\lH.u��˺�'���?�U��������J�4�<3�g�Q������̕wEy'h�˅���w�\��K�k�vӖ�ʥ|Z����@��1O��<��8�mT��c�)����cP�qo���V�ZH	IbI�t�
6�ěnm�AH<וa�Cj0Ҟ(+|W�庛��R���΀M���A�R_`�eo�;�!���_��|�L��T�v�‹,V��"L���H
�:��η�< -6ep#[���&s"o3���.>�]芊�(�,
'/s?y�W�F��>�}qu�8Y�
���]b׫u�<↾v�X�ܼ�9���O'1>}��d�`K�%��\�̯$��\�z�z}��'���t�X϶e�ߐ�M��3����O�-|+�y
�K�-b���q��x��@�p��"��_#�3�1c���y��&���Ma�Y6���_m�(��Rqz����ء�%�hG%p����	>�C;���&��C�ٗ��	7oI���^D1���1D�Ea�i86��ÀP�άuƢ���?N?���V{׏³�@XQ!��]L�#����M�j�	�۪%`���(��y��������~��nz<=�fZ�r��l�G���a]����ī�|���u���h�:�a�EUL/EK@�X�/�jD�1�h#�&��a�T�VtY>�+Ƀ_=�2�2#�����k��m����2����(j�#zzu5��q%<Ҕ��
1�T"c��5,��L+���z�K�T*LW��{����:O�6�%�}H"��B�Hu�Y�)���.��Z��{�J".)���v��
�~�=!�k�̻�h3��]�����l�,
��b�(pKa�91VD���T�cC.Tᡚ�V���$��u��4���09)B������?_�x��/}�y~)�_�X-<o���&Q�b�0��B�x �3�c�:W}$�}�GH<�@�8$0 ?!e��#��"Y�?�l
)]���NQ�>��5F, �ϭ�./��
._
嫾}� ��*
���쫧���d~1�F�)��wzg+|P!+w��i͂��h��0�a}J Tb�Z9R�l����.=Y�Mz�h���n�����+Y��l��2c�V<;r�U%"~{�����bY��.wQk}NY��(�Bm�(�`#���g� �>ici�Ip��*oq�4�u$&���T7���v	q�z���/�	�O?!��Kc����:^���D$Ag�8��� ~����aZE�DUǼ�0��m1�t��
�f��`���=^/�l�V�V�h]"XI�	*�C�H�ed5�)v�aݞ��i�hy�6lE��E���+��
�{���c�l�M��2D�_-=���*'(YƔ
�H��������=kw����+����T�b��w�v&=����Ə#ɽ��jձgbO����S���K|���n��s�Ck� 	� �D��~\.�L�*
�C������
��
��m`�|.QCA
�F�����\�`V�H�E3�KY�w��YO��F_�E81�Ti���h�:�/��66Ś��}���n����	��™�� ;������׋,�%K�eD�0�KkKjM��(�*��b��ҒJmhL�C�5c۲g�k����[�V����q��'
'����$�R|_�
����z�_Ǧ��f�M�#�V��+�X����8d�GH�g�y�G�N)�
�n�ήB�R�Z�!�v���P�62;JD�;����CT�CA�����)�,p��H�����D�PK��bƌ�C����������%�YkE�ZbA<����Y>��c)-�?�M�儺\��L���7k�4N�?P�+v�Gģ�D0�a	�
�?�3��O��,m��{a��N�/@��j�l!�r;��w.6\:�K
�U�!ja.X6C^�/7YY	�u�H��5!A�(#�����>΋�ѾX(b(o��;�	�̄�0T5�����S�"9h���.�$	pu{b�����G����4\g�*��z��XP���LP�Y���г�N⡀��E�[o;��޸�}���`<�Hz���.^�F	�����/x�X��s�2>EoN�/�;q����L9|ފ��/�J��
b�����!�ֳ]o�>�ҕD0�=�����4��!��N8��4��WjJ�,�6�M��Y��_���UF7S��U�+�7;�BDA��������Dȥ��ɪW�M�Y̴2�%N����S����
������\�{f�3��O|�4>G?D�Ldވ�\H��ytDZ7�syղ������<�9����b�`�x
m�Z���Pgg"�C}A���X\�
|L�h�Ķ�_�τ�r&�����&$�Ծ}޽��=]B r#y�J*��x�F��l~�_��-j��7�ا�'��w��9�Y�X�B䯥���w��0+�-���
Jl��T!�#�T����>߁�q��?���ȒO?o(��&��)
�Yo_.�:��~l�:�L_�`�vu��
���c�Y�˦_e'��b�����ƽ��?�j���3�� ��8�KF2
��=%�-���"���l��K�z)��?7HO�G�!�p�Y��>��XLH�i>�cw�WC�)�8��1���VހZ�+k���f���C�p'�}/@@�|̻��|y�Lv4F��E�@F�B���3R=���
�Y̾�
���)U�s*3�9���!�.����P���uդ�5��b%��]
@X��Vq�eӢ^�OQ���}U�/���W�ٔ\�/+:�L>eb~C9�X$�~����c�w�Y��O&3u���!Y�`U�p�uU
RvqN����۽��_�fRZ�D�<V:|2c����M��q�)�%���[�-���z��|N9p��!�O�|�<K5l�
��J��lNCs 겧Q������NJ���q��,O���Sv\�e}?��%�"�qȇ�R���-�uM1Rn�1v�P
ݚ�y0��P�3��on�)�i�}~ܐ�,�
�	̌����05����&��Ժ�gQy.o�I��P5���k���0�C���s댷˚q�/-�#9+D?�M��^����-l����ׄ|%B�I
3�?�:��:���z�ߛoz�Z��|a-7���$�f�fS���9b��Jߊ�
Z|�2�Yc���,������N�/�)M�-g(Ģh�`�	>!\]�����M�q����@zT���-U���� �rC���O/x#�m�d��t��ߊ6�@��oߞ=9H�3��߲A�V�h��3�R�{��OM����yc�F��8��:~��v����4�I��-n7`-h\�%�Vp�n�R�=��灛�k/�|Hx�'ճ;��L��6�q����E�nqm~}�g�4�ȗE�Ɗ�8NEy�2�^�ԪH!��Z8pIWĶv�[d�.�B*dQ59=�^�[��[���q-;,��ML��lZ��MC�.4Ŵ}��)�k܃ �=rς�.�c�9j�u� Zj,9�d�S�7��n�t�t�e6?M^�&���'���⋤�p��ލ��U<*�$���~)ПZ|��-w���Gn��.��]k�N�:V�G�:�v@��'�da��0�J݊�+���VȠ'��T]?@_�d�_�}��zz&�{�(Z^\�'�#*ބG�2d��?9Z�������Hz���
��%Za\�-�R�c�ކ���>���O��6�!I)�Z�$�� Q�D�b[��5�s;
�~�\��?����u��|�'�@��a��T�d��N��t���^B���O{�.���/@SQ#��qK9î�+6��_�i�^ U
^-ݚr�d�����n4(�4N�q�ޟ��Y�v���U#r�.!4�j��4��D�*��A���e.��=u�#���W�Ѣ�}��}�P���"_��&|Î�D�Wxحl�K(���Y�B���Ucw'}�a�;��=66ڢ���

'4姨�iʘ������.f���Κj����%��Y��(�#g��$���@�D�R3
�`fqN�
J��b���/20jX_����l��QM�2D݂��p*�U�7i�nl����e�T��-ΠN���\�̌\VPQ�Hz/��oǓ,�h��k��y��=��S�8�7-���:T�v���2hӯ��-�pL�G�W��ݳ�8�r�,:�g�l}<U�z�ȒO��Y-��5m�Jc��t0I����UC������l����Sh��q��0Nw3F�@ ��ǤO%����ң����E�K��e?rQ��
�!�Bi��R�s�t'�[dɘ:F�ꤘ\]����a��l��^tm��)�JrlR�u%�[�ד�hcÅ�F:��:�VK�e,�)8q�Tѯ���@L$I�r��;!����K��;>gWE��6Ki�\(D�M�F�X���pM���ζ?�.����}��tp;=�Oڹ8��5x�̫$_�$�(��m�MR,����h��A�Y`?��8����n[1|X4څ)��ZK�t�����z�)jU#j�������%���SD!ji\�p�f��+y*������f�+��K,�Ζ訝ѿj��y;_���`D弫@��1J!Ѹ�*�(�;ǁsH.w��tk���lU��#7��;�,cw�ԂP�a��7_�����R��+�,�L�^�(8y!b�i�/G��L�̓�¡�H
m%z7t�Zw�c�+�d���tT�fq���F�1�*��Q��,�g������'�����{�l>�ϓ��b�%��΁����Uo)�|�J�ȎÇ����e��p��g��� L[�lQ�O�HI�0��[,[�S�ʏ��I�D��H�)�#��Qu|�UuҤ�i�U�ү��r8��Ӹ��e�E�ࢤ�H���X��H�`��7�F<����˷�6*9��[����!`��^�U�G5ϗ6$哒�(�ҭ�_�;3/-��Uʸ��Z���|�{�qr�ު*�c���LmK'ɾ���zw�|ip��}��a�@��w�B>8a<y�K
Qv����Ε�άB���n>|�xf���p�\�W��e�Ur�+���o��A|J�h.�d���҇Gk���9��ۨ0�N�m{|�(�{<x�6�r�OYI@?�U�ɍ��O	��]j_[�
�� _�Br�*����Ӣ�w�U#j����=]��Y���%�st�ۣlxۉ�"�|P94��ȸ�0�t�	�k�_��O�0�-f�_���%�P��o�����͚�A����QՔ��;F��-�5��g��*�MW쯫��2����N����0��W�o��I%X.���c����
�m�V��D?�;Q)�'��E����SA�Zr�Ml��MͿn�������Y[L���q�0��p�ƫ������Nܟ���w���{i;�}���u�U!��Ԕ:�&Ӽ�<v0-U�E�`���׿�J��>M��Sj�\�4�jB�OF�zǠ��R҅&��!�Al{jP-�J��L��ǨP	|�J9�h��%A4U�K.��ɬj��?�TH�p+��BVz=<t6<մVA�>��05�a��c��$���ƍ	��ޖ���C:��u�����NԠL�
������2�TH�q�樒�j��T��)�e^'���_@=2_Ad�L�JZu�T��6#���=#�8����n%�Sg�Y�dɵ.�J��J�����Mf���\�;y�f��Z�y�a/Ѓ�)�d�ن��.vM�q=�ߔ�����z�v�㨕v6�� �-�	��j�� 
�#�ZCe;�����Ҩ�
��;�܁��˚��If)�[�m��u��Jaʌq�4uA�K4��TyJ)��T.�*��������3�ﮪ�X�L�k�鱭����tw�
M�®��|7DJg	i�SO��i��A�Rb�z��-DJ��],k�up��OG���&�L��w������TLF�f���3�E�^��P��E?	�C�1�,;�uWC�8���7#r�VTz:�5��L+���B�5��JbP���h�F���8����}3�Y���!b8ԛ/@�1*W=\�5�'K�ִ��]��#���6�5":�pm��@O#S��*'ߛv����x�S�gx{ҮL/�<�IYR�b�X��7�/V�]l�Z�tg�խQ��2l_�M�O�&�g�p>�e���UovPW.Fzd̎���4�@ՌZh�\S�d����iQNM�.��x�p���=������1��~7�XC��hns[b9�r�\eLXφ��r��.N�G�9:[[� ~��N���.�m�W�o����M�W��v7_X�ncw�G�A��E~=�a��ټ�P��.CWvX���EHC���֌J}٘�s]��1��y1V]��z�W"�E��*���p��ظ��N�y�J��;��H�"zz瑎�!�z�9D\�7�}�͝���U�y\���ߪ���oc۱OF
���5��g:qs�2.�zAH��Z+�r�c�cT	#��J���Ό�3����;�.�Ɔ1��	U#����J��ؚ-��.�4@��+<d�>��D�bP�H��
R�t�Z�"h�^�X�P�ܶ<���u�Km>#��b���{X�$�XW�vSp��-� WX�z��C���*,SE�2q�&��G�*��l�1>h�i@]�^��j+�z����*�8X��4(��̕a���Eb���+��7�On�gl�`�_��0
H���?�.W�3fE1�{�KEI����l����NVe�c��>;r0�K=4$~��9�
�h�"˵�ޜ�I�vj�Z���u�8��ڭW=���F���:<��E:��V=.U���JBH�	���3�z��mL��}B�f�I�C����	�.���}���<b�F�m͡�ɑ�)!Q��t�+yE�-7��B��WG��I��/��v�ݘQ��N_F_�~m���ܿ�"~������������ợA|�9|��;�w�
zG���v���b��3H%��[���[Z��ޏ�awox"�ʋ�K���!EEݷ�ý:��t�3���d�i�Z'�?�@dW��6��~w���y�5�}��������:_VA���vY�닽��JlZ��ʽ��R>I+��:���ɇ�?�b�%Wד�Ӻ�c��wrD���A���K��s=����x^��51�dITk���L��9�+����{fS�ع��V5v�wr ��͍O�Le�T��'�I�w'{?z��N�������E��O�l��Q�����Q9�cQ#�?����k)��*��#�����Q+C�k�8��+�?>�u/�!_����u�b�wǸdT�����[X<�8>t�v�4O���jn?���b2��f���`��k�igG|��˸spt�v
�ٙB`���G��a�l��#�WV�YP�gk^�,�����>��Uv�w8Q�_��ٲW1%������G��b���j���=1���Ʊ����Ћ�sc�`j���Oy�`{{Δ:�׊���=^��U�2����Zo�h��d�
�x�yoW&U�N�����/��T���?e��b^�ǝᏪ��;ƨ��U���-	��T��T��Y�T�j�����}��ZH<������pϯ�gv�X���@,�n���S�Hg�d
���(�L
j��wq����cbo��)��n��'`��Uq�������Y%$�O��ٿ���pK��[��Y��EP��z��V�h75,�ˉ��T�T�d�>�������
��ѷJH����d(������g_%�r��1b[pJ`���_<���x��4�GQ X��� G(�lk� T���P:i�<����X�:|�$9�m���#(3�
}e����rz��K�h%ͥZ�G���Ä�ŧ�x(����`Q���P�)�eOO�7Վv�V��o4�)���B��3�>�F���#�2���4�d�L�-�]kuxZ�i^���z�k�G�&����iH�d�ay
z0���!�!��.�*m`�׭��Btu�7`
=�Z|����b�\��J?da��E�i,WY"f\�K��]EZ{�aYL�]Xr(�"D4@���oy]x��j��d�1�mѸT��Nl�p.��j��܌����,:�dɋ_h�jO��O�W���AԮ5#՛�]>͏��adr��$�V9
��h�t�`�Z�z�4�nߘ=0��<ae�I�2p��m�&�B~�Ś+�� �Jn�^���A++�]<�m���nE����z-��ǡ�����Um��aÀ�q�^��S���,�?��=�:[�v�O�o�Y�R+"�l0����/Y�|e��0[y;U��ʡ��S	�Cڲ����8r�#�#��;�8ˬq:��:��@�1>� /�w�u@=���|8��q�?~�;����~W|>R�h��Wn�[�y������7d�J�'�зGGÁ���6����o[���NL/^�d�;���[6�s��
���Q��"g\��fq>_d*��1uN^m�i�
O�Z$N�&סLg<T���o<_�"9Ͼ�%)?�޺����=�L����v����H�=�omm�w�"����
ELij�ey�<ׇZ������Q�Ed}y�����:��TB�i�jS�H�lk+R��/o^� jt$2�Ln��J�ԁ�&$l4�^��2�V���'+I�4{�B(1�Ż�\tr�5�84!o��nlG&s��a�4���v�̺:�q<!��4X*�U�W0���~;H�5ϩ�՚�!�ⱼ6L��|��CԄ�-a��%��MB�4�Ά��'d�J�y�}k:\N����+O>�lނb����Y�Ҿ;�{'u*�^��E�8�,�K��|�}�z��L�(�ig�@0&{�P`�=Nr�v$ے�~k�4
���4
P�?­[�������b�臝�vA�3q��n�HV_�R�$�
�\3��Z>���Dž򡴔��D�1�j��p��Q4
�c����L�Ҫ�*�Nu����^��Ȱ�O���z���ݨuZ�f�O+ϐ2�7���M�1K@E��ejʊ�.���gud<l�N�VЕ&�b���(�����8�g�oҭ6b�U�:d�ˤ�NTJ������kӥ�MT�N(A�����P�(�7�S>��OƻR��N^80���j�p�b��w/=Pp8��A]�X@׬s�^Oi���cI
��˩"�ǘ����پw�R��Pp�:�����a%�ݢAU�����#YΎXJ�d�B�B���|��[��
��
,�� �90	z��\��R_Iˊ�F�"�n��N�����Z2ht��z�ڋi��4(��	��"@eq]�׵;N�h����]��]��T��i�?�wk.����Yч�
��o��Tz��
��}#�Q����y���d�2���J��4�H�H8�$>���&Y�C*�'+��ddq)��ӹ�a���Պxn��PaJYu�ѕ�X�In|;�S��y�V�'���J�r�:3I
�
x���=���2��sۤ�nn�ۦ�Vh8^�;�xj�Pm�у�sB��1��"d-��TN�ye"�+q׵mL]��T]�.����~����S}�g�F���bZZ��Gj�WWk���~<�"-�����������!�-l8Z��q��.��1�R��?����Gٯ���ϲ���7j�;��Z0���7,��L��.�E�I�,c��{^��o��1�CJ�i9���ѐd�� [�B�7��+3HO�-H�Uv
�T.캟���k��@�9p��5��>:�}�.�l�����k�=��I��9$����B��D1/DPv�B���?����3s�#�>���Ͷ�"�j`߷�<<<�^tj��3-4Z**ybZB���H�R*��<SD�D+����?rVdw%��c5dËO�qm\�g���D�F"�p��q��������U��
����͘КfG"�7,�ͻS̀���Gf�s,[.T��A*�GH�H�e���\g������Z9j½�~)Ŝ+�V%�
��ؙdNVT(\sm�}�3}���g<D������'��5
ylP�\��Dgb7,{�
�ӆK���s�P��=SP�K�;��~bG�71oK���
��z3q��S��ivS���̛��j�k����[�n��fo��"����2�������X�����6HR�F*��
PG��߬}U�v���k1�S�y-�A�Y��;�����K*�b��zúBzP���i��q`�g%���ۭg]\�q�{�b��_���ْ����"��֫
��wxf`ٻ�ܢ�t?��'�ο�b���g���_�UEwL�ߚ�\Ou�i�f�p�7���[�Y�nr��iW�� 1��4�/f���k�b��-��21O����az(�cY.h4p.�u���)��2.
���~Q�y��B�O���u?_dhԆ$��Q�e���x��ﲇ�u
�ܟ�8J���i�y��r�0���6�Oن��?�}}���ڟ�L�	u�`��Y�\�Q��Esٱ��t�P��O�<~Pd�xD�
�Ś/�Yj�ި(��jܴn������):i|��EO~�$ds;�V��H��M�p>��_���_^�	�p�VZ
-hq��`w��V��Ɋވ�οH��M!�71�[���ģY�Ab��rr#*�Ss�x�����M�.����nn�,��'EiD�w�%2��*�4%��ֻ|Q,����{��S�ʦZg��������q��!�F؄)��w=��k�]bK�_���.g�T���Z�L��F\z�+�M�ݰ�c$�ͺ��Q&7,ZVL�F��k�U>e��b	V�\^&�*��7]6���{�3�'�x#�,�xѝDmrZ��%u�������=sl��4g�Y,�P��]�/!��+8vW�c��U�ږ����;��5z�pT�삢��z��Wچt�}K|�*� `��{|�b	Z�%��)6�66'.M��|"vQu
�q�@h�݈��ج��������Z�=��-uS�J�=5{Zxo��8o����������¸�k94�5�4����AC�&3[,F�ap*ン�l��͛M2./�镸f��h����Y�wp	�tG�K"��X�\\�e(�Qh��+!~����$%�3!%�g��1�a-��t���V�o��^���Q���y�OB��Ve�g�����	��FUC9���B�XC5!�$��W@��#F����uA;^��b"�>L)�ø��b�JkjI0�!���T��=,Gj������A���š>:3Z���V��e Š��ˌ��]�,G`�Q$":D9�P-��:Hc5kj FhfŢ����9�[��9>��r�=���;�KN y92�o���;_(�I�XR��c��L��h-��ml�ʐ�n.�?�	���K�IO���=�D��Y�U4d�|�;�T��h$4�1���s0WӦ���F��a��v���n'�N�)�"����CUa_�N�;P�d�5���U��8
MJ���]mo7��_��X[ɉ�~8 �PU#�M��ڻ�`�T[�X�!ٱ
��{9o�_Vr����.9r��|�a[�n'���Y
�Sp��a,�ɯ�N�Y��c�h�v����k��<+"��c-s%�.='/w��"tH���<E�@v��#�d�F��<0�JT������`Z�i5���M�s��j`	.��%��d�x�CI�a��+\����7X��LAO$;�lr���J�6��`���qC�ܡ�����X���
�����ʣ���X}�_8��;����1��`ڲ^H�W�����|=>��߼��m8>���%X) =��&S:��S�ū�_�`���Q췩�������B�Th��%x$z�׻��
L�.�E���>��zTs�;��OvQ��Դ
�Bc¬��]1�Ü.��//�Ʒ���ִ�쪐�'d`��v'N@�]mx��9��xV��gD!�H+���k+A�V�����t��`��@wx=��:W�˫��=���\7���Q	���яB�l�����	q�˦�lY81;������2��M��K͛�!��Cy,r<�=� @�aM��&�����>ǥ�k���s�H�桅i�.�ٜ���z����G	jd�_�]� ���8�ӱ}+�<T��pZ�����jL�F  ��]�/�..&u0�p����l��
j �G�oG�V��q]�/ZN�ѡ�
Na��LqW
9��JY�d�8vϴ���A�|�o*�՟�k"��跶{Ã|_o>�
�f�����m�c�#�>~0@X�.��«f��	���l��g�n �xPBINgq��	�YN.�����/|qj_�gN�k����;��|H�$se[EG����o�K�
t�6/o���l%��H�6n@�/g���yS�%f`��e�R�;��z�����X����t�s�Z�Ɯ8�%7��g�I��P��gCc�%��@�h�z��t1IS��%,i��|�zO�D�q��li���f+.c[$��ȴabv�6H��&�X�Ho�ttϋ�mi__X�Ţ�x��,�����і�!c
{�F�k�4�}v
���=��n�0����M�Eɰ�F���O���$�F��'j�|���d��q�O��ܲS(9SHN{W��j���𥉉����I����B|����6�m
������m~��T��.��̅Lΰ�b�(�C�E�)'�S�Vom���%��ѵ`�E8�ԬL ^F�a{���]��R8F��|-O��=�"P�n����Ȉ�-w�����A'VQ��a���qZ��� ����N�/Ʈ�-�:i�|�@��܀VHW��M�#K|ʠ��%���?%Y���~���`���?�k�ͪ�����x��5�聉V�M>J����\C���0��4�t4m
u�f-7��렉!�}������U������Ⱡ
b`Ѻ^�_��%��kU�u93ֲ��]��;M4	��,�R��^qR�0멂��l�3���-TΞЦ�A���0��vMe�-��.�����l��R�d	Vk�qQ�UA��sJ���	P��F C��ט7�}l�Bq��7���:ߝ���h�4=�'-��f�~t4{|�i�XL���3{��gggc�}ĢYn�,�@
Q��[��Dv�d	6���M�Q���E��IF.Nu[�HP޺.�
��5�'J�1�|�y9d5�oӗ�†TYg��J`
���|7M:� ��w��7���� �rN{��b�*�R���pФ ��Y����6�a�STu����U�f~!Ј];tZ*�L��\��QY���
�-�/�tRFG��U@����#k���|�/��d��}_=A�?)�*��a5��9�:�x��a��ч�ۣ�����\qg�pX��Ɍ�[ޞ�wS�Ob���o?�~Mu`�~��ӑ�ȝD9n�ʄ<v=k�h����q��Ad�`qH WKK�c=�}�nhnS���H �D�{�ń�E�P��7<81�Hz����^I"�E0j��<JP�Gա9� ��ꪮ�1􅓞�C�Z�U����b0A�S�R��J����I@Mעr�;*�򷱠(V���b��֯��Ӽ"�3sto���`K~��F?%xzԊ��7]۾6����(,�b�X�¦������>��FgW��kXd���q&�T��f3���DF�ޯ���ϤQ�j��0F8B��.E&��p�c�8Q�[;d�)��~r{v�ynT���bK�e�p_����އ�Iiʘyb�)�.aC7,���t��w����ba<��n>F�kß{4G5������l`Q���4��Q��!��"纊�+<��J�R¬-�O�'�U��V/�ee�8ENC~���U8��|�Q��q�{:���\(p�n�O2$�<�NB%8̐�#��FmL$utA�ٜ
�?g?כ��TQ+DCɩe�������4*cSː�c"����l&�Z����DO�_�s7I�RU��wx%�*�[
*H��jݗ:S���)�����[�(��sX����IL+5�����L���"�F���M��hS��
�����.TO?B\�4ߞ��ٙI3�%R�ZD�dj�w&����>�Z�^��;����i�/'$F�hq9^8#:�=�k�ݺgw8�y8}v�X����=�TP-�z!�N͘��T�T��#CK��7u.�D}ĕ�o�����Xh����g��/q!i?t��n����Wn:?t�d�/;�_���O����=?����ֹ����#ؾ
Cs�n������&�/�?�fWI�z���AG�����][o�@�+�U�-��@s���9R�i�d8��&�F��9�?{ᶰ"l�<Ԥ0��;lfٹ(����6�j�YZ�����G�l�f����Vx�;L����Z�z��;
(���A0���p�q�T(/��a��EL�8y�HK�@��'<DX�����ŁIPZZ�)-�1��mM��
�\Y��Ȋ|����
��~]�qO�����Π���;l�C�Z����#k��+`�3�k�>�;@}3�?�ڳ���w��|V�OXD��o���y2�M������K2Pet�e�S��3��*��X�����=�
�P���{��aoN��b�	L?�;�
θ&lk��̴�t�S
�V�ܘ@��ό]���܆R60(��ˍ�im��i'��Zv�k4�ۿ[o�lB���]��s��~E���y�	N��B�M̲b`V�0݀�;�bq|BV%��rDiY{������h�6Ӌr��V��VsB*��G'�H�fzy	[[�1r��.�Qp�Ao�@�C�Q�c������6�P._�$�x�+TX�GՁJ�����*��HK�1[��
�$���%��;X�7]�s���H$�+D���5���S��AQ渊_��7aA�֋��Z��3���I�3ǠI�E���rO�[�G����ϡ�f�%�8؟��}
r�kʛX�xC���dͶ9�q��V˲Z�a1?dW�G>�,ֶ ��`��oV������ko"9�
N:
�i��~�SBg�ɐR(����@'��C#�῟��g�	dX�$�]eW��ru�]�79�����)��o�P�f����^��&zU���/�C�9�6��O�VCu:������-w���nw��7���\	��p�a>���_���l_��k�[�RSs$8�E*�3��c���j�&�[��W���~���&�U�%~��+P��Y��+�����]�;;���O[Wv����:}�'mA�@��h0I�3�k1���g�{�y�c�H����e6��͆J�l�.������R����Q7��&���0N�n�^�b������n�b\J0�J܋���hdMI2X�<S�w���=ܴ�� V�@%g�t��y�?3f>ײ��y��\:ij�Ծ���0厮�#>���<EA�O���,��VN8
sdθ�HgYi�t�b�����kI+1H^舱��ow��2�}��6�	,��&h{�C���5�
ܼ���$���]��N��
3��6X0�?Zj����a��"'�w_}[/����Ii��)y������N_S)%��P=�frXƫ�F�e���e�˂l�-�Q.��yNQ�����-Ću~֖N�R�n�X�Slf�QX
h�#�P�3nʐ
�|w�W����ž��G�ݛtd�sb��B���$��n����{#G��{)�-�D��U!}D�%>�ߎĔ�%P�c��!������?���tj"�^�Y�Uzl�c��n;v[x�\��f�Z����v3��:1�k��_�5��h4Otй�>d�H�6�N��)ҁ�$x�S���1~u�;CS*��A�ʥK"�hz�ް+u����ܛ��{����I�F��ڐ�|M������L7�f:�<4���_�9Qq�bG��L���(��4�r��ɒ�!5���׿���ۻ0�6iX�%���A6F4l�)�o���S�þ��?�����4���~�ow?7/N�����mX?<<���R�|�9�ê����< n-b+��P�����B���}S�K.�oM��K�NuG`�#,�r�	�'es�qiܼ�iL�Ep0��D@/)�+���<�	1N��㌘�T3��J��p��3c^�Y%Q��M�E$�Ā%o�����]��[Ļ���F�x�*PY����҆�["��lk�����g�����x�c����'X.���pb�a�rq�K��+���hRdq��_Z)lEQ'��5���o.�H������qo"��N0���m>8_�La*Ґģ���&9@�Ee#���w����K��BW��S$x�L�@†~�
-�4'C�M���Yb��<�}��Z�Rl��*�L#���i�O̢����φ�f�ơ{�z�U�;��xN;"ͻ�Z����a�9� �B���&��%1t�Z��q���]�w�*���)D����H�n�Z����c��4���9�%$J�8�%��ch=��kx��p�EW���A��¹�k	j5'Z]�jbJ�0��2@��� ���ݕ\������[��0g�����F���'
�1ү�#�2iÜ��7�O�D䞹R�d�f�_	�n��B�i	��=4���5N�Y�xT(���h���;����߬�`}Nz��;:��+����~E.�ÝY�3/3A�43ޕ�~lA&��I�C�� ��aoJS�1��;��S��H�@`l��6���
%�
8��ǘ.Ө����o�k��(]���?;�HC��9�b�	�k�jW��/�o_6��@�_��pJ9:BG<��k4@I���\���fC�a�:OBX��(`P<�!'�	�;�%� T-��Y<Jf�j
��R�S>��i���@���S�E�-�:��\h}�m��j��YG��� K�ZU����޲�)�G��6Y�F�7S��8<�G����tz�{%daWJgϤLY�v!E
�I�
���P�¸gB�*م g�1a����h��#�܍DDa��ks��:�9�(G��p�Ί�olS�ٱ<%a�G��� ۖ��r��7[~��2J�w�~Zc�N�cpgNo�F�`�Yg��6���Q�i=��v��n�_4���Y�u}֢��+�G�hO�*ƹn���C5���?倂�5K!�I����e-XՂe=X��Ӷ�����HM��3���c��A���������ɲ�馝��ZK�*���0v.�4�nU�e�Ad�Ƒh
y�8�����}��tQZ��
����rx?�U�����%���V�P<M���Fb�ij�j��ܥ1͍�����Y�J��Q�4�E����e���X,J���%%�X^~5�8����x>?�o���h�;^�cܯ��PW0z�h�
��ٜ�tr��NB!t���|y�dZg��s�P�t�B
Q.���PF-��@ �
�\p�?ɡ��b�rRʿ�BWG��@���^��X�.a���0�w���k�a"��
>�L�t���Q<��@2��pY#	Z���\օ
��z��Kud)s1�e����F�Deրʁ}��%�/��	ث��$�ju�tW�J�
���_��,��%��5s0��%m����ˤ0܁���@H����z�g&����
`�x���/ȑ���?��U�oA?M�Ik@^��7y��v�7<��s����g�P�����ǃր�J-�3�5���8�;bӘE���
/�0&zI��#�EiеaM�G�j_l58�D?G��,�����"U���eX�?�T<���X&���'��	�7� 7�m:�r�?�\��鐽X�����A�0��<��W~UV%Q���v�S?�����&҇��SwO@N\sj���B���̔x[Dt#��>���8$��'�,5j��
Oh���Z���Aȩ�N��-�:�.�����=�S#9���_U[$Y:Y��6��d�,o�P|�]QT�I�w�t^:a`���$�n��wuUSC�ۖeI�e[��׎Sڀ��(GQ����F$S��>m�l낤d��1T/0I��EH�I��0ߟ�B,ǏV�b�V�4U6kk�B�yWr�#���pP�O<��H[�L���4v���^KAެ�~��8$t~9�UE8�H:RB+��=��-tRS�@�N��
�lG��+h�v���Lm�B«}'�e+�+m҅�
BZY��N�N�'�S���0Ij�4Fƌ��e��L+�QGiΆ�O`̆�:�o���.�puw�[�3��/.v��d�ߣC@2���'(��ΓsȷK��0�O��!�	L���W$��c�G��v[�͈1V�>m�X��b=-~��g˛4���b2D��o�<�Vbh��#ս$�!zVQ�AGZ��a��k
�Ԑ�:/D�p�c�H���c�Jfu���8���1T�U[�PS����e�$�w�����)�ۻ�{P$�fc��f���DZ�������is�Q��+�
�vW�p��h��(�{Sn�`NJtV�vu�d�&��e���+��ʲۡlMwZ"�rI͋!��(=a�Σ_b�0~~̗�H�Ij��d
6v3�Z/dR�EN
$����w?�9��["|�kTxf����'T"���@gd����z��U�zN�Z�{u�Ӳ��=�g(��^.`��qj�(v�f�I��!��[zE�4���$��e�A��%��;�o�z���B�6T��eS�g�h�݌�ϪzzZ�[�O�S���]N���L�j�_���kz���O2�1:)�$�*y�s`e�՘=���0�+�W_Cٯ����ؼJk樀W+Q�~�3��/<��;|P4x�-���#I��儮����`�
цc'���/q�(w.hZ���&�&p
Z��XZ�0�B8��.q�q
I��E�VV�Np�i�wI@X9�F,�+�Ut�����6�SX���7�M��y��ZH\���5�<��\�즫;勦��x�z���aop�w�+y=vjgBM���H�
�/p�
�J�_xT�$.w�����N�r��{��˅�M�+)ON{��"��:
����@��0/=�~R���
�zG��X���G�D�8Yķ1�
����?e���?��i����O���x�Y�x[�w���RH�$�i���
��S<�=���pyc:|,�p��>�5]y��9u��yD��D�AQ�b�I�~4˯��V�Us�SL��EV<�N��p*�J�yE�4K5��k~ƂMe�*0g�Ph���"�o����:�N���ْ�0�����Y�s&���$.�bEZ�;�l�؝�(�K��H�sUgfZ�C~����w�['����J���j�A�4�`��0�c/͔b�[���!N�"����z;��d6�2p�/��*��N	˭Kp� l�'�11��!�|�Pr��`�v�40�K�O�&����xLz%Hol�P™V��2���p����
q?��Q%����JSc�G:�����ȊPl�ll�KIb�>=eޙ�tYXҚ9���*$iUVy��V9�76�+�3�|�[V���s����Gƪ�Z�d&�0}u���I�Z�A8�e��ji�t�p�̸W1��P�|#L�<qԐ���B5�
��=���FO�g]����:��̻�
��\L���d
?���rX��r�OO���W�.w�\�;qGa�߲�w���k�bNT��<X}�����(�Ӻ�G����>�.�y����#/��/4�{���C�&0�dfYW����ȳ;��ۢa�7�pb��1F#���	W�0fx���`�\�U�ѮIO皎�#F
W��h6��Ծ���@�~j
��YwOt�S���~�����o�!��u���K�ЗMQ`���#%cX�V׮�;ho�=1}W�=ڡ�P�8�r>�b6�80wh�;��1U��*/�՝[c$}�ߒ��h.�W�6������S�(dT���;�2y����p^waQ�$������F�z��oU�p
���'��>]�~��P�ȕ2~�?�I��U�C�ԡ���\�)!���֛�E%��u�K�`Ue��aE�����I��A�ˣ)���w�/�^��!1M�����:�n�\N���_����_HE�dBC(�T<�T�y�n��"���T�����Rɯ&�.܆���lGͿ�MZ��OS�e�M/-���Ω���5=�F�kK��0g��#�63�	��r�����ɍ��q����h��~���y�[N���!xɎ`GK�����5h_�7��	V���$��`#�֮����Ca�������C`���58��puC��&41{�xe�J�8vG@��d��tt)e����i��
=���
�ȩ�7aA$_{��,�MD�/�֓]����:􇎛 �$�SkJ�qJ^�L;t\���m|�����@H@ ��R�U���\�N�e�K)8�|�fb�na��{]\�8���O
��P����ou��4�~�g,��*�#ؕM��m�_u��F����()�Ȗ�h
�f����V�UIc��fI�[ā���|�oJx��d�
t!��t����8������,�)hٱ�n�]/��S��+�ɒ����j������h7�Jk��t
fH�J��n���+��5��J��
�I�F̶��%Ł�T����,�]�ap#�mh�x��A6��U���-���՟��TLt��T�p�����M��`}�04��~2�jʪ��XAi5V�����-���y[�?x�D����j G�j"��;��+.��;�U_�1��.���>�q�xy�`��~z�}C�?�����WVSFh�(���e�G���^�am��FGY�E[����}4i�Kg��{����Q8ñ �֭E���\^��ۧĝUx�F�����`;�_¢��A��W�R��<����ZT�'ˉR�kKCX�|�2�=O(���W|�}��hQ��߿[�>7�	�ڍ�M|wg�҅�˜V��3�c/X@����o
�0��n7�l�A�r�v���}u�-��q��_�y��i!ž��Hפ@���=�P��u����Xɻ��ʢ(Y�x��#L��f�̑�;K6,\��D�|dq�V^���� ��x�l��� ��+�;5
��@�{,��d6��������+�?�	
w�*��A���=

�-�����A�]"ץ �g ���%(:V
����3� ;�J?(�B
7�����k1��W�fO�x�>�:����ާSH�98���;98�d|�>�O��\"ϾFѬ֮!dp
�����a��#�>��(�u�hs!�U������rG|�2B�MM�V�>�u�б�p9G�kM��hz��`�>b���ݴn�[$�x��Ξ���ni�$�"MT��^�RA��*���R�pN�d��c�\b����xu�	[)���śCY�Y"��f�@�<�E��Ic�r�㌋��s7,�bKK�G�9�8��Կw�?:�N�.�zJ��Je�\:J���Vbҵ�D�-�%�gD���@�=���9Ȟ��9���>����Zd���O�D�C~O�=�<]�Suo�^�6�
���r܁�m���3
b��N�6�#�m0��'��b�?�U��8Zi�
�z�,�������d�07Q�XM�+Q��s�B�z��Y�H���CH�ʀ��H6�!/w^V/+�՚�ț�Z��f��4U���h�*g�řP,�|�N�]�Q~+��m�R�e�UҺxl�of^���p/1
*+�@��%=M|Y��h��E���;m
�)Hڟљ��R�=)�s�-)�	;R�#��}��HnM-'��ĵj_m��g��\)�Z��3]2�o�i��{m��L��F�7�[��m,U�a�=�~eǫ*•O��T���,J�zX�?��7�cշ	��Hl��Z�
�a^Ji�XPny6r�P8ͼ=#\C���y���h�?^X�-/e�qV�F>l������pS>q>[����6�\.T���Y#BRߐ	��վa$dU�_;�ܾ\�P��E���Y"dB�|O�?�7�n������l�Y'屉��'��u�:sݯ?Gҩ@-�p٨�%����-K$�ʒ�"V�DZ��d��6���0e�sm��W�r4g�Q��c� ��.�U�"�Mn��m��r�>��<k�o �@^��9��0Юk<�,��D�i�=ʶ��2����*�[N�x�v�Z��7	��c�M�3�Щ?x�ylqߕF�!��ZM�D/']X���. U�>�-��+�.�i��
�
�����ə�h�Lc�XP�����h���P�n�YS�0�~�0[�mB�̮�ˬ�T�U�Ƭ�Kr�Ɉ��I���2P-�g��
�4��Y�J��������{�	H�j!�����5Y��kT�	��bJR�HeѹںF���\X^�c�ܶ������Ef�&�a��Ɗ��r�4yo�H��%���#�����"lŃ�Rv��Ao���g!"��ɗ�M6�"�3��^'Vk����^�W�="x+}��F#�$��+y*�m��s���^�cڋ@��97m��ƌ�f���<#�s �#�az�q|��]K�CY�����kK����h�����A�؅�ڻ��}�
�LJ�8e���i�g�BuՂ�p�7��8��s�K8�K�n$&�bbQޒ�¼�%��+�r�.�pz���B��[zb�2@����H�`c�əԥG�O���մ�bC��hӃ�8���� y����R�R�w��7ʢ+lU�����r'���0��JMXT�V����E���=���!;��e���nE�}��
�QM�`�<
ۿ����5`%�k��̝����mgHT�c�:RV���sX�[�Ѣ;[�M�Y�9Y��� B#׹3��۾��i�T�y+ܟ0OjO,t�.<	���B#G���3p}��*�.S.��	�O�$G�D��5]bǺ�uyS�<>[N��
�*�W�r~���!Gߩ�s+���.e1
�ey����"��0��L�`���Z[�,\|�t�4��!��wv�F+�|*൶?NB�Q�		㡣�e���0	Xhf+2~0��RL�rYl1$�3��4���lQ�8ORO��39�Y7�$��QwB*]��r�u����6�Ċ�-�xڵM^��O��gE�1�H�ĐmKpI2���\�a�G��f��E&��Hऐ�R��Zv�ly���B��h�����J"�"�R��#=ۊ���l5�M��ˌ�Q�r-��&�^��Ӯ����d9y�ީף8��&�B�s
YV�\�C�>ES(�a�Z�VF��nd3�'k��f�v>T������
��6~�p�]�ae�lo�A�;R��v�)�M/+s�(Jd,��\�Dam�RG�B���w*�{��&՟�o+�U>I�1�/z�9�G#sԃ�!1���7�Y2�{N���u�;��yg'a�����fG$\��Id{P��\̖b�tO��f��ذ�b��U3Lq�Sɉy%fb>���0��N��#�Цu��G^X̌P�3R+-�3J��k���E��~�\B�Z�m�t���B`c.$�qn-\�yHW�r����٤j�:��/P�&�����P�ӻ��p]�y��'?;AJ7�m^Z7��5tɠ��ye��5`V�����߶�_�;Q�~�n�@�B�ˆ�P��Q,�Ñ^�ǣ�_�G�⶯/h��sf#�b����r��g�wÞ���'������t�os05ƣ@
$YG�AF�%#׃����m@�{�a_��X����(�S����:� �SM���44i
�KJ2`x��iH�k+O�I��SLӂxA��"VF��ˆ,���RM���GvOU
�
��'�,�� G��`��xK���%��z�dy��5(z�d��]���/����'�����u�ʭ)92���e&��FQ":����҂���g�USb7�C\1����u�R���$a.����
t+�-�ɟqK���M�Lu�h�~��ڦ�n�o>��T*�Ͷ�XӖ�6S�Wf��A��r�Zf��M�������!2_G�h�IBA��5��:S5q�R�˗���.�#��t�v�J�g�J�߲��]7i�E
Y!C'󮋜�b�9��m��nu��FS��)C�u�A�����Q�Ĭ]\{��~68��
ʬ��˦&�qZj:�`�	��/‘�����R��L�x��Mru`�H���q����z���;1��̘t+��gw�R�*��ϖ�3Iձ07��]-�Q�dZ�MV������4��Uv�2�8�g�/@��P�N�����>s�_E�L���U�k��w�=f�T����MSN1%�b
{=R�fi��غߣ]wu�h<�<���8���m�����	�4j��O���q������>�E�2zd�½p
Z�fy��Po�L�j}�S������X���K�Z�6}
d-�����]�N�@���_���S��I���4�}��ݙ�.�S����؝�9��.�nUp�_̯�~�b�ïM���x��¼(5���LC���}��(&�'U�J���\o�?_�s�4�U�@���z=��ؚl턜R��M⼾�֧)�x�c�\������,��#j�N[��y�7�
�t��#��&�k{�|o�hF��L�R����ꌓ0Dڳ�s���8�f׈X�we�X��>�o���t��~;�$^�.`��x�%y�2K�~ ��S^Gς���Qre���ŨfQ���9Q��v&Z{m�8�A�r���7�^��lQ�"c����Vd߻�.E��G�Wh(�XSݬ�l���eU�wx�n&'��5����kO��{E*�tI�Rϕ��#��U[PB{t�P�r��lE�����׻$��_ڰ~���yyf�5Ï���[ [�^ԩA܍���-��|D�07?vx��-��5㻇(.�g�j��۪:���p<��Uw��I���ԯ8?�]q�Bh�+�2��ֵ��9ۗ�<��Z��:���(	��=�����v��`�S
UU7h�M���j�Az  	��ƺ�XQ4E�0�}�RmI5)F"����2Kҙ��/� /��EzJ����\�v�B*��f�ux/3��Ԇtx�^�g�[b�[b���<���oO�>C}�%��BRK�`����õ��\2����fÍSĚ��=K��a��2�Ex��uG�f��ɆԀ�Cr$:3>���J�{�t�a&�jQ��홠�"��I���>�o!�G��s�
]��7-5'�t������J�
N�]G�:l���8�xlLDB������8�����/�<�p���^�#)G����J��L8-\�'��'�?"9��"��<E����,��q];Ӥ�g��<�x:��{ʧ�dBBRI^v��ƌd�¬SJ�E&;����}���i
�֟#�p�w83S~���\ĉ���x��Gɴ��N��z��ZҘ��-�zw��9�bTr1Z�jvp��]#���Zw��!
������s\IG���SEDs� ������k&†���jƙc )Ծ�Ċz�za�,*:c��2�/$��c1�x���@9����i����C�F λ��̍�,b�Q�ц��8|��j/�W���~�}�q��-�MF�K���D!Ɯ�w3Un��#c��K�oz����`�#������^�s𱉩Ҹ�uz;�u��"a��OG��&�<h)���e5�u+\�=p����
>6>�?�P߬��ᳺ��&P8A������ot�N�C��k�u����M/�@���ڰY�e��]q�
���1P���;�vƆ9���V�XHuI��uQ��j�)��9���D���1GMYHN��:�԰�"��ᛓ��QS��'��aw�2��I�|C�J��G?P	�QF�^<�\���:���p���q��D՜=:7['l؅-���o�]s�N�PHVf�M�֞_Uxh1\�n��s� ��2�>���%����p����X��u#w~����"L�qA�箭���S7+VDnD����̴ћ��U23.�T�#>H�3.�]Vq�d�k�v�JD���$%�&�����Z��
v�կO49��9��W��xr��L�ʎ�)W,��rrϽ�1>Sbee����\�șPx��!����7^���$��d�{|^����x_����0�[�8�Oϻ�D]y�^����`�h�<^���;Q��AK�p�kb�Mބ�m��$��Y�*������w��Ż/͟�h:��E�w�0'���mct=��G@m��|��Ǻ`��P�s�C���cL�~�XN������
��&�(��~�$�4T:!�;�Uܪ��䋍jio	(7F��d>K$����gj��ɬs5	�~�%?�3���=��q�^�i��)dM��Y�xݾ�:�3t��@YB�,��N���.w�����G}����f��5.4�����q�6x�5���Nk�
]�dpZ������%ji
��(Q>�v��4ϻ�t���vkeR�p�tSVju�6�����>�<����a���.NIE�>��إ�o+ث�t���8�Y�q����,�74����K.��D>��g�X��{?����6�#�V�̯��`������[��(�^�2�a7�Fپ�C��SŞwg�����L���_����vLwq&�j?,#�M��+���u�±������D8<�|1�/��ł��8r�J��(8Y�Lq�3�)��'M_u�5j�_�ã�(��Ť�#��4"�{g-v�z�~
9~U槺r�NpKKt�28��Q�p�P�fS�>������9{GF�^�F-;��o��dN�Pj����[�bJ���l��$��8���~=�EVL�B���8�����E�M�Ȇ4�zKBʻ/2p��,���CK~X�/��}�:+�<GqT�n�RW-PiE6Q��wZ���,������6�&��㎫m��hw��\�œwG��L��FLZ3S���uQ�?�`��v[�-h�@�B
ҥ�=�sz
τ,�*<��]X�S��@1[A�{}�a�K�|�,<�I��w�uFS�E�8�)�Z�`)h�=�jG�LsTp��D
�_�����\��{
4&�qVYu$
��o����A��o�����_հ�(��*�EV�]ɥ��d}]4���8_A eRñc���͵5���3�Ewv�$�z�X��]a�hȳ_ʦ���n�㬧�!��Q�$2�����D� Sf�F��/D�$\��	�[ң���UFi�~�(�eh󐂒̪U�ɹ�1Y�㠡�z��A���/����W�ښ�w��hҌUXq�
���-K�cVr�fe�_ڴ��xo��N�}�^n�.��\�Z�M.�hk/Ul~>n���|���1�376�g���l���ٯ3�
B.����F�}z-��:	�\o���:����K"H�6_�;����"+�CA�M�GL�l��ǝ[��fs@�o���O�mOs�}m�.�
��N�oM���Dq�U�LN%��������~C�_4�W�"e�h��j_q&}sh����⍎Ǫz�I����K���V`��y?�cO��rO�I�J�w�����?;�F����|vӝ&�˯ʢ���u�k�(�6:����1���\�� �&Y�P�q8��U���o"S8�`�+μ"J>��1�}����'\�K\�;�����Qr{�e��;�SH�C�p⏢m*x%��;���T��E	�gj��39��q3��'��Ȫ2���/���%)ax}��H�bc@R�������T�
U{��K���n�tp6��.n.!�4G?�DP��_�2��9����W� �{�Ki�;�y�&k
*�	���7��T�#�f0���
����|w_T����E;��˷��
��{����\j�T��ܱx�6ӯ�jx?�N.Ur�L���ď�/Rt���+R6Y���~��$aw3�+����X褶uّQS�':<����l�%�]ֹ������i:O��z��Jz��ZV+XٟOv�3V��
Q��[qH/=����x*L���ho8�M;�o4d_	��K�L��)�y�e��|Տ�)D`V}W������tx;o�l/��#k(����t�9]z��m�Ϯ�Gz
V}�ƚ�W��v2���O�^v4��/IMe��,'��Ʌa����{ڤ^ڹ��&.�����c*l��Qv_2C��)���Mg�������nA@�3�T��0�C'\��c�-�&�(�{�߀���ω�n�`�/G�f>��8�rT�,؞}�����(ہ��d��qxL�ӎ���A�3���hi45VT/���&���"��Gis�I��sr1���Iy��n=M�qo�jB��o"�����d�r�N�e��נx�e�̭1ꋯB_#�B��Z�e�Q�ר�R��m�y��|4�5UѩP���s[�<U�N0"��3{Ỏ'�u���S-�s[���;���Nm�6Gw��)���;���:Un��)m����X�b�I�򇬉Y�a�B�b1ɝ �壼��Xʽ�k$�5*M�	���f0��r���p���0J�D���b�4G�(�{E�w���R�ѝ(��z�N<�T?�3f�~�m%��OZߦoI�j�0{:���Ug\�R��|Yw'�/�$��z�U�M������ьp�܎q[���8��r��{��kQ��\5�;y8��ٴJ	��v������Ac�YJ�8�F��_x�R3��g��:P��D�fհmO ϥ�����MfE�^k�z�ՙ:?)H���&N��v�j�Q_~� d��dv�su�����P�fи4ca%�XN_T:����^i�݃��6T��͓99�XA�WW�����.��;f�O��YA|��n�d�3�G����#"k:1ǫ�_�.M�#=S����	�S���a5��%`��Q>�\���G
(yu5��R�3¯��/ ۹h����=+pi95Yb>�lL�~
������*R�i$���$���3���:fIc��0�v`�ݡ~��'��J��]6�᱔�z��{��{u<Fb����Y�惺��c����u�ߓU�%Io���A���iYP��mh�?̇�OԴx:Tŏ�u�� �1�����a`\�A)R?n��Ssd����
5��U�TW��}Ȑ���2*.3��i�23W��@O��GQ�%�	�����,d�b��iGa\ϗP����i���M[��
�ם��B�j�ȗ�'5�`4���ꨦ���mP����Ny{�o�CuS�c}B�Am���!#�/E��T1�Y��1|�/ޜ<�dcOzɸ�颺Sd������F+�B1�?H�@�BD�E�I��	���y����'r�sq
��s�q	&|j�F H��Ea���N>�%�~!��6\Cm��2A�S��J@�0K'�t8�Gx�:�v�cמX��+2sA��������������Ӵ����Ԣ��Ģ�����]o�6�}��J��{ؔ��ݦ��$��{C��T�c����P���;~H�\��>5����H��������i�ƀ��2���Z���tA$ę��@�ou;?��OgZ͙��05y�b6(�U��Z�c��ay��z�����M�#ĉ���bDZ�ަ�~��5^1��n�R?@D���W5�q��K|ꏅ���
�?��
<��l<G�2V�lW>�:ګ��6����Ğ����E�%��'W���EZ��2QH�W��U�K)}ݾ
��FKj��CTѯ�	~���Lڳ�dI�,T^-�p�!amc5p�Օ|Lz8bBS_A�ӢV�_K5v0�GC����GX���J��=}��@�k��l�2uՄE��f�4�,爃º;:��M&/��Z���l�������9����;�,�(�
�սU�G�x��,/#~��� x&��.ų��wx�k����҄�B����A���\����o_b�]c�˗6ܭ�h�Z� 
ݜ��
�8����>ts=1�V�Lw#|(�F���ꅃ��J������� 8�1�u�-�.!���Q�r7a�W�����(w�C}��.�І_D3!袱�4�a@3�m� 0�s5Kܑ�~2����!U�A��'�ӂ�Z�"�bh�b�Ob�h�i��KW�\�P�:��-DZ-���W��dZ)n��ˆf��l%������l�T	��M
o3F%���!	W��ke;���癞�sxd����#����*[��
���[Ղ0X��5���ZL0���B��~�ZN0�Z��$n����3�>�
*Lz@W��ӏc��q�����'j�F�(}
����.�^�_���~?$�^v�+2�'��&�M^�<G<3��XN���h���9�A���>�7�r�>%���bw|��	�H[������QW�p�nt��%��˦�#DF�q�"=���AT��Rb ���d�[�#��/I:�4�P�%�`9X��IDW��
�Q3m�j��t���ƗR� �Ĝz���K��.��rC���m�yVPd୊��끼p=�IA��낕��{��܌C��x�M�uw;�u���<���
<�v���!�#<�Xn����ʚV�]�����8�8]���h�;�u���!pȠ'�d0ቜA��ZaS�!����	1�gAz@Ԗ�����Y�E
GE�������c��Β?�0;�3��(�t�yQ2��N�씊�FyhA〒�����s���s*t5�nf�s�ء��2ȆI�R�LX|�P-���ײe�*��S͔�ǞJ���(���q;�WL�֘=yf�|
��.��x���
%��e�Ȅ	��e��刈�d��aݔD�L�跗�QWs��A�"��U=�0#�K�L=��D�]��8
��)�h)��ÛvKQ3�@�_���0�L��4O&zgQLm�Do�<
G��Ӧ��w|;Ьwd����P��x�F����$��o<�q���]/��p'��y�~�s���8��/��ߞB��kVoh|5�:=���[Й��*�>%3�J��|Ew�WC�;5�
�鱼�}#J����N@4���� {��8w�v����'�T�A6LY��F�4���k:S^Xd�R�ۂ/5���4��G#5���
h�.'���H�؋X�!��ԗ�
�$'y8O����I3�!]��[
���c���
e4N��H�ޥ�p�Rs��C��,'��z�Xn���/ e�:B����d�1�"IK�zܞ~{ݐ���ݦ��1�ԭ[��u�5rJ�j-s�@WA)4�{��#��]�B��#�zʁ��L��s��Y�	�m�޲��Y���ߣ�� ��A]8܃`$z�,ɍyv�����A�X$׍}M��˾���@	���8t�g�՛�R�^��
�$��-<
V���92��bp���8�AA��z���R��d���(#��A`8��:���]D)�����S�Y�Z�a�J��_i����(<\gu\{(��Bߦc��'<�ݹ�1�e-�h&�26"���Z;8ʪx�e��wK{A�زI�-�d6?M֩Qą���<M'��2��Z@�����2�8ؗ0�n��<�ŝ�&��:5�V
�Z*��h�ỦƭM��0�nh^�޹9�ډ@qq0{Y��7�6���V���������~�������l�s�3����Q��i8���u�P��Җ]�������4"�[�s���hiP6�>W�i���*K�Ǎ�[����=kW�8���W�|!ɶ�&���I�{�iv��&���asrBb��c�m�!K��o��=w?t�JR�T*��RI5ϸ��[l((����l�zG}�
�b�g�<G���0F���g|��q��o������������7.�����:�>�N�ʹ�|������F��>n� ��dy�s�����N�xFX>��|�H�#���/�Y��P�yx?���TR���+�`:�������<�El��2�&�I�`�!#,��ʚ7�&��Y'��'�1�._W�KC9l�|2��A��T%\ē4�v��8}��+�L��S�Ő*�����Kn~�z�0~9d��$����t<�SW�������oqGʰ���p�����d4>m��?~�����k�y����h�����ܶц�2d�
H��7A��L�#xL�Ws:��~��������@������R�9G+ȫ�+O�X~4^&T�Hg,W�w0�|Eǰ_��#��`Z�V>�%Icz���������q�0��.7���9����l
b�ǃA3ȗ�##ZC�F��&��������x��UG�nE/
�4�ɓc��xG*1����V���ޝ��
�Mё>�\]B�CG>г?��CH��i6�I��ɂª��3�����J۱��Hj�E!��(7�)ez�!��EwS6���/��"�-G_�a�^��1��e/ �h��4[�E�㿏<��ִ"O�;��ã��ٗa&w���N��v���9I�$=���2�=�s) q�0�8^�߫���zTh �S?��1�qA��c;�!��'0n��a^���"����(���
�
���(�#�MX%��K�H��`�.b
(�t�s:��wJ#�8
���&�>�@_���f��P���J��D�v������ ����8��]!�w�3��N�<���^��a�Q���Ӡ�R�߂���`�<[$e���f�jq٤���,,z�K������
��c�M��]��� B��0�t���*Q�<��P�ۄ�p�EA���*���5o�7��zڨd)6�h�?&�i0��|P�x:��U���=�i��?`$�tp򈾒Jp�%�P�B�_J��k*�Ֆ��r�Q�#4B�0�N��"�N؄�D�Q�뉀������E�
��1�0P�R<6��aSp�tEl�@�к���ar��r�dE��Yh����x��\@�$	݋�*�,c�D��
��YV!a�c6=6*UpJ��Y'J��,Pa@9/�,S�Z�=a��$�
2>V!j�L�4����8[ɨN�4�>�i6�I9�A�����,��@�RFQ�l�|�_���H�	>(��z��XU7��7�ڼn?��3ɷ�׬Z��N�((�I ����j�Ak����d
^e��M,����l�M�	�Dl2���
��s�1���1z�vn�ޭ��BYH�\� �u9
�7��n@<d�Psw�3YJzե�VW禂ٛ���J��������F�[U�мl�6G�2��&:iߜ��7㵹&?�0�ݓ8ȣ�S�Q�ê0}�N��ԗ��.杚|Լ���S��j�]v�Ao���e-�s�i
�
}��&$v,��>�q�D��EEF#�LL_�.]ª(��)+��}W\�7�p`���}++
Q�&RV=�	Kʮ�{�]u�u;U�1�b��muÿ��Q�>����fI9�m8쾷�\a�u
��
�ap-�a�@'�����B�a�nq?1ݹA���yϓ���2nS���%��J�߯s�	ޕª���A�o[��
�J!����F���t~T�ρ�w��J�Ze#}S�w\���X��_�r<���� ���چ
�N����g�����������-s�K� "�m�
JnoJ�����@��@�h�+*�Ƞ)�X���������(8�f�t�>
q�$C���U҄�Ӯ��:�bV �K���Γ&v���>_Ǩ��Te.kt��|10&VE����(�A����r;�����{��OnUo� X��e��P��"]�z��h;n�r�Ɠ���P��;
h	�0�`_�}�2p
���kK���W���ۛ�:���V���Oqąj�q4����Bl���_d��Z���Ŧ�yc�od�I���;��$W"3?o-3n���ֹZ�!�"���<�a��>�Q��j�ҵ�J�*-�nS���z�72���gb��y���ۚ,�vqoa�Z�q\<�����BI<�\�
�ω��I�g��K!;	t!���24j�p�nj���*;�iؔ�e.�q2�s���a�9��}��6�=�Se��M����{�wsگ;���^�1���� N�'��G.�=����g�_�9��HxbD��TJ�B0$/E*+֥}�*�,ʡ�a+C)��B,�z�B�M�+�@�x6ϗ9�(?B�U�JE�bp���W��~.L���IW�_�M�j칊"�\SMJQei�c|�d;�b�*^|q��M{���٫��]_W�#��ϛw�a��#�B�+��l�R�*�k5
�v�`���Z�e���&�k��1%L�At����1����Fc�|��Xa�͒'�K��"�|��!u��t���	ۡ۲U����Ol�Z��,��,]޺�l�n���:�HP��>�/�OG�g�~��8�������\:�m�j��3d�'`���᫳��7�<-�=I���sPa����'aQ��t��G��fh%�%IOp"��xwT�d�,R�;��D�_/��{l͢�"�Ba�F���hf
Rk
�p�σz
X|�PA��Xa�J>��7��c׭^�s=9���K�d�.PW���mB�뙎��r@��Y�IO�u�^��|��c�yTC�"���(���H'�Ʈ�-�5x�€�����0�WV�[5Mf(���V���%2x����PS2ڲ2X�2~]
���qyd�5�����)���ij�:b&�
o̕ē�k5�O�i ��4�"�E�Y���
*J�W�l����lq$���|
<�y��lM�X�$QЌ��:�k���Qr�Qbu^;�I��WS^�2�\�x�.#���$�'2�xl둿 U�}�<]�"�Ni���Q�$>�+��MP3�F�n��E�EOiP$���ȇ
��E\��B���+LQ���P��Rv��~g�@�N������*u��OT��
�&��(�6�;���0
�k��{��"b���FE�'"|��'�1;;۩�o���m^��Cl�.����}�z��4DY�HE����Z�6�*)Y=A��IT����tGY�v��b�Z�����Y.֓���Md�#
�i��qu۷o��f���[
ٻ�wK�wвGU2��N�k��4US���v0v��i�7=S�H<T�U���=	�z�߅��e�¡�J}��6�P�r�+MtkG���%w��#:Vs�y)gJ-���r�|���}/���*)4l�@o�V[X�B��B��v��7x
�5֏]��@�1��b ��&[���.u,���s��GC��)������T���E�)\�y�*A�(�g]�y��Łz�.��V��)�g˩Q��,[ߛ2dA.֨y��)��N4���C�vD���oe�yH�Wi�y�b�m�d���x�T�'����դ��X�x�2�<��9'yd_������G�|��]@�o���Ȳ�(5TX#�X���v�J�S:̜�66�c���4��ռ1�ݷnE�0X��|�>�>��ׁ>lN�R�x��p{A���d�
�a&m�,�>��)rͷ��a<Bt�=Q@v�V'��{*n>�)�k��h����I�#AZ�^�Ç@$�9��~�NNU(�A��p8�u�:�M��*/����%��t��5ڝ��V=��L���Y��9䅋B����>�u��'c�
<X�[��>�
vW	��Z6����N�`�l[�V���mr�K950
�96���"����Q���،7���l5B��^ݪ��VB�!o{���)�i緰K?�D��
ӭ~�柋1�O��hZé{�����%��
�d�_���Ѩ�o�={�Jp��,#|� �L7i�{��\L����n�f�Di�Т�"�Od(J��]O�/^�\�?R��.���Y����@�`�V�۷�!��!�����WA��/��V����Gi:^z�iJ���R�'�?,?�W�|���Cz7�f��c7�t�P(��m�٦�{
�'?�O?��@~
�/��@A�G~
���[�����E��SX~��w���:�DP(͓�!���=�=Lzj�nw�%5���g�B�2�W��o>�QJ�,+��M����6��:�K�7'��Q{E��j�����'�z@���e�{i��G{wI����z�L���G��SHW��WHW��_H?0�g��c�U�A��p>�u�/+g%�4#����R�`�
�n�
�n�6p�Ԑ��!2�嗱ئqEWTg��kFxvv$y��];o�0��+2E�M��c*j�:d钠�Q�J+���M[ ��;�ZH2Ȱ��}w��$�X�bMy�X��,�+�3�.�b‹ed�o���sm�-�*0{Sp�BfJ!:�
i�-H'�51�GR�B�B��������"�JKe(�I)̢vU��3�.�����yE�hU��!�0��S�R��ご:����]e��*��*�U<�2"H���	�Q�R���P"�N���j��6�6
�b�*mb��m�q���'c��T�U+�I�IA� :��F1>���=яH�������w�����mA㭼�!<��s�㵦:&6��U��`5�毵
5
�`5A\��<H��= ��΄Z~��d<���n̜ީ74�5�b���_����@
`��o|�=~�q����t��߮�˝
q�fה�fohl$w;���I�`x�����wP�a�نa1�I11���Ŝ�0am�e{u�
����Y%����4��L�}zZ� ��\���W8}�`G�r՟��ܻ���N?&�&:�vO�9qL�<F	a��1|�M�)���j��Ԋ�����;������~O'����x��ez�{�q� ��yp{7��pϭk�n����H��Am:��LI@��%�.�uO��-e_ҷ����o֕�ٔ����#��?�Q*����kO9�,ҩ	b�]�	����
�&ܝT�hK��"�
q ���~��_���S�l�����؞�@ܡoF"�]�.է�}�����i�^j+�Mo���&O�l���sx���Z��݀A�zm�T�{9�&���k��s1��4�x��)��H1
�DY��Y�?�:P+�?(���%�����_„ L�K؟��~�Y��}�
5��'T�^�L������(,��U�w�v�!E�9ę�+�8�Ĕ�T��2����	of��&<̽�&`p����`>S�ӷm�eD��y�@�TUN;$��H�ы�9~9�
ĩ��Vy �QZ	�"-��d�(�g� VXZD4�eĠ"㟐`sp�mf�A��x:�
nA�X[������`P���=J�`0�-ʾ*&!��Gܷ,�����H���@y�vdh��I�QG�	{0�`������U��	�x�+���'Ye�}#�ѕ�C�:��e�nxMK}��e[��V/��|/.�(��>�1s*��ه_�[P{�D5l�/����mOVƦ1�(�t��=20e
$�5t#�?��	3�c�L�!�����A~��r&�>g�R��	���ȝV�Lx>,�Rx�4*��[b�PU/�)�@Es�o�j��o�|j��IJ��ka�:���4��z�Z)�//kJ�`�ZD"�"q�R^X�x�W�A�+P��#����YD�s
#ރ䥣�:�T�=o��w7�O\L
�z"�0�d_�m��N��L[i�C3��@��j�8'�j��T�b2S��[�XZ:�w��U�/=�
����T� ?���T�Q�4�u��b����͠><�gp���*r����W#-a��*�~>0�պ&�R��m���"z����py\Η�|�N�@0b݄�⎠�'�Ԗ1յȵxU���찱��vI͊�� ����F6��
���Ժ= �U���3̋��yafV��(G^����ِ9*��g�
־QmʋH��լ�PK�M���H!Z�����?��(Q��C6�;su���%%f'RI�E��a��^�[��$�
���L��{j=ua�2JEs����jɢ<����Jlo�p�n����|_����mY�f��%Y�CX�c8t�G{J��#
����Pc�T��D��웠L�����):�����
wڢoJ�Bjb��j��>�d0�a��@#ԭf��0���C`$"�%E0��?�����Rԍ��?��������oS%o/4��>m�� �j1�k��c����Q?n�}Uˠ�F8Z5w����-��Z-���ASml��7l���5a�ů#���!6�����ٚE���2�
*���u]A8���%�o�.�N�R�"����W�̞��/�\^�{�O���6�(o���u#�L�^��w�|~�5s�ЂK秢��њ#ZsQc����
�u�����E�R�8��&+D���{�B��4�&�}���2��9��ɻ�`t�7�����О�-�go^�S��L�z!u,����X�Oʹ��'c�wg��$�NK8e�&�n,�6�H�az窙fK�F%��B�AĈ��*������:I�Ngl>�q5�&��x��C/Ͱ��rT��:�>�^^�թ�R�e���3)���~�H^��[�q��'�{Ĺ���_d�	3��N@(�l�,��5:(�a_Z�i>U�Ǣ�Cp@-qw��7l�!�ב͔��/���ZATœC���Htp��xA�Bj�?�����̒�[᱅�Y��%���N��3�m��@ȃ�m�i�p�X�j�zIqM
Va��ܔx�P6<Á�
d$�z��QP�C������`��BY6=0!�/Aj�6b�?�6kp�����]�o�6�_���i��3mp>����v
Aa(��	Ulò�Y���G�H����}�C���㧎ǻ�AmmH)�E���+jm	/�o]$�ܽ�P�-�)AyV�5�]�Z{b:jO/?�������q%�jo;�]ˣ(����`O0�q�K�Ũz�g����ঃ��ȋO��\��Y�
��5ˮ$���c@c@��z��=�T�C�a��6..��ge)��uU������'Y�E��s"���f�2�.>.��y���zP
����E����<fG�^�@o��柳Ղ��}�6�
x�7Lz�!���V��5F_���4���|���Ⰱ��Kp�k7_�A��1 �ad��G%I��:�Vj'��"-�/�ݤ����yEEz�7on:���G�TzWí�+ɝ?�}|��9���.h�S���ӡ�I�'Z5(�]
�1�������?��&�n�:\i�
G���c��fS����T�С$$�
II{��^*�Ob�%
�	���KPj3�)�x��j�ʃ�B��s��o��]�Сt�ٕ�lE�ƥ����+t5F�=i��n���0�u�����$��k�:�A��h=T��T\�Y�r�p�SE��yk�{�w1��w;��`���!���t�N�����Jh䚯��D�宵QPh!�@&���ݝ
k���7ܑw����d���m�y��Gh˨�bKu�M|'�d>/�r��.ǒ����.)G��(f�J^>#���R5Y��ݕS��s=̴�|�3�����[���ߍS)<�M����jU�3X�Mogߓ[hoGFkT�NM��P��1�kx@��gZ)V�*)�YR
��a�PW�.��h��n3u�$��F*qьT�"�p�5�
�ťt��B�.)���g؛}��k>B��Ef�6Y,��dT�DK��"�\q1^���ZN�|�n~6���)��z�k����<��0�a�?�k{3�ӦmӔoOo�S�״�|��f_n�,l��j�-U5��3��{�3;��0�ּj���O�2U��g}�!W�0+W����Q����"1Q��Ir��䣤u��E
B�	ϵ��K4/�2�c0��L��yhGTbA���)��1pqgA�t(#��'���*ܦ�
s����L��]�6?2��r\����ջ����/����Ͻ�M��V�����6tvp�4~e�
u}J���u���V�|�7z-�;H˞�w���BA�%��.��]B�=[���{�K����
gV���aI{�7�,U�2���ZV��Vj`$�+�)�Wn�����ҕ�eu���w/Nz'��)��I,��E�@��ٹ,ķE���U�`܈S��t��t�(]v:��UTV�޻��=y
_�_$e�8���}�����&|E�!"���HU~�*�N��v�|`�5G��l����,��F�1IHai-�W\�"|9e�ɰ��8��pC�	֜,Y6��h��>3� ��R!��L��ST��Ə�Z�8��9\��{i��7�USh�n#�*�AZ?��j��?�Z{T�.�i?/���DrZF�8":N���'�"<¥�O�u�f��f��v^2e���_�Fw�m��P���F�;�N1�G�.٘��E{���4�S'1C6�<������ݗ��H�<���v"�������{�Z�!>�GR�@Tt!q�c7Ll�i��ҼQ��PCO�(���n�gE|�;��mU�ȑ�i*����[��[ϨU��9�R��{QM
�����d�w�V�r���м?��K,Ϻ��Sj���V��A��5�)K��f�����kq���i�
]�	@�f�O1i�|.%��AȌ��o���K�:A�
X\�4뀄~�V]�ſ&��-���H�ω]Y��k{��%�L���x>�"��|b�U�O�������tt68?��G��$z�A� �ɤ�;3[�+�ɼ�R�j��O���֗WhWY!6ZJH�x/}h�m'��(����bk���T	��/��˼(-�U7���ủ;ɓ���=n�T�?�S�N�!��2tć���*}t|v�?��
�G��d�t:�{2�� ����4X�a��m�4�e��CB���	��O�����hpyq�܎d���V�݉��(���m�����g{��*�D�Τ����4f�=�y4߀�4��k����8a�[o������ޖ��7�U���?�it� �?O�9��������I|�����]�n���#A2�>��_�eJ���Ө�8��Y"?��_d����J4�^:�n#��)�]�Mx�/���oM3�5�\�@ꦔ����1i3��k�%�߶!�t@�-Tc���7reƊ��">�'�k��u�J���WqlU�W-�o��d�ݚvt��F������-
B�v����YO��j�����:'Yy#2���FԮ��2��0H$�<p:������3��O �I�m�N�2h��tk�ܐ���lh�c^�30�Y.��A#�Vq�r5��j����B�/e�_X)���4�1�=	�E���g�3��Q���HN��^:�)��-�������l9���"�~�qi�׌�����hy�j�p�	"j{.	r����e��:l!Ęyچ@/�~�>�5]�|���+�N2�#OqUdt/_c���X%���]Ʈ8]��%z��?T"�:��k[�;-����kk9�$P�t��7l��4G!IC�Ƥ��\�9�����~��v4�F��G��)��F�Ѽ5�d,m�kF��RKJK�Δ��T����:�
���cq�2��f,��xw�v?Y�����ŷ��|6F+���)��#����=�l����i�C�->�_n/�U����e�7Ȋ�����]�-���K�q1��}2��f����J�*�zm��y���y���<��e�*zk�2O-��m+_:�����O����8-OL	��,og�ߧ*�5~�xb��@��4��>��M>i�|4[�5�h��L�Ija��lGHM<��7���,
,�ɰ4����Ї��o&�}&t�QWdg��ny�?�i��S���o�pV]��`�i	�pX$���+�~��۝���|6���������ILW|l9���W��EX�ݗGt_�r�,��w:��ן��o�^o2�1ǿ�y�X�߿�;��.�<�g;L��-
��[x���5_G��3/�������ռL��j1�ʙ�+L�k�>Uq�Zk�k�*���˻OpU`���L~;�������h�7��c�������-��dtK��S.��Uu�;�۞���|���	�@�L����r��0��v��3|.��i�a}I����A�nj�ǘ9��f���14�Z�8��M]�ۀ���-TP�R8>=�R%ؕ�y[X!��]*�_�`E܉,�S�Q���l�sy*��V8��7�p7�;��r�ɘ�i��2�ٛ9
��A�i=w?S�1�n׀D �0��>��q(Yw�(/C��f�U�{�Wf<���&]��dz�$TU��~�L�d#O��
9����9���Q�6B�i#�4� ��U��b�G#����#�t��ճ'�V��%����6+�����t��	)�~E-u�traI�:�*/�Nlx�@�/��0���)���1��K�ظȼ(Q0q8���J�����&�T���Լ^Y�����
��X�E
�dQ�ڌ�?�{��Eg0E��e�X�A���t�r1��W�Z8�
��6�yY�a�ݠJͧ�-��0�o�֬]L��c�K���v�Z��N|���s�]�'�"|ހ�փn���|��y+�OZ�:'0��&1�,�j�'��ؖh3M�%�E�0ov�ySY�_��C���0���q"G�b�����:^��8��t�p7���6d7u|@�����^xnA���.�	Ubl��FJ(B_���HFI9t�M�X�C�	|d�TK�Dw���(4�H��gWƒ/lT;�&�(��V�*B��b��i�u�R�̅f��o��@�	�ϹR/��^:�;)� 9������Qއ�ටX8�:�^�Mް)�2���m}��������j����j�8����b��I�Ҳ�T<�'��4j�!U�ۧ���<f��T���f)R��f.SINQ�V�P1������ti�p2���/�x=�2��oǦ��$�B?C���x��(�54
�_����jJ�c�mi����dY^�j�5��K��H=,�Z��J�t9���=�[���̷s[�����!���z!T-�oS֬P�j�P�F���
�q�j맙����р7e\
#�$xޤ`v��}�V�쓐
M5Eƍib,��Z@�XI�&��OC: Z'8-XX`!S������Ŝ�Q�*�V��f2�uK�1m�lE
{ڂ39Re�`q��~�����bO�Z��F� l�T!L--d��M�)��F��X�8���j���m�큰�� FD��A(D�3xb��zC�_e�m��18n������+?,�'OY�I����y�I��A�����NBy(�;��0�뎩�Q�ޖ�Ѵ
�t�7{��?��c:����G����@h���nUl�:<�k�)-�<�ز�kl��z3�&p�R*�6ܥ��IQ�,\�l��t�{#.����v�<��Xp#'�x�0�|�P*��͍�E׏5�
��y[��n�#��)������]QO� �+<j���W�C�2�g�v&>5f6n��e5K�B)�rLyk������<���3�3�
��&��MM~�=
�(0���a(wC��izs��_K�!��f[y�\/m����`/ف�	���0� \�����V� ��j:�B�d�P.Z�,~������M5���avt<��׵8`��D�𒧌.�Q|�4x��B/�uDm��ѥ
����S���?���cK@*�p�[��Dᔭb�dBQy���1+�xܒN�+s�3y�B;��
e��*���f)K��\�x%j����@H�y�����s��U�>�8~x%y�-�m�����L��a�wu����U�?U���Yh>��~ک#�N����Jqa���
��'40��s������D��`j��m�cwNJ��dܓ$��KD���XIHwĊ���:� �+����K�4kF����D��,�C�K��狍���4ھZ�M���l�	I�D��,� �	�$��̐�B�G8���춎G�	]A���Y��HQ���ގz6xWд��̳�\&/�#�!X�E�*X��HWyQf	
���0X>����xE
�N&��ߵ��W��O�|�|����]o�6콿"}i���6�-�;�bֵE�m���4nk\gv����O�H�����
����(J�hY$�ѹ��J��5g3���3�d�8���K�j#y��‹�,�a��|6�U�1�!�K���IaX���iR��ę��'�m'Wcn�}���4�;�s���!�sw=k��+k�}Z�t��qX�p��(����s�#��S#�L�b3B�ߢ�n �Y%�����sjofk,���J��<~�tHiW��R��
R>��� ���M���m�x����
D�A|_
‰�9�3A�3+��}����u1�~5FW�nd�x}�^at�����ߓw�߫�4������ۛkU�k���p��.@Ᏻ�4���f��=g7O�!(fwp��#jК�[��7��������q��y�mo����-��<-+�{8XN��/�ξ	��?j��	��c=�k���4Z�1'��c@
�zw/g�]����b��lvF�1lx�&���z�mq���m7|S��y�bi#��n���#ǖ2&
ĺ�`�p�.ms(���դ|���B��0�C��E��UU#p��(���^�N��`&������dI�f�:�|ɤQ�L�r�@��zjvP`��rI&���w�u�!� ��2h��i]�,}:>���<(� ��.��B�:�.�������'Ud�ZR���`���h�a
��M�'D>:r~��j�������P49�&�
5�������SD��
K���P�j��IE��T�<�Ӭ'w�t^Ӑ��X<[�~t�r��li�9�i��\8��y`L�:`��F�C�m�&��TD�*Zs9�<�3����ؠQ�����:R����K`x��	�
�Z�k����?
��#~�g��_!�W�m���Е�f*�:���w�ҥ�Z��Rc��LVQ=㷌�_�1\��\*ư��G�`s�
���I��IGv����`#��qo�M��ͣ��0�0j4=�49`�s~�$���ʷ��5��@!p���̖,p��'�3���C���.��XY��wRg���~���Y����dX�DŽ{q�i[�M8H�Ko�Yw�ݜH�wB���A��y�r�^�ܭ^Dmm���8�l��Z�<�h5P54�Uc˪z\O�H���z�L�����h�T���-�PGz�vG�T�f��kL�I�9��ZW$1?Q2N�Ξ�K�X}�
��"�k=�H��̦%�5��ܷ)y)7*�ZmԈe��No�2��/i��;G̀ɝ�n��9gg�M�S�xCg��90.��+8O�q`�I.��zG89ɭ��!��N
|�h��l��e���-���Q�j����IL��	�7Tg��q�i)�Ob͓��]��-`F�~n[X��Ѧ�B��<�<�!�'�=n��I��-��N�v�ŒM�O����������¶pc�O�9��PK��^�m��Y����֛A�&Kb�/vKtT���6#1\�(����5B+y�C��f�t��V"ٸ}M9�/�B�|5�O��ze�S7���
J���1��9��>u��r2�U�>�K&�x�2&���@ƞz���t�w�D�0|����1��h�L�.���+�U+4�l�X++>�{��'[�?��q�~���}Z}�Π�/e���(qsGPu�"��~7۽�i��r���[筨��nv�!Gj�����#娇��E١�E�\lY)�ڜs�>�Q�?�A/�G`�ʫ�X��U��%O���O�����n�8�=_��mTktw��AV�Ԩby-�� (�Vc���F�_�A�� X �Drΐ�cF��%���#��|b�����{���nL�
�����������9/�`�m�7�{�������͛�: w=(��_��_�nGۦ�M�Z'��;Laҥgk�U~\�����A��qkz����"ˣ�0��̀�������P�
�H�m
[����)��d/�N�eE�Q�<�{�����ad�چ�4�z����.9����]�n�Cr0��V�2>��+�}S&���Ơ�M e��i[HT�$� ��!�e��S^B��Xm�JA-��y����*���2�zv0�M�$��E�/��5~��n
��ʾ��`]��φ9�Ҽ׹c����3zD0rt^�A�"�lib`ql��E�4S,�>�q�+Ը���XpF��5~�	�u�g����R9�T��5�X?6( ry�/���֖�c_0oY?T��C��(<�~�	%[�����h������>^W���K�7_CP�ɬټ�0���_�t䪾.��=<���@
tTٸ]g��gqA8�����\�Q;B �r`�pC���9C}b�K�8�!]�N�S�_swe~�?Dz��#�����:+mR#�AY/�'o�����|3y��I�F���z�y�,��<�]���H8�����A�ӫh%�b��3Y��HV~0K/�hꇪl'QxW~���O�?���:����H�Ӆw�QF_f�t���Y���13��%��R���e@������	�$�d��)�(��2��4ԑ$���ʟ/b����b���-��U�-#��[D���fJ�b�?N�vto��c
�WY�=�H�����y^�Z(���7���7�q�.��:+�qy-S��e
K��M��	���@��ah�Ajdo���F$
s\�DY�P���Fyu$7Bx��衅���1�z'ޫ��;�HV�Mw�y��o	1r�=��ϛ����A��Bq��Ka`*a��X�<��������񗚭��:��Q[��D�c=U�����Vz{�*17��;�j�NL�xV��Qc@V8���rQ��K���~lwOR=�@����	1j����]�]���3��ͩ�a�)��RfH�ׇJ��+ݚ��^�y0ɖ��ɋ¯j�k2z�NV��?����r��=_AR[⁵��†�r����)/E�f�P��b���W}���L��дZ=��M��)�>
:"
�/�P�fF�x�N>�k3F
iFB��:e`D<�D�Dc)xP��4Q�E��C��,��R���	S��eR�㵝��ܰ�A�H1z�yT�M#E��e�Ͷ���?M�v�&�(_l����W��f&IQ��ٛڮ�@Z��tvb��m�	SoFCe+��4�X��B��X���8��0�=p�R~�"�%IAӒ֝j��^���[�`���ř���1l�1D�Eh[l����v���=`���>Vґ~�w���aD�G��K�@���0�'�d�b����d���aewh��PN���;
%����KW��dB������jˆ^dq�Q��qQʤ�@*(Ӣ��H��^P��t��x��\���z>=%��xB]O�H�����8A:L�����h31յ�IVrw]Bz���b���I֚����D����m�St��y%��bT�"��&�D9��.�Q���$�����1��^l���ik��mه%���-�5��ۉ#�}E2�?� �����k�H�M�Tb�F��=�p5I8M�
>$�pY�M
�wRe�$�%J(u�a>�f�SPr�i�B�Z(�p@�-:G0�,ս���	�Cݪ̗�3S߭��+ֻ���,c<�p�#o}A��e���A����#��l:���G�J�cO�UV���R$�_~��84qҠ����(L�WߑA�}�c��ȓE�߿ߚD��4��?@P\l��ڣ�C�60R�m���qd��-�J�kSk�V���:�Z!���x�_�|B1=�o�$ys���C�&���l�����Γ�g��i��A��wP\Z�5)7".����5<�R,,_hueڏ?�J��d}�}Nfi|3]��|������
��N�Xe�*lL��".��9;(ř�ꊱ%�)0�d���|T�n���T�k�ŀ�,�`'� ,">N̚����އ�m���W������R������X�>6%0��_]���VA��z�c�BT+���|�.~ȫ��{K�;�Za�
��!}��3}�֡ob3�?�0O]'��sc��k�$���3?�Ӯ����!���iI��i��Aq̖��ǡ�_�����������v[4�OO������u�e��(Bx��T������l2��d�m�*s���~������y�I_�*ְP�x��ڨv��}o�T�q����i��>Dc�=ղ�rǶ��`�g�g��"*k��:����T'
�_����V���Ԯc>�|��G{)��^ox�m/;�5j����vN��v����T��4ʳ|^��"�:*Ћ�[�N�a������V��_E�U˃�v�O�~:�٦S�ݘi��bԁ@�v�݂֧ذ�0�Oފ�8����ԁ���D/
�w�\���ޑj�6i���%wb��¶�NƝ)g)��� ��k1���	��������/?��M�TCӍ�q��m�m�;J��r=�����<l^{re�z�w�gjֻ=�}�=��N-������<(;+�k ���G�Lv�V�g�:RF&�S>����L.�nvQ�u	]�hi�i������QwBw3ᤩ����2�ؖђ���'#x�t�x��9�������?��L�p+�瑌Up=�}Q�e�+�m����ѐ�۫n����������t��Γ	$2�gN0�3����S�|�
��2��O��������@^B����:D����4��N4�Nhѹm�d�3��<�������=��vU�"��f�j'|�<���kr��ҧ�{��,��i����z�I��_�1��t �	��_�P�#�����]F����b���0���?r��aH�K?e�)�(��?��٨�j�#Ӎ�6I����ċ�%n���(������c�����xR���`��K��oO�� T��d�h�l*!.�U���έy��sK�hz[�A�6�ݵL�Y���X�HRpBw@Mۥ�9�jR��Ft9�͂�K�a䟯�Z�Pg��c�������|V�l��B\���S�ݻhj��ǭ`emR�L�<��i|O8b37����z"w��"f�ɒZYe<Z�^�'��O�bZ�� �˱�,�Ġ�%�o��b�{L���\�Ua(V��r��9�*���
	��.W�s���![<��`P4�|�������:��Ѓd�
O�Qf=[���^_i��*ׂSR��7Q�l5�,�@3�F܎SmY&5�~"�\����$J��5*
�!*��zkl%�@�9Z��ړ�Ta��F�䦥��Y������4�9?�pq���yʘX�������s�p7�A�h<�̭A$Zv�DŽ��$�^)�c��b��r9�˵�B3i�…����Db�|�9�XN7F�&����f�E]}È�A���*	��)X'ɨĒ�Ժ��K�4�~�u�8��o�z68�9}e�OaVN��S]����;�E�L�X��2b��H=���٢$��B�⤙,z[�<�`ar�۰R�{�(�A3D��E��O"��T���6F��;�<��CSR8���d��&���Zs����b�+2�Էc�Pp8<O��C�jZx��4K9.n�PɫHh��ޘ��
��p�Sc\y����T���U��(7bޤzӫ�5?��u'J{珞%���G[?����t��)��֮Ārn����~��56�=���E��9�>=�5�6%��c���JY�d�`J%x�"�6���M�)��@Zy��u2���.K��G�G���|���%�֮ğ< ]h��.�[�N�jwN��6���fqW�:va[��n�;�q^j�p����y���(_.&�Ee

�ef��N��z�i:�����Ⱥ�˧�d��z�8��-\)\��!�h��&��|���x��s��Z�:�wݳ�
��ɗ����X��R
iw*u�o�P+�`p[�o���]�n� ~�lR�=@��z�aʥR�^"�F
j�V�Y5��g���٩Jq����c�R�8��q ��	<za��.��V,<��g��ч�{W�����w��w�ёl�[
L�m
z#�5��=���bvENZ0r�?6���J���a�V�A��m�"���G$@殲?�O!B=��}����Ζw���`}#RF�ʎ��BQQd�����+h򋯝�U���̊.�]�g�+`��ۗ�G�Z
����\�)�F�,0���b��:n��k��r����if2��N�.�P޴�Gx�	��r��ҩS��f�YK}Hj�ʊy���g��Y}�+}��C��t���,\�-uV�o��x#�V.�u)�eDD��F��ko��;Ҙ縿�%y��Q؄���J�	�^b��Е�5 <��v�l/�ݿ
��� �nDp����o,�Xg,���[�#<{Ӽ9��H�,�ֻ���).��/����:)���]�n�0��)�K�!vО7�X`��]�]z��@tNP9݀��'�"E�9E�a=5�H�2�Y)�]�{�!ӆ㶳���>�L��
�`�2�^��D$]'T$S̲bz��ޟ6�0Y0=U!
|+?��՗���x8��|9�o*b��v}s���r�#�ζr�.��Y���ʻ���'�����J�<��}>V"�������%�J1��K�?t�~-,1�S��)3έN����c�
fW���
�e!�C�	#xz���O�3�w�)ꗄg��3��%r2	⇊�s� ���%�?��B�*�K
��&�Nt�#�����LF�_9"�FkL���磂�A�H*.��D��Z�{���0�H���Z�ʈ<ԃ�(��{�DE��Fx�!�a�ZZ;�]̌�N�)�
iR5^��H�6�]���:��WcE��q0D+N�h�X����;G%��jv����I��F3���#އ�qc͐8;�j��ܼ��.Z�x���?�*#���}�������lY�]"S0w�93�����r�B��6QfK�H ��u?�hC��z�`u]N7�E-��aSv�t��/�e�tn�OOz�J�Cfg�Y�0��[8�J�_��`q�=\\��pw��=�Q���8OFD�s�-L*f�����i��S�a믔�N����j�&����B����I�P�4ʋ�,NN�*v�i-��N�4����(��f@�D|��� ���3b)SQSu��
�2���<�R���B�� �”��$5=D�Xd�}��x9E�șD�8�q4+�|�s�#��yt��>�O�*b)�@T��@���*�����=]W;��
��K�M�m�t昏d�K �s�n&�qp������������Zj�!w�>�K��(��RU�>�M��B���>��V�v��������-�zA�)ٖ��p(��^����Z��3����L4/�|#���6^��m���*q�o��/hi�S�+��h���忂�Y�Ѭ�8�k�N;wb��r
�I2�Qq6�{���Zw�fkV�笟���rJ���+�+K�S�P��цQm���L�|�67mp��]��}���
�vcg�"}�.�u�Y�p:����Ϝ)���A�`<��r��%3�:3��b�r{@%��)ֽ����b:O��n�񣫭�__��?y4.V�?Tqj�ߎg�O��N��e��J�)ic#m�;+��>�HS�
�Ґ��?�"��-���`��2�R�7(�f����F���G�G&��.<�+��$��	��%JQzRLQ_��"=��_i��;�b�_�*��G@b�NTR��?(0�0|I|�#��4���EZ4J(2
)����!~�Bw� S�8IF�?��K���l!Akb#1�F8�8���)�Ʀ�').����—v�#�E:�O���
L�=������>�i��Lp����S�Z=��s�ӥ��B��&���aw[�Do4x�͋o%&�Q/�&Hh
+?�iM֟��	~��&��T�?�&pd�2�5�9����+�D�<n8(�	C�a��
��uuU����k#
~�.&� �k%��y
��t�R`��>/I��b����tbf�^�7�p��p%v�>�0����l(�'�ĸ��{���W�`b#�	6��	2�9�aPG�#��bJ{��A�����P\�
���`O~��F����/�I����zb2���$Ӵ�,"�;���;�~B��W�g��K?1�V�q�"2�񙌁�{��3�sn5Rђ�9-���0[5��(5-�&0�g��5��c�W��N��b�\P�|��\���<�5�@���/����l��0`�9<���.J�aYD{s�o}�����*-MPҪ��tWwb��8)�p\�Oa�`==�g*{�Nx��Kq��'P6��'u�~	�[5��o�wB!Dle���଎���V���G�,����1�s�������D�:*@�kz��o���C�A�#s�/
��̈́�ꮮ{q�	���ѭ�3�.��t������d*]�Y	�V�ϖ�Ъ��o���Q�_�o��:�b�ۣ̽}��v��� 9uGT7n��ZQU\}�.�S1n�J=#YK��$���	cB��=�k�X���ElPgg�������q��ǽ�M�����	��ٵY5�+㉝x7��m -���Y���x��hn��6!*�w��@��� �6E	��5b��⍊��G������X24E����W�J�2���T�$�z�?<l��b��u��������*iۊ�`�
�4�7�V�ɬ�p�+N*�;_}JeHӬ�i�u�y`9:�.ޚ��\��`���Vxf��۬ڠ2Bӈ��) �۱~�.�Q�!��y�칮�B�-8�e�J�H�kPsjK��#a9*���dQȧov�/�?�w��cH�?�Up���$t%o��!f(��4�R߃g�!	���a�ط��4�럵�X/��a���
n�n��4�����~�ݴ�2W�[��zn����Y����WO�ϣ�C>�t��p����o�aF��b0ci�����'ĿZu�,�)
s:ClJ�
*�
}Z�
I�V�O�^O
�)�@�#��p��Ma�!����\6 ]:ĊD�	v�cY�ƚ�#�Aɛ 0�W��M�(9�v+KN+���z+�z��:�1V�^N���zk�VV��dž���(q{@����e8�~��.�W��[��l��,r�^\7�b���O
;�����e����w���ާݢ��.˱�b����p�m���ܤ(� 7��%���C����֢�H�#e$O<�b�3���cd�g�QR���Z�p�{��%G��E��۫�Dr�R$q�T]!��I��S��:u�gs�'�5���䟥H�E�
 a���`��ȅO�`�6r�.�%W����
�p�a9����KlC��6D��CA�������[Z���(��U�xu��M��ũ=q�2F�	J�-k]�RZ��l��0F"x���Y�]�'�	1:��M�t�'ɸ��d������U����L$Sb1HK@��ZZ[-N�\-Ʒ 
#]���\��ɏ�-d&����xGp��G�<�j�~Z�.��QG�r�V�g�	x7����S5�^ԵV��/+�>ugoYkIpr3-J\V�|�EL'Z�d5
���#DΈ��$��g��4"Z�{!�GjYZ��(�l�o�,��!ٻR�Y�Q��D�������JDG�5�0ȲGvE�F3/��J�ux�4x8J���j���0��������\��|�iz�&!�up�'MA��w�rwE��?�r�l�٭����B�lr��v���Ee�a�Q�L-�����n�Oa�)��(�w�J�~�O	Ӯ��I1 ��2��Zi��F���V�1�ފh�[`����!�����>��@߸ϟ?kLN "+�q�ˣ�֔`���:OcR
���q�	�\[[}�"G��+րIh��"�l�j��2�:�B�:��.�TC�����i	����n�����ia�+{vu'�`U!�%�v�SM$���o�=�*x�|	���c��d����W����<���k����O����6sFMjy$y1�_�y^���/5�V�p�����&�R0��o���Q�;�s��֟��u��})s�7��q$)��k.hD��3Hh9��Z~^w
����}|�G}X!q9��D[1�z�,�iNͪ)�Um
��^���QyJqw��O�&��=��~�K�s�^��JG(�V{�����r�����t��3�7Z���iT�o6}e'�3Y�n
�S���y��ZyN�g��yLǨb��`6[�g��pp�]�X��O�1Fj�}�/�4=
�]���m}E�Y����?ܦ�ҽ���q>���0�}��M�s"ܰ�Yj d�V�7Y��w�ټ�,+�d��ݻ�N	y|'Uy	�G�*�I����U��|N�MN8y�g�HpKB)�,�h���ۉ��x�+�����L}/���7�w���#<MgOb�,T���Eto/�d
̀<�)CdVN��r"b�&���d�t�?������������I�Y�V�667�ݻ���b&�c���-�q�h��9v�>�a9�@���T�B�y �0��4=k���a����l�@;h_
QH_wU�o�n}٨��v�lM��QB�StЩ�E��U
]s�^'¹�e���_��R���q�]P���g��pR�
�W��7:�.0^�:�Sq�EB�_7��r�c���q���O����)5R'YAq�O�m�7���_�O�c�,
��":r��� h`��@��k˧�)�k��ɡy�ho:�A�0L!H�&݇We�Rp���+w<"��,(&�=а#�7�Z��!�}e�`$�/*3��2ʩ��JүYobḨX0�ԌZ2�FyL׻���\���<f�!�ah(��&��v69�b./T���/�#�A9�FmI�4�>�v�R��g	(��LA��v��6�����F)��я+�̟��Oa����K�s�>f�9�vC�0�
��ܑ�1�a�%m��d��g<fŠ�׶��=�}M�������^��]��Uz���8e������)%�}BDX���V �K	�����b���~�w�W��]
�e�v���C_0�[U8�ƽY�t��gE��ʭ�rv>�+7�=ߐd֭�Xb*p!ux�v5vy�u��Y�A�=�����o��m���ʮ�b+/
.���)�
��w��:��6Vs���=�ox�ק�Φ`JN�	͌K�	�pȘW����q��]�[��0o5�t_{�v�x�w?ᩝ���p�v>���[9@K���N��f|��a/�X$�C���s���wij8p
��L
Zn;�k{�g��6�!L:h��۞�XZU�o�`�j��2����)/����^g ��bW�+�m|�&~���A�Z���ºڹI�W��D8�;X�l$c�f��]�WWB��=��cl�\,�I�86��G��l���7,w�np����u,�cSw2�
��Z�',*��Zl������:Xs[�_�S�j����b�1,��������)C�_9c/Thx��6�P�uy��W�.S�aXG5�'�:�y�δd��U��zǣǫf�%aW�/?���MV���d��<�+���Z�>��Wx5�А�{��A��� ���F��e���V7��m�t��j�b���;?"Ԑo�:
�ʉ��_�`�*y:��n�
%m<��6���w�k-�~C��6l(����
vO�h�ha�����2�>�Em�����d�%��ۀf+�Fq`����z#�ۛ��+�F�ܣO<a#2F�ХG�ӫ�Ƌ���p5J�-\�8N�Uj��J���h���"Z+~:��P����b�W��{����*���d�(~b����Y�PA�,�a�>�y�"v�5��]��!�"�Ʈ�X�S)�v��1�@��
�/�-ɎA�U#��ߚ�3�o��	��5�xϰ�~a��q�2
��L�lm8g�v2��)N��ҿk-��?ĩ��_��(���{¤l�1�(����]Y��X����k���nd�I���ty�j����=�N�zE�=K܀����M����75��ܽzd�x0���R	���_�c�pRY!?�B@	������|���m��s[���R�j�%��-�8�z�[��UD.�ަ �mi#ݲ�����C�z
����xy�w�sF|)�{�t���-!f!�]�2'	r��o�����ᙝ~�;h���*]x����+�?�!��Y9�5�=�<O#x�����ن��!8 N���>�?��A��V�@���&ESkC����Ih#V����j�Jn��j�����ٖ�H�j��3�����b����˧�_�������fe~���B��_�?�?�-{˕�b͎
�(�
~�C�0�'��� �����t����|���jE���F����,(L�m�xeb{RAC�헜�e������0�-c>r&~��'���9�����K��%�x��maFawX]�B��ɭ�i�����p-�.� ��J�X���+�������A
���j��}�{t�=�uOP�*�i�&Bt"Y8)QLR	J�HOFe���!��*���uT����f�U�ӿ>��vVu-��'暦v]�QdVэ6��5��(�%j�����߈ωƶXA�������O|�C��9�qB]Y��Ί�a\� f��]�EM4.S-���OA`��5����^+sTy������~~\k@���[�֝I,���m-l��t5�b�'5%�z���fk3	{��o�"�z�Z����t�ɖQ�֕�2���kM�ؕK��MC�H��F0sv��4�H�<j%��4���^Ɍ|���jq2)hീT�IAxiʐW�fD��=~�cfvKL�a��Op�	�e)MC�b�|�f��'#�&r>��(f�=y��:�3��4Vc�ξ�9l��$���x�]��^ �"��M�#T@i�ۺ�ˆ�����,�z��#��*4	}��F"��N��ad�UƔ����vm:ZW�>�ϊ�c��%������w.��wI��M0in#*�ͦ��f�˪����%`�rظO��&��L
9u��Vc芼1���
hZ�.�5[�@Ά�%����TW���K~̿T~�j��'�=mtI�~g��o����Z�����t/h�j_����c��9�Iyf�DpVd��Y�N��&�$Z�b���ί7�R˅[o�ȓ�E<�I�E>Q�>����r�E;A�v	k&\<�2!���=��E uOlX�����PG~-�H�5��ڙB��~�4���kh������@�5�?e��RO����O4m�=��[z���!B�7�X�d�5{;��$ca�ί\+��;��#�L05�a�����zHdXH�:�	�|-na�
b��GS�S��/�Jb]4�D����A���N'��^ٚ��"]�$\Yl�6֚8��@R�
d�g�<��{������]�l:Q���
ЯÑ�t�nK��O��&D�&)D(�����Ã�8����+3?a/̱dh۽��$퓖P��],}���ԷZ﯑���b4���v,�^Y#��
a�a��K.:��ʭ���5+c�y� �M!�9Z���z���w��'|RJ|ۊ�NX�
��˹�	6���7�^~�|�'���R5
�P�>����I&EP�}Asu�$hB�gr�ήn�5ܝ�\.�!�-E�٭$�DƊ�$��-���	v��ե��>H�+�=�}��Oњ���-A�.���t�!�*R��q�ߋ9��.G�L������;lY{�峛�\-12U�O���悥G��^\,q�A(	h�:�y���h�*��F�i&XĽ��i�̊���twn�ң�c$��O}c"܅��@H4��[���o��B\vGƆ3W��fcCR��ᇪcU�w���oKՋ�y�0�w�v��E�oi
@�/r�?P�a��SP4@��<�:v9	�'�I�?)�;�K�]T��?��&<�UB7��q�lɀ}O$@
��CB���h�Q�B�)��r��嶷��]U�pvC�jd~�Jz�Ie?�7?<Ӵ��w�I�!�`Fi{��wm%�K��H�2��y��B
���5Va�ISa=�V5	a!��H�����Oj��o^�N)�*�FĨ�
n�v3�c�����b����q\DY�?�
s���v�����?<::l�q|r|���v�b@�7���o�	����-�
���!�O��?s�G��vj�g2R��^�A粵U�,fY�ߵ1�H������ʙH��&-���ۗد�ܾ�Zݧ�yk:\;�k��ax��_���og��K�{��&�W��Ұ��ᦹ�#/������a��D-;mH��5���?�r��׃Z��zfY�*�����,���#���<�4��j%�3�o;�9������F�5�mE��ײ�Z�"���մ��G��1�y��z4���!뚠�yXX�ȯ���L�ov��l.�Im�:�:�O��F��qi.�Q�邮b�#�*]�L�x�/,�<�?��;�=�����%��)N�$6��
8���飼�U��"���@[,��_��#q7�Y�#'vE㩒�3��T�T����B�/���<t́�A�9?@J�3\�k�0�;��=y���@6�/ΟD�i�q�����Dؿ�_Է�Z�w��P[P�h��JI���k�=�?��pp��b�hpv�߽;9��2��:���yh�:?8==�=:x�1󟗟A�q|�����T^����>��(�5����9̌e����e=�G�5�'l���4���`���k��ԡ����
��p������4���5�'�����|���AO&A�t1�X��;# ��n;�mV̯��Wy�Wvx"�Xi���\�t޵Y�"���S�̿���Z@�I�.��h�Iۨ)��$�hbaQ�E���a��@����~x�z3��- VSD����)!yT�[�i���S�7��_�̺�H��-�n�'W$-���
v<���b:��U������x��>lD@�9� �������W/���w;�2�?8��C?��#n��<�
�L78[Q��hm+d�K+��0��8->/
7k����nmP��e!��f���pq�z��2�Ŏ�<��Z�T�
ϧ4�!
���n�b;��Ȅ>��덄�y1�a�N
�v'�$���U{G��h����n�#+�v���"صW?�U��XZ�de�v�{2�A�,��u"�4bA^�22��a��YP��qy.xACmo,k��	��w�kT�L���:��8y���Q�OjMY1ڽ����3�߂�z�?C��p&z�9P剳��^/ߋ�W����\M]@Q.�2{=�睳�:�8�����ű�"�Ne���c�޾=�;?���E�YquU�I�E��Ӄ�����X�y� &���g��y�i�&���U�n���1�� �w�,�l9X�J�_:�-������p�(�J�#����K��ǖ)+k��tmٱ���Ҿ%�����ʫ(��Ζ�S;���;��#W��YM��M8���8�A�I��N7�qe|�IY��_Նט\�G�^���^��[�!��0Nl����;�c �i�КX��%��B��K�
M�;��Dz�8�K��|�-�)/�¿��0C�Yn9n�N4���47�M|f�h6N��K�O��S@`~_�1�t�Q���yeh�uG��ϬT	v'��3.Pn�:���oHi�r@��h�워L���$<g�q��w�Aq�뚣&��^�V
`�Z�6��G��h)[�m�:��k�p�At��:t�U�1�f���s�ù7��Y2������
�<\�J�FѤ0*������9�/�Ϟ�ha�a�&�3�QJ6½���z�8?:K�k���(޲�4Ml��#�wI$'�>�����7���P�W��m�.
���lzPؿ�_��l\ ����g��M�M7|�p��bNFXi~��Am�$�T����zH�������j�X�ע�Ws�.��A�0�
+����&"t�]d��f�����r�[M�sH@3��76-\s"�c���cuV��?�Im���5������G#`��!�}8=���#�
<:8;�8���b����������ã�Ӄ�W/�T�黃��ߏN_���Md�,���̧�D����ñ�.a�,�1�2qeS-�Ό\y]C�v�uێ��J�����&�}�i�Z*q7k쥼���5�Y1��/5�׃;�`[`N+d<&	51��/����Tm�~=���\{ը~6Nי!$��^�3Sch."np�`qN]S@P�#�B�٨M�y��E"qR?_�a+�F�UL����M��o�֔	M>�l��!87�ِ�P� Q�Y�w���Z�[sŷ�b����b@��mv>^�+������;<�_�V�Qg��k��r9�HP��JD��}��
�B.������RwMe�
�[�-?�̇���W�N����F�'�����G�:³A,������K���>	ȑ,9ce�ڒ"�]{�b���BKA��%O�ɇ��o��dM3�2x�N)�Êz͍>��׶��+e~A�e+V8e��=����‡.w��ŬW3��� ���P�Z�����C��[����Oc��@�;�
Y#��
���ʼnQ�8a��L���\����.�s?v�y_�t��@Ӊ�û�M�M�㶷.N�%������?�Cf��@q�8I����7
���2�����ї���NvoE�?��h�^B����X�P�=�?PQm$:ї�2�����5������u�[P?m�sSR!ʄf�ڢ}����O+�"������~S���)h�ޜ�����#D�����j�7��Yx(�muz�
B0�28�&�����0@��W��7ro!$D�,�֯*)�VU$N����=�`����5;�(�()y7QB�H�ǽ�����LW�����I3��୏s���{��C��Hd��b�=�:���Tw~M�gŎ�V&�E�i�W�Pདྷ�1b�a�b�k�"���ŷr�����>@p��I����!k�Q��#oՇ���d� �@~�����YyU�ŏ�V���#���S�8=�7Ό�?�"o����5�����.��k��Eʄ:�6��b�#�.��h��N,��m�ycQ��B�P�7M���~�lo�Zk�JAHԘ�~h.��,�B���iW�܆����
���D��i%���pBޕ��W�����&�*"��Q�o�|���K�5fe1�ޒ��E�	��z9�f�%�No�2�a���y|�L+0����A�?��q$S������0��؛/������doZ\]��%XL<jQA���[�,)����aJ��r��U�Lx�����ۈ~,�Q�sZ�)K�&L�L�UJp\�����d�)�˭Њ���RM$�G�ʭ��5��"{�?1Ű����j�@l�_t4�k�ƹB�.��ʙ.��q��}�t/=�B�;YϓdK�U���$���;B4uG��sX��yX��K�:&�G�PN���;P���\�T5����Бc�{Tg��')�"=�$�#��+��xԔ4�>�ڟ6�`���S�\�Ӽv	F;4���<�f:�<�h��x�{\�R{��1���|�kL��uf؄��kB�+�����m��rݰS��5�)�J��|z6�\0�e^�¯��?dV�)��6�_���4�\�/U���7�˧?�ę��I���_"��9��Dp�"Q�N��g�8��8S��	<��g2�4��<���CXC)~�"�z�� �m�&�`Rc�QջK��g:�a�R���F�+}�IN�>��V��
j�en5]��ꒂrʓH'-�ső�xv�'�RP
��jVp7:2XѡX�n�U\�$y���]�s�F������sDDQ��}�"��1���J�Dg�Nֱ ����$k%��;���y �$���E`fzzzz����F7�o$EV�%	��
�ԓ��e�֐	������
"#m��L~>|��VSI�W�خ����q$���;�
��Ks���j6>�T�3ˏ�R��N9���J���+���r`t���o"N�Y-�
Ш����c�E��>�p�1?�O�����+W�0yi۵H)���X�S��±kif
�Z�����D��t;͛���+�ㅴ8-�ND�ΣKW��C��o�e���޲,�=�] �K&*O�W�B�	�M1F�q3f�y}�F��\�G ���*g�XS;By��D�����|��
�{�4�,z)K�j�8�Ȏ�q3�b����k���J�Lxsb�jGB[w�2h(:z��m��T��)�g�5.S�1y�_�
��,�q`�^�Ys��}���4R��J���p�ZH$�����m��Iò����i��?�"��צ�#�L:�{���6iH���1Ģ�Ԭ�m�xmڌ��)6�xe6ؤ�7�ـ��ނ�����V�J"�/!Ҽ�T=Y���.l;d�ua
���1A�p(nt���+d�;c|8:�yp�{_����'B�ͮ!��xXB�H$,��s��ՙ�@�vR;tڪM�/��x�l(&��t�;�
Q��=���������<�{Ȯ�����_���
Ku�^T#-�Eovs¹k_��D��S�C���w�A}�g���i�A@�u�m��cu�(���@)Ms�4js&N���o:vW/^���WH��8��0�u�R�3�f,!b�(�j6����1/��zuϺ�c=O:„�UT���"�W����C��f����[ͬ�<c���y�۶��@b��T/T¥�@�oy�<F���!��R��@W�P����BdB	{&H����
��
��y6�&�Bò@�V��
�Y;5�@X�C)B�WY��p�#+"k�	'�ʗ�8�~�JNZ�
��Ms�@�id,%�`�B���,��"dY�a:*�R�6��� oY>x����m��B�6°���)I�];.x}||79ƕ��&��������>

���|B}!�$�{-���}
����V8�h�υ/�θκ�ļ!U�EN���s&�E�\=𢱟�L��`����5�yޢ
�+*��!	�j�O:��k�q��j^��>�LeR���	�
��ark'�dT8�A�0:1
gB�o�~6�F6p��ʈ�G
�ke&�ဨBi5 唐��y.����,
�Us���zlq�-�j5<<>��~�oj�'���ޛ���}>���!kvۋn�V%%��
N����!��,��$��N�4��nA7
F��Ic,���^~�3�k����X�����U\�����)�&d���[���x���˘�ZXm�,����~�T��������x9ullI���swXO�D�Q�wVGXT�b�z�4{Vu����e�b��X���&C;�L3�^��C���Щ���WRhv���2��i���+���d]K��A�'1��W���w����aq��k�;�{_��$J�e���c$�L&K�t�|j[�N�闲3K�l�>g���':�+h$�Ac	�	���lh5��,\iU݉����?������[��pK7�ӓ�������]�`�����_��~���ey�r<���_g,�_��sYh���o��	�G%�dY�y;�q�g�Y���"�0	�a	�HU�[�u�`�F˨�D�֚�Q�o��
��Ny}ې�첷Q�(,�?���9�f�u��K
,H1z��ߐ!�/�q�/�`�g=�(��Q��k�jdO'l��J���J�/�9J�˧�p�.¬�?��X�>�����`��S:�-�\=. ���@�/9afjM�qS��QGVһ��ɲ�'l&d�����Iv�y7-of٬���ϻ�jܚ�s}�����.�`氵�Sa��.���)}�;�,�r���'0�}B��V�'�9��Yqdž��?�0�9|���	��O�Hǻ��"�*q�Ҫu�Ŋ�̜���pV����ϗ���鲅_Y�"<�tp&\2�Zg�u��>�Z�ËX�s���ҵ.���oܼ�嫝1S��1$�܃1Z�@{����$��7VaqOʢ"�r'h�ٺ�҅Қv����|?��)S~��D��I��l�[
�_��E@��eң��g�s���n���[�d��������[@A�']A�rǯ���,b�)M�,t}��N`�t�Q'�����I�$1.(��S��UL��X׹��vI���+��<��P[�r��Q>gU�&����'�?i=i��w� �ǜ�����R�dV�4�t��<x:����?9���rTY�/5��%LL��:�C�j��0�
�8��z?�('��ʩ�ފÑd�"���SX�~e#�
�X*\�s­��^)/���(����EE-S+�{�CӺ!cx�v>�b���2@TWm5�R��,����0+W�.P�v�GM�샩��`�t�B�^+ej"�����L�1��s��I�X��V#�+c5-�ţ�@S�Lڥy)��L�s:G�'���I}��}��)�a�]��;~�
.v��j�S�5���C�Whw[�2Q�r¯>�w��A$��"�W���(�{ܐ���r�CV��O�k)����1�o0 �N�)�mv��P~�q�bۛ=�O�I�`�Qca�aB9���NBi�5\V�d�9�"��]v
X	��!FB5͐�أ���%�Q����X�3w8*�ٚ>D��֬����؞��7i5v��=]m��ۉ\����<v�'7��/liT�Q���ϻQ���<Q��ʺ_<*�=#Q8g�-�9�&a�ƤR��
��9|2�r*0�p�����3����ȊV��T_DĭT���>4E?��8�Hs
xuN.ĬCo�P���o�Wm����^��PQÐ�gu�a^{��L�Q�M��w'"H�UT۪��<΀�����Ԓ0QY�q>���::\<�D")���΢�����-S�v�{
p��⧧��w�'[��T,�s�N�j;�ޥ`�,���$l�V�ʌ�Ҭ�X�M�t�_F��F� �.^˛�4V=��qٷ�G�"�]y�Twa��)���Sc��u���:����\�k�t�(u��5�˥��j�.Ν,��ξ���~�������˦�ܲ�-��_G÷��|f��-\�n���>�]��Nx��+�w���N�qptt�?�����yr��s~��K�Hb����'F����¦����V@��f��	�bq�:�7���w��QV��^��4B���x���!��ʸ��*pi�JW��p���)����ٶ������
��+",Z�$�/��u�nP�P8��g%������z���ԭ��?<R�~��-*F���bl9fG����Cb�-�����-Wd5�Ld��qaP[��%��P)�6Ra}O��)CJ���)5>�$t�<$V��Q^���%r�h�c�.褜>9:,-o\~�"�K��i��1A�CNJ�^:�KL��N��Ԁoh&���T|��r�Kh������eTr��
j4Ur��o�ɻ2��#�FB�c��ª�?��d/zrYUH2
�jԎB��@����K���b2h�j��-�Z�`�j/b�%ñ�����}���B��K��]-P'ȓ���]�6�wG&�!_#����Y1�"�ϱ)�ϹMF���a�5�&
�J�'���j�8~����µ���2���띝p�БG�F��[ll���O�����~Ҁ���pW���Ӻ2�v���˶��9 �Ǣ؂͆g�jp��k��x72r"�b��,@�]�]�*+����Ճ:�ZD�[#w���\A��H��IfK����OO��פ��OqH�=)b���U�:��jA%;U
��ZJD-i���j
p�0ۏ�J�UI]FԶ�g����oz�#���3Z�>?��#�MQ|��8.0xk��5a!v6���[fn�D4�k�@��5\r����4�r�)�y��sj=��Is(��e���2����^��M��F!��4Q{��M�ʈ�&Er-a�#�-�4��z<ll��Q̣����K�{#�TS���I-�\������z��w'��*�jc���Ge�D6(m�Y��@���&B��^bXy��*d��+u��E�!��to�6���ֳq)7���؛o�@g��Zx�.쨦پ��3����a�Du
�z#v&O�-W���r�>��O.�΃��E��f���;n-*;�����fњ�*?�D�5!PX�kBP7�����iWiW?��()�~"?�>�26�����4� ��0���0�t�_�A���6�8{t��=��+�NU�IWl��"X��'�lGq$�r�[>���P�!������ߊ|ގ:-�2œd�N���	
f���5��
b�n�ֺ���0Y��6�����s���e�)�I��b�J���ƭU�&�#�n���g(P�$�>]N�錃zxt�D�q���d����v;��E�E����D*��S��i��)}��xl�TZ#��a�|���!n��h���WÎb'5,8��������TC�m�+�C��3.����H`+#�E��ද�Ѷ덉� �2��s�hӌ;�
O���HcK)Xѡ9�xq����
��:��{ĽI	0�"ʪG��%r"'`�
A��k�	2�����p�K�� �	7S.�M0C
���;rje�-�>��X����2�6�4�c�':��~����Y)�N���)�]���:��	%��y��I�Xm�j�os��&~B��	��O�G�R��.�eqk�	S#��u�JJ��[�u�y&���AX�y�I����;��BR�1�AW!�/�_jό��%����*	���|�0I�)ѝ����B��4�|L�g���<�I��B�& +?h���de���^8ENR�]1hX6ū2�X�;��R.�}w��nC�$���Qԋؐe϶��1�L
��;���*�n�_��<�{�S�p�%N7�P<�.m�0O�+��LJ$AS�x�OA��*0=ŋ�n�=eT�W����a񈊙'�
�Yq�jR��k_G�n��/s0�R�/��t�PFܚ;��>g����3���=��rHl���Ȫ������,���)�3�H���u|�	��+��e_%h�q)��;��#����Ҭk��5���]�n�0��)z[+&^�*7N���Tф�
D[
T���_;T�1�qS��!��xh��u��i;�s[������Wc>�"�����һ3�z��[�xS�D��p��������:�2v|V��&��SYm�4SI�(���*t]
�Z��Gg��oZֈ��eg���CH�E��01Hgk�D��!$�^6�Ȣo7Uf��q�1�ڵ�������dž"�R>���yq����sN�"_T����١��n0�b�F�dR/�]2��T��]����8C���/9jb4wt��TG�JS�����Z���:�����$i9�J�>�5�|Q���m[��A{��^8���������(���u�!������*���f�u���t�=� ���!�����j�T��W�ZZ�ˇ�ǿ��ˠ�8�Q�a>i���y�u{��o=��T�QOC'�h�t�g��P�#�ݺ1�e�d�K5�
��g���5��i���ʱٓ��r��m�^�+R���ksPU��A�4b)�)Cq�v0���B{��F��){��oE�����n��=_!�D+DGpZ�%�
ؒ�Hb�Hnq`�VK��H���*���/���R׶/����6��94$M�E>�:z�f��,���n�\�~���Sae���vo��K�Y��[�{Ci��#�uX/;�E쎁ƨ8fci��N���\X洞���\�[��nm�~���ӠH�|���=�X�d�<O��8�S��,+�&�11�#.�:�f! ]$�^�"��0(�>��(��j��x��f��\�*i'�(?���7.n.��
��a�C�G��QZ����t�:E ��[�Ǩ����Hi.f�Q�_?�S�����Z|@-���@�394SE�M�n1E�����
�t7�:
Idi���:w�4d-��
�$�ޑ�1s��n�[��$|}|�څ�HvJI�-.��'�!�9��`Ll?�|���a���gU/
v*Ih;�e����
W�w�DZ
�Z�6G��K��x��
_Kz)1
*#X��O%B�ٯ���Z�������*�G�}��&�,[.ʹP
����`�~z	�vB2ϙ`������8�����4#c�ғz��۽L�݊�U��~ذ�P��w�k���t8GQb
�q���#2��~5@;X��Ř	f�Mӊ��̀̿�O
� Y'�� h[�d���ep����׊-�����P!v���y�7"T�4��
\7b�sWH���n� ��\V��}�4��r�2\P&~��Z�g��ޚ�W�0��@W��!�KIRZvlD�3?����
g,u��Îmb�<��e�^O,X}x��%��z�U`�d�E�?��CpO���'��Ȫ�ؚ�0x���\#��N4W�Ƚ�Ѯ��rW1��P6:�ʼn�L0G�m�4�=�^h��j��گ&#azW����IZ"�;�«�?(G��#�k:�
:'K5�<�,�6����a�� �H�-Q߈�τ��v@�a�R �+o���U=�`�7�"H��F~~m���N���{k�G��q��߷JA�B� � ����)�xL�{��7���}
T�#1��6%i�{�Q
*5���P�@�񕧦�
�i�Jt ��

=��ط�Q�&�0��l適Z�8��h�����9n3��D�H��CM�d�Dl������Y�rs�6-Y�$b|>3:�}�B��U��$ʬ���͚c��ʼn�޶��F{���y��F}����h�Z��FN��c���Tz��(��P;
j�R�	� �_����Y��.ZǦ�^��Վz�w���;B�gY  �Y�ٹ@8���.�q�6U��s/l1��5�Aa�,n
��ig)�������v�v�
�^��j�cF��o�z��ro�?�s���/%h�&��&�_�}���`>�h_�ݣ_�.��(XM¿��AP+��������1�Nڎ	€�)4�{�]�۽N��U.w�Z�L�h�<
�M8۰�#7^AT��մ���Qԃ�J�RJ�4^���v9Z�&�T��Dƿ*֙.WՓcj�;1�=��A\�"KQ�	rRƒ+0kq��܍�p���պhQ�������F^
c��.u$U�v܊A��zW�~�an\�.,qz4�Z/��h�~�Ё����;��h��h��MF�~�7�&p�1)D�-7���0�+q�;�µ�@���EE���R�ڵ��c�/�	qD}�O�Ėu�?��U�*���:h�9���j:6��1�f߯6O��t�o"�n`�?�:Mtm���N�ĿِPf�J�tU͒��S�Z�qq��JS)g�J�
I[%TNDao=�£���4�)�����N�Q��"�Vb�v1�L&h��W�����Ý������?ח�	�e��)_$��3m9e�Km=~��N��.�<MH6�ڠVj�o=�P����0��S��`T�n�ϕQ@�N����}^�9qYؐ����!*�&l��͟�ى˧l�
�E���'�k�SJ�5".f��2AV�F���D�m�֚>H��7i�x����I]@��@6B�$�uC[-��I��X

h��{`L&>���F�_�7�oߥ�p�x|�2�9Rv/Փ�@ZK��ï�F��~y�u�d*�����h�lc�	"�g�a�}����a<ߟ�|OG��k ��F���'۵hI��O#N�0�M�����#�
� �����|V�`Ln�#8�z�OR�e����L���^ ܈)�Lf$a�T�A���
5��hY;���RD��K}2�~�	o_�!���'m�����ůN�<}���d`�ܣ�D��^r^rM_��TgR"����n�
�F0G�V�A L�(��ۑ��t�3�2`�8���l<�������`�S�u>�e����<�p�������l[t����e��>��Q�e��OH�:CQQ5�@��ـ�d
bR;��~ʑY��I�R2C8�GA<��7o�>̃1y/���
�f?.⬄;�� #��,���D�)�+%��ތ��~
���N�o^\�*��?���r��9�r	`����L��,\˜�Y�幨�k����BM;����R�
F��2.��Q�9�v�L[mtu���m�uR_i�_e������~0�D��"E��&�Pߐ��ӡa��N�4U^�x�V8�@��O�K�rL�,��_Y|@�~3<�m�p��������~�?��.�4:g_.����P�ʤ
�Ƌ�s�����×�5�af�{��Yovj�������r�c���]���_[?:^A�x���5�����y	:"��j=�S����c����E�s���%�SBfi����EV��,��
�c�E5(����]o�F�=��=�2J��XJ$V���v"��dH�t	AN�8��;����\���O!;�3������x�|lJq0�M�"�x�f�/�%pn`s����F
b��`���Qn&���ྮ���R�O�^�)E�D�R��8��c��+�½V�ħc�R.Tش����nj��$j_<�^�ƕ�dÔk���ԫl���t���@)o�:�+S����]L�l�9&��T�Ƿ8�
��N�������.��4��`�3_��d Lϩ�I;�`�B�n��.h=n@�������|O��@��^v���Z��:�џ��9�c.Ή#s�'o��!P�-��ٶ���;0e��W8�N�(_j�7�N�,��V��G')�ԫ���D]��Z,��=�:���O��9?đ��&9�B��wn
p�D~�Җ��i\���v��/V�@ߙ*H��t�_ԋ
#�{���>-͚�Q�m�ĭ>כHF�qL�@�L�{�ڍ�<�gQ�Z@��%Gy��\^�I�ܯ�,�k,��'� +t�X��D�=k�
�4���X	+=�T�n��b�垮�`�2ܓ�bg�GL�����qO��V0v��ʟv���k(||�LѼ$�j���yESU��\U,��˗�vए括�����2Z���+>�`5ZΡ���t�Q�� krLxD��H]�K&:�"�����\A�!��U���w��zx稬�*'�BA91���ϐ۲��Kv�6m�ġ�G��[�ˑ!mD^$�Z(A)��2CE��>��7EUY����Mty�$˳n��*r�o�wU�9IPIi��$�o�p3�.�ƌ'���O��}>���$wT*%�]�̴��nk�S���tfy@���^����9��*C�X��@�
Wk�˚�o�jFrP�nK~��+�K���o����b@�~�c0czcKO3���`yĭ�]	�7?�i@�T�H��TL��h}�rb��f�v9
��E�9=S�|�x��8�O*Lk�p�\{����6<	�Q(P��������{���(� �C?��*�	Q
i��Z@�8��X�|�ДLU{�C�z|5��7���\���*��=�-qyADc�)�v2��BqI\\�w��ʐJ�qH�e��m�k�F��խ+l!�V�3�-�n.��,���&��r\�aKZ�B�^ѹ���j��J�y���Z�ѥ|�&S�*�E�M�j5���oY�O/�
�]*.�w.2y8�2����K�.G�
��S�j�0�������w�����^���'�4�Ƙ��Vi�;�(�&m5n���v��[#^-�NC?�������Ȼ�U��0��8m�P� �f�����*���h��η)}���֔�"�
�Fr8����B)m���	<������C8,�D�$<~л�0���]s9�=�����Ц���M���e�ߡsL&��MwB �B���~ևm�r�S®$˲-keY��1�"*Ou��j��[�C�>�{p&�,˃*����<e��{�=G�� �$5G`�ҜR7�=�=Ӑ|�O�r�q�>'[�s�=�߯c�Y�}Lw�������/����Yg�5*���fcuS�6�D@;J�,���f@M�@�vB��Z�W:��V��T� D\��X�Un�����.��fN.UD�ʹ�%�',j���~���օ�T=4��
�{?cZ�ˢš4/F'wW����X��R+2Ķ9$hc�^��V�>�z�oІܻ�׭�4�Q�qW�+�"��m�� ���#��D���攴������P�>~O�n8�������x(p���������d����N��N���\�؋з��=�>7��{Ι��8ڥ٤7V���#��f��a�D(���1�n��b|~��ɧt�ܲ�٠aa�8�#%��@������"��Y웆+pC�iW!P�J;2)}�m�,�s<u�����A�#�2
lWUB�E[S
�V�ϩ=N��nf����P�q��j�Z�����U�K�J���j$Mӎ�B��Ss��}�5������lM8��쓘D�'�)�GL��rL��	�w�j����|- N�p�v>��t���T�ݕ����2����.�a־!����h&�!��0L`&�'2��r)�eymm���ą�,���$��������ng_�%P���{�FH������T�����|��Z0c��|B#��R���'�,b�E9�
���m=86B2`���6�#w�d[@G<t�KT�$�p�ё���r����X��$y�.�=-�N%>`…i�	/���������O����4�8�	C��P�=�Ҷu��Y���	,�jG��D�����0�J#q�"'�6�9���a�CUJv�)BAYX��K"1�A���G���@��s���w,�I/��(tV��K'r�Q���ڸH�D�x�%^�H�X�*��	wLG�͹ �Qh��TP\���j�I.� ��wG��6����&��C���SMż���3|n&O��8���x��&Xx`hw���㠷��#��L�
�"����ny�unO=��LM��9��U�T������Ȩ:
�!Ap�٭Ϩ�09���/ϸm�܁Zt�mJCIc��G#��}�����!g���M�uG9Sl}�x�Z��_B6��l\;�`�M2���%�HZ��7Dv/�j���ѓO:�Z�PRo������F�A��0��)��±�����cO���ɬ�_bj��
�C�h�W�H�]	Aq`t�+�D�Ņ2b�qd���f/d-�ڟ
d��S�+5�u�A��5��@A*J��sa��|:�?~�I���U�b<��f������>�}���ٷ��O��U�˙�6��{��p!恲[d����(I�]	�r�B[�`+�lD��^*� >4�
V�g�aȕ4�.�.���M�Z�ˌR�Χ��鴐�1ԭ�_a9�ٸZ�V�����<A��r9ìMr��p)1�� �w�K�ٌ_���7+���,�!�ԥ�9�s"	S��n��F���;���9b�Y`�h��	R��"�1K�|��|cR�n����Ukg���C��b6k�lw|�ߘ�UA�c��l����R�݂=X��V�MH�XI��@�X�e�B@�,�	&t.��[7�͉�DK�mB�?�W�[��L�m�8��i�Q���0����#	]��<����.�LƓrV��>�1�!�K�O�w�rd���.օ���*��+8����4�f\�N�Tb�[=�L�Z������}�BS���V�rة`��F�3��n�격�9�-��� ;�����.�bj��b�+� e�ڡc���Z�lg��O�̌�R�>��>��dVNM34��ܾ��/��O���BYVT�ѽ<���|��>���j�,X�xN�ߔ-
R.I��fV��Q
>Fy凎��f{ ұ5�h��ĺ*�
�����/;���N�)���X\
z��&���9����L�3^t	8��ξ/�.��"�L,�f�8˩Cw����{H�����#���jM.�W����B�P�G;p�eez6~"O������	�C4��f��	ȣ���3؝p��=0���C҆�8�W�gf����m�O���P��R�<���6�j4˽��%��Ǝ�j�j� Zn4�;�.��`,i�y��h�D��:�׋�Dsy���K��ҕ��x�rE�����rE�ym�X�(�`��K�yO�4sڹ��_h��I;?s���B�Bݛ�bP�b��O���t��e�kN��["O�v���hK�V?����]n������	7&��
LWn����%��F�B��J�K�!t4�|=�&�懾����ټ��Im'����Hw���#
���fZc���>,Q�Ȅ@A��@{�����Ϙ�c�~g�6u�O�M���Ȓ>լε�������kOI�{~�#�bO&l���G�e��lwǑa�'�c;�8 �_WU?�g���I�<3U�կ���zńP��w9�^m9la{b'Oyݗ�����g��ƃ@)����w��w)�3	s �7:�c
�l��)%�&�I@M�L�.�(�vː����a�H�2��$kjg���yx�湆xP��*��,�7��]�����,td1ʍ��^!�e>Xb4��r{/->+@��odE�j{A�/��;̴+aP��olcyMk���J pZ�#h��!.�]��8���b��NN��f�I����D��
���|�uK�F��p�V�Vޅ�t$�x�
��P�>� ��o���=H��2�����s��$;�H�� ��_x�#X��#�V	7��>ܨ>��\���l
Gdp�T�� �I��n�ѣ!n���dfuyd[��Y��X^KP?�T��GA'2�~�#pk�Y7�%/
�ABP�R��Gp�Ÿy{�|��1(`����_{=�n�oG�p/�?�\�G�������P	�z+)�[�'�ýv�"\��x:�9hi�:��^�b�0��o��˨t���+�Q��@�k=nO&3���L)�o?ڧx�1��@�ԏ�wx�>��QN���zW�qti�� j�(���d"WU�SN�<��=��I��*��B�[?zk��*�l�U1���	(UD+V��n�e�S�{b�	*#LC��`�%,�il7
m�2�������;B}d��fa��;\OPj�O`wM�O�ʦDu�/�#���nRќ�N���C�w�ڮ��nE�_��P�j[/��6�i,�W�uZ�*�w���s��䃎TUT)����a���ޜ��d	�� ��2ΙV��-����2u㕙��"!��^������T��h��O��+֬�Z�B[�^ר�B&�
z�F1���#�H`�#d�g�MT�]�	E�g���~|?�]4z.�
*��������{Tc>��B�JUemDhrA�QYD��H�Մ��d�������WM}��K)¶&�)��Α��r�CFH���}!�뗅T�-Q`ĤK��
�]��TɔV��{,�dt;L*�*_W�eI�*'#kH��<Ieչ������g&��{��� ��d����n�4�w�ݎ���7Ս6@�\0N�t���ҕ@��a2A�z�nX�JЛj6��-����+�#� 8���
e
�A)I8�����\��CgJ��h5Uψ;7��	$���=ދ����}��x�g��%�e�U����1� EL���k��v�n�Q�'�j�WG9u�jW�"Ɓ
!���
D��B���b�C;��G���%��݇|�� ��^�� �D�i�0'X¸�pt��j0V�ח���?5{�`��޽�y����?�@�������~[bWI�hֶ�lZ���/�7}��O���6\�P�zis�����<�l�OV�\4�Жj ��\n�"�P�ǃ-����O�W�.����r|}{
n��9u�uQ+cp�ҟ�Qη�M�
�Jn��ui�(���2�o-���`� ������
��;�r�O�d��.L�O���KTӆg
�/R�6X������,ݭ����B4���Q{��/�7}��&����zeK��-ή�q�G�~���Q΢�(8\���Xx�
ԂE;"�X�E��ZטK?�s[��\O]AfJ1g&��@
�syA�%S}ȫ,�8d�UՅ.6*y"g:2��=Cn4MQC����`\���K~!����0�n����~�Jc��X�̧����	��˙OV��%�#��R���d��Q)^ U{(�.
���ħ^|�;de6���Rؖ+fi6��\�������>[,�\l����n��PZ֤fV���P� ;�SJ�5�r�"+�oI\0uN-��/j��m�F�6G�$w(�����S,s1$�v�ݙ.	H���Fw{Y5���-���u�߼q|வ���f^�o/�5f��p�Ӓƕ��S~j��V��^���f�B��K�_�aۦ�͟�
�Aauݩ�+�n�|\����cu��AN��y8����¸n����]�����H�PR����{�ƉX%�jcWȫQ �� ];�i����||�-�a9�I�~m滁S0�f��K9_���D��ж˒6pT��O;M�)=	o��.SĘw���ل9�4���:7e�|��O�S���9����Wu��Y��,��*�Yb�{�Ŝr���e|�Ɠ$<hz��n��k ��;?%�N/V�����s+����a�K3��f�(�fe�c�dvVi�!��qz��QW&(��e�˗���K3�?n�IE� ��/����mW�.�c<9'?g`_���xֈ�����#��Z](�E8��&���]����0�E�l|nY��G��3~5� ��`�4V�8៭Λ�d�I���"-�v�Q�{��m�Bf�W�6�������i�G��߂�?�[���'ل�Y�z�$
V@!^ݍS�p�ᅜ��D�A���$v{�_a������s�Я�;Jw ���ѣ���
f_���uY��?>��6!�tqm���B�&Wqڢ_&JQQ��e�	���ļwrr�p��Q��ǐ��l��-?�^o6[���x�/�uZe�i슝$y�6'��a�L�ս�r�\ή��
�IC���vC���;���|�U����H�'#=���F��3��(1�_b��|��3z�l�c.��=��0�Eb�~
z�vt�i�"
����ɿ��o�Nw0�D�G�����؜��Q��L�_el��6R�R��-XbANq�&�a\i%8��`��ꍱZ��pa����S���Z�V~;2MP�T����(��<�W�.�a��r�����x�"���1+֤�^*4zB<���҂�8
y��$�0ꙺv����H&�&��E�M
t
���(7�#5�XwҬ�[L'�9�>l��[
/�>ůu|�tϔ�n9@��Դ��$UĴ;}m��E��#Wq���Fң�tj)�_��M���"��;-�A���WhQ�C��C��Qϩ5
�F��3��C��i=��(�W�a����Ehȸ�����30�����[+���,(#(�[<�w����<ԂeX�a�0y++�T���/��x	:��b��J
Iϧ��_zV	�%-S�NZIexe����T�CѪ��@]k!
9��bp��CƩ�X�G1���L���#���`�Q��Ηݯ�"�p���H�c�h���%)
�Ɓ�b�
R�����ѽ�a7�t��4�l�N7�i0�B�**.�_�Y��,!G�]'�PU)Lj3ĭ�f��|f�v�Tr*�.V�,���<f�
�Q�3JZ�Q�(������r1��+H�A��6��ؓ�"����pW0�!sg��ϭ^�+����۷�ݕ����kDs�:Jx�*d	l%r��0%�ج�Kt��E�;��G�}@�0��:�v<T�����yO�~�wm����8ݢ?�T�̉��}�}��@�=R��-T���*��g���̦}$]0�X�>2'���)v���&��i/�=1F4�Xlu˕��x:W(�䠌�G��n���ݾ�e]��Aݐ�Eėv���HؔH���>d8�'���4�=y�4��G�ƖU���kN���QF;G5�i/Ԋ�2L�=�&>y$�ɘ�Q�!PO)}?u�1�"�$I����.�)�l{*�-�pb��
���@�o�Y�������><z��� &#� M<
����Y�����?P`@b���\�21zv�4j5]�����]�Sf��>Գ*e*��`ck�ĔE�xNu$�˾&��V�����3�:�"�z�@��w��1�t(};��Vp{g 
�T��j����6F����:��Ef�+zD����<HQ{ǪD7����"�]Ir,N��eYW��pbn\�~ьu�p�`э~mZ����i��a��e�6}����t����κX��qі�H�~�W���l�dySj��w�=
���RD|"7�m��"�մ��d&��j��Kpҿ�$g��Q4��~�By1�����*�6{�C�VYV#@����LNb�cM���Z���;�wtD~I��$�i�ɜ�Ym_��X_�+H�]���g���,�C��,t6BZ��q^%�i�3��8�'$�8<"
W�8Տ�Xq�k)�H;�H�N�l�	���n���;
�P��$�|����+��R���K�?���������(+��A���r����4CU��[F�,�h��`�)�����8E*��̩�u�ւMJ�'LV�LQ��3�Ki	y�m�x��si5�tz�;m
�FC&+�D�C���ko9��8�F�9��>؝Rg���]�0�Y'q�98�Ϟ��'�zP�؎��X")��(�D���o�� |�+W�7�atSD6�R`�ӬAW+h<�9gV�pٝ5�w%ot#	�q�1U��/�E6���*`>�w@f,���ƘLs٥�`R{覵�a�����-7�,4�E�b�]��{��~��/X�\Z����e���~�Y�-!�e�E3`�J �L�_Q�*u0j�CKNڂu�P��F>��k6��H[�7y�t�N�XJ>�r���8p�D��)�XKHZ��B��!+���O������?@Cn��4��F��/�⋘v�_�垿0'l�]L�F�̜4蠐�kC؋���o��z��&I��w!���v;�Z���íۇ�X/b̛�^\���z:ȉhw�势�C�+�� u���`B���k��x���.�]ޥ&4T>�:C4��j@.�����d�q� ���s3��:�H���v�{Xf^���b�+�o�c:�Q(�H��\�-y�7[����mr�v;��Dӧ�-x�5�l��g٣��K���[����:!�k�'��ד�.��j���j��`SK&�R�V��m�Q/�{���t�	�BGG]QGP��y�������z�|b�yRk=�g����6�bA�q�L(���񯽩o����jϦئ7Ú�Tn}���.�4��-4�.S�tǔ~�loC���7�r��J�;�=��_t�ƪw�>)���i�:�@H�'x�Ʃ(�x��J�eE����AŒ�xeF[
ݩb��SȦ����L�t(�9��Nr�aP�EuA�ӌ\��"dz���<|��ß���K��x� Ģ"��v(N5���dǃAM�H�Xaw^5[¨���a3��N!�<�1;�bt�-��[q-2JqS�]�
����'LY�4�=�`�t��r�(�nbWM�M���<��-�H:���{g[�=����\}�ʟ�T�t�S��X?�6��o��\VN
e�e�EiPr. d�
Ír3܇{�-�֋�7Q$I��E&��
0J�\d*�o�+�#
\���z�C�7�g���2h�,��ոвY��8��t};[Ӈ,�3J�7N��т�1b	���B�KB�z8�N�kt�Py�!2@UAԽ�RDcx�7�,7(��T
3�,����)��8D(}5)v0W:�N� NYW'�
^���hԘi� �J ^�GP�Z��6�|M�*>��=1��+���N����s]��	>b���h�ɒ�H�������ߎ��L������/O�Y�"T�@,���F:p0ٚ,o�?6*��a����2����Q�|9?�E�@�����d����J���l[�^�䬈Ҳ��,��x:�����/�17���
�T>�?��G��G͉�s#G�Ff��4�5gc!�Il��·�
.��Bg�1{��>���.�}@&�
5
�=��(Ǫ:�3�:c[�r˷SlwJ���L��I�Y��j����0vF�_�y(��t�f��4'�=��:<���yů.��
P ��?q�1�AEߛ�Dai)De�+��
���w�"�@��g+s�s���<U3M�Gč�FQ@�����v��_�6�ۥkA�p{G�D`�q����i����|�^��#���Vm�.kʘ%��hU�<��w��dʩwqG��l0��7���ui�d19Xحz�:[h"��Z�L����y�p��L�p7W1�=8�9�5��9�
�!�s��u˭�f��F��h���(��0ش���
X1Q@��1Sl���X�?�Q�?��:j�XI��
�d�s�d#f>1k-ƕ9F{[`�!:����������7"fi��+����t�%ә���}�Dd{���{��*�kҧ"mY�l�ɡ����*l9�����6`��"o�2��Z�S&��b�q��6�w���N��Eԯh;�,�M�"7�f�?0���Ϋi W���Z�)���
� &u���،�r7{�P��P$����
φ�d3a�G+�!�g*Y����,�-���M��p
U��5�Hs`?���=�Sֲַ�df=�A��7�8�V�N�Ev�[�-<�Xͣ���V�aҸ�3%5�0F��v�j!`Y]�h�Ľ���nh�O/Ώ��~�ߔo�eK�n�T�5
�2)d��F���]O���P�*�:����H���@���lI�ں�xx��jxVI���������#�1��i�_g`�Y
LJC�q}l��S�Z	���|
^կ�>Uu_�>�N()qSD�Qǡ�4Թ�M��Q�F�Sp��0�\2������2�0�u��J"f����O���yu*;8�W��	O����j��6���}���':�m�QT���b���IZ*W�<-U���~�ڥ�0�?OLr���{�|6����$��.�5��CU�yMk��'�L6�e�N��^O����}qz�I���,N�ǝ8��Ɲ�P�����k����G���A�䏸��-�	��VP�Ёl����UX`⫺�PkJ����|�;�C9���߹<�v�.�x�e�Y��$��S��R묲nt�oK�F�+&.�V#)���
����%~�	�ٱh�'
�D}�m]9Y-LCDl��ޱZ<w&˛�j�#|��`H^�l�V1��Z�V�۸�|[#�ҹ��؆��L�X��xtW��ؖ��5b�-�Ͳ���M��%�{9���:2~q{0�5c��[�N��{�P@�|��ON�8�8&���:}~�F�Y��*�F}��
��N�t/O����E��Y�9i'�g��'uO�.�α�%�Z���irq�����n���8e�ʕI�^)C���18c����э�	8��/�o�P�w8fT�6��C�V"�e��pɡ\���<9ۿ���{�(�M��+���=�W+o�D�D���i��@�[�X�k����,��_T���;��ć�%��Z��x�q�����?!�a�����j��"��Lu��7=O��c���}�/�Rƪ??~��E�R��hd8�ք���Eͪ�Έ{���U�	�U����*܍����]s�8��7�0�ҦO7��'!״	0��sC9�I��C�῟vW�%K6�~2����]}�v�G��{(�!^2�nXc���;��./z?�
����	�Htʿ�cOJ����_�o�8�"�Z�@)�'�u��E��.�� 5Sg�I��\C�HT�z�JH*:e>�>�F��>]��nŭ
{�@�P���p�F�<����/���0@*�M��ۧ�����[���}
�}^�MW�Ũi�F�Q��_��ARM뎋`w��\��x?׵a^�f-x0���^��$�˔�W������۪�Q��/�s[�ٺ,@��P�ʊ�ZA�4~���E��sI0?U��z�x�h�o�vr�km�#���҆g�V{e��v]��F�o��(p+AU��!NLpH�? t�doI�[5&�E(	0p���I��CX�W�@��$�1*�3q�y��$�zk�ó�z���\���h��C��j�}D�-� �|5\�@�Xᩲ)�z�.�
�L���
�Ϯ�N�T���e(=���v:��O�%ό�-k'�&/,���8��s�Ne)��Up~��Uow�i��L);�d���,�{T�{�߂y�j�{�M��&5$%R2�8����4A-��0�z�[�$S.�շ!��@](9Z���0;&��Q~Y�mV�<��-�	����y�~�	i�]���N��VOg��S������Z^�f��mV鶪h���4�3s���Q!u�9��X��J��s�(3��l���vx��a�β!�:���k;&�����F�]ä�o,'��s���_��w���0���&]�uV?=e�:��4�u1�o+v��O>4���X�?-�lMx_�_h��g ��D�w�x���O��ȑ-S3b�h�X��WY���ak�*�T+Qde��8�4C+B�M�4����F7�'��w
^��m��|}���^�3�v;�1o�dm�B{�2�k��e&���Rf۴�9�B�/}˗9�EcǮ"t��ap�u�j�IB�	t��:4 ��� 4�\��TϱϦ�SgG��x�'Y��}�tV��4r���	F�w=J&`W��e\7��Q�Z�LjC�Lۗ`fZYҗ��|V�N���'d���
-Q�ּ��
b�L�k��J]�����s�6ق�H�X¬��p�p*���)T��qO:��@�j�̛v�uǦ�i��q�����	N�N��Qbv+q
\٣x|Õ�Y|��HX?�>�?r1�n�Y�+p�?|T��]���a��Q,���
)�J����GЇ�d��H'�?�ݳJ-V�U0�]σ\�e�W)����|��,"A ��3�
{HS�0�FE�H�g���
��9E���S�e�]�q�K`j�
�C)}�cUddѵ���F.lHvf����.u�gKL��I�G�@`B&#r���J�[��<q��;��UDoz��T�f�<��Tk�J��cta0:|svs;��G��C�d�������P����;q),�ϡ~�L�Qf���t4Ai�
�:'�2��|�7!���$P&��7�� “���A\�18��$�����q�Z�����R���{�b�[n9��2G5��YpHT�=��֬��%�Bp�,��zo	���~-Q.1��a�&���F�a
��p����n(^Z2�*��ִ�B��m����
���M�k���#?WzߊM;0��m\�T�VN׵�~=�׾�v{y٢�CT[̡�1��B/�n<*�FɓK��ʞ�#�qiA�L{���+) ����4nd��$�{�ϡ�L6�w���O��vVXV>s�����O#�d����l���sH嫐���$k�j����+n�O�ڝ�2D�}|t3���L,��!���u9(dIJ����L��E���*�����׃��ɒ���8߸�n��<�)�d����g�x���sf�9�g�M�4Iv����P�??;j\���=�1��F����r�� �=��'�Ś�aN�&hse�o�nYC�o��Y�;k��nL��e*�[t�+��^i�t\i4C�e2 g{��,�t�M&KY�+��k���/�mK���a
.u�ײ�����rƑ��G���(��9�4�
;�a&9n^��
>�CS;��z�*����|��w�3�"�bH�y��tXˍ�p^wqe�l���sU�I.e�����41�k�Ej;��/3��9J���٭a$�[�$�7�����%tm]��,9ҽ�̊��C�&@�ր�9GBXk��n�_qo;��۸����W��G+�J��(vm�u�L&���Y�֜}A=�
O���+��=��N�����h8��Wph4�E��D���h���'4&�oyQ�(�9�Lc	m��ݻ�y��5f�H0������S<�
���!,=џ�^TV_Ӭz�	�([��b������K2�@��`�V�lg��C�шpw-��sj�P(i�Fh��u1�>�X�b��I�k�(};�J)Vn��"�3LF���F�S7*A��2Ե��>��Uj�l<�_����\rz�\I0�Sj�"�_
<
e5̦��T7�mW���lH���A���O`��f��++�6����Ֆ�y[�+2�D�"�$eOVeo�J�0Ó�oHΘ�jVU�@A���y/qr˩[�E@�\0���i�n��+<R���:j�y����]Ko�0�+>E6"�k�
ð;衷,��KdI0w؀4�}"� ����.��$E�E�������B��2zl�Đ�e%Ñ����9�ⲱ;^��N��
�^��׶_�y�h{H�1?��uߧ�
鷹eO�*l8����#�����N��C�:!L˔ɏX��*bE���q�1�h��鴤�6?t(q"rri�.6%$�l���R?FPC�ę-j�e�t�f!uMw�̗=�\Uֹ�Ԭ��^�6���n�맥	�˥eV"�W£�5��h��~��cE�	�����I`�|E�>������A󏨨5ԋM&��3�˞���]tx�O&�5����~B5�����녓�g�IO){p�>�VCȕ�/�߶����I�E~���$��Ox�)X���$Ͷ�{�4�o��d�6�R��.P
�F�LdS�oF��"���]��e�Q��Έ���)�&���8%�p�\D��Z����B-����K����!��<���}�H�������?��1Q�y�
�Td�6tGL��{�J#���|
��;NuvT��q�3�/��OD@ι��.2���F���o��tIE��;�Ќ��## 
D\3�7�y"u���j�A$Fx��瀬W������7ˢ������d�|�k_�SL�l���
-p�&W�=��r�nmߐr
nX^��8U��`g}-��u�yuaw�ְ|�v���BY˴Puhh��ҕO�_Dy���jN��$KI�C�T�^��M�f�z�WJ�l/d�D�|y*�k.�g��%�~����]�Z�q�yx��&�ㆋ�
C$\����{G�����67E��݉j�͡�_ď��G�C��݅�!:BHNJ�
�x�Nw��=?U�f����=/���-3�%#�P�_9�Dz���]�d\]Ӭ���&��$5�+�ؕ�g�������'.[k�U��.rf��9螿�]�OG�޿�J(��a�v.R n�6<AQ�,l�N��3$��ޝ�}���ރ�~@���9;;�3;7��)uݢ��s6�ux�Ӻƨ0����
4���}�k��$Ilކ���v4=��]��纄.͘I����+��imk����])J&��@!Ez\���w�����ⵤt��� ?�h�l@���� �8��ူƹ���!Y�
�W�Ay���d�Y6@,,�ȣ��;�%EŹ�8�"4��R1\�%N!3Hq��-��l�&ǿ����/�Ƙǘ���V^�&��SDW���>���h�"���Q<ު��)(�ux�u�^�9'�"��$�JI�3f���}'	F>��5��@�|���U���פ�1v`</��0P��9G�$0��}}�+IۤF�{~�h+�KԖ�P-S-Ǥ�L���79ٚ�y��1@�]MW�c�wR-X��1�!�W}���9�v�0�o1p����|k\�lo����=�VU���Ѷ����u��Y&H׫/�i3,'��Ȍ|�q��z�Y�lٍ�f�,���ʥ���#?��vM(d����U,堰����kjNl�{ux(2��E	[a\�����i~iv�|C���4x1�Џf��i!�@�B%�i-����2[��dh��{�7F��(<�"������u��L1Mou w�%V�p~7Z�C���*��%-H��w�X)�)��W�GAJ��4l���0:;�N��ej9��+���{ ��M���)VZ��U���m�pɂ!9��;tG���vRo��|zy�̶/�mkW�m���t~��n�xA����A�ҵGhh_�r��M���=�BԠ xu64lB[9�s�2ۏ2s�S�'ʄ�v���*�ͽ�L��A�޽~�@)2��Wji���JCؒ�.U"�쾢w&���xY���i��>��^g�х ��~5O�\?嫙y���O̅�r��d�t9�_/"���3p��
�,l*p�m��Py�!^��B�[L-�u�.��_��p<�\�������8��Tb���du����$7K�̂�z7]~;"����D,�`���#��z`������l���D�1a�"�Z�����߼�0*0�u�mtzXۄ�<��`O�_�{��E�8;a{��F8]-���i�&h�)y�`Fj��s�ڨ�C��i��/w����X��BUc�8��z�b�)�kZ�*1�5�b�bO�-������K�1�@~�Tw,� �ؘ;�5%���9�4���դ.|�����xО��)~�����\��N>��4�q�[��/o�^�o3�b5��0��:z����,����zR]�)Lo�W"�	��Hu�/��H�
��:c<��v�@�T�df�f�s�^��5g\������C�P�ȹ��mLܩB�~�S���gc�2.�K^���.�XÉ��܄<H>�o�S/?���񾨁L 
s�����Nq0u{|?�EV ym�E'���INs@鎫�؋�՗��_�by0�9<�9$����+D^w�I#n7�$�J`���s9�.�6WZ�.Ar
G�?S�	9����3�Wn��+aP�w�ஈ?��A�P�Z�)�*[F�#�x���\�ڏթ>�k�0r#�-p�G8�z-���:���<�#j<����uFcz�X-�u�/)�L�����7�@7\=�ņ��u��x�݋n���^�2^'���ڵ���')��Y��

��z"1o/u�J�يV#ܓ�����l����[n���Q��-��pm�b&��c���#E�~���:&I��̖��$��V�r0��1ͥ�K=R-���R(�J�עM+��ͼ�1e�w9!Qa�D��I���z�6�g+�2:�U��Y���.�1�� ��*7����8�f.�7\����[Sc��DY�2<��|��
6��^H^�����	�e�	�5�m)Q1���WLH�vq���Z����?h�5؛G��'N��������i�#����al	q�I��az�H�
�I�e���D��)d�~�_���͵��L��K��/!0}4�<]��ٔ��d�-Ьⷌ��(��r�5��<N
V��e����v]��`{��@z��P��Ћ���mҖ8	ꪭhBChCL�4|�|�.:�;
1�카s�>c�/�&os�׷�����P���K�ea�<�5r�i�J�iI�ҩ�`mƪ�ΣB���k�F�/��]P���53ŵ�&>��l��4��m�m�|[�B��xzB��$Z���\�6�3dG6�&!˃Z!��L�w�������n�6�_��8��5�mu]`�À��p=����J�\���&���G��Dي��p/�cI4IQE�����I�]5L����:�֖��x�`l�]+�ۢ�uv���º���\�J�
6D�ccG�c���1���z���b��iP�pl�/���n>�hI�������_�{Y��w��}f.^�+3�M�`+FUC
�F���#���)��U:u�M�k�l�um��>�/���
��[\H�É����BnQ1��*�s��X��Nǖ�'f�Pm2����OS�;���$��j��@�$�2	a��=L=�v��Q�z�Ѝr?A
:��͗�P��L,����M�=�rj���»9P��1��
�f��g�d�{�߆x�|�U���'��l��J��5�'��8�l}�z��L��m�'%	:k�iri��'�fZ��*���)�����[IZ�VH(�Ϛ�����`�0L�ퟠ�_o%��Gê��:H1.Pd��Ѧ0��9u;ji��X�D]��Vld��lK�D�w��^�c��ߕA�ubG�xO�o�����?��h�!p�c�a�2��i���k��r��O��%�X�3�
�c~|nF_D��nm�l�����uKOl�e[c�<�F�H�x����e�C0f�욗d�~�<��/��?��tdI8;;i�+5�^�� �ʄz�4v��n���Y#]���	SW�~�]�k��Q�W�
�^�í��	�L�v\B�O�����}�>ގߣRK�Y`@��sU�:|<�p�Y�b1���y2��S�w�����y*�x\(�#���*�.���(�,\vA�ǕH�1 �JB���X����V���[8ck�a��yUdCK��A��;��~�<=~1�AC$�g4���lx]nx=��7u�4�S���^��5P��<;����2���=<mEnCOJdX>�^��<�Mi]M_�9�W�˴�Kt�2h������I��T�n��@A��i�:ћR��UG�P��f4F�xTA�-��/�u�����Ѐ	Ve�x��H�R_��S�}4>%_�B+y^f$��,&i�O7C�e�+����a�򎗆Ȣ؎5�ˠ׽��� /#�|2��[�HV��B��-��"ز�A��+Z��&�܊�n꺸\�|7�����5f����h���ck6`կ���9��UK;"X������Y�
6@��d�)k��ҡ��zq��_crI�5����?T	(}��{��h�g��|ƴ[�˶y��syqB��x�>�4�a��,�*0O���I�g�l
20�SB�*oӉ`���˵�=k�R���8�r��`�<vk� ���ێI��9Y�r2���cDf�^��z1\����3e]�w��m�<>�4�:.z���u��˕��`�[9U���Ζ*�̜��BV-"B�\.��UB>B�l��0��wXCDT�y}�Y�7Rg�VH��+�yy)�L����	M0�O
�V�N��C�5|�v�*��jg���^Tj[�Ŗ��`
�+�Z*�E{$��aHP�~[��`���v�`yH���f��D���=ЍbʼnH.7�ъ�eaA�'��f	�a���hZ01�0`J���PFF��ooh"g:��f��*LA�y�by��TC��C-}���"�]<S&6ev6W�5M쇢���ا�Y�b�b�G�h���K\���(���w��uj@��.B����mS7�;��e�`s2�7���!I3��Ӵ�P���B��/
I����z��J�N�_��V�ݕ��խ��t��[��OɎ��@K`	���?�ce5�
t�=�Z?Í������ԕD�n;�!�n@s��8�p�����̽��0͋�{%�'�f�:�Ώ
��Mi�D�-��;���.kP���
���vq=��q���OO����B�,�H��g�ȓ4�q2��7�?G�j���֊�B�5u�~��.�<����6���52,m�,�I]�Ym�j�E��D�./kiW�c�8����ޕ6ڃ��L#pee%�^,��wL'��񥢭5Cl���!�-)(�6<(S'�h��D�nCkl����g�5�֩k��g�������nF��-��]��
�*��y�_�d�����
���(",nͻ;�R_n�
��w%�]F���b�_�@hy�;_	2`E�vv8}9�O�x&�Q����w��Q�Պqj�Z��OXa^߿��n ^��~�%�G��|�" �8�qo�f�h>��̿��q��&D��nc�;5X���V��1��4H�G����!:R�$q���7��"�_��}���t�٪}:���k�r��5^|B6�Z0�K�������p�@�*���Τ��TM����d�����a���B=�{�Us�1g1����ˮ��c�c��:.�KXt��t�rU�{��'�PT�Z����z�\�n^tޗ�����K�)��ɾ��O]ڢ�p��j3�Zl�<,��}�)�����d=��DF^�B�X_\B^WEc�
��I|���V��}Л�)�:�󲄅�cTū��AY�X>�i/v�&�[n"�;�Rv3�ԋ���m�x=�|��t�u����F��o^�6�(��j�f�	�D��y�|~��K��f��̃2����^���_-��ۣ��j>�q��L6L�Ti��rq
��ۧ�(j�/g��eΔf��(a_�zr
�́z�Ĺ��5�+�T�|���w�I�b@��N�{W�{n��}���S;tJ�l�Ru��/c��;E�"�߻���qd��D�f���u�KE��r��yl�%��a����g���
7�ͷ��1vv��Ҿ�qg�
���2/�`��B�����\�)f��7�}����&'حL�H�fW^�ŕ�Q�N-*����D���x�E���빥�%�2ܺ�*���G֮;+�P�G��jMZ�˰�@�jv���2O���}���܇m�z-�`L����u|����˦� ���CR��
�jHO���׮���)'��������l��r3�e�8�Tl�ap��6��A���i�zɵ�I��8{������ֿ�F�5��b�7��s������3qP��� צk�A�̦Ҕ��^��I^��_���Z.bWo��o��3�mW��8il������J�Px	����|!1[�o�9�1�/FD����׻���$:�XM�����/N1�)S}�M�?��}�m�0;[��_�:� c�Bn:���`,H�!YV�,�Y�p�(
X��W�IX��g���,h���
Y逅,�8d�!$l0����
@4`!$�j��lp�U,����P7B�.��ŀg���%Ѥ'�z�(�,����x�A6<<��Q�~bDY"ɂAb�H�hx����*�����	fa&�C�d��g�`��?��>??-~‰�=���%�B��m�}��˲���7&V� I?\��F*�,!�X^�7�m�������߉�/�G�I7�їx�4aXF�����|��,x}�Ǎ�y��߈/��*�W��(�Kԭ�l�z��W�,q]���$An��\�ܪ��&��F�(�o����WC���p�b��f,}{6-����y9W��qo�թ/|Bm��^�oO2�}1c��rAq���WF���Xbr|�;�*M�Al��0_R��39���R��4�����Fa��Q'��bd��C�p��#+�O\^~��_8��W&�._���"�)_�7\���i��
� p0���m]��X�v�<�
�ؘ7�ytq�*��_��2/濯�fu�,j�T�낻N`��{5_u���j`4:�}V�W���n�����O�s<lA����V�n�C����ϔ�0P���Ca���5-2`��شۓs�k`�lwA>�5�0��Y���)a�{�m|	@Zj[�s���&�`<غ��[����{��+�n1��(�gu뎦O
���h�QFc�8F����U�Jݍ�u�"�xA�q[#`������~֏�^��gbi���3
s{�5xY�һ;�h��4��˰�p�B�W�$�4,�q"�(�e�����tH�;mt;
�-�w+��p�4>�AƒP�e��5���d
~�^JAC�ϟ�����+ήC�����7�A�[U�F)!��ǵ���������T�뉓u��Np��_Ja
�W��:�3c}RC"��ECBP�fز�ua�,{��ߎLJ���=�iv�?D��>y�;�sX�̼נ��BS�y�`�R�5-�7|$.�-�6�� -?�+���1*����}�6e�y�]�,�G��7t۾��<+:�t,02d�nK��SI4�]>	�"�y���+8��Cb�m�?/�:�boOuKʙ�I�B"qm5�m�d���G��8�=�}>�T�c��$ď!AOSa�;��cAJ�(��&/ߡ�_���I��X�F
X��|
AƏ�Y�g���Ͼ�u�-�3��m��}�w�b]�bOO�ʃ&4�@��KHH9U����c��d,qMK�S,sr+�I+�Yo�ƳI�-���[�~�73�!�,0r��wbx�/
�t+���J��"�3�s���2���-M�`8�0�j^(5��6�8@ΰ�p/@���s���Iq����VG�Aw�ߋ�.c��Yޝ���1�՞��LꑛKV��JFF)�|�[uisb� >����ʢi�ʴC X�Y��tl�H/
�J)�!3����=��I�'�1�a�*�;5ߜ��+ȸ]�}"yp)>�΢ᜀq�ef���v6]L?�3�.�\T��
�1�#�}G��6/�|����w�u1�w4�cr���;;O{�DCY�47�R"<(^�7vo�Yoiwk�0\[^���x�����hS�$�).X1�{1��("��۹�h����?���@ejK�v=K��S�)�<3�7��?-8������w04��gU���U�bV
X��j�Vbo���Dnl/&1��t���|�w��ѭAR�˅���^N�|��9ͺ�s3�Dd&b310���C�b�w�f�S�7���q�2'[���ꟑ���3�?���T��� <
�*�J�Zi�IZ�*�d[i�Z�,�S��Kz��
�9@�dw4��*�$��AV~�
�E�"[���tl#L�'�ڽ*���&C����D$��*��cL{:���W
d��}�
�9�ѬҲ��_��H{:Jz��W
��1���FY��0n�H���ID���H,�s7`qb�"WC=����O�G*���A�V=���OI1�AXU��~���<cF�e���w�����v2�������NuҞ�\)�sϟx�!�p�ܗh����LDf"63����Nl����ڬw@���b�Ts����&�g���
^K��=R2�Ez��kSI�
���Cf���y�%\�X.����0	��M����_K�a�I����}��h��״ZR��V�p��^�/P_�� ��(�`�'h��
 ��(�`.o�f$���W+��P�&œ2
����TJ��%�H���	��
Kɭ�*��J^�H�|���9��ř
2(Ҏ�#{�R\ٕ%ZVF$�l�Q��*��1�t<���G�/"�{u��9�7l�ޠd\�1>S}P�tn���������EB��s_d9l��_[��vqH�/����/�*�,�T�]��Ϭ���L���ʰ��Wn/I~w��d2<���1l������<��=yC�C��r%<���n ���x
���
��a�Ծ}��σ)g9Di#�(�\^�/�#
��[��Qi`���M�zW�c �T�1�&q�*��H�t�{g}ҭ���I|����dq�a���^r4�)\�2hU�D��j��{�*8���SEn�ʂ�FY�K�GG20+�%8�J��IǓ�>�v��nsݱ1���<_��!�'�B����&X���|��e$>��d�iD\�w�1D�D߾�b��k�m��!}��]�d0�&�hb���U����J��F�Tg���)��ý�+��5:�Y��JE����5^����7��Ͳ����9�Kby��G\!��i�)J��,�����6��m��hYS�T�ҙ���Ķy�s�%�������KI?�q))Я��W�#�읅k���p�=��]z�yB��y&�m#D��kr�a#� m|��n�� X����p�/��Hg�Z�n��2�6V�_�8�yɔ�}N_:���F����(��
$���3�NX:e�K7Yz��[,��қ,����Y�����a�]��3�]�>����,���9�K��2x�����@��(������	���p���s��`�)��sp�e��,�(��W�)�!������t}7IBP���㩇��m�$9�'�7�{�e�~�J�+�5f�
	�'5�BҌ�f���Ȭ���LF1�{~7������=��[���uZ��A<B���C��q\7ݶa�ڦ�H�s�_뢣F���ޟ;��2c=���L��v�?���j>&\g:/U�S�)�q+HDZ��W���7:�ύ����Y%H	�K�KkBB#ժ��*�.�ȝJ���{�J��(�۩ ��a�'ْ�s��(�`�~������oR�{_G�1�cƝ4�j�Uq7��f�N%�O��$�{���R���X��wd�¯�#څ0�i�o`oF�\��Lavu,��W/B{�H��<��t��_���נ���h���@��`�H.�v~�T]�]f���K�?����L�8Ӛ���S��)J���53&���e*��B�iZq�h�`��6��"��י�$i�V�)nL3�j���!�-ψKr�֭�E-�C.��S��[(�M6�v�J��(�_:Re��љ�����
F>��ٱ9��E`�rsng�x7g��kb0
N\gn�X��ش�i��޼��`+V蓜�OZ8#q6ac5/۶�m�e��ʙ�m3�c;�z��"_������buH�h�R�۝��*!:n�+�9Ƽ�+�~n{{��?RM�e�/e�5�u_��7���a
�Eȱ�¡�9�:t�.v5u�^��C��?�_��~�ew_$XzR5k�{r`�ZG�2�ju5I��rpݟ.�iP!z :=^���JPmۃE���i
�;�h#޶3Sn�S=a& ����b�:��/'�R�-~,�N�����;��Pׂz$i	`�P�x��[�N����s�lyZ���#�a�1�Fy�q�;��oO3n�2�[,�r�o�Ģ��c^Z�Ĉ�
3��J)�<�6OL�S�l�d���cy�dž���>>����o��ӸӋ;��0��G�i�q[���N�v����jaW�9��`1G���!)sK��4�$f���T�qSѠ��ީ��%��SR������t�Ai�V�_DTኇ�-lk~DO�,P����#*�{)N�6}�if����o�p��2��`���8F!
PH�Ff�pG�q!\Y1�e�1�Ϭ4lyrL�ǃ�d:\�S���r O�#�������y����o<��_�_���E?�E��va7����2���³��[�f�ѢU�Ŷ�O�I�YOW+��x�E�9��Z��h6�F�!pz�#@	�Z,_ۣ����< �93�؝�.���u<�l&�/>�۵i��@�K�&Ӷ"�+՚����k��{���[�2�������I�E��Ѣ3��\t�v��?[�-�"]__����8�fb8B<�!K'�B��2=4\R�d��B��-4���d�a^l��yA7z�h��]5���+f���6�p�&Z�@�T�r��ƟğR�N�D
��Ԓ0��#��\at�g�H:�Q�QO�]��Ǭ��,�~���A�~�~dś�T��*x�Ҽ�Y�؛n��J�v�L���!�1.‘��'���;��wL��,�Q_��b>�*Q��?�u�5Դ��Mi�t��W
��$k�f�R7���,�2�W7y�9�U$�*)�s��l�
r����%�dU18��%r�dQv$���"�̑�������NP��%7\��Q�HD�d)!�l�mɳ�#��)����@�-�p�e*/g�H�xP�����Y��6#TI^���Xsˌ���O��|��7�;�E{���r�⩛�P)�}�ɽ���/� ��KM�����&�Nj�zPd��d��1��E婩�S��X�ȪP<��EZ��;}�e�a��~�_c�ܯ	z�����S�_�[���KF(���
��
�8��s���fA��:B�����Pq���
�/��7������q����l5�e�7L-{�;m55�U�ڻ���Ut'�������N��:�{{U~��;�$tr*A4ʑ��m���� N�䋱(}yZ��旅Y�+�T��1[�e�Lu��-/��nK��;R�
���]_o�6�p�!��MP�aɔ�q��@�d�ڬE��֨-��6K��w�"ER��t�����;�wǓ�_Z��GJ�#����2�᝘R�Uo,����
)�w�
�b�R
&�>~+�k�VqS�'�M���� ��
+�#TJ�щ�p�:���-"@�?���i�k0FT��}F0d}�o�9DS��~��*Ǧd̾s1�q�jȊX�s��۾|WY��b����_���I���J��b�5+�3K:�FɗD"��]|ZE�B�t+q�$n�_i��u�Y���P��%+��M��B6E�c7�˱�������O&�Y�-�KΦ%_B(�h��S�#�S���0����w�)�FI��BȊ/�����ܔ�W��3.��\���� U�3�ܡ�Ʀ�
`PW�05;al�$�ɢ*y?���yH�h�'�j�;��1d$)��A�4�_w��o�{\u~��a�
�;���1��L'�;F�!мd��|
�����74�=�\I��N
7�=1d�8�
gV��m]��z7#�p���Mҕ�V7]�J���Ӿ1�R�hk�.=g�w��CA:KtǜL�r%bX�U������!}cG�pII�cw+p㼽{%S%k�V'F;l0��IZ�E�XKB�E��Q䟂���V��w��ra��Ja���R�}��F)�Nfku�ټi�)��7
y[�\l���mE|���rW;������:���A(T���'�I�5��@��rx�����Q�ދ���}����=G$w v��<d@���c�0l�w��f��w��5���	Jf�~�]�8gG
a�[t�1�C������.��}��W�6�{��n�3�qcx�`�G�x6_�5&�sޠ��lV�*�ø��;��^����`�@��Z����˗�Uj���U�^�=��*��d�UB�TgDqa�%��<���)E����.��lA�� �'�d��	���/?��= ϒy"	MݭԅJ2gN�.��|?���N�U��-�����T�E�ԁ�c�kڮ��_�bA��)p�?���-"�x���U�͠��m���Izt-��X��t��h���}�a=�S<��>9{���
"�y��15}qod��*m��VF�׆ߋx�^x<�9�~BA�´��
���$ţ{$$��s:~�#[ȋ���.sU-W�X��\��,EЍPìJv�5�C�e�:�L�F(��)�S�~����̈́�}gk�	��X��2we��<Q�*�t/�~�.����NJ��B<m��[��?�r �z�dQ�6�n+(�f��Ђ�F�8pbq�^�܏5�$�1��T�#�\Y��v>�&�����=����,k�pC>H]/o�)&��}�SD��[�B�ژq��U*;Mq��/�%ڍ}M�z5̬Օ�ֿ�ZX�V^��5�;��E#}^����O�4у�1��+ۓ�����ˤ;��@X!b��M⑗r��l`3��P�yC�?����C�_a[��2��%Z�x�ł�>P<���L�f�w�DTj��#�M��P�B�����[��s�;mz����|Nз^Ⱥ ^�	��?�ק,�IKBx�]��6UQ�d�_�߿J����K�����f��1<ww}�Q���I�!S�4�2?��ɴ�v���Tn�P��I�N�4�<)��✘,�X4�
��Q\��;��H��eY�M+�F���0��T�S�h���X�w3�����G��ح<w�g�Q���zzѢ�
�t�};Z�lp6�;�|tC��%	O�\7�������Ǜ��WãH�h�a��� �A�
�'��=��i� �J2{|\�ї�Xhi�)<��O���Jfly�jl�i�( �D˜Y��;v2�s)�]lUU{�m*�,߳���V���gFUj�6V�FAW��.��� q�>O��Xn�E�FK��j���p��S��Ď��2ʑu�z�R&IH����Ҍ�xJ|���߀Q�${t<��q�,Nκ�nr"܂�� E�f���IR���-���Bw��5���=ks�H���W(U[�5�5�of+g��r'�:�Yvf�\*
-�2+2�%��^E�}�"�������F&�h����䁃j��#�iP�e�♃^���9��=j�̓{���Y(M��j�-F�@�����j�==��8ŜD���%x9Ā���q�w�wq���q��	��^�F����=5{d�?���?�?������u&��Z��'�<���g~�6{�c����� IEW���b۞��K�3i}Z9ˋ]��Ce2��Ī��k
��s���FP�oC�"Ԑ\�p�7�3�%�tm�Q'�C�E���m!Ce�/����1Ά1dg�v������C!�g���Ev��8:�f�	ʲ������m��%T�OP�6m��v�S�7W�OM~Q��˾�C�i���s@0�	0BDO
+��4���h�q�@Q��~�R#�Ĺb���P����h�z�%uc����D҉�/��w��*��ӡ�����kή]�����:Ta�`Lp�/��@�G���H�T�=�87�ه��@|7O^Sm����'�����vB>c	#��g��Ks����$������(�Z͜n:�j�j���Bx���Sw^�&.�g/4�TK��� r陶�q.�/���OF�#T��z_X�֒e�B���Niҟ��������}����B�㧓���,�?\.�F5�r�Mw�v6Y�F���ƣQ���R�H����b
bu�!�&`�t���C
���DEfÇ�lZ�c�gׂ���&V�����yI���M
�{��=+�+�?����c�$�\<W�����G 4��W΃x.y4]r��mX�ȝ��&f#?��Q�,��^�*�1Vp~��H��*���"Y;�֭�6t
���v���/L��(�
�M��2���fk�r����Cd#�zrU�G�8M�ш�痲�\@B�r��edWy7��Q�׾���z<�\�6/@��C9�T8�cJC8\hEh�*v�j�ux�]�c��c�ވ1�����NL��-(f��w�ω6�=%.
.ĕ�+�0��hxИ�ۿh8)k�aٲn��!�ȷ��x6��0?�q���c�NJVaZ#�
N��\�+G����(�ƸSR�qg4�k��w�(<�YP��#
�1����Z�/�ܲM`J3n�0(�b���ˌ�����m���=�Lqz?$�p�SSb�]6~2��ҡ�=��w�m�M���m����(ޯ�8�K���
�1U��!����V�_�?��̊���\��Z�T"~D?	��7��-�0I���U� ��C�����Ea�x^6OMl����,0�DD�����u�]%bS�*���#f�s}�q�R?h"�������E��?���kr�'3�sBpp=�<�_^�b@��*AA�d?0I�]��5u9�(�|fI�)��&�Ⱬ��U�%�c�A�l"t�h�Y��:���0���FI#�$��Ud�h��X$8�G��,-�$\�'��cz���U�ML�6�5_.�F֙C�TX�Ac���^BX�K*h.�+�E��Wn��5Y(�j�j�p%�+�,��s���	x�R�Y��-M2A��I6�3�1I@z���D��Ӷf��+�L�Uu��O�ٸ�G�9�{:QK�T�'+�-���0�`�S@�E�Q�~6A}֒��h���>����Dli��T�z�F�T�52�\��mM�B~�MJ'�U�ߠ@�&mK�BQ�
�@�|ZX
���t���Y��[-S���mwnpjJ�~��'�3!*s�����g�L�8	x��$����'GSz��$�����~����|��x��T$㰽\o�3�EY�/V٠�i�����s��/��?n�	����8�ϲn�Y�~_�n�%]�^�Vv�W�;���w�/cޒ.d�d�S��7���<g+�}e��è;%Pj����v�Z}TW�suZ�UY�Ls��%S�W��R�h���En	ߋ���C �(�D�xZ�I�/��"�2�|lV�G4�
2������Wm�[��F~�oc]V))��#ν�V�n{�����M�b���V{Ug�F��Y��2�T$%T^��]<^A�V>���G�uj*�� Э��q�=�/�X�MF�N�gu
4-�
�LM��`6P��8�*�B+ut�.}�Ү�kWt(�K��U��v�U�\��!~G`<_7������u�e'�;��(R`/�߅�2�����w��㏝P��Ib���~AGZ���ٿ߾������=�|�
�-IHո4�z��{���c��^;�;/���2��}4�O�O��(G���.^��֘��iD���&#�ft��W^YX�#I��&�t�{���k<&B�=L�*����G��TF�hd#]J����5�vZ���wY�҃m�g������>�I�TI�J��|��ȩ7�Ҽ��^S��WB��i��6d�>�m5��Օ7!���f�̧e�-�g�K�Ҳ*ק�Q�W���bf�4�<��<��� N	Y)��D	5p�+Ģe�5�Z��Wvn��\��'7�V��UZ=iA�����s�Fh�b�7�P�(��u֖��.�$?O�
�c��?D��cz#!�;N}�B*�5,_~vq���K��'F�I���i\�\���ߘz��.t�(p�م�c˛7�oQ(��7�ﱏ���H�j�t�AH�O�4��eN�}/�Ҥ�tˑ!��q7u���+��q���]�(6��AU`N���]��נ�頼J����fu��?��I6�k%.*!��&����˸8Қ�9M�Ri����
K/��)L�X3GrGW�T�|-�p��l!�z��OG����-@[Vn��Ta-�TS�b��,��9�a�"o�=8����%E@�9�S�k��J|�V޿|��?A&�^���m�
�T_��na`�.���z}�Ko��O�ݚ<D�\JyY6mΐ�*X��z-��*����9�X����[R�ݠ_����W�^�U��9�*��4di��Kj"��N1��,�D
�@�Q&LY��1'��M�w^m.+t�b��l��S�
'T�rX�N'��zO�i&iOdJ��MU`�����G�1Ǿ�_{�����L�
7��]*���x���Y}���D'��~��
j)/��w�����	�X�qw�q�-�u/(�w7WGP�om�&C� �nі�5�	'�l�	's5q6�gSL�LF���W�[�[y�}���S���&�������b	��٩Ϡ�3/��Q&�a�t��]��l�#h�2���do���J�E&��̄��␣���R�s���(�5�j�~�*Ql�%��>ia-S�Z9�=�I��~oO���@�W��_W>�Raɐu5
gֆ�	q��K��*ц�x�U��)��+���mj��vT8�L�F��)5eB��j�|~"=��fя��(d��	��=�eZ��/��?B Mvk�Y`�qg�&em\aݛ������~utz���q^����bsk`A�(p����Dג/���R��K�O���Z#��R��p�+��`)xZ�"�9Q�zz�V��
��@d9�#���Rg���U��V;�}ߜ�&�.����_F�ʩ{'��`����q��O��Ez�b��ބޖU�!�������6��T�)�U���q�
����c=�ˈP��s��Ѹ@���J귣$�\;~��N/H*�Z=�M��`D�2�;�����*'Y���+w��m:��!�ʻ�r�&�cZC��m�j-)��9V����{u��΢7-�k�A�j���5���GD�y5��0�8�<Zfa,�WT\��O���0l=�&�Z�:p����P���>ۣV�y�ͅ�7@>����
���EY6x]��e"��@��O�
�S��jd�?�\߉�6#��s�3W6'P=��^x�qE��ƿ��n󱆹�=��~FV�>�8�؈1B;�Q�+�D��q[�|Ѥ\��
Y6�}+��L1jh�Sq��/�(j��%)��]���t ���6��d�yp4P�F Қ�ܶ���m��U� >h�V��������"���]�iB�!%�:������kZ�Y��������wsu֑K�Ҵ9�F��>-�,jNSY��Y�c&z��.�@g�_��1�JF�U'��^���j-��i1}�������
�>y"��ɗxW ���?�q2�~��@�#�;^ý
�2yw���<�4��P�w�VV��w��T��)Rz�m����v��\��g*��S��	�"���Q��>�g��AK��o��?42�0�9*��=���f�n �q&�2g�Z�Eɡ�"F�~Ue2G$ǧ�އ���W'G�z�GO�����F��m_�~n�����!ʏ'3���u��	��9�����%[�T�mW���M&5O.��@�I��ƢA�S�3���?��{"�ڸ����,̔,0�Q����\g�#�L�5�J��~yr|M	O>��_w�L`��0QqR�i�������m7�t�!�E�'�i�ljs�
ġR�.ԶRE�z���M�!�J|xx��%S6}ּ��Gi�H
2O/&Q?�������"ђ��qem56�\%ȆU�&��sM�#�5֬��U(�C��,�.�����$$�0/�ĝ���
�� ��b}2Ϣ��lZ�������ZL/Ëu�F���Dsf�&(�m��2l�5�9r��[���а�C�ޔ7-�|?�gpj+��`*#�b,���A<<|�E_o��r	�؛%E�Hm��nN���k�鹦�4��|-����l����k���s-b?d� !O�;d�e���%�C�*<$�*S
�6B�1�䁋���}���*���x���Q��Q�u����	�Jʐ�q��q�uH�<D�q��'g�K�nD��7S��"���\�(��\�25��ybaTڭC���w�(+E�g[�P,�cAG��ufw�Zwm8
�E�K�������t�x��[���)LP����υ�另�y��
��~�蕉*iWq>! ��߁1�K��f�qJ�	$Y�]�/�P�������w�?�'�sF��������r��o�XuB� �S�����+#�J��3;M��lƮ,
�2t�RVT�@^Z��]6����16QGQ�f��4�j:�4��r	��P�	:X�(K�'�ߺ��8�/v=��
�\ڰĪ�6_s�}�F����0��2��1IU�k�
مm�9a�N��X�(�p��1��͒Ah7���t�W$�'�q������u�2��v��逦��?Xu!)�~/B��
��;�6om�ʤy�#C�BsﲇK2_�u�p�4e��9K���"J���+��Ju�7��u.^�$*�J���@j
�	�<�˩�'(�y�2�� ����?&,��G�]\�K�j֌��c\�{���|6=�м��X��ы`eO���}��d�y���%�1o�\u�v��և�Y���U�e��:�<�#����P���Z���c)0��|�}����D;B�@�i-�;��c^���A+؇bv�4�E��*7�,Ժ��7L��m�\ꐭ�,ґ�5�l��ɘ�҄��	U�ғ �fۤh��w�e����"��z�Fw�x��g1�ljbg�EA�5-�U�T��a82��ݤ۠���LO=W����e�7�V+.@�lU/�?���]��|�Ų�M0x$reӏA� f��	�H���Pk�ؾ��l�r��*��mWc� 	A�8v����Ld�8Q�Y�՛�m�nG�����+ȉڝ-�l���㓺{��
pɀ��i��mK����3���H�ѩ�d�%��*V?��T�G�������B�@0FC %�AC��T������va"�#�	�
g�=�ǖ��.Ŷ)mj�m6b]=U��ޝ�?�9��==_�$������b!��n�bj�;��
���RS���w�
��wf��fݿ���ks�8�;���tI�-G4����L_����ĥ��;\C�?��aI��h)sws_�XҮV��v��Vv.�N�f:!_���^g:�>t�α����ӹp��M�(�,����
!ւT=�p�`�������,j�M\���Gmx��t�@�G�WI[�A{Tt��7[�\}��qf�B*T��01���-�n�����#M����d3G���k�������؉���,Ɵg����vY%�L��v)Yd�,�a�9Q����2�ɖ&���ʹe���LQvv�ث�@-f+�����6f��h�ғ1��ŃRz�|�PQ"�\��rX��r��/(ij��r^�ᆉQw��?�X���諚�7w0o�7)�$X�<�;��a���G��튷M���PF�8��N������}��=�Ox�=���o��#/dxX�p���N�d�)7��#��i����g��V�A'8�ȯ�X�{�
O
��:m�uv��WJ��fgGW����q�	�kg�k�-5Tk�O0<�d�� 5G���:
;��Og��J�v�?�:]��캰�}�c9��W�ʩ"ܱ��$�+b~��ۢ�z�'LJ��(�������>R�`/��"�j��x:�O�2ba���6l��K�N�ԜZ8��E������i6�u��[%�͕_QX�B%��`���s�l�b-^r�fT�(��aZ�Q<L�ӫhF�`�/����Y��<M��I\�(EI���,��
��t��%` �S��0���N&#M�6U�Ҟ,�x�(]���X�-�Β*�u~�CZT��9�g�9(�x5�*�V�v"�k= M�Ɣ��(���GN�?����
J nvh�yLk����*o�^���C	�lBAQ%������*��ɛ�W/,.3�I��كtWǃ���
@URX�
�vo��
$�BD�[Kw��]�	���i��,#CY�O=�u��}�8�C�D�b���x2����jɤ\b8D��a	��Wf�4�/�TC�^�Z��k(oP�)^��t���E�U/l�A�ˋ�$'��^T^��w!��D>}E}a�L#�tK�)���Ic�:�*BF�1��'�"}���ii�)zBi�e
]���3\�u�|���v����*s��M
��+��ţ�� �%|�uGT��TS2-Y���׵����p��[��Z�'O_2�
���B)8�R>����r=��z��Tc4�"��Y�{?Hk�Y�v����D�Rf�����pssȮĘ-���X��cV�Dl5�Q�I���p�vG�.hP���R��7ő����mlIVf���[<>���U>�3N>_�5A5�0��Y92���q��w�g�;���'��B�y��2�����썧�V0�����T����=?Q�lr����Y��S���点��4v�즶Zd�:WB�.�ƪ�����Rk�/��,�����I
��	���J��*��d����yͱf5�熅�^��d���h<�A"�պ����7s�F΂����?JY�U�����MR���q�
B�6X��#��cٸG��U�G�oJ�S%,�25���cv���Sf��ai8��l�/7�����Wh�#R�An��R��)��G�/)�k�:�_�V�l,�r�,N&Vt۫"H
X�RJ�fڋ����\�2P���b�jCrk����4�f�r�Z������!*!3R@[����ʴ�V�<Qag�&�?�� �z�Q�u���J�|j��T�jKa�
��`9�Q"���o�7*©�X"RZ�@��H�p6*�-���W��Y�v�4�Z��7J�q��ۢ"��*�2؆���3��J-��LAg�̸����"��͗S��\"~41Y/K�OJy�n#�i>���<O۔К�&���ZU!��
iە�Z�{��/�;3Yy�[�2B��&�B�|P�B<f7y�t2����l"��f����������r�Cf�W�LF�C��D��{5)~#�b�Q��	�]%�t0�&v���iB;�7%	(	���!���D�Q��������P�^כ]&po�`�&n���8��sQ�I�2� ���T�,D5����\%xi$G0D?ln�!Q�n�������Ff���]	ꪄQ��nu��옃Z���I�|��Hz��MM}NMk���D�E %х��,��"%Z��A�}�Ȱ�s]bhfB���E0J�,Þ@0�
���-�{����1b����۔;\�j��Wʼڼuh�x�z@�c��_G��5UN�Ҕ-�i�T�<�������&��A�2J�.͠���SCU�8��VX�W<�!��H�W$���s�dI;*�i�n�fHV�m.pZG-k��^L�H��F�ߴ]mo�6��_�LÞ�a�g^Z7�j`I
8
����Z"D�=Kn���;��I��|Il�x$��ɯ�ֿ�?��/
u����\T#/�^Dc��Z�s��O��N+�%�C���)e���;�>	�H�.����8�b���l�]�X���W�jCij�MsT��F�H�N�(7ۏ	{��?�wǟW}�y{ǽ�l��=0��!e�\ގ}6t| 3{$�C��Q)�cЦe:��Iň�│�!���+~�B�!�[����I�?c�]u�]ߓ�m0���ʳU�����O�¥w5���aW���n�ךں�9�I�&�cu?7�������?rCT��i�����Gʘc~�d:H�.7A�8DB�i�b�ii-vbq����˜�������(�i����O�~�m�/Y��$m%G:r�-�ģ��0�x>��+�ܪEJ�Ȥ�T�Ni2�\+��|+�4	��g,x��׫�	�f�SM�������,�B�ʻ�x����$E�?�Y�����m �-+�>��
�
X50�ŵ��W�X�7�2�3[Z�'X��B��uB���,s0T�yU�IE�sp>�
AQ^oA��ijPl@�n��v޾�&��F]��.�K��x���� 0����ք�jmVԴ��gq����������I��%J:���h���Q�Zi�Tx>_�~_���6���Q#�>�|u<b�qs'mC���J�P}�P;�(�]�O�b
�َ	l�!O��E8;�^:5��}޷.v��󁫯�G1Gc98����Il|~��س5+�󵴧�E�9*e��4qFњ���U�C3�#��5c�Hk�M�ʁ�[���B��Ek^n���=���9Z%���w�T]�m�x�`7��:�ΟX
�x�pE�܋x���(��Ɛ.�O�Of����N��oiS~9����ES��"��V��rl��Ó�������)>�8?�y^�l��ӷ�5�����⚪v�߆��j��p�E_�Hz�.�N�\V&��:�����0>a�^x�R�]^K,���oH�)��E@������m�N]1��jv�eCh�::0u�q�ы��aK�9�	O"1�LJG-�B�)Y��"�Z���y�
-
8B�A�JJ�]�5ӧ,hˈC�����_�����r�����ާ�\���T]n7p��n�W�.�y�+h��|���?��x9k����^K���ʒv�?�KUP�2=��vT0F����}X&�er�^�XOar)��[�F���
�����1��x4s�’@���i
-���گ�*[ͫ��4����}��(p���w�ݦ[c�0�ly�g��j0����Vgte�5��]�І�$�I����J��W}��W�󞃊\��t[”�ł�,#o\���>*�C�� ��+��<�v��9��^m\���vWf����T�El��`E`���x��|n������n�0�ޯH/��jƶ3z�a@��a
�1��Y�`ȿ�"E=h9^��҇�7%J�(ڊ�3�˟ �$Ae�I�&��I��i(��ܝ{Y�u�x��C�?v�.@p�ĺO�4�ĂF��C�B��5z���?bm���m�E���d
�a몘��mg�\�C]��C3m`D�<R$!pvd@G��⁓A�M��;�=����i��y���T�}�Y�c|T_c2�9�1��eפ��\�xE�G�>H0>qL�6|�I7�*��u\0�ޓ[H{P�=�g3�6r>��"=�X�>���!�CW�LA��rN_^DF�1CF5�EI*i9��q�Y�*l�,F*��t��qD�S��ű��?�g�/6�+��_[�k{6�R��\�1��֪֯���� �X��2�}��զ^����+�/�N�|�_7O��
ј7*�}�վ�VYǥ�Af��^��{�UTE�ÿ�恫���-T$�]X(��P<��.ID3�ەط�r��R�%`m�J(2tp±ť$��
lZ�uS$� fl_L�Q�h]u���9��A��#�d�|�6H�����{v'�B0�}�wmn�~x7��('��һ';{�R�l���@��L�pu%��na�9������4��)������S���S�L�����c%����OA���B�X�z�T�f���L]�oW��2�)����$s���Pw��v�'�-�������x���o�G$�(C,��I��f�(�?�=�)E(wE�����ĥ��@x~d��n��Y��^R��8�EAGNMQ�B�~)@�wZZL�d�l*m^4�	�����1���V�r�i b2>�(s� CV���l��;#"FnAwﶅ�_-�7N(�X����]Qo�0�9!)a@�=��&֠���SÖ�L�����FG��V��>��8aTӔ<�/w�;�ٜ�|�O�U4�G6Td=�u�E�X�s
jbTݯ�׮���$�][~���!d/��:S�Rg��F�=�Ǧ��x�f������Q2��s�F�0י5�bJ�.0טD�{Ƈ&"��|����K��[4���ܖ縺OT��X?�l��95�3L���`[\�e���=춥�흾�iD�9�B�S�E�_�3���4���˭*C������a��P�ze�ч=��.��C�$�(�:��Km��uh�^[��M�ﲪ�٤=����ެ���E�����{�|3�z�n�F�O w:g��!w��y��k�u�g�:=�a���I��q�C-6k�<#2!��t����4
��(a/)�@p�I|s���y��`ժ�:3H��$�vSzD�~\��p��4	?'j�P���v/(-��"�l��ܷ�/�p���~D\ �B��4��� (��/N��|f����M���N���5�FP
"_�r��R�����y�A�:+�~��Yo�p�)�N��TХ\
1<ƾ�Q�Or~��I.ƭC�̒d�V3����� ����FT⓳�����u�qv�F������-�@Gi���}�sɍ��+�z�\�h�w��=��%��/���d]~[�9Z�-E2ʢ"��F�
�ǐ����m���Bh4�f
����� ^.w
���NqOy���ov�{,|U���(`�7�c��^O�.�<s?ַ��R��z�Z�c�BD�Q�I����?6C���r��W���:	�n9ʺ�,
wFp��G�w�̈́���+��{!Ku<,{�><�/X~W������d�1L�UQk4&w��f���c��I���C1���p��T2���"�����k���zr�(Fj	�S�Ij7������$}_2>*:�K��a��$�c�U�!�_���6�QewqM/~v7�9#Fi�f��$́`N,)ޫ���ِ��L�w�?n�������!g+���霪��fϜc��VՋ�K�Whm%Q"�p�l>�9*7{�߳�6����(�0�9�4�v�惉+}�t�EI��Z����+�z�2݉�~4�"%�؞���Q��	�?��D]Tc)�����
��b���DF�^?D�m��_�$Z�#P�!Z5֛��Ӏ2��
��ň��JvX%��2�r癭��?�;yud�}|�E�66-A��c�v�ek��o�K���G�.�lغ�k�)cK/j.z+��iWT�!\^� {�D­.j�ihc�Q=O^O�R{Y�m�$��
�%�o�1{;�?lϵ"��~\F6�Ђ&���nR@�$ۓ
�~g�.)��l'`�_1��̛]�uy^�����
��&��m������+6����@1�I��m��/���^�ۋ�_�y�ʦ_w�=[��bR�B���63�ڂ�jQ���;�c>�����n6�R}&sT��b>�@���t<�M���|�+��e���(�T�ȣ$�b��٬��s��m]��얅�I'�cW���TW�cbT�.'�F���ڥw�yb�[�N��Wդ����nu��Q�/�M���n�������;��/�2;���\y}�v<>�@M�)�Ò���沽-��;LZ�(�PP�F�*w
��>�&����A��gs�~,Ğ ��'@�U��"���a��+;bu�>w�}˚?�%~`���"<�l(�D��	2ǿ3c6ɸa$�V������&,k�L���kLُh�m�R�{��
��G��-�f��������������oV�	��1��ï��/V�y��݌gQ,��6^z�J���j�ڽ�XxN��f��dp7���v�h������B��Eˍ�m�7�U4��֋�oJ�
�i�޵Tw_�����`�>����EV4����A������3�"�;ˣr�(�&�����Q�ºT��w����ѹ�7����ĉ����4�y][�/NJ˨W���և YȀ�*�>��{"!��3�A�Fk@��,[@�g��3���)��^����#V���Kw;����TC*T��ݛj��b�w���t!Kt_�؎�q�أ���b��ѱ�E6���F5��\�f77�tV�B��5�d�7򮌑�a@\1�iU&#w� .�N��j�.k�$g0�Rw���Y�X����-!�j[���y(L�^N/[�)�-W���@o�S��+vA8�U@5�|��{��ag��؏��p��3C��t��m?��Ub b��!&�Ls�c]�\E�?��8gh,
�G��"�!�=,�q�h�����of�{����G�Ђ��0n����Z(G��?�eln6��m��@w�D��MT/��z׬J)T񪊥�J��?^U�2�5����%Ƅ��NF�ߠŸ���z&I��f@��q��L�be0�n�E@M,;��5�!�.�mƦ�ތ�lA�܎)D�(~%E�:�/3�3��&���5�[�y.�x3<P�IC�������k1d<������� ���̪�p��ݺ����{L�l6�]AFr-r����7��r~B�������V,e9wb0���
8z�@��W�̖�p<-:{Y���{���L^�Öf������ ��X�x����S��Y�d��
a���W�F�dq�:�|�ޜ��d�c5�533=��_�n�(�J�p.q���J(�����|F+sU��TaM.��i�/����)gc�U�׆e���� ���+)��������\���ᚄJ��kN^l4��?Ҿ���,������9�'�8�3�q�xn�)O ܛ���a�=�+K��.w�0��|!rE(	��{M5Q|�b�;��%g������a�����1��R`8�S���N�����Zbux@|m�)�u7�Z2�3ۍ�vҟ(��ރ��p�q�t�T�z7N���AC,�,�������&��0u���P(�Hn
P�����0���frآ����
�*�O��Y`\x�"B��a�ל��g�1�1]њ�)����V��-�=_?N��ї'�;o�z4���}���tPaۿ�S��F�S<�O}���b}xE�7*������g��?뤮��ǃw���~�#0pI^�'����۳��v?��E]�"켛O����-�4;.P$����l�ڝd<}R���p��~ٜP�Q�W���>�Y��9!H�~_���6�
�aM.IB4r�fD�1�B?v �d�N�V�\�I��e��OC�lÝg�뿐`�1�j�>r�u�Xe��5ղ�����jR-"�l ���W���΢�۰��tmš��JE����W:/�eQ�sx
/���K�<�#{}<��AZ����2��)��W��d:9+k%"P�<�ػT �5����p>�m��!D(�Af��w�������9�u���b�������4�4Ti�iPq�,_�02K���-��4��}9,��d�f�Sx���?�ס�{���_^�C��g_�A���H����C��rD	���_O.T�,��[�a^$��窦�!v��vY,iJ����t��|�O�+kc�6��W5�)K�\.5�IUC�E%��5-�,EIW;�85 �U܇����7���d�&0����)�*yc�؎A���Ŧd3�i�Ƥ��s,�˽}2���~�~}sS�*E����o�cЋ��2
��P�\��N����P�F/Beׄ��?DB顠�aq
��zlz����y�	�S���
���a�,+&i��Hy��S>%���:+Kd{Y�B%3BCI���CA�7�#��[�D��Ytb��n�hec�t*�觾�=���#�|1���

�C�3��a64,���ȧX�\������+%6��ڲ!����i���V0��C@��㱱ꌫ@��z+)چ�Ί
���q(-Lj�
7i="�InT+ˠ��h*�@��*�h�ʺÆjH���(�0�BW�$�۠"CdzE�#��@�y=�HO��d4(F�f�)V�b��`������`D.�_��ʖ��;�L �X����F{�PjKF�_�I��E��B��: ����F�Ԫ���!4	+�:���}��(}$�O���]��ё
l�a�Z�ZG��w��ep�.�!��F�z�>�]L_Al�ER���p!`N�¶�BC3�TKm��I};���G:o�f���`�<uLlz�����m���j�x�<Mng#%�1cqT,�N��r�,s �|W��b�(�P>U��&�nx�+�G�q���ɚ�{H��:g��T��j��P2����T�NA]�_ۂ�Y��x����q*�?�߯6瘋hjX~�%}x�|I��N��ࡱ*L�͚�����t���������~I����x�-��Rm�yݛ�iϹ�p%��JgY��9����F�J���P�_��J?�-nj;���8L4�
��}S����|�X,���D�OK����)'�O�0,wr���FF{���t��cw�P��纺Z�y9H��E��"?_��U�emt�y,S	�ki@,V�ŋb�np���RǓ�r2:�[{�Fz�PH_���
fBp���O����Q88�4z�iY(F��AGdIv݉ǩHY��"�A)^�U�ٞI/������9�}8//o��(<�:�w�&U3�h5]GX��@,�5�7a�B"(u���(
i�o?��\1�����ȱ�H�cc����o�,�
���y�H�̬�Vb�$0�	�$���A"װ���Mg�������cGj�!E%E������؅A��BF��ū�rsOZ%:��h~��-4�B�ׇޗ�r���b��Ꮓ:�%�:�Y��+�iBL$k�E䣵Q�)��%���k^ARuB��l:�I<���N}��5�`5������j<ƙˎ��K���txe6K�Q5��V�c�F����n�I���?z��R�<�x_���J��,'��3
��
`��.�ud"�n�h�g�CaS�.J\w`��ԗ>�5�MX��x6���%��vz;��*�#x�0����S�T
�b=I�}�U���.�J|*g���I��M1̬��Δ 8+~����q��Om/&���P߀WN��zKn5Jb���+���B���UL/r��8kU��I�x]�:��a�d��:W��G���f���W�7e��Y:C��x%�^�xjCu�c7��h����k�]�`<F�H/8U��j���b=�/���Ε~�,��(y�$��!!��0$zs��$��UĪ�W��rp�*�FI�例��c�+;���8k�_���ê�Y��H�+�)Վz*��~S����؄^��V�|L@k֒�
kqZ|�o�V��5E��c�/Ok!x�;r	&-�vSb(���'A�wL/�x�t�`����V�0KJ��d�Lf����>	h_ͫr2�S)7���Dy���I��bjL��8���wj2�8�� �_�.w-tkl�%�"���`:�=��)��y5[��!b����	�1>��^g���ΰc��ȣ��\߿�#���sS�cF� ����6"���$�?�g尺��R%n�_�!�l3����8~�����̨�6��x����+M@_��5XR�1M5jUW�� �`�>jK�9��Sw�R.JW�k6f���s�Ύt7�
7��S�a�U�<�������_�P6W���e1�uQY�;�
�v�(4x	Bʏ���w��N��S�_}��#�	؏wO��p�A��v����oTo��7�%���DzF�rQ��c�z
V�'�iٜ%&D�0�h�<T�~{1߽�v�]�v���{;�ͧ�r���z��z^^�?�Y�>�g_�dc2����|���j/�_�h���7SU%F�/o���G�|*��x�ሮ��V�v������\^��ކ�����1�0?����c��t�&�Ugh��ޏ)�R>\axs�^�����$�
�q���0����	��υ�9u{2�2���:lMd�����4���q�[��ү?�ۆǵS�*��g#
49Q����S��J�8�����b����:z�9��-�Q�|m�"�`��N8P4��ݾ����yG-z�`�(	�Љ6�5À$�p��qs�p������Km{��ť�{���c�\A,T���J�j+�]
��$��o�x����6Ζ�j^��xL�2�-A1��bj;�;�l�;�tq�-6��h�;XX���ig|�V���մ~yO����)K�
��t2�?�NqX�(�~���2pi�AZo�
4N�Cw��!������wisϢ�5���k�/���r<�o�"m�g��`�����"��On� ��
��\��.��i���:Q��J
��4R����%�ޏ�`�x�ZL��X�a���GRo^�r��I��,=?`.q���:X��õ��$rb��x�q���O���!HS��n�U�b��}]�&f�V�28簊h�Q1���(ʜ��֓V,B�9u|� �
M�&S@[NeV�!�>KSNnn0�\�I�<R��&'�RԏႲ[f��K-9PG6G�9>.�a�ɪ7�qQ/Xk%�>iI��u�"Mn͠�l�uQwή�����7H�m�BU��*�̽��TI+�C�)��V,g�d��7��Ǵ,J���-��/{Z<����O�1�"�V�ט~���qk^�%19^�
�-�)v,���	��kV��[�M��_d�����N#�4��^���BX���5��Iia��F��1��e�#Nۼ���F�j�+�
cL"�Ǩ��*�*�v��et��W/8��̤O�Ύ
c��8��Br���@�4�?��Bf�P,��G�O�����%�/��"(��6�&m]�ٙYE��$�`K����R�3��u�yuS��Z��ƹ���jJ���<�����R+�6Wo֭��L��s������Z'��j
����l�y\���9tg�L�֎�-���#}���������6b���^��Vt���yL'D�'���`~���};���T/G/��:v���e�f�V��r����^
��3���$����E\�h^p#�*��N�!1[w1:��� =ش�k���s�8eznH���ع/��5��%t\<�mԷ���b��ey]|���z�����<���a+���~g�e
����}�xY�oO�!R�ۿ�?��ON��Kxk�ËtGǯޟ\�2���R��?ώ�������t|{3щ*�I����+(z��<sW�\��AQ'h�.?88Sd��f���u1?�k�{��?^��L���o�.��Vx��88?<�{�+J��)qt�n��9I�qHJU��4���i�o;҆��3V���k�X�ښ���ڃ��l�܃�F���3�ΆJ|Y�S��w� =؃�N5�w���\>�h�����7�71MtǜA�ԫi��a{uZ�F7X����ª�g���:v�q��4U�|����DP+��D+|?*�a���o�F�[��jq}��)	���b!�"^�Ũ��~f/�w�g�a���"%d��3($�������� o�۶����������E����:	
G��L����㾝{��7�[�tCY|�-呯8�����tt�(�{y?��M�M�?��G��̴<�o�s^������CF�_�������������
��^^΋��[��˜��cO��mf�KEB�>�
!�54��xji��w�pj�G��i�g��~SO�kɭ�r�v�z`���"#љ����@M�G�q�:�K
�y,��Qb_*��(M�cWM�^Y�����x��L�0P�ӆ왗J��M�K�	���m/1:��lk��r+�úl��xK)�cXZ�hOH���o)m`[���_��H����ѐ\u�,�cFƇ4�{ࣹ�Z2M�h������R�D�B���_5�=O�^M��ۑ�\+#(����N���3ڙ-����^�W�Rr41>�.QKJb7�60��˲��]��;j�R-�k�w��UjD�K�I��x���y9���
%-݊�I�ʠs#�8z/b\�Z��ݲ�`;���p����k�Xe8����^�+�A�D]q�1d��G~eM�� �}��a�Lo��/��x�wrK�'t�[q�@��1�Y��w@���~��o�ʠ������8�:�д++^�"�G�:B�$K8Y�
Y�w��	����@�n.���[[�t8Q��'(5�1>F)!/�MH��f��[��!�gB��J����5D�ϋ�Ԓ�є_\�c���rU������R���/�����X����f���!M˺{�u�	�؀Z�!Oq�X�dp����51_��KFM�t3�]/�-2F�����i:�O\FS������'#t�w[l���d8��?�Rߵ\/����貱&=Z�CT�WE$�9�AZ2n8�3;�˰�Uj��S�ҳ��g��X���[����(��ըd�:�wէP�0Hs?uT�:��֬�����74�{��U�o5o0�&��N�^��ѹt��k`0�H=��$2
c����S1A�\T��UЮk<�
���a֥hԚ���#US�j�O��)f35T�p��q��C�/�E�H�/Ωީ�2(�b�C���wT����ڋy��v/�վ%��V�����p#�.�3�B¦�0!�HK2	C�xϦk�q�ԎgR�Y��ф�
$��&�N��\���Ԟ�E�O%.��e}��-�����uE=�jel0��T�e�0vC%
-D�0����I\���_WfY�Q����L�:5��-����[���<���_X$�*b�
/����XWXh��B}��
��:%�h{��|f�U�:��@l3��_���TL�&�8ȝ�n㝎Šu�QQ�X�=Nj��h%�zn�Q��*�����8)���\u5�4�0;�ٲ�׵4B��@8��n����x؁����CF�p�5D{`���t�}���̒��#�n��3�6,�~;6��;"-mڲq��ڢ�U��=�K�L8�����5犰����٘d��$���ՆS�(�l幤2����N,��[���WD�5+K\V�U�9�A?��h�ܥ����`�F�He�CL6!Ǥ�-�+��ۼ:���{0���G��H�JOr/ ȦAE����Lܱ	73�����9�B5�C�^�^�0��Z:C�>ٶ9����{|;?�s�z���f�A��7���f���d?_�9�
����!'̉�=�G]z��͇a�*��\�,� ��*K���ZZ0GsF�_.Ϋ˱��W'���9y�+�ߔ�xe]�|`���kq��
�=�$�R4"k/ɓ�_���L.й�v���h�y�d{ JO[�?��`�9����w�L����'
i(�
2���Iʗ>CX;�����a^�f�ǂG�W��+��G��Zql)�Ҥ�"��l�
<�m��$�M�R=[C�ю�m�ߵ�yH\l���g��G��>Gj��=�y�3�!u2l'oϛ��7�����^��^��猐T�C�����oO=؝��g�}c�@`y�Զ�j瓛[����ҷ�=o���D6�bfN�֒��UF�sw���^����9�XE�'G��:dR]շƫ���Reh�4>����ٹ�+K�����Vrf��>%�8QR�'�����e��n�x
�����^0n�y{^Zm:AMfrz=Q
�F��`l���V�Y�O�;�N�zA?��L�;ǘB.��c��%X�޵�lm^Ú:cI�eCb��^�Y��R���q�lW��飬�p��/��"�!�̋��\zH#���-�$�MX����������U�Fe������s�;
|�d!��[1��k%�1r>�Uƣ��*�	�IM����;׊��;������w�G��am�(��b�4l����Ee֨�#��Е��zz;������k���w;1@Y�t���염Zm�eS��16a[�s�BU!�_��ɣm���zOb���j����;�3�ʦ�-�%k� DF����#������h��#'3w5K��$��+^I��x��PxQ�+_t�Z�S�za���V�%�]Y�o/c�e(go��	=�FH
\�l�D�p�N���1
� kuP��_�=�;���鳴��Ky`ngh0��H��c0��;rb�|��%�aؙ�Q�z��s{��}&�Ҁx@��e�<>
Ww���;c�㪵�
kQl�0Oo�VZ���ӧ�X�]H�gS���:-�Q9x�:ƞ��������%Ɖx��r��AQu�s�~8�dP�R�� �<fϡb$R�,W.�N�_��9���0��}_k)�=R�N6_
�V�/�j*wՊ���F�l�h�N� ��Tk�i�����G��ARP�X�����5��;���3��t��LW(�E�3��S�ZS�+C�ѰԼ�s]Ի�궱��Q����X�SwO5ĭ-#���g�%�_��))���s�D���ɸ�M�L�3Cg��2;]�lGZ��$�"`����-�/'-O��nn��ݪ5����P`sgм�
݆�����Z�
�$���L��.%x�vBՈ�łj=����H�:w����^��p/r��Qd�(���=c{3�yh���du�J�J�U�s�T�&��B�u��h�R�خK�}����]y~9,�/���]�n�0��+��-��k���i{�q��h��r�"h���CjV�V|�%��E䛙7M�z�541֝�H�i�yO�X��Z
��͹�u�0�H��$��P�no\�o��^R
�j!U�b}����ZD���޺��a�|:���bVisr��v�����0�J�r�}#�ψ��&�X��1�H&Y�!���'��yRcp!;�3��ؗ,�~�7�����^�9���ќ(�Q=�B�L�pR�/H*<��R�� .]Ĕ����Vt����L2%�s���a�$L�}q&X<AX��H|��X�\���E3pk�0������Ϛ�"9����l52�kHm�W���	k�l�ggNٝ%ˬK�5VNZsf�ڳ��7�Sf�%f&
T{��ÞY�I�rơh���'���.� 91t[Z����_8��1z����R
�U6�����\���%�q�<���tl
r8��Z6P��_��
ץ�u4Q���I�
@ں��g��e.m�r��pie��x	F$ˀ��x��U�sیNPs�m�-�/ӛ�>��!�8o�p�CL5�Rm>V��St�)���u%{ޖ#�[��ʚ�i�nO�����\���O��}��'���M�$!^"DNW�x~Q7m~�?MS��'ۏT����߉�-o:�/�ٙ�(���Sfec����5c#��-D^K�?9F�ZeK~�U^��O-;�@�3e`��N��/%×���6��@RT���0�����TW�?M�1gwT����hݱ��6�q�nCf0~{�uT�g���ʾm;f���nK
!`G<'�F����bF��[9u�� ݛ^_iF�����$��P-��t����vh�����n�&�#��WĻ���6O�����<�#s�o=؞�>�ŀ\Fs�63/�v�?��G2���>�Ŵ��E�	�
�Nn�JT�Y���Z���N�l;H�(�'w��U��ڏߚ�p�5X�i�;�Ԩt�)�K+�4i����.���㡵Qh��!{C�ی�������;� @{O��E�h���8+���
�������
Y>`�'�����?>��K��¤tU���'���w��IF"%�=9�d̒�N��d`/C�A�0�H�}�E��N�	kT������DA.��xxS<&��l�i�|�(HϪ���Q3�����FӨ����X�(�A3ր���oM�r�Z�%U��<&��ui�B>�Gt�
^���FB=��8�|����KD9�����yN�I0���S�:]|��/�?>�^�
��#E4���B��
w�|"��fnn��B��DIl����i��ƕg�e7\���<+��yOÒ�a,�`ij���,��j�@3rj�B>$>�ERqI\s���ko�6�d�٨l8�mʼ"H�
X��~HC��T�l��0���{�)RV�d�ɖD�G�x<ޣ��]uy��(�jȟC)�K��,��)!���A�����Go�e7��!���'��B+�?ӭ]�drz6�Nf'����������x{�<��.�g�����I��{��I�.�3pB�?��?/��O�	�
����|q:y}Ɍ���=ܼM_gÏ�'H�B���G��9�dMG=��Y%v��y�����L���
�IHǭKNSҜ��Y�!�|��o��Æ��m(š�UP�=����;��;��m��o=�z�4�c�����9D@�����8.�*��'�,[����	�I��������Q�l(�
8qM��{uZ���mձ�����__��v^>���1��t7-��Wp��h*ѐ�<��V��&���2���q���ш7>����mp����3�W��<��_sZ�`���,uV��¡�,���1SΙ�p����r*���5��Ssh�ҩ畘�@{HD'y�-W���6.5�Lj��#��KG`t�>���P�	P�y�ߑ!;�}�)��r���ƫy?�~P�q��̀=��J��A���߭�2�<��yx�qj��HRha��t�o�A3j��X���egr�NBÞ۝�0	>�+�_�����/�saar��A����/�\��]��|�
n㛰��Jd�.K[Y�k����'K_��R0Y~nV���
��M�� �p�Iv��d��D�V�u7���a����h���1�V��
��lIT�'�i���1Sɒ��-��IHmѯ��،���J�Ī�ؔtÒ���!.�({��ë3�o�ީ�s����m���7���1��$U���DC�Dt'����	��pp|���p|���n�M����]�?r\�6�+�N~Q9"�M$�i<��D}�*��əˀ�ѓ�dӒ��D�W:p~�������;�ߎ ��Q����%^D�JȧY�D�R�H%k�eP��&�2}A��N)�A�(H�v/Zp�(�Un�ڲG�:���h��r��u>I�#�
�x[	^?��e��	GM�*멤c���K�B0�>+}���aݘ�͜��C�BlxP6z�w�Ly�����&�֒r��[\kI�2}���H��mu��!g�p�It��h}�bY��"�u4�&���n���H�k��+l�L�#�=u=3��e�6��y��S�V�Q ؉�J�
Ev5��x��*�&�I+��q����P��eq�FnO*�t���|Pb2u��#�=��c
��Ŕ��sc���{d;�7du]�sAp���c���Y*�o	oSb�H���g��.�Y=��sTM[���b�dF�b"�:!�<�܏3
��{,�co�0�g�"bL�M��gb�Q� |Ԃ�9Z�6e�Q�3|q[��`���}�-�"R[$��0�
�(^�+Ӆ�G�|
0��$B�:��z[�q'49H�F�x�޿�5�|�+����T��E�XM��j�l���=��[/�����|�8��k
g9�f�T���C��k��l	UT��U����F��(��1}�.ͽj�' 7��Ը/�_}�;���V�c�G�ܾ*>I1D��;i^��ĶX����И�	�g��M��]�n-ӵvf�l`��M�B�O�	Ât�?�8^�����m�������j��7M�#Y��REys�X����_}�L�P��)��LwZ*�����A�i��0��>�sѾ�{��臿%H꠨�pc�0��v�D#�p'Ϫ���H�x���������O�h���jl��D��Tc���&FLQuVP��`P�4�x���/\<Q�U@膄wS���iyB�)ǭ��v�~�25}�����f�BPFc%!|�ybx�h�\(-P"=��~&ŌՆ�<����4��w��@~l�4�͈ܓՊ�s�u!HB��B&�S{s���`k�����T�S$?�@�p�JL�v"�TJ-��[
���]KO�0��W�[����*�� q��#���"�4��'�l�y1Z�pZ�$~�I�8v��g6K�Um�&u[hej�g��SR\
K-���"�
u��/wq�۟`!Ά����r"��.t�n�
�]ؓ<���vO�Z?U���������8����g��Ёtd�Y��P!5)|�n��D�o���	H�FI��Ѧ�uY��k���,�by_��qRǵL����o.��|�dnaM]���EIk�y���M9�@�"�c0�i�>�y�0����G,�o'>�'������'��^b�\p�XL�pH�&usT'��Bc2�Jˋv����h*<:�sKx1`(	�S�E|��@��3�� ���T����M`���H�&2�A��}�
ì4�"��	�=��NG��ӌ��u5��E'�6�UM�|�|H�^��΍&F-l3�"\9��)�YMf��@����3���f�ʯ'����Ufj��-y5-�|w�W[�_B�q	��^�Bo��/(�&���tp�@.�\ɫ�ߋRk��VSS
[4�2Ac�F��������JX#�-�c�QZ� 
�A�<�z`(��.��m�)I�c�jD��NF!k��FGaK۱X���+�Ӂ�'0�1�H,K-JL�Ek�����`%�j��|[� �*����$�b�^�R3�E
���ˏ>@柴����h���32���o�ϐ $p��*Ž�\b|��f���x�WJ��fy���k{�Y�I���XY�xx%3�!����0�Ȝ�i�:�
h��K������,IC���(�R�7~��JΓ��<P:�h�̬�+$5�п��V���mnqiR�u���)��&m;M|�€SkکZ���WWOz\������c�z�PmJ+�nmL6=k��µF!+�ャ��/w;P΁��|����]o�F�=���^l��a��N�f�g�=�a��V!�,M���_w<ݝ$w�e�w��x�#yp�����/�t��f
�7���W��/�Z�+���}.�=Q��o��~@0����`Nb�n��gC&I���_ ����4*����3��
\�5��Y|�'crw���z�'?�>�4CQǥY� w��r�&v�w)T~34;�/�bH+�uY�F�����Dli�ƅ�6�EV�l(����9Nb���k�Sʑ�w�D�*�gD#|��I����X��s3�H�L�i��arnsزO�6���6ʮ4����+�=\s<?of1ڮu�X�q�8��ud,�p�.�J�p!�եK3�{����0�qr �`�u˜��u9����x�9)�I�(��:�%�/���\оg~�؅���,g;!�V{��c�j��/]G��>HѓP�h}e<fު��s-ν�=bR��}:��~�*V���i�5Rx~����O�*�F�����	|zk����)G^؋�=	��!�%����%�$~�tq8�(^܉�:P�/˺�B����9���	
�X_��v1�Ќ��l�|<�_��nk�mf*��)F%��P���,��p��Ҧ��G:��Ԇ���s^�-�k[Ԁѥ���0i��>Ǹ6��\h�G$���KVݪ��?7�5U�iyo��9+�C�z^��MB���i6�c��L�į;�܂Y�Mw-�ί��-@�[>	��ɂa�0%�&����-�^�@�%Jf��f�z�Y�>�'˘6(��e�C3*��c�^�	
��܈X-�³�y�,��j

�RƢe�hwiPQ�`:�
BH�������ΒV����y�G��cnF��
��mo`zr��W_D�uC�xA�6���Ѧ1�On�7s�t�j�#�y��u�1��n���S�I��rCit�4��"����?r3���HA����2��nI�q[�����иY�ťi����|\�5�IV��U���
�TPVO����ˣ^�Z�:��p�9.ICroP�B�%��YMV�Ϛ'/KZ�����l�4�~5�3k]0��-8��?�3D������ ��B��ݞ�Q�#���a���c�r$l��"�{��)�h�i4'�g/T�Lu��d6���ߎ����+
_$	/3!�^eP�'����֬G}�OB7�lb���z~��0�Af
)Yl��bJ_��t�3����
��&[�I744#D��ٙ	W�8�k���C�P�<?�?�^�r����ʠvEӃ�;�Y�+��CE�[^���G��x����酣ߨ8f2�	���7F��بz��vps�^�:��J�P�m�2 xΪ�/�%�,x�b�Q���E��<⋾��� Y�XNE�]�f
(��@��%Efg�y�錶lʀ��v��������osE�}�����3�T�nZ��j�=c�:���zG�t���ħ!)%0 r��˟�C� m*�0}�GP�� ������r:���BA	����{�)�_�^}o;��}0�X�)��w?~�6�nn�)�H�s�қ%�h�[�hܵ�AA��I�j�*�vZԞ)������˒|�ܰm5�SH��ő��A�	i큶�C��ܭ���)�F��>�5��:���'�CD��ˋb+|Q���:�~�Ql�++1dѬ�5��F4>] �����H���O{G1~��[љ���+Hr@Qd�]k�@�"�1q����d�u1���K[�R��-'��f������Nwq��%�w:�����,週���p[��y�Mm���W���Oxo�r��5���Y�wI.c�^��xO<�i
+�r����Db$�=ė#7�q[?V��6ÉnW���@�.$�o$RI(�ܝ�B�ܳ�`FXA��k�#D��C1[-+���z�.�ȕb:��vE���7?�Jijx>���$`b>�ƾ�M�-��Z�X�$b�l��.`��~���~u���F��dK!�&3��z=8/�~E�Wfş��=�=��r�K>��T�(s���#�@/��DO�S��6!D��cKYJ~rV���4�������@���>QO����r�zt�H��y�,+:����/A��j�z�P�\��5AP*���;/��
�K ��I�,w��|HW�nv�rM��O�:�I�AGvH���_�O3V����A+��f.�nQƜ�j��.�G��E\�P��
�a1݂�
j����^7���a
��1̰����S*�����t�C3�L�/���k��,i�:��k��[%-|
X���8 ޷�A6���c�����9!�����h&�"���흉x���v�+��rG�ّ�
2��������*0D^ظ�AX��6n���Q�5���nN{ɇ$��]!�:6��n���'���"����`�%�Wp<u�j_�`&�G3a���2�ע���c{�!B�������#��U�Ԃ���76�]#��]s�f���J��g�F���۸(�?e������l2��OF�����8��q5<���t��@�nV��wY�$De|��K�<G)��
��T%U~PY�~Lt|�4ǫ�EdXZ���ԍ��cp��T���ff�/�l��(ZG1�E�D��VL̾뇱Qd��On�U5�����q�s��lҖ́��i�M�_�Rph��3.X�猃I�:hM���q���>5r����y�X��들�.M�?Y�W�',��NI�Ia㧿J�-�UON�������P��r�R��nЈ��F1�	>�sD��n/�/����0��H���H�)@�u��SA�ʶ�I�9h��(E�r���� ���A����]o�8콿�yic�)��d�`�= @�ͭ�#�< ��ⶸ!�?��)K�����")��(��(�(GTNv,Q���� ���m�9��,9��e&�P�k�"�:r�B�ݻq�A�q�vp��o�P��\�?�tf��~cˢ����r����
�DU;4"��P॔4$K_E6�;e�@�eO�E3��g�I-Ӏ��`[�U�{������l����{�
I�)�Uۇտ�u�t����c,��>9N�J"[�.�[��MMS&K�_�/֩�9f2�(>�0��g*�@�+y��u��=�� �܋��\��*�P�x��ܭԷ��+!�\�݁>B�v�"���߮ڣ#GňՉI�W���>���]<$�e���n�[mN.�Q��)�Yc�YĔF��P�5h���R�W�ob�j�clʿHn+A�h������.�,'�xroB�]�SFV�NX5�p�_5r��v�̈@˓4RR$�����6շǛ��tn��^�T�f1�
^g�s�1G�D���L�$�W�.���ep�l?2m�1skK:��YP@=���N��m�����U�T�!fG�u���;ק̫@�C�!�qᾒ@R�����xv����	,x�9Ƚ���A�2�"�v,՘fM��R���,�a��"Jv&;L�s֥�� U���Z���#d�ц����;�#�����q�
�F�z�|\D�yO�˺N��Wu~�t��iK����i�u�rԭJ�ͬ���K��u��rx<�#AF�㟞�Am�z�����8��D��5J�"�`�/7r���Ђ��)�ܜ� J!����(�5��g����
蠥���Zx֧���+�3ԭm@�ou�Ϊ��;k���(��(0O�W�ёO@�|pqԋa��Dh
�j@�*<�����E69�L&���>�گ�=��gZ�$�O��}��W����)Z"��������b�]5M��+D��~�$j��r��"
,L���{Q:�L�3���9%��‡��=~C���Su�ͳ�Ԙ��9�������-�Y�=tCq'ɘ�Q��K����3�ˉz����Ç��G�]�'�,W�0Ӥ�ph�N[�P5�RxZ�Bow:��~�l��R������3���O
��ʠ�|�Y����'1���Ch�I5���W��(���|Vw�q���^�5YG�l�:���x�Xf�����8Ÿ=��imU���C.wDHG/���,�8�|��.aFn�/����~i�Ӏ�I+e��6��V�k��r���+�x�;kV��@g
���T;mj�G)�v��
��φv�<�/e�T�z�������y9Ž�M�
��ж�0k�ַ���y;�+��/[�&�>H^}4~}x�5y�q$�n������lZQ��C���Q���MU�����\H�t�1���oY�:%��|q��Ly�	�(6��!���4�Ʈ%�}h[}�����R-UU
��=ɘj��)3q,�D����F�h2�3r')c�_���t��_���?��rQ~�?���弸8/���g��zx�<�W_U��~�nՆuxe���T=a �4 ��au{��4 �Q��1��A�K#�`O6Z�)37(�8=	!���oQ <6�;ʳF�F��*\�1���������o��{�
��U��']o� �pMC�U�(ZAؤ�"��������׻��w_ڰ��x<��g�-�dT��%�\a��*eM�WaU�~��t�������K=�����I�ۻbq�9�YU2��M�Mj.(/���t>����t:rW��z�"��D��R͂�J��>�c�����.,�kժ�p�z�mw����%��{�|��Ly+���1ȉyL�@r-�h������m*b��8��b�]�qwP~FK�O��l�=]���o����b�VV��!+z���1���
��s���|��_�*� V�k�NA$G�D��=H|��ݻ0�W1��.&Aʞa��IO�uw�7e�V,S%d��d���)T��X7�����ho֩���B�|����7�i��;?�Q��k����,�eO4#>�(�y������h'S+�����-*^�=¢���=;��|Ꞝ�+��$���&���G���Ɵ�7����ޠsv�MP��7:ҠF�WN�񽜠@GWp��o����}�������dp�鸹�\i�`�_��@"� �6w��Y>��������}���`<F���ǝQ2����B��ԭ{)�o�ʗ� .سi���?06�[��{����%���l����<��^�8.X�:,��5���D4�v����d�o�P��TU�l�e5U�+1���	�J;¨g�`i��x�yr�E��  �Zzq�ݸ��-Gn�0���ǹ;_�j���t�/M��z��2b�������HmJ-9��p�yG��N���mNϙ����	��b���l�5��/���.����w6����O������0���GI���2`>6��(��p�9<F6����܋K�5k�hLW��.�5���EށE�x}�!:��p��e�x�s*��;b_���(q
���y���e�W�I�|��d�����Å���3s��|U�G#Ryf�G���YmRڷLr��+ {N��
�����8�D1i�	
:��TcTFX�˫�H�Φ�t!+���y:^�j��$l0�y�+�5f��<񢿥����B���n��7�I m
,�ۉ`��x2���r��f�)�U��Tpy�V�2�U|�Us�hq*(���Zc�Mx����smI���3LSV�~W�-��b��e @���m�R�̧������Z.׀y:�7=�(�NTJ��lٛ&0�� !
Y�U[�[:U�M�hF��3l���:�Uce����)(!ݚ���Q�P8x9���*5�]+���]��=+9�L��~>�N9�E
����>o�0�K}R�7Ħ�Q �<x�λ���_d�@d��a�62(���B��W�T�3Pf�x!�ThT��N�Xє�=�a�3�W���G�r!^�(���AR�:����;�x�u�<
���8֫����
��b������c`���t���5+�.Һ(�Wom��l��T���@KI�0�o��=ҥ�]6�Ԑ!&��B��[pL|�_!һ�4B�=x/j�7��A�<9��`��ê1`U���I[ǏL�!�YȴNΞ���M�a#�"\M%����U^�ڞ� �F0��\t��V�;Ǹ�2��C�2��H>4t�X����7v'�C:��ӹ�� <!����'�[ҹ�k��9��lk�30��z|��AP̷	�F����X�؟+?�F��Ҡu��a�����?j��	ܜ
�Æz"����
�򼟜��K@�:�i���̧7���v1㥟�  �T��$�*��+�2Gxى� j����ǵ;T�j`����6%ݪ�LDZ)�O���5/mΣ\�I��t
&�\V0mT-
yqG�ΫC-#�D(�!�(^e�@h�,L,,g�P�*���.�ޝRտ����m��e�	�}�E��:�e���ݑ��QDŽÃ`�Jn'�8�=8\PE�˷BƤ�]5cM���y���n���Y&�[e���jB��v{ H'�]��#�k=ˡ?'M�i�e�/+��1S�N�Yg���%��Bt
��8����N�Xf�v�:&���B�{�J�c�~�ũS���@�	B�L�VT�~�{[���ߣk��Y{��
�-Ǹ���:Ԗ%Xan�/�A{�]QC|,����o��LC	ӥR�Y�!�6�܄7B��yXA��d���a�Zm��H]>I+���[���2VƋ��V��h1^���*Q�k}�#�+ �d��Y��H��<ܱ7m7Ʊ��$����!}���ryka�� Dj���(=c��=+�Vƛ�c�]4	�|���`
t�f��O�(7���'���K�
I?�(颼�d��=K�B��b�Jn��D��%�5'��0$����v$��sMzl���#o���k��z��g�+w�����wl�GǦ�$<5C����oKy����tJU_CA������j�
�:�ƫ�_�TU�:�#v���4�ƘC���Q�����gC���+w��q]��Ǔk�=�c�f�fXб�=ơ�BU�46�{Oe�v�|��FT���n�|t��k\�����	V��6���Ͽxؚ�Et[��4�?H\�ԋs.]�-p���k?�t*�����$��Vn)}Si�i��GU6���9Y�2G�DM��!�!��K���̀<ރ��P.C!j�щ&����g��#$��X.G�"} s�Pʮbu�>R�A)X��+�-j�(�z)��+��Le_Ѡ#�������+���*
��F�jD�B!ڽ��iE�N"G-���0Ŗ$��\�Kg2,h\���V���f�)>��ٞ�:FP����m��H��.f�;�������h�{�4��]�F��Ҏ�M���2B��/�
�M�&���_A�u�����\�c��0�N^��[��}�VJf��
;]�Vx�,�d�7���:�D�����t������x-r�R�O\d�T���4�ܞI��I;�7>9���޳O2pq�]0����Ba]�Σ�9a���1u�A��Nš�sR=b2޾5����cw
�j著�BhF��$��*��Ğ|"��jx����t?P��
�izEk��!����;�R�7V�4y�m(ƑJ�^�&�	+ï��)��ʼn��Y�ʕ��s~��V{y�0���k1}2M�7x��
R��*�6(����i���W
��^"�y��Z��p�E�	��u%�'� a��O΃'��q!*f=(�<�v���&�����?u���K����/�,�9�z��-S���6�:��a�/o��n�[������.�༃/�'�i��4T�l�o�9:��B<^	�O��Ml�=��%zzA�+�]v��g:3r�'p�':Џh����k�д�^q%���g�ӌc�����Fe��^4���7r)eK:FM��9��@<]��(��t�ڐ�
Ž!����csMlڳ�I� t�=��|�@��Ӟ������-�������n����6W��:�8��`,�wzM��b�ʹ�{�!#��V�EΉ �̴�``u�_��Zd������YHW����[���H 5�H#�=v��5č�����X�Fs�X3�g�t���5�Cc@��R�@*H%f1iy�mug�$PY����n4\�����]��0~c"O`�/Ơ\�'Cf @B��]�����vlck��|�ϣl�����C��]��X]�M�V�C�5��;P�B'�E
�sKqJ����3  �Y���xu�Ȑ8�N���BxG_kfj�Xe=�B��H��s�`h�E�%��N^���SyP���Lb<$j ����0���D�8��+�;��U����Ԩ�lu"cZ	g�^u�'��h��LUL!s�D��X��-���S_��a��(&L��b9��I���#Ǒ �۴)��P�9�^TsA�˚�D{��+�w�J���RW�W�S��.�m�c7vs0D	��F2<P@
��󀕈Z�BhIJs�8�$ �(KY�Nu"lYd1��&8�-3�$��*Z�!�X�aN
�8D�B�1���]O1콿�����V��6`�F��}	�S)��V(�u���؎��$Ǎ�rq�qDZ�J��*��G�+/C��[�M׎�@C���,�%ڹP��������r�U�j)�/jS��h�z�\�Hv ��/J��"�3�pNֿ��3ZɂB�/��U3=N�������F�B*nL��@fB�c��S��8|���=mgN���=S�R8����Sh.A&�tZ�?M}�6�{�0,��؋�ؚ'�Y�̶�D���FM�^�����w�]��l
@_��<߀y��<ޞO�qڕ�j2p��pU7�S_�q�]|�D[���qch��X�'F[N����{l��*�7o#`C���/Y��Hv˳SBA�vYg���y�}�B��wܡ�O����F�V�DD��cD�k|�ZԲ�%�'$�׌a(�0���Wp��+~���)%%��A�3m��q��v%����?&�+��z�] u���L����i͕"�����aDQ0��"�,d��ﵶO�Z8�*("Y��#(��_�o'��F������Ĺ��ǫ����w@�;����I:<i�7ڗu�4W-�w���t#��MB>eU)>�dB_<,1Ҟ��$����vq�lt�P�n��[������wՋ����~z�?q���Y�,z�zs�d�8��b���x=�$��������os,I���M}��v&��f�a.�3��=^���6��qM#4`?X�������#H��*�)�;���}]LNR��"M���t��]9Z�t4V��X�~lp�]OҘ1"���3']��O��g�˞�^֥ߙ�Ö��I�D���E�Q)V��/z1�A!M���3��!KHƌ�B�p#��u�-Sp�x��ޛ��^9!Dj�_M�j�p5d�A;H)�]{�qHǩ�A��@D%$d(�	\Y�f�ݥE|�G6Qrm�1��l����f�33.$����.��a�H��V�x�2��
w���*i���T
��1L�QE�����Q���As�r�N���������Wv}��q���'O�D`Y�)�oK����AvGX{Je����^v�p���?T��	:�nZ�9d�3B�n�4��K�f�qw��4
���L���v�<���ep�H�����Y�;�fw<�Toߍ?:��a<e�`��Ta�V�����6�W�Y��ML~�'%�����[NF9�e���A�f6�D�`�H����B)L������a,�� z~R�Ƽ������!�v�Jk��5����hS�P�Ǧ%������:�/�N�2���?�A_7\1ƨ?���\>�s�Ӌ��Y�շkx��!r<�/��G��
6ݩ�~w�����ks��{~�o:s�m6��n:�J��(�:�Զ|�|����Q�u�F�\������rW����K�,I�I���y�Yy��J=�M�D4+@B��v�7m���u~��j�;��)��4�� �%9�ù�m��o��0�1Z�}H�p�e7�&�o��r9�zvs�藽�w���H��y��jFJU��cx�>���[U�*�8�Q�E�oS���ϹY���`9����9V퇸��VX���(����ɸ�T?"1Ch�_eVa~����7�+��8�"�A�W�B��p��B��Yn˿V��r�8v��psG[�y�
�Z�uhO�����̑�¦Xb1�}�l���!��hN�O;���⃱��0^K�y�z�����jAR[߈<�2���O�aͻ*�⠬��4�}�H\
�C�n.+F%�@r�`ˬQ�md�N›��/%��yrX���W	�pn�v^�R�vmn���s]����g�B;}:6gT�c�6p�2��2�O�R['�0�N�(<���n�{BN������_�?��!4672�FE�[tB��6��Y'��Ŀ|�a�mc
Fh�`�����Z̪��0FE��u����`�b�݇�5��Xp���mg�]͠�Pgv�9_�2�w�㞰ʓ�{��.��`���Q���bt�c�A����tv�rK��E��W��a�n`@5bav�����sl{�~��^y��^����r��؈FF���Tŏ�"��*	;��֫;H�ۼ�����8s)���w��Q��O���'f��2�k����l����߂�=�-s�D�����U���a6�e������ K��ӽ!dD�/��ry]�vw/�/�W������4/�7�x1�2%���b����H����E��/�J�-F�����(m^���_^����<2>�X�_֒
N_v{{�!dc���
I���r�Dp��y�M�ȕ4V���� ��g�ׯ����P��98|�O�;5К����a��:3uJL��t hl����;I�	
�ɧҟk�3�X��Sn�Z���T����N⊃��������`ǚ�k%��`c���l��>�-�F'�� �l6}f)U���j�&�D����I.�sH鈥�7�)�I]�����i�w>�5�d'�b'��'���{S�
u��HE��F�VqSr�FN�QuP(C=<+�gǎ�>�#S�D8j�T�A%������>e��e��jE/�G�6�&�l�T���s��|s���'�rE����dw��|��������Ќ�4��@eu:��,F�����6��m��Pk�[J #���3�Xi@���2`7k�yyčh�x�}�i���B8�O��쑲Ӵ������Q�cvǦ4ђ!�����Ԫ�b�k

�lgC��E�RU����_޳�q�����7�'�ghG��?09$��Ak,�_w�����4��/�h���ߣ[��������㉅��e�qd�*n�K�B_!��?l�kGƝ��]ڵ��%��`�������h���>��
�(�s���lxp�dh��d���N��Ã�����mty�Ы��e�ʔ;@��1�K�[��B�X
��YȪ���+�LBf#�"�{j�\���_䗭����LڤB.���I�H@�BA(BŁ�)�y>����C�'^hl�q���Bܼ}�D�6�
�f�Y�C���ACw��qZd\�jM��˻rvF-L�y�x}7EM���DלzP�x?�F:d
�t��X<�%OP
:�Q\��OD�G��:$P���:=�;=6�F�:T������B,�f��m�UO5��@_p����8�-� ���:�XX��xp}��C�B�
�O���sb�gފSXۭk87��UT�-VZa��Ʀ|w6f��_X;��6uc^zT�N��>��R-��&��@<q��l W�c
w�����s�\9{��$�,�|���D�fy��,��,�W��fYp	R�|��F��7]�PA͝Oty�'fs҄�vfs2^B�#�H��f�$��c˥�V�4�j4�H+�Ѧ۩N[R�O��Xɉ��N� a��S9��w]��s��cb�D�<�j�j@�˧�5W���cDG�q��WXY
�E�<�t���m��E�������^��3��h�]���k���}��*;�����':>?̃H\�	�h��b}
�<!�^�i�H����+�,z=Z@��@e�?)��#�2m��V����b^�~�n��C��
u40�Kĕ�X[���;sZpJ�ɲ`Z�I�}P�8I��ߵB:�5�bÇ�����DR^~�։yS]����;Z>1O��d�n�D*�l�.:��P�}y�z�L�n��?6سׂ�N~m�����.����w�ܱ�e��
�������������Dc�v`^�ZL�@��z�m�L�Ɍ��-`'�a>�S�|��~"��o�� 	z
JVJ1|��������vmQd�TޟF��T�)�
B��`1+�:��_��"f�G�f�1&�K���(��Ugݮ{lo�'nj����L�J��U;)�kע�G[��Zч,��%�v�����/���\�:&�A��qo0,��ǡ��{�J?
c��g��\,}���x|��M��s���kT��B_W�E�o]A\�6�M�Tnd���ӿlZ��V�z��X/�!5+R%c�}��t�s��uQ/�x�ձ+1hd鄪�pK*s<�����/n�5�;n��YaO�g�0��?�קo���BI���o\uo�ꦱ>9�A�d�T�oO5?rH6�G�w�" �d�"��_�d�|��q6C�q���f�T�^�B=q��	9�)y����b͚ݮ��f5�#�AV+[��͸�1��a��ɗ��EEҼP![|9�ы�
�����'�}Ѭ|�XZ�MOb�n6/�ۀna!�)���'	P���O�/�8~�,�7�,�bJ#o��DSy'��q��-���.9�W࿬�6��k�u�^<�H��e�N~�l@6�Sʑ�^�CE�}%�DFu���
�2���l����U���<0!A
e{N�c��'̣[���N�u��H��4��k���\3���,���uM- �G v�3��ı��1[�CJ�P]�n+�����n�U�"��J�y�R^�p��/�E���"v"��P�+��ł���6W,��	/�-؎m���x��[6P�22Y����2Y)<�K�W��-rZ�z}u(������ߠ�ֶʸ��_���@jU�ǂ�R��b�)qhc���Nh�?@.����`����0W�^:H��D�}�h7"I���!J��ihX��\�hB�*���F�)7DQc��iM�|iE���x~;Q�r�֫DK�[��]�5�92��2]g�'�S�L�bQ5�1w;([�&�j8�-�.��:]Osw���
j(/$i��͐+Pul/�g�FQy�(:/�ut��ಣ��O�3�i�����2/�t�W*�O��"j�)^��A�t2��[@..�)�^brT��>[�g���D;���ksG�{~���Ҋ��r��N!Y��I��\*����
��]���Mw�{za��=�!F;3===���'}b۠#���5+]�Z��S$x7#qj��v+h����ͥ-��5Q����""���ʍÒ���{l��+�"����ψ��V������Β`
�LG�ڿv�D�;a}d�%W2�{&����ǐ��P}�01QH.?4�(q��Cdݦ�!0��47��
�U�ڿ'��[�;D^r6C�!�
��,>�RX�+z`��K��U���uӐ�5(�6T2���Ť���h��,*��RT���������:|�Cd}xiy��2�JD�I�ά֡��<�㌂���+?4���ˆ�H��V�b��D�����X�z�^N�R��o�G���S��W��a�|�~%��"�
;/ժ���b��/6�J)V�~�U��.׸dŌ�/�~n�^�E���_�^]�+K�>�jÑ8K�b]�"�@��ߴz�Z��,��Y���_��̌��tNʬ���;��Ѕ��G�ԕ:�g��0�B>��t�d���.f�t��:铓D8��[�#ǣ-��	�F[T���r��d ��ީg�nr�6�F��E.��\t���9P�.t���v�a�I�IG�;s���%}TH*zY����2_�<r��r��[�'^AdQ� =^�~&.�ߢ=�?���)�B�4ߑ�6�S��F.rbZ뻦���Y�۳|1I1�xoA+�JoK��U`K����m	�@`ϞJ)@mP���8�qq�`�"�^��J���l��7�W[i.q{�+� �؊���M��}WS�E]�
��?W�}���o���E���~+�okE�
��Q�_J��(Y��Aa0Se_��IX�3I�u`��d��TQ�|��e��ө�?I��*�6|�ͳ���O���龴�U��
�n�|Nh��� `l~��:�w�)�ʡ^g�.��b�*�J�;4�-�/͂X��F˭���Ǻg��6�J9<��P�'�gSǴr��/M%|^J���zh��ŧ�j}�QKȈQ�4�D�c��*n�l��{��V
"4�-ͨd�R&Y��T��m���ڃ:7W,U)���[L�?��`�M���Z��*�RN���C�On�z��g�JP�hW]1/��V$JJ���e$G�����������X���$7B\���\cv����b/�	�,���N���A��c�&i���R��}�>���Х�*ؔ�hXÂPa����6�w����lP��Pꥨ��fF�Lo�Х���>�iJ�O�2�����풪�9]%k$%�eFd?Ӓ�6�F�����"�@`u�x�l'��w_0z��x�C�Y�ˈ1h�F�B�]8�"PWe��r&U���Zi���Zu�4�a���5�8��q]�;��\���Po\#I�Ίl��]a ���)X�.��H��7���f ���
sw�~H'�H����D�T�L��XG��"qך�9īc#G2@t*�w�8��>���Ђ
�ob"�����2��ӓ�H.�"�%@�Kʔ��2��J���8��%vT��7|����O��5�0�;���g���u~MuIӂ
��S�S,ᴧ���0w�l
��oN�e�cq,�KW��u�����'�m�
�)��+r�P��ˋ��s\�n����HHb��I��(�d�l8v2��5��U=��@�W`D[e{B��]����}�/
�B��[��tv��#܅U��:���FQ��� ��?�;��
�j�y,в֧}Mt���z����ҵ�1ɐ]�t��-�5j�S��)�X �u�/�����[94HOv�`	�����=A�뾜$��!P-�P�o��a�(�*J�D�Ms��ڎ20_x�m�����E��w6�wO�;���C������+�p},"� ���*Gn��vi,�撆j��cq&��c[c���?;//��Qٺ�j�5n���G�^y�}�E�!'��78�A؝��������~u&���u[��W'���Nw�{vt~Z�|��V�/ڽ��@L3f�9yU���=+�6����㬘��'�������4��%W�EY	��/f�U�=�b,VQD�]{j<�f,��e�revEቍd�Jme��= Ըl�'ce�!�s��Sk:�ƭw��x��wS����1]�V]��	��HG��]3l׆�ޛ�u�"�����ց
��{�C'j}v�0|~�\�৘6e�N���
���1�M�1
����^^�Hۋ�Ŵ$�s!Ӯ�w�G7����_�7�y�y��m��uP\���qxf�����XNǞ;j��CR%�s��A&�
����fD}݌*����-��ZL����R�]��^�e�נc���p�9��_�<	��������w)I�Y&�^������ׁ��ImD)�'`D��n)�(XG��)PL�3�EԠ��9@kgG�oKІr�&�?�駒v�ͶN����"km8AU~�:��}���Oi��t'���o�|5�w~�Q����gQWaQd�k�/�ͦ�B� �R�oF�Vv�.�Kz��e1k���N\���[1�	S`��,�G�X*�k���$� ���h燲��NT{��#���~$E�_��=���+p��;|3��71�s�c�8	�6!��s�j��pL�r8�1h��&>Wr�+�ug2��RF��ө�u��Rk�<�G#{f��EVW��\D���M�<�,�DK�&���f]��>�"6:c�sO'd��+�y}:����E>��>����W�>���iF�q��R�1�Ǭspړ���pe>L���y9H.$��Xn
�w�{^U�w�eMH���~+��^���������[EN!r��W��e�ݞN��U[R�*�bf9�����7�[Ґ��̲�\3f�cr^\3V�М��l1H?�E�����ɋS�m0���F�P����Ne�n:����!L��j5�j���(ͷg���>^�#����|�/�-
q��>�l�5��8�
�d��n����y��\����9���U����d�^$2��RO���	\���H��Ŭ3�/m��]���������P�K��ΟB}�q�fbu{w��Vo8�&/+��^tԍ%ȫL+��J�W��XV?��7��;�Η��]|]1�d�kI���:Ry�D��:
6П�TձrG���$�%�^��%�ԋ�g��-�!I4��*w�ۯqQp�����S�e�0{�(��lCM���+��0E>��N�g�w�Ӄ�h�|]���D8��h0���^H���w|rz�z?����f��ꑆ�K�#�L�`}����,��YW<���	V�5GA�:k�*���2,�)�b�m�Kӡ�)4��/�r�h��{
��C�l�"S�qH�\#�V�r	�HM)�˸��G��J�UMߙv���,)u%�d�_y0�L$n�&�z@���p�{I�v��,՛|P'�
���7b��-��Oo �q�_d�v�y�D.)���_�4�ܔ�3�����=��/�t*�Sσ��_���i�����>�ix��!���
ܖ��H�/����R��ȴ�!�v�/&�aÞ1'���*��P�qZ�K�#%��ϧ*qX���4X��G .0ۛ��BI��F�1B6�
x��T��,q�Z"��$@@	uf�^ixi��
bX�
!Zf��,��D��G1����0�M���a"P�O�ŭ���t���5��7��(�y�f��xȰ,�f��ת<�w��2��0�_q"\��h�Q
��yv#�����y}ޮ�g�4?�ں�ʋq&�<R���H'���$a��ذ"�+'�I�u�m�U��\�56��I	�u�w=|ள��:A���Z���Ɗ�hB8���9}�rBcgG�M��>�+%m����"�CL���fkU�ν��2.�:�~RօeU�@��J�u���቗A&���|�x���b�.$+T&�p}�(�&I�i%B�5y$�����=�m@ju���Jig�y���TPYz��?.c�����P΄]|���7�9��v�)���XGV�h�-X��DU��X�p�-�V�s���sn���DR�;AAt&𞗕��Ve����vD��8�>��U��6zE�X�B����$���c, E|YB�(8g�Vz8��/�C�$��b�9��6N%����yg̦+>~���&���f���F��d��B�_��Q�Z�L4T���N����J��$��5�p��r��C���oy��[�wƎ�d�p�+U%��(�7R�0��
^�u[<an�
�w���0�q�'�/����ύF�%���)�xsh����;�v|y��;���(Fk˃u���
����C�����ko��{~��^	���
��q�6h.gD�^����ċ�,C+�QC���9|�֎�i��֒��pH9�����n/�iL���Tbcw�Rw�z$+BM���	�@|��Xk=��"��}�qZ�Gw�:&�X|���|�pv��uͯ������">�:����$�"��b�a���eT��=��(FLx�؏������nHӓ<.�����RE�m��f��`���p��&Dw�AS���/�~F�x1^w�	��$=
�6Qv6�_�zy>z9J�a��p���"|��#��H1i+�5?�qc�'#8���zԻ���8�s~�^�`���x
�^6=1z�*{�(��u��Bz�(q��$��X��(����	��(���.�S�.2�b����qh
X�=�B�c\��%!�Юig�`��C�r01��p�$�Z�7��C�p���Rα�M�R&p�KuJ*V�ۧ_�!�d�FY��o[�{V/ B�ml������j�Wdd]-T�l3�\m��ەI��ʌ�O�i&��;1^^���hD�*_f
�����%�7��d6��rZ�BAo���d�ꛙ.]�~���~�Qp9Ҩ��U4�I�}A�/B�	)�B^͉Q��w������,��1T<T�����aT�i�UP����[ͻ.9VP���Q�B�/�kⵖo@p04$ؘM@��o�s1�K`�j�+k�]��Hoc�5T&���1�ߨ�2�N��*��$u��%�q�5ix��1����n��d�/���%>A�y&�'qs-���
V���ꌁW��H��rD��}*���6y��z3�U5o_9���g]��l;��ۢ[��I����^������VP" ����3Vٳ��gp<�Q��o-RT@�a��{�N�;x���\C�NzjA[�7,�M�@���j�1j�z	2$��p���G�>>Q~�MfT|&�=竖��#�:zmZ�����dL����kqoiS��U&l�s ���x>�Q���!fS?�(eD�Rvր�fy€��-�!�5�l�ޤD����/�$aN�xJ��~�'��z��]�H]`d�N���n����j�C�\�P���f\
�X��iWGo��Фb5!����x��7�_�]v����[�xڠ�8$I=.m��A��R�V〉���q����(U�F�����_�����g��G)g�|%��CY�1Γ����c_��!4z;��$u���TN�l����/�j�P�&��gG�� ��Y�O���������V#_��(��cY�V�b\�]�M�^wߙ�/��:>�ր:�a� �@���q���5�`�Q� �\�N�Qc���[Q�}}G*~�,��&3;zR�Emm��?�4�N�s���.����Iek�=9@x����^�t\����g:E�{B�r�E@^_�Fn��e��I��[k;��:_N�s'�7���Hz��q��	��BJ�,Q�LU�:�dC����K�+A�+k���g���c�N>���[�6��-^x.�7���8�38z��L���0����v�k�ե�˽eYXtQ������娬�˕ܨ�ڬ.��n�wr������]w�y�:v;�1�v�R�b���pQb��W���m��ޱ�+f.�`�8��ug�O�8b/&�[���	��(C��㦚e�ltjD�@�
+V�m@͐a>�}D����S�P=1��9	��4<�8{W�N{�����D5�(}eKʥWHi�&�J+P���C:M`H���Bx�ڥ�|S���&�����Q��a��꘻6�5l\�����l��j��Y��Wr�c���uջz��ɠUn����ti�-�K[��b1^}�ҳlh�w!r�#�Q�BW��6�,VQ�{?��l���l
��f]���ޒ3G9d&�Y���KS�Ys�l�T4�m���� �OWMCEJSz9�T}��^NJ�m�KG��	I��F'�q5��OI3��{�m2��c�Vu��z:�3�<ڋ���f�C��zê�}?43�e�
��jo��3�]�f�Ag<�^~x]�F�9�u'S�3��["{�(˗r^�x��T�ـ�9�[�1�T�r9�al��c�En-$;�X��7�,b�B�l���a;PU���(���d(�����S6U�H�bMR,:4����葮qr+���=�S�d�}����:�TM0��n��,�7@�ӝ>��+Vش/Tf�9���'�Nw�OH�"��&3���[&��&i$�E*���'��Zo�U(f���d����kr�yRO�-�I�=�{ ]���g�����)��I�]�=���l��p��w�w��A��GMԟ��dr^�xs�a�/����xF࿥��`��S0̲�18D�3��1�]�;�T�h�S�I0�(���{�MH�EC+y$y��*�{���e1!�
0�,I�ǰ�K����[9/�6�|��M��^j/�� <�uѶ���u��/�!aQ�Z�v#�E��Sh|�m����i����q�ӯoiϬ�����,P|�������~q"-d��*v�2�&�ۊ%�Z\"��ʖ��+�0����N˳K{�C�.��{���ԑ_���ؑ���?{�;�>��w\5�ד*�2��̟]���\�D�����)���Y�-����L����ra��j�r��^=}.�������C�:�\��R=$��S-΍w+��=]\N��O�U�����%����9�N��ߌ��Pʢ�x�*���cTA�'��M�^.8�p��s;�z?���-��~*��մ����NxXJz�a-Zw��?m��5��f���g���v�7��=�j%v������g�"�~��Sx{�LȲ��w˙�c:ݺ7d���B(��~��	Jɾk���#o��#j1����?�_b;?F�zg�48�T���N���EO�?
Z-Ѕ#)��b�j
G ���2�ի�G��"����2��&X<��#L�^h�����r8�t!1f~����S҇�
���#5A(
c܄!5��<3�_oh ���xBb�����pq&�`fGp�$���+�ef*?ͮ���
�@�m��k�]����܃�f/�/f[������{��hP�䗐�'(Iu�1}�ۻ�
�T~��%�^_�,��YY��g��G�� VӇ�����NB��+�;�a�!���q�+%��S�Sm��G��+Z:��#Z�DU)-?[^W�5�I��@#֒�+���7@�X
L�~4;�[���s�wq��g�+U6V�6y���II���>��-I�^�R*�*�����F"�ד�8�ޗG�^�Wby�43!\~n�QŅ�ow�	�q���ll
�tB�r2�`��>ܻ��-�ô](�V�Y��. �DTS�G�ܚ��z�8�7�Q�#HH�b�4����U\Av�W�[L��#shIٚod;wl��/�JR����,*�m�2i��g
��k���9Z���_y5=�bM����*il�o�=ԮŴڷ���N����>UV�{�~�\�E/��_A���9r2״��pSOvD���߻��[m��+�3�~��n��k���FgW�
4�~_ �1	���1zoO'�	.`/_\����K�V
e�M��Ҏ��dF�]e��%%�d����Euu��8��ʶgt��uR�B�*��/k|N��D����ᖔ���㓃�xV-�����L쫲��/M3� �{�5rث�70ѽD���f�6#4�و��d���h���I��IL0LyW�Wot�v��+Ӂ�$6Y�kâ�f]v*$�-%?P#t“�>��]`����D�X�F��q�
�~�U�Z�����Fտ�١���H�?���K�1�\�I5Ո�AC!�Fb�D�m(�j].�.��.����@f��=y��	>�^�1[B�1w�/f#S���|�C���z��Bb�;��gPs��k`��!�jHM�I�lXR�0N��vL�FZx~ϺW����V��>
BV]d��և/׋���*H
�%������xS��q؎^;X".!��a�.��,h�]R>�M{���nb�mwè��-LE�������-�Ӟ�8CP���;1�ߏpF	qY�w7�n�Ǡh�y��3��lY��j·d��ݨ����v��n�/�H�'�~�Dj���zz�B�k��,$�6��pK-��>�j�Or����å"�F����KJ�1}�A�:c�3L~���w����[&�t��+w��|�nP=�B��#�[x�����ӂ�p�z!A�%�Ѯ�?��*��m��u2�$��`Y��FͫkT�����t4�y��h���T>���ءҪQL���l�ʏxXP埪��T�j�u(�O
L4*�qqY�f啐e��÷	�ph������c�d�1��� ��X=G�.bC�k�S[��>�
�^�I���
�a��� ��'��[uX�٤ʕ�
�7���]	s۶��+1_�!D�"ey�iڬ͍��$m�:���a��L��%��������N'�p���vpve��]v�
�
h�&�o~sj�l���TN��q���j���V
M�֪P�B���DW��Y��}�D�
s�
3o>w۔l���jԂ��ˊ���p[�~ꖺi��W��["�t��Ż�JV5�����`S*��[x珔GiW=	GLuE��
|(,��k�e�J'���
�ε-�~$�`�t�m�h+\�Ռ���o�!�j�4]`��Sb
+���R��� ^Cu:U�3��iS+F+4���96E�(JwU��V��
�Y���F�m�4S��*��>�
�gw:�Wg_X�(@Qa�;�踮
HJ-t+,m
�yk��hy��U�Xnj����;Wq�m�4G�З0�$�rkm.Y�>C�L�#� ��z�l.e�z��x.q���r�y��@��S�<��
�C��^���5�7���hW�B�B���j����Q�G���tT5A�M��Q�29�#�^EMK�߰�3��ghP3�I�����`�u:D.n\���V�RT�踄�w*o<s3ƪ�]*���y�Ak���,Fu��(ҰB	�v?��O��8`���sys�bviS-W��2JA���gF���&s�fJ4W�P�9!�x��Q]ꘊkk1�g�;y�N��aiz%Da���|Q

���(�:*�9?-	�Я���z�D�Z�&���Mg16�i�� �M�S�tD���o=����h�`����|���-��6{�lٓ?��[�U�S�K��|~ݹG����:�V���n�*l^�KB���6�J�u���Z�0)�?#zPK9\����v7
�]�I�h!4q�E�}&PG�S���_^��;�k:>�5������W��N�ߗ_P�9:L�h��{TD����ι���M�C�K��64o��@��t酚k#��W��=����vZ�5<�����oE|�FFf��,{h+*Z����p
��i�gX���t*q�X��\	�|R�IM$[T�>��"ێwG�v�r�8�|�*��l��p;`���K٦���q���a��R�&f��g�6��7��n�������/0�`i�g���wg>����[��Xn�|�fkm�w��!��#
ٷg�1�6��%�w�.Q@�[}�?e��ΑX�[������&��+4&�A��$l?����f\�q};>�%G��-��:p��o�j�+�t����S\%E2n)������M�ʯ:�e}ˢ-�ےV��K�j)թ�SK�cUq����Ѐ�"���q6�F�eS�|݂g\�
���Z�][���fj\�q����8CRJY5~>�-@�M����+E�2��:���t�і���HQW=O=���f��\�h���U��DG�G�����S�c#�2\Z�l:�=i�{ۭIՕ��q{bV�wr!fX��3���������9N���PM��������@�-�?>�*��O7���Nc��
��RN`S&���A>=8
�(�rݿ�L�ӕ��2�Pg T�jk��Zx
�0˰}Z�N�̈��8��%Ոͅ_��K���c���GI3/��~Y��Ш�Z��P��iE@f�ȌHm&�6�0���_���&5�X��Mfz�r���$���˗�N����b�?e����#An��͠~�7����9}�<��E��y�I����$����(F�2;�uTV�.h�	�Լӈ('�zg�Yoɐ?��i~��
+<?:��#��p�Q���Kb�E�說y&I1���y��1M��U0��0��yˁeŷ�U �)/+��񠥰|.�`�qh�i�r�y����cfmS#�>��E˥�-�*��W?eI�'L��9�"��P^a�fy6�Z.��؃��8'��S1��Щ��߮J����d�͡�9\eWQ���LE�˚�<Iqs6�=���,?�Pj�jp'��_�Ʃrj��/��*?��2}����������*�ʭ5��x��-��*>��x�ߕ��YT���0kU�y�̰4ʓۏ���,h
���\˜�N�ᘮ���au�.�O�����kY�Z�\<S��|���	J1u������~��q0	�`�Nz�40���r.��^J�u%x&��)�i�i��}���V8	�^��>��!eƳl�R�?݃�
�U�E��j<nj��HB�@����
��z�a}v�՘Y�M!��7|	���0ֵ4�W-��?I�w�^����B�eW(s3�j@!�5�����`��.��$�<z`|�� �ܬ���}����*�C���c�����F��s�cw��ӥ�٪t.�ښ�"�
7}���]�g�3�ʃ��
F�.c�g��%4Eg�Bv��S0�<Փ]ErЕ���CS����F��ף';8�6,�TkkQ���������Z�Y��N5Fͱ�{
��>�5��]�0����d+i�z���:i�z^�:�z}b�:��
����e�0�%Y�N@�ݼ'�����@Q$���2�mκ?��-��sL�0W���ݢ�;�{�>H���w��a7a`=�`�`��ۅ*����a���=?�;;�%��~�=*���`B��v��}bks�e7|�c��W��6.��/���*Ov%��#���ӟ́f�����?��������ް?8`�=o/�޳�*�������D7�ݠ�a�EU�n�&+���t��`;�E:	��VD��ma�C֣�L��h�j�x����͍~a�뺞�X�M4z�N�Wm�+=�H��v��.ؓ8��X��2�C��eF|\b�����B����d�������{���>��~�}a��AΈ�-n�BQ
��c��0
���f�B:��U�]p�!/��y
MH~��T�A�~90/�H���Ojt �
�aY�ܠJ��0���L�j����?��	T�:��M>m�fZ�����L+h�1�%;ˡۻC]��7�0��l<b>c\�1&u@/q�ыf8��B,�>.�}
��pw�h��]΄��3(��Q��3gP�����&���5e�}�˕�H}�.j�2U�}�Aj7�(
u�lʀ$�M�.�p�Hf��$D6q!�X?�\	��`*��$y{b��<�
D(���+��!�Q���bf��Y*nia!Ao)�q��4jq.�s\��`(������n>�C���v��/cЫ���ݽ���;��`@��� 4�?41�Ax����A�� <А;ćB��%$V�d�.�8�y�Ѐ�^�o�*[�2��T@@�LҾfnQ�� �4;�kflj�Y�,�د�v��s�I����'�����P3,WƱ��-ۑwҒV�Cm��a����}�����]��W��E[��ƔR��
���D-�y�H/����U�0�v:3�P��,]賃�K5X�Ng;�ڶ\b��`⚩(�����δ��b��d�
t~�%���U�c�N��>�O|V���
��g�t�S������WyvN�V\4�66�δ3�����J]�7'��ДU�0s?=�.�$-˗K���|��S,B�N�`����^��`��M���&���,�j�b��R�1B1���IЍ�("��)�����y��$(�_���v�S�/�*Uc��u�R�}H�_U�&z͑�V+���o�j�#+%=�qH��n���!� ���[J��~�p��Q{�ɥ����ppn��
���(5x����&��
$A�v�M5%����yKԗ-�3]O��it�|"�pKO^�T�R���������d@�ت��M�z>�,�&@7W�0��U�H>���"2�A˱o�i}x��%)�J�6?��s���l�h>m��Z�l��eΓSyX���w$�L���뺨ʊN'�>@��1C�ɰ{I
M��qiG5i��$�B�ӤΕ]�'Y�6,�̔�L{�u1��N5�$����I���n�����ؤnG3��Ȓ./T�k��:��3\z��p�&��� i���\�y�B��XX���ҡs}]Z.!������3�)�q翉ŧx�&�t,��>/p9�{h�=z��ݦ��g�~�O9��%��gE�ާ��4�닫|��ppGÇQ��߸��ؼ���N�X�깩�f2�Kr��ci�����a���*��^k-a���Y��C���YЗ�"5ޟl�*i_Z1G�}W�����$��"�-�'�O�,���
ܫ��X�����B��sJ(��sG�~�VJTIw�?�.��1X !��8�¤t��ꉌ+/cL�'Bg�=���|G�֗�R��,� �*:QE%��o\�a�@�lꑃF$�܏yy�M�D�<��nw�|.<y�;�gxܛ�\�����)�M_���b+���&»hYD���H�Ou�d��"x�n�%?Ûy���<���1d�!�0�Ř:љ�
����@��il�'N�~�>D��8T~�*�Z+�[��5+����o��]Sw���.��YY�ԉ.��0�-�j���W��e2A��Y�Q�%ΗK�A�1V����B�O.K,�=���H„�ѕ���
|@�4�"�i�zU�/��;g��))���N�$,s\��7�t��w:�8�p�^ʝ�K�L��)[��O�<KȲ�`��Tk��D���>�N���v�`�
0ṥ�W%�Tq�C��G;&y��.p�Hyv٭�UӰ1e�"q��剸���;�n���{�Ѣ��<���Ʉ�Ys�҉��N���ڜE��c&��l��;��OO\�Tz��u��2)�Ի��W�Ӎ����|j��d<!�t��E�0�n(ȓv�󯖩�rU}UU���	)���4'Zx�������ImC�o��ײ�b��Y	��p�I���[�.�Ծ�+��\�mK�Dg6�(�=��VRD�S����=�q�Ռdj�m����nƞ$�e\r�j�4C�(%F�I���w���m�/V�@ r&���{A���?�u♛����(Ajc�J
?Ljlwh���բ�MvvF$T�-�ldvg�
8��D5��gP='�O�sr}��lP>'�7Aj��=�����`����Z�-�^^y����1N�11�x��ŔǼ�W�B���T�5a>����[�p(fG�����;�D<;�eYR�ʅ(&��9�� v�����S;�v{
�<؝�p؛�r2ۉ��(���[�v����f�׸������7�I���H,j���̔�!Z��"��N��_�=	^8��a��0����u:r�%@X,��L��H�j�Մ���%*}�N�w<���MՖ󫾃<�Y߰���VHS����M��o�=����_{������v�:�r*��UD5 ��1�%�N�F_gE��Y�,���]ۀ;�������������]{S�8�,��:��@c�΍s��mh�N��ȥcblƖ���~��lˎs���ȱ����Ү}�a�3tU|�ʴ���3͠�{�ev�t�PL�����U}�FYk�-�����4	{Ej�ae"^��� D]7�vo�pH_
m"�D���o3(���b:`e�\)m(�E!5��gE��ұ���…�6�!�_��(3ůj�ۀ��J�^l�%�?V��S؃
؃z�[go�0��W��_�sX�s{).�^~�E�k=������qe���&ţ�G9�w:�X��:�|#t?�=G�.cU#�R�n,��y�Pd�*�Y䇠�ދ��t�o���Š��8��t������������+�)�(u��6τ�[�&8�2���?�y�R�*�<e9ً�$|@�5c��J3��P70
��޼G]�+�/�
�����-�?���yJ�>OI��p���G��l��(Z��yr��W� c�ݫ�s_�sY�g*�����rݖsy6o�0�J��	o*d.:C-��v���/�|��� :<?�-U�fa��	�6��H�^<
�[P��r��?��1�Bq#�*s[SF��V���A	gy��f�n`�
Z���_^w_k9�}�0;�NB|q���C�Q-[�3z��N�7u>�2��FS�.�C&.!���_^�mC�m(b*�h���G�$G�'#�s	�)vL���Ͱ�?��'�>n�SK�+�����0o�����ð}�04�:�AO����}ȡ!߸h��˓����5Z �7@�nkl�QB1�(�Gx��kf��3�'f���4���}o��
3$2w7W�4���Q`����	UAZA9&TRG�vJ2^��C6 �W!^����0��D%�e���
H%��z��rZ�r�ڨm����H�!YsHg�
G�Sg	ڷ������s��={����׻��'!q�\<j<+���λ�vQ�-���֮����<�ŒN��~�NWC�*!��#}ZO���H׃ԫG���~=���ӗz���'c��D�W�ca�C*�𝷒'�
 �7C��&zM'�H��.s�e&�����E0����m��ޅU�_B�]*�gtY�1���i�PS=̇����A�Ϋh���
�;l*F�=�<�V�l#v�R���T�t@�q��M���/c7o&��؍��z�^ �j ��R�~�J��r���K��3Ǜ}�~Y<�O/�^&CP��D�XQ8�a���2��~����ޢX �����:r,!+`31���e<�T��c�xĸ��8f`����w7��x�V�G�;F{@S\'40�1s4��y�<M߈��IϜY>��.>1B#����1ޚ�����yD�Et��8?*<.;מ�\)�K���A�v���zU��N�9.�GR�Mٔ�*�\�VAi_�e��yA�@�g���f����)2�q�Ҍh!6V�|ChL10hR�,�ԨPj��ZTc�RT�T��xKUJ∷Z��t����]o۸��+M��ЃJ�;��K�n{�&���;��
dY�ucK�,���}�wHJ��d��pD�"_��M4/�)P��><�`L�@�Bխ�J/��l����qV�8�
���*U/�ײ�N�ZX�$���e�2n�:�e��g��u�����e�X[�og�F�8I��=�,�a�
�*�F:����8����ؽ���2X���$�q�2=��
g�Y1������Ik@�f�T��W��L�����G�m��`�˃ҋu�� �h���ċ��r�k��Jl��9�ϛ��F����+U�طBƔ�%ڤ����#�^�U���y�f�kz^�ܶU�ݍTꊧ�4�[������R�>��|O��ރI^�FĄt�ԋ	�41!b����r1�vي&c���7�5M�_�D��v�?��{1k���S�?�	X���_b��D`��<}k==f�(]�NUO��N��)��4�t��4	(E�	��ѳ�H�*-�f�r\q3z��	`���_<�̻D��le7����6�>���j�U��i�N�uZ,蹟d׵<��?%�BȌUB?�Ab���h�rAY�*&K�b}���|��5VT5}b���;ټ{Jز�����z�w�8#B$>�i_�J��ؕ+�Z����UKQ��e���Z�l^����	��0��54�O��0ܢ&rCO��H���D��,�Gj.&�i���7�L��Y�?=_�>����y��uFy۟ӛ�=��3IQ^N���:W—�
�J����i"�f�&<O��+��-Ֆ�o�VV�!R���hy��Z��:����~��̾�̒~������P}��Y�7���3�۷V�mh0L��nֵŽ���
�6�@��:�$�iAk�|��2雗]��j��R޲e����0~a9�p�[Y����z�Q5��a�_�Z�"���/�ŬT��g���Fp.��՘�Q�,�R�ƺdR��v�ƝFD������u��`��U���翆��(&+q���x�)J�
嬕w���c�@�76�w�0Θ�ޞ���$)�̬��8f��R��F{�3T\�^�+{�+C;��������X,�[f�̋�E���P٨1=F�Š��\v�:a�����	5BSb��K��u+|F0b)�b,�h!+�o�tTɟ]H�΀�B��� �R|3�s�k:-':�#�yIK��=`4���)O՚�j��ZWT+4�IA<�TO��M��X1�t>N�=�p1oM�H�Q=~�g$of�m�U�2�z��r��
�a����9hf�[�9a
i�l��P�ur"�����K����\��m�D�xF�L������e1j��RY[��qar�"(2ڍ�fV�cۋ�l����[,�Ño��Up�ku�QH�:@˦M��U�l��ۖ�����G>Xl�,]t��yb�fPI�}�� ����t:ҁ��pѼ>�'֛D9L�g*q�j�m���k�kD����!1��?�SFu��Z���g��mS���oE�"���|��79��PnC���lW��	a��QC'oN��j(�
�W���գ?򞢐�6��ۂ~���I���Yb�ݿQ�y���w�F���1�A/����5�N1�����@�iLnh��o0�lQH0|����A)�}�U6�3I�En1��e{�L�h�>?��ֳ���䖿Cb��bZ�HK���̬�CJ�;ڞ��U��Z��f�˜GN}@czd���L��s�ⒾA`��$ӹ�3=��0�"UL%�AQ#��LʨӉr��<�~TJ�AO�O^�t�~�2ⷅ�Μ��o�p܊�����̥E
�:]U)�O���`*ᄇ�eP�,�-��6�b��:�:���zC8��d���2�<��sA�*[H��l�{�T1��=(��=��!��*�C�(^N��:ٵ�,Ju[�����
r����;�1l��h�W����R��>@O/.�z�AG��8q�w��KM�-	�%3�E��� j��dN��/���x�!��MM\��i
��RD�)�ׄ��5�8���w���o94�Y��=�\jko���r|�ʂ6���LJ�	=,��p�r��H,YJK�o�
�6W���l[��m��%���1�����M�ǹ�f�Ɯ�k���)��V���;�wϜ�j
|=<�N~�ig����a�����}=#t�RL��I�c����	��� <?����RǗ���DS�Ob��L�A`�2}	͟��e�ӧ��NJ�
��VD[`��\>�D�M�2&�8�HD��D�v.�`�)����O}��vI��bN�K�z+z��&��hiO�4�2E�3�?��[�|,�ĭ��f���x�ʅ�v��YKD���il��ΒL����:�"�s/v\�Zz�{�kzr�Yb���7L
���I�7����Cd$7TjHEF����>uŽ�̴�5ID���}�:o�‘+�>_=�7��G����#������
�>I�u:\Bބ�Ds}s6x��ׄ�P�m�c_�؄CO�[��QP�oݯ��]�Jȯ�pH�3��uPʫ�Y��r�����h�b����01o�JKh��X0@U��@������w��Q��v��#���'DF?6���פ&���9-U��$:߲�nGK6��	���"Hk�G�qĴ'/e:p(�v!�]f��ڒ�8��3H�pn
��0Z�֖�K��?L���33e�2����K5����OC����J��_S��7���s�S�
S���_��,V�hJS(n�؟yK�W�w�wEo0�̑ʜ��)gV{��x!%'㈰м���6(�-W]�
?��mR��{�-�w��^H'2��^84
8���=�ݷ�r=P�؇�[Qr��$(�.�"��հ��Z
/uZ��Z9{!4��!nht�$#����A��)��~k�&�>���!�rSJ�_Ŋ�Vq�P�8+��)�a�/�T�7�(#�$5ѥ�(m�c*TL%?�K�)SFp�SgB�����R�b��q�ne�F�����`"��U�n_���Fg��G�/Q�D/i�=��Q���+1�Q��8��h.2=��RM��t"]q�~r�{-#�ӑ	}�7D8t�u�\"��Q���i��i���{��l:��s%�a�깮�D���&bxNy�Z��8�q��L�<,_�.]#V�f�S�����b��dF�)�d�N�(ܨEs���0Tn��Y�c|좐P�#��L��9�g����m8�ȩF�󈃦�9��oG�vDoE�ԆJ{"���u�U�=;F�ٍL�,]��X�6q'�'b(��|�ĵ�~�֡�j�UXݙ%�{I��k��������6"�e�Ha5�V�3V0	����8o������K��d��F$�/��6	Y�P��D�X.Q\�z��Γ�+lj��<�-�D-qU"t�,͓���ӷ� ����s����M-��Z-�����pr���B��j��2*���V�����7���_���H���~=��Gɏ	��uI��aD&���ҫl[%��\��`�x�B�-��ڏ�6R�-�ߪ�ؤ�_xByu�<�z�ڻ�9��#�n��_T�w��A f���S�h�ŘXs��,2�c_V�^�M�J�>��ۑu�~k�JYȔ樒�^��6˲���qsl��X��wp��9�%`�~�%B�~ �����he����"��	+�C��q����3�v�ۦt���i־�|��{s�o���%�/�ƃ�8)�1��
�]���q�^D�u�B4+	�V�V��zh��@E���V!�U�J�ո��RFV��\g������_t�{?��G����u�D�rh����y?�(�Ƀ1Y�Fd��e3����c��a�*tok����S/u�0��a��h�l���n�M6��������Z����Vb*��f+�W���Y~�u�?���/�v@c�
N�j��D�E��_6=�k�0jʲ)�.��P<��-Ӧ�e�q�_�=ܽ��m����Z��_�-��Σ"f�=]��ѩO�7;��$��&]��Û-ں�!��U�k�?}E�fǗ�����v|��;�6�����4�}zj�Or;C��"\�嶢�Cbg*�{b��dHC��[��	��o[(z�z��"�Nۍ�N��H!j|H�\�u3�����d�V�h��L���
Q�`�@F@a��@���;T"N����� �؊�̴�|�	#3��Nͩ�B	K��#Q�#���f�W������PT=��4��,>3��7���k����_\ч��]mb��"o[���)�3gx L$)U�h�D�N����	�wr��R �
>z)1�A�
>�ȟ�t��f{審�
�}�5�oީ��as!�p�.r6������"�)�h����7��1Ϝ���K��R���	�/� �.��m������;���fg��R?��w!���zyS?���ʃ2�i�gq/n�#A+F�����^˔�kt)����Ԇ>�$�g�"�B�J���j�H�t����Z4���zJT��jh�֭�&�e�+��N�ו9%��'��s*�����_�`����궹"�65���EH}����4�s�-��z�?��_�j�͝����e�S8��˸6c����{��R�‘�Y=�
�S1�i*�����f�aW��6�9����G�:Uۭ��&�����t�S8��\b��VJ���	p%�ʩ�ĥ�ۘ��9��f1���<+��
[�[>�Z��x�JV{r8�g�Wh	>�����b�%lߥ�+p-䝼�!q#ZN�;m�@ʹ��=���]����;(��U)\���^gy�M�o�|W�v:q��o�C�Do�B�����o��d�mUS7�����Zә)M'/��e��pC4����ƌ�G�3��+�p��۾��׬X��r�BE�>�r�l+P�+5�Yd���"�UgR��5����>�]�囡\��޵���v���+8錰��]��~���&�/Q�4���{W��,����Zɴt%h��Q�}���#�Aes��$Xl6����k\����Ud��U<��� ��|zlQ�7|\������"�o�!'C�����bK����xfC��}(Si`*�J�;Ik��)}.r�
N0�[8btX�ş�ִ`d+Y_J}EOr�M��
?����K�9�W+��c��K�p��b8�ϭZB��Tn7�&���Ki@P������]ms���+Q�xpx!%e��0ĩ��kW����r4I$�p*QI������R���	�ew�n�]��IAi�$#j�ι]&Vf=�j�9l��Yc����Ʈ7\p��rQ�O����xZ���:+X�V�6�b���@����m#���I˳bR��q%Yw����b�mT�DKѽ��t^����ZΚ1;P���{o�^�By<��B�6�)�S]����/����^ݛ�m�(X�D(��1I��\(�:��w��۴���&\\
����J�̙d���T:�hrGUo�(����\�A�`�� -5�Չ��J��Cp��9�3z����w�o�)��߱��\|2�Ү�ճ��;tp�W�_�y���(D�4~	�_�ӂъ=�V6�B;Y:�r�eIZ�8����fk$n���
�tPNYH��p��~c:-��E}���q�F=���Ŝ'�i2��?
(L�˩�3z�$�����]��/�Q�
M0b����w�S]�#�v1��Kg-�9��ݙ�\�;����0����(,���2,L���R�T�y0z��|�d�a�:$	D~1�;��Y��O$�kCO�qg�_q#Ł��_�܏!�0k>@�8ԏ����#:q�y�t���U8w��6��d���r�w*���7�vo�o����+BK�Ж��j,Óq!Щ1�:�\��x�͟��
�]�ݭ���^$Z9�=��XJ�c��pV���r�|W�]N�[�;��C���+lwC:�
\�:R�{�"�P��s����wd����B����n��dI��ȝ]G��n�� &�d�(�7�6c�?e��&X�2��f��I�[�Ѱ7�H��3�a�7�e���0��Vz�{�߃�+��z��'��p�ގI��?7�P�t ��jc=�|����|���8d;&�4CN��L�*tܘ����y���NopD��~R7��"�$I�2n���,��;�~�U�Y9a����N�A������F�v�rh�v)܃ޞ���#D�4��")�uᦏ�j��C���P��奾�E�����[�mW�៩`E��C�N�������T<��s�.~��D�w����2ϗ��.�Ec��Bfe��d>w��.� >��_��s
�L��V����d�	6� F&ң\v��6�����x��-M���$ۉd&7������ob.��]eIg&6͒G�u����>0k�"�(�t���H��GL�� ���v.��zX`}��z��*�ц���VC���>�a��7�)fr�er/h����fɪ���&H�
%㱆)�P�7�9���G���9qMmD�SO�^s�F=ҐPX�@m�д444�?�)A�ɕ�Ұ�n$p@)5�<�&1�t���S�@�,NC1/a�C�&ۆ�}�N.�A;�ax_:��Ll�Pʕ1I��t��U�k}7�3#C�A��̾���9�i�;x2�t.�3�my�{:��os�0�}x"���kp!햽NL<K��^��;uxT���6Z�~-ב�
��?>��&�[��h��~��W���i��ο�<|�%����l�6(i�Q�mt�x_<�4�t{�:܄�N�F��H��}��h6��g_q58�X��Cٲ$Q��%t�U.�J3=D�Cՙ��$�r&�f��(��$3Y��_i�0e�F�:��M������ԋVA/�Q�E�>��/�=yςz|��E@��pv~@M��p%�E�uϡНW�,���vr�^��̐aK��a�����2���{̿L�&1G�P�hNu��(�]$w�9�J6X!�M��8�.OI���j�@UC�\��P>�Z&%�zɃ�΂��6��OP�ż�y�{LP�N��VE9�Y���3���C��W�+z�r���&����_�d�&N������蘫H��L�9t
���4w�/^�hib�l�+�����1�n�K�'�B1��W��b��u��PLjF)n����w;����f���Ke�'�;�����9�;�37J�u\r�x�(Iz@4�@�4+h^G
8��MS���+/�Q
���a��$�>5بe������m��f)�YKJ����<����d�"��`~���4��-w�:�ս�聈cP��,
`&����X��N"НG�X�e�r;jny=�#T�/�i��8mG�⾥�Kþ��|����W��z����J-�(�U�܊b� c3Ҍ.u���i��׈P�1�Z���_�r��S�K]��������PJB���-�p��E�o��5P��d*����������--P�k<��1���#c,��3���B>�2��c�c��H�H���ӲM�����i2��
Too��7T	<˱n���a~F��[WePd�w��c�{Nt#{$�g���n�t	_f���N���CvI�.��wG䉆�6�$*D'g��6}�W��AJ��SE��!��n
�����F[*��;�ɬ�fv�LV)���W���j?}_����a){����hٚ��t��\[Z�S�&�_v�����ˊ
�f�*F$���B�Y^�׆�r��a˶�ќ�w��ʤ�y*F� :�y�f����C�m��P�ؚR]�s�o�FR�I�eJ�JC�(���W%�)�\+a�:�={�[�Q�,�K��M�k�g:��/�s �3ui����l�Dץq�+�$C�ڈ�p����(��N?I�!�`�yo|����	M�GW`�`�;q��Xû�+��c5U��9Q���g8`����#4�>:�?�^�(�92���t�_�D_�~��%�ے�ܒ~��IL��,��˻VN��ݧ��f�̐�3(����7�Φm�8��$�g�bf�*y�A�������.�w+�n�[!@!H��+�`C�|
Z>�%���Ϳ9�xc���x�2�i~���J������#~���gyY��y�N�����D��f��`����F�Ȍ-ɋ�0���u49�α6�8��=�HD�pXn�m5�u�V�/����+�ݗy���_ͩy�9��,X�V��sT3To@3��h�V�����ã�S��QV�1����R����!��1�������S� �����w7��b��j��xK�g/��w��X$%d
���)p
#��hFKڽ����������]�ύ�ͤX|�CePUA�u7���K���W\�tk��o��p>o���1�D!�
�w�}M�(切�ӥ��#"{G��5�X�L�(YC�W�w�U4�k���'.�W?��Aڛ��8mn��ǁ�}X�"��Gkt����}~��z[�)�U�w���������i�-O�]b��s�җ�:��،�1ͣ�Gsv5]�bLq&��|R®fE;">
7(�Bt��zF���(�_"X�a+
݆|T��ąA��$�S�w�:H،�ٜ>�Mrڡ�w��7�r�����	N��oi#JD��PF��O4����J5�B�N@������V9�������?�]Ms�0�+u��')��C��N.͡3O�uH̄�L3�4���VV��C/�>�BzHO�,K�6��@�I��,�D�%�;�8��Uu��پ�:y�Wʅ�+�*�̲u�*8=�Ek��2�'��i��vۢ1���l�=��P��x�OD���j������T���op���n����T^�xVP�~���y��{����d\p����N�c����n6
�a�ۮ4����	}�ȏ?��:��v�܉ܝ�#�C�#(ork!W��ǽ���2ƁI��^Aն"഻��v��N�s�]�S�,�'��urP�x>��G��a)�CHZv��–0���Y���>����0�<�Bŷ�;�"=Wn�=�~y��|a�d:<�(�
c��h�L�p�C>
�|�ў�lE��'
a��!��܇���:��gK>�1<�Ʌ�CL���uh�
�҅4�l��(��H�|89�&�2q��F�KUM8U��������a$.{?���3+��.[��m�Y���M���2�t���e-�K��յ�eÖ-tB��7��㩚;)�����8Qq:/�9͑� �)�&z��k��W`D�1��1 &�gniZ
M�M�M�Ӵ�/���5� 5�V-LGXh�yb��5͌�������E�~k�0���o��j����`��oA�^i6ߍ�$F�P�K��*X�T�~�XuA:�Jjg1b�g"�9P�o�_�a�R8�\Ka�1Lː�(~{@�9�\��
��	�|�4K:�LZ^Z'<$���Z��/0�Q,�n�c�u]���L�wȕt��칣���T�g�@c�
W:�q�#�K"��&�}6+�y��`v��Z+)O?�� 6a�|����#�ybOHB��mH��t�dMB��c�IS�s���aB�	u��c'�����RX3Gǣ�q�.��[�*�ڸ��jk��Tq�E���i6wJ?�!"�!!�Q�4cD+�)[ht>8�-��HKVz˔���

2Ȼ�M7��u���tU#��7ok0E~���΀X���p褃���AQH(FRuM H��h	��T����İX�0��m�X��!�j@�
��U��Uʄ�0�i�j�Y
lŔFgBz%(��"l��ӶDW4�ioY�ie��/��*A>y�,s�'e ��2ԁ�� -E_�t�n�l0fzh��%��%�1G��Y	�� `�q%�%JH7ܦB�����: �@+Y�]
s���+6g�!�%���i�&i�I�qRs8�<J�)@ŇM���{��Z��"u:�L,�p������}V���jւ-�l~�!���xe��(ѿt�;3�`ߡ[��{6���~�?͑d'����V���JH!M�]��ͥ�֮��}���.o����Ƴ��K`����~ $�Pi��U�`�׭���ǁ~VטkJy	4�4��2���?��3+�;V�lƖ/V�H�
����3����El��=�;�8	_�x���45<�N��Q�u~���W*w�?|�l��k��Xݵ��ƙ�� �hc9p���qO���bl?G'�q��Zs�z�J�B7D�V��vM��~~J���a�x���b?�e�K-��_��l[���jf�r�uU[%���~��8����͔	}�m��݂(e���o�����@��}�Q=��G��߻�M�'|E�o��bܸ��E\�Mƒ`�l��1-�T�c�Z:x�g�Z�J�
@G�W9�
�)�S��i�b����U��B�k�����&�(��
��n�N�*��ݷ�Ci���z6i�ҧ���c���At�q��ȩ�"��R=P�3�h'���O���W�cP7���9bw6�'Su�6�R�z���!Q�ч�PjT]*Y=*R����&�\-���xq۴i��ؓ}o�8���
�R�QH��QH!��F��:�27�Q�[5��L[�uWw�~�n�k*��
5_��6��	�Y��:��At�5{��8tj:��X!i�*.�^Y+�:<؎'v;�&D�cS� 4ϧ'-b�mz2�M��:;L|��_�7DYD���Q�8�EQF�e�/�r����T�����)��TD��!����m*ʹ-�Ųʋ����1��ۓ����}l�Z���m���!S;b��� �#u�$�[[�V�ooL�&���春��|�̋���%D�/�����a+��^���([��G�	e$�:�RC�n�R��s�kx���{�{��}I
���@��P��Ɠ1`�a�ԑ1PG�F��s�����%��a���pHا��o
hc7S�����=�^���	G��e��ĩ�8B���A�G�d��QDž�7b.�f�E>���cK�rs���!��D0"m�[���lQ�`u/�DeQ�i�����o��$�ux�U,[8[!�Hx��9��'�*^�"��n�ŧ��Oq�~�F�Fq��;���W�I@��R֌�I�s�z�=������>�,ۑ�#�P5��`��m�%,���b�2+�)�� &E�����a�9�2��Pّ��3g]����3�E�JÇBs�X�5�a�t-���0��a�%�s� TC͇��u�i�8�V����l5�1��Fe����В�|�P0&����a΀��?�������`H���>A���L�X�WTI9Hi�X��Qj}�k3��P�K�pZ^�S�L߉z��Lv�`��[�U(��ZQN�r��'rT?��S�(��+���O���xX�5�2޿Z�Վ��3�F�_i&��#ߐ߁w_�ٛo���a��vZ��>�'A�� �2�0�X�2��FsRі�O�L]Ts�7]�|��ZS	�A�y�O�`���$������f�0k6D�nR��4�Ǵ�H�엋~��H�y�M'\�Q��i���|
�}A�s��s�uç� � �Ps5f�2=vӪ��Y0��#w4+�er�O��Pa�$k�9����W�&(B �gl��	��j@;�*J�*�a�'P�阞TR>dsx:V�3��'�:���� Zr��jŸ̌�N
�3�
�z���`���_���N���k1���~]{�b-�7\�q.2z� �6�aX��]���I=p���Z�O��o�T V�ne4Pu�U���,C)�����r�
i]_�V{�E�s�W���q��R��ʲ����+|^���e׈�Y�{�盼�I��K��=��9�e�U�[��<?�7��LJfCb��7���IR����_�zC�F�'J|�,�	��d����+Vza�(v��''�:�Of�'��ڂ���ab���<	���)g�$�j\8�����E���U3�هWS� ����N��Ş��q\���AcQ1��M8zůO������hԃ_�Ȍ���-&��"6�n�jN����&D�~J"ɥ�d7�!��xsw���_�>�2Gۥ��	���^�#^��6r��	�2욈LLC8:��omp����3�u�47Ɨe_
)��]2sM�x�hpA�,�T�9�"pC6���x�nz쵷�
�8���'S*k�����a\���蚒���)E?����,�E�����T�]�|�O"׊��.���w�~�$�Zu]��i#I)h�z���ʗ\Ȓ*�Ԥj��#�a�Fz��Wn�W�m*q;9�k�]�^Bt�p2�?f�#�ʭ�*w+v}�_P_T_L�Sv^N�o�,�f;,u�.e�%��$��
f�p=��4V!��:��G�E\���η3Q؆��닓�5	Э�ؖ���|Q.�n�(�T�
��ٖ>��`F�/�=J�y(����	�w������m^���gK�
Y�oU�y���'b֩�pl ���$��fB����"�Xᤞ������Db�O�	}�!��i�LyH+���9�WS�� 9EA5�xMs���Gr�hw���5�K�����d,�6��ߋ��gn��c��`�h�L�0
]6y:W�gaT������% �i�[]0gV��<k�tK�$����dGɮU(��~՜_=�EcvI�̷�{
?d��\�/�����~?]):�:�5#���Q�'�Ce�
�z�I���˃xG����^>�BE"\�Q�=�T{�ӆl�So��Y�
p�Ar.ԎNq���fA:�N�~$���BWs���KfjAc�t�Q�(	���1��F@��VM-��L]F�=�]�?�»lv�B�a�a��z���r�ҷ�e&����0�g
7GDI�����*�r�fv9i�[���z��l�ly�z�����g�f��|�9�u��zQ������pK�t]K�S����m��
��ŋ\H�I|=�O�P���q�v����m����U\cЋ�H���9�<�j|t��cƥ10��N|�K\�6,��B<m)mj��Q̿Xi֒��Է���'�4׃)�:<��ׂ�p����B��,R���_b�i;dm�Q|��«k���
ֳ���x��&ݒ��A2���In�^�TqR�T�N�+�c��x�D=H��예4[ОQՊ��V���Z��5_ ���)	5z�Z�zn���D�{]>p�~��T4|�0_�]Vz����
0�Z�[�����]�0�Yv|�Ճs�����:
���ɕ
�cs'm��;2��4h��8
��U�d�>4/�{}RC��C|���(�R驂�To���L��l#��Ok���SW�"�u
XD�ܣ��'�r�	T~,H�ݷ��q�n��j���ե�T�,�L�
b�
bu��ܿF�*o\��Y�
zK�\5��uu��h�a�?6���f"��i{��:E$�҇E���=�&�bz_a6@�)�b��?���n�5����d�ա�2��/��q^�W�5���V�2�n��o���ջ�˿�+��w�v����%�z>�v�hN9nz��Gx���]���$�b�S���׊W���9�&��q����^<Q���^o[�A6'!bJܛ�#��y��Q1�N;BeO���ML�?o.I=+?H�g"s��[������g28��1e��:#JsI��q��3���6{��;���`�"�*X+Z{5�7�o���eZD����V���
���q�x��l���r��6e/�[Ē�ڰ�8}��z��#坹�N����V3����Z��t���2N�ݠY��#k�:Zy�;��%v�`����c�Lp��re{��V>��^/r��M�@]��'�9��E�~�}D�~p|p<�>Br�ĥ!��1akv8•���b��W�����*a��{MEBjQ���\�
\�����	�{ߨ^@̞�J��
+�L�h	�h��O��^+�5&
���"a2i�����Ҷ(�P>2ˣ���Nk�P�v��W�Nb�d��Nƛ�>2�D�z��-2�<Y�e��v��q��[�χ����mQG��)„)ھ�f�L?��	�$��C�\�I�!	��ݭ`&<p���&ʵ�)�\��w7qɉM�I�e�_1Z����^0+�AE:��`x^6�G��.`��N?Ti�'���LvٌĘ8���>��s��zY��
"����Z�f{�*�5N���F���!��su��^�,t_beR�����Ne��<�.V�{�]��FY����W��Ucƫ��ɛvU����M+vۘ;��D�B8�sv�`�N�/�r-�Sʱ�39����N�Ӱ�=�)���79��9ޥ�`8�=��!��¥_g�u&��sw�k�%��dЃr��ͥ|�Y���7���P^}&���iϚp�??�����byp��R=�6�^h�g���D7B���:2�l���wCx�I�Ϊ��r1�B]L��Tq����L��G�n�:�~"$sG�ŗl�|6��"h8�RꁊLI��0�*Il�S;أ�ikV�
�z��:'�T����'!
�o}����N��~��C�2��ə�x`e`�������?�j�����"}+��e,�}�>�]����G"�I�g���WDI���ׄ�כ"�6*�Zذ!�d/ؚx�X,k�s����γho���iR/c�q1?T\�OY�>���ّ喳�ߟ�fA.�^��{�?�S��|^����^"b�Vڒ#�j���?�|�;���lM�{��g�{�=�t\���z�F�$��vIx�-���8�7���-E����%������B����ʄh�k2 �k_I���!i���]mo�6�+�qlDq��Μ�^v�v[zk:ܰ�T[�\�Ζ��R����l˩�n�}I�&Y�^H�I��o�#D�z�zޥG�ή����;����E<�)� ��D�YӰ��ni�r��V��d�^?��^�.Kt9��@����%j2k[kY�so�)����n�;:J����]�:�����G s���~����h��Gxgp��j�^޷��5,�l�# ���`��.I\M�K��1t�����Z�YQȋ��V�N=
����.�״����js�W+*
,
�3%���K5���Q��$B�i'��Q[�W�N��6O�~��#r�v+��})�q(� ��d��`T��1�&-�Iׄ8�/b�o�;����o�	�� ��g�N��E��ux����G�+��`�
� �F�eNX�v*f��nu���ÌOZ_�@���n۠�)MTC�VIKof?�zU|���hd�U�(����i��nD�q�F�©
,V?GhQ���ʖ����v��[�`k�Q�*"��&��r0����6[��ҹ�� ҸE��U��Ө�L�̌��w�8B�F|��z4�bJ=0ލ�[<2�9'���1��?��eS�BI iZ�$r�P|Y�Kr�2��hN�sP+��"M/y��/���ŋjl�w��
J�-.:h����/��T+����1�"�S
����rV4�w��l	�^�ʇ0C��d��ɩ8�!/�}$3�,�w��~����b'Ar,/r�}����v&��",X}�aPg��v�2z\E=�+�!���}�� [fQ����K�_	"Vy�E�p%�����Ζ����/��<��ε%�t�5	�O�S���.B�
��V�<�S��^��Z���ﱊj���$0_�h��>r�Q| �&�) P�n���"r�����I�("L�	�a�^���1(�@ߌ�AD06f����|,x֚����ķ���~�|q1�)F-����^����m��-Y�3l�2U^j�5++,����X��Ѝ���=����
�����/��p�mX�o2ܡ���9�_�'N9����|a�:|N�~���V�B��6����K^~e��h��,�XF4oٹ�o�N���Q��I�ljʶ���=��?�7GU0ŋ���SF\��$��7w�Xl�+o�0!�@�
j����%��&�i���Ƀ�����>e�����{%j|��FP��#�<�(}S��I%q�3k�z�OIn
%@Dڿ4_��ʿ[,�����]s۶��+'�������朔
�I��>�;���}=�DI�%R%)Y������$�r�s:�;��&.���]��U8��4`-��>�w����<0�nz�B�E�m�v6q��D(���|��6�ݴ5ͧꍋ��x@'I̻9��u{�������G�-@������C��5��~��U�L�)!\���8`S�B߬R���}W�Mu�T�|JG�}�Kn��WK����~W��ɠt������8���b�h�%��k��������yb�*����r����o�k;z�9^��7umdU�2�]"X�^tٍ�|����A,/}�r^�;�#Z�ه��O˾��2D\�`?�����1�+�*}/�)/0y��A�cd�nl���p�w ��=�����;���$�Dn��
�U�&!geh*�\� *�4aX�ֲd�a��$���\����p�dˆD������F��de ciU��*��B	]龭�kc}�?0̀�:���S���e���Ӹ����3{�=*�^�IxZk,��f�~�Jo�����LJWT�/��� ��֡��#}M/�h2��z>��Ӏ��q�t��[fڢ�7PY+�{WVyKx�#��z4�w&*�xy�O���,�g���$�)�O��
e�L�m��9���9����AC�u̫L���f�h��_*3 I��MA�f�z����D}�X��;N���q�⿝��!>o���"n�c�09m�ø��:ז+��٧�ƕv���jŸ�,�H�ѕ�ǗFͥ[�ЄV��= ��$�v,��V[/G�ݠ��ӻ�p�U���1$��&/��ᕾ��[�!6S�H 4�4�<(w�q/ܼ���/r�z�=�8Ik���릿�)�$n��^r�6����\�V��9����v�4�@#Z)g��:�^b6�.��{hҡؓ뀎UN����l��M�|�&�,�NS�q#���U��%��2<�t�����H9���C���$�U�L��&��cDUT���y����T��K5�/�����,Gd�d���[�f�[�Z�������Q�|;����A�EqA�|�Hb:�VL�TfU1������^�Kv��՚y�i�a�k���L{�L��_��\�p�@g�G���"�x�P�ڽ�ɬ�i���/�Q�"wz.-�a�G-m�	�T\|��n��"��ź�k�a��
�$3Kk�}hL<�h��K/�2�@� X��Մ�h�Cd�S�X':u�
х[-\�˥�jM�/��3�G|���+i�'�?L%Zg�7�:���Xf�
���o_h̊E�,�APջm�&�����Hϯ+�T�r��|!����&7�yH���s5����X/q�����H�X����bI\/���''��@�#�Rۙ��G9��HrF��_���!��T��=�a��|�٘���#��@�잋e�D{#�-?���AXzǨji2�-k�㤪����|%�1%t57ճ7�7���S%p���Q���G"’|�q�>ꉸ��ډa�B�%�=�D��p�����u��i��+�/	���^^�c>��T}�<�3Z����&BP�y��G�y�?��S�Dle�$-BV2���P��k:�&p��VN�Z�h�Z�IjUk�zW�Z�N�e��$=�/b�|�[�Av�{�.
�2���g>!�5uT��)����c�p����6.U��JjA���d+��_�#�//�?�I�=K\���qq��AÕ�;�����^|qѼh].�/�/./���sqw���N�8�U׹�b�_]
l�Ǻķ��YKR����Li[1
�(cIH��)�<UD�&���B����Cr>u~Hh�bI�YQ��^����

NNة1�8�>~�Ay��ﲂO��l����,���t˕��)P	y��8]��G�(P%U"k��c��4W�&�ź؎	�fٰ�E0c܎��+4�t��%LD���a�<#���Kw�2��(ɫ��~���F�pȲ���í�H�Y� �NDk��	-�z�H�\�(Qzh%���H��//��d��A��B��X��o�0\��\7�^x�Z]���~N�0[M��4�^�{{{۹������Q���RYC���|VW��믿�r)UB����PJ�����[T{֍�yHr�8��/.�6���f��"
��ڛ�e0����'�t��2:�$����wI9��]1v�k�����zf	͈o��_T#UO~ݐ���e@l�\��T�8g5jN����!8n�N�d�cQ��{����]�~���5b�@���SlR���F<�Y���AӾrb�ԅıTB7<йͷQ�w9)��~�8H(v��F�Ou�+@���`x
ׄs*?��$\�֠��W��׏��k�|[[����H�ס�}y�Z�|b`�;rXݙ9�u�/���IR�.�� �E�(z����_�:�0�D�bg0�*R���TÒ#^���~�1����ޯvR~|�hL
�eT�?���}�Il�j)9�A��cTX�<dJI��6��<�—Y�cy���̎�ߝ��}�u����vF[�HB�X���\c�-_�p�@>�k&�T�x	�g��@sD��趦�j���Q�J`߄���}
#U�{�Vݒ�������wz4.2���$Q���jL�~+6m�����q3�L��eb�����W�c�"���Fb.UUb�~�-z*}�Rp���9*�KN+������
�=�7g�9֒O�6ȱ	@C%HΊ��K�����mTc����g;&6����h�4J�=]#7+y7E�꽬=�e�o�^4p̞�;�+{!���*۷z�OUI�J�f���r1���r��T'���|����kuQ&���B��XIC1^AUY�6$?6J)��.� ����W^�#T��Qch���ʁ���k�=��ч:2��ੑP�DBq�H��Q��!b������C������0��:sC:�b�Zf�8��Y)x�br_�$�}�ȉZ�Sz����m�s��!��r� *�N�!Y#�"�ݰ�D��q� l �tfL�!�E�����$��#Nґ=%�i�#7Ƹ2UsJ��)[�8�)��o�w�JNtp�F��l ��5IgDn4V�u���e�!A2��lj��=�?�9�w2��#b]��䐺��jL"ȑ��T���6m�h�
�= U�*A����|��RccfV���Y�j���yb0\��uog���q{�r��
R�
aT�bY�U��������‘3}�ш{���zZy|�ź�
�AX�#IX^��KC��	Ħd�J��$�
D�
cJa�<Wj��̃P��窮���\\����^��f�#1s)�L�YQe܀*�X�	x�#>���!d��\h���J���*+�x3��p
��y��QT�_`�0���Z�gɫ��C��`�(T��Ԯd�u�Mv�j��
����|�^U��6	��^�Y*ת�v�:z����4��_q���&Ίt�/v��pM�
~@l�!λE׼Dૄ�wX�鴀��"�%~�n���3Ψ���)\%�N�XK�D��k_
��>jUR�w?�w���;?G��)���O�(!><J	�X�B�'΁x�V,�H_�C�_��?���	��}w�d��L���M�s���,Va�z�7�n�$���u��������8�&�x�
�0����lZ�
R�#�T*5�
W\�V=E���h\s��m�w
��DyWj��M:q��&�	
Յq9�͓%n>�:̡"��|�������JA,ň�E�(�Q�~!����ⶸ���`��|A���ZN�(���~��`~��~��}������%�Ggr\�����Z���+C��]��^E�B=nڛ[��X1b�֪��MP	��LL\�鶽���7�BP�ѽާx�ع���k�b�/62���CFHs5�x���P{s�2l!�B��psh�gtpP�Q�	�AN]�u:�*`7��I2�M�Bw��ci+��h��K�����d#�FkBW47�ٷrm�I��4�'��2��G�ɳ�2�χ��D���al_���	D`6�+w8
XE��a[΂Q.J��f0ht&���B�oP���{�h�Ҍ#���U�\��y�$�&�u?�|��0f m���*;���7��<
��?
�G�E���/�E�|����YO���g�.U>Sߟ����H�A ���
����{��P���&���������u��S���_�����Vn�*,�r���f&��s&�f���VxyR��k�\���\Mi.#�E��##�\.��!�����"VC{Ik<kf�A��X{���vԌZ��
FM-���]�
U��/S�hx��u�y�/�/\���
�,�e�a7r��S_1d4�_67"�	�Gk�,B������n�9��
1�/�T��l8��7�t�oߊ�E�u�	�]�>���i�F��է�
?^n��R�@l(*n�"Z�Cɇ��N�nz�3}�Ƅ���טW+|�JϞ�!����x�\���)���2���;"4]\Φ'Er����˱ne��gLL��m�1�6&�����W�3�HIό���p�c�k��$��ä����90Έ�"�6���u�:�g0@r
�P ����[1��re}�p8��W�\?�3k����,�x�ۛ���?Ù���@V9�f>�VN���Rd�!6xn����{�)"�e�c�;vy�,Ǥ$�S�k�R��w�b������9 ���1tL'�=\��	�)��{$XM�Ғ��ſ�)1͚��z��Z���u�:�L���!
��)H���Y�۵?���*1�r��>�A���Մ�>���E�is�"B��w�%޲&��Y��y<�ةNw� Âc�cun�×2 �˩��1R��і�7*��3�,�2P\s���"�(c�� ���En���4�P��9=���Y���9�NT�;K���yI�$�u[��ą�S��*J�**�2��du1i�^Ѕ~�}�hqm���N4�z�v��y�h7X���Y&��B���W���SG7��Dq�kތ�4�M7��/�4��J9ND��>F�3].��zpoA[nLR"�99ٝ%IAxl���`H�nz�!�K�9���b���Y�u�.�ǐ��x�ȼ�����1���V~�.u*��N�w�|Gb�[��P,��̈S�Y���?86�]�{��L�Fh��x��؆V��)��o��@'a�\��
���e��Ԙ��1�]��\�ʼn���V��wk������4��_��G($b�H�x��<__�Z&P�~��@�x��|w&e}�u`�G�!6HP�����Ey�o��^��xCaH��40{h�>���+�5��d#*��L8���*0������rD�~2�ޑ9�sgi�Q�*���J���,�Q�s9��ܛ�7��#��Q�*���|^�6�w6�4Ȩ����
b���+(�5T^`�gw�
��X�|�wJ��qb!�N&���7!���V0���g��3�r�o�����&�W�g��|]��
�s�k�3�v�5`w�>�B��
�wͺ<y�M-�q�H2?��"��.� hW��y�[�v� �[[pf���U��a���3k5o�a8S�L�]PU��K
J�z��t�'�(��CZ�
	�2ӵO��j<��
 �J_R�d�� �m�������>(D�5��D��w�N���h0�٬�=W������/�7Nܙb��f�F��h�b1���{�П�\�$��}�b\�������s�~�aZo�Tt��jhJ�IY��I��uqܿ�9@z������M��K
��vHޑL����|��
�C�s�<�ȊЙQY@��]������O��}���T:��Y���Lڇ��ʬ}xx�rC��8�:Z�M��e�������%���\�X͜�4<��ߟ?������oZ�c~�����y��l}]�����|���տ�OHI����={���>��l~��lR3�7�F ]޾h6K�:���ٜU>���q�&�K�EA�&��sף�?��ş���Q��{���r>H�^��L��M�X�/���}x�:��2��=N�*8=�xJ�k��&��=}J#q�.D�ݷa�����]��۸���E�Y��dŇ^^8��!���k�\�,
ږmueɫ�n�����n�z9%戏��(
�ե9o�da�����c#ש�•dž�v�Xz�����oh�Q1'�(��s���+�?��ϥ��[M�ۖ�!�Q"$��±ܶ����P)%����V�� ���^��t�8B����V�82/�lKe9O�dˬ���(�Rl���
���o��Z�X���W(N��(я����f��A |��Vss��B	���*?ޗ%J� 	��l��8b�E"f摾J�\b���\��˜�(NTDqn+�J�HP����>�l]A“�r��7����U���<��$�:�‰��d�+�0�d	i��2_�EE�?�˵��q��_���Q(��B���g9nv�&C5JJ�j��y���I�l�e�ݥ�� H�$�YKv�zAΎ��e����sahU�6�|�tm�#/�Xq[�N�m`H 5K$aQ�H*���jzK�SI0���T`��-3b ei8�$	Hviz8�>*�	5J}s�
'<�l��M�a��M��t�޺1�/����4_e�,'q2 h�tHH 4�7T"��Xh�vu�
G<$���fYV%X�~lwe�tuI"+#dP!$P�'J���:�8
�mS�(���c���W���L�ܻ�H����),8ؕM'7G�gX�d����Rq �!mK#E)�㮬���`�� ����r���:�@�R2:
$[�L9)!�\���XN���)�m6,�-l�i
��]ĕ%9�
����:)�p��Ēzv��]��e�}�2	�t$��$����\�ЂX���N#@�pG�TBp%��5�_*�ʠQ,ay�	9='7X�9��	��������{�a"��O�@��2�)/�H���3=da�Kt�lg�nj����,�DRwéN�����V�<���Fcα�^J2�b`�#��#��(���@�-*DX�`(�)�.�5�x������,�b�P�=�`��*���X�u7�Q�r��uV8�HX���?��&�q܂�`i�7�(�:��Mj]��<�U��
&�
oӆ}؄Db"�d�$C�y:2AD�%1��
��%
rvD��0䑘��aj$�}���*�E�@���fc��?ȖV-ً0��g�n���y��9Z�P�py�vFmc��&:H�"h��(@v!����f��JU�E>4*�	���u��lG�>b�6��Aq�.�]M�/QR�v~RD�z2��1���(��F&��ȸ���'��g��a�~�(V�%F�7��R8�
��	���^�U��ȥ!C'I-(���KIh��h�CJS�uS�a�f# 27�4�t���Rݘg8I=����M��{��G6'�7�6�c�G�ѻ��� y|�.���7;�M��Z��D������t٘{��7�A��s�9'>%0�~W�KcVY��g�����c8�+�q<��صQ��]x	��{ t��	����>w(H�|sR�B��?Ž#5�
����9ŹC�?�
�\L.fCԊ�/��-��L.����nm����_Ӌ�Tb6�R\O<s��i��S���R�e����	'A��ʹ�`K΀�k��l
/?u�'�	��|��R���c�hbu[\�'|6��~�ٜGr=ytCm��H~ͻS���@4d�=o���ƭ�Q�vQ���7��K���enemB�H�X���3�x��f�l��3
J��}���g��1_�3�B9=�׍��id�RL�?ik&�W�f�ܛ����l��'��(���څ�^U�ͯ��Ƶ����P��z�*��\,s�7x�i_XcC�VB���h�{V���o�-�_�����p����abO�/���a[�u��h����$����HU f�^U�ޮ��L�����a�[4��@
<�c��Yӄ����f��~�7Y�⣓7��k�-bT��:Px(���7&�Ϝ�Z*��l�l���y�2�����ܞ٣���t,�7N�(щ��{l��i�����z>:՜�2o�V�t��C&�Mh��%�{���ﺻ�^����oOׯm�*�W�^j��f�4��f(����CI�����lo���>�x�c�GN�gBz�i��}����tq���Δ�������y�6sX���v�R�{���l��^d���A�����3�pc����{��͆V��wZ�S��Z�*�'���8w6x,��M��5�$�w���Y�K�?Q�#}�ǥqmpp��|]�3���Pl-\p��ϸ�O��>6����`�ύ	ha��	��l4���'m��ߚM��-�H����:Kg[56tya���K�c������/�Oy��կ�j�z����]mO�0�+UF�B��P�(,CB�*�Z��PPH]Z�4�q��߽8���/�@��=׳}���|h��4&����v��q/��'
��G?ϩ��u�~�g���_����wv��v>���
�ia�i�q��w��5�M���(o��f�=̣��h=�+�M��DO�歂f�U��27/��9b:����A��$f�棘��h�o?S"�^L�Đ��D*�"��22�h!^߉�uD��s�;I��s�\�_=<}�&X=	��n�/�x"��N�`�!���z��/��܂�B$t
v-�q���;�N1�u4V�t�>[H�$�% �,ƕ$R����뭉�����;(��h�w6E�T�ūQ1KE�,��q��4B;��|�^�R�epY��U��T�r�֞N5��BEJX���u*cBu�-�J�XS��4��ٷ���XZ��\�ߜZ�S�e�O�{@̃�a��w%���O�7##j�Km;�wd{�kddI��S	>8�7`7�*Hg� �f3���"����Z��PZ���8p�M,���l��*�+m.���X;Vݼ֖��X��Ы
�s�V���@�Kf�������n�@"�W
N���8��FϾ`IG�TB�#ͩW1�%i9�����|‰8y09(ؤ�^ǖ�\b��\��kZ���v�Y�@��"e����ő���B���K�Z'��:��t@>��R�\lfÈ��'��U%4�bm䱆9�H�nI�U�?ȍG;)���L�"�TU���H��5��</Boe؆k�רV�5Z�_kz�]���cE�1\P|���+���s��"T�*��kIo�r�rr��S}5G�9��FӰ�8Z�6v���	\�pM]�=���|.f���\�,��@��0���X3E�]3o
���g�:��Lu�]����?��K|�+�}���m��d�u�	�O'�/m���	v�L�^:��x�QK��̘�`4C��!߂�"���*��Te�&%giǂ��0$�U��
�r@<����b���Ԃ�T�:J��%������]Q��6�-�T	���VU��V�m_.��҇JQ�b�@��Kw��;�1`H��{؍1��03�p�sql+W��F؅ś�2Kfh�cň91�Ϥ\��gF��m�ػU��Q������Z�kt|���R���l?������)`������L�F�>s�{��W{c�R�{Z��|!�FUE��T|���3���R7ܣ3�ŵ�	ƕ֑H8)�PdM����e�Su�h�
��c�P�k�ȔB�����FHݩҠ\'��4�2Qg��-\W�Z�K���T��*��m�'$A���J�8KA���yq���[x���s�#���S�+~��)�3U��k��v�N�
V�!��Ț��`Egr�ڹ�;E�Z��f���p�A�_5m1�pR\zS,�`� �-N�X���R$���F���)�2YF'�����%E���C��R�z�V�D�hw��˭��T��8ky?I䜘ς<$���I��NE-l{�<�����hҼA\�*�\$��Q5���S*�bq� �z
�W�|����'�k������`
���@�dF�x*�<ʥr
��?�/�;��R�
f᭏�ԡ��O�d/6PD�t���t��?�1�OJt~�:8�̸�A��a����<�s�����	�yp���R��F����)cP�P��r盰�0r(	x@?	�$�9?B�%VeF�IY�dZ��:1\��o'�Rq�*QB=�}4�Q�;�����2���D��r�Ŷ��]�c��f
:��FXM�
G��{�^�b�dj�Z�&%L��AP�m��`���Ql�ك�N���Ӹ�}���zP�<upQ�K��jr�n�d~=�����vT���9���p!	v�+���ր�tpǻ�&k��H��؉�����Kn�չ��{i�C�{���k(D�^PAO��Oߐ5�[��@Y*1Z!b,n����(�T����L&��
��xS�$�A���������J�6��'{X�6}���#X���* <R��T��퍊��N�hץC�s@.�� �� h
rSݙ�f����F�����ot��B���*)�GOd���ґ�Ts�$Xޔ�u
���i�ǜG��ѣk:@6Xp�,'��޸���Y�(��+���
�k�\����q[�S[U�C��R�Q�F�NB#�E�B£�'	�JX^�?�v�P�/x))c褞���V��󅏑N���LM��Q
4������QuC�v����n�]���Tnu����D.:z�S��c�.U��R����7R�����(2
�ܯ�f��S�D~�g�B]��������`��E�Aƒr���K���Xy�Hx��Vy/�V}h�2K�q0�Yp����F��TK/�q��%M���U���������n�6�W�a$�~&NcJ�e+ڡ�,Y�u���⨳%������}w|K��@�y<RG��]����0�A7����#R5>����xęVE�������� Ś�G!/���g��=56Y���0���
;�Q�{/0xV�E�/bE��
���}%�	׃�Y�J(@��S_q�{�Sr|�"�F�,�r/O�r2�O ��E�F�'Ca�5��ˣv�7�'�Q2�
FkF�j���ax���G<] w�8+�fq#�&�)��sL&g�?V7'r:�E�pO���hڟV������K�]�r02�-�H���5���6��\\�� �7�-
 C�H��PAV��<��GG���	�`�<�OƓ��^<:9gٌ�9=���Xh4�@�h��Kn�M��e��"ҙ�bAdR���(p+~
��	f%v�).Q��Gf	�fY�T��?�i�X�5�+i���Wb뙙�]�[�#��J;�u*��S\M�Jr��o�Q�����
x�?�&�j2嬆���n�"|ގx�O:��ƺ��Uf�s��i����
Z�ʚ��@�f��}v}Ʊ2G���`�_�ěL@����u|��a'XuU^W��B+���ü�,��x�D������1�>���h��5>�;yO���Ο]m�ATks<Tx"@G��j���j֐�M5��m��%%o(yEɟ�|��%�ze�Vu���m�y+�S)vm��Z�A.)�C��5��j��Ƈ ��[^�ȕ���]�/ÿ��ο]���ګ+�=4Q��Nc'���&g|i��n��rx�Oul�:Z$e�u��� $;:�[�@�
�#=$��*WI�ri�	�"�!CKD�?����(�.]�B�]Sh��*�
�C�&����
�?�
���>����tp��>��϶����-��$%K >uE���
�Pa_��O*��&�"a��LW>��s�=d���R��W�ׯ��ٮه��}�ͧ<
ա!��Dz3��7���~A���Ao�/g�G��a�P8h��(f^��a7�]/��W�5�a��(|�EK���X�LlN�⍻��8�� #&����!j�0FoNs[��۲J>�aYE�je�*��)5kH�H}
�����J)��[��L���~Y�"Wh�?b/fJ���b�c��s�>�lշQ�aHg�L��2 �d��+���d\\@�3VJE%����/�vY�!���$��� p����	���տ��B8&�vn 3�;t��D�z��C%�T����=Dh��SR+�{}�3��:���A�SZ�~$��j���Ί���28�>�L8(�KЙ=|lO�8�x#�2����
���FX�@��8ySK?�H�G�9ja��1�'KIT ��X�x�>�f9��yWjv��D]�KP#��%��*B
gTo�ûN�w�.<�U�v�:���Ϊ������r!��[�H��Z�\��|�����^2X��p6���W7-����	p����W�
6~��o��t�7�y�6�Fw�h4x�;��=<
tm��:�ȉ�b�!y6d����,c���
ĥ+Z]�o��ҝ�"���n�޻��9NK�|r���|rT�-�Sx(��/�ܕ�Ϲ�/�|̘�0dA�Z�YZ��}�*�B���18���1���%��E��R���l/QeS�\h�s4¢�p�^����:ք��\ɥZH��jc�cdp����[���5-tK�yƳ"����s��D\�	�"�|�7���Ʉ�><i��͡���TZ�E����Y�A<�F�z�@m��;�J[���y�֓)���1�<C��^�0���_$�l����Q��ܨޛ��ӡ�5ش�
����4���8*�1z��޶Z��ׯ-����U�i��xoKf���ZW���w�.tuY��&�3
�5;��XDw�5�"]�D�"��s�_j����b��5Mr�,�-���ls�u�WM�d�w.�G�w�,�;
Ɇ��o=�C�H/h�pn����Q7�ݧ���x2���RTm�O��%Y��}��g�I�զ*�����0���1�4;��p��J/�H<�H<�UC�e��#�+��m��5kX�	U���V�<~�1F�B̓��-�l�M���V��-%�Y�tdH7L���Ѐ��x��-���:f�˳�_3���gѣ�����W3��Xq����o��{ݥ��V^��ڽD�]Mm��͗�1x�1xI��A��QM���9�m{�_!����2����Oil4~�c��u��ݬ'�~�AyƥU�T2q�0�0b/�ΐVU��p6
�h���M{�������VI�k<-��e-|[5�Ir��ч4ǀ�.��2����Ř�
>��OU��">�΋�E���{�a�������$�đY�pz"���/�D���FPG��0���0�;���{+<��H�҄+}�����]�s��r�Wޒ+���SyW���Ԟ�ٗ����ٻ˱dK�����Ozf$����4_��z�{z�ur^��Su�N���`�����$9�NhLcI����
6�m����f�Z��S���q�j\�h�kN�T���ډ��9y���*�$n�T̶�j\s�?�*矡<���s҈����BY�c�eU���l|քE�U�:�M7�j�nVz�wBx[j��팛�u�ށ��<.�	z5��ˋ�и����%e��
�km����02�:̶����.s�QO+a������	�w�2*�&"�&ݣ8Z�����:c��:
e��}��wbݼ]4�)�뵜I׭�qqR��:hF?p�l�á��e6t�JMć�IE̖t =�l_g�]�g�N�`�$�U%��d$�aPe��
�N+m�q��?B�S(~	���&�)��F0Xp�����!gR	Q�>#�A&΁Т��6<tJ\4�!���/(����d{�R�{1$	�#x�ΣB����;����'��6����}�y:�ߪH%�.��Qx�AK�;ZBw4,w����Q*K�wСz�U�s�~�x7K�П,�Q�w�;2ѯ��눪�gf�b(?��FFGp?K��]�	&!E�::��V�:GiBd�|� �]Ì-�3�]]���/TO�̻�`�y�0C+�k"�T�D��٪o׈n}O�����D{��>�Y�)��v�1ܜ��0|:��]„��R�����~̍z�hl1}�9᳞]=����a3>:�G�!�E�ś��Q:��K]?�SQ�J})�U~I�|3MJDgg)���5�$����x�p�2�d��PP&rx	��CA��4X(-��e0��L`��>DP��t�X�q{�n��Pr���p�r	�}3>�La�=�c9A]��SQ���BX�7�~�]�~�����i��|�)��L��+��p-�n`KL����]u3�oZ��i��7o5�Nw*��~���fSM�>������ޗ��2���s4ԳlXe��u��I����Ƶ�&�ձ�\�G�����権4֨��P:|"�21���ϊ��K.�l'9=�cZn,<Ҍ��z�>X�Lq�`�&;�Ͻ�����%�\��J��{I�	T��D�#����{2���?�7�[���uwo�7M�@g��\D��6�ҽ��/v;�n
��!:
oI�˧pؐ�4=����۔�W훱pc|���}�%�w�y�1���<�:3~'�t��I���mq����"��
m|m�D`�I�8�GDO��4BR���(�2��-CWʘFu����
��2���r�U���{9�G��-�2��aP�1��h˞N�L��(qg[��')*��b��m��ɛ�$ږ%}b\��|
�23��:okb�Na˓�г3Љ]u�q���Y�4����-Ġ/��uX�`�U�V�6���`VdJ�/��ܠ��=���;�V�ό��$��3�H��sK�"C1��p��;�.�ۣ߸������͏�@�4��Dh��D�'�X���W�B��*��Y�q��� d����-U��v�<>�I�t���X���d.�2��/l!����ۛ��`?S�(�x1��X�Ȩ������9-�2Je�T�����1|Ԥ[��n=���&6wF��[YV���V����ic�9$"8GD8kKUR�hA"��jA4d���R�EL;G�$ڱ����eF�3z��us�D�OU.���ܹ&!����[�$���7��8��Sٻ����7n����)7`�o9�N
�i��[�t��Y>���An������h+g�g�I�{��>�`D�^q�[��G�j���
jW��i����[GD�j��H��(�17�����_��.#@���?[m��/��{	����&�2���`w�vY��5�L�8vhw
��T�,�|��X�HL��0b�Nt*�'�+"6ȋN%�����nI{!�̤��C#��'͉a�2<^�3��^+"�6t����KB{N�^m�4�K�[�f�B�}���7���S���Na'���;v�!��t�$.���P�������_g������?=����Ä���� V:��>�4���m�==������v Ŏ~*Ǧ���K��~u^�y��qϵ�����~�������@�:p�ꎖ��~^�ڐrr0\N.�h$m�*S�8y�{��A�'9���R`�mQ�̈Q	�i��=Q\߷��
�UK�7�c����)��A^��RL�~����?�0�Su�:Qҁ�pZ���ڧǎ��gz�#�e��Kg�~�w��
r%�d�(��ͯs���@������F�1ˎs�ޅ�y�E�ڈ)'���%����3z�.,J's��4&�?�����X��g<Xc���{�{���7�T^&޳��;Nn�&փ�;��
�C�К�Z%9t��h����,���Ϋ�=?�W�x_АM�B9��FG$6nQ��4Q�1�U�4�fڷ�\H&�!�e�hqȍ����3�yS���S�_����������7J���6/H�)6
/��1��r�=�/�����f��w�v�꿪�/u��--ks2�_�)�_�f�Ѫl����*��j���􅾌����x�D.�l��
��+[;j�(g���ٜW�6�$��>�Ԫ��edT�9����,��	�õnlN��S�+����
7�3-��j���N�ʸ`�����W�%GP�-N�ü���WB�K�1����=�!i�ߜ��f��+���X��]%f���f"�Q���Q��&��x�#���L��&:�o����vyA���~�j?N��n��Fͺ��.���Nޟ��= �1l�/�^��Y��Kn!��^����g�*���A?�PZ�,��K�1�����x�6�٦=�p�$�^�Qo�|�8�`I��YK#�$�_�8,��ZmM�����sn�ѩ��@�n�0dZ�d5Q\���[��'�	!��G���OUe�I-��r��8ñP�4%?��V<�DxP���A;-����a3��PF��t�u����Zgu|���;B+ػ�D77}�R<n�qK"��$�Dݨ�v9�Cxt��CY]U�|�!�<$A}��S�]m�2��f�{7�ո���؃���o��p,�=�r>ZYmd�w�5�w�߱c�‡����Y����
bo�Q?�K���� q'���H�/����D"��L�I�6���MDl�����x8Y���
���_��H�>ǘa���2�39 ��nP���H��.o��79�[�{�}l0�^)�n �8D���:S�D`(Q�����i�n�iKO[�䦻��vo]v��u#�u�6�[�n���r���\�[�0��І�=+��:w��g�\�h�o�3A�{��Ee��Ɍ���u�hÆ�N�����e������!u�	
������tn�uK����Z�$Mj��'��ഡ:�'�������Ću�r�f���U+�4��Z�h�$�&�}�/�V�����r*l��C^Lv��Uj	��V��F���d���j����9s�-��.��Vn����u�7j�یg�Q��P+[�}�֯Z��[��o	|�,�����UcTՄ촊������ؐ�d�e͏�Y����Lkӭ5jKU�՛c�1v^�'ꆀ;�5�-�O�D%Bs�g�C�-%Mt /���h���G(�����?}��Ni.Y5N;C��i�"b����%���t��oK�C5.-����x�2$�h��>еp��HO|�#�@k���PK��!�)�F4��;��2Uf��v������_�j�}/�&@�+C��`[='#�Gҋn�,Df�>��ecS6���w����H�SDX�F�Oc�8q�j���@5�#��lu�N1��S���{"̙
Qh������t�
FT&k�����vĺ��2Ո�D�n��G}��囟���N�~Z[}n��g}pT|�+(�G("F�<g�q�+(���b�@�Ԇb���f�*�b�ڮNh��x������\h��v�>}"!S�$B�f\�q�WD�8��29�,{G�[YgشFY�l꯰�;�w��A��U�F�"]�
h�QV(���yX�knؔ:	�܁\�IOJ���?hm���8�ւ�2R�Yo_!��>��ǘ�<Y	J�E]x3���7Ƅ�.�啩F#Jߊ)[���3ڻ�6�*�{��q�\����B�!��pd�s�B,z2���0;;[j>U�J�3��x�T�
���^)kd�������'�`�0q�j@�d���,HRV�q���%dܯ�2�iON	;�����i�@�lG�&<���
�4A�Nv4s��)c>�������:�!F�t�g���'�D�\�w�S]k�Z�j�z�"&e�q
TS��5RD����um$�Jb6}��z�v�[ix���y�le)�lE�"7爬�!qs�_�W��͓3�2�$^�h�Od�@�v3v'֓�0\���K.�KN�3ȣ%�if�%��uVG�8j5�����8��W�5h�j�)M��]�ʅ�y�Ip�cV[�q��%���;YШ�o%�Mv���L�o��fEY��D,׌����_X9mu����]ݏ��W�}X�CZ���m}h����E��%��Vr$kc�y���o��([v�y.�(�"��p���m�Q��4:��D�s.Es��F�Ql�z�/\�4,�|���E�Bf�E���B�ዺ7�"S��H�m�}��>��
o�E�Q+ʍ��c��r!9��Z���j����u :�޷|9\�Ɔ袯�M���L�����Q-��5>�&�ĵ��KC�
�<��k����s��U}-��y��V��m/(J���)aS�Ӹ����z�&�R��+��^`�X�Xd"����
^����[�ty5�.�olST��b����Fn�F S��f�(y�3�Od�3\��65�lCGp(�[���4��@�?4t��9���ZV�I�6�^	��f4L�%�(���t]�]��-�����٦�&�4)M������~�֛D��LΈ���q�h�U�p5���i��`�����徃_e�"��īh=$��+4+��XŦ,we�r/���ʁ�g�p�o)�w��m��&I�&���������:��&����%s`E�if
e����#�6�R3�Y�X�/���l#���v�8f��~?�'��j���'�@�{��n����3H%�o�R[����t�	���|��|w�akh��KQ:{	S�ѣ+�ꛐ�p���C���j:�4�F.;��`^�V^�h�'��]�o�Xq����6�h13�K�1kW���CU�>��������`>m����X��Vi�OUՕ\VQ��DX�Y�僯IU.
-�8�D��p�~�*"�-˰d�k3����O0�u�zs)���-ܥm@��گ�4c�}'���u���>�	}�a���/�0G���/���3�+j�D+v�}|�����3/�3�HI(�&5��XB�����0�9&����T����W��{�2F[�b��M_>��袾���/��=hT���½�#y��1�������#|��k}�nm�g!X� v��7}QM�w!s��a��*	�w�Bj*���Xc\��#�Y����O�-[t��6`�uRwn	O�ʚb{;U%�V�<��e+�[ZP����9n��NF�J��S�fN,:<=˛=VYV���p���IK�J	I+I���b���s��,��Ks��S�QH�)ݾ��K��A���e*��C_DÔ]�Xæ	QD��w1�z
��iuQ��9Lrgu�Pw
š�6bjXϲ��Wz˟i;� ���/�t�HO��d�hR�Sx|�0�}L�>��h����8Qi��o��c�O��b�z��p�y��`;�6n&�3���i�'g�Vܟ�fWnQ�<tr�K`;�;� �t��x�ED9��H�d����-�9r��A��mq��1�Ls)����/�t��S�&��3�A�O��n�VS��ܢ]�V�Ʋ��UDdY�q�����W끈
z����7���1��B�b�^�����[,G�\C&�a�����ۓ���Y�ѻ��p��T/��|�@���v5��|�W�
ᤔW����%�q�/�"N�7��V�N�������G�5�!��0Q�In%Аp�/4#OU5�zq�F"`��i��z���c��~}UBT��7T�i��_���4"I�7��y0mߑP~��x_�Y��$�|��t�
P�,&������
�IS�1�͛���
��8;��]~af�}����E��V�O �-���︂�>��k:N����`X��V��%VͿ�o7�P$M��� � ��C�N�Â�!6:c�NnĈ�
>$T<�ү�l�嚮��w1�h��~�!v�V:F/Q�m,�q6
Hڊ#��f�u<������^�:i�N����Q��Z�J:ģF�vC9vT=)t��x	jf%+��\���&�m��������DNXy΍��b���b�V5��1��F��(�s��D4�A�fˑ.�*{�CM�&�4�
�ߛ����a@C9� ���6}�v�a��+w<��v��
U.��C���o �՛�w`c?);JY���>`{���Gr���P�NZ�)�7�:�v5)'�!��~2'������ĪZ�� ���a�)/m�-m���u��O_y61
��}.�gP�ȅQ�zre_@���`�O����0��"'�\�]�������D�µAOk�%Ig#:Ėɯ��s�aݳv��~܌wS�t��;����nL���9:�ϒ�Gt8"�Ú�(�tO螕��ղ9���锯����+�j��ׇT�J�V�j�����O�@L�@/��@%a���F^��+G���+�c���UL ����Y��nL�?Ӂ��yLGL�	w^_Ӝ��1�����1��A�EBy:El��d����ؿ�1��ՑM���$��u�r1�<Ps�JSmw��$Rd?B��H�6��_�k�sl�ޚM�S�Y֤�nU�z@�0���ߵ��?h���4U��0t�8�M�l4���[���g�,����P-Y?'�{Y�\��D����$����eٜ�9��|�����iߎ��a�Ln����$�X
�w�?��O�0"?8 ���aoy����$��&�4P5w����͈/��ض�<<��i���b��j�/tׅ��(�L�m:��|Y�p:��)��6%�cBrZSL���,#Dl�z��=��Ԭ�(i�d?N���My�6�i�i���Og��<ݔ�d��8ῥg�p�h���#���|�җ��]����6�F�����ks۸񯸜�
A
%�G{\7m��3�8͇ztY�d�2�#)[:����)Ҷr��8"^�]<�>r���KU�g��s9�����Itu:V�	+�Ro�nO��p��O��)j����y��*�
��c4!�#X��AnGzK�Y����/%UKG�ʛd���z��
��YP-0�l`���h�T����	�M�gG�ŖQ�-�-�tQI�hn�F@(����?6`���#��*۝�k�A�:�
Ë'h4�7�{�MƐ��1aO����������3�K���%d�K��O�Y� -0n2o2;�}&���a�]ׇ�>�;v��ш9}���]���]l=�f#o0:�z����|g8�7�V?�8�A���j�����e��
`�Zݘ���	�#�)�q!�A�
-�w��3�y���C
Q�c4��Ps߱���9��a��!xc�6fC�o�ױ]�����]�@��3v��j�|H���؃���?��F@�(�l��C
���?��f=h @~� �y}��#|w4@p�pc�/�G��~����<�]�ˆ4l6(<�+�}�p�`�^:�y��>��?D(�=�m(�96�C���TW�0b��=h���M�A+���A��^������9���`�Ǎ���9~UYND�ߛ��36���[��7�؆*z��~�x�QEq����M=��R�����W\G�-n��9E2S:��;�g��I�bFA��.�tI��rz2;5l#0Cy%Bs���J�F�9^�iS|�(Ҧ��I��N�S��fF'�g�>��`�aJ�=	BT8�	�Hd[nO����?T;@��J�x���ot29G�z+s-;�'@A�����7���M(�X}6�
 /sQā�L9>�s݅s�_�����M�������.�����^V_�\��h�L�N�D��^-�6��`**Ô���w	�<��k)۶���)�f�ݴ{6=�kK�W������(y�g��sf���lųhnS���O0�$���D�NFF������Vx�,΂{H��._G�슰����d"$��l6LH��|* �.�(U���{��X����/�y�.ڑeQ6|/��YC*�3�j羇��	���"�QF�2�?�[�s���6��g�<��GԻ/�E��#<�/�w(�q%�B��4��4�/9=��j��X����Z�]���h�N+����
����3�5����d&)5�r1�b���C����;��Nj�z)�O/n�.�g[32g,�N7z*}ذ���|d	p�7F���l�آ�EKtE�H�,
+B�hFW�7�|H��0n�(�]�R��� fS;�������w��.CbK���Sɰ�dX��'�ԭ&}n����d�ݡo�v]]J���G��'�SKnky�]�,�/؛������)�1�a���.��u�At�}b��W*�Z��%��(^��?�;����wǬ,�=k�
�%���+SNW���7�*l�Ō{���pϜ�W1{�1,8;l�'|�߼����¼3�|���8�>���U�D2>��Z�Di�O�88�GX��9�/�N�c�7j��D��^�g���O�,ח��mq�����Q6��d��lw�W/)�K�l�R��2&R����̨-��w$�7�ɷ�u���k�'X�˒��&��Z���ʳ��M�J�]�]N_~>��o*�2(��"�$���'�Ⱙ0��� e���3�k��G��-�sK�'gF����8���h����Q^��@��
�Z�Vc(���9L�W�:�Ig�V3�uFz=�V�Y�p5]��J5�!g^Λ�0��ĝ!����A��؇��eZ����e]xy6y1�L
&�P���ù� �ݯ�F�Ơ�F�/�iB̅y��c����Z�
�`;��<W�j�Q>g��x�<l�+ U�x�А�q^�A!w/��5'=�u�)���P��?�x��r�a��Ų�W�h�bv�M�-�x����w}������G�:5
a��`�"KX���A�
�(���QX^j��O�Q"m��7گh�����FK�VS�V�z[�;4R��U�U�Hj�ʌ�@��pu��@�{�	kn�j�M����9�le�E����~��=.Zk������G�.hD��蟊�Qz��
Ͱ(	7Vz+�8�t
��U��-R� e��43�b(`~5��S���A!��W@���a�7��cTѭ�,�lmn�~v��"��U�h" Ӷ[���J�Q}��[�
'8x�*��[dQ.d�m�<Ok�i����R%��V�}ڒ��%:�[O�i(�oUN�#a{:
̤F��6W~֖������$��>�*�k� ��/��z���O�?��> 
_	�bR��V��n�
5�j���LK����]���F��I2��_ŋ��>���@�=8/�YP�v�r}m�&��j�	�i̦Pتv�F�駗{Vxa͹r�}{e�����wo�|��BF\$�5��.�
f��*!�ȋ�Γ�Vu�Z�S���	�K��Q�ce�|�k�;��7�o\������s~���\�,LS�|²a�d
��uT�y۬���d�#1��V�'���;�I�Gb/w��=!�1@���M�'����9A��P(����b��:$m>�#�px��f�Ԋ�l���#�
�����6�^�m�BS�f0`6�[�b�m>��-mj��ްK�s�ʶ՛�M����@�B��3l������Q�T8���Z�M��k�:��leg�1�&)���]?:G-U��<A:�ٽN���h�P�R����RQM'QƎJ���<�
�k�0%�|��
US!�����j���)�m8�_d	[�j�'��r�e�wY�
�\�5�8E
DV�ȂSk�2��u���vsx�Y�]}5[�%S��A\de1�ţ�[qP�w��t>e����X�'��\9��,>YX_��NW'�q�'tb+�i(܎HGf�t,L��@�>W�oŔ��H?.p��q�n8:�a}���A���pD�����������|����R$uv� c����kт�*!6+��e��&r���*��M�h��<
�e5��B҄d�G��M4I��WMc	�FVy�75f�i�)�ϖܟ
|T��v6����.o�ܴs�c:����Xl~�M�w[#�@�H"7���-h�A��L��=bT�ꝋ��}��(�/������T���j�|7�}=��XE�´_�K�]jD��Ȫ���4,3�k������#gג��k�{��
�X07̶:P�i[�j[�rw*MOj��(��;$C'�/Gb۝&�����|�B�/T�^#v�!�2��1_%�A�%<q�9_7�ح��5��@f���&8R�?@hw��n��U�ȑֿ��nk�n_��k��Zʖ��n��vj���]!h#(�hS�~�#5ES�
�VI}q�@f���(��=*ۉ�餿���&s�K|�,�PF�x��
M����I�����)�������ЙJ/�aRM�&M��_���a�a����!hr�\>�����ڑ<�+~�^y�Ã�o�i�1��R�I��5��mxq.�,�Wg,��fW���߼x�-w��m�a�=�Η5"�����HY�Q!jE�$_� � ��)էI���,+�~9DS��Ҽh���<~���:΅ţ��,T�-�`@E\6���.�J1x��x�v�q#�Y8���(�W��̱r��>F7wq�ͧ��-�Bܺ3���#]�LM��?����c����0��fv+l!	-m�zY[�����='E�tu�RZ��n��V�-�^QR&�6iF��C��4N
��1^ulކKQ�^r����֨O#|kSu��MnO%cY��=���W\C�FQ��=���3�
�B㶩���qR�ӝv=����K
�~�J�I{��x�,�U����S�K�Kֽ)��pb2P�:M��H8p�T��'�*SLvV�Q�:���aO�l�
�
�h5�K�,F�b�*��Ewբ�4�lJessQy
��n��y�k	���U�}Tv�`��k�GZƳUsb�|{9E�M’���z�	�%��N*cj��*��/Շ�"Y�c�>���pQ�p����ܰt&t��u�ο7�B9���#ki�	C���C���n�j�
"�(Bꔐ:
�]�K�Т�~y��^���<A`.��)�\T=]�v���2��;+��2��!(�xZ���[L`b����yb�M,�᧟�]���7��%���H@��x�Q&�vy��G�C�������3����7Ƚ�����}�+��:g��^T=���"X�A���AӁ�^�u�5˺ἳF�ҌN���U*��Xi��	���ߟ�nB3�k�3�-9M�����R�8�W�g�٠�Ih��2�rw0��4�vB�4�`��n
�~�+���$���J�����T��GԤ8�a����P��f ��a�>_��~@m�/a���9��$���(��q�,�F,\m�2����8(��
e`��6�(�N,`�2�:]����z	�i(
w��b`T%e�TD��������C�֢�ʛ����P˂�K�����2��nv����Cyq���rW������0\��p	�D����8d��3?��NS��(�/�5�������-��lء��N~O����ݿr�z�J�9f(�$�qϴ�Q쓭�[t�,���^d��N��_^�Mɞ��ݍ��3��W|Й�+>��z!�{��x�k���Q��P7��zy�Ѹ�v�m7�n2v������}����\���6�^1��R|M�R��cԇ�3~!��[�i�H�[�j�d?]��G��Kg�&΄��JK��8���~���d;��I^8�g}�UH�$%2�T�eSR@2"$nn����O()�Y�O-�Ǩ��G{?st��RD|vʵv�(Y`�Ɠ�G��pO���st�ySb<>?ۉ��<�|B��^�*��!*�ʧ����n�/�/�Ȍ��Օ!{�v�r��y9H��kڿ�mY�Ũ��0|d?�B�3hS���>�������=p$J�����}:��qkS�ܨ�։�tZ].TȜd�	�BV=6�K�}��}�9���bs��S�4mf	��j57HU�k('��	T�}U�BH�`��+\�w����<*8�Ң��!(*�S�ha?-ł�X�j�7H�łG*'�Z����F�D�9�f�T�I`Nc�=�З��F�C)�Sz���jF
��Y��<v�/I�l9@s=֝nHԺH7
[E���$"	�,3	ٶр�Y�[�S��V�%�(�K��r�f��$��:�+�z`3�O��|2�HŹ�uR���2�Zd �"
��.$�vM�Vp���R�A!�X�ж�\.����=vL`�u`���P�E�#Y
��������u�p_,;�c�p�.K��o�������SV�O.ϕ���}4RuD�Z�R)V���T*�J��=�J�s����r��/)mt����Ϙ<2%#74�x�_�V��-VU�
<�2�
�5����@[Yt�\�~&��N��YHrIu�^��F���� �=��_����k��4b�-b��;��D���bʙ�u���N!6��y�P=�����d�ò��HS�ƺ��=+�7}{��{�c[���X}Bi�"�)*ݛ��_�LL2��eA���i8T����r�Y)d����w
F�zTǡ+S���(2B��-j*u���uq�����`��_}lW���Z��<�50������7��D�6�U�6 m�ǎ��Ec�t
žF�WM{��UD�ԾF:.�
Sb����]O��I���@����ԡ .�E�cS�=:�%�~`S�������0�Ӊ���~`��,	A'���-���)��W��w
×A���Aԩ\{}&�y)a�G�U*'�kX/�Hi�0�;�ۢY�0�(�,�=���>t;���J��%� {�0}��r��(�:���Z踖�8c�*¯K�Dp���Gԡ{�S���r��V��$o�*�
��o��ΐ����2�7c�GG��t_So��M<s�>���y�{0�ݻȟp�d�RtH�p��^�V����/IL�$6�U�2š�����Mi�*e2ٿQ�GH�Z����B�r��P��U�R�~�VNh�1=���B:��z����/�i/��9�2���ٲ[R��%�����n�@�pU)*Ʈ*�`ġv�$j6	�=�l3�Q���K,��e`��.10y���[Ȫ^;�J����>үK��]D^m9��<�R*s�r�ZB��cw)L��E	g�E �X���2�3t%^�G�}��a�C� ѐ���#�� �x��Q�·_w��!�:X�qV�i����1N�s}�bS��d4��ʭ>�i��|�Z5����Fn�[t�.]�׸�1^=x�,ֳ<8�U��}Ld9�#�s5�M�^(���"y��YZH:�	t��d��]�FF��J,�s��N{�]�Ϛz�H�/>�K�=��d#�z��#�6?��vҬA�9�T;+ �(���^&���o�v���d��)�/����0Oj1W}.ʼn�)�)��ǜa,�m�NK�B�����-��מ��B}F��h��Ҩ��Aݢ�GMd�Pez:M_,ۥs���[����RmZI;e�L��C]���C^V�s��rA��2��/�*�c��@�?-�B�C�㡚m{~�V����lj�Md4�<���U�G?PP��`̫h���%P4����-��ag�M+�f�W��g�G�{�y��ɟ�K�����QSn��n����.+�_O��f���B�M������@S�u��/��.�*$c�:$�F�l�J��� �0����xs��d��;���^o[�MN��w�_v�;�M�Z��9tt�L�F"�)NʺCw��榮�h�?��Ljv�O��	O�8�:��x�;>��a+s�/�	�o�tQd	���a�s�S�(0�V_�AM�_#��:>�C��&�~y����|�)��v���Sed��6�`;Aæk\�NڶJ���Ɯ`7�	vcJ�;�^w"y+�j�,c�&�p�7�ߴ�Ҡ{�?f�>o�r�A��o�Y�pl��^�E�&�x�����]Ko�@�+E�&����P��Tp��BQ��D��(	P����y����IhOM׳�;�3޵���պ�9[D|	|�(d����D
�Z��-dY�'�8#j���Ō�~�l�\ț��+`t�c�P��uR�g�Hg�We�i��j�]-��A�V�THg�j����/Y/^��7�*�yD2^�1<l�q����6Ó�o�F����`�)|��Ƿ<����YF=5�;�7}5
B�TR����}��/����2�FS//ߒ��<�)U�e��z���J��FH�3׆��˷`3��>U�[��R��"��B1+F�Q+W���;%3�[Z���Z�h��69ר��D�&uuF�5G��eV���}h�*��Q���H���
"q��@��=�\Ō�4OC����m٥F9v仓|>�t�2 �������� 	,��%i�T8l/I���5��?��~K�U_�_hd,��$v���g}����b
�񺯴*�M<Nդ^T�4�1�ӌe��M�C�8B��x�9{��4��ż:����u]���/�l����̢f}������SnEM?�}�
�X#�2�C�v��hy�Ʒ	�R_���NC��Ȩ��2�:L=!u��H]�7y��ɸ����r��,$i����čϸ�|�?�vSM��6Q;��m
�v)�g�½s���{���g����^w�L]s�(��v��7�-�G��0�6^�U:V���(�iAj��b�� ���w:�:���eXx��H�h�=�*m=`�:D��9W��IQ���V��r��1�9��'30HNJ3�����~Q�!&�Xj�_�ut_:=�3�k��O���=з�(�hx��4�2i/�β/1����5�{��3Q����
Xu���`�$ퟞ�r�z�+z1�K�T�R�u梣�%���N�Y�x�ͼ�O��:n�h���L�W��Va��hD�g��l�n�ۯ-e6$I�u�;��{��5��+�$�V�s��}��f�9fu���pXMJC�;�U�Mچo	D��[�Pk�(�j�9��hC��0I���c�i��,��I�&��K�y�Xy��V���&�v�DB��D2M�!���9�	x�ɧRh�7��l������k���ѷ���7o�N*Y�\�IQq��������i��.Wa�3���mR+-�9o�[X�#psǨE��U�B�������b����Ğ��0G�U����e���]mk�H��_�~�l*�8���%�	4G�$�"!�j�$c�W��~;�o3ZI��%�fwfg_4�;��]����t���K�g����j�I�C�k���
���p��W�t>���7��(0�;81�_���h�Rq��M�_�<��(�S<��w���Hi���ų��)8�W�֧�dy#[*��4C�e�1a�,��jV��y��|�M�ua�^�STp���?�%�M���|��n�\�㪄`��m���?eE�/�me��`��ԗ��syEi*h�Z�k���8�n���@kV��_�v�6�2�[8��RA~K��,���(�x�����Y��@��S�7%_���O�����Oش=��!Z
0uh��{���w�5�h�ڽ����r��ٶ5QbEӁ�!u�`(W�QeB��qȌp���{8��
DC��'�&!�	�+��8�/����\���0��+�M�(��˃�[�&���!�
¨2�HIb�72��Y�|��ʗSլ��}�0��a�J��nyx"�s�V��﨎ш7�DQq*Rf�i=�殰>��0ҝu6�W:��O�I
x�)
����C�|;}���g���4�I7_o��<B��';��8O���/Q5���i�bJ�S��#��}Z^�"w��
�X=�V�%���Ƭ#/�І�.�['���6�n��!h�r��h�!LN���n�(Va�p���2yߝ����M�!0�����Q0������ٰŻm�1xo�l$�R�X�l�eBr�d�svU�%�
��C��]�
�= �{�HV�o���D�}�(P�ۉEu9P��7�K���ƥ7�c	�y�;���h��gm-�Z��9�B-�k�b��C�ՄbK*Y�t�C�rz$�m��&��*�d]�_UH���&y�H�7K޷H6��#4��Ȍ���y
	년N!a�B�G��㛦Dc2�A�?.�	A��l'��"9���&�[��|��/UKn��&މ����(1q����:ۇKY�
��`n��R�F��U�cfV�+�94���ؔ�k}?_P�)ު
�4ǹ����Κ-F�=�0u��t�x~�W���r��\J�vF'{����Cdo�d��Ή��*��#{��xI��QG���[�c�]��:��T�ld��ƀ��\RU�[&I%�L�0�����q4��я��߫*Ϯ��.�uzAsY���][6���7?����.Ū>����Zv��g��m��T�Z�gbA:x1��6s��e��ok�O��E���r��$�Y��:-Q��4Y-eiE47�Iu��o���3{^�P �Xyr���e��4��F��l�
�r��NF�~ǑM|r�<85*�
c���*J�XZ3`�Rޙˋ�@�:tɩ�؂u�t˥�"p�sD����(�h��G��o�m�Zvx'������]{S[G��ߟ����XK��&(r
0��ױ]��k�����*�X	�te���st$�g�V����_��!ӄ���Z��&��V֒��g`��X��VF=���Ę0�o5�6/'�'�䝨��^�^|D=�>��"H�0r:UbfӻZ�
���S��A�/��a��������k��~�M�>��K��9Oڧ��O>��z7gV�UY}�
�Q�%`�?~y�"�/�	@q���*ᷰ�Z/ܺ�ξ�Ll`ޕ�_�MHQ:�.�پR`L�F�'��Q����k}�߷B�áV�݋F>�xG��z����h�`������Œ�O�h�,Ģ"y��&�%V�
>�@*DuJ����C�`��7��C��$:.W�?�ݨ�ܝ*�.��Q��V ��o}m�Q�J�Fږ��
�����{v"��g�d��ˈjA�J���%�	��2��Z!�XA�;�9��G�]�a�9�Ab�Ǒ��yC���_#�c�F�!��W2��H��$�N7��Q1ߛ~QG2T�0De<�6�}��R���*�{�s�6̹ӭZ�e�Sr8Ѝ�Zk��Sנ�p��-3��:R��׍�V~�fk�ZR�Z��N���q�B.۰=�ؙy9�+�b��kںm<�q��H1���eE���A�=|ĎaTP������?<�-�پ�b��)���g�@Ƞ�n��)��<����W�F$�<L&]֖�3}&�ŕz��w��U��Bہ�;���Y!�������_�|�i��
��]L�����b}�u�Ml�ͥٳ�f�ZR	��!�+%j5r�WJ�]Z���ef�$��~HUȷ�{���ϖ͋�#c[��@{�Y@�B��ŎG����0�Q�p��C����ѐm	顡ćY$>ħU�o�b�Ts���p|<��[�⠝�R�]f��\C
�q�&R���C$=��
I��E��EbĬP*�}?b)o���$�)u�m@M{OiCw�UGZ&��|�h�
�	�� S���L�xWTb�K�*�.ݨC%�1��!Y���k�;��+ FBI�>�P �}rڻ�6�h�,+'���r��q0	�]�G��6����@qK��^0��XT��fJ��R�~@V������V`0����p,�����V�v��,���"����!0>y���F��H)�h��^��+W�
��	3�ċ�s��F��[��A��z������J��M-&�=�F���m'�*�.�V'\N"�U,����Ӳ&�<nx�巯v�����0����/���dڦB�aw��@�-Q�9m@A47"ҙ�:��W��F`���z�{nϚ����[)�.�2���)[�Ĝ�O=K73�mff���53K4�}�Vo�y���ůZ�r�5{��~�Yj��a<,�k|r���m��A0��}�%��w��ӻ��[hN����T|���N��*
�|��W��#�pVυz'2g�-����9 �0z�c�\� �9B�dex58o0�D�5ލ�C����Z�O!;Ej)�@�Y�*`���6�x\m�6�k�4�|�����FS���!�D�V^	g7(����_e+�����˯/��y]o�y]����#�k�Q��du�g
N)�u�\(*�-�^6p��v�R%���Ic0� �B�%N7Mo��H�b�S�U�6�H�U�b0�j��ƺs�������tsW��:x���
����	��_L�}#��&[�&az��8��J+6W�]�ƅ
���bXL
H�{$�-)�N��؏2gA9[���9��a��B'��F��nC�-�rX���m�lc[z�;��"f$��ۅP6�	�`�W`A�� z��
0��dߩ��2b�ǴZNSm&�����)&�ʍ���hq�1)V6(v��կ��X�&
��<���í�q�:A�t�M�:���	�͹�m�EA
�H�)�J�8v�.��`&��bo&�[#�Uʪ}�0�����`	�=s�*Qqfd�(�^̛������+��.�Q����k�0^����C̡3��)a�~�m;��+�U�Q.���㑩����>w�����`1o�/01.�f4:{3�T�4�Ӯ!;�G�j�}<�u��:�ʱ�Ӆ]�����εAid���~���116ȐΣ1�L!��u�mՌ%�EWv��ݵ+W��O�]���B���J��\%%�[���ۭ��T�<	�N�O�>�lq�F�7o�]��ey��!`�i���;��4v�m�f���P��5_s��fllY$�ն�,�]��I��s��C��Q5)bڽX���O����ڇ5]��q`�����a��_"=��ς#�		�U�(�X����{�+�8�tm8�>��ŷ$0]��5�ډJxxqmC=��]�%4�}G�,5�~Ժ\q���&h�&��K�rp��^�J.��z����s�s�_�(��=�[�Iw��^M�4��;ͨM躜�3�������uב#m�
�Ժ�����
�	�3�p6��2m��8Z��]���o��:J\�h+��3���'o���57�mWy�@��;�_�*�1.�K;�d%���|+�x5([��û�[)�,�-w��aL� ά�W?�{ḉl��g�/H�>E�J�GUЍ�W2��4��h� q^
/c�A%�����fm��M����]
��+�x�ڦ��}j$v�p�P�f�k�W��U�j�h=���uw�f%Ԍh�4�Hiq7��+�i�F�l�z�7a�W�B�����6��]��M1s�v+K����lH>z(���>^0j����1hCIe�6o0K��X玼�����Ĉ|@B�i�Fs�L�x�	�A@'�Z�\�҇�Ȩ��t��4&�/ �.4=]��W��Oʾ���ZQ
`�.'�%b��%��y�����]k��$@�;��r��ōl.�Y�F����ف���_�%�zN�t�S�������z�q���s��Ҙ�5~JtZ�r�M̭�9U�c�Jx<�S��AVN��(��'3\]����?V�<U0�X�o�l�i��p]v��vK]N7!����}��cC���a2�{?Hq\jj��zW�Ԣ��Y�{����O��x?o|��^�!F�U|��8��^�r1���4Dg�%���l��
z��30|�<�""���NP(��ӲA� �YpB��@�;!�Ԕe�It���g�O�]�79w�X�^M��ƺ�<k����LJM�=G����%�Ͽ���tG�/<C�z�Y�����_�c��}#�j6�R78l��`<���H2~H�s��9�89���
��O��{3Hi���n
A�rDtRn�g��˰���k�Ow���!�ϻ�]��Blͬ>�NR�	��9c�*�җ u���TP���#������C��9S�J�oO9
��_f!"�Qj�ѵ�7>�/?������wE�>#��b��*�̗���#�#p��ޗ%."�S��G~�I��b�O�{;�ąY�d�Gc�.�D��{��6�M)�q�pd$է�`�i�\�w�J���'�
8d�D���*���D��Y@�7��XC4��(�Ac�3{������o\
eA,���Xp\E)���(F���o�u�������=��'"�n8�鳽��y��㑶�I��sa�9.�u�z dR�m�>�1X!K�ʉEt���O��[+x�5FD�jC�q}.!l��N�Ro�H$*��0+��Mko�O11�FxJ�'+��F��%�J0�x~���RL�ܸ+����2�F�X^�<Q\�w|�<���ӷ#��Y��$�b�hSq�(�c��Z��D@��:Нc����>��bL�Ot\�3X�'�	.��!5[\2�.{�`��^0�l��G9]�S�Y[�~	��,Q��k�E�W�Xg`љ$�9\���:�)3�E	آ�����.�����h�`n����Ü�x��h[E��^����j��%"ڬ$=��\,=�'ޠڬ��DT�p��혞Nt�vܰ*v��ܼ����:�z�u���.L�9$.V
�n:7��g �3��!>�X‰��V�r
π4����1��Ɣ��p�"����"u�Xd!�}���R]4.mY��F��8~���pc�~����V�S�.���¥t9���)'F3�X���A�rzuu������M�f�9|��j���6�JûV�K�Dv�"��-X�tNgw(�d�˫c\�or�k����R���`��1[���V@���5���{W��V@��@;
�;�[�%'����x��Oɳ5��
��,	�AK�(�KaՓ�[�2��}2u�E�e���2�}VR��D�*2�Դb�!�NA���x�X��UB�v��]E�'Od:Q/$�Dx�a.w�<�w���XK��*)i{w�����m�JN��et���������:�h�x�s��c�v�tL�״V�O8/X_H/�|�1���'�08j-�G�������H��^J:$<a�ew����L�����!Z���z4Xp��E${��h���?� ^�"�Y�uͮ!�-s^"%�9�&����\?Υq�P؎�n��Qs�o:���:�7^KN^r���k�f&����h��e��?���ȁ���Ǣ����/1�eF��<0������l.���/6y��!� ���9�ko\x��
�r߶Ь؆fZ�M�u���
�KN���5�`$�#o�]BT�4��Z��p�����1��j����7uE��5u�.��y6�ۜ���T_f�De
<��#�_���;��U�� ��9�S�}Z���:�sgJ��+��V=��q�w��椆���("�J��VJ�w����|6~G(�g^Xy���˜%P-�p64,�O�
���Q�bCƄ�0�zd��ֻ"���l4���g�2����O��eKǍ��/9>�/ � R������jDI,���d݊`�ߎ�B_� ��'V�
���yo�p�����d'e��+��R�%��:�r�����8���	�]�\�K���R�6M��)ߴ�{�)��������8���oz�������R���}�.+�_/��(ڻO���n�jy�4���s������l݇c�F�c�b�m�R;q�1�T��}�V�9�M�4�1k�^����x8�M{�7�`IF��A�>>��O
݃o1�hЖ;g6d�l����l��H�$�!)x��E�
3���#��r[�������/���^�LZi/+���l0��3�Wȣ���}�.-�� ����K���|�&�*�Ql�S8�m���,m���g>s��T�I�n�]��9�N�g���5Үn�[�\1���bW��=ڷl_m?y���iw�#k-6 ǹVxS$��|���r��i}�e��d�o�zoͮ���BKQF�7o���� K����e��=��;��=��{6Ǩ�
�+��b+gu��X�Ä)2�z"��ͭ�����ѫ]0���_�&e�bx�Q�~��V��!ђ��8+�pxW�2�g���ܨ�[��^vyuz%vUw�[��#��:�)	_�֡~��|�-�r�87�υ��Q�p�?�aK�Of1����/�����~q���l���/_w�����>^��FX0[�9�#Cc�e�m�,n����h���>�3V]Q��z|
�T�V���}������h,�Wbiێ)���s~��k�<$ҿ>L�ί'���ZTXE��[�;l��_�{��h��󗯏v���F���ǣ�]���a����fͬ�37I�G�~��<ϐ���!�BZ�f�ʯ�K^��h,��V�B���6/Ve���qD�7`?�>?�g�G74m�k|��:�8�ީ����z2l?�w�尠�w�7�1�;��NJo�A��>?�%��0�--��O��GT����\M��vk\�F�w6�'��ݹ��Ҁ�'l�Fھ��=�l�^��k�e�� ���R1kT���%�p�n�`��9����������}E����j�v#�������c5�:?�0�y�Ha��.�P�g,�BQ
�ϐ06B�a~X�ߺ�
m�J�X]_�(ɠO��*5g-�n���D|!�i�͜�QWz��Nκ�f4�g�
�1��g����n�Oπ���TR*���@9S*S��rN�%�v���J,g���ko��{�R�Z��8��~�"�����@N�8�� �k{�dhe'���y���z8�E��^��!9΋C�u���+s�R�WG�%�I��Ny�r�4���q�Jkn���h~"O'΄Tg(�M�`�߅5��t,�N���P�u)�4�x�-rI6�,�/U*�4�?��YI�q-r�I؋0��<V��ڬ8��6Kh��W��'SX8�(�NE��y�����*�EČ��u�1�^�V�M=�T�vϟL��N�v�j�#۱������m�X�HL.䩉@V�Gr��}y3��J<T�N��ޏ~��V���a1������ڙ)�mOU�k����Pw;��>���N�� w��ï�6�N�n�A?���=hī�8@~�����b��v�޼887gL��>j�h�;sa���r�Zڲ��˞Wf�ϫ��Rd�B��͝�,�ӮƑ
���0B��)���R���k�,s��fsk�bd��KP|:��ÕJ�⏹��'�k�/�ol��D:@y�
�!��
���&���Ag̪j�\	����Y��L3̬~r}��WHr(m?I(�N�4l?ԭ;k_-�~eo`teC���	��yӻE��W� ��b>Q�g����?C?�KMڼM���J�O��C5���vX�p���.KR�[:Yd��r��!��(�/�7�0!��)!؛��ZS#����"��m5�3�#u�#g��dB1�H}<�A�?�#H��.oa��_]]�Ϣ�UW.�G?������������o�7?�m|<<�u0Dˇ�C:>�E�L�cuaB2��jx���s�ko�z�M�@a�6G�ߧ"���ؿ�|ykx3�/����Y�<�`;ﰔ��Y�x�f_D���az�;_�A7�3/IW@u��	H����2��2�g�4$.�2��U�;�y�f�jb�'���׾ٟ*s��,P=��x���E!��Crn���Szv�r	���p�'��i��Z=m)#��ʟ8�ï�‰C��i|i/a�t�������c��Mh�:��a�Բ�QM�'R�>hc�t��䧅�ZnP�K[���8-n��E#^gg�k��	y��i,����^|��rB�PkS{`%�K�۞΍�1�h�%����|���?���E,����H@���K,՞=�J�!9e�D%��c,�'��<eW��9I��/�s�_�[s�w0��V����6�RUM#�UGwH��.��#�5B!��nR>DZ/'0	�4�Y/��n��TR&IӦr.��x��LG��inU]n��!xU����J(I�����b�{����G~4�d�Ka8���s@�w`��.�w�ȩ��<���)��S�ebl��P�j�.�t#�;��G��C}�%_��H~V�\_3���g�,Y�VV�qј/a���Rˀ$'�K4�S�q�s�P�러��wV�F�5nB�gg��r�ʳ2���8�K��˩8���H!�|q�2F-���s�����xi����jA�7�Ԉ�u��8'�i@��:[9�q�e�A�l���$2���
�e�Aw�@YO��f*�=�h��N*��B�b���vp?W(�J>�Z���؍pLk��0n$&�����_�	]e�hBon���w�3����}?�rL?���?�H%����!�g�_�uT�%��)>W��5��3�0E���Ā��T��g8[�c�o�;}�w;7�Ī���،ٹr.�]e�z�ox4�Y&�����)H<��^��o7�2�`�������ωc���|}�^&ev%���]
o3��`�{��5@[z�y�+)^��|��4i*	�h�"V,�QA��?�3֡p+�Λͮ��<�<"%2�H0z5�I���*�%���� ���d��_�v������Z�v�J�����Z�&�k	m�h!�?#��6��.@���w$�
P�.�~�0O�'fr|{&#�Ʋ�"��[�N�ڏD3�&=��lqK���͸�F����p�#�?����]����>�N���b�)���,�sj<�
Y��R{�|��l3�)�����݁�;UR�.}q$�U}d��>��q\={$�Դ#~i�"N})�~Ϧ���ط�-�i;�Y^�KT��\P�@&�� �H+;���ݱ>*?�u��qÞ��P���[�dT"ۻ̴dq�2c�<g�נ|;%\�m��lR"z7=Eu����m���K5~�`��\�&9i�1�&��"���t���ϲk�A��\#L��N}yƳ�uH{ly��Z�ִ�b�.���(�w��Yjq�Dl6�_(|+��I�^hw�@����C+݆}���mK�޾l��Q��ߒvrrd� �hv?�٬ժ�XV���h�"O"ڏ
:��(E��%��؄_�����kw��k��lˎ�e[%x��[�A�Π|U��N�F�){�ZEUw�R�Y	.�h�5U]vb���h(6���5U�쯲'��zF6����Ub��ι>ϧ688�٠�OjI`�Cn�Y-U[���6�k���o�`�i-��zja�#�>���Z�����	Ֆ�C
�����ΰ��+�Pf�>g}�#ƭϒ��y`�E�+dM� C;�f��g�C:�6��6�d� ��X14gs�k��06�w�٢$6� �}�Es��`9�c��WMl�ܖ�-1%���
����*f�5��6F4y��ߡL��@��;C�����k����\�ӟ(dU�Ջ�ˈ���2xp��9�K�.�z��[O8��]�sEոm��6ޅC^�WO��.A�+��2u�>G�]3s\h�I|���d��a}�tx��k)�J��ѫ�i��,�r�b��z�79�,���,�wR�6��
�)S�/�"���ԔMEdf3��,r��U�S@����#{�����_���7�κ�o��O�wgU�t��X��~K��X����׍��DEs`�AĚ��Y4��A
��O��d����s�z�g�wI;�b����|�0��0�Wg�^����8s�W!ʇ_TX�l�8�%FVZ|��М^�~���7p�]�m�_j��w�^���|oN��HL�n�����q(�	���3���X��29�.��§�-�$��8�t�,�����oe&�������M���A4�}9ԻOwl��>uK[�e���`���f�V���(#8����;�I>�N��3�ѧ���L���m�-O�ӣ�7���>�(���"b�ض�`�F�� Z�O�t1���>K��.l�g��6��ܿ#Z1r\`�ymB�d�R,�x�
���9E-���NtD�
E��`Oe�9cz7�U�kC�4K��J��t�P�Ԓ�i����m��0�?�m�Ϙ"�!,����=di��-����ko9�{~���v�z8�;{H�\�i���CL&�4���y���~"EJ�kl�{��Q%Q)���b�H7Y���e���Y���w:���*����Q�w&Jl-}Y�M(�!u^[1�~���Rˣ23$�7�-(Z�z��L���o�^V
JCqB��&��K��a����$.�ʝ��Wn�M�Q7�>,!t�3R':E�5�~ �T�Duv��:�J:Fj�ʷ�*_ �r+6�uR�T�U>�����:���N�IoĊ|~n�L�Ї^��M�O"4gL�Z�>��qR]��
H�p��@I �rU��*��U�Ī*γ��ޱ�3i*l-X�9��8�eK�W>�.��^ ��4��P(b �Hl�^��I]�$$:F���� �kNc(�L�?M�����]�<�(�@b�_YLO�>�͓��<:�ɨ��|�J�l�=z��P��0�b\�x���%]��F9_<Qb�[��*�݃z_�e�)${(�{�Tm��.������b��-�q�c��z&��{�ݨ�]��J��OjGhc<ox��$@\�i韗��)�SJgo��{��i�p6/5n�1`�Ez4hN�^1�px˞I�&��I9{��W�R���r���& U�L��dL�gS��Cr
�ÊS�5���"�m������Q��XٽY���X�C
�	�#��\ �ŋi1�Ãq)�9���Ƌl)�.�`]j�V)�<��n��d�1F�Hu2C�j��k�FI�A�K��W�\��v~�_�~�)b�0	d2�̜��`��O�(9��`dG��;�Hn���"�9n�u'ň��P��[wy�Ӌ�Iϖ�1]ʄ�h�b�"�ё�k�_�������na>k�4ǣ�F�#�Cr?k}~�v�.?=z|v~������Qw@8�����X\4)�#H��t�,�w�9�5@�XU@BG��������Brw�N����Ș�(1Y2d�0ϙ��ٺ}q�*^!n�
�a����|I��i:��z�Toh��'�CQ-Z�N"���3*Nj�"m�w ��YH>�aufceE��C�����҄�R������|�2�i�e�1��J�ͼ��yi�\�T���H�h����#�5�M�b�]7#��0_So���'�]�I6H��Vv�hQ6��c.u����K�8y���PڌV�l��������MH��	��|N-j��)s]��ݕ�69���k��fXR�G����I��!X@���~^fÇ;�v��ү��Ex[��C�ò��<�6�5==E5�/
G	a��PQcv[��~+)��]��}��+;�S�%��s��LiU=*�q�P���jH\./)��k�y}w
�]@dU�Ҍ"�i�R�}E��L���2k�E���!f��>Ì�H���c�]}7�'1��:�����7��D�hj�Eb�!#��آ�ާ��Jm��p:"�+#�OP—���\��P]��q�ŀ�yFE��.��BavX���
��V�C
biYl�V��w�=�Z�dF%.����s�
Vg�i���*�>?/_���2�_��e&�O��2_��L��o�	���D��!Q�g��\2	��P
� ����C1�]ɇ���p��XL�v�QRk���(���(!�:���e Q�7@k��5���O
�w%x%����|[N�2_�,G���ha-���
U_p��Y�=��y��D�a�pַ�Fx��w��
� ߇�g��(ؤ��i��ePX<���#{��ڍR�O��|q}RM{�'��e�?s�k��P(��K����[�����,����G���́�JL��a���b�õ��0���:����|�+O��o�M�w�^ufQ�9
�K��^Te���M8�E
��\����fZ}��`����7����R�����df�K�/�LI��%���Q����Ց)��?��bD豩�;�Ԛ�ݿ�>�QX��(���yq�v��_.�V�̆g~�Y��T��k�T����S�]��l�Ьvzr�����0�f$�������/Iixq�g�@={�9m/1�{�Xg�?J�'�t��!{�4oJ/��/-��� �c�ۿ3~����'HT��O�O��v��\|����ӣ����~~v�~�dg�)6��z�Ć��E����_"��O�c�ߜO��$�ߜO���t��˸3�z�6�ɰ{��|
B��ϦF^ꃔ����ݪ|*�&-�Y8�g�Yl����1��l�j�J�
@�E{��]�Ob�`>$A�`�"��8(������ښ�B8y<pw�<���<4}
���IB\LO�~.��'w��\��y�f~1͟YJ�ymN�#�͌"9�3��H��l^���%S�6y�:o����ݷ����櫿zF \�fl��}�-�� ��m:
f]<@�-0���հ�o�_
F�V�(X�IV�m2
z����ny( "�e�$�9'%쐹|��:��5���c�*N� HMB�C�Ⱥ�9!)��=��u/�w�n+B�1 ;�p�k�I��ÅkHx���R��J�j�T�w���3�JM�u�ڄ��M�ӏs�Eom|[�.%�Ss;L�E�6��0{���
`NM��!���mF��i$�6����_�����]cj��̚w7rp\E٠aX���3�Sn{k�/�xݪ�_&b|�*bqs��]���{�O�op�P�q��5����L���N�?[�����@'�2�"��6#��<>�ۆ�C�:�aq-2�KV��aE�kQW\��{�J�y��B�%DvF������u{��em
��湸��:/H�0�G	�h��U<"%����|�C������h^��|�v*� ��c�!MP�V����`�N��|�G���̛���o�*<�]iD(�x�H[�����Z��=�J��<�NZ��v{OZ�S$8�,T�D	bE1Ȉ�-�������(&��:���nwi�& ���j�i룲�35��['��>m����lE�_��٤��:�pO���4�
��*��7�ƕ�SLH@� j�I����+��/��nc��@�#^�����lj[�Ui�&H4JX���i���@���g��r��Ԃ�}q�f��;���	�
C��`��<+�9?�ْx^�5`~���]�@��j�¦C�����x���z=��?��
;����=�F��Q��xN��v�"m��lΠ5&�tP��
�xԉ�4}$�9���8�Q��@�9>��r��p��'Om���;:+��	θ�1ȍ�8qow�4�}�.�jd�d�q�fg�oԼ:/zw:�n��Gz���#[�1lȆ��~+L��g��'�ƻ�/�D�Nf��׭
�r��l�xl���DH`>�<$ �ΆM�4����V�������o��qY�m3u�?�O1�^tU�@��ZG��,�2.t�;G)Ԩ�wO!c�q?<�Ն��c�ۼ��l��e|v��o%���!.hW_�����]mk�0��_�1��5	I�ܦ�/+d��6F	aq�lm������t���dE��ط�:�dEҝ�{[s��M���>���J��!MM�F�l|�P��E�D���>o��T�ֲ�X�
����(�sPK���(ef5��I�eÀa�R�|��E�ᯂ$7:pD���z�i��Q�{���$�Ф3�;�uR������j��q����@kȲ���־%��v�g��:m�=\��J?{�����d���a�w�W��d���D�F�*��K<]�FC�r*夸�KЈ^ �q;'
��33Ѓ�P6U�EGG��[���٠c`���0����f����A7(z��M�jPB�`�8�
�ٟ�?b�&K#�
fL�幄Ip��K���W9A"��a��V*�t@�
�
cd�@����ۂD7�q�l`˱��B
�Wt���v�Q$_O\�Bɋ[^rӇD��$��nԯ��#��`lJ��fA¬2n��E���c�W��>Uf�?=��.�Y��B+,�ܽ\����n��o7�t4�c���T*$[�_PE��k���{^���e��i1�R�)K���^�$��?N�c��k�y�׳�=����D)N�^	汗��.͛B�aV��
B�-$HY�8s��˲�p�W�^?~ȋ����#\���%�׳@�ʒ�6�[�+Q��1,U���[��1���B�ۉ��b6�j�tf�uwW�9�ϳ�|*6Sz�I��Vw��}w��]�6v���_n�7�1��J�� ���`lǣ�?�Ů�r���7%�5{�}�$]i/P)/����bN9]ͫ��)��ba�cJ��%�*/�VB��IWF뷴iW��F@9!��"��J4^rn����KQ#�6��`R��=��ȭOG_��G��>_�=v�v4̧>�,޲N��Q\��T��^�gM��r_�K�9iIgq$�`�n��e���y�̹Q�94�전�>�z������IpHZ�u���G���zg�㗮���k
�!�t��tCØ{\��,G�T��f�J>�������5���-R{���ϗ�g����B�O��d��0�o�.��
l�>_ك5��Ֆ~X�m*�B��H�&�S��7X��-���|�����]ms�8���_��ޅ�D�8�����̕�؉o�V��ԕ��b$�VE5��ث��� EI�lfo�$2	4�Fh4��6���D��1j-��~�?܀�����9�F"D&��9�����4l#1�3�K����_���v;��"�P~Q�-� �wķ��X�ev�CP�F-���S�Bڥ�$;��|<I��gNOk�����|�9uC1�C!R{���K
�7�_�˽~{L��s˓�({7|�
+���,RĆ�
�-�i�~+T0�Ύ[� �X�V�W{	��1ԧ_ww�eJ��l7$Ui��EL:qyCZϗ��d����t�_���(�F1��J	`�BR�u�Qߵ������gX�&
�ab�����ɑr�h�	�*�vx�?O��&s=P��]MG����y\�y9Ͻ�ˊ���j���Π//��V���-i���$��]U��r�U�`(�>{�̮�n�~�ZXYm��B�m�O) �����W=���Ʊ������x�j#�wB��{��h�j=7"�6:�F��Y�i#�h��_����ʫK���\���C���U������!�PuOv;����Z
�n�a�k��0�/�!-Ҭ����.Ӌ09�RV�Sߖ�hp�Ӌ�����γ�>@W�ut\�抷�E2�re��̯�LТ'��~�/���ؑ����k?��!�*�O�-�m�ꖭgmoY�, z'V�ou�57/z��b�3W��`.���d������j:��i�K3`N��k��o]��>�u�z��[���~:�����ᓷ����U���o��>������8'�\j���4���]S�}v�����38�,��U5�^�3��X��ösΰ�������x
t^�~����Ç=Qb�ߴ�Ksf٫&�z�:G����h]���Cw��hO��7�A���	jo�
�@8�.�����F4�Jo�~�*���D��T>ݯ��k�}�5fOk��e��se��Uk��U��#}���>e$��\��od6���\��v���Or/>2�S�ݧ�i����	A�o$(Q��Z㑷*D�*j`o2HŲ��3 ��٩b�F�)���C1��Ƥc\դI�Uf[�R�NJQ|�`&�6 �4������xQ�C�#��fъ�pl�U�h�����B�W��LD��3�28}S&"Hn�Z��ƈj�b�b�J7z������Yț������5'�[7�w�R"p����h�#��U-����rU���o�r��#v��7��7��#k>�a�t�I�2��!�������r����`�	��g��*P��d
���헖����>�E���|'�?A�����%W���T~����y	��a�^T?]u�'�C���d �|�L�][���Ey�?�)��q>hP�V��'�n���,/�5!.�Y
��=�>D����@Ka���U�}.�X�~˩��
���Iw�ߴ.A�{Fw�|v��oe���d���pC"P�X��U�G/�j�JS��TM�\��%a�Q|!�Kq��6�ӡ�ɞTތ-�v����pt�&M�����A
Wk2	g;�b
�B�K8=�86f�x�6䩶�3�V�1��k|�mD#`Y#��Ή�N.��d��e�չ�'�4�.P���������v��V�u��Yg�	��@=Ffc��z�����p��*xh��R;�����)$��9*��%?�3�����DX0���~�X������~����X-��A��X	eK_[�p��e��e�^������N���C��D�h�&�k.��(S�2����X��ZQ�$t˦+ٻ�
�b���9Ms�,�v&b�n=|�n�N�������T{&B�?����bf�1V�Y�1<M1��1��X��������ōY!�EYȰfK#�P����f�7Ƌn��Z=�i~|�mT{��_����f�=Q���$,ӡg1�e%n���g��F][޵�D߳,�~�D�(l�E��Z`�=�f�����O���h�\�>0�ټW��K���a�Q�1��x�.�D���#�~ή��Fn"ʅ-�G��"��*3���"Z�R�����-�]Ƙw����=ńPM�M�Ѽ�Vz�}��:͈� Y�?d��|����pd��H�t�W~�Ȍ�������"��Zxfi�ϡ,R�fc���&_dxs]?�ZI��D�8�$��.�>>iP
�7�9.Ȇ��)�]ŕ
c���"և[��l�ƍ +�}�GX��;�ow�b�	�[C���.j=x@5s��|a]��D�X�T��K0�%<��./�[���r�������r���t^�Q���1�vQ�	g��h�دf'�'��R��U��&��aܺ�<E�6�2^U�~�A[q��)twڜ���$�р����p?���*2Y�4����-��tCy47!{G,��TYRY��T�e��΃�4֫+u�,k��ɚ��<���~Zt�n�x��'F�� ���?�<�(����M^�_`YÉNz���g,7\��W�]Ƿ�kW
���k�1T���	>o��g/G�c
(u����u�;�(�@��}1���$E�
F��*
_y�>,��Qy5ڒ����nL=V��W˧N�QK�1� �H�V��|��o�r��lL���5�Z���Ħ��w����n7����O��1
���q�_9>�%�v�^=��,�H��#�2e��l�1u�A˓��.T��$���қ�M!�R%cgYu���
�/�@	[����a����T�Y��}}�����u�ݞ���� s�c��w��6�����3^g!�Xo20�C��Dԋ۟gJ�}��'�②
������KK�QP�[�X��,�5!Ɠ7�
J�����������
�R��N��"����q��b�E�u���Y���z��α��^���I.�ށСŇ�`�d*�f��_�ݍngE�lZNl�}�̩F5�����׏Z�^�Iх�"u���Mhů�s������ѓe˸p�7��8��޷�XM�X�ˊt����]���8�3t$c+��j�>Ñ�{Xq����b��`��ڂ�s�嫸<�sz�BƘ
woo�tf�ϭ�>N%���ߩr&W�C	h�΃{���_�������]�5��O�DqU4�����u��FB�p</ٓH#�B��y�\�;���22����K���j��ǢQ\�a�U�Q~4���"	!���Ed�4�L\&�;��r�L;`!���SD������,���쑷r%lj:OlR'�]�Z�%Ȅ�7��vH�=��a�C�*�p��e�핁��%H:!=�K���<c*�x�8̘�(}[Y�u�v9Q����j�*P���9�,��;B5���$��?�x@��=tOM.ά�&G���<*�:��&��>v���l��5�����n��w�A����~����������b���4�@?�Ϻ��e���Ç��mNA�!	?7^�t���=,y�G�&Oe�q�=�|�b|���#0��Ui�p+�
��0�g�s�~�y/^?jÿ�ux�_�o�D��m*Դ�,1lT�\&L��B�o )3F�A?e���K��m%N�%0���1��l#���6(�j�i�+�Æ8��	`c�Y{��~b�{D]���p �7����H�4�"���ds�IJyz�ϤE	�e��"9�Ǻ��Il��I���\US(�Bj�h�	�._��Z��>�1{˯�1;ꑹ�.Jr/��Ғ�!�]���y�l�CՍ~�܈'a9R���ע�'�ʁ�F�6Ʒ�Nf�;A�e��K��Ʒ��|<n[D�����Xk�^��2�
��n"���&ʘ�;��Ҹ��x�*�q��罈�KOP���x'���}��BySh<�w����>�?��>z�ꨲě�oԖ�u�g�[ģ���L��=|&u>|����F���Z:TR��#�C���ʟ��7:�綷oզ�?���
h;�2��mHtU��}.��:�����)��셅v�]�Vs��'E��ށq�G�H�
��ӆLd$8����,6=܇�@�����a��#s+
T��6BHtO@5�u��*�H�X0�o2����#�tKQ[|O2D\���m2'���3��
u�w�v�v�oߝ=���Y�����ǣ�O������6��<MeHswC�B%��L���
	�<����g�`ng>݈����gޙ�OK-y�Xr�!m��J$^����'�!j��c�D��O+Ǣ��X��ʴ�$r���,�Fby.��]�4�?2D!�
x�4�4��dyU��
��|�~$�j1�~X�?I��O˯K��׾XeI�^A�;��5OX3
��W����"m�N�'�N��,H��G�a��աy<���P�
��)E�P�^	N=V6$���J�1�J�
���]2���nv~j5���L��]C��-�I�!^��Io�E�U�Ǡ�
�t�P�=V����cqޢ����S��0���n�Y�96�KjP�w���2cX5�E�d�MnW�!_�"2�Hʺ*��'_&��-�<���@�{��-4��"����J]U>�P�B��g���
�2晘�ϕ=�d~;���t��V�!�M�\���=i\�O0�d�y���f��f�,���)�si�������),�R�	�ڀ���,C��`>�Uk�Bs$�2�
Ɖ�r�믿��W�� "� ���sn�V��8�\M�ͤ��?M���q4�]�R�/��7��᳹��'~��_"j�^6�yd܉�"
x]�Zmi�	L:K��+�I,��>��,@��0~��_ђ��ܝ����J�A	�@F�J��L���g�@��O`˒�I4��è�P�%F��U7����|��ס���"q�����1�;x����޼8h��1&�r�a�bN$0Q�jLU���աдA���.F���V���6�^e)��/d��|�-m�G/��m6*�oˁh�8��SA���A>���6?Ė_�O��u�j�7��.ḷ���s�,ַ�l{D�TZ��EW�1�.�LH�` &����&��Ze;S���L�]�~��)��v�NI�Wɭ�-ζ/�bv$FZ:G��ꉚ��r���Nut��|�U��e��Wb���-��b��6ݲR�5�*�^s��y�����#���1�;�]ju
Y��W�UZ\o��	u�^�u?��{�Ἴ�GX,�k9��n��ijTl��%{�-_�Z�@�N|��^�L0�X?���G���T>Ϫ"�8��;�v�v^x�?�AD����v�x����=0�?l�����jA��Ҡ�
R�E���w���d�3Z`�.1*�YL�u.;��T|
���f�(���Z�
��g�|<vn�mg?�{��X���q��L����RH�҄(�\�~�q+�g!0��1>��1�L��1�*�>�}�V��r�‘٪���Fq��n��p�t��� ˇ�̀�z��%}�!+v���n^�,��j�J�D��þ�E�F�h?���
�d�s���v��U�(v�K�6{(�0����������`@�wY[�mD.q,�(E�=x����E�ϊE���[���������tw<b6�v�A��rx�hi���C}�+�K(��طXj���'��o���˖6��$�L�;.�nH���
c�-��W6��/���-�	[��)����b��*E������q� �i�M!�#-��2��wI�x&4�4��:
�rY�ݧ�2��R���L���Z.��T;wf���'`5��5R��`2��f���0sZ�Ӏ�x���
�+�L"�B���X��J�:�ն�n{�����s��9����e��/���`�O
l��^��Ѷ�e��F���o��9�
[��J2�b���d֚��YE]�	�U �N���3��a�����vP�Ţr�M5���`<��aL!�,�;1&E��˨eF� X�`G��*fZ�:pX#�kep�\!w�>��u�w�yRH��pg�t��%T�����UW��k.Kd��0��+{�d�N��M��|E`
�`Ȼl$�l)�XT�)z=DeQ�j����Ɍ�@�	���tuA�@�,%�����%��:a����*V�!��?��+\�ʃ��'f^@�)":�qHJ̜�:dܴOB�!C�)!8/�f����;2Ir�ct��#̤�`��
/R�yx�����]腚����G�k��UW5�d����ԍQ�}�R����S��J$
�k��Ո�w2kc��'˫v���hp��B)��p�t{�rT<�L�P[�7��[.�� ���i�FBOu7T�h~M�;��`Q���u��f��a[�&W��E���T"ar(��5篦���9
ӱ:���Ź�):��1���V�'ո8Wf�s�\`zUR�T�6�#qYqq�
�����b�Fmm��`k�4���-m_Z��6P
���2���Ӈ8����?S��hr��t�i1�G�/��=]��zǨ�=����g��./�n5m���@6ݺ`�|��o���jc}d���;�����De���<=�5]�{��}�}2�x�1�@w|��_r#=|ڂ�7N�QW�M�w'�Pކ�EI%B��g@�	@O�O�Z=�MFRy���y��$qB�c��H$v�tHfU�
��-[���{�;3���pl:�ɜ��C�q��ȏ��{�E�ϴ[z[�1;�O�]�X<�-����2a�HMtˆB�����,��@��@B��w�f��pC��" �ǘk�O'���€�Q���Ym;�Qt��Ù��[���O-ċ��,3(H��#��:=T[���N��5yV�d�[�ʝ��\�S+!X�8Q��Wew;�r�����4
��-���"�"�\��D�ĕ�L�0"�NZ�efx(IYqT:2D���9���s�
���lpI��2_�ʷz����}ǖ�M���X���gg�.������X��}��.�M�z�w����X�xO�{cL�n	��ǝ�(iS�<�9�3�~S7J��ʙON}}�M���T;�}����d�I��lLj����)���@M۟^v~���������Q<;4Y�'"��A�{����ñ��GSV��{��^������$���pfx�*�B�ԡj���ں
\���kU���?�l]J�!)"�Qq�6ͅ�E5�]qF��Y��V9�J�'�Uy1��f���91^��<���jg�����I/)8�������ᨷ�W:�iW��Y����|��eRZ��*yR�c	��ڢ�ʄ`mO*��99�Y��V���4��Y�b�ޫ�a���0���¢���$��G�9t�l�o��g��N�]�
cݍ������4HGOR7�B#��5W;��u]� 
�a�9�f.k��d��[$�q�C��fTV���Yk��+�R:��D�������a�ō�+����dd�T��[����ʗ+.`�XFnm�Ӌ��I��[J�sK,���ɨ�!��8�(V�d���X�m��5;h���x��2ݗ�ׯ����"�ʴ��!�VΟ�"�ǁM+�����^�2��3I��-~v�����]y��Ȓ�>�wbw��!@��c%n���/&t!@�H��W7�G��yێ0 ef�UYU����orDkB�ew���<���3��bz�A�rކ�kt��bF�l�d��~��� ��r�q�w����O[�ތ��~����/���%��Qt��!���e7��C�gR~��?<C���Pau$�Ԏ:�E�/�&�g�!��$^�]��9�z��q��:�?��Ϥ~ʔ�ڮx'}���~�Н÷(��E�7�X�"�?�:B,*8�{�
��Y�;����z�E��!u\��P�S�ēl��2ć���ǟ�� |���[���5�,-��3z�K_w񼙸��%t�+�h�)D�C��]oMI��^�~cw��?�쯐?y~����C���~+��_�W>��$~�����3Hί���޳���{/���rz��
S��ɤy��O�>�f������}α	?e���$f��c_���%- b/D�{����ڞ���EN~��z���5�dqGETW�Ü(�1^S:�w&���)�q���N����/߸������I��4�&��\SK��H��I�F��Z��yX-���$����M��Z����^-Mv�{ji�⇖)��T�i^�TS$��T�^��k�o�Os���:P���Q�.��C�hD�(��E���>�hT�����^#���[�R#�6�j���V���M˕*xyE�_Po�D~t)a��Ͼ�w'#��]e}��+����=E���$y�x�	"�/�
�3�M���
u�H�-nZ��χ����<W�P�b��Ʃ�#t�V���뤯{�j?\���$�n�kV^ȝ>0�d���y�-�lFdȐI�]�Y�c6�%�;6�%и�� ��I�S�ެ�hȷ�M�����.�_�'s&��RR�w�7�h"w�3�
̓w8)܌��^g@e]���$l�8�I�_oN:��zN�O<��uy��?���JCk�Q��!t�q��N+!���[4��rی�A��)��� �����Ea�<C�1.h��asH���n���o��-�Լ���y���w��yZ|��Y��m��%����#ϳ����E�oS�6_�T]E3P�s�\��t���YONl��4
9qI�3��x�'�N���F�;;wc�;��P�пD�h�1�߷��p1"���
�E����D���O'1���|d��Ә	g1�.�c�"G	����kx�(|��ؘ+���|�N4����Du%�{j^|ό��1�d4��p���n5���:�'��9��B��$g��GNc�ܣ�L$�?ɕ$�S�K��]�	�l�C�9�(.���v��QQ	�	��3f�y �ww�&e��Y������V�� ��	��C�ɜS|�w�}y��ɹ�~���Y��}L��Z�|K����׬%����]@D�Nt*��K/�M0�U/�Lbi'OC���|ehc�I��u��=���\,�3癡�k�z���q����ô��-��V�F"_�|��(���5U��%A�{�Ùp������,}�s��m����|��'2tv�5 n�oI_�MZx�{Óɫ�0����Fbx������g����H�ZH'�0���+:���w�#��G�~��p+R:e��m�単�{�2q>B:臮\��Ĭ�S
��G����G��;��丨%=��NG�(��g�:�s� ����0fR�o��A��p��������ߧ&�l�G Ӄ����kzŎ��L=[	��C����eK
q��~�J��x�R[H$�����T7K�f��	.�\���v&'�y��Q�b��'2�T�ЅAC<�gd��)1���ϐU�{� _!�kFN��"\��!��~�Ť��P���:��0:�q�?D��c?lݳ�ͦ��پ$�)��tk�s��%��|�>�@�Wj#P���ȥj"Ԭ�ק�O@61����K��
��/�sl�n���nT2 ��n��K]-к;�xX}fx�+����Eʸ���r���	q�L�s¨��<���1�W�Y�.�
�-�^�XC$S�`��Q����һ/i�c*��<�Q�śV�)8�j�e���-ia�j#)�,�Θ�&�]i�ӵ��Mȕ��K�kr�t�p#�Հ����u���]��W^�������m��u��=���YJ��	��͕���iS�܅7��c����i!-(�@�`RR�޷�y�Xxso����@!D}{a"�L̤G�2F:O����3���!���m�&�j���2�[[fU�@��ޅr�<�R���F�	�*�V"� @��ײS��y�P�sB��DϹ�[c��H�Mϼ���3�±��/$ʦ� ������g��%�c1�T.͋�pɟ���j��/�~�L&QG�j�b��\�w
:姑�&п������U��P7�
�n��sHȯ�?�R~N�D�½U����_��zb�pC��?bIry
��7ĝ��31N���CJT�p�h*��Y�gZq�J��'��� r3��Υ�*G��Q�s���E2�!���u�{����]�c�D�\��ɗ�x��uz?%2��姄dߦ�cP����n���J2�mM�s5�X:,ɟ
�	5��xM�,j�w��Ӽ]mg�rtX�_S99}yM�+��߲u�Og����
YR\�kB�?�6*w���g3�I���Dŷc��)�v>�H��t]El��@q��Mz�l\%܈� ͋{��6O
�~��*�q��rw�	zF�:�o�ݵ��?h��w~�I�T���u.�-����^Aܿ�l�m�y�[��Qn +��l��~uAlM�2�Al�<��ԭ@p�fJ3�%�,�E6����T�+mܤ�����zc�[c��{���!5����L��-P��L����(���)+hk�n�,�p(T�Ua������a�H�j�P*5g
�;�P��u��pM��mm. Q�L"0m�űV*d��Un:i8۩-�4����fqE��v�rZs_���cs(e����j8�6ϷXa7ӶƎi�x���}�>��Ʃo���U��2=�S8\%���6��r�7?l��s��TO���@Ny�����35�"/�Q@7�N�T-Y��hW�C|V;�P��4j�T+����ɜ�&m�9�i�d7���{����^�
�`����~���Á$�M�L`�����RB�ۣvlHB5L׫%HQ� ��v
����F�(8�E�BK#�42K*̉��w��yr�����(!oA�-�M�m��P^

Q7���T��[��e�j�\�DS���ݬ�l�D�j�����6<)����AA�^\,��
�U�.�	�2���f������	(BP�
K���)jF[�~n�����kx��O�<���S����N��H�Ez#�-8:�ZR�������Q�-��
���@&��Z�&���4��.O �ṯ#q��
�%I���b6�@$r$4KnC	�6㬀�E	zQ��ۍU��R��[�f��q5��%gX��iICz�0n_f�ީ]diA*���F[k�J�z�+�G��b�(�Ǖ�D�p�h6�fWkϫ�VBA���� �/��aw/�k�o[�`��ayݯT�]*
�ngW�y����s���@$2�l4�ш�V%�6�
Ŋ���QWP�Mzy����.H�Ã���%	�S�
,7ꐸ8Z
Ƭ0q�̬XL���N��0uZ�51]�Y�Z�D�L���p�-(����\S�R�H�7�a��mXf�u@�et=�Vc���U���gkۥ��l�����k^��Ѧ��TN=�(����w}�:��E2�Z\V��j���g=��dtrQ�xa�UN�zl0B���}�U娯�u���"����{e�tX�,F�X�	]ܪN6�DZj[�:t[r]0;�hZP�Q/�z<�vΖ�uϢ��Z���>i��U�6Z\�:2�4[r��`hB��T.����Q�A��I2Q�{�a
�D�m��J� �m*��!F�F�[�D	�!��"�M�i1�IӔE�|�t%pjH��wLf�
�d�9���+r�Ԡ"�`�An�ڧZ�![�\
��g��-��
����^�X���㡰��Nc�Y[%i�n;h��llz�Aݭ�#���6+U@ǝ�D`�ќ���r=�
9VU�AS](�I5[X�y���A�v���<��K�a��;�
�bɍ�֍*As��t�"-�;Mt�LZ$�����-+-�Fy+ΰ��)�h�&~�
��)c�e���j/x�����.}�qHX�M���qnk�ވ�
:�2�2C��2L�ѣКu��>֜�eKd=n���LPf�6��ndz̾�:2f��XD�ey��w;���A3�
�
�8kN+*�&���tZ����KQ��9l0{v�
f�.چ6�+�Jj�c�2�u�Ξ�g{����ݍPt�������pB���oF�YՖ�ά���Q�k�(�nK%�a�M��1�RC����dIx�$ۧ�A:�ۦ�5�9[s?��;Xd+���F��ɴwS/�S��3X��bYݚG��*�R��;:ܖ1�8��mqJo�NR��J:�#�^ghb:O&L�a��jn����>>�Y�������TY��;x\W,��Te-�"��V��N�$
�Z��Ǡ�D���}�T����Q�n+ł3�م��g1�����9?��I�,tF	����RMi=�k���^�W��BUɤ�bO�RKE�`c�K�"���u��v��y�R�%��`#I���>G�ag��QG��Mj1�!W�q�g�4�i��^��8@(l���Օ���X�u]�c$ި��R������t�Βcj\A��W�Uk�u e��H`M��R�%7��r�9W���NOő�m)H}c�̴�k�U��0`m�}jV�*���r8mr�p�4��M��1Q+p����.k�N��.��E��P��!���p��*l���9�'dތ������c<�Q_��?�j՚�1F�:y�h�4-�pb�{���|�4y쮋U���SX�$ �!}��l;N�#�g_�j�;GCjԈ�fm��3�>�Fi�1�L�E���T���+�z*&��N&�R�'Ռ��8b^��&o߻��.Y�Tc����D��ղA����Mw���^ƫxdV��E갎Z4��}�̆��3�5>jY�㠢%����R�6�32���������2;�!�=� �Z�VЕ'D�����	���cx���+��{�|�$�r`�o�n��ר"P{��%�}F���X�9-��o>vpN7&!�����A��r;���ml�T�6
F�� ���r���<���p��i��Ϟ�=~������6�? %�}Qi���AM���f�G5z�g�؞ڣ�*����4�?��y�Àk�m�-��Hů6�1�ꈶz���V'HsQ��m�PYGͻ	������[���Rq�]�Ap�v�a��_nԓ9:r&�NdU
�e���c�Y���`ͿLA����eT�Rr\�&��k�)eV.bp�lT���LM�%��Q
"�u�����g;��^�B�����n�?��k�f��>���"�z��oqˬ�<$�\֭�Q״�R`��U�-m��g
��OE33�6���\'	�4�}zO��DZ읧����ͪ7\O`�G�_5��(��c�g�
�3S�r�G��9VAI/rgH�b�9��=��S�������Sӷ��e�b>�:nM۰X���ϓ�1�JU͝<���$I�A��K�����扙���i�P�q��R�Z|l�]i^�%�lV�{QD��/E��ポQՖc�^��aMq�LS��D����gɅ��S�m/�O]���cO���hN��������^?K>�>��aX)��;Z�oc���8���|d�������PG���R"�C�A‘��P��a��%#�}PG�+Ǫ��jz�mG��<�c��E�XE��2
C�>�g�e�$N�R\��l�l���I��7N��yz�<�?n�|s�G-S����#�S�8�5
!Mf��_'���/��&��/�HU�
^�yH�!̂��%"dά�~����!��*$�YMZ��v@��"�����+'IWǥݮ����Nr�<�����t��lڙ�?$��#���D���I�$Y��*;d�4���}�����T�ώ���Pȇ�(��gs��9��N*�{�jױ3w�
|����nG��Z1g�F��hN'�>5�R��q�,�Zw��qcj3��@�TH}�P�bc��d\\.IqĉQ��6ٵ��v��LޑÃC/O�����8���+e�X����4l��������ف}[�����v��ﷴ@"���9)�u���s��9N�-�
UZ�I�uY�}�h�ޠD�N�N7S�!M��[UU(x-;��?�䈴��b�HI]P�O1�d_F�:���֥���<�y��������N�T���)-��x�'N�ⴟ{|;�[8!1kX����b���J�L���<\����W(CA�LYn��S�Y�7f6�m	�P�r@1���[��n�S��Wqo�|���e*����r5�����]��O�^^s:E�r��5+���ȴ�K�|)��B��\1z��p��P^������Oʺ��c���=�_�:�*��<A��N�]3�i���W�f&+��D�3�(֍MԨW���"f�x�^f{��P�a�#�]��'��0<fd��2�$�:� ��4��{m�%9R���p�������|�lBUX�7*�v��@�=�q���7���6ΚVR��
!��AIWm�g$0����Q�{$�5�K���N~A�UƂ�*�A�A~E�f��R��� ��a�f>���~����>�	r�'b���0I���7�;�g&�$J���6��wv���Tn�Wp�J��E��_��d$ॏ8�
���;X$���n��;-~#�S�̚��b���zx%nk.%�27��MG)R.���W��H��':?��#�N<�՝|�M��e(=�7/{�d��,��8v�o藬P�;�֦Ǵ)�z"��&D(2��p���֡�C8�o����ʙ�Aݵf�����b�B�^Ҷ��^��<�s�L���z�)I3�}<߇[��p�h���&�%po�4�Q�[b����a�n���^K1�W����[��õj�h;q�m>��~&�}R�Q�z�A�/����χZ������i_����_fDž�~�0���w�Qj��a��{��9�[�-��4�Κ�h�3SC⟆XT�~��}+�9K�p�՞�+��~��pՑC�7��	=}Z:����w�[SoA���2�b��K�����9#Rvq�2,�[St�I�c���0��	��y���W����I��f���o=p'SY�YS�����)��[�|�;n>�3̏�;�Q�8�Z�^��E�������r|��l`Z�Lgٳ<�F���Cp�T�6'��y
��s�݄m�t�+<����gś�9J�+�`��C ���.d�
���*�t�q	j|�-��6:=ra6��PDL��
���b��|�^i	�2B��r������h��=FP�
�>���N��O��!k���x)�^��	?�<CK^LW��-�	�“�2
����s5-�;�'��${��6WєC�ƗƓ��s٢�
�J�$O��S=��o~������_�ƅ�p�g�+R��ś;->�պ�$���c��h�V��n*��7�̶�$J%�(Ku�}+�pآ�lE�ʲ%�K�����t�G�w�p�
R�ӭ�q�2���l�o����i�57���'����m���@��	N	#�mQ�������SA9�6
��=�)km�x�m؀~i.h��=����֋#f�~���w����ϥ�@�Rs��˙
�N���/eԪ�U{;���X�hX�\�9	�ѡ�����+_\0W��h�HlL ~���y���G���5~М��}.�m���o�cY��5�h�e�Q�I�*��~լ�'#�JT@�~:K�^p�KE�6ȓ�NО�Y%�f
��]����f��FZK��nG��:�8���9��')�}�:f���Z+�q�<=�z���t�}\��~Jw:��z���َ�+�A��"��&��P-��O�PU�r�T���j�39�Q�g�z���.� I�,��wK�6����i�@݃
h�'.lMNf
�I?����=�_�b����qg�y�����8����$�=��חu?Q�L���v߅��Sގ�L�t7�$G�Ƹ<S�ח4}-�65jAWQ����M-�w��up�[V1O?�b�K��"i�˷���o&�mj�[�:��Wղ"V)b����K�l��f��5�.㶼���T�1��������҃J�g�
��$l�����?�|���93}�k1#~j�EV��G� 啿E#�8�r��xah|m�^(0����v�A�m����ا��/c�lxz����h�˭�Q�Y,?ô:�z��z{�B�V�nn�}6ծoE
p-IfD�
�V����[e& 4u���B��b뮧!�އ�~���e�'`����l?Vn��~d�i�h-��٧��H1�<"�!�9XJ�	�>��S��B~B,JH�0q�4�s�^x�0�j��3�y�ۚ$}�2�֩�@�w��)A'0|QJ�i��FꔋY��R+ƺ/��� חO��Ƃ���0/�f'�㩧(����V$p"�.�,v<_-$n3MK��y�͢�vc�+��9�ƸR~C*��:�-=WB�`�X�t�J~^�h�+D8�-�S���M��;��0�3݊�ǐy���ӪG�J��L�����Yn@�ւ
��6;�=�/^�-z���^��f��͸�In�Z�E�PG|<����jv3n��仲�ýg8�W߂�O�������HsNӶ�-f)K�߹�
/����e�s�o���~�8�W,����n\g2�#R�ɰrESt�� 5j��;�H?ޭ���W�L`l�".��@G�V�b�Bh<��*3b�xy�G��dN^"-���Y�2���B��ۇ0a�<���7����W���-����\�n͈��Z.K�c���e�,�Ӥ�?�E4"���r���q1&���^,���"1��V�*]��T�1F����4ء���^�;��K���%��H�wF�m-���J�W囑�n�04J9�-��W(Iq�J�ђ�\в��I/�y��KC���a<�m�W�m�G_�a�f{�#9��1�t�i�Ɏ�H�h��)1l��t"I������s]�g]�<z�����K��B�`��M�ɾM���23&�u�U2nJ�Z�_��L΂�1��~���r�'Oj4��U'���xן���'���������
s,���F����^�����E�r���,�hV�G`�̪f��ZQN#J�D���w��)��q���!��&��%���X��Z���4AR��*�j
˲e��<��4{��t��7�4c��aY��jT���D����Ks�.��<�*C�1bh�sc�|��|T�]�c�m�YB���Y:O�w4�$��F>~���ߚ>�)�hT%0 ;���+VԭbwĽ�ocH�R���ŷ�����54Q=/��%[|=U����<C��hN�'�Dt�T��"$��5v)e[���l�̐�a���"1.y�0�y���M�=?�~��{6��OҺ%��`i
#�,󾛪�J��C�v�H�Ps���M1؈��T%I��f��-���+���ae�^���=!aOrd�h
��<����$zŃS�yC�Z�kw݌�AF�ʎ�(�̴/�Rm�&��˪q�TG�-�rf��1��&wb'wԐ_޻/�����*t����+�c�4%6�>l1q@KS5�&�7P�fnJ)t��,ŤEa����vA��Hv���'I
�ތA��m��DzI��l	��I�I"',Lzvg�h9�E�%�1���tl�y��W���`io���]g���*Σ�s����( �����d��﷞���iK��|`#���{�qv.��틖�
��I�R���m9ֈ�[�%v��	�ߧL���3�0�X�UZ)`LzD<��'��H������il�7��w������`(d�[�…y�XhC�r�d�G!s2F}W�#�t�t�¢���;|	y�uc�o��؎+��Z�7%�E�=�����'0��Œ��2�����_���D)��y3�G��C�¿��ЮF])	r9i�%�w}UV)���~��-~��b���~���~�q����W2����|�	'��o �[�0�Wny��_�l�8-�<�o�.6	�v��`F��a�-����+�^�0=�u��U�\�cO���=k�ҙ�ƶ��5�ٮ�8�I�.yf�����N���k��4�|q|���n���|�$a�*`3�ᖃT�,oH�<7Ӹ3�¢����D5��
X��y�u�#Ylm����>	*�_�<xة���m*�_�l1�/>�������B�|o��?yIJ�4�7�~Trljٺ��JL���Oz4^hE'���|�h]Վկ�Z'��"���g6Z��4�.�,��k,�C�h(�p(�'r��Σ� �J�y�C��ǂ���
��5�J���W��s3�X���l
&:�[��U�\7�����"
*����r4�p���zk.m@�q��c(�D�ia��1����ȷ	ä��DHN6����?w�X�*�T�U��i��p>F!�Hߏ&�@|�ֵ���AKW��pѫ��r�IR�y,e,���"�z4��N�^sV�CC����+�e���>H� �}6X~����)8�K2Ú�? �@�h-����3��8=>Ѹ�L��3���T���LV*�6�����;|��2l�'W�
�DW�̚4.��}���G�X�L��e`��ͳgdTVe�H��G��\v���ԩ2����5�!*�!j��	l&�u��ۖk�92G�k���q�Z��~��_��t�=�=����MQ���)��CVȾ�r����8S*s<qݡ��O�l����wQ�3E�j�g�Qv3+@9��n��o�y���11���e(ڑ��]4���M�fZ��w�n5�B�i?ΜD"�,�-C�pD
N��m���n0-Q�a���QE�,!����BK��N=l����
K]˺�Z�h�uL�D��y���[�`�xh�z?~���9Ԇ��{,Y$�+Z�uB�&� VQ4�@��0�D��|�Ih��7�͛`��QS{�D��K�H�!;Ӓ���0���|U���.�
��]vbU�vF��>؇��d5���4M��2�[�n�5��M���ĵ�D`c�m�k��c�QG6O�G#<�����߈Sc8���uDx$ҏ��<�W0ґބ�O&^�����)��%|n�|:$k�1�g>^�b�M�
ܨ�GzT�!V�ϱ�������\c-$�3@�N��gR�
�~7)��*�B�ӁuTH��˔]%�:�7�����E�K�t�O���j�3�:�b�g��Mn�$nA�뤛�E(0�i�k�a�_\��~qQ�i�H ��F��Ga���;�p)��	箆��*�H�Bv�|�W&�7��3���[V���4iЭT
����~�3�"N��`\��[��{'�Y�=�Rv!}:�BN8s�w�1>0�u
� �b�\U�`�3꺻u���
'C�s&�rrc���f�b��
���TN0��W7�5���d��j���>,lg��W���_՟3�t��T�*6f�=���DΞ�oiG@�7s��ͼ%ɬ"�!U��0���#�T:��]?�ǫr؄,3����"��6)
��Z]�ѣE�2n�%�;ʲ?���h<�TS���A_�]�F.�R�USto�\�7�5Zɛ�zgvlf:޽��D��?�у�>��rD�y�Ī�ʽ�Q��Fj�Bq�Mu��z7�f� ���m���>~�Rp�@N�w��
'�܈=:��(�@$E��&16��J�K�W<��d�F�~4��-�iz��i�t$:�bA�9M�V}8:9��պkf��Do��cRR|�͗�O3aS�M=D!��a�C�8�	��qK�M%��&��=Dl�܃��FI�뉼���Y����<�b���C]�N�B4N?���|�
m�:Ys�r�Βzi]�>;S�8$�0%�c
]��:zP��]�3J���o��=`k�B��]f�	=�
J�}iz�&�zp��KH�Ӓi�Ճwr.����yP�;�Ff�H% w���[~CS���d(���U�����$���5��ϫO��}�0'H𭚈�6��Ϫ�a�ĚX�3W'���J���i�'K�*����b\�3
K�5����蕜��I��=�wB�8��n�*��K��e��?��o������U;��AvPc4����d��%\Z�����K�o[�D���Z�TR�#�/R�T��f-O�Zӝ[�j2��I�|M�K��w��6�V�FO��`C���C5�X(��^�f/���w�z$���?U�I��F�}�Q+~��F�s|�e��'��Q/�o��8�Q m�yC��$�`�T�4������'��*7t�3�/�3�~a	���x�{6�$���2�u��ؼ�~�(�²�
����b�f�3B�WK�g��be�$mb���<鸶���y���q@��U�EL�L��Fr��w�D���)#Nt0_���dC:��ؠ&��%�?{FNPL�D�տ�40�c��V����Ȅ$�e�w���Q��j��+�K�a��?z4N��&��	H���8Z�<d6�Σ��P�-��ni�
$ ���~|��KS�N��`b,[H~,^���ѷJ�J�<���v'ti���O�2'�Ǎ��g���!Y�y��Kg��T*��vdd�h0	��~�n<'gQǹ���۟�ꍿ��C�!��eDNJ,Q�+R!y�;�=8���.�8��8v�7iߟotf�7���!�u�ak��Tn��@��q͕�<�)��t﷑�!B�A������* �AKz9W�V�ϚЯD�`��g�ֳ����eԗ
��TH��JՏz�{Dt��_�����q
�s���2�5����,�E��PDD�&N�]������?o�?�]�T5�����(8��
B�u}����L���O]	��Un�D�u0�r�q4<5�,��->~�dN�P�	"�4,�"|!(3���Ry孷n��8�=�D��H�re~�=����9��8N�L.�;������&��z;�QGۢI�#\�Ե	�>���y/��=�DBr�yȐyq��$^�����L�XV��������6���iv�q���>�U_P>�ї�Y����zֳw-O9B8p��l���f�B.�nj����#������]�5�5�؏U[JZn~����DŖ��{�Ji����ww%s.)�z��HW�ԥY��a��p��).�@���Ί��k�@�I�:;,3��Ed@��O�24�N|H4�F�/�ͧ�CJPR݊ۻ��ѕ��|T��n��z�.׆�r�zm�q{)�:�zrA9���'C��'��u�[���Ays�8s�`R1����
N�D7�͎d��|�?�ymyĐ�i�z�SA��E�5���}�Il�_*�!KfW���Rg������>�IiωY�j�0�˜c�L���g��'E�{S�7@���s�y�~8�C��`��;>�9���
S����������:����l���A��l0�B.�C��K���	���z�xdB]���1�m9*�-˯�4Y��4+†�yt#M'�][:1�8��T=\�~�
T���t[-�E����W�~�'/���U�X	\�mX�%)�Ĩy�Ʊ���R5�Si�3�����w��=�OiQ,}jv�_׻�g���
'թF��Pz͞A��Iio&-����A� @���I�e�6e�h����5M����!�|�7m|G{u�M_$(�2�Æ��5�]�
u\Xd�q�;(;(�h?	�K"=��T=t%;�>_"��%eV�]���Oz �&�53woD
�jat^r8��@bɞ$��U:c��o8�k����&��WU�+�&�w��,�wAM�3j�2����MC0@�C�h�X�m���&�
Mˡ����~��;���ԩ��l�d��Yd�4��"�V�HM�
��Z��
Nuh�Z1
)EdU���0סS�<�]��A�,�_<��4";�}҇���3jW�u.�A'��P2&LX�\�¾�$~���;�b��y
�����E��P���!Ҹ6�h�]V����, RI��*9��xІ82R�qˌ2W�F��I�0<�����Arׅ�����y&�cT���[��w�W���b|��力�j�R�3��#ݹ0��P��Pb��I&��=Q1N4LB��DO�"旗��፿��6���Y��q֕WPRq:��S�?cD��Ί�K+��wr9b/��!s����΋i���^���z�;����E��c���>���9|��rlH��a�Yh�p}��eY{�(�}2z�ӓW�w̌^�m� �wzD����/Y�8���� iEC5m����,s�Z��*�k���+?��iJ�F���׃:��ʛ�W�J���oCq3�
�hԈ�΢���T\��.}�o�ApG�թ�+���{g�o?Pؐ�a����ϥ�]!j�N���
h
NXt�{�4��t���xqk��k{�BpI�, �ă�ǽ�}����+-�=џB�D_߫`�N�>]��,��%����8��!螀��4m
K���4��^)jJB�wB͔��E�BD�b�����;��b�d`F֎�~!�"�S|�A�	W�@�oO p��O��@���h�8�=�r�d<�	��&��3gl��zS�Ѥ��.��fL��8!�?�&E!T��� {}Ɓ</�S�����9vXO2�]�4m���_+��&qM��y��irETQ�{�ت�f���O��d�[�����̥���;�cPe�Rpd�S@m\K\���eT<"Q���ХF���vJ_�5�!.��cK�����d!uU���1+sr��A��Y��t��54�0G�s�(��I
Ӫ��]���yzSu)�C�ck:D���C!0�_)�U�2�ە�3�_&P+��n�FX�ȶ�rʧ�}0�a8��<"$���)c{�x;I���P,5��3�,E3e���d$�
�>�W>�ݦ�� ?C7�����Q�u��]�B6�LE��y�k8"����E`�����@#	�h���X��L���a<�Lt��E`�L�N��4(`W��*6>`�-X�����hG]rrz��	���}݂$���elS�:�pRK`��s�_N�C@�Rj�%�tB&~���
�!a�����z�`���;����Z���h9�=��W�FQB2�ϝf��sI�C1F��d��3PbE�?Z�u�C�t�I��NVV~�(���9��\`�-��p����ܘ���h��h�Q��!�N������lΘ[p"r�bg�B���˳pL/���vJ��[�]3���y��3�����S�O�Q�i$�`�Y�N:�����Y���_~qmwb6Ӂk�����%��h�7�q���S��{n��NŴ�e=l�mAn)�љ3(i���F֏6�_��5���J�k6(7�.�R$���?���۳O��?%J�����;
�Q�k�U�:���<�YL-:N�KB���ߞ^��p5-�g�h{�|����Xͅ!?�����'zKu�nY�a��7�J2/'m(<��)Rn�﷼5K��n�F�wr��Ȗ���f%.i�IR3;�f��Q���6 �?�������ȑ5��Sp.�o��]�j���H��F"���h�Zk�����fS��ٵ���� "����I ��p������wŁѧ:���b�u�+���E�~"��_4�q�qLy�`qŠ(��؎0�ɳ�™�ކ*�/<��H�Z%�"_�b>�剄��%q��]�L���[֗���),L�I_�p@����8��\��R��Y���O }��
���FFN0��&a��>�d�Pst��P��V�ڔY�D�y�1/XqƬv��vm��d1AG�"��� ��~�o���ˎI2u{�UF�/���|��4��4LkXځU��+a(|��t���F9v�"��0�i��y7]�In<$�M̘m򮚁f��?܏�k��C��I[�klk3��~�����@��/���o��
��[*$���7���C�n�}*�E�{5��=��g��cMry���d>�e?#w�!��
TF�)�}+��4Of+-�=�����6D6��|⛉�G^�g-O���W
S\�v����/���X�V50��ȳc�zkٗ�x�УDr�{�f:e%�skb}��6o���J��;>#;v��t�.�S�?F�\>ܤf�7�r���3�� ��h���+Q����\NP9ψ+Tf����tRP:��i=�|.�We��6N:L.��RB��oJu�grE����K���[�x��֦T<��ی��� nn���t>�S=,k�v~{��M؟@��Y�%ƽ��{õ0|D����C������/L3�Y���W�>^ BB�y�3a
���u�)�L��fav���C ��c^��ĵ⡠#@��K�j\8*���jd��D�_�n��b�^�C��P��q��9q����Vh��5���K0h5zMp�$���K���@�y��N�QJͼ���^nn\S����X�n%�g)a�9�/
�sJɥ�FF~x���}���`���7�u�G�5�}�f���6�y��'f�\2���Kr�ܴR+Y����4��1&�<�^Xm�Ȩ��pl/����|�����!z ��<A���X܁)k<5�J��y�]wD���!=&ݣn�0*�=n�8��d&�%ҥ��K��+R�4��0��DW��Jvh9�\��w�XnDp��Ч\/��l��$'Ĉ�^2�Ⱥ���L�6�▯��"�d�2��zT�0nU�,��h��=R��-&7�:�7ЊG^B/�O���>�$�/�#�X�@u�	@�>B��6�X	�d|��*-%��y�_��3I1�WV��T����o�{�deB��O�2�p��u����e۪L1��
qY՛��<ij��
J�����`|�!ɓXr_�rr���js�*?��C���2}?B��|r�支�౅�\'�9�ƨYc%ϧ����$�q`ygԢ���)��~��
�	��M��-�m�I*H_|�ld��^$��&��?�'��lo��8z�Y��ִaƦY�U�PD���m���.���H2f��烥I���r{�!\����!蛥u���j���PT�t#��T�t�X��n�r�R�Q���o�v��l=8\���R)����g[�x�b��!���K$�3�7P��w���h������;3�%F�k��G`�:�F�`���J^鄅��ؚU)��A�4���:ܸ�W8�`���0`�C1�Bv���t�b7]��up�n�+��lH�F7R�\:�:�/�	!22�e!��v��^"���[�)aYXf�2����oC���W�U��Z�R|$z{�v�v�j	�r��/�@�
H	Kk2q�0��m���\�{¿�Gs�t�B���`�4�
�EJ$2���9�F�tmd�tMnݯ[}�<�a�ϼ�ڴ?�u{p��ւ�b�F���6�&��ؠ;d���
�L�ƪ�X�eW��
����M�z��tz87��LZ6�F�J��X�9Z����E0�7���mfz{p*�.2y��x�is���
+g8�|x�����PA���DQz{X�=�P���x�^n�a.V����-R�2��{���E�@���`��I"\n���*4P���>�|�hu�����O��+2:H��͛B�.�>���2b�E�c�Ј�hVK��D������?B��cJ^��i�Yv=��S#�h�C��܇>v�5��>�c���#:��>��>O�Z���*���vRy�X��Kh����%��0MӖwa�
�'� �EE�}FX�&4�p_kI�Yq�7�3��T�	�MC����'�e�l�7�[[�"�Hr�M�����ɀ��5�$�9 ���֭��N�>�I�6��L+���d��	��t����lT&c:%!�k�7Ӛ��D�%�Ĺ����Э����涽�e���&�y���y%Y����`�i�Y Q�-��.�`5�O�Y�X���,��$:�2��uD��iK�`�!�v�%�%��|z��3Tz�_�3�����l����|q�� b]G��J}F$"�{e��qV0��o��f�C%*�'_}�������(q���4���r��w�lg��wWn��5 Ձ�?�-`i�'k�ޖ7mj^�H�]Gx�֚�IG3�eXtkhh<`�`,ȯ�J��_E�����̮��L���i�/��C|K��˼�}*�����ܨ�� ?�8Z�	���|Xq�����Fz��3�ݫ�;�
��%�4��	?C��#A盄`����@?v[�+E5������j�b����*
MޡE�R@B�nx��C�
��8�)��A��.9�tL`���@%�.hL�_������W��d<��<�b	�N3@2k"�1��7.�T��;d�Y��d��XЌ�����Ui^��6�v�2�7�OP5^wy���Qϓw�%�byp��u8u�=�6W'�8���pq����4�,L0Q��x�\
oS��AU���<Ԓ�K?�<i�Ц���������w�������a�4r̺��1�d>Z;oEE�|nJ��ļG7v�v�0A�x��>�7���I��:r
T���ߣ�^b��I���8���^�i�V�!v�E��Kp&d/��>�?o����t�͒(L���*A������-x�b����>�3����+�x��M>��Nkt���g��J?�>�I���&�\>�+�l��ڐ hu��Uh���Ȕ��8P��M+m�sqL'S��U+�i�,���e�����$�(��H��0����ɶc�w�׼���r���G7�{SK69�M�Pr/.�n
|AÙt��9��8X6ax^��J���Q�dsڑ��\b�~dWƉ��w����An�_��nI�%1
��M�.�ia����f����$]2�����G|>��ں����7��H�\g��	ޖ[0=��Q���/��Z�[�}[��<2���7\��N��ZSq���c*�V�Zh
��!�;�����!Xj��ao�����_�@%'�_�!���n���m�"4­���.�����ZejI�Thl��n�����wa�`5}F�S�K��a3M�8����	W����x�U�e�R���=�;�P�#��ĂMJv���%,�}�:�z͘��xpꯨ	�f��k	fb��S�Z��`*�\��.�h] o�$��9(��/�.H3�;ބq�އ|��*��W4EC�죀�N�=��_�Wp�t���^2�)i����},Z�s���~5����}�Kg��q��)���#1$��N�F����j��w��Y�h���&��#i�~Ic9�(V�6���B�&�8�׉EȌ
ia,�Y�.L~��:pc���D%"��+�֗eyȘBk�&u?�'����T�f�p�By(،�I�aM�O<@��$�t��B�9�kn�
[�g����>�|�,��{� �HK3M�0���֎�����^H�:v��^;v*��=���rU��
=S���HJ7��?y�Q��
tR����ߗ�7���օq�nR��y�1�O��̵��Ki�C���qZ��mH������h�"p��
��^�0(�f k���z@��@��<5�N����N���VL��7a������h<�E��I4q^�"�Q(7�"Â�Y'�-x�� ��7�υ��!fY��7x!P����T�l���k:\�;�Hy{��]����j5�kbs��V�ţ�c�-����K7`����E/dK�I�1�>�K(�h�L�H #�y�3���ήWo�X�����܈�齔���@_�0
L�62Xȕ���K���怎JY�Ċ��s�Y�C߯OMsE����N��e�zł�[ca��Ⱦ����&..߄�m�ėLq��1�jv��#aE�RYoꕿ0.�m?hq�p�h>b�6��J�T$&4A@Ф���,���T:BD&���On�o~BW2`��x��po�z^�];*}���4M,��|E�
n��2�qو J�O���r��E$@Jҟrtur�����j�2�.Hh���S�<�<�!�1�[r6GI4��)�6A<�'E���ؿ*�4����
��~�#Ed�NW�w��6@�^�ⳡƑ^z��*�NǬ���̜��}����~�6��J'�yk[1(��<Sj�o��P�f�2��q.+`(S�ܨ8���HjL;�:Tf��@��+�Cf4<fL�<��Of����t��\5�5G�`�<̚Z���@X֕��~� �>[�Ŷ�	�O��W�yh�jU�ٍ.߳��xA�ƊAmkQf4:˯	���U�M�B9P��odu��
|��k�ᰭ�#Seߕ�2
���.�
���h�Me���|r7ą�
}� }lw���h�Y[���A���X�;�K|p�<$�B�:��}�E=���Y�%�Xㄌ�DX~��'x<�VhsQ��i�E��C��9��4���#
n0�{�c���AqB'S'��o��|����^��7JBki�Ć7J�X#�{n���lr{�(l�6"X:]�N^;��o��Y�FԊy� ����?
�E"[�I]�e��R�!��c�k�-$J��,�e��O��@��qb����X۝<��'mK�c�\XT�]������8E���Ԍ[$ǥ�1�ו��6;�XW��,v��
�w�.�ק��h�o}����D��1w��*+-τW��E�j�� �:ȟlN�_H�_��tK�>؇ʏV�ܻ��06UQcf�
[*�l���qz�F
�f��C�u�rfQR�a���`
�0�鼤~�޹p|�9���
��� ��Ƈ���֌�'�
I�DI{��Z7Dm+,�sN@���Ah,���^�E�V���3��N}Wy�8��㩝��D
ωDW�#�E��s����GbfkW��1ɓ����>�O�:i��ڝ�����E�q�#[�w5
п�h���9M(
����+�s�|\-~�M��n�;l���u�7�Q.���1=�ì���ףbmw�bQ+���G�ed��H�~g��y�������P{Ⰳ��tP��}yY(O�p�

l��*�7y�qƏ"0fcC���>+�ց��JA�x�'u��g"$��ĪZ�S}��r�#�V8��'V��¾�_(��E�4Dz�ᨎ�D�V��.Dv�f��N����aĀ�,G����#M�1"!f��e��OrvV��"��}c�,�"��;�t�Cs��X�X�^��ڹ�k� I(.O ���Ҡ{޷b�Al�͸>>V���
p�l���L�3��zcT.������)ZK�?1/���ɢW�A�"7%�W��)F��M>�d�Z��Tt���������M��y����8R�����l�����(ؙ�Ν!$��0��*\��v����Q��1d�T���k��ʄ����l<��3�u31WI�������%�e�DL}!;���d.ӻ+9�C�&�O3�f���z�������
mV��_O��R��l�H����z!������鶣H4꒑lR�T���K#�N�[H*��7��,�k���K��	�
���6��7�8Ư�-_�3�p�p�!�����!�33;�X������	�zŲ�<�*�3���N��F�rhn.7V&�a]�v���=�됄Z�r:����r[�H>.����2d6�ђa[Nk�`����S��ʷ"����N��l��R&���W��΢�#�#���?36���K����� ]������"�1p���<Ȅsܑ���R�g�	�j��lV�q?u�?-Xi@�o���Qi���F쌗�Y��ӓ^<�^z�TQ�i͹��f쒁`��E�Z��y�aZ�[|� T.c}q9���<��Ln]@ic �]ɭˈx����
���'��M�m�cai�d/�W����_�w�/����Cz �MH`/�]���������xI�;��笟p�s�!�䀦QX��e`�v��߰N�`�0B��EWu����B�]�@
�Q@ƽ[�y��2�)ׅo�2.��>�/q���˹W��䪼�
�G�T��`Զ�|���ĝ=������Z�,����Z>�0�BB��.��$эS�K}�494��}|�ݬ�Qg�+�r��˛�cێ�*<�(&��-6�–}]�ſ���b~7�b��f=�K����5��3X���"&�&0S����*�Ǟ4EI�b�X}�c���LX:��y	?�I����џ�a�*�I"���!��jU�����0�g`]�ի>��D��OayۄEH�[�D{�4=j�ɜ��T>t}3>'�5����$�?{�;��h>��e�j;KRנ�ʐH
x������f�h]��8��A�T��$�����\?yؑ>͒��r�I%����
;�].���T���ƫ�{��k�9ʸ�x��N��uq�%��ҍҴ��c1R�a5��@�]�ㄾ���yC�u�m�`s��F~M�ۙ?�<<�.�jQ嘘�d%����4+�?��w���`��Q�$Zc���6/��Y�^	L`�ΗLN�of+w�>��j`!B涡����D����2) ���h��d�Γe:�@��X'�){D�T�8#>y}~��g���<0�Q�aЧ��S�]D��{FF�w�n:s;��$׻�ː9�,c���m��tj��%�Pr<��:e������ܕ�U:�Z�p�܅�o*�w��l'Rت+��r��%�%�<�A�W�����cO����h�����X��Y��>1,5����A'����rak�V#�>q�󩣎:���
>C�i���ͨ:��/����x�,0��1Y�G�)Qb��b��>ɀ�c)�\ki����y]:ܥ>����*�N�*z7�h:���_�����~n�Ƙ���%�X�5��8�#��`S0=l �pz4 |�>�
���@�����&_�:�o�2p��8���$� 
�<�/�(��Z8`�?�Us�AC��+T\[��}�p�8>��h&�g�?�Q�'�[{yE��޻/'�C�)��W��81w�_��|H���cNW�}{�ƨ���
�����3FD���qt�+��dz=/}/�fa����C�AH�����X���9�,W�w���<��:�jƪwp. 7kUPcgp�:��8�`��z��
hu��H
ث��͗�"�����E&�VJ6��N}��i��9�B\o�%+.]�@�~X<,��f��G�9��H�&�c3�>YD_�-4D%����!F/����%WNo#i ��g�4/as�fd�qgxc1,M��.@*��>�u�?��Á��).�t:��.�����)�·��i�Z��i�-���6j�Nͼ���6�>,&UR��~]�~]87[�R���ͼiU|��>�S~:�z�s,$�-�<Lw3��N���یE*WT�O'��������.|�V
z3X�B��tY�������I:�\v���P�5\o�����9�[��`"�;M�8Gأ��8�����2Q�f�0�&�;!(Z�f���'�S|s�g�<*>��C�>,�_T�v����:�*S��K�HB�;mp6��+��S*j�=Y ,ֶ=�P{�g^0T�5?D�tbT�����u+Rx-�+��A�J��|�,m�;�����+Y�P�!�n+�=j��7Mf����=�d*se���HF�^���t�_ko��:�G+�&�/�h�D��&���5�4˦D�t����I�Θ=#��%rY�.yåRUE��<U���^12�}�	�0�81��],v�}"��I�����X��dp^m���T�o4��SDz�gLDO�+o2碽]�i�>w��˙1���c٤<R����f9�����5�6�����[��ɨB���$�_k�0�駰����Sȏ;��ީR�݊��ݬ�0�:VZr�j �{�`�
��&����Q�h��_�Z�C�
��ݑp�����ύ)�^�R�{�^K1#�������M3�D(K���޷)��ӤO�m�rу��_M������7{�
᛾����z`�)#G4{M�E	:�cSml��z��panF7LI`�N����!36�O������>|k�h�k���_M"�0�'5�����Y��N:�pm�j�HY���q��
S��'�QͣǕml3(8i��S��gQN�u�0ί�w��h�~����/<�;��]_*����DyZ	a��V7M�E���
g�z�n��#����S��~�]� Z޾���&.d^3�X�U����R��dF��#[�㲺<�D��ӉHv4z!0$F"��m�繛G/��$�pfo}��xI"*'
�}ݟ�?E�u,�h��DUh�E[EW>��ky���|�o�.^8+�)�Ԩ��;e�!�Y��w�"�bzH=�kޯ�x��1���l�� ��22�R�ï��!W�������M�~�'hId�m"�t�ۄ�	�-����$*�DK˚L���ό��p�Ui*wL4�*(��3��K|����a������Z�=_�*eM.<,����Y+�=�=my���B�F1����ş�}r{$.{��MՋ���9����~̀�Nc%_������Q����70D�׉H�ș}�?f��'�������w�c[�#ԇ,ui�-�e;gxn��_�)��3��Y�v�fMi�="�=ª��/f,h���T���ČG�vYO)t"mG������2��mUm�y��o�{��6�J���Ӯ������A�a�+�DFbQ,Tj	�ߡ�3�݁�s�ā��U���l�g"8J�~v�`N�:mqL��V�
��g����b����,՘��=�ھb�Q�>IM���T|A��?�V4��z����J���$ר��W���jl�6�18��kH0���J��+{b�c�ѡy�y�B�I��xX�aa�Ĺ����٠s��w�b���-{��r�3�2�f.�Z�ȇڟ�Wp\߱�
�)\.���$�?�9Sa�͡�}��PT5(
BE3Jᦒ+0M䥐�m��[��%&
���4	�3��[{?o�G	�����g��$��B�|%3����M	YyH,��Qm2����d@K'LY�Y��i�j�j	i���&��}��`�k`�;����խ��W�����!ͪ~(��q`��b���^‘�-F�����tV{+!�;h^��<�L��m��V�I�������L,6NL�:�÷Y����&�1�T��A�yw1�?j
O��+�&�P`(��fܠ8V��cPg�d��sO������wX[̦�9+���{�S�<�k�z�aq�V5���B��遐ם�m0��ٞ�'�̛j���E���3G�2�'A��8�2���J}K4m	���Ǔ�-�S\!y���l��us�0˗�6=dr�-��Wk�>A`Ey/lۊ����LyV_kNս��US�������d���~WIX�!�P�f�b%X�'�(��H|��9�_(
�2M\��!�70����߸�S�U�V_�9���R��%�ז���|�_��x��FM�>�v��3�#j�X��92&,�<�cv���p��������ӱ��Ğ!�$m�->�V�3�;�'X�4%���—��đAi^�/W�o$�2������>8An�?� t.�����A#�'U��0�a����8])HmhY`f�S��Z�Q�T1h"�S�|�a�,!�^�~�hE�H���(����������ϗ������m�$1�_�9>��'ں-�-�Tާ��V�����>����X�x+�_�|�*�S�b2KX��
K_��9���z_dc�2�h0H�ߙ쎠	�:�_*!1[G>�9���qp�l.�x���=~_Y��
>Qo¯U�l�MA���:�.���B�{6½E�7#)s8a
}`}��mj�z�1�la�n�Qt���e��)8���T����^8*
>j(�{�U�[���hP%�Y��A=;�}�;O�?�{�d8�+�!���������Kox�����ń�b<Hs�_��|)b�4\�~�0�
.�O� ��m���αl��zI��i[��hځь$��"��3�_���Ȇ#�%��"�n��wZYN}�,�S��EaE��C�I�<˅�t�-��|��������Z�z�ن�`(VzH��1Ы��oZD?+F����N���z�/=O	''8䴁!7����U$g���=�a:\���%^�E?#g�5n��m���!�P,L��,��F����T>7<�U�2ڞ��7�ym�k}�q�3�W��Ǵ��������x��%;|p75�*Px;>����O3#1�Twj��6Wh	��=��}�����E�߂�G�x5drr�����[�:�S����~��)�ϼ��((����R�z=��X�-2Y
U4�_Z�A*@w�bz���>be�J~�75@����y���l�P��۟�拪}�������x��n٪��^�r��77jy��^��y�{*��Ĉ���UJߜ�qO����
���`��#������(�=�*�:/�l3l�я���|���tqDC~��/���Ϋ��ONTa~�b�]�{7�IX��!]��}U �����j��җ��h��+�%�yf��X�>7��9F4u���=-���f$�/w r˙�@�a`���
�<�t]e���s��3?o�'�Q��N�o���̂�Q��l�Ǘ2h�cFf���w{�z����?/W� �W%�(�|j��5oaF@ޗJ$�A�Y�9�Wb\h�,�C
b���b;�ת
1�U��)��Z��A07F�J���T?�Nދ�q%]#�B�'`��~}��2[��<�!��Eh�^�l����`��e7Q���C��D�P�~j~?�I6�(8-���|Efw���y�A������]�����Ø|�IM{C��u��I���B$�����r{Ue�x�\����6��Ԕ�L9��/���],Z��Md
sϷ1��OV�Ӆ\(�6n�'Z]��>O4���w�r�2&�eu�cw��q0�=|'�"�mlf���\F	Qh\�L��9)�~�S1��[;f�*�����͚���%��ÆFyt�c�{��`�}��s,��i^���bVDOJ�b�=��f�`�vqp�l�����
��6fV��4�CA�vh,HN��m��fV|��D�3���q����<�J^�鑠p��S��DR���r~�&��
]{�/=f)���k��p>��̡,��Tߙ���:ʾ����kfnp�%�UT`���P���N��	`���D�~�‰\=t�0Ӓ��������֪9��ɷ�&��1Y�Y�
P�@���K��Әr}x�/`�Q�b��$��잟Qps�!ҥ��$qu�]�/eGD!���Ф8��e���O���ʰe
�\��j�.n�%=t`LG
�Ob)����4&	k�OB���?��蜌Y"�:!>�(s�b�c����b8%�t�����=1�Lƌ���W@|����ɶ���N#��2^�a�zW���br�}��2K�H=��>�G�;��|���%#�m�Ĭe�G�\�DV>o+�}=R��+�(Ե�q�4��9���yܧ�&q�yÍaC��K&&(	�3�m��-����а��m����>�t����''��'�PE�|a��iJ#p���E6�
��є��*��0�M��EH�e��Dn2�β`� ��2t�u��/8�)�i#�B�~?�e<>�Hv�4MN� k�މ�W����W5�O����\a�}l�R�pY��}��ob�}'�7�;s1�:�+�Zz���ĉ)N�RV��O���F�R� �Ӈ}�����XDU��,q�<+��h��b���^�m�b)�.ya4܇�m�{F�-�0� �D�G�|��i���o@"��!H�F��u�x�ߺ��Mf�Ѽ�'��'�5�ݣw2�2̠7�4�W�?�9'I���:'���v
�YzK8g�����^��:�uӰ�|h�D�@��[_��z/�x/70�i�
�Co���o�};QR)$!Q�����@D=�\���D��ل&�1`D'�<%m��/�R	&���������|�����!�_
%S��L��|�ǷZ;iߑTo�Z6�G_c�3W�A�XQ'|�:7R����[L�YlxX���l`��� j��"���;�ln�J�l���9X����d������I�i��.���
�}$;O��_j��ھ���z��G��@�ׅH8�R,����OH۷B�}3�ݒ#�Xܩ��L��d�g�Z#�)z"���%��in�����R�g��^&^ə��)J�#:��j
⾏�䂕r��+��*�ޱU0��7-���V��mV`��
�S׳�o���6*@s��hGjD�D"��O.�F;��Č1Xp����w?H��>�y���}���v��9�M����	�u�CZ�_�;}ϟz&k}I�X��޿�
�|�=�.�*��o(��hmi塥�!6.�^����g�q
��;�5׏GOu,�kZO�D�>��P�%�('h��G�	��:����EL���
#��O
�7�'p�~�^���ڮ��}_R&Gvy���ND(��>����	�΃���ܓ6L�Ct{�h<�s�6�%cJ�D��W�4�;A
��b��F�!C�`�
%�i�pW�z��zc��]�1o�h���\1��;�����2�,�MQ	�e������L'Ǿ�.�`�Q9��xe6�<�Eƙ�m�˲�����x�N��'м����|B3�2�a�!�y��g'k���r�_b���Z�NX�π�0eYn*^f1����V�s��Pk�����V���pڤ8��x�a���C����M]C��Χr�14�����ۈN��p��y���|_.b�_$Q
@˄5�R��]�dz	���p���f�zd���"�D[�b���	�Z���F&��)���!!�~!Xoo�l5.JKP�=��{�{���_r�.���WR<���O+�[�vcl�p�>M	)�M�����6x��<�+*���L_Y!c;��N��ȑ"��Kz��ק�x���"�V��,��D����C�����Y~��r9���W?���-<H�l�ţ��M4����3�$/�2t����#Fk=V
�(���_:���@@���]��qv�|0FJpOU����V;��U�A2z���ԛ���,��:d�K���I���`�=~�m���H��^	eq�l,ߧޔc��P;�>��GJm>Q��7���-I�?�8�p;5�����LJu|܄jl��6�|l}C�Q�RI��M��-��`��K�HW��x_����Hņ�f��Qo��G��QDƛ�1K�����o���u_X��m�=��:�#���=c �˯�LC]ei:a�'_Q��Ág-�%EW�ͺa�
��Do�����n죑}5|���F3~HK���"ס�j�2k=��'O[��e�9f�m�^�;t�i�(̹�σ2|�؇Eʑ�,�ٕ{�:p��~#a�0�9��*v*23�fϸ��'��
'8�Q�i��b�:�c�gx�p������j�L}�N9����q�Q�pђ�LK����L7|�~!����A[�n�,�=q���3l�o������ދFU	9-�	IU`u��d��	ČvI>�����=kUs�(3=N���b�x��r���b��eй��#�Qd��td߆ߚq|Ds�(xs�����f8���b�†|��4�7A�C.>��y����'�Fٓ(2_�Iv��+S�#��<zwS�?����x�,k,A�n�Ѿ�<��ܨ�x�3�Rl�2�<y���;�H`�o��ą��ⱋ�Ά����I���7��A��5�j-,(��]]�P�:��3�YCʫ���&.	�4���.��o�@j�&?�`4MS�M���;}��&��@��\�L��C,�zzYl��S��1$~L?G��}�8���)ƚS5@���F�yG
oүt�����
�����D����
��@�8 ��a���]߆�M>��E�ܢ�wb)��lO|՞�f����;��H/:ިL_Q�h]pO3",�z����Y��a[�t3����8�G6�	�s ~>�g1`PY쿿.�7"nK|R+�R*��4����6��~$%�<�q&�
dW;+ƙ�W��������H��}2�1R�0���b�MQRD ����P��V�v��Z�焠	���c,y�����
T=^�)�Jv�?`}
�ޒ9=�9h<��>��{���\�aW���������pbic\��9�x�6r����ٟM���B��?�װfp6P\p���$��������(��t$(
ݼ���1U�EH��6Xp�U�,6�S�ξf*��,|�c�Z�����9f@����z�5�"R]}��Ĉ�G��gbH��!�PU���	����X�þ�g0�O7�lny����~(�Ή��2��/�Lv�O��s#����f���a��g�[B{m���a�������'.D��x�־�\��I�`n��1<Hm?.e:��6�B���8W��Hg��H;��,B�Ȓ�`x�3`�l:Jٳ��Fx�k�W�Ň��|3�2?C#��ϻ�;���X\����&��Uh���"_��(�u8��DN�k+��
2���	�.jgYR���0qq��vϫz���}rWIb]��1u��a��F���� �Ss$��9r��I[
3i�U�"�)��Ef��)���*��N刚���Ϝ��7��q=!���ɷ�jJT�P���ŠB �L�Ɠk�h�„C~�[s�&>8���mX����P]0�Z.�y5om:��
}��&��-oӫT���93��5q��0���IM
Ǒ,'=��t?JHJ��ј<��2n��4]�/�s�����>^O��N�7(��u~���I�Kq��T��{͑{F=���w.3����?-]@6@�<��k*<jG~u,�%�,T���ZU�s=_ݪ�U�;e2�N8g8��q��
����~�6�x>E�ϪX~�{H�^�qem;�߯�H�f�W҃��F��]�Q~�ؗ��|��u��q˗���>�<c�>��i a�Q��t��Y���Ijv�|��NJ�a��9�"�n*/�Keh��u�����a>���
[)@&�L74����:����ͷ#t+3!�m�	�<�5(�D�`}M�o�L^]��A�rhՐ.��\����.y�(�
���J�ʵ�����[L�L �rQۜd��;�a�Ϸ�_F����ʁJ���d��R}�qy�EWr���8N����X����H�"����<�EP
�7�sjA7 �o�|d6\2D�1B�G#?9��џ��I���b��?<�R��[̫���Y��u����%���G��f@�$��`:���*��&s'L�g_�ߣ�N�4�s
�$i�S����֝�EF�+���P�zo��]��~>cO�7`�c\n�Ƭ�DUx�d,Ѩ[g�L��
ucy�BZ��q�J���[΍®��)}�}��*�0���M�?�$��x�vq�-BD{�<�..m&��փ�_*Y0/�g$6K�Jl��#ᤗWa��	`�돥'�%M�����c�/�m��$,8h�	ɝLV�<\��?H��n�ީ��z�k7�ۮ�GИ���B�bXf��#{k���N�vS��5� ��4�ᢞѕ���r�I�b>^�6O��O�6���:����*�x������Ǽ顙�X�edbU��v/6;�]�=�.��v?~6�~?1�D����0�;�����ч���V?l��<���4Jƾ�w�3�M��
����ghz}}���nx�k��P�w0A��xEI����.���~OV��נS,���u�ȶeQ�#vҠ����E�>6՟\3�)"�x�Da�l�p�O��O%������l�O�X|�ݝ��o�
ִM�>�wm�Y�s�R���ߔ����]�|��$́.S����a�k%���16L!�^=������!�kieS�(��#�5t�~����,�
�����M$6�) �Ԙ�׵ɱ`cR��
.P�������x�qy�8y(�`Æ�;��5��Ƥ4�+����:�Ε�P��,����u�/׋�eY�$q?�Jw�%�J�;�a���]���}��%�Pe
��
=��P���'a����
+�y�!��k�_�$�9yv����;2;�'���s�>B��^��1�5嫡�H�v�4o|s����A�t�_ݨR��߄.��Y��r��v�&��#k���	F>:I������8�}y���+W/�"���&����5%Ѣ7�DT$�w�'k�\+�����������&bt9�Q��+�3��Gʾw;�`�\P�1��2�5rj�o�aKןGݲ��ѭp�����P��s?F<�����׷cg���5��<C��}���fb"�5@��Z�R�V�;�[x��f��0�/uc<1�Q��V����Qf�'�T=�Ĝ�{�_�E���n0"t�Vb2�x�D�+��-��	�摓��~�XP+�W��^RPX�n#�
�bb�;8�_���Ɉ��}2�*�����>�R��5Qr>�k��^�8 ���� �י��
�כ�F�tD:�G;�/Q�֩[��v0�T�r��A�y�H�LU_IG���w��1�`��
%إԭ�릚&xfbU:J!�suΝ�y-��r�_�
;T�<ӛ�3�����3@q�Z���
�/�d�
��Ag��A��B#3�y��_Q���
?�7֒��[_T�nq�;�%^:�M�R��C`OՎ�����x�<�(�`��B��%'m�7��,O�v3L���M
/4����ȒB��U�/i��{#��N��nU�K��=������h����f*���I���Bl�~�+:`�7��H� �Α"��$`�����#����C���	=���uD�h�i�7FI��plQcw/����	P���ي��O���;V�8���Wd�o[0o��<g@�^>�ф�1���(

v�d�%$���3��dj�zĽO,��=T��J;�Q
%��dд1�L?_�Sb�!ӄ�i��� �PJ�A7�eR1��!�L��ht�4H����p�䕕oOП�D6��`QL��;��a��;_��ɳ��l�?\��&�ܩݽ��:��ƠDm�iSO��-3�fA߱��#L�>���k�}ٗ����Eل��h�XP�׳����N��x�2-W_��%b+(|�M!t�œg�emg�Wă{��ꜷ0o���Y`u%]	��,dG��.��ń�N~�&@�㼑Dz2rbE������*�AxH;�ߓ<� ���DO�{!��@��v�RlL�!iq�����h��}0��όT�r��g>qԱ^�A�#<c��f�{5�����y@��N���2�a�1E���Ut����W�A�Q��&��^��f�	���ζ̺���:9v���л
���޴z��B��l��1���PَT�]C%(oq ���t�3n@�e4����fQ�~�82��Q�����'K����jr"�f0���!!&!��V���1eL�Mv��l�
3�����/�ܙ2�n6����A�F��Ov՗�E�l�����J���[/0):\��O���u��^)\y���'
�M,�\oڷ=K����
�Xa9"�]������Pz�F4�q��S�;��Sg�gb�C[W�nZ�Ν!DX���u��͇�3r�?c�-�00l��v�_�6����;��)�/����76�cPWp^Q����z��
���cP����‡�����ʭvz�ގ���KH�K�.?�?�%W�}��~�`Z`�C�i�R��G�>� $�(
[Yl��剠������U�<��z,*w���9/A�I1�=����	�������;1�^��9A�w�&E����x��'�\o�ҥ}��N��>���;�y�.�y$�[q�QZ�N�UWM`���]�؜+{�I��]On��"�?��k���[����\�+P�)M�(zY���g�ָLp�ɴ]�$�4�<�p��dI�Q���nM#*�	��fm�hF7P~��}�(��m�󐣮��a�S����E9�\��x�\	��Zީu��<BdQvkR�Y"�Q�Qu�颐^%�h�o�n	`�UЌ&qi�|�4�|Y�#W|�{u��hm�6X�R����+��V.�����xԿ�Z�GbF[��;��xE#��Š��n�q�]r�A�0�w���~ӟ8�~�E��p�,�"�Pܣ���+�R�A߹L�T���l�3?1�T�}�O��m�KIB���>)��wJ|�����r��7��H�'�J�ݧv���r<����.8�-~-��_~�j�:K��0!n�:�K3~�=�Υ4��	�2�G�5o�䁯�t��z%���;�*��6 ̓�|>�4������ތ��l��ɧ"B8S�k�-�_����K~�(��A"
��Ҿ9�.�oq�W�$?���[}���1?m�V��2PfN���P��2���9�jH	�S���*�0��}���%�̓�!vrFe�J��r�5La��Ftӽ�N�[=��H�B%��U����h����k:���`��X�b�dX�H׻��dac4N,\��6[������Qdh�+ɾZ���1�c��e=fK&�4�s����6arK��On������D�l<#�XQED���t���/���t���J�eC|xH^�bK��"ao��U�ꌐ{�%�~((���
C& [A��&L�qA-�p:�^�Z������,t��*�a1J��g)L����u�q�*�a�7���c}�D\s��D„l9c���Q�çh�;���<�(~,��
�U@��NoÌ�񪶚�qh�`�fB*ZcdҪ�my$��[�r;��$#���?:V
�=X�>���}�y�m��do��el��&;=
����*V���L���5��� �{��4{>���������$*"=�iC����w����)>��:�s0:crK��h���rp�n�z_���Z�C�bE
x��26|l�|�h��f~;/�Q�gT����,�t�L�
˽:K�X�1$Ǽ^���On��'+�6��/��K�j�T�)$Z�A�-����Y��YT��3���G�j�5O�0��O2L��N�q�އ���X?\��1kc�S��N�CưM�(���PE�孿���D5/�C1ӷƦ��q;6��&���!"5]|�_�W�h�͇o��\�:��.��n�����@cc���}�#����r�r�hTE_�]���>��A���An%��5���Ǻv��d��<L �'��w�t��F�#L
���[w�8>��y�����Sq$σ�����x�1�Q�$a|U��m�Vj@�1ʪ�%\�q���>ݰ!�6#Rl坐�{��퍸���f�ܪh�
��64>v%>�������@�ӊ�)�����Ϡ5^|e�y"L����Yj>�W����%	ν�K=��T)�ʈ�-�3��F�%|�^E]�ݞ�/��?"{PE���e%�$\n֌vȗ�M�^FK�o���d�	<��;�O�\	}�F�^]�W9����^]���61������#�{�n��DZ�nŅ#��/0kL�� ��nܓ4�b鳂Z�w�;��{Ktw��a�����}	9��֥���+1p1��Nh�w���W��y}���0YS��a�.{`��Kc����� ::h~W������1��c)Eµ�i&(k3Ќ���8뙓���m�$7��۸Ԯ����v������N�Q^�z�u��$1�xa�F	�BYdM��!ܚ�GT5P�)(ZH������C��:}�Z���'�?��Ԕ���w�7��Ωv�f�!�����K"5z���.������Ĩ�.5WN��U��fɦ�U�}T~?af��F4FLK�����`y�eН�y�ߘz�O�Qd�\;��^�0��0&%���/Ec��]�:(U	�$q[8]r��nh��La�Gg��<�:���H�V�B�y������XE�Y�.؞	J��g�����觴t
�T~@�h=�lLӟ��YtMA�S{w��g+���ـ�x�W��0Ag�{E�ppu�y8�%\e��{d�&I����ط�lA����G�O��K�^�����E{���R�2�J5�p��N^�^�T�e�Gu��m�~��vu<���=�'�'$�0;��G�+���s��'$V�	��P;礵J_��:|�Gj�?P䀨��}I�k-��u�a\�t;�U߬��W� ��c��Ev�2�q��~��K���-ИaN��Z��ΒgN�wp��Q��i�;ai���>%|���a����!�`�y�޵l(��b�#����u�H
��(a���$x�i{��q
}|Jh�K��h'+G�BUU��>Y�rج��6�)Z��é,�ʁlB�(�Nae���ٍL��I|M�u�x����Ê�����q�CFAɆ�UUp�8�S]�.�`o��wz`
J�t
I�\��=*L�'#�pvP�}���XF��pS�(�H��P����E����xͱ��p��pGU�rn��0c�
��]�P�Q�"M���!�`��!�����]�)vK
��k`{*�K�Rv��f"P7��O�C�֕~�q��(S��p���?�&4�|��;���8�r�E�G��Fj�f�$`%���1���G�v!Mè�gG���I���<[���ž{��~�؝��^�kټ����M���;�鉔`��
�`~�{b�_*#��7�s;�а�uif��<���8y��CIZ�B�HZ�$�s�y�'���~���Q|��m��t)f�
��\�s�W�?�|����U3P���ѻ�'��s�T�ȅh��YA��HDG�.x�ӳ�ژ" �J��h�&84qC��+�I�z8��`�K��IN�:�39�M��5���Xn�
,��Z=1�S�
_x�v�~wd�e�
l¢f]y_l��Q���W\L�S��k�'��ͭ�:�9�� E�$
��V�^p�Jl��g`O�6�|ayB��!_����=�l�D��$�1��z�����ѻ�ҍ·я�)}"���mɗ����D�NlF���3���'F�V������65��c�1ߢ�A�����u8�*������(�x|UL��R�g {_��Q1N��ԁ�������ob:�	6�m�8�^�7�EYs�+_��1��a�@�9�1#�t�
�^�,��R�Ey[�bcl�6��C⃸��*[��RD�i�dQ`B��%ӭ�
������N~��h
�Frj�)�ٲ&���y%�Z�+koNMhS0f�x�5�8�V h�
�����(��� �Ƭ��,FZ|U{"�F��h�w?�<Z|�
�5Fe �LX��F��#��ć�ݢ�"Wn�bogl?K��/c�2���@>�)�{�z`�>g�vG��HOݻf��|~Tz���r�h͋��7���E�̋B�yŋi���sk��R�O�^>\1c����K'�Æ��A]K��V�܆�3|2'�Z���V`�����U%����X@��X�U�_a+�~t�ٷ-��4HǸD�[H|����T�'�ӗ*��O��V��e��> Pz}�;J�@�V��/˓n�R�P��6GY1ͤ|�'����@v��{Q�~�+50K����[�/��#�g�![m��`E˩U��G&�9e��-_)�/����@���=�v�Z��G�7�_�|@2_��(qi���gQsS�:�=��+�	c̯в�u>���c��}ON�i�T��-w5!��a�(z��*2@��(o�KIσR�$�5{�Gg�����\Q�Ca�G�˂�j��Ry�:nҶ�m�}��aY��x�y'�z�|�-����h��'�}�6chjZ���-��(`Ӑ� Cm寕^�	��ۈ@�e�I�~��&��a͘�.	a��p��.��m���1�+䅱�27aJ�5����
��X����$���YL�=I��� ȏ��A�Vn�8���ui�"�-��5�tzb\/&��ϸG���͈W����q#i�!û����Q���_��h�}zq��&��c�]H{�:�:1���/�.{>�MW��W��.��ݑou�{4u�l4�XR1QGa8H��hA��R(�ٖi��K0��Ҵp��iZH���B�F��g:5�瓼=�$�^���K)G1�(i�UO��Lss��2�-���<^��,�4��R�d�#h�`���@��xn������F���y@D�˫l'&G�W�'�Hz��5�/��&']��B*$鲢#K�۷�mi����}Y���Q��G%�����!��`W�aP�yiH�P�+��x�nx�Pb`cbTc��$����n�_�4���U�Gz�^
�;���=�m�9}`�|oB]?GU�-�C0'��D�t���h�7��V.�һ��x�E�u�N���!P��aP'�Dur�Я`N^�x4�9}����jŸ���(��
��/�D�~R���-�׶e����̎B3�qd����8>�ر:��@&�M�a��������=����'��E�+�چJ�
˦%ד��m}� R�����|/c�>=�'ݡ�m�IV2:�
\��L~�#���[<�+��ፈ�I;��P�c�[O�a5��&ut�����-?Aob:�/謾���Wpv�3*���P��A'oL3�i���L�EU���r�$Rk�����?;��MD��/l?�МRP�f�.�9�����Uꗌ�	/v�))S���U$X1[�]C%L�����
��&�Ē��[�g�<2;�VU���EV'ԻBp���Q�.>��O܅����wF����B����Q�HY̱(֌R��J�P;�i9E�q[|�>���9ɷ��U�jCf�:3O���G���]6$3�1�r���q�a��1�X(��Kul��ز^C}TY�D��XZ�홷d��H:τ���42��9+��LU�A�xG����:Y�3ក�}���!xw{�S�z�v�W��A/���{1"�2�j��Lo�d���%G)����|B��H}�8�uRG��`�dT?='��(lG|����Fb�����ˠSy���Ѽꁫq!�v͑��
�o��y�	纂��O�RM�a*�.�YM�;�sg�3ub0ԙ�_|��+2sj|�\~����)Y
BT�Z2�)j=�|���a���Pn��<ԞiM,�h��E�%OQ�CL��3u�
6,<�W������ae�MD�4���]���˓��}���b�3ch��N6i~'[�3_��1k�|5/�\w��h;�����}��ע	�*�z��J|I��z��2>��ňp@��|�<,Dô�ިa-���&�h���BsP�"���\�
!םN�5��a���s�NT�8G;��~�j�R����w���ͅ�p)��[���sr��_~��W�����̱A����B���}����DDI^�m����^#?����_���G��%�sH�@b��DG�Z�q2v!j5B��q�J�Tp����7S�Q����ߡ#��VU�闸���696��u�_%�D8�^�o	�O�{����#�5a�:[�,'�p��mq��x_I~��7z0�|�n>�+�]�zBoE���
77��:�Cƒjo��`��΃ ��r!o�
�|�x�
g�tl��[R��N�!{(��D��t"���<��~]c25/��*xD�HR��m���L����
3&ח���;m
x�_�����L2l6�_}�n��%�KR�3����C��u������|��m�NA�>ȺdӪEU��![U�ʔ5��OO���Gv麟�����ǵ���Y�� _�6�_n4����f��KX���@�v��C���%��TGb(���f�Nm��)Zea���N{��n�P�|�E?B�T'H�3��Z�,:޵D���R���Q6<o�h��6aދ̙���o�q���+�]3�+�&6B2ӓ&`�)[�"P�!��"<_������CK�׫�s:�6�BG?02$U�_0�[
��#=,]vo
蟭C���>��9����?�v�n}uW}�q�}�^��#��n�z6�'T
�����AFVͳ枛�[-#uJ!b���e`�>×$#��u}2��gq�!�?�tQ����9Q[1b��e���<R*fLz}�-�6k�͇GW7���X/�Q�����2^���߀�?L�
#vkm ������eٜi?��	��A��q:j��Mު���u�я�ITj�2�J���A'��(b�j$����g+§�>1p��vQ�vY�u�>����|4|�0�i��� V*�|䵻����h���n���Z��㜭����U2�{I[�������i[��-�\%�?��ګ���k�������U���:m�o�:���/�9����e����O�j�����n��-͟���/?��/�'T}�
��h���7������Fk����׵��_�����s⏿ޕW��R�.����v,yth֯�A�O�������3�=3硫�����?~���9���W�<ɟ��=
�U��������q�a���O���?��?��i�u��=��E���Ҭ}&�73��|�_~�������E�/�z�i˶��9��ȟ?���?�k��ث�z�w�c�G~eC�����c���E���]���������?��Ϭ=������v���/�>�������eٟӿ�[�Y/�m����_��\������z��,�ď�������??s:�¯��X�y����_BhI��?��}I����?[���6:�~�?����/<�YF����p�OK������������}4��x��a��6���U[�8��۱'<��~I��~�~Y��~&�y�?e�tٲDE��?��Z�m���ʿ�u����,~���<�?�Ǖ{�T�s�:o�t�m������0����j���y����a�~��u�����a��/��t��y���b-��?A�SG�Hҟ˹6��,���ǃ���o�[����ak۟�~�տ�����x�'[�rۯ���kL�������Ҕi�_/]��x�����ᓵٯ�,���o]�����?�����/�����TF}��O����S �o��W����`�o��C$�����M?�����j��Xo^~�������_}���z���k�����ؿ�������>�� ���������Ů��������h��Z�v����_
���3�?�����0��S��հ-�_~��u�-�/h�?R�_�w,�?����[���7n%~e���m�U�OՍ�P��ʎ�'+m�qP���?���G��\,����?~�a,z�e�,���w?3�+b�����i�/~����ܼ�?�]o�6�}��ٍb��-z�Odok\�,�{��P,%bK>I������pH�e+����&93$g��Ez�u:J�pl�'��<l�/�~qn%Fq
�lz�����E�c�!�ԗ��
ޔ��zӧi���U�/�m��Fϰ4%�\&y�$���DC���pK���
ڗ���"��t�u��l>4-Wi?
AK�z�F�@�#9��&tG�4)�z��#p�E�m��-{�d��Ȋ�q��E��d��m}v3�O�?o�ן'���A�G#A8M����v�r�g��b'D����ܜ����)���v6C���kU���]=���
��#U���N��}�
[��=K�7oJ�TT�B����Z��k���eL��س�\A���-C����	�� ����|�T�*�@��^~��c�6ْ:82��7���+�������ʒ�uXn�Bq�
��<��%Ļ�ԏ��$]�D�߼ �~M�9�V�vy'OC����%ă��{:��Y��$�븒0���Ⱥ'��(S?��g�Y=�rAĕ<�7����ڠ������WH���oTġ۔�r���t�{g��ob@߷�>����~��G���ql�b�D����S]>�t��,D��U��)beDž�)���V��Y-���<�N7j�S�1 Jӣ>K�T�4�9�\��l˗־]!�Z6P�*x#�sg����>�&7��A|uM���l{��h
�.���V��g�7�3��:�﫫��������0�7���l<��O��g��A>�jw7^~���٣��co��&&�p�qQ��;0\�O��;n�>�
���$=u�ɒ�:�AOKp��*>�8@�@4VQ-��ͭ+������!M ܔ9��s��d�j�P�i���N��Q����zvpH�He2�����K�6���d��]��Eg>�k��w��#��Bl��K��$�z��Q�]����`&qK��
X�S������#�;�#$���C�W�"9�3I��lR��Q��X�=��c��v	{��%�;�%$�Rt,a=���.�g�KQbv��b�4a��&�z+�ž��k�e���"�c��1^w9�R$`�	��s�?�bjޣ�'g9t�=����&wY�~E�J<.-Cd@��ޟg���O�rA����F�����2u6is�NWCZ�#hsD
K���3��dD�ߩ���-��b�D��|���9�)(e5V�I*ݘ
2n���!�[*�0�y�">J298�z�uӤ���(�N�~�a�u��# Y�������fϦt��l���I�l�M�Zg�{�K��m$�����^�X���j�Ge���ͣ�P��+�Dj2
�l�ŏ�Jjj�aph4�=rZm��v�PBƩ�B����eU���u敵N���r���]e܃El��Td�x���{E+)/':ģ�����?�ީi·��kos��������Y�~p���	�/��n[�?���"�J�y:���Yf�|�P��e#_^��h�
ox���)���}I�	$�%�=-Qa0�]�L��)�b�?��>��':#�x��鉻>=�
XV�o��)�B��⇬���4�)��Ob�<.'�=�=�>J�|Wz�?-M`h[@aS�2d����
؂xZ�R���D��F�)��#����r?�0�L+��}��gxw�Ѓ����ċ��sV�l�� Z���K@����Q��b��'�'^��u�$�;�<��U��H�����/~���@��aI:�3��H�[*���H�qY��
ê����+uD����{�ؘ��,�-�	�)��D�,��!���ܟ��ɔ��r���X�<'��n$����AX�RL/���:��c��U)�2��Y&�h����촯�*f]�2v0��h�^2w�2&\�\D�G��`��w^��m��Cs/��t��3��w�9uO�5�W:��Z硌Y��!��u��s���YŲH|OTjƾ4�~(D>�q��~džG�n���
�(GA#H�$k�Q�,��:�T�ay�eAV�$�YA����a�P�v�C�R�_A7�Q<�?�|\CJ�@��"4��C���$��'l�
���[��W�7��9N|�Ȅ�E�bib���9�: r}
���V7(J��5:,]�+��)�,x'�fmM��������T�"ˇȝ�,���0��hHjl��NX��r4	�wҋ�^v�S$�"_9EGG2/P��W��%"�J�.��}̵dz��R�,�6���C��w��!?�I�[Ű?-��Ա=Lqv�–ߒ�lØ�3V!ڧk�V���Y+OhK�~���
Kzr�z����[�J�i�G��EA@Td��<��` +���e׊��Uu�(eU��f\_T������P�d۔����.�G��b�v1	�C�i���7z�Os��x�&��ݸ�r�YE�x�*M�!��_)z\My�+�L��+Ժ��*�A�(��z��RN�b)V��
Gw�U�X���傊{��^TУ�0��]��G�Gv�Ig7�U�f�p0ɓjOeggb�i�؝��M��z�'.G�9I�8[n��ӗ�(Tߧ��D@;^=���z���>����T7K��)�� 
jIc
��\�3W�>��z2�p�s��|l�:J��
E΢z��*�U�go� ����K��E��4T�{�����t)h�I�J��d�� }��
}6�@	)h��ED�5�=�ի��H��)g������|����,���Z�u�����r
��Mx���2=�v�VN,\��&�..����
��'��\kWʹn�f�)�C�ʚ�� n�P{�T�.�f��qȜj�Y�w��9�nG��gȳ�~<�a�dł���#�;�����Ek!���߀|�Z2E��U���v��TD�Us��K���?�GQ�׫���R��	8=�rr��D0���i�hIL�e���-4U����}ґ�n�OC�|΍��R��?yM|�A�����c#TI��)ldwY0�(ؙFaֶ�a^~�0�B�ZQf��y�W�)����S����PS1��M��@�6u��,	PTjb�G59yU�1Դ�j\�\,��#*�����]��Y97(�j}���K�/�K�̷�����
O�5���X�0^��pe��o�_�2�l������N���u�f+��N���g�w�{{�I�*�jU�"u�(�a�}����5�R?�O�0GK3U�DTmRǃ��,��p�R��SB�E-e\�,r�u+L�X�2)~3�Y�*é=z���y�][�v�\(ERx�������w[~��2��=>�ߍ���$x�]9˕�3砑��U+�V$�&F޻P��g�l�a�*LL���G�M��@Zg}
�O=�y�� y�.����8i�q�'��@���
B�ӝcm�P#�$v�:�s�3�W��a�O%ࣻ�FHt��M�pI��P����D�X�hk��a��+6�~���؞�&D�{N��Ō*��,����R��>6N��FI�����V�I�+j3���+��3�0�&T7��g�gcT,�8�۷#�0��_4����D�GY��zq�Z��;�q$&��`��'۷�s��[���1�A�x��?zZٌrA�R��	g�p��Þ����n�F�ޯ�ia�r�졇�*l�"��Y5�N�)aɰ��F�/��ȣ�ݽ�Ykf���pHE?���fu�m�͌c���qL�qU-E�����
=8��r���Ƈ��޸�S�r
��,���{�]�L��J17�;�`��q�Qh�޹z`d���d֭n�ȘvbB������*��UYp�C��R�C��ms����x׿���Y\���|oX��`��#�gH���*����x�o����FK 5cv5D�nf��Ay���0{2(�xƁ���hk�gD��������\2j`���="��_�v�y�Q�ɡ�z�%=ru���g�R�Ŧ���ÿb|/�>�w�±�2�?��=7D����Oݧ&����`�f��=�5-hZ���Ľ�.��Li�f��׃:��rA����>Pc4�D#�Ye��{.�-G�+U�#��H�>|P-S�B"��g�����V�-Dn:w�����f����J��m��E�7��I��]<�7��ۙ�[��+!~�O�2#�����}G��qE_G��bAJ���y�ّ‹hQ^��g0��Z���j�tM�
�)hND��B���1k�`ꟿU�6��Dn�ه:�v���Ti�n��u�p�*~l(���R�f~	��	�HO�qP���Gq��-ø���<ʓ���=C����L	>��j-�Ϥӎ��"^�x�j�g�F���_�j�4Z��4\��|��E�
���0��.�?dcE1�6�;d�ޕ���sd�^���8\���E�K�/y��}�%k�����4�s�p�v���s<�!��B���(�󱗝�BL���:7�ɪ	J8T�E��~�fw����������L�M�*inm����ۍ6���5pۃG� �P!��3p�,�p+_�"��ی'�����,pa���j�p�(�w:V�Zk�D�1(.k���kΊ���{��uk�rz*r��}�Hb���$�*1Ysg�锖�<����^���4:g���ϗ���P��Iq�K�_�l��3Z��aCm���z�\�%�\͖}�'��<�X�M���*1b^F�r�l-�+��������1�$8؆�2���VwP!p�@���F�$�řp'Q�=�5p�d����'�h��sO~�Ȟ��dfD�F�3���Pj�`�Y1�ꯀd�y�L�5��f�~�M|:`�߻HM�'���X5�V]�A1"�JݢۄC�7h�߬�r�Wד��]=�ܤ`���zs��U�?�����ɩy�Z�"+M�s"��T��z[�5KS�g�I����3����p�v90گ<-��'�I1�E`��k�3oF0��ۀ��2�m��*".N<ݸ���#0Y���KqD�aD>\�e�~ϱ�8(�Q��F2P�нY �2�ƃ)4��B�|�O�g��qI�]�4"�CO�U��a�B�V�ot�1:�ұf�yI'ܥ�p�#G�6\)-[�2���]mo�0�+��teB��J�V�
b�ְMSI"��4�dk������/�i�m|`4�^l�αϏ��l
Ax�a�~|��7l��!Ӫ1Ҫ�D�ܖq����^�"֫��[�i��#	��W�L`��/�Ȑ<���<�,���M%sQ:`�£P�?��x�
E�*�T��$��w
N���5�+�b0��}����RʈR�ޛ�T?d}�Z$�)�"1D�F�-��r��A��<R`b|�#�к���{q(o�~����:����Ah��#�-˜������a�	2�љ�!sb���f�!�j���ZZ�|ʹO,SS��6������z�WN�x�#�Iq�̑z�ߝ/��]���e�S�`֗0I�x�:�/yAP��GP��:wc�Q�ǵ��}�+���|8L/��,�"ڜ�{�?\�����/������r�w��fR�%�}1(��r��N�#����]��k,�wJ'��O��\��P⒅R(���u�}�8-Oo	���|�$�d��E��m��Hk��(�N�듍\��I��
��GC��\/?�ʑ�����81`���Yϑ��/�I�Z�!)�*�_���"��8��]��N�a�V&'�B���RFA����qv.3��%J�V;9�c�tZ9`��@�5  ��	�з��`"(o]�/�]�y7���0CD�ڬ�%Y�bF�'E�V���x��|;�#]�}��S�Y@���4 �܃�1I�,�iVD��bz�5w!:�+�1|g���z�娛<�{͘\̮p{���5����V�?s�RQ��KeTc��j�Q�����҈,	����pq��S�mڍPƯ����0�[d�	��wJ$�(�!�ۡ�ݨD��|������&ڙ3�Fw]�*�(M/m�-Qd���~�N�T��M&��ഥ	U sG��F�[�n���YfK�-'+��W�a�c��"u�w�V�㏳Mɭ\���*M��x�"�{Kez�\��xׂ��4��7bʊ���){yd�];�D�tҤk�PЀ@�g�����T���`�0E�Jt%sOߢ�!0�%�Zi�U�wZZ1y"�1��.Rk�vY�O�C����J�b�Ճ$�Y�!���<Ÿ|�
X%��#x������J�g���]�
�0��~��Q��8Et0��~�=Iۤ��)�"U�6���d -�m�x�o��M�,4����,�O<����)���0�djw�r�qO�Ӏ^?�4Q) �3�l��4	\ϓ�V�|y��c���>�6R�Hw']H䄬ܨ���uV���-˲�Ц�=Y�eK(#��7׺��J�.gR��vO��}��#���'��W�������3��m_�-[�=E'�U�B,7���T��X��*�y�R:?&���JB!�� �q)h�8@�[����m�;�QI�"[�1�?��pf�v���1�*��m�E�҇5�$�_�J�`�i��7���=kS[9��P�5�	nj�lfgqN�H 	wx] �å(��&xcl�6�Y��ꇤ�����}L��%�ZR��ju���C���*��]:���a��)ق�p�����̓��&묭�[��舿_�o����`�����O釃���?����\?8���ګtg���̓õ�ӏ[>n��������B�����õ_����oͽ�+��l�|�>�����~2���hn��g�(pm5��e�B�1���j�j��%2��~=E��,YF&��G���Ư�)��bmmt�\�AS��"����[B<;�47��G�Hώ�I喬Z�6���ܤb��X*��l�.Г�c�l-ģ���ghf?����"��ū'i�S[~�ߺ�~�I툞1,N6)\�>8*��6�2#�|_�D6G�w�����V�z��9@.�"Vɿ{<R�$Z\`D�a�b��;�rY�/Og+pU\{�1J�C5����!��:�^�t�d����wH�CE����N��}t�u��������1��bі(����e�zZO�U�«�d�R�0�J�~e'�ͯX.��4˭m0x���Hn6��� v�(��Sa��mO����>��{��ܥ�i��>��‰��>H^����]qg�ωBQ��z$��@���磳':l����6DU�[8��%L��lم��ٚ���&w��x%{!��o�M�E?]�c�i�kΦ���|�\I��V��B����]st���|`rS�`�R���W��9�F�K�F7�3��;��e(�KNw
&Ͼ�3�Ǥ&+��xU��R����f�;�+�3[�_�5�����:�	��d|ś=�,̐�dm�Z����ϙ�x�`���/zŇ#k.*�'�i���d����lI"��4��CƄU�S���N5}F�!��q�a�<D��k�����=��䚬v�;�O�kq�>�p���F���F��1`�i=c�M����J�)��KZO�yz!)C̡#:N��r�D!�����GSD�³l~91�K*67��vp��52���H���N�N4l���5�\e敓�ސ��8:B�u�5�&�nM������#T"˅��'y0wG�X�aA{�s��
?�:�#e:w��~�N����nZQ�]q��H��z����wc��t�Y��,�O^�z���p���K��Єj�w�m�:C6����p�fB�`����~�xR%��p8��w�"��!�PV����Al^xQn�SEht����A�+�ՖR`� '�V*zU�����fd:�w'iI�7�a��몾�T�Ҩ�h���)�S��Y��H�h�e����q��(3Mg�XD��2�+��KK�w>R��G"�F�+:tj(�ϖ�z����S�
��).��:L�U�, a��C2�7\�$�Tִd���Tk�wc7y���M�-���������G�Z��L[C�XK�>����z��/�E4o�*nD(E#���G�ጞ��E���{��Kz�S���(���$��Uɍ�8n���Z{0�9�P[��J%�2���Q���gV�1-$e�@t����_^2J��o�=v�;{��[��j��@�~"�J����O����J�'p<�
�+���JӔâ�����
4Z��\]�.ߌ@)j�ˋj��b^k�مH�L�ǴAPKq��|,Կ�����^E'i��I��}���}��.gh��ջ�(��E}啾�6��ҹy��ˇ���I��sN�V����"#��'A&W��`ٲ6ۃo[j�L<����AOl<a�x�a�;���A��^
!�z]�
�#���^_�,��_������n�W!#��p𥃫/�?��=U=�L�"o��m2�\u�@�����Y�7������[Hӯ�ؑjE�F�5�QX�����6�I�
�Լ�z#�;�p�cχ��R�\�P�8�8�X=;�N�������
�E:��w��`�>� 
(րV�jH�ޮ5<�b�����;%��"�+CX
r���JMe��������)��ǖ�����6�
k7���W�R�?@�D6��ٓӖ_pɴ�����6�~J> ���=E3����&���¸ym�Ս��MD�ja�	�����2���3ڈ��R������j�]p�=Ƨ���[�##�@�a��D]"�/_�`��CaճR�GK�9��i�f8��U�@������A���'sf�J�M	��� �R�1���p��Vcw�꜎�d�L8�&f���?��?^K��%�v�O�Xx�����z4�w@�oN�fD�FW�Om�8��/g�Xn(´�A?fLN�r��VI�Z�y;�V�^[�q�N�1UrT�����/�>��Iu�]0��H�12%���=���֙��0��݂����%i�JJ����3�y�O��USma�t�tF�t���Z�K �ك����5���z �ܶ��;׹r�1,0�`g���t"�4���/�������2�z�9e�)�>��[k�
�j�/����h��:~o
<��79�P�Ż�)G�X���NN%n&��/{/9�/4��&¯�5‡D䲝0徱h�3s���!e��5J����U:���7����L���2�<�b]��)���Q����S�Y��4W���L2`���*i�텂^ݜQ�F���nd��'�p�^5��n�s�&�����i-S�}��<���Gf_,�V��J�d5����q��Ĭ1��G�Iz�~�nAa���$�Џ���?�xG�Pf�T���#Ij�f�{�\�j���Ku�$�P$4��;q؁��Lm{kws���l�����d���?m56w76����������W�
T�j-(�	,������ԟ�Ѡ�mkw�pWB���IV�d�yk���K��x�ӫr��u�t�@/���+�����ֿn:
��*=SC�y�Q����5��Ɲ���%�!җ��G����#2��V���;jnom4�7�>6�������D
�^�0
X����tT������G�[۶�j��O�������ӛ`ϐ��^�@{eU�_��<��L�[�A�S�*����\MU=�k/�.D�^�Ȏ�ă���"��$hw�t�y��7���m�c
f�7[̌:nE�j�v�m'�n��`����,qw7����tnձ�&b���ł�:o'���+FH���S|:�����d[|r�B˕f�4�*RAf�W���E�B(�$#n+����J�e4�u*��\{Ʌ���b��]ӕ���cc�(¶�S����|3}>��c}���ϗ����ɔ�� �ݝD'�"�k�˂��g������B�,���Vl��j�mÊ��s:�@Dp��Px`U�����Z�u�;t�]~���}�E���p[O���#�x#������;�c�d�j��í�em�raah�H�q��6�}�h�����ķ4l�G�3n��ZK�%OK���n�$�f�<[{nw�����1n�p������W�ԇ���ޡ���O�4��)m���;T���#bi%�H��F�b0����V��Kb�S�ЫL	��G�u(��<�s�����beyAb�/�y�*��o��H���R.CY��h��q�_&�X��)Vi�^���v$�\�%�w�:����!�;%����*o��i�1ݯ9,ݙb����ւ��W�Y�^�#X�r�aw�Z���̕ڲ܏ d��[u�O����PT /�fcߦ�S�Ǡ:��G1 u�ゾd�0�:�f�8�5�o�b�+ˏ��h�����%D���R9��ȷ�y����`��,i�3Kql#P>/�.��<uѰ�5�`-_�0K�����,L�Wv?�(5Bn>�'O_���2��/�+98\�(`�i��j��BlX��ʶ�hծ��K�.׀K
h�'j�e$�^���+��š��st��i�VRJZ���n&0�}kOw4p�O��F��^M`#��!�&m_���.��6,@1qML�\ꁭ
WVs�^g�&@_�O*�1|m�}%�Ť]�ѓ�<}�F�e؆\�e8�jܪi����M���[�f���L[�����oQ5�����/17���N��{<�)⽗��r�A����ޕ��e�����o�k��#f?dÉ��2�@��eb��]�kr?F���кS���������W�z�t%�<��Lr��0�\�N���l^�[�9��r���H4�u�v�D3͙K�+$I�>yj��u���
��}�YJ�ӱ?�\�5����o�ݱ:c�_ki��I�Ⱦ�FK6!j>d����R�g
re��k �7��'�UήE�3�C��'%��Px�������ϳgw�S�Z3�-���m�j��/�E&٢q}U�,/(.��
�q�)����_fPeaN��X�g��|$
�����`�M�9S�o �B��e
baO����3�
��/�~��� �
A�(کS:��gEpq8Ex>��鉘ȼ��<��	�+�k󯳛�V
�
{�=9
��&Ip�V�9���'h�9�^s�]󛾟w��j  N��8�cto��m���N#�5g���!J�F�-��-+�b��~3����T�Ak,�OV�Nz�Ɨc|IW�BUbM1�B��}WJ���j�w�/�Us�Ҽ�0h���Z��(aj�vm� G=!�4��#��'7s�g+{��I<U�=�۳�� �LL�@��&do����u��ξG�(�J��n�hO��,��{FVv�<�S2i�H�=��;�߮qkcs}����{Mpk��w�hۦ����:ln�����[�h�ɍ�y���,f<��^h�u����Uk����t�k��ƇO[+�^opG,��m��B���઺��\�fGh�&%)�]�3앴A�PǪ;�/�!�3������1a�	v�s������6U�^$���ZK5�^)Չq��*V%*V�o�4�247��j��-aUc0 Տ�J�
�<&�9�b�2q/d��ҲLQ+���9~?\��"��s�ܱ,2k�B�E�HX�,�b��蝝E��H"��T��4=nX8�f��$
i�$�tZ�J���b�\*��?E��v ����r��qa߈Y�7՚ĚjML���oMbM9��-,�tѧ~X�FQu`$��"���4l�i�!��ϩ¼�0u�]�O��ͽ�i&����O�Z�wZ�/��E���YI�;`�����'Y�FZ�Ū �J��)�o���ƅ��W�:\t�ɧ�{su�nC�d�W$�涟��IG��o�ķ[g���m���[VFM�Y(�	���k��L%с����G	��,��q���>�颭�-�o�ոB鑟�&��!?�3m4���"#E}ò���w���b�@�ُ��mܪ9rP�z̓�^�<�.¼c�W�����G�M��5i��#��dXv`����~q�3*���qa<c��&TB$�*I���!�g����Q6}9�c��Ν6�~(2e�<Ҕ~�Z���G�\m���������M^�SM��)�&Ӵ���5{فWR>�f�,�
��T-źs��Oh��԰� KD6�Y��ϭB��V_ĉ�K����[{z��#t�YW9�	B�;����y�h�U۞'����t:��s�0��%
b�mُm`-�9��k���ZXkT����q+OD�s� ���W�,�j�bR��}Ø
&��O�
Y!Į9M��G�^3k�g^"f6�۬�x�C�%�8r��b�垾����{������k��E%����������e_�]
���u��h��1}�F�'�\fI_6꤁}7�\\t��z�Z(�B��:^�,�f�˕,�x�n�+�����Bw1���Y��K"h��[�hbw�ᦫl�q+��%�rxI����|���_c�ט��k���x��0�W�G���<����x���#����eQ��O%o�iry��/>e���p�Q�B���Η�M,�0�Fl}�>�nKKb
iR��
ӛ:x�(�M�h�3Q�>�������M��>Z<���K��u�a��1/<~�<����..��<^*����!�d�v�L���t�a�|�O��NN�f\p$1('�bw QY�Z�3D�S,�֞ꭈ�ElJ��y�������#S*L�/@{�����HO�(��s�^�LGݙ�W����[�LN��sE��U���̉):��w�I��>!�;�#SꅧzS_e7�w)ޮqގ�>%W$&�	�m�jd����0���Ϝ~5rϷ���.�dM�p����^�v���ޥz��Y5����
�Y�n�Тq�ƈ��s��,pW9K��U;�)�Oh`�s�࢑Fi�FȊ�*�Q��=u7��v5�X�o�$�㞃����l�~�6N�u;�G�=��su��p;�[(�.���cmF'E)�����H�eL�����y��n������b�UiY`YP��`B���7�j���ĤX]
h�|���L)Ζ1�@����'�]Q�v�h�'�0}��|Mԣ=���
U�npn!_�|�ˈ+��oj7��[�|�p��uZ1�WL��+�b�W[y�����Z�|��}�8t[�i��w���r��"�Z
]k���?�K�L�����Xֻ�����Y��;5�0�6��!�ÆE8/U	�`x���r�It�tV%4<*�<Ih�C�C�N�DH�@�x$��_�]cu��gET�G�15DF��4�my��"'��i o��6����n�T����H�j-RD�'Ꚓ�7=��2oT��5��j�zR4�U�C��}O�jVY�,9��9��?A���k��j��h���ͥg�4D:�sm�CE[�������"�*~�����h|GN[
0a.+��<��m0�r�5��i���A��#���B0,L�fF��Wg#��)f���~?R����z��JN�<G��m���H���$g�3�j(ΉF�Yt*��@�$���'P3�ʏ��"AR�t�a�x���a�I9œ�(��G�[��S9���N��
�I����PA��k�A�������(�>^c��o_T.��(=�_���?�y!"U�Q�z�/�M���l]e�%��`��7|�n��S.�G��U�#ə�2%$��
�6o�$���A=�8i�Y�����(X5|&w"@�ܗGy��
���������
�7���y�������i�t���uz07n�\]���r[�YT%ִ�&io��U��ҏN�����4hs.t���hs�����wp�|�q��8��sIx���hܹ"�+I4�/�Q����86��I�Ө�^���6����o0%���>�D������Y�gIE�c̨���v��d�����N���W�~i`���Ȧ���j0�VpBpu���e�֕Hz5k!�Գ�{�p��Z9�w��>���R[��Ψ�Vpwwu�F"߫��۽[x�@o9��^�5ED
�`���s�|���p�r,?�`�ų�5N>圔���^:��@gQhun�[���[���`��F'|���V��r���N�9�=���Ó%��4���څYʛ%Vբ�u��I�Uv^�M��4�3=�'�+�F������Tm�xt��	p�������֏�%bz/rq��YE0S��$��5=��x��b�}K�/�8�}db�t�83`G��W2�Y}�!���5ҽ��� ��e�A��zY����W��G�n�3��~�dtn8�b�5.���(�y��s;�ƈF�*�N�
�v[�� �Xvu匇``&u���6�ls]4���)��Zx1�m��e�b��,��hNX�ނv۞��۶Ai(��|����n�)�]y�L�R��O��*Tn�����#���~6�LxZ��Y�G��%gQZ>g�Vl�&Uބ�j6����Ac�h�mz;�W�jf:J&��D�A+�J��C+X ��|�f��{�S<��KK�^�()d9<Y�i�Nn�pl�O��Ƕ�ie��:u��"��7-I��<ܘ}�`d�69;yP �ub�e�Z�d^a���,�G�잏h�P;'<G�r���8�?��X����N�E�T��x�tn#n�g������P�|�iK�m��%6���pZ��(�����҆�����q�\@��'��
|�cJ���6�LE�d{^x���R��b�+��)�+iXԬ� 	$<�(n���V����W�~M|��k�u\B��M8��A[��_C	Z�+�㴌�%Qb�>���V�9�H�x��������^����=�n��,N���|i)�1�G�?��5S��@��g%{e�qmo�[?���U
�����k=�'Zy���y�v�]̶RNx7#2�;Y�oi$�#[�툏���rzis'/���\O~R�
��L�2[�����Ն���/�ȽE���A'���Qd��%��5�c_�|[�p&���κ����7��[>�v��x��J@�"1N"�R�T1d��wUn�����~]��Ӕ�FG�Ɣ4�A�h`R?%M�<񘊭��?`�I�<�x�c�$|���f����,��ǰt�7�.���s(gyy��9ӥ@D�YVlZ^f]�%��W�Yr�%v��(�o�[W�M�,��}�&�v�3�g1��n_�Ӛ�J��\t�ނ:��4տna�
�Ǔ&K�8�x3��wk�-�����~p�h���/������P����o�k���Qt��+:>�
f8�M�v��ѽ�Ih�i�&���/[�6�c5����uyqpo���>.E�^L��g�J�s�z|���	�0I�V5n����7X�^�$/�5^B��oB���il�w�)��>S�3C�A��D�fC�j��q�d4�.J��>MbY�5��s�1�����5㑈.z�aOxJ��,I���ߜI|�U�Cd��Ra��иO��9tMR���hB~�'��.@�X�kk׆�@���fJ�5�x����4�>摠����?�8-�IY�6�I�<�ZpW=/��L��^�<�AU����-2|4%��V��'Z���q�5�>T'��M��ܳ��DdV���`������f��#i�Ӯ�~:=[Z�?�hk8|c{����y���d3X��M��v�x��HZЯڙ��fKK_�N�e^u4�&��"�����N;����&�S�@>����#��R�#
A��N"���n����^�t�c��gy��!��!�O�)�D������g}��'��?n�LX���+�!����e�+u��L�j��\yE�3��GrM�Xbu?՘��FiCY-��u���i|���A`J�{>��g|�o�<T8�A!�����
!���@zN~�_F���K�Gؐrb8τn3�$�l��D.l�f?��l���R���N��*z���*���A���*ˎ�U����UyЃ�&ı���
m�$��SK=T$�/k����i��;�D�l-��g��Z�f�a��^���8��g�	�T+AI�E�bp�3����i/2
k�5�{�� ;/���@��j�Ln�n�\�Fa�` �M/���m�`w�v��F/}��1Y�z_@6�w
��ٔ0�;s�J��c_��r�-�z�Ւ#(��-_�9
�<�E����a 	B�Q\��H	:�$�"�}|��|ge�u���َUM�1�^RS��4t
�7���=�����'�����5�l)xv&�0����0�$��
}�v1�Ԧw�HHF6��PZ�Dj͈ʦ`2Ksp�~}�B+���q�4��������z��[�pP̽"�A8���À�{�C����^�M�ӿ�;6��A�W�^ٶ��˕�Jɛ�=��<��,��(읹�brC���bd�a�f!ĉ��tƭA��7+"�bey��Ds*$�X�߲�_���'�TJ9s����d�Lׂ+4ݚz�S������.���
��:1FW���5�/��x�E�r��𮥻[WҐ�ڒ�I��$��E�:x�k�9֨,�V�ׂ�9�z�;y��3�Z��[�Q�Fk�N7]�B�i `M�+�q�	_Dz����(pu�i�q?c)ʪ�B��)+qac�mg��=W���dm�J+��O9��|5!��Z��A����MG�
׿h��'J촮�Ѱ��weIr�Fh��5ز[����	|�~�A]
�9m3E�S��Qg�}��!,����\ɔ��\.!�c�?���~���O��_7����Vś��f9�d��3���/Ўj��T�s.������φ��~!��
',��%���*	Y���4�K�۲؈�hwƝŜ�
5�ΓȬϜ��b�_j�Ϟ�����5�\�p_jv�8q���Nr��-���m��s�-��Iݥ���$��~�H,��ΓTּm������u��W��kP�'ďK�ԧ��T~�8�<�8���7ϊ����8������")�H�w��S|�aL#}���3V�fSӌ��a���E�
|s�V�L=�n��
VJ�wړ[0�`�i���P��_s;���O0WgN���:J
��e>h�����	#�6*&Z���JQ��d1�,�ٝ��f��Ш�s��o���"H5���V�V� �t�y�͓�ND��Y蛴\9$�dt��	Q�����]KoI��W��xر�\��*
��Ev���ylJ�߷���U5m{�#��%���]U_��Pⅹ-%�ȴ�Pz�D�H
;�@ܚi_	�j�hq��^��)�W�{�Fpp�)���U� L��]�!��Pi>�����{�`Lu�P���f�r��C�ի3����C��+W�Ke*��@�~N�A�f�q����)
آ��A����K��q�ś��r�������ag\�6$��6�\D��}\��=�8Ԍ�e�xQ�a���aՌ�^�Ȝ}�p�8�6~���ʨ1�(�6��;���2vh(ִ��~���:�E�͚�x��$�㭌��E6���Ҫ�C^�A$({>��WI��@���Pt�B�����5�"����yF�y�/y����ˠI(o���s�r����[z:|�ؾ;|uR+*Z�)l1(��̘�纐�z�H8�đvV��T�H����G�l6�j�O�/���j⸂K߫zQ��kz9d�2!��{w�}I�iOQo-����6f����l=��e<���
繬�+���jڹ�m��>f.���
2/tzl�fQ�����u*�v=�
6U��ݵ��b�����1h./e�\���x��zi��ˎ�0��}=sq��f���)��U��9��]i���;������&mY�X����\�c��`��SϹ�Gn��B�Xs��O9LV�S��d���^j��ʏF���������^V���.
j}�fQ_���i?Z���zK{�lO|,L�!S��1���p7�c�;"�n�L~m�y��?�8�X�X��e��3�E
����b��Cq:�U�
�����z��Rs9��fF>>~�r��&�9
)�'�0��4{%�}+�ŠH.�D�!zrF���+kh�z(�P��VU񈯔AL����]�:�[�l���@Π���8
V�%�<��'(�7k�W�ʧ\�(x�|�sKN�vl'�o��6؂�����{I':<�yt���4�!�S�tNYrﺐ�%��ۤH�0	�dp`T��8E���(^�[;�0�w��2F`'j�Z�QC�{>�W2ij��
�)ƕ-p<A�F�N:a]1J[�i��ʆ�Ֆ�����l_?O�m1�IcSm���(q��3\N���u�Vv�������T� u;��]�_�Nݍ��7.&Ī��ͽ�V�b0w5�&��#�@M��{�X ��M /�h��}��yq��������u8oʸl��ZS�� �t0�%��	�a�ٚ�j�?�D� �	r�=�8ݼ\�K�	C"�8��s�e�,�J0�2%YfrI6����oonL�Z쵨6���Ԉ��Ok����:��F�=�rL���c��ma�H�vZJ�R*A�	fޖo�D	q���1w�x�l��@7~!d��\���wV�;7�c����=�������][O�~�W^�NlG�K�!��.�$D��v�"����ؖ�$�����u��ˌǘD���ў����{uwu�W��6�Rn��fAP����Q����z�m���#����/�o�=a�y���_C�	@���{2�`6���,�﹅t?��זĞW�/2YZ����h��\�^M�o�}��=��I,l�IJP�d͐Y)7|�t��|6��#�����V���/⦂b�JO�]�eGBO�<��)��8���Q�Q� ���B�UFl�����쁯_�q�W�;�R�@u�A�C�G��
!�}f �!�v�ï�Jv-��`l�pIn���U��T�b�w�<�A���zƉΒry��l�<n��Z����0�X(��K�()'1��g����3���H�쪞��냃+����ϊ�[#�h�
f�4�N�ub�c�9WT�H+�&�*,����]�iz5���:�?��Ak�:v�~-]%��+���ӎ�/��!}�z���Ǖ�3�4�
�}�+O���=g7
���đ-`��,w�_���Uɂ����qTB��N��m��d��5�.�n�=���c{�td��$�풰~��$"�I{�MP���ljr���d\e��x�z��d�UL+�ʤ"V����r��#�gE��{<Emy�ȾxGt�H��kDz�IP?y�&հ��_�TFw���-�w�K7A����H��
�]�ɽ8�	g�
jU0;#!
vY�K|hK�%g�%Uu���������z�
Ԇ�dz�tr6.�·؈MV�)ȶ?�>�0);��Ɔ`�+v?�S>J��xH�9��A��Nl��#���ώK-�:t�2Xz����	'�9Dۓ�	{W�|\����] ER��|�w�����n�ãw��>��k�*g
aĤ��Xv�l̛�j�\�#�כ�^�Y8����͡&֕�@[aq�P-[��ճ������e�Zҳ�j��$;u�+�
�C".�&)�릣��<b�_�˟��i��P��&���hћQ���d��}�b�%v���Q|��9�Ą^��B#�VݯQk�9-�_�>وm?+�g�9҆l�[�&�>�ű�<����/��;Y�F�",`��/l7�=���VT���y�^F
��~�pc�ֿd���*ѳ��|�~�~�F^�_ё������jy[Y����%��{�Wi$K��AP3�,����5�2�%�3~�vm>s�� �̼=��"����r
�4.i�0�U�^%�=�t�3xI,�����7�h�\��Ҥ�Ж�Ug�.���bn��	�k^4��]Vmő͖���6�>VEv�Bڡ�hT/�XI-#�T�(q�-�&�A��\e���9p[�D!T��g:��٤cі�T�e�mn�o1�zZ{xX�>�� ��@9�/{��>򍌂D�O:Ҳ��xc�JX5�ff�������to�T���1> 唟��S���,��w1�����,>_���<C�u�sl+Ru \�U|5R3oʹ2��<�M�^�C#�@���.?�������Jc�v�P��L�,�D�ױ��}@��+��V�$�}e��f�72�k���_��0�m�/��gZ8�f;��\�Av�G�pQ
h���uߝ��ϔ���M��1��WG�i{�<V\�Y�_�o��^���;��n�C��Y�PS�?�@=����o�^/��&G�����D�DC�t֩�UM�*��	ia7����n�u��D!�'5�&�m)�M��@:�9�/y����囟�u���z(��u��2�>�o�+NS���
}?.��23����j/�S�XT�&�FeS�L��v��zZ
u2H|�S8�luR�T
��5�-��_�������򫌙]qկ����6n�_��+��V�[\'U�zn0�J�$�WӤ�j��gQ�Cpy<���oF(��Hg��̡�ӎ�cu����ҷ���
�ӷd9�r�K�*~�2S�=��%�x���>�ӑԛ��DN�U�9I�.8#K��CrT���	��g�o�V�q��f��VpR�4o>���Ԏ�M���=wi�|��!�������ɏ��n��Q�x��aO^�����a���17�5�S��T4��dzIv�b�2�p؝����4�x�7V�y+���z����6Ħ��܊#[~�CL��
�<�b�Z��I�X�[�ð&��4�p��4��aI��L\s*f��I��Ґ�AV�' J�T��G��99|��rϏ����9n�����+�k,8A�,۴��/�&'|��4���1�r���x�qP�פ�pN5D_���}��'�DF�WD�*fH��<5�dJ�rS�F�"�7	����t
���5�:EL}g��Г�F��։��qP�>U�������������F�):<��|�s�>5�URl)��:�q�I�(�3R�E�CE�n1DW�|�ա~ٖ�g����YVaѽ-�H4g?��'|�F&M��>�&��9T(�G�gC�9p��P��g��t�q��(]�d#�뫱i_D���\�ڢ��ͱؕFh�����L^#,����Yk�//u����@gVt�en�:[��<$�|@>���E��kt�/7}"�O������[����ˑ�\(�֛�5��1���t�]5�!p8>�]�6�હ�oI[s�]}K���՗_��-�7C��Տj�~�[ԧRnf	�TwQ�b>��OC�.b$'�R�C�*���
�'�	k��r=$����R
Eヵ��.MUf(q��{�ę#�<�\y�M_w��d�^q֭D�H�;�l-�hj�6�Hl��p=��O-�6��$�ͺ0������b0�N�S��H��4�
� P�#
wV��E���"��<?�:Ey� �*�!CyA��S�}�zU�C��J�@Szz�*eű�A_l�5�|&G�r|��ZbKZV�z&-
�H@"w�_Sܶu�e}���/.�<ػ]U-H�]Q�H?����-���G�7S��	!�ӗTMW��������d�%ړ}k�r�|�̬���j�-r����4E"a�x�2��[�V�GƑ�kߑ�Xb�B�M�t�fp$x�q�`2(�0m�IJ�0�Z;��q6��h�?�?�!d�*�-^�hccB���:>!w_K�љLa�:ᶫ&�a'�?'Bg��]�L:y��	�]&c�?���q��i_�g=˄Om�Ԛ��]�(Z����Z���V��ɚ#)T�1
I��lD_����D�{D,]U���f"<��Z"�8���:dB��x0�.��S$����j��n]ގ�~�y�v,��f�s`��^�]��ڤf�{a�?�2
~�_�ݑ�F'��x�4�d�!� ӂ�٨\ک��k^�/(��"z����޽2��n�u��F=
�\���*
��U"��2Kۃ������z��Nδ��i�I V���!W5Mp7xb́ax	�G��bZ9Rn/����$�q'_�ڗ�^���
����}���*0�����X�,���;�7�^�Շ{!uՈ9�:�vA�B�vuK�
��񻽨����E�����2ơ�$O�R��8[�4r0��?@K�x�s6����{��Gg��x���.h��-�:d�~��yw��E������=�dw�.�R�u:��b�P;n�L��[��M��Wm�{�?䓇xK���^��nX0����u~1�]�^^Lɠ��pAj�1�Ht�0�Ed	���G�����BeX���vm���Ĥ7�<�Y��r�5���FZIc�
�)$��^g��	���>�?(0�����1|������=�]%�=A�(HK��b.xw���<놃!�A���8��1?N�_��������A����U>(�crR!3�(o���sAl<��%*t���X�㏓,�~�n��mrK�DG
F�'u�U|�
x!4������~�]�f$��g�/�_6Ly��(uʚBhS��O5ܣ&j�� �ae�}М��ÍZdH��4aQ.������u��I�pMi�a���czJ����N��P����m���Ҷhvi��E`�
��9�2N��fk<�M'5�Dc������E�g�Z$�fºR���P�sW.zkl��ILj?�<X��b�c:�!�_(��bE�
!��HtqD+�N]�����c,�����3�[ص��F�xa�"oݯ��K�o��8���o����~X��l׽���)��H���ն�h���kfiys���hZ�'Xнѫw]'��.B���d��76��mjT>&�|շ�饋�`~l�焚�tzy2_��!�z�W����8��>C�����U��SA��B�}��zѻ��
ae[�O�A�0�tD\��m���1\6�^%瘚��r�q�b��O�,֢��7�F|�6d`���^��[��҉��'�
c�j�9�I�!�j�5��KCP��C�W
���t�rj�9V�ǡj��D"�u��0x�|K���4�=4�?���-�}��(�e����B�|��������Yg�\-;7g����y���3����CPp����q/3�o��V�:��
=�y"�JZ�q"��F��m��b'}��e<DpY@�4���~~��&�:e@�hE�kH��~W9��o�x�+�x^��J�+��x)�&_�3~�1��q1/���Y�W�<�+���Z^W1�Mxl�Q�a�"'�P���#�z2'�?+$ qU����ko9�
��.	
QZ���-�&i�$�$�CE�vr�u�iUT�����{�]o)pHH�w<���\����,�*�3�W��p�ʫJ�Ӟ𜠡���r�1L.��
9#���髫qj�ml̓�A+wړ^�7����a�x�ϛ�3�P_8
~`���x�����Z�,$�������j�E��7l'����.m#n@��2C��=��N�D����]��%3���v),�v�Y�#V�������^j"���SY���8yD�%�/��3V���o��c=�ȥׄ�`ʠ���>z��.e3��|����C_y<����mmoz\��z�wk��fV�eÒ��fv�G�?��nw6U��2x���f8�kn�$����"Z�D����cx����rlCs���d5Qҫ'U�o�Y���h�L^2ݛJ?%���tm���a42̼;,Q_�dι҂�m�!��do��ֽ�udԲ���G}�L�#׈{��c�h88�U�śTQP\�[T����V���!/�DXz��X�L�Cq��C�8��r���U3������{���w,+�iQ�����2�?�x\xS�$�y[e��ݞu4;<����b���+GX�xX��JN��*��A@���bO$"�܀n��y(�h��F��.3$�
��",��[��p;÷N���j��.>�6U|�f�!hQ!U
��d�-�A�}�[���Ђ�,R�z+C��@w%���Uv���!r�7�D�E���
�֘j�`�q�ߪ����=�|eR�3a�C�G?y�
�����~krL['�5	ON����;�Qw�h��i8$�8�i�!��_g�-�`;�>�=-h�1�!^�
JN�~*#��"N�ْj����݆`a�'��:��EI_y��`��&⊰���(���{�Uz'��߿$q�xK�G�=ӭ�$ڪ���eg/�ao�숕<��g/�K v�#5m�9xk{_�y	�	PB�PV2�?;�W�jѹ��j��J�3�5��#��g��k�7��Xse��눖�W�����q3�!���^	qn4�o���8��ϣU�+
���*)3X<E1��������x�SA��D����Ҳ�S
�?sY~�;����	�#��ф�c:1,��c`д
$�ӭ9�U�t�u�1�s%'7q�J�$�nݟ$ 4�50�Y�cR#	coW�J��,�X�jSY��I-�N��M>��	%2�y�lL^?��R@;5��Y�DE6����y4w?E�֧ȑQ�N��|��6\@��?Jp�61�NZ��4�Z�Rt�>L�d����A=�%��oZ�6.��\t����d�$�Ф�.*>�)�W`j�ۜ�{�$߿-s��Y�����
>f��t�KRl�D0�L�CU�h8���,���G�<���9�8X�e�"\�P����`m�3q�
H�I�y�S(�d��e�$O����R���!�C��ah��8S�h�(���P�U�%��ը�Y���^�v֨9��I��a�Վ[?*��7-D�6T��P�,�h�N?��S�������B��r�}�N�W�]�
���S�lY�5��j#ժov�`�L��5u�N=H��K��-�{��1W�kj��>vA�&;HB/�g�����VM��X�VOo&�p8x3�5�+&3�B�qǍ�,q�%ikEx@ԇ�jH|��ު�,O�� 7V�U5n�dՊ�Ŭ���3����^8|��v��?��L�Ɉra�,�,֛O2(���X.�,�xa�钽~AN�n�L�Qrޥ�v�tί)�|L�S�X{��>�m;��p��G��n��,d9)c&��9f�èҋ�d�~�ڛd�1�w2=�ȉ��4��*�N�2'�s���lb�s�=T��E��t�*�����I�_�4��\u,��w����I8��Mʹlƃ_@y���q�z[��}��C�%�8��@����*ԩ��y�f�1�tZ�N�L��:m�p {�O؞���x����}%��C���2/��0U'蓴&ؖ:$����q�(D��%��,����پP�Z����b5a+,AUD�
�8�i]��\P��O?Dd���	�Ʋ�)��ޏ/+�tpu�ƛO�N� 1��<r)�w�Nk9M�eH_^G�,Z
ci�{Z�T"��:N6�8m�3mLLƚSE����+�S��w˯1�c��z��hf:��(+��L���;�>X�ҍ��R;�G�m�=Q�s�
�w�j�e�v�I�(BM�����]GS]��M��ϳ7�ϵ������]�k�0~�?R9���^J�(k��K`	��5� �H�b�~���w�'��1�K����ɲO�O�e^憻�+�v�����od�|Sכ�'�
�(mG��Q!�:.���6����(H��4E4dJ��ry��=�Aә��B��n ��C���^�"�%����:/Q۞\��X�7ಔ�6ĤQ�w�X��
��AXW㐼q�+MҊ-�NER�Gn^���e��	=��㍨��ːP�_��}zܡ��"�2��H�s�� ډ
~�f$>B�AM	9m9;jwg��/.�ـU%����V�Q��k�Bn?6c/�'�A	�!
���k�3�9{����H�Sk�K�^��>w���pᴠ��WɈv��5R��־������|��k�Q����b��/ʹh�N���Y���ܓ��G���K���e��v�*�ܝ=5�z�U����hB�G_I���`�Y5��ܽ.w�,W��~��cV�V���?,;�d�nXTqcQ�L�9���7Lb�J��Z��mo~��j�]�@���J�
�d�Cf^��m˚�fd��[wh�ܕk���s�B���Nv�����%Ze���PXw�g�?"EDw.�����4����(=��޺�b�A������NJ�S�!��-��k�w��xG1���?��^�M��JZ���{^�l�Ҝ�r��R͕��"b�*�kT��4�3й�bHO,�&����Ds��b�C���Z2�� R.�� b9�y�%�������K�,�K�������V��Xя�;H�t���2JB�_�R
�)���U���aA	�/-��9xB���8�ӿ �݁
�S�D��Kg&B}���j*�(���is�V�{�3�[R1�HN=��a;��ijq��6�1Z�m%���X�����}��L�ݝNc��A<x�M���
d��K��r��|��ǘ/c���/�b��$��lq�,c�!ǹ�x���Ӹ�]��Wħ�B�	T1�<�F��,�rk�D6�wn� �d
���p%0ܗ(n�k�fIm�wyI��L ��O�oK���G���g6�" 0	R����p�ޏ���A��T��?m���7e�~��9t�K�3�OtI��g3��94��sK�{�g��W��6<&\a��\�lU����nx�P��Xi��湩N�8�Nw��Ps ��0.��~|����L.��*˼�\���6ɻUkY9.ck�O�i(��:��t
�4ˇ�:E� �-�'��_�_�� �P�	�6�-��Qی7�3M*#�.��Wc���Ƴ+2�����ᅳ�67?��4�I��J�
H]��5�m�kC�Z�Z����aoү4M��]�6�>��ס�A�mQl�`�$i��܅��.0*���L �ݏ5кw��u�:��	����<�:�o��-M��Doh�Q1s���3�BͶ��&�M}H
ϙ2�FY�+�o��+��(G+3+��r�FP��gԎ9��/&�W�h1�*%"k�=P��
��A�]�b� ��G���o�i��j.�:�&�YJ�B�`�=�Ҡo���6pO��o�FOG/h/x�TtE:�HL��Q%߂2ѷpZH��o�,wm0��S�
���V߰�/��m�N��{^i�!�;H����Ǵ�z:D��a1r��U^��$��H}'Lw:��,٥o�=��s��Q�2�5�drJu\��H�ZD���ܶ6���6��Li�]l�{ӄ�'�e����c�L���G�Џ,.��liGC������kvZ��4
)�����]l �g�s��W���A�y�-P�$
��dD��E�hee���:�Tc�6��d
 6��y��%r�q�@/o튿�fYs+��"��H-Oj��Z���__s��J{%R�]z<S9W�U�z�0�B��㱽���Y�zc2J��9�0���J������Ն���|c���88� �w����ҋ�iϾ���;3�&h]�T�ą�T^�Yvt����U��HX����Q�C��S��w�9�j?��:8�g7s�	�C��hLgN��M�MYҰu�yYi����W�P���(&B{��5��1��?�3t�z,�h���E�.�W���c���&�e�r������̎����*2�T�?�OUZm��v�K�S	|��Q�Y>��l���|f�S��]����!.�d�XoƝ��2�����p�aX�<�t
��`���H;��,�EH���#�_�̗2�vx
�1��da>��f	qS��B7��6��K��Nc�.;:��d첳�O��*ů�[T�[�bk�E`�a��SR�3S	u7qéi⠒�8кj��� �^��'�hE�,�5��H4�1UR�1���q0�(��*�&쬺���N���M�O@6��˝vt��“E$sV��z>ހ�=�o�qĂ�$�Na�õ�?d�1���_�|�����C�^�G�8[��@]�
ߜ�N����́�,U��؀�1�K:��D�LI1E�����e�[�)����a��	�/�y���:cEm�6��6`b��3L~�^��
&�B��"���>�����	��A*R�6�3���Ѱ1���c��h�`jJ99z<L��T���M]���w�?8c/�z?���
�Å�"�b�q2�O�۶���ϓ�I�m������Ï�����W��T�8�u�S���A {Pv��P���(�
Zëd���E�.a��`׋:��'Q���(�f(P0���6��*�):كS�a������V�����p�]�'ݽ��@�a�Q+ҋ�h�E@
ʕ�b\.�UW��\~d��B-OA�n]rW8��ie��5h���L��'�o�����-��� dP̋�.�ƥ�o�L~69�7�_݆���=*P�ɠ��"�����v���H�~o�mo���}�fc����AS(��]y��5�!Y-��
ef㞫�)��(��u]m��Q�V���V�
^�������v-��Бu��Y��,��zB}E�z���'Ob=t��W�;�Ո�kM��Bd���\+�Χ�|V�T]R�������[�i�#;9�t���z_D�� �����A���Q��C2�0�M�e�{�q2��r���ݿn�̭,���r&�,���X��c�w5>?�x��#��.�ta�(�n9d~W��$L��q��e�X�v��%�w{i.[���q�V�-B%w�9Ũ����Vg{�o��	�%��n�X���x�X��I�1`�&����u>b���s4���1L/��b䯵V[�������vBj�v�#�����l�Ī�U���BUX�`��hj/��'����)��GCJ�Ҕ����>͈qI��7BLJ���"~��PD����R)��5���o�ud<찮�D@H�?��M�P�y~���=͠�Ij5k�c�B��>�՟���Ր �U�<�� K�-��ӻkl�R
�x/���ST����K�S�|L��P�#b��u�/��PJ�J�r^r��#����q�_�[���U������YA��˻����f��wS���Y~�\� �
J�]���CA��jӰ\�8��)>q䗗Y�O�k�{�&:ZH�X����k��]�����]w���<��Mz��'y��:I�g��J�|��㓉L9LHW3aY�zt�ݵ9#�O�k�ޯ��Yy{%r��`�+�ׅ��&UF���EM�1^���u�	�>�'��,�"�e�O��Jt�bX���ټ����Wx-u/,�]P~�MiDdL�^r�@
�����V�C7]+��<���|&���ՄRN����a���_�AW6�����VH&<*@�b�G�p��+�7�*'SsWjɀ*~6�|告�����-����|N�B���%�����Nx*�.���|��I���~�,���ٝ�j�[6Z��"Kݸ\���Y:�|�]_�X�mS4���]�n�aU\��C��u���2�P|Ÿ��$Ãˌ�F�j�E�T��dzΖxR�_�>��boT��[��PN�OeS\��ʔ$��͟�bʽW����kF�E��m� ]�'�Z�M>��Z���<�OA�]�����u.�b�W��(u ���b�џ��ZBb�`K\���.�`<�R�a`��%�Z��+��Z�
B�����o�!q�r=�ܸ��38�������n�{Q8�v�7�Q����t�����;6;ڬ6� P��V6�B�ƹ�k@;Jh+LU]e����ԐcN���@�jk���kx<�Q>>���ނ="t 0�����ĹQvǃ	��tӆ��H���
vG�V-^��C���`�S���;�Nj��w�]3[1/�/vn%�͋N�w�|�2-aa�M�2��W�,o��,NǓD���<�⺢y82�U�4$�	��,�����N$�h���a�a��'��DX�?�̓���$Oy|X��fk�ٶz�@�s#fŃ�ɂ����/t�U���y�F%$�D�>���/4[c��	�7�#-4��@�1�,����D�;k��:/,��F�PS[�D�,�E���zBY �j_T=A�:�x~B�C7���)����[
��� ^]͘(�_'�7s�	���:O;�-�V<+�pAk�&���#A}��l��n�X)�U���>��Q�쵯��3����cfk��+�bf��|����!v���Ƌ����-��t5ʎ�Ѣ��I�����
"�k�\Ȱ�5�|��H"A�Ί���_�`N1;;,+cF&�H6I���̊�ɧA.���fL,B�9��M@�*żMKM�m��8�X*����=ks�8��+��)S\S�x����Zf*q�M�&3sq.�T.��$��,�DɱV�?t7�)���U�]U���h4@�ѭ
�2��`[|��O^]Z@�v�s@��Jqr�\�A)&Q2��IȃD��m�I	!端��s�ed�w�
��t���:J�'�W'�>d;%/-(�Dۅ8��b�pZH��j��U��p�^���[/2/
]�w�N&�ag] ڦ�ặAh �kFh�g*j��rU^k0/˲�ON��巡rbl�!ȎKM��4���c��M���As��Z�S୼�]�pT����x$��`����a�U��C�`6�J������ܒ��
�w�l>I6�Y�ޓrY�^Oa�r[���6�?�ޙ�S��)�7�����x(R`9�Rs.��8�H�s�|R�H��|���2 ӟf@�����`<����m`�u�-�{����gC��=�	@䑛�F�M���@����|�aC*�p't�X�mpi��*���F?�������pS�wC��"_օ��=޺ �$M>��ԩ�;Q�184��˳d��q��a�G�3�Η/"�E$A���S�'A8huM/�)�����o^d�'���l"�X�$�±E4������z��H�����L�j�ϱ׀R6ٍ�Y�]�L����<�IY��C�S����Z0��� �'i�"��V�*b�^��*Bi��M�U�(�h^}^�莮��'V���w^4��&%�0��$��!��_�wka�m��[��W�3
V�.G���,Oe����W�r���+:™	�Do���z�E���(z�o�
�1Gq�����ʘ�V��v��T�F��{wS���O�o�.�J��l��f�7�w)�=b��l�Gy
������*j�&�����2�9��OsY��y�CI7.�Y���Ï%�oCDX�a܆3�'j"���Y�BP,��w��,�SްI��o�pt��f����V��V��d�C$�t�v{^H�8O�$���罩;�@���^��;��S�e�Vi�	�"S0�wK�<0��,ڕVC,�Tے(����vd�V1�v�����
D�r^cl�	��A�u!�����+����u-�	�^�\�Q��~<�`�H���4?l���j�W�ݽ�\f�g�\;��1��4&�na��Ts�eʾ{�C�G�h@^�Y�Ԧ���V{�
��tg��WϦ�㻶1o��N���9`;��g��X�����wOo�:V�yV�陹�T�:2�+k��>,��Yj��m
X�A	�r�x;l9ǭ4sr��G��ҾN��e�&����	��wV�
7�n��c6> �Z
�]����k���m�����3zʊ`����x�R������<+q�K5<��DGǝ�<m��
�a��h@���)%�XA��XK��a�i�wA���Cd� �6�I��~��w<ڷF�-RCY�
���{F��.ݧ���w2G�
?��I�aV�.��B ��B��_�,�����T�-R�!�o��ҍ�=��b[��Y[�c����׼�am���OӇg
f�XY"��_�iJ�}�%}L
l<��5찧�5��\_�#���O��p�z��
J��#�n?q��a�x��u��M(�����\�_�����H�^=~7|����xF}i̹}��ꜗ?ZeB9����;$�ش�d�l�bfn��W���@6�܋`�/W=Ĩ�b�O����2�o>ۂN�����A�38�9�4,f6ss�os����u1��q�`=� 1dK�mŚZk�u��#�u<Ԥ'B�^��@n�MXx2b<:{��$�,���u��C�o"��
��9�6��v��`��%On�v�3o���ݍ��z!/�̳��a��!�l�n��ռ��G�#��*}Ι`R���.��A��H[%��4�ڡ�a��}%o��C��X��4=��"�{��䑴�c�
�C$Qߤ/��QB���n�M��Ͳ�?�5h��8S�,_�v�ldŒ��\�2T�"��c+N���K�05:#H=६��Qް8�g�$;Q�axDIm@���>r~��;��#� ��v�+�R��z�z6�m2��
�Г�R�!����~�S0��7y�{N;�X�̀��o��EX��G����!���é�F90׽D&|=?R920�bO�H_e׋r>�!{߀�rV��ߐ3�HccA��Y}��|y\�?�|T�F���K_�(N����崘{��дB��`5���Ͱ��c�����6��ӡs�|���'�C��Qz �i.�����r�r3hE ��Rљ�����g�n�Me^
Q|;�O�<=�O����qt:�I+_e���{�Q�/Ņ�-na���㧴HWh%�3�[���@I�$�*�x��;�E���Z���-^bY��^ݢ�G׏a�LMv�i-�˅��j�=�@ז�.�Qo�>8-���>vA�a�P��O���v6J�m�$pgp9^�P2�4�/�t���Lh:��Y�w����-�qa�����sA���Ro�!���b�+4�""���|i��uq%2����!RB�E^�e�ߚ���vIư�!~��A�jȤ�ɆA�i(>o��T�qX���mr
f9x��p�&b�E͠f����EvC�AQ��t2T�s9�^��"	�,S�c�T�İ�g��>���jX�GfDj�cg�9�)�*���|���5�8�n[f|�)�U-�vY�;w+k0�`�B����r$��4NS��C�1֎�4�M�� X�x��U�~Jx��a��ͅ��
�����5W5!Ю`�Єs���I���K*/x�^����+܂�Ө�h���"0�9S�n�5x܃�h��a�i��ҳ�y��ɬ/=WD�1S�&!~��9]%�ZX<���E����/���Їv4���>�����XB�b����5���B� NL�ͱ8�I
ݏ(Ȣ�*$/~d<*j�8T�ޗp�o~7�M��p�_�e�%ʏA�{L7_z#�z�Ran��(�<37��5��Eh��{��b��Xj�)b{�����]f�sMW#�c⣇aZ�tU2�d
��&�ȞE�~'`�w�]9�ذ�w��c`V���X��o�x�	��9	��u~��8�>�99����T�̯G˲��k��	,TÎM(ի;L� �*�B
I:��[��,�ѯ�%�6����tr���ޣ̪��$���j�ِS�9j��'�����K��љ�٢J�f�ʻ��B����u�,k�Gv}�¤݆�t~����2-:�(6�K̸��|Y��?�̾z�6U�����'�B�<_c�����{�[j�	M�fCe/�fYXƎ�*1��zcb�u�h5��Yt�vѵ2t��5�3�p��"݆���,��7�}Q�)��-�c*,/�m�
ĚRVΖQ�t'%5��h��T�-�v����I}�,�7�(V�0�+pMWt�.�|�$?/�z0j��ғs^���e���)sr�����m�1��5�H
�xK�����~U��i�.�5�h�Fx���0�d�y��A���>!C����
~3N��l �ʹnP��6����6�q�C�b�(�Zn���ŧ�����؀��ztz�q���KYg4�WK(0�)��&��ب������uev^�W��=� �����aO��H��$��̢�WT�k�-(��+�m^���G�e�6{'�V�^ݝ�����}e�`.�o2�J���"1���E#��Tfuf�C�1���%��{���-v�R�#,��t���;O.J+	/=t���Z�w謩iU�����Bu�o�Y���A���b��/�'=�=�}5��ok���?���Ӣ�I>_a�N��`j��c��8{�5U#a�Z�Y�Q_����/�W%��#.(�Dȵɦgm4^V�e]��.�_�n
�E�+X.òW���I���?}�(�9�#��@����_���D,�T������3��Y��{�,|.7��tYͫu=�HY�t�3�C�j��
����>`�Y�֌�gY?����PIxeU��T�P���w���IO����|щ/'�F/7�2��|^����bo{�X=��\�I�=�*@���V@�8&�!-<��E��(�'a�nN&��i
�<�c��!�g�|Q�N�T�q�1-/`�&�f`>�F�J��=!'��3�p��t��,/��[ miȼ,G3�-ӵ��l̨�8�Y�\=)��*tE	5"�0�'&s��_��]k���x�����PV���I�3��Pa�`��|�O��n+����:�O2{��}�n�([�a�է`Zp":�F޸���zg��g��Ne�tZ��!1�������}1^�
��t���m=ܵbI Y>�U�f����H���H�zR��8F�Vx���	$:�j��V�yo�]O��$Keb`q������P@p�A��ت��>cn�E=�j�1|"��]�h�6��P@�@�i��<��a�9����ʷ�"Y�wA�dL�X�p����m����on��H�zP^7U�f�]��)�����Ң�
I��7�޿��^3_SL�Z֖��:.�~��b9�^����|��Yc(�|w��݆un�L��M��樀֨u)�^��ԯ�d�R�R�S��rpl1\|X1��S;H���MՂy7t��bG+�AP��'�/_^_?����7��c�.���j)�W��5��Fc���ێU�c���T���n��X�q|��6e冺')�J��"a�,���b�����N1�O�ղ�;�6��a8����*�L���kx_L����p�ҕq2#5ɲ�S�p�.h%�B��p�[*iH7G�F�v7����?8��E�!J��ϷC�R;}�z��h�_�4�rC��+��t�G��N������|���)�l�%H�x�4nEv��҅o	U;�B�k��z��K��Cҙ� !E�1=Z���+!�Fb�ߋT�^Y3�A�CJ'q���_ �\vCNW��B��#U�X�"z�C��MP��9�\���Z$Ӏ��,�0��ڥ\�Q$
�z�j��Ѓ߶�˃��3����*�cȐu!%Y_�J]�Tb|~�G�Lv�y�4#�#V�'���4�}�o�me�����/Ȇ�K[���0c�g��/�1MBTI���k�k\����%"�F|�l6��D�6�I�OS�̍rjj���9�f�Ð��!��x�k�{9-����>�7k$R֌`�Q.�T��PG&��:#:��ً>{����5���5�<��4
�ϛ�ŮTȒ\,&�|�2��SUg�)�0%����.��|�nR��~eh�il,t<*ܴ�D��}<d��)tam����؋ݾ� ��#�(,q�I+�E
�o �R�B.g�=랽7;9�S�+�F�����#��G�z��m*��b�关����ϡ�8g3ݜu&�[���_�I�#�ﵐ$x�"�z������
�(؝��s����I�i�x��us��a��ֶW�ex���[��_������h�(r	Fmߠ�Z�ݔ8�f���Lt;��;*����FE��/����-��x�Y�1�#k���~�����ד��<��3�	*י7����Ј5F��8H�ȵ��z���׉��V̒ڢ���X�b��M�i�gF`Z�5T�A|�{Q��ׂ
�h�}�Ut��
�${4I!!�%*s��`�n��F�H޿^��މc�-EɔR���e��-r�;uZU]s�_�Xi|���QF���x]}V��t�Բ�af��/�@��h�T,�Τ/�7���r�:5���n�`1�1_���ZG-����+
y��@�¤�sQ�|~�H4vC�Lc57̻X#)���r�y38���NCo�a)�Fd�jG�''�Ȝ���ZIK/sR͋'�s覴�!P�֛���_�moЭ?b�!t֨�#v��5����m
�uá-�Mܤ"�]9&&$��Q�P@=��?|S8>�
��A@���PK�<x�b�+�G�˲_�d:�ju��o5�5�s�Ѩ����I������ʠ���
C��`�X��!׮�;u�̓��U�7e
U@��\��? MEڝU���F`f]�4�ON�����S�ˍ8�\�(��j�
�%�/�rv9��::m���
i9��X!��5�a+1��;�@떅�����Ӭ��82�Ӽ�C4��	�p���"Z�W㢮�R25\D^M>��6��LS�#�[<-�I�:��{��r5�2��s�ߚ�&Y�K�W�P�-Z�%쬋i1�uT��d$�ӟT�t,��BQ���ԅ�6��J>��x?9lр��#��Wr�d�Z��:�RVa~���7�b��
�fI��\�2�]���|��K.�U�pG����ƒ�e:�[Lǡ�����q���`2�\�hI%���J���尛�]*����Z�
���PWn;�f�B%yͩ�45�r�Ɋ�����<`�گ�������k�&�C3'���7��ױV�>�b�y~¨G�٧���5����NfR8C����jx������4��CR��f�'�AԀO�8��1�[�ê��D���v�%�z�O��,f����Z��E��(���/��6���)��j����A2�JZ�N@=Sq��X�-C(.��w���`�CYE�$�7��i��,��N {)��8E�Ou'�,b�w�|`�v1���S�[�tx��e��ӌm&���1a�
Y:�b[�Q�iO�89tPȢqz�.��>�,�d����P.ؐ��}?ۢ�V�y	�jm���#�ywĩЬ-��;o)B��V��R��c�U�
aث�F�-n�ud��]��m;��9���V���R-��x�-��Q5$�e������NuZ]Ņ��sY�nve8���by|��a�����;��fXe���t^���Oݺ�
�O=��>�Ε�u����c��:e��e�<��Ȫ{t"D�J�w
!Hҥ���g,���p<�e�1���jn�Xx|���D� ܴ���`�Q���֙�F��Ƣ��Ɉ\����w�!3���ZWղ,jv�
<��#��2"PE�cz���/d��r%���
.t�m��΁�6ɢx�uap����)�1�^/OF����*�~qQ]�[��(��y�lk��]�7���#��b�-#��mP?�C�t�4�̯����{�ѩj\5�'>���3���5.���!+���w�\+�.d۸�PQ������wE��&ݸ��&���&?�v��(�U$�� ��˚���F�Yΰ����ϰ�P
�|�S��J���Lh��Hq�k~�G���� �.�υ��Of�;A�Jm��0�h��>�c��50���U�=p��~��(����y����%�~�j��wA��R��Ln�tߪB�`X�FxVN^�{H"ߩ70�i�^��Q��֏UnJo�2�MI�~]�+vl��ئ�!�n���.
�C�o�GA�N9ށ�5�I;�[���?�x�ݽ��^������U�-���dR�hC�1q��9����!`{LF�S���1h9K���@őq��,L9�[oQYɗ�1�TJ�(=ȸ�*�~��J	sr򀶃#�����+�����/�bC����&��^�G*�,:�v�Vo����@�� 9W3�Ki�˯f�I�.�7U]ٸ����5iٝ+rV�,z^U��T��_����q@~���]���~��ˊm�ɛ�
q�K�n��]���6��*���!��SľLچ�7�Y�f��"2��>��R�n�H�0+�F*��sX��r�`��h�O�R��VQ��ʛi���V���I!��<S�G������Jls��{���2�����l&�u;�pMevK>lI����#�#0��:0'�S5ʡ}���Ww���}QX��U�p��}��m� ��-��̲�޽���J4���A�zb�ؚ��RiC}����%�.���r;�>L���X5���
<��&��z8+O��gEfWօ��Bߜ)>t\!������!���
=���I[dD0>�DQ�H%�%�y��P�?��U�a����E�(����>^^a�M��C��f,H�A�0T1����P�|mG��sG�ץp�A@Ai���.���w�S��{��-!�V��7P)j�K�o�g����^���Փx�Da!�e��*x?�%\�p��Qs���Yf��w)���4���%']�!q(4��,� "�͒���_�m��c�|�x�޶��h�ȃ.P�1�$?��bN��N>JaG�vE��O%�a>��~�����i�݋n��o�߼xy9|���9�`�(bR�o)�� b`5����ͫ����=kWG���+��FZ�؛܍��#����X���`9�4�Y$���#��֫_���=7b��]]�]]��ꪝ�Z�mW������-�"��c���8l�3:FS�����Swx�����͗�ݯ�[憬�����0}�&�ʐΟa�g�=���
X��3������3fv
�$	������huX�`z���os���0g�K���}�#U���K�G���!h_8��8�B*x}�I�b� (Σ�xv@덧�uܻ,0�%q>׭��Eg6B��3ɋR�5�/�z֮�`R,���Nt}��L�M�EI
�J�fs,�ɜh簼mm���f&a�O7n�W`����GUHi�$��:>��>���UD�(��`�q<$��zi����-:[%9��PL��	����]���8���~=+ �_G���t'���	��g㌺hIh�
�H��d���n�w�i�
?g�Ln�[�~/�|�g�x�׹�b�L蹇��J~9
�Ճ�^θ��s�C�P1�b.�����dS��/�*��Ms��=��2�;f��tb��z����I���(c��4�Ń,A�����6��R�������G��֪�S���	�/���=,�?���#z�Dajϔ�Ѝv�r��Kd�'$NdC=/��iw^�J�{���m�A(�>��c��9P�`,���.��pS�!J�p��I���|X:֦����Gu�1^\Š]�z����v��f0�m Ŧ�ش�
��I��?2�t�YJ��Qh���B�	�\�0��W%��b��zMf{�x�\{�I��W6�*hCrw>�G
�B����'Q�y|�<y��˓���_O>��:m^l��M����Ƴ��������_Ʀ,���+��������fN̼:��z���<���~�?:��/�Et�n�P1���<n�^��&'�z���:@����*�9i`{��"�?�
 "T́���Te��J�㚯V�W��]�|��П�����:��'��Ş��ݞ-'͝��7�{�3�k�)�y�� S��-�<1�4��!�N�
4	V��5��,�{�E��(��u�`�yP�ܶ��:���i��Rw'�� Ft+M�����XSk�,�o<n}3�Vq�$[o^>ݕ�F�[�|���d��?j�E:&N�/�
����	(z�g�a����xG���~�_ŋ��=����5�]Ê���2�5�r����͛�������_~��y{��N��գ
zl!l�H�p�a�{���C�6�\��;*V��V�倊�`6
A��:�*!�[�邬�c��a
4�M��ݍS-������0�I�vٳ@[:2��v:�L=���%��8�4��j��Dj��+Ų�$�¡1��A>��|�Cf}��^ޠx� �)�࠭�y�]Rx�_̒4B@���]Zj73q�k���@�N"5�`Ԑ|�[`"�oA��@ࣆo��̥����

ʎ �5�R?����B��}��ֺzeVi�в���5y�y��^́���=�mI`C���3�c�h~f�=����IE�a�l*I��x����Mfb�y!F1E�/�ֱ�b��~���V��A-q�����Oj�b8I��3~U��
ՠ����p��܅>��8I��]��J9%���O����a8�ۮ��} ��0O�V!P��7f����>6a=���_�LJ%#�<������Y�k��
G�C�ϗ\}��B��n��̀�A��P�@��s�#h���F?�~�>o��VUr��ဓT��z��N�Ԭ�%=��*�ȡh1X��d�M"����D��]>�����:�~���Ou�|c;��Ԁ���1x��7@��:�[!�815i8���a���a�';���2���`�CW~�3~:��5^�Ő?��v@0��~��<pL���/CM>Y3A��wNuDHZ�ؙ���O�T��m��(o=4�t
,�S�;9U@�R�&��
�F���S����lf�Rq�wb�!h	�`�Zz�ڛ2	.��nnll�eڪ�+	�gխ�9f-^G��,���-�_�g�7V�~:�X�ӹJ������=\��L%���vsE�)�.�xH�]%ׁ)�ZG�����dz������������o:ۿ�|4��w~�s0x������c˟�T^��$701��ۃng�!�w�u�{0��8���L̀S�-����ۗ��$��-J��K��������=(��A�a�5{�o�W=���Q��+�-��r<FZVy�ӗ���dpιv�k����������=7��e4&R���5/Q�A�%o��[`R/���?ӑ�jh�"�D��<�C�F���f����
?��"�[.�{k8m�Bi4���o�'w5�0H[m�����*�9-�S�-�1l�]ԩ�9��Z|ة�!T���Z��L�8��6��1�g�n��=�nVrKF�q��\c񄾝���F�#�k�L���o`�'�qUC���)�I$�ᖝz����@�T��-Ū�|�->E�w���À)]���)(J٤�C��#���
j�OZ�n���=���]�@�K�WE���1�C�>�u�ʮ�K��d�N��[�$��<R��z�Q���WCұ��&6ϺHI���Y?����p�Z��vn����%��㈮2y��k��O#-�>&镐�2�!Jҿ�	��2+�jUU�,RA��fzu2g]��}5Ѫ�?}�}Ct9GK������ �c"S<�C��U>xʻ�cP{.#�iԣ�wj�oR�G;�&��R�Qz�ً.���4;L������i�zO�'�9Z��4U"��9?
oIAs�HIiVQ�g��"Lc^BdV���W�<�':I��[�Mo6��
�}ʡ7����Zҧn^�U����
-���<���3���j��Jm>e ��
y"~�lT���V+��;*8V��L��6���#٦;)�M\V����h�$� <bcЎ�a���D=�=\���:ؘ[?�{��}b�/��Zu�KF�r�� �i5�{�ܲ���y@f��
@�&S�����O,�N:,�hW�H���'	�u��?C�����0��&\�9(h
�rV63�z�c�5����0wa�N��}<`/`�9��9�%(y�f�Y�_KTWM��^�R=�r�~L'~����}U�G��,7��O����=��J�S��afx����(��<(�Ȍ)�E�K1i����§��8��#T��=�h
B̐�
=��Ō-�:+ZK���1b,�R��Ț�g�4�G'��OZ��#>0���Z������1[N`�{��Í2j�z���:�U��ǪO�0�ebk6�"�&a��@I�7��Y�.����'gGx��Z[tXn�~6���E�v��
vf�.�:Z�^�,15fi����T��Чp�p�P!4��#2IzҒ��Dm��G���kt&��|�H3���e&��:��6PkE3�)��V�j�C�✮r"
�ֆ̟���Q�g��7s�����/c�{�~��;l�ZI&(6�$�G��,!��f�y<�Y����w�ʇ\ƈtgL�|�L��Ǩ9t&)�]<����υ�r�T{EN����eޓ��ӧO�������᩿��֥�R���BJ�.c�ҮR��}E�d�r��`�P�(���<5ǭ���4�aԻ�%��s�4�/ϥ{�;b���~�� ���n�
wS���B�]wi���8�"߿��r7K�nipg�%7�@CY��4
��_�Y��)ރ]�+�ܠ�g��w�u���z�e�w;{{�;ۿ���=�N;�g�G;o�g���Ʀs=A�΁8�k$�5bb�X�a�O��^���z	�h����?��a2E���|�?uc��RӪ ����_7�_\���d,MgA�d��r��?킪5qI��"B�*¼\;�DS%��Th�b��~j��Qw��D��ea<[M�b,]ym�M��kkMcFF�\�z�� �Ԝ��S�J��J2��˱��ޒ�_��ݦJw�V�����Wf�%�ɓ*2Y[�oE:a1��Y�
k�	낮��m�٤�e2�~�	�t�T�YA�(d�"��� Ur�ZՐ�P��+p�g���z����:����+.G�;?.y�yjͤ�6��7�E
x|&KyR�d���G*u٣
'<���>-��^�*��W��
�m˩�"Q�έ& z��;��g�����v�lw����{p6��m���(�X�	FONf>Ǹ����4��T)�bJ<g�
*�\�ʜ��N*�Fl��?/�*z̝뛡Y�|6������:�J�F�>�7�j�Y����.�PGw���%��u�V�d�1�[Z|'g!&��)��8�"L@c��$�}UZ���e��9;�����R���;D�>��
4��S0`R�+����X@�.2ʸ����,��6d�i��Z���2�A�樷�@�,�5�Q�y.i�$�6��,���Ó��斈�S�мC�e�d�Z��<ƀ��R��i2�ȧ�!��U3#��G�9gs{�� ��c%��p9�ed����s�SxZ�a׈��%DRBbcؐ�|�p�.Vi��L�t0���r5n|�k��X(g����^g0��$s_ړ(]�Z�S>���t��.RH�B�)#�+wf�7�L錡7{'8S��s
����P�����>��1�� ���s��q=�fn��
�]K��TIa��|Y�^�CS��wy�|j�å�^F�+��cM��w5�,K��i�B���j�헷��$����B7�b`�#�ؖ�b{ԭ����e�{��d�Ϯ(�$���ؓTJr��n�Q�#�Q������r`�ړ|�[>U��X��[5_���gU�Dx�ph����E|�٢���<��|y��L�7����6O�����<����׷����?�';��Q����]�n�낳廃s?0��px�yh�8�q�4��
���z�D���G1���I�bH]�X(�k���ױ���Q�	e��C�Z��`Φd��l W�Ԑ�ܤ�n�u���6��U�	|n����O�.��v�%�d���0.�w�3�_��Gq0#Ͳj~o����x�a3��Cc��/�H�p&Σ�Mͼ
(y�h�{Y|1� ἹEC����^2�8�K�Cԑ��5�'E��ը���<���^��R`{���d�������/�~���SC�CJ�ua׵:�y��j�,59q�b:1uƓ$\����֜��b\���.J���{;Ƿ�ב�u�\�Q�m���0{�AF�B�߇�4��yȽ�勳��7������Y��/h�M�y<�`��%��(
of&ʢxC�7��>�y�/��x�.S�e��n`��	�������{/�!�G1�"�٘"�x��
]�I�aX�sD�EQ|�]��0�@Fe���^�8��3I&�E�!{4�&Wr�+���6��b�X~���(e�Cdٙ��E�ÌpD�D��v�ߵ�z]��0���A�I<�ß�WG�v2Z���uT�UC[���9ȿ��{�LQ ����
��h>������O�\fd�����SX�x���[��7[p�������0�g���N���2GQ{���O�v���{݄q���=*s��/�7�J\�DDՉ��<���&�_&d˩r��Ͼ��wq+�<����Ɩ\a���:X(��I�	r��L<���Yӻ���&UC�tk��"��ľ��������[V��[���&\�@J�E��@ CV�%�PtVKP�.=Ԥ�������3���C�MB��P{,�Ru/KXN�pF�*�v��&��̉Y\���t�,(�aF�r��9���7���םe؂���	�	,:Q\Q@0F	kv�1��Jj��O%bq��@�<L5��G@� ���w~�e �P���$BE?6=��Hx�V��+�"K�ɯb�<p�<�Ȥpׇ<e�_
��⏔g��.��6�1�m�Ҏ|�A�6��u���*8�eFR�}Q��(�.��l���d�����݃����
��]�[ρB�\<���k����ʍ,j;I���K
Ƅ�S�S��(�
�兄�t�1+�`,�o���+¤d�-
�LP
�K��)��)q;�.�@U���~MR�nA�]l�Rz?2S��s[=�"{q�c�ܧq6����އ�Yo���;���h��`Ov��#�(\U��d+�,�}e�6!3�-F\�7[��<���,́�;��vN��<��5W�TgHt�+�O�ڂ2�>uٮ�]7��3�Wo,�]�2�=�H^�x2A{ە�}�A���+v��p���uy�<$��0��BZL(�_�5���,QZ��9�n8�ș�.���|�v�	�Ъ!0P�RD	=�w���s��Oѷ��i
1��!$SlJ1>HD��q��
r�"��K����59	�b���L#n���"�����7->�Ȉt�Q�f��䮜����?�Q�:o�r�ܷxF�>.-��ԯ�����)a�JR��n��҇>Sh�}��;��
���!��p6U��5�W
c�8>�&f��맮��|n:�w`��Z+����d%>5�B�5`&$��*��4hN�h�\�'�������#���r�;�O8�jx<{����� 	p��Mr������q��c���:��c���y�߸�����Ȼ�,����t�%��7y���ͯ��D��(�(�ú���OQ���7������(	�
�X�bJ���Qx0!s{S�$�j�ą���[P"����:F��u$nl���ͤ�D��M��a��
�5so;�����l���w���b��M�E����B���ԝ���*k13$�Q�t
�@����A���� a�P�rf*�2���m,	9���f�$`���[�ɸ3�T��{bQRbz*h�<r���
�u��A��*ac!�N"$��[���P�
�vp!���	튂3D_1�_�����X�U�\��
���/I�P K��`x�:2�\�C���Q�3D@���10p
�Ҫ�L
�MC�i���Pc���]ms7��_�7���,�e�=8������nR�#k��%��+�U�����˕�:m��Sb-	� @�$��Oش����lQ��:���n�R����Y5��O�N�bW��?�*(���`)u�����K�[/W�hLI%E}�F�ɒmxc^�D9�i�m6
�q>QT���T�j�)}]�h�H-��%Et�Jd}^�~DT�޷�&@!MЬ1
�H_ꂓE���&�YG�b���U�-e��B�ú����F�N֞���҇�6�=��'�5��b���~>�*<��U�K(�xuh��E>�ޭ
g�L��=�tX	W�O��$1�f�$2U���+�?�j�/��"!���:�/C�<�"�%�.�ɏ:��6�ea%�⩠�hL�yH����l3�P����͘u�R�e�u�u��O8�0l���j��3��z�>=:9=:���yzyz��9荪[�Q����6�f��8�9I��
��e�l��7����f�y+�*�w#���Ct^	Eml7�F�Y�k��]QO��
5O.g��-P����B���Y��Y�l�.����QQp��n)�v(�Hu�:�m��M��q��)��Td�زMndKL� s��>�?@炆v�E�ۃ}	,x`~T3x3v�쟾9>���?~9���m��.����H+Ho=�<PH���>�bJ�Pג�<}u�ȣ(�q\�2�J��G�
���A�
���Ç��Ik>��RE��+)r��l�����I���8�h�œ5��q���
n}D�3Q������v��ٷA~V�Ow�7��I/6�����R}���̲!�&����7���g	3�7��×��)<�u#��~�����`����VHX���H�_��r��cT����Or衿h�����㻭���yKU/a+��b=XZr�Q�)��9$]����C����L،��Q�q�/|X�D��Rm��[b㠹�	��Ӯ�Hbkz0�$
����y������V��A.O.%���n^�?�ju�̞�iI��@�$�T0�h��.Ҧ��2�d{�7��������5����!~��Fd���N������#Z��Z�~�?v{����`uw�<��I+��<9y�rq�:�d�(���0�ȡVM��j��NX�C�m������du�fN�C]��6Tz���Z��1��|��B����N�{p��%�o��&{�j��hvħ+���0��[��D�[�\��u@ti�]���_��2,�'6�F-�v�)��ڀi�YI�fo/�wA�y�=יdwU/
{_~����[�:��B�/�ծ�Fצּy�������7��t	Y^���Xӹ[�˼�̡B�����/{]T|���	_��C)�Lwr��}(���bW��>���:��L�o��A���ƌ����MwJ�8�9Y�#x�i��XS��;,UW�$.���	��:���1zp�B��o�+R\m���*5�O�fJ�
��%�hӭc�
˘�^�"܍ ����9m�	�MӠNq�F�}�ȅE~���S�)	�pz�n�1R�N�����X�ϘFn�/�B��
��i<���[�؂�zUWciI)�h����?0g�R�u)))w{f���N�lˋ��6�rx6*`�������'�{�֞�,Yc��m���~�o=L�C���v]��r8K�����|腗���/n��r
����]�?�ɴ���7�!��������k]�z^�v7��N��U�����E�(�?ȳ}�*{_�	A}��/��E���p4�f"������E�@lZ�/�|C<[�8s�\ٓl�-����f�8q���?-��fq*�|<��U�aT6_ѕ�0��10��f��^�n���"�l놹N�/�2�L͂�mV#y|8�g�zg��r~�8�2��ar�|�HӨ.=�b��nF�����
�$���K���<�`")-|}��~�s,�M��P��C=T�[UI�pY8I2^��)VL���������볁w:o�x"��:-�;�i*�WB�T^6S���{�	ť��J��S?�L����>��p��]	��	v>+#�u��?h��Z#`OFkD$���A�ā��������O��� �0��f/jSk�5�)%kV��
~9�{-�o��(�aF��p�{�
x���O)Gx�����YZ�Q��ٵ$НL������že��udž�u��v�"Qt΂��u�Kl�T�l�=��������,���j�&f�����`^ꌻK�`�m�}hmB�ݠ��N7�o��qS��#�oh}<+�2h�'=RѨ�5*_ֺ����j,�㻶&�?��eZ�Fy6��CVDb�~W� ��&��1�XF%�8��:Ӯ9, �x��
���W,0�ٖMeZ��cMY1?�`|��9cLj5���Ak����E�?�M��nY�8O�!���U��s�����ad׋���f����[�YK��u��!^��e�
Ά�j�3�6�H-+c�J�M���mQ\+A��b-��#\�
LFg��d�r�-�Cܘa|N�͗7'm���o,tu��x���Ρp��f�ғ��F���b���7W�����2貑���&���P�̠L�?��
�I�����N]�.-cY�q���̋�i>���j�O�3QF�;�qȦ.{�]�9j����6v�����*"<��;9��y4%� _Y<�|��U(/�s���
'�}�c0˟�A@���2:���.h�+��yS3[1���M難���D9����|��9
k��������o�J>��Y����=�h:�o�
�1�̊Cl��4ڰ� K�W���}�+"�H��Z�B��x6��/��K�T6��7��>g>����bv]�j�2��4@v���T��D<gv�W3����6l��$�����z[����Qn���i�	�O,��D���褺�=���F�p��*�Ot�����ZcX.�a�|RK�!��GùF�2	F�gG�,F�[q������E����1.�-Ԕ9&�kc8�����
�g��E6�χy9;�0��j8o8�Æٯ�x;�X���^�'s�	x`~f�.�,�2]��

�++Jv�E��c�%��@Z�L�k=���Ġy0��o��%mR�����|����2��S�����8���K4�W�h��Z�z��5�Iy�~�2�9`�Jي�JV��U�q[�u��#I�Y1�.`:�_�'D�w��yZ⪽P����F�.et��P����xȍ4���O�	>v�hgJb'kH/�/Z��\�gY"KQq��6m�����]�a2�9��
?�K�.&ɩӄ�B�G4��o(����:1�t�^ڿ�,g�o��|��pe��\G�L���Q
���ddZ��Z_�.�
�����Ӂ.dVRx�W$�c��bl���Fi��9>W4_&�p��8���%N�A�bh�+fc&{�l�Z@��^�a�:+���e5y1(I��+e�D8֒A��k���,M���x�jd��#��Mk�K�ڢ��$F�q�j�VZ��uU��!2�h�+NS�"�2l��oՄ�����g��c�*'e��
�#9�"2,쩑��ĭ���١W�U3�gj�4e�9�1`�n��!�[Ud��6�N��3����k�-c<���^����u�f�NL�(A	�P��L�<��E�d4Q��F?oʉ�Q�<��፼r�kW�{+o���������a���ꉏ��i#�#�������B�;*�5�͎wT:ԇD�##6�ڍ�h���/�|���z4����&$�{���e�oq�<�ڋ;�P�O9~q2��'����#I;��L�>��^��^�v�}+=W��k��������+�a�
L�\��J&�k��Iŋκ��M�xx]yh���{~�#����ߝ���1�{R�rH[�q�xP�c�e�)���-�����*�M����l�V�h5�g�*&q�x`}Q�f��T�B<o�
l��L�.��Z첅���]�;~��,��<;ǾIR ����z���OnS��{U��{�0'붥�����8&��:)�]��$����z��&W��8�p�/�pO]�%�Z"��h3Q�~^�GX1:#l;�l�Z��$7{�4����MO���l.W��jڥ�>�R���V��*�2ި&���&����	�TM�/���bY����=kS����~��Xxy%';{�`ظ6��!�T�e�@�bl���K�߯�!������s��n���jI�V�Ւ�m���δE�2�U��nJ&qt��<!Zׁ�8�<A���LL�QL`�^I\X^�]�a&'5^�h���vFD��l��1��
�H�,H_��X?PBE�D�A�XJ'��X�A�_"�"-�C�J1B��]%ҩ�E<R���S��S��@�29��d~��X��l?�s8?lY)���+����m#�ލi����'��/`�M�L͆��yC��'���?���N�c�D�π�<�~������j�@�P�̬o�IG�D˓H'�6���6��?��˲��"���g�7��j!�:�������K
ף������	��8����+w+����`��
��~z1�����K�M����{dT5+�vQ�?,Ӎ=�"2��Qma�&����Ѻ�;u-�T<�~%"Aq|��4����a���8��j݌0�t�'��-�[�.|P�����2��y���l83��8f��R�)�{ʗ���bB����!�鐷I���p��NЊ�G;:N�_����A�nK���l�GA��˗�ـ��߽"m= ����1^�
���
�}�a���'
���ܼo]_�1�Fv�M�R�Ez��L�:-�<���Y
�i�(�7�_���T�oL��`b�܍ܘ\�������E��k�`b�����IN��: �=�2/`w��`p&�]���	�:��־�^�_^�.5Qj\9p�C��E��t<�]�G��qz�w�G�rc6Νp{y|x~�w�=:>��;9�j���޾*���ّti#{
�Me]�������P,`���f��W�����v�R�m���P�h��{�ۭ5����?�>��_����f4��xU��~h
�O��X>F��d܃L�L��R�*�1�t�����?Z
�J�� 3�{oFt�'��-�yGzr�H��,A�r+�tpe*����<�i�Z����ք��� �s�X�C+��i���fݴ���fJR*����&"!eEy�>[F�}G�aM���׻fD���At��m]c�����w��l��U��;�����4T��E>̦U�)�k�,���N ����`|&6^@�, E�1Evߛq4������G���t	���4��i/����&`/
�2�E�iQ�d�}���,ZXA���,\Xޑx7�)��@g��ll��u<�5#6��v黣�!�h����we��/'�YXm{�Ԣ�q�}k1�{��N{��*Ǩ�N!���nI��J���%;�>A�X�����t&���b���Y�V�?�J�в����W���3�H�<i��RT�LR��F�6_J��Ir��ҫ_o�hQL
G$�-nEV��f��4I
��&��\������$*���-�Zn&'��t
Y�2�����ƆB(d΢�2
鑈�&yXaD
��8�����;��N�//�h<�ĸ�� ��Iq�6��U�ݞJ^��T��Vic�tSʠ;36$Նx���{��BA|5��S��eݓ�ʊU���]q� ��p�2ӓ�N=a-64�3��J�4�/�>�D]/�:��`c�ՙ��KWl�,��=��/�WD�}�5�b�^����м_�C�]�w��zU�V͑�F����{<f�I�]�.��]+C�9'@�:���q�G��Ŭ��S4y�^i>ƶO���MG(�i>�M.�3�WO���	��[5Z.�)8�f��q����cIz�9
�u�,�M�kP�P�#l��[��|E�˪٫��J,��B7�`ѻ���x�O�_�=J��`�5���Ir��
W��VȪ��`6�
�rY������8+��/����N){zQ�xG�\.��nB�˨��o����`���a)�.�g*F�N+�m�1�Lv�֊t�F#S��?s�1�H	2/BEwT��(4'�f�6�8��mߌqkA(��.]��Guhuh}�/���IWi�\����vŌP��QB8�ף[L��/k�ߙLzwu�=�9��3��i�����7���ɇm�/�
�J��
M�����b*�Κ�`�d]�3�>�@s̀PQ��=Iu���	vJ��%
�*���I%���Ɵ��gr_�pC�@zwh]Tl��@3���A|�rK�R`C��hh&��;Ǡ9!ދ@0߁۾'�Ed��	T�&�h�����8����I�Nq���=W5W�B��^7��Y9Gs%���X��)�f�(���ꃁ��{��|� �k\,X�L��U��.$�b��{�S��.>
$�a���L~�	=�h����3���{o	�voô.j�{��W��%WJ i�"~����ei�3��%�>��.�5K��lx���N,̵7���K��I�p
������7;o�go W'cpl)e�b�h<+���$	Pn��N�T���`j��d��4Nq}id�BJ,{k�2���C��Qݭ"z6�=�/gq�0z�;.�!Bq���ntfN��/�lP�[:6~b\.�0{�G	�E�kP_mx7��
x`�P�
\S��R��%���"�]
F�FS0�l'�\�Z�%.��[Z�5FdV_(roi�&��5��a={j�W�Y�qx�
l�"s��Ԯu	��Sߜ���O�a^N�W� �
�!�{é�|)|A�	=J��%�+.E'B�"Y�Ŏ�<=I���"SP|�G�'�,!��
�R�՛q���G��5R0�=k.�z����p�WF�i HW�NJi��2�`zm��W/�*����1��C������ov������*Wvs�x����tn`�<��W�f�l���=����Y�|`�Ȝqoһ�d6Rl�ct��//�.;�:��9�릳�m���[[�_��Ն�.`���7�v��zZ���
 ��|&�P8lZ�(�c�@���,�F�=wە=Ѐr�zN�C� ��/wN:����:'���o�{�m�т��+��e/O)5�<l�A�k��PC���t��o"0��0%�����gY?�=��n������������^[y����z�����{5.�	�7\�J_i�N�Kv�f`Da�y��eM��m�x��o&uh�*�[��1��3tp"\^JrQ���>(�y�#"�	.h��b�?$�z�g�\�N3p��¡��l�ְky2@U�+㮝���ƺ�y�E���	.D�U�B=^�U��$���\y�@�7OG����K�	�tV7����:����5����D�|w*Ԏ�${�X@���I�^���|8P,�i�_���tr<��,ÚY�|3 �K���1�v��>-B8��гЂ�������O�W�ơ��L	Ckл�+1��!��hx���&Ej��=Z!Fja	^M��P,T0�Uqv+��*��JL?%f��'���D����+�����S�R�!�ke�Qy#�� ��U��z�Ur�(u������|
ؖ�S�~����^�cG+���6��w^�WW��V�����s���������?^�c�j�/�	�5�� oo�� ��+�mr]��0/�.��?;�����Q��j*��i��v|A%�Ux�_P
�>����A�GW#ybQEh�%e����EJ �!�З�u�F����.ԑ$�8
+-�T�l��{�rK~���A?@�
�*�`uO(�Y�̐��r(<�#����W�9���X�����e8�������pp�_���}�cqKY��B�SD��J���v�S�����{�(�Pσ	����Ξ�^gô���-�p��'�z6�k�`0�d�n��/!RPnN=���.�#:�=y�i#Z��$*���"�&�
硲sK��,�+�ݪȘ
YJ1�(o��-PUy�S�SN���[5*Or�<�d2�	i˒����3�����vh�4��w��k��|6"��>b��K	��ms��4��@e��,-!����絕��;%t���葴���2��䌘2�?��Y����C��&��"{�(�˜����vOn���GS���{�R衒�|��K@��U<Fӏ�|~%�ݹ�oQ5���	�a�`�/�=7-�6-��۳,ךK>�fMZ�+n�3��
�Tk#��ۯ��MFW2P��l��]��靻���O��6n��xI����6�`9wڻ�; :��
|��y	���.�͊j�eS���m�\�S.�˗o��ݐ!M�=��m%p��+Q�;\����V�ǣ�|��$柲q}�ѫ�ߟ�1�[G�y�fzU�>b�xJV#���er%�{-����ӽ�	�!J ��@��3�RY�S����4�geFH��U�((�����P�0J�@��*�-�5�U��j�˺mf}�\�>]�X��(��t���	�j�c����X���o�D��e��	l/�i�����S����2���m����xj^1Kf(Vb[�b�ʠx�	vPb�UaPUa�?<����Y��|��9dQ���3��l��.�0�G�41>q��#��m�o�$��i�vDQE���l���-�Q�y�����C�7PXHv�3�8h���/�����c{䧙%��ߴ��	�n�<�?[���ƽW.)�d��6��n�
�>ʪ4:�ؕ�=IVe{�)��������$?;ԋ�v6�4������|�@Q�Y[�O��^��k�P\�p���K��@�f��敉����8�W9,4kɝ�s*��Q��e�=�jZ��!�M3�\B�� ,a�`��=�Hd/��M�����hT���nT*zd*���#��t��s��=J����E5��`E��W�#���R�uQ Į�VQ�NGpO��Dy-R^=,;���nn(p8�e�	?k2�5�{ﲽ�IM���|T
x6����m�EEk�+դ�*U�>�*Л*T��*U�9�*yHvonH��e&P� ��l]X�K�U����)���cMOv[_y!q� iQ1�
�nR�%}��)�of�j|�v6��%�og��G����V��n����GKq :�W�y�=Y'I��/Ű�&�Wȭ/�<�å}������_9�~�Mv!J�%�T� ���_<���s�w�i7z��R��h��4�E�x�<��z�����K�<�j�?�E�M�`/�}���:�)4��_,M�s.7a��N�9��'Y?D��<����_̦i���ɣ��d��Yn+je�]�̦q���tc���*i�����G�=NtYS�6nk�r4P�CB���޴� ���T���t�i�'Vr+GN��M6Fυ�r����DVa���oF���9������y�~�3'��h6��Pwd��N��b���S)����*l���(�Sy�������z���ބt�툷M�$��zX���$�:}9�	}�ԁ���M0*4���6�\�J�B�~*�%۫d[���Smoz��=!���;/k�܈�+�*�M�/;
��Tẕ��0 ʻ�
�M�
����S^H)x�M#��1�����~��c�H���@���yw��m��1sS��u�;OqSN�JȐ��BbK>�g�q&v���eoH�EdP��7m��˗�|r
 %�s���yͶ��k/y��mټ�S���In9��"0��$�U���*j�kQ�G����{��C2�p*n:+/D=*y�(8�����A06V�oKa�zٖ���F�YŰ�F��g�J�:ǰ�lZ*s�g�7ٶQ%�Xi����݊U����+��N���*���P�h��>��;-�m���W�x���4���\�o�H�a�f�~4 .r�r0�����3�̑G�T����֗�ΘX	���R�f�>S8fm�D�k�K���'J�Q�)&�����Q#Xk{����~\�ң�u]�T�=�b��`��ax�ۙ�5
.��	���e*�Egv�O��b�?�#����?	O���� �O���I<�TS5�\�থ�.�ʼnf:�q���0�Iɀ�"�|&*k�n���yj�\�������ƥ]e�$�ca���^{G(�g�F�1t���Ez�&�d-�׋����0oD0�>s�z+7�\�a�5"�&���'��Z��ɝ�s2-�����<�q2��On
�x*��C_��*���e��<�ܲ#O"�K�RN<�ly�a�O�yO�ג�4�17��g��{W�\[��$�%��6<b���8�E�;�M���A�[5�n
SM�n����ڛ���ΆD��5��Q�5��i��W�5U��L�2����N�=�}W��o�弧:>$�NjMYS*6!d���o��+��ӝ�T�V��"�z��mڻ��dzՁ�V˯�v�{��3����si<���+��&
�:;��~����l؛�U������{�zz7\��Qg�i6h����GS���k5��T�#T��eoAe�M�z�꣫+-M�#9�1�'u��r������^�.?�Y/r��ystx|�=:�wN�%f��i��랾:�,�N^�n�5ussU�u��:9�9���'ey�g����S�0����h׶oB���w�%��w��,W�L���}����қ_az���I�����cƚ�ؕL7��%�8��a���%�W��Mol
$��@^Ȝ�+R^���Q�5�|�.Z�A}Ȗ�(�h�E_iv��XMt��,AӇV�
�;C�_K��Vn������K���-��&z
��KziA�VLEH��^Yx�>֌���>����5:�i�ʒ����o]0�(�;qP­��V�8�?�JR�P����H�� �mi�%�G
4̭�a_c���	���-�	��\P'��_
�}i;��>�����;s��=����Ԭ�F�b�/k�Sϒ��m^R�5$ٖm��tOHڒlؠL������X��A
*�fm/���)֜z�����W�P�*Y�]:��-Ȓ�a6uה��v��}���¾�	e](��A�E���]mo�8�~�"��0���E W5�����E�pZ9�cm9gI-Z[��o�/�P���u��!�(rH��!5"Ks��wv{	�B��%^��:�l�>U�y��	�25�3�������=�݃��t%�m�9Y3I����e�#^��R�M�I*�o�rs��}��mTJ���Π��s�l��[(Nn~�y$
9ר]=�8+�Lg#\#%�j�������W��,&߭r��>S�ɤZ����g3�Ƹ�j3N�d�u|(�k�tf�2נ�Au]�H��KzF�J�Uj�Q��5����8RK���%X�R	pYla��/��U�<O�h~i�t�7�>�'�g��&�E2�Ȇ�W�]������Cv��ӎ��/�W�;9=h�?57��/rj|*��f87$��<���"ьک\�:�3��*;��ߤV��,Y#�i��l��,E?��ۘr@��L!h�"��88��4d�a��FD�9Tf�P�h��і�nY� �rq���*S�?�`R�C~~{u:��_�'׿܄��۫A@G��%�d�"�4~�m=��N�y�1;�15�Y�ݫ��Q�E^:��q�<h�f@fO�<&g8ދH~�����W�j�=�`�!튪�[|ѕ0PW2t��
�Vyy�.�'w���1�3�-Fx#q�C�{�#��+O汁�Yk�M�au��;R�
 6כ��>�3ux����'
K�ĢP�<
��2���J�?N.o{�W��k��m��ų�=���G6E���<�=L#��j�Paw<}UՃ��;ɜ��(��Z��>�ʅ���.ר�8QK]k�w���ͫq�u�0^���wAk�)�Qj��g<5F&~����ߗ�J��ɉ��f����^;��-@���Djx�����Ɗ��E��i_�.��"w����ݭ�Ӎĥ���X�L��Z�T�j������`�tŌ�T�f�P�f��t�"�g4�0�2
�pJ�k�oC��
$��̳�q�_��H^����x���m��.��<$R�*f�&:.��}�~���6�e�1~��ê8۬9_���@2P8�Զ��wVC=��Ʈ��>fC���|�j)����b��׋�F��t��Y&�.����舮���r<���h�?�9�,�.��F�e�e�-.
�`���"�`V�"�-�'eb��ݥ��m/��-�fAM�����./8���L-�΀h�%�}U�B�!�i�-�E�c��5��t�jZ|��t��/��O}�9�«� <�9�ش@z��,��ˢ�`����H
*�r�E��gl��e�JG'3�l�t��	�2֨�4Hm�v1<�,}+�J�'N�</[P8˶����KK�MK�e�R��Q�.1��O�$�_~�ƌg9$=�C�4Φ��y�M��~����	a�w�o ��%/q3��񻟳l�[V���jY���+}����[D�l{�ij��mp@���#~��0�ߵ�ڶCS���[�ƋEВ'
���e�d��V�-q�'QL���x�:�^�5�g!��VG�
����~��١Sfec�s~7mO�cx��`W�,�ĭ"��]t/�U$9R5ߌ3��1�]ds�js	��\���I`��N�Hrv�x|��1h�֝0��#�{ ������=1���w�!܄>��OH�����/D�!B�F�(���Q�.A,>E�keh�X��"�G(,�����.D�� ���9����,��M�\���Pt�
wYC�9M�M!yFH�(	L���UA�(�~�Y�`��08h�.��NLrajI$+X��W��3CU�R�˕v�3Ҟ4ڝ8�[�1�F.��#���d+�&��Aq��vKS�E+��Փ�%�t�0N���S������Db;��`7\.UU���ؙ��(�wFJ�
rH%�I�-��-��8O;���#�0:-�k5�
�)q�Z�}lۇ��V�f�9Pټ+���ι�=��3B�)\|���}%����⻳�2G��}k��0��\�J�v��.�ZOzr���(@���	�u���BM.�~ѯ��}b�X+��"��]�@?~�5pkY��2C�!�qr�39����:%td�vd�1�]��Lp5��Zr8H�u�b��1�k�]32[<F��zw�yt��-�����L�Ī��Ě)�ۯY��(���m�B���;!�����$a-w�
�M��U�5I}2���C�,��o*d��m���V�
�Q
�@aq����)x5��]�S�!d�'>����/5@�dw��1})ؐM�����Q�U�!�Z2!��?D�!9܌M^E��[�H������ ���ɋ������G/�������:��(�t�;�LX�|#��K � �k �o2��� ��*��;�<s��89�p�@h�U�w�]�l{�L�'Cs�0�͏���

iͦI��\$[��<�]_��m���#4/����J��\�N>���3�ҤxT��(��{]F.�r��$DͶ��?�N%��#<��ͽ<���Bj���&뻃4X`A	�"�!SS(�lj�x�!��I�Mm������Y�T�cT��{��D��J������]o���--PA,I��'�ZN#���IY���b":* 馭��of\Zr|N$8����}�{f��s7�z��>��i�G��!���%P�
�+�T�Z�>������a�7u_Մh���|X�}�au���w{�����F��`���S{���k\��+\Xg�{�����68�{N��C��N�N��w�?w��3�����th!�Y��r-/�~��>�[�f��G��yuB-{9}��8r�r�gsY�PwR�rf����+���Ю�������Xb��3]�}G��۴�'y�+^:��EY͔CwoTl�g���v��M�k��E�2�~�8XVt��(��eV���-��Z+��Ǡ'��ӌ�^CP
㬄^*i7�s���E�*֦����.-�j hxS5٦���ɼ�qe���m�yVkz<��4��c��G�8ǯ�+U�	v�D�ۀ[�pDH���IM`�īa;�@�1���:B�2��
+T�XƯT,�j��d2zC��0b�?���F��4Ϊ��6��OSt�')�S'���t�/���sc��*��Æ95)�����+ZE�nP��8��>~A�'�{�
�a��c����M��C�e�9���ܭ�k�]�d��Ӕ
�Y>Q�(s!�#*��I��q�[%��Z蟘(m�lqXf!��i��5�
�H�X$&��x��}:��	�˭{�(�X��|7L��$�@�'�~��xg�eȃ��q��2�f
����8��q*�I��'(pG�z��,\$n)����Oʶ���պ�U�0f�C�j=��b1
LC2{��ҳ�3��0�Ɖ˝��~�o�~�����~�g3�T���%�žd�`��uL/�}��;ij}��#��5��Y����>M,qo}]������1ܮΔ��&�*�S�Չ0�6��do���GT�na �����|�V��[��5��V4a���Y�"��o�Q���O�7Y����\����)!_�4aH�swش�,b֑�P�d���/j�:�Q2��ġ���h�vT���!�1j���>oaJ��.l\r2(���qB��~�$6e��<ʋ��2�_��V�^�L���7���+�݆���wLW1�&���4EK���)�p)e(!I1��?��D�|�G�+��C�=D:���˪���IԺ`�\=������N�x'�]~%��nޝ\^����8p��4A��:
l�j�"?�NPBP��B�B��څ�<�M����ˋ�i;p�BIC�������|6Ò�4���߼�\^]���๾Z^]o��a
���.�1��<=y�o����_//u��?=���b��;^��Ro�[��������߿S+8�8�T����<�~t��A�s@��4�޼@.b�R8��n0E�J��e'M��ZZ�F963vlZ�|t<�%��h6�a�L�o��ߣ�xt��s�^)��÷�e��H��zd�y��xN~vS�g����)V��g2�a|�j�~]��r�~B{��x�a���a���i��뾱�q@P-�GQ��:��z6B?qD��觢��C��T9]6(`�G��<Vk�Pv�
��S�e`�u�i]�K��#Ĵr�U�B�*�F7�1�3��<Q;��6m����kn7���l���� ����@2E�����a�~o�AͰU��n*�pߺ�Z�����/W���/�:�~�Խ��m��$�(�_�*�X���*U����ʣ����1���\˟�U��Ҹ��A�i���%�|�u��X�aU�Lڻ!����QY����%�٧�Q����3E&t�ca!#?�=�a��k�v��V�A:���ϲ���zx�`���6���ڇ;�>��:�i�?�vՒ�D�Dl�#c��Q������6 ��q$�?\�\����0�*�o�~���EWͧ��)'�Z����;4��z!�� �&�)�݄@g�P��#�]Z>�&���N���Mr��V��#���`���������I�ZLJ��a�D���|���(t8�a@�Æ�̻�b�m���)�(����3�9�
Az�VBG�eR��aY��L6y6i��!�Ӎ8�t��� �ͣ>�k݃���bF��k�l�
��<�z9UeL�*魦 l����WWY�5�N�!"�m��A�Vo:P���Fҟ�aY�}� ���J-�E3�Ej�r%AP�������:0���(j`�{Mkh� )��,���A$�RH���ɴ���Bdc�]�n�0��x���,���=�6�SE��(];��'��}D�^�C��ź�yHQ��E�FO'�_C8l�-{i�%�KB��i'�d&��&��l��N���լ,X
&Y��G��v���bSF:�a��;<Ϻ�7=W��]��������C����5�&�%i<�un.k-�D3�ǤK$[>
%�b)T1t�y4jHE-|er�ŋ\"4��P��@�2�xw�J*��Om<2+W�L�,�ِ�~Y��U~��m��:����́�����[<v��&c�d"?1W��2;��W�,r�C���� �9�n>S�,�i�ݯA�����"��^�PL��#i��&����=	�fw�Yϛ�]��Us{E(:�����$.�Rd�|n��f{ر���)����D�����'L�bh�EL��Ȑ��^�As"�&���\Zo3h�@�N�v[�<v��i�1�
�aSUq�Yl�Z)��N"܆�u�}�7}8+���^y����nW����n��l'2��N�Ô}�0�����g��W���NOa�3\���ɝR�J�ݨ�Z�%�@���Jp>O��~�,�~/�΂��t9��Xu�#~A��&6�{)�l;L��I+��W�?dfbEEх�?�ur��1��@���$��M���q�*�#��#�����P��ާ��9@\8���<�[	������6@l�@�p]���O,
�d�%���{��e�*���o���=�v�6������+�HJ�,	�i��M�<�����ա%�V,��Dɖ���y @�Y�m��'�`0��CD�tz���2���	�1!�L�(�j�&
) ��Q�M�O�i��a7o�>�
�:�0�L��R��r�W�cEeN�CS�r���6���BTmA��	=��|jZ�܉�l����
ۉy�߾���iE:���h�ܓŸ:�O�G�q1m91S'Fդ�]���zb���q����Лb60YV|CX�@��D&[9q
a��.���>S����֣6�0hS��n;�r���3���chHC�9�"��� D��ټhkT��gˇ@N#/?j��%q5�YBi��jbq�¹��s�A�ov!7j�Ow׉��S3�֧�����aB���!�&xY�/������1󑥞=�O���4j}Z�]y�	�}����(�+�mzu?��Q9]
�Z�'+��/��&,�x�W��[�m7�ŲA^V��v5��o|��]��份MM�oxp{�Ư��oYP��.K��~�wD��f�r!��d�AxN��f�ͱ��I�:�"���T`��Ӯ�:��5�:I�`��03��?=�*F;w��(I/̪�'X��0��}���������9���,Q\X[sr�Yl��e���A��Q9��y�cǼ1�V�X ��굸!���U�'lӊ<��r��PB�3e�P�+Z��~��࿖�x-[�l����d#?�F$��F[|�������%���B�_!�Av�7�@�"����ɰ�?Ȩ)~����R�Y�9��Ǚ�]\0F$�B���u&;"��~$�<�mFb
?A$��:��CH�	��<���������k
�Sa���_d
�!�1m��eH9�����n�����n��6�g|�����9�c���"E��1?M��1��R�my.��a%X��Ȱ�,���<�|�����8P���L/-�]���#�"�@��@��wc��L�w����ln\v�y0&l[�M�n�-'#�*�!�]~Q�1W_8��E�,ޒ���F���P�</D�L�K��#��;��BE�����QO/�z�Jp?�����M�/y��nV�K�ZLͅ����#̛Q�/ڈ�
�5�>���Z�Z0�r�j8H~m/�L}9�=��.8�+p,SK\v�iU��sNuR����/�*��t}(�y������Q�C�swl�q�m��;
��n.1���@<7�Vy�󋄣�(e�U�t�L
[y���F�>5k�P����AH}(���sqgk57�[)�
��0�$�G�%Du�5W���h��zn�b�<�V����C1u��yCS�ag�X~��gY��Z�`��o�wg�͞���uX"(ޡ�4?�yP��m]FAc��(��g��/��x�O��)����x:c���\T�lM��HV@�fmj�b�q��D���.C`%��[�@&�p�
iL�z�f��T|�y4h�&�c��w���?ܜ���iWI�),�t�d��݁L݁$��1d#3�UR��GV��G� (��L�T�tK�j�"%X^�1DL��uZ)g�;�M�r���[�o��Z_����Y� ��qTCsV���؝eE���Q��êQ"�Z��c���f���0��E����Z7T�[�;��qvZPq?5G�v�+�� �^�W���f%����(q2�fW�,D����"(}�F��!��)�+�{N���	�^��$�i�D6P#>3��'�Y�Ўؠ���߉AX�D
}��FC��cR�cĪ�x�W�S��={����U2U�Rڥ�K~
�V�)5��!E�F����:�z���n:кB��������Y���~�������E_�N�_uF.T�G����j(�'B�)��##�T�l��ĝa���&��2�N��+�C��+��Z��T�.����ߙ���}$k9�r�����+�(�@wz�Z�&s����{��g�&�9��D���2ft���͐u���2���1��<��{U�Gf�c����l��h�TW^��Klώ�0;�|v���Ռ���2��b�
�$�G�)")/�Z\�.��{2xr����T����:3E�S��]�ص_Ae��;%�����H���C���bm<��c�>��k��ضc��y-6�b���X��xâ^7��K��ҡY0�a1v͸��|V��hY}6���O�mL��:�<��ð0�pf�T�	o
��V�R��
�S1{zB�{
��$�G��s��]ޭt��5ս�0j�޾�u����{A��;q�����$�h5���?5j�����u�Ha�(�r���tg�((��t����?4u{��S+�S��؈�8��B\�K��b'�ōx"�9��[�򉙕K9��7��>�ӷ�\A�~\�̷�s[2ś��Ű��,�R.�k��xE<c�_g�6a�����Գ�_�b*&]dkq"i�H1�b}�uF��8�!3�@�W*
�~��0Йܦ.��M�`"&u��_\ʓ�M��]?�!KVZ����r*6�#�bҀ�������+}7�]�d�
��[_[:y���-�m���ަ��ol�]_����:#
�07|lI!�>��O|������x���J��;O�=D�B����ԹPx����L�*��.s���ax=�^������b˨;�ר���A�@�wb��nDb<��󅷳Q�t��,M�f0�O���ؘ���[��p�ƿ[�kl}��*/���n�o䘷�T�u]�5�������U��v��̺�����*8�d�Q����S�AM޶U߫:�Lg����n��fg����|��d����s!�>�9�љ���V�#�gAt�T[�F��o�wX�ޡn�5�G��x�4D7乜���Ԉz@i�A�dܦ%��u�]�l��-�z��nxs���=B#����ÊЃh���x�l^n�y9���Þ��>�f�S�@��i�]<��裖�6����@�r<�*逦�e�c<�vt�|��X��S�`hr�L�E��,�"����1�s��5XZ�K�Ǝ0j�~�\�2���#����J��V�ZoMw�Zkġ��¥-'aN�&�����6ʈ��(q��չ�v��)5�-��1� 
z�|\��m����U�a%���U������(�2o"{)C^ j��NW�ʡv�z�=҉�� Cc*
=T�%�p&9~�L3�DxB�+B����ʭ���:N'���N��#�VU=ϫF����	Y�u/[>���j ��hm�!<z�#�l���>�ڜ'�э{Z�b�?*^���Ńg%WE�b�h%��b.���y2w 7ꊘ�d��/��#�ӍA?.T3g�A����(��.��d�Z}������.�)��I90)ݦ����t�j��.���Z4�A��������O�(tkh�/�m^:
aOS(܆›�|�z�q��Q�D>VJi��Dy��� �<�7D�5����X��l|e۰mX���5·RF�X�Wt!��2��>�J
�*{��ԁ����.M�j�6�*��[.������W���1��&u2��uف��1P�<:��mf���&E��׾픃��l�".L�6��D^���P�˖�ɶ������!`��gh����&-��~��5�!�
�?��xe���P����C��@��e�/e�W�Soe�_e�p7�:h#�/~�����\��\�ra�r�-"94�;h�m\�Ofɐl�&��Ed3f��n;DӸ�AH�qm�0�~��L{�I�cǐ��*�,�+dh=����r�|�>T`�xO3�h�$'�8��E&�2q��m&�3���u&n2�$�8�e�D��U&�Ѽj_n��+�Ł�p
�4�
E$`@B����lKt!��}�ϕ�>��R�B�A�e��Q��r5��>��[�Ƨ���,lu�X�F��V��0/p�g�y����Z���@��{�{�dK)��2�>�Ģ�lt�Y_���F�6��r0�њ�|��1��J��ڝ��GGX��}�e�Mv�4��6_Ɨ��u�/�C��E���l���Wl�m����XRi����ft��c���a���(�6˓t����3��bvɩu�,�j��)�Y�/ӫ����U�^Ӆ,�߭�;�c�5���l�s�B

�ԯ�eƭ�.���&��5��Zn�5p�n�r�z��@gG����+�x���7�G����AP�߅��~�j�����!��=�bUq��4�H5�D��r<�v����Ԡ%����0�����!�Y��G𶹺7��޼�޼x$Q{����K�4 �pq��!�YmNK���a�K)?-���a-We{�}��Ƚ���[({	i���ǯӱ?D]�.���4t)a��u�0�t��}G6�S�u�K�_DX)K̉/E,��
�|��(ƹ>Da�9c�9b=3��P"z5j�~� l2ԺiL��-U;{��O����cO�R+�d�i?�y�Lkt+��4y��=��{�Z��xPd���Gu�d��Q�m�m����{|���Y������]��t,[^�̄/v�����A-���K˽�W����R���7.�ڗ���\���-c��k�SGql[�m}�Bk��Z{0��n^1�z�����M)�m��T�IJۯQ_��*[fy9zΌ`NھX?�P3��@di��S�jU�0��A*��=a�C�&?�J���_�^A�$Ã=��i�r�\�W��2�NK(Z�$A��cI�)�/ɻl3�`e6���
�SU��� �U�p��i�򕒵p�z9�q`���rNi�U�►�jF�ii�2�jy��_�K䤕�u/
p�Aئ�Cу��]��Zk�]���᪇a��6NT�0j���3ȋx�Sc��������$]�+�uV����?38u����|:z��>�*;� �����.�d7��R;�;�S�t���)�}q�I�f��O���8*?���=`�I	z�%��&c-�uV�"XLO�;wA^�c�~W�+TRWc��{��6��Z��޾<�#9q�>վ�*Ss�0�M�i6�K(#�+\�}�S�9�jެ�W�1��fʕr�$��i�I�е�m3_�J�Th*_%�I\1;�E
4"8H��L,�s͉v�_�I��(�w�#��_�}�}���s���n-����y�`E��A��M��2�&k4�|�Id�}���.�r׻<�T lw�UO�F�5ȱ{0��Ak��k�:���\�������kt ��)IG�V��
���Ϊ �j�
�4TV5E�M[��\/��ّ�������p_%lCf��R�C��SV}��:��U+�CYߢo��f�?����t؍�]"�[�T�#[v�<��Ǡ^f�mF�R��̿?�P��ӹd^~��8��g�׉��|!��Ԋ�E�QX�}��
q��Ӣ,0��nV��va6&_2������7�μuw�R�W��̈#&D�o�-�:���������:� ��<��e�gS�})���t�	��"�"5e/t�uU�]��1�`��v�<\͐�Ah��`��k�iu��t����1��
[l���7T&Џ��4P��DG�#�^�Q�ԓL�[ck=bJ�P�B�&���E�)��%�4��iC�/�}g�˛Xg��/d�(i�dǓ�6���F�bP����y�U���̀�̂o�]*����{�n��~���}�g��0}�3˶Kk��bn�k)Wx��6�8$�>���Ѹ�
5<)�z��y%�����R�J��BK���|�ކ�����]}W۸�?��]+�8/���e��]^nw���b���a�e<�����Ųhw���h$�����L����\o�6��ɔqW��+�Tx��I��	
:ބ���㬭�d�u�EW�Y�{�g�5�γ�둲�Ifzw'����O0�<b��JU���p�����8gn۹�*���0��Q�U�l�՝�t༜�zr1�-X��D���gw]� ��ۮ_�(��e$��G��a0c!��T5��*b?9��N��ˑ�i�u$�|7��|���0�X���E�����_��<aGڼ�?���NJ}����,�e�G*�	y$3���5�w�A\�[w��N�k����
w���K'foU���n��;��*��| ���u�L������_����_ù��w��[x&-	�uQ�%6�&��>N�M>��)juQk��/�MѨ��/��b���b��G��:%�l��´SUT4��K�R���lX�f�Ԫ���%o�Dkc@��>�Y��B�QQ�0*fSl��Q5�T��&U�.Z�+��:%�p�ڪ�$UK�����@�V��D�(Y��l�d�&���հ�.K\��O��&?����g�z����.ͭ9u�~��\x��'�Z�V�1�3��6�J�yU�K���^�i:[߱:���֧s!'|O9X�\�����@��*���v�W�򯃁�q\/���Di��B_2��� 8�Txߴ�u���ܕ8�\�?bwy�L~�H\��5��)����N�Xg�3v�0���a�e�w�ׂJp��SUBT�5��*lF����J���)�ETZ����Q(�x@:G%�2I'B~�?͉6����^�y������n��A�x]��5P*�����;��	}����wᎸ	G�)z�).0��ʼn�����#_Y���h�j���Y�-"��;q��]�L\��:_��g�)ė���-;��y�P��k�N�n�SP({ �	/�
e���9�[[g$c/ICw�-.�<|fg����ZP�R6�B��+���a�Rۯ�u�ÕpF�;�Y���y�j�
77��'��;n.-_8��Q�|��*(��B�ž+n<"�J�l�,n�흡#�pd��O�TT�ݦ����x�W��ݿ���Ǵ�fZ�TFpΫ
_��P(	��7�_W���>.M�0��w�[k/'Q������o/d4��Z󲨶���r�_n/_Q�-Ei:IB���:��\��4($N�����2��l�&�� ��J��.("Js�u��a_Pv������_�����&s��5d�?�ٗ��
;�&ڸ}4�n�ڰ=זy��~>�8�Gn��Rm��Ν-x[��P@i�:*]�ъn\t���
��>䭵�;���-w��{���u2cz�2��gi6�!��oGGJ_�lTC��
Tr`��z�r��9�C[�wK�`QJwد���܅�.rhC�|i���"��*��f�!ڪ3��r�\����M��H]P�Ul8�(n�D���xB*ꆅ�n���/�����>t4O�;�=VؘIc��8/��C��ȂQ���%}RcH��	
R��6���j�}���}�~f̬<���0�`���dR�¯�\t�…<%��݂��4$E�Pa*���P8@o�#�3
�qe�x�GP��N^9�7uŕ��%m�s�HeC���D����$�%�Niy��>p�J%(�ۑ�(Út	���}���`/�i@Hٻg\�
�q��&[�B�c���	e��\?Sm'��H����SWĔ�c�&�,O��Q��?�H�T�}���i?��p�
��	T�I6�Q��A�����̹:����?A�N\�@��L��<1K$�>���S(���1C�HrPL�!]�}p�3�H�������„����
��Ѥ9�5�(���%���]9e��*&��trH
��RGT�(z�B��e��o��%F���
F@C�$B���T ��֦�R ��F빌f�K��Ɠ,�;�O��$�횉&qly�'���	%�?���$C�L�H��w���I9�����ܱ�˾C)I�ǔ�r�,v%�;d��Qn-4@�o����<d%�o�,w�Pp�T�݂���Q�yq�M�Ő{�����˺�������6@�Y�	s}��_I��ݶ
ix�^��f�d�g{x�+�+{��w˜���vG�%�sZ�F��q��9��<ٱ?���wN�c��&=~���//�vq�Ue��C�q�K|t�*l_�f�2��&��>]hgvE��^���n<<�%s��_�7���Ѕq:Y���H�A{�Ð��e8g~�� z@oK*a�v�qG$I�)ia1�5k�sh�BU���c�1��(�����ndkE�'���и��`� `P�тw��5����3f%��0��ᠫR���R'��kK��7��Κ���S#=ꎑ�%\�Z���UW��5ps!�aR�[*�T�uɸ�	�u�|� �i_��I�c����1kںL���M��qT*!��ϧ�KM��1m�t��^��K��fj��4����yp;%�Q��ZOL�j`8�R��,a�
�3��T���Iŵ�Ĺs�fl}���"9�ɌI�^��@�����8��Zw�C5��+�(�#���+`��,���M:c�U@����-��8'm���$R!,�{��c���`��7޶~e��׉�\��U�v�C�巣��Z��F��D��qrhCty^8 �HH��t��]%�3U*���H#�KE�9�$bB����v(XߤR5WS�S�YSw�u>�E�M��94�GDd�v�l��kQ/�����$��_�")�Q�TNdR�~xK5�
�r=��'�&�
?��٧53��+'B[5�a�m�)ir��@ءMI$R�k\i�6n0ˈy�1��4eIP"zpW�C��߻R�	��]�
%��6����Z��hٚz݇�(��T�.��5���*�rџ�i>����(p�`�U�ר$'��.@m罫��(�d/';��']����P�V_T����ggaC��&���5���)��`�]셤jx��l��݄�I)�d�'X98�a���S�����
�,�
;¾��|�SS?u��P?M�S���:��l�v�����?��'�}����|)�?����e;�5�%���հ"ἔnò��QY&�";6d(.Rq�B��:�*.���ʼnULb�p^��I3���L
V+^�ja�����0IM3x��l��a�2��F�~4-�唣/J��8�r<9��%bs�l�:�@���Jۋ�i^�P�H��]GyʏEȭ��`p�<5�_#�5
��Yy�,�`��I�J�v�+�ԅ@ �k�����
6�n>����gi�����X�t�%��]v^B�e��.F>x�����>�ɟ�}��̓i�G����oXވ0�d�(�dX+����P�/��ٓ��mX3{5���E~;���Y?AE�.h����.W*d�j�ԉ�ڋ<U̽�U|M-6�^vD2�,�Kη^����lk5��)^ig87�f��Ƨ9xe�ϳ��rz�n~����
P�̮M���5�N: P;^�Z��#���C���8�(����tJm�:q�)�\4A�0��.'	�f�e�:3t���
�ھ(�j�Ģ"�S4rh�?Ps��U�}t�ռ��A���L�U|��7���Ua�<c\zs���A�`�wt�������>?�?��1q~X��F�(j�Žz��{�}�;�}��Q�x��!̓�=�)�=?���'ن�Q��ƋX,)Nc;^����e�-�9Ex�}NΫ�ay��������4Ez�5��W�rp\j,H`$�k�f�p�mOO��et�;��Ր�쁏:����Ѱ_��\}x0�Kq"�O���
|��D���c�5���|���m�%:~7:"���~r���V�m��k�$���,�E2C"f:���b����*�1�
�Zj`�h0ct|�@{ξE��y�nŵ�a"�s�g5�?Smi@�rFwT��>���Y���K�ߊ�ǩk5��TA��g2��*�.+�T���#Ō@	,aX�4++*ҟ���Ț�\�m�Ǡ��P�kL�qo@��N�1��h���l��,r��h����e����pt�E#�Y"b���j� |�5N����0IG�]�'_BS�i���V��ċP��EIl��O�- ���W��M֡)C�E��$Jo�(7���
$W^L���V���d��?W�xT�ˆ��b��n.�������DQ��e��@��-�:����U��[�N����K��\yѤ���~�����2��Up�Ʒz�ߋ��hj��l�=j�C����v�����G7� �
��L�R~��]�drL)B�3-V<���R�Ow&��*�w@r�yAT/�C|�G��-����l,��@���Zf�R�%D�d
	E5f8���U�@�ER�����3HP��K�@�(M�n!0ά �8���"ˣ�Q�{Y�T��%�;���s����P�E�)F�S2��,RU(����x�)���{H�ǥl�d�Y���|��z�WBwT�����s�p��F�#̮1�_�%43��h���]a�@��&�}���l���A��wy=K���u���d%F�Ė]��e��mVN����gGE��5��'��l�1r�ce%x��#3���'��kE���k�Y׵����Y`�jmx{;���L���'/d,fdsc:qծ��0�/b���o��~�P�WWոz��O��՛���β��ƪ�6�
^쌷�&Θߟ���y�Ƅ�ޭ�C����`0aG�U�j�(b��0�w'I6�N�:��
��Ϟ]fdz�'��EC�?�o9E��l.��ݾy��?>k�F�)�hvvݽ(�o͐Ϗ���t����;"�KY�tv�a+:b�	f�"D��$��0]��gmz;�3>s}���:��I��IV��J����c�ߔ|�n8�d�T��5�������p���U��-���=v*���X!���ƪ:}+[�^K�Bƪ��p��t��I���s��ǬX����N�,����
*G�#���v�T��8�A������gT��5q*�|.���T!>xԳ�b-P^�~��C���i0�\s8��(F;} Au�9y�}��6>I^�&X�SǂS�����3��Lr�
%��gt'���͈P�%��.�1��#%�ngƾF�f&�T�8�^~:w�-KfZ��ꙧ�{���t���(%�q=�Q#]��9�P�_�P��ډ�K���b�/Q��4`��/�%�GO״�(rV���l����=�S�H���W�
ًp��r�J�ȲG�nY�%lJ��Y����c>z���|ԽzU�j7Ț�������:�VǗ�yZ�h�cc(�\%���g�^��ƒF@G���A�<sF���o����fi_��j�I�K��Ȏ�]UϠ��Ʒ�������=_����>*�/ҼHǷ�����F���b�j��&�;`�`-�nLE�l�H��f���i-ʧj��n�5����~���=�n��sR,�_ aBkc���T
�����<��&{<���^؀��/~����u�ԝD�c�䱡�>�g�Ⱦ,���Ũ�L���OJw������x�����D��heQ�/Y�v7������q�<�=�݀����n���-kq���x=����g!���F�����rÚ�a͒E��d��i����1��x��~�������cֵ�v��$��L��<����M���ni��,�Ӝ�'
)�"��9^o�[�r0�������0z7�خ�3&w��Tt��_K��_?AV=̙_���"��=�/��r�j4����L�#^�6��*����܆7�P)X^{K� ���!�u��z\"\�m��t�ި�� ���3�wb#�
~m���wX��8���Ezq)��n�3�m]o���	�ݭ�V��$���P�`�U~�8��0hE)����<�~�s�/06Kl����gB��/H�@�n�p{�J���X�oڈ�,�U=Պ
k�
,{l0���KM���Q��B#
o�LN��4�o*0�-F��#U�B�ɷ�7��$��?,]��C_�~G�z��H��}#�4tu�+#:��7��z�����e�}��&κ�X�R�ι�<N�$�f͂��P4�Q	:�.�)�1��Nz-������	)4T��@����k��H���R13<`3������n}��T��~�'�&'`��I��ߍS�8*(3Z�5a�܉�݊
4r�i:sY���TkP�����Jp:�)�J�M���q5��2���S5�ݮn8�M}�^9����&���}u	�ݫ�q�M^<ED�$LU���^X��v�K*VE4Y���e'¹f'N��(?N���Ey��U��-4Y9r ���|�.oƗ5ф������vשdg7k��B'����k�ROpͅ��STѿ�*
�,k�5�{PGi4��q�m<j��⫴_�tD�A��BׁGG�M�5TS�t�5
Nݝ��azV�E��\a_�P�&d�՛�ޫ��7��n�;�o�;%������7�v��`�26B:lg��Vs7u��7�",�v�6l�C�K�.������j����iD+�%���qnJ2TI�+�pU�4�ԕq�-	�<5&v��*�{�4x?{�܋�t�d�vڰ^�ŧ}���Ա��E���<�E��2�0���O�o3�������z��զ�"�'�	mll���i��ڶi��r&��܃�S������D5^[���"&r��D���WiYQw�RMB�iV���V��ե�}D�%��Y"�mM9/F��Z��B�DV.ީ���t}H��%���z�?-_A#����0�.`Q\�Cm&sV/1Pwyq����W;�o������(1�K�E�.���L�ZD7^Z�g짏f�n�����M#�86Mrv
9�*��gG�IS�iU���zkb;zR�w�֊��V~�,�c��s��V�
�����} ���d��Glj�7$��W(oDЦt-3�O�]�~�U�E*�j���P�a4�</`��>��W��AAm��#U��&
Vռ}��lq�T��!�5���yZ�S��3�?�+(~AD��ֺiPFZ�cV����8������=�fឹF/M�,̎F����az����ړ�����__���^[ѿ�dխX�2�9w���4���{�9����V'�>^�K;��)����Rɧ�K/���@spkHc���)�R��w�ޟᵻ���L�#�[��a���7��*L`��mK�n��v���4�,��Y����`{����z-��A�����?���|�i����*�ː���bn)��jUR�U	eW�+��'��9<�<���D'�5�7��Cp:��w�&�g�f&���ti���o���������Cx�.o�.�χ;��[TH"��	1�Ϯ�(U���L�Z2Q����4������HL0���AM0�z����U~]n6�G�x�ո��r��_�%D��:���N0�vޓ�Y!8+w݆j�>�s�X��@������N��q:fNm\g�hi�_IVY
����/�_~R�N���f?.J�o�3�:��ǽ����v/z��B��r��������������][g�X�z�|x�-,<���#|A	��(�qSV�9�	$Q=:v�_�
�_��q�V���N&1ܼ}�I	��a��b�Aa�s�K�(�'R$Ó>'V�Q2<n�NZp*���'�L��9P]��į���v�6vJ��HFø���C,��\S��V�-��bg�)��W�4ⴗ_�l�AZ����h�7��9?ul��@M>p_*����1)X��1�c�
��]?x�s�6)=�ԡ�x=1@=~�Қ9��;
�O�kxO��d`ʻF}c7��Z�`_����^�(��5x�H̨Hnv
Tt��<\fa�1���+�T� �VI-ZE9��[�����/��΋e�����4�n6n�K�I,2�
Fp1�<@��֩a��p��֖Rq$F�iW�zzQh`,�?�=����35I˓'����k������)���(L���w����������`�(J�t���
�(���AU!Q�(�A��o���	�T��,Q�=<oj�ρ�9���ljP'WB?��@�l'x��9�r�P�������#J��I/+s3T��V������l}dVWޙ{��ǞԢWѷv�V�T)q�R,�)ͦ�p+���`����j��<���p����1���ԡ�f���_�xe=�����x���$�JbQq/JʧE�^D���E�Y�Q�0/v���
�:����ԋ��|��KTT�"���yKOJ�k*�k�;�7ͧ�
F`�*R����P�P�i ٖ�lHr��9ݭqW�J�9�x-��S+xGָF+���hD�DL8�(5�uP�J5 S�(c�)!����8NtB��_i�t()��_�%4�BRC���|��𺈇�̛20�9w��,�I�%ae$�D�J�Қ��/6Gו��N2����κ�������U3\�8j6H��f>�m��%����q�g�H�Œ�S�M�uؿ�A�s�w�=��u�v�b~
��v߯Q�$7_u��:�j�����o+i=a�aK}�%&3���E	ԁr(�<�fJ��Csv,r&�ޞ)0���،�=�U�M
H]Y��#����T��jՑ�)�U��0��)3,�R��f^�bP��-,H��?��|A�G�u��$��!�PE���I�s�R
W�))�7I�v��7IauW�J�&�V��
<k�*
	� ��@�N�w�FBo���i'n��+�jJ'��6�
	UkY]��Sr��>Ó8��U�C�=�U}ߔ!/7/��n���Z,���ar�o��|+_�fM72����)�V��@��~L��(>��L�T��c���n��TcrT3�F�1װ�1ӊ�6�����J�q�6�Ʃ��:A���#�ب���9�mn��$D����AU+H�Q�*uY/�#<_�R:��1�6���I4�ٵO��R��=����������N	�a1j.]ڵ���o�&�
�\�ه�k����
��L5#J�x7���A+D�L#�[�]Q�y�W�����,U���--^�]���}�m�Qn�_T/�S�*�#W�H�[uj�J�}у5>)z ������K�*j�F�8��CS*T��Z^	��R	�$��׆�C�RMQK�}H���A�t��u���;ď����I�x�ൔ0�e�h'N��\�-���⢌�r�l����I�v7�a�QL&k/���_=�
#���I���Л����s�)x�B4�9H�\��6������*�ǰ���]RDn߈^Mj��L�A�S�*��v&�7�����")f��n�8ag����4h�w��~�c��Gvg	?X9��v�%��[WVh��Ų�c(/YtAW	�t�2�4��@��&�c����2'��6������(&�}F�����H��V��|vp�g��:�G�̜I��}(C]᣽+�W��c���~��I���-y!��0��Y�r��a*�w0�@'�&���G�������@���k��m��g�*�}Y��S*��V.g�:�e��~h�TS�aj��m��M�LxS��#�c`�|w�O2(�*�eb*7�>�
�]�z9��
L�ܡ���)��R��.ꕢGt��MJ�VZ�ɧ4PB+@p���*�=K��'m�P�`�]~Nq'Ú�UR�L�aGgv	�� E"�0���(���<��yJ��0Q�n2�3���=�OI�f;�@�<9m[1'���oO
U�3r��)Y�-�6<87�'��xJ�P^_��T�j}Lɠ%�Unh��6̙��#�&R�DC�NMB��=Q����:���8�3�t��E~E��"����_ʄ�.�ʟ��elSy��?QGfdN�9Jc�ѠV�:�m��g���o��4G�*���.�Nq>��p表�ǩ�h,�d�Qr5��n���'o��)���Zc�����a2{��T5�(����h�����[��e~���FDGP]�V�&|}L�<��̈�F|q��d۳�X�����u��xdΞ#�J�]�������.LK�?n��v�-�[�������	�&��V{��k���e:`�?��jQO����@�:��>�.�̑5>�U�(�������� v[�f�]bE���]}Ǵ+���&�@!,�>��z��}u&� 
���g���Y�	��>wd�xc]��D:/�J��p|_9�g$���?Vz�%����V��5^�jW�&$U(}�TT�Q�sb3�<\����b�w�&�x<�.� j��6k�)�>|�Q�&_�l�X�㇂4]
�nK�F�tYn]���G�K/��t�˄=���?ul_U��-�����M�S�,�sB��!8�Ȫ��K�ء�Ah7�`�F��xC
ut"A�)65B-�m��^�?�ȯ�txZ�9�>�[��ĝ�̀�^�J�;�Ԯ��ڽ��7ܐ�=L�Tϻ�~���ds?
�0��Eғ�M��c�������U���gװ������l��P��;�Q���~����a3��d�����vBW�h�nNC���&ӚE`�s�'�R܇���\{�mC����f���їf�0V߀#.n'.9�=��ʃ��X�8I��v5��i}���c�J���pOB)��
��h"�ĔF����n��d������f����M��RY.P�|�PZ�䢵_ˢ����->4m>Jm���z��������{�V��u|@
T=��2�mi~]{��*"�R .W��z[V�0���n8�_F�W��tx[�2�b(��3�zDV��B�o?�.H3E���`��If�ۚʩ����[�V�/j�q ���*w�v5�К�p
{�UC�=�#��IQr�z�4����q�e�a~;�a������#{Q��9e-D�:5�>丸�`���G��z������c�R�!G|���X�o'����ur�\��X{���Կ<��a��~�”��|q�u�C;<�|�k:B�Z�c�v����~81��u^���N.N�錞���&ɿ����ș�GF_G��G�g7w5�w�����z$jL情����`��v�1Bʢ;5Dkx�1Rx�䔳�?���@`�~D�+�'�9����/�k1h�����̙}'�Ӆ�@�,�/@�\�����0Ik�,5$<��V�WO�q�WO�«כ[�;o~���{o߽�������㟿�g}�������U���U������de������ߖG�>���s�S�:��z���!HA���+��Z7j�E����'�,n��.�;��66V�%���g�g����g�e�Z�q�/V��a=���i����][s�8�������[�;/�E�U�$S��t�J�;;�S$%Y���%�$��� 	RT�lO�vU�.����x��pJw<�P��7}Aš�.&x:�TY���<�X�s�yQ#�t�Js?O��-X $�XU�>�ã�����}�{ɻệ��'l0p[��e�:�W� l���֪�����"�O��B���>%���[���a�s͒S�L����Ңtu��&��X��zm��0w�~J��*З�M'oh���+�f���U�{�����ˇ���ʅ��Ẵ�@��jT�n�N՜�&H����+kRjd�w�z������O�o�E��}�
X5�����3Yk��gK���]M�E�_��D�\�c2�h�K�!��c�(�.y��Uԥ��M�#�D��$L�$`~���H�8fTU�J�H?~�DKFR�h*B�	�̓a�'��$���(`��Ǿ�Q�	z>� QK@�^`lt^J�=��8�$�x�A���I�2b&�>/�R���	R���KቀaL����\�1_��Ga�>�
!�H�	��+dDQ�)����0y�y�'��K�� �4j�܋B��G�}�$�x��Dm1��d�FXB��q��1�9�b�hK3�$F�u�	;h+A/|���xD/!N=�X�PD�̋���^̀+�>��a��0
�K�K��S
��A��v�D,x�`�Cy@!����At	�fXr���e$0j&!�8��>��F�@�D��X�����W�N�h�2fUr$��4�I�\c�1��p����"��O�9�@K��Ic�ߧ�K�c��kbM����F�u1A�ԣ��PH�=����u�N����'$&��$X�v`Q��1�p2�\�|VC�M�e����u酜
�^����@F�'@.�`���ZN�>�<"�N!�$���("&�$0P�AM \�(�a"9K� ����4-��L��11��$bp�@��ALz0���(!���A%��DR!�&����p+�rtB�2�1�F��C��b]�B(�C>}?��CAc��Ab���`2����zT��	CK0��z�|9�P��,B�
�.�N@M�"Ώ��+�h�I�����
��0�XD�+��8
��� �e
.��% :�i���c��@fB8���hKK\Jr]"�@���A$��G!�WB�P�`j��B"��B�%r+$�Q��P�� ��$��0S��"��4@��6 �т�`��L�t�TE�$@�	,�肠��$G!�F`��/h�0�+���I�bI�W4-"n.�$JD��MBm�P.Ў�u	�Z?"^�Z��l�#�!�)]P�O*B�6�B�s��?pEC`FA�i�����Q�P�EĮP���ـr�PtX��e ���0�$��!`�H�
�.�%�-�؀�D$���Mz�)��$!����!���t/�c��A���p�1!�-Z�(�`.� ��up@$�;`y=2�@ha
�/�T���jI��B�3��&M
��p�X<�F?�D (cR��Ob�A�A�x0�D����{ģ>L#YkZr��8��t
����$ŔaiN!���;A��e����ɼ	x�W"y�MP�,PjZPc�d
s�&D_��H�s��5�
vư�M0P�V �T,4�E�H�'���(�Ĺ��ҹ1�#���vU\�B�����!8��*0���>�Y�Xe���(�z��0�	�*'^��Ģ�l���|�F	��S��P3��Gz��@�V#A�,
��#
҈������hH�<�x��&J�T�? ��y�QaW��	�?�TL5$���N�8"�Ó!W��d.Ʉ%4/�7$E-��Q�ͷ=^J5��:��V�������#�f}R{��e�m�wSL� *��ݑN=pJ, L�"���*����Ӭ�?O*�9Ϧ�hq�����І�ۜ�sJL �D�~�63a�_k�_;�'�?��t�`�|���m*��Z':�`a�
���<{9�]OoZA����Ar�CJ�45i'Mh����rw#)��bB�]����9�Mv�}���N�3Z����_�M�7������y���������1�RX��ĺ��]M��36�=*X���]u�(]�좍E��0Ɏf�4�"�A���dT��e攏Ůƈ�)���Y�J=�G�['���N%3��������p�W{��9�L�K�,N.r�n"�	ѵJ	yVBg|��uD}���q�/| ��R��T�x BwO0<����<���_<��G�����Ș�3WP�{�]�`�P���dq����O��������V%���/��>������H�&�g&�K�VG	jU�\������X�+>`�m����~'o������f��jl}Q#�����
��w��g��Y���c�z�E5ԭ61�����+�s{�~=��a�0�~9����}��ק����7�S����6Z�"FZzs�������]Zl�ۣ��t]\��S��T��xS6���{6l��ߌ�z!�h�{�%ڝ�e~�TBד��&c[@ҁ�F���T�"����d"�}���4����At3���ny�Ȧ�^<'��3l �m�X��]���u�_%�kM��{�(៛���/��>-cϗ��+kAf��������������.]�?��Y��|����R�Z�w�"Uc�;]V��`����T�iUj~���~��Z�T�T�b��T��hO^���W�ҭ-�7���o�u��	����L�iNh�(3	�d�n�P��T�n��g��Rɶ�)�X���^��T( �R�K�o�"!3��'h���n�/TȠ����G_������+ee�8r扃�]5�ȩ��؀�Z>����>5W ���M��t���C8������t��/�ẄZ�a?ֿ�,ƭB�)�r[Ң��47����64��%�v�F�{�ĢB�yDP�%�c�j��=TS��r�f�k�{�f�}�Q�c�.�\��1�>[��������w��&���1Z�
��rS�=^���>a�QR�[ʩrس�ȧ:F��j&�?R�̃��@���3Nmg	���ܨ϶�ˌNV;��Eݼ
@ww�켣���]:�����㻚Pv^Mk��3
%��Zܨ6]��5ˬ,��'���OI�����o�P��)0�:<�vY�؎G�e-�Tå;�5+��Q50�V�T9E�qa|7ˊZ/T�#�*��w��5�����N[��*d�7pƻݕ>xP�5t\0>ØPb�H�Z+N�M��{GV����O�@�����`�j�h�V��e(�1�ʻi�w|�O�R�L��G�'���n�j�lDFU'
����UQ�U�u���Wj�YβJL3¶}�:n�Ś1
fO3+M��bq�������7�Sze�4|����{ʯ�N�����T�.)ߊ�w���Zb7S�m� ��.��׍�(�n�_6�g��{@���s�h�>����CY����@&�'I(3	�����6|�
�x���3:|�?ʯNn�곝9�Q�9�u�Q~��?�V/?_��Z^N�an+�ŭ��;���+s��@Q*�-7
��W+�o<�ж�*�|�b2�GvB:V���H&A�j��Q����~��,�����~ �٧
5�hW'�@�٭S�ݬ��f��_,�����\�^�wԛ�-�U�KK�c��J��e��ݲV��~�모��e7/m��r�{g�ٮ3[���at7�o�S�EF�UN��;*N���L�NL';$����.|�Vn�Ve�Ux1]喝(�xe�6jߟ�Pܚ���5��b��q������"���e*Wp���,��hu��8��vwX��`;�&��u�;�0#��t��[���h�k��d�Y�_QJ��Dk��w�ѫ�t<u:j�-�����!����V��9�V5P�'o4^�r��1(���è��q�������0�7�đS�2:�>(-7�S	o�)��>PE]�9��L>�I����sv�Պ�Q}&��U�_a�Ěi�
�W�j�����[P�`=`��7�o��fk���\�������.�Sng[��󖓥�p��/*��u��>�/��2�`�i���X�MU��:�����[��'2����z^DP��[�?�Rn�Yocȭn����C���ͳ3b�?/o�����G�2��+]����fZ��u�����>�n�"���ߦ����-�:lQ��;�<���v�޼ͮ��;�v�������
����”�o]�=>5=���Ru]�%u�du���gB�g�xw��x�\�>����b`E]�ɍT|�P����J����w[�5ʭ����Y�4j���_>>|��OϞ?}�秇O��~~ސ"�����ם���յ���R��^��9�Ȯ���*O7��O��7�e�Z
Y�V��$�B�,��
��r�f��7���;�:>�s4��PO���v06m�ٵ�J��D�������?%�<���3P{�hpc;���	]�n,���ں��c���L2��lj<��~ei��>�A��q��vB��I�8�j�Y�}��.C�N�����Y�Z��0��(�2]_U��p�ߚ�]W�^J�sEv�Bz�`�Ru���3�]���n��4��{ď��[g�5s�vV�NS��rR�Gvsך�hc���㎙c���p��i3s+3�cW��f�i^b�;'�Nl�67����Z�=T�z�R�;�[=P�^����ܶ\T{2ev�(Wqknq)�蕏&�*�b4��uc��h���;�9��P��m ����7Y(�Q��@9:�y�t`��u:]1��ٌ��7g�o�@!�C��w�}�L����`gZȅp�z�뼣c�35�j��H��&#��g��%Y�'�okp
dqt�?��q#ֺ*���|��J[�*L��*���\��.��V�9
��N���~c�?W]�xJ�j�QiDs���Д[��2rO��~����/��3����:%�e�صsf՝oA3�|��£�O��_?�̝ȓ���eQ=[�'*�/�����T�.�v�:_T6[P�*�B���ę��z�r�5]����ur�CԔ�-7S��H
:-��J�1_�Ü��`k�\�x�%��C=��W}�P#=�~,�{�Q����Uǯ�`<�6e��闑ُ�Z}�
Xr�ރ&Ss��Q?p��l�\M��̹����ak���;���I�m���4iг5l�B�m6qR�z��SR!;{ìoo%	��eR�����y�k�g����o�NG3z\f����+[�����'����W2x�و��5���kh����=9|{����7�_?{ez�A�ٝ�`��?INB�{����5���ɤ6�f���wusKS�v�K�6�[�o���F�a����n]h���p��叿5ؽ�X���x=���i�:�xY嶳~�Y��͹����߶�Z�.\�����91�szr�Q�V��WG����U��|oZ�ڼ�~�L�$foS�˫�z2w����[ӡ�<y���,Y��#��Fݖ��B�;
M�iw���\��t�c�v�7^�=�tu`�Oda� �L_��^�V����/����_�_{��X�&3<�*G�Pǡ�y�(A�&�1��lk̬׿��G�?��̏�p���߯$U��4c}����u�k�%���
|:�a�a/��R����FMsFW]f7]���e�̣�I�̧�i�E��e�{(���|�:7�9�{�m�����ߡ�[��:�h����z��>�a��ޖ1P8��� �i,����ػ��Qsi�s�Q��JW�6����h����h~��2/��K���0���
��B���A�=�p�+������MhC�.3*�F��3�:���\�C�/�G���h�e�v?�K��|�-�B45-��ݹ����MU1Y�T)�Ɋ#���M_s�(ΖH[U�NV�&�U����T�;
5K��p�:��H;s$Ƿ��/�\r/Y�s u��ܾl�V����ks�H�>p�!|c���Kv]wU�fko��q�+�2 ���ql����g�C��_�0�y����{���y���ę����bB���@�&ϗ�d<�
G�V�����7�z���^��1iH~	n]�Y�+i,�B[>U��Ճp�����#R	z�<��~6�Ά�����߬_���*�eவjL�Q:�w]J�D�R�O�p��<O�|�Z~5�`��gX�MV�����kC�ԏ�AA�E/�1;�s�"_�%�V�E�*�r���d���7���E�Fj/��yz�a/��e9�3��
�'���0��=�ΙU����֏l��>�>0~���*���H��D��*� u捊��[��<=��e��U��p�V$J����6������!�,T6����SrX�m�BH3X�c��`�;\y�ς��G���w�7숥X��4On凡�WرV��̵�4(���JY*<���g~J� 
W��H|B�\�ʍ�Qo�-bF�-��}3�bW�->��#V�z�Xl��S�[z�#
�B�.T����[M�h�5A�Z!jMN��۟.���wڊ&2�We��^�S�3*�J5����.fG.�TDZ��<��U�:j�5�ǩ�HS��z��F���!K�([��*����W����b��ecƫ5Rmz���Ѵ�D�ԏ/�#��zT���L�FR��!��A���O����L�\����
Ҵ���/;Q'K���uJjz������4�x1e���e��'�7ʃD��M4=��$;^�J��(:A�:�*�lU��+�P�j[7U�����(1��p~l�w��z�}�B�V�vL׆_xVbM\�
�-+(6>:�6��3u�f��t�:9g􍄙��0?uy����$��vPy�����cCJ���F:��(j6�i���\�s�[�)ǂ��+�P��DQԝ�`F����͗�%{��?�lA�Dx�n�{�Lco�㽞�(�Щ��K�o�:H7<�
�L����.��<�
��w �|�;�\��GT��=\��xw`6/\!���.�$8."{>!�V4� 6.� ǿ�~��H�]�k�T	&᥯;M�(���y-��I�r��U���#�#�N��������i��e�9�UlIe�z�#���(Y���c�R#V\ӊ��f���ES���JXiqď�U<�J�w��q$G�G�A�i�E�Ȉ�(X�P=�͖4Cy����rG�@��:^�_����s$���/~�'z!|Z����?/>�{.�:�l��~��a���\FB�K��.��Վ>��Z'��̇d������@�z]�����tl�2c@+������<
�P�MT�lӮ����G�����.ǭ�ՄhDτ�?��||��4���SQ�E~�tZ(l�
6�F
����&�S��56Q�NV�ˡ��U�.�����h���ֹ��񘜕�i~UL��i�&fMk�6����<J���Q<$��u7S��-�2�Z|�4�u�u^���bM�؇�a��f�ъ}�w�a{_��%�
����P
੪bO���G$�b@������D��+�d��Lg����t�OZ��"�R�����.�r�?�{���L�|]�����3R��f���ctn�*���$<���QyO�L#E�/���h��ҥw|k:a��gd�.˻�t��Q�`@��qB�B_z(X�=��N^���Vf*v���Steq�}��qi���	��4o��v����i��fo��bA���N1Jx4g�)Tq�}���8@-G�m$�Κ��]}�����թ����H8~��vtz�Fo��q�#�6%|}��Es��I���[͌��Rj�\j_xe��ʅg:��Q���#��s�67���цWF!����sfc�d�(9rA���e��V�`�}F3�X��F� ���^t�/��z\Vr�1�L�&[V��l�;��R<����p�N`�Ɍ�6v��T��f-N-/sp�������0M���\���5�̍0'�zAcp��0M��3�5�+�[?wT6pø�gΕ�}�7�Ap�&�NN��M�߀E� �X
W┦	���h���&���3�S�矰��7��*c7����g��Ru#d��d�e�W9�F��
�ޗ�NU�
��:`����}1yz��8����s���3����|���m�@��8�JE�O�~!�*

��d��z�G��.v,*5���BP����p�8��.���w,�����\RWo4�_V�HE軑��ڍ1��콚	v�4& DT�W�'��~=ɷo`ʁ|���H��,Z��S��-8�M���?N�th�`Ҥ5�@4�k��:�@ⷌ�M:�xz�jZ0 "���1S���,#&HۡK�/m�U���0(-c#����$dCF���l�?3)dcp�p,��P8`����c�vc�ڻHq�
��3���R�^}���qiW!3Zx�k����0z���]*+D��'��]gTC�e�dLS��J�N|�&hk�xc6����F^�I���l�#cj�7��)���Q�
-Hl@T���xW�ݛ����̐Zf�
4��Мf\s���)嚋�8�O�'�k�e,��
,L*�(�������z?'��e*�eS����8���VR܊,dt
����M�N�N
�R���؍B���r�J���i��D�:��8$&���—>w��ۆ�S&w1����|��9�
QƆz��
�|gO~Aq]��&t���]�,ك�Ad��}]	�P�3�+Q
��?�.�i�5�W�<28�v��ۏFt&��ht�����>��!`������R�^��n�T�����m��L�Hz�>X~�Bȕ��w���d�i��N��e�c�y���[d��R��Y)#�YJ[�JKJ�.L���+�.�
M�;6�8���mw�x�;���'�ގ�ʡ%'#�i]<��.`2�]�-� �j^«r�G�}u�%o��GZ�4��&�c�{p��4��vt���^z�Z����x�E�f
��;�
�<\�'���v;��!�e�5��"� ���� 3�P[��g�CR����?�C�3K�����*���? ����a�!����6����v7�W6��z�����H#�$��8v�v�M��iɒ�Zr�C�/^�h�#i������AI�X�<􏤐'I]������o��G*��Y��ʊӴ��ݶ̊�H�_V�؇J��hm0}B�2�y�h�B�t���1��f�T��Q%�hcc}��>� �d�`���(,C@�a\�\��P'mˌ:݂_l�o=�Iw񪕪�FK�a����`5#��_U*��
��|>���$����!�.-��
z[�y�����R��+� 
ƕ��|k���%t����{s�~�ѫ�Bխ�pb6��+k!�p��I�C"
0��`s/xR���d��ള'�nh!t/�C�Z���<���}/�!�.-��J��Lf�������@�^J�H
�)
���S�&	l��H�
Ђ�t�Ф#��	ZM�&���(��
ם����p�o�Yy��	),�Ra���1���5��66�9�'"���33��iY�8��+�\QI�y�Z���I��V��*B�p6M���B3^M�i����J�.�B
O�
P�B��w�ԩ~hh]R3дo}78y�ASYI��T�ʿ*��,;���E2���2�<�t���:8<><{���������K1�,��-#����2y=��z�I^Oy=��:���ʔ�kVD�`�W�
��sv~���5�Ky���a��6@^�P��MH!:-{�_��;S5�נ��5�F	C2.�`X9)J;0Euu�DLP]�SxPyK�<PZ��tRR.A����e�Ec��;
m�A~�>h�G�p�ꈡ�G�#�H'�}�N2�W'�-|�b���ɡDW8C#��UL�k����I5}�j��Ś�Z-Q"ڃ��Gi1_�q�����C%�7��L�T�.����]Ԋ.����,�q���(}��jɀ1d�-�<�:�Y,����7��g^�z��
r$]��!z,�n�sZz�R��'&�E���ۋ�����nޔ�n�A�/��I$򺔩U��9�Q��+��Zbخ�dD,��DI-���~n�3�6�RU6�nhw\�����X>^����h̝�� T�kH��QR��I
��ʥ����=x��n�v.���|-սl�2�kq��!���dޡ�Ob;!�V2���Lz&��gt�/+r�pK�L=�X��
-=`5w���û[_tcz �_FOx�pj,�s�=a���T���+�;"��M��G�5e��̰�2(E�i��@tQ��[��D
<�T���#�:���d	(u9r44Q��&�	�r|1��hh�
M����v44������i�wy����C�=
�����v[�;�d_c�}
ݵ�5�
 �>T#�p�!s<�ɥ�q
>�NT�:�&e��?8
��{��P�J�	H
@Sj|e0�R�K�m�&}�ʸ�T�ʴ�L�ʤ�!h�d|Q���cr�W�H$ՑiPM��!%}�������R��:��}��5��?j�2G�J�F���g���YjK��J�"�A]zw��Vuz�}��,v�I��Е�0��9Oj���>�Okɪޖ+9�ϼv���l�T}h'+��Ϊ~랊BoZk���,��u{P�
�~vz~�w`(�1go�_�`�o�tjK���m�|~t��U��`��\�Q�vMIU��9����9ոzz|�
�����4�1���0���́bK����_��S[���g_C�y�=�u��ٛ#7�88<:�?UE_�98x��xpr|� ==�W���l���g�_��?;���ߞS]o�_�|sL�@�#�e�{���Pr�tٔ�*�y�k]杰��U:M6*Q������k�v��a�[���u�M#K�R�M��G�a;
�ƻȴ��#` ҁaD4��.�@�8��]|����q��.R�t��aDL4�)����B�=v��u�j���Qw��Խ�s*�T	ߏ�˨G����E��SXh/zu��Lv9[k��sz�����?�޾1�@ư$� Dl�~�¡�#г�2�ڠ���1 ��U���Btze:�K��5X^���"�x݅$2}
hOX�98�U��4z��G�6�@��O�@�%GՅ	��a�?�?3�j(Uܑ		��z�Ί��xn��tG���H��Mzu\y�\>�#6�1#DzW��f�ngI�p��F�)����80g�,�U��{P���Vj�&J���i�cяP������Gﯓt"����0��0��0G>�b�?�{�4�,��}�C�6��/�'�M��8�pr��@�+��o;0u�@vu5� �ua��U������ �V,:�\��4cPq�PiH'��퓃�9��Z�c�V��n���	�Z
�R���2�e�����jQ8����Oq;���n�ޙ&l�����0��+����C�8�^ĕ˾�W*�|ߚ�e��^��%�Y�&P��Dh$�L$�|F���¬V͐ȼ_N���|d��v�(M��3
1�����l�A(	��A����d�2�,��,9�P
+�D��Ƃ	�n�)Oď��s5bD˗��
�i3�q��<�Ad]�1�Ǟ\�;�^��[r3N���qU���h����;�gPE�!h�j��=��n=�iE���"U�&S\z
��'�2ttr�b��j"�,�I,�Bql,��\MH_D]GFIR�T����V�׶6(jf��s��'�/�v�"n�����
O�t��x�r�Ԩх4K��+=;/�68��Qӈ�(� 2�h莸g̞ۏM�G7d��ê�O��Ѧ��0|իj���
z7q�C�/�21Ȁ����"L�*8�����vċT��'�Q��q�?b�1�)��C��l�G�H[�h�l����kV��APˑJ�&nFBQj��!M"=��	��~;�C7����T�i��OZ3)��X�CkM���BI$)�]ؽ6�����\�r������҅*�|]�5玲�Eh���O�)���S�?�㠇��t� �d<���<�q���J���$BEñX��2v�H���b�ʓ4e�p���)�7��v}o�[o����U5�����'pOq�m��n�e��'7
��&��Z�M�0��\��r$���fqO�D��H��p&}�֐|�!���m�&����Rh
��w�qG���Jс�C�/A�'�\��n���ԧ�%�x�1�A]��L��G1�yz\�̲�Z-�K��o�˝���r�O�N�	�/NOq�$��5%��S*�(\����\�l<^�|�Z�&���xb��[E}�,�.�5)��å�dO�C���9��8�O@邬��\�\k)�B�E�&|~�[Y}�"�-�@��z��2�C�����bs��7ꅳ����!^צ3�	��-��R�`�IK�JUZͣ��
F˛���g�;,Oqק�[Zn�(�S�-MCY����E7e�*}i�U���F�o3�ʜ�?b��`B��Qk�����r`S�Siz�Չ��u�-�z��q\�؝�,EpN.>�zK*s�8M���ֈ�ų�kD�fH-_��O*��3�	Z^'�}����<5>p è$�ŵ�������L�̤}�朘����N#�d1d�0*F�Ӓ�!�^��d����H��� �t�G���a,���0Fw�EL_p�/1��X�aS9��~�A>1���Lò��^�~���gH7���V���T�jCv�L�
ݕ
��ܷ��nj�N���N]^?B���_�.���i|�'��T�)oUaB=h��^˕^
)r������48a;�?�3|쭱�Z_W*������\�����1�I�+Ь5F Nl]?�#d��I���P���IE���S2{�Q���MB�6���wADS$>]�nt��*�~�Z�=����n7Y�0�jU�ƫU��ïl�ʺ��I݉�F�����=�m-H��v)��U|И��e�X���>������Hb�:�Ș���۲&Y'�L6[���Z��b�B����؈!=[wa�j`0]���e��K���|>�imK%���NN7�l�,6"9�SE������V��<)2(�>8%,����$׷�ob �a�~�&9^��7<"i��Ԃ$wDħ�-�IzN0on��mC��B���#��*�L!�qu
ɯ8Ke�*��Nh�$�;s�*nX�S�o�_hbH���Ÿ���u�m���Ǯ��$�U1���[���e�����ˇ�hk�đ�޶9�fIo׍JG*������D�68F�<�D)K�Ҕ��Ƥ�M�#|)�!�nx��C	�&�a���ő�l�↭��Za�^�'�>��ե�0�cneB��Jk�P�/�`Ӫww�<Sb�6�}�<%�·8��w���ζ���9h��y���z��w��vpZb�
��m?�v{ּ��@���Vß}�jp�� �y�0^��^=ʩae<m�!���\��\s�S���6�3Cҩʊ�i%�.C`��jU-І�ӽ|����=*�.T��<��S���a�`��M����ЕϾR����K҄�"�X�F$���C�HP٥Y����:p�-���O����?�9��dD'���P�
+{�XK m@�C�b6P��傲P�&u���W�����r7�W�LO�qs�]I�%S��\�<��I��:��K��-ɉ���rN-7�{Lk�A$��\���������ar�
;Ѥ�W�#w�,�w�l��T��GI/U�NQ/]�L��}if+3��l�2E"���ñ!^7�
R{.kn�g�15��Qn��?5�P�x�*'��2�Z��`�Ϟ<5��lb-D|���~�`�$;k2��h�R^+��h�cO�F�"�b5E�!�r]�ʆ�7�s�j���k+\g(I�RDm�c��"�R��ܽ�[�#��m{�:z���>��FT�.�%��LHZmܭ��ckem#k����2��`v�죗--���ѫ�#�=�wSq�$l#]X�3F�ф3@��4�$�A�d�0!�-6�6�Fl7a5%=ƀ4�}��k�a>H�+V�&�;�ߘg�;�߅2����h���\���Z/=4� &'�.��\
�C߭E ��F�
Q��-����?u��&�-��w2��H<�5�B��K�{q?H?���7ү���~���2� �{�3�¿ʦ�M��eP�C��dx ��7DOI�*A��D_ɨ*Jb�d�
ˍ M��HS\*9V�&~��P\)Y�D�Ɓ�*��XɃ@̠h5s�	"���FC,!$VI\#�(�|m�,�����NEڌ,�c�,��Z��u�/w�y���*W��o��ޅ����&������F54��S!�?�qMꌙ� l�?7ravKm#!5��S0���H9O<��K"�M�C�q\�
��M&�`0��I�u(׎'���]���c�d��q�^�^4x�H��7[��O�{B��=��1�.�#��&Y�zx��&޽�~��
Ɛ����/��9�_�e8�y
��k���)�lek���잿�߭^�
B�Y�"*_�c��IL�T�b&�b!�b%�ōX��؊[q,`k�)'��<'�\Ê{	���2|��Asl,G~Y���c�r�Ǜ\a}���>�Sqk2�M�kԽt׸F� -�)�|�⫾���S���+�o�\Q`%��!%bF&�k��<��@)�9�F��<9V*燇s1��l���č\��J��j����ky��P����܇?:R��$��ӳ���\/�h;	Zːk�٭�r�FA��
7^�<+aր�w�����xz=�Sh��B(�q�t�o����׽�W����Q�w5^
ݫ��r	�Dp��-�1��u	�5�f]L!Ol*2A�m�'v#��z
�ڍ��Sn�ǔ�e郜��D�G�d�%�=m��`�ئ(��|��хh��xo�"O����4aF���v[�:P1�.�����&�cO	�mE^�
ֶ���H7sw|v?�Z��k�f[pzgՠu'�S�"���>#�Ak,�C��x��wn:aی�c�,>�Q{�g���� �i]�#��`t�[�J4ʀ���wZPߩ�O�̏p��J��@��N'C�`���a$f%�H��1�����^9�b!�Q��
�VO�]x�^	��P)_�����_���q�z9z��ss�|����W*h�����e�(u�6�AҒ �<�>6K4:��n�H�=��kX���)�����S9VA��٥w��S'SR�V�6�:�M��
Q��'���4b�TEJ�I2���e�%׉�E�6�\+*�N]
s�$�	ئ�%m3.x����Nj���i���R��4�y:�IK�n�/���=e0|�.*�9o�l?w�_R�������q���<���(�o4�W7k�����ie{OYbJEa9VX��N����4�LD'<�@D�y��k=+r3�y�(���2���TN��nu��[���A�3����e���<P\kMrͥp����໩@��Y���n�y��J}=��)��;�<���'8�2F�S���QG���0��H��M_*J~IO���Lxx�Y�g����s�)��2}�k�,ջ� �@�v��1����Z����,��!M�@.<2)�ҬfS�MJ��My�}$-A3�\��бS��#��up���,�z���MJ��<��C�B��k�L��;��@f�9@)��wlj��^i;o|��4�T2��
�'b�p��{�c���uQ`�~Gr਼H�~�B�����E�[���V�~��K8��������ߏp��D�	NC/&�4ɚvϔ=L%b�ESl5u�>�يT�D���)1W0P�+�J�k%n�X+�Qb�ĭ��j�D�R�ĩ�gh��Ax�)�Ł�p�EZ�B� � ��y�x���+�v/�آ)��i�9�����5K�}
���c�JP�{Z˞ʞֲc9��t��2���\��y�������ŊXO�^
~��EE�Fg��[{�h�Ǿ���r�vx8SИP�K=^�z#��;وN'ꬪ=�L�;8����Z��r@�T�	{�7a_$�{VZ�=���al7��<`��O��Zd��������(p4.|t�[�i?�{��S��s��O��mi�z���>�Tێ�ڸ�V��{�,�+�ʺh[��I�*�z0�c��{Z�@}69�h����pr�ސ]�nӼh=�-L?Mџ��x���V���@��(q$�"j��̌�%t��5h��(�ͱ�KM—���&�@��h��'�Cf{DD:B�Z�-���nɫ�0C�%l��Hs\����k����8���>a�G��ձInJ�Γ/�m)�N��mn�k���ٖB��4��9:́�1����̶ķ���U�8X'���^JNqSaտ�U~��,���@�<���wQ�?-��l��]�Ktf��M�7HzW��@����V9�j`���:cH��>$��Iw�C��_l#[��3'3��@��W���a"K�5~D
�ԗ�o����`�wR�'��Z�*5�2�Z���̈zv=2RĢ��a�[���"O{Q�\�sP
DJ��z�U��{w�~��%'��Oud��w��D�4�{��Ҩ��H��
r,�LKS*�>S�M�^q�F�}��1��?'����[$��U�Hb�~i���0��r%�hZY���>L�TG�5"*MX殶��_��	����*%t4�!�	���)x_��VF*�1{xe�ύl]�b��v����� ��ŎQ��Z���RO&�B��Nc;ˎ��������7�
����&w
�\��>'4��\�����;]��(�YY3?(�f驶�(Mv�r���5�ձ�P|ЖYN��d-aE�&\D���ƧO�Umg��Ӥ;�r�ŋdWj����jY(ckc	'�����n�N=d��<�F;�_˳Su��A�9�+��[ݹ�m��P�m�H�c���L����VIm���w�hߔ�:���a�l8����s m�����3c�^�%EӮ�D�,UL�{��XI��ل�6{��9�:Vz'w���/,�c:��C�va\XW�ʣ��+���]a�A.��jt�Pc~� {%lߪ]�T}�"��<���b0tH�f���`2��q��|j�.��\�ېn�m\T羭��ܺf���z��R¤�}Z�4D]6��1d%Μ���	;�՝���hW*q.���
���y�P�}��� ��x��O���ۖ��d����>�qψ'Ԭu�!z�ݻgv~\�MV�xk0��RO9`��ۺ>����?�sZ�I��J�e���WO��<��nh�F��KH���.����;/o�ysd�?:ӑt<z֪�z�E�V8]�1�Z�qN�x�*�Ft�*�
O�t:+��*�	[�mV4�p�@�U�3?��4���|��3=���9��%�b�D��fi�(�Ce��gmk�Lj�����"�\>�EbSx�	۴�"
i�>}F2�OC+�.w�:�쀑�DA�`�
˳�ټ��ḭ�!�-���<��%�*�!w��r���Opᢡt�^�C��)@�n�2�ˤ���Ka��kUO�.Pz�=I4c�r�.��e�<G�yX$�޲�{-���^�t�Q<���=Y-EB�!�|��H�u�PW����L���=(7��V|�8���s��Qe��5.�_���)<f��ۋl��T0�g>���C3������1�!6�%fá���?�Z�\�G��f�h�B3�,�%/�1��G��L,y�z�P��17�lY�7���=�W�8������}`o.N���(��P�ݏ<?���4	����73�,�q���~�GvkK��4͌di�������F���{�D���JQ=��ײ��Q��]߲����N���r��@$�v����`�2���F�#����y����6�$�̼�E��?���2 ����3,��u~GM����mgT5-�qղͨ��T
�ӹU�o�m�<�r�#�T��;�˃�Nw����E��#_�ځ��
 V	cq,6T�~�<��.�
,o��Ì>7��DX�lr?8��MdԲ�t���E.��*�'/�ՠ>��Q1�u�#<8'��Wt��э��b�╰�}%�V�f�4�/�y��n�}�#��c�y��Û�_g/a!�
�w!}���k�+v��Mv����M���A�,��C�c({e?�Z���`�zν��u��{u���O�5�_x�o�m൲���+�Ľ�^+�{x��^�e��(k�m�:�&�o�u��&�o�E��^$k��"Y�Ëdx�*��u�]�[u�I�����Np�|x��3���P病���D�'ue��IBd���P���a��P2��ހR��n4�������x��Rn���	Q;%b���K�x�w�m��d[x�	��
��-C��66�Y���=���6���� �ۀ"[��xq��j��J-�i����M�<���:kml0<��]�SZ�plk@4s�m�:��n�C?6ס
�����ހ5n�Z
�p�b^s�mb�^����A�zs���)t���t��:��k�o�~�k�o�~[��h�/Xp	̼�%�Zɕ/.�������������ɛ�5�5�5�5y���1<���xV׉�M܇��SQ�LMݥ@�`�V*�Iw7��P�?��{�u��� �T(�6�����8����*}�=�!�_��*��bw?S�+&oH\|�'�=&Z��=�a_U������9��]�� Uu�o��!�m�cX����W��[����ww�sl��G��FMbH?tw+��D:G"<(��'��b��)l���	�o�mc�%&]��*G?���L<~ǫ�`���H��w�i/�b��,q@,�w6��i�P@��"_Yy���(v=>�j,�<��9�,��J��n�
�t����;�<����m�;�v�=��[y������om@��V �[|8����-��aȿU��N�[�
�?x�����|���DRފq��<�he�3�Ȫ)���h����#Xw�m"���Z�1"e�P,Svi���hY��|��a�פ�7�������+o�+����&ւǀ=wj���B��x��w������*_~@�8$b|�~����ڱ�Gxi
�w`{t�)bs�j����Z���2�w����$��0�����k/d���2�����r�[n/�0fK	���P�9�Jk@-��&�d��m�f�,Ζn��V�\]��2��� p<)β���L�಺x��S�~".��q	�Ӈ;��m�?���J-7�n�<�������m�^��s�Χjg
כw<�x*SĆŋLA��V𩪁�~��^�yYx�_�刭���ߣ@���Pʯ\��F�;�$�Bq��G�H�]D����x�[��P�h�Y���ltLnP�o�J�Sxr���Me�o��h�F�Cu���|�Z0�"�?�\sᚔ|�*�6�r.��Ŕ�o�tq��aY,���� W
bKgl�O���"�z�����&Ⱥ���v��WmP!m��:���2x��O7�0a��H@?�vFxW��1zzW���;Www����hÈ
�P��t������]H?�~���V�.�Ws�?[ʹVm�n�g�G"�5���c��}7�V}+�ܪ�wD	���4B�1~$=Fv�uP�f�6�M�j���wE�jh�U��	T��y����2]"u0��S�Ru��n�V%F5t~Ds�/��"�"�oڍ��JF�@���>���O0l��8�ʩ;��H	Ϝ�{�#z�
�qD����\�D�:��^󏫞FL�a�z�uk~�
��r/#�J�G8|���T��64W�&�h�H���h<�����nJW[�<�
G$&]�GD�H͵��v5:<�p�������Me�� �
0[fKô�
0-	��0����8I�>�u�w���:��E@��3o��]�Z��FX�@�죋�
2=]����o�d=�`�Dpfy�ꛌ��:����N:H4�� q�Y"=�+�E�Qn�C�c�z�"d$�=Ցm�k��Kk�ʩ��nzT��n��qX?E�IE\'��?1bݞ��t'7Ǵ���G0
1c�h�@C���>^7	�Cs`�#�Z
r��K�y�[��B��J�{(~�m�`�ܶ����!S�E�3>	�++0'�s�K�]��(��:����\ѹ��”��p�"���d�M\��g��\��~
v�na.�(�+L>�+�����x
����Y20
(�eV�i�7��n��/�̔V9TH�S�+��1���$��#��BWy�������F�}D�'37�gsV�i/��H�L�̶���Z+���|_�.���Q�I�44L�^�#Kt1��*�+
]KL���%��M$��ޮ��FS�\�T*W�K�z�r�I@
���`�Ty_i|!�r��P�iƳ��%t��	
*�����azzx9�k�j�DQ�'��`,��2$ڔ$Ǫ����TYoy�MS�*��`G'�u*|ͩ�*21��s[��W�ss��뗶S�N�l�<0�;�
pP���2-ǫ(�+���6C�`r��	�
�q�nz�b��:
��2��'l(V�\ng ��N���:L���-z�FNv�D����
3�
��W�p�ߐ�6~#�
�-s��ct����
��Ȯ�v��re�\W���r��k�c��hCѺ3*m��3j�Z(���+��i�������cT�tN�~
r�/3��U��ꮠ啈��wL]4b�o��Z :�2g;	�̔�!�I2Ӝ�j�I�de�v�)z5��e$� qd&lQ��L��!�jMN�E����po8�8�/W�;Τ�M30Ʒ�Aͧm�Q�%Q	�x�W���A����v��$� ���@	������y�xެm56��f��[�
O��GȖ�JO���R��Z����wX�T�,q#�t Ҩ�'҆-Am�}��}��1�@��J?�{G*X��1	wM���|A��GErT��_h���=��X�
�}nʼn)
)S�-�X�z��A���P��H�ܱп���Η��:�������j&#��I��x���%�yIN�LhTZr�d-%��C"(�%<N���*�ث4WV��#��j[1Y���RN���H7�Rau��ge����L.*޼p��K�5��	�ɥ������]�r1Qn�j#��+e�C�b-�|�������8iBG;�\�ft�%@E�#d��nC�6�+���D'Өu�#�t���Gg�ʿ��<�C^���C�E�?䟐o�ZR9f��U��úW��c�'<>�(�?	�/|�O���	.xW9gU���˿��kʿu�W�,B�,���}��o�5[|���=tہ?t��q��v�u+�3?�OH�{tDB�B�8~��J�cd}�O�S�Ke^�̋#��ˬK3�}���b`��=ƜL�\�9Tٕ̹�@ʂ$����&�Wo+�z�X��U�rի��� Q���b���y�'D�OMy06��|�bj"�'�+�<���-�'/��H^�e�+�F�1��|#G���Ƕ~�S-�0|��cm�7��6Ӆ��.Φ����9�� }��ij���.�	W�s�m����Ζ{��ӫh��&k��S6���p�����l���i���o�q�f�$��R���J3NgKWS(�"����S�G�o�m�Fx�g�r���#�
ng	9��q5�'��dõ�����F�� ���m6I��[�7��{���DA�󑳊/k5)����=�9;�C	��{a8��ӊ#[ʆ�p�(��%}�t�4�?f�٦����,wq8���/槂��#@�Z�C����A���Oj��]�Ե� �B
�?Ƹ��.(��)y
X��+�T������ `����7YqCN�i/@���[h�ɪ�reEf{������&uǓ�K�g?..��⢍|��!Yh��߇7�R4l���߳lz>	{	v��h8a6Mr�����Hh�fg���L5�`��8�;vQg���8�"�����X��S�G�6Y��9]
����O
88��y���/��$�gS�:F��:���l*NT��s� 	�{���svoo�l����,�]�O`@a�sF�h���b�6���$�(}�R�+<\=�ғ���ۯĮ�ۯ����|����EB�I���z��s��`�Gt΂(�q�A�R���������
�����F���^0(�`��g���
�Xܓ�Tsc��I��1ʉ�QnY>M01�Y%����f;��g9�Vb�Q%��
���'��)�>a�<��*�H{(Gr����d2Bq��mM'l��t��/�O@�g��Z�r�,�K���QH���Ǫʹz�r��Us�|wM�I��VG7�0n=��'�j�E�G�q��k���ȊY�W™+��j{�R2՞i�9P�@0���B(͠a)f��kFg�Ha\��66�����2�fh\J-Cm�u�T6M�|"�gJ��.�ܤ,��B|�d!DEzAV��&s�)�
��0"Jgd��A� /L$�0AP٥M!�ð��t�#��r~ ���8(wC�/� tJn�� ��#y^TC~`��YK����jߑm�Uv�4WD\�yQ;'�����=�?����ՌW��cm�tm�$�_��15H�CGu���\�k�rYa�Cװ�ht��^Y�ҏ��$���H����h;´Q(�Ւ��R�H�wI?�}@΋��<�dʱ�)G�!�_c6	�*�S���%�"l|Q�-�/
r}����8�/��2*	������4���|��}���b!�:��W�W%��e�T��9�������ϣ3G���f�K�L�m?XJGn1q^�%����˚���ʪ�A4K0��Nw9K���Jd���յ��3�=�I�7=���M(�4��k���>)pre��`鍒���.4�8öM[?�z���ڕ���)�p8s�Veކ[�A)8��f>V]X����A�=��ձ��.�)����h?]TJ��V
���uZ�b~��J�A�|u�cZ���R:�Z�Y�M`�N�'�wʀ�c,��"п�-4!T<X����
�	$|�W<eJ�n�][0���Jm�2��.��s�$��La���C�K��Y����	Z2Av~���s~����>�^א4/lUY+Z�+�q�>��v�
��- S�ld���2��<��,�M��O��k>��~���/o^4�e��w�ȼ��0�|���*Z�zq�4��@�,SI�W�W�F5[>�|l)Q�T���v��5��'?���9��P���W����ޜ�7��Ͳp�/v!�Ť?���!'}y�yx{��!F���,�]�+�2��('*�Z�n����kVQ�� ��f��-�"B��h�����KA�޻/%�������w裕ֿ�g��_���/n��7Sֻ���=��ZY��BsuR��Η�h�:���f�U.,DDO�ܢKu'�XZ׈�J�֐^�(i�@�[��=��A��p6�8��y��<i�ht��?d�c,�8n��Q�	��|��`��`�h0nQ �oh�k��f9(R��
2 ѝV��"�S�Ry������q��}K�Wy9��.�<F�^9MU�� >�b�`�U��!CL�Ļ=�J�/��{j
9Z`���'���y����賓�"_���\ָ��T����&�Cf��xi�ˁ��FTbϞt������*9*��b�9�<��f��a��&�7py2ee��3MM-�F�1�ל䃯�����>�h�ȵ��M�S�(�sF;���q�
B]��@^���K��ᖄT�죀�p�g���&9�?u�$K��cn��>��R���j�ZRK���PۡL��������K ����.�y��A�cX��P쁓��L���c�m�Ԋ��5Ào�O��m�&� ����Ǩx���^0�lKShFjDuŬ&@�2���
��f�%JͲ� �G�Q��!���@��E����)J( 8��z�Wm�ұaL�F)�؃�^.�{���3Q��#˖�1�+��P!��vB�?���~/k!��-:sc���w-]$֗a2�oSSf�`u	�:�ך8�]h��F^�Qά5��7�� H�d5e�U����:m�]JH0�e�
z[���@
��eȐH2�9�5�ٳ���O�ђ�j�����wo�y9�BtJ��̋R�l���(yα	$�x�e�>�Ce��M�A
���k�
z�j�1��y^�뜢�F�k�*W�-:�t΀P�]�N��)pJ���[4y�H��	7D!�6_�;������Ą?�q�V� 2gVC����� �R�IX���̢h��Ǭ,������h��8{n*�n��i��K)��d�O������}��{r�y�e�c�W��6�`C�/X����}�L����<�i#���^���@���pg�no��s1� ��Ó�gg��I�s�q����;�Rʦ��A��/Y?�š��F�Q8n���m=�|�^8��V��8=����?;�J@��i_]�U!���U���ĥ���� O��!=��{���@yVA���s��=d�����C�{��M.�݋���؅�ε9��/��}q
¶a5;Ii�=�6\U1����IL�V���&soF��@�PT0�	E�8�[�>�]_S���l1�P�/s{���{x|�YX%B)((����)�Z��i��[�qʁ3�O��T1%R��MD��s���G�z�Sϛy�fE`�Z����!�ܔIv�"4Y9`�c8�p��K�*pS�f��]��ڪ�jb_g�~p�i�O>�m���������@��
�5���	gJo�g9EL�z%QI�%ae�D�V��Ӭ��;�5fdza�R��&��i�+i(&�cL z`����b�`;{RH�f<'S�r��D�)_��sI1y[���eH�Z���6�ķe�z���{3<s�j�IbW�T=���d�p����ɚ:�1���B�P	�Q�!�9�/ï��H���x2!�(b8u�0J+1c��ަp�W�(F�S)�l��e,/��L��8lpF��,8�vj5��8L��
u��V�/Wp����_t�-]���$NuU�HI�O��C
�7	���\�G�E�f@��6���jX�*3�t�%�!�����t䇙�;�s{
:�ݬ%o�"�ƛ��`�`�F�o��;�E⛛l�X5�-BGN�S"�s7`�g-���|��*	s����
�p<QU+���6�׷Hl��p�r�6�
\H�\H���6o4.Lw���foB��%Ou��*7jŸd�
PX����j��f�P#[�m���0�`F���8q������'�M?�c8�bS�T���Xm�o����mA��
(�Ҽ�[V��x��Cc��E�T��@ϺY8��B�ο���$��u5���ڷW���B���px����ߍ�q}�N)��+�cڄS�li��^6U՟�*��Ү�zk)�Z3�&3�yS)a.*A�V�����w��}<9�~��Mr���V�,x��,�~��7��m�Ԅ��Y9t���t�ž2D@���
)[
��E�H[�GV�ˡu�;;�|��:Y^-�T�dyC��,�۾��KA>��P��a� F�i�ß' wˢHk�L��9���� ��m�q���)@,
�D]g�%��ׯ"4[�GQ	UN�Ӗ�cŹ&<"��|��� uJ`�GoʇHF�2C�y�i�Ws��l3C�+��/�a�.2�[�����I�
�f�vg��O��q�M���������6\���`����&�^a������o�rY�&���t5��ժ@#���Drce��o��n"��>���7
6Q=z� �?R
�9MJX'���3ƯI�au��z�+�K����/P��^��VE�A)��w��֍o������)A�{qT�I��(�����R7618�c�?^gJ�c���*���cȢ�_�|��!�̢��xit���ct6S�8�,��~�`kZ�a�2{�Z�ث�ViE�\�����}�ADʩ����6:�gA�*P��k+3�-�8��:��Ej�4��0z+��i�����<�?��6&)����ɔU���w^lF7�w�Ll���K�.q����;sV�6}�� k�[�N86Fѧ3��F�}	�Q`�B�f�qVM��+E��PB�-;�f�������%␌����3�up1����ޓ�X�ٖ��$�Q�8�@, i�4�ë`���2�dܿ����je �p�Zk���U?W��9�3"�*�"h��O�W6��s�~X��V��ڊ�t��z&]F��0���)b�e�8�=֓E০1Z�����y|u�)Eb��K��h�L:Yjf7ǡ�{�ʼn&C4%��4�;��49��S��@?9��$���m���A�9˲�/��H���V���0�tɘ��1O�E�h��g�cž����r����`%8�,�'���2�YG��°L�vlo��(�̆3�i�N9&����B��܇�T�/��)��R�ϭ\����8൳�ҟ�W�ɧ��`r�:WN�=Ԛֱy�5F
�����4�ѬfYǣ�q�f8��9P���� Ȭ�ñ�[ ��T���kð�xz�e@��C��bEAM�&� +u��r��r��-!G�](Ĕ d/�8�m�fPJ<���c��i��ȿ(��p����[œh��z��)�ˈ�^�Kx\�G�٥At�]o'����a�`��~
�hz����ċ=ܔ��;:�y�
�S�<'KyGw��$�'�)�et೘�l`u�	�M�����G�W��de:�з*�s��_�3�p�b�N��.d"����
2+;� Uҽ��R���?�JkmgG�ا��rr=h_q]0�,�c�Y��@��Lj���:�/�B�2�?Kp�M�ȸ�VV�hE�P���Gc���l�f^NaW��2�ӿJ�,<>�W�$����]+ײ0�E�χ[�k(r̫*���ĞH	�?W�M	��tH֤=��rkCU`f���������(�*�Ą[����o��33X�m�Vа�"�̙�{o�pf��@�*�=F{��{��jҷ_���{���/IS���0u���ɺ�;��Lc�J̨�a��ްW��0�yn���NwY��
�,�h�
��CZ�)2»�[C:Hynl�qQ�V��m�%�D�x���V�K���0�� d.�o��Sw�0���G���jذ�s�Nr���ɸ�}�3.w��iKÄD�X1���F�)�1V��oUֿWG��oi	,t�@@�����w��sNI�����,�y
�u�ؒR�E膴	A����?�ks�6�{Eܹ9�5�j�o�`<Nd�j�;ӻq|Y�NUI�G:����%5_l\,`�X�.���q�E
�ߛ���J[�¹�muW����z���?n��0-�☘"�â���f0[��z��>�$`
D��CR����G/����rŗ�T;��>���%�<��c��taO�8g�yhF��2��1��x��p#�;�M���\\��{���@h{���
����У���b�b�_��:P֫�V���"�B�����⥿�0������/C�+#jD
�u;ƴb�5OK;�S���ꔌEZ�4�\o��N�a���Rؙk#�(��a*N�`�C��6j&d&4uB��~4�3c{	:�f��1�P�1K=c�C��J���*58i�!�>���Ȟ�B�w�E󵝭�-�>;׫
�2�m�JɊâu��+^
y�r���Sl�V�~��:;�t$eG�h����ϵ� ��0��x�9�"poDf�`�a�{��prTlL&��e�n��	I�\��˨�/�ݸl��X��?��'�a%�<L����xh@���k�H�*Dڶ*����N��!�x��p<h!_�����z�u��6��}6��N�?i?��$�ߞ^�|D������?�5�{���θ�·g����
��7G;���
Pd�э"q�oi鵿���W�>,�Z���d��=D�-�u$ޕ��Z�n6���ℂ�+�ʓQ�h�疋���&�G�-+%��ȩI�٧_V��j��_�q���Mb�a��f�_�B��B�����ˎ!�a�{���=���vI�L;�������d<�L����{c{�;8p�f5��4���Z��+����JvY�M@�U|�%��eݎ�y�����6#�-����	�Eԋw��ӷv�
��?[}�z;Z6�i�,�~��&R�B�$yQ��W��f	_�.��b�ga�<��x�X�_����]��kK��@�(P����G�O��f�I�idž8���$�޷̏VxA��GB��<�h`ZƮF�;�F���V��ONc���@F6(aS��g��T��@,�t΀d�'� 2߁�$�J!�U��@�ѫ��� f�
E�3p�R�~��k6�tó�5�k�㋈|^%v{LG۾�a�G�A}��U��nʶ�Jc��Q��>N�����z����Ӗ�w��;�����J��Gюs�=�Ӑ����]�W������NR��\x�W���_:ݦDa��OW��!2#��\�^hzUF�D�>�MKi���J���y�e1��{�|��7����nR���C�
���Q�
y-Fc��A����y�5?�L����*��Կ������5�~��vZ���IgU�+���/-%�!R���a�p%�y+�x���0���Ƹ^�Ќ�3�����,�k�mDz�&��j�p�~ �Lף���I:�#��8�ܬ�B�d�xȔ=�:o�xs[AM�9���Z�����z�l
ӂtI�+Z���Mqeۺr������w��K�.�',2C"�r�}:�#H�,��9u����3E��J\�$�����3��t+��|�s�WA�����*|�u�].+�����`�^v(P�����QO>�#"�8�//v(�U�[˛�/��L7�!j[�“��+�܆I�d[����9��ҥiI�!E�`p��7y&��"X���y�
��#�9��}�@�:���
vI���CN�W��M�L��6�Y���l�����]�F7�Ԃ��{uߨ���Of��{s�K���H�,�L
������R\O��kȠ�!D�j�G�{�G皣�G}����Ɓ��;*t��i:��e�pR\�ۢ3]+k�uV�B�V7���|a�
E�
qO�fW>��'�����X���r�X)ampr��;��Uh+�m�U�G���F�%J�U�����ph8�ۘES��Z2�Fs��*u�T�f[�.�^��$�>�Հ�e[��R�2�K�pq!3XI3VC�`)�ȡ.�ɜ�X��$��-�³��G����I�j$�^^�ə[Y{�P=s7yt6��������<Aûa���۵\2�N�
�\�Ȣ�e8ާ�;S�ާ��Xo�Hf{]����{v۴-�Tz�����0؝<��v���9ӫu!��"�ր�N�
L��ʏ~(z������S+JE�O��$�c������0a�EO��ߑ�V!��Yڟ�[+3�&�]j��_i�O�^�&-ط�m�o��mG=<^��Ӈ�Bk�1]7��{���U�}޻��kQ�i�Ye#�}ko����ؿ[~}��Q#v�����s}%��
dd�]|<�4w��>+~nV��ä1ޘ`�[�=#c�{Zd���hd1s��O�+�����M!�/9����⻲��M�d��Gf��&�;̪�Z�u,<����Xl;ڗB�j1#���C\>c�/��2����n?l��s�� �N�"�G.
,9��-.���~m=����habޙn�T5��!�Q&��͝�)�%6��dž�J���U��B� �n^n�h"i���0��4M�k��&�2%24��S<gAF�2��\߼�q���^.Yes	�y�KZ
�Z���73��e�h*@d����/tP�R��;��f*�
�Ɠٙΐ
���QL�Z̻���߱�M��F1tPX��g�J'�b���~|���v
�c��	
��7���_��.��:DŮ��Qo�a#BP�|{����y�sV�ڥ��m������x�ewA$d]�x@[1����~qᐉAƯ���|�؏�������4!�=�N>O��]�60��P�LFw��/�d���u/N��/ߠ対�XLi!���w��t{	e���Pդ���J�?���(����k���鐻-�bJP�R�K8��<�#RX�%�(��R�"� `Ž�8x	ك��G$���)QA�o��"���;9����Maf��?g�1�3N�B4M�X#1�VIG��m�Ӂi99������w;C�~F�
���"P��Re�K�`֟�`<N��m��Rn�Y�L.�?6.�I!���Sn$GQ=�M���)N��1��X�j��̈����/��g&�6*�l2�qK?=`b�A�F0.O~!`V�v�q1�Fd{
S*kT�^��>�
��o�.���5��{��9�����3P6s!����V���g7Y);�v�:������S[7�{�
���v�0�����}04!)W�01���u��H}��3	�M����J�=Cs��x�V���Z����j�~ZL�[�r��v����U�'����)�
�����\��Õ�ۺ�;�k�@�n@)�����VG���I��b=T:?��~c��t���&ro�i�yN�T�M˷>��Ù���i����x�1%vF��C��?�՘qk���7E��(�
qc�t�s}�w$��bc���p�m�٬�d��I�[NjsW�j"��DE��d:ՈhHB
�za��������:X�&?��:��m��F���<??�����E�g��-�z��j�����.],�l��!n �&8Q�n��g�w/^���H17���wo���j��a����y��������S���춛1"7�LnMm���"�	&7+�p5�>���2���lր����[�
D.Q_4'c���oġ/��r�{'�'�����M@�n=�#H"6�|+؛��0lR,�t%��)۩����?�,�5�2_��ٜ�<����|0�Ҟ�1}9��;i>�{9p�Q��W�ÐFM
�O?��,�>>��h��XD�������Qg*z����X�s>��9Ȓ��V��Ip�U�
JFMz�߫�܋����ׯ*i��d@����Uѐ2���/5Fz��si�GQ�uaX��6���ːe�����J���F{�0TkxJ��W��}?���Ɂ*�t���ծx�$�aX�T6���Q����I�53T�@��"���gd�&��G�n�@���]��@"�N��p.�<<�8�a0�i9~|�u���=�%B���d�M��$H*z�q |G����c-��4�k[���F���p�"�g����#��U��-���%̲й��n�|JT�FF�2���-ꙃ��X����=n���#��j���WL=���9(Ҿ�~]'����,��:��l�1��6d_�P\����%��b��f�<v��'�#��g21^���ȉR�$~P��'�R�`��i�(Zq�7�W�e��Ք ��,�կV^'�x��s�
2��(c>�TJ;�ח��d�Y�ri\}�l9B�ݒV�t-�L>9�؈�ۢ�a�m���_$�h��?ĵ��h{[LWXQk�%��
��-h(k��5_	�##ah�	��x��DE�t�D#;Z���u�	8/82V&�9�Y�G����Xp�
,}A��,Pc���*`��ˏm8�PD�ԩ���x�h���hL�.�K�4�|�h$ud� �Iek��1W�o������ˡ䖉��j\U�t\�	[H��/�ڀY��cz3�

QO*���cJ�K�NDk!!�OS�nۡ��SƠHZ-����2S�S�E$h��k�
gP��tf~s5��ѣ:2z/��).��:��gU'|���@�6�rS�ҵ��:a��k�n�p�����Ӧz�Z t��5��gZ���ͥk(��h������}�֝�H�1���Ţ�'�pƷ�d�r�4�]�d��f��*st�p��>t
�A�-��`[�"@v��_Zb���Z�6w(�
Q}c��_���.a��Ѫ���n��Q6V��TI�T0�x�h}��/q�����tͭf�	zy��
���&�`Tf��
v�]s&�,䐆�3�� ��h���vj�@��3A�L�v��q�ˀ�"i\6��3o�����������dR���BB��	�q���c�ǧ�q�z)��T�(]*�R��t�7K��K���,�Yֽ�B-���x#֤*�3��F��`Bt�JZ�q1pY�l���T�����c�F�3D����֑��x���W�!��go^<�6ĸ���9>9|u��G�8캜|��s�pN�w�|��߯��k��H�y�%A�`��w���,�R\F�1<�u"�=�T����C{�y��𹬱y�a��b$Y�̇�cC��{q�ϝ��+�_>=��'��Z`����%����"h2[&ՍO*	�9�Ի����r��7������)�I�~����E�W 6�@�G0	��g�+njO�hsۂ�u-�F�v�� � C��'�:�k��	Ѫ�g�x:pż���A�Ч�����D�Z�tDj�/!9��}{5�=��4ݟ���z�.��T���^�A��66��l�bxv-�����'!����O眠�����F?A9Ԡp�T(�PX�2��6��TP���>����vק��RO�ӈۂzb�10�c�,A6Ib�z�=���7o��Qr+�ML,�[=��}��r)�Jʼꯑl1{ ����'E�z���2�>�&t]���-�20���kÙ��[�Zm3���+D�Z��7��T����>���pɉ5�I�Lƪ"��"%��ˠ0��.\6/L����VZ�����1ºք?�ˬvL<Dd��RÎ�3w<x"�NG�E���(f��51�
~�o*{5���)�D��8�s��*�R`q�h	O���x�8b�C�Cb���]�da�V�l2k�a)���Q����MK��Z
�Dmۡ;��>\_�C��tl�u����e}
�:JlM<��}�r��|�~�(ҝo{,��,O������`6KX[2��)Ѽ���5�ʩ΍I��)�jN�<[ � �HN���3%AJ���X����	M���p��}�b����p��dw�Ft��v����m���U0�`�5�w.y|4��:���e̯h-R/	�K�u��Hbl��W��i����^�$N�$%��v�z�F�%;��`����8h�ppp2����<�\��Bq�崪;�k�{�X�ئ��Ģ+��0Hg�cG:�];�!cѥ��TEͩ^,@R�Tj4�l/}�ο�{<54M���d�FLk����7��mnRP��C`|�놠'v+��R'i��v��]â�z�mF��������*������f�����Y�;V�Ɲ��`����A��0��<�	|���Vw��'�{-�P��o�<������ְ��{�sS����5�l�c�����3|C�m��ѶO���N_T�c'.0j����	g%$oD�'��
��Rê���QG�8�?��O_*	��jhc�vQ��B�/w2e����P�w`�^8��=<L�7K-J�p��~6�|<�/��q�:��������P��,�c��Q�ͼ��l�ؿY�g�
Ή�`1y�o7��:z�F�h!�Sӳ��o��dខ-v)���2�f'��|?�*Z��<�������.aW7ƲP�7��$����l�&����T�DW|3��Z��U�I�Ƙ�)��!w�Q�sw� �ijP�h�ڢ5�r�Y����A�(�����pJ@>Ҭ�Υ;wxyu�=���6��c�+x�;��A	zJ������m��b>�,{*��!Go��m6�+s;�r�_R�##@�g��n���d��aܦժ��z6jI`JE�=L�$��%"U�3�=��O�r]�,c���9�h�Pav��lk2���`Ȓ��q�+���\'�P��S���K,�c��n��]b�n�	{��^=A$M�LÏ�g%�l�&zKl����dq��59"K�
!�GCMߧe^T-4S|H���pji��RN���r���.(�-�[G���`u����#��S�c*�9!Zȝ@R3�9h@R-y�j93�0S��lC|P��zT���m
�֠��1�[?�WX`��.i�J�p��>�E`A19nmؐ������T��9�b��
D�w�����q�+łZ39��+!N�A����\AƮ����2۽�
��Ub�>��/y�r�z�c��i-nj
��E9�r����X������{iB1h��5�����]K�0���@�+�'���@Ӥ���Ļ;3�~(m��t��k�}�u�>����M�,�Y$0�
�?���^�򹽤�/���Й�.����������?��Ydu��`�pnx���h���`o0�F/��̜�Kn�>�go�=�����,�f�ZI���f2�T-�����GTў��)�7��hX�5H�X���>�B���4`l�=|���Hvj��9�pR�ow,�*w`�E�B��VPK�������fl�;�O�J���c+��0��[�q ����\u�w8�	��B���ݺ�h�
	���T�㨒%�2
"���B��L`�.���"&;@�
rҺ8�4�q.X;	���!�	�LA�9ְ��`T/JOJ�025�Q0�0�Q!=cMu�����sA�Y�ہ}�X�-��	���"�~�����0�h�΂��U���7��D*�a7�"MJ�0��(� ��p#���X�u���B�:Al
ak���F)��C��CS��ी����W�9-+�"�NQpXXA���uz0� [���U��d��/�Q6�`����|�JBl����=�o7ҿ���Toզ��PH��+��/X��c�vm+K���_�8��]�$�v��Z��p���0jOCT��o���R������K�\�V�m[�nY-	��}�,F��A��K�O�E�ˆ�Ȇ�
����p��H�l.��������&=xv�Oj8Ϧ�t�H�75���zC�qd���Q6N�p�q+̓�Cq����=��2���7ͅ��g��8[���(K�Ӱ(�٫W㉓�yz���#�e� Ԡ��z���l�g�E7�s�y�O'�{�.>
W&9l(�z�7�#�iUͩ���t��������>�g�C?m#��M����6�&ZQA�4�=N+ ���4����T��_7�
zԖ��l*�}��e��E��j,��3ص1;��׊MS��z�8�u�&�R��D_A��`�82.F�O߽ڬ���wM
|U��ib�kͤ��{�#@];�ص�����u��r��R3�k%����X���+���O��8�{��1�R�)���g-r�M3��Bә�'KX�%���,����V���z��z����,��5��h��?��f6�Nu6�Fp�������t�����A����잞�o�à�+9�B����d�셔@�!z�Q� ��+�
�KN;
���vfn��_ð��f�n]���0
�O�%ܦ��!)�4 �PQ�>��o���qv���'�^g�*rty}��pp	�%��x�ނ�Fj�����?2_����^��v��{������x:�FJ��Aޥ����f�&<�y�TĮ�n5 c:J?���[�X;:V~�G��.?�V�Z@R	Wmt$m���-_	I�����2����%�\jN1e��W?!�y���[
��Դ�$�	�R��=%g�-�L�7�
�NP�,���U�	rNt�'�[�E��	``���N�G�oۻz���O�1���o�·�]�Kcv��ն�j<,��+��?�tJº�)<;?ݻ��?�Cű��@mC��NO:��~+��|�t��&�钝��oo�1��8�'�~!�Ձ:���V�m:>��ak�t��]�1�W�����1�u�֏O�?�.��zGjh�z�=�非况�4SY�#$#�ȴ��ۣӝ�Q����Ԭ���焞f+)��z 7��8t�W��Ň�>�f��Y�%�
�\�g��03�+�'� �%��L췽l���r���ԅ.)V��Xk��r
<x�Xֻ�zwp1LB���~��[�H���o~�Y{���p�L���t��/��Y;���}�=h6M<�N]�nj���A����‡ȃ��`5�l�)���$�`����/�۩:y���:;���~S�wP喇�e8�ޥs<O�z�^��{��Ls���y`S�ѕV�����i�!rt���<���b����>��Z|�?�|(�k��H5i*�F�+W��ٽs,�Aa�ll�a�����A���l�M�pk�eS��_��U��vu-@w��2:p�vMȗ�8:���z��1?���D�\��k��S���9���rW]u���-=5��U~0��y�饺�aPx�h��{���_�.����
Ԡ�?16��=� 1�E!=�,j%Xgv`�.��:�ocߡ݁�;SQ/<��WPcj� =��;#%�0r޺PWX�bBj���#^Ɓ�=SqH��|"�r�O:{��*�N�����v'
�X�����4�Z��!�;�_j�d7�ݔ]�p8/C�y�x� �}�1�6R���(,4�Ǿ��(�W~���1��A�@�}]�7)��5]шLmŃ���K�9Zb	�2�*�H���,UWb����l���2�c�y��/�jh3vT�����>\��
�-��{�#k�$Y�[8�d��%��@G^��/W9�4�I���0�����N��	0=�+o���_7|ǻg��1���6������mo��dQ=��eyc�2p0@���g��f]z��S�2����b9ߔ@B�	�z�r�
����f�~���W`XJ�A�������Bb7jO��իRB6�|'���
�c�,߉���g���s�Di�"�����MZ���#�F�y}N!��8���K��j�2���N��ȃZlC7�Ӏ��ihy���[;��Y�q���
D�(��n��M�@��HT?K\�Ň��F!u|p=U��,	�D���#jr�=�|�n�G5��]��� �ZOR���ʒf)l�#�ךNT_2'�ɗ_�
���&-j�V���)��~dƄ��ޡ_��Ѷ��=�Y�0�i��n:�QL�4�d ^a�[�U�<F�Y��\\|"�b��@Y�.9�|�����%q�����[���HM}8<I�$Mz5%�s��ߝ�M	v�κ~�I��+lc����U`��u�^"ݍ��K��_K'7����ґ_����u�^Y�h�K����$`����X!-Ԉ({}0^���P/�q�����ۥ�-6��Bt��G���QE�%:��ؕ��gPE�ΝiĀL��,�b���V���+E�*Ae�@�z=vh�l���/"n�n"�ѫ+�c�0����tN��1Y�tRՏ��&��'c߆��6j�@Ÿ�^?�%�F�m1�1��ԉ�Z�e;ϟl��[�s�tO/�`|ߟO�I�L��������a��O�����,�N]S����>��M�@�)�Wx�SGq�#�2'�b91#�/��h�	�0oKf�B-��B�4�n9
!�����F֖��E$��N�%W¦�(o���j��U[������}&Th�t4v�٥��x�ߍO��|�@��_�����lk93�D�1��^��$���Шr�9�=�	�6��/>��E���W���L���/:b
�j�'5�Z��)맰j�"X�_�	K���3]j�V1\n�c$���u���^�w�̇4�4�w6���SC�	�,��Nj&b���+j��1�Qp��fo9G
̋o�Gfړ��̭�����r��.�7#>������}��
Nڄ;_qԚ�i9O���-$*���w�yҰ�WB/�Ku'4
 S��5)΋�����S�a�!
�CX,8�a�8�	g
�L'�E4���D��D�X���� ~p�5O�;+�>�
>��q@aiK��"M�M�\IR`*�g�c3�zy�����a/V����B�[��u���{�����
���3���r��h��aG���/k���
Ksk����� ���EJ�^{8����4�L9$U#��@m�p��hW�Uԙgf)"� B9�����ʷ$6e<7�S�V[�p���j�
���E� ��B�$_�l>h��d8go�
�"�I\�R}�*jL׌���C*J#��
1E�#9<+�HrB���L���偢���m�'^|à;J1<]��Z��1�#z�dW�
.�]GWN�Ŏ�a-��V�64����T�ix	�@nhO��Я�xz�S|@���	?���3��L�c?i�?'�G�-�2
YBC�����v���n�!��E��������bA��<F��j7h��?��-.l�
�K����2�Y
�"j��lS��ǧ���C����O �q/��NBLڰ�[
���p(�ߊ�^��Ӊ�
ԋE�`��5(+"F~�UcY�~����BWډZ��4T���gL�@i�/r���%�����͙b�kZ1��QvYW��q�Z<�q���Q%���M�ڍw���T���4 ��4]N���G�)�|M�.�	C�^�w �J�b��E-��z!��s��VO�Z�G�U3��^fx����%�|Q� U�%�3,��"}Y�X �P�g ����\0��*Z��[�U�xZ?f71Q��yҾr�&˛�@���#(:��FV�̺"�$>�/FJ^�\�D�+Z��Js�I��V��sڄ�H���5�r�ȿ��l��O��3�̄��fXoU1�hG�d�*�ʀ�襻��㥎�����	0.��^O`�@�z�H���}˝s4*F�Ū�0��`r6���?%8��l��Ƃ����kF�b2W<����!A:���)�	��*�L
bߦ\��)5�I/M&R�H���2�N�
����¦��Mo��F�L�sĊ)jQ4tD4�@tVc�5G#��~�͵��l�k䰤�I%�&�&���}m.h�2��r�d�޻��j�,�V�R��ِ�qDWYTw��
'�W�ߣ�g�u�!��,dݮK�16�'a�_�X��\��VVBJ ��֠>�Ϟ&Wy���%�u�Pc8�KN!2�4@�"�@ӰYn1	��))@Gj�~���BXd"򩀰�o�/(25�� ��l��pc���dW����qBk���P��t�vF���	۞�x��rA;�0C�\��t��!e�p�ha~��,I ���E?����t�0���h�i[�|��T�$��$��&�Np]Z�+k�k�mmUA�%K
����ʳÕP�m�> �'%4��f�Є��TI_�V�4�-f�4�Nw��%���`� ��L�d�G�0#����@�-��R��&Q�@���[�]ɟ�Q��q���9$�ϓ&YZJ>�H\�9�X$/P�hY-��z,�c.^F�~X�s��Ԛ�ݥ	��tBq�����j:��Ge���N�:�b�CTy^�x��!+��=mԥ���d:��0w&K*�	.Z��lUG��a����\��7�O�!![/��5S��陜��������	hN��S�ČQ���M=�<Wa7X�G3�R��/����k�2m�Gqjt���b��H���1�,u���^�U�s��Z�2�'��+ӟ�d�ڷ����i�@�,�f�*��tF$w�+�����
��-��N|L.�)*9Y�-ha�k��gV��pXE|
��m�'(�丅Bk��C�u��T��E}Z� �	���!��Z�Ůy�XPf=TM���+f�r���fg9���U݅�nݔ�����c𚻓��
P�U���Q�a[B�����aY�Xv3�4�`,�����b%��ֵ�C�,/�.dT���ʐ��$�hl���9��ӳު�TՙRf5V�T8A^�@��b�u��4s9]�H�m{��@��[16�bcj�j�=(m�\z�[���!Yf7�"Hi
|#�a�i��5> �T�X�/�܃�ڨ�m5"�jˁ��a]q!��O?53{jFtϲ���"͑��T�4��Μ�;��I�W�@I��2��tI�Wv���x�b.7��h)r��������R��]`̢�9\ݚ"y��6�`�F��x�m���zGR%=ZY��q�I�!��ڵ4�I)c4��|;�gR��~K_Hu��˴�ȫ
�zp��E�R�ڲ�){2��Q"��� �����n�CE}-8Z���D^�Hj�pG]��`��	Mz�5�p���d�`%'Fc11Q�6�<7lį	j�m��(`�nyM��O_���Hk��=y��u�
jWm&I����&V��|ԁ0Dq@$�xSn�>u�[�Wl���o���p"h��m������*$|O�*5�r�k@�/P���;m�cu��o��Jo�ky]�,����8z	fmC��?�]_o�8ϧH�PǸ� �1��v�zrA�%Ng4K�:�n(��O�(���iڻ{�[�(ɢ$������O?���@��V8�'�LZE#n�q�r�yǰ��V̌�r��<��O/��k�s����{��H4�Y�],����&�z���0QV|NM@��V���(A'?~"�(7�9E�1���8��~��D�%ה��5o>L��z��$��y�p�$���O��w�^���~eè����~�Y3��lh��p%ʙ��a6j����*�IO�x�av��lG�B�r�O���י�\��U�&rUFgrUک,��3�*�F�w�ı?9�F2[,z�%2#�  �bG2��}���"w�f�ca%`��^1pv��>V���xm(����C��3�L.p<C���~)� ޽�k���/���D:b:��\��\��T�Nv�B���j�迿<
v���!�4���dC���!>��N���3A�7х|Oo�_
+��A�E'K�;��Sw�����}2�
�7,n�U�O̓"�ؘ��[}��jNv��ɦ����C�\a�!H���Z�=ƕ�d��z��C)M�fyM�J�D��A�3�I�u;�����^tZ�M�;�`���<�l�Pd�lfpJE��n#�g��m�n��J5q����DrWD@�C�w����kw�nc�g�f�ln7'����b�￵y��y:~�F��|�d��2E"�%cQ�Hv�t-���Ld{O�����J�T�uC�+���O�n;�y�Rބb��\I�t��Y2�<L���1�4R�i6J.����D�@�qq�;�c���ĉ��qy.�5�@�O���n��VŅkH�]W�����E�����h�P͡#�!r��M��V�Di�T�l$]�;�̸=�Qm�aPϙ~�������)r����d���RWX�'Z�M�����[�2���_�KH��k��^�]����;t�����յz/��o��m2�W����g�Z�a�l�_!�uB�5ޟ����֭����b�ʉ���H�'|%��|��o�32vb��0��+)��9Źgh�5T�i�+���*ϼ.2,����8����*�i��?��M�d��B�!.�5׹4j���C#}#_R�- ��r�
�5� ���ʮ;�Y��A�����54��F��������t�ԍf�>�*�n�c����*dH;��9����7r�.t�W&kr�bwxS��n��X����_n�������|�[��y���kq�w��I�e0��]m�j��{��>"��H�Iu�7(,r�ɴX�T��#�ָǥ�A�2]$����rF'[-��8�[2�Y�G|;��]$i�NH�M���T'2ˏ����f)���ey�m��8����D[�Gc*?��6(F�ެ��A��-"RXߍ��7��F19�k���-�5�z@�����A�ς5;a39��"���$�.W��
&[O��`�� ��c�3��~�:my5�
�@��7%
eA�z�i���S���5�Y�}���m`Na,xE7j>��6AY��K|�}��ǿ��vM+�������nI�=_1އ`�xk�}�V��#k�"!
�	#ff���oWU��s��������꫎��nSU��|,Ag���V�\_��3�&=�#@r��`��\�D2�����iRP��y#�'��q��k7#�1A�`'�	}B��g�5��r��t'�`4�5T��SME�xu>t�c�;x��2G�Ɠ�6y�%��'�l��uAJuH'�\:��U���	��bx_�tf22,�!��s�g�P�]p0�n��[O����һ*2
�YU�1o`Ղ�i�!qwyL���n�YgNO.����G���Q1�!�r_��֗�q>J���%��V��k�����i��P�c���L���q1Wc�������	=y1��A���1g�F��~}����6�m$�0Spls]E��,��):����p�#�~/|x��o�����|#��T^C��"���2�XCP/�m��gp�)�\��Otr8ӭ*��Sd�p��?L�NЪh�!�A��1��l�Æ$���όy*bU<D�c_5}Z�9uh��+u۔��9�[�'���ӕuD��l�r���M$�q�LÀ��+i;��K~��X�Ф,�Ca1��:%����@��+��C�|�uz����7�kA;�5]/��Q���$[n@����Â�z��W�/��`�����5bO�u��H�Z6�8��/�!�ZGu��v{Ä��f{��Q�=Ne��_��//��W��1Zw�������A8�^�@��&���Un)�
�>N�r�i�N�~��| �F�3p;����%W��E�̛��fg�f>�7P�)I�;FqDӲ{_�E�tq������$v��7H��0P��=!�4L���/�t���,�4es=�$Dm���'�%v�n`������L��?��
��8M�ߒ����r��C����;�am�1�_�VTXbr3h�+EҞ-g�nj\zȤND�����ɣη��DA_\��%A<[�)�vO@��p	rt�x7�(��)N�p��S)zQ�E�<�:|�o���>23PD+Et��I����=��w�{��)�RN�"ɔ�X��G��_2���ew��sUt;����I�+ݒ��J��S� ��rB�GN#������G��!���ۖ�s�C�N\)ݎ�,q�ܔ����\g\}\h|:YĤ�a[)�gF~�F��R@�?FJ�T�R<����5�Q2|;)��֘v��>@�JgF`�F�t���rdt�3��y���
ʯ$щ����=�Y��P&N����;�T�ڑ�Kϻ�����tL�UM�$�`ꈚw��Q5���	[M+�Ԕ�����7Y�/I'�%�0G.)��Xѐ�~pAI�V&�Ty��U3����\�e��*:3ɹ��.cf]�Ȏ�;(j��⟢�q�2g�aO�,��)�o<�T�mL�f�?��֏�O\$�a��`�����@���?�&��U����'x�Wl�1f�u���cP�FM��|b&�a=��s!¤�����n�0��gLH�� �2v��v�U��L��
b����?�8�R�D7v�q�.AA����/~1a��ҁ��M` h�6�囻w�ϲ�bٸ�X֦�NX*�蝹O�,��.�4ˡ�z�j���h�+���<
�#>uد������r��ҥ�Jx�h��H�����=�:D0���}�&��cK'�
"7W#�F�D��C�
�j-lM��Ջ)C3�6 9�!iOY�����d�(��`�ؒe��K���Wb���]�iQ�S�h�"�;AW˚6m�0*�/�F:�q& ��rB���
,}��'�x��OJ�Hdo4�0ɠ���r�6NWek�H�
��^��<b�=ׁ�İw&n�fML%ݟ�	�zQD�f�O�m���܄QS�K���>m#��5s���iڡ���	�2HBD9(�.%X@�=�=����f]�$~Zs}2	�Fǧ�fj.�����8�j�y�:��#��#e��l�0���.�w���+�E
�^F�>F׫Ҹ40�|x��wi�.��;j5��g�`꾹v��	���C���$�U��&b��2b$��0ǿU�Y�Ď����^Ҩ����)8ݫ�%��-pI\�v��Wq�W L�F�Qy��mc"S�+�b���\�J��E���R%J�9X�<46�/]�r�h������]s7�ݿ�~���V���{���8���S{'�������V����M|n��A$w�����K"/I�AA�fƕ\����(i�ɹf��Ϸ+�v%�Vs�
i�0b�@yaw��]��I��b��{~��;P��2�s�!T�A�CO��K���E��L6M?��}�}UYUS�m��A�Y%�0������s@���D��5' 4A�AV۝c
�����4(�K�l�	Bd�ZY�T[��DѠ�эO���9�#�#�)�ח�e�N�L辎
��Q&e�R3���P:��JW�;B�t�� �Jx7mDg+���%(���`tV=.)��*�,GW���6t.mtK��짝�=�]Й�ko&e��r���l9��j��>Ƙ�}���e�mk׷���g��e�{
d�t��a�h�<CE�o|1)|�;e�6,�J=����L ���s����@׶�o���n�<���c�MS�hv�|����Xj�	Ut���B�� V#��ē!�`�5�_M۲AD�O�I���F��c���݅��fķ��}j�����JG-+ew��{��)k�6�eJ��ְ���8�V�-j_�(�B�J��镳~'!��2���Hߢ�?��� 3��+�7�h����
��{��9�69�ޯ���U��T������Zf������h����n�!��
,�E����A�4-z@��$u����������v����w�,͢��tGӚy�S�0�|Yc/��wV�Tv$�^,nP�?�.g=?��]2�%K�h�X�dq�}"��++�5��)>����AF�{`Aj%�ly��ͥ����bP��uzs[�s�w�j
f)R�J�������oh���l��3�>OI'�y�{�<}�/%��)���O"�-�8���<!_�X	܍�d	��}�I�аzA5L�-��P��3	�2L$��_/�cRٳ�rƏb�
�8�V�k׉���:�[���+�2Pղx��7��[�t+�����1���(�	�~5�X��%����p,����N`T7yŎ�RR������
_�y��_�z˛0���Xac��r��f��R~f2�Wĕ�W�8�l�َ�_��+�AP��B�M�lMg秇�_�ӻ�h����^�*'�L�䳓ؚ�ّv�"��ؿ�8:{N�Q�hR���$A����:^�7+2}_g_)'��a!!�}���t�1r������|[�{B��)n*\Ɛ��lHJҽ�Z&�#���4NZ��+�%'DJ�TN�ed)�<T�����ު���M�i�X��51�� ��!z��n�
�<��!����j�Q�OV͡iP|9B��ݲ�|QTO^fmW��_�P�n�$h��Cu%��h����Y#�͞M0^��v�wBꦆ��P�^yj�6�����u�n��K��'�cz�mS�H$xG�8���4���5�F�T�k�3ߖ�7U쏰T�<|��V]��{���V}�Ya�|Ř�dZ�Ɍ�-�_-",˅q<a��@L��_�7�?2��ߥl%�lԲ�4�0��fn�
���g����.�ܣ6`[i��K�$�с#l:05���
S�V �.��-�<H��.ܬ�n'�+%w�S�[�+�i^�ΖO�5�n��C(�'w��$����no���~��Ur1�c�^J�ʄ�mb�`]�`^!��2翜S8�mͻ�����z��D�B�_�`����
[��P��R_���0�f/�\~m�<�F,��V����g��D��O�2���1:���o��O���O.�C�������ɪ��K�+�t~�ǾZ�6z# �t�R`�T$�|��l���vh'?]8�ĭT�*q�F�VHك�*�m^��Q�ɡ���8�/T5�	?��	�EjҦx���__�Æ8��x�C��.gGa�(ʎzz@5��}���,��芚�G�{ȲMRo��Ѡ0jµA�gї�.
X�� �ٜ^��e)Ypjڰ���k���[�—*��,�BL"��j�j�ҺG��:���B.CT��aי '����n�7��{���m�42I�8������=F���vVU�����҅�1�O.��7�EQ�
=b���.��%6�����Ŵ��"�UAu�Uz�8
5�;��9�p�:��#h�����)�&ѻ�3B��c}A�L�t���g7<dZ��%���8�B����͒LP9��(��һ�JTۏ�e���b��jKddMJ�Ģ�g#D��J�7G�ȖX��	v���Z�������-�Ŷ�쑠t�$��,��0�*UKlܰ8`4~36��8�f�Nm���.'�[��A�m�^�4_i�Ԃ�W��P	)�kD��eӂ��'��m��_�"-��\z=3�ۺm+�s[J�A�$�V�R����ID�cG��h��U'��~�Rb���'�H�>�Kj�����]z�e����~���T�(��)Xh��"����D��#5G���ꅏº���΃���_}�R_�� u�s��a�p���	5��A'��}��ݨ�^_:���T�hڷ������_";�%�m3GJA#x�`���f<��Q����P���TE׷�����鍋|՝�]���Iۤ&���8�����9�C���$�(��VF*V`��K_�K%�Qy4�/�W&���&�mSZ=D�7fw��"'�M@f�N�<erp��:�!,�'�.�_�L,lg/7�����x<3��l��^�C�+�����<R:[�ݭ�z*��.I��}&�EcϚ:�c�j��E�	KЯ��h6�#����A<���Ȅ0�m,1>��n�/�n��w�j
n�	�9<�ٷ����h)�JZ54ԣ%
�ڗ��KK�f��_�����`�i�Mo<�B��Ca���JU&q�
�$R�����zͣ�)��$\S6I\X��`�����T?�N�º��\~׊#�o-��[��.'��>�\���"��#Ύ�y����)dD�FKo��M��	$��l��u"�G��k����yqCi��En��ǂ8�b��)���f��X�V�
A�Hڮ��e��a�=����Q�ZQ'�L�txtqp|rt�wr����!��JO��{�0oe�1t6���������S��H����v�f8�`L�ZU�V�K����cU�F�J�㗻O�G��l�G���Ѧȳ5l��
���Φ%*���3�N������r�b8�R������Kk�n^\���kK��)�L=̛F��v8���R6�(�*J�*�h���L�e�,��+��
���E��0Aw�D7ڐ�(�����va�W�T8�L_��G�5]T��_gag�P
��;;��Ux-Fq��fK�{�E^s���Up�N���c���T��-@�%4��
�\9���n��ظ|8���k�R�*��&���I~R��d��\s�82��)(�&��[q7N���%�T����z!�'�I��f���Vy�k*�q�A+���a���6�a�2��E�����n�#<�"�K����*�f�粪?ۂ�F��h��K�U��^�zc�Zbow
�����]����Ŧ�����sqC���F�v|��#3�m��h1e��b�"�9!x����ۉt�+1��G�w�<��Y���ͦ�~�i:�<Ł=���<E�6]g��Ķ��Z����_Ji@
u���FK��p��]���E|�z�*._���U�>�����#Vه�f�c��4f�ԙ]z��*Ы1�3�� -#fs��ۮe�䶞��]kl^����^�<����3ouo
��R����$�b���^GoG�b6�9�$c��a}�D
�E��3��'��F/c�ZZg�~�QU|��7�nT�1
�2J�p4��f���Wt��Ir �^?�}�l�ܦ׮���1�Wm�R�*�'h�(�XEx���U�[^9�ی}��k�"Wk�z��L�ϥ���l{��5��/��^�<E�,����h���->�O���.q�T�W������*݂u��:��G���tO�p>0=�KX1N� g�Ox��@�:��}�҉Aے<�[Y�(G�o��%�#���e�+���9غ7��D�;~�/?���/l��eѺ2C�Y��n��/^����m�n�7���\��Ǣ�:-63�:>����7|�d��E���{g�3�3A؎���h�����kUN#���Y�C䫭�_��p%�T“��(��f��?�_�0�
>�� �3Uޏ�н=z{z�k��۳��ч������k����ܽ襱��f�hx�㋢�?�\y	�z����G�}�>���I[7��7�j^2�@`���ˀ!b��5^�-���Z�<4�D���7����S����?���藿���ic�_��ٳ�prr������듃7�eyu�U�c2��-`��E�*����ӗ'��Ώ^���1�������M 8�Qb�y�f�y�y�e�c�E�c�Ѳ�����kW�%�v���Q�@� �f��a`�R�*��LV�;��o�
�UAi[��k�=�������C�H$n'�8:	����g��r���c�rՀ��>�4����-�Ǔ@�t���\��
\��vV��-/�̏��A�%�O�eY&R�j*p�u����b�
���r�V�Cw�D�.�46�6$my}$���+�Y�~X�4b��n����p�����Um������y{?����\�H�s[��Kn����yx�2>��d�w�h�7�G��?�/Z{v���DM!���ܬ����@��A�����s���N'�&j�MGKOH��Ą9x�:��7�W��U��]O�n�G���b�,{Qe�66D�G�a};�H#oLw��Vt=I`��yr3�9�wH�6�!̎@���^-F}#������"2:2xJ���l��Dh�V4��yb�0i�x@�x*���z_�I��f�ep��d��cw�|Р��kE/w›__,�}�A�m�x����DJ��B?�3�ܒ^�'�F��R�u)�]L.�)S~�_�������F��A^w�Q��8~G_F��кy��dkR9RmW��+��L�Љ�G���>����"��{=��	��`��T�Ԑ�
3��$����t&�Z�|�AfFT�hO�J�$��B�LMs����3����7�4��
'Ͽͤ�#F����|�s�=~�����=<�+�'}��N;��T�,���E~k�T%	���� ��\��]yAQ�U.g,��݂��ra�>���K�����(����]S�F�~����d��O�+8(	�tnOH|���)dB�{%���k>��)}�.��vW�j��Z)��*_ދ5�/�by��!/
jn>�9�,���Ȅ��d��L��9��a4�Lt��SI��"�z�_�5.�'ivg�V�ij�m�6Q�GoK��M��6�ӆDc�`�w�MgF��ْA�;�52�\~(�U�a�4�h�A��]d@�	��ɤ�伾�3{�:VPzi�{���)�.ڍ�k�9�,���
�-Li@js!�L��5��g63?4e<��?��#nd<D9�����4f	4��g�c`��`��OG��<
T�a1�Jt���2T�0���'�K��HK(T2d��lK�]
g��u2lJ�OkZ�
m��`tD�ڨ���X�P�/H^n��p��قE��\�=y@�0o���%U��r�ԩ?}�@#��sR�b��H:�ϧK�m$�ɲ�Ԣ�ƆOex
t�a�k�����A>���|��ʰ�b�B��n��x����~�������N���⚒Q�-��О�7HV�(���||ܖ�*٢%X;�wL���EƗ]	�o�%
,2��f5E��(~�[]>e�q��5����H"���Ô�1Xt4yj�%Ǡ�SC�����$�.�|��:�VY,=����y��n���@�:�5���[����fL�{���5%
��i���wN)4��f����M�a�<	��8�/��]��׳^|t|2�_�ct,h�0x||ٷ�'m��JZp1�F���F:��R 8���VA���d�:�%rVK��+Õ�w�^{_X����`����h�{��e�e��W��jec{��V�)���<)�Z�Zk���)Z�Que8�%�rP5"�h�U�	48�+�*�|y��;�RG��?�XB�ѰX��Z�0"z����Oǃ�ş���a�1��6 h�.{`M�czWt)�o'�8/(l��BK�
�"7o��b�|v0�Mf��_w���h�ۄ��R|��&E�Nj�c^�X�
�|����]�o
(`<#���F�]|_�U�7��՚ff�IN�?�>��$0"��-�XC�U�ȋ�J/c��T![�5�>k����M��Z��u ���jX��OӪD�{��j{�0�Q1tU
�B��ȳ�
S׷WX����+�#t�
?���L|`D'��
�5���y�d�!�9�.�A6�T�V��U��Zu��h�`�ZiG/��nw͘d;E�>ʋO	l�G��E1�˄}��5#��D�/NvDV�=�Ή��9ŭ�f�t7��MTyI�
�A(� �_���}%����<T|v�&W;KC�\y����'�ŕ]$!�?W�<Iix����dk@gUGF�@ؓS�d9�'
���{�
�wZx�Y���+T��0bA�G*�t��Ga�)T�1u�,�&���b����5D�.f��윭�Cy4sh6�W�.���� /؊S��k�I��<]���R��@���ڤ��(��I�mh�]��+�6��T
�Qy����J]��J%Y �6>�Hr��)�,�2e�my."��2�c"R'�(ʚd��3mޮ���"����S��z�`����b���4����@�dk�!���g��›a�XW90���}��
5���P+]�ݣo���-�s�cپE�����Yī����͖
ɏevٖ���GJ�GJ��]�d�۔�%��zb�*�qZ�n*b\���'�5��m����l��K2��0::ٱ��hį���=Z󑛄!hS�A��������+�C�dO@��U�]�ڙ�
pV�&M�}f�}l��ot�hR����Eơ͏����I~|���"/���o��x�Ρ�m�:�J��9�����5+�@����]�o�8���Ÿ�u�tݽ��>q�
��z]ax����A���O$� e�I���}X#Q�DQ⏢d��w�]|�fŰH��n���j;�+ܒ�m[���,L���H��#g��[��:�N;k��k;k�gDv�̽{+��A��T8������E��O���$��l0������*���
�]*DڋFD;`�ý�It�1�a�;:H>���|�ll���^/Nz�o�b�y�r�#%O�����rv��>�����0W��zx�J��VSGa��u�;�6
c���������І!���^���+;T�W�!�@8���0[�Io�#ۢ���c��iR,��a�5��*`#��k�s��CzJ0��JVL@���`��ڗ>�[N�������MJ��-]Ȁo����#��ȹ��҈ް8��yp���[VT�xC)��)q��@A$�pB��xE�~�����j�u����{N��d-e���dOI��H�Fߦ�4x��f�`?S�����s�d���g����k?|�/y�yy�s%7\y��1���c��R�E�j�4���Vv�V�	��!��=u%$لC�`H�;�����9�
�1�D�e�|e��V��cZ+��m_��!
Z?R��DHZf�<2P8��ylͮ��0vKb�g?�"Q��2�7C�}�t�aJ�v�@��ZI����ՖT�A�m��O58�b��B�Wk��e�S�	ˌB���-����5�'�iG��+L^�O*G�HQ�З-릧�//}�@*�>񺮊�-�]gߨ��H�����㟱M|G<M\��8���5N|�W��.�dS�����6Du�W��鬭ֽ�7���1��})
NZ��s�++-���g`!�9D��* �c)5H��_L���W];@2�,zrԪ����,��N*e�0�YP���#�2�*�}2�s�D�p_����qf�3�6W�RZ��Wh`�#+Ƴ�ɗ���5#�ߝ\,Y�,��W�{���<��x�tl�t�L¥���0�Lm�a�%�ɸP�9�I���™DVE)���l\h��_��1<�p�	o
$�R����?��ۥu7�m���{�F�	��a<��1�.>u��"ٕv��{�
!��k��+��zT�0���2���h\�0�H{ė�$E�P�\<W����m��D�8�<><֕{�Z�{�{��P)a5
f�;-B��o�W%Rս��]�¾K�y�G6!��	F
�V*�֔
��M=wGF딖,�U��P���K�x�ѯm��#?@)�ή��F��T5Bf��)�f����e��]��G�V��8\D>g`����X�C;ug@(��8�O2��Ŵs��ԧ�x��53z^~`���B6T���uS~�!g �D��-��LD���%��n��B!�m߱H&9eY_`$�fɤ��ul���@��m/<��9�~�&��b㥻\���K�o��S���P�D]0�42�w+�Šf2�{
����g��8�ucڪ����y��q%�(�}��pqb�����brϷ"�����:$0�
6�d{�����s�9�hN��.��E-%)�}1x���jxا�

�%4/wFQ��r'�$�k��V�;̶��;��N�ت��h�_�i�%^ٙU�~E�W�*6O$���Iyx�߈{Ͱst�0֒�XM~#����6G\v�l��\{{F���5�"0���/j)�e����=�K�$p��^w|*�%/�k1��h�ٜURN4[��2<�d���}Q�K7���:m-0Zv~Zc����_�^���g,?nP��5C��)v�#HV0��ET�c6�d���)	y_�]�w���j��a�އxѩ��ew��]�Ӯ3��l�ul}�O��/-o��(˾.������w���xMp2�'�b��R�Gf�ٜ�(O��<���u^\
��	pۭ��c�$;��{Y��{�����%�C�u����m��ݥR�?&ݝz-{�g��W��Q�����|��
yX���c����+�t$<=�������^r&�V,�΢��i�ev�U��/1�H��/%�9V��J[@�~#�E��Ldz~Zԙ2$��=tn�V�r�nplu�l��Xj��	В���1l��l��Cpi����A��=���Ǖ�U�̿���lC̬M�8���]QO�0�+{cfuɌ��ƒ|p��,&"1KXF�b����k)>-������2�;|#�-��Dn���YyP�?F�KcσW�89����И�v�h�U� X�1����� >��c+;���#O��ǭ:|c�(����?P��
�b��u��1�E��^�]Ԇ�����v>�N�=�Nv��W(:ll�(UY��ۄ�w��@�\�>��E��S��sHs4�M��T�CԃmYz0�4�Ύ�9�q���4�{9��˭��ޙ�ߐ[r�d��5����p�������dHț9�<Q
���a�`r�7_�}~�xh��7�zR�>V��F&PW��&6r��	T�Ж.��O}S�8�=��{��b�.�<�؛$�č��N7�E_&���w+_4���2]"Qs�5i��ҿ*�`����@���z7H��T��~#�T���m��|5�m���oRnjB{�`�f�Spk3������WmX���-�.��*�4 ��RY@��.vr��#�C���Y��A�'�Ɗ#9ʼn�F,c�����w��
�Wo}-#)�;d���&��g^&"�Ko��O�����LU��>jӚ@2�8СcA`m�	�/U{!��~U%1�ڮU[���.�P�p�jQ�N>�c������|u�zn'����sE�&�8iyfJI�g�SA�-Ŀ�@�������p�I�����	v^��N�� 'GTg��;]wb1��E�x�
hǶ�4U��
�N���N�k���[�o��(��Q8��
k�����RQ��Dw�ZFH�J|Jl|qjI<�-�X��8+Y��OK�!�rl�'5tZ	����OK#�2�ـt��T�-"�}���7$���Z���{�#���u�K���-���kH,4����6Լ�V`"�@?K
���m�B����*hgt*t�;9-L�nl���Q��V�ZX���\���^��:���\��G�Q������z8�\M�5�В�B��I��b�ݐ(wS'���p����n�F�_��b�Ho���6Ї�����A�"��HE����;�7��)�׃a�;�Yr��ݝc';��hlaC)��5_M�DuiG�]�����u��D齃�9����_L�l>�O|�LE)�s,��	ʈt����R��a��I�L��&��r�ԇ�;A���@�ħc�Jp���|%\z �����,��T��W�h�kI8����PPO
Ln�U��
��wz`@x	�D�*~vx|����k~�b��>�:��9�}��ZI��c���)e�3�Eq,�d�
�v�_d��裦%�y^���b/��O��<8*7>[�O���~8e����'E�`�Pc$���h�i�*�
��2
��U�ylKs�f�]��)i©w�w&]�M�M�O����#(s�ѣ�=*X��/�q��0������%�,��ϐcx�� ��Up�ڨ���O�@۽WY�{i����U`=�l�z:�|�h�p�
n�.���$��eĀ@�����&�ɶ	w�5���jUZHdRP%c���E�E�h���E��-�`�/�R��߳j�h�r�NrNcI=�bB�2
�RIi�yGSF^�!T��t�O�3H �p|�٪ʧ�MMf�ź;�0�Ԇ�>^�:m�V(�P�e���a�nֶ��xp5��O6@�lgF1����΀��� �Dy����vQP��bg#��*B��x�R��ss�/ d��Y?X#ă�H�����Չ�&�eN�"or�R�!+m<g���)7��a�?-�a���̛��V��EY��_)q88����1�5MI-Ȍ4F�!��/��P&�~1"	��H��hɌi�i:1|���"��u`ڪ��L��Eb��U�/S��e肅Ao��
kd��j]����V���~���u���,�G2Q��)c�
i�ס������yFKHܮ��01��%�.'�D9z���A>�����.�M�,OtKI��,ى��+`��.�z׽�X�V(q�k�߾�wv���4�2�qߚ�d=6e):��4Y�L�Z�d.�@�z��QL~l(&��e����:PQ}�ᱽ?�<�8=����;#��}�w�r�{�%��#�#������Dp�ªԢ|��iA�Ck�1;�*�x�b%i��B6S�Nm<���Q���ȶ(��s��
o[E���28<���W
5[��&�xKm��}liP+O��a4�U����4(��N��@�5����5�D�Z���	� ��<ɠ]�O�t�:����[�#Ӗh��Q$��n$�&�Q���4 �I֣+׀�#��a��Ony�#?y둟�ͼ� �u����K����N�Fx���W���)��=�m�w(���+@�p���k�g:Y��ywe��a[��`mP���@ټ]��.C��m�ù��l��7�˽�q�<���»]�m���>��E�&�J_���L��:m�K�N���Q�+�卫��W�l;�
��=�mU��B��Z�j��=��y��}2ϓl틌`=�O�8��*gh��Jed٢`0�3':
��2W/�W���He����%lǀ��(h{ܦv�p���#No���P���8e%���/�P�N7�$223c�~!\L�W&~L�/������O��
&��+2r1��Z�|�<�u������+�I���2K)|
�&��.&6�l�ѻ��й���"+0/�oCR�r_��}%�!�A�=K�KK!��5T��&�_���e�-(]P��׹÷\^�y}KV�#��\��OC�.^l�-��*z�R!�9�r���`�+�g��.u�AX���霥�m7m�!�޴ۏ|�m1����_��͝ݺH�l�++F
at��B�����Y��?�5�_���]o�0�"�&���IhO���UeBj;��[a(�F����B���|gljF�Hc�^
�����;��Ј���2L��'O:.i�[�)��$��*�����c]��n�_″s�s��ʖ���_��U���� �fqo�
����q��8ô��� z���%�CyGMQ&|ݛD�8��1>���a"�ަ����U[�
�q&��C.p��	�h��^%�j��;;*W|��A|��--
ٴ�یd(�|XB�(OeQ�N&�*1J���Ј7$Hɉ�IR�|�D*�
!�7ف
�-?;04�ql�����pP{Zs�0M�ʅ�#�@p����V��OZ!WN��>��u�)�'���b�綂�e����x��Rs�@�+�Ѥ�m�z��W��91�����5�|�:K�(�*;	S윟55��JC�#���B�ro������/;��>�J�[s[n�t�+A�����*�Lol�*�kr}��M:o���A�p�%H�{��X=1��I3Gxgm�ǂ�,������
8�����!�Fw~��ªx`�����h�(B�8?��l�+�z:��SRg���e�M����|�5�Cd���Ұ��2?�<,�~s��j-�S,��+�u>�D�b*v�"1V��	�I:�x�k?��9�d��x�������q1����κ'�.s⥓/K�=��ˣ�·�t�۹R�j-
�rIl��>Z�uF?�����zI ��y���'gU�*q:#y�=Gf`Z{���OZ����,�K��J>JE9QJ���ic�`M
�z��IT��m�����Ph=a?l�B��!��
��}�1v��2
p�cx�{��*�b��{�]o���m3 H��R��ϼ�GN���3�;��[Ћ.{�1D��Z�~��1��z��h4���=��	q*�����G�:i�`�E`K_E���B�w��y����D�f��`$��G�ջ�
h��(3�,�|�#˶O���XL����2.A��e�E;�D·3Iaf��G�	(��0�1pd���~+[���Y���5u:�}#�l����[v��7y�"�+��e�H<�]6�1O���
�H1����lٕNptmҌ�Px�u�:6��#`+��u�&�
���]K��0����BU���*=���VQ�^�BiJҬ�$
MR)�ޙ�1�6���K�0|?f����X���y�o_�F�^�
(���M���S�� �S5�k�px��nŶ"g*�ݪh��~&=�G��:'Nf�s�U��1\���O�����D1���=��%۶�[�wSo�6)M\�J��qj������ͯk]O�H��J{�R�<15�8�̝��o�u�݁�d�>&����+�8Frr@���F�މR��R�St��Z�^dk�������I��d���ܛ�E��B���WD����.����	o�/nٚr���0N�C�{[܇g�l;��n�T ��FD�C�|����Ŝ	#$0�,@�;�|��@����,�z��д=z-4@�?R�Jg�v89�RA�(�(w�?�ٟt���DŽ�وn�~�DJ��$_��0����#D��.2��"AU��!ʱ�0��t�z2�@��a5_# eH���| )��\����r4�Pޡۨ�/��€4�<sN �����S��]pH]t"�LQ|���S�Ѝ	:pRc��	��u�X��!����"���Oj$tc3�\�#���pu�%�P�m�H����E�=��'��Z��768�76qt#s���9*�"���K��F��>����t�A)�1�j*mcâx1i��Dj�2��zO6fM=6�S�i� ���.;oe�)�2������&�|ŠP0E��
�SX�$�FZ=�陴�g�բq�)�i���K����=[���Q_�/Rg#���u���Mv�u��-�>d;|J��������-�Ǥ�H��z1�fڶ����!��"D�����F5�Q4I1�#�_����>~\��s8�S��:�!����yN%���3���
JhSF}��"��pl+��Sf5�r0|{_)��5���m���>8)1H��(�E?�9�rU�����Y�����]��0~@���5b4 �ă/�����?�ek���7j�����M�}����r�+L����S��x��Sf����H����<WAI���{s�m�зj�2��SrP-cI�!���ʉ��z	��D����-j�:���g
Dhםe���
	v[aí�.;Tm�˃1J;/C��YHpE��k���u��w�j�0�ڕۯ�?�R�ޒ�B��/p�@P̥f<M���dT��� *��@���h��Z`셐^E�7Q�񲌗��R���8ȏ���ߖm�;^�l�X)3��)��-d�B$��K0gr��7W��Z~�]_s�6�*���on:}�L�{��J0!��v��$v�6�]prs߾Z	�,��Kf�-1��E�W �5�N��W[�-p�TK(H"�0�ߢ���LI���J�&��j�
64-�m6)akr��l�|�l�28Vͼ �a���v�l����`�֛'����ޙ�㭼m�op7�鮻�x�a��䳰;o'2w���<���1B�,�U���*����ߜ�K|�N(�V��`�S��[��Zh�*F��L�M�Z4�m�2��LTS�_wFd���e���~j��B ���˛M�Y�0�Q˿��b�1��}K���6�.���%wi8����G�-NF6=�Wg�J�PM�Sj�Yӧ�\�i��wB�<w�����j���~cT��~�:6�`��Dy��R�{�<�JO��/��°�lp�x�1�H���C2�R�o೵龁[��I�c�;پ��q�%��eS^�C�I�f�<�*�v@�jD��!�j�:��ճ����n٠������p:v����q6��@�����_a|<��y?!Z3�N��m��R�W|*ޝ��O����/G\>��bH�u}�}NA���ڻo���K�l��OigY���[]���wys�D�S��E��%�u"��6$c�)��.&���H���;}�&����ߧ�#����֌U�
���'D@���F���T?U�h��ԜG���zuYRGi�d�
?��n����8�|�k���x�/���&�BG\~$��ۗU^6;��
(�s���K8���o����(�e��]�v�6A3F�Pg��g�i����z�N�8vF^��^�؟�ÿr+�ib#����x8�����"�o7�g1
���&L���5�k���������rk�/?���=Ž^����\��}�=|��]�3gn��b䜼g�g���H{�u��Ε�1����d�����*�ʁrT��D��A	��3��ٶg6j�QO=��YO����&}���
:�(@�Xf0�O8����c�`1u�L"�#�#��/��Ar�r�r���� /�?G �÷;�W: $���t��a�:��K�"z�.Hz��x�
��W�	�5d����qQ0"�a�~"֢M����{^a���jC�M��Q߇tf�њ���z`w�4wQ�K�a;Y��0�e�}�yԟ�̳�畞y�������8\I:Q��c���8q�
oIQ�A���;�\Ozj
�4}@e��w4kh�"�/�]tߵ��yQR	�-Iqה��+��
�:-$�od����qQ�s.ׄf�<B�W��ؽ��^�N��݀Y~�����n���]
>��Q�O5O�E:����ks�F�
]�U�
~�&���x�Blఛ�C� �Z�$�����Fb$$��]]��H��ӏ������*�����
<lt/7��
׉8�������M�R{u�Ѱ��k/|�5��*�(נ�
��]�J�����e���y�^���k������N�Ȃ�[�aG�&F���x�ʋ^C��pP|@kʔ�m\w:���r6{22�� Ct�"
Y��D�T��ˊ�m�O��vd\���M;Goګ�i�&a�\\��$���"�V.�;��.&%X�
e��!S6�K�YNa��1A^�Twf��o�0P��\]��	�J@�tC��F!��X	}*��o>"���i�F`Ef+��#{����U�*IU�y>�2S�����K��`��.�"�W@�+� Y	;�p.M�F�ֽ�<^N�!���ۇ�l��A�_���5V��[�B�<1��ҵ�X�=���1p\��:/&7^�������hI��,�h�փw��@��#�ӭ8��r�0ms�
����n�uDDʲ#�ecW�b ��%DYp���b��t��<�lzt�j̽�Q�]���b2Ѓ'�(4�X
w)骮�^�X���3���&��Ԯk5�>k˻��r;�
�����`�� ��4�I�~,P�You��s���5�ݑ1%��A�]���ĻF�,dEԹn�[+�:˩o/�L�����՞��
X��~yq���a�;��w�C欳�:-V0�g�3��{����E�T���di���@%a��r��i�����Qj�X����F��هU��u2�-��
���ߋ݆��OFt�*�wqyy�D{s�Y� �w-�d��5Tז�r
˓έ)�]�"�֯��D@�1^������0��V(�{Fz����%dx=��Z�ڗ[4*j��{�A�N3�(p�s��\й�&���~���2ҧ�}`NR!�6�����2&�33�f�ɨ-'�̀��'NN=
���@���.(��X��iR�F�ƕ�-�`3%4��…�HМ�����bЈM�A����Rg��l��5��d�q��ܸ��{h�|���[���:�Chw#���z����}4!���	!a
`�
��ɋX��)�b	L7b@amU��cpj���
�.jO�J�RcZN-�t �lx)u�^�\ȝA���r$`�7߱ό�4�n�+W�ֺ�:�uH~���W��xtp��'�Ϡ��?\*�C*����, ��9�d�Eb��A8<�b�)�:qbO��쨝`�.gYp(����ưש*�)�-]^��k)Qժ�n��Uy���k�&��jw%j$Ű
��z�=x�,?LpQ�	[#�:C����7�V��:0>��n6�ʇ;��K6
;
����`$�Z��07�k�ݬL������{� ����ѻ
~ȹwq�h���f��� Lě/f������<!�or�fa�F�m��O���{�(��%T
�u��~v�6H&����f�-��k�1g�'�($���B
�Q�%K��̶�f}��x�0>ar�ϗ��K$C7��V�p�f<�}U*�Un�7��Y�/%�%�$��2�RI�WRP��垰%����W~.`��BE>>�
x��uB$J};E&T�|�2���U��)�"�58k�4
'a�ͥ�4,���u�m�D'�=�GX�]�7E�����������݌_��`ף�}X32�257�Ff���`.�'�z�4��hd�b�2����P��h�'%�����SDēs�3�S���g�kpi󚱧��S"6Ş۪=>-J@X�pF��PQ_�N<�G��Ƿ`:��0ro�<�µ�X���;V��Jp*�׷�,�u�y8�A��mB���Ci���n3g�ā���o��4S�Q�y^���*��?`�{�<I�烹���ޛ[��'aʧA�Q�fY��ѷU
˹����F�l����0���o>���.��3��IP�����׉'��=���	W(��K�Ԏ���
�g�&��X���ܢ
T�q�f���Ryl-5o��o�4o��_�Cu	��X�\6���l/�C?p����"�T߀N���K�i�KP�5aj%ɀ��P'_�(#�D�q��d�x>�^��:k�?��}/����)u%���j��p�0?`�Opb��<*QK�������7�0�'�7u�—�iWud��
4
��7ߨ���t��NC�����/������sÿº��IJ�g�Fl	Bn���{�6Tg08`#%�AS�Q,4~9��
=VD��^)���*���;c=EA{��v�'/��H�J�L��<ե��=�c9$3�4N�0����[��Do(H��zX$KQ-z����$�{=3ꁔ<��S/e�q�� ��$0+w1�M�?�c9�R�oGD�Q6?a��I�U�i&4�Ѡ�C����O3���;x�~\D�'�US��Aw—��98^_4c�0�dM`-H��h����{1�n���
�e���n�"��b�Ǭ�M	!i��M%t�b{rU�ܝ����;�m�f3q�MX
�щUJ��?�ێ���=�*���r�l�]s�U��|�M�G���_�
'��=	��ݝ������jD+y��c0jt�Gș9��������9����GM(5{"W��݈Q�1윷m�� a~w#e�Q�fd�lS��������Q�8geh���-�|!Vw7J��]Z҈L��C[
��W��F���C^g��&���R(���cE�
ޞ��vg;A���L2=ބ�L�q4��� �i{”��Зo�Dt\m�BVKT9F�PW�h�%�2���pGSӞm�
�l�������\����,_���s�vh�)q,JǛZ�"���Gil������>&R�-��FHb	���qrS��̚9���N	Ȧx6_{?O�NL��c�]��c������MI!����@|�@Aa��'�E��E�ȸ�,���y�.�	$B$\!J+BK2�͊~3n��"K6)�
$Ï�ҳ���S�����&�����ۻ��xI&&2��LU@�r�ij��4Q��%E�^9���^3�cȳTt�!�ؕ��q|A�D�G9!ԍ�[�Uz�<���M�<X2[����r�K)R�z'�zH,�,J�tQ)|�Zz�����!�Z		��Ft	JC�W�]�"9�S�	�P���\+����.2ؾx�݆����z���M�:�nW:�X�%�.\>�,� ��60�ʠ؊��:sV!�`��v7xC�F�R���ͅT�Hw�{s�:W�!����bD}���V]@*�����
��`$�㐙]�]	�T�1mT��L�(#��̍V��*���.�|�|��
���O�Q��W��Ӝ7�v%,����L��z�hC��{i��e.r��<�%т׺+O��K@��"h���$'�W��XT��w'�AX��
 R��
G�_�K�Rm���o
�����<�e3����(|[@4��jr=��EƜ�6�?��P�}�*h4U.�.�
�aΘ,���b�s�&/H���Rm�aƚҦ�SM%eS��A��`��>~��?���L<���rX:ٔ&�`�D�b5)&��H����d�?=E�zcO��f���g�#����`=ފ&;�\�L߈F�8Q�y:f>n�c!�9Lo!aM���#�&%7���$�'ܵD<�0!�Gӎ��yNP�v�i4��%�EZ/J��������ۺ��K��)�`ڍ\��HoJV��VX�wKW�y*"��AI�V<�)�s��(˘��։܁���XwG�z�Ϥ���s�<����⼖jg�b�u;4��Un�(Ͼ�}��u�����ɽW�Zs,V(G�����7Mj�y�!Jk���bۿ��of�,�_@|l{��`m_N-����
���r�}ay�f�;�����]o�0�}�"{
Q�j�&�Q�V�����T�C��t�چ��v]��>��g;�c�u/'���}�ζkr��A��}�K�zc����)�ɸŁZ�y��ι9��j*S�p�"����=踤ק�O�z�B�ٵ‰�<+���n��>£N~�ĸ�"O�*ѩ��F����R7�
���<��pd�P��Q�!p�?c�����qԈ���.��DU���bѻ3$�W�q��6��CnZ�ikڬc�u��#Z��n��;��X�N��PCPKKԸ��Y�e�O#�,!HR1eLxu5\�`�[�l�
��ڏ):�	�S�~���8n[ՖW�:�ϗ��C��I���'��:U`��5!��F�h�V_����:���;=u��ׅ3S�L��!P'>�gգ�w�=��YF!�(С��г|��;9�h.Yj�I��P��̒��[N�1'��'�fk�U�����IP���C��e�T#&Q���Sy���@�~;Qm�أ��Ù�|Ӳ0ְk"a������C��p�BO��9&�g�P�^A���qP��<�ݲ*�?�o9/�_9�-%��-��64F�J��Q|D�+�b�s^�Bxy�-�F��Uh�l2�L��?��Q0�T���4�X��BF:��9MZU�l�<�*,EP�zIC�տ�V�_�G	x�ZK�xA%��L&�Q�Cy$����m�^"��6�[�0p*\��<4o����/�>���E�?��T9�%���}`@|���z�桕�C�ZMb�WM���>�3}����ZT�^[$�)���TZ_����-I�K[F#.�^��va�x-��-( &F�������0ŷ��T0�/��0����o
�ϵ�y�N�>�g�F�e�����.��/<T0]�0�������Āȁ�Z�b@�a/�*ɗCI��q(˃�-�e�-��X��b#~����ꞽ�b����i�G
�bA���-��a�|�O����|�82tc8ӥ&���n��s:��&:H"O��[�%ƾy9����i�H�L��2���^���}���GG�c��`{��˝�x�v���[��qd��Di0$k&�nDڳĔq��o������h��V8��s���%���b�U��g�2�^b�L{z���ȡ�Z�s8��q�B���A�K���B�����kS�@�_��j�N���b31�:@3�2�$�8�����w���H;���voo�.��k��o��Z~b&%�rQ��o����J�:��4!0���1%izμ益$�7ΨG��s�Nj���9��bL��h#�W��(]�� ZF؁/*�}���
W4�v��2���b�]x�]#�"t�	
���Ol�20���B�'��KI9D��R��:�T�p�f�Z�QH��F���e�La��Ѓ��x�xzn���A�1;G��m:@Z:�z� 2c��IC��'{�/-b�fǦ
�I�A���6�D��nN���+�[�@>�>����	wB��G�������L�pN@�U�_���)!q��� �D�܈ĩ�Ύ��K�;N���{!{H����ww��s�̝-
O�N�p�;¾,Ԙ�w��̢�׋��������	�	���Dȕ�-�ȖT��y�H��Ȫϔ��N�=u�rF�
�-B�	W��e�������+ś=�ب��1�����iR�y^����wS�
�mNL��{p�Y%�E�n(�E����g�[�i�:{�0E�2��0�ЧU��3��'�����C�-n�u�a�FC?�Lê���3�f|9�Y�7�K?�hTA��;a|e2d�k
(���Ƚ�GB��M�eZ͖n�t󦲿� �&��yDzHy4;^�hVgC���+�~�A�
�ָG0�8d�6?'�UF������R��pԯ������o��j�ge�B��R�T���y�OB�)ye�R��������Ŭ��9N�UQ�m fNݱ=��}��8�Sᥚ�vD��E%��9#���G���sE��c��N'�P�*��N[d�jy
2��ץn�1����{�=�?��AId��N	˕9�b=y�]�%!�))\�x�ëGD<�![�L�/��Ũ7�;����� �M�V�r�f8/�\�e�(T���.D�AO$P/��nA2;���" ��1n'c&(
��[o]蓁����O���s'Bqr|EP�>U1�:���h
��pc��՜;��\���	ÐԦ���]S�8�"�n�x0^cL��L�)�	ӹB�q��x
I&vZr&������L�z��KK�ծ��]I�+����x�"������u���%|�����1_���\8K`9�}��հq��U��)X��4/�IR3����Y*S��[pc���D��l��a-$�w�7WZ�h�z��̞Z��gD��Ĉ?��miᕜ\��֞J�^J�̙�LX�u-�j��8�k�D�W��`�L�a3"Wah�Z�xB+U['�
�G��d:j�SQ�=y��7I�q��n6�88|������C/���a�z<H�A��Й���_�wv����oM�Z���-�\�ź��7R�y{�&����A�9|o�����K����]O(8k���[�����ͽ����N
qu��y�Õܤ���u���|z�&qQ��3��yӯm$������٬�8H��4ԗ&(�ԶY��������ޟ��8��=��I-|eLp(�`���< uS�*�����-`_�=�M�,·c���O��A6�������uM�����.��8��F�غ�v`�|���PX"fs��V��p�}�1x��&k��n�(`<��?E�!+�G��7IN3�(i��/:�7�UB�2EY�3֯�ӛ��e
Q&
���Ƒ��n2-	��h��K{���p=���x��D�v�<�v��q��A�g]�1p���A�WDC��2[E�Q��&�_�T�Mْ�`R�0��4��_Hj��~�CUڈ�$`��5����+���q�#��,��<�NooN����W�-�+P�o:��VH&�hE:�-�#�860���z�6������Jڻ�Ĉ�E�gɛ�QSYu�x�盦��l��8�6I�qz��rS�o(j���m�e�bٹa�~�����x6c&��׻��������Y�Z����p���7a���m
���X����
Q'զ�g�D�+�Ew^�z|�'��P�<����ɜM89To㿖'�4��J����\<�8�.�����;3�/�d�~��A��� S�>�xa@�:�\�ܪ@��C��Z�Y��%8�s۫���]MU|��g�AC���R'���{��F��;HY�A���ZYo|�h��k�����\!1��O�0P��2Y�dL^��J�&��P�95�i#���l[�A�E����`lͽ���p�|�?��x��N�WE�Ș�+	֏8)�;�ס��o
���>#ܧ�)d�/Ooh�
e\��֭�5�>3w�On'��d��
	2���a-.�Jy��|7�u�ϳ��T�ڽ1g���5�q�e��f���k�j����gO�Қ#�1�.�`lF�]��,1�.���4N���͠*��WF����3��w(
#�IG�>�޴�����~�_x��^��eF#���6n��aN%�G���l�*_P��0�*����[��u_��9�<=y�f���:*�jׄp��7�Ȉ����z������ WO?4�x��r��S���&>((8���I�{�i+�ɐ���09��K2F�q��3]��lW
��n&�,�,����5jH�I�'<S�N%��B.��Ȩ������M��%sW������4���X,�C��ɑ���E�����Yc�Ӭ��Y��ۦ��R�M��]ƾu:O�t��b�a��'y�p֩���mLUo��ݷ0�rgI�C�.v��P&�kC��Q�l��d�(j�Z�S&j��f�3���“dwD�e��j��h	����2�g؈8k����8��A�<���;B�3
�-*<*ƻ�
�^����sf��qd���N���^
Z�/߽;zu�	</���|`vWK���V��գ�~Q��\G?�	��6��t8&B�5������b�<��$
ʩ��Q�D�k䶨����>/ד��.��S/��K���λ�e�� �$zR�u3İ1$�Y��k��0�/�BE��o�?�pvJ�C��}n��q�RR���d?�8�L��rDg�z'}��gKR��	;o�w]c�L&�����}'���6д��5��hG�ti\�agIiغd*�{?�v:m���(���<�Q�p=�������ۓ��Z�%�4X�?%��!^��m&̛ZI��ɘo���`���V<~f�,��*�ӹ��F�?�����zcp��^���B�v���
�Ss��D��{x���œ�l�Tl8��Ǚ�����{O1�n��s�ƞ?E��;�.���}|��}����ks7��>�d�h-;��J�dd[is�#�Mr�N��֎:z�i�8>G������+rf2��II���׏�6ﷁ]��N��|����
;��7���m �w�G@�ݖ����׭ooV_���IC��k�l)�O���7'��NV�߆��ir5����K��99��KAug
����+�_�����d�!P�^%���kn�QI��)�_��h-�����8��͖9�J�Q[^�%}]R��kMī���i�d�Vp �eb
kg�	]\Vt$�l��!�P�/�������	���E�wK��`�����|7�~Kq���2�]��Չ��r�����"w՗p�XJ�l��c1��&�r=�e�p0+%��B���NV��9�Ɵ�{���gYDٗ]q$#E�Smo#N:�Q�>�Cvo�zV&��O���.���~�ѯg]Gm���L�͉�_E3pb�X�֮+{8駟
��{j��ԋz*�i�x�l���L0���d��3�k�
"-wE���"��÷��oz��Up`$���:�-�Go����
�;�wD���C�\y���q��?��]iX��ЉK,C��ܳV`>���Q��	8!�|�s���~���!�}�~���ދ�Z�X,k�t2���Վ�3��+ja��_b�g��#u�%W��l��'��ص�
�m%����:ɚwR�Q�%b!M���)�ĤlC�ȭ�zp�!��c.��q�h�X�T�ЩjP	�k�b/ym����3%[ sl��q<�v�����9 V�v� ���C����{=�-�ySʥ�W��W6b\�<-ѕ�q�c*O�r8�w(�W�0h)hb*4����|�ⰲ�9�E��Gh�n�l@�X��
y0*k/���'#c�����20�-V���XNo[^6w���ڣ�ӯ."�݉S��I��#Cv�n��L2c^jùv���@�>D��׬�Y��YΜ�b��
�r�v��/�/�Y̢�		g,R}�`vH鯆��
%��+(�v���V��r�쓷TnT�ō����eE5p���0[Dv1S�����8��P���1�aOOL��^���^�tl;9����UC'2�za�8V�I����{��Q�	�t)T�8��grc���<j���I�Y��u~�;�8>SAcDZ�u�y}z�{���G�m��i�ϣ�`7��4���_Ǡ��kn�6*��V}'l���U`[�[���}�p�g��#��>�&YZ�	���-|K>�y��(
��B��K�X)���3��zPI/��Y4Ը�`j����q�}��x�ꘌ�3���ત�չ���<��r3}'9T��tP�aS8�,���f�\&@\f.���0���,���	-NQ�0E��k^��R����d��
��?��<�]�!
�{121i�|��F��^�clfb��^Ru�G�CP+!��ɒ�d��d4��u&3���r:��0�4�"�6�L��M�lЇ��^�WA��k]b�|��0H��d��4�\���C�edC!�\�j�-��jn-��F��8���CFf
\Bb׶!�eCLQj���"�`0ՠ�fY�UTb���`ܤ���f�H�NVqN2��jQF@јm�Ȗe��;Q��R+_|[��]����۹}�n�lf���Y_��Ǐ�h{�C��H,	��/�2X��Tak�q
��\����ߟFTp�RV�������k��
��^��Ș�R2�]S4f�C(!:ŸoQ�qI%��HOH�5p��[<l���M����S�w8L���<Lg�^���>�Ӥ_Xave�֗����<ɝB�c�\U�L��r���g�]���
��$$"�sb�1L���� X���D�y��/���h���%F�$��
�8��8�DY|����G&`w�2��ܳ�T�ֵ#�"���}X6�zyQv�&�{q���3���/Vc�S��c�(/�G\�G���/3�_�#�����Rd��0�O2�%L��E}Y"�3��g`��Jo����4+V�@B�:L_ؓ*B�0V���#0X�1�'��\0�m�e�H�4���*�c�(r1�/9�a�T^�gwAL	_;����XU}cvW}#%���e�p���^M�dW7�J]����(yߏ�8��`AK �"7���Xt�d6�2�
�K�X.Т҂�z�f�+�-~�`�z�%Q�S���	*�ѐ׈�j�f�*tA�mX��ȥ]:�K�#��X L�v��X�Sx��*�B��:H�u�����0���h�A'7���4�$hc,�`m�4��/M {���5D�o�OЎ����2R?d2���֋*�G�@?gB�O�D�
��>q��}jGu�0nG����Ep�0OF,ᕈr<��B�*���F�FN��'�Ŷ�2�+DlD[��"eS�g��4��ad/6R��T|$�q�\��B���u�t�}89=iՃ��<:l�D�Q= E�hB�1;)���1��S��RΚ琐ƢX
���E��u�i�~�����tr/Rա7�D��4O㰽��,�3�ZiG��S���&�88��B�ۇ��]�S�?u�ſ�1q+�/�V��ϧJ0Y�#�w,�
ш$*���e�iH��H��jO!b�����
��[`���"�Z��

��D�j�<U��H��:͟�πk�)�6�����V4��rm<:">\���%���^D΢�NlI*���s[e�|w���Z���*W
}$^��
Q��j"j3s�pz�H*=�i�l0q����:���j��QR{�B)Sm�n"p�6��Ko�1#2O],[Ju7Y�%�7j���u{�����u^|�(�8R_
�/rg.��u^�����������~���R����w��An�Jn�d�P�%�c�J�2��\�m�.�ǣP�Z�W[�!�j�U��08R*��C��s���Aw ����$&Y���f/���ʞ �?y2�~�e�_�L$$N�Tg�}�)�E���}��u8�Y�`TUWd~j��m��Q锰`� �|A��B��_y"���hM�2��}:�����P=*���j0�c�1d��*�G7��o%�q�ys�N��>���'�0h�AyN|�Z=���*�iݷ���5�Fu�%N7J_*�?�i���Q�#c
En}�#�8� �=�׃)����u��5���Y#\���>��`�HP�촃�@�� ��w��8�)�ϕj�T��j>H��C��+���7TԵtV�n�+�"Ԑ~*;F�V���R�6Y����g	&�\q�!��)~*4��CcG�����'O���rz@kpϾ��`9ARѬ�L�J.��ĥ>T��j}\mA���5����_�QA�?;ݭ��$�%�O�=��0�C��l�����YD4^�"-�-yR�+.bp��"�x�G{'�O͐�ga�k�m��]��;j�&U9�y�O�ˉE�\�`}��ELd'�Iy��p�n؏nz�ɍ�ߦ-<O��_�K~?��l"v�T����H�6XgHܦ}f��V����E\��Θ��f��\��Q��7��l-<S:�`�I��\$G"{�/{E��j�|����]ՄVۻ�aj�K���f�EeOY[���Yj�e�9
���jI�F,��"�����S�Mzw�C>ף�yw�׋�ׁyj]I
���
$�NT�X�}R�?Sf�*��T㱈2>K�G2���
�BRN�ڕս�YuO�ۆ~�+��ٶ��K�ʃ[S(t���)/GU������䉆����p��ab$��U�1���RO��LM��D1��a��
+ݍZ��E@h�[��Y/�ck��la�he�o�yÃ��6��@K��y�߱Oݯ<��)�NOiap�՗[#�;xJ���VjOcr����Ae�̭�'����D���Z�hH-k�H�JY>�z}�W��"_����E�M���$9�Ish�ї���z�H��6aS���M	������\T@ZGpu1��K��Z�lXf8���g���İ�P�3[�\LN�b��/�9.�x�J,�x--��J�Ė�{�V{p��+l�	)��QPJ���;Ϧ�<O�z2ާx6�-&�iA���x��"/�픘O���=xہ�I�ۖ�z��Ş�	k5]����w_�'\�zi\a���^��^_T^��^��?�OR6	N�@���^æԏ�g3�.�An��ؕ�s0ƘL�3t�b�a6��w�8hv:�mۇ��e�Z?����ɝ2�\�LM�9o�3�D�xh�WJ��Y���T�N*$9��
ұ�>Ko�a�E��?���h��-��A[c�����5)J	��"�H����kS9�;��[W����l`�(�������!�EQ��l�`=cKr���I-������H�֫�j�Z�젢z ��&���,ر6�'b�>!AH~� _z��9`�^�����cϞ��y��u�>�e�c�-V�8�Q�za�f���g�%CKm3L�qMeMJ��P��F�tդRg�8R�Y.�
e��É�q�������Qo������ͅ��]w:g:���S�^��u����0O���ʌL@%�����ׯ�KoZϞ��y<�o���B��I�]�y-���ѩ�f�"���RO��6T�"^zs�j�$]-�D��RԬm���PI}P�i#������$����4NU�^�1����/S���$i�SХ�ẈkSm��aǓ԰V[�8G��o�)(�d�SK���j�1�#�s�&�����Z��=��?wws#e���'`&�0(
!�����mp�?�Y��\�K��q�;-�����b���Q��bQ�s0����!%H,�����8�u�j�2���N��j�@�J��v}/οĪ����U�t|����V����k��?��O��P+2�K��J��4P�[��Ʊb�E�UdѴ��
`�!$���Yj�u3�3��PSM��L���lT�oM&�[�\�B@��-X�j��p����*3|Km
��\�J�Sh�
sB�Fmun�ks���ik+1*�D_���]�0��&�X"�\i0�͛� �Օ�����XY6�53T���2�8�?)��f���Y�Z��Ʒ�b�V��䒭��%6�$=V�LjK/Qե�i�E13=�%zֿ��'�OR�
�7�b4�����;��O=`	�$��Y��É�Ρ��B!%p}p��R�����R1f����gĉ@2~��D��ٰ��Jy��]���{�����p�"�l�%�$F�`�W���K�TM;T]Z�4���
��n@a��2�6�ѵ�.i
z���\�~�z��5�����(mW;ޓ�ܟ:��.@��XIs	�$JZ�b�@F&`��E�2��9��2����W�v���"�v�^|��d�p�,����Z���&
'�k�Ld~d[P�,�p"�B��d�ɽ�����?�����L�=$�:�!P��e#�
2W�V������D9��#k}�߰��Yu�sx�O2Q�U�t*Mf������HTW��8�5�#�6[#0"
��Sa�R�����|���mU�W�)E3
�R+~4Cb��%����s��H~3�k������wn�)�l%š��B'��.j�aS�va�mZ� .�7.%�H��
��/�9���P8߀�/�*c�����.��jy�[�7�3�k�T�S]�S���SMU���rx1˩&P�l**"�	��-	Z�.�Ŝ��RԌ���9��zn�~���-Ά�s���L��w,�J���|�)�x\k �$�3��O���$+<U�'���K�-�;^�MN,{#ӎ���Y����8O�fWA��끮�d9�zw�t�L���R=�C�5|C�dPS^�e�7��pk��A
L<2�'�7�R��b8P���_��@��P�晴ʍ�������&�"�z�*|�n���?Æ���2�s��l���$�e/R�.���9IE���Y@U}�ó�ӧ�ِ8�
�2���i��.
�f!�#2�Q��qy�r���c�탏�'ݣ�ã�v�w�����,�77�F�熛I�}2�:���C��(��⟲DQՇq^�f�-����8��
R��Pk��F4�ģ/�]��e�]��������2��D�5O�*�[��ۿx���ۢ�¨�9<�dc�-P�'h�n��4V���y�Cp�)媁�e*ώ�=3V1�?fǎ�޾.:u3�X�_G��2X��Z��ݡ:CdpJa#��~wg�wڽ����cE�<A��A��)l^j��` ,
�6^��w���������k���ԥ����#;��7��<x�!�V�jtG|�
��۱:��spN��i#x�^�M]��h�����mV\�EC�ĦmeW�1�J0_����c���k.5�����c��G��!w��}grM�f&ݦ��T�(ª�z��+̏l6����Do5<~�
�(�Fw�^����쬯����qQN����_�\v����"�0d�v���(_�k���9�M��E�����{��*#�SP��-w�).-�0+E�6$�؞+���W�rC
�����?㛎*_jE�@��li�5XjN���M�R�	@�?��S�C&>I���vk!duB��ؽ�w����E�B#���h5t�!Y����YJ�EɁ+�3@�m�m��:dU�|@ɰ�:�R��[��4�����
��eW`�e���\��b�
o<h����gQ���� M�/�9���l�y�OӔ�vN���z�!�rZ�Q�f�D�~8;�v<���_h����X��
q`��,��<F�ZC��v�Df��P���ܸ���=�rzϧ�,@9�|���PN�9�Co�+�?ߎ�V�l����Mqϡ�Hf�Fr�)-�s�0#�'޷�cbZ��B�V*�O+cd�Wػ�K����a�3k��9M����3TK0��@	|f
Bޞ�hnBB����,j�o��>���n�>h@�g�j~�nt0@n:~����
�짫���c�)�*�{�O�������v�}n*�z-�l�(S-.�n��NŌ����qC��.��k�Q@�tL5�'
�W��1�h��?S%1�95�z
 �y����SW��ku}ߚ�090��p�wT���E|�<jPE���n�UX��1�V=ZȍƈB�&�g�ꦗ�g��L��Ѽ�7�7��,)�7$
.;ds�fW�ņ��eI*߸Q��٭�ҢY��quԬ��>��O�T�T��W�s����f/E
��u�!�*-(uW�R{@��0?R{�7jܴ��
^Z~���w�;��z�+�/�<�>ID�"*��A����@�h�{����Q���1�����cF[d|��|0�D.���b���LY�Xἐ���iw��� u8��olh�#���Ր{�VE
��lok.F�8����!yW��A��1tD`��a�,PCbm�b�$�B�:!��?��2��|�tm8�)�@�Ik�J��o&�@Bx�Ӷ$�BOY"��̖:k�����R� o,w��7��R�\�?Wщ���������*�&��t��i>n�ck
J�~^��Ct�a�h��J��}�xߜI�y��awG�2����⧶6^B�'� ���I|�R��O�P�\�U:���2;�����t`[��\�a�&��,��r�>����M���>��Ru���o���NSeP�C\�,�����Si>�pHU��$�8_�ұ��cӜ�W�Ԅ��HɍYB����o�����>���QS9���[Cռ�N�I����A���&W��d��,囟�{�KԎ��@��@�n(��c���� Q#�p
����
�s�~�?�$��c��Ԕ�K����OWmO��\}Ms%c��L�b�7d�0FZ^��82p=�1G���cu*^>�!�#�*N�j��'Aɨ�L�V�Q�4�Q6�V�/}8pSq1ϕUB��P�l��\���v�oh��i���L��:9�j��L�j:1gR��Z�L����6���Ou�c�N^��lIe��K���E�C�������]��W�@^��i:xqX���x�^���><�=޳��ϸ�g
�{q'OP���&�f��� �y^j��eb�8��{��R���oM|_J�
���~S,@j���S,���S�z[	6�D4��=�s�6����P�oL��T�j�c:��&�ˇ'R��LꧡD��Du��g�?��k�A�r�ڛ����X`�X,��%S�ٜ����݋�5�x������A�w�/�>=�U@�T�2"~����#*;P{wX+R�N6��a1}����l}�G8�}����|"�b��^"ɀhB���֐H3I�z�����בA�Ю����
V�'r��,c�m�ľӞ��J�Z>��W�:8KhJ�Ǿ�I����F�I��*j��5j�r�Um{`I=X:�K�؅0�f�@=':�zg]�'ེd���U�w��\؀^��󼘌ó�*:V;��2�D:^g2.��"���4��άةz��Q���h�qb��G?�N{=����
��@W�i
�P�0]�p{��u)�����fuOS;�#>���^��a�9㛝�U�I�Tb�3i�wy�sʑ�5�7&�E2\J���`�${K�-�%u�Y�(��I_���y��y�N,3�m���<�b���V�qن��YE�YMS4�r��
;�#�+�H:z�31�c��k9���aN�N{d|
��8tK+���Y���y�vC�y^Yw7��a��Q�Rx���&��I��_�-﯈����况��Bӌ������ٺ�@8�=�7�.�-5^G��7v8��s������g�AS���߼�c=�F��uxy	3�	Й���"]�_pw���=��[��N�TO��u3�V�Rޝ�p�I�>^��v
��q��%�e�R�%����Jܮ�&b���J���P���4]��������O���nO�9޿M%AjKľ��	�?z7��3�5�_��eK�z�T���*&�*���_�C�g� V���F�R�-֘�o���(u�'2��)GzL������~C-�`>���L������m=/p�k�R&�	���$x-���*<��M�"*I&U�B�"3�6A.\��=/�c�AT���V�jP
�j�h��Z2�[V0�~�{���-RXn���U�pÙ���m���ʗ�^qɹ(U0���Vɰ��bc�u��5&d�u���ě�87qbcw�U�D
�A!J�8��ݡC�)~����AtB��
�[�d��&�����aDm����s����'z�C�H�L�3��`���L��
�_g�����d(�6Q�_�_��r���e�gs%g�߱��I��o�����o7�� �����["bFw�B�:v�Atn��qM}4�c�\�T��_O&�z�C��h*�	�v7T6�^���:��<�FLrxQU��F�
�_�/7!Z���1�/��M�f��hIL��8�/��.��V�TV�
!%�8��:�jN���ѣ.����%
��f���P9kӀ)�q�t��6�C�]�-}k�C9ٕT@��OkY�%nBn�P�c���'��0�[��'�j;��tӪRt��W����g���{M~q�D�������R�
9FO�6��~Yel�nEX.TT�f�PT.lcT�M�T��a�}w�;�s��
�aL
GN��9L/�*[(U�$ (V�ʈd�RFW*.��}���ؼOTZ@����p���ylD�|;y�󅛯����D/�S}�<����c����.'<U�G�@~ᤌF`8��]�F����hrb���&J���1yF����Ӂ��(�&/J�1��N�p�5
�ܵ�݊�v��VȾ~��i��U�hݑ�@�xp�i�^c#�L4��<^��i=�li	[K��3/���N
�26"���Ӣ�� ��ט��az�^��$�%���#�Y.��@|�to2N�� ,ԡa/��A(��{���$�#�3�n��
׍z��ȩ4?���d�W����c7lu�?���V�+9��
���Q��i�8���D8z0�d�=�����
�������A��5�y���̶�Ї/�aW�H�Iט8G�*���qʋgaC�߂7��*�%c�h�a�K�d]�r
|�=�Ո��x���z,�����W��n䵻��r���������}��T���V��"?�Ӊa����H�_��7W��1M8�4j�D��2D"Ϊ��&h��P�y�r=�����&�U|
;�ݸ���
�h�s= �9�g�E��W~�Y�J����L��Z�栎�_��ͬ-4�`��H�GQ���>�~z��h��c���X$+I����"JGe��Յ
	�~~FR��#%�5����M�W�Zm6zN�x}��Y�-�_=��;�{}+�e��R҅�V9!�h��o�u&��6`�H�o��M{Ʋ��X^�L`B̲W��x}
��ln,��DQ�%��p��0�|-��#ѩ��Y>���C���t0l&�؆�l��m������`����a:��'X����7k|Ĉ��:���2��,⺘i$��D�{z{�DA����:�����6���X��.6%;�H�c[�`9��DZ�T� ��͌ոuGy�)6O����8
g�,�v�2
��7�'�3ܙ��g���z��K�ߧ�ˇ)p[q��_K�]?��U�LW�[ldp.�&$�"�ܬ�JOH���k��WX0[��L:'6�5^��0PD�J�̒��~D:#M��R�*a��@���ד(���Eh{���Zl��[=�T�K�w2��-�H�L��Wx�i!�P���/a?u���Q��D%7�˛F�z:Mb����z�?����.Wn��\U�@�a�>�@�Wh'�l6�	�Z��W�#�kၒ���`���1�!�9�H�_z�#�.Q�~��r�xD�gԖ�o�b@w1q37�j��6oj�P|̯�Đ�`�>�b|�?՚��"w��&]��΅�ź/��y�_�Kg�T �2^!���X��j��;_���o`��3�K)��p&O�x���[Q3VSD/���d��D=?h��a�����cQ��[\��h�WF���[���X�fp�T �-��+�w�{�+��M���T��`4�����gʆf;J'#?�9���lY @�#"J��b]+���%�L!����(u��
�Y�0��#{%�R3-J�K!�g�<���HB������b�Mf�k;��29��S1X�s���4I��O�$<����p\P��V�YWV{�6=5�
`���u��Ve��^e�R�\3�y�5�#J�)�D$)9�I�-hyVGB'"ߞ�D���
� 8.�(�]��8��8!r���5�]�����p<<{?�=��7����߆߷~+�o~�m�[q�}�~��m�eE�mۛ����
.���-�78����r%MW��%
�22)|�,r_��lr�5��B�R���00D(Tx�ފ�
�b	�l�y.Vb�ßD?=7>��Ƿb��[�#Oҍ�g������4��b�Y���b����uB ��e׆g�o�i �Ϯ�iV�qr����2���E6�w�D��4�/Y
.�?kR��H�>��)�._<#$ޭ�	=��C�cV�9�v�m��4��'q��xڠn���M,L	@Y*�ݣ�G���t=���q�����L�e:ͦ�E��;��#��l|���E�O�X�+��!��g,a7
`�����x}�+ �=���g��E<�-��.ip�}�Mƶ�0���:��]N�$�Q+��H��B�S��4�X�=��%5��ZK��gI�]	N�d�&;��w��$4w�`�2�5~��';tǗ��ÊQ䉈Q9f��k4E �R�o���иY���0n_�F6�������'�Y<Ig�'$�&D�nFC�4k��9�Ȯ3jȕ_+Ͽ�,-o��)%���8��CX��?����xD��C��tM�3i�9��C���Z�P�� $.�bq��!d���2�x�Z��L�Q�h�=���Pl���w<
�;E�U:
��߈wL���+���{��Z_�2�ȀW\���>a�\��i�H�G�����m� ���QM��Y��_��;�<|��/.���w�`���. ��g�����"�.�\&c��eRR�2	}$E�۔,9lL̄��yX,�GA�N�!��n��П���Н�1(w@8�.n���C��Ft�TWf4-�������h:g6h����u�*2 ����xO�A;�Pt6Be��Zց�3E�kWh��Z����#P�xcYT1?Gx(.�t���4�jw�Y&�Z,�F��Yû�>~�0ɹ�b�#�u�%3�YIs���+���PSP]�!��X�d,���T�LJ=?�?`�u;��_����[����Lu;V��B϶,45�И�Bw��V���H!<"φ����o��|>�O�#��Ǐ�F�'�oR��-��Y.	
��)�8_u�4�xp��^Óu�x8d��?^���[���ՙۯ�
W�Oˢ�CƵ�
��v�,���_�ލ>�?;ɣ;���)���+:N��8z�5.W��y�-]]���(�7�\����=l��\��Ũm�0�E����	|����ɗ�<��q�<��{���i�6���a�C\�%��kF�G�CDb^&p/\��}��I�3+&�u,I�^1��+�2#�,�Dz%���/$l�Fٜm��&�k@�1�/�D��	�T�9�y��%y.����2��f�<
�H`��sˁKƟy`��y2�fq�Yvĉ���&��[iY�$���>�W�U/���:� h���cX�d.�S�K�ܬ��4�\�fí�((��lV�ϔ;FM�Y����˗/���8�L��M�w0d�&��ٟ���b���ĉ	��z�����0J{�lB���`	�Ɩ��	l� h�V1�n�ڐl���0'xx�&�
i=��5kD���J��B�`dzG�b�_�R�]���p	hgݴ�@� �R�LU�FEx&r��xu;�n�P�2�쨾\�#P���Gw�G�,����nҤ��G���@8�E+��`�Er��a��~I���kX��)�e[z-���ϟ�l�,`��_����1�ΜnVNN9>~�'m�E�#��J�_�z-��7�?H�<^1��}���̛�m�(x��B����vx���U�Q���	��*e$��(���a�7�Jnc���)�;amӊ�J�RU�(�摕]���v\�Q��
ߩAduW�6ӡ _ڇ��q��h*�K�x��'�ϋ�`w<B�Tǿi�b��xW"�I�9�u�J�t��6�AQp�B���r-�H��8��cXQ��=^�e�z�(��m9�Q"�u]���d���u8���Ԩ��u=������>U��wF|r���_���fMp![��ԣ�}�EE[$9.��Z>#)��u~%����c&����gכ�Y�r��O�*���X�N߃�/�B����}x��f�,H�'c{��}�]����Cڹ�nA(��
U�<@~sM�F}����t�IҢiZ5ZF%@k���Lx�IlA�B>�3d�F�L�ϯ��	�&y�&�S�"lSP�ը��T֢F�h�����sF0I�a��>Ƹ�� �c�B��[��|������9�$VE״�G�G���������*[�;l[��NE���D@s�"�»��e���p8L��=�o3~��*k�qs��G)[�0��f��k���S�LfP�q��b�ް��::�S�Wl�~u�_�`��V<�J9�l���a;.0X�)�BY����8�.��U-�6�GU��/^F^��p�����3h~	�&�0.?]8G�.I�Rh��wb�s�70�b�S
���J}c���S��w������I̴���+J��)"�]v����pG��a���D��9	���[�
�o��R���J)�1P�PD����(��!���9�����DO�5�ј�2n���z1��D@GUju����\�JJv:85	�=�y0�l�
��_��ZC�/��yZg�Lf:p	�����f�f��E�/��Hm�`}��=א��u�K{��`��kC��R�F��
���>�ƦܳxQ�������������?Әwlg	��)E�X��s����~ױbZL�a�I�=�~��{�Pj��Q��s�%.ԊSC0m�L�ox����l�j*`�A49��4�&�����?���ka�Nh�>c�����T�FU�1���|���>΄�ρ�t�J�<p��� �����i�|��{�����5��@ؚ3,����xk/`{�<��L�m@R6q�g&�2BSC��,d�kBݚ�p�N6�t�&[Ď�ʹ^�4ܱZR�����^�լ���zȧU�|�XO�y��N����]7�q��&�J�x!�e�y4/H���aibM뷼�g�2��	"/J�N*�6�x��1�bUd������e�S�B�B�P��j���r%��*��#��z�_�^�9���C�.a6����w��I�����(�Fś���d�	��j�d�?1�`�������@�[�^/��kVtd��	>뉯Je�K�k�=�}�:%��r"e�˼��nzM�8_NͲx#ۇ�Vx�p�|�@�M�%����qh�3Y�̞�5<�5���U�d���&x��'>c"��`�/�+��;N�ĝ�7M���R�
d9����b�¥}���d��X�@!��;�Z��W��?���X+'P�v=X�2��8ˋ"�H�[�h���x���B��dqߍ m���^e���F�6��O3x��S�zՁ�Tg蒨��1�l�w��Ϯ�~'��G����1O1S9S���u:��*��xI��[<�C��I^�v�Ȁ:L�(�x��) ���m��k���f<}�2ఙFԆX�B��s��Pw^��`5��U�3�� ��+�!2�	
ɿ��^X�P�6�q�t�!A�8��ߗ��N&?ͷ�%�Yy���P+�u��Wą�.�f7����\������`!��&Ø��ҝ;Ϙ��nޡ���1T����A�}� �)c�Z�8
YM�if�����}1��Wj�ׁQJ�QO��'2ͬr���AIEp�������T�6*Q���(T5�Kˊ��*��/�zՏ��< ��2�䴘M�N�/X-+-�BR�7o�����\eq]����H��-�1�������]{o�6���C�J^d'�h�	CZ{�������k+��,wi�滏w$�Ǘ����6����.zȵ���AfqHs�a�qr"c�Ϛa��
��b`��s�<��W�#��rd�h8m����]���m�w\y�	?�x��5�\sx
�I~rz>MƣW��oO�&'��Q����IT�
W�?�[��|�q.���B��jz��蓨_a�Ȅ�*����މ7=H+�r�Z2��%BEO�$��s_�Y���>��5<�3��q��8`���R�"��LE�)8�#�H-�R��l��	�['o{עLx	Z �����4�U��^ ��]�{�[?�3���^PH�B�H�
�u�ې�gunpYK�y�5vU���4C�y���]q�R�+���{��8<��E�$����p?��9��
�*WiڜQY����ǫ�b���yN�Ֆ
�U.��0	��1e2���T��h���]Rif�� ��k�{��#�0���{���Sb�N7w��md�o*}�r~�J�9~X<�@BJ�.�N��i��n׃�������������?-�7{����u�)�r��|���j:�u���[y9��s�]J�'��
Q(�{������~,��A��XU����Z��a���5�,U#��3
[R}/F�8���#D2uoV"O��/u^ �X�=����Q����Zy�8d20��6�L�FYh�6��ns�yr����A�e&��������}=s>W�8��+���l@QAR"E�Aj�b�#ؗ��?	�o3���j��ӧq1��:�D
�G�{E}��b�\`�� ���ا1Sju��
�tK�W�=��F����ɛ��x���pl6Q�@�Y$��ޡ�(o`mcX��z�ȿF�@��#V�Yw��:����!�UU7�W랦"sI���z���j1���9�4m|(���(���R�Y�
˓�m��>l���MD�M7Y�#��}�_�vK��~�_7�lW��!���XF1�g��̄ۅXz"T��
�]r�<���t]"˚�"+IO�dIT�Y;�nO�!
�==*��Mo�JT��j�{�Y�um-Z��TG�0'(C�Rc)��a#|�wc�iJ5��d�$=�(���nWl�a����=���c���H�I���A��!�JKa����H�������6�b�y#��o7�e-�P72Ц���-@�(�k�墘]CPT�'fr�0J%�	��8>�c�a��΁���D=��v�y�עXvf�]�<�ag�C&��eҺ��J��-/MhA,�$mKc����OΟ�'P��QS������d���,��C�ӟ��Պ��u�n����V:�+�{e�Q^��(>�������z����];�C��;��[���8"޳X	�I$ϑ�k���!,��j�M1����ʏ�o7#����d�B����tV�6�2�;%N����$}���WrH���
8�Ey)����bp���A�-)���.�X~��D�ZF�=�Q`aUFx,L�F��#��̍�ut�j���4ĝd�q�0��?�U��5ha2�x3�5`I�`1��_���D#��yӲ,��)2hM�1����%�z���i�(M(l�-M)${��x%R�4��I�:PV.�F�ѵ�vt���#��4����O4mn�Q�n(
�Ln�<e��^o�b�DشgU˖�k�2*OI�[:Ǡ�{g+�
T+�������Y�.ļ�a���!�y;��&���x3�3�km�W���371�|��rH�9G3�2~��!����{G����zd�A���z�L��c[s9�J:ɞ(����7I�\9�w���ds��� ��l1��'���c�}_�|GCTȫ���Q �9���b���4��Xx�@4��ˌ�"��B��-9��[K�����Ni��~-�ө�u�u�6�����o۶�}�,9r")�6�U��q�I�n�"�V[�:�k�Mӏ����MJ��vۀ5yw$���qw�XVe��X���|͂�Rtd-/�SU^�Q%�6�<�W4N�L[��Q�+� ��Go�k�t��U���P���9�bF7I/oF�����W����_TQ5���E�ƆV&뱓�jm`�.\�a��9�`U�bğ�OR��a���w���wΉݙC�~�1���ݭ7�92?}�S�.�e��,oX� ��2sN.��i��{�]�������B�UiQ���t�L�ujr��R���×��կ^-׺�CS;����U���L�fV�)P�*v����G_�$�Z�U��
�^_:��Y�W�2m)�pH��Xs,"���YĤQ����]������
�-���H�
��)��?KWT�Bu0[�j���q?�$���ԥ�<M`�cz��� 
c��\\���EN�N!xǨ������bo��v�Ck�3p�p����C6r Hoқ0)�)���y�����oUn����su��R](��8��؃V��ө�]:�I+���_��a�z�9�yܻ�>�?��ś��H��\u{�ϟv�����=?:yyb&G'���,��ū�d7:� mpn�y�wy��K5���qo�8�vz���v/��t������r�7�7���?�O�*�C�mʿ�m3�m�N��8��R.3���=m���"�O�C=oP��"q`Ѣ'��c΢Թ�N�}�o#��@��=���Z��3p�Kbg�y��z)ޣ�^z%
�cC�^��!���J���=|EϱbŔ{ǣ�a�9�A��xW9�?�����Mğ���O�L�}�R�%@������Ɠɇ�" �lRd�6b�JX�䉢���hŵ��a�.e�`�r8��-i�d�n��e2<Fl�]G���Q`��kk��+�2�lI�����>�AE\�k�{��
#�0�~Ɋ���P��8����;M��6*UD�!���>�}��ί��l;� 宙u�+�����:�/Z�'هә��xR ��h�ۛ��F���/ɆJ�8��#x�K+
h]n�C�>�dip��f㝘�8,U�]�N1��\�
K��5H�Ij霪�CSl�HqAYD��:�X��um���Wf��z����d�h�3|jk��� W�i"՛T�n>�á�`�4��i�
�[�*�/*��e��l��Wv�2�?C���!��5m�2…"Y+�L����)�*H_�sa�D"�Ż�|a��ߟ�>1������aS�s��aM�K�GL_�V'(��w ���[�D7���N>e�2�:����q1��G�,K7�&�ė�8k('��Ey1͸*!b�

ib����/Q�9��B���I#	J�;��!��)T�L�{�����|Nކ���%2#;z��s�^<8�?���p(��6U�4��mQfbd.�"A���}a޳�ʀ��	��5<c1|���|JKb�^�J�/5�o��c�j�=3-(0�-C�Ж
{��gY����t�m�*6�J��d���'�p?h��1*���Ltv��|�䨵G�1�RQ�%�1��7[L�݌])���
��4R�ik	'�7!Fb���"�z���["„p��S~\1\�������>Aa����bO�1����6��Y��ۖB����
z8	P�|�'*t	�U�A�?�7�]rZu֋u�kێ��ƚ����D��r���Ÿj�E�����v2)M�����2�ui�,�U�V�*?�2L�i�
��$�B��F%Ňk�K�]qlQi88s���#��SB}1��E�e��T|���O!"��"}���5�y�.���7����vc�ȡ�A��@��#�8p5*�����Z�
�*��Aꣾ�������H�æ����a�\��r��S3$�=�`�
@��t
�9~$�\q�����E����`C��ׯ^I�A�N��Ҏ_���qt��g�����Y�w���.O��nk`ݗO�^u!��=��$������:��� ��^���u��^d�Q������su��)��K�W½�3�{�Q���L��ht�.���4��iT�Q�DE*#[^OO��|C��������$��X9)�I1'5sz�Z��
�Z�Q+�ZaQ�1jR+8���&^�2���7�2�q�FP�����F����ė���T��6%�$A����ڂ�HJ()u�R�'i�TO��I�ԅJM(!0�,�
�D��yK��)�&���a�Q<��H�AfԈ8��K�1�F�`�e�ӭ~S0�5hZz+�ߺR`C
��7(y|PI�2�GW� FL>�Q1�r(�; 裔<��8����4�ӯ��*���dZ\2����^y����Wn����[L;���p�'7"tx��G�B��om���&���%�pm�;;&7R�V$x�SK���`��/r���6��GP݁����I����?=�D'u�Szb��X)`1.�خ��f�Ǐ?R�H�n�#�#����[i��MONEr“#٦��lK�ٖ^�-^3��Q^�3c�M�g�m/���(���hF����E}��S���p�%�����������9ˑ)1.2$�k2�["rb)s�:�K%�n/mm��[�`(Up)��lکfS*EsZ�X,5��M����A�yD�����Dq����-eS��ߗQ�cA�I�t�V���0L�v&�4���j�����ϱ�RŴ�Wl屖��(eH�ʇ�P����i��+Ҁ�~N��pG�?��(%�s;�!�^�;t�����m4U�}��I��ik����@�b[�!�WSTP]4k(���8(�&[�I/�[[�;�WN��?��bz^��ΘnGӝ�ɵ4jO�y�����wo�{�֠��n�߲jpv���颐N��jp�G�<y2�,��{$HJٰ�p�
|@J�$�6��#r�gN��CA	N�D�x#:��8���"�>h��"�8�lYgJ���x��2L�NU�9�Pm�l�oc������;���"�e��/��=D�
-�;5�A�H�y1�|��Q�.�k��]I�G�m�>�Nn_��O^�𸩀G��)fh*��������x����Y�'��L�|gV>t�ə�/@p��#Z��{/ũ`��Y�.d�!��X��t
^�T�cb����}n#�+�dd���o���U>��pM�g���,J� � �xȯ��%�S�Ǔ�D�Mn��a���#���9�
��
��4�;s���e9ۥ9;V��a��Y���jc�Wتy��J>L"
�����g���Q�{5��m��H������/c���
�Y*]g��
)Ex���dc+�`��e��p{��qM�9�*N��"���YdO\��	o��>a�n�l��װm����n����s�WbT�����e���n�kǔ���_�x��{����~vF�Qqw)��{�Yz�l@,��4�5����P~��k��T�&�c�w���QX�]���k��ō>/��=���=_�{^�{^�{^#���$�zYS��P�.�}�
�ݫA�\�t#��G�8��`w�GB�F(��l��.[Vju�@7шٚ#*�f�X�D��v%�6�+����Dg���n�ѐ�6v#��-e�'67l�Y]�l�M�ڴG7l_���d<izB�f
�O8��r�M��I@��zjG_��g`[a<�
�0[|2�XK�,I`�:pu�כ���/\�T�t
���$e��
�W���`�+��S��v��bi�J)+�Hk�'�=�Fp��/�e+-�y)�Ƙ��:��f����kz��m�V�s��%�$M$��gy$p�'G�$��#ޟ�#���|v~,�B�I �a��}�>lv���z�62�8&��$W�z&�q���o�ؾ���-
�rڇG5·��&ϊ�Z@� %�
����z�|�U*��x��2ڐ~��5�i�G��PQ���ʩ���-"�:PDÖ�M-�����cVֲٟ mUi�vx�u���ԇ����7�o��14=T�7�Y-��^���	m/�m��XwyԠ��q#��80�p�0,������� !�
��J�P>}\�R����g��V���pz�r���0Ώc�"VR�*Y	9._�;u��04�J�0��'-s�%w;<�-?��nj['��{DŽ҄��k@���f8o�׊��2�}
cr)0t�����][O�0�+����	�eU&em�H�)
����-�QR������Kl�)�a{k�c�ر��s��l;�ٻP�6Ͼ6����'�O,�܀%*���(�
$��� M^�߱OwWw� �?��҈�
L�-�&�Թ����m��A���Y��c5�o�1x�B-�v�r��S��X�:;��v�/e��C�c��żKr��,��<��S]����ӗsJV����(sc�y���s�r0�����o>��A�?7�1���:�$L;ʓJ�^X,3�X�g��R'مˮ��9N��𝷉��v�<�8u�����\Np�6�7�8�5A��E� A�z��
��w�r�)�yyL5��5J�u�w�`IpN��
	(�u�Tt�̓���_?38��W_2�b���f��S˸,��F���ϟ�Z�kW��������R���֫���RX�}�v�^��OuoI�)�8�4ؐv4k
��l��Ն1'?I�a�z9x��x:ː�=��/����h7�y��Q��6f�m(^�����ag��R�4�I��#����E������l�W�U
̕nb�N�=mH'
������*��L?f�����qs��)7���=ozm�Rp�V
ߤ��?=��,ߌ�E��&�i0���f�~n$�'I�����L8(֕���˙���/m�����Vѫu����D��fw٪�X���fU>�eD�ݓ�I�At����*�H���kKJ�����?��������E.Ti�g��� �{��̙�"���
td�iH$=YE����Ԡ��	�Q2m��|c�����Y��M��X�"�k	�:L&%�눔%����@H��7z\�l�mhm�F�*�J��0}I��"�``�J:�r�d�<�����^�0z�����j^����^b z��b��^R�D�0�
�dL��fBh�Qx:��C�*�Og��pp=�4�&q��G(쐹��e���*^��rz����$&���%�G߄��7�H�2��N�{*(V���yR���c
G�c㒰|}� �w�9A���G/!�c�����
�7]����}q����jze��1 �4�/��*��Ha��Ӟ�k�1_�
�?j�_���]MK1�+{�Š�ce��z�"[*��eKW�"�wg�|M2�i��=l�$�$;}��#��z�+E�;:��a���;x��ls�B��j�j�3�U�ڂ��g��V�b��
�m�����j�U�ft ��#�$���$,>�"Զu�����1�d�5f�q��uH"�gj��(y�a4��%ӏ��e�'/�+	��k9q������h6��ޕr�zR�ٱ��+��a�RF���b��j^�ץ���,��1��<�W����/�c��Bb��dՋ�aw7����.�h��K]B���V�����0����v�=;�����L��-Ch1E��bG�J�ƹ|@�y���Fc2��E�(c��7��%�I˘C�y�NJxqL���qr��S?q�SO���3B���>�����X�1��S�JK5�o��V�>�����]Ko�0��W�=$)����Ӏ�����C�:�jԋ�8]����EQ���Z�'Q_d=IS��U����F
[�kvY�Y���b5�֩���ä��8ѐ"�.����e��H�aD�G7�j�:��*cIT��t��Žd�~��d*U���f0��thbm)�)"���!��o�ְ%|崠��b���橠cPBT$3�$ÏPk�=CK{��sr�(*�l�Wpx�ó6(a#���&
��B��qg4P��C��Qo�ZMKoJ~�V�R#�@�qѡ���	)A`��6d���zش�`�[�X�~]�nբ+V����zP6���€	7��v����p���Ф��~[�G���$C�a���bH�]
k�iFkWM἖Q/���ުhf� a^#27��$�!�L�V&�#X{4c���Q5ݶ�+��ҹ,�߮�_띋�ݮ��]�3�zYo�~�w�K�͟�x��<�C��~���L���Y�	���(���ѣ��b�JwB����o���Y�G2gĞ!.6��wX$�8����a��댞��R\yUUq>j�βF�,�_d��ϝ0*��$�I�br�${�����wi�B�)/�yX�X�+2<�Sm�� !8ѫ��>A
����L���tu���BAL
����K�R���j�y'��lĶy�z
L�OQU�rA��*���N	v�Zde,hD�T
bzP�D�
TP�H�
�T��	*�'_L�X�`�p�O+{�9��'�7�u�M}�@��~�w<?O��������38k8s��SM>�p"�]���N�
L�x� $BW�?��-�[J�<��5�����nIMf�=����@A���-^?���-�/����χ'��c�3�)���=�gV��,��,Y皨�O0l�uUb��9�4�)���y�R�j����6a߶����żh+Y�3�x�c-��>�E3���k�f������5�o]AX`O�y�CO��
���=�s^�A���^��nM~��MZL�>������.����7�^�y
��A�lCޝ�[�E���k�u��/O�S�AÃM)�HŚ�S&f邇Zh)����B�F�,	n[4F09�1����7
6��o�q��'}�?Ë�婰� ��v3x_W�A�e�?���=kW�H��Η�5-&�����@B6�B`0�ܽ,�#l�56�D&\��]U]�R�,��s�K���կ���z�k���路�Qް+>�c�d��'N1�!�QH�'�&�|��Lm+�6�A�|3+J�t�ݩ�����t�7�����{���Q�:�;yx�J�4�͡��\�J���*��W�D��t�����~~u��T�%��~�갪=�Q�"@�*��-�7��Ts���釙
�/��Zʂ��2-��~�@H�Qᯂ�୶��k�/G�L!Pƭ|7͈�p��Ň�8h��.��}�u�7z/����ލ�r�:���;�h���϶[3����Zt������K�{�}�����Dp~e�#-���Z�z��^�/^0=sq��1�x�$����TT���l�{N'���t��/&��d��ik�:��C��|����S��]e�w��n�2�ǵ�A�Rg���n�p&X���v�qY���߇���&�B�- �p(�٘��d
�	i �~!GE*N��
[̷��B�dTidԶ#���[�A���W:��Ԋ��}]�����(����qe��	~�3�� X��,b��A�g�i��h^gvnr��:[S}���/Y!�M��`ʃsG*�k�ؐ�L�eWpu$��Úwv�}Nh�BdӪ~�m�03��5��������*��3�`���Fw���H�^F(���'V8�?Oaɥm~�7��NY��gq��	��m�&7O�'	�xB�>�x7h�2�3*�e�Sx��A�X��o	<L����i�g6�,�W�aj�)��e�2�b���Nd���E)��*G��%����0��Q�еE)h����s:�X���#��y"�b�[aUU
�f9UT��ᄜ3Y6�!O��G��q6]��B}�Me6�> Gr�	��W&ĭj��p(�
N����l��~R�¶��S�E>`3��
d,�˗V��s[�;M��]6��k/"Y��5g�{;��g��.��ρ�Q�����P�3͛칸R�L�&��论�B(D���
u+�(=8G#�L�W��đ�:�}�mI��0M�$����n�g(�ӿ��\��2$�)��񸥭��d,㜴DI�&L�ɘ��|v>I�������%�0��*�m����,�o�KxA�L+iag����1@`��F��ge�2�
������T�}�K�{m����#n�c��;a:�R�:0�_��A�Vķ�F1��_�%�5��B�F��pO3{��7W�3�~iζ�Hnf�P�+��:����때��8z&#D���2���#�h��l.���9pJ`�g�����s���(:q>y��*�I���9�fe#�1�p�����]?_�_a���T!N����duͰ�qW�55b�9��?�=�C���ï���9(� �A}8�>�����}�L�pI�d����/|7B�?��a�ԅI�o��SR��G�V��)YH��h���>
T�9L�;��èUZAjaA��R���a�*�>ᴼ0}b$c��)�
���)t�7ʗ�
��^�
�>�~&�P�A�d+Iӟ��F8��c

�r���O��f�/ �DBr�z�ֻ��{�����'�����Fwmc�2~n�ɐb�*~k>���C_K�K������["�.��X
�0һӰ ��4���#����gF)>�m��BM�S��Ջ���7`�K�L���y��
�?��B��m��a���U�Yp�@+�6�XN#����@#�7�o˩��Eh�z�2��XM��檽l��k��)��ܳ�B����H�(��(1#UVI�:%\C���!7"2�ȵ�8A���r���:P�S �u$ЧD1�Ȇ\���ai+�HMY[��-o��Xn�qMaO�-"��tQص��Q�gz
�5��xL�V�;&h�k/^%�����U�!�1��3�2oB������)(g҄*r�Μ�z�����#�x�-ٔBV�ndh�7.'��n�
Z�����h�g���skpԯ�=�<��B��5��e�N|
���=�6��Z�9��t6}-�!����7t�^'��̦ҫ�~T���x��m=]��xǂN���J���Kmyi�s�����9��0Cq� �ʨ�%P[K���8��Qy�_����YQ�"�u��S�[���*�������׳\ڣ��gp�&�O�|�K��(-n&�e�$���~w�Mф�Y����A�Jr��$��z�ή�2�E�;W��^G柨2�YO>���{�[�������s��&}�]�pnވ��0X�"�"�!�dtGp�O ��C��E/'j�O�@��e�IƑ��s�[������ݜ�ax�q%��8����F?B���N.B׷�|���Ti�Q�ᖨ!0���k���&�Me׉v`���nA�v�p����R�vM�k��'?g�&ͮ�A%����}�f�����g^@��k�-�&�4��΋J`:��~���M?��:�}7�i�iV!|��,V,�F��]V��"�X����^�e�^dVӝ�G�"�pT�F��;_z�n@m�X�
Gơ$\�`�\��0>�ug��Mj��(-��3���BTD��v��Qh}3��� Cq�؛�B|+�y���َ��v���aom��No�>���џ:�.�Eky����\��e1I:�e�m�M㺭
���s�Q����
y^�~����m'��vq�����i���r6�'�>����xx�����x>���^��*.��V�si`���u�`����M�:FF�
��}�~�+����m�$w��k˟z�Y����I)�Ԩ����)���r��	h�?~�ǝ1n���M@v��OO|�:�}ۉzZmL&�k�	k�O.2J3��O��|�;�w,�{']j�ZUf)��W�}}wRE��JP�i�l���odrx�_ϊTjHtG��_�[;���Nt�:��Ll�sL�q(-MqIi�]x��Y2�t$T����լ�_�T@�Ɯ���ӌ�?e$a}�]V�n�$ȿ�ܚ\_�],.XS��V76�[t��8��N;u8��h�}{�=�^d����=��k�P�/0?�ՕǙ}�Uig�}`�a�
�G���/�Y���,��|��I���ٷ���*�1���:Q�$��*�X��E�ux���/�y��w 1�EƲ�]w��s�X���ٛ�_J'M���<�T(��U��yb�����x�k��]+�KJR��b=c�'�dP��W�B�iO�頙Y��"x��X��)�:*&�v��b3«�h���V�͇�1O�Ďm[��ѥ����c��X��!���11��t.��T��E��ꏺ~�29�XC��,\G�qH��9�P��ѝ&*G�Սշ�Y$ih[ �HC�1����ە�e�Y���ϐ�\>`�b��3a�v�hj�d�V�W�v҈�bu���3L�y�B��۹���b�l�T�9��=S1j��P�j`��-f��BOW��!�V�yV!W*�6��=8C�XB�:����`�*�tE!�`׍.?���2:Rw�S:#���܉�cl)q���������ꐜ%1��'�>���_�mt�9�B7��\��4�M]���^K��c�=hh"�ۘ{�
Kҕx`<��h&N�R<[y��|���FN�ʌ*;�"�>�Ќ<�C�/�H�YY��
n�@0`t¨��RŢ3��g�nLpE�p�n��P��g��;Luh}�]!9ڼ�(��a�5�lߔ%y���m��-�h��fŊ�뽄��q;9,@�MH;�Yn�f����H�a�8�o;ޣ������ ��V�rZ�a>C��.���0�n7�.����&r�"g�̲��,�πP�7�[j	�G�D:5�18x���"�hL}ˇ��%���@�kP˖�uʎb�Q.�B�b;��b���I�X��BRJ)�}��q-T�7z�#�-��@�t�u�J&[U�c"���#WGL�f�}����q�E�����^�σ�!� ��PF�_�_�
0H:$F}�`�:zZ���Gu�1z�5>�*Q]}A[�]b�_nK�*jxntZ�>�%�śo7o���X�Ձ��!Hd���L���	�#-����Q}�)��Jff!{��c���|���	u�DJ���i�sm,D�FI�p�RrA��3�W�?�*�a ��N9懩�]����z�ކ]���Ȫ	�dX3'H��Su�-��s�@[�W�k's�܎4I���F�}��F�F��Z2����A,�-_�˙�q՝r��ͣp;���\�"k���sCv�E�n��R�l�.�i�W�Bu‘�E`�$�4��S��6]~�R���?f���nj�V.���c@T.sk����[�Z�jW`+~�L_��7�{'���#�C��[yTz?��&��դdx��>l�ӳ�y��3�1RB��h'�7��1eFP\te��D�ւJ�/�l���Z�AVFł����QA9#�:���P����.$�����~�1�7j(�/�2���ⱌ�UQ�AR�
�`2�&b�
؟��Yl!1��i,�?㰪p�8[*�sl�OSEz��c�Ǭ�lێ�>�s��rV}�@�s���O(n1Z%m绵�`:�#	��2�.��H�6�:_�W�IYX��?��E�u�O����M�[l�l���mI*m.����K:�suL��g��V�Xa�$9�KXxw��+1�1�I�����b�|U�x4��Wf�;F�R��9G��?��s\�Դ����NZ\�Cx�k�S�D�Z10bˁ��<���`1E�w� +le@�+ћB���p���n]����)�X
o*�U-��O䃴F�u�!l���TGc�]���@�91#��� o[cI^�7�e�Q���u$ԱaįD�u�:�]��4�*�Oy:5��J\u�x����[Z�(�R‡�b�\f�K�j1�\��r~T���Z5c��q�{�:���E�1
����&��L��d=9[0�I��V��A�j��	T�e�;���������2�2<�UK+U=OC��}ۤ��/�)uU.u��N�ú���y�o`��3�b�q:�ls]�!r�&�YV�!����E�r����xw��v�w���w�O��������֫W���x�l�[v���7ǃu6���ݡS�[D՞n�ʎkޒ�����U������ ��x��_φ���3�q/���u��������;g�_w�=��:�Tz�s$���f���w;g0Gg/^�m��˻�����F�\�H���7/�7WWI~�P“ڊ��u[./W
����]�� ~���;x�b4�7cHt8I�$cK||[([���#
���-%����������"�(�>�4uB3���Or����0E��������v�X�7
����/�xD5��*��g����M+y�?���mX��i�ɀ�ʐ��|aҼUԇ'����d]��&�b��o]�1��	c~��j]Uq|�aO����V�@��A_�������d����6ج�N6�]iW��n��v��Eir���e�m��@���Yy�I�y���&X�s�+<�85�°�l8�A����ko�6�{E���eK���k�D�6C
M1[��d�m�ʑa+����}���SR��>š��<ރ�;J�E�B)��+e����G=�y^D�����ɷ�j��9�bޝ�@�ʽgB���i�!��8i˾��x��B�u{O%��䃈~lO�g[��U~GFlr�ء����"5ż����Hmq�ء���\]�h��X�y�R����>��mn޾ȱ�
"��
��!�L���^o]wnh�lW��.a��ʨ{��ԏ���[��z�7t
N�.���F��D�ć{N��a�8˥I��J��9����\٦\}��,��'w�8�R�i��Wi���ֆ����[q.��oH�H���ɬ���1q���`'�d�&�L#S!^�2MD�i[��i#z-%0*K�:�a�Em�f�}a5!��#��Au|Rma�Ϧ��*����~�B�������5����֏�E�Dk�,[Z*h޹��W<�D|[�U�uZ{�U�����\�r��6�^p�xH���36RQj� w,^1.ˢ�|�{�3��Z�_gx!�?Z���Y�Id��6��[V��[st��A	_Y^P�k��e��CU�]��H�+��6k��@����Po�E�4����,iЛ2��؏�x�I����u�x�?�V���Ea���+�R3hY��k�K�:iSJ����zv�eƌH��{��>HG��G�2�usŸ�~����۳j|΋B|?>>v~�4���H]�H��F\�ev��n�V/����
6ő�>&��r�X(u����ƌ����06�ra�P	~{I��=\�7�yV8�,�|!���`,��F�F�у1�e��UV�Ӎ��`\��/6��˜�|�������v��*mes�a�`�����:k2p�U�[�l����)R�i�4X5�E*���I���O>2��TO��)����&C"�n˜��۟@�]�X�O�����E�d$]������H�����>��#�FH��D�b?����3� 
�.�)�2%�p��F�B
�p�c1�H
�a_mXJ�C4��_F_04�i�2��g�E����W׳���x��t&��
����,J§;��I��n;��
�#�]o�1a�ϧ� �'�T�Q�.��JYZ��@m����`:]/	��SpM&5�?�����ؾ�xĽ_�<ʺ�Z��?3r1��PDx���7z�)�VO��̸uߕ�o�	C&l���*�vvvZ��ϟ�ԪzBK;�,~z͓�g�$ѥ[���xO.�D3��"�^o�E���$%$ԭ�ܯ@h�T��C�)�U%TM�m�v曨X��kiT+U��h۷�&D2��aW����P�i��Ѵ�E'��6��E@��Y]Rf��C�C+�V�$2��#P��P��B��G��O�}�5n�I'Z�:����#�������cepJu��O��`b���Ï�y:e�`%T��H=����t��>���I��m4F���}	Z�D���d�ƀ�)7��,Ƿ"��<�N��
@���3D�cA��=��.�!%���K"���zV_K�Q.R8�e˅�0TF��ԃ�G�)���xM��y;:@��GA�n�n_$Q
��!������R*f�mY�#֚� U�B��lU.i��/m%�n��(���J/�O����S䜃p�	�]Sx�i1i�(	������/������T�a�dh1R@��.q$�m]�DY�(��Xe3���	Q�V]غ	f����xV��e�DZO�<�H����?QbN�>>���z;m+P�y=>IGt�I�ɩk������e�Q�wY��C��z��]�:8�=�G؃]��.`��%�'&E9��9S��{��á�p��BaL��~�!t[<��0�O��U�����ȅv�E�{0�N[�r�$�PU�2��w���n�?W��fKP�0	��O�Z���k
y0��f�t���^c��`5��K�xڟ_��;�r}.�1' ,?*��@m7���{]�(8e���6~=�s��B����X�x!+����u��&�&�����&no��tI��p��t�RMc'�<�1��ܻ�|����"Ɂ{S:�	K{ �*%�M�"�M�u����������DlY(b�����135�"g�F��2d�$ań�7L�t�\25Q�����A�o�zə:O;7�6
�aP���l۷E��M�1�}�@�s���)���!�/���]KO�0��K:`?i�K/\�Ʃ@'M�K��6�O�8�#���m]�x���'�J8��
lG�u	+E���x�j��hG�2xC�xn&��1]�./�A{�����x�!l>W,� }��0�]w���p�Rj��;_p,��i�W��]gJ12��$s�AL(�
����2]���g�f����z}s3��oR�l�N���.�� x��A��e�~^
����F+���AK"r�Qa+E�P}�w�R�9]����0�o���S�|�jN�YfI�
rk�8�2�e5gt#��`��}�V����N8ɧ��}���H���*�G�Q��[v�q��S�k���s��S��J7\}x�撫��d9ʗ��|���3��(�ʀl93
R�f��.T�Q�ꚡ��0��`1�k�T���x~���Q�u�s�k��7���]{OG�?��R���m���
�LP�Ԧ�bP[E��[6>�|��w����vog�Ώ��
��ξgggw~�S��$1�|19�@�L|p��p
`����x��iF���2X8�����/.N����D�������^����U7�_�]����4L0Ӌn&�7�t�9�6%��m�k�ۥ���'��@T$�~�n�q��	���P.�;@�P�^	�ɀ$Iż}��*t�
���1?�"�oƳ�\��BV@�H`��ӝ���Z �ha-�ڠ��4Y�����\����}�4m�T�&vijk=nN����\G� ��� ���S�p��:��k���7ˍ��4����U2Yq��e�{�v;��y�G���~%�h�"��ք"ګ�8p�+�{�v.n�i'����ɍ�o��ٞ�پe6��A�ߐ��J�l����W;l�Q��f�.�-�-}�J�e�Cf������
�����40*[Q��^�;��(۲":�0{�x�\ٵ�V`����;ү���С�Y3a�-Uwc[�P���۴K����2C��0P |�L4�,TB���J������4qP��9��Uro�mKF
��r�q����v�3���7�|�tT���F��~<�bv��b�C��K����E���q�_��C�n
�{~Ə���6���!z�t<Ϛ�=�\Oe�
(U��U�
#U��!��	ε�!"A6��������Y���f��*`%Ի�;�f�I$��.N�8������x��O	����Y��:v��'Q�d���uy��",#�ra&^�3���a!W�9��'�<zu�`��@��M">_7��5r
�]�����Q0�A�'������� ��'IB�iH���Z�IԲ9o9�kD�b���
#�i�U�'F.���q�̡�u�z�d.�*K��{���`ڴLQZ���"j��xd��h�Lr\DC�3��Q�+��=~��.z�]��1A��J��)��l�2)y�l'I2�W�UhmMl��+���NTj'��=\������|����@�Z^���}��Nԏ�����.��,2c������V��F�l���+��:%��Xa��N���I&�D�$K.`��Td�WJ~���?�����s��HV*_y��"YA�J�<F%i��Q+8�`����Ya�-%����eK�����S�c�@&����P�A.���ڡs�82��LV��V�c��
@C��%H�Z�s(��3dnb8t��`��fv?���qm���K���Rz�CM��!��*��V�����scҘO� ��e,'�R�^��,�'��
;�@UA�1��R|
W��E|�u��H���DFI6�v����x�`�9K�_� �#��������a<�<��uӛj:�k����/rB~:��)(P``�黾��L�T(���Ɔ7]�qem+?����G����?�@�p����~�D���H�M�z�=B�d9��ĝ�]_�)�?�s�����n<�~�d$����m2�{�W�.���x?�ԭ1|�m��I�՜�?��y�KM��P���n%|:�]����e\�S��zG�qv��7�"�	��+���{eټ�j�����Iz��;::j}e�S���U��Q_��oxfӤ/Q����D�ȪN��gx����،�\2��������� ���?������/�ź�{nYꬊ=jyq�"���Ծhj�a�>������~e�9���;�Z��ʌ�θ��	�?qC�/����N�0��W�S��H\�z$N���J}L
CCh�N;��$�nU㸍�ڮ�s3���0䁸n�t9�n��F���V}\��A��0cW�"�$�l�w\���e�Y���;�G���I.[�~|ջC[�b��<�2A��x��NXI_?�N���h�?�Jć_����;*ahXǤ�PQ�,�Pጌ�����d���5�
�Ud%�4e��\���o:�SGǝ��7/?����{ �F��19�a�}ɼ���%���l�����饝�.�c�D�J�f]dXQ:?'�����v�Vn��AA4?��i��1�i[�k6N��M
���5��C�VU�/�@����SΞ�/|���.`�&W�K��[R�����f��	Ro���iǟ�^FB��+bbDfL��)iSN�t�\���,.�*')Bǀe�;[q�F�����N�0�sV���I�z�����I�XlH݀��ߩ�$u��4.{����eǯ�=�	�8�Z޲�v�cR�6'����5vW��-��F�Ӿ�VB��6�����!�#
*��x����(ް�0(k�=��q4p���3W8�\b�|���_����m�{+ȯI4"���F7�l�o;�j�J� �аS+��~��c�uK��_&:�K�`�B�r�]OZ��8��U�W]�ÇX`�ly�2�XE�(�5�S��
�b�h�/��َ�ᴫLm1hMXmv��bQ> ����r�˽���/��l���>��U�Ϣ���/��W"q�"���\~���le�ٺ~Ӧ�,�_�/��6��˗/Y~�&�y�yQ}P���k�����R{�IrS��
��M���k�����9h%�m	c4
B�����9Hۙ``L���6���z�j�O�0x�m��X'�i��_��jBEa�\L~ K�0*I�vG�d�omA`8�b<�"����!��1}:���u�SV��&�d�%2��c��>Sc�ʭj�D����.�̶���-�����ѓ`$�H|�pO>�;�T8.nj���{�DIo8>�]�����^֬�ڌ�Y϶ዟYg�?��"x�%��!a��;�i>"/�E��B+�	,�)C��
��s�(Cu?��¡ɇD���B7sH�����<��԰Q��y�![lF�I��cI�Nj�����C�� �"OM�	Ƃ�Z��%��@-�"	q;968�v^~9�Cl̀�h���l��{XEVVA�H*�N�p��S�@2� [ґT��d�����2p%X$@���j0�=�Gh���XMU*1��G�7��b�B�T��y�����ŋ�Yr�0w#L]"!M��b��K>��
�v�=kw�6��+�ݮ)Ŕbw��{�2=�c'����M{||TZ�mndQKJ�}������EP������E`f0�0��A}�lBpudfK-�0Lkt�vDKj��؎0��tLKr�99�^�d+z��)C�cI5�hf�rӕs0l��y�H�j�r e�
9:��<~���+q2TO-���a��͆���anUQw��"\�J�R{TXXY���MY�H��|L��g����SQ�4h-8lZ,`L��}	l\�UFR?}�
V$�I��pg2{-/�F��l��uz=��鴋�9�į��ޏ(F��u�vȬ$~ �s��z������a�br�A.�
�_t�S�}��Άl<:P���d�;Z�Ў�<��^�`%���l�8�ZӘ/�����"`0'ڜ��6T�P�S�J<}��n�v�o���y��v4�k�0V�I�@a<��|��s7���*�}e���Y�0H�b���, *��K�1��l=�+K6@�\G��>�,Ӎ�]��+��#I����v�Pb�� jyYc`����C����F�Z �9y���t!�X6���x��iT��v���
5�
�XW[X)/U��/
z�"��C�����������~�a���hc�#2
^Y�#�rw��΀tBg
N
R�F�Bρ�p�B��.���Y�w�W}���Kھ��7t��djF	�F#B59�>	U|)���L;-�X�Ť��FlS,��p��{i^�[сP�8�9�m�^��U�h�_up��,�6�Yi��wM��T,�F8��[����i^x�ƴLwh��b�e��B+K��$LHS
�l-H�T������b<�M��<����9�ѝC��+>�܂�&���:�Ё�������H2��>2�z��B�����'{:�$CS�֒�X�V=�͹6Y+
f,Ɠw�1�P�f�d�V*���V���hn�<tq~O�'h�,I� d���k7�jٖ��i�/v��7FQn�%rL��e6/Prio���txI뢚��O̬(�cC(hZ!�J-Z�=��_�!y�NTC�LD�K�3���!yjҶĪ��V���>�G�`@0s�uE���9OpD�%+���@[=� Y8C�U� ʓ�#��]t�T�]��<M���V�
�v��3������$ncl�{�j�0Ʀw)WZQ(��?��@������E��|��&n'����^�����P1�P�~����k��Y]��'?܎��%�Ln��
N5�g��g��H�(������x��O2���u�����CkvI�F�B�/q�E};�/�Q��^�]�+|��
g�i��e0�.F��r{��b�q'�����n2}@j0U��u"f���26�z6���������^Ύ�i#n`o"'�I�t��JAEqH�q
ίܐ�JUl�5��5�M$�ܽ�=��E.�
�8l�:7��5��Ez���d�j�*1W;Z��V���+˹WV���W"BgT���˯�����L�A:H��郶�.�z���aȶ��;6#C�蠶Bm�	�1L�h����|7
vvt�ʛIP/�m���^*��Nߦ7��EO�:��S�d�dBz���Xf[���R
?��Ɔ7�0��D����k쵆p����_tiHS�lMvpcBzʇ3E���Mʩ��\�Q9s�)�&o��v�
	�[��X��>Jڨ����MI5�$�p{�u�F ��r#���CX��{�
;
��b��B��q�S#ɫ��i�G|��3��D��xz*l�x��?� �S
�!F,�]�?`���.��dd2٬��]���ٜ�}���>��K�\
�q	�򺷙r
�J�^$=~�m���,sZ	�v��
�>����'��d�|�=�.Yi<Y�i�i�P�E��@/��[�������*�2�3�$��?w3H}wz�E����Š ��^�#�?��&�%⛤��8������~�SQ��i�;}Ah��!�,��t|��1(@Y��~�����p
uS���F�?��Lf-�]<�g4������L'l��s�@1J��p�^�P�:˗�������M��(���C�G���1�ԁ�7Y� �ǀo赯���-�/1
x	^�w'�(��']gI����)���=�Vbƅ�ąV����I,l���2��J���.�T�E=]Flu���Nײr6��=g�p��b���š�ef!\�i���9c&���N�SҒ*��!��!:�}�Q�p*P�L�,�����@��
��Q��k�b�F�i��æT�j�T�D�<��+-վ���M�g�]�O�sR	0��)�P��4�����M�
C�|籚�Nv�^M����2�"n�+�M�SQ%�
���c�堂�҉s/���p�ɕ\\n,���(��%+8kơ���	��D/�t�]g������S�Qg+n�DxB���lX����]����T	^L*8�ё�>%��R��P��8I����n�_Y:nBܖI�����נ�ed������mMMNd��Db��!��I	����
L����˔�剤��GY�B��� �$񺶰����p�'
�'�B�d��*����Y����/�Y��U��!�I[�p(��l�W�V!��H?�n�d��$��T_t��۪�k~�GH�n�F+����V/Q 9u���	O�+ :�]���xR��҅%GQ�j��P�3������l%�&�!��2$�+/%�۽��h��ȘP�T��%��-|<�q��-L8����O�(
`I��E`��\��s�U�:�B
N��Yf�O�;�����Mc�&r64C�7��fW���Ķ��:Z�˰ߦ�Xw��Ry֥=}X���ʌ����,?�Nxt\1�Z�2۸�x�"�T�W]�T��*O��.W�
�Ka/8����)��]})��66\J�[��Q,B���N%z�
^X����K_X�Vd�P�e`ZgFx5��q�ج>��5V��<V4��\QW����u#������@F�pc|xcd��%���|��~k�CQh����ͣIy޸o�B��~�ڐ\�M$o�Gƛ���c"8��|����HF:�3���QA��a)�A��np�ҳv���]�0v��5�8
�	�j$
�����Y�$�H)ư�`���!{!$���p�C@xq=�S4�������^�d_=��^�r=���|��^47S�4��ls@�pZ)��I�m!4>ay���^�G��~�v��\0�~�pH���oRL+��>
��Vm�$��K	WF����]+��0�2�^�J1�d���>��`�9-�q�B{�I:�������3(,n��,�׆T]��Mwr���=�ߍ��x������)K��j��d�E�V���dO�"zg㤛�z	������_��x��T��'X�2U��s�0��G����&�I�Q�\�.ծ�G,���1|Y$�����;\���+�r����R��UvJ�(�l��]��F���&2�!�U�mo��"H�X]i4��������?[J6��0��͍����u4z�!���t��k��rMJ��j|"��ͮp��9l�K,Lԝ�ڎ$2�=��q�]Pp&H:����$�"{M�w}����*E�Z-���/A>r��܈�	,�ޅ��3�dLW��H�7W�,^��+?��U���;�hc�a[�]�b�Lo����rE�	�3�Q\���A����Y2�s����<Ke��S�f�����3��>���]G^�L�𶖫琷�储����6k���-�'��B(�s���V�}&3.�q�����(��
~������H<��jȇ�
�7��8uM�ѣ�t�e*�RHq������s,��3��;DN���Tjy�S ΀J�@��.FcE����O}&Z��
j���Y�tD� ���4���nҲ�آ�G3���ľЦ&f3�p�huF����UL�+�������٤Q/��K5��ܥ�Ĝ�w�Օ�I�
�Ɨ}�� 	�@=����&���ʲ�
��mcM^#�MKŷ�R���,��~|��(LKWZ)��
M{w���M��7�x��R��ODF�cȻ0���S[^�M1PW��2�~��t�BG�b��t��l�f8]��>k��ϸE������`N<:�&�Kb`��fzlv�=��]���
>��;K|�wjϕ�oq~|S���HdM=c�p<��=�y~�� &ri�Vc-3"{�qaP�d#�� ��p��lrW� {Z�G�b��a�5�HB�Ԗ��v���B��8Q�͇����VX�r}v�D-���+�����TA_˧��V&�R�#�:ځ�C��/��n�W�3?����.�	�%����bw|��,9/��� 9�*Z�c�:	��A�hj}H 詃�JH�r���v )a�4}-%�C��mv�J6�#�}���������-G�Yv˰j!�K�Za�v:�̦m8��t5�ʺYm
�__ߒ�MF�D��xr��;�>�=�?��r����+o/�|U6k�R��:�6 *�R��xlP�:���Yx�[l�~d�cQ�q���A��R+��~С�`��(�q"
�>ϲ�U�+�_5��t���k�6�p��"�6w]�Q�������͓�h8�GhD9��_�0�*����(����t����Q�]nAu�ra?%C��^�P�+�Vd����+��c�)�5e�ez�8���0*Ԑl6��7R�]��e8x@�a�_p���=m��-g�B�!���-$
�=Q4�i�<Tx���z���Jш�ۀk���r|��a^9 ~�A�"�X��	��¢��/�2�/h��R��B@W��<�p[���oRr�.��5;,<��g%1L����
\y�Iرw�zO_z6�\��=��V^�8,o��g�)�Y��\��f���wfr6����,���S��л��Y��Y *��@]��,k�~6�vL��M�(xE���F��4"+C�G�Q�Vin�n��/��Z�>W�ƀu�M��Ɔ�]ϭ!�FB���5*���\cDJFЦ%�=!@s�?%���>�L�}��q��{�r��I�p`IA��RV6|ǁ�W�l��0N�
�/�)շʺ%�}���X��AX�U�y��K�-�'4S��*��Y��!uu����੺�B;��Z�`$�yy��|��XoIjD��
\����!'�67Ag���U6|�^S��C���"�J�盝�a�
����䖜x�c����b ���P2�;��U�D�@x���&��E��/Z���Kq�^
�!��<S&�fnI@�`{��x���*�
q�-f��N��z.!''%�T;���d�FT�3��d9��]�nV��_�_�N�L0�l�>&y|�(�UE��¥?Q�$7�r�a�r��U���z/i+`��Dඨ��$����UV����]�,0��w������+��2l�w��^lmnn�MgjT.��I�2��7��n<�5i6��s8�ڜ��pe�sb>j�lS��f�Ʊ��4�Ĭy���3ЙM�b�a����؇��:k�@W[
��V����6����g:��鍣��j
X��a6��������A�Gw�Yĥ�Y�39��������C�N��o\���
�Ъx��7T;.uμ�
�Y�>
��1�Ґ4zt�ĭ_h�skZX_����ƅ5cx�(c��-���3D[46~�i���������F�\	�[1J?��������G�j|�M�gk���^HcB����֧��rTSy�Ҫh�x��!�N�5"N!9�w�v��m���ʸ��\��O�-���
�#����)a��ap�W�A��6/b!���
dH]��Cڎ�'��*�$jȰ{����)S�G���z��-c^����."�i�?��o��5��HBµn��=��^�~�FF,]�.�-��E��
h��A4�{eZt����]q���?g��w^�ifoi�,Ożc��g#y�|��C����ƥ�3���A��nʿR
�D�T��d��$K�
�i:iʿn	29������a<����f��/��I��X�//V@��)K�C���̚���<S�
��Y>
�v�4G����T�"t���~��q����X)e�ߦ��(�r^S�Hu[E��+�D��4��nx>�pQ^4B2��5ӽ��J�^	�}�C��:*Y���� �M��Β����S��Դh��K,����h�;PwMːܣ$�ϳ�<�(fuJ2d��9�{�a�`��T�j�����s3�ܐ,�@�Êc��.�A�;n�POd�K��':��
�X���2�\_�]�ԑ%�v�.�R�'+�>��]�=�p<��7!�{�Y=q�)f ��(+�*��q�`��������B~��I������,)����Fsqo,6�(j��rc�Za̍�ּZ���bk��D��Pjַ�q�(숱�.��=>�9D+$z�;��}&ŧI:��!��fS�}s�o���9�{��(i� iևE.�����п�b.���P�@��gr̈́Oy:&<�}�
ɰo��Y?u)���S<��/�ԺV�G�˷X�I�@����32��}H	�"aX�)_���L�aʍ`�t��m��JD;QK(gG�UF{�'~I�9�'3�T9~�R-�C��*�P��;X�}8�k�B˾��d���zU�԰N�
ڥ�j5�ڬu�k�K�_�8�:�4��T/.�[|����̌������@�5�pnyN��QG��B���-z���0��(v�lߟHI�S���C�T�������?��?�i�X��#E�?Ҏ�jm�zb+���SZM���M>ҩ��L�-����.���<bv�j0�,d�,xX@��1i+���Ųb��i2��E�1�7�!�W�Q��
�,�U���C�~]pޥaIr��Z5�B�bE���$��@�֬)l; Թz�J�އ�(����X��[Ͽ�����r��t��ldj2�dž�Z��*a&t�ˁ�1ש��e��dW�Jb�U���� �_�`��D��<���(�V)QD���~_A�H��)�󃇄;�����i:�/�9�>:���x3E�
>'J�;�Ur[W@���#=T��WI�����p��C�-�x`�&�d�*��]�M��i�ƌd�o����-�f�X����2O��C0y��[<��1��0�f��L��ǜgJ��P	'��Ee��RV��*�1��ۋR�?�n�n����T�.�^����yw�w���ٿӑ5n�=�����������B���+��C�?z}�<����4�	�}rV�����֬J�ԫ��,���I�)6�f�;�ی�J�
W�RS�!�>�����
�L1v��[o�YUm\����U�*��+��\�z1g���ֻ����X���+7�Z�X
�����8�]蕪Z��WX��c�2�j=�OM�^�eF��b�a=h���n�t��q#+W�%F0퐬��c�U�Ih�5�a�����1n��،�Z\76�h5@^����
���s>j�-U}�	�
H�5����(�[X�H�<�DT����0G�U��/�����S��$S|J��[y=qI�ڎ{-H�	}������A�w�λ*&T��MoQ�ޕ�H`��4{hO�#3fY�W.��>����d��;h'*���-	{e�����#�t|����𪇢J���?��$�l⦄�O�����8��y����_��d?����w=Gi�h�'v�]�L�_���b��8����Q9�$�BI��f���-C�s�P������FZ���25
��w���£B��&�zR�z�"�!�$�؄"���t�1�<�GI!�Ÿ��5oҥL,��E���p��`�Zn�S\�~~/�	�Fӛ�^+%ӡ1k�\��{l>�����0�L��ġ&k�H�5Ք��z��]�4������m��=�\�C�詝���,�RsA��T_���=E�«L�;�t��ݎ��� WcٱF����o�(�)j�}a��0t/���Ό�=h^a��p6��Y���^�|�P� �M.���sio�*�e<|p7����{T�R�<W���
n�^H<Y���#��q�R��̴p�
PM�V�[�P
�(�7����]�2$p�,�5�uz��y��-�?�G��8�`�uM�����7��4N���u$����uYM��G&YA$����E���<����p~���4�p�S��^_�&��Q����@\���f�rPni������~iA|uL���q��x.|��:
~�s���GK�e�{�ک�&��v��3���cк�W�o��@�/!,]����p^�vr-��W��|ͱv�� T��Ƴ��$���ۂ{(�D�Q�ɕ�3p�_�9�3�H��w,c����F �M	���I��2��E�%�|�z�����3��
m��KY�F����ao�Wo�z�7sk_�a����ѣ�o��Ow_��J�t�,z���.LJ�K���.���m3x�s�z���f��؉i���|�h��ߜ�;d��T�OO�����&|Ђ;6���4�.� ��<�gؘ�W�R�C�"]2�)s7�v3蟽{Ed8���{��3y���!�1�A�1�!6C�j!�]���"��<zX$�m�����;�gK���r���.��Xx��A/I�	�9zC5Z���%�n�n�םW.
b��KwY�� ���z�l�t��,2d�~i<,^���w��O��7���G��?|�����p��h��]&��z���⛤��#�)��+��)����dwb�zA���&����5���|�#2��H�R0�!ð��ۏ�O�,1���)��{j���d��)����"�hT
,����&��H
L��qe5
�fZLɞXʛ��X��̈́��T�_$$Ы,B�� �՜Hܲ@�)���
e�C���9�n��N��R��P_F��z9!i���RՏ�o�"Kк���Տ�O�[
�O�I�f�AX��%��Q���L�ك��_�P+�z�P�,!�^������T"�z���T�}��V`U4�$��A3Z���t:A�eT���^�XF�DZ�o�RK�n�e�`
�‘ݑ�I׻�!:Ψ��#��Nj��o��	ԏ9̀5���B%�}�9_C�� �%P.��LӐ�eMۺ�2���6kn�銶�,����tT��-��,�$��BB��2w�j�����)��v����!bY6�o���^�rJ���6Xs��P�l h�4)( /\�l�ѣ�0G����A_�%�f�\�'���Z�|ly����fFa�CM�/Pak'1�.�����3�9˚'m�7A����nsF�$�Ns��Kj��~�H/�L�x����C�9?z�m':R�%Gk�`0��AP���2�$rO1�F#��3�gW@q�&Nv�EpU:�&�d'�HE���ec{��G��Y�m'l(�,��f��-����Ȝ�ٶW����`���>iZ�D�Bq�v�/��͟6���^Y"I�����
�
}�C�!…5F�3�G�zc��b�.�/����L��mI��؍4'���W_@O�6�����g����v�/2|�]���8ϦptE[�*ٞcJ/���6)������,�]$D���.6/�������]mo1�+Eb�Uk�]�(b�LZ��4	��j�
*�vjo��߉��qr�kח��eS���q|��8~d!�Ҩc��t����"��B�p�y��x��~�J?�T�*P	�s�K���+�q+�Dw^�K��4�["�L!�i����D�-[�e�)v5+e�h���Q�`�
v��NB-�y�/ml�t�6�?�P�gPu
s�6L��~2�p��
�ʑ���7���4p�hٱ�{=��Q���Ho�ӡb��}Kq��ꝍ&]��Ŵ	e��|r�JC�o�R�j)q��}�aw����x��ٶ��ꔄ���l\�J�"],��%y]{�$c�إr&�C��*f>�]oL�l&KSZ���!u��h��\��Ai�i��f~���9u���Œ3����h/zE�=���g�Y�	)�wf�$d�^�[_�m<M���G�N[g�^����n�~��כz��@����(@x���'�
��)z�zF���a�L��=��-%s�������9;�DE.F�s\2i���C
�L"Ӎ�;M�q5@�f�l���²��;IJ��"_?���\�J�K�K��eջI��[K�[8�,Z&����P��x�VE<�&�3��s�&��>�k�Td�CL�?��|X������j������W�,�$�f�T_��x!'��`���LJT0&W׈�hfϾG[x @�0��X�=2o�.4�!pMS��^@4\b�j���-ൠ|��O��zQ +�y�-��D������V��ݞ�s+��u��G��A�?]qą[`����PZ[�0���$2�l�!����]���ވnV��1��C��W:���Q��Md�N�w�.ړ���{�3��I�{^��"鴯��8�?�B�ȖO |�:PZ�#��nA�H����j&�&pn�!���:۠�<HU��YNj
\�*UQ�����:����h5F�f�x��9��F���x�yp�i@l���ݚ{i�X���Lw�akv
�E��6�jp'��~abϡ���ی�in1J9V�l�o3��M،[��n\��R�ނ��Κ^�kf�Q
mEmE;t�B�{�N�	E�dtek]�M��:T�9��3��R�`ȃg_k4HHM9Y�<��(4N߮�W���%9 T�O|�PHtג�4��8憌�mS��k��,�Y�F����v�Q)Lvi�!�j�^98VT�ߙ��%8H�?����ko7�{~�-B鼖�\�`H�
��F
ǰ��C`l���{�$W+;6|�o?΃��]K>���+��5�!g���Y$�=�$���Rg<��Zu0.���^!�.��U
�x�`|"�:����0
b�3�uD�n���"�=��U�����^�'�V���˭t��`1Kľ��H}ȗo�!�.į��+�#E��f<ň�"�QH3���`G�j=��G����S�	�-Ƿ��Ā��ݸ��˶���\��ZZt�p{�Փm�V�f���ZD��ۣ����R1�Q����x�FmK�Q6qL"�y=E-�"�kXEb8ܳ7�J�l}��.�"�ek�q�QO�O7��s�q�\[x���GEX!80��;`�����������s�o�{p�� �#=m�#2Xm�-�k��**m��[�����S�����e���^)�M�gwL�]�:�zU,oJq&�*�q l���b����ߺ�ތ�}��b�k'1qؐ�6'.)Sl�+J�}�x�È_ː��Fk�CTOGc����Q��ɱGĒ';c�8ϸ�ͨ�xg7Z&VWy����=�[�PA����ܚ��E%��h%G�Y�7��݁@�AޣNbё���2���dA;
���n,�B�n,h�.n����SV�zMN���t�%�tqe�ܜ>�x�T/����[}�-`Uу:��|X��r��U?��������=��.N|�����$��eU�?.�?��l���y���7��`@�OQ�]�
�s1e�1� ��Tnus���ϾiSL�ԃ%�)���z3j��k?��z<�[��x�i9��4;>yw|pr~ǟԚ�z�\x���6A�? ���,�-��TkL^�ךM��||��^�P�i
􍺀���}vOY!�<��Ч�P�7�����ofW�-��l�S]mH�7xVY�/ܕK��oK�gY���2q=�kN�	ʥ)��WG�����_U_���N6'2�
U{�X.��ln���Ul�̪ÝS���]e���=��[C[�Z���˗�o���
�Lp�stþK�c(��%	�/�<XS�x�Z��jVD6���W�@�p1c�^��i\�l�	!�
��\fl]�C�Y�@g��!5�P�W˯zj�����?Gk9d�����u�k(��^y
)��_�J?W�2���/$3L�i�ȸ��)�J��ж#�"������v�KK/a���Ԑwh�����4�@K������B?QGM>�*�_�K�t�U��Ԍ����%����	�
�Nr�s��[?ʹ�ϳB���6�8͓�W�U���[��
<ج!��{�^)S����Od���6�g�׃�́����"0}�S����P@�|&��+��12�FJj�����rnhV�+�`�\�9�P5�;$�>=����Vu��=��v�w׌n�Mծ@�cJS.�s=t�1���D$����'��+�"���x�@��Ae���x�q�8�Y+q�vܙ����f��u�i��"m-ҋ��V�;�u&ð�`8v�X|��b�c�t,w^����tC�3���^�8��vP�>�a�A�1����V����C�|�ڌ�l��&r&IeZI�8���J���|hE��j�.��� '˥;6T���`r��EW����0��k�y�5ܛA��|1m��/�A3�<Q\�G�o�u����=�<{�,�~�LK�k�v��{c���UǬ��Qs%�V�0G��ʦh�c
�sb��>�6VZ�2�7[U>~�1{\�Ā�14X�1@���i��Ѓ�L>K)y)��F+��i׀�p=.�bA�����\�]|5�%>K"�hŶ 
��_�m/�WWe*�Fo<4g(��Gpt�Į �9xg wd��1�|'Ǹ���ۜ��Nox���-Ǐ6Vm�1\��J ����
9����|�n��$�چ@a���M`��E�1��T��QSo��V��"����+p���?��SD�P�������Ub�
+��
l*�m��BL6��<�k�x�,��u���>[�?�����>�p!��G��&˫���F������;5�9�t�ۀ��8�]���"��+����i��6<r`TS�d��u���ǝ�~��)׬�����h�gt�3�I�I['�F�7�~d�+��N䄨k��&i!�ǻ���;?6�c�v�0^���q�'��x�I��'ݐ��S&t�Yr5�py�8�b�/o�a�|�Q=�=ɸڀ�Ոߕ6\l
�����L5����ڮ��F��A~�[��5D?�������FsY+���%Vh�;x���;���'0�~���b㫞�M�zG&��fW=�_BS���������oY�.�����M5^�S���w���^�0�a��Ŧ_��7�_b��i��T�h�$\���1FZ�����"<xA=,ӂ���7�㛶��bIЅ���R�e �)��\}���92`G���B��l2Y��$�{M���7!�+3����n�?�B����N����'�֤����v@�/W���^O�SN����E[7��lr5^|Q�GPB�}V�}�x����4Չ>8�y>C�M�>����p���ع4��f��y}��O��޿�\Kg�_��}��Gt�9\e�oU��D�t�r;*���];U�1"
0Y�f��d<+n�T������̒��3R���A	u���/*	g�O�c�2�lɪ�p���R#
�A��g3Ho�G�<D��@nk��-:f��+
�q�L�̺�7����v-��̙�!��
nea�GΆ�(	�:�&�kݳ.��I�~��^�]��1��d�����"]η��,�ӶG�v�;��߹ߴcW�ej�F3x��)����Z!�~b�ְ��K����tf�^�,�em�י�䇞lE�AK�����IK�d�(��J�C`�\Xk&#��k[~�
&)
mSE��|dE˶1d�XƆ,\���ǫi�� A9[>�0�2��w2:5��z�s�%lb$��:����/&�f�����|P��nP��7
���,�N���&F�ORG������ko7�{Ŷ8x%x-4@(��uǾ�%���$��mWh�&��~��3$WR�(p�!����pH�Ùa�1��	�ɋ��irh���!��K��.��=sGO��ݹ�#�ѴCF!����P��>���z��˺��u����=�5s4>��sTa����>-�t\r*�j�O�r"���L�UUq�g�f̳�'p��[�̏�?���R��.QbӼ�Moo��mw�e5� ��%2
1_�_�+�V�9�4�P/��f������ECt8j35��/o㻍��������!��}�/���>J:ξj����#�f�L|@"ZӱR�������
�$t%a�W�91E���X���dL{��
�������YS�^][s^?k��)�\�aIt&m����y=�kq��F�����B��o�ӛ��5�Îgz%;ZT�X����	7�d�d�_��s��^��tH����BxyI��񹺦i�}.��gӷEqCAt�d3ʞD��0P��_o�|d�E�xg'�����|*A�r;��樖�ޛ.V�F�����$�ͤa��40ݯ�0�Q���%�Ε�B�zy��tY
r��d}�Z܃$����e��{��=w�[|�<�u5BY�� ��gݬuv�ʥ��n.�����%�f����.j?v���{ך[5�vvm�}��"���l��#K�}!U׍m�v�,��oZٗ�2�+�7�C���Z���Z�Óm�rÃ�Z��܃[�k�XK-����޷/�y
��ŧQ�mA�)$�5�g���)�(�&
��HXO}m
�����x[�%>�݂GP�q	�)NA~��~:EU�\X���@�<��y~3����;,�FSÈ�EGV���mH</ym�@��0t����lv��`��6�����++X�Cڐا���I]̉#—��ܠ,,~ǘ��؎@��{���Ă�����1��&��<)�&�or5FW�`S,�)�E��[{�� NH��rY�΅$���h,c��6�.�J��Ve��!{yzv1|�$!����X��}d�o����bE���B�q�$�:���vC x�r��5B�ʏ�{��;�j7k��A(��G~X��s �M��8�7�-27ܖ-�ݴ�J�"8���
U1]o���Z�K<.e}R��u��n���h�T���簴�B~3B��ѧD0
c�\��zc0��k��%ϡ�XQΰe�Wش���;�H�*���}‚���5<�������ۯ��6㦰�kG|8GҌ�L�+��w8�!�U�Ab��-F���G��M��ޫch�[ˢ5펺\�uiOw:�lW�^�����A፪�9��YgTba����G<\;���4��]Ҡ��+>p'�A�؇��iOo�=�ǹF�|��;i���\�p����d�&@�����/#xm�è����
���qQ9�ፆB
��O1s�K�
��/�}�̪9�)�{ۋ캙�<_{�N�5� �L=F[\�v�8>�N�����S(R!{��g$0\���a�ãn�U��;u'��3��u>g�.�MA�6�E`�Φ�Q��SHM��s)'��no��ë#z㳾�d��
��Yǝj[�ޒD��U�k�Z�h���
Tpe��;8:*e��b�
���L�!'����S�D��j�������FǨR\�bg̥.�n�%�XVe��Ŵ0u&38�v��Ϟ�۫(%��9<�Yel=���vv]xG��O!���.�A(���w�oF��LV��Y�ms�
��=�L��ю\�p�,����ˤ�@Pu���Ų���Ո\/��<�b��u]�G�Ѽ�"w�.�wa��J]k����0��Ϝs�zE��U�
�,�Z��jw���\ݣ��vTiF�)�`�0T1����
nkw)=��~��	h��^��=���
<��u�.�kHt#�t�Q����Byz��h~e�ň]7�Qp��o@|�d1��r�
���@��`���qO����Q�n	��BTuf$�̜7g7|uo�h���ӷ6��d�U2!��
��,�K�i���{���\�&�+KnM�o�f����0�d��M��Xt���^��g�����h�a�Wo�\���*y�D�Uν�:%8D[ޱ�D�i�bm��lة�/�ď��K.4���ݶ�jף*�`�<T�٬݀2�\ôZ|�Ӣ��e]
'*}1�<{��(���'��o<����
ٛf���8�Ǭ�j�B>����饤cݲ�X�E���Ŏ��ψ8r6��Z��3ъ����x�&kgQ~-�;�y�Q�WI��aH8ZQ��r��U��3j S=E3[���!x�� ,y�&�!'�k�ǣcۛ;�n���OJaL2q��m����nz鈸�n�5܇Xhw�n��g���ϭ!�t@����i/�B��q�	\��ЯM������ﳜS.�E�N{�� -���۵�75�hY����z;OvHy������p��rR��#1Ś�4S�����#�z�h�A�?w"�o#��[�8��!
���z�v��Mc (�c��v��v�m|���H�U�<�՝�޿-�.�}R.�8[^@d���*�R�_񵍛��MB�+�<s��2 s�Oǁ���X"�<���A
�����7�n5��F���f���oT�44u��h7$ߝ!9M�[�I$N,�ûUՏ�2����I*��N�Mw��vB�@�;�$��Nw��D�^�ߪH��:��F%�N�t�G�g1��=B��3���	'��C`�X�WיL8�Mxؿ'AQfy��3��-��)0IP�ٴf���y����i���
��f�z��CF��*�ޖ?�p��
&�;�_��q����nυ!~W����=�M���V{�����aj2�
u��a�K�Vgk��AP��8$�@�.���*./�s�*��d�TO~��*�J6�q�"Ѹ^�r�I�ϣɺ�$�9t��s�KS�!d��_q�?L9�P���a�hb
9i�����BN����=�H��?p��8L覮Q]�u�V�	\�q�2�f�R5ҔA|2��扜N'j���5�d(�l�\�I]X:i��Hl*�5��iv��MF�-^3ӎ
�nF'%�c�趆��S�b���8�
O�J�R��`7W�{�	��l/3�w~K��z1� r~?D^�N?��z���2G��\r�Sƃ�,V����X��J#�W��\��u���5[W�s󟘕X��^����Ż�=7Å:
�&�U�mQ�;i㛙3�Y@���P�)bڰ�|E_׭L"�8]�I�B����1�j��#[OZ���9L�%�E�\�ΒO���61o��6�I��[|�!&�
jdXK���(�N'*�8��9~�P�^������P��MH�gGp�	>�e��������ojb3��}c����'S_P�/���b6���[�%���
�tj(�TW�q
i��-��,�(�\=������U�����vk���[�Ť�D��+�@
��fkx�V�����=7hR�GjM��E�+O@��#b�I<�d���Nw�:�ra:�/��8����B�,�40}�m���A�CR2S�b�A�L��(�l�������N��`���-��F�y��Jbm�v�B��L��X��`��˿���en�鼐������������v<��(�߹�Y�V�g@֊$��0��Q>"�O��s�r۪/�}ޯnU����x
�r͓t�S�
�M<T5�9�zxB��0�(�mS���
9�ռ�|��q����w�u��^�4���߫�9[���(�c[0*�d�s��N7TK�:��~,V��K�O���[ed_G��1eZQ'��2F��,x�,�1!F�$2�\�@1�"�EC��h�\f	�I�Y����o�-���L=��C�$�&J%=�����B�X���^6�na��2���еMR��ڦ������T�q>�Gn�Z9��4�5ޥ���w���7=CS�=��cth�z_/�K����]"����6^�.��~��O:�������^�19;v�N���Q��Y�c*��3��m���9�HB�Ml���"���B� ��\�����6{z�;��&�*
Dߐ��ٔ��ُa�-ԑβ	-�6I��&n�	˔�'�N��Iďs4�c؟��eJ��r�����.Өh)��^|��-��t
���ݫM�Rf�5���~y�˜��wֻ�۳�����)�f� h��v*�����z���΋k�n���jN���<+*(��yaR5�`��n-���XacT2U�&�Hu�tF�k�_D��S��`�m�k������������{�=�M���d�*�z�V ��e���t	��a��`mh?(�S���u�?h'I�����*7ε'�I���&�Ӓ&�z���HX�vj|f�T�}k�%-7l���?�Ǥ4��#^�}F���GC؄�@���d2	]t����YڨG!f6�i�L�#eL�<��+��Y(Y
�����]��rUO�FC��"���Z���M3�"
l�#p�{���R��Z�O3��<�	'�x5�o7��?IϮ0������0D�$�)>�0-�5��`����ɵ��v�LLO���i��Wߒx�KJ�Z+T)��^�η����ͷf�r��B�'��t�PZ�I߱6r	z��9
Ml"�;�N�k�xrz��&�ΐ2Q�i�d�]�s��l�"��`Ts֧`(F�b1�u<dg̠�S�D���:����s��	��o� �מl�5��n��h�92�f�jT"rc���'tx6^�w��*5��S���H�ހ��Hf�Sg�8�?�X�.�e��P�!酘F��s�z!�����f�.��*O��>��)�trq���g�_�����Jl�Sh_X���dzA4�~�L��?Z�M����/��Q��q�M:��x
��v�n�t������
��=�P��uCR��.�hfT<v*�VN��#;`x�oM�=�q��MaI����N���u
x��C�40��ICg�*CZ���Ɠ�PZ.��J�[�}"�K(�Yx��V��oؔR���
|.Bw��{$S���`�
�9N�4��4��p��4�7���Ȗ�@���ϟ��^`.��GX�����@B�1�T�3�qb�i�,��M�,h�;��<k�1^��t�*�1�~�:]�+C�T�l����Ct
��0��	Jh�i�6��5��
��;h��le�<c:Y
�F�K����lv��%���D��%p�}:O2�0\F@���_��D�^XR(dm�v�8�����������Ҩ��:�y�X@Z����K�j�o0��+�78����B�b�Rz�]g��c�.�V?>b����Y���M�h�|b+�_�ٌ�c{�* h	��i�"�N{@���A��}�>hu������g1��,��;��'�t�q��5���X�y�!	��I��4{�^���xOc^}T�c��m�'x_��2��}��[�W�=3��m��J�o��ف��*?RH��°�a6����
�g@ے��ސ\����=��
��x6;�g��Kۓ�V���r�YH�i*����zc��x�j�`|�Ѯ���� >��=�JL��<~.`.�$��������پ��Q�ͨ�*���c4��Xx3�H�!�����%ݶ�o��b���������_wJ6�ɒ��Q����
7��&��[�K��zn�ӿ	Ez��n>-��Eo
	H/lo8�;\�
���_P7Aj'�9P���>�ed��]�yl�#�C�C����Y�39�}9L��\ڣ��\ÀT�a|��-|�� ��t�a��B'�s�k�bNS0i;�Sn���<����9��_C#q��/���2��6��S��h~��%AuԶq�i&�4f>w�!4�utt��EP6��C�Xssn N�ހvJ�?�	���^¤(!�F|���,�=l�d�@`�u0�*�5䗴��!���;�”pV�5�u�	�d�e�r��A6�M'��~[f_�9(p��:��>��^V����w?��N��T�%�ӎ�C��C�w���؀�#sC&�GKX��
�R��gC,�PN�8�[�` ��ͽG�*0f?v�?�X�|�� `}r�i5�̜����]�j�@����(�D�&��k7�EE�)h�ZK�~|gf�iRl_$ٌ�M6���L�`�&֯$R��+1�[J�M_-�.�f}��bV
mRx $VQ� �;	�j/ʼn:s_�]�����m���ޮ��tU萎�v�v?��^�V�Z�j��.��pp�5�Ch���Ui^��S�V
��ӗ���B���9�ڌS>e�ˆE�����q��Y��N8OLR*�rl��y$WqY7���V-�7��d�`��;`�ި��o8+�f�$*��>
x�������T��Xq�K?����"��3<�bbN����O#
����UǛ:O�ua��i�$
�E��z4�S�0\��g��Y4&���v�g7������X3
�:�?y~8�C���R�9�^1c~���v���� �;X�*�v������j[��Y�q�#�O:����A�<���ӆg�,S4-����[��k�9p���&�צ�
=|���]�o�0���	rQڷuRi�- !���P蒪�2�i�;�;g�
�^659�?�>�ٗߑJvW@��!�E
*��Nc�*�fꃌ��>#��ƨ�Z��ľ�t�V���7g=@� ��6l�`iG��G�g�C�S5����"~�φ<���k��0ȹ��(��_�&�39�w9l݉�!OF�r%b�
�ug�:O��.Q=*���S�4�\�q��V���%����=�Pd���W'B���]k�Q�l��B:�	t��յ�2
+���.��,w��$S��#j�b��֪��Dۋd�2�k[��t�d��G{��t�~�~M����@W�_{">�dGּ�y�;0֝R��a�:����)��
���i?0�
B-�<�'��4�yQ7���BQS˺�/W훺*��1��R_۟�e�9��xu�=������?\��3���F�V���xie{M�1�ϭ�B�1�:2�54y����~�aC�ȿ�f��_�Q���zߞ��я��ȫ�鰋��3%��Pm�^�Ҕ�.��1�43x�\+��E]l�b;VU9k��nS�;<~���\�yU���d8��ܔ���T�4�hI���Lj����ͯ��€�|
(��h�IK5O��q�'3xw}�0� �~�W�]��t�I~eA 9'yUN��/��g���|h���,�s��~]�/C^&�V�/�����E}6�2L�"�I�XY�>�j�ҍI�ԎC�����k�"�Z��k��udY�@-!���`�#�7���8��GB)�����2���� r-r]bzY���)[6N��>\�l�WY{y�D��6K����Ezn<�`��Kp#MQw�/<Q��ZT�B�Çu[�>z�����=iwٕ�pB(.�$�9V
��4>��c�CglG-ۅ�F��*���y�޷��R�@&��/`�۷�/�\����jw�����	�j8�X�;���N=Jv4j�2xk&b@2~��^�>���6's����	h�tGt$яCE�Gù����G��|xzZ�3����L�u/\���U�5^"[!�6�Itv?���
�@[ۯ��o�$�{����'�`M-����j4�P�&f�n�r�6Cipt��(��k��T���[����mF_Lb|�?����`8�Н�2�t�-��!Z��J]��"�gM���C=*n�x*ڵ>�:v¥~�
W �8�F]����|ق�ܓ��N��<8쥗��+.JF�Qp
}z���o�S2��� {=X�DG-�P���+/���03�ѓF��j&P�?�8�I�6X+�_�6@�6����G�%�Jw��dSlL8S��[jޛ�mhtV��`�a3�!gT}:�2��u���(}�&{v2RE&�i�����=u_��X��`�0�"Pg��[o�9����2�\/l�E�4��mZ���M�+�������L3n>/� �.`�MpX��s�al�SU͵�����t�J~����HE��1�N��梶B���;�l,A��\<ɂFZ��.���|M���9
�i��d����EZJ�>���F#���"y{���ԭc��P�^[�O�"�H:��ӱ�RH�&'�^T<�1�����C�u���`���֧���$�Ud��\�C��z��%݂�HZPu4��XQ�!�zxIf�<:W2�gy���#xǦ�Ԉ�T��5O�D�h̪w�����/�<t,�6Le��L|!����"�E}9#M�LIby/FS��b�R��ub��H�L��k.E%=Oދ�tƌn_�r\/񤢼F�m���k0�ec+��؆��'/�X�mE_J���7���D_@tx\��U�?��2�%y� �1֏�J�Y5�٨2m�E�M[!
��|�"�{Y���uD�/P�I�
���" ʷ�H���^�	��51�[&l"T�e.O�zx D�~`���ŀ|-0�~O���Y����[�_�����Y��~_U�`+�hJ�^mI�g��
��R?w2&,�
�Z5{Gr��eRi�qt�lE
��L**���:���#R��
�u3�ٸ��!��ɼ���T3�
��*.�V��ԣ�{���Q�)k�d>���|�����J6m�$:���.ئ��&u�m�Rk�l�#�Ŷ�9_o:B��{��RU��{1<z�b�5D2��H����
�
֗Qp@�5W�a�G^��"��
�-���k������ "�
8`~9�f�L�����������i��|�*FtU��	[%�I��Lno�W��V�S$F&��NJ��SK��$��d��7��e�MO����>��XĈd����%�^`m�=${9�VF����ਰsi�5؝��f�%`M8a�����0�nCȅ$��[��:����"�W�E��%\�����x8&��ʹG� �atN��`Xq���A��H	��/�/!
֣��hch�r+V۩إy4���vְ�X��+b.O>��D�ݲGU]W�w�QEF/W:��!O�j��'��R-LV��6�o�8*0��oƅ�ЪC������y�z{��������6��;�e�Y\�Z�;#�\Ď[ j���n�í����DTG�cAc��$xG����Ԧ������y�|Rc8�����<��Lw�բ���U$ʸҡ�LVw�cz��q�TA���[�d0^�71��r�'��"(}`�)�^v�O1Ʌ���	߸+�����,��)�C~:Q�0���c(�g��K_{�+i��i	�}��_;��s
�dHO��y.����	�~'SJ��'�&l|��:���E��~G�$��s����m��/�ۘ;#���e�('��d�hC�����}K��)�m	$�
J'\(�^\]R,2^�`F�.���m¯��p>��� #������E6�bS�B���7�U��L��y��.fe��y*t��a5˳iB�,��lx��~��
��D���roJ��o��+�ey��U{I��P'-g�y�.��'v�CE��5�Ό�¯,4|��]�l��[te䇱��)�~9_�V�t�ә�����l�/�
�[w�ĕ{���Gkְ�Z��e�1�����h��.�W��⮆�%���sU_1�S�QL�z-��B��c��C���=>��ڮ�ʹr9�;�!�J=�Xq��
B�T�Z�l��X 
��Jk�����$�i����"����V�-�P�O-I4�*s�ڝ�Ղ����/��Ucm:�aw/.uX�!
�O�F$.;q�dF+���U��D}M%�Y��YR$0s�:W1F�1@3���5;��Mx�50o��ѻ�TKZO���9DH�$m��m���ɹ�R��&'�����V�����3��bJ�ϟۚ_�B���L��*�����&�	)6����1|�xMH0c��!��@��
(ܪ�
5N��{�}�w<��C[�)x#�M���1����;L\����u��og���+Fugo��(/M�b^�iV2��3��Z<�6�\r�<sT��6���FޘrV���n�	��E1s;�(k5�^Y7�ߙ�u�	y.{;u�M�H����mi�.�bKr�����s�8qԚI�z��F���$������k����#�via��Sz��揃��R��6�z�İ�����G���$�'�w�Ox}|
��:�`�z*���,�Eᚡ{
	��B�N�@5�]�]��G�FR��p�K�u7��	SԈ
[���s�EP�b�Pz1�q�A�r�ր�+��8�8#K#��n�V�s�l
~ѽ�=r��R��L�SOщnU�����v;����=e3V�
��K�9����d6�ʗ&��k*�(\6%������j��5�D�NJ��U�κ�?��Ҫ�ˡ�>`J���$Ej�g����%�ig��g�=�Wx�Wՙ!]/^�X)���^�����|S���
�	�Q�K�J����
C �Q�ͫx������������j���.L\�SM4+��@�YAh�FȒ���B���J��
6�#��g�hR����x��ԅ~7<�����0�X�o!�f��h�-ʹy���K�bK����@���l�#;{��p>����ׂ�Īy"�b���[{��됩KS��'i`�026p�Z�Ff�
��Y�ZI���#�j�
p[Y��j'?��t^C�y�S`���w�O�����a�&l�k��%o?�=l��/:�b%b �I���1��;�>`��#tL�`Mt�'a]�R��{���MXO��`��*��&���aT?5H	�z^Ոij�yRz�B~�L�}���ɷ0�oo��;#�1��h����߇,�-�>�g��I�<���:�ڬ�\`�eHۜ����ƹ�2�e�3�B�/�
s]�ҿ�)j�<O2��-�@�͝/��EX���[{�M�h{��S��?�$���녊�;A9���E:5�v`1��D�^Ft��~<��7�o���3�M�^��6j��[�Za�4�pw&����eD�Rg��8�������;5��F��\��Z[�I-�X"�~
�Mz	��o������'��F3�n`4��WV�<]����1w���0V2�⤞���фm�ܵ��wy;h�jg���^�0�[�ӺK��s͸{	���5D)�*�x��(��;�ip��̔�O'Cs΋eĜ�YRZ'�&GhC)�vw4��݂�@v��LT����j��LȎ�u�e��$��؍�ߛ���%g����/�m;8\pI��ۙ�Jіu�ܽt�tߊ� ����x����F.�T�KIr,����tM,�U���ua>U�L���
����q#��n�{C�ӿiܩ��@U:�"1�q3����l�$ī�e{!n�T��.f�Z�}����J�6L"�][����m�sq�>��%���5��-�r:��z�;��u,��h���q
�f1N#( �M��(ۀ;��^EB�&i��]Ub�����9���AKG���ʖ�z�0��G�0KT�-�Ќq����L�01�Jb�yp����c
�&����"�Sn��Y���	�h3��$vڴ��\M��f��4/�%�����M��X$��Zyk,FQ���Z?m$�y=J��S�#��lk��r%�O�{��DF���� p��7��#x^Ǵ�����۲�.Y�P��C4����\gjZ/�o�oUl�{��jc���Ul|�ڐ{�FI��FЃݫ
�Wz�6�^�L[��j�۶�'���@A�S�O��
���?Of��BX8I�n��1��T'���(l��E�:%
_� �;��JuKU�8�.!Lq����[ƛ��:ʢ޿\�'�U�2M�P�6E��'���,i��x�c�v���>JA�&�����ܒ���:�H�ʎ����=�KA�:��`�giB<��a�kν�����?E@qkT?��F�İD�H��s���R��V����\���Ŕ���r�#F�nzRK�fu�y�c������;[�v^o�_����7���_��_��y���WR7�	���i�Y���w�{uguG����j�:S�]KG���]�ރ�'��G��;�9�=�懏W_v�~����d�=<|�(c�B
,0���U]��N^>��4��ĩ'��VN7���}0"j*��4�$�^�zr9;� ���h���iCF�XÈV�UXf�.��f�_�+�7p2��+)L��٥p��?��ـi&à0�"�LS����fկ�
6�U��O]FjhC*�F�#��Hϓ+HӇ�;Ȉ�6����i���x��LjÄK��ku������7�;:�}ӨN�3��W|n��1�=�����x����p7"HLp�Hx��Pu�(��t�F��Yt2̌q��� ��9�,n�Ē��๾��f'�� >�s��l.6\��c�]�����I#�Bh�I8 
��(r���T�`(ynr�&�s��W�Ǫ�b�3=�'�޵�8��m�1C�w�tK2��XE�3������\JJ½�F�H�O�+�E��-�j	C�f�%��&6��psX�+*�żW㿫�g�j
Ǔ�i�qtJ�O��7����Z�Mf�³g���
�B@�lu��3���u1��
ǻ4��L��� E��
�ת9b�u[Epk���^ "d�ԕ�ؕ��Y�d��M�ut��;XW�2`W�[���h�Y
X�-�V�u�E�i>*je-�q|�~�f��3&${�EO*�3P1]̫��ڛ*.���f����>�0�a�D������F�U׻B�	R�	���CR�܆����������9BQAC�ƪ�ig�
;4�J�	�^x��Z���$)��@,�+f��Ϯo�/Ԍj>��i��+&��<��ԟ�V!��D`E��&G�#�F�s
�
r�����O�.D����͉�L�>��X�����U����(&��#�m�~�qa�G�`����^0��qy!;��50�F�l��3���5(e,8Y����ܑj�F��E;̶��U�(u9zS��8��l�LG,����N\��z�o�ƨp2�w1��c���tk~׷iNB��óKqD��k&���#C}��-�`��XQ��������{�A��b�K�ͥ m��GrD5J��}�7�8�������wz��t%]�xW��ד���Kg�ldq���,cM]��E���v��)n�{��C�����H��f_��;"��V羵��]����J%�Œ��*[�4�"3�w�N~4��D�
�f���H�)KK3�fmT`ן�=L6���U�t!HW�z6F�By��y}T6oA*%�i&��L���E�#�a_�>�=39Cݣ>�R�X��������ܧ��9�/&e8�I�����{�j�o�W�ۯ���d0�0��z6�_P-xR��n=�Gec��TN�"����g'�).��f�ύ�!uO&�JQ�Ir�;u���z��]�����gy������v ���Kd4���h��G�Gs�F�ZL�7�����p��q<�0jʮ&�o1��wJe�g&6w �C;�'�_J��3���)K��9�ygoB���K�k�ԼtIm�ǵtZ$�[�˖����rMK���B�����>�ERI��Ԧ�g<t1Q׭��%D}�[��~v�8�}��Ƞ�\|,�	�d1����ҫ�*W���_&�q'��pL*Q0X����;od���ßi�Aq7��_r�ݝ�"5�ɟhlC4?l���F�2#�wj����
������l�y����������_�N��Y<�E��O>�|b�Q�	e���|��ڵ�<§)��/:U^>�רɗl�ad9C��o��z���B�Z�K=�o�9]�>����N� �3ӽ�/����<�L�����t�z��T�c��+��[3"}�~�D;�)d�&Q���9�i�g��a&���Ne��LG��u�H�ד�Xͅ^G�d9-��(�2`c���w��_�߆;_D���s�iu?�4�ɶ䥞�~��Zw�G-���-�k%��m�3���Bp2��d!c���u��
N>��d���M%'_*��	����C1�E�#�?�W�?��[,n���=��GsVVd �;3q�°J�$ˁ���}�E��KR�:����bڱ��Z�~u����j��i_�d�g��w���Uh�b6l���n���ww6�\�H�:e��`����/��/�ݻ����]���s&��ߚl�y�fwOB�XݡW�@�u$ےz��Ł�ȌZa9���_�V�':ԗ��ã�'s�B�=lۡ.r���1��4� ����kZ��U��	u�X�� �-�{cQAHH`K� A<�`�����럆��(Qg�����k�P†��8d�;��(���%�wm�"�!u0~꧚=��tndJvszb+�$e�9�-P@�B�|Lj�U�����.z���t�����eȢ`�aevZ���zt���HW"�5ހ���lf��]��'�4YQ�ì��Cڮ�����XY�tX�w�X��F4WH���,��f���#6W���1�QP6�;�����P��gˎ)�?ef3��K�_�䈯�����N¸JKvu������˪�!⊨�!��WD}���q�$ZTC�ٟ�L�+�D�:�8���p~�1@wx�x>�Q�o=6F94����pk��*���$z=n�"��l��[� �;����M�����_Td��U��p=�����?��%�H���Y��1�8���4�Q�*�7�MN��޳��Y�9�;����F�{-n���A����`��­نtVel*a�>'K����"�ko+ �+ة�X]�KB�5������o���Bk�!���&�ψm�l@�֊fo����]_o�0�S���MF[P�D� !ї�TU(���u�������si��婑��r~w�fٙƻ�3���i�_���_��N�bC���`�$�o��&��fFx�c!���1��_+������q�F�Ի8B���`��؍��!��U�l��w���M�mMf��@Y�s�~l��(
�V��Z胵3u�Q�؏��@����n���ܷ~������DyzUl�D�� ���ٔ�хe�sN��u&簷E�S��Y���68�s��L���u�S�?j	~��;F+#1��p�9�AhxI��=�h
��a�wQ��1��� v��'B��A!ۦ���<	��[VH��Eգ֩�U��ZLW;w�6��iS6R[E�
�7[@��
���)U���1�O/�=��ile��1ɻ��,)�T�j�R�'�W
bD߱D��m�Xkņ�oD�nTC���27^C����7���˸�߰(�(��A�p�N~Q_�?���)X^� |�;��}3<
���
��h����+af�
�N�~�ل�t|����ζ�r��3�ޕ�3,�Z%��Ѣ�P[,��.��!~b.�/'P��v�B���`	��J�bo�yb\:��b��>Og/��������.�|x+��*}V�@6
\h�ɇˋ�{Usz'���\�_f�<ř@����"�
4l��Q�&�"s!~�pv_؁VaK���г��E��YU�7w��:��S�
ؾ���$h��K�}c8�U1~�\���췶3���?-�Ф�Z�{r�|�K�
��m�~.�C�m;P~Q���@/����7*��Ȧ��/z��C��ݒ�����]���i�>�B��@<� ����aj�Jb�*,�z��[I2z�k�ٻ��Fjr�X-)�>^�*~*�����͚-�2����l���I5%���f﫟�=�~���S�.����koI�
{/p7fq���o.���IN�Bd0c���$^�~]U]��n�$Z��K�g��{�������
�>H#�η^čK���:���y��5�6�\�����O�ڊ��Y��?���?Go��[��O�l_�.��g'm�T��2��i��L	�1am�qAC�}�־h�z���E�pIg��4U��pܻ���|�#LMڌ�T��)����b�R����~E����W��#�!�a�!���x~B�j{�+�_9�?=���J�¿^�6k��Q;%ȣ�'�����`�~Pك_���.��{�Vid}��0�8�oЯÃ�S�Kt.��qUju�~�������ur��{��!ku������m�'	yt�I=�6N�8��AM����m�,�P��;|�d^kr"T����B$"X*�n)Z���&��,AO?�'�H:��r-\h&W�z0K���2u�����
���`�k�o>��|0:���g'h9��͇�T��h	#1� U�$
Ul)����?{��5�E]
!�e)��%���������+fZ�]˒���Zh�m2%��$_�%��߱x�;�a<����Lxḿ����F:��~�h����w�{��>�1�0j$��\�am�œ؎��n��m��Ã��R��o��<�R�PCXK)3/"̨Jbc��;'�,1t;�t��h�rs��'�6P%�=�
;���ʭf���l� X�]�7ߝ�9��~��Uiq������˜Б�>�u������M�KQ��&�l�3?
hh��@\~���Qd��i�4����k��t���W��y���]��K� л�ja�1M�z7��0M���n<| e;]:z(�a���']{�N?&PfE��P�LF#H'��S�d��VL4~��|�}v���m 6(7��x�����?[$-��plʋ�`�z�l�v�p�НeEثd]G/�pe����u�C�0����� ��\p2�C��â����e���E�w�������R�r6Z',=z�=�Κm�m�b�֊KG�L�8������
�-6޲���1e
�E����3KMP���T�	���1��ǫ���^��dԐ�+���
��r��a!�b��d'�@����uN�>�����Cg��L\�z�l]��tn��>ճ��f��53�
�B�,�S���'����8�,�&�$�\�`"̴����͎l?�Ɲ�ak�l��ͩ���`ٜ��=��$��[&��'����vs�*���C�:Y_b�9)G�J��U
H7�QeGX���D�����q{�u!yP�~����R�4�v\qw���5�>/�U������G6�oDZ}��W��Z���x��	��	ں����^�Ϸ�����5��G�ޭ����B����V�q����2<����NM�� x����J�.�@1��ǡ�[��2���
�:v�O�؉
�#��Y��kw���莋���M�׊E�	��V�Q�X����j����aل�=$ �7W�s�~(m"�ݺ����u���>>U
�8��_�8�*�~�@0���*c��ݜp��׫f��JE\^g��m�}��C�M���rd��Gk9�����TH�}�G����U�SYUh�ͪ���]O	��IG`[�q8��V�B��5%��j��ީ�T�9:о�!�p���;3qG!��L�KD7�N���&[�1��m��R�=ܯ��-��eq]�r�s�^K
n)TK�zCh�8�����C<��ǵ��\_�YV�
O���.��^�.$8�*�#�yh����<Ϊ��-���D��W�t�ࡎ�1�
�iCId��4��S���Mr�JHvvQ����E�/�+�
�
�>��H����T�%;u�挘襵NwMڸ�&�K��D���+���Z1~hӧ�O��	��k��F�>ѧ��>}�#��]��
�`;}y]�u���*��Y�i���]Q�5�S����ғ, 6�n�,r�H;$+
X����|�g��� 7_́�����ӗ�
l�^˕��v^�:��ccw��-��Dhy�$X�OI��F�9H�W�Fҍ)�.c�07�WO��$ˤ	oߺ{�G���?:�p|����l6���v%w7�`E7?�Qf���g��6��`���T�xS�8);�
}I��€�Q2�'�7+��L>a��_�d�j!��Ɍ=�\�����)�!jZ��BS�I����Ҙ�f��P�4(*CQ?�Z"���W>zqB�X�R��ޒT\��o�J�f�^�ܩ��i��J��k"����|���I�HHi�
�IS��ۨ�4A���&��ҭ����c��	��+v�|�Zů��`�<���lg��Di��k�B��fzS��nnS�clP��f�P�S�n
oA�	]"W �����f6��mDj���շ9��)�0�k2Mjc$q�m����*O!�OY^��L
�P�,�\��r�����d�I�!Tb�![����ՠ`��:�=�2"�d:ɲ���ku	����ˍR��#���vj��k3zgG�A��=�=�%02�᱐��Ԧ4
׍Ubx���n\9?Bz��ļ7Q
�q9��TK�@A�8��1�S%)��hIP��3�4"ob���T�=���s���bʼn��[d��D:�N����
�a��V�P�;�d�M N��t*�,�p;��E�0Yo��U�t�8�B�u�{�.�.�/f�}�+���	+��W�VL��Nl ����������7K�h1���B�M����K�����D*/����~���!��սY�4�B������r��?DnښO�h��h [�<[�{����9�pXb%�x����
��¯Jv�(�71�t���v�|A.V�Ã�$�󟈕$�m(�%�}A�������w�Xv>�3C߀�#��c�����P��"L�B�q�Lk�����ț���d;�.WQX���	D�Xv� �s�:�����٧0�т��G�l��d)Ε�T%�Ά�tg���Q!�7ɗ�D-;2x����@u�#&�ϕ&�A���Wg�5#���[�i��a��N��?�f�g����Z����9�Mџ`Y�K�l|5+X�)�vEE�[d�[Y���m\�b���v:��-+g
D^��>_�#��"�/�/k�:��n�[t/?�H@��~d񞞖t��zx��'�rg���^���I�j�h(fb*�8KSlw򓭋
��9t��?�%!��n.�e�3
#�h�͛O��Qz5�`{P�C-�����z�4�`vk��VX�0�������>��zUO
B)���Л�-3j��'=�Y���;�fw���V�]\��a�9��@�����-9���E�UZ%���	C%QG2���v-�T���0�K������uf�F��Z��S8��Ap��.��ɥTܾeȅ|��x&9�����d'i+��GX��Q�,ԭ�.)Ova[�h�)�0����E3���~҃G��f�5N��N$�w��r ���:p~���/aʓUO�)h�}�T��U������8,�9Ck�{)f�)�H*ٕ��˅)6J?$�X�9�药��r��l��4;�N`Av����]Kk�@��W�� 	l�T,tHr+.}�CƊ��XF�IC��v4�Z�&�7I���C3ߌv���M��m�1r��L�E"�e�TwF�#�&�]G^�a���w�l>V���U��y��%��MsK�m�#5
�ًj}H��N�U+͠Bd�յd��ˊ'0c�!��B�] 6�ŭڒ@�E��ܔ#
1�-Gt�$t�Ag5���ԠtQZC�n7��#�A�o�S��0c���t�D
� ��*�����\x�a�(�6C��9������+g�[�����uxš
�l�FƜ�|sz�m�;9��,�W��I���\/3�X�����A@�u�e��]�U5��C�p�r�?cΥ��{��J����C&-G�o�\�>��^�.�J�dV�sr�ͯ��{�M�Q�@/K�2U�6�d����q�1��6�d�U���Z�ȝ,̭A��뻒e�	M��i%�s"i�
��d�f��N+�'�>�v�v�*
p�:��UF��B�.ܯ�N�сg
��4)�z9��*a�����I��7�VDy"�Ǻ�T�0���#�B���js�_?�d�X���h�u��
 ��2��
�H���L=
�6�ϏuZ�"���(�6m����!9��D�F(S]D�=	Ǜ1}�u_=A��s���ܘ{�����~B�qu���l�p:��=�&q���H���R�o�K�;��c�� c3����Ki�t����A"��0f_e�;�O2�8.{��n�J Q����ߐ�>�c)p+����՝|���75Uڪ^?����bo����x&// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This features file defines extension APIs implemented under src/extensions.
// See chrome/common/extensions/api/_features.md to understand this file, as
// well as feature.h, simple_feature.h, and feature_provider.h.
//
// Note that specifying "web_page", "blessed_web_page", or "all" as a context
// type will require manually updating extensions/renderer/extension_bindings_system.cc.

{
  "alarms": {
    "dependencies": ["permission:alarms"],
    "contexts": ["blessed_extension"]
  },
  "app.runtime": [{
    "channel": "stable",
    "contexts": ["blessed_extension", "lock_screen_extension"],
    "extension_types": ["platform_app"],
    "noparent": true
  }, {
    "channel": "stable",
    "component_extensions_auto_granted": false,
    "contexts": ["blessed_extension"],
    "extension_types": ["extension"],
    "noparent": true,
    "whitelist": [
      "2FC374607C2DF285634B67C64A2E356C607091C3",  // Quickoffice
      "3727DD3E564B6055387425027AD74C58784ACC15",  // Quickoffice internal
      "12E618C3C6E97495AAECF2AC12DEB082353241C6"   // QO component extension
    ]
  }],
  "app.window": [{
    "channel": "stable",
    "contexts": ["blessed_extension", "lock_screen_extension"],
    "extension_types": ["platform_app"],
    "noparent": true
  }, {
    "channel": "stable",
    "contexts": ["blessed_extension"],
    "extension_types": ["extension"],
    "noparent": true,
    "component_extensions_auto_granted": false,
    "whitelist": [
      "B9EF10DDFEA11EF77873CC5009809E5037FC4C7A",  // Google input tools
      "06BE211D5F014BAB34BC22D9DDA09C63A81D828E",  // Official xkb extension
      "F94EE6AB36D6C6588670B2B01EB65212D9C64E33"   // Open source xkb extension
    ]
  }],
  "app.currentWindowInternal": {
    "noparent": true,
    "internal": true,
    "channel": "stable",
    "contexts": ["blessed_extension", "lock_screen_extension"]
  },
  "app.currentWindowInternal.setShape": {
    "dependencies": ["permission:app.window.shape"],
    "contexts": ["blessed_extension"]
  },
  // The API for the *embedder* of appview. Appview has both an embedder and
  // guest API, which are different.
  "appViewEmbedderInternal": {
    "internal": true,
    "contexts": ["blessed_extension"],
    "dependencies": ["permission:appview"]
  },
  // Note that exposing this doesn't necessarily expose AppView,
  // appViewEmbedderInternal is required for that.
  // See http://crbug.com/437891.
  "appViewGuestInternal": {
    "internal": true,
    "channel": "stable",
    "contexts": ["blessed_extension"]
  },
  "audio": {
    "dependencies": ["permission:audio"],
    "contexts": ["blessed_extension"]
  },
  "automationInternal": {
    "internal": true,
    "dependencies": ["manifest:automation"],
    "contexts": ["blessed_extension"]
  },
  "automation": {
    "dependencies": ["manifest:automation"],
    "contexts": ["blessed_extension"]
  },
  "automation.languageAnnotationForStringAttribute": {
    "command_line_switch": "enable-experimental-accessibility-chromevox-sub-node-language-switching",
    "channel": "dev",
    "contexts": ["blessed_extension"]
  },
  "bluetooth": [{
    "dependencies": ["manifest:bluetooth"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bluetooth-pairing/*",
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "bluetoothLowEnergy": {
    "dependencies": ["manifest:bluetooth"],
    "contexts": ["blessed_extension"],
    "platforms": ["chromeos", "linux"]
  },
  "bluetoothPrivate": [{
    "dependencies": ["permission:bluetoothPrivate"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bluetooth-pairing/*",
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "bluetoothSocket": {
    "dependencies": ["manifest:bluetooth"],
    "contexts": ["blessed_extension"]
  },
  "cecPrivate": {
    "dependencies": ["permission:cecPrivate"],
    "contexts": ["blessed_extension"]
  },
  "clipboard": {
    "dependencies": ["permission:clipboard"],
    "contexts": ["blessed_extension"]
  },
  "clipboard.onClipboardDataChanged": {
    "dependencies": ["permission:clipboardRead"]
  },
  "clipboard.setImageData": {
    "dependencies": ["permission:clipboardWrite"]
  },
  "crashReportPrivate": {
    "dependencies": ["permission:crashReportPrivate"],
    "contexts": ["blessed_extension"]
  },
  "declarativeNetRequest": {
    "dependencies": ["permission:declarativeNetRequest"],
    "contexts": ["blessed_extension"]
  },
  "declarativeNetRequest.getMatchedRules": {
    "dependencies": ["permission:declarativeNetRequest"],
    "contexts": ["blessed_extension"],
    "channel": "trunk"
  },
  "declarativeNetRequest.onRuleMatchedDebug": {
    "dependencies": ["permission:declarativeNetRequest", "permission:declarativeNetRequestFeedback"],
    "contexts": ["blessed_extension"],
    "channel": "beta",
    "location": "unpacked"
  },
  "declarativeNetRequest.setActionCountAsBadgeText": {
    "dependencies": ["permission:declarativeNetRequest"],
    "contexts": ["blessed_extension"],
    "channel": "trunk"
  },
  "declarativeWebRequest": {
    "dependencies": ["permission:declarativeWebRequest"],
    "contexts": ["blessed_extension"]
  },
  "diagnostics": {
    "dependencies": ["permission:diagnostics"],
    "extension_types": ["platform_app"],
    "contexts": ["blessed_extension"]
  },
  "displaySource": {
    "dependencies": ["permission:displaySource"],
    "contexts": ["blessed_extension"]
  },
  "dns": {
    "dependencies": ["permission:dns"],
    "contexts": ["blessed_extension"]
  },
  "documentScan": {
    "dependencies": ["permission:documentScan"],
    "contexts": ["blessed_extension"]
  },
  // This is not a real API, only here for documentation purposes.
  // See http://crbug.com/275944 for background.
  "extensionTypes": {
    "internal": true,
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
    "contexts": ["blessed_extension"]
  },
  "events": {
    "internal": true,
    "channel": "stable",
    "extension_types": ["platform_app", "extension"],
    "contexts": "all",
    "matches": ["<all_urls>"]
  },
  "feedbackPrivate": {
    "dependencies": ["permission:feedbackPrivate"],
    "contexts": ["blessed_extension"]
  },
  "feedbackPrivate.readLogSource": {
    "platforms": ["chromeos"],
    "session_types": ["kiosk"]
  },
  "fileSystem": {
    "dependencies": ["permission:fileSystem"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "guestViewInternal": [
    {
      "internal": true,
      "channel": "stable",
      "contexts": ["blessed_extension"]
    }, {
      "internal": true,
      "channel": "stable",
      "contexts": ["webui"],
      "matches": [
        "chrome://add-supervision/*",
        "chrome://assistant-optin/*",
        "chrome://cast/*",
        "chrome://cellular-setup/*",
        "chrome://discards/*",
        "chrome://extensions-frame/*",  // TODO(dbeam): still needed?
        "chrome://extensions/*",
        "chrome://home/*",
        "chrome://chrome-signin/*",
        "chrome://hats/*",
        "chrome://mobilesetup/*",
        "chrome://oobe/*",
        "chrome://password-change/*"
      ]
    }
  ],
  "hid": {
    "dependencies": ["permission:hid"],
    "contexts": ["blessed_extension"]
  },
  "hid.getUserSelectedDevices": {
    "contexts": ["blessed_extension"],
    "channel": "dev",
    "dependencies": ["permission:hid"]
  },
  "idle": {
    "dependencies": ["permission:idle"],
    "contexts": ["blessed_extension"]
  },
  "idle.getAutoLockDelay": {
    "platforms": ["chromeos"]
  },
  "lockScreen.data": {
    "dependencies": ["permission:lockScreen"],
    "contexts": ["blessed_extension", "lock_screen_extension"]
  },
  "lockScreen.data.create": {
    "contexts": ["lock_screen_extension"]
  },
  "management": [{
    "dependencies": ["permission:management"],
    "contexts": ["blessed_extension"],
    "default_parent": true
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://extensions/*",
      "chrome://extensions-frame/*",  // TODO(dbeam): still needed?
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "management.getPermissionWarningsByManifest": {
    "dependencies": [],
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
  },
  "management.getSelf": {
    "dependencies": [],
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
  },
  "management.canInstallReplacementAndroidApp": {
    "dependencies": ["manifest:replacement_android_app"],
    // TODO(jshikaram): add test coverage before trunk promotion.
    "channel": "trunk",
    "extension_types": ["platform_app"]
  },
  "management.installReplacementAndroidApp": {
    "dependencies": ["manifest:replacement_android_app"],
    "channel": "trunk",
    "extension_types": ["platform_app"]
  },
  "management.installReplacementWebApp": {
    "dependencies": ["manifest:replacement_web_app"],
    "channel": "stable",
    "extension_types": ["extension", "platform_app"]
  },
  "management.uninstallSelf": {
    "dependencies": [],
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
  },
  "mediaPerceptionPrivate": {
    "dependencies": ["permission:mediaPerceptionPrivate"],
    "contexts": ["blessed_extension"]
  },
  "metricsPrivate": [{
    "dependencies": ["permission:metricsPrivate"],
    "contexts": ["blessed_extension"],
    "default_parent": true
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bookmarks/*",
      "chrome://extensions/*",
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*",
      "chrome://sync-confirmation/*",
      "chrome://welcome/*"
    ]
  }],
  "metricsPrivate.getIsCrashReportingEnabled": {
    "whitelist": [
      // This function inherits the extension restrictions of metricsPrivate,
      // but also requires whitelisting. New uses of this function should get
      // /tools/metrics/OWNERS approval of the usage before adding entries
      // below. See crbug.com/374199.
      "2FC374607C2DF285634B67C64A2E356C607091C3",  // Quickoffice
      "3727DD3E564B6055387425027AD74C58784ACC15",  // Quickoffice internal
      "12E618C3C6E97495AAECF2AC12DEB082353241C6",  // QO component extension
      "3727DD3E564B6055387425027AD74C58784ACC15",  // Editor
      "C41AD9DCD670210295614257EF8C9945AD68D86E",  // Google Now
      "D7986543275120831B39EF28D1327552FC343960",  // http://crbug.com/378067
      "A291B26E088FA6BA53FFD72F0916F06EBA7C585A",  // http://crbug.com/378067
      "07BD6A765FFC289FF755D7CAB2893A40EC337FEC",  // http://crbug.com/456214
      "896B85CC7E913E11C34892C1425A093C0701D386",  // http://crbug.com/456214
      "11A01C82EF355E674E4F9728A801F5C3CB40D83F",  // http://crbug.com/456214
      "F410C88469990EE7947450311D24B8AF2ADB2595",  // http://crbug.com/456214
      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Media Router Dev
      "226CF815E39A363090A1E547D53063472B8279FA",  // Media Router Stable
      // TODO (ntang) Remove the following 2 hashes by 12/31/2017.
      "B620CF4203315F9F2E046EDED22C7571A935958D",  // http://crbug.com/510270
      "B206D8716769728278D2D300349C6CB7D7DE2EF9",  // http://crbug.com/510270
      "2B6C6A4A5940017146F3E58B7F90116206E84685",  // http://crbug.com/642141
      "B6C2EFAB3EC3BF6EF03701408B6B09A67B2D0069",  // http://crbug.com/642141
      "96FF2FFA5C9173C76D47184B3E86D267B37781DE",  // http://crbug.com/642141
      "0136FCB13DB29FD5CD442F56E59E53B61F1DF96F",  // http://crbug.com/642141
      "46578A13607D38F1DC8E280C4F499FB0A2F9565C",  // http://crbug.com/819404
      "898FB5A39687D210766B8998BA4530B99C9E6586",  // http://crbug.com/819404
      "82F30B65397BC3E4ADE627BBD857AB8A58210648",  // http://crbug.com/819404
      "A3E3DE9E9F16B41D4A2FAD106BD6CA76B94A0C94",  // http://crbug.com/932466
      "B41E7F08E1179CC03CBD1F49E57CF353A40ADE07",  // http://crbug.com/932466
      "C74B2AF138F9EDECD04D0965AB36CA66C8290466"   // http://crbug.com/957772
    ]
  },
  "mimeHandlerPrivate": {
    "dependencies": ["manifest:mime_types_handler"],
    "contexts": ["blessed_extension"]
  },
  "mojoPrivate": {
    "contexts": ["blessed_extension"],
    "channel": "stable",
    "extension_types": ["platform_app", "extension"],
    "whitelist": [
      "63ED55E43214C211F82122ED56407FF1A807F2A3",   // Media Router Dev
      "226CF815E39A363090A1E547D53063472B8279FA",   // Media Router Stable
      "B41E7F08E1179CC03CBD1F49E57CF353A40ADE07",   // Chrome Camera App Dev
      "A3E3DE9E9F16B41D4A2FAD106BD6CA76B94A0C94"    // Chrome Camera App Stable
    ]
  },
  "networking.config": {
    "dependencies": ["permission:networking.config"],
    "contexts": ["blessed_extension"]
  },
  "networking.onc": {
    "dependencies": ["permission:networking.onc"],
    "contexts": ["blessed_extension"],
    "source": "networkingPrivate"
  },
  "networkingPrivate": [{
    "dependencies": ["permission:networkingPrivate"],
    "contexts": ["blessed_extension"],
    // TODO(tbarzic): networkingPrivate is being renamed to networking.onc.
    // The goal is to eventually remove networkingPrivate API in favour of
    // networking.onc, but until current usages are migrated to the new
    // name, use API aliasing to expose the API under both names.
    // (http://crbug.com/672186).
    "alias": "networking.onc"
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://network/*",
      "chrome://oobe/*",
      "chrome://internet-config-dialog/*",
      "chrome://internet-detail-dialog/*",
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "power": {
    "dependencies": ["permission:power"],
    "contexts": ["blessed_extension"]
  },
  "printerProvider": {
    "dependencies": ["permission:printerProvider"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "printerProviderInternal": {
    "internal": true,
    "dependencies": ["permission:printerProvider"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  },
  "runtime": {
    "channel": "stable",
    "extension_types": [
      "extension",
      "legacy_packaged_app",
      "platform_app",
      "login_screen_extension"
    ],
    "contexts": [
      "blessed_extension",
      "lock_screen_extension"
    ]
  },
  "runtime.getBackgroundPage": {
    "disallow_for_service_workers": true
  },
  "runtime.getManifest": {
    "contexts": [
      "blessed_extension",
      "lock_screen_extension",
      "unblessed_extension",
      "content_script"
    ]
  },
  "runtime.connect": {
    // Everything except WebUI.
    "contexts": [
      "blessed_web_page",
      "content_script",
      "blessed_extension",
      "lock_screen_extension",
      "unblessed_extension",
      "web_page"
    ],
    "matches": ["<all_urls>"]
  },
  "runtime.connectNative": {
    "dependencies": ["permission:nativeMessaging"],
    "contexts": ["blessed_extension"]
  },
  "runtime.getURL": {
    "contexts": [
      "blessed_extension",
      "lock_screen_extension",
      "unblessed_extension",
      "content_script"
    ]
  },
  "runtime.id": {
    "contexts": [
      "blessed_extension",
      "lock_screen_extension",
      "unblessed_extension",
      "content_script"
    ]
  },
  "runtime.lastError": {
    "contexts": "all",
    "extension_types": "all",
    "matches": ["<all_urls>"]
  },
  "runtime.onConnect": {
    "contexts": [
      "blessed_extension",
      "lock_screen_extension",
      "unblessed_extension",
      "content_script"
    ]
  },
  "runtime.onConnectNative": {
    "dependencies": ["permission:nativeMessaging"],
    "contexts": ["blessed_extension"]
  },
  "runtime.onMessage": {
    "contexts": [
      "blessed_extension",
      "lock_screen_extension",
      "unblessed_extension",
      "content_script"
    ]
  },
  "runtime.sendMessage": {
    // Everything except WebUI.
    "contexts": [
      "blessed_web_page",
      "content_script",
      "blessed_extension",
      "lock_screen_extension",
      "unblessed_extension",
      "web_page"
    ],
    "matches": ["<all_urls>"]
  },
  "runtime.sendNativeMessage": {
    "dependencies": ["permission:nativeMessaging"],
    "contexts": ["blessed_extension"]
  },
  "serial": {
    "dependencies": ["permission:serial"],
    "contexts": ["blessed_extension"]
  },
  "socket": {
    "dependencies": ["permission:socket"],
    "contexts": ["blessed_extension"]
  },
  "sockets.tcp": {
    "dependencies": ["manifest:sockets"],
    "contexts": ["blessed_extension"]
  },
  "sockets.tcpServer": {
    "dependencies": ["manifest:sockets"],
    "contexts": ["blessed_extension"]
  },
  "sockets.udp": {
    "dependencies": ["manifest:sockets"],
    "contexts": ["blessed_extension"]
  },
  "storage": {
    "dependencies": ["permission:storage"],
    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
  },
  "system.cpu": {
    "dependencies": ["permission:system.cpu"],
    "contexts": ["blessed_extension"]
  },
  "system.display": [{
    "dependencies": ["permission:system.display"],
    "contexts": ["blessed_extension"],
    "disallow_for_service_workers": true
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      // TODO(maybelle): Audit and remove chrome://settings or
      // chrome://os-settings as appropriate
      "chrome://os-settings/*",
      "chrome://settings/*"
    ]
  }],
  "system.memory": {
    "dependencies": ["permission:system.memory"],
    "contexts": ["blessed_extension"]
  },
  "system.network": {
    "dependencies": ["permission:system.network"],
    "contexts": ["blessed_extension"]
  },
  "system.powerSource": {
    "dependencies": ["permission:system.powerSource"],
    "contexts": ["blessed_extension"]
  },
  "system.storage": {
    "dependencies": ["permission:system.storage"],
    "contexts": ["blessed_extension"]
  },
  "system.storage.getAvailableCapacity": {
    "channel": "dev"
  },
  "test": [{
    "channel": "stable",
    "extension_types": "all",
    // Everything except web pages and WebUI. WebUI is declared in a separate
    // rule to keep the "matches" property isolated.
    "contexts": [
      "blessed_extension",
      "blessed_web_page",
      "content_script",
      "lock_screen_extension",
      "unblessed_extension"
    ]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://extensions/*",
      "chrome://extensions-frame/*"  // TODO(dbeam): still needed?
    ]
  }],
  "types": {
    "internal": true,
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
    "contexts": ["blessed_extension"]
  },
  "usb": {
    "dependencies": ["permission:usb"],
    "contexts": ["blessed_extension"]
  },
  "virtualKeyboard": {
    "dependencies": ["permission:virtualKeyboard"],
    "contexts": ["blessed_extension"]
  },
  "vpnProvider": {
    "dependencies": ["permission:vpnProvider"],
    "contexts": ["blessed_extension"]
  },
  "webRequest": {
    "dependencies": ["permission:webRequest"],
    "contexts": ["blessed_extension"]
  },
  "webRequestInternal": [{
    "internal": true,
    "channel": "stable",
    "contexts": ["blessed_extension"]
  }, {
    // webview uses webRequestInternal API.
    "channel": "stable",
    "internal": true,
    "contexts": ["webui"],
    "matches": [
      "chrome://add-supervision/*",
      "chrome://assistant-optin/*",
      "chrome://cellular-setup/*",
      "chrome://chrome-signin/*",
      "chrome://discards/*",
      "chrome://hats/*",
      "chrome://home/*",
      "chrome://mobilesetup/*",
      "chrome://oobe/*",
      "chrome://password-change/*"
    ]
  }],
  "webViewInternal": [{
    "internal": true,
    "dependencies": ["permission:webview"],
    "contexts": ["blessed_extension"]
  }, {
    "internal": true,
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://add-supervision/*",
      "chrome://assistant-optin/*",
      "chrome://cellular-setup/*",
      "chrome://chrome-signin/*",
      "chrome://discards/*",
      "chrome://hats/*",
      "chrome://home/*",
      "chrome://mobilesetup/*",
      "chrome://oobe/*",
      "chrome://password-change/*"
    ]
  }],
  "webViewRequest": [{
    "dependencies": ["permission:webview"],
    "contexts": ["blessed_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://add-supervision/*",
      "chrome://assistant-optin/*",
      "chrome://cellular-setup/*",
      "chrome://chrome-signin/*",
      "chrome://discards/*",
      "chrome://hats/*",
      "chrome://home/*",
      "chrome://mobilesetup/*",
      "chrome://oobe/*"
    ]
  }]
}
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var $Document = require('safeMethods').SafeMethods.$Document;
var $HTMLElement = require('safeMethods').SafeMethods.$HTMLElement;
var $Node = require('safeMethods').SafeMethods.$Node;
var GuestViewContainer = require('guestViewContainer').GuestViewContainer;

function AppViewImpl(appviewElement) {
  $Function.call(GuestViewContainer, this, appviewElement, 'appview');

  this.app = '';
  this.data = '';
}

AppViewImpl.prototype.__proto__ = GuestViewContainer.prototype;

AppViewImpl.prototype.getErrorNode = function() {
  if (!this.errorNode) {
    this.errorNode = $Document.createElement(document, 'div');
    $HTMLElement.innerText.set(this.errorNode, 'Unable to connect to app.');
    var style = $HTMLElement.style.get(this.errorNode);
    $Object.defineProperty(style, 'position', {value: 'absolute'});
    $Object.defineProperty(style, 'left', {value: '0px'});
    $Object.defineProperty(style, 'top', {value: '0px'});
    $Object.defineProperty(style, 'width', {value: '100%'});
    $Object.defineProperty(style, 'height', {value: '100%'});
    $Node.appendChild(this.shadowRoot, this.errorNode);
  }
  return this.errorNode;
};

AppViewImpl.prototype.buildContainerParams = function() {
  var params = $Object.create(null);
  params.appId = this.app;
  params.data = this.data || {};
  return params;
};

AppViewImpl.prototype.connect = function(app, data, callback) {
  if (!this.elementAttached) {
    if (callback) {
      callback(false);
    }
    return;
  }

  this.app = app;
  this.data = data;

  this.guest.destroy($Function.bind(this.prepareForReattach, this));
  this.guest.create(this.buildParams(), $Function.bind(function() {
    if (!this.guest.getId()) {
      var errorMsg = 'Unable to connect to app "' + app + '".';
      window.console.warn(errorMsg);
      $HTMLElement.innerText.set(this.getErrorNode(), errorMsg);
      if (callback) {
        callback(false);
      }
      return;
    }
    this.attachWindow();
    if (callback) {
      callback(true);
    }
  }, this));
};

// Exports.
exports.$set('AppViewImpl', AppViewImpl);
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var registerDeniedElement = require('guestViewDeny').registerDeniedElement;

registerDeniedElement('AppView', 'appview');
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// The <appview> custom element.

var registerElement = require('guestViewContainerElement').registerElement;
var forwardApiMethods = require('guestViewContainerElement').forwardApiMethods;
var GuestViewContainerElement =
    require('guestViewContainerElement').GuestViewContainerElement;
var AppViewImpl = require('appView').AppViewImpl;

class AppViewElement extends GuestViewContainerElement {
  constructor() {
    super();
    privates(this).internal = new AppViewImpl(this);
  }
}

forwardApiMethods(AppViewElement, AppViewImpl, null, ['connect']);

registerElement('AppView', AppViewElement);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

function registerHooks(api) {
}

function testDone(runNextTest) {
  // Use setTimeout here to allow previous test contexts to be
  // eligible for garbage collection.
  setTimeout(runNextTest, 0);
}

exports.$set('registerHooks', registerHooks);
exports.$set('testDone', testDone);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var fileSystemNatives = requireNative('file_system_natives');

var nameToIds = {};
var idsToEntries = {};

function computeName(entry) {
  return entry.filesystem.name + ':' + entry.fullPath;
}

function computeId(entry) {
  var fileSystemId = fileSystemNatives.CrackIsolatedFileSystemName(
      entry.filesystem.name);
  if (!fileSystemId)
    return null;
  // Strip the leading '/' from the path.
  return fileSystemId + ':' + $String.slice(entry.fullPath, 1);
}

function registerEntry(id, entry) {
  var name = computeName(entry);
  nameToIds[name] = id;
  idsToEntries[id] = entry;
}

function getEntryId(entry) {
  var name = null;
  try {
    name = computeName(entry);
  } catch(e) {
    return null;
  }
  var id = nameToIds[name];
  if (id != null)
    return id;

  // If an entry has not been registered, compute its id and register it.
  id = computeId(entry);
  registerEntry(id, entry);
  return id;
}

function getEntryById(id) {
  return idsToEntries[id];
}

exports.$set('registerEntry', registerEntry);
exports.$set('getEntryId', getEntryId);
exports.$set('getEntryById', getEntryById);
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// The <webview> custom element. This defines <webview> at the extensions layer.

var registerElement = require('guestViewContainerElement').registerElement;
var WebViewElement = require('webViewElement').WebViewElement;
var WebViewImpl = require('webView').WebViewImpl;
var WebViewAttributeNames = require('webViewConstants').WebViewAttributeNames;

class ExtensionsWebViewElement extends WebViewElement {
  static get observedAttributes() {
    return WebViewAttributeNames;
  }

  constructor() {
    super();
    privates(this).internal = new WebViewImpl(this);
  }
}

registerElement('WebView', ExtensionsWebViewElement);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var ExtensionOptionsConstants =
    require('extensionOptionsConstants').ExtensionOptionsConstants;
var ExtensionOptionsEvents =
    require('extensionOptionsEvents').ExtensionOptionsEvents;
var ExtensionOptionsAttributes =
    require('extensionOptionsAttributes').ExtensionOptionsAttributes;
var GuestViewContainer = require('guestViewContainer').GuestViewContainer;

function ExtensionOptionsImpl(extensionoptionsElement) {
  $Function.call(
      GuestViewContainer, this, extensionoptionsElement, 'extensionoptions');

  new ExtensionOptionsEvents(this);
};

ExtensionOptionsImpl.prototype.__proto__ = GuestViewContainer.prototype;

ExtensionOptionsImpl.prototype.onElementAttached = function() {
  this.createGuest();
};

// Sets up all of the extensionoptions attributes.
ExtensionOptionsImpl.prototype.setupAttributes = function() {
  this.attributes[ExtensionOptionsConstants.ATTRIBUTE_EXTENSION] =
      new ExtensionOptionsAttributes.ExtensionAttribute(this);
};

ExtensionOptionsImpl.prototype.buildContainerParams = function() {
  var params = $Object.create(null);
  for (var i in this.attributes) {
    params[i] = this.attributes[i].getValue();
  }
  return params;
};

ExtensionOptionsImpl.prototype.createGuest = function() {
  // Destroy the old guest if one exists.
  this.guest.destroy($Function.bind(this.prepareForReattach, this));

  this.guest.create(this.buildParams(), $Function.bind(function() {
    if (!this.guest.getId()) {
      // Fire a createfailed event here rather than in ExtensionOptionsGuest
      // because the guest will not be created, and cannot fire an event.
      var createFailedEvent = new Event('createfailed', { bubbles: true });
      this.dispatchEvent(createFailedEvent);
    } else {
      this.attachWindow();
    }
  }, this));
};

// Exports.
exports.$set('ExtensionOptionsImpl', ExtensionOptionsImpl);
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// The <extensionoptions> custom element.

var registerElement = require('guestViewContainerElement').registerElement;
var GuestViewContainerElement =
    require('guestViewContainerElement').GuestViewContainerElement;
var ExtensionOptionsImpl = require('extensionOptions').ExtensionOptionsImpl;
var ExtensionOptionsConstants =
    require('extensionOptionsConstants').ExtensionOptionsConstants;

class ExtensionOptionsElement extends GuestViewContainerElement {
  static get observedAttributes() {
    return [ExtensionOptionsConstants.ATTRIBUTE_EXTENSION];
  }

  constructor() {
    super();
    privates(this).internal = new ExtensionOptionsImpl(this);
  }
}

registerElement('ExtensionOptions', ExtensionOptionsElement);
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module implements the attributes of the <extensionoptions> tag.

var GuestViewAttributes = require('guestViewAttributes').GuestViewAttributes;
var ExtensionOptionsConstants =
    require('extensionOptionsConstants').ExtensionOptionsConstants;

// -----------------------------------------------------------------------------
// ExtensionAttribute object.

// Attribute that handles extension binded to the extensionoptions.
function ExtensionAttribute(view) {
  $Function.call(
      GuestViewAttributes.Attribute, this,
      ExtensionOptionsConstants.ATTRIBUTE_EXTENSION, view);
}

ExtensionAttribute.prototype.__proto__ =
    GuestViewAttributes.Attribute.prototype;

ExtensionAttribute.prototype.handleMutation = function(oldValue, newValue) {
  // Once this attribute has been set, it cannot be unset.
  if (!newValue && oldValue) {
    this.setValueIgnoreMutation(oldValue);
    return;
  }

  if (!newValue || !this.elementAttached)
    return;

  this.view.createGuest();
};

var ExtensionOptionsAttributes = {ExtensionAttribute: ExtensionAttribute};

// Exports.
exports.$set('ExtensionOptionsAttributes', ExtensionOptionsAttributes);
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module contains constants used in extensionoptions.

// Container for the extensionview constants.
var ExtensionOptionsConstants = {
  // Attributes.
  ATTRIBUTE_EXTENSION: 'extension'
};

exports.$set('ExtensionOptionsConstants',
             $Object.freeze(ExtensionOptionsConstants));
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var CreateEvent = require('guestViewEvents').CreateEvent;
var GuestViewEvents = require('guestViewEvents').GuestViewEvents;

function ExtensionOptionsEvents(extensionOptionsImpl) {
  $Function.call(GuestViewEvents, this, extensionOptionsImpl);

  // |setupEventProperty| is normally called automatically, but the
  // 'createfailed' event is registered here because the event is fired from
  // ExtensionOptionsImpl instead of in response to an extension event.
  this.setupEventProperty('createfailed');
}

ExtensionOptionsEvents.prototype.__proto__ = GuestViewEvents.prototype;

// A dictionary of <extensionoptions> extension events to be listened for. This
// dictionary augments |GuestViewEvents.EVENTS| in guest_view_events.js. See the
// documentation there for details.
ExtensionOptionsEvents.EVENTS = {
  'close': {
    evt: CreateEvent('extensionOptionsInternal.onClose')
  },
  'load': {
    evt: CreateEvent('extensionOptionsInternal.onLoad')
  },
  'preferredsizechanged': {
    evt: CreateEvent('extensionOptionsInternal.onPreferredSizeChanged'),
    fields:['width', 'height']
  }
}

ExtensionOptionsEvents.prototype.getEvents = function() {
  return ExtensionOptionsEvents.EVENTS;
};

// Exports.
exports.$set('ExtensionOptionsEvents', ExtensionOptionsEvents);
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom bindings for the feedbackPrivate API.

var blobNatives = requireNative('blob_natives');

apiBridge.registerCustomHook(function(bindingsAPI) {
  var apiFunctions = bindingsAPI.apiFunctions;
  apiFunctions.setUpdateArgumentsPostValidate(
      "sendFeedback", function(feedbackInfo, callback) {
    var attachedFileBlobUuid = '';
    var screenshotBlobUuid = '';

    if (feedbackInfo.attachedFile)
      attachedFileBlobUuid =
          blobNatives.GetBlobUuid(feedbackInfo.attachedFile.data);
    if (feedbackInfo.screenshot)
      screenshotBlobUuid =
          blobNatives.GetBlobUuid(feedbackInfo.screenshot);

    feedbackInfo.attachedFileBlobUuid = attachedFileBlobUuid;
    feedbackInfo.screenshotBlobUuid = screenshotBlobUuid;

    return [feedbackInfo, callback];
  });
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module implements the base attributes of the GuestView tags.

var $parseInt = require('safeMethods').SafeMethods.$parseInt;
var $Element = require('safeMethods').SafeMethods.$Element;

// -----------------------------------------------------------------------------
// Attribute object.

// Default implementation of a GuestView attribute.
function Attribute(name, view) {
  this.dirty = false;
  this.ignoreMutation = false;
  this.name = name;
  this.view = view;

  this.defineProperty();
}

// Prevent GuestViewEvents inadvertently inheritng code from the global Object,
// allowing a pathway for unintended execution of user code.
// TODO(wjmaclean): Track down other issues of Object inheritance.
// https://crbug.com/701034
Attribute.prototype.__proto__ = null;

// Retrieves and returns the attribute's value.
Attribute.prototype.getValue = function() {
  return $Element.getAttribute(this.view.element, this.name) || '';
};

// Retrieves and returns the attribute's value if it has been dirtied since
// the last time this method was called. Returns null otherwise.
Attribute.prototype.getValueIfDirty = function() {
  if (!this.dirty)
    return null;
  this.dirty = false;
  return this.getValue();
};

// Sets the attribute's value.
Attribute.prototype.setValue = function(value) {
  $Element.setAttribute(this.view.element, this.name, value || '');
};

// Changes the attribute's value without triggering its mutation handler.
Attribute.prototype.setValueIgnoreMutation = function(value) {
  this.ignoreMutation = true;
  this.setValue(value);
  this.ignoreMutation = false;
};

// Defines this attribute as a property on the view's element.
Attribute.prototype.defineProperty = function() {
  $Object.defineProperty(this.view.element, this.name, {
    get: $Function.bind(function() {
      return this.getValue();
    }, this),
    set: $Function.bind(function(value) {
      this.setValue(value);
    }, this),
    enumerable: true
  });
};

// Called when the attribute's value changes.
Attribute.prototype.maybeHandleMutation = function(oldValue, newValue) {
  if (this.ignoreMutation)
    return;

  this.dirty = true;
  this.handleMutation(oldValue, newValue);
};

// Called when a change that isn't ignored occurs to the attribute's value.
Attribute.prototype.handleMutation = function(oldValue, newValue) {};

// Called when the view's element is attached to the DOM tree.
Attribute.prototype.attach = function() {};

// Called when the view's element is detached from the DOM tree.
Attribute.prototype.detach = function() {};

// -----------------------------------------------------------------------------
// BooleanAttribute object.

// An attribute that is treated as a Boolean.
function BooleanAttribute(name, view) {
  $Function.call(Attribute, this, name, view);
}

BooleanAttribute.prototype.__proto__ = Attribute.prototype;

BooleanAttribute.prototype.getValue = function() {
  return $Element.hasAttribute(this.view.element, this.name);
};

BooleanAttribute.prototype.setValue = function(value) {
  if (!value) {
    $Element.removeAttribute(this.view.element, this.name);
  } else {
    $Element.setAttribute(this.view.element, this.name, '');
  }
};

// -----------------------------------------------------------------------------
// IntegerAttribute object.

// An attribute that is treated as an integer.
function IntegerAttribute(name, view) {
  $Function.call(Attribute, this, name, view);
}

IntegerAttribute.prototype.__proto__ = Attribute.prototype;

IntegerAttribute.prototype.getValue = function() {
  return $parseInt($Element.getAttribute(this.view.element, this.name)) || 0;
};

IntegerAttribute.prototype.setValue = function(value) {
  $Element.setAttribute(this.view.element, this.name, $parseInt(value) || 0);
};

// -----------------------------------------------------------------------------
// ReadOnlyAttribute object.

// An attribute that cannot be changed (externally). The only way to set it
// internally is via |setValueIgnoreMutation|.
function ReadOnlyAttribute(name, view) {
  $Function.call(Attribute, this, name, view);
}

ReadOnlyAttribute.prototype.__proto__ = Attribute.prototype;

ReadOnlyAttribute.prototype.handleMutation = function(oldValue, newValue) {
  this.setValueIgnoreMutation(oldValue);
}

// -----------------------------------------------------------------------------

var GuestViewAttributes = {
  Attribute: Attribute,
  BooleanAttribute: BooleanAttribute,
  IntegerAttribute: IntegerAttribute,
  ReadOnlyAttribute: ReadOnlyAttribute
};

// Exports.
exports.$set('GuestViewAttributes', GuestViewAttributes);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module implements the shared functionality for different guestview
// containers, such as web_view, app_view, etc.

var $parseInt = require('safeMethods').SafeMethods.$parseInt;
var $getComputedStyle = require('safeMethods').SafeMethods.$getComputedStyle;
var $Document = require('safeMethods').SafeMethods.$Document;
var $Element = require('safeMethods').SafeMethods.$Element;
var $EventTarget = require('safeMethods').SafeMethods.$EventTarget;
var $HTMLElement = require('safeMethods').SafeMethods.$HTMLElement;
var $Node = require('safeMethods').SafeMethods.$Node;
var GuestView = require('guestView').GuestView;
var GuestViewInternalNatives = requireNative('guest_view_internal');
var IdGenerator = requireNative('id_generator');
var MessagingNatives = requireNative('messaging_natives');

function GuestViewContainer(element, viewType) {
  this.attributes = $Object.create(null);
  this.element = element;
  this.elementAttached = false;
  this.viewInstanceId = IdGenerator.GetNextId();
  this.viewType = viewType;

  this.setupGuestProperty();
  this.guest = new GuestView(viewType);
  this.setupAttributes();

  this.internalElement = this.createInternalElement();
  this.shadowRoot = $Element.attachShadow(this.element, {mode: 'closed'});
  $Node.appendChild(this.shadowRoot, this.internalElement);

  GuestViewInternalNatives.RegisterView(this.viewInstanceId, this, viewType);
}

// Prevent GuestViewContainer inadvertently inheriting code from the global
// Object, allowing a pathway for executing unintended user code execution.
// TODO(wjmaclean): Track down other issues of Object inheritance.
// https://crbug.com/701034
GuestViewContainer.prototype.__proto__ = null;

// Create the 'guest' property to track new GuestViews and always listen for
// their resizes.
GuestViewContainer.prototype.setupGuestProperty = function() {
  $Object.defineProperty(this, 'guest', {
    get: $Function.bind(function() {
      return this.guest_;
    }, this),
    set: $Function.bind(function(value) {
      this.guest_ = value;
      if (!value) {
        return;
      }
      this.guest_.onresize = $Function.bind(function(e) {
        // Dispatch the 'contentresize' event.
        var contentResizeEvent = new Event('contentresize', { bubbles: true });
        contentResizeEvent.oldWidth = e.oldWidth;
        contentResizeEvent.oldHeight = e.oldHeight;
        contentResizeEvent.newWidth = e.newWidth;
        contentResizeEvent.newHeight = e.newHeight;
        this.dispatchEvent(contentResizeEvent);
      }, this);
    }, this),
    enumerable: true
  });
};

GuestViewContainer.prototype.createInternalElement = function() {
  var iframeElement = $Document.createElement(document, 'iframe');

  var style = $HTMLElement.style.get(iframeElement);
  $Object.defineProperty(style, 'width', {value: '100%'});
  $Object.defineProperty(style, 'height', {value: '100%'});
  $Object.defineProperty(style, 'border', {value: '0px'});

  return iframeElement;
};

GuestViewContainer.prototype.prepareForReattach = function() {
  // Since attachment swaps a local frame for a remote frame, we need our
  // internal iframe element to be local again before we can reattach.
  var newFrame = this.createInternalElement();
  var oldFrame = this.internalElement;
  this.internalElement = newFrame;
  var frameParent = $Node.parentNode.get(oldFrame);
  $Node.replaceChild(frameParent, newFrame, oldFrame);
};

GuestViewContainer.prototype.focus = function() {
  // Focus the internal element when focus() is called on the GuestView element.
  $HTMLElement.focus(this.internalElement);
}

GuestViewContainer.prototype.attachWindow = function() {
  var generatedId = IdGenerator.GetNextId();
  // Generate an instance id for the container.
  this.onInternalInstanceId(generatedId);
  return true;
};

GuestViewContainer.prototype.makeGCOwnContainer = function(internalInstanceId) {
  MessagingNatives.BindToGC(this, function() {
    GuestViewInternalNatives.DestroyContainer(internalInstanceId);
  }, -1);
};

GuestViewContainer.prototype.onInternalInstanceId = function(
    internalInstanceId) {
  this.internalInstanceId = internalInstanceId;
  this.makeGCOwnContainer(this.internalInstanceId);

  // Track when the element resizes using the element resize callback.
  GuestViewInternalNatives.RegisterElementResizeCallback(
      this.internalInstanceId, this.weakWrapper(this.onElementResize));

  if (!this.guest.getId()) {
    return;
  }
  this.guest.attach(this.internalInstanceId,
                    this.viewInstanceId,
                    this.buildParams());
};

GuestViewContainer.prototype.onElementResize = function(newWidth, newHeight) {
  if (!this.guest.getId())
    return;
  this.guest.setSize({normal: {width: newWidth, height: newHeight}});
};

GuestViewContainer.prototype.buildParams = function() {
  var params = this.buildContainerParams();
  params['instanceId'] = this.viewInstanceId;
  // When the GuestViewContainer is not participating in layout (display:none)
  // then getBoundingClientRect() would report a width and height of 0.
  // However, in the case where the GuestViewContainer has a fixed size we can
  // use that value to initially size the guest so as to avoid a relayout of the
  // on display:block.
  var css = $getComputedStyle(this.element, null);
  var elementRect = $Element.getBoundingClientRect(this.element);
  params['elementWidth'] =
      $parseInt(elementRect.width) || $parseInt(css.getPropertyValue('width'));
  params['elementHeight'] = $parseInt(elementRect.height) ||
      $parseInt(css.getPropertyValue('height'));
  return params;
};

GuestViewContainer.prototype.dispatchEvent = function(event) {
  return $EventTarget.dispatchEvent(this.element, event);
};

// Returns a wrapper function for |func| with a weak reference to |this|.
GuestViewContainer.prototype.weakWrapper = function(func) {
  var viewInstanceId = this.viewInstanceId;
  return function() {
    var view = GuestViewInternalNatives.GetViewFromID(viewInstanceId);
    if (view) {
      return $Function.apply(func, view, $Array.slice(arguments));
    }
  };
};

GuestViewContainer.prototype.willAttachElement = function() {
  if (this.deferredAttachCallback) {
    this.deferredAttachCallback();
    this.deferredAttachCallback = null;
  }
};

// Implemented by the specific view type, if needed.
GuestViewContainer.prototype.buildContainerParams = function() {
  return $Object.create(null);
};
GuestViewContainer.prototype.onElementAttached = function() {};
GuestViewContainer.prototype.onElementDetached = function() {};
GuestViewContainer.prototype.setupAttributes = function() {};

// Exports.
exports.$set('GuestViewContainer', GuestViewContainer);
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Common custom element registration code for the various guest view
// containers.

var $CustomElementRegistry =
    require('safeMethods').SafeMethods.$CustomElementRegistry;
var $Element = require('safeMethods').SafeMethods.$Element;
var $EventTarget = require('safeMethods').SafeMethods.$EventTarget;
var $HTMLElement = require('safeMethods').SafeMethods.$HTMLElement;
var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
var GuestViewInternalNatives = requireNative('guest_view_internal');
var IdGenerator = requireNative('id_generator');
var logging = requireNative('logging');

// Conceptually, these are methods on GuestViewContainerElement.prototype.
// However, since that is exposed to users, we only set these callbacks on
// the prototype temporarily during the custom element registration.
var customElementCallbacks = {
  connectedCallback: function() {
    var internal = privates(this).internal;
    if (!internal)
      return;

    internal.elementAttached = true;
    internal.willAttachElement();
    internal.onElementAttached();
  },

  attributeChangedCallback: function(name, oldValue, newValue) {
    var internal = privates(this).internal;
    if (!internal)
      return;

    // Let the changed attribute handle its own mutation.
    internal.attributes[name].maybeHandleMutation(oldValue, newValue);
  },

  disconnectedCallback: function() {
    var internal = privates(this).internal;
    if (!internal)
      return;

    internal.elementAttached = false;
    internal.internalInstanceId = 0;
    internal.guest.destroy();
    internal.onElementDetached();
  }
};

// Registers the guestview as a custom element.
// |containerElementType| is a GuestViewContainerElement (e.g. WebViewElement)
function registerElement(elementName, containerElementType) {
  GuestViewInternalNatives.AllowGuestViewElementDefinition(() => {
    // We set the lifecycle callbacks so that they're available during
    // registration. Once that's done, we'll delete them so developers cannot
    // call them and produce unexpected behaviour.
    GuestViewContainerElement.prototype.connectedCallback =
        customElementCallbacks.connectedCallback;
    GuestViewContainerElement.prototype.disconnectedCallback =
        customElementCallbacks.disconnectedCallback;
    GuestViewContainerElement.prototype.attributeChangedCallback =
        customElementCallbacks.attributeChangedCallback;

    $CustomElementRegistry.define(
        window.customElements, $String.toLowerCase(elementName),
        containerElementType);
    $Object.defineProperty(window, elementName, {
      value: containerElementType,
    });

    delete GuestViewContainerElement.prototype.connectedCallback;
    delete GuestViewContainerElement.prototype.disconnectedCallback;
    delete GuestViewContainerElement.prototype.attributeChangedCallback;

    // Now that |observedAttributes| has been retrieved, we can hide it from
    // user code as well.
    delete containerElementType.observedAttributes;
  });
}

// Forward public API methods from |containerElementType|'s prototype to their
// internal implementations. If the method is defined on |containerType|, we
// forward to that. Otherwise, we forward to the method on |internalApi|.
function forwardApiMethods(
    containerElementType, containerType, internalApi, methodNames) {
  var createContainerImplHandler = function(m) {
    return function(var_args) {
      var internal = privates(this).internal;
      return $Function.apply(internal[m], internal, arguments);
    };
  };

  var createInternalApiHandler = function(m) {
    return function(var_args) {
      var internal = privates(this).internal;
      var instanceId = internal.guest.getId();
      if (!instanceId) {
        return false;
      }
      var args = $Array.concat([instanceId], $Array.slice(arguments));
      $Function.apply(internalApi[m], null, args);
      return true;
    };
  };

  for (var m of methodNames) {
    if (!containerElementType.prototype[m]) {
      if (containerType.prototype[m]) {
        containerElementType.prototype[m] = createContainerImplHandler(m);
      } else if (internalApi && internalApi[m]) {
        containerElementType.prototype[m] = createInternalApiHandler(m);
      } else {
        logging.DCHECK(false, m + ' has no implementation.');
      }
    }
  }
}

class GuestViewContainerElement extends HTMLElement {}

// Override |focus| to let |internal| handle it.
GuestViewContainerElement.prototype.focus = function() {
  var internal = privates(this).internal;
  if (!internal)
    return;

  internal.focus();
};

// Exports.
exports.$set('GuestViewContainerElement', GuestViewContainerElement);
exports.$set('registerElement', registerElement);
exports.$set('forwardApiMethods', forwardApiMethods);
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module implements the registration of guestview elements when
// permissions are not available. These elements exist only to provide a useful
// error message when developers attempt to use them.

var $CustomElementRegistry =
    require('safeMethods').SafeMethods.$CustomElementRegistry;
var $EventTarget = require('safeMethods').SafeMethods.$EventTarget;
var GuestViewInternalNatives = requireNative('guest_view_internal');

// Once the document has loaded, expose the error-providing element's
// constructor to user code via |window|.
// GuestView elements used to be defined only once the document had loaded (see
// https://crbug.com/810012). This has been fixed, but as seen in
// https://crbug.com/1014385, user code that does not have permission for a
// GuestView could be using the same name for another purpose. In order to avoid
// potential name collisions with user code, we preserve the previous
// asynchronous behaviour for exposing the constructor of the error-providing
// element via |window|.
function asyncProvideElementConstructor(viewType, elementConstructor) {
  let useCapture = true;
  window.addEventListener('readystatechange', function listener(event) {
    if (document.readyState == 'loading')
      return;

    // If user code did use the name, we won't overwrite with the
    // error-providing element.
    if (!$Object.hasOwnProperty(window, viewType)) {
      $Object.defineProperty(window, viewType, {
        value: elementConstructor,
      });
    }

    $EventTarget.removeEventListener(window, event.type, listener, useCapture);
  }, useCapture);
}

// Registers an error-providing GuestView custom element.
function registerDeniedElement(viewType, permissionName) {
  GuestViewInternalNatives.AllowGuestViewElementDefinition(() => {
    var DeniedElement = class extends HTMLElement {
      constructor() {
        super();
        window.console.error(`You do not have permission to use the ${
            viewType} element. Be sure to declare the "${
            permissionName}" permission in your manifest file.`);
      }
    }
    $CustomElementRegistry.define(
        window.customElements, $String.toLowerCase(viewType), DeniedElement);
    asyncProvideElementConstructor(viewType, DeniedElement);
  });
}

// Exports.
exports.$set('registerDeniedElement', registerDeniedElement);
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Event management for GuestViewContainers.

var $EventTarget = require('safeMethods').SafeMethods.$EventTarget;
var GuestViewInternalNatives = requireNative('guest_view_internal');
var MessagingNatives = requireNative('messaging_natives');

var CreateEvent = function(name) {
  return bindingUtil.createCustomEvent(name,
                                       true /* supportsFilters */,
                                       false /* supportsLazyListeners */);
};

function GuestViewEvents(view) {
  view.events = this;

  this.view = view;
  this.on = $Object.create(null);

  // |setupEventProperty| is normally called automatically, but these events are
  // are registered here because they are dispatched from GuestViewContainer
  // instead of in response to extension events.
  this.setupEventProperty('contentresize');
  this.setupEventProperty('resize');
  this.setupEvents();
}

// Prevent GuestViewEvents inadvertently inheritng code from the global Object,
// allowing a pathway for unintended execution of user code.
// TODO(wjmaclean): Track down other issues of Object inheritance.
// https://crbug.com/701034
GuestViewEvents.prototype.__proto__ = null;

// |GuestViewEvents.EVENTS| is a dictionary of extension events to be listened
//     for, which specifies how each event should be handled. The events are
//     organized by name, and by default will be dispatched as DOM events with
//     the same name.
// |cancelable| (default: false) specifies whether the DOM event's default
//     behavior can be canceled. If the default action associated with the event
//     is prevented, then its dispatch function will return false in its event
//     handler. The event must have a specified |handler| for this to be
//     meaningful.
// |evt| specifies a descriptor object for the extension event. An event
//     listener will be attached to this descriptor.
// |fields| (default: none) specifies the public-facing fields in the DOM event
//     that are accessible to developers.
// |handler| specifies the name of a handler function to be called each time
//     that extension event is caught by its event listener. The DOM event
//     should be dispatched within this handler function (if desired). With no
//     handler function, the DOM event will be dispatched by default each time
//     the extension event is caught.
// |internal| (default: false) specifies that the event will not be dispatched
//     as a DOM event, and will also not appear as an on* property on the view’s
//     element. A |handler| should be specified for all internal events, and
//     |fields| and |cancelable| should be left unspecified (as they are only
//     meaningful for DOM events).
GuestViewEvents.EVENTS = $Object.create(null);

// Attaches |listener| onto the event descriptor object |evt|, and registers it
// to be removed once this GuestViewEvents object is garbage collected.
GuestViewEvents.prototype.addScopedListener = function(
    evt, listener, listenerOpts) {
  $Array.push(this.listenersToBeRemoved, { 'evt': evt, 'listener': listener });
  evt.addListener(listener, listenerOpts);
};

// Sets up the handling of events.
GuestViewEvents.prototype.setupEvents = function() {
  // An array of registerd event listeners that should be removed when this
  // GuestViewEvents is garbage collected.
  this.listenersToBeRemoved = [];
  MessagingNatives.BindToGC(
      this, $Function.bind(function(listenersToBeRemoved) {
    for (var i = 0; i != listenersToBeRemoved.length; ++i) {
      listenersToBeRemoved[i].evt.removeListener(
          listenersToBeRemoved[i].listener);
      listenersToBeRemoved[i] = null;
    }
  }, undefined, this.listenersToBeRemoved), -1 /* portId */);

  // Set up the GuestView events.
  for (var eventName in GuestViewEvents.EVENTS) {
    this.setupEvent(eventName, GuestViewEvents.EVENTS[eventName]);
  }

  // Set up the derived view's events.
  var events = this.getEvents();
  for (var eventName in events) {
    this.setupEvent(eventName, events[eventName]);
  }
};

// Sets up the handling of the |eventName| event.
GuestViewEvents.prototype.setupEvent = function(eventName, eventInfo) {
  if (!eventInfo.internal) {
    this.setupEventProperty(eventName);
  }

  var listenerOpts = { instanceId: this.view.viewInstanceId };
  if (eventInfo.handler) {
    this.addScopedListener(eventInfo.evt, this.weakWrapper(function(e) {
      this[eventInfo.handler](e, eventName);
    }), listenerOpts);
    return;
  }

  // Internal events are not dispatched as DOM events.
  if (eventInfo.internal) {
    return;
  }

  this.addScopedListener(eventInfo.evt, this.weakWrapper(function(e) {
    var domEvent = this.makeDomEvent(e, eventName);
    this.view.dispatchEvent(domEvent);
  }), listenerOpts);
};

// Constructs a DOM event based on the info for the |eventName| event provided
// in either |GuestViewEvents.EVENTS| or getEvents().
GuestViewEvents.prototype.makeDomEvent = function(event, eventName) {
  var eventInfo =
      GuestViewEvents.EVENTS[eventName] || this.getEvents()[eventName];

  // Internal events are not dispatched as DOM events.
  if (eventInfo.internal) {
    return null;
  }

  var details = $Object.create(null);
  details.bubbles = true;
  if (eventInfo.cancelable) {
    details.cancelable = true;
  }
  var domEvent = new Event(eventName, details);
  if (eventInfo.fields) {
    $Array.forEach(eventInfo.fields, $Function.bind(function(field) {
      if (event[field] !== undefined) {
        $Object.defineProperty(domEvent, field, {value: event[field]});
      }
    }, this));
  }

  return domEvent;
};

// Adds an 'on<event>' property on the view, which can be used to set/unset
// an event handler.
GuestViewEvents.prototype.setupEventProperty = function(eventName) {
  var propertyName = 'on' + $String.toLowerCase(eventName);
  $Object.defineProperty(this.view.element, propertyName, {
    get: $Function.bind(function() {
      return this.on[propertyName];
    }, this),
    set: $Function.bind(function(value) {
      if (this.on[propertyName]) {
        $EventTarget.removeEventListener(
            this.view.element, eventName, this.on[propertyName]);
      }
      this.on[propertyName] = value;
      if (value) {
        $EventTarget.addEventListener(this.view.element, eventName, value);
      }
    }, this),
    enumerable: true
  });
};

// returns a wrapper for |func| with a weak reference to |this|.
GuestViewEvents.prototype.weakWrapper = function(func) {
  var viewInstanceId = this.view.viewInstanceId;
  return function() {
    var view = GuestViewInternalNatives.GetViewFromID(viewInstanceId);
    if (!view) {
      return;
    }
    return $Function.apply(func, view.events, $Array.slice(arguments));
  };
};

// Implemented by the derived event manager, if one exists.
GuestViewEvents.prototype.getEvents = function() { return {}; };

// Exports.
exports.$set('GuestViewEvents', GuestViewEvents);
exports.$set('CreateEvent', CreateEvent);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module implements a wrapper for a guestview that manages its
// creation, attaching, and destruction.

var $HTMLIFrameElement = require('safeMethods').SafeMethods.$HTMLIFrameElement;
var CreateEvent = require('guestViewEvents').CreateEvent;
var GuestViewInternal = getInternalApi('guestViewInternal');
var GuestViewInternalNatives = requireNative('guest_view_internal');

// Events.
var ResizeEvent = CreateEvent('guestViewInternal.onResize');

// Error messages.
var ERROR_MSG_ALREADY_ATTACHED = 'The guest has already been attached.';
var ERROR_MSG_ALREADY_CREATED = 'The guest has already been created.';
var ERROR_MSG_INVALID_STATE = 'The guest is in an invalid state.';
var ERROR_MSG_NOT_ATTACHED = 'The guest is not attached.';
var ERROR_MSG_NOT_CREATED = 'The guest has not been created.';

// Properties.
var PROPERTY_ON_RESIZE = 'onresize';

var getIframeContentWindow = function(viewInstanceId) {
  var view = GuestViewInternalNatives.GetViewFromID(viewInstanceId);
  if (!view)
    return null;

  var internalIframeElement = view.internalElement;
  if (internalIframeElement)
    return $HTMLIFrameElement.contentWindow.get(internalIframeElement);

  return null;
};

// Contains and hides the internal implementation details of |GuestView|,
// including maintaining its state and enforcing the proper usage of its API
// fucntions.
function GuestViewImpl(guestView, viewType, guestInstanceId) {
  if (guestInstanceId) {
    this.id = guestInstanceId;
    this.state = GuestViewImpl.GuestState.GUEST_STATE_CREATED;
  } else {
    this.id = 0;
    this.state = GuestViewImpl.GuestState.GUEST_STATE_START;
  }
  this.actionQueue = [];
  this.contentWindow = null;
  this.guestView = guestView;
  this.pendingAction = null;
  this.viewType = viewType;
  this.internalInstanceId = 0;

  this.setupOnResize();
}

// Prevent GuestViewImpl inadvertently inheriting code from the global Object,
// allowing a pathway for executing unintended user code execution.
// TODO(wjmaclean): Track down other issues of Object inheritance.
// https://crbug.com/701034
GuestViewImpl.prototype.__proto__ = null;

// Possible states.
GuestViewImpl.GuestState = {
  GUEST_STATE_START: 0,
  GUEST_STATE_CREATED: 1,
  GUEST_STATE_ATTACHED: 2
};

// Sets up the onResize property on the GuestView.
GuestViewImpl.prototype.setupOnResize = function() {
  $Object.defineProperty(this.guestView, PROPERTY_ON_RESIZE, {
    get: $Function.bind(function() {
      return this[PROPERTY_ON_RESIZE];
    }, this),
    set: $Function.bind(function(value) {
      this[PROPERTY_ON_RESIZE] = value;
    }, this),
    enumerable: true
  });

  this.callOnResize = $Function.bind(function(e) {
    if (!this[PROPERTY_ON_RESIZE]) {
      return;
    }
    this[PROPERTY_ON_RESIZE](e);
  }, this);
};

// Callback wrapper that is used to call the callback of the pending action (if
// one exists), and then performs the next action in the queue.
GuestViewImpl.prototype.handleCallback = function(callback) {
  if (callback) {
    callback();
  }
  this.pendingAction = null;
  this.performNextAction();
};

// Perform the next action in the queue, if one exists.
GuestViewImpl.prototype.performNextAction = function() {
  // Make sure that there is not already an action in progress, and that there
  // exists a queued action to perform.
  if (!this.pendingAction && this.actionQueue.length) {
    this.pendingAction = $Array.shift(this.actionQueue);
    this.pendingAction();
  }
};

// Check the current state to see if the proposed action is valid. Returns false
// if invalid.
GuestViewImpl.prototype.checkState = function(action) {
  // Create an error prefix based on the proposed action.
  var errorPrefix = 'Error calling ' + action + ': ';

  // Check that the current state is valid.
  if (!(this.state >= 0 && this.state <= 2)) {
    window.console.error(errorPrefix + ERROR_MSG_INVALID_STATE);
    return false;
  }

  // Map of possible errors for each action. For each action, the errors are
  // listed for states in the order: GUEST_STATE_START, GUEST_STATE_CREATED,
  // GUEST_STATE_ATTACHED.
  var errors = {
    'attach': [ERROR_MSG_NOT_CREATED, null, ERROR_MSG_ALREADY_ATTACHED],
    'create': [null, ERROR_MSG_ALREADY_CREATED, ERROR_MSG_ALREADY_CREATED],
    'destroy': [null, null, null],
    'detach': [ERROR_MSG_NOT_ATTACHED, ERROR_MSG_NOT_ATTACHED, null],
    'setSize': [ERROR_MSG_NOT_CREATED, null, null]
  };

  // Check that the proposed action is a real action.
  if (errors[action] == undefined) {
    window.console.error(errorPrefix + ERROR_MSG_INVALID_ACTION);
    return false;
  }

  // Report the error if the proposed action is found to be invalid for the
  // current state.
  var error;
  if (error = errors[action][this.state]) {
    window.console.error(errorPrefix + error);
    return false;
  }

  return true;
};

// Returns a wrapper function for |func| with a weak reference to |this|. This
// implementation of weakWrapper() requires a provided |viewInstanceId| since
// GuestViewImpl does not store this ID.
GuestViewImpl.prototype.weakWrapper = function(func, viewInstanceId) {
  return function() {
    var view = GuestViewInternalNatives.GetViewFromID(viewInstanceId);
    if (view && view.guest) {
      return $Function.apply(
          func, view.guest.internal, $Array.slice(arguments));
    }
  };
};

// Internal implementation of attach().
GuestViewImpl.prototype.attachImpl = function(
    internalInstanceId, viewInstanceId, attachParams, callback) {
  var view = GuestViewInternalNatives.GetViewFromID(viewInstanceId);
  if (!view.elementAttached) {
    // Defer the attachment until the <webview> element is attached.
    view.deferredAttachCallback = $Function.bind(this.attachImpl,
        this, internalInstanceId, viewInstanceId, attachParams, callback);
    return;
  };

  // Check the current state.
  if (!this.checkState('attach')) {
    this.handleCallback(callback);
    return;
  }

  // Callback wrapper function to set the contentWindow following attachment,
  // and advance the queue.
  var callbackWrapper = function(callback) {
    var contentWindow = getIframeContentWindow(viewInstanceId);
    // Check if attaching failed.
    if (!contentWindow) {
      this.state = GuestViewImpl.GuestState.GUEST_STATE_CREATED;
      this.internalInstanceId = 0;
    } else {
      // Only update the contentWindow if attaching is successful.
      this.contentWindow = contentWindow;
    }

    this.handleCallback(callback);
  };

  attachParams['instanceId'] = viewInstanceId;
  var contentWindow = getIframeContentWindow(viewInstanceId);
  // |contentWindow| is used to retrieve the RenderFrame in cpp.
  GuestViewInternalNatives.AttachIframeGuest(
      internalInstanceId, this.id, attachParams, contentWindow,
      $Function.bind(callbackWrapper, this, callback));

  this.internalInstanceId = internalInstanceId;
  this.state = GuestViewImpl.GuestState.GUEST_STATE_ATTACHED;

  // Detach automatically when the container is destroyed.
  GuestViewInternalNatives.RegisterDestructionCallback(
      internalInstanceId, this.weakWrapper(function() {
    if (this.state != GuestViewImpl.GuestState.GUEST_STATE_ATTACHED ||
        this.internalInstanceId != internalInstanceId) {
      return;
    }

    this.internalInstanceId = 0;
    this.state = GuestViewImpl.GuestState.GUEST_STATE_CREATED;
  }, viewInstanceId));
};

// Internal implementation of create().
GuestViewImpl.prototype.createImpl = function(createParams, callback) {
  // Check the current state.
  if (!this.checkState('create')) {
    this.handleCallback(callback);
    return;
  }

  // Callback wrapper function to store the guestInstanceId from the
  // createGuest() callback, handle potential creation failure, and advance the
  // queue.
  var callbackWrapper = function(callback, guestInfo) {
    this.id = guestInfo.id;

    // Check if creation failed.
    if (this.id === 0) {
      this.state = GuestViewImpl.GuestState.GUEST_STATE_START;
      this.contentWindow = null;
    }

    ResizeEvent.addListener(this.callOnResize, {instanceId: this.id});
    this.handleCallback(callback);
  };

  this.sendCreateRequest(
      createParams, $Function.bind(callbackWrapper, this, callback));

  this.state = GuestViewImpl.GuestState.GUEST_STATE_CREATED;
};

GuestViewImpl.prototype.sendCreateRequest = function(
    createParams, boundCallback) {
  GuestViewInternal.createGuest(this.viewType, createParams, boundCallback);
};

// Internal implementation of destroy().
GuestViewImpl.prototype.destroyImpl = function(callback) {
  // Check the current state.
  if (!this.checkState('destroy')) {
    this.handleCallback(callback);
    return;
  }

  if (this.state == GuestViewImpl.GuestState.GUEST_STATE_START) {
    // destroy() does nothing in this case.
    this.handleCallback(callback);
    return;
  }

  // Reset the state of the destroyed guest;
  this.contentWindow = null;
  this.id = 0;
  this.internalInstanceId = 0;
  this.state = GuestViewImpl.GuestState.GUEST_STATE_START;
  if (ResizeEvent.hasListener(this.callOnResize)) {
    ResizeEvent.removeListener(this.callOnResize);
  }

  // Handle callback at end to avoid handling items in the action queue out of
  // order, since the callback is run synchronously here.
  this.handleCallback(callback);
};

// Internal implementation of setSize().
GuestViewImpl.prototype.setSizeImpl = function(sizeParams, callback) {
  // Check the current state.
  if (!this.checkState('setSize')) {
    this.handleCallback(callback);
    return;
  }

  GuestViewInternal.setSize(
      this.id, sizeParams,
      $Function.bind(this.handleCallback, this, callback));
};

// The exposed interface to a guestview. Exposes in its API the functions
// attach(), create(), destroy(), and getId(). All other implementation details
// are hidden.
function GuestView(viewType, guestInstanceId) {
  this.internal = new GuestViewImpl(this, viewType, guestInstanceId);
}

GuestView.prototype.__proto__ = null;

// Attaches the guestview to the container with ID |internalInstanceId|.
GuestView.prototype.attach = function(
    internalInstanceId, viewInstanceId, attachParams, callback) {
  var internal = this.internal;
  $Array.push(internal.actionQueue, $Function.bind(internal.attachImpl,
      internal, internalInstanceId, viewInstanceId, attachParams, callback));
  internal.performNextAction();
};

// Creates the guestview.
GuestView.prototype.create = function(createParams, callback) {
  var internal = this.internal;
  $Array.push(internal.actionQueue, $Function.bind(internal.createImpl,
      internal, createParams, callback));
  internal.performNextAction();
};

// Destroys the guestview. Nothing can be done with the guestview after it has
// been destroyed.
GuestView.prototype.destroy = function(callback) {
  var internal = this.internal;
  $Array.push(
      internal.actionQueue,
      $Function.bind(internal.destroyImpl, internal, callback));
  internal.performNextAction();
};

// Adjusts the guestview's sizing parameters.
GuestView.prototype.setSize = function(sizeParams, callback) {
  var internal = this.internal;
  $Array.push(internal.actionQueue,
      $Function.bind(internal.setSizeImpl, internal, sizeParams, callback));
  internal.performNextAction();
};

// Returns the contentWindow for this guestview.
GuestView.prototype.getContentWindow = function() {
  var internal = this.internal;
  return internal.contentWindow;
};

// Returns the ID for this guestview.
GuestView.prototype.getId = function() {
  var internal = this.internal;
  return internal.id;
};

// Exports
exports.$set('GuestView', GuestView);
exports.$set('ResizeEvent', ResizeEvent);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This function takes an object |imageSpec| with the key |path| -
// corresponding to the internet URL to be translated - and optionally
// |width| and |height| which are the maximum dimensions to be used when
// converting the image.
function loadImageData(imageSpec, callbacks) {
  var path = imageSpec.path;
  var img = new Image();
  if (typeof callbacks.onerror === 'function') {
    img.onerror = function() {
      callbacks.onerror({ problem: 'could_not_load', path: path });
    };
  }
  img.onload = function() {
    var canvas = document.createElement('canvas');

    if (img.width <= 0 || img.height <= 0) {
      callbacks.onerror({ problem: 'image_size_invalid', path: path});
      return;
    }

    var scaleFactor = 1;
    if (imageSpec.width && imageSpec.width < img.width)
      scaleFactor = imageSpec.width / img.width;

    if (imageSpec.height && imageSpec.height < img.height) {
      var heightScale = imageSpec.height / img.height;
      if (heightScale < scaleFactor)
        scaleFactor = heightScale;
    }

    canvas.width = img.width * scaleFactor;
    canvas.height = img.height * scaleFactor;

    var canvas_context = canvas.getContext('2d');
    canvas_context.clearRect(0, 0, canvas.width, canvas.height);
    canvas_context.drawImage(img, 0, 0, canvas.width, canvas.height);
    try {
      var imageData = canvas_context.getImageData(
          0, 0, canvas.width, canvas.height);
      if (typeof callbacks.oncomplete === 'function') {
        callbacks.oncomplete(
            imageData.width, imageData.height, imageData.data.buffer);
      }
    } catch (e) {
      if (typeof callbacks.onerror === 'function') {
        callbacks.onerror({ problem: 'data_url_unavailable', path: path });
      }
    }
  }
  img.src = path;
}

function on_complete_index(index, err, loading, finished, callbacks) {
  return function(width, height, imageData) {
    delete loading[index];
    finished[index] = { width: width, height: height, data: imageData };
    if (err)
      callbacks.onerror(index);
    if ($Object.keys(loading).length == 0)
      callbacks.oncomplete(finished);
  }
}

function loadAllImages(imageSpecs, callbacks) {
  var loading = {}, finished = [],
      index, pathname;

  for (var index = 0; index < imageSpecs.length; index++) {
    loading[index] = imageSpecs[index];
    loadImageData(imageSpecs[index], {
      oncomplete: on_complete_index(index, false, loading, finished, callbacks),
      onerror: on_complete_index(index, true, loading, finished, callbacks)
    });
  }
}

exports.$set('loadImageData', loadImageData);
exports.$set('loadAllImages', loadAllImages);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

if ((typeof mojo === 'undefined') || !mojo.bindingsLibraryInitialized) {
  loadScript('mojo_bindings');
}
loadScript('extensions/common/mojom/keep_alive.mojom');

/**
 * An object that keeps the background page alive until closed.
 * @constructor
 * @alias module:keep_alive~KeepAlive
 */
function KeepAlive() {
  var pipe = Mojo.createMessagePipe();
  /**
   * The handle to the keep-alive object in the browser.
   * @type {!MojoHandle}
   * @private
   */
  this.handle_ = pipe.handle0;
  Mojo.bindInterface(extensions.KeepAlive.name, pipe.handle1, 'context', true);
}

/**
 * Removes this keep-alive.
 */
KeepAlive.prototype.close = function() {
  this.handle_.close();
};

/**
 * Creates a keep-alive.
 * @return {!module:keep_alive~KeepAlive} A new keep-alive.
 */
exports.$set('createKeepAlive', function() { return new KeepAlive(); });// extensions/common/mojom/keep_alive.mojom.js is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

'use strict';

(function() {
  var mojomId = 'extensions/common/mojom/keep_alive.mojom';
  if (mojo.internal.isMojomLoaded(mojomId)) {
    console.warn('The following mojom is loaded multiple times: ' + mojomId);
    return;
  }
  mojo.internal.markMojomLoaded(mojomId);
  var bindings = mojo;
  var associatedBindings = mojo;
  var codec = mojo.internal;
  var validator = mojo.internal;

  var exports = mojo.internal.exposeNamespace('extensions');




  function KeepAlivePtr(handleOrPtrInfo) {
    this.ptr = new bindings.InterfacePtrController(KeepAlive,
                                                   handleOrPtrInfo);
  }

  function KeepAliveAssociatedPtr(associatedInterfacePtrInfo) {
    this.ptr = new associatedBindings.AssociatedInterfacePtrController(
        KeepAlive, associatedInterfacePtrInfo);
  }

  KeepAliveAssociatedPtr.prototype =
      Object.create(KeepAlivePtr.prototype);
  KeepAliveAssociatedPtr.prototype.constructor =
      KeepAliveAssociatedPtr;

  function KeepAliveProxy(receiver) {
    this.receiver_ = receiver;
  }

  function KeepAliveStub(delegate) {
    this.delegate_ = delegate;
  }

  KeepAliveStub.prototype.accept = function(message) {
    var reader = new codec.MessageReader(message);
    switch (reader.messageName) {
    default:
      return false;
    }
  };

  KeepAliveStub.prototype.acceptWithResponder =
      function(message, responder) {
    var reader = new codec.MessageReader(message);
    switch (reader.messageName) {
    default:
      return false;
    }
  };

  function validateKeepAliveRequest(messageValidator) {
    return validator.validationError.NONE;
  }

  function validateKeepAliveResponse(messageValidator) {
    return validator.validationError.NONE;
  }

  var KeepAlive = {
    name: 'extensions.KeepAlive',
    kVersion: 0,
    ptrClass: KeepAlivePtr,
    proxyClass: KeepAliveProxy,
    stubClass: KeepAliveStub,
    validateRequest: validateKeepAliveRequest,
    validateResponse: null,
    mojomId: 'extensions/common/mojom/keep_alive.mojom',
    fuzzMethods: {
    },
  };
  KeepAliveStub.prototype.validator = validateKeepAliveRequest;
  KeepAliveProxy.prototype.validator = null;
  exports.KeepAlive = KeepAlive;
  exports.KeepAlivePtr = KeepAlivePtr;
  exports.KeepAliveAssociatedPtr = KeepAliveAssociatedPtr;
})();// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Custom bindings for the mime handler API.
 */

var utils = require('utils');

var NO_STREAM_ERROR =
    'Streams are only available from a mime handler view guest.';
var STREAM_ABORTED_ERROR = 'Stream has been aborted.';

if ((typeof mojo === 'undefined') || !mojo.bindingsLibraryInitialized) {
  loadScript('mojo_bindings');
}
loadScript('extensions/common/api/mime_handler.mojom');

var servicePtr = new extensions.mimeHandler.MimeHandlerServicePtr;
Mojo.bindInterface(extensions.mimeHandler.MimeHandlerService.name,
                   mojo.makeRequest(servicePtr).handle, "context", true);
var beforeUnloadControlPtr =
    new extensions.mimeHandler.BeforeUnloadControlPtr;
Mojo.bindInterface(
    extensions.mimeHandler.BeforeUnloadControl.name,
    mojo.makeRequest(beforeUnloadControlPtr).handle, "context", true);

// Stores a promise to the GetStreamInfo() result to avoid making additional
// calls in response to getStreamInfo() calls.
var streamInfoPromise;

function throwNoStreamError() {
  throw new Error(NO_STREAM_ERROR);
}

function createStreamInfoPromise() {
  return servicePtr.getStreamInfo().then(function(result) {
    if (!result.streamInfo)
      throw new Error(STREAM_ABORTED_ERROR);
    return result.streamInfo;
  }, throwNoStreamError);
}

function constructStreamInfoDict(streamInfo) {
  var headers = {};
  for (var header of streamInfo.responseHeaders) {
    headers[header[0]] = header[1];
  }
  return {
    mimeType: streamInfo.mimeType,
    originalUrl: streamInfo.originalUrl,
    streamUrl: streamInfo.streamUrl,
    tabId: streamInfo.tabId,
    embedded: !!streamInfo.embedded,
    responseHeaders: headers,
  };
}

apiBridge.registerCustomHook(function(bindingsAPI) {
  var apiFunctions = bindingsAPI.apiFunctions;
  utils.handleRequestWithPromiseDoNotUse(
      apiFunctions, 'mimeHandlerPrivate', 'getStreamInfo',
      function() {
    if (!streamInfoPromise)
      streamInfoPromise = createStreamInfoPromise();
    return streamInfoPromise.then(constructStreamInfoDict);
  });

  utils.handleRequestWithPromiseDoNotUse(
      apiFunctions, 'mimeHandlerPrivate', 'setShowBeforeUnloadDialog',
      function(showDialog) {
    return beforeUnloadControlPtr.setShowBeforeUnloadDialog(showDialog);
  });
});
// extensions/common/api/mime_handler.mojom.js is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

'use strict';

(function() {
  var mojomId = 'extensions/common/api/mime_handler.mojom';
  if (mojo.internal.isMojomLoaded(mojomId)) {
    console.warn('The following mojom is loaded multiple times: ' + mojomId);
    return;
  }
  mojo.internal.markMojomLoaded(mojomId);
  var bindings = mojo;
  var associatedBindings = mojo;
  var codec = mojo.internal;
  var validator = mojo.internal;

  var exports = mojo.internal.exposeNamespace('extensions.mimeHandler');



  function StreamInfo(values) {
    this.initDefaults_();
    this.initFields_(values);
  }


  StreamInfo.prototype.initDefaults_ = function() {
    this.mimeType = null;
    this.originalUrl = null;
    this.streamUrl = null;
    this.tabId = 0;
    this.embedded = false;
    this.responseHeaders = null;
  };
  StreamInfo.prototype.initFields_ = function(fields) {
    for(var field in fields) {
        if (this.hasOwnProperty(field))
          this[field] = fields[field];
    }
  };
  StreamInfo.generate = function(generator_) {
    var generated = new StreamInfo;
    generated.mimeType = generator_.generateString(false);
    generated.originalUrl = generator_.generateString(false);
    generated.streamUrl = generator_.generateString(false);
    generated.tabId = generator_.generateInt32();
    generated.responseHeaders = generator_.generateMap(
      function() {
        return generator_.generateString(false);
      },
      function() {
        return generator_.generateString(false);
      });
    generated.embedded = generator_.generateBool();
    return generated;
  };

  StreamInfo.prototype.mutate = function(mutator_) {
    if (mutator_.chooseMutateField()) {
      this.mimeType = mutator_.mutateString(this.mimeType, false);
    }
    if (mutator_.chooseMutateField()) {
      this.originalUrl = mutator_.mutateString(this.originalUrl, false);
    }
    if (mutator_.chooseMutateField()) {
      this.streamUrl = mutator_.mutateString(this.streamUrl, false);
    }
    if (mutator_.chooseMutateField()) {
      this.tabId = mutator_.mutateInt32(this.tabId);
    }
    if (mutator_.chooseMutateField()) {
      this.responseHeaders = mutator_.mutateMap(this.responseHeaders,
        function(val) {
          return mutator_.mutateString(val, false);
        },
        function(val) {
          return mutator_.mutateString(val, false);
        });
    }
    if (mutator_.chooseMutateField()) {
      this.embedded = mutator_.mutateBool(this.embedded);
    }
    return this;
  };
  StreamInfo.prototype.getHandleDeps = function() {
    var handles = [];
    return handles;
  };

  StreamInfo.prototype.setHandles = function() {
    this.setHandlesInternal_(arguments, 0);
  };
  StreamInfo.prototype.setHandlesInternal_ = function(handles, idx) {
    return idx;
  };

  StreamInfo.validate = function(messageValidator, offset) {
    var err;
    err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
    if (err !== validator.validationError.NONE)
        return err;

    var kVersionSizes = [
      {version: 0, numBytes: 48}
    ];
    err = messageValidator.validateStructVersion(offset, kVersionSizes);
    if (err !== validator.validationError.NONE)
        return err;


    // validate StreamInfo.mimeType
    err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
    if (err !== validator.validationError.NONE)
        return err;


    // validate StreamInfo.originalUrl
    err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 8, false)
    if (err !== validator.validationError.NONE)
        return err;


    // validate StreamInfo.streamUrl
    err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 16, false)
    if (err !== validator.validationError.NONE)
        return err;



    // validate StreamInfo.responseHeaders
    err = messageValidator.validateMapPointer(offset + codec.kStructHeaderSize + 32, false, codec.String, codec.String, false);
    if (err !== validator.validationError.NONE)
        return err;


    return validator.validationError.NONE;
  };

  StreamInfo.encodedSize = codec.kStructHeaderSize + 40;

  StreamInfo.decode = function(decoder) {
    var packed;
    var val = new StreamInfo();
    var numberOfBytes = decoder.readUint32();
    var version = decoder.readUint32();
    val.mimeType = decoder.decodeStruct(codec.String);
    val.originalUrl = decoder.decodeStruct(codec.String);
    val.streamUrl = decoder.decodeStruct(codec.String);
    val.tabId = decoder.decodeStruct(codec.Int32);
    packed = decoder.readUint8();
    val.embedded = (packed >> 0) & 1 ? true : false;
    decoder.skip(1);
    decoder.skip(1);
    decoder.skip(1);
    val.responseHeaders = decoder.decodeMapPointer(codec.String, codec.String);
    return val;
  };

  StreamInfo.encode = function(encoder, val) {
    var packed;
    encoder.writeUint32(StreamInfo.encodedSize);
    encoder.writeUint32(0);
    encoder.encodeStruct(codec.String, val.mimeType);
    encoder.encodeStruct(codec.String, val.originalUrl);
    encoder.encodeStruct(codec.String, val.streamUrl);
    encoder.encodeStruct(codec.Int32, val.tabId);
    packed = 0;
    packed |= (val.embedded & 1) << 0
    encoder.writeUint8(packed);
    encoder.skip(1);
    encoder.skip(1);
    encoder.skip(1);
    encoder.encodeMapPointer(codec.String, codec.String, val.responseHeaders);
  };
  function MimeHandlerService_GetStreamInfo_Params(values) {
    this.initDefaults_();
    this.initFields_(values);
  }


  MimeHandlerService_GetStreamInfo_Params.prototype.initDefaults_ = function() {
  };
  MimeHandlerService_GetStreamInfo_Params.prototype.initFields_ = function(fields) {
    for(var field in fields) {
        if (this.hasOwnProperty(field))
          this[field] = fields[field];
    }
  };
  MimeHandlerService_GetStreamInfo_Params.generate = function(generator_) {
    var generated = new MimeHandlerService_GetStreamInfo_Params;
    return generated;
  };

  MimeHandlerService_GetStreamInfo_Params.prototype.mutate = function(mutator_) {
    return this;
  };
  MimeHandlerService_GetStreamInfo_Params.prototype.getHandleDeps = function() {
    var handles = [];
    return handles;
  };

  MimeHandlerService_GetStreamInfo_Params.prototype.setHandles = function() {
    this.setHandlesInternal_(arguments, 0);
  };
  MimeHandlerService_GetStreamInfo_Params.prototype.setHandlesInternal_ = function(handles, idx) {
    return idx;
  };

  MimeHandlerService_GetStreamInfo_Params.validate = function(messageValidator, offset) {
    var err;
    err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
    if (err !== validator.validationError.NONE)
        return err;

    var kVersionSizes = [
      {version: 0, numBytes: 8}
    ];
    err = messageValidator.validateStructVersion(offset, kVersionSizes);
    if (err !== validator.validationError.NONE)
        return err;

    return validator.validationError.NONE;
  };

  MimeHandlerService_GetStreamInfo_Params.encodedSize = codec.kStructHeaderSize + 0;

  MimeHandlerService_GetStreamInfo_Params.decode = function(decoder) {
    var packed;
    var val = new MimeHandlerService_GetStreamInfo_Params();
    var numberOfBytes = decoder.readUint32();
    var version = decoder.readUint32();
    return val;
  };

  MimeHandlerService_GetStreamInfo_Params.encode = function(encoder, val) {
    var packed;
    encoder.writeUint32(MimeHandlerService_GetStreamInfo_Params.encodedSize);
    encoder.writeUint32(0);
  };
  function MimeHandlerService_GetStreamInfo_ResponseParams(values) {
    this.initDefaults_();
    this.initFields_(values);
  }


  MimeHandlerService_GetStreamInfo_ResponseParams.prototype.initDefaults_ = function() {
    this.streamInfo = null;
  };
  MimeHandlerService_GetStreamInfo_ResponseParams.prototype.initFields_ = function(fields) {
    for(var field in fields) {
        if (this.hasOwnProperty(field))
          this[field] = fields[field];
    }
  };
  MimeHandlerService_GetStreamInfo_ResponseParams.generate = function(generator_) {
    var generated = new MimeHandlerService_GetStreamInfo_ResponseParams;
    generated.streamInfo = generator_.generateStruct(extensions.mimeHandler.StreamInfo, true);
    return generated;
  };

  MimeHandlerService_GetStreamInfo_ResponseParams.prototype.mutate = function(mutator_) {
    if (mutator_.chooseMutateField()) {
      this.streamInfo = mutator_.mutateStruct(this.streamInfo, extensions.mimeHandler.StreamInfo, true);
    }
    return this;
  };
  MimeHandlerService_GetStreamInfo_ResponseParams.prototype.getHandleDeps = function() {
    var handles = [];
    return handles;
  };

  MimeHandlerService_GetStreamInfo_ResponseParams.prototype.setHandles = function() {
    this.setHandlesInternal_(arguments, 0);
  };
  MimeHandlerService_GetStreamInfo_ResponseParams.prototype.setHandlesInternal_ = function(handles, idx) {
    return idx;
  };

  MimeHandlerService_GetStreamInfo_ResponseParams.validate = function(messageValidator, offset) {
    var err;
    err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
    if (err !== validator.validationError.NONE)
        return err;

    var kVersionSizes = [
      {version: 0, numBytes: 16}
    ];
    err = messageValidator.validateStructVersion(offset, kVersionSizes);
    if (err !== validator.validationError.NONE)
        return err;


    // validate MimeHandlerService_GetStreamInfo_ResponseParams.streamInfo
    err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, StreamInfo, true);
    if (err !== validator.validationError.NONE)
        return err;

    return validator.validationError.NONE;
  };

  MimeHandlerService_GetStreamInfo_ResponseParams.encodedSize = codec.kStructHeaderSize + 8;

  MimeHandlerService_GetStreamInfo_ResponseParams.decode = function(decoder) {
    var packed;
    var val = new MimeHandlerService_GetStreamInfo_ResponseParams();
    var numberOfBytes = decoder.readUint32();
    var version = decoder.readUint32();
    val.streamInfo = decoder.decodeStructPointer(StreamInfo);
    return val;
  };

  MimeHandlerService_GetStreamInfo_ResponseParams.encode = function(encoder, val) {
    var packed;
    encoder.writeUint32(MimeHandlerService_GetStreamInfo_ResponseParams.encodedSize);
    encoder.writeUint32(0);
    encoder.encodeStructPointer(StreamInfo, val.streamInfo);
  };
  function BeforeUnloadControl_SetShowBeforeUnloadDialog_Params(values) {
    this.initDefaults_();
    this.initFields_(values);
  }


  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.prototype.initDefaults_ = function() {
    this.showDialog = false;
  };
  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.prototype.initFields_ = function(fields) {
    for(var field in fields) {
        if (this.hasOwnProperty(field))
          this[field] = fields[field];
    }
  };
  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.generate = function(generator_) {
    var generated = new BeforeUnloadControl_SetShowBeforeUnloadDialog_Params;
    generated.showDialog = generator_.generateBool();
    return generated;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.prototype.mutate = function(mutator_) {
    if (mutator_.chooseMutateField()) {
      this.showDialog = mutator_.mutateBool(this.showDialog);
    }
    return this;
  };
  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.prototype.getHandleDeps = function() {
    var handles = [];
    return handles;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.prototype.setHandles = function() {
    this.setHandlesInternal_(arguments, 0);
  };
  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.prototype.setHandlesInternal_ = function(handles, idx) {
    return idx;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.validate = function(messageValidator, offset) {
    var err;
    err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
    if (err !== validator.validationError.NONE)
        return err;

    var kVersionSizes = [
      {version: 0, numBytes: 16}
    ];
    err = messageValidator.validateStructVersion(offset, kVersionSizes);
    if (err !== validator.validationError.NONE)
        return err;


    return validator.validationError.NONE;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.encodedSize = codec.kStructHeaderSize + 8;

  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.decode = function(decoder) {
    var packed;
    var val = new BeforeUnloadControl_SetShowBeforeUnloadDialog_Params();
    var numberOfBytes = decoder.readUint32();
    var version = decoder.readUint32();
    packed = decoder.readUint8();
    val.showDialog = (packed >> 0) & 1 ? true : false;
    decoder.skip(1);
    decoder.skip(1);
    decoder.skip(1);
    decoder.skip(1);
    decoder.skip(1);
    decoder.skip(1);
    decoder.skip(1);
    return val;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.encode = function(encoder, val) {
    var packed;
    encoder.writeUint32(BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.encodedSize);
    encoder.writeUint32(0);
    packed = 0;
    packed |= (val.showDialog & 1) << 0
    encoder.writeUint8(packed);
    encoder.skip(1);
    encoder.skip(1);
    encoder.skip(1);
    encoder.skip(1);
    encoder.skip(1);
    encoder.skip(1);
    encoder.skip(1);
  };
  function BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams(values) {
    this.initDefaults_();
    this.initFields_(values);
  }


  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.prototype.initDefaults_ = function() {
  };
  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.prototype.initFields_ = function(fields) {
    for(var field in fields) {
        if (this.hasOwnProperty(field))
          this[field] = fields[field];
    }
  };
  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.generate = function(generator_) {
    var generated = new BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams;
    return generated;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.prototype.mutate = function(mutator_) {
    return this;
  };
  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.prototype.getHandleDeps = function() {
    var handles = [];
    return handles;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.prototype.setHandles = function() {
    this.setHandlesInternal_(arguments, 0);
  };
  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.prototype.setHandlesInternal_ = function(handles, idx) {
    return idx;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.validate = function(messageValidator, offset) {
    var err;
    err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
    if (err !== validator.validationError.NONE)
        return err;

    var kVersionSizes = [
      {version: 0, numBytes: 8}
    ];
    err = messageValidator.validateStructVersion(offset, kVersionSizes);
    if (err !== validator.validationError.NONE)
        return err;

    return validator.validationError.NONE;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.encodedSize = codec.kStructHeaderSize + 0;

  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.decode = function(decoder) {
    var packed;
    var val = new BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams();
    var numberOfBytes = decoder.readUint32();
    var version = decoder.readUint32();
    return val;
  };

  BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.encode = function(encoder, val) {
    var packed;
    encoder.writeUint32(BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.encodedSize);
    encoder.writeUint32(0);
  };
  var kMimeHandlerService_GetStreamInfo_Name = 222038061;

  function MimeHandlerServicePtr(handleOrPtrInfo) {
    this.ptr = new bindings.InterfacePtrController(MimeHandlerService,
                                                   handleOrPtrInfo);
  }

  function MimeHandlerServiceAssociatedPtr(associatedInterfacePtrInfo) {
    this.ptr = new associatedBindings.AssociatedInterfacePtrController(
        MimeHandlerService, associatedInterfacePtrInfo);
  }

  MimeHandlerServiceAssociatedPtr.prototype =
      Object.create(MimeHandlerServicePtr.prototype);
  MimeHandlerServiceAssociatedPtr.prototype.constructor =
      MimeHandlerServiceAssociatedPtr;

  function MimeHandlerServiceProxy(receiver) {
    this.receiver_ = receiver;
  }
  MimeHandlerServicePtr.prototype.getStreamInfo = function() {
    return MimeHandlerServiceProxy.prototype.getStreamInfo
        .apply(this.ptr.getProxy(), arguments);
  };

  MimeHandlerServiceProxy.prototype.getStreamInfo = function() {
    var params_ = new MimeHandlerService_GetStreamInfo_Params();
    return new Promise(function(resolve, reject) {
      var builder = new codec.MessageV1Builder(
          kMimeHandlerService_GetStreamInfo_Name,
          codec.align(MimeHandlerService_GetStreamInfo_Params.encodedSize),
          codec.kMessageExpectsResponse, 0);
      builder.encodeStruct(MimeHandlerService_GetStreamInfo_Params, params_);
      var message = builder.finish();
      this.receiver_.acceptAndExpectResponse(message).then(function(message) {
        var reader = new codec.MessageReader(message);
        var responseParams =
            reader.decodeStruct(MimeHandlerService_GetStreamInfo_ResponseParams);
        resolve(responseParams);
      }).catch(function(result) {
        reject(Error("Connection error: " + result));
      });
    }.bind(this));
  };

  function MimeHandlerServiceStub(delegate) {
    this.delegate_ = delegate;
  }
  MimeHandlerServiceStub.prototype.getStreamInfo = function() {
    return this.delegate_ && this.delegate_.getStreamInfo && this.delegate_.getStreamInfo();
  }

  MimeHandlerServiceStub.prototype.accept = function(message) {
    var reader = new codec.MessageReader(message);
    switch (reader.messageName) {
    default:
      return false;
    }
  };

  MimeHandlerServiceStub.prototype.acceptWithResponder =
      function(message, responder) {
    var reader = new codec.MessageReader(message);
    switch (reader.messageName) {
    case kMimeHandlerService_GetStreamInfo_Name:
      var params = reader.decodeStruct(MimeHandlerService_GetStreamInfo_Params);
      this.getStreamInfo().then(function(response) {
        var responseParams =
            new MimeHandlerService_GetStreamInfo_ResponseParams();
        responseParams.streamInfo = response.streamInfo;
        var builder = new codec.MessageV1Builder(
            kMimeHandlerService_GetStreamInfo_Name,
            codec.align(MimeHandlerService_GetStreamInfo_ResponseParams.encodedSize),
            codec.kMessageIsResponse, reader.requestID);
        builder.encodeStruct(MimeHandlerService_GetStreamInfo_ResponseParams,
                             responseParams);
        var message = builder.finish();
        responder.accept(message);
      });
      return true;
    default:
      return false;
    }
  };

  function validateMimeHandlerServiceRequest(messageValidator) {
    var message = messageValidator.message;
    var paramsClass = null;
    switch (message.getName()) {
      case kMimeHandlerService_GetStreamInfo_Name:
        if (message.expectsResponse())
          paramsClass = MimeHandlerService_GetStreamInfo_Params;
      break;
    }
    if (paramsClass === null)
      return validator.validationError.NONE;
    return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
  }

  function validateMimeHandlerServiceResponse(messageValidator) {
   var message = messageValidator.message;
   var paramsClass = null;
   switch (message.getName()) {
      case kMimeHandlerService_GetStreamInfo_Name:
        if (message.isResponse())
          paramsClass = MimeHandlerService_GetStreamInfo_ResponseParams;
        break;
    }
    if (paramsClass === null)
      return validator.validationError.NONE;
    return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
  }

  var MimeHandlerService = {
    name: 'extensions.mime_handler.MimeHandlerService',
    kVersion: 0,
    ptrClass: MimeHandlerServicePtr,
    proxyClass: MimeHandlerServiceProxy,
    stubClass: MimeHandlerServiceStub,
    validateRequest: validateMimeHandlerServiceRequest,
    validateResponse: validateMimeHandlerServiceResponse,
    mojomId: 'extensions/common/api/mime_handler.mojom',
    fuzzMethods: {
      getStreamInfo: {
        params: MimeHandlerService_GetStreamInfo_Params,
      },
    },
  };
  MimeHandlerServiceStub.prototype.validator = validateMimeHandlerServiceRequest;
  MimeHandlerServiceProxy.prototype.validator = validateMimeHandlerServiceResponse;
  var kBeforeUnloadControl_SetShowBeforeUnloadDialog_Name = 384110798;

  function BeforeUnloadControlPtr(handleOrPtrInfo) {
    this.ptr = new bindings.InterfacePtrController(BeforeUnloadControl,
                                                   handleOrPtrInfo);
  }

  function BeforeUnloadControlAssociatedPtr(associatedInterfacePtrInfo) {
    this.ptr = new associatedBindings.AssociatedInterfacePtrController(
        BeforeUnloadControl, associatedInterfacePtrInfo);
  }

  BeforeUnloadControlAssociatedPtr.prototype =
      Object.create(BeforeUnloadControlPtr.prototype);
  BeforeUnloadControlAssociatedPtr.prototype.constructor =
      BeforeUnloadControlAssociatedPtr;

  function BeforeUnloadControlProxy(receiver) {
    this.receiver_ = receiver;
  }
  BeforeUnloadControlPtr.prototype.setShowBeforeUnloadDialog = function() {
    return BeforeUnloadControlProxy.prototype.setShowBeforeUnloadDialog
        .apply(this.ptr.getProxy(), arguments);
  };

  BeforeUnloadControlProxy.prototype.setShowBeforeUnloadDialog = function(showDialog) {
    var params_ = new BeforeUnloadControl_SetShowBeforeUnloadDialog_Params();
    params_.showDialog = showDialog;
    return new Promise(function(resolve, reject) {
      var builder = new codec.MessageV1Builder(
          kBeforeUnloadControl_SetShowBeforeUnloadDialog_Name,
          codec.align(BeforeUnloadControl_SetShowBeforeUnloadDialog_Params.encodedSize),
          codec.kMessageExpectsResponse, 0);
      builder.encodeStruct(BeforeUnloadControl_SetShowBeforeUnloadDialog_Params, params_);
      var message = builder.finish();
      this.receiver_.acceptAndExpectResponse(message).then(function(message) {
        var reader = new codec.MessageReader(message);
        var responseParams =
            reader.decodeStruct(BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams);
        resolve(responseParams);
      }).catch(function(result) {
        reject(Error("Connection error: " + result));
      });
    }.bind(this));
  };

  function BeforeUnloadControlStub(delegate) {
    this.delegate_ = delegate;
  }
  BeforeUnloadControlStub.prototype.setShowBeforeUnloadDialog = function(showDialog) {
    return this.delegate_ && this.delegate_.setShowBeforeUnloadDialog && this.delegate_.setShowBeforeUnloadDialog(showDialog);
  }

  BeforeUnloadControlStub.prototype.accept = function(message) {
    var reader = new codec.MessageReader(message);
    switch (reader.messageName) {
    default:
      return false;
    }
  };

  BeforeUnloadControlStub.prototype.acceptWithResponder =
      function(message, responder) {
    var reader = new codec.MessageReader(message);
    switch (reader.messageName) {
    case kBeforeUnloadControl_SetShowBeforeUnloadDialog_Name:
      var params = reader.decodeStruct(BeforeUnloadControl_SetShowBeforeUnloadDialog_Params);
      this.setShowBeforeUnloadDialog(params.showDialog).then(function(response) {
        var responseParams =
            new BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams();
        var builder = new codec.MessageV1Builder(
            kBeforeUnloadControl_SetShowBeforeUnloadDialog_Name,
            codec.align(BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams.encodedSize),
            codec.kMessageIsResponse, reader.requestID);
        builder.encodeStruct(BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams,
                             responseParams);
        var message = builder.finish();
        responder.accept(message);
      });
      return true;
    default:
      return false;
    }
  };

  function validateBeforeUnloadControlRequest(messageValidator) {
    var message = messageValidator.message;
    var paramsClass = null;
    switch (message.getName()) {
      case kBeforeUnloadControl_SetShowBeforeUnloadDialog_Name:
        if (message.expectsResponse())
          paramsClass = BeforeUnloadControl_SetShowBeforeUnloadDialog_Params;
      break;
    }
    if (paramsClass === null)
      return validator.validationError.NONE;
    return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
  }

  function validateBeforeUnloadControlResponse(messageValidator) {
   var message = messageValidator.message;
   var paramsClass = null;
   switch (message.getName()) {
      case kBeforeUnloadControl_SetShowBeforeUnloadDialog_Name:
        if (message.isResponse())
          paramsClass = BeforeUnloadControl_SetShowBeforeUnloadDialog_ResponseParams;
        break;
    }
    if (paramsClass === null)
      return validator.validationError.NONE;
    return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
  }

  var BeforeUnloadControl = {
    name: 'extensions.mime_handler.BeforeUnloadControl',
    kVersion: 0,
    ptrClass: BeforeUnloadControlPtr,
    proxyClass: BeforeUnloadControlProxy,
    stubClass: BeforeUnloadControlStub,
    validateRequest: validateBeforeUnloadControlRequest,
    validateResponse: validateBeforeUnloadControlResponse,
    mojomId: 'extensions/common/api/mime_handler.mojom',
    fuzzMethods: {
      setShowBeforeUnloadDialog: {
        params: BeforeUnloadControl_SetShowBeforeUnloadDialog_Params,
      },
    },
  };
  BeforeUnloadControlStub.prototype.validator = validateBeforeUnloadControlRequest;
  BeforeUnloadControlProxy.prototype.validator = validateBeforeUnloadControlResponse;
  exports.StreamInfo = StreamInfo;
  exports.MimeHandlerService = MimeHandlerService;
  exports.MimeHandlerServicePtr = MimeHandlerServicePtr;
  exports.MimeHandlerServiceAssociatedPtr = MimeHandlerServiceAssociatedPtr;
  exports.BeforeUnloadControl = BeforeUnloadControl;
  exports.BeforeUnloadControlPtr = BeforeUnloadControlPtr;
  exports.BeforeUnloadControlAssociatedPtr = BeforeUnloadControlAssociatedPtr;
})();// Copyright (c) 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module keeps references to original methods before user code is able
// to overwrite them. We assume that this module is executed before any user
// code. The idea is similar to the extension system's SafeBuiltins, and since
// it's similar, we also use a $ prefix as a naming convention.
// For example,
// myElement.setAttribute(name, value);
// becomes
// $Element.setAttribute(myElement, name, value);
// We also provide access to getters and setters:
// myNode.parentNode;
// becomes
// $Node.parentNode.get(myNode);

function makeCallable(prototypeMethod) {
  return (thisArg, ...args) => {
    return $Function.apply(prototypeMethod, thisArg, args);
  };
}

function saveMethods(original, safe, methods) {
  for (var method of methods) {
    safe[method] = makeCallable(original.prototype[method]);
  }
}

function saveAccessors(original, safe, properties) {
  for (var property of properties) {
    var desc = $Object.getOwnPropertyDescriptor(original.prototype, property);

    safe[property] = {
      get: desc.get && makeCallable(desc.get),
      set: desc.set && makeCallable(desc.set),
    };
  }
}

var SafeMethods = {
  $CustomElementRegistry: {},
  $Document: {},
  $Element: {},
  $EventTarget: {},
  $HTMLElement: {},
  $HTMLIFrameElement: {},
  $MutationObserver: MutationObserver,
  $Node: {},
  $getComputedStyle: window.getComputedStyle,
  $parseInt: window.parseInt,
};

saveMethods(CustomElementRegistry, SafeMethods.$CustomElementRegistry, [
  'define',
]);

saveMethods(Document, SafeMethods.$Document, [
  'createElement',
  'webkitCancelFullScreen',
]);

saveMethods(Element, SafeMethods.$Element, [
  'attachShadow',
  'getAttribute',
  'getBoundingClientRect',
  'hasAttribute',
  'removeAttribute',
  'setAttribute',
  'webkitRequestFullScreen',
]);

saveMethods(EventTarget, SafeMethods.$EventTarget, [
  'addEventListener',
  'dispatchEvent',
  'removeEventListener',
]);

saveMethods(HTMLElement, SafeMethods.$HTMLElement, [
  'focus',
]);

saveAccessors(HTMLElement, SafeMethods.$HTMLElement, [
  'style',
  'innerText',
]);

saveAccessors(HTMLIFrameElement, SafeMethods.$HTMLIFrameElement, [
  'contentWindow',
]);

saveMethods(MutationObserver, SafeMethods.$MutationObserver, [
  'observe',
  'takeRecords',
]);

saveMethods(Node, SafeMethods.$Node, [
  'appendChild',
  'replaceChild',
]);

saveAccessors(Node, SafeMethods.$Node, [
  'parentNode',
]);

exports.$set('SafeMethods', SafeMethods);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var SetIconCommon = requireNative('setIcon').SetIconCommon;

function loadImagePath(path, callback) {
  let fetchPromise = fetch(path);

  let blobPromise = $Promise.then(fetchPromise, function(response) {
    if (!response.ok) {
      throw new $Error.self('Could not load action icon \'' + path + '\'.');
    }
    return response.blob();
  });

  let imagePromise = $Promise.then(blobPromise, function(blob) {
    return createImageBitmap(blob);
  });

  let imageDataPromise = $Promise.then(imagePromise, function(image) {
    var canvas = new OffscreenCanvas(image.width, image.height);
    var canvas_context = canvas.getContext('2d');
    canvas_context.clearRect(0, 0, canvas.width, canvas.height);
    canvas_context.drawImage(image, 0, 0, canvas.width, canvas.height);
    var imageData = canvas_context.getImageData(0, 0, canvas.width,
                                                canvas.height);
    callback(imageData);
  });

  $Promise.catch(imageDataPromise, function(error) {
    console.error(error);
  });
}

function smellsLikeImageData(imageData) {
  // See if this object at least looks like an ImageData element.
  // Unfortunately, we cannot use instanceof because the ImageData
  // constructor is not public.
  //
  // We do this manually instead of using JSONSchema to avoid having these
  // properties show up in the doc.
  return (typeof imageData == 'object') && ('width' in imageData) &&
         ('height' in imageData) && ('data' in imageData);
}

function verifyImageData(imageData) {
  if (!smellsLikeImageData(imageData)) {
    throw new Error(
        'The imageData property must contain an ImageData object or' +
        ' dictionary of ImageData objects.');
  }
}

/**
 * Normalizes |details| to a format suitable for sending to the browser,
 * for example converting ImageData to a binary representation.
 *
 * @param {ImageDetails} details
 *   The ImageDetails passed into an extension action-style API.
 * @param {Function} callback
 *   The callback function to pass processed imageData back to. Note that this
 *   callback may be called reentrantly.
 */
function setIcon(details, callback) {
  // Note that iconIndex is actually deprecated, and only available to the
  // pageAction API.
  // TODO(kalman): Investigate whether this is for the pageActions API, and if
  // so, delete it.
  if ('iconIndex' in details) {
    callback(details);
    return;
  }

  if ('imageData' in details) {
    if (smellsLikeImageData(details.imageData)) {
      var imageData = details.imageData;
      details.imageData = {};
      details.imageData[imageData.width.toString()] = imageData;
    } else if (typeof details.imageData == 'object' &&
               Object.getOwnPropertyNames(details.imageData).length !== 0) {
      for (var sizeKey in details.imageData) {
        verifyImageData(details.imageData[sizeKey]);
      }
    } else {
      verifyImageData(false);
    }

    callback(SetIconCommon(details));
    return;
  }

  if ('path' in details) {
    if (typeof details.path == 'object') {
      details.imageData = {};
      var detailKeyCount = 0;
      for (var iconSize in details.path) {
        ++detailKeyCount;
        loadImagePath(details.path[iconSize], function(size, imageData) {
          details.imageData[size] = imageData;
          if (--detailKeyCount == 0)
            callback(SetIconCommon(details));
        }.bind(null, iconSize));
      }
      if (detailKeyCount == 0)
        throw new Error('The path property must not be empty.');
    } else if (typeof details.path == 'string') {
      details.imageData = {};
      loadImagePath(details.path, function(imageData) {
        details.imageData[imageData.width.toString()] = imageData;
        delete details.path;
        callback(SetIconCommon(details));
      });
    }
    return;
  }
  throw new Error('Either the path or imageData property must be specified.');
}

exports.$set('setIcon', setIcon);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// test_custom_bindings.js
// mini-framework for ExtensionApiTest browser tests

var environmentSpecificBindings = require('test_environment_specific_bindings');
var GetExtensionAPIDefinitionsForTest =
    requireNative('apiDefinitions').GetExtensionAPIDefinitionsForTest;
var GetAPIFeatures = requireNative('test_features').GetAPIFeatures;
var natives = requireNative('test_native_handler');
var userGestures = requireNative('user_gestures');

var GetModuleSystem = requireNative('v8_context').GetModuleSystem;

function handleException(message, error) {
  bindingUtil.handleException(message || 'Unknown error', error);
}

apiBridge.registerCustomHook(function(api) {
  var chromeTest = api.compiledApi;
  var apiFunctions = api.apiFunctions;

  chromeTest.tests = chromeTest.tests || [];

  var currentTest = null;
  var lastTest = null;
  var testsFailed = 0;
  var testCount = 1;
  var failureException = 'chrome.test.failure';

  // Helper function to get around the fact that function names in javascript
  // are read-only, and you can't assign one to anonymous functions.
  function testName(test) {
    return test ? (test.name || test.generatedName) : "(no test)";
  }

  function testDone() {
    environmentSpecificBindings.testDone(chromeTest.runNextTest);
  }

  function allTestsDone() {
    if (testsFailed == 0) {
      chromeTest.notifyPass();
    } else {
      chromeTest.notifyFail('Failed ' + testsFailed + ' of ' +
                             testCount + ' tests');
    }
  }

  var pendingCallbacks = 0;

  apiFunctions.setHandleRequest('callbackAdded', function() {
    pendingCallbacks++;

    var called = null;
    return function() {
      if (called != null) {
        var redundantPrefix = 'Error\n';
        chromeTest.fail(
          'Callback has already been run. ' +
          'First call:\n' +
          $String.slice(called, redundantPrefix.length) + '\n' +
          'Second call:\n' +
          $String.slice(new Error().stack, redundantPrefix.length));
      }
      called = new Error().stack;

      pendingCallbacks--;
      if (pendingCallbacks == 0) {
        chromeTest.succeed();
      }
    };
  });

  apiFunctions.setHandleRequest('runNextTest', function() {
    // There may have been callbacks which were interrupted by failure
    // exceptions.
    pendingCallbacks = 0;

    lastTest = currentTest;
    currentTest = $Array.shift(chromeTest.tests);

    if (!currentTest) {
      allTestsDone();
      return;
    }

    try {
      chromeTest.log("( RUN      ) " + testName(currentTest));
      bindingUtil.setExceptionHandler(function(message, e) {
        if (e !== failureException)
          chromeTest.fail('uncaught exception: ' + message);
      });
      $Function.call(currentTest);
    } catch (e) {
      handleException(e.message, e);
    }
  });

  apiFunctions.setHandleRequest('fail', function failHandler(message) {
    chromeTest.log("(  FAILED  ) " + testName(currentTest));

    var stack = {};
    // NOTE(devlin): captureStackTrace() populates a stack property of the
    // passed-in object with the stack trace. The second parameter (failHandler)
    // represents a function to serve as a relative point, and is removed from
    // the trace (so that everything doesn't include failHandler in the trace
    // itself). This (and other APIs) are documented here:
    // https://github.com/v8/v8/wiki/Stack%20Trace%20API. If we wanted to be
    // really fancy, there may be more sophisticated ways of doing this.
    Error.captureStackTrace(stack, failHandler);

    if (!message)
      message = "FAIL (no message)";

    message += "\n" + stack.stack;
    console.log("[FAIL] " + testName(currentTest) + ": " + message);
    testsFailed++;
    testDone();

    // Interrupt the rest of the test.
    throw failureException;
  });

  apiFunctions.setHandleRequest('succeed', function() {
    console.log("[SUCCESS] " + testName(currentTest));
    chromeTest.log("(  SUCCESS )");
    testDone();
  });

  apiFunctions.setHandleRequest('getModuleSystem', function(context) {
    return GetModuleSystem(context);
  });

  apiFunctions.setHandleRequest('assertTrue', function(test, message) {
    chromeTest.assertBool(test, true, message);
  });

  apiFunctions.setHandleRequest('assertFalse', function(test, message) {
    chromeTest.assertBool(test, false, message);
  });

  apiFunctions.setHandleRequest('assertBool',
                                function(test, expected, message) {
    if (test !== expected) {
      if (typeof(test) == "string") {
        if (message)
          message = test + "\n" + message;
        else
          message = test;
      }
      chromeTest.fail(message);
    }
  });

  apiFunctions.setHandleRequest('checkDeepEq', function(expected, actual) {
    if ((expected === null) != (actual === null))
      return false;

    if (expected === actual)
      return true;

    if (typeof(expected) !== typeof(actual))
      return false;

    if ((actual instanceof ArrayBuffer) && (expected instanceof ArrayBuffer)) {
      if (actual.byteLength != expected.byteLength)
        return false;
      var actualView = new Uint8Array(actual);
      var expectedView = new Uint8Array(expected);
      for (var i = 0; i < actualView.length; ++i) {
        if (actualView[i] != expectedView[i]) {
          return false;
        }
      }
      return true;
    }

    for (var p in actual) {
      if ($Object.hasOwnProperty(actual, p) &&
          !$Object.hasOwnProperty(expected, p)) {
        return false;
      }
    }
    for (var p in expected) {
      if ($Object.hasOwnProperty(expected, p) &&
          !$Object.hasOwnProperty(actual, p)) {
        return false;
      }
    }

    for (var p in expected) {
      var eq = true;
      switch (typeof(expected[p])) {
        case 'object':
          eq = chromeTest.checkDeepEq(expected[p], actual[p]);
          break;
        case 'function':
          eq = (typeof(actual[p]) != 'undefined' &&
                expected[p].toString() == actual[p].toString());
          break;
        default:
          eq = (expected[p] == actual[p] &&
                typeof(expected[p]) == typeof(actual[p]));
          break;
      }
      if (!eq)
        return false;
    }
    return true;
  });

  apiFunctions.setHandleRequest('assertEq',
                                function(expected, actual, message) {
    var error_msg = "API Test Error in " + testName(currentTest);
    if (message)
      error_msg += ": " + message;
    if (typeof(expected) == 'object') {
      if (!chromeTest.checkDeepEq(expected, actual)) {
        error_msg += "\nActual: " + $JSON.stringify(actual) +
                     "\nExpected: " + $JSON.stringify(expected);
        chromeTest.fail(error_msg);
      }
      return;
    }
    if (expected != actual) {
      chromeTest.fail(error_msg +
                       "\nActual: " + actual + "\nExpected: " + expected);
    }
    if (typeof(expected) != typeof(actual)) {
      chromeTest.fail(error_msg +
                       " (type mismatch)\nActual Type: " + typeof(actual) +
                       "\nExpected Type:" + typeof(expected));
    }
  });

  apiFunctions.setHandleRequest('assertNoLastError', function() {
    if (chrome.runtime.lastError != undefined) {
      chromeTest.fail("lastError.message == " +
                       chrome.runtime.lastError.message);
    }
  });

  apiFunctions.setHandleRequest('assertLastError', function(expectedError) {
    chromeTest.assertEq(typeof(expectedError), 'string');
    chromeTest.assertTrue(chrome.runtime.lastError != undefined,
        "No lastError, but expected " + expectedError);
    chromeTest.assertEq(expectedError, chrome.runtime.lastError.message);
  });

  apiFunctions.setHandleRequest('assertThrows',
                                function(fn, self, args, message) {
    chromeTest.assertTrue(typeof fn == 'function');
    try {
      fn.apply(self, args);
      chromeTest.fail('Did not throw error: ' + fn);
    } catch (e) {
      if (e != failureException && message !== undefined) {
        if (message instanceof RegExp) {
          chromeTest.assertTrue(message.test(e.message),
                                e.message + ' should match ' + message)
        } else {
          chromeTest.assertEq(message, e.message);
        }
      }
    }
  });

  function safeFunctionApply(func, args) {
    try {
      if (func)
        return $Function.apply(func, undefined, args);
    } catch (e) {
      if (e === failureException)
        throw e;
      handleException(e.message, e);
    }
  };

  // Wrapper for generating test functions, that takes care of calling
  // assertNoLastError() and (optionally) succeed() for you.
  apiFunctions.setHandleRequest('callback', function(func, expectedError) {
    if (func) {
      chromeTest.assertEq(typeof(func), 'function');
    }
    var callbackCompleted = chromeTest.callbackAdded();

    return function() {
      if (expectedError == null) {
        chromeTest.assertNoLastError();
      } else {
        chromeTest.assertLastError(expectedError);
      }

      var result;
      if (func) {
        result = safeFunctionApply(func, arguments);
      }

      callbackCompleted();
      return result;
    };
  });

  apiFunctions.setHandleRequest('listenOnce', function(event, func) {
    var callbackCompleted = chromeTest.callbackAdded();
    var listener = function() {
      event.removeListener(listener);
      safeFunctionApply(func, arguments);
      callbackCompleted();
    };
    event.addListener(listener);
  });

  apiFunctions.setHandleRequest('listenForever', function(event, func) {
    var callbackCompleted = chromeTest.callbackAdded();

    var listener = function() {
      safeFunctionApply(func, arguments);
    };

    var done = function() {
      event.removeListener(listener);
      callbackCompleted();
    };

    event.addListener(listener);
    return done;
  });

  apiFunctions.setHandleRequest('callbackPass', function(func) {
    return chromeTest.callback(func);
  });

  apiFunctions.setHandleRequest('callbackFail', function(expectedError, func) {
    return chromeTest.callback(func, expectedError);
  });

  apiFunctions.setHandleRequest('runTests', function(tests) {
    chromeTest.tests = tests;
    testCount = chromeTest.tests.length;
    chromeTest.runNextTest();
  });

  apiFunctions.setHandleRequest('getApiDefinitions', function() {
    return GetExtensionAPIDefinitionsForTest();
  });

  apiFunctions.setHandleRequest('getApiFeatures', function() {
    return GetAPIFeatures();
  });

  apiFunctions.setHandleRequest('isProcessingUserGesture', function() {
    return userGestures.IsProcessingUserGesture();
  });

  apiFunctions.setHandleRequest('runWithUserGesture', function(callback) {
    chromeTest.assertEq(typeof(callback), 'function');
    return userGestures.RunWithUserGesture(callback);
  });

  apiFunctions.setHandleRequest('setExceptionHandler', function(callback) {
    chromeTest.assertEq(typeof(callback), 'function');
    bindingUtil.setExceptionHandler(callback);
  });

  apiFunctions.setHandleRequest('getWakeEventPage', function() {
    return natives.GetWakeEventPage();
  });

  environmentSpecificBindings.registerHooks(api);
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Handles uncaught exceptions thrown by extensions. By default this is to
// log an error message, but tests may override this behaviour.
var handler = function(message, e) {
  console.error(message);
};

/**
 * Formats the error message and invokes the error handler.
 *
 * @param {string} message - Error message prefix.
 * @param {Error|*} e - Thrown object.
 * @param {string=} priorStackTrace - Error message suffix.
 * @see formatErrorMessage
 */
function handle(message, e, priorStackTrace) {
  message = formatErrorMessage(message, e, priorStackTrace);
  handler(message, e);
}

// Runs a user-supplied callback safely.
function safeCallbackApply(name, request, callback, args) {
  try {
    $Function.apply(callback, request, args);
  } catch (e) {
    handle('Error in response to ' + name, e, request.stack);
  }
}

/**
 * Append the error description and stack trace to |message|.
 *
 * @param {string} message - The prefix of the error message.
 * @param {Error|*} e - The thrown error object. This object is potentially
 *   unsafe, because it could be generated by an extension.
 * @param {string=} priorStackTrace - The stack trace to be appended to the
 *   error message. This stack trace must not include stack frames of |e.stack|,
 *   because both stack traces are concatenated. Overlapping stack traces will
 *   confuse extension developers.
 * @return {string} The formatted error message.
 */
function formatErrorMessage(message, e, priorStackTrace) {
  if (e)
    message += ': ' + safeErrorToString(e, false);

  var stack;
  try {
    // If the stack was set, use it.
    // |e.stack| could be void in the following common example:
    // throw "Error message";
    stack = $String.self(e && e.stack);
  } catch (e) {}

  // If a stack is not provided, capture a stack trace.
  if (!priorStackTrace && !stack)
    stack = getStackTrace();

  stack = filterExtensionStackTrace(stack);
  if (stack)
    message += '\n' + stack;

  // If an asynchronouse stack trace was set, append it.
  if (priorStackTrace)
    message += '\n' + priorStackTrace;

  return message;
}

function filterExtensionStackTrace(stack) {
  if (!stack)
    return '';
  // Remove stack frames in the stack trace that weren't associated with the
  // extension, to not confuse extension developers with internal details.
  stack = $String.split(stack, '\n');
  stack = $Array.filter(stack, function(line) {
    return $String.indexOf(line, 'chrome-extension://') >= 0;
  });
  return $Array.join(stack, '\n');
}

function getStackTrace() {
  var e = {};
  $Error.captureStackTrace(e, getStackTrace);
  return e.stack;
}

function getExtensionStackTrace() {
  return filterExtensionStackTrace(getStackTrace());
}

/**
 * Convert an object to a string.
 *
 * @param {Error|*} e - A thrown object (possibly user-supplied).
 * @param {boolean=} omitType - Whether to try to serialize |e.message| instead
 *   of |e.toString()|.
 * @return {string} The error message.
 */
function safeErrorToString(e, omitType) {
  try {
    return $String.self(omitType && e.message || e);
  } catch (e) {
    // This error is exceptional and could be triggered by
    // throw {toString: function() { throw 'Haha' } };
    return '(cannot get error message)';
  }
}

exports.$set('handle', handle);

// |newHandler| A function which matches |handler|.
exports.$set('setHandler', function(newHandler) {
  handler = newHandler;
});

exports.$set('safeCallbackApply', safeCallbackApply);
exports.$set('getStackTrace', getStackTrace);
exports.$set('getExtensionStackTrace', getExtensionStackTrace);
exports.$set('safeErrorToString', safeErrorToString);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var nativeDeepCopy = requireNative('utils').deepCopy;
var logActivity = requireNative('activityLogger');
var exceptionHandler = require('uncaught_exception_handler');

/**
 * An object forEach. Calls |f| with each (key, value) pair of |obj|, using
 * |self| as the target.
 * @param {Object} obj The object to iterate over.
 * @param {function} f The function to call in each iteration.
 * @param {Object} self The object to use as |this| in each function call.
 */
function forEach(obj, f, self) {
  for (var key in obj) {
    if ($Object.hasOwnProperty(obj, key))
      $Function.call(f, self, key, obj[key]);
  }
}

/**
 * Assuming |array_of_dictionaries| is structured like this:
 * [{id: 1, ... }, {id: 2, ...}, ...], you can use
 * lookup(array_of_dictionaries, 'id', 2) to get the dictionary with id == 2.
 * @param {Array<Object<?>>} array_of_dictionaries
 * @param {string} field
 * @param {?} value
 */
function lookup(array_of_dictionaries, field, value) {
  var filter = function (dict) {return dict[field] == value;};
  var matches = $Array.filter(array_of_dictionaries, filter);
  if (matches.length == 0) {
    return undefined;
  } else if (matches.length == 1) {
    return matches[0]
  } else {
    throw new Error("Failed lookup of field '" + field + "' with value '" +
                    value + "'");
  }
}

/**
 * Sets a property |value| on |obj| with property name |key|. Like
 *
 *     obj[key] = value;
 *
 * but without triggering setters.
 */
function defineProperty(obj, key, value) {
  $Object.defineProperty(obj, key, {
    __proto__: null,
    configurable: true,
    enumerable: true,
    writable: true,
    value: value,
  });
}

/**
 * Takes a private class implementation |privateClass| and exposes a subset of
 * its methods |functions| and properties |properties| and |readonly| to a
 * public wrapper class that should be passed in. Within bindings code, you can
 * access the implementation from an instance of the wrapper class using
 * privates(instance).impl, and from the implementation class you can access
 * the wrapper using this.wrapper (or implInstance.wrapper if you have another
 * instance of the implementation class).
 *
 * |publicClass| should be a constructor that calls constructPrivate() like so:
 *
 *     privates(publicClass).constructPrivate(this, arguments);
 *
 * @param {function} publicClass The publicly exposed wrapper class. This must
 *     be a named function, and the name appears in stack traces.
 * @param {Object} privateClass The class implementation.
 * @param {{superclass: ?Function,
 *          functions: ?Array<string>,
 *          properties: ?Array<string>,
 *          readonly: ?Array<string>}} exposed The names of properties on the
 *     implementation class to be exposed. |superclass| represents the
 *     constructor of the class to be used as the superclass of the exposed
 *     class; |functions| represents the names of functions which should be
 *     delegated to the implementation; |properties| are gettable/settable
 *     properties and |readonly| are read-only properties.
 */
function expose(publicClass, privateClass, exposed) {
  $Object.setPrototypeOf(exposed, null);

  // This should be called by publicClass.
  privates(publicClass).constructPrivate = function(self, args) {
    if (!(self instanceof publicClass)) {
      throw new Error('Please use "new ' + publicClass.name + '"');
    }
    // The "instanceof publicClass" check can easily be spoofed, so we check
    // whether the private impl is already set before continuing.
    var privateSelf = privates(self);
    if ('impl' in privateSelf) {
      throw new Error('Object ' + publicClass.name + ' is already constructed');
    }
    var privateObj = $Object.create(privateClass.prototype);
    $Function.apply(privateClass, privateObj, args);
    privateObj.wrapper = self;
    privateSelf.impl = privateObj;
  };

  function getPrivateImpl(self) {
    var impl = privates(self).impl;
    if (!(impl instanceof privateClass)) {
      // Either the object is not constructed, or the property descriptor is
      // used on a target that is not an instance of publicClass.
      throw new Error('impl is not an instance of ' + privateClass.name);
    }
    return impl;
  }

  var publicClassPrototype = {
    // The final prototype will be assigned at the end of this method.
    __proto__: null,
    constructor: publicClass,
  };

  if ('functions' in exposed) {
    $Array.forEach(exposed.functions, function(func) {
      publicClassPrototype[func] = function() {
        var impl = getPrivateImpl(this);
        return $Function.apply(impl[func], impl, arguments);
      };
    });
  }

  if ('properties' in exposed) {
    $Array.forEach(exposed.properties, function(prop) {
      $Object.defineProperty(publicClassPrototype, prop, {
        __proto__: null,
        enumerable: true,
        get: function() {
          return getPrivateImpl(this)[prop];
        },
        set: function(value) {
          var impl = getPrivateImpl(this);
          delete impl[prop];
          impl[prop] = value;
        }
      });
    });
  }

  if ('readonly' in exposed) {
    $Array.forEach(exposed.readonly, function(readonly) {
      $Object.defineProperty(publicClassPrototype, readonly, {
        __proto__: null,
        enumerable: true,
        get: function() {
          return getPrivateImpl(this)[readonly];
        },
      });
    });
  }

  // The prototype properties have been installed. Now we can safely assign an
  // unsafe prototype and export the class to the public.
  var superclass = exposed.superclass || $Object.self;
  $Object.setPrototypeOf(publicClassPrototype, superclass.prototype);
  publicClass.prototype = publicClassPrototype;

  return publicClass;
}

/**
 * Returns a deep copy of |value|. The copy will have no references to nested
 * values of |value|.
 */
function deepCopy(value) {
  return nativeDeepCopy(value);
}

// DO NOT USE. This causes problems with safe builtins, and makes migration to
// native bindings more difficult.
function handleRequestWithPromiseDoNotUse(
    binding, apiName, methodName, customizedFunction) {
  var fullName = apiName + '.' + methodName;
  var extensionId = requireNative('process').GetExtensionId();
  binding.setHandleRequest(methodName, function() {
    logActivity.LogAPICall(extensionId, fullName, $Array.slice(arguments));
    var stack = exceptionHandler.getExtensionStackTrace();
    var callback = arguments[arguments.length - 1];
    var args = $Array.slice(arguments, 0, arguments.length - 1);
    var keepAlive = require('keep_alive').createKeepAlive();
    $Function.apply(customizedFunction, this, args).then(function(result) {
      if (callback) {
        exceptionHandler.safeCallbackApply(
            fullName, {__proto__: null, stack: stack}, callback, [result]);
      }
    }).catch(function(error) {
      if (callback) {
        var message = exceptionHandler.safeErrorToString(error, true);
        bindingUtil.runCallbackWithLastError(message, callback);
      }
    }).then(function() {
      keepAlive.close();
    });
  });
};

exports.$set('forEach', forEach);
exports.$set('lookup', lookup);
exports.$set('defineProperty', defineProperty);
exports.$set('expose', expose);
exports.$set('deepCopy', deepCopy);
exports.$set('handleRequestWithPromiseDoNotUse',
             handleRequestWithPromiseDoNotUse);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module implements helper objects for the dialog, newwindow, and
// permissionrequest <webview> events.

var logging = requireNative('logging');
var MessagingNatives = requireNative('messaging_natives');
var WebViewConstants = require('webViewConstants').WebViewConstants;
var WebViewInternal = getInternalApi('webViewInternal');

var PERMISSION_TYPES = ['media',
                        'geolocation',
                        'pointerLock',
                        'download',
                        'loadplugin',
                        'filesystem',
                        'fullscreen'];

// The browser will kill us if we send it a bad instance ID.
// TODO(780728): Remove once the cause of the bad ID is known.
function CrashIfInvalidInstanceId(instanceId, culpritFunction) {
  logging.CHECK(
      instanceId > 0,
      'WebView: Invalid instance ID (' + instanceId + ') from ' +
          culpritFunction);
}

// -----------------------------------------------------------------------------
// WebViewActionRequest object.

// Default partial implementation of a webview action request.
function WebViewActionRequest(webViewImpl, event, webViewEvent, interfaceName) {
  this.webViewImpl = webViewImpl;
  this.event = event;
  this.webViewEvent = webViewEvent;
  this.interfaceName = interfaceName;
  this.guestInstanceId = this.webViewImpl.guest.getId();
  this.requestId = event.requestId;
  this.actionTaken = false;

  // Add on the request information specific to the request type.
  for (var infoName in this.event.requestInfo) {
    this.event[infoName] = this.event.requestInfo[infoName];
    this.webViewEvent[infoName] = this.event.requestInfo[infoName];
  }
}

// Prevent GuestViewEvents inadvertently inheritng code from the global Object,
// allowing a pathway for unintended execution of user code.
// TODO(wjmaclean): Track down other issues of Object inheritance.
// https://crbug.com/701034
WebViewActionRequest.prototype.__proto__ = null;

// Performs the default action for the request.
WebViewActionRequest.prototype.defaultAction = function() {
  // Do nothing if the action has already been taken or the requester is
  // already gone (in which case its guestInstanceId will be stale).
  if (this.actionTaken ||
      this.guestInstanceId != this.webViewImpl.guest.getId()) {
    return;
  }

  this.actionTaken = true;
  CrashIfInvalidInstanceId(
      this.guestInstanceId, 'WebViewActionRequest.defaultAction');
  WebViewInternal.setPermission(this.guestInstanceId, this.requestId, 'default',
                                '', $Function.bind(function(allowed) {
    if (allowed) {
      return;
    }
    this.showWarningMessage();
  }, this));
};

// Called to handle the action request's event.
WebViewActionRequest.prototype.handleActionRequestEvent = function() {
  // Construct the interface object and attach it to |webViewEvent|.
  var request = this.getInterfaceObject();
  this.webViewEvent[this.interfaceName] = request;

  var defaultPrevented = !this.webViewImpl.dispatchEvent(this.webViewEvent);
  // Set |webViewEvent| to null to break the circular reference to |request| so
  // that the garbage collector can eventually collect it.
  this.webViewEvent = null;
  if (this.actionTaken) {
    return;
  }

  if (defaultPrevented) {
    // Track the lifetime of |request| with the garbage collector.
    var portId = -1;  // (hack) there is no Extension Port to release
    MessagingNatives.BindToGC(
        request, $Function.bind(this.defaultAction, this), portId);
  } else {
    this.defaultAction();
  }
};

// Displays a warning message when an action request is blocked by default.
WebViewActionRequest.prototype.showWarningMessage = function() {
  window.console.warn(this.WARNING_MSG_REQUEST_BLOCKED);
};

// This function ensures that each action is taken at most once.
WebViewActionRequest.prototype.validateCall = function() {
  if (this.actionTaken) {
    throw new Error(this.ERROR_MSG_ACTION_ALREADY_TAKEN);
  }
  this.actionTaken = true;
};

// The following are implemented by the specific action request.

// Returns the interface object for this action request.
WebViewActionRequest.prototype.getInterfaceObject = undefined;

// Error/warning messages.
WebViewActionRequest.prototype.ERROR_MSG_ACTION_ALREADY_TAKEN = undefined;
WebViewActionRequest.prototype.WARNING_MSG_REQUEST_BLOCKED = undefined;

// -----------------------------------------------------------------------------
// Dialog object.

// Represents a dialog box request (e.g. alert()).
function Dialog(webViewImpl, event, webViewEvent) {
  $Function.call(
      WebViewActionRequest, this, webViewImpl, event, webViewEvent, 'dialog');

  this.handleActionRequestEvent();
}

Dialog.prototype.__proto__ = WebViewActionRequest.prototype;

Dialog.prototype.getInterfaceObject = function() {
  return {
    ok: $Function.bind(function(user_input) {
      this.validateCall();
      user_input = user_input || '';
      CrashIfInvalidInstanceId(this.guestInstanceId, 'Dialog ok');
      WebViewInternal.setPermission(
          this.guestInstanceId, this.requestId, 'allow', user_input);
    }, this),
    cancel: $Function.bind(function() {
      this.validateCall();
      CrashIfInvalidInstanceId(this.guestInstanceId, 'Dialog cancel');
      WebViewInternal.setPermission(
          this.guestInstanceId, this.requestId, 'deny');
    }, this)
  };
};

Dialog.prototype.showWarningMessage = function() {
  var VOWELS = ['a', 'e', 'i', 'o', 'u'];
  var dialogType = this.event.messageType;
  var article =
      ($Array.indexOf(VOWELS, dialogType.charAt(0)) >= 0) ? 'An' : 'A';
  this.WARNING_MSG_REQUEST_BLOCKED = $String.replace(
      $String.replace(this.WARNING_MSG_REQUEST_BLOCKED, '%1', article), '%2',
      dialogType);
  window.console.warn(this.WARNING_MSG_REQUEST_BLOCKED);
};

Dialog.prototype.ERROR_MSG_ACTION_ALREADY_TAKEN =
    WebViewConstants.ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN;
Dialog.prototype.WARNING_MSG_REQUEST_BLOCKED =
    WebViewConstants.WARNING_MSG_DIALOG_REQUEST_BLOCKED;

// -----------------------------------------------------------------------------
// NewWindow object.

// Represents a new window request.
function NewWindow(webViewImpl, event, webViewEvent) {
  $Function.call(
      WebViewActionRequest, this, webViewImpl, event, webViewEvent, 'window');

  this.handleActionRequestEvent();
}

NewWindow.prototype.__proto__ = WebViewActionRequest.prototype;

NewWindow.prototype.getInterfaceObject = function() {
  return {
    attach: $Function.bind(function(webview) {
      this.validateCall();
      if (!webview || !webview.tagName || webview.tagName != 'WEBVIEW') {
        throw new Error(ERROR_MSG_WEBVIEW_EXPECTED);
      }

      var webViewImpl = privates(webview).internal;
      // Update the partition.
      if (this.event.partition) {
        webViewImpl.onAttach(this.event.partition);
      }

      var attached = webViewImpl.attachWindow(this.event.windowId);
      if (!attached) {
        window.console.error(ERROR_MSG_NEWWINDOW_UNABLE_TO_ATTACH);
      }

      if (this.guestInstanceId != this.webViewImpl.guest.getId()) {
        // If the opener is already gone, then its guestInstanceId will be
        // stale.
        return;
      }

      // If the object being passed into attach is not a valid <webview>
      // then we will fail and it will be treated as if the new window
      // was rejected. The permission API plumbing is used here to clean
      // up the state created for the new window if attaching fails.
      CrashIfInvalidInstanceId(this.guestInstanceId, 'NewWindow attach');
      WebViewInternal.setPermission(this.guestInstanceId, this.requestId,
                                    attached ? 'allow' : 'deny');
    }, this),
    discard: $Function.bind(function() {
      this.validateCall();
      if (!this.guestInstanceId) {
        // If the opener is already gone, then we won't have its
        // guestInstanceId.
        return;
      }
      CrashIfInvalidInstanceId(this.guestInstanceId, 'NewWindow discard');
      WebViewInternal.setPermission(
          this.guestInstanceId, this.requestId, 'deny');
    }, this)
  };
};

NewWindow.prototype.ERROR_MSG_ACTION_ALREADY_TAKEN =
    WebViewConstants.ERROR_MSG_NEWWINDOW_ACTION_ALREADY_TAKEN;
NewWindow.prototype.WARNING_MSG_REQUEST_BLOCKED =
    WebViewConstants.WARNING_MSG_NEWWINDOW_REQUEST_BLOCKED;

// -----------------------------------------------------------------------------
// PermissionRequest object.

// Represents a permission request (e.g. to access the filesystem).
function PermissionRequest(webViewImpl, event, webViewEvent) {
  $Function.call(
      WebViewActionRequest, this, webViewImpl, event, webViewEvent, 'request');

  if (!this.validPermissionCheck()) {
    return;
  }

  this.handleActionRequestEvent();
}

PermissionRequest.prototype.__proto__ = WebViewActionRequest.prototype;

PermissionRequest.prototype.allow = function() {
  this.validateCall();
  CrashIfInvalidInstanceId(this.guestInstanceId, 'PermissionRequest.allow');
  WebViewInternal.setPermission(this.guestInstanceId, this.requestId, 'allow');
};

PermissionRequest.prototype.deny = function() {
  this.validateCall();
  CrashIfInvalidInstanceId(this.guestInstanceId, 'PermissionRequest.deny');
  WebViewInternal.setPermission(this.guestInstanceId, this.requestId, 'deny');
};

PermissionRequest.prototype.getInterfaceObject = function() {
  var request = {
    allow: $Function.bind(this.allow, this),
    deny: $Function.bind(this.deny, this)
  };

  // Add on the request information specific to the request type.
  for (var infoName in this.event.requestInfo) {
    request[infoName] = this.event.requestInfo[infoName];
  }

  return $Object.freeze(request);
};

PermissionRequest.prototype.showWarningMessage = function() {
  window.console.warn($String.replace(
      this.WARNING_MSG_REQUEST_BLOCKED, '%1', this.event.permission));
};

// Checks that the requested permission is valid. Returns true if valid.
PermissionRequest.prototype.validPermissionCheck = function() {
  if ($Array.indexOf(PERMISSION_TYPES, this.event.permission) < 0) {
    // The permission type is not allowed. Trigger the default response.
    this.defaultAction();
    return false;
  }
  return true;
};

PermissionRequest.prototype.ERROR_MSG_ACTION_ALREADY_TAKEN =
    WebViewConstants.ERROR_MSG_PERMISSION_ACTION_ALREADY_TAKEN;
PermissionRequest.prototype.WARNING_MSG_REQUEST_BLOCKED =
    WebViewConstants.WARNING_MSG_PERMISSION_REQUEST_BLOCKED;

// -----------------------------------------------------------------------------

// FullscreenPermissionRequest object.

// Represents a fullscreen permission request.
function FullscreenPermissionRequest(webViewImpl, event, webViewEvent) {
  $Function.call(PermissionRequest, this, webViewImpl, event, webViewEvent);
}

FullscreenPermissionRequest.prototype.__proto__ = PermissionRequest.prototype;

FullscreenPermissionRequest.prototype.allow = function() {
  $Function.call(PermissionRequest.prototype.allow, this);
  // Now make the <webview> element go fullscreen.
  this.webViewImpl.makeElementFullscreen();
};

// -----------------------------------------------------------------------------

var WebViewActionRequests = {
  WebViewActionRequest: WebViewActionRequest,
  Dialog: Dialog,
  NewWindow: NewWindow,
  PermissionRequest: PermissionRequest,
  FullscreenPermissionRequest: FullscreenPermissionRequest
};

// Exports.
exports.$set('WebViewActionRequests', WebViewActionRequests);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module contains the public-facing API functions for the <webview> tag.

var WEB_VIEW_API_METHODS = [
  // Add content scripts for the guest page.
  'addContentScripts',

  // Navigates to the previous history entry.
  'back',

  // Returns whether there is a previous history entry to navigate to.
  'canGoBack',

  // Returns whether there is a subsequent history entry to navigate to.
  'canGoForward',

  // Captures the visible region of the WebView contents into a bitmap.
  'captureVisibleRegion',

  // Clears browsing data for the WebView partition.
  'clearData',

  // Injects JavaScript code into the guest page.
  'executeScript',

  // Initiates a find-in-page request.
  'find',

  // Navigates to the subsequent history entry.
  'forward',

  // Returns audio state.
  'getAudioState',

  // Returns Chrome's internal process ID for the guest web page's current
  // process.
  'getProcessId',

  // Returns the user agent string used by the webview for guest page requests.
  'getUserAgent',

  // Gets the current zoom factor.
  'getZoom',

  // Gets the current zoom mode of the webview.
  'getZoomMode',

  // Navigates to a history entry using a history index relative to the current
  // navigation.
  'go',

  // Injects CSS into the guest page.
  'insertCSS',

  // Returns whether audio is muted.
  'isAudioMuted',

  // Returns whether spatial navigation is enabled.
  'isSpatialNavigationEnabled',

  // Indicates whether or not the webview's user agent string has been
  // overridden.
  'isUserAgentOverridden',

  // Loads a data URL with a specified base URL used for relative links.
  // Optionally, a virtual URL can be provided to be shown to the user instead
  // of the data URL.
  'loadDataWithBaseUrl',

  // Prints the contents of the webview.
  'print',

  // Removes content scripts for the guest page.
  'removeContentScripts',

  // Reloads the current top-level page.
  'reload',

  // Set audio mute.
  'setAudioMuted',

  // Set spatial navigation state.
  'setSpatialNavigationEnabled',

  // Override the user agent string used by the webview for guest page requests.
  'setUserAgentOverride',

  // Changes the zoom factor of the page.
  'setZoom',

  // Changes the zoom mode of the webview.
  'setZoomMode',

  // Stops loading the current navigation if one is in progress.
  'stop',

  // Ends the current find session.
  'stopFinding',

  // Forcibly kills the guest web page's renderer process.
  'terminate'
];

// Exports.
exports.$set('WEB_VIEW_API_METHODS', WEB_VIEW_API_METHODS);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module implements the attributes of the <webview> tag.

var $Element = require('safeMethods').SafeMethods.$Element;
var $MutationObserver = require('safeMethods').SafeMethods.$MutationObserver;
var GuestViewAttributes = require('guestViewAttributes').GuestViewAttributes;
var WebViewConstants = require('webViewConstants').WebViewConstants;
var WebViewInternal = getInternalApi('webViewInternal');

// -----------------------------------------------------------------------------
// AllowScalingAttribute object.

// Attribute that specifies whether scaling is allowed in the webview.
function AllowScalingAttribute(view) {
  $Function.call(
      GuestViewAttributes.BooleanAttribute, this,
      WebViewConstants.ATTRIBUTE_ALLOWSCALING, view);
}

AllowScalingAttribute.prototype.__proto__ =
    GuestViewAttributes.BooleanAttribute.prototype;

AllowScalingAttribute.prototype.handleMutation = function(oldValue, newValue) {
  if (!this.view.guest.getId())
  return;

  WebViewInternal.setAllowScaling(this.view.guest.getId(), this.getValue());
};

// -----------------------------------------------------------------------------
// AllowTransparencyAttribute object.

// Attribute that specifies whether transparency is allowed in the webview.
function AllowTransparencyAttribute(view) {
  $Function.call(
      GuestViewAttributes.BooleanAttribute, this,
      WebViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY, view);
}

AllowTransparencyAttribute.prototype.__proto__ =
    GuestViewAttributes.BooleanAttribute.prototype;

AllowTransparencyAttribute.prototype.handleMutation = function(oldValue,
                                                               newValue) {
  if (!this.view.guest.getId())
    return;

  WebViewInternal.setAllowTransparency(this.view.guest.getId(),
                                       this.getValue());
};

// -----------------------------------------------------------------------------
// AutosizeDimensionAttribute object.

// Attribute used to define the demension limits of autosizing.
function AutosizeDimensionAttribute(name, view) {
  $Function.call(GuestViewAttributes.IntegerAttribute, this, name, view);
}

AutosizeDimensionAttribute.prototype.__proto__ =
    GuestViewAttributes.IntegerAttribute.prototype;

AutosizeDimensionAttribute.prototype.handleMutation = function(
    oldValue, newValue) {
  if (!this.view.guest.getId())
    return;

  this.view.guest.setSize({
    'enableAutoSize': this.view.attributes[
      WebViewConstants.ATTRIBUTE_AUTOSIZE].getValue(),
    'min': {
      'width': this.view.attributes[
          WebViewConstants.ATTRIBUTE_MINWIDTH].getValue(),
      'height': this.view.attributes[
          WebViewConstants.ATTRIBUTE_MINHEIGHT].getValue()
    },
    'max': {
      'width': this.view.attributes[
          WebViewConstants.ATTRIBUTE_MAXWIDTH].getValue(),
      'height': this.view.attributes[
          WebViewConstants.ATTRIBUTE_MAXHEIGHT].getValue()
    }
  });
  return;
};

// -----------------------------------------------------------------------------
// AutosizeAttribute object.

// Attribute that specifies whether the webview should be autosized.
function AutosizeAttribute(view) {
  $Function.call(
      GuestViewAttributes.BooleanAttribute, this,
      WebViewConstants.ATTRIBUTE_AUTOSIZE, view);
}

AutosizeAttribute.prototype.__proto__ =
    GuestViewAttributes.BooleanAttribute.prototype;

AutosizeAttribute.prototype.handleMutation =
    AutosizeDimensionAttribute.prototype.handleMutation;

// -----------------------------------------------------------------------------
// NameAttribute object.

// Attribute that sets the guest content's window.name object.
function NameAttribute(view) {
  $Function.call(
      GuestViewAttributes.Attribute, this, WebViewConstants.ATTRIBUTE_NAME,
      view);
}

NameAttribute.prototype.__proto__ = GuestViewAttributes.Attribute.prototype

NameAttribute.prototype.handleMutation = function(oldValue, newValue) {
  oldValue = oldValue || '';
  newValue = newValue || '';
  if (oldValue === newValue || !this.view.guest.getId())
    return;

  WebViewInternal.setName(this.view.guest.getId(), newValue);
};

NameAttribute.prototype.setValue = function(value) {
  value = value || '';
  if (value === '')
    $Element.removeAttribute(this.view.element, this.name);
  else
    $Element.setAttribute(this.view.element, this.name, value);
};

// -----------------------------------------------------------------------------
// PartitionAttribute object.

// Attribute representing the state of the storage partition.
function PartitionAttribute(view) {
  $Function.call(
      GuestViewAttributes.Attribute, this, WebViewConstants.ATTRIBUTE_PARTITION,
      view);
  this.validPartitionId = true;
}

PartitionAttribute.prototype.__proto__ =
    GuestViewAttributes.Attribute.prototype;

PartitionAttribute.prototype.handleMutation = function(oldValue, newValue) {
  newValue = newValue || '';

  // The partition cannot change if the webview has already navigated.
  if (!this.view.attributes[
          WebViewConstants.ATTRIBUTE_SRC].beforeFirstNavigation) {
    window.console.error(WebViewConstants.ERROR_MSG_ALREADY_NAVIGATED);
    this.setValueIgnoreMutation(oldValue);
    return;
  }
  if (newValue == 'persist:') {
    this.validPartitionId = false;
    window.console.error(
        WebViewConstants.ERROR_MSG_INVALID_PARTITION_ATTRIBUTE);
  }
};

PartitionAttribute.prototype.detach = function() {
  this.validPartitionId = true;
};

// -----------------------------------------------------------------------------
// SrcAttribute object.

// Attribute that handles the location and navigation of the webview.
function SrcAttribute(view) {
  $Function.call(
      GuestViewAttributes.Attribute, this, WebViewConstants.ATTRIBUTE_SRC,
      view);
  this.setupMutationObserver();
  this.beforeFirstNavigation = true;
}

SrcAttribute.prototype.__proto__ = GuestViewAttributes.Attribute.prototype;

SrcAttribute.prototype.setValueIgnoreMutation = function(value) {
  $Function.call(
      GuestViewAttributes.Attribute.prototype.setValueIgnoreMutation, this,
      value);
  // takeRecords() is needed to clear queued up src mutations. Without it, it is
  // possible for this change to get picked up asyncronously by src's mutation
  // observer |observer|, and then get handled even though we do not want to
  // handle this mutation.
  $MutationObserver.takeRecords(this.observer);
};

SrcAttribute.prototype.handleMutation = function(oldValue, newValue) {
  // Once we have navigated, we don't allow clearing the src attribute.
  // Once <webview> enters a navigated state, it cannot return to a
  // placeholder state.
  if (!newValue && oldValue) {
    // src attribute changes normally initiate a navigation. We suppress
    // the next src attribute handler call to avoid reloading the page
    // on every guest-initiated navigation.
    this.setValueIgnoreMutation(oldValue);
    return;
  }
  this.parse();
};

SrcAttribute.prototype.attach = function() {
  this.parse();
};

SrcAttribute.prototype.detach = function() {
  this.beforeFirstNavigation = true;
};

// The purpose of this mutation observer is to catch assignment to the src
// attribute without any changes to its value. This is useful in the case
// where the webview guest has crashed and navigating to the same address
// spawns off a new process.
SrcAttribute.prototype.setupMutationObserver = function() {
  this.observer = new $MutationObserver($Function.bind(function(mutations) {
    $Array.forEach(mutations, $Function.bind(function(mutation) {
      var oldValue = mutation.oldValue;
      var newValue = this.getValue();
      if (oldValue != newValue) {
        return;
      }
      this.handleMutation(oldValue, newValue);
    }, this));
  }, this));
  var params = {
    attributes: true,
    attributeOldValue: true,
    attributeFilter: [this.name]
  };
  $MutationObserver.observe(this.observer, this.view.element, params);
};

SrcAttribute.prototype.parse = function() {
  if (!this.view.elementAttached ||
      !this.view.attributes[
          WebViewConstants.ATTRIBUTE_PARTITION].validPartitionId ||
      !this.getValue()) {
    return;
  }

  if (!this.view.guest.getId()) {
    if (this.beforeFirstNavigation) {
      this.beforeFirstNavigation = false;
      this.view.createGuest();
    }
    return;
  }

  WebViewInternal.navigate(this.view.guest.getId(), this.getValue());
};

var WebViewAttributes = {
  AllowScalingAttribute: AllowScalingAttribute,
  AllowTransparencyAttribute: AllowTransparencyAttribute,
  AutosizeDimensionAttribute: AutosizeDimensionAttribute,
  AutosizeAttribute: AutosizeAttribute,
  NameAttribute: NameAttribute,
  PartitionAttribute: PartitionAttribute,
  SrcAttribute: SrcAttribute
};

// Exports.
exports.$set('WebViewAttributes', WebViewAttributes);
// Copyright (c) 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module contains constants used in webview.

// Container for the webview constants.
var WebViewConstants = {
  // Attributes.
  ATTRIBUTE_ALLOWTRANSPARENCY: 'allowtransparency',
  ATTRIBUTE_ALLOWSCALING: 'allowscaling',
  ATTRIBUTE_AUTOSIZE: 'autosize',
  ATTRIBUTE_MAXHEIGHT: 'maxheight',
  ATTRIBUTE_MAXWIDTH: 'maxwidth',
  ATTRIBUTE_MINHEIGHT: 'minheight',
  ATTRIBUTE_MINWIDTH: 'minwidth',
  ATTRIBUTE_NAME: 'name',
  ATTRIBUTE_PARTITION: 'partition',
  ATTRIBUTE_SRC: 'src',

  // Error/warning messages.
  ERROR_MSG_ALREADY_NAVIGATED: '<webview>: ' +
      'The object has already navigated, so its partition cannot be changed.',
  ERROR_MSG_CANNOT_INJECT_SCRIPT: '<webview>: ' +
      'Script cannot be injected into content until the page has loaded.',
  ERROR_MSG_DIALOG_ACTION_ALREADY_TAKEN: '<webview>: ' +
      'An action has already been taken for this "dialog" event.',
  ERROR_MSG_NEWWINDOW_ACTION_ALREADY_TAKEN: '<webview>: ' +
      'An action has already been taken for this "newwindow" event.',
  ERROR_MSG_PERMISSION_ACTION_ALREADY_TAKEN: '<webview>: ' +
      'Permission has already been decided for this "permissionrequest" event.',
  ERROR_MSG_INVALID_PARTITION_ATTRIBUTE: '<webview>: ' +
      'Invalid partition attribute.',
  WARNING_MSG_DIALOG_REQUEST_BLOCKED: '<webview>: %1 %2 dialog was blocked.',
  WARNING_MSG_NEWWINDOW_REQUEST_BLOCKED: '<webview>: A new window was blocked.',
  WARNING_MSG_PERMISSION_REQUEST_BLOCKED: '<webview>: ' +
      'The permission request for "%1" has been denied.'
};

var WebViewAttributeNames = [
  WebViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY,
  WebViewConstants.ATTRIBUTE_ALLOWSCALING, WebViewConstants.ATTRIBUTE_AUTOSIZE,
  WebViewConstants.ATTRIBUTE_MAXHEIGHT, WebViewConstants.ATTRIBUTE_MAXWIDTH,
  WebViewConstants.ATTRIBUTE_MINHEIGHT, WebViewConstants.ATTRIBUTE_MINWIDTH,
  WebViewConstants.ATTRIBUTE_NAME, WebViewConstants.ATTRIBUTE_PARTITION,
  WebViewConstants.ATTRIBUTE_SRC
];

exports.$set('WebViewConstants', $Object.freeze(WebViewConstants));
exports.$set('WebViewAttributeNames', $Object.freeze(WebViewAttributeNames));
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Event management for WebView.

var $Document = require('safeMethods').SafeMethods.$Document;
var CreateEvent = require('guestViewEvents').CreateEvent;
var DCHECK = requireNative('logging').DCHECK;
var DeclarativeWebRequestSchema =
    requireNative('schema_registry').GetSchema('declarativeWebRequest');
var GuestViewEvents = require('guestViewEvents').GuestViewEvents;
var GuestViewInternalNatives = requireNative('guest_view_internal');
var IdGenerator = requireNative('id_generator');
var WebRequestEvent = require('webRequestEvent').WebRequestEvent;
var WebRequestSchema =
    requireNative('schema_registry').GetSchema('webRequest');
var WebViewActionRequests =
    require('webViewActionRequests').WebViewActionRequests;

var WebRequestMessageEvent = CreateEvent('webViewInternal.onMessage');

function WebViewEvents(webViewImpl) {
  $Function.call(GuestViewEvents, this, webViewImpl);

  this.setupWebRequestEvents();
}

function createOnMessageEvent(name, schema, options, webviewId) {
  var subEventName = name + '/' + IdGenerator.GetNextId();
  var newEvent = bindingUtil.createCustomEvent(
      subEventName, false /* supports filters */,
      false /* supports lazy listeners */);

  var view = GuestViewInternalNatives.GetViewFromID(webviewId || 0);
  if (view) {
    view.events.addScopedListener(
        WebRequestMessageEvent,
        $Function.bind(function() {
          // Re-dispatch to subEvent's listeners.
          $Function.apply(newEvent.dispatch, newEvent, $Array.slice(arguments));
        }, newEvent),
        {instanceId: webviewId || 0});
  }

  return newEvent;
}

WebViewEvents.prototype.__proto__ = GuestViewEvents.prototype;

// A dictionary of <webview> extension events to be listened for. This
// dictionary augments |GuestViewEvents.EVENTS| in guest_view_events.js. See the
// documentation there for details.
WebViewEvents.EVENTS = {
  'audiostatechanged': {
    evt: CreateEvent('webViewInternal.onAudioStateChanged'),
    fields: ['audible']
  },
  'close': {
    evt: CreateEvent('webViewInternal.onClose')
  },
  'consolemessage': {
    evt: CreateEvent('webViewInternal.onConsoleMessage'),
    fields: ['level', 'message', 'line', 'sourceId']
  },
  'contentload': {
    evt: CreateEvent('webViewInternal.onContentLoad')
  },
  'dialog': {
    cancelable: true,
    evt: CreateEvent('webViewInternal.onDialog'),
    fields: ['defaultPromptText', 'messageText', 'messageType', 'url'],
    handler: 'handleDialogEvent'
  },
  'droplink': {
    evt: CreateEvent('webViewInternal.onDropLink'),
    fields: ['url']
  },
  'exit': {
    evt: CreateEvent('webViewInternal.onExit'),
    fields: ['processId', 'reason']
  },
  'exitfullscreen': {
    evt: CreateEvent('webViewInternal.onExitFullscreen'),
    fields: ['url'],
    handler: 'handleFullscreenExitEvent',
    internal: true
  },
  'findupdate': {
    evt: CreateEvent('webViewInternal.onFindReply'),
    fields: [
      'searchText',
      'numberOfMatches',
      'activeMatchOrdinal',
      'selectionRect',
      'canceled',
      'finalUpdate'
    ]
  },
  'framenamechanged': {
    evt: CreateEvent('webViewInternal.onFrameNameChanged'),
    handler: 'handleFrameNameChangedEvent',
    internal: true
  },
  'loadabort': {
    cancelable: true,
    evt: CreateEvent('webViewInternal.onLoadAbort'),
    fields: ['url', 'isTopLevel', 'code', 'reason'],
    handler: 'handleLoadAbortEvent'
  },
  'loadcommit': {
    evt: CreateEvent('webViewInternal.onLoadCommit'),
    fields: ['url', 'isTopLevel'],
    handler: 'handleLoadCommitEvent'
  },
  'loadprogress': {
    evt: CreateEvent('webViewInternal.onLoadProgress'),
    fields: ['url', 'progress']
  },
  'loadredirect': {
    evt: CreateEvent('webViewInternal.onLoadRedirect'),
    fields: ['isTopLevel', 'oldUrl', 'newUrl']
  },
  'loadstart': {
    evt: CreateEvent('webViewInternal.onLoadStart'),
    fields: ['url', 'isTopLevel']
  },
  'loadstop': {
    evt: CreateEvent('webViewInternal.onLoadStop')
  },
  'newwindow': {
    cancelable: true,
    evt: CreateEvent('webViewInternal.onNewWindow'),
    fields: [
      'initialHeight',
      'initialWidth',
      'targetUrl',
      'windowOpenDisposition',
      'name'
    ],
    handler: 'handleNewWindowEvent'
  },
  'permissionrequest': {
    cancelable: true,
    evt: CreateEvent('webViewInternal.onPermissionRequest'),
    fields: [
      'identifier',
      'lastUnlockedBySelf',
      'name',
      'permission',
      'requestMethod',
      'url',
      'userGesture'
    ],
    handler: 'handlePermissionEvent'
  },
  'responsive': {
    evt: CreateEvent('webViewInternal.onResponsive'),
    fields: ['processId']
  },
  'sizechanged': {
    evt: CreateEvent('webViewInternal.onSizeChanged'),
    fields: ['oldHeight', 'oldWidth', 'newHeight', 'newWidth'],
    handler: 'handleSizeChangedEvent'
  },
  'unresponsive': {
    evt: CreateEvent('webViewInternal.onUnresponsive'),
    fields: ['processId']
  },
  'zoomchange': {
    evt: CreateEvent('webViewInternal.onZoomChange'),
    fields: ['oldZoomFactor', 'newZoomFactor']
  }
};

WebViewEvents.EVENTS.__proto__ = null;
for (var eventName in WebViewEvents.EVENTS) {
  WebViewEvents.EVENTS[eventName].__proto__ = null;
}

WebViewEvents.prototype.setupWebRequestEvents = function() {
  var request = {};
  var createWebRequestEvent = $Function.bind(function(webRequestEvent) {
    return this.weakWrapper(function() {
      if (!this[webRequestEvent.name]) {
        this[webRequestEvent.name] =
            new WebRequestEvent(
                'webViewInternal.' + webRequestEvent.name,
                webRequestEvent.parameters,
                webRequestEvent.extraParameters, webRequestEvent.options,
                this.view.viewInstanceId);
      }
      return this[webRequestEvent.name];
    });
  }, this);

  var createDeclarativeWebRequestEvent =
      $Function.bind(function(webRequestEvent) {
    return this.weakWrapper(function() {
      if (!this[webRequestEvent.name]) {
        var newEvent;
        var eventName =
            'webViewInternal.declarativeWebRequest.' + webRequestEvent.name;
        if (webRequestEvent.name === 'onMessage') {
          // The onMessage event gets a special event type because we want the
          // listener to fire only for messages targeted for this particular
          // <webview>.
          newEvent = createOnMessageEvent(eventName,
                                          webRequestEvent.parameters,
                                          webRequestEvent.options,
                                          this.view.viewInstanceId);
        } else {
          newEvent = bindingUtil.createCustomDeclarativeEvent(
              eventName, webRequestEvent.options.actions,
              webRequestEvent.options.conditions,
              this.view.viewInstanceId || 0);
        }
        this[webRequestEvent.name] = newEvent;
      }
      return this[webRequestEvent.name];
    });
  }, this);

  for (var i = 0; i < DeclarativeWebRequestSchema.events.length; ++i) {
    var eventSchema = DeclarativeWebRequestSchema.events[i];
    var webRequestEvent = createDeclarativeWebRequestEvent(eventSchema);
    $Object.defineProperty(
        request, eventSchema.name, {get: webRequestEvent, enumerable: true});
  }

  // Populate the WebRequest events from the API definition.
  for (var i = 0; i < WebRequestSchema.events.length; ++i) {
    var eventSchema = WebRequestSchema.events[i];

    // Skip "onActionIgnored" which is not relevant for webviews.
    if (eventSchema.name === 'onActionIgnored')
      continue;

    var webRequestEvent = createWebRequestEvent(eventSchema);
    $Object.defineProperty(
        request, eventSchema.name, {get: webRequestEvent, enumerable: true});
  }

  this.view.setRequestPropertyOnWebViewElement(request);
};

WebViewEvents.prototype.getEvents = function() {
  return WebViewEvents.EVENTS;
};

WebViewEvents.prototype.handleDialogEvent = function(event, eventName) {
  var webViewEvent = this.makeDomEvent(event, eventName);
  new WebViewActionRequests.Dialog(this.view, event, webViewEvent);
};

WebViewEvents.prototype.handleFrameNameChangedEvent = function(event) {
  this.view.onFrameNameChanged(event.name);
};

WebViewEvents.prototype.handleFullscreenExitEvent = function(event, eventName) {
  $Document.webkitCancelFullScreen(document);
};

WebViewEvents.prototype.handleLoadAbortEvent = function(event, eventName) {
  var showWarningMessage = function(code, reason) {
    var WARNING_MSG_LOAD_ABORTED = '<webview>: ' +
        'The load has aborted with error %1: %2.';
    window.console.warn($String.replace(
        $String.replace(WARNING_MSG_LOAD_ABORTED, '%1', code), '%2', reason));
  };
  var webViewEvent = this.makeDomEvent(event, eventName);
  if (this.view.dispatchEvent(webViewEvent)) {
    showWarningMessage(event.code, event.reason);
  }
};

WebViewEvents.prototype.handleLoadCommitEvent = function(event, eventName) {
  this.view.onLoadCommit(event.baseUrlForDataUrl,
                         event.currentEntryIndex,
                         event.entryCount,
                         event.processId,
                         event.url,
                         event.isTopLevel);
  var webViewEvent = this.makeDomEvent(event, eventName);
  this.view.dispatchEvent(webViewEvent);
};

WebViewEvents.prototype.handleNewWindowEvent = function(event, eventName) {
  var webViewEvent = this.makeDomEvent(event, eventName);
  new WebViewActionRequests.NewWindow(this.view, event, webViewEvent);
};

WebViewEvents.prototype.handlePermissionEvent = function(event, eventName) {
  var webViewEvent = this.makeDomEvent(event, eventName);
  if (event.permission === 'fullscreen') {
    new WebViewActionRequests.FullscreenPermissionRequest(
        this.view, event, webViewEvent);
  } else {
    new WebViewActionRequests.PermissionRequest(this.view, event, webViewEvent);
  }
};

WebViewEvents.prototype.handleSizeChangedEvent = function(event, eventName) {
  var webViewEvent = this.makeDomEvent(event, eventName);
  this.view.onSizeChanged(webViewEvent);
};

// Exports.
exports.$set('WebViewEvents', WebViewEvents);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

if (!apiBridge) {
  exports.$set(
      'WebViewInternal',
      require('binding').Binding.create('webViewInternal').generate());
}
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This module implements WebView (<webview>) as a custom element that wraps a
// BrowserPlugin object element. The object element is hidden within
// the shadow DOM of the WebView element.

var $Element = require('safeMethods').SafeMethods.$Element;
var GuestView = require('guestView').GuestView;
var GuestViewContainer = require('guestViewContainer').GuestViewContainer;
var GuestViewInternalNatives = requireNative('guest_view_internal');
var WebViewConstants = require('webViewConstants').WebViewConstants;
var WebViewAttributes = require('webViewAttributes').WebViewAttributes;
var WebViewEvents = require('webViewEvents').WebViewEvents;
var WebViewInternal = getInternalApi('webViewInternal');

// Represents the internal state of <webview>.
function WebViewImpl(webviewElement) {
  $Function.call(GuestViewContainer, this, webviewElement, 'webview');
  this.pendingZoomFactor_ = null;
  this.userAgentOverride = null;
  this.setupElementProperties();
  new WebViewEvents(this, this.viewInstanceId);
}

WebViewImpl.prototype.__proto__ = GuestViewContainer.prototype;

// Sets up all of the webview attributes.
WebViewImpl.prototype.setupAttributes = function() {
  this.attributes[WebViewConstants.ATTRIBUTE_ALLOWSCALING] =
      new WebViewAttributes.AllowScalingAttribute(this);
  this.attributes[WebViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY] =
      new WebViewAttributes.AllowTransparencyAttribute(this);
  this.attributes[WebViewConstants.ATTRIBUTE_AUTOSIZE] =
      new WebViewAttributes.AutosizeAttribute(this);
  this.attributes[WebViewConstants.ATTRIBUTE_NAME] =
      new WebViewAttributes.NameAttribute(this);
  this.attributes[WebViewConstants.ATTRIBUTE_PARTITION] =
      new WebViewAttributes.PartitionAttribute(this);
  this.attributes[WebViewConstants.ATTRIBUTE_SRC] =
      new WebViewAttributes.SrcAttribute(this);

  var autosizeAttributes = [
    WebViewConstants.ATTRIBUTE_MAXHEIGHT, WebViewConstants.ATTRIBUTE_MAXWIDTH,
    WebViewConstants.ATTRIBUTE_MINHEIGHT, WebViewConstants.ATTRIBUTE_MINWIDTH
  ];
  for (var attribute of autosizeAttributes) {
    this.attributes[attribute] =
        new WebViewAttributes.AutosizeDimensionAttribute(attribute, this);
  }
};

// Initiates navigation once the <webview> element is attached to the DOM.
WebViewImpl.prototype.onElementAttached = function() {
  // Mark all attributes as dirty on attachment.
  for (var i in this.attributes) {
    this.attributes[i].dirty = true;
  }
  for (var i in this.attributes) {
    this.attributes[i].attach();
  }
};

// Resets some state upon detaching <webview> element from the DOM.
WebViewImpl.prototype.onElementDetached = function() {
  this.guest.destroy();
  for (var i in this.attributes) {
    this.attributes[i].dirty = false;
  }
  for (var i in this.attributes) {
    this.attributes[i].detach();
  }
};

// Sets the <webview>.request property.
WebViewImpl.prototype.setRequestPropertyOnWebViewElement = function(request) {
  $Object.defineProperty(
      this.element, 'request', {value: request, enumerable: true});
};

WebViewImpl.prototype.setupElementProperties = function() {
  // We cannot use {writable: true} property descriptor because we want a
  // dynamic getter value.
  $Object.defineProperty(this.element, 'contentWindow', {
    get: $Function.bind(
        function() {
          return this.guest.getContentWindow();
        },
        this),
    // No setter.
    enumerable: true
  });
};

WebViewImpl.prototype.onSizeChanged = function(webViewEvent) {
  var newWidth = webViewEvent.newWidth;
  var newHeight = webViewEvent.newHeight;

  var element = this.element;

  var width = element.offsetWidth;
  var height = element.offsetHeight;

  // Check the current bounds to make sure we do not resize <webview>
  // outside of current constraints.
  var maxWidth = this.attributes[
    WebViewConstants.ATTRIBUTE_MAXWIDTH].getValue() || width;
  var minWidth = this.attributes[
    WebViewConstants.ATTRIBUTE_MINWIDTH].getValue() || width;
  var maxHeight = this.attributes[
    WebViewConstants.ATTRIBUTE_MAXHEIGHT].getValue() || height;
  var minHeight = this.attributes[
    WebViewConstants.ATTRIBUTE_MINHEIGHT].getValue() || height;

  minWidth = Math.min(minWidth, maxWidth);
  minHeight = Math.min(minHeight, maxHeight);

  if (!this.attributes[WebViewConstants.ATTRIBUTE_AUTOSIZE].getValue() ||
      (newWidth >= minWidth &&
      newWidth <= maxWidth &&
      newHeight >= minHeight &&
      newHeight <= maxHeight)) {
    element.style.width = newWidth + 'px';
    element.style.height = newHeight + 'px';
    // Only fire the DOM event if the size of the <webview> has actually
    // changed.
    this.dispatchEvent(webViewEvent);
  }
};

WebViewImpl.prototype.createGuest = function() {
  this.guest.create(this.buildParams(), $Function.bind(function() {
    this.attachWindow();
  }, this));
};

WebViewImpl.prototype.onFrameNameChanged = function(name) {
  this.attributes[WebViewConstants.ATTRIBUTE_NAME].setValueIgnoreMutation(name);
};

// Updates state upon loadcommit.
WebViewImpl.prototype.onLoadCommit = function(
    baseUrlForDataUrl, currentEntryIndex, entryCount,
    processId, url, isTopLevel) {
  this.baseUrlForDataUrl = baseUrlForDataUrl;
  this.currentEntryIndex = currentEntryIndex;
  this.entryCount = entryCount;
  this.processId = processId;
  if (isTopLevel) {
    // Touching the src attribute triggers a navigation. To avoid
    // triggering a page reload on every guest-initiated navigation,
    // we do not handle this mutation.
    this.attributes[
        WebViewConstants.ATTRIBUTE_SRC].setValueIgnoreMutation(url);
  }
};

WebViewImpl.prototype.onAttach = function(storagePartitionId) {
  this.attributes[WebViewConstants.ATTRIBUTE_PARTITION].setValueIgnoreMutation(
      storagePartitionId);
};

WebViewImpl.prototype.buildContainerParams = function() {
  var params = $Object.create(null);
  params.initialZoomFactor = this.pendingZoomFactor_;
  params.userAgentOverride = this.userAgentOverride;
  for (var i in this.attributes) {
    var value = this.attributes[i].getValueIfDirty();
    if (value)
      params[i] = value;
  }
  return params;
};

WebViewImpl.prototype.attachWindow = function(opt_guestInstanceId) {
  // If |opt_guestInstanceId| was provided, then a different existing guest is
  // being attached to this webview, and the current one will get destroyed.
  if (opt_guestInstanceId) {
    if (this.guest.getId() == opt_guestInstanceId) {
      return true;
    }
    this.guest.destroy();
    this.guest = new GuestView('webview', opt_guestInstanceId);
    this.prepareForReattach();
  }

  return $Function.call(GuestViewContainer.prototype.attachWindow, this);
};

// Shared implementation of executeScript() and insertCSS().
WebViewImpl.prototype.executeCode = function(func, args) {
  if (!this.guest.getId()) {
    window.console.error(WebViewConstants.ERROR_MSG_CANNOT_INJECT_SCRIPT);
    return false;
  }

  var webviewSrc = this.attributes[WebViewConstants.ATTRIBUTE_SRC].getValue();
  if (this.baseUrlForDataUrl) {
    webviewSrc = this.baseUrlForDataUrl;
  }

  args = $Array.concat([this.guest.getId(), webviewSrc],
                       $Array.slice(args));
  $Function.apply(func, null, args);
  return true;
};

WebViewImpl.prototype.setUserAgentOverride = function(userAgentOverride) {
  this.userAgentOverride = userAgentOverride;
  if (!this.guest.getId()) {
    // If we are not attached yet, then we will pick up the user agent on
    // attachment.
    return false;
  }
  WebViewInternal.overrideUserAgent(this.guest.getId(), userAgentOverride);
  return true;
};

WebViewImpl.prototype.loadDataWithBaseUrl = function(
    dataUrl, baseUrl, virtualUrl) {
  if (!this.guest.getId()) {
    return;
  }
  WebViewInternal.loadDataWithBaseUrl(
      this.guest.getId(), dataUrl, baseUrl, virtualUrl, function() {
        // Report any errors.
        if (chrome.runtime.lastError != undefined) {
          window.console.error(
              'Error while running webview.loadDataWithBaseUrl: ' +
              chrome.runtime.lastError.message);
        }
      });
};

WebViewImpl.prototype.setZoom = function(zoomFactor, callback) {
  if (!this.guest.getId()) {
    this.pendingZoomFactor_ = zoomFactor;
    return false;
  }
  this.pendingZoomFactor_ = null;
  WebViewInternal.setZoom(this.guest.getId(), zoomFactor, callback);
  return true;
};

// Requests the <webview> element wihtin the embedder to enter fullscreen.
WebViewImpl.prototype.makeElementFullscreen = function() {
  GuestViewInternalNatives.RunWithGesture($Function.bind(function() {
    $Element.webkitRequestFullScreen(this.element);
  }, this));
};

// Exports.
exports.$set('WebViewImpl', WebViewImpl);
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var registerDeniedElement = require('guestViewDeny').registerDeniedElement;

registerDeniedElement('WebView', 'webview');
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// The <webview> custom element. This serves as a base implementation used
// to define <webview> at the extensions layer and may be extended by an
// embedder that wants to define its own <webview>.

var forwardApiMethods = require('guestViewContainerElement').forwardApiMethods;
var GuestViewContainerElement =
    require('guestViewContainerElement').GuestViewContainerElement;
var WebViewImpl = require('webView').WebViewImpl;
var WEB_VIEW_API_METHODS = require('webViewApiMethods').WEB_VIEW_API_METHODS;
var WebViewInternal = getInternalApi('webViewInternal');

class WebViewElement extends GuestViewContainerElement {}

WebViewElement.prototype.addContentScripts = function(rules) {
  var internal = privates(this).internal;
  return WebViewInternal.addContentScripts(internal.viewInstanceId, rules);
};

WebViewElement.prototype.removeContentScripts = function(names) {
  var internal = privates(this).internal;
  return WebViewInternal.removeContentScripts(internal.viewInstanceId, names);
};

WebViewElement.prototype.insertCSS = function(var_args) {
  var internal = privates(this).internal;
  return internal.executeCode(
      WebViewInternal.insertCSS, $Array.slice(arguments));
};

WebViewElement.prototype.executeScript = function(var_args) {
  var internal = privates(this).internal;
  return internal.executeCode(
      WebViewInternal.executeScript, $Array.slice(arguments));
};

WebViewElement.prototype.print = function() {
  var internal = privates(this).internal;
  return internal.executeCode(
      WebViewInternal.executeScript, [{code: 'window.print();'}]);
};

WebViewElement.prototype.back = function(callback) {
  return $Function.call(originalGo, this, -1, callback);
};

WebViewElement.prototype.canGoBack = function() {
  var internal = privates(this).internal;
  return internal.entryCount > 1 && internal.currentEntryIndex > 0;
};

WebViewElement.prototype.canGoForward = function() {
  var internal = privates(this).internal;
  return internal.currentEntryIndex >= 0 &&
      internal.currentEntryIndex < (internal.entryCount - 1);
};

WebViewElement.prototype.forward = function(callback) {
  return $Function.call(originalGo, this, 1, callback);
};

WebViewElement.prototype.getProcessId = function() {
  var internal = privates(this).internal;
  return internal.processId;
};

WebViewElement.prototype.getUserAgent = function() {
  var internal = privates(this).internal;
  return internal.userAgentOverride || navigator.userAgent;
};

WebViewElement.prototype.isUserAgentOverridden = function() {
  var internal = privates(this).internal;
  return !!internal.userAgentOverride &&
      internal.userAgentOverride != navigator.userAgent;
};

// Forward remaining WebViewElement.foo* method calls to WebViewImpl.foo* or
// WebViewInternal.foo*.
forwardApiMethods(
    WebViewElement, WebViewImpl, WebViewInternal, WEB_VIEW_API_METHODS);

// Since |back| and |forward| are implemented in terms of |go|, we need to
// keep a reference to the real |go| function, since user code may override
// |WebViewElement.prototype.go|.
var originalGo = WebViewElement.prototype.go;

// Exports.
exports.$set('WebViewElement', WebViewElement);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom bindings for the automation API.
var AutomationNode = require('automationNode').AutomationNode;
var AutomationRootNode = require('automationNode').AutomationRootNode;
var automationInternal = getInternalApi('automationInternal');
var exceptionHandler = require('uncaught_exception_handler');
var logging = requireNative('logging');
var nativeAutomationInternal = requireNative('automationInternal');
var DestroyAccessibilityTree =
    nativeAutomationInternal.DestroyAccessibilityTree;
var GetIntAttribute = nativeAutomationInternal.GetIntAttribute;
var StartCachingAccessibilityTrees =
    nativeAutomationInternal.StartCachingAccessibilityTrees;
var AddTreeChangeObserver = nativeAutomationInternal.AddTreeChangeObserver;
var RemoveTreeChangeObserver =
    nativeAutomationInternal.RemoveTreeChangeObserver;
var GetFocusNative = nativeAutomationInternal.GetFocus;

/**
 * A namespace to export utility functions to other files in automation.
 */
window.automationUtil = function() {};

// TODO(aboxhall): Look into using WeakMap
var idToCallback = {};

var desktopId = undefined;

automationUtil.storeTreeCallback = function(id, callback) {
  if (!callback)
    return;

  var targetTree = AutomationRootNode.get(id);
  if (!targetTree) {
    // If we haven't cached the tree, hold the callback until the tree is
    // populated by the initial onAccessibilityEvent call.
    if (id in idToCallback)
      idToCallback[id].push(callback);
    else
      idToCallback[id] = [callback];
  } else {
    callback(targetTree);
  }
};

/**
 * Global list of tree change observers.
 * @type {Object<number, TreeChangeObserver>}
 */
automationUtil.treeChangeObserverMap = {};

/**
 * The id of the next tree change observer.
 * @type {number}
 */
automationUtil.nextTreeChangeObserverId = 1;

apiBridge.registerCustomHook(function(bindingsAPI) {
  var apiFunctions = bindingsAPI.apiFunctions;

  // TODO(aboxhall, dtseng): Make this return the speced AutomationRootNode obj.
automationUtil.tabIDToAutomationNode = {};
  apiFunctions.setHandleRequest('getTree', function getTree(tabID, callback) {
    StartCachingAccessibilityTrees();

    // enableTab() ensures the renderer for the active or specified tab has
    // accessibility enabled, and fetches its ax tree id to use as
    // a key in the idToAutomationRootNode map. The callback to
    // enableTab is bound to the callback passed in to getTree(), so that once
    // the tree is available (either due to having been cached earlier, or after
    // an accessibility event occurs which causes the tree to be populated), the
    // callback can be called.
    if (tabID && automationUtil.tabIDToAutomationNode[tabID]) {
      callback(automationUtil.tabIDToAutomationNode[tabID]);
      return;
    }

    var params = { tabID: tabID };
    automationInternal.enableTab(params,
                                 function onEnable(treeID, resultTabID) {
          if (bindingUtil.hasLastError()) {
            callback();
            return;
          }
          automationUtil.storeTreeCallback(treeID, function(root) {
            automationUtil.tabIDToAutomationNode[resultTabID] = root;
            callback(root);
          });
        });
  });

  var desktopTree = null;
  apiFunctions.setHandleRequest('getDesktop', function(callback) {
    StartCachingAccessibilityTrees();
    if (desktopId !== undefined)
      desktopTree = AutomationRootNode.get(desktopId);
    if (!desktopTree) {
      automationInternal.enableDesktop(function(treeId) {
        if (bindingUtil.hasLastError()) {
          AutomationRootNode.destroy(treeId);
          desktopId = undefined;
          callback();
          return;
        }
        desktopId = treeId;
        desktopTree = AutomationRootNode.getOrCreate(desktopId);
        callback(desktopTree);

        // TODO(dtseng): Disable desktop tree once desktop object goes out of
        // scope.
      });
    } else {
      callback(desktopTree);
    }
  });

  apiFunctions.setHandleRequest('getFocus', function(callback) {
    if (desktopId === undefined)
      return;

    var focusedNodeInfo = GetFocusNative(desktopId);
    if (!focusedNodeInfo) {
      callback(null);
      return;
    }
    var tree = AutomationRootNode.getOrCreate(focusedNodeInfo.treeId);
    if (tree) {
      callback(privates(tree).impl.get(focusedNodeInfo.nodeId));
      return;
    }
  });

  function removeTreeChangeObserver(observer) {
    for (var id in automationUtil.treeChangeObserverMap) {
      if (automationUtil.treeChangeObserverMap[id] == observer) {
        RemoveTreeChangeObserver(id);
        delete automationUtil.treeChangeObserverMap[id];
        return;
      }
    }
  }
  apiFunctions.setHandleRequest('removeTreeChangeObserver', function(observer) {
    removeTreeChangeObserver(observer);
  });

  function addTreeChangeObserver(filter, observer) {
    removeTreeChangeObserver(observer);
    var id = automationUtil.nextTreeChangeObserverId++;
    AddTreeChangeObserver(id, filter);
    automationUtil.treeChangeObserverMap[id] = observer;
  }
  apiFunctions.setHandleRequest('addTreeChangeObserver',
      function(filter, observer) {
    addTreeChangeObserver(filter, observer);
  });

  apiFunctions.setHandleRequest('setDocumentSelection', function(params) {
    var anchorNodeImpl = privates(params.anchorObject).impl;
    var focusNodeImpl = privates(params.focusObject).impl;
    if (anchorNodeImpl.treeID !== focusNodeImpl.treeID)
      throw new Error('Selection anchor and focus must be in the same tree.');
    if (anchorNodeImpl.treeID === desktopId) {
      throw new Error('Use AutomationNode.setSelection to set the selection ' +
          'in the desktop tree.');
    }
    automationInternal.performAction({ treeID: anchorNodeImpl.treeID,
                                       automationNodeID: anchorNodeImpl.id,
                                       actionType: 'setSelection'},
                                     { focusNodeID: focusNodeImpl.id,
                                       anchorOffset: params.anchorOffset,
                                       focusOffset: params.focusOffset });
  });

});

automationInternal.onChildTreeID.addListener(function(childTreeId) {
  var targetTree = AutomationRootNode.get(childTreeId);

  // If the tree is already loded, or if we previously requested it be loaded
  // (i.e. have a callback for it), don't try to do so again.
  if (targetTree || idToCallback[childTreeId])
    return;

  // A WebView in the desktop tree has a different AX tree as its child.
  // When we encounter a WebView with a child AX tree id that we don't
  // currently have cached, explicitly request that AX tree from the
  // browser process and set up a callback when it loads to attach that
  // tree as a child of this node and fire appropriate events.
  automationUtil.storeTreeCallback(childTreeId, function(root) {
    privates(root).impl.dispatchEvent('loadComplete', 'page');
  }, true);

  automationInternal.enableFrame(childTreeId);
});

automationInternal.onTreeChange.addListener(function(observerID,
                                                     treeID,
                                                     nodeID,
                                                     changeType) {
  var tree = AutomationRootNode.getOrCreate(treeID);
  if (!tree)
    return;

  var node = privates(tree).impl.get(nodeID);
  if (!node)
    return;

  var observer = automationUtil.treeChangeObserverMap[observerID];
  if (!observer)
    return;

  try {
    observer({target: node, type: changeType});
  } catch (e) {
    exceptionHandler.handle('Error in tree change observer for ' +
        changeType, e);
  }
});

automationInternal.onNodesRemoved.addListener(function(treeID, nodeIDs) {
  var tree = AutomationRootNode.getOrCreate(treeID);
  if (!tree)
    return;

  for (var i = 0; i < nodeIDs.length; i++) {
    privates(tree).impl.remove(nodeIDs[i]);
  }
});

/**
 * Dispatch accessibility events fired on individual nodes to its
 * corresponding AutomationNode.
 */
automationInternal.onAccessibilityEvent.addListener(function(eventParams) {
  var id = eventParams.treeID;
  var targetTree = AutomationRootNode.getOrCreate(id);
  if (eventParams.eventType == 'mediaStartedPlaying' ||
      eventParams.eventType == 'mediaStoppedPlaying') {
    // These events are global to the tree.
    eventParams.targetID = privates(targetTree).impl.id;
  }

  if (!privates(targetTree).impl.onAccessibilityEvent(eventParams))
    return;

  // If we're not waiting on a callback to getTree(), we can early out here.
  if (!(id in idToCallback))
    return;

  // We usually get a 'placeholder' tree first, which doesn't have any url
  // attribute or child nodes. If we've got that, wait for the full tree before
  // calling the callback.
  // TODO(dmazzoni): Don't send down placeholder (crbug.com/397553)
  if (id != desktopId && !targetTree.url && targetTree.children.length == 0)
    return;

  // If the tree wasn't available when getTree() was called, the callback will
  // have been cached in idToCallback, so call and delete it now that we
  // have the complete tree.
  for (var i = 0; i < idToCallback[id].length; i++) {
    var callback = idToCallback[id][i];
    callback(targetTree);
  }
  delete idToCallback[id];
});

automationInternal.onAccessibilityTreeDestroyed.addListener(function(id) {
  // Destroy the AutomationRootNode.
  var targetTree = AutomationRootNode.get(id);
  if (targetTree) {
    privates(targetTree).impl.destroy();
    AutomationRootNode.destroy(id);
    for (var tabID in automationUtil.tabIDToAutomationNode) {
      if (automationUtil.tabIDToAutomationNode[tabID] == targetTree) {
        delete automationUtil.tabIDToAutomationNode[tabID];
      }
    }
  } else {
    logging.WARNING('no targetTree to destroy');
  }

  // Destroy the native cache of the accessibility tree.
  DestroyAccessibilityTree(id);
});

automationInternal.onAccessibilityTreeSerializationError.addListener(
    function(id) {
  automationInternal.enableFrame(id);
});

automationInternal.onActionResult.addListener(function(
    treeID, requestID, result) {
  var targetTree = AutomationRootNode.get(treeID);
  if (!targetTree)
    return;

  privates(targetTree).impl.onActionResult(requestID, result);
});

automationInternal.onGetTextLocationResult.addListener(function(
    textLocationParams) {
  var targetTree = AutomationRootNode.get(textLocationParams.treeID);
  if (!targetTree)
    return;
  privates(targetTree).impl.onGetTextLocationResult(textLocationParams);
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var utils = require('utils');

function AutomationEventImpl(type, target, eventFrom) {
  this.propagationStopped = false;
  this.type = type;
  this.target = target;
  this.eventPhase = Event.NONE;
  this.eventFrom = eventFrom;
}

AutomationEventImpl.prototype = {
  __proto__: null,
  stopPropagation: function() {
    this.propagationStopped = true;
  },
};

function AutomationEvent() {
  privates(AutomationEvent).constructPrivate(this, arguments);
}
utils.expose(AutomationEvent, AutomationEventImpl, {
  functions: [
    'stopPropagation',
  ],
  readonly: [
    'type',
    'target',
    'eventPhase',
    'eventFrom',
  ],
});

exports.$set('AutomationEvent', AutomationEvent);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var AutomationEvent = require('automationEvent').AutomationEvent;
var automationInternal = getInternalApi('automationInternal');
var exceptionHandler = require('uncaught_exception_handler');

var natives = requireNative('automationInternal');

var IsInteractPermitted = natives.IsInteractPermitted;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The id of the root node.
 */
var GetRootID = natives.GetRootID;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?string} The title of the document.
 */
var GetDocTitle = natives.GetDocTitle;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?string} The url of the document.
 */
var GetDocURL = natives.GetDocURL;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?boolean} True if the document has finished loading.
 */
var GetDocLoaded = natives.GetDocLoaded;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The loading progress, from 0.0 to 1.0 (fully loaded).
 */
var GetDocLoadingProgress =
    natives.GetDocLoadingProgress;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {boolean} Whether the selection's anchor comes after its focus in the
 *     accessibility tree.
 */
var GetIsSelectionBackward = natives.GetIsSelectionBackward;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The ID of the selection anchor object.
 */
var GetAnchorObjectID = natives.GetAnchorObjectID;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The selection anchor offset.
 */
var GetAnchorOffset = natives.GetAnchorOffset;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?string} The selection anchor affinity.
 */
var GetAnchorAffinity = natives.GetAnchorAffinity;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The ID of the selection focus object.
 */
var GetFocusObjectID = natives.GetFocusObjectID;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The selection focus offset.
 */
var GetFocusOffset = natives.GetFocusOffset;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?string} The selection focus affinity.
 */
var GetFocusAffinity = natives.GetFocusAffinity;

/**
 * The start of the selection always comes before its end in the accessibility
 * tree.
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The ID of the object at the start of the
 *     selection.
 */
var GetSelectionStartObjectID = natives.GetSelectionStartObjectID;

/**
 * The start of the selection always comes before its end in the accessibility
 * tree.
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The offset at the start of the selection.
 */
var GetSelectionStartOffset = natives.GetSelectionStartOffset;

/**
 * The start of the selection always comes before its end in the accessibility
 * tree.
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?string} The affinity at the start of the selection.
 */
var GetSelectionStartAffinity = natives.GetSelectionStartAffinity;

/**
 * The end of the selection always comes after its start in the accessibility
 * tree.
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The ID of the object at the end of the selection.
 */
var GetSelectionEndObjectID = natives.GetSelectionEndObjectID;

/**
 * The end of the selection always comes after its start in the accessibility
 * tree.
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?number} The offset at the end of the selection.
 */
var GetSelectionEndOffset = natives.GetSelectionEndOffset;

/**
 * The end of the selection always comes after its start in the accessibility
 * tree.
 * @param {string} axTreeID The id of the accessibility tree.
 * @return {?string} The affinity at the end of the selection.
 */
var GetSelectionEndAffinity = natives.GetSelectionEndAffinity;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?number} The id of the node's parent, or undefined if it's the
 *    root of its tree or if the tree or node wasn't found.
 */
var GetParentID = natives.GetParentID;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?number} The number of children of the node, or undefined if
 *     the tree or node wasn't found.
 */
var GetChildCount = natives.GetChildCount;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {number} childIndex An index of a child of this node.
 * @return {?number} The id of the child at the given index, or undefined
 *     if the tree or node or child at that index wasn't found.
 */
var GetChildIDAtIndex = natives.GetChildIDAtIndex;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?number} The ids of the children of the node, or undefined
 *     if the tree or node wasn't found.
 */
var GetChildIds = natives.GetChildIDs;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?Object} An object mapping html attributes to values.
 */
var GetHtmlAttributes = natives.GetHtmlAttributes;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?number} The index of this node in its parent, or undefined if
 *     the tree or node or node parent wasn't found.
 */
var GetIndexInParent = natives.GetIndexInParent;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?Object} An object with a string key for every state flag set,
 *     or undefined if the tree or node or node parent wasn't found.
 */
var GetState = natives.GetState;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {string} The restriction, one of
 * "disabled", "readOnly" or undefined if enabled or other object not disabled
 */
var GetRestriction = natives.GetRestriction;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {string} The checked state, as undefined, "true", "false" or "mixed".
 */
var GetChecked = natives.GetChecked;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {string} The role of the node, or undefined if the tree or
 *     node wasn't found.
 */
var GetRole = natives.GetRole;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?automation.Rect} The location of the node, or undefined if
 *     the tree or node wasn't found.
 */
var GetLocation = natives.GetLocation;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {number} startIndex The start index of the range.
 * @param {number} endIndex The end index of the range.
 * @return {?automation.Rect} The bounding box of the subrange of this node,
 *     or the location if there are no subranges, or undefined if
 *     the tree or node wasn't found.
 */
var GetBoundsForRange = natives.GetBoundsForRange;

/**
 * @param {number} left The left location of the text range.
 * @param {number} top The top location of the text range.
 * @param {number} width The width of text range.
 * @param {number} height The height of the text range.
 * @param {number} requestID The request id associated with the query
 *    for this range.
 * @return {?automation.Rect} The bounding box of the subrange of this node,
 *     specified by arguments provided to the function.
 */
var ComputeGlobalBounds = natives.ComputeGlobalBounds;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?automation.Rect} The unclipped location of the node, or
 * undefined if the tree or node wasn't found.
 */
var GetUnclippedLocation = natives.GetUnclippedLocation;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {!Array<number>} The text offset where each line starts, or an empty
 *     array if this node has no text content, or undefined if the tree or node
 *     was not found.
 */
var GetLineStartOffsets = requireNative(
    'automationInternal').GetLineStartOffsets;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of a string attribute.
 * @return {?string} The value of this attribute, or undefined if the tree,
 *     node, or attribute wasn't found.
 */
var GetStringAttribute = natives.GetStringAttribute;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of an attribute.
 * @return {?boolean} The value of this attribute, or undefined if the tree,
 *     node, or attribute wasn't found.
 */
var GetBoolAttribute = natives.GetBoolAttribute;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of an attribute.
 * @return {?number} The value of this attribute, or undefined if the tree,
 *     node, or attribute wasn't found.
 */
var GetIntAttribute = natives.GetIntAttribute;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of an attribute.
 * @return {?Array<number>} The ids of nodes who have a relationship pointing
 *     to |nodeID| (a reverse relationship).
 */
var GetIntAttributeReverseRelations =
    natives.GetIntAttributeReverseRelations;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of an attribute.
 * @return {?number} The value of this attribute, or undefined if the tree,
 *     node, or attribute wasn't found.
 */
var GetFloatAttribute = natives.GetFloatAttribute;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of an attribute.
 * @return {?Array<number>} The value of this attribute, or undefined
 *     if the tree, node, or attribute wasn't found.
 */
var GetIntListAttribute =
    natives.GetIntListAttribute;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of an attribute.
 * @return {?Array<number>} The ids of nodes who have a relationship pointing
 *     to |nodeID| (a reverse relationship).
 */
var GetIntListAttributeReverseRelations =
    natives.GetIntListAttributeReverseRelations;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of an HTML attribute.
 * @return {?string} The value of this attribute, or undefined if the tree,
 *     node, or attribute wasn't found.
 */
var GetHtmlAttribute = natives.GetHtmlAttribute;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {automation.NameFromType} The source of the node's name.
 */
var GetNameFrom = natives.GetNameFrom;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {automation.DescriptionFromType} The node description source.
 */
var GetDescriptionFrom = natives.GetDescriptionFrom;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?string} The image annotation status, which may
 *     include the annotation itself if completed successfully.
 */
var GetImageAnnotation = natives.GetImageAnnotation;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {boolean}
 */
var GetBold = natives.GetBold;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {boolean}
 */
var GetItalic = natives.GetItalic;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {boolean}
 */
var GetUnderline = natives.GetUnderline;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {boolean}
 */
var GetLineThrough = natives.GetLineThrough;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?Array<automation.CustomAction>} List of custom actions of the
 *     node.
 */
var GetCustomActions = natives.GetCustomActions;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?Array<string>} List of standard actions of the node.
 */
var GetStandardActions = natives.GetStandardActions;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {automation.NameFromType} The source of the node's name.
 */
var GetDefaultActionVerb = natives.GetDefaultActionVerb;


/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {automation.HasPopup}
 */
var GetHasPopup = natives.GetHasPopup;


/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} searchStr
 * @param {boolean} backward
 * @return {{treeId: string, nodeId: number}}
 */
var GetNextTextMatch = natives.GetNextTextMatch;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?Array<number>} A list of column header ids.

 * @return {?number} The id of the column header, if it exists.
 */
var GetTableCellColumnHeaders = natives.GetTableCellColumnHeaders;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {?Array<number>} A list of row header ids.
 */
var GetTableCellRowHeaders = natives.GetTableCellRowHeaders;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {number} Column index for this cell.
 */
var GetTableCellColumnIndex = natives.GetTableCellColumnIndex;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {number} Row index for this cell.
 */
var GetTableCellRowIndex = natives.GetTableCellRowIndex;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {number} Column index for this cell.
 */
var GetTableCellAriaColumnIndex = natives.GetTableCellAriaColumnIndex;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {number} Row index for this cell.
 */
var GetTableCellAriaRowIndex = natives.GetTableCellAriaRowIndex;

/**
 * @param {string} axTreeId The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {string} Detected language for this node.
 */
var GetDetectedLanguage = natives.GetDetectedLanguage;

/**
 * @param {string} axTreeId The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} attr The name of the string attribute.
 * @return {!Array<{startIndex: number, endIndex: number, language: string,
 * probability: number}>}
 */
var GetLanguageAnnotationForStringAttribute =
    natives.GetLanguageAnnotationForStringAttribute;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {!Array<number>}
 */
var GetWordStartOffsets = natives.GetWordStartOffsets;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {!Array<number>}
 */
var GetWordEndOffsets = natives.GetWordEndOffsets;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} eventType
 */
var EventListenerAdded = natives.EventListenerAdded;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @param {string} eventType
 */
var EventListenerRemoved = natives.EventListenerRemoved;

/**
 * @param {string} axTreeID The id of the accessibility tree.
 * @param {number} nodeID The id of a node.
 * @return {Array}
 */
var GetMarkers = natives.GetMarkers;

var logging = requireNative('logging');
var utils = require('utils');

/**
 * A single node in the Automation tree.
 * @param {AutomationRootNodeImpl} root The root of the tree.
 * @constructor
 */
function AutomationNodeImpl(root) {
  this.rootImpl = root;
  this.listeners = {__proto__: null};
}

AutomationNodeImpl.prototype = {
  __proto__: null,
  treeID: '',
  id: -1,
  isRootNode: false,

  detach: function() {
    this.rootImpl = null;
    this.listeners = {__proto__: null};
  },

  get root() {
    return this.rootImpl && this.rootImpl.wrapper;
  },

  get parent() {
    var info = GetParentID(this.treeID, this.id);
    if (!info)
      return;
    return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
  },

  get htmlAttributes() {
    return GetHtmlAttributes(this.treeID, this.id) || {};
  },

  get state() {
    return GetState(this.treeID, this.id) || {};
  },

  get role() {
    return GetRole(this.treeID, this.id);
  },

  get restriction() {
    return GetRestriction(this.treeID, this.id);
  },

  get checked() {
    return GetChecked(this.treeID, this.id);
  },

  get location() {
    return GetLocation(this.treeID, this.id);
  },

  boundsForRange: function(startIndex, endIndex, callback) {
    if (!this.rootImpl)
      return;

    // Not yet initialized.
    if (this.rootImpl.treeID === undefined || this.id === undefined) {
      return;
    }

    if (!callback)
      return;

    if (!GetBoolAttribute(this.treeID, this.id, 'supportsTextLocation')) {
      try {
        callback(
            GetBoundsForRange(this.treeID, this.id, startIndex, endIndex));
        return;
      } catch (e) {
        logging.WARNING('Error with bounds for range callback' + e);
      }
      return;
    }

    this.performAction_(
        'getTextLocation', {startIndex: startIndex, endIndex: endIndex},
        callback);
    return;
  },

  get unclippedLocation() {
    var result = GetUnclippedLocation(this.treeID, this.id);
    if (result === undefined)
      result = GetLocation(this.treeID, this.id);
    return result;
  },

  get indexInParent() {
    return GetIndexInParent(this.treeID, this.id);
  },

  get lineStartOffsets() {
    return GetLineStartOffsets(this.treeID, this.id);
  },

  get childTree() {
    var childTreeID = GetStringAttribute(this.treeID, this.id, 'childTreeId');
    if (childTreeID)
      return AutomationRootNodeImpl.get(childTreeID);
  },

  get firstChild() {
    if (GetChildCount(this.treeID, this.id) == 0)
      return undefined;
    var info = GetChildIDAtIndex(this.treeID, this.id, 0);
    if (info)
      return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
  },

  get lastChild() {
    var count = GetChildCount(this.treeID, this.id);
    if (count == 0)
      return;

    var info = GetChildIDAtIndex(this.treeID, this.id, count - 1);
    if (info)
      return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
  },

  get children() {
    var info = GetChildIds(this.treeID, this.id);
    if (!info)
      return [];

    var children = [];
    for (var i = 0; i < info.nodeIds.length; ++i) {
      var childID = info.nodeIds[i];
      var child = AutomationRootNodeImpl.getNodeFromTree(info.treeId, childID);
      if (child)
        $Array.push(children, child);
    }
    return children;
  },

  get previousSibling() {
    var parent = this.parent;
    if (!parent)
      return undefined;
    parent = privates(parent).impl;
    var indexInParent = GetIndexInParent(this.treeID, this.id);
    var info = GetChildIDAtIndex(parent.treeID, parent.id, indexInParent - 1);
    if (info)
      return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
  },

  get nextSibling() {
    var parent = this.parent;
    if (!parent)
      return undefined;
    parent = privates(parent).impl;
    var indexInParent = GetIndexInParent(this.treeID, this.id);
    var info = GetChildIDAtIndex(parent.treeID, parent.id, indexInParent + 1);
    if (info)
      return AutomationRootNodeImpl.getNodeFromTree(info.treeId, info.nodeId);
  },

  get nameFrom() {
    return GetNameFrom(this.treeID, this.id);
  },


  get descriptionFrom() {
    return GetDescriptionFrom(this.treeID, this.id);
  },

  get imageAnnotation() {
    return GetImageAnnotation(this.treeID, this.id);
  },

  get bold() {
    return GetBold(this.treeID, this.id);
  },

  get italic() {
    return GetItalic(this.treeID, this.id);
  },

  get underline() {
    return GetUnderline(this.treeID, this.id);
  },

  get lineThrough() {
    return GetLineThrough(this.treeID, this.id);
  },

  get detectedLanguage() {
    return GetDetectedLanguage(this.treeID, this.id)
  },

  languageAnnotationForStringAttribute: function(attributeName) {
    return GetLanguageAnnotationForStringAttribute(this.treeID,
        this.id, attributeName);
  },

  get customActions() {
    return GetCustomActions(this.treeID, this.id);
  },

  get standardActions() {
    return GetStandardActions(this.treeID, this.id);
  },

  get defaultActionVerb() {
    return GetDefaultActionVerb(this.treeID, this.id);
  },

  get hasPopup() {
    return GetHasPopup(this.treeID, this.id);
  },

  get tableCellColumnHeaders() {
    var ids = GetTableCellColumnHeaders(this.treeID, this.id);
    if (ids && this.rootImpl) {
      var result = [];
      for (var i = 0; i < ids.length; i++)
        result.push(this.rootImpl.get(ids[i]));
      return result;
    }
  },

  get tableCellRowHeaders() {
    var id = GetTableCellRowHeaders(this.treeID, this.id);
    if (ids && this.rootImpl) {
      var result = [];
      for (var i = 0; i < ids.length; i++)
        result.push(this.rootImpl.get(ids[i]));
      return result;
    }
  },

  get tableCellColumnIndex() {
    return GetTableCellColumnIndex(this.treeID, this.id);
  },

  get tableCellRowIndex() {
    return GetTableCellRowIndex(this.treeID, this.id);
  },


  get tableCellAriaColumnIndex() {
    return GetTableCellAriaColumnIndex(this.treeID, this.id);
  },

  get tableCellAriaRowIndex() {
    return GetTableCellAriaRowIndex(this.treeID, this.id);
  },

  get nonInlineTextWordStarts() {
    return GetWordStartOffsets(this.treeID, this.id);
  },

  get nonInlineTextWordEnds() {
    return GetWordEndOffsets(this.treeID, this.id);
  },

  get markers() {
    return GetMarkers(this.treeID, this.id);
  },

  doDefault: function() {
    this.performAction_('doDefault');
  },

  focus: function() {
    this.performAction_('focus');
  },

  getImageData: function(maxWidth, maxHeight) {
    this.performAction_('getImageData',
                        { maxWidth: maxWidth,
                          maxHeight: maxHeight });
  },

  hitTest: function(x, y, eventToFire) {
    this.hitTestInternal(x, y, eventToFire);
  },

  hitTestWithReply: function(x, y, opt_callback) {
    this.hitTestInternal(x, y, 'hitTestResult', opt_callback);
  },

  hitTestInternal: function(x, y, eventToFire, opt_callback) {
    // Convert from global to tree-relative coordinates.
    var location = GetLocation(this.treeID, GetRootID(this.treeID));
    this.performAction_('hitTest',
                        { x: Math.floor(x - location.left),
                          y: Math.floor(y - location.top),
                          eventToFire: eventToFire },
                        opt_callback);
  },

  makeVisible: function() {
    this.performAction_('scrollToMakeVisible');
  },

  performCustomAction: function(customActionId) {
    this.performAction_('customAction', { customActionID: customActionId });
  },

  performStandardAction: function(action) {
    var standardActions = GetStandardActions(this.treeID, this.id);
    if (!standardActions ||
        !standardActions.find(item => action == item)) {
      throw 'Inapplicable action for node: ' + action;
    }
    this.performAction_(action);
  },

  replaceSelectedText: function(value) {
    if (this.state.editable) {
      this.performAction_('replaceSelectedText', { value: value});
    }
  },

  resumeMedia: function() {
    this.performAction_('resumeMedia');
  },

  scrollBackward: function(opt_callback) {
    this.performAction_('scrollBackward', {}, opt_callback);
  },

  scrollForward: function(opt_callback) {
    this.performAction_('scrollForward', {}, opt_callback);
  },

  scrollUp: function(opt_callback) {
    this.performAction_('scrollUp', {}, opt_callback);
  },

  scrollDown: function(opt_callback) {
    this.performAction_('scrollDown', {}, opt_callback);
  },

  scrollLeft: function(opt_callback) {
    this.performAction_('scrollLeft', {}, opt_callback);
  },

  scrollRight: function(opt_callback) {
    this.performAction_('scrollRight', {}, opt_callback);
  },

  setSelection: function(startIndex, endIndex) {
    if (this.state.editable) {
      this.performAction_('setSelection',
                          { focusNodeID: this.id,
                            anchorOffset: startIndex,
                            focusOffset: endIndex });
    }
  },

  setSequentialFocusNavigationStartingPoint: function() {
    this.performAction_('setSequentialFocusNavigationStartingPoint');
  },

  setValue: function(value) {
    if (this.state.editable) {
      this.performAction_('setValue', { value: value});
    }
  },

  showContextMenu: function() {
    this.performAction_('showContextMenu');
  },

  startDuckingMedia: function() {
    this.performAction_('startDuckingMedia');
  },

  stopDuckingMedia: function() {
    this.performAction_('stopDuckingMedia');
  },

  suspendMedia: function() {
    this.performAction_('suspendMedia');
  },

  domQuerySelector: function(selector, callback) {
    if (!this.rootImpl)
      callback();
    automationInternal.querySelector(
      { treeID: this.rootImpl.treeID,
        automationNodeID: this.id,
        selector: selector },
      $Function.bind(this.domQuerySelectorCallback_, this, callback));
  },

  find: function(params) {
    return this.findInternal_(params);
  },

  findAll: function(params) {
    return this.findInternal_(params, []);
  },

  matches: function(params) {
    return this.matchInternal_(params);
  },

  getNextTextMatch: function(searchStr, backward) {
    var info = GetNextTextMatch(this.treeID, this.id, searchStr, backward);

    if (!info)
      return;

    var impl = privates(AutomationRootNodeImpl.get(info.treeId)).impl;
    if (impl)
      return impl.get(info.nodeId);
  },

  addEventListener: function(eventType, callback, capture) {
    this.removeEventListener(eventType, callback);
    if (!this.listeners[eventType])
      this.listeners[eventType] = [];
    $Array.push(this.listeners[eventType], {
      __proto__: null,
      callback: callback,
      capture: !!capture,
    });
    EventListenerAdded(this.treeID, this.id, eventType);
  },

  // TODO(dtseng/aboxhall): Check this impl against spec.
  removeEventListener: function(eventType, callback) {
    if (this.listeners[eventType]) {
      var listeners = this.listeners[eventType];
      for (var i = 0; i < listeners.length; i++) {
        if (callback === listeners[i].callback)
          $Array.splice(listeners, i, 1);
      }

      if (listeners.length == 0) {
        EventListenerRemoved(this.treeID, this.id, eventType);
      }
    }
  },

  toJSON: function() {
    return { treeID: this.treeID,
             id: this.id,
             role: this.role,
             attributes: this.attributes };
  },

  dispatchEvent: function(eventType, eventFrom, mouseX, mouseY) {
    var path = [];
    var parent = this.parent;
    while (parent) {
      $Array.push(path, parent);
      parent = parent.parent;
    }
    var event = new AutomationEvent(eventType, this.wrapper, eventFrom);
    event.mouseX = mouseX;
    event.mouseY = mouseY;

    // Dispatch the event through the propagation path in three phases:
    // - capturing: starting from the root and going down to the target's parent
    // - targeting: dispatching the event on the target itself
    // - bubbling: starting from the target's parent, going back up to the root.
    // At any stage, a listener may call stopPropagation() on the event, which
    // will immediately stop event propagation through this path.
    if (this.dispatchEventAtCapturing_(event, path)) {
      if (this.dispatchEventAtTargeting_(event, path))
        this.dispatchEventAtBubbling_(event, path);
    }
  },

  toString: function() {
    var parentID = GetParentID(this.treeID, this.id);
    parentID = parentID ? parentID.nodeId : null;
    var childTreeID = GetStringAttribute(this.treeID, this.id, 'childTreeId');
    var count = GetChildCount(this.treeID, this.id);
    var childIDs = [];
    for (var i = 0; i < count; ++i) {
      var childID = GetChildIDAtIndex(this.treeID, this.id, i).nodeId;
      $Array.push(childIDs, childID);
    }
    var name = GetStringAttribute(this.treeID, this.id, 'name');

    var result = 'node id=' + this.id +
        ' role=' + this.role +
        ' state=' + $JSON.stringify(this.state) +
        ' parentID=' + parentID +
        ' childIds=' + $JSON.stringify(childIDs);
    if (childTreeID)
      result += ' childTreeID=' + childTreeID;
    if (name)
      result += ' name=' + name;
    if (this.className)
      result += ' className=' + this.className;
    return result;
  },

  dispatchEventAtCapturing_: function(event, path) {
    privates(event).impl.eventPhase = Event.CAPTURING_PHASE;
    for (var i = path.length - 1; i >= 0; i--) {
      this.fireEventListeners_(path[i], event);
      if (privates(event).impl.propagationStopped)
        return false;
    }
    return true;
  },

  dispatchEventAtTargeting_: function(event) {
    privates(event).impl.eventPhase = Event.AT_TARGET;
    this.fireEventListeners_(this.wrapper, event);
    return !privates(event).impl.propagationStopped;
  },

  dispatchEventAtBubbling_: function(event, path) {
    privates(event).impl.eventPhase = Event.BUBBLING_PHASE;
    for (var i = 0; i < path.length; i++) {
      this.fireEventListeners_(path[i], event);
      if (privates(event).impl.propagationStopped)
        return false;
    }
    return true;
  },

  fireEventListeners_: function(node, event) {
    var nodeImpl = privates(node).impl;
    if (!nodeImpl.rootImpl)
      return;

    var listeners = nodeImpl.listeners[event.type];
    if (!listeners)
      return;
    var eventPhase = event.eventPhase;
    for (var i = 0; i < listeners.length; i++) {
      if (eventPhase == Event.CAPTURING_PHASE && !listeners[i].capture)
        continue;
      if (eventPhase == Event.BUBBLING_PHASE && listeners[i].capture)
        continue;

      try {
        listeners[i].callback(event);
      } catch (e) {
        exceptionHandler.handle('Error in event handler for ' + event.type +
            ' during phase ' + eventPhase, e);
      }
    }
  },

  performAction_: function(actionType, opt_args, opt_callback) {
    if (!this.rootImpl)
      return;

    // Not yet initialized.
    if (this.rootImpl.treeID === undefined ||
        this.id === undefined) {
      return;
    }

    // Check permissions.
    if (!IsInteractPermitted()) {
      throw new Error(actionType + ' requires {"desktop": true} or' +
          ' {"interact": true} in the "automation" manifest key.');
    }
    var requestID = -1;
    if (opt_callback) {
      requestID = this.rootImpl.addActionResultCallback(opt_callback);
    }

    automationInternal.performAction({ treeID: this.rootImpl.treeID,
                                       automationNodeID: this.id,
                                       actionType: actionType,
                                       requestID: requestID},
                                     opt_args || {});
  },

  domQuerySelectorCallback_: function(userCallback, resultAutomationNodeID) {
    // resultAutomationNodeID could be zero or undefined or (unlikely) null;
    // they all amount to the same thing here, which is that no node was
    // returned.
    if (!resultAutomationNodeID || !this.rootImpl) {
      userCallback(null);
      return;
    }
    var resultNode = this.rootImpl.get(resultAutomationNodeID);
    if (!resultNode) {
      logging.WARNING('Query selector result not in tree: ' +
                      resultAutomationNodeID);
      userCallback(null);
    }
    userCallback(resultNode);
  },

  findInternal_: function(params, opt_results) {
    var result = null;
    this.forAllDescendants_(function(node) {
      if (privates(node).impl.matchInternal_(params)) {
        if (opt_results)
          $Array.push(opt_results, node);
        else
          result = node;
        return !opt_results;
      }
    });
    if (opt_results)
      return opt_results;
    return result;
  },

  /**
   * Executes a closure for all of this node's descendants, in pre-order.
   * Early-outs if the closure returns true.
   * @param {Function(AutomationNode):boolean} closure Closure to be executed
   *     for each node. Return true to early-out the traversal.
   */
  forAllDescendants_: function(closure) {
    var stack = $Array.reverse(this.wrapper.children);
    while (stack.length > 0) {
      var node = $Array.pop(stack);
      if (closure(node))
        return;

      var children = node.children;
      for (var i = children.length - 1; i >= 0; i--)
        $Array.push(stack, children[i]);
    }
  },

  matchInternal_: function(params) {
    if ($Object.keys(params).length === 0)
      return false;

    if ('role' in params && this.role != params.role)
      return false;

    if ('state' in params) {
      for (var state in params.state) {
        if (params.state[state] != (state in this.state))
          return false;
      }
    }
    if ('attributes' in params) {
      for (var attribute in params.attributes) {
        var attrValue = params.attributes[attribute];
        if (typeof attrValue != 'object') {
          if (this[attribute] !== attrValue)
            return false;
        } else if (attrValue instanceof $RegExp.self) {
          if (typeof this[attribute] != 'string')
            return false;
          if (!attrValue.test(this[attribute]))
            return false;
        } else {
          // TODO(aboxhall): handle intlist case.
          return false;
        }
      }
    }
    return true;
  }
};

var stringAttributes = [
    'accessKey',
    'ariaInvalidValue',
    'autoComplete',
    'className',
    'containerLiveRelevant',
    'containerLiveStatus',
    'description',
    'display',
    'fontFamily',
    'htmlTag',
    'imageDataUrl',
    'innerHtml',
    'language',
    'liveRelevant',
    'liveStatus',
    'name',
    'placeholder',
    'roleDescription',
    'textInputType',
    'tooltip',
    'url',
    'value'];

var boolAttributes = [
  'busy', 'clickable', 'containerLiveAtomic', 'containerLiveBusy', 'liveAtomic',
  'modal', 'scrollable', 'selected', 'supportsTextLocation'
];

var intAttributes = [
    'backgroundColor',
    'color',
    'colorValue',
    'hierarchicalLevel',
    'posInSet',
    'scrollX',
    'scrollXMax',
    'scrollXMin',
    'scrollY',
    'scrollYMax',
    'scrollYMin',
    'setSize',
    'tableCellColumnSpan',
    'tableCellRowSpan',
    'tableColumnCount',
    'ariaColumnCount',
    'tableColumnIndex',
    'tableRowCount',
    'ariaRowCount',
    'tableRowIndex',
    'textSelEnd',
    'textSelStart'];

// Int attribute, relation property to expose, reverse relation to expose.
var nodeRefAttributes = [
    ['activedescendantId', 'activeDescendant', 'activeDescendantFor'],
    ['detailsId', 'details', 'detailsFor'],
    ['errormessageId', 'errorMessage', 'errorMessageFor'],
    ['inPageLinkTargetId', 'inPageLinkTarget', null],
    ['nextFocusId', 'nextFocus', null],
    ['nextOnLineId', 'nextOnLine', null],
    ['previousFocusId', 'previousFocus', null],
    ['previousOnLineId', 'previousOnLine', null],
    ['tableColumnHeaderId', 'tableColumnHeader', null],
    ['tableHeaderId', 'tableHeader', null],
    ['tableRowHeaderId', 'tableRowHeader', null]];

var intListAttributes = [
    'lineBreaks',
    'wordEnds',
    'wordStarts'];

// Intlist attribute, relation property to expose, reverse relation to expose.
var nodeRefListAttributes = [
    ['controlsIds', 'controls', 'controlledBy'],
    ['describedbyIds', 'describedBy', 'descriptionFor'],
    ['flowtoIds', 'flowTo', 'flowFrom'],
    ['labelledbyIds', 'labelledBy', 'labelFor']];

var floatAttributes = [
    'fontSize',
    'maxValueForRange',
    'minValueForRange',
    'valueForRange'];

var htmlAttributes = [
    ['type', 'inputType']];

var publicAttributes = [];

$Array.forEach(stringAttributes, function(attributeName) {
  $Array.push(publicAttributes, attributeName);
  $Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
    __proto__: null,
    get: function() {
      return GetStringAttribute(this.treeID, this.id, attributeName);
    }
  });
});

$Array.forEach(boolAttributes, function(attributeName) {
  $Array.push(publicAttributes, attributeName);
  $Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
    __proto__: null,
    get: function() {
      return GetBoolAttribute(this.treeID, this.id, attributeName);
    }
  });
});

$Array.forEach(intAttributes, function(attributeName) {
  $Array.push(publicAttributes, attributeName);
  $Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
    __proto__: null,
    get: function() {
      return GetIntAttribute(this.treeID, this.id, attributeName);
    }
  });
});

$Array.forEach(nodeRefAttributes, function(params) {
  var srcAttributeName = params[0];
  var dstAttributeName = params[1];
  var dstReverseAttributeName = params[2];
  $Array.push(publicAttributes, dstAttributeName);
  $Object.defineProperty(AutomationNodeImpl.prototype, dstAttributeName, {
    __proto__: null,
    get: function() {
      var id = GetIntAttribute(this.treeID, this.id, srcAttributeName);
      if (id && this.rootImpl)
        return this.rootImpl.get(id);
      else
        return undefined;
    }
  });
  if (dstReverseAttributeName) {
    $Array.push(publicAttributes, dstReverseAttributeName);
    $Object.defineProperty(AutomationNodeImpl.prototype,
                           dstReverseAttributeName, {
      __proto__: null,
      get: function() {
        var ids = GetIntAttributeReverseRelations(
            this.treeID, this.id, srcAttributeName);
        if (!ids || !this.rootImpl)
          return undefined;
        var result = [];
        for (var i = 0; i < ids.length; ++i) {
          var node = this.rootImpl.get(ids[i]);
          if (node)
          $Array.push(result, node);
        }
        return result;
      }
    });
  }
});

$Array.forEach(intListAttributes, function(attributeName) {
  $Array.push(publicAttributes, attributeName);
  $Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
    __proto__: null,
    get: function() {
      return GetIntListAttribute(this.treeID, this.id, attributeName);
    }
  });
});

$Array.forEach(nodeRefListAttributes, function(params) {
  var srcAttributeName = params[0];
  var dstAttributeName = params[1];
  var dstReverseAttributeName = params[2];
  $Array.push(publicAttributes, dstAttributeName);
  $Object.defineProperty(AutomationNodeImpl.prototype, dstAttributeName, {
    __proto__: null,
    get: function() {
      var ids = GetIntListAttribute(this.treeID, this.id, srcAttributeName);
      if (!ids || !this.rootImpl)
        return undefined;
      var result = [];
      for (var i = 0; i < ids.length; ++i) {
        var node = this.rootImpl.get(ids[i]);
        if (node)
          $Array.push(result, node);
      }
      return result;
    }
  });
  if (dstReverseAttributeName) {
    $Array.push(publicAttributes, dstReverseAttributeName);
    $Object.defineProperty(AutomationNodeImpl.prototype,
                           dstReverseAttributeName, {
      __proto__: null,
      get: function() {
        var ids = GetIntListAttributeReverseRelations(
            this.treeID, this.id, srcAttributeName);
        if (!ids || !this.rootImpl)
          return undefined;
        var result = [];
        for (var i = 0; i < ids.length; ++i) {
          var node = this.rootImpl.get(ids[i]);
          if (node)
          $Array.push(result, node);
        }
        return result;
      }
    });
  }
});

$Array.forEach(floatAttributes, function(attributeName) {
  $Array.push(publicAttributes, attributeName);
  $Object.defineProperty(AutomationNodeImpl.prototype, attributeName, {
    __proto__: null,
    get: function() {
      return GetFloatAttribute(this.treeID, this.id, attributeName);
    }
  });
});

$Array.forEach(htmlAttributes, function(params) {
  var srcAttributeName = params[0];
  var dstAttributeName = params[1];
  $Array.push(publicAttributes, dstAttributeName);
  $Object.defineProperty(AutomationNodeImpl.prototype, dstAttributeName, {
    __proto__: null,
    get: function() {
      return GetHtmlAttribute(this.treeID, this.id, srcAttributeName);
    }
  });
});

/**
 * AutomationRootNode.
 *
 * An AutomationRootNode is the javascript end of an AXTree living in the
 * browser. AutomationRootNode handles unserializing incremental updates from
 * the source AXTree. Each update contains node data that form a complete tree
 * after applying the update.
 *
 * A brief note about ids used through this class. The source AXTree assigns
 * unique ids per node and we use these ids to build a hash to the actual
 * AutomationNode object.
 * Thus, tree traversals amount to a lookup in our hash.
 *
 * The tree itself is identified by the accessibility tree id of the
 * renderer widget host.
 * @constructor
 */
function AutomationRootNodeImpl(treeID) {
  $Function.call(AutomationNodeImpl, this, this);
  this.treeID = treeID;
  this.axNodeDataCache_ = {__proto__: null};
}

utils.defineProperty(AutomationRootNodeImpl, 'idToAutomationRootNode_',
    {__proto__: null});

utils.defineProperty(AutomationRootNodeImpl, 'get', function(treeID) {
  var result = AutomationRootNodeImpl.idToAutomationRootNode_[treeID];
  return result || undefined;
});

utils.defineProperty(AutomationRootNodeImpl, 'getOrCreate', function(treeID) {
  if (AutomationRootNodeImpl.idToAutomationRootNode_[treeID])
    return AutomationRootNodeImpl.idToAutomationRootNode_[treeID];
  var result = new AutomationRootNode(treeID);
  AutomationRootNodeImpl.idToAutomationRootNode_[treeID] = result;
  return result;
});

utils.defineProperty(
    AutomationRootNodeImpl, 'getNodeFromTree', function(treeId, nodeId) {
  var tree = AutomationRootNodeImpl.get(treeId);
  if (!tree)
    return;
  var impl = privates(tree).impl;
  if (impl)
    return impl.get(nodeId);
});

utils.defineProperty(AutomationRootNodeImpl, 'destroy', function(treeID) {
  delete AutomationRootNodeImpl.idToAutomationRootNode_[treeID];
});

/**
 * A counter keeping track of IDs to use for mapping action requests to
 * their callback function.
 */
AutomationRootNodeImpl.actionRequestCounter = 0;

/**
 * A map from a request ID to the corresponding callback function to call
 * when the action response event is received.
 */
AutomationRootNodeImpl.actionRequestIDToCallback = {};

AutomationRootNodeImpl.prototype = {
  __proto__: AutomationNodeImpl.prototype,

  /**
   * @type {boolean}
   */
  isRootNode: true,

  /**
   * @type {string}
   */
  treeID: '',

  /**
   * A map from id to AutomationNode.
   * @type {Object.<number, AutomationNode>}
   * @private
   */
  axNodeDataCache_: null,

  get id() {
    var result = GetRootID(this.treeID);

    // Don't return undefined, because the id is often passed directly
    // as an argument to a native binding that expects only a valid number.
    if (result === undefined)
      return -1;

    return result;
  },

  get docUrl() {
    return GetDocURL(this.treeID);
  },

  get docTitle() {
    return GetDocTitle(this.treeID);
  },

  get docLoaded() {
    return GetDocLoaded(this.treeID);
  },

  get docLoadingProgress() {
    return GetDocLoadingProgress(this.treeID);
  },

  get isSelectionBackward() {
    return GetIsSelectionBackward(this.treeID);
  },

  get anchorObject() {
    const id = GetAnchorObjectID(this.treeID);
    if (id && id != -1)
      return this.get(id);
    return undefined;
  },

  get anchorOffset() {
    const id = GetAnchorObjectID(this.treeID);
    if (id && id != -1)
      return GetAnchorOffset(this.treeID);
    return undefined;
  },

  get anchorAffinity() {
    const id = GetAnchorObjectID(this.treeID);
    if (id && id != -1)
      return GetAnchorAffinity(this.treeID);
    return undefined;
  },

  get focusObject() {
    const id = GetFocusObjectID(this.treeID);
    if (id && id != -1)
      return this.get(id);
    return undefined;
  },

  get focusOffset() {
    const id = GetFocusObjectID(this.treeID);
    if (id && id != -1)
      return GetFocusOffset(this.treeID);
    return undefined;
  },

  get focusAffinity() {
    const id = GetFocusObjectID(this.treeID);
    if (id && id != -1)
      return GetFocusAffinity(this.treeID);
    return undefined;
  },

  get selectionStartObject() {
    const id = GetSelectionStartObjectID(this.treeID);
    if (id && id != -1)
      return this.get(id);
    return undefined;
  },

  get selectionStartOffset() {
    const id = GetSelectionStartObjectID(this.treeID);
    if (id && id != -1)
      return GetSelectionStartOffset(this.treeID);
    return undefined;
  },

  get selectionStartAffinity() {
    const id = GetSelectionStartObjectID(this.treeID);
    if (id && id != -1)
      return GetSelectionStartAffinity(this.treeID);
    return undefined;
  },

  get selectionEndObject() {
    const id = GetSelectionEndObjectID(this.treeID);
    if (id && id != -1)
      return this.get(id);
    return undefined;
  },

  get selectionEndOffset() {
    const id = GetSelectionEndObjectID(this.treeID);
    if (id && id != -1)
      return GetSelectionEndOffset(this.treeID);
    return undefined;
  },

  get selectionEndAffinity() {
    const id = GetSelectionEndObjectID(this.treeID);
    if (id && id != -1)
      return GetSelectionEndAffinity(this.treeID);
    return undefined;
  },

  get: function(id) {
    if (id == undefined)
      return undefined;

    if (id == this.id)
      return this.wrapper;

    var obj = this.axNodeDataCache_[id];
    if (obj)
      return obj;

    // Validate the backing AXTree has the specified node.
    if (!GetRole(this.treeID, id))
      return;

    obj = new AutomationNode(this);
    privates(obj).impl.treeID = this.treeID;
    privates(obj).impl.id = id;
    this.axNodeDataCache_[id] = obj;

    return obj;
  },

  remove: function(id) {
    if (this.axNodeDataCache_[id])
      privates(this.axNodeDataCache_[id]).impl.detach();
    delete this.axNodeDataCache_[id];
  },

  destroy: function() {
    this.dispatchEvent('destroyed', 'none');
    for (var id in this.axNodeDataCache_)
      this.remove(id);
    this.detach();
  },

  onAccessibilityEvent: function(eventParams) {
    var targetNode = this.get(eventParams.targetID);
    if (targetNode) {
      var targetNodeImpl = privates(targetNode).impl;
      targetNodeImpl.dispatchEvent(
          eventParams.eventType, eventParams.eventFrom,
          eventParams.mouseX, eventParams.mouseY);

      if (eventParams.actionRequestID != -1) {
        this.onActionResult(eventParams.actionRequestID, targetNode);
      }
    } else {
      logging.WARNING('Got ' + eventParams.eventType +
                      ' event on unknown node: ' + eventParams.targetID +
                      '; this: ' + this.id);
    }
    return true;
  },

  addActionResultCallback: function(callback) {
    AutomationRootNodeImpl.actionRequestIDToCallback[
        ++AutomationRootNodeImpl.actionRequestCounter] = callback;
    return AutomationRootNodeImpl.actionRequestCounter;
  },

  onGetTextLocationResult: function(textLocationParams) {
    let requestID = textLocationParams.requestID;
    if (requestID in AutomationRootNodeImpl.actionRequestIDToCallback) {
      let callback =
          AutomationRootNodeImpl.actionRequestIDToCallback[requestID];
      try {
        if (textLocationParams.result) {
          callback(ComputeGlobalBounds(
              this.treeID, textLocationParams.nodeID, textLocationParams.left,
              textLocationParams.top, textLocationParams.width,
              textLocationParams.height));
        } else {
          callback(undefined);
        }
      } catch (e) {
        logging.WARNING('Error with onGetTextLocationResult callback:' + e);
      }
      delete AutomationNodeImpl.actionRequestIDToCallback[requestID];
    }
  },


  onActionResult: function(requestID, result) {
    if (requestID in AutomationRootNodeImpl.actionRequestIDToCallback) {
      AutomationRootNodeImpl.actionRequestIDToCallback[requestID](result);
      delete AutomationRootNodeImpl.actionRequestIDToCallback[requestID];
    }
  },

  toString: function() {
    function toStringInternal(nodeImpl, indent) {
      if (!nodeImpl)
        return '';
      var output = '';
      if (nodeImpl.isRootNode)
        output += indent + 'tree id=' + nodeImpl.treeID + '\n';
      output += indent +
        $Function.call(AutomationNodeImpl.prototype.toString, nodeImpl) + '\n';
      indent += '  ';
      var children = nodeImpl.children;
      for (var i = 0; i < children.length; ++i)
        output += toStringInternal(privates(children[i]).impl, indent);
      return output;
    }
    return toStringInternal(this, '');
  },
};

function AutomationNode() {
  privates(AutomationNode).constructPrivate(this, arguments);
}
utils.expose(AutomationNode, AutomationNodeImpl, {
  functions: [
    'doDefault',
    'find',
    'findAll',
    'focus',
    'getImageData',
    'getNextTextMatch',
    'hitTest',
    'hitTestWithReply',
    'makeVisible',
    'matches',
    'performCustomAction',
    'performStandardAction',
    'replaceSelectedText',
    'resumeMedia',
    'scrollBackward',
    'scrollForward',
    'scrollUp',
    'scrollDown',
    'scrollLeft',
    'scrollRight',
    'setSelection',
    'setSequentialFocusNavigationStartingPoint',
    'setValue',
    'showContextMenu',
    'startDuckingMedia',
    'stopDuckingMedia',
    'suspendMedia',
    'addEventListener',
    'removeEventListener',
    'domQuerySelector',
    'toString',
    'boundsForRange',
    'languageAnnotationForStringAttribute',
  ],
  readonly: $Array.concat(
      publicAttributes,
      [
        'bold',
        'checked',
        'children',
        'customActions',
        'defaultActionVerb',
        'descriptionFrom',
        'detectedLanguage',
        'firstChild',
        'hasPopup',
        'htmlAttributes',
        'imageAnnotation',
        'indexInParent',
        'isRootNode',
        'italic',
        'lastChild',
        'lineStartOffsets',
        'lineThrough',
        'location',
        'markers',
        'nameFrom',
        'nextSibling',
        'nonInlineTextWordEnds',
        'nonInlineTextWordStarts',
        'parent',
        'previousSibling',
        'restriction',
        'role',
        'root',
        'standardActions',
        'state',
        'tableCellAriaColumnIndex',
        'tableCellAriaRowIndex',
        'tableCellColumnHeaders',
        'tableCellColumnIndex',
        'tableCellRowHeaders',
        'tableCellRowIndex',
        'unclippedLocation',
        'underline',
      ]),
});

function AutomationRootNode() {
  privates(AutomationRootNode).constructPrivate(this, arguments);
}
utils.expose(AutomationRootNode, AutomationRootNodeImpl, {
  superclass: AutomationNode,
  readonly: [
    'docTitle',
    'docUrl',
    'docLoaded',
    'docLoadingProgress',
    'isSelectionBackward',
    'anchorObject',
    'anchorOffset',
    'anchorAffinity',
    'focusObject',
    'focusOffset',
    'focusAffinity',
    'selectionStartObject',
    'selectionStartOffset',
    'selectionStartAffinity',
    'selectionEndObject',
    'selectionEndOffset',
    'selectionEndAffinity',
  ],
});

utils.defineProperty(AutomationRootNode, 'get', function(treeID) {
  return AutomationRootNodeImpl.get(treeID);
});

utils.defineProperty(AutomationRootNode, 'getOrCreate', function(treeID) {
  return AutomationRootNodeImpl.getOrCreate(treeID);
});

utils.defineProperty(AutomationRootNode, 'destroy', function(treeID) {
  AutomationRootNodeImpl.destroy(treeID);
});

exports.$set('AutomationNode', AutomationNode);
exports.$set('AutomationRootNode', AutomationRootNode);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the chrome.app.runtime API.

var AppViewGuestInternal;
// appViewGuestInternal isn't available in lock screen contexts.
if (requireNative('v8_context').GetAvailability('appViewGuestInternal').
        is_available) {
  AppViewGuestInternal = getInternalApi('appViewGuestInternal');
}
var fileSystemHelpers = requireNative('file_system_natives');
var GetIsolatedFileSystem = fileSystemHelpers.GetIsolatedFileSystem;
var entryIdManager = require('entryIdManager');

if (AppViewGuestInternal) {
  bindingUtil.registerEventArgumentMassager('app.runtime.onEmbedRequested',
                                            function(args, dispatch) {
    var appEmbeddingRequest = args[0];
    var id = appEmbeddingRequest.guestInstanceId;
    delete appEmbeddingRequest.guestInstanceId;
    appEmbeddingRequest.allow = function(url) {
      AppViewGuestInternal.attachFrame(url, id);
    };

    appEmbeddingRequest.deny = function() {
      AppViewGuestInternal.denyRequest(id);
    };

    dispatch([appEmbeddingRequest]);
  });
}

bindingUtil.registerEventArgumentMassager('app.runtime.onLaunched',
                                          function(args, dispatch) {
  var launchData = args[0];
  if (launchData.items) {
    // An onLaunched corresponding to file_handlers in the app's manifest.
    var items = [];
    var numItems = launchData.items.length;
    var itemLoaded = function(err, item) {
      if (err) {
        console.error('Error getting fileEntry, code: ' + err.code);
      } else {
        $Array.push(items, item);
      }
      if (--numItems === 0) {
        var data = {
          isDemoSession: launchData.isDemoSession,
          isKioskSession: launchData.isKioskSession,
          isPublicSession: launchData.isPublicSession,
          source: launchData.source,
          actionData: launchData.actionData
        };
        if (items.length !== 0) {
          data.id = launchData.id;
          data.items = items;
        }
        dispatch([data]);
      }
    };
    $Array.forEach(launchData.items, function(item) {
      var fs = GetIsolatedFileSystem(item.fileSystemId);
      if (item.isDirectory) {
        fs.root.getDirectory(item.baseName, {}, function(dirEntry) {
          entryIdManager.registerEntry(item.entryId, dirEntry);
          itemLoaded(null, {entry: dirEntry});
        }, function(fileError) {
          itemLoaded(fileError);
        });
      } else {
        fs.root.getFile(item.baseName, {}, function(fileEntry) {
          entryIdManager.registerEntry(item.entryId, fileEntry);
          itemLoaded(null, {entry: fileEntry, type: item.mimeType});
        }, function(fileError) {
          itemLoaded(fileError);
        });
      }
    });
  } else {
    // Default case. This currently covers an onLaunched corresponding to
    // url_handlers in the app's manifest.
    dispatch([launchData]);
  }
});
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the app_window API.

var appWindowNatives = requireNative('app_window_natives');
var runtimeNatives = requireNative('runtime');
var forEach = require('utils').forEach;
var renderFrameObserverNatives = requireNative('renderFrameObserverNatives');

var appWindowData = null;
var currentAppWindow = null;
var currentWindowInternal = null;

var kSetBoundsFunction = 'setBounds';
var kSetSizeConstraintsFunction = 'setSizeConstraints';

// Bounds class definition.
var Bounds = function(boundsKey) {
  privates(this).boundsKey_ = boundsKey;
};
Object.defineProperty(Bounds.prototype, 'left', {
  get: function() {
    return appWindowData[privates(this).boundsKey_].left;
  },
  set: function(left) {
    this.setPosition(left, null);
  },
  enumerable: true
});
Object.defineProperty(Bounds.prototype, 'top', {
  get: function() {
    return appWindowData[privates(this).boundsKey_].top;
  },
  set: function(top) {
    this.setPosition(null, top);
  },
  enumerable: true
});
Object.defineProperty(Bounds.prototype, 'width', {
  get: function() {
    return appWindowData[privates(this).boundsKey_].width;
  },
  set: function(width) {
    this.setSize(width, null);
  },
  enumerable: true
});
Object.defineProperty(Bounds.prototype, 'height', {
  get: function() {
    return appWindowData[privates(this).boundsKey_].height;
  },
  set: function(height) {
    this.setSize(null, height);
  },
  enumerable: true
});
Object.defineProperty(Bounds.prototype, 'minWidth', {
  get: function() {
    return appWindowData[privates(this).boundsKey_].minWidth;
  },
  set: function(minWidth) {
    updateSizeConstraints(privates(this).boundsKey_, { minWidth: minWidth });
  },
  enumerable: true
});
Object.defineProperty(Bounds.prototype, 'maxWidth', {
  get: function() {
    return appWindowData[privates(this).boundsKey_].maxWidth;
  },
  set: function(maxWidth) {
    updateSizeConstraints(privates(this).boundsKey_, { maxWidth: maxWidth });
  },
  enumerable: true
});
Object.defineProperty(Bounds.prototype, 'minHeight', {
  get: function() {
    return appWindowData[privates(this).boundsKey_].minHeight;
  },
  set: function(minHeight) {
    updateSizeConstraints(privates(this).boundsKey_, { minHeight: minHeight });
  },
  enumerable: true
});
Object.defineProperty(Bounds.prototype, 'maxHeight', {
  get: function() {
    return appWindowData[privates(this).boundsKey_].maxHeight;
  },
  set: function(maxHeight) {
    updateSizeConstraints(privates(this).boundsKey_, { maxHeight: maxHeight });
  },
  enumerable: true
});
Bounds.prototype.setPosition = function(left, top) {
  updateBounds(privates(this).boundsKey_, { left: left, top: top });
};
Bounds.prototype.setSize = function(width, height) {
  updateBounds(privates(this).boundsKey_, { width: width, height: height });
};
Bounds.prototype.setMinimumSize = function(minWidth, minHeight) {
  updateSizeConstraints(privates(this).boundsKey_,
                        { minWidth: minWidth, minHeight: minHeight });
};
Bounds.prototype.setMaximumSize = function(maxWidth, maxHeight) {
  updateSizeConstraints(privates(this).boundsKey_,
                        { maxWidth: maxWidth, maxHeight: maxHeight });
};

apiBridge.registerCustomHook(function(bindingsAPI) {
  var apiFunctions = bindingsAPI.apiFunctions;

  apiFunctions.setCustomCallback('create',
      function(name, request, callback, windowParams) {
    // |callback| is optional.
    let maybeCallback = callback || function() {};

    // When window creation fails, windowParams is undefined. Return undefined
    // to the caller.
    if (!windowParams || !windowParams.frameId) {
      maybeCallback(undefined);
      return;
    }

    let view = appWindowNatives.GetFrame(windowParams.frameId,
                                         true /* notifyBrowser */);

    if (windowParams.existingWindow) {
      // Not creating a new window, but activating an existing one, so trigger
      // callback with existing window and don't do anything else.
      let windowResult = view ? view.chrome.app.window.current() : undefined;
      maybeCallback(windowResult);
      return;
    }

    // Handle the sandboxed page case.
    if (!view || !view.chrome.app) {
      var sandbox_window_message = 'Creating sandboxed window, it doesn\'t ' +
          'have access to the chrome.app API.';
      if (callback) {
        sandbox_window_message = sandbox_window_message +
            ' The chrome.app.window.create callback will be called, but ' +
            'there will be no object provided for the sandboxed window.';
      }
      console.warn(sandbox_window_message);
      maybeCallback(undefined);
      return;
    }

    // Handle error pages.
    // TODO(arthursonzogni): Figure out why view.chrome.app is defined for error
    // pages and stop doing it.
    if (!view.chrome.app.window) {
      maybeCallback(undefined);
      return;
    }

    // Initialize appWindowData in the newly created JS context
    view.chrome.app.window.initializeAppWindow(windowParams);

    var willCallback = renderFrameObserverNatives.OnDocumentElementCreated(
        windowParams.frameId, function(success) {
          let windowResult = success ? view.chrome.app.window.current()
                                     : undefined;
          maybeCallback(windowResult);
        });
    appWindowNatives.ResumeParser(windowParams.frameId);
    if (!willCallback)
      maybeCallback(undefined);
  });

  apiFunctions.setHandleRequest('current', function() {
    if (!currentAppWindow) {
      console.error('The JavaScript context calling ' +
                    'chrome.app.window.current() has no associated AppWindow.');
      return null;
    }
    return currentAppWindow;
  });

  apiFunctions.setHandleRequest('getAll', function() {
    var views = runtimeNatives.GetExtensionViews(-1, -1, 'APP_WINDOW');
    return $Array.map(views, function(win) {
      return win.chrome.app.window.current();
    });
  });

  apiFunctions.setHandleRequest('get', function(id) {
    var windows = $Array.filter(chrome.app.window.getAll(), function(win) {
      return win.id == id;
    });
    return windows.length > 0 ? windows[0] : null;
  });

  apiFunctions.setHandleRequest('canSetVisibleOnAllWorkspaces', function() {
    return /Mac/.test(navigator.platform) || /Linux/.test(navigator.userAgent);
  });

  // This is an internal function, but needs to be bound into a closure
  // so the correct JS context is used for global variables such as
  // currentWindowInternal, appWindowData, etc.
  apiFunctions.setHandleRequest('initializeAppWindow', function(params) {
    currentWindowInternal = getInternalApi('app.currentWindowInternal');
    var AppWindow = function() {
      this.innerBounds = new Bounds('innerBounds');
      this.outerBounds = new Bounds('outerBounds');
    };
    forEach(currentWindowInternal, function(key, value) {
      // Do not add internal functions that should not appear in the AppWindow
      // interface. They are called by Bounds mutators.
      if (key !== kSetBoundsFunction && key !== kSetSizeConstraintsFunction)
        AppWindow.prototype[key] = value;
    });
    AppWindow.prototype.moveTo = $Function.bind(window.moveTo, window);
    AppWindow.prototype.resizeTo = $Function.bind(window.resizeTo, window);
    AppWindow.prototype.contentWindow = window;
    var supportsFilters = false;
    var supportsLazyListeners = false;
    AppWindow.prototype.onClosed =
        bindingUtil.createCustomEvent(undefined /* name */,
                                      supportsFilters,
                                      supportsLazyListeners);
    AppWindow.prototype.close = function() {
      this.contentWindow.close();
    };
    AppWindow.prototype.getBounds = function() {
      // This is to maintain backcompatibility with a bug on Windows and
      // ChromeOS, which returns the position of the window but the size of
      // the content.
      var innerBounds = appWindowData.innerBounds;
      var outerBounds = appWindowData.outerBounds;
      return { left: outerBounds.left, top: outerBounds.top,
               width: innerBounds.width, height: innerBounds.height };
    };
    AppWindow.prototype.setBounds = function(bounds) {
      updateBounds('bounds', bounds);
    };
    AppWindow.prototype.isFullscreen = function() {
      return appWindowData.fullscreen;
    };
    AppWindow.prototype.isMinimized = function() {
      return appWindowData.minimized;
    };
    AppWindow.prototype.isMaximized = function() {
      return appWindowData.maximized;
    };
    AppWindow.prototype.isAlwaysOnTop = function() {
      return appWindowData.alwaysOnTop;
    };
    AppWindow.prototype.alphaEnabled = function() {
      return appWindowData.alphaEnabled;
    };

    Object.defineProperty(AppWindow.prototype, 'id', {get: function() {
      return appWindowData.id;
    }});

    // These properties are for testing.
    Object.defineProperty(
        AppWindow.prototype, 'hasFrameColor', {get: function() {
      return appWindowData.hasFrameColor;
    }});

    Object.defineProperty(AppWindow.prototype, 'activeFrameColor',
                          {get: function() {
      return appWindowData.activeFrameColor;
    }});

    Object.defineProperty(AppWindow.prototype, 'inactiveFrameColor',
                          {get: function() {
      return appWindowData.inactiveFrameColor;
    }});

    appWindowData = {
      id: params.id || '',
      innerBounds: {
        left: params.innerBounds.left,
        top: params.innerBounds.top,
        width: params.innerBounds.width,
        height: params.innerBounds.height,

        minWidth: params.innerBounds.minWidth,
        minHeight: params.innerBounds.minHeight,
        maxWidth: params.innerBounds.maxWidth,
        maxHeight: params.innerBounds.maxHeight
      },
      outerBounds: {
        left: params.outerBounds.left,
        top: params.outerBounds.top,
        width: params.outerBounds.width,
        height: params.outerBounds.height,

        minWidth: params.outerBounds.minWidth,
        minHeight: params.outerBounds.minHeight,
        maxWidth: params.outerBounds.maxWidth,
        maxHeight: params.outerBounds.maxHeight
      },
      fullscreen: params.fullscreen,
      minimized: params.minimized,
      maximized: params.maximized,
      alwaysOnTop: params.alwaysOnTop,
      hasFrameColor: params.hasFrameColor,
      activeFrameColor: params.activeFrameColor,
      inactiveFrameColor: params.inactiveFrameColor,
      alphaEnabled: params.alphaEnabled
    };
    currentAppWindow = new AppWindow;
  });
});

function boundsEqual(bounds1, bounds2) {
  if (!bounds1 || !bounds2)
    return false;
  return (bounds1.left == bounds2.left && bounds1.top == bounds2.top &&
          bounds1.width == bounds2.width && bounds1.height == bounds2.height);
}

function dispatchEventIfExists(target, name) {
  // Sometimes apps like to put their own properties on the window which
  // break our assumptions.
  var event = target[name];
  if (event && (typeof event.dispatch == 'function'))
    event.dispatch();
  else
    console.warn('Could not dispatch ' + name + ', event has been clobbered');
}

function updateAppWindowProperties(update) {
  if (!appWindowData)
    return;

  var oldData = appWindowData;
  update.id = oldData.id;
  appWindowData = update;

  var currentWindow = currentAppWindow;

  if (!boundsEqual(oldData.innerBounds, update.innerBounds))
    dispatchEventIfExists(currentWindow, "onBoundsChanged");

  if (!oldData.fullscreen && update.fullscreen)
    dispatchEventIfExists(currentWindow, "onFullscreened");
  if (!oldData.minimized && update.minimized)
    dispatchEventIfExists(currentWindow, "onMinimized");
  if (!oldData.maximized && update.maximized)
    dispatchEventIfExists(currentWindow, "onMaximized");

  if ((oldData.fullscreen && !update.fullscreen) ||
      (oldData.minimized && !update.minimized) ||
      (oldData.maximized && !update.maximized))
    dispatchEventIfExists(currentWindow, "onRestored");

  if (oldData.alphaEnabled !== update.alphaEnabled)
    dispatchEventIfExists(currentWindow, "onAlphaEnabledChanged");
};

function onAppWindowClosed() {
  if (!currentAppWindow)
    return;
  dispatchEventIfExists(currentAppWindow, "onClosed");
}

function updateBounds(boundsType, bounds) {
  if (!currentWindowInternal)
    return;

  currentWindowInternal.setBounds(boundsType, bounds);
}

function updateSizeConstraints(boundsType, constraints) {
  if (!currentWindowInternal)
    return;

  forEach(constraints, function(key, value) {
    // From the perspective of the API, null is used to reset constraints.
    // We need to convert this to 0 because a value of null is interpreted
    // the same as undefined in the browser and leaves the constraint unchanged.
    if (value === null)
      constraints[key] = 0;
  });

  currentWindowInternal.setSizeConstraints(boundsType, constraints);
}

exports.$set('onAppWindowClosed', onAppWindowClosed);
exports.$set('updateAppWindowProperties', updateAppWindowProperties);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the contextMenus API.

var contextMenusHandlers = require('contextMenusHandlers');

apiBridge.registerCustomHook(function(bindingsAPI) {
  var apiFunctions = bindingsAPI.apiFunctions;

  var handlers = contextMenusHandlers.create(false /* isWebview */);

  apiFunctions.setHandleRequest('create', handlers.requestHandlers.create);

  apiFunctions.setHandleRequest('remove', handlers.requestHandlers.remove);

  apiFunctions.setHandleRequest('update', handlers.requestHandlers.update);

  apiFunctions.setHandleRequest('removeAll',
                                handlers.requestHandlers.removeAll);
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Implementation of custom bindings for the contextMenus API.
// This is used to implement the contextMenus API for extensions and for the
// <webview> tag (see chrome_web_view_experimental.js).

var contextMenuNatives = requireNative('context_menus');

// Add the bindings to the contextMenus API.
function createContextMenusHandlers(isWebview) {
  var eventName = isWebview ? 'webViewInternal.contextMenus' : 'contextMenus';
  // Some dummy value for chrome.contextMenus instances.
  // Webviews use positive integers, and 0 to denote an invalid webview ID.
  // The following constant is -1 to avoid any conflicts between webview IDs and
  // extensions.
  var INSTANCEID_NON_WEBVIEW = -1;

  // Generates a customCallback for a given method. |handleCallback| will be
  // invoked with the same arguments this function is called with.
  function getCallback(handleCallback) {
    return function() {
      var extensionCallback = arguments[arguments.length - 1];
      if (bindingUtil.hasLastError()) {
        if (extensionCallback)
          extensionCallback();
        return;
      }

      $Function.apply(handleCallback, null, arguments);
      if (extensionCallback)
        extensionCallback();
    };
  }

  var contextMenus = { __proto__: null };
  contextMenus.handlers = { __proto__: null };

  var supportsLazyListeners = !isWebview;
  var supportsFilters = false;
  contextMenus.event = bindingUtil.createCustomEvent(
      eventName, supportsFilters, supportsLazyListeners);

  contextMenus.getIdFromCreateProperties = function(createProperties) {
    if (typeof createProperties.id !== 'undefined')
      return createProperties.id;
    return createProperties.generatedId;
  };

  contextMenus.handlersForId = function(instanceId, id) {
    if (!contextMenus.handlers[instanceId]) {
      contextMenus.handlers[instanceId] = {
        generated: {},
        string: {}
      };
    }
    if (typeof id === 'number')
      return contextMenus.handlers[instanceId].generated;
    return contextMenus.handlers[instanceId].string;
  };

  contextMenus.ensureListenerSetup = function() {
    if (contextMenus.listening) {
      return;
    }
    contextMenus.listening = true;
    contextMenus.event.addListener(function(info) {
      var instanceId = INSTANCEID_NON_WEBVIEW;
      if (isWebview) {
        instanceId = info.webviewInstanceId;
        // Don't expose |webviewInstanceId| via the public API.
        delete info.webviewInstanceId;
      }

      var id = info.menuItemId;
      var onclick = contextMenus.handlersForId(instanceId, id)[id];
      if (onclick) {
        $Function.apply(onclick, null, arguments);
      }
    });
  };

  // To be used with apiFunctions.setHandleRequest
  var requestHandlers = { __proto__: null };

  function createCallback(instanceId, id, onclick) {
    if (onclick) {
      contextMenus.ensureListenerSetup();
      contextMenus.handlersForId(instanceId, id)[id] = onclick;
    }
  }

  requestHandlers.create = function() {
    var createProperties = isWebview ? arguments[1] : arguments[0];
    createProperties.generatedId = contextMenuNatives.GetNextContextMenuId();
    var id = contextMenus.getIdFromCreateProperties(createProperties);
    var instanceId = isWebview ? arguments[0] : INSTANCEID_NON_WEBVIEW;
    var onclick = createProperties.onclick;

    var optArgs = {
      __proto__: null,
      customCallback: getCallback($Function.bind(createCallback, null,
                                                 instanceId, id, onclick)),
    };
    var name = isWebview ?
        'chromeWebViewInternal.contextMenusCreate' : 'contextMenus.create';
    bindingUtil.sendRequest(name, $Array.from(arguments), optArgs);
    return id;
  };

  function removeCallback(instanceId, id) {
    delete contextMenus.handlersForId(instanceId, id)[id];
  }

  requestHandlers.remove = function() {
    var instanceId = isWebview ? arguments[0] : INSTANCEID_NON_WEBVIEW;
    var id = isWebview ? arguments[1] : arguments[0];
    var optArgs = {
      __proto__: null,
      customCallback: getCallback($Function.bind(removeCallback, null,
                                                 instanceId, id)),
    };
    var name = isWebview ?
        'chromeWebViewInternal.contextMenusRemove' : 'contextMenus.remove';
    bindingUtil.sendRequest(name, $Array.from(arguments), optArgs);
  };

  function updateCallback(instanceId, id, onclick) {
    if (onclick) {
      contextMenus.ensureListenerSetup();
      contextMenus.handlersForId(instanceId, id)[id] = onclick;
    } else if (onclick === null) {
      // When onclick is explicitly set to null, remove the event listener.
      delete contextMenus.handlersForId(instanceId, id)[id];
    }
  }

  requestHandlers.update = function() {
    var instanceId = isWebview ? arguments[0] : INSTANCEID_NON_WEBVIEW;
    var id = isWebview ? arguments[1] : arguments[0];
    var updateProperties = isWebview ? arguments[2] : arguments[1];
    var onclick = updateProperties.onclick;
    var optArgs = {
      __proto__: null,
      customCallback: getCallback($Function.bind(updateCallback, null,
                                                 instanceId, id, onclick)),
    };

    var name = isWebview ?
        'chromeWebViewInternal.contextMenusUpdate' :
        'contextMenus.update';
    bindingUtil.sendRequest(name, $Array.from(arguments), optArgs);
  };

  function removeAllCallback(instanceId) {
    delete contextMenus.handlers[instanceId];
  }

  requestHandlers.removeAll = function() {
    var instanceId = isWebview ? arguments[0] : INSTANCEID_NON_WEBVIEW;
    var optArgs = {
      __proto__: null,
      customCallback: getCallback($Function.bind(removeAllCallback, null,
                                                 instanceId)),
    };

    var name = isWebview ?
        'chromeWebViewInternal.contextMenusRemoveAll' :
        'contextMenus.removeAll';
    bindingUtil.sendRequest(name, $Array.from(arguments), optArgs);
  };

  return {
    requestHandlers: requestHandlers,
  };
}

exports.$set('create', createContextMenusHandlers);
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the declarativeWebRequest API.

apiBridge.registerCustomHook(function(api) {
  var declarativeWebRequest = api.compiledApi;

  // Helper function for the constructor of concrete datatypes of the
  // declarative webRequest API.
  // Makes sure that |this| contains the union of parameters and
  // {'instanceType': 'declarativeWebRequest.' + typeId} and validates the
  // generated union dictionary against the schema for |typeId|.
  function setupInstance(instance, parameters, typeId) {
    for (var key in parameters) {
      if ($Object.hasOwnProperty(parameters, key)) {
        instance[key] = parameters[key];
      }
    }

    var qualifiedType = 'declarativeWebRequest.' + typeId;
    instance.instanceType = qualifiedType;
    bindingUtil.validateType(qualifiedType, instance);
  }

  // Setup all data types for the declarative webRequest API.
  declarativeWebRequest.RequestMatcher = function(parameters) {
    setupInstance(this, parameters, 'RequestMatcher');
  };
  declarativeWebRequest.CancelRequest = function(parameters) {
    setupInstance(this, parameters, 'CancelRequest');
  };
  declarativeWebRequest.RedirectRequest = function(parameters) {
    setupInstance(this, parameters, 'RedirectRequest');
  };
  declarativeWebRequest.SetRequestHeader = function(parameters) {
    setupInstance(this, parameters, 'SetRequestHeader');
  };
  declarativeWebRequest.RemoveRequestHeader = function(parameters) {
    setupInstance(this, parameters, 'RemoveRequestHeader');
  };
  declarativeWebRequest.AddResponseHeader = function(parameters) {
    setupInstance(this, parameters, 'AddResponseHeader');
  };
  declarativeWebRequest.RemoveResponseHeader = function(parameters) {
    setupInstance(this, parameters, 'RemoveResponseHeader');
  };
  declarativeWebRequest.RedirectToTransparentImage =
      function(parameters) {
    setupInstance(this, parameters, 'RedirectToTransparentImage');
  };
  declarativeWebRequest.RedirectToEmptyDocument = function(parameters) {
    setupInstance(this, parameters, 'RedirectToEmptyDocument');
  };
  declarativeWebRequest.RedirectByRegEx = function(parameters) {
    setupInstance(this, parameters, 'RedirectByRegEx');
  };
  declarativeWebRequest.IgnoreRules = function(parameters) {
    setupInstance(this, parameters, 'IgnoreRules');
  };
  declarativeWebRequest.AddRequestCookie = function(parameters) {
    setupInstance(this, parameters, 'AddRequestCookie');
  };
  declarativeWebRequest.AddResponseCookie = function(parameters) {
    setupInstance(this, parameters, 'AddResponseCookie');
  };
  declarativeWebRequest.EditRequestCookie = function(parameters) {
    setupInstance(this, parameters, 'EditRequestCookie');
  };
  declarativeWebRequest.EditResponseCookie = function(parameters) {
    setupInstance(this, parameters, 'EditResponseCookie');
  };
  declarativeWebRequest.RemoveRequestCookie = function(parameters) {
    setupInstance(this, parameters, 'RemoveRequestCookie');
  };
  declarativeWebRequest.RemoveResponseCookie = function(parameters) {
    setupInstance(this, parameters, 'RemoveResponseCookie');
  };
  declarativeWebRequest.SendMessageToExtension = function(parameters) {
    setupInstance(this, parameters, 'SendMessageToExtension');
  };
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the Display Source API.

var natives = requireNative('display_source');
var logging = requireNative('logging');

var callbacksInfo = {};

function callbackWrapper(callback, method, message) {
  if (callback == undefined)
    return;

  try {
    if (message !== null)
      bindingUtil.setLastError(message);
    callback();
  } finally {
    bindingUtil.clearLastError();
  }
}

function callCompletionCallback(callbackId, error_message) {
  try {
    var callbackInfo = callbacksInfo[callbackId];
    logging.DCHECK(callbackInfo != null);
    callbackWrapper(callbackInfo.callback, callbackInfo.method, error_message);
  } finally {
    delete callbacksInfo[callbackId];
  }
}

apiBridge.registerCustomHook(function(bindingsAPI, extensionId) {
  var apiFunctions = bindingsAPI.apiFunctions;
  apiFunctions.setHandleRequest(
      'startSession', function(sessionInfo, callback) {
        try {
          var callId = natives.StartSession(sessionInfo);
          callbacksInfo[callId] = {
            callback: callback,
            method: 'displaySource.startSession'
          };
        } catch (e) {
          callbackWrapper(callback, 'displaySource.startSession', e.message);
        }
      });
  apiFunctions.setHandleRequest(
      'terminateSession', function(sink_id, callback) {
        try {
          var callId = natives.TerminateSession(sink_id);
          callbacksInfo[callId] = {
            callback: callback,
            method: 'displaySource.terminateSession'
          };
        } catch (e) {
          callbackWrapper(
              callback, 'displaySource.terminateSession', e.message);
        }
      });
});

// Called by C++.
exports.$set('callCompletionCallback', callCompletionCallback);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var fileSystemNatives = requireNative('file_system_natives');
var GetIsolatedFileSystem = fileSystemNatives.GetIsolatedFileSystem;
var GetModuleSystem = requireNative('v8_context').GetModuleSystem;
// TODO(sammc): Don't require extension. See http://crbug.com/235689.
var GetExtensionViews = requireNative('runtime').GetExtensionViews;
var safeCallbackApply = require('uncaught_exception_handler').safeCallbackApply;

var WINDOW = {};
try {
  WINDOW = window;
} catch (e) {
  // Running in SW context.
  // TODO(lazyboy): Synchronous access to background page is not possible from
  // service worker context. Decide what we should do in this case for the class
  // of APIs that require access to background page or window object
}

// For a given |apiName|, generates object with two elements that are used
// in file system relayed APIs:
// * 'bindFileEntryCallback' function that provides mapping between JS objects
//   into actual FileEntry|DirectoryEntry objects.
// * 'entryIdManager' object that implements methods for keeping the tracks of
//   previously saved file entries.
function getFileBindingsForApi(apiName) {
  // Fallback to using the current window if no background page is running.
  var views = GetExtensionViews(-1, -1, 'BACKGROUND');
  // GetExtensionViews() can return null if called from a context without an
  // associated extension.
  var backgroundPage = views && views[0] ? views[0] : WINDOW;
  var backgroundPageModuleSystem = GetModuleSystem(backgroundPage);

  // All windows use the bindFileEntryCallback from the background page so their
  // FileEntry objects have the background page's context as their own. This
  // allows them to be used from other windows (including the background page)
  // after the original window is closed.
  if (WINDOW == backgroundPage) {
    var bindFileEntryCallback = function(functionName, apiFunctions) {
      apiFunctions.setCustomCallback(functionName,
          function(name, request, callback, response) {
        if (callback) {
          if (!response) {
            callback();
            return;
          }

          var entries = [];
          var hasError = false;

          var getEntryError = function(fileError) {
            if (!hasError) {
              hasError = true;
              bindingUtil.runCallbackWithLastError(
                  'Error getting fileEntry, code: ' + fileError.code,
                  callback);
            }
          }

          // Loop through the response entries and asynchronously get the
          // FileEntry for each. We use hasError to ensure that only the first
          // error is reported. Note that an error can occur either during the
          // loop or in the asynchronous error callback to getFile.
          $Array.forEach(response.entries, function(entry) {
            if (hasError)
              return;
            var fileSystemId = entry.fileSystemId;
            var baseName = entry.baseName;
            var id = entry.id;
            var fs = GetIsolatedFileSystem(fileSystemId);

            try {
              var getEntryCallback = function(fileEntry) {
                if (hasError)
                  return;
                entryIdManager.registerEntry(id, fileEntry);
                entries.push(fileEntry);
                // Once all entries are ready, pass them to the callback. In the
                // event of an error, this condition will never be satisfied so
                // the callback will not be called with any entries.
                if (entries.length == response.entries.length) {
                  if (response.multiple) {
                    safeCallbackApply(apiName + '.' + functionName, request,
                                      callback, [entries]);
                  } else {
                    safeCallbackApply(
                        apiName + '.' + functionName, request, callback,
                        [entries[0]]);
                  }
                }
              }
              // TODO(koz): fs.root.getFile() makes a trip to the browser
              // process, but it might be possible avoid that by calling
              // WebDOMFileSystem::createV8Entry().
              if (entry.isDirectory) {
                fs.root.getDirectory(baseName, {}, getEntryCallback,
                                     getEntryError);
              } else {
                fs.root.getFile(baseName, {}, getEntryCallback, getEntryError);
              }
            } catch (e) {
              if (!hasError) {
                hasError = true;
                bindingUtil.runCallbackWithLastError(
                    'Error getting fileEntry: ' + e.stack, callback);
              }
            }
          });
        }
      });
    };
    var entryIdManager = require('entryIdManager');
  } else {
    // Force the fileSystem API to be loaded in the background page. Using
    // backgroundPageModuleSystem.require('fileSystem') is insufficient as
    // requireNative is only allowed while lazily loading an API.
    backgroundPage.chrome.fileSystem;
    var bindFileEntryCallback =
        backgroundPageModuleSystem.require('fileEntryBindingUtil')
            .getFileBindingsForApi(apiName).bindFileEntryCallback;
    var entryIdManager = backgroundPageModuleSystem.require('entryIdManager');
  }
  return {bindFileEntryCallback: bindFileEntryCallback,
          entryIdManager: entryIdManager};
}

function getBindDirectoryEntryCallback() {
  // Get the background page if one exists. Otherwise, default to the current
  // window.
  var views = GetExtensionViews(-1, -1, 'BACKGROUND');
  // GetExtensionViews() can return null if called from a context without an
  // associated extension.
  var backgroundPage = views && views[0] ? views[0] : WINDOW;

  // For packaged apps, all windows use the bindFileEntryCallback from the
  // background page so their FileEntry objects have the background page's
  // context as their own. This allows them to be used from other windows
  // (including the background page) after the original window is closed.
  if (WINDOW == backgroundPage) {
    return function(name, request, callback, response) {
      if (callback) {
        if (!response) {
          callback();
          return;
        }
        var fileSystemId = response.fileSystemId;
        var baseName = response.baseName;
        var fs = GetIsolatedFileSystem(fileSystemId);

        try {
          fs.root.getDirectory(baseName, {}, callback, function(fileError) {
            bindingUtil.runCallbackWithLastError(
                'Error getting Entry, code: ' + fileError.code, callback);
          });
        } catch (e) {
          bindingUtil.runCallbackWithLastError('Error: ' + e.stack, callback);
        }
      }
    }
  } else {
    var backgroundPageModuleSystem = GetModuleSystem(backgroundPage);
    // Force the runtime API to be loaded in the background page. Using
    // backgroundPageModuleSystem.require('runtime') is insufficient as
    // requireNative is only allowed while lazily loading an API.
    backgroundPage.chrome.runtime;
    return backgroundPageModuleSystem.require('fileEntryBindingUtil')
               .getBindDirectoryEntryCallback();
  }
}

exports.$set('getFileBindingsForApi', getFileBindingsForApi);
exports.$set('getBindDirectoryEntryCallback', getBindDirectoryEntryCallback);
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the fileSystem API.

var getFileBindingsForApi =
    require('fileEntryBindingUtil').getFileBindingsForApi;
var fileBindings = getFileBindingsForApi('fileSystem');
var bindFileEntryCallback = fileBindings.bindFileEntryCallback;
var entryIdManager = fileBindings.entryIdManager;
var fileSystemNatives = requireNative('file_system_natives');
var safeCallbackApply = require('uncaught_exception_handler').safeCallbackApply;

apiBridge.registerCustomHook(function(bindingsAPI) {
  var apiFunctions = bindingsAPI.apiFunctions;
  var fileSystem = bindingsAPI.compiledApi;

  function bindFileEntryFunction(functionName) {
    apiFunctions.setUpdateArgumentsPostValidate(
        functionName, function(fileEntry, callback) {
      var fileSystemName = fileEntry.filesystem.name;
      var relativePath = $String.slice(fileEntry.fullPath, 1);
      return [fileSystemName, relativePath, callback];
    });
  }
  $Array.forEach(['getDisplayPath', 'getWritableEntry', 'isWritableEntry'],
                  bindFileEntryFunction);

  $Array.forEach(['getWritableEntry', 'chooseEntry', 'restoreEntry'],
                  function(functionName) {
    bindFileEntryCallback(functionName, apiFunctions);
  });

  apiFunctions.setHandleRequest('retainEntry', function(fileEntry) {
    var id = entryIdManager.getEntryId(fileEntry);
    if (!id)
      return '';
    var fileSystemName = fileEntry.filesystem.name;
    var relativePath = $String.slice(fileEntry.fullPath, 1);

    bindingUtil.sendRequest(
        'fileSystem.retainEntry', [id, fileSystemName, relativePath],
        undefined);
    return id;
  });

  apiFunctions.setHandleRequest('isRestorable',
      function(id, callback) {
    var savedEntry = entryIdManager.getEntryById(id);
    if (savedEntry) {
      safeCallbackApply('fileSystem.isRestorable', {}, callback, [true]);
    } else {
      bindingUtil.sendRequest('fileSystem.isRestorable', [id, callback],
                              undefined);
    }
  });

  apiFunctions.setUpdateArgumentsPostValidate('restoreEntry',
      function(id, callback) {
    var savedEntry = entryIdManager.getEntryById(id);
    if (savedEntry) {
      // We already have a file entry for this id so pass it to the callback and
      // send a request to the browser to move it to the back of the LRU.
      safeCallbackApply('fileSystem.restoreEntry', {}, callback, [savedEntry]);
      return [id, false, null];
    } else {
      // Ask the browser process for a new file entry for this id, to be passed
      // to |callback|.
      return [id, true, callback];
    }
  });

  apiFunctions.setCustomCallback('requestFileSystem',
      function(name, request, callback, response) {
    var fileSystem;
    if (response && response.file_system_id) {
      fileSystem = fileSystemNatives.GetIsolatedFileSystem(
          response.file_system_id, response.file_system_path);
    }
    safeCallbackApply('fileSystem.requestFileSystem', request, callback,
                      [fileSystem]);
  });

  // TODO(benwells): Remove these deprecated versions of the functions.
  fileSystem.getWritableFileEntry = function() {
    console.log("chrome.fileSystem.getWritableFileEntry is deprecated");
    console.log("Please use chrome.fileSystem.getWritableEntry instead");
    $Function.apply(fileSystem.getWritableEntry, this, arguments);
  };

  fileSystem.isWritableFileEntry = function() {
    console.log("chrome.fileSystem.isWritableFileEntry is deprecated");
    console.log("Please use chrome.fileSystem.isWritableEntry instead");
    $Function.apply(fileSystem.isWritableEntry, this, arguments);
  };

  fileSystem.chooseFile = function() {
    console.log("chrome.fileSystem.chooseFile is deprecated");
    console.log("Please use chrome.fileSystem.chooseEntry instead");
    $Function.apply(fileSystem.chooseEntry, this, arguments);
  };
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// -----------------------------------------------------------------------------
// NOTE: If you change this file you need to touch renderer_resources.grd to
// have your change take effect.
// -----------------------------------------------------------------------------

// Partial implementation of the Greasemonkey API, see:
// http://wiki.greasespot.net/Greasemonkey_Manual:APIs

function GM_addStyle(css) {
  var parent = document.getElementsByTagName("head")[0];
  if (!parent) {
    parent = document.documentElement;
  }
  var style = document.createElement("style");
  style.type = "text/css";
  var textNode = document.createTextNode(css);
  style.appendChild(textNode);
  parent.appendChild(style);
}

function GM_xmlhttpRequest(details) {
  function setupEvent(xhr, url, eventName, callback) {
    xhr[eventName] = function () {
      var isComplete = xhr.readyState == 4;
      var responseState = {
        responseText: xhr.responseText,
        readyState: xhr.readyState,
        responseHeaders: isComplete ? xhr.getAllResponseHeaders() : "",
        status: isComplete ? xhr.status : 0,
        statusText: isComplete ? xhr.statusText : "",
        finalUrl: isComplete ? url : ""
      };
      callback(responseState);
    };
  }

  var xhr = new XMLHttpRequest();
  var eventNames = ["onload", "onerror", "onreadystatechange"];
  for (var i = 0; i < eventNames.length; i++ ) {
    var eventName = eventNames[i];
    if (eventName in details) {
      setupEvent(xhr, details.url, eventName, details[eventName]);
    }
  }

  xhr.open(details.method, details.url);

  if (details.overrideMimeType) {
    xhr.overrideMimeType(details.overrideMimeType);
  }
  if (details.headers) {
    for (var header in details.headers) {
      xhr.setRequestHeader(header, details.headers[header]);
    }
  }
  xhr.send(details.data ? details.data : null);
}

function GM_openInTab(url) {
  window.open(url, "");
}

function GM_log(message) {
  window.console.log(message);
}

(function() {
  function generateGreasemonkeyStub(name) {
    return function() {
      console.log("%s is not supported.", name);
    };
  }

  var apis = ["GM_getValue", "GM_setValue", "GM_registerMenuCommand"];
  for (var i = 0, api; api = apis[i]; i++) {
    window[api] = generateGreasemonkeyStub(api);
  }
})();
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Custom bindings for the mojoPrivate API.
 */

apiBridge.registerCustomHook(function(bindingsAPI) {
  let apiFunctions = bindingsAPI.apiFunctions;

  apiFunctions.setHandleRequest('requireAsync', function(moduleName) {
    return Promise.resolve(require(moduleName).returnValue);
  });
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the Permissions API.

function maybeConvertToObject(str) {
  var parts = $String.split(str, '|');
  if (parts.length != 2)
    return str;

  var ret = {};
  ret[parts[0]] = $JSON.parse(parts[1]);
  return ret;
}

function massager(args, dispatch) {
  // Convert complex permissions back to objects for events.
  for (var i = 0; i < args[0].permissions.length; ++i)
    args[0].permissions[i] = maybeConvertToObject(args[0].permissions[i]);
  dispatch(args);
}

bindingUtil.registerEventArgumentMassager('permissions.onAdded', massager);
bindingUtil.registerEventArgumentMassager('permissions.onRemoved', massager);

// These custom binding are only necessary because it is not currently
// possible to have a union of types as the type of the items in an array.
// Once that is fixed, this entire file should go away.
// See,
// https://code.google.com/p/chromium/issues/detail?id=162044
// https://code.google.com/p/chromium/issues/detail?id=162042
// TODO(bryeung): delete this file.
apiBridge.registerCustomHook(function(api) {
  var apiFunctions = api.apiFunctions;
  var permissions = api.compiledApi;

  function convertObjectPermissionsToStrings() {
    if (arguments.length < 1)
      return arguments;

    var args = arguments[0].permissions;
    if (!args)
      return arguments;

    for (var i = 0; i < args.length; ++i) {
      if (typeof args[i] == 'object') {
        var a = args[i];
        var keys = $Object.keys(a);
        if (keys.length != 1) {
          throw new Error('Too many keys in object-style permission.');
        }
        arguments[0].permissions[i] =
            keys[0] + '|' + $JSON.stringify(a[keys[0]]);
      }
    }

    return arguments;
  }

  // Convert complex permissions to strings so they validate against the schema
  apiFunctions.setUpdateArgumentsPreValidate(
      'contains', convertObjectPermissionsToStrings);
  apiFunctions.setUpdateArgumentsPreValidate(
      'remove', convertObjectPermissionsToStrings);
  apiFunctions.setUpdateArgumentsPreValidate(
      'request', convertObjectPermissionsToStrings);

  // Convert complex permissions back to objects
  apiFunctions.setCustomCallback('getAll',
      function(name, request, callback, response) {
        for (var i = 0; i < response.permissions.length; i += 1) {
          response.permissions[i] =
              maybeConvertToObject(response.permissions[i]);
        }

        // Since the schema says Permissions.permissions contains strings and
        // not objects, validation will fail after the for-loop above.  This
        // skips validation and calls the callback directly.
        if (callback)
          callback(response);
      });
});
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var printerProviderInternal = getInternalApi('printerProviderInternal');
var blobNatives = requireNative('blob_natives');

var printerProviderSchema =
    requireNative('schema_registry').GetSchema('printerProvider')

var utils = require('utils');

// Custom bindings for chrome.printerProvider API.
// The bindings are used to implement callbacks for the API events. Internally
// each event is passed requestId argument used to identify the callback
// associated with the event. This argument is massaged out from the event
// arguments before dispatching the event to consumers. A callback is appended
// to the event arguments. The callback wraps an appropriate
// chrome.printerProviderInternal API function that is used to report the event
// result from the extension. The function is passed requestId and values
// provided by the extension. It validates that the values provided by the
// extension match chrome.printerProvider event callback schemas. It also
// ensures that a callback is run at most once. In case there is an exception
// during event dispatching, the chrome.printerProviderInternal function
// is called with a default error value.
//

// Handles a chrome.printerProvider event as described in the file comment.
// |eventName|: The event name.
// |prepareArgsForDispatch|: Function called before dispatching the event to
//     the extension. It's called with original event |args| list and callback
//     that should be called when the |args| are ready for dispatch. The
//     callbacks should report whether the argument preparation was successful.
//     The function should not change the first argument, which contains the
//     request id.
// |resultreporter|: The function that should be called to report event result.
//     One of chrome.printerProviderInternal API functions.
function handleEvent(eventName, prepareArgsForDispatch, resultReporter) {
  var eventSchema =
      utils.lookup(printerProviderSchema.events, 'name', eventName);
  var callbackSchema =
      utils.lookup(eventSchema.parameters, 'type', 'function').parameters;
  var fullEventName = 'printerProvider.' + eventName;

  bindingUtil.addCustomSignature(fullEventName, callbackSchema);

  bindingUtil.registerEventArgumentMassager(fullEventName,
                                            function(args, dispatch) {
    var responded = false;

    // Function provided to the extension as the event callback argument.
    // It makes sure that the event result hasn't previously been returned
    // and that the provided result matches the callback schema. In case of
    // an error it throws an exception.
    var reportResult = function(result) {
      if (responded)
        throw new Error('Event callback must not be called more than once.');

      var finalResult = null;
      try {
        // throws on failure
        bindingUtil.validateCustomSignature(fullEventName, [result]);
        finalResult = result;
      } finally {
        responded = true;
        resultReporter(args[0] /* requestId */, finalResult);
      }
    };

    prepareArgsForDispatch(args, function(success) {
      if (!success) {
        // Do not throw an exception since the extension should not yet be
        // aware of the event.
        resultReporter(args[0] /* requestId */, null);
        return;
      }
      dispatch(args.slice(1).concat(reportResult));
    });
  });
}

// Sets up printJob.document property for a print request.
function createPrintRequestBlobArguments(args, callback) {
  printerProviderInternal.getPrintData(args[0] /* requestId */,
                                       function(blobInfo) {
    if (chrome.runtime.lastError) {
      callback(false);
      return;
    }

    // |args[1]| is printJob.
    args[1].document = blobNatives.TakeBrowserProcessBlob(
        blobInfo.blobUuid, blobInfo.type, blobInfo.size);
    callback(true);
  });
}

handleEvent('onGetPrintersRequested',
            function(args, callback) { callback(true); },
            printerProviderInternal.reportPrinters);

handleEvent('onGetCapabilityRequested',
            function(args, callback) { callback(true); },
            printerProviderInternal.reportPrinterCapability);

handleEvent('onPrintRequested',
            createPrintRequestBlobArguments,
            printerProviderInternal.reportPrintResult);

handleEvent('onGetUsbPrinterInfoRequested',
            function(args, callback) { callback(true); },
            printerProviderInternal.reportUsbPrinterInfo);
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This function is returned to WillEvaluateServiceWorkerOnWorkerThread
// then executed, passing in dependencies as function arguments.
//
// |backgroundUrl| is the URL of the extension's background page.
// |wakeEventPage| is a function that wakes up the current extension's event
// page, then runs its callback on completion or failure.
// |logging| is an object equivalent to a subset of base/debug/logging.h, with
// CHECK/DCHECK/etc.
(function(backgroundUrl, wakeEventPage, logging) {
  'use strict';
  self.chrome = self.chrome || {};
  self.chrome.runtime = self.chrome.runtime || {};

  // Returns a Promise that resolves to the background page's client, or null
  // if there is no background client.
  function findBackgroundClient() {
    return self.clients.matchAll({
      includeUncontrolled: true,
      type: 'window'
    }).then(function(clients) {
      return clients.find(function(client) {
        return client.url == backgroundUrl;
      });
    });
  }

  // Returns a Promise wrapper around wakeEventPage, that resolves on success,
  // or rejects on failure.
  function makeWakeEventPagePromise() {
    return new Promise(function(resolve, reject) {
      wakeEventPage(function(success) {
        if (success)
          resolve();
        else
          reject('Failed to start background client "' + backgroundUrl + '"');
      });
    });
  }

  // The chrome.runtime.getBackgroundClient function is documented in
  // runtime.json. It returns a Promise that resolves to the background page's
  // client, or is rejected if there is no background client or if the
  // background client failed to wake.
  self.chrome.runtime.getBackgroundClient = function() {
    return findBackgroundClient().then(function(client) {
      if (client) {
        // Background client is already awake, or it was persistent.
        return client;
      }

      // Event page needs to be woken.
      return makeWakeEventPagePromise().then(function() {
        return findBackgroundClient();
      }).then(function(client) {
        if (!client) {
          return Promise.reject(
            'Background client "' + backgroundUrl + '" not found');
        }
        return client;
      });
    });
  };
});
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the webRequest API.

if (!apiBridge) {
  var binding = require('binding').Binding.create('webRequest');
  var webRequestEvent = require('webRequestEvent').WebRequestEvent;
  binding.registerCustomEvent(webRequestEvent);
  exports.$set('binding', binding.generate());
}
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var CHECK = requireNative('logging').CHECK;
var idGeneratorNatives = requireNative('id_generator');
var utils = require('utils');
var webRequestInternal = getInternalApi('webRequestInternal');

function getUniqueSubEventName(eventName) {
  return eventName + '/' + idGeneratorNatives.GetNextId();
}

// WebRequestEventImpl object. This is used for special webRequest events
// with extra parameters. Each invocation of addListener creates a new named
// sub-event. That sub-event is associated with the extra parameters in the
// browser process, so that only it is dispatched when the main event occurs
// matching the extra parameters.
// Note: this is not used for the onActionIgnored event.
//
// Example:
//   chrome.webRequest.onBeforeRequest.addListener(
//       callback, {urls: 'http://*.google.com/*'});
//   ^ callback will only be called for onBeforeRequests matching the filter.
function WebRequestEventImpl(eventName, opt_argSchemas, opt_extraArgSchemas,
                             opt_eventOptions, opt_webViewInstanceId) {
  if (typeof eventName != 'string')
    throw new Error('chrome.WebRequestEvent requires an event name.');

  bindingUtil.addCustomSignature(eventName, opt_extraArgSchemas);

  this.eventName = eventName;
  this.argSchemas = opt_argSchemas;
  this.extraArgSchemas = opt_extraArgSchemas;
  this.webViewInstanceId = opt_webViewInstanceId || 0;
  this.subEvents = [];
}
$Object.setPrototypeOf(WebRequestEventImpl.prototype, null);

// Test if the given callback is registered for this event.
WebRequestEventImpl.prototype.hasListener = function(cb) {
  return this.findListener_(cb) > -1;
};

// Test if any callbacks are registered fur thus event.
WebRequestEventImpl.prototype.hasListeners = function() {
  return this.subEvents.length > 0;
};

// Registers a callback to be called when this event is dispatched. If
// opt_filter is specified, then the callback is only called for events that
// match the given filters. If opt_extraInfo is specified, the given optional
// info is sent to the callback.
WebRequestEventImpl.prototype.addListener =
    function(cb, opt_filter, opt_extraInfo) {
  // NOTE(benjhayden) New APIs should not use this subEventName trick! It does
  // not play well with event pages. See downloads.onDeterminingFilename and
  // ExtensionDownloadsEventRouter for an alternative approach.
  var subEventName = getUniqueSubEventName(this.eventName);
  // Note: this could fail to validate, in which case we would not add the
  // subEvent listener.
  bindingUtil.validateCustomSignature(this.eventName,
                                      $Array.slice(arguments, 1));
  webRequestInternal.addEventListener(
      cb, opt_filter, opt_extraInfo, this.eventName, subEventName,
      this.webViewInstanceId);

  var supportsFilters = false;
  var supportsLazyListeners = true;
  var subEvent =
      bindingUtil.createCustomEvent(subEventName, supportsFilters,
                                    supportsLazyListeners);

  var subEventCallback = cb;
  if (opt_extraInfo && $Array.indexOf(opt_extraInfo, 'blocking') >= 0) {
    var eventName = this.eventName;
    var webViewInstanceId = this.webViewInstanceId;
    subEventCallback = function() {
      var requestId = arguments[0].requestId;
      try {
        var result = $Function.apply(cb, null, arguments);
        webRequestInternal.eventHandled(
            eventName, subEventName, requestId, webViewInstanceId, result);
      } catch (e) {
        webRequestInternal.eventHandled(
            eventName, subEventName, requestId, webViewInstanceId);
        throw e;
      }
    };
  } else if (
      opt_extraInfo && $Array.indexOf(opt_extraInfo, 'asyncBlocking') >= 0) {
    var eventName = this.eventName;
    var webViewInstanceId = this.webViewInstanceId;
    subEventCallback = function() {
      var details = arguments[0];
      var requestId = details.requestId;
      var handledCallback = function(response) {
        webRequestInternal.eventHandled(
            eventName, subEventName, requestId, webViewInstanceId, response);
      };
      $Function.apply(cb, null, [details, handledCallback]);
    };
  }
  $Array.push(this.subEvents,
      {subEvent: subEvent, callback: cb, subEventCallback: subEventCallback});
  subEvent.addListener(subEventCallback);
};

// Unregisters a callback.
WebRequestEventImpl.prototype.removeListener = function(cb) {
  var idx;
  while ((idx = this.findListener_(cb)) >= 0) {
    var e = this.subEvents[idx];
    e.subEvent.removeListener(e.subEventCallback);
    if (e.subEvent.hasListeners()) {
      console.error(
          'Internal error: webRequest subEvent has orphaned listeners.');
    }
    $Array.splice(this.subEvents, idx, 1);
  }
};

WebRequestEventImpl.prototype.findListener_ = function(cb) {
  for (var i in this.subEvents) {
    var e = this.subEvents[i];
    if (e.callback === cb) {
      if (e.subEvent.hasListener(e.subEventCallback))
        return i;
      console.error('Internal error: webRequest subEvent has no callback.');
    }
  }

  return -1;
};

WebRequestEventImpl.prototype.addRules = function(rules, opt_cb) {
  throw new Error('This event does not support rules.');
};

WebRequestEventImpl.prototype.removeRules =
    function(ruleIdentifiers, opt_cb) {
  throw new Error('This event does not support rules.');
};

WebRequestEventImpl.prototype.getRules = function(ruleIdentifiers, cb) {
  throw new Error('This event does not support rules.');
};

function WebRequestEvent() {
  privates(WebRequestEvent).constructPrivate(this, arguments);
}

// Our util code requires we construct a new WebRequestEvent via a call to
// 'new WebRequestEvent', which wouldn't work well with calling a v8::Function.
// Provide a wrapper for native bindings to call into.
function createWebRequestEvent(eventName, opt_argSchemas, opt_extraArgSchemas,
                               opt_eventOptions, opt_webViewInstanceId) {
  return new WebRequestEvent(eventName, opt_argSchemas, opt_extraArgSchemas,
                             opt_eventOptions, opt_webViewInstanceId);
}

utils.expose(WebRequestEvent, WebRequestEventImpl, {
  functions: [
    'hasListener',
    'hasListeners',
    'addListener',
    'removeListener',
    'addRules',
    'removeRules',
    'getRules',
  ],
});

exports.$set('WebRequestEvent', WebRequestEvent);
exports.$set('createWebRequestEvent', createWebRequestEvent);
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Custom binding for the webViewRequest API.

var declarativeWebRequestSchema =
    requireNative('schema_registry').GetSchema('declarativeWebRequest');

apiBridge.registerCustomHook(function(api) {
  var webViewRequest = api.compiledApi;

  // Helper function for the constructor of concrete datatypes of the
  // declarative webRequest API.
  // Makes sure that |this| contains the union of parameters and
  // {'instanceType': 'declarativeWebRequest.' + typeId} and validates the
  // generated union dictionary against the schema for |typeId|.
  function setupInstance(instance, parameters, typeId) {
    for (var key in parameters) {
      if ($Object.hasOwnProperty(parameters, key)) {
        instance[key] = parameters[key];
      }
    }

    var qualifiedType = 'declarativeWebRequest.' + typeId;
    instance.instanceType = qualifiedType;
    bindingUtil.validateType(qualifiedType, instance);
  }

  // Setup all data types for the declarative webRequest API from the schema.
  for (var i = 0; i < declarativeWebRequestSchema.types.length; ++i) {
    var typeSchema = declarativeWebRequestSchema.types[i];
    var typeId = $String.replace(typeSchema.id, 'declarativeWebRequest.', '');
    var action = function(typeId) {
      return function(parameters) {
        setupInstance(this, parameters, typeId);
      };
    }(typeId);
    webViewRequest[typeId] = action;
  }
});
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

var logging = requireNative('logging');

/**
 * Returns a function that logs a 'not available' error to the console and
 * returns undefined.
 *
 * @param {string} messagePrefix text to prepend to the exception message.
 */
function generateDisabledMethodStub(messagePrefix, opt_messageSuffix) {
  var message = messagePrefix + ' is not available in packaged apps.';
  if (opt_messageSuffix) message = message + ' ' + opt_messageSuffix;
  return function() {
    console.error(message);
    return;
  };
}

/**
 * Returns a function that throws a 'not available' error.
 *
 * @param {string} messagePrefix text to prepend to the exception message.
 */
function generateThrowingMethodStub(messagePrefix, opt_messageSuffix) {
  var message = messagePrefix + ' is not available in packaged apps.';
  if (opt_messageSuffix) message = message + ' ' + opt_messageSuffix;
  return function() {
    throw new Error(message);
  };
}

/**
 * Replaces the given methods of the passed in object with stubs that log
 * 'not available' errors to the console and return undefined.
 *
 * This should be used on methods attached via non-configurable properties,
 * such as window.alert. disableGetters should be used when possible, because
 * it is friendlier towards feature detection.
 *
 * In most cases, the useThrowingStubs should be false, so the stubs used to
 * replace the methods log an error to the console, but allow the calling code
 * to continue. We shouldn't break library code that uses feature detection
 * responsibly, such as:
 *     if(window.confirm) {
 *       var result = window.confirm('Are you sure you want to delete ...?');
 *       ...
 *     }
 *
 * useThrowingStubs should only be true for methods that are deprecated in the
 * Web platform, and should not be used by a responsible library, even in
 * conjunction with feature detection. A great example is document.write(), as
 * the HTML5 specification recommends against using it, and says that its
 * behavior is unreliable. No reasonable library code should ever use it.
 * HTML5 spec: http://www.w3.org/TR/html5/dom.html#dom-document-write
 *
 * @param {Object} object The object with methods to disable. The prototype is
 *     preferred.
 * @param {string} objectName The display name to use in the error message
 *     thrown by the stub (this is the name that the object is commonly referred
 *     to by web developers, e.g. "document" instead of "HTMLDocument").
 * @param {Array<string>} methodNames names of methods to disable.
 * @param {Boolean} useThrowingStubs if true, the replaced methods will throw
 *     an error instead of silently returning undefined
 */
function disableMethods(object, objectName, methodNames, useThrowingStubs) {
  $Array.forEach(methodNames, function(methodName) {
    logging.DCHECK($Object.getOwnPropertyDescriptor(object, methodName),
                   objectName + ': ' + methodName);
    var messagePrefix = objectName + '.' + methodName + '()';
    $Object.defineProperty(object, methodName, {
      configurable: false,
      enumerable: false,
      value: useThrowingStubs ?
                 generateThrowingMethodStub(messagePrefix) :
                 generateDisabledMethodStub(messagePrefix)
    });
  });
}

/**
 * Replaces the given properties of the passed in object with stubs that log
 * 'not available' warnings to the console and return undefined when gotten. If
 * a property's setter is later invoked, the getter and setter are restored to
 * default behaviors.
 *
 * @param {Object} object The object with properties to disable. The prototype
 *     is preferred.
 * @param {string} objectName The display name to use in the error message
 *     thrown by the getter stub (this is the name that the object is commonly
 *     referred to by web developers, e.g. "document" instead of
 *     "HTMLDocument").
 * @param {Array<string>} propertyNames names of properties to disable.
 * @param {?string=} opt_messageSuffix An optional suffix for the message.
 * @param {boolean=} opt_ignoreMissingProperty True if we allow disabling
 *     getters for non-existent properties.
 */
function disableGetters(object, objectName, propertyNames, opt_messageSuffix,
                        opt_ignoreMissingProperty) {
  $Array.forEach(propertyNames, function(propertyName) {
    logging.DCHECK(opt_ignoreMissingProperty ||
                       $Object.getOwnPropertyDescriptor(object, propertyName),
                   objectName + ': ' + propertyName);
    var stub = generateDisabledMethodStub(objectName + '.' + propertyName,
                                          opt_messageSuffix);
    stub._is_platform_app_disabled_getter = true;
    $Object.defineProperty(object, propertyName, {
      configurable: true,
      enumerable: false,
      get: stub,
      set: function(value) {
        var descriptor = $Object.getOwnPropertyDescriptor(this, propertyName);
        if (!descriptor || !descriptor.get ||
            descriptor.get._is_platform_app_disabled_getter) {
          // The stub getter is still defined.  Blow-away the property to
          // restore default getter/setter behaviors and re-create it with the
          // given value.
          delete this[propertyName];
          this[propertyName] = value;
        } else {
          // Do nothing.  If some custom getter (not ours) has been defined,
          // there would be no way to read back the value stored by a default
          // setter. Also, the only way to clear a custom getter is to first
          // delete the property.  Therefore, the value we have here should
          // just go into a black hole.
        }
      }
    });
  });
}

/**
 * Replaces the given properties of the passed in object with stubs that log
 * 'not available' warnings to the console when set.
 *
 * @param {Object} object The object with properties to disable. The prototype
 *     is preferred.
 * @param {string} objectName The display name to use in the error message
 *     thrown by the setter stub (this is the name that the object is commonly
 *     referred to by web developers, e.g. "document" instead of
 *     "HTMLDocument").
 * @param {Array<string>} propertyNames names of properties to disable.
 */
function disableSetters(object, objectName, propertyNames, opt_messageSuffix) {
  $Array.forEach(propertyNames, function(propertyName) {
    logging.DCHECK($Object.getOwnPropertyDescriptor(object, propertyName),
                   objectName + ': ' + propertyName);
    var stub = generateDisabledMethodStub(objectName + '.' + propertyName,
                                          opt_messageSuffix);
    $Object.defineProperty(object, propertyName, {
      configurable: false,
      enumerable: false,
      get: function() {
        return;
      },
      set: stub
    });
  });
}

// Disable benign Document methods.
disableMethods(Document.prototype, 'document', ['open', 'close']);
disableMethods(Document.prototype, 'document', ['clear']);

// Replace evil Document methods with exception-throwing stubs.
disableMethods(Document.prototype, 'document', ['write', 'writeln'], true);

// Disable history.
Object.defineProperty(window, "history", { value: {} });
// Note: we just blew away the history object, so we need to ignore the fact
// that these properties aren't defined on the object.
disableGetters(window.history, 'history',
    ['back', 'forward', 'go', 'length', 'pushState', 'replaceState', 'state'],
    null, true);

// Disable find.
disableMethods(window, 'window', ['find']);

// Disable modal dialogs. Shell windows disable these anyway, but it's nice to
// warn.
disableMethods(window, 'window', ['alert', 'confirm', 'prompt']);

// Disable window.*bar.
disableGetters(window, 'window',
    ['locationbar', 'menubar', 'personalbar', 'scrollbars', 'statusbar',
     'toolbar']);

// Disable window.localStorage.
// Sometimes DOM security policy prevents us from doing this (e.g. for data:
// URLs) so wrap in try-catch.
try {
  disableGetters(window, 'window',
      ['localStorage'],
      'Use chrome.storage.local instead.');
} catch (e) {}

function disableDeprectatedDocumentFunction() {
  // Deprecated document properties from
  // https://developer.mozilla.org/en/DOM/document.
  // Disable document.all so that platform apps can not access.
  delete Document.prototype.all
  disableGetters(document, 'document',
      ['alinkColor', 'all', 'bgColor', 'fgColor', 'linkColor', 'vlinkColor'],
      null, true);
}

// The new document may or may not already have been created when this script is
// executed. In the second case, the current document is still the initial empty
// document. There are no way to know whether 'document' refers to the old one
// or the new one. That's why, the deprecated document properties needs to be
// disabled on the current document and potentially on the new one, if it gets
// created.
disableDeprectatedDocumentFunction();
window.addEventListener('readystatechange', function(event) {
  if (document.readyState == 'loading')
    disableDeprectatedDocumentFunction();
}, true);

// Disable onunload, onbeforeunload.
disableSetters(window, 'window', ['onbeforeunload', 'onunload']);
var eventTargetAddEventListener = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function(type) {
  var args = $Array.slice(arguments);
  // Note: Force conversion to a string in order to catch any funny attempts
  // to pass in something that evals to 'unload' but wouldn't === 'unload'.
  var type = (args[0] += '');
  if (type === 'unload' || type === 'beforeunload')
    generateDisabledMethodStub(type)();
  else
    return $Function.apply(eventTargetAddEventListener, this, args);
};
/*
 * Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * This stylesheet is used to apply Chrome system fonts to all extension pages.
 */

body {
  font-family: $FONTFAMILY;
  font-size: $FONTSIZE;
}
/*
 * Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * A style sheet for Chrome apps.
 */

@namespace "http://www.w3.org/1999/xhtml";


body {
  -webkit-user-select: none;
  cursor: default;
  font-family: $FONTFAMILY;
  font-size: $FONTSIZE;
}


webview, appview {
  display: inline-block;
  width: 300px;
  height: 300px;
}

html, body {
  overflow: hidden;
}

img, a {
  -webkit-user-drag: none;
}

[contenteditable], input {
  -webkit-user-select: auto;
}

/*
 * Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 *
 * This stylesheet is used to apply Chrome styles to extension pages that opt in
 * to using them.
 *
 * These styles have been copied from ui/webui/resources/css/chrome_shared.css
 * and ui/webui/resources/css/widgets.css *with CSS class logic removed*, so
 * that it's as close to a user-agent stylesheet as possible.
 *
 * For example, extensions shouldn't be able to set a .link-button class and
 * have it do anything.
 *
 * Other than that, keep this file and chrome_shared.css/widgets.cc in sync as
 * much as possible.
 */

body {
  color: #333;
  cursor: default;
  /* Note that the correct font-family and font-size are set in
   * extension_fonts.css. */
  /* This top margin of 14px matches the top padding on the h1 element on
   * overlays (see the ".overlay .page h1" selector in overlay.css), which
   * every dialogue has.
   *
   * Similarly, the bottom 14px margin matches the bottom padding of the area
   * which hosts the buttons (see the ".overlay .page * .action-area" selector
   * in overlay.css).
   *
   * Both have a padding left/right of 17px.
   *
   * Note that we're putting this here in the Extension content, rather than
   * the WebUI element which contains the content, so that scrollbars in the
   * Extension content don't get a 6px margin, which looks quite odd.
   */
  margin: 14px 17px;
}

p {
  line-height: 1.8em;
}

h1,
h2,
h3 {
  -webkit-user-select: none;
  font-weight: normal;
  /* Makes the vertical size of the text the same for all fonts. */
  line-height: 1;
}

h1 {
  font-size: 1.5em;
}

h2 {
  font-size: 1.3em;
  margin-bottom: 0.4em;
}

h3 {
  color: black;
  font-size: 1.2em;
  margin-bottom: 0.8em;
}

a {
  color: rgb(17, 85, 204);
  text-decoration: underline;
}

a:active {
  color: rgb(5, 37, 119);
}

/* Default state **************************************************************/

:-webkit-any(button,
             input[type='button'],
             input[type='submit']),
select,
input[type='checkbox'],
input[type='radio'] {
  -webkit-appearance: none;
  -webkit-user-select: none;
  background-image: linear-gradient(#ededed, #ededed 38%, #dedede);
  border: 1px solid rgba(0, 0, 0, 0.25);
  border-radius: 2px;
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.08),
      inset 0 1px 2px rgba(255, 255, 255, 0.75);
  color: #444;
  font: inherit;
  margin: 0 1px 0 0;
  outline: none;
  text-shadow: 0 1px 0 rgb(240, 240, 240);
}

:-webkit-any(button,
             input[type='button'],
             input[type='submit']),
select {
  min-height: 2em;
  min-width: 4em;

}

:-webkit-any(button,
             input[type='button'],
             input[type='submit']) {
  -webkit-padding-end: 10px;
  -webkit-padding-start: 10px;
}

select {
  -webkit-appearance: none;
  -webkit-padding-end: 20px;
  -webkit-padding-start: 6px;
  /* OVERRIDE */
  background-image: -webkit-image-set(url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAICAQAAACxSAwfAAAAUUlEQVR4AWP4TxREZkYxpKHAKKzKEhOZvyG4zN8SE7Eq+6+wYCHbTwiT7eeChf8VsFsKVQhTxIDDbVCFfF8ginApgyp82wRShEcZVJIVzoJDAGqrgIJGRl20AAAAAElFTkSuQmCC) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAQCAQAAAA/1a6rAAAAQUlEQVR4Xu3MsQnAMBAEMI1+myf9gw0+3ASCenmu+mQn2yGn3S4Mp906DEW3CEPfzTD03QxD380w3OmIUHe9v+u9QwAt93yns5cAAAAASUVORK5CYII=) 2x),
      linear-gradient(#ededed, #ededed 38%, #dedede);
  background-position: right center;
  background-repeat: no-repeat;
}

html[dir='rtl'] select {
  background-position: center left;
}

input[type='checkbox'] {
  height: 13px;
  position: relative;
  vertical-align: middle;
  width: 13px;
}

input[type='radio'] {
  /* OVERRIDE */
  border-radius: 100%;
  height: 15px;
  position: relative;
  vertical-align: middle;
  width: 15px;
}

/* TODO(estade): add more types here? */
input[type='number'],
input[type='password'],
input[type='search'],
input[type='text'],
input[type='url'],
input:not([type]),
textarea {
  border: 1px solid #bfbfbf;
  border-radius: 2px;
  box-sizing: border-box;
  color: #444;
  font: inherit;
  margin: 0;
  /* Use min-height to accommodate addditional padding for touch as needed. */
  min-height: 2em;
  padding: 3px;
  outline: none;

}

input[type='search'] {
  -webkit-appearance: textfield;
  /* NOTE: Keep a relatively high min-width for this so we don't obscure the end
   * of the default text in relatively spacious languages (i.e. German). */
  min-width: 160px;
}

/* Checked ********************************************************************/

input[type='checkbox']:checked::before {
  -webkit-user-select: none;
  background-image: -webkit-image-set(url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAQAAAADpb+tAAAAZ0lEQVR4AWNAA2xAiAXEM8xiMEAXVGJYz7AZCFEkmBi6wYKtEC4/gxqY9gILrmYQhwiXMWxkiAVyVoOFfSCCpkAmCK4Fk+1QA4GqekECUAMkka0KY9gIFvZDd5oawwyGBqACdIDqOwAQzBnTWnnU+gAAAABJRU5ErkJggg==) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAQAAABuvaSwAAAAvElEQVR4XrXPMUrDYBzG4UeRZnAQnFxq3XT3AsVABm8QPIHQIeAJuoqb2s1BcHAIin4HVLqEvx9NQgb5rc/wvn4mNBUbqlKDcezCp6Qexxx7lbapx/CBe6mrHsYrKXQ7hKtIre1nOD/W9eiQiK80inis680JEc+1kien+TEfzom4sJG2aZXxmG9LIqaRerohx6V2J72zl2NY2OTUgxm7MEU25sURfZg4590Zw5iFZ8mXS0ZwN+eaPjyh/8O/H7bzPJ5NOo0AAAAASUVORK5CYII=) 2x);
  background-size: 100% 100%;
  content: '';
  display: block;
  height: 100%;
  width: 100%;
}

input[type='radio']:checked::before {
  background-color: #666;
  border-radius: 100%;
  bottom: 3px;
  content: '';
  display: block;
  left: 3px;
  position: absolute;
  right: 3px;
  top: 3px;
}

/* Hover **********************************************************************/

:enabled:hover:-webkit-any(
    select,
    input[type='checkbox'],
    input[type='radio'],
    :-webkit-any(
        button,
        input[type='button'],
        input[type='submit'])) {
  background-image: linear-gradient(#f0f0f0, #f0f0f0 38%, #e0e0e0);
  border-color: rgba(0, 0, 0, 0.3);
  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.12),
      inset 0 1px 2px rgba(255, 255, 255, 0.95);
  color: black;
}

:enabled:hover:-webkit-any(select) {
  /* OVERRIDE */
  background-image: -webkit-image-set(url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAICAQAAACxSAwfAAAAUUlEQVR4AWP4TxREZkYxpKHAKKzKEhOZvyG4zN8SE7Eq+6+wYCHbTwiT7eeChf8VsFsKVQhTxIDDbVCFfF8ginApgyp82wRShEcZVJIVzoJDAGqrgIJGRl20AAAAAElFTkSuQmCC) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAQCAQAAAA/1a6rAAAAQUlEQVR4Xu3MsQnAMBAEMI1+myf9gw0+3ASCenmu+mQn2yGn3S4Mp906DEW3CEPfzTD03QxD380w3OmIUHe9v+u9QwAt93yns5cAAAAASUVORK5CYII=) 2x),
      linear-gradient(#f0f0f0, #f0f0f0 38%, #e0e0e0);
}

/* Active *********************************************************************/

:enabled:active:-webkit-any(
    select,
    input[type='checkbox'],
    input[type='radio'],
    :-webkit-any(
        button,
        input[type='button'],
        input[type='submit'])) {
  background-image: linear-gradient(#e7e7e7, #e7e7e7 38%, #d7d7d7);
  box-shadow: none;
  text-shadow: none;
}

:enabled:active:-webkit-any(select) {
  /* OVERRIDE */
  background-image: -webkit-image-set(url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAICAQAAACxSAwfAAAAUUlEQVR4AWP4TxREZkYxpKHAKKzKEhOZvyG4zN8SE7Eq+6+wYCHbTwiT7eeChf8VsFsKVQhTxIDDbVCFfF8ginApgyp82wRShEcZVJIVzoJDAGqrgIJGRl20AAAAAElFTkSuQmCC) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACcAAAAQCAQAAAA/1a6rAAAAQUlEQVR4Xu3MsQnAMBAEMI1+myf9gw0+3ASCenmu+mQn2yGn3S4Mp906DEW3CEPfzTD03QxD380w3OmIUHe9v+u9QwAt93yns5cAAAAASUVORK5CYII=) 2x),
      linear-gradient(#e7e7e7, #e7e7e7 38%, #d7d7d7);
}

/* Disabled *******************************************************************/

:disabled:-webkit-any(
    button,
    input[type='button'],
    input[type='submit']),
select:disabled {
  background-image: linear-gradient(#f1f1f1, #f1f1f1 38%, #e6e6e6);
  border-color: rgba(80, 80, 80, 0.2);
  box-shadow: 0 1px 0 rgba(80, 80, 80, 0.08),
      inset 0 1px 2px rgba(255, 255, 255, 0.75);
  color: #aaa;
}

select:disabled {
  /* OVERRIDE */
  background-image: -webkit-image-set(url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAICAQAAACxSAwfAAAASUlEQVR4AWP4TxREZkYxpKHAKKzKEhMb/iPDxESsyv4rLFiIULRg4X8F7JaCFSIUMeBwG1QhTBEuZVCFb5tAivAog0qywllwCAAavoiLhz+UlAAAAABJRU5ErkJggg==) 1x, url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAQCAQAAADQF8WVAAAARElEQVR4Xu3MsQ0AIAwEsYx+m4fySsgLOuTe1Re9z4De4DzbdVDnmZ0ENcrsZJVkdoIKMzurMLOzSjNhlWfCapBlfpZbeMFeGdxKIEQAAAAASUVORK5CYII=) 2x),
      linear-gradient(#f1f1f1, #f1f1f1 38%, #e6e6e6);
}

input:disabled:-webkit-any([type='checkbox'],
                           [type='radio']) {
  opacity: .75;
}

input:disabled:-webkit-any([type='password'],
                           [type='search'],
                           [type='text'],
                           [type='url'],
                           :not([type])) {
  color: #999;
}

/* Focus **********************************************************************/

:enabled:focus:-webkit-any(
    select,
    input[type='checkbox'],
    input[type='number'],
    input[type='password'],
    input[type='radio'],
    input[type='search'],
    input[type='text'],
    input[type='url'],
    input:not([type]),
    :-webkit-any(
         button,
         input[type='button'],
         input[type='submit'])) {
  /* OVERRIDE */
  -webkit-transition: border-color 200ms;
  /* We use border color because it follows the border radius (unlike outline).
   * This is particularly noticeable on mac. */
  border-color: rgb(77, 144, 254);
  outline: none;
}

/* Checkbox/radio helpers ******************************************************
 *
 * .checkbox and .radio classes wrap labels. Checkboxes and radios should use
 * these classes with the markup structure:
 *
 *   <div class="checkbox">
 *     <label>
 *       <input type="checkbox">
 *       <span>
 *     </label>
 *   </div>
 */

:-webkit-any(.checkbox, .radio) label {
  /* Don't expand horizontally: <http://crbug.com/112091>. */
  align-items: center;
  display: inline-flex;
  padding-bottom: 7px;
  padding-top: 7px;
}

:-webkit-any(.checkbox, .radio) label input {
  flex-shrink: 0;
}

:-webkit-any(.checkbox, .radio) label input ~ span {
  -webkit-margin-start: 0.6em;
  /* Make sure long spans wrap at the same horizontal position they start. */
  display: block;
}

:-webkit-any(.checkbox, .radio) label:hover {
  color: black;
}

label > input:disabled:-webkit-any([type='checkbox'], [type='radio']) ~ span {
  color: #999;
}
<html>
<head>
<title>Headless remote debugging</title>
<style>
</style>

<script>
const fetchjson = (url) => fetch(url).then(r => r.json());

function loadData() {
  const getList = fetchjson("/json/list");
  const getVersion = fetchjson('/json/version');
  Promise.all([getList, getVersion]).then(parseResults);
}

function parseResults([listData, versionData]){
    const version = versionData['WebKit-Version'];
    const hash = version.match(/\s\(@(\b[0-9a-f]{5,40}\b)/)[1];
    listData.forEach(item => appendItem(item, hash));
}

function appendItem(item, hash) {
  let link;
  if (item.devtoolsFrontendUrl) {
    link = document.createElement("a");
    var devtoolsFrontendUrl = item.devtoolsFrontendUrl.replace(/^\/devtools\//,'');
    link.href = `https://chrome-devtools-frontend.appspot.com/serve_file/@${hash}/${devtoolsFrontendUrl}&remoteFrontend=true`;
    link.title = item.title;
  } else {
    link = document.createElement("div");
    link.title = "The tab already has active debugging session";
  }

  var text = document.createElement("div");
  if (item.title)
    text.textContent = item.title;
  else
    text.textContent = "(untitled tab)";
  if (item.faviconUrl)
    text.style.cssText = "background-image:url(" + item.faviconUrl + ")";
  link.appendChild(text);

  var p = document.createElement("p");
  p.appendChild(link);

  document.getElementById("items").appendChild(p);
}
</script>
</head>
<body onload='loadData()'>
  <div id='caption'>Inspectable WebContents</div>
  <div id='items'></div>
</body>
</html>
��=�r�ƒ����<��K�^�i��d;V����!�J@r(".Zf"��v�
sA�J���%��o�������bU�W�����~FɋYY��圜-�YQV19�2€*RҊ��$�;<$?T�SR�ҊTŲS2.&���W�Z�tBF+���˗�z�Q��c�ðz��d��dDӴX��������^�"�4����ૺL��`o/��(�W
���o�����p:M��~����E<J�I�_U��Q���a��i����I���G�VYܐ�ސWeY��>J�Qʑ�.JfI��XTH��`�no�CRrFN���䏻���.�b�i^���L i~�8Ըȧ镄�	ԋ��6�ʊ����
��dr&˺x]$T�%]T~�0�?�(LgI��yR��$�V$���L���|��*�þ)JB?&�EF���É��(�GIɟ�ɭ��-�h
492�1��$���!i��i�[EnR0�̲��X�U�2]��I�\!�8�#Stac-��2�B�k 0���w��K��!
3<O���ݗ4}�d��3cG)�
,�
����H9Z�ل��H�U+68&]�X(\��φ�7��.tɊ$%�x�b�� @R?�IG��CE@<9�2Y3�$��Y]/�
�����OQe҂ab�g4��g�=�ݰk,K�|�pJVŒ�KPT�^S��
NT�5I�SZҼ�	�9�°p>�%���k�#:-J�5�>��<ɗ�ZrZ��~�\Y�l��t�fI���b��*ւpsZ^Y2"]s�r�tR��y�n4vAK�U�NO�ه"�(��n���)t��̗g���gU���5ħ.\�X`��טx��Ǚ��Uk\��81���kNǴ�0��w�,t16Y<^�������ȸ� �J.bҞz���,���H���(E"U9>}���?x�L�{��*XM���jF���zc�{��w,�kǪ��&��1/Q>W;W��±=|��Z{=K�H`���|���ӍP�0�}y��%R���NBB.^�}9|�߿�~w��)9��+��~�S��h�ѫ� ���M��zB�
�k}�\-�1�r�SO�d\.KO����"�����qv\G�,�b`RH$a|D��
VP�#|��j�N��H.�w�W������!�T��@���3 P���q!j`t���PVZ����,W��҉dC6�_њ�`楦3֧1H�5�Q�#�M�E=O��P��F��4|ZdYq���I<�,�'ZO�>9 ��ж)H����k��Q�:�\;��t����l���. �ӕeR�M��3��Q�œb�dKN�J��ZW6O�35_��].ԸL5��E���n���^�DGu���o�ʠΚ&�������sLz,��6'iV���z��`�,3� +�t��TV,|���}/��t:X�帤�d%�*n�����ㆈ�v���� ��c�;H�†���Z�g$����6,����ʏ�8�
N1N�OֹoH�"�m�I��I���͙�lb%e��
9a/������M���Wr�L�l�V|cR�-h�J9�e,��_�W�/W[�{�>�����CŸ>�i�8�d�a��r1V�ChZ�fh�`���:���jG�6K~O1�Ѧ�E7��(��P�d�j콣4XN]L4�n��9�����b�"޷��N�U>�i��4+_���P!^`0y1�}ed�Sn,\Y�2��BM��@�v�P�>�ၾ����ٕ���a=1�}��=�̰�9��ߢ��Y
+��o�e�Xַ ��.䜍)�ע`?��P>���a>- v�mg1N1v� ��A\���.iUG�����'Xm�q+,�ka��
�j�c���	��
WZ�IZ
��h���rb%��|„��a|���P�|��H��*y�U5$�T����-���a������L�7�W�^8�Τd8,�^<G(
�%Yg&�E]�jq�
Љ����͙��7{�>��
EVY�Dy�8�K���;]L^��I	K �ÂNn!�P�V��+�#r:qǓq�T���@�ػ�����k��@�Z�	/[1�`i�y���Y��E^��+�2R,|�k�X��b\�{l`�Ez�|0hK�Z"D�̲��t�Y
+�򱏫�HUn�[����[,����8Qx�q��*o�����Wx/�q}PHY���J�%��Ra@�'C�x`��P>�lT_]`"ņcz$׳�yDž��za�6y�!Y�䛁ݨdž�o�)p�H-UtRWZ���@ӘUvh7d<����3.�5�b�x��Y�4!é����j2I�qR�Æb��}"��r�%G���t��X���ʐ��t#�4�Vɭ��Ō�f���L>��Yd�S/;*��p�'��5</=��7�D6A?���;�Tl*�T�쉞�q5rۍz�j%�@)������ �d��:3�t����2�Y击v�kDnӓ,%�k]5_Y�	T��Hr��W�=B�H/Kć0#D?���z%��8(f���@i�(( ��c�s�����3�w/�E�߫�{O�7�G����L��<�Mo]&cv����鉒�?a�J$�?s��p������e��SLa'lIV�sd�X��'��cYU��]B=4���^GRKS3�����\��z��WEE7�F���f���7��P�Mn���K���7K[�t2C?\cݦ��}������F
�����������d�����&�U�Ɉ���8 lƪl���=o^�F3����T��a{��a�z�r�B���G�����S+6m<����+�!_�&���"uf�������J�M�%����G��EBj�R]�g���5dJ����n%/Cl�	�'�Y�S��b��4�Q�h��Tv,��I�L�D�Ѧ{Zo(�'&ǖkty��c���u�����7�B������pT4
��H!��J}�Z���jz��(eJ�V%�B���;>{��R�ˑ�p`s�lU8��|�+�q7�.J����,���~"����ʻ�@�c+���Njz�=T���`SLE�Ʈ��Zҍ�XuJx�&�]ai�$�OT�B�5,\j�����*��O�M���(n�T��+X�6��I#�n`N�=��ƃz��3��Șh}�T���Ru�Y��{�~�fמR;dc�?���^{��=Қ�s��6���D#���h��ש�ҥ���ٮ�bI��*�+�2����rZ�����*���L�1�u���E�ݧ�v���+؎�����O��K��2�=�Z� �c!mP����p�A'.�\J4��)bh�5b���b����
��"Rb`ªE�;g��9���.�)�Q<Sm�j��9��s}���i�~1�w�{�)��ڴ�[Aƣ##~5_ԫu���,��߱���mDq2���}�½~�Q�vNc*�1Sm�<x3���,�����@f���k���,����l�"�l��(�l�T�=|�j8��$͈qF�ҳr��m�xzMT�!�N�
~��Ќִw�9s��x��(�X|�֏����掕`TF�-�
�ݡ��R���C���^��;�K��q�EO�ǁ�̍�gE���kc��n���ob��'�����k���* ���<�ֹ��I4ki\'� 
7=ffY�`�o����3�6�˔��ʖ�ua�����ν�<��VJ���"l��;�c��`�'d��}�e���@�.B$xҐa?�V:6d���J�b�jY�s� 
����/�`/��,�
��8r�h�?V�sV��^�Z!FH<��bcJ�`[�c��٦e�iZe��n�&$0q��F!��e~�f2�h`�f�BT��]��pS)
�rc|�?Vyp,�j�6�Ą;�m�=�����I�?�r�Y���R�ݳ#�OO�9��9gd�vN�Z�_�K<:�`�w���{��D�j�{n;���:�Q��_�����	�v���l�N�
�� ��{@Zt����2g�<i�
�uԬX�92)��V��_��R_g͒� l��`��\��sv�y˿����&z�|׵�5�l�O}�{�%�
Գ�E�U	>��Y�(�[_��E�mE�x=oo]�ι͜%�C����������g�h�u6��L�]����l��U�>�"���m�	s�ӎ�On�Yϧ��@�[7�l�x�oK�83f�����!�����[���cc�DnԼ��ʍϧ��ߑ�V_JoF���V]m�ج_c������&9�(�HN{�Oφ���>ӃvN�s)�M���Cl\7��P��}u#�"�ێ�h*�ic���@��!��끄X��$� \��W]~�KVU�dN��aMj�R�.$�����_�U/
�6�/r��Z���.�MR]c)��#�O^�綦2�#l���Æ�F�����l�g"'�}~23���ـ9�����k��l]�����Ƣ�)9c�D-]���mQQZ�v5V����I��`�웓�}+�7�f��R���/�G��?e

��ξM�;���a�Οm���9!��>�HC���$l`���v����:/u:�[�
��J��|h_������g����Z�:�b�gs)̒ʷx�������=5J�O�	�gx	n�E5���K�R_���QZ�e^�W��7������4̈��e����#7�k�Y�њ�VP�l�P
����d8��֨�n��>4ƴZ��-�
L�l+`�-_��c锂�b���G_FR���o��V�Ӻ�0�	�M��_R���,��o���M͓�D����D�0y3�z9�����œ�xg�OGx��Q1��c0�O�RL�E9y��O��G��݃���5����J�7-�:/�\D��C�
!z��)����eR�O&I��Oa�R�و{�w	*�F\�
��&�`w�֫�lV�>y0Z��5��A_���O��Z=��8���~�����I�c=5@
�ӊF��F[��|�݄�z.j8��BC��%��D���
Y�䀡��-92��W��Fb�oE|{2�1�.}�'U���ǻv=VY�j���W��I��ƞ��m��Z�j��3�I��:����p緼�L�.&�Ǻ+\�#�ۑގ�Oc�sXL�0ɾ�]RT�$,��0����8~,���%k-ٯO�#���'�}�(L�<+�d�6q�GCŏ������o��E��Q��Y� �Z��I|��?}kvK4��p+�v4��v�?�$�ng��O2����ꇻ6�����Ɋd+�66��LZ	?~ԁ��r\�}i,Ɋne�q6(`^���<�o��*��u����'P�ͭE�]䂮����g�Z�6R8�7�f-t�H���v\��Y+�]�3���f�0����p��v~0܅7�7I=��YQ����pO�\���ni.�%�}mI\K_/�����~�Ov�<d8%.�
��#l����]�W�(�,���H<�c���f��wY����(��Ȋ���&Y�����Y��Ol��yQ�Ȏlg�A���'fq)�WF�F�n�z��S���I�C�����N��K:�"<?%G�O��
���H��;lFQ:�i��&Z��5���*�R����G��G���pb<�H$΂�Ǐ��Y|����jZ���s�D���z�9Y��>9�d�=s+_3�K��%�q��@�DP�O�7ܛg��j�T�-22B�욠��Z�'TzY1D����z��&���sK��)3f!�Q���f5�W]��u�oՌ�8Ն?���N��u�C�JW�o�S�>nm�s�l���7�;��I�;���V^N����̈��ιq��������G[jfsf��z��8�����|���'[jfsf���s���M�������e�et+vv��	{r�N9��
��()�Y�)���W���lE�pH��_һ����_��
��A�L"ckY2�k��]���BR��z\�`��1�H�%(�ˆ���6JR..�Y>ᗣȜE�3Q����9��h��7��;��EYϪ����	Y�d�\��3�9&��0����h�$n�6��k�r>��)Kpm;BJ��Z�lmM6�ц{r.���	�$2n'�N�h����Jߡ��`3rk�|1�U��>$�~�9�7�
,�
�E2������l��e#u�a�v1��3w�A��=x��;�'|���nsDܶ O������[�"
�c��a�`��/vg�~ECs�c̶b]�%�)�ߌ[�t��ts*�,C ���ճYfg��K����a�B?ǁ�{W���"��)�kHm�>�D�� /�)9�)�DI�O�����ѣ�#�A�J7��2��"o�%m�1��ڍ��H�ř�Kz*�f���C$��ͯ-;
�c3m��;B���u1'CT1���/�����%�~�-!��*Z.�O�h��nʔ������Q�:>U$�	+H�$�ڕF�c�3H_��b�G!��
�V���v�\��ҋIA�'�4�z���N٫UWz�"H�Q']�ރ�vĶSkՕ^S	}�IWA�������]�o7�W�~���bc؀�)�m]`�C
�e(��}^u������'Q_�D}8q۴��ӷH���"h,�V v�-
1�L���n��`]��@�	�L@gh��g^"-&S=J�L&��{̢x��E5�V*J�P��'�����0H�|`1Dfa�wo�nsl>!^#���O�%��_��4���K�
 �:$5�.�o�p����ՑC46���a����A-M�G�M-Q��/�h!��d��U�# 	�Y�O�ǡ���Q�A�p�+�#�d����Q���e���*t2�D�V7��h9�������Fmi�f��X_�O�>�vHn�%�}�,��x~�{q��"+k(a-�c�TLP����G0؟$��V!р@}U�;�j�PK�+�vL��\��bm{nG��!pB�U)A!��wTpإ�WҍQcuE��9�n�~R��fѸL�)ɓC4��q1E�k`�����c$�@Э�n�t�p�Z���‰�G@�iۿ�W�οJ
et�Z|�L"�u
'��ʿ!+�\lp�^4�:���Q=)���ey	-�t��a�(>|�u��7ʄS2�K�X4�����ڛ�oq숉��ZeR���jݾo�R�Z3Xm���{A-�a�RS�aL��A��Z��"AqV�:MK=�F�>��ٖI���:Ȳ�,����[B�T�ND�Uz/���!8�7�XG��%g֤��� �_�OLE	dǼ�j�q)�|�"l��S���i��bL!�Pm������NZ��Z��ƪ�Q�e����Y0f��up�G�ꄮ�Ib�K+�;t�`4�t��q������ꃪ�=��*t�kP�6=�ޡ���ڂ����c������N&�tR�׃3��KW��r3�8A>�^��1a�"�<�)ٟo�pΟ�]�%��q��6���֚x<��+�s"OCy��9B�_�
�w�Q��;���.�
�u��ɒ�a�XHD���oQ�i5O���i*m�Ri�4���?� ڄZp�w3����Ų1��v�����o�)m
5�	��:�$z�W��(�1�����:��I%��]ݪ�í��vŁ���Q��9m�i1��"��DV�M�Q���ȇ�Q0���X���G�"�m`ĺ�!o�f�܊����n���G���e?}��o5*<�%�ܞ��e�EG�@3�M��b۵�Z(u��I<I���й`�f�Aϰ���v��[H�(���o�m��n�.o#�������<�����Da��E]��7��CR6�螸�,Q[��\\�����Ь��a�yH|���_��"]�C%�d`��ۓW��RuO�l��FyZ!��tu�]&x�����=�ʚ��k/�3�`��K��X���Y�d��ۊ[�a�
�%YsU�k��1��f�[��w�+G!��PTEhs!��nԓDK�����x�(0�{�����_f���`�p$$��(�F�O�J!��볟�^���
�6;�qW({�`�|����~}N3���[�G7�a{bU�%�\n�k���9��4S���ߋߡ)1o����]	��	�=��ʹ�c<�s�JO�t���1�5+X��(
ܨ��� �����i�`��z�K��/�|%����z	)�<�Ò\��tO�&��$��sGJ���ـ=J�m�>���ݴ�u�#ѫ��
!�Q|�L8NV�̊�%����W���Dِ@$Ȉ0�����
%��b-��m�Q����4bY��q��}@���)D��_��(qY9;��ىb�	�t��[�Cг)�g�	��/)���
8��L�zx
�F�@Y�/��,.�F��if3ݸ_���I�t^ʦ_��?����LY��uqR;���+qe����3��Y�����^^M�Zw�x���ɀ����!�n���ao<ǣ}�%D�J(&�E�����tZj���w7�Ĕ�E/�z�A|?)(�D�翢��J��u��I��1�z]/�]����+��Xg��y�/��q��0�)�_��#�I
4qyZ��ɞq����N���]����y��
�du�7��Y#�h�L֔�K�=0�`>$��,�n��	��W^נ��	C�= �/kX�ticg��-�n+$:
k��E<SV��+�HW�3��`�'��J��E5#�s����]KO#1��/i%��,Bh�=r�e�7�*U�-�T���7�8���ym9 ��c�=�L�w��(�N%�r
��)W:p��R�������Jn��8w�Q��*d	�����m�����޾��m�M���j���.�]��!;���1a����b�&��2Q05��2b9���lB��AyƘ��	|��K�?6M�E�@�d���SF����|%T�����rae��N	qqT��c+��
Ʒ�h�4�����v�����q��\�D�N���+��T��[D4@��C�t{GG䏣S�\]2<�&Q���p%�ޱ�
ޡ`|��H�ޡx��n��BE!�h��&�z!	E�06���p�D��>�?>��P���R���D[��F��ӮNup�����%�RXIWlyI��}=Ʒ���8A�ׄ�tY
���a��f���;��hѹ��&[��c,'IH���e&���v
�����%��-�\Vq�p96�¶�6����׼1����]�q�ݴ��f��I���F+�D2_k��\1j��ܴ�덕���)�҂�$Ϝ}M^�W���<��
6�~wR4}aV�;�z^o^����g��pk8�Ύ��>�{���o��f��ü��|N&�b�M{�H}^�R
;�� 6t�rY����8X��2��|��	�4悠)Y�h�4�X6G)d�h�k"z�ۨҹ��6p�3U���_S����>ޗ��fe���,-mϕ�|&��I3�V (
�cJD,�7����>�x/�y�f��W,�t�����ء̝�u�{{��G�`��ϥ�4;-�7׻ {����
��-�%b&��� ���($��'�3C��W窥7����,z���o���.�#�Z�ۣ7����1���R�6�K��p#U��b� �!����M�����F
!R�…��J��V2��b�g���sR��;2난��B>�}����-C�`3��ٮD6E9Ѽ
�4�B�?���]Ko�6��p��렁��R �i�6F�X�Q
�V��e�n���3�����ؓeq8�Ù!E~l5�*����-��DW�;�j؍���&-�R��tZ����ڵ�(�a�ؠ�]KK[�6M�&�̻�F�/�
�A�+�׵���B�lr�2\K��pc!-�O���R��|A�Ω�to��m�j�w���żi|y�B^5��KW���qi0��w�S셛x�<�K�������S�I�ap� J�6���G
�z��Pn���;<c ��>q�f������q9���L'z�F�����;��;l�w�wԒ�X����nGK	!g)���X�q<��$�{��O�~��� %�?A��o���ԃ�����7�EI�A�0q�)�[=�4���D~������B��/�]�2���)�w"�^�:��稼7R>�]��1��eV��,�|�����(7N���ԡH$6o.��K%ɶO��;���j��I;i�t�~�Į�Y^���8S�~�e
����i��rY����~'��^J��~�<�	+"7�ŏ��zb=��ʞZ�/�
��V\wR�-�|�ڵ���J`o�YQBO�۸�7�7��h*qV��%�r��Jf��y���0���j���m��/UVH��c��L�!�^-�l��J䩊}_ͻƖ߷U��*;�-zY���O!V�RW3�&�������M��:D!-'��_�Kн�I�k]���*�X.��W�6�Rs�^�x��
��6G��]�/��kd�n��v�3���ЀV��k	��W��F�
�'����nz��1G�@Ck�l�u�[ogؕ���;�R�\C�5�V�(`�J&r�Y���:%N1<G@Yz�0
Rb�v2��M�܌N����w��+_��89j#
�l
�A��AVli| ��*W��2E�^�Irί@���bY���Z�sb���^�@�Ņ������*a> q��=�뢂p�
SBU�k�y�N�cۡlωn�8��"���	��1�Vs��.��znNÛ�?T�\�E�j���>�8�tҼx�A��~����M9۾�֫&Q�h�R���"�^�phcm�k��d�>���@�1�թK�]�S6p��������&�5J�	BS��L�©w�s��!l-m�|_x�,�����P+9��ඁ�|��U`�������(��Q���	���g�>3�:�n�@a���ʌ�
r{~}q6����;r�z�R"yY�U&s��D ueWF�M�ZX�_��5�(�_X��I@��/XP_z��t������1���c�F{e��Y�^a�蛲E���Zh}P�ժ}�~M�
<7����-,g��V/�`�n�S�S��<�)�1��~.C���uB�o���ԵX<�yQgi}CKv�)η���H�{�.O�켠7�7�&�F�t�6H[������\��θ$^)dO�^�{z�K�X��ʁ�y>�9Зb�F�(��z���Kᅳ�a��\&r�G�
Х�T�=KM�K��n	�&��j�F��n�Nd�'�]�d����գ���ű�_o��E/��e�!�\"�a�ޓ���:�Ԛ�#&���3L���ܒ�����Qb��4$$�6�~�sP���6L�ff�ێ��9�
��'(M�f�R�ǤQ���Q(�>���~�����ǁ�h�E��7)7��S�??fğ*s 6�yt�^���#3���$��B႖�
�
-[��Sj
Ȯ��F>Be��xx
��'�h�x�ҩ�)����^�noO~MHN|M3ذe�g�DF2��'��u�Xd�hd0.�vi�J�bm���7x-@��]���������i������mҨ}����]Kk1�+{S�轥�"���B�b[�BѲ>����ygf�Iv׶��&�Mvf2;_&����G��h2����A%�t�fݓ�˜uT�%�Ib����w��9n��SX�
e/���VIJ.�⽵�M�vf�K���ث�͙��G�n᳦���
�|�,m_[�z��7_�^1U"�-�$�I`h�j���n+t�T4j;�em#]��_�DZ{�iTw���v�+Nm��Zf*[��C�|!����w�<���ή��iﮭ��I�&<&����>*�+=.��>�b�;�K��'W{s�8
'e��<�����},"�j��:��r��‘	
v��J�I�\��[�(�,��*FR��E�C0���+"���������vX%���j��p���~�k�5�ΡZ��f
g�6�>�� �OuO�}��1��U����>0a
��kx��X2o���d�K*�hY�+�6�áp�&I��*a��]z�e�H��R���rG�0�ryR�&�ʼn���R�P�b���I���O���6L|��Z
�@�,�Hwz����r]ne	_�����*eZ��U����b�NG����J��
Z,�s���ä�w�W�jO��׭�k�b��m7W%b����)x��Ҁ%OEX����{o����iz�{i%��1L�-��j[�3���hT�d�z0f=j�6�U�giq{�'�c^�L���"+O���~���]OI�_1��a��ߞn�҅�,��jeM�	�bl�c�E�������{z�����23�_�]�]��ɊBN�z�����>��?���rdj�f�|�i����/��@�<�s`���a	!�H�RɄ9j
�USV%�g�>�I���x�m̫�*��j@{w�͛��֟���˅ɮ����-!�R�7%�mD8���l����Z�r��J�X���X��^��:�{���2���k�C���9c��ڵwA�Z�>�F�m��<MԢ�@=گ?�}����I�.[���H���/K��v����7������b
���	Mr(����fb�/�ZEf���4���&Q'�9=�=�i��<�������J�
S�؍u�Y6�����p	ݝz�>�N�v���
$���=�j#ȹ�5�1����h1�󎁻��z��d|���2�Η�<�ta<�f��@,�%���%]� !��1�XJ^��4�QU�v���Νp�M�\�(H�$
��O �j�zr�M��ޞ��x5=
�h}<b�bLg���N�a�l�z����3;��~J�d_�w��-��N�Z'w�v�ܢ�
ݸS�����a�&�L].`3�cg�H�Ch,&�qěO�w�oo�lj]/h�m>��P*=�qP�4T�i�h���8��3+��h�0Xx��L�a=d��I�>����$�m���8�0{&�~��R����C��W�[Ä-�m[��[&�#��#޿�4����(�c��a%u!|9�Df�!�x'c���н�dꝖ��#6&cϾȠ%F�3aY�A��Ţ��/6Ҽ���|F�;<�v\�`~G>�����p3��_���Ü#h���J�=�@�2�24�A��Ve]�'^��4�1��64���B	����ql��@ģ�Ěx�^�~M�Odc���A
�8�+�y��AH"�s5�B��<8��i����3�p!oq%���OF7�1�֊���W4����6�#y\�I���M|ܝ��z�?��}$��⯱cah�8<l-��A"
~n!�P�����	������q�hR����f��}a%�F9�q�Mfg��c�] \�ȳ�	�'�%9�̺	���N�������l���s�	�v|L�W�xbÏ��k��-���d��Q�H��5d�Aܬ�8�_4����*,�A0��BY~�BsX���W�W�p�(.#��Bnf���D�#��a���D��+^�?
[_��r���
�I��YA�r��
-��k*� �5�/��G1QYJS��l�ި�Ο���Q������
*�ØP���v㠃r��}<좤9��g!����>8�s��E�	��7�m����ź��r��Ҷ˥�~M�� S�Vg���8�
ư�M#ؗ���E�36��$���H�UŠ���d�;��N��i��
�*���34=��7���S
>.&&��"H[�)*p��)�����r����ac3�jK�\Aq���,���']@N�d	/P.���+H�x��˭%�
&)������ڨ�Gz�Q�??�D>��.���s!�Z�P����o�����8�8�@T����؅X���dga4�p�xZ�ϡ��_�þo�S��Q����h�L�0��Z�@toco��$wih9x`��Z��o��x�h8���
š�*r1+u��$e�x�sD�;�A$���δ�D��C�i��XI��sGQ�<��si���0p�P%uW�+��#����[��ke|ܴ.��=eP����Pl;B��#�1b�'!b�E��W(gr��ͅ�%��8d�d�~��!^��� �98�4e
US�O0�i�?z��8�ATH�f�4��D��]��qs"�	G���W��50�W*A�(!�E��A��FGa#�`^�ءǶ;�����V1L�U�۹c"�3H�D�ᬧ�P���%LGd��d�F6Q!���г���4/wh�P�M�I��yrj����!�	f[
��Py&!�0#�����ߚ�r�>�����c4�s�gL���$i�u���q�o�:�1d�A�|m�3f�@ai���L�L�[ˎ%�^��ˊ�	f����&ap)��zFj
‘NP�N�(�����R�����&4��ү;��&i>1C�-�ƇAk2�JNj~�N�}�2Ѹ�sl4:sY�)�en�ߩ�-��|-/��%�`�h��\����%���
�P����xr�]
I]�(3�E��ƞGz"ڎd+!3aT�@Q�a$^�kD� ���!������O�V�cj����'򲏳��c�5g�4u&:h��Yylg8f�w��n���/N�+�0��k����H��o��'���G�ޠ�^�I������|�ƗG�|���t���/j5�d g�ؘMy���O��Ng���UƚV,Q9��
H���x$�ݭe6�v�S޸N��c�?�{#Kr�ީ:����0r�X(����t1b�Ӌ�˷�W�b}R����^RVm��r8�-�M3�-��[��q��I�6�� �0�ob[����+�F��4{�JPMA�~�� �<��v5_�.]ԝ8#`���_���P�E��Z~��Ĝ�t�*�	���hT�Y�b���[��f�_���{���/xM��;��\;��^jC�2#-��5�^���Yu`�\-�&1À�� 4`�\ś�t��S{��2Z�?_��!�(�9��p�4˺��.嫀�ȱ�3���Z�b5=̘�aQ�	ی��Woĉ��T��tcί�=�A��sb3"�ݕ�Q��7
+	��[��J_���|V��G}3.���Nj돒�8ORU$�u,ʖz��!�,Xb���`���=4���@ǏKb�����%������ oV&���đ$�|Iv�$��?�^�{�Qu��l�&`�gQHa���`]f�Qt����2_d%��w�Ur��g>Y�i�:Z���~Sw�$~��[���������L� ���0g��#�ˍ��\@��w���R��넵�%��Q��R��B���p��D8�z���@�{S?�SRai;�*JD�8.`,�X`�bU�	f��&�,����R>�=���oT���fm�a��n5+�]g|uG<��<�����w��fm���&�m���Io��%	�&�&&�Mʂ��^�|d��N-ͧ�ޱLF*Y�Y��G@�[2�/9
!�~����̿��fma.a�
��GN�ur7�Lj��q�|�O"
�"�^FG'���Ứ�7�bJ�3�w���g��'���υq��ӱG�X�֡<�GB렳BY�k�ˢ����ٕp�b7�'vK p���
&|;x���}9���#�"z��r����?1�Yp���'�|�R��h�Ҽ
���p�(0h)R�7X����4��
�t�
,���ʔ��.�q�>��GH��[��.6�Z��%��I��@$����[-�іfk�cם�(e�G0���k߭w������Jۙ,������ʃ5�� �#7�RR2AW$�X~BF�{���KU�F�p�By~iN
��R=�����kSI�{~ń�������H�`��`s6�vok��1La{�;����R?F���.�w���[���ݒZR� �>z��r{�xfF��TJO���Ϊ�h�ܔH�ˑ�&�u�^�Yr2��XY���7�b�<Vc���IOc��n�	���C}S���h����=��~n�9 ���!w�(�� L�j)T>�]�(��=��ޥ�%�y��*c�A4A3jl�FNy��|B�x�X�,�&
�T���ʵ�YFQ�rs�}n$�D?�� �7M��s]|:�[�O�S��Tχ��\h#D��Y"4�����ԏ����,HR�amG1;r��k�x��雿�]EW�&Z7��js��{���/[WW�=T�����+���U;3��U^
�=1"�[��N�C0mf�ζ�4����<Z�?̿-ᴿ�N�a<��c��y����KOv�w�Z��`��H2���Fў[qY����|�V�1�,VH��W��h��A�|�B��v��;�^#��{�a��dG��@�Wm�ےL����%eB�m��,#W�E�K�e��b�W��>13��X��\r���lg�ހV�I~�X^Լ��i;3}���e���X�z^j^^hy�t%���^�\*�&�#7��2�|�]�Ψ*$��"�H����;-��3�ֈ�kO<s������d�n�$� �]���V�!��`�N��"�si���l�˙���=��K8��SŖa0�����3|�.I�Q�J��~~86�3p����u�&�GJn��4�/�W�kW1�1�c��l�F����L���o5&�M�u~��G�,?�i�/��7��u{f����4�<H(�;7�c��HKɟ��F�9�V(=⟰%�17��G�%	`2�]�fb�a�����b䶊�T�h<?�|>~3�&
���W�SOdt�v*�EQ�Ӎ��h��Kpbe�\��pWl���2B���}���t<PT>���q`�kt_�[lN�h�>���|B=�۸f�D�9�z�hKC9L��G�ur�e������K8�L���Kx0������4����:�9q�65b�{�A�]*�"���‘O�#0�o��}Ƀ$Ȧ`t�v`�,����b���#0��mI�cK.�&y�u��r�p�%����A\$�����\4���2r�ڜ�:w�ʼn	y�OZ��IT�t�ϑe-�?��ꡁ�"U1��*m�[ǝ,�r��{��]���t��Q�}p���p�jo5�;������I�������9�s� λ�_NDzp�?�pv��:h�]`|mmP�~��k5H��1����q�x{�N�@�66p@�=	���E��������v�y�Eh�v~�hД�R�>�d�"g�jyx�:A/��͖���=��y���`_�Yr�9<l����t�-�q��8i�
P�Q2P������}V+� a�*b�
����������ܳ�V�����I�SO�(��֬פ
|e\�.qOi������(ъ��`�6���$��rc�UtcQV���Yc]�/�6b=x�;��20a�ȇI*"p��v��"�l�0L����P�-�*�8��K������#�?Wη"�	*'��F �a\��b�!�AI!=VJӴ�&��/�v.0�w�,]v��6S7?0^e��$3Pc��4��A,��A��k��Ã��˰
/'Q�	�cqwi屄w�h��9V��DMB���PEQ��s1;Қ��ٙ�\�WZ�f�||��=����8����{ED���V�j̉�RZZ�Y�~������
m���V��D�z�}��V���.�q�>�	�t�=;R�ޮ��Z(2�f��y���0��F�W��EW[Q(�8�3;���Ocu�#/���
Ǻy�×�y�i��F��G)m`3X#s�Q�6��3\�L�H\kH��*?G�`���ce|ϕ�H��I����-y�I�t�� ���>�� .ٿnr�:f�x��$1O�/�=�U���㠁��3=��o���c�C�6��y�Es)�2��R�J�cg1zu�?-4���>i�r1h�њ;j�7�_�pPg��5�'�yH+��;m��sZ"�c�N��s1�7%;Ge�������a�����'��Iz��C�ŋ�Ҟ��p^��>���*��秈�X�
U>)&D�J��9�n����_\��7�M9F�G���"�pag�zgoČe��ޮ���i��g��B�Ǫ��Q<d"
Ki�f�zg�wp^�$�z��x\!m+=j�Ѹ�H��M����G\�eG�c9$Cg����bZ�EF��n2g�0c�b*o��<�܅�Y�z���B�L!l2RQp�_�6�W�,J���m8�i6O���aMF��Q4��[�I�3��L����Sr���c(�G��a�wļ�+5Ǽ2%�M�E���Y�n&T8_'�ڇ�y�c���F���2�l/�̟��c���k��l�a��]�A��єr��F0H��tl��T�<�)�_�ێs̙�#�d�������f����o�Q�Y_�v���K��I�pX�Յڅ���C�A0�`��Q^���k�rϺU���&��,�-�d���5��SӀ%�B1���VzJ�	i����rKH#S1:��T�!��g#՘��'��5R��x]X�i��&��f�`U:2��'�%ٛ������Q���}�xVU��1�[��(O�1iF�L!�2�fsm,�����-�����om��Ŋ�˞1�؁�%��v��!���i�8�a����)nf���SƔ�Wϲ��e��8Cm�3+]ch�Yg	0>3:�hjO� ��j�X�t��9��Cw��K�/���dk63��Bi����}��=E�K7Շ��LM�XҶ5uոJ��*��?t�ӃZ�̫r0�*��)�Sfπ�W�\�f٢D��,�nr�Le!�v���ֹ!��0�����4(
O��4�X��_w<-��J��N)`+��U����i؏�ިZޖ�^t�ij<�ʷGZ�|���l����W&Y�NTp�c�0�i5��jH9
��@�Md�WaϚiHt0�G.��q�"W��
�r��0�d�H���b��T@/Ќ���꒿�|�I���"E>Dά��A%+��q�X���� ��W�ƪ��\*��s�N�g�޽���{QŪ�K��_p�5�kMȞs�d�e����8�L_"����/�`����fm�C�%c�M�.��z��f�����[4�D��L��E
]���bY�*lc�*�����8A��n�{�ޠ~�o�K#]��*ˆ��l�.���ס6��X~Z�τ�駖+��SQiȳ�j%#*���#�(a��hM�|rUJ�q��ҟ�)�ht���J���p�B	-���]ȃ}��o��i=vy�LE��=/0KL��K"�o�Xj2ű�%�r{8d󦎫�\x���
�7}�A-л,+�'B������V��.Z��"񽰆_�������-O>�lp���I�L�Ю��h�,�{-	�z,+�&�?S�����b衦��at��@�<��*�,}�O71��0���2�}b� T�b�
�ց�?��¢ݚ�Z�x�z���eunb�'|ٳ�Bvj%4��Md6B�z�է�h�̅�2ZjY���`�B5�+60k�@[C��a����Z�!\g�-�+���A/[<Ӣ
ڸH���Zq��5���A���8M�������]=o� �+�L�Ha��R�����CD����$�l��>�p|�$J��6�8pz<�@��܂p�H��<����
�償����4�2\�H6)i����!:�ξ����|�O�q�,/B�u�T�Ј³��]��Lmd���H��H
��a����z���qJޡ�V��PZ$��1���ߎ�> n(e4�_W�fz���DQ;ҽr���,��q)5�H�4��_b�@pm�[
��g֤�s�w�qT��(k��F
Α�fš|b�&�4�"u4�Y������r��^�o�B����5�~LX�4��A�!VW{&�rgrh'�'ޕ��gM��|�g�5y��J4��+T�]���A����*Qԩ�;�<���;_h�9�JPT�8�<���Z�t�����K�k��[+u�p���(�w?��X�WDz��"��=c�"z�hWv��t��ہ�T�h�r���������#{(G�9��'@u2T_i��@E�z1<�����a�b����z\�s����]�o7�_�8�$�P5��-	``]�`��^�.^;����}�oRGJ:��9g�K��DR�I�IG�����;���W�v��mt6:$n��`^c�>w��m�
S�Zs*_�Jװl)Н��˜��Ydb�~��EhM������#'L~�,��L��'a�b�@��U琔j+[[L��\�h����vl�t�
�S�wq	�.�F�p�.l��%o���3���>;'PB>c�c���/�Fd
��k�v�	�Ȝ�k��#wao 7lǢϬ$��Q�52�<�
�41�a�*���s�G�/*���C_��˗z�_�&�>��}�Q�L�x����Rq �McY�ݱ��nwL��-�9u�\Z��[-�����6�ɹG��؞�jS֢da���m}f�<�mVz�|��v�բ�x꫆�&-r8��W��Hc�g�:z�X��2�й^�P�%��n.�t��-Pm��:��Z1W]p2xט�bEC�v��k���n�_��{��C�e��d�� �ɹ-�-��5��UM�&XE��a�GT��o�0�叶Dt�컲��DS�2���s����G I<�lgo���}6֕~ƶ��̞s�4�Y/{&���/:c���H��ۥ������/v$U��8�%n�C:s��,Sy�T�Ҥ�z'L�/.��_ZNʥ����.��P��|�� ˗��B%sٷ����g��*֥�,T�eC̩�C=����a���$1)��8u��%���n �v��y�-]���4*��ō�e1�����gy��L ��hJW��lӚ�N���\��&W�`�rty�t8é��6{�����m@i3g��t�nRڨ�k�y�|�;�Q�ȔG^���bx����+r����4�-y;��OI7%��ɅFW��&�Ň��h)[z����Zp���ߨ!�Y���vUC���1��'5�Y3u+�6G�2S!���vT���:F
ǩZ��!o�q�F&��qɵD?;��[����$�W��f�d�(j8�ŠWgh_�p��wL\����ǂ˗��܊�k�F�C�é`'�k2�k˸?Y������$�D C-�7����O#1���}mQ�
���&`,&[�E�x+Wl"7���ƨ�@��A~af�_}�M�����}�z׮k��0#C,s��(X[U�(�U��j.Z�����=�Xu�ଢ଼��j~'��*4����
]���?(�Y�8�Ohhb�4��Onu���$�nn��[T�M��o�����<�A\4R���	85�6G�V�TK2�!���M��h��VI��̍��ɢ6JRe���B��p��l"I����>~��]Uʑ��Pve����C�A�Tl��U�cnd�ί)¢9��n"-ښj�����D��x}�E�i�h��:��3�Ŕ�`,��L�,j��̼�N<�e3]}2�6$�d�a�-е���=��db���R�PЂ!�N0\�B�(�F�Q�C^w)l�R��S��q�kCω��V�%�%��w�n�>�wYW�f|K�K�}��~L�K$�]pmZ�<N�O��#�ō�Ɗ��8���%.l��Eo�Wx�����f�c�>y���|�M��_s2�k�Z��VۡM�R��{�v����a? �FU�o�_��@�z���=Ġ�|�)�\lYFD�Q����*j���x�bЃW�v;s�^f0�3ʊR�4�>�=x��t��6�~�_���v��F_�s�M�8�^�8/�R���6#8.�B&t8�A���j��J��nxe��:ip0T a������Ųi��l�2v3l�5h[����D1�����G�����:}���
"��X�b�&���8:�g3[M�`�Y��Iv�a��8D���3����e�;7���ENq.����G��K�g�z_a��M�1��/�Q��
�ڻ���l!�N��%��U9��^��kq�{�Y�og7����,�2��+Q&]�,���Ö*1�p�$��H��☠�cN~�(�Q�Uf���$rjy{��<aa�zЇ ����uĭI@$קva5������ȁ
x��C��|s�t8�5=؎]����]�k7~�_�=��q�M	�Bۀ!ؐ6��f�쵮�=rg��{�[�iW���]̽gow4Ҍ�>�$�pz�`�����}Ғ:��2c������RB/,���8����n�{"&~G�� ��o�6혧q���\�s��JVhGP
~���N%+�
���J^Q�A�[FVPj)�(�{Pz���
���=A	����~P�i(��A��,�%I���� �i�B���RT)�}��Kq3 ���.�K1^P��?1,Af�~|S�Þ�֟��e����rd�`)N�Kb�}�F(��͹�M_��d�~�������q�ԭ����ɝp�ߊCHm�Ww���=�O>�|X���}�3jV��{�Oņ�؟��@�s3��%2�1�(&Ъ{�V���Ii��?W��.E%�~^/`�m
�V�j�<ZUC��ƈ	?���[K��:�J�@C}�(�5��>��C�|M!���Z;c�i/�sҜ�w��qz�@�]�'��G����H�~�� ��P:��谚��k�c�!�U��h%�LJ��ptm6;�6ŋ���=X��gi��>�;�hw���ڜ3i_/�S�U^b��w|��o�25�p�6fV�w��)�s�h��	
�$��y�;�N�2��0��K70p�N�c�s)���r4��,��3X�W�܋�D���N9�Ʃ���n4�ё�
I�;�9�ЫC�>��H\# Q۵�ҷ����L#*.J7� ��x�	[�D��~5�1�À�6�*P��}b���Z\ k&�Mqw��Ʋf���Ww����~��&���{�����
+��_[	��E����^d�Y/������4qQ|b󷫣&�,%R�Bk�Z����)���֙����r���ҽ�k��h���j�<@G�s2�R����
�Ȟޤ���t�R��@����h��J�hTmV�uW��Œk����!C.��s|��XRnqCX�/���^�&��O޿zs�����ӓ�?��uB�aMz1�a���S�W�z���B�|~��nCáx�P��ɴ��Y��Lݤ��W=["4��1Pwl�Y	s��j��iX\������ğ<QD�vώ�jx��[О��J�I+���I��&�����2z�z��� �da�wF:�@�5@
M��@V��"�H����\�<�8���mA�dRq[ I��י(Q�L�6��f��&z|�p(��#�,T0��������x�5�e0b-����쩃���xo�����D
~vv�`[��Րq2�$��굳]�d�Td�J�)��^]\͋_���͋��9ce�������]��)9�3��9�S�����c��u[Z�1�P<����[��W�R�n리�C)i��)���i��	��3�>ពN��Q���k^yz٘�1]�k����֠f���F��e��EL�@�B�bq4$҃X�+t$aD]3��5��7
f3��tT��
��2�	!d3���dV����D����
�d"+pgLT�=�]�L蠱_=���I�Ů�టNb2c��X�|�B���#��!��k��H-`8��9V����m�3ߙW�:��o�]�r�0��)tÝiq�驝�t<c;������D��]	���_�x:�(�.�EZ��b?�����͹�雬�T�hբ�f휓�P��5k4>�*��h��͚L�X��f+��y˓�-�\���L;�#s�����:�!^g7�ei��������f�W�#mc8�|O��=�n6y�=�&���`޻��/	I��w��f�?w8��RC��f�G73ǽ�:u�M�%1Y\B��w�5�(�|�i{3l`3v��w古�*��Ȋ�Hf�j�r]��ɀ��bGm��ՠ��ԠHSg���X�zxU���H&z�S�P�
t(�R����?�7�͆�D�S�>@���0zI6�W�2ho�"�%��yjÕ�\-pE�/�Ok��-�>_���D�E��N�т���X�
�I�N��C_.>E�+����DA�ˌ�HJmt�HQ���	/l���,���$K},J
q��N�\!]��([��a��<�x�g��KZ�,e�(0����A� �v�ce@OY��?ѭ���l%�_"�����_��k]d�b�
CǼwD<pD]����5���|�Ҹkq�-I�g>m-�F(xQ�0H�
��*��,��<=]��1e="/�m��4�"���.��QJ��O�+3��%ۊ����{�	$����~��S<�`�	���x367�L�Y�Ў��/^���t;�EelQ�Q���2�5����bl�[,����b<o,�A@!䎱Ϧأ���*z����(#QάP�d�S?
�ϑR������><Ϋ��w�no|����M��0��2�����9D��B]����ى��>����/n�3w�|�wxk��}J��a�|�������w0?цV�T<����P^4�)�Df���Ȑ�!�d�;�ϼ1�o���qRnƁ쓝�'����3��yd���͡;�]��s�)й���FM���n�J�ڛ���u��qz�o/��
��-��O�%�/��Ou&�$���]�+���Ge��,1���̃�r�D#���W���'��iդ�-Q5��,o[�\����qq0�{L�2z��"h�&+���q\���ڱ��:���}�'�|]v�\�~8��X��&�F0y�1�:&"�
��w�xc���Ј�\x�j�b:
+Y[���<t�sT����z(��\nk������pLV�c���_?�0L����V���ּٍ��Ԫ��$�I�g�JjZ��"z��h�@ymax����m�`���c�r]�ͦ%�?Y(1����(c��ʺ3O�I����aa2�ɘ�z��Y�>��%��n�0�W�N��Ji$��^�g�؛x��E^)O�g4S�YkZy,��P��}�m�2�<a?� Y+�c�_�Ȥ���+�P+T��N<a�Q��y�:.G�e��ȎҺ���.�'3Ȝ<8���}nO?��TkS��(��6����s�F�E.T�u���Qc^�C�J���<io�H��+h!�!W=��x�)��3v�+>��5�L�lJJ(J!);���_Ud��,%���1�쪮����c��K��ȴf�Mf$i<���zj�jR�Z3�P;����l�
����J{�86�ߣvȢ~:h6M'�AjZV�R/����C�h;��n{��]����;���$���q�`p�s�]W�qfY��u��=�
J���A������a��8��;O�qz:��!k��7j͐F	�0��t����w��d� �"�����I	��u3b�
������w^���Νe��4XlY��B��������a¡��h�Ϝh3i����m��V�����"0�m,E^n�.9��\���q���ՔO�l����òHh�Tks����r�X�%U����2���K�E
�jQ��k�G	ء1j�,
Z�툎��m4+��=n6�Q��31��ӷ�Z�o)b�Xѓ+*��}�L���2]i3��/�[-5�w�hs}8�4%������D1���k!K���f��sM���d��l@�P�Vhqw�4Z!x5o���9Re�z���S�Ҝ��j�P�}���竝Ã��g�o.�mi
����
6\�D%��9�c�4����!�̋������rP�i��8�x� `�1�'LT@�=�;�6_Z�f�ll���3����^?p��!���0��s�������@���Y���e�5h�7М�M��>�T��H�<�� nuR��ձ�6B�_���o�����:XŔSF�Z�}b��1�^R�,ˊ06���>8��{zyc�И���[��Fl�_�������	���Hk��]�q�I�9H�5z�9�� �<�Dj�^�p`Y��K:�W 'q�ǂ�z�:�J�8�c ��[��a���qO�)3�B#G�c�nC�F㷖/�Y�|q0[.��҇T�c���(��B���q$�G{�~
Sn���_h�󻒰6����^�O{��OM���V�M��\VS�y6 ҹ�`Y��7	�Ÿ��� ������ �P�}�&6A+�������C[3��o�8�)@�n���a.���ssP�q���ǺVW�:~D��c#a�oP��
��R0?��c�"�*���$���i��d�!���=ey6��bv�� ��_��w�m!��]]1_4�p�H��u9��m�9<��A<A���(�@u�an��#S5�������#�;��q�/տ�i����������&�'~�ì�u틌l�i���k�-������X���o�xě:T��/P`f"�K���$�|��N��Vhe�R/*9S�ȞJn���2l���Dn�ojO�D�B�Z�����U���<�{Wн���Ԇ(L�Һ�k�Ь�߁��x{Ve����2&H�2�cF��]�}�Z-5.\XnA��u��܆!�R)�0�az��y|&R�ܳ
O�48���c�{��4���7<
��n�h�)�e�n*��k�>�VU�h�K9�o�����嶴z�@!,ūβge�|rq���s�:�s�P���
�4Zy|����x,��|y�uX��f螇Ϻ�@��wϣ�{5�;xZf���"���^��Svʒ��X��WW�1�+C^� in��m�W�Z�)���lnl�;��S��x��l@����H�f�����m�2����@jI�G0�d:�}/�1�8���K��:yPB������_a4�Tt�_{��
d��Vv�rE���Ew&�T��^��2���d4",�2+�yP͈�]oC-9�������xm�l"�d!-`���y����j�>�<#A״�7I�(��9˗�`�T��.8/
>�A�Y�:Qt^�(��+$U��8��+I�F.��ZW#D�J$D=)uy���D��N"*�K26K6�9��}c�i�ҡ���"���\zD��OHM_z�6����*���-�jҚ��к���t>)QU��¦P�(U�c�æ�RWWk�
ld�'�~Gy*N�+�qk�4O� ��f��ʜ���ku]e[dm�e�W�
2�V����gL����
��W.I=�0�t���'H�WΑ�?���^��W�?M��b�~=맏y�x�j���ߛ�:�8�uN�DTD��@��À��Xw���Z�En"U�&W��z!r�ׂ�k��N��|�F+�y��d�m%���i+���ڏ�m�X׵�>|F�]��@bIM1UX��T�����Z�'�2PRܕf�V�{@�P�V�/��&�^�TK%�[���}��aOIg��X�8F�%0�l�%.�9�K�t�������.��|U�Ǯ��ܧ]�e`���/�~I����g.#0����l͂�])+v��;ؕ2؎�mB��bo�%;{zj�;�ee:�@�Ki��P�ϻV/(�n�/�|!&���NP�sn=��`G2﫭��G�{��
5lV������B���5=7P"���g"(YCP�ÊV;/iM�deLYA�jCIk1�M��
#�|,�6u�X8o'OR����K��-���lk��b�8���v[Z%λ�A45Ȅj�����6�7�s]WW70�/�,��0����2�Ԭqŷԇ��T�Rg�}Z��KN`�Q��`�™��h�k��Iȑ35���l��}b�K*�{86��L&�Rs�Q�r&���C�s�}p|��ߚ5��߇m/8>D�.o�fs��"��b(D� g5��3�21c�%,�����<��2��8�S� ���b��eL]	h�ESOI�%�w؋C$����~>���G����(P���	z�f�p
žbl#;�"t��Y���ycd�1�u�Ĩ
�}̫�3�=ʌ��vv�*р��_�DŽ̘��	��G!|c1ct�F�ԧ�G��e<��ip�<�9��6��=�>��	v#{�Cж�Uΐ@��E�0Ou�WJf“($H��8(a��x�t �4#]0���Kr�@漵�ig�u}�6�A�O)��H���̖܉����*�BD�챂=�]8h6׵7%5�Y���|���_�V��,&f����������(��8*�#��P۝WݶL����?7<y�����\<ic��an���t��������!1��[&�Y�L����	�"�]u{��y�(��D �9�o��8������"^]rU]C�p�ճ?޵ao��y�����h�(W�p��dS��]����
�G��I�F[��I��1��UZsb���<���߽]���:�6z1�b]����:_��-��%�ER�_�,�/���^B��x��J	[R��J�+s'I��2���Q�J��%K<���/�C�V����=v�q�<���+�tF���KVdo��8�/o�>�\]�=�|���m�y����{'�W�/�/�Ql�=��T%|�HB]И��+p���V�d�"	�A�A��\��ÔŏY������)P ���@p��a8M��l
�����ߨ_{N��^8N��pR'�o������Ƭ$�X�'�"̧���c�}͹I$�t9
I���U��t��l��G\]�N%�=]Ō���T��^>�x>Ms�	�}5�Bm��߱uvf^�/H��
��q{j6�8��g�����zǺ�zg�	Z�9�1�[�x(p��Kġ�6N�寮����7��{_�o��x�@�u�pk/�~���E�\��9�c��d�K)K8м�*�t8b ���t��@T.~"Ќ��'�x
.���7���7k��b�X�5����;���n[t9@/���B,&u�$�4F�s�!�Tv	����W
�{�J�qI�s8P
�ƪD�HM��Q.�b†���	Q.�b�K1E����a�𼈦�ײ�T��lF
�{�N���|�����}�gL �vP�����K�K�{�P�ݧϱ>������K<oݸl��A[����a�]����_��`.�, H�u �:\v���9�h�\�U��/�@��h��rY�&�
X
�8�-��3o�rd'�;�H�(���8�W���J�5���:�휌J��eطR�GϢ�&8"(�/MTz=�����^0��A�O`��r���{IKd�~�-����+���\$>�h�L��4I�#5�EdT��/NR��dLu��9��b)H���#
W:���s��3ap�����x,�U�|O�s��\l�ԙ���7�}��	3}������E�N\�!X7̸b�^���u~�8�.e�T�q��Jǵ����W�J�,��>����ͯQ5;�&ު8$o���`���d�V69�.d+�lT8lX�f
'˘��RĆ?��t�������9�v�&�}m�n�P����:�uT]�s�iP���%_Gp�C���a�x
���`X��f~�����/thq����M
9���J.����E�s&�;���!�������b6�3V��
��,�'���U�؀�{¡�S�g�.p	:���ջ)>k��;�_��4>��+�y�"pʾ��mB�`K�n0��K��K?�E�M�+o^��*�>�uz�MM���ſ��
�_����}ON�X����k>�5D�i�ڜ���M���:A�|�l�Y�x��7�gb�v���麙�0�G����b�^��
�+�����W��w4N�AC��?�x�� hO�6"�Bw�'�sn������P�ˣ�{�*jC)/D#��.ivc�ˈM�`��fØ�hC�E
���0#4��hhM�L���f�f��g�Q���[�-
��b�IS6������F�4��4b.c۸��\0g����`��'L��q»I�S"����$�8�O�Z�J�LN���7�!�%$�B��E۪��ΝV�x��b�G68��&��ZΛ�/�N���X7)�Ւ�݁��⑑�[���O�h��EFp��}�O/�x.��O�8�f�
��C�趲s=������9!5�'94���ֳ'3��;�n����-�R
Q	��d�G"ȓ�r\�C�����m��:��Zp-�a5 >�D���Ƿ�.8�!(|T��o�<
1�(wɞKa�_-Qi]^�]�������J����ޕfj>�,��/@�Se	�ii!�1��Hix:xui�Mi�1�4�̧�K%�����Mɟ���70�����'���5}*��Ӝ��FJsG���xM�J�/�4烙�G�_+�h���
�kp�k���z����gm��]V��T�*��<�*s�ZZ��I��{.�wE0�F�P�C�AE�y��C�a<�g����� �H�P�,�i�e^��+Zx�\A��������qó�+0'�v#�f9ӟN�t8	�J�C���'��z�@�Z|p�ϝ,<���V�OݟxU�^� ;��O��z9�`\����
��GW��Tی�N�_���B1,��hE��o���4D4a�k���%K��U���~^��/��P��u��"v�(b�cY��_ya��u~��|)�4�=)E3���p�+9��a(���7��Î#�ЌhdC�;�EɈ��`��{�}�-�ԃ�>�����|:עղ7��,*�@k�| �L�su��+�F(��I%湊Pb9P��s�i�{�?����8�"#�Euٙq�Jf�Xs��y9<�!d	���:7_[�Q�烕U#�et79L����
0��@H
��ꡀ�r!b�Ѿ�r�C�Ford~+J$��xM F!�Ֆ��q1)n	�3bO�s r����B~��- ��g��VC��+�+�����2:wJ��&^L�Ԡ��Mn����	/�H/�X���u�0A�j���%�%�2�A���k�K�`N�����RK�6��s��}�:n�B��������rbzى��D��Bw��|gP�0�H^pd&g�_�Q/PfN��Ĕ�u���Kh8�t���U�j�:
�qj���,�jri;h@����p*Hx2�g��|9{��`��sGv_:���0X����h��0��U� �F�G�q4�,��x�]vX,v?�b)iI�p�7���0��%e~z?L� �K�]��N�0D��gb7�R�-= !.�sǛؕ��u��=iˉ�jvv�f���g6S�1t�:�ƶ��
��־��o��2F���
c�D�r��-a<ِ\HC9��8�i~�c$����iԞ�9��^��_��	{�yuĶ��\4�1�f*�T(_�i�S�C��Q��б�+�����bw|o�̑������o]�`I�\�CH�H������!�VM�Q���0	J��V���� ��e�Y��o���
D��T�N�0}�W�JH)UH��j���cڤ����	9�Mb�ؕ�TY�}vR�-Z-�s}|��׎"(䝌e�Y�q�Dc��6.�U�FO83�i`Hi$d(P��%)nc&(��]�I.��!
 e��frQ)����g�p�#�r%V0)M.�a�9� 
5�%��-��2�[Z�*AH$E'+�KT�D`:�|�M�le(�2�	�cJe)(0a�߿�.�/!eC�/-\��=�s�LKOx�R�+IK�}��M�c�M��÷O4x0��D
m���h��$�r+��6M���0�6Y�)˦�f�s��^a!U�3&�|�	|�>5����cI�ޙ�f�~�C3>P(��um�>7�LL��<̟�(hW���r�}~��.϶�/9���;&_���N�ǩ��&Q~�%�O)��A&�m�At�H�{��Jn����E�+2~?����V��E݆�m���{0�2���c����7�6�&�w�dC�&J����������a��nؕ��弇7�zb&��3��aG��[O��[܍۠���QL��v���#�Z�>�DYĨ>��"��^��#\7���9�F��,���<Cvw��e�I�۶�E��N�0D��g7��
= !.�s�ěؕ��M��=i��mwgFz�Z#�4w��6ݵ���<��^Z	.���1R��
t˖
��E����rZa�d�(U=�jxZ�����ߖ�����Y,�\b�=6SF�L�J�T?��Į���z6t��J)�yZN�E���>ט�Vз���h��z$|~4ǯ�[SU��r��$ȩ�?��N���]]黣�?�8��RMk�0��WLa��Ʊ��CH)$�Mh��e�S)A���
�d�j��������{3�y�Co�
B�dæ�g5w�Z��J�%=U�ҁo�#M�{��D��j���;w�X3���@�gcؘa�r�y�;}{�ێ���e�q|g��p���#�@�������]��L�
�1�&[;�@Vφ8��O'Ώ�{"i��
רiRjM�R�<���շ�R�Y"�y+�Ȳlj���Gy�*�5�o����T[ǻ��)_M�4XQd(p��<��/���L��q��!!g���X�����5��!�=�����Q
�a��l���64~�$_8�Z���O�|����G�g�s�kIJ,�݊��i�7�OxL�̵P�T�A��]�U|V�4���lU���F�D+�_aem��_���/�K��W�UP=O�0��+��ĦHHm�R: !��\��%���R�=i����{z���'�Sv�Z{�G뚄6�PVO��cJ�de0�4������b�����b��:��
ؑ����O���V���v^x�<�6�gI�!���@0���3�WB��/1giZ��j�3J��i���Z%���	�"S�(�M�E�9v@q��v���z
h����u�����MI�Ģ%x�~S:�.�=ʟI�z��Z�I!I�)��VR4�T�k{c�?�`Ϭr����k�0��W� `'�V��RZM��^�>�Qd�l�Ȓя2c�O��&l�?ا����J�@�^i\&xN��&5H��\���4�.������
J���EY�s�%�-�y�S:m�%0RY@�m[մ�������kx���V5w5����6)���Pd@�A��,훟�*�V^�QN��b��*�+j9���}�0�~.���V�BN%dؓ
�$.}�����=\`�Η���6����/��z<)�j���9�I��m�_�M�Y,"X�]����A7��0=��m��}��>$є��Ƴ�5�ç����?��ztd{$�~��3����|�N]�d��$ ��F:[���-����#��)�G�����4^���=uNk�i�LsO>Z]-�����)��U���4��\������'G���Q~4�K;�#S%W��u���[~�S��E��N�0D��gb7�P�
= !.�s�ěؕ��M��=i��mwvFz�� ��4w���:Gӵ���H��k'1���0FJ�[!�n�e���4��ߍ���GXFbY/J�U����G'xyz~ŷ#4.s�s�nǹh�B��T��P����x����{Bϖ�T#_(�;O���*��ڇ��
�6�#5�,|ZE��Gs�:0�@ZU�Vե�~�ܿm�P/��e���ݱ��5q8��SQk�0~���A��I�n�QZm�
�^��e�"K�X�,�TL�{e���>lc��>�w��}�3c��[��Pi%X7�����}�ay�Ay�,lР��m�77�2R���y��+���c	P*�2�`aۭS������#X����F����δ�T�Gw����=�]ձo��J����;tfh�����V#DOh"�jN ��
{��
F�21��jq�ay	k�����=9%(?ɲ��W*CQ�����ѵ�A�4��xW�5峾>Vp*��t��c�랱ڶ�ۥ�A8�,���8�e��fO�c��pJ�
ݓ�Q
��n����j�ϯ��_�߷�x�KrA�4I>1�r2Op�'�!>^��s`>�|�P��CAd�?q���O�X��Л׿�[s��`�ּ�?D�f��Ƕ����G�S��]7J8�1n�����~�F�S��=�6ry���9is�J���+8�[5I��Ir
E�\8uj��Yhdu��4.���}?\�&��Ͼ����̰),G-�����?	��_3�c�k���B4jhA�[��e�8��H6��L�	d�����L��� |�D��T˜�]��B�b+��0�e7��$tշ���N�܄)!k�����|���$���~�u@��� �-�x$4D�5K��v3<=_��	U���2��C����C�a仟��`+��aH�T#�aΆ����yrhb��G�0D
bx�� ��T�QL%�L�S��/I l��6��v�I2��%�/�U E��?C�
�������m�]�TƐ��T[�Ab��-�_D�R���{�x>����6	`��h��M-�����,�{1���f����P4�I`����t"��ˆ!+6FDf���V��b��EZ�� .��3<e?�<�e�h�G��.#‰�����\�"�9���`�@Gs������~ȡ��Q~��@>CȞ\�iZ�v�I�&G>�Zy�O�]M��D����W��E�PI\^�Ad�ҷ�s_X���Ǒ��A.��ct�B��>�8�ϖUp�yF�ɜ�U��kCY���[;�c[ij�P
A��d��A9�Z2@<��05�8F��H~y�A�s� Nz��~���j&m�0H��>sm�k'��H�j{��o�l/HV:D^Q�Y(�Jl%
�]��Ў��6���e\c��PI�`�~�E�,��:x����YAK!R��+ηS��
���H�w�I(��vZ!*@?����d�`������v
�L5��C�ۀ�TI��½�b�
�.��g��:��7�?��\0�B��-?�\nK�O�M��N!û⭕p�D�Y*@���C���dD�2V�N����wc�*Ԁ8��?X/��u�˗��p�U�C?�r�&�t�/�u���a�q��
�鸖�Y����=9a���O�O������i��S��	�E<��a�����7	�z�΀��"���?��K6<�v ��	�xIs6p��D���N�9/
L��[�7�����_&��iN����r�����%��)t���8/���Kɉs>���%�j�Xce�
A�u��3�zI��C��%6 �$�"�\nI�νK�|�fr�����e�O&���񥓝7a�K�]����:B6d�%V��  �D�[�'>���?���~�<@���8”]�>��K�U>�]�'�#�=H����t�q2]��n���c�|�{��῾���">X|j�!�?�>��Α�]�r��h�]���������c�T�G��	o,i�p��>=<i\�:n,o�󿏎��[�B�AƖ��&��O���M�l�搮@��xTὐ�C$:N���C����$u�I�a�g"���mK#�T)�/��#��垡(o�.xH��Y�M+O��6�g…�/{�e*L� W ۲ ����<����"�����z�#�S��>�dL��g��TB\�d�2�g�]j�[�%緟R���W�5�B?�v19�{6Q%�O~���4�����ǜ��dum�A��pt`C��rd��k|VPy���Yc8��nۀ4�
���
��Czܤy�h��s��'�d*�}:�5"��‰vk<��
�0�ϫ߰�b�^��I�)w�\��ɬ�e�������eƐ�N���7v��F�%��ɕ��N6aE�Z�C�=h兙�Х�3*�&=nMii���bX��ۮ�a}�w��9ް���l�m�|��n���.����A�rGF��\���fa!i�|��-�[�f�}�P��a2��՞���#�yŮ��^�UʛM"R��6:�Vh���~Ջ�@0�� Tj~�)�c�Y�
^�:�~V+��9[R��r�.�����Tc��{��‚�+�bQ��ec��zT{]�ǓV��.(	�p�M�_̭��J&�g�/;�#;l▖�
�i4v�M"�@�@Q��P�=�~�.b_E��Cf��z��������sn"(��
�^7R�nI�FG���4�������=�Z�3i�"l�b��bkLn�jl��>м��֢�����yrǔK��X�<ؒ�z�vC����y^7�Ɋ��b�F���S��n��RP�B�t�⢿b�\���W7��r��5�х
�4M����u�H�c���q4@�mw]غ���B���@�Q�n�"S*n��
]�F+��t
�_�d(�<ˏ77n7Ya���Y�o���g:�Һ:)N]�/u�z�t
Y�|��X��4��N���c��L�܂A�l� �f��-�3k�¤o*��[n�r6;�b9��ԩ�'���kͦZ��Q)�����[�Z���Y\�d�!���ҫrr�`Q��"���`^�
_��n�V�lݥƪ�f{CcZ��aW�B�0��H�ڵnֺ����]�yi/�-
���,�2;�i�\����Q�\��Fg�'�(�C�y{9�i��)=eoI��g�՘Ė4������<��=5�uMM���2�VnV%+�V�=xȗ�q����<T�߳Y��'��.;R���ԻTZ��l8閛K��e:E��lr�c6y�H�P�Z�H�
�������yE�‰(
}m�����b�����ؗZ�r�+���̡x�ތi��P�g�=�(ERE��\a��U���j�r�Zm4�Fatp���(d���+o�Uu��F���Lo,�,}R�ʁ�Q�Wf�V6i��w�D*�+�m���:=ƭ�#k0�o�J/_��y���uRd[�u_ק�p�)g�5�i����97��B���4�ͪ�qߵ�\gQ�7�v�Ow���\.
{̶��[C��Q��5�q�`<�g6[c*c�R�T~��dg��j�bI=�؇�V�|��	��͸�l�<�\eݎHS�es�_�uKѲ^�7g�#I9���-��Zy��U�e�UÌ{�Yi=��0,�`>Y-�}�Fs!�^�l;�ݡ�./Cv0��~�i�Jv��c�?Y�N�V�)����(�)yκLS���F.5_�+���$XUFr4b]��6ݖL�]`���R�2�G��Wi�K���[X�MG�4w��|���
\�!M�@�ۻ�^���J$���w�Ye,��2��t߯�S��̢z�)��-g1�]WP#��`�ͥ�
��J���1ߦ��y�-�!�My�;ذf�7Y~�̎^��d~,�|��[�%NF�K�.l�͏"}���V�JN�B�)�YIu������٘4�[�Hؙ���m�����ې��#�mAx�``�.�i�L��a�Q���;"��&;���{����Wl$��i��?uT�+��2o�.�Xt�8�'^�+E��^���o/d����c��>��fm�\x�%�&r����z����$_��	��R��5! 3���E$�(�9)�u˼!�^�"�I~M?�D^�@�Y�����D��Da�)�ݽk����0�VB9�O,��>�z<#�d��ؚ��,tb�W��!�S�P��V�߫�\�yK�����=�����%�)�����;\o������?~������Oޭ����%�N���i���a���d��"��F��ms۶���~��eɎG�zUS+�͉s~�6�۵	��@�@��n�}��MIٱ�tINR�y����:d$`3�
C�Y	FtȘ!�f1�(L�w���{py#����А�7r���9U��#�B��~��XO�y����.~�����|e?O��k���瀌�H;��Mq��[�]�\������3ŀ93K�؈�dJ|�c�F�ij��88�
D2����m�1LE�ș���7�<C��LQA>�S�}|���,֌PM\Qd��ON����2���.�a�-�[�4,��]�K�"�� �����+"(��?�$��ۀ��e��x]r锡�g��"8L~>�~wqsM�>��Ǘ��ןFp؄v�-s�x���/Ec�����7���g�gן�����ӫ+2��$c�q|y}���||I>�\~��:�r�X.g'�:Qr��H*�`C�й>��5P)�[
�;!��`����c@`T�xnن�J����h�q0�7?�}x�;?��8��X�.Y*&f$�i3��5�.9�/���a�1�3@=R*���6��1�}op�t���8c�`oFL'�g�YhL2<8X.��������w��ij��~�����������bd�|)���`i1���xvu��߽����� P�r�[�h�=a�E,��j��2fH&�Č{6�6�n@�
� �EӞpM���i�6�h"`V8�9��J}*�U�$#��<���!�顷d�7���:g^�)�|J��\��x��|�1�uH����Ն*3$�_�̢�}�<����~ݞ}�o�!෵Y�����]�}��j�����.A��(���9�~Lo��>�N#H��sʶ�Q]Ԓ&�u�У�P�T0�
���nDe|N���G�2^�F}�M m��>MZGR�`�X�?׫�n
�l&�}	�)���b�*�Aҙ),�8��Y��y�`��J�|�0�Crpg9��� a�}�O���]f�p�� fF������1mC�@p���
>�K�sp����	y~&�rHB,v�i�}�A󀃘�DR����7kn{s]w45�Qw��T*pZφ[Ԝffm#s���M��}�@f�r�opy�OT#�BA��0L�^��q8h�x���
����W�N��<h�,ִ@�2U�(����#F�,�uH�d��A���N�v�tr�� �q�^��{� �P�8���V�zG��ߘ����O3�;|j�������V�?�e%�������uO�8څG�%�ѡ�)���龾�Ԅ�O�O�OM��{��D>���C�b�\t����ɏq�F�N��O�DW�%Tu]^_A�EМW��s�,�]�~��Ѷ�<�^y��r �Ƅ}~V�FPjn���yB1l,����aPr�x��
փw}�1�zp���(�q95�}fQ[��1�	�n.��Gq��b!r�"�b'nf���}OL^�7ъ}���F���w�9'+Dը�z�e�٥��}O	L�V��:����7�톩�B�-SCw�Q�6G�h���Y됊.e�]�֒�����*G�C�7JO	
��i��=)�4�JN���M��N�5~�A}[�JA%K���mI��
��Lz���J��4[k��?���Ȃ��B=ׁ�����s>�8L��tI)��j���r���zsoWvJ���d���&l���I�0��f�RԈdX��bZ�6!&�Q"���q	:e9�~�4�����9��B~�y~c�.�E@9��q&��C-�eN�E�FqTt���{��Ndm������������P1�ӄ�� �œ�q!	Z�LSc�R�dx��bpF8
�F����T�����F��MQ�ԙ���))4	d�WC�Ȋ�$��
���m�G7C���N�%�atN,^5��"��T�w�	�L7�s�5?-�'O�eLՐ!���U	����V�v&�B����tH.Y��Y�xyH�PjI�pE^kF��s6�S.�Y������"��Z��d*���\��,�1c�Er:�3`
�w���YRݰ�P��A�zWe��q��i����h�%D5iY')U�O�"憾��W�%�=�bĈ�F���q���v�pAբ#�02TUg�u+c�ve�gOX�B��YFkQYڒ����"�:a�C��T�a4��e�1,���dS�݃�J*{��e���`�x�9��F�ˇu�����\9�d�G���.?�r��P�P`dW<�H�lXޗ�����?m U�i�w�Y�娴F��+F�hѱ�`h����*c8�~����o:��.���Fc/a��u�|e~-�E{���\lq�mq��[��0(A�8����]��:�m<��6���b�㋌��8k���0g^�{.[(�gw�yA�#��/�XO���Lj���Nר}/�ʍ���Sn�Y[������}��(��%��p�h�(�&���d��p����5x`�>��,\M�`�@�Uoi���{u��mnG�m�o��k3��ڔ�P���0��P�d�_#x��U�)[cˏN�s�q깛�5�cY�o��{ �޳���.�-�'TkiM]�a-8�/���~!��]��:��m/�[�;*����<��vDZ����b�@����"zJ!�
_^3˭>�Mƅ,7f=Y@��N����b�W�t��etpr�?<>�ɍƗ"g3�SI���ƙ����
����4p�[Ζ,�
_Y�=���(G
�6H�i?��Gm������ɤ?9�HܕsV�í��඿>F�����T3�?%뙍b�!������~�b�����;�	v7�ʞ�J�mZu:���^��͎���:|T��?��B��{	ث^���\�n�H��F��%q.��}ؗ��ݷlP�%9bY�%�	��%�.in��
�*��8�����N#%��M�߮k��^m�����V�,��]��ZM�`rM`���T��Z���1���Y�O�?Fu4���7�!�U�[��Y
��A	#�4�ܛ��n@Q��
>�7�s�+RY����I�f93J$r��aL?��Tq/O�!f�^)��sMN�p�.�a��3��o���@v&�$<ÖӤ�bߜ�.�&־��8v�U�ۆ�:z�)R��#��X����ǰ�nh�s����E��޶4H���4Tz/��������׎|��G3Bȅk�H֖��:i��j�L_儱�A�Ŋv�"=��;~��;�)��6�%zu��2�y5����yav;��
6aęP�ZʸdC�s�P�P`��M�Z{Nh����YI�Z���GsGO�X��4԰��.�g�L�$9�Ɋ�����h7"LG�(v?[��q��9�(�2�2t�V�E�|.XG���7v�l_ń��&MW�܋��ע*�!H�ѭ0���?:����5}ϣ��Y��a�*i��8-4;�Ϩr��^�z�'��"C)M?w�ߌ�ƚ�9K������%mz��0.��xH,s�><�8�3� .1=8C���Ť��ª���:YC�d�l��
j����H[S�˻;�#�N'�DJS$0k.��R3Z�?��r�c�o��8����{>Ύ����mӘ� �8��9�ٖU�������=C��Vzݳ�����E�6�?G%[w��=,�[�'�`�v�c��Tk4���_?����
�ztղvh�s�ʆG7vܛ���_�fd
2�x�;搐�)Q�dž,�4Q�@l�ˣ�Z��\��^��隭��[H��XF,2�r��jQ���-L�&�V���w��{`�&�նL
�/k����i=[i��#��pu��NE=��G�E�;F���Q����5����$���)>���$��i�o/
�?k�H0�rE��Amv��8�!�qd3�G�6�C
�J���Xr�PnˆX�ګq��GN���.q0�ϟ�ٓ7�t@�h���Q�+%�L3��J>=J$ȉ�y�b,'�T��	��@�=h�{ri(�O�8,Ry<���&�\���H���	��N��i�N����^�L�<}n:B@t�}�cI�)�l��i&�k
|�Jm
,_Z��Y��Ԯ����^����HE��mPJ��/x��"�h��yL��:�OY�E�[�tK���E�tNX �k���.��@�b$�$�G�
�i�'7�V|b�B+�g&��/��nU u�UƩ˗�:|b�A�_E�6ɺh�䥮�i�S
3I�|.(�'N�ϠN9���Ò(؉.�Ep��"�*�ɐ�0����h����=��1�|����r���j��0
�����}y�c�x�*�{��i!in�g���
ߣ���c�U��#��W�/G����P�9�ع����n�����d3L�l��K-m�-��(�E'ǁ�Gv�d嫎}+|���hnHuk��m	±!Uǐ^��\�,V���-[k(�^m��!�u�@�o��\�3h�i3�x/v�KڇwoVf�������j�0@Eo��6��y���B)�B�X���+#yKC�w.�ٖv�Ra��͒uk�H*�#�}�!W�ߒ��2����.���Gx�6x�oZ�F�������, 9\�.h�ۈ�����zҍ 2_M����A�mH&����Օ|�K����E�oZQ��Q��A�lR��@�
h�.�Йz���Y����{!؋�k�f�
ۇ��dbh�	�!r�`/��E��4x��!+�<abt��/�`^� �e��M�IQr�2d�6+�\�FT��X��
��F��P&x�C�D�ӝ0��i9᝽0s:�DBN�4�Z��#y���?���,`(�{b��%B�EZ��gH��oC�IK�}�%�U��}�R`��F��o������lK6F,E�9�*��]��v|˜�d6���b�|1'{G��_��>�|���9$��G�0���	D\�֦�����6�<D���lX�O�}fh��}���'�
�T>��*q��Z�ve��sWzy����G���=7O�.":���|�|��-��hMA���R^������z�vZ��i(Ӵ��>��Y)��+|b]��7VԢ�����װ?	Ab!@w�p�=�O�@iՅ��7x`B��>X�#=ҵ|��j�n�-=
��N�d�<\.�:�e�7�ͻ=�ݾ'��U[��k\Tk��l���-����P
���N��*�U�W'�,��k�����V�G?jLA��+k�P+�.���O0�̢��P�e�	Y�J�Ţ�|�8����a���^տ4����`6c!�	T>\f�c}jD¯�zB�?C�J����A�����B#�f��U]ob7}ϯ�D\>�6���TB�Ъ�;,|�[�$a���=6�%m�-�g�̜934���)�2����)&�f��u��7dYgl�nz?�R�ؑ���Vڍ��d\D@�rg�j�ҭ�E��L𸤁��~�F)�l��/8����S-<���#�e���zY���!%���c��Z:Rra����Q����ܡ���Rh�e�y+[�$=	�5�
�C�p���5�g[82y�q;����5[�5�.�\��\�vL�QA`F�]��\&�\�g@xit�X�>�b�pD�p�K�C�L��H{GJ ��ߏh�^mz�צDek@��g	J:�oU-@���ӻ�ٔ����8N����-?�J��@F]Vh�C��fܽ�Kz���PA�?�L&�{SJ�t<�wg�tL��x�0��M��<�	}��W�s�tf�T�H��v�Re�O��/YB'$h	��w3��PF�b�p�Nl��!�\B�݇Ѽ?����(���6�F�VBb��A-J�F?�`"�F�Mc`�d��=e����6������V3i]6[5�M�C�����9ݢ`ʕ��E�Bؕ�Q̗�K����Pr�?P��$�?���m'��;g��Nj��W��T,�G�� �ɚ�c��y
�W�%�}��a9%xо�R������F�$�TQ�� �|2B���!ϓhm4�Bu��IZo/"��.��
�+e[�?	+1
�9���|i��mJ��4c�&���^�~o��'��6ֳ���� �8�K��x`_h�U�j��F&,�\n�@��,�]�|�Ɔ��0/��*����`���/~W��($4�Z��P�8�
�d��>@%8:&9A�
��)���]+.X���[^nL�*���a�Xp�;q*��%^,�+j}��tU����j�,7	�����9O�q���V]S�6}ϯ��NgɎX�]�dC<
vj;P�V��D�myd����JvHBBg�f0F�:���%j�'��r%�l.�߆�n���(n��BRa�[$;�@V hE�#M;�0��J
/$��"�EE�P�H�^�YA�
�\�K&���R��<eS��aJ*r&%M�����"�D�"N��%+f��"e�P�PԹ�JK��:/�U��kN	O�rQI�#	rU�$�j������K�P-X�)��[-o�:M2�r*T��d�:܊Ț�LH�}�@��AJy��i!�:iǘ��r��g$�6��	S��2�
�B�*���}�����=���ȁ�3�DN���;���Ǐ`{��W0Ο�	C�po�#�#``{���h2p�k.'x~#�ƍ�,�
$�(����_���}���^{�r#O��B6�� r���(��$��J�
�#۽q������u�¡=��k���E��d� �K�ڗh�z�8�H�ؼ�1lHsd@8v�.�ԑqP��*8:L��a`��ר����U>�/��$t�|�C�d��׆���Ї=	�����i�_?�y�x*%:��
�
Td�^[		Qw?�6C��H��0Ϲ�׎�w�������ic��P���;�|����[Cd���p��ܺ�c���&��N��&n���[���+����"'b�
���[-Ib���ƒ�rnA���B/�\�T�UIl4<Q//�LR�J-l j.)���\HRȋ]7�!�2cAɃ���V�)/�Y��
�s�m�OIβ�����g��ě#�/���QQ�4���Qz���L��R�IE3VPu��^��DZ0c�<������"�ql��?���Rw��H����䢓Tu�4~`�<��VY�c��th�M�q�⥔��Ӟ�&_����W�3�Ej&<��1��N>w
X?�;�Ճ3���X��{_��~�����*��4h��-���x5����W�J��"A�x��~��H�f�^��T>�����6��7�wr-�\W�V}r+�������ޯ�o�u=�4N�U��5��u2w�H�G�j��sP밬���nq�H%^�3)��#��]��VF*i&s��M��i^��+P�Ö�fy��^T�:1�yfJ2���>�\ۉ9=W��˳;�\]�!���y� ��Sο�=LAg�8��<@��~{���,���(pb�p��E��՟�z�牅+��zb�d�K�|�m{o��K�v��5��F�)M� ���t�)k�_���H��SùO�j�-~	��M;�	��P���a���9��]i�%.W%}K
��v�,��N��ȧ�eoJe�`��aP��x�����y�*���wV}���UMo�6��W�K����E{��d��	(�+�I��Z�mb%Ҡ�$F��Zq��|h،f�͛7�������Zo�����05f]Kຼ�����[����^VF���T�ZvN
BWе���t����Riaw�2�i������s�ҘJ�T)c�J�J�(�d[k�U���$�ԵyPz
�ѕ����<�t���}O��zbV�JBӵ�r�X�{2�z�6N�r�f�B�`�q�YW��Œe-T#���D0�.OD�ڪCr.p��R_eeʮ�ډ��]b?Z,4�I�D�>��F8�ᨸD*M�Z4�hO�6�6���}ezgl��w��4?X��+|*iT�Jc���:8�r�)���њ�{���'ڭ,i�0N�Y�(�����+��b�s��Iqd�<����whd��Og��8bYA�Ӥ�xQ�YN0�A����$w���g,�!̀_�c�x� ���|<	�Eē��� ��_�=�t�S�	��Y���`�c^��^$�n�f�<�
.� ��"��9�/�y��E���aI�,���Nz���j8.���Q:_m�3T��)D�d< �|�B�gԅaQAv7�as����QpL�Ƴ��&���]w�$_�����4M#/{β��
�4��-r��DA��¡�Nj�{	yR�,[��&���[T�y�ӄj��K�;�&=|7p;c�<#y�jɑ�zaq�)QL_�s���i̧,	9�t�sv���99p�'�.|��4���5y9��]��N�{�������g���Z\��\bq�к]M��7B�)�=�C��5�䀋�
���kK�+kTu�є�v�O����N+\2����:�ZV��Wְ6���qlp}lޱ�;�)�}@Û����z�!�7<�y��p �����`��Oh�.E�mmM��aijcG0�3z"Jy�=��S+v�|tW'��ދ�j{����x�}�Y�j���ɦA��#���A.�)7ۭV�R��B�]tW���E�c�Ρ�U_Wto��6�*����Y����l��U?�_�7�dlk��)]+-��Z>�=�X�e;���*��OT�6��Y6�*�R�^���_��F���7��z��E��>�v��?��]���
Ryk%e��,
�]�_K�@��)�7-����"��m����۴F�{5��ǝ����9�t�)��(�s�k��)�#IxJA��PAC��T����8�0Ԑ
����c-�i�d�%��)�ª��Ȯ�
���>�J&5�?mp��y7�7W�|0�]�z�׍������^_]`�VZ��ls�-�x̢��W�9P����8iWg%:Az�:�Qx*.O�ߛ:1�f�@�]�}��د�b��U�n�6��+�K�p�EE�E�D�d�%��Fу,1	�4(*Y��w�V6�.=ԇ�g޼�f4��8���������g�9����5,�{�4�\�:��=x�k���KL�L�[�o�C0�Bm[z
�B���dkl�p��‹	��|�vC ��kͽij˜B�5�ߙt{�M���X����܋��8�J�))"�p3R�Ϸ{p����j�
}@Q�FƄ]o�3]�~�u�4z�צ��㴲m�����6;�/L���Jն��ʅ��_\iTٺf�i�צ]a?�x��A{Sw���axI�N����l��N��	���.������������E8жŧ�F��\�ptǰE�8�p�����}x��'��nh�0��y�({���Pz�
T1/���,nE�S�m�CR�7R,�%,�,�R�S|��R̪���`>0����7��XK��j�	�����j
"O�*�b
�yQH&V��Ȳ����gB1����e3��rK�E�S�y!	����R$U�$�+�.җ
�dL�xz��.�[����,���%��.�4�ʅG�l�q*զB�$Yo�MD�ٔ�Ԛ'��GQLn�#��W����[�Ƴ�v��T���;Z���*EY�E�F���"��3d���U�G2)+Y,�(hF�yV)-yɥ�֥(�s�:�Lf���"'�����4��1��%��썮1�C�{Iy�%��(�M/�|���N�	�ϱyBQ���q"�l�SӐ[l��8OcwÁ������8J���K����Z\M&W(��=����k���Ǎ0n
|O�E��k�5$��J�a�X2c�/��םn�
�cq�غ��
v�u_���	-��b`\:{������ι'\yOp]Zv1��ֻ=n�\m��,�w�	x[7O�
��h\�
�"ȼn���?����!�{��G��k�4�t�^��+��;˒�4���KO1��S�(j/�z�*���j%����Z�c�	�����>�m��A4�h����g|�g�j�X�����M�pVZ��Wp�]il=�S)�u��b���l��F0�R�Pos��p�\�{�9d
0�t}�Ԯ�R�I�J� g23�kB������
!1�s0�]yw�
?�q�p��t���D����qe�+��A�m]!.�~M�~L��N�CU�@�;�'�u%Y�B��l)\"��B�C�QвI����E1��b9vc!E�4�J�9��Z1΅^�p��0u�u)U�����)p,���d��g+M��֩A.\��!��͡�NV��r�� �tډ2\�E��e�uL��<�Aft�m��B��u������]@�R
��J:ܤ=�*�m��pY@c<�*D8(����N�XP�.۞��H�*����n���ڰ�9���./������=�Տ�~p���O懩JuI�>��Y�W�Սr$���17�G�kOy�r
�3���k�� �3�:�: R�F�N�b,%Z�����	��*�@$�=��VA��+�j&EH7kQʶ��F����̱Ey�4E�o1�Ɋ�|E��8���(���ν�.c�raC3LڣLdz�����C?b��
>We�n�U�I�w�9�֌i���q�V�<GKFJ㷿I��#�Ѣ�+���|���i	���jNѬ��ꌺv
�c�P��Ԥ�W`�M�s��q��q�KhM���{2�ѻߒ���h�m�xqtË�	A4����ϯ�th>%�B�o�>�K�>��ߏ-T/�㮋�t&Kd��WmO�F�ί�‡;N	�WZ�9����R�Sہ��B{���w#�U��Y�!���br���>����O�	|�y��jm��OO��W������@%���E~B���\[�Em�V�U� ]W�p+�x�K]��ҮAW�][B)u.�2��^	؈��֊6���9��5���@���R� �*�t��!�$��F?/�ˎZ�sem,�e9R&p��$j=B8J[������cW��_�B�Y�e)�������tD�ܼFr[.���Rke�����.j�FI%����0ϞwC!�ڰc\(�;M��h����2iMc�j�teP�,%�A�W�
R)��x1G����D�8���=mj�و��Iʸ�RJ5�eLg}�	K ���k/�gqt��F7(��f71���0��� N�Ǹ�1��(N��K��y�
��� I ��]Φ�PA�)��П��,��b@�2e�,ŝi�s��>	�9\�?��ވMYz�T��4$u�QL@̼8e�|��0�dz(	���ğz�2� ��U��L��t�\‰�� &vͅQ�L��4 u��1�?%���|t"���(�>�w�K�Fy�M��M����0�.����{������K��(IY:O����s{�W��/0��y82c/��zDA��|��\��4��,eQx�1�F!SO�����lnr'���&�h��z�zL�u^��	z�Ow��Jt�3��^��)�B?�
]�$8�ౄ60�3�Ν�4���u���=]`���o�c>$�M�>�z��bpp0@����ا��^T�����%��d�h���$���(�lFT�K��N�:�>��Jֶ,x��&l��$3�
K�E*`��.@e���E�cV�k�x"$RV�;ҋ8M������\Vb�? tc�f��9���g�כ��_�;��i#�7�6��VwJ?�fݵ�P�>�o�:�Rmj�-�z���M��a�®c��&�uk7u7w��Dg�M!n�R�qNqapb������o��������U�vڿ���l-���~��^�j%���>g���x.���N��W���9��BWC8���q��\L��M��2���܁8
F����&�6̔/M�)6x	�!^U|Q�����~o	,xv��t��~˥/�}��
����ꮑ}<|�zp�9��#�s��bgt�j�V#��-��69��Ƴ�
�|V+r�K��۰��;rS/pP���}#��g�ؿ�o(�*|G��y.�3D�|��6�ޔ��ߴS*��x�Ny������߬�3�~�����Rf �
���s�M����8�<�\���WПs���|}�*���m)�J�����=س�k@m槖&��đ�-l�4�Ѭ�)8��_���KX�
4�J+���X����fTt��u�t����R{�UT��@���B?ދ[B�n���9��=�u�a�[��1�[��߸��B�{*���".q��/y)��!�e��ٸ���ٶ�{\���^���ۢx�|'ˍ�,W��+��0�
��UMs�8��Wt�e�)Rsښ9[����Jv�[���L>jk����035��%��׭���}���_{���:��Ϸ���ܹ�֐��1EmK!�7��O��1~+�X?��0X�Q�5t�lG��ڄ'���Wڸ~�G�l�-�>|��(;�؍�+�Q�ڛ~g��4��ݓm��Հ��u϶{��u��C�$3|9s�׏=�͙Z�C�� k�@����ġ�#�ӹ��f�����1.Sw����n+�3���D��˜3�m �ƅ��/.�tRٸ��3�P��6AA"=��j���b2���q���4�w��0����{,����;¹�#�+=n �pd�O
�
���`���G�!m`��w�ᙻ��Z����9��sKu�����Bj����� �W*���Hh�FPP���J�-�4JS�%x�JN�"W�a>D�?�X��I��RBk���*��Ce�zD2��2��|D��,/$�KY`g��B�OR>��P�?��Le�)g��8�,W�*R���4R�*�*ׂX_"u�Fr)�18 /�;��Q�~/�q�L(�p)��L�i*8]P�H%�e��b��鈁�J�k�" *R��	V�?J�C��h͡��A��R�%s�%���Be!h��I�]u'c��R��`\�E �DE��a��R�`��
�T�*d�ݠ�pL#�N��yƚ��#r�fh�#TcD����
�El��{qq�
)af���21O�\d��
9�K-nP<�y���H[�\4p�}�ΣP]�3��;�O��Z��'�/N��\]M n��O~xm��>���H8����b<h0�hQ,S2���&�_��a�czU|s7���E�v��l�];���0���x`\{?&�hS���VO繀��H��b^��1�0D1@�1@g��zK3ۛ�{�hV7��Ӣ���K��R|��A̩�7�BX]����`N=��>8�y�Up2��/�y�B���׫��6�
�x��[�s�Ȗ~�_��[�j2c'���S�@,�(c��=��}BBQ ���}�[ �87���}�x��V���Z��ɸȖ�*����4g�`�U6�7s��ɧ�j��褩!���*\���p���1\�Fvg��xm���*� ��~���p�'Ƹ0|�͕}�΋44�8X�O����1I�.�,&F��xh\:]�k��i�}^�x�'��uBem���f���Ix�o�\�ċ�V��{i�i8��_sRLn�w�U�z����G�^˯����Ld�I�2��X������r�砠��NC��YsK��
�@l�A��WY�6���>^,7�ɋ58
����Ƌ:���4^��lw�"w��
}�?_���hE͜Y��΍�����0���/�������'����d��a��d?�v;"������o'��/��;<A��B�i�����D�)$���yq�Y�v�G^,�?~o�<[�`�<9_o��8<N�̰�x�������m8N�#��e���S�����S�
���z$QM���	{�x����{���_#������0������ϱWj9��z�im�}����O��m<ɧ�F��I2����j�u���]�΍E�?�4��QxnT��_Oa�7��G$�\�^�w��i�||�5o�7����m3vg��y7M��I6��Q켿]�5�[љ3�D�E����;��<]�1o<?��^9Q���/�3g>5'�;�\g��
6��݌����ٺv�>�nά�]�v��_�2�]��I������-w�D�q�Z
��Z��߸�;Ex�qg�΍;����z���u����ֵ�
WX_�,w�\�Q۵���N����ٳ���;��=��+�w��ͱ�著�V۝�͞��*��c�@�k���
]mz�p�N�r�l�r�z�r�o���W�L�t�x���?�_�t��ۘW:vByMwD��1�Ӿ�
�<h(~o�����۞qo�qX��m��Ab*]Uk��e������u꺦-�����z<j޺�����V-�gw�k���2!��W����� *�'҃����lS��n�Y�pM�z�z���Sx����w�B��4�A_t���k�u]�/k/Z[�l�b��I���
]�>'۹v��4�����i�Ŵ���;
�Y����v������G�wj|��I����7x�91���Ȅ�Г����sO�Lȷ)|��=c�r5{C��6z�[�c�'��,�l*[~��.�L��.�lP�bw�7HJ҇�PG�7�ǂ�����~���@�3���;�S�qC���c;�WA����om�k�&���Fx�h_�:)�O:o�Y��[Ȓ��
�
�눙R�F��g�E�A���+�3c�yk(� �@�.����3��1a{� ����rX���6T>��f�Ʃ?�Vb�c�_��] O�mƌ�M��}��
T`��s>w,�{%OA
$�OӋI���6R���:}����eB_�XϚ����G�W��X[R?�s�I^B�*���e�̐�b�Lɤ�4���->�d"�6u�=+� i��[ek����J�A�sAHT� ��s��ԹM��Ə�*�͏��]�}�cث�`K����X�1�K�&m�X��#�1�խ���X:؂�V��t�u��%�Pu1	}���Z��Ԝ��Ԥ�!2���]�[��W�9&9:i�z�e��藖��dI���yOd��-UUmV6JJ�;��2i���*Y#Pߐ�1F�oY{�d�G�jRF嫪�1��u��+��h�~p�������9�����1=۱�y��(g���k��}Qr��Ϧ�Yv�cP߰W��@��g̠_�����"u š��Q9y�nOɵЏIJ��y}�F�?���M��:��օ�3蝂���4�S����H1p,O�o�_�>M�5l��.����8T��
��|�iB��!�.�}�Wl��V=�Ӭ�~
$FY�$��~/w������z�k�E�{���k���S��uX��7�9y������Mv���t�g�<E�y�7{���d����߅G�K�&i�o(�2�m{��+�ƻ�!�O]��3��m�-��`6j�~r�lG���u���ؗ�${��t\�s��V�O	?��C�B���u�'9�J�>8�`���R�$�E�C�G�b���R=iתӇ}�kI������kbT�	���E]>�1�B��*��O)�Ʊ��&�W��e̲wR�U��Ϊ�]IO�<b�>i"����b5�Z�����̝�7E��~P5k�պ�x�zġ�E|M�?�-%��e��4UN�t��QS�����hY�z���'�<��{��ZF�Rƈ�"�L��Zw��sv�.mQ����g9��Umf~>����Sj���%�l�t�S��Բ��߫�"٪��z��ze�
�����ߩ�\�E��������I'�����)
��˒�֭�a?F���h�^>8���e��<���/�u�����BB���y�x~�೹����iށ�����V
5��o!^հ�g$�IxF���g$�IxF���g$�IxF���g$�IxF��H�n�ߴS�}��x�0o7����f�c���m�f��d��I�5<�X��#Q`}*��<�x��/�M��dx���t��~���o���e�B-�	18�򥪓oYq��u����?�7�s��@���e+�C+�!B�z}�a�����/�T��6d�<�f�WK�W������qx��“����aP6����/΍q��zo�a�����<��?���_=�e>�6�~�$�*����6�^�$�,�'����5Me�q�#@/��j
��d�{��&H㥲>�.}2/�)��!�	��G�����-�x�����&|����k���כ�pw7>3�@�M<n�>��l���o��l<rT��w�nW��b�N�q��M�ϳ�ƅ`;<�s��w����ߵr��W.�w���@���@E����A�??�3����[��QO"�z6q�t�ġ��[q��x�{e�7(�l�Q(ow��x&��~.��p�}=��I��%�����f��ގ�W�w�{�&�
3h48�-�gl�5&�R�'�GhuwW�-�x�y,�oHo��϶7F�\��8���G0�Ut9���J�	hz��A�$2��^%7���k�4d��9o!���jO�A}����0�]��C��yB�K�l�1��(ز�E�Ϗg�d�|�<���(^�W�Y�o�!������
�m���"<����'�Pl����U%�j8^p:���b����OC��Q�-��o
Kr��w4�Ds���,������'��;Z'�v
~���:Vᨄ��'�g�
	u��yÖ["�p,��]������MfK,m:��^p����6�u,j�e|�cb!p�,��$��omB��8ٕ�3�m�(`k���a��w
��3��P��K����	$4jR^c4�lq������-�R���W�#SA���3ݭ:�kh�hݐ2�C�G�ձN�C��f#����d}S�3�U�,pK]F��s[�3� tmr�
�Ӿ����	�Ű�@��u;@We`,15B�<N�mK>��%���|Ht]z�K��+���k�%���W>�Y]�<
��y��l�l�mѐ#�U�cѵ@D_׵��]�M��-rL��HS__������ˑ�ҡ�˕��^�&d�
t?jH#�C�k6�k$��\�أ�W^����^t�ل7qHxH�*t���Q\[�f���׃�mx�H�ұ�˨����)���N�CZ�	yު��=�r]�#d�x� �t+=+X���!��ZCA�
R��,�Qn��@�Vt
��ұ�6���������*��5�Z��Aǽ��1^�����?�Q���S������
��
�-�!ڔ���W�n��������0&����-4,)����rmdw�S�n��soƮ�=��W�n'�}�9��j
��}^�x���+�n�\��SД��D&�?-^[A7V�����\5�xe�r�Ĥ\�����ӹ\`�#���_@��Qw��[J�t&�L3���
1���t�����j�<��:��r���{�������՗��Ww�Y�[�r�k�9�P�*��+^#��#����x dW�:�xB?&��k6k��ʹT9���~�=Z�
:��a����!�g�ҽcI�]U��5�;�X��
�����ק�Y��{߯븪mr}8�W��x���뻝�Et�f���:�X7�W2����ݙu��5�p�?F{�����lW{m}��n4�����׊����uC���'��/�<�S!��'����i�5���^�A|W�k��o�<^��?��?�}4����wA���G��!�;�\e�x,o$�����*��8��:4�ˡ_���и���n�|�ᠵ�r%�ڒZ�es�����>4|c�sp`iJ��p��N�i8I������Ħ~���E��BA����L�|��*S��Z�X�E�6�4��''_Ϙ^Q
�W���1�#�/�U�/����G��!�~Z~����ڌZ�,�_��_�| �̾�8<��WK��6��W�{\D뤷�(�d�6��d��(jl��C );B��ޡ޲�W�bȜ�73����ɣ�KÏ�#߿~�y΀<fFK^H�p�6����TJ��`ΐ>��=����2n�Յa@�N��ߣ>�Q���$����>��@g���e�FI�{:�B��+\����?>} .���w���
�QR���rl�4<��E
ZWɸ:z3��'�$(̅Z��}��̴�}��c�U2�����%�Tۻ�dA�D�5�X��r�hG��;B���~Rv:�t����J���J:Zz�/�/��O|Ь��]8LZq��ߥN��(?����$'�"��ȯƔ9~��U��	#<�����U/�TDj��j���fR�sAdZ������#]���<�R������i�:�+o�g�JC�~�R�Ǖ9�t��y����]}�jT�B�4J*�ή޼���v�����!�w��)��C˩�t7��r1#W�L��(8�3/̜�5,�QH�����͙_Ns�s	�^%���4��k'OtM�_��!R9�@��\���(�섾���Q��� �G"�/3�5d.��$�5Hi�I?�w���BpLc���T�`��g�&�o��Sv�A�ghh�P D�lx�XЭ���]W���
��Oe=8��+L屇�p�)#��[X��?���PDz��C��2��Q��uuI7(���盛�H$w��~.
,7=b�;#��X�>��D�������Y��M����((퀂�hK�lb��ۻp&[SєB�j�O��8�Z*���q4C�3�'I���.��u!%5�°fq�e.Ʈ�p���<�DY:�N�<�u�8���B�t������{�M��Q�nR��o-�զ����Lu,�ej�ބ�2�.?_��Ŋ�m�z�,Ww$�*6Q��.З3�.�G���c��7pt�Nm��mg/���O����b�k��(�ۖQclzR�ߎsO�&�Q�-�1�����$��rʸ+c��,�
����(�&P��O�6A�p	�6:j�Fg*
x5��I ���=}�����_w��t�"��WmS����p�[�
�[bRW'lJ��H���V�X�sH�h��������˲�u�jM���O�L{�f��P����+��j��K�7RZjj�$���r)
%o/�g����Zo,�����������HUc��QXf}"?�ɉ������R,���F-�tI�\�YR%պ1�to��V�u���nH���(�^���c�HI�4��TF߫%G��$p�\oU��L�K�J5��^!퐟O���V�^�|���Mm��Q�B��Q����Ve�	US<�y2��{��f�P�4���v�1�sq.8����(;��ΚB�V�6@>4�
�W"���w	c��a�
 �
J���Ə��,�ކ�`L���f��F�l�1�i:�ӯ��	ȟ��a�w�8H�b
�g����i�S�����G��QJ��:L!�F=80�kM�.�:�GW��?'az�^���]��O3?N��|�nj2�dz(	����h��mNa����4��ʟL>_�PF�4�C8�	�p�?��38�p�R�xz�6�9�Q2F!Zf��Ƿ=&�I�9�pNc�ڿD��_��EG�y\�� %��'i��m����#>	��(H�h%��y�`$�{]T@u����<	�����YF�#��n@<��=vlGS3��.ۀf>\>zts�(f~k>ӑ��Q�\&Af�O��4�����t�@�@7a!}a�ak�ƿ�h�b�G�9�{.�^�?~���<*"	�r�:������ϥ(d]	����j8l���۾6����_���
�8���H�=�<j�vƄ���%�'��k���D�K�SS��Te���-���ƻ�	��(
aș�nT�A�˚���#$-0L��ԛ����=�K&n,	ky�����\�`&�&��h�@�����S�bP�R�`'_5�ҵt3�^ՍȻK�M�Ƙ*1�p�媪���C��6gw.tS.�s�{%��6����_y��P۲�pOl:C�Q��"�Q��{�7�6
>�Tg��%�l�\0$���Vព��.�
�y
��L�"﬽����G�_M��2m���3�(e�l!6�*��i���q��U��B���/t#�T�^	5��7s|�ﴇU����rG�S�;�P`������+�c��mD�n��JЉO��Ucl�_W2{\V�!�@��~�;��u�o�����`� ٠r�n��M��jp��w?�7�ȝ?Sme��w��O��NJ#����8���w�sw��$�t�?d�}f��u��2��#gj�1�lC/~��}�]�wu�ek�S�i�[B��9�A
\ܮ#x:��F��\.�
��B��m/�P�r9B��ږP����!fء��G�C��hU������ҊrD�c�DH���EF�i��'~�}lqϭ�V-�fH'��>kC�����@�����X�*�!-r���d�C�+=wE1��FT, ��V.�D��a��9�1�6C��릵e�Ő3�װ�D�(�ƒ7|wX3s7\�<�	��	7$ѠK��>��'���2�k���5(=����!��_h�cW~�n�G�:S���g7���|��o+��CA��~ߥ��K:�����/�?��\���=��i�Ϊ��:>�hffѬ��.�����4O;���ϗ����K���R�ܓ�^��=>��'U0�(���)o�'\����b^)���6SΑR.5M���]o�f��Y]w-��6o�X�������}]{Ջ����wA/D\xO�ҋ��뷔�yd���[iH7�\�m
����r=�����ٟ���V�n�6��+��a�@��m]�]T���,���4(�.-16IT)ʎQ��;��&��
4@i8|�f���e.!�p�kr
����
���g�%(^f\����܇�'^�Uγ��$OV{%�
��|���;�J�FDZ�p��r��5W[�wF<�Vb�h!K`efƒ(���J���D���*jvBo@*�_6ڠ2"e��+�
�5&R)���h�4�ሓ�r'�5��̄�T���zd��j5ȇ#�Tf������T��[�t����Rj�r=D
9����6���0h�3QpejO�`�W9�<��?\���ɴ)x�ٱiC��u�\	��/��
3���8�dFc�Û�΍��"
o�L`|�b���b���x���p�	����""qat��)�G��
Jb��_Nh0u`�L ��&薄� �t'�70'�7�WwL}��ۨ74	L�����-}72(�e�c&�	�=ߥs2���@nI�@<s}���B��AQ$F1�	�u��k�/1;^�<,���ģ��V�`Znt�� lL~^���ĝ�S����c��Bo��!�E���8�	҆iNl�c�R����-�2&I\��`����˘�"����������;,2uq��V;l�إ0��FhS��f�"S_[5ה#��y�k7��L��|! S�NI���;�l��m�߹�.m��c2;ys��^�7�Nn���������f��A�z?���u�p��6ZW��p��
v��Z�>}�~hxت��u�7���(�(�d��͐U9�ہ;H���&g�Q2qb[�`Z�1o'��U2Y�MP�%�w�?ή��-v����F�
�ٳ��:�P)rQ���s�.�zX��l����췮�5_[��O��r�.G���peaF}a�K���Bե_��X[�i�8�Y�����#`
�aW��w|�(t�U��+̸��\�6�J>��
��n�
��%�J*�J�����m��
������~�$O��F?Q�Q��Ua{M��(݈<�;ب4�j^ %�֟��ܨ�P:=+It8$CVUx��'6��"��b�F~��
l��1�37�e�]v�M�:&{���λm�Zɦzo�`�cWrױ<(�v�����>y��|�tl\)�:��ex�u�8/Z].�LO\і�����R����]����d�ޱ�h�ؕ�t��|ם����\gb��=��6Cu����qKh�JQ���~����bem����y��*�����_WZ���
��VQs�6~���I.��w�C/io��bk7���dPl��B��t�w%�&��o��m�Z}��I����.!�q�k
�>��چ�%(^�\����҇��'�
�<�#���d}Pb��p�]��o�s)�I�lnQ��n���秕1G0�Ħ�BV����QA#[�qkو��<HU6�ށT�_�ڠ�2"c��)�\�Bk��V�Q䦤���(�^T[�d���1(f]��y~?�ր|8��=�Fc9�a��m䣙�0 ���w�C4P ��yk�{��
&J�G�a�|��)�3o1��'8V�!�2kK^ivڴ	��y%�\	V4���
3�/�8�tAH��t���9��;:#3�ރE>/\F�������n���ށ��{o`ȯQL���2�)�G��
RJ��_�h0w`�J!S�钦薆&A�p%���$����;�>M�m�[�&�-�s!r�z+ߍ
J���0!`����]�$�1`�	RH��]_hQ�0Hc�ɆqS��S��{�����O҆i�$�(>�!X��;��M�/+��y��Kw�U��7?��8�V1Y�䑔d5MR�b�0Ù%>!��Hr~�X�V	q0H�:]U��ԡ�OW	�$���WQJ���)�L]\=�l���w)��n#���������kYs
	��/�0$�����B@�>���#�!4@k���>�z�v�!\����T�%��;v{�ނ;��&��ODB�d����&���+yS3�ೝ��d������Rm'�?~�abxr�᳛�hr	��I�Q9Ȫ8�&�v�
�i����`�I2�c���6m~�\�ǣ��
���g(�ؽ�éw-,.�-��&mD�_#�	G�kT�BT�f�ud��&~:�2�r�{�ߚo�M�'}�
���!C}���`�k;�Jd.�N|�S����*�K��̪�Q�l'��2#v~lx�*�����C�Ӹ�z���B���;]��L5������O��p�ո�eol8����zc��Vɶ~k�d�KϮ�gyP,�G�S�:9�ϼ=�l\)�z���x�x�,���*����̀�v3��C���5�7��x���vl)�����o�6�G�X�߃BV�\<�w��~�T�k*솅�s��Ec�K���+���ll�>��sWOe�v�^u��u�7B'
��TMo�@��WD��8)���T	�8�"�׵wl/]�X��/���uB��I!��̼�z�2C~�Y"?�ʅ֮��~]Zr�+2�j����%��o��S����UU�9yO͐Ec9�[)3��N���L��h~u�L�R�����ѐ���Ou�w��-�l:}~d��ƕd��萾e<������|�^�э�X��T�� �2o/~_\�Ҋ�����D7��2N��$���z��~TiՎ3�h�����2<Y|�@@��x��Z�5< _Gϖߡ�
]H�ja�m�*��T�"Gj��I��xZ�9܋ds�y{@�G�����0�ɧ��nwf�k��i���8�Z��U-|l��~�w�?���>�
\Mg7c&��£�
�	���p�[w�T	JKM-9Y�`�
Wa;̐P�RY�:e<KJ���$�?�5ʤc�$�F��դ�&��g7��10@���pF]X.��B,�+�Ľ���%e[/��|=u;�O�c���'��*Kf��Loe�tɫ3�����WfIz�m=
S��d��f����޷.Kӊ��ca��?
��]:��8�%+�_�%�_�7CǪ}����wyp}F&�h-_lҍ�9�w�G����X�T��b3p�!�i�|^߇5yP�O���=���	�=��g4�	���{R�&�����<n���f�7�W��7R�
��_��'�g����B��U��p��z�jE��^ѝũ�Q~O0^!��	���b����|X�D5M��IMB�bz|��߀�=���r1�^��`6�Reo���UKo�6��W����n�d/�%�& K.I%�Q�脀$$�-��;C+�wsn1���p|uy������O�>o����o�3�_�oA�]<��Sl��!��M0��t3<O�t6Do�Ѻڱ�}0`Gn�&�<ڱ�G�9?�6>�����#���;�m	#�E���t��ݫ�p�ۈ���;��	�n�,
�B�oh�m���n��i�:ܹ���j��^ii��@�ot�nM�;l���6�Y�n���SFp�Q�%�&}v{��h���	�s�`�ؾ]�އ�uC��mރOF��6���3��M�h}lC�>�jߒ���0�A'T����P
�f�p�P����E���;ԉ�8��p��Lx�
‹�Ry�QKu穰�S��0y!�
T}���㵬�D��op�C^�7R,��uYp��U�VZ�y�k��Sx�SZc���Zr��� V�R HVi�U��˦�"Ā��R��иS�Y��x�[Xq�/�+��R�M���B:�EJk&�ț�IX7r]+�*/�X�b����4�%+K�L-��d��/�9Je���n!$�uF�E5}!�$
-3Pk������d��6�	�`+�����	��R�H�"�j�J�h��.(wBQ\މ��P�*��(�!�f�Q09\��Q�2DٚK٬���/����1%��t��d��p)�t�/9�K�7�Ʀ`���Ȋy�3�P�E)��9��t/O:�����=C�&٧bAm��Y=g�zA�+�� �i?քS	���t�4�..�.�0�v��k���0�.xX�U	+�h{k�v��[�/�~v�α�a�H��9�lB��՚Ë����g|�]|�����4�̢3m�		[A�7�w�$��A��qˉ�A��,6�:k ��<�^{�3av��o��:����7�Ms8���g�a�)��T���6��]{���2���^"l�2��!=X��%&S��{��g��T*�p�V�~�uK�&�rz	���}~?~��'Xx�t� ����)<@��
�N1�2�m��{<G�{h�΃����ag�Σ��{�!�g�C���H(�o����Ƞ	N6t.F��)��kqM�/�8ǣv��|�:J()!�y�F��	��v��Н���b��	�y�
�~N����n�#��m��V���0�w"X�ƗW"��=#��\�+��Ņ�F��ߝ;���i����]mp�qx3>5�p��F\e]�&��,Ѻ��޿�R\��+��~�GK�"<ؾ�]K��T:-\�1l�#N!�1@8ɏ���3
�8Y0���
�
\��꯳5�J7K�A˹�0��k%D��m1�!������,�4�����(1��T�`�1���R�U[࿯���Z��b�\g ���Q-2@��!�R����Ff��?3A�a�U�Ŀl&Ja���\���ͥ" k����)X�j-5�W��L�x1EX���%+�o���T\��[�0�Ȕ�JN��B(������D$Yf��<�F_8�bj�����V�9B�Vl���;ؤ�V|E��]ϴ�6R�v�Ճȹ���ɸZ�D�`�����	\�j-���2\�zm����t�2�.�ײ"����Rm	��H��`�丯���#;4����cX�L���B��X�*�t@�Fh~����T'��I;5
��vͿ�,u�X� ��x�A�q|�}�rt���dr�����_�tm/6|Ɨ�i��<�3�z2�x%ݹ|XX���iB�����ɇN���\��ٵ��~����/��&��&�����0D���Y����1�Q���q�~��I�%mA���Eg7�sf�($ȥ=7&b9_�p3��xi�o��2��
�����|�
�}E�D���@ޑ�cD����8Z��ܤESFT�Ã~O��N�ݴΧ��\�l)S�L�����G�����'�h6X,���U�������V�r�6��+n6!�ʔ�E������N2u�L�N�>y%bJ��j����fэ
�sߗ�t
��%���gW��aK��"�ׅ��T�N�$�-F�h:�_�X���%
"�"B�Ǎآ�0����{��>AHx��t�4�,�KkQd�p������<�`4z�Y$�-��\H}�Ex�G����&���^�f�y%�pK��C��O,�B�ꪾŴH��"{���
���C�t�J�R$���z؃�F�"�c[K�ۿo�fc8����I��y�J��ܶ��y6��]Oթ@W�\�4O��QZ�����if�)_u=>Q<�W<����Ln�"E$�"�L�����}�{��Y?|
~G�س�Y56O�t�:�|����1�C6�ֱ���o��w���:������ƝQ�v�����u�j�gS[(9�$��i��;��'��ݙ��hD����������q�>���L��<t���mu�[7�ĭD�„)u˕XDSW/=�tm�W9�a짨m�sJeU*�K��d*�k�Xܟm����d�gE�L*M�i"6�i�s��t�rn�H�,гRP�΀�UD"Ӹ�y���ԀGĶV]Ӛ��ȋ��&Z;�ևy�f�[�y��B������ⓨ��6�"HY��AJҟqϟ�3��d��1�T�iqJ�+sY� �B�ϱ�E_�k�1���slw�)���f�T�V�h�&&3���������M��
�i�����N��#�X��E�`�	���깹,ZBg�lzw�{=~�l�j�w���O\S�ֱb�Y;���PN����R���v�,؝E��N�6k�I��ڵ��W��ͰT�'�q�%�6�b�s��:�I�����{�H,/�]�0Z��l[n�V����ҧ/�Z�p56?B׳���Ӌ��>��3�R8dE�By�?�<����eN�ttgρ�d��~�M�M�O�<����.[��<���O��յIl�*a��|� h�(��}��n�0E���[d�6���m��^�N�����đ4��p���R��M�rw�q�sɋ�	α��w\7�˫oxn��I˱�*�F��aeE�<�=��м����]I(E��eOΒF�C�.��7�%��P*��R%�j�Mq���~��Gņ�9�I!�ǟ	�i���.p�<�NiͶ>�Jl�=���>w�c�#n���|���q�ΨP�ks�6��J�l���� vE�!fX9V&�W����ށ��<��C]]|��5�m���O˷c�����}����(7�0�EfO�K�
E"��d���)������Vˋo��j!��Y5Ҫ7�Y��{;�X���bb�q� ���9�d\��$
Uc.��ҳ�?��r9����K��&{,ӣ;c���e�P��fT���Vmo�6��_qN�J�b���[��i���]��a��HY\e�#��F��#E�bfg�0�x/���#�Io0��J.7��K/F��dpU*��.kSJ�S��*pN�L�3�F�f 0%נe�r��P��{���m�����6��A�s&fJb '2A!kA��2�����/�7P��`pMz���x�YT(�/F(�t���\D���4�Sx�$�,�.���f���aT�"7\
�����6D�L'�ޏ"��6XH!���1�noQ�^�/ �Y�>
�|�Z�W;�œ���&�N��B2g�w�kR}@]��?>
[[Ȋ*W�Wx�L5�gI?�%��[��9���<����
�&p&׶;6�4F��x֔q5�}:��Y�t��/���ٓ���(��+.�GNM��q�`�I�#]�F��3GV�	�|c�.�@��H#�Sn�q
�u�0�\*E6Q/2�.�ᄄ=s�	��7#�l�R�Ž�x#e*qN���xt��
�U�5l��0�{B)��A��C%�8���49r�=.���eRV���S�t��<�O;�8e���F.�3��)b�4F.�b�i*��B��m�6n�ڧ��3�y����y���Y?�ȏ�m#��2�y�{�mfPk��h����kR0k�`��u��LP���2�q�A��Q5k2o;=���{�Y�W7,�������3�!9;�S��IXS��0�AVzA�#����ݩ�I��}��4�n��]G�{EAp[���mO��v��;����\�6l�Ο/Ȝ�w�.#�6<�DO����/����]�eW�m���G~x���8<�}�#�sc�eClq��?:'{Q:y�屗W^�~�7Z�Yz�˝e<k���/����d�n ����'�T�\��?��N�O��I�36j�Fpݧ�WF&���	��[�[�8�=���N76I @��^rG�MB)���Ub%���c;/����H�-�����=�v�#��壙�H�^�z���كg�'�Z%R�Tk��u�6#gh��m�����[0�(H���x�`X�C�c��ψ�ߝ{C�[�C�2r��_&K+����<(��kZ#kH�C�P���V0��<wa��Lh�p�mwi9c2t��A~�����T�$��O�Q���5�r�`F@AO�I��$�?�XCV�'6�C.�LnYR!�9��5e�Q �5@��E��h�A��D"L�Lw8�2'��dm�<���)
�gQۏ!��|U#����Y|v;t�P��l��r��9�*�ъ��X+br�������"d�Ћ�(�0DŽV��M݀��3Ac�C�h�!�Kt�ağ�!z����<�-Gx��s�
�����i���mx��^}윴O��i^__�I��t�=Һ��w;�7��n��=�.����]��?]w۽��·�p���e���*�������Y�ry�'��>���ʠF;VPƑ�S��m����q�ӿ�O;�Kv
Қ���wZ7�.���^_�@�n�@N:��E��}b�|�I�ۗ}�;o^\H�Pݴm�mЭy��?Zw��[}4#~jL��E��ۭ>�?���f�����i���
A'9i~h��{�m�f�u�m@U����q����������#�kw?vZ��Q�\\�8L7�vd�\4��zG�||��p�:��v�{s��\]���-�Z6a(N" u���l\u�+�a/���6�wI�VQ�j��Jľj&�l�]t�ڗ-�������%��N	:B�m��p��!@/xL�h�O"霒���j.�a�{�#�ֹ��(�»W'W���u�L��
��FM��5��񆍢�`�_׵���b��wۂ
�m˹�$f7�~�`3�XP$���}R��}a���`]���.��e�CR��VG��	ÔxH�BM��I=�
�;�D��<�
�,��)lJI��w��c��*�R&�J�'���>���pD]�V8���J�ާB���$,C�v�C�Z�vl�/A���3�X$_1d�0�|׆l,$>�c�`[ჷߐ2�7� �)�f:&d`�G�q��lpo:�nO�A�!̖�:L���}@��cϝ;�.M]N�PČ�&�g|v�y��~ݣ�5��Nܾ�}��4�$���yV����Uغ�ƆeT�-�	�V�}iٶ>�Pg�I�Q��^�l��c4j��kj=�6��m�V�\<�-?�/m�
���ܙ�Up�@���gP�R�;�R)��C:&�S�FR,�ML�/�Q=�7I#R�m���g4ţt�_�,����R�Ev.,_�$��%4a�X�ȕ�@�3�)�L�)>���s>u�t̛�9��m�0�¬(��D�����:J���Z����>n�Ht�D-��[}�ˀWn�N2��*�'̬e�צi��Z�ӵ�+�W����zoo/�pLg�m為2�lA�9)g=J�݅�[�/���RBe��(y�t�C���*���
�wi�F<2����g�.��x#��e��QL���
Y÷|��0��ĥGg����/i0���O��	7�b#Z
†�ѣ%�[S��}�ٚIzȿoϜ����[�>_u�����&�\�n&�1>.�ׇV�'�>=������_�>�>쎗�?�-[g�wn��~�~��y<�]�y��.�s���M���s<7���&ZEfۉ��q��q��D����J�&��"U��p��[C5 ����%��q��c�^���7�}Զ�T����w���������V����Z��kB"��k2��I9~� �O�"�:Vs�^�bl&v�x\��Ŏ[ͮ�{����D�(+g���N#f"��zK׊;{0}j��2�����e��\���g��:
ľ��t��g
���{��Ek����p�˄kԢN��a%�#{�ܼ�*-3�n&��R�4� �P�V��5���jg�&�{<6c����1%J_R�3�o�d���������>�r��Yи���'?���@��7�&A0;��^.��r�p��v�R���-aUcmؒ��[���Va9�[X�ڍ��j;�ѰZ��i��,,
������zp^y�����Nu�mRݿxy�y��5�z�`��&�E�qZ�w�>�×�ǐ*
O�XJ#��{��*
<�@�=X�n
�`�f��^�5��Hm��k��_�w`�vu�
�W6�l�ņ��/�P���?�,��K�)&6$��0�I�����1!�@�(왂4m�1�8G󗤯��]�_��Fs�����ese����2��6�A����A�NK�-ֈhK�!�K�+J���q3K�~<�=',42��^�͡"��b����i%��H0cvJ1����oםʆ7��7�6�Z�tn�]��(����'`%5
2��c��c�֍�p}M���[
<r�|����$�����5w^�m;�[d�X�dH��o�7uDl�\�C�s�5IN�t��|�`�l��Q�K�W�؆�mrH>q:%
Ei�H�c�02A@N$��iS�L��_Vw5�����T�I�$�՘��+)^�z����Ǡ`˺/v�(ƶ;�6�~�sv5c�x��
�r�W����1��O�S쒨U~,p�DdY�#<���|�:��Fg���_F�)�i�"����z�L�޳�Ă�$T!�!ˆ�M`����k �s��2S�U�dV�`ʚ�&j��~�f�x���#��	8LQG�����%Ť���7!����PZ3�sn0���H��5��Xړ�6��$�l�@���Nd(a��3s3P&:�΢/�V����_e�_	�?��?BhU�cP��*i�pM�9������!�"zZ�.�XPVp�7�J&���)��D�����ǺFӫ�O^�e��
�M�1`����PZ�"Sw�����{���=���6o HK�Gup��|A�pcA`y�oSJ	�y�J&��~�9PEŖ���KC������\�B�,gΎ��YY��������;q=��|G��rtc�V֖���ի/��Q�����~mv�Q�+3{9'�����;c7-(���]�c7��bw�߈�
��ZՌ�9�Oʑ��v��Mv�ƌ1���cjE��2;�b	8����e�s�����^^AxS7�njztJ������	��r���U����;g>0�=�f;Vz��r�0D�qb��@l�3��D�~����mY��.�m
!o��v�
I�`�qm���%�F����q�)��Gƽ]�P@���3��Z�u��ӢtZ�:>w����1'��2�ɠL�~����(F�w~T��o"��F�Z+fj��2���A~�r"C��Z� v��T�=B�
iQ{�V��c����ɀK�B1��{�k�Tٷ����rK|�I0\k�
�v���9X�b�/^eд\wDj��jx��\���Ze�#��~�|���~�j��*:~�֪�����rf�QA񡤧�Ѹ{v�|�`��&��
���"�(QL�rl�!a
��́E0���ҕ3��5.L�����tB.1]���*��r|�R\�R�!�1�z��7N��B.H'��-1�>�BZP�³�8��f��l&�*|m m���ù�b>����>k��d��u㳢 ��m<Q�xx���)��*+ܧU�J�FR[�f�#5/qQ`��s ���'~�����s�,!:3���`25$����)��E"1�u��	*$I;;o�N�3�#�B@NF��{?W����jw5�=P�k_�6��8ͻN�����X�	a�x[�z����]j�&��<�i��2����vXeُ׳���,��z���٧�+F�Zۃ��j�u�5�2H,�Ϻ�f�����FN��C�3���৳	YZ�
�%S��D���=���&��7�J�w�"?+堦Ua��ǔ61��s�&X�	YAky��j���K��r�֒CE/�
B��Ta�_BPkӡ�ӂ�A�1;u�6��[)�؈N���-�� [B�
��[ؾU&��y��W��Ǿ�8o��K)�/��T�^��ԩ��X�@<�)����
ym%��?�c��Ƅ�IF���<
pQ�yC�kto�����BH�te����
r�d=�� �=�:�,r/p���ݠ�3r��Bq�C�k*�hZ�b��j�n
�s~�2f��o�|'��[^�L�P.5�2O�}V�z=j�:.�����%T2�����᠌�}��o���UQK^�N�aHBU���1��2��P�F(r���yE<!�%-�#������#�π
Ӵ
��HN���������ǒh<��V���W9������ي�\�a��Eðp�b�pNk�Q�C#�%�� S�B�w��U�ܗb
LF[t��;�-f"�a���z�LEe���#ěCu_��t|	#5�m^���J]q��G��
+�˳7u�h���޻O��c�|�JK^�͉@�/��=3�P��9S��S�DD�P:{�׊|��	��hy1��jW�s�-~��I���U���"�qi�j����@��G�YpO�Բb��^�7����s�ԇ&UG�'(
�Vf���NX逎���[8≈g����q
���ب*�ĠO��2��[�r84�����!���%ȖO�� 8�%yR���˓
���$��D^K&�p@�+���Y"��J��6�ԍ�C����˜�w�����gN�U�*����~�NJ{Þ�l���L���軺����#y��O��)�b�ܘ��\���͜�I1�K�"iS,QY-����I�*�Mʩ�/�֖	NT���$cLg����YI���Hb��:YzN�Z�G%ܰ��/��X%�K�BVwk$G�M0���ӛt�$���#"-3��W	��s��MG���#��䷑�����c�X�3��!�P߇f��!�}�!�|�87�D.+���^�d~X�H�nǯ8$�RYy�.��2`���M����cT u����H1�3�%�ҭu!96�E�
N��<���B�_�l�hB��"���G%�$�=���Z6)9&*a
�``���mfM��
҅��IJ��y�%(!zm�������EC	�?�&���VBKU̪m44��	mGn�e�U���1Љ[gؼ-�3K�$/���kSG�{~��:v}v�#�s6t	��@��i�0G��\?Z���{%�㴏�#�͗�}HZ�V�ݕt*B��}�
�e��1�$z��ފ�h�ۥ����ދ)�x��sD2�Y��k��&�b��
�'�.���o}Z���#��p������i�R^��j������*[v�w���G��Nj��;�S��-�4�����@��S}, ?z���n�
65���g��?!	�0@-o�����@�SRe#P�l/���n"�`E5>J�`fp=����x:J�>^
���z�
����c�h3@�逸ǃ���#��R">0��y͸�G�V��@��ϩ��B�$U�3�� �P�;X:X+�Z�GU�d��p�2'[jJ��vL���(�G���W�onu$7R���H�󣀅�ВC8�Y-ڦؙ��#���x���H�hh#_2�,��=z#��]�6��N	=�&>I�4�x���c�Ҳ�9j��	���Z��@߶����̒�
e�:�%+�U�i��W�<bk;�V=Ӟ\�M�C�:��*@\kb���S6��`�����W�D����$z�Ķ�^S�l#�\�b�%�/^1�C#�C�E��/�1��up�8�<����_?W�G��L)�I��B�����kO���xWb�)�H�6�r��?��(�B^M�dX\�R�6����3ƙCS,�� �e@��
	�lݡ��m��shQl�Tې
?9B'JM�z����e$�C�������37<RJ�����S�ga��-�O+>�lj�|�
��d^�v��lGA��)P@��
��3�6���i�n�7�Ӎ݌& D�R@j%��Y��*o�����E�g�b�Xn����L>�]��^T-]���#AY�s(�4&44���Y��:k����bMW��.D�i9v�ak��6+�I�0=[EÂ&0w���3�>O.N�Q�.�ĩ(�/w�����_w,�v�F�Q�������m�s��
�`���"��yF"��qϴ��A#��]}�I�c�8�������ۿ���D7�Y���?r��
U��ہ���o<�aԽ���q5�T=�<�0t\E��?j��	4���<�h�J�渊�`�q��K��J� ���In)c�;+�b8����fŢ�C��?"��'���n[zI�}|�lM��4;H�Ύ.~����׷��t�gTn���E����KS-u���4��!VOm8�PK̽Q<�
X�urY()�V�@:�X�G'HT��a���(�*�mA�vDz�^P,��CM�qx&�ȉ��A�s0/aId����G	�Z�Sl�{����:��������ſt�g�?��[|U�Y�%^�g��A6N}{�b�.����vQ�020��n$��|[��t�ėM'8c�/��1��m2��-�y�(d�+���A7���90���X��!�y�Z�ȁ�u�(��+���~8��%߸�X�zB^��Q�:��w��Î�����w��;P<.�*s�0��7k,������'<������SuһRO���L����Ә�)���,���q�;W��^}�ٱ���sӘH��Wk���q)[Dآ��7��1��eB�Ƈ��m��i��Jyy�o�����|Կ��H���>C������T�6����$���2�V���g��� _���pG�dž�P���-�Dec��S�`�h3̆|{Q)�T�o��Xx���L\(53^���H�W(��It��lX�p����k�9_K%5�ng^���mj�wgs)T�,:�~[R�b�Ǘ+fa�����W�!z�]#�|Y��B�42��r'���b5�^&o��6��뼬K��P��Ù�p�����1��{>��ˡ��arB/�"s���M�7:n;cs�|�%);{��`!�����c	�b�
'~�v�ܷ�c�\I��TĠ�<Q
yan��VR4k�|��<H�!�����}�&�F�n���20v=�ǐD#L.�/�����Qcg���j����+j���z�5����Uj�&�
��Y���QǔMwo�ٌwv�W/����r��Ěh���7�ԆK�[�.��I�Ki����e{}�(�c�IO��̗n��[�(2ד��C	�4��c(�������q3��M�z�(%(�g�Aֽ���Q���ۯ�e�P<X�%�r�8o�x8����8$��\|k)���/��K[Ѓ��c&5,�#���M�+t$��1��G!�׌��T�<��P4���Q�9$�~i�G������a�P��Xgy.�^�n�{�O��"
�iN�)_��%�DW}5��}�f��d0<i��"����gh�i������t���T"6z�F�������m��Wms�6�ίP��3�…�`0�5�r�}�[��e$Cz��]�$GJ�^�i&�-i����]���Iʠ6
�8�@�\�Ds���膄�
�K/���D�#�9f;l2h�1�6.�Ӑ������a�c��@�#qq�0�}�&\C ���
g�MC�BćY�F��v;ӐM<\�H�u��Τ=�j���/lX��&#�@���,�y�M��դ�
��<{}UL�@�#��5��E��Xd�˰��v��~�_gV�:��2�s��pɤe
Ĝ���?��o�\����L�F=.�j�l�<��@����`�1��)žh `I`/m���Jr�Gr�����Vt���e�i d*Ay����KD�
?�7C�c�-l�'��w�G�r�ea?Q�c`�[�%�B�,��)�0q�4bFc��7 �y$��'��ч�i�)��G�<J��|����°Z8�����
�����(���%`P��)!/ňI}ˢ�*��陉%\�� ��$ۀ,�^M�T����M�(���]�x:����g����zߪ���Ը�,�tz�����E5���K����x,Ex�&B�|-1`C�?~�I�A�k�� 
Av�/��0�X��h���c���dG'\K�2⌎WF�
�M���Y�0ɸ�Χ��q��,Չ������v�p����c�n=�K�]��O��og��o1^1kw0���]ǿ��6pnZckӕ^VG�������.�����/d�Q�;�U��ޢҖ�~��nY����Z�;�����t7ac��q�/�Nqk^xf�Ԝ�b9ч�C��̟�"N_*C���ɻᐫ� ��Kțr5��~�IB������YTs��x�}�V~�3�^[�����.W�[w�W�ؒ�z��v=��ʗ����{g�tñ�]�^��u�ݭ�n��t^�^l}�d��SX��yo�5��=߬�_�}��a����K��xE9�8Uҽ/�m�W�E�U:�w�V�f��T�7�ym��X�F�@g��l���~w3o~]e��X�G����ei�����Md�ж9��i�LI�Tn�������%w�&C�K�'B��2���2��q/��[�*�|��+�V��v�Q���d�}Q��z�8N����8�gZ����h�}3Ned1#�&���w��a�֧ܱN�ӢGM�P_,4ǟ�o��%�/���VC�DG�Ę���
p�j;X�L�\�3w��aa+���y���_]��ׄ�e��O{�&�P`{���T6�����?'���ų����/�u�@��x��rCl�K&
 ��M��ֳ���T�g�`��*�T.�~���h�=�R?$7
���<���,f{��aKI�W�(�1�-��ې
�=�|����I�XL��U��pD��B��A�ЕEvϓ��Y��z����4^ V�<��V��3�c�$�_�1Dx��ՓYtl���a���n=_8�>�%��?Px��:g���xȇF/�i�?9��i>~\c�����'��^��u�ok�0���S\M_$;X׎:����`lc�6{QE:ۢ�$9���'���
�%���=���0$��M�E�[���o`�#$�V��
x�l����AJhD4�[���A�`sa��J3�8�;fj��D�(<.硱�D��a��lN-0Z�	��*9��E>�O�H�Ĉ���W�O����䶐�|Z�r�����a�48����J���io4h�����=R��ioߕOnn�7��|I��Y�J��	�-�/�ɞ�P�/�Q���[w�Q�zI������F��-\\��{���[��D�n�<����ǯ�z�%W�(C��bSY�K��W�*���Z��d�������?V�ݗ�'~��TWn��~[x�!e����K�d���yKMk��0����L�;��a�m/E���._`|��y�J7�>O����LRc���	f.;n-@�i�n��&�a����o��j�w��VQo�6~ׯ�8@ec�����b�@�X��)�X�R����B�I��Z��)�Qjo���<~w��'J���,�K]5Fl
?���
����R�%��]��M॔@Z4�ȓ~�:WV׆!0�h��hrX7���۫�u�D����4WdX�`��V��(›������Bb�f�hqrus�����4�0��g��kX:�V��'����tYj��iG���Ep)����(���n���x:��O�x�2Zk�����js�hk�L�y��N��
��:cw�y͘�xzvv�b�H��jK�I��4�s��̚PT�*m�Z]@�&l��oCl��,zV�D�b�-HA�R�C�����V,D��A����$�٠��
C�����")�����t_/�N��š��`�wE%&��0;,Y�7�!���	aw^�Fu�3��t�Iz��uz�׬.�p�A��臯�k>��z<�j��'{ɾ~��v�I��G&A���Ս}��y�
��.�'�Zjv���5���1�-1��$�~�����@��zDsZ�c��Q\+�f=r(7=�e�o����J�q�]�1���N�q����a*4�ԵE�?�x
� ]v���nXL�l��O�G��k|��mn������~g4��|���ʄ�+̳Zv��M��i�?8��!C�Ύ�g���|�N}�A��)��K
�c�p�އ���mN��E[R���yK��6"oB�I��.���T-������9��4��^��c���PZ����@�;l�?M�4!p�#^Y�Ute>8�Q���z�ٿqk
�����y���Lf֦#�r�#���2騿k�%���E���?h��P-|Y�
-d�	��S�o�0~�_qB�������Jc�i�2x�͉��5Ƕl�iA��9'�֎I�����~$;�c�N�M�Y>=��
�M�L+�����S�V
���E:�S���
B#=xӹ
�2���Y��(���O���[��d���B�T\C��ie:-@j�G��rs��VRa̓M&B���@�'@OiXiB0m3�!JR>ū��c�R�O�v3:Z�j�����q���R�zY��%	��w	��V�m���!&�C�2�;�Ĥ�D��a6�pHh��2:�o���m������Ds�����A�i[K�����HxVyP��_�u
j#�m�!}#�AXT�HYv��}_�NV� TX�}��:獣`C]Bwu,Sj%5�R��̎D��S�z)B��ذ4��ŵa-�!��a��Ay$���
��q%k�r�8RwX�3i�SoN��-�1���� C�E҄`�,�>��R��l��y�&q��"y=;���7�\$S2���`/疇�"��Cw��s�3ɖ�H�<y;�3F,v�˩�[
9\����C
�s0U���Z[s�6~ׯ�ݝ��-*��C";Gֶ��eO�t��z34	I�R$��,k2��{p!	��EJv�Ջ$�\?�r8D�(�%d���ϯ~�+��0��hM6kt���(It��(�)N����C�!�(Z �")J�M�a�E>F�w=�$�>z�!��]R�0
��C`�+�"�
�#f��&�	a���d:��	���o�>�	����{r��;7�!�sI��st�0�34���У$
Q�����A�o7׿�ʼn��}�!�0�] �K�K����I�� ڶ،���k(a&�d\��8��+�6�T� �b�T&��q�h=���7]�hIU YS�']���3�b3��I�b����Y�O�r�3Ji�?�A�@5�S��ӥ�����	�[����G@�yf���H�\D��e�|:�k�I���J�ه,�<�E�|ctt���۹���L���|��^N�9��ꃪ१١E�z��'�(W |�"(p�x����$��/"'�h��,�$4#�X�̪NƮѰ��g:�B
r@��>,�	�BSĤ�����}��
w27H�������H�����#`������/X�<�Y�IWіU� �:ǵ���փ�{%��c?˫��� NHH3[�`h//yD]�A��ԳҤV��4��m��4���
,h�HiK��"
�x�7I8BP�g4�]�1_Z,;Twf'��tP~�$�p��p):Ef��V�y���+	=����d}3�����Rop�M��?�|D"�[{�I�Y/ٲ�P�j_g��ts''�^�&+v��<8���@��2+HH�
�Q��٘@-� �<(`��`G�|�=�j���U����+A�jq��^F&t!@��DI�{Nu���x2�]M�x5���0�_�Ny�}(���}�
a/��>�M�'�Z�إ���퍉a�k��*�sD��ˋ�������T;��{�fywz�^�p<7l����z��ak�\����M�1�5	8`�l%�ԪP��غ�e��W
}�=�lf�B��lp��5��.�-�mt�&��$
�+�s��㲴���6xS��k�cK�l����SQhN�TJ�Gӥ13i��ڗ4�eVWZL9���.um%����.�|�bJ�؋���S�@z\��]G�s�3l�`���M�W]�N]�h�'����_�,����U�߅꽁�[�F�q�`	����6F�4��X�-L&T�9Ԗ����,�Ύd��+�
os�:�#/���1�N5��ئ�oTƺE�9+r�2�B�D`7����&�g	�zB�6t���I!
���=7�.-���(y�9��E}��Fe�]};�E.�{XtL�a���̘�k��|y��D��}s-���(ݝ�:����'��
�Ӡ���+�"Yц� U�hBְ�g�R����cN���=�������SdY�b��I���,�M��������Ү�_'���U/�<Bt-���`��{hD�7��v�u�q�d9�����g�0�i"_*ڵ�n9��]Jkq��?+SVÙg/EA�ue�&�� �e��>�5|��'RRܳ�&m�
%�V{��C��E�~9��,7��FG@Bw�[5�l�y�h/��(s0�r����p���Eu9w��إiL8�
1\i5�����)�#C��t+���?Vte��hF#��������S2c��gx�4D[��7C��`o4�&��3��{3���ő�Ut�p�v�R��f�H�;���%ߑhݟ����~1��
\�2[r�����'>U�D*�]e��0~�()ec%�lȈF~[G�q����h����K�b¸�����{�Q�/(�o�Xg�H9�I[�[�*�	0
��ì�MiK��.��X��g����ړ{]b�$�=�*\QNfuO��	d(�yRl�.���8풠{���w��%�XP��+�-��~���~i�C��jF� m\#���]�"�(�fZz��O��zNj�|V�B/;�wW�ț�B 1���Js�	y^�a�,��$X�㰉�������o����&0d!��l�c�_E@�+C%nT2m�)��IG�6��Q�c��z2�����_;���/r3z[��Ku���d7�3�G�Ķ�c+�4~5�9�AP��̜�8:P����%������TR$շ��n�3��F�dB�V�5C.���Ý��5fҴ�X��,\*��r�ER���boM�Ls>�z��ː�*ߞ+62]��m<HV�E;5�	�&9Q����kc��{m`��ˏ�hrꆍ_�x	�<0�r�֑���U2�t��3����U����R�Hig�
v��̟X'J�;�+b��vQ��e���,Nv��&���Ϭ{9}�/>�r�/��R]k�0}ϯ�Sl�e;i�HmVƠ�K7ث#]��
��~Wvۤ��
c}�st�{����q�.l�i@5�0*�� �֓e@n̾���=d<���aS[�S��|m���Fk�A,:�G��B��L	�V�9X� �D�ie�h����ǯ��F�J`C4_D���I>i�����J�1�c��n܊���$I۶q���VI�9O��U��+��j���Qa{kN+Ɓ�tN%WL	�0R�(<�m]��	�g�0���R���+vU�E�9K֓�P��ҳ�⬔�.�[1-$&2��;�7�Q�b�zy�,���l�U^�f��Q�H��CI,Ih�`a��B*
h_���t��Н�a���o���!���B$�6���^!S>�}��L^{	+O&����+�U�H�ms�IL㗂��tU��C���㿊���'����W�o�6�_q@0 	LE��d��ڬ��{�V���DI�)R �����G����E7`}0l���xG��£jךW��I�<�_5��Z��w
��l�����hf�~aE4�[��0P%ؚ0��9�\�X��%+ [��Ͽcׂ��9��fkj!�2�,���p�t<=����\0��n4J�R��uY&�h����KaYs��{\��I���)T��{6�Z-��X
������ht�+i)�L{�Z9.��$9���V�u��
'�P��1J4@J�p�L�6�5����Y���)���(��9�(�S��\�hf��4�\��TVfP��T�R�Ƌ`d$ӌ.0J�E� ���j)	��
������S	&��}t�2
�0w,��8�����:����\t��6�F�N#W؅������1$7�)�M[���pd(�N�(h��>�h�]�s��O�i�=C<�sHn�A��ј��B�y�=���|f>P��{ό�{�I�Դ"M�;�������4�N����
L�,[pK�\__q��U����C������(��U�.�ɹJ>��q�Ӑq�JY�7�35H.h�>��)��Σ��O*��a�hZ�Τ0kW;*ծp�b����`�TM��&�]e�:�45|�7�*�?vhQ����@V�>���v���m�Mn�9�P8�t o��a�wK5ޑ����
��$�a����/��O�-X�I'q_���
{�^��`zx���
<�^���|8Q��UM�;i�(���:Y*Ɏ{�������|��i��T.�K��1���=�]�s�/�Kz�d�������ӷ��A�$�4�p[zH�6 ڭ��`:ߐ���ak?����z�.����C�]'a�
�9�&2�˭�^ؑ~I�6�w�y5���ާ��'�����ǁ��R
��I'����/
��Y{o�F�ߟbB)e��]Q ���m�%�H�1�"�ȕĆ"���$��7��\�e���0lrg�7���}P[g�<
�\뜜�9�7�MV�4�/rhu�pqv~7I2�رo�E���,c�##�1B���0��� �0�,Y�>�#�0��-̒t����HR�?Y焲L�p�a��V,]�y�X��c�C��r��'���0����AHB��ܒ�����3-�dV��'r����=��P�i�H$	��8�C���f!��j�{u�P�yᒥ#�84V"R�~k4��)H���ŹWL�)�G���^��Ћ�2�|���F���3�v�ͱ�<?�=�W`�F}t1�=�]�Á;��&�p�ᅴ�h�	�<��i4��c��F}�{l\�rtB�Oz��FD��Ѕ�}g���u��"�CI^Ý5���ye�m��um�Rw��L�c��N��F��h�p4r�g;ݾi�Y=m@�`}�.8�f�_����w��B#ͫ>G��ў=��.yT>u1th__gdumz�>Y�9~�	a�dB"���;��k����dlݑ�
gr帶;q-�{nBs��G�k9���c��5�zD��!��&��Cg\k<��\{8h���#�Ѻ&J�x���3N�p�@�>:��Z8>�����u	�‰Z1�n�YX7}��t-�	��v�6N���-4ߛ6�p���<�����}
f�M�KfLǖi��׽-�O�pz�͔��/+/����UK<�Ap�l����
�6|;�?�4V�h�YnE���v@l���q�ܛ�%���r�*��şeG�9������+�{W7�O6IkI�z�@Wh©G/&����g�Rh��PR��Xn�鰖����8��&�V,��0
Z{v��<�u���X2�|����'im2�r���c��^�k���|�f��`����Oa�/)&�ʼ(�-�I��.0t) &��oW��	����%�PM0lq�$��v���wA
*41 �J��n����W/cSR:��ߪ�B���G��BΏ
��+V����@.a5�z���*<��+M����[��2�2�B�������/���� d����m�U@q(��FimM�u�9lJ�������>�sI�WF8�qw�1����\�.��&@�|��*X��d26�܈�fH1��D>��ط��ۂq[}h}��>(�"۸-oaS��|�xoE~R9	��p߿\�֮�y���JO��S�d���8���@��..��pâg:�>_�m�>����8H�Z
݂���$K�z%S/2��̠�k���|����il�B���?p�[�	-|z�V��g���u� T={�B��8~.80iTyn��bZ)1���[�+%*3s�����&��|��ݯ��K5���t	g�)�I��mQ(�*����}�����Y	/���nm�Ff��������v��z��Za���9�ā9/B��=za�����38{��r���&��q1��o�V�,���#K��EѶU�@/
�+q�&I�	�6Iï	�<7^��0eA���2~&�<όz�?��I�?�j[�ӛF�Yy>3�)��"�k��Nlre�u��gZJJ��. dnu��lNF)��T���CӤ��1�CH�NO��[�%�,��* ��F�(���2�+a��|/��^C�~�7�uF�L��V�%b�ޜ��Z�*{wz�H7�dy��O����E��Q\��[��
�X�!O����/.n$����!J�b��ׯ�Ê�b�V�^��T�VY��;���z���ݒ���NP����ׯ�@�}c&��&��9�;/ǧ�އ����@%`�OD
�Ӟ���[]�֢�B_}Zm
�v}�����l�	�RfӐBņ�Zro��u�M=V���^����O�� ���3����=kjGv�<1>�x^�Utb�
t��T���R8��m�Q�W�Y0��0~���="xD	��[�g	�E�E��;�U�Z��N�Pm��������	���UoD\����֑>ԳFu�j4y�|�O'L��&,��n��nʋ���M���D�`<�P}����b��X�\Be������T�ԯ��,��X$WZF櫍�yAPu���Jц��ᛳ�{�B�DK��Cꢀ���vq@.�=�[�x�RZ`^�ӡ�����ީL���I1/޻V3r+.L���a�T�WhF��<�P��)�W���h�2�?�¤����.�d� \����&+b�,B���-UE;����xf�o���b�<�mF�"
'��yA`=bF�C��Z�8�k��E��~���c!�԰�p�_��d)޵ P�i▓2�	q6
�/t*�YF=iw�[�볍}�[��SOĩupt-OC6qS��6�%��J�t��>�fF�5�)vY�	nœn�L;���ҙذk�v���ڏg��yT�W����$��.��xm=OEM2��|]��5ܗw�%	�*��"�H��mҽ;H���~����+��bl��b?J��@
S�E�{��.a�2|�q���0�U�E	Ӈ]��d��E���6
��<a��d�;E۔��"�(W9�����!9���_�>�=�\��ͥ��NL��V�A��h�▐��\�#�Q	�W�8Oy}=���T�fƛ]{�����p%U��ݨ�Ӑ��D��Z�:���VA���:�S�_Ky�9���\�ʏB{�t˿;&�+��[�� ���Tc���Vy3{$����ZKO�0�+���F58n�T
q��$8 ��H���V}�M�y�H�4}lC�˺���|v?�
s�],j׽"�a�U��'Y�����ݬ��K�+�ۀ����^W����p��D{a/Ӈ�k;ǐ�̐�S��x-��s�r��jS�8�L��
��K%�'�9
�]�h���&�A����RŔ`�|L�i�\��\�DZ��.�s���/��(���,<X�ќ>��B����m���b�[�޹�Qs��s��&�(�4�=Gd�6�4�DVC݇�Zڕ�#bė��	��T�_�U^�E�a���O|�1�f��3%�ͮd�A�LL����@���%�m�$�K�E.�d�jp/P�oOf)�|qi.��i#5�\�HM>��؅z��hI���CI^�-�QIN�vP;��Yi�g=��M��]�L�h�+f~e�Ȃ��9Ї<���ɯ*�,�!xZ	��d.`{e�T!����+wJ�9悌8�y��sx��p�-����ui�T���2q&���H3���(,U�qn���7�нk)��T���8��}K&�a�92'aP��YI�-�����d1SS[���P�&�=-�V�^��Z�×|�Խ�{�?�����o�0wn�}3�u�x3�j�1n��Ҵv�nO��꾅�`��0��oL\�ھ��s�8$�f�������Z��MM	����G�i�ŻW�bu��A��so��C��Ҧ�Ph�ф	��ƿQ���b�i('�ȕP�{���	�_�mL�v���m��oNش�j{4�<��?�`�G�DPg{Br�8�� ��9M���p��u0����a|�ʸ�
T9�k&9`����x�
��*��"�3Td ���,��J�R��L�O�(Mh�����\)(%��*�ؒZp�Z^e��'�(P�r��t� N@�rK.����ȅ�DR3�j7�~VLj�V9����T��eB�9K������
j��V)�]�#I6�#Z�B3!y�I�G��u�/O@�x*(��9�ar�4�*�W�E�$��-��}�cp.i%��8���*-t�9��2#�	Mq�,R�� /U�R<�&�����a�i�D�N�KY��(�;X�kt&��wg�沈�q<��.����z�q]���5F^(t/ՄrS�]�O}#
>�Ŝ)�lI@k��M(*��k�!���򱌔�Û�ĩ��˞���QP�rl�}���}���ֵ��n�����?��~0�i�/po�bz[7?�ޝ���q��x;�pI�\��W��XwV����\p����z~�o��፟�����F��Fc���zl�wv�H�_�V���Y[o۰~ϯ�җ��\'M��[I8v&�͂a�D�DdѠ��ް��s(J�d9q6�H%^��;W�߾���d$6[ɗ+E>�����9�b�0�Q��IB�tF$˘|aq��N��<S����"%4�I�1�S��\FL��<�rKB��y�jE���\!�����Gi���l�\s�XL6R��Ԋ*�ÀN��W�.I$Ҙ�7iJL
�h�i��(%�D��:�(�(H��i(^p��tR�x�z0�3�1�Q��-��c�P�f�X`Xå��s��	T�_� %�e,�|�REK�}{��dM��&�xm0�Duj�M׻�xJ�Ū{P*vs�\e�fiAN�XoI��@	AX�(CWQ�B1R�n���dHG㑉�zE�1�E�
�Я`G���Qi�[Yf4���v<ڞC���v�Θ\?��CF��'Ͻ���l2v<���1�NϽ�3�G2���O��=}"��<���#���z������=�NG��؝�� �Y�D&���`�Ӭ�w��
�w�������
�4�7�"�����l�`{�;�Ol�<̽����o����;�>�|��ۙĿ�'���Hg�8u<ԡ�.�v@R�z� ;����Q�j�F"9�!!�����8���=�Y���$��-�}t�H���ܣ��?��7�����v��~�#ǿ"�������fl�fT8X��s�����C�Φ_�揀Hj���z6E��qf��F<�5z��΁q�ը��荂�2`	`j�v���s;qo���3$���0���W3��s�;
d��i�sO[��7��vQ~���w��h�Fw}�o''�����'��+��� 6����EjA��+=��y)E��V$!��uŕ�\@�+
:�E���2�/6$g�?W'�99�K��1���tH`���"؝X/���U�$��ݐ�x�� ��c��A�b�>�+��iE,)mD�>4�D���'l�*Jl����*m�MB�%n��g+��!��z'��n�%�0[GF�GY4�K� �3i� � �����,!KZ0t�d�ӄ��
=SQ.34Z�4O��!iZ��F%gY1��q�Y��&k�a�K�'aBK)YKV`V4V4F�?2��p��b���%O�]�H-
�jg}	�i�Jp?�5J�p��@�*Q~��(0�nX�z�KF{���`�����`h&9T�u*Y�S�
��ʱ�ڄQ���.
�R�\����Zp�
��@td�����K��֐�V-/�O�!�	t"TZ
���;�ڡxOh�0�J��C�F�2��iF��^g�h=2�:4;�<"��.
ۈt@�b��}۪S�� �e.��nx�]�Q�+5�1���+@Ԋ]VT(�U���^*nȿ���~$��S	3C�d,�xm��+h֛�^; ��E���گEX/wE��x}�v�b�Ck#6�Ƃ󀂃`��p��uO��"tI�P{����h��l��ti�vY�u.hֵn�ڒ�
��[
�?�1K�:���]l��b�oaU������*�\2�{4]V�P�/hN.�h=�@��,��*�QP���v���BU��m(þ��X
�V
�r��.���Á����4��o+S�—�`޴�{Ai�:�hK�YC�(;�=�� ����|ٞ�-0��x��Ri���-5u�||1}3�v��&�#���
��z�$�zYݷS��_�Ky�_o8�NJg��E0F+!�*v�-a��p�̂��>�%����h�bR*�����)�v���;�ԟ�����ܵ���������UV���*���6��[I�H�^��<��9x��t��^¹<�28��Љ�@�U��;T+�\["V��qޖ��2����W�rV�w�i���p��Î�z�h�qS�����6T4���2�ռ9�l���H,kWod�F�Q����U���b��bk�#F���|0X�{�o_ɣ��6+�5J�"�#Q�>�W�fM�l��9$�gV"��O���/��tf�GyBe�5�
��p[Ө��w5�#�e������E��������:άɀ���Bn7q�ڊ��Y�/��C���X�o�6~�_q�^� r�M[֥i7��K;�a�%�$�4)P�o�>��l��,%mC��������\]����%����s�^,���.UrÊ
�-t*U>�����Aa�j�t>��#G�1���BE���3�[T)�{ �˧wA�����٦S�!"B��bY
L�y�������b��ڹ��BI������+X^g����ξ�f�p�� c��I�N�UD�K��c�sk���E(+��E���-�]��ɯ`�K�XmG�q�N@�6�Ɓ7�;�u@�>�$D��q&��J�u�WA�,!�I���R�]��5��,&X<^�I�Fu;�ť
�䌂V&�Qf���,vؙ�P�DRK�Ce�isǨN'� �&���@�l/�7�R���,ܿ�cTe��+R��LW���f��@%!9[�\B���??��iS2Cy�9>��"�e�~�du�1֥֍��4�dVdM��?�M&�&evm��%�B�i7�~��XFE�4�B[Ю�Z:էp2��)u�l��;5\��)����͉LMp�Fi�e^(�bD$U67D%LTeR~L�
w��@�]3�p����؄��D�y+�ޢ�l;�q듛A9��z��n�h�iYJ��E��yT(k.p�v>w[PK<5���H/���,u#�\��DM]b�1ט�٪׆���1P�C�ki�/��D�/79d��ގ�eկ�1���}h��@|}[�A�����y�ELA��Oϴ*��߾}���<�<ƆM��u[��̧ٔ������w/i�ٿx:ЅE�}����d2g��2-:4V�vV�7U�m�Ç�~�zw���ܜ��z���*�p���� $j��N
&�\�9��Wb~du�`����H������=i���X�nwX��m�K�Tj�����Q(���)�vfP��/���yu�X*��)�Յ}��gI,�#����ac3�ݒ�ŷb��bL
�ݚ)(�
Lۘ��9�KQ�t����)�w�����Y)Zf�ĞD�m��u��0�'T�n�jk곹b��ŀ����FH�Be"r�p���̷1�k}EM���
�3��c���&}�xMw���"��Sl�ξ�B���]?��z\�;C�E<'�ir��^7����P���}-B��8�W�X�^hx�m׿��i����:�:���5��STw�}Zz�	и�]�;��{�K�k�c�Ȁ}��`_�Ѝ��U�Vsy�An<�l?2�~Tю�د��ƙ�W�iOo���v؟���H98�Y��ks�H�{~�l�.@�L���a��x��-Y��B���&����3�f�InS)�f�{��=-JI�Y����l=ž�v0_���U���
�n4��I\z���Sg-�c���G<��:�!�O\$v��n�3۟0��,
���r�v�`� �EUv��W,�3Hb�2&��ul�Qev�ٜ�37������ڝ���ʎ�:�ܸ�%s�"R�HD�ǯ%k���`ĂiʙL8�%QB�6p������>��Įë��F�bHC=ٟ؂�vg<��gT�2�N`.�	d�|/HIJ9	�d��N���`'d3;�k{Q�x2l"UE�>w	����#[��A�G6p�HH�rA��v��@��q�]X�1gB;����Ma�>�`ߠ�H�bќ;�W��Å�Q��(� ���i1kp<>k�߇��{�ct��9l�=��̓�c�v��#���X�G���x0���Ӗ�Oi��?gƿ�#ò�`��ްk=8`��Mê2���v�I�
���H��c��t�2&��1j���֑�5��t�9��qǃj�ak46ۧ�ֈ
OGÁe0��cZ�n���:��2��3�m����E:���1BTqّ����G�v̑��X��6(��V��54�&|� Tkt^�d-㟧����N@��f퀑ڧ#����J��#kl�O�;:�v��7ۆuȺ�wj�L�5n��@���2I�fl�F�ñ9�W��g�!�����2�1�s$�� kT��[�G�^�Z�a���c�e�`���o�t���6`���L˨��LL:<�=%��h���Xw�*Y��Ǭ�yo"���2�����o��1,��<��@���'3��\��퐝q�GB�
��1+�'��5k�vY/M|'<��m|:�_>���U��]|<]z��ˎ������ċ9g_���\z���Iv��_3?�<$5�C{��=Ƽ��=����_;�JUZ�y����(���|���:J��J=�3�?gٷc�c�>
{6��H-B����*c�V|���:c�w�O�d��њ��i��_|x��\��|���{5%��q�Ý-��ݨK������>O׏�&�19^4�S(�W�o_x|�B�F5N�h�R�Vo�;v�(� �l�(�Y�Wq��zPܖ��D�(8
$ϴ}�8o0}�	9�����C*7�L��'	C(��m/��K`�Vx��}�?�q��CuO|��s��o$�Ͼ�t�}��) *��mX�׏��w�5T�r�<X�Z�\����˥��/jsF�wJg�T���ܮ8k�y�p�Cdžb+"��t��e�=�I��:��<��3T1X�V�ľ~�@K"`'�xV�*W��1�/E˖���'	(�¬ yx��|(���/�=$tU�O��]����A�SV�I�V�w$� S�0�]@|h~Ԥ"M�P2y2�R`]b���	�,�4eC{7	n@ח�$�d.�Ճ�SG��~JBcOdRӏ�z�m}"F�-Ӫ�c�ɞې���bT�!s�^��Õ3Lv��Jg�����9u��DIW�6X�d��c���\�F@�̮�7�&^]����oX���&=�����3A^��.e��J#YY�i��
-�e~��ɮ�֒�c�R����І\�>�vd�@���tK�y+40T.����zŚ��S;6]����Y�{�̝P�~�r��탽��F���܁�NО
h��V���F�ׂ|���:�Kf��ނ=
;�(�5.��/x��gp\�IW:yA���z\t�����`�%�΅�c�P""��9�2K]�Xm�fQ���Z-1����b��7�'s�W��]�Ԡ�.C�w(��g�^e���sn;\�\�����9&�[��	2���<P��B�Y�/�g'���h�~vQ[�폸Vj����2�(����s��^��o�^sw��]�M�[����(�d��VN��eU�;�	́ 2h�A�.7����1�s�B�V�SSUYby��ҹJ� ��wZ�E�S-��
~���tl!�ͱw2�rN$�Z�1#�:a�pi��^A+iA�� '�i �F5`׻YQ
�eQ�ԏ��(DC�	n�I�#�9:kn?9����ۻ��B�i6�Ǔ���=_ql�0q� ԝ�
�I���:�{}�9��[m�;h�"G����ĕ4�)�S_s���/�kl��r�"\0�
!��L?�,ThIl�a�b6��3��EeP��_�y��(�i\.���qD'"�-�$eb��Q�A�7L
ŗSo�A*Ǵ"dG��<L�g���Ԕ�[+:�4��Rn�% �zM��,�
��"#u��;��Q�e"�T
ZҠt �Ne����
1�u�y
P���X�Pq�e���\^�D¡6�(�9���j��;��9UΔb��Íy�\i��N��$��k�++�E�,�7�*+q�j���w\�L��@���L[q�� (	6���o�����>�\����8������4�|@PBUr)ӂ|ޠ�n�H�����d�	��	_ӈxI�BJ��Ӡ�E
Bc��`�+	J<>{&�8j:�@�s�/b4ۜ�flmн�Sh��0M.�<��n���z��2�e⤔�>u}>��r�'2K������UE��į|?�|��R�^��I�R�
�#1k���lz������m�w<�Ь�'Y�LqH�Y�/$&I�SOһ��GRT�i������q�R^g9�_��M�㻱B���̨/��8=����f��2��U9Tz�������@�w���.�y��_��VG�
&\�k���$v����v:6@pY$��.
��
3�euQ�����N[�c4�̋�U���Rr$'���t��R��E��w���p�&��)]�8�"Uf�4o
���9�{v��[1��-��N0��I~կ�Ξ뻳d&�B�Z��o7w��^�l�:�˄e���nC�Gh)WN�x�m�oB_�?O��ɪ�#��x�s�Ȥ$�{G6�I�?��f�/˘O���)b��K+~<�")�=��+&�8kD���Aܤ܈��h�m�O*�v�YaN�g�d_�������8i�&Wh�$L�!2}jZ�TICN���Nbr���N\��U�<9k��t*�Tq�:
@�vnq�B+���n�>ҷ�m= ��hD�Q�?�U�	�v-ٶbW�����C�걱��})���+�����j[��'�o�:�|u��1�+�HZ��| �qt��@?fv �e�����Y���rC�(���K����k���~+����xjt��Y�|n��{�ހ��wDr�b%o�^�����o��t��C2lbv�x�z�/k��
�̚':�w-�A�̛�Wf�v��S�;�b�\E3�"�ߛ�J��%C
�-��l��4��B�;�ҳ���0u��P(p��p��x�l+{+�V��x�7��q3�U)G���6$׬I[q��+T	���h����B5�Rج�.k|Ņ��Wm(�p-zg�	��w�A�l�6�u��&,��J�\z�]�N�U�H�`��w��#�X���㴩�2�2��<u䱮Gެ��)�,�CM����#��������;k�}�j���
|���]���ڔ%�D�@z���S\��e�l���J-g[k�M�E�m�z�|�^/j]!|���E�6���X�ؑL�2�_+Ώů���w��>�R@�e}���?��7Էy�$Q�ڹ��@���Ce];��& "��jn�,�0�4�yۡ>	''(Wt����V׿H�����vY�6��HVp����Up��{
��z;=��95AV��I$W��+�q�Q�?�"��C3���=�G��4T��ko�8�,7�b7�vQoZ��t���
�`���W��hϑKNbl�ߏ3|S$%?�ܧ89���!�A�l�B�7�>5TZ��E.�B�-�tr����S��z��*���X%v?G�腾]�h�g��,Ԛ�1�T"��ae�+cDf�0���de
D���@��bgYH3�:�4;vZS�Z��V�ٚu�YY�9(�5�v�T�*��(��'����F�r���g}�@�
��w�)K�t�V��_.�wn�)�Ekzɇ�Z�E(m#OJT-�0�(A_�j'I!7�}Z@ˍ"�S��jÒ�
������@&	�ʍ�����g(�N�`��xG�X�G��F�o
�ld[��Z���k��Lu)�S�Q�"?��RO�ƥs�ՍU;��ll�B.E0�g��a��*�u�l���6"+��&�<8�j�ϴg�L�aS��G��oQ��s�`�Z���������'�K��e4�f�<�����۹�z ��nNÿ.�:��<�ذ�'74һ����T�����s�ؠ!5�����ޓ)�{at�~��Q�Ջ%��&$�?�߽�'�p<(TL�}�n~	�_�D���_q�3|�6��^��pT7�[s�"2�(��<��#4��"�R��ۘܦ�"��]7TR�쟁��ಾ���Gk`1Q7'x�CG�H�Q^��lzᛉSAT��KR(+�g�-���՜��œ�J�M��2+�t�'ZgeEī�"��}���(��?���[����臸�z�~%yQ��o�o�[v�O����5Ꮑ�)��;_7YC�~�wG%_�lŐy�Wu�fYܛ���ۓ"f��u
D%
�:p��f�.�����iԍ�����V	4�T��=	��U۵�!�84$|��0��lh(Q�&'4&r��f�SM��ܶMZ����T��j�'��d�r��-b)�jC�.�7�<�{T��h���n|%�]�jS(薖�$�*J5lr���{��]���!u�'J���s�y^�� :��c޾�����)�&M��K��=�k���Ȓ�iAͬXMz��
�=v:
���(���L�{�@���rY�,M�i�_��u*�z��B4��N���A�h�|�Ώ����=���Zc����l
�	G���]AdO{��]oB+���l��l���!��p�pAc5�~M��V��ƾ�� �`m�|�
!B���P�(Rk��%��ĵE�h���'7�.tL�ox���E�HAHV�&^�2��M9����ς\�E�A=؀F�QU݅Ta��rL
?�4Q�;Ȯ[�uJ�m��0e�<	K�6�<cW㸦�찇<�*IYX��э��c ��c�Z*^_y�'!-�
Nɇx���N��Es�vW)����ۛ��>��W�;��۸���*�����"�H��M�
���n��DV�]���5s���6��	�Ev�`��t��p���������fW<h-�i1B���3f����e'p�!sƣ���1�g����uc8�.�)��zr$3��}�n��D
ߵ��>,�pP-�@IǴ��!UL�5��[�䙔�s*��fֳ^G}���
ha�N_$�+M(N���3�Ŕ$��8���z�"�+D��C
i�K�ՏSK��q��o[
/(�|�����d
};��m�@ħَt�Tj��EZTx����$޺n�x]�
�[.��u��ه��\�
b�Q���Ѫ�����B�A=��E@c5��;����W�SR ��.����|� ���Pk�4<�[5�{ZUdQ�y���6���r�a.�c�I���!��;!�E$-����mSAA��+#I۽�^ILt%	3�9.�`����x���[��t��O=�0�]l��0Dݳ��V5_]a��&2��}J�Ӡ���u�r��<E�;��Ӽ^�H!���Ռ��W9.Djw�迹�W��	�2�z�>(�j��0d��+�)���װFM�T�kVR6�^�7����H����
��h䆲�M�#�P�ё�o"��0/�
��Cmǧn���(�qNc�RԮ���ݏ$��{(Kv]'|K�S�e����`V�m���	~A�Z5�k>�a���7w2xO��\�j����|6��&�<=M~|4�5�?��x�����i���J�0�>#N���![n�~�Ћ+U�hȕ�w�aO�;R�`v���`����$�߮���t����Ɯ0"=+/c�h=���PS�C�<��7��v��ׄQ�e�[G�[;��ikAt�R7x{�G9=�6�K�-
�MK���ɝ\%f�������jA���1
�Q�VCb(~�"	�v��l�[9H)#/Nf�Up����FiF��uEf_�����O:��}��w��2���%-�t:w6���^l̄J�%�Ӎ�b�%��4�e�S�v(����A��q/�oz*2��n`�jD�6��6�)��ʬ�%E0��R��R�l��Ozq�ء�N2�NX�{*�u~C̠Ђ����tou���(�������L�EҞ$6��
��t���j��(�Z��x��t��f+M�;<��eUh�u�,�D�g��޺����]J��m�,
,�E�=���������Eg6�TF�=��y0�pY iX�	pb�O`O�u��L�C?�Љ��~���ݨnx��c]d4����+�i)��5�x˫Q?he_��]�������T*bռ��W�y������mq�\{G�_ U�O
�I'�H#x ��'�gT�tM�M�{>�RbT��v�m+͡%Z��X�0�g�
�4��X��%Dkap� 5�y:�SBS��hg��z.W��eX�@2��.��}^u��O؀����S�hsP�y�'H�qE����J��;��2<�K�E�V��I�^���ՙr�F��_+���>�y�^��-�Y�>����]�ˊ�^_Ķeq
�>����r,����8CB��	H�\
��P��+05�d�,��H]Dp/KjV%����9��F���'���
dP�˯V{��.�n�k����L@�M������S��dz~f��=�V�!'q��G��1\�58��[��8�ǘ#������$�N�]2�A*�I��H<X<1CFS9��->��Oa�m\%��-�tJ_�+'�'��"S@��ن�O����-Z����2�n���#�?/W1��PJNY��+���9c�@t�-L/e��x��_~�D�;����� ��B�Rp��(��IÐ��59�t<�.oC����/�P�
�J*��Qd�"��]�b?����h��zM�%��"��,���Hne}��k�^�:!�q8��e`\R���w�Y��;�4f���>��ſ
Ǩ�Wp���{�E��]���f�4o�9:��1
���AjJE�:����Xn=�(o�$���Q�V��ڀƒ׬�x��KNC���$l���hw�\5�������X9]�=���ѽ�[v�;1DfK�r�I�f0�[�@t���B���|�,u[c�r
}�&���J6_��5����*�b�e�u���li��a�FԹ���2�_���]KO1��+���x���ƃA�ތ1M CX
�n�vAޖ��t���7�V�9�m���؆�.�2��x�.*�������z>�1Yt�2*.�c�t�G:��[�%�:iF�<�4jO�UTh�4��./���u�m��ڻy�����}���̑�r��ϽpB~w�[�]^!=ՏV����p��ADG�O��b��<q�*��|��0���7���������`��Ax"�}�W+v�m���<�i���궓Z��qߢ/�7��X�y.U��m B(���oX�y�`�
{��T��E4smA�䂩uJ�|j���_:'��߄��<2��'Zl�R:b\VG�kt�)꒼F4�APw"��d69����6[d�n4L���gM#u�Mټ�o�p�~�2|j�ߠEkß;s���ռ]-z�\�'4��� qc���	|�֌k�"o$/��2�PJ��CV��;��ڜ�e_�{��S6�.F���^�  �㠓o,S��s�m�)��_��E^%�*�Xb1iY�{�M��Q�l�zC�+�{0d����M
u��"t�<���SSd�h[f�y	��6`��~�KwOF$W.��„���6E��1��$M�_�
V%HPJv&1HB��b��G��|M]�	L�F�A��\9�fL���,�=�c(�WB�
�i{�%Z��t��(a����eF��x6�֒ӑ�C��GU����BvKS��k*�\۪?�]�r7��)t�T'���Ei2�;��PwƑ�C�I��;u%�v;��{��@$W^��7iIbA�?��U��������4XiMBZ�L�:��6t��N$��v�<�t�=�(t3�j_�mS/w�w�K����5.
��6�'�X�@/��@�[�ɇS���`\–�t�ѳ/G̣͐ �r��]��g�®�U\`N��V���ؘj�r��d-��V���O[s���>
b:7�����rf�&���mo/np�#���H^���Ց�6�f$� 
;����?�]N��d�B��D�H��y�M�[P�|B�ˌd�hV )|��
��<sm�M�vq*>���Wb,�.�@@��v��"��G_��#76
��f����(1
U�0���{���jJi�^���JNm'���$�ïi��/�F�!�����N�n�Q��/*�|�uY-Wڲ�T�k����J;*�vۦR&���A����Э�+4p[3B<��"{��h�ć�x��m��0�'!M���4*Ń���5>��4;<�F>�׮s ���vf�dq�#�n�$�qt�r�3�@�������XG�M�x�t�'Sʗi���ͱf���������
��`�ȷL�[���T��>�YA�D��9w�ʓ`������o����9�YN\u�T�tX��?��3b��IW��[�
E�X=2z�NE��җ�I�
����"��!��(}��{ul6:>�3���.(g��0�Z��M�z�&F�ډC��I�����0^jkm?�A����"D�EAW�L�Kq?���Q�yY�x�1�Y�Sb9Y'E�~tc=�rX�	؊N�`Z�`)��j�Z���������Mu��]�ހ��|�B�?'�d�\��pJ�(���1����A�*����8�^w�iت�t/��ǂm�����c��ܱK�Ce��r�gTcIPCk��@�Sp�aCwv�mL�_dЂ�X�Pʨ��_�_A�F���P������� {jEB
�C��h��*)��80w�\~�UZ4��+#���-#%�?H>z���-�[��\Q*��mM����er+�]��Z�2Ku��(јU%�;�����O�C���_���go�۬�(���\�n��)�����[�?w���M�P{����yw�h>-�J?�avď�o����n�}�T���GUϞ������k��92.�d:\l�]��l�F���~��|��l�(,�Lo�e;���OH�d7g.�-O,v� ˞�c�����cwZ�/�h�l@�4�q\�<�)�q|�@��@�FhZиCy4��y��·����D�G��j���}i*G7N����	�y�Q��{nբ��J+�B���V#H�X���{�	c?f�f�C�U�F�eI/ �@g�/]!%t��F��Һ�z������	���"�@�X���q���������3��a��h�
�3Ng���&�NH�{����/�ټv[��/�명�u���K�/�����ޑR�R�뎃�g,	[�%$��l7�W��(t
<sb�ʍ�5�hq?M�AJ+3ь`N�=�D��4<v������ap�iܹ-	g�M�.�R����f
��d �۲D���Ŀ�D��I}�)0(W��o�"dJEZ�m�sT����=ks7��+&޺"�4�w,K.��ٮ����u�\cq,qMqtCR������x6�CRY�U�Jl�
����n�#bV	RRM�
��!SVX�1љ E{W����r�)��f���'��>Ԏu�p�>�/<�m�tn��m��&��ON/�j��V��_��S���Mh�2�馬�,o%�ˑpԘ����:���R���|�܅��7��U=m��N��Z	7|ӎ�tV��Ń���sy^Vâz^�f��G���H_x��h�ݩ�8�p�ʃX��6��x��˜A��D��^xWx��9�B��s��/.�rZTI)`�-|���^"�#�㉃>�w��<�*�!$�5�׈ڃ��d�k ү�@
D-U�MK�E>'|�g��_���/����h���m.�G:�^r?ݏy1����1���~�T㉱"\<��m>�g�X�����v�a�͊��G�"L�j�E�`�ŋ� `����Jb����Ɔ���*�	,����K���I~vbV�A����ztV0��4�d����C����kU��%��Kʰf�<���K�fg�7��gY�5FcS	��I�e�8�y02
'}<Ւ�q����Fs#��#_��qQ�1�Q>��g8l
��[>��a�n�yEw����
)��m�-��� "B�ȃ���	Zs>�=⽞�cHu�,�gEBg�c��+��1 ���օ��B�Mq��rȓC�f��,�� �2j�iih�O�AR�����QfA���l**9($���M6&h�=p	���}��3Ld�����F��~�C�k��u]�"�5���?_���}�$� =Q�xGwHi���;�T=��|�i���q��|/������#�1����h�v�:m�|ZprӴ(�)�H�4X���%���ߡ�X�
�Da<���~�i�z�Dgu���O����\
�d����3�m�@:\\j�z;kD
z+Q|\�T:�������1�R��x�*BC�Oʪ�ȟ�_��9���xr-�sBK	8mZF����&�Z�^�AXDb����X�@�AXh�Af>s��g
�|+nm'ƿ�w�ˆ�p�r�0Z��rUd�XOe`<��d琄o�h9l4����0�%Z�ZO%VЌpKK#�/t��d4|%���C�y�J!�
z��I��:\>��L�?�Zt�eX�>~*ҧV73?��d��<J��74-�p�%Ϩ�"[��R�Ct�'�dxzO�����i�f�N6�on�^���:}���^�Q]��{��,���"EVgDm� ,l����u�f��D���K7 �٥B?��H�m8c>qm>�'ӻ0	�i<�D�lI�l�;c����Q�����*@y��!�AǏ�A�@����P�5�Q��T����,T奪�<4;:��gԓk�Yg��?�v6��¬�����:��%uP�6zd��+�m��.���"�[:����\�r�p �����]G#=�M�5��$jo�$_���62���$]�4�<\�C������7�wX��L�F�9�U'� ��,w.����!mJW��l��R���Sʎ<
�(������IV2$o�x��0�	I��w?m�at\��N���3����V�x��S��)�k� JN%�@~�����{+�
M?�^	��v$/���k�X}H�`OH1�G��g�v��π�%L*�ym���E1�� U�/p��	�6d�h��	�Т���u�#��>��p4��gg|��GS�#�5~8��)l|ep+IJ�!��\Z��)B�rb�/hCF#���3K^��.�+�ݴ6�#��z^������=jӝ�US��U��Tb��*�s*�ҵ�	�є�x�
��2W�p;�[�b�*�C`���5ck��q^��/���y�f�g��{�.p�x)9�Ꮮ��3`�s9��1�"p��I\5K		��Sl9�d�ԫ!;ގFzȞ܈'�Өo�%�'f�\��G��x�I"�(�{$X�JJ�4ťN��v�-3�68<m�N��kJX%'�Ot&>K	��^�ˤ�M����5.�oU�C2�-��G�ۘ&zZ����(gS�}���[�oÒCX��>0��E�^p���ȅ4���k��HR���F4�GH�Ԅd�Hw�S���0��%d5���+0/FAg��Uv�c+�V(�X����ܨ�df"m�I>����P�(�f�{&N�۱��7�>$I���n�y˹2ɔp�x"�>���e�X��7ȷ�&�#�&;=�%S�
�$��<mط�2��
�WGHY��JC���MKRP��J�t>���}J�Ű���a>�e����f_J�<U�]��;�n�L\�O!�P��_4!���C�w��V/�7�z����6r�v�DU��m�Z�'�J��R�+�5RX(�tA���K=G��>���\es-��ņRɹ�������prF��M��fଲ$�a��T`7B�
JN6q��s��S:��W�TFMg�S0}��W��2?ߣ��)$��&�(���Q:
.���5M��\�`@a���h��(e�~S�F)�w�~��)Kiw��?�q�
��dS�pK~r��|6P�_���h��i�����Kߞ5����䋵�f
9�����B�7&�K��dFF
��\��N�*XGG��jn�>�9=]�
a��LRJ���K�c�۬�X*B�\:\Z��a�O�H����R���o+Y��~=�����ȝ��(T���H[I�ZQE��f�(.p�e9�	赆�4��W�y-K�X�Ϝ�5H�iR~�!�����X�"uy��o
����ҁu�1��M>�4þ=�u��1:����=,��c�a���*m�1{QI����A7>&:�ڽv\ٺa-���A2�}bE�����>��ݩA�P.jl�f�H'������9ͭ�B&��"Ndߊ[)���/�*��v��y��n>N[y)c�q;`"��4O�<��$7*�>�2�RM�Y��w��$I��i�u�}���M��y1���v-7|�_��
�Z��㆓�x3�@�qDZ�N t
��0�Z�7 �5c���kj>o��"���M�����-*�Xt
�,9	���	��[F������A;��qʣH���Bv_D>N>D%3�&p���(u�
��׮8To�q����h��Ո���Ἵ�ԙ\k�D ����j~��
�N(�e�t���P�,��F2�g�H���䐂A%.��o�SM�����&M/h2py+9���&Ս�6�䲺�G"S�ax`O�a���D1�L�>�S
�{Gr5Ɛ����ٜ��K9��s�����Y�&�7jO6n��:VF;�����Jn��##+�������T_Rց3A�Z��ø�����vo���V���V��FS
i"�:�O�����,��ԁ���������0%D:��E�:-��"���`�2v�I�E�B�m���
�t�Y�5����4���a�7���x��D!���Jy�M�9�ѵŤ�f�é��s%��֯����3��y��q�e�w6�vQ'8�z��h�NA��Ѓ��L��%}j�j��l�c�S��U9�=g����S���d����n���8�cϿ��������G�O1�ǭz�ғM�+K's�O���W�������_�;�Y"�g{d�`�jz}����D�:�w��H��GC���M�@�����c
�V1�B/�dl�g+r��q�:���x0r77�f�8�N��eY<-��@÷�B��K��[ھ�G�1'W'�l.�-BG*�W[-ώ�1:���Y��ݛ���� a����&��ƱE���71�Q,�)�hn���ƭv[��� �..
&��������\�BJ�?��#��K���\��+=
dxR��~ܣ��`��d�x�?@��*UqU���T.١8�9CYV@�P�9���c��:�i�xW(�]y�K1�)�	[D�p�5�)���U��H
e���	�>�τ�?�{��Կ��7���W<��]�f�u��D�X��{�dIRPYD���*CW�މ4Tb�V�Q-s���R�|w��*>M��ﮑ���h�$�L�cq&]O/pb��.�\Q`�ѢHxh���&m	�i|�5ڙ�U��ӭM��6q�
`P���n<�$9��Qu�Ξu��^֒*>��;
`����ˋ�N�e
	{��և��b����R������%�E��#���t�Y'�E�'�LW�;Z�\�:������M�.��|XT���n��4+��|��b�!۬=<�c�P�5{�f�V��6C#����%��ER	��Eh5�Y4`�f誵���m+������ZW;|)ܰYD�/�\3�T�(�>̶��!�a�]�	��Ŝ�^t	[���h��ge�K���ƀ�Xo��8��'�4�ow9q��6k�䘫O����	bw8o1DA���y�wIGɔdӒ�&}p�_a:"�D�2;�$�$l5.]�ś
b���ر�
n$�� ��YE"���!
�̈���V��M%��:��p�FB?�r�ˣ.��'��|&��2@�ݟ�Vu
��~5����f^�%_���_��>��ٷ���;2�+�1��1�����Q�k5�H�]��ܬ�1{��:]"� ���8��E�d��Z�AѺ��7������w���vϿ��+�_�*>a:�ڌ?���O��/�_{^��~��~6��S�{4)'����x�f��b6�z����
��{eu�h�����>=8���{´͋l���w���^��wz��'?�nN��������j-w����;;����l������k��Ao�W��	}uKg��6s�۠�~z�HMM q#���\$'}ߜ\k	��L�s���	��'��}�_y:u�sU��Ao ��S�֯��W�@~�&T�TS�~o���A�B=��դ�^9�,O����9��.�Xݞ!j��K�^D��\����6�a��jrM���"
��C5=M�/@��i@M��w9�����:ۗ��9N[�����h���`�F�&T#eEW`Zݩ
2AթOx�S9>JQ�6����׬����4��$R�Ў�	�l+��5#/��'��h5��{Y� 
Xg����8[v7��x�/!29p�}�Q�O��6���]4��&�)�"���^��%�ڸ��5�ɏƣ�-�a��<�
��a1�@�ֵ�o&�`kb�d��Ž�/3E�KDs�y	0��
Xݿ�<�H.�
����ۉ̢hj��p��ز?�D�*��~/U�Ӧ�(:�:��˱��Ѥp*�) ]
�-[ۃ���j'�
�`L�hu��y5BJ����Da6��@�U6l��F�x��d���<��w��F��:0�^5�� ÒC;��݆�_?���|�z���A��-�p2�4��a�w��u
��N*�҃�֋��Rdw�B�w�g�
�2�J�MQ8��-�>�h�xr�$�^ʒ�^�z�r��jҾ˺�|�s�����G."�����-��U�M��}}�l��I�ꏡS�#��iM�i���AD�YAX�EK�0%��?�a���y�(�خ(�D�	�ek�Jq�h �������Icl+��
��.$�\���r_3�Q���*�4^6c��;�V^��w�j��}��*�:A�����xA��$�?�e��{�4�[Av6���ڪ/�<+P�F���Wv��3���(h��]�C�K�^�e�E�M�j%Q�c��~^#�+	��Q& p���/��_�ߥ����$�,o���ӡ�#�߰G���o*��(>�v���2��'?�-���JCx[�P��#�m9��d'���^S�_����]
�D�P稤������d!6D�I�lxQ�f�*ևǶ�{�e���3��8V�
��#J~��}>��lhb)w�|k�3�~����(?�qQ�#
֌C9�LE�N�W���+/���Msn.q(k��L�i��F)��߭
��V�,M�n��)D1<�Y�c�M��XK�G]<��1xFE:8�;��	�c��f���Z�&eTpaq���N�t2���C�c�v��O4��I��z�P|��-㖐
��
	8�^@d]��xXk��Ǻ��N�I�ѓeV�8H�Ty�N�������k�`���ť�(��i>9����-
�������� k���&�zV�y��V�*U�N^��Ҡ}�ս��~t>ǥ\ ]F���=�k�l�?�ߕx�6��{J��*�����YI�v�^K��f���J�uIY�	3�@̐R�����JU��[(L�sOE�b���^Ԗ���+�4U��9д^Gn�}E�_���rܫ#[�ݎm�Rs}T���w8I	��$�N��j�4��f��zXA�*
R+\�(�1x�,?�F�
�c�#̎c��l&z>�@:��vG?6b������>Vn\�I`dS$�Qݹ�HD�,d(�����߉x�	qC}�Z�.u�8���#�p�+���Ӌ��Nd���K'3�S���њL�"���4,�(8���F��@ab��@CjQ�[x�B�ZB����]O7�‘��%Ǒ�PTU�< �^�*B<�KX����F	�=���g�����K�n��x����b#�}
���K �����*���Iߴ�BT��d�񘳊����}hu��">&gzĊ`}�H��B 7}zp9���;�1�_�)Rh�(�����ӑr_-2X�\�~�X��CC�L�*Vb��S�����o?d�,<.F�bKB�X��Q0J�W�o0N_dg@y����ʆ���,<��B��L�te�ޚ*]O��.[�X�l}
��`���d�S�0id����l��O��l��jP�mo����1��p�B����h`�9����p�9,�A|h��e�>3��aƦ:�TUE��E�]6�,�g1&�|��^�5�^�Sϕ�,��"}�{4w��5��k��]Y
qП�N)4��"=4K��8�P[8\A����pÙN���^?^W?���O�9�����H�q��w���0�P��S!V�,=��\��q�_,��]�|4G�V�0*��(	�R�P6��Wiҥ���j����͕
��+HT���T��
�2x0xP��_�3����F�E����i���)Fbc_�������	��ո
��6�hy��&�:�d��H�Z>W`�XB��|T�#���$�4Z
��r`���	�ٞ�Q��$�E�24��+��#�B�gM�3$�H(KA�nw�6��c�8���=X�5�R�1������	OG7a+<Gťr�N�ۮ�G�t�x-�6}�j\�ls"v��L;��4Ys�T
ܛ�ҥ����z��H��Z"��Q�	���,PU˝q1[�m��n�K�L��������I��B-�!N��vD���J�"���o�]�I�4�}��ۮ�\3��$$��$=e��������1QU���{3�d{�{�?2��#p�����f�ݎ	r��)(Y"��lIn�j�I�:nh<3f��ٝ���J�F5��z[�/�;���چ�vK�˫X�E�mW��]��X�Z��aG�
�ⷃ�vQ�`O��*j�}f��$28�u��dz/�SB�4��cp
�Xɭ/zg1���(C���4+w�U�<�_q�[@���A<��c-��Y�iY����'�.W�����/!��/(�z�N2��َ�s��2��O�+U_�cf��=l�@� ��Α���/�W�����Ր��8��F���&��KI[οB	���IB z�$��/�ָk�+��w�n;�2!%J����ێos�_���:����{'D��Y��V><�>!]�6"����e��/��f��n�CRİ=����.h_���]�����-�ń8nM����-���|��f���x7g�mz��$�
�/��vky�w�ՑL�CX���3���1E��.��s�^D���mv�܆Vx�M}
�p8J-��A��\����4%3D���g�"��o4<Fz䪝���!�݀��/�*+r3~�+�^�˅2|/za�F��ܮڵ�I���AB4�4�z���=��j=�$����f�){�p׊�r;~R
�u�6�X�
]#~���f��ם^��0�
��G]PZ��Δ��5e�J���1���')��8�l�G��r�R�>̟�t���{%��Xe,�%�C/�	li�)F�B��V�ā3���y��t6ku�QK�ϰ�[0��ab�HlgM"G�"�b��h��Ӧ��i�V.=��~�\<7X�h��3ȯ5�:��\%f񓳬�u�	���{��U�چ#�B�4����z'׺!�`~�\')��hZk�e�r����ȡx�\�7�.��l�������2G��4�8�ڪEƻ#����f��V��k� Y�+9���<@�5�����5Ú���Ժ�""�@��&���E"�-����b�p�>IG)9>��6w�`���8��y�S�����
�#�k�+n|�3��
3�5�T\�.x�C^��}��z�4Py5��0�=����z�5��b��y�
���i���շ�.HN�{�6����]=s�0�+�����K�.�n�2d�N�s�Mb.���k�{m���,�%w!H�&H��I���Ԍ�.G��,�ર�<�¹�Z�����tyXʳ��~�~��|bf^E���Wr�
*7��Tj��Y�G�ĺΪ������z8:�c�R�#��^��=x�]#�u������з�a�s�?�{e��Hg�Q���š�}���Q�ԇ/�Q�A�f��w�����y��ܞ����%�P+'�#K����o3��e}����
���R��0U���C��"�e�����~7%����܏���g·=��f�l���0>ރ9�4��|��B��T97�ӊ23��P�gQ/���^����E�
������Z����,feYJ�%Kb��7���Rn�B�2[�n�n�s���t��v�YI��ק�j#v�$�<j2g����k�V�oS1�Gb	a�N9�6CL
2D�H��5����c9Hi��?���]o�6𽿂y����=:M�n���Zt�ÞŒ��eXJ�"���y�d;��$�D�x$��}J/���Φ*1&����(�HIUt�mz�5���HiXY%Fk�a�*%�A�~ч�k�J�]��i������_�Sk��ƧU�W2�/�Q��Iآ�ב���E1=�����2hL��$��`��]�l��F��˩t����1�H1��p/���&*�Jr%`so��Y�Ӭ���uF�e���}�����}K�}�����ǘ�2��Z�/����(��m%\��PO6��M^M��i�)�m�)?�@�9k
��[�0�A��w��S4w�zS�������\�\��k��s s���L����; �����+ӡ]P/l ?Ql=����Ư��\�"Ts��״��
2Vy�����gi{��l��L܈IO�ֺ���b�Rnr��h�(����\
��e�M��v~��(���t"�t��L�w��1b��ӕp�N��a����G���c����g?��'D����D� eH���g��o�(;�i�'�a8B��;?
�2�g|���7�iv���X6��u@�F��X(�Ct�	3����8������'�V��4�k�P��Α�m��1�IҀ5�[�q����2<�ߍsWd�� $#I��W�pi�:�Ww&��*^y�~���Mn������ј��I '﻽����蛇C~���'�pF ��#q���;�����m��`����������I�뉇��@c�h:y��0���!��zX�����x_%��N̨��q$�~Q��q��!���a�{���޲(���J�_��6�b^.Jy��Mޜ�9�z����e�c؛6��	BG����Sq|�	"Nx!�G(*������3~SD��A\��:Fq��J��g�d`����=�|9�h1`z��1�佬Eb�K	��L� e#Vu+��Dd��t��>�(���^2�}�A;�><q�Eh����<Wm��"e"�o��	�8�}�50�M-�eU�e�E���+<��O��Rb�m�]���D�H{ç���9�$��seY���:x�]�Cnt?��m]	��@�CLd�����qE�up��,�������>t(���B�--�|z`��=5SI���g�dER;k�>�@����lH���2><G��l��E���!Ib?�&�j�Z�{��C䥄���'������K9�r��A^�_��Kt�Ϳ����YnN}�,�?�flp���Jc���Z�Mu{S���\��(�����΢�#	ة
Z�~G����+6�Dv��'�{�dܝ)am�@Qq}�%��I<��
�v�z7��ί�I(^�q0��h?ILַ�w���*`�ȼ�'{CB�w��I� �>�H��z��d@��`� ���;��X��T���
��-֗e�;^�g:y����z�]
�ₔ󢬎u�xpKHd�?�gAp0���<�_hdw�I>FCr2��8���˅�#x5j`_�M�?~�o^FMٱ �ĉ�yB�U�?���<���XAzhK�P�j��x Nw����m���>���&��bj�;Y�s�͸��B͟^�+�@O�����6k�X����l�
�Pt"��N5��Ht��_��m�qOsN��A�s�*�m6�ӳ��l���s,�ѹ���1�"�%Dž&D���)`�넇�o��R�)5�92aU�D�#σ��]zR7�Fa��h$�y=‰G֛B�����W�n�~s��i�N����E��;ƮOh&]��J��d �+N�R92�8r%�4~�7��K������#
��E�JXT��l��Gh93��;T>�H�K��ږ���R
���a���pb4��y��D�����Me�Θ�w�^$���;w�\�,9m��Y;����،ƒ����ȞV�
��r���s�1�%��c�6��_Pp	ʒ�;�0R�z9J����gK��D}7m����י&�ǸCu��o#q�'A]��0[���Cqxkk��|��>4���w�q"�O�m��g���^�z9Uh:W/���w6ymD�A3�j��Ltĉ�
��dB��h�i�`2�4�~5�;h'�i�j�{hyNX��yj2�p�4I	���6��:@b-)�����m3���h֯T�;Mb?�$ĕd�Mr0=�������5H�{v�u�YUM!����)j����W�'E=����t�9���^�ʟ=�Y��*�5j:�\��/r6�~���
7墕{Ѻ��ĝ�T�I�Qa��>������	��ݽ��K�"�
]����b®&P�`m��[�t]����UDDӫ�̪����ZE��̇&�^�D�{I���%�aY4�$���1�]�qE�������X�o�6~�_q}���Q~lm\�K��A��S@K�MT�r��w$%��d'6`~3y���w��Q�RR�J�X�����y�l�P��p|x�&
��+38+Ղ�Y��� ��bI�H���|j�$H^��B�
�wΗT�4��
|�;ߗj�RHYLsTS� &9L�F��2O��N�������XJ� 8��`~�5���e�*C2&>��(�UAG���jу�ST;�Y�NJ��b$e�k-a!˜�36����<�S�F�A��:d�(��G�(h���Z�k"��\$�wT<"M)K@	�˂��Tx�j22��1]��}8��/�+7�X��Z���f���?���6�=���l�����g@S�a(P�d	��r���dYaE�ND�q����b,�pȐ�'-i��V�,&�@�C���	Y��T���H�٢�
�'�rr}uQ��}��RƊ�� ��1�t�GMY}ƃ36�M�4���+t�+z|��vUW�wg/4��fefܽX��<6k��*��f�*7�p�k�ޏʰ�ɐw_��1I�7d��&�v?�手�ۑ�#����hD��b���Q�#�=[½���b�bV--O�31���)�VY5���q-�	v6+�SoFx��I�öփ�o��>|\g�V�s����|�R'�W�ѵ�8t��)�p�<�r�<��	-�r�Zt��zb�bAPSyNVa%͘�J/���z��
��Dx*�U��nl�m�*.��_IZ�pM��B������8ғ$)�.��ltMM�����d
�陑TR+�fv���#7uW�𥫠q����l����:�j7/��jx�v+wy1t5�R�J�lVe�V�u/���߆!tAG�T��ѻ+5�Yu��ҳ�gKq}����"H���+c��2��༳�W��ƆMc��>�����E9���b����A������J��R:�/C�� x��/�[�{GA�L8V�w@Ž���o��;�:4�~_S���\������:;XkV7�v�ӃK���z��L_��mA����P�f����db=T7TT5�`',��Ta�(	��WB��[^�,J2V*sgy2N�����w���w����D:�3�f7l��nΛ�u⏌���5F
gp��G�wB�pE�4>���)��}�K�F�S
���6�s��ݠ�ӣ����z�dn��b��
փ��ڣ��Fw�$��4i�������J��<.<_�ø�A�L�����^�pf�S��}ő�B��Xz�ռ9�U���������a��S�n0��_��A�%9�����7/�G��ڻ������F���N��SLQ�����3�c�wl�Xl>LTOz�Sh��ۏ=�S��]E ��VMo�0��W(
��&i��e]�a�]�ag٢c��dHr���e9�c�_[|L���Q�NN>�LWk#����1LǓK�-f�ѥ�K��]������$Z0h��#E�~Z��+��k�!d�#��BߣQ�!]�O7�c��A����9Ș�=R�k�A(�#|�6����C.$�>'Q�j���(Q�8g���,S6&>"���h�D�q%�;4Mrʲ����	|i>W>�
G���Zm)88CH3��O��V�Q�\���w̅��	�R)�R�'��$0���V!�64^�3z��u>������P
��ې�D'�񡿗ºp&�[W���
�M[�vR��s���Kf��>V1΅Z$0�w![Ū{M��3���',wEAfOW��KL��k`Rfv�OUH�|���S
	�a\�v���j�:���u������,$m�w����`W6�bA3�����Õ�i���z�!EI��<4��_��EIN˶�o����j[��S-�p���jϢ�!��I`l���Zr%(G������v�XNW�]�M�s�$W��w��ںJ[XJ=j���} �{�ǭ��
j.��Ӛ���c�&z�g��۬l���6^�����v�L��m˷k�ai�ˋ��E�c�\08�5�l��H!�����������C�nr��…p�A��ں������n�b�v�@wh�NuOH�-K�g�;���߭��~�0_2��%���ꊹ�-��rX��+�g>+	��Z�S�H��bR������#ً�l��B�TL�{9VHc��,���#�߯{^��٣li�5==ݿ�[��,��u�}2NW�Yt�`��dw��/(/�tKrX�E��9�c�	s�ќf�4�P�G��	[D9��"(	Ґx�J�i�А\����m��6�$��[��~B.)J��E�(�����'��	�G1�:������(�:�7�}|��)q�Eɪ`�ݮ�A�EK�%�߁���̋$`Q���E~�����i2��\r�!`{��=HH���# ���K?�V��d�ѥ%��Z�$t��>GI��c�M�Eϐ�-(����	�b�J3�F:�8.�	�v�q'��~]�l� f��s�s {q�O�&o�O'GC2�󻳏�d�N�O?�O�df���)퉑��c�f�N�O��E��u,��Kob�	'�N�M(zG�V���3`('Wk����?7Q,1(�E�����|N3�@40
�n(M��'ҳ�4�o�a;N?�3ʊ,!w�����)��}�&l�����przd��ئ��a�� ��+<��9�q��w'n�i9�d)^c�;������_F|lMh{�b曱�Y�
��_Rh�5�Nl� ��{��aV,͜�#�o���HNa,��8�ă2	�����,���;�oƐ�C�ť�V�8�S�_	��`�	�t��Ң�&b��T�|𯽗=�k�xe>��Ev\�-d��tx�q2i�ˌ�_G�(�9�VU�ȱ�Mu���
e����u�gS�`|��ܦ��<���9�V��������eg0���}w�+a�]BZɱ(�sΨ�g#0�
r�-���~�
��ո��7CM��3���˰�:u�>jr!��e[��g�4z���F���Y�9ր�-�c�V�)D��䌸V1��������,߿���dhI+����Y�z,�9ȅ$Θ�1g�G������2��K�*���h��O��aئ�qԨd�TRF�"��U�ɔ_�fV�!�A����n��4Ď��tg�FZ�&��.sږ2B��-�;�O���6EN�Ɣ��'�X��p��k�=�iB��w<
�:-�߳�g�R���:�x=�`���͐����XN$g>�Q�QTsC���Ǵ"���L��z5����7p�rq�q�I�#-R&��8a�s�Kҡ[�	��	w���A@8(��{_�!��"l��U��I⾖hV��b���0R�-PPd�%�t*k$G��~uZ��p4ؼ+�0<r��U�O��8��)vs3oYH�>/q$9�������*1��ՠ�(c�V�����Q^ڡ�c�4GX�d�Xc_`F)Y�>����p�
��,o�u� 8�CF1��(�V�L;&�.T���W�^U(
$q@vv�`%�P��ο�-w(~����'>���rʣ
aൈ+�tԇ�q#ga,0H��u��0�ZPx9��Ẃ��Q�ʳ�:-��S�{ќ�N|I@Dy䯑�B6E6M����>��x��o��P���5ϓm�cR���i�<��lx�5=���2\� E�\��lm)J/LRR�%��E�eU�E��͊ү���ǣJS����1#�A(|)���`�gt$E�FR�t�i��29l���K��U��d\�,]��%Ye�u"����d2Z����'�i3J��l����⚰|X�şm�\��4k�ʋ�e����B�,�s��ӽ��~c�.yw>=�ȹT��ٍ%x(���֘��K=�u�LvJ�굑��v��,]��䋲�k'+Q��#��+~�t
���[eU2q#-^[;
�c”�Iv���1�pé7���%��$M����v���<c�j6�ڈy��i‰؛�1 ��2����O�C��<�`E�8'װ�'Q���Jo��&�j}���G��B!��
�7�z�.Z��[��]
�	�]��1<�1X)L�~�P�w;�r�%��@����j���B�����u���wL�<�����w6���T��S�gYr �I�\SU����	���'u�ի�S>Ѵ`�j�;�~�D+���OW�J�^����$�i.�Z�T��x'̜N=�+ӹGwP*�dZ��(�!�o�Bd��ւ�QK~<�W~�7$�X��ל�<A#��iB����"�GY�Ƌ(�y�m�ڟM��#�֮�����Ѭ[��ֳ�x'	\	�w�Z��I�+���X�{E�-�`�L+,(}n����J���5�K��#f�h4��+�V��W&�*�aK��F���x2���Þ�d�&~UZ�4�;NPw��?��^�z=m\�z�)��]��	��uG���@�7X���}��|�f!�� �[d�
8�� p/��s,�=�y��K�O������Ϲ2SC�e�������%v���SD���2��Uȹd
.�^k*�6�ƽ��S*hD�x\�u�Դ6/��T���F��R>�eY3���(������^B�I�Y�Q���Y�n�Zn�	����F~�E��^�����b���b�Qì^m�z
n���\�-�v֙��u��w�!OT�����U/4�f���$�D
���M�msy�<oQ�wzFơ�X�]��&X�w�RE����T"���+��2X��N����n��i���
\�ͳ�,݈j�
��Ȣ�O�q�<�'`���B�M}��q6�X�FI	��V��U��UD2XK��f�-��ɕ��? �Q���p}�"DZ���LL�O�?3zfI{�����{.#˽������We��7g:OWj]���+~]J�pU��;��SI�z���zֶ���P�7�V�Y��Mf(@^�v�K@*!ytm
��������B��dU�N��ɿ������]o�H�b����$�"��r��)���C��2�I�l�RU��7��OchN�'�;;;;3;;_f��>��ju�ŚW�h�yXY�|����pq���Wy��zI�_���f��Z�CCL���	?�B�V~��^�Ñs�h�����T�T�LTj��_J��&�h��">#WeU�RH�Q��-����<�u!�-@U��v���i��o�Y�Ɂ9��[cp0 wkB�!̀�����o٦$i��.��m�D�!<� +IXٮ�:*y���Ѩ�P�HJJe8e
EW�v��G_⼪�d��Ԙ�/X��E�1.b�,G��p�	=�q�~��HMV{�.�#��PUbJ?{ܕ��ΠD�p͞�5rc�e��o�� ��5���JT
W���b�eZ�2�}�o��v�����]t��&=�t��Xڨ�C�:;.�:ݣL��[�p��l��>��}pE@�u@��w�;�t*=�>�����?�ZCw�g"8j��zA��P��DzJ�X����+�Aԇ �E�iь����S�+��l��q�'�����ˋx� z�[����|��L�&��X���<��a�X��e
���e���#Z����� ����H
�pQ�i8��,F�N���&n�Z�3D��Nk�
.C�j&��Ji�]��z8���%,�ZE�,5�9�J�c�q����$��-���(�z�J�E	��-B�F_��� �X
K�JK�z�Ϥ�QI
���Ez�T���-�
�,�4Ւ�[���2�z�-���R.<���@N�Rg�P�+-�'��_��%���1�#-m�Ee9Z9,��OC���o~X�ɉ?���i:��q�mn���?1�oVj��v-v���H���r���P��/�<d��Dˆ�C��/�MZ����յ��V.�^���u����$�<V��g	s�"Ƴ��
�n��.ZK��h]"ks����5'��_�.��s��\Y٦�dS�����R��O�晒�&�)&�J�'$�b�V���g�d>�K;EI���Rd���V4XjVi~הR2B�wsDF	��3����
�
��x�wg�$4�R�@) �WS�I M4	حxSrﮗ����|9)�"BA=��'M6΃���m������#�)F�vK��}8L�E��"�)2��<\�s̡��SU�bS�8֕-E��G�u�\�F=�9�j��'���M����1U?�^��'V2�u��oB��A������:	�pD��2I�Yg
�d�tɉ�"V�u���Y_2����ߝ�Y�48
�`+un���j4�|��g�ñ�e�����sr�_���<�ǣ��lB�!#:0P��?�\zJa��1�r_Ş)p�3��FBo4ѩ�V�֕�^������`�$��a��v9�'���'��2]���J�ט���a9���u,4c)BJR
+6!����`T�t��_q�<��vo���W��s�eŭ��:��w�V���9��
`�M	�l��ٿ�Z<`m�N|S����Q�`_|=��`��A���)��U����\��_H��]�puH=E��o��\Ր���ɚ��Y���N��R�չ�G��V�r�6��+�Fږ)�9ժ3uhͤS7������1pP��ѿw�)�ju#�����@qi�3��x�ǐ�bg�j� �.�vr������(7�P��66�)!Z0h�l1O=��D����‚ե�\���[4
sX����k�vA
��`n�p�`��i�K��P����{6��<����F��2�K��z֭�W�*���B�_�*JnW�}�3�Nl�Zj�d㏄GѲT�	�(�p�I�)tN�O>��L�VK����P;�:�Qp��8��|%��ɴh D>lÄJYQ�ʓ���CL�0]h����x#���l�*?�N�Ì�7�Wo��W���;�j�#_��������vt��[�v���w����
��
���[��"�uG��bST�̏?����@?xGJX����w� ����,�����\l��ޖ>����rɬ,
����O�Z��WMɝ�z(GA�$a×?�i��¨���$i��A��j�{�I������
]#h������燕�^����i=�Q����QجֵI���I�f �Uq�J�(��f+c��lo�W�@��<�m��'ai��@��;:>*>�w��ph�5��du���� �V��j��K��}(a��$����X[��-I��ߘ,�cz#Y�{n��
���ʶ��vH��,:o]������ˇ����.ʢW�k	�T�Im��d2�6Pa?��ɤ#G�'r��͏	;��=�����p|]��4�c���+ϔC�uE�U�V�J�ғ�M�[d/�.���C�[���޷��p����x}���B�7z�s�.5/m[TrT�]i��U�9Dt��)�WQu�n��P����Cs�_�u`��a��+�>:{��S^���	���}�	��v2��3��+]?PT9.��d�v448�������
��Vmo�6��_q@1�.d�qݥs���$ɓ�0����D%ѐ�`��%�v��݀F�r&���=�����Oo�+�Z�z=
���֫\/��yv��Jֲz�����Hf�6�Zn��%�2�m-A�P�m�J;�T����^WE�2kЕ����P
��{�
�p@T6�*�12�M�T��Y�/�8y�U��T���E5�кB�	�g��ՠ�w9�:C�mm�#0WBK�@S-�?�6*�z�r�#�}X[�qN4ͅ*dE���D0�#�D��l���\���E�t�-di�N�S�C�|�0�R"���[�����H�xqx�ܺ��Qx�gl�;p�s�P0���A��"	�>vc\srBӄ�w�>�#�F���>G(Ď� �,v�_�xp��@&��k��[:�#��WBx�,��;�>O�lR<	(��sa�F	���|��آQi3{�˯�l�9`\`7,H �r}��R�e�S�I�Sߢ�HX�G�K����!u���@<g'�}bX��9��1�m�N8Ih3�ڽ��� u������x1��,�a8#�	-f�
�X��0��-b�`�ĵ�	�i����[�x��(Z�=�
o��湸zfi[3�Fw�K|X��b8��5����=/!�O��|&�B�.}~���lH@�<f=���ȷ���[>�Qe�y���*�pg7��o�q+ļ�6�>�j�>��NG�����<o�'xJ�.O�p:�v����2}��HQ�2�<ץ�x4�Whկe.Ss8��U��e�W�X��\��_U"Sx��odF���>��_�-{-��2YM�l�b�2�VK�:�~��G�}B��m�v�O�z-2�8��~2��s��*kiZ7DhG��;�
绘��5f�f<7��DT���2͐�O���1�޽Z�B����{+��~�Qef=��nl#�o;*�־,3$i����lmDe�Q�T��|���Ld)���&k�ɫ�?����f?8��n���;��҃�6F���s,_��K���_̳Q�N!y!�2�Z�9�Q�G�"��!�����R�h�f�2�xM�?B�3zH@k������œ�-
���L���(�8V����?c�ҫm�29*��aQ7!O�­�}d���K�
�\��ũmW�4�t�x>�H�Β�
,"�)�4�g��V��\T�s�QQ9�7t!���{�U�縭��c"h�R���o���G��N��TMo� ��W�ʥ��(i���\�R��`�،6��ɮ��w0$�7m����yo>�����ye
��y�w��	S�^Cƌ5��W!�2U���X)s�-����[EֵК��V��E	��E�c�j%�tU>�9m�b[�m�$3m�`�Q>��o���]�6JJ0��d2��=�Ozc�Q�":M�ڀ�6�t1[-�^'��GG9����h-�@RB)Z�/�J[�.Ѳ��H������4ٝ����EC-r�����s�UEy� /�����a��i+����'}���5���P�c�+�x�5$8���@'��:��F�}Ɣ�Әk[l#"̈́~��'�d!j�Eb�;%��ѧZ���1��C���@�-&��/��f�3�c\�	2���%�;g�#'�T��.A�0��9��K�A�%hR�.c#�ܩ?T��Ǹt �LGF
o�=��[d��#��������q#̩,V��[<}g�w>{�g�T�X���{�g
R	vWZ, 	�p
*�7��᮸j�C�J��!�#���2�vg�C\�߭�7�Ψ9.yz'�0��j���Z[w�F~��h�C1�\�>�׳B���8>�{!5����.�d�U�-�u��^r��u�W�����FIcJ�$�D�:{����h�vy�uB:Z��{���+�#pT�}†cјF;�0
gΨ�!�"M�0 v���i�P�f�v�'�0��=��%kF�3LDل���1zĎ(��h�%	u�6
w���N���`E�0p=�#
����=>�U+��$\f29��i��:�
�"��w8$,� �����Px1�a
�L��L���moC#�yWJ�=�����B���
�tC����5�G���	�<ۏóC`Y���[�$��ƺ��t����1ԇd�@���^�5���I��ؚ��5�����&�QF������Og�i�ɌwӑP�=�-C7{�6����2�Xdd��Y�ȣ#P}&�ܐ;}�������ư�����ɴ?�m>���t>�NL���

S��;}������E��h$k�rW� d0bh�(:4f�f�Fœ��F=bNu��{���z
����9� �
�w���^�a`]��L�C���|`Z�5�t�q2����g�M7��hb2��M�L�>c(`0���4�錱��f�eL�]r;��04����̓1��g2{@\�[������ʬ�G[�`=�B���=-IY2�?����X�qt�@���wa�	����`�9S�P3�(yp��*1nH��@�1��i�a��n��fx}��m��ž���:I��[;�7�˹�S�uτ���d�u`&/�\���v���V4�ǩ�|�QG�u�|9#������=R%�*Q����`b��&K���	i$d� ��� ���aw$T��CD��,��{/p�G���k�:>��;���� L!~]�
�2]��"���v]}�F�(�Q>�=0
��Av�<�Tu�3��

��@2�M�D��Ǎ	��gՕS!�&a�ߢ���ND!�v�0�>}�n4�,?y���@@�1`�{�_�~@@z8[Jݘ$!Y�y���q�����{��wO"�%y��A�u1$�{k
I�:��[�R�k�&�̕�����:��@�}�vĉ�%��TΞ��p�ͷc�T��O�K&��4wg��6�ض@�;�#�'oI�w�{��8�Y�+��r.F�ldd/��e�ED��<�*W�\�[���6d;K��FS��Fx
W�>圅ן�@}�9�9>�~Jc�~�����A�!6"��<�,�1j�uџS�'-"�DTR#ak�,[ыD���?d��4��\�amt	��Uj�S�r01ă;n4�8�4��%�Nu��2�P	I&�C�,+H��m�7P�ΣVJ	d�x$�+<C6 ,S��i'��?�4ڛ���(jek+�n�������Q�B�
!�پ�����1��X:��h����I��1�
� �b�Q�/�%_������ϫO�KA,$b4?����*�^Rl"��=�^'+��B=�G'_$a^"F��	��ǚڮjo�p���~��\����M����=�����%v��m}}˹FD7P�5��eR~pU$�Y�%V�z&����q��qd���F��+rN�Prpn‚�-k���6a�2�z\�g[�Z�YY��q$�)e5��'�{S��܆��29��}^	i0�m$�ڸR� P�LKƩ�,�@��6�Bw�O6W�e�n�m�8�ً��"���5��D�j8�AfV�s�~<��Ƅ8?dN�u�yF�U.��Sܽ`�?��\ )��#���d
X��|v�}6PR����4�����TeVH5k�E��yk���y�̋ ���e;N�{ŧ��_2�W�q�9k���eB �]a���L��^�)f@<�����x������PɗS��M��"�HՔ�����t��zo��X�v�c����U>"+�"^)�R�ِ���"�������2������A.���(y�<jR�-�XU8\E���J��Ҝ�"�A�4�ހ؅�`�^$�8��*#1���/a���2"m�w76���Kcth.����w�Om�- �,�,a�CV���$J���{W��MR�Ђ�k�V�0�����&��er�|�����o�o�\�ͳ0z�C�6:?bx�q}|>89�в8I�Z1-�;�����₣ʆ���1�Kp�e�[2,��@J��&'6�2�d�K�d[��M�, υ�%�O>1[���`u�*	�k.����첼?�R�B������L'
}aGَ+�"-&��qu\<��~���Zq��"ۚ�E1gqJ��>����&	{��o��k!�l�N!T6��ӌ�,�P�/6E���Y�+�xf����i�%���v��i8�sF/s���J��bա�5��5�s|0WS���@Kvw0�hߕh��r��IT�E�Q��ڒ�H�k�R�"�a����g'5O���3���u����b�V":���pa�*+�b
���]b�_l�n��{Uw��1_�(Q��d�|���|&+���+~x��"k���}~8��-�Wn�+v�C��qt�N��B�J�I�ݲ���c*."��:1��f���-�GJ��Q�#s^�I˛-N/�Mۆ�\s�O9ߨ����K�D$��mq	"�빷�K��z��y0�tr|"d
o�p'�:7M@�s�~O�A�M]ʗJ��<;�:;~�}�F��!B���*�0����IdRy�%k�p���}�қ�,,�q��n&��I�q�ج)��l#�9�K;���l��k��N��,��[��2��QV�m��s���S�Sʀ�R��B�PE��,����4�>b�@�a<���_�u��N���$�%�^�@bW�C{@?p۝�ϮрE�k7k_�1#�t��I�U��S�����Z���Us,X���s��]^����d�KR�O}Ep���Eg�z�&��υp�3eq�Kx��-{�G�;����}�[���q@Vx$��t�sH��(|�osH˯�0��j���L���K�ޑ罹��ma�����n�#`�(_�O�0�j�T��F��s�7b�|*���t�Ȭ?/���O��_J�)�E\qU_�
��7��\��Q��/��[������������j�q`�;��� �v�L����%~a���C�f	������ϐ��B�v�!Î�e���H-V�O�A	]lZ�
t*���,^��/hʁ:0�젵$%��z0�C���r��p쀬)OU(��S/�j�L�L������!�IQH�˃]��� 5Q���&j��(E�	1A��Л��	Z�#Kk"4�?Qڭ��֮%f�8�(R�8�`k�q��dUXĵ�	����ሤ��"����]�4��Umo�6��_�a�t��C����\��л��0�bӶn�HrrY��>Rr�e�hi�/�G�pS��XYV��|7z3��
aZY����j_�R�S
����
�4�W�`
�t�Lm3����Z�Z�9�7 ��ٻ����d���|%<dB��Saj���t��0��8��B*L�d%,��̅�[x�����3��d�P��V,�t��&a����S��eT����'����jp�0��5��f%sΕ!����ף��G�$z�gguY����vh�XI繒+�jt�lq����;��[}ߎ�	�� f#~�X�_��{���bpW���݈�ё�x+�����ϣ�qw�%���tu�����+j����0)j�qu�:W��%v�B^ɟ��K���y��1%O�QHs�E�wCZ�,�S�d��x�l�D�]K��u��GS���"�~'{@b\�k|�<�<R#Q��v=U�(�~dk���:��r���ݨ����
U�p���g"�(Yw\�V�1�Ք&^�a(L����w�v�:"K�Ԕ���L��N�%J{+u�G\�#恵L��Ye��]2��'cS��5��W�Щ+�wV��B�ҹ�7i��s\}nE��5��c6��7dufAnr�(�Z@;e*]VI�Ë��{��-�����5=i�ڱ=~�\b��>�d5�ؠ?�|{�a��Otz	��/�(��/2�UZ'���y��%�yQ���p;ܙՉn�ݪ��sz��L8�?�-��@�������Nn�>z� �%-�>��XVM%V�M]V� ���Ǜ�+Gj�Bj�A���ҭ�āH )���|J��7v&xk��5m��2���ۋnx0�x#����\�T��`u8~sTİ'>IӴ���0���>��
ۛ��܉�_�-�����Wmo�H��_1Rtj�0�4���9�	+��&i�u�ث��z	I����Y���=��}f�gfg���#xN�|Pr6�p�4��9��,�%X��N0��ȅ�q��J_�2�JNVZf)�4�U.@��g+	�d"S�`��Eބ��sȔ���4�,�XNe�	�	\	X
��Z��*��1��9�K N�dk�� ��XҢ�Ph�B�.�wZ;��M���,F�U����+��IvG�R	�W�i�&z��#�MXCo;'%\.�"��t?XS�Jy�+L��
�%R�E��H5���둡]��k�$O��`\�Q5@�g�Exc�.���Y��-أ��aX��
C���C���W;�5oސ����-�_F���F�P���Ð�A���^6Q`�0`W,D��kb>.���\���9���$u��!���x6�l?d�x`�0�#/0hD��g`�+���0.���0��ou���.�s����DB�=�NH�6wJ��
��\�э��E2��$h�
ܿ��FB��W�%�;yA��3��+����A��q�¥�HnB\��9n�^`4n���	�((��|0#���G!�
�{7��Asl\�32{C����Kz�*4���s�d5�٤E��9!��<1*����н�Kw�d��n��r`E��������nĬ��up�T�ؽkFɗ��
+�����7��fxwt4���qD;̲�,ɔ������$S�P�Z�zޅ���!�W3�>m��]�O8,y��B���_[��oR[8��I$"B�4KEa����Le�4.p���K]�Y��B��I�^�VYR8Tl�\p��)Υ.�e�����B�V�*����2?,a��q:�p�į���&�X�3�a^�r�j69�;k)�o(҂��/�S��'N"c*(�������<&9d�
��R�
N�8ҫp��b~��M�I�i�V�Q�>��CE�I"��ⵣ����d��o��18�k�g��-=M%Jԭ��AY�;�N��$Y��[ajl���´+����خ���n�E?m��k-�c�ʷ���Mx��u�B��"�bNe�@���|j���PݺS�ؐ�^��y��`����{v�1�݇�F~���n�Q�~���gU�oF_�x��Y�	�b���M!��OekX+�,<���½�@	",�P�)�^�U�զ���w���L�j�b�j1yr�G���;��/���T2lΛ�)k>rQ�.���Ц�)��X�L�k�HiҊ���B��y�T���,��|!l���0UrZ3�.�~�<�P�oZ�îd%���2]���q��i<��{��_�b����D��@�<��N4J��;1����b���I�0��C�']!�&S���7���_�ߋ�5�A�X��*�+�{C�|~���}�%�5��/-!���Yms�F��_�[uP,�/w��>'�����ZǕJ%F��Q����_�̀a[�r{[u�`��駟��a�m3Y�FA��v^~߁��7�i�\������7p�2f`'�f��� eKoYh�I:,�l��#����@�Qߦ#�(��{X�t���.�W�S�osBY�0ZD�O=�S���<g!lR~������0ĉc~%KxF$�
ɭY~Bϯ������Wn���}�J����Ҕ���'�y���2��`vj�yuN�4��h�R���'�
+)�����w���R!�<خY��Ŧ���8����Y�q�s��0��Q�we��N.�kӱ����=�p~�t:�qch<�s�?{�}>�&���n�(�i4Mh������0q�M�6B!�c�=�r{�6�
��e����p�7�!���%ar#��_�W���ލ ua{cRw��L���g�gCӁ�̙N\�F�
l�?4�50���5���2�ê�Ļi蹅$��@��Ё�X}�,�=��u�o�wj�mz�~��ӹ�4ºֿf�'	m`��K4O�1�/��c��3������<.'����\�yk�-��W�l�Z=T�B=���p��g�-\g�=�qfSϞ��p5�F��������X،�3qn��!v��W�;�V�5�|���TV�V�W1���о��}�f'tm�V7�vi�-5_�76�	�qY&+��
����6�W�1\[��p_�j�}J���Ng�M�RQ�9�����c����e43��w,ջ�	��}~�U�˘�����κ����k�u?�1��b2�7��}KQŠ�M��#�j�|3����k�e��>'[,��B�t)���k�\�I�J�nјKC+]S!d:ѐ�!����V�8tW��U�ۡ��hk�XL��ئV��̀�!+�a#�
lbUmHt˲:蘃n.%O��s�I5楸�'�-)}��B���]�o��j?�gX�ʹ��4���P8���	���ƹ 3�c�����wڄF����eʝ��m=3"ףβ�����3?�uj?=h.#u4c�&��|(<^�T�d�,Ybo9;;�W�	-����>j�ػ�Ԧ3�/6�F��g�yxo�ah��!v4�����݇�.�zJVn�?�G
�ס��[1T��l����ހ��?	����g��i�[[z��
CW��a)ô֛��V�l�ޝ��d��ފ��79q���:
�R��Y���S�P&�x���}��h��K�|������c��6M���
vo)bt�XT��L�9�t�dzW�(�y��5Mn�C���p����xa%�|m7L1���;~�(B_��<
Y����\��e��R�|;�XK>_�
Ր8�������W{ᨴA^D�(��v?N�ӟ -�_~)G^t��'���\ɲ)K~w���ٺF��u�^��(��麏G���x�^�,[Y�?�Y?�_����������ǰ+�!�������Z�B�S5��J��ٲ8w���.z������Ӓ�^]�[RV+��rM0(��Z#��1YF[�f*�,�8cx��:�׫S��x������"HJ��7i��s�4�����2���Xn 1�1��YAg[X��Zɣ<>piF�d���2��${��he6�2�(u	�⤱ײ��=Rs�z!].��S"E�:��NJh�T���i(YӺݺ�T_~�	�BP�u�IwʉMD�$mX����~����g�p��e+�5^r+�S2���f�\d�)�GsK,�G�2�U4ox��}h��d'�Ty�Ɗ�n��E������J���T$X]=_,�r�UY_�E����W]Y��H���Ձ���ư��&Q�(;��V�0]�"�_t���"K�XZѭW�h��V�b?�h��х�^�Ҋcy�x���� *�Z�|	�l��K(���!cb�0�9�ذ��c`��g�K��Uf�8<'�:�i� awj�Zj�1���[�x��e�PiUt~�
�W�U�����N[�~���M��8�ؤ�C�8J0FY ����V��/UШ��������!J�F�!4�\Q��cxݓ�ɯ�r�"�X���@�g��q߸��!�y�⫑�i[�.��Lo�#d��	}23�F|���4�9�������H8u���tխ�#d)�1
�
���>�`e��aZ��Y"��$`�Q�$�Z��LS~7d�\�?����6�c�x!��62C�$EijP�c5�}��h�l/B���M$�iݚj��v^zѠ��wPFKwo�_.du���<)�s�!�a�#�4cE˘�g�&X�݃ׯ���1��9pyu�O*'#r||Z��	��i��t���a���=Y8>;�t����:�>S�C%�$��Fu��B�"��R��.��������J���/]�
�:��|
���(9�K�A�#��Vmo�6��_A (�+�i����ˀþ�E?S���B�I��)Y�,�n��1���瞻��d�ʽ�ܒ��̃�|΁�s�
^�ces�͌|����h0����&�-�b���؜bT� �J���FmAKHI�'����wj�^<��l�,I�$18K��dJ��u ��~���ɸ��d�tO�M��f��bä���g���d2K�P��<yM��ܕX�tD�>�,M��'�ҽQf��F;4����k)7�`�2���/M���r%#�[T�t;98�"��Jt�S�Gd���gt��b�|n~x|��\��R�0��f)�:(_�7��=رP�s�r�}���:
�Y���r�	��H���w�W@���	�0j�Lo���/o�AC����K�h@}��ت9?���h�UY�DP��$����|��v5�1F!gDobv�#�,|����PS�j��^��	\Z}�qp^3����23��CZ�c?ݽ{C�r����,G�׸�����p{��[�:ux����N���	߀���ez��f1��,�PxwK��W��!}B�Z��F�}c�`�b7�?\�&[&X�m�%�.����eOGOLǫ�!j����0TpO��2l����]��)]0K�A�aJ%�drYV�R����}Vg�^Q�q�e��ʶ�x�O3&\�������b)|�H�]���5"�kg	3p>�(7�Om�qm,Mr.�:�������h�f#z=�4�����'d0���+�ݠ:�e-�ѥ���*)6I9�2._O4�
s����+�Wݍ��(���/��9�D�F���S˳����1U\pc\�sǵ���E����Q���L��AF���K#����i`qem����v;^�Kg]��}�u#��k)g�%�@s�Y�^`j�^Y�Ў�)K]�m�m7�_�Ă�������b�nJ��#*����D�-���+X�w;�p��_�T۫/�A?�n�u����xe
��ks۸�2���D�d�1�}�ձ�s��c*�Ҏ��(H�"yiYM�߻��e'mϓ�"�/,v��j8$GY�*�yT�OvG;!�%GQ�-�jA�2�
��$!���2Z\ө�5�O��lF�(f�eURfSJ�q�]�"�S2Y���o�r�P��!M�����AJ&)Ͳ*��8�qJ������Y�Pkk���yB���H�:�K�=�
���Z��	F?�i^��\��"D�_�pkkV�ag)0��8H�QN�#'���-B���I6	?�`�|F�t*���bX�@!d-9���JJ����?�R���\�%�����"�S?�s�N=�(���񴌀�1�g���g��#��yʧl��9N����X���%&_}��"ߒ��3>Qв*R�'Vq:�%�)�E�ZPƂ9��V`v��V���#i&��ϷV��5��4(�}=�x�C�&�Ϣ�J��([r�q5�S������JY{c�Jm	Rs���Ә�"�޾d�Hp�6͢�>#֬@���S��*ϳ@�<�+d�/�k�����_�ׄ�\?bg�l.j���7oߟ����Nޜ�����?���]����y��?|~�G���5�Q��4�C��#*e9=�����R��%�ג�)gM�x���� �~�,��X�&���mI~~-e9�qinq���$�
��1RfdN�W�)V�a@�Ƴ-p�Z��S�
d���w�����!� 4�3䠅E���/W+����Ӭ�a:h`�����
UX(���@�`e�P1M�p��q�'8�
qC�F�2;˖�8
�x�S<]����}����ׯ�~r����_u0c�D�v4�[FN7�W�'6G8�Nn|����~�{����G��R#m����IRo�+{:�H���&�/W���@,~n=M��%9�H��V`�{>p$4�á�Mv�1��Y�ĥ��s� ��s�}��#������[}��0f=%T�mJT�a˸#�B-�������ipu����K���Ϥ����n>�
��)�K��Ǩ�b���ߛ����N�oI)G�C3��
��A�c2o�]�ᖃ�~���e�йՌ�XS����9��nz��_�ö
Ͳ�e��==re�<�&���JQ�I#R��E�e�"��|��|ަF'���=�;�0��6��+�6gyj�\g*��rIiJF$�K�Y�F�+\�iE�&,���̿���J0q����t��;�ŝ��\A0�9�`
^s�o�]����@lFӝL�,�,�.�k�D1�>�i�vK���[�����������=>[c��C�dg4�$`��}/	��J�t_R�ߜ^�H�3n|��g�f��R�P��l��'����42=��I�M�Y�M�|���@�1=��L�A�[w�[�b���N��S�!�aVguRluɜ�~��Y7�ޖ���2��	���۴�$d��r�<��+#?��lc��z��A��[3FC�ƻ�U���
��ԏ��&�2s�.��
�^X-��\�v���HF�~bdΠ]q�4(\�����JAD�[ 8֎y)3h�FhofFW�(�@[bI9���ڻ���d�p�^�����K�;	�����=ܜ"��^�����{�^T�9�i�/�/qN�q�g�|�OCp�+�W��_�����
L��4����	���V���P�BE
$@�^�L���y9#L���#�{H��N�[���11���Xߗф� �Gf���<��	��!���L�����b١�̲*�}�7\A�I����c�+((D%��.�d�4{oD~<�J���Q<����u'�7k���zL�m�'�~�`��fy���c=��N���,G�ay�b������Y�tj�a�|�����m��*�z/:x���{��h�v��ߚ����*�r�Go�2�@���k&.��uZ����4�%�0�Կ>�w���A^g���_ı.Հ��#�w޵>دE(7�,h-��7��sS�1�Tc�Uo-F��p�Q&�Re�%j�C��"�~g�1q�>c��
Pb���̗h��j� �T&����H�U�W����M�¦�]�Ψ��Eyޢ���EE�cO��S7iF�%=��r�$�\�ͷbx�	�.I�q"��%l
��CG��_I�uaӕyI�X�lTr,�ïU�:��*��{�CDae/��F<�ĭ輈��kg�}���X���^gpw��K�Ȣ7�ȶJX��֋i���iR���b,�
�p�c���͟���"r1��L� #Ⱥ��;wZ�;�!�w9�ܧ���c������Y1�Ӡ��P����)����ѭw���������.�f@VV)��w���4-��M����<�43���^9��M%���΍�J�֬VNV�
XY�:�"WW��n�v��G�����9��&/��x��@�t$ٔ/r`�
oD�~�����Y�����2%���1���8^���V$I�T����~T/�E�nN
tG�nZ��j���mYd	w\�!�0(���M�O)���Go �2rz���D*��7����H,��?&��V��	(��ҫ��,�
��6d��=}�4'lֆC�-q�xל�$Q�ÑT��1n�xvL�r��uU��#U��G<s��*[mzm���9�1��W�L�'�`gpX��)��6��ma��u�'���
vU�R�,f�F��cmZ���=-E��9�i��~ħl%��YmR3�p3j"hЩrl�|��&	��Xo�fp�W$�����f˴��otu��k#��1��;{(��ZlH�|mD��%_3\O����Z�%e���).��)-�8=w���Q[F_����4����z�T�-�Z�4�ic�B,BUq��GK(��O+:N�)Dm�dA��|�I2@�e6�Y¿8I0��`Ļj��Q&���sD�f��"s�P��j
8�Q�@�&+F@&U��p����TSRjP`^�T�
H���M�..��i�b�i�|*F���Ph�rqR
��3/��!Ƃ�
���K���]UW��Ě��_IQ��H>S�2�qb0I�Zd$!�����6K�9Ị�v�����K�;�^��wN
;�i90ou�֤�&K+qd
cp?1ڨ#ʌ�\GuU��v�pߩ��]�Fز������]}[�����Pc�[f�S�;dX`�S�Sծ��gl�Gk�"�j�ā�FRP�g��$Y+���	x��3tJp4A�yԎ���X�.2�Lr�-E��g<8_�v��PG��D�����4*wE{'iI��ޝ���Y�b.g�eZm��2��9݄thd��>&]�6/��fL��`�J@�_�1���\L��F�0z�z�J:�ʗ����]��/ު�
��x��4:�I'��?�<�b�!_+����)ܘj.�,
)4͢xV��4%�c�1�����|��&;d�W77�������<ŷ�Is?�-�����R�x_��C��d��'�Nc1�Z�|����.k&�E�|L��^�b5��&+�ĸ��G�m�lC�C�=T���)M��}�C�u9�W��]�����%'�~�m�ڻ���,b�~��ݻ��W�'g���z7n���e8�r�4�ޢ��*h;�p_��
�/�WҰv/hV���n�W�ʃ9���U.�W� r^���SP>��$u��q�
%���ύ���)�Q4o�$|�KQ�n|���y��YR��0��{�#/eaISj
n��n����U48 ��ͯ?��<Y����(��z��V���99l��!x{�\��<H�wD��hT�%|�T%�M�gQ�W�=��BW��ࢣ+A'z�3E_UL�5�Q=�Y-��MM!髛�cy��!��-���QLrs����RZkƁ�CP���de�cK�m�<�﫳�����bYk�&���v����t�e��`�MMэ�F�a��YY��~�W�����_�2�ի32W�.��[+mm�p��]9v�޴����l�f�}i�����ݴ�Vy�ܧ�A��U���֛8����8^��u�~�%�mɮ��p�Y�$�f���a���

������dp��K�u�?y_)�RH���9�2�OC��j4M]/�,|���Yy+�{+��ǀ���\�&�k�'��7�s�v�a�fĸ˔7�����]o�6�=��{b���&�8�C�E�-��ZV/NHv������HJ��{3L�x<R�}���3�]uMqx�lq֞��ی�qa�Y�l���vG�F}���X2�À6���K��V^(0[���S���^ߐ�Xo�S������
6��	[�l�t�8�r�:���&��˲Fo:�=ϲ�U��[��Gr�Kn������n^�+��p�D�<�!�}�͠!����FD�*��[m�]���&�q��aШ��+��� �uH�zt�!L!���Y���\Z��7�#n��`���uB�Q�8~��݇&�N�z��cE��������㉺pKtjFc�{{ڴ�>D_���B����A�RK�����][腗9$����!q/U��� w��.�jQ�Q�&]�3W?~�_ب�б��(lf�|�S]��M���jl,g�9��:g�h�J>�O���D�EFM�?����N�6���B?4X!U6-xs��k��+
��`�O��y�Z�������dQn�_�
��12��'�2�s+��J,xڋi_N��K\�6���Z��0]��
��x�����9
�r؅|g��H����ŜFqJ�x����Q�7�G{�����F�l@��J��Y��"�Of�1�_Vס�ˁ��d�	���
ZL+�
��,��$��mڦprʴ����1
��gI�.��}?)� �5 ~Ap��q����t8;O�B7@<����b�ku�50w'����e���M�*3�I(�9�q��9\x���u�2��l��_�=h��v�F����-W�:?.h�O7�m'}�w��iN�I���Ć���1�E��sG�(�9i�?���/��pmN�6zst���ߎ�����ŝ����J�!P|�S�5d���Db@��i�a?�|>�%�6d�_��V��uJ~�l@7���������վ�ulTѣ0�tu�@�����f/���_�.WY��\e[�����ȶ�I�i9�E6Bߛ���"N.������ʹ.�ϥ���{��+�/�a��.nF��V݁�KM]�I�By1��r�_�	��R�l�wU?>_��P������>�h;��9f�P����*���g��z��z-/�=RچuY
!ST���?����Ϩ%J������Y|�L|�R߰����u�0
K��YL���4�Q���
������G��'N��<hlQ���TS���v�e��3�{U���r٨Q�-WoPd��[��ه��uS�cLjf��75�D�ܔ`s���?^�T��z��ۆ�f��%��*�[���eaV�;��ru�8Pͺ���:h��
��/z����L�V+�}�9p�\0
��Za���̬P�X��)����G.sav��¢58�9�2���3�$'Y]bo`v\{�%�rR��@T�iM�Wgr��DD��M���6e\>y,���m��@OR-�����{Hv�Wv�WUBU"�q�D7|p<�/S�ʺ}�명]D���>���{��	�HZ�zczLq3�BC8nô&���kW%��B��A^�Fb8�T�(���t����]_o1�SO�-��E*]H��VM�����*U��A��;�N��]�'�%�9�/v~v\(�{��<�3`_�w��}���D�u����X��a�F���Q�k|sk)����X瞣����k���,�as�M�ن�|�!��n6v7���M��?1���@�9�>$�B��mP�9	*�,W��(�Gi�w搅Ҳ�;DgRڙ�o��Z�"1z���m׼�
z�����[�z��qT:�P�C�c�,38�~.��\�sk�^��(����s�3>�������H��H�������Ԍ�Q�Wd="9�Wz�\ʰ�S�
��Ru���.{����T�m3?��"/5��.�o��
c3w��F�ѻ"Y�a0�X��/y����,>�aX	�O��@��Zv�C�Y�K�#
��<��I>�h<���������������t�q<��E_�r,$��A1���q9�ξ��v����Ȋ���mN��H[Oc���,�`_ߞ:�:'m��%�h3��~A���G1�M��z̪�0�؄�P|9�tD�1�T^x�����Cx6�I����<��SJ�&��y���h��#���6��ꛗF���h�J|�����c2����g�u	���w��)}d=��@�ޫۣ��3|�|�ȩ��a�.�^�2.?���ć=D�fI=lA~�|��|s�ᛚ�O3�Sլ6`�>~�c,-'N����+c�4�8�G
�i/=t:��� ��0!�v{��w��r.�Dk�NkO��k,]#m6�A����X����`I'r3WHP��v䢮0�u�
T|��^���!ǖ��̓a�=wBI;���_�d�t;�%}���,=nci�����٣T���c)�4:D�	�j3���
@�S`@��k�|"��^�P�͠�&�)6�jT�jT�W#xyR��J�Xc36��T�ӆ���p^�p�/�C�P!Y(8;�f�������l4R�	e��r�
���Q4�~�|*J_�[�$%��T�e@k@�d�$�=o���|M:,�#��x��B��%�/�G[ޏ��K~9
x2]��Y���B=�#t�m�LcFi*dc���6��e�1]�����];�0�
��*��U��T�8��P�����4lpjIS�/ωr��r���bW����a��blC<\�!�|��x��L?��*D6��
G�����04��!1.��qߖ|�Fz��W���6�&R��D@k�]�}׹���ck	���F%	I��!l,¥UX4(Yk�����*�Tn��u�("-ϓJ>�o��9��r����,ee��/�����{D��"�sl���\�����:�B:!�_�/^M;���7J�
/yN�j�xHo?=?��#/��k��ԛ��R�y��x���ʊ"��f��?�ks۸�
����L��,�v��8��oFw�D�6M�f$E�u�%�(��d��O,@���L������`�<`���z�% ��?M6�au�}'./Յӛш�%���g���#^����GU��S�/�s�W՜�Hɇ�y�Z���)�ݩ;����r�{�H݇��&m��6��� �?z�5�9uV�݅��X�����
�(�t�>�v�]�z��0E�w�k�Л.7���b����O��0k� l���+F�{[�R��P��7v�+Ƞ���Ηm�~N�jVM�Y v�U�^��d�TwYt�%�(�2�Q^�uz;�.�T�
x����+�� y�����?�[X��1�?��lsf*`�ٶ�o�ç��6pg͍��Fk�@����~�!g�ٰgT>p�}'�BJS��oiOJ�

��^CHC9�AC@�Z�͛�X���?k�ξwk�Q���#X�G{����T-��>bڞ�`��������M��dUL�K#4Z�-�@f��Ą�,��u]�����i�?tB'C�O'x��y[`���:�E�8��^�Bk8VL]���o+�M�7�R�s����XR����N7��jl�ʪ�A���!M̒��#h�Vh{T6+
PF��+f�����ښ�!�~�x�_OV���>t�fy�3�1P�v��df�W2���X�������n��2:��
4W��	=������]�Նn�ZflИ����
�u��e���=�G��U4��Q�~/�T���>�'��?�b������\��/.�����m�	�E��p]�Gx����[�8Bղ��gH����f�[��E�h$�٬���2��:5@�2�дH�5c�䒰ɶ.nkse�.y3v0/�]���[
8{9��ҽ�
�3�Z��/�L���{*ji�8##�4X���E�01y�5��r=�����-�/�����n&��Ld\�{ߌ����|A�l����V h��\��/�4��������!b���B`3y�u^M�p������#����|X�-��\4�����y'��E
�kt��wuL�� ���(F����Y�����;=�^�������E�g��,�!��EV�<�
��e�RNtUBGD���h?}+����ÀR�ՔP4����g��R�:S�<z��I��p�Ԑ��Q}�.�h�Ґ�CW�3%�
W���z�]o�L�[_��t�;�s˫��)Y�b�M P
iM璞΀C�2�@����rEUĺ:�ϔTP$�į&��QY�|�����8��s�Q�V34-K����=�|e��v�\��'�y�*�x?tf�zWd6�QI=P9����ӠrR��ӠrVe�<
*�C���1�� %�悞��,o� |�c��Ƕ���a�]><���
q٫)��3:M��֑�!���DTW�\L+��zȳ��-��V梅գ��n��-��H�b�Dop�W�$.��?��sM�jK8p�@6~�ظ� �z����������<���?�@?�C?�E�F�x���cK�A,e���p"B�ƴF��Nh�5;��~�1[\>���}UD?c�t�)QE�Jr�m'�mF#O�	�6�C$j�����F����W�������}M�����;���������
��9
�/��mjs}�װ�w��ɟ�]TmV9������kw���V(�fNY��������/�i�B�|�o>��[ooϘ���Pb	��YS��t?%�c�G�h�i�7ѳj���6���SH9)�KU&8�cd��Q����Y%���q�W1��yl������M{ٱ���+�]�}XE��x��6obg(ߕ��7D9_-)�Hbg~ D)�G���C�08��n��0�.�D�fb�PO0������9�j7����{����
��=�Wk]��0;Yz>�o�ɔ@H�S[�r��e��.t��y<2NM���[�
^�	��ih��`��E������iF��g<rk�ߜ���f7�U�2����ۛ��|gAjX.Ȗ�Ѕ�\S�/�O<r�qk�1_�[�˽y��|܊�8�}zw�Z�W�V@�}��r��D�ѻ���.�֛���vI��/n&�5�q�$J������8$��p��FiG������t�&yQ?&�~�J�$J���O���E���p�ُ�{�^��,��%�BD��VӺ{+�/� #���������!�{`yw�).9Û��J�6�?KN��_��*�$��f,�h��e�I�;e��f��u6�;i� p��Ml�.�xip#��p*���$�	��"s��e���m�)hu{�?gdw�m��|�hg*��|������`�bg�D��?VPσDCJ)&�Y�[����W�&�A�R��rN�C��
�vN�g
;'�(C�1���3u�LUF^�rWs�����cphTq�{�ڐ6��_�2�U�P��UR��U�_��*��5#�-ر��,TzǕ,��*#�*-6���j&���M�]�!����)OZOQ	�y���������2�@}6�u6������Lm�� 7P��g�NmǸ=5�v*������L�-��o֡�.{.쀻%׏�p{
1��k}
[O�Z��T1m�]�.ֽ!��#��I���Z�a�_�Q%B^b4˰�K�����=��ZR<�;�aP*�Gަ��3��
a��I�K����,��bE������9�~S.�(�y�F�*v����R,�}���B�oB+��n��}᝺��;q�;�wVBA_xc7��/���(��9�1��T�RWv�vz��2���Y/3�[ӌ��d���������*f��%��}��,�4�1�0��Ԧ"w�@e�4i�R��@���������p����u5�a��G��N�Dm�u+'2;#�T��C�(�g�l�HXʽb�B�i��˒~qZ���qY��7ہY�C�4J���	%����� �O�>=���);�bE�J�g}RՀ2�zÃ�T�:��1��
��+`��uR��pUU!x!x�!	�ϩ�S$1J�^��#�o *��јP~S�˒8����� ��u��, �`�<2��rX>����M�jm���E�t�S��Txzn�*����VS�C����Qa�{��X�3"*XO�r���WP4�4������?	
l�	���
�_
q�p0��O�</4�N�>��^/��`�2�3��k�*]P�ۮ0�R��PW;xu��1X9|��?�%����M�K�0�9�� Z��p�@\�l+	T��
�J������2��q>I���6p�l��_�g]b;en�G�tPC<���èS^ &l��s��UH�+��6���PWw��,�3]��>�$�F�s�z�)xB���dّj�V��<��:���SQo�����.����Zms�6��_�tn*)���k{Q��c;�%��v�v:���$��#Aۺ��v�_$����e&�
�.��ų/`���u&C���>e�*]er��l����],;\dj)�%;(�Bey��œe"ٵ������\Y(X�"��׹�Y""6]1�^���z�P$��\��'l*P�LI�dソ99<~w~�f2A�w�36�Ք�l�>�l^,E��_E($����8#��/�g,)�~���跻q�����{�~1T���5ȸc���Y��Z��-x���s>C0d�z���$R7A&�p6�F�Z$"�D�5�G����e"������]ɭ� �
4�8%]g���6���t�Q�p`ʛg����t����.�z^r����N?�͖�@&p��o�l�_�)�Fq�P!gf`�\##{h6���w����ڛ��A�
�0�u�%k
�t7lh&T	8zj�54u�%ٝ~��gr�Td�`�ud�h�4�<�xFl�l\yP
�q��"=T��Tg�~�+�~�7��#
"�����=h?���>��t��!�Ak���~E`7�4It��q4��DF"�+A��H�A���m�:I"q�����Aۖy5/�q�K�V�p����@}�Sй9ǰ~﵀VE��5���8q�_c�+��H���X���X �����`�x��/a�.��pY|�d4�_6ξ��/���]�)�v*��a���ıIIMh���$�"(:D�k�x!�<D��������<�F?g*����O�J�ک~�QY���s�_��k�
mC�v�:��L�f�'Q�2^
�赌D;��P��k��<�Eh��hSń ͔Vz�"���y�Nkz�@=�d�#�h&o�����o����Ĭ���'T�$����sl�rS8���X��9I�� ��`�:z3���꽈V
�m�x��
-��UX�����{�Sڝ)��#�	Ȫ�zh�OX�9�<�&���M��x�3�q���&�|4MV�M7��$��r&}��5"	n٣�s��������k�������72ҋ��C��Xk!La�ň�	cP�\�����3v������֊c&[�L�pG+����K��"��X'(T�1Ue�|@��ӟ�᧟�-�ģ�_�9G�4�z��e`2��R�Š��}�í��z�&�xM����]��!AZlʧ���3��B1���.�"=a�8UY!�,l�Q(@
�'�1��Tݢ���7LJ;���=��[�e��ulyC�_�B��n�r�Bľ���b�M��{�q���Z-�1~6˅~M����x
q�6$�Ǚ�_3a�0�0����Ygu��h+�w�V8!�ik.{&���X}Ul&Ā��1H�w��ȉ��De����#����d��,"�T�m�����V�W�R#(��s
�x^�LuK6H�d��������*W�١(�ݵ�yѴmsݦ��g���ڋ֞���Cc�ߺ��:��;�rԷ0&;��Pht�pu2�A����s1*Th��x1��õN�l�����/b�w���S�gzn�MD�Cc�R�nu��a)[�,�&m�-���R`�a�ӳ���w���Gg�@���*�X�4�ʝ�Q{���I�*��0�,O�y��I����)��+,���L�%�p��cu�� Hs��8�,���\1�K����h��{������P��&Z�$��q��t�݋�{���~{[�:p�z�Z�ex���] ئ]��|wO��g���V�5�n��0t.�V��M�+���U���}���ʖ^�ֽ�h҂Gu N�����N�AF~�y�#C�����\�7��[�g
�X62�X��߇�B�{������]|���J�3N�Q��ZT�Ԣ2��[���G2琕٧��������Puݤ���3b2"�b�5@Jӗ�����,�E2�}��%�FO���g-��ȥ�d#V'ۜ�N:v�h��4�B��r���}�l=�lrՆ��l�UίED0KŚ�q��m��(��c]��->��),߳g�f 7I�ij��!vi3[�bڿ�n�ˁ�0+��Ǧ��0�0�Y?g��wn�g���;܉�.���fR:��+�*�@��a�F/:�C�V
������M����Q�+]�q�ji̖wY�K�fǝ�h����7�����j:�O_
�j�@��83O�����W��X���RD�k�Lnҝ,�o��7�?(�����t�'Sn��p)j��8Y��	�B6�ϭ�3�Z?��~p7b����̍�Z�����ֳ�ȸ�{�j!�7�9p�Ƿ�ꫀ�׎{[���$� �1Ze�f5��"K։�O����c�}��ax�<�4��	�;o�Uo#6
85;u��g1�7��DDj/�<��֭����'ƹy�	����-T�T�o��+L�4�p��o���L�AGP�4��/��L�H(z��7YS~���a:��v����-�2_T殕_�%���U&�b,���
��O�S��S\.l���~rt�r��p�D���I��x�)�O̯����*pl	�[��yZ�T�18�9���Y�c~_{�"=
z�yTyLX0��,�Pm�E�/ˡ�����S�lkS7i�=״d'ܬz���364**Oyh>>˗�Zƥόо奁�"!;��K#����cB�s��>_G:�_�#;#��4���s��4߭����661�5_�j��q���
/7�h���!����x�(5�Tu� �%"���ʬX:+o�ڌ����A/��d���wI�LMYI�@���0b3���hxO�qA"��J3�b,�Q{0��O�����<]�<G�Ą��g�U�/�ؗk_��9s+��ON�W2e	�/qؑW�:Y儘���
�j�`]�
	׽po�F'���tD��]�TP	�4b	��Z��F�����m�\y���T��2W^{t��Bd+J�Tvǃ>=��y��t�����k��ls��d��śa�{Q&<�M/��A?�q���"Oyx���RF��w_H+��X'���6Y�v	Z�ꋌ'9>�o�[��[����-�J�]�_񥄒i�+Jp�t������1	W��䣂��m3�٠���nIx&y��eY�J}G�:�eã���H�6���B��.�!��G_�y
�ݿ��僵?��4�xB2�v��e����:�[ hHjo�6�$�|���Q[t�l{s6�hϵ��~	���}E=�.�k�a����3�s����p���J���K�3��2�u�Ѕk)��4���B2�R�3��p100��3�X>���N����'p��#��_~sF,����\KO1��+�)�B*�G�J���U��!!5$�lT!��^{<����H�zK����g>����mY߃�����QW��&G�Kw$���:z������/߿Ub������R�Z*�o��ߊ���% �K���� r�L��Hqn~�
QK����3}f�A~��F`��ZC��g.�O(ث�_Uk э�����U$b� p����~GP�ۚ�K�NV
��T��W.��Y���bp���_
ر�`<-���~����ҋXa����g!��xо�e�ä�t��A�z����w��x�a�V�x�A�P�ׂ�����Q���`]k-9��/�E�$��#���n�{�I�����^O�`��+H/d��\~�I�za�&F~�	�o��٨���mv�7�j�ka0��� ���¨�g��:��Yw?�	ڛ�U�=C��eU�ͫ?�1�K�KV�H��1?h�$ͭj�Z��n#.=e���Ļ}���	qE���N���g��l�p�}����r3�7���'��p�U��9��Q7҄�4s�=w\����q)}�-�ae5W�"���f�8�Y\�͎<?�f�!-/�L�Ns����0����rg࣪�� ���񉲦���0x��Aخ����0b������Y�0A~|�bc�����+ȕgŖ����u
�X4�)Ѕ��f3H��({�<�_�rG&�,��v�a�ݖ9h(���P������x6S�X��|{�>��䩩0��2��@4@�Z��Ē�xF��8‹We�4sVJ�Z&SC�ƺ��K/3�g]+�h�L�U��s�l�Ds�/m��D����x��Lٙ+���+Qr�N�,[�c��j�Q�2b(��E50�LL�.|��ȅe�����Lz<O҅5\N�͑hi^�ו%ʎ<�ܡ��e�T#7�+�Uɶ�O�R�Y��8�����D��X������6�ׄ��'_�:G�۶Q�u[�����qAqu�
٥�}2�ya�#�	Ib��Bc���.��{��'C:k�Q[e����BՕ{� �,a�<���_�}9m�T-��Y�B��;+z��\�jV��2�_��Xu\ٯ��wjoz;dw��w�⋌��8�w��.i��'��_JH��O}r�Մ�e;K'��9G��0��%��p�- r��i�\M�;��*t�)�0_x�*��e��`]�������`�B�IfLaC"�+�
�B���3��`3)g�Ew��*Lavf54.20.4encoder=Lavf54.20.4� ��Y��L���3h�.��Z?(��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �ϯ/\�ž1<c�1܃ư�߫"ޤ_�TwrP�u0"x4�<'aKi�U�h�.x	�
��>�t9���*Q�s���5D	i,���14�dl�k����H��흃�<��̽�Mq�t\#q$}�t�E�C�� J��R7RE�V�|�]n��$kTi�<�VGy�)zX��Dm|���v}�p�n�k �i���KS2�0�kr���8��c��B���s$ԥ��0��5L�b��V�f�f,�ײݾ���e� �j�K���Ejr,�ɭF�}ՊQ,𭔭,&	�[���͐�[ V��p�r+I��#�g��<����1�	(S�^�z�@$�E?��sЎ_{���<=�W����A�Hi����\�޿�SJ"���3���X7xFx�X?/m�[�����ݴr��q �����,�v$�z7
�P�Zz��6��]):��Ư&��أE�,�N�7���fQ:�b�ۤV�`?ba���G�Da�#��@i��S�����άAӛ]T�,(Y��m*�Re�3LZ|1�n�ȉm���C���D����iNF����ۜ�q�#-��]��M���)���XIHa�&���r��X��[��Pb�Q����ϕ�2,rW������dC��-����UkD��~��V��T����-�K���5����$�"��,8p6\W)a�x�f��V��s�D�q�ǰH?�p���I�=g��Ή30��*���j�\��MR�tn��*�_s�h�e��B�賺�*C�����=�v�9��y�[�m1
�r�3���C�,]�\�)��EW^�gf*�w�4[�Y�#��6U.rkM)��C��
-3�e�/���Ego��2�W��2Q)�0���K�ufqR���z�gJ"�N\��x���nyj��&��iJ�m�][���tz
F��*%f�������&��
M%��Y3(�`����!���!0�P��"�������"z�;�<�#�l����?&����t�|[fK@L|!��r|�<��@3x��0�y-��c2$���#{�����D��F��D�'�8�.yeSޔĕb���Ͻ5��%��K�#ܹ̄���Q�|q[��>2�IQ�f�O<�t����#�L3��Ȳj��n��"�N�M�I,TCl��W��J(>�)��_[ɣlC��j?ī��|����y�@�2��k�P���>��"��.'Yoۡ�	��]iO��J�v>�h:���:�q8�e1T��$4����8Ы��Ȱ���wɞ|\�2I�٤N��!y�y���D1�
���~Mq���N��̖���C�$2�yю�f�=:a��[��H;�dI�1��&28���ʁ�"!%���/<���$˞YT�7�1%X�����Mmn�|�Œ�H�w��B>j�#�ܕY�BJ��7�*y�c����fi�a�^E�T��u~h��F��I%��m����w:�E�å4����y4m�q:-G����7GA9>6��fT�
bY
#?_�״��_q���-�;t5�1�P=)_R	C"���ҭR�@�GC�.'B��*��������)�4hU��]�dX\DP���>.C�$�l�'d� ��3���<A�w8��ɮ0�b�]i�ْ�D��\�7�:1Ð��L>�K|�)b���� ��b�;��y4ȈH�hix���K�Q��L�1��՛^����U����rFt&+�y�!
5G��nJ��ˡ%G��•<�1�^�N�4��0�/"ɪO�no�K%�q$�*!�Zn����%O�Ҋ����Ѷ!���%_�;�@����q�RD5�d(d���^Ӈ}������ey��ҕ� �2!��|-*�u-4	�t?b�q(�b�;�HQL��mAƅX؆E��E�L���0ɒLf�%�<A�"B|.C<>D|TF<�M���5�<1`^�|��.#�� i�'�x�F@x=`��
��v�$:l���8��G�Z��D�LK�I��'�I�e��ʉ�7�I��ז����5��%��K�#ܹ̄�����^�*��_	J7�7B�:{�����҆���I�]���Q�'Ib�e�긝βQA���M(����MhA���e�?偝-�}���S%(GY”�>�y��V
}c��j�w�ڠ�:"0�zR���D7����Z���0���\N �LUw�0���D
�:<TJ���D�������o�����e�mL	#*%�����Y�ic+�L���3Èi�Q9x|&ZGե�#@sy���e���WDP���O�R�qcU!l%@�[i��5'��Ҿ��ǍUw����k)3��?�ɠ�*W<@n��BD��`��
܄�+����u��	�O}�+���\�E�kg��VW�	�n���OP���q��(췎肪=rR�hRj����Ӆb��3��s4F��Dg{�)����I:�Fq#J-�l�'�P��j��$Ek��j��„�P�c��T�̭;m����䆰�8��љ�EZ"�YQ��k�����ZT�3/YUim����E��S�������sŲ�1a^	����(���(��)�4��/ErQ���Z��@�M$�Df\�@x�>)w�c>8'�-�#���T)ݍ./�����h)Z��B��|,�|S��?3$��[�K�S�xh�S�f��B�7
�@�Z=6�̆�ĭ�THLN���o
�<gZQ����Vsʝ��ϻRs�`1�Ko���u���5�]�����Q�ʞ��w5H�K�Z�G�K�x�=J[��s��[]{��f���Y:Y�q�g�5�Re}?�K����
��Qz�1�Nt���@�y��&>�`�Yt�I�SR�8�A�uL|K���)A��.����B0��iI��?L�Z���)�d&�@�HO��l+��h(���YZ��>�as���� TP"cD��]���(�\��h��BE"�QC�i
RH�ǫ�#��#�N���(@L�2$���H/'y����ʷ�b\6�̐�zZ��}:�̺�kRv�{jPs�B�VR]\rȬ.��Y�67|���^l�ڑSX�(p[ܷ��������rDӕ]#R���m�[R_?]b���YEsH�]�x�9�E�)7�v�i��:k��O&�Z�Rk~y�	�u� t���!�8�QO���h��DP0����@!����f����-�z������1�I'F'��`o�ENq����,��jr�2�,o*��2#܁R����8#Rϥ:4�;P���F��ǟ}Y"d���� ���%-0���݊N��5Ӫ�T"Mp���8�L$M{���H>0���*rE.��Q��j�La/r��>�Ô<�ߕ����I
$r�;��m,��V��F�y�+�ؠ��1�\3�q�
	ep��~��ī��8�U'9��˪~>�%/�����}������]�F��8W���TS�h��X㈽��)ÚL��P�S�I���]qS���y��n�%
� �e�c��w!!�A�'��(���ֲ'��ʖ?UQ䚸��Z��|�ܽ�\{��`n�K�T�1ѡsz�N �I(@��	-��ۀ�N����w��DA����_������RR�kIҨRT%���W��/f$^�@�t���q���Ϡ(�rR�=0F���C�j��ջ��B��ܼ<357g"��~�;W���yֺz�<�ݺd��5h��5�NT+�Kǎp����,dR��}u,��g�>�q4Gfd7�ޔ(��0�'O�4(��קw�����X�=۫�$5Ss��n�_��
|��}��<���І]���G�ƹ��%��\3�!%x3��5W��X�\I
!�5�r�.b��ՠ�/����4���X `���Ly�ȯ��x��e���ԒpR����N�<
�Tx�Qb�Q�N�\2n((-�MD%����#r��LQ��t"��_Ͳ�xr��M.����|Sst�Y��O诟^��ﲩ����W���Hl(.u+�J:��)�ݫس�vgV���}Z[�w�2a��k<�C�פ/��6��@�E�Y���%ۥ:b��L@�k4��w3�,�!�"��!���,�m�-���ԉ*Xl�%�Y�T,�wM�Z)vk��F�P��5/�^�}JE��4�(�ц֩Y��v��E�D1"�ȣqHszl��D���L!�%\)7f[1'"͉�A���Y�Lh��#���*Frz��$��jI��MK�8�$��޳��"hJs�#�Q�&hHad�F�t�b��H/P.ի����� �K��1�Ѳ�[#��wt�fEVVE
q�w/%�P��?�D��ߍkC�hJbﶙ��|�J�Br��&�.�v�iwc��+����i�Wx�,9 /���6c�d�d��4�	��1�u�wF�E�1<�[U0��e S+1��fpU{qN�UEQ6bM2)����� �#��k� �C�J�L��$�|�'j� ��L2�Ȧ��`S��ѕW�|�U��-�_Wgi�w�ۦj��@��!��}��P5Q�B����>Ƴ�Rs�7Н	A}�JVXh'؄��`F�\8(��:J�
 �e�GE��6�5��>����ݮ˲�m�
,G��DX^���d^�_q�B�Cv�UEdz��St�j;��i�h�I�N��.��=Qgnt�\�H�I�	+Rl�=u��~�#�v�g��:�1�C����[��O�LEO��}b�vZX%�gY�M���H�$��Ԁ��4�=��4U�BO���f��$��eZm)����P_
-	�g������������˺���(��f��[����X^`֛~�`�Mzm�svg4 `�cb��f�'�L"zu���pT[��b(Z�Q@�_Q�9I��[�#��dyWi6�� �U�d��ڜT:�W�[;�ݹwml�-�C������2Q������%��z�/U�8u����ߒ"^=kZC�J\�Ok�sbY��xdK�K��j|��t̔�����}nێzG�I�)N��Z�*��M�תƳ�.�yD�ѥޛ
	&ﻗԇ�,��!0=��Ny%�ٗJ�6T��:�R�v���:X_/�]�'1L�� ���zujqR�Y��[Y��s�o��¦ܬ�G���W�z�H����d@'yG`^�AȞ��p+�@�Gݬ��z����B�9���[�f�~	W��[��!!d�Ʒkg�ҹ��)�('pp���I��26Z�eʤ(�F� �p
�#��a��t)�D�i���[���%y�Uz�^�I�y{�l�#��T�6�WIdg�S��Lcv��6�X?-_~uj����^�;N��r��H�Q���Ś�y�,�]���R�JB��/׋U��l��ҧy�^kW����Q��U9/T������z�C~�5�!��W�� ȼ�Uǥ����#��@����r�U0L%	�Qe�У'�ߪ����E\
����4�+�x�-c ��	�P x�2�rY��E���j9�����I��N6�G��X���`k�g���^��)] ��9�A�pX�7�=_ar�^�1|A�(�7�fJ�.O�ɧ�ﶆ��,]iC~P����_���r�#n̛Q�M�����J7*�E�nѩlN��Z7�+��	gKpݸ0��L�Dˇ"gܛ�6n
�!f�<j�;�x��r��:U�/c�>�^��F0�
�gP�,q9L��N1g(K��Y�.ǝ%�];ʼBF
�ˤi�:֊���&��Xq2C$2<$$$$$4(�;M�����Ě�̍.�j�*5l[�>���lq���L������p�E��i����S�t�8'Ag�5;�E��{�9��*Mu���أ"!⻒�m�Ս��/�D�}�ϒB����D�sjcU��U+*��	�fb�C�h��|���Z�|j&eI�ݱ��?��Uskx��A���u���R���/�>��zj��^��Zc�~�ށ��t���o'/.��G�1�uuv��N�R{
q�j#y��;ߝ�)�.��|D}�L9�9�֢�G�-
5^��-Hvy�uvCb�٬F���*�,�-�/��Հ�M˭�������},O���'�ȭ��酫�5�
Э��o��+%�j��f��K�~�k�ޠ�)
�DR��,��rSB�}����*>���ّu�nYⒼ�X��@V��%��BO��u�;�M��̦/�j�S��,Z�<ۭF֣�M��2`э���)	-����+�ߴfM�io��W"0��U�T��{����Z�8?G��D���"�r�P(��閧d�n=c��W����AݶU��7��}Z�s�%j�-~M]�.�=c?[�K��tX�2���J�R���RLSʉ�4c:����l'�GNO_j=�!�*��F|O;��i��|��\�� ����Fߐ�$�
���w.���|����r�-�* r��B^�1{��ؔb$�]�L�R@�HG���It�o��L�7J�^G�񳬱�W���W?낂�;{Jޣ��h_��32�yD��/�g{�Tn�17C10,��\H`fn�\�n\>s-�nW��ű%E7�J�ۂ����W]�Q���M7\Q�uا�a�2}^�U�t���a���H��M��L�R��ݡ����T]�=��K�
5����y�k���)�WDyf�"n�L\&��ǝ;EO���*`�G�:�f\�n8�k��1���&�XX8��w���lBB�-0
����"
�kC��-h�D� ���>b[/0n��!���"���}�fA�Y�m2PQ5BxrLY�l�C�'�Q)�9�0S�2Ɠ�8L�<��0r%h.?��	�{m���C�]��:ߢ�ow-/Mrojr��R��7����E7ȹ�M�z�+u�R�R�4Lp�Q2�!r;J<[�R\TKu���q�[�+�eշ:V?���~�_���\�"M^�Z��Z�T<$�&��C��ؖQ�}y/�sc#Ն�͆4�+#��ʬ�����^��/�:h���	�|��+(L
�XwOic7'> [�pQQ�����x�ňP��H��D@�V�;-p	L��L�_���[���r
h�*g��,m�Jn[B�AD@�	��1ga�5���}���\�%<�C,i;C����#�0%h.?���������=e�s�ߢ�ogr���&��*
%+i�����D�H�~����\U!5,�Fr�YY��9{R:
-A�JS��E����A�5�b���][s�c��
��q.�1R%ij����R�*��$�7%��GrYFq��y͌�V�5�����G*��k��HQ"�oʤ�H�&��&Q������������]���3���[�dV�����!B�Z#{��.1Z�	j�FdI�_���t��B�,��B�M���X�2B��hY�(��<9&,�6F��G�C�ؒ�\�%<�C,i;C����20r%h.?���������>]��:ߢ�ogr���&��*
%+qN[����D�H�~����\U!#�)�*9[,��Ĝ����%)×TKu���o3�b}��UX�R��o�'ۤK�LT�ZD���{ԵJ�_��$�9h��-#��O�y��X�l�3@)+#��ʬ��ޑ!�95�J��KU!T��c�ەiI�2߆�
�u�v|��Y�h�����"��0�- (M�o�D@�V�;-p	L��B����Hܑ	��	SDQS=��cl�97-�f � j��䘴
��*��C�ؒ�\�%<�C,i;CL�<��0r%h.?���������C�]��:ߢ�ogr���&��r`�b��}ٗ��n� �ɵ�S�6��V�)�*9[,��Ĝ��|%Ip]Q,a�&$A�����9cV��X��B��Y~j��KP�V߫׻ԵJ�xI2MÖ��{��1�ߔ��3���;f!�IY��P�sW�	H�[�ڮ�)��T�9aN�x��@q�Dc۽Dd���������pPa�H!��J(�����ǒɌ
.�3g,�/��b~ƃolj��ڻو��i�{۷*E���#��rIĮ%�cj���ڊx�r��*��'����T��k�*��JۘSv��l�B�(R���q�ҹ�*�'���*�j�]=/k����#V���P|j��]rl�9��J7�\�K��<7�P��jᑺ깔�:vy���>�,�pH�r0��I20�Me@����Y�'��
#�y7�$�&��M_{>�U��Yl@���J!K��	�H��Z�{*��gR���E��Vu�ɓW�KB��l0f�IP��1���P2,bN�<�Ga���z�Yg$�iU�Cb�2A�ഫ�y
�=$9 MM�k�,�����Rbϓ���P� �U�����O��Iܷ����Ԡ�6�<��� ^IɅT���䫧�4L�n��@�&w�ōٳ���*����;+�Rn��XI_�j�?�ͮp�Hԙ:�6Q�~3�H�r�2��S�Ye�����U��x���?��+z'�PU5hw*#
%_B�ޟ��Q~���Px?�K�(�+��� �A��pZvjC�G�mï횥�(��00�p�L�ύz��Q!Q1\e���$�ѵ�F�� �!�ɞ��KDU�>�x&ʒ�l���D�չ��ֿ��L�;��3=�V�i���	\A ���X�Q\�U�\ͤE	���]�;ጽ4s�ʓ�K?�.� �d�G� �����D�1�ăZRY��J��u��H�_�M]��O�J�P0"=A�tƖ�2-����XtF=-$��7i	�_�	���sNrp�9O�ǞԚ����"}g7�ј���qg =�E̠���!$,�Ph�C�>]��}YG�<}e����R�rv����g����ѓDAۓ��/���i��[���k�V�,/S렿{kd�qB�X���&ˢ�|��t"�ΉGW���7�'��'&�&ʞ�2B=�.�������&�R+��BYNzj����NGtl,l@�1|B�$(�`�p�U�R�cy�[��{do�)����Ͷ��?���@����V�~6���� ��L�vs�V��G裖��X_"L0bI�	�̓��/��aET9ƛ�<I�̚\������kڷ<�v��S�k�Z��j�����i_����r,��$!p'2r�O*�Rq�L%W����n|�]q��;~�%���$�݈�R�	��:���c}��+i��V��
�vC�{�gӍ��jBk�s��c���Wz������~M�^���mW�Է��[0�Ҡo���Lq�]N��p?����w�i|����}����L�;�$б������vL�Sۥ��u��pG�u!L= u����g,B�bX#�A_Y�5%B
�m[G�rJ*���m{Q�{�h[�~��Çr�a��LܠD��.ܹ�L촂����am�`ܲNI��=KUڶ����$\�%.*�ߵ嵡tm&�#(1��σ+C�y���������̩��u߇8K�C60P��t�������g�9��N�(B^(�� ��T�]	7�x�]>V]>٨_5�f�)yhre	������WI��4-�ޤ6��f��v�v��u��R�Q��`4�z��_��S��y`����IIKM��m�w\.��p
!#�ybYsF6G+�nG(򴥎w6-'�~Hr���%�ԢZ>)t�c-|AMꚱ��Ju�S(��ݩ{�G��\>I�\	�8s��^^��߹A���|Qnd�
���(�����D��%-�+������Xn��?�8�	����l���z�IRv/:��K�]�T#�!����B��l*=�/�g����PQf����3��/U�hK�Z��$��IPw����]݋����w���2oԇ�z��b�:,z�d��J�o�wX�	��o1jܬ<0���)Z��A����d:9"�N��ke�9�����Y8i�8�&)�D;���u#ޘ�qJ��+����UM��%!s��ď����5ް4��a�W�V��U�`@��XVG���{�@L�	ST��<��e��7M�-���]�9���-�^zGJYu��e���?�&��.��]Y�ٵdm�,�9SeI�R�$>F��e,���)5)돯:�Ғ���z����	{���<���Wb�	?��I,T����>|NU؉�-/�6�!�2*��=�n��<7.6dWR���1d�wɼu��B�TN֍ܓ~�ߩ/����l�� ��O��
�5�Nv�2Y�
�A���}y��9F+�E�
���:ݓw���9#��l9PZ��4�LeS��;A@I;�qd��<:5z��p�à���a_���	�f�#B,�����|˞�W�3�Ĥ����!�&-;���T���VZ2J��*�2�ֵ��eSkYR:Ŗ2��okR��>÷nK�Գ-�^�-+J麭�j�Ê�m����kNı�K*�����ŠǨ��b��UT���)�R���K�%~I"k���}J��5�k�Vq���l��[��Ӟ��,[���]��0]�}�.}��J��6�	:�m�_lAE���] �/���Ϣ
-*q��,&u:���r��Q���b�h�᳾"vg[�n�s��<��
�r��O�h/:�� ���v���w���F�OF���/^=(1�k䐨��g0�X�'�5�3�\�2�_LI�>%%�D��G��FN�s�U?@��:�ƕ��	*�̫�����jyT��T��e���p彭K.ϰ�ے�,�j׹-JҺp��
⸭�~��m;�ӱ,z�ʫp��kꞢ��*���}�U#g{�z���9^.����$Mrwo�P�c��פ��왭�+v9s՛����v��`�_o���o�_�R}���']��X��-V�ն�@�����9�D9)8�e�:�B��^��;Gcw���q�'E�Ѽ�׽x�/s���lr�����|�c$����Nŀ(I��E\g�F��6?/A�} �}��?��`A�4"����|˞�W�@��N'��<LZ2w˟����a�ucJ�FIVve]e��kS�ʦֲ�v��B޷-�jYv}�nܗ%�f[V�Ɇ��i]7U�mXW�l���i�֝��=ieU��c_T��QU��{;�E=JT����JR�J"���wK�|1�]V�%gd�l��[��Ӟ��rſ�]��,��}�.}��J���m�6���j�X6���>���	�C����X`�3�̢�$�LyMw��e��H-b�6�mi���,���u�����ᓿX�6c�ɐFp%���y�M��݉�-ḸG�$0���/e��N�ҙU���:ْ�*B���FF<�]mQ�ï�n�0u��n��Օ�@�7���R���s�1f�����.�!�k��
���O�m׈�����1��=1"���zD�m�{�J�~'�Wo+E9��?�[y�n���_�oO۔
�DXޜ(�
⛨*:W�dxk���P�Z��c�\���*�ة�XH�����L�p�C��?f��_�{��e��P�\�`嚐z�Տf�\� �)�5��ULY�Hk5M���!Јq��	v�ְ(�r�&<��,�G�W��L���!����#g�.��&	�&�k���Q��0_B*4Ď�W��勃2����T�Ӭ75���h�K<C}��� ��o��BߪBBI�.)qW�����,TD$��4�`kg^Ji�b7l:p3	:qz!����R�d��I�m�������U�E���0�5�#ntQ��
�&�o .m�{�NG�<&LX��[3tꮌ�<�?��\��"O�f�93�:(nN=s=*mڕ/�n۞rB'8@��y��ٯ0��^�si[��V+Sݭ��4�1y,���T)Cq愨q!E�>���
K����ac�e6EA۴Q��v��]}F�Y���-4'}��f��
���"'8�(�J�0�c9���p{�P"�+N�}c���M¿.o]��T�(�~��4Ζь������
�F�4�dڎs�{�28[]��܈.�n�3�4�ȱ�%� �ӊ��/گ��{ɮ\�_��<d�(��C�"sR���iJw�b�jΣe�TQ'B@�2�K:����yc,��x��vC���.9�"�֧����"�Ru�\RM��%��X�*�#�M��a��$q�4��;l�xBOu׊��gԻh�2�W�x�.���Ȟ�ڙZ�\��56'�tz��K;�-1��>
n��~���3�켙JP��^:��I��U�A���l��`P9�����2eOC��/(�	�X�nT+XAL�e܊[��M�U�2�T��[ub�q9	��@��艓V�z��Zď�mI*
'��H�~\Hx�ڌ�
�*zt�f�/ɫ<qu��k�Q]Kˎ�b���u�&Xx��9e�8�⾏��D�S;o��"�&$��}�糉μ����\�a��o?!yR�s�d�*A�$z��X����[#�q��l�;Z�_����#nn���Y��z�>؆�a;dG�����h�ʪ@ܢ:h�¼Ŵ^��i��P�SE>z�;�%�ޯ�ђQN�=M$��0��(����]-1��H;,��jr�A�mU�R�RsT������ƒ������DQ�HJ�FT��
�Xv+2Vd�=��
S9g��L�r��]J�Q���l�+��@+%�榤D��j����fg�o�R�>-mi���/ȃ�/ʿr���M��
ɗ�kF��t��%��*5�O�cQs��^	�"'=''����÷Gw�l���[\Y3Ȗ߫�;~�/t"�:�sK�6?Ӓ��>��뜾|\�9���i��:+�	{卾!��8�Z+eL���C\n��"W��6CE\�&��R�2��*�o1�-$Y|�_~�K6Wk�
��`)��$��ϝi�3�Kh#��XɆ��q��ag���{��MK2eg!
㜺	y�p�~�$�Uv���C!��V�Ҁi<Z����F�d�ĩy_���Y�M՜�ֵ�o���p���QB�X����u��M詸<m������kz��*��DnF�&����!x2Nҳ�k�uײ��,�9+E`��$|���얖�e-9�}�gLۖT�W-��!z�d�O�.��{%�S�6A�)����Y5E�����i�l�2n���H+��_���H]��oPZ����)�u`�h��N�~7ܙ�RC�0L=Ʈ�g�?��o�Tm$��f�S�mB��^PIU��x�d2�ͷ#��S�zNy�!�jK��J"R���u�f/
�Ud
k(,�[�T`�`A�9D��9�	K�sҕ�0�J��L��8����rIO��M�vi�hj��NHf�_~�1�M�}��.3�_H��c��/QFeg>X����/�#�)��Oכ��Eվ�S�{ߒ>��}�W=��k[�/(��R�j�szp��2j�����ԍ�C����p�l�+ܫ,34���ᔀ�\�B�F������_�"+�ƒ�4<l����6g��P������܇Z�ݤy6�x��3u&�T�Ri�"�H��XL�Ǹ��*�&g��arٲ׊2N3�H�i��K��oK�С�җ�O�����N���u���yeU�)��� FhMo�Q���k���Ԝ��&�R���Aڹ���: ��Cz)d�;�6cb��`������߼Lg��9y�/�$l����𗨣2��.�$)y���̧������_�������\���+��ݵ�����DשpCU���~ș5H�Z��H�F��z�-(��_�V���jjT�Xb�F��"Xd���u��I>&J��H�0���M񳫯����ٟ�#�@~{�y�Rl�j�v�����_��ԛR�IL��E"�i���ӏq��U���&Kt�	P`��o���o��|~�~�Z~�?��R�F�1��\�^��UY��f���@�����,���&�R���Aڹ���: ��0�#�d�;�6cb��`������%}���q7�����}��>�����X��`�bʊ����j�S��Qup��L�~H��F_w��d{n���༢&�K!����dL��d�{f}�u#�m{�2����d��K/�+vx�55}M�H
5��&�{�L�I�3	|��+JD�_:���
���.� ^k��E&�!֭�iM�^%���ԛR�I�vP�T,�o
�9w��h,N��,Yӌ$J���*���(x��!E�%q}e\t��I�dI>`�hjv��j�i���ӷϡ%�l�l��G����`'������k'9�E�� a`iI��vo���*!�Q7�����ZD��2:�l�hF���a@J�~J�f_CC˘(l�c@���[��SE�D,���cE,���?��;O�C��v��6!'��m���"ב/��am oF�5��,�&�۪ye���[OmCe���O+^R�VgAoOa����gRk�)W���z�QɹȤWT�������B{Pꇹ�o�UJ�ː��G�˩�~*�(��Q��q��u�>Y��*��k<�ҩuJ�j�>�(`��P	�\�$���֐���Y֠i^��
+�hfqr�6���
Rlψ�E�fr�~�{B$$��s�Pvo˞h"t���hd��=YQ��HV��v[����{€���oP���Wf���9R��[�&���1_(>���w�u������S����_�F�s��h�x&�f��tIv��˺?Bʄ�\]�+���.w+F%ZF�x�M�e���+��\��q�[�!�}�c���]�|k)�$�������$�;���BS54v~v�s~L���R��ud?/oE�-$f᫅n髆��j�fl���j�p>e�r�\g�#��RkЋ`l+2����1�t�K�d
��;z-�H�:V�
m�B��n�/��I��P���n0\��β䉀��;L[�T�nq%�"�'��G�
�(p��0�5扴n$�!µ>LY����l(�eHϭ&��e�F.釖��G����v�C���k�*#���`i�iN-��6�edavq17�Rʍ�4]V~��^��֣��
�D���dA\�3�?�5�_����Ŷ�%��L*�?��f:�C����Y�f���W�PXSI5E"��
LGG2��gL{*��,y��	�k�*�H�6�i�j<�p3FQ��5`$�(�����;l��$h����&jT�qD���:�oxܧe¹��?�Q��{U�}�������;\��=;���F8��|�AJ��D%u5T䛉��b�����>ko���xex~��k�(Qf��~��Y��߁Dϕ��1�Bl�����
�֡O0��ʬ�Y�W�g8�yQ��s�m��|�����&�;�K��+�z�Ѕ��!�7ΔV��2��.](PN$�%j[�y�}/��ɬ�ɬ�O/5397AC]��+��xU�@.��z���&D��6%E��
�io;{���!H�^s�5��%��r�
\�K�K��TS��	�mP�M�b�t��8m�9�T�A��N�B_8x��������r��yη��Y6~{�ej��J����e���ߙ�r�嗰L��"{��$I몙�8����m&��&vO��o��e��ٓ��I�+��\t����Lò�I��.R�w)iϸ�	��aݖ�"��OG�DXk�j��q��ڛ�mYx1�����Q���DDDEKD�Hr"ʗJ����0,�K�6��\���ˈ\�E�|�a��
�$��>����2��{̜Vb�OLY7�29#�V	ˆ���K��9�I�"�e&ٱvl�EKk���O�L�{o�v���$d��vm�-V��Y�p���\�Q+ߴ��>��^�V�<�%��k������ĺ���N�X�%|+�b��.Ū#:��-H'��g��6)�L����3��x,w�5�,�aG��ؓ��㹟�{Q�cZQ��c;1mAB2�*a[��P�S�(��T'�D�D�Uk�}$VM�%�'h��,o1�?Zz%[��kW.��㼊��*�Iv㟢���8g��I�zԞ���J����9DD�$�	G�>�!�"E5}8D��Y�Di��GE�
�s����A�$�i�{�O}��*V*��G�J��w�G�i�n��C�y~S�l���'�P�]����g���Ѭ4�GMb�"��D��:���(E,
�E��	�}|e2����#���\��~RU
���.���R٤��G6��+�IY����]�Dj���#^�{�wrv�Ĉ}�H��,�?��E/�*5�دr�,{8�G\}>�+n'��˅����R�������~Ш :��,��UK�;���3�Vi�e�"��o}�C8D�j�p�Q0������4��-Qkx��I��2�b�I�ݪT�U[�t�l�9��9��M;
c‡�J�vٳ��M��*�_M{����A���Xh(��RD9eډ�lu�P�ŁU(��J"���e)�CLG�e��Q��������{��]d��[I]��mC�W���?����F�5b���L���;�S�V$_�$�<A�<��R�H����"gG�\��	�+�/3W./A���y��zҀ�~�֠�T	s�Hy7��J�=�j�;����D�D� D��h�"�����Ø"&��b"�i9�TZ� �&�L�دR{�j�+V��#�%K擸�=�N�X��Ҽ�)ݶkϴf�?tJ�2��^�z�}l�M�/�3�H�,�Q?-���Ö)��j�&��ԋ}ʥI��b<�/I(�{��\��~RU
��.R�h��-���G6��+�Ie��L5�]������6k��w'l�H��I�x�nP��&��.��.��.�Fc��vA�Ikd�E��ګ`�]����~(�d����r�-�c��i�F]�LHF�*T�S�o�V+S(�#����K��T[�ǰH��XA�a�Jnj��`�k�29Ҕz����~'F#>�r��B��iK�Ad�[Ƌ�x|��3�Џ(Wg:��w���q�w�U�$�!�:��	�gՍ\žh	�4�ۦ̑�a�ئ�<�2��)����ۿ#�8�D0�
o�xaԛ�/�ڋo��g��Z��.&|I1��NEhڨ;����+�S�3�,+�*�i�N�J�oacmkys�����ȏ�](_WS�z�׆�)���e=E����P"n����q�~�����~�ɲ�(�P�>F��*~'�.�Ok2#^yu�.��N�'��Q�.�J1EPH�Bq6Rk��yǾ�'�������R�1�^8-qh�b��U��M(^kV!/LݠZ�b�q�Z�wd8�fL�$��N�<�q^�LCؿ��ݕ|Ҟ�K]�mhy�yK9�.���I4E~d_,j�%���Ӣo*=�U�j���i�J"8P��4ک6���oL�W=I�P#� �H:H�B%�"R���;��yU��_�#2M�!�Xz�
�S}���Q��"Y�mAGN�nRt�T��V���D��TV��i��K��8��i�<��$�i��H��z�V�J2�Y���4y#6[ʸ�"Y8��-�Ǯ�±q����q�L���dMA"��u^f��(�J�[��'��=E����z9�q60�PI�U��坕[h���}�[�U�����m����W�\��ތ!�)�g=�f������0��b!�s����w�1y��ܕaUlibX�%�bX�4���Q򒳓����6Tל� ͚CUp�P!(��0�(l��Z
̋��\c�+�����j�+& g�&�f}�i>D@� ��"Pǻ�ΌK�$J������v^�˂V1j�ݶ$h�G/Ӓ1ǝM��^�2���@�t���Ů9���U���Ju�
N���ԛ�Zi������1�4�'�Oe��J5V#|B]���ĺ-�x�z��B<����cW�w}U�E�aVgZ�Ju�yW��k��q��~������أ��Gn��Ə�":$%�bX�%�bX�fI�&d��eE�.�o��n�������yI3��t�XHE�HI�K��$T%�;���Xv�Y\Y�)c��9��i�Q�(6��T��NKPz�k:̆:?�&�AC O��D~���st>N�� ��\��	��jr���Z��ǿ暈�UIijX���VU��sد�:��ۍ�r�vֶ,c&��0��t���Y[WIcn#Ք��,b�Y+n�|���Q�IگB?7�C0v�5�B�>�1P�ሚ�����E��-�}
�W�B4�����y�g��x��M��n�~��V\�sp+[^(�`o���.�^��(��ڨ�*<<7�h����c��,(�T�A"y/"�&D{1~�:	lK�B��A>�}l)�'x�̚Ϝ�~#f4Ѹ:i2_�[??�������Ýs.г�L�e���(�d
,K�UAiҦ��ϕ���x�svR�p��}H������̱�~ʰ����s�_ZD��]��[����ޖe{�[Q(�6�i��pH�x�d���u��\wU�AN��+��J�k��;$@�*�h�3^4�#B�R�J�+(���	��Z��P-�5q�j��W}̫ e_Q�.r>���Ѩ�p%62�Wj���$v]�%��s/r��c9��WDł�������x�R���-U�u���*�֬t�ڥ6��s�)�<V��D�!:V�8�HyR%��d1I��UO"���i����lg�B�X��-�p�\!Ud�ކ6��-Bm�p�ľ�6���2���S�I�l�)�b�i�[[3����U��K��]5&ˏ�c�،�dU�B�d�H��֕1H�r�,��,�D�wЖ�E�?�Rߵ1�i[�f]��fU�2����?�9qas��L��&E)�KCDd�E�v �'�D���c0�*���E��{��(�u�U��4Z���M�U�X靵K��:.xSnx��5�xB.t��q�(G�u�d1I��UO"���i���l,g�B�X��-�p�[BVH��6��-Bm�p�ľ�#n�%2���S�I�l�)�b�Z��%�3����U��KV�]�HU���d!�z��Q2a�$LjkJ�e�Ye�Y<$4,d�s|�f*ʄ+��u-�
��aUټfeY��(:��3�s��Hy�ԙ�T��%{N�h蔖	�n�r�fN��#��UtLX*-X����x�R��	��^�Zo���Mj�t�ڥ6��s›s�l�dK�o:V�8�HyR&���aĪS�\�+4��i�����}�)ʼnXa���p�\!Ud��c`ٲ�&��p�ľ�6��S(��u8�����)�b�i�[ps0��o��]{?쭨�r�i��2�fB3U�Tਙ0��&4�E��YeH��J��O���	��9�����f4[M�3���az��aw�1�5~2�����^�J%b����
	��<F+I������n�ʆ��]�|�le����1�Qf��*�$�R��IΞ�.AB���$t�of������h�R�n�̀ǎF~9�`E$~�#*8�*��w�4�w�B��J=
�}��D���;6��a�K��g▔��Q̭��"�/D�����Hu�����	񓿛��&��+��3����G�\]�p��K��j�a��ٟ����hzJ@v���9�T�A��6���J�W=���v�ݮ�*�L�ꕓ��������8�
�N�5]%U�G�=�U&�-0��G��z��j�rGLzGl]_����=:��c�J���)����	 F�IN,/��ѥ�0�D��{�̍�XHu�jn��n/��$�}���H������R�ˇ{MO�ң�̉�C��8����8�:��X*�Qm��1���]�	y���Bޜ����Ua�]w
�fE��>�5�x�^�q��/<r��y����@��r��,�L2����7B���G_t��[��8�c��/�y��z��g�_%�m��Uݿ�i�"��芻J1
��rRS��kTL�����VDK��I�Y�\l���O�Db��S���kb���E#?�8��+Ȑ�':fe�p�>�)`g�h2`�v�	ѭ�DG����3p�&b"g?�1��Ek�St�/��4��`5�
̭DZJ\�T9��+6*b�<;eI0���͖��yc���?���f��7~���	v�g��K�-�q���-E5��4p���,?(��J������.?_i�f� ��=��;w�����;��`r��������7G�6�_��߅6�E����B.@Z�8��"��[�$H���"�I��q����o�?�VϚt��dbϻ�}����b�{R�j|�t����5-G���ˉI<,��;#!��I��+��0�ܘv$�b��4�dI@9��/1��.�W%k6�%��k���@�q�p[y/F��j�zђN�X��*���tFN�8�)�y���_�t���35��>G��L4���ǯܻ��I.F}ߺ>���륓-�hN�����$��%qL*�����	A�t�o���ȗ��3źd�^O+�AYi���%sV���YKYV����h*������?a��_q#�y�)�,?����o�V�|ɓ2Wo��&�0�n�`�,wʝ��AԹ��qz��?s9
��k���=RFj~�XH~���K�s�	��Y���Ph��\�'IC��F+��(��[W�9~��C�UP/�X4���H
]��bՉ�_�[e
��
\��&'uK����'�ՖI����5%1����&@��#4��M�%Se>�m,(�r���I諭�hOi�门�{�2<z�썶�D�,�Ļ���]�–$�(Wk���?��O!+82�M_u*�_M
<����a3hh��F��[�3.���OJ
�Hշ��,9��/���r�rC�ty+���ȉ�
�ޭ~��3t�~졫j���
Ԏ���
Uԯ����
�y�O�:Ϳ<�-��ƺ���.��j/�
W9�b��V��k��hb8��%��'�'�uV�%kx�V��j%x��j��~���l��t�it�x��S������NZ,k�ŞIOz�����U�&�=�P�̾CE
8(C�]7U���E�N_���O'�Le�ѕHB��ά����ó��p�i.�+���C1�F���4gʜ�0��N.���Jl�B~A�׍<X���,<��n��[����4���(��9T%�>}��bH�&����'r˝#,+'{`R�ͥ�zl?���J���7�����[�R��n*�
:®�*z.��,�MA������׳�]��Xc�(��A�U(�����=%B����S����<27wLT�F�f,�:�K��2��|�,F�*)�Z%�Z��NJ&e�͏L�F]�
^�$�F*����������%d,9�d�o�H���qq���h�=�
�$�H��fj����6>�j�iU"�uG����}�.��Y_2�u��ּ�>�x�M3!��rU3:�_۝�}E'�2���-�am����џ��Io����x�B��~ȼ�Om�J�bsD��lo�e.�p�}e	�!�
�W�B�`�O�����q��+1B�Any�����%�ב[
"��w7�Z�[�ˍ}�Cr7�ioN,���1�8�\�S�fL�/JF�8�W;���ݫ�SMT��e�8��S\=4�Bt�V!'6:M��F�ex�Mdi���z�у�c#g\Z��&�"�FQG,��`#�`�8;(�	��
!t�pT_��7ꢦ���P��?JȎ�ȭH����XA�A8LFH�����>^p����N@2����
�Ƥ��^=~�鎣�=��
���D6zZ�Wi_W�US�XRr�j
KdV��[������°��̰-˦�+���bQW&�AT�%������O��h
�e{:^�6�$�����Y�_d�V�d
e^)`ɷt�is�D�N�I��(�����V��_�a�?)�j���*�_m�(�4�5�$�k���
ިl��yd��f{��b�r3���[-v�=��X��$p)�]dj��� #X(�V��L�9W�D�2�p�|D����E��39���i�@��/����4̚�1����I���!�VmY-Jpe�3p'+r����~�t�	A�*�5M�����y,�xҥ&Gj"5�7�yS=�%���b�b?�!�ؿ,z����?](��f\��)��!ӓ�ŏc�⇑*�
�mJ�����;k�>~�gEX�yI�MkI��+cX{�
����i�^ڐ�l�8Z$p��k5�h��w�j5wҕw�s��	J�QjD'��1Z�P�o�?+e �m�e0�jcOG~a�D�R"�U��U)\��
�=$'0��$2^g�
�O�a�g�^b��'7�3!@ǿ��	���C>������9�'eg�O�-�lO�a{&H~S��˗�5�'�\��Y�FT��Uh��6���Gni�2��t{9�Ev�	�@IRvE#]ͬL��\�s���Ƨ>pT������M+������>��@_W}�K�
Ҍ�n\&��q�.b����	]Y_�_Dc��w�Y���|mUcU\��J�N%�I;v*T���xݩk�>Zx���Y��.�<���[E�_�)YC%-�M�.�ݤ`�X���S�Q8�?|�Dm_�+��4����N�w`�Wj��Zɋ��=�$yB]�ZgC���ͅ[��^�$��i��2{��h�h�3�k�x��>Ðy�'d['���'�RE��o�5q�<B�j��*HЪ�t�J�V#�4��k���ˢ�;GϠ$�;"����'O��n	��
�HacS�8*Y{_Yx7ji]^M~
�N�
��/��ͥ��e{r�~ˊ��X
1BI�ʄ���r���#�TW��,���?�>6�������⤝�
�*U���n��]Hy�"�{lg��%�4V�n�2�VP�Kz����i%�)��(uL��N.O�(QW�d���T�az�ڋ�/�9�a���!���=�
��Cmcq�
\9�=�a��I�m��]�/\����mME;
�
�g��h-�Q�h��M���ҫ���k�p<?y<��;}3�1u��-=����4 Y�P��J�|��(�>����Vq&�y<1��Y�Δ[�W��Q�S�ͻMɛ̃6�x�%8��z��o�5���!N��d��(3�<�Z�q���t��?�E�B���=�g�H��B�t�3��j�Ľ(��&�תT[0�����mc�V�^�k�W[��ޜ�_9-B���:5Uu�`+Ax\�V�v�WBڋ�u*�Ѱrѹ4�r��;Pt�cj^����-����h#���V�"WIi��(<O����J��x!�yd�)�mF����$Ƶ|bz���a!#]A>�o�~*�	����U��s���������2��2s�
Xo�	��ECd������/����j����Yyy]A{�k�s00h6y�SS8r�۝1j�E��y�y������=U.���<��E!�����|@��o5IR�S�3mU��U"��m���v���[��f���=��u�C�˝6���s���hڱ��k�T_�w	]�,��O�Oclo�������U\yTQb]b7җ2����.b/z?|:t�B 1X�B+ ��)6��,�5���"EC%�h�4�&������J�-�m�W�	�JA,�7x/bqԨ���̤�*"��ɢԑeP�ڴ#+�i)aI�
kw�A�A��c��R/�di-+����F(�EN<��J5��
�;Y��aA?�S��
	�RZ��|�ܰ��Ď�EX�.��Y�c� x�K5���%��7�5�3���	�X����W��,��8sUl׏�}���#�[�M���:��	k"�Q���[�h�u:j���$���O�cX�L��„��/�,	u��S���L���K$�������Y�����AfY����,��k�n�&��O�5H�o?�#�f�=�I{H���6aQ7o����!�$D��X'�̨��[Es�\m�
��51��u#U9��$�+�FI��Qj�r�����m&8�c�ን,��_���^�T-���5ޏ�>���(��Kܱ���c*&���Eb¼�ܤ��ۯ�d���mZ�f=�%����<���>�bwbR���h��Nτ��˼]\U�ָ�W�J��
�u��V+��
c�XdkϝA���7G��[�I��	ƿ%��nJސ��N�+}��\u��s���i���t�-�D^M�O�<�=/��z��������ߟ�=�A�lM�ܼaQ"��n�C�f��
B���`�ِ񘰉���֫+:�� =
�Ŝ���54�4h�QB5g�Ney(�:/ŭM,aT��@�RXCo�P��d�?�?�
i]�"����~h�c4��;|�Y��"o�$�ws�ݎ�d'���&+`�^c��ݖ5���*�N@Y�Z����:~�#82�U4([��mп����Ĭ��^�=W]�t}�A^\;ǝ{�.}�������
EH~�
�������V�n���i:��I�T���z��=͊�+�G��c�i����1�5_��}<�
b�P��5C`��X�!'�/�Z��=�{�.��W��e:RD��p:HB�#j�Q=�D;�M��χ�
��E�B��
fs�U$�M�T�.@y�C�t�)�)�I�^[U��zYD�Q��."*%Y	��D�pn���4�i2��G�h~�e�͊ʩ߅C!��ӕ��6~��w��^�+�I5!�~� �*v"F�����X�ռm��-8�R��\cf)t�k�{�O�nw畕|R�!���v�<ϥ-�j��*�*�����[v\�9�>�]�
@��dKݪD���?�
�ܵ��WmfV�U�Ǵ;���"�,g��m��K�3$��$�w�^�P�*fܳ�]�}�}R8mD�E�{�`qTC�{bi�'�j���*swCǁ���L��؄�aPX4
�Ȧv`qQ�/��j�]����E�Yo�m�F#��ݝ%��:RGZ�wI^��u���ڨW�L��f���U�7�J\f�7���ۈg\�ф�Ef���b�夠5F�m׷[�MU�j�	��-=��� d��w��y6,䀔��T�8aP��
X��Jr�����G�h�w�{��mK�Ӳ�~��z��H>��U�XY�
�UY����sU�c�����c�]�"}\m���L/ȗx�����H�;�y��z����z��u�٘�o�`�}���2l}�$�����ɰC�㽑O�oͶ�ӝ�U�j�-�K�2�ȇq$��������~r��FpF�Ye�Yd�bA�$�fS�1� I�5�̹�V����Cy��,b0��AA�������A��fh/���2Ab���1LU�+��h�����U�d�3bE@�(5×np�B�\��M^�h�Wo�Mբ־�j��[WMAwxI���L�>h<f�;����O�l��I]�]IKs���'󛰛g3d(��t`�PKCh�B+��WVytʪclk��9�D���]e<���q��C%��&��*�`=��s؊]�� �
���8l�"��%��WJ,u��:�*5�jS�V�[lS�7��
3jC�O�S��&EW�g��o�����	���YF4a�Pi��Rƌȶk�K�v�`���6�28Q6IH���{u�����O4ڌT���eg���Nd��Pȃ���0���g�q���i�0`���I�9XŸn�~���{�i{f�a'�B�=bVz�����
���rEG��tQf��$�=� m"Y���y��{J�:ڼZ�}��	��7�^�3|#p#l;(�
~gb\*L���PPN�Nx�!@>�B�
,A���Jk��������eKIj��b�
4�#+&.�c�m�</u*
��z����6bOR���n���Bؤ};e�1~��X���J8tR�_����Y�-8;��h���{G+����[�~�b�)QM�|�e�2�/G�C�#\1,�<�\!���8a�c�c�IA]�]vշT��"�~��nz��{�-\��ޙ��IU
-me�Ee�NK�KJ_��=�����r�ܭ����|�Ħ�2�>-h�����Q���|�T�ȤR)�Ex�X�X�8H�f}�Z�(0�+��D���씘Ap��8<8�ûd1�T�*��ٙ3�9bm��%�{+Y�qFۑ���3t0��-�(�L��s8H���;�Rz�(/.�7����	1�=,�v�ES⟱�:o�}�+u�ʩ�$ܦ{d��?�J�o��0FH'd��Z�"B�;ݵ�"�ޒ����w,�Y:�w�FE����[z�qT�5V-�1���}�j�UK�J�l�{!��	J�8տ��	��F�����#�S�u��������X�b��7�࿛?��'��
߾�	<�t��94�[�TV�� �jȌ�8�jQ[��gc����HbV,�����2��xʡa�@=	�r!�c��o^}%��������[Hz���|1��8�p[�ݺO~�`��-!��9�F�q[(�}3,SNa����EQd
n���և�I&�k*v[�{I�έ���rWlmG�5j�_�h3D+�^\_#�S���s�u5�N���}%ݺ��g�K�寧W�Cu.�tHD� ��>�C�u�H�������"g�b��L��V��Ox��1?h��t�(��8�U�-��:O���XP��ޝDS�0�~�<���iW#]l�ٝr���a�4���*��#~��xF�t��BMK� E��w
���n��,A(�l7�AmG��r�A���e\�}<�<�������,�_G����IGkfW�r��͢Oc�vy�;{��v��.^/���uK����r'�ea�Yb�,��e}��Q��S��D8��(6O#
⸮*h�{ıd4�L,P������&_��;��6WS�E5�(����y�X�+��U�A_X����dPh�<K,f�(>Rٱ�J��
�4Sw$3Qф�s�����v�t�٧;М�#U+�U�W9�,>�9l��(.��dTr;�2K:Z;h����;�%��!V��3�$m	6c��O"I���(t�_;@�W�q�!�9�	l<�w���X��gχY����uL�	�+Z�)䜜�P��$����dk��Y�)�֦��X+,��+��TB:B���y`����
@����di`T=et-*ڢf��G�
<�"a�(NS;Ao�D�2��c.q!~;w�AϘ��Nd��Wd5��5h� �8:���^agi5Aô��/yQ�Z���>�
�=�
�4��%��p���L�\c�,��3��r��,�2�F�,c��&�KY��%���6\V3�+�(��mi���I�Ve�9�2�V�Q��Yp��E1�`��}�{���׌�J�>�kKt�����>c����]k��B��aJ�մ���U�XU�X]�\e��:��4�Α�(�4k�ѠF/�����^�)��d�!�e/�,؅��p�iMy#&�i2�Y����5��$)a�"����/L�F�Nl
�SR��{��5H���n>�⑽>���֜��+�D�ڕO�y����1��$����_�4SGc:�2�[觐� ����K��f�8�i�9]Q`�G�jF[4⇺-�'��m؍�����v�}��l�c���V�)@w�9�u�m�Se�?�	F�b̹�W��b�b�p���>\h��m�F,��.	(4ۈ����Β"X��oegy��ʜhu	?Xq�R���78��.�yR�x���%2{F]%��Ҵ�u�QwQ,5Mu�cƗ�^��3������J"j�'�N��Û&�T�C!X
��N㝯�y���\�!V�-g��3��X�'jH6o�)��6��)���q�E
R�Ţ`��gyS
0�?AK�!Q�<�K����m�0�y�0S*���IU���(�e�!������5���u���y]͘t�m�"��
�
�u�[�Ҩb�%��2��Pw�2�ˇsJ��h���©
�H��E�ّ�����Β"ٲ��˟�5FR�����˵%�z�79WF�����#%3#�%�]hb�<�����a�k���4����ٝ���Eus��JԬ28_l�aJ:��uI�x�Ď"w�C�OZ���
�����,���;RA��|�N�q��^�\��(j�F-_׵s8@�<���1�
^!
�1��jXռ�;�ۆ��9��P����X�J���	F�-1
eh砞���`)�y��y]͘t�m�"�����(��[�Ҩb�%��2���ߑm�ù�X޴iv��T���U�Q\-�9+W�H�E"�H�R)���/{u�*�z��X20�`"��NLA��3��s5M���ATm��$S�FP�\�Y
@��m�5�i"���/�D,"rrj�O��]�ή���,c2eN�j{Z��ĵU���\�ٺ+t%c���R���+��t��z����m1����&$��\�.藴���W�)䖺���o����l��we�OP��L=�υt��e�nFv>@N�U�	�&�'�B;]����&�����j�[�D(=u�Ca��bX�%�bX�%�!!!�׼��"���T��\܏>�!�����%�׮������d	�X
4�r�4��D"�C�.�R�#x��g�B�Dw�Eb䤝�^o�^D���xU�,��'�Pّ�D�3IЍ��E�qD���%ˬ�s�u�w��b�]T�I�KvK|��{�{������kw�f��e���:����%�g�Ei�G�Q�m�Œs��4՟����[��R*��b���W���Sb�9���%&vŸ���_.`��w:T��R)�E��l��r��-I���S3��PS3
_�d�MƏ&�,�$
�+�,d��m}t���~�Z��"i7HOz��S�2���XRw/&���&��;e�q��	�� i���Z�ҁ�|��v�&�D�#�wɊ��C���5�ԑք0ԇ*x�n�.��H2���]Yv-�M��f����4x������1'3XOޑ�z�KZ{엷������[���7�O��D���,�Q4�Ht��ˎ��#i�|6f4z0F1>H�@���#H�4�#B�YH�R)�G��&��|r�E_�V�6LD&d����|��V
��b,`��TB��/*[p�a(25�v�>$��Q:Y|Ү��o�N<����<o�A�-���S�9p�8q�Zl��5R�hC��}���K߱'��յz�ؾ���a����;�I���r�����u�"���#�����yx�"ٛ�z@F�W�z�E�p/3�ը�c�d�~IfB�*��o�����>�woI���d�M�i0-GJ�!��Рƃh�2id0��<_���u�rw���	U3p��;���z�*�p[>��EŞ�Ca��M$j���������'s���O��z�l���� M��ڟ�}�>n�w���8*�2�.�Q�+��$��&��IL(�9�r2�c�7Js���]�7��n"id�ʗ�m�,�4�q��Z� ف����vw�iEO���晦3��KJ�"󲖋ǎ�4�qYtYzKXR�!9�U�r�s-J��̉Dj���54��覙`����Z$�cE�&u=Q�>��¼̕�{I�#8x!��!�^	�#�^J�,]�T�8�}�Ν0B�aA�H
~:�+;�׋D�j�v�G������5ŸoĒyE�����!��(�9�|
�5Ϥ)�g��]�4�jԏ��:.�*o-�K��VN����"����yzE�ϵ�^p�1m��Q��4�C	��Q��'W47���_�����[���fx����U0�ՎA*��~��#��D�|󤾳�<ȃѫ��������������J5(֫b��E��Gcќ�;]vM��(/�肨%�\�/��\{�S#(	m��*9�N�]5~�k�ezC'�2�����|�I:���X5^q�jRG�M�mj���^?j��m�C�s�?���I���~KF����d��R�jz؆�ښI���-��vll��]��~����/i?�@���]���Aݨ��*�%�5�m/��֗�M_�^�_+�Z�=\O�����/6-r�����N��"�2n��t�L�CP���YbH����矾&�j���r"
2Fz�x\����^�C:D��'��u'�qg���L�;m5�X�K�.��e�#go�ofy;>���V�+W�*�R�JhkN3��`Q�}6�5}��'��t��S~��S�m�V�����pUK�FV2���|�Zڮ깛_w��E�/�Nٕ�S�z
��6�����{M�~ۚ��"�+[�ֳ|���{Ms���E�W�;v��;եOc�eܡ�˶Z�"�f�=S]1����@K��RD�n��W?o��W�s_�=��n�˖�m:`�i3�)\B&�$��DZU�5���|sꒅ%^����A�F,��� �
 r��s��Gf?T-��s)���W��0ʑ���Ѻ��:�G,F|��kV:hR{)�'m��l���3��}�H��И]]<�R)]Ԛu�s쇬$v�͈,��^w+p����~��߾�T���m����R�+���R�����_$ֶ���f�}޻eK⓶eG������.���z�^�w��-�jȻ��嵰��H��\�+��m��ݩk�Β,��2�P���-Z�w��s��*�\Qo %�V�"P�z�+�����%�ٯ���`����[��3��H��!~��a��ت��4�%�|sꒅ%^����C�bȈYD�uH�D8���!z-���O�)���!�"�'�@]Y��.���3��Z��B��N�;m�cf�޷��'j���DR�0��yn�R��4�^2��XH�?)������V�=���
�u��}J����D��K0��UK�FV2���|�[
���z�U/�Nٕ�S�| ���a[���]{M�~ۚ��"��"��mk7� h{Ms���E�W�;��,�^�$Y{>eܡ�˶Z�"�vnc�0U����@K��RD�n��]s���%~K��_�=��n�˹kvӦ
��:)\B&�$��DZcZ�Ӱ��A�ϪJ�{�eF��g�"!dDi3ǃ��Ȍ�#1��Z
�Hm��7���<�u��2Z�S�����-b3���}^��؀��*Å�c�0��\��=���-Gq��`�jtP�d����PW%�i�[Y�]M~�\��(p1�����M�䲩k-h|z��DGb�Zk������Bå.o���~��� Qt�}��5��~%�ҩx7�=jK*��?J���>w����yԟ��\��*Q$
�ǪZ�����4��r����2��Θ�N��D-a���<���2�:V�1ʎ)ˇJ�.�u*���K�+Y~�o�Wц�c�1��gN!��4��Ј=�d6�cv}v扻��7�
����
�B���;Gkw�]�ANI���1�]�X~����w�!�b\���i]�v����r?��T��@�g;�J�jn{��|��9�<�p0ׄ�h9���/�@�f̌J��ז��c�	��(�u���������QU@��0�6]���T��c]]b��ɷp̺Kɋ��6gj�j*
��*��);ζ���1^�^�[�C��� }�e���&{^�26���H�Yn�K��R.�n�S�+�b�0Rm�����Ǭ�U��^)6M�R�A���ݥ\ӯN�]�HQL6�8�b;<+pz�!�'� �?ֿ٦�Ųv��Ҋ��N􂩭�����������)�C��Ș�,�d�-�2@�����ر鶡2p������]�H^G�mN��_7�t��D�e[���n�e�w�M���m�P��C��3�|�o.�{?����<T����[,�o�ˊ&R�^']�R�K�u��,֏�Qʓ�)�u\����%u#��<��������5���X|�c�Ws���Υ>�!�6	��g�ͻ��B�}�/7�\�$���N�뷏�Z�"q�T�6�rU�L���t��v���S֥�yʂ9Z������~rn���Ɨ�Ʊ�vA�U��ȫ��;��.�����GGBKT��F�/�hq�9D���F�(�~���+�$e���u���;�ە�C�#���ƚ�ҴO�rb��07�$��Xɨ��z�$`���Õ�=g�4��
���MW$�G��h������ЫE]���P}�CO1�E]V�k:Unb*]X���L��L�W�w�_e����0'3�\���	v\V��!��d����o�R`�����������v5s�����z�� �KV*�R��1X��6U��C����n"k����3A�A"	5����x��c�ͼ�)7[i���'x>rҎ'�`����6!%���x�~��O+Oxu��ㄘ���z!�b�r��y^7U����Sp�I\ڐN:Pܐ��Y"ݠ����|��Θ��rX��o�nn�B�!��b�eAx�~$@A�*��y6���L4n3��S].VT��ng����R4����b�˕Nw)Y��#�Ԭbf'CAc��8�����
�P�Ƅ�(!s,83/-x���h���4���-�	,U��:�f��I�����^����O��}U�v��[�;�z�
W��7��)ޗ֙��]�����$C"���ho{+�&�ϐ���o
(,��PL����lz]~e���1�YQ��e�첽�d�����^�!(>Ǐ��2
�)��f�n��ʘ]o�[�qH��w��:���.�ש.�,f@�����TW㋈B��-�}G��W:(D����-�ܸ��Ƥ5�Cm
�$��m8z����,c3�X���}���N5o)Uq��˘�]�O�?xl�̡��r�}{��;�ZP_L��+vˣ�ڻ�WV�uS%�{xָ\��IeT�-��$M�?瞆��ٳ{�[z/\�<��"�J�#�	����o�ZU]:B��{�*/�IRw!�K�"�.].���z��\���,ۄ����DE�Q�}�m�C��/c���B�#%c3��\��H��2�� Vh���8\=ez�j�Z��ꄏ���^FR�1H�ӳk:����L�%�PQM=��:�`j�!@�������垿���ɈyK��ID�F*lR�&�8�P��u,p-��D�8>:V�1v5J=d�)�}�J����x��>����_5�tu[v�^,�I�C��U�d/R�m�ڛ��qD��ª������+*Τo
^ASu�Sr�Qؿ���[,F�t5I|~7W��k��e^�K�X�<��_�ޤn�[�y�L�G���i���>W��#ҏ��K�kY�6�i�c�(��GW*�c_!�i�����b��;�ud�]<]�켪8
;�HOR��2J��L�
)U�l.��~�v�$o%Q� k�rY5֌���BD`xt'�^)��xCP���+��f�:YpNV�bBU�v��I�F2]�EO��[���;)V�iv[
�R�DU�#43����e`�����hK��R�d��~ٲ�e�I_��6G�i�g��Tv�cbݷ%=r�Vn�v��^�kv�����9Y���-G�[uS�-\�q�7�'ʫ�T�ڂ䫥��!�X���U��߭�����iX�|*g�����v]�O�-��l�&ҨR8f�3�@q�u�P�GO������#��N7d�ċ�^?&)��^�i�`r����˔�޽�]��Ҳ� ��d��ј�:H��N�D���0��jɗ�+#�<��@+.	�c�4LHAʣ"�d��R>0H�K���t�c����e+,��췿$�	
�hfCYx��S/�bfl��B]�2��'��͐7��/,$��
NQ�?{Hwk=o�+�0��i+6��{��j�[�
�����Vg���؛��ij�k��Q��>U]ߦK�%]/�zōgڬ�~�^�GJ��Jǻ�P�8��t�@�g;�@�`2��b~S�h|UKg6�t)3z<�nY�J!��/?�ϭܹ";���vMH�X��/�t���~)E\�5�xw�y����	P��׻%5֌���BD`xt'�^��C!�����K-YX/Gڪ�TJ%"U�v��$c%�T�Ѻu��L��;)V�iv[ߒ\�y�3!��ep�Բ�gfl��B]�2��'��͐8q�
�򤯊
NQ�?{Hwk=o�0��nے��i+6��{��j�[�
͏�Z���Vg���؛��ij�k��Q��5ߦK�%]/�zōgڱ��ۯ�Qe��<o�E��=��v g��2{�G���C�]���J�H���X��r�RQ��>?��w��(Kt�gw�zcɕ�x~_�I#O�5ёn�K�Ir�Z包�yIN:�W,�4�O��ɨl�<Ǜ`�v�d\5�j�e��o�@-���X����z�'IDN�{!*�!�v�sWʂ��i��nV�Chmt��/n�����v���}��VƵ}II?e�X����^]Yly����*���������i��YS�F�՟I��=���W{�Eva#�	����GTu�s����~o�yז(�#&m�͞�MZs�yIv�6���DQ���0���e��U�#ҿ�Ó���c�RA�ۓ,�D:�<K{��=k�}�JM>/�[�9�z�,1#I�W����h#g�IF,��%�)�vO��~���R``���!^�_�xQĄ�,:�ƪb��+�{����CX��`)�I��Z	"R��I�	��l(Bn�F�Pqƨ��1�8����M��~��"tR��*�Ak_�/�#���g�g��a�I�O�F[���Psfx�X��?�S�u_:��$����
n����̖��� Sl�ˍ�%yI;�5���K
ڑF���L��9�'Z�v)r��2}:^����͙S�XՒm|��[�!�	*��!M0E�wΞ��
�-�i������Nc��u1Q�7���F��wb�#���i\�S�G���yf��$'.��v����v��ї���ƹb�+ �p�pJ@o�`�*������}R�d���<���=W���H~aΔ)O�:�N~Q
�d�@�:9T�a����ǥ!���h�l.*||�t�\|���\&t�������A�I����c�x�̡�}�w9�K!h��!���������V=�į�/�Z�n_�V˅b�+�}I�ߔm�	�Zv�wɛ�e�+3�Q�^���,߅~K�Ӧ�Nk�gN�F�Xm�[S�vدyԶ��35�F��!��Oo�̦���}��"�����Y�Sڋ�Y��⶘y���{vU�����:K
�r�~�x�T5���;^�A�a�q��yg�M���9V�,]b����2�vY�Y�[5��)*�V��%4�!���CXy�:٭�w��=�B�$���S.6s-�����!U=~N�W������f�O]��|���N��Wv�	'y�]�G�
�ɄǞ�茮�
M���m	���Q�L�҄�8�3�o'w�_q~��ƶKj�g
�(��,�ź�ёi1�
V��.a�����/vK�㶘��+�NU�?L�I�jp���bq��N�Z9�5c����e���ϔ��t�|�4�p��k�j'�RtUh`�`ˮ�C�2������*��	���l��D��z��O �ș��*�e�ñb���(k�q�E�;�]�H����a�X*��L��h3��m�ܩs���2�?���$�gW�{��	�S�(w?̦�f�MeK��Ű������[�6�}�7�T�lYE��JO�3 14�yUi�<SH���L�ƨ��BSY�:����OC,��
��]��+�Ho�|�u��H�il���_ǹp�^%y�[��QYv"���_��#9TGʦ���c��y�l��ǽ�n� �p��\��x�;M?���3�Y���ܮ�^��5�쑏�[,
/6F��9�v�g�>�׿&j0/��/��5m�kb=�EQQQ]1�1������Ri�'�v�ХxO�^]y)[S���b���Jf�h2|�!܌?ee��1:L:y��+����//�7_:u��E�Wput���s^t�E��"f��h�2�d�Wc���eäw
��'QŒa�"Z��Ԝ��
W��'��������C���U��u����W�R�ZL')��xw�~K�#�W�����j��oL��
�k,=��E���z ���M��t�$Y�xi�o�`�^\�YUK*$Lt�Lt�LQDTEDTEDTEeX]⯨���V|7YF������my�����/�r%3o�>Ð�F���u�
���1W{*s�^_"n�t�kދ���\�g�1�y��S艘b/���Zf�0�<����vYPa&tYe�g�YG@u��lk�k�pz�bh��3!Uj��;��3�^�J�i33��[����E�.h��^Z��{4�����������Xͪ�qu�S��U��'�^���'^E0[�r;�UPR�eD���鎘�(��������������K�R�#�q��
�Q��&)�+���s�����Ȕ;�d�3C�~��jz�'"�<Zl]�t���$o�Zo�}����\�g�1�y��S艖��E�[�3_W�\r�.����0�:,�ɳ�:��ل�5��8=\14̇��!�
�po���L�.���5��xw�~K�#��9n�.�m�26*m��A`��j&��ߚ�54R�)'�rثͮ[IB����@EJ����WÖYe�Yb0MT�𬰡���'�4��?\%N؞;��F-�%2�aK�{�%�u��.`#r(	+�f�v�	��5W�~��7-g��@0�f#�Ƃ�S��6B��{)�*�'�����x��X*+Gp�vD��6���B՚ӕ�.�܊�k�M7	+v���H�GX �c貄���׈*��T��s��9�C:��ƥ�#�׬9Cfn
�ɞ�d����2b2�wЕ,�x6�X��*�H�s����sG$2C4�b�!��,b�Q�|zO=�P���&����cQ�St�Ra	�/2	�$>��5�둗D`�פpRe1�c'��7�ܔ�-���"š�_d�V�aM�<�2a?=�|�`]x�2�k�6�y�v���	A����&Y����h4l1W�"j��ӟӚ�,�.�/t���ʃA�P��Q�[R�}K�S�4C�i���
�N�\�b\FdJpr4�'Q�I�����j$��N@v`
r==}9'����V�.YF�
d@:�di5��:����N�*���Д=g!c���!�90�����D?�c4�<)v�/,������;��3Ȥa�"�����5#�DM���E�/�l•<\�E
nB'	R���D����y*0�.�&����Oi�q�{q)�y�K�M�C�j”��:��3�U��ĚN���]��)�!E��J=�1- �����"ܗ���?᫸	�5&7t����^4M�
����q�B������@*���
�b4�#H�r�,��,�Xf���'��fV���g3�n"K�ǽ�W�^=�bf#�@��q�<z_S$�Z}�Mr�;Մ���{��s�Q���Ik�:��c�AϺ����Ì����I��N;Њ�$��6yO��D6�5��yH#�Q]����쬋�J޴�
u��i�G�]�椂�
XuEq�!�m+V�rL�����M�uc{���@�q��nQ�~z�9d-��>®"�
e'EN�
��бh�4��,��,�4�#H�x�:H
�M���^q�?ӄzZ3a|�L�)`����^B�.4a��0�i7�Y˄�(���
RP]��|��Ikš$�Oq
�~�}9�m\�U��el���e�eN}�a^$�0��3�B�o����9�0���4WgY!��0�|P�~u}��Bྴ.��j�nȧ�m1U��R2������M��Y1�*fd�\���� X���:Ң��|n��R�جnL��N���C��HB�!Jx��0p��P�����:��JT�!e6�2>�G<
p��ő����j���IYo�L�PN����G�g��?���Y���˴�#�)�w �i���s����1�6�4�3�[s�����-�%�#�.�+�(�c��OuW��o? ����Z���/[��19���i��aJv?81��zU.ֻW�Z����-/���$U����Z�=P��c��X�'{v�NJ�Y�3+�c��F�Q��j5	\W�q]e�ؠx�Q�~υ�'��q< c�H���pJ!�J���a:�����ȏ��~=,�t��Bi4�G[�bY8�^p%�8>T1�"|\<9����!���1�,�S �+�[��6�:F�1�S���\?N��kIO�,�\:�0�_����|>*2d������.˄����u�[�~��Oy�1]\�g-1�ށ��ZD��j��%b ����{�Y�hxK��3�~&��+my�f��A�0�
�ˌ��`�������
I|�4��*/~�z`�ױ�LP�.E��ٝ:$�#�eJ��o��P�c.l�U,z�i�i'fXӪt̸IA�Qq���
���G%���c&�W��lɼ���Lc��d���("��#�~B�郝��n�i{��v4��+��;[Q�<"�R>��4�yw�U՘�������m.r:�5̚�i�h���eL[VE��p�og��74�B�]��Io���K�m���˹=�V&{F��؎��E���Q��º�f�P�ZX^w��kƽr�s��?H�Bu�Y5|Fd~�GI�uǖ�ydê��(�pu��d�b#̩Q5��
le͙J���xS*ҝ�4�3.P{���\G������L�%���c&�W��lɼ���f�i��<��>��_��`�fp6<�������76��Q�v�:DŽ]�G�ڦ���-�,����@5�؍��GVPk�5-9���̩�j��4��݀��u~&恁t�C\+�ڒ�A��~M�]Tז�w'���Oh�[��(���<���u���1�1<�n��W�z��~���N�k&�}����t�,��\y`=w��L:���p��pu��d�b#̩Q5��
lf��J����L�JvXӪt̸IA�Qq7Bh� �L�%���c&�W��v�l���M��7�d���("��"�w�/ᾘ9ل�
�=�5=j��li��WQ�v�:DŽ]�G�ڦ�	���,����@5�؍�\ �uPk�5-9���̩�o��l:w�
���6��u(�e»aޒ�A��~M�]Tז�Q�r{��Oh�[��(��m�ʣ�u���1�1<�mADTM�XU�Ze�^u�_ɏF}�yFSx�N9�g�3[��&(q��I�$J`Ij\�޴P�|�=��&����b�٬V���^m�`���V_l�N�:�?`A<�-_��C	��Q�*�3j��}��a)r����b��T~yJi@�6�R� �H��;
x����Va�y 
*�բl$�{y�C��+\L�#�Wr��%*�XzdF�W/P�j��V@~ɄsT������.x�a$:$Lи��>�Fl�� ��2�i$�I$�D�C����k��W:�"��lqx�j�@�C>Ջ�q�g	f
P��"<y�V��8�g�R���L���9�C��&_��,W��HZ�9�E�`��kN3��K�`�}�ƯS��ނF��%��4��.�~�3�p���J�C�B�[zp�I���BA�i�O#9֟Ҙ��Urn�5jmY*���G��03���Ĺ��4��̦(68�.#.KZ7�	��rJ윜��J���E"��8�i�jQ��R!Y�T@p������I���6W��^R�/k�KUԖ+ke�؈v�����xړ1w��@�z���m�_.#5<V�:6��vϝn�4f|M����x�V�Bo�[��gC�Ę�q;���N1_1!_C��+\�����;�J��Mxg���/��͙�	~Ҭ��̻���ml"�$�I��CRf��)	��|���g��Ŷ%$#�7���rwR*/,dƗfx��RQ��"�H�R)�!�*�M��nW��Db�E�'�!�L�a,�@��Ch�$ }�?��CK�@S��P�3�窳�^	{��S'7�+��J'ZJ��=�U��C1�<\ŭ���/H�iKuR�����o��'�lg����M�.�O�՘I���1�Bza�b��M��v�*{_9�"�yLU�{!��E9�W��˼��LJ.5`'l�z�W��v�FT��b�SO�S֕����CAZ�1)"��9�$@$����E"�H�R)1\WY�y��$>HL,�9X���.M,9y�=���
8�PMXލ��(FG:����_E����w�
?R��N	S~�:jWE�W��]���,\�mhV�*c��(�������n�B�;�-҄&�F{�P��[ȧE�JZ3곿�	��m9�(���		B�9,��gVW�I���8H3���
�l��[��a�Y޳>�֨�i�C���qT#�U��]_�B��@�Q�%���I�\H����Iκ����YwHh��u����+�l`i\�'Kٷ�����p<s����S�°������ة�%�&/S��d
@8t0P���d~A�t왦���QheЇ�@�F���Y���.��"kr�yݩ�"M�v�-�Z�@���o���Y�Y|��Ll?�I|�q�$��LTY�Ƶ;�3���0#Svcck����Z���W����ޘ�����	ɪ�(I7��w�J��w�+ߚ-�˻�	?��sҽް��/�8QώY�>X��؉|q+�1`D�V�I�7��.�{6-�����0i���6$��&[ЯXIj(�֕b���	���I4{ꥺ)���M#�ޙf�ӌ,qQ9#�@������@"S������K=�POm!#dV���L�����g�>wdUaA;�^@���-a��򒵍m�W����1j7����̉����NO%�z��N�m�&YX~k%����:9W�zJ%o���X�TB,]��C���N{�g�x�}�9�QJol�Fn�����ߝJ��R��Hެ���g��޻;۟#�o�/�e���������YykW�qݺh�ɴ���1�I����P�^�VǛS��{��jw��D�[Ho_a� �!�7�<��Q��J"(��g ��\S��[H��Ũ�P�bU��p#�CX��L�؆f"��'�w+�0�:�Dӕ]�p��׌HMmF$Q[B�M��O�s�>;�*���� l�i���gyIZƶ��)!>c���&�fc��!��8!O|3�7��A,�?5���k�_���%����n��e�-F��ŀ�\6G6�3�`����ʨ�
	7�S#7yShw�v��V�_)f�$oVNR�3�{�o\Y��÷���X}z�Y]�,�֊���n�-�m&��9�L|Re*�t�B��rձ���}������R���+��m�9t��O�b�FdU҈�*���"o�|��m"��զ)�.�y�1�ainwy9�!����I�����^�ۮ�NsW��3�1��	G�E��hM~��:���"�
	�
��(F�k
�w�$�+nWE,'f.��-n�dL���PzrK�pB��yF�ۈ%���[�Mp�|�zJ%o���X̢@1ce��"X����N{�g�x�}ÙU��&��d`f�2����ߝJ�K�,܄����^Fc��޻;۟#�v����Z���[_d�����*1ۦ�l�I��Nz�I����P�a\�ly�>*_G���jw��D�jJ��vF"��>}��R����b�u��m��'��6��s�q���Yo<�a���;�����R�$�c��`�k�p�z�)�[�@,��c����Gd[[@V���O�s�>;�*���� l␌9h���X��]������Y���3�H��\�I�
{���n �V��nx5����_=�(����7ic2�ō��`q,b�a9�	�0A��eTR���ز����C�;~u+l/��r7�r����߳z��n|������kc�������1e�^U��=�o'�x����&R��B��rձ�����Y��(R���+��m�/��H��.�J4.�E���S�M��o���E�mǫLRfE��5�:,2���slC3KJ��S����)�ݷMP�HAn� l���v�(���h_�&�M<8ld+'�
��[��!%�&�k����Ó��=�jqPq7$���y��/>l|k+�����}�%�ޯB�u��T}��b�O�1o��[&j�����ӡ���^@��|Y}��-��E�ҽx-�Y��[z��Y��Y�~�g��*�mX�adY�eCX�uW���Ѽ�����J=r� [�{}��v�Y��>�m(�:�n���ݧTR:���fhϬ��)�-7\ę�PҖT�PhL1]�.�c��_c+��!͙�.[�t�k|����x)��
%B�X�V*�LD�PS�Yq\���3V!!�&S��@��ȽQ��C�^s�:C����~�g��a!7�?S�{���[��<~�>�)��U��62��I/�e�׷U��s��o��%�é���٭�n_;p{��@l׉H������J�>vu$&>��Ȏ÷m��l��]��b�b��|�"4�S����h	�@��iɮF�f^u$>��>�%
���U�&	�������Uj��l����$�n�P��j�ֹb��#�"�G�I��%��uiV$��d50�_���9�^ܗ��OT��!R#�Bf��MV*��ȟ�ů��e4\U:g��T�]2=�ҊZ��|���O(��\������K�p�6Y�/�y���T�s_"\����oD�R��b�	W�
q�\�t�_��S��s��Ћ��I�q��K�~�	�$��d�g1lɳ��|(���8����'*8��#��˚���d%9,%��Zژj�R�ڥn��ή�Qtؿ:����m2$�/��ΙY�վ{�{j7��V%5*�x]��B��2|�$
E��-TN*��|�Ѫ�O�~}GT���v�ǔ�io�C*פ�W���md���(�1>w�W(�:�3�"�Yȳ�(.��M���68�+�u���BIR4�l�B�\��uD|@�!U��)9)�Lڅ7śYt�xL3y�:n��;L�\[E��Δ>8��9��í�}�z,E.�g
9��S�\��S�h��ʴT�l5t΢wN�د����i����_b�R?֒v|-r�I�:��{}����LL�(8t�i[}0���K��p�d&���Z�;;�J��.��r���u�򂔙��M��M}�������Cgxh�G����4����f�X��9�""�I���_o4��ƒ�oy3�}��
��lfG�	>ʲ?Z)jf@Ơͩ���w)荻�����j*�dr���8�l�<"Oѱ�/Ɗu.�K�Vk�z�.�/�7��UŀnR�W1]�*��,�	,XFʄg\%�{|c���e�H)������"��C��"ڳ9e�>ߩ�E$���=��=��U	%���#(�ў`�:�X��Uz�����B`?Z���J{�R�^��U.-ٟDɺ
zl�jN�����qoT����\^Z���諏�c}d;�^���}�?�-�U�z���Y;Z�bFX˳�K��V�+�BְǦx�,x�&��\{z�o~m�
���޷�|�.䧗=��9��`��$��8�I-d�_�YT����l�o��}s�(Nh�����S�O��:cH��3�j�Gz���,�"Ђȫ�Ui
��:'�X�!��q�9j�:��=o���no�n�S�����a �A*�v���'KT����M��"TA�5�k]��R/���@���R��r>�����e�?�/�h�� ���`��� �������E��zqb�c&}���aٲv����9hz~գ���f��x?�DU�*G�����\��3�mPU���kJ:ƻ̍(K�i�B��ܵ"�t��]ک�|��`��,=36���/{�|��:��N�*|Ju�Y7V�z�p[Yw�
�9���}�0��M<���m���:PʨC�Q\sm�6�p��mz)� ��R&1_g(�1<��6�s�Ň6]�Ƒ��%�Ӿ�Q�����Cw+-�4L�*�r�Ū�{�yR��au`�3���B��_w�{P�Z̤G��gI4�8���+d���I����ăEn���M,��T*wu�=��b�8=�ԛ����c����7�ݢeE?$?�y���ۯoo����?zT������r�j��;ͫ9��~��I���A����f���[>+�Qz�.L	�����y��U��G�I���t�I��w!�]�W/ۇ
���n�=��uW?��$�(��
u^�7��!2�A�=3�y5�����K�Ż%Z��X�
�
�L9��(F��֪
R�S�x�=<�Ĝ���ld,���������(�,�5w��|Í�u���X>�-�f"P��&�p#\��`�7�Q`�t�Yb�)E%�}��&�uRθ^?��%@��EpxH�|����.ix�Nct��Ma*?�0��C=~�_?v�?�9�.h�u��ĕ����Ao�\P��� �N�Lr�O���ȏ�子ZK[;!�� kDZD�w�nēl�Q)֚��t���t��RU~j��>Ӎ6Y��xlG$�mZ/�G�������Ŵ8�0�O%�������/B�U�a��Ƹy�G��V�n���	d'��<�BG痬~{,R#L�R���-`�rT��n�h�}���f����#�����PG���	L�)�%���E�Ǵ9����a���&�P���
�zP8�@���Ȥ�5)��6(�5lY�<n��i>��
����������]˺vų���(���▵����
�B���#�\+j��R�*���>�uGOV5M[Ca��<R�g���
{�=Uok�¹S��X�s�.�r->^��,M��r�:z�'c�T�T�t��"� �m��Y���y<�m�¼����T��&���� ⭝����"όf�M-1�,���:���װ�"4�U)X�r�+�Id[}5e���G�
�jjI�ؘ0�M��(#�t���P�ђ����c�Aڸ�x[j�������OZ��3�w��I^�2�F�梣-�>Ǎ�>���}��!��w���^���԰k�wN�gH�<أ�5:<Rֶ��aT�Z�
��GܵmUܣ�Z��RR�g�Ψ��,j����<6g�Cs��{��}�Ǫ��ծ�*pX+.ze׮E���3E�$�E�Z�O\�ޤ�o���j�ri��F��8�eqEVc)^d�!��('���0qɶ�uwa:�KY6�f�Tf����48��~��4���%U1li��(�
�k��iF�f�)Ǿ�?�OCl-Iɭ�S�(��B�Cߎ�%�<��AR�95�
Ԝ2w&/�ię��r��Y����,V���г#Q\���\CD�d��.	l��B}��QT�����w�a�x�Z-^[�(w=؟�[�/�b�տ{Z�(�d�F�g��	��ġo�\���]���I�m����w8�L=R�\��1c�.���&hN��+�
�B?`��9����fp�ṵ��!��AE���T��BQH\7:#����Y�Ч~ԟ�8�Q%�z��+�>�ʥ0/"),Ն~GFh�+L�JU���l���]CLC;d���U[
\~i	��./��d<�U�b�O]v�}��G�A���ۮ�P��V$,~VR��^���A�֮<�*�3y�zhݴQ�\�s�j�?v��<2����	sR�F���9�s��;d}w0$u�eJ���$,��TZ�<:�iT��v��ִ쾨(���R���w��r�W��m2���L�_��X��oѱ�z���/�1_���<Z'\��2U'���I�ԯ�{+唱g؋�� �1Ƣ[�U�,�{{7ȇ��k1n�Uf)��	",���LI��ѳI1�A؁ظ����1/�GeR���q�y[|��܇����i�U���{x�(@\n"��S\�� %	#�\:�G��‡楡Q"�<9j�c�g��Օ��*fHZ�'��3w6�I��������i�ag��IQ�k��2�>mt��j��ɼ$~����]�����9}������␬.��AQ��&,Jҿ��{�aU\طu_�7꒨�
os����ۗ���ֲ�`���%�n��ws��d
E#b���������j�B�qE7�Q���=�,}���SlY
�l�N����l5M.�#�S~��'|ڷ��B�,D5�3�y"cG��""�@������y��%{G��H�B�
(T�m]W�}ԓp�PEۭo|��ޝ*{��
�}�/��U��$+�ޓRgi�����̮܍��h�)1�b�E#a�+��X���\c�'l��y��.V	zF	���WM��(U��\����D5�5!�8�J�\��s)j�k�jg
�f�0���	J�F”�R����B���s8����n��'�,�v���Z[�؟����ʳek@idiH�x�
��_�6�̒�JHf���Y/윴z5	\_����H��L�2,��ݕr�r�����7�=�I�U9��� ��^��;��ˎ����zPIj�gf"8Y��^ ����Τ�EJ���P[�k�����M*��B+���Ɂs��盽�Ʉy�M������Ռ��@�(Ӛ��8׫��orȩ�7߼���+�C0�{HIx&�_�涂���F=�S��\����Ty�N6ʷ�2�ve�]���!�ҫl��g���)�S"ir*�K�?'-��j=�b�iD�h���OdW[�s��>���F�W�	ҪsE�@��E�wm��]"���Ij�gf"8Y��^ ���y&��9*ƐKq@n����%1�J���IoF��#:�#����_���)q_쯆X��\Oc7�F�!�4�!N5�����a)@W���o37Leb}Haf����M���]�mU�ڈ{j�猹Ŕ+�6��ji�o�Xe���޺!
�Y�]+l��g���)T4��f[�RhϘ�r���j=�b�iMF�[Vqi��|�nv�1�A��4�N�S�*,0��-�E�Ǯ�� ��KVk;1����7���r�gd�jJ�D"�p��ƺ�
�Ldү����R[ѥE%�\�;���_���)q^���Mp��W��Ѓ
uU
q�W}��+�����2�>�0�{HIx&�]��kh*�mD=�S��\���i�G�4�G�ʷ�2�veb�e�J�t���~���jT=M�1WQtqI�C�r���j=�bׅ�c��r�KbQ��%��a����j6��i�{`�*�0TXd��E�wm��]H!��G�ک�v1p'�G?�x!��W(�vM&��4B-�P[�k�����M*�hJe%�ҧG&Ϡc���n��1.�J&���o�q���5y�}+i�DB�k��v��%(
�j��w��ѕ��!���BK�k��s[AVSj!��2����OX�̸_,�N��ٗ�tBg4��Z��޺�g���)�Sc�U��Р��F�Q��j��+���3�@d��!<���*�sSP��,��Œ"±vu/p}�A8UE*Z�%i�{(�.j>�HR��V�s��
;�ϳ��O�y�Kv�U��<���,S
��4�1�D��IYf&�b��e	�I�K�ȸQr(��T
Y�/"^����\S�C�ؤZ�V0Dſj�ow��=���p��"z��ZۑiU�d�U)?�=��VTмӚ%�/	K	[#���h�A��R�-Um�����	 �7�'��=F�T�%�sHy��ky5�
2�]0/�WHu�3(D�}<�G&��8�ho�ɦdž��D���=Y���ߪ�#�+��{vN�0ɤ�lkF�	���Wyǣ��f�D�6��*f��n)�3�,N%�_����P��il=��im6�s5�E�G.�]�݇�$�I���6�~���x��uH ��z�;_�g�����԰U%Qf��YT��4?eonz����� �tF���*�)�2�݅qw�V���Ir?Hf|������e�Ye�Yij긮��D��;f��P��f�d��	Zbe“��q>CM�LAY"�㢺(�����f�����j��5p�!���Z�?�V�	e�C�Œ�ʷ֋��v��$9��'��F�������ֳ
��J9ְz��?��9[z;��Bk��Z��ǵ	T��0�T�as�=��Y�)��r��K�v���xS��Ж��_�	Q�m+����}�0�3f_��+������Vh�Hf������	��XP���m8Qu���]�0���&An:�D��Yo��9��.�[râ|�5�[���*I��0�Q�v�D�F��j�9Z�1K%��/���������X豮��'��B��s9,�KrVc�֏9?}^+�!Sj��h�cN�ʁM�-D��]˻��7�M�g~Uݺ]P�b��cu��3f�vj�Ԡ���J���aj�^\+,��rk�Y�Ҫ2���]�X-4Vɩs5 (N�*T�YSU�u�m���lJ6�*�R;��dj�k��DV����V��?�y���d[=-aVA5�܀��d!&��Ud,D��;�el��3S�.�1����J��Řo��o'
j��
4TI�
�h��KkG�4�}&�*�q=�}V�4Ƶ/��P��^�39Y�����?DK�z�7��G�=PW5����.Ի�~��v�ohА߯~b~�}I���x(dl�g�\MCH"���_�5����<�`�LDDDD�!B�
� �~j�|�-|�U�����$�t��
P�|��z��?���=^b�qT)�-D�M����n~�0��נ�I��4�A�GhN�|%j�g@�����@�m~��TU��m�Og�l1#��"�X�+G@�u�|�o��-W�؁_8����x�p8�Ȇ�qpQ�=��!G7���b�W�MN�^_�;A?�-�9}6�8�{�T�}9�6�Q�ֲZ�/xz*5$)�#�������#q5��[�PA�ȁ���3��J��)��,��!�j��֗�+k����R�'~��	5�[�p$� QnL���kL�%�t�y2!�Y$�����݁S�s�r�c�mo�Pq.�^����:�}���-���>d~�~����	����1����<�Hsp���^�r�<~�D(��t�#UХTfLj�J��vh��4�[whU�fB�d�~lwf:�~J��ץ�n;����+(Vl)05�d��EV@��5�Y5�Y5�Y5�av��j4 ��CυC��>QL��fi�
�	�T��5@ٵ"^���~1�w^��P��H��"���gv�ŠM�(�)7$i��z�1����u�R�:��?
�M?>:���(���Kԋ(-��l	n
$t�GXO�i�e�Qm@��ޤ��jq�}G.z��:���(��i�5:��&��V�����~��!\�.U��|�!���ԧ�['�Y4���ʪ��´�Qп���_#B�Ҁ�tϦg#09�K=�ӑ�i�+�ڈ�A���\�Y
aHt�Q�DHm�P�j�bA��p���x��� (�0Ғ�V���^��t�v��m0���TE��U���BJ���-��.cf!2�H��S��F�ʭSG+G�хr�[���)�ӏ�U����,��ζ���P���-m�*���f\{PkNL�W��v�+R��
jE�m�2k6�I��'ɣuL����T�M�Oڳ�{S��5��ޝ�-��'�2�r>O�;+�]!���|fE�1?�q��#���s��9F����}�9��n��ZH;sT��5��$蕳P(��$6�(}�_� �\R8K���U]����5$�ԁ�]y�YjD߅���AL-}�Qfq�m*�В�	0zkx\�����=#�QO���T��hM�5����M��h���v��idNu�_�z�VDҖ�)T��ƀ�2�ڃZp��c+���#�Z�u�kR(�n<L�jI��'ɣuL����T�5���7�=��Y�m��I��	�'�2�#����?x��fE����Q�r;�-� ��B���H�'��������P��HԱ��a��%'d���3Cd��tI��#�����n�*i�����Ƣ�SV�5)B��-l3j�08�-�>���0��ū �N?��0�w���ٍ��R���s��<���f�)��2t�S�@�;Y�afS�����E�|�KnL�Nk�^h�q|)�|Y���gKT�eAXL#(g,�_jҎ%�%�Ei��nHj�2�
_�-6%U�7*�0Y,�F|�$$�5雮��X,�f7S�wɰ�ɣ��J��
��M�ی��3�jx_��7��4V�Pj�
�n��^n ��G��H�u�	k��n֊⡼�T�����%H��w�f���z.�T��v�J�]�歎j7C�OH�fe�!�����Y��0��w�o4���k��?�v��o��x�K��N�Ew���A�!��#�׍���A!�0�F]ٟj�B�r�F�_sDs1�h=U�
i_m>��7���bq�"�E*�C�pς�D���J럭L���2	S�ȤR)�EZ�����T�GV�����I�D�x�4�Z'Bg.A~��>��ƞ��0��g����)�q]Mv<��"�5�.^�21����n�5��h�FY I���5pk�w�#�ۛ�-N��4����0�I����k0���I���M�SdP���K�)�:4�~=�i[2�U����A�A��Vg�oF��H���ٲ{�U��U�#U�3V��2���V��U�v�zD}�/V��3��d��\��G�w��YpH��.��,����ݾ'���{r˟�G
�2���2J�O�[��L��I�n��Dt>��)àw�
y}�t�ߓ�t��IK}(�l���)�ګ-�z^m� ��6e/�\�~�O��ORv�2�U7�2���?e�\��ͪ�ڮØX����8��H�śy��7��||��]ǡ����?rp��o�k�
 �˴{�v��&���ݿ��*�Z�"Pn��S�P.UZ�~�]j6j�2��(Ү��*��hU�բ�K�Q��}k���q�u#(�Uh��+����\���J9��#��l%_��[�;���uv!�sR_��U�d�" �6��d/c�S$և���i�L��БU\�Gq�.Մ�و���;����EV.�ˀ��zSF�pYBރ�����ʣw9E?_��{V�:�~�~TG�l����a�5]�%N���j�Y�Ѷ6	*�[-�<��D�Go�62k�F#e�LonD^Hb�&�Fke���X��q�[s��>QG�:�V�����W�:��=�M�|sV+�ʚs�u����9g�����y�{Mw@=�]c� ��,�Z"�T�����/�[˙2��"{���u��tbW�w�
���S�>瞪DK��>��9�M�]���k����B�Q�s����N�$%�'NŰ�'��e�~�;�Y��vI#�Kz�^�w���5�e
��d�6����M�Sa<G-�Ej��X�T"�UM.Z'\�#FA�N��*��[��Z{����l�I}�y*��n�g0'�m�?��E*r�������xY˴٩	��w5%�f�ly���Lф@C��%^�]�dK�f�u���%߉��6{I��Ԯ�i�r�_i}��zgޔ��{-�gs��j��}/1�="푵��V̩��/)e���X�(*��V��Ү��';otT��+6�Yu�V�?��d#�&�EQ����[�>�궄��+l��1X`4�E�.19��?��"�%�%�g�r���*��7��4]ƍ O������
�G�\��jA�h�S���}�TBĶS:�(k"�'ЪM0o(���y��dڟ��9F�B���	O��ֺ��j��>�&��mO���m��{�.U[V�j�^��_���;m��z�ݮ�:��H�4�r\�(Z$�UʣW���?��;���N�&}���9��څ��g��:�|��T�(�*/G_�
j��Q^<�K��2��U��Lľ�V7$_�©�-��].I�7���idy
%��h��P~&?.��<�n��9,���?^DELKPKF�-����q�	V77�.�I�n4�	F�x0�`
�'��|��H9-�~��ʈX��gS��c���SЪM0o(���y��dڟ��9�jD7y��%?h[�Z껭���؛<�S�n�u���Um[�){�w��#�v�5��y�]�:u��u�F�d�P�I6��F��Z��]��u�I��L����xsѩ��Ь��u�e��rQ�T^����-B��x�.�|�o)V#1S1/��ܑ~�
���j#
tb�(�����kK#�i,�[RP^T9P~&?.��<�nڭӑRD��7N_?$%,+0+��	����9�X���,%��@�r<�
_�!�!d�
�����P9M�wy�u�Q2�ؙ�8 c���SЪM0o(���y��p��䚑
��	O��ֺ��j��c�bl/:&�۟�m��{�.U[�oƬ��?�u���?o��������Ӭ��#K2\�(Z$�UʣW���S��C��$�N�&}���/��M�X�V�:�|��T�(�*-�U���=I���ٮ�Yޚl�)V#13�-��谪z�YՌ�P���#.oy�9�����umޔ�}�}:�*�ݵ�r*H��f���䄱L��)ti?o�����o�p���F��'��W��y�Y#���%�TSE✍�0��D��&pN�+"�*�L�/�m濁�j78��
����l:��j��>�&��mO͹����o�;�.U[V�j�^��_��������ݮ�:��H�4�%�2��I�]ʣW���?��;�N���g����9��څ��g���7�/�J�$�)-E]��ԟM���赔o�m�*�f&b_E��"�
*<��V2�B�(�����6��<���մSzS΅�e��+}j��mn��E%�H��=������}4(}��2���r2��Ŝx��)g|�01BRQ#0���&�׍�zE��
���ು����Z�i�to���O.��dBsG'�(����v�Y���Ɂ�wF}�Bg�ܤM�̬~8[�"��N�S�0.����'`�{�?,��j�7j�td=�.q͘�*�5w���)zv���������^K�k6�B�f��P4)[uNʍS��l�-!�aV�p��sEmCMd��RO����׼��O*M�c��h���P�w�(��U�$�rQ$��Xe*;�1�uܮQ��Zl�CK�`��D*�I���7u�NR��T�Z4�@�ybƒEFQ}��r�8hi�Z4{�LW1~D�D��)2�j�z��f3�vY�O�
�&��<yc��OV�]���@(�Ȝ�%�(�b����O��}��m")ܢ�;�z&Ƞ���ES�]dU[O�q_$Mޛ*u�m}�Zͺ�*�g����.{M"�G����_7ͻ=���ד�=�̋�=a���;	4Ku�U��%R�
��_���˝��M���dc�/�=�*�߿�[wo7	��t��9π€AQS��"�yQI4[>�����K�%�D�O���YЦ���/���ߢ�'葀wL�Y�%J�-�;���s���P`����F�;n���R�^��5���M��[.�f�*h��
:\u��s��7.��lt��fwB��$���g�OD�τ�2'�wR��\�v�{�*=����i6�N�w���*�"��UҖ���2�)J����ȳ�ZQ��s�Dju��P�H{v�ށ�(#�K�Bv�2��Or�"c��}W~(?�4}��%o6�TUn�,���& ��X��a��v�ܫ8^i�8�q��$[�L���ʷ����E�|�5.���d�@B�6������"U��LgE���^ޱ�)墠T�0|�n�[�բ��Q^��M�����Q[���a(�ԇ+r�׊T�nMEN��R��e�ec��"~�����
Q=�9��K���B.;�_#v�;�9��ۘ;9B�npՎXq[:)d�Wj~ž�g3�\qo�(��كVS����<7K�jE:��!�ݵ�u�����"�"��i�ԫ_VK�>J�����+���Iu;��XЗ�-�Xjh
�9�%�y��A��b
�y���+�*".p��{ȟ��[�2T_,"
���7�Fn�i��eD�o����u?G������j��M�!��(���2c�",��x�s-���K#^��U*�`�X��)�R'��?4ߋSY���qpt�Z2�3'ϧ�QZm�~�E��Gh�r��~�'���]?ˏ5��;�7�N�$�-���#�\�a�Pf~y^�y�̕k�B�A�hw0R&�$�C���U��]�0μk�*�3��k�������*���n�a�lv�T�N�U+�7��K1I���,�G}����~Vh{�˙e`�N�h�f��8E6���Ю%�CV=�����b�}�U��4�]	q���6����H5��J��.<d���&�!'`:S����̙����`��
�Fd71��C����vǦ����P��*�KX�$bU�1���2���z5m��g��>\�]30�
U2h�6��8�?��(�FV�&���~
��`�k��KG�|�
볅n��(�t�I�4d�Y[�D��K�N��/i�]�}&-in�f�1�$eŖ5�˟�:Ê[���q�H��i�&�4�-�2�0��o�>�	�F=��8���Z�/�%���\?��m��=�Xݹ�ߢ���/��-k��,T�Q�����GJ��/�=gu������P���P�%i�u/�W�{��s����x&b����Uk�^�%YNA�X��4œF��1�W�B��Q�IA��F��D�F�U	)�Ի���?o�7,����i���D�Z%v2?eb"��]]k{�n�,�eћ��W�B��ա��}U�b��P^J���6ն�̾��������ߪ��'��9��Կb�$_�.�)��q���}K%��͖A�بR���F��ۢT�g��h��1R�i�ҎSV�����[�]�ϕ��,�#����q��W�%��9tEYHM�FC;�_�;)S!�PÛ�ɑ�b٫���zA���]
��;��5n����
6X������x�(�4l�8e9~ˑ��g�uCɼ�s�n��ĭ�6�_3h�P�9�M�3o�)4�ڔ�}1J���lG�~�P�#
١�/������<[c�l�n�����ꐜ�C�{���u�ӭ�Vgzɻ�V��>ά��<R�7��C�+��o�7���oʰjH��o���^�{�<��)�]�	y�
��ݣ~g�D�B�Ud!�V�r�cs��{jYH�si�opC�JD�� �W�x5�
n�hj����
~qj{*!���	6��Rq�5B��6L[5t��{�����&�tיnXc���^�Mc�ls�W����Xѳd��.G�"�՚f�����+v
����:�!C�oQ��JM:>6�=�LR�>-�=��	CPL��hb��}��7t���8����[�|��'"��^��s�`��k�D��I��jL��,��~��.#yL�C�+�&���˾v�����&ߴ��^׹sʽ�5�0��`ۺ�ݣ~g�M=�>���AҶv�qy+3:��Բ������������h��\���q�.~��
^�;ݘ+r�-��hF9S�)�)8��zrU�&-����=�����}�G�`�k�p�rG��~���t�|���c(q��b��vR�8kl�V�e7T�ݣ�Ė��'�̅��"�Jޣx��t|mJ{>��~|\#b>������l���
�I\n�b�g�ww$�n��HNE�޽�V�;��m�;�O����;
g+Q�k���o)��<W�
M�C�|�Vԑ���ib��r�z%<k�a.�Lw_�F��H�{$}�Wd��l��wYL��g�R�G�Okv�A�EB+�}�c�r���X���a45{�v`�� �GlTC-y^m?�Gzǩ�
(KZ���N�:�ꓪN�*j�y.�T�g1��w�Ȁ�@ ��"�(w���lXU�5g%/�Y�fd������PL>�F��K���,�׭h�i2mDݎ����fHM�2�w����[R��<��?t4pS��k�#5W.�@�%������2/�W�<w��G��R:��,���)���+ʾ����6��)J���^��m7
ܥs�ׯy3�I˸�~�Y$ڞ(��z�2�ˣ�r�r�{>���������o�ҟА�~��g�оK��	�w<��/��K����)g���J)�>�U�S��w�w��������9�o2�R�%=2}��<��,��a�:%�{�Ӷ�AC��-Ƒ�	%Q^"4��w7�,���GR�mM=U�83C�RT�Ic�UP�C>1D̷sHp���~��ⓛE��
n����$�f���/�
v�}C�-h����kC����Q_`�߄��ܩz��:�}�Ym�ͺ~����d�;�9�f��1�e4�y�_�Y��5�c5�MM���{j�|�{ru���F�?���#P����%)�$�#A�Jg�R��[��ý�5:L�f	���&@}���޶���g�6%�bX�z7�! ���#�݂�b�2�a̦���c�_��H�@�3w��������ec�j�2u@��c�3����C=Ŭaԓ�������MZe6X'�d�r���h���q��g�B
��5?j>S�R��(�et�sThPiU��F����T٫�����3��(��v���߿NV��u�#Fj�E)�4��c8J��ȅh�/}۪�;a�Cu F��Ԭ��d��
�-hJa����j����*�+)�E1D8g��(o!2��p����K@U��-7�8�B`I�Q�#�B��'`<���ı(sᣜ8	����v�t���E������:T�w�1��e�
¼�L�Z��|(�?���M�ػc��0��7�>�9�k��u��~a3���iʹ���4�a�V��jD�Š�/��%6���B?�ׁJ�F�	5�Аr;�T},O<�V����w�&���:���blL"\l��TГ	�WdT���
	�ʅ�с������Q'!�ܻ�O㿚UQf-�움�S�'J$�%7B���s�xP9��HN�����~Y�~��e��7�?L����t1h\��|{����~գ��e�͕=��e�8�����s"��OyH鮭�Z����V������Ng��G� �q�o�HQ��E�Eu���W���2W>�n�vpB���3��ե5ܮA-��"�X^xׂ������d���Ih]Ruğe�bJ:<�X
r�쟥���w>�Ĺ�Ƣ<�1�4��d<������E/����%�첥����yd�D�_��P�C1u�
<�Ċ��
O�a�_�kN�1IJ�����p��>v��3��B��3��t��2����-l��0E��,�ŐETR˙��{�GMuo��Զ��x̲	4b��Y����	� �q�o�HQ��E��WY�W���2W>�n�gg;��3��ե5ܮA*ۿ�5X^xׂ������)�(�ZT�q'�u�����	`9T�O��~n��~A��B�IN��7��~X���E/�����������'TD4�C7"��1Υ^y+�RRI�,=u+��iݟ�))RΞ��|�@�1�=��Z&1���<���>�'�̴y����Z0�4qAQK.dR���)5ս���-�!�2�$�q�C���eg��G��
g�����E�Eu���y	>��%r��n�vpC���9J�ZSUܮA-��#U��x)A\K����d�'�H���j����RNO@��@�d�-���y�^-�.���A7��+&��:P��m�1(�[�o�:���S�Aސ� �b�^yk�����<?uk��4�c�SI,���|�@�1�=���rc��:Cw��V��o�dl�Y=��e�8�����2)MT���鮭�Z����dh8�!���Ng��G��
g���HQ��E�Eu���y	>��2W>�n�vpC���9J�ե5ܮA-��#U��xR������d�'�H���F����RNO@��@�d�*�~n��~b\�4�;EzDe�\e�\e�^t�� �pWJ��B�v�&�;n�P�2��T���8����I��\V�Z�� �q,*c�2��ȡ
�;_ɭZ].�W�բ�Rh�[6��v�$�0Y���7�*��8�xa�
n�,o��f�sQG��X�6n���{�%�k��c��7�8�Y R�K��1�
��[�ަ���1�M{%��{NI�i"�ef#��D7d�X태�b��;G)�"�"�a�L+�J��7���I(u�:�<p�'e�Ye�M$�bA��G
�҄5M������JL�!@XExMq�FL�槵>ug��!4����"�V+�hl��ު�=�.�*�ҥsQ��(Xݤ��R�r��-�����u�$bX�]E9��:�U�v�v|��������_�����E�!O�؄/E%v��)�ͥ;5{�)�a��������,�	�6�G��|I��6�V
��?t�+ ����57Q*�r�{��1�S
�Ql{���)�heD�R$�%$CsIaT���H�����[����BjM�ȗ�4��Q9J|��bf�F��2�B.��ʲ�6�ԕj�ʀA����Uԣ�
�B�C�8��T���<�[5HGg�B	������L���ڳ���F��1��SZٌ2I3Y�(�iFm	v�:��6_����2��x�O�<C�vs�~ڝ�9���:���S�$�_��r���]���Ғ�9T"u���u��J�rV����o[>4F��f��o�I�˔B@cq-�tsm��>��>��:J	*�Z]��e~���z�
Dj��[p�!�֌!m>I�uE���g��>Y�F�HP t:B�V�H��h�?�2���E��CO��
b=9>I ��&\�=Կ�?�7�(x�~_<\4L0�-�󻴒��[���R.�?���v��lF:
y�_z��=�BRR+fBF��5�M`c��-f��a��eC�U�s��߁�&�V���rޗ��4K=�x/���JW>�����HNP�$��/T��g�a�^�v���j��je�NY����DXߓS�&�.��2�o6A��u�̷��AH���k��֏�u����"�4c��k/
�_GU�x��y:��f>粸ֽgB����!"��<�q&��{��8P�8}6�zor�t��-�}��W��T�=�=�U�O"_W�)�Z��"�a�fI�c��i:u�M�e�QB�L���)���p�����:��0��`�g8ֵ')rV����ѐ�)Z@c��C	@�xB&!h�Ff���Jer}l�c}J�1�֥X�5(�FHM����$4�X�%�sHi!�<���F�4�v�`B��>b��� )��NlXr�E�%��:��~�����r_��7Pmhu[���y��<�r'��F��*}�
�4=)�@ͳ��"���j$�Ss���;v��8���Q�8���r!RnS����|Za*�����y�g"	������	c��!y���CٕJV�Mu���
�d��6{����Kb!������'ܽ�*�lW���fx��Vt�MYt�ϓ	n�%�I��F�T�%�n��k��`�C�&�]�"7~��@&���A��<k�*��c`^��R(d_�����F��#�*�}���@��G����[c�$��a�x�7�:��I�W�t�r>"w��c�����Yd���Y�aOҞ'���_e��A:������v���V�b������	�UF�� ���{Y��F�-���椻X���.A����)��__�~T�� 2�N�Ҭ��))�Z���b�uM���K~W�~V�]Ր���;	*h�(���
`I�>�4�UR02�ië�
�M@
�oʵOz4��0�!WL-��[T�-�]�5�!(� ����</�CIK^T�"n���4kKSO�c+j���5���G%���9މ���d�!u]�o��MZ��c��yK���E���l�zg�Y�Cbw�׻�
-Q�j��~����P��c��eG��pɨ�ṯ]+�5x��Z�5�(wxB�(!��;�>N�}Ŭ�e���)��8��~�+�O���]����d*6�hw!&��:�0��S�#IEU!����2�iëĂNUP�O��|��{��S�P�L�����j�ž��F��%n@'S���g��b�)kʙ$M�U��-��T��ڦiMm(����k�w�uA%��$�]@m(/��6��X��y(�R�Vm��.V�3��!�;�k���i����fq�S��(qWq�2���d�q�fK��!��K�-W��;�d�5C	�Ot0ѹ�z��Z�f\��)��8��~7��S�yO)�5�tB�4���
;�tbTEa|�IhUR02�iëĂNUP�O��|��{sP
�2@J��S-�G�.���	E�N?s���!�$��*Z�'Ы��Am�"����V�3�K&��P�䴓\s��	-^�&C.����T�o��T�Vx����շ�<�Z� �γP����w㡦��ՙ�Os~�]�s�Tʏ��Un��+���j�/е^k�G
�'j�����a�r;�Q�7��q-q~�M��hU�FJed�U��]��e���p]�^��c:Ж�@j�m���{k!�1rȗM����l5�ⴽ^��+1_N�:^��eg	�U�.M�"��B��NXd�n�~^��m����K�uuԛ�^d��Vg�]�0��c
Cn�3��X��/u
�ž��0ߢ �;��̵a��Q�>jsɽ%b#�E���W4��Y��%�N�fz�l
㪄1hjɬk�۫*Y�K���-5�$��t/���E��&k�jx~$�J�h��ًnpꀗ��Y��L��������7�mu�[fX���X77��
썯�rє�#�ؚq�|�E5Cĝ͚�:5�/�
�9�E��&�£M�5��e�p�m��o
���ky�z"hC�X$��'z;�<�O��,&@���;&�Jku���}_dޯK-�����S*�Qlp�>l��ݛ;�K0��p��U�G&�\��]��� ��
�zWm���i�7c�ЇI�d�����.m1�C$�A����H��DD�*��z]� �Iu�bB0���O*�t$xƕ��	��ڞ.(e��)��C*YM�r"A�P���XX�Z!㍦p4hd�j�T�dj�ԩ9�\Jo�e��V8���OSf`�hJv���x# �J�B,�g���CG�Y8D�o���\$�a��5��n�u����N�aN�x�,���&!�&o�V��F{�U+Um"��Z9]��e^�2����F�c�^λ"ԩ'�2aҖ�&���(��l�/��h��C�,g��ƗGXW�S"�j%� �\"�@hk��|��Ԉ*6���n#9mbaB����Z�	��$�y;X�y����*�5׫��
��-�W����y���y!����%D�q7�q&��X/��Y/���6�l��!/,dTb�t�K�_+%�Ȋm��
*O��{qS=;���x�,
�Ed�iL�K
�7�t!��1;���|vAN�W2+�k���fT2Eǡ���5^s�:��>�xJ�Y_:�oa�۱Qi�o6s)��m�����ĺ�"l�
P�V�^���3�HO���~�g�^�o�R��ؘ�x�$0���!TL-�
�w涫<<�#�,��ϒ��ϙ�$�A���i�$�[�вf2H�Z; ���+��=/1�)t�5JBJ,@tz\��_T��#s�3(�qPճo++�GV瑩*�j|�w�f ��)��0Yۙ}r_�ۛtӳN�{��Ӛ��(P0e���x…(����L�t5�n85I���P/���9�߇*]���XDҒ�U!�S_4�x%ھ�(�]l@�J%!�V����S�:\�f�}T�סޠ4��g�h�Z���kܡ�y������k���M�Z()  �+��c5�b
�j&��2�K�.�w�6�ߴ�$�4r&Ԫ�Mh@Kh�@�5�������Syj�n]Ӓ�=SM.D'U�����'�}��;�!5Ἐ"��!\���W[lg���������;����3��}����*%,,�OX�~37${�=h�u9pR@ve��r熹�M^<E��_t��{'�VPh�x?yr&�h��"��"�Jv;���T�dW�_,%����uGCGXsޖqU����H������p7�r#$q�̠(lQ���4E�3^����%eM�3P�"��Fl^s+{B����	
N��2#:�[�����j(��D?'SCV]�������n����!���8 9J;CP�2���َ�|��)@�*$�oVs\NP�.�Ed��O�� <M��Y����̴��"�D�z�FY��a���gQoZ���FF�r�g'R�7$�&�N�]ՔP�o��_dc���$���v�S�l�Ћ]5����k��as��uc[��;p�4�j��\JBl���$�pXҔ�%aP<�d`Z6�}EГ7�y&�)H0��G؜Z:�����|Lc�K�X����P��w���
��O��I�JXT��(*$$2T��	���ctޗ�h����t��Sb'P>H���sAЃn�=�D~)t��ʸ���1��7�h��p�b-WB\���(�Δ�IN	7^���r��/��E�j��mv"�}�9z��ɸ����кդS�ϙ*U�F>���`
5�~������[\���6�E\b�	ҵ�~��k[
sO���\JBl���$�pXU%D� y��(�mP�.��f�rMFR�.aC.��8i�R:1���@�i-�5Mq�/W��r�	��G�u�ĜԘ���թKV�+�1����/��1!����6��N�2|��R%�惥m��uM1���WU�J�!Dzpi��N��"\Z����4i�jgJ_����Q��9KR��c5ԯM���dX/��/R_�7V�#�OVQC�J�}�����X�Mkߧi�6:th��4Rن�h��C��:V�o�oK<��\��-W��5344��cJR$�:*9(&�JQ�]BL߮I��R�(d�bqhꆂ5���V���<aC��*��B`����,1'5&%nD$5jDDRUH!��ictޗ�h��ݞ��I�Cb'P>H���46�pL�����|�M~U����*@��&�sr��Ik.��f��|�
�ҟҧSs��g9KR��g�εK�k�y2<m0�u)���I��ۉ܋�����T��}����<k^�ӊy͝cZk���2�
k�p�?��'V1��,�
sO���\JBf�L�K��)H�`�|�䠡E�j��t]	3~�&�)Hs
t}�ţ���|Lb���KL�/W��r���nD�@N��ĜԘ���Ԫ�	� ,��ce���z_�$#vz>�&m
��@d�R0jD�\�t ۡ�2�czܹd��J�[���rA�5�S�WnP��ӕ܁p�X�4@(�w/��ҀP^6��y�+:lGT�����\��@C�p�SH�Xf���r����)�9��*c���R$�x���E��g����ѷ���2���F��T6��{v
��)���&�i@�X�9���a��CRs�oZR��9����EX����	����#R�KQ%�n	T��!�#�o|_Ԋ�?������PG:[-HxF���5�ШīP�o._�l*�5r��og�d��"�@ש�6���pԥ��h`MM�S��9���Z�?��#�D"R	�mI5Mi]ٖ���;|X��	3GFG���ƥ?.Ո�r�u9%"'& �B$�M	�ؒ�35�n�#�V�/��[�BI��D��u, ����S��$���T���r��6EҼ'k��z��;���V]��S�P ]��O�ȃ �lF9%��f����M����w��;M�RFI���g�l]����nlv%ڱһj&��hf���7~<Y��Rc��I����G�)dj�B�W�>R�����(�D*;U��vr��_]$�L�b�B�f�`�NO~qp[x7�JM��5IOˤ����&��q��KҰI
��P�z�N=�������
��4�h��x�F#�T�\�<��;��g�/@��P�F��>�X��	i�QB�<[�O�Mn̕KI��†Ԑ�a'Aw���̨��O�pߦ�_|����zD�|�&D��lb0�IgB�h-���6�T�҃8�4��R
��[*1|�"�H�-L���b,u^< N��e��.�����"�H�s.bNˠ�O� �m�$�(�-��S�*@��@1	O"i����5j��K#=�Ty	,�}\2�)�uSP���tS��	�hI�c�̅Kh�+�?������?������?������?������?������?������?������?������?������?������?������?������?������?������?������?������?������?������?������?������?������?��`O��O��r�Y�klKı,Kĭ��=�6f��A��Ւ�t�k4�Z���v��h-��@��>-s$i(����&�+�D�I�}B��q<B�B���gr��e�wM3[�[Ԧ]���]l'^,��>	��g7�u�93>�t�y�<������u_۽"\����/Xf��<�W�߻�3�M_*ӄv�;��3
�&�
5
�j&�u�NH�Y���N���J���3Sj�V��1��	�c�B�
�{�"�fV"��Hm���*�"��#���[ɣM
�2Ra@P	�	E�����B�Hr�ΟZ�n�X}�6;���*sڡ�1]��4��H�-��`U�����"Ϋ[�8���a$Ս���^�%�"�	��[>�X��T6H�;��ɥV��.{�h�����O�'B:�,�޸�)��Q�0��
/�e��l�t�O����U�:nV�5�����L�+�9�H�XC���B�A��dϔ���0�U^ڈ�X��6e%u������V���u>j�ih�v��U{���FR�԰��_��«��7LC݈L��a�NʊH���F�z�
D)�B%�"Iיc���w5e��p�E{�d���<�C^�ԄT��rȴ��Djo��{�.C�o>t�䅏ac�i����6�XL���۲ҡ���	�&q�'��u�!�ꅇ���Rܫ��i�j�U7�Ǖ�ky�}�L�,�����R�:"�	m���Y1������b<smrj�{�j_Ӭq�pS���s�K9�Ē�K����֪�
E�N�������������t�B��K?v��b�����%(����b|n��s�z�~�)m|�]j�nX���$k�~`4ët{�;�l�]6�l��,C����0O`�r,��)�ھ�kr&�9YTv�(�+PB�y��M�7<�W���*��ݦ`�X��Mɇ*g�81C�Mӹ��!q����vŗ���7
�sN�D��a�FҲ{Y���=��.��
c�:Yox�o�o���
0�r�2�?e�%��T���{l�^��C׿k��M�M��V\���Q��|��������/���?E�b�0�x���8x<F��PO!�E3���kt$���b�*��7nݻv�R炁�����s�Ɖ4��E��EᕮP����-B/J�:y�j�uN�'B�n.�̔�!�gEh9:fv�~�N�����P����/�K�PD��ﺕ�T�5j�w��G�ݨ?�Cb�v
��V�o�Q���O�
�m*̦��^�tW�d�Z��{ʊ�'�mGmkSMacAsU}W]kCf\,�R��q������I���W��S���7SZ��kZ���/�4��{���g�׵-UŝE&��T�2��u�Myc�
�D4x
����_��S%T�b��7?P?�"�(�ַV��R�ޔn�:f&���bo���
�F)P��P2I|12��%�t@���5u�V��v�Vv��I�E+�:�Ǐx��"ߜ�_�%|�*ΒN�q�;%[��*���Ώd����{�]:��te��l�Z}�v(>{;>>qya�ֶ�����c��]�{U��M�E�'�e�R_w>$�vK��7�?�5Եtu������E��)�xD`�E�*(�T7��f����I
����.^�z�B{�[�5�ʻ&B�
d���m|7�����dT��:���E�19l�oJ�P3X��7��C[�ɇ܂
�	|12��%�t@���5u��C�!Z�X I�O	&����/�,`�r
��X�c:I8R��d��V�d�[�W:=��i��Q���N�|�m�+��i��ؠd���ϛ������W�s����>�*m�-1=�.�����Z:\���Y��������Q���۩�.<ߜQ⹋�GcVؑP�DB��.�5E*~r������p�
�_k�S�=�ߝq�&U�2�S*UI�+`��7H���MO-E��\��o*�r�-`h�A~P�C[��|�`����*U���Y�H	<#�jw~Q�_�/U+0(����!Z���=���� ��_;���1�I8R��L�o�J���s��)����Q��t���r�[-�o݋i��s������ŭm%e�����O�Gʛj�LOzغ�K��Ė��?jo��k�jnNc���m�ڗo�(��\#��lH�\�!Pޗm-T�Ҿ��z,�p���S�=�ߝq�&U�2�H�2UI�+`��7H�E�Q�i�R��j1�d�xh �AÙy��uX���N
	�QN��'@f/��t���b
ɺ'��jw~Q�_�/U+0(����M�)_a�f<{Ō�A���op�P�t�p����*�l�K}j�t{%6�l�ݺ��O�
��b�Z,)��� �g��͍��凋Z�$��������w��V��6�i��YuT��ω-.~�߬��FzVnNc���m�ڗS��h�'�QdBX<bL��'ܵRJ�Δt8貮^�z�B{�:�Z��9�g��y�:�Pi�(֧b�Ǽ�����xB%q�%S��q�M6�a D� �6d}���-�lu/��"O�!�vŒO���^�́�K�T�-�%Z�d1���k��=:��.���׊0mDma�u
d��(��G��p���Iŵ���}u���l��+��+���YF�U�y$��q�����c��5#9��0�V)�~���@ָ3�5�:�i���
�[�q��e@y���Z�p�Tqe%��s[�v��z	�E���?xr"���46�EL;ɢ6z*��m����i�Il�������������"4�ȕr��ť���2�����Cr�X��ɡ*��o�l4eD�P�ATK)�z��׿�\�{��&m"�9Oh�B,Ӌ�VJaeXs�by9Ǖ+��3���D�y�ߜuʗ�����|�t�ʷt�����ߚͮQʳ�<Ž2
[�j��������NԶ���Ė�u�qOe����k�r��Lf<�h���Z�u��kV7��7@����'}6TU6f�՛���I�:��FRr&�t��
E/X�~��ٯ��\��ޢB�[GbBڕXF_P�%}�T{����0@���f��v#�)R]bH��'<�I��߫�4+�<&�՞�A�D"�b����3�$ơlD�V��k��va
|�}�?�`��6�1��\��r���
/^��T��韕;o�ӊ�B�R�,y�6��9�+�{�s�{i�۴��<
�e�[�"�V��z���.{���ԇ��G78��3:�O	�	����+��|�^�b�;��cld��R`쀭#�U3cy���½8!0��5C��#��D�BUJX1l���"R²�7+>2��b|�j��"Q9#�
�a��Md�(D�ћc¤a��n�
�o�'�l��ʹ��B4Y3t`H���(���w./���-���ҀL����R��5[���X�j����'�E��v����X�A'؃ݏ�9k;�����w���v����&�V�ֲ�~[��md���ćt��t����̽�,��ln*-3!�m!h=�pu�Jܩcl����1�j�XU��k�9�˛�`o�&v�S#�&@�`�4��-W�/�/�;���E�$)�N�[	���|�h�Z��E�ŕ~�I�5�M()�K��E�A�s�=%
�;�q;�/����S>|�ܰ�߼>KW���A����iȈ|5�OD��}��7C��I�Z��n����[�Un�b�+(Oy)����[X�e3Z/�%�����4Ɯ#M2I����o�m�{��íFI�+�%�/���}�����=�7)��}�q���]Ca��t�+�5�W^y\f�Kd�$�_�
���S�ގ�d)7	��,I#$���ju\�鐦J�:�l�n��Q(�J��#��Z�U4��x�р�\�ER�9w;�Rw���%�[��h'a𴑂aN>#�(.R�X�*�|�oZ�l>[�#��x�^�OT�V�Ԟ�/6I̴{�)��y��\�ݪ��۬y֩��YNא�7>J����?fT�ML�_�>�xN����D9�'�$�k��]�tƞ�t�U~)�P��E��;�)�҄�-,�=��y0�2��r�M�9+������N���]f�۰I`~���?�Ӻ���R�U�O168S�!�A1H���f��f�h�DyQ�I�.t�Qj[-
����+�OJ��0j�(r3q&9>��m<�x �Eb=�X��OI�jY֬���O�!xc���d��V������T�Wȁ&��x�-��N�_ޭ��|�n�+�L��7�h�ʝW�{5�_��}�rvԕ�ϚF,.}��"�/���_PYp����R���KB1�+�3�Y�Ô��O��^nt�0
,G{yM2a���qdV�Eu%����V����a"\���M������k;��kk�ϑV�z��ઔ�
rg5	]��]�$H�������~3ʺ��$.�@�}�z�(�|o��M&��>QB��kcx:����L�I��)���a(U�uE��5�WAP4M�cc�n�G�����ɚ�QAy!e�IS�ʻx�Od//)�s�C��'����3�D�I�~d�L;W+P����'u�T:��~�;"������;���~�����˿?Z9
����*�&y\e�_��U�L����I#�P�@b�W3�H��mn~�Sq!���
8Ձ��+����S����)@jAk;�[^k���[�[4itU��V�J�꒤�~g��p,=�y�+oݿ��^r�7�Xs�/Y��e�(ǧ@k���gN'/;H�y��E{��4��Pi*��Qq.�No�cվs�U~YG����S�:���=���$a���b�5n_�SU���q6U��p�%����Q�[P=�<���e�T��-�"�[e^
�u�]����kz�Ui��gBoXJ���i�-��"R���y9*p�r�2�r|�%���8|#E���ow��k�������sK�|re}�d`+��1�����F���Y��F�����7����,��
ճ6��/d���ISD�A�A`q�ȁ��զ%bx<�Vpy���ɘ,F���^ ���:a0:(��j��P^mG뭹I���i@�%�4=�2�� i��Qm�=��l��J�;�(��t�:�8$@��0w̗�"{�ڶ��-uK�a*�jё�*��^n����ڎ�m�}����o�^�/�ܴ��wo�V���Q���4&q��Jҙ�.p�%~��N�0�¿VY������b5:��4<B�R��?z9s��X�_�Z��^X;�'�ܪ�U�'�4ˉ,mM���")@�->�����Z�/���zR�ww1Wy!1�Y8J6#�u��]HZ�s>i�#X2�O���ث䮼��[��I������#d����Y�W��&1ޢ!�w7�Yc�]�o2g-΃]�����tϮ���^�=c��mm��O6�8�z;ڻ�e]����Y�[�y�
�?ю���C#�J}�Z�
�~s����!H۞�/���u�,ǖ�Sn+�o���f�.�:Еo��I����0�3�5�8�p���l+(v`Ǣ#�}'iB���<�F��5E��ED���&���X�2���ϭY]��c�P��N����ǙЍ�Q Vuĵ��t9gfS�r��T�\}EB6T$�:��t�^D���#1������4nšR:,km�y�հ�`I����*���ovt�1'�!@��^�4�Y�j����wJ�S�g�p�9F{O�C��fh��V��B�7@:PI�e���`���>؛e�Y����<�P���L%n�Fpb��(K�+ط�O9j2#Lo����犥�*!(�9E�DD���+�����gdU�_�oNm��H(ȩ�j���Oe]O�c,,���R��.q�U8�	��;�3��j	��f����z=[��Mo��Y{fw��UT�c��3��d�mΪ����e�y��wqQe�8,�O��R�.{��Zn�K��=վI7��ұ��ͣa�?t��(��o�?����g���`��f�Dr[������J{+	(�=v!��KgH��-�1Cܓ��;tF��_�� B f�CzA���p�E/z�=m��w�{�N�cԽ�MG�3��tB��`�Q{Aڡ�>\s�9��u�b�
T�UI�'T�RuI�'P�'�r�r��[=}&�Hg8�^�v���=�g�p��c�b�:deyО���8����88��q��PbQ|����v�W.̵p��}�n�MvI#xe�0}�(���A�]:���KyM�l�C5��Q��f�SJ�m5�$�)�Z�zk�UQ����r��M���42nW�����T�^����8kH,C=#�2��yW������r�^��Z�؈��_A:|maW
�pՒ��Xy���J�n[r�B�)�~���)aE�F\�W���I�i��aw ��T�Z�c�u�����CL$�Uuí�E��ev�E"��G#��f���J4�=�/�
�h�-���
zhm���D}�M�f��͸�T�@�S��ށ�a?`(��i��>�m��T�0�
���t�{_ �]!?�j������ _�<��!]��ěÿ�̖����X�YB>2��JKIٷ�\Dp�s9+cӝ�i�H�L��ۥ��n7��M�Q�۽l�#~����-�Q���b;�]Р/,L|��g…��ƁfT�����I
(̈/E�+�⸮Z%�!�(h����X�H��L�������wQ�cE�4	���B<�"�O���o�d��蟢�HU'mw�(��4�T��T�S
w�O��o>T�:��:�V�}Tn���j�q.^��;�-F�e���m�������ek����D��dT�=הuT]m~�W�Q�V[�zK�J�������u��5�u4�N"�c�u��5S�z�v����V���Q}���Jh=�K�QO�d�S�u%�C1_��J�0@��(Iv�BFd��O�g.��_
�8����
BJ�z��$ֳ�AU�P���*�����1Z�h%<g�,���R�-D6Z?=ա,t���me�ť�ʤeߗT�H{�'5�iG�(��)��)�EOnb�H�d}!J�ݖm�ZU��j��Qlw�h��oS��v�-R�`��}�؃
�k~5�vv�]-�?T��Y���~���y�������C��d=n��Q��I�ͅML_��5���u��Z�UŃry7 �	!�5h�n��*�PP|�5��š�kK��/����#.T���V�{F-��v@BPRa��vɵ�H5w(���5��ۃa�B�h���A�>@gk��X�z��E�j ��1�i/K���]�Z]��F]�uJз�Fn�-(���>{�3(��|��6�̏�)X���ͺ�J�T-W�`����
�u?���e�X��]��a��oƾ��֫��E������w��yڏ>����6e����쇭�9�<�)<W՘�̄�^�XرGZ[uM�J� .6��AДD
E�����[uUQUʂ��7��j�n�3H֗��_<7�L+T��e�U'X����[7x��r2t3�7y��
�)x�h���l#D1i|��h#�����
��ܽB,r�6ь�Iz]`�6��b���R7v^�x�f�rҏZQOPS�]3(���]�i<�B����,۪�J�T-_V
-���pާS�>��"8�!��� �g�ߍ}]���t���S_qi*�_��}v�����1)_�[�r?Tyjĥ��1	�	��ư�b�6W��Up������	!�5��jjbj������!���#Z_��|�޹�
�ϑ�%T�b��1l�{@AHIPOX]d:�`5�P��m5jKu��� �G�%h���;_���R�+Бl�0��s�Z%��b��b�Α��(�ݗ��B�!�\��֔S�AO��L�*{sh�O2>��b���n�ҭ�WՂ�c�~�7��/���"Y�GD5�}dl�[�;Z����k�-%]��^[j<���W��f!�+�!�u��~���_�¦���.��?b�imּd�
���="��HEA-Me;����R3?�F�n�3H֗�����'A�LK�o��o�K�}$VM��|@b�R`�d�y�Y4�1�`�0&�(�"F�
Ұ�M�;�T�:6��{?(�<I�ߦ!�DDh����̴esS��(�y����_n����@�S��A���kň�"��.�D��$ߙ�nQ�;��h�5�p��T�:W[��r����+��5�t�L�H:�f�;�obg+��oQ�`��[���N�L.z�<Ȝ��.��P��a��D�+�AX8�����k{{u���B"��C���o{�%�#�jS��I�e%F��W,u�i K�xFEd�t��%eU����&fV�9�%Y
�)�ް�?��@��C�M�� C�B�<@K��=���{��.���#a�	P�8O���'��
��ȵ��͢�>6�0��eq	��F�i):^
��R��z�Q��#b��O�:���Gׇ��W�S��
��b��ӼGB;�s�O�W�����{����C�����?1�E4����Ho�i�C��øڦ@��*��VЅn	�W���٩������N��O�y�{��;X�	�F��%>�WXi)�Qw�XP��"�݆(�-.Ҭ*�.2�(N%yt�uC�Wvĭ�S��N@�_oA��� ���;EA�H"}�L�[i*$x��JS;��=��A���#4��zͽ�1p�	Kk�EQ^�������U��E���^���K�C�ү�!�[�k���aY�a�'���Oq��b�����.�N�,&Yb����ABh�.,,�XO�����G��}�2�����4���5]�*=n;�1�V��w���x�٠�Fy^IJUٖ�Y4�㕽egr�ҳ�����v6fP�T�2
��ivaV�q���B����h����.��&�A�=��s\/|�;��D��NU�1����$�����
2rl
��h���7�UqHQ�!0F���EK��A���2x�����}���C�Ǘ5�3�E}�������C+�5�ե=u���RO�w������O]iq[AgMAw�)�c-�:�2o�7���q^��UC�㳓Qyi�\�</�}eWq��v�W��S�±���_��ǽ��֯1
��Nkf���}��0H�(.pT���ɬ�ɰ�4��ˍ�t��s �Fil���F��tDmuS�J�R&`�aR�<���.��H0z�9��{��
�Q�\HG7�R�H��Le����p��!ڎq��Hq�;�S�ΰ��yڻ�@ױK�V;꿸��_;%s
Î�	�|ƖMQ+��q�1�a��dҿݥ=kj�Rn�i�ޟ��|������P��}�|�E�Y�u�e�O�����ij-->���v��m���X����e��"3'�Fp�OǂQ0�X��.�[%[��sH�m����SM6Sa��bX�,��d<��<�E��ܜV��@!��O��LS�����X���f%Y���l�ʄذ0�ås"�e5}����by�ug���"#�M�~.�����T��>��,�<��)�@X���O�VƟ㫛ڹ�$������ڊ��HwȤ��6�o�����,G�Cg_])�1�<�
.�~�m�g_���k�­�z-�Q��H�{�]��C���=���P��(�0���i��i��-DmL�Jų���}I��hi��#�ANB�H��ѥ�T�R)��#O�F�[���h0�k)��@�Q�FfgK�T�K�*V�i�ƓŽ�zy��cO�1�jh�����{Қ�?��}1��@�&Ud�,�@�ߐom�ϊ�~��xڨ�kEӎV����=�xC4��B��h6�5�͢��|S�'y�d]f�$Z��MAoa*��c�u���-e-���,�9�'�{�A��j��V�U�s�#�!�w³]Ϙ�ݹH�0��*
R��R'��v���{zB�W�)�9��k*Z���k�T�N�%o�-�7�~О�����������������������������������������������������������������������������������������������������q{dgw&�&����M�*&�.oe�#VP��p*��f+�o��?����d�A�>N�W��M��!d���d����b�O�?�i?G�X��{Hi^�@�4�(��|�q�I�.s&�Z���+��J������^�-65x���ׁ}4,�@��z�$��J�(x�
t�OX�%�{�;���N�HiG�/�z�
<���j��y�?�kJ��rxK�ց^�A=։�fT�2[��Y�+)����]�����Ml��s�S��#�CE��ڃ��3ڱ������m�a�$�u��,�cB5�1�	��TFl�–
�7x��wS�'��o�<4V1����/
Bc py]�p��S��W��z�:�\Gc4�qJ1��B��B�όd�̷�9��5�
P���\��AFl����g�(^���^+GR?��B�G���\�b�
�n�~r��@'^�ց"Bk'K�A-e�'������t�+�ei��ߔ���D�̀���׷�A�m����H��S�9/ �rċ����c���n����&a|k�7����^M�� `J�o�t,�6�4�k0�#Ba��<!yä�C�j20
t����K�R��81�蘧pLe�@e���U��\%(��x��_v..>���1*�U�D�U��M�g�MG�:�
I�8�譗1D�6$쭅�#���lC���1�@�Շ�
J�]���
��a4y5�,�H
o�i���7Ukz3���Z�ϕ��1޿���Z$KQ���j�+�����G�ѝ�s[��W��3逶L8�*�E���ϫap�М\�c�$1Y��kIcW���M�HD,��kC݃
�n�Q�Mİs�U��ll`J��#���<�0�E�6�,EдÐ�q��7���v3���prN H[��	�y]!�N��!���%��†��G��"P��.c��W`����R(D�t�(�M�.�A����Ƅt���[?�~IbX:d&���LH�u??j��R�����a�M��1B��%���܊���inj�W�,�$���B��������d�.�ʼnʖ�9B��������7��[((j���0~쥱y#�������(�&�[%ऍX����ʧ�/9��T�9���o�gQ��R��DD HڣT�O��7�5�����Sq|'�B�_�6Á�uG�ZG����JF��KU��A�2!�sb&H�j<��EvzZqX1e"�I�@��Tи�A�/�1Q��
_"������@��V��1��[�b����U����R�����a��oC;��%���܊���F�漟�9�)����/��⃳��Ի��'*Z�p���j�:����W�3^o)��e-���4�C��O�7r�/$h��v�sB��8��y��ڧ��y��K�SY�h���PlY�iL�~���c�⃊0w$�"��|Ͱ�p�Q����+f򒑮��mxPm"d	�͢H�j<��EvzZqX1e"�I�D�1�p=���^�b�A:�E�8�?&�����[��N�n������~�w���oT_���[�����a#&�"����Q���'�|
pb4�{?�Q豸���d�.��X��k�.ӏ]�ZvNrĵW���BFk��0~쥱y"�XiHy����&�[%ऍ����h^��/9��T���y	T��5��Q�T6<I�h�,�n������b�-��8H�!l_3l8'T}�y�ټ��k�������כD�n�y�7�����hQ($�t�1�p=���^�b�Ai��_9l��E%���d3;Ż6*��U����R���oE��]���
zܖ5&�"����[��~��pb4ó����ΜKR��ʼnʖ�9B�8��e�jNrĵ{�ٯ$$f��S��'�z'���K�޾:d��UऍX�����q"���T�9��V�R�{d���?��"�&�*�0�7�k���x�α��AAO䵸kg@��B�v��#0Dp"k�ZYIx�G�JT#j;��j�k��c>��	j�D�1�h��Zȩ�S��jqЦ;��(��j�O�F�M
 ����ȒH�& H56
n�Sn��w
	G�Eҙ�/XN��K6��A��p�K�t�\�*j���[:���'n�7��M���J�ǃ�x?�օ�!M�Iд�{�\�\��:��]���H�~'�����#��}
4-l�nk�hZM>\�RՉzR��\�]�cSZ�+O!x�z(�
q���7<3���a-T��pvn߰o��q8�3���	������O�h�a��1r{Z�j�^��,��܌=^�5�?3$c��++����5Ruv��H@BXJ�q
��yǹ��E����q"��j㊅�RzO����pS�샤�1]�C�:1�H$b��x�nT@����+x�j���O��_�����W�&�.�O��b����^�5Ԅ�a�h����*��	��[�i��z�z��7N<��U1��>\ů�G���D)]4�B&�K��>��Y�W�n�i���9����e�恢��l��sRSDCJGJIPMPOTQ���%(�t\^�-�o�C䧓��up7����/��	�K̈́����'��0����8Y��s��C�yQ��3,�ؓ���a�e㦨I�)v��x��Ť'�	I6����oJ�,���x��16��Y���P�m0j��K�C���y��/X_+G�iv�e���
o�6�5ɾE�
�o箢��WxErIfͶ=�˄3G�q�ݧ�P�ͣ�_��c�`ۨe���S;k�)��֪�^�Y�E8�d�Qa��It*�"�fx�xmV���<��mƴ��3�*j�n��AY�}D�Kz7*Im�Ac%�<�Y��r�SS\�jL;7������ y'��ՅT��`��tѝw�#)�#�0�
�k2�|��[xüT�/�;�~)"@��հ[z=I�㰇}�.�9g[�P �؉8Wr�Q/WR�� �b��'�uBL=�	IW��B(m��F�9�C�Y��ȯy���[�4��6�=�5ԗ�)
�� �1�y�"
!��P�s�Zl�L�8E�'�	p
�e6�����1�1��A���a+�����T�0̧¶����6��&R��
ȧ���&�]AREB��_�h�D�e!�L����Ĕ��B��;f(	�;��yP(63@U��g���C��~����'���kbmVF���-
`����%���q���POpʼnIU[�',HE"�܁M�l�eX ���b�ҹ��Tͅ��ܦ2ݙ�DyZ�Ƥc�o�M�@1��̘�/1g{-l��������������i�����?�O��#W�����f�f�$',��OKw����^�[��
�Ou�?6�f�w�akX��I��,�C�3+�
����h�bF2��lذ�l���BW(?���C)�7|��H�թ�'�7�JE��H>�ŀN�a��;�_��〟?�X)YA��w�V2[�
�h@�x�f�>�[�)����uE���D���G��Q�����w��@c`�
cl�
�2��92Q�*r��l�eO�ȑzpM��Q1�v��KrE[�Z{q�`�PS�mF���;�3�c�(��C��*�;)�o'
ygܳH-{�B�G�����cPZ�l���U�Matja�O�7�M@G�Ҥ�`���{Lp|<�6�w���8��U��t�l�#{��E��y�m�w2�]�T	4b+bZcN���p*�3�8�����d�3�<�9�bg�u�K-�WSt�?�#Cs��x*���E�8���P웙$��GT��ѣ���D֗nR<H�Wɋ�ei�6�a2��%kf2q�T���W��p���d�س�1<!��w ��Igye��S��Y�(�F}#�'�e�\�bB]��E�=���7�b�����<�m��yފ�m��9�;�0�[�\�L $.T�ƈ>A��,yϽ�xZM����k{�+|��DzH�i��x����w�Q�k���_�RR��VX,�����QVL;}�(ӫ>���YSN���������]�k��Eg�5^Á����������鎗�n�f�)~�>���]VQ�H��`x��D�=$����:���Eb��wOm��#|�m���D��2�cХt�#��\����E���-H��,�>�X�^�b[I�غ������닎��#�V5�uG�O亨6�b*;Ҿ7�R4�����+"g�'섷�^©�����;1]�oT*�w��M�M����sI��MU4���s�a���F�]�sa~a=&��F[��U�8���YY�I���ܢU”�
|Em���Lt�E�Lt�Lt�p��0�7ڡL�����j^��e.4��v�
�M��)����@�f)�C�M�=�
�ܮ�T"HT�\1�R�l|��f.]�U�5nY�/I#FL�~�:x�Y�F!�I�غ������닋m.�>�5�uG�O亨6�b)���|o&�iM�9-=�VD���_B[�]/aT�MVqB�Őxؿ��7�p;��&�
��ݎi/��𩪦��[��6��1�U�;b|!L��k�q�gN)}�VVmRQH�����)����1E������������:�G�3��xZ)�/��'T�yhn�(AsHh6
x��D�=$��z��nc�x��3�=��r���P�!RepǡJ���q���W�hչf�$�3��܆�'����&;b�.��ޫ�A��㴻��X�m�?��
��X��o����UyK)��M���+�Kqk��*�	�����;�ކ�B�{���D(����c�K�h�*j��~��
�*}�p�օ����k�q�gN)}�5ef�&�Cks.���*��eG�¬.�o2�/:I�D^�����nWϹ��3a��@֚m�Q�xl�p��0���C���k�-���B�X���,z�|��8r]�k�!Z$S �06k�j�z�iP?l�a�ۯZz䚭���hr]Gd�\;P�~���.ye�j�s t���M�O��|�nÝ��
���}�(���bGk�S�!T��er���J�'�J�~�;�ń�l�BL�nԪ
���"@��^Q�蕑1U�-�#7G,��W.#�����n��1�o���* e���C�u��6�$ʋ9�y7��pQ�^d�[i�b9��E;t���HBq,�.�TU��Q�4�E�eF��޸�9C��='t��R�&l��&4#z�F� ��<
:յ����_$Gֈ}���Aې�Z5L�rvG���ݣt��}(��w��1~T-bM�E��k?��y�_�>2�џ��E0��]Z��@�<��/��G�
s��H�o��ĩ�q�
�����3��f�5"V�[K�HB��l���v9ʌ��4h|a���m���u�YF��e(4Hq�̛J��|��AtO{�j�E�(=�#ʑ,,��W��d6
IB�t(]7h.��O��`!�8�22��=�iъ��a�QX�vb(S����E�;N����,H�
{��e>�<F�=|���Yͻ����w�
�6�B�v:�n�Ue
�
�{t�A��<�n˟c�@M~4�0��kB0�!�c�ΔA��-�ҕ
�O�!p� ׂ�V�-�T�!��?�!خA>��gl�nU��~���5���F�ᩡ�#ޖ�z�N6@*����\�+*j4�rrrr��I<>JO��ć�����I
�\\�˦TѼB��\KȜ,�8���ey-J�%>�zO䴾��a�4�8X�rXQ�n�&��5��{DK��J8��k�=����x�0��e�A��YbW���=yYױ0��i�ׇO�����c�'�o3�g�߁���B��-�q��
2��m.���t�[�D��%ҕ+�V&�b��"�GghܖeR��S���G
IdO��>x�^hD�Ƀ��e$ҙ�,Kı,K�F�D$_J�=B���O��uS]Y���s���S9�22
ᗙ1,�oCG.�P��v�Aj
QXƼ�0:D��C����}�g�����"Ӎ��Ap�8"��:zM�����Zw��;�ъ�Py���{��X�m��)�o�� ��v/��M��A�q@�l�	�#�Jr�B�m�Վ�=��OЗ2��]�#�R��3�v@),�90B�rK��k�ʊ�����YY3U69|͡{.c�\�P��!%�Yb!�%���M�+)�D;�`g7�ۻ&�%]s���*�	�;���I@$��@Hn&f)W��k��Va�T
�	�������8(SDŽ���g�=�a iMZ$�Ս��}VN�̓�Qa���o��	-Ù���3���U�OD8�m.ĮCe�P��ο^9Qd|:�֊�[�o��E8|d���'\��О�W�cJ&�AHI���cb1����׉fW�9�d}†����u�z."ثꯕ�!�s%$پ����
�(��.PWnW�~�˞����B�y0֩�zi�e˖�6��MLX��V:ii�Lc^M�Rk����O�m{S�EMQ1,Lyd!�E�-$�� �B�13�jr�%��%��-��p�ه[���U���x�l*��Z�'�g�&�y>t��ξ��?��G�Q�^�%ɿ����.�S!
٫55��gq��c!:�+���5$;�!a�9��a]Ю���[$6�~#�kĤ���f@[#ٜ
	�#DN�i���Ծ��[r�l�ϭ��ɀ���Mi�j-s��-V�Mh	0q@% (ƲA�4��rc�nH�_�n�(�|�#kڜr!Ml��,��?RԐ:��q "o��G:q��`�����kî�W0�t�|�ʾ���͘U��$�"�,�$�q��'ʩ)�?���3��/�G*�{���o���)�K�TȤ(kf�
Mf�=Y�{�4�錄�
�-MIŅ)X594�U�wB��al�ڴA��������Sa�-l�fp �\`�'��4�����I�REd�M��l�_�Ë��Ϧ��r�3�������!K�jÝ�i1ʌU�ݑ�Oy�l���d���D��@�z�jHІ8��7�z��8����m��2K��[î�W0�t�|�ʾ��<�U��$�"�,�$�qTz\�)�?���3��/]Dr�{���o���)�J
��$v&"GB��j��OuF��	��ZZ����!��Mb�A���X�ڴA��]�:>�M3�
����hN�+�yVORMn��REd�M��kx0�ތ!���?2*��PL���4!2b��ѵaΎi4��F*�n��'��f����m��!i�&X���C��~�� t!�!B$M�^��N?b~ۀ���%��-��p��u�y�IfU���x�l*��o�qi�U�S��ޗ*JmO�z���G�Q�^�,��k�j<e�#y3@����Э������Q���B|vV��jHv,)HB�:s�X�Pnl�-��Cj��=v�H��4�S2Z���hN�+�i�TA��t�� �H:IP�F�
D);,��l���Z� J��/q��^Ġ��M��	i峦f"O���P��+��0r�&V���,��6r�-��\�ŦhR;���Ag�pBO@���
���ekx��gp�h=���6yop��I��nAE�w^Y܇���K����X���-�s|�º3�k|&)�����ֿf�l����1iA��ꔤ�Jb���@.��A�3�Ȼ� =.1xG�]�:��L��Y��;<nY���	DM�E��R�J�rrrrrrs����Mw��Y]�x���v�x�!��I�**��!̥kԷ�{u������/\�HcÌ��7���ip<��(���k�*"
r�O���EƟ>�L�?ɧ&�Dm��
%#���S�:P����VS�G�ٵ�r��Z�
c@��#�Y��S<��]V�U�[�_(��*�mc�nޫ���<��ߔN���3�1����MJ!�aJ"��-�V0{��~�
�r��DJ�]�,�f�|�_JG-�r薛=�.z�;c�(�*&��*­2�o:I���յַ�o���t�t{9�[T��W�������f�ǻݰ~{�7L�ل�iE��kU!�_��M�*�Uu��o<�A�-�IX0H�?�H�yYt��U�A�a\JBy`e!0�B8�m��i`����\-��H�U��*
�5�H���2^.1uӗ�#��oL3�(���B߆�3�-z_Z��9����;L?��^�փ�	���r�˒¥.�
DC~��G������M��C�#"�����D�hr#ʓJ�Y�3�ؒkSI�݁�J�¼�BX���R�1�싰0c��Y��S�3f
+���y��:� �0�΄���H������`�"=�桰�cQ���M�����ʚ�ƿ��q��^e��u���!��W�k��2��aE����|��z����qD=�T�/h/P)T;��T�S�z�W�1iq{e>[������ePa��_����W��A�B� ��~7WQ_�_�վ[�탓�$��Q�ҐB�[�J���g[+�ܱ㴊������tȳ��Y�e[S�+�q��>&��"�iK�ŏ1��'ū�mj"ƩiB\�'(8�!�@	�pކU��g�}"w��.�A��M#�c/@�XY�a�I��aH!��M�-0Ee#��J!6�g�D�����և�.��-�oQ\�2��e~�=؞�ng6�-TB9J�B��%�%̄��^�v��T���G��׏.$Z F���L��!�$��H�I�Nh!��Q�����{NP}{�	\
N!W+d����7pմ��4��V}�>KqW�0����߭�Fjˢ�۬&B����l�7��s�4��)CHŖ�H2�I?-��r��"�ŔgH��ⱦwt$K��͔˪o�^���VںáFs�/E{��p��������`�+��]�;5�ź�D��f�I��%�|�Y�������m�j�� �ȿw-j�=�$�)�Iİ�Y}�;�/�d0��#��x�MU|h�����XT��C���ͧ4������T�5�R�E�8U_9�AK\����=�de��i���s����Fv0n����/hų7oqkm_MC����ͺ�<�x]������.�8n��
�����T �8����4�IŦ�H�?�K?nU��\�0kL�ge�#���i��	��3e2�(Y{�1;ն���Q��K�^�m�jH^���xv���X?J�WzlK�ϗ��@�(����A�i3���O�n�-R/�"R��Zxd9��zծ{�$��#��p)8�/�f��_�/�@��tmL��*��{r�&_�G�=�r_(z�6k
�	z�rp��Z��	7=���sYm�a�V��`ƣ;7}��l��n=����m���q�O_�ܕ�|�\fn35��Fjˢ�۬&B����	�tR ���V��T�Ib�E�I������f
i�L�:Du�3��"_tf�e�7�/pF'z���
3�ic����IѸ~���ݾ�]]bn��J���	r�/n�4��9_��O�k2�"��!R%.�Nէ�A�9��Z��IR>=���a�/�gze���d���F��D����gv��R/�#�_���fP�/�=T�5�R�E���U�����?��c�3,k
�v0cQ�
���_���c͏6<�pUS�Б�#�8-����zJ@"���Q�Ɋ.7�`v�����bq��kS����%M�έp�b���ř7��I9�,�s�˷Xg)�=�!)��2,N��/��m  ��v�Wa&bS���ښ��["x�Hf�)��$/�X����m0��$�mҦ�%��������>�O������X�;]��|��\RN����Ϫ�d�H���/����4�#����	<��H�ȿ��R��"�&�
�/���Q�.���%��M��%5R"��:�svD�sE���^7|I�L�=�_O�b]X�g6�Λ���5��]�ꗒ���T�DC�*�:�@
�¬�%�iALUр�U���v�ʅԃd5�P�R��浳�VI��{��yΕ�}������ĕ�|3'�!rDߘ����8�2"0s3h&��oZ!�Wf�������p���!��16�ּ���K���p��>r�{�>��p�1�<l�9SQ�)��	��[оqH<2/���1��9�G��8_D��$�׹-Y6[ƹc��o�h�DgN��r�>��(D�8��F�Z���E���%A�hH�8��A��cD�a	����P�D*�f����H3�)f���p� �(������T�Q@�:HT%�~)&�$��i�Vr��Bι/Q��I)�vAUC���6�PQ�[��U����b��*g)(�yp�FN܅Ջ^	gp�!��QGN_�x)�$����W�*�w��q��Ny�ڬ��-]<+�˱��W�g�I�ȝK��3M�b��2�E�>-�)n��˛O��Ͽ^ͫ���-�޶�2���/Y��tG����k�1�2M���J��}��$�$�{�m�i�MYBӓ{��/�Z�n�ܝ�`\�Ob'3#RT[�T(��������Dn`BӸjG�wj�a��qR{��!��Hj�����O<�
.�V��m8����J�����]B��B��=*a_X`��.��fK�^��0�b��{�>w���+}��M:2}�t��!�s�[�����-��F���ܻM
�ѿ	y��D�H���f��F�_�:d����Z�3%�+���c�U�W��P�\U+����'���6�}r��{ܣ@��˽4�]s��c�Qn�H��X�o���EN�o�^�Q�5��1�T��A<�0�'`���%C�+Q�p��-�W��E��ʔ����^�.�
�EF��	iϥ:���Q��APY��w���sޕ[���L߅�]��.��çƩL�I4����k�Br�*����ىU���#H��AJ�52��������z[ŸЮ�
��@w���������9��8y�����<rr�(w�]��. dŊ��S1�_�f���=�N>�Zy͚��&�H��8��/ZB�(R��K�1�-�ƹ�i��>8��`�?���F�S�9^@����L@�N<~�Ɉ4t�י:g
�����I�i�#�6�o�ߢd��;���p�C#L/�2Y��9�1�m���i��*�f�5��Ql�M�p%WkkU�^�tiA�	\�o���M�izL�C��z���@����tĬt���J$�r�f+���G����1ظ#�Cm��L�������� �����̓����.oJV���Y'Oȭ<�ߊ}|�ڈ|d��
�My�~uﵵ��'ua����?$�Z�w��+����,�͗^���[=��o�_��:�D�pMW�,o�^ׯE�����h����Ԯ�QM_owA-���$E�����}���]e��QXz���|���
��1�NR!�2=S�w������y���5%�!��I�D"U�/h�×�ɉJ�wS�[�y{�\b�rt�*�R�`�}���$��&�G�z��ʥM�MZ���aEBT�J-.�h�t��RA�+%m�L&B*�g�y~LJ�?�3��HW��S�~�3���Y~-��d�=�J#�XT�+�%���5�R�d�^/�KeҕZ�݊�N�ȒU��'X�;5��Z��(WS�[����#��_��'��]:��Z�՗�F�X��5�5"���b��r���6���}���O57'#�-��ti-���HY�1g���}S]I:ͫ)Yh->�zx!aܺB��Z�k�r�+��r��1,R(s�߯o7��v!#��T�U&ع �}��F1���T��7�R��L�k3Y�"�-%|�t����hM���I/̬��)��DՆ�$��
g��L��-�8�{/�gﯪ.��[TF�{>�F3�
��TSU�����
_����˺R�U��}�$���N��vkeR�T[
�B��-�#�G���+TK���S����/̍f�W<k�tkHj+�47��[-8m�O��]^�R�ܜ�G��6�Ѥ���T�ş�P3���MubN�slT��j��E����^���jݯi�d��f���_�b�a�M����_�8��e@�j�6\��N��I�#��[Zf�*z��ʩMɔ�S�9�(B�Ẁ�GKK�&��=��$/̬��E0������[ˉ��+��aS$+�r��m�������mP}'ϥϬ*~�QMVު���)'������J�VlW�u�D��7:�r��T�Ql*�
�@�Pd����/���箝N����25��\��\�Q!�����{�l���K��r�f��b=E��`�h�[�)���/y nN��}S]I:ͱR�M��1WU�Kr�
{֭���J�{t�����ȩ-�g~���.���r:Q��T�c��U��G�1�%�	��I�90ʡ�ԧZ���!F�W��:-n�4������_�Y+l�a2UegI|����Ͽ��!\[�Oe�l���E�_�6�>����}(�}aS�j��Ut����x��-�JUj�b�S��$�w���c���ʥj�`�T�V���rG̏�!~V���=t�u��e���b�x׺�ԊG}'��n��QJٗ�=���,����z�V6�Ѥ��R%!�^�@�������t+�b���W�VC������[���+�F.��r���.��b�?��N*��5�W�䞈�M���@���3�3I�Q�H��Q�**'�W�q]'B�1��}"�k�~J��4��h�r}��KrG��g�5� ��HbR!wCo��.-�?�3q�oWv��필�4_����y������g�+��	�Fw� bD�	k��u	v@�$�#Ӯd�����}��%�~�]�e�z�kY)����L��Я�G�O����������!�g��W^[��ȗF%��U��1+����i�0�V9�QQ�_�\��ͤ����O��jl+4_��K�3�\pB�}�h
-ij���g�ӡ�
�k;q�9ѿ�Zf4������`9%h��CW����tƂ3D|]Y��M:��r">-2��:aj�o6|�O
$�[�H0��wI(��n�UI���Y��c���~��Pѵ�ʹ�Pt�#ZSW:�֘��9b?t�c�k��UlwR���W\��$w�j֚�j�q�qEU��rIĊ�C*�S@.�}y���+2�d�_>e���S�^.�p�٩������6��G���%|������A��f׶�:ah��D4��}�D��m��&�$tF2F��\�^O��q�z�� �pz�\����:��Y�2�����n�V���
�ZE�" |�n�D�Y"�[L����@s���&��"���ue�Y��Qh���=��Ziݵ�2�@��H|o�ܼJU׵n���ߺ�3udn�IÉ��W�4����"Xn�0��?�Dy*�u�N�%ʵH�[��P���szt�]~Q���}K�Ŵ(i�9�}����[ȠY���	CΩD�|}Qz�lY�G4�1��-�k�֫��a��eRV�5Q�I3q�c��Y�v����S,�c�iBiF(�"�'֢��/�]��?s��i� �aj7�#A�Ks�l�[(Tu��~̌�ॺV܍�.� �	x����9^:1)ˠ���dzy���8��FV�L6��2�#�VkE���D�mT�1^�Ԛs��֌I��\�%l�Kr�ŷ���y��a�#��Ck�$�P[��T̡Ef�����S���H�#�Gf�Z/�Ȥ�oMe~�΄`��&�Q��]�T���
~��Rm�CGՎ�6Ꮢaֹfkȉz�+�F�s|ș>��ɟ��1S�k�(��ؙ�(�i�[e,����Q��ʚ~�I&W��f��XȾ��L_L
���C�nb*!f:�$�e�F��U�<7�
2�]�V���^V��(��pCW(���B��A]�`�1��[�w��D?U=
�s��S�j��h�#��-Pt�g������0^�����j�t^B�\X�̮!.*]��r�@�<���)p�!!1)ۥt����`�/Z6��8�B��QR�8f;b���o5k����U��<Ӧ��H����t�GΗ���
Z,��6_�/
o����E�J�1�8!r�}.�ğ��"J׋�Q8N���T�yG��t��5ӄ:)�J�)�KW�r��f��O-6S�P��h��o��;�ՙ%����L�M�Cf�����BG�;�Dy�=ʄ�)�IU��Y	TH�K��r��2��)�t�#H�4�$�����S�~�f�δѶ'�G-=�^̰A߀�V��5q�Lq1��y�A����“�n$r��������d��$�t��� J��5J�vz�'��RUm�v���VΧR#�g��a}��)���G����V�������߄m0y�kn#�����ѭ	z��;�B�+8�圽�#�#�[�hn�ƅ����ִe��I�2,}��%�+��Ę��h�ۼ��<�H�����A�jB�!@�""""��'�&#P]΂�E�dl���Y��c��Ӵ�++��D7��ؕ��D���H��艢��,�%5}l�D��$)IEؠq6KF���|��*q{U�_b�?pM4mx-McF����׃��^��RP��x�j�9��VT�L{�[��1w�X�!U�U��B�b'��G*�d�K=iV3eV%�j	��v����z��⒅xkڧ蟩����98;��Pc�^ʷ���5��/�"@��Bd��Y���@Ţy�Y5�5�Y5�Y5�av�Q�� 8�77�ທ�F�Rj�A42/!�q�Y���o��g4ڃrn瘋�	!Ll܈����t�9uzGzsRn���'w�m�H����_~2�AmO�}˅E^=�{��I�"!�٣Zہ��}��5��U�<����|I�����@�P%�V4%{�L�F�L��6��Fׅ���c��=^�~$�WJ�tK>��뒝���Y>*�Ϊ�b3KP	B!۠N��F���&c������M����Q�i��=n7��
�^E`N�!�azG,�)uH�9M�Z
܁O�X���]��b{_0����i���E���U#�Fر&(�Տ�	�G��Vt�:M	H��;�S��Kwg���zs9��(���Oc+���y��<�u�tuXk�'}���)i�^�1m1Φ���5a|�] N���nIրִM05ܑ&�ip_:�@�j)�:�p6�*�#�c�
Cy�-j^��*b�C+�N$'�����E$�څ[���Q�z�V������}�T��8�䊕d��Q�+]"(�6�|�Q�_`�+�8��8V�(t��RRΦ���(��DX�����[H��
��Q�r�[B�6]"�֡�-�AGF�|Ŀ���`�:yߝ&��Ci��π�E���R��A�éՇHP��9�)�e`��1��Vx'?
Nh�_�i��ְ��趘�SC����t.�,t?�=�$�@kZ&��H�i�Ӎ��6Qj��7�o���F*nň�-��P�r�Z����J�����I8���S޶J)�X�"�F6^uT�-�>���eU'7�1�
�n�7ӓ�����#H�4��I`6	y�_5W�e,JI�Fv����1O�U�"K�ӡL:M��"�P#����`��w��(߱�%�Zo�8�K�9����8�fI�E]��/�a����0\�Wbm�o�;0�P������G�f�u�o�J!
+�]6�}0�4�3��H���6���W�~\����k��WDvL�R��ɍ_���V��D�������񪋄��n���?��W�&G1۝�|M��M��]U�XU�Ze��e�|����3>'�o��c�$v��8�p�6"��EXк'��l™-�\�3簪/V���+>�8vs�w("��v��6"��6��:�+�Z�h�+� #_�
I�}>��E�;�!�G�7�tCE�@���ϛ�h��>�O@���p�/|3h=���f�j��
������;���A��tga�C�VT�����?�<���qB�2)&J�:/����[erI]�q�-(����E"�H�SB�鴪��^��߻q^�.'J���7��x
/������H	��Fl��K#�S��m�p���[���0�x)H&��ns����L�	_&�p'��z%��λ��Β==k���֗�����������,�ĝ�	��[��d{
��=����w?�
�3eB��}a�Qo5X���_.��) �oq��jU½3������K�* ��껚R�v�Zd>�-d�Qz�/�ڤ=�\r�F�t�G�U"�H�R)�GNg��y�u�� Lx��}��G�e��ԦP2&fq�!���Z�/d�T$}-��r>*�N�b"
ع����a�s�,�	�b(Q���!*�?�M����#i*���`K�{ӥ�A��3�I��Δ�ȏ�ƴQZLBȤé�G*�B�#�+hĺ���Q텴=�e����	���Lj诫�C5yw:�қ�;e��_��Z"�f]�x�]Z	�'J��Q\ �C���z�S;��B(�>%�⸮+�⸩�Q��j�ıe�4�mRs�x�R�����Q��2<3D�H���A4��'�nRޚCp��	<���yP,ߙ}9��w�.�3�j8�$�2A�c�K�~��뢵�d�_���)��fkf
" o	�0����z��x�6�3O�0i'=�+�2�!����!�K�ʬUfA���F6{����r�_�^�N\z���R�v���3
ra������ڦMl�O|r��ၵ"+�!Mt�TD�'�D�̈́`��e�Ye�T�YL�SaCy�\E�]��0�ǑS~؃Rd��{8��3�@��<{�{�,���[?$x�	¶���d!t.R���)��+
x>�=�Ww��=z�y5}"A�C�S
�
L��F��,�Gbe�utWT=�G;҂���	S�F�2�4����3��TG�\�o���E��u��D���4��4��vFg��.D}�Wc?"�Ì;l����g��q��V}���mJ%,[7‘ ��FM�6j���	�&Ta&��ڑ��~�F�ؖ,��IƊk8��Er�/�^D��Dװ8NiR����Q�v����U��G��c�do%6ъ�ogbdkW��P%|lc/���9�`B)��
�VVYm��I�t��W�q�/��u�<� x�j�,S_1��hU�V�N�(T�����r�seIKE�[b[��X���-�0�$cluLYj�K���^��U�”yp��,����9��ijšW�wc04�"3���EpU��m�V!sOi �C��9v�=&������-�F�ؖ,���kU�g�Ȯ@���KȀ�vd*6{�3J�}]�ʏ+�,�&��d=�<���1ܲ�Ph�@�'�qR�{�%[�_nV�Fo�ٚq��I>��l�,���҉<��0ܴ�N1��x��rH>Z���d,|U��0Œ�#|D�?fJʚ��-�^�8��?4��n�Ɔ�c�b�Wt�7�]=�[�Fw���˄��`�-�Wf���VҼ[���Y���X�����X��1=ZH+�VO����]Zl���z5�bX��M�F�[Vqi���_���$	������*U�v{*<�԰>��z�3�t�r��A�Q�i�JU�v�Y��}��U����vf�v�,M�҆�++,����O#�7-2��9G�g��.I��V�b����hdS�k!fQ�do��ag���RR�p�دk�mc�{5���8�ҀcluLYj�ĺ{�����U�”yp��,�[N�Ӛ_jšW�wc04��#?yi�W
�h���®a��$��K��'�jb��P��c�r���j��6�REeZd��`�	9��|ˤ����F���J�`�|�ږ�QT2�g����D�)>����v&F�x��W��W�ʜ:��`B)��
�VVYmiD�GN^rk���˳�n�$���@�b��Ȱȧ��B.�0�.��-x9x9�����-�^�8����:ֶ���CJ���1e���!���ף;�Vs
Q�k~����)�cY��8��`i�Dg�-0��!�E�X��1=��r�ip�d��&�P�	@Ah�j5�R)�E#�Q
3Q0S�h���ԡS��F�����eA@#�A"�&f[�,g�mS�C#)0O��==���n�"[�w�*3����Z"��a(o)9���+�O1J�e�j��_�9�tB�އ9��G�n�	�c��n��������:�*�<���o����	�C�jG�6�n��'�8���At�sgBJ����?�)�+�
�G�'�
�f�sb�-�dZ�'.%h�a��"Ad�Y��:�	]MMH�N�������j5�RX�%�!o�>�H�����ˢ��P��鵂(�31�#B��E���H�D)�=�2躯�%<έ�v�yP���.gh���ml�a0r-���5�InLIg!=�g˟{F.�ҡR�_�V�$�͈_��o�ʄ�:>
}���!�j~��=��7ٞ��
͇ca��67*1HW��������&�'~���1�L��n��f����������2{�+ݗV��/����'*CW�ϖޫ��,��,�ґ�m]W�P��"�^
f�c#��#�o@����OW��ԄO��|}/ ϖ����%�~��Λ�+�&!�S��	��e��:ؐOb4�!�Ud�(J�؋l�at*�5��%�-��r��x���]/Ѿ�o��,&:?��Z�����	١ī����?T告��1����n���w;���|j�y֠G�|����:@"P|Qv�����ΐ
�;�b����*�9��;��;��;���#�
Wv�or�1���!�+i"�v	�p��|�����^X���7
��'%�{|/��+Ǭ��,9
;�q��}��i�D�z��BˌjiU/���$ny,�EY�]2W>�[D�Ժ݁���?��q������ٝ��~}�o����TU��AX6m���k��R����.�^��WIf�#��E� �v�X<�R{,�V���_ւ�.�(\f�:J���o9�ߤJ�3�1O�Xʾ����K�S�o�J��|��j�쁕`˳��\��t���j��Q��C2�����U�ʜ'�8�sfm�[p9�Aհ�B!�o$mN��=����竩��Q��F�P*#Ũ�A4�sߵ�b���_(��lLc�eK�U]`�qH@���z(uKCH��V��{壣��R]%)lr3>�w��,5���6R^��5C�����Ki��m�r�F�N(u6��g�mS5��^���IJ*��Z[*�υ�=k�%5kw�d�����:*s�am0��P��Sm\t�̍�]�%���:�&�D_��W�;���&e��_$�V�>�n�^�׺ݛ�W����{����"�&Qn��0UR%�/�����O!�>z��¾�g��,fE� ��H��k?��w�${�PM�	q���HS�ƃZ"6p>D��CUZy�Z!�\*�Kn�,�&^fV��E��Tv"?��VB�Q���8�{P��vG��U�G4(X
�g=����Y�e�	�dlD�yZ���NO�Ss纞r%Ov��g���@1}��
ZUq$�����鐘�~�C����E��:�g��;;��xѿ����'�7Ij�8�����7'���^��oKv�+��ϖ�1um�J6���O�k���
�����~�ܧd�+s-k���_�KN��ًd��Vv0��G��X۱�)M�"�~�qwET0�2�BYR����}�c
;)}%��g�
�j�7���([��VP�]W#L�BuJW'T�����;�8m��-����ZT�o��[\�\���z�[��maR����������e�+R��j�((�іN�4m=(�.�[��$��mOV�I
y���bcK˻u����:+zʨ�	_KV�e�Ҙ��I���I�]vd�3sU�-�z�4�/��G�J��h�"��i��Э��?�i��h��+R�:��ϥQ@�n^io��^�l��F�7�X,�tc��*c9,���)h{l��om�̺J���e�&�
iL��=��K����C�qY�hL�lW�U�]�n�~�r[^H�V�%P�R���!�`9�O��9���R]D�R��1�l�r���_���@�bQ_��z^ɺB��;�>��Z!@�FB�P�3�e���OB
-K�%����K�[FuSղC^q���-������m��q5Ί޲�*�W�յ�|t�c��'5�z��]�1L��}�e^�����D�j����2����{�qJ�;����4zM��j]�V}���J��h���"M�+�
��r�oޓ3�>2��3��ϭ�b��~���ٗI[�>���M�҂��� Ǣ�x�bP[\�̇X�Mi�M��ʸ���ֽ�@��$�G���R��ʇ�"&�=w_��N\%�c��h(��
�:\���	a�
���m��~�����[}�2Yօ�6�c_QE��%�}�0��_�J`�����ļ��w_9�3�'��[ݕ%I-�d��ԭ-zH,i7���~��#�r�I���cR&�R�<8���~ű�^��r4�w��a��8�!a�ݒ�G��{�ƹtVΦ��P�[�㜴$�a�f�9�^@�������0}
�`״hЮ`��̏	
q���9�{�|�Ҝ����3r|2���)�d��^�g/�k�GL��>H'���qĜg*y�J�_�Ji8�"k�6���w��#�Vݶ��ᄀS���p���H�3�>��
2q���У`��1���C�����5,��l��[��yp���7W�UM'0��jڥ�6�#�Kc:A~��@۔���k�6oZ��j<7�a[�Z[�{�9{��;֎�^����)J��0Hq<Ԥiɂm�_�
��`���i�n�q��/?�4��$�J_�����<ڮd�L��&e�K���U��ǿ�c���r�-�
�^��l��R�
%:3T�2K\�W��[9�L��&��D�x�`�4d�G�o��{�Ο#�I��V��+wåv���K�̡��$	�m�����:%H!�6i��y,O����œ�M�����obh7Z�^Z�d��3��Q`�%]qtH�oׂ��]�-��DN�-�7ş�_sf��K����lЙ�u�Ǚ.,�TەWF��s�չ��P�E�W~*;�	��FZ2F���
Rݮj.�1UV��fi�|��$�o[�ޑN�gr]�{����o�e	�D���V���2�8�7Ş�3��mɘ�kq�l �S#�����>E�Y%T�ϙ�n�p�U6�d�q����HWB�L҄�5�d��B[dq*;��������^s`{�Jc�!X�|�����)LϏ�f:Z#m���;.�Y�=<��|
�C6!3��uu��ZJk�iv�T1�v�<~��b9\J8G��T�e���M������e���?��iG_�Y�+�#�"�Ts{l[n]�4(@���u��
�}e	���۟������I��>�SgH||6�J�C�2�w�=�15�y9�Au�����p�\
x`D�x���.s��3~���q�J����^ݞ(!j���s�(b��#��M�l,_�,Љ���%�ނ��!��G	��p�	f	��X}�"��	p3��唙U�*b%��Z�V��՚#3z�eC�a�Z��X�Z�������E~�ef�]�-�J���Z0��N0^��!?q��E�5:{&�#����b��P&z<Hj�,�k�eQ�'�D���oڏ�/:�:K�q��e��ς:�����
K����&���LL=�l��|n<���c�
�p�BS�c"u�U~O�U�3X�䭁����Ӿ�s)�U�"���;r�UD�x y�:f�� P��`�	��7^�mA���76�����5���|����
F�}���.N�����uQV�!��Z���[�6o�TI�;��4�4j��ݐnIu#PIX}����!>�L3+�a��k��r�8+/@�9RV)�v��p{��S���ʮE���뭒>�"�"i6\/��q��
�9�sc;�j�[%*Y��]��~0��CpA]"����ږ�i�\�C���k+��{�J�u�UU�^��7ޭ��QO:�V7��S^����<��	ڮd�U+Kb\i�p���5���\�ꡡ�x[����py�#q�SS?B}/�9|Ѷ�5b�Z5nOy�&}�i�M��KX}�[(R��P���'���vi�bv�;�N@��.�T;ƥ��\KF�Opk�!q�{e���h�
�K� �7�?�2�{�晴�O(��d4����R���|_�U�T_`J��1�}�z;fz�i*���o*�s�$����x�"gɘTQ�P��o��p����\�
��+�)i��N�-:g�����aD%�!��f?AK>��\m�9b�C�%�k�NA��z�m�:�b��`p��.~�#�\=�/&�F�#��=q�10�KK'�i����_���Y�0�noi�a���O&E���z�.lV[<�icw.�񫹵&r��U��<~D�,�g�(V��_
Fջ�Z,�)�˲{&�=�T5��	|c�"��(�q�T��vߨʹ16Ă^����Oe5�D]�K���W�"�Q=V��#���+NNm�L�&gs��4n��u�[oX��u�h�<� e�$->Y>�&�&d�:w��>�( &<"�����JZ��Zp�`M�:*���m��/܆	��,���q��l����9�e���땉Z>���0l�����p��L��02��H��^��É-,���G�b�%~Z�`VqL,U����B��<�OH||޽˛Yl�/-��ܹ�Ʈ�ԗ�/dM����N��vy�m��kk�E�L�]�#�0�!�"���ʅ>�+R/ZҏW�O�Gm��ʹ16�E��W�UZE�_ƯC�
��|�!N{0��h\6%�jqZp�sn�fq3;��!�5�F~ׯGo�$�]5^J0s���B��>�&�&d�:w��>�( &<"�WT8nUK[�4�хi���=���4B.�)�3���S�.6㥚���/�}	�6	��Nŵ:eeh�� k�����:���q2�&�F�#��=zc$��~��ɋ��_���Y�0�V��
�t�&E���z�.me�����7r��X7q���&佑6�O�:�-��J��|)V�h����؆<ʆ��\=��
}�V�^���=*����Q�hbm����N����(����l+��٢Ýv3n&���K0�����ݴ��fgs��4n�֝Z^�%#	�U��(�<9@<�6����~B*2hp��7��'
	�Ƞ��r�R���4�ђӳ��k�'��Kb�B\�r<&c���y%��t�_�E���l&^��mιX�����u�<�X�ۉ��P#r���1��ZY?����L]d��^���X�s{M�HVX��"����{�6���^[K둞�n3u6dܗ�&�I��'Ye��Ȕ+np��#j����=;�y�:�����O���ԋִ�eT|�vl}�I�d`�H%�y_.��Oe5�D]�K�����aΧ�Q=V��#����T3*�L1�pe�膩��n�6�bh指-���7���60ˀ$�b�iq��
cm��p��@�m_�3KG3gK:�j��>���?I�6����i��v0���$�Y��t����{t��3��~ޞ�甽x��������FΐRfAS�����s�Ӭ]��>�U�+U�պ�C�7N�z�P�2tIr=JX����G���h>���j���iJ{�Ks���k�����jm��'Z.�{}b�o&4s�V�����>�����HT���Q�����3!>n{6�)�A�������Z�
��b
mѴ��ѿ���nޝvO&Q�D%�9�Ʌ��(�2����Q2���vk^+�+�7]Ţ�ŧ���f� �nTq���+�3y	�
���*q��t�c�Z��߰i�@�����H�N��~j��3j��Vډn�#����
2<bt�=�l�T���R�����}*[�2��}�&>���w3Ws��"㝨��ص3N�zܙ;O�
�iv�%�=��3[*��=~h��q.�r��t����u:��/���ݥ���E�I���r��&�j�+K�YM�ܲ�k���}�xj�d�kW֏��h���SREY�;
X����S��*bf�§4�Z���a��IZ����n�q���1T�e��<d�f&�ڙ��؃�>7�[`n4߼O�*&P��%8d�2��Vd��9p��×���
�����3��)!�h6�:T�D�m���=�g���Qr�ھ��SdMt��ϭ��Q���P�3Kc�z=���?���KK,UEYmY5l��>���Y�v�
��*[��������K�e:߭:���z���fR��
��1EX�y�.t�w�݇�#V�'[�uK?��1�<�N7�ҙ�N��"����4R�i������4����S��wybZ��#�4�:����<�U-�R�w}��Y
]F�����=��c�Pb�Ye�YYe�Yb0�K�"�p�QI(s�E���@T�:}��8�+�1����L����w��(Ʋ
$�Rg��(�D�8]p��Dp�*ufR1	�������ZdT'�0�D8��!M1�q<�2�3���h�U4X�\���xۥ�O[�����r^L�Vx4�!�WVS�k����⹽��-�g�%b�Hj�4�jzZ�7SA���BEF�7�{����P?�
�6=����+<���A��P������,��,��a�:%��j��q���O��3tV�"�G*��!]�`C,ꀦE� s�ӄ.f�"�^�ty0����'�m�<�ǫ'��;o�P�&�*��ܝ}���@>����Cn��	�N;�G�ĺĶ�1��I��?$Z�փ��ϣ�JQD/i�t7�B�ꆛ;TSS�®��',?d�\d!m""�z����G��O��%M*�r��V<��B/>mD\	�}L����xT La��I�!@?���"��l�0`��|'�M1}B�ul���	���`�3�DRd�H=xЙц\�&jִ�&%cO�&0�<mc���dz��򓛲zc�j��; �Zw�	���\��,Ռ5d�����?P	]9@�2a;@��A	����Ӽ�~,�:
�F�(��>�Fvi=>�R1�r1�����wK��n��tJ�T9��Ȏ&%E���g�JZ t�۰�D��yrk	���?�x�0l9���W�R)�E"�H�Yh��n�N�`K����f[��LJ��r����ߓ�x
3/[��I�
�C�/96���1\��B�HԻ�C]I{H���ô�Ĭ�6t�p��.��:�]�ưU��
�t]��_��K�L(}��f8��atD��Fy�f�m3(ZdZЧ=�Uʇ�V�J�W���RD�(�Ե��cK�(c3�Q����bJ*�5*B��b�"�>"\R�u��ʛE���@V��y� �H,�ɰ�K��Β"X��T�X�_�l�7���F����'�l����T�$���r��gX�C�	ı
�]�8�|�1*�N�W�v�ʁ�+�E�V��>R6�"�n*y��=ތ�F���g�?ui��1�F>k���\(…LX���R���UԆ��R�5��&
��k;7�#�Nҋ�t���3=Kfen)�t4�'և�I-#�������8�B񕈪�[ :�ܕI��փ
�AE�E<��Q�i-aWb+2nm
�)*�wg�I���D*��V��IK�LV>�	6�l�߭���[�i����ŗ�|/���3��iOa��m�rZe�I9�-^�ڊx3�i!�S^u�9�)�Ũs4��S�7d`�Pӏ��Ӣ�+{Ο)MZ3�KŌތ�F���g�?ui��	��F>k���\(…LX���MW걔�$���tP�瞌Wh��c��#�Nҋ�t���33԰Qfen)�t4�'և�I��8鴢���8�B񕈪�[b��ܕI��փ
�AE��S͝Q�i-aWb+2nm
���'w�I���D*��V���R����M��>7�u�D�25JW1t���x�O���4���O��c�I��	�R��U�cb��HpG�W�wNh�|(�1j,��W�vF�
8�	X�:.�����-	\f)x���ј(�r]���*�68�Lw7��I����Z�U��e3I*ꁧ�=��`�^����	ߗ)%��vM^-�3԰Qfen)�t4�'�h~Ԓ�8鴢���8�B񕘊�Ų��ܕI��փ
�DZ�dS͝Q�i-aWb+2kf���'w�I���D*����м�R�������Y5�Y6iwy�DKmZ�uBMp���p}�f��Y�؉�q���A@�4����G��xomr+����H��Y��1�R��ԣ��t��w�[��
�W����طn��a�v~<�;���zw-���+��3	�vs�����ȼE@�50�`o���x��O�c"V�5lsO(r^�j��L��'H�Z��_�y�F.%:f�v���u�٬�����\|[Qp�PG/��쾩�mʦh G
�[�\�Q�S����!BQ�iO@m��
oF��u�c�j�L*��<�L_%�ހ�B"�ψ�6.�N�O}�-�)�����Mb��B<�D�J�Z��s��J�DiK�L��p��p�=�T���6�$��z
�r;�x3�_�#�n�t��9��0C@#�#�E��-�P��m\ʊi�Z�JT%,í�E|f�o��e
�GQ؈�UQ����\����jE�w�S�1J����"0C�'/[�����Q*T�R�e4j5�bX�4�D�62��U��]|�0C�@��+G��!���d2A�L�L�+ah��A�+���D]XLϑpK�mQbC
w8��9�½�J��s]0�{��ׁU�&k�?
�?�)�H���|���N#�$ߞ���b���It���9 ^�7�R,8�O�z�ً��)pF�_,YRp$�]ܒ�Sh)�3k�oϿ��mTkVWns~QjeR���+�*�%�1��s�߅JH��ѧȩ	 4(gJ�*T�P�T��R)�E#G�.��I���������D�����V�@Gӡ�O�^��rxP��-U��r_,ՁG�~�a�WQ�Ŭ�o��5b2O�{��束IЫm	��T^��%�>d�h�}�x��l�K��-�`Ȇ�����=���f33���o���ҮF6���ͫ��Ď_�`V��k)N�`���j0��NF*���0&�ѥ�hT\�H�E���wAe��^_<Ĵb�����T��!���A3C$3O��%`g �J�x'㘪%�}�����s���90n9����ޛ��e�����u��4��4fqk��rM�S��l�[��D�B�����k��4O�$7\��xr|��K�)G��+�v�ײ�2���9���m�k�U��.��hu�i����Z�$��	�NޖڪC
����=Dށ}�4CrB9Iۭ����,W�R���IL�;$Z�#$~U˂�Y!�gf�ȥ��a��������-Tݚ�� հs0]�XJ�#���A����@�
�WH'v�[����R�O�-2%|�-�u�/�uxQe4�<�Ҙq�-��G:��ʕ��7�v�y��($��u��|�$�	�C��>��YY�;��'�-Yd����%z��=r�A�)O��޲��Q�
�z���FarB����ώM��jt�G[�%��B�+*��!6��Z��Ƹ�2Mb�p�����1J%C	T�R^C��4��e�_K�}/���+�+��m|F`�A4�t���c�]u�^Բ�3 ��-)t1�R��/W��O���u��-uI��.@��8��_�t�|�Hظ�x�-d�z.y�N�gr��Ƕ��j=�ԉv���On>��qWAM�fpW�����%[��=8�
^l�_�YV�і�dĪf���u'b�Bc���JT{x�iP_MToJ���S����@n`�ׅ���I�h��7���WW�v�$�^5M(&�Bi}/���%��_Q5�p� �Wd�,7� �M��`�2#]���j"Jd4��m"ΔD��S��ձ��~��Lڝ\�#����+�Q7��=�Or/b�U� �Y7���|ӲYܥ�?Y��=�ԉv���On>�t�S���[�8+��E�f�9*�^�
ͅ/�_��d��Bh�O2bU3Ed嫩;!1�_�%*=�b4�/�j�zge�G)�]}�� 70Uh���xn`�ȴXśЏ'��!史~�*ZH��W)	���%��_K�}D�U�(����$3� d[㝀C	̊���(�52qn��gJ"Iǩ�����j�PؗsT�i�J����������z��q��e���E�>i�,��]���=�ԉv������h�&�L�=��%ߘ����%[��Ӂ����9�_��\�tHD5aEV@~[�;!1�_�%*=�b�J��j�zge�G)�]}Ҟ�sh���xn`�ȴX��Y�g]K��e��*�h�)@����93��D���_K�}/���)֫s�Qw1��1�#�86W�>�dK�Kx�
8�[H��$����>�Z�ѽ��7NZ��p6��$�"�dC����F�ƫ�A��o=;_>G?%wG�~�^��w[R%��r�"ۏ���D��2$��٨���rU��=8�������善і�d�J�h����Rv,Bc���J�G��F���F����S)˯�=�
�1υ���T���z>κ�W�v�גO��T�R�5���Ye�Ye�X�Z%�����fD��3�B�{�o��o����x�	�f��ޙ�9V
J���Q'>��Y毧��g"1�:���0�2AnD&�c�v��6��iEN"�[�a���-�$�I[y�c�G�"�k(g�{��#Ճ_�J�J�����V��Mjyt �
�y�����)O���6F
(�T�9�3z�7���[�e��QuK9��$�{��O�V�ib�?��]	���s�Q�*��.*�̰�����������*��?�hS�B��p
�"aت3�7�>W4��mfq�U��*sjLl��Z]�L�g�zP��Wcm?���TpbEh���RV���T\�>�X�.�Td$f�&k�����Xlܾ/�(J�k�����i4�Ҫhl�o]�/�G��mR>��	�c�^dK�i?E�̬����,����`��1#de(�=Q��&F�VT��0�������7�}��?NPH��jl7/�-ywr�*���5	���U�5�UN��5}��ƼY�,�<��q&A�����-o#�Ǔ�@��uj��'g�u\��M�i�4H�do�%���w�g�j'�����
iN��W&�оZ��TeTv֏#�d�HWӄ�2A�g��3�`�i�O+��x��e�^U	q��������Lp`}K1��9nx��[Øv3"�J?�Qė��D	L_^�7�dϹOψ��@K�PBۿ�n5'�,�lr/�͖?:��Fp�<8o3Q|؄s�4��܋VRpB铠G�#�����6���%x�٥���DvJ,��y���X��m�����L�d��͎�w��8���/�Pw��euۿ7w]#1��;�(��3UbD��r���V���?��s���P�e7ѝ�F����ݚp�n�D<ܢd�b��
����I�K��D�%.7w�OQ��!s��l9�Ͳ0�.
R��D���d
!�*�'%���eϪIL'�+���E�Z_o}1`�@W���b(-=`E���"�n��SY��8�憏�Q��(ɋ݀e�v�lx;rΞ/R�b����#�^�S������S�&������w����g����x[�m���T:��5�4޶�[��k��_�������D�W-o-�;>��pɾ�+B������kzi�
q������5���D-
�bV�$�ff���bT�*j���T�է�
OsNo����"����:��Q��/��zlC�%�>�j	�L��p�s�qU���vd2��!�{���gg�&����tBt0��*��6�3w]we�oX�$�㰻����r������v��5F0�Ġhw�8�K���d������c��<yN��J]���*r�n�ٱ�������
U���Ó�ȇY!��ӌ�M7�\�u���~���oI�d��v���蟔��n�޴���j�j}�G�Rs�@�:U�AH�m�c����.�������֢��M_4�}bP?�ύ�񹨋2��)?��I�}����X�;=�@�v��rQ����v8�X��M2E��2��hٞ����R�*�
�}z��*�����[b���c��{����:{L��I8��˹��%Je��I;V/Q���m{�����J'��`0���|�V�w`"T���bfJ>4c�e�����Z՚�o��oe�PS�D�(9�t@E�2��Ƭ�\P�lZ�dt���/ȹ�E��	Kn?5s��G�k��K1K_(��Nz�#����;��A�_\�ÆU]N��\��$7�^Q�_UnllYR4U�dܷ��__t��C_]�/Β�搟Y	��)�+�kzkm
���t�V"�����6=\���R��z4Fr�
�~h�����o�8���w��n�ڳCM�g��bN�	
�}u�����V�CMl�Je�i�hd6ҫ��#�4^h����λ�uL������3[��_�m3�C������QVU�@!��c
(�hv<r�,�
֬����{-r��L�'�$9�D/L��D���5fX*�bכ2:z��!~EȦ/��J[q����J>)g��VibK�I�QD~� 6�Gy;p����upʫ�I��zˑT���K�"Zb�����*F��l�������k�2_�%���!?ׅ9e�oMm��1Od鮬]�޲�ַ�ǡ�[JP�"�d�ˆa�ۣE����9�w��-�u۩6���s���ؓ��$*W]cj�g�)�դ�[:Ҏm�N��4�V�J�y�]�����2�Z8�wfꙟ���5��f��`r���>,(pg��xU�:XB�Ք�t.٘4�q���� `0t�pX+Z�S�^_��ʂ}-���t]�2�]2rXՙ`@���ص����:<��"�H��a)m��j3��c�g��VibK�I�QD~� 1o4w������upʫ�I��zˑT����%������*F��l�������	ێ���2_�%���!?ׅ9e�lt��3Od鮬]�޲�ַ�ǡ뛿M���"�d�ˆa�ۣE��ލ�ǂ�-�u۩6���s��j��;O�$*W]cj�g�)�դ�5��(m�N��4�V�J�y�]Ѿ-�=�,��r���o���0Ӫ�[�u���e=��z��x�n�$`\��0��Lܮ�9��� ����1�B��z��L�`Rm��Tv�x�d!�2Mq�1�b`�6�݈�,�����s�I,�w.�ӊ�^p(�Y�(��T��N-����
[����wO��K�_�g|r�������B|��띬t��9k�d���+�˵hY)Q�ZNT�r�_(�w'I���$g�Z�����(��g��G���CFOڐ���k�<5�ͼ3F�KN�x��[|/�.�5�,�<�Eh�}�����O�H���<��,�CrEf��CET�r�ʗ$>)�K蕜'����s�Qџؓ��h۸��E=�S��F�T�i�o�$<�
���Va`q��Et�B�XI�s��v#W]��B�=r��R)��	�88���/�]f�!���Y<㇛�\s6i���~�JQ{k�|��z�H'.�DM:�rAFZ��G���
^�����3�؝z�Owر8�
U��)�.����ږ�U���I��i���/�X�K}7�}�c���բ|tϮ��Xs�X��.��٩�6�ŎH��6oN���o���a��?��"��'<o��S$�t2S�6y{�o��Zij�2L�k�=��uy&JY?��LX�Ա�m?��&k��\#ge�W�`�@y�d|�&�x)� ����h�h�
�*p�	 툖�9L)��Xŵ�uE�ҷ{�0���=�O~�is
��l�{u�p��K�-���,r@��7R6(s�%�������{�U%a�dfeY7E�!,8���t��wG���WZsޝ��ݲf��Gˊ�����FZW?6̻����U6�O���]Be��|T~�����}���~ō}M�,�z��k�]=Po;ߗv���5�����j�_�u����Ǖi,�T�󟘈�ԌNn#b=c)�����E+�?��9��ػ	�-]�
"z�:&���������G���<�#�/#G,5g����(��n$2�*�?�U�gg3f��Q�т#�@N���R��z�E]��<'�#�g�7�EX�oJn�.�Y�	$�1#A/�m5����m��?�K:���֕^��t�V��4ؖ�#�?�uţ��t��Z�� uǭe�⷟;n)y�,W��/�S��4��FnF#��3/kp�7�R��]��cV#�����׼�9T�:��U�zہs�5�t8�@�5y��&Q&.J�I���N$X�&�}%�"�8�CN_�g'2���B1�:��t�>�jº���i�������	ID��������E^�����LR;4��#%lFz�1�$���#��v�]��CͦP��l&g!�P�ʅ��	�5�Nw$��Y]н��P�`e�:T's�S����»�S8�yk�
p rd.�H�qƆҤʇ!4�Fd�* ��Q�/�s�%:��{��E�Z�v��iT�)�)GAJ�R$�>��-��x)���_��y�ۺ���uv�vm�H]T��w������5j��)O�#RRU/���/��n����u
b�)�+En�O��.,&w��S��Ή��k�g�sd�~,�[���㔬�4W
.IL���膖/�
 ��H�(U��|�@y�/}���E)�eQKT�
_K(��2�б��Y��h�4N�nKR����o�<�Ϳ�e���GJ��
�bE@u����}tM%~I�z���C�a��s�-7A		�K;�,WTL� |`��&�v��d�R{c��S��s��n���ُB��'21b�xh<D�ȿ*��;�Rg���-r��#;�?�6<QeI�#�;2���4h�v֮)Z����vVv˼��2�t��H�o�IP�m2�ӎ:��Xpdz�n���T�^�#�e]�}�Ѷ�4"���<h�bM��{�]�E׭k�;e��>'͞P���!�*�!��TV쳲[�5�/H�P�)(�x�y�8��h�@��n�,Lm�ػM14�J
�"��Uʖ�4:���	o!�`k?��c+�O�)��\>�G����o��7�$dt$`�'Ћ�F��D��y'�O�My�6����>κqu�����6�I'�U}ʏ�گ�j�i�t]�#��ggQ�����QT-�Ŵ9v�6����BV���m[W��m��_�B�0��ɟ,����UZ޺��Z�j����J�ґm����q��*e�.���*J��kU2� yJ=��I��
��X��K;� <^�p!Ig�{��JGU�2ayL�%'��5Ջ,J�C��#��(DPJBY(��x�h!�D��p�{pY����^.SL�dI
�	^K)�Gj��qSb�C(U��]��̵��}���w��2��>-�by�	 � +�#Y8�F�^�5xX�Z"wZ�?��}ZkϹ�_���uӋ��~\r�[JI?dJ��T|f�{V3N����U&k;:����gR��o.-���C�rQ���@\����jڼ��o�/�!t��L�d
7l��ʪ�ן{�vf���Z�R-�>��5��T˄]@�|��I^��j�R�)G��_���A�ث6޾	gz@����N�B�þ��`ӻ��H��J��biK�R}M�]X�ĮD?�#��(D2���$M�F�� ̨#!�d\8���c�1�X��4�"B6l�fYW*[T��>�%��P�7컛��kG���ˆ���19ߊ�8��W�HD�:21+#�T)/e�,r��ׅ�$���^}ͪ�n�;:������tڒQ�"�t�q�]�테Ӯ軮G�T,����2��U�J*��ˋhr�m�G�_�pHJ�ں�k+z�ȿą�_��3�4ݳ��*��ֹ��:��x|9��t�[p.}"�ƿp�����/ʒ����L�\��(�ο'փe�V:m�|����x���%�}C���w����b\���I�1�/�I�7�ub�+�『>��2đ6M�� 2�#���������Ni��A�#dW�ʹRڦ�U1� -�2�XA�e�ܬ�]�
���1�������Z�xd�L�S�#HU��hE�W��Z"wZ�?��}ZkϹ�U���g]8��|t�RJ?�R��c�mW��c4�.�U&k;:����Vu(�����C�rQ���@\��j붭��޶��/�!t��L�d
7qf�&��k�.��׀WÙ+WJE�p.}-�k�
�p��/���+�/��L�HR�|��}h6[c��}|������RXw�9�wl��QE%�
~���R���S|���g�]�x1ߌRJDf�T�D�=�HdQ��V!�ځ�5@='�m����u�mIaCW������"�H&�SY�91���B�[A���Yz��j�uK�Ի�����b���v� �Πo���ԥ�S�~���h�w�5�W`r|�w��6��F�aҰ�镈*���EFZJ}�Omc�������[�/N\[�+]���1�}�m+:ޢ-_�eVS���X�>{�n�ii�
���.x�~ӗ����Y]k��᡺�� ��ށ�Y��.�eWl��>�S�XV�ew	,�w=_L�cu��S/R��`�T3}8J�0y���E
��A;�ƒ���Q+L
�������}&��YZH�1���-ht���P����z`��n#{\���9t��!,$h���Bh?GEg��,�hrvm"	3J�%�GK���잎�
l�.Jg2N�<�K���s�+T��e�F	T�K�����I��s�r�=�؅��鱝�&��^�E��u�|D���#“�UҤy�ا|�(W�Okgc�눧�����<�c�’���T�˸ˠ��]�8��T��"�+�,�8��
��ew��	)-Q}��I��M��%0[���^�*�p����B�inݻ)�!D8`�so�.�5�������3e-D�q/1"�`A�q�c���<�A�yR� c�K���YW�Q/aWcc�.bH&�Å�YW�O���{� �~�OA��.njza{Hֲ!�s/��Ӂ
(�_��cw[d��zO�n�ٕTǴ�C�oAW�V��OF-&~��A9�VM�Y�W�����.!�XIla]��AD)�+�%�.�4�5�P��n��Y	R=h-,ko3*8X��Om�=�ޣ�v��Y�'��Ы-e�K�,QDTEd�U�ZU�\d���l�;�#���gN;}�EH�Adn�=8<-96A_�3T�C�4�?�!Ƈ�.��R��i	8���c۠��5�}m.�*c���e|o���o>�P�n
-��i�PWH�3�v�q��6p1G����^��ʉ��{�6��G<ɉN�'��w�1�?������,?z� ��'��;�3���1-K΋�v5���T��
E�?T���~=G{;���%VMj)�mU�/�!��s�o�t*\ov�� �N9�r�i
!�<��I��kX�j��x���5�{���&�����e�Y2���,u�O��j����@��4yR3bM%�Dw�|z	�����C,඄����">q���E$�}Y�~�ZoVI
�~�GΛ/o���[��w��z�D�8Ě̯��S��~�8t��H��w7����0��S�l?]X��q-�����ȟ���0X���޷��-�C^��J������3Bc*�m��s���p�D�*�U����?J�iX�̨=?K��mj=^�W�,KӦЛJ�Jv��dz��Ya�e�V��i=V��6�3����aV����`-��1UK�#L����wQ�Ό^�jF�	���>�H��) ��z"�mƕ�5h�&����J�4�ʆ�iGS;��������������먿���"�RM6,�*���nQ5/�y1@WjcM�ey^J�+r��`�c�౭@CY�Ǎ��Gp,�˜�忪��Sȳ��C��>	=Q-Kz�Ą��9��NҔ�u���:ska$�Q&!�a �@<��I$�B�!B��B��s��<����ۡ$e��Pji6�����1�a�f�)\���2K�X���MM��%\Є�ҝ��5Z�Z��#��s���o�bΐ8�_�%Ŕ�LӦ��j���Rm�����n���zaհE�j��ͷέ�Ċҿ
��������kwނ�Ӏך�J�~�~Y��2��Aϕ�����|5MU�����M���p'�f�p����ܫ1j�(D:����xq�F��x=`5&�j�*(�\%sUqVav�^�����"5	��|�*u��� �����x��
y}�,09��9��+����"ά�[jl�Q`*�8�'��Ta�?�'3�!�-Pђ�t���4�OQK��UH���1b� D�T�����)�
zw����q7�ˍ`u��/�dD�LC�WL��Y-��]Ӿ!{�J�b�d�3ܒI���B�9�k5�
��t���6��$!3�e�����-xSK����[b��Rں��H��"�0��%�yU�JV����K(�cƂ��[�D� �`V�3�^�k�p]Ň6]Z�s����\��uN j�� ��D�Q�����"8���||��@e�')�kU>-�e��U5��t�O�\C��/Ѷ��j�HY��
(8� �2�$!;��A��k�鸷*������-YAR�&ȚW�Ū�&�o�z�5�`�&I _��,�'ו_L���-S��?����-��c����=�YXۍ�y�)5��]9��!}���%��c]���*��ѨS�Lv��E��=5T��<t���O�d�qv��P��C�Y�Y���^��W�(%/|js�:1�r�bIj�[��Q!L�R�L��R˜l�z�.���r�A�LC ��N�0��_n����b(��9M�X©�o(�m�T��Ht�O�\C��/Ѷ��j�HZ��0eA�4���L�A-�t!�|z��s��ʼ=�>�,�VPT�	�%�_+��I����
cX-Ɂ�H9sD���W�=`$KT��O�9��/�|)�u\�|O��Q�`�,�m�s��I�|`���c����-6�5YW������i��Y���U@9��J	X�O�d�k��L�:U���?>�_R7�_7�U Y�&�5�
n�z�^�W���ʏ*<�3���N�$���tҴ$
�S>�e��P9@qѼ-b��j}��hBeW4�•^w�/ú�P=�T9B#|�r�,l���]~��3S派^�`Ҡ��O+Rzz��β�o#�if�vMl��$]%��������bO��}�n3�5�Y��T���DY"=1)M,����AUKR��Y�Oy���[��7��V�}�w:��Aڛ�t��!m6�#�h����]kS��;n�Z�C5�m��a҄F#5��~߷�߷�~�C�}$@F;3���Uop��Y���.}`-@{�\@�*2ll<��=��&���+e�`	)v�pO>��r�`���+���+�tM����6m4]�_���}�Y#v��,э$r�zr.(�e#��Kqq�@��M"7�Kv��{�U�e� ���E���/2�S)�Qg�Wޢ��f,�{km΋4|.�����[�E���_Yj��%�3�`�q�����SV��7��(����T/�˔��s"W���W�%��h@w[�m;O��z�^�bX�4�������d`�:�Ƃ3�@�Ub�R��m�ⵢ^Q��
�![��n53 H�
*Ţ�R/sG6a�w��n+|D�W���p�1]g �C�{nv��5:g�o�6��$`O7�!�N�+u���'��D)Í�E��S������F(P�^�J�����-�����#S�E��)LH��7nG9�iՍ���C���a+���s�Ek����jUZ�nȵD�����æP�@��(�n�]?�e*q\��g��}�Ʒ-�rܷ-�!�4�����������$.I�
�5T�Y ���i�e�rf��0U
'Z�E�!ʡ$�(��B��m'���@>7+�T�A
�ћ�1�
x�l8L��C}���k�����,�t��n���r��߿��R;�l��B8��3fY|�Y}��A���C�s��Ļ�_���VӬ~��'�<��
G��j:�MX�w�c�F���8�Ɣ<�kAQ�5}�Ctٛ��J��z�S�Jf��BYO{3'ƣ���1&=XOruȑ"6�-�rܷ-�r���K�.t���G�$-�1�AV�|>��|��}{c��a'��X�����-7ܙ
G8��s[�$ڋb��"�-�18�H������u���Ե+ͪ���Eܨ�:�ZTa��5~F�5v�Az�P�l6Ô�-h�s��
���M�c�%i�;�s(S�����8��6�V�ӫV���we��Yf �u��A���ݞЋ�y��_�E��qef��@#z%H�.q��e~��b�}�р���a�b
j+QR�J9�����	���PZ�J�_o���o�]��n�n��%�@^�r�{|�lk���0ӣɀ/P&�!��-0��E��ʄn�\��_�%��~�(%�Hy��yd�1�	|��qJ"^�7.^$Q�����l�`$m����n�D��7:����� ��m�/�%�	��J�z˼��c�(�w��joR0E�� �_��P��֫/���l#L��v�0��wQ=����O�,�z��Nc���S
���:�@�[�+X���
P5T^�q��}�P�������;m�r�X�QPX&�g�NӴ�]�v�۷"�$�w��ҟ�Q���'���Ab}@�ha���W�b:�"}U,+�Њ�Y�E��&ӎ�j�ifڪ�4��©RA�	#֐Q��ԧz=T���'Qh��
��:u��Y摳�/|�׆����1Xb���:��9�r�#ZeL����t���R�
���$�Ѹy��@��m���m'�xT��ҚX�2���Y?��9���J<	y�XU�p��0�שJb7��3��U_�̓~7��O�wH�rD�4�J~�'iػv�۷nݹ"��<V=�?�_dpr��>P�Fj0	5qz�#��'�R¹��Q#f��i�P�c4�3mUf�KU�T}"0RV�Q��ԧz=T���']�l���:u��Y摳�/|�}�xj�v�1Xb���:��9��F��6eL����t���u/�����$�Ѹy��@��ZЏ��m'�xT��қ%��*���Y?��9���J<	j�%B!x�#%�!��R���j����U���7�~~��wM�$NqSO���p�v�۷nݻ<4D,d����#��?��p+�tlD�d����D
\^���x��T�7B��l��"�m8��f��m��ӊN��SH�L��k:u)ޏU8��h�E�[,25N�`�Vy�l�Խ�i�^�݁g�E���}�ʹ��W���&�,��}�V��+\.��:8�\���7?�Z�� ����
���o������4��eR[|�'���5�8�x�p���CE�A��*J�o;Tgr�����w#�G��;�˒'8���H|�o�=}����&N���w���D��߭,2KgK:A�}��
[�T�p^W��"��9�Y�畹��*XH����Jd1
��N���J)^�@z�(9Sf&��%�6�^n�kA��.S�ѻ�T�u��)r�-���(�z�	H$#��b�����t��!�c*���ܻ�#�л���|��M=h�#$*�J�����R\-�jڴ}�DW7u�e�ݢ^�����FS�L]w�e�"�-X庬�y�,3�w�M6��u�q��2�j�#��.	��v��m'���˥r�7�g#w����I�SPg�iv'�d�����{F�
���6Aa��Oĉ7p]�w��ra�n�o�fk�8�8KG�
�D	W<��{�@`�x� \0�ʝ�ͫ�qfQc�M*F3��/����>JA���	%��r4yR�UU�9h��@x)��ѳ�]�o?Y#����k�a�����v�6�یf��Z�I,v�Or�Z�V����p�B�y4�t�tΥy_�7��$�V���\=��ovl���֋��:6�P��IP4�~��x�E��W߉��<զ;�K�-�7l�t���2R�UY���C��[���ڽ��H9�d�Ѥ���&�,��ozn�W�Eb,A
ř�l�j�>�Vr��?dk��QY���:$kܝ��kֺ��Z�\��'\�"{
�
����?C�&��Ë��Mf�/��-�̠"O0��I
i� �_:i,�L���;1�+e��/��N��}����?PH�t�c"�M�ҳ����a���c�:���^Q�7�n_�y�;[�J��Oua�P�E�u�-N5�Ԝ�)A ��30��,�z�ge_=�	gR��XW�[ix�
�(��||��̽|���X�,EI�,��X�����ˮ���Z˭&q�*��6����*F�k��;��r�m������٘Q5ӥ@����';���$�o��A�u�qi��X8���SVWn����v2GR��K)�%�'�4�椮��6�~���5#�'���0q�>�اQ;�WO�Y5Y6S� Uɫ)F	.Ȃ֒���F�]��q_m�
nΟ2B2�W�4h��X�ՁRKaƾ�D���(̸)<�eQ��]�7�xCwm��|VI}ճ(�#�?o9��<Tɱ��7���� ��#!>�I����)B��ro=$h���tlR�fw
RZ7�6��~ú�?�O�~[�����wg.Q�5qг��5��w���s`U��7WQ�$i�J�L��]�VhU|C�����,h���`�@I�U�Uy��n�b��q��5�JJ#CG#y�4^+4B������áp�,"��"r� �D��ʰ���g���*���+����{" P�$�Ψ�#!���O`1Id+*I�H!��sN(�#��3�!�"TD\�U��2
0o1��w�9"K�;�z�X^��X+_A�����)VJ�)_�ީ^�z2CKɝ�x�`7�YA�ԟ��ї������7���L�Bo�p4�1-����agj��̜sr���}h�1n͞�^
�PnĜ,�[=yF��;���'21�GC�d�V^{�޼���CCڝk�yP7�b����)C�4�w=n�>����|��,caO"�Ls���R�8���.��T�@0�fmr#��މ�I2��x���G$�Y(�@wpaV��ׁ���M�;���ǩ;߂���\�:x�O��
y��
,�^�	6W���8��>3'E���"6W
���)eLn�Ќd��S�x��,�SL�����O���2��XC�<�m�k�Ϛ��AV�K!�սv�j��6�zm��0iS�Fôl�v���Z� )IoEI���I侫)n�:�C[���~Hk��F�t��͒M�Lʚ�ԩ��6@��d��I�k�S�
�K�B�q�aN�6�����J�ew���^�ny��wk��o��.
o�l�9���e�LZ�״��'�XulX�Y � �!��%Ag�t�Ga`�-6��^��]�\ؔ�F��֊�.EnΧN�@q�|+vo�g>�n�FRR���9P/�]�����'�7hn4(;�o�F���mHm�_V$\�Pqe�/��A�\C��!�P�Z
�憋�S���zv�l/��[DM4���D�+�vIU7=�**��jJJ�(h�Qb�_��N׭�+��eg�߶%?�T�r�ɂ£�,�-jSr2����V��."ɪ0ڨ���K��݁]V�}�cU*��)���M�9)�;�LR�*+�z�M��;X��
(g�:�o��r�n�T�[���J�F��\@�0tXatE�g�q��q�a�`�[ڐ��s>����F�:�l������+/S�,`��o�%�,5�Cr���_�(��S�F��Zc>�K��i��*���5���i��'ݙUV�(I���A�[�
C��B'
�[\i�H�����m
��^бw�ޒ|UWy���p��EWs�o'<B��d�N%91y���kĵA8,��s�sF����)Nܴ-� ������SI[2��o:���l�bǺk�%��TV��
A�U~���<���c���V�����֞ӱ+���~w�p֢�1�y��C�-�L�g�پ�	���h�k���Q�qo>M����%��%v��^�� ���1���%0��͏Cgٯ��}{BAJKTa+%���&
�;/`�_P<�j�X� ���O}�����:D��M	��$w��g�%�~eJ�PI�P o�CT�X���d�N����dӱ]�þ4��b�i�$����#x�J-��EWs�o'<B��d�N%1�����ĵA8,��s�sF����)N��B��
�����SI[2��o:���l�&,{�����TV��
A�U~���8̐|o7���V�����֞ӱ+���7E��E�c��o���[���[7�/�_��(��.׃]0�7#.|�~5M���JK�J�<�"���">�f�/�?t�l`�Rl.�.2�d$D�2�Jdw�[��Ҏ~!�Q]�(�Vo���X���E�@����T'ʩF�,���V�=�zk�YCHmێoc��Ns[@�R�1�=�A�Ӌ�{���=�&%`~�^\[{&�~MSu��M511Ɖ�%�8���gNg��63/4��_��l��O-<��ٴā��"��E���R��N��:�e�TJ���L`܈t	�{�^�l�%���LT�
ӳ\��ʆ����ⷼ��i��?:~h��>~�3����
�DO�E����;���cw�)R��!���^.�;��߉�r:bd��C�F����'�4�LG�r�H03��(̽pC{�4��3T3����b��r�1a���N��-V��.=���]y)��N����2Hr��/%��	�P�;�_(�0H��!��D�,��dwc��Nx.����2!Z(�����>&z5�Ĥ�a69ME԰��K�r���.����ބ��O$��`武7"|l�,<�õ(}�g���a�ӱ:���Id�F������.�e���J�R�����.�ⅅ-%I~��M����Z�Eu�m���U;7��vݴV�.�"� ��~�S�z���Ħ��(CV��|�FvbZ��S�丆Xl�~�$"'��=
�3���$�$=�%f���y%~
��&���ؒhخ��p��4�6�r,��rfg/|,�42i���f�	�m���5ZU�/Ob
�IvL�=�� �P��s�6 �y�23����?�L�(��������ګ�ZO�\����oۗ�=UT��D�X��_Å���ݟ)%Ԕ�)y�Y��?,��D|�m$�مaW�j����~��V�.�r�R��]R��*�e1cn�~I�6�L�뒟<�H��S��N�~�x��<-����"�×"���o%�Ҍ:��Ͱ�$�v�!�����7v�o2Z	�@��D�B��r�jߒ�@8���0�Srr�jH��j��YUS��4ئ/�9n
�do��H�Y�4fn�4���\�5���T�ۍ�L[Լ<��䂅tz�"'��I�]��I9{"�m���O��,�����&Lx�=��
bT����V1蚲'�2�!�,���͵(�T�d�.�¨;�m��f��W�[jۤ�ׯ��.����pI͈p��m_�f6�)<��@K�EG�/+:s�S<�'��|�c���r���fA��X���,����z�-a�D͸��fJѻ��mA�'ܛ.���Z�;�i�����e���S��bF��?9��+)C~�-��G#&�|Ҥ-�EV��FMץmy�k��<�[�{��G�uA)�P�z0�K�n�N��eҵ��.m,̯܉�Y
6�Y0c�y��4��J��D�D�Q��MYL���AX��*�i䨻���	�g��N�Z�Rm"�P~����mc��'�l*�tܣ���i��ۨ0ꥦ?�mP2�N-,铅8�i����	j�l�q+ן�������{�2N�Q$~v
7m�uןW�ߢ$�1|�tg.��i���kc%���r��g�Ψ\}�6�g}���o��o�9<3����&62�]"17�n���o�km�%W���FkCF��[��
���r��Y*I�k��P�eR���g:���0�,	�gx��*�6�4�iJ���F�s?�֢I�u̘�+awfZ�`�y��ǽx��tç.r��2�<7���r�0�d�f�
�{Ҏ��j�E��^�T�L���tO�6�YTҜQ�/\Y�A-��H.�X!E���Z��������Ў�&z�f��kp,=,@�dNbjx0i���HYvO�Kw�z�Zx�m5#�,T���W�+$%u�GNKw��ܔ4��;4,^�)�>��	�H�<�ԅ'�z)Z������粼5��f��1.J��_���ҿ)K���(�ʛ���%���!Q���&P�M�f���x����&b|M}���2߈y��ڋ��ؑM	&DmE��^Piu�Հ�f4[M�C��S�|N��"�JI��L�]����w��71��d�~h(F��`�_ ���l�+'�M�g�p���
�׌���9����K�p��2L�LhBPeM��L��`?�5�}�v��0�K.G�qs]e�+JF-O]���H�?�P���6���{|����d=G���t���[��7 *Y����@�*&HV�7�D�7EySRv���%��$7\��\��/���9h
5�$!;�Ug���.Ȥ}R������dJ�-����.r%��u�ݬ�k%�ke�C�n�In�5�+����b	�=-|ʤ}���QX�+?����V<Nѐ�t:��(�So�m�z�]�E�%'_��ew��w�b��g�����!c̓�|� 
��T��a6͞�-�*±��?#�N@n���R«��i�u&4!(2���&W0��;:��p�K.G�qs]e�+JF-O]�
����P���6���{|���K�C�r��t���[��7�����@�*&HV�7�D�7EySX'h9_B_�I]�.��֤���Y�(�4�J�9�n1"�%ĉF���td��{,������G΄�>���Y(�I�l��rM��-�&�%~�a��MU �H3��̪G�I������\8�B@�P �3���=�o������C'��9Y��V^@��ō��;%�A@B4Ǜ�@>�	J��IY�l���ނ�+^3�;D��S�#�$�U~�
0ΤƄ%T�=�����`?�5�}�v���d�v?˷=�/"��-O]���H�>a��
a(y�ki'��{|����d=G!�;�߰|�M__��[��7 *Y�߾$��d�kc|$M�EySRv���%���:B��mjO�78�(�4�J�9�n1"�%Č$}R������YU���Q�,��	v+�ַv�Q��Z�s�䛵�[�\�D��n4j7U�@���t��JZ@�CRwQ��R�\� 2���YOJ�������.��!��hT@�nݻv���C�49gS�1� m
-���y3
,��-��1Tl\]��7,��N^�G�h�ƣӆR���o�X��-‘Pv�䓌�z��3	&U'��C��:�E�R?�G�Z.35��t����]�Xk�ʝC���9k��
�sk�:%\qWB��q�0X�_�_q{!�Y:��S@d�z�;���8J�<p�9�c�	�ۍ�?���d$��[2�&��\��]Op�}�L.5��x���1?fk��������F#�3UPN�ʹfi�Z*9w���_K�&�S�N�[U�Y�^�Z��i ͙#�}�
d��YH���(POX�@`v`T���lfQ�u��0b�u�9�s^���<�X�����)���X�#!މ�[���]���fʹ��S�\�7�27�
z�q��B.���j��3 M��3�q�ljuÿڨE�h
��:�?+.m<H�D��w���l�?2��Q�|�z�Y
�GzCn'!N����ڂ�?r��KL'�GBS��q�H�����{*���CY�G-
�?_�t���܈�7Ȍ��"�Aa�%jVԄ!��������o�l�lȍ#�^��5�"j�_���45��d	y�n�V�L�t�w���E�.e�8�1S�-n�GO�Az�==k�X������� �9�7�����1�
)��kޒp�[4�.9��|Fi���V�j�-���U�A�S�I}�Ú�[�%�L�D!嗂\��)�+��SJ|]h�-P�S�]���+�e_��53�c?���}�{��Z��Hl�$��Ţ�I��.R��S��a�p���ܠR��-�Y�D��WKKB�W��lt�97n�G3���s;�C�C�B�F1�5`�2���B-P�r�(��h-���a���+o��#;J���E��w=*�Ot��g�+�tqA%;���8����x��s3}o�h����ܯOIx�IM(��]��C�]�jE��+x���7���qm��&�9�*��V]Ϫ}Y�H������>Y��q��a�g��}�Nю9?k�{9�e�S�s�u� �eo�j��������M]�4X+6e���+�\x��[��a��L�+�1�	�n�l�"l�R?�!�!�!�!�!�!�E�?�Nfҙ6"+����l
/�9��]�}X��C���p�B9�LP1[pOʂ�9�"Cl#�-c&M�h��ZX������Z �&딞f�o�*�G��ť�r��CjT��e]f��޸)m1c3<���9q���r�t"b��۷�p�8/�UYv�u�96��j�����z^clBj�r����!'��ڍ�z���)�R?���Y�g&�3�o�?�!�Q^�QH!��e�N�w�&r��t��V/�>�!�	{�:�?�$�&�cB���cDR�U9�xxȹ	��*{K������H+�eh;5�mQɉ=��h�e��&?�Eq0P�r\�g�lV�E�Kj���4 �A���+��GT�F�29͘�(FZ��~�����wSV5^z��c��o�t�E�|:m��_Z�9�"��V�'�M�$���7���(�����_T�D��4bOP��U�8�H�c�s���4��p��%��G�k~F������Q.�.�a��ߜ�e��k+�=J*�?�����^zʀj����v�B%�'.s7#V�TKQ4����{{v{g�5{�mW�f���cͧ�x%��<ދۼ
��u��%(e)� � >e��`����ȳb3P�vj�B[6�$����D�����\*�نoK��4i�v����W�q���N���,��z�X/]'gҴ�<�O�;���h��Pm~t����4�RX��Jس�
��EY#yw_��1f��K�"n̑��άJ��u���rJ~.ɷ�dΪl-PsB�	o��=M��\~�B'��S��H��4�a롯��^���x�%�yCz�/o̦�s�\J}5w�&
1`@�Y11C�R��=�a����C;c;:��vX���'�*4G�]�X�ݲv�5��p�z��\,�����#?��P^+.�8�9!�i4gۣ��P�S �Ͽxm���\}�*�~�EJ�*��ę�;�\5��P�kX��*E��_���U�����J�<�KE,��U��H>ʷ��g�?e�čO��Li.J���m3�2�I=۶�A���j�ջ���f3��ـtʕ3�-w�+
v��b*!?I}HINX�f}�w�1�������+������8������]��=��;D�B��I�bы�U��\p���V(0:���2�u�I�|l]`;9��ْaG,|�,�|�B��ޠ$�
A���T3��jC6D�"�ڨL��Rh^8,�n�ؕ����}�6k/���R����>�,���9}\�.�O?�Zw���h�~T��M��,�6OKg��+���-�[_8��p�6l�ւ�\���s�Yky��v�T�v�u��]&0�?�mE#��{��[j]Ǵ��*�y�<�sI�i��ʸ�L�z�[l���C���u䘞�d�M�Lea�O�
�5YV�q�DL{K�m�[�5N7 x�F��=��jl�I�J�*�6غ4�vs3�$
ŽX ��+&=讐�ޠ$�
A���T3��&�3dI"�ڨL��Rh^8,�n�؜�@*y�*8l�:_/~�]���'�e��{�r���]������S����OƛK�Y�l��ϫ<��Z]�"[���qK�l2���y2�MÊ��9���aU���+�
�.�R�붢��n��U õ.��X��m��G9���M�\&x�J-�]��!��]�䘞�d�M�Leby��
�5YV�q����������E�T�r�i�T��0/�l�e,qT��`�v"�
`g	�m�A ��X�sieG����$pn�/k�8J�p�MHfȒE˵P�EȤмpY�b��#}��c��X�|���Wjrt�m�we�i���v�y��;O�h[�?m.�g�'����֕�H��P����[-��l2ّ��,a4�8�`�5��aT�]⺐�R�1�)��k"��n��R;R�=���V��l�G9��4�AU��g�Ԣ�eF�v�U�~I��F@�T�"�ea�G�|��P/�=A�Q~�
d��ZgX���)[dUe��1S�W_q�������l	j�Mm(�x4�B�z�M�i��*$4���c
�K̔�H)��n�8Kc��b@��u��gS]���Є7�&3�$@�6u&wX���{\іaw�dA��;�M�ZϫgȒ�D]#fUk��t��_��r�6e�1M8�^๝u�	:O�}V7$\������r�P��ɗ˺\��)f�n�e�$��et��NY�%�Eً�D��j1�w��e�\�+PFE�ȗ���*.�F�Z�V�{F.�v@BPNXZho3�;Th�A����G,�i2�3�s1���@��Pz�*��HXE��G�։�5�oѻ6<Z��	�&w�/�gČ������v�64�|4h��O�Xd�*8��*�yJ=8g�l��=49{-���	��$�y	�H��i)��v�ـQ�א��k�'�ވ�P�#��(^�g��!튛+Q��A�n`����¢����|��;E�@G�5��0+}5�.�t�v��(ɦ�O�kzT��_�Ѥq�*Z���b[NEBΩ���é��*
���IT%P�BU	T%P�TJe��d�Y)�H��|E����e��Id�c�^<�rA�aU�Q�1�����,����	)��Tڂ�B2�I�א�MSf�� �"~�&�BFB��Qui0�4��Am�X8봨� �N!�"��Rt���E*�v����E�����,�"�N|XI5�E~�U ��j���9�7�m��
�u����L�c:+y��n�����:���{�jd�3�Q؛�,���:�v?vɼi�,��B����>k�g�d��,�;�YH(�uH �4�CN��e!ξ��������ph,"��<g�U�S%�m�4z��AI��utd��?�����.-�3�rY[

^
bjg&и6�{F*l��c;r:c̵�.T[��4����Ɉ�]���ȃ�n�>.�l&�&d��W��%Ϩ"$A2�N�nc�@�׏�l��"�ARxh��TE��tg^9J�r?̉`2��z���A��(���3����e~��D�x��D�U,�o��c�X�z���ߟ*Y��=�
�9�y�e �?0�/
�̳Q��e���w%
�c�=�_���������Da��c�V�)w�ɉK7S_������V1H�)׸ /r��)�[(S�b�I�3)]��	���4��;%�8�b*<��KG�/���b>���!�2����=z����_�_u��_�ϰ������a��;�r#�*��Z4��ӷ�S���޲��M�-L�Q�V��&jr�FV��FO����b�?�TE]F���	���/���F9r�K��OU>^�F���w�m<�몛�Tz�i4�:��L�z����1�g���$��,u��.���K�BuJ�;�~�fNZ�O�B�|h�ǰm��8����%8�@�f&4:8
�	Bx�$���}g�Q6 D�����n�㈏]��c 
�EGlž�5��a0��R8��&��iX�N��(�
���0�$�b	�'�~����*�CP�,B�s�}̀��4����2�G$\�k�՜t�ͻ._��Wӥ��\���g��T�&u��8��g�G}|%dc�`�yG%f2�cC�z����0����\q���p��;g��~�/徫O�c��Uzw�F�D�_�]C2[�0���h7�ut#Z�k�kZ�MGTQ
��=����	�Є�)��B<�1VR���V��0v��!*�U��11	��[+M��zQ4-��q}��?X*VtB��/��&�����+�_	ɶ���-V9<�`9�?��Ҿ�m��`0�`LG�@$MfH�eL�`E��&�3XT+�A�l�+.CR�S��3ʹV�Ox�U�+	�G��oF��{i��2�݂a�-��k҉8��!f��FÓt)YW=s�f؆LYȅ�\��_�g��@�}�	�؎�:ݨ�2Z–h�5�
[��p��3g��z�����a
��U��tQYO�S�S����eC�Nz���G�nv��ᵡ���b
G�$;��?�y�u�݀�f4[M�S��};ZȵM�]�g"�	�V���|\nX�uD�`)
D�#Gf�@�0��\��Ji�SYtٷ�U*�k�<I8I�?�t����!������$��y���&�k�n���,�2�v���%)(ĩb���GL/L���;��Os/_���^�����-�u[��������Ѧ���pw��$h�Za��4M��i�9AJ���Jߕs�o�d�w�8�(�4�J�9\.d{�����J���$'��eV~��Gu��r��W˭j�d�Y$
���!�7v��t���_�\h�n��������Z@�CRwQ��R��:����F��*%J�v�f�wQ� ���7~_
ΝxJ��_��&E����%$YJ�g3M��`%���}K��G%>�:�;MF�wr��%�wDO���z%����7�iY��M�M�Jet�jo
7���d���������7w4#���vg��[�sgam�}H�Y+7�b��V*����&+��R���������ҟ�p�m��?T�]U�)�Z�†��|��Ķ���ƿ�ʼL��Y�'��8�l��F��U�y�e�H���C�q�]T$�H}9��W��I��FT��X��XtD��v�B��'
�v�%�niBE|b(�
%B�H�H{��c���&h��(���Fـ��
�A�#��KU�b �u�9 �I�Iġ+VjLim����+�q�́3�(\�7S��&;��uA3�j��*�}��vt�t�0۰�>�;����Ia�����?l�pB@F��<��5\˕�H$Yx����Z��EJ�j�Y@��
�0���=TNnB�M$y�S}�,��	>E�ٸ9�vO��H�����-r�t��=�����+n�� ����7sK���|���1/�'|E�i��q
�9{L�)��a՝�G���dqιC���x��vW����>�GV�u"v>��z���ARࡿ./:4���֧b���h�,�c��F��A�����<�������w$��޲N	�M�C�$�ɶ.���,ұ�U꿺I�~U�IJMG�R&��
R�xn��qF�,���l�xcg��	%�vIQ�k˝�BS�~�B�=_��:,ؑ�����_�AJ��߱)��7��dQ��y�I5mO))lȑ�d�}�E_��%�Y1T�+NӬ�}ON�WgZ��觥)aG���M�,vݹL�w�:��6�D�4V%z��\�l�%��{��W�P$�+�-���Y�2��~�'�)�_��
��+e]"��N����h��A�#��K������Vȶr����3���PF�e��r{�w�BP�ݓF��Av��)Y�J�9;2_�U�҃���/����������濨��	*x4_�4'�l]BБ���!8).��V
#�?e��U�¦�ζ�U,���:޿9ٶ��T;z�ů���y
I׭�~�����T�7I�(���>k�Te�d]y�z\���yc”�לT�
���ݵ�}T�-�[��q�`�����Ywˊ�t�����K\�|g��y�	�X�E���S(��0����5r���Dw�%���2c�܏F,q��
;ܹ_���rư��%ힰD�1L��#e��LoD"�.
�}�LZ��{V~�K��@?H"�~����~���V�΢�C�AN�&7�같o�0
�m���ұ�(����ͅ�L錚Zl�vĻ��8�k
u$����Wv7�"B�-d����"[�/�?P	� p13��(WT��HУ��]*oHȡ��y�YS�8��ٖ�i�Q�i��Y��V+��<���.1X3q����D'6��bo�]��.E\���-�f[::J����&F[5��g��
dϡ��|w&.^*}s�G?9����i�ú��+�(��w����{�{�F4L�3���~��G2E��h��z���|6Y��	zc>��HY��aZ�D�%���D��qi%+��`&��2!����,l�k�jAX!|�uz��AزdT�/��7h��������I��ڕ�K�Nx��o��t��KR�[m�����EM�т���F�&� ?G�V���:w4��!���yj� ���nh8�0��ľL9r�#ng�o�	�\���kY%����'|���,��YC`���5\V��ڲ&GJnֳ3�2*,��EUȺ*��U8��3��\e�~6
�D��K/̪�T��۲�_�'?�$�R��$�R��~�ȗe�O�O����޼zWWB���z��I�(���
�ͬO�#��]�8e_�\�6�a��@M��ffX�|n�J��Y��ɄA,�S.檫�ҷo,$����I�V>	 K���o�NЦdaK�����#Ӄ��PPOô�d��{1m֋99,~"մJ:�R0�~Jg��|p�Sy�G��>���=�J,��������pw���Yw���9I�vXf*�U'(/̖�h;7Sr���:�
qJ�̤�$E��ܩ虔?'����fRv�>s��M���*JB��m�*e��ae��ٞ�+u��6z��1���gXu��%ﭻv�@�dF�k�k�W�b��Hn]���yJƻ��<P�w\����7f�Y��݁��q�
��-�D�5�H;%H����=�!���n�yw����������P�����sk��c����b>6�b�k�2W����`���D}˂�2�����O����n������F��"~Jz"d����X���S��|@�1rG���(L�2W���i�ߚ��ҿ��D���j�Ū*������a�|/%U�v[�u�a��nۖe�i��6U�q\V��][vգk�w�oYu�m�SSeqPӖ
7T�5����,�tܔ�O]�}!Ig�j���]���E��Z�}�4r�=Z�!M�e�v�)j�\�˖���X��u��L�-��L�Z����=���k�~��B� �dy):�eA��8��q�����5���2A��6AѶ���϶g[m��#��F%q\A�K�s�#h@����>��
Qs��Y��|n'EckM�*�\ƾ�S���)�h����cv�y���?D8���B�3d�^�j��k���J�SY*���{���C�AhXr��W��n]�e�dW���nY�bZv}�d�V]�qZv�um�V��y�e��]{`U�%MLU��CNX4�SH�詨�'�rR�u=v�=�%���z&��m.����k�F��H�ʈ�k�S~��)�|��=r�.Z�7�b�5�j�F�,���2�j�^,����� ���A:��Ru�ʂRG�b٫�d%&gG�j��4>b�cZRN�s�����?��1U����ᑴ {��qpՅ(��t,��>{�D#aZ�%�k��8ȟ�����0 )��cv˙N.�Ȟ2rǣ#>��'�o5D�_�5ZW�ȑUU�SصF�}C!�BÐ�䪾��r�,;"��Zݷ,�ӳ��&ʲ�+�Ӵ�n��F׼�.޲����*jb��*r��n��kEMFY>��������)+ߑ�y'z6���{yV�$id�ʈ�k�7�M����Z��,2��w�b�5֯Ti2�i�+������aD��W*��/���ϲ-+Tc@ᢃI5Q>�f�`�� �Z��u~(�9`k�p���G���x��e�$�IՓA�&�̵�ˮ��ZT2.��T��pk�E�ZI"��
��G;&eV�$0d�8�g��>�1T�l(mǰh	:���o���N{.I��U^~���%��^Jo�oa�n F������o�^�I2�ۥ���w5�Ls�F��0�A��Q���b�ꭵ[�<V_J��mjJ���XYS6��ˠl=M�T�5N���s�R��~3
��ݝD�'��K|��DBp��l���#�u�c�;ǫ�n���!K�W*딬�٭X�b��f@���Nb�h*F��ol�n�K�7�@	�d|���+:�h�#
S��߼R��_�'���M�
GeU���o-տ�oRx������!&�s��q
vp�^/� ����g�ѯ�a�2����ps3�"$Ka�^�(3�w�Q<�l�
j6�*��_�«rV���=P��Dp�F$`aG?C�%ߒ��ɮԎ�د�.1�Vhۋ�!��}����{��(uD���3{K�oRyڙ�#tȽ�T�	y��3b8���ukq�͇���7j�V��6���Y��5j�^�^���B\�k|מW����
���b��w"
U��nC�7ID9`���x8H(X����,���P'@��#h��ق�Vcr�W�������C߁��%���G=CU�C�kb�3�ja��q8�rw�Ԫ�E.4���0��Y�b�`g���
�����5���ɞOL��pF��PjM��P��R�`I�w6����ר7jI��1��-g�J����
��֞�Ү��a)%���HM�"U��uo&��/�!2R����&K�S��h���$J̿io�W�)T�{�\ᇂs޻wE��w��7�c�'��9��!�Q�m6����Pґ�&�o����7~�4��;jI8�OU�~�nbn1�鞈�(q�yh,��"�Y/��Z�&���)j���*�¦�'�K�<ȆwU����F��Ge����"EM��c	gNe�-{C�0�6�
�@z���L�3���J�a����5(��|]fF���s���گRo$<2�X �{I˝ʵGc+ax���p���4%5�a�A���K'��M���8�0��D��V|�
�s�d��*kl��o��zJ��nb��Ԯ�����{t,�����f\w5�c��G直
I�Š��(��CԜg���76%-^�f�E��N�i�����Y�ZE5%��.��Z�����9��T��-s�"g@��2�?Eoa��􁗴@�^o�"}Y��%.�W�����C��}=�Owý��jǬ�������#w]gW+��6w`���H�d�?ӕ5pQ'���-g�J�,���ԅW15����Sї!��t�RhB�,�Yȏ���_���Q�"�52S�b���Z={P��I˨�뛻[�(~W3�zX�WP!�r�1�{�
��\@Z�6H!WRI��IK_h��c� o_��M*�gv|*���OV�y��9�^6�p׃7�+Z�}�vTU������D[u�o~��p���UU׿�߹U֖��SZ�B����~h�����2`�Ķ�,�t,���'��o���e7�<3Y�j@���c#����I�������ips~#��ü����n���]?���ck��!C{m���Sse���K���T/���	
���Ԋ�؎1""n-{��^R�������6��2T�E’#ƕ�>�іf�*�pI���⧚���O&�*��It~kAq+n��.��IYZS�
�r^��$�����#Z�V�]X�.�������������Iƞ�fpN�Z0����V3���Eu���
_H���GY��ѐ��V���.��튺L��K)(�i����ZZ�+F�*��I���H����Zӱ �Y0��5��~Bj8ߘG�s�+�{�SR"��Bi�-���$`V�S
�%	
9Ki��΄P��&pU���~/n�Nr�m��m�W|�G�j�Gn��� �\f`��.�������&���&��P��U��;1�p��l���FQR2��A��3A7B��I Lt�h ���o��(�Cc(���Y�DFdc�n�wre�~H��W��@����P�fu/=҇�'�[���t���J
����j���]}Qᩚ����jY�����v���kᲖ�x�yxdYR��]���m�X��������F��h�r���Z��U`е
!Tx+�3Ĭhj���6��q|C{:�3� ���#�Z!�!�7�7���M
)R��o���y
�%D���z$TleR�J�+�J�v�J�t'K�:��Q����������̦I���t���30����d�!W$M���@��Z؞����N����Š��/�`a�0MP�!�6��cb�,ɲ����CnL3�A���68�y�dxm���,�� V��=��i�+��B�5[�Z^�kw���\�kJ�f��%�.��~۹ѩ�^WK�-h�'{�t��nP+�ٷ�]Y�1܎-W.����#��=9��{�����nR}:e�^z�
���S���������H�i�]��=��U%>Y(�a1��
�l��QI�	R-&C	��R�J�/YOUKQGA3-	3u��0�a������J�[�ʜ��d�i��I�̣3�Y�Hp��cj���wW[<1%o�%�7�A
b_���*%�7$�0���1���&ʪ���Ji
�0��ph-;G�l�t' ��ۿ�%�Y/�@�˔{m^�%zY(Q�q�\�4��QF�l֕&:��K�Z���w:58C�����Z�>N��	vܠW��v+�7�;�Ū�]��G��zsn���庭�O�L���]��R�K��}�=[%/Z��[��/�U�jR_�$��#n�1=���) Z��ZL�%P�b��V'T�B4�-��T3L�"B�ZQ��| Y)����*¦��n?ä�fQ������$8V䱵O�H�����x���i��H\���@�"O��!#��B�lL�0�*�̛*�F��CnL3�N���?�	C��h��+r��W��^�JA��j���[��E��I��_���k��΍N��^9kD�;��:B]�(��݊����qj�tg�i�!ޜ�[���m�n�r���-"�� W�MJ�.�u�y
DkJ�J)�uw���T��]d�=1ۥ�O`��2�H�J�i2 (e3���V�Rm��� ��'��YI��[Іp��4�����!�������Z�u@���r�%�G>߆�E���w,���xN{,�wbƸaB6���!0¬dpD�rX2D�"R$z�F;�z�>C1�B1GՅO�c�^d�2v�k���?l۬��w��3�:�����|=~/�=^��\���9���+����un���R�(�Zl�H�[%��T�y���:��:�e�����V��ȇ2��	�R-,����\�p�1j�iG_���V�1����Ⱦ�_pi30�;�O�.��<,d\�|���E]��V�G� c��
�>�v2�H�ռM�!��75J
�u��^5BK�-LyF�]M>4am]Ewm�Κ�e����h��:�4������o�f�&�L%��C��X�����t~?��`T��ޣF���%�5�]�i�2�g�!�!�	-AG���}H�Hc�7�r���Iǹpܺ���mޏ�A�U?�==�4��v��~��m�z�D�S,U
���i��垑c��X�TN�O�b����ɵǹU<����)�mI`餓ceք
���%Σ���Su�g�?~�<��|q��Ő�fs�0�Ӱ���B�b�W�X����H{�?'�^�{!�Ń��
i���eΚ�"�c!T̔���W�22}� uӍ��'�V�#خ@���=�Ga�:�A8�����h�R��R`�JbMg�,��Ա��E�F

Fn�V�4+$ݭg܈8��ַ�-�6NK'��ҕ�X�Xr䝪�)
�L���]SMK�������k�KR�y�I&?��o�{x��Y�a,���ˮ�t�x��e_���GⳄ���US:ӌB�z��)+�1n��(�f���s�+Q �3��D�CE�Q�_�q�&X�%���|���I��fa�3�m�7e�|��� 
�3��-���~Ɇ�0��Q	��b#%vG�*S����]�$�4�+u�*1@�	�E*��������٬9�a��:���Jrq&fR]l'7Y�.DH�%����M�Lop]PR��$=rK�x�R�&�i����B����Nቾ�)�[-P��~Ȱ�nAe�t�U��yr�s�����ߐ��m"�>J�y*}��h��<F�p��m���֕
s�*��IЕf���;�����b�ov�-���Oԥb}q�����U��P#<���=��zP�2T�L�D.5#�O�V;�g��P����RӒ́�fD<L�ܼ�좑�σ����b�Y��~5܅�/�R�u~�T�]�u'�Ė!2n�ʆyy���B�f���4ʢ�ў
B1)M[E�\���N^�aϓ
`�И�Io�98�3).�9��ϥ!r"G�/�wojlPrc{.�)m��%��ƚ�?�7G�Ol��/z��n�v��Uŭ��}Wu���5`�q�\��V�.�����s�~C�����z��W�EW��mj��=�^�4�Aѿ:ҡ���TT5��*�aݤw5-C�U/�������_�U��ϟ6xM��{=�1�6���I�ܫ҇i���Jf����~d#\L�w��J�ͥ�NM���}��o�.�RX�pM
��c`���?
�"ݗ�R0�~ч�0e�yx�Ld�lz�T�G�_J�4�+�h�E�<&�bR���u��DBp"{U�s��X2t&?R[�NN$��K�����>��ȉ����ڛ��˪
[y$��I/j@�$�-=�#�ޅ�雦��7�E1ke�T�����,��r��z�Yun�~���;��`ͤZ��V�%a{YV֭�s���N���*��TT5��.`���G�e��zU�e�ڨ�:��?R����n|���o����q���,�+�]H�����c���kA��e��k�js�� !r2������2���Y0���m�ج��a�H3�@�;�]��|T�::�?�FP'1�8�l����n
��εXN��c�0ݤ�]riLL3u���[�����o��{� H�a��p��G_�ciG<&{�FJ±��������;z�T��X�GZ)6��ԈNA�����x獝e�˵:�����ۜK7	lglN�Kޯ5�fPv?�At.�B��.�M�J�t�o�����B�lDPKw
+��s���1P�4��VL<rUW4��M%�Y�?�cy|`��7"8MW<K�n�ܝ����$��
J�H�;�"آ���v@��l���ƍ:�h%uyf`�Ȏ�����z�q'�kpX�
K��E�R_|ce�N/�k:.���4�;�>��+�q�
�Ұ�X�9���������7��!=�������o˸&�hg7k����)�I�������!���Kk"<pR��73�����U�H�k��hɖ*SAGD�Asnu�6Y��ׯ��ze���ʛ��	2�l�Wlr����
.��Qtg��V���FS�����Z_�r��U��퓅��W����i���ڼ/�mk*�>�K�_��A%��?3r��L^r���Q����vύz��Q!P����B'B=��,Wc~%��_Q�Ԫ�j�˥����=�7*�(W{�{
���3�����1���̗��8���t!�sC

��_�HnW�����Eok���̅+��<F�]׈"�3P���%k���d�~�L�KY"���C�U��+MTө�+�{�/�d|
���b��h$�i;�4D�ˊ�t�ˊ�-��2�nh��}8HB���	��^Ӄ�z��=aӋ4����,8p'�D��	li��:t喈�֓#��V��i�u1����2Ћ�C����0�t��{�D��r��'�߇��g�M����<]����|L���S�n�@��+qH(�
�� Ms@�-R���^�޵v�)Q�gv�l�����'���{of�e�L���n^�x�>5�ƚV�-,{j�u),����C��2�d|v�j�gz[ �D�cm6h5��oA��y�h��,Ps5��r�H��u	Rs����z
�T�N&���N�?…ТFDV�=a�Yӡ�-+�$�v��_CԹE�5Ԫ�uX�7�{S����*+L����M�&��(Х>��M�Ia�NS9g'�TG&̢�eYrϹ1�HD�dB�^��$��o�жC�����E�V�D'�h��U���w,5�–�����z�.E�� b���]�^�>�t������x#ySr��q[��?CXa�>���/"�D~l��3���0(�	��x~���<�rNc��N�P^#C��~��F���Y,�y�c7 l��q��ԵŸ!��Ţ�cM�(-��?�C�@��a�8���[^�Jֽ����5�n�TB9�L��<f�I���>��3�t��ah��~0���uX�?t�G:\��`�]t�?f�a��`C~bG��pMpg�����1��t�M���C��uw�{�ߩߩ����v��TMo�0��W�'�]jo���,͂a��
��]��X�,�4H��Gɑ�6�
d���#%>*�al�++g5��>�m�0��id����X��H) ��Y��p�LTKδ�@(L����,�j,a�W7_����j�ZB�=SeZ]���G��m<���@%fI���%p��	w$�$��C��5��9SHA��h�Pa����I"����—_),H
��,˥&.U���b�<��2I�Vw`�	��"1v0����5�
a���N~N�$+��1-���8�Ts\:�zׅѕ��VL^ٖ9Q�
n=�P�]�Z�Rf��lN/�J�W�9;���V�l�v��24�2J��Գ��)}o�s���PJ�i�h���oZ�÷`	4��zD�۩62y=��T�^(Y�2�o�mI���l?�91�JLQ�h5����it[���;�qb����׃��Š�']�6]o`�a��s�S�e-�:lj�����Ƨ ��2�գ:�v�ܑ�we��bNc�� �}�
Y�Fп�F��O�}i��FW08�+#��
	QKұ�
�Êx`5X��K�eΉ?ʨj�����H�'��_@�˥�����t��y2���
�M��H���R˔)����^��,n�+���~=I�����c9��+~w"�%�&�P��/F��^�,{�|�h���~:�Q��XY�7~ׯ��n%���v�#LY#�F<#c$'�aPݔ���l�ډ����tx�X��d],���C4�^�u�ћW���9A�\�
-7h\�\H��1c�)$�"rK��7�ϊ �B:�
)Qʔ�Td��Zl��$C�=���J�=#�єp`�9�(�-���%��N����|�V���ף�BH�~@ب_1�j*8Z��(J�!�Ta6�7�͟*�YW��LC��Ԕ)Oڤt�R�զz��N����"��3hNW�	'k272�9!�8񉪖��T��������ܛ�����\�B]�k��r��b3ԏ�뫵kF�Tٕ��R�J��o���b��~/�-ܜfUr��K2���SF6��=�r2��-�Cp����P��-9.�K�/3O���}A���
2R������~�~v;��p<ϒr;�|�b�=��,/���Ah��C�?*%� />1�WBn �6��"XF�(���޺��`�s�6bì$
'��k-��$�,I�Y.�&8 �J����,��>�
��SB�^s����rV������8�|���2����%��"�4�B�wÚQq����b�k[�V�1��|��
�[i���x�%xlk0�ۉ�+�%D8^2ö�K®�����皛ی�)����N��Lb�*fu5��G�r_���e(k�,�����ИB��9b�99vAxS����q&vB]HOY�RQY�ʂȸ(����1��q�:���)vȑI��� �o�?��������ۅn��F���k�\ѥ�Đ0\�B,zN7UI�$8�]�Z�4��ñ:ԉ��	�i9��ju���J�Cngw��V{8˦[0�#U���8J��=F�*��|7��<�}�T5�~%�Of�_E3�1_�l�[B�f�o�	��#�%�_�r�=:��u�5��W�D�ҡ�m;@ר� �u��/IǴ�Ր�Z�l����(@V�Ym鱭M����&!��6�`��f��ny @/��r�ю@1��A�Ur�MW�3*<˨ʋ���^���I�t�m ����QXrT��J"�sb�����臨ߔ�<�(��G�4�uFc�yF�e�!*�� ��A��,��`����s���QU�:O��z)�0P��m�]C�$�u�M��S7�;	]�T�K��B�}��-	�' ���pG��D�����7s���ثi��DUd���]�\�H�ȹ�9Iۡ������	�l�#�ā-Ѡ2��
���VFdCG���l��ô�
|��#�-mp:�#��;�R��f����m�����Һ�Be�`�¡5�c���}�r�^�����/�v��=�����*����%�3ބ$��t�z�S���d�t+�2�@'��=����6�ˡ:�L((��V[�7�t��$�@s�
̣��	5}#��}B��;KB�R
	Ո֐�~�G��9L�)Q�%u':EN��p��)xs��ߢ�;�)���[��u_�Qc8��{.{�X�k��p����Ѥ�,���/�eeE-�_�]�Nl�8e2%�=I�eu6�i2Ĺ%	 ��Ͼ���s[���4$[�J��Ÿb��}�N
-�У3(Zk@!r�"ʋRC�>-�%����V��p9˜ZH{�����͐����S�ڥľ8�Yt^�D�np+l�W)4f�E��$�.'�����ջ��k}(8e��q6��+���ib�f�����̈�Ri���K����7�b�v��ߩ`1�%�BҭQ����\�%4�-�FX����ۿ�٩ڜ9̰G�k*�0��e�,�@�x��M[�F��{����0��`�|��&CS3���G�,���G�׏F��B����tnC�1sws�6%N���=Z�V�C�m���mzY���E��x��I�d���Y
�J�[!X�}	�LZh0k�WG�m��D�D�dž���;�w��Xǯ����7�	V&�ZD�\*h�|�6�$i0���
\8��]Xm^?Hj�*��|?[�	��VKb&��A�F
OI?�y*w�^�S���`��^£튮Kiʇ�C�#�!���
f�v~�g]5���I�[���|����텶^�@C8zc�2��P���~�;Ow��v���Qr���9�Gs�s���_������Xms۸��_��#�'Q��8>�i���ES;���I���"A�c��m]N�ۻ�_$�i:�69#`�X<���!�}�`���KG��1�	������`	��P���2
�Ӑ�{j�~>��
�qCY�M
&�(��%��ܧ,�@�����G�sM��2�&�aA�'�E�����&��1خG������&�CA|�ċh���\�\�Loo>�h����޵ϓ��tt����r�q&��ce����r<��4����&GE����޾O~~?Ws��|]}�z4�y��v6M�ͮ���|>1�������6��M�9V6F��t��/W�[��������~
�X�Z_���y;9��D��TD�1[v��e>&[��/f3���C��h*��˛����І0s�I-H�P�ML��lJ��W8@=��Ea_0��ޢ��"�8�vz��h���|�G���E��6t~ȭ�d
+��>}���f�sxĤ��ov~m
�0Jw��w�����4x�K�[��g>�?J�o��pH�Xn�n�C,x�iOy����䀘�o��3S�α��k�G<w�a�Z��3�V��-��*Te�s]�C����WN��򧦸l�>�Š��>‰V�b�-���!<8�Wu��_������qb����xf�b}8Ҋ��G$�EZ���}#�+—.B��J.��{�p�cn��7Z
��Lq�F��?U%�a�n;
����]Y������&_DK�d��Og�+��	����?޼hp���=b�=���>U4*��g�Ѡ���/��,�ٍ��*/�|&�RE�1Q��I+�R�@؛b�ө"]o��,�/+�X�a���C�g��=�2�\�o�'�q���/�bYʱ!;7;�;SSm�
�{��vH!-ƾ��V�{�RZ�~*ΊW��*��C絴GU��\
mfFa|)�H��1�)V�I���ei�ju������mعֲGUܲ玅[p�Y�q��
݅G���B����!���pk�A�|�˲���#�t	%���p�i9#����AE״����׋�m�?�F���"s�$�*�L@LW`ߢ�;K.�f�\l�Tb�J�G(�P
I��k��1���!��˖�Jx�F� KTzK^R�1�_�X2ɪ��DVm��D��5\\�U
�"�T\��������i�:��Y�J̣���D��';dg��i����O����}f��c�w��~
��V���Yқ
�O;dg�uM}68���k�v�$��Hp�Li�e\w+�w�Ŭ�s��$�ڷ�
���m��G��6>��K�E�L���z�������
][�H�>�YR���tU��t��@���fdA����@�%Kfv�q��D"7���pAm����1�
>�PqlEy�����Fr,XKr�GN�Ü����ۃ�5�쒵K2*�0q�!�x�����-�뻀�ʐS<&J����oyQZVEK�CE���� hB�D6�7+;��j�E[�&�䶝�װT�ɠ��O����:�Yp��o*�ڹ.�^�C��ap<�U�쿕#���j�J��u�����Z���:iT���8�����r���`dY�~)i����Vԉ��ٿ|�Sb�S�'�����^4ŗ��(��<K����H�F��5]�7tAV�q��&�L�s]��yv'1��|�f:U9���HPT�x2r��)��3��u����a�W.�TW�77ed�"N��%Gmy������ݣ�R8�g��9΅J~K�IJ:Ł���ڕ�hżM�
u������oN^����\��<�S@��U�n�0��+&(
�"'��n�:N
�rp�k@���(M
$��
��RK$/�Z�{��q<��B[#r�����m��ȍ^�r
������RBp�`Т� OF�)��:�V�&EH5G��ޠQ�a�W��S�A��\��L�
=S�K�A(�#|�������LHLF#|*�!gɬ��pi~kX��Go6L�8�_�o$�Q�` ���Ԯۓa:��
�\0���|r���W���i��y��iX�-����1��'�nJk��u��ȸ!�|!�'u�pA�҆����L�?x��{���0g��4��nJ�����L�6j�]���Tu�WZKd���w>�.�����=jÄ�AK~��׫vv��&�O���g�LG�s�"����ན �D().����D�ggo#������r>�`^����KRR<n��a�������Y..��_�WR�7�8�b�gG`���):�D��7��ޕO�L����B���N����XQ��\H�
`���J
�4�6�H5�6s���a��
�ٓ���7��}�ݠ��fi���?���ˆ�a�^S+��F���;GYd��am����1����&jM�Np��|.����^w��U���aH�;�Rw��o�����X�r۸��O�7�9Q�M���$Rݫ#�z�q&R:�d<1D�H��A+jF���u�e;�4"�����.=}zOa"V��L����,C�dR,y���JeB�!��9�$�(�0	5��A,@e��RT2F�E�@���CY`�
0x;=;*�&G�y����)�YsԒ�*��#\^L��M�a�s��h���-��Ԥ#�
$����/�YI�B���bE�d3�J���/� Z4�,��rŊ
/R(3�6d�U+.
c�?�_�^�;�0�L�U9��������}a��Tȋ9�4*Ur���9;�����Dq�Ѩ�qDޒ���j�s^�Fk�VX�2¯����h�R���z`E��T�+:8�˕�Jۣc����:a��m��/�`|p���qv������糏NgW������ٿޟOi� oOQ�e�X��C��,�m�/J)��zHrǁ��4CT��X	�!�~;�QٽR�iE��d��gC���Q
�ep8k�&��=)�{t��U�b�n�8���F� ���+Qr���r�+&cgk.����Kw�TCou.d�rD��sOʊ%	9��@!M���3��݌E.H؜L�u�}ċ���nu{��
AA+,��C�؄���
Q�^	!�ru��yE(<a�Q�:�c��6+<��������Qmj*�Ge���,!Y�>����GDI7%����6�fWgW�F��#�%B�E��h����u��f�T�h5�uҚ���4[gXU|�K��N�r^��^>�����Ӱ.-�޶�m)(�®�����.U6~5`c�u���VИU$%�6��e��}Y*�xbnƩR�S.V�����L�N�
���Oʌ%bMD���L)gS�|[Rw�L�`kB�D�%�J]��/f0h�c�C��ȯ�����蝙�Ӓ���ѫE�8G&k��(���ҠU�yr�#�6]>�pj���&�0�,����l4pA�%����i}X����=l�׶64�P�JG9XRmRki�.�ʠ��je��ϊ2�K�~.���+�/�d<O�DĕHK$�:<����
���]Tu�d�eɓ��
�D�~��gڣ�4_�~�=�d��މ};��ia�Zj	Dxf�z�I	�}���{X_jp�w��R2�+�oIi?o���'�4�[Ju�TI��l�씒"���A���I�:�jN�LX��&���*�J��R�8����P4�U�)��{���qM��:�2�̣�A��/_7�vѾ1*%��)�ZS�|/�	�yJ�{GxY�0�"U�q�1��C�|���a�R7�e�);e�X��c;�J�Uyj���׸�������&>�l�E�z�'�7��oF�\7�`pQO��Ԕ���1�[A-�A�f ����B�)N��"�0Pkv�ci���;����pw�YGީ9/��䲇�Y68fS7qI=�A�6�V2d0�_�¨��'����k��<MRh�Z����I�j��6TW�9GV�m�1{_o~Hmɞ�����K�G@�6:��Խ�=<x��r)�hN��C%�҄���kn|:��u�;��N��i�m<��y�'�͝-k�'�n���X���m�fOK�'�97�
h|�w�δ��i ��IR��%�\N��� �ӏ��[H95��
�݌�;Ӈ?��f����:�)�p(��9�[1z�v����l�YC0ɴ���ǨCy��W�|l���䚫8C��أ���װ�@	?��Jߓ���N��$3�h1`�
t�Y���uў�{� x��_{!�_!�IY���[\Py�;��=�(�<��9+z~����+��L'E<�{|C�����fk(Q��P�"F�kN�:.�}Ϻp��-<Sb;Oc��%�[!�`���PB#�!��u.�eMR�vT�|k�쨈v�h�sT���Wi��Y���`�
��m�{�kG�a�*~�wJ��c�Z�WC����]>��݉����0�_ٓ4�ׇ~��ݔhŴ��hQϛ��
�N�n"�]4�r��*�]��f~�X�V;]R��C�>N7jBե}���KL�o�Mc�W
f�2��h?lv2˹E$�T�q�K�
��{���:^�x�x���Wob���1r\sv�P7?ց���Vx��3!�.wn�����h�;���+�%;q3�f&���};��|m(�"��J��(j��d�
p3i�-�'E�̜u5�B�g��u�^�h���&�4w�C���cܽ�{W���*�i����0���I�ޕ�h���_�}�ɷ���x�.�na'7���(gs���
� ���7EM��͹������=�oH�8.�_�!�U�7i9&%�����O9���V�n�F}�WLQ�d�����R_�6R��!�9�v�ݥe!ҿwf/�҆�Ű�s�3g�d8�n�be�tp~z�3�Y"ܔF�e=��ڕ����
����+�z
����M����~���LV ��u�
��9*Rs�p�dKS]���w��w7���0����l�I��8YI'ђ���T¬��0y)Ռ}Vb�ű�,�3���S��=6WI�8t�p��Y���B�b���z'�!<��]/5E����K�H���6(�4>/����"��wW������Az:�:d?��a_��X�7�U�V0Cw�eꧠ��ީ���d�L���?�+�i���7*p�o�F�`��ɒ7��M%��3}�Xޠ���:���~���vN�����Ũ������1��]-*Xj��]�o`F8dH�ߤ"�Z�(DV=�{ϖ
z�!�o��}p���ё�����d��D��ዞ�=�D-��X��,ɖ4Ix_2��)�'R�5���hN�2�e7���]l��8"4�O��,%�-jz�V��V3)z�6`�L
j!&�@S�Xp�p:�?}�[�d��:�6�K-KG�ޅ��$i�0����nԒ���w�[FA9�>�񸙮�1~�V.b~�os��l7��w+��@�C��D�Q^3��+�^��َɵg�=4RYY`�"c�
֩^kp:��I�j�T̊ڰ=E�<$�٬�z�2G��m��~|�����a=�s4)
�B����&�CO�R��d9f��)�dqh��j�m�l��m
�z'M��MNd���)]��������֮��	�Vժ�G�;65f&yU�%���v�7�	�Ga��j$��y���4�~�piD�����L�1��iKwT��5jv�B1��?Ć����JE|�ܦG�SH�����w�f�ld��co}�u+�Z�26b��7U� f�����T�|�f��9+�Z����}��F�w����f7��i@�\w&݅�)�'R����� ���*�R�u���R���\	�$$^�hf�}2f*<M��!0�lrrB���M��)�k(�E;��J��*��\'��:�W�{�y�t/���!�ݳ�*�o[b�^�7��",Ŝ�̦l^���i�:Ȳ�_�J�.ư���lY�%#D��I^��͞��`���|��HGG:)����հ�3�YǓ�
�̚�{���
�v���M��?>��g��Z�=&�Ļ�ڍ讴߷��>�'�D�T�<�@�}��Q�t^�?I]�]���9w�
��2������?)�]�
�}TQo�0~ϯ8��N,��4�R�@j-eBBh8ε1s�Ⱦt���wl'ݺ�ч*>�����NON"8��n:#���W��²B�VFע�a�R��M`"%�$-�
���zT	V��#p]"��Zo�(,����é�N"H�Q9U��3z��nU	B�8��t�%��JH�������Lw��@�+���Fj�<��h)�J�QQ�s���|���2����Y��Um�p]�+4k&��)EZH]�5��/g��YR��o9˗�m���y�n����u��bqMhɦ����<��~��m�Z(W�b��������L#Q7�l������Sn��`嬅Q�X�[�u�����,�V��$���W^!�G�I�.�6�H{g.b�Z��퟿)b񋇬��$��rVN�<���㳣��`#ǼS<�e���Ja�F���ߜE�(�2+5���9�o
S�n�1�2p�Ty��C��?�{�y�s��5*4�0?�������׌Kf-�7��a�f����_��Fx���W="�>�P�>-�}l��dZ_N��Ķ
�P�_��l�J}{���owˆ������������n��*q�s�!��<�S<�u�mW����K�� �t�AK<�.�Ə��<��a��nA��>c��#��o��
rm\�����}��{
��{����'��_–{ysaɽ �ž��0R��A�M��-=����g�wL�5P ���S���0��+foi))pC�J[�EBB��8�p��vZʦ���N�V�C�y�fޛ�r>O`ݜ��W>�{��*�Met-�֭�������`Т9 �|�E�%�JX��5B�9�{}@��C~�v�o�;I)
TT�*�`
r�L�n��?��/���J!��x΃�#<;!�;A٪�	�,��@7hX�&|hX��}�e�,�wt���*���kT$�&�X�cAi���8H����n��L��rd���Q�6ڸQpQ�hP���3xI�,U�y�[���'�t�����F@�웰X JH��b6�ӳ!=c�8���:'�3���J��x4Lʜ��4�$��ڥpX{��W;V\���#��z���J�%
=�V2�qQg�b����%'#:�̡#[�7h=M�I�C��,���H��Ԟ{�~X���@_�~3���9��������G�����n@'���"��ƛ"�9��p
�nV��.�n��զуE/p1�X�-����O�5M8݈�]a�V�&`{Ό^ЖU:�"��ڇ�e���aV�Bx�W����߼��`��mS�F�;�b;�vc�GZ���	 ����I���V#k}Z	���=o+��2yi��$������w;�;�ܮn�|����M]/�z���2o�긩�r�:.
E����3Ս���eg�^�N9�T�Q�͌��s{c��djz��zv�b�շ�QE����]�T�jj��6e���u~���Չ��sp�O�a��f
h��D�*{�g��ƴ�Ω�N��圞��U��bϥ�-
S!(�1�Y��&"~Z�z=G4�w���V5<���Nx��K�n������on�0���ȯ�/�fgg��NmY*N-�Z-�t���Rȟ�!MU᱀�1�Z�_����2�<Q߫#�'�A�(��V�޼|yr	k�q���Q�K8�lj:haX�A�r�*33�5K��x�/N^�9�~wzr������W��'�~�btp�V��=��aO�YC�����γz�������C��3�6��k��r���֨���OyE��4�i��9�2�Yx�n@r@�4�����b�؛�J����
5'���t�"�2�m�υ��8y���ً�S!���6uiVh&�K�*D'�/����N�V�-��w�--�ߐƫ3X��,��,$��Q�����(2{��o�܄���BT�Z�Sw�t�OL�Gy{��p~}���V��VMZ�j�&�fL�!��Ny���C���=B�\���J�ڕ��LQ �%Gczl$��h�/a�������fl@ңˣ#f��]��<�C4&ù���ZP��<\^�^����BIt����"ׂ;:�p�v+5�;��w���U��P���iL
ߠ�~d¬;y���ߝ���:y}���ś�/����J��IfUg�t���F���
Ӹ:_���%G��{|r�uΙ�Z��H���\h~�h!�N��K�������
61j����d����+�|U[p��X܈n�����P�S�d*�ί�����;A�n��	�z�P��k)d �Jnr۸�v�Fެ2]$��-<�Hgū¿���0(�t�^��ߴ��yx�x/��<�k/�-<OH=���L,VgT�v-(3���hj�N�;P^�f��ǏC�e�e��w@������ɥI��f�+���G*�$��ĉ_?W�Χ���Г{qO��GɁ^֬%/���d b/r�m���v
�a�`0	�_��de
$w
�j�O��̚�����6D�(;a�1{:j������H�V=
\��4�[�:P?�R����O���s��aǺ��ʑp��!y0H=�<���Pc��J��;1�a�&ά
x���L/��ަUf�Rm"�(����.��E�҈S���`���1�%
%�`�����I�t�F9�k�,������S]�,w�B߂Yf`�#��}6�SC`g�a�>�����H�+�,'`�T�U7BY���J�`��NkP�v�X�5MQ<q����`��!zA��H��{8�����U�ɽ�'��=�̣/�L/�_^����|!�����ս�������C�����vE�B�U�e�P��5[�����[��[1��*�4�CY���/�$S�=
&C�Eg�F��#.]��)���3���'I���p^#�	ޕH��1n��(˳��60�Mc�x\�XА��yU��k
$���`��U얔�R��4�J���"n
 m��R����\,��y��Z��?�����
eF�I��� BR�hG�<x*����灅�!Oh�Tj���%e�#�G��P�9�Z���PR����!��Av�6�T�I���FAr���Y+J�m�Rg��7��P	��a܂
|p�����u�T�Zl��o\
J�i=J���б�Z
`�A���m�41B�2���FsO-�`
j��@�-1S�o�%���0%�D��
9�&�;q�"�.e���@zn���f�Y�L���!�C�>��5���	Mɔ!$��%:��V��p�����_���L5��	�K�1�tA��̏���]Qf\)�9� e_"v��%��S��pG�px�)�#6>�h�J�^�R�C�*��v�>�u8ޟ�-��M�{�nRf'���z:Bх��ֿov'-g�a�r�0�H���&=�q9�2����MB��M�ʐW�ėDC
��UL�(R?f5��o\FSj[�%��S��[N��Ʃ�A�h��Mu�{�Y�MBi'�B�@�&���)u���eа��1(�,�i��עx7� �����R��r
PA
#g�c�4Լ�+{��88FN� %��5S7�Nu�K��;���<+wkȫ3*��ca�x�.�S"�]f����^p�@�c�4�oOg�&f����9X�c��E@���42l��n�2a��;���MW�P�@�0��N��ݳ���z�*n�����@]�w��(�y�=2�I�9x�`���IJK�kJ��/fa�v6L��Y諝I.baK�C|�la�dP[�`�t z�`�;^e� f0v���V��`#C���ZX�qM�<�t�$FI��u��ZZ�OFRH�-ۤ�jU^�J�e^�
r�Y;n��,(�4�j�&b:�#ǹ82`�y�;�ʉ�x�ܙ	z�s�b�[.$��N���H���0P-C2��xz������B9 (��a�C���C1����'��{:�Zx_1($�Imn���j�-�Ȫ6ҫ�d�Q�iq��f�Y��m�֯�p����������!����р-� [����ں��8i�N|���(?U��Q�c�4t�X�f?����@I�W%OI%\������� �A�n{�V�p�e?p���ϧa�l�ژ�J��M�o��NÍ�ܪC��6�p�����F�I�(b�-Meql]��Yq�.o��~q�\3S�Qo��*ӭ햇�NU��m$Ya�1�O�>�s���A0����N��V� �ʇ�/n�S�qCҺ��7�DL���X�A	�xS)��62��}[����lO.���Li��tI5�}B��?ر��X�,yT�97�N�
�UF(�*��M�/��w;%��6��2�c'�߱9?���7B�_�.4�is�~׶��Ke[�����vPE�{Y�_ �{�2򀻗�)�=Q��Xtx�cJ&`�+�W	��.��4m��$x
u\�U>mj3�esʹ��
��wЭ�8���S�S���x��Mcf�GͺG<m_b��0yؘ�z��e;�0So��D�B�ΣL~��������ۏ��Q���ۏ�*|�u��ٯpD��� 3���W{��J�t��z�����o�"��U�m��n��/s���B;�b,?��/c�!&�W
_�/j7�}3<$��{fx�c���Ղ.~�y��9$ �I8m�&��J+7�^5��gu�*4i�
�.��Zڨ�MM�5�����k�����N��(7:BH2`i�l\C�
����SwC�.e��ϔzw�*�;�^���/��/ufT+�9��${Y�]����]R��d����{�*�rf�-�o���o��Ll@�І=ѷ~��R�d�Z�ZNB��jγ���Ms�/��P�.��xw�]M�9�!w��N��>��Pgf	NI���l�)mk�v*�\4�@_/��F����l��-�5a���f�{����3� �CӽU�ˍYԖ����FCkˊ04���[�I�W�H�r�p�J�IA�8.���.�#�FgqW��\�[4��M��K���YU�
T������Н�����ÍU��X����Hl��;57%��R0^SdϽqc�_�����ͨx�QQ�jN
3�޿���;T�|��fN3ket�tp�r�W�8�7���O;IR��M.y�HV{��������(��;<�P�Y�eo���]J�é���r�=���8�2�P��3>H�ѿ�Stn���–r�d��Ʌ���q�nі������'�ձ'���r/j� 1(�dH�I��2{��П�b�Og�CI88�.Q%h{�`���c�1��ǥ�����+�H�����d�����L�I|�]g
�,�e�����U\��׷+�Y��߳{}����y�k��g������˹�m��<"o��?�mWHD�1�	�9�x�b���{U�"<�(�і�Y�6R��7���er��>��
[6��V]��6}ϯ��D���� ��3H��Y-tW�Պ1�xIld;����3ݗ"�ؾ��x0�;�-_'~���_a� �%Jf<�`��D*�$M�-ҠP���*��G#�L�5h��!�+����,`��Gm�!�
�ff b�h#�2+��#��p7}�M!�)��dz�Tk4����E����q����|1�O�ϧ��O�bjzု����T��W�y^$�6�آ����aK����p)`����o����zCʴ�z1@]Ps��0`���j�k?�рMCq
4�
SWuR�%�w���[�f�8.&�ى.D�`l�RQ$#M��˟�_12!�ܼ}�}��)f#A��Ȃ��߇ñn�m�ebk�(d7�(�b�6/�U��<+��LC#gFs��2��I���=�Kql�����hp�"�R�_.��skq�H@&W��Z<}{@sjk��T~�A�X�W��v��~���y[>"�B\#�����Y��M�E�+��J,M5	��b�Hc�\��
�D"��%N�	�nQؖ
��&�S��>�m�2�.Xy�7�\�X�uX&�����$Dkxf{��3��ܶI�%F,'6炤
{���Ȕ$lW��2�
�P�4"I�F&%_����Q�:���W$�[r��C�U����:��2!����:T�����o���=Z�t�P��CjH�'C��V��e�{�DWdp��
�SJv���|F�.z�LնJ1W=ޑ���=����(�x�o��R����G�C�����mo_��ծwK�PqW��ZTY�o��D�r����X�i��R�����jV]g\U�	cخ`%�0*���q�ɫ���t�Z=�Vہ�y�؇vB�M��}�-/"l�G�toؼ�cp~rr5�NA
L��w2�ަ>�[]6��x�ڕ~�����H�ė+U4��)��W
"3P��h���=y��|���j�j���iJ�f嚖�#ϻB�N�5m/�w���r�`6B��h����1�5U���Ŵש2���%9J!�};�����v�>|��{g��?Bsv��/�1U��Vm��F�~�b�~0H`��%U���4�I���*2�oc����J�wv��r�k�/����<���p��˔����^�<E�LU��
F%���>������c�,�7��'@�Р�REQ#��2_��â�.f㾦*C�D��a��Q(a��S��2!�=›���j6�Dd蟝�m�+����\Ba�i�9W7�O��:�}w��0C*��x�,;l��l�=>�#6�dm������e��0��=�1�s��ˌ��*����b졅����q.�zf%��j�jʕ��%��"fGƶN��Y#����3l-���	ۭ��i���[��a��}�=�/�*dM\1\��lqp���p/��RAv�5g�th�vh���4Y�iD��Ȑ����Å�w�Xۤ-�>�ا���A�
6��X�0��
Ʀ�Xf��H���#w4ң��$n�V����m���s[9�웥X�t�2�C�u05/v��Na�1n�u]��hv5�0��n��?&sN����8+��+���S�Zj�؞6;*쁍o�OV���	��щ�<���v|J�˦M��p������XݦƼ����V�B�y�'�yf��#OÓR.̊��cЃM*��Q�#0�h��ï3�J�PRV�0M`��|��&=�nm�\ w�2RP��އU�/%*�A����0�|S�s��"Zs�^�i�n4�k�%J
c��6ʈ���0�P�2c��=w�X	▶���J��Iȥ�$JS�S�=@������o
.�!��[��-V�R�������_���s%�Y��tYe���l�0?��-�oFN]�*u�Z֣���͂Ty�X�������*��?��7M��r�@���p|�I��^w{u[J&�cY{)V>�6�uȇ0B�z�G[�e���0�n�}�~����Ca[|�RU�ɜ���(7�54+�#^�5`p2"�#��=:u�zݺ5��ߠ\R�ʵ��"��~1�7��75Ucԑw�j[v��wA���H��d�|�4��J���Ym��6��_1������^�N�I�"޶�b���6�2���w��!�jmo�K
问��h�gޘ�^�|��jm�_Ϟ�k�Wk%7���0k�t�,'�A�F��4���F�K0k�A�B%�L��JnQ	La�/瓁6�!�	
:f��@�,�jZ�B��=Gxs�j�v>�%�0�t�&��}�����
��c��"�2�=;��̆n<d��
/�Ǜ_u��V�[�4~+�;��@m��<�VLh�.E�,QrG'\�,�;L_�
O7��.?`����$׳�Lu��@H��M�q&�#+5�y��
_ F�a�+��d��f��Fج2�`�5�	aDŽ��V�N�;������A
�3N0�3a�H�
L�ߎxs}3����oz3~7߼7�K覸dEfȕ����;0�%5������(Q�b���o^��ϋg�Qɉ�,2�š\Ȉ
[�(�KŴQEb
�-���V�TC^c�ঢ�F��a9�0\a�!��g"��;��9�0��g�,�ڀ�PkX2��9	+������ls=DŽ�z%������D�;��hL��*�J&Z�K�ͷ��٘����tp�t�w�9t:�ޱ0ɘ�0�}��ܑ�9��bb.���`�RX[��ĥ@����xF��[�
R����R�>:�В#�rѫ�h)�Bb�HAvܬ	�J^fxRꎭAMi�#�����
<��n�K�㝥,���I:}{�h���{+~�u��&W(&�C"˖eE��D^[��3�{�%�*˜I��Yn�	U��	�u�_>n0�p�_+�R�ӝ�r��Cd�
����lu���%P��%�B�k	�?����һ��0��:A�����T'�Q�t�x�n�Z�}^����m��!�9B��0��r�1@�p}!l}����CI�LE\������q)��A��vKo\�uY��u���c��1��	�2G�z�eՇ.�/Sע0��fɕ6q)g���œ�I;+WT�M�ѧ��ζ��gT��	.��,㿻�p&t��Qm�[�i,�4�d���q+c�D?W���=��x���ҙ��N^�l�����(����/��m���3s�r�XH����mqu5MHf�R.Q���z�tlP�	�uhq5�N��=�{|(m��k	
�6�k�,���,y�����`�����w�3Ǜ�Yſ�K_>sĩC8e���Sx�:�IPI��K��;FMծ=j�k��3;W#F�����W��S%����
"׋���f!���1��|;)�!�x\��scw�k�����p�5+��om~վ�2K{�=���B��뷧�HnAv+$1{%6dX����I�O�^M�p�õ1�
�+Zk��[[׸O�fH#O�!ך���ſ���so�O��[�1X�>YF�wA�&q��T>	E��8<�{ņ���$B�}O�s�|�<�֍+�^ڎs��ޖ�=�:��9��\z �d����C����4�>�:mS�ڬK��m=�Et��Þ���n��zUυaMnq �`Us\�]U���g�#ۤ]������f�ﲜ$�U�K�3	U�q�8:Sk��F��L�#8K�~_AO��5��2�!��ȜZ��B���n"���h^��D��a�KoVK��dD�ٖ�)�^h*o�Lk�iO�v7�ڛ��fIs�b�P$	5`:�v���VG*�;������s��a����n��ҋ��~�)�L:#��
�Qs�pq|��Nɚ�y�:�Q��=��C�G��ժ������6�#U�����J�bJ������I�I��na;,�Nl�:����0UU%H���9�P�.]Mh׬��3+��'����҅�|�L��w��;��n_��]C�_݇F�R&(U��Q9��!����n�c�;��k��S���R{�{�Ύ�BH���<�
n<�5K��
��]�v�+�wׇ�
�(p??�Łv�+�-8���KC=��'��VHRu���ӏ���[\�"|�Fg��o�Xa䕠�`�Pkg;��GyFS���Qd��We��eٳ��G1|$tm"�ݿ�)��u�K���1���.my���k˸��Xks۶��_�p2�Bh9�*��N�G�$��������ФJRvT[�������3w�$�ݳg�sZ�6U����I�y<=|윧�9M��2[_:��&-�:p���1k�ҵ���
����v��iҬv�r]I��Ri�Iy��B+'�8�99{�n6�v�L�ۚT4��i���B9Y�q�zq���S'�r���9�@��9�v�;����q�҉��H�֬��Z�؋v}[�hX�O+Q5�ؔ�YV�����R4YY8�BWF5Վ�hMY�Jk�\����Y;I��ycq�U&��$����`�ݫ�qδv���ZG��S?$��V�.=�h���@Xe��	����~�g�}y���bm@��YU7$ͬ0���;N��r�`W_��ʟ��J+HՍ��A����2$��(�GqY]£e�y񺐄���\���x���u>c��ͺ*�۱�l�f�ҁy��*�x�U%6���Ng�J�du�o{��'XdO����/a���=j�T;��&�� �r,���N�E~�<�|!�!�A���IC�Ns���:����C$���W���4�r�
��9�"�����?�a!��bV�:��V�'��F�p1�4,[���U.6�u��{e��mH���ݙ�*~�G�]����Q����H���z䜌����{`6�>��6�`�e��LY�(h_.Ԓk����6�ӌ�4L�j!i�\�v8xHO.�OY
p6�� $@Wb��R�Ǡ�r������uI���K,W�Pe�j��C�뼙e[����aM��ʈ4��A7�^�2�!���bD�k�
L�i��P�O2l��4%SO�n�N��v�����F�uK��z�q|�Kk+_a��C��\�מ%�z�.�D�n��KlI(H%>��/�Fxs�:kR��|ǾExkw��	��W�)�F�?At�d?�%��m�_�x":��m+��0�����	����*�I>{D��H����p S`l}{���:��vA�vI����L�A�RR{����0�
a�B����V59�0�4��z�sK�gܽ�)�
�[�=�Ϧv��~粗�Uٕ�~�n���W�X㎟a�k~3��l��-�f�Яw;|=����'��B��������9q�7"���JԠ�l\�t��M)�����z��}VÇƤ�#�_;
!;�YP{ c�"�T��M�=�g����b���},�!��[����;9��К#�D7�MSeѺў�M��T��}��kJ(�Z���;,�#	,���Ǟ�t�t�P퇿,����w$=q�;TP�?�O}�5g���u�KcpU/ʬ���B�v/����+�#R�l�
�1<Q@��!�@V�6{)!@���F(�g2�9��>!���Ґ�Qx���!�j��R�nD�}���oc��5gN�&���ޫQ=�w�-����+�����=�?���=Ă�@��h*�TdZ���7S��f�4�
mj�Ֆxș�s�~�J���J�X	E���iHu��P�w���g1p*�E2�q�81G���j��h0���C�N͞�?/�a?����mU���etA�i�)���HW. H�����I�u!ɔRz��7��=c�w+L蔞A����{{��#�����C����vjh�rL��(ɕ��8�
i��pG5�]5'��wA���Q?L85�M1�����K������~��#jw�-Qb�v�i���l�1+,6�Xo.�;�����Og�񅁹U�M��<�`W�Hۆ;q};�
h�д1k�Ұ� [ғr��E����B����r�:�C5��a�i�a��@�d&ˈE��6I�׿�4å�$���tWK��>t}: Y�����w“!h�N���`Ҫ�N`�C�?9z��XOy�8Y�����G$~?���X$lYB���
n��,s-
w���e�����h��,De�K���W�[()6[����Bm�i�G
��d�e�H*E}��������V�����-i���}|h����B�C�@VZ4��!�E$L5`��>
ѩ�DŽ:�0||WջwUy���.���1F�����G�}�N��u��>�cX��\dG�Rr$|�k�8ټP�o}�-�<J���_-Uvi�ӜE���^R.ʐ�Q#bz��UYg�.OQ]�0�e2�J��qbL��E"=�W�x50����f+�޶9�>c[���;M-ک>��n@��A����]i:j���p.�V���g_�"4�������<�͹�D�m4�Ѝ���"DO�+~=Z��*���{�6�)_�g���<B���<Bf(������۬���]˥!���2H�C��L�,�F�C;K%.�t��_U=:��Ƌx��O�>��5��Yd�p1�A��)w4����f�'�%2p��v/;�pM����Q�����p�֍wOF2�����R�D��$�h`�HL	�<
��`��C�l6$��F � �[[OG���l�z���E�6�Ss������fOhx9��_xxN0�@����E���b��������&ɭ�	�&�
xw��_}�@��#$Oʅ�2V		un�l�$O����8��7�K(T��v�*�����Lٳ�V�^��2�41k�l�d����w� ��P�s���j�Z"�޻����H�B�n��H�)8�y:�L����D�3�ewC72Ŏ^�s���ma�h�X�t�P�B�G;z�2!2�>�9��O��J\���*�Y�*��=9]�;M2�y��[z�*+L�b4��q�2�ex��TD��!�c���	z�g���{�˙�3�'-��K�7U���i�)廢�[��gds�"nD�&��/�8�����4���2W��T�������4m�S�c5��K������r���bx9�4ç�|��%\�g�!�?�u�r��}�M~�&�J(��E���i�'�p�K����q�u�rY���iJ��HL<"��іL".S4&g$�)����ؑ����Hw��6>�G�.4�N�Z���6��G���"r׷6@E�Z#;r.u�C?�K�/��pj���n��3DH�|���nA�D�H�=2�Q!Q�r�hA�I�����cLD`4fc*Fc3ߴ}J���|��83��]��)RV��ss.7��ͭ$K�,MSKg���qXE�<P���ޢ(�d�@��1��K=u��뿉yF9�����v�J)�b4�AF��o�n|�[��K�|�U�ށ*��[�f��>@,�4}&r�H*Cz�>6@��"kP��d�o�`<V�,J`����콒Q&^�~��l	��m1�����Ω�-{�Ä��m
�nnW1zF����LD@��
f��sNp�����:�^��`���Tr) ��!6v�o���������.�c=yte�?�PK,/�&[���窭|\��d��A�	�ձey}�{ͽ���[��.�T���U�r+^�>��'�2T'�IѧKj�Ol��<��n��I����%ieRb�BFYk ��%2�`�H!(ʼ������w�]w�����;4p�n�G�@a!T�����֬ML��n�,�.�ax��`<���{����Ek+�d�S��~��>��VP*D��P���Z�������@���b����7y���4����!7q��W)jXh�)k;l۟�#f�Լ����i��.ZQ�p���Wk傛�w袱<a��	�S��T���n�t��ġ����_���X]���bN:�*Ut�L�eO��_�T�ݹ��������Tŵ�]Z��R�7��.4q~td��L]���T�	�QŚ�����d�q��x�����EsEue	9��z2VD7L��r�����w'Y;�>��A��b�*��D��B�
�:rD/�sZU	U�O��?z⠝�
;�����H�M�\�ݗ���]nz���M��<���Qt���z�[��[�q���g���A
�����#y�
��̈́#�����9�߾;��K��9�+��,�tO����O�'/.�)��C�JJ���L-Iq�J�9�g�ƙ�=�q������b��ٷ�B�t�?��ObbX��?)og���J��W�x��SQU*p�$cI`[�_����]U`�$��S��'�'�,p���a9�]����*i��v�϶�� ����qoS.΢R˵Є�|�ArqH15������|�;WviWv���t�JN�agA�����"	)��4�΀of���;$�lK�QrLU
�?.�T�wק}c��� � �ԬqŴ��,Ə�d�W�B7^G?@{��a�k�_��P��I��)���@�4� !(r�9!����&�k�*`
scw�ÿZ�zHjvB��weZK��3�1z�x�\��mD;3-��i
�=�w�w~�F'��>~�/"�B|FQ9E�}�4!��/M�'9毗�Қ���|�-J�k�cN�/M{�N:��q�@���z)��t@$�)�xF�z�na�x���D���4N�s/���&"�/J9#�GؚD���s�������ݽW3s���"*"����9���Q{�8�Ƙ LX��|�Y�=9�c�$۪1f0�<�W��.�N��N30��k�3�(-""������m�<6���W�UH_�c.��R�uh�Bq��|�x�>�#�z���l�62n��DNp�߃l�f�
��Q��
�f��2�N��w�UH�E���j�J�s�4)����k�.��7N���r���S���J�܋��>�SI3�7��� T�(�",G�Eh؄F�o���b��I����c'N#�߄�.q��u�&��z��&{͈��w�X !/ �D(�;�&�S&%�S<{ObJ8%�CǸ'�"u%�B�@nD�Y��e����fQ 38J!)UjP!�:N`o�oPX��n�ԇ��)x�+��B�U��
Z"�U��F-��4h�Y����⥨��7�~�fS;Q'�e�u|�h�K�*sT��l��&Mo��O��Ve!&��u�5�b��[e�l��U�;�g���:8��/k&��L��J�w;�D����-��"h���*����XUH:U�#h+Ӱ�2c΂%+�8lزcρ#'�\�r�΃'/�r�[K��n{�O�~���n��;��u�}<\�W쉧�y��sk(��~<�u<���4N�$��m� ��!�Bc�8<�H"S�4:��bs�<�@(K��I��EY�M��8�˺�e;�烄	e��YQ5�0-�q=_��EI� V�x	%�I�*M����ȕ'_�B|UX�?�,�$4,<"2*:&6.>�o�oń�m��}G.aIK��™��_^bp����_T-��%�]s���!A
x&�
�f�Zۼ0DϢ�AZ��Q�6�B�Q
��aZ@[7�5G���!��ن鲆֧�X%2�[�I!/���#��_�~���?E�F����1�' ^oȇ�M��-���5P�a{��`�)dT	�bHz�
/�I�}yU��B�}��~�o�*����E�(c�}@����
�1�G�h�`�	<lも��E�AK��އ��Q��EiʖT�X�%*WNh��
� �Һ`8\-H�I�mh�1�������p�sî��0��РBޢ5����\P��aj9��A8C�� ��'�L�
>M��m����x�aM{��@��B�*P�N�]x��T��ҝq�
R��a�w�4(�8Q��;�@_���`�)��xS$�R�V-!0�͌�^��8p���!��;�G'rv�n�ݦ��PO=�W"��^�O7[ޒ����?
��"#Ya�����ٽ�#�G�fE����jN����e�$�uV��L*O���`��n�UU��i��n�[n{aq锫%5��H���l��ՠ��}�}�
����@5U���9��.���8Se8[8W�8_��P��X��T$\��+�Z�Z��5D�j��<=�EzZ��V�=/zQ��M��p�W�O��pқ:rj�΃���8�����먟��h���7z���a¯�Ea����p߯M�WW���m�l��7���f���BU�u,r���|��<�����~l�jC�Ro�Y�Zt%�����h<p��D��|�A���:���MuZ�Q�kC�N:@�Π�f&���&2g:3�Yٳ��r��]1��6��D��i�U@F
�xTF����‹��O!q�a
8�47�C�zk��>��1���nʐif����
[����b�E��Xp�a���"{b�cJ��B���t"��N�O�1
�Z�VtPrXy��vQ�Ym�t��x#��Ӻ���[P���6�q���7ꥈ��Y��{"���vI^�R�-<��!�!�Y"�t�.,+��"TXI�!m�K��fN��;�D8�S�)CXZ�4��4�� pm3![����Ɖ�.�Ӷ* Yj�[��ŝ�BG,�1��k.hLz��B	��췠�n�p��R�\PA6eR�����Ȥ�¡v��h�q>���:&w��!�>�:�wDY�I1�7�/��L��9�:�'�	���Zu��ʹц��7|���2����Mdh�IRK@X�sҀz7�2��e8����7��Z�tB�tg��l
N�1́$�V����yNI
�&W�i�h�E�%���J���e�,	l.Ph��W�]T����;뙈Z�Eۥ�J�I��'� 
�0�0{��>���uG��9�hw�d�P���FĴ2?M9�\v:VNOj�b��:���a7e�W-}[ΗT�t�~�v,{�צQ���z��H'�/�յ�	�ɫ��؃ӴOٛ��J(�(%�Fw��:�����ܧ�!�;0rg74>��8���wH��xџJ��H�be�H؟.����Ƌ�z偽����iS�ѭ>�������ʽ��G�|��&�Lq2��3�<Q�M�d���)d��ڑ`'B�N���-n7׶�v�K5��LvBPRZ�K�z圑�Sַ�|V(yީT�@,&HPj�5��*��m�<ׄ��M��	��i���i3$��x�TJg���lF����h��ʡ��
�t\�L�NZN�:���j�ƕ#A����_ݳ0�a/�,������K�L�{�����M7iK���m�����e�t��q�(ŕ��j�+>ĦT����$��|����!�c�7�|bH��Ii
W�	�6Mc�1���X\O�$o�t#c g:ɂ~8���[{ߦˊ�]7����Pm=��U�ϸ�5��J۞63:���u��-��ad���y�˻�?��ߎ���"�gN>�����0X�_J(q�{����-{��s�<�p����Hp�0s���*���yp޷�-��P�/�K5!T�vC�%��DA���E�ܭI��ꚢ˝ڼ0ÛN�a�a�ud�	�1y�̞Se�nr�?�4m��*�i�Χ\�蘝������+��V���~��I$)p^�T�Q8~����
�Hh2)�3��'Q�l�r��0�1���ܭXy�81Lu�E�e�����g.\�MҝO^��(��E��*�B�a	���F�֢��8�I�$
F�8�rf�Lt���|�~�q=ݰeǞ��c��
�8K�]̓x���O_g��VF���#�	9Q0L�J�BE~�&�c��5B�t��Nw8k Cd��O��
[���ʧnN�3�\��O����_������@$0���OeE�jP��A�&C�X&��͌+�&[��xJ�S*��A�mu��p�%�F0:�ٍW�l���i�s�,by"��'�L�s:Ot.���|�
Bm��B�惮�r:���/`]����J���>���xD.I�2X���E�d͆�j��mڶ�?��r��0a��S,��� 7�jS8Wm��@<�+��;����u�1����Pw<y�� Q����0
p��4’��
��Uf=]z�=��+��o�
�L�:M�t0Y��i�dwJ����97O<_@��E'6�t�<m�[�ɚ,v
�Yg�ES�]�%3���G
�d_�6��~�S�_��<^WN.!����׳�����n���������G'��/.���~���1�w.���ֈI�Y��"����(TZ-$J�w�thoݸ���K����@@���4d�ɖsIH���;��0d�|;XN�l8p�v�]RM�3�ȏƳ��_�@A��%O�RͶ���!F�u7��%?��n	��	��B!�Z��B�>�;%27q!�p��<Oe���%o(Y
�P�H�YVV����j4��<����<��)yG�x�&}������E3�}��
1��a�e8�b����
<ru�֛�0f�8zDB�sma!@�0Q�$����{r��7�O�j�UK�T�y�<G���W4c2ԁ�W��{�`�9��D�����dhdbؗ�&���K�V�����t*�d����I�҅~��_FS��W�Yz���\��;�k����1Qn�W��U�滺^ѣ�5�"[tg�C�����u�ۑg.�����80���by8<���ѯ%�r��M$�4O!%�8_�5ZD_�:�������15�l���ȣ�i�cDc*�)�F�駍���.�q�׹/�O����*X�_�T�ɰ��M�(I
�4p�� T�������5����s�M9��uyy�\|��1�/��:���(Sˆ#��:Uάᫍ4b���1`(��I�t�Ym�d�s�Ժl����cĄ\��BD��p�ͺ�.�H����R�J���A�^��x˚m�?�e��8<A�<�yI�)�Q�/Pi�6���'��B�K:ޖ�s�Σy��Ft�Wc��*�By�*�� Q��~Vs%N��Z�nزc��c>g��qޕώ3�����QV�@U�_EJ�5�F>"i%�2`(Ø�U�u�u@N�l8p�v�]RdK��G��<�Rj�5��O�Ո�(E�DJ������j�z�8�*�~	_�T���e�l`ˎ=�������>��d��*T7s�2��U�m����5�RJ����++|.�_�7�~�m��l\!�_�a^9%�}�wM=��,�B��L���H�*�j��Oah;�D{��8�ئ���;��a��A}�8�,ʶ��<]z�X#?7��߿au����e�eU��//�`ӛ���1���i2�N����0����5�\�KhF�r�fr���j%˲,���d�g3�H�[�>/?��bh
s\g̋�([��,� 4"?o��ʺl^�M5��z�x�:��@��	��^��" �I8_�?8`7���l�f�>���ӑ������e[/�\y�^���j�04����\��h�w�z�����
�5�q�r�z��@k/J�Tg�-�]��Aa�u�+�p!��q�
��,��)�,�")�r�ڟmp�(q���'ֵ4�9�5��{��5�۰�m)ŽkoJ+���h����b�ஓ�u5כ��tC�v�I�+�����
����W�O�C��d�lW�ذ�|�>n�v�j&:4r����V�o�;����:x�lxd'�	H����5H���6Y0hv�ٜW�����ɒ	�� �ěa.%����k���mk�ڽ6������Z�x����^�j�:4_���r�
o�f����&����;�ijF\猁7���Q��D�9��?���˓�q���1a�w?�F� Y<
����t��2�K�d��"D�꽱�IL�1�,���pԨ�h<�LY��E�n�5ot�r<y�7�0�I���Pr�lj��<B��]���g鯐HK�
�9C�0�.)���W� }��w?��ǿ�X.��V�'����=�O�T
W��ϫkL60�6lu�z�{�^������p��$�_ye6^�d頹�׮��.�yG�&�w2���J������m�7<k�
k-aC}O�����hzu)7xN`���d�t-KR0�	 �L9a�%�;��X��f�{w���aY�lz�K�μò�p�)�L�3�Ԡ}��C�YN�}�_��!,�|�4�}�5��O�+Ԯ�Rΐ��'�<K/~2lm;�}���Y�G�}�����)�K��m�ɼ�yG�/�|gZo��F��s?u��n?�Q�,x�0�A�'�9���Β��7��Np��"�s4n'�4��짃5'�a�J�`]���WF��u��F��Cο�W�N�\�r=��qǻ��
.�x:6f� If�[���s��/	_-�i���z��g�;J��N���FR%�$�r4��I�ߜ�rM嫵���:�]�w���qP?oژ�^���Y��2M{�W��F]r�1�$,p�SKu�F3����j���q����Xvlyi�7/�%}=I��Ւ�ZI�]~�m�3�f���ؙ��Vo:$��!��@�=*h����B�h��m'y�V:{2�<}�ob� UЀ_/8z����3
J�B�y�W�$������Xqhx7Q�wD!�Yfos>�߆�ϧ�T�Z�S���%I����&N���ħ��7�J쟤g�|��O���Ѡ���&�]9�vv��M���M��7��|Iߌ�鷿ml��}QXa²����`����/e�|g?�mҴ��[l�,t�?3� ����J{�n'E6q���2r&�M�����(RLHd���Zg�M��j#!m��̲��g�;�ˮ�?_�u������B�&m:�,Xᰯh�����IV^n�,t�7񠙫6~1�4G@��ݸFN5���� \���W�<.�¶E�����z<'F�s�����C�n�$J����⵮��V�s�p<4B]鿺���
ذeϑ3��[����ֻ��6�{>�:7�=:\ꋏ�M��s��l�b����L>i$��o��ܸg@/<Ī\��'��O>��F�uM�[������0�����38�,��S%>:Q��ut�5���^�){�i�C� �}9t�<�9���,r���7D�̱�=kųf�k�a�&v��9|����79��'��{����^��$��G�;���sy=P{[ׅ�2cP���: �w۪͗���6����l8f��?�IJ>�5���(9���������h	}�yt�2� �PW{y�m6b6�O�	������7����
�c�<���Ğ���8Y�/��U�zN�9Α���<�S0���Bb���َ7ޯ��a�/m�,H=���&����}7��Wo��K��1��c#��U̚��~&��^�nkE���#�y���oq���r���>9���D�?|s�[��4樬8v1��4���L�)�4S��3�D+�bmg��^6ݱ����>� ���)��\�x��[��{=���}�^�����k?\�B�&��%<��+�a)^����%�[��[��C���6��tۮ�;�"�눣�9�r�g���p�7��s�F�m�����.��}���P�T�ӠI�^&����n���=�Ȋ5O^��(H���E�-F�+D�:3b��c�S�̤0��0�vUg�
ۨ��������s��Mu�j�x1x���x;����+0:��	�&F��ڙDSu��_���H'S-�}L�JrFp����D,0��IK^Ss��O��L�G�ɳ#��E�+{~�Y	�W��•*��1'��=���>�'k(Z�Hɯ�ao�UdR$���$�b��2���"�ܲ�:�K�,�ʯ�p��
�"��RQNb(����o�_�&0J"NI�$��
�@-����)
��FI�dP��U�nHAAAA�r�˗_��	�A+2�N�w@G
J'H]��Vz(��>:]�5j�.]�bŊ+V\�����ub�q���'�q]�����Cc�Cz
�H#�ˏM�ͺ�h@gT�U�
��-B;�X:`�����Zq���lg�!
�J��8�vC�q�y0�:t�4��R�C!��D�p̓P�d�&�� HlP���aPaae����;�H��X�DWX�4V����DQ��^ձ�4zt��Mi�Mdt�v�:��t��q�h�j�aO#o*-v3�f;���f,#+C��n�d��A٤��7���c�S'��ߔ��6��t,-b�GI�d fs�h&%��Ԕ��R:���eL�P��e���� v���[;;��P)G�c�	�r�r�r�<��i3������MQS�P��C-3^��M*�J��τ�_i�*߸�Q�����������D~��oq��il%�2:F5��e�d�25R�=G��Ȧ���c��'r��y����1LN�6�`�KK��
R%CR���dIK"!���S?�^	�3��Q�P<��WCd��"����r����ڤ�r�o��C^n���v�j|b��+���4��v!�uCN�ԁ"d�bg���>N�瑻�Q�.��o�˄��l�}��s�q_���`(O��%ܝ�/�t*Z�A� ��i|#���%�,��%�;*�i�G����!!�Hʜ�?�~����!�K�yvژdQ$<EJɥȨ��Q�0�a�0���ںvU��j�q�	�$e�2M���R樱������}u�`�����y=5�##S�?�nj�8f�0CABAB�=+1�p��J�g#?��y��Yw�,7���Дsi�G��4�9Jߵ	�-�
�Ɍ�&�ꃅ!�
-7i��g�9�������V�+͌YR��, *�t!vb~�Nު�W��Lc�q ����
�V{ך��<;�?V=+�
����n��W�݋���:P�a���JU��	�mp�l�B8r1u'�1u-�5u3�3u9������Q��6 =@���A�	�z@���1t?]C7�е0t'�`쁱�{`쁱�{�u&�=���bE�G�P�SlUʭ�b�[Ko�Ժb�3WN�)�o�/u{�	�&$�K�!-z��Ճ*��l_�h�х�Ƙ�R�zh3[��z���S�-������5�F������i� �S�U&��I���ǎ��B�IW����b�]�o"A�.��&^�R��[��V�FƐ�1�Xp�'\�L��Y�A�mz�����?K�jѱ,�6�c�ܰ�rs�5�@���}ױ���0�$���(�l�Z�M���O�I�dV\���$��֥:�]�5������&@�d9�o�
$��y��M���[��xr�Si�6j�ݾa�(�46<�-E�*�V�D�G_�y�i3�f˓�`1R�+�@�U6�C�(?_1eǁ���(�P�՚��4`�c�gI6&xp5fۈg��&�%\��k����mF�;���^$uD�u��%�G:(��ա|�7���vꂱ_+�͂q��`����py ���1�X�����Ƀ[l�
x�QD�bIjH�w�cj����‡�h�U���?�OFR{it>�v߹�G�k�Y��q�x��{�M8��&�&�3'�=�c�l#9]n�ׇ�]��r[�n�]�WՐa#F��c�hxؾ��9r<084<2:�c��{��áp|$Hd
�Fg�,\ɆT
�vGg'��'j�����p���4/��n9-�(Ɋ��iَ�A�I��EY�M��8�˺�)T��d�9\_ �%K��(�aBM��8���~�$E3,���"�D*#�y�g�N��{�H��
�zj�Aė^��v�,|�}qE�Mg�9FτpA��|�=<��c�Ͻ���(�بS�ާ�<޸�o�sG�7�
�zq���H�1bʼn� Q�d<�06y�:"Mv�V�{��nT�}��7ߍ��'�������Ln$A!��7wv����w)��J�Z���
F��b��N���1�3F0�b8AR4�r� J��j�y����R[/�����~����BE�uju%W�_�)dzЅ)l�UzeTf�*�����u�n�zځ��uZ�M�}h�vF�.mYh��U,a�ߣo][V�t���;F8d�����FJ�����A�N�>�i��oetc�*�o�켿�&�wB��r���ѫw�/�~�17��G�(��Z�UP^TQ�]���6k��m����(��35��fF\�
9#��M�H_,�e�aHlK]$:S��:A��@$��="@�֟1�$:E�u��I$ 	)'�b�n�$bp���>W��\8%@����`�ߥ,��+�
��3��fH�g��qM���O|��c�B��hP���d��T
j�1cꚑ�J�f)-
��p��YQ�
��2L
���pB�x�l�(\��,5;k6�+�V)��[��S(��p�PЧR��H��lWȚ��y�Re�%Oc�B�s�N�r�)�LĞ��q}&��;L}����}q����F���:
��D����G��_ !a�j�!�zȘ���z�}�恨Jy��y�rk(J�F����"�'~�������?����ci�Nz� m�&��n�Sk��I��s1�lqj�S�‹GmP��yN���n�4��{��5��9���_�*��Ȓ�*�Կ�l���k�b6D�m�5�s�n��2/DG"�u��E��9�&j��,����ZuU_��y�]������LRH
�o~�~$�UB@�+u��2�pNm�'��(�
��'7������ϔ��R=��%�gCd�o㩫^n+�#mD������m�~n� L�(���T���%K�&@:�E��U��n��0E��;��̣\^�"M�"(������z&2���F9;j��l�Z�֧��~��Җs5em�ڭ�<�'舄|�{bg�P��Fd)�$��pp��"��[�L��,���h���}UJ��y
x�Q$��XN?��x~�����f6���oa�T�)�R+e��2��>�.�ʛ�F��Gik�|Ih��#a�FR��%J|���*6֤��+����?��~c�+�X"�	�ȱ�J���7���LU��Q�A?[":��X$�z�CGu��>s�)�윸�c��_����t����q�Y6���x�
��y1�Y��5�PJ�*#��PcMMr>��ެ�>�Emh�3�O�	9�X�6|{9����W$�Z&ͤ�D����7^�l������Fj-�hQ�f�]�U��bZl��M�����N���ϣ��������\����<���O_�V�!���BF%#�i=��=؄����v]&,Q�v�X:T�J��j�[A[����
��F���;���Ғ�����שH5�'�m,�O��'Z~+Y+�5w��@���wJd�yK^w.�nr>�,�i�S 'A����N����i�v��O֎o�=��xȀ���<0a�������3	����o�x�cV��x(�m����L'zZ�O6w�';�
ZY~�uW.���ʓ�����3��҄Ƥ�2-��g;�԰�R��N�u=�O�[۳�24^����)��};�
�}�$����3�$djjm���~���S�[q��<�ǁ��B�V5]�2˹�B����R�nz
�w(�
l�i�`����ݵ���>+���k��ׁ:X�강VՑ:Z�P�<�jkT�K���Z���
,�e��zY�Z?�?��_}eƼ-� ��*�jg�^��@Q�!	B�Ũ��a?X��TV�-��=O��&8����ӥ���Ɂ��V]�ۅ�#C"
��7��B<`��x�Q𒠤��(-%*j�����Ũ��j���@���j`\�e�]�bZ]���2c^DO0RD7��6�}t�;���5sRI��fRS����F�%YK�yA��,re�k��^�yNs.�[��P!rD� {��Qj��*�9̑:
��3��6ܞfC
6�H��5N˳���v��v)�_�Ƌ��aߊR��c���u�7!ʖ�Vv҂��zr��m����X!Qk�[��`7�@�Yk��K� �2xj}�f�|
x|��8�@�
>_Bm�_�S�7�P�������/��������:�9~�,��O���������?`�	`,^>t(Su*d�@����o�iB�
ud82:�:��.�.�"H8�h�R��,���eBV�z�
dUp!d5�:P/Bօ�.���ꍐM!��K!�Cv�z/dg�.P��������=!{A���r"�O��E�吋�
ȥ]	�r�
��ap
�ρ�>�Q�B����C:./��B��P���5�w��\�
\�|����Po7@�������o�k�4��Vy�M1`�Ċٖx0;�P䚏Eac������H	����"�
a�Z��Db��U�,��9V�2e%\��eml�}bN���*71g"(Ovʏs��_sP��̅�U)GU�h.5%�J�j��Z��\�m�)���0֍�G��F}�'��1�
���a�@ �	����<�(fT

��
�=�w8�\��W���q�(~�@0߹�ؚ= ��d	�s���t�H����
�(�<2P���<�{
��r0����N
��

��Ah��c����5�`�d���
&yy�;>X`�p��Z̶x�9�-+l�m}k�-x�/>Y�|�W
���OF$�(��b��#qķ�L(�>#ٺE
��.C���@����%���6d�YX�
~�,�C./!Pd�SLI~J)C�r*"��*���f�	��YP�i�W4B��h����i��i�n�d�E��.L���ً3�҇
��J~�!�fZTf�4��}��P���<��o�UK�5.���~�~A�~ ����?�`P��(�0Q�;0)�~w�C�\�vs<�{��f�.�ۼ�.��7�_/��P����v�w�Of�҃(н�d;L�����L����Q��`���~04�#��`��(r$.r�b{�2,���Q��Z��089'!'��6���/5����uЮ
���3`�H�3a�u�����90n��A΃q�"�ø,���r!
c��c�Ȱ���@.��\�{����r�aj�� W�,�\Ms�r
�˵�v,��α\o�] 7�\��	�U��?_K�[�鷐�a�+�������񟡉�wS���d��XJ2�� �t�F��*��1RI�Ǜn���nI��"�������_���z+��w�oSSB�w�ࢀ�ܔ$�ݖ�7[,�d�g��Ir`��i�Z����@�^;0��4x�e�*xht�v,J�!�q��SyiN��}֜3����B�묙��nY*����l`	�}ݽ���ZL0��g�ע@�&�-�įg�#iE�@�3.��FW�
��s̩Xq�4�`&$P*%
���A��r�ځ�M΂��@T�=*�{�C�Z����By8��YF�|}�Ǧ��c�
��_P����6$�A*:Z�M�/��;�x�<��/p�|�
�;?6?( z�MjT�l
HE�u+��G�BA+cføI���	j��|D�9R�!@�Ԯ�6){���U
ʎ��Vr~�R��)�U��lE���XS���(�K�>lJ�Z��	(�	|Bp\R�1��&��Cĥ�w�>�R�Q*oR���z�A�r4*��_t�h&>|bHt��Y(D��;>tA�9�EV��4rP�}�+ik�nb#����І���H�������W$�����W�f��:�������_))���R����0��P�8X�1z&0 ����2:���-�.��O�tb�fC`�MK��t�^�L-�_��K�N��@�8Xb�`icr�:�8�%�{�	�@T��F�0�eHw���I1�3�З/c&�`'<3o�.�%��,#92���H� ))��(~�@7j,�dljV��^�����g�/���PZ��&v��41"�98�4�eqT�G�����LjGk���IG+tnɉf��H�+�a�T8�/�ʨuP��8Xe�6�W�7\q��r"�2��ɻ���8z/��S�v9�gLiJ��R�l�x��e_N絔�
^��A`
� �«±�k���_�2��ל��@6��8�t��N!L2נ@I�<�1'z|��]��@��;v �x=h���h?���da��A�n�"1:�-ԁ�`M��/q't���-+8�Å��WTz��5��	��Bd�|�+Rm-s7���B�'Lx�米����K��v6�Qy���&vFJ
�!�`�cكx�9,��7��!��}ɶ'��D�b|������D�KUN����)��<��Cє[�G���p*�Y8��&�S�(�f�a�\�`��'����9.Mr�R�V�
E�я�kS?դ�N+{�,Im�M�6b��b���U
4����U��䖥��Z!����ܰ��#u<S�j��Y��L[�������lۭ	����XMFFB�ܡV]�C
<�N�匀�g�I(}�"O�p�����^?����_��=�����HXa�,3�)�J�K�y�!!����0V���^f4r �;����^�
��*VwLj'��3���e���	&���"�6����UX�A��MBnm����yyZ"Z�~�kL�G��Z���vTU��W}D�UԶ�6�g*�
�1��WU��{~B�A����Et�޵�np����`a�˺AQ.��p~O:�۽s�@��2v1���HS�TD�A�/�wM���Qi�˂�g#/��rƉ���
�7�%-�k��)�E�g�#�߬�^�s�^��L�z�])��[�RC;�CJ��H�N���teUNVY�B�X���`z3�)�lxʖ=��Ģf>P>�-�]u�8-vi��p�!VJ&M�-(`_?�\%H ��T
�{���r�v
���Ea��3�T�+�ԼA�紼�U��;�a�i�%m��MY ���{�s�d�uv�lOhRu�d��Е��d3�8\m?%gT���OS\�K��nt��&��D�`��r�]�sc�Y�k�/�hu��`a��%d*�V?�4G@烲����i�]��֟�x�S��C�<����q����m�/�BZ;��w/ȼV�/����a���߉�36�#�	�lqAy�{R�J�yl8�L�g��ˏ�`�t�?W�ЙP��$<�MPk�OȮ����e�����-��]n����:_��p�7��f�N�f!�͞W���;,kl��O�
����>�9̩��$�Z4xO��̨IH��}��-�~=��0#m�1/�/jJ��K�A�֐?1��Q����3AK5'c�
V���@�4�����9� �8��C����.�,�􂚦��c�1`�����b}�	Չ|���\ngG���h�=����
���U/������ک�RaƼ�e t:n��T�Wt#��Y;n�n�rY�r���Hh���������w#1I=K�j-ޖIR^\ԨC�!O�QA�©~������Y`�b2�� ��\�!�>� ��0�K���t���$_�;L}�@���yu�u�+�-�m�),�PCY����93�`^��nl-�vo�w��|7P,��s�i/����8Ci�B���S�@
eE�lx?N��g|2�?���[�F=�|��I>�J�]���A�a��R,�3��D|�b�r�q:,��٘��R���4pBd�/����Y+`N6hpЕ��9A�\���td�ԫzq�e����[8�`g:�p09��$�ӛ�v�R�[���l2���/k��!�S)}r�E���u��e���e`�(�S?s�,Q��]62n���}N@�	�޹�b����Z:r�j��Ů) O�~шr�������[C>^�Qe��=��u1��>j�ʫ�R9�
�=Q'?�mG�LI|j6�"F��M��4;ċLN8�T�ڤH��4���[)���ry��Pe���S`l�l6���8�Q�G�.&A��6��߈�g�ZJs��aZ�P��R��^�,�=�s���ʑAґ	�vg�:��[_��V�|�f3H/��H�%/V�'e\_�Y�\٫����ߜ|/#��_�E:�@�r�Yp�mƊx�Zt�/��b�W.j�Wm��$�U��R�˓q?]�-a�H��r�X>��r��v���t~Z�p�qɑp���z�<*�9�,���nm�V,xqT<��O��*π�Ǿ�崮*V��y�ë�b��R��T�@���6�o�ɽ�Y�d\^��h���L�/j���մ11I��]z�|�`h�f?�eU��ݙ�M�vfIDa>�t�K�.����[�V���+����A+��ރ��
��e��b�1x�a��2=�imf�n���籈��
2�~*tCȆ��F�F9W��6'UĄ�t]v��\x�ˊ�K�{B��HRtm�P 9�*���$���s�Z�\�{����UۜP]A��Mr"��&�U��m �[�w�?*�/��2f��p^E`>U����j ��"V��
����$r����h��F��h�D�L��rW��@��.}>pB�M6�;&�)Z
F!
�-��r���
�t�uX��k�����_�1�=�Hu%�F7��P��mYXge���j��G��]v#�Xq8�1�+}u*��҄w`���#4$�^䕢0�[�5[��K�ݯ��[�i;��L+j'�^#��MH���?���`�H��m&��m&:􃂥L�mO�
i�AU�ZL�!�_?�'_f�y�!�D:ԏl��M�;��*��hѥS�v�9�G7�0�z�QW���A�{ԍ��N�B*\P+��Ÿ^h���y�&A3't�b�Wbط�n�Ù���v�I���r};���*��/-%��
��`�Nh�ܵa#�pXx,�d=�KW�،�[��?�)�{Iny-�ZzW弙-���X�Ks�a��P�#����8p߆�[�#7a��H�C�8�2���}��ݨ�$dd��+UR�k�
�e�#3.3~�x��jwl�nD�ɞ���TAV�b�{ٹ2�5,Y%s��	�k9f�3�>v�6��}$� }�Ȳ�"��Ej��3����NJ�jr+��s�Y�q.�Mmq��z���K�?�֘_\��0�f���A�k��{��&�@�O%r[
<���؇��Yd!E�2a�tJ�H��r��Q���ם9}�P�N���tt-�s�O�� �|��&ǥٵ:q9��w`bj9�Cݠ��#me��:������Y��k*�۾����3��8�g�.V��=42�g����:����{C����,���������"~�4�Ph�+*�B�}�
��y�]|0�!�p2��⁓C����W�M>)i<���¶	�1�p�G4������$�|��#�3��#w{
e{d
h�A�o��K�WJ��hI�5m���އ=x��Cc���/����=�G'��lfc贷&m��m[�᝛��-w۰��߾Y�l<:���#�|"��w(�"B�Q��A+S��J/,�XY�v�㡱��h2벼��kv�8B6NN%qD>q|ex����<*��^.Iͩ|lB.��P0BO#��\8�/I���XP�r�n�Q�H\��rz��T�ʤ9���D���̈́���������EwI)6�!8{�v�,R�~�q �_P��CdP�#����5Ij��!{	�
�6�����&Q�*�ޟBJ�3B�4V������$"]�[lÖ3�:2,22;��&XID�?���J�p-�a��8'�t��/%|G?�Aro���8��li�Z�j�D.��=�ХE�6\N�
�
���K�k��P�}�U��ö.VT��ѵ7=8��5�;�'!�3K#V"�g6G�Ւ��������~`|Z�I'��g�%�[8�i�m���z��z���ao���ޢz�hP��t�m�����cJ/�i5�����K+� �ɼ��|���f�_x����d�1�(��A:��s#t�TF�32B)8�c�|�x� ��	}:�eʰ��	CT�Z��S�Ml�3����l�U��^NA7�A��U37Ir��b^�ّ�
V��^�����!��-����m���	k|2�#Ѵxp�I][^�Mj9�)B��R&d��>�k�jp�l�4HB�dt�bE��'�f�1n(4����B&o��MZI�W�]�t���lJ%v>���:<�C��k�	���I�oL�F*��/�mw1�U��� Ug�vYe@�gQ��ɂB��>������n�f\����ʏ��c�����(��q���#�r�č8X�Q�Q��:�οZ'3��)�s�++�%����z�eG�K��������t�49�%��x�=����PV,
j�L#��'r��a58n�#�4����]xk�ɚ*n�7?��:�g��E��
Oh�'�o����#0����<Mϩ�ap꺶zp�g�f�[��� �"�
~�z��)UZ��r��P�TxpN����rF.�)�4����6�"���O�X�?�JB�r=��v�V�}F��w:S���߅G�Q�h���?5���	�.�}-��.�8?�� ��h�����B�8�/�0�0ad'���٠�!�#�u$�/��A�-�D����G>�{�I��C�*�v�z��P1h
x��T��#	=����ށ�Wj�cbc��>)Q�����Ui\EF�碂��C[ˡmo�����:���4obB����JwmSc�2T4�qQ'֭�Р@�<�I[�Z�����O�ߡ��ࡡ_���B`������F��)�2�n�x��X�\ҳ�a.7YN�bg��G��k|AD/5&�����~q����ޔ�)w���<?7�t]d��j���:��\�E�0y��y}��q���c���	��*�ޛG�{L�
��%���&"�`�?sDS�.�ǧ[!���f?�����1�j���d�\W���V�	q%��GnVn���6)�!;(����7*EC��^,͔�3$��I�̉���)	��Ѳ�*C�+huy�'��{ƿdw=�Ē�b��t����śC�����Y�p�q$͟t�U�ѥ��
;�ٙ^Nc����]���0���H�Ȗ��yy���q�B���WLJ���R�G�f�[SD�e��j����`4��uZv ����ѳӢ�s�G�MP��"�+~�I��k���N�F'�ٲ�/��E��I�b�@O3���s8����xs�	D*a%�����w�Mg�R-癊��>����JXX3B
 12
Л�܉�l��J�0>��}O��!�?��u�Y�Ǖ��s�؊k���^r�WFXp\{���&5JΫlv���!z��iι�0_��8�XS�f�,ʝZ_��m�2������Zr�2��=���*�ٍ�8,'�r�yv�V�\���N/9�>GGȬ;@:�	:n6���B�k���۶��i�?�(0dZ���<X�F��A�(l<���d�	���$2f�!���m1���(�F��4�?�b׺Uko C��#dU���{ja4���8+��)݉�6��ڻ2�'@8��w��|�T:��07�� T�yQd݉���2�M�U�;�Vz�Q	��љ�G�drG��uژ\봩�hW~¯�!��ȁ�[n��G/��RYz�;�H�����`L\AWi�[�N-u�<rp�F��;�eQW���HIn��A_:�s@�!��D�ʍP��Z��i޵u΢6�kT��Gb6�m�e�Q�3���n�m�f��{���%N8sztr��+L�����m��;�J�t�Q�+��0�o�q��g��^���y��bJ�EQ�t���a�+�HT�k�?ŕ��I�t���p�}M��bE4�dG+��٫���҈����?G:�w�+�|�z0��,�l��(o�R�iK�Ϡ�|�	�#����h�<�	{�@|�٫<#W0}��ܳ�Cwe#vh�B�q��HȢ�*�5��g���Ny�2�7L�S �'+ɡig�=�����c���`���ɷ�`���cd��r��?y����S��$�{X���ߧx0д1`4Yӓ�_���΄4�b2�f����5�p(b��F�����(�A��/�z^=J��@������?��2�诜с+�
IU���*�#xB�h>�<r����`#,2�KX.a�����?c����9ںۈlc[]�ddT828G�	�/
�$�<���
+ʏ��}�FG�S�x
��U��1���Bڂ��g���������Htj6�NK�t����֙��^��[$�P�Pٳ鎦BTGy�Iz�[r*Z�^�U�`�璅��a�:�"տ�6K� ���oZ|�}�F������NOĒYu���\�ՀG��"PO���C4����~�k��e	Fs>d'v���Ⱦ!���>��w�ϝ�}���@)�1c�AAK�[�k��x�y��+��w^r/w�>���E^
��X3U�5fA[�ufTj�4���("�G�9�3�ข�d[�E&��;��+�.JK�q�*�F���ÁT�]c�?>�]��P]|x��x�ب�>O�.�<�Y����+ΒF}b
ٻ�Hu?�W���6%{7c2������U��7#��uy��[�@d����*���1�;�n���!t�.~�����{b����ÿD��R��C�����O:o�uw�k�<�=�W���Zٸ�K��z
���M�5/�ɾ�S*�Sp��1��-�We�M����+^�ݭkW&Vϙ�F�*�=Ky;k�5
7�����7 QI��`�x���$�f\�[�O���9K�o����#cW�?W�`ŧx�ee�B>�f�&K���Q�)���Dv���(��ژ�I���[<	Q�5�T��bR�������\��7В�p�_l��2��t�!�3��HXd"لM�.�s�*'ؙ�6���z���A`�jN~��P�����<��k�6}��~M�8i�aVQ~� ?�����׺�[��*�E.��^���?P2s��i��U�� �fd{�6��O�5�1��p�c+ճe���#"N���î�=W~�]��F��ީv�1 ��~�:�
����G�����T{0��&�,�C�ν�A*��C��AV���b���b����|G?
��4��������;߶q%�z���P�IT\�n!e��y0S��"��&�z�K�7������;< �
o�t:�q��찓�z�8I�&�n��V�a��ԡf�z�y �ǧ���~�pL���Z����TSq����υ[א�[7
�uj���֦��㠬�̗���j��<��#4IV�t��ߗEژc��Ó٬0U���Kx�r�ג�ﴑ��uJ
����ٓ�rpL|�o'P��',5�k�D
�(�9�zm�8Vgz�*(7��VZS	��!�����T�	�E�
�[U�VV�V�;��?���,��?�+�,e(LytKV�S\Z�XW��
s5-�|�q�?cBDu?询C(ء��#���	��o3��&ņ�'�l�0�sW#���a~�o��c�F�d,�?�l�[O4*~��4�t[uR�������S1)�a2o�wo�gS���h;�]keSʱ�����D������y@��	�%Ήmث��+%�����@�P|�k�6%��qv�ȩ�%� h	��+�s��r|nin^)�~H՘hge�h�r��Z�@�k�!�g{�6,��TIn7� �ӢIh[��f��ד�ѩ�
ۇ�!O�FW�m���	[w���2�2�CI~a츏0
���m݀��Fde��UR	lX�Bz)[�P$�	�-�����޺QrC1D��vQ@�p+(�,~���Ț��"��7�o�%\Nv�5\��+�^'�sO��������$m{S�0
���wɃ�I�A�:�^��q+���������	�����A�'��.���!�3Tk��������3ш��Y��
:��(Ƕ�>�xS_�����}��3n��D�9P���j�j>���Hۈ���:1��ƠGmt@�8EN�𒝅���ݫ`��jj�U��?���0����aO�a�K�Ns���^�=��X�rG�=5�����fMv�o�6��-��wNd���اekh*�%�,�F��LY�k�{2�7
ȑ���ߌҊ�ѣ�\�'�Ơ�~�������`��T��*(qK�+��P�,�4�7x"��(�T�[����YND�ν��>��J��~L�4�����'���.S�]0�w�]'��8r�s��B�<خW��&�}A�4с=���G�[��/��c�}Y�OY���/��66���]]��[0�������=J�G�.@�WD��n��X��m7���v�t�Df���9}{s���B�2O�.!�B5uG�o#)c<2�m�q{NT��n�L=��߽V#�p��AK����K6�,��C�`�V*7Z$�*W���Ώ6�(�cEi��İ��*��fn~E
Ռ��e�A�����ز򞸬Nx'��Uaa������{τf&'\�{���C��L�fn9�1�_��Y
��w�>X����qI�P~7c�ʹ���e�.b�w��e�}���t	ȯ�0/�i�8����Ef�R}ڊr��C���yb�|x��H)S����l"y�tX_�R-+�uI�{=�d���!Ǡ�L�>$�~���O��aa����?��G�$�J��G���G]�q��\�Z.#��-�4��2p�K��� k��0�Ӣ\1���cVB�͕n���u��[⏐�t��6Y�	����%�U�v,�O�^��]#.#�ۮ� �
���]��Ӟ���P���I��:ty������Þ���6���jl�X9�,�.|t�`?�7䞓�
�NAf������1(��x?�����K�W;��:<��g^T?�y_���׭�;���W�U����I��C�~]pNa�!�����x�uT��b|�
6��
������?�a5���<JF�å'u>m,R������`3�ؽ�^$Ϥ�'f{�bC�*6��glJh�Mq�)�m�����kU-��� �$Oov���%�17K���k�ֱo�`K�q��c�n�ֱ��\d�uV
1��)�#���H$���,	�<��T�Y:�)ʑ?��I���#�Cn�ho�?+lw�#/uu��3�q\�z�����-��]p	l(�Ed�?�M�R�4�%i.�v,��;���ؗD�W�waw�u��9EKg�p.-n{g{m�7\Z	�6{��Ŗ|�(�j�լ�:�h
F$�ӛ��%Em�o/;����י�XЉt��A���@;.��y�b">���L��p.�Y��u��Q��O3fz��0b�v�^�%�q�S�_Xy8�b�H����������RD��e��ʚ��Bb	P�nWx�\PcD^p��Wa�q�a�@�&��+W$�W������'h[�@NjT_��݅ţEo����$ÿ-f��Nʭ�$3�s۹kz�S�#2Z'tj���_��‘���w7��x�������&r��E�e=/�Ɔ�I�eq��co�dr��o�^�
�*��dF+��n���kf��7P'{jʲ�]�Ф�7΀D/ϥ�i|6�[�"�'���4�
�ΩW��Ɔ�7��|M�h8J �G�oؓ}��`$�L�j-	{M�O�o��9�r���R�r&a�1$����w�	�ꍶ��D,������a��B�8�v���$O�]���_���9I��;�Y�j�ʯ4���$pUƗ��H�����mM9d�*�M��H_U���w>��uG����
D�O��mz��<dd�[�~G����&�F��V�T��\+[\~�\$��oqM>�]��h�Dy�e�[2C[Q֊D�%�P��b˟i����w�%哂4彻���,�#�R��4�?�aM�}v��Q��!~�R�

��KH�M}N;�~Y��Byss��l�pf���|kAB~Nj��V�`WL�����+Uݠ=�2�*v��%;+qp�L��� �O�X���c�����D�v�����
fmk�߲p����9�5�Oo�������}Qi���^�\F�_�S{�El15׼��ߨ�$�֟�ߣoH�]�`ھ��ݕ�mX�/��uD�
f�9����f*��Gʅ?l���X	�S
��O^���F4^zv���S)�� X�}���a��D�oH(�w՚�ĻU�/���%�-هQ�\^��x@�Si3�%*'h�S�����M<S��0�%��w9B�)���%[8�����I���Qʆ0�{y��{��3D[�K�j�-D�7�_D�?͎�mzD-���Hߐ5�55T�=��T��F�\���O�"Q���]-9�
�L`�����eA�OMb���@g�yq��R��!�?��E��*�'�3�!,s2bsc��k��

�Ӟ�3�,���咴RC�0��	�p��)�5��=��6�M`(@<\�KV�SRz��f��QQ���dq���R�;��44��G�j�V��B��>o*�֛�%�?�ɗ3�V7;?Æ�����Ecj�X��J��W����Eƫ���.�6%%��;e<�Ԩ��1)&)��*�c�a"xJ�n
��-0�%�,�8��y}��3H[��C
(�/k�d[�B�r���Se�K��E!��L��V4oz��/�=��3f�0ދ��OHa�K�Sh%�q�$��Τq��ff��ʸ�G$I��x�"�>�h?_u(
���^1�AH�G��2��z2rrS3�!�r�.uݎQ"�n���E-�%�P;�;�Խ"%'��1I1�/�J�‚_kYS�p*G&!���1QZ�ħ��Kr�D;;�	�D���Y&DK�zd�o��c���N�����(�aX�ǀ�`z�}���0�?�\^�a[�pǜ���,�t
1D[}G+ ���g難���XB�д�w��W��`hC�'>�+�*� 	
je\rŭ�	T�ޚl��C����
���e�xG��<��cA�z}�q�xh͏��;�z�Y�5�G�+ZIC��%y�٠��?���;��9���_��v���ۙ$��Д��:P�y�0B�����?��t������w)8�u�-n�[�^2;@*�B��?��c����ݨmʅAۯM��I�9�d.:�
�Nj�	�8|��t��&,��?�q/s���gPA`�+�3��/R%	���u�sV�U%j�S6[B��br{t�kU��jab-H�:��7W���0��xJυ
��6X�#	@�u�9���5D93{`��1�S�zlV����
�FT.���dwn1�ΒVx:~�<b�����U�G>f��A�tx$S�b�t����E$/�^?e�k���A��Z�d(��bc�z�b
�x'�}t;-�~�dU��Ʈ����Uc�ѽ��G�Y�H�j�)d׿G��S+�4��A����l�g��a�d���M��P@���jAT�3Y#�����OBohX��kj�/A�`�h߁��2*�?���ѹ��c�[�$5�j_��`y��%Xn�ɾ��Ҟ:Xv����㘨��u�!��ɿ 	G��*�;ķ��7D|�.r���+_�m��q�����.��ۺI�o���ٟ^�%�2��^��1֢�D.nٖe����A���s=d,*��o_I�Cr����dW��x�\�*ȃ�w�!�}r�*,F����Ωp��`�J�[؇?:�;�D|�9�I�կg|���韖y��{�6p|�W?��,�F�w&-G~�M;\{ղ5Q[�V�^�6W#Q�����B�16�i�j��+Z��xÿ�~nX`_�b����׺S���-D'�1H��|z=�u6��02���/�����<��VD:z��
M((�u�4}��hu���zC�~�C�>���8�<��޽�B+9�c��)���J�͎g8/����p�
�HWB �DoB����sW;	�B�t������iߨ�l����v���������E:R���U�V1�&�o��kN.�{M����s���X���3n�!��WF�7}&���F�r
G���Y����N>pl㰧����gD��,>-�W��ɟb��n ������Ϟq&��c�:ST7�h�߷�
�����Z(�Fp[��(�W�.[�Ȱg�87�z�\r��ɿ�7O�qq�}���*^��>�Pioj������8���x�&���pJ%?�Ў5�ӝq?��q5x��LG'!��d*�^�����a'j���%�\L�g̯��d:Md�B3��׵���W*8���wO��PLZ�D��&��@�LIۺ �O�SA�C��*�̈���X�����/���1�z�
��^�/OE�{��_7oς�񱠰C�ʑ_NfA�!�>�P�w��L�b�2�6�h��Ӱz�S쇞��wz
��P;��K`�(b��#qs�K~ qgm�s����|}߄�[n�d��n~:�*��dIDJ12&/}��߫X��[��)�IG�P.�(JQÍ7�
)MpX�rr�.�y��6p�����o�'؅�����0	��d?��W�Bs��W�u;���^WY���+nPDŽ��-��ae�VwYD�%�;�"�'��w��k:��k$Mh=�~��F��ڈb��G3_A�ũ$�}��ʫ`��4sm�4i�<�584���o���:{c��gj����ha�� �����T'僃�a��'Ӡ%(r[�
�q��u�5�
8�+6`s��k�ML5��3���m���������	�[����i�v%�`<���L�p���W�k���ܕ;�ɓ���Y�f>)���x�q8�I���so�v*��{�{ar B�7��[p��f>m�]�h0�[>c4��^��P�3x�9�����p�����A�J�{�gL�Z:����-�c��"���.޿�I�~'���[�n	�j�!8Vx��E�蘬���X��qY�Tlv��4��*�e�(��DPg�3��sNK��ţƿ�N}	���\&�{���I�2�0����
Un�$���S"���O]F �1r�F�13Qjr/쾩�
w[������#3�0���{g:%���6v�_S�:���NcNE5�l���N�3�Z=��-QD&�D�������o,,wu0Ѽ7=�J���ŕ�a�}_�@0�4�a�m��z�y1������x�9������;����bb��H�/��W^?�$���S��=&8O	6�k�Q���0qRS,keD�8�k��8�*T��/op�Af�_	T~�JVjlS��^m
?fO�����@��&Ns�������a-��U?N��U�Z'!�� ���
��$�
z=��“�i����P��'����&|�|�/G��7�ӁS�I`q��f��
%º�����t�\T��mͲ���T�)����*D��p8�8q�G��vmqv¾�+�(�9Y����5MO�7�,ȸ�0���2��΂��#�nN����]U�	+���#��2����J��d
;u/�C�
)��{��t�s ��_�(�$O^�O��j+�㰟��B$`�
��_d<%�T8�a�t`�?��t�[���t�b+2C�4��94æNc��:�T�ƿ6�q�?%U'Stu��ƸY��<A^^j2�L�Ǎ�`��b5�#�(����񄑧G�{�f�v����ˇ�p4��X"�^��Ԑ������b]+���o}�җ�rNO����@N��:&�aK<����@�lO!\��V�v�w���u
��*��<�%̽M����2�<��C�[t0c�����MA�m�jM(�b�Ñ-�SYe�@O����"I�Y��«����!ͪچ/�)Uka�k�][�8� �,��?�Qw�E/�Y��;r�L��/iX�#�j��G����8t]��de������]W����r���$��,'��������<�ɤ��0�Rd]۝2tW�A$S�ɂ�k� �V��p�"��7	����Sr8�M������H���ϝ1��̈́������j�:6�m���z�@��(��R��� #u8\F�&{U%(�,�L"[y�@D��N�&���:"oA�M�xW^�m)F�k����E
�q(S�*�����
J/ɃQ�E2�H��US*�I��#��
~m��x,�LW�W�zyV��,�Q�7V�4\�U_h���g�%�ax�c
���_GU��R�ґ�za�x}~tѷ�u�+���X��âxm���pC�qZ�#g�/�J��f,ߺsP����9< ,&��9WpyIqz�ES���f���p�2]�9T�_>����}:s O�?��F���^Zn(�(�W>V˒bf ��V��Vۇ�Gɢ�|s/�}�
��4#�#Zs���Ͳ�t^�>s1J�n��HMl㙀��ї��@�'b���τX<b��>�&�Y�X��rF{C� f����1X6]��L��Sٴ�����w�2~���C�����6�p���Y�rLh�f��
���d�_m�i*K�-�׼�m+��I҉����)�D�MKF�SO��Fl��6x����qΚ=�����S��4�:�;�x ���]�zS-ڀ3�d"�VQ�r��Iη8[E{��x���1�ms����3�ԋm�yL����bH
A���F��o�7��<5��lW���\�׻��g���zcU��`ʹ<#�$y�
�����
-le�.�Z>,�a9�`􊳧�SRUQH��j�Y��to��W0�m�?���`fm	>{<q�G�d��c�*���8V�i*6��h��¶=޶6}�N��g.�H;-R-��;�2�)��9��":[f?��bj=��́�+�O�c�%���7v�xr��{p��ݤC?��0�-���o���I�z'B�D.�[R�%��}�z�#�y���Ma{;KKIH/r��f�y9x�_�����o&O&���/���-O�p�߈��u�J��,����;j�y�/|�-���21�K�$�'���^���2�╏?�!J�z��2&:�qKz܋m��u{��	��p�X��T
h�ۊ�l͠���K���QHU.��W؇��Ś��~�]qy�KN3�S���
QJ�HZ���b��DE���ܕ�Qne׵)������c6X���d�Q�� 30m+��G�� /���'A*�_��r����l����dx{?���P]S����Ϯ���O[YnE��$W�
{�;�
0O�qc�������S��;ĹC�g⧄:�Qe;	}
��7׀l;���
k;���
�
T�H��j��<&#�'���ͷg���cI�t������t#2�!ܩ�K^Oz˛;��K��m���z��7�^݀�[���qb�,��\y��?E�Ӓ�9�V0���KHz�;��	��m;�G����~ަ�P-P5��QZ�cw9' +ﺜ�?ؿ�W&��p?M��iN���)w��sӵ��5K�0�|�����`���~��_�N�^c���	*KXA|1�R��qڤ��G�£X)���l�t�P�s�j�k�+#��)�7��A�$}>��
���י�*|�`6���(��Cv'�@���
�/�ӧa_��w�1_9�ևg?@z���.ߴ	��ӮB�r�����,)F�����`"�k�U/���xQ&���$t�	gn��E[���A]\�!!���#o#�]�
:�&��	|�1+2�-~��3�n���?#:[�Q���lN�y�}�	�D����Bkz�]=D1gS���y���O�g$@���U�{��
l�Ipr/��k���Z�}Nhp��4{�$���'�㣭��d����+�wşǩ�s �L/uT
��sH�B�や��QO-.��(ɰ���J�ů���Y�4T��hg8�3C�M3��q�΀�u�3�;[]�`ٱ5���t�+ؔ��7������~}��O+���n�tv\�Z����?N����"�����u�r��ږ�nП�w��[�\dޚ�	��bQ����z��@NAI��1����h���Wս�����l-�3Q�и�l���T68JuUm@�,!��7��*7����@[`�ߧ�������|z��%�����ԥ���֘�NݚK?\:�P�G�b���H�΁�����%��?SU�I�6�Qk|�{q�[��E"�����'���b�~P�:U{7��x`�1
��lhf�$�\�2
��4���l�>!����OQ�h^XG�-�
:�]۰^��!,)[:�pw�k�1P1�KG�o�z`� ����r�ck�-�O�΅�!,���IW��k�0;>g��7�
0��%�-E
���mOG�7�]��ߑlg��'�Z����U�l�N�fJ����*�횫z>J�@ �y�����<�Si� ��u��0\�z���t��|��+�6Бn��	JJkJ�����A"�x�q��/�x��>JT.Us�~���,M���z:Rn#aw�X�V�%Ȑ��en�S/�����V��i"1�HV~�$Ym���a�����
4��8G��8
���l�U���i2>�h���B�k��k�K��4��s��Bp�DNb`d�t��;��K@vFf�\_Oפkq�`'�G9'dg�$���O��(岣��,Z�������Սt��i~�$W���}��Z.�2iot�O�	}�l7$�hS�m≟��ɉ)�����q G���!J�W����%�~�@�ă��VŹض8�
���F�ʖ(��N�������	�
���*�� ��X�O��ZZ40%�u�A"��B�����<��L�$�=����Iؤ����/壤l��º�ȱ(FT�N.ĘUL"r��NiEEY�,V��/�E}E�r������W8FG�)�y��ð��	BE���r�%\�Pܩ������r�����1+����������V%�	����ml,�':g�&�����r�� �R Ћ�-P#�̓�?ok�|C��g�i�O��s��h�9�4w�,Oӌ6��)YX�,#՝��۸��,f�h:���C�Ϥ[t�q����[�����e�-�?-Ɂ'w��I*p�ߚ���
ij����8�d�$�>�U7r|\��</�f�|��5�Đ�(���ѫA	-1�nj�M)J=&��.�u�m�<�E��Jm$%�4�^�=����]��f�M���IZ��Y��h�LLn��?y���!�[MU:�t!��N��"��D�HN��X
�:J�6A��!��5�y>;P��Z��͕ꠣ��Gh�	�9E	q����>����U�!��e*݅�2Sr㜯�p�����M��e�Ԭ���Ԍ���C��ɊR�ၲ�>���^���5�����A���|#b���~�{:>��!;��8
D�W�_h@x�Vn,���W5n,��S�4�������������	I �%�������k�.D{��r�΂�qñÙó|{���['��=�a���u&#�1ǽ��M���>�f��ܛ��a�D�Bѡ		��K�t���'���Gw�-XJ�,{G@okg���4U�2�Q�D�wj��ce���.��'�9Wc�&:h�n߬��jyDR�53pD>b�U��B���R�����m�I�ˍu�����pN�>��o��o�}oΖ%�3�Ü�;��C��J�Z�\M>ˈ4���~�""���OA𧀠�~j����m�Xll%�Ŧ9��g���/��V��:
ʊ�x�(vUu�6�����ľ�,����	8R6[��P\"����F�(����O�"�^�t�A54�D$�Nf��h&T����u����mw��f%�ܛ��X)�(kj𷥤���=����+h1��7�ٺN�I>��?���֘2t��3��7o>�k�I.g�6��l��>o�h��)�[��^m�/h�}Ղ�7�4���8�T��{��K��be^����^���ֺ�4LQ-�m�H�ڠ�m+��1�^Q6���#դ�_/��B�{�N�������$�}�>�����Z�R�}�/�C��"�v^4��������	�3�)X��$7�3��~0
�!žK�v�Ù�/�%"�H_>n�O��x�+	���q�y�Y��%���05r4֥��Ɯ�vD���g@�ц*[�pm��1��QC\I>3�|��-�T�B��l��Q����'D��Q�	��ȳT�zy�n�6��蝇`���mI_X�/�W�0LP��k�7��2x�tbZ\���c�ui"��Q�sX��o��-�HH'�tu�咯Y���s*�@S>��4�a�%:��q�Rp��4�.y<�E$A!)Ʋ��`��\
C�$�<6���e�����>�ܦzT���?T��(2[+�	�v���#���TM��<ޔ�1o�Ljg;��'7g�Ә3�i���A5��q
7�}}�s�����/O/ۊ�wb|q�w���e�vx�Ҏa����Cmgb���|2)+��G�Tů�dR�ML������E�O5*�nÕN�ţ�H*'-��y���E>�?,��_7�S�k�!?��F���EXb�2��r?���m]hn*��#�}����p@��d9y�S}t�N�?Ў���N�}A΋�����
����Urh�@�)�٨gMD�Wf��v"6!<��
� XS��q���C��08Z���{W���gCzɽ_�#�� ����N;�@��bj�7���Yx��S�LhpQ����u�a�9�^�|@�Z����Xi�[a��E��m�U�ƈ0t��e ��΢��y���`<RZ��ݦ|N;Q��B\�KV������ž���~���p9�	�i�5�tqL�:�&���a��m͊e]��`��Ŝ��Y�i�4Ӓn��ٲ��@mo1��O������݀:��Aꯃ�+,�f����1��8H*��V�>@3�4n���&6��G�_�p�;n�1���H��dr�@�Vw?�o�Bf�e��R��ҟa���<�h�\�����-����O{N��kW$g.����Z���/��.���N?�aD�GM�a�F�%[}�y�Z�>WO ��\R�t�6�o)MwBe	i�K��ȧ:j��
 �x�����-�5����9�x��cx�s8ؒW`�+��..��ކ\]W4c�%h8�v6ye螂��6w9���C�JF�Q哝jS�±n-��D��IWa�n��"���Ni�,��b����j��
diw}�z�/M���Bc;��%KWOC�=�@��ߜ+��d�u�[�aœ[��=�nj]�>Ÿd��\+^Y����9!���,k�Umԟ�D�V'1������m�
�N���rHv}��_������ω�0줔�$�����������AϿ=$2<�K���8��9�H�y���LyAw˔;1�d
��bU�l_�ӳf�p����{ �d�����P��8���n�\H��/ZU�r"B`��.�Ĝ��)��V#�a��1���2X|z	��ie�0t	0#��	��i���j��~j�J��Oc�����v/�:�u���V�����b�L�S�9��*1ƿl$)�:x���U�*���D�[��؄\r�=��
�|y�؈��<����$�CN��;1#lJT�.�,_��I�Gu����0g�f�@�/�ӏ�0����\�����)���"4P�eh��ˇ�R���\(k@���/����t(�IF+�E�<�R2d��C���^⢡�$��і E��%�����)-kJ|-���3Sb�$ď%����/(hF�hp�HcM�����BU0b`C7`pܨ5��=�/-��d�V�,�&q�p%�I?T���F
Av�Ԥx� s!��#o�aK@~n��aZ���G�=9q�a�-��}W�hͶT6�q*ǟEI�t�9����%�D����r�{t`�jQB�LP	7�����$~�*�����mK��$���k�(F����!$��
��e:w
=��-��V4�U�	�ڼw���r���H-�����Z:�����"�s�:)1#l���B�U�*�c�������|���=t�l\���Dg�I�G��z���z���Jfn;8�ma��^������'.n�#X�\�{d�N��#k5"?ĕ�>�e�VW
z�y�
quRۛ�w��..�S{C�a��$M�X��}Xf���3:H�n���\ll�����$�>�7٨�Ž����������&�������>�~�����GO@�Y�b�hz/C���$.Y�@U�����(���5��K���s���-���#m�%�с��/�C���P�o�b�;�����y'��`c�.nrߌk���֍�4�ST$��D��c��NS��pU6%��Y^��6����<�aIc<й@�H�)�s��izN�z	2x�L�[`�U�M���`M�5�U�	=�ϣR<��f�z�|���E��5���7��b/��I�iU���ѕ�m5�x�삨��h b0�ّGX�'aW8�/���hAV-:D�C;͌�����pj�G�4x�!�1<���w�w�H}jأ;�]�.�,Y��m�+Y:���Ue�V'�6����ڹ���/k&?��3"B�H�ō�������
�mc����4�ȅ���M���>���#uz�(�I��f��BKC�f��7Ĵ�k���]_еI~�&���CE����])�d��~���R׀���)�P�������+��D�����H��1�� �_Q���-g��7�VP�I�Ž�v�����������Rۃ�L��M�b��OX �I���I[�`xmc�R�ӎ���mP�� }�`��}������$I��@��%p�d�On�3�ǜW���O�8};='����|U7pF\���Z��}2xe�w�x��^���Fy���Op:��+0�����K-VIf��
��ە6D]�������/����!Đ�������I�1W.�#�H�%�l4&,�DQ��|vc��H��#�3���g�
�5�{\�88yt�n��@P�#��W"�:�	QB����	`a_��Kʝ� ��d,�ێ�3)�=飜�V"y{��M�mS��*��a�c�����C�۱�X��mt�֛&�E��l��&��16tbͲ��������ğ�\�0�%r[�N�����
R6���\��H��#o��Ma�l��~L���XE&7�Ÿ쀸���Gp&��.��%f��G�O�t%�5��O���-�a"ĤѺ�1پ���X��.N�?�M�5q�m�����t%q��EM�(�N�G}�����!.N�z����)6��q�a�e�˞�0�, �\Kߺ��,g���U�?p��|~�"J��n)ka�]q���K�r�@6�O��ԡ���9�w��i)�e�H��<ix���,�c	1`���P-���!�S�Q�s��0o��,�Nx|�K�K���Mj�a�#��=q!�����"�:{��iks&��R\�3m����>��+��4���,m�M�y�G�����`B��^×������q���`:�\8?�^`��6�>���pKe�:t
�vZy��_p�8��؊›nU��_�i+�f�+F�
2�	SA�����q���c�b	*9�G9�f�m�^9;�ƚP����w��[$��h�k��_��iˋ���t�7\��T��z.�͸�m	|�2�
<�Y�ˠtc�}3VH=
���YlH[��F���˶TG�{
뗡?{�V
�視NJ�eȘ|�4|��D�:�XL�����"��^��,I��U	Ռi����G�J��Qxr�d�w�A�Eߺ�c|��ɏZ�(Veӭ�-��{�i��'N��l�Β����}q�����X|��qŬ8����g�ɵ��D��t����m ����=�[`���7v�޼i��Y�,�5Ni�澲]=\&�8����+1Xt!��?@�S6ؓ�
��V���]�>�����W*9@������N/�����_Zsv܄{����*��|��B�^aY���=A^���)e�9�n�'���̨�ՕL��'J�@%�ĨZ\��[�]�KP�UųzQ�KN�Q;��I�ک޼�FY���w�;�I�O]����d�[�b���3�D��̨D�ϊ�v�W��OV�=C��m�b[�pB]�/���(~��U-�)�9�P�� �軛E�{֊/�#�5�eB^1���M����֪�3���'�q�e��=�2�^H��+����=��`��ݙMM��h/A��|ީ��]�{���d��1@g�^_�jfz�2�*�[���V��Ul�}�N�H�i
F�wi�u݈�`�ߍ�k�����F6T�,K]NT�T�o�/i+-���<�>��ޝ�?M��he�ߎ��]6��W������|N��m!S�)�q���ƶN�WA�Eᆰ���������H���ʁ��]+�p��>Mee6G}����C��^��F9TU7�{��MZ�z=�Ǝډ����(=�%3�A%\\5����]��&����#1����A@�{�I͸
f9����[#F�'8F2xrr1��&�˦��"FUD��YH1ʿ�2 �a5�ơ�}m*
�)L����,Y���Mm3�F{�'v��!�qr݊hK�Zc��]ᜫ�:�>x1f����zQ�ᓈ��S��EF�&�4�bp��*K�����ԙ�����2�?�7�X���Ð�WU9�4�b�/�'�X�QY��y.�=i�h1AqRa��XXC����X�XM3���2-���F��zz�3��+�$D����C�_�ý��Ã�E6�K+A�a朗_I9�ܵr�u�����2i��Q˰gw$���^�a��i��DRY~!�8z��Tx�>�Kc8�'j���@f�G#������"�g��8�wIB.�ۮ�����]/y3���k%�0�,������dD�c�{�e�K���5*�jD��V��ݢL�U��e[�u�e�+xZ]�����־�r�<uAg�BL;H�+��5����&���lwrf�sԻ�g��+5m� [��e�'�>���Ԓ�i��Lh���a�;�TE�˻�89�w`��h&��`���%bȔV��v��-��#AO�<�� w����!}���A|v�|u`���������ۍ���⧠g�k՚A�� ?�qz���F�Q�Zt�M�0.�F�8�:��(�N�͚	�Q��h�[�bl�(%�o,�WQ���y�p}�t�B�%/U�}�)תLx����dD�3�'�̕�vm�������g�����,�4��U����d�:��â�U8q�K�c��Gq���}�(��=Q��8��]}O��ZϠk�_����=o�~������Z��5l�n��@��V;ב9h��~�4QQ}�~�}�M�0��?�y��dU��8��u8�7�En��XƩ(� G����3�?�Ph4�#*��(�oQ����G@g�t�l�bYHE��#|���b�?Wn]r^�[zx��}�&_���RߩY�gSt�u (�`:�F¤IvT��Q�^p���lVk���G���3m��1	�
R)�� �9%���&N
NψRx�dg��jN�	\��oQ��<55
�W~�߲�JlFT����5cr��"���]���
�f{vp{>�N�ᘴ�6#lƯ�?~؂�6B��|q6C-�6!W�+s-q4~(
��.�)n��Ǔ�Mw�����eIpV�:�P��y[X1�D@ޞ�h�_Y�~����/�cY�JD���0AF�[��u�iUZ-�쑺:o3X$�TtIWX����0�*=�Ta�^{�ohg5��8��xM_DN<��AqF��Z�l��	�80�m�V��–^P�������!���:�0�ׄ��kϡ	�0]��z����p4�ݥ��N��H[t[z�v	!�(��k�7Q�(�SY�%aN�%��lɬ^��-^3;��x���]~�m`9�>b���d��[_�K4�%��U�z.��\���{R��!'�����L�)K:�`�r��(�'�u��@�O�SN�R���pF��0p�.H�Rȅ��96ڰF��*'�"�\��:	�iB�!R��B��{)��	أ�1O�T(��Z��S⹞G�N���P��i$�z�=��Q�6�J�8�C�*OX*e��S�V�Z>�݅p�|��%������-}�H�;�E#�R�zX��[xs ��7cç�wp+��5מ0���<�?ķ?�3p{ٴS6�E�Oˬ�)�$�H�4E�����#|�ah
!�,FT;�-�ؐ�/�Ͼ*���E��8߃�����ў� m|K��-jbW�4|�J��lhjb�m�'�I�~K�T��p��9&S�JW[.��(:��[$"����t|�+<�ՑE��i@�w^u�o�N�ǰ�pQ�u�M{�&�\��,�:�� fi�+d��єح󖜸?^��p
��ӳ�֝|��s=�׾�&����v�,�ҾMŧ�e�W��{�q$�C�>6b"��Glui����A������z�3�I�zv�����@ߎ.Y���Hl��IB`s���`�K��(�xC԰��������u���y�b͆{�����8f��ű5�ޑ���JGD����(@�J�sǼ�U�߃�㲅�R
�{��G1��?>&��_�WL�|�d��-$�S�&-8GE<W���́�v���s�{Q79ȭ�v�#�]jg<��955�Bz�Qp��i��9���1K����R%@B_�z���!�?�߷�:J6&�ȭ�Mn�����eů3E0�Īa��S��#��/�
�S�p�~[�ػEK�d�t���3E�l��}[�xi��])��#�}����[��#�#a�u1��[����47�
���R�$0�j$$گ����ڭ@�u��&�Rׁ��5a8Ժ���V�����gJ�<����]Ύ�������Kf��V_�r�T�@ݭri+�6F:�����~��;��Y�裚��&�<��>f������)H�`�'<��l�^����b7�����Y;
/;�R׾7�*|��c�o�����$!������rJFY���=���%j-r-�����]Ͷx>E��+�T�?���Ml{{F�fOR7��~X�ٟ�M�8���H���n�9cky�rg����X�뿏������"wY�����L�@�1�{FЪ�
ir@�@���a�T�c���i����\S��U���[�?֣�HE���n�'�D�
F]dV�oq�ٶ��o��pѿ�~����}�˝}�b��ۡ�����ѽ�/8��nv�doH혊Ʀt79%�Hl���_������ᄃ�;`uDo?h�ڊu��c�[y��_H��3D���������Dyߞr)�D�����&�8�w���e9R{c��Qʲ���M"�Ջܼ*rݖ���!��"�|�dq��~��Y*z����ؘ:�g�.6��'Nb�Iě�n��l�����"7�E���=B�vD��]��̽TW{���>��n�'L���\�
o�� �m?�TA�e-�S-���T���,����O�o��~��!o�-��$��H�V:�E?t7c�]e�=;]�s����P~7���n�^O�E�_v.������E6��\;t|f�V���*^N:�&Tۭ,�2X�-#�*vڴ�j�3ÜC���a���<��d\�J���\hq$���v-��Y��B�1�[:�^'&
�)���fY�n������3�ܰۃz���m��zdQo�c/��l�����te��:�@��;xE���V��v$�J�ge���A�$쁜[W�=Z�1��H �D�Q%-�Bzl��D�W*=&�~��HA}���v��n7i;�B��Aԉ�xL���v�$J�옘�����\;34�x_�W���;�^�IW+u"�;�^��|�����8̴�)�o��M��NX��s��酸|(v�)�:�M��멩�զ��c��O�:�MV׫�����<Hzt󚒃����v�9�\�5�&v#�ͤ��y�H'.&*t��'z�H
�1n&y��F��f���$�c�sz<��c��"µR��wB�\l^���j�Z�N��9L?O�Ŏjvhp��t��_t- ���_��5Ӆ��ħ_�|��v��K������^�Y�~�����1��6\c���C��Ho���QĹ>�l�FkS�U�8�kR&��`^r���������t>���}B�I%�<`�jZ�\
��\i�7�Ĭf��P���=��=8�<a���}Q6��.�w�շ)y:����\���I�Z�y�!Hb��Zo����T�ʃ�i��Ez_�]B��
�`x3� dmD%�f��snJE��$. ��%��AD�,/��&��qk'4l�e-���	����|�j�',-y�=G�8�'����ۭS1\f2�K ��2j�t��T;/r���%g?l��Lo@�`��[�>���3e\�S���Nt?��C� is�Q#�?���)M�0(]�p�#��1�f�/vj���ϥ
B��+VQt�_��H��y��p������vJ�h=��?��f-�JPV�W�>���4�!���'���E:al���sN����N�ҫ����]�5��ǟ�@2'l5���ľ�1�u�i��e&j'FΊ��F��~���m��Im����z!���m2/�{ ����1!��_3�eOb��r��u8��[��A�>�ȭ�5;��=�rS���YA��
<+��t�=Ü���t|�0J5�|"β�az�v�%)!��e,�����)�;���Ձbw�Z��S�XrL��ʸ,W�8�b4�k�YZ�(���e�l�_�}@�����_�`d�GB��~Eb!eQ$��[Ͼgc*�4��Qa�����ň@Ri*�n*[X�պ����[z`�d���c�R�:M�K�WZ
�1�	փ�a�9��UO^�P{��66?��$�@���TD�^���w��"��ڗ��^�f��w7^@0�2BiF?�R�㥂dL�-&j'' -���H��W
i3���S�xk�WL]�S�o���F!��R�	�6&���J�3��{��������yA(`���r��JI<�7�D�B{2r�K� �4-RȒ��<�����|9��'����,X�c4R�P���e$-��4�(5v�S��x6C�a�X����F��4��4}����C��ȑ	����,u�_��HjuFU�vjTKU��;��C�U|�<(ԓ1��y"���h��c�nz��g�**��wó	?�&�K�����^f��,u	Գ�-B%�R��hnkG�!�?F��%	.v����Zuu�ާb��GT��5�Yǒ�̭:�Vi7�R�>���:B�d�7�M��7�<g�B�2/Uġo~ܙ�Ҫ�ę<��
����՜�A]D�nkLS���/<}�0F�:�\�.� f�@�pT�Yf0�lv!��V�6h�&r������L���~e�0*�ڶ	�w��,��M?3�6�2&	(�S3�i�#�x�;����r�ʋ�0O����F��g���s~X2�A�����F-x�ɂ'E.}�D����"�p^�5�q�	=T���	=IgP����U'�Vn^!��ɔ��j�b�d�r���4��ӧ;K�
j�3����N����4K��X
֞��P|ӑ���T%�;�o��$���I�~�Jf�R�v�l�fQ����5���#��M�o�H�'X�$6�J�Q�0Ύ��?s4
���p���b��_�mB�B�3�P��{-��4��\�JV��T2�է�����y��wrlV�n�Y�!5�֤�S�B�-��>�A�����SU���Jk�l鍴�y��Ϯ:�Er���:�w���J�$��z��_�o�a|��\

Mo`*��P��'����t̯�)�R
���R{�$��1ӇHn �y�S��(������;�e� �����+a�8���'r �d����H���:�9k��$r#����k��gDE����l���mD�O��i̠S#�;�8u5-���z+�qiIEeZ��΁�D��l�F*��fB�k6���hv��'�`L���ְm�ֵc;ȟ۬�FS-��М�����t�~�g�ܒ�]�(�#B�z��Z��au��HٔS����m���&mx.l�zD�@����|�Ҟ*�Aig���NQ����T�����ՍbLW�L\�����8�[5o���]��v�yV�O�t5ojp|2�+�V��Y?��Q#�",Ih+\���Ǥ��@ʮQ"��	VA�,��HW;r��W?�	ZV�+Ţ�%A�I�����R�,����
�XF�({�#���:Caś\1�X�R�I;�
&�d��_.8�Y�M��'f�I/�}�Y:�Z<�x��F���}��ٿ��f	5�Y�a���X�]&�n�����1fo����8������F!fJ+�����X�
V-�S�l�������ʄ.W3��F
ӗ[j�����P����]�;��\i0GVB,W��2��܍���ȱ�v�V��
RLG�p"�xL�z�$ŔyM��a:�}N_����Z������7���lKu���[yI���rž���ovȂ��'<)�.?y��R��<�B(.L��!B �B��#=��	"�@o���`^v��F�ME����F3��58-Ѥ�h�$ �+{�EW�J_����Qф��Ca��"߅a}���fC��*�}��A$��B�8����ꬼ=圻-o����y��c17=�/���$cz�w��Wz��Y��7�qr�4�������[��bvt��,Ι�����Ӂ�d8��#t��TR�t��
�]Sp�Q���x1��Yir]�)�.�Pjor��f��:�y�j�l
c+�d:ۀ�ܨa�A)V	G��$[�٪�ԶI���+@U%�~�6_O �v��P�A���z���	��쵛GG,w��%�==�j�iU�چ��$�"��.D1�
�j�ʴr7����a��pRZ�Eͻmn��lU� �f�1!�A���V����~��+�N����A����r�3
�{?%���*QYj��~�??a
�_W�0��0
��y���C�wS�@}^��/SE�Ʃ�����ȉ�5�J�����bF���d�!����'EX�9�?�P��8@����倧,�I��q���`{qK���]�x��o�P������Pb���XF���1��l�M�����$5C���xm�&���g�N�������fC�=D�ĩkL�L�/�q(-���rV��C�b0r���z���ɏ�y�t5�����¨"�@>�Q���?)]<��L,F��ll4R@ :L1z��b��`E����b��~��_����:|�A_��>O�޿��v|;�]ޮ�/�O�Ca~�d���
X�H.YЩ�B����ދ�j�c�!Ы%6��8ɚ�VjE�J1c
:P/�|���.=����Dl�RS��:���A0���nlї$mS����%�y�8j��6v[q
�D�E����t�1��o��`%��{j� RA�:�$b��|A�5���#H���,����0��`��@iC���c���>��”o�V��#������}Q/�����7��q
�5���7��_�*%<�o� BspS��ƈ~��l�����s��)���	D0��P �sE)�$�L�z&�i�U�B�U��@ȀH�\�^�򲰺O	�q�� �3��f��a[�W�ҥ�``Z׻&���_�⃤�����M_]m+���D-����P��q��܅�P���F�=-�(-s&�н#�,��lK�li��+�!�p�7p����D�t�Lǂ�f9�F>��ϯ��3r�	��L)v��v��n�Jp~cuz���S-��"x�;a�DžV�7��S�\^M5��yٶ�n�`E`�z:�eπ����u�[���$���uK��xR���F�zE�:B����霆V:c;BEr9s���ߡ�u�񓿷'����yiǂe�i��+�"��ea�QnxKvWF�
Iլ��T�0a$��@�S�>��|G�pF]:)�@�5�E+d���J��b��a����bU�f*&Q4A�bg�.P(\�M�׬��,:�cL�>U�l��`1��ߎd�6k��K0��̺-����z��P`�҆3s�A�ԥ�)�G��$�qg����-0���������vXJr�(�����@��@���3ui���k���O0P��]�L��,ݞ�$��v+����=��qL�� ������m�b���؞�`����0g-�w�n��/V�`uj8K�X6�AWAp2�`h�蹴�_9�fb��{I�Ե�j<��U%����͐|\����͈��VW�;Q@�D?D�tsF~� �!�~�@%�28�^H��A��pm�;������ T��K��g|R9�AzK�Ia��'���k�J�ݖY30�\�)X[Ͻ]ƺPy��$��
��v��P��\Z/����ߪ��E���yA��S2B��5��})��Ip�E�7(|Q{1$�Cl���#���|�����c�N�EE<ɵ���NRpQ��=;�>ǁ^���lI^$�!���`H�X��N���S��p�A�#_<�k'
/����5@"�.7���dc�1�T���&W��0����	�|��oW��?��������#��r�8M�`�I�
�r��EA�@.��n2ɺMJ��Z1�C쪳�r�����9�sұ0�l5�d��u��1��6��;�o���o�+���f�e��Iąe1�������I�}]������Իh�4���e��?R�5X�En��P:�3�v��J$
M�\���C5w"#��%�u�JR�?���ֵ��S�����W�ӊЊ;/�R4T���]!�T�f_�m����*#<e���\������?���.H�̜d����Hyn܇��,�ch$poq�	��O�
�(���+�
U"_�ρ&E\^2s���YR���E;QW�ō���9-�f�����4�ylk�a�h���#dݚ��J��^�a�y�W�7����7�5�%c�P%)��u��á[�O}�����>�q��dxF	,щ^̬FӠ��I*������[���7�e�вM���"���&/sSܼ�{�:����E�M�V��_*\Bl"7%���?�U�D�è�yb�W�p�*,���wU]:a�-b��u�o>nNĜ���ގ���x�M|�n�y�i�4#j�f4,�zZ #���d��%��7���=�MS�	"A�O�ʤ?���Hw|��w�Y�#R�qڦ� �F��1C�t�.�D	8�K�R+����E�����೘Q�c!�GJ1�J7�h윯�Jй�6�}/i�Vi��D8�o�`*PX�,���z���@�QOk|'����Y��Ɲ"%����)����OB�l'<���`@�*�$���˧���)m{��/d�Zj��b�Lc����!!n���G���)e��W.�E�ײ����X�ǚ~��a���;���q<�E�v��&�w%nw����رc6m�45���]!��x<*"���^�lG�I��	����Ƣze�R��RC�x75��b��A�O$���!��3b@C�w~��u��������b�<W%!�j��J*G�S0��w���<��
HG�4�"N�G�Tk�[�� ��	�0P��>vfL���>b�b��Itvþ��dS�,WΥk�y��E�2Ƒ<b��e��j��pF��_�G9�Nphi7[��}W*B�,DS���'wyP�M]G�U��2W:�˅�%���J��A�Z�^�U˙}a[��D�g�dKfM=@D�[��5��8����{�й۱�K�N[sO�B/�����o���l�jɢ
�	p�H��
�7�(�E{
���6���7@�ֈc���	Dd�B*�Ÿ����2C³O��%|���E���4��)uQͅ%�*ĦH���o�A������%�|z+��̪�]��X�`2x?K�H�:Dv�6�y!���ޚ&<W]g�����$t&�M)s �q��e1�݂hN������`�;�v^�ݤ~V�5�%�����#�=���E���3���e��y77��L��zR9d!�ܝ���s
ŵ<MA�8��Oƺ��-��C�l>N�@�J��=��ji�:+�F��󎬮K�f�h�+�RFqtL$�uT�
%-w@FV_���Q�?6��U�z�V��ޤt�~�$����(�,�u&�%v���
�g�E�#<D�K<M��O*|�V�4ś�q��]	��ҿ�w��t�&��.
�ܛԖ�'�2:�ms��#����-6�38��?��W��b����g@�l�Z*����\�P�y��@@�G�A���z�T�F�p�n�<�toq�c�&�+~ƌ����4�����m~�����XC��jO�<��Y�7�B����S��8�Q��(�kp8��2���!�!;��ԣ��iT����)a�iQ��2m��(9���D�6Pd�P��A�"ۅXw���8_��+�r�҄)��d;?������p_�@
g�ߔzN��q9t!���zՄ(�
�\��.#�BN
���J���é�^�#&���9k��ߋ rQ
6ǢO6;�N`7�Ѷ�ct]Ў�r�\�Z�F�U+Z\�8q��H9>��bZ�;��
�>ɂ���
;���N�$cd UΌ���С���� ��U��V�N'������!E��BD�t^�W��@p8�P�q��^@�0wS�f�L�
�k� �]�uJ�ߜOE��^�f���)Ԙsx)#���
.]�1�"QҤ�4Qa.��A�ݞ8�+<��N��u����>���X��pA�`�������i�T.�p�Ƽ�P}Ś�]M��[z�_:U[�d�88

�GbZ��:r=҃�BH_���1���Q/��ԏ����FX?�H�1�p]>�iA��BU�=�:��G|v����O�$9�4����4W��<2L��;S<j�|Fp�X/k|t� k�	�}df�I�1�oZ��O[�pO�P����E�k��êFAA��PBl=�ԵP
�&�B�y��G�2pz���J<@8��`*68mǂ�,�ڬO1��-���6�����r
%���C��'��N���Gi��K�ɢLNK�Ӭ��3�Z��<Lw�'^Lgt>��&0�A*�#_4f��D[�/_�A��Ϳ�k-5I��ϻ�U�XL(Su�h�Vv%.Dˈ�7#J&{���t�\��a]w`�K�C}G�$f�Y|2Y$�pxY��V�!1Q��6,W�i��t*w��۰���=�_ֻM���}䘱:C��y���&�y���8�4<�g=�	,������3ڡvW{���AU�$��V�>��m1
�ח�����m'u�����ۭMν�ӞNa_8�s.֛Hve�8ײS�,��c�9��{��w�ln/�2i�~��+�+,�2|4&��#k
�o�0��$�٭J��<5�|��M�D!���I�f�c�%m�H뫷j���Nt˘ec������0�i��$0�l@Q>vp�gY*X�;���+��zI��H�C�)*�B4b�\��E7C�g��.s�C�X�I1�r���K����^
m-�Dɿڨ�v���%.6q��V�w[�+��f���=Ӳ�;�7����Fo�5I�e�j&[J_�V���sXw&@�00�8[�Iw0�OVa}���i1W���
p��H\����QyK��g�ƌ�w!1e��r���_q�+���i�21<A���dA5�L����Z!�7M9Q텠X0�����ZsK���2�my��t�N'����;��I����6��̶o[�b�%[���0|-ْ�"P3��
���P��
�E��$h������J��P:�Ҭ�Q�4�Š�2�9�V��3�y�%�5<�rM��iA����ڨ�G�s-̄��mzm:��U�
�i85q�]/|)Als9l%�nBP���@���%�5i&�2p���LV���0?–��h�.F?}r�ۃ���j7(� E��!�JG�vH)ƻ���{=�ۗ�A�	9�[���+��f�C��$#7߆�ƻW���5 󨫾�$���;_�A�������[���3)�6\���(���4`֦ZStUڬ泰Y�t�(8V��%���vm�uO�;2�����jerPVj�7�d��y����Y%$��c�U'�Ͼ,��j!|d�M,�����E�&=��<��Mp$��nI:��y�	���5NF�[�e7�ou�1`�I��-�QS-;82!��8��Q�)!�l�$w�ߝ��6i%�{��PxH�����ʏ��>uAㄉ�������F��Z��%W^�L:v�x�GrXA�\p.d�I]D��{�!�Z�Q�d�ǿ����p.Ι�u���#ݟ<���m �����R;-��~��0������T�8����q@gܱ��^I�k��rf�7v�k}��.�vy�n�ׇY�=ې�1D�+��p�R
�I���6K8��7U�b�ҩ�5�6��Y��Լ��%�s�6L6�>`.DF(�jW֠��!�}����e����1����An瓍 l_��$���za"6#�<�d쭩��mFR6'�/�p�S̸{52��B_����F�Nr���I���۽<��=
4���ni2r9�����ѭ8gd]��L6��xjZT'V��ꍄ	�W��I]n�(��ц���Y3Ո��#<�_���mQ�^������������e3X�%R���n.��7����b5��fx���A7�*}!9\�ׅz��5��yRh��0��ӗSA)��9�ɘ7�;�	:�@��d
�
	�,I�����}xom%�G@��e�0�WW��u�,/��\K�4}ʴ���ᖽ_�����8us*������?�+��.��m��ʱ`+ߍ�u�c��=�
^��	���ҒyC��9}�%]$�b�}�
�]g�U�s$�eJj�F�{.m�e�mY�i��.��p(�$f�wU�u�Ak�8sz���c�!X�4PW+Q"�� � D�$��K�F>�vM�M� f=y��:!��l*a�4�c}(&l�'��)[Q@Y�>���`����↣'�+5�okX��Nԁ��o�ms���l,�"�B�%.�c�$�����lΘ蛙ﻚ��N*��;���
�͠o}d���D����],\��о�0�����5���8�Eh�j��NV�M�C5T�5T��hq6A���;�0"�C��huxQ��^UA�wa4{��q�~��|G�F4�$r�-_�J{;����z攆�o�2�޶{������'ו�l0vw�#�ˇg��+�zF���h�dc�^��7�Vݬhُ��}�TWou����AO�i�b
'���Ȱ��Of��	٢��G�Y2Ph=D��
���,Ȃ#�Ŧ�EʚD�"�$��Jq^�!��!n�3��I���c�DeY8r��[�]K�H((�n�kё��-��|�mUe����4���,i.1��������a:�[l3
���-yZ��gy�n���Z}�W�W����;04�ڊ���>*�
����9("��4�K�=7kLJ4�y-�)j��vS�%���.Q�5:�?�/�IM�㙔��O3O�v�2�6�J�{�W��~��̫Mܐ�mT�/�ؼM d���P���x�]�����eܢ�^د�nJ�gD,�t��5J<K��B��i��q�iq(+>d��#�{���2����]c��1���Z�[�(l��GH���[(�`0�j" d�U��u1��s���iE&�}-Cg��H�6�+A��g=�nL
��X�,Z8����#���׶���E�J�L�tƢ�B����,��.֝'��9d�g��Y�+��}��LIB�j�}�ź��D)u�;	�>tT|�A��3��l����G9�;v�66x�@3h���V9�Qg[gOQ7͂�Q��YWE������8���(|�T��a@8.���1�&^��Nt�Sԛ�_����٧[ݤf��&�(y��+����4�^
Y$K�-D=�m��BG.�n�ͽ)�N-kj:��)v�&j5�%�'��)c9�:4�l�	������!�,#�qv���QŮHy��Jp:;�,�	.BA��gT��s����D�wxq��
6���Sܙ�c���Y��]��°�#ă�@5:�	e���moU����zn��
��;�u\0�d���^�Ii
!��;��`��-��?
0Ň�,W�%Q��V��-ujB���7V5jx}�B�J4���.rF���Պ]�a�'շ��
������B׭���?��8�!b�>'�����!ܡ��`Cw����ʞ#xZ���s�Z<o힀?��5�IB�{��R~�j�"#�?T)5�DAm��X�n3Q�Y�>��Ր�ud�� t��=S�#H^��3��{FV��~Y.��pre�>��Z���F0Ia|�И�k��'e���Nr0�E��A��7���L�t��ZQ���?�� xuL�>Y�[��~5o�k�P�F��g/v�z�Tb
��C89��r^L|��0���qj�u��a;������#r���j2�:/�ۂ�C]��39����U� ��H�'�v��3a�8/��zLq5c��%��fh^�B0��}<�*��L�����㏇�Q������Ŀ�_�)�e*��C�Y���"���1�����`���2�'����O�u�/{�ޛ�]��L��|�ӡO�	������]6@�x�"�W>o�����D:�#�R�ɵ�\u���}�`�p�m��֭���>��<�%{�f'Y��0�A�h��:p�^^&=R:�:�04�>��d���=S�ވ�P�X���H]f��UWH�)OS����׻���Ie�G�.���v�A��p�0�U0X��n
,<R"'�'W��#
Ј{�N/�?���Ӷ�lG���6�zq�ᅠ�
F.y�i
�Y���j�;��(�H���K:N�!�:�ƻp߾�sB�.!�1��X
�)Q�����@,�{���{��H�
,6�!Z�����sb��G���s���De��W�R����V@z^r�9�/T^��A!�
�"��i��Pai	8�z:frb�v����'W��wQSܯ7�V��yՀ6K�|�+�M��7!\������o���;_�^��S�G�P�p�",��\�8x)&�kcU.���F#�9�S�)��NH�PX�ں��WD�F��>9u���ɶpl�e��s��Sw�LG�/u��I0����
\kꉱuva��U��T^)��D"�YØS(�	�;�!��BT��hbO3E`�L�g��4�I��B9͒��ŋ��z;P��p�t�P�T�	@��$q�+8m��Y@����s���x��y���y�
΄f:l+
B��=���Jָ�pg�V�N��6�h�,�[�ŝ�������E �,��Ŵp�AT@"�����w.�Z@W��SH=�
��/r������FZ��3��h�(�x��1��Щq��t2��Q�
��O�z� �DL���5k�f;��Q'�w��{r��~H��u�Z���.]F]7�w�z���0J�@m�9i����f�(#�����ma���j;8_%C���8��z56���2���B8̃Fv�S܄G��nZӵ�ZR�q|g���e��&n��KKU32��=sW���;��kH��ݖ��I�V����
���;T¸u��?�n�m��1���yg�����N��vj�?o�~�F&@_��s���ɴ�E\�"݊��D�V
ƃ�[�v�;t(l�c~����k���wߗn�]�?/� �$�����b8Xm@��?/}@q����*���-^n__
 �~�l��m�uy��@�8� B�qA"�Ù7. ֑����Rk~_P��m[H��o+�S���"��W�[zA�A������a����7O�=���U��T� N��O|+���'&��&#�
>���A������Q��Q�RF|9g�d5H+���DfU&��������O.ꯋӡG�LO��O���*�slS�$8T�"��,UB�'��%�B9���]�{з��Z��t�2�E�����:�����ߺ+����Ґ��Չ�;d�S�x{���Ix_�IE,���z꽡a\�)�=��s��lƝ�D�:�(�xwpG��џ
�B��H�ګ먰�������� #1��٣��g0�idʌ{(n���k��2�׫�����d,�Q�]��ʝU��._�Џ"��^)
��C��$4�s�����<�}!�7��rF�?&ȍ�(��sxJE�Â��8't����XA.\O0���N}����C�to�2#N����L,�vj|P'�lj��=B>���,á��(��!3�����=�$���ĸ�ۛ&��ߟq���D����a�jd�%��ܵ
k�j0��&��Xwx�@�jv�"ϖg�4m���*�����C��xލ�`�_6b-�D|\v�l`yW]�f�r1�n���7׮}��ԭ�WfVJ5
��J�h"���>`��LH��ǻbԚ����
�K��̮jR�l��>n�%��
|��7Z߰����o��y�jd�p���{!7 *p���KԸY�7��8��9�d0��@}�����0��O�ݿ�k�۸2�	ݗ�ٙ����LTv�@�nYhL��<Y
���������3j\ټ{x��S��K���e}� ���݅F�b1��+v4>m��)���uZ�����|D_)#�ނ݊Z/"Ș�RQ([Pb�WrH.�N��K�Ʌ��Ӈ��Dk��޿.��GDS�>�	4V�fQ0YQ��Xʰk�C�g@Y��A��_�&�����_tG>��J%V���E����%aN+�c�S�@��%��zd�Z�hbW@9׷/�/ Ҙ��2��菱D�%*7f�0D����LpyY�M��S�(pVx7���~���q�S<�^��p�����n��A=Z��S x��={�"|�Υ�9"{�E�M`~]��1��>%8��I�c,W�<��H%dH�r����m��izT� �ٌ��.K��bf�F�M�[��Hgm��̌p�k�L���A�2�ؿ������`o�)���D砺�t��y�d�F�X��U7�>�7�9W9x����r��+N4�%�ק��m���Kj�>��"�B7)7��&�p�u�Y�1�o0!L�K&E�u	x�r��pPҧ٢o��C�@��V��K5�3$ɬ!r*8T�tn���U�	��~bB�?O� �vۖ���i
,PT��ã-�UO���5.\��*���	1�s�9ɾO‘��pb��_J���Ɨ4{C�[Am:�m�r��[���ܻ�}����ٽϬM�'�c�U��Ec�9A`B/\#��5��'�xu���R�\d�<�~��M�:�
��E�8�֞�w��ꡨQ����1�"�MoA����X�ڞ�:�;�p��τV�4�dwy$��ȝ�"2��&&x��љ1(ð��?S���l�!V��x�_]�Ĭ�z�Ŀ�l^�����@�����]�;!�ͦx�9�A*r�U-`a`V��ja�%)���U+�}o�Bg0b#�Sզ����:� z%��c6�*3�2%��o��FT�9֩Ӷ�`�A�rh�B�D�t7(�E]&�>��Yy"���
��!۹�&D
�+���^�]��^@آ�!�V'�z�o}�ڲ�I����
sxfA��9��=x8�/��]M̶b<}ݳ��1�UL�IX�'�C�xY�c)�#*E�u3��܍_Ǻ�Q=34��>+a.�۹8��F>��;;����a�
o���
��r�B��>o�]M�jJh
]U�����	�s�����	`;����NqQ���X���L(�bm5)�h�߰�����g7�27����l��f�mUZ��}�|;��:�Dƙ	S������:\�
v1�v���`4���o��]��C�h�3��H v]��������đk����i�����v�{A���m�k�������$���mF�`����ʁ/�7����h��6�'18�F��v&�3�n��W�egf�s�/.O	q[�*�A�Bw�L��ѳ�l7�yv-����|�������z�߸(,�K��0~}�~��2�:gV�j͢^t���O��*���}[����� =��s�mH��<��y�L��
���c��D7P���5�㿠�L�l����	)s�^�-_[���w�pL��>�)c4wd7�J떰jpAC���5���V��[�5K���
�-�a���#�KׄC?��m��e��>���HR�{|�Dj<�=�Ӗ��

��	�����Hg��z����JQ�(`ֱsa>�gZ�K����0�V�q�"�
%5��Xo+��Ѹ�@��|{�4N� @��D��d��W��Iԙ��)'��P�` 8l���T�!�~��.���SZ�B)���#�Ǘ<V�
��N�e�]t�Fa�E�
��UK��
	�W���ym+O��2��f��6� k�L���(D7�Z��a@�EGl1�y3�`�L�2e�k��Y�lq�_|�~0C�4r�zi��Xʫ�_���7}�w/�C�YPuRr�h%�a2>dE��Կ�Vɦ�z��v~Ibx���7��%����:�����‰pA�7�>����Ŕ(HdY���3DŽ��
�+mY��m�\�K�"g�� {��"k��e"^�S1�9
�ouRsX*.��!	&Q2������j��8RϷj�=�
�{�w��σ���uU���]>X#��(�H��2N���5Y/#棄��ı�����T�m�������&�5/��)��[H_d|�k^��2������G'ssZ����u�XT�'����4[��t�2�����Eؒ�f���;���9l���tǔX�<��I�`�Yk���غ8�N�\3a��i!��Ʃg���
f����F���9�V��rf��ߍ��?�*!����s�p�2!�g��5WE}�J���e�����w�@R�[�B�<�OnP�zC �~�K�]��,�?� XJ��h���kϏ�r��Čf�7.ŧ��ɝR��o��)��;n�`�X��f|���LIjF뻎DZ��W���I������-噣a/j�(�Z5g�>��{�lg�}�F]���[~�@����b���D�e��t,_��7b�1ё&�D�>�I��Rn$������}��5�y�Fo8��W��~`���T��m�ﻤto�޻F�c��y���槗�z;U{8E�d��,�v�r����}<V���v����߭�?�`,4n��vӡDz9	���YP��e�zR��:��+�lV����(��h F�av�M!�N���X�b.�s,�F�X�#���g�O:=W�'��	��	?=��㑙��U�O��T���bY��?b�ϞKq�3���㕤c��R&��mXpy�}��S�[�P�؉ᅷc�-_���@�9�-�f�<1 -�����R��$�1��2O��
?q�i7gz���s���r����F����Y�@0Pc?+?h��'����P��*'e�֘Z$4p�l�8��[Ӣs�X��f���h3�H�M�;g��Mb
ELCCd�5���4!�n$}=�t����a1�K�(��
�BXe%,���0/BqЉ�H�ӱ�Y��Ȭ�4&��q�{�0	����b_�on4��|�A�k�퇆�#_#�[��ζZ��I�/JE}�6�[�Z[�C�Aep�@be��C%ֲl�J�	��{��ecGv%ز���yq$��%�-�ź �޷�7ȵo��vc%�B���DLL�Y(�Y�h�N\S������x��60x��(w +�<%'qd+����[�=��H���*S�?�8k�@�Tf�}V����!KS�w�C6�}Z���e3���˺���߱q��0'�a]��K����`��L�
9>�Y�+���
�ߕ����h��f~v�<�������qcj锩�Ŏ�j�&(AP.�$�K���~RB(#���?��C1B`W�v3��4��'rtKs�)�6X�]����B�6�0m����d4�,Ʊ>&�>J��*�4a�j;�D��1�%�RD(�)�jpֳ�jzH�Y���o-Z�Ft�2$��P���4ݖ�8�>�i`��	�ec���>��Z�
a��x:�gѨ!첣�B5r����>~[����"eJ#��z����xSc�-���x0�Z�ti
˽�3gU�l~���?%�0=8)*YcHw�5��QT8�=�P��i��o�!غP�X�2�z=8�?*������
��klj�k�k���dE���]���m���%#gt�Я�=���"q4a�s�N׀p���vU����2VTZ�R���B?�,���4w;���g~��C�0�&A��oO�ԍx��40L̾�-@۪�Qe�`*���x�0u���G���2N�=[��Jѓ����
s��3.wGwO�*~j�e��f��qz&�I��СK�����k�œ����zťv�R�+=��F����P�2��9�˽��X̳����F6�"Br��,�A�8���B}6��J*�%�rJ\!L�g��� |I�)�ߤ����0���0�ͬfv�Y_1�v��g�2V*�Vw��R\�O���K��Bk�@�1ak�Ws�z��t�rV�B5d��{�l�5�AX�'U-2f%!�[�2��k��kȺ��s�Q�1�@Q�.��0����e9�ء�m�##'��M�CY�^_�<�p��%���������y�n:�"�u�W�
�W���LU *m
Wbi�g�LI:����(R�X�W����Z�<<�F0�"}��H��R��(Q��o����#�g��.��07 K�+��V@i�+(JL&���f5�e��+��b�Y�iDr2'7�ظQ*�Ԃ񈋲�?�h�h�G�E�o�������z�������0d��X\��	��W���Džj�'��q���@����Z��)�d�Tx��%��'�"Y�
����ᇳ�o4�.�_V�)`��x�}o)2GA�{'T!�9r&/�P�0��!�)�c`ԅ��(%J<��ECRdf�EB)��Ա�=i`M�=��m*!m~D-F6�$�-� Q����Ѕ�es�7„|`�c��&�t��d����DB�K"̩Wݸ<�p�x��.$���;�y���\��Z0������n
���Ǹ�2d��e
�L��%uQ�h��x�\D�M����viJv���in�+���D�T�D�j6�%�!DO#խ7��x���q�W��l�9��?ۚ��w������W	��?�z�fԁS�_������3�xV"9���ҩI��s��/�zA!�䆭�lV�=�U̐��(�LK�K�6).9��!�	���A`6'��Fs�	��&��V��uߏ����eV�E�ŀ�U�VW�ӏ'SW�����!��t�9g[�I�(��ٖ�<�D^�˴��ŧ����j*�D���JV���O�!-�p�<���<g���Ċ��6XBy�u�шSכ��#4Az�	D�fR���������a^8�ƙ]��.����PH>�k�?�$�jbGr��km�J�T�,�+�b���2�d����, Fs��KnM'.��\i��yA\+�jE�Ψ�]{
W����V�56E��,�<2�w���o�虜�&���u�,���!3��8ZjwË䒂�$"��'X�8eUW����r�t���Le�f_�-ȿ��E�ۄ�<C#�7%�N�\AQ�h�[�	LB=�Oٳ�|��Mj��$ܱ�m��H9���z��FҜ��"QU��l�V��Be�)�[��E�k&�V9W�ӤwR_^%j;�AB���s,8��2���{�}҆�~�1XCn�\z]��J�b<k�lX��L���nӠ�6��
�敄�LR��f&p���
VH��Tf��Gb2�Y�0󥳎��;��G�q��q;w�IR]9�

�{7��w/�~��ؽ�!.�OZ뎥�݅e��?mf����p���C=�ɫ6� �[�ZU��f�x<3�	�wQ�~�-aQ]M�*�.�
��g~�p�˗	�V�d��aMZI�0��1:�2I;�������!�sk�M�欻����l��r{�}>ޥG�+\�w��)T��)��{�`TB#$���~�ٖ�
*�?�Yt5����#(�e��%�66��yp�a���� T�HC�BH�-A厦AӾ��lu�� 6˸�ml45��	9�3��J�������=U����q���+|R��ȏ�+Cc�D�aҫm;>�\��ڒ�/�=DŽ�,(�r�T�1�+U5���|���������N���;Q�I�I'��'+����0���8켱Q=,3̾���`�pƓ�Lh��7���n�.H�ޡ �I�����`y�,��+�\!,�:۴:2wmti\��H�"$H!���7@�l�	c��fI,��i���$���-�FD�q��bO�u���XҠN�G�rP����	x�i6�PVe�6��9)�:z-a7���ka�prl�Ĭ]��
{�b�j��e��#>Ηa�*���z[�LWd�0�!����i5��#����)&&���s��3#t)�)�>Y*$Ph�v�(ة��P����)>!s�N��_����H�yi����w�Q��8ļ%�dCd���G^�KFDO��Z�C-ry�T��b׺5IB����Т^�1�s8�EJHd@��<�����㏖�}xԮ��)v�}����x��g}(8�Д(��v�Cn��=�(��m�D�'O,����'���{O;6�_�>�#��m��QE�\do�g"O���*�2���BWR@�p��*����p �VixC�R��A�~B/>�����h�5g�
�ZL���W��D�����wd�Vm�kN����
�Ix�D��%#��ɉH��v*�NᬟG����)���1��L<@�@��1x�l�=�x��RX(��QdMm+�J�n�Z6&� �n��	i��\��,����w70�/cX��1�g���!���p�u��o��~j���kPi����v{�7�i0�j��܏!�k3�Шpc�A}
�e�	�j!�*
���'��I#�>
�"Uڅ�z�����ȸ�2��|�L襷�'^�g19:��z�4��OIZ���O��D�;�I�M���l����ࡡI�A{��-�&�'�u��&];�Q��H�;i+� ���p�����~=��7��c�1�jHV�g?bօ�=;?�
��h�o9r7�Pe���Utƌ��K��u���}_�B\!�G��-�����suĉ�h�l�_byE%���s^Q�14��]�=*�2��WǺ��`sbd֝�s�
�L����_L	
���J�j��+��1sd�csfkj�0 t����͞彧�!_�(��F�Tw�ӹ9i���k���{qY����-ٺ�^0w0Pw�㙍���ص���ZL1�q�w�8���.��`����>��F8y����_7%�̩]&���?g{ ���<�#�b�x6�COI��"o��92d���8��،�v��n5Ї���70!�w�'��s��.��I��v�?m�X��HL��.���(�V�#�	A��D�&�)���Ace~:C�J|�B=�F'L=Ա#�CCJ��j�M?�T*V(_�R,�l�}��h�7[.�l�l2�lțe��%�`�J�*V.W�h�d}�p�_�2�e*��(����s�/�#�^���1��RȵL,�2�@��	fa�_^9�����9���K�B�y�t�;���)�}ȹ�g,eoH,����	��E��n�;���R�l�OU<�#3�/��6�x/U�F�`~���y)k��B�$�������J�3�#a��i�H�'��Uj��O.3=�ٴs�����<�
=�v�a��Xe�;�5�������N��v��ο�n������
�v.��;E��?��{��e�+�t�r��#��"&K�O���F��ǧ� 4;�VB'�gYUp��x�wOF2�4~������h`�HV	�<
����^�l6$��F �T �L[�E��ƶQ}����T��a}W�ML[��o��z�iU����m6�t�Y���+d�����뒉��;J��|"�����9�'jh��QM�X��+�u��[�N%W��*����%;���͋
t@C9�B�Ҽu�de��
���7�F5Ěnf��$���iQ��]o�P4��L��Y��Osp���
�@���RU�ֲӹ��)�kZc[3�f�ld&m����fl����c�$Yb�H0��n�I�����4�6އX�C�Ox(�o�0g_�+�;Ue��!QL��p��L����1֐�ݟ2&�/h���ط��?A��i\�fy��W���yj֎���%p���ҝ^��n|͵xO���AR�N�v!��}��,g�M�A�$��C���GU�h~�q�[�T@�='�z���Y�W ��e�P��n~����_��$�"2Puቛ|�:$���ۋ�?5��=,M0��� �d7�����(�J�����a=�&O=ՂIT��(�D�M���AԃU 6?�\�>��*/r\��_eO�eO�\�q}��9���M�Z�����)�AP�
$$RD笙�0rk�ۣB��ݞ?��`�B�$@����w�C��|(��CnֿP�
�f<TD�L�JPi������mE��E����r����?'�R�6H��@�rb�:�R��P���_�������C�B�M���"%0�TU��i_����ߓ��@�	�L0$�p2ߒ�"en��HW��GX��.��m,Y}����D��
H:�K[D����vdl�['�-�ؒ����(����s�z��XaA(�™��[#y;Qn'��]F[H
H-A��݀]�WK�wv�v�S?����B��p�(<� $�C�
Gm���~���Əv���MS��(�_s��S�v$\m�㪎�pG(�_�h�;qq�MRJ;�[�#�E�1bZ?�N�'�#��r��#rt@XUi����U�u�Ϳ[��%h�7qζ8��
1�j�v�Ŗ%�JD������ь�q�٭"a-���q�$45;�k:r�u5X
�z�+�
��45M���{�J�	�a8�t�B#�5~��ʬ�,)C�.��~Z���e#!!���J��ɖe
l�%���wꗊmY�Oi����q~�v���,�.`Y�rW��LȆm�^����ZZ�����}�v��q�x����Yu�vZ�G��,�.�d%G���X&�b��vս*�%)��-"�¼�� �?R�w?MJ,{N;P\��%o�~]��4�`l�0�%P��z�6a�|�vcGb�feg:{��=aI�����p����P��LpH����c�',P�°��;аH�g��⒝����\b����o%�`%�.:yD���M�y�a]h��R5��H�I��E�R�(����ۉ�������L��Bҍ��]�V��������d��N�ʹ�E�S��éV��DM���
[��:}-��2�S���)��ن��́��g�n�S;O�IνY��!�x"��w��,�H�wz���a8��‰Bx�t�B-���
S�+K�%��B�2�
{N�\��n+UK�C�*1��-�&
D���OwN5�խE�=��JZ>��o�	���x�V��~c	�q��a�a��v<��M���)�ӟq�8u���*Jk��Ζ`4M����iu�w��֭+ݥ�6����]��XZA	၁�j-�:�BS�^��&�ѻ���s{B��L�J����$(�7Q�2�5�&����Ԋf�4Vf��_ՠ�
���#�5�Zq��4sƦ��.H��/
/ۍ�4Ֆ�=��R��p*K��s^Px�c���
�8�'D��_)4Ma5���
�<m��'�ӫ��7u��no(!��MJT�)
���׉(L�t�l? з}�uzSn.�"""""2̆�������
��1F��I�	§{QB05gV���#��+��c�f�K������l���Xl�B��"���+��fuү�������RƉ	8"j00��{٬��Ũ5$@d2Iv�i˾�ݻ9f��S4"D$�H"s��T�PJ+�8�ڕc���XA�
�@��%ḓ��W�kA�˓0��ol��D�[v���Dǥ�Xc�Bv�RX���y]��Ļz�1�J!��y�G�|K$0���!�����뱃�>��3aʌ9��X�aˎ=������dSe+U�\�JU�ըU�'�z�A�&�Z�jӮ�D�.Ͻ��+���ֻ�����HE:�AƑ�$Dx: ���
%N���No0����N:�.��{���L�P���No0����x�ޟ������n߽�8Mf�d����{�4z	��Y��Wpy��H,��Lf��fw8�#"��cb���`ɽ���bIyi���[�`䝾~c��e͍�(�����	>��	\o���R��>�b#Q&@o�'�����g�,����ۼ��ݙ=s6|�6(��b^p��
�оH�4e�Y�uK�^�o|4jsw�Z�Pr
V

$�
I���کhj�^���2h1~+.�›[%�%gybK/aw�H���|g�O���6�|)��g�w�Y0Ud[@W�sA4A��d3e�h*�<R����Ch��;��E�,�C,�
�u���\�����޸�u����:�N�>�|7�(��%f��p�S\�
%��$�vu���X1�eA�r�'�BA�v�pN�hE�xuP�:����M*v�\���
��s�]�4��|<�@a��pGR�FAU��^`�g����H��;,
0�0��C^�.hP�id��H�b"�:��	R#�>]N��(!�(2��]�*g�D"&��xM���)(�}8�K��!ew:��m�ic�r�F�'/�#��#
1JX����N�x�TF�)yg�T%�j�:�����%�9��ꇋ���i�=�C����Mϯu���[��?n�=��_�c̲���Lp!ѡ47qI,���X���$i,
fjY�QY��h��DX�[����u�LbC�s��̅��~�R��%��ҟ�al)�R�,��8]>eQ^a��ʕ��jm�Zm����*p�z>}�xR���:ɳ:MC��X4U�UCK��Z�mu�������3X�."�$	'�w1���t)ɗ�r9�7(톥�h8�&2n*
�̴��۟����N�n��}NH͠B��h(�5FM��t3�2�\x,�~KA��)BVZ�����5	�vڅ��YB�A'�w�4�s�w~w��!�=Ͻ�؛�az�$ĝ�l�M�s�^(!�2W$�*A��Pz�)e�;ʯ{}*o���ݘ��
�D��t{4��x���t�{쥡Ʋ8�j�ڋd�����'*)s"�L5�˚j]�M���4�a_���R�,����A�Cr��-�Z�_�M7E�z=�6�~�ֵ%�#x�,t?�߈����ؔ�����e-C�r�q��܌�R��xet٧�2J/u��j��d8Òr�����HX����K,=<����c�����R�-����n��f]��k�g>l���/@`
*.X��VXx"�����#vė�(0)�ڽ�e!G����*-�6n���;\�f��w�ةs����>4�`�Pʥ�5z�xg>��F��l���f�Z�]�uV��zE�*�75��Y����t+�P�m<_�Df0�y�۴=�

r�e2���y�(U�4ӀY~��-�V�����Ab�:��Z��ꍂ��(9Z�y������+\���^V�Xi5+oe�+���G��ʱiq���I74�-�q�p�xr��)��j
��.q_i��w���#O��t���\��f��Ÿq�B\��N)W�AP�-A��GP]DZ�r�j�z"!%#g�?����b2Bפ�,H�}�� �@j���yr��R�aV��
B�0#�ƻЫN��̕[q�p9�s�+7��%�I��v�e!G������)�K��j���F�Һ'�̌9�6��tL�p�{�)\x
��X�kpR�4��ף�� ���ѮEo�3�ܸ��&EZ[ۗ�y
*Vz4d�*���Z�m��9�6��tL�p�{�)\x
��i8��w�|s��/@�qejʍ�t�e{:5Z�0a�V�M��>�I|���	!�2��f���ٌ�6���������E���uN\��Gְ�r;�!K��Z]_����А=�h�,��x��{� a���h=7f*4�&V�+t*�mM/1�Ĵ��C�i2dڦ��k/��wí�F����{��&-�mR��CvG`Q;�kD��)�˱ֹ�N��� a���h]�\!TUU��G�<�;��OYN���C�,�f}(08�B��^\�u�������U'��z����ЗV�@���G"d
5�nڬy����t=����@*����p-�[R��R�b��v����[?$_��G���#�(�^W�)�����0�(T��͚�h���댾@�YGD%�HM�0�i�k���WۗBX)Y����?Roi�_kFh5�MC��N�.��v�>{��p�c��	R"Si�a�#(^�n����n�S�E�2�pq�UE]Ѡ�Ms�•�C�^曝kP�Z�Z.���K�"M�,9�(T�Ty�e�F����&L��;t�Թ˷�m�C�S/�x$�l��|��65.����dD2Y-�!���SD�H#�5�-�E�s�f�e���Kk>ֳm��{-;�����e|L`Å�"��:{Z�0a�V9�s���C��E�8	oIWٖ���>��3Y�*6|	�?КBQ�J����2,&�~��|�z�[?����K��2��S���Š�Ҡ��%�N�^u�Og�܊�#sN�•�T^��5,^x�O�&EZ;�/9�(T�Ty�/�бS�.�o��\�y�xG|�i�v���Wd�R����ִ��n2@��s��f݋;pT/�c†�+D Hq�ƒ�
�/L�8	oIW��E��(��[R�ax}�G�qy��һ,�u+�a �ƻЫ.���~������w���Hk����#O�B�JK���T�m�׊nf̙�Y.�c†�+D Hq��S��d}"���+��)��*x}�W�K4�O�^b��bL	�M�?/����銋ؒ�����5�^j���`��`���:�'�;o=[qnD�g�}�3|���5lh����Ƌ������H4܊y��1%�cDJV���,U^��M4����R��Ed�/?/6]���N�#�vR.���Y7���Î>/f�l�0�~������L�l���&�M�٩����dl���V�IL��6LӳM��\,�B�bɎ	�6ٴ��8�x��mz���b���M���DNJ2�n���
�E�Y!6�li�v���e2	�"�V9��Y�E�)��w�Ѝ�B������5��p��)l���w�`%Q�_pl��ɵh-m�,:z�	T	�,vdҌ�W*_N<zf��H��ŭB,�Qs3�-�n�{�c��>rk|�T��j�׈c%ZI"%-�dVڐ��`�+3«�ڑYc#��MqJz�SY��
�B�Au7Z�v��0�ģu��1�2c�d!߾�fE��	<�$2�F�?�	s�7�4����X�@ۢ��X��n��\I�4+���h4�	-ZK��X'�'&~A�*�M�ҿTM�p��v{#��Υ��읔����E��y�-�n�^}�lx��#@��	�w��KJ?�U4@�d��MNnҮ֏��� O)Τ�"l��ՑZ��kgnx�
Tw���Z`�q8��Õx�����>���Y�E�<9���H٨4���I!���оa��/<�b��|ܥӲx<��J��vK]��Z������͛�����?Y,J�R5p�I���y	�\���������ʍ���+su���1<��%��c=�S��k\[R��[� �����v�~�ӷwשh-�@[ūsj����Q�!N)C�j��U
g����	2�F@�?D,�$��5f�pﻋ�P8�b+��V"yݎ�۷K�-]1��?�BU2�,�'j���e�;�{Z>P\:˗���yF�,>eg�5-AR.�A�����s�Qf�
S�Z
�;(�F��6G@�\�
̨�}f�l�d-Er^W�� 1A��vh,��>Q��BUB&�E�_���dg�+�A���9Y����l�Ϥg�{@�3��{�R*��l�O�`'=B���1��T���x�ܝ6��l���Py��{ϓ쩆�LY�	J7�|�����Cq0���@C�:�D��bX,a�v�C(�f��������#��:�_ˠߕ���{��ބ�A��w޷����Wbʼn�0&wgm@����ɐL۔�m����p���^����Q4u�����^�{���ڞ�xe�o�t��0�9?�_<"�J���6+-'i��kܸ��ӣ'����Ak���pȑv��'hw��I|�
�@1t��2�3��y����;Jnw����2̷J��D�=�M5t���8-y��==��DMF�1��:p'F�~���E�ٸA�	�@"V㺒�*O�M�O�cWY����*)�J$�
�"VBY�
?�)�:j�t�ٜ��b(C�k�-��)������#�
����>@a�<�����&yp�Kz#W�jV��5=G�3b�����Z�F�<H��HN|4I��f�
�2J�Q��4mּE�eu�:z�b���Z�অ��xY��n��_7���@�@}�6���.g�!˜Vt���8 ��Ua���n$�_��l4�ɵh-m;c�M2��Ģ���)�ß�etC�Q����p��O���[20�S��������8�p�x&m�I�ׂ?\T��ͫƽO�
�̪d?Yl&�y���T��VP��]�Q	�DH��$�*3��&�-�C���m]]���>.E˰.�ˤ�<��T4�͚Y�=�L��,瀲�`���6�d'T����4�~\,��4����4�(�Pu�-<P֦*b�I,�kL�ކ�9	\�L�V�W�G"G�FǏ�P Ŝ���5�^%��A�z�t�T7�G�{�蝼��!�DZ|Am��� Y�!V� �����2�X@@!��\|�Ȳ�0@��;�X����w�,˲,��,˲,˲[��8.�ъ?:��#Si�-���B0!F2�N�f��r���:�c��'���T�w��c_x�?���a
�_яRi�ޏN>�X���|	�.�j�(�r�CQ~q�s^~��d�9yzu��_��:�ԥ,<��1����ӥ:|3�s��*��l�2u�y�-⣑����6{�k_d��˳��3��x�Y��Μ��c����r�)���8TIz5��T�%�>d7��'����0�Yz��Z_(#]�_���c�c.�P?��	�������]
���{��pg�r�s�a��v�9p�T��\�r��.2��.Zbk|X"�i2dɑ�@�b���!��\��ߕ��W$3N���-��r]8C�Y&���w��u�mڽCy�˳?��̂n8���ǃ�p�C&�
�.���1$�P����������6�S�	�ף�vz����
y):R�����z�8��ǀ�]<a7@^�N0�m:cx���u]
=@��ϙWnqw���H�!K�<
+-�SRe��^+�
�1g~���Ը10	����"�8p�Y�a���F8όc���o���~b��d�v�K��;\��G1�}�7�	*�S�>𥛼|R2�9�f�[���}���L#�@�(: n����?)�M���J6���y�<پj>�s"���)��)�)��z�O��\�Q�����5)(�7s�
K��*m���$�R��ѺO�����&}�>�!�Bm��R4��4�p��O>Wa��F3ӣ�]�
��%o�]
��4g.\�q���Ǐ���o%0)�ھ�,��S�P�R�����RվY��l|87r�·�f�Ɍ���V��n�f̙���lS.�16\�^!AZ��Ѣǀ	�po��k�O�Ø4}���|�B��~\B���U:q�չ�o�֮�4fc��Kͫ��ovI}��S�TK�^nz0�ܒ3��*���<���n�w�wQ	����6�Xʌ��`�]�.�^�u*�B�8/�po�S��i�1�C���0z��gt)���6��y贫#�h�9��^uvAc�	��O�s��)�6�������B��=\#ٚ���8��h��������p���Yd �1ޫ�|�ov���ߍ�ҖԲ��N�̌SL�Y�)<#����,��Y�%��Vj�6z��쯉�}��#�|T�s�}*T�;��=�����׾w������	�.��_f��j�8�蒆���S���̍T�4�Y"q���y��)�ҭ(DU��M�:Z�jy��
j6�j��Z	΋,��նw!�^X��$q��ph"�T���,7������U (]~N�N�8�I�Xc�[e�ZZ��Ԝ�� Wp����k��]����m��Wʊ���{Ou���
��rN1�t���tk�s��fN�Ɉ��f̮>'h���8���������ѐ�d��oɝ�L!i�㌷�|3�G]���W�p4�j��a�W��G`ϐ�Yj+�T�� v��yq��$��L�D���RDZ�d�V�lr�K5/�t�T�ᢉ2���6��*u��X�ŒH��n�;E�������d���J£%`�f�-8��~Jg���h�ok?*uX� IJr��h������\Z��H�<��ķ��,ʹP�U)��s�2
g�zu��AR�iw�w���h.4����՗�wK��q,���\����V���l�������p�+N���q=��WWvsj�+V��v��򸾽�7v��y&��8��rю��
u*�u?�˦�XՑ�������a׮zuo���'L�D�w/�
��ks�O]0�N
a�P9}Y�)`4�>�����?[��M5��\�aT��\A5�^��*oh���֐�>b�X=�M�x��*�ه�
JG/���9��h�m�V���/L�1ԾkF��]���u	N�]�(/.�%ݶ��;<�P�+���_�nS}�b2�dv���ě�:�X�u=jZF���p��'�ð����xfDom�X��-�!�π�;�5���M���%t_�mef��O�8�v4J�h���uS����c�j	:�M�h
mv|���&$��1�^�{��SX�c4_&Ac+�T����o���{��\��ϥZ�L�����ޡ��s��ZB���?^���3j��7��ŕ%�}KQ���8�&�i.�r��s��B��tw����#Ψ�w}�*,����č��(e��B��t�Z�_���ݱ/����SG�u������۸D���2a�������/��竖o1
1>a�Y�G#f���J��$�t�Q�w�I��vF�2]r�W]S�n��#\�/�~�h���g��Ÿ�_n��G|�Q�'﫧ϐ	3�숳`ɝO:fV6u<�4�[A�	(�JÐ"}Rt��%�n�	��gd��,���p�[��Lv`|́�Q�œ�1�,(�W���=[tT/�{�5?�W�O�W�Z�z��k���Q���pЈ�Z���(����/w�w��d���D�JS�?S3s�uL�m.�#����T����+l�7ґ^\L�Y`M
2�!��EAiP�G������&Cc�G@KH�N�_˦��9/�M4n*�6P-߲P��
�Q@�F(V(�lC�Rq�����G�p�Dm���,*4<�	��T�T6�O�R�T>ULU�=ժR�U[�2�a�X��0+�2dT�F�Q]��_U���:����i�!�p(�X�p[�;�{ȗ�(�
?9f��]��8������J��\z��G���8h����n�4�{��UW'T&��DX�G[t&��d^f�����m]������:���*W�S��#���Q�ǧ��lͬ�1���\[f�<kaa�t��9�[:k�L�Y<�y�p��S���=ےv�б��l�{��z~���=��cU_���u�㐫�1�i:��5��|�篴1��vw�����t��C��^jBe�O�]���s�Q]x���%��z�}�K�X��z�W����P}�O����``�?�������Ѓr�8�����*�*9J�@
�Q��!��R�)%J�R�T=�Fj햦�i
V��t(]j(5�N��FR�(=JD���Mj�6wx2�n5�r%o�ʹ�9��E6B�0W�����}Y} �O��o��his����n�S�����?�O{߄q$-=/߄M��˻�3�cfae�cJ\��#a�T�V�2��l��F�c|�D����M(�~��G�Y	���W�&pGͮv�&�z�o3��{㴷�y�l��-~������Y�~�����_`+�P���#(%�%�!���'�6�ͺJ��ѵ��p�!d�ػʁr�&���x_rN�$a2�
y6�jM�#��\��>�?
%5�u��O�Hr����;!�B}mtժ9��ZjQ��B
�Aw�!�	�H�C�:h�A �.�m���K�S��!/6H��TP�&5ٍ>:x������3��j���f��&9�iLc�v�y_�p��K���]�G�%v�M��~4�b���]X�u{GG���|%c,����b�<�!I�Y9��l�m��9�3h��b����Z:�-��	���$	H�U�`;n�AS�n]Y���v�^l�[,�ߝ)�7v��!Ԛ;X�l5���Z�UgKZ��>���XK
a�M�n��Z� ���ξZ��M�Ҙ�Mw�ݺ��s8���w[�ko������]���Zj���Zj����*#�p,�"��C8r�	ZHpB�
�&5�IMjR��8�����3RƔ�2�LiRćƙ�y}	��v���W\;Ά�+ʉr���d��}�G��s�E弍�4�k#�8�+Av�4idԱ^IE�&YM��‰i/���\/OQ���AyYad>���n?�rn�.���*�t��j�b��I�H��
C�1��0	fXd�4�JV*���G�a�ؚ�W�D3-�V��v9��~�MvQ!�UkQk���QG�1N�zv�N������-�h�2�1Kv&�!�,K��!�nG����F���_�d�-����8�b��Pc$��2��l�)�^�U���QL�(��p(�ds-��V��9��U�Jh�c���Ęb�6٦�~'U�MY��&bn��<�5��;/m����ԠȝOu�`ř�q�Y`��9�t���m-��d~��.�����v���Y��ޔ�ģ�vz8"��8�̾�7'����D�S����Ի#�O����ٖd��幼P���R���r��װ�ܙ��@,�R�B�IIEW�=zF��n�.^��@1I���N.E��^�N�~�Be�y��F�d��j�*�Oտ�!h'm�w
�`��!��O�"�!��� ��CdF�$�$�-	8��R�J�>��!J�(t�0�!A�*��ѠC��k��cƊv�8��Ƌ!"�ËA}
'���s��ކ �q�G��-VjiYfV��om���	9-��m%,#�$�Mo��}�#���[_���а���Uk\�J�o���*WO�X��j�NF[�\�TTM�?���}G�4�H*R����#=�H���FDBJFNAIMCG����`
��j�aZ��z>B0�b8AR4�r� J��j�aZ��z~Fq�fyQVu�v�0N˼n�q^��~9�N]�Ӑ�4�9�5miOG:ӕ��7}��@3��d4cAd���53��Le:3��\泐�,e9߲��|�z6U�׸ �kYxT�?=��Ǟ��N��}��V����v�����KJ1�b1�g�PS�
�E��Χ��+bR)��x/`z=�5�(R�R8Y"�z�Z�8��%Ax�Ps44�kd��	�pɟ��_��Ϻ]�����?�˿��]R�=��f� ċ��# <1	#���LPBJ}�@0�Dcq*�L�3�\�P,�+՚�x����d:�/���f������p���������m�M��O���~��6YQ�:�og�ԝւ�{g�'{��ܝ��w���w���{h�핽���ը�]��91��v���0��L��H��0���GA�@�0P�qXz*����(�D��W3�40��-���N ��9�S�_�_�?2��_j��r�^����ԗ�RX>+n��ٵ�	7�f�"�n{��Kv�ݏ1�@t㒰����hs�XɕSe�p]tP��(D9MÈ�Kœ�@�P<���@�|�A��R�͂��x�"�|.�c�F"J��̫3i%���$��K��2'����1�@��IT�AP�b�޽;R^uGڟY�e�u���2�g��˭Y~��(�Nר�7 �!���й�Q�X�)�@����K��qȽ�䵫�#v(\Kg���5kZ�W�<
0�!�
�:�n�(�r��jֹn
Wy5D[%Zo@�\�@&c��W�. ؀m�^��R`��^�NܷiP�8��7Kp\��`��s��0�%�9I9n�,U�}�N��[�y6�|�>��OZ�o�g�fD�r?gIQ���і ��	�����+�(;�Z/��Q$_e!�]M�;���=��G��G�S�j �n(�/M��̱��w�2_����9�'F�$�q�ޒ(��.3�Hʡ(����	�X���<�'c��̕'U�|i�y����5�~F|xM��T�f2c|Vs��Xx8h󸺇ʀ���g��q���\ǐ��х�Ӕ���!�Y��Љ"�E|rr�֌.�c�`�^x��P四Q숩�}�vm|�!��� C����\�L��-urp�?~=J^��K37z�7C�9Ŀse��Ԡ8����e}�.�4S1��	Ӓ1+6��y�������D���wF6�?O����S��W�%^В���:*�j�iй6��lr��������y�8�3<�:�3��J3��t���t[o�g���e.*�Q��%�
R���!ȳt�N��x�j�SK+,���K��K�DKA����I�M/CӔ洤5miOG����-X��>���	�s�|���?}�����E�B2��L�Ǧ޺���b�#[����`,�z���au���`8.���`�P�$^;s�4?��:<
p�^'�r�
�ѣ?C�BX���I�q�-�)
<w���%Z��&y�u���w˅
~f2�$�-n�Sλl�XK�D1�b�'&�<����s4��=�}�O�y�C9(��N������H�y}��方wX�3<�y|�]��g��،����9�G|q�"}{��wӾO�Y����1^Uh��>��v�M���E��5��nx���oI�w�S��+h.Ş<eL�S��;MO�76p��E)�c���,d=y,*Px���X2"�^4B6�1=?/<�n�/\�s�\���?�M	n@��	���@��=���_g [ )�
�u�5�%�e�����9ln�	���u�~l��u��j]�������B����~����������Ы`�O������W僧ʭ~�*�V����g�3��L�3����`r]
���[��z�u�+���%��E��=�U��+p�4(��X��4;�&������@����Ɍ��&icm/d����jH?%�򀊀z���G8��%��}h�0񞆱�����l��o�&����H�:�J���RH�Z�z�v�?O`��v<_���?����LZr-.��;.d��(� UE����x���gn���*y���S����U�pE*S�jV����V3��V�Xe�AG�t�E�u�]�u�m]u� }���`C���ۘå�-.��7��M{]ɛY�;8�1t�W3[liɦ8%1KMqKKڥO�a`Y3�m�9���\�cb��6��b�Ќl�2f�+) 8h�ݰ�~�[�8���ެ��]�^��rU����@�jWGaDEq���5t�wXp ���6��E�H#�O��#�"��mo�<
tV�p�\r�s�y\t�e�P��?z�*�.����w���j���]�2�)2���Cx�Ž1�?�}:��΅^�@M�o�o�1��|�||
�|Z^4��
T����r_߆�����?�J??�?���~-o?��j6��L��o�7���œ����V�����d��C��r�(l�eE�T6Dx*D?�G�{lub���A,!vPg ��<�U����x�gA| �P�� H0x$u�I�j���L�j�L�L��L��K�Y�y�,x>$��@�B��B�@J��!_�q�T ��5�H���:�T#�&�T+���K�"�eP��	�P7�ˡn�{�9�����7�����1�942M�,4����<K�TR;��F�Ȕ�°�l±���O
$�F!EģX픰�D�y�J��y�웚��.r��8,�9R����S��)eʨ����\���\`>.ʼ~\z<��Q�����/��XD��h��	�#��R��C+���WY���捁��a*�`�C0��(�E(�F(��B��
��4�R���B�0_hc�x�d$F�F�
m�fuҙ#P,`�|c#�����Rh�\?�P6�旱7��x`���r1󏫗�-v�#�#K��!���PDh���f hbQ�:��Hdy@�,�>sY9�<̧J,�bVK�����˃�bRXM�!�.��a���-[��5D6vw�䲦�C>�P�B
�(�.۹b7����^쳞����p�Xk�	
��)��4�hy�JQ��(G�P�*�ը)��8ˎƹ�Q��;9u���\��q�5�[a�u�T��-[��6���.o��L�C4Q.5���e��Ԋ��������Y7��=E?������_���{�#e&"֋�$}�ڻ_
H��R�*�'�&�i���Nroh�
�U}T7���k��/�[�@�X҄Y�`$�#t$�2
�1��0�d̅���i��0��m�B������s!�r�ϣ���+�a�d��4�.d�CV�Hd
̯Ř�붳��
0�eJ��[�;�oC6��$)0���~H*�l�[dl�d��q���mX�����dٺ��-�l��Br`{	���-����w$�N���N����
K]	�b�,%�n�}{ ���'����ߟ@������ lzc�C��kr��{vؽ��O(�Z�x~���MB�[U@�
�!ʼn�Α�.�T�ÄeHq���Į1�N�p)�&�2##+���y��v<a7Tb���8�j�Or����Y�ѵ<ϭqky
����;
4�hb۟NM�k��u��>4���;�ܸ�b�Q�'��ъ���j�w"+p;�O�\M�c�2"��g�;�AGO��m'�9���h���;�(�q����{Z��}-ie��7ߠ���׍U���u�`s]�WZ)E�&��`������IL�k�3�w�:���A�3��a܊���l�]A�-G6�)B�5�=V1��:Q�⪲
��0��"T�|8<���_���~
��M[?�;�;���`ٝ'��@B���t*��֛d�mb�\Q�R�l@j�4!�Qi8�M�&�Ye��4�
+%HWuigVڬJ��$��&�@V
WG
$헕�B�ӥ��fԍ]%�V#�I������U�b�a)�� SSu{*m��U��r�p���`��s�8�y2ILS����H�x�8���O:�$3��W��X[��|jQ*k�x�~�FC�J��f6j�����P�
���J�l���4�L>��g��c��dD�ɸ���Ǫ�uN�H2�ыU3>N�M���0��	N�$Vb��-ޮ�T��;��	Y<�晃=̃W����N�o��F�
�gK�^��U�]u��j!�V�=!2{�t�0I#r���xR�R'���&gAW�ܵqb-� �D�&Xuh�tŘ���]�)�?��=�w��+�1�ˠDE��R>�*��&AI��ҥ��]�1K��w���r?�h����J�S�H]���z�$s�ҼOW�wҬ����پ"A�k�}O��)Z��Y�H�%��K�ޫ�rw	��툻�5犇�Pg��cx;o��>�ӂ�oI�Bq�tc ��RО�V�I��gpl?�J�)4��a1áڃ/�'-`H
��?��#�����b�
�2�”�+�d���2�9"�<���*�0�,՚�d��D��Lj>�[K;焿.}����4��?Ʃ�J-J�Z�tWާĩc��!���YS��y1
|�8ؕ�u���*v�ٛ��G�mu���v�:��ၗK���SF��p޶}����x��{�o�wE��s[�.�eM#�yatB#�j��#�h	i��$�*5>7F�:;�5�l0n�F=g9��r��ؼf(�m��\q���B�<��C2��P�)v����p����|�
���֒�ocwĹ�w�}
�;0˛����g�M]���¶)�VM��B9��'<:��d�e��P�<[�z�JN��ҽ�P�w�$,ge(��jbY�C�B���ë<��5�Rn��˹'܆`��b|��
e+7�����lWvY9���|*@�@�1�sˋ�H�A+�����Ł��U�1+l�z�RPy�F�:p6�Bȭ
�5���R�>����L ���GT���_�Ȁ�eM�>Up��6M!�TЍ�?_*F%TU���I�(�Q3��Lb�Vg*
��'L���#%���.�.[�kCC2K/^5�qKM��gH���@3���8
i�U�
���e�'�E�b5"�v�-ҽ�G�Z��BO��–g�>��=����o�G+}��CңY�	���ҋ�R�K�)tXD{k�O�5�d�n~c�x
G�p kYI
���iή:�U���1'^�\��|d����s�ꑣp(�|W��ϋ�h�Z�Op�p�뒍>:V�#�Y��F�٩>�� �0(ѪJ�r���h�ǔ�q �ԃ�P�������JiO�� y5�ol+T'&0���4WKA�狙}��4�K�9!:~�2�l"yP5�/Uܺ�TrnJ��Fc��Cg3�
�Eܳy@�n-$ٓ�x޷���uHX������$�����:�&��q�N4?V�el	�iQ�"�m�'Ơ���8��gZ8�,��i��@Hs΄L@�)���3O����D�1��T}yYٵX>U�]؄l�y7���b�]��ʁ�,����s5.�۩m��2��}G?��Ƒ;=ʃ>n����o�y��ckضj5.�jg̹�hh�f�cE@��;�V��8Q�L%�BT�k�yS��M�|?� Ͽ��G�!!���Q
4���#����t�~�2�4�y��;�e��9�AA9��Q^�q��z�l���ijec�;���C
]C><�ARn+�[Y���
o������z�Q�}ծM�sy�>-͜a	��N8{K#Ã�@��e�L��&
'��Cu��ʠ���[�~�s
�Lm$.z""_�oy�e�6�jL`{�j�n�=.�}�Z�l����F7|N$zNb�7:J�A�gɥI��,e�L����F[�}<d1t|y�9]-�V~f�+��8j��S��o5�'��-�{�,ջ��2Z����_�K��S�i}�د�q����s�IW��� �d�M�v�&���h�˹�?�X*(AR��U�_�-��K������^1q�SJ�[��n�2�)�ظ{���+~��'���4�>�?���P>��U�tc���/����/g�@���W���C�&�ɱ�n�-��8���IC"���a��C�A%9،JK��\�ךϭ��2���@\��<�7����0k�����E�-���S^V�.ߞ8h��:�h��3M���4v�/R�+��y�P�N�� >)ϙ@�<఻O�8P,v+4�[�ZH�{���>�Gҫ�Zp��9�GPQ{������R��B�p�1�i��3�*��@��t+q��A�Q��Ϋ��jr�x�
�i῞���8��˿1���?RZ�T�)
[�y��}�&y}R�Rڄ����*n͸����p�z�(���@�l#@_��N�>9F�ȃ�Y�CՏ�n�`5hr�?�$s��v%gs%��Ԛ7٨�`���	���Ug��նqG`�"�Bb�.%0(��*7��$\�NΙ��>���lg�n�mN�����)'E��?�ueRG��/i��!��Bҽ|u02��$Ϸ/��
i,�Va�JaC���;rq���Y��tI������o�X:��늶����7�5�](�vw��Ho
Mw#�l�v�����P�D7�_��Ta��H�Wu�K8��B��z�n�8��Ou|�9c�,���%U�'�|�^�0���������:Sho\wΦ��ٗ�7o�ԂJ �0�����f�Ӎ:��^rh�o>0�8�ڕ;ˌ�I4[���'͟X�X�{32N�I���gnX�HM]����#��D�.|2��͊�	娡~u[�z�2�X�ߏ�0�D�JLV���5���@t�{���ڹSJ �h�K<XV2T��=�RnJWL�*t���[g���=��$"�׸p	\�^4�2��r��3��<G��$�y)Y�c�Qr��D	��Ƕ��Q�oG �'Nȉ�j)ۄ�A�k�_�0�y,�ɶ�q,�ځ��q��G��ZB�r�Q�$��xG^X/��p{L#�`[zZ6�I*Ӊp<�Y�}��n�P|���p\�Z5�j�\70D�.Yz�bNaL���6�ݵ.lExn���u�f9����I�a?�	�̶�|@���6�{i����Q��9�����a�Lנ�ֶ��$2�$��1f�
NZ�v�#���sA����>"�-�R�Q7�,H��SF'���][��!�꼪6y�,{ฅ������g�����cq���-}�uۓ��cy�g�?L�� ���ٚ���f9��^�M'VRg�B��ΒgE����I������y������
u�������g�8&�{�^���me9�)�+ �Oԉ�>����8Z���~)J7
�ot��l�~nۏ�yw�w�g)�3�Tq�73f�ǼX�!lQQ�iVT����wE�Uq���>��aC*���h�3�caҌp+NN�i�
Z�$�7ZVO���X5�dų���H��B�U�3J�7�E�I	�[��]O���5^�D"O�
����̜բW���)�+��89��e�kP�2�Ԩ\���o�sk>_"��s1�ޞ�\��Un+�)�7
��3���LȔ�E;�ǃh�Z��O�X��~,��.��w��YΦЛ�#P�:��U��ж�Q��;F^���N��+���l�|r�g{L��S�r^aN����ޏ��k�.`�k��&����X_��…!N)'d���و�[K�8�=��,M���d�?�t��~�xt�A
a���^0# �vr���F!C���Dq��[�m;|T?t��C�w����q^�w����}8�_t����� ~�^x���I4N�<�'�,����q���Ͱ
��~����a$5�����Q��3�J��Q
-MXV��m��:���w�� Ǔ6�Қ�0��!o��G5,�!DS��Jy�ȸ�A5����=7՗r�lz��ה��S}߉7�5U2��jFkT���>
g����m���j~����Gɴ�@u\f�i}\Q8��"�,��"F�O#'�96����Y�7���\��ws����
��M������G��=��bLo8K��m��-�1���ʅ_�yqo����Aʕ"[�<�������i:\�,bT�z+�s?�<�]�~��v%��'|l+8�<��bms�[�V�����Q��$��*oB‍$�{��	[���z��B]g�u~tE��*��_���{��@!��)
R��¦��������B�i��/(�%��]�K�@I
�b��
������O�%���\!e$�<�U��\����Sk���F�l!*�<��OE�T'D�L������ɨK�|��uu��ˀ0�F�d������Z
�P%��Q%��^����P�<��^I	gm�\6���&m�������O�P�X��n�V�1-qŲ�9M'�&�v�NfG���+�պ����=t�@�&4h�*!#�L/�B�H{�u��R%@�.3"�z�eA����Ϩ��u\��X�q�%�ٳ��RD���7ci�����2�� ����{�n�)
��xh��Z��^�*~�J��5.xWtCj��^&��}�7�A�C<�A�����@E�7l#�<���w�5�R�v��"���﷮<Q"�ش�h[��u`O���$/��*`�f{���wۥ�
� �
C�~��ӆ��,#�d�x�-i��ؐ�G�2B��
��lR�x&�����@��[�ѳ$�&��mv��߿ك��(��#��R���k�]ۈ`�
�ƶ��/�+�!��z�Af���A�-b���PP�@!�ž��#B)�gP�>�?j5Og/6n�ؙv�B2�C�@��F��t���ք���k�	����D��ө��OT��ѥ��c�-��io>�f�R�Wd�5���55\ۂ�|xzjX
{�
�٭c��A�����@�m�����/��'[.�?(^1�3�O���i���ɬ����X^sT��a���,y]��b�zշ��nd9�B2�����t>�g��E�8�ð�@�����>	�>r�ʶ?J�gᣗ��|ݞ�=���I�F�9�`���0��|t}:=a��	pw<D(/��DR?s���b:�����omō9Jv�g�m�*T5���H�ǔr
O�z�c5�+_ol��8B����8C�?�vY9X�ܢ����
�?i!,߁V֒�c]2sBow���7��XI�er �F�+�R���)��=	���X&��A�aL��>��,�C�Œ=��d<���^��'�*\��eө�?�_U��X�>Ň�@���9*���ϗ�>��Bo�A)�>�?�)o|����6̗!��rew���aiT�a�H�G��W��k�	k��W�d�"��e��*�Ջ�B��P�:��z��?C�C5y�"�0�Z,}ur��/CP�3+�:cIm���M�"� �p����v�OiK��I�m\�d65x~�յ�^2ؘY��q\*�zhP@�P�+�Z����^����W�&���+
�A����hH�&��<�eW˺��:&�a��t"���j�Gt��
���j#3�ētY��R]����Yי`Y�FL�9��*%P�Q����!���|�H�7�Poa0���p�벸�u�^�r��80���n�ٿ�. ���xʪ.���У.����c���[����!��rЅ�zv�rȩ��F��W�,��N��Z��ZX�&d��E�ɶB}oKi_�3I7F�A��]9oV����P�� ��Àe�1�0�.��.��
#�Ь.��	mCy��_��`���̈́hiby��h�N�˺`�����΍�_W���O��#�9�>"h���5�Q����OO�K�4j���>>�,���&�f
k�d'�|^��2z�2�Ðq_c7�#.��mI�뿁��Z�j�rS��{�*��Z椺�	�h�t�n�o��/��2�RlHؚH!����]���s����sok�f*2P���/���,	>���FGX~o,%&��X�pp����W�EH>݌�rY�*�#>��=�f�_�*1�y�6簍�e���]S)���}��h9���7K����>Y�2�8ꆓ���Ҹ��$6�а��O�
d
߬ �U��:���T嶳�6��Q�H��A��320-G8�`!CYÒ�	�V�X+� -�|�O�J&7��޽Zz����"���-���>��_3�,�t��:��Sgڷ��|�VtyWczϕ�݉᎞���E�ש�5�
�. ޕL��%�E�˼.Vl��fǫt� � :��S0P�[�ԣs����"#h���C@�i��TZ��Tot�	��\�혅��j�a��aϒEw���|��S=�kriVݳ�*��R�K�0k11ǿ�0��@�#��FtL�E�?����`�q���-�����\U5�ퟛ��걖*���N�k��Y����j`:-BCiW��l,߈���Qϫ���sك	�}TT�����k�C��jd�d��b�'�k�[�9O!�,�K��J{'g���/u������~E����T��ܨښ����x����ئ��ZtE
:�H]��.(�c������ظ�J�������*�MA�QQ��pH��HC��
Rޥ�ț�ޏ�֪�RO�֭4��^<ݛ`�>`����$����W_���{����(��c_��̨�۫p��鉗���h����1�h=d��~	,�U���$9�tbR>�l���o���!|/����_bd@�,ϑmr��IX�����$Bc0I�f��E�x����ٵƒ�ة��[�Ҭcw2��\��|�uEU����-���4�>�B�O����ϋ��PF��?4Ĵ�3�cA�����\����~�	�s0V_
���>�]}
�P���Y��]���V}Dh��<�.o8WJ�?���w��ϕ���s,�g��	��\�R�Vͷ��~7��+6Q�O��,��,v٭�>�ӭe��(�0_��嫭i��av�u(��C2�����k�y1��%��e6�U�c�{�?Ob��\����j���|;���5E7Bm�Nx\�}�}�xe�@]'T7n�G�{��-X�S���X��p�D����X��s���9�F���5�[�@��\wM-��r��ݘ������Q+!��
��ˀ�-���	G�H��O�b]�����C��T��V�a�@eHq��Q��)�5����j(-cz2rl9�!*>��U�A�����4B���R(<�i��&,��+�y��oɍ�e�����*8�2��G��WscS{3]�9��P,0%"���d�?QJ�
�G��;�;$��cԱٷD���B�G�]�N=��4��h�&z#��T���w��c��]�і���l�,q�|���f��qXp�v����m6[򥗼�bU����&����qM\�L��X�h
?d�cYҝ[6T���Q���+��;��Nxл[�����޲N�xz�|��J3��5�Izƅ�܄U��47�&NX�vςN~�B�%=!�~<���U��
)�1[���r�YՅ
q��q�#�ʉ�'���3�MJ��7�7ݍ��2۞�G,�`��-���ْ5	0�'���vQV�
��<���~�[��'�:�OЕ��W��Qm�ͻ��?j;/���z
��$�,h�쪼��Fg��.qk�~���Щĵ^_P�WE�WL;�j�
�D1�qq�NeM��Xb��S)m�0R6��z8ՑEՊ9�s�Pc��=���v|�?�߷�eȅ
���4dK?�f+Kj6�%XyACvk*��ݻ^���J�4�z�6<?�.5R\��担��ڒ�������ޟ^���9�72��}Z�_�Ǯ�5��?^ucW�j�����h-=	,�4Y������07�'��k ����ז+�@�M���s�]c�C^<�â���N���0�snW��n���������EE9pAG_��]���U_�ϝ���͂s=�2�����,�U2S��ٓ,v��N*���n5��Rt8�H�-��
�����P�{g?>s�����8)��N���ˢV]d.ſ.sF.%�δd���Y���;���ʁ\�r.#P~NJ�s|M�?���/�f�֭j���\��X�c�Җ��u��4>/)3���gm_�\O|#��'K�^.��dT�����i�������tv=��&;����Xc�C���{�3�o��`P�v���`!1�>Ǥ�e��=,��z��aC�,P�l�=2e�6��&��rO�y6�1� ��Q2�NL|}j:�`o��7r+����T�9x������ݭ���qLX1��cDҕ��ߚ�sG	�É�R�{���}�#_le�G�@���n�[��l���41�.�

��i3��};F���p%F��;q��(W���X@I�]=��"B1R����CyT�O���K��N?�@$��'�� (a����Tt(��]k%ꇢ�bJ͕W@N���G	]]ͯ�h*��`��	YN���ł�K�^�>�;��G�}��B�rIZ2(�����ƻJ�kmM��	����\)Mʌ@�Q���`����K�##ȷ}�z�j���u*{@(��V��෇i�[��8gX%o�ҳ����!����z*�����������[t@}s���u���,l��[��lp���ׅ����k��}�ú*�^�]F�y�U�^��?�[�<=�;Ӎ~	V����g�~��_�h�6Yd���>�]�?�t��9z3��R��0�BLQ����RezDSi�};"z���h}9�-��Ds�}Ȩ(D����C�"Ӻ���ߔ����}nl�;_��6=�y$��C���	_��I���^��'�'��Q�릃��.3��%�I	����k�o���y4��S�Z�%|߿ld�@d��1�CGdF]��ר��x?�tu�u�`�־��&�A�y�y�����=(]��<X
��l�[|��QQ�/T�z̛����������֣v�1b��n��5�`�\l����>]߱��恦F��m�ש������Q  ��h��XzJP�Aq����(	~w�E̦Q_L^t2��mӬ��OA��{����G��:�ϯD�y�3�>b4�J�v�(�?��2�.�(����}�w��`j'�`�]vK�E'��?p,
y4]�LJ���<<>�T����K���j�X�ǦG���#X�zw���o�7N3�^_���I�~�R4N��7��^�ȱh�8@7E��O}L=y�x��22�]��ky���~}����m�o6!�
&D��9���|���c��gN�p�fQ����&*��p�N�}> �>G�`�j�K�x[�~x�����z0y.�
0�=>�#��G��6���\iw\)*o��bƦ29��ARo�b��g���h��ʋ	��u��	�d�s�	�O�~��
S�[C��֌�?:�2���t�P^�b5�dU�m�^PtZJ�]SX\|^j��9%��Ů���|\N��"��3�X/���n�)k9�ͦ�v��c���"M�K9�|6a�H�F8���)�RR��`�����}'��F8�n��;��o)thVP��PP��pR4*w�X��=���(�{��B��h#����l���l�;�By��Y^}��)�5
����ϭ�����1O�K�Ȱ&�Z�	t���Ɍ^�L�d���غ���P��WN�h�Q%<@:�;�D���>���~�~�����N|���a7��z��w����𚟃6U����5U!���*UfQ��zƈ�C����HB�O�@'ߤ��s1��O���T��-,+oB�0R��e
�Q��ID�RY����
���2O^Q�a1e����,���OvW�r�e$�EĔ�<�El�^
���إ�!��!�a��L�h�J�74���P�3��(�D=2P���q����jeݵ�ף���O���GZǓ�����/���a�������ز4�Y��N�ɬ),kq�P���?��''�nPHnT8����185|71��0��vt=߷�[+Ee��������xߨ>���}�'����,��%�T��p�{��L�}Mm6�|
�h�ŋXL,��?щ�O4)��?RfW��l-�q�K������	��5�2�+!�0&�!wZ�R1�i��nh,tz	a�5AB9Ĵ��!{_� �ܝL�X�b�}8r�����]\���sAQ�ne)}��G1��Aw�$���5?<�͗�l=�/�C���B��]�'��Z�ӕ�-
��,
�:j��;���c]U����Pk�9��!�Ӭ�˕�:��6��Ӭߛ�B
�6�����*S܈�Y"7d׆�80�Hf	���gl���V���6fE��)�T��{�/xAeA/�ĐD��d_o��E��Ի!�H�G�(w^7��)U��R�C�{��p�J�kHyڿS(��STj4o�R���w��g]�Jc�_��n~�����:s	�-����я������{G����%��
?�j�~5q�j����M�5Vz�ڐJ��UxbD����L.�����v��;�ai�<��v�e1� �%��s4\�v�X	X�]���$�z�Z9����JE���Hl�n|<�
�Ǫ���7�wW���z�{?!~��n�É_:GF�ҟH�u����
tA��L1{�~���Vg
�4+u��(fK%��j�el�/��n��L�ۇ*Tȫ-�ˈ������@����}�?
h���]; ��!8�����}~22���/D]E��<54C��A�E�~|�H�q>F��MbQ��6�4s��u�޷������!q�l;a��v��"�	�{^��'�5����ݾ���"#�T7__�:h��VR�tʳ;��E{w�z��x��
u����c�K|M��BV?�Æ��[�=�Y����Kܱ��̂|H���$���E2�lr�y�7'!��n;��QE�@KI?Õ�f����qs�
gy�y �ȫ�!�￑����Nᕒ�@B�f�l�qj��I`*;9�5*�e�#c���K�~��N��A*V�.�}�u������
������g<��|��G�u�j�'bd<VV�!J�BT�"#�,#��U�
2��c�!���	��$C����P[g�, ��Y���y�ȉ���=����ᝰ��G)G!<J�е"�?����N���9����
TB�MIJ{!U>��ǒ�l�,_�X�(�c�'5@�W{d�}o��ãîq$���6W4k\z�9�A��D�œR�px��������S�ӣ�Ͽ��{r��S�@/G�}ퟓ:����?��3);)�{0���G��KAɰ�E�����>P���R81�Y
��\j�+�WRۜl�Wu���Tvd��R�5�N3�d)���(|^�o��߀��y|�6J�|1ڝ��7��8O�HM�_���!1о�<��`c�r��
�����0��ú�'An�x��H�1��I�ƣQ&Tf}rd��	�P�a�Cq(S�?�Ӭ�0�K�Y����M���A�\������Ǖ��Hz��ej�U��@�/�9��K���7ƹ�L�6��oT[�C/��!'!�A-����>�Eڷ�.Uu$�j6[�^�U�a�'���)p�����^J�#���_��$��]��o�u��O;���,��;{e����U�<�=
)�Ū���j�{�KK�� =1�	6_�Y�lI����?|tB\w��Ԣ��5�B4��L׵�V1r�굄j�_�.������֋�ZY-7§g��a��B鸔K�=��P��܌�����2h����'��q��y�iw�6��f�s1`q�g
8�O��%��B��F1n�D�D,�|�[HT�dJ0��<!g��US��I9
�Wj*�����9��L�
q�h�&Yl��RȺ$n}/�*L��s[�w�8�@��1v!}gfZ�X
�3�f~�8���P�:�֍�a=��/
�?�~0��$����+�͑6{C j�+�5�%���cj��y��J�<Z���#s����WG�����4'�@Vl���m�Jޮɽ�Gf����_�"[�﫭4M�>�=i���؉H;x�ƻ�e��
v��F��}_"Z�
�f��Y;r�� �5�ػ�J� 1�Ӎ�щ�p�{�Y	�ę�?�c:<�����>�{��>��F�뫃<>�)#p7���y��a�Gӂ:/�b~���q(PȌL���`vҠWv��p"42��j�m����N�r��hq�ר�8���-th=�Հ��O��#�Jo��0�^&���M�}ҩ�
�̙�n�'3�<bI�z�n�N��ޛ�/�O�h+��@���d��>2���à!�Z�Leu�B��n��xe�I�8�9��H�c.������I#vY�b�.�B���
2;���{�$V�N��^&R�L7��c�o����	��׫k�6p�dT.��@�H��|���$[���T����2X<���‰.���<�FLJ�oL�ߣM�..��6HO�О�q*R����%�����/o����#̥?�0��
3�b _��s��������y��#N�h�R�ӂ�Ft��C�%&�)c/RO�o�q���{״&��(k���\_��CF��<�^�4�V���әaHZ�[ugDP�j⏷�T)x��S/�[�L�����^��̚�-c��=YB����n�nJE�wTl��ĵs��Y�_7���-�[ð�Ϫ}����6w6C6O1�x��$���,��'=,nT��yT�֤y�r��:����:�5��G�̲?qSǫh!��`�E��C�߃���sn�M����=�2q8�B}\'�󟜃n.���y˂E�V����2��`�Kk��g����?�w�K��p5�;��(�ۻy,�lс�o�\lA3}"3�*�'�>Ҝ�W
u�$���A�����<"H��WZj��|{�l��E@T?8��3��1��B8�L��k�a�ߖ���q���/�HX��m*稖�����ԝ�e3@m�H4vsB�kb��H������]�3G�xM��c���P�E��W�b��5@Ox'�L1g���4m?�fGg|�;D_͂0��K�2�
_ȯ�1�m���E���b���'.4��P7m��q5fN!5~������6��<!���־u!�(�_)8,�}H|���;���y`||�%�2)6�|���?/�.p����/r��Ke!�em
Zgs�ʩRS3�G}��*�D6�<M�2�6h��i~�:�P##�D��.a������b4N.�����	��� ��\a#Vn�1
�o��ѐr�r�`��j"�y|Cy���6T[�S+��
��g�G?���Y
����	0��^-1��D�=|&h��y9ofKJ����Hs{0J�C%���)��=S?�ahP���,�l�R8����;F�cЫ%�d���P>�~�k���)�w8*
�G�9��$�W|PԬ�L%��"
*���Q١�����B��>U>~h��[�����o8�ȯ���(ҧ��<rYֻ,��M�K�x��j�]�"�@ޭ��]�Wl�m!s�S�}��eS��v�S�XVP�_�_ȑ������#���+(
i��/�Z�R!�}PqE:��P�ETLq����ΠK@e���D�ڜu9958��qQ_�a���(�+Ѡ(�<?j�����>F�hx�G����Ȕ�Ǘ8</�~o�R���8_���������鬊n
������5�M_��|�Fت�f#����+/��O(	;<Iz��n�]^`�{6<�3-�I���}�gUn�5���A��cUJ�O�|��5M>�Ƣ��T
n�[j�5���蔥׏���a�Z�?�Y�k��ډ�d�g�.<@��i����
�O}�"��WU_7��)m�&��*}�ɶ���K��c�(�N厧`��G����C
hl7{{���A��u���Rz��Ţ?�B�m�6Zy��1����c�
�3�ț�_4o��L��
�y9�-+UvS���ch+`xck`�f�2ӽ�=֌j��)�4�B;��ك� a�vE�PF�_c�h���hy|m�oD	22T��eh%d���;%��e��,����N�u�83�c�����^Hϸў0K�AS�I��]H�S��-_	ڻ�%eP}���h�ρ�B����G�]�~�gk-�k�3	���:����ϒ�F��ʄ�R�C��=Y�SX*��yi�EUL:�6d��CkRNK�+��2���=�����)�������W����P�i���u��0̻�ͮ��`��
v[p�=o	�=r���f) �8�X��#�I�5N8��چj��4�P)����T�e��0nV
�2;g������c��B���P��։��.�d�֖�}��l��[� �|��!OP��9VQ��H�q�;ܬ��w��7.{z&��t액�d+���ʁ�U"?�D<!�|qz�)YN�ޭ՞��J�M�ɷU�����Oe��E���m2��7Y@�྘�pć��L��:�����!Ù�Ү�ZH쮀�MI�-�z?�f�5�Hq��N?�z׹M�T6�)pαzMx=:9z�^�_�F�;|���*��–�D�NUu�(T_�0\����y��ҳ���!<	���9�}y�Ɏ׌�S��t�Ȏ���ǃ��1�k�)#���#s���W�sF<��🾌���~�>�/�b��a!T+��m�~:�n��t�l;D[���4��NƟe��'�fV{N���w[x�f��Җ�ȏ�o>��O$���3`�l���K�B�8��}���A�,�3�n	����4�_��!�A9��}�N<��+;��^��KE�I-����PvJkmS��#��g�'��3O�OO:��R-�G[��๭��1U��Y��\^
����tAg"F���07Ob���cX��4_�9 4]7��y�K&���i@�8�̎ˡ�B�@��%P,0@K�����^ol���=5'���:�3�^R�n?�39���}P��ˌ�4u�7�҃�ظL��d�ibj\�5ԥ���\����ʎ��v��=��:%G�-À����[q�0sw��=�›�:|f8~�&� #��f�#�s����8f��gy�}܎d9�j�W��"�Nϫd]���������{��x��vHt=%�\��D�
���̧���K\ν�6n��G�UO�w7+/�Z7
�%L�Jo\�&�� �ݶ�%��</��l��2g���F ��D�I��ȝn��Ε�'���Ax�T(N��y�P������Q�"g9�p
�3��
��>�z+�����mڎ�$du�񊗏��$h���x�kW+�x�y�{���P	�����*����TKγTZ+P	��Rx�5G6̪��/ ���
z)���}�di
��	6
г1�u���ߟ�e�!�yr�
�G�13��K��Do�Q]	��N֪{�I5g�T�p���d+?��l~��|~[�O���S���(����MkA�>ϭ�`�m��(��6�pՂx��j���w�=���>و8��Q�X�j	G���&�Y�댝�c�g��#�}��l��P�ħ��|Rȩ��%\h��F��`�6xm�&ۺ+��CF�[/�ru�7�J�JW��k�A�S�A��-IZ�	�v���&F+����ݕu�(R�+k�!D��c��B�d2�j��'z�Hi�F;qo���X�1�,���&n�4J-#s.o&X�5� ���<3�����oak���u�
>�?PQ����:4S�\�!挮�29�#]�}6�]muĻ�‘?��s�r��A\�̎ؖ��钦��ؗ�����؝{���WX��P��A<��̿ԯ��-'�l�CiG�C�b��Þ�}�*N��~��Y�O^����3��)�����`���|8�6�R���c�����Is-o(3�y��;d��7d�!�&z8�6�����+=٣�����CzVщ�C�ĤL���w�F���
Ӿ�>�����O��+�_;�f֬���Ѭ�zm��Fz�%�ORTV�ޓd��3��-�8@1��T`on���^��;���
����D��i2zĝ�"2N5X�t�[x
@,�JC�jX7�D�SM@O��̦ʖ�M�o���S�^$��ߎ|1�	���B�]�QiI
� ��ȗ�_zs�b�lh��2��6�v8�,.���*�ɋ�H�7��z?�^{���͒�����Aiq޺�T���Ҿ|{@�|A�H_N�����hA@�ןҨ?��<*��!��P�)��x/}K�?��F!�Ō�[a����^�׀�W��>�^E��^�oJ�u;.��@��i|���yڧ��}Z4����s���Y��
笞�˳'�,�Ѐ�X*�B�{����(�9m�5�/66%T�[�0k�\mA��K��h�
g��]qG��b�g��A�nK"T�N��������)�4�R�Y���z�C��|* lA��d�Q�hk�ǡ��;f��R��g5�FN��J9�r�y����ϗ���TAL���C_K���AkL8���`-�LWɭ�ɶ�kU5"B΍���~(&���6�_T���_j�K@M���@�	�U!�U�^�O������U!�lL�H��ZFlMU�j��հ�
�&��88�.=qE���(�������$�Y��-���+���S�{��CX��ט1�Kp�M�z��[.�|��hk���@�JP*�Iz�҈�6Ь��p�~	q��IIA>9��Us
Ya��OEW��O"N���Ί��Q OP���+�X��$�͞;+�F��J�a�K�D�6�x��㔖�.'��~Fz�)t�M��&������
[2G���F�u_O�T��i
Y4):}��c:�tm�h	��K^rR�0�3w��K~Դ�Z_	>�f��4�+��9C����NqUZ�����y�K��]�\�em��|&�99TX�Z�>#׵h��Xʘ��b�� �F?ߦ�!��
�(�RrW��hq~�,7(�h5�Vz���M�= #c3`�}���PD�?����E�2��Mz#���f/�qN�'�%B(mg�lvZ��d�=���=<�{��}�p��%���v��TJ�_��ui$�ԯV(1��*|A�hD���ؤ�������֬swLSU����6!GSe�ՕP_ëXW]�PW�䮫�����'�<�]^�<y5��*�lw爵U��~]��h$��cr5}4�kU�j��L~L!�u2�e^!$m��S�E���5���w^�ƭ��^uW�Φ�����栕\��er�H�B��[�k��lXo��\�ܼ�<-��������?(��Tn��IvJb�:����)?`��2*�Q\���q�;*���;<1i�eT��{	sH-�����XPR���׫�c^�_2�\zT���Oa&HcF�0��2���d���ѯr�Y�(�(���++~]z���wm=���޻ݼ��B��C@�����(9g_FmJHM�	]CA�;0y����W�EN��Bo,��u���8�K��p1�
���ш����C��5�(���ܲ��iմ�8��w�t��M���vT2@
�/�z� a�S��~�S�j�b(�wQ��÷�ϛ�jV�9�[M��K���_�r��EE��:����g��a���KY��u��� �[z��#�%I,|�<��Gn��^l��&��
;�Bua7�=�,��.�D���r.��SN�N_N���92�'y��/>#�C�$堙��R�m�fX�~Տ+�ų(
Pz8A�]XV��9 ,#�%$���"`t9�=�_*M���$ٿ�86#�s�
����շ�6���ZmM�9y
,�
������9b�m���x`Xlp�J�HψT�HY����B*S(\��L���.��B8%D�C���[��#������,���M{Â<A�4�7�	}�7`���PH��i�/1���Я��胄H$(E
��UB�Gr�"7�=v�~�����c]?�8�
j���v�ن�ڒ,<��}U�!�/��P#+��*�#�)�l�Iq	&l�'7�+��(F����<Q��lx��=��\�Y��u�RHgm�6�3:*z�.>�]fi�V҆$�
]8�J���鞫U�k;����#�
��nMf�QRTb�������i���T	d�W+��f���F�R��F�[9S�W˲a��W���H��訓�����%��g��h�u)�v���I�����3�D�P��l�Y�;(��^ub
(#�f�7T���^��ycA��5qq$ҭ~R�Y�9��r*�S���ӄ�W�o�M�o�vD�ለ�е��ի���kb�����o{x;8��x�6 ��;���:�UТ�!��#�q�;�('��x�
x��O�Wcl�[�����j�n�룕(Տ�9��q ��,o�nWg`����7�:T��w��wh2�D���4^�J��1�����}R�W���9�rg�p�E��CѶ�1C����^�cSj�~C�
��\)�TJC�m�{-���|z�q{�Ov�!>j��;�zE������jA��0?��a{sm�H�-�O�i�A贘M��<�ݔ$B���A��9��;��(�P�J2��-�^�-�p�F�p�1�*a���BԚL�zemv��ʫ��Hh��@�65]���+RW��{}nҝLS���p���u����4���=D�����#���Zf����4�C��ǩc2w��
QUVv���*;+�82C��%*�5�/����x`0]7��� %9�nBRg9�9~2"����Z,'�^�fF�տr_:zDþ��ͫ��ޞQP@f�3�(�
�Kq�_��sC!�+�y86�=�j^F�VR��xԊΫe�F��[��)��ő*���u9*ǩ�#&�Ŗ�`�@��vmia|#�[���O�މ+�s�w)0���'T"��EE�Aq8&�g�`��H`O�_0.�.�Q��ΰ��
3���Z`#W=�R�L
Sd7&R&�|���I��OÑ���t���3$�ȗ�(�.>�.-cXn&��\-���
�s���Ύ!��C�"s��
���~�)4L	nq���]����\�EJ`  �i�g�eZ��烸�Z/�Z]��s�n����y����;�� �KV�lyz�ng�����%z�
�v�h�� ���
q�A���+�Bm����/k�
�
�5H�
ת\�n���T�t�2��ŧ��-O���P�%8��l(��Z�$��ӣ�ƨ4L�J�%<���cGs!e���	\OL<زؤ\?��U�&��c+7e���+��n�4��o
�!�v�-*�w��e#��^7̷N�
5�l�Rg�����	�M`�h-뮛Xˑ��v�\�t0;53��N�TR�B��]C�r�Ȑ@��$�Ǩ�?��N���<7�k��+!<ކ(�ۄ�;z1�{̮������.��ܯ�q��J�y(����ʩڻ�!	w�}��)���JE~M��r�-����=I!��	s�G��}�eŻ��������gO��g��ۡ�~Ԣ`����u�{D���8�:9V)Rn�s�89[b
�ٜ�6�x�[�;����qUxH�Z��q[x�%9�W�l‘Qp���a��0��A�jj5�+{�/�G�y�/��"Q���)�!J�A�%N�RW��3a@~�R.��Q�?RvU���*W�����ǟY_ݧ���S�}���K�f�n�ј�q˞2������#���0�1IGDI�B�������ڢ���ƴ�↢^�Zom@Qw�ou`�R�Mս��zCx�[�ĺ�V���1=�Wn��������UOs{z�U�nx�rdbt@�ܤ�H�E���ޖ����		�yiq&+͕�z/,�x>7&������t7��G��g��L�b��p��� �Cȥl���:�N2��kR���4�&��?�튈�c��2 ��]���c���>�+����G%�V�%�o��@.S�(�A��
��.���-!o��Qla]!�׬��#��;Z�"^!$`�|E^��&��0߱�!�Y�d/�$���G	=��L´�Cao�������O����8��g;>��}udV���4�ԟ����5<A�|�|�X
�����"J���D,�AL�z���*!�C8�#'^�|�s*<q�F=��H���J�$pЋg �|CXtͲ��s���;������G�#4l�Z��
h%�.�١��$5�M�3��\�����*��F��g�����@Zٯ.�1�IV�@�����Ǡ3�9����ȠOG9�Q[�,��s�y��j^m�lW�L�rЌcF�	�K�����/�Cu��8��]��h�Ng:(�$�d�>��zht�[?�\OF&0lA~`�0�D1��ʓ�N�4�
�$Ɠ�-��"K�s�w
c��mԣ�H�{`��J
�����.�}��b�V$f��/H�2Qu#"T�A��SK���NQX�t��JuJU���H��]�����Gd�W��QNE��xu��n��0T� rN	�蔰plN"W�ԝr�H�� �6=h䙆E~@������u2(z��0�ˠ��se��2j*�[��z2�_D������".�#�\p�\S�,���z�dD�Ô�av�
ۼ����v�r�SO�ik�zW%ʱR����/��|,�b�֤�S�OK��SF��87���E���ڦ!�E�W$��W���p=�m��4��/6H������LZ2qp���d�o��V8FĴ+g{͒�{1��C�Hu�@��P�7����Өw	3�{/�5�k�e&I9�$|:��#<Z��FU�C��Ђq��Ng� ���QH�G��i�)����Մ?+&�:�9t�?B�P{!C���7�F���2�+Ul���r������
U{����T��ǁ���M�7��Q8�Ӿ���Lx�Wp�h;�O&&&��Zcy�au{��K��m��-0�T����w
����U�q�I95ٱ��~8�����R[v�u`(,�L�GE]-�;;
��h��rd��h���%��
�·JarG�У�̾|�0��I� k�����N�T�)�=�l&���[O��mb�Iͯ>{��\�����縔V��:<��Zw�1�pD)�� �
Wd��v@F�{�z'��yj�6�AO�UX���٥}E����!��C�h�3�g�f��e���o����P����@��jfL�Wj;���s�k'��gu+��k�5�ʯ�!��/+K�H׎m�T��m�4g7��u����2
L��=�pEj�|F��*lOM�t˜���hx���$<lK}[˪#H��ɳ5�r��ufzv��t�H�}��7�u�T�5�,7r�o��/)\���"oR-?��qȂvzM/�L�����2B�!t10��Fq���������Eࠃ�ܑ&-Y�*G�b�Ǡ�aZ�ҁ����%�y�.��l^��$�	1�	q�q��F�u�+�Ғ��dױ�dBA�b<v|'�S��܄W`&jDy33���q�L����ħ��l	5V�4FVk^U���)���I#�ț��2l�{��L�msS���|�R��`b�_��cw)
��F�hY����>�V`#�B�;��g��~��H��m�҅�3���D��ȒY2`D
�Ճ��D��� բ�<�Y����N�����kڏ
�$�&�n�0轥j�@9���n���;G��>u�4ب_cX
ʈ4�+�sNJdIx�gv�u}Q���*hB�,��K+�::���g��ّ�5Z���!7��ع��ص�\zX����@����?�{�K:aū$~�S$�İ�����%���@bV%���L)�������ZG`k�s��3>�?�"��{)�c�CA�����c�R7F5����.�n�h�7l_�o�^��}!=
���̑�LE�wŠ���a+����/�'�/��!o�2sO��c�d����ug#�2��`��\&��[k��b6��=�#7$ؗw�ũ#A����|;�:F�B��)�7��1].B���j��{֢t�_�����GsH븣w�<�/�"=�xh<��8JU��q?�+��~1�bK�E*7����xb46�PO�x�D^�7�	�z�%�ge2�{����?Ԅuz��y��C�|�"?@?';�A�dj+V,I���\�#�Gv��4�,-�a��V�r��!-?�4K�ʻ�X����4(�7���/w=q��<�`��-S���N_�[zsH�4L���I$���E4!6�,��)Q5m�¿c����Tҏ���|��z{k0�j&�g*4�O�X:���m14��2��dX���r�;���[���l�F�*28��I��t�j�y���N�%_�~���v�E�X��xK�c�_{���:���-������wI��Ţ��U&1y~O�k����_ǜE���;ԟf�'�
pN)!|S,�����$~$|b�F���኱���ڴ.��<�9�)���A��|��16]fO
'�W"%$�+���cن��*�8��:ʍB��<j�ŒGZ�J�k͌����D�� �J9?�1�����"�'hM��n�n�����L���$�ǪnFigq���G�㼀?7Bc�!�8�ǩ�+[Z�"%x;��|p�6Uƶ�����f4�(�FU����N�ѽE�������N�rw���Dg#�mJ�o��5��,H��@q���|�sX[\Y�5��z�UBV[޼>�=b�I��xވ����򙕗;%v4�5G����)���嚸V7��J9���$^ �C�����l��W����Ǯ\�[�$?�l�n��|�d����dx�&����>N��(	�����.���RK���J�2S��\>��b��)���;;��{��-�s���n6�:Z�	\��Ƙ����9�4ބL���O(&Q��C#F_���b=��*������"_���a3�8R����G����8�u,y_�S��}J2��=�sw����hN32~B�ghp����:2���cGe��0��	DL^�b��˓ؤ]��N�I'6	V'��I��m�m�% J<���[u�'��L��QFϢ߯�^t��c�H�&���#�<
�B�{ɉ�g�!�d�q<CF�ٗ�E�����x�}��9�cr	_w�3?h�z���|�J�����N�E���X��IĬ+�{�~O��᡿C{?��kx����ɓ��_����m�̖<��|���\:PW>4�X����Gx(�ٺى����Um`���C��֝ uz
�w���K
����C��X�	��j��ض��e�ۃ���ue$:i���یD>�ٲ�BVlf�vΓ�^�iS'��k3� 7� S�=�e�	 #���"��,_�q���,�aG���mN��e��z{�ɇP�E����rŇ�k�=������h|������4O�~G���eؙ4�IqV(�S }�����<���������R��ve쭻Y�*�����,�!�u�j� ʋU�u����\�\`Os�%<$X��=S<����v��� C�D��x���.���+�X���+�����_7?~���	H�&<���8e_���Љ�a_Kqz$J3g횫jL�@�$bk��*����O�Y�N�2�fV�by��՜*̖�l�_�<pG�S/���!�]�[����2m��:�?:&:ye���V1�),��:,�V��N�<*�[��L�?���j���:ꅁ�������<É%��w?`��/��D"	QI���v��]��,���)�X���eS[���j������)l@
ӈP�$E�'��n�;�,3�n�*�U��Ha+R�a��!A�p),��h�s����eN���X�����K�I��A���^��^�O�;rOܗ�<q�	.��x7Ȍ�c_w�-]�)&NB?Ҡ,Kק��ڊ�JP7�S�F�ZO���%9"����؀�(N��eZ|(]����Sf����u\?��wE�
�۱v����.�э���K�h*O�ѩ)$�!����냡�1�gTȋ
�s�n��0tq	�Ľ[�0�Q67"��"�.e&���z��R�7�*w�ٟ�M��R6kH|�Ȁ|T���R-6����e[V�R��뿷�Y�m��T|�ɟ�I}���p��$�K�~d����`�u��$-V�NBfEB!�<d>��0�$�L�m���J'�;)��<.��R����*EA�~X�8ئ �6&67y�w��
9�f.�B/5t�_�iz|x0��-��2Ju�m~�!
S��H�\��N��1����?��.�R�L�c-�ɣ�z34�q���'��A9�ɒ�Ჹه�o!�-c?W��hL��'�p����U\Lv����{�䩰�U�>�^Q$���>���m�W�������S�1����P�B�/r'2�����5�r*X�xn��v��!`�*��(���Ü��?��F�(EݧA�ƅ|�u<�ޔ�/g`�����yx�/�g�B��Rq��HN�"��/���̢���c�\�ܕV)�F��*`�A0�e�&/��/����A/�5y���ݤI�=&�yir��#����t(���)�����JI��"���u��d!oï�����;��C�ά���/���>�o�
y�m�읫�]h"-esu^�wr�#�ثw�
W�.m;tw/#�Ck�}�Wת�la#�UN�4K$��뺽���wB�0�����1�fB�
����4�x��N|�R�&���5v�Bދʳ��ƈR�4C'Z�d@�X�}��
Y�ry�˼���5���4�X؜�"��jr�U�����2�����>t�U>%�a�Сl�
<�9� ��6:ʻ���f/s%�_�K��v�X��&
�0n�T������;#5T�'��D熯���ţ*�ӹ뱨߀!#F�7m�]_&�1��v���AtQ%��rl��|�;u*��xp���
��{�قw����a�;��/���w�N�Tzf-7�c�ۅ��-#/M2ĪB��[-!k���T;i�
Gjok~�t�Uo�籾�$�gI~A����מX3��Ǜ^
�C��Y��c��/������W�ؓ��n�����'U-Kb�f1�7=��p�x 0y�o��!X%�z�P|�ii����G�8�SP��Xg|�
�p�J]�N�Y=�m􃝁Ffd��� |)��8�|�f5��t���V81Z�+��7��Z���&�K���޷ QֺbvW̫�{���\����X9��*Kl���/<юYی���k��~��2M�����<�]'���,�y�a�7qx`�T�#�kt��^Ot�c���aR�!k�Rf���Duo�y�DŽ����Qi&Wz��2>��f����^ڗ
��5ģǬY1X�ӼQ*Ւ�u<���_������2=_��L\��Ǯ̡l����G�93��Kc�jM��Y{6\��NO�}�|���^��:�.O����q)�I͕?��j�1����W�r-Jq��%���͂��xԳ�n��w�z���
=1�/*��O֚���(o����NQ��li�졾g���e��k���P�3����R%��L�`de��E���,1�Gjl
�C���W�j�P���A�JZ��KKZ���W^摩�t���+��t	�DL~��r���;��c���ҤV�,h��ã��u���[N�������Mǂ���%h���7쓠�W�@"A��[yC�o�Q1q�Lo�VP���7(�*�Pk'E2�B]5,�"��((���5C���ſX`�+L��� �A.D
��<��@ՓGB拟L�T���d'Er�Bm5,���
y8$�km	�	�&�_L�H�//�(��WBLP��+�	�[��1*����Nt��D��T�C�ogs�e	��s%��H�xs��JL�$�!��`j�(M�C䄍���
�Ai��y-b�(L��Gy_-�|�R���O�F,;���z[��k��%y�0��6����`�x��׋T�f�S�����ʆf!��GԮ ��n��=�_�#�"������5]��Q���0U~̊�P��|֪^h��
��N)����÷�U!����\���dӃ�LD]P&��.R6���`(E>��6�Z�ɤ�`������nW`��=�3���c������d���\$�;{�����p9�ʘ	�pZ��������)��1��$1�$�A*|
�{9U�	�i�`�?�uXX6��^��Z�����m�A�@8�f��X����b���'ӄ�mjnF}ŖEN��h
t7g�:Y]�3$j]��'�e�l�l�b,l���G�s_EO{��A8×�Q%s��⓫���.>�r��ƭ�� ^�1,�,B֬��Z	��!cb3�H���H^���z�!�c����_0��
���Þ���S��u���q�>�b�fCi��ᇽԜL1��b�d�A��]߆P�&l��Ѵײ��/��|Yn�T���1��%W<~�uI�+W��?V��4Skg��C��i}�����L7����pS�T� �&��xc�#�j�o��sNB�M
��g��4J��̬z�[U�JT�4dͥǿZ�����Z����+ĺ��mS����8z=�JSn��5X5�w�I������G둙V�,���Ⱦf�[a�aqTO�n�)��X�Ie�����f��:�
��{�ܵ^�I��z͵8��ȡ�JY��|ӱ�oF�-�@nP�g� ��'7x��%jq[ +�-|+�e!|R>�-�T+���{[�^j���L�8R3Խ�`������,Qѻ�Jց,�V:4b��Y�i�&�է�aŝo|%�?��3qy�&+�7�@fֳ&Pӓ���)�{��׸�_;�����4PԛjV.ۿ$M�����F%���38�e���o��yy�[��F�4,��8}I���xr��1l����N��&�EmI
R��!y������-`��ehH2��;���U��H�K:q��#8�@���驷��T^�8?�ɇ�jX?\�Ooq����M�U�y�T�5oX[�r�(�����'Ǚ����WpJdۀ�.$:"�*��W�t�ʵ7W�g�[�P��|�}V;"3`�զ�Q�)�����,�~�/�ⴟ��ub	��='%GD��#��wT%�r�S�@��L�����
8[��ˬl���DVQ�a�tWb�G�\��jA��V����*3��c�����Vw��x_�+�L�7���!o���x�z9�"A�� �P�܀i���M�����>�~�e'�I��4�'�}y[��
�(�#K`��]�,��,�4I�.��r��X�)�T�t���뢗�kZ�O�tS�Ɉ����亐����ߝs�N,z~�ҏ��P��a��kY���'��&�O����$?�^��B+��$���#�=���r<��:Lk�IjN�LN���g�1��0�m|���0� xw��Y9��W�U�)%� )2�j���5�Q�|�hn�V�p�r0�5�{�PfV��J����r�*3�-�,�HI띍��_ϰU��U6}3�R�;롞�*;j�jR'���P��0�������=ɴ��~Vk�zs����>t��;*��Ԋ�8h�@��8;�gF(�0;�F��>�bW���R���0�g��5�|�Fbs��6��k��]�r�f�/l@�ar�w���\�]]E���Ŗ�>o=��i�y*��p��h
�]�f�5��zD,�8��aҌ�_;,r�HL�]ձeZ��"���ЌW�] �>P�

̲��W�x�T�-�ۢ�x��Ĕѵ��ɅlQ��Z"'8�A��3�`��l�\�����8ȾU�iYuy�����Yl��lcyԿΚF�u���A�.���4��Qv���	� ���7������*Z|�~F� Y(�5F�BD3))�#|�QX���iYp�����f�a™����%2�ȹ�-;
~��g�nջ]o1Y�)�G���G
��kC9E���Y-J|��Z-w.��`QI�&��[���2�U�)�>YV3+8��ĚMIF�%�M�ݻ8PW
i����&��z���v�qW=z;|���J�LbjnxsV�*`Z����|��:-�t����M����U�2�ߵU����k�㈎7��Nby�� 5~d��~�*M��l��G���UV�Q����.��Cdj��4�W���_~+���Q/��i���L�4^J�'n���l������[�ȑo3��nf�t_���槥��A�]�l�r�7�+�NaU��ꔶ�qD��YwU�7��g�ۊNsd�1�����l�M�Qy@
.���+�����ql�-�Ƚ;a����o��X�2��
vv�'CG��(�z���!�����47F�K�&[����kn���� �-y,s��S�e{�x�q7�͗M60Mr�";���&��G��2�����.��<����UJb��I�!xW���6�:)G�����QHe%
a{7�
�	y�Cp�,
��,�ƢE���@�HBհ��*
W%E`�0�}��vp�A_�>[~�R|�mR���s�W�`��ו�(t-ø4+�J�"6�Ow`ʏ���fy�&*r�KT&�0b���s�E^)l���	dE��G��R��h	�4��9�gbY�oh	��GE�ّ��~�j�I�xs�͌l��9ls"��%�5��|-U���&��FF�;��*�-���O�{��=n���X�p�t���>�,�ȊRfн���3��YAi[E�ʎ��U�*������x΂؛G�Aq�Y�c�+�$ؘG&:�|6��G����I=a�S�+�m��Q�9��F%6�N��%ƈ'F�#�g8���#פ�e��G�h�}�!��~���^#Oi~�VzB���[#���-
�7p�dM�/Z���oAX�q�����u��
�v�7�k���5g�	Y~leCu@l,���y֧_�m���Ҡ׀x|id�O⥇8�p�>���~����Ǡm���#�� �4�.��4]-K�
�H�|*_D��7R����8�\��za̍9l���6"�ۜ2Ԅ�!�ߥh�x�)�w�<ݠB��5?�]��k�l[��ԛ
#�CX�$[��..�5=>�W����W�E�yLG�C
�Bԍ�5�tӃ�N!~u��\��0��a��ʰx�N�Ni�d���KX���؟����̹�$��`�<#I�z-��"�ƞ�l�c
�^�G�V���ev��u��:@��>� K��ZPTE��+1hc����'}�^3d0�k�f%n�an�C�KA���z/�_�
�׹Ȧp��?�%�jxs}'��dž�QY<'��_$��HmK6%��*B7f惁��f��y~���p6�D�6r]<�a�R��%+��f��f̤U��NP����I n�lAe�]',$›}t^@����`�]���-��F��p���Ѧ'~��	�^��J��7�;��e�.NXښ[')����2�P/�h`űgJ�si	L⏋�0s�P<�b��<�C��w!�y�_�/�(��y��a�
�dAV_�@��$��)#�E;&~�Ї���9���[ 1�~�_�;�4��w!����C������e�Ԩ-�<��@�.����6BY�1.0�xV	+��Z�ir�6W�qJ-���hG,��*Xk��S	�gw�=<����㷱Fu�O@�u�j/�IG_�(�	̠BS�>�pzi�G]C6��z�5"�@�`y�Z�������,{�z֔i�b���)f祚 �	>9�D1 ��Lc�.���U�HBE�^Й���x�'�؜W���	��>�i�
m�z *Q.?a2�xGY������Bw�Tm&�`�q��j���!�1I�Q��5s¡{(�
$:��k�{�p��,Au�к�O'��յ�|�{X���1�Bi��e�-8�Pn5���‹{n�I���hJֹzn`%�a�'[�`��N�]G���/�@���o4�aJ���REڄ&M��LCKv
�b,���IZ��~S���{\��
�,��=��.?���u���� �ĥ�nO�jJ�mQ���8�֝:-���5U�h�T� *�>A��jf���M�л�hh�<�m�z�"�m��w�w�5�

���k'"�ɶLH����yu�vB�����H�4��+u�[���M#�:"�͈
A��
��"6_���Ƈ��Jw:cG%�H'��/�B�8y����-����w7��8N7���V?�Z
��hl?UE-������t�h��bK�R
��� �밭��"c!�Ƅ>���D�2�A��&
�pA����T��jǒ*KZ���u��:�Hu��Ux1oL���c@�a�%�����޸#���4i���
u,���Y_���Y"5���p¨�062E4�4�D'�#u��U������5��$�Y�X���z�J�yT��
څ���8�.��H4���dw�mi��K�~�
��N�/�4l�������6�&[~a��U�_�A�#:�ї(8����;zq�?\�W��2��d�� ��2NRe����-c�Ku
�YM�7�,�KhU��4�Buĥ�%�c�"��Re3ײ�t�V��皋6�<,��EY�S%%G`4�s#*80�MC��� u/�e8z�vH�e#L7�0�Ph�O��_`]�t��f&�J��d�E'����O��	s�N-vI�>�8a�O��P�pT���4��I3"�#w���h��p����.ADz�T��2
��G���%z�q	��Y��7����C~��OP�K���MmC���ϓ�z3����G�XP�+�rb�wR�h�D�tr�_�矞�\NpHFc�&��C%�v4�۲L�W'���G��gw�O�����Ks�{8tNBT~C�\�e�����7�$"b�>������F�7�!��-� �`Le�|'�]"_�'/���z����C�������c�[�i��e�� ���x1n5��8W�~

������Ũ�>����շ�#�r���߽f0Y��;ѣ�����H����E�"Fͷ�>fE�5G�-�^���ch���&"�}B�&P[Wi�W�?������(����Ր
<o��b�F'��^,�?:S�\F>ԹڢCx3�r��T�B�>D����ģH�,�_���TaC�h*�{t�i���Q|��V�#ic�L?dE֪�ڎ����]����8!��)t.��ѩ)T0K�T�V��ǩ0�~��7�F,%݇8I�fR0��$����dr���-���=z��y�Ɂ�q�u%�-��V�P`�O� �#e@�L�˖�<q���1�]�uh5.��;���
=������U�Ӌ+�A��T\+�i��]R|.,@(���4DuE�F�kC�.ܐPyqSbA�x����"��L3,�C+����,~ǭVj��"��0u��vw��Bqc���#�6B��ٟ�h�){��A��N�9�g��{�{�Զ%�q���9��k�c67BSN?�{�A�XE�S�t�Z�T|�qz�7�0ٵ��������?��3X��>��g��y�%$�tO�4S����-dxƨlũA�ʕ�*�c$IB	�/0Ȫ/a9H�a�U�!�PW����>^6��k<Γ�V]T���`
�\+�`��T��.�����8���̡�)|s̋��ȶu�Qe�ly���z$I�t4�ݨ��dI����m�i�%����x����r|2;��o�	�%	H�V�3Q�_�;�-����V�Y]���Ս
|-��.��U�Lr����/�
S9�oE�K�6\B���V���h�^�'�d4�)՝��6�4&M�;,�Xo>�]����d�k1m�Mi=MZǩ���^�b���DsEΒ8������ȉ��4�
�0z��Д>$�^��k�G
�\���Y�ωj���3�e.�\��):�n�b���\���ʚ��5�3��ά\���&h�ʊ�!m�N��:���+�K��O�K��1CM���Qؼ�
'P����'X!�bm�/�:Ķ5��:#���s⊐
t�C�F�h�A�+�,0�Qo�~�~��~*�b	1���9s��)�2`5��X�BȨ�v_�N�DU
��u�#�cq�U���?�%!0t��f �9
JJ�4�>i����[�#R�N��x�Z�ڴlK�]�j�GDg����:�`�rFqN_����
��\Z��o=�u�^���U��vG�޺���l��Z@���g�FF�"�>T!$c-n�kV��9�
���/�2K�P*��`I�.�z*+��.Y���u�G�O����c!�_�H��y,1㝥�[�%����7DuM t=>5T�_���ɑP}�!�lC=^��	����x�\Ȥ����X+ _<Bhؕ��A0)҂�s������>�"����}D��i�_�6�'$�l~@RZ�m��q��Hf{l�%A_hH��E���u��D�+x�*���1���`�l\��#2��m�vВ�͕S�+�f%jU�T�P3ys��AE���@��'b�M�{5a����5߫�j{�m9�Gg^	;���T��D�}��e�X�2b�E�|:#�T��e���I���mF\�e!�/~xb�ʿ���z�v"fW_U&����ge^@�lLo��%�|�m�\���sۑ,c����
ï���(�!|��s5�Q�A����)hIh:�9�#�?��Uߛ���ԃg�R2�no8�eh��P���0��G��.��ҹXЊ-���6^:�uF}"��P�e[���#в�?��O5��=����b4�r�+9�D�$���r�&������.Xcr��%V��~хGSc�v7��@zOְ�����<���6����xO$=hJ����I�W��PH���*���SF��_u�DO�r��h��¼�]����F�m�� �	��ֳ]n�M%��o٭���c��\�\��t"c*|�-�,S�ܬ}!'{Nonj��6�z��x
����
�$T��X������"�T.�"��G�T�0k�Dx��#��$�Fm�${J��t��w�(���MB2�� c(����"JU�G}�C��)Y /���Ӊ�h	��B��B	�-I7ATt�r7��(�3�>�� E�!�UN33'�갴�����5RȨ�O�А���.�.ɸ�X`���B>�gd�[�(N&j�0�C37�'Њ��/�|�ܬ;M��t�WiGl����K2aQ7��1.;$H
fފ�!X�i��d� �7I�4�ޓ�g^�P�2�?�Lﴲ��S��ũIW�W.;���}怹�9i����|�=SB�/����gi��^S��+�ؚj���s��~�+w�ʧ?�D��%�4mY���һ�C`�G `�{����
ce�J�>Y���L��@u3,��	"=��ɇ�nF]6ƕ2������ôc��4b�c��<3�jP2��wM��ʴ�' �"�Q2+�a���Gj��i��|� �B�%\1Pt��a�ԙ3��N�HfV��ʨa�u
��\3�;,��_p�3����H���t�JRh]��Kve���Ϟ�T��$w8�{2'��
���xMc�/k
�
X����v�c�x	򩘰�U���x&,��!��M���XV��J�Z.Ah6S�(��үD<��c�~�.R�҈I�o��1��^IaB���b�M�4�=tq���`�:/^!�(�_f
����M��2^1�C	v��B���G�G`��B��a���4�p&��¤e��[�H�·;�}G�"m.���H{V���;�@s�nf�s����=�|w��o��b���4�QSe��𩒴ձqV&EX�͵����ѭ�apw���)�����7�����>�K�{�_K��E=o��x/5b&g�= ��9TK���o���L��Ә,x�1�
��~9���,���>P�=�$(�Iڈ��Ҵǟ��c�>X1>�����S��@����,5FI�[�t�NߨL,���m����u�œ����Y���PncFo���j S���[::����[b�%�
�s����I�+���xb "�B�1���F����W�I!I����:��[�(��W���X'��eč�G`��m��al�(�,�U`���A8�]>�/�������W{�drh�K@�Z�N��*�J 
���-�t���i��ܪX1�O$���Q��y�k�c[�l��p�S�y4���� G�U��%4��A���+Wp&���x���vS$��ܟd\�z�g��e��o����n�~�0<�.��ij/1m*!�X0�jM
2X蠣�:�D.C��6��;bG�5ċoe�VP�G�]n��c2��f�����h�O��KI;s�R��� ��8eO	Ng�S&����?XӾȹ�)����\�!r�?u�+%�3��r�kY�i~�ہ`�*X�M�L��;�;�w�\G�|�_AU�Q� �5��7��[ᝊG<k�N�����������F����"L�hi�y;�oD,��L�H1Fh����wP�ju��.���2
�6�6<[�bX��\6�RTa���1�+g���8� ��ɚo�x��r���ݛ>zV��֬���`�/N�PJ����tTD�̱��;{R����E���`V�v�Zl/�]�-ѧ/�I�����,�pn
�pW6�ޮL�-����G��f���p3r�'��	x$��߆�^6���ת��Kr�K�h�,���S�U=ٖ���Cn܅��qbe��3/w�)D��i�Ö��/��c�b�a��X9A{��}_W����b�S�v�^^�t���FX��v��g�:^²�JP�Kq+1�8��B0�w����ʋ�m�\1�“�����WXR�F1�1}�\^����4�a4��s�m��ȡ"�O1�(�*7u�ض��I�xQx��<x�G�Y�e/_���O/�<��?A����j$�'D��O�1���f"�é\]*��U����w/��T���{aa�|PV��\��$'�R+z-�C[������铝5�Es���y(��~F����"��9YS��]���z[�PA��2Y�а�O	��X�G�@{�h Ý�@�#��S��|XP��(Vi�I>f��QXv�L𙁏����h�J�->>A�����y���_��~�sh��&g0��+t��x�a�q+P�O|3���]�h��6�z-f�~_�{IΧr�
�z���JY��d�aU��J�c�J�XSD�Rǫ�>.�}�N�wF����K�q+0t�q��I_0���]b��=�'48�����"�'���-�1�AF�ԡZ�5��59rG�9m�+�DAM��M��*�ԑ����}y܎�"�'�pn�-EEA�����rF��
�/3G����)Hg��4RRy4G)j�M�"æ~��<r�?�W��x��:y�Q�{��ꑆ8S�%\�B�*TG8C
�iE�9��A�tn�wI�oM��������"h&E���x�����t\
��D+�$B�LC�,��3���BD�1�B�	�V���G��g@��:<�jGG�A��u��d�(1�[+�A��g<�����Pr ��ÆZ���ױ������YbnΤN��gq�p�!Y�wi�]�JY�Ջbp��pZ3B�U��8)�c* :C�c��kS�
I��zFMC�.���>[�Gm��cB}�/�kVk�Ώ/{��n?�:���t���a'\��'��{�k�]�B�&eU�Ϧ]�E��+�!	��|�^<�\ݤq�@2�qI����f	�C����l�x�!��Q	lpHld_1��������H�A���Z7m�����3C�U�6�9��DURF�<��_���Ta��M��*$d0q���%��&���ьu�w���4�EG���|-HkL@����ס���-�{!���!���t�>�&+�}Y�L�9�F���v�����.}���~��P�v	���v?�;�vO�a��`a8$w���u�B�'�j�]�Lўd�I-Lo�Bh��Eo��!�Of����l��Nu�ʌ
w��y7�V�:?���=��Wo�
�ͥ�9��D�@y'����d�����骷U�γas��낂zS�נ
�qwB�孧��۵!K�6H��|�R{K�*��=�쎮y7¹x��	^��8���[G�6�v�EԤ��~�e	Wʜ���ߪ`'7+�P�x�mI�.���m�dY4������Q�JF�dӴY��p�X��V켽Md�����p�;j	�����#�)��̷�}��?��_ ����ת]l����c�	K�O	L]�W�p����cǤU#Si�K�E�
�0$�Ҍ7�4F�	�:ƌ��ex��)h&^2�J<V��UJ�0{>Ű�A��~.WU�r�$�= �f����8�K�E�Gc���}���A;xg�Iz�1�
��X�I�}X������_U���LfIP���g�5�n���5������@��
��Y����g�Hl��I5�r)���5�v���ߎ�p�'?]�pƣ4�}5M�
c
�DnI�7��{��C�����i5+*_�
��=�F��]��D*�����n�!^^.�^+*����M11��-OR^mm��4�N�:����B�{5�~�r\ݠNbF�\K�
�f���<�����ם��3�$��o����W_��W��,��S�`yc/�%���R`6f�g�,�Y}֎��]\>d!
��B�> Nk���k^8��4�j_�vDHz[��J�*fo1.Fj��yJ�Bb���2ۅg�V����]zl
��k���0Cd�Ө٤|vpo7�>m�-c5Dj����4CG��Ǩ�{��ސ����I�-��~��ǼȉܑSy}������/���uDqc���Św
����{���Ⓒt\R�������v6j vl�s����˂e�: ˩�&�ڥ�
�s>�5��=��>M���b�N�$��m_�z3��IY�6ÃG��$P�3����7ĢCUQ�:�l%
Nb�^'7�@jZv3@P�R8�`_�)��Ê%��j?!���̠�{4/�h{��+�X>(H�Mà���o7Z���������&-�������zU�2HjX���?�a��#�]�ySVBU]B�N�\'�7���Q�,.�F5I<=;ww�p.�����F�N�!�XIW&
j�i��
��v`���o���b@@�~l+�n�����P�~L ����șpv�zBI�[��N'�
jj�1l�K]�x��*�ld�V��K}�;B���)���1Ko��p���i>���i��H��A��g}ڊ�~�u�)�l�sD�iu8��KFI�MXp�#�*I�,����|W�rg$�*�SI�/�•�XTQ�ˡ!���B�ä'|O5��e6�@�.�e`~"+Mp�����mp"�@u3�N���;ClFT|Q(Fh7
��o�SL]S�$�� �w�T;�#�Qf�j���EJ���%!I�z�bL�b�/��w��&��C.ut����`c��]ps�;|?����2�9��9
KLѺ�g��8�����Sg#/�M��pW0��V�}줄ARϊ�`���*�Oݏ�R�N���vZ��ԝ-t�
�¤�1�G:Wl���#r���i���=Ͻ�d*�
7������U���w���4�V9Ȯ�\�m�ё�;�d�$�kpb*˔g�W7��N.n_S~��03d�j�֫�����=���:�&��O�� I�^�fڬf��f�|v<���@�+m�
�i�o'4s�
c�ߕ��\{d����.J?B�E���s���B�ǖJ}c,ɭr�\&�q ��g0����
=�T�>"�`<��2*��G��2�K��^v�[<��J$*g^�@i�IݜVE5�<7��՞e�I��ri;��10;F�Qܵ��=��9^
0�WE�C�H;��P Lq�2\:�1t&n�9�����+DZ,��i���`Ế��(�nY�{�E�x};"G�K�ܸ�~;/��V	�Ӓ!�#ӴM׼��(�˚+���t�@!S��1��X�����Eo�4]�uݫKv�ݎ_ˀs����1R��P��n뮮_z�H��DI>�zved��y��х�؎�\�Y�J>��yņ�WA.��P���3��Y�Y�o'���x��r$z�W�tlzn3�S��;����5&�Y�<�KW�.���b
��P�D�bCh]bU8|(ى�Le���כ
Hӻ��;?o{.1����nMP�A�>.j���s�Y�5��n�N,�e��������/�ZȾ��~���\ݻ���2�~3N�N��euU��b��1|iS芋{u���z[g���)�:IP�>w�4��O���?٭�2P~�t��a�N��o�;=��}���ˋ4������b�}��K_{�����b>z�����b)*.��}�K%h�ї��E�4%)*�tE���u��+i���s�ʸGܡ�`��]��.1̂�A#�aT9�v�,E~]Rg�8��T],U��^��[�8PE6ɝ2klO�a>x>��j�T`�<x�׆�yG����2_M���)�x¦QW�p�m܀��	�"T2t�PT��&3q
EP����s /-K������|c��ߐT��BԒ������*���dcf� �/`�3}�;�̷A��܅Sʉ��X�fcO_P!p#~I9\�}��#���8��o�<�ީ~|ly�&Sbr1�[�ж."ڢ�y�<r�,��T����oJ�-7���|,�!�g��-�x�}p>7���]�O�LH��<$��6�f�,өwK��v��O�Z>,�����v�S_ؼ='O��-<���Pɉ���'#C�O(wY�K����w�"�@�
c����d�zl�xF:��z�_n�A�?��kEO���"�ud� q����)�$r�8j�39b��簒�!�k��t�E��ֆ�/`����^r9���~8�~�$��Ѓ3 ��W��>c��tg�u7�ju�B
�4��eT띧I��'�����℩f��4*v���,��aJ�*�m���Ѫ���W*z�����}u]Pm�K*�/���NH�>���IH�E��˕x³��%�]�ѳ����vȘz9�Դ�3y>@�W>w�p1b2��۪��L6H�\���I���ӎ��A(���~�'iS�5W�jd�~z�@P;�"�	K�®Y���`��u����T���^�&
��O@�Q��SH}���>_��H�T8�4�?��(�#�����)�d�@	i���pP�"T3�����,9}�!�GY?K��O�m�\�0��T��5+暡���N
�mA�֔�&^56V��8.S��B�,AoNY�/U�Nf��*i�r$�䓅�AԙhU�uA��n�*�6���D��{�cS�&�K�2�M�\�q�3�,�3�e��/yXAc�1@x[aJ��C&���.F��3]�7�u9�ވ�x5�r[���^\��;��qK���]N��P�6T�Tt�su�{��?B��Rn����>�Q67�sp�8
��J���a�%'T5��'��O�]�}��I����1�F|�&�+6ԃ8S�' �S|�[>$%Ed�%�}X�+<*›�8.�5�\��t���{��c
����z5D��>Z�
-4�бh~0�v�س����}��${�с��j|n.&I|�ޜ��8Rs�ĨK�V;������]�&k�f�ݽ��>�h�hk��<u(ys���4Kx���鿸�.�F!E��J"hƃR2�-s(l+˸�6���'g�%3�T۸��Pm��]�vfP��7��w��ҍy2�sC�dH��ap��1��t��f��}�5T4Xj2	�Ld�˩~ƛP�%���D�NU� )ƶ%4�8_�I��� �[�$�Ԇ+8,J^���^c�ͨ�w�X���Y���zC�+�Gnn	�[�����~���%	ĴH�l�����2,s#>�;���N�5�Оm�o�F��Jr���ÉC�Ƶ+������ M�M��y�ԭ]A��d)9
"i2;.�O��
<�B6��1�E5�BY�F�'#~�0vF�A5i1nriؑ����M͚�4[/]��<�Ifu(��M�ǡgas(�hL�m�N��-���F9�"�55=�J"�;NI�HD�����P*JQ*{��2�D���]*:-ʖ���'�!<��&����i�
�����,4���t+���U,�.��w�����a�-k�vN�>5
x��;�W��Sc���Ӫ�Ry��JIƩ�+�@W�QCX����SG�
�Χy�SH�gDx�P��7< �,'űe'��E�-��σ�t�Q0Vu�Yhć���՞��9B�l4��|��R���#�W�B]t�R[>-H/<]S����B����r�p��ʝ����?�k,%f�����?��(Rnb�\	�.8�6��"�A�J�Nxa���ĕ�Ȉik(
�M͒p��F�]��E�DE���)A� r�Ld�E+Ka��C���OLT��R��]���ё̓��O ���v�Y8m(��i9<@�m�:��I<���4S3�^��띸�+*�+�8W�4�ӹ�<�!�)h��8q;\���/�b�d�Q���NU����(� |�I�2`陳�*i�y�/��h�I�=4g�	,�O��>�h*��0�WXm���M���u��w���DY�}���?��&��J��H�����Ja:�y�M�aȗX;�p��n�WR5o�yX�a��0,�МAߐ����z�ŸjU�x�rU�_��j�O�RA��Ua>�m�fO�"��)�"\�?�P�N�n
��GL�ʾ��T�!\R�D��R���6Z�\FIp��IQP!��G3(�{xz�hԿ1�E[N�GO&�k��:_v4�Ɖ-sj�(�ytwhl5�˒�Y%S��9�?{G��/&>�#��>�#ȧfK9MrQ��/ד5D�E�A��6�MR���[�i��L
ᥐ�͆t7�X�Mb�T�iX�P�	�Uk��bo���@ ?�1͂�f����������|cJ��#������Ra�����}�Kӌ����V���P�%�:���Vq
�����"�������v< !',�>�w��,!r���v�zO����MN�I�|@�5P�/c����*��)�Rv���)}�r�iAI�|#v+���'9���SX X��]��!���&<e���e�]�61eW�8�g�
x�����翕y��c�G�ɮ�ӗ��3�n�6s��"[
� ��-��3���60��&��Zr3UTc�a�2�.6�!�y��x̪�1Z���P��qu����6Z�\�P�j3�N�Q���ف�:��oT�f���B�hU�qEW�SOj�)���.u�u���Rtx�+^I����ʡ�}8��������2�ޕcxA��2#���y?�F	�:@��U7D
�f���n�Q��6q��'r)���#'��BW(�1�R<ѸL�h��!Az�0W�����_�k�p�ں�#��=�O�>H����έ���&��uh�kp���D��,��`�����EҪ9/��sZ��:����ST�~�)&k*���"�p�H:����5m͡�	�l=���
t��Y�=;�?����5�F�i2i=�k�������ݡ��џ˞e�	&�t����h'z�x!L>�ú���?��eʴT9o�B_�>$�.r���K���(X��7�vj��,��r�M�*�ʖ�����d��#l�%↵���$1p	�t���o�
{�<z�0�ebI*��ޢKCn�
�h$tj�[���Ui��΢?U�[�f1�u}m@ž�#G�;h%�m�� �jZ���g���t��9U������� 	� �Z��E�쇙�g+����|���	�9L�0�.�ma�]V���HK-�ӮsQ�)�L#;?���j�e!�sW�����v�R�QI�]t�7�ˉ�;L�v3���� 1I$5��C>.���e�"к����2f�H#Pr��9��}:�R~'�4p��_����8�))����$GUl��$��3�D6.�Öq���]:���;z��1?��E'zo<8k�0F�
5i&⺔�J
�wz�k��Y"��e�s�x�x����
J}[\�e�{<:��9��P�f�����
po�Doc}�2&)jL&�-�e1=C�nC�8i�}jZ�/��Բ�_<q �
�\"�q��Ѱ:t�CϚ�h�A=���~�.��P]�iԓ�i\^&fO�r
�
�[
�bt�=���̎?�
:�,���5��=�j7����;{�6'9��:�l�g.��:,�žM;9z�=��8�^�2z��8^�&����i�E��s&+����S�0�3�;b�����b$Ȟ�2���,e��uOc�θ��y��v�s�f�1�_1��%gY倧��Kj�K�߄GF�M����(�b,�`�}-�H�{�}�W#N�߼��Aƾ��U��s9�3r�hV��j��|r�m�Q'l���CI�vg.{����j��x�>p��OK�EH��6ɖX��|đ��Il��W����0�;!
@w�-�z�BN^C�����ʘ�SQsW�L������Z��d�q����f$p������%
	�!�O+��F�z>�L}*�0u��$��:��<��*L2�t�P��3V=������� ���VU+���1�i�D�u�\m�0��g���Im�D�֑��Q�p�ِ
Z���d�ֽ�(��M�B�	)�6,lpM���U"X�{L+�\��ݮ��������+��r�=5�.]���"�O��S;w�'�'07&	)&����/������ɬ�eu?g����ӣ蝧!�ys��^y�]�~����8[/'f~�W)͇c���Mx��I�ɩǠ�@����OT�ƽ��.�7����@й�p�W�4���C��շ���ݛ9�8�ob�J>�h��s��9�>��8o�UC/��$�g�8���m����óH@�=К�G�
��(q��uQ�i2��ݳ�ff��#�{��#K��W�˭j��Q8�����ޖ2���aH�(��z�s�1����sH���n�NΓ,��dߑ��z�c�>"���	:��uq8��>��F�Tچ����؉�(��T��a��a����xb����}&^��f�����x[0,�PjE�p��0pb#N��
��\Sh����R�-ӊ�‚��Oi[��j�td���%K5T`���#l�̀���o	��A]dqJ��B=��L6�����k~�F�%+��;�P|@v�p(v.?rSF��9�u|�/�m��S�b��N茫D�2�2 �b�]'7ս�/���	����̗BJl�;�Yo�_��ZX�!�x���?�T�X�D�;����FH����x[�W�A���w���:=x�h��9bJ@s֍h����O�}�/���N�)�BӘ���f��z�aO��q���P״z-���n�m猺Y%D%�91FaP�m�8�� vA@n[�;8��Y7����}d岳D�p�@G�/P�1	��4�K�k�Â�Bt�.�w�`�����l�����Jx_L���tp���?Mbz�L��E�1�.�����:M������U(z���*y���3�8V�S�d��H֢�0�U�Nn�\?`�'�}�7���f‡R߈�L�96�������yq�sG��C�y����Zɵ�qPS
Y�V����e����[rE(ڢ�]}���-�LÅ}�>�u��щ�t��!���4���q8nQi���~��K�3�To;υ��NU-�Q-��BE�\���$S��.��g�$S�دV��������?
�� �@���2���%Xo�����AMI��l�rK�:;1]�W�KзG��T�c�T�꼣�Q0�uE�Mu���;�Y��)�d��&k�쏻���g�/��h���Թ��[�R�IjЩ��c
ϳI�q�x��8T�γV0q���W�O�5�Eb�m��G��G2
s�i>ހ�X��n��ߨa��d,s�r�q�v�%I5Q�usO��2�,�̑c���<���y��v�.�Q��M�tˌ���xu��s��G�k�[n���3��e��2�w𹙫�t���5T|�����[3,y�7�/�R�;:�Q�A�KU���j��Y�1YfRa�.&au����<�'�����Q7w㥮'��h����08�O#�ZV�������9a�u`��z�f�}t��ݸ��J]�{��ڸ�S$���K^h������AV�-�< ckA����A��}DB�W�o^�BLr���>�N
i��4���”�6�c����S�u�H�I�C��i��Ͷ���qÛn/~�gv����<�)�ex1�'������ulDC�f��d�e�M�J�7ݰa��j�Sd/�i6��DVP�"e觕{����f�W�]��^!�Z���h�3}¬
Z2^�?m�]*�aq��>*X�-��%�7@��@�XE��yqԫ�������N�a�·�\#9��)A`���x��Ę�X���z$#��a�8P��]���Ϫ��J����GA+�Z~�Ɉ��'��5����
+��:�P�I!"���I#����Kp��䔺ﲺg���
�u�l��Y����X��N�9Q�G���a���U^�tq�el=*�u�P�V.��k����6hZ�z����{�#�5���D�/�7Nٷ�»��Rr3k��oGO��y#F+{1u�Gj/!�GS�wQߓ��ܭ#���gG�v���ˇ��5Ԛ��9��>�s�Z>ͯ�5�f��U;gL����1J��L�$�k!g(�I� ��ɛ�,�O�~�������E��E�<�CPp|l�|�L�ku�QPt�h^�x
�2��JԌ櫲ܴ]A��1+�p�-�.��W��k�2jck$|�����O)��R����&����U�F���?4�1g���oY!���S�%Z5|�B��	�p�}�b@} �!Ñt�
�����7�H�D��h엜��y"d-�B,&
"1&(Im��B}P�1!<{���cd�
�qMHL���c5�8B=��ET�v��\�Z2:U5z�(��uZ�nb��|nD�A�&F��c
"�"���M�S#3u�����-�{����oĩ�/�ֲ!G��N!�Vod�hxF�Si$�~>M�
wN��2�|���c��hcs�N���|�D�)tѼ6N<��)j���m�na��@�S�@��N1g���[�A?��yY ����y$�O�O]ȅ�$�G�J�-����!�!8X��0{�����k0;�:Y�tF-�(xt@�_�?�:՝���?��Y}�&���Ћ�~O*�T���6�W">WID%���Ub�K���x�Vɓ0Z�܂�u�5�w�.l!��Y-��G���s�Qs�9Ta���ۓ�%x_���(���#$g,G��ٮ����J�>S|O���K�>���3U��bQ	=p�w
��3�/N����Yxm���)�:�-�_���ú��p6<���3{���=���q�'C��,n���QŜ�����#�CI,V'�����+B!k�~�L�o�{Z�vz�%�v�������#I,v^�"NOگ��/�^h�&V���n@�����S=��6 � ��*�뵅
�ȇm��	s�j�i���҅^2�҃�CQ����]�|��C{�*��R�D8bc�8�� 
�L�B("�:?��T	1��M"PE�@������d��!j���(�@� �qпI�I}�"��Xv(�5�mD.jw�|�I&"H:L�Ag���D�A�}>n�
f��]3�6�`�Rq�T�É�q��	�'b2��D��L$i�M(w7�ă�-!.r�4K��{"g��āBM%���J1�	��D��10�DȠ��u��?~61�w�~����S���z}�΍A�4��{[p}h��_�����?��7I�(�[\v�?f��:v�"��0͟0�j�52�'��m��/Y��l��;�ܭR,�˛���/$�2�S�����J?�?z�V������.�
wOF2��~���D��|�h`�HB	�<
��l���F�l6$� �" �"[�B��:�m����d7�����9������Z�ېtީQ���cl���VU',F������}�DlzR��-�y�
�B�o]�d��"f�D��a#�R��,)��݅"�ȡpg-b$�۽3gj{M9V8���A��Y���x�N]�U�[���;"�q�G����(!`�[��v�B��*��k�%4g�bx#ʖ��I�O���>�}��1�����I��=L�v	k<�ؘ��VA��aD|��~|p�%w���w��>I�a��Q1\��������F?�>;BO�3n4���)�r2af��ٴ���yN�Hy�����zi��X�i��u��+y��U[�dU��~��i�D������○�۹�L,
g�;����Q�[N�z/���ԯ�]U�n�0�<�l��3>�R�թ���1�0q�(�M*Y��\��L���-�+��b7lhEVp5V����SS�)�š^��E��%F1���_]x�*S�S�R@�X�) ��`��Vb��q���C|���z����P�ВD�dK*
Q�%��<�O?I����N`;(���?���;bK�,۲e�{y8Ӿ��s��y��&�.g	�����>I�=�s���S�u�NT(%�T)�'2�D��	1(A@TBEe��֍RQ�(y6���9��ƂE�`Ū�ܨ�)6mF��կ�	����I6~B��#R�uH�>��,)$i�W7}��/��dv���4T,0�b*>��jTh��׊Sh���fǬ ��P��d�
t^:Ѧ�S�f\�z�̙Z���(T�r9�u�R�%��Ό����k�Ƽ.�_���%`���߰c�m��N볕�'�(N&Sꖮ+��Ϗ�#x��v����!:ٽ�L�!���ﹻ3KָdC�-�8<ap�IvȐ�� �e��������k:�Y�8#P͕�HG�Wpy[L�6B����
��.��E��H P��0�)�4xꚲ ����9MOt��*���ƃ��檯�C�*����o��Nvv�=7�9\~��1�l
I ������r��*�pB��ܤeaa��@�/s���QHb�}���>$��y�5��4R#�@m�f�7ϻiT�{�;z"œ3J�m� ��f�����Ġ�a�Ԍw�4H;�4���T��|�~h��&�X�GO�,������O�@��5���9���!��x��Mo|Hؖ%5c^�ۄ����tR�C��.����9@4lYyC����0�2�λU›�	�jYS^�����J4
2����J_%9�#€��\���Y��9Cveu�=��(?��������
[��IE<k��	 �QL�y��U���\x3�WȰ��p�EI��j�ˍC4n��Q��t��#���o%���]�t�U�>�I�=�I2�{U����Bա�.�]��M2v�H����C!\I�"`b�9��
�1��[ӰE��n�o/��I���uꟻzQ��o���k`��k��e�pY0�@�~�te�G� �뤋��+:.���έK�h������_�0#�҈(�$�qX{w\���:�N�,�Mp	��3w)T!��p�\������+�8�ma�tnn�a�L�__�OU���@��}J)J:Α˘:�[��0�DP5���)�
[r{im���������mRfY[!���L!I��v�mR���b�u�k���{�:�+��(7=��j��#t�V��\�j%���-3�
�t1	0���������љz[Sν�ʹ��9c3���CB��2 f��_}��7)�����e��-	nʁ�@(����i��tb� 
��1�nv�@R�>�(�����Э�%ŕN�p=��tU�)T�9���8�����9�#�w�
r��م����l�l���/i�OD�d�h�H	�~��+���0�?���z�G�F2����xp-�m^�
�q��B��B��ȧ��+�m��t��D){��і3�uS�_�l{r��4�P^�����
��B�?��Zۗ���3�o�F	&B����M���ܤ4:��|2��ʛI����U�:���U������(�}Ҿ�ED��AdD���������\�AD�o�߯>%�*�_�"�C�\D)�Pa��� �9�ge(~�~�^ �q��� ��sN'&5�`	R�/c�:ߏ�Tt���Z=^;�^K>��l�l��:��(w�L�w��'�f,M$!m�~�;>�,�Q�k �V���!fA�=��+��
��$a��@�OD��8q�(�I��#���.���vǟy�I�����[��M�$0���0����lc�%5鱔�"Ԇ�7��2�٘cWHU�FV�V��,�y�٤�p�
����cLB����As�����w��߂��ip)�r��3ٺ]�,W����\�����ϵ�o�n��g�ד�--%��r��'��V�p� ���:5�i�.\��jD�5H�]w���<�g�k/�6��Ѕҵ>I��K`̯>*�Y���fOE?���#l��@Bp��8�x
��}\4@.a�v��U���A�\-,��mشeێ]{�8t��9�]p�%�]q�5׽�[�ҪM���t�ѫ��d�Xmv�ӥ�=*���.>?���.����RZ���R}�q�5�@��,O ��*��`��.�/�\(���������/�H�ҙl._(�)T��d��(�������G Qhl.��!
K.�|Bb�d�J�)W�R�(�bĊ/A�$�R�BK�oаu��l9#�1�xSH�5�z�Y�1
t�(�W�B�rX!��hot|h�o��3�N(6��Y��_�M�;U��,g֕��wp>;XB{���}�`���8'91�c�ўȉ����C�� ��R��0��T��v~^�������|�n����{�Pu˛��y���W�r��c���Ո[����{��d�0�D��R��l������	���S�`��`t�BvWt���MXey7��v���l�=��g���b��T��0�O�
c�}(+�u�%�E�����]�)����âg��vJFt|G9/Y�����K�'�,2���[>�`#/x(	�儽�Ӹ���*E8��T���e���5Ӟ���I��s(���9������ﱅMĶs���snxD�鞡�����{��K̼��+r�����7�>�0�kx�C/�(DMQ�e�GIp<%9i��S�q)��_i��!��B�W�1�.`�g��1?pK~�Ě4��@)#�Z0�p���H�)6^e*MU�Z��a����.w?�]M��F�v����VjTw�f�Fg���-&&m���.���P�u)6vLͶ������ѱ7�����]�˾7��6��f4۬6��a�lA�-�%��lȯ��b�y��'d~�YP"�XX�"X��,F�Ro�Y�w��r捊LG�y��I0Gws�eS�M]�
5�Ԩ�П���ȈV��u)�������	�!
q����أ'Q�w�L�u3���wó���j��"	�ҝ��͉2�V>��T��E�<�E�2���:šZ4�a�X1�Y\W��g:f=����x���쭝������W[�ѫn��y����l&�y �F�!	������@��8!�Y��T;A
�2���,dk���۠9 Ҷ�l���N�D�����#�W0
�K������� M�%bE��	#IJ�T��0���n�=�>���C7�V�A}��i �)O4�[@��8R�!���J�Գ�❲!�o��(v��$V8�ocB�ćɠ�"�x2��Mb=�c��:[\�@�#[�x?�f:�ڱ��%"���'�k:R�
�/10�l�@3�?��>�檇R&��d�xa6Y�H���$TjJ�y;�]�eL
�!z��©|K��k�yΌw����V7�5���d���z�L�q������I���"�EjhN\׸h�%��z=�B/!M?�6-�LoS�P���-C%Z [>��
	�&%�ǸyG��&;F:\<� ���I��Px���"R1�D��҄r�����wTi��z�N����F�u^�}=�n4`ޮ�_��$2�r}�U�1�B/���ë��KL�6U~�,ڶL"�$�AL�$~��"=�����S�\8j:fG�	o� �FQ
��$� � ,r�D#�A'A�o�&����u�!3S��}}�찷g��&?W����f�^i�����j�q��ud���,M�·ز���bV�''
A�AAq8.�.�}�t9"�.�SmY���8�fjk���^�Z"�"�9�
�\�P�m��IMW�wА�5��f� ��Ћ�Og������`%-L��z8�=2��rc����I��t�7�m�l�\�W����5�1���!�mym�+;^�Z�8�q���Ooq��^�%�
$�e��f�(�rH��w���Uu������+�f�؎܈����K/b)�}�q�FZ���h(����;v-�j�}���S��X��'��VYCMw���Wo�c�L��]��PV�5�}�e7>�tN
��YƎ۩�����t�5���L7ayS��s���ì�VLa/f��U[��6َ���95��6l>���*n2᪄��P׌&	j���4�7���UM��zm��&fZY�]PG�Ff;ӥ�|q9�L��PD�S~\����\!a�a��L���F��dǁ ��e5H&�dH�N�C�?ЖN�[j6]���fwo�H��,^��rX$X�Y
Ydz��p\�ޖJ^���_���}�S�4�|(Wr؈*䑸��Js����H��!A.�>9��^��aT��߳S��0���8k8�`0d�Ǹ�$��*�j�ϢgltsW���"�z{���`P0�Q;�E��=�^�>�a����)�]m��L҈�n	��! R�\_G"l���Hnz��Az<���љ�RI�)�*oTI��N�D����&B�HA��1�fg���
=/HDLB
Z�W�,�l*��P���3ȱ�V�l�dw�e��!j~n񼹼�!_�Š�
n��:��N:��.�M�e\u�&�_
�
�
��Х��O(�ܕ�e�����8�G1��{��,���^��:u��Q;S���԰k����o��f��"W��6���@m�0$R�W�1i��!�F�3nBܤ)�ff��Xg	%I��ҬZ�I�+�������ʆ-;��g$7�B���g�n�t�F78��s�Ue�W}h����q��/⪤(㋽���N���=+�<e{p���	>@/�u)�b�`�p6�ߴ
[N�"6%])�,�G'
Vp+m�8�y<�Dp��=�I
�p�F6��&���Ӻ+w�ql��wIR�V�gO�}��|e��\�w8�qg������̒�!
&;L�	�OyA���J'A_�`�8�1�񂩍��y��/�>���6Ɏ`�`�g��A�!5ՠ*M�u��k�O\�n#���,��|�~��/�ig�~�ۛ��cY��'A9G���1[xs^xQ�L����XA2rɫ���я�o5�P�j:z8����i�D�G��+Q���[�F&�#�I�q��ʝ'�(1_��<��L�Pi�	N,� �$��ih�0�t�p$�ëӠ�0�
�E�~F&�#�I�q��ʝ'�(1@o�F�O3eɖ#׸ə>�2Pg��($X���Ԟh�Ș�/��������h�������/l��QQ�:�C���c
V��{��U7��
����l�}s���o��v;�[�p"Q��1b�Jj��ˍ$c�l<e�N�d�Ҕ(S�ʤi��̜�$����nޟ�Lj+v���:}����1�?	~$N���fu[�OXRfy�@"bRЍ�Ղ�
����S�$�VBW��e!k���Pnզ��]��i05.njf�X%/�n|���)��xƨ(o�eGZrsn������&�B˂D�$� ySp�Yɢ^�+h�A�F�����3��I���F}9O n^�p���>_�!�l�������BK��OU{�bq����PbI�5ӻX�K�Y|��
�6�!iG�Lə�S5
-v͐�ɚ%[���Ӛ�@��-�j^=�����4h"��r���q�I�H�ϼ���w�~U�QfJ�%�L"6dT��b�8uN5D�t�nQˤ�N�i�L4�5�"s�V��{��i/}�|�q��ʝ��A��
OJQ�)���k�(�!��a��ѷρ="O&�1'�ԅ]�\��	xQ���B�lL�廒�4��<�B�/�A@��%��5-t���E5�P��Y�W�p�x��ZTGG��8�:
�.�#�O<��+��\�N͓)U��$⍉X�\cv���˫�F-�κ\�,�LX���c<]QLŽ'W�<IE��zkm��f�]��o������vsxQ�L����XA2rɫIfԌ~�@O5�P�j:z8����i�D�G�ӢK?#���$�8pp�ΓT�$�:���;3�^Ѥ��ž�,�q��n��MB!�N��i6+�&�\_�Է�@L��f'���
ED˙�Q̅(`<t5��岻�{��J��AáA��tt����j�ᬧ��lD��9�&��ט�u�'���v�8m��ɚ]�Q�<ܳn7���l,��b�X,�d��$�
m̴����7IU�L�DU��(eS����X�Ŝ�

�B"��4��2��0=2d0X{�"J�
J6���>m���)�yW�I������fѠCo�)��=�f<�����|?���j[��F�Y.N�v
R&$9�g�0�2�){[�@wr:���R��W��
@��y(*�k8�$:��W��x�&X��T8YHс�ma�jF֘,
�#ySP�<���
�L}����H~J�B�,������|D���hf��'HuE͍z3�X� ����,�O��0hQ�b՗]�I�����XpZ��Tp���Yv��Xb�����#xR��A?����c�^4����؄����ɾ$g�Vocj�@��Ͱ;��w �1Z��dY8��[S�(����˴>�}�����y�Ur���ĐK�m�V旸	 E�{4F���+�]Ms..<�zR�>�{dp EɊeT_vi��g���w$샎�N��y'���^٣�0��Λv��Ѭ'�~�A�)J�Z{Ӷ���XO��5��]h��^��X���0�X�!/��QJ��P�)�4�U!�X8�x��$�\����p8�_�&@�k�ߣ�Yr��VOrJ�[�:k̂s�ot:<L����Q���sh���B�w
��\:t	) gr�Q�1�KXa������ר �	�B�����&��ģuIX�/z���C�ZC)P�F>��ˮ�W���0(
�50R�����k`��r��Q�&��f.#��r|v�r��7����24T)��_�";�G(H���ҬH�9��ޤ��]���t�S?_���+�zA"bRP2����Xg���kA�EJ��:�L�pA�+�-)(ŷ4������"o��ʲ	�,]qeܸ@۫>G�7���u���y�|�(�.�N��1hبqqS3s�%Q�I�m�z߇>���}�k�~y���ց����,ʨ˒��Uc���
j�i5F�i�f}s��.shEnU�\*��	��X�Qݬg�b�#!p>�S0�B4�Q2�!�Cl񽍌TC�"7_;L}J}��[�3�m@"B"I,�RHlzk�[�"�0���#A
TG`-�,���Q���"9,�LP���X1��NJM��p�
]AwK���A8p�V��"&��HN�0�0��g�f�`�Hr�]�TA��`��I2�x�e]
01Lw��3ڰ�p>c�Lf�0�a���.^�
:�fX�W%s)��	���N{�֦R�c��)S��uN��8y|P{R$#b,eR����(*2ᓾ2�戍d��s��>I�\����D��&�W��4͎�b�N6���w�V0�K��G����ߪ���T�f�#"�0���Q("��,���ƈBC�Sq8|�(����(z�N���J(���P��=2�A�
NiÈ<�"8U�L.������U�Zsie�O(�zJr���	��3�G���Gh��tu��y�G��D�t�e�$)�`�V*�Y~B}B!�>�B!�_^A�J��jeq�<���ؒ�'��FpjBp�L�Qm���9���#O�1���	�/39m��A�F`���@!6=C�g%��|�*���딪�s�o^!o卽̒�4+�&��w���o��MO}K���R�`�/�ZO�[T�U�e?��+�@ �	%�5^�����U_"��
ʼ�}XG:��K]?�8pc�w{���pʤ���x��i�(�R�7�=8$4,<u4Є��Wn>p�`cL��B��̭;p���h�9v��NLir�������-oU�_�1��W�����n�Xb�%������?�K*��Q\~����Q�F�k��yZ]�L^B���_��"edT4��%ںc�'� ���.ɨѠ
��ЃCB��SGMv�������.�1`Ĕ��l�V��ۈ��p�O�D�`��n;S�
X��Ə�I�vf�w9��i�I��zL�4���ԭ)���U���FU���'M�F�Iz��K���0mC��s
����4�5B=��W�O��$,����K鿮g��W�Z��y��y�����>Ļ(��q �@��'8����0��|�O�4�P�fJ
"TXIS:��H4�W�A���:cnWw͍�����蓁�Q�r2��͎����L-^��|}�$�q��ʝ�Kc��
�x$J����ި��+
��A��m@����v�W�-��+m�|���g ��u1WIeG���P��LG�sP�l'g�xk
�K����9c��^W>�"�a���#���o~�
��x��G��|���}�;�9�ڏ~	���]~�C�C@��N
(j���ol1�ϐN#p�@�!��?	f~����w�t�E���ߐ]1݋S~�J���X��v��.Wҗ�V��{��x���lu�[zϐ^�L�+�;/~���b���틶�z�KO�_�i+����`��?���nyių�v��.ovO��̋���B���܃�i��^j�4�0P��<�{�/�[R��c��ȓ&=Rl��gu2�X�����[�4v���$���f��X)
=��7=t�@Ei�cҒ��
�����U�>Fx�+�QyGl���I��{����(©�Ȋ�׊�c�I��`L�o�ߏ�K~�(��}�GU�۝��)��ט�uE��%������d
0K�넹�"��(H�$OH�4�P�!���ܩ����i�Y�6Y�r���/BVZ�L��|p;��.CRGEj�kШI��ڴ��0lĨ1�&L�2mƬ�0��X�B�j��L$����M�6�H��ו��?�b$(��n��y�	�$́#����)W��E�:6
5�&��0��Y��CX��d�Z#6�ٶ��#�r�v�8���(GQ�;xP�7�xR�U�P�����2��4ʂ�^� JI9�ԴS�ACG��̓O���TqX��Y�R���.:�)��<�y���|��S�?#.#f-8�"��!"P���ħlB��4V���F��~"m�wƭ�p��a
�X<��u$�ù6\Rs�<������HA�+#�(U�r'	r�(I�"�9)�$�ԠC'������%Y�*�Ȗ���䖛��_~
*Ha�)�(����V7:�+��P��x��Wj0Ҝ��2f=G9}k��մ5N52�C� �"D�R���AdI�,�dŅE_�we���?��~������:g]�6Gďem%dk1��^Z;�	H�lG��I���v���"�	۽�吂�j)W�z��v8>T	�r]���R�9V�q֣�5�D�"�TQ�ŝ���rΐw�Jg+w�2�r��˻@��T�|�>W��Wd]�6?ן��o&��"�Vn�3F̝�~#�U��2�zD�G�=���j<!�)9��y^���^:�����+j�%�m���ҟ�{W��Ty���(�'���)E>S�r�l���߭�o�{m��(z�E%ec�KT��$�U4�B2Ԉh�R+.��HK���L^ިpe��+RS��
]����`l4ib�Ԭ�ys��-�Za�{v�����p%�C�z�9O	����������𕢞��I�b�DQ/U�+T�*
�z'�����=Lp�;��M�\�TR���
����:�]PcgR�;�Y���"/*�2U�S{�P��!3�^�t)i	Ok%m�atP���t�e8�yV��Yǐ %'IJ&��pJN�%��W�\ŹsCȝ��>�e�cD�#����#ɗ똯�������I��I\$�$p	��T�*<%"_Q��1��I�QJL��YJ�R��.�K\VIIIZv��.�'�?I���F	ˬ�b>��)U���h�S~|!�P�*t"K78y8ji�yG�I�ef�E�F���m#q�%���>
����U������?��{/�x��GY)�<U���TU�ꪷ7Z�C��5�C�+m��Uƚ�Xo#���� [�d�Ӽ�l�NHH8��O&��wT�8��I�iGgI_S�l��(�D"�(~g�6.��S�RI폌�c����q����~q��w�Z��ET�����5m��
'��iz�<({��҅T��H�0,����6>��*�h�wU�!&s/y���G
&7OV��x������p�0v��,�;|R�#�y�/���I`$0���I�q">)�?n�J�����ߕ��_������'�/��[�;��b$���?��,0�P�E0�%(�eC�Ph%$����A��M�G�SN9�S^�I[_�
�6�ےo[��v��m_��t$ӱ���t���ԥ\�J�u-'�l�@�P0ԅ��9B�,zE=_�(ꅅd��Eo ٛ${�do�m�{�T7K���}�^�?��,_���+Ì�%�#38x����/�h9<�)#�\������y�xIPAQx
'7Kb���tx�,�ː���=�g(0��y�Bh,a������ζ�D���)! IQ��*+;G�aU�𓦎��֮��d�|���c'E��!�ظ9xQx���'��� 
4�L����ћ�W�8��q"KF`ItvN>4��d��`�E�(9�D�To���K�%uS�$XF@u�x�p�=�Z��5aln�F���[��������V}t���'ކ������.vɼ;���Ĝ�Ğ��]���$�_?o�f}��88�@�M6��뀣�%�|��������m�y�K�<������ݶF�>}���w�=��W�g��}=����������]&9~�&��|i������֫���ިqqӢ���U�6mc��+��TYyEe:;'7/����������ݖ�I�3�$S�`fe6�Ɗ"e��Q�B�-:1cr/NH�t!E�tô<^��I��eU7m��d:�/���������>`�1�q�	�I��Դ�D&����`spx1��P��a'i�eU7m��43n¤�03f͙�`ђeo�X�fֆ-�v�WL"n{(�L�|��
�7I��la�Pw�]������F�C�uO�7\J��4�X��f����t್�޶�����e|�ɼ7���z��`���'@$Җb~*4�0`‚�l���i ��f��P�l����u~oq�IWz������f���p	�hI�Lɕb�q�X"��J�Z���
FK+k[;{G'g(���98��yx��$
����R�R���F�p$�����WPXT\RZ��TO:��X�LY��ȕ'_�BE��(Uf��K!�d��;���JU��R�^��}_�%��h�+;�l�2]v�e���Ee��-)x(������)g�<�2�����-D;�IV�����s�DR��ƪZ�;�a?��Oű����usE���^���{��?�#�(?�}��S
O�	&
���t�ۓ���¾j���
!R¼�ĸ�Q���}S�.ߩ
�I4M� �G�e����8���1	�H�'�:����,�)�.dv�u!N�9�e��o��9�n`]Q.N�Lh�U�O{i�T��&g�Q�2=s9�F�፝И�-���k�m1_+J+��r祝,�s�GL�c�Ke�I5s��	R�-���l_�3T�(�>RD�_^����!�%�Ά?���$�m�^�B߫<�v�i�S���!���9�^��yBT�6*H�PL��ME�(�/YUV�R��K��WUU�Q���N�HjT�J�V�w;����w�3������r�hB���D�t��(Ȩ T�Ƈ� �faR$�B5˓&I�̊���;����A
#)J),����������gkh�K�{��*�l'hێݽ=�Y��p��c�F�����?OD�x���BD|	T��ǁ�P�T�,��T�<ҟ�4A��5��Vwg���Z͖�aD�d �9�$���Z�eLf�y�ǟ[����Ei�m�{p�ϭœK���[�q ܉ )I����^R�g��qŅ���m
|6{	B.�J8�Pɞ��Gȶ@4� ¸��X��z_�5^�5���^)@��%@��A
�T��i���V���4�
���e0�\У]A���i����-D��>���O"ɤ0�@�7�oaw�d�;�.v�����R���}�2��0C	[������Sr��T� rQP�W;���f%�;�o�L���Y8�Ӻ�W�	f�����=#9`��d�W�_��=���<����~�/�M��� �q�kB3Y�d��e	,)��0]��>	�}F�̹~�g�ɳW�Re���g�<�'�j�M��ٶ��nd[;������]��_˕I�|����ǣ��xu|�ٖ9�I����s�F*��>��^DzT��r��[z�W�Q��8�1��o��A���2�d��1jƊ/.��EQ��]�eZv�v*�����h�ia{* ��O[٫zu��5�V�iX�-�շ�v��;t'�{{웭�,��*�:�2�э��.x��xi�S�4?~��vl��Ą�I1e-=���^��2�1�iLa�.���sgC�m�	�wǝ������үۢ^ԉJQ"�87�i/�����������nRo��ד=L����M`V��5���~�j���Ј�q�����ȿ�w?�|~��*��mP�j
䳋rtPI���Ƹ���o��P
�ջ����>�/�{~c�!݂���6�J��\G�mxj_a���Ӌ�GZ(����}�ѡ�yoG��>�?.t1����|ȇ�����^{_`>����4
j/K�2yh�R��hu��J7Mf���+S��18ف��%D�X�w���%����>�ɺ~�h}7�y���-ct{7�z��w�p/�vʛbҁ��ɞj�i���W3��k�{��L»���5nkƳ��R��˳�ڶq�>,����p��`���m/8�a���(�n���~�r o+���2�P:�(*�ar=��KY�=�7�tG�O�ͶG�>�q:�D�ւ-|��(r�100�a�
��	�.f9�[\�%�X�QC��a#s�r�^�H#�Rji�+����6��SZ��M���'e�L���q�=�=hI��F�Bgˎ�ÆOx9&��Z_X���2t���j�������&{|���a�ܲX��VѺ?b�+��:d��Nh�O��N�%D�\�������[q;1͝z��zd��^�_j���O�?�پ�O���os��2a�`^�E^'6@ދ�9��g��W*KVs��|pᢉ������`DJ��I���4Eݔ([D��!�t,���$c&�1ek�]�c�g�p��M���ЃH�n�,YV�Pi�vk�o:��0#ܻ�鯇�-:��1�yJ�Â�
=Û1}Ւ�5�9�m�h�kױkq 9�n{�÷)R��a-V���?qH�d�|�2�&�cٕ�/W>�.�A"
�U�X���)��ˁ�b!�WrzT���F-gu��zડ��	��}2��c�c
�1l��=�������?�178o�[��bo�ν#q�u����Hq�>H^^x�4<@N�EJ�y�\��*^|C�J+T��D�j+ռj��j�Y�^�g4X�Q��Z�Xۭ���Hm�+�G�^�{�H^멧�z�!��&`b�'�R�}�$I�T��I�.]��2 tȔ�$�.Y�����-[�_HHv4N|م�,�z�=�6d:���
�a�Z)���<�T۲�vЬ9��
>��I����y#���O��B#>�^�$\�+E�?SYAW��,�l�Dn�����]؂#�P�)J�4KH�r�*�2ID�j�j4���N��k$6�҃�v�7sI�D�R��DZ4��+s���zӎ3ܩ��!m���a���pv'�v�O_ggpVw�Ev�E=]�[�X}�m���;�q}nS݋Gz\O��x�k~�_�X���+�S�.o�tlW��N(Zd2�]�^�17�1
��X��ᣏ��_�N��n����'o��1�_���ox��F70B�A�%d���s�C}"�є��J�}�J�Qjr�34����Mo���m�%�Yf�SN��Ӗ9��}	&��e���0Z��nY��U���qw!��&uh��F��B��Z�7-zh(���h�Y��fy�aV��TV������7�D���fcѡ�M~G��9#�tϻ�����n�o���{�i�/�b��o.r]�u�&o|����L�����P��ɢ�h8�����F���Mu���������b-Dţ��@��H��_��9Q>��?�(W�O���ϧW�у�a�7��P����4&�J�'�Mda@�������?�~���/�d;:2>��-Qǩ'u"e�S?��Su.1���竒)n>p��YUN��>f�v��S��Lƭ��E���meW2�aD֫�wV��[��rzR�gl�:����H��B	V��{!��Fa`�8�{��1;c��?q��Z#8�2ord%c�/Q�"�a�}h����,}&`]͡v���v�?��������ݓ����/�8P�֪��[L�2�~�lRG��X�ְ��-����-D^��A���-j�玟ipS���Wb�m���;�ı1�:�8X9G���5^&�)U��3�P,=_f�.�-�kPW-�z35b�������`ǑŻ͚$n�^���VP�
�c��M`<_�I5ӹ�u�=U�ߝ�a�0�L����
���s����ƴ��2K��31�,���#8���vǟ�	m�Q<j�~܋�E¬p�j"�!^�C�k}o“E��ީ�'����~�i=�zřM���ަ��8�/Xg�ӽ���6���͌��+��ͩN���F__���D���ɸ�r
�Lg�Ejх�ՋO+�=��СAo��\y]�4�)�W2GZ�(�(y��>_\��]�G�E9v��H�$�|��T5:�b7�{M*D[��Ռ�i8��ӹ�E�=�˓4Ҏ��֦4ws5��ƽsiu�1�i��_�S]G�N
1�l�	̜t���y�b4+�<KJ�2T��>Ӿ+W�������q>�Z�:�g��h�/[����4�@��yk۶^e�����f�))��8�����;>^��;(qX�`+8�n
-*�袃����R�e�I���-�ۂ[_�ѻ��	��^R
��,Zdc[��v}�{�Q�_�w��ɔ��S|ּ֔�D5;��1�p
[
I���B%/�M�*Հ�;H��d�J:��/�t�K�_����p:���x�(^*�Eg9�j��0紊U��&���:���^�	'�x1�L	���ǔ29(�>�(�XQ��SE��UHa����-��b�[b�j�mV\l*/E&-P���`؀9Ð�ĘzE%����/(~��?�&eQHX�8�(��9��4Ũ)&�V��6�Hパ���`4��5�Cbe����p��Z���tI��֭b>�
<񩻯��~O�o"�׏Ǟ�*�T@�R���0v(5��d��p��'&�A������A9�Ư>"�R�-�TY42޸�TѦ�MI\�0e���{"
���ݶFo����ڥ����c�x��pY�J��o�|�+V�5K�	@�E�+��s,J�V3��S=0�% M�w�5�y���M��3�p�+|���:�<_4PYe{���_���H8�;y�L���B��A>4�̂R��9!�wD;�M�Y��i����_\�AO|���i�j'9s���(R��Ӱ
۞�<ጷ�!;�\�*6��͌�؛,�m�I��ŋ�P�2Ii���
�/S�6	�6�Wk���@”��b��G_�P5�(�"Е5�l��sRp�A�8�C]R}im���-�&�pJ9��+��Ȍ�4=��BDK�MF�<��|13�̍���A�Ҝb�S��?��!�ݙ�j�[�+�$4a|Kǥ��0�@g�[<͖����P����_R&��������j�M�x��w[t�a�o��%���?��Y��ʘ;���x�U��&:ۘ�#�����.O�С�:7~V�:5�E_�;B+x|J��Bh�K9'��3lSWJ�9>�m��¢���F�� N�[R}3Y�@{�}�����)��q��ͥ
�]1Ջ�ڝ�TƺZ�;l���ZM�M�7�
.N�:)
`�?CN�V��O#�Ԓ��_T�U%���[[:A1ah�d�*�-[�,���P��(���Ht�S����]��d�	t�7k�P��P� ��Q�R��jx`AZ�`��p`��&q�sY)�Xq���j��R`D6��pd@Vc9�LҾRe|s�H&�n2W�ƪ���T�@���Zo��o��tBi�j��L�$AרtA��qx�v��h�ʟ�meF7kls�o�`�S|����#ZԠ��*Oi���=㒘ǂ�e��v��鼳�e���e�Cy�3�4�'���9���(|̪�'��h�x�o�����f9p�=�zT�6_�F'PG���M%b������?�sΜ+j{#d��
h�弗̦��,<>	�ǩ|!^�	�� -hi����Ջ6�,�5ɉ.q�L]]�PEH�^ϑp_Rӎن�ѭ~X��P�)���7�kĖ���>;*H�K��w�n�xK�cP���[e.�-a]n邛���D��<�%��d�u6�'�Iì��~�Q�\�
�P׆6I)$1I>�	T��_>�nx��E�?5��˱4ie9u��ҫӭ�2�T(�gCZI�!Œ���鶦a��^��Y��e�����b��s�D�:V̅ދ锔_:�R�&�G�����x���T9��h�K��i������vꇲr-�H\����`��Ru2�x����Q�U^h��fFb�8U��4�/4�p�i�M)��n�ՙ�����H�n�M�'Kd����s��edx k8*���ʃɃ�8�<d�Q��ɃAߋ_�_BL����G��-k>5��/��G^.�����?�cz⁛ש+���qFb�P>�'���'��vu��o�Frj��3ۍ����3X�&k׏-֗���j3��;C����A��J�\,�ޚ�����BA~߭�?c~��	�/��K�W�t�nBe��d�l�J
!�Yuj�ȥ�M����ؘ�
Iv� ���eh��1���
�c���9z���U�V�ꆦ\��P7�'83�d���/�q!2d[*�޹]b��É�<�D���5v�\�s���-�
M��k�0�v_~ӎZ�F�)!� 6��龈��d�Lל�"Vv�T�[��}�49��4�)_�=�Ƽ��+�.��eQ
ϖ9.
�b�jZ6�լ��z�=��k.���)��H,�+I$��9�n����و)��T�H:�R��]'�T��
�A_�@%��U�ܥ�,2�q�w�bh��S��ԡ�
�jR�mݸ��PV��������!��7~2�m�w-�9�w���i�M�i�Ƌ���8��/�êſ)�;�����=�2�;�צ�3mrpN��S�m�<�H��E�C
(����ݒ,�\��^r�:�~iJb�T�VH�MP�qH��D$��j3V/4̩��l��wb�p�?��\~�-�c�g��]��)�����t�Ӿp̌SI��UIʹgg�tq��XU릱mz�d�.�/wAو��d�pc�,
����Yp��I���h���'Vpt䠉Z�n�G�el�\M���3�
�V$vh,�&�ɴ�
e�I3Tzv�3�.�ň5�t��c�ї�3d�K�l
�ɢk[k+��_���ʟ�Z�c���eL�M��-y��9��y�$?3Ճα�nq�[�|����mZ,k೦�w�Q���NS����k�္Ǵ�e���P�h��
�5-jXoj~�:�;�Ѻ#!\6�4T:�w��h	���)���i��l���w�C���pFޡ�B�A�[x߭E�ص�F.��my����/!	~֋���j�.s�*��V���!P�,�� 2��j�P8�6p���?c�&��%���֙	�/����D�5es��.aN�7Z�|M�b!7��+ ��]��˴-A�*�ڹ�0O�I�Ե�/�q�L��/��&�t����P�!�ɹ_��K���	3�P��dEpU�������x��4�@�3	��0Qݎ0��"_p��2;J2Qx����5�~dذԭ)�l��z=0�te�jm�@H�%E%�7�R�v�f��V95�qJw$�� ��$�d.���6�3�kͽ`�p�^��$!)$Rd�zP�)je~$Y�Â7��\�!�/p'(�����Ba�����l$[V�
��:��z��X �(���*�!��(���
���`28��蛉�U#B8I�2u(b�|=�&Gi��:>b��a��8�$Sb��|��Ձ��(�O߲�}h�7�Qo@��,aeT@�hT����	���X��,��^ŤL�`s=��ʓ�jKjl��t먌��!ږ�NP�lK�0oT@�_�'���u�e��lk���WL"�Cq_�A�:j1��Ġ�9~&���-���=HV��������<Z��Z��뻀�@JAG�SЈ��E�J;
���5��X�ЧŒ��<���5*��L3b�ʬ9���l���{?
��;��E����o}Ӻc���v�p�����
DzW�*�M��w����VL�DI��#˵�
�&n�dD���L�����`�����p�k��9dq殁
�]����zj��#�Þ�u��۽�[����`'o� ��+��
��`4Q�����k��U�9��廫ހ��:aC�����D��&z�J�$}��HE�:ܙ��ⵣ:"���	
,���Q��E�Fk|���rN�Vjd��P�y�҂~5�V��ڽ?o"�-D��`�T�un9Q�EhB)����3I�d�fHD�C�_������	[��I"�7���J��.���>��������|��<�5�ܫf� �`U�7f��pIh�O�>���\����8�z��d?"��4��ll��N��5���/욦����(��'�����h�Ba�Kl���"�ŕҀ&'��(�nL{�J9߈����&��P{-�/g�אJKC%�Z3s�~��R������{�x�P�u1�Ҧv�����;߂��������c:!��b71�v\�"2�P�;��@��Uo�b�!Hԍ%�n�pƱMN�F��Xi�N�L�%�)ѥT�dP	M5�g���.�\�Ԭj7��j��a{���2����N�`2d�4p��4:f�����X�w��IQ��ӏ8O@�Y;[Q����m���׉d�w>PK���<��}���w�>���S�JL�{i�c�3a'�q�Tݝ��a/$ƎJs/�x�2��)�[�^͆ƒ��G;,��-X3��A�☔��(���s\��d��9ag��	Ky�3yd�� q��E/��y�=���"�'ޏ�Ѝ<�uk2�gv�Ե�=��5���4u�k�I�0�ˊ��x����k�z�H9�Ra4���SˀQF�[�5�F�b�����D��<�1m+jKgɏ9�4��d�_j���+��v*D0c�k����ʒA@i�t�r�5Z�X��v���v�r�d��w�����zb$2�����ıL��A���O����
��82b���}`��C�DBj����#������BK�cukj*
hy���-���:�A��B�
�y5ݤ$�������	��K��:Sɪ)�.��Z��ꐊ�ia#1̉��&$<({���Y<�/M"q�
�S�?�O�"�a�����[�VgI�m���TF*�+�b�Tn�:����;e�q�Gx"
?,��|Xu-���
�qx��=㹚���\���%ul�[������GΨ�m�U�:k��W93��-(��Ӟ9.Iy�H�wT�xU\0ե�'Fǚ]�Z#��\�Iܯ3����xj
��Q��#
�V��*.�o
>Z��V���h�N���VF{O�XԄP�Ō/��#&��������1�㲪+�6U����Đ+_��ᙛwD�t�4��Y�Q=��H��k��U��n��u⍑~f�����B\��#���{Ϙ�|��
�Q?�=�{ʏ|7����(fS��#UܔP���d-�7�d�آC�!Y@�4���b
|*8W�ꋠ&4N�E������:ek#���ciT��1'�P��ͻ��Ņ�v�~��4�6�<,�ge��V��˲>�3YO��~e���3��U����g|��5.�By�����0��1*$Y�;����r�s�L7뇌U�e�挎����v�I@p�?�6246Z8*�|��J��it�ndJ��U�C
e���UX�$����RN���Y#��uI�N*ܔ	8+n�64�%������-n�bL"b�� �k}Xd�
���p�c���^��B�o!p�1�geSo�#�[7����#LԊ6J�FX0����k`���e��L/VC�C�
�+H��Wh��Wb�cLi��z��:�LtA銜�c��c�z3���8�-TE�h���(ƍ#��F�Zu6�b��?���S����D�15Hv���M*軛HKh��G�rT�{���@�<pe�۽4v"~�e�'>܉�H)^�T�x�=ku1I@Е��6��*~��Lcpk�Q��Jto�z5��;�@�2�A����"mD�ߨ�u��>�%���#��~���j��ؗ����	n�^��l4����S�U�#�y��yM��Dd�S
��J#k�?�#�_�e�Hmh\L1�%�h���]�k��Ŏ�4�l�jm;m��,B`@��Q���u�'�jSn�_�ټ��U@Pq5�&���Ƴ���@�\� O�˜�c��hk�d��X��"�K�L�U�����6�~�H�uJz�K�T��=�����dNۯ��G��OtX	�$�l ���`�K1��t-�V�a1�ձɮ��!+�8�U��I����c��\OZ@�'mx��{^�(����
��-QG���a�J���j�^���aÍ�N�͊wڙ��`�"*�ͥ����i
eB����>����E���%x�w��U��9~*�o�C��֠5�T���jRGpdU5�lZ�,B�����Lh�IMk�J״m�I�h�M�Hj�ŗ%�S��z$&�3Uj�m��f7�7u�e0�=ԍױo�W�2��c�H?�P~�_����̡�*.oCN�n�I:�,���U�<t�|�R�	���i��3v�pai����~#�,'Y��l��`�T�WBO��XX��{2;��Q��
�2�h��C`�8_�L�O� 4�B<�����d\�	j��Kw�(P�ڣ�d��{��.��gA8��Ge�}�g7qn�r)�d�'0��<b��#z*J�
��ҳ�\:*�Cà94ș�7��[0߼��
����D�e>�K��Y�R�*�:���*%oԤ[>QNZ�`��:��e��F�Z�Ho�B���|y���nk�S� !G�kd�v<Y�Uh8,��K��a���]w��_�|w*]'��񕴗�?=ݡ<����dfu����*���Z���n��vN�Te� -�9�'B�*s]$�+_A'�C���{���1O��D��ꗥ�z��>�������S4�~���~J}���9��۷N����Muf���/���Mm�,��l�$�l���3��Rl���7J!R�Yzoo,�|���W+|�����!U��x\�^�S|�f�3��Bf�YL�b����2��ˎ|y�����nlj�nz��L�X�s��v�V��ۋ;t}|�nMI�������=�4����׼e_oE��������Yg�%|�OJ����nU�U!�$��D���E����ְ��f�n>���a����"*���y�����)|
���h{¼���җU�6G^
�j�_"AL�(�%��ܰ�8�d֨"�#��n�/I�ejdL��)1�/�Yrd¾)#d!�v'~��w�ޕ���\�҈�1�I<7=�L��B���$�|��#5�
�g�|�
H�|��g�~�|��1�
��-?$	�(a�^S�:�t8W�
ڞ��I��X��l��7E�i�������9�������$�O�S�$ftT��Q~A�\��`�0`�:���;m����!-�a�\p0��UVĴ�&T( 1���32HA�!�ׇk��A뎷��)�!l7�_�a/M%���g��
����܌��Bz-=�������2!70ȋ�Ы�~�^�ζ�Y��H���u�Ǒ�����
��S���ݫ���7k-�Ɖ�G����4�6��e�XY�ִc-(A@�y1�ç���٣�|�Ə{��U���t3�+�17���z�m-R�.��V�_}�T�*ʯ<��t�n�j���7�o �WDA/urUe��g|�g1�o�~h�A�N3)��*�T�1&0��Zn�t4
eL��j��ʧ�X 3���O �Ӌ�$�Q_��ݹ�\u�m��tz�5jK�x�����a���U,4�����YC�<4<�꽮����Ky�t�G��'F�������yjwc�Yr1z���A"U�������NXG�GdJ0J��.tg?�/�u�;?��.�	o�XPCjY�5�<� &��H-ؿ�.�F¡�o�U7gA�G�%����K�.N\~nps�7�nz�!�tFhU��1�����4�t�A:��7����D��y�ڕ�Ԗ�=@���.����R�O�֎[֝>�}��蓻�*��{�"������0�G���6�
��G���{�G���nYs�ws�OJ+_��S�UC1�!��9�T�
���s���4B
2q�S
��C��m8ļ�|Se.��@8ľ�lG���7�}�x��8�����l׌կ���9��Ӏ;\�S-�u��Ek9�\�k�J�LU���Qn:,�Zi���AYs�ݮ�Xu���-qּ��s���p��"WO��.~�4)'b��d��Rf����]�e}�0,�Kt��v��m��fO�6m�s�醷��x�D!(����"4J�T\���dQ�Y�4?JT@ס�.��3)��� �݌e�k��,����h�,+�ц@<�(1��3�Q�o��U�A��8�yq��i��qj`a�sp�S,�]_��
��D=z��XK�hv��:��+K���Q&J�}a?O���S���~S!��|`V�"�~���w{~��JiD"��� �j���!�ww��p�#�'�c@��:�x�"�oh5��R����A�s�9�c�]��'��w�s��h�TЏ|��5"/&�(r�H��B%���ɚh�
�f|[�+��ұ���(K�
^-��&�r���K\�+^/r��u'���4c���~l��RT�{��yB�"eW��o�+�����N���%��#Pd&��5EI�E	H)�%�14䪨�
�
��(����U;�/��q1�\�&�R2���%L�=3b���]E�;cLg�쒓T�I~��[���qSV&��O�w�m�Lc���D$+t�!$�B�:-wp�`��y�H+�m�n�����!_�o�a�X���KIVt
w=[�鶷����llEP���}_�������hG�uP��<}Kr�Jr�;�!�=v!
��P���r�6)녑;۵��1�V�x6{�ϴ�r@��
dٛݯb��"�9J�҂N`3��e)%&'9,�~�vi�v�W���ߜ��^���ə�`�c�s������B�+kmjz|������K���"�#�E�K:l��<�5g��W6�B)߰"��a��s���N���/<�i.6cJ�Vљ�v?��
�Hj�6����!hN�dq��0���j��|b+8��b�
�
���-zSN:"������u)w�Y7H�o�]�qK�?�Ti�	YX-� <���s�7'L�F�)��L��������l���5S�t��8lZ���s	q}�d��f|��v.�Z3��Z�8z�����زꖚ�;�ŕ؀!�6.�M
���2�7U��U����)�o�g1"[7�o�s2R�d����!K̉�1�Sm��"7<����L�]W�Ec�G`��Z��ڬ�	��q��t$��P���8��{�<�-p֌�o'��ɮ��?;��e���Z��ԋB/j�T�\��*t������Xuu8X��8"ة�!�����{�Y�{\V�\=���z\�����cБL�0�5տ=s�0SLA�ڥ�*�l�DQih��[��7�Nȩ��F�T�c>���۸�5�I���i�e}Ym[S�����Nw�Sչ�9�"BE(VV��p���=ſ&�O���IE��{8�G�	�Q���rǰy�������y��K�U��s��<Z6&����ݐK��b�eةΛ� �9�&HZ��>�]P⑁'��=<.12V����xi��Du�ZC"�I����ji�kat�\uY��#��H/�
"�A#��k_��
��� �5��4�R`*���.6swn>Sts~N��A�%}���щ"R���B�9��������FU�&Z��t4�rr�-I�9�oړ����:�L�V�!��O�)*=���J�q���P���T����J��r>~���H��݀�����:�������t��ra~��cBw}N����� �1�TLz��9�U�-����fQ��:`�R�&g)�.�U��QYz�|4H��	~vlE.tpe�OS�;�^➔��%�j͑�AL�u1o��R44��RS
�a�5�j�u�?߼�8� A{s���쌣p���/���ᢖ����&tG���7���&O�a�mJ���Y�]�X$+ݵ�qVt2�Z͢jIŠ��M�1�_�,	y�8�Qi}.WfrԿS!�lI���}.�˙����z9>��������{@��Af����
��r���aĺ8�8��KN��ӡ[������fx���)i��݇U���L�i�K��?���|j�����Lj�ru�t'��7F�q�M���b�IC�m���W��kpmc�@�O.l�!\]��i�d��b���g�[_���D�{o:����[���pu9^�i�$�V$ce�
{��yd��Z��(s1a��וV�
��Z�9|���\Xy�@�8�n �8�/�Ǘ�/)9qy���_��4R��
�>�I��$�R,~�����F�a�+��W+
�;
��
�S�'4�Rz�	�����.ό(�{�|��)���h:V�X�]|#/t�X(@Y�B6�[)����k�"�H`)�/�Z��r	�u
�ε�g��<#�,��V:�v�L*�R��Jg�Y^�Ԙ-_Xo����y��t��O��Ak�x�Ƙ9�U/�&~K)��l>�1���z	C'�QQ|eeS���4���
��9Ǒ�ڎ�y/b�\�}$g@|�L���{��
H�����/Eef��+�?f�wz�^�����=2jp����<�ϧ�4�G�YY�Wt��Uy�Zn(M�	)�+?�|Bt\�Q�q@�k�f��۶����������@��&n�Zb�2aIA[5��J��~Q#�K�8TV.���w��ψ*�qk�,�Ŕ/�,4R�k��@��.��
�5�C(��0�h.�:UiE��;��;���
�uM�����^i@J�C��*��5��;�ȇ�6VFK��Z�X&$�T��*��f�F�� H���0��͕Q���H�?cD~�&�Ӵ�`RKs�v�$����2���?��5�_�ħ��;���Cc؄��'��\_w	%�'�}Y�lA
u:q
�O"UOSEb��C��ׂ}|�I�
��R`����)2����2bp�U|�)�h0O(L��#�\�Q��/�]��5�>���R��A��i���5R�k[6�|����ؓ�ymƺ.+C�W�f���.C����5Ț:(NJ�]ym: �ꠍHŃ���(���
q���̊Gv�cFQ@�{h�����6���,}N���c�,kȷ��?�X����V��Ҟ�}&�u_��G�S�ٿ??z
˽�������kq�(��N++�Uv7ޙd���ՙ&���:��a���}\��Dx�“�v]�Q�ȥ���	��jSE���o���}yQe<5=1K�>����.�Y���O�Zc��L���_��l.��<��D)����GB��,@����a�"��~hv�"a�s�У�
�tk���ʮi�_N�w�e��	��A�M
Y�-^�{��Ѝ">l߂2c�0�aW�7�𐄋:�Q����X���##@���6��FŁ��Vv�;�R�1�.��u�Q#͸%��2��A����j��K�3�l�}u]y�/��[��h�t�b{�L�ԹA8�u�Y�)`���Q�[���g���� e��z�+�8@$�����Y::�A�J9T��כ-v#�&?&�V�sb���ƫ�ZEa����h~�5j`[�Y8�j^d�A���(��
��y�~�����R*�M�vX\��x�ѥ㋲3́۞m�����{��M��;��;�O2#W_��4]fR9���E�)m༎{����?|�:���a�ڹ����e����(�7Vyl�%�kύ�_�q4Ffn)%I�+�u,/}l��S�@��',Һ}xBJS��Zn�<�S�� �qh��
��31��	5���w�N��>�Hٷ=��
�ܴ�>n,qN�dezo(���$Ɡj͎E孄���B��x��R@�.W�>��+e�	���� EANr��򪪻A�b�2�Qm
���љ�~��2��Y��h�i�䀡��X)��D)0��mF�;b�1�*|
�B�
��F|�C�GE;�j5ޕ�~,̄���ý�$��9de�ȱ�bP)�U�47>r���Z��Oh{�Џ��D�Q_���Ȩ�
�,�O"�D��֓c@#�ΰ쟏��@?P���A�ӽ)���b|�Ǫd��=8a*gRW��k��|)�M�
��
�Qűɾ�YS�(�5�˛\�*�l��n�@{�L�j5X/$�Egw�6��(�]�[��:�Φ.��|�!{.�=��	�%�-//�z��y|���nJv,A�R�Ks�Ȗ�hz�O�p��G'��
��\���N�&�D�ǛQ����n���)@����@�y�%7M�Sz����h�W�?��k�=+��}agf��֐B�]U�l����ƹsZh��̻=�"g��M5��F��t�u�r6U�%�p9�ig[�z�C���1����iq��Ok"�%ӟ��w�X^�d$�/����J���hq���^����^����u����&ߢ�o�Պ��hJ�H1�o�
@�tᠸ�dm�u}�$A)qP�(�JP��C�bG���bښ�7�`�<�&�q���<kF_E�ʒf�X.*�9ٷ	��ߍQ��g�42�F�?�mA���7��Үx��[�����݅_|�.�
��,�HTTR�z��a�mE���o���9ĭ�E�t��p�7e��MU��k���8%m��M�O�Ff`��2ɆS釸s�8��e�Y�e����i���w
3���g�d6����k�gGajD|��ALA]�A�q��ʛ�|���brX@�j���R���	j蟤l�(O�RSB�;��Ë���y���	�iH��B0 ��)[k��Q�k'AFvle�V1�eԐRt׫��A[�h�����FG�\���D��0��4�@�����-�_Zz��>����-�����RW�yUr-������6�n�F�u��%$�Ş���V&�,U+����q�ʹ��ǯ�Y:�"~���.��ǥ�_FwN�i�@?ƺ�Av2azu�8�p���{ub/C�����3�K"�jQ���N+�#P�#+MP[L&<3j3ÆG�H��=:�9���]�������Hkˣ4X�xx�u����|MF	q�>�]�1ة=%pI{�\
G�PJG��!Q��Qp��}%�(V�^�o�\'���HD=FGo�
�s�u+�<!���n���׋��?������R�p���lH�k/�t�1a�z���V)��B1{�&�B���_��3zU���s�ޝx}�ζq�C���7���b�ٚ�AB��|=�N1N���-N�Pp#2�Z�E�$����pf��۷�0�I&�'\��e�CFpG8���ch�>��7-[ߨ�c
�D��]J]��o5o���sfGGE,�srQ�l
�?�kK�+
�>YR���9vo�&y�!�É�a`]����:�=#��*��$�^���X+s����%���3�u+JX�NP��g�D��+�u���t�ϴfS�5��R���:;��P�����{�bP/�d����?�Xz�����k}3��,Uq�)���ڒ��x�`����v�w�xN�����s:��4h~C��#�!H�  O��������5�L�G6���j�
Ny�%s���d�.Y��1�M`\G�(x���bY�injo������x�m"����
���Q>q#��q���=?"�9���&�J�����i+���N��m����s�K4K.̜]���d��F�n<
�.Ά��-�By��A���W�P�=��n@ۏ^x��$`L*�@�a��e��7��Y9ώn��ֳ6���#�ɉ/�ِ�f��� ^���%��6x���Ɩ%q�\F������v�k(a�Ф���{#x`��'(D���n�G�Yc�+F��F�oH���"=��լg���xx��˚��"l��a��*���Tu�ʹ)�U������8��_�=���'tv�-��x��L���BPz/��q�[���MG(��� ��Y�Z�P:�8p���z��U%e�5vcT�#��!`�ch'R����(x4>�4AA��I1����Q�����-SI}RH��ȥ)�@��AU��Uݑ\�LK�(86d�8'ٻ�D�-߼������+�s���_�;�So�Z׆�4�:Ir|!�	�:,M2�,G4��2S�
@ڮ@��r�&������!e����Q��u�sЯ"tc��]��]7�+ �0�њhX�W>

z���J�>�TQ��tO��vC�O�F������]����u��@�3U���v��	��OV-� /~F���wR�p�3��.�ޥ��M�,��/�J5%�����ގ�D;�OsD!�AB�3&M}��N��E�ֶD)�}��8N�(�&Q�&���oz˩B&�� h�x�9�B��?�p��*�7��3H:�0�cI:��<ޤ�
l<1C?8暡��W�?f�Bzp�1C�Y�9A�~l�D�����La�xQ�U"�E�<������cpwI�ݣe�/GD������W1�%�\˟ÏM.K�W�X��)�������]�g�#>�H?c/(E`��"y��Q��:��w��y|��vj����c���5xeq�v�T��->�פw]QV��tY��%G��Z���x�'��y(6^77�z�0���W��q��}χ��/q��:�nK1�I�]�K��YvYl���P�*�F=��W�C�E&�TՔ�j�I
N`���ž9�}�;b�����Q2����Bm�(��X�5,�
���ЬM�y�\�5�!M�j���7�Tn��O��c|��G��n4�T�? ��<�{r�H�����/�agEp�~H���!gГU�*�w(�H@���(;l����B�B)M�d�|��n�!��B7ff)/'v���w+���}0'c���/S���C�r�(�ą�&��P(��`�PY����[.bgcF�?������(� �Z�uM/P͚������u�W�t����>�+ͫ�8����r��>zՍ������
k�j;B6��X��h5G���,}��W`��<I��)43b���q${�d,���"�v��=dd�T��41|i������#28WV�6\��f���*�v�s�!�vų�7�$�^������A�v���������צ~Ƅ-�S���K<��l�H�����:0�].����],�T�d�$���{�����RkL6S�O��i$���c��]�q}�~K�����.��IT�g�'X��	���5��Imp�Q8aB�_��12s�e�X���uC���y%�?�W_7J-m�"B\�]�r��9o��UY�;2'��%=�m���Q���Fs��_=k�\�.y�{<9�v%��csU��,�`b��f������Z����fr�B�����l��,{��T.��Z}��#��>�/���E��'k���B��2RW�u��g����z��Ӻcg��̳�F�K�ax�l�l�U�=8�!̄/W�t��]�H����V#)�Yw|Grw
ښ5p��>�u
R��@Z���S?�:��w	6��-ʫkx[*S�z�;���������3u���B*�����UoE�����:9��c^B�ZBy?�P�%?���3�	��)�myw�x�<���ݿ�����0twZG0ݚy*bLR��?yo^'�~&5/ʭ��@�ҿ��kZ�3?�������fG����࣐������#�Z���%�$�n��üB�X��A@{d;�s�Tp�h���>�<1�[��l��R���px�?o���f���>�t�������e�=����d��ZG#���
FS]lfܠk�Â���,s��,'����C5�PO]�a��b3�z�]��F/Z��T�\R��w���_�p��P㪨�y�HŃ�n���p�|��V��ĉ�/Ax�[|~~�<@ڐgH�C#.>\���c&��j��/2�kkN��!�q���>үx�����$�����ø|�M�|���>��G�&^妽|K�)L\�˳F_�b��B�Ϧ_�A �ovdp�_FS�qX�U���09��yπ\@�n���Oq�V�w7��0!�T���Bzj�q4��N._�����h�M�A�sA�#��S������|E��(�dW����:�Z�1D9��}��}:q���!��
g��&.$�Iq��1�A�W���̯',dR��	��E`�AJ��֥C�'�/a8i-D���bd��
�Up�w��Ir�;�Z~rI�E�HLG��)�!�縯�Ϻ��\�����3��f���ޓk��g>���F�m�p�.�zjc�p0h�ϓ�W�W6f��3���<UT*��/I�>v!"!3�:[�
#�晊��]��F
Q�;�2;��a��[��&�)v�p��A��,%�@,a{��{7�I�������P���,oP��]�Ml����Ą\c�S]Su�{S��د�}3|���\u�-�����!�ɽr�"DBB������ț:My��U ��o�s42�p���7^���3�����)gʷ���T���NiQȡ�+��/������M.�u�|<,�7,�����#��en�_�"6F�ZkO��#.���pp8>9_e�{4�u&%áз��E�8Ց�5?����(fX7����9"A��`�R��T~N�vy�i�Ko<.�_��	�A�����mD`�@5Pg�U�4�HΖ\�^1cEuq�^oW��z���~��z��̭�<�����V�c��[���q��
H��+KYބe��~�^&���v������ 	�,�B��+Wy�@N!�"c��ۚR�
�$y{sg]��usSZ��ݶX\A,����u�q�d��~W)q�
I4�GA�N����Љ��$&�AOjǣ�~ə�JFY�����%�VbҜ#c#a��i�4q�.�OF�U���-?�ɚ<�jO� ����m�@�p���֗�yD�kp�6,�O��RU^
y^�6���dC҇uX�(g�<�Yeag�b����L���*8�6��|H:Qת3�};�r�9Ӝ�\��}�2�ʰ���hwR��7�Y�;DS�t����LЫݖ��i2�df�BٟsU�V�w�w�w�1�KAJpĊ���-�����1�eFƅپ�t�?by��1�1��1�6�5���5�5�ZV`-�'��t��$�R�R�I`8=�~��@�H5�����$�jm��.v�̽���ǻo,h|�����^��=:���&���ǪW�[����'o�h��k\�?��^���W�IDB�&�>������cÇǀ{Os!��C�:y�ʯA̟�ʥ�i�B��!�9��	�|��
����ZЙ?5���o��ȅ��l �o��70�x
P	�z^~(U|q�]����^��x;���U�.���lm�7t�Ͻ;�ͺ
����ˏ#��t�O}�5���S�����ʧ�C�~t�X���H>USYWB|um������2/`�/(���������!&�wL��`���o���တ�:Y�<m-�.�*ڕ�K�r2��)sgX����J`}f��#3b���e�3%�ó�m8��zRn�A�.�1	<�Խ�4�ϱk' 1��~ݻ�
�W/�1Z��P毫�uD�wD���'z.� ��oۮK�����۲ظ��+p�<P�H��xs��=o~H��?����u.�)ѐ�1`'f!\�����.��ZH�����S/a/
O(Y�(�<3t�&y���-[^��Cr��C�U'.���}��|�E��wO�����m�P���_�1_��ce#�(J�����›%�%�G�w�E��r��y����'r�Y��.S�^�:azdh���|Al�o�&���&�v����7��%9Yچ
�#�3S�u�n��9� ��o'Gl)}>Jf��d���T~�q4���"$�o��,���� T2�T�-���9[T�s	[�V�ʙ1���¤~[�����s���sv_l`)�ȹ��x�$11�/̭�M����5,4,���K�M�n��n~���I���\�j�('����O��͇��Q�w{Y�|r���A!b��X�9��Z^�r�'�t��<6�8�����Il%��S�h��IJ�@���$���g����HV3|\�p�gU�>��M��(�Z�y��sy<��9��/Om�yxﳹs���}ؗ
y
��bZ��%���g�3����a�Y1�ç�	��o{R9�����.Q#���D"��x�����Q+��:05�_T��7�% 2؃�ϫef`���}�2��Ka�ITGFG�'$e|�'}(V`�y��R�@&q��Ƨc���s��*��dT��~F����\k�2ט=ͬó>ކZ�����i <6iSD
[-k#���O��Ϥ�wcP��//�פ�w��W��o�~��K�;I-NN|�u8/7�<�@��'!�o�����=cy�i^{�
�B�
�H�$��t�ٔ�
�k�L������'9��d��QR~�֤2G���!֟�!�5��SR�1���/hhz�˟hT�͒�-�\�N�h8����a�`j�5��iٛ��$2ݧrTR�r��G1<�F��\)�ߎ�\$�z����!֗&j��3�x��}�O�uo�h��A��⌄?c�F�e"��7����M�}1t��?�4��m٫���X�ʺ�J�yIQ
l�sLN�=NbX��'��}�aq�qoi��\f��RBp�m愨L�a'+	�㭼�������?�s\�f<��{�]yC�>��i�6�s��!��UC��\��B�T�1�;�2
A5��T�;q���ݧ	�{F,����>����.^t��wM铼:Z��V�����p��ESNf����`��=4�gv���-!��=���@�q�$/H�a�p����q嵻�k�4Z�__�hq
^J�_P�dy���p���:my�*��"4X]Bx��O���"���ƾI����iZq���"jd�J���;П(��᝟�!6u��Jj��m����SÛ��� n~�K��">-}���~&�~l�޳�����DIv$�I�^�g�}���G�sK�9���D��f��)D�)`���L����G`�zs�lh;#���&�X�܂�i<l�ùC��ߥ$����8�۴ʲ��D(����vWX��	T�t��m;��,�E�i�nq\ܛ;yk-�!	�B@,��{,���`1��)I̕b��
j㻂���%�ug!�ǟn�Կ������I�����|:!��W����w5����Mm=o�+�Й�|�T�fb|)2�UX��F�MՖbϗl"�+�?V�@��&HT���f@��G8���Nׄ��-�$.�PWM6a�W����E
����t�dX4kǧ�O�d��4�*L�U���A�T����ƽW�_u9u����QE7y���3)��/�/�ث	��&sU��U�e�ׂ�Z��3����y��mS��"�&uW���}��^[>d�J�b�c��Pn9���v���*��"n�m����L��)&�|COJTW,�i��,7�l���;�ѐi6����*�[b޼*���
�#�r}vR�g����9:o���]?�V��E�U&ҳ��mi]����-�w[]�&`�A#���*$�J�L�I���Ew�EIa-51�ۇc2j�52��Oɫ=xs�MV���(�p5I�OlM�@������}��N3�r	:�eP�p�0�KN�K]^�cūd�3�58���Y��Ƚ�.�TI��ҍ�Vw�UX�����1�	'�RWI�� �k�
�<�K��rUYqGN�0s�9�(���2j�g��_BA��UlЍ����H�s*���|ԧ�?hd�;y�R�tZ����g�\�j�v[�4���x���6I|Wu�j6���/6zvg����q�B��NhM�B=Ѕ�E�\��G��%��s�>�mH���.n��Qۑ�a�5�Q�n��-�O��lɗ~e&��|`��������A=7��q��>��F�_�?E�y��t.�x�
��Z��� �7�X��d�s������4�'E�sPB^��6������2&P/��YE�G��Q٨�j�jZ-�)�>-�)WU;�Г"�?0�_́����	*}
Z�l Hʎ���_�	��3jǗ���j�N�����`��hi~��ged�U�?$L�Kk��<������n�e��O�S���Gu�ҹ,�sCuuC�%n��&�b�\��AC'���H#�|���#&��p�򷎡�zP�\zt~XiuW2�aD��ס�br��wѥ�t{�Ϯ;�}�6�V�'�ά�DV�ݜ�;x����#�t�R��L4Z���~�;��Dw�&�w~<��� �!��r��B��k՜3����:���
/l��oب��l9�*��:�	��cNԧǤ���&�^Zh9x����e�p���6h���B�_���J˗:6���Q�Q�0��Y����7�lG't��
���Q3W���-�����8c�m��$�z[z�xLK??x�P�Jٰ���k��!��m8?��8|��	Àr�k����O�hf\8��s��M]����"C���݇�@��F��/� g���A��U�4bg��[����}t%�|�nB�o2�eB���D��w����O�9���ƫ�A�,�wxE�&b�l���'��ہN��ո��l�H���u�8��•W55�ʠ�u���%�/����՝F�NV )����C��mѻ��9�����1�Ԭ�����prOg6������F�)�a�y��m��,p��=f�v���%	�io�)w	��]����߱�3���E��i���w���q_!��Y(��&Y�`��x�ߡw�hD��r��J�1�5�1���W�V��=�8�g�%C�����?���6=��?v��
餪;�x�~G�n�?"�T�����Q��7�uu�D��{�W'��Gr�|#�'���RH�����w�Z��%Ҿ<<YQ�+trJ3��t��AN����g��:@�u{8�'���Dųj��`/n����7zrֻS,L�Ho�����ʁk5pk5�J5��+HV� n�=������l:�7�(	
=�����E ��XR8gB]�?2B-����GS+���B��tt��]X�&J(dH��N�*WLm���j`Ka(��_B�"ik!�ٗ/�
N.y�y�w�
�~JH��!���/��{�Ǘ�CLճ�<�C�|�ξ�&��u`���"Dz�ǠV^����F�l�Q^��<$�Z|ߩ��-��ca�%����n
K<Ara�ET*�+�i���n�Z�W�ܑ���\�<J�l�C��*�S_AC���
�L���� �C��m�54x���Gj����yý#=%�yC=�=�m��*�)Q5�\q.�+�x�멳y��2b�c�+J|vqC���M͠叻Js��٘l1��8G
�v���ӣ�=����۰K_ypY�
���ס$�xUa�q�PβG�96��FN�A����.�㌐AL\�T�~��EZGe~��_�1���0��{#سu�č�eZ�feu��P�s��d�$9�,��eJ�9� �^��"����?�G��^���vom���{����h��
��e��ܠ[V�����i�y�F-r��K���:�{gq��=~#�/#t���tM�&RY�Ie�&�}�R���QR��?��d��E��r�Y�ȳ�`s�y�2��A<��1e�>�pv
ý�U�^�Q%YR)�}�ǎ���%��]�qRE���Z����\4.�Y��ه+NJ}��Jyi[�
�:�6���{���~R���Jv甮����	��;� �˨�\=�{(�����Tʸ}��mH�Ԛ֞j�y^+�w\�'����<��p�R|tb�^/b��[����2�B�~ġ�~��F�s�������]v���|�xO�yta4A2���p�N˕8��`<N�^g>�p_����I���G������ğէ��{LZ�`A�w��UNL��FXgSX2b>x׵����
;�@��5�w�$���]�V�4��o��s��*�A�wl�%�n��u+���G���9$�S�7�g5���=\כ�l�v���=<�`dt����2���"�x[A�_�Ӟ���1
'A��O"�+J�"�۴����I63:�iu���e�A�j��Ƭ�6�2O��I(�Pt?Z�׿���s�x�0�1x���K֫�{q)%qq��-�|����R9� ��\C����k5�⡒jS�X�.��M���/��gzU�uj,kMETw`�u;�@�*�;�d�
*Uw�����$eu�
��[v����`86ooo������Vƴ`��ݒ�5�{^M�1D��;���}g;��BN�{�}^�P���_�я�$��v�S2��~C~��٢뽮�4�a�c{��C��	:	�N�L�g��:z������U�O��׮��/�S%�z+`���t�VKC�A�*.�ՙ�{�>AE�'�CTl���`�iCN�0�O:uJ�5XL�	Uޚ���TK�X�>o�0
�Ae�e�8�w�׌�v6�u�8`7�ՠ&����v|�DDD�z8#c�)�Ap�t���`/{>��C�������˲Y;If1`)q����U ����׆�D�VL����	�XՆ`�#+)���#G=G���&����
�d@��?F""袟��aY��S�a��绠�߈7ˬ�hl�^���X$F޽&�L%��)?rM��ʉ~����%�s15�
�,�P�3�|����,�>���<Q:1��F4��2���o<"�T��c���S�<P�����R���^�ރ}��{���_�u���+�)w��N�z�r
>���8�6������Y�YlG�O�L���f`y�{>f�3�z�``@���X,��b��]"��9�-���m��[�z�)�#.}��,`:�ӎ�{�.���y�r�
���w�t��߯��\�����W��S�Cywfܯ�@�K�B���Hm�+�_�����|����5�T��T/��|fvg�{[�N�W2�ýZf�JM}x���O��@&�EF�s�,/)$�a������	fˁU
�h|��y�����b*t�j��g:�B������7]�j{�N�E �.����;`�����Tѧ��Q\��r��#s�}�[֠�����D������/�<��@H�o�-���C�ek��?QX���C�=��
�����l�x�dR,T�f|���ſsm挬y����w(2_�{of���4�	�՛ ���O�ju�6اC�1f����q3���d���Б�,EG���X�����_�"�K���’.n�;⮸'�O=�^���p5�8
�~�9(���ȀR*c=S��35C�.��7��<��}zT�E�B�zLF���¨��zI��$)�Xk^3�����;�i �
�Db:�`�c��1�r����6NJ�!��{��CP\
��IF���	���hBW��1klGPSK��h(i�R�£$�H��i�|�*�!<"!���&��Du��E-�2�e$�.�q[�mO��ڏ^h��1��dw�
��G���p��<��r�%/�h�)�k�N��s'j� �#DH�n�z#�O��p,�*��j����w`&�Ʉm��a]oH�����	���9U�Rɍ
�BY�F	�;9Y6����P6���8��ӯ`ж�t�/���/�:�}��U�D����VZ���O�r"=����+�y�J��	���'?#�;,��0+L3��d��HD�K"+w�1�Id����:�S1⎐�F�D>Dzג�.�]*�a
���J8��x�R�_�v�
��8�D��Ņ"ʴ���ܞ*=��ef���������Pͅ���wC2O�SæH|s�%
Ƒbc^
c4`��VD�$C1�^�sM��Ɓ�Ka����3��*�)�����$IH%־��~�#��r�PL��sgZ��[�N0����:I�	�ۜ�IxOl�$�lh	���$�b�ƚ$�2��p�{�\K$�p���{H�Lb\���.��(������;ը�ѩ��4ߔ��"��j��"�i̗������(�
zI�Ϟ���V;a���
�����N��a@�����jp���Q
WAC��{'�����s�8����!M~��
��>W�`F@z�
��ã�|�!Q-�ϴ:
Hƨл���c��>�'��а�17)�9p��@߃�	M���Jz��1�ˣB��#�3
��0��$��2͇����3�Lc�4>Z;Ҹ'A��d���&�!H��2Y0Lej;�J�R�hR�^��0����A���b<���u��yO�}��wUT?�p-�@���J��Ýv\L���0d�ݲT(Z�� �;i�iy�-�&y�ļ�Ym��,��mY1����z��2:_֛���/h�z�[��o�E4a�D�!��Nd�p��n��KH��f���V�jq��v�w�[ky93�1���������V��&j�r��Mp�p(�Y��J=��]�ٷ���Vs�k�ƒ�4w#����ݱ�JT�_:��B����	��#F��`����.
k[z&��ѩS�[��l��u΅Ý�
<� e�/Odq��]w/,��r	��ü��b�0�V�Ƥ�ߴg�+һ̽0��sf.�ds��DM����9E�G��ʂ�{�ᵂ_��n��B�bS���kh�W��F*����޵��)�P�ͤC�7�;���a��84>|7�l�~�J��a�����c��WH1�V��~�WB��M���,d�R�7P���n�M�5�ޠ��&u�/4��>ͦ�V�/�O~��|Tjw��H?8w���\Fm�)�E�ᄎ�Z�n��ؔ�䜉�+���?ɂx[�C��`6��w������8�V��������P�?�'@�5������0V;
u2"�iJ@zx�%}?����g
@��z�����x�U�1tp*�{�{kO�č����Е�~mv����ه���_KtQ�/MUb�|��<<_Ci�
����ߓ:u�6O}�O�b$��W?�%�w%�^i�-�A��`�	U���"ɷ��>��jz��E�/%�'~��,!�+�%|���??�;z��A+���	2�ʳx:$'�OBa�.1�	�_I�
��8��a�sg�y��ya'��jދ:��a$�V
���T�ڊB��f&j��tX9�1���D5�p�ռ�1X"�y�c�����-z�+�F�l�b���'���"s�*�aDMz���?f�=��7#�{P I~1;	�P:>���(����je^��<�Ep�+��F���ѽ3���ۓGh^!N�2�޵orB>0O�/��%���y����;�r�����Am�vKPN���v��G��(�^�����5O\{M�C�����}����V���4i]�-{��&�Q)L��,&��aV'.��"�o�,XA�����	[�4ԿG����%��6}�:��V�[�ָ�ۀZpNʵ^C��om�p�5�'�U��8ʝ���G
�Q�"��YqЊW�+�U�O��N���K
�y/����3�4�.GT+r��\"�$^����\�t�Y1	�
`$;��•1�&S��=��Ͳ���?+�5�bq���C�$s0WIz�0l
�x5�
� �c�[)3����1@[V��=an��f��ĵ�"�E?Y���<�d��@CҞ�>��Зͨ���Q��c���Q��q��9���#Mz4�H���|�{A�ç��S�_���A\��q��i��\�W������sęS[����zw�KǾ^�t��9Cږ��6̗���I���u7���F�/	��b�*ȧC�W/u�u\���ţ��{�z�N�3aۀ��z�_�8D���t�Vx�Ė7��Ab�Ne@���M��gG��DU_�Ƨ�~M��WWP\,��/c�=�篘�֒�]�
�kdU�fTT�*� uSy�1�(w�%�|Pw��^{��$K�/S��ƠK�r�h��>c��4�5K����B ��׎w�h��S��0s����A���˂k�[E��ա1�W��]@��uX��x}�nauM�j�V�.Lh��Rɴ�jS� +1����yDӍ��w'�D_��[KU��e���"�b�i�6�L�����٨l�����H�3� ;	��@��>�����I�"�H�kO���u��f�i��P;�s�s�72�Ř�8�����
G�S� �5�* �fq��G��<~���S^����f��K�"[��˰.|�� ��I9�T@�#,�@����|K ��f�9����A��j��|�R7���+t4�ὃB�I���0����⎣��,�Qj(��T�7����x �w�wEv�>��#=Ƙ�N���sli�a�nN��tE�ج#������c�1?��9�]I&��Vχ�����y$rt�dv��1Gcxm����>�
��8��|�1���(5���KQ�����X��Bi@���T4	BrLzY�Y�������A�O|d�5��#Agk��`�A���3s�<O�VUGB"�]8��=)�X���M<��+$ d��o�u�nU��^��l���yb41�[���3C8G<><H񓧇��'������ё� �`5��N�'@7�شR9����KV�`�?�#n7�����'��}��#�R}�X�(��Zb��!�p�����'�]��;����SڴvfE-6Q~p�%�Y}%"�
��y��r)�I�l ���a[̚ʶ,�rʻd�\�z1oQ���p(���`e (����(�^�+�}�0�Ԙ^J<����C�֍�@�Z�d�0��6qlt
�&���3B����"a/q��0�h$t��	�J/9���F�rCpE0.���`(�PP^^бf�$@���PM��d&l���O�@)��RG9D>{�:�����V�� �2A�~��3~�j��-ؤ5:�h��]^�Ih��.��@Z�`�Ĩ�D��7���(�7	Z����<�� v#�Y+9^�Q��[_˰��Fq�f^R�vj��Q�#�~{��R\YԸ.��HM���[���v��6*�	��G�Gpd�Ĺ��`Q`���KB;*L!{ّ����%vI��:ڗ#ɡ5�Yb}*��^Ó�Pp*�����w6FKi�fd����^J�	Vn�o�Z�
�U�z��	������%��.+d���ICI�a�_غ��a��iGِf6;����5��·��(��b��@���C�&l}�!ܒГT���	j�z��V��ϔ;2b��G����V��/2�A!�)�� ��X��%h��ې��3�Z`>��Dӫ'o��'��2�)�P��M�������\S��[�NY�,�Dz��J[?8�	$�Lz���W�7'�������������}��S\�K�����>�z�Nj�l�����|j���Q���L1���WjF��jf�t=�;�c��]%'!��/a�?����tp$BQ{�%xH*4xA#��R��[�>i�d^�bhe�8�����w
v.�]�ލ����V���Hc
�Z)WT+8��`��
���<ݍ�J�#3�Z{2eP;������������|W�I�"�%L\�K�JG���8�2n�GĐ�����Q���E����Jc�MHEF,��qj�jӣ�X��c>�7W��i�΀S݅�Z�|J �q���)\��ǎ�jf�bwh{ܫ�ۨ��^p�B��g,�uɼ}�1*_J���D|�D~=�:}j�0dn���q�E�[���d�CD�[�b}��Y�=�t}�����vC���g���	��
�?���O��c�^�D�^e���-$�IR�sc��ʧ-��� �o/h�ҝ,��s��Hv�˜	Ƴ�Eɚ�v`U��
�ـ�,�d��(�ص�vE�l�����^M��;x����ރ�#�X1|�l�ճ-C^Ѝ�)�*,K|��0q��^�Q�U���ă�|һ}{.���x
kټ�Y(ւE_%�M�$K&�OmjDb6�)#Ź�޵1f��Š2i�l�s�޳���`����ߖ��5�m�9J��1�C��q��Y,�ee�K|�ԬjS0�6���H�r�fok�+m���F��l-P�ƺ��{ؼ'6J���a�Bj&�����P���ӺE6ʶŴ��[�	�e+`lZO%�C�����/�R�^���U<��ٸ"��I�V�U�ƍ2���4��)��7 !�
h�
�쒚3�|FE�����z���0F�DP��CJ��u~�}7���[��`{�%D�h#�vs�9�K!�[q���X�Qto����w(~�Y�	*R
EH!�Y�}^��^-o��fFnJ����ˊ�z/#$�]����e��O�saݣ?���#�r���"~A�"�L�mO,>ǻ&� $?A���g�H�}z4�y��~�C�ۏOSے�;P.I�fo/v����c�Ӫ'�F��|�$����
�F�ؐ���a��*A�R�~������zㆇ9��Xԗ>Qf�O���!�<R�q��m�)�C爣��٤1F	�͎����y�X/+�U�A�Ù��z3�b�.&�o��Q��m|�$5Y���>(nw�.Yl��@
�!�g����.�o"�y��E�\��	���_7��rh�S��"jiJ�}�$ S(�zyYz:���n�h	a�M)@v�ΒA����K?J
�׏F�Xu��b=���0@-)��ANл"D�b�o�o�Ҏ(C��-_N3�$����6;��-�7�t��g[�q�Z�G{D���S��Y�����o(��q�)��x��t�+XV���@��
�y�:A��"��P��`M
D�S˴0dC�� �e&�'S�)�CT����U
���_��\n�08R�<[�d<n?Q��Պ,�R��o>dڝh=l�7�Όb�܉iT�d�[�#�9I�nR9W�/�3(,�NK$���*��#�ϊW�"��x�,��l��P�+���^U�/~��u@O@�w�͚t���s5�Ro���L�P� �	I
�����s
:��w�`2�MV@
�4r^�_��+$)��Y���2��P�؟
�)#��,M� �]F,G�di6}�A⫚Y�1� Ġ9pzԖ���w��#谋�$�Ό�2K
���1u}`䦞	��Ļ�qQG���0c#�'�����@��ԡ�j4-"�s��Oٹ�γe!�A^0�fcd1��� �g�>0��˴�p�i%i�!��Nm���w���oU�4i�W��D��	�Ħ<�1ԉ�i8�]i��;0�!33��@��xL!Z�X�T&�g��Vj�Eլ�E&�X2�>Q��d	�P����6�b��q�TF���,��)�����Ւ��c��ԕ�HlrC:����b9������W��Ԙ�����
��-�3�>�{z�lv���xK�D�M�zvf��ո�c�Q��phz��Uz�Fe��˲s�zҺ�	+�����Ƃu<�yw ���|z"s�e��NIL��fZ"c��	|�����~j����kkZ�B�L�1:�j
������|I�)��琣aǔ�S,��'o~�}Isx�PL.�%��^�g�Nyx=qu(��y���s�+|\sy�HN�
<E�+=�G�@ �� X��l�Q?^蓡��!�f���28F��3Ɩ�G�C*�2-�d�v
c�ũ���l�l��t�d��M(aݼ�OK'��p�� ��X4����c"C%��@34zB�b@fn�)ȉ靝c�2���N�UY1��@a�j��<^RW�h<Z��fI=�nS��pT�k��l/fs/���g\�0��C?48c�ˁ��;�(H� C$�6����6������(M=�1F�T�V�u!
�P+���!D@-��0���r�0)�4ZД��*q)��)��,>��'8Ü�
�i�}��Y0���O�Zz��جѥT:o�M>��0Y�e�9�G���	8.�e��r�a�g5�aVH��ˁ�'oX�L�z
nb��}D�,�rK!V3$����� $Ih����jY�����Á�h�(�R����ז���^4��Վ�w½~'r�-MC�A��9Hj`_��x�!Z7��) GNvG��w���;;lW�+d��1���q0�3h ��TϦ��)�w��ͻWO��ށ�ݚ��=`�e��l��*2v��_�R��c������~�O�����G�C^��y|-{��a�������R�>7x��٥�t?�ڂ;�ü�G�{�>�
m9������R�D����ύ>1��#�DG4;�t�y�O�~ę�y�����v��!Gl䳎��н�=޴#�V�}�\�"� ���%���s�ā%�7�*�ּ�y���gS5���}%tz�#
X:30qG�Q����/��H��#���G׻�|���S��}\��uG�����̯p�*##���3�+����P<���dM��ªNQ�#M�l��P2�r-�5��]�I�w�_�/��{�;�b(*��*O�hc�h�ݯMz����n����>DŠ	+#gJ����ǒapLE����=�"���Ʋ�"�W)\�F�,������+b��a��a�Y��!Df���J�4�����<o�� t7)Cɂx�[
��:t���"B�#+��R9�̣�;yi�����=H��)r���Ϋ1[2{}�QLy\�>��D]n~�w!nc�᳇Tp�f�'ĺ�B�]ʻ�����
t��y�r't(�3�/�!���y;�Q�<�!�j��.
r���@�qՐj��%�����>�q�k/1`)���TS`�&�uڮ�sM��}N�.f"F9��=��D��>��΂�tW��Ms���j�$��f���%ת(I�^n�B
�qj5cdEe�k;��g>��:�~���:����z��U7�[�V*�?��|���q�I:kԦV
�LT��bn���� ��Ht��5j�����
y�`�Z��ff���=�p:�b ȥʟ���1�>w��x{�E" 1�B�.vR��;c�����i��|�f9��P�*bi��y�nY(�A^��5�᰺�m�"�S�:�kL�4�F�x��e�矜�*��ʉ�,��vo�t�s{�����8Y�/���*ݬU#q��d�;��0n�?{鲺`\rS�db���+�ҍ#>��ނ4��E�%*�a��{YjE���L�#�`t�����[�1<s��ƺr�t���Z/�p��WA6�&3�A;i2�27B�ɰ�!fR
:1^�甅|�x�.e6dMmr�<�+���,}�(��pp��c0jk�bs�=������,?�/�=!��T+!��!�t<ș#��lI�Rl��/��2`P�y�K+���"��w���
�dN�������i*L���K8[�/���(0H����f��k�̀��^̶�>��X"��p�uIW�]�$�W[�~Q��(4��پ���$�<�!<qXho��Mzn�dǧ�$E����NL=�YjK�(=��͎/��!/�|!*�QR`O�!��ȺI)j�ʙ�t5QL�Uy��eT���H��>����8���̐d�m��W�S�J�$���F�*��ꀥ[�-�3�G��L�@��,��g�r���8��x��jr�1����8��GL�L�'bETQ�[�襉�R���[��<�7#�.ZJK*�< �|�BMH�q�����,̅��9����̕�7�a�W:S;�̚��%>��N��To�(����Bw�MJŐ�$NV^z��Ć\ciM�5[g����7ג�ͥnY���`T=izw�<��,$�����iG֘0�D�.W��W�Jd���>�H�Q:�p��
�x��v��/��w�]x@��pO=��a.�*�/�/ND���%Z�2-�?U�-�9r�Fd"d�U���#�Q�(n�̊�z/���>�" �T�Vd�o�U���Ʃ()�I|��WYe`Y�H��=�>�qc@@�#��7��!6v%z�-�ͽc>��6�ʨ���5u(�����,R�p�#�	�C���2��j��^��'�q�O�P�Lf2S9	��⺹B�4��j��q�� .'�RKSg+�7C4r1��2��3%���#�I��U/d���t�š�����15������VG�4'��;����M?�Sd]F��7;/�<��r�ݱnyt�
�ޤ��0��8b�Т��B��%�w�B�$1<�I3dc/R���OR>�j*����^�������eE².?K��h�!�����v�8LXL08@+���=S8
�{Xb%W�0h�H:CP3y@�l�*O�ش���@Z���#i�z��~q�փV�ͱ[P��(院ʽ���Uu9,PV�g��p�
~��E�^�t&���aڔz(��"�7�m8`@�"?MHQב���g�B�OdXS9A2�
M����Cy��Q�=��:rr�/<���	�?��yN57�Z�Tv!.�u�]�����d���9֑/D�\���>D@��-��s�|W�ɫmMV�:�bG+àB��o�+�,���ڲ�j�/$�_%$&(ǯɊ�A
�� ��:�~�.�'ډ�cX�Δ��|lG7R���3�<��4�"PS<h�4DB�Y8C]P� �
{`�٩!4�����>�Aض��&j�(D����-��ڣ��f�KT�)�C� љ�@_����I��������tn3��l���+Ʈ��|h�w	Z=HEo�>����AŒ��!�%��t��d]�0A�5��cٻ�e�-�A�#󸛩��[Df4�W�������|�@>��%��D�k�VAW�aE��CɎ���KB��p$Pܭ��(D�M.���@�J���j�q��g�����OX��_<��?���#�U����i��@�UT]쵌mn���s�t&i�8�Z�0p�	�VDO�|zjEt8@��845S���5cP��̉�R}\_)�7�~t��b�t��t]ԲE�����p-��GjۉH�hS�Rq-|�f4D!�`�p�x�G\�
��E�˜Q>
����:P���2��8E�e��f#��K�SOܢn�4Fi��
���a��k��Uv�����G�z<,6�$�:�0	���՞.$�%i���JG����t������@���]L&�7gV[+L2�Ɋ	t�<�4�Tq�*K�?98?�˲�d�T�z€	�n8�� Mn�Ӊg7�xC(�I/��P�C�;r�ҋ��*��a<z�̽_/񓕁*�s��3Fv�N$P��%�D���j�E�dp"b�Qt¬���8�����=�h��U!�s�iy��>8��K̀�/��j�e�B�'��9A����J^���`=�+1�P�*�t���$�H1i��Ȣ5��]J��q�#$�Ռcֲ��5$Lkq@vh�X��g
&E�
���T=@G�8�r�#�3j�_��tbS�`9�;�;��f=�p#@��M|��;f�|�d��{Ώ����b�^�~>fSkU%�+��]��Kt~m�X�}�m;8�f�갭����|��;��)�c��<o�	�S�{=�E�H�Q1�����C&�ԗ��d2���_�]@a� �z���䳪džj��g�yV�T��JF��ۤP
�A�3���S��f�P���)KT}i`�d4rN	���!�a&M�g��m��]D��.��j4� ����И
A�06��ܫ�3��,][�9K�ۿL�sk�����gm~О�XOw��)��E��ۏ�'G�l<�,h-x�w|�u��5m�\&��f�Q���,/�Lg=�?����.`��&nA�?��-��]�iz�/�a����T=�ϸT��T2KiSv�2��V��12!�6�7�=t�E����,�=t�!��P���1���7s��)Z*�"qo�:6D���1�Q.�%:rq��¬T��[̓ظ%Mt�
(���ڙr֍d�O�<n񘍽�]��3.o��/��Zz;�ÁQ�&܎CP!6�0Ը"�spŦ��:���mf�om�J�r��yx��p"<Z<��:u�8�}P{j�K%2����쩽��l�V`3��B��N��H����G�F��m�9;���&x9�MtO���`vi.�g1�g��3�
���TZ��”����N�W$�C��J��J�HL�Wޓ�
�E܀'G��_��A�8=m?^
թVJʣf�%S=n[�-�����{�^~��7n�	�
��7�sϢ�m�_��P
��:؂��
������&EʔW��S��H���� *
��Ϧ&�'�T'�wY��A3=��U�Z��Vm(}O-y�P�]j_�� WD�i'6�#.1�\27�!GÖSH�O�
��@v�򯘑|/*�Y�g��,Md�#n�\��@�EVg��ԼI�o#�&�����,B�L�uَ*�8Y}��nPB� ��/]�-e�����C�:�R8]9Ӑ�~u��C%O��S'c�Ï�$?"E�P2�'������s�aU�S���И���.fv6�� 5�z�ݺ��7�$:vϤf���PX�TCR�qٻ6��4�y(.�L^GXO];�ha�T�pz�L�_�	���-[3�N��Z��H�7��K:a�>h�F>&u�q(A�*���1���7�|c��9�`�����s����׫�߬r�`y7���E��н�L��lM���>�FG>E4��ƒ�������{���N\F�B.St�!�)�IrS�3�yDh
�h�v��[B7M��7ʅh�8C���^<��w��Ɲ���J���Ll&6�b �kX��Hyw�}}�Q0
��U�w�4�&Lì�(D����e��#� �,0�!h�!R���{����G�c�Tٻ� i�4����K*��0�EgU�o�����ǖ}�,$W�'���%�m��M����:)s�)���k�.��X����u�ۘT�q���m��M���z
g��vVO��.�|*���Rt9q~��RS����#F�1D�	l9�S�'x��P\�͑@]�9ț�A���l��Ō�
���Ly�FT XG̡)	��R�áyi�)�Wlke�d�	�k��e��~Smt�!k��Y,����g�v������|ð���S�v{|>T�_���/R�oA�qq��|S}#�1������`?����)�$���<:EPM:d��&���8[�4+k�"h��]�8H@T�*E�|O�|��y�Q�uB�.c�� �\N�T^蹆��y�f4�F"s�,�I��Wy�����^x�%)�8!�4�p���r�*w	�o�0ބ9����H-ꃓ!�SX��n�Y�d�`
)w��f��nP5�����G�1u4wd#�H���s5�gN�\}�w������n���^����} ��qXa%�W�A��(Uy��y�f�Ã1/����xc�?�,�L�pe�mŸ��/'_��"��:�&�$D�I�Ź(�����v��⻫!OR}26����`G�V����y�(� w��Z|�^PxeC0$8>%I�s��8��O�N[�̣Xc]է��z��!�0h��9���y�"�7(�A��?����EƳ)�d��<QĘ�i<jd�A�؝č��e$� �D#J�Z�a����̎���^�f<1�,DuI���`l�1�����:�m�s|�*mGDh���D.*"�}h����
0�	�s�΋}�8���|%��N8�9S2�k�U�s|�
�V�"�k�i�R�4d��{���c�;
u��?�ۃZ��q=DQ9�Xr���h�L��z�$�)(���u_ѷ�T��}�����5�z��f�ۦ�1��߄��ѐ�����VnVq��:�Ϋ�6Zy�8�ov/
��kAs�Vǭ���	��I�6M�I
��
�^���J7�.�2G~qlz*Z�!f�N!�o\�cbN|8w\K9BA�*�B^�e�th#�
xr�=�J� (��3�d�����`�5ǚ@̓Eff�.�C���f
-R���j�V�v	� g3 �Y�ЯU���ZG(�Ӡ��6Y�b�׷�W{C����$NDڟ�}�xs��Z`���H��ne�C$졬n�p�C���6��V\�Z)-�آ]T<�GC��ǥ9|�Z�l�q�M.g_��n�Uljf2��|��v���=�ud����B�m��6���K��~R�����P���9W�\!^�PU"Fg%D�pݛ�,Y��C�� �0���i!�^l�xk_�u���F�U�+Ro�:r��;'���5lܯn�8I�q_LS16墉|���>[�ɜ��r�"�[���*^$�$��!J��X�14�-Z�D��2�:5ȇ=�vL�u�B��r0�-mr����
�`�=6�ĭ�GE��.���au�pU|K���$cd�F(�@.R�.���O�Bp�P�[u��$�B@��PE�f��G��F������k��0�p��iy'
�$��ڄ�7��3��l�s葢�GD�p.���6+'�C�D�2�N4�x0e�@�Q������HE�ٮ���P�G��4���{��I�1hS*Hx4�Ӫ�x�q��OU�g4?�<�mm�����#b;��ɶ4�v�X�1s�KŇ��O/|�����/���������	�bK���y��
�7s�";���>s+�,ll�"�����_�[�Z�5xg���#=t]t����>�D��<��x]�U�쳞y��W�_��k�
�(<�?G
�=�3|�o��	���?���#���Q�������<@W�5�,�	m�������n|[�5q5y�(3����m�z���q
��c (�_�R���zQ؊���;e��@4�ͩܖ�<���R{	G$�
m>LJn1�0�e���؜?�����a�X�����9��k��5F��BǓ����� @�G����0���Ũ�\�]	�L�]}u`�ފ�X�|�sSy�_��K�6���<��O:�1��;(s'
���q
8~Đssmk_;�9��8?-�e���+�Wi�k�-U!"��\���qŒ���
B�d�
'eJD��#FLj���j�5'e��.�R1iEu�k}/�@(o4
�o�:�<�/ O���f2����$�D0�Jj��ؘ��E�j��}L��J�?�i��Փ���W�]�d,��M�A�p�W7�p�{���΢�%��DN#?��,�Xt����y߅\�u�-�י��w�^���So��&:D��)�ʬk�#��݋���YA�;Ab�$�~�M��{��zX]�I�uݠ<� mp�[�<�^v����Z>V�ۺ}��IS������T�o �_h{�S+�8T^Ĕ��ֲw�X
e�ĉ��t[(�WY�-��Ǎ/�ldߘM��e�A�s�;���(��E�h�����P��lz��F��P��O��nƺZ?n�`��V֯z���@���E�'��n��\����S�-Ԯ:jw5������Cej�R?1y���K��}��u^�н���Ð1��Ӷ{�X����[��
���U�+���>3/���p{�In��ʹ",�v5a�=^A8�q~b���{���<A5�oa�WFP�@&�������~c;���������rҟ_��������^>��i餻s�A���6�_d9ej�727�&�>�b����-�.�1��0a�����O�xt
�	�{!�/2a�2�wI���[�B��G����p0b��;���B蜙Z3q01����A�
���$L�8Z��a���~�њxN�]��u�/w���B6w�VNjW~���ho���j��f�$��
���*F|��S{�/���V`{�ڨDdnñ-2NpW8,���m�H��	��U7�|z�b�!����S�x�<2F��U�-�����|��3�p�!�u���L���:]���;�.o3>Xm��bZ)qq���:�َ�^�q�����x�K�Kld%����	�~���!;f{�O=�Uo��k�ZJ3�&�-��0b�9��*�@�Nd;�1�)�;Ų�b�zU��/ց[�&����H[��O�e�N6�f	w!(�R!�+�=4rQYe5Ջ�+3n�
4}�G9��TT�����yBWD�Ͱ²u
�|b�}lCo͘���B�qv=�*�r�x�Qh�%�qܮ�.j��_�59hi�I���l�N����[[$�ʭ�E��zB"�XT�F+���_�j�1�簩[EC��=�!�@��Q��ո'؎B����^n�x�"�iH��}1x?��d~Ȼ��V9��"���;i?�%Cۧ�3z���Ծ̔ ��V��6�� ,�~*�3��!��@���l�*
�
�Wu��$;�z�1�L�f�O�&�\�k�M���=E��$��>r���V1�hL�O�L���6�x+~���x<�bҴ�8k��ߪrh+�<P9���Xu�c��/���&'���������ֹ��~��U:��ֽ�s��{8>w󞊹��)X�ZU���rd�*����L��!}"9�T"Q�[�/VQ1
Y���T/ˮ�F���V����5K�V��Jl��LH5T1I�A����m��r��-�)���{��		ϼ�y0��Ogg�C[�,����|���P���8�ͣL��u�+cL;�H�Ůxa�OBZ˰"��f]��hh�tρƸ*M):�tKXQ�G^���ރ�.JH!:3���FF2�*��f���f�"gKy����ʄ�n�����|p�N6I�Iu_"�\�A�+6����B��$K���%��N�yX&=RC�	���Z@�|��2o�t1ԁ�ӌ�ttg�1"�z���P7h��|�]�x����5	z�i09�Ux�H�$4�G��Q� 1İ8c��S���!��T-��=����jj
���ΝFdDOͥ�j���
�Ҝ2r�#F1e��=T�*�;������H%:A%
3x��2�"��裀m���<T&/A5�-�E,Qp�J�����[7���/�D�0��ˠ�`����0/l�
w�5��KZ�ͣF
 ��0Z5���Q^9!D�.�sf�^;�6"��u���Á��ć��9u(¤�J�l�������S?����MY��Y/e��<���6��g�,�yI�&�8�&W�I$?,�Q3���L��,�1��R�7'�o4~[�T�p�$ݷY!�z��WZ%�(7���v/�ҍ"���_��
"���P��j(�_|����w������Q����6��,kVF-����a÷���ܝ�f5�Q�	�ʾNe���H���3����sei�(��U�|R�!�Z��U��̮���8�6�o��vs�׳<�a��W,Td�6LN���&��ڭ��ٝij88��ד=�J���,ʔ�12G&~ݴ�|�3p6���r%U�1?�-���u�6����������_��؉�FJ��tW��Ng綾�ż�D�	��M4�K�eg�]��8]�U�AQ�o'��@}'���sc1���F@N
W����l&�,��
'O�"Ǿ�)Z^T8�i�n���t�k�":ȁ8���Y1�h@�^5��N+�Q	bh�'�zW���.ި1�{�A�eKf���kU�Z�ivS����-V�� R�q[&�g'z�I�j��.}�5��h��P��}u�.0������K7�>e���b���f�{Z�v��4�,��e�����q���'|�b��E��򓨙i6��W��
'����)yf�?_sM��v�7�da/�����9�����%
ٞ0�I%%6�ų�$E2���+V�6��k�Է��<�YM�a��T��3o�u7����N4:��l�)�葎u��\F76\ �d"R��Q�3�vn�>�.���҄�І��|iRM��"���tG0ε��(1-~cg�o,����d�G�^��!떟(U��J�W�
��_�bOKdMT]V�2�E��K<Lv���&��fwm���鼤=0<��q�whw�����s�lI�r���\#L�$o�p�a�������5��W���>d��A�k_���7��)x��Ԡ����m��X���)R#H����md���E���
��w�`���7v�;�_��TG�U�涧`S�F�%����Q�"�M��5��!��5$"c����F��f"�Ð��蔆�DP#(�9����6E���\�9K�B�ѨM�s֢��B�G���=��I\�.�����j���$�	�kR�ml�@����f'$1��;�"�zYw�'9�>���v7g�9
�s�R��#L%� ��;UT�5ғ�4��]
}8�خM7t^���$�6�w,�X��y�"h}�g�Ɇ=�k��a�98��d{�4V�H=QJbRѮT5'[��rp4--$!I).���?c�ɇ�<�n����e�)w��]���9�mz�o7"�>��n��E��%n�����R�.�
m/O,�P'���_�$�i2���:'�A�ăSMv���vo�N�vP&�X����u��}:�2u>yOK���7�h��Vk��q�i���'.�9[j�cF��⚉�|�Mh��+�. ���
��v���B����E6ӭ�v��v6��ʓzr��r.	�A�-\p���R8~�ڶMB4°��kx��L�<ҳ~:&��TL`�s���3���rN�q���X��o��B��I:�tIP������s��9.Y��O��<�	�k����"��Ks(GiO�	���6r��'?�{y�=�ø�,�VuA�"7��7�C,��W�����
k��R$z���ue���s��q�ӂ���7�v*n��>��� d����,�d�C/O
����H�q�qgXI�ƥ�$�����_�k���{�i�o?L�daC�7K�m:�r&/e'/O����X�L�A�vf&���b�/;�4��N^�Sy)Lh�7�y6�5J6Ra-̅�06K���P���6���&BڥI���:�P'UaBW[ܐ0�R=��""���i	iN����>�3H�/{����Y`W��[}1H4N.K��v��)>}�p�֘�㿗��=��š�F��i/j���9m���$8M���XJ�y��	TH4$1T~����g2���ڮDX۾.҂�5k��8��R���B�i�	�S,�~���j>��XS�8�;�����Ctl��Ͱk*���e���Uوl9	ҽCd�.���b�!�Z�^�n�;��������,D��fkAJ^�q��*��HPw:��?$d”bt(̩��U�*t���	�&>�&(�[+g*qA�m�D1�P#�1{?RD���
i�LHp��Y��,���1P�����{�V>�:����n�����Y�}�/
8�DAu�˻<���R$ƣ�����lw*���V��4������vG6��/"��w��PXiž�ѝP	)}dk���ki�A{rI$=��j�KոmBT���B3E�1b3`��`�+!�	��	q:�3�:NO��6�"T�MK�=��sB��Iy6c�^�M"��$���sw�Nn���M�Zf��plg�ڑ;�d�"SR��f#����p���
��y�N<��=��	��0X����2$���m��A͂�g�4�*ǝi7d

��vC�ӵ>�N�J�S���j�?I��l�C����`H���𵜂Fmȼ1�#b���
F�
�Ķ297ai�N�b
[bR�P�ٓ��"�7�Asl��-Uŏtv]zc5�R^�7��o�4�����)W�tfT|f�<G~9]��ќ�O>58��m0�Y�o�c�@�]#-�Œ}�\F�����0��~���΂��i{�vd�������z����2ژ%	��@c���u����-	@8�\�t�rbH溡VXEfR��Q�,�g��V��v�s�pW=�?�=m���q���QGI�qB�m��*�N�(�+G�J���gSd��bXT�"�9�`?|׋N3]
jJ��-`ա�l�La�w���JM׸��lS�FnS����C+�������'�V�ILڲ�KH���,���I��J�,4I��R�KU����(O����Wb�$�k�Ê�	FQ��o9'k%.ޜ?Q�2��8j����eB�g<�� �V�(��z@c���o�ƍbP%]�'�������I��t�]k�彄jXh�a�M��A�uOm�� �F�ę�=FYEL�AA������XS�M��hN�
p�H��\F�-��	S�t:y�.a�:���}n��V�"֭��d�DG�HE�$(݀띀Ҕ�1��Op�������g�N��I�]��JG1�W%�u�X%�lnX����iiE���)������ow��;;%��Q�̜b�G�ҕCY��z��[�I�3�hB����P��50�@�k��F�H�!�=���~Pq�`��61�:�VS(t���Y���ڼf�oqa�bҖTi��s�1U�貤31Rz����KѢ���aj?pm>��T���V��ZD��pO-ϨA�Gz��)D�B�8���O��s~���(y�ق:��s���l|(k�UN�)�x�{�O����Z�p"FS��xG�T,E��>n*���,A�\v�;�нg��74�ȵ
�.�[�
�}��K>,�S�b%CmV���b�Z�u��s�V��x�s|�/< �nZ���@B�����"�������t:�`�*�Z�Q��
B����X��av�j�����b�PX~��"6&�-Yٮ�b:���,Q,���e�l�&&�X1m+��5x��
��N3�T&=��P�r��(�R�)i�җ�J�'AH��*.�x��z����T���x=�������k��_�R>��!)���Y�!�=Nu�web51VL��U	�3�^���X)��S����P��?
R�R�:o��k�����Ԝ�,c��Q��J}��<��gK/�,�0Wq\�KT�d��xDzJy|�Gl���ï�WL�Ւ1�X1@\ﱉTEK[����UN+�_4N�ͦ�k[I�B\F���F�y�.,rb/�A��h�$B5�E���t6ɐL&�J���̧N��u�ʢ(���Z��z|?m�qeoQ2��Vi�k�g�ӻ݋5Gq����-miڑ�{}�^��;�Ի=/����@U���qu�]s��\�D��l�v�j��*C�y�@�1�%&�[���֝���C;t�2?�H���%uY*�ZX.*!�ܫ�s;����V|�y����Dn�(z:���f�hȼ�!�QCQ4���g���iU�Nkt��8�`D�m-S���2g6��3d���u����)��t��Y�Ѡ7�e�D��G5ɑ<�2�S���i�,ڧl�'jU�YQ5��WZ�%�UI`;᫫f�L�S:�֧k�k�da�����J���R)�,���0�^휢;���0���),Y�`DQ�%�,��i�HΗ0^-���kH>0kz}~��x$�9�����o���v��U�@�IR���^�����Q��!��W֑�p�w��K[���nJ�{��nE�k3l�v��WMw�v+��ҏ‚��g�Ǣܴ;��\w��v�'";�kg2M`6fa�cJ��Z0Sl
�!�M�5�_�M�TXg-�|���1����J=�5D(Ǿpj,�53�©�Rg�Bc.�c�&*��h8�mO�Tk���(K�]B��L�*�m����5VS,�uK��$���i��i-���yƜ?I��LyK2s���M�(�2
����>��6�����e����R�pV��aoFN��;�c`u��(��XX�[lq%N_%$�⨩�=Y����c�r���4�����J(+j���:�H����54��-����;�<Y{�V:��]��nka�B���?{O���i+䖬Ұ*Z����ٜmM}Ѐ=�\ہ��r���F��R?o2�ޜ$�+�W�ݳy�d����V���3�7�Ϝw��/=�vjc'����]�)�g�C�s�/�v���'��^��Ւ����n+u�ͧ���~�O7�ד�+�oȉ���t4{����KNM>u���	L�e����N�b�d��[
e��󭯔�wJ���ʨߐ�4��t�!���1σ�w�]xLX�P�s��5�7���qu��B>��^�]5/4s�����5do-sa�W1-TС�#
d�1D4Q�]L��`1-b"qu����,*��0RTI��NA��+�!�ԋ�f䌔�	���"����䜮�M��p�\�
	�5"ѣ51�"�F�®��.����1b��̅:��G �z � rS�� 
H�80#7r�[��u�x���5��Mz�D��q�7����LD�D���[/K?���x6����������:؇W��Qf��E�-��_ul����o�[��^��l��-�-z�*�žڜ��~��;ڛ���n>�#{�	���7���c��7�+:��PNG


IHDR  �s�uIDATx^�ӱ
�0DQ�@qF�s�쑜"�)�q)��WP��H *
�h0up&CFg��1D`�\D�� B� B����n��,Q��ED��Y�GN����ߘ@�����IEND�B`��PNG


IHDR  �s�,IDATxc�O!������;���p�0j�S���QF
�H�!���IEND�B`��PNG


IHDR  �s�%IDATxc�O!��0j���4���f��`ԀQ�LmQ���IEND�B`��PNG


IHDRnv.IDATxc`B&`��H
$��`�&EAj�B0.��C1���l�D�IEND�B`��PNG


IHDRnv7IDATx^e͹	1��-Fr��{;0����J@����F��1����l�+.��u����>�V�IEND�B`��PNG


IHDRnv:IDATx^eͱ1�M��˸���'�q�c�O��mD)1����)t#%��6�}n�<
���6AIEND�B`��PNG


IHDR@@`�U�IDATx^���	1�Q��B�����}(��0�� X�=��<0�0�0�Q"��F��SXH�/��|4�785"Ty� B���y)�	���@y-�O��j8�x�D�%��g}�u��2���5��K���/��c�`�`�_U���
�IEND�B`��PNG


IHDR@@��M	PLTE����������@�tRNSv��8#IDATxcE��Z+I`�Q���^q;*�>Oο垄IEND�B`��PNG


IHDR@@���PLTE�������pUtRNS@��fIDATxc��?����7��9@*IEND�B`��PNG


IHDR��7�VIDATx^��A
�0�rr�Z����IP^�M�6ɂ�i���O8�.�yࡤ�:R��blEX��,�#�%�C��S���!Y�n3�n�IEND�B`��PNG


IHDR��7�aIDATx^��A
�0�^M�!������R��ǝEa8�'8!H�+x�$�|����.ʛlL���nQ�"��풊���&�����.�~�=�H��>:\IEND�B`��PNG


IHDR��7�eIDATx^��;!@��B��܆U��NZ�EL;O2^.�M=�ty���5�:l!,>"'������̶AM2P��5)\�����%��lկ����e��<C�*
�,��IEND�B`��M�1�0��r�O
�g����\ �Rå�뫝�}�<�x��b�r��U�RJU�jy{M�}����E�9xο=��#3Lo�ꆕˊDٱEl�ӑ�Ў��0L�P;��bt��4��|��|��PNG


IHDR���gIDATxc@l@��3�b0@TbXϰQ$�����.?����f��1ld�rV��} ��@&���P��zAP$��
c��Cw����t��;��Zy�IEND�B`��PNG


IHDR		J�Λ=IDATxc@��������H�ABJ@�1\�H��Q��s�Cf �w��c@� ����=IEND�B`��PNG


IHDR		J�ΛBIDATx^]�A
 �Y�,Lj���R�4��������$�\,e &Ie
��P$O"��z�hT��IEND�B`��PNG


IHDR�HIIDATxc�ODfF1���(���#��D��+,X�P�`�얂"1�pT!L.eP�o�@��(�J��Yp����?��IEND�B`��M�Ak�0����ΉeE^�{h)��`�A�8�&�1vɯ�ܱ1x�ޓ>�.���e��!��Ƙ�s��z�����(���s�C�Ї�����|�H@ N��=��Ǘck��n{���ߕ	Ⓒ���4O��r��
���V�eqe��ʕ�:�G��$Od�04*I�I��iK���{����d��mPMk�0�+!=�Sw�b<�׽/Mh�%�j��}�P(�1���{��ҡ�5��Xr��q����~�4���[ו�	C�$��S�o�
_�	E�e,��hL;���>[�h�)8�5Ii*���zQ)��"C�8休��S{O�#�r!�^-�M�{�A۷�[R�v�,�cV�0ѡ�y��0GN����b��i�m�B�ͩ{��
�z�X@.���!L}N��,���g&,�M!�W�
��a��� ��:O����Uˎ7�br&�n�
ˀ���KN|�dg����
���j�r�/�>��Uս/�Ϗ����qY/��/���)|��x��'w}zY��6]����z9.C�W/?�~YݟO�v\~��uN�,�q�U��V\nA�):�Кa��%�_-3>��f�C[h�3)���#��#�+�`p�.��HӲ���[���B����	%���ހ��g�ݙ�y�/�w���r�/o߼y�7j�^P�u�:�\rw����y~��\�]�?�����͓��Dh
)?����_8ku�Bl^%ľ�yŷ���y��Ŷ�����I,��*T��7'�Ͱ�$.r�g��%=㾌���O^C���*∄�oШL��c�`�6H�:��jꡤ�>b �!���|H���9���O�+�X \��J5�:�V#����g\C�42B+�C�u��%��ĕT�?��+�o��3�̩~#eʯ{I�����ZV�P�%�.ߜ��ZA������X%��F�0/<��P�=�$�ż���"��0FoMA�X�(��8$(��
�� �ALq�+�4k?�A�L.�3r�	-�V����s�!,��m�%i:y��[�c��ن�g�&�ζ	z�H��K�ܔ��]�_j;��0�70Z:���h�tb#��&k��-��F�i�L�>�;�UL�BÔ�`�y<��T,-���8��'S&��eCWSjÛ5�{�/%ϗ��H�=����x��f?�P�s��㱞��������[���Hg�PN��Y[1���X���������o5e�%�PNG


IHDR�HQIDATxc�ODfF1���(����!����*���`!�O��炅��[
USĀ�mP�|_ �p)�*|�R�GT�΂Cj���FF]�IEND�B`�����n�0�_��4)��7D́h�{X�&$���; ����M�}ܙ��ݑ�s��\�d��.]+M�k{�y�8�c�*]{�����,��S]r�#�)��{m��3�V�u� �,����b5��R���n痼�߬z�D��v�8�D�rZ'g�j�̝��FU��&��ޒM��Q�'��?3u>J�P��<�5.��iRA��[e5��3):f��Szh�R�u�j�/V�P��T	��	��m�VtB�N5�bv�
ə>��8J�ZH
�<�Q���a�_�
ucg��3��}ȱT�cT�W��M~���y�Q0]�k����3�Ѫ��(X�c
Ŕ�3Q HE�m���q:Ur
��L��Œ<�)���di��P߲�c&�TR`�n����$
�\�ܘ��
I�'�����=�K�V��43��5�0����)��S���{��f@���Sn�0���Үd���^X��!0`ld��m��k`EH6J[!�ћ�|�g�O\�dC��V�6���q�#�J�~��!Ei�@�pQ7v�/��ז_~<�k�Y�
��2�_��/V3i*�;�b���q���C��7�U�m9��d�j�Ƚ��FU�ᖒ�)���E�a�������v�}�j�Z��˄����)J��4M��r��`1rȤ�u�{���q��t����^�P��T82�w!ҕ�u�C�脬�j�Œ��3}�f���ԑ�9/��0�ϫ�����mr(���9����Q�3������7� ��F�mg"�6�R�>���T��(!��bB���
9��u��ԍ42]�u��xO���!�+Z���-�zf&��AJ�3zw"D1<��{��|B�
��Xޛ�������Lkv͡{�7���7�����/��l���VMo�6��WLO��D��-A�z��M���{(���G�4H�^#��#)��fw��!���̛7o<�Ӆ��\՞�rF����T�L�5k٬i��X��B)���,;�[^�������ґ3�-�J�d���l�j^��������bR�d
7_O����!Re�$�q������*�8�L�GG:���k������C^M��l��9l��G����Ki�R��������*˾���A�"�x��F	�T�׍�bM�EK�9-F��PYs��2l�Djv�n��j
 �`�o-���|���y�Ռ�-��
�D�\�!�j�c�;���S��x���������w�(:�5zuޒ��5+F��\mv��*!Uc9ywP��HD��|!��Je|��r��-ӳ�=ry���V�[�gˡm��I��.�v-@)P�"����ܪ��d��>�D�$u�?�T5��}HfCf��Jg�<���� �)��4=�+���Y�
�o�~��ӏ4=�)>F�)H��R��Eo�I�З�9�C���V�<
����ps�ܺ�w�*X�i|y!�׳�SRcz~L�h~�˃7:%J�wW��&H��pp��f�R�ߎ�:{d���Y#w^�O�1Tr�KP��p�e1��l��!@ΈA#�qɮW��Nq��F-�<%̢e���
Q�-�g�c�1x
�S
�iB]�>��ɝ�5F�ᳬ�%�8�p�E�EW�?�+$w	�,D���QNA��c
��tys���������t{z0`��u�k���S�������LA�>$�b���~KS6kLhw�vE��k�U��Z��"m\!M�hc�
R�FO�lB5��"6����
���Y��n��o�#4#P��B'E�P�_�P�齎|���$����4�K;j�}P���+m�ZrJ�1�y>k)�"l{ү�$�M�1n���%�v�~�k�!tɦ�be�1ݯ�6~ |�^Xɝ$��������Ln,I�5rTj�^�H��eA���Z�m�3�D֭�!Ϙ��7,�������4�~�)2�D���_��M�ȵXG�����/�/����ձ�	����N1��y����B*d�	�QD^ϝ����VQ�=��b�T4�|��s,V��tı:��ӳSl4a���L�p��v�[܌#� #S��k!���#j�`��"(��up3K�;H|�]r܍��(�y-j��Ŗ�R��`l���V뇧5z3R�4b�h��u����^\������.���!uڶ�MbpnI��q
��%�E�0̉X��};�NJ�y^h�|W-�B�**��hf�z&72��G�ܖ�����q祗��~Д)���i���ś&����z�^��B4
P���U�rI��V��G��"�ǟ���w�B�*�x����W`��G���ˏWq]�
&�B���ࢋ;O��ڸ7�R���@g�˨t�~z;�t�!h������WKo7��WLr��X+�@/5ص
4��"G��i	�[�+U���;C�3��pS]�X��y|��h:�+]��\���~99=���*5:�e��K��\f��Z4KL��t
Z=�JV�&F�u�@_z�Fa�5���zb�:C�d���\*�B�i�K��T�;���/�70�F��t<�.�+�.%��ڈ�W#�
?��8��+�"��T������atAbt�Er9�e�@��!��f��f�Qҹ5,��@Z�I�C��X���X���x: w�B�ӹ������BW��q�3\��L��t
w�w���T��|9��֐#�"	n�O*�� bW���+��R�k��ec����GD����,`N�B�wQ@����*�9<֔�6�z'=��>cp���Ƞ+���֔)���)E��Ѻ������"�x\��˖3��|WȈ�a����V�h��c����$
�S�����vPy ��8�r�e}��-3�vw�W\�����UÕAb
q�[dX�2NI�Dm�k�Y��I�l�/�|��yh��{�꜆M�p��]���%ڻ�sa�|�-m�zՏ��Δ��f�����ʃ�|[���<$�jRi*�{�����,�S��>[$�M��,P�q��1�m�j���	M
�'Z�����&j�h�0k"~,����.�K�SI�ZɄb�-���"I��Z�,t�������N�����F�Rd%���&&��j�$5&�s��9�H{UC�Ƀ/�p��(�6�I�Ea��w�P�m�hZ}b��Ν}�s89�u�@�4�[�e�t�|/˾q������
\@�(�^��^k��:&z5�::&9��]v�Wn]�K]���@���~�:fǞ۸�e�عHo�'힐�f^x]�k�v�X��(�VL�8�9c�޼���Vҥ�'@��[��wx>���རiZVe�%t�[,g)���Tv��3	�F�,$��Nwm����K��~?�T2�Eݣ}�=�9?|�U�9���±�*�=ÿk��G�ۛ�}ҏ�KB{�n^��h:�Ҧv�i��9��QG��~��{`���8�V�٥K>�E�G�e,��Y)�S�!�Cr`�aZќ����K\�.��<^ ���}.����>e��e`��RZ9�z�v�N�~��)�h�*TC��2I�jsd����<��Hs��Ď��V�5�c������CZ����m:�k�{��c��;t�~�x[-�g/H�.������f��_�m��5b́6�'�~A?{{[�O�b54���d����p�ܽm��?Su���¸����X�r�6}�Wl�L92ee�d�I��dڦ'y�x2�����
��5������Xn�z<E���
�R͗ZLg���~�O3�˙V�(rv��	a�e�h4��0	{�!|6*;�*t����N�j�	L����W'�.3�L�(I��"q$a����B& $�G�����א��/�Y$�'��9i�4�|����Ȑ9v
)�G1[�g�!Y��1�of�e�<�f�jŷ*.̍Z�z������b=,�0e��Z-<�����_8�1�VA�h�0�"a�R4!fh�%QL,D�ʉ�d����y�6w(=�,r��%h����m�m@V���N*;�Q���#�e?oFȩ;�D-�+M{�BY�qTd�:q���cy';��d�#�+,�gY�˽�?х�(�E�yS0�+�}z�1�h���JH[rA~c����[�=���z-8}�>l卓�_�w9�Cމ������4V�U:��\��k��#<�2�:Z���������ԅ䆁�r{�kkϵ�#3�a�T���TS�4:���*~%�4��yuMyf?Ez�v�\�o=�#�,;w�k�吸��X�*�T����"�`������bk�$T`7�6�0.��ݫu{�D�TЮ�x����P2�m�t�G�qL+wh�����p����;.9�hq��x�d��dtc��7�A{3_�Z������Ђ������=��qɶ��B}��]��j�m���\:����j��9=��߀�����:�6��\ܴ��x�������b�j@��ڧ~�?!���%$Yj�}�	:"�գ�-����~�U����!�m�+L#�P�5��вcyMW����ǂ�ܺ,�Uy�\`\�/�o8,�wU/q��Ʃ0�g;�I�_����3Mq��Wa��-J���Z�J�c%�Ү]h��7s�í��mW^�#��c��@�U>�9�Q���r
k���Y��k7��4�FH��+��Sg����O��|u�֍�D\Q��>^lyyϞ�6Ku�w$n]l��4��%��˕��z	�	�u��YJ���[���0������t<c�}U5�ԅ�u04ͮ�aų��.f���	X�g�p-����ܖ�A˸q�vv�b�xtC��W��r1܊�:����݃$b�.�(I���P7��H��MA�_x��%�^������J�=�*�wi�os�,����{d*,�hP��t�G��E
� ��v���Mة�2z�,�Eg�5�Ӫ����!׷���j�l;�v���[*�^�`��������e��:�yaf�9h���d͜���_;�{���"�\wEn�,�	�W'jζ�Z�	�G�h������V"�_�^���^�w29:H�4,0�.�B�tUᄒX��a:��>t���:7偒1 J��Wx�|����nE�X}���۷Ë5�LS�G0�W�c�#(:7]�T!����s���Ц�̢���;�������>_�
�]�P2;dXy�hۺ���+6:���[����5”�wu�]ͥ|h�t΁*��mUO���m�}�⹳.��g�����UMs�6��W�O�<�f���DQ�6S;=�M��\���pl��.>H���iuI`��ݷ�lKU5�煅Q:�w?���
�e�U���-�6	,�oh@�A��,�������`n��Z����3W;�3�4������F ��$7[0)��A��U�̀KZGx��\}^�`�&WW��[��[�^*�1 YI 
ZP�-Si]����3	>�S%���3��_�|X���>/Wp7[�4SU[�%Nw��y
�mS!�\?����1��wn�G&Y���C?
ed�Tܢ@�@ ��,�":��\��<#�?�Zr��
��vM�	�uɠz�&�O��VRC���|i����%Z���K�	��U���5��3���z�-Er��P6�����Kp��w�K�XMQ�{�<s;
H��|�*��<�z� �%����l�
iL����ȶ6�T��b:s�r��U��^\S�{����;�����^�4+I:�jN^ƝZ)*����O&��P���J���?��t�Z�G�9�I��p�_$t�ӂ�܏�����v��];@-�w����QJ ��noߜB�?4E�o$zJ��;#_�n�ۦ����8��A��Iɕˋ���L-Wrtpx��~�.�u'�}G������n�#|����|�PW��.�m�!�;��,�<IG%��
5%#��LZ�Ɇ�����c�C�R��/m�0=�����!X���
��۱�?_�VovZɾ�
��Zdn�#t��[8���
u7E���I�G]&V�9���I�;�@�hA;o@IĖqiz��K�AE�N
C��@K���S"����?�h��Q�J!z���˹+���h����sl�e��.t���H#��1���5!6޸7��Ѹ?���6>�g�'QL�2ia�C<l}�n��;�/��:�r	��Zms�6��_���M%��T����s�4i:�{��N'��Ć"U���������_%;�L�,��삳��*�;��֕�����۵Wk]n�z#�u�.���<�2B+��J��L�j�(��ZgF��։I�*�_W�҅J�b'�����v�y��Ӫ��D"�P��,�"Y��J�~uu����r���$���|Y�
f���I�ٖ����8ՙ�?_��E���Xbb��^Է��f��O3���M�����;UT�Z&�>>]����CYK�ڽ)�l�)mΠ�w�����U�;��^��!f_���bNo�U)6��+�%���{�
�� ���e�+�J�9��5�p*W�mb��x�@�+��%�c��
`�׽ԩ�8��a��
�t<�Ujc�J�B
��*�@��t��ʊ�^�ѐ1��W����H���5�-��%����f`p��'�c}�z�&�Z�T�TЋ�d��h��]&E%�8�%��ԪA$A�!Ym�.p~v�EK֤qތ.9Da2��p� [�z�a��{����J��J�z�3'��;f,R�+ˊְB�}��Ćh��%M{�?�{oG��Vj��Oo�Y<����?ޭ�´���X��X�Gn�9D�=�	`��
2M[�'65�<'��gX�p��`/�`^?N�>^_d���/��n����{�\c�
��|�Z�ż���B�v�6��g�3)zt�T��h?gA�0c�N��A|_���$x1�%���I{�V����Ӄ�{�bǬ
�7�o��kg�����]�}��-+�T8%H�	�] �z�B݋���pҷ���
.��ݍؖν9�����]��<���H7!�ת�u!>/�2W�x������<D.�E BTY�/���7v�-Et��ycM3��6#�p�,enԅ{�4=�!.�>��J>Z
x<D�W8�O�K�L`�	e 2�(7
�Q�"̃c�?w�C��"��$�_Ët�F�|A�������	��i��L��K��"E�Y���lkX�{z��a��g�w� ˳j'./�d�!R�}osi_e�&mY�u�Ҷ��cu�D�탟�B��_���K4k�����΅����eA�|��jsH:��}�cn�V��N�wӹK$�
uf)�˺H(�Zk�����'��Y�u~ ���1X�����8�L�y�iDp��IE�D��Qn�T���U��s��%P\�}�L��'��a/D&d��	��%�TU2�
��H��i�[gi��0����6G���+��Ip��ܸ�����Ȅ��tdt�3���C���p%'�?(1�ܠ�������0�yf��^{��Z��40��T,��qm���z&��*5�a�K�&}����V8BJ+��H���0
�T�@n�Xx`Uz ���U�����s��K�K��=-��vv
���Lƭ�8*HQ�/�n@IJ��n��Z@}J��P�k��ɊA*���,��9�I�e��G؜�B�c
���X�2rcw�FN(žoi�d�,�H��&�&����N���Z�4,:9�7�'�8�|�Y���o߼�c�C��j����S_{�\���5��K�J�u�
@-9r	k��&t�K%��^G�볡ԍ+�,��|J麗�ɷiv8��D��NV�l�i�W���C�����lX��`R?P�9ғ��E�1�
{���h��qN��	���@x�.33gvM�0�o���^�5�9��y&&��ִ
+��ۇx���4,���pl�[@�i�h�~��ئ�Hց{���F��5��X�ˆ�G�6%ePC ޥ��n��
C�E�Q��H�>
S�0����
!�H�:(�,ӄl���`�h���
W����.�}��		ĆQH����u�8qԜ"�A��G�;Ӧ���tzXsa�s���_���0t��]�Gx(5��P�n��.�3g���:d
��K���q�N�{�L���7r�\>�t�%�A;�s.]�,AF+�a�ȩ>��(�Hn<��m[����A�2�!r�Z!7[�|�2o���jx(��<�;`��n�y���#�3
�o���T��D�ΨA�w�#��n��]8����R�K�Ώ=�� a
��N�W�����ٮ�z;�խ�H8x,�ٌ�@��&�]0~�xe��0��p��cTKR�Q'�,���TO}^�FAV�=&r��(JG-Ū\\~'N���B��	”xP��b�j!����AB;߅�x6�N���7�~~��m�@oZ���)P
�N��V��\��Qk�m�3�՗�
kB�@=��9�\UHl����Q�&�ç4��k.\$��pD-n8v,���Y��./��Ya���_ݾ��͇�����MA'gf�#h�	�\�۱#�����Z�����*���)�ŵoA���ꅨ��"���!n�G�d!�9��^�0����VP�F��T
#D�I��{�Ҵ��{�Y��b��i�9�'8ܝu����~G��x�z�;�v�;ԪS��9��[����S�l#��;��<�-��I�Oa���-�������jۖX}uwn;B�[!7�����!���P\��'~Dަ�j�<���G�Dm+{��"ɳ�g����&����_����B����jp?�*����^y�Ǵ��ٗ�2�����W_G��9NA.�|(tYı��M\��l���^c�b�|��}]9ؙ�~���W_
��)/��L�p{�ODO�H��m�ՠ���#��Xy�^��je]���CD��w}�sV跲F��Q���	�p��b���i7EzL�HX�������y[�{�f��������j�7'�@��$S=�!�j)�|p�@�>��c�V�@<ٍG�3v��!N�ܦj�����K��#T����W�Et@�{I���o����2\��1�~�S��	V�~��;W
�fb
����k蓫��v;r�}���޺�V��'Ϸ����<y�ܶ�um[t��u
 E�H��H��`���$���-_��{��_
P�HO�mI�����BIh�<��s��ߓ �'��T�o�0~�_q�%��%��$�V����:�/�si�8v�-U����i&U���]��\Up�������o�}�p���åw�6��K)!&Y0hѬ�.'U�-�n��‚��p�kz]�5�5<l����u[� GEe�e8S���^� �#��\-�.���$��dju�h�S�n���m�%:�
Q�����e�c�G[���/mq,��n��:nƚ���d �A+j�Q\@ä��ΛM�s(-�CS덂Z�U?m:q�,NbY���Q���bM�[a*4�����Z�N`Gu�3�8�q�"p�ۗA�Ξ�V��!�.��~ k8Ma�;شH2�{�;)�CZ�%�j���>�MP)CnN>��A6��P�+�1O�f����ђN#����Z�pe���_�rh|�CEe��	ۜ��QA��--�Č3
DaAi�hZF�&���D�&�FC[,�'�rۣ9�r�>�00�z�M�.��b��'��&��K'�4�ލ�d�ƺ,�t?n��b-[#�](2QW�`45�s���)�Id�(=2&��aGH�J��y�÷h|,]
��g޳��t�y6�e�se�=LG��> G��|�6�Q��0�$��.o0�%S6_'���„(�?X���0�Q�h��{���8R!Ǣ�#�$�.vu�cn
��}2����yz��SG��_�ϩ��Vmo�6��_q�ZN��-����b�
,-�!�Z:[�)R )�^�#EI�d�1H"���s�$��*���s��~�|��V�
��l����V�B4�[��$��A���܀Q�NR�!��ZmQK�`�?�|m�^ ��$5�3)��Dgi�*����p�a���~+.0��H��(2�J�ʐQ��g(-_�a���b:C�ڴ��UBZ�`��a�>��my��	W�d��d��r}h�x0,~���M��}���P�����~��Ⱋ�g�$y�R�t�HLCT�Qߗ�o�ExZ*%��C��YL�б���0�o.N���S;�/Tf����ڏ
}=:�S���eU,Q�Pl��)��RpM�'Ә ]�4�"J3���&`n�.%[�%��N�Pϙ�hzӊ��iQ-<=2BfH&L�����jqb�@�N,����V�!~���	�k�H!S��'���6�K�X%l�(_A���ڧV;XhME5� �L�&Ӿ��8ܐYo_���ո�j�恉2g�9�D�&ˠ���ɡ�V�ѩ`.C9����@
�@sd�ȡP��!��5RL�� �\WlM}G�D[��Sz�����F�_���o��),Ggm\ء?�eS�q�3�om�l��C�8\�9@q�\@y��`v�����˅[>����:����5��0�l�HE"ՠՅ���;�]2�̯^�54�������^�X��	�7�ڳ���6 ���>�x�Wgav��.e��4��ԍ"���^}C�d�	Q��V�L-W2��+-Xćͣ;���H��C[2M����C3"oi��1h"�g"�rNY".�'���t�(�cab◒���;g����'���K�F�����e	��MS(��;:�0�\�*aJ����@5�>��cjwQ��N�y�L�3�]�Ɠ��_�nN'�U:����T��׷(<��p'�m9ޘz)���Et
J cC-�����n(����K�F{�
��W�n�6}�W�_m��&}*��q�@[?�~*
�+�V���JR����{����0lKϜ�h��Um�X~~���,N
�6������&�eY�72�Ѡ�C�-peT���u��)�@�ku�Z"��|�������J�ff!cV�rUKB�{���NN��8�\��,޼�/v[!�%��{0V����͂L�R�B���J~�n�k闒���v6��|��F>D��@�BZ�9˰y���Jf.��TV2c��*��+O��Gg|��fx<�܁��0�v%��I��y�g���%�Q�pf�q��ڳi<(��A��8��5��(ZU����ۀ��q��`��#%�-
6��\��ra*f��bdhJ�S��2�B�%w{��a��0��m��{O�g�;.\��S��w�-�	6}	��/t��`����b��Q�{�@��3ԍu�T�$���贤�G�Y�AO�!��v�	���ǞG��85j��&���=H+�Jdr�WHa+ſ����f��K���a�|��Sc������Xǃ�`�faN�ŝS��K��N���4��ϡ��p�i��#�������ȾŇ�ü����,+������O-`�l�������hy�͆G��H�l��ץ����-�I�l�
|�hk-��
s��t,4�G�ȑ�A�w�b���$��H��V�):��}��
��g�iOa��(y�ߟ�cG����������6��#�f�+
��}W�����$_Ã�q�T?#���Ҋn�(u�W���u���%ux*��@?���.]�p�*ۄ{u�T��95:�R�"5:-c�6LR�G��t:p-�֩�s�h	4�{�Hj��o�,��ʑ��7�`���l�Ҹ1��0
�!M\�r+D�k�t��7e��*�jW
ݣk�����.|x�!��^fP�_����ߘ�%���5oj�k�$��{f�2�)P�ڔ]�o,�k7��.K�T�S��[ ��ii������@�I�����-�ݤ_E��)��Y
g����t޺G�=�}O^�+��6Sg���]�����u�И�`��;���-w
g����~��!9���ٸ%���/z��+q�$�~��L�s������n�K�wSWT��)@>�)ix�LmՈ�
_���4頻�̡}���|�Tz���	'��G�
�c�:9e�S]�k�~�>�@�&!zX�mX�@�.��`�uM�:��ްx�����7����v8�����T�{ƪ��ە�9�\��p��݉����ˉ�
0��
���>}Uyזp����9��+8�I�~�x�t}~H5�O�=�d����q$N���U�w��>K�T���f��`��Wmo�6��_q�;P䭟�d隦��k���>EAKg��Dj$�T���w<�ձ�u��µ�{}��9r>�K]�F�2O���x�!\fF�*�r�66��<�`ТYcO�s�`�\&-X]�!�)�\�5�),j����uu�����L8H��zKK]����#����z}sK�c<�Ȣ�����ڽ���$�tK
��xN��i\�_��Y�s�8�U/q��`~w�s�Vi0?>�O8�p�KTΧ#���
ś����2�d�$ZoM��0ǂT,8�,Dr�'�p"���)X�H�vD�V*+�*��:�<\c�p'y/�*��3h���4�$8|pt(���ȥL���`0G�}P�f���{�+ThdQ)(Ĕ=,|勅���.,�b�'�s�J�Q��K%or�M���wT�9����/��-����V���
b��*O��������w7$�>� ��Rӎ�vo8�&��t����s}�.�3������EQI����]=<`9�=�F���#�Ɯ�!%M����·%ʒ�� w��Ƹ��S�M~��6i���7_sDwҠFZ�#T���Ћaw�����%ZY7�s��B��ɝ²R<��Ysҍ��cD��}��D�oCק���8���Z���Ρxz�f�7�%�϶ݏy�͏]̽��3����l�	�/�c�ٛ+�M5��"M�,�/�ԟ�ƶR�[j���u�!�R$U.
t��A��*�|�7#h7�1�.�b�UFp����
�!�6��dB����j5|���"����$��&�v|�B��ur:�*˅�y����g�ς��Kۏ����St��h���v�夫=��X��Pa�Df ���2⫐Tښ[���C�?\G`}�`e7c�,�ԧ�V"'�1\���܊��ڡ��†�#.=�n"¤�� #2�\/V\O��d��j/
�ò�ЮЃ��'j2����A��GC���nG,.+�M�ߝNj4����h��y�+CU���-�r���7M�lx�8�h�Z��lL��R[+y=�%oZj�*{X���I`n�� u�$Z�V�Pع$��!l���V��y
d�f�h��#��=�����»�x��AP�HB�oi�߅KB�^+�yf�<���Q�t�a��[=�I���3����G��G}߬�^�ܶ:A|0}Lg�N�n�k-S(5o��&P�����+�?�G0;QE����U�����r�Щ1_Q�@��UZ��HE�rhL��l�|���:��P��G��q�H�<��;?�q�l�AG���Єߣ��;X�ݜ`�0?Ӆ��p�z���v���J:I��/L��a�,:n��~�f]L�&�&܍�wX~�u['�:%��pK5r�!�}k�[�+�&¬*~���z�*�sQ��{��C2�J���K�w���qz��5@�r�a�R=A������ֆ���n�/���@�}�,0Ʊ}
����.���:�G�����!4xP<�d�A@G���\m�HrOGt+��c(��#P���������VMo7��W�/�dH��G�J�:. m��EEP�#-�]rKr����ΐ�O�@R��Dr�f����5���d�!w0O�ݷWW�#��F��.�v�66�ۢoh��Es�,����E�{p��`umR�Tg4<�#��N �Ǐ�V֝
�B��h�˅�T(�!#�u�2���>������=�e��l�����%��Q����=�>�a�,+r���_
%h=��2�V T�hK}���ן���r��T�8�օ0K�+�b��K�t[��\�RB�){�Fa<R��ž�������3�D�F���$��ڑ�?�4R�� �^�R�4B���E��_kq� Tvb���m��������*�p�Ns�X�r�	��7R�����R
��)�JvRQ#��z�5DK�n�I+v�~v+�APzuf��+m��q���f�3_k _w)B�olK�
P���
��I�5�
e�P)q/5ܩ��U@R�W�+�4hJӀ��)��6�D�%c���Җ�SPgc�d�p�f���mY��t����V��9�Z�=>oK!����?Ք��S��|��b����q�~HBr��9�m:���#�k���7��D��kZifÊ�f�Γ�+
�*D�3�c��V����~��L7Ԯ��狁m�{	b��*.�s���	1Ct6!�f�1<%m�0��w65��
a�K��M��ax�BH���
�m@W�S**WSU���m���ڟi�
Ѩʅžք=�/�������A��?:�-\\��&9-�-���e��\n��Zæ�&�DW��G�o��5XR�6�狸x�U�gSo�~ݞ�Q���T�Od=��?�����՛Q���x���vh�;!�_7C[��w�4ݙ���۾�/���'1��M�͛hƟ�E���`[?M;�����9�ݢ�~�A����(,��Q��5RøԌ��k�4���C��3��Ҹ{���.�!�_���+��͉9�@���$���M|��˅���1<YW���1��54��b�,Fޞ/��E4��b�.�&B<t`z�m�n��k��t]�#���ۊ�Ԣn���J,J&z=	㱪�h�o��)
/0:M����g�����[ajȒm���u��Z;?=-�;:
�wQ����R]��������X]S�F}�_qg�*Ƀ��T�6a�����@a�<�-Җ�V/��tK��sn�dI�&��z��X���ӷ5�Y�/���~Oױ��Xg3U��,�L��N���&CZ�d���H�&T�ʐ�JJ
�H~N��S�xA�>�>�b�HJT(S��(()�%k�de�J�\����ϣ/4Q�޼Q�<�=)c=��>,�׹J�G��_"�_Tes�Ll%/�:��1އ7o����zO?jY�:����Z��Ǵ����dzM�	<���@�dʜ�Pl�y"�I�g�Z;u���q�8?6&�+�?)ӰPYJSY�je#��ՙ�{�Ļ������:�_����R����rl���La,�M�+EJW�K���DSU�b�e4�9��p=]��Fg��_�]_\�\��C����b�ʅ����yib���x^�a�F�%5�u��2��ƝX��4�E�7Ԧ��M�4�U�[�Q�G���eI-�g��|0_T��} ��K�(�+�B��$V���x����B�/�$��H$���c@t.�������+ɌD��LLe�-��.�2�&Ww�Q�{�	�n��+<�`@�b��Yb�QG�L�y������3���3F�S�`z���L�({�4L���8�+4y�F\�"kdvB�,�U��	q�k�mC�"��Zx�s�S~���e��F#*uB��&�H'Z���=|&c��������Me->�j�"�Z����m�G>�>hύNP�3c|Sw��(��`>���LO�W�И�DRJ3����Ի/�ao���l&�&Cȹ`�GI����!��2�^�L���D���wX�s)8&,��iV�ƒ$`��sU��i,�{����h-�``a�����򶿼5�[oy�ny{�L����~{�UE�R�R���=��^�S["n`.
J�"�¶}��G������*n�I�A�M�[�_�m��k�
�!죪~��{�0,N(�sv�Bˮ(5�f�u�10�}_�w?
�ˡ��<|u��l��Q�G�㋔��"�@��_��>�{U�[j܇U�xA���ƪ\)!�zQO�NY磈"@����ـ�e��\�[M����M.C5Q��1�:��v@p�f����+�r�`ӥ̩���%�{� �rG���5��I,��L0`5�7lŸ�&��$�~໱S̾:����
�y�������m��^;���U�
��!���l$P��b�{v�q�L�FA�?�A3lTw4o:��J v���c��|���-gQ"�i��=��2��cz�$���f�Z�]�(udm"\U���z�z�Wi��fKv�#����.��p��@희'=V�{/L�6V��HoO^M#��a���:�ɫ��~�{k��'l��Sӕs�$w���T,�'f�v�a�����u��@AN��-���T��4w��T��0)T&h�"�Iu'j���}��Am[�yuΰ���]X�(�+�H���u���lUS���zk���˥�	�f�5~b��b
bt��M��<a���'a�U��TMV�Op�|�:����g�����mgX�U��n��6z֛�L�N�J�k��#��e���n��Rn�H���J96�n����#�����6�ZJ��?��~/�^9�㑽������F�3��*���J��,�"}FS��s"��T(Z�(����I�KhL��:�7S	��*ʣZJ7�>���m4R�ς��<5.�V��.^����QM�i6O��	ח�g2��.�e�D!�L�Z�pM��m�u3���Q��jհi.�P��KU]��p,�ۮ\wt�;��m�V����`p�K�3�T<fy~K�C�!�u���-N\����p���I6w�8�V
��n^O��uZ��lRk[#9��`�fy�"ۦ^�cD�~ �;�lq��_��Z���2���ޱ}]�xFXhߌz@s6��f.�w�ͩ�&	�b��4aJU����3��}�\���
�I#�m��ޣc���{���^kd�b���v%�
�����#�W�����Zmo�F��_1t�HT��'N�:)�"/E���1V�JdCq	�Ҋj����._$�I/-p5�H"g�}����d��\U�<5�!<z����N�J-�z'�IU�#8�s`B
�Բ��It0���Z���I3
Z�U,!V��9Wײ*d�����X�U.!�bY�2�
�(`*��L�EY��%�~u����K�e��&��p��O�z��%*�B�	$r�R���\U�2���J]g	��c�5-I�ĐU@.�Zd��"+Af�r�$=J1�C6�mC�

P"A����)���������@*H�"�)�)�FV[��&�yM:M�I�"y�;�jS!)�(�'����Jf�RUF��"���
f+4ݲ)�|��Pmd4�(2ȴ1vQk��$�e.V(ֆ_,�*���(�*��C��g���P(�ZT��ĵ�Ȕ^�L��Si�R�7�T��.Ec�ԘRM&q5��Q��?~�GOB2t��<a��H�yp-�Zj�6)�^NE��e�&<�V%Ǫ��k�0�";&�ap#4&��XG
���-����iCU�J˟�"?��Zv��U�o�4��+��4�Rb��
� 2���d�#N�J���>_c�s�&�Ȓc*"{7�M��٬.bZ��B����J�R���hQ�f�>���X,8Ef0�^����w��d��γŒ1G�&ƅ�l�Dbx�ע�\�|k;��{�I�
J��U�챜_�J.}���j�����T����T�',6Ƅ�0YN�}
�3��SΡ�RX�8W��,�G%"B5ɴ����c`���xE
S�������#��е o6A�0�0�Qu�ol(��[!��635��™4P�"���ű��{O��V�V̥��F��`M�p������JTbZ{�D�8��K.)ԯ�(a�/���jx�tk��b7677���D���2^\��ɛ4�O�~��93��(X���Gc�=�i:m�%C噕}�l{��4uUP2��_"�)��g�^�W9��gB�(kd���2��,/(�3���V�p���Ͷz7�%pR��T��!��v��q���f�\gɚ�`p}oM2V��+��8뎁Y�cb�ڴ7k�U?J�ܗ��ȅ�l���DGw��r���+�2�,�����ff����WǪ�&T��Zq��Z��z��l���\}�l��Tq�j��B.�X�X�������6��Jl�^d���F"�	&���w��A}�*�69p��>:��qwٜ`��8Z�`Z�4�k�	�L��@��e����ms��lv�g��	����[<�#t�e��J�����'��Jn;������}N`���b�!����!%��	��Ĺ-�S5:ҳ��が�K�X���z�߾#3�΋������(�$뢦d�!TW(H3'��J4�[[y�ݨ5Zզ����R��e+�?�?jt�R
���@��m��&�á'�����v�4�x"m���F��xp��k�(ְ'�U4e���F�~���nj��Y��qa�C������\ӌ+̍ܘl�KF#�8��b�C��'��O�o^�po�Ubi�Xօv�g�CnM�7���;u�D�d�k��%�G��?��F�u��&���,��;I�X2b]��`͎��z
7��8nm.���s���5�a�l�-�,q_y{6IͲJ��4˓�	�����»�"���7�s��w�R��J8�{v��޴�
��9e�7�VJ��<����=�ۥ��ٵ#��]�l��;��N�Ӫ?
�l� 3�\X�ɇA��E8�tn�,��gw�"B���\��\NBl��>����f;�:C|���q���~��+��xx�A�?�<�:����Y�[�2��T`���RЙ�8�R�,3I�@8�Ĉ*$0U�^}t���E5��"%q������8٭�o}ܳG�n���Ƣ�#�:���d�|�����l�vG��7���_��O����8g:C&���M#�p�c:~Tq\�H[P&aNQI�!����
L~�3ǩ���ξ<�O*�p�k���d=�X�!v�N'�]\�ȧl=�.�F�_�p�Y�����tN)<�[xd�`���S��p?m�ފ�Ί�$�jРі�A٢�5�M�e1G)��G�6F[���j�˧i�S>"8]�R�n��ͨ�xG��2Ӹ�h&=�ǎ�gW�G̒�I,7]��@8x�ϝ5|�o���Y��нڳ�������N�]��F���a�Ԑ�ϸ����w�n���v�f��_Y��"�[��-�1<�m�I�Y�T�N'4V�L��{�G�A�-��_�wײ��ž2�t�L��j�;����}�]*{�ڜ޹3d� lnŽ��Tdww�]���iW��1TO��aZ��D~��Zw��6���wJy�b�c���=s����;s�Ѕ�NSҔ�v�8�Wa�M��Bj-��u�`8��,�]�
����
��`�$��3UM�p�x���Y/�x���4�]�a�ŷ��pq��8yr�m^��+b�q��L.Z��?��D�v�G=�^Di%g���5�?mq[��g��A:_�����.���e�����֨7���p7�흆;h���.!�*�(�o�=�R�(��9����`�"���.��i0��F��h��	�=��a3�sH��S	Ӆ+:��{���iW8�����1_{��_���.��]�5&v��Q�b�̊D-�Q�=a��+��9@v�6j<�����^�_d{Ň�t/;�� ��[%~>��J�\�+V%uRˎ�=
��!�2��	�����35!��V[s�:~�Wl�P�	5mC9����L������[�n��d���Ϯ�+���`li/�~���`�,?�dkp^�x�
1�I,�mRla\�8�ʇq��T ��r�C�7��!�@lj�2�d!��d;.a}oo.�+}H9�I���i��5'KQV���>}�Lg7S��������g�I�C�P[��T�V\���O> ~�
�i}$�-�O#���
d�"���@s�3C�=h���m�əd[xPZ&bse�_�J9!�H��d��V���\��{-قm�s�d��`��@�^��|M�^G�H��!�үw�β�3�1?�Z*2A���a(���D��%��Dɂ� �b�{
��<L���>
d����"�3In��+r�#�.����,(�\�w�m�c�5��E,�Y"����
���A�ߓ}�Q�R�Ao�[#pkz<x�8���	�3��U,�7���8*ĒG��v��y�҂{���\�kؒ�V�IM����!��/P�aQ�Z�
?J%#d�G�gl�a4g�g��\��7��W4�:�]ǃ���@���1u���Pf��Ϊ���u�ĝ����r�kζޅ�L>�`QO���\K�V�	Y��O����w�֊�hRj:`�}���D�V��@�)U�:������}�9<<��c�g
ƼN���,i���<����|��YU�S�=�G�L�")�̂���Ȓo}UY��n%^%�B	�Lp�ޣ全vS$:��C�{��٘#�������p~�4�N"p�$��\&+�yf�9�p�:��b��Ֆ��ۻ~��|/>�,�R\4�u5�F��D�1mֆ-�c����gYV�i{mN�,�sE��}�
��
?��4��۰���7��"&��RS8B�4��Km�o�@e�d�f@"B~?����(9�_6�MWӓ;�p
bouov~�n�.M�Evܴ���rߧmr;l	�N��=��|b��V�0���-Ū�Tޟ��t�)�m�^w�t�{&ʢ�$ߙ������8��S�Y�<��fDa�i�)=㚯�/9�0���V�6�ںh�!7���aGް�
��<~�A���2�c
T��O���\F����Ls�[U#�u�i�K�k&6ul�W<�.C��:���̅���x��g*���M�-`��M��:���
�K��o�!Y˜�M�.XZ�H܊8s�èߝ�M�� [y�X`m�2s+25?�4��������վ~��=�<d�<.�h<6׶��;W����߆���׺��=�vl���л�b��O�W?�ٿ�O��w���\L�}���G�Hu[��)�f��N�/�e=\����5���"r���z�P
���Mo�0���)N���;4KѮ�C1�v,��U�R �I� �}���8q7t�đ���WI���g#V����?|�E�p]]������XWRB�`Т�`Ƣ$�_A��
a��ʤ����Jo�(�`����Z�,�HQ���A�,�g�u�2��~|������\HdQ$ʵ6v�Riw���l9�ˆ%�V�G;�EQ2�D0�K���[�雲x�VK:�
�kzN%e����zk!5ȝP+�>S��#����D�+I$��:i�Ѐ1u��i"%I}H��0���<�r-��?Æ{E�4u
�g!��b�=�I�8�T�V��n��E�Ȥ^ţ�o+\1:�&�N�o�c��`��hZR��h���F�.	�K���	FE+�r�LX��8U��t����)l��x5�f!�K�Ù*u�&NB��_o׍`1��F2!�@o�������5���v�i�\��~k}�@��\ZT�k�����gh��зCܚ�q���<�%a]�^�n1�׻�|�T��k�����0`ֽ�V�m�~֧	�;��n;�x��7�����y�l�UF��w�twL���]��[�ը`�2�zC+tp��)q؁�#�h��i�+�n�,�U9Z�Z����_�d�u����;��l���A��a��� B�����l(��Zms�6��_�:�ȴ����K�����|�&=[����u ��P�
�v4���=�%�"Q��vz͇X"����.vA��l�2z6�E�ţ����h����d],�q��3cCq�$�M��(�̵�ý�C��*�ME>�Vج0�Q+����Z�T�b�R|}uz`�U�D�#�bY>���d*&�$M�"��N�\���WWgb�����23�x/-���S��4R��VL��腇<.Ÿm�I5?�v)�h~��:�Vi^/����wx����#��PĈ8��f�3��%�>~�:�C��i�������_�}��E9φ$ꫥ4r!����tv+t�=?e��!�F�1/2*/L*�7�ݺu��
���"�r$�{�3|Z�Q��T|�/��	�O��8�m�J�2j ���F	i�I�m
�3�As�–���%��:(�;��[�X�.x�D��F�D��A�z��]~�'
Vx-T|�4����bY�aX.���B&>��<L}.6��d�tR_<v>ٻ�#�^��bu
m���8�y�I�^��e�t &x�d�0D��5d�B[ 7#y�@� į�W��oA�߄Zм��W�L;��f�й[IAvI���?�:��ޭ�}��7*���d�"J�u��"����aG��D��>�O;�qv#L�����$B[��N�*�<Ʒk���NK�l�#����9H.)��2d].���J�.��ݳH�m���1Y[���[��1��n[%M4w�!'�����\��|%j�1�0���mq;����o��ڎI{egQh�z�:!1�e�@F�Tp����R5�(������ء�}���]�{�0�%�}Po�|��7i~ɒ(�L�����i�W�X�H����M��m�:d)b�s���޶&V�ъ��I�%J���&��<�.�r(GqU���m��u6�L�{:l9���Z�Q`s�T&V5��Y�?����X�pS�}�N�`��T 6"��x�s��U��
R(��(6D����a2`�gK�	������$����+�*
oI�OX��\���r	�ޤ��r�藖^j�P�:G/�t��u�m	}���G4�eN�5O��o�$!١߆f�t*Ϸ|È�1�8�w�9�P~�Ln����*�{@Y�a#�x�!���ӓ�l��ht�`�`�q����,DO���yKi��
ukh�l�Ϧ����U��JV��6�Lt���R�T;�T�k�����rG�)Ҕ�t4G���漛$�b4h�>�CyR��J��g���%��i]/"e��x�f7)�`����F=?
�wJp�5�5P2&F�J�G�|�����R:�$�?E4D��$i���2�v�rS�qu�mw�v^|��1��S�)N�6��6�0�*�.�/�oֻ�h٬K�����yD����ez���x \%Z��_�2�;yH����e��H9���/$��\�{:�kj���U��q:5{���`��$����Q�O|�Yfr*h(����?�M~�֮ti���$m2�2r�ԍY���PM���*��aK�Zf�y��E�	�)ll��HvF�&��\�něˋ��Ӗ�=���!R�<	v�[�^�d��(L�w"�5��QU�(SJ�A3�Ci/�yע��m�p�JRpGH�^ȼss��6��U�ƌ���7�?m/���+\i�pu�F.�*��%	��"ߤ	+2*����9Ez
p�pZoH��gY�|����([ջ�Ӡ��ק���F�@.���$�m�Qe���D���B�Z���s̙�$J��{�:qo��խ�}��s�x%����.E"�w�LA��I��`‰�/ ���8�f���ֹXƬ�VX�j�R��΍L�&���☑ɍ\Y���h�p"V��q�U���b��z8����᯹�%*��3�Z�����ĺ�aI���B�EBݙ���ꋟ��;n[���6���vV�+W]7t��y����XL�)O��u�;9�N/��@3���@�����b��k4�m��=C�s�+:J[�
�Rw�V��K*����yZ�ߚW9s���NaԨZy�Ʈ�qw
+���MӇzt����g���C�(���=�{�'U#R	���E�I�v4/ܶ�������%d����ŠI1�r�ns��dt���{��X��l��\��[%!�rѵ�J�	z-_����n)�ШEv�>����L� _���7�	)#�yP5/��ŭ���Wο[��n�&�M�f�踎��ɒd�-��2��狮[Z���/.���N��%�-�+�t�̑�	�?�X�	���uG@����x�l�����^���I��wF�~h��X�A�������*�c6��;Aw�����i��H�ϣ��x�k�����'���;���=삭�p��|=��)�)������QA���E��@�op�h�#.���i��̌�i:������sY�/:�����c�Ů��v�te���R^���ð�;���{r�|��GJ=��G��k��:��_��s������0���՜*Δ�E�f�:��%H]�+��J����C���D�y_:�Q�]�������+y���oL7�$ee�1�olȥ��Ҫ:]�����i�xM��ot���ߺ4&��p�ͽ0{^w��ؤ�_iP[�(=�J��7gmqo�M�$�b�@G���׺��GG���k_�e�*
،�i��(��ި��7��:_ow�<����1�)eqc^�u�b�0���^GC��x<�����?��;�q��8���Ƿ��x�t�l�?����f<��a;jN�=+�����2�gK�ɕ���`��&F�+�s�h:����5ta��U�0e�i�F������2�Ə����ѳ����J�	�Z����A�-t^<_M��i��U�{��>q�ڋ�E�߳����~��*�o��T:ʮ�5`k���߸z�U:�O:�S�!�	_K&e��M}
�#5h1��C���u�zr����%��D�xpد:nܸM9N��4&�O<
�7%׍7�
�Hkg2��-��|�e��P5{�S��b�I)���{�J��T/�>I�R��>����#�U�h�Ig����ӄ��e��
�wsE)Yj��½��K��x�b���)HG�Ú��ͮ���T�oJ!6h�@`Q"�S��Ta�����P���ع�ҼVz����X>lP�F�U �q��֒_7�tY�^`��s��o�T��Aϝ�_�
E�շoF=gB{`t����������(��
�0�_	��"M���#�iS�:\0c_��/-��=A5��D��y߽ޅ8�@?��u2�Ao��	FF���w��؏�i���$x	��sd��!��o�#�0n��).KW����+�U�())���///�+7��/J�7200��PR(�L)ɰU22QR�H�L�(���2srl��M�̌�,��l
K2Rl�|

�sLLu��JI��d�K�d�n��Q
�0����qJ��!
ӦPu����������Z��|!r����SI��v��m2M(#��[UK��zOx8���9����7V�A �)��7ւ�n�5P�n!���1��Q�ݕ�^�S�`մ�J���|}
i�<�hly�\W�=���$R)��R�V���We�֊�v(i�
H�ۚʽ��r��S\�x1���$8L�: �$��%�gF�{���~�~�Cd������ �
��D��$���8�ڲ�1��6q�F����P��G�����]�e���p��� �&�<��+}>�*�%��
�0�r]��*I��E���R-64��k(���n>s~�c)˙�Z+���ށI�9�5M%:�!�S�e����Ã�t�����V"L���Ñ�*jN�at&=�T�06
�$߈�"�E�ѧs ���).KW����+�U�())���///�+7��/J�7200��PR(�L)ɰU22QR�H�L�(���2srl��M�̌�,��l
K2Rl�|�
rL�P״JI��d��л\n�=��
�0�_eY�&�m�VizP�'�@P�B��#>�IS�e��]�f|w�
�Ѣ�2� B!�N�RJ�B���Yd��.}�|��6��E
XC��~,.̮,���y����R�*�fC<��H�g9�%�#U�S
�{3@�0�=��@U‘h�:I�LM��<�s2����W�+)�/|Q�Mz���Գ�$�=��� Ee2�Z]�ҏ0�I��1~�<�Y�{�]���>��Y�1��SJ,)�|9.�</R���(;
��Ʒ�,w�ث~��Y/��l�L#�
L���$�(XlκAs�̋�_SU�*WM�7/��'S��~�����%���0�_e����� ��p��݀�$U�4���Ҙ9�|�9L�n|���:���R1F3��L�h�ձ@��ء�|�'����wxʯEV����-0���4�$Y�I�r84�*a�s[ld��*�,2�{A�X$j��0��:�h~(������
!E��Z�>u�B]��>"�R�jh$���l6����q�7�,��c�u>s�ZcM��'r)���ȥx<��Ehy�ɣ��c��n����+I��h�1M;��H0��f�	:�HHoȃ�g��M܎���� De���m5�ѓ~�IH�6�����^f^&/��|�X�R����VQ�x���J)��{���?�����D��C��b����Z"L/Ģ?���L�`m0��܊��E����ٗ��E�;�@�{�����������$��^8���l���d���5�N�W�(��N���Fܟ��J)�.ıT1m�y(��e���m�>3Y������b
z@p���5�iР����h�ARMhO(pY��	z�9%�-�Y��O܋�
WSU��EE�5���u��]o��%+������
�0�_eY��j����͇�V�@��#>����eag`��.<-������)%�~XARJ�	������]�uq�W?M7��nt�}������I���
$�(de�E����
�{P��KkEm(���G�w���1���%���0�_e������ʙW�,KR�HC
O/����7����6��^�C�q�)�R����Ϥ��Z�4�����y��~���{�M��#��;U��$+0Y|
F�J��Ҟ72{GX�,� A,���f�lowTM�/4?W(����%��N�0�_�
�8?N�����	��Q�J]Xш ��U��ggf鷟~o��6�R�ј�6¯��xk����\k�
�2�z�Dz��z�OL�����j��^\B��H񒰋N��q¤V�C�1��7�G@��0�Ds�c�}"�E�/q7r���.O���T������@pr�,fBd	��0�gG�\I�a�E��O��߿`�k�[*�5P]k!�+�}vu=?b�;�>�O��i�ӄDbȯ�jdtgf�ϗ���{�D*�T�뀇Ӣ��Z�C@]w%M�X�{]R��?kΓxr�~�1��ϒ`7�wr�l�b�h6���h������N�M!�E�PG�.�E3HB2gq�e;�c|3m�^�Jw�K�%�&8�X痳?���a���}��A�M�yl+��ՅK�*�E��N�0�_�*�q�
�&q��X'�XEў����ԉ}l��s�ߏ��o�y�<��,�x��>�b�m���r~��}#����|��<M��!>'��氻��#��<9��l�a/l;�)�-�W���Nf;���3�S�e�.� .�X4n2b<�4�r Xn����=�L�wR�7�y��%�{x��ġ�u�-�$�	�H��b��E5h*x@�us.���hfA96k�ʨ��E�n_ʶ�*�
�Ҧɭ�6�R�N�l�H`������$�FS��Lj�����@��@
\���O�A�H�͏a(H�Hҫ�2� �~$E�i	� T'�
r�c�����\����Ю��Գҏ]���V���I�V��ޚ���G}�}��&��%��j�0�_E�g�?��nIr)�և(�6dۥ6u����{��9x*��ݏ�2�\��Y��5��M;c��
�~�yV�+������8f�^#NjZ��{�p�՛u�)�$��QbH-�q�뉯{�Z�r%���;k�+�"�"F	p䧔۴b��`0tp�K( �1 f�d���Ez�<d�ľ�18@>�^&������1�URˎ�0��=k,�z�H,
��|D�m��v�
�E��Cg/�
)
���~��/믷��n���q�6l��.��G2ٮϷ�8hd�q�,������S�Z���tx�~[�8��J��J�"
̈́B�$��Vit[��osBI�/鶠����Vx�ܲ)��@?=Y"�-CK0L���5R��"o��Y�H/�~Va�3�{���{"��,��2{z��R)W�x�wf�Ǝ��z^��߷4y���$�6f���gj�L��.��4�7�P=GB��Yf�/P�3͙�G���
f> ����]Bq?��&hp���FXA�!�
Q�xu��	^H0_+�b�������3BmY��W[O�8~ϯ8;/3E����+�*�}@*�+Q����d�6�#����{l�2�ТE��|�;�q�d�V|Yx���>��J%k��p֚R*�YU�ҠP�Zaq�A`J�A�Ve��h��+TsX�����P�u�P����Ș�ZK�lE\�>�Njw����0
��� �xk�����#�u�
���!��s�1��қw�Z�k�L���c���@�%�;�HQ�$�ɺ��Z$E����+����j.��J����=3l�"p���j���m��H��];F�m�*�s�x�@���9�}�Z���\ )��|aI��88�Q:��P���@A�if��ISF]�t�x�x�:}9,���TQ�k.��z�����!��y&���4�A��GǙ���Տ���e*�jA�և����t���)�f����%�K��R��y#_������v]�i����i���c�ϸ���ȵA����p��<�:�= A���C����L\|9�-S�5��0e�0<%q�cǵ�HJ�	X�`_RIW'@�lP�R�,#��{�
ρ��aFIĆ)f�
]_��n�lKRs�֡�{�'�sM��	�q;>��R��9��kpW��c�)�aBͿ�u�'�R���a/���W(�G�_[mx�&�0��7,ϩ�I^����`���
�a7��[���+��Raq�%�����o{$9�r"R�	�K�`|�ʽk�
�(t2Z�{%ʹo�OS�n��������!��G�qR!
:a'?���~+�;��r���k��_�UMY>��y1^�Lnn�	���N�?��N&�JH�q19=�� ����|-L�ĥ�n�ЄuXY�K4ޣ�8W�Hg��w�qE7�(�m(1�0��8
��X"��9	sj��c*�sKG?H�f{����As�%i����k�]���>�H��r7����J[J��\�4�k�mј������f� <t��f�&�Eݭ}ӎ�L�ʥ.�03��!���y��έ�ν�~sŪ�v�Vd�l�/�V���>��vf��t(ԍ�����.w�=L���B,��Pj\���˨7�P��6O�n��T��
�	��P �־��'������'��Ϙ��x��,YC�g�em>�zr:@�a������g�I���w~Ǻ��^�x�!��sץ��?�6p�Z��Oe�ٗ{�U���F�z���Q4@��G�i�"x4���!�QR3��+&2�gS_M�[�ξ7�ۘ����tu�o�8��q�i�̦r�+�I__X�i�s�R��SMo�0��W�8.&+��줗m��z�(REb-�(P��`�����R�&�Oߓ�q���q��rP�:ƺ�Ʋ-�@��:l�d�Գ�(�m�,��˙* ���.#��s�&$�S	a�tߡO�f̙��hZJʪ-��z�������X�
u�#�;k��%/���	�1�֋�f�����p7�����Ey�X>��=�{��
�>!�G�ؘ�
X��P���	N�+	��X��
x�x���~wi�h�W
�4 ��6ڄ�u�\
d�Bh��]�zì�yj��<\�|��ƭ��ͪ@^���۩Y���`Fw<�Q��,2�p%����]:m���6ef���Sz/��!�+�y�'A}�<{�>�e�!y4�\��5�'���mqt��̶V!�7�֙����ݿp���y��=VU���ä��ko7�c���J+۽+r�k;h�8lM*�KI�W�-ɵ�s��of�}j-;�}< HDr^��p3�S�����-;�����;�k��ق�dv��	�I32L#���jSSf��0�2
�H0X�ԝЉ��d�8��l`�*,��H�ιe!O�D ��ʒ���{���9��X;;×/w�K�o�JE$�����Y��X7���t1����w����-�K���n�I�9��,Y��~|>�-��|�~����~�8�z
wba�\-O�J�rv������k[���Sz����R%�@�=8*k�	Ub,���Ti �`'�{�#b?����:_ߜ\݌�����77�W��>nA��ވ�K��g#�_"���t^�`���l������g�����9���;��i:�Vi���@Z��� �"�賹]�}�Aū\�M!��N�IH��CH8�Y�0uû�{��;���cHK`��<r�@²9� Ÿ?��m�:�4<�3H`��$6x�n�Qaf�Բt�����Z-�xt��ٷ��V���If&��Ih�8�z�`��/bu�"9�Bo�#�2n��C3�ZD�;��84&���ݻdi��KƗo�\�߀��JO�6Ӊ�ܞ*	j3�O�dF����X<�*	�
�A$R*�]�ï>!�"�ٹ�EP[��.#�E�V""-p�v��*Q����.UGP����6�4c�##*x�dC�>U>���P!!��U:�m'�^��`��(��'P��Z�q+�o�y��B��~�����z���f�l�$��m~OۚL\�VÝi�8��1�Q�h=�x'@�sW���q�M��(A��(�a�4Qp8�7 ���@v(�
�<�jy��X���ПO�෇�Ӭ��6��x.1����t]�|��c���zl��ˠ��ۘ4i��P� �ށ���_�A~_�̎Kx���Mj�ЍZ	&!!jG��`�%t+�TȒ_��;D2>,J�ÝuYુ�Ћ��`3��Ĕg�E`�u�r�8R!�
gdjǐ�|y8,%s��N�����;�K���fg�%ZQ>=�uj{��S��.�\�'kR��'�x�1�i�Q����c2�x08&j�hX9��9�+T��b5�#����L��2U��A�����1h��KT�#�JDsw�y$33b�H�g�(�Г4ٸ�
��?��\F�[2x����J�x�h���(����hjc4�Kb{�U/V��@���Bn42��VDݠ�,�*tK1��v`y:��_��[XT%iW��k�_��T�`�<o:�6�a5���nX��)�̅��n�<�~8���;�y��<�zMa,��v`D�O�'��}���%�v?�e��K�j�`@q0�[�K��4e����+Y~d>��K��Jy(�qN�хD�B�����[7.e�
fڠթ+-�\����^B!�
�j
�B�����<M�ne������7 �Ts%�a%����TFG���.�2�hW%�9�3gtr���݂	T3��k�2�h�]Ƶ�܏T;���7G��?��Y����n��A�;b�5����£ݪ�v=3T�.���`����L���Z�*��p_�/�
������x��A#�e�w�db�S��N�I���넫�l9����?a�h2�Gs��=���:bKHH��kh�O4>/���VQ�.�x1�f(�����T >N:�Ps��$���kߚ��@���
~{��Jq\��O�f���NpR�鎉;�E,
.�&��r8*x܅��#0��<�o
��)�� o�u�*h�Ó�À��BARF��t�;�-ȯ}�r�'�.'��3�WO�;�?ҏ�J@�9�G׵�-ح����	��)�9���.���ZX��l�i�g����2c;���ߎ��,��d&��9=-��/�ɇn�P��U�
\әYuU@��̇�#�"�R�o��8�Y(y�]E?���×,�B ���+�
��
�F->�*�"�d
"�Djw)���F욞�%�y&�܊֞���"Vg�w����&>ٻ�|Y��ko��)�t��_X��	�I@A�㯛:��ka`�]�,�z|�ߣ�@T]�E�8O[�<�
cM������;W>6R�O�}���S��[)֥�|8�����#�~��Kzn�z9���w;.P;�)�d_���BZ���n�������L"��o[)p� K�ƥy�J���”�Y��F����Jy�N��'��v�<�
�^��p� M���W�‰�Z��aE�L}o�� OVG�qU�@�d�TbUv��PH'+�����nD��7_��r^\S+�qsyvٍRMZo�$b�*�p�:Y�c���T�Jn�3_��~N_5�̓�]��b�/�L�<90�5(ht��/�HFƪ�T>�.$�O9��q����V�a��O�	��P
B���Ԋ�qN�����eB�]O�-=�\Jl3�b�`
O&J�m��S�
�|�����4O�m�>��]
ޠs�'��_��97!OA�O�+�d2�vU��xk�����a�}�ʽ���״m/�����L�����>�v+U_4�1_���%/�}M�7>o�]��U�q�����;�|q��>��:u�4�d�i
oq�[��)H��Y�+��o��u`=��Gi�5���k`�2�g�-���D�Jұ���S�}�5��K�S<=��n��W���*C/a�_��k�_��W�y�&�
��ЈI�F���qn���R�ų�*~AZg�FԵ€X��Z]�I��,,r<��DCIվ��a��1��
��,#�g���R����U�^�mr�#�V,�t?p;����+bԏ���(�8���U=ػD	\�k�����[+��WԂ�X<^��\Ϳ���8�C�h"��#ꬺhE���V���P]� �e���)�}w�V�!��O>g�I��3L5���R��l����l�;2J�忐���w���8l�J�}��$
=�m�g��yb5��֗MSS�i cR�sO�ST���l�/6I�a�|�yj�b�����\�ì[ݢ+��˔�h�w��7tN�?�n������[K��6��`O�����.|h�
���6h��B��V�b����w^$�zy�[�{8�|�Y�
=��Jn���f�qP��d�v��-r�_4縒&O��>����`j��R�$��r�^<z���}����A�k�oiO��?�E��m8��{�E��`��?Ã^rm�-`A�lj��~|��	���f����F_����'�$����I�<o48kͱ���"GK�	VZ{>�6�g%��L&�#������p�������Q���ס/��xI�Hq��6&?�&��6E8�,򪺄����`IUPy�h��9i��g�ڜ�Ӳo-��27۲�	\�6N��Ѵ�����H㎐C�h�8��ޤ��z@�]ҁ6��L��&�}��?Xص��/F2ݤ%�+U������\N��u�$Ҩ�օq�xG��'�Z�-�L���R\�0��tD����֋�1�t��2n�sFY��z�a)I{���@��5��ڨ���h�����B����h����K�}�����=�i!���,�C��[�G���"��js�� '�R�j��*/,��Ӛ���]ȅ��GTQ-��	�s
+n0�P�+	�Z�P+\c����㫈��e%�0��Y⢫j{��"f!��3,��R������\Ǘkw�q�[4��ᥔ7��h�D�˃c�9q3������� :����m�u��*���U��Jԑ��e��
���%���V�I��}�$�\E<�-J�u]j��^̸uR>���wVb�w���1
~=A�U�(gj���j�cT���d���sNP�_�e�hD�߃1�-]��L�,�����o��k��n�2������"i�R�	����z�Wc~;�N:����(��BRb_ʒ
}��0���]�L�
c�q��0ۨ�X_J+�i��?�/a���Е����UW�Ҟ��{{��i��:V]K[�2�Y�AVɫ�T�-hV�}^���q�J#��\����xX��|N6���Y�B݀pi���/F�Iݎ�#�,LvV���<,�o�zC0����Fp$-���@���O�8�3u��G,�e�;�-hku_h
H�((��K��O?T!6(�۪<
3_�ز���o����7����M�G�֗Y��#4U!&��H��~����@����e�2U��ɤ\��,�E)K&�c�#s�wh�����k��i<�ȕ}���A��bX���9�ø�fq</FA�k�G����&�|1��LGwOl�P��Fi�fy�P����޹���mU�t����:l����l��oe#$Ð!���V����d���f��9A��Iy���8ŀ���I�ՂP��"�$9`��,M,ʈ�������5hR9��Ֆc�@�캦܂�ו]D\P5V;����!��M�M���oU�U��
"�<��퓉�_I��<�:��<�[Hf=f�Ɩ݁����-oK�4����`~�f�r<�]�"7�=�<��Zms�H��_�l�m�T$ۄp�lu{@-p_���c�m
�fT�Q�~=3z���GR���{�<�#e:�K�n�D��O�S�p)��<������|x�`�2P�����M��9C�k�� ��
"��F^��j^}|�ez#�<@Al:b&`�F�Z�".�>¯o/߼���<F4���^�K#���
�[�ZKqd�1pp� ��gi̶dU,�&+0��&_�Z�F��
�Yw�$KH����g\l  ˯�ep�
��RF�2Yh����5�_c�-X�G�$"&��Qqd����'�OR�4|� �m��"��;XS6��$�)%�F:���nz}��U��rE�)M	����i%���\�\࿘`T�ߟ��l�iΧkC���t�8Z?i���RT��4��F�Kuo�
��*���ZYY�햶{���F^ȸ�O�E<Q,-�2Ȳ�C�$���py�T֤�,5&Tb6M>{�yK�Z L��='r�g����<ċ��~�)�ܟ�"�ŵ��<f��#�By��jd���6Rn(T�[�|63K�����J��U���pM1���9�M���x6kKRl�-�v�h˲U젶�|�{a0@c��=�늷[�d�MQb��x�����%#2����nO�6��I�3�d8-9�X8�.*.���*��M��³,!�Ar�i�Zf1�We[�,ni�Վ���D�b�"48.]����.�̾����S�`Ij\o+o�Ӈ�T�<o��G�Is�U�Q��E�!g0N)��BCD�2u5i Myl
�jdԗ
q+J
�1{nS.�t
�h/��S_�}xvv���񤑛�����P�N��!��-�;���#���y?�<��Q?��~��%�lP�e����%�i����j��>��;d�ޝ�y�
��j�ngi{@�T7&���-ڢpL�����{CJ��|�����vs
}[�
���!������=��A���]�G���X���6��WW\{��4�m�؜pJ�z˜����l����EW����t�yX�]c;L��)���=Jo�k�^�C�jQ�ѭz��:�
�A�2C�J޶�8-�M�{����CEյh��Z
M�2ZAa�7�-ա�s�}�3��[��z?~tR�nx�#���aR/g�r��>eah�tNQ�?n1�/-�y��^�I�� 
2DH�O{k�{�ǾC�Ҏk�q���%/�b���Y4#c��C2υh�&���קZ�����xՂ'O�Է�nfkӘ2k��^�4�t���38%���]��A�,P����6�~�pc7��tӣ�ډ}��n? ��b�p;`��=��|k��?��s��n�������e?�}_�HU�C�g[�p�v\9P�{�:��*֎B֘�_��I�/¥�y;������5��s����(��K(�7��x�>ߕ���Z6{�m��}z�j!�$~��C����RB��D�qa�y`� �<�\�;W��t�c@=�J5���Px�Ҵ?ajCݻ)����ɓ{갢�ic~��o{⛨�`����O�)\��.��9�2��'{�y�����S��O�5�3��n%�<%5�X�TIZ��ܙ]�}Q�aW,�1��5��ykgX�#|1S�'�Rk��(4��W�re��S@�J-��G�fg>v�2��JNe�S�U�yD���"�Vk=[q�9�W�c�� ���k�����[i�n	Y�]�'n_��R�����v�;+���I3�]��
.g��^��_S���G��D��P=߹͠y�4�
�%m�<�k.�������Z�:���e%�<}�ْLr�~b_��4oV��R��7@��-�nH��Qs	{L��4���8��R��€~��tt���>,��~)�`-�K.�;��� 嚋��2�g��
����q�^�5�X�xv)�@����:W�9�v8��th�S�ECŘ�r��e]wI%j󰂋��w�E���I�8����;����<�,㰵܉Xw7�V
>�d��W.��?WpqԈpMz0�F�u��?iǑN�U"
~)������q��Dbm��?����R}c��[Q#���
x�~�e�6�#���l����1d!�J2�i[��C֡O�.�~(�����GC�9hR5��5�c]Z�|��P�0E���Q۠v�p<�sn�x4#T;p�c�a�Ÿژ�)�6�nXu.4�����ֽ�!/��n9}'�����C����7u6����o>��/'P�<�_���U����9���}���Ň��,WX����MP���Խ���{avr󦩐���{��k�4�c'�����5a����lc*%lr���/�qڧ�Z�?���|�pvz6Y�o�P���0P�I���o�_g ��H�'�Nǒ�߾!�j��i 4��g��3n�����Aލv���m�2"��is�6��ŋ۔�ǔ�mV��I��4��l�I>y<.HBj^�r������D��^�t,���0��E�o�X�5<��=�Okk�%�H�e�יTx�`�H����hr4��g�![�^*+d�!�"���6\�<�`^}|�+��9�"�)��5��N��Y�F R\����ś��R�|rt4=99�xA�Du#�-x���5o��G�N�,�%3	:��i�A�J�	��Dl)P���5KW��!ē,��'p��)�Vi�	�`�0��5�͠@[5�j.Y�E�N��"�d$4�"A\�Kr�hɀ(�8I��!GnU��H��d���h��KH3�UQ�e��NQ�I��v7���uV�QI�EE��n̫r�t����skrg`�Z(�e�f"�r���G
,5|���ۄ�SX�$��%�Y��t�2������n_Ϫ���u��1��N�T�yM��\�.�<��mD&�A�~Pb��[Z�r�ہ$M�i��]��d��L��zä���$�4������Ic4͍�x�����W�q��&�����
K�`������oyp#��Y�13c�N߈7-Y�N����C���M�s#���3�D{#
���a�/�rV��b�q��z��W<�v[���>�rg�J
���~�Ɉ ��
~m8p��0D�q�dF�MA^s�E!�W0ʖKŵ��$h!�~,G��Ѯ`��#�+*��.\C<�Ұ�xܖ��u9�Bg	V:�+ޢ�D���J0a1�����=�ۆQ[(�k|��[�{�45zg �̶:@P�*ft�hH��w�ܮ1�ѠH{uXe�
wW�o���f�v��wl�$!�+��� R;ڞ=uHwΔ/	�Is�,k_!	�o@A0nT�nE���"��{�� N�����w���ӽ��Q��g���όF�XfY���U�C�(�Th��F�u���r��kCв����Q�]��Cu���ެ$�e�2ok����a,�{*a��]F�d�(T�H(�-62s�K�s�q���t�j-Ez3�Y���T���5jր�+��p���2#���'%���c�����3:��$dr�����/��)������O�Z	|+"��W�NPP�6�š����|׏���۸��,�����
�P��;ϻߏ�_�<~�kA��$�� 3��GO�F|5��3��C�f���l� W
��������̖O�����5�.��������e�0�����6��a�$���l���JDB71s1�h���KE��z�I'��,Q����\�����f��.�uw�?��W�6�x܌�?���C
V���c��m{�O�����l/K����a��>��������>�Wl��+j]M��ZyO�t\VfD�W#�f�2��C���z;���r������)E�on�ô�;�Gx�k�2�Os&ˤn�:AS�T��Πޮ
��o"��d���緧a5>I����f������/rʊ3���b��2�n�4�AF;	3��2C�ic��<��ؙ�4D�/?.�//��-}\]c}�y� �o�6�n��q���o_����r�����9��fU��8^�X��-��m�Ec~D	���+:葱[`A;�<v����֛��_�0�Z�e��阨���F_kY��9F�.d�6�4�?�|v����,]]�x=$�F4?�������RXV��9\�=�6¾2й�pW��6Kͫ���S�U��RW7,.p�8ѭ�5��B���Z��
�����~���$�-�3v��=��#��&�ݩ�5U�[���`N�����	��r�eSW�Epّp��=K?�$v�;!b��Q��W�K�_�d��"�1T/�[^f!ݴ<��E�C�r����*E�F̦�Qa��!v)d�����S�D��+{��"��k��g��%[��O��I5�7p���Gr]H,���<�F��
��oO�,wzX��Nxlm�)5t;1{��x��&��׬�ީ�*?��Qhz��0A쵵&*$�,���
�;�
�,x`7���Pn�je�H�n�74+�V$��bi�Pf
��u�/=��<0:9�����X�j ]�Z�h��3�{��H87H�p��4�8���'�2�~�����^ڍ\;�v�ޔ�}�������+
n��Ѷ��}���(�Y�g	GW�������>H���Ԡo�ӛi��"��[�3�yY�8ط��!n�W��l�0��(����*�e��b�_&�O�P>��V�Z��ȭ\�����ͨ[�(���nD�(��sb;o�:�� c2��9��r�`���Ӭ�~C׵�n��~��,G�s��^ʵh�Q��(������o������!�̲�0�j��*w����S0�8�b+ǁU
=6~6���`iD��h��lvZ�p�g
��ۼ�����<�Z�4T��-�Eu�Z�f�ڕ��E_�:i�s��A����k-�NOr�*�0{=�M������j��K�r!����3>�v�u�����p�_`k�l!��X]o�6}�����)��ˀ���|�6ÒaC��mq�E�������%)Y�e���%����s/9�Е^���玾{���K�ʍ^�jA�+�kcz]�Y2�J�(�d0��oV���˕%�+�JJu&	�s�(M)3��I���u�BR�RYb�˅�T�4�,i��2#U⽤7�W7��oh�
��g��~�G���䊮̕.�P�4�����R��QiC�.2K���b
�\�T9���K<�jXJa�>��pC��(�d!�tcZ�2���r_S����@޴���ReY��Ǵ�GI��R��p�29�
h�z_[�*�9��5~�4��ۙ��/��'X�}6����Yp��sFM+'��h�J!â���Ʋ��
RB��(�{�e�)]����Ƴ8���(�B��Ÿ)��}2�u�2z��GR�˯����U�$/&X��%�m}�e�>$no/�C�I%'�F8������*��ܸ����Ԝ5ң}g�e���AmgC�f@˘����!��zܣ�_Iɞ��QJ��@L�5���{Ja��c©�UsV=�'F.P��@ym�e�(�l[`)��
�N�v������lBk�GYe|��i.�ѩ��)�E9������თ��p�	z�Z��!����bN*�z�*���UEFR1�Q�2��Ge}�a��]Ll���Pv��g;�!�6�ݢ���4�0LB����O.MZ9�I�)C\�A?;40�"��|�����Z,�q�\��M@��_�O��@�v򗝄5�"��������GY�g<Y�	ڰ^���'����B�xIO���_�i�u�������[��6Q�R�4
�RI�2(
B�z��� 'c�z����76�-'$s�Ӈs*���%��'�.���燷o��c���������ۦ�b�T����>��h�{_�b�9�k���fU�N}��¤�*2Q�ï���vI�ѻ+7�t�dУ>��r���`��)2.��5팆��4l1���k��ވ&@������t�2����o���e�*��xM|k�t�0����zH��B[G.�iŒ�)w2bo4DӬcDqu�2l���̾yb;7�l��
�5A��5���=d%V:�8��.�AXk�Q���
��ƽ��%8�t�0�&a$��ȇ5��7v�󋮶�����j#���vT�9{\c훚�h֧
����/s=��xw{[e)?�{5��Mp{�Xv�������ʽ,Ŵ��3r��lj*��������t�)�餷��E���wo�{����o*ҿQ�H�Q����r�iC�Sa�dz@��'����Ĵ ��5-1R�=�
k�8�ٕ%z�7��w�ϡUZr��lMU|�������-�k��0�E�j��Njn}�[�z�E�|yf���P}��->tz>/:u���I0��V�+�w
���Ek�iއw����
�.[Cjxlk�߭�/��ޖ��`A�v���|���D��s�:�����^F�ZR�
�E��ҏ�hs�k�x�VֿW8=�� σ+�ZJG�����>6~�o3������Q@��IS�}e�*��
j�GYX�M��YB���_���ڣ�Փ�=�6l�iB�Y�Iת~md%�	�!Ѝ��f9�}4/�?��<Dr���!��d��1r���*(��k$PF������[��f�����݁j���]��2a\�*���3I�woA����Ͷ�Z 'N�#d��oZFb
�BzW���e0,n��g�c��<2��m�ս+��Q�咟w��Nb�þ]�QT_��cf��R��h��ޘ��>��g��N����.\�*t�ʴ޶|����A屹m�9Xl[�zK�=7�G�
󢽰դ�V��*^�֋��]��d�9'�c���5.��K��;�s۸����@|�2"e�����i'}/sI���w��x\��$\H�I�j���]$�!��]�d�\,�{��l�NT��r�.٣���Z���V��Rv\�k���'	#��iQ}%�po6c/SKV�e�
U�H�Hł�ו�:1[lg/�^E�MKd$2XV�y�"���@LKUe1�<�훓���^��LD��7{�p�=d/�+b��b�F�b���v6Ns���\�k���
��*�	3�!{��
Dg���(Qz%��8�La݈>���B���ض����D�p����t��I�6N:��B@�8��X�Re<I�@��W	l%JX��Rh�Y�� �� p`5㥼왡�9�dhL�,O�	�$�"Q���oZ����'����Z�B�[��1�
�ڲIdQ�Lh�$@E*3�6k��ɒmxш��kU�D	~��ZO��۲+ܛ��g`UU�����-yR�z_	N��Ui��Ym+��F�<'�
�,O6|[�5Pxp}ZM�:A�fGD�ґ�-�g#�r=[r���ƠרUm$8˚�2��r	O�Z�.-�]e E�
���;��\�c�e��� �9c�`#`k�_���	_�ϥ��G���{�\��"R@"���8ۓ�U�d�?�d�
=e�2Mn�B�F
1�� *����ͮ_�_�pr�H�k1�����*�C�3��k13�ô
|�O�FF���<V���-���G�2r@�A].,X�����:_w��QQ�^�8�%I{������=+���=�.K��	/Ŝ���g��?�/`��e<pƞ��,J�X�Rl��D��gN��WƂ��4�`�t,t�D�9x�A�s������]���0�����خ@�-w����cYs���ZI���w���������Z�����ɴ^��=�H��x�,�瘗�҃-�D޼�9��l��Ty��fxv�y�� \)�q��hr琒o'>HC†G�(�[ʋ}�pS�����,1h�kfM�pv��ꀍUѬ*(I�OO_�������8ҋj�ُO���d2g)��
��R^��C(q(^@�AP���DC'���T��
c8`LkQ��\�x��3�;�y��*ƞa�a��O-�f$����d��;kf&��IY��������>`�`1�j���:�㊂���};}�� �=�r�����-DpL+*�!�-+Ġr�/H�]�C�)�ŖL�
h�RG^����)k~�Ov�Ϯ?��x��*ݨ�#��Ʀ����Ͼg�,D�R~�$�f�������vY��(KOJ�-�IJ��
΋�
q�-0�T4GmV���������0g�*Uϴ��_�"c�19��ͦ��4�B�۠NaP�@mK|�e�ɣ=h�z�kU�������Ñ�g
���v��;(O�$C��:ʛ��b(��}W�F�&� ���D,�փ\��bL�B�t�m��bٷ�n�>D�B�!�l�R\��|�|8T5��]KY&��ms
κkST�������P�G�çl�C0K��[���Xq�����c���h���y���*�`H?_ ��%���3�J���	�=,�
aY�1,?�7��h���6@��+�^�҆%��Hlj�o���ß^ɬ������e�{ç:�{,J�T�ⳗ���s�Ɣ�&�jqz���$"����z�E�&�w2�i��Y�P ,���oe�;��_��� ̮���{;��N4{e�-�+���X�4y��M�����]F�Ж���F��z��9k
���AJ̦_G���c��5/���ݤ{�wqѪ����
O�*�
MB)�����w���+h ��1��q�,ɻ�	[�MU%��9ˠ����z\c�h�i
[����{����O����!޵�}�q�a�C���Uf�w�N���~��Q�HO/������Z� ��$"^l��I�u{�Oru۬���(�؝[�@��*) ���1��*k�� kU�PGp��`
��!�hlsF�
�.C
�1`�2���p�q��I�sFpL���khE��N}��`<�F�����/d��అ1��X'�Z��cx��g��L`��j����F	��;�0�t��h����&�xIx..|Ea=�2�u��ؚl����B�F
TF��.ے��9�$��՗�j�+ _Y피_k�~E�]ec�_�)c-�=rl����wKс��)\�0z�H-ὁv�l��3����݂L1t�'����MzA���/��0�'�y��m��R`m��<�y�S^�gP�%Pڜ������]�7SR���2����0Ԑ��RLȵ=Wl��\����V}��#�����*����@�ad�*��]���N(�?lv9|H[�ZQ�e0&�Qs���ٲRXP
zk��tӂWam> �(->X�X�7_¶ً�^�È9�I>��%	[�U
41`�Y��7�!h�l��mT6*��¸c-���f��Wt�O�9�!K)F�31�[�$�
���p�x.OV9���u{��e��L�|��l�jvڬ`$5W|�
8d'�|����4������ q���c��銍���>4.G�JP,{�ky���/o�0'��]q�#n9����*I�0��J>�%�<��_��6�+�2���[��>-ca@�c�k����m��yD׎��,�e`��3�����P��J{v�l�Pq0e��.*Z���ޘ��#�	y����71x�'��U��B�����^!�6�^�d�=z�.��5�M���!��7���>
Jz٧�ES�� TVD�m�7�T��D<�5�ce�pN8 ��]����vD�,c��#�ukz��KO�L$�C�n��]䚮�n��S����yH$�u��.	ގ-T�S[�Ӛ[�/w���I�=��#T���/�+�d�
���`䷁�'��4�@��V7hqd�.�(�?�šem~��9�z��2�m,v��=T[�ӓz���V�x~gв�����r�l��m|��&V�
�f|�m��Ł������z����e��^����J���=�c�s,�����d��5M�Q,Ѣa-���Q9���p8k�UB���z�KS�Am�/5��
' �C�0�Zx-G席�
�����ݏj�Z	< �eo�S��ֵ��`_pd��%��J�-�VCi#��D�_Jo���2h�΁�P������&f�g(5y�SQqD��{�s��P<�T�Rx�$�ڌ��Tؙ���E(%5�Dt�h�v#;�6���g���L�Fu��X�M+x�凇[��͊x|M��N�7v�y��G?(DI�o���qLˇ�6fY�ƣN�qX7���4d�k@
�m��C@�R��mdyl�n~)"^�hE���pH�K^%%�‘B)��qN�?�W1�XH�E�XP����J�"�p�]�P���ʹ�/��y6\>h���a��=���?�ٶ=�I-];�Z=.��J=s�b�mnypds�7�zkhģ*��9�y<��ݚ��g�v�J��ҟp�`Mfo��a}����>
��
+�r�M��04%��<�;���mp�K8��6Z(���٦w.Kc��V`#gM��:}Ǯ�^L#l�5�+����?�߶��vtM�Z���^�l*�a���]>4��P^�����f��4Ԥ�Ҵ�1������c+QDH�����1�x�e�Mc�x��[��L��bQuhnwY��%;&��:W6
�/ܺS�4t���Sm�Dc溁[aZc]m(�� u��5G'CH�xb�II��qr��Ѥ�m�t��
G�o�����:c��{����.oj���p ��Tb�j����ޚ��'a�yp�:�w�c�x�e,�����p�hB~���Ek�U�d�We�
�2�sm\��k���B�a-����5-�Eg���kl�<���@Ž�Btf��̲�^�Q!���P+\˒~����L830��Gw���$���$����>��zmn�z���vd#��А~M�/��I�.3n]V��a�4��8

hF'޼��������ܲ蝫Jv��O1�i䲣vg�_���3��:
�����zs��#DJ�����\@^L|Z�-���!5�@�+��N��Ӿ����}�S��No�d��/��o���g8%�7��	����
�Fn�3����7�w�8NWt���/M��f�H��+?��ĭ�B�M�����`W��5.j�a�������}Į�b�>zN��v L�s�0H?b|8�0��K�Bsvp3�:<x�Z>��%?ܹć?�/�ސt����yq�u�����,�.�Lh�|�S!xA�o#�  V�ڑ �rhik�7�:�`<�jIsLg!�������!f���G4*B&��2�z���`(�7X��*:��o!�uF<F��Bڥؼ�,�ֆ49��Ymo�8��_1uo�v`�v�.�&�6)���6�M����h�YHʮ7����(�Ns] �%rf��P�\%����Op��p�Pr)�%�/�B*�,K�Aq�Պ�qk0��hrf!4hY��C"S�:�+�r��t>\]D�l2�Hx�lf�$,�)'I3Y�)��9�����Wa&2�ZbYHe�W�m�\�aa���%t�ǃ��pt�ի�p��'S<'C�K����I%�����y$��O
�L�e�gi~�,Y�B���CA�l�eB�_�	�P��Ӧ^0��Ɋ)=I��(Z�>����e�1���Z��}Ez�nL�a�L����Z��g��Bj�`��ý_��T�5W�Z�f1��7?_N�m�X��h #��s��8Ӽ&���n���Q"3���r6��R�Ws��\��ð^�̌1������&�&�^��^25yCE�,�k4�HS��;KS�@@]H���Tˬ4:#�mm����=�P��[u��C�?�[r�t�g\ig�Hc�aC��]/��w�����K9�x4W|�c8����"�L�6K�MWͧ�{��M����^��>�j����h��*@��T��0�aMgwc�?���=�{�r=��=6���!>��y~�Lv���Fְ���(
�U�oE�~͞�A��ӏ� ��E�ƌu��/~�{F���W�D�ͳ�l��i���zOa|�HH���,m��G$�k���vK^T�AN0�y�3�ܔz�y}��6Nu���
u��0[*4�>�xP�g�d�b������`p�m-#,�9�^��Ѡɷ��xK@��"���O|	�DN�G�a<�c�y]|���۽P��&2��qR��p/I"�C�4�^���4h|(1*�')�&��0r-����m�$�&
3�I4�8��:�8�i���h�ޞm��i��{{��oX0������/_"=m��6`���-��xn�'nͻz��v}0�K�Vz����\�Ӷͧ)�Z�r϶�-_�ᤇ@�
h�
�1���.��h��A8a���q|&����Db����N�ر�Ng���wN��t�8�W.�Q��v�N�;�r��I�ǫ�8-�)�"7���O�FF��v��õm�8m����g�䷷M+~��c�*�d�b���tHh�E(0@y�6��MS��zc��O�66yʿ���Q����o�޾ m��Wʄ3V�i="�Gr�Yk���I��dz�-���i�>%\�-/���+jWFQ�si98:�wX�V(��Ͷ����h6��)3����X	3��k�ޠ8�$!���@:�
m�Zb������o>ܺ�̨H<:��d�wUj���J\��o����cn���A����ch'�x8FE�v�f��Y��j�Rn-��5�֌y��"U�=K+��9)��UaUֆ$;���hY�C�<�z:�ι�k��OϻUIVܔ*���-vQ��V��x,��q�Z��`�ͥ��_��k��4 ]�9^"t#L���m��K��H�'4�mѢ
�*��]�.���}�x�E�AAL��-U��WW���D�p���ǝ��k���|�����cu��/2e[��X8��,τ�ݺ2Dt�@dz�_��C�Щ�],4�> �ӳ���	�i%���ՖM�+g���l�6}Z�}c";��%�������8q�WʂFL"Š�H���,���T�pl�AEn�͚W��0�{yGs�2��۪2��z��Q��}�|�V�������ל������6a��O@=�6��̑�	[+�R�K�r��o2Y%w���/1;�h���G���?����#�/�$8=
���?3����a?/��ԕ��г��]3>^|\aXa��j�5�m�ԣJ��eh�'�L�i��T��ٜ�\�(w ��;���ݎ�1�]�jI�>qNv���3�WJ�g4>Ҩ�v��KE���=��������K�Q�_ke�Z�N���`�E�o�~��ǡ�}�5�xQuQ�3Vf�g^���1����	�[�m����]m�Z��(���{��5��}{:�f0��ˋ�nZ0�p��.D�/�	^&�"L�Z���w�ĵTw�5haM�Rè�G
�Z<��7��{!��m)�ʥ
�Ҁo7�O�]u�93���xDm��sճ�sP�Hb�_ش�Nm%I��G��$i���j?��VZ���US)�a��V�o�6~�_q��	,)Y�>8M�4˃��(�n{(
���6[�Hʉ��ߑ�q-`�x��Ǐ�#��U��|������3x�B�^i�����Rڤp%x'
�
V�(��/��`W܀Q�.JU!�p�6�%VPl����$�n��%J
�+f�d
tH��
�$;Ÿ���oo`���Qvr2�x�u���ƥN�f�J��Z%�.1������X�/�V��F
L�$�w�`�r)�8��-�"�jt�'�c2VP
e�j,��N�_�J[���v�z
+�;X��y̲�4�☬~��i~�
�߼ v��]s�~2��}����i3;��#~�f��d���y��6��\~N��_ꜗJ�A���7k�͊i��
�&/M�1ju�܏r��Z�T3���O�$w_�DNJj�'�%����f+eh���	��	�X3�!����,m��A��p��Rmg�x�`&���L*�Ѽ�SO�S,+hC>�h�����i���`�8�
13?�K�$n뷗��MO�d�ғ����S:;�r&�e�E�E�I1��yVU\.{���S:m��L$��1�>��<Ro*1�_�����>��zK�e��uF��.����._��%���m�i��q�#j�%>��+�	��G����Q��
N������}�<%���t����S��T�{�ԭ���yHr$� �o~����iuC"��ebӌ�*�'߯n9�m�R��!��۴��5L�:�f��7Đ��؆�h����g���mM;�J)�LN[ㆉ��!Sk�����_XkS��b�8���i��WL.1��t�#�x
�֫��lK�����N�c�L�����VsJ��������,�Y�Д��Vi��t�CIY��H#%&�>���@.Ju%�a�b��c�n�]ZÅ�v� &��|���M]Q�]�A�ۓO�|Ӯ�=�Cpc�J�]]���L��`�ԉ��ф�"l�.��DKUC��$�e����+��������3�_}D|A�H�R4�w�ɡP�39��Qk�q'����4���G�Jx���94��M���d����]7�GѺ���Хq;@*�M�sY�)���oʶ���\+9��Go����-q�7��7���6/k���ܸ�Dr?q*0��2(�Q��������Ɨ��zES�`YR���5�+D�=7�<����[�i�#�tP��e�mBw�RcU��� �dA���d������t�^���K����|����C�/��|����}��E�:H�M��i�D��?J���u������B���
��Zys�6�ߟqwK�cJr�l���M�x����d�۝LF�HHDM�Vm�}���Mr�I���w��cr.���D�瓓���F�)2^f�u�!Ո�NSb��L1�f��`<&?+FĒ�+�D)#F"3�+�f2g1Yl%o�ކJoRFR���jќ,rZ�2�	�a��.�/�}uA�<e������9"����9�!A$C�<\�Z�<@���r��(!1WEJ70�$%7\'�"/ɋx�K���L�H�Ɔ,���Bf4�|K�����kB�a�U�P��`CFD–Ki�f��-A�'�\r�"3���#`���8	���p�*䊆�c�W����ye:T��ȸёF?��%G���]���<�+`m��.Ap��,|unE�
�D�i%�WW`���f̊�
Զd���H�~yg.J��������h�d��8 �E5M#�B�Ej�P�O%���e
$/ni��8���)N��:�`g:;�Y!�>$	�0;�0�t<��q$玹y6��#�F���×�],�0q	y<;��v��3�@@ϽÈ�
�Gi3b�c_���\Mڎx:h�C�9D�6��=n	?ך�tP]�d�rH�2��UޠK
�%�T ��c��f5���:�ؠ��#�����	C��^S��~����ɟ�:�o�g[�VR�S3��
��U({���2��+X�$�c�拷J�?ӎ⅀�BfK�\i)�&��E���A���j"����t�Q�:���.M��Rs���Æ�g�bbx\�	X�c�'r8�$���8���W9V�FQ%��l��T�KtaA?��5/�6�c9����I#���lB�'�f���	8)'gg/qi����K����dB��3��T� �TH)�u�G�@|rD����
�,�a�R�q��)W�"Z�*��;��H7��5~ K�!�M��TX���zq?����(��w�z�h4V	 �x[5�6�c�*�������8�
K��d3pi�p��{�AP
[i���!s_S���Ξ�������T�yB���}&d��Ɲ{#}�9ŀ��J�贒lB�{���dx�&6���?Ҭg�y6��b��P��ɣ�@���D���(a���wp�3VK�+��hJN^L2HY�X��P��g�
�u�4��#�5c�ಱ���RF�4;9�X�J��%lF�)E�F�s�7lq�u�iV��ƔX�
�B��4���o�H���8W+�O'y3Æ�Q)J(��.�n�=uۻp���^��DB�nR���dCxF�
��$�<޳��A��.�-�p����I��.�B��IF�
6!�ޞ�V�yDӐ��!n3��ic�/6�\%��YY�/�_}6���"�!Oh��1\o����M5�t1�`o����(!�WRZ��]�z��Aٖ
����L괅��-�ٔ(@��:O��&�/s��u
q����`�K�-4����)!1��e�6;�U��8��2��Y|i��w;g�g��v'tڽ���E���-2�
FMع�=t�<w�YU��ԧȰ��4j�n�L&=m��Y�ͽ�y�b��0m�@N�����~���咫*7�����?
�m˻I���ՌMy�ugj��}��*�����K�a?n������1 ����h�Qܐ��-�� �?yO2�7�>��G�&��;��ӽP�Z?�����s=%�����)����=�z{dWR6�5�����3���R��a�	��y��S�:w++?�ŖW���+��'��
�,��}?����s��m}�C�OZ{ʰuz�m�M%�D�ȫ��{z���S2(��r6�(ap�"1���޺}����5/Z�'�lv�}�bR����ۖ�?�Tڧ�I��mҝ�n�ɹ��y�ǒ]�-D�]'��|m.OQ�CV�FM��`�-��Gp�P��7�?A�������S���N@
��d�ȭy~�<��՛��)���5MK]�T1?�ǂ��ks�������r%�R�+�K�pl��o����������%[��K�W��k�W!�+
_��a�c�U4�+�ګ�.�i�;�$����F3�p�hR3ǫ2���.�1Kx�l\x����9>��X܀'L�6�+V3�l�V��_l��Se�'~.��;��U,W�t�9�h[gk��t�2��*|u�K2��}��*K5֕�̬��3��,UM1��� 3�xK�УX�=�=3�s�����W=Z"��y�O���c�bv��#�3�4#w�$g7�`����ik�yC����a�g|\�ha�	O@f3��|���L�2�Mj�yz�&������V�C� �������䓳�IxbXL��=�xv�wd�>m𲝐�ł���ef6G����@W�����[y;�ڢ�P���УO%��+s�$��4����h)���K��%a�H�L�1GO�����(��.�}|�9�:rO��J��������0�p��˰�w8�C4�j#��;Ѳ���kY9�4���Ѣ�f��4�%�;tְ�d�f�,_鄼$'�5�*�t~q	�ЛQ���p��Y������X�me_��~�6#���Q�_`�	��u`s����oْ����`s�#E�D{+�˹Vm֡��Ѵ��
:m?R3�d�~����L���&�	�0���|o?��d�ۜ�+�u6�՞��l�u��6
���Ϻ�ͣ�,���%â�v�n���-��&�\�.L�*Lmjĕ�h��t\o��?'S�?3%��Vۊ�0}�W�}��TvJ)'�,�Bm�C���U���F��HΥ�{�ع�%&�']�9�h4�2����|CJW�2G]�a^��$A���lb�}��]6��6�ՊK�q%T��'�\+눃�H�\������|�F�p�e8�v�X(��緯x7�r]�J�Z��"G*�aւ3̕~�/��Lw�a��md�'$<�!���|A��B(me��X)�QFq�lG6	+��`l��7��>^��
�+�*��K&g*ٓ�u�J`ؗ5`�H9Hp@d���
2�.#rW#�B=5Zp��%k����� ��<C����n�X���T&T�`�E��B��u����a�yٓ�Eu[�y_��M�P��M����Š���}I�y�T�篖�<����g�C�4y�@�Q�Hi�G�7��i�
3���j�B�2,�����B8?o�3,FO6:�0�
'�JI�?:����S�t�=�ϊ���ܑ|��
�+���w���-lv/�~���s	kjKj���a��p�OeQ�k����i}�̷�(8,�w�9,{祥��[�/n��\�:�g�W2e���؜I����ф��|Q�t�z�!�J �[K"�`�>�p���T��5��Hf�T�h�BI����.��u��^�.��w�m�Fm^��(%��bt$���������4�WF��P3M�C�u=���u�L�M��7�c)$�����m�ғ>
�k��F���`��s
��[{o���ߟ�V�+9�G�.
%N�&.l���Ņa�f(��h�;�����{$���٠@53�!�w��D�ԛ}���B<}��'q����*�kU��YY�tn��,M
2"�F�[���&�H��X)#�.�X�X'R��Roe��D�"�^��b�J��Xf0�XE���L�%RZ�2K����~y���\,T*�GGj��y!>���~-�X��N,`���f�t2����d��&��=����9����*4�g�zd��‘�'��G3���u}��\ggO��ϲ6���Q0q��Q�v����e���Y�f�T7�'+�$2�јYlL�!bVQ.���F��1���6eѦrt4y��H<��(�	6Snp&[I��h�G�����Y<7E���;x?9�uf
q��ݻ��/�_�^�y��rv��w��Tdr'`���H�~V��2����y�OFFy��߅�)�W�������/h�h�[��n�}4�L��dV��*�rQh�E�ڂ8N�̛�
`g^�>�HT�e��t�-���HI��,�Bǥ��D�h��O��Ftt��<
?��Jf$��K�wbG��}���&�ٲX������i˕N��\F	.�S����*K�}B����SǷ"��B잶QZJ+�$Q��Y��D��%����N+/X+�4�˴�Ȫ$*�	 �\����Ȁ~�ǭ�6����u;dZ�(Z	�$ni߷"^E�R�1�y���Z-qi�T�Ò�`6FH6%�խ�ho�h�E^JKξ���`���V�T��rU6��!�*W&��iϔ����]�Mϥ�m`!)�B8�=�K�$�j[%�dj^F9�ZXr�FR��2G�!��cq~�7����n{/�X�
��j�;x>�_�`z�gO�l|���=O)�����h4�_���(/f�LFb��T�e�9���斪9`�s��1yt�L�b��5�S�lA��^%��E�O��l����z�L"�\v�Q�A*b���"����׳�7@-)VS?�)H�d.�[�k���ft^�
#�h{J8���]x;��4�;�|@�/��F���vE5��Q��hˀjon�_�����=�O�;����y��yB5�x
-���'*.0��B�<��k<-��h���Q]�d����R�ʕ$=���%�_5�9�B�� �ˀ���h�͚ȏ ��N5�'�[�W6�	�|��%�:Ӡ�5�,dZ�-	|�sy�t�
$}��O�t���O�H��@�f(~�8���("p��$ؾ�eT��B��ć�:��N*66ZQ +ULa��t_�����B�[�$H�9$Rh�^��
�l0)�S|>0�9b�됗5-�@�Q,���#�,���-O�1c�(+Z|X!ۼ�X��z+��9�ӷ����3���zݢU�:$y�9�0䋛�6�
�@b�w2�wj}��d��?��Q��A����Z]��m?��[��o���9~�1L���]���Z8=D!=��b��S�ܧ�UF�U�lq.��X*:��F%�yX��p�v�(��msii(옕Z0�
I1@�PG@�
*��*�~����9�>8y҂
��Ԅ�qE��lbˏ�h�ކ�t�ȓ�P
�h�9 SP��fY���½G��s&e"aA�
���R���_/���D!<���됕L[@���&�G��F�F~P0q%��q�,z>��/���9�N�O��z�`�}�+6]#$B��v�!׻*�
��O�FH�)�����w�l�� ���^�u�1�A-�ފ�l�6��U��pJh���*$�X	�c�͸��J1@���`�P�c�X���j�'6a攽gd�p�ƹ6�B͒R�~ �\Qa���S�2��\6{��I%SF(b�X�4��!@���E�c9�_��u@�r)6�&�3RHlL���'��)d�E1⎟U'��e`/��IJi�W;��hB����*9�s�D�B�I�R�qz�N{WW���Wb������/����`�8,�X�f�=���|�9
��jC:|'�%"b�,ZCy�H�R|Y��xK���n��^h�a�ÎX��/}4G���m��r �O{=�ܠt�u}�[�5bO��+�ڿ[!x$>�V�•��vn/���E�:=��U-+��BU۠�]������c:%�ww=�"�	���}�+��6=�M���V}�Om
��C��o��=L��'������ɢi�Rg��|1D��P�*&��'����{ͯf��c*�ʃ��2�o|�B��Pg��
�fM0l����+<�h6�������5���'z������3��ll�sV�_�U�^��!���]�&R�al����h��:�YQ*s�}��Q��(�U������st`4D�;��Q4��r	��؎�-_��S 2Uk:jI@�S%���8�`t�udv�v�!�=_ ��kH��:Chَ����Za=�Ө�'7Lŷ̜:h�^WP���o�&����;�q2K��o�2
�IՐb��z�mJ	�8oy�D��b*.�H�a"�7���wCN�>T5g��A�Q֘�H.�;�)(�R��?��l{��l�9 {$��w_�lNgx�n��d�A����am��ʁ���A�$���1���P:���\�Cpr<��Ma�#E%S��1���}�e���/-�!���7}��
�G@�u5>lM�����W��R�;�q�;�����~+��CN��4?+Ӵ��2���/���u��H�N��;��ݯn+��_�,Sz���qC�:��Y�m'U���z��nU�%=�>��)���Bh�ռ��H�~
�>�ɸ�.ַ
ph���x��- IJ�!��W
Ũ��~iK��3k7�s<Ģ���`l�2X�\�{2�ˌ��C8~��O�y���X��.@*x�̂��Q�����,�1�H�IJ�×�s�Z�Mp4��<��"Zg�J�%8؞�]��XF5��f�%V�U��6F�::��,��^@0x�|�e�y�>^E���	'��`��,�<��������ܵ���⃛@��߯�8{'	+��D���%�D�wh�`�14!���m+�y��/���Ё㣪���_��y�c���%����]c����b�	޴�����:�ĩ+^]�X��-��ۣ(�����ػ0C<��*]� Y8�i�F(��w��-YOgy��82�"8�l.x.�iTW4�H��О9��4��y��U��
��"�L?��v�G�j �*���0"Nl�����)�/�ۢ��#�h�p��M����m\e��D�.�{5ͫ��g��Lj1$�m��w���X`��kU.�gL�S.}�J��X�t���;���M��'��W(	��X�^UŇ�I`�8{��W��=�a��k���#�+fU u.�+�2��e��!rM�sY#h7�aP�xc�qHcm����C�^��e�d�gzo�����)��������Q��>L��i��A���^�x}�=�G�_��b�8<Ff�N²b�g�@%VIPLjG��J�D1M�v@��;�}Bw)��C���H��Q5��bj����F��q�� C��W��@��b�SS�ӳt�Q}X�W�kΗ��I .߾z;����|bb]����#fot6(>�JtA?�\Gy”��$t��t�^c0�u��|΂����
�Y��bc��I����8���O?=�瓧AZj��t9��e]��Xo�s2$B�c�R��sjë���]°��x+�1�(�������'M�2������ŬN�i{�}�2��\Ƭ��ݽ׺G1�Ҋ}�%Ϧe��_�W[V:�B��h�>Tt Jv��h�P�)d<K��%��=���HՈ��	���ObL�~�롾��&��]x�kǭ}�ѽ����SS�>�ī�|\����[�x���΄��]/EZ�W��0Cs�uD��<ZC�s���F���*:�l�ߝ�U(�*�PIF��=�b�Z��n݋�J��ʭI�ٹ��Ō�щwxl��VI5�Yf	�V���/p)�o�Z�=�9�D����5X��M�>b�>����C"�ZKP����Ex!iaТ*���]q�(О��F���A�d��Ui�-�/ ���P<>���.�c���=O�Z���<wa�%\hz/a����)2F<t��Ly���;N�Sh�K�xw���zg �#>0���(���\i{zb�g� kDio�P����?>�ۄjJs97M�]K�9�
=�{�z1�[溲[�2�R�}{��o܉���֎)�ܕm�T��?�!���>h�i���ѡQHl%����%D�W@\�����ڈ��١'Q`�3�s���|�	����?����>精��M���x��ҝ��LZ�7����m�cX�:I�r
��"�O����M�6c$��N5'�s
�̔p��mX��7�2'���]FT�V@P���hV�-��J�A��Kh&��rS5�}A�xX�ұ�TgZ�$e�	�E��µ��r�x.�^2�`��c��6����U�#l����C�K�͢�nO/�vsP�՘�O�t�=h_�=�<Ϫ+��Զ	!od\�_-�D��<�<յނ�ʆer���N��ߤmT�ޙh�q�8�1m����4��ˢ�	�����,g/�xޣ+�[�,_�}N7v	0�Iaל�t	۶�y��]���y���U�* ����v$׆=��� ܠkf�9�[��8��}�r<��Wmo�6��_qh1�
,�iӢuҢ[[��fXS��P��t��P�@Rv���}Gʖ%K�K���<���玼(���O%���_a�U'iN?��c�FU:E���x��f޼�~o�Jf���2�ל\Lx����X�:4v+H�*�tw}�&g��5��&5&*���ƂŢ�"<�L�U��F�Fy-нMO�SN���9�R�~s��[Z�ir��",TV	�=���˲��a����d6'Qߡ{�'�{��^��`�+����
 ��ޮ��������0\)��4nC�K�-��s�a@Ig%���LoC�w;��:�Z�})����i3�,������+���l����qC��H�Jo��)��V<��
�+P�\"lr��
�Pj�Ҭ(��)b�3(*ay)�QG�h�K`��&�Ӹ��t/@*�{�Nv/
�8�iI�B��OhҜp�r�6hA���^%l:�A���B���a'C?��a
_�cὛ�������^�\fJ��Ǡ~�r��>�,Aъ�1>z��~w���=�����i��Quk�Di�J�2^�޶��˻��j�zI- �Y�� )��+I�C��ƃl�3��6�3���K߿����o81�%��jy�����(l�}0h���2/���ޢ�
&�܆�,�i&ӣ#�SuMS�K;smÅ�B'�`z�H�]��G�=��{>��ņ?��1��Z���\�q���HJf���O�#_�v@Jշ�p̀UV���e�V�Nq
;B��;W�����[����xXۜ�4}�D�l�m]�$p�V�1Ͳ���e��H�)� �/H��3�s�yFژ
M�Vx�s�l�]�G������x�bzCЬ�3�+��$���}C[�r��ޣ-~�H�-
��N�U���O�?xt�]��A����^���j(�&�%=�*�d[u||��:�,v�3x�!���K�����ɷV�L����1
��х$ۛݬ��
�J`��B��p�#RG���������z���XBZP�:;C�O�c�
ӄJUP�.�����]�|�����#�a�m[���o����^]M�y������`aAN���)’��ZЀ5��꿇��I\�۠�RX5SzEp��E�Ǹo�l��+pi;�k]q����C�,�xwfj+K��ʶx]�ؚ��n�N�=���g5�`n<�2
gOH��Y���z���i�vv��}!l�ߞ:�9ékBt6�t�w���@(�9Z�N�2n�7����s�Q�'�.&͕,Q�6r��^�D���"抽��	�>�T�S��Ap�?ꢥˠ�eQMo�0��W'�du_;-0v؆zOe��5����(��'ǵ�a'�O䣶�S��;oF���d�3�[��P��F�Ib�a����
^��NT�ծ��ҳz��8Bu8�ccg��.&Hh�	���٢K�$,/_
Nh[/�z�UK�h琾��^���Y��A��f#�qB6��XL��
�1��R���m�_�'P�s��I�^���Se�-cӇ����%|L�R,�.d�]��iH-����M�
>�`FxA�Qd��&B� ��I��+���3���-Z)t�;�s������B��Ko/�|�����"�e�I}��y^��{�#{�j�m��U�z��F��N}�Q�J���rQ���
��2�v�c�&�|��U�n�8}�WL��q]�.�NҦq4@o@�}Y,TZ[,(R )���ߡn���6�5�9s�̡E�PE��:������!,2�r^�𶴙�&��B@�d@�A]azQ_�Z�͸�J� $*E�ǵ�PKLaY��ǻ��Z ���2�1	��D��R�L�K�#�X�|��z^t~�9ܸG�Zqܸ@��~ԁF��vM�ԥb�3i�T��4|��Wm�k�E�(0GI#6ԘF`I��P
��f�W(�Х1l�s�
��Gz����g��sʰH���!B�YU.�U4z�����h�ȅ���<t����,4����.�8�<b����g%���ͅ<��><u���L&x��`E>�����QD�ovl��E��?�����IAɹ���K��϶@�O5oh|�:	��}b��m4��eI���;�Nb��>�s3'��N}��CpSh^Ql�ܷ��9}���4��,��E��7�ej0x:�q#�ãey�X�gM�V5��O�jD0�tRKUQ�u7m�%l�G��*l2�d�1C�%���;l�M��V�L,Wrv�Fc����E�}��V+d���v��ڨʝ�wo����e\�p�{y|G�[7Z��F�֓I's=��sc͑�~�u�����5v���N�������Ӈ��QF>�YӞ�.hj
6��^���/��m�������M��rh�����l)�YF��0�w'��0��S�~֪��*��^���	��ނ�~t���n��3�z�~�����t��]0^S�v��R6\qml�m#c_���JP�[�Aqv�Upd�C��ak����AA*MO>-�aB���(qp��Ɂ�m���M�j��m2���K Eo���Xko�6��_q�u���ӭ(�$]��@���ۀ pi���R�@RN�4�}��^~%�0�D^�{x�T�^�b��2��lr�>f^gZ��ᢴ��fB�72��az��q/��a�`3n��R'�2�ץZ1-Y
�5P�y���O��e6�*a��B�2.q����o���l��EGG=8�W�ա�8�q&��V7�!�O�	�3i����*���*y�Ъ\fP��
���2�xH�.����/\.�,<��L!�:��^Is<'*g��7��2��K�`�LM
� 6�h�I��
�d��iQ��f��Zԑ
荆��8�G04y��å'4�U��y����ߔX�LCfsqx\G�G�DE��V?�&�K�w6Ǹw��/38���q��O���^��}�ӔəO�Yb��o�dT�t����[�خ�V�8�)�*��w=��ey!�e�����Bf@�T�!/��,�4��(Sv�O4	{��Vq��z��/����0ħ[���E�jf�����[b�ߘ�1>k�`�C�|Rj�t�⛨)7��u�:��-��΀��,(��r�����,�G�N&��O�#�,����Z`�~�	�:���\0�J�`�2��.Ak4�YF2��=���{6)n7�r��\�0i�`:6+1)�����%�cx��Q�B���A*��Ⴆ�W���u�6��B�W,�3lz=u��.�%Q͍�^a@�\8�`���^+h��]j�&�'��n�iiUg'!䄭0���>��~����JHS�� 4pO��l�į���p�`�Tj)X��+2#/��蛒��L���`WR.}�`��p�dB�!!Qˎ;��6۷���o����U�RNaX�Ƙ6Ab�;|)�_���+��'�C�?��~'�3�ƳO�����ɜ�5O��Iq���� �{��l���NM�k�*��B�#��uI��t����/�n��ٽi�)���P/lr5I%1�k⸴����:%�pO�MR��������>��
?鎷���FV��1s֞m�@�W�c7�]||b���������}H5�y;������u3rf����T�D�p�q��ϵ���Fq�&��Lp�<Ʀ��M��g���s�!�u ��K�C8�W�����k%����Y7�2�h^�x� �؛v̭���O���#�&�ߢ&�l��㠛c��ɰ����=7 �����k
�N���)�*\�2�
���q�Ԓ]�1������%a�8��g��V֒<������R���TӺ��E[��{s9ୖr���
�Ge�[����Q]��1��������ʂ�k�4��)&�e�^�i+�Z�zA=�4+4_ar��4�G|�T�:�.���m�a����Q�){J��̓���Kc��:��i�^�Z���ӱ�.������KW#�@�yж�\����X��s�}K��p���!��sC��b���CJ�q\!>z^i��5���!NƧ�!Ju+<L���s~r�%�n��T�n�NL���I*:�����j���SQO�0~ϯ8�I��$l{�����i�Ʀ=T�q�+�p��v
��v�v�����ᄏ��;�(`�ە��g�?��aZ݈�������.���`ТY"ϓ���A/��‚՝aLs|�K4
9T+�puw�Y��R0T>����
*��S��~�/�ӛ�w7��$M����oZ�4#�]#_a�Y�1d�(<��m�+����0�I�HO�*�m�/��_��h�!l���f7?ϋZp��Da������ 'Kj����|�\��9����K��zԼ`���S��^�=��dP��% �VR��Q��Q��`m�5�d����2�b��X��d�]ַv�$�9���hL���h��A3V#{D��Lg�t��7�]�d�����nGˌ��W�2�R;�<cZ9T�-TXZ��׃�����-$�PʾC��q&��e�sY�dh�/�6(x���l}FK/XTk�t���s��m�^�G\q���T�[�v�s&�d@
w8T�pO�K�#�B�s���:N�k�gSƶ��n�)�ۍjE�Wn2�
�߶��'���d3�8��-	�u�_U��'*.���=��y�F�€���X��{5���"����O!��UKo7�ﯘF(�n�^Bm�.b$(��AEap�Y-k�\�\)���!��Gb;��$qv���7U�m�Z��߾{�-¢uv�����Ηp�5$%=�5ʲ�*��l�U��@V"�si��J������t��V#h%АYhy�
�=5�7�!9§���g�(�eQT{{�Q|F�k�8����ud�@���R�Y݇`�L�kԸB|I�U���rF+�m��P�κ7��g�uG���P���<�**<U����
]����m�E�Y=X��풯;q��g?&`Rip4�������9Vu��?��:
s�):g)XP��@�(�Q�O����N����t���I�p�q�9l4�pi�Cp��H
����i�~���Cc�j�OռF�}�rb��dl
@}&�ڍOXj��hv�P+#����(�v~Q�1��bNC1����c�|@��np���O�b���F�=i1k~��Fq�=��}gL9��#�F[�HoDP�Lv��qu�%��f�[��n���`�<�R<���)�~�)��鹘r{MXA�q/{$�c��"C�)�C�Lv>l�,N��+ᑽ"�����gQ���բߪ&��#IvD*唘�Ѿ�.�P��� l��fevu�a��o��~��,�AVx�����
��씒��<���і�������zÝ���rc7�^�ɤ�[.�f&�'�+0�9�s�)^�u���:G��`kܒC3���Ty\O�
�IL]H�91�+%�rxЂ��;���_��$��y��n�>|�-�jNǑ�&X�ɐ�yX^ӟ�|��l��	�����|?h"�����0%?4���L8'�+ᐲ˸n1���"�N���3asb�q�#�gC�\d+R~✕���g�RI2b�\�Gb"�;�0��B�E��ct׼�D�Vr)'L(G���].�FףE^�l8,��a�)į�F�p)����UGR|��N���{�\�	��WMo�6��WR�Sr��m!;�m�=��=�aQdi��XS�@RI� ��#Ѳ�Ȳ����p>�<ΐ"˵q��ی��.�ϰ6:�1K�ã04���0n��˅�����{�*T,ydB���b$��ӊh�
�n+q�i�Mw�6���w���;fm�y	��u�x�K�8�B�Y�q�f8�*y9��k��t1��B)n>���o���h�d:.$�^0C��&��9��@��.�.E�~\G��B9�a���R�.?�F��4�R�6<&`�B���J�|��1��
��s����˟IVtrP1�������+������$��Շ�R�:tb���F�S�É�U�	�2�
������;M�0Lb<�J6�i�f
�c�ﰂj�Bh�J��nd�E��in��XX��6���-����A�"�7�pR(Ci����:ܟ2
���z��ET��S�����o"t��w�ܾ�ڃ�n������W�����s��'�~��*-��H�š�w;e:�L�m�Я#�����~�kQ��=���Zp���j\��ΰ@�C9����l�%8#��c5Ǎ\��m�JB���Tmq�`V>�.ý���;1@a}�t�6�0�L�N]O�w����ˠO�S�Ha9k�ɨIDy���=�
��J%�%�*��5V��ᶧ�yB!&������61��\g@|$��︞�-[^M�u���̿���&�"IC�JZ���ls��Z_|�Ӗk+��*ñ�{ެ=�إg�u�R��nLdT��S����?}�%0����"P���MN�ם������h�?�x/���f�e�h��%��Mb4^Akg��
��:q�*t�a�j֜�;m�R�U.��b��6�ŝ�6x�癝5��ę
�5��>��?Pi/�}ǸZT���S��5�xI�S�)�G]?��瞢�E�� ���ng�
{��ع�M;�c���������YR2���E�u�m�J���X5<sk�DJ
$׃D���}fD�,0y����l��
����2l�lG����o��mP�(��
O���
��(1ٟu�'�el��	K'��Ymo�8��_�A$�,9�w�I/m������PdZ�l��#�4F�~CR/�,;n��Er�3ϼ˓	z�˕���BOONG���\
^Ъ@��Zr!ct����HI�I���%	�RK*��HJxJ<.���h�B��xI��	�iB��%V(�͉�񊥈2X'���o?^���$>8�EɅB�y�*���*�1Jy�F���DKL��	HgĐ����6;i���.�A�������+��S�N��0��	��"'DoΔݍ�R��K,H:��B�)�M�<�����\�����n�N)�7Q�`�a�yN0[��	��U,Q�3@���9��z�gPMh���dIdLW��JCq3��K���݌�:>6Ԇ�!56�����
���qF8�����iN�=c9�������B-�L��)25f�}vE3��ݘI���Eх晹�l��R�J�?�hSp��2�s�|=�����t*s�`�d�(q�R��"0TE���j�B�(��G���iy?f��pO*!���QEq~�]�)SDDƋ�i`��
�*�$'��v\�E?^�,����D����A|�@�L�%�q0`-�Rm�۱9NA���0[�K�K"%p����d�ȫV%8����v���g8��[$�}�J	:��_)Q9'��$(0AP���8h6��L���-X�]�����.��.��ֺ�TT��!�2%x���n\[�dS�������/��F)�ޮL6��43W�Z�w�/p��:�EY8����>�p��+��CN�"���d��o.��?du�;�(*_��K���h��i���`Aq00�ֲ��)܍g�|�F�p)^=k�źA��I����AR��xt��.op	��*�Dt�$W@�3�X4E�!���gmnR����%��٠���ڲiBe����%*yY�l�B����:��<V
C�l*eإDݞ�Vtn����#�E�Mv�B�\{9�M���EX2�
���s�p�M�iU�f��yM2;�h��)��h���zm��������ټ�2(�����8b����K�[� ���,lo��-!)��ے�NИ�	!�,1[�[I�u�F��zI.:Vz�fq����ջ0�jC�����yz:���J2*�B`�^)�4/���M�֮�v��A4��%4Ca}0�xx��%�h}t�������:��
�^cg��d#����
ʇzqԬ���\�;���5�zW�dG�*�_F��C�^�aS1��D�g]8Iq��z��1T���^0g<��V�mV�+��:�J;*lXR ��6��4<>qFY=y�`�#��t�5���r��9�']��rzCK7v��tm�ROO�{�E`y�q0��4U��
� ��M�6q�Dwh��\�Ly+1U�[��>��u`N��"��v��>i�����[Ĕ%ye���y�CzCgf,
[���k=�.;�_
�yE2\�3|�n�U�����P�D�����8�4�g� k���li��PK���H�D���+g�T�Y/����V������'��o�t'm[ru�x�e��s��9��Q���ΎPa_ez�Z�"��5F�M�}-�����6g)�@]E��
��9��%���yͨ�OnP� [��l}��`��~�><����?��^��4����X��L��	���o��p��ar�`��g���zW�6��}����g�?
.�=X�������>�X����C͋:��R{��ăռ��6Emα,s�Bh��k��)��]��e�
��(��;<z�,ף�[ ��fDZQb��ک{{a�:�X'��N.I�C/��c���V%����ф�0��z������j�xNP!L��کe�ň��9�xk�;>F;k�h�#~�����z�[��8=�r�8u\�Ai`>�@+xSz��8��������t�Hj����Q���[o����XM���"b��u��}G^.i��~�}t��l�7:m.�a�
I�E��G�}�Cr��կ��R�Ãx?S��N���_���oO�}RV��9��!��-���v����{��]���?S�vU��c�Fn�H�������78%�:���5�j���-S���'��Y,`t'�_�
������}e3�6��;��(�'���z����ng�O}t��ѡ˨�O���x��\��h���4�f῱k�k�ַ�b�Qz�FJ�o��dn�����!��Ւ�j��O�=�ӵ�?.hH�ɗz����Vmo�6��_q�:�
"�I�U�m��a@�}	��(�E
$��+��w$�ڨ��$u|��sG&	\����p�:y
���B���%��m�����hf�޳,�%	�e�l�
Ukʀ��Nwjϴdl@��o���@p�$n��@��-sH��e\�:����������f����୛:�=g��‚��0�i圉l�0��Б�-���r%]�*%%�dY)��|�6����p�;��� {�t����ᔶ���q�-��H�ci� ;��4����f�M���+�Ò��8o�q�P��TI��Vɯ�q9i/��v�	�`&�MA4�6>3j�c�'�LY���\+9��h�e��W���O�f�f��c��c�e���N,K}v>]����u�D�M]�9�E�$�T�[ϝ��y�X�
 -��X�@�
�R�{<�QDN��Q��D����f��p�H����nc�V�e��,���N^WO�2.w)�2\�ڰ�y�J����yf�1ԳȜ��Er�em	}�iW�UB��&�Tȗ��;�ΐ��B��z�.!x����3�Ȉ>D�=ڀ��{X�d�6)�&���JG]v�)�a�E-��#
F
��ٷ��&^U?2ji8��?������0V3K��c����J��v�l���z����+��i|�����ӳ���#�Up�ᄒ<9�c��ij�{���QND����� t�~s�=_^˻�������_�Q��t��6��}�+\O
�Q��S���x[I6:np�;�А�807.�g��h,7���ȥs}Ǡ��ȢR��.����@�:H|u>�8�C:��w�녶b�8��K�|����V��&�y6�k�����osϻk�iX�_^�wD��M�p������빒!�[��0�wA:8�al�`�I$Ȗ���ݝ���*ֺ��AsEk�l���NJ��P���TLZ0����D��>�K�o@�� y|$Q&�@�N��Τ�M{0,�U(<���?z�(>����rN6C,˭`�������#m򒴉��Mܱ(cw�~:Fc����;��ɰ����n�p��*�*w�1�j�O;y����^)<�<n�DԸ�kO������b'�5^�/����ux0>���1{�K�jI]�-_5~���E0	K�:�_����<�[��ny������-�����-/���Mח=3ϜǞ�e���
�n��WKs7��W�3�Hr�����r�8�$mҋ�䒩���j9�[�+g��/����a��Lu�E��j:�+U֚�rO�����*ת�U/*�+m&�B�B4�kL'�����͹�*� $*E��J�QKLaY���Wcck� x���l�,$L�R�*��������kȸ�I�7==�)�FQ������J���R`��r�B�2�~�d:�	E:��C�ɠu�fl�e�V8b����[\�lM��/�u��%�l͕��i��J�E�Wz�~u1��}�Ԋ��ͅ_�D�,l]�,�&�Fqo�DE��~�،z�"���oVϙ	~�����R)B�
��L`bo�K��ʒ���Ș0�ZiLQ�(j���E�7޷��f��5~p���YK�Q%��
V�p�)��%g�45�JK�?y}���YV�:�q�+���P��ܲɕ�U%��>��t+�
m���h+q0����4�v�}�_p�8�&>Ĉv�{!�qm���`8�гn�$���M1g�[����2T�|���R]�]�>�H���G�Š,�����}�۰f�Y��#�m�`��uM7�	ܫʔJ&%����n���̫=�d�H��`p�
[�P{�j�.����.�Mɨ32jp��(m=��;\�����qA]bs�I<uD7�Dx�$x������=cgQfӲ��X���aR���E�T'Gr�(�8�/�����G�G��$Ǵ|�=��?�p9���w���Ew9��q�g��4Z�M�O,j`�E}�H��0Α-�t�2?���+�;��V�cbO[�g��=kŞ>&���+�k=iT\�j� �#�1"�*9�,�|����
H�Ҹ�I���μ�O9�-�:�6��!�v	g�3(h0�s�{
�w�擂�A���;��:�>���k.M�p旻%{�Ҙw_߃�T@����XU���#�OTQ*�i����e����7��k�����X��ml��N�ef�v�����U`��`ϗQ��#C��?arX����F����	��P����;�$�zT���&0q����5�cB�p��Qp��V�0!��xQ`��
Q@O@�u�9_�L"W�ֹL�\Gw��o(T�3�4/�8{z�C��~�D��ɉk�ݢ��c��cn�D�J��}0�KF�F���
A�kr1�H�Ӛ6ʒ���ԧ������>���c3�m�,�Tk'��#��w@�љb�Mӓ�e����h^Pcc�����@c)��	E�H*�T;"w���!=��'Ԧ)�w�~�5���BRc�P)9�"s�_H�91̗+��P��eؼr�
y �G�����M�n@)�^fC4�~2�OW#�C����^���}��/�m��:���;hO���ݙ��u�$��z 
�k��Vmo�6��_q�0�B�Y���iP,(��0��2�K�g�+E
$��)��w�d���[�8։�{y��!eQ���_Fm����B}��5�g9�`:[tfe3t����g�Vh~g�
ERH���ΧY[?O�.��lͭ�e�%űB.�@=s~��_#�3�}�?�<���
��
�>�,қw
�4<ߩ�����s"�F������O�a
V�RR�9�,��fUPg��C_r��Z������vH�v�ԙZ	�L�y�&��*��Z*�/��47�ۗF`�e�(��
��X��eF��:dli̒�����B��dB�����
�aX�ZW[!�9�����(��ԍ��:�+Dv�=ϼ4:�|��e+���H��v_�{c�ў+���JjL�b�h$���5�zS�b
Eǒ[�	������FӒ=�Wvp�6~x���������е� �-׎�P�O�U�K�%Eg�Q
��pUn`�_4k�e�6��fT7�D���(zs=�M2z�E�u���6�#�d�{S�\/|��}����m�Y��^邨�E���T[�j61Id�*�i��C���b:�j;�I�B�~&�q�
�h�L���� 1!-V�e�*�~����(���j��tmPu��=+���?�Y����0�a�Z<A�x���eJ�K|
xI=������'�P�%/"���N豟�h��m���v)	�	}N۩�";����S
�4�.m4ƫN�%�H�\Gk��#�U1O,�h�7���dRD��Ĥ��6������X���u�s��Z&����P�+�|-iWK�?�!T�pT���}�G�m�+(|2�2���!��pop�*ɹk��o�iG)�E.�
k�F}���mi����6��������&>��@�
�G(���W��ɫ_~��q<�f�����RuI������f�c3J�S�pg�J0�ZT�y��	�e¹2���Nk��s�� ���BE�2%�(#�
��H�e�6����cn�����8�.��-�f����>M�xn�6!NF-�r�İ���.��Ȋ�O#p��
G��	t>
��Zmo�8��_A�]��9z��t�k�n�õ߻�DY��
�Ļ��!%R�Dٹ+j;���>��ȦU�0���wS�*�nQ���嬩�uZ�y��c�k�,%�]���=�\�fx��?�YI�mE������_f�[œ��J��6e��iSw��[֤NJ�cSsLk��OH}�M���R��暓�-����������x�v�!=v��z�?_}���v?�0����WHz�	 �8��9��ٗG�D�����-�C�������/$�ݜ��w�s�<avc���bW��o��E�B� ��I���ܚ����g<0rr|װ/�ӽ��`�-$���S���P	����S2�g���v���@�R�O@���v���M�do���	L���%q��g��nإ%�Ғs�vJ��_��A��ڥ�֥�Li�iq���w蹠��}I���7�(�U��<��A
U�*�|�g��d$��w�B����l�~�3���5᧫@��H�U���9a�d��q����%�ak/�������R���|��Ek5<�a�E�D�'B�PUX��a��W$��H�E"]�Dn�����O�<<�GtY������@�w=�'�ॻ]dK[���`�Rlu:���y"�H`R�*�K7H.hr�M��b�2cCO��P��A���3�&Î]��^"JG֏R$�YJ���	ޢ��X/���*:;�]�W$��H�Et��`؉F�*Dy��y5�/���"-��	}�6œ�2�O��o���q�HX�q"e�<[4�D�z��S�dY,�ꒃE���:)sZF+�N'/ܑ��Y��)�̷��c�xBS�2g�������8#�
�������������o�nn�6� y�����Jf�od�E�[x���ϟ>�`B6��qE*#�9&��<aN���7/��Y��{t�tzFR^���)AM�*�+͘>��b���Y��TiH�ש��~'�5�|>͛v��!��z��C�rrJ��)�oM7͠����A���'�O�õ��&̘�Jv|C��ɤ��!*�����~�ǢyY��a)8��:��SjN9�������9]W�4S�7M����u�ʼ�[E2��M�$lp��A���q�o�|������?�,��<�ٷ�ٞ`�x:e
�K�7�}S��N�8E^3ϛ��Gb����u���J��kJo)�	j�Z�G|�[W�:�1�*K"��X�UMF4���zV�o�=h~��2����2Fr�a���
W�)�\AwZ?���>A
���[��F��i����q��^������˾��!�:��#^P���5ߢ�'8�E��8��D�a�2̯�+�`;��
4I^��
.���N��0�h
ʎ|�Ěg��8�|��:���Z��Y�ɩ8Ni
"䊛!�Y�K��gHP����n��9kʒd?m`&�h*A�9\�����?����T�'��c�Q�_�g��3�Wh��?R:�g֓;��ч�-@��ׂ y{QPAx|�&���e$��^@�P��#��e��i���0ڶ�0�48,6�9%8<���Q��&�K},�5����lt�'V)^璆�C�(Pr�@�[tL�)P���Ɣc�:��
��b)w4Qd\As���5�犚'�J�vP7�2?şlH���`�e��/+���c�̃GY|j��Ѯ9b���M��<�]�3`(���)j@�~�wh�7�!�l�t������j@ˆ�LV8���C�1-��m�(t_b3<�7%�Z
�S��f��}r���,abԉ"�ύ#�>���wI[0B��Ih�"�����:��*G�4*B�7R�z�sD����h���*�A?.�M��@1f�vQ˕��p��G�r�������z�p�ι�v�՝P^��>^�8^�L��֚1��@��̰�։�T���3"&�$R�s��.^%O�7b�ݕ�!M�
-\�/����i]F��4�C�ț�Sm˸ۭ�L�3��"w��ڦ�}�0R��Df�A���|W��]���M)iFFG	��K1~4�V�%�x��%m;�i��%f�U7��y0�qڎ�$L�Mt�o�]?#���"���ʢ��E�l6Lb�`��tt#�Fh�`��a雸_C�14�	_��bx�w�I���֛:�#�,\W��8�P=���.��d��\��R8�*��N!Ŋ5P��m�h,�t5����5�0�#n2y�[u�;J�h6��W��;&��Ɍ�����4�����i�,�?<=��G�~B��c�"��_�d�Htj�Cf�P	��ܷAb��K��B_�����1R���)s�L�ߌ���Ý�����{�����
�o��ma�X�2����Ax^�r��35��!��Y[s۸~ׯ8~��X��>U^o��δ��n'v��f2^��$6$�@ɊG��	J��mө_,��w�7p2����2[�4���՟�n�a�������z%���M�mR ��r��x0��G�A,@�2J�2ᐈ�>.Ś˒�0�����c��9�<Kx���iHX	sn��.S�J\���_g7?��"�y<dE%��ǿ�|[py+]�;X �%�Y>�L�1�@M*�o���E���ϑN��Y�KE���!��/C&ף)�j)y��K��KՕaA�#�&J�r��V�:�;}g�d�R ;�4ƛ,�+`(\�����y��ha�
���{��<ӚKT��ŋ��\ײT�6EUkT��k��*u��9��IV��ٍ]��[���d�/�&H�aJ"�e]̹��!��Te<Wf�d���Dg�483�կf��#x8(dE�w�`��bSry-��xM��չ�G�7q�sk�381������;�h!�F��]�5�I�� ~��e����+0I�Gg7�b�gR��+�}崿bKߐ
T	±$A(��HCƪV[�%�5Vo(+��,���Ų�*�ƻ��퐓�l���Ђ-CRƕ<n�p�cÃZ6�6n�vM
i][�^pe �Dr��[Fi���$����ƉRw���*�2Cn��J�K2����E�p��&8�C/�#DZT�1��e�t��LWY��2"���\�ۘU/��*��a�qfEI��Iw<rX��eijo�{e�r�g��7
�C���� @�x<�pA$/P�#�8C��
.w���5/��3�L��g��ռ�W�I}?�8�y�J4�~;G�LM1˱�U�W+)*.u���#�	�!���hhǫ��r�V�����-�Y^���۵���#�<��hoУB`|��"dG����5>�G�0:I��H*���<ߒ�Q�	#Nfk_�g�JK��9��s����D���B"��:�{�P��D�n�hwo��K��fɊ�(�#59�L%���(%�rgiw1�O#Z?��m���Zf� 
��J�\����IS��̤$ {� �X,��bhJ%&�\5m��#>;zM'b���T������@��(O��έ��0ȡn�N��-�C
�By���5��D9�@{�!��k�QN�ӕ��b���fN`�J��w
`!���)Je�
�x��)�� ��'VkIn�-:����B��u�v�	ϏC������G��
7���a���9��38w����6���7m:���‡
�\��H@u����
�#���ٿ�p]�Mn&HX�E�$Ԣ�t�eqo7��6J=F֚����LZv>�V�s�����/8L	eiJ>���H�A�DMA�G��M��aCet޿�����1t�H��b��ta~�uo]�3~b��A��u�R�a*�I��L���Í��g��A>�|�������<�;��M��(�,`K�M���H��b�!���X�3�f��Y�7���҇>�b���~�<�������}�9$��^�틲]���Q�t��ӕ���J�G�˓�t�n��eY�aOR�jf��#�f����+�<��8w����kBUf񟫸�cg����j��i�][�Ye���p�2�(\���pi;���9�5l�a�������pw>l��k�E٦����n��4M�
Kϵ��p��2�+�(t�j��M`a�Kje�'�CX�E���������0=�m��g��8��C��
^��M�{���ŗ�A>�Hk�S�LF	�i3p�<`�wK��b5��
���.�ߣ�i�Ӆ��1��:�
��rh�#^�2�v�}L>��]9�|܈3Q�.	u��o
j#΍�����"���9)��nWg^�n�eS�k�
��^��t%���|�9�����w*#x=�5�?�9ښ�WƝ�O{k-Wc�S,��:��O6A�9�pP9I�	��(6��qٰ�-�~����e�+�sn��E8}��Ö��'rT��R��.i͙2c������!�~u@��K
5�*ٰ|p@~��X�e�G)D�zù����P�kd��rB��_u���[P�y>g�UA��wj���>������$<�7���M_p�j �D=y�ۡ�|cx�F[��4��yg5D�.�I/əRf�1c�0�66�N�O���J*N1|�Rt*}ߐ��ao�j�-A�\ҷ��Jл���|�O��~�?v��o���
��)����o:��a�ܗUQ�Ri�*��)7
�5�VZ�92	��`FOY�����$}����"�N� ���a
�;2����lœ��^����K�}�{�e�b4�.ٽ��ɝ�F=�8mp��x|��ǿ��m��Yms���_�f����R^ڔ�;�g꩓�XN��Fy���x`�$Z���^(�R[�=���}�gq�	���Q�KG_���.%�X�RՊ�Wn����yQ��d�H+̳ͅ�Ʉ~����RY��2sIs�K�㹾���9�6$�Ǔ�R�6��B�e	2��梤�dN]�9��%�~���/'/i�
�L=:�G��녒�4��ԉ��aǖ��*�#ڐ���;U�S�id��otiIf���|�RX�����s]�kY���yl�S�,vo���+o)�K>��F_�<���|�Ei$�y:_��\�C����A��2�农�Oq�'^�)2���Q'>HK
^�K��.\�J�-�َJ��?�f����r).T0QJ��+9��e>������r���7A��;��������W�y!ld^j�rbV�|@�һ�E�;�r�9XQe�`�JMό��\C�RC�\����[h��~]ʹ�V�
��q{i�ɨ#�^}D@�;GTXî>Ԭ�V"�A��]��u�����`�ȮJx=9P��6����f%͘�nU���xr:� �|6��:�\|sv�<��͐3�]�Re��>�܇Y6Y�<��O�����������alw�A-[r}@t��
����K��Ƀ4=�_��Ɲ���V�IHsU΋*���&��vM������^L���jJ�~��zܬ�+c���Z��I�.Թ7�E!;��)͑D>��p�,¹�U��Oڳ��1}��m�\֢}wxخDy��������E�n�B�k�Z&
y3E����A�#��j�%
u^�
>�SBA�Yd��T#ʞ.s�}��K���^������������?*��b�r
�(���pB�}��QF����
խ��y:��0�vL����nY�Q2En'ه�����ʎF�&ӕC�}����Cѳ���LgE%ӿ�vhwt��3T
%(Y�d��S;_J�9�%F��v��)�ub�~ӓ�f�fSo��^H��
醴�Ev�j�!�	�^��-��u7og���vN��{��O���P��=���!��v0wR�@{�h��tQ�NҚ[�N����';k����2
q�U&��S4�s	Y�[��Ͳ���}aqog�3r{�d�j��z�ji^t<�d��)`�x��ʺ#ܿ���PS�ݝ�|���r�%ɾ��{�ħB�hc*9�7 +��|[8�{� �`Ԟ��Ec�x�v<��9HSgMC~hE���x�:f!� ��8�򭘽�ߠ|���:=}2m-�$�U?3W��&<�)v�	Y�%ޏA����?foJ�:%����� ��6�4�'��ó��۬%]?��g<���;��ܴq2�Lɓ��W�<�dD�O��ix}3>�rѫ2�WhJj���s�ڼu�/�jtX�CC��d|�g~C~
_���;h8C�j�aς�ʺa��e�
w���@�جK	?�w<e�y֊�?�S�ر
�����(��i+ʛ���o\q�!
+w��&�w#,�Im+�UQ�4<Xa�pg��Jb�b�����8<a.�f�=���%���+NGq��\ܡ�?�k�}��z
gF� s2�C��B���+k�^�xC2.)b�n�!��!�|��:J��9�rMs"+dy�a_!y��<��ު%�Ӑ��a�@����P	��E��s?a.��k'�fhҧO��ޏ��A�\N��N&?P�
�舦��h��w���2���o��=�
Nh��WA�}�3B��HW��'���=�C�'�U�X�Y��_Q^���
����[�ޟ'����i~p��y��m'a�eL2 `8F[��p?`����a�cvZ�e�)����nF�Gm�>E���-8k��zt�o���㽆��B���,�v�+�ؘ������(\�4�`J��.��h������4�"����疎���g$�E�����r�ȶ�<o���k�b�*��hg����;6�Fs�U��؉��x�<���%���ر=��	�����H��.��'wPg6 ?X��i�`]�C*�t0�ה�$�=�Y�yŦ�w�K�rY��ow���#KM���������h�b�4|��$-@Y���3��[J]B����骲ւ�1ѩ75S�g�~�U��5������4���U�\��;D�Q� LÎ�+��?�p�mQ�-�d-Cb�+���.��8��*q�����֢8|1��N���嗽���H�C��Q�U�>W[���tp�z���#��뎘7�.�[QQI?�����7����Kp�Fk���f4��yQ$C����9o�5�����H/���d��v2���Z�[� L�Ȧ�B��	I׎M18��m��"�t�S5�#��ўNg���/W&��D�({��߭z����Ƿ[��:7�풭q2,�]��s��I�am���q����*��0J��-�f��0tUm�Q]V�����ud�2���w �������^�Ao � ��m��=�բ��?X�b�0@�Tv�D�?��ϥ�6�O?�ȩ-��C&J)�g�N��j�!�Qq�]O�֬����?���T��#
�	R��o%C˗gV���Nˬ'�o:��*�ĕu��̭Cյ�H�vײ�?�{k[X�6�) ڂ'o��RW.IzY=~�e0q�^E����sѳ��a�f��J7�|Z3+��;�]Ϭ�o�XD�p��@\�G�Xw)e��s��}FX�&p�+�'���~1���Y��:�s����u}M�46���8���r����ᒥ�;�Ba�&��B�����
ɷ����=݆���pK�����������*��eo�.J�Ʈ��<0O�Dq`a��e�7` ��W�o�6�=�j;�l�Y��y�YV��bX:CQ��t��H�@R~���#��E��H$��ﻣ�S���^�ub`>{�3|Ln%3^dpS�D*=��4'�A�F��hr4��_A�`�A�B����u-7�F���_�~�٧)Q��I���	X���BD��#����퇻���������f�n8n��-:�F2m&$5=�Y.��o�t��Cb��b
	���)E���i�妛��~)�.W*�X3.&��Ee���X��G���L�:ԟL�:a
��)���d^�>�v�4��)3�pa|�<��}�7��0e�ApM��ΥX$RS*�7� U�r�Xx�V6�xq:�?�r�1R.��a��\������lԫhpg*�qWB�G�Û#�`�+�Qi/�0AJ,DLݏZл�<�ĵ�}�Al��)�m���0C�^���lͯ��h����|Q�T2I'o�f�i4���nV�ybDp*�b�A�h?�[OJ[�VRET�6k��)ߵ�(�l���.�*�䖖a��=����P����G%������GK�~�5�~q��匩5����.���$8{}~��E���A[��N�3??Б9��Ę�(rXg׹��pI�b�è�0�	KE�r���_�f�nԑ*
�~�j&���@��ᚯxZ�4V�j <�P4{_."�-��Eo
?���6	���^8�m�p�)>�8=�Ҷ97J"�Zl��)@�T\4J,3@Ѐ��tG���Ś�|�����J�:����~%k��1~�9��=��Ѧ�bQz��Sp��ʎ���2GJ�I��6t��ӈ ��~l0a�\\P:�
�#m��Q��g�m��/8���n�r��L͑�^��g�6h�|�>y9m��K�暖쟣�Ɋ"�s�˘�9��A���"��C���E�b��P�ϩ�?يn"�چ��~���>z˵�ޯR��DG1f��j��I���(o�Q��e)�
��Wljk��@����R
eЈ˕��)��4�W>CwA��G�Va����Ӡ[���P��p!?�"���c���3��y-�ni�R<r̽e"�T�6�،\Vo�.�BC����_�5�g�f�b��"���U����L����ۖڤ�NB:
U�)���3�mz���k�6���׫rka��6Kdh�����nѤqp�����ߨ�V@}*w��j�2]������t���c�Ҕk��4$L{S9Ӛ.��>n٣v��6�ӷ�=wM.�=�=�����f]��ݡRH�
�e�MB�=u�5���~��A�In��f�>L\�Ȍ���T�/K�~1��P(k��.��
9��Q��-��d��	Y|8�ST}Qo�i{C/��t���(�!)���k5=�bYE˫ǺU�|�9o��������=�Ճ?w[�7=� �%���ʜUL�X�!�ͧ�\�����o�>8��s����P�џm�T��^�(G�Uƭ��h�Ÿ*FKĚ���AZ8dS���,uE��w�[�lu��:i�%�}d?n�G����o�\�w��{�no?"����?�����Vmo�6��_q��,)�>�/ٲ,t]�t��¥��Ŗ"5��c���;R�$'N�X"�{���QI���i��-�ty�|�ns�
�.�fms�M7B�72�Ѡ�`�%	�m�l�
��)B�2z]�
j�,v��?"cwA�%�ٜYH��:��Z���u����w��`��gg�(����Į@=���Kb	�ԑ�q�1�$ee�l~�_6/��|Aq�/������A��J�\]�n�$.)��F��1�Xp=�v��цq���T�qqd�n���-ܠ�s�Y��[���*f�3���.m�q�t6�_���J�7�"����ߟL��;��9T�-���4�Q�0�bre��h�k-a����SX���+	+�]��dP�UN�:>�&z�4+^N��\<�&�A��$P�c�7�߾���L�%�{���'ή!\_m8n��
ۜ�9�\mMi`�m�t���x���J��s���#��6�lUw|R�Yw��>�X��
f�{���<���٘SN�Σ�ڧ>�àz�!U�:�}�@��o7����I����p�<�/N��4ܕX��Z
�%Z<�P�@�%�n����3`S҈jIk�-��j��9<�,r���'!��jV�Q��IG�i�#_��Y�?� [k�ja��1<���O3���1� T˳^'��4!���ei��,B��Ǐ2s��y䍹�\��*����Ԫ�>�HFA��z����JR�ݺXНЬn�X��eX9T��h�,��d=i������e3[���.��Ǹ��IJ>�#pw��t��Z�昍�!��>|`��t3�`=���\� �����'�B��Q��;��9ppӦ�;�$j��r�]���>��L��잶5
���9���Ȍ�`_)���2���zn���M(��������l7=���Ri1�!��J�t��(�o�~��~G�ʡ�����L�%��V'��~�/����ц���K��O,(Wt�fp�5	�N�f��~�� S��������?���w�Oh�&O�u$>��!��y˩�X�
��n�c�^2VR;f�9�!5և���T[���9���d�=�t�5��Fco6�S�s��n0<*�%�8�W߉�[ԝn��;�4�w�uU�:�O���O�?�tV�Z���	�*��Yms�6��_���U�O��8�u�8M�O�6�$w��dT��D��@۪�~�A��h٩/�D$^�}�]���r��<3�xg�_�1�p�)��^V&�J��2�.Ҡ��ꔧ��h�49�	
ZV*�Ȕ���)WOa��>���Y�r�����HXSN�f�*R�sx{|x��#����[[���-؆�JTO?�^�"#��CƋR�0HK���(�d1���3a�,�cC�f�]�$c�i�Sں-�|�
g/@���0�:�5��v�*7�6�
mA�Da�b�����"��T5D}OHҋ�|�\�!ik���ȥ��紩_JK:�g�?���`�#ϘJ�CƨY
)���A��-��Q.��|��j�Y�W0CG�	�G#T�:Q�J�nt�7�i^���]�c,D��{�+���WQ�9�3v*��3�M�]�~W�V3��֋��*;9eJO��[�U�ٿ���(s���*���GQ4��fb��PfE�q9�3��`�It�E�EM�EIƓ�FS��D�R�E�G�\J��������߾�2F�Bm'G�YI�|�kIF85B���vUlRo��2z�)\@���Y&ߴ�>Y9�v�%��ĵΞ�D*4z9�i.���8Fut&R��a�Iy�����E�aT ̬�K�%���I�sk�\m�/<S\�Wکi4�	�L�����_���/��Z�����nWv�g@�;�I'�;������B���ޝ�����3��V�w�
?q^��.����E�PU�]��l�c�A��ݪ�_����y�@{�`�����[Uoʇ��l���VE����%K���*��~TO
B촠��K����oh��%'sE�b�x�z+�9�*�ւ��B�߇�qjrǰ�8��¡賩�y4#�1��
����@5�~g�o��-�D���1�t���=uo��f�Ƨ;�ӛ�9)��k�$A����#�;���ÎŁ���O6�w��2���7�n�ko��Б���Ѓ���͹����{o�o�y�N�5�{i#������	u�L�e�Q�^�m��A�4�N
M���(�sp3<��������X
�v���9NB�c��D�a��}��̙�UF��PΎ-����(8k=�%�Ez�
b�7�q߯OQ$��֜�x��I�!n��`HJ5G�1����.*��#8�r���7��e�m�+)sΊa=xʰ�Ì�1��9�?ʗ�(���)�f^N텊"Q�Cw0�%�4b��]
���U{p��u�*�\��~�$�
��#=�k��R����,v�ZߜT(?9$������mx�U�G�9)wq�ŵ�<8#�Cz��3�P��������ė���Ow>v��{��זTe��S馝��mxQ*qJ�L?��pGhs�)U�z�;y�'�YU����d~�S�覫�<����V�v�H�k(�Eh��.�N�+��B�iG����yA��eb�J��M>����Û_޾������-�2��Cw�f� IJs��.W��K��	��((KT��+6"sY�I�K�E�Zt�	#��D��_{~֋��u�Ra%�[�m����B��
��0c�>�٬�R߷�d]��̃�UɄ���F��u��
��B0�Ҹ�P�p}>���MҏF��i�YgWb �<��B���t��@��+���C�mEPhp�xH.��y\:6���U���}�f��P<�Sp�g���*A>O|�3�c&��A���<s�oDXx�Q�T��Q�Ƶ�E�خ��3Y��G�hQ+�v��gز~���[�./����=�ݞG�M��!�P)����J�I���]���׃���k�iM�Z&�������aKY�٭
6n��J�Mꞹ��S���]�7���{I��K�97���1}�xY�od�RD�o%���N�T���r�E�a���ۺB�{�{s���܁��$� �[�ţ��ew�
�
��d y�	;���#�`1(�(b���^�a�6�~b��\w�
;`nd�d��9Ģ��q���S�r!����?#�W�S�x nb�ɱM�syU�����3��$���{rVt���WV��0�B��dM��Vt�:d%J�Q���q����!܆��@B�
�:��_%]Ѱ1\����]Z�^�M��D5��S<�����,��Jcc�z����	���4�k9��d��%z���.��"c��c�G��x�`s�j����>�*�sM.k�6S����o���m+�t6���t|3�$�H�яm_s�k7E��I��(|Sr3
I�J�o���X�Fm�:�躚�<>���������i���#�|�fݎ�T2�v�SH9�pg]��M�暾!+�j"Dz��oZJt(-�3�Skm;(O�כk>�÷��V?Z'h�6;[u���o�M������~k{y6frs0Z��}ќpp=�{��ܼQ �V�˰�ވ
{c�F�`7r!��������Ks��ij�v�Ή[~���B"��4����6�����[9�5�q�����y�'��^k���`S��H]��	$9Ӛ0�],TB�'��#"�w��7�^�¹�\yZ"���o۸�����a'�,ǽ�Z7��fpح;,�� ��e�*�I%q��{��,J��fkG"�'��L�k�W�&���kr�2r�J��*'+�
�&�c���d��kO��	�)WD�JF�D"f^W�ɂ�d�&�|:�K��:c$�+�N�&-Ȓ!�DTELx�����/�I�3698�y)�&w4�L~a�������T�٘�"�u��$�6F�=��!pjXRai!�뗋��],�p�优����jr��$��G��E�y����"Rjgw�ْʅbTF�"�,�{�<�Y�0��5	
��u�R���5��\<�.E�,�4�O��zg��;pJ���,/3���X�'A����HB�^�{'�ĺ/����� ������:��2O�po�Ќ���z5'�O�ﶛK}]I� ��s� w�� ��iw�i�$�b�ȱ��$c��r�0&z�ۍ-�́{�`IF�d	��T�2�	���z�IٕD?X
�ܣ�XI%Հ+��#����x��7�o}���[/�@C��(h�*=�xD��q��B# ��������~
Rd���S���i0{�J�&�W�'*"�
T�Ӭ�̩\qp��@眓���1��A � �
�hҖ�vU_J���f,�g�!m)�\s��|��58��E�+PszM���\��E~ L~w�=�j{�(<2�%Z�]t�����8�B��!Mn�N�MP,rVTP���}vs��h���S�
�u��(��-��	���
i��[<Ut�V�,s�R��K;�lL���^5,p�|��f&iy"��^�@ݕ��g�v��Zb��q�]�Y��R�'k n�t��!����#ݤ��eA�7W�����2���!M�
�a��|��z�_�Cv�q�ـ�@<�+i<j@�6e�/U*nP7�]A��s��%s�.M�K%�J�=����Fc��Mج>&���%�߂�`K�x_��cv�1��'��=SLΛ�>�y���h���"ho^�?w�|-i�13����ꛔk�`6����do�5�d��u��꼯��Ѣ���`�~��#VY��`�q#i�l~�b������K��<��E�$׭2�kI��M���z���`<�,/�	W0O���
2TY������ �	���h��2()V�M
�1����+x��zg���?Yf"���<�4����>�A���S��ʷ�1��Rg���S�e
�CEZ�}N���	ź�	����!���)-�c�?@;;&:��..w<���g|�<UC�SZ�`�JH�Ze�9��-U����L��G�b+���f-�04s��c~Mx|:��v"lmښ�݃]�@���+a~����C��^\�"@K�`�0k��WRO�a=��N��Tx:�4E���j@��^�t�颐i��y@�Q8�x9��?3�#�g�9�i�t 
�~A�E�$�0�gtɲg�(�߀���:cc~J@w�N,���h{xL��s�Z�my[{ߡE����3�֊�k�,cּ�b�u�:{'�)�Xm��l�ާ��D-	^<���x���I��
TTIKfK��a�(������%]�/4gWW'!,���\ ��vPuZ����(O����,q��;�ھˠ�b�D���mkp�T�1n����Uo��WU%/
��p�5���G��n5����;�b%[l6�h�ٶ�k0b~O����#W-�E
i Y|u��ϒ9�)�)��hqҥt�
�~r73z㎟U&�{H��g���\�A��x����a���+�֐Z��!A����u�
�;86�r"�����sr�%Xk|P��b:���l�^��#���b��q�c�����=�]Q햏A�y��f�J�E�����H!Je��C(����������652-+�P����Ѭ2�`�[�b`Z�U���	�	�-e�A?���Xj|��E�S
뫋Wg ?x���b�hxC׆,���f@@vՉl[�@3k8��~�����S��^�%h�Azah�ئ!�[MOX�Ҩץ�6b�ۺ�kq�>)��y@Җ>kQ�6��	��Q��W�ފ?����v-K�.< �d0F�B|��^`G�٧�(�u{�c��ֶ�Y�#�AJ�	��(�¸��j�7 {݋ֳ�׸P*�r�ۉ[=!�y�+�*_2�1����t��F���PJ~�ݏ��.G���7��2"����,|i��0@)��֝��v�NC7��u8D�W��B2]ɂ�=9���觟3��7V���8UD��F���e��c%#l�'�&6:��i�k����0`�%\��W�����{`�:|�L݀?�����
�C��eԨh�F�ZX��&'/^�ւ-"��d��7�bN�bI3i�摙O�)�fdYS�"V��Kj�?��W�N$x5�q^K���E6qU�@�>
Ҍ	f�q��Y^�<�IU%~�dP��#�֥����-��$y��͏o~���+!#H���Is�`���h�L���V�>q��v��˻�*k3&�����j��ߜZ>�W��(�WY���@�+^s�6��;yh�@�*c5��z�7���?��Ⱦ�,y�:l;�ɹ��dN�l���^{ki3ݦ��L�m�� ��m?P���7�ˎ	�JKcZO��[/�Hw�m'�v����dnQ;�7�����2�Z!��YY��8~�_����v��@Ϧ�I0�f�w���PmqC�I��I�߷xH�۝���yU}�U��������]�
=�_<G7)AoR�7�ؠ�B�\�)�b�M	"�ؒdz6��I��
��J$y!b�b��5���E;����_�v� Fc��1�b�b���hI+^d	�������~�V������\(��#g�
��
ۣ�D�X�%�l�9����r^
���aC����>�Ng�XҘg�G)����͡�rK�Z��F\,��%,yMR��\���Yi6,WzG{��ܑ�FgϼL� �����۲Ţ�i2qND s�e�R0���v�5�r��R�Mΰ"�q۟/σ`�U��_`;B/m��,fEB�T�.�`l���)�@�!�]g���A�)".�ńJP�ъ��tJtt���<�f������,D�?���� �t�l��(."�������	�ÿ��	�O*A��{����j��`zZcڟ��)M��yvW�e<#��g�s�1ظ�$As)�Ȭ�����	�3j�e�(�Y��Q&����B��
h���4N��{<t`I��ӓǾ�6X�)��yY�6$��rAVDHg��S�	\?�h8��Q�z�9�N5��׳�m�$X|�2�z���`-�.ؐ`���|>>f��ؿ���>M�qL�j;��!����v��b�N`���V����%]@���eݜ�)y���<�۴�D�߷����`�DsyQ�U��V�$4[�͝9/cG��B���,��X�-��e��v�LB����p���� ��=���,{7Dl��'�'� �f*�Ρ��d@J�P�$IM�.g��`4#AY�.^<�����C�$D=��\7չ��v� P؎�G�y�D̦�޸R'E>+8Y��6�H����Լ�D��jC��ycl��c�k�y�
�[�nS,��`���T҈2OM��,s+z��D����<��0ˡ�<�"."�Ǽ���wT�\�S"���J�D[_uM���������'�V�r�Z�û0,�rĚ,�ӿ�d�J>=������Z(�ӻ�6ŒC dX~7����oȑ��	���	4}�c�,Z'':�oQ���<>u��+�a��\G��gV'����u��4ڑL��Vj�krۅ���;���5��!3JM
�����<�'#@%Y'�Zn�z�*���'���	9vYOI1�&�|�����P�o`9��'��$+���Qh���3�t���\�	�j�h�87n�zh��h�_no����`Y��������Y	[��F�ǀK����ġ%m�U�(7�T��G4K���j!
��=���{=�YGLԶk���ؗ�Ł-fm1W��Y9"���i��M�֒]]��/[\����(H��jZ��n1P�7U4����<[ykmV��I�0s��$�Uz�-�$��v���캲��A�Z�js�u��Od�@5w��N.[{ͳ\�4��Q{K�
Q�x
��\(n�xs2"��ZV�IR��v�t�4��=�3��Xh���
��nN}p1�m��`=i�/"ϻs=����OQ�Ee��
�p��`��6�~�3� � (J`�Mj�҄U����נ��*e�[��X��+�#��b���]&��OH�bV��qj9%��v�d��|�`��&�ٚ$��)�
���h˱�6�/+a�����Eg��!D� 4[�bn�Es_�"��KA9U�JW�)ɬ݆E��X7@��j��(�u��O�Z��݈�\-KA��H�O�L��d›ۈ�����S�)�֕V�)*�ʦ�]�=�\ЭF�j_�,�����.�7Ϗ'���n�cm7y
¨k��{��
cT*j����J���/���Y��!xv�D�ib�p>�^\��(Q���a�珟>y�ܒ�N�Pw�cX�6f�
��o7�0��-#x��ek����Y��?���r�0m�Qh���2�q�U*ӄ�`�,iuI�q{�Q��C�@Sp�%���ގ{�9Z����M5Y�<ԝ��#�7{N;'�1f�p4�<�HO6����ζh��mī5�M�����D�]�����s��n�thVl ����Č4��.΃f%�|m'��?��N���(D��w�&�>��/���R���a/�l/���d�Ow���@�Α�?8)s9��2��P�܍G���G���U��c
�����)����FSx�27���T�H>X���5=��"�}�=������Z42�F-h�V��@~'��y�5���8����[�-�|Q��מٌ����w�} ��տu�
����]��S)'.���ٻ������g���@��/��wX�.�fR��=�G��5T����b���WH+j����9I���E�O+���u�U�koګ]��:�ur+����9�N
ӯ�*�����s��$"��W�n�8}�W̺�����8ٶN�]�[,��S��4���D��M�}���v��I�˙�3C�a)���Ij����_�K��L��x���ҤR�9��������� �`R�A�RE���5�T9����KO��@<œ�L�D,����,�xN�>������#����h�x1��ξZ��w�Q`�����G)�\��S��,De�i�
f�I��%�#�%���4F�z1j�X�F*(5=2
��z%� 	�,Ȳ����g�!Ss�B��H�k?SX���e��&YB���4u,h$�qL�)w�-*�D��Bjn��ʾ`�oЮd��ꣵ�B-EI�Q�'me�I�T�3�;�zЩ,E)۴S��&jf�⡵n�ܥ�S>u�[�T���@�pc]�(Bm��d���zF����)�G#�R�����R��X�`Yb��8G-����y�:m_��$������Yc}2���]�U���1)ɼ'�{="oW���:e
�Ն)��t+1�Ü~����X�����'�[٧va�
Sf�y$�p�S=�Ԕ��
 d�m�ly�R�/�uR��PR,Y/�-5��1ʩ�%R&�D��{}zz�W�4N�O��J�hT(�1�zܚ�}O������g�k30*q�|+X�=������[��[s�G�Ϡ��<7�#� �9�W��jڧ[s�n���X������=ⱜRde��T��d�Z�6\�5���8M��Y{��2�9�)5�ڱ*�����D1S�'=j�S��I�ۀD��[R
*Q,�T��JB6}����?��7����cV�`�����Yc�(���}.?�g��fzm��M?g-�_>�E�y�8^����᳆4z���O&h���F����.�o�Uρ�F��o�;���S��Z6�Z�Y��䠓����k�ٛb{r9�Ľ�+�{���b{���H��o���T:�v�zM��
�.�g�`�<\ g���/Q'�o�b���
�E�A��{>���|=�>__Ӯ}e����͸�*1����{�i��d��nZ{�;(}b!
�\��<G*���xН���K�|Քyi?������W���u���[�$=��4����0�A)v'��xuz���@��B:��V����^Y�Y��t�!�^�
.FG�
D={h�j�&�Q0�� ]7�Y�J�G�xn'Z�r��
������2t���[�-S�'t�4��Xw_��ЮYb��0�:����H�f@��+��ʐ{�Ô�p�U�L�;:�ll�!�ut�6�Gx����&�&1��k�1)��\
�6dz=s'.y7Ύs�Д���_��T_y*$	�ūP?8�L�
�Vq�r�0�ׂ����ɳ�¤�:����wm&e��[���+�N�th��ڗ&Ox���W���"�B��KY]�*{+e��HI����
�T�����Fu?��}c�n��ֶ���FcH硈�9
m2�t~�u�U�c���I%@��c�5Qm5O����G���5����!䶻�ܵ�rg��,2�n���TQk�0~����B���0p����`PF��S	�l_b
�2���+��;َ�cc/�t����w��p��F�un����#��Z�.ຶ��&�k)�M2�Ѡ�`xa��Z�ͅ�j�"�*C��ZmP��A�������D�"Œ�l�-����J�e��8�ݗ�ۯ���E����{%��r[�-��%LRG�0$b-V]^�y_��?N��$��(�f2ۡO� �*MP����k��
�&Nͫ�QZ��a�W�P�
5�JI+���zi�^<��bQIn1j��>?a,v�� 6�k3vE��v2� ʕ!��@&5�$>���WFX�J�W��Oie�
��O�Y��0\�=����8����$���t��ώ�AG0C�����ڠ�p��w��Z��4D��i�l�*"�Vi,O�F����g�'(O�ӓ˿�Н�,��@���ФZ$�%����W���������}��+�8
+�G�~��Oڍ���JX�caD"�%����{읃�G|��e�׈ӕ�W���'�O�B���Ő�~�d��^iE@V etC	��բ\O���(~���$�80�{�z+U�=�jF����]�Y�H�h�m*�w�b.k
N��&]�kےp>h��&_��J,�m�6k��UZNc�O�j�e�Z���=�b�0��0�Y�b{>�
�����Wmo�6��_q�>H�l)MW4s��Y�ź�@�}	
���[��Hʙ���H��NҦ@1�ʑ�{}�9�p*˵◙�����6C8͔,xU�Ie2�t'yNH�B�j�i4�c�]#�%��kвR	B"Sz��+TSX�����ϧڬs��'(H�d�@�,�ZZ�J��}Gx�����3X��ш�T6od�.PM 3E^Ò�� ���,�)0��K/������|A~r
��"�����u�)1Ӛ����б�^x?x0����aZ�������!
dl��%�^0å��\p��)��!�pʄ5����v�Mv��җ{m
�@�g�@��e��"��d���qd�>+�bl�u&k`�Ph*%H�-�ƚ�ƣe%+W�Ma�9���Qx�r�ꅶ
�
'$�����4=[Q��6(P���5�*Nw��Tj����̬K�@e�6���@��ޙ���fr\�L)��ǫ
G.h2���H�	!�]�Q8���6ɨ�/ߢ�d)N��C�U���m_%����t�'� �C��i���T�,�l#|��ꈚ8/��:
��]ۑ�J)�)ɥ��h�hR�k�i�ۓ�*-�-����̘RS��<������υ$�\,%�
<�<f�f�$�R\ld�n�3ث'п=��M�aai���|]�r�BB�iT�J�u�t�7�>#��� �[���L�/s�^M�^���E�|݉������������u���z��� m���̍�����ӹ}���0e����u�f�q�w�I�p6ӹ4T���>Y6�k�E�oA�� ����sM�	DAE�?�4[r��܃��7Uf �������f�hk�mxrۺ�a�C�"���ޅ%�rh�� ݷH�?�e�t<�\������SE�DM�Ҵ`�]������kfB�rv{�ϐ�y�LD�����qo1��_��g�j�L`gL^k��p=ڙK�%m)C&����5m�e�1�I�NS�O���/h�\��Mw�l!�I27�î�vl�V�x�W���um��E�X�He2���.DOL���AGK��Z�m`�?P�,�=�\���g��#wL���/Q�:��<���Ѻ��Y��r��t���pTX�Q��ks��zJ�+���O^���̽��ڥ���D����oG�a 
}���c�gBݍp@�a�ߔ�-�ȷ��ez��Q�v�C�kB�4'w��%���N�Y��vqLv\N��o3�T���
��%4��B�>��O���E�M��x#���7i~��=>�m��>+{��x�M�=-�o[�pTV:����I>}���9��l�]��p���K:n�H7��ݍnߋ:;�ac��$:���ɖ����X�+�l��VQ��6~ϯ (b���n���C�=�C��m(R�bl-�dHr.Yq�}���N��P,��G��gɲ���Ϻ8�h���x���%�Ӝ��РյIцU�.�ݯ���q\'����*��Η3�E��͹A��qcש�Ay��ŝx��Yw(Ȓ�B��?��:pXVw� tZ��\����6O��d�/g���T
��}����VB��Ԣ.�x�+�X`��[���.��@z�a�:Em���α�q
�1����'�$��cxU�好�bI�ڬc�
z�eZg��������"�{CE��Z h�c�%ܻ�5��Q���/ x�MWNj5��K��k��*.�TY?�J����N�6���	��t�Wr�U�1(��n3���1Ԧ�&z&K��ЖMeQ��e�9B�Iy�zT�W������܈oh5��)X�����O:Y�/|���F�U��e�Y�������� zZ�,��l��
��g���!�r4�]Y;�#[!�e��	k���^�]���:�cOX���e��ᣲ5��=؊�	�'DM�������:Ŕ�Ŋ
�Zr�����m�7
yk+�q��7vv��J�X��8���E����Z������l���� ��5���["֊O�����xQ�.�
�t�$�����ts���Mjku�=0z5��f�����U�$�����1o��%�j��^}���^�?�-�a?���rb
����誉�!��TП�A�����q46>Ր/+�U�l�[H��g|��,Kw���MÃҩ���^J�Ćq��a:z�dQ�}Grr�Ҙ�㬨/_r]�08���i�I�@n(/T( 9@�k��2�Nv#橓�?
s2�8׶!�jH�Q]ͣq�W�0�Xi+�~�8u�\��[�*��K���y}�}[�Η�D�Cм�-����W�ts�+(�?�@ϙ}�_����
�eQ�N�0��+L/�&� �� $�!]b��$�w�B�;amǁ���g�/ϸ�����a8��~�{ ��)�B���� 1��������u�zeQ���#U&�GF�ؚV�H�=�2`�\Y�E�b��*��x����6
�eKEn�H���U.�\���#ws�cDnj֩���"X��A���>3��Ҷ
h���ɾ`��	Lπ���aC�M�Z�[ݰf�[5"��2��M)ɉ�󳓣�fb`?�Z^��y2V��5neb��-��G80;k�������S��x��U�ސ5�������ƪ�ކd"�,��{R8���tZ���<��Zmo�v����7_�B�H�z��,��~�E=h�i
t���J��l����I���9�[�8�(��I����~U�mwT���m�mWu�j{�5���v�~,����{������+���!�{7$�Ƨ������~�T�hW����:@Pݵ{]����^tp|>�c�;4�c�>�f����l�_�7eg���Oh���J��(k�6�}�x���c��ꠎ۪�T�W=�_mT�m�N}���͇��H}�*�n�8p�����w�f�i�1��A�۴�u�����a}�*t|���Z�[���1Qn�,�><&QV�.+��OK;��r�~Q1��*���T�'C�Tb�M���7Ci��)e^/���vc)��
_Kǒ`�5V��7�T%a�X��/��2��R��ϵ�ȸ�>���f��>V��V&���Z*���U�FaUy4u9G�*ٌَ3ih˦a�������)�I�fZ2#�֩L�ie\˄�2Q�C��H�,X8��(������S|�˨s�GM��2'W��@���r3	63�E�2���$r��/�V�9�Ff��*;���e��p֗�H��i��E��ώ��4l�_^�D�4"�T1��x:�d�L
�-Ot|�B�]���5�&��>�]���i`�;Q�_����蜓�q�S�KP6��]��PC�
��z^O���[u8�T4�vzM1����;��{,�5!�{��l�T�[7a'��غ,��Q�ۺ��z?T��F
u��گnȋ`�_��)W&d�X��ڴ@��:�tʟ<h>���"���p�o�Ս��b[�._ī�lrYweS]L/�
ET�
uz��7�/���{5y���k�l�g��5�i��{$F���|y�J�~�6ԅ�eQ.�(M�$:�qF
4�+5$$�s�x�����bLH
�LgQ�)�dx,�tBy�1��<,�y
@D��
��V���4���"��,��"������iV�������D
����i���}Y�U;j���CC9�� I���wMl����d��!�j;�t�m���o-� �O7�^��u��y]�v��ذY�"I�A�bIL6:W��D��pf�iX{ac�xuDz֦k��p�\��x
�+/���i��g�ƍ���ۋC����K�ɱx9�r�w���A���`�&��ku��x�R��F6��[}_߫����������<VǶ=n/ f47,dc[m���Ly"EF�&��px�EJ��YY��Ό�������GC�;�-c�K�b��.��ĥ09�6@F��k+a��^7Dب����
��5��D�UU��ln�JВb�P��D��èh
qԴ�)�-��v��1��|�[l�dK��(�v8���fTt�r�P�>4A�
C�5"���_�{_V͌���fdž�=U|��c�6�'R5�i�>�@�DX��3v�$υ�BW�#CR��aDfe|%�*P8<B�J�mu�T���t�/�Ȝ
2W��� �R�{��o��K	�rc�҆�Q���N&��Ip�̃�
��6 ���8ysi�_.�T�n��Sٝȧ&���ġۄ���v}?m_��O�;<�nn��Qp!�eWj�������K=���ୣ����#��ޭ�nu�x���.�%�W1�1�\�d��MG��Ńյ�j��ZC/��U��2,��`y�om�5�w��cYX�4�iU�?���.򋉳�����5�;8N%.�Y��@��4�9F����+��`K��d>)�� ����=)H�۟��íf��܊n�M��������pR+n�ӎ��/�y~���@}7�P�Omc�wNVW�: %�pWӛ��Ftއ�����4�z���JP�}?Cut�{$���U<��𻶻D[J��Ve�;DUB�N��u]Z}=V�٥�`�m�Xe/l�[+w�1���A]�̧<�

W�Y���0$Q���+(�Q���H�^OOz�Yؕ��-��Td���|@�
���d33����iL�ZB6�d�1$��JV�h7�zd��E1 �h�J �z���h0��;��m��\3�63��C���=x˳�_Pm_��W\��Ǧ�ˮ��ᆃ��[�W����ܖ�#�`zJ�4�5	$^!z�!�dt^
W��2Fb<ip:��-�
���J�&0���g�Q4"_��27����.�"�A������K#���w�'��ɞ| 2c���ל]�HCZʧ��/bD�6�I,��K���p��plz
�\n���=����
�6�̴���a3)�bR�Źr.&�\��Vø���2[8�0�tg�=�V�™G�e�e�5!�Pz%�m�Wut��o���l*�U��hf�[;�����G*��G��f
�y��i��;�MW��q���6�N�"'�C�¼p+i�u�62����5���I��i�5���ݿ z��;]z�`a#��qL��e�СM�����Hk��[#j��HO�H����&��ZM���b}5}]��#@�����s��:(G�}*@dLB�3���T�'e�#�€Ȗ#b�od�)�qF�I��s�I�#R��S����nټd�ɒ)���o0aK9�zNxOZr�3m���֝B5�Qm_F�4zq�����e����z��՗y޲X���2��1�a�;����#r����ե�6�`�/ř�bԕ�!��V_E���bl��Y��?S�g���U�d0yɣ�`�s%9F�5��`J/�
J課>t��8�b�x��#q<C�a�ӗ�� !��tUr�/dhO��yF�����ЦǬ�f`] ��R������]��em<�4��h�݅\���3��C�@�������!�җ|JBgx��t*���u\lB�;k�����%g���Lo�`Z����Ea��^��cO؟�ׇ%9:͒ue���c�|���9�-�Q'y�#�H.C�C
J��o	���q�Z[!f��+
�	�B3�W��~���׈
7C��}��.��F���~ʙ�Η^l�Y;	���47sف~�z�N��m��`�~�m	~���/S��t�1�a*�r�of�^�<��w�@����ϝ���:t�,�:c^:��J
҇wlRK/�9��q�/��z]��}U/��[{Nj�[fn-wbo��a����3Fɏ�%�"�ߺ;��ըw����c~��#��$R��"|��q��'P�@�A/���	�[�8�o]�<?�`�_<��4tj@��3X�\	���5o�����_�n���m_mԺWM�yݨa����M��y�ؔ�}���vSݪ/ۺ܎�~<��K
��}<���F���ú�T{�>�Y}G"���\.��ͯ�V�9������UC�XBΞ֊^^>OK`�"r�GE^F��Q�eĜTE�!N4M���X�
_F��9�I��i�<��*�01.��Zc��1T|F���f����Q�ؖ��N�s�!�!#-�1�
��&�o=o��	�wd�Y�l�����r�%�fsoj�{"[�3B~p0+&'���a8�RS@����l`�`�e�NO��J|��`�(�0n؉�2�9p������O@��o])(�9��;�62�@�s���G�%�H�2M��9�Rx�pO���AR�4��m��x�>D�8��A��y�/�5M?�����y"��#�%�ˣ�!4�^	�U�'�l.H�GOI�?����r̸���u�vz����9ξ�x�9����s
NM�'W�KF�!y�H��� �N����e��� ��Q�_���;`�Eh��I2M_��e��!>����><Q����9�
��5(�J`��YJV��t���,C��V$[����4xI�1�qS2
�ppg
��4��{�ᛊ����~��Y��7@&,ꋯk�>)�$��3˚7�����#��ǠQ,׫�4趋�OYx>�p�H}�Z���GUd��͗^�
�N_�|��xP�NP���*�f�3��~�Po*D����$�-9q���o�
s��ïFG?x;��&8���ݑIϞ� 7Y@��7o}��e��a�.v�� �|`�T'/�=�/vx
��w��bW�B��O?l��qm��&Z�n�m��L��Fx����
��I�+��T�n�0��+
;A(9M\��(
��9��P�XbKq��� �ޱ�En���A�8�YLU���@v]���2V��*�����c��+i�ڥ����pٝ��qڢN*��a0�6� IC)=��B�0S!$Uk�ȅ��ʈp�TS����ȒO7��`o2���q��ǯ_��7�T��tc����^��4Ei��"ĵ�>�0�2�w�3��=��ͅ�[� �Λ<秞wb!N4B�%�c
Q��X����шq�j
&r�<�m"u?�qW\�e/��y���^�N>�a;aK�@1�菁s�~��b�y���I5'����4�m�:�N�D���	�J����X2�Ѩ��f�yw�U�Rk�X�N]U�U[��!~�um�\��������<-X ��{Z²4�����j�*��M��e��Rd��sB����<$���`08
K��t��,SҪ�x����?vZ�:1>!�K��<E���k,:���V\�c���K�6�&-���[n��b��mmvcf�D*Ԝ:-p�����.�6™�P�T�"aËl"����b^ڽ��4=��iz�T���I��r�넻��X���U��DYr��4�o��b��S���Z[o7~����E4�J#g�a{]�q��6)bo�x]Jñ�
UrƊ`��9����d�a�AQ�C�C��s!g3v!�[��/K���7�`7K�.�J��j�Ϋr)���y�3���Z������L��\f�iY��`����
����q����T��\�<[���%/قl.�S*�"aY�������%K�\�8��yq?M�Z�LӃl���d�<-�� ���D��c)읍(�8��`��/=[�|�j��#���y7��sj���ztR�� n����zf�ī&e*�������X�3�ۘ����ڦ|�>�̈́��މ\��R��(�q�%��^�f?�\�D�{�r|=�y@��_�X�L*7�=�bF?�\s�W���J"�1�8�],ʉ��+�,�.���*{�9��ͥ�/�$���Ύ�WŢ�d��i�5��tyU��e2��Y�RU�R��M[A�^�
8�t����n�;��Oh��t��n
����sp$�Y
��_�RS���T*��2a�gi!��;�Oәx���k�)���Cg��:���e�DC1� �H���Z%�0��S&�5/�_�nOh|��K?�m"�o
G���q�R澱���z?�3Ӈȳ��-\�u2�uL�?	�Q���:�}�Dn��9#��(+U�G�;�y)���O�g�ْHj�G�N�|p�Q�:S���>Z,��}V���
��C�� ;=e�K��1�/J�9��zh��+�m%��u���Hs��#X�-+a
;;�Q�E�E���s'���d�h�&�������cn��0��v�h�l�v�;��
����i�Fu�nt�@�-� ����!�
/���S`����; u�[rt����<�I��G=�TŘ�0��6PN��Ղ�u��`�5�󤕄5��h1�\%:6�n$.o)���)��n�m^C��'�|���������/K��+n����d�:Ɩ���'�E��W�r�+򅒰�t�`�uM�y����,0�xHF�y
�ETDW�V�T�l�S`S�|i�r��� Z�	�y�B61�
$2���Cn샌7w����9��2e�3y����Bm������v-NÝVE�G�+*���l�‹I�]�w�D|�l�D�vf�՜�5�H~3��������t�����^b#=�!ށ��K ����X�^�\�)����w-��"��z-Y���k�A3�bYrDAT�1����U�4n�S�1xt%܌]co������6���B7���o+���B��?T��P��J6u�F
�LD2���Ȍ=���Wo���%�PYf�v�F�L�L�I�������i���b!H'��5�,$2�F �BL7|[3�g�C�3�p��0�E�������*�ma[�KaNG�7�5�Zܝ+�?\� �	��+a1Q3t��i���-��[��#GqM`mR��w��w���r�6�����@o|kз���FI7�!� �DIE�wl�1�"8$��� c��3���gVA���x�i:»V޴Z�k\!���."�Nc�q��/C��-U�<���7v\���z���S�<a�
���&�F��t�k��`>W�`�#�����<	Ǎ��!P��9�ԍ��A��45�#!Xc�8���a2z�F
������@�W/�qu>c����b	�����Q��L�
ܬMɤkN6�u���b(q�a�����A�	~A��yu�E�'�Lwb�*���y�F�4S��0��L}��R|��ß��j�����2q�}���)a!�h�L-��k$���'I4*�TVe�dT۳��#�N�8��xȅ��:���!�Q�k��ʡQob7�Z�������Q�w��!0Q�ҋ�*�5�D�;�]#���u@=X�껨V9�yBΉ,�7 ��ؘ,�sCF�\A���r�9[�:|�!
��qY�6M[�mC4[KX��(8��.��N�-
k*�f�y�f�ݨ-^s~"WSjS$�?CE� 6C�J?������p0$Ăٻ�I���}<�8��/�F�g��K�m��
jø�X�j��<����5�k΅Em��*'�m��8�u�$v�Ïq" ��m�?]2p�)L\����RZ���r2Җ�)H�7�g�j����6�ɢ1�nmڥC�bҠ��P�����]>sC�?�v�
��� ���i0y�P��}�z����	�q.�{(p�gG���S�.�"�������&��Lu�3
u�o��:`�/�ϟ	o�x:T��`Q?&b�h����L-��]`�f�bfZC��jl�ޒ�M�g=#� W�[@��E���n~��[Ի�����8�V�|��H��-Hz�>7r��=�)�:i쮮|��5�=%�{��1wk3�V��nZ�8����4�n$�m�|%�GtU>b�^y�J�_�7|�G�k�\?eX*�]�z"��h�C4�ϯWrL��6��N�ez��-m(�o2��+��'1����8:;=����l��Y�x��;�ƒ�Z�\�T`�+�aA�v[�r�Pw��ʬ�L��ڒ�z�ڦ3D�@k��������+p�}�&��6n�i��+5���C,{��67�Ƃh��mիQ��,ID1A��d ѡCG��l��3��[��e%������J��'����]�
���E�-�����L�R��h�q��\��s��5x��[�V�	w��Y�{q�f�rH�
��3���~�L�6���q���a�����g6h�jg[���[z�pкQ��6��gy���/#�C�^:/��
���~�(�f�	J��i]�eԒ�+'���k�2��<'1�`Z�=2�l����z�^Os�j�\�'m��tR��(�Ơ��ɀ&�Z��P|T@���(�R+���Ut�AOtc �Rc���R\��>��x�ER3�o�F"0��e��_Kӆ�M��pͮ�sQ��_��`�VK��)�P/����B����t�$U-�5�J%�9K�\#&9��g�.8
;�����i]����`�h�[̮}��eA��A�
��I���sj��&����5��·�ls�LNt#)5�_��	D1A�T	���e4����'��6|0ć=+v�%���FU^�Gp9s{�:��Q#��i���Cv�5��চL��L9��6�4�5"?�'Lj��~�QC��0�Xʼ:��ʻQ@z�|�'���%�p/	�ρ�AD��(��:���^��W���+����+�O���`���_��aL;�`{<e5j�9j݋�^1�z&��K�=���!0 �qmC��X����ER�:4���/���?����X���/�e��"�4'���$�5;|�V:�2+����
U_�Q�aa��ּ1;�+Ҟ��#vV"\u����
mK�<�����4.��W�S�8~�_��46v{O7�q�4�+s�t��{`��b�c�����@��o%�WHh�Pf�X������&Ma��k���__��
�J�Y�U��
��-�6	L�od@�A��<�)�cT����u����j�Zb�50x{���ص@<CIn�d2&a��P�́KZG8;��<��LF#^-��p�mm �������

�I�$U�Ō'�7X�ez��
��\�X`��ֵ��߸�+��Kb�f�=���Ӛ�_�Ϧ1�,ȪE���#؇7��[p8D�����#-�0��Y-�Y��R��c���f�W������R��L����k�y��zvxV-Cv��夃9�T��r��D�X2CF()�+��)����<y����	y��}`�-h�#��������(��6�]A���}t%� 0���'�]/�Z���_K�o���(�o(?����cs
�ʉA�$'t��G��r���\9��
鵋UIX���}��Z^a�k���X�dF�!���#u�`e�0�l��O�{����q�J	d�?�@6��#�� ���]џ;Ғ�tvGΝ~$�t��#_b�'�+���kg�J���`��M���΍�nI'�6ay~�"�5i��T�B�[ɀKQ�I�����ѹk��K��˸qjj��r�G��I�,��#�0�/w���j!ɒ���M�"��8�S�����
���T�x��sE��F]E1��� �Y�|�̉Ê�8lC������k�հ��uWL�B�j���R��;�Z4���œ�r�)l�6��XI�,I���=�tu�9�Bi���Z䮲2&�+�=�6Gj�t5YW�o`j����{k��v}Gv=� 5<de���I`T[�;�WTCZ�t��̯=�M�ٰ]FO�w��\P��PQ��~�SQ];9t}�
�oư�cX]��q}c�Dd�nw����������/z�.��_�o����L�en0�D5�T�����#�p����	��h�|�3��?��l��u�c��v�!*w�ʑ�Uq�P�[���e����T3f9�.��R�u��-�lŕ���wmkEٸew��idȨ�v�G1�
�8�SKWt�ڧ����$�Zf.�(��M���@=��p��)��j�:%�'�+�.QS�c�/�am� ;棤{v�n��w�N�.�?Y�n�� �&�
=�dܜ��Y֦��T�R�_]���]�۩c�4�z!mUPc�xn�'�n��V�k�{�� ����tl^ä��y���e��;�(��;|Qڑ4�t߬"����L�6��C�>���q2���-B��X�s�8�_�̸iS�v��h(�k���24�K��Ql%ؒG���$���J��A
=������j����*�.��r��(�p���)�3��V��
8�l����$�	��p=�i��v�᠆`3a��J'�r�Ǒs-y
�)0���l��i�!	���f�B�$8i�J� $�sx{qz����"�q����m�.��G�:|B�������P:�Cj�`�4报B��P!-ŬP���B���(�����HX�OAXRX���x�NdT���pԾ�Ag���䤐t��Iߐ���~�P��ÅS)��y��H�M�����f
}�^���L$n }�i^��to,/���u��VK��f%ӆ��E~U
�b2!����m�on�{�'�����(���WL
�!%פﲴf���o-Jߦ(^��T��R�ӂ�:3d�sg$J�i�c��J�J�����=���߮�d��b#����Y%E_Ș��Rҍan!�JV���W�J0�#���\a�y}0������	kc�W�E~aA�������$Zͤ��EY�L�9<: =��c�Trj$�\zM�0��W�8V��kZ�H]@.�|���ܜ��5��z���[���3hW0��r�2��\��\���B}ze�!��4�d�֬��2�qZ�Q�U'�j������	��@��퐟p.U���9�#���1�ː.�U4�#n}:Qc��#�:fe�Ow��9��r��k̡��R�E�!5ȄHd�)�Y��8&�y�K�<����嘗��E*�Ŝb��g�v�����w���#�VY`,ͽO�#+��N�,s��j~��;�U1��bx�^��pH�7�\�;����#
ٯi�<Z�\�
�߉�^D���t��]\l�C��=�D�Ɩ��S�t)��^�B��u͈��:�uH?(��4O8bڬ���m�����)��2!H�V���W��w�q��OU��
,ME�5�Մp�N���h�����/��踶��vX��`���/�)��k�:I�L"cl�v�آ�(�1��l�[����c��M�+	�;$�E��]ߴ{?�
��1���}�Q\x$���XI7��}㞃1'F����GH�^SU⌂XD"�0w^�;�8p_��R.�8r4#�4�ۙ�V��Ӂo4�1kh9њMc���Q+6t'�i��i8�퇠"���_���	����Q�A�3�bO�v
���9>��G���%2\<aX����>���cD��Ъul	o��3��p�V�Ԗ$t�	_s��٠���JlD�m��|H롯���/�q��O���n%�Gf���
���‹`�;�`�N���<�)@��
��n����c���"Y��-�Vu(���^Ʒ�4.�����8�p9kP�qg�k�s��וֹ
���9�����=7�j-&.!f(���SD���õ,����}�CsI�Ln�k�:�kI�0��)�=ze6Q��ۀ+�]�T%]�
̒�'���R���Gw��p�m\�G\�V�
����J{D�a��<�myy���͢:n�^�#N���q���i�>B���[��!��0�>9|��ç���B4f��㑍iۄq��Q�Hg)�e���m�϶)���:d�WH�+"��$�{��o(�{b�^������uTQO�8~��h��pw/'zE=t�Z����j�&�ƫĎl�A���8N��]$؍=��7�|�$���[#���?.~��
�uat%�
�Whcc�.K�AZ4;��Y���E�9�BZ��1)B�3����lZp�Ϲum�P���B8H��
2R���Tt�p�y}���rYb<�ɪ��[*ʴ)��ǚQ�r"
�)���$!n��Mj]��d���#��}C�Jꠒ*�aO��Yrv6�3����N���I���Ѹ��Ψ�
b'�y�K�9
��j_)C�-c�bԯuP��v=�s�;
�.a&I�4� _
��X����/A�@�9)R����H%J������陮�
�(\"�V�4�X��z����)]:U�Aޔe�H	HeT<봷�.-b��{v�*+�b�!�B�:�����T9����G�'H�a�)�
���3� a�I
DMA��G�lU�H�T.A6��e.S�V���aRq���Ȼ@��4d����c��7��{�/��;���$����m�]��ZQ��u��=WL#�F�L|~r�D��'��ճ�EG��f�\#ڿC��>X>��cGn�.Q(��ٍ�鈇 ��1ʎžLC�E��݆y‹�<v�Q���߮$W������q��i#�1��-�1����	Aw�Ǖ_�x�n>F������+8vdO���J��	�h�������DL��i1�au�T$-�+��c���Dd�_Ӳ�C��J�[^�ں�O��iXվ�~A_k����~�'��G�e�=��:�]1ԑ���)-���|8�=-B��������n�B�ѝkk�i�yd�EY�ˎ������O9���K����G���I���c�]����v^z�C�7	a�����0S���.��l~2�4�ȗ�M�z��^��>S�T���o�!����x�%�fO>������|E���m��M�z���bL'Z���8zf7��}/�l�x*����S>!y@�ݓ�S�b�_�eoyz	��Xms�F�ί�Lۑp@8n;��qRLI��ƙ|�d�C:�q��N`��w��$$^���%���˳Ϯ��@e+-�3'��~����L��(��/�L�<�~���A��O�V��rjf&r�U�c�J8��T-��<��
��~��f�rHE�%��33	cN�&��	��9\]�ף!LDʣVK�3�
ܳ�6k��{��%��G��%�9�h}Ƀ�V�wt��U��>7Z���zx?V27������`4�4��FpAΙ�g��R�ݥfY�c�������i��vx}�
�
�*$K��m�4�9���[Vg�Q�F���������^��b<Nye��nx�2L�-���(��XpI�|(o=�R���/�v��Q 7y�n��1��p���5[�xr��^�+�V���w�B�F(�؜#�.Jw��h�=)!�4�.x���-���಺Ohf��,Y��$
=F��i�u��'^%���Ô��gc�f�Y�Sg�jU�+��Eg��~D�\�F<�Q:�}m���h"tn3�&�i{݋�+��K:�p�)�[��
��L(3)d�/�*�
��mA�3�@���u
=�N��C��i��(&�)ǚ���F��)���A��L��9~�X��7J�RD1� �~�����Dn�al�������S՗��6>I�DG�96�Ddg��GF��!0,����ª���)����y��r�S�~���7�&W�.wk��-�4����|#{v��ܕQ8ꈊJq�]�9C�s�CM.�S�c?����G�{�61X��4�n+�A��U�L�c:��":�K�y���nQ�(����Uh��1��dK�O䯑���g)�1� �+�/��ɱ0'J��"puv��i|��H�x�Ad�
u�^� 5|J?$X��
}r57��U�(��NE;����*��/Qqa�*F6�W��>���8E�_a�F,I���~y��M嶐c9Xr�r�X��#*��a9�ڂRHj�d�S�~���`��q-%�I��ߎ�j��Jkr�Y,l��z�&�"�}��E�p�����Ȧ��B�0!*Ej΄�Q�X�P�xѧ*Ҥ4�S�t��L'�n
F�xd���Rfu�EFx<�rE��D�j�U������QL�e��j�r����JO����،r�~�"���w�VJn��
�	�ǒ��v�����ʀ�ŝn����kle��=�v�����"n�RE-|7�������`�t��f�����}�\\99>yv��|*sS�p~t������F �CkU�N�3�^y������W۝z��pq��V�u:��xږ)��2�,E��kۨ�$��"(����f����lq�p+M�5]m�5�ŗ~]�T;t�iZ(_4[�M����.�jD[d�jC��X��["y"�h7�xd�A`�He��̢J���U���sk&�v*���u�9IĈ�ݳ;x������G�>�3����e=�G��`cFV��JSL�joDuG7��M�+�nGmͰq@"��4�8�@�^���=�Y^x��[d�m�4{�,��=핽���
n���s����p��*hg��M;3*��IM&97�x�i�M-�M-w�0`c��A^A�aޙ��v,?o���4]rv�
����Oȵ�i� ,��Lw�Њk(
.��9��q�o���l7v����U�%�n]�^Jl�}�/�j��mT�n�0��+&�8F,�=����G�A 
z(����[�HJ�`�߻"�g�%�����C&	�t���>^}���9�.7��u�i�rml�iQ�'Y�d��(I�f	z�K�k�R�x��
Ef-n_�Gֵ��))��r�
�uHs]�Rq���x���,(��d8�0Ĥ[v���%n)��N3jJ��-ɀ
*I1__g)���E�N���TE�ݔ��4{{dj֑"c��I!#'Ҽ��$�dYi��O}�%D�E�Ap�9K��8IM\��ط�I�n��J��B*7ʤ��F��݈#�G�0�{.���:[�/XE@etE�I��~
x)���t��:�r)b1����,(���+�3� ed�ѭW*D&���p�����~>;�y���\���7\�Vt
�pهQ���*uR���6���F��qZ�]��Ѷ�!�7/�ڇ`ZtK�B:���9&�!��k�Ⱦg�/��1�{�ss�E��%�b����=ϵ�ܽ}ΆR�)���_ȱ�IC���RqDd�|��BQb�3�j�5�Y��Ϻ_u�CA~���}�^�;23����S�� 8�?gJ�
ݐ�)�Mp��r��j�D|䎸�m>8�;�r1ޟ;&��a$_O��fT'̴����d�������z'N��͕������\�l����1O�0����'1�&��
%C)�0U���Xu}��DD���]������{��C�y��n.�'S<5�ycx+�-f�k��3���0d�tT%�x���ia�5%����5wd4U(z�<�����dI��\#J�QP ���
R�>�n�xx\����Q���z J'Y�J��`��([c�dرԎL�[��;%�̳� Ņ�r>��������5���O�	�+�ɼO2��6T}�c�uq:��j��$=��]��D��Z�O�4͏����r�u�$������-�Ds̭��[�/�;��kqA�}TM��0��W��K�l`�$�M�P��e��������6�ت��c�F�����x��fl�0��n�FT��h>�k����ދvO����x�:����b3�it	��nM�Ph�@�J�(䐟������ug� E��>s5sP09z�R���P�#|��{���������d���i�8��a�/��`.�w�Nrm8���D����S�a��^�a\�6��9��)��M�*�&�#r@�U��jR�X�Vv%1<�'�j�"��_K�0���`�-��%v��$I��y��V聆q��$�}��pB��Aɜ8tT�'0)*�i��G��8�(�v�op����,��_�4(��s�T��ƾ�J]�`Y�C��ʦ�?���(�C����z/��?���S_���,�5�:&Wn|
�ž��nN㍚�1YR�KzDI2��!~�zD�t:�����I�Ox��;J��7c�H���}L���F�6�{NW�f\�"t�猪߂���U�v|7��:���=��:���Y��m:�������S�n�0�xIS��M�R7C��K�9�ȳD��$e�-��%e�c;����{�c>�ٽSU`1���aU;jT�}jr>�{��O��Уۢ�F0�_��j�S�� ��m��P�×ǯ̇�F�J���B�n��Ĵ��HP&��[=�x|��Ҙ�$��@�lC �J�����ܨ�J�ת2D�nA���|_g-Gψ�'|�Z�R	
1�x�|%�k.i�`�	+��T.9`�4����[�bA�T�+�xԒW��}�q;��C_����I�z�ӥ&�I�S�
�[�.��*e�2Zdhd���N�PdԆ��R��R*S
�z �v�Am�]��(�涋���"�8�tgC�XbZ�
�:���
�&����sܫ�K�Y�;ը�Ȏ�����-�&nz���7"�8,�<�������y�F�'A��O�z�5�-̻�-�����e��|��A�C�p]s(4�O�׋}��#���?W_���UQk�0~ϯ���$Ď�6cs�C�6{��J	�u�Ee�Hr�tl�}��I�v����ݧ�;ݝ�S8��N��40�'�Dq_K��RɊ5�6��J�p�9xG
5�����M#�5��iвQ9B.)�]��@
����h����(l�)�����!�e#(0a��?���8�5��t>�Y�e6�����&E
$Ӓ7�ֺ)��@�$��T��<��G�-'��b�6����o���%��(��.�6`��6���Y�~��\
��x*��R��q�_�(���/�x�rƊ��Y�q�\J�(RxSo!��O�}�)�İ<`r�iXA�Kl�si3�5�H��Y�B�A��|%�m�
i�۟��{+�'��PS!��d�����/��a[�^8
�B����˓t�}b^?Ի��u�|�����݅��9�◔�wG��+x�?�=p�
i�|�nf�P�.V�–U��욙vh4c��F�q���v�o=��&
7�8�V5Z�0s��J�Z����CH�BH������5߿��\�>ΰ ��v��j��Tx�����tI�ܴz�m�*�h���5�m%W������to/&˾��?�R�7Rt�7�%�T�螄�O�Ӹ�wϵ�QD赝�v�IC�O��~c/4v24xgC���Hۋ` كqRQT�JK��G�'�B�O�,P��F�s�'����yXS�O[���/(��R㱬�eO]K�0}�8�:h��V�܃ ��? M��Ҥ$i���ݤ:}<_���\`��s�#N�)�V�s<k�V{���a3D�|��1�1�S ?��
,�n��9 ��K�t��`�F��	�Owe��!�dS,j!�EC���
V�m�	�����{6Ta�,����P�1:��Pz#�:��$'�I��Xe0KGf��N��m��
Q��\�oYK�#KaJa��5:V�PV^YE�.\f��A7i�8�j�<�>S~�c�w��.pd�Z<y�{��k�Wߖ?�_M����UR�n�0��+��1,��m�@�E���4�iq-��I���{�R� 	����Έ�9���Yy��j�����X{nL�ࡋ5���Z����|�9^���	��P�&�g�'�4�=>=�B�-�����b�"J尧�t��i'u·��Oߟ�p0�r̗��r���c�|�c�5����h�TѰ[����GO��y1j��%��^��܎�B�\�/��'lQ�Psg��rQ�r
��jp�F�t��ħd{N5�x��?&���Ro�I�9�.�i-	l�9��*���h1���O��R�7$)�*�V��t�����^���R�K��M����5��U+���J���j?�\�.�y�a�����.ͱ�$�u{9k���*���cu��\�6](�i/c���Zi>X�"��5��+�ڄ֪��ߝr���cj�Jk�X�`׫�9E�)k*W@��X����ߦ�6�W�e�Qvȯo����T�NGI�|N<�:6����Vmo�6��_q�0�,9v�4sPl]�A���S�CQ4y��P�@Rv���}w��9�!�B�=w�s/���]���(#�f��ܔ�w�n*������c �ЯQ�8�/�� �:@p���)��pk�,� ���Y�[�`�DKn����DFZ��*Ж��.�/>-.`�
�p0&���	��EJ����%<�q�v��S�
%��u�K��I����jQ`h������7Ý�M��D�0�xo�Dcb��dt��MOO�m����hU�ΑY}��F����k�m��(�Rh� k�q���~�J�ڈ���?����g��A+��J���azx����yB�6R��ڙ�Ɖ� 9F/l�Q;�)Lq��$�S���xiF�K��	T6>8?�NHƨ�/4�%�:�m1�e��bՒ���~����٘m:+�|%�?���"i�����X�@�e��B��S���	0jꣀel�2zȄ#p�o�lg/���-]��"�q��2�ΰJK#���s��+�J�1�/���1��Ә�RՈ>�T��b4��r�?2�5>�!�#B�N%;��`E=�q�HC����5p{�@Ҥ_�\��4��nr�х�L+&��'*���r}�PxYZ"�`�1�|�U�����G���w��
��J%v&��pކ�I\ښ2Zi��B�>�-���8JFarXh+y�9Zj�A�:kqhA�Ib��[L��J�x��
�jNk�������9ʇ��h��UBJ&tٸvo���^��>u��(%��dz��J�5U4�h��k�x�dڦB��0��g/�B>��O��aX�v�(1P�A��}D\HI�FL�LE�z�%��w:���"=�3{�"F��q��F�˒����[6�x|8���m������2>�rub��0�B��Ǘ�#N����-�(5����@τD~;�?O���/��q�Nx~�s�lPP_{��]�6��Gg%҃|�/P�Xz0�"�+w��Аon�0���E��'GG'����Wa>�Z�,g���>��?\_�ȿ�r	��X[o�8}ϯ�b��L3Ni[.�Y��G�%Ƕ��̃.�LEC�/�b�����'h��}�>���F�CJo�h�t]d"XI�Śm�^q����Xlb����4�ϵni�(�2��l���6Ϲ�>hr%r-O7��5/���� ��,����]��\�"��nr�H�s���!�$�&�smd��l�=���koޞ���B��Q��9�R$�}�92�4���u��ޓu��n�\5"���y��q)ޙ��QɿN4��٥�����'��r���;Y tF"�
���;o���I*����-��]�De��).�$M�������*��x�AFk�X���"M.��LJ�c�(���|��GՍw�l8I�ӌ{ic���H�i�MVN>=X9T�)&�*��`�W��x*N�2e;�ɢߐʹT�o�mp������w�w�VkY\���+�pn����Q�o�E�m��{[3����E�Ǟ0n���v���6��3�_/[+vx^�Q�0�Ea�F����������
�a�Ʒ6;.�}�b��ۻp�[|���pra<���u��͢5�O[f�L���'Ӟf8}gۃ����j��ij!.��nd��r��s�D>��9�cݮ��c��t�o0���k���1�P�z�C5I�P�>�Z~h�P��zlo��Nł/�!_���]�7g��(_�N�]³_D3�Ӿi��=<�Q��4�Z�r��;֬[����+1v��l��n�3	�M���1�A@m�n��1�����^��!עc��
�� ;l�`��Je��d7��05LÑ=ߘ}�:�p�W��BbN��3���+Qo��dK�{��#kZ^9�c�Q����7P6�)M�7dz.���N4���߅���|�Ɇ��A�U?üM�1\����ˆ;[7��Q�����~���{�CPi��r1�	��M��Ҝ��񌱑=Qj0�Y�h�޶���%���j�C�κM?��"�����A��棙��x{.
�eU7�f���7�|cݘ�j��@����l֟x7&�D�U�:��Àr�V0�yT|��ǚ1;�^wW�9&E��8ԝ�5����`��6Q�	�+%b�"g�ZO�P�Ӌu����z�er\�`�A�z+�
o���N�*eX�~A����A͖e�Z�J�*5c�"e{�^/��*|Q=n��'t>��5a�E;�0�i���̈́.0g}�4�������Emګ��̴	P���oJ����=��b�
`fqPG(j	{M�8��T`�w(@�ژ��3�e ��m:~��PZ؀]���R#V����m��y{d{�@�&�a)��5fB�tr�,E܅N��f�W�'2���^0V'�Gu*"�j�ͺ�P�?��'@�P�'�xj#
Z�rR�8u�}U��
�I]��:�Ţ"�UȪD��<���J(�DC�j��x��5^�D��
^�~i��)C�.*��Z�j��VjH��� ���Am�}���Q%a(H���}Y��j�������HH�*F-&MR��}�������;\��kSy|�Z�~K����"��@(T�~Q�(��ӛ�U��| �YѠ���\��L@eDT*�Is-���m��}ZD�D�4�PĬ}�b�pk`ҩ[�5�Ư��ѵ�QX���zio8�	*|���ޢ���x�f�I�W��q��/��y��=i�'���;�����E9O�����ߊ�t�k$N�_s.�k�Hz�������Z]ev��pTIK�*9�X�꣏,Q���V�y��y_$r�d4Vϧ}^��9:n�FɩWb"��<��:�"�3�n%$���Ӭv��V�—+���{��q�/���LFP��^��Q߭P�oI�$иV��-�5�y�C_n^-6�Y���zZ��-���)kܻ)�1`��<Y�������Q|g#SJ�re�m��Vmo�6��_q_
�A�H��.
04K�5@��l���N�H*�3��Hɖ�ʩ7̰
�x������nT��|^X�#���~-n
��Z�ue�����h@�A���x'�AP9؂0��)B�2z���3H����ص@<EI�l�,�LB��R�*��$Gx�����x98����`�� �L�y�*i����@���� Q��	>�1�}��jo�d�sw-�lw���@�gQ�s�szݣ�(jC������p��e�Q���V�����h(���5Lf����"D�S�$��&�<�E�k�e��.�s5��I����CiN��@Q[�2���)X撙���O�6$��������M��vu��cX��7Q:CDd�P�Ym�m����Q�h����p^�jiLS�19���13�҆�'�	�]��Fu�i��6ÜU¾U��e�s�����kK�Q0�_���^�N��q�����ʺjo�K��q���0�x�;�\�L��"Ce�a��:��a�q8�ɒ��QZ���vד�x+0�̡d�f5<���W;���*�L�1�]�����T� �dZGf�f  ,k�M��~��9hF���I�DmJ4��pR�F۬w��r��pZYz�����gx��p|yy�m0�׳�}JaD�[�ۅNQ<��m
�"�Q�9�֪E��vf���}f�I�Tܱl�/�?���~��5߆��M�n�JO�;9���Ͼo�Ϛ��{�yng���r+pWmGN�R`�+�s4�Iۋ�́�(�9��9���(�Y�s�"@�Q�%_��PܞB���^Ld�'�G�{���`k����jاvڟe߉�ԃv���.�,+���D(y�m���}wN�]cIE`Is�[
u����G�~��/�!�T����qi�gͩ>h����ݞ0>;�����oy�y��x�t{���D�S8B�Ä���;�8�X"�=��~�v��2�ֽ��;��#nz��pm��"����ǣ�y���?6�
���}��Q|��j���OK�@���6MA"j-X�^ڞ��M2�.Mg��&P������8��o~��~��lw֬��u6��\F��ƴ[�źæ���`ɑ�J#$X8����88imI(�"�q%Y�
�
�Ǟ�И�8<�Zy��Q�>���+:a:�_fcԦ�I?�^��{��'��</�KW'�SMK.��S�L�i�<��/�#��`�Z`X�WXRk�+��
Ԇ��"wӪb��i��)G��e*�3��JI�Q���ۇK��\�g�e�,��C����U���=�c%�{�V�G����Q;�O�1Mb��VMo�F��W�Ű$���ԉL#R'�m/iO�K�\x�K�-���,II�D�� ����7ogt3�]���l��j
�ѥ�%|�����IJ�-�h^�����Ao�‚��d����4
9�{`�۷ϑu{� E�����9Ș�C�����PdG���×?�}����f2�º�$7��?.l%�>�T��,�;)&����@�o�~M�y����V8�UB9H������`�֛�pXRN[��,#���(��'`����_a�b��wʲ�܄T�LKmJ���v���,�M��H�jG�J�2��p�)[\�ൠ�C��0.�M`]�B����e^�`
�E��۲�+����>���UM+�\�<�%�k��M�1I��(�U
D�;�⢔��†8��Y���S]��"�5�bW�l��A�"ׅ��>��a%2�t,]��ԯ᳭]���d�3oς�BVN׫_p��Z��۫Z�#�8�"=xLet-;[�=�P�M)S�J�O3�J��rhlyD�}xw�:
�ٜ����T�,M?��$����I�,'AD��>��2�A�T���Չ7��u�_�.Z���Z�dqF��Ofs���i�5��.��J��3�o�����Aq�
���sǒ�w�zY�nU�d��&��7��^�����O��� B���Z_BU�=�}�������BŬ}%\Ck�ĜC+�}ٽ��O����;����>���8�TwV�����t��"�ԋpV�ߛ)J���n�Z'2&#&ENƒ��������QVk��f<td�
���A�(j*��!����p�����]����M�� �o����&K��;�l�`Ew�	��V[o�8~ﯰ�-̔(�R�J�A�����IL��ة�@`��}�@;-3�]�Vq��}��9>�d�� ���AU�T�,D�9[�d
�D�����p$� ��|s�[bK����|�2`�)�S�$� @���b�!����(��b	������g�é
V���|v����|=��En�e�eiI��g�6�@5NAM}y�‚v���V�V<.�g:�`b�r"�>�%}��v&!�z�0�.Q,�:�"#�h"3A+�tf�k�L��H�)j��2D0��s��jnN}Ӡ
Z�`�3�%fJ�
���H��%COI�l�a���%L}�����_��iS&>����<R>1��������*�_���}n�1�t���%��w�J��$8P!!��ž�����D[n^ȋ��A�?�N%՞r�#*���4K+FUJ0
LJ�D�B��VY�:�5A/�2��H���>���Ձ/���YD�'N���7.���i��dXS�2�����9AtE+�"�V-��Ƈ�w�|
�ۗD����?.�K��%����E��S�Ct��#*_p�~���� O���9hCO�
*�D��cC��w�x!�"%��vъqtt�J��E-^�@������%l�rL�k
Ԩ��1�l��n�t���О�k���M�Q���f����bR��z���l�x��8���u�idv���f���8�XaWo���11�=�q�&Ƹ�����iza��L�n�'�ͣ~�?A%=�`����Ӄ�V+�\/#�`����-����k�x(�=cCF��6���3c�woM?Ѓ�i
wpp[��U<Z���ݗ'-�ѭ�Ǽ	��Ѽ�]���p_��֨9%�
i��Q�6��FdĖ�2����؍e�����[̍��j~X��;�e������KR͛�<{��C�N.�Z��Q̪i�]��4�$�]�V��׊�±��?F^��c�)��-��}��"�n��׉��'��������1M�n��i�[L�OS;^���:���A���.NI�\������2'c��
�
+���δ�	�q�G�IgMgm��5��c	V��DLn�G#�ֆf?,D���pW�����\�O}t:�}ҹ����`�M���.[��S`�5�b6�<W��Mi87�A�bj�������w�@��6�h����̜9��LUf=�cV��[p��u_��2�����d�"��^��J�=ܭ�:n�)|���ld�
�
�;��"x��餗ș��T�+�8(g�n�g�:�B5�I�}�Mhn"����lTS�Qv7���d��B�0�j�=��H԰�)�N��ŗlv,���d/��F��`~����~�t(%/�u%�Zu=C�����?��K�P�-�=���T�n�0��+�h�ޗ4VЃ��`�i�"��(���H��$[E����"E���.�3���潁:
�az�<�4Ԃ:�>�Gf�Ąg	L2�Tm��1T�
$SL挶/�܃����H�0ĜI�(�' 0��[J�b1�0m:""�gv�3A��g�rg7��
�y����\\t�~〻�f@$�LqV�TbڢX�0�UI�)m&Hea�؂xLd�Lk�@2���4�M�DJ,T�
�9�yɪٳ���̉b�"m(4y"Kl/�L��g�Ġ�����^�$x��؁"���"�%�8՜���7�$��
��y�\�w���8fA��dy�
是t@O��w�A��aRx�qI����]�/����o��r��%Mw�;�ݸ}�Oq���0v�=��;t&~��|��Ǣt�_�ë�p(��� �%Yʬ}Lh&a���V()��ң9��S��_�M�G�sU�kIBy�蟻#f��t?�	�!tatN��Rc��T*c��b�y�lVcZ��w���~���+Nd���7���ox�'|�I�c4�[��WM�m��e��[��*2�/���c�����
���|��.�gQ��Q+��ڬL����@�l�wR�Ro���Ao�0��O+$ʶMh��Tv�(*u[qD�x���ؑ�t��wf�Y�p�����L1��wC0�&����6�E|k��}j|�9έ��(Rx �g��.|�Ԙ��P*�	���i�(|\-�c,���?K�J��Ú�T��i�u����������c^dY1geL����Tk*e�.��b܏ZB����崥����2/���Q8�J�ma=��ʸ���jU��(����:�aY���#��=O���=�#��/+�j��	��<��P�J �)�o�;�tm=�j��6����)�QcC�Jyq��(�N%���(xM��X���J��|���&���&�q�����2gh�g����D�駦Z�6Ŝ+��t�C�miݛ�<�:v���w����_.����_�s���d<������͆�q�����/H��*j��#�޽L1��s���4��x�9���^�j_���#�_�w9��q^2�9�G620I4ޕxaN޺'�a�/>�˞�l�0��K�5����}�꧱��SS4�hO�Š�'X��w��{�~��I����R]O�0}ϯ8�6
$+
ck�`�1Q���4��%C��]��=���|ݓM1�m�Ԫ8|?;�]M���6�kpօ�:��Lk�<yrO$�S�{��j��m�JBi%��+�DΐD�C��rq�C�	Z�dx,�"�E��vFB�'\]�Ͽ-�Q)M)�Y�dSVƨ�&��ވF�B���%y�����A� ��ja�&�`�f���mCh��Z�ʺ&Ӗ��J��'�hDi���bŲ=�G0i
E|G�cƊ=>�ۇ�D#z�h���7J���Hr�@#o���km����ʔ��4F=h��B'f)�����qu�g�i��3��^�`/��RJ�	���yd�t�s��Qu:�V�}�9<H�D��hdʗ��#��FJ�Sy~ֶl����������EC\1J�1�a��D@~���)�zw�n��F�4����j��cmͻ�9��[�<�:�jZ�:�w�a�����$I���ջY��ȂD��sZ
W{�ykR|縸l�t�@�ѓ�&�5;6/1���$yM���~ ��	�Z�9n1���[�~��_�G?{��r��ã��.k��5�@��Q��Xmo�8��_��04)j�N�]l��:�
��z�0�l3�PE2$�M:�%�y��5m�XI�R�ہ��j>�,�>�t�T*�Ƽ�yc+�M�B�4�Ѡ��2ނ�� �!؊0��B�J�:R��%��O��7��S� x���يY(�����jd	\�s�ϗ>�u��\`;{[[{;�3Sqe���65~GΊ��v:�|�.�-���;n�\M"&�Hf@.X�g+�Jsz��`bu�&#�{�F�B	�3У�����0K��þW֪q��RrS��٢�\�ж"�C�2`�U�I�ʒ�QF�������U�̑��dǴjԦ��r��P����:��+tތ�B����N���!�`,�� 
&je�劂�%�#���I���f�$�؀��q;=��H`��)0�;��T��Z�Z�U�LS�!��}���]�i��r���aBa�V�Y��;,q��gE�5=.I��b&G.(Y.�;%�p�G
8������I��a������
������_/r	�w�pH&q�!(0�F˸��z�]��4+yc2��y	�s�f	n1q���Z	��:8�?�@~�A��a@+G�U��Ӏ��o�������聗��� i�;�s�4�5J�fT͢�#.K�x!��À���1>�.�B1gJ%�-�{����N�K�����wGeC��>:�.m���Sw8j6FM[u#<	�*�9�\.����7��ԅ����I�8���ѫ���%st��P�3O�I>f+�HO("gK��°J��8������,/XN(E�FA92��H5!�+Izq!��
1��>.p6����kd�-z3��q�������n>�^\�����d^!���i0��9�7��52��T�G�^a���`��Yn�hBq��|d<=������J'����X|-�~������e�Ui[ͭ�Ы^LFV��_���O�N��yZ^���F�+]�~���ϹZ�ޭ&�IT�*Pa���65z%md����N�:VL��c�G��ӌw�X�=�n�w�h�L%�������8� ������83�y��65�k�ei*���n*¦��Kj�cjwB��1�L�����
<��Uݝ��N�C���<�3��v%����u&Z&h1P�V���A��j�h��[���R��f�2������4��a
���`�]�Bz��ڊ�8����9��Ե��"E�䥣�� C�KQD�[����e�g�ϣγ�U&���
����͆_5��e�?��O��(��f��о���ܞ���1
7��O:�a{`�)i^��hs~N�{�:y&������.��~���m����~^�i�1����˅*��f5B-KpI<k�������8d���S����*̵���%na>�H����T�(LW�n�����.T�,�EM���rF�3&���{w�qD�	oH]�������ל�vf�+dF���r7h��8]������مp�v�L+�:猟��ԉ�xp��{nx�.�l����D�i6��7"ͫͲkP�C�:�����Jjv��B��/�g�:+x�^��h�Ut�\Xꆢ@d������ J��B=L���� �VKþOoH)
�z��a�Z�t��7�ި�;9��|��� 7X�@/^��@{_o���JC ����J�@��y��������^lk�zh��ͤY����%���&��
q/�3��~��K~k��V��/aY�eSc޸���1W
}��!KfGE`�WK����#����#��@�"�bsY�*������*s�FN]��]@j�����
�Tc�ApW�vQ��	�p�j���svΎ�~R
ͦ��I�SG��f<�4kD
�"S�c���w!ZӶQ��	o�Nc�@t�4I�*zf����pE���,'C?�?�
�>����Oq��p�D��şT'���7���Y���'�A��'���h>������U�r�8}�W�e�f2��%CR��K�q�
�
`K@��F[��+;��N�>Pt�Vw�>G�
Ӭ��0���4E�*"`�)�K�%�Ҽ�}J�1�9)H^�����  }<�P�e�	�i@�tô"yB�j�rt]�@cL��G>�O"M�״L'�;�9|t���5��\ݶZ7qB�\Y�$$�ں9Y���ǻ0o2\���=(s�)��o�*�r`���u��Ǝ����]��-̓:�=�X(�?^(x�VV;hu�m��
3\����"`86�ANj����f��j�r��
qt��У�'=;�LW^�%�OI{Q��]�^�UV��"
�uj
k��~�'J��>M&U`<)p
g;�Ag����M&2��Ӏ2*b��=��aYi�Z�"�ZTA��=[���V��ƌU���}T����x��3�84�����S���)q�ģR\,������;�V�lJ�A9c�w���P�
F�B�^�v��,��b^OG�U}�p5�\u�I�O�˙g�}R�%^U�?����l���:!F��%CZ����s��:U�v�)�%�O�6՞J�U%�B�Z6sxǻ��%c��v˅�'�6;d�m"����s�������ڗ\����#��+�'#�B�&�x���
da({+�H��K�4C(��*�e�`o7'�t��o{�?����:���]޻�kkk��kr�a�_�'1��8�9��Ǜ�d�~mak��Fka�	�^�_j��w�5Z�s��;��-�_���rd����x��E�K묻���!"KU�q�ղny�w<��%��lJ��"�D�����r'�0Jq,59��a��F��%g��x�3�c�9�8r�Tw/���J.v���%��֑�6͝&츣��/�L%���m�����??\^�E,�*�_�?]���:�����=8�!��]�&"�?F��e������n��c�s��]��?Z�L~j����UMO�@��WLU! ��"%8R���T@=Pk{l�X{��5I��߻�cb%��C���~��f���#�-$�b
�!8vׁ�aK��<�a�c!U��CyP�D��	��-�S"3J��G�E�`>#�2��P8�9'J/8g>�暎����a��<
��fa2]Lo. d;�:��X'��N={Fs���R	�Bc�K2!5M���cYM=��1U9&�j
?W��(Qڼ�9����PW�Ɗ8��6�v���w80g�	K���3�2;�ƚ����,�]'*x���n)�n%�mm�r�T;�U����[2����jR�b���j5�A�����[Fրr��͍�8Ƕ��,�Mu������
�bV"Le�.\ 3��&��w5�5��E�JS���tlXm{o
��h:�-�b*�:�	�3�6�d[n/%�6�}�)�J�1�HTF�23I�&_l,��2��nC�8�& �i&�N��j���$���%U���4�eB�%�5�-5�ʹ"����ohx)N(LͰv�L(�_�%�z�?��K��A���S�n�7�Є%4B��]����T��~P~�ڌ�9=�pԂ��p�
ί~N��xz;�^���d�?����䢘�/B���$e�\�eo�Yd�;U�w�>n����X�gZo�7�����?�b5^��:�|�/�Z�I��:�gFd�W:��,�U����^,��VMo�8��W�C�rd�m�
�@7�a�El��E�4��P�@R�آ�}��%�r�QLG��y�q��[xV�A�0O����ϥVo*x��Ri���B��h@�A��l5�[�� �l�
��!U�j�Zb����C`�A ���e�dR&!A)W�̀K�G���珟�|��\���lfY��=|�;L^�
�=P���1�V��L<�x�M-�!N|���1������n��$�%2�e.�|Wr�K�E2�6�K����(����֪*�u�������p	]���P1]pC�^j�e\���4e�X���n��!򍧜�Y��h/U#2��p#qײ����ә
F7֭d���i�(��DA�(���S�������q�d���o�HVؕ(��'Z8L;٥��>nJX�c�F��S�4�*U�]�yxx�^f��y����\U�M��iV���A�jZ��>��@��&qٹ�KX�1r��=�p�GH��
��}�t0���x<m�Q��9k�=3]"T�r�ۈ��m��v<�e���QN밝fqo&xA��slQ�^ͤ�+�="M� k�߆�YH��d�%������Đێ�p��p�Dx�����|2�J��@�Tv���#�ҹ��x�O�#������!Lx�����=׀ť���6��uͯ��|	2�Y���b���Y�!^��G�;;��W�h�|���	�Y$ý��d�W�^Z���T�r%-��\��#�~�8Wi��@�XgՁ�J[����-7<�Kv��]�N>���uw+�������iv��� ��S�l/��K9���Ӵn���,S�������Fڵ�����ٟJ�r���c���䄪��$��.����D�=�a]藎D����gt��	�5�=O�0E���;����ajC$�R��?^l���N B�w���{�G[���6;����pĻ!�&���#Ns6!&��s�&DJR�B��D��	)�QdP��:,=)���s����J�EˆgH�!h�4��+X_�ח��v�`��궪X.7	A? �����v��v�R{�}��;�Ң��4�OEU6M��]Y嬧F� o[��_�����U����PI�.��W�s�8~g��þtJRB`һ4�
w!�%��L�#��V#[Y�W����dL.}��c�V��oW�I�}8�L2?PPv��a�pP8
�Y�I�!�*�pF1I*�ԫ�`>'�T�HD*]
��(��c*#�3�{V�f�g.�p�
��D�Pmi$���������F��*��J%%)��%�%1'�8\��]��Tq�D"�F��G\L:@R%���RU����!��l ��$����J:��)*������AY��Bv@�)7Z�
�~�=�+�GQ�Oμ]�P�%I��D�'��W�oiÒ�c)҈���µ�I�W7��xtDR��y@F��5+�:[h�(3�c����H�b"QN�RL��PN]�ԄiaЮAy"I��J�1A��+"��
����=�H��ħ�d쿝��됄T.���ه�v��s��������5�Y�9���n莇�N&���]6�{�]�J\^�l��w������y��l6�{�E��z�!�>���onN�a������y~���ɀ}�{��Ǥ�=`�ɰw��.l7l˻�zBn[����f3�՝�Ov>?8:o���{��%iLuA�*����?L���,	�4��q�"k�<�Dag
�[=�CS>#!C̛PDѲն=��=M.�J���[v���mb��{��c��l�q�����Y���Q�a�T��g
�2��*��,���h��(na8f	s7V�y4Z_q���1�܀q���F�N7�$y2p<"<�?K'�Mx3��n$�ܨT�]�?�^�h��Q+ә[�m��l�a7���L�$�>V�
�(%��bo�Zr6f�P q�g)r��otؚ�4�hiB9�B�T�tj5��T'�yd�*�_K1��ª�_�w\o��m�R+�vT��ٳt�&��u�ǖQ.���^����de���6�kw�9�m�d�J�Ba+;�]β��6�&�s!�J�]��`�k |�a~�˪ε��Ŗ��VF���ﱎ��Tw|C�� Q���,2\�����޹�lZ��
~�(��b�<�4�-�Y�ֆ�Q���?��0���h���m�3ě�*k�p����a���ڠw���O罳���矮�z{P�V�%��6�xӝfuQz��7��<�xI�Zo=�
���D���R����Q\�N�.[�,~�}����g,�Plk����n�E��@}��8�O�Z��f����T.�;t�݄����1��"����Zq����N��ԂKѹ;��t�?���݉2��%kn����h��ij&R[F�z�*KD|�ݸ��E�����A�4���(x��S[\�?`w�Se�D@{�U((FfH;��ɞP#D���q�[�fw)�.ߛ�ɢ;��!�>�k�,}[��g�s3����}��z�-�i?��u��'כo��ʇ�g���AR���e&{��+��ʚ|A�;ts���ۯ�5e����2�Hw�4�'��\s�������"޷4Q��?^!���o���ks��{~����	!�~���c!��$t�ܑma�ؖc�����W�#B���t�8p��zw�ڗV'$�]��P
Epk  .��oѧq�MD�p����rG�L=�P{�#��"�
���rm�e
 hM�g]��XE6{���@A�҂�����\�$�z"�6Q�䏎�'L2F�C���F�#'�`��_����KL&/�q5�r�\����D]zL0�[q)�)�g�"��#��=`j��CxR����c�]d��c�#�Hq\"7b��$-�.�"rÙ<��r<��B�5��J1��cb{�S=/sM���7)�&��|Ӈ1l�HYbz��SJ��#������_��A?�>�����O��M�qN�=J�3�8��VQ���C&R����k��ԥBBN{�B
����㓨OĚ�&6:gc
T�����[Pg#)6��>�9%d���ƯS�܀R�'�ݣLD+Z�&(8![}k��x,���/W�� �qʾ�E'���g@�M DD��z&�!fvODF!F-V*�`�#�j1G���I�c�\�f�MF�+��,K�����ħ\	[eQ�C"�L��'b�3�>�,}����j"C��}f y�ґu���Q�	�1ā��m�L!���&�-�'�%�&�ʂm�@g�֘HBlF{c��]��2�w��_���F`�r�葭5=��G�6#Pޱ�sz�Z>ų�p��ND���L
y���ր?�$q��‰,8`:5��l\�nʷ�X�/B�!����l�u����O���f��B�
�m
!�X�g^���F�m�k����Yt�̾EG_;�b0��:�]�fr����޻�͢�y��ٹ]N��%IPO�W�KR��(���/���y���7��AK��B�Z/z dK�DB��g��]\w�Ҥ<pB�-ߕ$�f��m�Q�.Յ�4�z��Xe��(i����J�W�Lg�q�"=�zY.���7D��8��<�4�4X���Cr������W�X�,�5�e��a��vj�Ⱦc�E��&Z���Y#z?�	�R"�v~Ȅ�"�`�*4Ϡ�u6faM3��$�į��MD/��y"(�O��T�M�J"�w���1b:e��L�"���2z��,���
n������@���p�Y�j�Cy�؇1gzEA.�bʱY��5}�LT�z'��
��f��@_�����+�m����IJ�Ƌ'�=-ZV�%F�������7q���k| �H�	�&�,h߄Rݾ����Z"���Vn�>B+%S�ae����f�X��+�Yj��(��s�`E/sO6N�<*������iρ*&�Lh�>��8�9Vow�kA;����:���<%�,�|�O�5_o�1�fSAn���yyM��U�ێ���f.�y�Z����{yP�@�g�ˇMM�Kyi�p5x�SY*����\�ad�~p.�8[�Ȱ��H��-�_�,���X�>��,M�r	�>�����
�A��EI���8ڴ��;۞f#y[��iEv�������y������y�����������n���閧h<�ő�	K��%ћ�-�>��]�zH��ɣR�
-�B�a�|1�z�Wa�z�+W�+�l]��ʣ�o�h#9�
ðf*�	�RU-��{p����ѧ=�a;�@x��u�ثօKY��,	fo�ņXe�[����6�z�p�\b��Y�Vܘ����v��Vm O�o:^�r�!̃
������^g��mm���EM��\V��D8���'a(�O	��E�Y>�G
{�	��x�,c$/(��i!�9���s�4�V�����WZ:'��]�y�~��&;�����Hv7�_���i�����K�w�Ȇ���`p�ϊ���Jw����nt,�p<�$��o ��;|Ѷ!�N�{Q.~�0�I�A$�kw�X�F����-m���[�Ƴ-�bBnD��h�ze^)���_�lޱ�$��*�d�w� 0���!��/���&�R��"<�1mGo���;�-޶�xw��^d=�;����{邻��}U��g��x��n�W��k����e�rŷ��s�omQCw��g����M�(y|�剷^�ݫ�M��z��ީ]B�3�M�t̿[�?g�T��W"х�u`��$�pE��NM�;�ʤ��n�:����]�Ğ��C��ʋ��ӯ��-*�QcSn�r{�h��m��Zu���l��^����p3���0�tZ�™+h�A]-�������6���W��+��5N%�w4(ۦ0�Ln�ͱ��m[f�㦍��1�����M�x���5�4dv�D†j��~�jh۠��_�Wk����]��d>��w3_��^i�}E�Ɩ��6@��5
R!b
�4I�X�8�>����(mSfrq0:2g�}g߄��f�G|m�!��ܳ�6��X�.��<�3��/�;e3J��AQ,�Y��H>ZZ` �A����� ���r1e�dvŏ�]�*��瀔;�s���A|S���ht���:?��Z���<�*�]�L��W1��RI~�%c��G�$j��g���]?�3~������D�xҩ}��~1
>o��xCl
M��̟
J�f>�����Tb����(��XGtbq�)������Sg(9Z�(<t$[{~`u��g�;�:�X�|v�1�u\l/�C�/$�_��S=
 �%���Mb��PbC�Fv�A�(��� :K�u�\읙	�*?h�\���n&�6U�i��(վȧ;
��5,�"���^aD�V��Y���<�q�?�a��$��)N.�,(Q(.J�U����*�OL.��ϋ������*V��ч���I��-��)N.�,(Q(.J�U����*�O,.N-*��*V��чH�qa��M(�%�
� �;S��Cj(����=��/
yn�d�#�W�S�a��T\�
��5S�k�XS����2BW*)�����2�Y�%�
� F�S�@V�@j(�����z}�M��AZ$�s`�+�#��\Vo<1������Rڂe�\ΐ��g�j�������]��)N.�,(Q(.J�U�����b��"�ԲԼ���Ģ����b%;}�R;.��4�5��	� �N! Y@]F,�F+�ݿ�R8��]��"��K��刀H���PV|
���sy��v����@ߐ�t<ûX��)N.�,(Q(.J�U��Ӈ��b��"��L�Ģ����Ē������b%;}�&;.8ڠ�>���A�0�yE���
�*�� ������zE��f6V�7/����b���!�b�"	�>��
n�9�I�Q�ۤ���j�+���*�ׯ����6�KXR��M��?�����)N.�,(Q(.J�U��Ӈ��b��"��L���Ԋ���Լ��ļ���"��b%;}�F;.�n3B�M�A
� ��B��P�b���<��_�&�͌���|�K=�I�U��<�dv���L�9��E��E��	_��m�ak����Q<3=�
k���;�0{N��B���׀!|d�+��d�WL1�R�e
ʥ��U ��#�|.ؚ�z�2�*��H����ז&��F*�Sz��]��v+���*�8䄷���W�W���)N.�,(Q(.J�U��Ӈ��b��"��L�������ļ���"��b%;}�;.�
+�;�M�K� ������Ui�����ո1��m�˩^F8��Jo2��qk��%#�}��$�aT�'��(8�FS�6��孄v{*x���/7�:t���A�0�"���|!ˈ@ hm��zl�=�afS-�����
Na�N=���f�*�f
��ܥ�"���>t��1ʪwk�rx0ȗ�����S���g\�r�������{��M�A� "���W�"�*�i�߫�b2�^f�W�7˹@�<X����a�h���}�/��T+�~�*�����y�R�Z�4Vu�@�د�<,���v�M�	� @ѻSHHP�����$ݿ/������3j�<׭�k;2 Ү��J�PB���<�֟�	��0(�6,�˕u�f�M�
� @�;S��.��`�%m��.&��/	_g�&x�[b׶g@�U�!T��o��dUyz4�?w�R$l�����AI�t	/;Z��k��)N.�,(Q(.J�U��Ӈ��b��"��L�����Ԝ������������"��b%;}�n;.Qx	�G��)N.�,(Q(.J�U��Ӈ��b��"��L�����Ԝ����������b%;}�F;.�4;B��)N.�,(Q(.J�U��Ӈ��b��"��L��ԼR��b%;}�B;.��c�2��)N.�,(Q(.J�U��Ӈ��b��"��L��Լ��Ғ��<��b%;}�z;.3�?!9��)N.�,(Q(.J�U��Ӈ��b��"��L��Լ�̒�\��b%;}�j;.�1�w7��)N.�,(Q(.J�U��Ӈ��b��"��L���Ԣ��J��b%;}�Z;.��A�5��)N.�,(Q(.J�U��Ӈ��b��"��L����̒���Ғ���b%;}�;.�.��;�M�	� @ѻSHHP�����$ݿ/������3j�<׭�k;2 Ү��J�PB���<�֟��vo�à$ڸ��8�2j��)N.�,(Q(.J�U��Ӈ��b��"��L���T��b%;}�J;.�m[�3��)N.�,(Q(.J�U��Ӈ��b��"��L������Լ��b%;}�;.(�&:��)N.�,(Q(.J�U����*�O-K�+�/)JL�N-��*V��ч���z�Y/�u��
� лS�P�i0�'m�߃�7��%�y����^���3)6�H�v�/)o��1v�Lkb7()�X��bn�u�
� лU�)Z!��F\X��c���{���ש�D��C�ܦ�IĀ���z�<�76X!�V�y��tI�}��k�ڥ�l�wP����ta[����)N.�,(Q(.J�U����*�/H,*N��(�͉/.M*N-��*V��ч���@�X!3��Qt�w�pU�(�ͱ㲁RI�)�v\

6��E�%
�EɶJ%��%�9��)�EzY�Jv6�Y�z}�}�~.�58X�%�
� ��S��]c#[t�>z�+*���kY���<���n�#����dGvki:�!�Ӂ���w���M��VMo�F��WL|��@���''v�:��M�E�+r(.Dr�ݥ!��]��9h/�ŝ�y������tc�;�����^�����šJ7]7�0�%t]��Yvl7�%����vL&'_hG�46eJMƄ�K�a[sF�)���󻒩�)׸��)U5-X<妩3�5�3����~|��\����:��Ը\�)��%W\O�#_�`�КmnlEp���Z2�j��*x0Vܩ�n��2!W����@�iU��TR+p��Ҙ��^U	�)H��;u5%���#(X[�	9��``Q6���e01��ڍ�5_�.��"��C8��n�& �-�Fj���L�iS���	�E�ڔ��H�'�2S�}���![�ݑӕ.�F�ģŶ�
)�`*��6֙�a�c��?с�p�.U�X��V�S������2#���8b�K�h�^0NULR��EuQjDq��6�!�z�cI%�E{�h��%���+��o��&c5��8�y.���["\�h@��Ԁe�{�V��‰�I���]��=>L�oO����iH$G�҇�?�EE[.�Y�L�� /��Ϯn�|��Ż��j-?��x{�����1d"ꊶƮдi��$B�
�3�^�j���	?5�(�
t�P)��
�W֣�Z�"���'��L� wq&�'^-��O ;��B�o�^�c���E�(����jH�'ckJO��Z����	��j$>�z*�n7�^;��v2^�.3���)L��C�|I��]^���l��l9�o҂�FfA�;�e�2XS��AGNU#�
e��C��%F��W�0 ���mPH¶E��|�Ӷ{\kNu��0��Z2w�$���Vq��u�F�މ��|E�K�ٚ�8y��y@���p|���Cj��x	t$t7�T(�G���T���(�����p�c?H
;�.#�I�L��a�=���V������^��,T��\5�ꂓ��C�u,W��vn��E���9,[P)=y��E�q��SH��A����SU����q��էE(��QX���a^H�\�%Irv��zG���)�!�,s	��}�E�
#8�j��F�cB�L��}����٧r�C�i������h�f����ک-� Y�Щ��d0wz �v���"N��i��/X�d\����9�?Sp����Zʼn$�
�����zE���U}^�gU?���&h���d��>j`��}��Џ��[�FHd����Rػ��!ŋ5��1�o��Z���;��Z��C
�iZ����h��y���;�㵿����rH�|L���[��(�-[�wX�?$h�a*���r��[���\VGe9�?9�
��gY|;���7U�8G�>�f�7܌>�������]���.�B��VMo�6��WL���D��-A�z��M���{(���F�4H�^#��#)��f۠@s�%zf8���/t�7{#W��$���?��e�ye�Z6kZ6��Ʀ��k
��[6[.��bAw�I��*i����L�.���[6�zؓ���[���j�������\(z`�ԍ*H*�3}�:�����R֜N&��|Bs�տ��[�;ZZ��Vd��F��f1f#�==�Zқ=���AE�Wv�Q/
J����7�pLYx�#��4��r��4��(��K�b��Z��V���b���������]Ũ������a���"���(�c*���^(��C�� E,�кf��q���Vg-鍻_#A�b��?��VzG(��nG�*_���cՀ#�Y^k�?�\�x��$B�lao���8d�ɰo۝zTz����mPrT(��f4�,e.Y�z�G	�c����;�����F���dH�h\�&�{��0�3��݀�M�xp1=
V�U����zO���cd���������x}៓>���jU�Qì�39�-<�n�-�%��P>?���ig���5==D~���
9��Km2P��u�8�tE%�D1���2{d��QI#�N䏳1T���P�c�e1��t�p.�рA	5#Lsζ� Ra*A��.�<tŏ�a�I��Q�-�W1�#�05���Z��� �;�*L��g^�9�|��I�]���/���! ':�o���7����W�n��������`���ƺ�9~\��_
9���!���SD(tz>�+tެ1��y����;�����U�
�q��
�K�WP�5zgC�Qv��M�i\ߥ��oP�H]/2��-���߾�7#l^�C�H��-�P#?��;h'ꎚHj:���p�v�!��7�J?H$儲#J�t�R���;�_.QT��a�70+�:}�+�#TκLB�G!��H8~5|闡�ѝ$hSH\�a��v:�:6��j9�8̲����_â��֗��[#��gHp���+2L��z��x� l�K�_�O�W�&�w�J�c��p�7jbx�
~=�	��TMo�0��Wp�!����;4KѮ�C1�v,��U�R �I� �}���8q7t[�����''	\�ճ���>��@�.�.EU�U�
m,�+)!Y0hѬ1c'I�,��‚ՕIR�!��R��(�`����X�,�HQ��A�,�g�u�2��~|������\Hd'��T�+ml����V�;�i��r"#��'�d�v4%P�@�>�������1�wh��=ϓC�rE�TR���Ro,��j	�gj�u�F�"���T@R����f�
���lL���ܡa��'�y��J�_Ú{DCi�h4���6���sFj�(�T�V�B%��!h��I��F��p����:�y3�z�`�������0�h#�Q�K��p鐚�6a�hlh�Pn�	�'
�܄v��Pׄ�S|
������f�\��Ў3U�4	vBݕk_v�)1���a�����@�Ѷ���_��k`?�a�B��\��~k��@��\ZD�k��<��gh��wE�z�1�f���.�
/a;���V�Q�y����ҍ~?`��G��6b7�	���n;"~yD�#۳7�����<T6�*����@�B���uw��.7*�Ӭ����ٔ8"��@�"m�+���4V��ڨǡ��Z��K�i����r��ht6�o� ��a�5��_�V�|��3��;ks۸��+�L'��j�ޙF����ɶn��L�mf���@$d1�� �xb��{P����No3���4��S�����E#�l$����Sq�P�tQ�e�.�I�,tmRqR��&Q+���ӽ�D�d��s�,
#�n�L�L�J��^��R���)��x~h��R���T˚�lD&+1Si��*E�J�<;}���1/J���Mķ��J�j.>~TkU5?ʥ�
��Eu=m�OE�.g��n�!*SUs�F�JuX��!�(Q�õ����F�~:{Y�FU�>�^����z9+����j,������J���XH���!L�Z�I�����?noż����Ur]�,G���-�I˚}@J@>Ł��-���%��fM[+``M�$�E|��CH�!�,�X�"˘�4��ʲV2��pC�n�pS
�'���� ��RM��Lgi�P~r>�G0p����oW��K�e�����5H9��(���L98�
�j���`��V8H`����=@�*�v�_|@�^�\��<[�� )۲A���-Y�s�v���~[�\J`��hK[R�*���`�d?�Ӷ�u�10P�6W��@ƀ��^K��MQ�z�f�ȓ]k�(z���S�pG��8`�x�9���2����I��Y�E��#�(�z�Z?�e�f)� UNp
=b�i��k`��G"����fQ̛d4:r�Q�E�*Ж���
)V�-;��Lh���V��	�͢�K���8�爸#�~+T���i�o� ܒ����9�
�M��>���D|����8o��!�BV�`!��4��F�ת�Y	��Kz��3H��WP>px`قM�L�-��OƏ`��x�8@�y��{��?d��j#��xA���P�y��]Y�#�rJ�%̃qD���7����Vm�lq��g��|T�?��rS<C����'��#ï��a���jΩ� 4�<�Y�JP�wr-MV�.2�$�U���j�*p5�a�7�>�`
C�
(¬mX�w(�;��#ب�=ڲ�f\��Ղ�+Q#qD'<����A���	�nʃi�V%�d��=9��ϣ	�'���{�?J�wE�&#���V�h�w���N
}�Q�y��)���U�-�;�ul��X�"H�`/4��]t�li�Df�a
��Fb�3��!pIԎ�6�<t��@ַ�sL�;����8' ]V@5${���Oa�{b.2��r����X� 9���x�O�e�N�
T0�gU�%(L���ʛtU�����׀�U�g�2@;���e��`_�!mT�O�L�RɪG�w��/�,�8md�:�Y��J�Ynk0�z�� �`q
��o�����e�wŔޚ��lz�
�t�������g����l-���zd�k�Q�M��5	��9��
�H�����2�G8*_����<KRGQ�u�����
`�ܭ�i�.:�~bD ��V��W ����h��g��i�o�,��g#��^c".ϟ�'�L��h*l����4P�7?�浒� s��7���:�J�Q��i��$O^�
L��UI�2��V�֙2&(ÚE��노�j���l�>��w�ߍi_c��-�Z �j�ט=��X���\��]��
0�2�Ї����z�����h��En�PX�W�ߋ��k �����)��=30]�H	����a�O2���zǩY�ر�X�7�8�t
;���s�t�y�u�������_{<�09�b-���ݿ�	��]�`P�/x�f�,<fPA}C�FOw�.�%u�m�~#w�kK��uW;��"d�K�V��ۃ�{���������
�7S�їK��2%�"e�� �9�s�P��5��l�+޸��f��2AE&��&n��5G����S��	�6��
g@��ζ}�(S�MT~iae�ʚ�`���'t�uy�)V��Z��?6S�m�Ҭ���i���?>��?=}
{Iz�Y� ���rP6�a�ɕ��(��v�?�c���c�v;В�R�d�L��|0�B7����Z���w �;�A��ۏ���Ų{}�]$F�ϛ&�h��m?���?�������cR���c�'U�� ���<�܅i�}���{l��݅}�U�A�i]�+>q������n�g����U���G���_��
���Y����è�M�]���]����ӹ��n+׺A�%���o�OE������c�$�s�2ʞC�[�?ĝ��?{>P,�M�^/����぀c#0�S�Ylw���A�>x��ஓ�p͗���_�eC��-�}D�g��o0<‚:�ɽ�@���L��Fw +��!N]H����8xy���wHɺ>(6^�Mm�����R�ñ1��@��q�;�W!�aSjv��V�F�suA��3w�����t�!/vfjL#h>�w�}!�����=��5E���S(����[:��9ޅ�!#�����t�;�`h�'�v�-~���
�j�L3e"��x�����R�K$�!�4u��g�Z~z�ӽn����8D�S�Ϳt0,�ܕ
f���Df���s�G�%Iax���@R��VF��{��-[ħ�u"0�]t�_@�I���E��]{�@UgһR)=`4�΅zw$�[[�wx'��dp���p�-L�73�h�B�e��].;�KX��q�K��ںF��Ƞ;P`J=*�d����EQ��&�R�;�OF��iȌ��
��@���-7����Y��8(�����z�37�,���}�H�&v�%��?�LJ�`v�Nľ�|��ͣ�3 �����XB�ѹ�=E,�m~� l̐
�0<�T��G"E��.ݝ'e�4&���Xt�����
k.@�����&�Y�K��$���1����h�B��8��`⓮���\�P)!�"O�5r�����A�ll��.̒|x�Ś}ɐ���	�k��̙�0+]���~��0H���6�k.dح^+��5d:�8�w0o:b�Bcv㪺�tE0Ѧ�2���UTk
5
�_pRF��S.�l��=l���3��	�q��)?ȕ�,��>@���r���إ�h�C��5���8��2�/E�i�6,�j!���d�]$���Wz9ӵ�u�s��.�ױ����W�ʝ��&����rEM��[:!��Lݳ�w	ȉ0f`˖�c����=
�\��-`Hߡm�,�Ȓ���@%�(l�7`��8$�֩�� �F��@P���n�.��0�de�D-���C|��^����Y�o\딜$�U�Y��B�A�'Ӆ�h3jŅ<���b\3�~ޖ������-�j����Nq���.H
P+�������9��aC{[䶳�+p��Y�h�����'��K�ѱ�4n��K���
n�Յt�Q��c�u�P&���(L+Lh�Tsb0q�ײ<f����^����ɫ�H�AЀ����@��N�Uר�Fֹw
�.��v.�Z5h���y�Q2�H�zBh����7]�,5x�����x���^��`�s�I����[�^:��Ϡ�`�ߥ�|�0�!\@�Q�kR��TB��]Vj����/��l����8��X�kl��O���0�ĥ���rꊸ�谺\8���hQ۩��b]�,\X�S��Oer�s�eA�/�lQg��-�s�¸3ҋ���
�ى��'���N�'�&�AQ�Zї;k)ڸ��L�F�(�I��q�}���:�p�`��UL�� m�^�#.���Չ�,@�&,�
NNʧ݄0����K�İf��-M�1�:�;����%���BB�_t������n-���J棩��VB<��Ό{_��NP9�'
_�U�
�!yF��=��z�-�9���IՖ�P�3ʾV׸���Q�B:[b5�Lq���KA��-t�hC�`�5�j�����m�x�yzQ<h۸��o=�~h���h�H9Y�St,��:���x<��:�X
�=�;�?i:���pM�H<{ƞD��f����c�;
V–��Nh��ۖ#�C*
����p�1Pw�iZ���x�����FzA4���W�������ﲰ] M��jwW:�U��hFw��Â�����n�R�8kZ.Ꮸ��Яā�]�}�?�3C��y�ģG���9�֗���;�eK��ݵ��V���%�Z���6�t`ll$l�M��p�5�g;g����xMpb2��]�w|�w��4z��S��>�S�L/�P8s��*�1qRfCe_ק;#�N]{Syv�d��ƻN�%���`�����c�o���o;����#=�<m, �f���	�NR���Tr]\K�2��s]�ؔ�����	$�\v�0v���b�U���Χ��֧�����*�k����|-+H��xYT����v��z�Д4h���qR�.�ޖvt`S��n[�_�<bu�Zۋ{�A=��sq�ٳ?={�W�/>�a��Đ�Epk���/.��Q"{����C[���K���й�Kِ�^=���W>j���xV5�|H9�(��A$�ZC�m�#��ЖH����v���:j�:�zpw�k���M#&r.�b"�L�����BW
���m{�]�1�=H<�;�b]09��ҍH�?1=�hA��Y�s�6~�_��CB%
ui_����v�I�L�\2DBR�`R�����@������Ӊ$���~�@'���Ψ媆����W.VF�U���^icS8/
�E���ld�M&�J��WʂՍ�$d:��?�z#M)s��@��f��m�+$*�%��+QC&J�KҴ�M��*�7Ӌ׿�^�B2=:�<}zO��$�%��(�'d��5���ϗ��F�hv�{�̤_�Md�A��~bA�.[�L��2u�`��_C��pS���j�KQ�z��EKMY�LZ+��{K�~��[�7��V�"�����rIV�dg��"�8��(#A�9�fI[��*#�_�͚Ԫ?�I��@O4�`,��N��v��U�zR�H��S���u���VX�`�wz�N�o���i��a����c�-�܋��AJ��w���no�F��ob-_��
�q��_B٬�oO.ɯl��5|���7����6���ZćJ�V�+ܳ�P9ÂL­W�;%}h+Ȟ��N�+#�Ɣ��C�pjJ�G#az�b�ߙJFp{�;�Ϟ��[��V��V��d1�	�A���,%g^Uˆ5���7�b�p1����[���=U.ڨ��B*�����-�k]HQ��AW�ͼ����J�rY	o0�T`Qg����Q!���6��tџ��?E��K/���M#�^��=L�]PYxQUR��+&%�֫��yC�r.v�E�[E��l-Da����l�� 4�ls��1G~�u<��U�K[�D��
��B�����G�kz9����������}�G��C��d؍sB�bp��̏>��z�n��=V8r\kL��Y�b+v�U��HLH^��u����F���0�����)gBR�#�p�Ph�IG���/��2NH��~K��aZ��'�6h�4l熂�����d�����ݭEU�ݸY�fd�D��$���V�TvM;���E�%�q�Hڰ���)9T� WW��F�<����eI��MufB#��,*dh~���շMw���:�!�N�X���C/�	
���B�>si���W�<�ɑ�+��f9C��[Qa�o���h����é����5�Œ6h��"�X#-�RJ����0���6(��Z3�^�-�ҒS�I���9��T�O'\��w������y�̯[(�!��n���~�
�-3$و���T�\S	?eL/щ�j�m
%��P��O}o��qd���c�����8��Ӂ��*���ܤHsw�Ls*�����2+�\�Se��C��Gh�|��bzC3����ê|3싨�Κ���^G$LH�ce�ES�4<�w���=Px9\�Ϟ�-����I"��d��{P�rV�'�&�%r�|h
.RHZ{s���IZ7�Ab����`�2nL�F�0WD�c`U��:ǚ&���q��F����o�;`qeI�m�)�}:97�)H�3��� f-���&�:DGX�b�z+L�V{����ӟ�E��a��I��q�S��΍��Z!���p)OZo����A�pMp@�I$��wG�<�y��F�7/�n(=��-g�J)F�Ix��4Г�߽9�&%?��ՙrG<7)|�mgQǯ? Q�� QG�N��a1�O׽1�s��ަ� �#*H��oTވ�ύ��˃��k</��p{� պ��.r��h'ad����>��S�'o�#��oW2:E�,k0�AU_�ۗ���F���^u�A�N��5��!� �8���
�po#���S�.�Bc	����&��a.�WA�:0��q��q|G&�Ʉ���صA$��xb��VW�A���*�+Q�|�f+��؄MI�0w�B�0�<��h�w��!Hr4q��)O(�n�΋O���T)�1�s�7��KZnz�V@�w����o��#���v�|=p��n�6}�B���S|x�iJ���J�}�{wK{ܕ?y��'/�󥿍��Y����I���/
BM5�����������hOK��f���!�p����֐{��Q�ۀֆ�젥> ��q�5�5�r/r�����=�,�_
��OB8Kө�w�赱�7�|7��� ���u̢.��	&�v�dwP��a"F��1Ń�R�;;4���k���ꆚD0����<%AoL������{��3��_Z�=k��O$�78ɏ�ߧ��r2�tt�{6��	�R�9E�uM3���o����2��u
k�c�ަ
��w_
�;9n_��C����n�+���~�Y8T5��E[q|����3<ѕ���"����@m��L�c��xY'�ب���)ln5��z4��G[�O;J��N�@�?`,,E���{�Y�j������\���3���|��{��F�8}	x���+$D/���Q�-��2y^�F���v����eA]�i�R����z0bX�+„��y��S�zrr���~V_�l|�[%F�l�*���$@8���Z(������B[<���[Z��B�q�VF�tKm�a֍U0-kY<�6�v�ŏ��r������j��veG�&�7��Zd(�_a7�w�>n�̛�`�����L,�Qo:����w+]J���`���8i�ݛ�y�0�ρ���Q�N#1��W��!�1,��r@B -AB�g��{Զʿ��\�ˉcWwWWU��v���c,'�qv~�uKX�l{z\�Zv%��yЁ�oI��xr[÷��� �"IJ�[bC
�*�z��9����d�o+Yl(1�6m"N��]��W�uGeQ��W�L�[M�x��gVq^�-����ͅh�oæ����MGBv��Y��H�B;ȉ��ˋS� ۃ�g�<�f�/�Y*�T^o	�-����(���+����a��j��d���G��P�f�F�k�ޒ9\�RN��Hab*�Br��ֆ�#ɣS�H��O�Y9�$�5�s�>ψ�x���H�>�E^�	}�}��	p�M{�	G]�2:�F���pW)}����r9����*+�r�N;O�x�]��Py��9�?�D�D��!�72*bL>��'��W��O�_��4��XmS�8�ί�|�&8���°�30[KռP�~���[Nt�X^I&d����n�ى�(���j=�z���]�f��bi�8?d?����n��],�Z�v�޶v����۪b$h�F�Qd�)�3���٥4̨V���.ԃе(�|�8{wsyl�����A�.�e9��\��R�u�d
�}��x���=+e%���\g�(e-�#xl�h�ʶέT���=06=:�Ov�.E�4��0Q����a�5X6��9��Y^qc2��k�5_�'c���y��)nÂ�5�0��������?�7�?W���YFŚ=�J��
��3Viw����:�$kq-���_���B`���v�m�tu�Z�e֑HS�B4ϒ?��4��0^)�jq��JZ	:O���d+n�0_�mu�%�)|���=񾸈2�ą�ш,��n!�9?g#��(�u�:g��[|�"޹��y�oARr��W'���п��{$N& ���ogL�~�|B�_�A(�!��/7	1?�EdD�=Ĺ�'y3�wQ5B'Tѹ\n1�j�N�����X����L�-_|�+��j�/���[A�f
Dg�]�ֵЗmLg_qVȲ_�x��H
�����C�3�NP��=(4R'_�E�SSz⫬BX>���b��C�9����wh�i��3��������5� ���"�U08r)pDY��U�	@�)l�{�����o?~�CI���0	�!�f�,�) �"�m�R�zo�L���<����Y�!"?�T�|b:B����ƧSwX�gب(�����vX#缪���x�����0�g�&�j�x����]���HQx�+q�Me7��D]^�[W*`���������p�B�l�Y)}���R�C4���x�1�~�t�T������TBvF��u��=�{f>O�~�v��K��~M�͂pHk�["��w@V�C���0�N
�=P�:��VE�/��!�]R�4��Q�	���U�\αu��@�Q�f�6���p�i��䮝"���N2���Mht �cӃ��-�;u2u]��G�_j��!��`M�B�%�Y�g���+����t�}�NJU���JM(�#괽kC���L0�v���%�#2���\R���b�@�TΒD�7�Dg��X�W���iS���je�BCc��h�P�S���$5��bE�u��X���7�c�Bpn�0Q�2�T�})YT�n8��Q�`��cڦQڗL�d�Z�
�Wآ�	�{A��w��������!�����,���;;��ݹ�,U[�n*F�����j.���\��|��,f����_�k��i�7MEǞ���RC.R*���x���	�2ISu�OT�9-�U\/��t�JBS
Ŵ�3c�P�rqz�<��ᶽ��@p�tkY��/�\�/)�]�\��{Q���������D:�mh�G3���זH�+�R�T`Ab� �u��@���ϲ����T�Z�++V�~��F���=/)1nY�/����@���\{��͈��!��\=C���0�BX��v:��h{��̅�c)sW��;?2��>�+Q�v� �$p�k�yD
�W�/����h����t�>�$�'&��䐽��>��'E��O���7U�k��|KP�!\3��3u/��j O��Y ��j*����~d{)q�;�u�
l�}(^�t�/�K@�c�����9�'a9��������ѵGr�,�'���!�tܿ)@�˵�*��/h���#N���"9�u�:'g�kf�n�w�N"��AR�2�0nߙw����G(��{L;<�
��xD{t4qpzf���.�xL����kW	M�����q�j���^����{4�&ܚAe|P�p�`�4�Z��oP[�
3�
��@����܎��Z@�X��PyI�N�
v�.�?�=���7@��	st�3@9P���0�q�l�X��6�4�A���w�
B&�V�5�<.��ꌍ ���}�GX.ё�~��4T,+�.�����Cmˆn

��+�7�n�M��r#��\Z�̦�\��E���?����)��|D��ZB����TS�Y��
:�阕t–�ď
��L��@�E���7�c�t���).PtI���d�&;����T�kؕ��	h�rڑ�Y���?Us
G!���(2�����B��:�������߁��\�(Q7�Qw�F@���Ҏ���d�,�`�T(��M�U?˛8%���ҡ�'(f--4�1Q�q�9�XAM��b^��+��n�/�E��l�I���u���	H!�I�~s���6�C�j��Gi��b�)̗Sx@�FA3���~����"s7	��A1�޺����I��>��ɰ��v�NR��J���ix��q�s����T���h�;�<!�ƒݧ����Է��7�v����Y]o��}�������t��׷u�p��E���a�ɕńZ
KҎ���3�$E�n�r�"����3g�|���N���o�5��]z�㋗4�k:��r�7:n�yi�����dbEVW���,�98����rF�<��*�jJ�L~ޔ����=)����~U���<��깪)U��5K����(7x��ӓ7����,/t��s���C{��d��������+�T�h�m��^�~��
V�d�(7i�@�,�:��[�uVӲ�1T��UUj�e�L��b*� D��e-��rsC�Z������
Uךme-�1��T�9Ы4��m��}Y{����F;˰�W�ʦv���jh<��7-��Z��z��*�1��ӧh��^�˦Ƞ��b�]^ρhyT��;u������5����P�,����7�Om��=}MK��<�++U[X}���ucM�F$�U�K8P�T~�-jA���t�yf�u�fX�	\[�5~�0�o��a75��Z�
ws
�-��UE#fz�3�j�z"z߁��a���<��L
@
Y��kYZ���U[p�hE岾Z@Au�aGx�*��`�L�Ec�[�b�%LL>t�s�Ң����/r�LzP�*q��d{��!�}4�Myg��K]�J��
M�|���fy����=c�}�G��_X~Ѭ1����;�
N�������������uD�F-���e��ƥ��9�^�:󝐕�+�$�U�~��� ��3�(�U�i��q����;�纘a��ׯ�W���OCp�ۀ��?V�lW�a*���mi��(�yJ�K�Q��"��vY}�Mr��	Y�y�U��t����k�x���	��`0C6#Ds���`$IIT��iP,���
�,�b)��d�'4G�\4�h����
ҥϹ��s8��?kQᕗF-Eot�'�~��`�%".��ZMߚ޼����������۫�_g��	)2��~���0�_�SHgB��L.1���-�]�X����7����
	��˦B�.o���Ҳ�� �Q�5W
���o�oȴ���d��S鋃�t��`3�>#�TQ�^6�}4B;u]xjB��n��½���@�X{z�>���W4�P�$�+��?�c�CqqI�IkD�̶d��0�B�6�����h�!��k�+C�n9�M�c3���+]��r��2�X,�lŜ�`�W,�su��&�j�}}�z���!�
Ȱ��z$�@�����ʟ�0�22�=����]ˆ"C�����yy<�c��&�C�Ep�q��vpY�䦼�9��˶�uN����
���*��NVn@�T�����pn�Z��띐X�([$"�kR�DT�1�|
�މj���	�&o���*�T��P���d�ʫ�Q�>S��^|7�P;�0��J�nmC�s�2�)W���������eo�8��o�+d���pgX�>���|�V���VuS]�U���~<ğ��}�67�o�?o�YS2Y6�|�G�V����:y��ҡM�wʣr]k��˾r�;�K�����h�A�sV��B��n����]�j̩�)�TB9��P�5��a"Ǽ�~�;��G�s�3&�oW���>�L�n����A�Kn�����^���ͮ�_�p!��}>�uCR=��z��+���̛��x�ʳr��.O��̙T�5Tc�ۛ���+
N:��BJ��X�lf� �/d��6��u]m��{�6�3X�
�5�P�
���u���'������'��Pr׶4�g�~����'S�m�;�#�sU�E��?�о�18�Ц�=sW|�a\Kչ�M4��%o��d�7�r�b��
�ihҳP�N��nE[��}���m�-E[]��VL����&������<��B�F�7w��	�O��nes���s 7+���B�6
��o�����(���T
���Z�y��p틞V�m*��(Iݘ���9�'l5�w�,���ls�~��!��`�r�+Ck�fg�1�9�o����mE��~볥?��ʐ�Ryw������n��f�x*�pqmj�aF@*��q�^�̍~ڹ��N��E�[D�Lҙ��'f���u�ro1g��l��8�2��uA����
̆����[d&��r��TEQ�����[����|��U��
3G�@��fYdy��8�r�Z��$�*oc���Y��'�B��堊pbY4~�L�"�ո��|�0�[[ڐj�%��a���	B��=��8��$��{��]ӛ,�*�:��2�uu;dn��0�IW�I�z@�,s���F�BM���7��S�ݠ�����N���0�ٽ!�#z��y��M0oSҋ�����$��f5��}U�޺� �v�1�.}Y��r�s�$��UDs��;��m�!���\���G�C����%l}-;���@ϻ��٢��!�ߩ��/��o��J�,Ȧ��	�O���2�3���}�c�\|D/7j���q�P����*�G`7p�G��1��\$�*�l��
���I4={}�oq�{����O��j!E�U���^�q��-|�����
��Ν�IH�G=�n�	�d��Ȗu)�R��TEK�	�܍vy�}@۳w��|�
�x|�/���[Ko#E��+��m��PB6BHH�+�pBQ4�t�aM�x����o��]=vLx�����=�U�_U}Ø|÷5V/�N�nj	jcK
v%���ϒD�n�ߤ�I!�Pr
ě�*����_�uF�F���Z-�>�D�}�>�/���������sMM�{3�v���^Y��	�J����3��Y����
l���q�e�I�Z��8ژ1�W��Z_���Y#l4������֋c�sϟ3zwUck8�=QRp!�����-��=O�� rK��BN��֋Y6H@ Q�{ݵ(�����o<�cK
�;�̀򫭩�!�����;��nb9r���jÈ^�7�FH�y��Y���џ�b������QD���a��)�L!K�on7��<��}V��d����;֒���ϔp��t[���b��d�)b�nq���Z�Q�*6���V^�� ���mL���]��
�-kIv�%F�lȾ�o*�,#��M��Z���"v͘�G��ok0��G8���n�Z+���y�(��
�p�H�?�SRc�a��w�vRt#�>�i���־f�X"�=N"	׌�dB����>��F	�E�]q���0&A��ֆ�$�H-R	!F���i8�L�e�j>�\G�8R�n$
/��m�i SgV��;V�.�(��E��<`mb�y�F)~�z}�s
g�Z���z���DHPq�h��7�⾧^$,�����`���S�lj�գ�#�qo[�n����,���a��L�}L)Hֱ���J1>��A�C��KA�`{�M&�_KN9���4��H�����}�Hm2�06��'2��F��{�n�ƣ�y��6Z��TY�GT�u�����t��+Emd4"��kjo�g�HN��,�� }�k"�@^���#�\�te��:X՞Z�#[���Fg�?n���Yc��C	f��#�{�q�dY'�7�ͨx��'�R@w���e�aP2B�#\eV�P���؊�U>��_��	��p�hl�oӣ�}�a����i��ȡ�f+1�3�]�l~j~3��f�БmFlm˺9�������D/�/���-��L(��h��$���./i�ٍ�pt�x�)3��ʰ\WJ�ϧW�����$MU}UŇU�)�>z�b�ς�����;��#<���P�%R�P��w=G�2,+4�vi 8,E��I�k�w����բ����ͪ���t����0����njB��tN����1�
�		/�wX�p�g��*5K�-���c����xp^xT��u$�{���}�y�;�_�Z��&e�����d���%�����������a��-Y#	w+-F�K�d�_�LW���'7S��=�>/��!W��5�rS�PR>+N@�-�.�|��6���2�U>??�����c��M�+��4��)�W{���
{���^h���Aߘ0�9��{_��9�i���j;�ok\b�a%:9�)���x������Ը4M�#��K�%|����~���~�SlV�� G,���t�!��X��"�:ŵ��\�g92ł�,&��5>��P��iCϮ��~4ƛH����=�C��ar&2e��g�?g*�
�R�{��Rt����d���_������c:�oFRYս��B��&is��q\�
�
�R of_ب�tr��Z�+��7�w�����Ys���i�#��{��<y�
���OH=�eB��Y[s�6~��@�PI�De�ov�V���3������"A	
E� (YM��\H��b9ζ�L,���s��9�pH�E��|�T����7�zK�KFΗR�x�"�B-��2J��D���5����|�1QK��\2d$#�u!�L�,"�-����b��m�H�C��6����4%s�H�(҈��3ruy>����',8�ג�QpɎ	[�T͔��g&���P�yʺ�X�N��E*.�n�|9"d���O^i娔bCR\A�<�,'Kx�����y��D�q=C
�d��P��KC0IA������`�/��<]<�gC�?i����rb�jAAԡ'$X�;̅�(�i��s��T��J�˔$,V�3.^�c���C•�>�
v:׏��DlJ�]�t�qv7�N�IpZ�N�tb�]#X�𾢑~��T�\X�@��ՙ���)/90��>�,�~G9_�9$_�Vg��tr]�ʠ?�]
�Z=�<��oR��*�����'GM.p	��E���=6@twd];$)/�
�7��F�g7(�5j/`�QN�1�<�tii3��&a�C~=�l��ջL�X�>[�H?p���8c�����~6�̮//f����[0�(1��Y^��U=��V�$K�B�h�e(/�p��y@�m�������x6��m��M�W�4���Zm��T�D�&����
�l͙)E�iSQ9bAU��7KR��OȹNE<�2T��U��g�SHU�P��6��$n.cu^@.�-��`��E��1��(��<͋8�!7�E��ݜ1�g4g�de�Š�v�
KM�v�Ci�����o�����syw	�?8�
�\�ߒ�#��9�N„��@&ŚG`�P�V(�m"@k�ղ�UfL�l�b�� N�G�-�ZQ�ɺ;׮�8���"���4�gS�S�P�&t���TPZN�|�^_]���h_�RŠ1vKW<�
L�:�G�Ne#�u��˗ �S�
���b6͙�0f�6ų2u�.
�Փ��I��|֝@�X�;�m��`ٹ��Z���5CU�_�OA���kx�S����ĐE9%9���G�����`��,ay��fԤ�U.�X���@���N
=]�n��
�j���Jht���1�Dhrݽ���&�f3�x6;&����G̘���"��|�I�����C�ۄ<���H�]�����!-��%_�؅\�+��sPÏX($zܜ
�[�@s�
l�X&�x
ك��w��6N����S?�7���;�ݍ?m�%����:��5ٖ<�����f��_�o�A34
��0N�jM5����Ӎ0�͐���$M���)O(.�y�j��$fN3YT�C�ņ��c��R])���)/к��
(��<cVo�*d��x�؋\0.b>i:�tE�[F�h��H��7{.���쮙싗���ù�0E�?
&�wЯ`U�v�za�1��4촯�Y��|ɓ�h�t4�j�wt�ɶژ�Xu^e�֏ߍZ�jm_��;R�8xa����:��I�i�����UOm���O�H��f�����KD�H�t|=Z�a�i���US���S�Z��`k��=����.�vd؉�F��V�ʋî�.)�Z�SA��H�{��ID?L�V�eI׺�I,�;<Ͼ`�"�&��Ȃ�L5��64�Ib�8pE�y�^�l���87��ڇw��9KshU,	��.ժ���i1���G0_���Y&�-;iE����̓f]�V�ӝ�,�:�;]0޹�~l��m�� t�o�^��[���{�ݺ�>�0M�_/AzM���"&�&(�]�̧�=�~h�g4����jo:)G�q��M��R�i���>8��^M�
�Q�~��{s`�
Yf���\�Z�@
��s�Ӂi)n!H7��P�J�ޯ(��|�ct�7��7���0VJ8��m��g�L/�_�5���F�����>��r���}��>���ְ��8vp��sOˣ����
i�k���5�C_�=yz}����G�cT	n1+��f�*: �7��5G�G՞jw�V��΂��#�"��B�x��Ǐ5��Տo��E����O�IP���u%C�aTl��/(�1�"���w�����b�$b��K�\�i}�#&�?�9$��%��
FHX�,��t�/}E&�B��!(Q�˒'v���V����WZ�')�C�OD��̠�
~�$x������y���*��
>qm4L{	��z��
��J�^�Va��&_ۑgf�i����#�s@�4zGސ�~���ꬭ��oN�<V�F^�Nm��uc
�'����]
G9j�UB���S����[K��6��W��؛x}�@�M���K�����,K�(����;�EIv�9$Ȋ�3��o>κ� �x� a�;�o��V�eDfn�����]6b/��{�k�1��W=�������,��	�-:�)q
�K�(��3��M5���
�sU��;�Ei�KzpW����F�`���Ư�����g}���$4W�R8grx�Io���Cb�n�Q��'<�c��lf�m�l����>��'���O��w�LS�c4�P�����B�	�Zq{���|p~�?x��9B�Y2ىskL؜�n.����R�͍��W��c�u�^�|�e�M7b��,���yQ9ܬZ�7�d���	�ȅ:T�����M�^�B�iu9��eBʴ9w(>��K�^��:�ݖ�����h�U`�Dz���-�l�4�B&?}����v^����M�Tʟ�'���_�����I�N��9�����X�������>�O��7fF�~ON�Ou�i�5�	8�|�i����=4�������pMƛ}�R��t�duӈ�
)	{)�u]��zIT�R�Df:ҙ�\=�_HJ8iH�ӲǬ���{��^��/	�\�I`�
.�%��B|�sbIϹJ�3���1�jp�����95��Z�%��.�HU�Ҕ5�魻���;���|s~vEcر��*�bg��iŘl�o�ާ[O0�?
M1��!��N��F��QI�jy�Ez�L� �&-*	+��TmQ�8-�e�my�	�6D�����N�^����?����-x�Z/
���*R$�S���jQ�Ssz\�_ۧ;�}�)R&e�C���˴�SQ����h�;���7z���n<2��"<���M����:����h�j�
�|q�L����w��?�3�֥3��2�k�P�ѓ���cM5��%l�AT� �hbJ�g���-2� �C����vC�ނ�HA)�!���[�O�\���H�lȒ�T�����D��a�}}������"�'��&g�4�W[8��_�]�ޢwɛ�/�9��S�x�j-	��0Gv��C�M��//�B�hd%|�>�[
›i#�-E�&�Ăkk�\�Γ���S%'��ḩ�39{���2�*�d�	��k�>'���}nȣh�p�� u}�^�~�Z�?�]A�����.����s��4\����	�b����=��@,�3��EFpO�lLU}��U�����
������6c�����52�|b�]���"��rlE�[���iU]-K��P�����O�
r:�"�h*=���q�W����Fn�g�����E��ְ3>��o�p�DM�h��ĕ�`\��W".�/�6O��.q��|��p��n�*Lc�M���������Ȼ����vOcn��7����X�]������n$��t�*/!;2R`��!�AQ����Q~��I�X�@��6� ��`~9EfM]�,�X�)���Z*yM���q��
8���ȁ�#�G�?��_�XOU+��b&���?�[Kr�0�
Y�3�L��3]t��N�t2�"�{-K2�l!^t�]�ز�����H���)Ÿ��+!�H�n9���t:����4�݆<ع���Ͼ���
	p�)�M>},��j��
�����um�0k�^�A&
{�Ḇ�oA��$\;��߸���Sb"e���\b�z����0���g?��a^�� ��r39iP쌵��0�dD	qL��3R^���kDr�i��&����:[��l��^I������E�Ο�|w�PDZ��`����d&��NP\W,`��D�8i4�[]�Z�A�4��#�ї��,�`TN��S�L��;����=U��?�:���B 8ĭE�ܘ�Cv}��J1f�E�/L"ua���,U��%�2Oc�#D4Q
��Xq
��k]���Z��|%�YI�@c�Zܵ�0����Wٖf1��ËI+8`�㐅/�A��K��aH�DZ<x6y
*p�����/���������ނm�WBր �~����DL"OHp����"Z�����1P��d;Y�{|��{��e�W��I��VMo�8��WLOvGJ�=9mQ���lѤ�1���ED"��cd��wHJч�`�eS3Ù�7�ǰP�N�ufa����9�g�L�BT�+�)m"��9xC
�
��(��AP+��0`T�9W)�]�
j�)$;`pywub�.G�GIn6c8�����R�LAHZG��^,o9F��Q�+!q2���OaUIn���#x����
�0� 
�FH*k��$Zȵ���Nȕ��b㌒�R�f(�Q�
�>��w�b:��P��T��W�����V�z�,����7w%���v_�E�d���0�:���¥��2$�|�/�
<>��u�.*����J$��Ã_{x�� ��x:�5t.�+�J�B��0x�U`2��/(B�eծ����lx<��8�s�
��8�Nj|ѵ�g����j{S�F���xX�^�\±�T���5R.uٓq*6��GdYr-S|"��W^�sk��,��ʑ�7�s~-K��	g�����1/U[�G>��oz��$�.2���6Lm�?����u B`#�4���M�'5uv8ņ����9Q���?�h��=4�J�n��+����f���: x��M�m��a��$��j��� ��	�6JߘLI?<�-i+��L��y�IV�u����<Wޱ�w�M-�%Ӭ��c��w�1�S�~Wf>I��iLo�c����r�ΰ}G%�p�A���U�(��4��;�B��(��h�T�5�a��;Y�{b��
 V��5�>PCv�hYr�Y�w~'���g��O狃��#�/��%�m�C�Z�����ښ��V�Ǘ,tM���g�3�UH1:48�|��U^�*����By�W�ni^����iߪC
���<kH�`�6��V�n�@�ߘ����1C$[M2�E�ݨ��׭��J��Uz8"*�=�x}�>t���-iԭ1y?dxk�*Ԕ�7盪3Oh���� �V�L�x5#R�dU9M,4{m��4����t��dR���L?6��'�f�5�I�`AU��B%�bz�,���������ZجJH��x����|�k�XS���N�^��u�_�����[壉9Mf=Y�"=W����D�3"!��D\[>�J{U�o���4�
S�'�z�W���Z_s۸��@��JNd��L���ue]���J��͍"!	
�(Yw����H���Ҝl�v�����.�F.��
�C���6]
6^��劝�n��M�y�3Zh�V��Ȓ��c��
���-�eV�&,ՙ`�q���(��ٖq����#붹`�L��mn�K�b3���T�
�vu9�������Erpp���{����Z�
s�1��L&WE.VB9�V$��X��%s��Fp2)'Oq�Er$����'V����\����Z��,�H��}	���gK'�oՂ�D*��f�`�BV*˅�H�3[�T�e�.n��u�L]iҒ*�K������N�hR�I��h2���E�X&���*9�m��L؄�K��6�9L<@l�4�c��(ld�޴�A����+-�s��c�fK�e��I��n���+�8�5�LiP/|Z�����x؜���<5D'm��7h/�u��Ñ�A0l�����ڒ{�vh?����������J�ɵ�J}����L�R�"��e�!e4�~��A�9pu��.a7*�6�+9��J��GfN�96ڋ�>Q�r��h� i
W�쀎5n#�X��))͹���LX�P^1�n�@_+�-���6@���)��@xe��XC���.]u~�P8"
�XQ`1��;���:ؠ�ͅȑ8���Β�2�`#�F��8[�Ғ�U��(�V[���KEy'�
BP�vB�s���k�u�ԙ.�X�g���V$9��`DC��9A�b5:�r�8HM�u8�K9���/�
@� ���P�c������B�����ۏ!L���6"u\-�:�V\y�T�>rM�!I[SQ���$�P*����]Z(LzQ<�};U	�2�$�'
�i��N\���ʓ8�ߵ5�$�QEv稡��\��p�BD箟F�����1�E�H��=;�
';��kQ�j��O��N���`�.cZ�]������������q�����B�̃9���C�!��{�|���I�Շ��(L�����&.Z�|�>�aǮ��@������1,��N�>�p%Wo��k�!}^Y�*�z�j���u�4ђLo���]N/o��O/�'x�7''�}QW�`��N��Br�o)��H~/�$��e�̨�g�/X��T�<�o��
�S�Z�,��-�o}��������w���w7Wx���?~��0�ibz�O!�;{���s+\��DjDf\{���UE��A���R���A^�8�$�%�,�!��K("�BĊ�A�Ԡ�۪8�QAį��p�+8�[v2��8("� >���_YV�S���q*2���FHRտv�w�@������*��n�upB).�sh X]�A�Z�
1 �J���7��ֹ�ꑁ!`�5�OK6�X/�KL	+�b0������[�O01���NJ�sY1�+@��Fx��Zo�[��b2xº��@9�B�%*a/s�֞��-�q��	�R�n�WE	@�[�^�L2i����m��tG3�0E��:��]m�6%�ï��W�änxP����+B���k����`��M���z��@r�=Ġ,2��qU2��`U���f��@9ʖ���Q��J�(���=k/-
-U	Ov����L�d�x�2ϫePp�/���-�@{J�R���$�(��>���Z@��am��X�(<��4hj�PY�jZ?����-l���� [�6��	K����ǠBLK^BY��6t��������څ����%T*��Ư
H�Uך��J6z�S�-�Prو��h$�Ya`�4
�w�-~�P����+S��VZ���� ;�
��Z5��Lo>����M�o���p�����o����P/��7'-�א�~W���-�{������A���8Z���sJ��pN"�@�{fa)Tڅ������Њ^ks��?�{?pXF�J�a>�j�8԰�Kr I?��=�Q��ГԹ���@+�G
�n#l��t�9����Y����V�o�����DI��YYp�MEi2�
�Lm�
��5<58���ړ*
S=���a'���;��իM�@��hX��4�<�*%�k���
���5�t����v
Im|��W��PF�������3��p�>_�i[�����l�/��y6.�=^��F�?�)|�.$j�-ls��[��P�c�?TR:��m�?π=��+���ԟ���;�3��\U[��f�7�^Ф�d��җ#���?��OS�]q���rY��j�Q轃�/CW��0��|�Q*�p�#�n�J��6v��0fp�.�^5;$�)^tș̥��8D�:bԭ.椆�n�v$�^��'��'�;��d0�!F$A_��]�f�g�Wq��D)��F_��(J�b)v�Q�ꎍF��Hׇ���(t,��G���=KO�H�G����yo��@���Z��c�(̟aZ?4>�.|�9YϾ$�q&^�^d�ؠx|���
,�VWLQ��"�9����$���h3Y䅑�����H�l��Ϙo+�+J�Tz��X�kѩ���i�^~��@2�c���W�Z
��@�kR헞>ǀ^�����X�x�-�>S���sdk�AT��5�Aі��~���xR�{��Y�(���}���4������Ho{sڱ�~��W\ߒ���)��	��֚<D�K��8�\qA�O�7'q���7)�A/�����ؿs����;��
�A��\�L����P���I@�f�DZl��]�>���N�p��f�bw��	P�	c[��oNƆ��]ңT��Fv�cj�U���m0��K���=�@��z�%
�
ֹ/�!"\��-�)o7�ؙ��_����imh�//T��)�g��<�n�[C��˻��d:���\M�!5�&N�z�;�{��y�� ���������	-B&�c��{�B�n�^ I�rU�x�����>�Cpz��_�C`//13�S���=��U�@6�����a{e���p��Wta�oD!x�s`��hĚI�=5m��v<6 �3�Wg�e���k�	���S4����I[?���گ�`�>I�����5{K׷QWG�X{;��Y���g���y„���}���E0&����1R�J�a�|B��z�!@���a�F-]��r�8#��,��]��)�8�u��%L�Rc��N�����C��]w��4�;I��k�m�����u���7��o�k\G?A�]�R�SF�v\��'�ר
�ߥ񘠶]m$���ㅿ�hu!т�{w ��Kb&3�^(xY�o�y#�ZC�����vP��̏�x
��@͂e�s��|����[�_����uv��u�G<G�?C|FGf��'	`�P^o�q�!��2@$w��e��_�)�Ά��_������n�0�_��Z.}�I��u�ݫ��Pi�*���xx��N��N 5�Mb�߿�E���u55��x��x�T�!��)>'��K(�?�7Ea�6��i��ď-�yY������C�ȵbb���Hu�����AE]��Z�m����n�0Y.�/T�U^�jM~�
�>Ї$�O��.m�n�8d�6�6$��8:�ޡ���7��t��X���k��Pו�2���Ž�42����ͧ�FmR@������,���#��;P�[n�+���)j@=صc�����7n	O7s�)�S3�c'UqI�A��3����˶+q���m���Wba�=*��j�|��:�`-̒�$�t�!��WQj������\Ko�6�+�Ik[�iУ�M�$�/yEǂ��Bڵ�����y�R����=�V���p�|C�s�t�j�B�)c���p;�e�T5}�`&�o;p~F�f�їHĩz?�G��ZS�C��g:�)�4��˧`���6
9���a^|�NB�X� ��ic.{��`@��f�:c`�Or��� y^j3.�T�ؤ��1��Q-��J(��3	f��>y�ۂX��g�Ҡ��h����-�
�^SnqD��A�9,7��s�T#0OU�	p>����Bp)�8�8�Y����z��mԍx��ޖ�E0�<��-�Oʧ�M<Fb������S#=�"^�����}r�ʟ�3��i������El�h���D�¢5�94��pƌ�0R�tzI`)���=��(��A~99DƑ
N����!�,~G��6�9D�]P-3o��㦝��5��:�zcx�7�^�u��::�"^��	oݡ��ۍq��Frl/������j肁D9"��"�G�7�a01O9{�g�a�����b�$J��f�:��Vebcm���S�u�C֏_����2%|Ժ]'Ô�{}H��n�\���0e�)#
����,��(%���$�ܷ9o|�j��Fa���n5X�_��({:桝�@�����ρP�<�!�/�0�~�焓u�%��]06�vz��V�>��V/�t�����JR-�;�‘V5,�9��a3��v}vK-�0��	&�u?6/v*H���r\„8.n�����P����&��i^ޢ�ނ���us`	��4yoh���L��	l�����F%�
��͕�^O��g���H��"!l��K� X
5�_W�H��O!iҺP�?��� ���/��Cn�^�r`�$�`]�W��c��xmm6��v���|cQ���H�S��̈́`[js�L��,���;�6��J
`uolV��/�HcL˱�K(_��SJ!�ѧ���&�~Pr���ӏM��/$,"�Xc��������d�-�)�vlK��NF�5�?�2��]q1��}���4_��
_䗝�X�#O�rZ�<�P�]����J.�j#��P}��9`�+{:a�ӛƛ3��>���
!�|t$�8�z�=ÿ��J��
�N��$W
��(裎�r���a8�����A>P*�U����D��șQ��`r����$��X&�2
:,��t5�r�఍>U	�H၅L��TOa�j�ھ�(��wj��(��#�(�<3�a�9wb�Q��W���������[bzZ{?���5�I�Ʈd�!_q�
[��R���C=���'֛(K��>?w�6`���C(T6	�/ˇ�)�1�U�ڨ,���V�>݀L|O3�)�?7��_Ukq���XD��$��:d�Dj����4	g<�Ѓ��k
�Q��=�a�$~��?&���];c���-���3s`eE���-�X*�t
�6��#c��[�6�7u��ӣ�k��km�����{iݼ�R���?�k
����>���XT�C�M �JA�0�i�	�>�ƕH�@Dt�$��
��FP�%Ε�t�<LPWHfgR�T�D���3�B���q���^���f5o��b������?�I1�9��?f�u��haj�&�ݟ�:k�k�G��:�/��Y}�$ip�
�6�?E��xr�dsi����s�zYm�,����_��X��	�g�R��t�u��%���*vOO�.#�o�ˏu�<���ڙ���_<Ac$�!�ε`�
�	E���r��?)�:m2�����^#���mLj
��k@���3P�gj�)�k��"Vb���7��n�t���|>���[ X��ڟ��t:m����1�1�L�A�#���G���i~`��FEZ�Nީ�>>��
x���/���43jf�Bu�H�h�zS�qwL7��3��2��i���5�U�X�Aw����N=�����îȿ�\MO�@��+��@�G�\�$F�U�ڈ��$���|��l�
!x�@�S��ξ�}�SgO�A�M����j�~e�oWS^����7ӍI��r��c�l��:�+$̭n�Ђ�ƥ�m?iK�5��-_�
�}$hp�w���t�d����r���-�#��#!7,+����01Wn[���p�nm^�6���ƪm��Z���!$�/FZ��p���Ы�ν�i�ۢ�n��b@�g��HA���}U{���di,�X����\N�g�Znz5&fГL�h��	�~�멑�U�`��'�˔�F�6�۞�=�|�#GR~I�D3'j��Dꓣ1�):*b�OO������x�^\��4���&	�<H#}d���q�#6�� ?6]�������F[�0,4>�I�-�d�V�]����V�x1�~���?�[���t��,`�+&��1�Up�|��vֽ�.��ԫe�H�^1��k�gc~���`�	�"Qmu�&�\Q<�H��i��Ƣ�y�u�p/J�k`bS�|���di\�T����9�(�$M�٠��<��>a�"�:�͂��|�RaÄ�z��V�1g��9�A��N����{~a�$2\1]��YKs�8��W��HJ����V�S�J�֞�Vmm� 9�.J�����x��<j�C"�@w���'OOٕl�]�,5��S��O?��J���N��~�.{]�Ne첮mT�JtkQd��S��L.�.+Ŕ�\�\���R�E׈�ͷ��7��Sz[VW�h�.�f9o�\ ��웂U
�����͇���j��F�/_��K���v	�V+��2|�t�s]�E��Y�BZH����>���]ȼW,/y��	S��J4�vL��9��"�^&ְ��8E�Z��n/
�e
�j��2�f�PZ4U�dZ
	��=�ER��sP����9��Y%�&�� Dj;يNo�{�Po��,�U#�W.A��{|�ښ�V���)-[:��%7fXh��*9ht\�@��˄`�`+�����Q��+a��[g��[�;!𶧣Q�e�XT����g_�gl�7�ɔ=�#X1`~�	���5,�{G��u.X�k���D){����ٽ�w��/�3�.	1�d����쵻2З�z�
؏2��Hk��g,�2l��h��
����t���O�P�̾?�����|����4���K�e�p>�'�Ln���+����3J�.��9@k2PtP6�,>s�����s{���v����W�{8�����^���ؤ�{�k���X���ތ�!���!�P��£u�bg��� y@1���-�*�Ŏ�V?:�w-��^�#����ݭ�f��t�����&6��;�Jg�%�aؓޤ|�?��
^bp�{��s�G����b�7�r�j�ߣ������9���ۀ���x�<:a�\��K!M(3K���=C�	n���!�(��d�� ��rӦ����\��	+
O1�,qEr%�@ƒY�v��!�'�a�γA&��>���-� ��v.yW0"H��K��ad�`���Р�FA�@�NJ�2�d�����䓘��4�x[��Sƕ#�`e8 ��!��,�E�B�!��2�J�@~�<vJvn�ZWm}�>ʙB��*���hc��W��%)+o-�E��W�J��p9sk����������ϷB������Ȃc��Jw��~%�ɚ]��g���WH��@�-��k�xO�v��N[����-A���A�2Q)N+�bD+<�~L�uq�$���	b�'᡽��6�G�L=�.y��:1(��6!ǔR:p�����\��GC5��'^�b)�N��?��D����iz�ОE��fH�4DF�����AU��y�w�)#�o|�<���\b�IDt�n��4����y9*�9���V*�DOgѓ# �O�l�k%Ҵ�z�J
���}G��%.��sQ�v-.M���eg�[01�����������ӘQhŠ�q�D��o�u�p~sw���ٗUQ@Z����_g
��?����`��]�|i����hhX�Z{H;�b��k�5����7r�+rř��D,3�sī��.	���VSC�v��Ye���)�㕒y��Ti+侕���PǛ
k��"��ݶ΋��(��u��@��z
�;HS�st�D|+��_�!PYoi�I�T	�ZJ���cgy��P;�fБ�ZG+�ܩ̐vQ+�ҏ�����p���D#ܵ�����t���E���F���rj3���-o�~��;�����{�V��@d�@�-�Z卋�4H~�@eP�<iQ��0�l���I��.�!�L��!������(dD@�u����9uMEA�{o�0�1��2���K������錚5kq�cn�g�J=Ȋ"4�3�6
=�F[rۥ��U�22C�F��i�a�m�
u�5,�bS��c0���>z�@�Q���}���3���i��	lG�H�g��О��w@Ō;f�����
_n$�㬴���������{e]Tՙ��뺶���o�Y�-E)�D��R;�r�]�M֕���Aյ�k�zw�JG)!��&�ؠ|�Df~����v���݃fՔ��֒��]t�Ui76���EޯLk"�<�.�e���`�L�"q]Gm������E���Đr	����8V@�����k��ߛ�����l��o�j�$M
+����=�@�8\P�Ax��,�qkM;���O3��
�5'Ϳ�����ի�f�J���-	���CDլ��x0��8qle6�@35
{�����19`]�t|6����-�
C�7�+bZJ���v��]�ax���Z�,��M�>���f�i3ڵX�֓`��������N�~�&�%������L�	hU���CJح�vIf��7��11P���KKi��g��uO��,�\c���g���.�@et��=X���?�7���sQ#�i��G�����m��N���
�(�Cߚ�-�g�y�Q�m�&��^���,������lxD߶h�G����'v�5���m�ף�����9.��e4��*9i�V�
�@�F�9��K�W��C������s��Í��L�1GP��g�û#S���ޜ38<�Ȥ��:���aTx,V��Ñ*�Sv���#/���a�u�f5�Y�`'[�*�j� 8� ��Z�o��A���K�����^6���/4��-�"��q�[�TIʎ��������c��C`Y��p�y��1��Z��s͂x�^��x�n�.�R,�b�.
=R��"˘Y��r	I8��?01cz�*�D!c`�H���X�䐰�E���X�u,Kc�H��fq����L<a)����zs�fi�^K�w�J8e���t$�A���� �a��C0ďE:<b���:<��c��C�C,���p��w�v�EHg���C�Sē-���W�о�!]��7���+�m�4p��`���,R
�k���e(>OmlHo�A��̊&�X�D�?U��g�ќ&��2�,�_p�9��EB5��ߛ%���a�|�Z�u���tdk��H�a)�4[3�7�	j�^�*�T�Rc#L�e��>^,�����n�(-�,�Bd�6�/��V��D>�2V�˅lA�yꗠ�=����
jE���E���pP�*�Ѣ�܆�Ѷqk�1��A�nM��YP�"ʲu͏ؕ���Ў�x��B�f�wIb5D����̪ZF�"OP��b�@WV�7H}���,��9�u�#��`T�m:c��a4��/�J�\kX�`ToTj�$��ga���Da(a���S�Ȣ5$�Qc13x|@$	U,��Gl]?}�4�;�_و��[��o�>��Q2A"��)~�-�	Mxi,������؝-D"���Yc��2���9���'bE~��A`��%�Uu�4�$��Gl�1�8'����=I�P�{��(�9��Կ�z��Q�p'	>#I.r�N��0�y&�4+�dr$��&��c�B��)��Ю��z,��i�:l`B�=A�[ش�G��"IU�xn��r�
D�5!��6�C-��-���\���#3�0���L"��I^����xۄE�6���!�*Н�����q��!��y[���ۋ�W�Y�-���Lw�I��΍����H�
殔G�e0��~��Y}��[A�$
ZȎ^kH�y�����c�>pBՄ�7"�”���
-�s�n['�c�Bk�Y�����Y��L��ƅ#\�,WQ��:^��.5�r.X�LH��;&�r;���E���(���:K�>���b���c��Sv�#�ٖ��7��F���.���74w_�Tצ�VC%Jzd��l@A?�V���0�Dr9:u-êBd�A����eT&p�����U�WvY����+g=E:�d9f+���a�Gx�+��TD2�� 
�K@��	=hj��>Y�%Q��gQ��7o��� ��"2���Z��m�_S��f��R��hk,�i6S@���<\�< 	�U���6�����˚��ü�`���O�~]��"���5����&���ϝT`}�t��"/��Q�Fd�*�oɡ�y�a#�L��S�A�ʀ���↻��c"wʳ��d��B���G���w&� bkn"���軯�^#\�j�"�0�8t#3��U=�{O��;@�k���q��w�e�>4��H։$�f����'��(���)&��qW������
z;D�!-��{n��U�Bn�|E��t^k�`�r��RT=��vbTn�
-8���¯�(X���f�j�\%�=j�]&���ئ���1�&IE\j6:�F޴�r�xi��R;�c��%p�a���
L�}���li��Eqg/�ܫE�Q0�S*�#Tk��U+��y��{㐮A��C�L(�FR>D���vbK�i�B�(E���5�l�����c��}���e��>1��Nuh^�8ʱ&z��Tn��-_�3����PR��R�F(U��lޚ*x���w;�qh�"�����8�n�Tm�o��I�ۑ��C[��*��Eyc]1Y�u#�x�z6�f���毶tdl[/���A�/̬�t��~�\�N����W�J�DX�Cg����[�2�Z���f�o�/'�V𧨭"��t���[�FO���D�v-#���B"H�H���ûr�Kϩ�&�۪�k͋$�&ݦ�ϑ!H����+{,�ʏf��S���_޸��MI�A^�S���-m�$�|ǫ�5+[����nY�ܵ=�qpsΨT�anSF��԰��4����|:ݺȟS�ʰ8Ʈ��똣���\c�aLÏcw����ݝ�&�4V�ww��SQ�Ҭ{��-���bt��x�K�vs�^�۲�y,<d1	�Z�/�f$�7�+}�ϓ���Ԫ�I_cNOm�����k;�
�v/F����"�XH�7�m�¦)���uʦh�ںã� *ѻ��9��5�6��|:�\m��bS_6|�v0�t�G'~JfG��o>x���N�K�ϑ
6~�V�^�_M�u(�#[ h�c�}_��A��n
X��%�����V��Ph�����`�wv�Ļ�6��a��A=<ژ�bX�MhTAC�r�R���>�
V�.n�Ӝn�r�B�8En��96��+L�����u�wN�6�r;�$ާ4�3�ދr.�.z�n�n%���ޔu���CJEr���*����F|�|_����v{�`�������҉Ԉ��&�OK���YF��H���%��\W.�4~�B�%/�NR���O�?rq��ݟ�x?r1y�I�f�Kjc3fW��Ge(��~i�?��h`<���_��2�$��WKo7��W�)+���-z�!�� A�8��ERZܥ@r�
��{��}H��݃���g�����L�FmvZ������(8�Z��.a^�Bi��\J�B47\o9��&�j8��B0�֔U���Ֆ�3X����;�A
�+T��@IK�,�T]1�s��x���{X	��3�s�W����"��U]Q+T5�������2�'�\�˥�׵���xͼ�xu4��a^��LPb��:I(��F|�\�W���B�?���5���=��%��`�GV+)F����!И��X���(Dh���%'Y6�!P]S�4�xf��4ʃ��o��q�cnB'�l6���}|�+�iD��,.�	"S�g�A+J��>|�C�$s@i��WXV���+v���h�%�7~Kn���h �|��Uv������'���4�|+q�c�n�[N���M�`���c�]��Z�`��i����?=�Q��ȕ<i�H9r=�)z�%��s'��	c�

��[�y�l
8����1̈����%qbƄ2a��wh�n{����MJx���tw+��,���;��
)�}���FQ��ʇ\ƃ�(��{��3��sD�J�He��UO2'E��i슒����*�R�ЃԱ����dH�#ل�,�q��A0z=G0�P���6[o+�X��i�m��>T�v�q�鎚�;������\Kc���ѻ�lWO�
'V�r��&6X K��&<���cK�S�H��xO,������ԒK�<Fhr��,i���Wd:RKli\t}ݐ�*p�3�d/,/
<[�������4�l�r�$T
S��JY��u��q,8Ӷ������N��5����cP�r�p��Y�z���m=
��xt݀;�x~谞۩yN�i��q�wmv��-Pa�����\}� fnQ~Y[�f�N�����q��؛�n��s�ٿ+�d����;o�[����<�>��Q���X�A���~������MUp{�	�澅ݐ�zp<�>��$K�;��� V�i#
VS��9��[U.p�N�8Ǖ�2)S�v���8}F۬�Dϝ��Fս]����:�^�CuS!�C�S�����NP KU�x2�&w
�H�=�Z��Ϙ�WR��	k��^-I�37Vh7�T�m/����Y�?�3�#<��V���xBQT�i�qg�i��l8y
�gféX	ڞ��C���r��m/M�l�;ǧh���Ub1�[��@�s��?�SUK���������HT~0U!��u
?<��������1ƫ!�Z7����F�Z���R10������&��G�`�ݸ��Dw����
z7G��/�;�����Z���KŰ\��W=��j�Gj��ou���s��µ+�^����h�sYwh�
Ւ�_x����C8��<`f:t;¦=��2�7����ko��{~�����*{[��w����ċK��p0h���Ȓ+RɺY����!��8�n�6Xd#rf8Λ<:"�b�.�|!I/9$��}���..�bɫ%TrQ�"&�,#
P��	V޳4>8:"�
F��.�(�2a$)RF�s^ܳ2g)��	%g7�o�\g�d<a9���$�9�2�4+�<%<�qF./������I�l�s֋�ϊ�)�Y1Q�̪<���{��񀐣7o�7yC~L�\ȲJdQ��#�m���\��h�ry
Lk
Dm&n�'�4_'
HZ$��}��x�Yyn�N<��z>�",c8Af b�W���ɂ�EQe)�8a���P�J�Sb���x�K!�[�2��#���9���%�ϼʲx��1<-hj��YQ2�J֬۷E��x��%a���?��<MY*�=/*1�s�g����\���J�8-���|��P�=�|�x3�	�#�%���C�GE�t����K���2��}���%Y!�Y%%�������	�ǟ*L��Z~^,{�h������2I��@m��P�0C�14�*�a�aiam�W�StT�����	���ՌNYfБ�ƣ��'����%��~9./�1"W�?���ć����.x�kt�m�ZNAY��.y��Ml�/��m�ا��,��w�OVY�tuI�9xٙq�6Y��}�/��������r49��������w�'���	�L!�+f�	��ׄ(?M��¤�VO�6
�qR2pFYzQ���8h=�Z�(Ď��u��� M��=P��B2�) ����:�G�E>�X?��9��S��=�<tYβt����{=��j��t��f��:|�F��Y�V�p7;�w��;lV�vmUMF-h��@ʒ�CNPBH.#�c�C82k
�k,(DԜ�)����E��O&���J�~$/�w��R¨%��-�P�x����)y��nG�=�٨���h���d[l-�ǁ&v�����$�i�`�@�x�h�r�C�tW��e|)�����S�0����[��f;0`�Tfz6�lj��h����Nq��Q�;0�<
E�ҳz1�{R'��Z��+�j�(���E��}��X��q�.�/a:�brW:�ι��'[���)�J���O&��ZOt�扬�ث^GLK#D����\��)؄��H4���DBW���`1�!�ȧ��_ȷߒo�'��f,�4I�DͲ'BS��k��,VtNu�e������Q��K|S�DG�YU�8�d\���ej�Pc�<�H����T��	#}��Z��K{l�4��[�7a5�阚��3��3�G���F�:MUF��FN��&N9���D�
jҨI���k��dK(7z�>3HsnATE%{
,X���z�o�8�w[���k�m�4�<��gvo�'-U��ל�c{�d�A��u�F!��G�g>��*�	>��w�
��Qay<v�Jx�Z�v��ȴ�I�RNlQ���g�ˊ'��ے’	A�̟���tC�����=�~�fQ<��eG���(�a�_s���;�=9!�߸\�b�ދ �����SU���`?�e��Co�D����?�^a'�:�a�3�T�85HaRe�m��97HK-��+f��Ӻl�%]{43���fb��X��D�`0z�Q�^!o�!��LVeN��)ywRCllf��#WŇ-m�k�y߰)��}p�D῿Z
q��\��w�5aD��]F�P����=0ڙ�ZB��*�\�f�6�
5Q%BI������tߛ�:�NB���g#"�<`PO�^~�m�ð�;��
7ڰgGe�v���$�-Y�
I�&{���Fm��sl�ߘm���g0�5�ܣnT��W�5L�"��.�:��4���X��o����_�!�1�����E\���>��A�\ɲbu��ށO�2I����8�|f�o�2�^݁����i
�L
��R�uf�aI~���A���h��t�9�ځϽ�)��HӺ⍻`�:��M��P�s�u:/��M�ԝ?	���u�浶L�j��ar��tU"���_�~�o�j�
��9��H Կ�%�oU���Ӓ����|D�SL4���k�0u��w���93=�T��_��p��;�{WEy�`��u�Gtd�2��X]��q��>� �&7�Ľ1�v6�"#V��ۊX�mH3�v'���9,Xʛ�kV趈o}-�=T��D���A�����b.����qg���<���V�\��:�ܩ.�_���T��ܣ@�m��vx-�2�"�&�$�|0��t�����շ�CJn{D�������rba �BN����"]o����m�W���(��%�T�%��W�i�3�>E-�=�`�R{%�,�y�RE�LdU�1���p�vT����D}��'�!�0M��fP��k�3��������:V�S%��-7�~�T;Gẁ�>���l���J/����ֱ��JP+�F�b�h��)ԁŝy�w�#?B�d�\��{G7�mڏ��Ŝ]�*��`煑z
�7T�sP�~���xt{�L��drt���˓x'?�Oaj��k��:k7|��3��R�5L�����}��i���Fц��I}�[$q_
}Y���W���x�^�4�	��S"�Ϫx��dP`��W����+�R�"P�l]+�����3�8�1�z�n_ڪh�\�^ ��W;�l;	��&���I'���^����,�L�ٞ�w�9���(	A��M���P�0�'��o���vd���l�ZV�;\(:���	��s$����K�'�rw��{A��
I5��Ӭ���xD����rL�nA�B�5���!��yqxl2!b�U~���K���b�r��m�i�/x
e[����H�~�%��"�O8S>�1uQ-�<�|X��蟻�q��N���{D�ιC�|�\�_6N>��œ�z��ֆ����rլ��[�����`;|�NI�8�ϱ��g�|�jw��ޗ�{g��r���1��WKOI��WT�6�qXi/ "X@�Hd9�*G�̔=-�ݳ�=�z���VuO��Al�ϣ��_}U3Å.�FNs�t�|::���"7z&��W.��&p^�-�h�%����z.���L����n�z�FaK����u���)*Rs�p�
Ȗ&�RHE���\\�q{Y`2����g|�V�pi��e��_�CZkɎ+ge!'K������_!#at@ft���"���Ƞ���N����(����Q�
��,�C��Xo�@1G���x��$ÉT8ܣ�J���R��Z
G�4�p�L��DP�H��������}J'�K,p*z}������0�y!���WM�b	3��e!��Y��D�*Q�{��Y*O42p��X:>o8:�S�cu���QB=Y��]�q��Gѕˆ<}Ք�+V_z'�-_$��yL%��2
�����5|�)lEc��'�=&—	LDa� �៭,�U�Y!#��f��G���f��I)+��;��9A��z��]�N���B�
���+��e�����ÅAB
A�[dX�2ͩ}�T�3_'�]�V�
OV��^ġ������iXŗ+_��4Cl�M���*p�
>l���li�u�d
�V֙*u��ɃFpT����b��j�@~aT��Ԝ�)#��`N�&�c�:��U�5&�[�S�#��ҪA�*v%Z���*i,*L�Za���`d�\�XHsI����l[s�w�_Y&��D��%�|@��J���h�����`�	܌�!I,%U&S�;�����1d�#��e�V�;�:+��{�X7����d1w�N��ɠ�c�D��v�k��]���3w��l2^7F�	e۷�o?j���hѬA8��v12�eɎu	���H`4:���#[Ncz��t�q�.�>"�-!��y�q-�F���0G��T+�n ]pr��c��[H�C&���p�����#/�孭�W�ޅu�閳��9!�������6;J
=��p\8h�l�sR�C{�cc���u���~����p�
�~W&[�����Ank궵~��Z�Ha�Zr:���v�i��3"��/s�ie��=�I�l���<�tŲ]k^4�gE��J�h�
!�3�F�u<x���tM��ۋ��A sҟ��z�nfPUf~?j�0�V>=�v9+����fE���P�2o��QKYm�l�,:>�V�҄�?ٱ�Į��f�lrY[�����zl@�f�c>:܃��k�.�;��߁�z�<yA�t����GF'5���:m��hg#�젉-��;�ɋ����~2����i������M^�}3�|��!5���wK�^���wo���C�x�C�^��t���B��}��X�r�6}�Wl'���2}��$��t2mӌ�<e<�\JHH@@�K��]�W]l7M5�"wv��p��K-�3/�G����L�\9�;Sڄ0�2pB4Է��������	F:F�U�@?����&K���#c�B&b��fg��8�0AFJU!��#���çKHE�a��Y$�G��9i�4�{�D>W��}d�$���̆���Ǔ�,u&��73�2a~3�w*.̕Z������Ňc=,�0e���t�V���:L0��,��B�V(��0<<��pc�6��<��a�E����	1H��(i+��^\8���׀wQ>�p����9qw�#h�Ww��u�n@^���v4;�Q���#�e?�Fȩ�D-�+Mk�BY��Vd�����ey';��d�#�+,��Y�˽�?х�(�E�~S��+�}�6�h;n��JH[rA~c����[�=���z#8}�޻����I]��3�s�x8,��I�ơ��d�4V�U�L�P���#�2�:Z����ث�_�?�fH�8��ק�6�\�[�	�'Je�M51�J�C=�Qv�
��Qfp��KJ=�9�S��`�}��fYd٩{��X��'�����N��f�P R���=�/���B�yCo�`�B�ڽZ��ItH5�2�gA]�t�&��wӓ[4��q&�k��SH��\�hq��x�e�wdtc��;�A{1��Z�����Ђ�����=��qɶ��h}��]��j�#m���\z�#8�w�3�Q�4<f(�v�q���g�⦭��C]��Hl$��T	ꐅ�:�-������d����(�l֐R��̪v�]|W��~c�T�9�/0��i��i����k��g�L|(�ɭ��X�7�Ƶ����xW����Ej�
cQp���d���	�{]����p��ޢ�6�e�0?T(��E�F�Z3�a;����v��<�Q��F�

U兰��hE�X9k��QXc����"��^�y�W5B�~X��X�<�We~�0�c�n\&B �"�/�r��Sx�\�Y���� q�b�l�A�.i�Z�|���HM@�{��R�h��5�Z
cYͣL��H�3�q������P������_�x���/Q{E2�lZ�����ے~�ˇ�n�$��]��7��P&�Y*����z�@&�"��$b���(I���7�ܓI�	����;��-��*���#�+�w�Q�ާ�/>r┓<���,쁩�x�A	F�-=�#5�&^i{���0��,�[��]�v�8���ʞ��}[o~�V���n7-!�y���ɦ^�Ng�]�e����f֙�vυN��D߁𩱣�'v�����u���tÜ�u��l����z�>��m䅿��;7A���(���r���ѣT�I��S���
��A�SLbE^�F�>�&b��J�8�(�)�£�#)�}wf"��3��Y���(�Ҵ�I'i�/d[�:A���Ҧ
ɥMe�6>�6e�em��	.UK�<���m�킇��!��G����б�O}}ߚ�~N�4����j:�E��TO�����_�ۇ/�J�_"�;�X�W7�ޯT��I��p�\�i���؋[��X[S�~�W4<X�V'o�Mr�S��R)j�;�&�f�ff!:F�=�s�+�s���tO�׷o��NU��b��0�����k�k�6��Im�J�N��B���x���Z�]F�:琫��\�;�%/`��^�}g��P��K�kf!g�4-U-�s�x~:����R�<���uV�|:�����`Y��
%���m���K�/�#i��s�4���^��$[q
F�Uɭ����[�K�5y�K��ݳ
мZs��Y�^�y�߮4Y{�50�f�T�[��A!X�V^���Fm跪6�X xJ�=�B��5��{�2����q�=9¿��o��n߶f�VV�m�����"�_���4s���I��ZS���{��h����^��/g�?eQ�/n�o�J��.=���c���G���L�_�~s���4|�׷�[�7{��`�!_��x �nn0�
&-��b�����41I_�d\�6��Sv^�@��N9a����9K�������ֲ��u�	�|�3ٓx
s��>/	�X^|�M;IL����x�a-���?�0-�L���N�n�/N�	�wP*(���TT�k����U��-�c�F�c"�����9��v.#�91�(�ˤã���Uͥ��M����*p)���>��j��^���zג�C�N�f�w�ş���u��Is3��/��3q����y�e�"ثO5��\�֜e�-�Z��s��aks�uX�4���&1���Qs�`��]�-�A&5��lT��E��"��������z����լ�E��g�����9�,�nA'�g_�x7�|;�{!uO��MU[^\�/��'�p~�:*��(
.�V��}��z����?��k|o�h��-Ç���ė/�m�C����f��d�ȶ�
���� ��w?a�
�1W8r[n�X�=����՜�YP�����
a*{�e`���	�����/�F,D)�_�uM���meB�>껽��W���&n2��1&W��_b��4ܻ�rV�pÿ��B�Èe��ܱz;Ċr� ������;x�?�@�>���m(IZĐ������'����^v�_��v�:&�4�^����Ϩ
g>�6
$��oW���6@��Um��y���]�k3!Jҏ��3�jfs,JD&��\���] �,b��5�%8�ha�E	WĔC�l�{�*���O�FL0?V�,3�2X�� ���[5li�"�����I���´.�I��͝4If�L&n�貟��4>-�i�7 ��Q�fB.�6�Z�*�w����l�Fm-0������0��	F��kݜ��f{�.Yצ	�^���gE�g�ۢ=����P�Y���
g8��u�Ax��Dr���=��o*��i�2��CM=:p�N3O�h]x�fD��a�����4�!��8�d·ik�:�#X'%M}?ѕ3���@3�\D�.܉I�K.��!.�J�|�LY�D$8_R�;֯Y!p&�O������b8&i��R.��C��(ʣa��&=8�G4w>�F{c�r�47��pp�K��-}�5-r�p�!��;l�R;p7�Q�KH8�~��O�P*U��H�Z��zɌm����6	:߂�#� �>-����N��V��}zݡ�M2�|P.À��C�Y�*��J��g��P0���?R�aBʺ,���)_$.��ᰏ,���k�}��/�W�
z�0.�$O,p2�X4fB�:�ԥ���@�_���F�(�\�5�}��K�B[Cف���6�qX�q�'(�(�swMӀ��E/�<AЁ�	����
�]��m�Q��v=�i���J�/�|�8�9����]�
�dxƓmMɳpN�'�oj��x��Z��9v��~H��!�l��Z��쎕��h� N����t�od��u���z�>g:z"��������ئ1�򋞾o]�ظ��Jgʍ�H��bv��Q6�m�a��.qҲ��}�@Y�-��i�	����ī��@e�h�L$��1��ͲEY�%�?�H �GM �
��S����d�>��n��P��*���sK�7�=C����e���,�ɾ@�S��?&�\�s��Ʒǭ��mJ�s�2�b��e1{���mm=�bFF�q�A�MÙJ�}�2�s),�}�_n��
<���Xn!u�dH�t�ս�MG9ZbE���н'��w��+�����)���z��������;b�;�!�z�=o����+�P�?������VM��6��+zj��d�rvR˲$����lr�v�U#K�$ú�{Z66[	�%��~ݯ[L&0W�J�Mna��O?���a�kU�Yis�M3!�4�Ѡ�a��&�f�l�
U�!U�n���V0���<6���(����B�$��!�U)3����_�Xs�I���$�5�8��ϒ�G�.ej���!z��[��[~*�1 YAN��l�Ҳ@i�gl>�J�O�ۿ��a�\>�=.��k�4cUZAQ�w���\�G[m7�l���s�2�m�3�+�>2�6�=�}Q\�I�-r'q5�jn��@�H��|�l��4�xz|�)���+�s�%�/n���V	|�T܂�f��pǖ6x�BV��u�!���jo�R��^s�>R�_�K�e��B$�E5�,�_i2�'���w`%y�q���8 i.7�T	������8#�9.��ĭ��H�`r����'������ә#�!QY�me`���ViK�1�4���B�2�
�Q-�����t#]rάei�c
y����s���:�O/8]�V�ac�0��?9���i�����@�n2����j"�����RJ ��fo9�����8Ϥ}
��C>��X�M1'u.����]h+%..�j�ř��)��>��=�-�
�ǖZN����U�gKӮA��(�N���͂�ܰt�`Y�I:�(Q�T��4L32�OV\f���gw����ḧ́i!��C��p��v�Ho^w����u�Z�SK�mWPK�"s��������j4*�]� >�=�2�j��s�;cT�v�oZ�'���7�$b˸4-��5����`K	h&��!(�ҥpqJ$�s�Gk�F�+�hFB�����(��y,�e��.�:��`#��0̏�U�'�n7n��v����
�y1�˨�9�rWq��q�3�7z�����e�k"��͌#y��v��	��Zmo�F��_�F����Tr�O���j;mФ)�z@Q+r%��Hu����������v �M�>;;;/��r6�v��պ�|��_�z���Z���ވy]�Kmb1�s�����(}��h6�%ʥ�֙��u�DR�J��Uy�t�R��	)��pyj�]�D�%���j-+��B,!-˺HEV�o^_\���J,�\�G�:�e�:]�z�Y�rIϾ�6�RW�4�:��ׅ�d��ry/�؈�$���l�YH3�����x�i&��[UT�Z&�~B�ț�AZK�ڽ-�l�)mN����oƬ�,o���.���j�*���:���e]$UV�T|>b����Ĝf#�Rld!W
JNj�WwJb�A|��W��s��X��r���L�P��i�b%r����\{��:Ƿ�#�A�!��G�p�Jm,X�S�������(�l`�VYQ�+602S�*W��i����~��4^���S�wd����\�	,v@��JD2IH�L�6����i��LPj� � �,��[8_;̢%k�8oF���0��p� ��zw��i�}��I%�V%d]鉅������eEkX��>fl+�+�����̙�+����1s"��Rˍ�||e��`e�!��OY0���!�E�v�Cr���|�0D!Ӵe�bS��sR�]�
7<��2���`G�E�*J
�X�N�\n�<;\�s�a+���:�?�y!�-����mX?�����D��uR�:�]��OŒ�;>
�]�۪�)8$���(�DΎ�Ӷ�����`k��ߋ;f���.��j\G{�q�J�k՝���.+�T81�݉�] �z�B݉��3{Է���
^�)�-��sr�;;ػ4�{`A�nBx�UU�B|^�e�dqV#G��y�\�=�@Ш�^����o�![���=���f<!mF
�dY�ܨ3��>hz&~C�()�$k�|��x~�q��ķ��(<'�@�r�
�n4��E�';}��Ej�I�s���n��/"x�jK�O�8N��`5Υ���E�P�R�E��ְ���#L��<R'ϊo3�A�g�N����:C<*&�b�
��Ҿ,�BMڲ�뺥m/!����?#	t�:�/�p��h�(�
�/�#cG-D�%ʂ���J���tZ���
����69�s�T�T��2L���V+��d�}���uY�2+<�Ŝ���
��@䄟��F�2x�T�JDb��$7[������*N֌��(.߽e"]���а�2���q�rv�*���h
�����3���E��Y��a�#��шF��$�RJn�xl��cd�Hhz`t�3���C�=H��p%'�?(1�ܠ���,��0��g��^{��Z�740��T,��qm���z&��*5���K�&}����Y8BJ+��H����H�� �e/<�*=C�
�P���9����%�厖�u;����l���N;��ݗn7�$��F7uUsy�>%ym(ڇ5���d��kag����${��X��#l�~��1�em�G��;u#'aO�4t2
~�]�YB��v��z'��A�p�����B�p�	>�,�q����o�����{���/Gz.�?\���ab��}��:v����5mfw�X�ܥx��#��P��m��qM>�t�K���4;�r��V'+�}�7,5��Vz��!DC���c6�dl0�(���|ȇ"Иy����Qp�q���Qu;%u���v��9�#��/���
z����C托,�Z�:4�,��o7��ѓiX�1�����>��X�@�d�-�MI����?0�&؋K�%���.�
�ZmJʠ,�@�KsE�,�����
m!��}��aN56�;�6B�uP�Y�	�x���n-�w�Y�]����
��.7W7� 4Zq��<E�)�Rw�M�������F�Z�ݿ=����rw���8GCA�]\��Μ}���M4�/SD��%:����1�N[8��mԭzG��!-�"kh~Ψ'(i�b�<p�O7=J9�;R.-�t��"�/$qЄ�ވ��V�Ж-?`����jx4�=�;`��t�������3
���T���ΨA�w$�ᵮ��]P���R�K�Β=�� a
��yP�W����u�ٮ�z;�qխ�HPx,ڼ~O]��?@�2Jj��h�{�1�%�b��U{����>/I� ��9`T���bU.ο�a{�t���4aJl(Hp6Z�FQ� �=߇�x2�N���7��~��m�@V/�ҡF#�@S�H��X��6��;[Dgl�GG�ք\��1��9�:��Z%��iM&��j����7�vH�o�A�x���pR�&��۠�Kf�����/�_������Ç�GsU�ə����B�EWy�v��_ʅ�B-槺�(���6�J�A�
zq��k9:-�p/��"*��i�{��Q9%Y�nfp���=���h?��ԳQ�[� FH����n�i���γ*W+D���<q�Op�[�n-����]!��w��7v�m�@�s���RCsӧ���]�v^�1x�[�3��V����<�!ZFŅ�}�/ն-�����|�
�Dn:?C81�вeP���M֖y6�
�Z��V����E�g�G�
m�/�
�'`�ڡ�tSd;!n�Z[7-���U�]K���i9��/�+e"W?M��V���09��q��m�d��-�D�zt��q}�
��l��>!��z�N���``��#z�D�yen�����o<7���ʻ7�N�+�j�n�"�O?��sC��5���Z�_~J菀ӷ����vU�	cb+��S��@�w#�K{+�L����8���� 9Z9���.�VŤb�m1�R-e���_��]�
�';�h��NIĩ�ڄ
���dw)��W��|���8�PS_R�!��;��ڴ�ﹱLMa�l�b�>r�V��C�����%�K���c�ݎ\tw��=��k���D�^��?�:�&��;�l�^�����@aA|~ ����x�L��E��|A����|@e$=qW*ݏO��['u��h[��*�7�ÎUP�ы�h~���o�����q� ��-�(��Vmo�6��_qA�Zv�۷����ˀb�
,-�!�Z:[�%R )�^��#EI�d�	�"���s�(��,���S?���G��",R%s^�p]�T*�u��ҠP��b��>k��r
Z�*F�e�@�k�E%0���r��6�!�1
R3)33K��V�	pA��7���g�F�
\q����%_ª��RxD�)EN^����H�	
�W{��~)�J@�eL\��4"�8cZ��Ο:�Τ��)�/�b9<i��X;,�_L�3A+�Dw��^�S۲��B��X
�T�F���������/�2��2C&�.8g!�C�ZP*a+�i��N���c���e�������5]=��Ue��Se�DuB����� ����`�<���
�� ��0�l<v`nc�e���r�j�4�Y#�w��)�����!Y�̌�
vc���9vb[�|յr��
�)_�
�2����R!�oX���Q����A�6�O%wp���ز���7�t=����x����ߨ�5UC�jXV��%�%��Xg#~X^0ѷ�Z:��f(��cےH!�P�
r��]ߐ��
)&�SȘX�lM}ID[���j�s���?��꿇��),fmXؾ?E]�a�2e��M�l��KF��W�P6�����kE*��m���n]�
{c��BS*qԈ�Xv�{:�i�"���|L�a�-�6��ׯ��ϻO�@'x,��Շi�݈�|�QiXurY��+��0?�o�2�ým�ʗU��K���5G��U��e�n�y�x�y������yhJ�.��~}�
ƶ�k��t
��Ù��S��K@�I=6)�8�s☟��^ᗂT����.^<C5|�z�dv�*,��Bf�q��pr��'���օ�^�`1�o�U�b���[¶�j�D�7фD�&m8��,�
�i�g�d��Όv��2��}���S��O'��굩�2�,�_�Z��2�Թ�����	�"a�����#x����"56+'�j����Kks6�.�����%���r�6��_��D���i��M,;�҉���t:��L$$�A˪��s�x������#�s�NN�D,ג�NJ�C��~&w1#�X��)y_�X�< h��H�3������|��b��\2d$#�^<0����ׄ����\�F����*Ҍ�bZ�"��`��������,x‚ܖ�?��P)�zQEg)PJ�/����\�r��Pq���LI�$Lvr�R�889:: G�r��=p�}��<]&,e���C����A(��-xƆ�X�1Y��><$O�n��ѣb>\�i��5
B�D��[�}�L*I�1�}�ޣ��A�>?������/�N���'OOv����5���H�LW�)��<;J��o��-zO~چ�N,�[+��\�����p�Ȕ��|�~�ة��NE������y��i#f�$��RH[Yq�%�
�\��Ї4:�mE��X�$U�Ehp@n.d~�C��9��A�nI%M�Ӌ�w�W����>]r�Q.Rsh�p71\<����#b	g�'Os!F�M���k!�T���[�@��nYrL��b�N�����/�3u���g����O�5<9���z�_�����ٰ�<�_ƚH��u�WH�����/50��H�nt�����\W4�X��`�>��^0��G�B(��U$(h"�eV3ň�,ui�b�u.���-�t��T0���]AP�<ka
S��Q�"�j��bɤZ��{r�DniB�"gyyT_�,B%�C�c��eQN�д?c�*�2�:�UQ������P{0�@Q	Ji3����4)�������f4/$xg�V&��z;��пx��T��E�}=a�%z!O��U��3�2
ȍP6G��E'n�$+D!HL�?���k&��^����H!U�DpR<���$̠�pb�1a�K�E�J�U�.p6b��$(�tp'O��c��T[K����~��M��fr����2�@�˄�SF� |���
��%�LY��j` ��	��$ZT��H˜'�)IҶJ��\hNrDG�$�b��Qͭ��*9�K�g�H�L™�>�� ���hC�pI�d@n�؊'��0��BM��J�X����5�iD�bBhDK����B*�M�	;�|I���3�uE�r��8�,�<��"�^�>������P�8r/yd]�A�*� ����%�����\!�I瀭�g1X��=Y4,A�o�5,3G�;���̛T��E�;� 5*�u�
y1��W��n܈`�C�`�,B�r�x�4�!�H�*kLi�m�oT����	�!�"�� \+�Ue�M��b_ר�����H3]�E�c�Y^M-����1ǂ�#D��U���d�I����d\W��`γHKq8�Mbh��>,dzO���Zr�[`)غ�E���{�1XZ��{(�)�wQ
�t��X��R�������)�]л`r�����QY{���T����K�C��ݫ�>�5.<�ji�?�u��^j3t�E�M���B(V�q��5���?��[h@���ֈ����C"��2#�|,߰Z�8)��t�E�nN��H+m��x]@1aj�2�f�l��|�.�N���a3P������B����ʴm�eA��'�q��w�����ٸ�$Ok4�kI4M�x6�vnL\ߗn��з��
��)���J,W�7u��7ve-�˨^��^K<��6����V�q҇ݑ�'t4���u��z�Wi�ԘB����+�$��OE�~T=1��!����4wuC��:=a���]c�I���玊�E���	�J��}.�Q��M�t:�}�=gK��q�s�>]4��N��1��O��^`�e!v�:bLo�r�|5���ˣ�b��͸9�|?��,���؝8j>��k�h�A���'gu�u�I܀;�aӸ{
�rO��_���p$��ۅO{�� �4�����f<y�z^���/ۭ(o������"̳�no�R�Vu#�ˬ\�:u��z+�{8-.'�6����L��h���L0�j^�g0)D�N=����(&�YK�ʉ�M�<7c����F��X���k=�ȴ��	�s�蔮�����3U4lQ(2�(�*�8�y����Xr�W,:�)�צ;ˬ˟?]Ӳ;����R�^
2��N��	r\\]\_���nn�/܇bY-�Vs�>pS1�|�ئP���?�*�'P���Mg^��~E3!��^�e��\�ϪȌ���{(
 
��J�������K���~�h ��]e<��e��3��rF�7S
% g�$;!�4QQ׏�XX�⛢�0N�e�GEHw��/�B1G����:�o�%�i�9��jM�z��S֡!�fC��(�~=j��.�ۛV�}F��|�q�!��x�yn�����6[j��䄼���BKq�,�ڳ�fh:�H6D�a�O'\�A��>7��1&�D �wC+��&��A����HǤa����.u�d��j����Y7X@�[�n��_ۓ�a5=�8m5T�<	~-;);i�<a�h�� _�#�X@aN_��9��:
�~�ݮ:z+S\9�	i/���g�7��R%2�y����lm�wP��������'�1���~B̓Bv"9��=q����X�z�q�B�D��}8��p]�泽p�T�(����!Ĵ��Z��JI>/@q(���0��W;#ЗO�MZӮ��.E�D�b=l�%���񾬙�a�xc�w�39~�$n��"��i�O��q[t�sЌ-�.�W
�3v������W�5,AYE�T4���]/Ӗ-��p8��k��)b�d2�uq�`���j� v��.�n׎;R>v��\�g,dyN�z׸��s��[�na�S���p�@�ZJyLs�R�O����y�S����gkm����-G�꾵*�1��I��[�;��z��m��t4�J���-�O�7�?�<�Q�=Тa�jt�q�]��V�����x�P��J��+��o�
6O<jJ�tͻu��	_8?&r�[�s��>Y�/���\Ko�H��WLOU���\ۦh�m����,�JmĒɉ[l��/���v�]����C͐��va�i�dhY��ށ��ӓ�YM���nLu~h=��r�PPy��U�3�p�":/�qA5;��	��-��"!
V�Bv��b�9��~���V��X������3�!�,�o����kĩ��pn*3���9e!��*zϸ�;;Í�@{����ߌ��ݰ��9��g����!��	�u�?�7R�7JMe����|��P��b|��t�M@ݗ3�PA�3������9C�3/,��'�bK
��SC�J�2/�;�p(�Wd��e�n�)OtMbE�X�*G�M'�Al�X`�6A�S0a�|�����fhv���v3c�y���7���q{cڱ@K;���G�WA�_����~ӭt�MO��K��h5
��l�-hu����\b��]��!���ݪ��=P�q5��iZ��G����E.����C@z7�Mae^��Ǡ|{"��@�
�<f��x��T�U �KD
A�1�O����U��!<��1'��̬ν�Q.
��,�Ѻ�c��O��o�u9˺�n<<[�� �{*���8�2<��C�ХN3p��,����́�te^��a���臨��O\{�o�M��L��00�1F��W����.��KfZ������$~L��a��Ir����2Lt�۴�Ֆ��ᄒ��{Ë`Xb>��Z��O�蒄~rڎm�?T2��SJT�g�$_o)�c�EѬ�f�[��
���:,�h��g�!0���l
�����&zL5y�ń؃�Q�h���Tp_���T틋������+�L���B�LA�ٸb��+�w�҅����'5�D�gGH��@I�X;�۝�7���D��bmh�a�"��0(ZR��.��|j��/	�㞍�I��
c}�3��s�J4��j(�N�d'��l��X�哬��:�HE����0=l70�}y�.�=���/��������e�@�)�
���:Ѩ�����m�:w�dJ���-��ñw|[����햭턽������
A�@t��/xNa;�A\�|�η�AP�Nh0�^���Z�HY'�u��i��'pğ�1a�CI�d9<9��Dj�
���`��xHY���m	d��	���\����@��#8�(�����B�`.���ध�GÝ�df�+�\{!k��ޝb�YR����wL�s�±#Ų>%lr��G�)_���ƅ��w�O�B���w��}[)$BZ?,��U��=�'�G���K�u�#+���~��o��i���r@OD^_�W�t�O	hn�A�k�<��o��bv z��/��@48az�F�p�B@����3{��7RLJ��'���N�f�E_6���1X�/��G��F��
�i���$���#�H��I�8�C�uҰ��6�.1`�a��&�\p�Y0a����~�R��w�)��z�ls������ŪR=|�V�6v��xh��4etx������3�'o��&Ќ��B�_�R��	J�
ux��0�Gh��?׼2W�4Ǥ�a�]`�n�lN.`ΡhQʒL�a"V8
�vhVѧ�C�J?�C�K�_���]Ys7~ׯ�Ú�)�~5���õ���)�٬��J
ɑ8��␲Yk��E_@�!�l^��������#�t�'� Ε�\�O-�BvvJd���n#�r?��Ii��*P耱�q���ZQX=<-�c�.���_\$K���h|o<��㗎G����Cj��颺�:Ė���B�E^5��Y���+ؖ2�z�ac�
�1N�f�m��'��uF#ǒ��~��hU4����l�����nov+�G���L�{ݷ�9|�E�5]�Q�Ө���-�J	9�ɳ����7NC��;�0"�r�wen%F�aK�%�rw7�h�nֈ��E�.hb/���A�c�+ @�0�(`t��,�r?�����X8
r���N��������2s�.ҙQ�A�"@���vß:���R�a`�
�B]�u��^ �~]\�k����o��UN�5Cw=R8�ͬ>��#=����7f���1�v[sc�E�n��$+�!��;�S���kfjf��������d��ex����b�A�����4HDlpF����g�ͳT�Q(������"=,�ڄ�T�	��@f�T��	#�0z�����˿Y��
V�((!����]=��Yq���Ѩ9d��9p%�����BM�}��pi�a�
�:����Cyl;to��As��<[@Z(�&���*x�	��E���BY�i�x1�(�DҜ����^Ԍ���&��A���<�����KQ�]{�+s�\��	�˓���N]�y{�R���>���82H���
�#5? �y�7�>�#fi+�<J������M��#�|�y
с�k�i8���4ϫm��k�?Yʦ�e�w�x�I�C��͕�ox��ٖ��
n'�J����	DZ�0�½Oc��~�	}^t0FQ�B�{Cx]P=T׉�p^?y��j�)�2+}m�moV��t�hL44QqE|�`t�n�w�y�E��i�g�Ge}������(ܸY�u�(s�q�����f/�Y�zᜦ�Y�z
�)F�_�I�x�|�3�^��c�a�<��9y$�
�D�G#~�[�4�Y�7��a�߲��q%���9$��P�'.��ϩ���b���x|���v���(Ъl�iG�|t���g(dIg�nW����m&�Hr-���QôZ�ʃn=".�����r��<C$�RA�$7x��ϟ
�����q���gA��CY/�qbG�M��~?T���Z�B07�{��bi�x÷ˡ��*\����u�J�+�}]��k�c�A�����bɋ����~�}A�$�A��:*�`�>�JN��L�i!<�˫p��c�t[�K��PRȅ�:"<���2"K�7��G\��g7�h�=�	=r�)0.~��,�ys���w"`�man��H"��/����i�K��r�0|����MYo1��Cۀ���]�1���4��+p/m*�܅�`!��싐b�5'M�ʁJ"��g����6�h9���7PF\���l�fVc�Jbae�W�X��WQ���`�cI�Ypy���0^^��xʒKe\Ԋ��A�>��(�{��2�N���X���.\���f�m�Ė,ut���y	Rw�ȕ��5c���9C(r�̛)� ,R�N%�
 _8A۷�`(���n�q��d�[q�[[�$�Y�r/��Q�q%��+S��'�o�(B�+�y�1ͧ���2�=.Ǫ��\.�@$:8����|�~���[j$�)@�'2�'����e����X� :�Uha:c�Ϊ\.�ٕ�(���g��r�����:�b	����.��Q�t˚�Y�r��G�&!eg�(�q!½Xן��7���^~���>�E
K�f;rj�U`$ɞF�������������y�C9M�v8Z| �K1uc����[U'(�s�)����	�fOD��ųG�|�������'�ɶ2C��É�*���7�n��:�|m{,��C���)����e#[B�F���5;W�1<FX^;`7�?I����m�cv���5H6C�iVU�!���e���Y����N��Q�e;����5���6�<�đ���q����˦��Ċ���z��-��Mf4b������$���0���ɐ�ټ,��"��=�q�.�p�O\ C��-�EP�:�(�	H���Lٞ5���y4`&mo�%�S���N^g��R��٢e��Ӛ7�Z7jn�/O���_e���,|ۨ�K]	�����/�lm÷�L���6��N}�~[<}�����ɹ�8�♡s�Z��e6�җQ�ou+6t���ˠ��v�=���(�h-6NQ:��"��t�#���ߺI__f�6�βJ�/��ם"��MFIuJ%G W�K��'NPw�K�9oC����ȍ<�,�M*��P�~���/4��ϻ"ǩ�X���z������^7�3~�\��;�
|,���VE�q)��wن���V*|������HI}�.�5�I�%
;�3�gәf!�țux{�
S�C;r$��!�)�,��ZӉ�]�B;�Ax���c{0�QP	�<��@S�rc��S2;)&�kk�d�J��;���93�l�`�V�̯j�1ܭ���R�u8e���jJnPCШ9�uS��y+]�J�@���r��	#��C�\
�dB{Z�s]Jϵ��Q>�q���	���	�;!f�ܵ�,J8��*^7*�(�a/��d7�ڮi��wŸy��30i����'-G�ҧ�9��g�S_�!�{�� �ߊ�_=��
���9
��o/�O�39;�{W�W�
Q�;�p�Q`���Y)x���� �
gl���b��G�:@��+��6���fQf���X~�&S5i@99f�D
��|5O^:֟�~�s� O�	&h\y�!�^���M� �c?��t��)��I�/��x!/�^�Q(��NS��x��g���H���J�1���ϒ�$�8d�!�m��"��)���67��%�t�����3�L�҉�4����r����]$
c����f�E�mx��g��q�i�#b����z�h$S�l�K#O�{ƒA�3��P�8���\��k����N��Fb�)s����G~d��������
�9^���`龍��F�`׵�CJp���#A��6�i��HR!r��^�2����:N��O:�7�lN3:�M>�JK��b~Xڶ�%��Yi��W
�n]�-&��zdf�.˻��@v46#!l4���a��C�D2�1G�����Y��2���^C\E��=D�M�b�,g���)d5haH�W��q���#�V��)�ſ�u���4�IJOH8$RԓK���퟾kU.��`A.)��rR�S3�Ky`s�{S\��^�
�IpD@�v 9�1.�b��dl�kQ�8�Fף�lF�N���hK��{�C���̇��E�����i��=p���=�=p�o0)�M�K�xh������覝q�_�+5�\D��"�W	]g yi*a�Q�0H@J�#q&!��a��Y?vx�JΫ�5$��l`��2R���p�?
����ڇnq)U��Jc5�J9a��v㳬`��-�� g��7���*wH����b6��_�4�+kx�TO��q���`�'�Ұ�F�D���>z�7II�o����g}.�L��W�/Ü���̎�y�^B�m�նo�g�6
0Ey!u��?ž�֨V���Y�"�;�i��:��H�)��v�V�r\�V�$����L�k���3�JWo�<J}m�� -F� =�Lb`l���j���9>{��S���������oD�g�B�nk�ע�)�C�6b�v�R�<���y�e	�!i"�M+=�`dޙt�Yk2p3ɴpx��W��/���P�0�k��D�$S�ș�f1���YWo��z��o�`���5�%�?^�HF礸ǎ��E6'#�:�_�*	�_oPg%�ݻ�	V^[��h�ۚ�1�RmQ���֩w)z}q+������UsY�U��n�f���-p��f�A0�>���4{$���+��*�]Pi�	�U
|?Lo���JYgS3���F��b��f9�TYk�:�Ԥ���T���Ȣѯ�=r��V�}�"a�H-�iwx'�\�3JE�w��c�b��`Um��4�L��pӧ��>�<�*�r'�q�k��HzW��<�Ń��w����Ш��EC�қ���*��nQ������X� ��!�% �1���	x��tƳf�+$���u���+�n��Q�]�e�� ��V���6�>�lZAEv�kZ�帻�Ӂt,���6�~+�g�l~�5�:�C�:��O��2Y�J<U��C���>�˚���IyRI�-],��X�����w��)\�E����~���� !٦0T¼&IŶ�c�R�&%�V!��ix*J���p�0ڒjV�?�
J�LK7�|O���Nb�%j�$���[��m&��B�`(�45�`�j}�8��&�	��^e�b���?
��'~�s���d���0	CN�0�Bǹ9�	��rs�k�C���<]$�T�m,�E�m[v����I�I�v��A���}q���uf�*SY���LDr�Gw��z�O9M�n�LYJU�hX�m恨�g���p�%rup�B(�;�����6-�'��}�Nܔ��'�J��$��7�3�P?���8��9�,�
{��:�@c�:bF�T uq�����(���iJ�ʙ�$��w�R��1��"(Z4/RM�B]�Z�nt�\A=�3�B�T���"@��E�d�!�*��S�5[�
�Ҭ�Z�)?a�w���l{�w�s�3�c+,d�������0[�v6{(O�ܤ��Q���|E�s��&O&������8	��0����ǜf�-[���%zx��Nz�|���'I��ԕ�G<�����_��р�7��W�s{�]3'&�O3y�S�`�Qɤ�}�^�A��4��z"ި�4�$��ڻQ��y�J�����}К�Wa��G��Gra]�e�N4�|v�Q+<@�V�f�+^��OF��Fxޟ��n�u���5��:GE�x�;@�)1�a�F�5~��=��%������y��{���߯߾}Ck>տ*~[T�rZ5ڨ~P�c�YO@�X�B?�\��p����3�0��J[�G2�E�%8*�]F�	P<�澢�ֻ
�iZ@���
�c��
�a��RĹYͪ�
6�&Z�=c��|s
��pӛ����B�w22�^]X/ry�+��T�?(Wu����I,Z)E�@a ���g'?đ�w���E�x�J����yWM���n��)�?��*Ai�1�rT�^�2y�@T��Ϥ��B_�����P��.uLk�t��8�e����X�[A��Ӆ����k�w��EQ|0=e�܈���@fVțh=4�w�Q�-lt�a�'��F��a!A�μ���g]��r�U�p	�����T�A���J@8ж	c���Z���l��S	9F4h xb����}��-���\�Y:�.����,�p���2�w3�H����Ű0����.5ɔ��QOaC��ч�'YN6��]�d�к��[��gb��:M�x#����x��Osu#ȞD��Cu�G�U�!<���V�K%+,7|�i���0+κ㨐�;�P��y{�sW9*���O4�x�-[��!����]��@,®�rأ��[
b��8���]>�&*��Ɍ�D��M�l?���dfe���XT�5X6�P֍ςV"�h�]�T�2,/"Y�ۆ��e;�a%�7�B�.��7m�eU����M���t3���-�=�p�#�,��	�Z:�jb4�����
�po�p���cXGU�1qz#&z,�~.O��RE^��c��e�¾y���T]�a�����|0�?����ɲ��TMO�@��WLOI ��Ԑ"5jZP�c�x��J�]w?V����vbhA=��ݙ�޼�8��*J�׹�A:���KX��\�
w;�+m"!ЀF�z�,��1<��͹��NR��w���%2X����˙��@<EIi6O,����J�r����0�N�~�� ��^/�ÌK����2'S˕a���''��hL,:R�f,p�@��6�G}N�4V��*]��E��.��fӻ}|vcz��Q���wJL���+)�*p�e����%����5`��{�$����#�XӖ�N��
uU��o�b����C�)����<�j�
��
eoH9��eX[.��C�:���� �*�N$+Q�Q#&m�\U����:8�,쐙��2�'��&JR�uخF�eڼ�<$��"F!��~�z�m���K2|n�F��D��;�5�#�[6>n�k�lgoϚ$B��C�������`�*M
d�x���:�����Տ��.cK:��%�i%��Eߗ��u0�`�)dpv(Q!o���p���NO����D>&�5D=�c�O;.E�<�k4]�m�$첮
�U���ʑN���p��D
UhT����
'3E�A*�`�O��Z��/w@��y&��;���Č&��M!�
�e0:L�fd=hU���֭Q�Z���Qx������ϖ�����O�o
�iж�~,���������վ\W���ՑH�{���pʼnɛ��1�����a�&�m19�7��qh��Z�o���_�~9I9�>h,w9�E�KrA젏Ŋ\JS�@.��9���,?v)J��Z��ĝ������su%f�z���҈Q8/�~)�J̖y���J�*�2ˋ@�J����U��'��+�P"��Y�BY��J�Y�~.�'��*���ח��&J$:T)���4"���+�ge	��o�����߉X'*�<�T�S5�k���iht�����@��/�)^�Y��QN,T���&ϒD�Pg2+��m�YB��@��C��^��R�Q������y	�2]�t�B��R>i1`�ƹ2���,hH#����As%��`���uD��(.�y�F��
,�nbYu_�ؿ��=���N�Bl�'��Ϳ�$��^���e.W����5��3ٵ��ov��?3�eF�24�w�(L^�&��>k�
��Yc�����`���ێ�S���8�;X���v���ˀW�E�)�QB�ёlר�:2��`VtW�/�ґxT�'v���^E�L��J���읚�
����Yc^X�'�
e]��r��\��^������pn�W�6�:" .���E��A��Ao�pg-*``��[�
6����<��
������·��Q\����(�S�d��ON���<�9')1�|�^�j��u�һ,�I�ʃ��*��3��Ѧ�6ZjV�E��783�r�����L���y���;�r
�V瓝����l�:��4E���-�N ЊeV&	X��Za��t+5}�E"�� f6�kRo��~ǁthO��=���\���SV�B�	�,S�#�L�4"�h��	�P�x�J'g�^�b�7w��uO�;���L���:v\O�$*]��?��L� �օ��)p�T�9Aא�(�&c�Q�mR��(��@��Y�z����	�J��lCL��POg��lP��'��Q�u�U��:N͎��,U>�hc�D}�;^C�OkT5'��]+q��ԣ�i���M�8|J]�� ��V�b� <O9�����_j�.x)����8h1O�;r͞l�a������u�9D��Hf�'2}�J_���q0ބ�fi�=�3Uh��~�c�bf�X��E���R̓.H�?����s��������~�ŭ�k+�2���'�8e���/*���PAA��������/t�M�uetγ$����}f���T	�|.%�r[�U��X�X�iWd��#A��
e�F���sL��i�U���=�q~*X)#	���
�x��`���U$F���t��^v��<�+ljD��p��,x#*[v��b�(�6,s�	�m����:��<��[TU��CE6'�k�޵�g�=��njh(|oޣ�9��.�
����DW������y�}?�ǜ�������#gDG�:w����Yk��T]&��� �����P���<��-J��"��Q}ӓB]��˂YΘ�-�-�A8 �l���7��cФ�ҭ�Au�Ֆ-�=���{�����[)!Ta��~��X�P'�q1�mQ�x]��)a�T��-�r��c�,��6r*t���.?	��027�}��sR��'8sB����*�D��2DaX��Jn��k=A�7Y�ZV�	�**���慈q���WA1S��P�o��y�BJ�ޥǴ��lcJH���Us^�����-�%���cQ���B�5��@��R<�-��J{���#�S���wkT#��Jq���!b���t��8˪����5z�X��}�@��
��y�_��I/$;d-Z�l#�v�F��5�FH#P�$�:�����E��@VlY��ݏC�{��$��_� �.U�8ϸM�?������>=�LQg7H�`G�-R�=u��� �)9��Z�J�b�U�l�Q҈C%D.#���s$����
�%�;�Ӛ��7S�a7�پ�?ű*��<����B��M�l��
�Ol�}^t���I�zb�*Gs�i=�l�y���O����x�j�҉̓턪�a�BT'[��P���6a���wo�f�G�B4��iM_��ި�~�a�wZ�槻�f$�-�eݩg�z�*��W�C��EyFo���_��ߣmm̔u�N��R�7.0ͅ�)�TP��ڎSݵ`scZkq��v��%��"
��z��MH�Mo�p���g�8����x�/9�4-2^����ߑ��7+���c;����9���i��]=��`>ˮ��,�����C�M��;�Won����aY9�-��W�˯������#�]y�R���ܥ��
�틝�5��_%���:�@���4u�wH�9m�%�����h������Z��t��f�ғ6O�G~���e����sm�[o�7�G�@�lRP3�0Xq�[��yqdD��.c�
��6���w���f�ڲ��f%�� 
����;��LK�`����^��yuS���*�v����_��_07��{v�?���D7&��Z�o�8�_1yi��Q�}����=\�~6�݇�d����)C�������DJ��r@�Z�p8���'}u��zW��R�`6�_�_���n�e���
n*�,J��M��&�P2��
˒��+�C2(栖\�,�r�`Vd�qQlX)X�����.���r>c��e�`�
�2�4/*��=�ww�o?ܿ�9�Yrr2+��͹`�3�X��+1S��!<�\���_8�ے��I�Q�-H�3M+�*7{�l��]��(ݖ�%�$�L4��
���TJx�o����	����$�(o7L�Oi�`J�QB��Y�e��GQ�����X����nHZ6�Wl%�k���J�?+�Te5SE9h���Z�r0�G2Gbh`���׎
�N�#uQ-�vk�݉�}c����s2�*]�Vk�biY�;X��X4�Hx�2��'*��1��0�_�ξ��e|Ұ�TV�r�ﴲPU��s�f���!L�W�KMZ��1Ƨ֖$�m��{�,�)m{���}:�/���Ǫ65�Ҫ˗�ڋ<{�U�F��oB���pU�
�5�;�X�e*�J=�8��_Y��H�?i#�C/6����v�[3����A�㒩�~�P[8��9�3�8�C�LҀ%�E�[Cp٤y�t ���j�v�S��컧h�{���+��A���k�AkiXF�����4�)[pq���?���&�w/稌���:1���Y���z�d��9���{N�)��������Ņ��/Ӥ��3�2�)ц��e@�2t��!�{`K�EQ�����>-�6qRi��%p7�u�6��$���lD����Q�Jr���+��B�,
���J��df-G˧9H�.�x˻�i�y��Z=1Ҏ����Ck#�ڟ�?E��N�X͗��Bh��g�1^C�?��OY�z���`�k�9��q�yHָ;�B�Y��ʄ�����}�&���Y?���r[,�8#�-L"�.�liùԶ��R�V���c2�`,�6��h�K=~P?*(�\e�Ѐ�ڳ�Z��S�Vnj��6:����W�|�^�0n��=��bw�6U��-
S@��I�T��u�jm��UF�*u}ն�#׽��⍆���|�`4�3қ� 1�Q�Y���^DS��t.}nX��&f���Z���/vPTG�T�B$�	l�ڍ�t���Z&�T8\���k�����W�YIx,�g����Bak}Ǽ"j[���@��Ԓƒ.�͙F�
J��´��otC������Oz�Y�~ߋh�^#����Qi�:d�Wa3ܻ�ʆ��w[�n#Z��aw��6�_cb��
U0�X����R���9��P��:��1�Y1�͗$���;؋�����dO��)�W-D�F�sv��#]��)�������]5����V���Ay|$O0]wsC\��ٯG�G\��$������#y���5���]����ە�Z?�g���h�	���F�9�ώ�q\]��?Zaa��O�KW-`�ɒ�IՋ#��]�˴(�pbS�k�(�5�ȫ�QQt"S�%��ʌr�<�o:��
��s�`�����;�l1�1�e�~F�sL<�L���[��2.ש�-)�`4�u3����*�A��R-*�
g��t�Oa�ivYDͰ/�1 D�g_��]
�z��vI�ԋ�3:X�����Z��0��ʩX�}F�}���ht��@u�ʱÊ2��*_����|��3i�����8���T�,�5|�R�F��yk4�r^\�&,R���0���j=Ri���#��ĩ��|^�_�j[*�ә��=k�sk�/�d�K~y9>�<�tI�#�!�����)�5+���ը�k�<՚B/�=y:~�e*8��>�5��k�&=�|c��'�Wj������p:��'���J)z�A0�2ҍ��~6j<�m���4i�u�T1�\<��N�sJ�vpj�7ŷ<��Cw�@XO��z ���S����=LF��=ݯ��dl�o�����;�M�8��u8��k�Vf��cKۚ�U=��+G-�E^���}0�5�
Π9<���~�
�w8M5�r�n{W�B�u�u.�r�{t��ѷȠ$�U���VI�K/Ҳ,�@H9�r*�L���0y�fi�)Rj���~�Y��!�� 4�ǽד��w�E}��e�bq�'�Z�WB�6��Y�nNk�1�cM|o���Z�l԰:U~�\��e"����	���{��U/G ������!:¤���7ˑ-���/2��;��3��2�AFR�wAqK�&V���ܷ�w���2wj�}^q&�!3�eiz�%��'�vء砫������>p1�'����t���G�����
�3*��x3ף@�*Ģ�������r{���U���B�\O�
�3�<~c����x���p���k빉�/���ZMk�0��Wd����v\� ��az(9�,��M���>�_�d9��M�
E~���c8oWx�U2�t晹
�Z�^–yIS�:
l*C6�<xmm�o�^��=��U6���[�Sc�?p~�Ld���&9/Na����R�cz8NN��6D����?�w��b	|OO�t�j�Ҍ�L�r,�do�6Xe�7�c4�gvA���^�Kif��@�݄�: �.�3�۫��ѕK�j,��
�[kh��\u��k�ŗ��s�O�ҙ�,����8���)��G��C�	qTNI�����鈘�V	E��d~-�5H�~0��rrl�7��{��N������k�2 M[�{�PÏ!���Z�#�����K�D�D"PN��a+���Rќ�o��������f4�w�f�=���̆�W�P�Aᆊ��G���]P�RK\ޜ����lb06D�n_��I�V���o��S-��Y[o�6~ϯ8yi�Ա�>&s���i;4)�-�6WY2H*�����&��d�P���s�΍�Na^nw����to^�~7k
�5/7��e%�%��s�p*(���h:�o�B��fDY�BZf��|���,v@��?΄��r����HHI�8-˪Ȁ��������`�r:9:J�$�KV��?V�d˪H%+�dOG��S��0�H*PbAAМ�c�A�r#u�%J�J�v�L�Q'!��eFY�;Ë�y��X	V�PsVd�5����)�Ms"\!�k}����E���4��-�
�+*��J�-�dOE�YP>�����+TS��<&�F8w5fN,���?-!y�ʒ'-���	 �-����~UA��3�0��	��S���#38{}qd�c(ox��Z)vZOT��3嵜�J�oR���$��G����7*&�<�-��v�,>"S��1:��O$�/�
]����T������j�<�M�)��-�~�����w�,9�E�+:��&D�Q)6��rtZL��ݶuR�%�U������E�!,��K�ɮ�*5��y�D���
O��60W׏�v�UP��v��9��J��V�V~o8;lּsn_)1
W����VF��h��8=�Y���%�BF>kwm�0�J0�&�H��dsʨl{ y�kt���"�=��b �y
qF�sn|�\��u���x���D�z�!?���c��IP��_��GM桋
�X~������X1�oioaP��4eG���3x�0�P	�FTXc����qE��ߠm��KlT�>��m[?�5jt�R�3{�ד�fUz���M�4��C��
[� ��H=�����Ɗ����/m/�՘�K�$ϋC^ř��t�82%�^�ΐ�ԓf���2��e�d :���Ձ$*X�h���F���<��
�^��|+��ӶƩN��*��;8�P��CIu�K=�D�5��A���S9���eQ�誢����H�[�k�)*���Q%�i� ��4�E�W10�%յ,�͆����̗�J[�<�E�`��̆���}�d�"p�2:�Xa�1Wi�ΠA��tM��-��m��=�:�OO�;�p�fA�����W,	� 2]�f`��	�U&�%�dp�s	:kWV��2"`C���9A�i�PQ>�̰��/��g���p����/4��㒥��܈�X�&��.�\��V��e�U���8
�"��"��
E�4��w^�˝����ų��N{�`¹:��F7��T/��^r��؉7!y�8�
�`
�����Vd ����am�~��;�?
w/a��g.��)[2�Âl�� LOlOO 5ly�k��uJ�r�a�Y�Цkn�E@�=
M<q�X����X4d�]bַSY?��{�Љˀ��	�7�݂i�4w>,���Vd���8�b��}>�'}�l�uƝ��uG	�v���
��\��(�T�d�`p�Ո	o�P7_��z��:�)Tݮ��_�qv�Nw��d�:�ޮtV����2o�|��S	���~��YS�Z�~8���X{��ʽN�J�R��Q[��Nʓ1���_����8�'pV�j,=��d�����]�����^�L4���_=��s��<�~}Z�sԪ���;uq`6
�;{�-����"{�m��ώՎ�k�R���v�a-�v*��U=�s�(�"��f.3�y����M���b���1�^�����ڜM���C��μ���t���;���*Z��io8�f1��Cˏb.��+�����JH�G����?=D����ٵܡ�T�l��[c��;��4���Zmo�6��_���:�夸Ovݫ�h�M�����J\/�ZI%�]���of�"�Ү��"���p8��ur�.�f���e��}���W�z!��B�K�-�E�.j�3vQ��5SB�Evpr�>k��9kR3]w*,�����z%T%
6�0ξ�z{��M)X)sQ��v�[���r��]U0Y�s�~z���wl.K��*+�\Vb:�_;99b��[YW�C�倱��/ٷy]閽<a���޷b����܃���e/٥�d�Ě-���R��6#����m�@PC^/��*4��������[sPŢ^Wp$��3��ۆ+�d_>�#�|�ꦽiT��n���c�'�%��Й]J'R]���>��@)��p��wF�-�;�{
��<�CNI
H��~m�nĨM�nn����)���GD���y+��U!���}a���ڵ�
�^�|at2��5��,�	��[8�]yʪ�,���W�����à!"�E�
��
�|��
�����x��u?I
jj:Y֝���lD����>��o@O`еc�i˻fd����NzyɵF�m:q�.&�VZ�m��k�T]
�c�\" \Ȣ��u�?a?�B���]	���ݗ��,\ (��!�����ҥ
K�[���]gZ
�1 y}�W����_�o����^�&f>�hSG{䓄?:����(�30H^���(bb���`ߚ5��$�i�m�*��Y�����s�RE/@��`qG89�Z���
�'��:�(l�66�|�8FF�w𦁳_�}�:{�|��-��34+�L����*���zk�\$��c�9N��/k�e{=B�4��G<����-�F�H=ӧXi�z�$���F<}`FO|��ȗ��ʄA��������<L���/1�C�8g��N~��f]C��U.4ȫQ���U�,����
�RW�Xj�� |�Ÿ=��3��2dJH��r��
r�T��X����E=+��Ez���#�&�/����* +z�^� Y38hO��/�W��/C�޼_�!CD�)�8G�@!�A�`ؾ��i����i`��@%��*/Xu�ڌ�B�����4��Fetˌ�V�U��@�"
P�f��LSB����8d��t*2p�[��9
�����PO�p�����'��1{��ʌ+j܏�=%M%&��-�1]‚��f�w2�+7�%�ʊޠ�R���8r� -4pj
O�����6������I��Ԍ�9 �������4L*(��2D68Y����Ni��G5~�h6�����r�@h�͂kq�d{87��ΩA��i9��'8j\���d�:��Qnp���$ʪz
i��Q�M�J0�7�Y������kBL��2!U��_?��4H����B7��E�gz
o�{�EdL$��W��M�_� �_� !$C�)o
�@V�q���a�����9w��Y
��W[��B`L��l�Wf�}Q������RCk=k~w
����_�;��CdR_��������J/8h|J��Oɪ�wBm�(�juQ�������d�1i��6��� U]�^M�͓������F#Nq����5�q�p�K\���vF�?γ��*�Gt�EIJ��;��=@Im��H`�ya��V�hGt"Ȫ�2_;Vs�R�;G�W���@]����09���5��țolv/Eu�.���{P������3�L&��F䨣u��@��>�_����gq���6Й�C���|Д��{B��t*�w
��x3-�U'B���w8�)�F0g!5��l-���<b3��jC�@M�
�y�KTf��~��	�PiE�K���O��Б��w��,��Aݽ��D	uw�������7f�^�۱�sr�=/3�h�Nd����C�����3^�!R�M�O-h�`�t����Dz�s�];�B�4� �T�܂�U����l�
 �`��6�Y�B!�q�?�fau�3
Z��
��B6��Wi�-��s��'�F��,Yat��;�
R�{Q<���u]M����e!�5F-�k�]Q����g��y�l���H�w
�]�3p�K����U��ٔ|������Y���Z�0ю�<�`A�1g�#�J�J��`m�Nn;Zr0V���u�6:��� |
�j)+/N0�As��=C,��F[~x?m���ԏd�f�L� ���ؗ{��yl���d�˙G�m�ȑ��\f:�;���\��+ipn�Gu��&�-�'�%`ڀ.Ȫ��%���+�Xi�K
�Z�]
W���3I@K�vƜ� 0���S?�
6��A0��A2�+��,}k~�
{���rt}Ɗ؃Q9�&GY��~<��B\���]q�zN��t�r��xx?l��j�$eTcc�K3���l�J%�����伒;�BQ��@�
>���6��@g^�)lO)vY]	�����4\�79���Ѻ��3��Vwx��v��`B*{~;�A����vj�3�.p��K�B�$O�%F����6_12�_��Y\; �[�H��-[�ZJR]b'	.@��bJV8J�)��YY�eN7�&���+$si�ss�/E��ѡR�6�}��r�&hm�t������x�n�Z���0'�
:�m(�8*Ցl�͠�S���6<*_�L�g�R0�&�v�k�s��x�45M���1cϴћF4��)�s����]ߡ�{��,��%�(����`��Ӳ��L��!�(��P�lE��ַ�݄P> �I4t�B<��U�����:�B��',,�ۣ�я�a�"Y�a�[z/�������JB�祓D��	vZ��.��O2�&%����9�X�����9�k������q�g�}S���u����K_��e9�mܯ[��I8GuP�d�8��ǯDB��wp��s�s����禠Os�/��78��n�֞�Wx��.�oP`8X��)�z��ISё��b���2�ov�����# OIkD<�=�(Ep���Zb�"XW��tx{�>
1�M�F�(&��D�U.	Q%#&j��F�J�����5�E"�@#iVI�&0�Ɉ!	nS�1��o�g;F$�N�����:<��!������·�¹��y+������*|�D�ײ�۠9�a���C�H���I���T#)ݬ씿:L�G��q�!�M{�����/E�W���ք�SA�q�'�)���#�#6�e�叀6��_�Z�0�����`���L2�V!�:l�hV��hD����_��B�7��$�&��N>�����.
+��Yko����_1�+ٕig��"��8�1�y�v�.�B�ȑ4�Cp�v���{Ͻ3|S~��@�����;�y�Ãq��M��++�Ѯ�����z%��*�kU��IaW:7�8I��ȥ���������H�®�Fy$E�c)�q�od��X�7"�����$R$*�)��UhE�b.I�Bi,T��R\^����:��`����J���d�G��������7��O;;;Q�r�R9῅MĢH#�t:�w;B��W�N�{��V��8�'�G;n-~�=q������֕�e �dn`-�ޮd
k�����*]
���	�V2���5���\�W�θï���Y��wMG�
B\���>yw=��|v~y���T������f�(r���IN?O$����ۗ��r���J�����4/����-/M��<�m�������Y���ۼ��}FDž���4�VV:/"���O_�Lc#��\��|��y��
���,:���Ke���V
��P�^f�3d����hh�m�b6�g��T�4��Ovx���y���a�~�)������H�p��,�@8��,��"Z	y��kWI��
��Ѯ�n%�*Lc������D��,�XCF.>^�k�L�$�k�5�[��̟�q�r�x�*��H;�������r��'��,7�X���'.�'E^/�=u�T���QT��a�I�:\7B����>�*^J�-���H�K���ZB���Z*�d�"�;8�mTg9e�~��|��6FfC�Kf>�pPZ�H�ߕ��B��k�|L<�6W�+�9���:Y�:~GS�}ӱ�K_a�0���#�-���Ɇ�7�P�߮��
R��+�1B��gV���0�!��O��qg�i�����I�(x}~��S��*Eӳ�ra��m�X,��H�澏ץ�J�D��6X����nu���S&ri�<��?���?��@��M^:	��Bv,Fc�n$�������_��O�f�}�]k`4��zs�!N0~�|9������M�w{�S��I-��mW�,Pq�q� �,����Ϣ�T�x��;�O+��T�̫�
p<�ҥ��	$�<%�<�J��i�,�����裡�b����0dhuN/:�=�DW�!��=�Ly]B����K)�������)�{<�ѽ���n��_��x7�:�az_���
�ܲ�)}��ZC��5ڠl�����iC��*&VX.U9%ho��P�3�X tx.��\�l�E��K�E�`�%ֲ\5�ʺ���?V&��]�2�W $��;"�(��ujC|;.���Fʾ�2`�V�yÊ"�s`�y~<]����x8>Tq��͢s��ճ"��@PsC��MR1mx��Y�Ӻ�J�52YPt�2ˡ(��F�ر�r}[)
0��%6īJ��]��I�M�G���0�S߁:I
W���C�-��v�ܽ)���ٸB5�����Q�_5��vT�AT�9�?���������ly�5��jw��3�3�����<"��[��W�_��?L_�O�op�!$s�'���F��P�$�
�!�a�nтN�Q�����D�}��y&ʥL�1��ӯ�5�i��!�8_�"�V�b-�yA~�2�2+�O��Ӯ�7%J�cr?F7:S�m��˞��
����Q�ӮT�lh�Ԙ��Gm=/M�)n�Q4݃�YF��3�✹�!xh�&5�o�к-<d��QB�X�}�dt�����*s�8��d灨�r�o�s���0�a�k�v{ܧ}:Lّ��X�)��t�בt��`dP ���n{q�{��4-�K�L��?�Ex���w�k����
���v�#
P��T��C�A$�����!����T�iX=^]X�vu�You�w4x�������]��֏�u�Q�3�\-U&̬�ʽ%��_���ٺ��?}6�(
k'�P�EN��a.�Q���J�҅�J�@Y��X.�������EE�+ e���U<D�������1i����~�mh�A٤��byn�����dCgΠ��á�&��	:�-A�oѯ��К�ď����
���a?�Ð�g:Yj�sY^/��'�"+����朮rn�-�z�F��q�n�*�^W�vA��$�'��
��ZP�3�1���ݏ�W�2J�.;��9b5��1��q�߂4O�<p/C8	�{��mx*-_W��(�e�4&��T�h�M�"��I+�nнs�lL�m3'-%��Uj�n*(���-݌ۗʮ����n%?^0V���(�p�Z�s$My	�o�/�On�����`u���8ݐ�ַ�1����6�4��Ѷ���ϑ��Q�>�E�ɥ]��y�`��=;��:C���
��*��W=T<������0���y�0a�>mk��Ƴ6;��
}|�N|�4���;���|�z�*�&�
�+�7���7�9GUЮ�7���#Q����I̮�4&nt��	�z[j��$�2(�D��'�"�L�ܸX������e�c�%���X����&�ğ�����vn�<�5��y��@8sЙ��-G�?^ ���H���� ��h�[Ln�1�w��=삡��ʯ�&_Y��U��;ćڦ�k��b�C��Ǥ� �ѪsF�c7���{c��r�"�Gh]��tp�۞$㖥��$��=�0�n������;��0���.�@p5'$Rs�j	�8"���c��� �!����c盡�U�F�%�l[z������!}�*"�P p�ԑ��A�g���%�H����V:+]��ƽ!)��(��|C匌yz�0��<n�ҫ|sq�_��Fg���;�m�b��[�g�On�¯��۞�j>+������N��Ebj-Zm��
e}�*��:�{}RLk�33?*�5����i>�pF�IqF��X�	&�	�%مY1���!$j�]���R��~�`��ڹ���M��7�.�:t��y���9���͐
+F���r��&�(R��?�.'H;��>�^v�.D����ܓ���=4�K���ܒ}�<"����l*��]S�H�ݿ��[�����}����U��pL�C.�K�=���I#�����I&pl<����/��0�mɖ+q:��?|�f+
�U�׬^�I-V��8�sP�����=͒�x7~b�*�x]�R�Q��K~O˂f���Oק����r���ĊHI*)��ȀxN��|z��nYN�� -��޲���[�h�u�
ƋxO�����p0�ϔ��i�BJ���@��'���D�
9,��iQt
4��C$�
)������8�߈���Z��'����d��`�,�b��S�KsB-�
�>�./��E;�7�������`��Z�Kd�\rj�k4t(�8�bD�J[Q)2����.xz���v�C$�LɢNRuᵃ<nΊCs|��(��s+�5�xZ��4Y��8Z��%����M9�Ic��GF �˟;��f\�|lؚ���|~����@��J��L0������;gJ�X}[Ǝ���)Ƅ���lb�-ı;Ee�%K*N�(٢��1�!0m�My7x�$����5�+Zo0��
�sz)o6s�[J	c8�2V,��QZW���fC��EJ#HsRU�^��ː}d
o1�@���H�!()5\��]�	(�K��q��gY`�a��p��4]/��%�����OaE*	����bC�
A&d�C���e�0�JF	Z�%�0�e�@��Ϻ��r�w�X�.yN�,�d�F��,X��Gk�e��!<?���a�?�_2�ԛ2�Ҝ���|��
R���q�놖L9֍��<e@��Xi�hb
΍�ȊD��	`v�u�}�b�)��˯�`�,�Ek?0��H��Uolq�Y�E��g��&����L`00�u���ٲI^Z0����*K~U��n����})b��t�e��r���TF(5��v���3Vɐ���2Z�銦w�Xpn�4�fC���y�v�~����]=�5�u�dZtR���rpjKׂg��?5-���d�+p�$�%��01�=Ͱ?�[4��֎_�	��f[dFRpxjúc�O���%T]�՞[
P���@[���Q�E�yp���H�U<0s2��n�|C�t��/]��K�u���ԛLvw8"���x8y)�Yq�b�9R{B�e"T�{Ҡ�6�2-:�P�����������KUS�B��]S�0���dAһe)g��5Y��F]�Y��G!"�e4�7~F�h�D��_plH���(֮2�We�#M{��^���6"�/dMU���u?_7ʏ�^OҮBR�~���~շQ)+�͸ءYb�:�(G�aw�oq�,q��N1�69��,���ѽ*�t��r��M��^��tw.9c��$N���v*t0Ԏ/y��6��;1�'+�ۤu�MPL��U��!�7�i��f-���7�Ŏ�I����i7�[�Lh����s4L��;#�*v6B�a=�7�ӛ���op0(�����+�%q�5pX�R��h:�zu�O.f=�ן��w~y6;	�A)���4QY�I��a��?�I����d��ԉ�<�)b��>���/�Nv�0����Gex�|�S���������<��56�*Y����w͇\�����Z$��=&rN�[�S"�B�U���ʫ����l.�"�	�}�T�Z�������\��?*/��O��x��W	��N�g[���և�_�ö/Hm����Y�
p2�+Г���ɾ�M��
P32�]
3�Z�EI�iRX��
02;DS�v�"c�����jrPA�	x��zJ��	�B����m�K[,m��+�=�HV
]%�����+a��ֳ4g靿5�n�����$�����Ճ<6n 'D%�~�P�S�G=
�{�kl �<��]!��I�R;�cQzl�<�\dE���I+��@4�ŸB�#��U�~%ʈ'_xF�������K4��)����W�H����b�
&��|��|��l�
�[�J��<��d#ºR��m	 vSg���A5�-n��*i�eG`���̞Qԛ��qh�V��#r�@�t��F����i�����n��7�R_�|��^��b��xz��ʊ{�'�d�k慁B��p�|��Wo3jF~/�XZ�׆'%řV���j?��ٔ�����Z�i��J�o_����O��K�����S�Ukr>jw�ު��JϾ��v��ѺC����%����h�F$ �Z�����Ͷ#��V{�'qoR�+����=V��{/��۽�j�}-3j,��,ğY�tuu1?�;_Ɂ1ϛ��8?�v[L�v��XS������W/_�΁D{c8{�`{:p��'K�Ƚ�C�����b �w��Xmo�H��_�����J��=�ƛ����
�4��=P�D[�H#��Ȏ��?rF�%��w��5�>�C����(7Z.Sa<���~x��:�E.��*��Dp�e�
h4�W�D��s�`��T0E�c��H�qY�P+L`�/�_���d��Q�6�
�P0Gִ(*��T����z��~
�a4�?y2�'�Y�J�~��J&h �"+��L> �J�J�ˤO;UV�X�%|��H� �Q��0�k%#V��M0�E�b+���Y����NWQ�`%���9�}�X��zaL����P. �2+���z����5r[3al��ƒ���P�ݼ06�fw��B4V$8� 8�
�5��;}2�vC��E����y��VZ��7�۷�sTv�n����鳉,�Ί�ο�c/)ޝ��/�D8{Gп��r�1�+����忤�+^�~�Po�1����+(.TaÏ�LT���p8q��#4�?6_��Ҧ0�>��v���E�n�#�A��Z:�K�6#FLZH���"��^��s/�B�V,�\H͡QkI�2��e��_CQ
-�=$͌Hԃ����8����K'֚,[Ai޸h��l޶������v2!��/�9�t(Œ��OG�e	�BT��6;�����ȇg��˞ou�Ы�Owg$��3��J�TT���>�O�6>�ݾ6:�ZbۉU�*˺)Z�˼(2j���S,�b.�ls��%~��&"����Nz�}�G6b��4�Ne��@iQ<1ghS|db�ٱ�qfoz���w�:��.(mq�$�����
u<�&)֪K�؍f�W�{�3i�{��d'���\g��:m�3k��E�QO9F�+\^B0uo��n Ҕ���̉��AÖ?�i1f���?�G�+��(0�D.*�z���p[�+�=�)_u��//�v���C�D�m�mOt*�N텟�.�gb�N���_��חf��w_�o�׳���?gW�W���'�B�&���N��D��.��
e�
k�����\�ty��&�=����
y�4�<��=�x���Km���P���4��tb_W"ԌQm���X���IT���UHld�ް&ꇄ�
�:�k_�N'~�Y�d1�[�t;��N�\]5�#M��z6ho����7bm��?�cVWش���d���7�X.ǩ�N���{hf�̅!����a�*����7�x[��2Ԁkgn���c��'hM��Mq�6�r��g���r��T���_~|6������F�=��+�Z��Σ������ѸJӲ��\��M�K�d{�̷
?��7��j�E~����g}g|�ha�3x�/$	R������v��ʌl���1S�����n�hrTmW��B����.s�6͸���+���J'܋�P�gS�EnG;�΅���)ѕ��8�}w������߭�ΔxWY"9��<���XD�����mè*��5'���Eo�=R"<O��{$�'���g�:�5l���(�B�A8#m��l��m�ޥ�R$�W^����[[��	ʊ��de�&4�XV�̣��C;�>����V
�S����
혃On31Ѩ���R%j+������]�?o��+�U���(C�v�Iiw��>HN����V*�+KnQzc���z4Q1���7���������f��n�
���O��h�G��(�����k�l���%�w*ۀÅ����ZԿ�M���Sut��]����L����:.�y�n�|K�Lv���LD���ޝ��4��M����B7�:*��v�;�K!=��~�~[���4q��r��ƣ���?_���ɬջ8�:jF���]�v2`��F�ÜT��YKs�6��Wl.��ʔ��$U�؎2��xl79v(1�	�V��.^$H�!;n�CB��}�؅�)��t��&p›���MD�<���p����̃�851N2��H荦S�+#�� "�A�rXH�vGxBBXm����Ǚ��b�����	����fyM�������?����1�F������lJ�w�ܣ���쁔�;�rAc*��Γ@P��8㐲��~�y�y(j:�ɚ&�`��9O�e��8P��{�M	�d%��I�%"��6D�I�i�9�)I�����w��Տ�1Y�$���	�V�{��jFD�]��$�׆ań`��]j������|�Z�<F1�JC��Q���RT��Ibr��,*"e<�
�$]��Z�h[(*˽�h`%�i@r?���=��I�UNF�.^�(��[P9�*g��?[~�t����Tw
h����Rd"�P��G��ԦҼM�wv��fy5�7%.��_�{,�h�U�����`g�>��~)�i�,���Z��[/�.���ly���~�Ь�,�hE��$qJx�j��R*z�e�Z�s�J�m�n$K}��%�
���V�e`T{49�>�qa�+4Wvs)��3$�
R�rT��� S��J��@V��2�aYC�����ɢ���i�)E\ �W�X~����J=T٩a�ce�*(JÕlwPy���7�11Q&m��P�c�Z��_�x����p���|��4�I����߳�)���.2�jGe*��X|��,8g�i.Hx-3��+�Е��:�+��f����5�Q2�L����cˋ:)�oLi��?Ѿ)�X���l�+�Xc*ǃ�U򘾐�G����}#�Uֳv�䖙O��t^�e��j`RN4׀�y_d5M]N�����
�Y�;S�Y��Y�'�m�-H�.�^gD\�|���iC*�am�E�X��.�UKwM�t���&�Ot&�&����_�GϹ�T�A���i野��$w��yn	�Lv�SS���Kqm�բ
i������� �T�����LC�*R�*ty&+�TE#O�:����v�~=r��;K~[8Q�Cw9h�T��y9���'�?�D��PCԦ}M���{Q �48B��~:"u�벑�k��� S����4���GF�a8����\�;LTj_ץ�D]���=�=�x
{�xSy	1����7���۵W�#35��.�b�����/L��p�[�]�qN�~.�x^��KNo}�����0x\��$�Ӈ�C~=U*�'㗈;���.��O�a{���<ڳ���!��c��=aY~��xьm�;��hV�a	{�3�c�r�5�X�����{o=F#uYr*�3��Kǻ)g��'�^w���R�򷵫�s�ڵ�S���kN�T/a�W��M�aP�K��DFC��lK5Gr]�em?3?��>�j7�q���\[��
���Cq���V����3Ћel7����SL�F�7S�[~a|[�m�*F�1�7'i�YԊv��f��Ex[�$��#�U���h��<S؈�;R=�Ȼ����X��JT8E��⧩O�X������=�Y[eO=��U=UUsu��Ȕ6�V5��t���
)޾��v����?�zh@��e��Y5D�������6�����*7J��i��n�Iw,c^��A�S��a�혽ugo�f��nh�ɯ���������	l���Swn
��L�`�(����I�2���v�P�?n��hǿ�;`�ׯ��.��-��ਜg
�Y��o�Fk V�͜�Iצf�Y�X�Z���W����dm�|��Y[o�~ׯ�<IJ�u�G��I"�hq������A�ROV��+Y1��;3$���윦C�e8��ɳ3��|g�rU�(�/��������*��,V��ޤ)�@FZi62�gg��J�(Vʂե�%�:��?�z#M&��@����S[�R	��e�ӊ�( �%IZ�2K@e�.��/��_��`�R
gϟ�9���$u���E�:O�Zf�����(���`�R�ʯ�E]
M������0W幐�L����,�C�x��^��t�&$e��F��^����Vο��[ǰU�
DA�R),J�P���K[�i�<U�2�%�Eb�F���ު%9=��
m��E��Dm N��S�tJ{zE=��K�xEяgض��x����Bh¿�� 6Q"*��!~-��eJg�1�ݛ�F�l����l��kt��l��� �6��-R@c꒶ՙ�p_f�mk��:�d�Zܝ6
U#����H�#|Rdv���Q�ɜ�c������[�G��Mz�dk�v���
X�KY��S
/�Y��K����f��dj��3��K�f^��h�H���^ �d�O��Ez�Is�㒵F�D��Ag���i�$)b�p�郣����'��	_��+t<������b�rI��j��a�g�ZR_]U ��:q�F�/�g�b)�+��&B�"�Q��Fg��w櫝U12��щR�-�H
R����.�a��O�$���k�Ԃ��a�ø9ԫ��ݰ?hc��ؒ��Γ�$(����m�!:�a�������;�:̵U��ḒN�&�����b%Ʌ��!��2,t>9�v�H�H�v�RI"��_���d�<�Y2[�45��-��o�(YN72fK4�����0��R�-qШ5�ked��p��V>��Ά�\�n��_��w��EΒa�릳#?���O@��mnt.M�{+��!'�̮QI��LI���Q�p���w�jbWE>g���8�W!�3
�!.[�b�K��y{�m��h/S�=�Ho
R�(RtEی��wQ)��6h�I7�Ї�K$��j���)tx�V���H׵���&-��4���|�ͷ�\eɈ��8”҃��.�-�)��o�����J�_#o�[4�B�V�a�V�k�G����@-|5���e���x�;���&ں�Q1����60�[:8��n<�a6�cHb�r�n����M�O=H��20�_� Mn\-�Y	��^��I80��`4Q��!��V>�ga4h�^ԭƅp��}^X&�6��x+�bZV��i���*t��1�8��T~K'-�5��Ĩ�pco�>BP���h8�Y\rQM
�a�x��F����xh,ҿ|�R~.�wdOK^��:+V:W��Ӈ�=�}��-�ݛ�㼦J�c�h�toXc֫o��Y�G����r��X[w�q�V�r��с�tH��������'Z���o-��G��˼gڧ�R�b0�/��2�*Ӌ0̟Xc�c.�H�]g��+Tt�w�f�ݷ���ɩU��"�ȓ���P:���!'�2b/�TsO:3�z��$��$<���LXyn�'.$n�G��z=��j��#��n)�;ĕ �P�%��X�6��[�*�vo��(W�}�8VV��#H!Gp��z���9������%J�r=Y�v�n5`2��}X@�-�Bnt&ҸLqC��\]��AѰw��n�NdZ��͋�X�irϜ~�Qk"��K��4�[��y�5�x��g憭#���p7`�	5R�>Ϙݘ���
�V�п�nݰ��7OG���c�3�|~��E(��h^�Κ^����HU���U��Us%����nA����;"�\-rƵR��frv�qiC|��S��q�&<u����s��iA�P]u���2[�N�p>�VM\���_�QC�
��M�~�'0pMK��Ժ��7�6�;H���۾���A�*���Q5���hPoMDrh�3GT~:�ڧ��@��z��v�/rY 9M
��\_�G�&�eF��ÿ��ih[2�S��"�頓#���+�(Q�G�iS��/��2�Q�BK�m������yg�KO�Δ����t�HAC	Y��ʼ�����orf<�q����\z�8��Dp͇�ؽ�tޅ�%F�6D�w�E���{�o��M����{�t.,�Iݻ�V�{�Ah�
	��2T�tk��J�/jzj������b+%�ۂ�x-�1�i�	<�PY/����4�SenG^W�w�R��3N�,ќ���i��2�-n�'?z��Z�z�yьmm�F�(y_��ي�.ZgD~�c�?G�@�S���4���r���S��5v�S\?)U��1ruɯ��:�b=����M��H5�X�ɭ3�t�������w��WI~���&��fQ`	����8ҟ����<�_�3�v�P��#������o���`z4��P���d�%�V��G\�?;5_U���^t�L�|y6m/ݺ�<
���5P����☗�ڠ:���&��?�?�2�7@"��X[o�6~��8A�F.<��Ӑ�]�4�t�C��aHh��""�I%��������P4����w�sQ�s8S�F�Ua�Ƿ�~����j-�5,j[(mRX�%�M4����|�A�`a��Zg��4\�{�9,7������ݔ��P�1[0��D���Zr���\���~y�(1�L2�r̅��~����ZfV(�L�i0�>�M����$[�	��\m��f�+|���4�-,<��dt�o��ߛ��鋐�1G����� |!-�e،-���Y�+?1F�Jf\Z���ҳ��k{+������ ���:(����L��'q�����g�V(Q�8�̸���;�xP�0���pj�,���zI>-7M#�lI~^��J��1��z��T�f�hK`+
N���`
U�ܝ�G������L�w�j�-q�5�8bNe��8<[4&l��߱�Ž|�p���;\l�C��tB�H%u��9ܖ)I��3�3����icGG����q�:7��]��SM��5��d����R%29<+�����o��|�J�Ϛ���l�s0�C���X�E�@���eģ���j��UZ�;����o����!�W1�_
-]�T��tWw.ﺶ��t�2;)��9ˊ$a���C!�X�p�I��&�<l��+>%��.��RY�ϯ-�Ik�t�
|�hk-��
s��&ٱ��2F�t�Q����u��ĵ�;��Um�ݶ�y��5U����@.�������Cs�F��U�����K:��+�������ϫ*$O_"\�� �+ ��t6��Rm���ZZQ�-��O���u�#ceI}e|п�`^��ĸ�
ex½��X�B͜2��R�!��-ct�LRi@��t�p��֨W3�	��޽}$��5�wf���p�H�؛���]��<��f�e[�>Cȸ��V�4Wq�A���&��U��.?����۽������>��K�����_��%���7�BZ��q�3�Q�)Um�]W��l��*1iSiN�C��k�ݮ�q�� �`
v�]MRN\�m�l�l�5zq�(�4M)��NS��F�e�[g�yd�s<��U�d�]��6*���o���?���
{�w��2��Vn�z��?4ց(�Cr4ʦ�a���e"��lL�}�+�J3��G;��w1I��*|+����F���<���MH��#�7|�`Y�ټ������:�%R�p2�J(� �8�㯥��E��R�v�]'�>+zo��/��u��[�7,߭���[3�8鴕7�*���~ӒCt��ZϤ��N�����ĻT8����>��ܠD����B9d9Q�
�^�ӸC�oU޷�ݿ!D�Wz���}��L�1�7���ٳ���̞��ӦĎ���ڮ��m@�9~���U�o�_n�N�2��O��!���~2�=>a�����Γ���؞N�y��\Qr��X[o�6~��8Eb���iH��i�m��h��(Z:��H�FRN��}���P����d��w��l��Z��|�ͷ���27��u	�˵�	\0���
�d4�����ri��ڤ���u�Whf0_���/O�[�LQ�˅�T(����е�@*��׫�W��_�B����SYV�8��Ի�ڽC��maA��Q���7�&e���
�.R'���K\�1����{f�6�2�R�d��
�G�Xˣ),j�,�	܏f���	�p�/��y���źDC~�b%���\�98��kS��S,�$N9s���I&�f8�N�p�#+�P��j+�2��*�<�5c�p'i/�"��2oh�a���2�"ȼqt(�V�ʅL���bG��Q^f0��{o�KThd:%72P�k��)��gƝt9� �K<�SԂ�"DMXJ��7��8�}G��Q:r���\��R�[by��%�$�q(l��"��Ff`S2�]���BB���@e��������[�ܺ�J����OsΗ� �B��kO�E������q^0���7���i"�>/�v�,QU���T��W�o�T�q[��ȋ[dq�
J�9A;@�y���s��O�W��BY7H�s�1�Ԡ��t���OS�41*�O.����B��x�|}J 2wS�DQ����Hӓ7�Ϙ�IO�}��^f͓���S�
����l�#�+��>��fnsk<ID���s{5c6���+d,)��x��+A� �a�1t�.��ꊺ��f���t�Q\/f����H�����PK��{��6mы�E�`��IJ�M�'~�B���s:�"ˁy>j�c�3��gAc���N�U���:dh�4�Js:�	�[�G��%D�ASRO��,ʩm��V��BO��j
FГ�:wS}ͼ̼��g-
R��+h�-�.�-lh���6S¤�� ���[�Xr<uc@��s��(�>�vXC�D*fW�(���M���Әo'��K����w�{(��Tx��Rl��/XT>2ei+�~.�y�L�A���[i<G�)S�ø���y����Ͷz�?�K�����$��@�Z������%�*,v6����2�]+?Õ�m��GQ6��{��$���#�\x��;MgO�-���74�����"�-�D'X^Q����Z}ڇ����w�4���)�A
4��!�-O �ʡ��lԱ�}��2�J�o��Zh������D������aV�hl,��ɐf>�ʦ��A,kZ$~���)���	�&Y��ir�!u��jʑ��c�F=��;?�q�l"��k��h�������j�t�P?ю�y�w�{�w�U�+%��)�f�Il+������Igӡ����p��]7�B��Ӆ
���+_
�󷂺ѽ�+!̲��P���žݹ�1���qc�J?����+���s|�A�k��A��ܭ�6�{�d�B�J�w����W����"A���L0ı�����ξ�x��=�	y�w7�.� ف�Ǒl���Y[��·#�P����C����]��#57�Iݠ�fce��~�4"|�7Lȶ��XYs�6~ׯX?4�|�q��4�Ѧ�g"'�L&��HHDM*ZQ��..�h'�IZ�A&��Ş�.p|�|�l�+��>����nr
��V-`T�����(�JTRqG��w|o%>�3	�W"�����%�`�g�#������D6�))aJ����X���~=�|5��+h��"�茕4��b�!̪2U��q>�������
U�(��rC�g�#J���xMJZ$��ْ��OFp�?�O�y4��񏲲��R�[A��tAK�E�L ������Y�-�1�z�`N��ia�p�Zx��K�-z�b�S6*S*�����xI�,��(2E�C�nFgg�DC��æ���UN�������N�q�Da��O��-_?�yyui9j�z	���� s-kJY9�4��-Ͷ�:张���N
H�ѣ����D�9mv]�y��>�X~=zuy�:낦\�
�֐�1�Y�	Z��i\�]dJ��]�3'��I���)/��Y°���穫��ful�d�b�wc�%3 ��5�l�z�
�-]���'X��$��:��l��׮HI������Լ�6��Ȉ�w$<���8�B����耢L5y�Ɔ�Љ���X[�)Z��쪑1U�s~k�v@$1�)&�eF?n�DY-�Tl�4�0J��WV�*-�͕�@��9*��
�s�+��>�촶��r���b=6�j"d����Z���
X+$E=���R�y�>��Bd���ػdL�`ˤAC�E%2 �9]��?�ɖ�\[n]o����zG�)%ش��&��`C
4�	��)��;w ���Z!�ulh,�1!���9�=�HNd�HKh�<�u�8T�[�O+y�/#����|�#��HjV��O��^ی0�^G##Tߴ�u)h:���;�uoz�1�\P�L���z"�j,�7��j�|I�Z�a��^jb�"�ҳZت�g�
��h���^l�9��Xh�.�]d��$���f��f21k��)[4��x|=ݞ���%)�M�ޟ&�$�.�P��h��{ߟ礜S�kC�/YAǭo�&*��F^�6l�6�\�L�P�)I-��T6�o��z#	'�:I|�/ɇ�X���|O�d��`Y�C���c����;�V����%��^;W�)Q3�^3��`�#EEu��F)G�כQ�/m�v��~�#!ȺI���\�\f�	:7��*�C���X��ruqo�N4����S���Uܜ�hqwR8:��*�ygMFԝ���MA�c�k����(QK9�x��/P���a��<D�1���!���?λ_�m�yA��8i������es�5���ma�!�Jh9δ%�S����kK��~���y���/p�gP_����6�;����{A��@q_;�`S�VOmKA����E!�JK�%RL9��#�F74� ��"
�c���Js�t�]��S�����Tt���2X�Z��� X�b������+�n�ڎN������3�A�ĻC�Mҏ\��ХI�B�ct�Ok�|��3뫞v�֛�2ɘ�,��*�Pk�~�mExՌ瓂�s��z���a�	j5G�tp]ߐ%��N��[~�a��s��vMKV�V�2S>��X���lZh��s̠�/���ֻP����vo��%�Ó$���K��A.J��Fx��\��{�fR���&4��� ��W����@_�4SA�@pv}}5�ܼ��`�Q�!_��SWքG���d���eTy4޺�Ym_}�b���m��W	�/�{��ܾ	Ճdx�O�-h�U;w���u���B�$�)xY��ks�6�����ؖ�~��^;w�4q:��~�t<	Y�P��,����]$�z�7w��84��^�]�g%�����o��\���*r�`�+=/T9d�Y�hcɔ(�z����\
V̘�˒��J%�%E*��P<
���M�gon��J��	��D�pLϹf	��T �Y��S&sx/���ۛ۷l&31<:J�03��~W�w�f�<Ѳ���1��?WR~�a���dr!�$_��2��#����d���|��
�\-��J� +�fKx��G�
���R�/��ƾK����|?�76��~{s�� �Q��%�R����L,K*�z����y�f�~=�	���K٪%�̀��|�9+���)+����b��bX
}�{��S�X%���ة�x�cS1�	my�T�D(n��w��q�B(�OB�TN,��pK����P�E��
�\��rlQm`���n��{���9 �����[��Z$F�7.<;��u"B$WvA�̨&c:/�p4��\��"Y#��~�b=l�2�M �w"C]���-�4S#��T�t<O܃b��I��Pf7`����������\iP��9�
��3�����
�
���hm�[�d;@}���m=�g�|Ɏ͓{B�>ݩ�;�c�g\�x���n�����P�WJp
�Y.ֆ�vu�8��H�xÊ��_�nC?�������/�(��cP��ľOZ�}yw��S��u �����=��7 ��! ���؊���߿f�z��m��#5�\j�3�/�P�-EKR�Y�ױ&`�������/�������c��9//�Vr
Z��)z���w����&�L]����������#�0
�)�^>C|����\�h��E�4��~����z�t�����f{a�,������"-��o:e��8q�Ϧ6�~�6i/Ja�)�;]��#H�g�Uw���b�rF]��
����S�Hɜ�,+֥1L���f�"��FrL�Zp�
ZWs���(���gj����;�ڮ>�8fb��S��U�{�

�Ce�I��N.�4�Wm��a,��8�i�D���
���'tgj���_�j�]<����s��<Hp��>�y��6�5p�nz2���r�I�a"�J&|I\�Y�P�H �Cl|# ���b���׮����~cd'�m\@1
���6w��c?�
��6��P��.�1����XK��տ(B�X�����$fE
o
�!���/D��G�9��3�k�?��n�z�}W(�>���
mzu�jݲ���ٶI+��X����{n�٬V�FA�������U2
�L`Ѕ�k�������3�q�BA���U2U*!E�����9Qp�B�5jVP�^���xw%<wLi`u��0a�o���xOr'Tփ�CS<�����A��Ӌ���
�C�K��A��샴�:�b�e�n�������O�E<-��;���ro����V˔��Ea�2|+��'������	��	n�|3��[�j�W�U�}�gШ�=IsG6/Fx"EQ�P�et	[!*��F�N0��TV�`=�ګ���$��������.�j?/{���,{n��	�I�G	�ih`�m����~f"�|ƾ�}�B�y�F
��z<
n��m�~�'��b�=L��'��P����IQ�<�|n�8*����r^(��@᧔��p_�8�8Y~�	�Đgt�}�����H�Z��4��S��T�f�Z�<�&Z7L�X��!<���܋�0f<+�(؄�1j�I�FWFP�^� x�xeY����Mp�T.�s�2�+b����o�tO`Z��o�P}	��+�א1���]_�fdw0F?_����"N����ι���ܣ!�*t%o(��ƁYz��i��~x��}�e
>���C"�T�@�j#l�@��Z)�
�"Ϟ}pTx��\���,g��#���k�ՠ��ޏ��P:��S?�UF���D^eB�
P2:w��d�3��������H3y
�2a�j�-�ë}v���Vƭ ̗K�V.����j�S�3��G�͛=d|9�~:�X�@䪊&P]
A��|���ѿ���[�ڴT�r�U�%��K���rY`�@M��\9�f�U��zN����&��󭔐��X
��USU�u�
G!opd�^K&�K!��G�&6]-�B��(K9���Ϙ�JtP�=i�sD���)�ӐMf�jL����e�
����Hh��t�(
��_�1�"e�6!>
�v"d=�q
�*��;�X�c�+��y��C�<�z�@�1 ��B���~3�%���:�K�$�����c�j��]�c���C�T|�N��G�W��ww��N�D�2�xf����h0��f�lr������,�ym�m1����HN�f���Ms���O���W�����:9]�w�M�+K>�B‘�i�`~�]	Φ�J,��5�Z
�(���\��[�O���pr�
�Ҩ�S7�Lh�f�{�|t�*e����
JhlfgHg/�%s���8�΍_�	p/�ﱓʽ������g�@/������&�do����|G�b\���9�Ń*VKGG#itvHvV��1�S4��#ix�����N�E��s��z
jI�+}L7b��i�mg������i�	��l�o5�%<�cY#*R�I�<�?H�L��;vH�a��%��m�H������e�����؝��R�{�,���-eG�N_���d������j��9�1��w`��^%�.�9�%�R":�v
��Ok��2ݱbM�@>p���O��SK�Y5��1�f������G9K�b�7�3p��˸�������h[q����;��zȓFE|Er2j�7����ŨoJ���d����^���\nH���y���
ff�sG�f���{rJ�ZǦ��Gg��8>�
O�3������k��Z^��
�LP�A���N��,h.�Ǡ�W#s^^��|X�;�1���)�^z4�� ��6g����T�Tl�F��+�>ka7�A�� ��r^����^6&Aΐ�y��Q�	�T]s�`�˗VZX�s��`���FK��TC��	�V����vm��s=2���/XQw���]^��`�!��|��l��c-� D�l��2�����&���"���]��,za�W4��Ma�HL:���VLڈBo�i�wu:E��\�*���P��i�ϛ��sIY�ŝ��4���i�7�z�1fӽG�ȟ��L8�H0]!_��w���tߒR��y�%T����ڕ�'�D�<>�F���j��w�u�瓘@u�Mr]��Փٍx5�z�ҡ8�����=�|�C�6&�b@K�ᛏ�\�m�Ύ�����������SCE���A}�6�6G�ڶg;:��I|Y�X�:C�[BQRԆ���	��<
�����N�[L�ۣ������;b��v*��.w^
��.21��չ|�g8�i#tǽ��/�;�2�G��
�A�5"G,5�L��oyt�畨M����n�J�����~�כA�4!�u#v e��h?*S�+�t`|v��nsK|�����\Ko�0�+�	ХٮA�Ev�mz(��N<ǘv����'�zP�l���(P4��O���X|vNs&>�Z�@v2�$%A��xN��W'�֮��B~�	91l��'��kz�	�6��0�Ɠ�(Y-o~f�TB�[��Ӡj9��2�&ـ���fٻ��1�Y6�U��
����3��g��z41�H��ʡ�on"��[� ��z���"��ZX��Uatx\��^��ө����!�[�á3�p���̓�e����
�ۓi��>"��'m_	+'|"�-��$Ux�y��$���r�.5�Nh$��C���P_�����[)\sJ�Bŵ(��9��1,4�E��Au�KG
�^Q[�Pَ�k�=���e㓫�0!B*���5�B�"�8�p���p�5t��j��Ő��?@`��ϻRw�)��*����ө��`�JDR5�E�5�Z8����a�p�e��Ъu@/1M�?���1��XH^�M1ԛ�V��~�,lQ�DO��[��B��	��� �uV���h��-��!B3��կ���Q	h�c�@y9��:�$A4�"�ոm.��?R,�{�`�̍ Q�P��+��ш�`}^U�a�Ed.�Gx���|}��S�i�3�.`��~!�̉9�hZx�������:2ŗ��T�&jC�{�2GzG�	}k�����@K��Uf��{]�G�wYd�dƌϻ�<���'-}���3�`��L�P5m)�$�p/�O��,WО���R��xS�(���ਵ��G֡pZ�Zúij��~QV'�>��~u����b�
����m[:C�s��9�|t�[��q� \Ez��]��158V2
������ja�4^z������*����C�
��OHs����2�y��GMc)��5~=�P!��\����c
5��������]�~��7���Ҍ ��䘽PI.�9|�.\Pb�e|�����q����B5�����\��0���xc�'�&޼�DIL4��/]�ѵ�z�a0��Q������|�/۲ig�=�#d���;),�0S��v»�alx��Z�C��?w��ed<�B��IɯW��Z����$�)6�ַ2Zuȓϕ�>���Pj�.�C�k���~vƨGЅ����	n��Ckzm��5��s?��?�=A��2�zO��rPڮ��=	��ն�|��r�k�|
�x�T�2E_H��$WR�(l��1���:�"�tv�@�{��8�
���+
,��@vG"����ɗ^$�T��){7��v�7(�������+��;��$Y����ƂTg��)�niy�{
$�9�Y1F���_ᏺo,e_�Du.Q��=�r���
�<RE���֖%ё��gm�e1�X��
��D�d.�uN���̅��ek�P$�h4��
��@���>�o��F{���/�����\��j%N�r��b,N�D�B�P����w�υz!�e\�BWy�D��J��7�N婚�ٽ���g�Ey�(�đJaZ����d*f
!-t��E��J�~uz���\,�D�wv�=����'B���ZLt-�O2�'*��D]�w���tI�ԝJu��T�‘j�Š�ʳ\�4؟�E�q�������.&BЪ��(ܬ��1_� (
��y,�L��˲��Wg���2�V�W<� �g����:�VZ��N����G��4R��B��Ɓ6���q�,W���)ED'��O�p>@���o�:.�D����ƥ��z
(#Q1`�N�3�%d|q����#L����{��Q�1Ψr��L�EQe���X�K����j�1��\ڂ=_����*9�-e�v�KXO���m7�]<�x�����}�-��pR�N�p�g��A�oR�#��rg����910�4&�}��Z�⡎!�K@n 5�*R�#qR fT1,��.|�T��a_�e�d&�Vx���r��KdH���	V�2��!!D�Ѐ0,��8;p!�o/&p��X�L��L�
���d~�5"Þ��	ȎX{�d:-b���GL�(qC89Jb9�-�^k�[�,>,U� s����q�K�̉�uU���[g�����^_������K>���8ر��Luz��U!U!#�*�3d�2������UQҶiǨ���(Z"0�?C��FDS�ȑL��/�Da�j5Ss��J��N��I��p�x0r��Ŀw���3��v�R��{�0E)�dH:��9�r���"n�|�U%��P�	��|���E&�h���J��4ct�3Ș����\�Ŀw���L'�XĐ�B ����pW(ۯ�Ҡz�v'�S`hy���E@P�yX��<��#3���ֵ8�X���%9+tR�pD`xAk�l��R�i|�o�B�K��=4E,�?u���m����O���\ޓ�2��9�.8R��{�����`'���
dD���U�_�@�;Il��@�����4`��ʈ\ecq��-<�!l�r��,�&��(�\F���b6�,�s�Ȉ��@�]lRs�)�-��-�ʛ�0jD�_�ˤ�C��?aa�}���`��V��Q�Rc��EiVDy<C:�7�_�ǫd�%J:䫬�6{<w+�E��c�p��=�*���
2>�
8dF��Ҿa|%��g��vl5�xI ����Xgf�&�2��f�[U��a�UR��ZȤP#`@��(��
Y�0���ϧ?]_NN�OŠ��?�?��K�r0�io���;yh%�k���G��|�.��[h0���C%ⅿ�5�����]�#M�p����~�	$�G��8{�#��ڱW���2PRd�X�yf`�KI��n.;�J�?
&Kw��!B(�sEy�5~���։�7ϻ^@��2�~s��ycۖS���L��	�v��[<D��L�(C��g���%G�BA�ѩ��)q/ċ��Z��ۇ���D�N���J+q�(D!eK�|f���1�=��1�/p���mD��-0x!�W�bI��5	��#���� Paq���k� �jǣP=�CDj$�����Wx=~��A}�غ0J�!�h�Oo~{�!X]����񏹜�|պ��gZ�y��кCD��T��;���k@1������+��#JE�ؐ(�q�fN��Y{���w8����A.4�xkt[&�J.$�1s��#K��ݾ�05P���!뱰i�q�+�Zk8���
:���X��?��.�5��F��#��v�{N�a��a���R�{���]o�֛v��sx�!r�o��q��
2�*�<�)GFw�����!w���1d���K`O���C/�Ov/Z.��:8U�*�aka�Tc�2��*�¼A*gY�ҍ>�ku��M���`�>�cq�>�0kZ���7gN�����Ҋ.L��B+�_���>"��3\��/�;��&��a7��s����1^A�o3��:	�K>�pJ����6�*�8�J[
�9����?9��W�̾�x
U����� ���U�������cqB��4B�<������֤�q��Ij7.]��dvѣ��|��G8��JH��g��Wo�q�_�|��ڠ��3!����GX�����UR`�#V@��#��s���<F�⦒9pʍ��J�α�P�f��Z7���9r�� 4�{�\�V;�P�՛��\�r�����d�C�MTh�x28.ɁIM�}��B15	�H�������CƮ��<{�N�cN>: ��9g�A	Vy`���t��+�q��JQc=��4(��r���F(�U�)�¤Y�9����f�D��q����uȫ���ߟ�N��9;!�>S�)��wv��`�NV�qd��}j���1'U�X��<����m/��?x�b\kv��cZ��A�*�JY9���a��V�\���3�����6�e�1��G�i�*0�E��\���Y\�c΢|��;ۚ���#Ld��hjs^zRg&���aN�!~�E�O�t��_s��'�}G�=;6���t��B��@��P@<��'AN@�~��s��_8׈��/�7؃w�}��U�y�Zms8��C�앪�%F��܆���k�=M�0oa�S\�)�t3dI�Sh8���o�$6udt�}1]�
Ab�A謼�d��$b�q�q2���!���v���s��<([�B=�(��]�F�*�I�+���P�4�J1���|�&ch�qG�}Xg�<*�j�lF�����7ä.('�Otr���W�T���J!�ķ�X���U,�5W�Mm��\'�ŝ�t�~�/��b��6��t0��4�dA�i�K�wI���L�Lނ;��=�.6�ۤ_�4?2IaSG�uJ�z=���|�_�,yM�N [;�b����i�\���=�~�hb�S��,��>;�|��բ�SG��O�#t%׊J���S4:8�TSa����5!Y���2�]z��Y��V{u�PLL2�����,�����I��<�$ɰ����A��	p��Ǵ0��Q��vw���po/&��_�tʁ+�`[�S�n7�&�#A)Q$����@N��M͔p���t	l��%��]��B߃@�L�����3�<n`+���tr��y�����PSi����Z皀כ���@�O�=��tJ��J�fY7"�[!�seK��}
�Ts$Qx�h^�M��G%�8	wQ0
�'I�s�� ���3!Ъ2S��a�8���!��ib��R1����!O]	,2`z#o����B����3nNA���e�A�V���r�����.��%h��E�������T�c��������Y1�c�\��	<��? ��qo�]$X��hv�����*m��q��N�T�u�DcD�ҡx��lS'9�OڿN�_�����oT�?�'��Ñ���6;�])�4g��+��̽�	�7M@A�{lLR�
��Cp���7[9
����P��͡g�z�?�
v��^ �Q-C�Řl�J���f�V��K����N���1����löC����W��)���+u��������ﹷ�k�X�~[c؃�X�u=�\Ę'�CJ:�s)�)G's�����	�����_���4���}�{V,�yO�x"ט�5�$F΀s����.���q?a#�ύ�2hR��yabw���['	`�72��3���p=ԧ���vp�Q�tB؀�X�.��;�G����B��ML�f+���i��yݩ�Y*��	��&sc�_&F@T#a�좍,�mtO��v!�b�|����M>2�F���*���kp���TȢ���4y0Y�P�S�͆��4�`��~�wX�bl��oi��ܚ��;O�����֓�r��W5��!�|�)�R���auz�]�f���NW���������t��;)��t�J&X��w���1r~jS[k��R%��S]IDw��ϸ�I�x'0�f�D�7F|'^��N�݅W �}2ء��78���m�˶��%X�XʼnD-*�}�X���h/�n.|p(����ߒb�rI4"#���4]ʼld".�U[��Wm��k�-�>��~	�݈�G`\\֞#���9��`��]�tQ����oQ��7B�o6+e���I_�1�&�{?~��g��N�=����={	=��Cx��z�*��k_�P�;s��DP�k�Wh;�u9��,�+
&���g+#���F4�%�mv�81��7�3Q�h8(�������F&���5�R �s̓6)ACl_�c�V�C���Lo�bd�F��3�x�bTgl�=����=T?l8>�3Y�g�:T�S�`�鼑#��a�
XF]f�%��П�A�n�WT�/�t����.A�*�‚N�g�ႁ���[s��]U3i%R��RQ�g�)>�G��� R3/���v^H�GK�Gxfc��{�t��C��!�=�vw�l4�����A[=��^��ثtV*��/'R��iB�1�g�*�C�,��&*��h+���r�3�U�s�=wڜ;혋�Z�g��[s��oc�
�>6��z�U�rli�/��	z{�9ٟ&?6d���.�q����̋�4Wb����ī����Pj?����[^���Z�|]����溚jjfdӅAZ!Zj�ry|��@�~�~Z�~yp��Ču{z���8�_�r��m~�#	�L[]���P���9�@���1.�0��B���yw ���@T����saiF��V����f���}��/�s� ��i����iF-#�^�74L,C�&�Ϸ"U໯��5#�w�݌�IԦ-
��Msd��v��!,#x	���&�C�kҤ�BMR�ݑ&�c7�n��c|Z�$3��O���Zz��Uvyj6��>���E�rM�\C�u>ɣΘ�o�0�pw�To��":M�?hڶ-�(<�.s�/:��i�	�]��O�~u,��r9��bH���|�C�
�.0�]74��[���-�V�o���"���^W[�p�K���0Ϋ��� ��[���b���ǯ��{r����mٻ�[~��2�6�X�Z�iӴd.��=��ŏ$V.���2�������L��]�K�\�F]�1;!x�E�x	8
32���mawY��R�v���
�;�����S6	��T�w��2D6请^p87��T�\PG��m�����-�����!$��u��ާ�3���k���|X��ppݥ�oh�>7����蝱oF6�?�s��͡>�u�q���1j��9H��}ả�g�j�ͺr$B��Y֙6י�u���\$�N�p��uW(���@tcðM�XO�����Iq���<�;_�K]�����܊x��>
B�\�a�>������\!��<��a��4�=�A�G�_�����h�J��J�m��hZ�[��=v�M��)�)i���z��[�Co�`k��$R���ͣpW�i�ـ�l��֭h���u�����x{pM�奯�7Og���X�|��^��>u/�/���I��l�]7�z�ƴ)}S.�l�S�?'5wؼV�b�H���=�m0m�h�=� ް�U~y
��O������虉G.��J����lq��p����p��fO�Qt\��NQ`��;C��?1mō�\*�)W��;�m�VNJ9�Ev�4�ڻ����!��_.�8�,��N��D���̚�T����$��G><�GSuDT&�LQ�*���fQ
�£%�>������LQ�reD��u��
��VYy	�b�x��#oD�Ԫ�q�ʔ޹[s�}�x�"k�"V�A���&}�ܘ�7e]���|��c�ܾ���/m��r�����]{����s,��f/|-�h4c�ך�Hgp��ֶY���YHm
��a�F}��ŽT�g�+�Rd���I��g�_��w��ee�q��܍���9�CN��I2���?��������ա��m��w������D��mz��޽ TL�61q��p�.z�0H�w4�1L�\�m�k�~v̩	&*F~����9���h.�ui�*R��1��]f�`�A��(l�?�x����O���WR~�9��=+�.
�<��Qy����<�5ݓ^5o6k
^��3��wM��ˏ���'%� `7���
���NSf�]�G/��4|���3�$6Ws�ts'Pׯ�ه\촱8�1
�����T�'�<ɱw���[Ί(ٷ�wڀ�O�`�����8#ޚ[o#�}p��x�+�����>���܇�z84���[_�rGS"Eg���=zd�%��Z�
[������1�,��Ϳ�צ�������A#^���g��y��t�>��N��[�<�^x��(O;Q6�H�#�Qi�z�F8�o�wδ6���>�k��}�״���)ïk���^1����Z�?����/I��]B�W��U_�Ṉ�}�4�r�6X�o���+]��3|#�7�v���Q�����ۢi�O�-@�[���5�W�[d[9+�`���Fϔ��9��d��R�S��� mg/e�L��Bjx�����`
���G����!ժ��/��[����7x��bή�w�8z]��a��{Ƙ.U��R��m�_�.}~��3G�	i�Ii|�~�7���+<�;��"!~G��>�τc@�^���E�����|�׽hjn=�U��#y��7��*]z��{Q�l
�tI�ѩ��?#���~�I�.+���أ1�KZaV�RE�4��R��,���\8�Ѻ��O���2ݠ�dQR1�����Zxo���E�_{�[9 p��F-�XXs�
J�L��ҫiP��qRk�G�[�~��Tp��A�v���I �@�bz`��"��o�1{#�~	����~^8�X��>4�ח�x��W���T�UWE	�w��bx���9Δ����͝=o�0���
��
�^�F�X��툊+eHR(S�{}w�/'���
��8��w~�DLks��7]��	��]���h��F+0߃xC,�$��Hlz�.�c���ҝyG�>f�s���5_=�2&�)K� |�qa�0=��8;�97��Y�Ô��9�z+�@�:D;3D���$��@p2z�)�B!^�D����&u
��R�I��"GQQLu�Ρ��GȧH�8uq��j(Wt�s���Z�>��hB
���%F��,3P*�7��b�Yc��Վ����3r���VJpΏ����F��V��rzE�A�d�
�H��$}�k�q	���=�dޞ�Э9�3������3w&���m,����Yxzm�?,����3.o�Ε��%��@%�uwn�F���oŘ��_2�����|W�:�EZ�ڨ/��~���XW�m�_�>��+j�j���qQC[3����1�6�M��Fdr��J8��i�������HfVf�7\���P��ϛwك�Բ�����E�>4�cb�5��NdBǞE_�+')�ii���ŭ[D����e�����Y��n��5
�XwK�7w�l����ء{r��������b�s��Vmo�6��_q���ly��dP�݀6�>CAKg��Dj$��H��wGR��vF����9�^í��F�s�t?�pq�9�mnt)�nj�kc�)
�Z4̒�z
�,�ށ˥�k�"�:C��^�(�`{�||���X 2EE�\.�B�i�k��T4������o�`'Lf�����ᚇ�z��wT�ވ�
�`eY�����R(�G�1E�I'��2F3X�(8�7��d8
�:T�)�UP	�dZ�,A:x@��]�.Q��m	.sq@J	;�����@A
{��o$�J��02Z£$�kGV���H����T;mJ���ҋr��>��HA���x�9F�(S{�)���U��l�� x��6o$�����R
��5�J�RQ!��z���U�ʤ�W
��� (�:C:�w����������(���K��� J4�m�� Ɏ^�&a׸8�uB�$�0Tw�Jr$�$../<�)[z�7�T�� _��Mlj��-�TP�c4�8�6�QѶ,�EVSm��J����p|-ԎΠ��BVk��jJ�ԩ�f��Lu\1�5e��tc�8�4$!�S�_7�ae䁈���c�t�}&A���V��P����zr``E�W�H}&t�[m�٣K�,��he���%<�
lp��w"�?Iq��{�NO`���	��3��)i�al����$��Q��m�7���Y
!M �Z(Ԧ]�ϩ�\M�����/�"�A? d�?ھ�Q���ք=�/�������A[�>:�
��
��&9-�-����8۹�x�km�}4q%��l����T�%Um�y����Ke~2�6��!�V��`+L�O������Ͻ��FG��fl���<���++4����/��U��2MW�#.��6�;����$&�ٴ��z�3?�~l�ig�b�y�1�!���-Z��$��Da���=�]�n��Q5t�@w�7�?���=� 9�w'�|�;$��]\}C�ms�����[g҄�����>>S����3<YW���1��5z�ȸ_p3�|q�.�A�':��i"�}���m��π5-w���-�h�"!��7NYw��A'	}?	�qW���>=��4<��4)z=Nh��wp�;xzj밇,�f�����}������]�wQ�'�K��f��4����XmSG�ίh۩Z	�
HU>s	�U�@!�|)2�Is�v73�����g�IX������~y����"IZM���@�SIS��T>��<�&�tEd7��H�$C�ߧ;#)S6U�L��@R����s�<IːF�a���d�HR�C,����H��q��!��%}�������U$�=^~�fi�3����N^
{8��}|Qq��_�-��E�a27+c+y~?����N���5�cˎ��*Hb�G�<2�ĝ.}�#����ڧ���r��7�Z��8�����ʆ���E�!Fd�-tۀ���Ɖ��7����\�r�Q��2�]�����lX*����q��&�l�3���S�K���]�(����a�Ld�To���n
�> �.c�
�B��'�8���W�*�04�8�������������5���I|���U8���耟�f�9�:V�'����K��KT��W�-(Z~3�Ci�$��)͠?�>��|��),7	�i(�"FZơ�R{�V�'��:��E�v��et#��n�U}�T<�Z�5F�/I#T졓g���ZVP��G��(1pP31�%Ԝ6��k�d�L�!'eHF0��ϰ,���-����:�td����m�<SnO9b�9d~�W�:�����.�'��&H�M��!'/Kj���<Kt�h�C@���Zr�p-8c�޷�kR�?e,�E����r��4��J�3����X�g�Nچ��m�W)|���<�oM�w����~�EGw:B�/�防��Y����|�Ͽ�=����c�?|Q.M�]��)w_�!����L���S�}�A���c���?����t�$E��W.��b�J��0�	��f9Jb$I})�8Wj�F"x4�0�&���4��%�H�;���}wy�[ޛ彷�����'=���;��\�����9Y����s�)�c�7�l��lq�}��G�"�.}�1�(��k=ζ���ۜ���
.a��)��;��b9g�.-�"㼛藱�F� ��4��u�
����_�kI������"�(K���N�ۅu����CK��8��_P��Xd-&D^/ʁđ+ˠs�0�XX
t
�?�;v���Tj�c��
c���h��bF3�����L2��c;��C:�aV�'�Q��f@��Fj��V�_s���0�$�B.;�9�l�3�[����ͳ�%/�t
��F��9�k�0̄�.Q{��C|�?���9n�)���ɺ�{:�G�����uE��
`bc=�=f�u���ãS|��ҙ"O��)���""�>f�M⿪b`,eش_��aK��e�s�[�U�
-��6dZ��:hèp�L
t��z�^X�e5�w��h�F��S���٫a�C:��X�f�� ��[��ݎ����z��tc��\��f�P��Y�YrX�&S5�T'O
�t��R5�����\+�1�T
&�/*��u'j�_�־VӠ����2u�B�P�λ[v��
�L��"UnwyS��︣U��8\�!�Bo�C:;{��nDk'��FS���^F�F�l��LH�(}~RE'o�j\-ln�n��j�M=Z��-�;�a�팮���!�v��Z�z�\h�C/4�bb+$��w�9/�1`���JV6�p����#����&�J�Y��?F���s�C{�3L,���$ZMT,"+ۖ%I$E�Bm
�zBW	�R`Z�)V�[�i%�94�тY��0�pM�-�;\��F�*�V���R�˷�^��K7���
��1N�1;b:Ɲ&�	ͽ8�I0�B��-���3�]��n����0Ը{\1z�K&�DSP+���}}�
�	>�@��&��f�.��1'���٥`5K�[����|�˟�a`��(���I�����ٗX��rTq��*�&�R�屳���2��I���r���]��+�����ke\��GR̺�F�}Z`߸zu2�$	.�����F�p��54atU�}A��W6s��hDdd�'
g�Uݏ ��y;8���������zە7�=l�
��ӻ@?�w����UZ�uu5�{/��Jl|Zﯯ���=�A��z^�
��/^_������3����X[o��~ׯ8	�e+T�@!Y�u/6m��n�A�cr$ML�pg�V�D���̅�(�M�j$�̙s�Ν��V�F���B�
��˳Wp���z��JT+���Ri��eQ��h@s�#���h�0��R0���L��υz�Z��7��7o^�)8"���YȘ�{N�檒9��9�{����+��������~����|_ި�Zqi��/?j�p�
N�[8�
n�V7F��/Jىc��E|I�G��h1j���*QC��Y\.�Dc�)�����܆SC�Ti�J���J�8��L�1��E�*�Q�b�*K�<�ԜÒɼ�ڌ�]��D�"S�"��"[�ᎂ�l_�#�6��MMk�D4�|��W�@���|D�]�d��&�\p�5��"J2�B�R�Af/v%�g;I����N/�vxdEŃ
�J2k���,����K�J��&<)����
|��0�����gt�Z�%��}@�]�4�Lrc�FYS�ҫ7}n�-�x����I�b9�#�t�8~���b���ۗa��}�c��zMWB��v��:^Ű��B����1�ǜY��)řY���11�&`�9�G�_ŊbC6�z�n�B��0��/$F؋��]*4Y��c����+��C�|��d�h$�(r�6����
��*u��o�ʠ'����z��lŝ��w��2�6��,(W2�1�"ڬ7�!�W�ay(:Kf|ŪŤ���1����'�ԭ{8��3�6FM��55��7�'��d��P�O����+�ry��T.�=B�&���A�`AX�K�W
���B�a<�b8���-�%��}	�%皭a�-a��
��U�b��̭py�>�����K��C2`�$#�A�j�ڀN��� H��`����A�P���@�71`\���~߮	�����Ǒ4d��EO��4W�P�6�#_v�FZ�����P�w)��q�%�"b�I��Y�&`�Z�B�a���c��*���ZQ���
+��֏� ͭ�d�J8Y�����.�G��T�R�蒥�b'���b�� 5e!l2��B(���N��X�lj0=n�9$Ϻ������O����W����
�J���(q�[2�m|w:'���O�bA��*�̣��o�p���I�
4g�.o=�>��A4xBsʟ�)������M\}.��WHС��T���I�3h�ǖzI���:fي#�\���>E)�\H��Ǫ6�X�I�x4{���S�mv�1��>�1J
���Y0����hZ�L����!iP�}gDL�d��w�9Yi�}E^�ٮ:���s�H�R�m2�k�ڶ���m��8��Gv�s�}� ��c�]�]���	
}�̀�H�8��ȋM�a��كss�m��
�0�
�T-�ߵ�̒��r��ud{��D�x��b������������MVp�t���]�\
a�
���m��_�w�Mg[�(�YV��]��U'#H��;�>cO��[�p1�݌Ouu���E\K\�
�\٩�E-Y�yI�}��8�۾��5vb�4����m��������-Fq#�����lrq���ҭ"��Lslj7�&��诨vZVf��O`�s^���㶱��PY��;�j�8�:"�oW�� c/@����H��C��i"�/V�k���О����'%d��ȣ"��3�����������A�^GB����y����V(|৔�P��rN���~W�8=�N[��
 �K(��8b�	�|�c��7�ԋN�D��MT����u_�����xl5jo�ziɊZ�V��~g2V��`9Ρ�5"߂�������ZL�|S�M�H�+Up&�8h��uɩ����č�O:�\���a?n]G�Yt	��p����M�au�ѽ�b�na,N���0� �{���5�؈�=��c�
.��)�s�@�X|�+*g�|��B�����7���@��<�i^L��87jX-��{UW.����[z�q�=6�)���C�ٳ9K��vC�~be���-N��9�1�
ia	�\�m��o������`g�Ba9��i�%e�Q�-�8����4i�l����֞Q��l'4<�р'��<�ƚ�SN�͋��Ƀ�юk�{>��T����	�.�o�M��j��B�2�q��W�)��m.���@^�a�Ӳ�M;�����A�@��#+��ݝ����cޮu8���㰫;��3�z�S��0_eQ~��0#��`�͈�j;Jj�vt��)�G��
��;��ſ>ﻕ��H��;-�J�S�#�BUf���]�=S;������l�G[[ǿG^g��3�E���i����;�w�mD����ݸ���ԏ���dUmg�9yFdw^��=��K�k�Åd����K~H5L��Zmo�F��_1Fu�HT��'n�:)�"/E���1V�JdCq	�Ҋj����._$�I/-p5�H"g�}����dg�\U�<5�!<���!�K%���Zd�Nk��JGp��*�eu-��`2�_�5�f���XB�	�s��eU��+����6�\B�Ų�e&bQ�T������Kx������0�rL�������:�KT��H�,+�F):+�4��e��)����z�Rk0
Z�#�!��\ĵ�r1EV���Iz�b.�l2ۆ��D�fS9S��ٛW�+V����T�VE�S�!RT)���$M��t�*�"E,��w�զBRQ$�O+K�����@hE*�%�%��0Vh:�eRT�
9���hQd�ic��I��\�P�
�X�U!Q�Vƅ���-�3V\C��kQ�ע"S
x�3��O�YJY�߈S%g��
RcJ}<��մ�G�ZL���>�`Щ��#��k��ڤ${9ږ͚�Z��RR���Ȋ�PR}c�7BcҚ�u�0����"�M��(KQi��Y��T��~q��+ͯ��&=ͪ���psC?��d�6z��Ӫ��6�߮1�9o�pdɅ1����&c�tV1�^cA�\z��S�r)�[�c�?+e�a�L����
>�V��"3��/�BVd����'�D��0cL*�q!?�1>��񵨶��3�'���e'}6��{9e<��J^9���tEe� )4�{���X��ua��V�Ěg&���Ys�&q�t����Jĉj�i�)5��G���Q��6UU���kA�l�&.!`�aX�����P.@oI�d�t���,�w��X����#FG>r�=Y[�H[I[�0�Sa��5��՚��#TQ]�i�Y��x�/�Q@��P�n`��
�~���哭��c-���L�8�99����q}'o҄?�v�i��B�L"dR"�W#�%�Ɛ{��0t�@K��3+�f3:��[iꪠd�Y?G�3�O�뽨1�r�7=�Mτ����1le�Y^P`�����^���m-o Kഀ�(��9��Gt��p�c漢�s�%k�z���7�Xu��~�X�s�;fɎ��k�ެ�V�(M�r�f�#v
�mu����5�ޮH��d�L�j�ޚU�}�~�G^�
[S�
j�}Zk9����]��r���9
�P�7��b�bi���<����\f�i*�ez�%����&�����C�U8k�(>r>�4�=tT#�y��9�(Mq����!�
�#��`��$'�3�������C����Ͼ��s~�'��x�G>��:��~����#��C+y���N�Zc�s��8E��ϐ�	G[���T��<�V������H�NK���4�.Mh)���~�\�,��:/V�Rܲ.��������=��P]� ͜�*ьsm!X��v��hU��6wg@K�ϗ��������s)`Wws�38��YM��CO�9��e?��e�<i�E�<�!э$Zsq����Q�a3\J�h$�2_1�x��,{�5��*h1�A���(��/*_-��W��1�<��&�q:6��8�(�O��޽zIýiV��U�cY�
��>�uB=ـ���ԽrI���y���K~W�f�����{s�?�l�$UcɈuis�5;��5�l�⸵��O��L���ç|h9Gd��ʛ��IB�h�Uڜ�Y�DM�/��ޓ��n�M��l��:�q�a߳��
n�e�)c��ȶP:n�i�
5���U�^��eۥ��=v�]�V�Z�i0f+�A��L��h=X�/�	�s#f�<�w����b�`��rb;�����G:ۙ��Ep���`0���c�^���Ń�f���řܦ�g��b܀�9��S疂N� �1��d�I:��%FT!��Z��s�]TC)+R��_^�/������ǡ=�8���S�v�Ž!(�<_�3�ͷ[U��`C�;"4�Ilm��tJ�M&p�9��0ٴ$o����ӡ���Gڂ2	s�J���Ԭ�W`��9N��'`u��`}Ry�� ��0�\c�_|�'�A��B�;u:I���2D>e{�Qv�5��j��"�Н�M�+pJ��X��#��.'�:|��i��V|pV&aW��������lJ.�9J�<$��?�Z�?�W�_>M�.����Y���vӮnFE�������mE3��>vt78��=b���Nb��B�������k�;lv�2vv��՞-���_�t���6��.�����$�|�U�����w��6��7{���j�y݊n��	nsL�r�*�p:���f�x?4�k�|8�
�m�>�����U�.���A�s��PׄP�P�v�}d�;o�R�c���Ν!S�`sv��(�"���ﺼwN�:�玡z��g���:|�%��պ���!
l��S���_ %홻���ݙ�7�.dGp�������Ǒ� ӀnBURka/��+��Ld���m��6-W0�#&Il��j��C�[|�z����G����s[E(����[�0��{��l�_��X�ߍ;�Hf�p�Z��Q
%*�{>��"J+9�m��1/�I����@�<���b�}�g(wa]��,�>P�\�F������1l�4�A���p	T�G~�Γ-������^��
�.���B�c��oĹ������_�6�>���?��W0]��CN;̱�Lo��w�3���ʝ���u:��o�%_cbW(%�+�ˬH�r5��]м�	0��d'j��sYH���A�W|O��#�?b{��P"��sX��Υ�bUR'��xޣ�X�-�����0@�'=��K!��V[��:~�WL{�&���q)甲�"�Bե�GBhe����v`і��;W���CH�|��xƃL�� �M��
<x���KX�&�̶I��q��L*�i
FP�����`��,'
TVȀC���s��<�����x��!�&��c�!`֜,EY!BH�s��0�ή�%)�{��ӧ=x
�T\�14|�eJk�5ax�����otP N�#Ao~	���l�T �� �F(������A�5�l�0P�u�$�½�2�#(C��T�	aGr,%;�������i�l�`��$,�P�G�:V�k��**D@
�9�~��u��������R�	���
C�d]h$�%.�-0$J����xPܳhhm��~*e&��A {�D&0y�I"p��m�[�u!�_dA��B��lC�GCX�AT.b��a�Df/�W�%7���/~G>�D���������ܚ%�{N�l��{�`K�
##�
��s�a�ޱ��^)�%;���$��aR�}�c��seX۱ֹ�@I����r��;��I)C?�8��e�ͺNm����7x(P�r<ohL�64��p����j#�f�2q�Fn1���ᚳ�wn��O4��@�S�(<��x�A����.,8�]��b:���Xn_�D�4Q�#�%hJ����`|��Zr��:�X1���1�xKD��
=�?�g��i>{�*��a�}ߞ�#F&o�lfAQ�rdɷ��,�E��e�i&8U���BT�)����!����l�IS~��F�C8;K�|'���VK.���<3МF��`������jKZ��]?fj�e�s�.�`#Z�"�6kÖ�w�f��,+c����6�{�޺�Q�>r��s
��IR�mXL����`K��a
��)��z�r
ϥ��7G��h�B� !��Gn�|x��g/�9�i�A8��1M��E;�U�E���?;u�m
�R���6��v��҉�A>2NN+C��f��bUu*��B^:��6zL�;z}��=e��
���ɐ�r��v�D�a��,W��ey3���4ᔞq����Y�`�t+�^�Rm]�ڐ��n�#oXD�H�Ӡ�=yl��i����'��V.�H�@r�9]��I�:N��ڥ�'&6ul�W<�.C��:���Ӆ���wx��g*^�%N�-`��T��V���
�K��o�!Y˜��.XZ]L܊8s�èߝ�M�� [y�X`m�2s925?��^Mg���bz�j_?��W2\�I4��[[����R�q�oCyp�k]��`;���H�mY1��'����_�'����O�w��\L�{���G�Hu[��)�f��N�/�e=\����5���"r��v��W
�e�Ko�@��s@�#�
�hAI#QT!D�8���I�e�k�ת��;�vBk=��^u
K�
^��߾�?�e�]�S)6·
.���c@@Uu
���v ��%�t
�~��ޢ��>�/߄8�%ZJ��� ��-2i�U�-�����o���`�'~2񠱇/h:���]�H%:0N(����֩DRC$$�����
:�G.���{�v��� �s<����W͈���ؚ�#z�7���D�5�(W�
�����Ќ�����ۤ��j���<7�ѐ��i{"z�ױaY��>/Ie}\���u�*m�<%.o���P���d3.e"����E(�Q3DK˧�Ж$8�.��i��w��g�海�[��l�H9ZM����iӺ)��4\���ܩ�d���	�c�or�I<�(w��r��qt‹6���{��^���e��r}e��V�윟O�ӂ��c,g�qv
�j^�r2�hc%=��+��W��N_U:�I'{�̷/G��a{�=/N
[��JtZ�l�Q�H ��yI�'Ѿ�%���Z�s�6����v"*��7�ͼqԜk;=ߥq�VھS�24	Il(R%H;�H����.��l'��]�!I`����.pp���ŲL��Jq_}����j4��xV󴞫����	�Q�)hT��.�u>88P��V�DU��(S�e�U\$Z�qZ\�2׉�Z�H}{y�o�e�U��:ǴjU*�ru��Ҥ��D�9�k�����婚����/��(+�>2X�:�M�.&k5��ȗp�fz��9IjQ�.�"ӧ�:��iqٚ�ȟ���<z�@=R�G�z��u��E�L� �C�9��e:Y�U\�IJ�V�TUB"�J]�e�0�!/Ui`UZ��q��\�����Z��B�3���,���8�������h	�Um��V�T�f�!{	����f=I	B͋j�|�h�y㣼r�@+�����-�LGy���Te�O�kU,�7s0M5�p�0�̊�&Q�ե��*���y
{h!'��0��C���Z;�5����Q�-ؐQ�KMj{��͋�|�\h�(qTԈć�P�d��)l8[�!"LD������#�P�ǬY7�����t��N�LW���56Fx�^C�h�AV���~}�zOUZ�Ț�g��.K�x�r�)���֨iV\E�99�feA&v^^�l�Q씫�2x<����m@��_�}�	F��̆¢X{�͋��Da;��5�f�*�7	����rn›��#D����PU�J7�������k�#�(c���k�)�J|�%@q�\��<�͋��[��EHj����Z�P�9��MZ������o5���RS��Nu�#�~�N19 
��x�Q����V��^���������7��Ο6<,��4ծ�/�!���k�C|
��BbM?j�K����Q�zD:`�-�E�q��G$	�H�ڨEYL��Љ�FQ�:���ҴS,��i�#�"��.pq_�"�_�oZ�lE�&Qft'���^�lv�UfML��mkv>Z��a����=�H�CB�S5�0�kŮD�N��6	�u\��>�͖����c��,��‘5��6C�3d�Ja6I��`e�Oav��:v��H[�/�bbB�I���7�YtM�n���d�.�m��_]���=�Keln��~��/��ќ-���ѐi��8�9���pj�\4D�9�4��vy���s�~iyeԼ�n���v��ak4��N$
Ԏg$i�t��En��&�e9͡�(����}�� M�-����+��UƓ9�I�5��R��L���K���R�z��tUc��XR+5#�����C����U�>�h����>bۂ�B�l���ߢ��.�>�v�
ںꫧ��D�5:?9}
n�O% �Xl�^����:PW5�r��`o�@�S�����)�CUH 2|�ſmf����>��A�����ҪIhӊgP�mm��`J;��nD����,%G�`m*k�����띝���+�z)��i%�Sʢ���
m͈�s��}j;�zq�F�'��?jc�<73��
"��Ba�m>wg��ڷ�ڈՑ�Э��Ҁ5��*�D�[�H	�nHW���s#g3��9�v���LE+��}�ʼ�̂�����'ע��<���Ȳ��򘨱�y���U�x�@-hS��>�љӄ7�i�L
����i*ԓ&h�g�;�ׅ�v�$�V�8����
�m���@֖n<�p[�0�������?�e�_Dœ�WZ
`���;�7]5M��"}t���V4�5>GUծ�����ʒ��^`z<���+�0�?! �E�$~�4����fc7B\��X�0$e4��ib�H��U7�EFI&���Bqjv���m^O6}Ɣ����"�:Ϩ"���j��J.�>�XЀ�qޱl���%�/�r*��m�|,�'@�s0IH��o��[���}#�H�;�bM��]�vȰ�_wUNۭ���t���;<���T(Lw���% �e�J�xK��DO�:��V�c}��˴3�
v�?��F�mV��Oe��p�(�>IK�7��j�r�ʞn�lT�\rq����s[�]�^��gw�Jj0(�l&��n!�Sá�U�k���y�Y"�����$f��|�j�L� 
��*_8����Zz.'	����PT�8O�	x���O&��i��2Q��ɒ����إ�+�%V�ߕ4�	�N')fP���^�"�L�dW��ZN63c��lf�֘�`�*�^
��N�8圵Q�?k].?HQ�us�7�(�葾��~'�v�RW�S��//[O��yj=�މ���>-o\jj�;%;��r����}*�~�Ҝ�t��f�7
��:h�(��*Q�P�����x?����lW;���vv�1F�^�K�|����M
S#["�m~)m��NGJ����V/�ܸ�iu��/_Q�$Bz*�/)��⬷�BRUZ�Nè@]�� ,��-RRB���Q�sq�Ƌ�_�1b�����gCng���g:��Γ�P<��@Vi[��3T:�T���� ��&�6$
�.�x諒���l���I�{��Ӯ��d�� ̀�s"�Ko$�������D3���1E�D�;V�o�k���xRSTP��xO��B�=���N��V��X;�'Hr�
���Q�9���K��Ǟ�Qa#Ű!�irt ��(7|V�)�/�m�f7��Pq��D��P���+x�d*��l:!*\��{^@�iN-b�N��u�6
?�J��Cbx�X�HU)r�V��5��9�s�+l�F�B�ۮ�<���J���D�V���؃�y=�ҥ�6h��b:��]:������"sd���t'��V���T�:���[���:�u���n����TmC�.E?r��G�[�J�K=�N�+!�!��m��P
K��"�X�00�܈"J
K��Wԏ8�%�'D���Ya�q�P}�����������-�D�;Q����QW�d"A�kz�Q(���&u�����-����bc�"]g!�b��]�s]��J{�V#�)>0����Z�7ׂ�V�R0�#@�-nB8�<ul}s�ó[��e���x�Z�]�t��:v��M\Y6*��J��~�r�5Mbr�msM��\�_�[�sҔZw�d�Q��א���L۝��Q���t6먭�[���H�����@�ĵv��������.o�����
�prxٜ�݇�K=���v�����i�ǂo[��p�@������>�X��.�v�߅�G��a>������}�^���"�ӞG`JK.�$ϖ��v
Z��4�]����jA~۴���iq@�RxO(c����%����9����kt/CK-8xx0
���׷O�|ͪ]���ӝ�$����{�?��a������\JMTu�i,V5�uLwJAH"�	G��)a�
����
y�K~��D�m����"��ԉ$����}������Q�I�~k���_[$uN'�7�=ח3�����lu/Þ�
���=F�3��Ӡ��]:���?n��2��
�S0���<n-E�p�;��~��_z�^]N��`
J��J�\M�A��(L�֠��t�w���R�S�ߧC�Ζ����7��"�w�ύo����p�������ƿ����x=�����ߌW㧿�ى��/�t}���r'<+p�*0.Na]"�O�/]���^�_T��[��q:�j�n!�JB~ש�8=��:ߏ�2Z>��Y9����Io���<���V'���iγD*�%Uo/��-�����{�ݧG�r��:
�C k��K��i�[J��mF�+isf�X��&d�9V	�A��g�uח1
S��f�?�h�9l=�f��Up��:�bIj>�p���(OH�cF�8�u7�E��4�gAw`��ڙ%�YH�у[�H���]���,����X�n���ݺ�A�
eś�0��]O���>F��ߠ�#��#jZ� 
$c��	�F��-Vr]�V#�E�z���e��Մ�=�L�UB٨���\W�0�tB�v^��k�j}�2�9��u�Fr�����qXFg�g4�u�t7�A�^ESi�
U����G=���at������7����1"`3��Y�S�F��_�|�e 2p�pȆ�q�U{���V�J�Ƕ�<��Hf]��u�K#Y&޺�T����~M?~�=p)��̦�N�O��3�3)�Y5����	�b��s�D
$SL.�8��A1(g�%*�2HŘ>NłI��0ZB���^�˜A���#[9KJH#F�&��c�8�g�����5L���{{���=8�{�P��C61";�2�I�ΘҼ�k���.��Bnd��Hd2�׃u���I�K��e�������#yQ�gΔJ�>dһ����y��y��:��Ð��$Y^I-w�7�x��(�_^��zU�L=�f����M �V���9+�I�л�H�
Z�ƿr����zpX��P��O����`C��5���m�Ԛ�o�F��Ts1k�o��������BFN(Ѭ��>7~f2�d̥�v/�j�����l�m$D�ފ����|�FoĶ�
t�m�0��+��w�
���_��1ex�aH�	��#��+g|�F����T&r���9�$"�i3%����Ou�0n��1v�s�G��N�!�j��(֦��)j`؛�ה�@5�c��Iy�nT �0��!���)�c��ų�'sK����D�~l��!bR:/m������7)<_�O�=�$�Ľ?�!]*x�8�M�AC�"�+R�d�L�o:�lk�%��Z{M�͵��Q0��t�&�)JQ.+y�4�sϭ}cYN�f�j�6�<��8g|�5�Ÿ8�CGM�Gho�|�C��*"���c��'��)�V�ݧ��I�<�ǵ/0�U
s�}�z!�Y�;�^3���9~,N���D�#S��P�۳ж�Y�`�J%s���M�	y�͹x�X�3!�V�7������}W��?^�>L�6A���֙e�̖����lk�!}�A���6�=n�Xo1�Y�ݦN픋���oxh�p�B&�`���xY�.+�7�����}�|���tyG�˕裎�y�l!��
7+6�p�'3d���q�uJY*��5�}Ku���beU�#�,�x>3!�U���բ���*��1W(���[Ѵ��xFR��@l?�+~��W�'�'1?$��I`I:#�$��:fi��~�l��.��Aۼ��)��g��_M���~�Z;�`�6z�(��Lp�Vj�G�а�d�G}�/_��1C�|�M�Ԃ�ڈ8����z#�ie�=8j�Ը9�<Ӫ!�mdS�}���!C=4��4Q�a��?���ǵ'�������\*��%�E��O��|���/��Z�Q�*M��	B�2���K�h)=ҡ?#�����9ǤWd�-4��=�j͘�z�1�K$�ҡk�P��%���y�mF��Z�-5,ԗV�i�P�;��f�4S[�}F�/
��q����l��inC��&�T�Kàp&��C�+E��F$yTC��b=�_.� $�ۭ�M�Ʀ*+����X��Յ#<��V�@�h
��!Sϴ�ݚa�'�c�o
���mz�`�a�fr�b��ʛƯ����.S�	FGe��8ex[�9�T�j��p/ !���B���k������L� hI:Qb�
�M�1�A�f;�x����IO>Γ�z���)��!�&3�s8�"�̬Fft��F��X�f�J�Yz�X���V{9�=�i���1�l�oi�uB��Q���'U��\x�gJ�O><�f�6��1�dV��d%��7�dU��Gpr||l�",%wFRMe�b�v�⧲������X���g[�e��EC�'Á���yQ.�n�l�'j�S2��B��~49��#��el���<!"��pQ){���U��w��P,�m���V�J3�s1�꫘��{�`�F����-DbvD�.+uN����;��\�����>]��a����#�[-�_I9�%�5 �S|�l}�ә+w�P�u{��d�F2���I^��:Q�׮̶��ھ6n��p�/VZm�셰��$
�6�YW���5�8��G�G�.���x���)�L��N�e��)�-p^l|����._�LnX�6�|�}�<@Ԫ�p؉ߕ�-kï�r�G�0l	�X��>�_���3�}�܁��

�ݝ$w�|iF��Y�eƸ�O'��9�7��ލ�.*m���@G{�j�o�zlk�>��eC�4Jy�x�&�0�b~Q�b�1�uK�����ާ�۫���ؼn�˦��9�`�O���pS`c�m�9t��
@�OhiBPv0�o�6�5�b,�'7���E�[�m���EB�C��XL��ѹ�7 ٽo��Ƣ��n
�{���l|�|�3��^<�nF�ס�肁ݯ�ܷ�H�^���}b�kz�e+s�&��\[��`�;T��N�����}��_(&��U�n1}�WR�*�h�"U����P���f
^{e{���;c�5ɦ�"O�˜sf�3��Le���›W���"A�%Z�<O�"���&�!�_2�Ѡ^c&�aT6���u����+�F-1�e.�Wcc� x���l�,�L�R�r�����fv};���������[:�5�
��llun�#n�gB�N�	�6ƣ�$���X��0�q�| \�p���-�y�,�Ys[�)�%r��0<͔�.�ֱ�bJҢ�E�=7��Y�d�]�"E=|��Io4��%&lͩ/S�y��ֿ�i�U�h���>�"Cxx1k��^=�����-mo�(��BL���7��3T���k����[8�72VM��w5VSa�(����r%xo)v�/��t���;�K)r�:�$c.5��w�e��"��";{iN�W}���2t���UE�߃8��I7i&�R��e2����Lw�0kY�`tL�~���bт�x�,sLe=?�'�_K�U?��xW�w�-�ɨ��$K�$����H%[�?��x�H��ٗ3�@�wǡ����(.���d0�?Ju��E?�nNcv��T_�\ef��%_����di����p���P�3@�h�/��L�6_U�Di����V[@Au��v[W������U�5��!����ה�9G���z��\�P(sh�=�o��U`&�R�81:]cYT��*�!�P_���g���N�w��|���F�p�F�Md��=Low������|%�;�0}J]9
���(�Y�h�G�oa��T��+YZ�����XobF^�?,S�A[Lz��W��U21�8쾋f���{�ӒD/R�����v��Fw@P�e	��U=o�0�+uHTQ<(R�K��C�!���ȳň"�vm���dɉ]�n7�����.+�AL^7J������Z�p�e�Zk
&+m-�F�]
��o��h�_@55H���Z%�U����Zj;\�XƉP�~u
dp���J\@I6\�kPZ����e
i@���R��.��yЖ/9%�)���1��\h�ӀƍV�]�L�i��Z�̕��굱)0n��;�Pn�n�C��5v�K$kTiT�ăQ�vO��
}``���J�_m�����h��٢�om�w$���v4��[��
e ����d>����&�n>-{A9�d�r�,��	��E�u~IV�����lyl3_�q;���(�
|f:��֙)�7`����⠾Ew��\$���~#9�ڽT�6F8O}�74t�w�T�֥�^��ň7:��5�'���|�U�T��W�6}���p^��S;�JZ���v�a_>�i~d\z�ݧG���CRm0A�VpZ9��CH�H��;��o��r����&�w�Q���$���q|
�8m�P̆S1�_2�z#ph�i�;z5��x������Z����V]o�0}�W�I�H+����])0
�-Ua{���$�ͱ��@��ڡ!P�v��)��{F�j��|�Xx���{&�D��g)�2�(mBh	~�����h�W���`n��LG��(��j�1���tЩ��G(i�M���I�C�L�%�#���݋A�\`X�4+p'.t�3�shQ&9�:e�+	1gBM�	��\N<LFL�*�Q�E�1�Uf�.�h 1�P[>��hBkT.�X���e��&TKK�9R����g��*�a�	�q��	�{o?��u���N��:0�i@�����W�M�A6�$���q�R
D���Yu��!�����&�&qj4��0d���V��Si�u�$��K��T�9iz���b�dT�n�̄� �fiN~�K5�xфq&#'\p���'�#?�Sƒ�z�T��=i,��+��ìeQ��J[���pW`�Һ�!�_�y�B�������I�6
�#�6���7c�Gb>�V�o�~R�,�i� T����9C��b�lP�C�R.o�8�G�E3�b��a��Ŷ��]���޸�d)�.�̹����;��-��1�!v\^v����Y�೮�`��y?�tQi/n�7����շ��S2ܭ����S���1�ᗧ��Ӆ��>�
3���P�
�ay��;h"ͧ���|�)��.q�5�h�Ry/l��gz���a��տ���+䝢d�]�bȦ��z��2�P��{��>��@I��t���"�c%�"t�6�}�Q��YնB��)�b���Џn���}�j
�����u4q��GX�2�m�{�r�Ɩ
���Ao� ���KZiSko���e��KnQ�Ljj`��t����ؑEݞ�=x~����57�C��5�5W
���"x$�j��U��w@Oy�7�E��"�X�c��щ�
�6���4�d����ˋ=4�� ݧEs0JF��Z���Ğ�o�g?٫ѭ�f�E�J����B0�d4�WõS'cu�ٴ1O�4�>C��G
����|SWe�ؠh��̔���q�w���ò�-__�К���`�b�M�p.0�۽A���m���t;�?��<۾�;��ĺ�ݣ�g�\���L����p���S™m��x��f�h('[d�U��q���g�j���R��N�َ��R^N��':�j�߂-?iKU"pM������=͙1�:$�D��g�lg����*�A=��PRW�K���o��
�H���W]O�0}ﯰ�I3���
*�6ih/�\��ؑ�t��>;I���4M���{|��=�ӏ���D����B���J�p�
�L�&��DF�ԑ�x��^�D�0Y������
� A�YD@��G�e:�3�ܟH�j2�&��!�3?�"�B:�RuF�Ø��D\�,
����c�+)pB�v�l�F�ĨT7$�4���Nv[��3j�v��I1�*��K���CL�M�V�"i�f�3�u5�*��3�H�F��q�&c%��I���b?WPJ�Ƣ�~ c� ���ҬB}q�Qױ�L���X7�s!�l�˭���@/E!��1<��`�¹�	Aq�u�U|�stv�<��1US.�X#�stzVN���Y 6ì��q}Ṕ��C�24�P��ѕ��V�u�yz�,���8Y��ggՏ]��Hd�s��Fy���:�ɭ`�o��#��L=��xފ�����pUvE +F��L*&UL'�����~��
Z�Ӎ��B]Õ�Z��%.eٞ�͹m�<,�k�[yr����}��]�g�Ӛ���x��:�z����4Ҷ��{ܽ�,ۯ���X��[�vn\;[�.����Y�i�j��]����A������f��U���EU3��s�<Y]�C����nx�p{s��	���F������g�l�*�$�,!�Q�?��,�Q9\?��C�#��d�:�X[x��r����:��&{p�0��5�_hri��ǿ��u��?����d����4�vS���^�������&lY�����>~kS��w*�~�"{:֌��)���D?���q�[٧�_>P/{����U���ko�;��T�
X�n�t�ʹnC��k�ЛV�e
�L�̬ffqP��3�]fw?�Jɗxf�}��s�l'�j��_��o��)�RlX��A��B�i
H����-M��9��(�%�5S�D.c
�H(�q%�Tr��b��F}�w)��Ŕ#�^
1ᰠ��R�<����d8~;Ò�4j����Zp���P�2zom�Tj�d1Ѵ�!���l��Lp�5�+���*Br���6Tv>��8L��¯�&[������~�o������S�r*��[��I����^�]F�#�7*�拢)�5M
Hvo-X��mI����`�T�~3�����0�u*W�H�g?��P*%8I
��s�j�9�5��-��@���W���3Ųa%�2�b�	$0?�y#�g0��┙�
�f��&�I��{����P��@e46�	�~�b	z^�d����
:�7z���@�t��B�Ip�Y�����	Ս�F��^7I}���/a��?�<�b���L��Q����v���X�����?�������WII2E}.@�	��Z��\�J��G��bu(us��Uӡ�K&7Ĥ�3	���L�<���3��	���8N0�'n����6-Ȑ/v`<$W��+�JsK`Ŷ���-����ρg��#��J�9�׆��>	���zϒ���tqM�����ϴd|���i��x���y�~�Tu����]��*/�{�)�P7�Ĉ��R�9�S��~M�x�R"�[܋�E�4p*TP��w~}5v<�r�3[�����6b���1���{b�:��RA�9���$��c[7;mϣ݅�+�̿
ʊj�4�8մK����l���&��dC���>mf��~m�����K��V3
K�xc�I�6�f2�yD��2�v�qW��5�+��{ZQ-O:���8L��i�߾�}���K��ðٯ_��e�g4x�I`�;?�Gaz�����)>�Tj�e•&<��n)L���u�ڱ,�UR�z�*�<0�e1�<�m�,N�)\Z�JI6�զ�ip|��`��_}*\�D|�wkj�]S�L�2����*�U�#�0�f^��@ɊP�R�Bi/A
./K�W�2�L5��7���bd`���P�\���=l��%T�F��WG��m��^�^�<v;@b�4�h�M�o���ú�@���1W�������*���]��:�*ս=�V?)g��3FP�<��Ѭݫ��ئV��l���H�����6�o��[��4h�
MQ�UQ�OE�x4�UZq�)F��|�ї�U�����;���8�N��w��w_2�(V�56��,��(K\i�a7�Ȋ�Z�0��|��Ցǎ��ݧ48��2�'|�i���"�!��n�:7�z����S��O�RK�piĻ�~Ԝ�>?Ey�d~k <�η2&��:�ƶo�n��b�vx��sv�F�k8E�'�v�E�$��	��Z�p�(W�req,ܻ�t4&�{�n�$��&kwݔPAܸ��	���ݖ�&+��`�KVn�St���L�~�(����\��dd�z��ÍLe�'�X"`\cV��9������i�����d	f=�Y�L�-��Q�<M�����A!�5�lHX��T`�p���FY�v8N�=A��o�(�ț���+�1����V&j�u@�\һ��� ǂ���{^����Z\�)�Ps76����'Z+܋:MN杬���;8b6˖3ʥ���۪e��:P"�3�\Ti�ξ"5;�Q�"�wL�3qW��c�L���Hw�m��>�P[��8��Tϋ����W�&Ti��V�!rv�v��}Q9=�~�u��pQ����#��vH�"��>f~�j�-o�Npj���֭��q������x��TQo�0~ϯ�JS�
º�i�b+�}@�V$��Lr���ؑ�@#��9	��]�U�S�r��<�Te���»����.A�&Z�<Oa��Di��D(�h4����p����&܀Q�B!��Rk�#
`p��[�C�t�&�B�$�b���$?�������b.���ٙgp�L��渁	D�	����f��Uy5'v`�u�YJ��6J2!j�c2�.�Xi�j[|Ȕ�Ė�F��1��J)���
A�1Ș1��A��+9�(u�]0akN����yU�?˿�:s`H�<U	����'�c�EHj���qa)b��/m	U_�4_S�>nOo��p�#XXM��׾599;�ʱ{1T2�:��x����~j�t�2�V��F��J�

u��CQw!h���̅8";�hմ5��A���M�۫I;�-�����,̈́�B;��2b�wѮ�͇Y���g(���K)�LQZW7tK�o�Jd=�$j�EEL<I���S�Kܱl���B�[��?d{�v�Z�y���6@ARǨbr�u�0.�_v�;�p���i�Ҭ�xv��I�S��Pu�v�/����>lˏQ��4�ęNϻǼ^�8-��Z�i9��qo�w�y��p2�]������<���uO�0,��NV3v��c�i��UMo�0��W��=��v�$�n�a=�V�,3�Y4(��Q�O���M��$S�{$Ŭ�2F�׉*+$��=�v��=a	�4%�X���]��
uS]��d�X�� )
%�y����c~�PB�n<�He��
��ڽ (�GA6��\�A}�j���Q!����VI� �28�|�YN�d�����/��%���Y���OH#���B�[Y|$c+e��c���5�H]0GjsNZG�$�({��q�9!y"�%3h���W
�)�VK�E��q[��o���'��R��U����CQ���Iv�d_>U�c|,1�5v�J��5�I���g�N��̗�vq��0t`U�Gf5z'���Ⴑ!h��Oa��G+�mW�]�=f�AO�X4�p�9��;XI*j�f���w�7vB�6���5�ΉQ����қ���$vt��y�����;~�G8�N<�*ƒJ��nQ�v�J�D��|�E��**o�K:�����y���,k>.���%�y;��t�<d{�O�F��I�Dj%��M��U6���x=��р�3�I�-d\O��"/�E��S	��-�I��m���L��pվfI��0��6��~� Q��y:����x������M��0����Դj�BE�f{��G�.'�*י&��N�Q��8I�XB�/Ɍ=�>��1$����r/_ܼ��!ɍ.DU��r�66�����`Т�bq�-�ހ˅�+��N������50�.�G��A
���\�p�`�>�FW*�ȏ�~��>.g�� ��p�M�u+pH�:��`K'TքVDG�i��MM;ZAɬ�i���x�H���bq+tee
�Xj㈷Dc�b8'6�3�(��=Qx,��4�>��z����1j�{À֘3�6�e~�ZM;�k�K�*}2�m���w�[�C��w�X���1,���;ߖɊ��^�8�ϡ��J�w��*�b�(9�����wa�c}h!�.�P���̾YF��A��c�T��j���OOt�n;r�?A���2tseS���^�0��1�	Rsڗ��sߴm&�@�!l��GmC����N�|"y�1��%X���\j��S���jO�����E�ݠ-Q"��oIN��?�+�7�“�	޾=��q��]��0�2����XW��0^�t;jt{C�7?�c��ܛ�M~$?v�|NZ�	���T=o�0�+.iU�V���v
�![y�XQ<�H9��RԧF�j"y��޽�)3�V��l��$�YI��rY�p��[�����&m�t5З~�w�M�I9����.Z��.�	��J����?@j۴~^�`�M�f�Jq�H�Q���k)<�*�ν'������n��:�Q��Vg)I#�{AR�I]�5�d�1d2�y�.���u��A�4��s�A3.2&)���x�X�L�	!"��[f����i`J#�H+i����4� ����w��M<����4ɔ>0g0\�����IKwŠg����Fw��u�L��U���f|��&�y,c���ψ�o���&M�ȳԃ0m`9'�t�L��([�ҕN�v�
�S�H�^h�WqC84"�� �3r��-�-G�#�D��V
�����"g� V|�2>�K�՛�X]�\��ۋ���g#s�t�#y>�s/��~T�߅wÄ�˘�6s�F����RM��0��W<$�v�6a9 T.�m�R��Ej9!��d�;;]�n�;�ۊq$�x�3�c�Y��i:�e����;l*¼bS˶Ƭu�a�b�b��%�S�&Y�/�`vp����圐������5�v�_/&�u��dNڷ�J8�BcKigZ]@j�'<���O�%vRQ�$�h�`��Խ�g�PH�L�;�2�R�X��;���p��*�+@̾�&kEI6
h�h�D
F��2Q�����ь60!@c��[oCjG,r'�pY�٨�&��)=vLN��q�k�T���ӝ����?���mæ	��"�;�5�ëyz�_�R��1���1H�_���i��r7��c䉨a�,��b�pN�S�Z
o�����RQM�"�CH_�'�7iX�GS5��pMٰ܇EF��~nD�?0�����`Q�pТ�)�c�`Ƨ�q	�G�?�;�1��5���@����\o�C�\�S�b�(6���p"�H�H�0�5��?��v��
�}�i�w��/39��o�=����S���0���+tB� ����\gM�OQ\aI�ϒ�C�8ȫ�rg��6C��Z�0'�:��Zێi�Ou���bݥ��#�����Y����܂�B*�1%
��E�?$O��ӿH�2�����3oH�{��&A;��Z�G��j w��-�f�j�+`����%�	c:e^���`A�����L����YYYO���Zo���LJr����*d�o*zP��Ao�[q����]S�zO�tU�2W��hDŽ�	̪UŬ4
Z�!��س���^ř�
#J&����+���/ҷ�1>�T��������ue�+K!��6�,�t�%�y�&JQ��v��Ze�G�&|�_��.J���<�ǫ��%;�O��EA�4R�.�-}��b�΂�T�~�f��I�>|��TK��0����Y���مz(l���B0�5��ʒ)iL��HN��ʮN�y|3��HK�����U�}�J��SR�h+X�)��;,����tZ[�T��pI���o(0
�ʇZ��;ﭹR\2�7��&�Z)SF�Bx��A������r(�^��L^��g�T�5|��h��_)x��s�	ЫMh2W
��a��X��-A.��u@�=4�JH[��ʝ��(��$����CUk҅]�o��)�N�8��u�$mc�vcxn�x�1&����-XA�t�ܢ����8�@�V�S���{K��f�B�^])�KP��/���z`����ll�>�zé�1�M��j�℟��������y�"NAO�\��)�;W��q��8�$�\���F���/�d����^�����d�r�;e�
h���E�N���$Lć
���&�C������͋�A�_3Jx��g��$����|j�0�	)����j�r�oPTЙo"� �
ĥ
��(�����h����bH��@(b�0�2��.��:H9�+��a��لF���j�g6o�6�<��1�#㫛+P՞9,�K���v�3m��%���a��b�����j1��)N��x��E)�q\S�uB)�����J�H�v1~��d7MK
��̙�ft�$�Դ=��rx�z��aZ�iT�`ҹʰ�1�k�"&K��"���`�p����㜐�� aivĚ
d=Rܮ?��kB�r����!O52��t�%OX̧��z���)����"�n|�;E?0Ѡ���bj�jZV�z�@N��V�#H��X(Itg�!�#Ȟc�=�����H���t��c|�����S�-�-���ȞȖ�q}Kؿ��F���t����8T��ʾS����y��̏�v�ty)�!`�O�N�)�
��k2��Z�ϓ��:��g�Ԕ�>W$�s0�T;��ryHC[�g�\��v�P��_�X�d�%�Ӆ�m��v:w��A�l:�?θ�'��B�`פKWa�����Jr�r*����&lq��r�]��=�yW-�c�/`����n%�Ɓ���e�r���v?�_E�}��h��TMo�0��Wpޡ����Kl�e�^z
C�[�,�����K�N����'K$IM�ԏ`Q�Y7�*��Y�+kj̢̳3k��e��U���h���G�����F���{��[�鱜�sh����ō.�X�'i�{PM���b�Ikt�R�Ik�ڿ�H�
��3QQr%9�X�f�=*�f��h�6G�r�(
�
s�ҚgjD�X�i�"L��F��!��Γ��c�(�
::�w��Z�aL�v�&}����ti6�g�`J�:���r�$#گ;�����9��u�l)��9\^5��,ʲ�9\�Ė�	!u��.'{��������)C<ˁ�!��2�n��^��qn��2�r}�yr
�JnP��<�>�����w�ET�@^j���%�71�Nᬓx�[�'�r��E�	;u
�[����[,J�踕M��8��uO�	�)9{x���C�6�v㱝/�䏳����=k�$J\I!Pϒ��g��?�:)e�Q����=�#*c����I��ߟ����c:
"�p�����$���ҍ^`�%���ݭ9ж�U#RK�Qѱs��W���;{>���{u�[	���w!l�K��΅�l�����-M��Wmo�H�ί��C����N����+!��.���NU-���5^k��p��f�6�yɅ��/Ż;3ϼ=3i6�+���3_�Oo�~�������d�D�B�t�̣$�(�9�f�����c�E"]Wx�9�!z0Y����e�VB�]IL�L��B���4I�����z0�:�J���Qj��K��(�r�)�x���*����̀��(`+����jM�h��A�� ��em]R�:��Q��H�H_ =�O|T�a}֑��~;�Z�r�I�$��j+Z��](�Z`4�:�&���k��c�$�D����(ͤR���ʂ3��C@��HI�5L���A>��TTb�^���B�	U>|�d��Յ�">���Ҕ�D"�Nf`��}�:0�j����&M/b��B�c%H�MJ��dJ+P�,k���e\9If�+��_�z����I� W7NğR�����7�NB �7�s�a�9�}�
&�Us�:�y���J"3T�QK⥼�y��쉱q�'�ľ'�;�ق�����ջ�:��jnMӃn��:6���y̗��ؕ<��=�ʲ���)���L��n��mHr��5'h5�>���P���腣i��xɕ���ӝ�5�2"�tz�Ѡ߹o��E4��x�Xlsp�ި7��7<��H�y��n�4���i_od0�=Ց���~�yd1M;�j��ѫ���H�Ly�D���w��\�Y7�ij78TBp�>�ݟ�&��-�M(�p�4��1)����^(�0:��<O�XRL�i����2��4lnǟ�{�Ni����PJ!�����<�➾{.e!3�s$�"���f��A�2m�0	�m?RT(�~>]<a��}zD�������$pi��N�9�����6!
��M��"g��9%�)UI��\�띃�4�k�tB�?(��qBdcp�\{�'_��K�%'�&�/�a��˔K,uI|i�
X��LA#Om+�?�tE�-��ǥ��Q2�ӎ��IH?^_A;I׮1b٬@:&�=�!J�)�޺�i�����?�SYooP1�=	jkkL2�o����0���o��a��ml���(gi{���X�����f�">f�i,��7���]mʂ�r`���g1t�4�K�vh���YI�o����L���`˭=��䊐���iڕ){�g#DZ���#ہޡ�H��Z>��-f��G��-���i�@#O�,���ݬ[u�uP+[<�@\
���)h�ui�X���w^�5r��k��7�~_N����i��ߙS�xm䋑N���n��@v��z&Km�ͱ���{�Hvt�{��юgK��g;`9�v�V���) ���,��
z��@�����)N.�,(Q(.J�UJN-*�L�LN,I��M�KLO-�/�,H-��*V��ч���9�B�5��SMk�@��W��ҘXJR�A���-��qB�Boe-�"�jW�]��=���ڭ1�훙7��#�0���Tϥ���G�%a\]Wm�Q�Jml����,Y2+�� ���tWVV�&#d:'��Y��(ʱ�@��b2�n#	��Hq�+�C&��
ݪ�b�0����"AQI
� ��?=몢5�R��|uø��4�SaC���y=��H-�R�EF�UE�	GC��J�Њ��4{"l��	�.1ލ�ƍ:�w��R���U+�ˁۢ���i}���܇��r��D�	��4�-��%�j��[v�N�$��*L��	9Qɻ����m���8!�&�p�L�F��(��&%=�I%�jk2�+�J�I�~��j+^�F7mN��i�7�R�����[��^$;���gI��$c�]�'p0IfI�ĸfYH&�4�M�����)���<-�Y�[�N�=��U�;��5�D�s^|×�.Iq���+�eIR�ث�c���-7�ɽ6/6<����2�������߱pN�]�
X�lT��R�N�0��+������Pz�C*מ4V�D�)����T���⼵������t��S�;�)	S<��$5mѡ�I�N�m�w�[�Rݱw�f�X_���L��@#�m�V��
R�Å�^�h����<��M�X3����P䲀�
�
�+�ET�-����Ģ%�T0cm3xź�h�a�!!s�L���`�r��}�=��>��d����Ʀ�������0�{eL&6djL7���ύĊ������◮�꿲Z�3No�����t�p��>��S4��E�=����7��R���`�Hq$1X�:��rB4����1�xUݭV��o�.5?����J�d�J	��ҵ�S 7�/�c`
!��UK��0��+ܨ҂T�ЇXX���C��� gw;����;v�8�j��攱g��������D�6.!K�q—F0LSVW��M���i���Br��.�&	(�wB���Hܣ�\pĚU�iu$��d�����9_
��
��G�_&T.8s��Ȟ�? ����K��Ɖ����)���m	�"K�d�ۋ�l63zm�ci�f�4j�Z輒@D�2���!Gf�z����c/�h�֛(.���B���MjB��@��$B�6C�*�ovg;{�
W�!L�ϵ�fHV�t)-Y	���q0��4�Z9��X�!y?473��PHP��!��PnG�a�ε)��*�g�7\j�a�d�M{�/�uT GQ�3m���L�|!��*B
$�����X�xv�4h��3c�IXp��ގ���
�d��tz0&d2�=۽��n�{���t�w����<�J&��I��K�i[�_�*=�*9�Q�>���A���o�n��E���'cg��h��A��B�+�C�;��&6����IM��6��4$8:}'Zݡ�=+�vP��8��h���c���:�ScW�{�Չ�h�Q��(N���*��F��^��Ju�+�e�?t�X�s����O7�7�zfOM��s�\�����͙��JQ�<���|6��߄�{2���u#*}׿#ge�/,Qm�jyb���d�wA�Bպ�U��V�h��IL�G1�F�������G�pk��3�{<����E��N����#ݕ�h
��Wmo�6�ί8��TZA�݇i�b��DR�p��iB&1$��#ǁ"��9v������n����y|^?>m��^%/"�}��{�D�#��q��nf"�S�B�5JA���Z��Sj&�SHU��
9�r�V\K�l�ƽfj6���.��D�@�$�8!�U&C�%~��п�c��^�ֺ���5�ҒPW1_C����q�o�ٌK�7\B�I���㇢�Y��yת�FJl�\׷5���pY�y٨�Glc-��G���._�iw�r�M`2ܚM�a��u��$�gGǓ��
��_<0������6���墁�;cA�(�m�|�d�-��
��Vk��H��M~Ƭ�i��	q�&��lM�$l�<�����_�U ^x%$�؍�^
��L���/S�d��W7�T	�zq�0D�6���}H��а6��� *��ha�R0,I���G��e�#/2a��T�/im�x�`Dq�%�fB-:P:�c���n�-�=��vy {;�5���yZ�|�pZ(��)k^?���q�?C��m��Է?�3h����Q��ⱄ/n?c�5;�Zt���&�v^�Lz��]U�'&C���N�gq����6�6r���e�LZ�pE7��(!]L�IG�w��Ai�4Na���c��vޙ�*��Q���72����N����؂��R ���
(3h��M����(�%�oL�C@WI|G=�FV/̊[�,�"'�k/7��dZ���.���Y��@Vق����:���6�xmd,G���w�&up_ǘ�E<Rk�0���i�:\6`k�h;�FsvUt9�T��S����	KJ�#��5q��,���l��J=z�
�o����c�h_Q������O�x5��������T�)Q��u��_��(p2 x#�q<t�
Q�1n�q�*��y�yx�d_�Ώp������q2=x��� �����r��a��ʫ9�|sH��w�jL��<�Δ��k�I�ܳR+�P���դ@#��EB����Os���-�͗e����	����5)&}��C�
D�7��T>�d4&l&���3~�yZ%{�JN�5�C�������ܰ~q�o�n�1��Cnvy�t�d�>�G����D�ȁ±=
�t�'M�=l�n�vf�PS4��jpD�h�z�I1LD���`�w���ğ/�tb���
�����������.̫�?�ރ�����Zy]���)N.�,(Q(.J�UJN-*�L�LN,I-�O*�//N-�/(ʯ���*V��ч(��mxƮ6��Y�s�F�_��b�]:mB�Bҡ���}�t�������4w�7���I�%Y��@xH���~����$++gs?�����#�ͭY�t����p�"�k��G�|tf
~.8��!21}��k�c��@���c�W
A�5����	
dIS����s��g����0�
�GG�Ǐ��1��,�Z�Na�*Af�/FRG��dx����Ō�A��TF£{���,�R��
b]J?\k��ݐF[�~�`�S�����3��(<��1
�dW2>�Գ�@�֎C!X�9�8����:���o)N/�*�7ޝDz�*՞e�/���C��G��T�����{2ٍ��4:V�(
"s�l{?N'���l�S���}��"��"+'$� Q����@�֢�jE�`*�H�%��ٔ!�SCr���p�
\���LR_���!c3�%P�>��jؘϝ��d��e��w�Lr��̬I6Y�뚃J:��b��}��cgB�DJ
/Տ�Bj�`.����B-��Ǻ��,���.� XVY{l����ƺ�����T��|��QER}I�X�Y�r��{;{�tY�|e!_��|�,2;�.Qb�%�1�]�%���E�]��'���Z����.&��#�7�x��2�Su�q!��!������q
�g"�=5[e�Q�����Ĩ�t�
Ϟ<�k)���ҩ�Z�2JMD�93^zU�DV�	#���Ϡ��7['�u��f�J���>Ꜥ\m$�˜Bb����,�&W�rE����pvz�H��[x��}4�q����w�o�F�3Z�p>>��g 
3�i�d���dd�9j�����b�S���h��)�E�m����tS)�b����E�@Ad����|Z�!Oa�i��h�?
٤��0ߧ�v�O^*�\E���RJėU`��7�vZxH����:����o'S��Yr�6�dA��HI�<Βs,���|�a���+�#�OL\��F7��ƖY@�+%�?fƮ
Q��&)��y9��Qx�+�D����ؗqWN�¾��-������	n���=#�Ԓ3��>�'�	�&���*�RES$�йi�h�U�U�oT�;���L�u�ٶ�?_W��П�r'c�;��o�q��A�z&V�m>���T�i_mt`�&2]�B��+Zv#Tys����T�P�/��6 �Q�e1A�mP&
cj��J<��IU�]���5�:�p�Y:�(J�G-��0M��֑]%ag�E᝶!�(����͔|��!�e����|��by����U������]���B�^+6�� �6^
�/)R��s��߄�^}���No$�̷)m�N] k���o�D7d��������,�۽ߵ4�x�3��7�FJ�@	??&���3i��h�$��o�`$�+>��Ľ�;�P�6���v�Cp��3�[�
|?J*�n�y�iO�K-�ϊT�CѴ]TW	Z~�f���n�[Hz�T���
g��=H�{��gH�
B�*3���3Q����{ג9��m[��P��3(�,�9V�	�8��v�
�����D�"�n^&ö�F�b�%d��>M��ie��̣�E6t��~�����Y�,��u
��~��!=���?4�<
�t�v�Ҳ��Zr0�;��E��Q���0�Nb��W�tXs��o�`�t<hWN��z�5���
��Vq8���Ȭ]��`�wlg
��w��(62w��m_|��a��`[���9����C��u��j��wrSw��Ի[����
cw}�������b؏�R�h��A���y�ԧlAI�����T�@]�Mu��ѥIV�a7bB���Y'�x\(x�ޣ��[	�ƣ�s��m�'�7��|��d�-��ɘ���/H���Ko�0���Om1EM�@�99��N=��Xt�N�Iym�wmǏ&�S"��~$��?��L����	��e2���XQ;s���#Y�f��b
�]���B+v��V�w�c���'}w�Z��y�GC;�3�3ew���`��h��w�-=�|'}ȋ��-T\��|
Z��͒�@��#V�+�D�a�o17"X���2�*^9�5�P-�JZ��K�uȇ�,BU�1�l�wߌ�څ�~�,Ƥ�
�BB�
b�밹v^Q�S��,8���+��)����<o�z=�v:���)�<�!^�+$��2�,���=h�5���->���˲�Ɗ��F��l�vo�:l��v~����?oC��H:�6^^��J��P0��T���ٔ��#~�@�t=�:ܧ4p,��?M��q5�r�%�$!Gg_��s{Q����0J��ݚ�t*�x\׀Mt�nG��d�z������'��>L��G���/]��S�vV��T�eҴ?�	C��G������
���?z�|Jam���gmpW�kG��� �XZB�y�7́�݉���	�&�
���nKw=�"(�i�t(ϬPx�#�&:�ΟC��s�WD�/�j�.:�P��U�N�0}�W\��P�d�i��*�6	ӄ��&��ڑ�e���k;I�
[�ƽ��s���8�KYw����N?�}�pY*����)��,�
\��U�Y�1<h��)�-�"�2C��B��f�t�`ywu�MW!T<EA0S2)��e�e#2��nV��_�!�FAO�L��>Z֖�3|�U�FX��!E��pQxz��!�VК	V8=���pRL�?�"�٩,��Z
�H@��p}�/�HY!��²T�e�|�W̰0������7U�?�$@E�"Y�*�#��9�4μ�z(y�!�;���K� �Hn�5O�i0�� �����c��c�&��a��<ɥ4B���)�����}?W$}�?�����
��a���J֨GBY~�i�5����9܍7����l��T���ZR��M4,\��F���	�23�b�9��4��s^aj����%���w�����a��ŖU
���0�F��hD��!��"&ǟ{���n���Z�aKgt)����!��"��X`�,
D���d�l�6Q��+�l%r���V���1�a.�U�.Ǯ�e����G,�2f�:R��Dֵ�8��(m���+M����ݎֻ��\��P�|�8M��x��nQk€��q]W��_��G�A"�
���_w���
g�r��s�ߵ:;J�ՌR��@��	���U��R?%�E�2�bN|�n_�TC�cۘ��4}�y�3k^�GU��y��+[�=�/������R�N�0��+L/0D�q�C�8qE\�!4e��FK��I+&Ŀ��Ah�n������LȔ������f�CȫX��S�/<Ox+bx|��r�~R�`jq��֞8fP1��Y��Yt���}�^WL5R2j9͗�ܶF��b&���"ĭK�&G�M9)
բ&�:k�o�~R�ʈuZ)b�p �z��0?��8���[�x�MD���
�q[�mR��#��oQ�Ī'.������W���:<RPQ�|�l��v�H]�y(Crz�__�
�ҡy=D�%ٚq+ng�����秇��DUOh�I��2�7�D�.�?�T��xa�Jۘ��7cz'���N�{ސ�6�R�-��e<$LT��^��x?����Ve��Umo�0�ί��M*�LX��)�~Y?� ��}���N�M��;�@\�:�Rr�{��{컉V�8�S��ƺ@I�`5��Q��*Ժh����F��
�b����!���.ZU��h����[C7*T�
���
J_��+�@.����}�AikV[�j JN�p����a5�=����|�a��gB��@��ڮ���HȒ�ǵ���LXm]I���1������{j�0���9.U�K���߶�vsJ��f�5wkeJ2�Lʰ���*���o9.ʁ��T.�2����L7�2)�m^�Kp��1�pe�
��(�aA�)�d��
,U`�7�R�J�?�B�gr��`|�~�+���BS���4N�;`^���&�D�
�
�E� U�O��H��٩H��r��]���D`4�pZ��$��ﯔ�46��*%%��0'%�|�qU�J��r�J�Ұ��r��|�A�s:�p��.�xv��!$����~���>�<	�:Uo���9����J�}q��^�c:�ԍ��M�,�+��0����|v��ZdSuҍ�8�����|B[Sj��	�ӗѸ�Gg5�`Z	U��;�Y�K�©&Z�M�lm��m>����<%��#��{�J�&ڑ�EA_*#a;���'nx�Y�f����֋�#]�|]�ž�x�|�L���D\S���^D��O� ��_jw���L �X��]s۸�ݿbsmOTN��<�:'ulg��8�ؾ&��D�k�P	в��ww��L˾N;s����b�w��=8V�U�Og^��+\�$�*5��9�f�*�QQi���՝L㝽=�UKP�Y�A��J$$*��˩��U)S��@����]mV��"Od�hf&$���$J�����%|8;>�xu
Y^�xgg���x	3��Le߾����De=���;��,��#{Z��l9^橙m9�Iz�Q&(��"��sY�/���t��_�o��_�?��^�߽�B����9Ve�O�O��dl�_�O��ҹ�U�@�	�7Ke�;�*�a��'y�P���>�χC@E�����7W�G��������ק���>m������8�O`�E�5X[&?�M�*/�k���\^|:�����������r3H+�Hղ�͍��H��eBo���k@�=��ٰps���5��J�R��*5Ǐ���F�6$
UN���
�������C����#˔(5�֜�׈�YN���;�_��J�G�4�$��E$Zy�Y3U*�:�KU)�=
���*�A�F�)U4�=4�GW���1
�nU%�t�|,+Պ��r�]�H��c��E��	#�oQ��Ь@��|6��,���1�7���R^�n�{ޮX�]������+b�i�3��2��}҈0�;��iD��!���n�����!1�g2�h٢�4�n��'d0)�l�����v�8ͮ����s�9��Y�����
a^?��NH�d�����w�O��gYȟ:7Û����!��Ɍz	4*a&��saf1^�	�U^vȲ]�����s�r��n�H�ѽ��K<��Df�.[��>���T%�6��Y:�TQ`�;-$m�[ά �Z�������[����f�-nЋ�(�x�,�����Ÿ�YȟT���*��I�+X~�σ�5(����,g9��V�.Rc���ЎųQT|kŐ�[�$�ů4+oD��U�0�%��X��EY�0e,����R�`j!	�2h6�h[oI��S��v���
U�E����̐�2eI�w$�"����1>]�p�C�}���sl)RKaRiD2{��{G��nBw�6X�M�*�(�c&�5��q���(��A~���D͏y|1��Lȅt�g��qG�㌼��:����
6�`�z��Q�j�.�k2Y�\��ZG�n�Jc����Skbsq۩U�ڨ��b��(�RS=��U��RP�ѾxI���*V�u�ڨ�ڳ��{��"���mމ���Zhg�o��k���,_d��{��*v�����K*������~ ���Qyx�'ȏ��z��_��Q��V��P`HQ����7��`N�I�=>�� �&���O{�n셀+*3�A�H2=��g����*p}
�]j�O�Ig(�?��~Ns���[�-�Hm�w�&�r}����C|�Þ�g �R��(�9�,�����<-|mϵ˼D�8��R���:�V�q'��O�bX�$n�`S��G��d�غEq�����J�0�Ke�h��拦�S�=,�z'dl#P�|���>4R/�s��;77�|`}�cx��N%�
�1��0�Y�)�Q��!��6Z�\�?!�f+
�2�唝mӇ	u�b��4�����]����Bcl$d�9+�q}qr����K��Lj-l�ׄe��-Uu�)8��3��K�cl��Q0���>H70\=���!��k��>a�Sa]c�0|,�;��wIN�Z �0�O�ɤ�|���bz��vrqw�q��b��盂
�}�4��a��@k��y�X1�O���'9�	���Go���DB/\����v�T'b�2|�]��U�z����Z�_}J��Gh���J-]���[�����%Z=b�4��2�
�@[J�,OSY�>�;ga�4�b���ʇJ�}�Λj��7��:��͂P����3W�/mW%G	E!���L-,�y����7�h/r��;��7�Tq���%f�οI����
﫡�Xu�����p�J��bKb�]_90��s=U�d;n�Uz���G�ٷ��w�ۋB�5����\朩�|y}.�.z��n�܇v�}�/�):&��ƛ��jl�c�]A�`�}ņ� A���A�i�Q@�=V��cCH�Z#�8<}�b��a��%��g=��䖧�����>�s6�C�e/�~?	3�v�<*��G��f�H�*t��)���Ľ��{&�D�m�Bb~��y䛵���O;���χM�Z�{�8�&�gc�]�#&
��h�c�0�ƚ�D�7�n���W0��Q��z�u���Wpн~��q�b0�x,7}��-�>�w���.�?O�%S�_:w��샬��i��P�pz���\SQ/������h�S�-;S��z/K�0�YO�7tݦBg5�6l.�w�\�欼����0Ê=<|P�w��!6B_�䩊����Etf�i?�t��nD�a�s�z�{���4;�X@@m�A	��r
6���ǩ��<~r�
���\.�ǂXC��dsԑ��`S�'I]Q�K�6���DTƏq��gx�?��죔�L��ߺ%�~؋���;�$V޸u�ھ&t�A0��خ����cu�r���ܗ�ͣ��B�3y�(�Q,z��BU��2^zM�vK�K�&��*}DT���XU�=�Ѡ*ODQ�Zz�[M�@�	l۰)$y�p�`I_
3-�=8Y
��%��^��A�tA���r����?���#�{��lP��
�`u&5�
*!�������V�m-�%���Q�~X���=��'�c���!���l���hT-�u���pf���-گa�]�Q�U�a�w�ǖ��Y�q��c����?�]Y�2ɳ�l�������Z�K#A�W��-n��>�=(��O��N���-u�-�$�d&�?D��i����$���gÉ��x$�#Uh��)킧n��H�I�]�$�-����) �~˥���"��:�S�����l�PW�C-�&�>R�d/\4?2Fs�HŚ�)���}�ZjJt�$�`�dT���yX�|�wZ�������夳���-����a��Uغ��o�.6`�05 ��ǏNg��@�a��U\p*a@�+�:'������i�9zu�9�7wݴm�
Sa C|��ʚ�+k�g%�M�x�v��u�aV�����4/>����]51�w��I�}l��d%�L8�Л�8��J������v�z�/.�?�l��!㢿S}�s����$��N������D�ݒ3��ћ~G��Yiˡ6�J����mD��k���TTԃM��x,�T��̝�s�l�z,{Nj_��)��.�VQ@��l���A���B1Z�i�2�=_��f$�T\���d�O� ��{�e�Ӌ�&��j���U�[��b���E�m[���
�M"S
��f�������$�1$ҟ�r��j6�C��nm��o�ٜ��4����Lt�40�%e"Y���b������Dzȟt�#OPF2��b��ߊ�A�R��=��sǺ�B�E���4��]�(
/�`j�~b�6�����c5d����Z=O�0��+��Āb c��R��Ti������8ti����~ɽ{o����h����
�I둲u�xg#��д�9�cB��}��'����ITh���ְs|��D8�~s�
2���31�1�0�R�m8=ƻ�����#���n�$6"�fy'�qD}����X�-��A�*�P�*��tٵ��w�rr
wk�nI#�Z#�9<"�F�> �%ne5�y%�C�kڏIY~���^�I�:C�C���V`	H�z	Ҏe#AU��	����O�A�Ta�����+dhR��
qk�*�܀Zq6\�?a
jɀ�X�U��]���4�����]�T��6բ��H.vVE�7�f�n�W�;B�t*%H��5L�IJº�&�ty�{ؚ{�m�xOW���s������*F�!��	�++c�qB0^�pg�؝��4��XKo�6��W
�Ad�I�zoP=w/{+
��h��Hʉ[��zQe;I�!ΓÙoFܦ�� AүS��\�)J9|�.>|��~��SF�B?L�'��2���xX�/H�]��[=�j�D��/����]����qN��'	>R.d�,h���Y���HuJ���
�z�4���](�522��D�#��l#�y��� �ǰ�B)΀��V�,O�"��IDY�1̥/��%BA¥B�VOy=����'�}�����Ŝ��X���Y.5i�4*��8s��ӂx�W�s�z�q%�|\.��\Dp.�@\�ֆ�{r�x��h�ZGz5.�ׄ*�^�\_���:��4D	Ϝ�0�E�����uU�����[�y�'	z�NO�c��ӏE)�餂r+m7����~�J�L�aD�$"T%D ,F{�Ă,B�ZR�M�췍&t�"�Q#�(@���,���]�]�����T���,��ƹ�������Ѱy.y�sR��[F"��,�� BVd�Va�2����<�����e�;Q�F��>��@��`��#J����[�oQ�k�|�[gs�ט�F�ryk>�>���эt��_�ס�'���fў�l����.t�^��ę�
���J`&sh�L��vaw�����VPkt[��
����,�{��L�*qt�m��pm���]]UCd4�5������9>���'�e`�<����ه��ԙ0�K�U�_��*O�F�8I�qΙ�X�����@"�%�i�U��$OiT�U�>����m��M{�$��UP�RK��
��=,��,9�]/�Ja(��P���;��R���dW`��3��
@aKI��җf��uˣ�T�pO�!����(�^i���X=��%U/(5�2��(2a�@�W�vs.i5h��[L�IJBp�qF��9V:��f��j?�TR���a��hwRs~�Y�}�!b��m|�}���x�7-x��2߁���M���ƧA�Ԩt���Ktr���%��ztS(�{�CQ�;ܘbL7�M%���K�
H�E5I�0���� �)�����X8�7�,�Fѥ/~v���LV�C�'���d<G{[9���\�ч����-&�������ɹ"\��q^uc|F�j}�j���ƿ�k��Nw��������Bq�����#41y����û+�3�J���!f!I+'�(#�)�8ړ�ޫ�=#�ᐪ)��׀j'%��1t�j� �.6m+>��W�0��ic�~�e��FMK�
�V���9����Wu)Wϰ���<߾���l($E�o�v�
�9�"��<������?o�!*���WMo�6��WL.k9p�d��[o7�d���M�Iz)���F�Hʮ���e�g/=49D���7����l��h�,,�==����B���%�׶P��p.�M4�+���lA�`n��Z���h�T+�3H6����剱� x���l�,�LB��S�j��4��������\`<͎�Gp���y]q\�8�'Im��c�A;�u��2n*�6�J(k	
,QZ��ڇu*-j��knB���K*]2\ֆ�%���	��5��T��e2s��9��S�W(6��˨�D�))�B���pE�1���n�ؔ���PJ�a���%X����_4��[V��«J�nϔ6��*�h�r$�goF�D`�vS�>(%��i7�b��ٜ	�aNc.(�{un���6X]��*�C��`r����Ӹ?�GV(c{?=�1Ӝ��1y�:sMi��ţg	��3�ӭs��E����&S%/�W��L��_�7��=X����P��J�[�[ݶ㡥e��=�ZLt��}���Y��;��ʺLP�k��/Q�:3�s��[+w�5���5�lCGSK�jJF����kTimnj+��?�dK�"�"�i�j ʺ��/-X��x ��^�w4�PdhYZ�{�
�}�.�m�R�a��]8?�{�b���<�Y	�G��
�rw�et�:���r�G�A�ax��崵
Y��#��%%:���U���Z�I4-�J<#
�!"be�n[k��RH���(���n�T�,��Jڢnܙ��*������c��<�-8��>v����M� �ǜn諄:>���c"j�s�����%��iй=�C�w탾��	�'g@���U�r�!b�
���@������[y�dm
n�8���,QLg���:�I$�hc��ގ��&���͡���Ĝ���mn{)
Bj���W]{֖h�G1��,�<��!C�/�.����I�ʥ+GX����J&k&�g�Y*�yzt9}��@{$�CHp�m�
O\�3�9�N:^��
�L����?>sz�W'��s>��E�׸�}��z֨}�5�/��g$m��&��ܑ��������᤻!���)OF�r!Zg�	��׶�q����S��8��H��pz�5n-�o.o�T'�2NU9�����?N��Kz��|S�%`��c�7w�	��܏P$��!2[�@m<�)={�7�&�溣]��QC����g���Xmo�6��_��+b��I�)v0`��bl� h��8K�@RNܡ�}GJ�h���,H�����x�"e�	�.=�\(%����l�o��4(x�Ϩ���~2Y��D��
�@P�KQiy����<(HA^ф��~�(R�,[5�Q�T�v"��!<�	4~�!�")[g��x�I��E�T<c_�*���N&a	%4ڮ�^qk���34��Y�֣HɊ�G�
�,߀�D�MF�v������(Ѡ��^�1��2��c��<��K)�ޖ��BѬH���^Mثg�„2�o�򙮶LaE
��M�Ÿ���H	��`��]�A�$���E�EE��Bj΂�Í�I�i�uJ_�e^*H1���].�N��H٭f/x���p�z�n��S��G_?�!�z7N�`���&t
�@���}��|��TI��i����G�h
%4���7R�O��1ϐ�8��C�[B����P�D1�+�V��h
�&-�*A��#�r6�eu�'b~@|D���'m���my����DLA�ή�kE����t����|�A���|4�?$�1��?KT�۫[��Ն�ƌ�i����j,A�"H'��t�nG�
�f�g#qs7��bq*���ۣ��s���.f���Y}�Ə.B�)��)FR��Z�MqY~��1�n����Îݘ���_�h����n��zSx�k!�S���]EX����s$����ҷi��G�v]�pX&F������4�q�%��ް��w䜬�҂K��?�m��w�9С�g� S�?�f�	&^�q~�L�Gj��
���*9�H')tźYQ�z��xG3фU^�6k��e���&�a\\������J8$�t�#�L[ӛۘn�R�3�^���sG\m��w��+�_Le��P���`@��nA��͈��C]0����sF��";�{��1�-W�X@����DCr�
��2���5���H�+���gQ"�1��g����N��˭�w{�aEqyv�;��}7�Gp>�s�;w��)]��f�3O�?/�E�W5��I�[&�N��!�������<��f�f��
j��К NdK��x��"�p'�1��o��v�P�b����~��,יQ]��>�3�D�����2�?�o�Ȝ�"kǪN��r^I�9ڜA�St�_XC�Z���/ѪT@���	
����F>P�g��
G��kw��Q�N�s���W0��(s�8�
���{
�Y�<�/�/��x��_=��)u[r����?�K���x|���W?��=k&ե�&���$�[��ݬM��e�_z(:챉۪"�ҳW)�?o���w���:.����J_�D	��q}�Vmʕ֣�������Yz|l��{e��H���\z�`���?�{?���~�� ��W�O�F~�_1��9���T�����*�SU��=�W�w��:���;�8��Ԋ���73��a2���VV�?�~�
�YaM)�.W[�p��B5X��.0��	|�L��5Ԧ�)Bj2���Z�$+py5��J!(��&5W�А #��HM��of׷�אK��`099�	|�OF]H\B��qZ`����d���F��T‚3���r����1X.)҉�B�9F�V<1Z�N`Y�I��N8Vfg
�k��4��I�Њ�I�c�\A��`!�H�nJҥ�,�R�	#J�
-�c�H}�� ��Ș	*��&m����f!3�F�F���ߦ�Р.L��Ld$�����֕H��ӽ["z�? (
|����hc���Z�h�� ��I
�4�B,$��I��J|'*�ȪRx�ɌH�V���['�Ԟ[���	�V���1
�u��:ͅ�1�Y���\8ge�8p�Yߛ�-`��{#�6��cD�q2_m���nd�����
V�N+�֩�W����w�N$7:ï�.�6e�v���֍~� ���P�vHe��W����IJ)5�S�:��qn҆�Ju�Wh�8�*
���r)S=2�"�L�n�ox��#)�X���a�h�^�h|E��k��?�����
7[,��jx>�VX�y��������f��Ny�Җ�����w�f��v�.�WѸC�F^���_ �Ҍ�R�qԏ�Q�1aE	ω/�WHK#��,R�7u��Q�_�v�oD���!T��0��t:zD0���|�GmL�x���s_Ӄ7�B�z�D�#Qqz���
��
��oe}�M�e�
�K�c���oFeWf���7z�=�)e������ܓ�0
6��fF�L��Rj,�@�淢DJ5D���Nqg����Π���i���IE3�ׁvI=��s��a�	@��W���TojEf����
�ď�5*n�0�����as�=�.*�ו_����ЁӮz�����e֖~�L��J���w�C�\4{Ӄ���R@?�fo�׼Nˮ���-Z�P���o�Mw��i�:���W_��05�L�u�Ͻ}� fg��������a@�pV��u���*�������Lз�t-�H���ֳ��z�pBo
�_ʿ���u"A�v��cJ;��&ؾ���ga�
#����0E�I������f,��#����q賂,�BT5uq��=�3-Y1�������e9?o�4�
�;�^���,�
���A!@�=� =\�
a��*P���7�Y�t���C����=�Ų�6�{�|ۣ��3P���	�����^���V�F��+�]h�dm���|`+/bq��œ�%�ߙ��X]o�6}ϯ�Y�	��ˀ���|�6ÒaC��mq�E�������%)Y�e���%����s/9ӕ^���厾���K�ʍ��jN�+�kcz]�Y2�J�(��h<�߭$=%�+KVW&���Lg�Q�Rf4Y����3�V��B���6�G�(i"Y�TWeF��{Ion�n����T29:���)�ď,�Q�%]�+]:�Ji�s����ţ҆r]d�
=S)���^�r+2�x��,���x}�ᆀ�Q$�B�e�F��e0���
���F��i7a��ʲ&�Im�0�䧅L��4er
�lW[�*�9��5~�4��۩��+��'X�}6���Yp��sFM*'G�h�R!â���Ʋ��
RB��(�{�e�)]����Ƴ8���$�B��Ÿ)��}2�u�2z��GR��o����U�$/�X��%�m|�e��'ng/�C�I%'�F8������*�,ܸ���Ԝ5ң}g�e���AmgCN�@ˈ���!��jԣ�_IɎ1�QJ�@L�5���{Ja��c©�UsV=��F�Q�MAym�e�(�l[`)��
�J�v�������lBk�GYe|��i.����(�E9������თ��p�	zZ��!����bN*�z�*���UEFR1�Q�2��'e}�a��]Ll���Pv��g;�!�6�ݼ��Y_���!��G�g�&���Ќ��!.ߠ�1�"���|���S~�L��8zB���(��/��Ht u;�ˎÚd��e�KO��,�7���$�Y������X���]�Wh/������sp��ty��p�/"�GG단i���\����TW�!���z��ӏ��+c��ķ:� �w�Ӈs*���Jz+/�{=��/o�\���7^E
�a���M���<$��1b�GC-��nΆS��)��9M�����x��I�Ud�DG�_Ó�͒��W����G}����C*�^�ISv\b�k"v�j�66b�����ߟ�M�QE$���d��1&Am� 
C��U������
aj��B̦�L�D!���\�ӊ%%)R�d��p�6ZLj��De��޾}b;��6�f������Z�F��+�w�u�� ���[Q��o��F�]�t�0
'aH��ȇ6��5v�{�>������j#�̶T�9{Xc훚�p�'
����s=��h{{[e)?�{5�&�Mp{�Xt�������ʽ,Ť��3t����*�{�j��)&�-��t�)�鸷��E���wo�{���yp"ҿQ�H�Q����r��#�Sa���A�*���y��� ��-0d�=�k8�i�%z�7��w�O�UZr��lMU|�����
�k��0�E�j��Njn}�[�z�E�|yf��䤳}_}��->tz6+:u���0��V�&z
���Ek�nއw����
�.Cjxlj�߭/��ޖ��`A�v���|���D��s�:�磖���^M'ZR�k
�E���hs�k�x�VֿW8-=�� σ+�ZJ����]|�*�0T�o�O%� ��Z'��$�ʾU��s
��e���(G���~��X%
�G����;`m�`�����U=���J`2�c��o��r�0h^��p�����u�C��pCc�&��P$$��H� �j.u�7`'�8Z*+kq����(�L!��h¸j1TRQ�Wi���ނ35��m��@N��%F�t�?����,�
���.U�3T�`X�b+�T�2^�yd\e��{W�A���?o�����}-�ڡ������j�5����Ͻ1M}�+�o�:�oX|f�ۼ p��Y+�^x��
Z�N���$f`�M���
�t�p�*̋��V��Z-�w�xa[/��v�n�i朐��?���%zA]��X�nK}�+J��]Ԯ�}16(`d�a�i^����]C/VucÌ�����6##�@`������Ru��6���]�O��Ͷ�O�e�~<�����jv�]}]�}M�L�>:�ёŲ߮��٬ow����
Gg��R̺~�9��ͮݟ�n����Gg�?�6�u�������o�n�O�j�����:�0����ڏ;��\W�������j����v�N�ۮ�{��r>�����0��N����c�����ˠ^�I5����qB˩T��R{i���ڨ��ZkG�����	��8��t5����L�6����\�N*|m����}��F��J�UR�R)oT���c̨����<{ k#lp�	ÊE
t������*�F}����$#�(d9��XFE鷨w�V!(��|-�J�����<\U,��`�����f0I�
��q�\x �����Z�@@���2��g�HzǑ�R�
`�d�A��~�f��gI�q�GTSϼ�L5YKx�u�S
U��N/��B�IH���	�[��R�LQ� l��)�(Y'�U�U�k���­TB&@D��9NDA����QI�	0��'F���&�:x��.�*�j�M:a�q,�Ȋa���Q�Z���G�<C�>�)���l"���pZ�.�t� �9B|
�8�mΨA8��*Df�ʦ'�2�|-r����a���
k�L8(HF��˲p�"<2�N�
+�:Ew�9T(�<LMv���
�P*�L�~�)*M�뀄S��||D�X���Da���|���.�W�s!���k�MC���>ƀ�`�!����)���qѽ�1�GMYdZ'��5R�*�d�g4���v/bR���ߧQ�сԈZ��^Y�z�<B��]	S{Ɏ�����Q��&�T6�:��T���(��K�.�(�Q�1�(hi�[��������F�YĢ@��(`���T���������0��SRa�� ���a�M���E��C3Q�c��˜J��9(HN5�"Xq����Im��(@͎���4.�*J�Vz�u,���a�e��Ҧ�-.����R
��}��{��������F��g�n*��h�5�M��i@(=6%�4�i�

|�1zMk҈rnڔ��Qa�����u�r��u`���x>���%YE!h�b��-�aO��$̴"��zbRl�|��a����摋d\���a��w9n�O<�
�5;R�M��#����N�%[�1��m��
[Lk�X�h�ªYCZ��d2����ᤙ��G�:�4c���	F��(��̶�4V���2[1��f�S�Ʉ.bQ����Q�;��8��u�y���_ъ�G�L�&�:���2&�DdX �� ���,�'S��"�@ē�f���ړ�
s9	�1����K��&��H�p�2K��ƺ-aڼ3*�9$���V���HÎ0��0���������1�fG0aD1Z'����(Pbi�(K�8��҄5H=�^$�`
�}�og�Ȯm4������*�3�;�Et-�6݆�E�}��*�|��*6�G�L�)�$�M��h�E	G�	���@���l����]��<�:��d��LCL�'*q�ۈc����ڣ��p^g#��|F�s��v��
����=7(� +.�o�=�X.T�mz���8��HΜ�ݙQ�m7X�7[�	H3��}
m+�^is,
Rh�,��Y��(Qs�`V���#
?���,`^4YX��Pj�&|_�8C�RJ鈢*���Վ`iˆ"�A�H"��`���G�h�w)#9:Lol2w�Qq��F0V�fnv�2�;G�W�ܩ,}��8j��U���*��a�L����R���6��ђd��fT�J��v�m���6,L�\(�\юph�q���(܃0j�tU��]F�
K���{���9��QX�Q�Ŵ.�;~~<��f�����l�>��}��oqW��z{�yզoh�}����}�۝��۷��|��Kv���v��t���,��k��]�j��j�ݴO�>�?<^�7��݋�8�l��%N(#n�<9�w��~yZ��|�4��z�y_��c=�ƿ�j^�ڛyk�+�p�a‹�~Zm!��u�6b���p]���G|��~�O�U;�E��#�W���d�ݾ���-~l7�������}��$E��������uW��}6�'��q����Q�68���maQ���s�c:tJ_|q���U_ ��ʇ^,�ŧ����`''���]ɤτ��qib���Cٜ1T<�d��'�݄�v>�&O�f,r(���y�wk�(}��I����tPa��.^��|u���/߿{����E���7��}�x�g�-��n�H�iur���۟��Qc�_?��_�)���V�/����M}�Y��'��Co��S���%���������j7c;;(�q�K�)q̫�e�y���?^~xy����o��D�9w��Cl�fe�>�-��f���/�\
��Ͽv�u��y1Ά�������K��Z[o�8~����N9�ig�lf�:nk�I����D��ȒAQq�M���CR$%ˊә�>��s�w.<R�K������ 'G�?�ɒ���'�0[�^&�	O=ҋ""7�����;x�n�ܤ�$s"�aJ�$�>#~0����d�@(y?�8L�C�H�,2����4&3���I$�a��/��j< �0b^�њg�/�$n��F�{p� RS���(
S�'q�*��q��HE�u@K=�z'֌|��Ռ�'X�6�*�w5��M�ɰ�y<��sp�YAZ�q��Y�za͓�+%~�}�}�d�@d���O"�e/$A
��OӋ�Qo2�z�+[Җ� ̬nA���y��j�/z7_&�~�ꟽ�?�������E�Tr��,d�$��
!0#Q��Y��,��R��߰^�4~�4��R��&��ͷ���*s�Z�4�/�u�̿]Q~[V(bsAf��
�	�CN?|��O����eo�y:�k�>=�;�\��U�f����(�D����hx5��K��M�?�h{]0d�6F����OF_?�)���'Q�������Q�v�1Y��R
-v�{���8�zsu1���u"�|1����_:������C���v�F���%���s
BD�_&��q�K��}�8�c(���
�szZ��:�V���7d�����C�LsA�f��`e͸�F*B�u�瀌^���T`��t�,A�K���jW��(��\>!��-���;z�F,��:��I�U0c�SPoN}g5�)D��N��E��Qg㖫O�ܥr��	9�|o�*mc��������B�]0˥P��c�Fށ��Q/�h�t/�Pv��ے�r�p�,�I� �b5��:b����%I�h\�e��59��^Q�.Jh2zQ��u&]-�����CK��twB���a@�^bM����-�H��8$fx�	�K
v���Wq��4E�3�s��t�,c��[�
�ص;�u�X���f��d�>��-��|���:f�s�:���3����A�]mL>�Q�5�A�1�b�Sc&RӜ��5Ċ�>@WC^Tl'�w*��@�e��Z�VʩV���(d��
A!������؄|ੀ�\.�ܤC��)���PJ
Wt��i�}f#)w���.X�H��EL�4�(s��MM�Jq�ˣ��c�5�te�"��^��4�UQ>�d|���l�.R�
��n;x�8����|r��\U��h���_��)K9
�p$���fg��̚�l{�<�Y���5�������׿[f��h�(U;��=�5ԧ�}9ַ㛎�)���P��1��?�{��L�8�{�j�M���$�[��5K�&��j���ͻ�{�� ���!U�:#�-
�w$SK��ձ���+��?�@ޟ�I!�굄�c}^~,���%�]�AC��m'H��񮇝mo��D�T*eiՍ׳��,!���aI�*"Y�[
2�NR΄�Ysvw�8z-��\���cs_C?��kGz��*���2�1�v�F`��JT:�t����`LT+�B5��i��PK�Y���j�7�K���-��ʓ�0����!�IK"��ڦ5�pⱊ�'yg/D�}r��g��T�s\��+��ؐ�u��Vg��S�H:P|\S�\��o���\�oͪ\Y�q��U��"u���@�T����-�L�����I�f�@O��Dn=[�s�b�Xv��h��ZUC����m����F���[3��]GB:5X�d���%8I>֠��R��R�u��D��3.��93��uF�����{���("�p���Bfv9H�k[]
��_� >sh��
����>���`���o}j���g�K,z��b����X5��}I9m+�1�d9N�$x�8`�항ҋ���!&8���AK�@iY9��*+Ԕ��j�c�#B�HANv]�ˣD�#yU��~.���Z1�u�b���I�iw�*9[d�V���KqH`YI
���᳚&�)�O3�M�r�-^ֱ��������mD�T�t���+ڋ�]ќb-�-����߶��V+V�����_��$�닮{���Є����̧�K�K���pY�;�bI�4o=�I
�7�?���
�E9�I|��DOr&S�G��6@�+�n���i��tvO�r���?-��v&�킮�^��1hju�pi�@�]�s �N���L81��'d
�	q_~ID|��B��rO���o5
=�����H�OE��c��� ٨�;Q��J��&�ߪe���e�q�3��^��2���Q��]w ���ы��[��9�Sڙ�Ϫpy�n�|}�2η��j�ʗ�^��~(���K����9������~Ɩ#��ݴ�!�D������-���~�;~y�Խ쪺E�~�m��݀D�'`86�y�n'Tq�hr��@����F�k쬦ʤ�cRR=	X��>A�
u�^�F����������]X���ն�w�2��*�}`�"��楜g��7�j&�`�WM�����Ps��)����5��G�,k��v�麫����m�>��\b(�����!�N1�ի9�+��rXD�f����\����;5�ۧ�嗁B�CX�px�K�+���mis�M)|����S�Lڨ�3�M'����:�*��"�}�l�R3?/|tQM��}��[�[���R~�PJVv:Lw�,�L��W�
�h�8e��s��Z;��N)��ݲ���=��|�����!%Jm��6�}���U^���K8�_�<��2��4�9mv���:�}��xhyת���`-�E��pf�qE�Qcݭ���=���X���3k��(��X�o�8����UHҵ��>�$@��+n{��a�m��H-I���of(Q�#�\���̓��ԏ�
u�ɦ5�g��b}�M�3��}�f�Q�F�).������p�˳emM#���
g:[
7H�m�,og���7o�9��t���3{YN�[as�
NJ�̗!�RYUB/�mY:�Ws+����r�^�Rڥ�m�O�\�U��SuJ0Y!iN�p�؝M����%�3�K�U�h��Ql��AѰ�c���޲+׭���	%�=�I��J0�y'+�|-X�+a�8Q1��RLخ� �G��=#��(l�g�X�N��ED���p[I���\9@�|]D���B#�p�M*iwT���>���0'�숄���:
dܱ�Q��\�cg�#n��V�^TŨ.�>&��W���}�.9�<����VX�fb�'�6p]�Ц޾t`[`!�WA�J�����\�&�i��R���nU�^z�������J=�R����l�#�t�`NX�DD���?}��y�^C��zvӂ�(_)�O�W瘫MZkW�@�z�%�O�7��q�z^��V�;�z�J�R�Pv)�5pݗA��h�!�M��1�����P��f4�5R{��Ep(��p�9��=�����;^�#�t�w a�yo��I���GF���]ȁ��8ǝ���HmiH,\&=!n}bW`�E��34MonثP8��'v�N�z˕D�&�O$����9�ݜ�^���X�R�
l4�	���fQ@�.Emp|QɄ�HU��56��?e=$�y���/�a��+<�C[�+��v�����_�Z�����A����!�I��K�8dg"BhO�&� �נ�J��1��ɶ�ɕThV���rh%�ܴ*���AP#��襮+kH<jh{�2�Q�q�\{��)T�m+`���a18����+�/�s�V��,n$m뽱
nh�����\9��I�/R8��+B/�|S��	�ylg}XTp�n=�#,ڬ���Ԟe'��/Kn��E����$\v¶���;��Hч9u��jR��Z�M�+P���u��|	Y��o���>��q;	X"��x�)�V�}�Қ���&cq�U~�h����/4�R`;sgk%�v��F'M;��t2z`��^�y݈a�b��4&�Ӎ�,�J���V{i4d�>�<0��32�W���A4~蜗�=�	�EȞ�o�iwq|;p/�♞2��V�_9H���Zq�;9�l	�:k��8�P�@�gf����
4��zky��Y�H��4�[�1���GNY��Q�	������D7�꬙Gb@���K��Qsz��ӿ�*���%G�Jo_z,'N�'�}6�����"�J��v�j>�{� �H�A�gc�xs�<G)	H��NB�OD��4o�y&����T���Ͻ��E�E;rW�ʌ���߭�K��ͨlcF��N���gY������󕄆��m�������0BJ\��S��l�=��aP�댣��t��ڔ�Ã�H��/j\uඏ�GQ�����{տA�a�����O�;�-�E���'%���tW�-�qNY�����þp��S���Dʰ:%�@��&ʍ�oa��X^�����d޼y��)ܻ�����ΰ�#z�����<�+4���ϸZC�Ju6R}�%q�5�~��9�G���NG���r����L�c��j�^1��E���1�kZ[ g{��\\	��ԏN��{Q�2�䘓��������`ЀI͊
�W�ui�v���N�����������rGqj��d
4��:�Z��I	��4#��$<`�����\�5�������8|�Ud���+��9��J,��w����Ȓ-��?�M?8�0:z��5���������Z�o�����TW��	��

�j�ˣ���
!�q2^&v��I�����9ǏL&��"n�+2�}ޏ��d<f��|e�t�у���E)ث�虬g�v�6vĎ���&ˌ��,D1���LO�+�eV�&,ׅ`�8�a�(X�b��<}`ݪ���Ppܱ̕�+�	�4ѵ*�T�.؛�W'��O�DVb��
&�ʝ�j�Ͼ�z�{�>;U��1���]���8�-7����}�w.�S�T�gװ>��ZY��?����pq��黳�_/�:;9gGL�%�#��=���e��yέ]jS�'+��K�ىK�?զ�_��$Y_�&h���(a
�d��VB9f�LV�0���N.��Q$�Ƹu�ځ�dKn���1@�Zu[��C�����輶����g�(�ӌ_��V@����1��-K���G{�"{�a7����e%�ԕ�p�qjA܄����U!�_0��(>���&��x&U!.��}`�`W�>�b<����E0�qQH6^m�x�k
��w)]�lZ�LTk�YYp'�Bө0��5`�2n�?��*h
BA\E����V�M+ ���}�򒫩�#�]��LX˧�:~�AW�R
Nc��P"_]IE�]aP:S�@.,�&���<i���#W*��h���}��vG{��L�����L0�A�TއP
@��?�RA6]�5��*���)7EZ`��kK��uGx��ݐކ�#vr�g�*F��(޳hV\�:��!쳧��M�L+��w���L��wHxi9=����9j*�+�a$�����윪�0��G�\�/\�F��O�Ժ\��OxeE\3bR��]��·��m�B�6��w�8�r��ډ�#�W��ז	ȷo�k�d�
&M*;Q�ƿ��
!����j�+1h�0�-ð�!wV@��T��l�0�a{$E=����FO��7/�F.���yL�������?At��զo�J��;�
w$#�/!�/������(���KN���꼪��#�dv�[l�?���{�/!� ���\��h�fw�<��6.K��et�.��{��w��]9�����f��ں�sjb}l������\%��c�G�0����12��5��B/����/����
���Pr�~Հ�$T����w�ư���	m�4�y���1�P�هZ���M��D9��!�I��3��4����*Doc��m�sYacY���I��"'l@"���q��r�L.���Y�s���6ڈ�n�_�"��13*���aƜ��
�p^d@����}Tr��$jCH#\m�z\�}C��Ǧ��S�<��I�p���$�-�5""��{��?!K�adl�/!��
�y�'
��z��BQ��%��Os����k�ˮ�����X��*1[�i0�z�S�Sf����~J�SO��k ��*�{eL��
��N��0N�%�XH]�Ȑ".��A��
�F�u�2
��T�Pi�,�m~.K4�S^� �Dv�ړ^��Z��'R����I��&P�)i���:D���D���K���⬋M4�wtDC&0�٪�c⣅��hu����X)
��~�:��`$�8]���B�"�W;��F��r&�і#��ڂK�!YI���x��%�;���wlڇ~GS�뮒BH)�9z,H�U�y]q/��o�PH1c���Io=���ݦ}�Ш"���?؆�q�M�H�V�q�C괥AW(ϞO�TC�)Z��� Ӱ�oS�y��s�!���t?S��#*�:~
F���u���޻�q�9�׬�m��X*���oTݣ�ϟ�_��=��2�s�t���u���-���r�G@���@xRK]W�^�=�6{X��vټ��d��Z�֠@�-�4�s��6�����n�]�A�c�[A9w(~o]�	<��
��fAE��Z����
�R.A.��v�D�B����͵s��a$.�[rU+��HP�Xe���SRQ�N	�2(��Ҹ�B��#���$B�Y����ǹ���(׳��Ǐ���Q�=���J��5Բ.`D����"!�y�ZE�}��t��S�
�]Oϋ�uNZ�R�"2#(�|<�o��̏����RA��F���Y��M)cK����v#��/��0W��َ����`�'M̄��&t��Jv�
Ա5K���	��a�긯h�*�ǎ@�T�jѱq�Dc�����'x�ޛ��C�6�n�x�K�-9|НLt�޼��7a�WϘ�C�h�`M�PΘ������xS��&΅����GT�>���dAc��Q�7��1Ė����N7P�<�����BܶJ0�c�f�|�K�iX���?LY�'�蘦2X;��$^J+��Bz�U*
_��|� U,�~ߣ��WaQ���Z1�sW~~�"d���ȏ��O�l�nH�a��3@�=K�=CDUA�!@3z[�P`x�jQ�|�W�z���d�ȭ�ض��ֵ�=؍��D��RN�H�^��?x�_�d&�moa�������?��j��e�PJ5��~��}�+����x,$���P��ߌ�ߖ�+�G�a]|�����hZ�����}x�*���U����7U�3����a�:n!$|�����W
��yq����l�#VŮt�1J.�m�ߘ0�b�϶ct�wtx4�0���O��j׷��6�ݒ�:�!$;L$6X�������R�i��j���ޠ}��>���1�5�Yx<$#<U��͇�e���~3��0�㟥7�0NA5��)��n�VaOg}��FCE8�0e�߿e���ꯘ�rw�	e�K�A֘���`���!ڇ�=�nnb�u�oA~�f��UmnC.a����	@�+c;N�fb�YR8����g�Ks?�Q�i�Q?A+�
Wi#v"	fF:��2�Z����E�gu-�Z�������q��ԁ���9����@��q����DidE���#OO\���?�n��7	�ùĞ�Z�/�������7����wO��q:8�=۾�ۓT h��L������8{��S�)B���f��ޞ���a��r/�Q����O�<�m
�[u�~-НH�:������*��[���^�xH?����>�F�&��Wmo�6��_qK1�L�n� uݢ[��eX��P�t��P�@R~����"ʖ�ְ
I�;��sOs)�#�o�EQj��!7�xs>G��]!�R�M�f\ߜ�=;���$��΢ȠՕI��u���a��Dì�H�$Z��n؜L��؇��ƍ����(����AmY��ܡ\�
Z�)���10F���`�N+� Rr�0����L��$�
�z�`�k����̓��'��ѕJ��o��L�L"�n�E���t2��2�Ҥ��7�p�v�1�t�K�cW}�-tR�N�XVدG�I0�2Es��D����TX��� �:yl�G��R�l�Wu%u娢�xGC(��/
�D¥�@��)�t��x0G'
��`�j�A��=��}�z��xW`*8J*�]~�Mr$���8 p�o��d1LF���_������U��m���ǹ��
��ƨ?ϔ�[�<�Jn>��B-�����I��q���' ,|hu5YlU�پ[��TGlkS���TT�dۖt��:^/�,h��"MQ5�R[�V���{Kld+���d#�t��?��G��� z��WA�^3+����ɠGA,<M�p��W����V?
�xY"7\%G-�KuG[Q+7�m%��B۸�j�Ӑ]c��Qy���V�	Yq�؇��U
�-x!$�P9;�HJna������r�!-�:�\hD#��!~۬�袡��Tje�*�Z(��w�l������y]�{/�����:,���t�*���:n\��0�
$�I}?��3#R:���ЎC�w� ζP��Q�|,w��
_tI�N9} hV�3~���ɪ���#S5q�{�⏈�;WZ�\W�8!�/�����!qku"hH��~�(�!�]֧�V�����6'Ul�Gp�"��T(�b����)m_�^}/�@��U$��탞?�� �T����X�R�V�"�)���\�Eg������x׆��u����D�E-�#�x5ˬ�!Tꢤ��B
���	�m��i��f9��G`��7����_����v�@��˗�W����I~z'�&�Ѐw["����{E\�Ǡޣ�:,99��{^��j:�����j��'X��R��5����*yB�n�l�V���x�l)0X����5�>��[dD��-�`b=�r�k�������:�a&���x�7v�>��grv�iw���|HA������Io^o�Q��3�����g��V)�u�A
�0E�9E�ތn%�UBF�t�L,x{+R\���{���4��:�p��&�=��:ӫ���hL�'�"��
 ����z��]���z��㷎h�,�������h^ӂe�*������hޛ�8#���X�o�8~�_1
��ڲ����f�k���,�!Z�m"��#�8���͐�D�N���塵H�p~~���.e�Qb�2�~r�O�Yq�\)��*��ʬ��1\d�E�\=�4���� `VB���J8$2借K��U�S�o����G�l2�Hx�bf�$��9'MY)��9|�]^}�����x��߾�[��>I��k���أ�
%�D�,c�/W�¬�L(Y�2��y�ZH�E��[F�[5}`�(1��
����.\�*�Œ�%Ӛk0r���_V�J�J0ó�	�8rz����C���ͥ12'�(�Z)S*�Z�?ڿ1R�G��x��IM�
܌�+Ԗ�[5������Y�;n)�HᏛ??���2�-�f7��b�[=�8��E:=j:
Rq�A���zzt{k����G��%7��F��2CÂ1�7#��[�����H��?h?f􁻝��[�p���g�p��ct���kV�T)f��cJ�≁��K�R������,q_�Tj��I��f
��Μ�E6��Z��|�L�LK(��ܲvr<^�x��R��r�V(N��sw?�q7N���j$0#�}#_ָ}b�#�=?˒c_o�G{au��u��5��a����f�7��z�`�?��Z�ͱs�����0�7� aYF*�2�����DE�h�/��5HV�Xr=�	Pk�w����F����n�֙�6��E#����&�!�@5X������s��$�xD{Ṩ�9W/E�e[�D?��ƲYz4>$)�Y�8��
̀,Э����gg/�Hp����i��+���k�W�hp��Kx?crJs�}��V���%��{%ΐv�U]�So��&F+��K11R�q�o[��>��юQ��-P|r���Pg�X�N�{7h�+o�]����q�r5��vy�
��J��T�M3����$����ǯQ����	|�9T�/W%plOŒaoے���C.��QZ�pѵ�Db�pCg,��D^"�(�٢���Ʊ�Եa���c��dܰ5}TJ��R��r��"�jkK0��������q��L��~[C��35�K��	nC{���%�왊iD���/d�`eB�6�v-�I����J�yM����;�,3NI��tFU{0��_C�_c'a�V��b��A�2�BbRH�h��]��\X��(�C�B���ɝ7�&߬�x�����Fz_�p����Q�j笴_t�s���O��_Gbf\��ĈO`�z�5�x��y���Q
b��P��aLUHLh�I�۬�E3�#�H�:TF݃�%:y�Xb)���]�	�,Ĉ$W�Q�l����{���D���0_�g8}ڈb$.`%�ғ¶���WN#��$���I�d,G�A��c��Ũ�:.�,[��o9)q*��:ٲ��\ӢPW�K&���V�K��Kl�t(�q�
�Q�	U�B�鐚�n$�DQBUhw����
E�w��/�n��(�%����/�׮�]�L�e�ȉQ�ëZ3�PX:U�Ot2@�u�
>qK����A�[��h�[ع.��P�놸%����t�LC�P)���3�)�����aO ���E��i���C���%���;���AM+�e�W;��`�#Q�M�v{��v�,ph
x�LB+=���A�
0�Y�(�� �wѿ�h�s
�xp��*\�R�����A��xfk��V���6ԃ�G�D۶?t߈�O������Xy�+��-���P �;\�	�*m��n�AK*����_u�X`��'�r�-��"�{�>
��$:My���Q�]��T
^�F�P�[���H"��l3�
GL�Ơp<?>�>}%#��
�Ԃ��}�Q�QY ����	�Y�kAy����e&:��K���g�k�<ŒW;�I�F`��,��&o��T"34��-dmܣV��1x9�VE3�yn?L��k��;��rlչh�ȒJ����KC'�;�s3n�>�����4��CI�n�ly1{��A�
���X��1ƳeA�o%��PN����dʹ����P�C��K�͈�`��?a�AP��;Ľݳ�vz��AL���
Z�zګ.��wo��N����.ߺW�z�=l����t�+�}���{"�5��݋���v���k��(�=N�,����S�4��÷L�����u�n�"Va�|�ڑ�f���7��Y��>:��]��<$�	�����O��-��<��Oh��Ä�ၗ�`�w��v>�P��9���=���m�
��ko�6�{~��]��H�n���k�O��a�Ea�mq�H���X��#)K�d'�6'HL��x��������P� �lu3�'���\L
%�9�c��<;�~5�i{@�#ыDIK�dza2���b�2��J?�#�Ų�V���+�Eb�C�3��L.���P�K�t���u��u�r���xz3H4I9j��ז兠��.���e"ʔy�	���8@ ��%!&�J�T:e�$J(=dkHHA�Zk�'Ϧ�����0+v`��i�y�h�~��v���)/��+v�.����I��#�7��̞#z����9T�����ƈ?�Q��ˈ�J\fLs��
�+��d?���欠i��%�UEG�-Om�{�'k�=y
?l*�4Hl� �;.��a0�T�a0��2��t��ޱ�C�VJÒ&�[�S$/��K.����6�_B�&���La����,��>&����Gc���a���z��&/��f/.Gs���d�P2a��;���Nj�hQ iBj_&Yٰ�2���3�a�Q´	��Δ���!��v�nϙ�q�Rk��?����|��k�ZkU��4��읲Ƞ3��2h��gԅ�4�v8�x<���JR�:q��>��S@
�O`�q�@�=Ө^�G�VoU:
�����"���9]#�]�|\\]�C�g<�<?�>��D���5z0�GU0�	�̏���F�A�?Ǒ�c�tG2�י�n���p�u��La%�*2@�=#I�[*I��<�����
}T�ęh�Y�Qh7wcΛN7Y?#́�V�\��#c$c�l�/;wQ�A3^�tO���L���D�����y�2Ӄ�,Y:��܄��@�
�R��i�k$0%����s�`�F�l0���ʹ�G�$�L�V��Q(Ã]|�it�H7��=�&�}K�V�c�2U��gO,��^=k>\L��uϭ�[����.u�A'�6����1�*���
&0{��=�I��B����`
W��\z|&�yK���X�N�x�|�����*G����X�
Q�� ;���wBT"�	"_>X�#�XU��-q�QwL��
�#�^`�b��=N��'Nz�e;&��{������`e�\�~�b�D��7����M���=&�ۋW�3��-"\6�7~��f���@��%��'j�AX�~�1�
vO�	j�}��4�W]�}{tz�v���6�[�!�J�Ѐ���i�M���D7��Ν�N9udªU��i,��Gp_��ᨅ8�I���1`�_~P�qFM�<����>)Z�q��v_���%�.47U
�i��0�ݼ���]��<�g�ǘs��({wa���Һ=���k��UWj����!�J�e���s�Q[9���?�WC|5Ǹi����:���@�w~V
��m.�PGq�=@�����TsJ]2!X����^���G��7��o�*�9�2�p��� ���!Q�Zԥ:�l��u�J����G˭�2�
��ɭ�s
n���3��|uIq�!��.��&ҞB�/k<F"�1(i�rLD7(�Fh��,]r���̀�Z�C)�8��*E�^�	^�ڨ�gH�n�l��5�48�
:sXxt��f���#�����מΧO��=����H<����j�3�n����@IO��jc��ܤ-A�����~2,�]��j��Am�j�>t6!���
�С��;bǁa�4��V�r�.LD�}u��&��5F/0t�n������3D�_��R�K���Ymo7��_�E%���W��8�]�$6j�z@�.e�Z�q�V������"�'m/�_�Ùg^yp �L���f�ēã�B���5K]/�i��V�8�s��*aU��ʒ���k����Е�LmS%R�)��7�V�Beb�R<�z�_�u�D�SU`�[H'RY��"JsS��ƕx����չ��\%{{�����$��Z��(�������q/KS���¬tq���d.��D�$n��#�7�MFo�����F�=�hb�\[\;Ph�-�#Uy��?"��I,�YE��J@�h�f�v�2���Kc�b��(�=V͕U .�a�t� p\��N�*���)��y�s����㉐,�T��)"��*W��_2��gQZS*�ִJg,7ZԗM�+�
e��L���.�X-�Z��Xɪ��r�~JK������K%��NSUUSfU��̫�O���(�7����`�XYY��V��J�+�����%�	���IG��$�����`��\Lѣ�A����VƲ��@a���1Jk�vi	�* E�����=>.�uc�cB��;c�`�p4�7,xy+u.g������n�A?O�+o�]�H
X�&$ǃ�K���ʎ?�	���kw�=����%���3{��ڷW����0���0i��DN�.�n]�c�ܘ���A�1+^�1`?�X�ͩsV�j��N���Ä`�A`K��w�w
�e
p�H����g���X\��f��5N��
�u�<K�oG�����t�`�P��c�/��Ez�[qݰ�<����s4���@+,%��"c�&�ۿ��)�U��������\۟%F���%�E��!�x��j��0W�<��h57�g$�VK�{��)FX��
��џ�!�tğ{��07��51��/��T�b&�W�,��SP��#�3�c��w�œ��~���:��P��A�ߣ���3}΃�|>ѹ(�0d��"�Rv��u�Sgx�?��x?jwB��Yi�-Y刺��5E^S\�8��w^�z`�(�<��vr��rc�
?�v�(`��E�E.�Z�,��<@N�)�;$J2�@��]���pY7��X'*!/h)�I?Tb&��i$���{��v���pA���el����ƭ�n3+��G��&}�)������$X���~6�|�w5�܌i�S{CE�Ӓ��m��7���?����c�w�T&�T6�5�cn8g?��d�� "U���cr���ګ��˿�V(�h��nGd�0���7޽eQ�H�Zd�ǻ$x?����8��me�v�n���I�@��`�.8�x*�d�:mIVC�?8b��s̎�w�d�H��=���]7��lP�� ���T��[T�`��6�lI}��m�d��]p�-Nv��r�2��z����Z_1�_�l��-�
�������g�C;�?�8�M�vw�9U��qf��SJ�(��d�I�l,��)��%���8���KYUmy����f���B�4��!��f\�Fb\�(���!�R���u(d��
��(����Z.�q�k3��\]��%�%È�(}�_��?�k�ݼ�RDi4 /��E�&�l9��Ph��I�	{��(�h�m������4���,�ݾ��=��"t�z|>z��:��/��7
���pn�Q�+�.���.���T�zV�9GT6�;�Q���*�������~=�A�ϟZ-_�YO�}���M�`<�ؿ������np��2�5 �h���A ai�a
.d���s
�ɛ��T�Q.��$��\ֹ�8�+��_�i����1F_�uެ�͸UP�~����R�Юd��5����-�������6��v]����b�o0V\��i�f㜤���]��JBlytb_��y�k�R����8+e)��qӭAyJ�/�����w�WƢl1n��M3q�0�oq�I"~ahB6)5�n�o�h����fY����fP/�3�P��1V퓨��pb��@P�F|����x-n��-���@4��|�m�7��16A��*	F�›e�!�귅*����������P���4S`3��愤.� Q"�-{rҝ^�t�%�G�q�W�$����GRhWo�g܃�&d`�DT'Jn@�ci���.l�k�33V�X��0Cb�|k̓k�"9
B�c"�>J22Z	����9���+z���w�Cc͓[5m8�|����<`��~��c����1��q<��ԐZU��@f��}zo|�Da��I�~ə�B�e'b�P�4?Ct���d��D$E�Д��}]��kZA��#;��T�k+�6J��
^�ީ#�մ�\���;��,<u��3It$�4���yM/��ɿ�@/�ڨRҦ�
����Zl%&R�5�_
�[���>�|�m��Q�X�/>�PJ:m��z"�v<꺦�~�/�[�'	�̸��%�8!�	27o$
dFg��|s��Z`4G�#��+v��G��]0�rL`�\q����Vv}��]Ǡ|H��}�	<�.�o�)�ϓ������L{7���=�e�;�p��uԻ\��ﴡ�<�6�na2T�ou
;qj��v_��Y�l�'��+�UB���i�r~P���-tƣ����
��EA��
ʚ:���K�.��\��>��a�dĽ���B����x���+�i5o�5�A������W�}��n
�q���v�𓳲�খǰ0�5>�����Q�X�M��:9|�ې�����-�G�����n���м:�ں(���ǬO�ò�'� ���.JRV����Qw�rxk����ݤ�_z�\ҿs-��7W�s����eg+��R�Pݤ��� /�|�hC�ě�ܤu�Q�7�5�~��G�$�[�y�?�‰��#��V�n�6}�W�*X�LK�&E��A�t�ڇ�[�4��P�@Rq�b��C]"ʱӴ��\x��YJQ>�F�
DQ)m�5nW�|�/��+%����gg�S2I�U�qj4��	�^6|Z��PhU2��rX�J���Am��Dm�|�ɹ�t�ĵY'����`�Jk� R2P�T�j",-��݆���e��se,��K��_�!���Hm��7��G���FXA���eF<QT@np`���1Ӫ.S�(�t���֣+�"������!�$nm	�Ʉ-���1��t�.��D9R��Po��Ő�4�r�T<M<�J���7F��z謪F��+�f�핇<|�W���|=��HсIEI�ڴnd&ɑRR��^�N��Dm�T&�e��(�z̍�E�\��K;�نO.��g0�ͣ��NQ<{�Z��ug�Tg�ӵ�C���r��"�>z���a��1�������[&�&W����[ڤ�N�q)�r��<-�k�X���,�����9n��@;P'����%H�U�I�9�9�A��_O�Q�~�U<v��";D�v�u����o9��╒y�y:J�&LP�5�
T=�[��B��m��[*nWz�{���8���3e�ZXO,��>�J�Z�����'5���y�����2E��y����O���r��O`�x�!�P�����Iׂ�(���X�O��1S�����o�<��~���we�,>�V�[��i$�~*�֙7~�7g�PSV��LRk�PTJ�Ө}�z����ŕ��1C�R�"�D�6�86���I�'ף)��GZt�\�քwz��f�e�
$ˮ}�)�]@e��2q�*l���I�<�/�Z�Ŏ�z�n����.|jg���+����/��DҬG@��x��c�S3o�U��=l0�A��0��M1QT��	�p�nw��`7/�ͱ9aS[0�Fү�&��P,JHU{�fT�8�����3
���c����/SM8�2
7�5h�X���+/��a�ş�|��a%��_��I�H��_��rX]���ð>:��ەc�oD���*`���#<<,C�"|�u�pK��>g�X�҅��C�^R|DEa҉���m��0����h�����o�1z���VmO�8��_1�:m
*a��}�;��va�p�u�&��±#�iU-����6-]��IH%��<�̛��abꕕ����Ǔ��D���T����.����Xth����c��!�|)8��!39}����f+�vz�J!(��&5_
��0�`�0��Aj:G�r5�����B*L�oF�*�ß �cH2{�[�D��tV[S���.��(r��c���~Y
���k+�#�+��G��W5��1
������3���O"�6�{�{Bɹ�P��B�
&��2��a�(o0�Ur�v�X}PF<[��![����!\h���#�0Jj̞��y
�3{�qL�4�S�*@7J�@`��T�35C�Q��A$�]��W��Ɵ�)=U��"�"��a0=Y�n�Y��$�����s����Hy�QZ�}c5�t�[�K��<
���\���;E�1����Qd%��d"�6����C�|ڂtg�s�n�LH�B���66�rc(�yi6h��!C
j��5W�j�.�)���ےJSv��ڂwK�X���	��ԩ�B�E�1�z���c�a=d����:�掅3���q!-7��(��HZU%�G}C���� �Vh'`�y2�}��6Q��c��~��ꀛ�6R�ˬX��(�[�QcQo`@)�p�9��MMu��T�R�����}��eQ�����;!��X��4~��Š���v�ur.]%����k��g������T��Gr��Q���OZ��	���{S��-[���z�k{/*q�;Mގ��I�n��c����>�E�	3	��z��ο����Eݭ����OA�
�t�>�].��h����*.�u�}f�����
[��'�n�xS�Bs��@UA��;����'/$uBJ{�� �$Z��,�����L����h�
�*#)z�,c+��>L�X~�N�9�#u�M�{�p���h"lb�~�h>~U�Ϥ�tv3԰��m�@E;Oh*��3'���X�Yq�ob4Ž������iD��8�	�MpB`�DCOڻ���0�E-�q,Q�Ә�s®Q���rGI\{3�K��}��Ig/,���4��X���г��sۅ��e�]
}x�?[v����Yɮ,������L�t
��ج��x�d�8GO��֦7_aq�>��l�KD����w���S�n�0}�W�KTq�a}���P$��&K�$gɆ��(_b7E�,��9<�Ti��f�Q�:3�=��f��S���3��&�n�*o�Q>�(?8Յ���u��	��W����]��^����pKa��G]��
a�]#�;�@z�)/��J��0����Ȉ)�0ij�E�B�?c 
�YA�
Ph#��|p��������O�g��Ea�Y�>�]-��_�W�
��b�JE�7O�f��X�'7�-��є�env�^�k�Ą!�� K��Y`�3r�f���(��bx�5ٷY@�i��#)i�X�����j�)�7~�(%��S{ZH��"�b�4���Ue�2w\3�8;.��X�%�HOR����<!�d�6{��kv�垬�S��9�9Ϥ��Η�]婍�J7��O��GHC	_�|�9��?
�-\��VMo�8��WL�d��,���Ms0���{(���F2Q��aGH��;$E��	���q޼y�A/p��N�fc�W��
��F�-w[X9�Q���!
�V�h���
���n���.JU!�c�v�%VPt����繱�@�DInv�,�LB��VNV�%��Z���=�B���b:����G�q�{CV�9>�LV��Y�d�3(=��K^����-j`:aOG
V5�@��
�{D	DJ�蹏#<V2VP
e�j,����ѽ���i{y��lD�ZM��r�#�(@����&��YH��Fy�Z$1j���T�Q{ �d}X�Ő���G��0Ch�h�!�l��ޥG[��:q�]�K���@&g�qDŽ#k��ۤ���1�ަ��9�TR�Ǿ�0��,:�^U'P TܰB�6^�F��~*g�Y�C�#����~Q+k5��x��	YX]]u`��B��Լ�JSO�8���J������E�V�^VɲbM>�cݹm��,��G���PO~
�2�V�c+�Y*�q�ovl�I��-`n,M�>�uI�hDZ�0�w�ź�4ᩈ8DU��5\�Oz(��i��C{�^3G��}B�|��<C֪t�L�di���K���xrƣ�|�'48��4^�8 R'L��wC�Vݱ�����+PP1�.�Ͻ(�.���������5�A6�=�(��^x�\+��T�`>.�?�&^V���Vޠ���m�[������PZ��W��(��A��
>�-]m�:X�g���j��h�����U/Ò9�
��#&]�	n��*@M��rFt4(��e�m���rcU{OwkX�����6�5s�w�:�.SB��U�Х���I��?�#��R�Ǒ����	g�4�'E|q�.l���)-���T���>��=�1l�=����l	��WK��6��W
��В�l�h��9���C�ba���b,�*Iy�I��;�ˤZo7�9�oF3υ�
��X��vL2
���t�?�E�*����e|7�xL�4�Ŗi�H��xβ��V$Q���J�`:u�v��#���"Ur��b�%+A�%dl+�6�e�C������W9�Q������Z%������̙������$Sƒ��!���J�9MU�tB0nW���Z�)k
;��}Ǔ�K�ЕJ+���LXਟ�e�R�Z�	��$� !o��q��!���A��:���'$9k5�FX�dBf�qa0TH�*;�� ��.��&U)��iJdŖuYL�� �!�
�XU��Ч�5%�����K-+iO�%�v�D�3|�4wɸp�|�G2(�C�VhD��9��$��f&��i���P*!-��|�!y@W9xv�7j2��
i0�ͥ��`z�il5��g[:$�tC<9��������u�X"��@VL��R{x�mE�r�0�X���<��j���;�;��ߘ�́�O�.�eQH�	�=�K�
��4u�����lk�6��t`�T*��ɜ���n���p���Q�Z�zѾ�:�V�<�A����EBF�\����g��A�$X��$J����Ga��0̏��'R��~*�O&�U���炭��A��-��0����|�Ru�.����X]v����=�����{�,Y�YkUIN�Z��K��?��_n´�J?-|�19L(�b��#?U0l6�afL�:-�ڎa2� �zq6��K3��A�ʑ{��@qt�8�C��o�a_>�����b�k�!��q���E}H�c�O֏E؏���<��hY��}�1+���}�w׃�G��eЊ���\�Գ/������w��58#O��g�x}�9/��\8a���ӟɟ��T�(ō�0ZA�{��������Ӈ8&��5�9Ė���G����Y�MI���x��F�Do�,ߦ���`�č�i}2i�K��Ɵ��[��k������X؇@H糑~i�ڞU��L:g��ħ[|����|)�xrlz�y���s.��:�lw�r�
���<�㖭{�G��=7)�a�ѩ[�N�q|��8	
������?��h|���Xmo�F��_11��%�±|M�j\Qu�~(Ɗ����ݥ]�ޙ}!%Y�\�!wg��y�m��nt�1rY:�����D�)��e[û֕��	��*�BZ4+,&��>[�WJV�&G�u�@�K�B�������0�nS!T2GE�\)�B�i�[U�T�������/����N����x
?�+��$�!��X�Z��sZe�S@x�u)�
i�Jlh]��Z�c�4�
w�R�Јܑ�^���H�J�ZT	��R-!'AXX#�",�F��|@�̝\a��Gط�ĒiXE�73���Qx������ZFeG����IC<�Wtc�ZN|�H��c��#B��E��4��Z,	:pC�]�bE��.~�ae�=��:���I��=�G�D�AugPf�5KU�#���`�@t	x�M�	N%�
�l���P���9qa��F��ө���b�)֜�!|"1s��Wd�#�Y��d�h�Π$fg9W^N��;��C�Ϟ���I�������׺hI�,fg�1�\9$[���N+�*�ʫ�@Kjc`Ϯ��~���@:Y�K�y��s��I�tG�մ��:Ru�`��ʠ�
B��
���\.$E�#�U�|N��u�� #�b-�F(/=�Z����̰�F�9����>�W�<��1�#���Ѹ�;������Jm��&�B�ž�
�Ȣ��=�^���Z/��n�5U�-�@�r댦����:D�L�m�t� co����[{P(�?��-�ᰤ�Qi�Jj!�6���磎N���3�V�p�E��;�y�}G.w���
Y�l_����a#��bI)w5Jl������K�+�1�RP�,2�I�P�\q�]�цGgߗ��o����騼�۩�� �T*)��m��w$�����ۄ���+YK�ڕ���2ڲ)�G]mj4ï 3/�M�р6�X����%�1�nOM>
R��g�}�����h�������dO`zp�/��
5��+Q����ŴF�]Q����%~/�����s31�A�rC4.�xȂ̓7
 q�o�=��<�G�_�*i�+�����˜�����R�I���N���ںN�E�0NTe�G��ROK]x��\Ҹ�r	ozpN(�j��R�"���9��~J˅^S$2KD��B=�C�Oi�o�|�筭�I����h����ښh]�m>ޖŤU9���y$@.`�W�I)l������%��3�)�fx�v{77`D�N�E��^y|�yt~��ה'�d�w��IW��������YQ��y��'P�����6����7vz�ڷ<O��c����L$�����X{B�֨ޥ�0a�� �N�ej�]-�jp;��OȘ���x�Rq_x�7�h����'8Fs*�-z�Y�?�'t�o���n�H#A,E�˗�y�=�ׁ�RPu�����7�{��
}��~žOh�ߊ�b�k�Z���6E5�v�JҜ8�|7q�2�$�s��d��>C�f��pMv�O�$1�V	��6�?hr���m���)�b��	�^�N����LDӠ�r�U1�GR(�qp��.��V�jIW�k�8�����g���,��ar�������E�����0��/�z+Dz'��j���ѿ��Ɏ�55A�A��.D[�T	�V�H�h��8�ܛ6;`��я����M��L�ST��;F�	b�
��)�
��Z�Çl(�����<���w��<�����ax���v�Q��٩��dGg2;�d%:����v�wg���eid�vMnP��ߣ��+`�Xl)�8c���	��Za��Z]o�:r}��`����P)�k� �l_�gw�m yY�eK�j�#��_�s�R��=�sA���D��b�X<UE����_U_6����ת����ApS��ͮk^�e������:U�m�?�����=�E9�}oF���V�E��^�û��!�I�e=�U�m�]ۼ�ǡ�(�UUٗjߩ]_�e�W��]S�}ݵ��O�j��Zo6�_C�w=�Y�uU7��n�dU���?w{���ʆ�g�n7�:<pUî,���r���{�~-?^_P_˦{�Cpu��G_���Q�نj��ǽz*զk�W�z,�4��՟u�
3�_�U�>W�Thv�D�ܓh�<jj��n�_�R�����Jm�/�i�6�}��A�?�M���	+0oՁSp������S�z���
��WJ����E+�(m�����/��]��`P�R�C[�닪7�h���R���S�~���=t]�������_�kbD�&��o�m�u{��v��W
_�H-����1Af�4�c�i�4�g6����S:G�?�4��W���
'M�D����\z��1�S���<X�4BvK�'٢jz��7��<��2^�X�ϔc�#��[)G����*��3��Z��cu+�UV-��He�A!�*
bu8�*XYS)�(ˢa��<�凍Y����ܗ�"߉a�Ү�`�L���H��;�� ����S�4�$�V�cj5A�	M�ʩ��3UQ��L��(�4��3�9�x�\�c���O!\E��+8C�/�H��I�����N���l�^���m����ઘ���t�T&��-�za�e�x�ה�L2څ}E9?*�C�9�����w�ar
������~n	�sPaK��u�n��S�4�b��T�Lo%D�W/�1�{�P�	C$ʂ�@��vc��w�=�a��x�.���=|���w����x"��n���Đ�-t?R�þ���s�l�S�źIcC�=(]E���uQ��F�-���X�O��=�憀U����rED;U����x%��%��O>4?|�uGV!��ۮ-��/�\6�l��#�<!/�eET�wr���׎<马&+t��C
܈�?|��#|E�2r&�a���@1qM�
�,�͜��$�{1�A�9j��ѯ�ئA�a�E��*y�[�(�A��4HHc��`����*��R��AҘ�,��0��1��Ȏ.p)�%4Z0�:���ʢ}Y���J��^�
��b]�#�x��������o�u��vxl9P��*��I��E<j[%����t�^�|�K�wO����!�Y`E�&ƒh>��d�3�L�
g�$��bċ�X�������p)୉5�bap��{j������Ǿ~Z����iq&2'�Lߍ�2����35+��M������d�P����E=�_�ۢl΄��X��K�
�4L(��
m�;��!2e_��}�L��P��e
f���S�*�&�ͩo����-B����*\�<q����*OM
���+��֯��)1�_y���H�o�S��2Y\����)?o6������5Yfü>D�
f�D�X��9� ���t"ҥd�-ki�pX0P��f��-��6�ח�E�,ҽ�O�t����ϑ*+��9\@��vi�Q
��R[�,\����uʎ&,�}dk�E�mo�S��/�^&\����۔My�þ�S��,����g�.��c��Ե�4���Anu���ظuW���d�
1G�4���/�)οV��G�?��";!<�:���h�P�DJ]ڣ"�dP��k��ɷ�O����.����2�2;dv��@�@B��AL?����P�==�-‘���a�V�����yv
�9(�<I(����o����n��䐉i�81|��_P�A�}�ug��C
8�3UgC��� ��!/["�1�7��v�����&g�4�~�PBw/�}K��}��O��)�Y�|��!6�
Z�l��,2G�e��e�VT���`���cd`����<H�)�o��jve������r�0�k���W�.Lz0#�؈D̈Ak	PY�ߝ����K*E�PJ��t���3�-�qg�Pq��p�����C��Ǧ��,σ;�+��tԑ`���/#,ڰs�wO�2��v�SD�h�@�ʋ��CߝF���
�&���~e��K�bf�1-�T:b΂<CE��F����w�bK����Bv�}�?D�t���[4�W��	��{Ф���M���!Mi���$AƼ#O�p��6���.���}��3 �j��� [|?��z�z�1��3�����{K�Ԝ�U�Â�
�&P<&���i�W,t��j��g���r;}���_r_�8,�7���?��{���Z��D�+�?Z.
�˞�?��P�{d��Xj�i@f���K�(�q�}�¼��ZC)C� �����]���5���w���ĕ�r�xA������c�F�
m"��������[�C�x=C�� ~�?f��[�N�G��e]�M�;���l�$��s�c�A�bLD���.@��[�����w	�b�@2�D4'9�Nx,��
^��t��f�&��̆q*�Ӌ�DT����,�93��AR
5��	�O�an=�8p }��_��ە��[ݖO�D�!L�A�Ɯ�C�x#0��=�)d��c�u�S�3���QX�s��	�{�J_T���w��£�ѹ�p�G�}8@S��0y��3�3�_�Q���B�z���L���[��qI�����~Dm7c��1|�F����A���� oe��Pf$����0:G�ȡV�g(�}Q���ļN��V�es��?#1Vrq?��9A.!���Ew���}&' p�H�}B`#ƴi��0�ȱc�k�KD��rs�0/����Q�z<%91y�Im�d�L%�
��.k�x��˹�-�	�b�G$ё�#��L�1M�h������@��,f��+a�<+��
�t�B����1��ż�����'��O����1��^�龮5���w�o8V�M�n�WPl�M�A�
��P��k��Ɯy]E�u�0\˥̰�mNw����@�m�k�V]������}�<�O� ����X��k�yH��dW�gpA�A�t!ZM�:y��6�4��T� )cĕ�E``i0b�~���5�K�Ra��K�0�D��WmD��!��&���X����\$�����SL^s���xa"Vz�f!��F�,Ϻ����蚣[�u�Z;OM��,{$��)9C?����陇���$�4EAO���QC�d�Gz��G�E���$�$ �^��Q����q0��~�+D%�.,b$���fVf� ���`ά�iE�h�g��jM�9�����z69!��s�L�D9��`"	����*���$Uj&?n�'���aVڦ�y	dx��8�qa�c��j�E�M��u�*r3��c���—q���bn><�{���z�v��M�э�����E"I�uZ7�2�Hs
yQ�R̻IXg��'�.�4#IlF�� �r�a�|�{^I�K��3���,�%[xt�9�W��I��F��Xx��ʯ"���’�r/@��1W���A�lٟQ+�4��KR�C��B	���s���.I �e�������Ҟ��pK$�
��J��ʙv8��Γ��14
>>ctDȰ�0� �'�C���I��א�M�o�Ȝd8AT��1S�$��w��|������q>TT�5SL6^�I�zS"#ڞ(#��69���� mx�6Gj
���=ox}`� B�ޢ�QNӡ���2�iݷpJ')&��N~�IG���[�oo�d��O�
��vM(�M�A� �q|��(W��2��Zɒ5�(/-H�d�E�ѻ��kݘ�3�Z�d;�� ^��7��ɛ(m�s<�hh
���q�F�pך��ϡEɵ�&q��)[o�}63�BP�~���A�n���T�N�@}�W��Jl�C��@�&}�*��'�V�]kw�Ԥ����8�4�=�3g��n�D���������#Lb��%p��Xi�ùP�hP��� ���f`cn��L����s�r�#�����rhl!QR�����I��C��LF�%�no&W�OW0��^/���>��O��s\8C����C�2B�20<I�J�4g�:r�J������3S\Ti\���%�XRc��!C9��Y��(|�b�G�
�x�G4�%�l���S�Eb�,�����b�O����6)��:�����8��O�K��h��ob��G�z�G%�����4��]�σ9Hd8K5ϩ ,O�*1V ���^G 3!>��}�\S���2�3Xc�ڴCO��ɲ$-g�4M�V��ˇ;�L!CZM�2#�*�L�ʹ�e�w�6��E��bfh�P�qe�<�����$�F0�dh��^�hD~�N)s%Ec����|-�ߪ|��6��w�m�m`��;�
�PI˸�h4�%n]kYTt:��u3��ō5����Y�Xu���_c�3�"� �Hi[v���n�E��3���DtB]��%���~��V��`��
�k;C߶��Z3W`Ў.�,�
�d�Q+L��#LG���G��Q%���a��pK���]��*om9j�i#jo>X�����E��f�`srM�6��JYƵ��ܥ�MꚊKAm/�E��J��-��f�b	,�u��
RR��y��ĐƝ3�a��+��[dP%l�.���o!w�:}�)��R����VMo�6��W�n؋�R�'�C/��a[�0�[ܥH������R�DYN�k� �7�r��B}!��LT�6nFJ���r��t�Lj-���_̞nnVo�p��U�m���l�Ex+@)�Tn�QBέ��ǧ��Ж�@���W���dIb���p���.Oa��>��5�T�V�h$Q`,C}j�3�	Y9�j�댨�s)ؚqx�4	(��l
!ZxhP���Jm���"�I��j0���<�)-�]�3�����j�?B�3�6��A�c��H��8j!,n昑���ޯ2r	�rt�*!�V��pgZ�蓦??��#k�b'8�����8���߷٬$XK@Zx�X�$�>�
��/ƻ��~�U���H:R	�{b��)E�-p'��A�<t�|��(�`׬(�}�71k�Li7_C�$��,��󴈓n�J�5¶�G�r-={m���H���ާ�bJ2k��v�RN�
e��h3�<QVJ��AwBJ:*#:4x���涏���^뽄�n<�x2K�ֿ���-
f�}��
:T��i�/�6J[e��Y�������g}�/�ܽ����k�ۂ@-/o!R0�%f�"�����u��mA~2��������-�;*]���]�2�g�����y<�q�z������9:xq4\���D�.o�o�f����^l��L=�#^x�uEj����ep�!	�4%z�Ü�bF��q�^���'[� ^�C,��vF�4ݘY
3�$(�!d�����|�t9��F��yF�d���j�:m6�de�vD�
�O�d	f�d��������_���?�Il��>�f����Q�C�0�c��QL.<�FK���3f�������O>���>ȼ�m�p2m�\�xa��59�֍�C�xG��tϠ�jk �p���}�9�T��6���^K�����7#m��
��U]��0|���B!NH�/����>�������(�:'Kf%%
w��]���ҷh5�ͮ�<�c��H�k޽��5�qM�����w�!��B)� �i�e��9\YS���k<�)x�6$�%�v �hy2�n��,P�1W�а�T�K����ǧߗ�PI�Y��I���u#q
&��@f\�*lP;���J8��w��)S���[/��V�H���:�N\K��F/�ڰ����Y�G�;��4h��"Tj���+{��pHf0�f�#�!�;mxIЊ5�m����8G�a��U�!=%��!g��.��qƨ<�aԮAJo�`�0*h�g�ӄ�-��I�݀�N�;/�
n����8�i_��8u�}dPb��NZ��8|8���p>�V�h��O�p���a.��Z)�X),�n�Ѓa��p�f1P��LJdCg��V*��#o��Ke�������w�� �:z8ėt���Ӓ��CD5�E<nH�h󨷜C���y��!�S0}z��}��R��U'��qoyX�qo��y��K��f�G4��O���Y�n`|B��l�)+Sx�6*��h��шI�|��=����}�*�{)�g�{�7it�������_�d�h�d����+��0��%�.s~M�L����3į�,�i�z;{���k��r��S�n�0��+<a��਻��a����B�%n�"K�$��ߏ����"��||$�D3��
`��B"U�wC�{�o�C�3��>;����{�7�7JD7	�¥����z�!�1�
"���d��k���B�2�{8�?����P��nL�Y�A/N���n��)wL���
TZeF]����b	oD��[�T�J3*�P&+�N�L>i-�,E�>#?"hQ���� }�؏)�f����&)�2�TwnH4.%P�t6�M��:��\7x�c��n[с1S�b��4"Ɔ W֯Axܟ�j�".��
V�Z�It�*�א�5�:�ܫm���֏���s��YYë:��R#�^�<�˕���)��Y�D/�
㆕�-j~*!T�=fo���;j���-ɟ�M�ejF��#��S���o,{W2�7�벷���[��\�-�MO�0D�s+H�(�P95��J!
'�!�7�%Nj�v���q+����h�=���6�~{��wK����}N�%6�{��!I2�j[|DOH�ED΢	�
��3/$����S��	�i
��쐠���.K�`�B������t��<5J��_g������FK-�q\�9%�J2�W���D�����]��V}U�Q���@g��=�A� E�=a��[C�
iq(t�ڤ�������w%/.�͵	�5	�mL��"�ʊ�JM�^��Í����Ӵe��7rk�O|M����0�(���%�kﲄ3~���~��r�7���U�O#7~�_1աs���;�R����PO���CU!�=�uq��M.���;�w!��K����曲��m�N-���W
¢qv���t���p�5$%=�5�bT��G�5�Fy�sAX�@ϥ]�3(����˳�[���@Cf��7Pa�T��HP��/�\�C�4�Q9��`����n��V֑��f�KegU�53�nP�
M���Dhn�32XQl[�Q�F�Z��~�-�Ϫm5�N�!xX�T|�җ����r���������%_���_ϾO¤��w_e,���s��46|�X��p;h��`A�?LoѠ�A9<¶�C8�V#7�^��#i͵�A��(•=	�)�%)��念�+��T�}*���o#^���& cS�3a�n|�S��D�7�JI,��F��@�B��x�p��!��Mh�t���t�(�3�Y6���H�Y�[�7���	��;cʩ5�0��D:#��f��Ǎ�[,1d7��7vsb���ݐ�у�^�w�HI�O�����5a�ǽ��O���:�3�y�	�+�8ԯ�G��g=�dX�E����A�Qu�^E�l�T<�)���}�\(�658B5A�ҷ�ъ��*�.�(ߠ����Y�ì�~>D3i�ba�)%��yDǕ�-A+bV����fÝ��rc7�^�ɤ�.�f&�'�KЧ9���i^�u���:G��`+ܒC3���Ty\O��IL]H�I1�+%�r�i�q�_��O�k��<����0m~�-�jv'��HU
c,�dH
޾,n��|>v�+���q�;�!?�����WL��`t9�I�Z8��2�[�묾ȵӀ��YĜ�mo��Y�C>ي�?�R<q֊G	5d�BI2f�ܰGb"�{>3��D�E\��ct߼�H�Vp)�L(G{��].�F׃E^�l�/����XN�
~I�zR��j����Єȕ����蟣�.w\s	��WMo�8��W̦(�L�N�n�8E��Ş=E@Sc�0%
$��[��H�-*�d'k�r�x�H-�,�`P�]ʼ��]Bfpuw9�F�\E�V�ʹ\~��X����9�Qd��������~��Dì�(�����b 
�q��7�^Xۦ�c��s]���lY9G�:�,RXiq�Fr_�ʴ�o��������Y��J!Ȅ�7,t��@�y��S=�ac�ę�~nG@��;�5&��8*d�X�u��-U���l6�=Á�eI{�����g�%u��4���z0�Ϭ�cx?+��V�U�ë�b����Q{�&��D񭫗�߄ʟ�P� J]��LH#�#����>l�:A���;h6�!��\�$fY
�Ѵ5&��61�8�#f3C�0k�u��TF��M�ڕ�9�Dr��8��c�P��
	7�q@��t~�w�}�����K� Ȯ��OD{-oN�~1{�y"�_ϛشe��
�a�tɅt����nۚ��|�V(��i�@�\�LZx�4YQ?
7nk��:���Rt�-�
��i�$ѴJ�5�oDk�Z�y�!�!�-|S����I0�D�}�q�;���غ�[w�(�D��PNT��Α"9k�ɹIe}��Ew7.�9׍Kfk��tפ��a��y� L�;X?��[j����s�{��&���y��n��+�f��'��0�4�-���ЖJ��0fM���O[��tRq�"�N>`k{����J�4�������x�Mݾ����Ac�.��j%��τm�s��oW�|���a�_���l(S���AC�X�FW�^���6C:q�*|I�N�6���5�8 ��c�t��(�\cܺ
A�c=����'�x����{,���!�=B�Xh`�c~���q���E�5�wK��2��L���8>��Z��+�}��9�5~c��6�G�erWΎ�ų�f67�1��	8��K%ŽJyj.<sg�"J�4׃�+����}fE�,�	y�����l�j�_W���&�t�3hP����R�j�0|�W�<�cN�Ӥ?2Fpm����FR��ؿ�Ia+��#�N:�\;;\�kr�����ɋ��_ǽ+�wSX� ?fY�\a�Q��ʼG�N!����ZM�63���7�aM�k�����~1C���N1� �ē[���:O,>�Hc)�N��CT�伾�+�aU9�f��ߔ�;�+�U$mT#��G��>���߽D-��n���c�g�*wX�z;0����J~�)B4�Bw��1�J[�6�p�m&�/7�ש�1^�#m�ܮ�&�6� �i���\;;W�S�xsB|,�c�
�*x&���Ymo�8��_1�H��r��-���4�b���.�C�Mh����E-I�1���z!%Yq[Hmrf8�p^���X���b)ᗓ�_���Ւ�UR�ಐK�E�i
�H���{��	�!(��2 X���,��_��F0[�W���B�S
i2���%�0'̨��"� �p�›�W�w��')
|?���98�<{���''��`s8M�fr�D	+79��`3c,�$���	���l.���ӌ�R��/@�H%�^WDΗT��YƤ�%J��	�eE4�	���5���Y��!r�)Y��x˨���}"�Y�&����9
�*k?�t���7�%��9k�gE��V�YN�L(�lJU*u�����2����{���T�f��8�s��]JɓY!�D�¢`3��*�Hz�U��R3A��>=>��lшCT�x��({KOWZ�@�&J��Ї3�Y��9=ǖ����1��b��o���'��x�2�hmxnm�K���B�F�9[兆�+?~jK�h��
i"$�(��J����,�/]_���9�W�u�>U��%�vK�GxBƕKz(@;[-�VW��<ۖ�@�0��s�~^���m���'�0fE���N��3'󯔷��!oI�\_B�Ռ�F���� hH3$��K[">��.l�\p�V�y�7A�;ɢ��b�P:��2�L9ˋ�^��é9O0���DJ�i�J�~P߳*��.̷&�*���:��.ӛZ9-8��و�Ȍ~���⋇�)7�Fpz3jA��[��p
g0�!���\�z��{��@?m��@�W��f�q��q��f{�G&�˽Ad0�ٻ�듰ܾ�4��3ߖ�T]}U�|I�5��@_���Ɯ��6�(���a��{�g�"�5��?���ip���Vɂ]�%���2�b�BG�WNyX�(�ٜ��$�$1^ǁ���GG�'R&� $Q��{S&:�a̫���jñ-�2��A��fP��6H���{�����PFt ��O�Nt����bTdJ5emoYH�Hy�C-l�c�4�ڽ�ټ;�6Y��l��ֱ�t���(d��0N��YU�m��m���a�G��
�v�'M&Uz:}nөj�tuS6ܘ�g�pU�꿃�N��Juaa����6ţńs�S<C�o�2�������4$U{ߎ$�.;�|�O�D���n��]��l�:Iؒ��;5}����Z�b��-���\�McR������L�x��g��=�5��G�q�j,�NQW����0��B.��'{ �RY��Ud�;Z����{�N�w�;[QY�yғ ۷
J@�v%Y�!
�D4��1&j�
p����l�+��X�bKU�+�F ��%Ĝ�t�'��YR5	Xg�Q����H��fHQu����k��vr�
��:�tk���%�����=$�����I���H���f�QZ!��B݇
�;�R=w�v�֛"��B��".�_��n�(�Ȋ"������o��ۉ��*�f`���Uo;����{�y��u��ҡ��D��a��K2�{l�l��j��A�ݟ��F��GwȔxݎ�Sb����)|wa56�D%��&L��.�N�Ud���V%��?��$	q���*&��;��Ū[<���Z	��d��y(1�d�*�Ú�a������׮{�ݯ����~r^j�ԃSϼ�`M-z:��펳�� $B$��F�o��h��nۡ.���"������|���4�Uʾ�W�$��>G�>9Pw��N���+���ݹ�w%b�s��b�W����R����)�?B%��o]{��T��TŀQm0'�1d��ar������޻o
���5T������#�`ӧ��ޒ����F� ��a�[��XW6On!3X�O1���g�����;o��ռ[�����m��<'�+c��*�I���vn�4�F�mA�~B��#��jL�3�Ƨ^0,�}�)���m�v�ؓ"�,9ʍz�>._��dnl�O��;d��j6�C��w�i�3X]�A�c��d�4�*~�/p��Y�o�6�����Z�.,َ�4UX�
��������$��"�I�I���;R/RWI�İD����G�:���$���$c\NP��f���d/2?%���ar{rr=DD�%�[,8,��b��,�w|�=e\�ϜfYL�ו��Ȃg�&{�ʍ�8x �#�$���M �aN��sa��\�,q�1A4[qG�4$��$�b,�z�G-�4����G/L�]y�W>!�85[����q�����)S�9q.���U/e�R�i��ib��񴗃K�9rOϾ�+��1	K��n�����i��[��e��!e�K��ڂ����C�#Z����9j>���%��b�V+E�>C�F���N/��L}�?�%c�J�R2(-�z�r�D�04_�����f�|BT��l%��d��XB����"� =���.N��?P�H�A�"��¿�ů;ȹP;J	�BD�O���-�%d4�P�RC��!MwZ�Յ�?�� 1	�M�B�KBB��4��@�(;"��G�?fFڶ�y�"��F�ڊ��)meJ��y��g�#dK�1���
(��
($p�
���$4��I���~����]�*AKݮ��AS]-�3`]iP@o�xV�����JҪev!AGj�ov~k�Ύ�]��n�xof�dyi�bԛ�?�q9���< �����8"!	�"F�gyZ�d��I��>��E 6��-f�jݞ�M��s�z���D����:и�QI?�PF�d�d���4�j�=�FHt�dY1xH0��U���CF��1�a��
���bx�j���
�+�m�g��>�(�{L���b.{|]ħ���j_�!�a"����Ĩ��	⟓2�͢�l�.L#�T�q��)�
��hف�^���qij�7�*T`�A�<�'[�ɼ�o�!���^l�/����qHsP�|��h��W���޼���؏Y��m�V����MU��X�v8+s˱����=�Z%��=%zvD�sm:V��`;����(�q5��
��v��HGF�(ك\5�i�;��ж�x���~pCl�=�����f�]�J$�=:p��A��#Z�߲=
�f���i�1�j� E�����S�_ϑ��u�����q퇶��b�R��-6�}�U�w�$1W�d��*:��N�
�Ap�&���:��5*�#�W0��⩃�v�k��G��u�����Ӏ���
X�x��<��y�O��=A�p1F���T�CM����'ޢ-.���M��=I"��	{�7�;��i+��l�������F���P:zg#0�`��W0��=���-HD���^a�c�Mڼ�.s����A;��Y'vG�F����g���d��4eu�(L�s�
7��Ýr�>SN�V ƹd�1��9]�'��u�8��1?<L���(��m�/�10�̏��瞗6/�ų��ʎz�,�a>�o�u�
"���w�m嵯:����*&����.|�����;K��+�W7��������?6.��I�L�5'�r���&B���`��lf�R~c!^YTի͔BCz������q>��uYr�-�R^ҾBWo��cN�d�s�3o&,�R��-
7��L]ժ���ۻ����@������ZP֠��@�o�0s�Jd�v{���nO�������Zmo7��_������}*�8M⤨�$�I��Q��Dd�\,)ن��~3Cr�}��4�����p8���舝�ꮖ�a�8>��}Zv���R�����,T�S��(-ҬZ�k��GG�L͘YHʹZՙ`����s�u)r6�c���|}��]!X!3Q�6��e�dS��fjU�L�0.�ۋ�7�/߰�,Dzpp���{�^�O����%Y}���:��8�?�e�JQ��p�QL�BdV���V��vH�����r�V����Rg�0�ռ�ӽ���ꣃ�Ns1�������	����HU���1�u�Ú+��2U��\�sFsV4��I��]���+쳴��*��}n�Y�D\��<|*
:C/�M�e����_�\�/K�s�b�>�Z�?,�N^@�D�p���/e9q܅1~;a��Juc����PP�H�Ō-����ҍ,
Kp*쁲�Fp�4}a�*`��v�Y�O�?J�=u�iF�{�����G
��n�fC���a�%I�h��A������[2�J�e��O�n
LnU��\Á7,�|Y�PތL���1�v��`�dD+�/~k7�㧰~3x�G�Ơ�p���xC��/�sa^zI�p�gT���=�J��U�҈pb�$���mc�����Oi醉B��i�s��m�@�}D�-%9�U=Y�o�TQ�tZ^rM�/��ɠscdbM\�v��Z�:���S�5F��(٪ʹA�ޫ%w��yP^�tw��*%K{r� ��تJ=P��R�#�S}����Nł�%�S�ʼn�mK?�J�eU�[E�Ǯ�ުV��H���!.�i���P[��R��6�. �8�ȏn�F��q�w�`*�0����C��\T�k�x��(�@����0���u3rԹ�W�<�2x�����y:2<�>'ac-f��>��"�6�2S�DX����k �JO����uҗ���?��Je���Ʒ
x���wq���NY�����	�C��8"s�����!����[V�/r� +
	_��T�ek�E �����5@j�!����Q�Ab2 J�������_�4��H{�R����{�.y������w�<[X���|\4gop���cQZ ��� �{�Zx��8`�6��z��-
?6�=z�$�
���nҦ�盞�)��F�z��{��}��K�-������p$]q 2^�L�A
FX�v�=��j��?����qf�JFK��׶@���Z��r��F��(��>�
�ط�>,)8v>�R�, �_)��&��?�l����’�g".<�ߗj:��ѺI�
Th�9��C��^&Ћ�����PxX���WT7�����\�"г�G9Gh�#��u���>�>���X��M�2r�i@Z��C��&��= �0Fbe�Y6s�Ș0_�D�UI���,��[K�z�e�����ʯ$��-��
�.ad@*3�����w�@u�i	�@Fy
�&W���\�	}����x��`������+<���(rQ��k,Z�b����O57��^g����� !���ѳO�m
�E���F&v����P��;�y����Ir��@r����XR�"yS���Jquh5�Ҙ�҇�A!&vxr5�N}�`�=�������@�ފ�I&���N������[}����q��C�p���F�lZ:����S
6�1�i�[j�W�ġ/b�u�B�s)�����Q,�h��C���Ζ������;�+��9�Y�����-
��L1�;�#j�0��
��G��<�t��Sk�=�BeM�;�u�%��D��;��-8�A�%�ᵇT��,j�С�I#��VS�A��1B�ΙQ�����Q�����N��Ns7}g��4G�yԴ����G��Cv2�a���
qۓ��z���>/5ǜ�>(Xߥ�4��
�M��@�#���S�Qf�Z�~a	�s��ВK��Y�Ƕ��_�Y��l��n���N��>P�Hy�plјa���}�ң\��Q-��$�
�i`��gQT��9��x��
�@�]727�	ᲆMO��h�L�-�f`�j��.���;tV)�1;jt}�oU�G���w.
��~��
*������3Q��6cwH�"�i���kG>6�fw'�����{�,�Q;���s^��DD{03���lMF�i 3�
�h�v���5�q��u��P~�Y�up��;7�,��T�#Z��"�os�o�mg
�w�çs<�h�~T��C`;�v�}D�����ЍX�m�oj����8��yG���Z�� "E�ӥ ���^și��;3u{�k҇�M�D�Z���3x�O�Z�$>�oA�p�a �)���)��4���TN\��]m��{n�+D4U�
>�l�;�i���(2&[�1�́�+�2|u%[�4��}���XUӿ�ŌC��Y�����[�����������
�^p�ؚ`��@Q��R }�K�Vfd�q�]B}
���#�muu#��:\*@b���|E��&�
�K&��c$�d*mxmt/?r	�;�����"�Yۛi|:<a�{3�'|�@�z#)$��Q��c��Y�
MG��:</$���kg�����;)�'Z׋@���1���zR�$�	�6��ߝ���� ���9�6@�'�v�ָ�<�!�������d��p{07���BM.+U �t��:�֋Y���>���U�g��64��?a���Z����^<疠{.�������(M�o�j���i8��Qߴ�0�6�
�o�!r�t{f�٣�2`*˃��,�9R��5�8�U�cd\��V�M��`(.�4����3�N�4M��-����vc�t4�c�̓��խ��s��;���:��5P���C�+e	+����b�&ق��((�ڞ_��<[�jv��gu5ԑ�-�u96�BkOt��OԹ�w]�y����h23�"g�??�wZH0N��7�O�eJ��N�+ƔZ&��Q�C��(��nÒ��*e�D�on1F�2�v*^�J����;�r�cv��׳��Ǐ#�5�k��2sQ��=@xF��җ��Uǻ
_�w?��������T��i��c�����5��.��G�|y�xs���K�T7@�������+�/�W�i��A�ƯlG�'��ηk�	����wm�r�4�����.�.]�~���/1qX��K��&�����sQv�&�R�����WY��p��PR2}�Sq���KD�֟ӟ!��6��ߵ&������v	��UU+|0��mIo	|��['�g�A*8�v���7����h(a����Xo2����O_%
��JB��V���lC��m����<`�$3|��)!6:
�P��,���0�5�ٗ�3�I�&�Z�U
������X�[iK���	R����Vr�۞��}����V��ҵ}����vlum�Λ�ʳ8����]
+v|隶΍����a{"˯Ig�A�
�/I�D2|X{+��R"�d�XE'F��8D��2��1d���i+����i�7�~z��o�HK2�U�A
!E��"d?z�*�h��&Ub���;�2���y<?r{>@�6]
aU�%�>l[M8��o!�;`v.�.��b�V]��fF�i�h$��F_'�E�0�Z��rt�>1�������Rs("���Y�s۸�_�y���t�o�릉�L;��ub��i&��HH�$8hY���� A��|m:ՋMp����0W�V竵�?���p��0_kU�M	��V�$�(��hi���Y2����F�Z�]��jt*!U�|\�;�+��b��\��-$y*+�f��B**XHBZ��� �p]�������-,�B&��d�T��U5��È�o��u"��t�FkY�b�P�g��V�E��者��BlUc��ݷ�'_U
Ղ2��7yf� P�R�'�P�,d��XEτ��ߛ�ȭ�%�x�|�ჴ���MUY7����"�<pB[�R-Jxx��-��-;��0�F���jʅ�;��(Ъu~/C��`M™{�~#‰,�
E1�]���7��TR_��aY3�Ma���M�ܐr��0�)\ ���_J��Dj�>��^�v���'�A��M.��[X4+R|��7�C�-.JI��2%
�U
m%�I���J�wM�p"M�b��Б����)F��啱Rd�مZu`��ᅠ�%I��_�=�	�d�`��ތ	��г����5U�dMYn}x�A$���J�6g��]=҄7I�����q\+���XU��/�鳟^���/ג��?����U��Wi�jIJP��:�2Y��'ʳP�6u-�l�΋l’9UR�x4�l�2e�cq�
��Z͋W> �$��5+n�$5m�*�SD�=��wt�˩�UlK�'���`���P_�g#\������ķl[,a���s<~x`�����
)�3�x'�W��0ҭ��ώ��3�E�
s2ô�8�zO���u�6�c�tm���Q���
=;�I�Y��;8xx�^�2V�����;��Q4��(��TMQ������()�t�-�)��"]���[
��N�2D�Vr(�s��b&Gt��������=^D�؂�,eZ�Vh������t>�2�/��/K�q���ū0-C;�'nK�h��)��'�!��4}���yt��Le�*��w�v�i���aou�SƲ�Ԣ��wXml\#e�(��Y:x�'}M�t����J��MH4ځU�8��޵�C�Be�`4�E^e,�����H�۬9��,~�<��r�s�#N,��=8Х�8�
��Z�q7�`(�R��g0c(�m89�irJW��(�������.2PS�|�@v�Q40x����KG���T��8���VUo"c��AkvY�0��ٟ$�Gd�����A�Bi����䠶'��c�g_�&�.߹�RC�W��zä�2=&��{�S40���Y2�В>��}'�M��g����ʅM0FZ>;����S]����i oRF���
�V٩���u�[ �!|ںu>*5�}��� ��W�>�9T�렾��΀G$��3߭���d��7�+���n�EA���	?�]ky�cQ�#�5E��N�X�ʉ�4ͥ�=
�,����s��3ܞ�#v�H�-6����ν83/׀�.LWuix�c�f���w"���x�銝��n�&�C]�A=RV=�~�!jτ���0M/2Y4֪�+#�JI�&ni�,>gx4l=��Ć�p�!s�Vq�@p����L��u.m��N��a=�`���F�j��Is��1�)��!���$��V�BWW�Ӵ?�Ķ�ԟ_~����c�t�<��ؚ���ទZ����طn}O�m�ʽ)i��|R�@��ȱ��DE'd7�	�T��8t�q'�UY*�س�\@A�9�e�?F$T��{�Cb�yR<�ݾ͂���˕d?x�’]&��Z{�$+��s��+m�/S��T��j�kka~<o��zbX9�>�읷|�yJ����e�<9��\ƒ��L�p����힔��	���#���vY��B���	g�~8��D�ջ�w��ռ/Za�X�>Tl$�p_
�#�R��ꞮI��#�c�Vƹ,_.%j�"��))�4��������a���_T[0�VE��wA�nv�s�?��a���I�q���6��T������������.�r�]�!�W���Nzi!��;'�i�4Y�I��
Q��)��u�Ae`�ϑ8R)�R�k�D�k(�O��؟W��`���Y����/���y9�`��s�6��}�~�T���j3צ	]��cU��T �
f���n�hi�OH�\�7��s�ؗ�<*1|�p����n�ue���p/y�?�X�Q$���#���1Gʳ�>۽��˽���8]r�����G�)����#W�<link rel="import" href="../../html/polymer.html">

<link rel="import" href="../../html/assert.html">

<dom-module id="cr-view-manager">
  <template>
    <style>
      :host ::slotted([slot=view]) {
        bottom: 0;
        display: none;
        left: 0;
        position: absolute;
        right: 0;
        top: 0;
      }

      :host ::slotted(.active),
      :host ::slotted(.closing) {
        display: block;
      }
    </style>
    <slot name="view"></slot>
  </template>
  <script src="cr_view_manager.js"></script>
</dom-module>
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(function() {
/**
 * TODO(dpapad): shim for not having Animation.finished implemented. Can
 * replace with Animation.finished if Chrome implements it (see:
 * crbug.com/257235).
 * @param {!Animation} animation
 * @return {!Promise}
 */
function whenFinished(animation) {
  return new Promise(function(resolve, reject) {
    animation.addEventListener('finish', resolve);
  });
}

/** @type {!Map<string, function(!Element): !Promise>} */
const viewAnimations = new Map();
viewAnimations.set('no-animation', () => Promise.resolve());
viewAnimations.set('fade-in', element => {
  // The call to animate can have 2 methods of passing the keyframes, however as
  // of the current closure version, only one of them is supported. See
  // https://crbug.com/987842 for more info.
  const animation = element.animate(
      [{opacity: 0}, {opacity: 1}],
      /** @type {!KeyframeAnimationOptions } */ ({
        duration: 180,
        easing: 'ease-in-out',
        iterations: 1,
      }));

  return whenFinished(animation);
});
viewAnimations.set('fade-out', element => {
  // The call to animate can have 2 methods of passing the keyframes, however as
  // of the current closure version, only one of them is supported. See
  // https://crbug.com/987842 for more info.
  const animation = element.animate(
      [{opacity: 1}, {opacity: 0}],
      /** @type {!KeyframeAnimationOptions} */ ({
        duration: 180,
        easing: 'ease-in-out',
        iterations: 1,
      }));

  return whenFinished(animation);
});

Polymer({
  is: 'cr-view-manager',

  /**
   * @param {!Element} element
   * @param {string} animation
   * @return {!Promise}
   * @private
   */
  exit_: function(element, animation) {
    const animationFunction = viewAnimations.get(animation);
    assert(animationFunction);

    element.classList.remove('active');
    element.classList.add('closing');
    element.dispatchEvent(
        new CustomEvent('view-exit-start', {bubbles: true, composed: true}));
    return animationFunction(element).then(function() {
      element.classList.remove('closing');
      element.dispatchEvent(
          new CustomEvent('view-exit-finish', {bubbles: true, composed: true}));
    });
  },

  /**
   * @param {!Element} view
   * @param {string} animation
   * @return {!Promise}
   * @private
   */
  enter_: function(view, animation) {
    const animationFunction = viewAnimations.get(animation);
    assert(animationFunction);

    const effectiveView = view.matches('cr-lazy-render') ? view.get() : view;

    effectiveView.classList.add('active');
    effectiveView.dispatchEvent(
        new CustomEvent('view-enter-start', {bubbles: true, composed: true}));
    return animationFunction(effectiveView).then(() => {
      effectiveView.dispatchEvent(new CustomEvent(
          'view-enter-finish', {bubbles: true, composed: true}));
    });
  },

  /**
   * @param {string} newViewId
   * @param {string=} enterAnimation
   * @param {string=} exitAnimation
   * @return {!Promise}
   */
  switchView: function(newViewId, enterAnimation, exitAnimation) {
    const previousView = this.querySelector('.active');
    const newView = assert(this.querySelector('#' + newViewId));

    const promises = [];
    if (previousView) {
      promises.push(this.exit_(previousView, exitAnimation || 'fade-out'));
      promises.push(this.enter_(newView, enterAnimation || 'fade-in'));
    } else {
      promises.push(this.enter_(newView, 'no-animation'));
    }

    return Promise.all(promises);
  },
});
})();
����N� ��}
$^)/�6�h���e�!�t��Xc�ށv��Qcá3|��3C�pzc\�q�}H�
^Z^גΐF'g�B��UU�f@kaR1-���"�Uc���h��E����A���'�]�Y��ӵC�G1z{v��fN�&b7!��&�8;� ��NƝ-�:�(�kd��h���Evg+{����n�9`���ċ(Q����}�f!���8��ҷ�
�j�t�D,�(��n��o����hΉ�`~|��5��^E^��U���I��SK��0��+��l�
��T��&�"����=UUe�\��(��mH�msX.��|�y�e���@�X3|x��#<�ۚl���ז\
k�!&9 tH=�i�e��!�
�V��H"H["�ϣ��P `s��r<h�$�Z0Ha���T�Δ���#��w�;���4I��>�s��>���A�ؠa�&�-���Z�U���C�),�d�ܜ�rXHZ��a5C--n[`-z����1gwN�̗?bjK�Eb��C ��Қ5)q/
�9����iI��N.^��[��լڟgF�5\����M�1���#��_�ͅ΃o/�8������5��-z�!\

��W���Kȹ�+�q�L8�T�
%<)���҉0<��S���S��=a�����S�r&�5��!�̆�#sq�y�0����94�y�������HVּ����f��o�WH_��i���׹��%��	� ��B�m@mE̞��h����$��0㪜�F�����E� �e�jG�W�0�PP�M���'�#>]��r~���[.�'�;)8�߃� �%[l��Wmo9�ί�V'Y�J���wM`O�԰h{�-�����^r(���l K��"%{^��<cw����d�Hû7o�Y�Џ�HX��u�#!��qVH�D�r����v�B�S�D*�@��u)�(9�0߀7��қ!frRӑ�!�9��XZ����8�#|���ԅ��i4�
��櫱�fx7�k&$iJX	2�!�\K�h,�,�Aotg�k%,�|�W�v��X�W&��P�X��(Ԛ���ͱ��a��x/�7��u�5p?!PA��	P�t�Tg�	�Ām�n�TK�E�?)I����a����J0(2�%hC����MA�x*����@�����L*�f���`>�^ڦY�n��^n�S'��i��O�Nglc���` �	ux�kʨz�ƀ-(k5��O	�A+�^�}JÄ��s�u�G�,�1�N��8��
t�T�[[N�B�b�eȔ?��Sq_�
�k_6��2K^uW��r���֘#Th��Ù)��@u�3u��أf�ڃf�k��L�I��kFM<�F�Y���y#���h�{_F��I�]O��ד�w��vc%Y���]���no��жܝ��5Z;`Fi�z�fƨͽ]�9�8�����d؟e��J�Ip[���s��,)�t�J�,itJc)V(5CE��:^b��Hӓƪ�Yd���/1�NlW�5�{hт�t�)��?z��\�k�����1X����:��ڏSZ<j�1�3�m�QEoF
Q&�����V�����'#*L���S��X�5�:c�o�7Q��k���a$�xlSk;��3"l6+��ٙ�R{wJ0�͑
~�C;D�xv
S�5�B{|dmm>��ƨH3T�|f�Q�W�����A�"X�V��Z8ە ��a`x�4��cO;)<�eaz˗~r�H��\P�N%��y�f2�)����	�4��tw
7Y�4��8��,Rn��e����sǶ�^���^"���M�0)�%Lq�?�(��x��FQ����YR�lG�l��f {;���7e�#+�ḣc8�t�Z�c)�=�LPC���؟7�҇��^~����M/���B��z����oLc�nO~�(;��H�	�t�[�Lt{�1^�wF.Y4�!OΒ��9r���Ir� g��[+}�d�T��Hg���m��y�g�<&��ޥ&�u� MH4[������&_ߝ�t0˄+�б���R�qj�U���J�n�8�}d�.�%�\w��c�z�w�:/�B�c�K:���
�^
��J���#q�����mf�iC���=�~��j�f��c��2���%r����Z>?�����>�<3Ǐ���M����3�e_W/1�j}U�ϻT!��}������)N.�,(Q(.J�UJ.�/���L��/(JM�OJ�H,��/��*V��ч����
9�3��TMk�@��WL.�1ɪ-�H��`h���U���i�쮔���o�e�$���bv��̛yc�!"���*�}��O!*��d]�v�6V�,�Y�d�D�x������ڤ�Tg>�tCFQ��	f�7g�mJB)SR���!M��r]�R�=��<��1rY��p:
0ŕ?z�F�fT$�Ԇ;
֚a7̭��eɬ���je�6�[��a�+��Td�~~�}�!2�-�=w�o/��A�d��3���)��T�"D�+�Zy��|A��֫����"ӊ�"]�d��d��!��<DŽ�J�!�Ϥ�d�8mN�
̯��4�dO��ђ��'��&e���(�K�W�z��ǰ�U:��C�9fZ��(ϴ;
�ё)�]�֋��
/F���a�5�j(�E��f�݌<�!W��e7�O����������>���QI�إ�����+�����k�:V;9��S�8>�<0^���򻻼D�G$�(��$�D������C�\���߄��\Juŀ��~�����.��|��Y&{����D���.ڻ�Xߖ�����g�a��
�|�\t�"�_O����-�>]�r�]6�n��&���6^܌��]�ӷ�`��Vmo�F�ί�H��E�����(R8*RH���B�=�[���&����~c��ɡ|�wg�y�m;�x+�s��_~��B?�b͓5���!�B
$*��Z��
A�@\���<�#��ؠ�Ї���m��!B�=�HML��"X���I����~�wG3V<D�V�Z5h���4V7_`"��%`�k�4���s�i=C,���pX�[�Xd,:���ah(�FUA,q�#���թ�P�o5�ȺP�d;��m�v+d��F"K؆o]��/'����/�NEc)b���삱N�ɧ���-1��LKr)�Hy0�|	�@	z��O�t0�ܦS�ߤ���x3��})d������9d�^B
xp/;۰0�ã(�q���:N4�D�3�ܝ��t�0�:E�п�^�yq0�L{i������Ēo�Ʒ�j/��)�2�ҹ
)�c�#�Ԏc�E�B��@,�A�JS)�q�؇����K�#�9�t�Ea/J�!�ț(�VI�E���3��{��"�,�Z]�i{t�6�dD:&�q��ZW��z_)T2CAF@�I	�l}�o%ق;��Yr�a�J&�#Q'2:��|�[K��G��vk��3?F�kg!�R~S�N�x��X�Z�v�sa
�����$8S�?~xpGw�,�>�x�ZWY5��;�O�6����U��pK�G4�u��iEǣn����J����M�Ç����q�N���>�9�2zX*���b2����l,K�����{1+Z�`o����.�N���`1ug��?O}��,�?݇Y4���ĝ>
gg�����f�_���'�me����*]��@����f��]E3������qkWl�C��,NǬ�7���5���)
kF�ޝ�P*��χ'}%���$��L��?��+��T�H���^�Fv�);bk�ݎ��,|lV�u`�������;�%�-C�o,�
Vlo?}j�7r���y�֛�;�…=��?��KO�����n� ��>%��/�&=6���fc�qZl��}t�6iS�A��7��
Ñi8�������eY��h*g�<�/Ӆ�EQ��Pk��g�
�.�U�|G�Q�N���w=����8Zk"������h��C�8��tb�D,cu��!]�{g8)sՐ��P"?���J��ڂH-��}l�����9a���³(}wQ�[L�ƾ��RF����L�c��I�R�'����E^R ��[2�I)�Z��3T?�ȮTG[�<�ȂWǕ%7����!��Q�Z�o�-��+%Yi��W�n�0��SXL���I(PUYZ�a�*'�%N��M}�9�8@��R!5΍��9>�}Β
���,N��cIx}�f��E:�N*�>9�����FR��9�%2���:���$��Ȗ	���diʡy]��{2S�@_�D��P�CfT�84�5	I��z��5�)'�*���3B^$�F��B7�qA��"q(��2�'�����߻��G��Lk�|�Cժ�C�e�'���u��iz�fw��d����=^v&g9h�1
CS.���êh��2
3��`�y0P��{\����%��Qyh�Lw�ȴ�x(��*�L$^�I��ֲ���>�~�@A�Ԑ�*K��4�,D��L-���D4q�����(y��n(;�i��A]v� Qk�����(��m�!o���8������� E:t�Q�$��Y����AU|�H3t��Z7)��~E��w�zD��t�j�&��$���7
UӁ)p�-JԲ�#~�[*����}]�I���+����B�1l!Ѫ��M�Lϭ�	7k)����׋�3��BYfB>�[G�C�;�-�W�na�:�>	���i�z��@K������=�����d�ke�����CnTU�����ײSw�:�g���X�����ݶ�9�Q�f�A�t�c�
������Vr�Nߠ}����x~2����v����=oʩ*���:��M����,�]��Qj�<L�#�f�	Z[S��0un��Xh���K�Tp[!�t���6��yb��͉�
��l��w+�C2-EȲ����߱�Z�JIR\ό���͌�M9�l��ؗ7_�&#���K�KY��*�6s�t���������Xmo7��_1]�g���Mb��Ѥ5�.@Q�.%�^�[.׊���3|Y�ږ�+Z$�-�3�p^���NM��j�p��/�����Ӆ5K�.�U��69��*�����V������H23r�PcZ[H*L)	��VZ-K��I��g��[W�*UH
1��
�i*Y�̴�$��.������i�*�������>�䏬�V�e�=tf>�d��/k��v�e�Y���s����lF�J�b�Ӆce3��@*+BϡC޲���z�V�Iᶍw�gp�% �V��-��/X��NZQ8etN�e�J���mpC����d%��r�W�=-��X]i�|�B��xեY�ƿ�p�����Y	[6~
�q��J�x��h��T르�O{o��w����\�[�X���l~)jiTu]��q���;NI�f�����e�H�ֵ<���TR胸x+��3Q52�Y9��ʼrΪi�p�ٶ�7S�n�!#��U�Y:��S�u_���$*����1u�U#���}�d�ޭ�W@�0���tɄU�0Ig��D�[#������u����T�R~<��[˕j���vF�U˘H��7	���}���)��/�������wr}��f�"��e�|����u��Ou��A)��k��7߶���
�d�ޡܮ�I�U�$��>}�.��2�꣬�k}�9C\���0�����p��]�����򒓉>io�ί1�w?���͏�������1�{�	[�`�OЌ�˝Lb���\#�7�s@EQ�����D���n ��Jr+�w<���fi7A�:
����z��X).��^2�9��G��b�F�D;��RMb���H�R��e3ʎ�Fq�ɏn�3&�U��i˂c��_�1�8	��5<H���;��+z�.䧏f�W'�0C��",��Ek�V�87RC�N>�ֶ
����uP��e��̙�	4��8ݺMn�s
�}��p�z[ �O�����p�\L�K��p�A����2q����.������AEsn��*$$<���=�/�z#�i��p�#2_�g��}�V���!
�s�\�|>����?O'���Z�#��4r�ԣ!.�d��ou�<~��.��$ROƓ�T
ϣva��C��}��]��҅v2�<׽��S��ѣ'���]����3P��d����\�oc�e=�O�z@.}w���C�HVX��OϢo�䐂;����@;gh��4�p����
Mc&^(^
��0��N���i�E�j����d�=� ����H�X�bC��e��`�M��cBU��u��`��C<�F�9��I��.בyM�s/��ۻ���t*j����]���شO����`B_
�s�,�l��ʆϦA��v$@jd�MRfx
"��i������]��L��ˤ����YfڦZ#�߆�⎌i3�A�3�%�b.BU��=����f��h3��l�|S�G�n��Mғ�g��~�Qr�̻C��̾�A�#��o�aH~I�^� Q�g��#�-�P�&�wS���K2,{�����H�4���c���-w�S_s/����캘kF[����� �,M��H���1��sɣ������o��(-?>��1��������p��7w��]v�'+8�l%w�NJ9�/�I�	e��A5w��9����]�7��!�5�
ܙ��]�����*�Nę���Sw���p�� (��G^�G~���7������|`3�*H抣�)}�
��s�K��j�,*(*�4��L��������U'	��Q0F�{����ڀ��S=��0��+�C{��뚳n�С�!0d�>��-CbҸ��J���!
�H?>?>R���phr���:b�8�s�ߋ�4��[3��1`��.�S�+�	y��P�|Q��T��-�p���U�']��x�َǿ/����e�����t��3�myk�� h8gȨ!@2¶7�0!�4�t84��N��>`���O��Z�I�t������P�@
B�y����=<�D��K���՟8�|9@�GΗ>=�M5{������VԬ�Ƥ׿p���o����<+ӲEF�<��+I�1 YF��9{d ����͇���F�sH}��Ӊ͂F�B_9]�*����Ě���H�C�1[V,��:5��u�}�edM�i�kM����/��� /�S>L���=m�L�
�t:%�6��-�5�b�=�wU\�"���|���"���q����2�]QAj�0��[(8	��RH.M�
��>@�7�@�
ij��^�Nh�E��ٙY)ϡ �:u���^`_#��F�V�kr>���0�<8��NXeI�÷G�p�<x
N"H��H't+([�{�{n5�VM�Z0Ha����@�T�L�6��k���Ҙ%ɖt۠����H��3�fe�J�I��XG+��^��[9%6�D��;e��v�
-���/�{��&��`K^�"3,=*��
6>��e6��3��=���z�h-����I���ɦ#�ųJ�^rp�wk�
�Ƙ#���E���,���#'�K�e����>S�RR0���M��	����V�n�6}�WL�����l��(NТ؇EQ�����K�)Q )'�b��#RR�X��Ƀ���Μ��Z�j�u �Zi@�qw,�1���q��D�l����	��mc���z���L�4f�i�rc^��G'�\�B��8�hT�9�>��p���ը#c��$\I��7��Z������L�%r�t�k�=���2*U�H��zQ�y��ף�k�e-��@G�H
e,|�N�`B��	��c}5#�U�����LrtL@T�#F;����E��eg�M	��0�N��D����(ʕ�)�\�1"��"�i�
g"�Y�����+w"��1��C�� ����s>hn��Z5U��+T��ʢ�����Ff�T�8��t����$A�{Z9��d�"�2��[���#j�L�%�r��c$��.��T��&8�|q�ηSK���^N�������Ƽ(P�M�6Z��TK�s��$��!��v� �����5�2��;�Y�׺R���Ye��7���l�
�DI�݆�����&�u>��2�ѯ%f����N@�uJdx�4� cz��ꙮ{}߽��o��N�>��|���������ZU���a3��c�'��
�	��49!�_�WrآTw��w������HHs��.���}La�Vb8fT���R�:�)L����5�����O7�3��G�GS�o��:ĭ�x����W�'J�FG��_�WJc�m�NP	�Db<�H7�f�v�?�މno�~��i���O�h)�Έ�;V�wpɌ��6��ǮD���tњZe#C��j���m�IF�{|�AE>F(ӈ�	f��q�C{�����hy∸å��@U��h�au:�*��}��ϔ�}�L�ֆkQ[0�?�
���7�
w���⇯����>-��
��UKo�6��WLN~���zp��z�6h�)�ɩ(�4��R�@RG��Ç,�q��`[���|C�f�TU��fk�~��˭V%�KX�v��Ia!x'
��i2���AP�-7`T�3�L��Q;�sX7�������F ���0�e2&a�.S�j��t�pw�������L�d6'0�O��e�q|�A���V�l�v�2=5(0�J\}�L�%JJ��T�5�e�q�gJ������F�U�Bb�Ƴ�m*̱����b�j.7g:���7���8[�Zs�����N��tH.:���'�BHyKĮ��O%��p����w[7Iȉ�jˑ�]���>c���u�?k�ӷ��GOڤ]���Z�旫ܯmt��ߐ�P����M�ю��ΊZf�+9���ik-᯿��QH�zR�Hd��$��zI�qj��|�Y���uS=����,/�9X]��+|�4�$���w7A���B��/�F*��*��lnv�ş��Λ̄�qu�N�y,��f)�1ߏ��Mg�&E����a�W�b�h�P�a���ӎ��ޠ��9,��l��U�+s��S3���x��|�1����a�Q&=2���8m��r�_1�J؇un�B���Ƙ�`]8��K�AJm��P���4f2F�skV�ok�ɉ:�v�R�О46��kg:u������;d��&Z�7@($�Ȫcx4�{&k&�$��v۔id�0���azY��:�����%�j,�0<�(\a1�I���t�e0Ĕ���1������S/��/N�N���	yͲ��H��%��U{P�*+%�z�:�p��y�KzI�Ki�-�s8���6��'uQ:-����b1���An� E�>ňU��H]�v�b!�m��a�֪z�Bc�YFB���O ��p>b3ٱu��٣�Wo�.B\��}��)Y�y���ã���a��7t�F�V�fM2Y��ɉܐ�������e��=@3���)����vm�-ٛ�#���mQ�tl��Dž�4���ќn�N��'j��
��y'~�Vԓ�6a�K>*K���}�ɐ��LI�o��{�~Oݗ�G�"7YM�Ta�A���V�o�6~�_q}h-%���aq�-M2 h�I�>EAKg�Mj$eW����(J2�(�0�%���~��1\���|QXx}r�|(.���Z�Ee�M
B@#d@�A��<��c�h�l�
U�!S9�.�
��f50x�p52��g(I��B�$��!�U%s��no.��=\ÜL�h|t���^����Z��[1��Ƞ��*=Zh�	�gY���pԤ�J�-��Zm��i�xZL�6�L1��d+�`�+	kn�Lk�v"&%�q�W�^���E@��~Lp�$I��-G�p����J���c���J�oغ�3x��@&��⊉�V�L�k[��m�n,J�=���ZI%��=�䛀�y�4[·o�P4\��ݶ������T2s!�1i��[���MѤ�T��6,Te� ��$�F�P��bL�s�� cTB��gnpv����W���ܫ����1<�%1-5:/�p�*a�`O����ںŹ}�ý뙀�M�ަ�%�E
VQ��H�P�٬�V��6��=v��laƲ�$���Ƶ�
�z3��niC�؅��)*�������ߐsd�r��r,�߱�JԿJ�\.\��pXp�9�ؔW
�4+��b�#̀D�L��J~G���ŵ�%1�u�Kr_�XM6�;;pWQ�R��F^���^���}�:���~�w���O�H�=����
�M�X�;��ih6xf�sN�78�3�N�F��z
��jYV���T\J��}(Y��cC�4x#m�@��ޏ��/7����^w����9l���������B�1[�s����	N���4���t�H��-C.|�R�r���t��oY4�G��$
�����9~
"JIc5�����q�i�с�
'�˼ъ�*蹞���Js��B.��餸W�z8e�¶Q\�8�`T$-cW����&�d%��r�'K��eG�ͼءs���>�f3��}'$p�I�����q=&�>���%&������޴���9�����r�nE%�no<Pp��ئ��q�������b�fH����%�텅梦�}qYں!�Tt��
eޝ �(��tk�rn���ώ�b����i?7v������ޥ�%��M�'an���� �-�^����A�{���i�riC�;���������>�%�6r��y�Q9l��U�n�6}�WL�qp�^	"�(�T�o�a\r�bL�I��-���E�xc��H�̙��R�G0(w�hZm\��j��V��j�ȼ��ԠY�Mv{q�}���R0��}�V�m��T۹q���þhkj��֝$���'j�LXmt�E���3�`�tU�sa�"!�i�:�)-R��(y�ǚ>	=�	�
i4�$��$
<`�i%u6~U���8&�xU��(jm�������T@%�x3��,��+@i������џ��3:*�Aê�ʡ�8k���]}lg�ZʹP�~��}B���D�����o�]��zY��Yh�xMb�=e��;�	�R���ʶ^/�n�Zhý"{�+��~�#X-_H�g�+��9�G�x߿�e(�-`}��hC���S��5B�A��B��ט��?�7@��ƽdؼ���;м>�3�X=��%m�h~(�(�^j�8���rĊ��ϛ����ϛ�_o�p��ʇ��i��n�+��?����8⿴����3H�i�M�c������:6��
E�H�f}����$_R���	���:���7��?�pq���[�4��:)�l�g�Z����עP�Q�y����j+�о���wW�f%oR��o�*�C�/�0�w��wA��zI���s���>�<�~Ž>��i�eQ�0r��3��N�Ao<�yn�=�~�i���CӤU6��sP#(�t��]vW�S����*\�Ҭ�;n�w�ZK?�<�E)Y��q�UT��=�.K#=W��0I�w1�*�r
Ŀ	~���A��f��o��Uj]�U�8F��!��h�GpRι�pS�W�h����K>$&����Q�ZfD����^}�!�	�|z�o/��t��	�m�Ok�@���P�bb����Ī�R
v{	����� �,�GE��Ԇ_$훙�{;*KT�'#O�û7o������ ��;�:6��]�#5Y�dFj��,����뤅eojB�
!O<�Q��8A`����n�	��I�1�	�Z()�Z���TA'|��v�;���"��:�������QX�fcI��۴��f}�t0Jρ�N��14��@&�4�PK1"�[���>�Dږ:1J6E(�Y�}͟2�����Y�����p���ڴaM�I
}���7i����'��q�j+zK�v��s†E�֐�F��Ue�n7o�o��ͩR-����~��wO���"y�����>��>��C9
G�-���U���u�3�,���r�j�P@Pr �.�?=o�y�v�/��Y��@U����)N.�,(Q(.J�UJ.�/NM,JΈO�L�I�OJ�H,��/��*V��ч(��=�M4��WKs7��W��N$�z�Iڃ]�Mw�6�ENr��C�b��r�-ɕ���|�j�r��T[$� ���S�Ve��2�������s�
^𢲹�f/�/d@�A��tқN�AP؜0��	B�RZ.�
��50x956��'(I���B�$,�!e��)pI�o�\�>�����z�����k%j�*�X��!
�((-�K 4.��L�A���PP��#:�
Z'lƦZ�l�� v�����e���i�\*Q�_b�V\iڛ�o�
~.�����Kc�Z�=�/�p#
3x��Z�%,Gs���-P4[�xs���Q�[1Q�f�6֣���2��sf������"�T��e�1��[���$bu�;&2&�VS�?
��+f��m��YF�|��]prOEV�uT	�z��շ��AJ��Fə&M���N^߾{�F���	�\��n'�`8�u�hrerU�4��Oe���9�D��/ڂ�a}đ��κ�U�
n�h�ć�x/d�#:�M�='���������mS̙f��_/�}��1[�*�T7+��9�����o1��$gr�i��&�wV<�|	r�0��0x�F]�M`��2��I�m>Bay�]edx��	d�S�A�g08�ֆ-y���	�
5F�RR�p�s��d� ��O�X����-.~ـI�Ը�.���$�:��3�
<y�݂�xN邞��Qfݲ��X�]�6aR���E�T'r�(�8�-�����G��$Ǵ|�;����p5���w���Ew9��q�g��4Z�M�O,j`�E}�H��0Α
�t�2ߟ���K�;��V�cbO[�g��=kŞ>&���K�k=iT\�j� �#�3"�*9�,�w|��o�
H�Ҹ�I���ά�O9�-\vDm��;C�Q�
��'P�`����'�� 3��Cw8��u��_3�\��S�̮�Kv�#�1ᄒ-��(zו��G�G𐨢T�8+!E�8
����ˮ�Cގ�c�6�n:}����ZD{�ׁ�w�_F�#������aݷc�JJ��'�C-j��C;쌓��m�^
�'�ɈC��X�1&4	W�gj�	�j����u���ZG��%�$r��*a��4�ut�L�:�B�<�I�Ћ�g���nG����$z�8MN\���v����.(ݻ�h����\������b�� n�5m�%���ԧ��pt�����q�wF����6�N�������|�;���L�F����2��Eo5/����qc�q����"J$�o��{N�А�����j��{N�Ԛd�i!��N����v���1����ˊU���2l^�M�I�$��ӸPʦ���
���w����n6��d����u���n��x����Q#��w.�^�}��/{��J�r��V[��6~�W�RU�8@g/m`G��J�>�i[U�h�Lr �8vd���ljC�l�a��;�ϙI���|�e���Cap���$�•rTi�+�$�п�f�l�
��
7v�Y�7��_�<G5�n'�_df.2�N��f�1w�,��ڕ��6�;wh���X)�~L���:�ra0srB�,:'���C�	0F�r]�R�k� r��5z�H(f�JRP�c-!�u�ڤI�1:ש�u�:�Nm�N@lf��|!�-��ѰLKmR�b_1��zE����J������s/�x_b.8\U���6^�{�%��s�8��Ƙڨ�'��.���=Ϝ�ʻ|��ekc��JE�m%6�oڈg���N�a�Q�H
�h���X}S��;���mWO�Hd]+[��a����_
c���[����*�W���r�s�z�R�Z��%|�+R�T[�z�f)�ۥ��NA�1%†��"u�z:�d�b���`X�6��#���9]v��|{�c���M|��^��_�RgkEϫ����7b�Ȁ�Z�N%��ȧ�t�u���.A�y�������P���G���V��I��\��(/�b�U���w��C��u�����/g��k�V�/ݡ��s�t2��gJ�K�cxM3��>솾�j����м�W��r���8�r���%DTr�T�1�.�i�"?��p�W�7��6��R+��ɝ�D2�����'>{��!6���hR��P9niL:hv���,�����]�͙�w�n���:�_��AVJ���B�G�mJ��(��~��u	>9������I��J
n���yD�QJ����z˂ڠ�cW��U��V�	G��p��'�x�tƆ�#��Y�L��d�6y��7?L}�_5
L^�*-
uhBKݯ��)��T�����@�3�Z�/�<WmA=0�B��3���J�wd������#j�}T��k��H�2RL/�O17׏���:�2Gǧ���Tz��;��EQ�n�0���,mI:P����,��:TB|`���"T��
�r�{z��/���S5����K�i3��4�b����`ɧ'Ϣ($	��Zvr��XB�������BSj�.�+��6J�;��f��h��Z#�8�t���}�"IfQ��&�U��1j�>�E�����ٺ��@ϓ�
dC,\Y5�4yB`���N��=A�g 6�]Rs0b����hO�p�ð4��X���f��l�����)�0���z�ߣ�hr�>��
eB�0�cG�(��^�}��?[��R���f��v?����Y[s�H~����)����q�����r�"�[� $Y�Ѕ��Aښ���9-l�Mv<��?�Z}9���׭�H&+-�od�N�⍶���oNNN�E��Ө���^�vtt��FC�q�&�t��FN���v�f�p
?�N��~.�D��S�Dk4~;:�Ҹ��&�5�}|�f
�C���~��0�^�eT�5�5�,K���㮴�
�b2v�L�d�[�)�3~?��w�8��pr�����+�5//���n�V�t�nt�Lm�핝�(;n�>����_+/v�u��W7��U�=+p.o���R߿��(_�����K;�a�z���b�]�������nl���i��h�zsN;�_Z�M>����5,3����X�
��n�cD &�%‹�`r�ޒ������C��G���ҵ�n�׆���^�n�2���%���e��Z*���:��G?�^�8�<���ǾD�;�t����@�qm����[��r�t���6	��ᯰ{�g'z�N|;�4��y��)���=���L�\��X�������mc�*��	9Avj����Z��K��ӯ�'��Q�/����mϓ����7�쵙rp��'@�*H���
ݖ�dJ�u�fRU=N*���˽�X�n�ۿ��E�2���/�F�9�ky�������`��+"�Y���b�.�^ކ�e'3��{����&�����i����TLn�쫗���n�����<��C�v��y��r�^\n��hބ���?�{�����]�͵����@y�/7@��K�`
N�f�����ZPg�m(���>�P�Le�m�\��K��3q�ט ���y{g���ж컾�=�����¾>#�$�Q�r�|q�uRg�GO�Rz�m��Q ڳ�19��<W�)�c�/��L�Ds߾��6�x�8g￘'�e�ϊW���oAY
�Fg0�

{x���gtXM(���\�y*���S��z(W�����_=p��|�����&)Q�^ Ztl�����O�ڗ��/���iH\�QO���\V�N��2U��R���ɀ�v��&�����m����WI�T��y�5�]By�f�{:����P�-�$�e�ɜ��e�S�Q�F)8e��*:/:�wg_ni��&cE��A��קg:˛���ma얁ri�=Fm�Hr[���;`١q�ۈ=���S���\���P�f��(�ִ[[�]����vD�����Qי\c=\��;��U�60R�~L�tn]m�[��2�G�m*2?"��2q\__��T��Ӂ�/
����z�"Y9�zè��cMڙ�u��W�]
���n_}'����<��Jd��A�Ǝ¸��E�T�c�է�YR��h��v\����g%�N(܎h�-"G���荍j��b�a�!q30j�$+�)K��ي)��,u���J��ZN���`�"��\�q�n�f�7�7B��2E��=�[ངVI���mJ+����=STü�#�M�8�)�yEE��r���-EZ�m��X��:j��핣�~0O�N�-�z��`���z�O��w�RP�qB��}��j�P_�y�]���7R���;������?d/�ސ�"4�P���>��o���m���D21y-c�M9��X?���:��\���;u�7k�+���t#�Q����A�D�[�!��@����1�{�m�c^�]�Uۘ���~/�I{��\�H�k�qȨS��'gM��|*�되p�:�sb�d��)27�jE��0c����~�Ԍ�@��2<dB�u�{5w<���m��^�mN�S�������D�r���e]�E�&f-e�c��l^p٢�a�O�w���벮���Fz�������3l)C�S�C�%"�Q�oQ����!z
�+��Vy����%�C��0�]U�_؋��#�qNU>�������؇��œ~��57�ƴbV�#���|�J{�]Y��8�c�)�е�ك�Չ1�y���O%e�t�v7���vOq�Q��"?
�˄��%XiG��E�ȶ��]��ꆙ���,�	sA�{R��9�K9���o�9���@�>�X/�ԶP~�c9�-|��1n���W�N02��uj����������Mpn��K�۴��d�.(oT�:R�xF�b��b˱6���Z�^��_����b
oRn^���z<�^��ןF�zO���Y��Rmw�zӋMQе��2����_�d��|����~���wF��\2M�4�O
?�N��_�Nq�%i]�N�\V�1?�LO_-�,�$^�M�4�w�4����/�����u�`�}���2���Lӟꗾ����f0�_ϾɁg�G�˻I������K�<*�l��v�v��x2���?����"s��>��3-w����<��i�?iV��D_ΰC��0�X��Lsv2��:+G�%|!;>�~:���@5)�D�`Ve-
�D2�~�=�yk^8Yq�8���IG{��Z�,Wjk��ҏ�l��V�S~c�M�gJ����y~��5����;�����ߎ�
����u�A��0���HH��	 �t�JhOܐ�q������D��n���ӥ�=p�<�7��<wޅ_�䷵'�������M��<�vb���Ի��W���d�:��!�k�+�*�Ǒ���1E�(fG	{��I������;�y��	:�Bv��D���F{$<��vh���
�$Z��\N�S��yBbd���� 
z)XW #@M$G�~��z��##�"
�1��XN�i-N.[�3�>�pMa�X��#�Ɣ!�J�]���f����CTeGU�*�œ�t����L%�p͜�x�S�9n �Q��u\T�Ǭ���ۋX~P��;ؼ��ϟ^ߢ���v���#���sa�]{�lp�^`|���|�:#歬o����s_�`�,�����CzQ?'�*���S��s^���ݵWG��j��(�����VM��6��`'KK����
z鱧�`A��a�$HʶZ�w(�+Z��dq8�y3o����ڃ�y%��_Ae�y��&�o���k�n������n�Uܢx9p�^
�������$��tkt׳���K�n�2绚,��u���
k�hk)�W�`k,<vSs��n��۷���e	�1Z���#;J�Rs�zk?{��d}2�5c��e����1�E`*����y�W]��Q��u�c˜�o��u��K�22m�a��M/��R:V��^'2Å�����%xO~�o=���^zƍAn�*0�U�A΋}iu�D���3M�
/�җ��ʢ��Pn�"�O��bME���<���
�GKQc(A?��-�i�7�NN���OD�x���"�*�\��e�7b!��'Q�.l6Z���U+�od�e U�V������F���BYV~����0��[<�@/=a��^7|��&��Zb<�8���QA�\	��
�IL��\1Ъ'�OY�nh1�6��|]:�yn}�s�M��6#�
�����9M�$~\'���6$0hݙ��,��v���lV�D���ο�c�]庩*,��U=�e񔉢�j�u�=1zB�!_7U��2cIrl7?V7c�K�{��?V�!ޏq/���=�>��X���B�W���ڄHРj��x��v����ٛ�n}.�=�5����+ߨS6�-��y��{t��Y���
~��.�xP����@mt�2s`ֳ0��ONf����$'cHS�NQQ_��t[�S��9Wm�J�P����F���e���F�/�>�Y�Y�] �
�\S]����0GM4�ɾ_��)NgB��]2�/���������
��T�n�0}�W�f�'[3`^Z����B�[�,��ˆ�����&�=�xH��I��30����j�4��q�0�L�2U>���*��~1|*��f�Ok�����X�TE���Jj6�*]Qz���i�Q2	����,��`r*\6˥��u
(�C�!O��2R��5�ڡ��Q����K]M�%G!��䛄-�S�`q���{ܜC�f;�h��.1�!!����<LM��9oP茺$�B��u�4�Xo[�צ *��`ܩ/=��ު���N�i�A���|�jm�E��.�p�ԁ�5�o���Nl1�y��+�1|gZ!���6�)�)�R��H0%1��J���8{ӊ<�+����nHx����],qf�Wrx\I�hoF��;P0���x��9�yO\�!�����\����[,:/Nv�.�V�n����Е�:F�,m�f/���!�t�\����Nk<�5�a��|�:�p�R��J��.�I�.�O=a^��Fvy8Y��,��%z�F�jo���Z�o�߿��b�q.r�9�;����ޡ�-QI4(:����CJ�D�r�.�N�{~3��KM�'�I��G�Q�I����M}{d��!|+?|��Ç/k򊳆���rұ�I���>��o��H�׉s
'9�ل�_<�̚��(�:�9�{�C%��W,|��#��E�$�?~�"��×��	��\��h�L@BR�|��恱CM�}}"^�{���Gaޠ0��-���F%Y�]�:��#�x�^�8n6�[��ť7(�)w�່dnipoM�Rʳ/89{�o������G0)�E��)υ��0��l&�"��
�E�[`�.0�$и43�%-�� 0�4ۻ���K3-0�dIA\���Gniٺ�쒴��&��7�t��a�ni�ui;[pZ��P�	�TTu��$���	Vz�{P�9i�=��qX���bR��
�!r&+�]��B�p�aք��i��Q�
Z���F���Sh����h�.����K��$R��-B����jx&Í�(2	ɄϤ6�����2��H�"�{IL!H0���:�0K����z$�����:��>��� ��W�������	՝��D�]�A��Q��&w����"�/36dl��A�+�q9c]2�صOd�tT�hE
\�Ŀ�H�"�{1$28��TGg����ˊ$o+��G�$;v�Q��I�FivY����XM���ġj����f�,t���8$,�8��f/M���'	�"E�F˶�����-f�Nν#�
�gO�W�~p��}ӄ.u$gm�I<,�9慷�Ӂ�S[h��>�Ⱥ
`�"齴>D,d�k��5����6�G�����o��w2�-�|���_�^aB6�iqC*#�9&?$5yƂ��۳WM�ۢ���:���\�gD[t�qN+QC_i;i����b���Y��ViH��SW$"�3�|>͛��n��f=k��%�x%%u��xO��aPa�as#}����s�խ�0c֐��ԝ�)��5Bt,|��)��{�2��%�<b��� He�`0d��N� ~Z�@v@ؿ,Zv���:i��`��c��ӺU^��!����$|p��A��z�q�6C�Nv�	�FO��X��Xv����lO�uY<���[�7�}[�傒N�8E���z
��o��ZUo��.5����]��#�̭�`
�XF����k,]�V�����z�_�L4 D(����.D�k�uo*�7Нŏ�~�_�!fn��-Ŵ�emھ~'`�QE�5�����,T_�~Ɛt:�N QQ���Vl�/m'.nPΉܐ�ydX|�>����홨PM���w�t�>Jqu�eG>Pb�E9k�,,ߟ���N��#����t�4�r�Ð�,�R�$���i~FWP����&����	
��DPzg���\��Q�0�J{$%>�5��{�8Cz����GBJg�,zrOx�|h���"��%�
�@�Їt�I��B���������͢%m;$���F����;��{�r:=*����dq��B[������{�Ƥ�pc��\�|(�J�9R�N�I=�=�q�_�rl�7�C/��5[,�&ʌ�h)t8:�z��=^�cuC�,��S~ˇ���v�Vu ��²¸;6x���p�çv��#�k,0ڔP*����-1�����D�|�6`4)e3Ġ�W�]�W�N$����HN��Ny��8.(��|�q@��>Դz5�o��U��}��#�ęU'�D�0O�}J���,����WMnʯ/��9��ܪG�4jB�7Қz��KD����h���*�A?,Ϧ��z�3C�h��ӁH�E��Y�xAd�;Z��{�t�ɹ�v�՝�QY��>^�8&�t�\g���РvX{��P*�	ܧ��P�^����v����F��5|���?�i�S�G��k�?=����T�H#=�O��?5�������48Ý$�����:ڧ'5,��d�T^��	�wE��eG�p��dt�鲖�gEHa-Yю���鱣�QL�[r&^-{��C���Q��ɾ���m|�g���L�g��,gD�FQ1�͆�A�L���a�n�A�
MM�<q?,}�(�#��<;�k�Po�1I���p�d;	Y��u-Y��ս��;��C��ʥ�-�3�ѐ��:��R�X3E/݅��"aI��{?�=�°��8��!S��M�xB��Mf��q���c�Ȝ�~��* 7K�_=&ga�������~~�M�b��m@"٩e�@I&X1r�F���,��f=�����'u�MÄ���I��d*�f��?|��pk�=�����]!��VMo�0��W�@�]�^R�}��T�,1�Y2$�m:쿏r\4Il���G>R����zC,�E$��X���j%��—jV�-�&a�L&�70�����%w���̂X>0놐�\���F�
���[�Y�PD��CY)�!,p�8$RsUhTwLh#�vZ�d�q��jW�P���u�3ry]=}�伶�،TFj���6#+���BZ�^�kB�=u�2��N{ߝ�_VO�+�cK�*M{�߱���@e�l��K>@/�X�@!ٌh�;��I����A���kM%��e��8#ܨ����n�`vK=<yڈ��V{��y���w�k��j�������LŸ��!��7�e�%#�B�[:<�\r�ó;M.�H���_�������6~�l`�f�!�]�N��=V>��.� �Q�Ƭ�\�@?�i| ��=�_J��i�
��RO/�D"x$�x���7X�M��Fl~�,k3�=*�O}Iw�w;(�Wf�j�@sf����Űoscwn��;�Ĕ�A�őg��tZ��<�.�/�A++X�7��E{F�~дv�M�����=�_��CVƖ;Z�izHH
��0��k�a�u����ceq�a�X�#?	<UL[���ڲ]��Wx�
�zYJ���Z���kfL$\s�q�W*�F%m�$c*�l�5��ڗ�K�[Da@[���8o��"���"��Jpww	�™L�q,ו@�O���\��sE`�SA��`�$�,"���[�G��mpuw7�!�e5{�VÓa���C���[Yy�,/�e������/��-r3��8E�5	��Xmo�8��_1�ˮ䮭$��M�l`��E��=�(Zڢb"��%������!EIv�4��E��yy�҅^����9�����z&�bf�\�s:��L��yY��d�H+̳͝��!�a%��LY��6SIS�K�㍾���9MV$�׫�c�V��RMe�cn&MEEɒ
]W9�
�޾��|wuI�*e6>>���YꝒKJ�f���&|����3�����B���S���UQH#+�5��ʒ6,��g�ȡ���-���a��g!��!�a��dI��ؽ�^�J̽W���Z}���>��R4��x:Ս��wВ�B�Պ�������_6'2����'n�%�(��1_W�
)j.��
D�gR�o��ha����;�C4���\���Gtn�^����~�O<n�2�v6��:
��B���y%l^i���R�?��[�Cǂ�I����i oT�+��%E׳��9�P���p:���-�{A)/Wr*�f�b#n�F1L�=�z�7�k��*�~�z�Y[�"�ߠb������7H"wB�l�����{]��Ҥ����ƣV���)�7���c����5|�زn�'L�Y��r����g�X�b���/���C�?��cI����	�#�f�N�5��!����������7U.�?J����{��=��D�xB���	9S˸�'�f<T/r ��9iU�z̴u�Nj�Y�����ʺ��Ώ����y+W9��ͺB���x�\3�ė��S�:�c�Zu���h\+�u�]���|B�(�ܱ�e�]��.�uW��p��˲;Ôg�a�pg�u��
�0��p1��'�=6�49aW��%�W�~̕93��4���Ow��/�;`��Sa��Ù�s�&�
��=��o�.�s�52�%S�d|�D�va�!��!�|���‚�Pt\tỦ��Ս��}�d�X^EJ���Tf�Lgg�0G&���}��$a�$xu���ܘ��rrB���ٹ'?؜��	��)�%�}��c:���NO�ے1f!Ǎ�13
v��в��A�!���h���6ML��la|}-Q�.m���uz��*nD��i��ֳo��?#�z�ڈ�*~@H�f�A֯�	�{�4�_(��e��1u������� �˜=��l��1kzp�����˰C�3���K+ߥe�
B-���NE)��
�ӽ���S��9�r���J�Q������QR����,O�ٽ�R���Is���{	e�M�m?QP��^o��}���"i�0e��%�G����Xz���Q��R�DʖwX�χ}������'��#(�kt�%��_���g�Î��ҟ3�#I�[j��z]g�}�Ran���4�$Mtp�]��}J���j�\um%�Xs�Z���fx�]Q��-\�q��Y��@��B��
��m�J�x��'2JM����(��i]5Vp��J�j����Sg&KkE)��ܰa���ת
��ޡ��:eZq<��h����d}Ѹ-��c�@b�s���Ǣ��6��%�� �T��ÏCjx�x��O?�c���x�8�t����t���O�V�/=��{j�;[�;U���U��M�A�-{ۘ�v&�\~��e��Y�����&���k?e�G����Bk��2��1��֌�n�"5A��(�� �xB��rM�N�0�`�W=\p���ȇr����fp�%�Ք�b���f?��Uǿ[|B���뻭����v4փ�UWe���)Qd�|�ٞ���k;U��0J���CX��dc?����P5�6��&]�v�4�?���t��^c��?<��l$�Nic};`]�xS4B�<��Fa�U��Djf}�9aro�l����L��LP)سre��g~�⮸���n��X�pwγ��KU QR�%H�?$��Z��}�͢���/:���l�&�ĕM��̥C5\o�E���5_�6kk���T���<y�k�J]�4�Ⱥ�~S�k&�U���
_}:��m_��G`���Q7̼����h�v�݆[C�n}S"Xfu����R�*�s_�}FX�&O�s4N�(�G��a�=!� ڤ`��:�m~�}�|�H[�'��8��	�r�ʸר�#K�;�@�]�M��ѱC�o�4�nJ�9�i��ņ߅�esU��fA���O�q��wc����5�Gc�CS���Fq`a����p?��Xmo�6��_�*�t�ߺt�k�i�VH�a��(�
E�$�8
��wG�%[��$p$��x��+=\���4�E���H�Y6�z�>���R�����DW''�{=牒���Z%[�	G0�Ę#��RbAu�87��$�g���)9OS&��>v��N�cMN5K�wTgU�kU�q���Q+�0�qA�n8�V2.X�i�u����B�Tq�ҕ`�� Y�!�2��(�_�ՙO�L�*e���H�(vQ�N�8WƒG�F|)cR͘$LZ�?l���.�Z�4N�PzL��8�u��,�n��4˲z1���L�u��3����a+���?��#g%�ϴ��M�3pI��=�l[
�)�2P_A�����TS���,���cÿq����!G$���Cl�����6*:"@c2��3%-*�
G�^���RT5`� ?��Yp{lJ�8�z��2���7�JT��%����X���}���i
b7,L����?]�j�R��x�O��G@ [*�-Wr�)O-�c����P"g�p0(̇�¯����P�Ȣ�[�,�
�b���j�?������ۜTłKR0�2=���7�ڄ����������{��w�F8�BWV��]q�x����g\�JV�euiG\�S�Fa��ޢw/V�V`B�m��WZCl|ķC�[Kwc�#T|u��A��ee,��p'���qaX=�<�]9>��Tku?;?���J�8���S�;���Y�0_��.0ew����q���!�Z��Tm�oL��?��k��%��/u���ʲ���R�v�Q;�|7~�UU� ��c�s؂�/M�m�%ǹ<dX��k��ɾ�9��7�o��s�7��nW�5M9V�FU�Y}�s˞��A��e��l����ֽ���r3뼨;w�����XU��wF.����HV�@p��״���@�}>:���x�2�Y��Ѓ\�Ls�h����[z��kl����\��mH���
]�Z2��p~S�h��D�2.)6�,�<8�8.�����4h�ξܽy�'NB%���sy�|p��Eވ"|��.�UU^Cj�\O�X��^)��>EWʇ�}M(�ڹ	�����e	Ք�*0$۟�-�����˝HRp���ظ��J��%IN�n_IYFW��<�9R5&�Q�5{�轉��m�Q<w1�{��%���]&�v��6�UO�Ҁ�*��'e���z	c1�<��������l7p��(g=q��,�fU;"�pݸ&���"�w_�Ҥ5E�Ҩ���5�T�dJ�x���]�Q^�G�1n�@��4��FJ��i9o�.�.��ō�h���
�<�����f9��g��Ą�s�0�ߴ�A;E'�%3p�֋��B��[^��	���Z�I�:W��~ܮ�Cv�NPÂ�Oף���&�](����j!`@��%�k���榤K��l6��aa� }��'R��L�����Й�
�q�f�����Ua5w9q�BD�i����j-�mǎH��&/]�{����Rf4�k�T���Z̍�u=>��ʲ��SmZ�ö-C��/�>��YAכ+����9��\�t6��f����[.3�Q���I��>����\w��h��WPh�_g���mb�KK�N�
m���}1�rīؼ����?�H,����VQo�6~���vEe����xk�e@�6+fo}(���N1�$Hʎ�HJ�d'
��!���w��d3�v��
�?��aVh����*[Hm�*K�h4�7�%���12[pFV:EHe�@�+�A-0�����>6vW"�<EA�l�,�L�R.+�dGx�nv}3�����e�[������zl�,�LG�JK��r�E�	�oؚ�HȸQ%۵���s[b�9q�[�;5���\�<��HQ,�� 
2�t[,��,��)ڂ�`��"ɀ��t��[V�J��{���{��(��3<��.+-���>F�A��	L!���Lk���Or����ܴ`VWx��WO=����K��w�I)�tW�
G��q��8D>(<|��u��rR��鎠S4���Q\�M���Uj���|!��ͤ����Ɂ>��v
���2mC-����&@�K�SO�q짐��`}p���'�S��ڐ�>p۠z�����ul�L{�l���\z:���{��P����<��4�T�v!�,ɋ��?��L�r׷
Rz޳��{v���VH�DbLQ�<oNA��RK&V9e����Ps�˱�-G�%�m�!�h�����K�G��<?�_:-���U���Q�o��֫K"�y��_!�ݿp��AS���"%����n�U��oܗq|t�Q䰿xl�B�����g3�;�p:�.���ց�
mg��_��u��!�`y\G�iT�9��HBu�~�?
�3�Ok����`9�8�̳��������j���w`��6�É{�I3���Qd����$,��ohX��[|z�	Amu/_B�&Y�����B�q������k�ƽ0
�A��VJ��̸&�X�	����]�i꛸�E~��̴M=��&%�b�4�:�����Ӽ�p���TJIm��sD(�Uf:��zY��T�'��y��^@��s��d�4�b����h��~I�uس���{�X�-u��:��WrY�O�w���&,W�����_*��,@Vi�q
?�
����=<""�e:3�ɖz�E�!����C)ڟ�C;J�\d^T�����Q�X�}x���	�_Z��W��S��mA�y?$�������l��b@��O�/2�]~#�e��ɣ֯�� �`��5��+I�a����X[o�6~ϯ���˖��+�8�0�X��{0��h�E
$����wHJ2u��l/3�`���kF�=��-Z�B��l��l6�o�6/�D��"�9;�>“�5M_'�ւ�����u�ԉ�`���
%,��	��
y�,��B�cI���{FN5���ay�oi.EA�\%*��b�[��y�K"CUR�a��
���La!��D3,C-K0�[�B��"t�IQ2��Y��z�(OY������-f�#G(΅���z�ft�C��P1J	�D~h3�@�>FF�9��\��2*�]-1WTS�c���~+Eų0LH���
��*�i��o���hv9E|gS��L[A��@3���uPo9��˃M�����f�w�߭k\p�~p��\xkCW ��0�A�s��V�'��y�-�3ې��a�u�`1�>���Y�~#1��U��B�ލ��� �輄$'R��4'�숙�O<���(B#�<��4�����ɰ��?��b�b�H��d���`��*�&�|eL����������T��E�A�_���J���QGiX���烁�f�῅dh�KLZ�lؓ=%qY��u�B�h�z�Jq�p�~�L�A67���:��q&�(��]�R49�%X�ɇ�QX�T����~�LO�O��i8�>d�Ei���u��D~�>��j�\��B�h�fV$;�b�Y'3`ē�k��W���(Y³����\i,u���D`�Y��<o
��7��2�F�G�N6�C&vDn�x���y�dB�y��Ѣ�mbBTqJ��|��xa���&Í�w��{;�hB�ͧ���,[#�ј;3���a(�.�J�q�DȌ�>�׿�e������H��6)��זitJ����E�i��%Y�q������ڃԀ�F�/�"�6���|������O�:]�\@"p,�x����܋�z�k��6�瑻�{�?]�C�3
7�������'�_�No���u����{y�z�ԅѭT.�Rg��?�G��Q���	��8Zw�>�F��IF;z�>6n-�J� �ZV�<�'�Ԣg�8�	9V��I�MO$>:dGG��=�$���EU	����+d4{�{��>!�wf��DT-�^���>Vk����C�z�D�2X���u��_���F^ʵ
��۷wW7֘5�%a�4�؁ M5���8��a��3�9M!�a8~��8�l���.S��N�G=�e`Iq�Y_�/p�=9"���T��ѝ�-�^n��SW�$ِ�+T���� L-�s����&�A��uR+��0�%�V�GbGR��q�@��֗��j��]��1y�d�A
u)w���}�J��W��$��-�'Xtp�������Kz�6�)҆�v�z6&O:���Hv�(kzI�|'M�[�/u�SF����up�D�uj��R��05�L�	�zBt�ݛ���hGys��uݜ�H����WMo�6��WL�be���msH�N6�M�v���(id�I�����Iɖl�^�X�x������F���珟�a�!�dJ�y9�qi2�t�<�H�B�j�Ix4��A�`2�A�R��L�s&�&U��z��L�*G�y��������-R*K�4��ps���R�cxt�(�j�j�z�|A�Ό�y�ԙF���,�'����0cN�/��5q�wv�����-+�,P�������|�����@��i=�0�16S96F�4�Ĩ���A�L~�b�@\���є��1!
O�62�������dL�0y
Q�0$��ʅ�/�GB�u��������ے������a����EBz���T
�0Rx$7���-C��v*�wr�Z��B����Hx�L�"+b�3Z��
��v�:��q�y��y���u/y��ZGdž/H��n
w����~/_X�'#7�ăN��x:��D�����y��?�P<�ot��C��~'�R���SltiYy��k�vu~H�/�������3��*F�Yb�E`X�*��b�������_Ͻ���>opۥ�ДJ����������q��,}f34~���JA
I1քkfs���ŸB�F^�s��h5*t[��\�n��c�����]s�r�\O�v�Ӡ�Z
�v�j�K���n�c��N���Fv0c��LM��͏n�4���W��.�5}��v��e��[%�l
*�9z�l�Lܗ%��X�)��E�/mjq��~>|��M~��pg��MX�~��NJ��<IP�\���qͽ)\��04�7�~�7����=r�ޔ�6�p�+�uڡ�yۏާ����u�ϻ��n5�!�o��e[��>�J�y����FЊy�:/Տ��~��nj�l���r/�u���d���D�$0|�
�� ��1+0x'�]�N�;׺bv�2LQo����
S߱�Iv�>��h�$���]=���}G��㡖�J���7z�c��Ϳ���eQ�=�o=`[y�aNW8�㑆hJ�>���
�=T~IJ/\ze؞dߤ��h�"\��A��[�_W��t�]�E�0@W�^�}�ں�":׫������iз
��V�n�0��+�b���Vq�鱷���ĵ�
E
$��(��]Z�EIu�
�!�����Z)��̂�O����	+-l��bI��WjYu��.� y��Z��'��l��[��FG���_s�/���f/����EIS��ȝ��>�-�ƨLX�@A��hn�`�8�=c+U���0���Gվ3���y��1�����f�%ύ26e/%z��
��`yf��*e���9�P2:�0�P�G���f;67�T���:j���G����DGUS�Up�l� ��E��8�������>���EP���5������aڻ�i�!^uhO�Ȉ�]̗Ţ���Н~
�m(�(:�X���e~}�?{t����`=�>@�J�t���}�R�D�f5i�kZ�]^B)��>�#i���'�ME�y ���/(Oh)UX!��3�E&fo?|�f�����.=���ě����D+Q2��1�'nfkW�������o/k5�G�?wn�xN���G��D9��Bs���!�zu��d��H�L켉���/;�&g?�\w�瓝_�oM�g���|R95�9�������S}�ҦwU�I2�1��\���Пf-�9�}�w���驐���}[��qŭ������$�*�M��^��}'-���S�]+��Ӎ3��ـLF�z�
B�\��7����-��p}�����v'-�
�gJ���͏az�<���\��W��z}V�	
U�Z������Fe�M��$I1<$��_Osm���D�@ϯ�LԖ�t�-�>�RT�j�F.�X{�lz�i��͙�M����ј�Ͳ�<y��
W2��	��T�n�0}�WX'E.�^���Ml@WH�4�l3�Y2$9Y���Gʗ4m�vo�D�sxHj2��)7Vf���?}��a�[SȪ����ƺ1\*!ȁE�v��7��/�`�s��&�I�73+�S�7 �j~=r~��LPS�υ�Dh�����)HM���g7w�XH��^or|܃c��_F]I\Í���u.�R�J%6.�몈Ѳ0�
O"���Z���fB'�&�t���{��Rt2c�ސ*�}
��Y	�3%!3�ibG�{>�9"����MwLeY�ǿ�(C��*�Pϝ�
,Is��l����l��Ci����)����+�B,9K�Ψ���P���3�Ze�rHr�@�S.7�J!�0n�V-��2ft��Q���3�{��5[��S�$A�ݰ�ʂ�^�#o��:�؂I��ӨM����B�B��4�[G��2�a��JkJ�^"�s��oJ���������af-1=��Y.t��C�FX\0ݽ�lk����O�h@x`nE�j
s
�Ys���:t��q���N�
�g��-�=\�V�YO~�����	��~ؑ�%�Ɛ��CFT�)������ ��'�r������m��V���ԥ^�]��~5)!�;�*�<�㣣~�F���N�뢍��)�+`F�͒*_T:�w�w!-���3F�[1
oE�K�v����_��p����kS�x����B&�xᖼ���Va�-܆���q�B	
���,z�JR��}N���Ң!�����rҋ郳�r@���`��8����<_���E3TL?ؗ�m���ok:��	�-1��U͎�0���졀0	lY�l�	z驪*d�!qI��6,l�w�$������2�'L�ڂ��/�\ׇ���?�x�$.K�\��ͤ��^x�&J��0�<�V�L�����ӕ��<Gì;�$�t�/>ÿ�anP����Udm���˴إRPtÜ�֑ t��)wXlh[=��D[��;�*[���66z�D���ԩ�sN+V�6`,�:N�����v:<���~��TJ�{�����0ȩ~4���l� A���z����\�<�O�bî��[@nH̅D�&^�l>C�3��c�%i�OxQ��4I��Ƚ�fve���j'��X1I]b��V4��[�: mD[k#���v��c~hʨ�,�yt`��B��1��CaA�S�g2[[F�U�8���Q-�R�ؤ�8θ��
`v�T��E
�0\\I�b	�8q$��%g����F�<��xUc΅(s�[�sm���R���Z�Wv�
aU.�~L}??[Zg�@=��q�:�K+�2���^jI�U-{eR	<0}�l��w����$���{�4{��D�N�MDo_�#޻DZ����E�-h6��B3@i�v_�&e��XAX��2��]�]��M9��QS�����
#�BAp�:5!��ee��`6ܑ��h���V1�3��@IߝfW��ŀ�PةНi�~vڝ�D�Q\�4ĸ!�<��Ԯ�2��s�ȢS�}�H�G�?x����k�ǰ���⯘�^s��622w`MTL�U��������WO�e�@S`�b��TKo�@��W����(\�Z�jZ����EB{��ٵ���wfw��ć�����-�����›��o�Bx���r������f+! 8�hP�XL�K�jT	���r:G�U�@ύڡ�X�z��͍��s�f+f!g��3����$;��LJ����C�R���	\����;�
�(�i0@��� ����-��� W��z~g�	�j�jԖ#��.���r%���k��On�F=km;&/�rP������ �d�`�i,�Y���|�,9X�K�*T��ΧC�i��QkLP+ً�Z��h�EYڠ���y�ڜ���G����]���Y��2�|�N���%��g�E��c��
���\��9
��������0Z)�0�j�����"Ʀ���˝b��9�{��Ӷu^¹���)0xu�M�]4\�Y�
��N���F�Ɯ��89��gg1.��ø|�0��EF�&\���m�ƅ7�n����4aK�m�R�	\
�6�M�+-j8�$;���
�J*fb��Ct�Dz���;�QZ�'��*)��D2��b6.F�4xTk�rz4�V�#w#���W��'^��5��n�I#MK.�E�oO��\���Y��j%
_�@�J���ػ�}�*�x8G��K*9����;zDB���P��"���4�&Z�;���g�cIw�1��ƺ��:�-�4�
�F�A%���!����� $���[�����Wbl. ,��'�/}�t�^
�{�#eUe�?"Z��V��<;��pʦ>C�S��x$ލc�Q�����
򷄎����A���[>
wR���#�y��_�:B��R�n�0|�WX�3d�2���*Kܑ5$�qi�i��@�T�&��$$��|>lW����M�Ԅۥ�s���'��N
R�'b�XT��B����1�Ic�jeWl����3U�Ly�^��`S��o*F$~�B?��z�0)���
y�	M��w��l d���)q*Ʀu��OR����I��|���1�O%l_.p��PL��br�Sm�o�Ĭ:���jk�Y�������:��V�+�Cm�j,�%�5��4Y��F~���@�����Wì���"fO�m�K�:�뵘�_۝7w^����-�տ�U%�R]�
����yX���w5ٖ!���g3�G�{�3%ݝ��i���'�����VMo�6��W��,���V���uS �v�@�瀖FQ�TI�Y!�ޡ(J��-�7j8oߐZ,`��F�}i��ۻ��s��-�:��ږJ�6B@�d@�A}�<-�APؒ0��B�r�ܫ#j�9�`����sc� x���l�,dL�]�B�2.Ɏ��a{���
.0�2��Xp�Ʉ�V1c�d��QOf�La�^F�@#�����Z7��|�V��Ex��"C�՟��{����CZ����LR�k�����(C�PT������Ԥ���K���o(j�Y�$���1Եk�����M���:��T�4;��Zn��pڐ?	.R�e܇~�
�o"�o1�c�Οzp�p�:r|�*<�<+�������-AU1@S���U2m�t/.D3����ɂ����*M���́��S��H����:j7+�*"�#9yw����,�KS�>և�Yo=2Q��6XN~q꒟	o��@&;e�Ak��Bً�����/��P����x�sI��,+1_����:qɧoH�����������	ۡh/6��
�+��1W��9���(�� :�2%-�~jI1[�&%�����%{�mM*|J^#��7������ #�0w5R(4�;��i�`��;wIv)B��֬�y����s1�c����M�e�����O�~Ĉ(!.���gᜢ��u���$�i��=I �M���$U�6�
�{��nc� �Uo9����j*z{֐��vt��Fz ��N&n{2�����XD�9�6E&�z��Ij,��=��j�h[�XE�oK.��e�O���
�at�}�ա�.��A+���k6R�sM�L5�[���#�{.�m������9g]���-G�.�g�fQ�g��ց�l������Y��"{"�Ex��'���D������,��g�ލ������j��̼\��	���A
� E��B<�^�xi�च������PҮJ�-��W��r]��$F��b�u����2�"��������G��T/���8��9'�.�)����.�ྉx��$��	�}fA��;�����A
� E��B��̫��)͘�B�>��{��7ñ�@�h�`2�4��8��l����;���C�p�x�S]��4���}oW�pT~�aY-����
�0��;SD ^ d�Q� �A��T�������a,����dƹ��A֭@AV��6t�O��F��m���A�eRӡ���kJ�%1j��,3��#�xRe��
^<tw�s�"�%�1� ��W�>����
ASC���q��\��0B������v=�R��Q�Ui�g��M���y@�E-��W���&X���
�-|�Pa�%��
� �;S ��|\���v+e���0}�Q�+Д�q(�*��{��ᓡ�P�P��G���e�ɼ�.A������c���t�����'շh�=�1� ����]+�+,��B�l���Њ�t�邑�>�)E�w�.��XW�c+o����,-����k�Һ�����U��MN%�#���cʟ>�V!-7�n~R��%��
� �;S��!5��E]߃�\�qi����A��CfSvo��̴����U�)��Ɓ��ɦ
g��w���]��)N.�,(Q(.J�U����*�/NM,JΈ��L���Ғ̜b��b%;}�r;.&t۫8���ݎ�0���#q�Vu��M��
���f��x[��a씭о;�D��Jd���9�{9��o�d*a�f[��N�|m��mԞ���B_�0 ]P-�������	|K%B�o+Ar�����O��E�W�`M��ۢ�J�N��[��8��������
���̖I�cm�w��1"��+�lC�|F,�ٔ�`=
�c�#hyAn��
xb1���b.�ٚ���b���V���]E��E�@U1Ym>�a�����Xl�T�U��d�cǻ-v�a�
Ea[��tΑ�"#:��TNFì�pАg�x�xBN�_��������t�l��m,����msH��c��H�4�g�0(�Pj�qJ�ݴ��^Mf��Ú�������U��t�#�����R`J��Z�OJ}M���H���q��g���
���5����U�wG9.�����ݐI?p�j9voS��X�o9~�_1H���Vp:
����8@4�KUUN��v��M���7c{7?H�w��>4Y�x�3��7�t�p������ᣃ'�O9��Z��ᤴ��&��,'d@s��'q�ۅO���M��J=�0T	|�	ג'0��W�g���2�r��l�,��'M#U���uo/N��]��Hd<n4��v��I�D�)-D��W<e�tDFj�`��4f�%B��BZ<�BI����i2V�:ڟbȲl’�Ҡ�Օ@[�Ȩ�_:�u}���Ei�I!Ɇ�I߈�A����RQ+��R*��w�؛��o�!������e������L&Y�ӽ=�</2<�W�c�6(�D^(ma^0m��g��p��&���^ܤ��ƸWq6Qoc7ū/r~�,�%���\H�5�|_X��H�7�o��Q��e��Y�u�!:f�
�����b�����E8�y���
n��3����D3&�%s�Oׂ�))BƄ̄0`�S
�L�\�}��!Fv��]��)D��Y�O>/��6aY��Q����A���RK¤�L���
s�5��t‡O���С�195.�&g���%��0��� ��3_��2��k�[[�8�vO��aq���A��A�.�-UYµ����_(W��2��߫�������\�>��iT����Ȧ7G0*�*�)PAu�V�O0�Ke��7q��ئp|�"�`��[�N�؂���YQd��f]�[��!���j�8)UZ$R�Ĉ�F���*�#���!���S�q��r�X���md�6��|?ݷ��~6�{�??B�a���D>8�B�[�*f�sG�P�ޅ,���+��4|��^O��M=Ґ��A����m����f�l�<��5�{=��b+	m�i*�$��֞*�Kiw�R�"c��Ft���mB�^������#��z�1���P_"\���Q<,�A�$+���xe؋���T���DT_�LM	����[�6�C������B�(�����a��?�;���2�A����d�$2��hw�-���r�̗�5ȹz9�+�\Ǹ2d�I��F�i��u��o����
f5۾7k����A��N��tc��7��sb�2L�{���5��*�E$b	�E�ӏw�Z/�R�#G=���_�9ߟ��@��?�|�I׈�@ˉ�l��g�Z��+BLSx���p,�*��EM�m�����_�{Z� ����	^f8"��(���	ò/��hr����yu����+B�ұ#�U.�0ʣ�K�J[&�XЉ:|�u�g��#��`#�'l3^3�@zX}��z}�Z�}�Z}�uk!��82[�`m����lx�^��9[9+��[��b]����-�x�w
���E�2��-wVu(���Zŷ�4.����.9�p5kP�qwf׎"Y�Y[�(�q&7����{nq�FL\6B�Pr��O	�w�V��+��l���	�%	�2�/���`�%!$#g@���D��n
Z��VSt60�|���(5�NrVކ�m�z�8�򵢟pp�G�=���#�˗���Io��;PUlUq[���t����#�8�w>ZG�_Ukw|2•��LJO�v��DU������xdk�6a��9�u2�Y��}��]J�턕�{��$�5���F˥��g�7���T��7?^�����Z[s�~ׯ����tɥ�>tF��Ȳ<�$�=�?xTe�E����H��=��^$��L��88|��f�LnvJܬ*��/��.W����\�z�N�j%�N�iQ0���⚫[������L.Y��iY�g�s��[�J����e�ś��vg�X�ȪUV�EV�9GNKY�9%|���wg��/��R<=��E��7ӥTk���%~�^�7RU�.[V\��ߪO�̹ڳ%쟍(?��`˴7=��b��jv������vP�`kQ����q����X��gfN��R/�֟h��ޕ_�tF�[3r-ʯ}�oq�'��0��
/�MV�6#%��Xi�B�9_��'#�Y�ф-�rQ	Y&cvw���s�#�[�5/��w4/�|�a���^�Uv+�r��!��p�d*[��;�����G��w��&n��H���պ���?jq���#6���Y�%��Uwv���x&���~���w_[&3�w!K]�zQI��	c+���Fg��R0��M�f'��1M���p���)��� �zl���|!{N��S�R�dqŸ1
���\;v8��3~�׶S`[���Q����9G^{�#�Ȓ����Ő�OO7Y�����8�@���?�3㭤����I�e;v�Ē�o��ô�댥�!�&L�d�����M@��漂#�e�+��r[�����xU����Ӱg�W|A�C�+�m��*3��2�Of��)7>*C-�,���2�t#ʛ��}a"Wih�D`''lt�C��<�ù���&� �iLaX��Y�y[Ս�� ='>�X�,㖭�P��:hp�E�E��.
'���d������*TUg�c�&&��C�#t:Y�G��=����M��FǺ�p7:{@
���� -$�3Ӻ�b����L��'PuMy@J=-w�T��98���4g
�w�$Ș�0��6�N &��
��"����=|60h����9��\f*שat)qy��9�G.lN	��p�n���"�����p�4p�˪J�y
0�5��l|���J@8�􄾨l񕾇���BIXh`z��
����Vjx,0�IF�y
@JTD`�V�Iq�π)�)T~��r9�� Z�	�Y��:1�
$2I��C�탏7w���9x��g��G��,Bm������n�O֥����ف�e6w`A�$�./<pP��=�F�-�I
�I$�]s�7, �\��a�Z@�o�3���2{Y���@��_��3 �,�>��z�g�K�������k X����KA.��m�6���(���#v�.o&��������G��5w3���.���E��6缅��";���okiu���;|_��\5;�s��E�g�7�|Կ����aʯ���C���r��F�L�}�r�\r�=��lN��0-�'���6����;��x(K>�f���\�s��\‘���`qr�H�^
���WN�l����p �d}��31���CF�"�a��<��Ia��
C'���K��g��e3�"m�MJ2����ڢ�S��&��q��药
w�xՀ�.��O�1PH~���3�F�	A1��9�&:)�+� C���_i:�V�ހk�CP�7�w���CȤ}��^�ߖj��;�Ǝ���!Q/����=���!��Qe"`T�H����
�gJd%�udw����qY��QB<�p<'�:*O"jt�Sc?�E��f8
k=���h2�HF/�+{	�^������Q�:�+���w(�315p�1�n8�dוS�rM��u�[�	�+ھ����~7�xu�5�'�Lwb��������K�tuf	���>��S���?�+*�>X,�a��
h��j�@e9G�3��FJ,�f�,ϓQ)���
8&�ƞMz������i��H��-�z�6g>�:�'��H�.8m(�F���ȫ���a�F-�-���n�0	�퉼y�GG���ΰ���I�-��Ӝ<��o�O�+�Z��4����9/��+y�X�&�6q���u��6
c��C��HX�1i���A�0�5��=��l��z�/����Z���PQ~�
��/����1:,-	F�`�~|�=}m��c���S��;�Qm�R=A�t��0��נ���HS"�^�\<��6��`ж�B��œ�Y?�9��/w�C��2����u>ܷ^K[z�͆����r6����{V0��Nm�mK=0����:R�-f���_���1�R�Iw�;��:(����/$b�D�r��Y�
/g'b�/o������ݝ���p,qe;�! jʅ4�K�I��~cu��}�z�Lx�Fա�����a����d�V�`�qZ�{;�3�BrpeK�͖�nb����4�i�ƓE�����n��K�p%d���K���3Mз�JO��LI���w��N��oJ#�wq=�8|rs��{���̓���c�q��6~^p)g�֍��o�>[s�]ُسg�>��W�TƑ�xqA��'k)c�3Sp�4�<�����L���f5���7E��
B�M�T�%���f�Q�>'�N�dz~��
-�������
��rhHxMׁ�LA>ʷۢ�LÀ�7��0WnM��L֖�ٳ�6�!R�Z�E���U
_��u�{41�F�q�L��Y)v�v�=���c9�~���nwܪW�NW"�y9A��| ,ѡCG��o,�3l�;l�
�J@s�x&ϛ��B[s{/�]��Ӽ�LW9^WH�K]+ӕ4ҸemF�ع�Y��vڵ�R)�z"�)��ĭ^�
��!�7x�a���3�q�]	0K��o��� �u�o;��#l&�jm[���[z9h�ɍۊ��[QT��22>�I��"�m0��E�6�NP��P�Z���4]9Q��Wj.��˜?̞�@�ܚi^,�{��(�'�P63�4W���{R��¦��E����^&��zm.O�qE�ݤ��%@�ni�����<艮d]i,�e��
��+4e�7��f���'v������qDSx�ܰ��9�(Y߬�.1@+���ΔD�WbYM�D��Z�:	���؋\���˕� &9��g�C
;�����i]���9`"o�[�.|/������ �F��繤@J�95�@�FͥAކ�"�ܷ�l��LNt))E�/����v�a>f�*C��+��N�>;�Þ#�<���0�*��
�˜�5�՞���]FE>���קǏl-f5��)�$zUpP~��<�4��S#O�A`���y�	0|���>"{��*.��{Lxwx
t�<�-O�Ջ�deTH؛C[����_`{�晹+��$r�&L}���Es��)�l�'�A��3Ǯ{��+F_��C�b��79\g,.lx@�W^0鳨j޵�F�2q�5_裶h��>�>�Xf��t�����up�k��Kq��o���S��<��J����6�'L�֚7fG��7c�C�s����K���15Y�mi�?R|/�P��.��"W��ܡ�Z�)�^�&g���P�9/��TQk�0~ϯ�vvBjo{�ֵtt� {U>Ǫe�Hr����$�i��B���>}��>�9\�vmĢr��pW!\VF7�k�s�66�)!$Y0h�,��Fy?,�.�U‚՝�\�w��hp���W'֭%����9�L�=z�Rw��h��r�m>�RH�F>�%S��R���tY��7�i�q�a�(��D���i��@��6�9Y�=��Y��׷��r�X����(X`)�	-;�L��wB�t�@>��J�I��4$f��)�;w��|�n�uF���ٍhK��JH�p%��~l6=�sB{SHZ-�CS蕂B�U�+mjj��<�ʂ85�\Ɗb��ō���)���	g:�wӰ|���}s��d��&p�6-��i
3^êB���p�@W,iF�R�mI�D�Z�)0/;/a\G���7��oH�6h�X��R#�V�8ꅑڕ3Z�i$�x�P.�`w��P�e��PQYG��ۜ�PSA�t�+ZL�g&�Ă�lע�h
5���EJ6�'��b�?����͉m��R��ǖ��h&��eG��=\���O0	��$��2��/߫8�m��
��Tl��~�HKu��ԛ[O��
�Df�ӣ�#Q°�0ht�~��{⯬%[z��K7�Nǡ��t��om����Q/���Y�q�o?�ɯ����(;�l�
`���7�W��-H�*��M��8?�S!ᢹ�=�8�M�j��
C�E���az�
拮�瓛�����
����J�vt�_��?y��W�o�6~�_qA�Z����P/[]7邥M�d�C�t��R�ARN�$����~9v�>4@K����}G:Ma��k���__��
�J�Y�U��
��-�6	L�od@�A��<�)�cT����u����j�Zb�50xs���ص@<CIn�d2&a��P�́Kz�pv:;�py����3^-��p����P�YVb�%
�$
+I�|6�Ɇ/7�Y�fz��~��rY�c�J�{Ԗ�]>�z���/�-���;���<���|2��'AV-�(���>�v[v̭8ނ�!��M�ja����'���j�Ϊ���8��4`5˾�J��6����-g������R�}
�w@e�g�g�2T�[N}1G���S�}Q�L�Kf�%Uw���΁�����WO�~Jm#��rlI|�$[P�#��������	(��v�rw�v��$K�B`H��O�k�^"��M�f��.��!������2
2�r���5T*'"��R���WK�c0h-�J�ʩ������]�Jb�j�������
/Io`~5�a����M&���aNEU_���-���Ε�d�_�6��-��$�����i�s�vGΝ~$�*����.%D��¸B��1��qF�1�l�_
fJ���8u��}Km�n���+j鳦jј�Br|�v��E��X�Z؏��x?�%�ra)�#x7n@���ZN��è��� %����d|&��y�$խ�B�,�-�_��.��
c���%pX��6�2ǯ]y`�1'M�u!b�ωA���'�3'+���&�iAZ���㹙�UpM)D���+el���E��5�9q)���A`�	� �J�O�RP��ǔN����ME�"wB˘N=�{�Cp�4l��N��o�`j���a�Z(����}�4}�' ����K�;5�b���%Id`H/&]�u���&	�m8=��b��\�AQ��>��n��1E��g3� V�8�A\?�<.�?Y(���z<�8|{:=;G���b����&iƩ!mf��x��G�h�JI�����ߞ��X
���g�lRh�0�������´7�j宵r�֪�D(խ{�m�g�;j3f9�]��K%��7X�W��O���1�g���u�PM���&iw��P�s9�tp��|�'̿�������8�erW���@}���`8%�Ն�nv�Ot���+��]�(����?��o&;nMI�"�Kq�����]�1)`*4�|� �녻vn��I��z�emʀ1�v�u
��О�A����]d�4��F�Rc�xn_Z��ހ����C4H����rl�âЛ�糫�w
w����̣Ky�V��hf龆E>���,�6��w�||�އ���1�o��UQO�8~�_1�l�pw/'�@�Z��<UU�M&W����
��ߌ�d�IW���3�|��7n���n�F�+����'<TW�э���\��M᢮�Y0h�l�HgY�A��*i�����.�s�7h�ڂ���������QQ����\(X!#��SHE�7�����_C)kLg|�A6�6^rQ�]-޷�dwPY8̙3�f��Dl��z۠�6�8>��+*WS�T�O{��*GG38�O\��o$>�덴�����>���Jl�6��eg�C���W@��3eH�f�X�z�ڈk��Ч?��A
��D~B��R�":����%hh�� E�Sy>�4 �D�QS$�#T�d9��ͱ��ˤ��ؗ�TTo��@�5�K�J;(���2�AR/��67��UJ�|�"UeCTl(�"�P�ԦyϹo�%�`>b<ARS/HqV�.H�^#���7^�qY{4:P Z
��ޫw�����F*� sY�/I!K�'�b�\S����7 HQ�7T�R������O���y§��g|��|�p�qMR뿝	g�2��t+�h��:C<w�h�e�r�??����S�h&ͣ,�AGv�f�!�s�wq�?�q�J���Y\
ڝ@<t�Qv�`:zLʠz3m���^_����P�+����ҟq��i#�1��-ұ����	Qwo�3�)��|��,G������'cFi#��p�}A�=D,���E^��7���.zz�v��ȅ��.'����mpoq���j�>���a���}~n��Z���0&�'�ʕV�:��
�;g�=��9SZ���c�p�{Z�N?��I���1{��m[��a�<�2�"���e�S�e�����v��Ea�|��#��S���g�1���pD�Wm;���ǀ1xכ�0{��hm�)��I�͛Lw"\��&�^��&c����b�)l*V��r��_�o��a�����읏@�dT�vZ��o{��-�t��(�MGO���.�k�9z/�Ocj�)��<�����T�f��햳��!u�	�uQAN�0��sH�$.��p@Bx�ko��;��E�w��
$�qggfwg���w}���^zª~�4�:�����Z�H�@BaKf^-x�o{�OA�7�Rv~K���&Cᦹ�I̖`Y�+�ث�649�>9v'<ܯ���Z�4�*nq�Heғ�y���uP�eD}��
?�]?\��^�V�� ���3u,��%bH�ǩS:?��~W�����qt3]p�M��l��lƠb���䐄]��{���mے��'i�,冝)���ܲ�;��{�a�*ҿ�$�.�VM��H!2�b|^U� [b���E�K��G�!��4e)��v^a�5H;F&�mT�n�0��+&�!�Ki=�m`�Q4@H�������V"��#���H�Y�`������I�{]�F.r����>�{N�ύ.e]bZ�\cZ�I�,���8J�Z�������ڤ�Tg^.tCFQ�Y�����umA(dJ���\8�BaF�\�*�T'|}�|~y�\GQ2Fb�-;�F�w��Fj��
���-ɀ
*I1__g)���E�N���TE�ݔ��4{}bj֑"c��I!#'Ҽ��$�H�˲��a���WYv	��5�,+.�$5q��c�&U�툫q1��Tn�I+f���GJ�ax+����&��m�>a��'��5�U�~C|�Ef��+��u
��� �y/2�{���uF�^��TF6�VgScD�����OL�s����p\[�
<�UjDQsl^��I���d0WW����}hv��E���fܼ8j��hh�-Y�ءfg� �(vb��"���<k�d4��un
��'�}?G�k�?�r���9J����t l�c�!��R�RqDd��AԏCQb�c�j�5L�Y��O�_u�CM~���}��^�;@3����S��&8naΔz!�9S����s3�N��� qU�|pB��@���c�]&F�}�Ymv�R˜�N2(H-\�[\�ȄN���W�f�-�[��ozm���Xmo�6��_qE7HNm9�6`K�m��-����S�CQ��D��dR�('F�;�z��&�Hw�{y�l��|a���p��0Zh����Y(�G0LS�B9h�s��I��]�A�,D�*t�!V	�:W+�%O`�g�_��Y�Rs�jf��L”���*dB�u����d3��C�_�e������f3t��<�ǃze���'-����Ӊu��<�cΙ���&��n#�<���J�]x��g��8<�F9����J��_߾_ߎ&����p2�S��~e��Y�qMN<e����.�����?�n�W7OXVX
!Y�Gmåy��OY]�g���ף�۳wgg��&��t�����\�,eX"[b���(D�XqI0�\^�w�,�|�3��x�#w��i���C��͋+��㦲n��%x��-�U��K�y�U��� ���[��m)�?���:5K5g�ڟ�� Q�8���G^G� |�U"��:N��j��FȂ��+�N���^~o(h8�4��#���z=�)����談�A��ԍfB�f�iR��׽H��Zɰ�W
w��㝭��	e&�L�PE^i���0����g`��"g�R�!\�4Uw(&�)ǚ젧	�&��S2];���(gK|Y�D�]+e��.��:�FZ������i���U���z�>�Ò�L��aJ�%HZ�̱%m+DD�V���u�:���92�Z!J��cFOOᵗx�mNv�>̲Tx
�S��b�t]`��BȒ[$"�'�h'��}3
LXQ�&N�+2g����E�����Ũp�٣ܵ�
�,t�AC�����r���?��Yc�w� L/T�8�-��s` ��
�j�*I����D�+��g�,�ǵ	�X��Y��p�T�b Wg'L��;��l�'0D6�Pw��G�@��w�_��G�\�M�eU=�&y��J�S�QiX��|1��F�����#)�i,�Ikur�"�/��#�$�N�xi�	�f��[�,UQU�\,G�K\D�n��Ŧ��]%FȐ'8r	�pw#�v�c^�W�v��=+�=��~�<����͵�3tE��Q��QQYJk������P4!W*E�ф֟,Q�8�P�x��*Ҥ4�3�t��L'�T��r<�Z�y�T�����]I#<S���E"�
ʪL\�}j��h�&�2�vQH��FO�����x�Jԃ������x��9���?rCw���nd_�)"��@`nqћ<?���5���Z)�H��NY���"n�RE-����ipba�b:�3�����wx�}�\\9:<z}�-��*ss�p��皯�?�F �CkU�N��{�\'�S�z>�j����a�o����NLJ$�B�2��hۃ��_~mU{%��J�eqͱ��4q��'7n�!c�i�����F���o*���&m�S�fwт�F��n��Ts~+V7��<_�)c<�� �E���	�#�~����k���M��Z}��*��	����N��e�,ԏ<�6U
����c���U䲙��Mz���#��Q�)&׍G␦�5���S�e�1\;�Ǩ ��h[T�H�^�ю�i>�Y^x�f�m�[�,���핽���-�o��S����p��*h�ۿ&��̨��'5�����W�Ƿp7�0\€MqH]�	�-���9������풳�m�d�~Pn�[;a��v���^CQp�u,��OE�����Qs��*�wO��U�(�����<����u?�b�;������+=7�?�?v�iU�~\ܺ��V�_�G�X��?,ee����AN�0E�9Ő,��V���J�����3�
N&�'��7i�Heg����n�(x1Zb�0Ȩ��í����'(BNfh�Bn�%Cڳ"�bH�����7VqP(�@R�Ј�5���
�������
G� s��$�ךU_ƚ��u���W1�pp�%��2�C:��j���5��P�ow�?��Z���_�l�)v�塸����J���5���~x�v;Y9à;��"�q���L ZU�YS+��ڊ��h���jSLŢȟn����<��"��,�T���]�D�H�K%1�.�_dzB��TMo�0��Wp�����(���a�6����P$O��A��(�r��|�$��O��V�Z�	g�~Qm�3�pQ6��i��Ѥ_�V�ժ�(�)
<�xv
� �%#�%����ͧ2�B�����~>v0�;��5�.a�9>IN�E������[`����1N�M���|s�[H	9����I�����5luYnc�m��p>���Zʞ�����ch�Tt�����Q�.?��K��",׋�?��aG��)�� s��0����%ğ��"�:F����$)�616\�o`�kޤ����
�P�{�ѢK_�j3��i.��%I���d8�'�ǂ��v;���/T�
X�*��q46���s��ñ�9u�^��ե��Z�2gS��A�<ʸ�]	Z�G�}vnb�QE|��g�7��VW�xV��$��]*�=N9:&$��A�O//6����K�lZ��|�ą�T��7D�E�����MpC�����1���ۜt���={�����{g�VU���NH�@x@<u�S'�_�M7Qp��Tao�6��_q5�,��/�b�͌-����)J<[l(R#)�B��#%9���ˢ�{w��;�o��]*Y�vȮL�Y��<��3���o��n��j�pk�,=�Z_�RX)���E�6�tP�P��V�C��	����|��ܰ5��C�}�Ȳ�O��"�&��j}s�N���PVi�F�Gp�l��eŴ���>m�������ʢ��������O��*h!��H���?��y��6&�`�B��\9�\[ĵ7�5p!��Fs׷��;˵���nW��ͦ/,I�y�kEO�b�+�����b"��X?���b��#�0�M���?������.�ZS	%��X<8���7Pa�T��x$&�G����M�޷�}Kn�Z����F���rC����WZDMG9��\y����h����7*|�o2�Q����D�U��|ϥ�T�wL��@�32I[xp̂1��0&���~�CR�M��ߴ�e�b[B�����a � ��?����q2d�ൔrHTd"m�i|��Ct��͡��:�"�W�� ������-�~�5[m�0��o{('毩��
�c�t7p�b_�(&b+m�h�B��}8����D�$UJ�8���Ώ�z<xjD5�R��Лiύ�ɑ��m�=��q�"��!�^㭐љ���1x�ԏ�:Ч{�]�i��z�]��
�G&iq��d�le�XFt�\�:��hC:A�Z{�G��#�C�_FZy�d���ʐş�F���4��9&�2�ӻ�vc\�hȨ��y�T�Y����6���?�ɳ����{�N�D�=�r1��'B��0Y��]zx�3:yd�D���$�l<8[~W���,/��7YR�<��Zf������kS�H�;�bB�b;��<�r	!d�ʃTH6w��`$��Y�id���߯{^��d�٫�T�����w�О.���Ҥ�!߶i-8#�ȣ�h�m�B��C�$��,O�>'4!i��\��2I���{�]��쒷l�4��5K
.H*�S^�+�9#1�Y�BB9)�m�%�� ���/I�!#����$��i�.
z�2��r}Vٸ߿���nv�4����
O�__����௷ۓl�pk8
��+�Y1��溺�A���4'o��y~������7�G�Ⱦ�����`0x���O�+�р����s�*�o/_�"ぽ8�b���7���kw�JN3D4A�1#�47���Z� ;%���q�D��qⳢ`yt"�+@v�����|��`���V8�%D�˽y�g�Th�%�/��0
x�+������/���s�P�����#��g
y�hb��:H�6ja��Q�.�g�-2��H���M��*��������QE��xH̦�����' �yt9�ۏ���GO�1�;���x�Z�9H��i�2Ϟ�yA:��2OC����!�B�$�s?� �$E*hd9*�XJ2���)�Y�S�R� ��D%A�Q+,�����e�8�E ���i	�<�u�i-�X@�kq�
�����B���"V��+f9�h/!� �G���ifR�`�/�sz]r3�HJ,!p� αxi{�o�
xx#�֓S�.9��<��ts�| Q 
B�4���Ғ�A�Ŭ�1XL��!uz��nP΀E0	��U�F��~;�؟�ޟ���g����"�a� n��f��!�P��U��<��Rc��W)8�7�q�|�t�m��[ଠ'|R�CA/of`������{ċ���h8h�m�2̓n��%�AƧ�Eǽ��ǃ�#È�jX��
v�N��Z �q�$���KZ�^���i���w����6��[���9M8�9�6�����jN�I�������JӘ��L�T%�C�O~F�E󨐧�P�2s�4h��h/Y� �Y�R��\));m`�K��:*v��i�RhAU��є ���p��A�;p��\���S0�$a������ԴW0^��NI�8g�D���C�D�JK����@q��%�f�������\� �ړW���{f�~�q�_A�
�4F�h	muA/����拸��xٲ���L%�!�@3]�4F���(���*͕<���3g�"O$��m���2�u\��HPw��[����4�g
B/C�T��&m�'�'%`��/;��m��%�'��&�NeV�@���)�<��ש�0ь�W���Ÿh��b�K=���p��}�<yL< z�}�|P�pʃ("�i��o�i���_S�_D� �,�{�
�w4MNh�;�*�G����Dr�{����-8�P�	�;�ֳ��Y���O+iF�,1�g���=���ϟTo=x\D#�љϟldͺ��(̳�1�u�q��i�d�M0��џPybN�F�R�W*gO�M�>�Ңwȡ���1��HY@�j��r�{P���G�[�.bYY;�J�P^GW��@�v5�
w3�	oވK�����΄�\$�-��KU#��.1R�fPѣ�U�꾸����GPrsV�nJ��ߤ�੭�[U��1%��������b�(<�T@5��"�ɮ��s������b�S ��)h�1R,E�i�r3��k�YF�QNi/�ā%��sh���a�ҁ��xsSq&�����>�ߪI06 �R_��A��_��)tsϱ����O(�\�2q�fL���4@͆7���>H	N��$��_£>x`�Ӿ�H� ���z��f�"L��R��*�^nđ��*�Zm�PS�*�Z�t��u�[h'�U+פ#�S�N��$�M����8Bi�E����`]����r8��h�vZ#��0���8Y�.|k�U�����g�	��d��g�[V�hL����-���l���4<-�� ibPO;3(�UB�kM؉"rv�R��T���𵪠�ĕ�x�Ե�9B�F��9Ӗ�R�K�j�+��Ҙt�v�n�����L���k�+�>��>����V��?�eֻ���N������K��q�&���WlF��4��:�:
���*�"0OqքY`���p��6d�I�!�r9���*�D�|=8�|:> >�b+éH��ڍ/74��<�=ؿ��,a9�ϡB��Vk)U�����2�I�9�'zsI���wEj�NEU��-� �$�C��)��!	-���"�4�9v&b�q{�3Q�^��+�,.�b�Yh���Cq���?�@�DP��//Ő����$�.�LȌ�Y֡J����;���G�C�=&ۚ�i��b�[��h(gQ���
�c��)>�[:�b�ǖTt߭%2��P{�/A(?O��ʽ�X�i<� !��+��;�>R��$!�^�ʯU` �"+��w�κ�gK-RaPs2�asTPr��!^$��pڍߢ�t���Y��EM��=�&4�����N���xq�B�. E�졜m3���]zdۈu{3rX�jb�Zӄ6'!�D��i
J�3R6}��;'�p
�4�+Tj;���Lsh���pFQ���E��;�cJL��H?ZHr�y�P�L���ld�E0�B���/�jf��~$��G�{�9N�y�W��ǩߟS��G�[��pY�Nܑ�^*�j3�R0%p�a٭��-��B'���0�5LE���@L�"Ƒ,i˜"�w��[^����5B{��zT����w�,�B��W(�8�$z8/!_���u����o�f폭����rK��,��nI���Y�&�ݭ&OE�Օ�_&�t��6B�����L���BE���֒p�;!-z�p�TV]�;0KZ $)5d����幟.,�~S^T��A���O
wr�V�}�U�]�g(�<T�y�(�D���ʦ�~��8�7+IA��,��x�Ҡ�f�M)���xڂ⦀t�"�W�v�p�-[
�uҵ��u���)
5��~�v
�[�V�u�{�$���
�R�u�ׅ`4���y�­)����G<�(ʳ�uw��:�=)J%e�.)-��]��El�4��w��,�陽����dD�˽B	��(-�
iYj:�����q���5�ԙ�o)��	�PSN:�"G��-F#�yȂ���.P�5�(٨�V^d�R}��:�U *oPo��"��'7I��j���~U��=���߶�6�+���WW�+�Dх���Q��S�N^m����jĮ������s���e��*���^���\�����#s�G�J.V�T�-���qS��!�W�
��SWcS���F�%
�3U:�C��3
-U�ۈ�`~�RQs�=��U��׎w�$:�#��Ǚ�Y���U�y���ٜ��eg�|t��ݹ�^�YU<�-Ϣf^�:f�$�!<Q3�L��Tk�#f��a�1��e>�#��f��j<1U�h�_^ռ�ٮ˻��h� 	9����͌qY��A}�>"Oy�g�V��NS�'ȕ:Z�͚�ds�ě3�t�4��uU䯘(�͊�8��t�4R��
�/��X
�/�����pM��D,��O��R�?e���,��P�Ngΐ�:�Gn�N�yi���q/Ȁ���E���R|���uU�S	|mm�����ʙjC�w����߿��f�dP��Oo�]-�3���9���ӊ�:��0���5lM�+�YT�ì����^%5ɶ�x��Lu�0�eScvZ�z{^��2��U��Z,��N���L���I{q�r� �nY�U��j��������[=O�0�+�j�c�ll�CH\���i��l��;�I`����^��|z�%�Nn.0��_H`�-�&���UݦǏ���|MT��<g{���m��ZY�o�
2�u�i�Z@x9T@M}��N�[�'�Cb��1'���ݴ��B�;�J,wK�b���wԘ419�������f���+nQ���D O��f�*���+����(k�Q:�A�uV������KHD1[�ޕC��o��|��BP�7�U�fibPt���2j(I�bbaʏ�T"�FFc��3 O:9�
-�*Ū,���dN4��C�ۗ�>>�D��p�8SS[�f�p��:�
v>L���Z&5�=2�,n�Ę=@���|��<b��Z�q�J���ѹ���4B)T����oP�m)������5��\�^8����N�0��y�ٜ�d���U��t+��*
�����x"{����&-7$�9���E���.`��!zs�W�n~.~A�vdc�v�^P2,G��C	Kka:�c@����ZmHR��@�F�ƀ
F���n�G�pΆ�]�y�]U�Z
�+
U�6��v�.���S-I�`�2��\k��\>��O�/��{Ӎ�_���}��=����B�0���.�=�1]^���NV�0΢�Haea�&�R�
9aa���?z��v�v�m�bE�Ԛ{��(TS[�^�C����y�A{<��ey}Ocy�eu5�v�bS���LO��E,^1��C-�����4�/!o�j�I�QM�>~�$Η��X[s�6~�қ��XT�>�U�v*w=]'��ݝ�DŽHHBM��u��;HQ�2uw�&��4�ߏR�U5䇇��qoRVku+sag�V�gZ���LVV�9��+M�2a�����9�TY�*7	�\��y�/�E����g��Og�l&��j�3+A�jwim=�V�U��&Qz1��4Zq9�Z�awp�s3˯���3Y�a/��,kI]1qWk�V0s_Y~G�粀8�2�+LE;;���*_�("�
/�B@�\@�B��$[�J[�*��d��XU2Q�RT֫�P�����,�RUM�
)+�]�����r�ݚ�BeU76m�	Y���erO'P!��ȡ���d2?�i3�Bأx:�����H��X��]�ztn�A����Mno�=M7�B�.���*r�����Vd�0a�s�%��Rd7�BeT!�-�nyш���n�g�o<vlI̞Do�c7��r�\{�|�!���#3�T9���
����Y�m�z�3��*!r�
As+h���+�-�R-� &"`ߒLK���(
����ǰ$����R�aS^Uʂi�y9��΄���5x]�.2�b�0y5�UfF��]4�#G�$K[;�aAR"&���擔a�W��]�)%��E!	�&x�t��Z݈�{���2�C����X��u��$�ʭo�~`"oV�)�C%I�A")̘=ح�����]X
�t�0��ߏ�ՍhWہw՗D>���k"�c6o��$����`��m4)&M��ę�M����3|B�n%��X���f��'��ه�C�'�P~�ؐ9����1��8By@��mu�
G�ƹ�A+�xM�g��-�`S#{���&� �4fh�B�k�G@1(U.��'}�K]�qU
tU�v��kx ���,}5�>e�V��Б��r�5����]��s˾sI{s��pxz���|D�a����g��h�w����i�I.��4J��z�z=������dH)4� K����A�'vqz^��t�j
��r.,���E�� �����"R��θ��KKd�<a�d�D}�(d�Bxfk���<X���mdVd��C?���u+�dX6s �a�h�^DG�I[�	`���Ӯ�U��7���.��l4���ȯOxvӘ��/�{��o��F_�*]�E�8a�n�}H(���X���,&U܀~��>иɤ���h
�tW#L�漢�O��C�ժY,1|��d_b�Ԏ0Y�
��n�	Wq8�Ŗ���.��h�'���{0�e�x	zUN_/���g/���k�bťw�NV�����R�…�Κ,~#�����x�Wk���p;f��#:�L�\�E��Y�b�
���K®�z����s�����Yk�����ؗe�C��ͥF�H4��}��5+�E/;�sW��:(�B���鷮%4����ҏ,Z��`��>?�	Ź'x��ِ�ӵ�
�^[�rCx�n�7�B
�9����)Ђ���*G8FR����"�d����w�k:F�j��;j�J|�!~�.&��2���&���q�S�e����D�|��n�h[������6zmz�!4g�_�Z>S���'�n��7]��>���L���p�y�{�B6E��v�e��q�K�6,Ȭ�=���ɲ)�Hh�;�����6(y�~�Lx��[Q����[RG�O�(�#<�ŝ{CD��(��
��]ߖJt߃M�||�Ē�J�qbP�&g�p���I8�\��ۚ��>���p���{ �A�?ׯ�Z�[���;<��W�n|ͭ���\�E
YJj��ե��h�=�B�5�r���P:=��������˫�_'���'�����J���V̗�#_�Y���
�/ﱯ����J�����ފ���{��U������6�pl���u�Z�$���b^��:n�m�m�i|����Q��Yuu�K�y�/�	��v���[��!P� �f+�M(�8>��A�	u�7x�I���V)�D�U�88񿐙ݽ7�#<�7�w[�L������S�`�O�{����8tzw�ϝ�в%U��{oM����R����Mn�0��:�T�t!�.�M�u\#5P8F��"�&�#�� �}i��E�tC�g�{o�/E���F���h��5Õ�
߿-~@�vdc�v�Q2,G��C	Kka��1�FUf�6$)�^D g#tc@�S	�	y��
��E8kÁ�+�<���a-���ؕ�����z�_����ɖ�~���b�5�v�.�?w��w��{Ӎ�_��ݶ���<��ꔅ2af���D�4�0?��R9�`8��6P�n:3�p �2l�	��%���?�n�l��v6VM���iE�����>�^��s���:/��xj˛���b����Pt�ų!������#�:Ho��e�xۉ/�L���!o�j.M����F�������XYo�F~���!�Y�_m�7�Ѣ1r�H�%9�^�˥!�����o
K���ͱ\�yso��s�ϊ��.3��@*��稯0c[�4�����Ue��
3�W��&/\��#��Vjñ<���9��ެ��
`2��D
�����{ȔH��@�vұ�Nղ�
�
�e��UH`����R�\4�5���3��y�e�"�5%v���I]�9i��9��[�g0�V�͘�`:<��]�~�Q����=b��[�҆v�d�,��(?NU+L�ݙ�`	�L�$?#@/��}��`0������/��ݮHe�z���s�q��G�9y�w(F�����BqiP/^�.�I�J��B��\�k.�+!WT6�FU.��@DR�1�k�0A'�k"*[-��{�NJ�ԟ�O�����������Hq���@�*�n,�"�	Z0�URu�cG��c�±�=�N�����bG�p��Us�ƍ5:&�]=�|�V��'%����С+�"7����ᓀ��t�?ldG�8^��;=%u8����_�C��QV�R����,�>jJOKm!i�+���9(�"��y#�\qn���b*�s��KP�$���'|;~�C]�ᨛ�
P
t��J:#��~�"Z�e�V�侵�u��{B༞Z�^=�σ8��s��-���^��6�T���`(����x�Ӣ��je�K��@,S[���e������\w�'Rt�y�y�,*x�q����Y�'Q��Bǩ�LoJ���Y����N�GjT׷��"g��a�����8ԸB�:=^����vJ��J��A2�$��>V_�x2g>%dM	k�C	��Ϝ���k���Eyh��[q/��B~��
9=���!�0��y�j
�jK��-��M�쉀߶�l�o���=M=��.>�GKpҪ>����D++�f9���.�|a�kmS��p�L7�	��9�%��q���;����="Uy��/����clJ�`x��J���=pC�ڒݻTn׭��P4�6m�J.þъ����6&����r_^�n�]c��L�4��(���n>�w6
Siٸ��tIs�~^�U�DM��\�Q�M�cʩ�n�f�6̃�9x�Q��\����
�����gO�QD��ܶ@sA�͆�|bŀ���%��������F�����'t�P;P��>ҙ���#�~�.^��=�KWF<�GT���F�x�	j�'�P,�t�0#?����3�NZ�ɾ�&OQ�kV ���o�~��/�{G��Y���΋�h8���n}_��[��O��|?��;�}�l�X�(h��G�Ԙ��)-��[�G�z�~Ξ�!��x$��ט�D�3�g@��+��+�0�t��g�@g��8�D�R^�X�l����饪)��Rq@��=�LM�m��Pe��%a���lN�e3V���wq�b3�z�C^�:�Kc�־G֔�b]O��|�e&
"���/OO�4�Z�b�1xJ�/��)*����Mo�0���O�A�2`��5�fA`H����DjeӐ��S줷~�O�ɗ�!�_�*�f+��G�p���o����ء���GTˑ
�P��9��x�QYclE���wZ�1����	�	y��
��C8��_��y�Y�Ü�8Z6c[X*�nV��~]�g��u�CF�@�sYS�3��C���~�&PQ�޶#�uu�m�77��:y�m�YɆ6�-�15/�O�N��a0��NFJ(c;ݙ@� ��l��6���G/{�Du�e��6saBԕ�Υ��+g��4Hw��n �9���(.�W�I���{�r���	c-�lɿ��!r�M#!'KƋ$�ʹ��t�����WgQr��6i���*��xy]�st:��r2���$��WKo7��W�/Y�X��%I�ب�4.l��"��K��(E
$W���wH�q���伿�o����3�������	����Uv%�����׬"��?����<��J~P�j%-����I�Z�5Ӗ33m�&�'x�w%X]�lŀ	�b�BQk���T�@���d�ʤ��?f�n����l
�J	Fd�o���$°�T*���4��N5#�^���R��>�߬�<�-��>}=;�VCA$:.-Ӥ����[n��O�ܐ\���0=�d޺�P�d4�ټ�rq�*}�Kr�S ��Y�4޵��E��"|�D�*�B�B,`��o�7�T\5ך���{W x~gPT.�����Iu�J�'�߹O+��O���
M޺����H*\%��ok������8�qն����yyd>sU����ٟ�6����K�,�Kf1�h�ow�3�j����o�yK7���;��l{i��F ���b&5C�vC0N����P�uy��F��e7Ի��|.�R_�O�X&�%�m�6@���1�x�P�
?`���	�Q��y�3�L�N�T�f��<�D��A��~u���t��K��0��@B�����+h*5f@c�߇����fTPb�x�oq�1>.��w��?@`�),7>h�.Do���D��Y�V�i0�P���dg��@�����MW�%��JoPBRp?�!Fl+^TPr�) `v�,/�]��&^	�zsa��8s3�~} ��Lp����lI4mc^[-bD�T<N�=~�=�)ü���>6DC�ؖ�?+�8�]�Q�j�;� ��+E=�����_V�#3��H;
Ƈ��e]٣�Rx6��E�y0اzngR��P?=8��i�4jY��bS0���O"���5�<���7)�:�3���֣�hN.[�gRx�����_�!��,[+�V��2`�.���,j�����b;? 	���)�7�]�iސ�,6��2�EC5�o.7)�͓T�Ύ,� ��]�+��j��Ů�e���;��旤��[�]�qB>��S���%A�5YT\P|�B���[��@i��4�ѓ��f�Lۤb�=e�鱀��^�=�s�j���Q�#7t���aqG%�70�?96�ܚXN��pU��:�>kϏ�'"=/"�f6=���7l�'B��%�S�|5X�����۳�
X=�����n��g��ȿ�
����N�0��}
���U�1�$�M�<@�xk ���E�ۓ�7$�D�b��%�H��h��c���w�P3\�+������Fؒ�t�u�a�qMΧ07�z=�/TiT�ڃ$�ЈȚ*�Σ�Ϊ��|�=��� �fÞ�-����ϲv�4�]�j�^W��z�L���KR�d��1��V��˗���W�$�NW���ج˷��{yF/J��4T=<�ㅇV�q�`���$:��S�j<3�� �Ҭ�
����	�H����u9K�"��1aE���h�>��bݴ�8���~�����"��lj�H�E��-�w2 �d4H&�,<�2H?|\��T6Sw6f�m�P���X�o9~�p_��ғ�������tQ�S�*�]�Z1kd{Ch���fl��ޅB)"�=�of�s+�~����`@��7$�JV�\
A��ec��d%}�R���v��[';��d��K���9{��*�e�p�&B�./�_��"F�lLLɈT�U�.+����W	bF$��7�PgNŴ��N�Q|Yɷ�W������]b�[��\K)����5����,�ʥf
,�����VkVd�����w�@�b1�����;�C��"�V����(y@���z��������o\���.8�O%��h� E+�1x�gu���aS'��v��(�&+^q]�ʂ��\H
�'�K���잁�a��ſ�����*�q�%M�5�����'|���<����u�R#�6P��x񯐋�4����O#���?AX{=x-w��o�8U�{��I7�M]������p�jS��
@-���J&oI��)3K�ץ�f����K����Oxz,f���J,���.zѤ�֦��Yf5wY�ګ�o�d�X7)ʼ�ϵp��M���ڼk2S��*�4�[+Yo�&�U�N��
Ve���7}�k�"U�XYUXv��ۥ���������xqmnfJ�����h]�&M9�W;'��S��%���� �A˟G��m�j���3l�;T�
��m9����p�b;W�d�����UT h:׺��N`Lj]S!�dAk#]޾�>/z�.-�_<�_|Eɂ�]vܔp0��8-pS֭_.�N��O�5n/�^]��`_A�����ecK�������4�g͚�����"���YôOT��B8�F����Eq���h���c�r
�G���ۥ�oɫ�<5���Y(��M��,�c��AsSk�g���A2�-�I�ؠ!F���V��xU��d\˩��q ��Ai�y/��0S�0lm���siV[C�d-0���y�q���ڄǥ6Ѧ��+��~�'TRM�Ƀ���L��%�1��QA3�)�Q��f/�gLjؿ�E�)`^b���v�m��t��v�Z�A�t�j�.�U���i-�v\�94q/�x�G&V�6
�b�r��r������|Jfkoo�n�YH��P��XGK�2���d�҈��'��P�$`n��0\65.KI¥�-�F���%��ϰp�tpnĢ`9�<h[ߐB�����0P�9|
�5�qɿ:R�ΌD۰�Ӂ~�lt"�G���M�,:&0��V�:��&	GNb=Y��H�3��"�e��Z4�~/BW��&�86>tMk��u�r�!������oI����ۊU���;��a������q,k��!�p���+��Y�p�V���V8j�i�Zwf���Խ���nÓ�Yy5n;f�o�J8���x����ۚ�+3՟�=�a<�m&g��Jܭ[��G�wba�&�8sG�����guJ����o�$��wU|ճ�c�i1g�a�����F��:=�cf����
5㳔�N�����q?t'�?��Q�S���k�>�~�
$G��p2�o��v� `I�TC������S��c,Y��'�S;Yd���ˮe]�ԍ��I?B��\��P�����;����f�)	���U�n�8}�W�:}��HJv��1��A7�"
j�ݔHKL(�@R��m�}���K�Y�����3��q](�mE4�zcdQ:8·����'���Pm*a����\6�Dc�T
�|FXaV�'Ѽ�r�*��j���
����j���(�ްD�t��i�n�ҕM�HL���^�ή�v�+ǪV�	��.��a�m��^����}�*`���5��N��ο�\��{��K�b
��"txf�f&l�Y��&"���&m��40Υ���������0�����v�Ǔq�*Eo��d��~$!�@V57�҈� Iz�-�_6�Do-�uL��?X�D����$��{�h�-��rT��V, 7�9At@�'i-d
��^)�]p�.��Q�$PڍDO����~9�l��Zh��R�x��L���R�v{8I=cҡ#��|�.L��6㴝9��$?�
::�g��j2m���Х0"I�q�GZ���C�9�G���νS���o��(;�I�2�9���~c��ƒ�<	[ǥ�K���콻��P�����0#+�Pr������.�R�_+����\��9�y]j�ȼ��A�/�l+�+�V���3�e!��ڲ}8#8�T�?o�۰��^�EE�q���_�>�F/���3�Y�3A��ﳃ��
o����D��-i�<�9i��/8�0N�#�*�&��qŤ�J�L ԳEӃ��	_�͍���B+$!՘���k�h��ǎJ�
�.�a�cAȗZV��	�O���_���]D�Ea���@�u��.�=�bbWEt�E��_���i�Pt��  _/�<�m�̐o&c�U\!oT���A��t�P�d�Q�v�vtM��ͨ-m;߽��V�����wh�G��%3�NA�m�;5k*�rMWep��M8`uM���n�q%̒�E�ɐ����?�qrw�����%*4��@FCj�pjU".��j�	��� `�� ��Vq�l-���ďŚ���O�ㅙ��'
�D�7�	��Z[Sܸ~��P8UH
3�>B�M��,UIH[����F'��d`6�o�n�| ��:T����V_��x�,>�bS�zvZ����N���dŔ$)'��%�0߄Z��/5��+�(��5eWk��-�Y�a�Z/����J1�Ӣؐ�h-	���a<7D�]��$����VDp౤D��h���@W	��Xa+�N%^$-j��H@�I�ܐ7p�&U-*Z+F%�~��$��~~�?�'Y8!DR�;���4X���%���U�Q��%%��-�B)QF�{[B�<Yt���8t�H��G]�Z5�� ��I;}����ɖ`� ����Vb8������]q٭�fuF.�`�@P��ꨶ�&�dR��!ʌ&/svM�"��x'C~��z��i���������
�O=�?��w�i�D����Af��(�?�=l�������%ɟ��g D�B|o�@U�֢�yϚ7L�E��y��B�`�g-�že�3���V�2��]���V+ة�|���cd�U-J��Q�2��`�і(�a����:��7���s�7���*<%A�Æ�p
�_�%��րoSr�f�.�5z%�[��d��h�|���6�;�D>���MրuL�*�� �kŅ��֪,�W����g�b�`0���F߶$�%B�P:�0/HX��:����eה����f�d�ҦP�Jm~��@Q~��i{Ʋ��ǰ�a4p�|���i��5���bJV��M�F�|As���e/��
kz��͸�@٬�Jm*J�?�h|���'����D4Z�9�����^9^�d�p]bw�
��F�a��/�#�{D`+c-�ap֓��ǃE5=�v�`lJ\��+��z4�K|"DAS��`�J8	BB'��9]�¯���@o��p���Jk��EN;�I�
Z�d�}�)�WRR!�ek�:�E�W�f�eT�8@[��p=�j"��Ԡ$x��l�v�dG7Q��tG�I���K;�E_�Uc[��j��4;(hzO�T�</�����T��TuC}8b��4ӽu::'��"���
|����0W`SC'��\4Wk"�4N�X�M��26V/g%��ɀb�Y�7E��iɲK<(�_���0���:�s��!�@5)�\
��8�������
9uc[Π�i.b�ZmF�#]���ֲz0S3��P�G82���a*U�3x��U,�*�猀0���r�7
�~P@�4����)���lڀVf̭�����5��
}%��+�\�	-�R\[�)Pcx��ȍ�C�هf��~#8��0��18�U;�b�]m���Øh��[�U��
KM�ϧOM��u���+��l�9���ϧ]�T��IK8�r��p��?曯O�o��ҭ�n�:���ç���l@m_� ��'�3�W_ek��O�ׅ�up��`���ɏ`{�T��������k�a���G����⸶�w3ܵg}ճ�jtvH���^	��,�;�iMܲv �v1ffvH!���v	%G�k�{�8��;� ��')OpR�xS`Sy����n"nI4���w��C�}���56t�*�,�t&Sz��i��U�T��Ҹ�x��
d>ئ��� ��@��V��]�.E�W	�ݧ��� }T+B_/���#�O��SG�p4����>|Ů�.,RY�Ж�3��h������*�����<�#�Q�R<nig8�_"��p���ٛ??��t��������޾]㏵<�B���l�j۶)�S���)I���/�l7D�/?�?\�EoU��X�P��qWX��W&�i��|NN9�4u3��f���!�e���i��1'z�d��j��'�[��Xj�a�洁���w[��=�,�f���v�KE�{���9���jv
=m�I_
/�{��Ö���h�R{�^�a�ghA#�d���b���^l�R�|�:b�#-����ڑk�rBo+�%�M��BI�뛔�h�E�
�5�rm� ���wy��q骛;�&8�芁;���Y�E�|#ʪ�I�Bm
jA��"t��b�ELͭs7y<��<d�b���B
p�}r�
�i�!";9��%+)�{w�.����w��͖p�9&x�+E���.�B������UU�bl�k�l�ś��l].�ެzD����_��z��1Zn�����s�_��zӿ/�/����љĄd誽ކk�d���#V�y�B>���s7��tK����a�/��+2h�k笁�G��B$�(��
`ͅ��7x��B��/D۷c��a�tP�(Z��e(�)�kX���b/�GK�Ҽ��B��)�N�#<y%�
_�I�=��!���H����k0�VO�1't���.v`ǢdlM裀���!�����|�ɧ��yH��fpe14���N�Cl�&�i�	�p�K_�9�D[���6�ZB��阀ez��(�4Pܞ�v��'f�Jl���R�^h�qj�e\��i8�Ě��m�h�뒌�aB~'X��C=���w�{"P��
H�Ȱ����'jO�G�+8�\e�i1w☇{꯭g��?<�5m�����x|xoɸ
h�%D۵t����r��.;萹h�ә'-ᐚ�o�˳�5a��Q��r���#<�O�)M����;���Q?�І�`�����BI��r�0:^Ȥ4!'y�Ҹ2�_n��#�	A�@���B- ���V��"�>&d����[Ko�@��+̩	l����"�C%ġ�R�8�"MBb��g^�;�^ۥ�8�;�3�o9b��@D�Z`��n�!�@4{H\�F�nF�>�d�~�q#���Z?��
��J
���W�h,-FOw��+M`���.�˦2��PD���AF^:h�BL.�GS�L�RC��j�c��8�x����v�!�O��
���ļ�#
��� ��e�q�q�Te-*�<kmR��U��%QG���>�j3�C<��6Epj&C��/�1�Ԛv�!0� i��'%Ě��B��S|vL<�����v]�dJ~���(o	f�趬���b�|����I�S��/�SO��b�Z�è��?I�VÙ+��\��]�;�ܗT�~�u�=$D?�x��1�O$�?�F�	
�*��O���_/�k�m>��W�S�БЦL>o΁7�IG���et0�>]�J��F���.�(w�r1��iߠI�F�@J���[!���~Dt�qm�/q-�)|a�qAFF��Ə�%L��Z9��#��ѱӥr|`5!Ff��W��e��U��5�
�R�M���=����e���e^۷��<���k��i6�0@�h <խ~z)�{�l�����O�b�u4c��u�4��Ԫ�,ec-��8��$���)��Wm1�!���ZT{`�^�͓t$����*oQLU���O� �Nz�F���pz�X���r�!7�#Bi�4�;�Cޤ��E�H���jE(
E5$�@)��
-�V�p����C���9�/�"��o��v}�\zH��n{c�
�k�4�Uޤ"z��:�/�2T��<�@,]���1�k�Ds��Ø;��_I�F�}���y�J�
���%pW�H�
�(��5�I,�䓤t�
A�T:(���h����*�1��!`�)�o�
t?�?%�#L���N@�H��3��G�/�}s��ӿ��U1����dܭR����r�m�IM�Z| ���q$�!�m�F�Ob
ۖ�
c�X���9�;xX��W	ZI��{2�G�):�o<���x�����r׍X\�cS���1��)��k�ap%CM��9� �|n`�m�`��r;˥����n#7잯p/k�]w� ��衛�^&��3�דf��{I��HI~&آ�d<#QI���	c�@�5tE�`?��:]���-7�M�6���!����Ll-rl�#�ô�
��#���k
v�f6�52�ۚJM�g��s�Z�z�bՒi�
P_pC�<��4�Wɖ�"KK�"x��ęSt(�)ڎ,E���*$ԝ���	\�ˤ�ۊ�KѺ�&�-ݔ�v4�|�8ăK���p�{���w�>p��rN�1�z{Pڐ�cU�LI�|�3b�Y'�&y�#$q��ơ��tU���ۚ.��q�^TR���p��'�`ރ,�Y1.�6�����@t_D�0_uj��t�g�O�{'�`D:M���+a�b:�H�h7�E3�(�<H�:�Ʉfi$�B%A�L�j��r�<$�21G݈��i�� $����B�lO�%G��C�p����������e�"��o�^����B���%N�^���X��a��Ї��SwnLqI�bG��l]6�T�Sܵ=��>�k�>2�����(u9��4�PI,�8%���7'#�dJ!R�+)�q���%k}����iX�����!{l�{�V���z(m�@��7���������4W6̭��\b��|/�Uuֽ��Q:�.z�
:�O��_�>oaY�m��W!�՗��o\��2�/H��r�&����43�����G��OO�O�������
'���_�j�wV���fhb�y�&|�R0`�%�x��z'y"�)��顡�3y��<�v�y���K݆U�h�T�S�(Ij����FT��7����N��a�Ma�s��G`�\��wh�鷳Q)j���x��H�.�~7<d��b��}�� �7vuo�5Xs�w[N��:�����'�����vl���uGN87���rIpy��$Y�$��f��֘�X�I�Jd��j|�+`z�H)���!�П\��D�^����-Zi�t��n=��"���/�>L�Hw�����.̗�Z�l|���s�)����Z�ϱw�Uq|���.��K���pVE�ְF�A1�-�&���!�Kh�;D�D�{�^��`�k��+R1��t��Jv(ş���p��@��?�ŋ�*��:,#W���@��:�*�e�sC~�b�e�a���UtVV%_w��:~���2��6����t.���͛�W��+Ox�ZsO9G�̵�w�ZjC�zoqh,�_R^�\��7 ��.���t���
=C���XK�'�0pnm�#��g�T��`���,��R�0	k~8�ή�E��27	’z�@松a�kM�b��h��"��5�쒺�Wk���4<d"��\}ӆ�o�ν�8����C]���,E�V�<�]�Ư���n�I�hC�������$ë���GG����O]�E�zOY5τ<�C
���/{��|̠�n_�޽X�3FL���2uLn�E}o����08��C��$��uKH�4V��N�7�h��Nn�f�@����K�WGLIL!�`�IS~��U��=/���ퟃ�ݾk����n�/ۢ+��W����N�0D�%'8$$.(�(��J�T4|�cok���
"���ܐ�b��Λ�<˲���.`��n�f���\_^�@�6d�=l<��d���ɇ���8�c@��*OjmHR����A�*蝊���,��voA0h��(��4��}�*�W��z����C,Img�2��k�m����O/��_��{��/��e]�����zq�B�0�b
��D��x�~4;�r�Aw,:)l�$��xf�@(eؐV�S�{/�!�f^/�,˪Rsk�BU�5�#~������s
��n��	�<��*I�b�6���қ�!x�\�3�5�ŧ!��{!c�{H�����fc�oY)Ez���X�n�6}�Wp���lg�^'h6ݶ�l��>E(����DA�����{��d])��M�$��Μ�����:?0�D犧���7}|��f�h�!薳]L2t��/$��2��	]2���@$ے�sV*P�C�b�C<a;���<	F���;FP�7�8H�h#e��NS����r����_��>��}��t�[�SF$A�H�#��[z[����/?�Y�Ȍ��<
�������ϫ�JqRa���~�|
�c�R���+J��H�wD��ϒ#� �TR�`��oK��N��n/WnV�1׽p�����2d�w<�(`X"�)�J�"���F�R�LI&)��4� �4���<���"��,����BԠE�$�!�HL�m�MBH(T�P*���s�;�2�V���k�hr���'4Ny&'h���|�yS��čyt������ȘM.��B*�'x�cW/LJ�a�Ux��u�\�\,����/�[����	j����*�r^�oL.��H�#P��h��r����k5�������3��-���Bn�oホ)�������T��S.t��E�$���}��C�q�
踘'f8h�5�B!/C�E��\e'��A��*KR�bɨgx�*�O[��*�2� ՠ�[h?��;-C�@����H�A�Z)T�g�A@�e��
��w�<�,�+�C�Ӷ�Z[ ��j�p�n��A[��d�����U�Յ�Rȯ�`�����F��c�0;W
x���5ٌy���$�XP�u�͊�y����Żx���7
�ب�J��},�Uw���Q�z��@���h=4�{��xJ���^,�G�dw���*�v�8�mU�Ъ����؟����l֎�C�����n����ć��:���ƴ�9�,M�]���!p_��V[h|�:��`'3��c���k���Gh��>��3u�&R�XX�@�| $N�aQՂ=������P��icK�k[&�e_��6�%��7#2�X�����(�x\��9���0�I-��H7�c�E��8��.�� Ё�*��0�p�k$Z���8���Q��q�P꧍k�߼��u��,��;��-�/:�/,�/;�/-��:��,��;��-�o:�o,�o;�o-��Y7;3�nO&�6�n��gO�>�u��P��.��´=tA����`���ﮫ�x���0$ɟ}����<�q�3�h�����>��
eT����>�t[G(�]�Rؓ%*{-�/��,Iբ��-xV}��j��\J7���:�}}�(gbn��gk�406��4�Ͷ}�oY���>��J��]=b�0���W� B�ʢ�}7=A}�J^j'��&���
����j����ki_��F휴��&�
g����[�܆4
5�o*��n�=k���ϊs��Ymo�6��_1��f���m�/�7H���-P�M�CP��2���D�H��E��
_d˖l)����șgf�Ie���{לŘI�nE�-�b���ތ�o�a�p'�6��
�c7�Z�B�s0�
�X�0zK&!	BnAd|B)1�2KF�O����ن��Y,��'A�[��S�22�����C�Q�v+i�Q!HT �Z��٨���|���$`,2U��T�B������?}~��o5	��h���
>����1�Yq`�;��ȐK��22�J@�A�$L1��>�U�/�0S=���yx��:�WӥJ9}c�\M9˞h!��KsQ�,����P�
�<o��Gs7��Bd������V��jf�cъ%(A2�1�í��PZx�����YD3�؀��k��0\!9�M���p(�E����>HD,�b�\������;�ʋמ&�2��4����ej�G��^�9z��j�:��1nB�C)Q��ulr�J�=ǔ�dpLR�
� 
�"r�'}�lؾ�yͦ� �D�9VWI�%�(��܇�$�הr��(� A����2@xķb������ʘeT�S��_����R4�yI��4�s��#)Z�bh�6f CLv4R��C��܇�Y�؁�lf~Oc���P�SqefhN!i�
��q�r��M®1ڭ��"�}����4�z5�7�<լq?���H�Ep��48���C/��?Uog�`����仁�jՂ�P`�r�ȴo&r�PG�*����,Q�	�G�|s	� �j	[�{7pyC��N}���u�j��X��h;���J��Fv�NR�H�iH}Cuxk�FR�a�K�7:U��46��(�^r����6ma�sFUH�T�T�ZN�"e?�f�]k���e�&OerǑ�2���iA�x�ƈyp���>�.����s*J��5m>	ȥ(�6ySm��H��+YVV�4����"�!���5S��6����0K(�S�E3��G��k��IZH-�fC7��]����D���X�J�_�N�Q����3��<o�ǕDž��\8]9t����f�4�2��|��[�o}�X��������E!�>� T�z׹�2��Q�k�A��C�>zx�;"�l���.��T�����dI��o�k+t��V���Rd_Y��Hti�u��u�]�v��3m�Ȯ3�@';Wj�h".���*>�h�VM;�w�[g����N
�?��D��	b��/tVJ|��
��n�K#�/Ӭ���5�#�u�u����6'�z�`�|���ОN?z�K[WSS[�vh���<�:�
G�3�7]�i¾�����M�ηM�o�t�6u�v�|���K��]:?4u~�����c��xԲ�N�q�ָS�%�-���$����N�6�WAZ*��ׁ��O��T�~nE�xgO�'1��}̒���u}P:�V0*�n�Ґ��2������X[7g��>Գx�؇��8w�Ӱ�/Vz��<�ѩ��|X�j��u��̽���?$��޻�,���R�-;H�T1鹞9a`N������ZT5Gί���@����q�](���œ�δ�z�مj䱅���.��P�)uy֍չ��8z@�-&W�}O�z��g�Z}>�#�׊n�����U��̜������M��f�q��޹��V�y���+����=��3ծF��
�-L	:�����H$���8��2m�J'~p��=1�:y�9�j��r��?@%2�<f���i��łe�.�F5�V���0gLvD�u#��ژ5ӧi=b��s�*j�N�6{,�I��d�Q�X�V����y�}�4�oT�%�#���V�o�0����Zi��n_SE��uR�����4e�k��m�6���@�P�uj�J?�{�|w�Z&e�ʿ��?���	%�W"��7ٿϕ�Q��߂�NO�g8��5B�R�Cϖ��Bc�m�,���*��<��A�fa�S���~��}��VU���q
7F�,n_�&O�M�����	�Ȍ�Ѡs��J �/-�%i4�k��'r�"9���z`+yi�e��(e��E��V��d��j7���ڳ���7&Rӭ��n�J��dd�V$	��ǖ+��c��T� �53��08n�{�-���?��K9��;_Ѱ�h�EJ[���q��b�2�~�	��7��Z��8��N�^]�S.5*2���G��EΉxN~%��K�7�Ek���(�*��H��bͲ�O��qV�h������`�����/���ŷ����}��Pp��*���k���� g�h�A�	�yA��Dߛz���(B��m�Y}2�e�&m�2�a��ܲww�8�G/��DDsD�k��K��*��U+�������"����7B�� 7�]W펨Ai����N����@"����EH�cf�$�h��˴>��4A�0�	q�	�8�{��4��������@�aTL��i.�{
�v����*5����1{p�����a��V���4�G[�pY~��q�`���m`y����A�5�j�"5DE�m0��	�ۉ�Ӂ�_1Α��t��7�wT���Gk$�?�{z�����qNj�p)�R��LЮ���ä��Ӧ�O�Vp�&
����/��c�(�'�+�l�ر�bd֡~��1���(��Ì�0ͷu���=�
��W[o�6~ׯ8s_b���n{q/׶�4��
CQL�D[l)Q%)�Z��sHI��z��E��;�L���L�������XgN�!<����a�q�S�ι�;�>���ye3�M�R��7���z��(Xd�@�R9�A��%����"E1E^̯��Zrht�J�W`2k��x\z��ZجZFB������_Gvk2+Qy)��`����rj�Ox�n���Q��*���'��onoo.�-Zї�T/ð��Rkt�(�v�(*�0(�@c �4*0�ҝ�VKSa�*����6�k�
����׷oXΦ��%>9KgS)�O�<��T� �|u:��VP'�����X�VE�s�voOf[I�
%�Ue]�B�)�.v4�K�s�DC�/\Ԑ���m���HC80x�S��b�GAp�e�
���X���$�N]��e:*��`6w�f;~�%�$��9��sԲuKL$3�t�끗�o��x}	dJ*cU��_��Ks�N@�qʜ����7)�Ej�}��^��i���Cv�Hd����1E�C�M
vE��e{FSm�`>!z�x���k�f��)
�)y"Vu�m�c�6�jWټ�j��˳��q:@g�C@���j�5e�҆�����7[$}��S���Y?#
AкI���ݸ����Y�K���Qx�e�t^"a�@����^U2
���mO�S��0�9�0��]	�;l��h�g����6�����w���6Ϻ�C_�m�,�'׺�a�Q�&��a��\A�ҕ���'��ċ;ta�9�߅��'���%�Ah6�}"�bgא+����{���a��{��С+���|�)���U_�/��O�vB���Ƹu]q5"<3� \l)y��M����L���� �a8����#�)�N���
 v���ںO�Ǒ|8�g��"V��T6����JFp��^JuoHV�<�n��؈����$A�c��2�Y��遃�oQ*4������k��g�`�M3�wɕ"3(|pȗ\[A��.�j�Y1�.��kx�+n-J�tr��a��{8v
�^��Q�ob�`��u���|�#�#�������8�	�3�)C���XVB�0QRib{�'p���cO*M}�S�}K}�;Asw>*������VU	74Ү4��v��gT$pP)�6�P2U�K����F�n0c�x-UZϦ)N�\����n��
����09g���N�I���3��Y�7&�?�L���︁[��?;�R�hNh`�٠���r7a2dR��$i*��:�ɷ�A��N��1kБ�k�S�,+�L�z�v���v�9����Ȼxu��}��������":q٣�u�;��e_�~%�Y˷V����>�<�
_|>��n������
��Ymo�F��_15p��ʔ�w���n�v��w�!(╸��&�*���s���}!����^>��Ҿ����33��gώ���-%ݫR�j�#�S�^ܓ�d.��D�鍡���P�)�sUH��R��7�.�6��UKQ�*�0�^�y�X6�k n�,u��4�4[�,-eAz����r%t]g�Ze�1�(-�dRe*U�*R�$����7�����ǚ�RT��R4��Z�(iH�eIU)RU)]��Q��*+Z�b�T3C�z���jA��U�H赥h�Z������
K��Ȕ���[;[J�����*R���ö(�p�L�Zh�ֈb���LZ=o5&d�m&�P�Z	�䙉�U��LG�W�K�O��<$+P*�J�XwWD�O�!�y�7"������c2`pq���۝؋���Lo�����,�J��b��J�����Ǵ�8>;��J����.��eO�}�g��AO3O`�u�K�ow������_���{9�k��H�wKe s���+
��ooX�����	7�i>�1����a	ѝ��%&x���9�UK��֘*CH�(�c�'
#d������t�:��\VK�zo֐�*�	���IX�Z�p�V��I�L��p�0*Ŗ‘	�to��v	}�P��}3plv
y�F�rD��('�юo����t*s��\�9.?$�*�@�b�O��6�e��x�K��'��GV63�A��`td'W�^IhFbѣ";Ԧ�9�<d6GmV��'^�D��V����6�bԌ�)0 ���WKQ,d:��F���f!��+�Vi-2+NB7�����嵩z�o5jWV��+�M�Oe�ʺY��_}\�[�	FYK�/���*K�gg��T8?dZə�+ 2�
��L$ƨ�&GW��P*g�d���ʑ�w�OUqZV�=�
��U��v�͛����r��\��(f�%��#�:�>�=�>��%g,Ħ�V�g�uq��!Q�׬��	�^W���w?���U)�C���(�%A���*�V�G��Ʊ��%v-��֙Ŏ��"3�߲z5հ.��[mm�jk��:�"y��8��Ra�Y"A�����W+MKP���I�dW'������m�]�C��*r�M�%ua]ex�PE0�{`��*P�4�h����ѱxw��An'T�Y6
��˓ӆ+�+fˏ��E&(�V�؂��Ѕt�4�}F��v�q�Ah��ø�9��@g}�i���
�R]��%x��@���8�,d��3Ѡ����i��]���+��33�!�@�f�>IPM�Idz�Ӯ���
&�-Λx��'�w�$��b������Ce�S�e[�#a!-�r4
�����"՛�����
)u�J���(#{[���l�g���N����ܗ�M9��\�N��U��Ҩ�3 e%
������U��&��si'��S��^UY�ۡ�}>���=*�g8���z���"Pg���C�=%O�"�|���K+oG���9��>WLQS(5(�DN�˞��p�
��e� VږKC�ت�ɮ〢�^c��2$;��F��M6ִ�KvLnS=�n7�B��w�8m������W�\1�c��+lY�g�@�~T�[�1u��/�6����
´��E)�>��o�D�e�����!��@�$Cm�Q�*�x�T"�G� �2
���M�Hu�&��~���� ޓ8��JĔd�Fv�v�\��wg�D;�����g|:�d�f1'���S��q��bkA���~���Q�/5�+�5>��@`�9��.ܝ/�t8`
��FZ��`�[��x����R�6����x�b7���zk\n�B���U7��,E]�߱�Ɖn_T����A��m�w2 M��j&̓��E����aYԌ���!ؼ�ҁ�w��J�Ue�5����x��>%�=���%�F��m�_�FV�v5���8/�f�m��>3T_����=��=�:�<�Ԧ}�|��/��g߮]b��,�F[ղ�K����$6A�ro7�tp��kB6�8�\lѰۥ R:�R���pNNz$���m{VL�?�G�D��A�	&�"AOh�ֽ8�PL�갪s��@BR �ܡ���@�Mr�������7�]u�I7/��6�y�����S�FT6|�W:_�l�-w?�S�
�����G=	:@q��/�������;xCM��3����k������GWD�U&�C�4�&(AL�0j����-f�=�*v��D��e�Ȉ�;&�6O
x=�!��S� ���%N��3�J����{�kG�_(8��$z�i&�����Z�r9�$}��*u�������	-�n�r9�[w�eo�G-=��߷���
'�p��<�́Sm��j��Iْ*�����Sc$�Duqh����C��Bq��]o�[-��-4�O+�Y6�S�/����z�a�����v��c��Fޮ��/9��u�Gj��f�k>��E/�EQ���o���NS�#GÛ����_ؗ:�:U���Z"c�{(���\ŗ�;#?��k~_A�fBU��*�}C�)7;n
_����z���S��/��j9�K;��u9c���-�w�oC���z�=���*2o#ˈ��S5k����gc[´GK�/q��}�ɨ�S]�ܔ�0^���`YU��x��l�͗�.�gggc��B��#�Vr��^�^-��Q��gtF|g�?����Ktf̝�����T Þ�ke&ķ���?'4����ܽ[N��ٟ�˥�6�J)VeG�\���U]��]�x_@�Ӎ�>��*Ea��ab���������[�b2�|��N�r�,1{u:
ڏ:���pA�Luɏ5�[.�ٖ�U��"7�j�Q
s��a��}��<^�{�ݛa:/���	��3�=mt��,5����<mVNk����_����!k~�U&
Ȫ"�C{��ڗ�).�"d%��*�n�Z�6W��S�ȺG��譧�O]=�Y�E��6�(����rd�擮\��H����u["����N�0E���yY�"	<��S�(��UB���{�OdO�{����l��<s��O�D7FK��%u��u�p&������
–�Т������r>��10�{p�ѽ�J���$)�V@�P!��V���<�
{
� ��_�u�hZkn�*Ք=����n��;G�-Img�<2��lk��N.���O�o��,;]��+��qS>�o��#z9f���Y!�j�{�:,/<t�Mbc*t��C��x�|_Mw&�R�5Ya`�=�_;a�w�E�ڔ��$)�[N�ȍ���#�u�ێ��8�_�iz}DZ��~юl�"���8�٬X���K�;�d���:$� �ou�����/>.�ln�<�M|�zl����[{s۸�?�w�VR"�N��i�89EvbM��D��������$T���˹���x�H��]<�-���]nϋt�s��;��Bn�$��9$)���4�WdL��Y�����]~�~��)��F�|<�&���K���uv;%������h�����;��{��/���翐W���v�����㫋�O���jp��lK~�3N�GG�gW��Yk�|-o[n�����Oã�	�OO���N��s�xt<�p<���ώ��CH�-]]��g"^'L��q�-�w �"����?��]���?=F�Բ�nY?[��M9H�V҄�}����p�Z��I."X�A��}��ƅ	�I1��gX���	,�}ꦜ/�O��NcvDs��-@�B���kBo(�q��x��Kɋ�^�<�z|N��=���.�)�q���%� `���
��1�_���<�'-.E��,ou�ӥK&s�`�LT0�'��SB��k2iNy��k�s�d$b9��~�+��tMx��4�1ќ�F`�2�9+)��dIh���o��n��C��(�L9N=Gf�|RX���+_/�>�#f��[��Хhn)�
W��4���c�Y�f *21�S��Z,f	�B�L�80i���߰t��MFh
�\��]���C=��7�Na���ݖ�,�R�j4�s��A��|x���s�s7M�@=�lؑ�pb����O4Y�����X$AH0���H��;�n�+)`x��˜�*ˊд�!�_/r���N�`4�ֻ.�+�N&�E��僗.��_�#����<Ł�߀��cv���!3́�b��~�����.�	��֐���
Po(
�n��1�醎�4�X�T�9�l,�9�tZ�0Ei��S��7L�z�p����׏R1].�&����cc[ڳ��.�g:�B�N1O9<U�Q���̌aH�ٍrT���S 3ؐ��3�3!H�\r.fE�(��� `�ז
�j6R���$ˊ8G�n�.�8�lX
�Q2����-G8�4"V�VԚ&G����=V���$�|d���3j;���!��B����t	D�	�9� ʤB��AQf37;��FK�@�|����|ٰ�٢6�+#0)=�,��v���M�Dq�����u�a�-���Qϻ!^ؙ��[�ef�1�L<b�ȃB^��
�OjRy��?�~1/��C.�d.E���l�G�R�d�2ʛ��O���9���L$��+2���"�*�@�)d
c�5�\���(T���~f��#h�C�v��2�s&��3����
�*6�88}]�RhmtC��y���B=
�q�,���T��s[YI7����+�����*,zb|��BE�)dB
i��(��N�}��γ�F�
����ɔ�
[��n'�9�6b���`�JP�ӧ:Jc��s!(ZW&�H�̷H�+���&[ ���кR~i�n[G���V׍W��Z}�	]Ү��{��k�U[�gL%}7�VGW�n���m�XW<��R�vh��e�Wm{��I#GӼ-�a��)�o�Eh�<f�N��,�T�
�D\2?�?%D���DƯ���H
�����@�^fR��#�
(lQ����])�`�@���%4�;�޶o���0y���(��u!�Tv%P�O�Y�外􅉛
d�P���FϪg� !�7+�q��V�X.�4:�,�q��$�fd��ۉ�e�:s����
oհQ_�j�+UaJ�VtW�|e�Wd�ܰHa�; ���~*�aK%k�ZNJ��T�K��d��fSf�k���i6_����
�.���ydY��c��q;�M)�4�|R��$���qb��&��yFPa�Н��=�BB�}�P��5��nu��j)dn���)dt\\+7=��S�����{��^�	�Dh"*vFe9j��%�"&?b:%_^�C���y�������HS�cc���6թ�n[|;R�&�x�u7���Ԍ���¥��\fx��J?}��ʈ���	�z|���4�
��e�4n�f�og�t/m�-Q��͹���I���vy���Q]�E�<	��"��J��Ԇ�<e�!:�o����q�P�@���E������ddML��B���mu3O&�j�Zt�~3�K�LIm��<o�?��Q��N���Kn*����y$�*��D��(�q)A=9F%�T,�-}�0q�p�t�yDf�m���u�"3KP5��������|�1��l�'Pu鬼�VG�Bzj��b�O�ߓUT�'������fvT�ө�ӵ(���v3���B|��O ��$���vp�j��1�}I3]��=uRY��0�YL�.���U�uFv,���I����������VW}����u�B��W=;sR9;���2;�Q�׺�C
u���k;����AлnŤ�$z`;���pP¢g+�t'_�W�*�l��
�	��i���P��T9Kv���F���W�h�\��#?+Ӎ���u���<�2zkF5H�`�+���3��C�hd���4��+H��
]ֿ»&@�6ulR7�b�(��g�̧����1�w����������SG�n��J� 6gM�A�V�1���U+�/)�j�
|��S�=����sw�|ż�&Κ�~)�b���c1x:�30�v�@jQ�bT�4_�`�^7$�S�hf�k� p\b�!Q�p��yVa�Aû΁:�џ&��w�"6��Tꨘz�&�\Z2!7��<  !��~ӗH��3Z��m=E�:4� �ןd~^i�/�@k�\q�K��)պ���R)�o����m�	�pOn�T�i�u���f�t���M���a�x�t5�{��m�n?%b�gJq�vU"+C���Z�֖��EN}� �ޤX��(��D��z3[�3|#��\5�FlN��Pu�=6���c̨�������P�}
��W2q�b��-�V�V�X��+�CQ�����t�S%�~���eV�q�>�=�ij����(1GzP:d����l^�hG�ǵ�oA�i���;�g��!��';�ɷ������d�H���yt��f��v�\}a1�ҙ��>6"�� �e�����=b�P���.a
���ߝT�~f����
S(��=�"����Uȼ��-C;6�2T��e�g;��y�wwɉj�#���9��uY��O�W��o��7S^�ݬ�04+7��c�^6���u�PZF�:�u{b��̍<�u�3���9�ӿ-�SsP��i�A�3貖�5p7P��򆐝�A��-�0�Y���iS%�Riw�� �./�}�����`#}>P]fYu���>�x�|�Ul��:g�*#�D�Ӯϧ�蹡(R�6c<�15���&��=d� ��V:[J;���j�\�v����n;���F�}R�	g$@�O�Ca�R&�-uP۲]f�#u0�����NW��Ux�y�ޏ4��4��X�u����D�ڭ��3m�Lu=J����rLJ�^����a/}̉QĢ�ޔͅd�����4e3�eT��J��=��X	II�k��kD�	2�u
�-�f�g���*U����2+ֈ�'�"�zTյ��%��͞0�p��_s}��^cZ�Lݣ�;�e3(�5�Uyi]^��8���T��n:�Vl����#��!�D{MZ��N��Q�u�I���i	Z�"��5�R]�w��	5e��8�.��֭jT9Lo�g�KX�ʍ֢ �:�	�4��eDsT8-�d��TH��n��l�?���siH�K�Tr���4��!�2*.I� `�U�50w%G8�cX(š�z������\mo�6��_�[-7��~M�[_�2$� h���ڒ'�M��}w�#e�[�OM-�<���s��)��cq�;e�&���v�%8��r��
XuW7��ƥS�6�������0���c��ޞO�~������|&\��W�U�cV��A=�RlB��!*�]S�*���
�����TE�2����y8�f=���=��/���'I���uy��l�{9�:��M[�>�f�M.T��CN�D�,y R��(�9�8Avſ3+���r�6+Q���,<σv���2Z��uj��ӭ���_5�����D��=�e������:Ң�P�X<�2��)�{�A0m����B�r*Ҥ�@��ot���Gw��/���
�eM�%�N�T� l����e�9�|8�e2<|�s�cV�-���+�c����˞�Xj%�h��{�*�׮+sؖ�~p�[7~	�Pq'�Y�C�ۦu%z1�,��dkVEm�\=T��\v��X/>����R�_��^�^92�$�9�ͨz����D����<x2��J��J��+���FH
�G�O�
Fl����B��`��B�N/�a������{�?�޵��b�T�����?�]��\�9�!�І��#�=U�\�]Y���	\n���Ʊ���h���5����6�?��C��W����W���m21$7�5��2�hv���
�E�T��U#j�-�Ն3'sd
�}�΄���՟�p1B���hFԈ'S��b/��K���TY��e����~��;����^�C�)e�TC!ׅ$4�1bb�����s���ł�����H��N�H��I%25#��"�l�����u�N7���þ��F��h��M�`z!�5�o�Nv�+���J‹�q0�[�v���R��H�j���7jr�FQ4z8(JnP�
lڞ/��9!�rT���)����;G��jJgrLfm{�T7�����C��h�˳�Va��Vײ��n�|��ޭC���Stw�m���<GgT�iTo���37F?}�!_�3tVe
��ctʮ�jJ��0�����]x8�Y4���6tHw�:��f�����#=�q�S-�l�郧;]���.�fm��M�Q1���\k�N�z��+8���Ox�0�z�9�:@�}eJ$�
"�y���:���O2.��8�҄d@�'��-�5l�tU�, ����P�¢�P���G�uտi��QV�g�D%�Hh���(�rз�@1K=� r�E�\����S�z|�?yK����g�`s�Ҩ���X�,����n���j������
����J�@U��SH���I��*:��\���}!\���#�0��m���k#ۿUYq�f��ȷ�Ry�r����
��>���`�P%�W�*�k�$:Q?�˟a�RD���/=��Mw��0��;��D�mLy��dg!JC��k'X�.忦�,g<-!��<����vCw�3�2�sHZ.V����O���.f;�����\KOA�+�S�-l��	�B#��C�P��n��%)-�{�̎=3�Y!� %3�����l����A7U*|����EX;(0�������ֽá��q�`oHX�@Iz,�X����)��斅�V�Z)����(��jS�S�-U�+��|�*��g4"A��ߜm���RX=%e������eA��3��2P���D2%�	��0=<��s��e|A�����{F���m䃆ĕ����4%�23Nm�,��D@�	_
C��]�N����j�gġ�7�CZҰ���4� i�cr�x.��U�%vQ����EdX���H�4/�=�!�B�(%j�{�=X��2���}���0@�_T� 5��d��X��y�xau���&����|L�5�])�+(zX;�Ws�A�4/2�k
u!Dj�+����7�}06HDg�;���M����L�w�!�a�]S�-�cp�$���%�g�|2�ٳ&R/�8�?�:����
xR,���XCMܠ.��x'U�9��e1�Ĝh�rt�"�UEz+��!�L4�TE����m:vI�TaH~�����W̳m"6���n��A
�����V@�ͩIS"_	����3&BZ��ޗ�Q������gF<?7��6��Z����2Ļ�B�{l�R�����.c�����n�F���`cx��U[�v\(8�m�.^�j���e��)x�řv�{]���p�:�BX69��-!�/[�!,i�j�ֈ�T����Cִ�k�S	��|���!OĐ�ޭ��M��l��%Cz�xTw/���k7ϻ;i^�=-�mc�d���<|�Ɉ�ܤ�,�n+		T'k7da��䍓�2SZ����<��0
�۪P��n�<8u��)X��ؑ=\X"1����D~�A-+�6�Z���췋�6����(T��j:����S��A�lB��,SF( ����
��ct}�҈�^�^3z��7_)���֓Y
�"����)�b�de5aE����3R�%DA=�'�Uz�ތ�7��)���[/�O/�n�ѷ��ģ�˹���XE��J=8�ˡ�:rs���6 +f]�����qs�J�����L���\=o� �+<Tr*Q�]��[�n�Х��!C%KD��TU���ށ�'J�8��}��T�W�Uxe�\��
˳v8T/�.LL-�L���CZ|j]NK�Ʃ��C؟m�
;���'���v\��:L��o`;��$<�m�$ހ�Am��x���c�
S����YC~2�@�o��l!Y���|��@�\��Fsn-p1N�,v`�I������P�BJj�2�=F�M��'p��]�
��
!C�]��)%9ϭ}��q��7�m��3����X�W�G-%d�F0"z�L<A�Ie!ME�B>U,#��OK�N����R���U�?V*	��Dwh�WL��v�~�m���>�t��yН1��O� ~�Hi_�lj��^��V�>,;P�&Q�EM�)|�';?~�wC�iз8-�*T��?���]KO9��W4�Jӳ3t R�d�8�ÊQ"e)
4A�03��}]�Uv��!hw�d�v�Q���WU֯�_�řF�\��_�;��5��`9�����uЂC�[i���w�EL�"��О��	-ϾG�O��E��~J��2�Wfs/x����>��7���>�BHw�cۀ��	0a2����B�Q�(L��,�14�v$�dH.�G
�<(�@q��O�c��Sw6�=��E=ҳ�T��λ���HU.�V��w;秊���&A5�{?�4�!*�,p�j�q�ROXB]
b��N�*���ߢ��,#���A�o��/z�W�m�i9J��CeQ�b������\�ś��HT�f)[�����_�=2���#�O�A�-�����U�~D��B"�uN�P���Z^:�0½����T8�
ӻo�~;bk8Ǔ���J�=�06?mL�Q^�mn��8��%���9�Z)�����u.��)�G�5�~�}��fw�~O{̈́6��������]ԣF�ܰɟP6NE^Ŏ�*�,f�G��H"Ӏ7���L��}	1��(u�g��(1��U`��t�$�Z�Ф�[�αP�e�U�f�.*��I�K�_�h��s/swd��e��A���=��&�$O���:I�Ao�ZI�{8n&V�-3��6�eT��}���2�@���˴r���v�}����ww~� ������Q�]\N�N��~��_�H����1�W+�04�c���� �D�QGֵe�+?=Khy�U�t�&��[���=«	�����-J£Ȩ�z��~�i;�b�au��8��s*x�4ԌGYb�� �q�Gy��e���J���h�\���E|��J$2)�tq��I�BgL`D�F;�qJ�پ~&I���ΤMI�%q��?�5���T~j�|VP��˷��!�����?�T<?cհD�t#�ݑ"0��q��%5��:�9��:��w_1-[@���r!�ݖ��0�m+c�!a|���8�H��!2a�|�yʭ�w֫
���:�e��0������t̔G����GJ1���+��`�y�h9�FǾ�T�`Y)��O�tgF�{'j�N�[v��4�>d�� �P� ���4K�A�k*�ѻy	��=�T���M����vè�h���d���Է���GlZ��Jo�r�ꐌ0y+"O䩥0}�b -Y��v�WJfXJ!�k�}s��	�0(�M޵��m �;<D���/]H�纯�y�d
AIX�Z��˛�O�}0��l2���[����g�+�)̖���vm�CV�Szs9e}yׄ��F̬��m�K-�h����^p`�Y�o��h4ƶ9D!��N\l�l"Ti+I0���$b�Zv��10+M��l�e�Z^�F/m�g8gwc{>H����ٙS)��x��x�}�a��Pu7�J.�?���c�����D�J��^���W��k3ިWD
M3i�j���Ҭ6��|>ǧvyHR0��"�(�أ��RE��Ȩ�$�毨o�_w�t(F]�(��h8y����^�k*5[%����b�\o�׺�ϻ�J���N������Nj[u�n�y��h%>A(��b���r0N?ĥ�V^-��h��9z|�w����ҕe�N����/Lss���zb:S�Yl2�zURq�������[�.�n
~���co��5�KS�T��]�gFf�	��{Ջή�Ə��ܷ���񳼠��@����-_�\��α�
���)onNI7����N�����٦��7�ÚiAϩu �n(_V��`I�~�4���
N۫���h��B\�D�m�E	6�Q�
���a�|�>�M�{V	ԫ�Wբ�^�W�!���)��'�b�ڪ��P��8��R%��FM�a��@��j`���W���h����!�+�s�:�b`��4�8י��h:*P4Ԁ������¾�r+z�dC�<]C\ǽ@V�%��V��h�F�@
�J8~[��:��W�k�!�~����5�}yT'V"*M,e:��8k"�J�"�J[,k�H�M�i�4��9,�h�|���]��0�=�	����;	F�L$����H����-��k��
}>+/r5熑�*4����ܸ����K��4"�Y*��`��C}膖����g�]�)�����,�5�[�IU7�)(�{�m����,��}�>.UN��|G�Z�c���^A%V=��4���ǂ�e|D�T�5	�Nݲ.����*a2�l�$�)�>
���P����m�-�e�K��Q�b����++㗺=��Y�솑&�X�IW1KB�ڑ����S�m.qHPCʍ�㻿Ap���R�rv^�j��
�$i��?��q����]MO1�+܀@z���AH�������KH�����kg���ԓ�~��ҝ�yO5���iH�l�p.Wt�]�X?�.t�yg}yA��t�Z�/��j1yN����#�`��-�㡞6.wTp���8)W�x�,NL�#a}�=�g�I%��Y��aD��澚��>CU��=1�F�uX��|���F���� �[ՃT��SBs*�|�J���&���ؘ��}�Qo
�B2?�c���T��0���P�;�x͂�%ƥ��$�?�Cw"IЖU�݌tɐ��+���"`�	����Vc����� �c0Wd�}����)A#���N�Z\V����碐����!�̤��������}�oƪ
�\f�3�vx��cZ{i�b5����(6��Ɠ)�n�)��e�C�\��k�@�\
�p`�JvݭE�T�f���3��Wn����
UsEw��}���b��8��|��o�#.��\����U��{r+l9?F0%�pW�c׏�*���T��LJ�n�
��8��ʆ�7�u�k!��5?���D�^N�1����O��LTH<�h�P��wڙ����,�Gap�����F�n�
��=�ݦ{Gw0,�m�:��Z�Sl�6z��v��@�#�Cf�&G@$oηIN|M�{���N�c�Ug���>J����᫒i�@EX����d�4}�&�׽6���]d�}�4Q�Rˣx!�T�x]�$�a�i0���PY�.nAZ��E�4�Kj8_X���F΄M%L��RA$�
���:FS�4��aS?�[/`|��غt�܉g�s�m���-�븁u
�v*�;��k�k	!�
B���M�TH�*�M:%�)XY���(HCv,xKȴLO#��#�E,��L4�1
�;8;r9�cа
ׁn�SHI-R�Ĕ��b�$�HHNf
P��u���hD��3]����O	s��4�ÿ�9��V�+!�E1Ŀ9�k7�0�����s���nN�u)H�	4k`����]KOI�� ����V ���KV�%�J�
6�`�/yƱ����]U���~L�M�7�T����`v���精�n�o��"�%:���L��X:�e���}�F$Y������c�>�6�,�0N
@��;��&�Ȥ�P�H�v��;.��|�_���#佲S�vB�e�E��G�N�٠�+���Ȥ��>�eQ�I����R (P�
|���'X���S�<^c��YX c�O|�Mm�^�U%���tb�����>��Z]�5��NF���/<S[ȏ�^_������L��X���{������+'�VK�g?=c�]p��3��8��FKJ�ܣKG��U'\H-=�"�9�N��k�����x �?9���TC��-M
љO�NT��w��/�x2U�U���_H�Y�<Jp%�.}�U��uZ
��/�=ް��N"��t
S,�Fr{�1G�#*-,1�r�bup���;U�yr�F&m;&�#�[yH���7��o|�^�����Z��ǂ@�)�E-`�m&����Rch>]B�vw�q��˹IFMp�j=��]��yΙE4�
����b�Ki�<,od�R��p��
�����zt�&ч#[<mix�W6��W��ć��%�^�4�~���SF�Y�2Aw���(���N
Q� |��h�Wp6�h�7f�B��ڣ��E�.�ӣ���mFï���X�5���w{?��ܝ���y�������!�֧�ld���u�P�"Yr�n�ż�(ͤ����j5Ė^��G#q���d@�4�b>�8<�?����r����O.�u��\2%����A�,P5�C4�
�_��:%�b���Vk2Dv�;ƹ��#�0��!� ԝ_"e�ՁT�
πv�A5|��Ec��f
�F�.�;+Q���_ ���a�D����j�˝O���
aU1��s�4^O��b�ly�	�2��P��������R��_պ���%JsK���-^yEu��zn�Z��e��8f���ZD�4��%���n����c'
�<3{ wr�=ق�3W�s�8�&��9�"F�e�BE��YJ[�T��͎y<BИGA�p$s��i��󘓅�DD�K��f7F^�48;�(!�1`��5����8���z
�ÊM�pp�4|띝bѻ�� 1c�0�[��L�@�_L4"~&&���G���2�As�1Mɢ��;�z�k"L��YV���..(!ғԝ��~,�~��t��4x;a�*��E�A�	��~O��4�D��1*eFU�D�m̌�_ϣ`�\��{��{H����	ٟ�x�ٞ\*r@GT�b��>�6B�)|W
���
�]�ꋮ�u���,�/���d�ƛ;HS��i̬L�	��#�`$4΅���g������js`��P)jP�>��[��`&�@f����~:"�c&3�a.~������/�Sp���>��R����Z0h�"������Ǐ��D�d��n���s*9ݚp�-w�X�����y�|rh��D�
HwN_���
-�g6b04��5`X�� ���壝�����c6Ld5z����/ݦCI	�;
��7桜
!�-�2X�7
K�T�TQmW��J��*�]k+0_�KJԷ�<�hƽQ�w9�4o�/���%�����]��0~=��/^�N�DH����w�o[:���	+|+��گ2B�GDz��	����!v!_> �L���..;��g�3HZ �/�Ϥ^J?����ʊ-Z���=�"0ے��Q���<2	��9��|�P	���,�f�v.��а��ľF�C�+l�x�б��έ~{�e� O@>�e�9���c�.U_�>���x%�1COVf���m��5��A���RI�s�1����(�R�.&p�r�]�Yo/�MȪ<3䖴�%u�;��s+_̵�`���p���ŎPJoj�_�뜎���
�1ޢd~�sa��y7��]KO1�+=��
&*��q�G"`6��G�&b$��vZ��>v�(W����v����>�{gX12G@�s�4z�ax� !��5^Y��Xsk5@
�n	�pe$k��M�Ѩ��ڤQ�U�Z�|R�t�C^��ΪR���B�q�5�Ӈ�o�Jwt<&����\�f��G!d�'%��bů��J�l��,Th�G�{�'>Xo}KL�S��V!��,�\�3X��aݝ�p��C���X�Yv0��	��9�WD~M�A\\�gKD]yH7���z�A��~ 	���u{�nhr��w��=���g�JhСO_Q�#��%�^�mr����K<[LI�ONO����	�	�
Ps��+1�9o9	RM쭊Ǿ��.L7��Lii��xzws;��.�=���ɹ���ݨ�e�̬���"�Q}�_��'��g�u}ĉsCK��$����/�r3��g����[��o��Mk��
(�n�6~/9�hcGQy�����ڜ.TN�o�d+(�}�e�3�L,�)|�C�rj��M[�T�?�{�5�1M=y�ϫe'~�|h����]�n�0��
�H֢s;hХ��H�^9:���C�I�l�&�aK"EѤD�����YIs��E�MߧtJ����)�a��a��*���gf(mj!Z�����ى(�z�D(Q]��лёg�J�_�
�~!�C%C_|N��,�Y������԰D{���D�Cf��b��z8J�#��LC��k~ႝ���=�8�D6b�z>Es6I�ب���S"Z��]
)_E�u���'��5�3��}�r"�\�͹�1��*���2.i�8d!��N��9O��E�Q�-�q�5�(����H�y�S��Y��<m�!�WS��aHfآv�:�:��7�7f,XQ,�n���Wl�V��<����$�I��*��}�+��x��ʂ%� �p��X��$M�`�n��J=
ӎ<�j7�������%P)��x2���'��)@[Ă<��0�a x�؀MF�.e=�AC��\���F>A��&����Yao�F��_��\;�(���Yq�ik�M����В\I��\w)Y5����,��d;�z�!�C��;�3ofތ��L���NUiU��T�Z��N�����߈���L�+T-���J�8o���6�y.x����ި,���ڊ�dJr'L��D�DcU&�2�1G���NX�˕he���W!�X;Wͦ���Wڭ�$�f����7o/����E�Vj�*WN	��0K!�Z,6�����������:i�t��_�^��x��U8�5�"�֟3$;�1+\^ZQɚ��U��D����5�m��!K!�L;mJ���w���Z���{w~���Wl29��]�㧒��<��'821�Eej7�Z-_��8�H�Fg���ڔ�B�&�\M��m���������ك#��#mZ�<�8Y��;8��o��hN-xi/��U.wp����52���\�R;�TТ���)�Mn��:S!�;G�\
.�UE�U�Ǵ�_~&����KS%�5�*p~3��h�J�n'l�R���2��"s���t2���q6��B���piMiǢ4�h��_�KV���V�<�}���)�YQ��I�˷���ّ*M�Z��{H�F�-y�Y$k5�׊���s-��(3Y�L�c�K
z�S��5t�F�u$�
<�H�+$hB_p.�Zot�‰ca5Y'(H�!JTPh�`��K��;Ib�N*��:mrY�1����b�dҵ,W*j��7�7���.��aD$/�wy�h�]�_ ��1:�:{����ݪLw��'Oĥ�����o� �@������C�GD�l,!HS+:��N���������N�?��b��;�k�k�ח�b�V��p�6Z�fi.�%�t	=�/:���-��+��lH@��5�c�V�x�	�\�,h�b�!��U�����s#&��G���R�E�_cԖ�F}4��*��o)�!�j�1�XЋh>���
�YF�9�MOB��.��g��L$�I?��o�Ef���f}z���^��$ӵbH�P��(�׻�����`�?]C�i��\V���'�>;�*Q�Bͧ÷��?�S֋ч�p}=��Lr�ʞgz����8��v�����Z0��{�i��X��Mդ�}���5��g���L��Qr_���$��̕�	�GXWN�c�l���/�D��Lڰ�}��k�
��l?��9�HL�{ĸ���_#2N��8`��X�����QY8͙j 0WK7���J��R
PE|��k�P�S��o�!��	k��ߪ�"}>�V��!�P��1���ܼ���u
m�7
I,z��]k�,�L���Ss��X\xN�o�E�H&f���y��I��X�	�1"EC�ڀ�1!zG�
��ƙ��Hm�W!���ԕ��3�|m�uM�4`o�
�g	˛-���
�Y�f\�>ڈp�ݔ�O��ө( KeB�����pf�-(�X�c��KK����琶[��N&^��$E�xt
��+U��P��2�].ԝ�r�F"�q�L�މ��̝��‹P�V��Z^�����:���8��J��i�]������[&�����ʱ�������6`!�D=Sh�O�|r먍�5�KL���ّ{! �)��=8��-�o�8n�������g��<�G����툴���IFw�WW�8|����Fwѵ7�՞Tl�������/ߙ������sZ��6�:�thg�����hj4��eG��M<4�z1���oww#�8gm��g�CU�V�Hh3�����5�]oq����5��^_G{yl��r��<�C
6�	�~2�ME
���~
�l������͎�Ą�6�[��g8�H�����A�L-�..�Vg���¶Ě(:�1���2^�?�l������ P����BxP?c�T�$����ܰ��d�F��,I':�n�o��S}v�m�P���S�7V��&�%@,B��8umm��ǩ�)τ�	��v��u���htUp^�ٔ�l[N�k*6wf�%�`��$G��*���Rݸ�/0���E��:�jN{�]���S��<�@��M�Ą��I�~ªO�
�j�{}�9
���S�ځΛ!�6ڣW�9x�ү@CtwJ��_��t<5�P�0⡸��T���Ȑz	`rS�]���ZФ��Ob��Ӽ��C����#?�Y\�a8���v-0��6�&w�~fC3*{^|EA���$�B�X�1��3-s����H�
��u܋9DӒ���Q��ĆC�'Z@�^t��'[G��L�婏�/��IS���ԉc�ɥ�D�T�69���+  ���T��U�.�����i��1�n�x?>=>��B��}H�����ۃ
�ҿ6�0�� ���U�(*������E�����Q�^H�i���MF�3�~r���'�_�p��L/�9��&��$�jI�%6F�B�l���vb�_|�=3U)�ZHY��Q;��;�Â���H�oUB��Wwh<>��oO�����tLՍh��7�5FsR�Xq`ژ��#M���4�.��Ü*�f���҈wSg]J�=	_��H��g�r;�`�"d'5�:�>���W��<mc�q�s��'��aZ�Ɔy��
�
��x�,z�
��/3UA?�\x��_!��E�&rN��k���„#,3�^�p���t�m��xY(d%#l�����ݤ���Q,S5�@d�IMiw&�d�����f�t��4Q?�V����g�����%t�L��O�G�ʹe�wOV�ht} ^w}|d���a��X=^�9�B�:}D�G�&�f�+, #��U����(&���OC~Ͼw-�h���gb��˰
���������3�����#��p�W�� FĀ��:4'b�7d?��O2����u:�	��y@e�jH�꬝{ ��~��r���Zmsܶ��_%S�d�xj�)���n�㸶3���2���1�,�|���,��;��I�g$��ž>�Xp���Dg���O���j%��U���yt�+���UV,z��{XW�3�L��\�)�E�����=x`~�컒W|�>�by�J�W��.n��ڗ��uU�OG��ы�?�zb�x���(�#����2�J��k&����l4d,[�I����`u��EV���b̧a�+q޾��֣t�Y!6����єE+�˳ٌG��m�T_,��?|u�F��`�I�*�0R��fv���U���I+�c��l⥔�\ĉ\�/�����x��)�6���7,�:Y�	Y�9�݌��7��n#���G6�|�	�MeRS@�ٺ���)�\��g�ba�/��^0���ap$^��j%x�E�t������(m:�1R�}���`��!�`6�Q3���Ĺ�ت!��5oȖq%ʜ'b2c�%�~�q�oR�nb~���v-�I�.�EY%��\&Ƭ��{WV���h:���o���J�6�D�,� �����=�Y�;-9��Lx����z����IY�i��y�����&+R��S�����i#�Ľi�n�6H��.
Z����_�jX�c��V�f��i�VY%x��b�g�?�6�W\���r"�?s9�����Fxi5FUE���g C.��k^��F�l->�u�療dE��,�>�
�O��`<MEʴ4���`�H�U����@�Z��P(e��88H}���P���A�j�;&�f��eY�k�fΫ%��빨��
آ�k��r��H����
��b7B��Y��<$�Z�bl�!�θn���ւc��,	��NOO��Xo)>�*\3�,(�$%��Se_�����,<�.'p���s#�Ud�՟"�pڸɳ��rk#�
�>uN�����K�>ǂ_gK�6HLp4��k�4���5�
��������p&�oKx�`�j!?_hx�x�*CX	�o�N�ց���$�5�T�}5l	����,F�P��|�T��"��.��gC��\�����X>�Xތ�x�#�o��a���-������S"E�܅�LJXS�5٧¥��B%���^�����b�kr�s��Ӗ"}�w����t���ߴ�p�R�c�O�>4w�WR�'^�-�fe�J[I���(Ɗ��ѥM������HOM�j��K��u鎪D)_^6�������Zs��^�(!Z���Q�%�-t0��?����vti#�I��¡�KY9p��-��2�6�2"x��s�8τ@�0_�r���>�ٌ��
'�_�*�1C����a�	>�V�U"�ʀ�D��b�B��� �)�uP}�o������с�����M̊���	��������=��#��<9P*n���/Bh���A4�ph�+�@s@0��h��M�|��%�!�kI�-T~[�m�h�ވ��h����t�
,$��w�E��ts���2��axl��rŖ�9O�l��t�+�X�m�]���?5Њ=��I���k�ԍ9��o��<���`l�B뱱�Yk�ʮ�}��
`��4ܾI�����F��8r�8iH�A�_����[t菭,8��k,r�B�Վ��9����|�� �7�ޢpzO��Wk��n,�/�\�Q�?}l�>���xc���)��g4)��v������%<�7<��I����P�C�+S��Ki`Ҏɘ4�p~�[w���<����Ў@iU�����h��I���C�6�.~S�������r�⠬�`q|�H����o�C��^K���TN
&uUс��/:��)(Ḭ+oXfm�n@�CC#��I�Z�vAw��iD)XB�U#"����4�‰�Ze���/�`Kb��֛�[Q��A/-�#z�٬Me߬��l;�]{������Zdh��vn����8��4$A�{��mZM�T�1�|�V����J�>^e�V�0�4˓����|*�gn�� �N�4e)D"��HEq��LI{�ɇ2����/�s���
�B_����X�9�SW��ͷd�R*���n��m��B� �ϯM�h�\��-�~s�Y�k�^.�!cE�:iNC/���%�
O�kM���'
��>?j^je�?�S���F7L���?��]�:+�a����+;5��h4�������0����J��8����g_୳^/�h�;YA�x�w⳴1�d;sCMG
BQiҐ�j8�4.Q|vff������w���7kp�������v��e�[#��|6�;��`F����͗�]��he��1k�����S<#I�9*��,�eĎ7�����d<�4n�,�������~wm��Q\��[�G0Y�JU>'���B����<��Z#j�I�cacT��]j���ܷ�i��@v�)AGe
�s���,-���d‘�L�7L�k��_Ŗ�>� �U�w���,w
wA�r�ljz��\����m��tBޝ���7�8��X�����~��$ֵ~�~�x;�-Y������']�7��)��;�����j�����������g��w���t��<��Ǵ�.�.�(��D�=0t���.7�4L�;���H@����@H�mH_ ��-B�J�!~G\��}���6ؘ���d��e9����a�n����{�ʪ�8F�T46�p�۫�R17��+���?bmQ���m\���OR��kx�1<F�U��&���8v�#F��u��A�N��8��ey����}���V����\d]���][a׆�9c
{�f�=��\{��k��0ɏ}5I<ա��_�"���7|���S��w�LW�/޿cz��=��k�6woN<�q�{�*A,���Z�7$�� ��(�:*�g�2S�i�[�1V��pu�Q�:3��ݛ�����6�������i4(�C������Є4�����x3L�n�h�c@X=}�`eAS3�zaQӸ���H�J����I�R�&ػ�f��^�L��}B���=SuI��}�Aꅂ�|��QC�G�x��=�x#�k�9��D�lY�$J�=��C���݋L��ZxYݯ�GcD�J�T>�sw�{�����A�V(�t��؛j9�����p��}���?�� �L�"o�q�d�pva,��U]o�6|ׯ��b�8�8��rA ����o�ȵ�)�$G��R��-p��`�cvvvv��f>�>X#��\]��f�}+���}��֚����q��࿰Lt�%�C\й�T�G
9<�ZTkm"I�����7�������k` ?���z�4Ʀ��.�D:��d�l����I���/��..o�/�9U����"'�[�����/���P�&Sw��^|�Y�]}|XO�Ye��~�~��E�V�,�2�Q;

!����]]ޓ'ѐP�$�a��v�D������f=���V:9�'u���yD!��̸և4#x{:[,&�`�6;��U�Ooc�o��K��m�-;%'��H�i�ivC�������B���U�$矏lM��\�~�1��'���)�&�&�(V�w)�}L�T|�E��y��� �ˠ�ɞK�M�1�}x����3�_D�)܈�ԯp�a��w���d*�E5���rG���XU�i��yB�ed��鏎C��o�7/C����]Y�IU�a��u4bm�jA���qC�X���������A��_�	0d1�~��l�R\�n �k��P������eB�=Alm�fp~JBj���+/�,���5�Zd+W^����5��z��8HnI��̂lܣUp��]�hS�*���Jq�.��l�d^����tޫ�#&�O.|I��~�'2�CA�[M�
�m�l�p�
�~Lѓ3JA�1d'��K��]J���2��aH���Hb��.&�̟d�V�OƇ�)l�`�[!��w�����gȸ6�_�VL�(�iЬBJ���B`��[�\���y��=8\xx,9�	0�t�l%�I��5��	(oT�)m*�"���b���b�)?�����B�`V��0�j���U���1HL��5���*|����j9�ğ��LҿH`��P��T]o�0}�Wܗΰ�$�&��i�4iҤU��=dh"p���&S���`>L��KS�{���R"H%h�H�8w<?�Q�O�*W@���_��x]�"�K2w��B����Y�����S+�]��c�+0��CWt{\�%�(�H:�-w��l�)i����6��&j������m�E9s=K@�*��SЁ�QS��=�SE|�<ǘ��ŹD�Vl�2.�g�;ߔʞpF��)ЎMs�
�ؓi��ژ��#57jw:��PTF��7a]O`��y�w�	O�~r-�����׃

O47Y+݂{&ho��6p�k�ֵ�l�S�g��X�q������n��,�ƀ$5tu�x�ny�>M�C,�PS�Յ���5�p+�#�287�;u�y]kn�`�0�~+��~Q��5Я�o�|_p�L�Z��,��^p/}Q�z��0;㑐���غ_q�{׳��Mgp'��>p�\�f�P�[8_h�=�Z�����b��x�X�æ�U[5�vG�?C�0�7���}|™>
SPd�M(W�]��o����{��5�]�n<]�ߩT��L�/��*k(�1��.��sd;�it6;�jMj�+�F�~H�eUުI�e4�Wc���z~�k^e����\����B�=y��%Z�����n�0��z
Χ�`����M�`0�A�>�,1�ZY�$z��~���0`@w!(���_��Oy.���#�5�c���᳾�/�7�P�{rc���^Q3�n)D	+�`��0b��F���4�N�@ލ� 
�$'���"��
GJ��Z�kQ�<Yn�FZ*~lכ�a#���dKS�;d��t�ؚe��W/�����?��<��_�Ӯ~�>���z��ظ�R�߈N��*B��,6�r�A:�\$�f>3�򠌱l�+�%�SP�?�n��7�z1&�
vS)l ��0�yr��([��󪜚TQ��tֿ��vw��z
�A�x�Iy��9�e�e��6dƪ�:؞!�k��A锑|�YU�tj��b��G�δ��TM��0�ﯘ�l��B���V*j�U2d�Xrl�V��_	Β����g޼y3�O��
ez���j	��?TXP�Q6���ء�MP�x������	������m�)8Ҽ�z_����t��IK;�`G<��0�gT")~p�L@�:¹дhO�7{xZ.c����G4���R�RKʟ�
�Z�<�4���-��X$��|+}#�>/�hü�5�iQ�6J��5���vu��3�r�@�&
�e �&�H���,k�>8��}�p,k��T�tn�/���T��t�`�5/拯��x���re�����T�ΐ���)/Rg�.��.�}�Z���>n<��˴E�H�Y�b��[�a^P�c��$\pL�qH�Ui�-P�
�$V W�N�%�>���v�Xn�7�����:�V�W��~��9٘j��o?�����y�pYg�l�Q����[�Z��u��ݝ������I���40܇��dɕ�_�%/ye^�֩���-�iv�n���T���kg_<=��P/���DxA�^͓%<eӿ+�4���R�n�0��+8�ڃ�n�v� il�4h�{d���ɖ'�m���>ZN4Æ�����C1�*�ơX�����.�K�p��#����F[k0'XtT�"Xh
�C��E$�J9�M�P�L�{�:�tM�4Ĕ׻�����po�$AE�N��F����"e�o��j�[Et 1��M�j$���(˗��B��K����J�����:�/���&�]_ߥ'���E����6d=|1��楃VZ_lp�H��h6Rjg��2�ـ,
E�4R�z{򿴲�7��.��&���,���|�,f�V����n��*��� �ND�	��`&D2��^Yӄ5J�?;��r�y�:�.$I�T�	��<<<���|��z�=d���a-)���g�Fa�V�!Ք�T!�<n`+�aC}2_�g�*��A�0�K�[q��VM��
�&���=\�J�4x~����%�%�9[9/��ZX��4֬ىy�5��G���/�܄���c)�8��u�0�(Ǜ���%.��%p6�1��C<��9�h���#����o�/��4��VK��6��WL.�m8���"��A�6��bM[���Dʩ��IQ�N����7oO�F�L��t��`9����SR���U{I%jQ����P�
�����l�⭑	���d�hQ?�p�EC��^pz8������%}�Tš�:�Z+����=�} ��)��9��2Y�cv��w�}������D�V4��֝9Ej����t`5�F�K���}gӝ��}O��r	?��hL�(�|�s�C�\(��R��X�=B/��E�����9����D^7�"!�2�1�/��EY��Ig`#��Y���8�O�M�dq�o�A�	�)��D�Pi8k�UB<���~�)�.*c�M�&��VF�Ի$��q/O���E
jeݻs5Ж��*�x�FY'yg(����O�}f�[�Od�eqr�pO�����xk7�sM���i-�c���D�9�4h�D��,4�Ezm�El9�~�ks7����9�Bn��7o
=�~g���Ry�{:����8iz�lĥ���CFYz%q�]ѧ4��=�\j��7���
�0
��ݬ�6` v5�����\� �	���#ϑ�����H��6t~���2?2WQ<�X�CBO����;�Z��h�i��(&�%���hLƝ��b�n|9�jt5��mы^Qٵ6P{���C�v%X���V6�k�
�
��I.�J���k��6�M��.���*�:��s>$�"G,O�*�<�C�k�P!P�`����
+�I�s�E�qc)Qs�~S�@!���=֔�F|΄|�$�輼��s͝*��`š/�`�+������,�g���d($[����$A��т&{�|f|0K�����w���N���tC�M��7�L'����Г���_v&w��[��� ݠ�����m�n.��S����L�z�gig��JF���5>��|�i�=ۀ���)���T��|���~2�A�?#�EL�`�*4�o�����ܬ�v����l��ev�Mg�CƟ���UM��6��WL���5��%���l��h�kd�CE�%f%R%)�����&-���/߼yof��n�`�ZI�ٽi{����L���?��
ag�A;k>��p��X�ᮮ!�;�����l_)���躇�sX@������58��Cn8:��}�emJ�K�.��dl�7O�ϞZ�4m���s�hŴ��޽�����?��ު�����a�v���~��Z�%,�!��WcJ*^8h��ɂ*���$���a���oo@hE��2Z԰ݍ��Vh�
�vw���>[,V��75��(V�Z�g2�����5�O��x��p>]õɊ�e蟏��hЋ��2���*	Xc�D�7Hb�E�-�JX�KP�~5"BZ�\�������w�o�6��ޣ�fC��'�2Y�줞�/o��]
���dE����=S�N�Ġ��7T䄐I�X�+�����h���DY�H��O���+-�tϞ����Z=#�#��(
�*�
��9g�#���@�žJ)�%⾣f(�Q��F�iJ�����B����aO4�H�!��<�#���_���B咄��T�԰�;ƿ��c�2�)U�9�0T�%c�l�����5(�l�3�Ԍd�����vr0&˅����%���DBD�D�v�E���#M#��e��.�?��Z�M�T�X�ZV�b4�ql�!�jGt��j��Qb5N�L�|*?u�+s8X�D'>�=jÎJD�y�;��Ne�@^�U���p6
:M�?3���2-��1�\�Xg���.��-�\�$��4�ο�7�s.O����˔+-�V����ԥ�(��.��v�|aj������{���Kk��t�[���)z���b�
����ݱd�іKְi�ei!��WK'�j=8+����a��'��(��.eq��
b�_�uR�n�0�����'[�݂f,�B����,��-�凌Xp�T�ǻӑ�ޙ�E��Y� .
[��;�Щ���6j �v��y�"�W�*��Wfq�v@����+�=m�yסgB�+�l@�!D�a�(�#��0P �/@i�A1>hyi#��qV�hie@�z�Y��b�;��TY�*`��=��>�_z5�3�A1c۱dq��`S��p��~�
4�P�bMV.&��R�3�oL�AZ<v��{��b���R��1	=σ=���Jz��y�{i�)���3�gN���Jng��g�|�
�
���i�q��
��6���}	G���TMo�@��+&�ؖ
��zq��$��HQb%䞅��&Kw'����M*%U��k޼y��(��9��3�tZ��Y>�O�?CZ"l��*԰��s'�-�6�H	����y��0�+�P�T-;�Z�ښ�%�ӛ�`l'��p�h����f�M�4*�-�,*�8?�\�l"�lG+WU#�"����|��=�'���7sU[-�����ez}~z��Ϝ\��d�:��TA�3
�>�Se�f��dҨ����[�ƹ�B�L�v��Ym�n{�n.ӞX���V���*��~�F��DT��v���$��@@6Y�
Z�!�B�d��0Ò��o��Ҡ$-�@��!���y���6�@s�t�#���dKt�R./��k�[���j�WFky�S�l�U[��Ȱ�5,8�M|�I�g���')i�/'�D��p�[Q�$v����ze�dxy6�G�Ր��Z4v�U�VXۈ����c�z6���=N?�}[��K3�ï!`�ȃ��r�Ѣ�n�g�1�t������K|�����a��{��� M8'$�HtYL�.Q+p���`ͱR�^���dz�s.�9�m�)ޭ���R��^	�y�7��$�5�� ����Z��z:�O���vȤ�_�ba����٢Vv�&s?�^X�|�t�,x�[���d��7�%�����%��ӱv�?��`t�R������=�$�.$q/_�z�e��U[o�0~�W�>X�Coka�.�*�a��V}�&0�!֒8�
���w|I���H���;߹���ÔKQ$-l0c)]r!�PJ��	S�S��S"g:���N�B��W9h9]�O�"�1�)a��Gx��U��<��Rd��/e�?�0���nN��K��逡V2�9S#' �����U>c�S
���)Vh�J\I�XҬ2�!b�Vd ���յ�
��o��u!4��G�e�j�d��N|�Z�Y���[�c�,a�������k-��[a�y�v�o��,5�z�a�*r�%���{2���W�\���}	W��/c�^7LW�P޸�f���տ.o���G���>b5;1SL.��v�eu���L0�]���	L���!n�mONb��7��*b�(ܡ��,���Ł��I�Ѽ�7�z��-�mh�-7D[矱����n/��n
�'�>ܢ_��e��g��3�p�*������fZ�H*�T�*T��cW|���ɱ����Tu<�4�f�(ĵ�HQI���r=n�52���dS�X�Wf��4��jӟ
��H�
v�f�l-^�p�7(�9Ǎ��A�yO
JNאr��+.��쵡l��"�(�W������ٝj]�ID�B!i��09��uxqq�~
�yt68>=;'E��,D�`;-���`8��߃��Zw��$��~0[�6F�x�`\L�����l�� V�p+M�ɟ�;�L���h���O�nJ��M3�M�~SVK����d��i�vݽ_suM���|�Q�`9n�f����)=U7u�ptܶ<�IM�vu7-�Z����uw��8�l�E�����A��0��Ӝ�C�m�^�l�@Q�T��{��:�Ȟ�Ϳ�I��J�˖�}���eɋ5]�dE��M�>�/����w�5ž�ء���J���|�aa-L�<�WTyRk@�B����
�P��T�pD.�?!�h��p�x�A3�?���M�ְ��P�g�Zo���8�Œ�! �A̱&��=�ũ��;���؛f�QW�m}�,O���u�L�Y��f�_Dm|��?��Z�à��6P�f:3�p �2l�	�������H�_��m=˲���ٸ�PUi�{�i�S��9����x��U���,mH�U�7=C�2"<�,�j1kP��!��{!c�%�UY��q3ˋ)�_�q�����XMo#7��Wpf�
Y^r��`��;@23�x�CDT�r3�MjI�4��}��͖�mً>��GVի�G^]\�1�.��5���_|��d�w��S�q�����g��uN
�4�h�C+-��l���y +c�P�{	�$�4f�̆Y\D2���k�Rj�:<��5��H���ޚ1.M���J��<��0@YVժV�sƵ��h�)��`�7�����W�5�ځq+�~���˸����DG����s��W��8Z�=k%w�
9_Ҹ0�n����c�r8s�����ѩ��ኑ�G뙐�m]�(�
�@�^�W!Jq����N��ev_5��jd�Fف�ֲ2��]�~`|�?�5��Ơg.���m�*���C�j�Q]`X�L؈@��;�����{�a攵`����n�n`���7�@���D��h$�![���
�'�,k�6���
��D`߲�8�m�Bx%�M|��U�]�!Y�'�/U�e���T�M� �2�]�_z����X�)+��O��I����͎'���~�b�>.�F
��d
��
��Ug
x@yz@)�EHWI-8���m6=^��i�njpj��4��޾o:x�ፓɐ�Ҝ�NP�z�Y$�;K$�e�6�<t3t��!,4��&�
֩���'`+��*3?�q�~�L=�`?o�iX�"�Ln65�A2`%��Cq�l{8*�iM�	�"T��q�W�T�M�x.�Pj�'E���~;�6�d�!8��]<[�!���v��=��	߄줗�G`B><��#/��L��ݎ,�/cK�`@k'�P���N�a�)Rn>ܚ-��أ��=�9��f舜��mP0+�Ж�.Ќɐ+41k��gej
@��ITT'b��|-�>�Wd�r���A��wVO�?��%P�`�y1;�̀�_>Q�>/f�SҪ�����o���\-Y��`�b�+Ǽ-��ĝS�S�VQ�)6
0X{�CE��AEG�DbP׆A�<n)��94Eң'�: �̀�E��XӒ�X‘��;����F�%�s����~����;nI�T�ƉJC>l����f����>�H�`���`"M�t�oq�E�m��`��e���g"H$([�k#��em���jP@j�2j�����@�q
�=���d�Py`>�X>�:�+�Hz���O,�x���iy˾���矢��:�{�\(�'�SaC��l|���%C�c_�A�<":xD_M�z �"�G�]����e��z��>��a柴��V��Qk�R�?��%n�k�p����W�y~~��i����f���"`*q�g'<P�Um�_8{�PtF�+'����������A�!wr���h!������.�����Ў6ˬ1@�
��B;:)qg�M�%Ӊ��h$�����q�_�3�2��p��T��Xj#��j�|�g���>�t�
�iba�
Q����A�Ͼ�"]uOo��l��&LA���Ts�F�oC�~����N�/�����}gL���<�����}(f'��q�z2�s�Ǐ�/���'��Ia6{ls�M1R�F
һ��.���?ܷ�.�y��tXSf�ǂfa��V�5zi��x�K} 8$Օ���</�G螆�}�밍�H'��-G�x�w%�H#@��}&���:85�G�xD�&�
�B�K��3��	�"��R��1�o�e�6����fV9�J�؅K-��,��&��z<��Q�r�b��ݚW��;	G�+S5.{U�..���79��J�o��b�(������]�7�In�,s�
��`�#��/\<t���n�ңk�	+
kDreQ���Rn�	`��b�H����@�4;�O�Q>_�
Su�`�a_\��E�Ҥ[�A���B+��p��pq�D7�X�gcV����ˇ��!'7$�i\�������p��2�H͎߉��L[�6Z6O�O�=>�i��{��'9Oܿ�ʑqARH�5�
�M8������2�=h,F/l@���=6lU�x�?-�&����N�0��y�KV�"	 ���R��J�T4<�nk���7��ӏ���Fb6�-�|��EQd��*��%�c��p�~���Oh
–��a�m�7T��
�X��9��G1|�.����4B'F �F�CD
��	�	��{�ȣC8yÞ�.���VU?���f����i�\mv��?9;�R�!"�A̱&[�������'P��`�E]>oڗ��k{F/�]hgV�A���./"�"Lf�VN0�OE�"����ANk&�֖-y�`�=���7�m�j�����
w.�(tS;���C���v=����ey}���ɲ�������Q�3Ġ"�/ү��tXH4��R(�P���-�M]͚4���/'SH���Y�s7���bI:�I���f��!�>�ab�$�bΧC�ٸ!�{W�;݋H(�����C{���������L�_J��'R���K�a+��B΀���* ���Y�A�L�"�櫲\N�ྂ�k @��ˌhF=h+{l��s'S�^
��T�f��̽
���bä��l1�]:yg$�)�3'j��JX����%O@d��oՋOJ�Z���8�-�%[r��Wz��yX�7v��FER���)���sr�ԮN��&����5�R�Lj��4,L��r���/��\�ʠ��h��b�B��2����R9^�.�g�G�r�`h��ϒ-R%�b��"=���i����`[X����<�ְ�����ࠊN����_q<�|�����H2Oٱ�c�ޥ�t����z
���d�q��>rӱ��N�1#�>8>�g"Ӹu|\:)�Fˏ&���ؔj�e�r !��\̫(@fΧ��.
�(4�`�����2�;_`���v���X(KX��`�o��0,���� ��p0��8�'��������H��1B1Yc?`���C����H���A;^�'7(�ӊ����ﯼ���&eR��<�ܚ�o�j�N�}��l
��Q��!i�{�"K4ַ�a���.���?>.T�=�t��G�F����U���2V�֣%��xm���g�I�b�p���(��\Ȃw��V/H��h��W+Q���Li,L�����\:�3�a�<�4
��ti�ҫg�׆H�T�Ư��C�Hi^�#�b�L��	J$u5�K�ICBc�3+��d��$�҃.�Ǜ�	�y.dy`���GEr��qz
������T�a&��k<N1!�0^Jm�JK�L5��T�τ*��Rr������u�<����1�;�֨�͎��b�����U,�cʹ�N,>\�IR^s��K�HP�����s[�5U�J�(m��2�f���{1S�M�']�w}k���>��8����O�E�'����;�*���n�^��XgBѭw��ު[�-qsR(-�_D�^�M{�UP��QƟ]�8���mR��9�+����n��>�z�[�%�=j90�xI�
�ƴ�i�b=w������]��	p+zMA�8�ː�"�I{�v�;,��.�Ȯ[�cA�|��'��eTl�9Y�^/
I�U�����7˺��{���Ad����
9����{n��3�U=���;��G4���6����|۽���h��=a�m��n��r#l�Qe�s�<���"�uˡj�A�Dj�)vsyJ���O|�	�k�$��WF��w����p}m|-_�%P��7+v.a���--M�)��F��7�{I�j#8m8�J�^4j����b8H�p�q����{l�j�qZ��$�^k@�"N#�Y�|�E�>�r3�����������S^�[N�*L߾�A��k�������6y����:�-QV�׷/+Ɨ+}簞Y��Ww�]�$��7�@�J���`5W"1�%N�S�P�B��du��P�U��i�AYb
d�EݬΗ��S�7޾�O�%�Ǖ0�|7��G�1b�4N�\�����'u}T�X���;��&6R�	Ħ�	���c9
8	�Q�Y���mQe�M��H��
�|�xD�7Ɍb�yf�����+���g�r0�S��!�;���\�ݪ�m��������H�渭��Hw�w�0�fA+�<���>��+)W����n�0��z��N�AR�C�"�q��@�����R\a�
��/-ٽH/���~W�7�4��ٖƙ]o����/�Z�#�y@�#�3j��$�8�����#��2k���� j
~�a�h`
&a$!�O�!����p�t
J���_�j\M�މ���Q�k��N�R^%���4�!��A����-��S�����O�� �I���}8��������^�0.��TC7��>=^E/f�V�0�E�"���ũ[�B�(c�8
��x�g�
鎛vwh�`E��V�FT�����G���
#��`�wyY�@�Y�dY]�Ҏ���Q�"�`
E� �QܣZ��|V:UQ>Ǽ��U�&+�ZB�odG����VKo�6��W�氒���C\���)4�]�=,�,�""�h��
����!�������~g��|�~��{2�c�
<&xq!c��Bee��ěZ����!YVN������I1B*�T���|. �TM!����/T���e�O��=En��@�wVn�hP�=<�8��sH��Yc=���eXc�H+P�
^�o�z�bڬn����7������Dn+�}jz�+�O�r�;���|~�1J.x������Gi3i�at
kVUbj<��Q;��<ǨN�\b�Zp���(�UA���]�Uf�	���EME�T���_��N���{��K�n�b\am�_+�OVxf���|1��H<�z_��o�?_I[t��{���R�z_:o�ذ��Ə~KhJ��)�&��9���>�4*s����Rt�L.:]<te�{�"k�h��T�g��%���\.��^T*�I�����5G[جx8O�2�܀-	�r	�C��>��> �˭j�x^8�����Ե! ��|�����㗛��k���eM���e1y�Z/c���-��}��f�3n=j����N��7nƶJr������tx��-�М;;Pr
M{l}�KG��d-@'�=@�Q�s0���F�6
u��Qe<�"�KwMG9���Oں���Q�c��⌂���5j1Z�m�u��w��jW��k{��S�V��g�8YT��ƶଭ�F�R5�-MHԖ�R�7'���L�~�]�Տ?Y�2��d�v,,'��7�����[�`+.ר0V���I��RZ�)�=t�^����gZ����uZØ�A�L,g*�io�f�� �5��X�2���(�ێ�&�au�w�X?��^�3)K��7?NN��1�Ѳ�̘�0�/�Nj�v����wg�ۡ�0�N��ρk�4`�eC���0!�$�M�Iß~��#�l6��9��]��֫~�4z>���?�L��V�o�6~�_qs_�?�=�!u��i��� q�ES�YbC�I%ц��;%�I���"[$���wG��Lĉ�9�řm:��2�A~?���/�,���*tp��'������O����zt���bYj�U��֦�������	����[�3}lX[���9�͚tZ�P��T��og�7���DL+�Uc0 x`� SZ6������_߼�0�up:kÿ�z��ry}���rp}�P�'_DC���^zh��`���4=�D�4�
�f�,��R:h[KW���u���N��˔�d����2�D�s��;*�9骱.��t�>M�����h6Z���hg�ϝ5f�+0L2,彶�k{�k1��\=9I�}i�Z13�mt�
VH�CI�
M�"*���
�i��
�H�2�8,�IbU�Z���$1�k�sIjx(���$;�O)��e^R1%U'
׺F%��t�o0�kMۺ�F?��G7mӐ�����Ţ�A_$�w�2��Ɇ���+{I��,����mQ�)7M�y��rXO."����㘞�r+mkTl� �"�;�ֻ��>��]%+�4% '���ڌ$����x	�j2�GӍEtԃY�fV�Q�K�@N}�q�ΘNn�I;��K��	�C��R�YKdM�x_�ԧ��?C:�+`L�+��@#�\��EvʡD%$�hR��E���q�ɞ�!��5��s�ȿ��&�JE���Rq�R쌇McdG�Nׁ�F���.�V�0��5�e��[�Y'ri�\xc�g�4s
t~��UT�'�$L5���5C�8��U���ʞ8�<�b���g�$#�}[%	#�%T��.X��)�b�^[꿺�yj_�O!s$���UpZLi&w[y|,%ц�p�,�� )�?[�݈���F
�Õo�뚆}�Ҵ���O&���DD��5�'%B*n��l_�z�2^hB�V�8U�|�4��M��x��;��-�i0W�~�s=��1����8�'O����`�֬�C��6f3>A��:�o�v���ǻk>�;7q�`�fo\�<n�d(S�'J=8|�'?���`�胏RT��8lP�����D|�;�?m����������-�ɥE�>z��������[do���e�
hZ�l&d����=�"�-�T�P?��6A�E�	�y���4�����g(NV�k�="q�߼�=�V�Ww-����;�|ۿmB�}����UfU��G1TV��בݽ9=�PO	-���*0��������~�sOfo�16,h-��/4�M/fN��*��2��cpt9�M�ɏ�[��?	�?/�ȷXe��W�O�F�_1�	g%�5)��U�z:�R�"p�Ml�f��]�FG���~��K�fvf�7�����Op�
N�["�H��r.��?�	ξ�T�w���J�x#9ƿ��m
�C�@!xA�ʉ� Ő�
8�5(Q��Z]A	H�2�LB*������{3w��Q��L�sJR��.�%��)����$bG�N���,e�:u���DI@�I�T�KV��-aJ��>�%�o)��3�H���g�/a�l�}����vE�R/���D�M�"�W�1��~b��rCɌsÚAT)<Χ�x8�oFc�0Lx�6qY
�N���/�"[�o�L�i�@�0ڲ���?}� �G�r�T�T�;��f$�/��<�;E�qg`m�l�恁;2��4��r�>+}�✓
�h�#��6�0�rJaA@�͆��82��\{M���t�
p?m��ʝj��t?�9ۼ�r� �`-1��wr^�����d��(�k(,��qE=z��dM
��>��D��!\va��(�FP�׀aA�.eQ�b�FL�\q �u�1<|}���>�|���\�|����]���c�6D���xIW5mq^���M=�Vbt__�/�M���t�(a�5�;�.����v֜��Iw8�Ӥ=HFݗ�Ң�{cI3�!q���2�P�]�+����9�K|��`m�����t�ي�{ύZ�Pnֱ�a�3%Ft8Z�TQ�X2Kq ;/m�@��wWC#{{�{�T�]fS�ʽ7�։���4�]�l1���u/��f"�SO(d��?Y�{n�A�oG)o��&c4����a�3��޸a��b����,Je����y�ө�x�k2RoO��EY��[��7`�+�@;I���)>~���“���B#�=J󷦩Q��3�j���^gd�� 1&' s�$����K�����1��]�R�2#�f
�H��{h�:2'M�؏C�k�iox
�c�d���sG��5�s-��Vs8V�j�[g5���6O�]�`m���N�Ahƿ�|<���Fs�dT@2����q=�y
Y/��k�@�u�Guddo��m�k���5���W%-Q��j�����碔��4��4y�.fV�l����ӣ�{����:���&���$��u�xx�4��nXMO��`�).���~=c����(i��G��?JZ����N�0D�%'8$$.(�(��J��h���6���=n�".H�b��Λ�8�H��h��c4��wzW3\�+������FX��t�v�a�qMΧ05�y=�/TiT�ڃ$�ЈȚ*�Σ�Ϊ��|�<��� �aK�C���gY;��;�uW�����l���S�st�%�i
2�Gڂc
��9��{��z�	�d���Qg�e��x|/O�١���
5T=<��ㅇV�������P�0�"�UÙ	���fMVX�O�|F����/�1X�y͍	+
U�F���f�%�1���8MO��Aџ��&MH-*���(�F��T_�^:�2x'���3��ܳ2��~��ȳQ6# ��8������n�F�=_1-����t�G��u��@b���"�9���8*/v��眹I[�mix������3��{���v-��Ċ��f���ե(E��E)�c�tc���¿E��7E-rv�+��~CW�B�0���-o�T�'x��-I���,	�B,e-X��^,Z��p��xu-r��)�2Q��U�Z�B֭�^��A�k/0�mx�O��W�rm�|���.
NgO�0��SA��E�2�Ԃ�ᵾ��6�u:sFp�x�+��b-oѦ�
0��E�8�U�%غk9�3Y��;fQά.@���������ZnD��9��%�ʎ�q�9]#P��m���얗�@5�-���5�Ta��͍�欨�V��(��r�u:*+���㊯��4>�l��n�dRĔY��s8��+�/A�i��!,��a݆���ע�Z�O�a۫d�r��1	
�ԉt�"~�8D�k��ބ>A&�n�\e-�[������{v'�t��]� MʦA=sdi_�F���7�gU����k�sL����z#�K��p��ۍ8d����zfOIA����R�=�}�w�6�
�$Fk*vKޕjړ��Y7�`�r�Kd��7�ط�[/D����Y"�b�=dm݉�E� ڮ��4YW� D�
�`�+��X��Y=��}v�-�n
���J��q��-V0�Z�u�4IvK�j�K�+��]Q����

�	���ȫ8�P�<}���*<�^
Jhb��W��|���ޤ}W��5>�ّ'-�Lܩ\4����OU��<�Z�����%����$e��[
q1c�uD�X�6[����^�A3�#��Ϝ�c.������.mq��fu�S������b5z��`�����+����,<�a�2r����(�L>�r���w���i�KC�o���륔R�ޭ
�C�	�A�������>W'uͷ�[�ꉰ�*b`�x��b���=|xZRr�%_���]%"��
��B��y)3^R����N���� (���$v��BS�H��e���{�ڔ��E�:|1ܾ5�4O����1H���	�1�r����<�X�<��F�6~�0`�g��LA?i��U?N��F1��Tn.X�f$[����i/���>k�2p`�(ԊY=��:zS����������(E�)�&G�MhǬw�-�S�|�)���C�q5�n8H��FӖU}��6C|����7A����j�H�Ӑ	�I���E����4ܹ��+�z�,t(�XMx�3lF����uq+*�׳W^�E����X��
�������g�&3J΃VAc�t� Nw:�IV��������t�_��@�X�IMieLl�wR�m��L��$��4R�y2t佶�+d;	���m!��Q*��5�g�Ѡg�򚕢����^�yP���lzN��NM�\�3|8
$M��^��}��B��^B"s%�D�S��줫J|mw��9�
��G���?g/P�Q����S���x�qM���s?b��!o��r=�6ԿL`������n=m�$2'}��^&����!;�US�PԸ����Aok5w�K�7�rK�=M�n�t��[��%�����;Ւ��������������5�V��|8?;�����pj��%q�R&�ѣf%�2G�,��-xe�q,޸�aPxk	
Fa�j��W'�Q���l$(�-���Z1JyG@k^mi١�;WFRm�6$o|���B�0yW)3,QK}5�Ql�e��8�(X�?�+6��'j@�2�'�e�5����ُӏ~}?8 ��.��eY'�l�}�`�Kq�4�G���w0Lw�e��|�Pi�`�7
sP�j�@͚�%��L兹FRe�����!����:��*�'�vH��ѡ�7���Q���Z)7l
����[~#��y�������S3���[b��x*�nT��h��
��!9]nZ����V� ��qo��np����`n����m�sF��Mw����ׯf���v�^�{ru���۳��5��/*�?z���~d���4+�)6颣I#��~��!���\�M%_
��@3o�$�Rԓ�N���@������rl���2���1>f8�#<��3*�]h��%�WE�7D�k��ʡ߾����2h0�r#�d�JL���R�)�������*��+���;��r��LN�H�uG�pn��?���?
�
����d
a=��B ����T��[N$7�fOn+3)���fuӳ���s���������
��k"fz�L�������bӕ�R���꽫���K����zS��f;��PB��7���A��,*���So'B%?n��p�	�[�=y�#{�F\ЭT<O��%z�([�O�����=�C5
u�RI`��a�v��40�(dc���!�l-o�<
�e��ޟ��� k�g8}�<\�n/H*$��ȝDKD����_���}q��k�]����D��v✠u�����P����,2���;��\3�����1�r�S��z�7FG=(�_8�/b��
��?U���?��|
]�;�Isެ�$��ǣa�Y�h��^�V܃C���dd_
��`��B��,KAR�7d������Rгp���dȄ�E+��H�޵hF�]5|Ӱ���S��ožC�X�`���;�L�O~&Ɍ����a�%��m4l��Jz\��
ʁy��t�����>T&C�v����w���k{��(�m,�9�i�-.\@\�A�
a��GE��;�;���bG�H�	S�\V�V�[hàށ��D�W58=�[�I�i�s�`�4�Y4� �.��ݨ`�X���(��ͩ�����Y�c���d�!%�Z�M"my
�r5�MP%�ӻU´��s��4ܽ�IT_�?�>�o�bp���%V�-�*�0�paw�f��M�Cp�����7љc�K�<�c��X�ä���ov|I�����)���z���^�y8�/%�:�*����N�0D�%'8$$.(�(��J��h���6���=n�"q@*˖wތ�E�DFK����ӻ��R^����5šLߠ����ӎkr>��10�{p��}�J���$)�F�@��P!ttV���	<���
[
� j�>���4�i��*Ք�.f��f��C,IMk�<2��k���N�˗���O�$�NW��:[-˷��{yB�](�GV����h/<��
f�V�0h�E�"�����L ,�4k��b}���3ҭ��|Y�����knLXQ�"7�~��4�X7-9��v���iz������hG6�hB��4���T���K�[��/��&�g'dh+��q�g�l،�l�
p-ۙ���VMo�0��W0�$���,[�brZ��6�kӱP��$9m����,�N7(�@"�H1��b��C�u���"�DV�B���
9���,�Ҳ���Չ*�\�R�z`J�l'ő�X����t@l���-(���*Ԭi��t�T�Z�?��އn�Ʋ\OƢ�Z�S��:��+Dž)�j��ba��10��������9�NE{��D]�L$�9���^
�PJ9J}F�������`!�?)����g��@�&�,.	Ec�2sb�hbfj�}�+�I���>ೱz�>�Tg��u���U%f�<c��c(����M�K����"#qX�(����R}X���\i�xb��0��oaZx׆�᪃Dȯa��jO���lZg�VgPm��=�<>�Uۭ��t}_�km���\�|]�շri�棼o+:�I+�=;b�z���7��L�4�|/J��
ՖUi

*��Q��Si`�h:L�;��������+A�������(i��U�M]=�}�D�0dfښ�$�f{*�K��s�M��N���!�&W�F�@��<9Gl/���~ôiu��tY�yZ9M7�Hs���je��Ƀj.�ضQ-��� K�]�2�N��%	��Hq���3�B��ҍx6�y�R�ںeF��a��y%0�\l�u��fb��������-�C��7���B���\�`����ѩ��n�]�*=�ߘ�(��<�(����Hzd���9��f��Wf��5��>�~����U+e�odO]!�����N;،U
���|�\X<F�&�1�l���;�ǘv�
�β˴;e�Bm��Z�k�#�hM����N�0��}
���U�1�$�M�<@�xk ���E�ۓ�7$�D�l��?�E�DFK����Ӈ��R^����5–Lߠ�����kr>��10�{p��}�J���$)�F�@��P!ttV���	<��
{
U5s{�e�$�4�]�j�^W��z�L���`KR�d��1�e�������m�+P�e����E]l�����<�CJ��b�zx&:�兇V�QlH���tRO����‚PJ�&+���NX����\���X�y͍	'
U�F���f�%�1���8MϠ�0Q�g�hE�/r/�n����&M��&xd'd�>��q�gSk�L�����R�:���TMo�@��W�̡%�4�P�J=��B���������^�u��wfvm���8�C��}�����|29����Y�
ck�
��:�-�f2� ���*1k Zl(YZ0i�.��f¶xO�I�E�vRo�hB H�9�J����W}�۴g
K'2ه�P�2�e�����w
��>t�wp�0<!�w"�)\�7����t���`�@�ț���j9��G_�^���r�Bm*�$B/am!��"�U!��S+�p5+-��K���w�6�ti�u�&/��"�֢�FU%,����0:��+��T̲���O)?[�(��^�
z���(�h.�ѡAD�V�8��76X�0���}��p�;�eZ�x�M�
�"_S��6��D�J�i#qO��ډq��������Ge��1�n2G+�/�ք�;�{���9��6<��y��'�S�z�XL��8vD�O���e�wSW
�91�i�R�{�;��xL�4u��f��#,X'�Vf���8aFv0+]�Z�F��vF�j�[�!V�t;΁{�Ҫn|�O�����W]No[�J'x��g��c7
[s��Z�o�
���-�0����ɜ_?U�X<�1�r��ө�07���xkl�+��f�} "�
�!1�㋳�J�K�t����N�0D�%'8$$.(�(��J������m�7�7��{ܤ�V	.�-���$����h=F3j{��5õ���ۻ(k�5��AkG�(���|
Sc`���У�F�Fe�=HR�聬�B�<*�
���x�
��vnA0���c���i��\wU�){_����<�G�X��� #xd��1�`[�8�(�V��E�$�NW��:[-���<�g�.��#+�P��J��Z��c+'���C��x�|W
g&�R�5Ya`�>��w��ҭ��|Y�����knLXQ�"7�~��4�X7-9��v���iz�����.J�#�4�a�x4!���UQ�����Ƚt�e�N�t��\�vB���Oy6N��(̆�?�4�������N�0E����+X�$6�T���J�����d��r��3���ɣ� !��x�s��M�W�3��"vu�uQ2�fw�x��I��q����ƻ#fQå�$!2��	��R$�&�\�P��5-�
a��;w��
�[�pΆ�붠J�9�1T��&�څ��x��-$�X�2W����@�����`�O>��ݟ��Y�:m�_�x�J��>����E�idu�ޝ+��A���[9à>��D*CNP�3;PT�k��*�����+�m�d�J�bA0bJ��5��e"e��i���TA��~�X<q`4����G�̦�Ș�
�tO��VKs�8��W '�W�;�N7n:�K����"d��I
E9�M��|H�$�ً$����ן��?UqءN~��/Q��a�B�5�d;���8��������v�^�k�L���rVA�Һ��`P*!
jP^�QL��=�<>�/�)l�]�����(:����BB���Z�F(	���$���A8Zɻ�%�6���	�nWJ�
{��R
p"�bA�d�ެ�ZѥX-�	��'����q�C�UHe�s^�آ�e���Ø�y��dS`Յ4$�"��t��9`%.�N�����jS�ޣ^��ٽY�Ln�O��q��TL_�:x��Ѽה�LH�Ǒ#�>,�Fz����7ܸ�54f[��p/�Z�-����g��˺�*��(؆p��U���Ԃ�ϛ��K�BYNg��"����N��Y�=G稯���棸$0΅+~j�qc��l�����v���6�a&�F��:	ВP(k���.\�ʿ��
��ܓ�.�3�@��K;?�ܩ�����k��Ec�a���!V	|��&��K{&R�2=4�,t#pc2�r�YNrPKD�U1�loW���#��<i�ݢr�aJg.�3��d��,o�ب��sC�jl�_�W_"��hG؇.&��}I
k�/�8>i��?��i0C�|x���/�R��`H�nw%��n$����I��E����(�c��%]�-`�c�b�]��дv\�V�à����Ɵ���TL�a��� W���
2�>' h~������>��ly�?��K*n9S�6{b�T�[4U$nsB`�	�1���7�ȫ�8����UX�c_�X��Զx3�~P�Gj���8���2��Z|#2��l_�>G�p�g~����\vΎ'��l}2��f�u`�*�%�%�I��F�ޒ�ܱN�FbJ4��a�$KP���C�+�w�Li�>F�6�`��2��b:�/�@�P�%��CDiu�=3x�5}���u�ѷ�_}��PZ�;Jx��S<q��,��]��ذۛC�fd�ϴ�?�b�-m�Y�SWF�Ŀ�I��8�h{
۱���65�b�?	�m�&?�q�����i�j�v)gԛ	b�I��d6,�`����y�O�q�c쵓�7�����?v���z
����n�0��~
Χ�`{���K�`P�A�>�,1�:Y$���~���aCv�D����g��(�o�Ht��1��f�(?���7��j�ٱ��@/(�k
����0�G1��*�V��B/F gG���
���n�G�p�
JY���*?-���Е����j�ݯK~��$KR�-2BD:��eMc�k�������@I����/��q�>m��zu�B�8��
�߉���"�avr�6:)l�,�3�p �2l�	���c��P�[��m;+�����t�PMm���i��=�A<,򲼀ށ�����b��C-^M����,�ax�1����?�KsVW������Q�4Cr��^����7B�-�/1o�j�H�PM~�w'����VMo�0��W�0@N�&�i@�bX{�e+�n0�3�0[2$9mP�Rl�3k�
��#�G:�*�稣�	П0�
^�>-��j4���”��t�7������[�������?+���r~rR=�	ܧ��W���܂Ƃ����֥���J&\6>��S�s[]iB�}���G��udz��g��b=±!���x�;w��ȍE#O��lV��oF�
� d�u.$�*��bͭ��uC�WJe���g�Z�;Ԥ����o�~�+��@l|�a�*�dȺ>y7a���^}�V�U�rwUO�w�:]'!�I;��	�P�S!��$���R�?�ݖLYg|Rel��ҳ��ݰV^W\����PQJ�&qʨ��9�l��t���������6�m�R�N���ъ�}
�d��ʥ�*A��g��=�|õ�O��,eo,	?va�s�c��I)�[�"q>)Z��Dl*���v��uRc�����Y��ӕ�W=��F��$�vE�_M�v\C�%0����|��߅9���M�M٢��}f�>�Y�C��W��o]�{�s.��C�[�{�}=��F�u�s�멾��
�._ϖ��?�����b��c@�Z]���ij�����5F�\������1kL���>�		�ҩ�J��Ѡ�!�i��X���}l�T�4�j�a�E��?�����/���h��Qh%����
@bɼL��;z�?1/�p�>&��Oz�8��I�G��}��w��X?r*\
��4�R�T\^B%xW����/Y�q^>
��Yko�6��_�:m��$�yx� i&����"jJ�,6��J��������LY�d���{�<�Ag��iWuH���yB�>G���NN���'�yHt��?���u�}���$ק(!)IVĵ��OS�0���EA�l����(�\�A�P��yf���<��DZ�����mQ6��Ǜ�O���P�aaNPJ8b�J-	k�#���~�|�)�aO�����i��㏿�K�7�.M�,p����[��8E1N$��J!Ņ���8H��f�|��aץ����]�e�#��vw���Os��i^�|�M�{9h�\h�����b`Y��J��6�4vm�	�L/ �f�s�񭁽��iKb���+���>�b�Ĕ�K��]�LD�Ϙ���S]��e4E��%�:E�#�p��<<�M����Z�S��7c�i�����D<Dž� 1���[9�lÉ`W�R�3,�7Ek���dI L8^�,u�d����K��O�k��t%NEf�yF���l����Q�������XSh���e��X�L
�g��Wi��AF.'���lܜ��Ɓ�{A��@(�8�k��>%`	��e��b$j�h�h$l".�C1�M#�
�!h�K�����Y��m��C�,D�l�t���ZW��3��GGG��%q7�dΐ��J�%
�'�$uZ�-�c���'b��舼;!�����_ڠ�[��D��ڶ;�@n��X&2C}
���X�TЯ_y��+�kו�N�A΂C��X�#Y����ɔ�@�mU!�"C�J:Ax��e2�$��,�,���%����h�e N�Ě�M�ﱅSAv��"G�$8%{m܀%*��v�b�VY�hT��<'w�h���SJ�0�tC_$� `kZ!}��ʔx�i��ș*�@�y(�4����@R'���p���Q<����Ƣ;��,��p�нڡ[����B��a��9�
Z 60��E��+��fP9#_�
H"�,�_�u�����-�Z��V��}7b�tڎ�)PLS5&��ͳ�D�Y:1���.��y=�$2������G���6���n�ѻm�*��|���������/�S�U����f1k��U���ٕ��H���
�S��J��	(t�Pt��QO�za\A�Ȑ����ҸrIȐ��g�;�[t�cue���_�\�!s3Ѐ���Th����>P�Ru}�pY����R^�Ze:Ev�������܇�4���h̊�/�XP��c+�xP��ȧ�K�r拱	}��f�#T>�ԉ�R��Q��m	;*M���I-�J�|G[��E;�F���{��ƤʢM���~��Ƃ�{��������#@F�=�i
`I^^�J=���l���RyR]cM����'��;�mU�Q���H���Yu_<�t�n閿6�ި�e�5U�@��Q-vTi�:���
�Z�Y9R��	3ou
z������a$����@t��z�^��20,}	���,��d	]R�B@<���i�Z6E�����d����T����h�7+�6�U���N��*��dG�=��q�"��.��U�En��MGӈ5��vR3a��N����6o�j3m�!S4GZ�v�B#���6���"�F����q��@${0g��]�L�,�7:
�Ŗ���W��O��O$��T����w/_����7�q�C��ZUn�U�c���+U�
G�R��P
�^��c����H�]���!�y����v!v2�:�M��$9�Nߎ�ק#����zw�U��a}��5��@�8��ޜ����\�г�:���NG���z�����t�����)K�����zs�J��]����UK��ޠ��}{1xx���}{�q������Q�$nIo��Ʋ�q6�o�0X]^ŽV����i�cM��q8q�?�`��%x,���_W٩�����n�6�=_q򰕔:J���m��6��A;�A&fP-�11��Tb5���DZ�,�n
ı�N���'�	F�zt�L$���<���y��i��3L���Is�����������Ox�sttvrr'�SA$�ᕗ���5��C�j���m���R�|���2�	O(̩~��C���y���p�Q��g���)l,n(F`��~�����&���)�N,�r���nu{O�2V�KZ���[GvbD��5:�Ȫ���e���T�JV
FG��%yfB��o=~'���_h�������hF�0H(�T⓮
z	o��(�#�%+�yA2Eףu)��F���#sE�a����'�����\u�`.�z溶�+��0�2��12h�ēu	�b��5�_,���$����v�E�*���@WH�R�e�oI���%tj�0�����z%%��{�6�9j��!�K��&�
S���>QDk�,eՌP������'��_
��B��Ҙ�׽Qh:���W���K�T�!�bdp�©�B�Q�J�e��d�l�c�Ę�I�1˰n)�A`��졸�}L��К��w�<��]^���_���v��y�e�5��efR�ί]��e~v
�
�s�.�H��Rb��I"ũ&�k�r!��I�K�6ް��X�M~�`�w��I�5���{&Pg[@x\���JdS�o=LZ������3ʟ������z�S�����܆霒<�%rj���A�bC3
X"����e�i�#H+Nr��,�������T��I�LjI��@��ФBW/)��US�
	jI�ps�L�G���v�)�T��f9�IH��r�Ҳ�POT���@X0I��Ryْҹ@��0PK��l��lf0�L1���Ipr�]�=�-��-�_9.Pf/0��+�v�ӟ7�q��&	6Ѷ�x���{��-z2l�a�cKXCbIs�>Nӵ�qFl�eI;9n�݁%{�H�'UV��W�t���U[PW����0k.�����
��L�댡�;<4f��昦���g&�zUc��{��R,�3�0i0��@^XX[-�
�f��)�9��矍E
t�I��ƾ^!��k���]%��_6��i�a�D)Z�
�hl&�b<�l���g\^k�3��[Z�%��H�(���ÄĶRg�e����s\����{
�
�aC��f�6�㤯э��fV�8'E;�`�z}W��C�B�#�%^m~U�W�m>����95g<�ܭFNV1���B�8�+�&��$\�y��Õ	I-'»FP�N��><��&�����:Nc�ӎ�~J�ެ�[����;t���&]?le��8œ2���v���=��v�$#J��N�I���D]�+��
cڅ6-	}t�]�o�(J�ڿ�ܛ�k6m�h�ei��kC8�Ѧйik��=������@,\6
�G�BQ�~m\�S)ǫf��_C�I��C���ux��`��;���Q�ؐ� w6��$���J#�u�E����y��76�s�%fs�\R�Yr:�0�n�x׏������`Y���"Se��C7S��ݽ�[�t�����[��&����J�=��'����2X�>J�3�9�eݽ�ӧm�4�/���K�Ȟ=d�������-E�laNf���'� 	�f��s-�ě�'�$��Ei���Y��K�4�����J�C�а�M��E�2����?�U�g�D�ߟw���,��7��n['���VƙZbj�6L�����^u�YGQ�� >pc5���f̜`'z��}��_�Rh\Tp�l����j���۹�4Wl��Z��=zK����p��,�����)z���Ul���ޝ�T���t
f�l­f�Zf<��^X��*�۸��o��c�*�T��Wko�6��_q�nXXr4��8A�,�
liФ�a�i���H�FRV���}��d�y�0#�-�<�u��8���rixt��V�un� ����7t�s�QE[rM7Z��SK�͕6	]���47\ox�Dw�0���S�ZR�hiɩ6<�Zf���|{�#��:۴RxJ�Rnm5�N�`4Y���D��/�.��o��`#�V�ʪ��ԊXp˛]~
��ǻ���}0U�j���B�|}���ۏw=��E&L�B�-����3C�ޘ�JFU�h$�FE�^�k��IbY&�P����Z3i�»������X��s[x�,;�Bޣ���H���vD���Q��@[@�mt}i��J����yk�%��F(��2�;J��,�f܈���ﷵ^���K]��
�l�&Y�|&��4옚��S&E���)�Y)iĆ�B;�x����`1�-��hQ���X�
DY�:m���05�嫕/T�(��t;���uJ�����F�u�8��
���I��+�ʎ�g%J�f�m�cg�B�
�1�֢�@��R�S0��T>�(�z`��("��؄�<U�x��P\x��(
��|����t�2�L�J^+�'$�;E}j|@Lõ���Q��Eӛ�ޙI�i#�U������qR�5�I��ؠ�����I�&$ȕdT*'T��#tZ�]�Ո�Ɨ�(�C���̵tU@N_�&�Pu��Jb9*���}�\7å�r���.,�M�FE�lj���:x��+
d��r��\�C��S�h�z���;�t-䅇:/�}�F���Y�{�`����-�j�ި`�Q*Cb8u�m��
���t�%�����ю���I%���Y�%I�?wQ�hU��/ӧ���)�6	[�A>e�(f��aF<y�P�>�ϟ�'~����5�u�3H)s���
5����pXO�&���1ݺ��&��c�P��ef�q��*�
�:О]��:9:�Ҿ���q�9�Wo�~8^�ٺKt�/�x㬫poLH�z�Q>�/��������}�K����@>|���Kv�zB�_r<�5���m0��.Rh�D��A
pK*����R���}�)��ӣ6�
�Q�Ek�m�rM�4pG)�����n,�כE�lw�p�����jp�a:T2�r��M��Z>mխ�'��	]:�Gzq޳��q��0�ɀ��^�|�ۂ҂�����du�le�<|ޘC9�O�&:G� �7~�_u�=:�:\��+�>��YG�/]c�j*p~�wùgNaK��g�L�q���S�!�;$�eˡ��x��
���Y���v�}u�L�Ҏ�'��֪���M7׃��A�*���-T�W��"˸�=yV�O���Qx�{��{V��ם@�	B�b���,�=��;i��/�ыņ��d�ut�D�m��L�9�]�h|��J�r���_
w2,�A�:~��ǯ��A�ږ.��H8�mi�+�œ%��}���C2~�i\����;�?*����\��TM��0��+��5 �B�8������bM2!n��(���;�!1*5'�~�f�ͳg�1|��ޭ�=a)7�:��qs�*+to�2&A��π1��|L
�o�ᛍ��
��|����>�L��Y���
v�����Z��L���5�R{�v3�f��Z��ru��K�n���b�=�Ҭ0
f?\��Q:#C�&Ȭ!4� ��WK���Ueu���&P�uB�QP[�5�<i@:%o�\��mi=��kIY���-�4]$7���XȚ�ɂ�V�ʬ�8�wP��$4���U5��)���t�tU��"��r�ݚ���l�R�uţf�b�=k�}0fQϚa�pI�Q��!���6eD��G���@7����ߜ�֠~LZe���W��)/��l]�T*?],<�#��s4�O�0����94 ��	�gE�K+��e�͠����ߨsx�,�$��rE�e/�G�l��є
�* ��|>�4J�:8 �r�o�Pt�9���c�{@�I��/pj!Z����fr��N����F��F����U$�q��ҏ�TY�]�����y��W�/	%��l�h��?͖ B���_��`�o����N�0��y�;Y�"	�4�QQJ�T���p����Z�
"o����	6��}�s|\�(����.b�"?s�W�~���V#�Ȏ=�zEɰXS�%,���~���;�2k�� I!�brv�a��`p*a8!�y�go8P:������iy4���4T�ݬ�����N�$��"#Dd��9�d�}�|i�<=���8�n�oQWO�ys��^ЫS�ę�j�Fx$:�Nj^������\t*R�HY�i�Pʰ!',lv���A8�B�ݲ]o�9XQ4��ަ�jjk�[�H��M�)p:�a����x��M���,�H�Me0�!�Ƚ���si�P�wC��B��ט7u5K�b&TS�O�	ҝ���ϩ�M-Ҩ�R��b+��Ă�"��̼< ��Y����U����X��_T
RP������UU�k5��Ԡmr��VQo�6~篸9����m�K�q�`ХA�>AB�g�
%j$eGC~�����I��z�E���w�=�%I؉Vk�la�Ϊ��/�����D�4���¥5_Px���4֥0�����eʖ�r �D�x����C	m-	��Sp��ClX�
�C�}s�eM4-�/�<U&�p�8��:K��g!-a�F�Gp���iŰ�k矗}�t�C@ajoU��B]|�X~:�y9B/R��h�;�Ә�6�4��`����h"�kg�k�x
\J啩���ˑ���ڿ"����b�'�$�i�+Mw�r6ժ��B�㉪c�J���I��@[��6��]x�6�Ev�0����Ҩ���K�V?��G��4(�o��*"L�SE}פ�4��W�«����~`�m��&-b�R�D�;e�A���k�f�HF��3�Y�2��Tu�� 1⁴��eE���a)c@�twcZ�4c,�M���h�A�W��~�
"�u�)�{$�h�7����H����Z�
Y��bloo�B�U��clN��:W�V���������Z�bl |����7P��
j3R��-S~���7��@ݛ��U����N���>��SKI���UpD[�˘Pka�:�R)�*ʳ�}L�����ڈ{z��لB�H�/UI��ɇ~1(��Ѩs�ٗ+X�"�c_ί�������+��@�^�Uӣ��k�4�5F�]�r��bDZ�G8E'�j����;̓���G+v�$��G���"
|�g����J��w��w�AhB�{L6J�2`����S�ސ,�h;)�i�X0�c'� ���N���-u낝H��[��z�}�#M������l*M�TF�İ�O�N@��C��H�H��M�)�k���I4 ���S�Э��O�	I$>��I��a�E����	�iռ"�����0��C����~/��,Lǩ��77:�^+�K*7
r{Nt�l0�W��A�c��h�/f�M1Ѽ��F�]�0�HB�&N�ʇ-�ū�����q���<�m�H����+gB#�i��K_�hN��xz��@�D	��Zm��8�>��w�R����e^�$�d��P��) �-@;�rY�0���m�66`�aRw���dK~�Q��VK�ø��c��x�:d�K�
�n�dA�{�%
�1�QGB7�
������
>S׼�,����d
��0�	�B�#�� �ڣ�؆�V R��� 6jΙ\DS��_����g�y�h9|xTRT��ii��*��/�O�Ѹ���4�'�>�Q��I
��|�2c��k�'�s<�PS^I� H��$��"��%�q]&���������7������Ž˗ƒ��a����}�[�H����^Rt�T���3��O��?W�.0�����~�`���`�A���]��<p_Ht��d��Ow�0��?��ƍ.���
�$KtVg:8z: ��GAmk��b��fs�0�-�q2y#D_������a�Ɠ�h2N3�:c��+XF�B3�q�@<��T)��W�#<�\���%
I׵�9{V�E�U�k�N�����!<*.�|+�ym]��Y3+��C p�Z����\^IY�Q�Ux�-�q{���Q�:��eYK��QVg���?�5wQ��0�c>5���w��=;�q~�C��s����%{��jd���c�8d�
�
.�*�;\b��H�V˦�al�[�<��'vdg�QHb�v��v)�-�6`��6RQ��\�lA%�Y�y�����k7��]�|��{._凫��z���o���rO�f[֛���O���ڑ��\q:�30y�i�u���p�bb^鹨1WL��5�X�`�wY�I_MzgA�9��t�uS���1(����늇Ox$�A��p!f>L�\�C���qc����{�D��sN#>[&�Q�g^� ��y����3�3I���l���I㉮g!YR�o4�����7P����p�IR��U�{k��k�:�	�f��)[��	�
�Er?��d���aӕ�{}�^D��vP���Y㔇����NI����4�u�Y0�F۲j���zd���q�;g�j�a�Qh+��aS�3L5M�����ak�3��
����/1�W�R�??G��`��ݏ�/x��;��N��<����Ѥ�E��%>V���_�aLf$dX*Q�xLh��i����wUA�&�ŵt
�4\c-��CY���Vf��—�M"� p��{q�����I����ee˜�j�<s�;��y�KGuKMJ\�Ip"!��4� ��t���h
sU����/(]�\��&�4��抌���;0ñ���	�]A�lQ,O�Z\+B�����d�p�)s�)�����2[u�LK�ר�]��(6�J�*����si�ޟ��)�:ǽT�4�̈K
��b�f�q����gl�o�u���A�+�>T�0�o.�v�/��&��v\���_��i 
�]b�c�iZ�Ӽ9Ƨe��e|��1>�V�O���Q�\��4���ϭ���,�s{�?w��f������V1������^����뵺z��^����絺y�^��T�����Xg�צ��%Q�t��d�n�J���m�MIAK�<��OY��ƕ�a�K��]N�m�n�˪��}<eqj�<�Vy��7�C����q���S����.���A�`|���p�1`�M����p�=���/;b���L>Bx$2���� �m	aJ�R_���F�;c�=�z`�`�LnÜ��2/��]���d�a�%����c�;�6�޺��9-�lo�y:��� s�Gg�V�M�qܛ=7I��f�c�����z���$��x�6o���wtF'����U:YD�[G�����	���{ԡ��*je��EbK�e�`�S.%_no&�,VA<�b��VJW׊	�`ˀ��R�CS�D5�����,BQ�ڸS��QR�L+�.�j;��Q�,=Z�T�J�İ���ñ�W=�*�����f���v�Zt�� +㖨`8�d!rQ���]H��l_��M�F{�#�8�
k�2��	W%z
�}g��b�t��b���˩�@�"�S(��`�W��;�:�T՟�P;׵����jj��v�����/]m�It�}��*�b҇��Z;�&���Qo�0��+��V"!	�B�FY�!M��N�oI�N!���w턵��	"d�����^��s�!�1+#sQ֒oR
g�9�?�u�`%�:gVR|c��Y�S!��,[�@2��K\�N��X$rZ�(�"�b	TE�2%o>��uƠ��g��@5�Z���a٘���*r�~]�o����ib�b���� ��6X�6:Dp���rw��+�BKU�(��r}��y\��&���Fc�j�,�/O�TZ3�J+e4I3%��"��h4I�梠,V��7����l}�\7`�sM��L�R�u����3G6��h��KSũ�oؚ�ZT�v��L�pa�OB
OӦ�\]ŕ�"w�ugU®N\�=y]��\���Z�8��т`$8v_����i�e�o�5��W9+��pCe���HoS&1�</�|s;��OBݷ�5�Ę1v��p�V:�X��,��]+�l*��غ��3׆�pM�f���e{?	���"�s�*��`���*����3�
�
������#�D/Ԉ8ARZ�W�K� (w���D��k�������く����|���c,�=�:I�Vx��8�Qi�Gv���!�����A���zщz��^�#c�:�d��Y��:i���;����M�A��m��k)B~���CO���o}����VQo�6~ׯ��aيX�e'+줘�fk�4	�c)�lq�HB��hE�����̊��Qtd��G�����
��4�+]|�Y�)����­U���OL,�K��„0�~,�`��HT���
����J��%ȳ��`l%nX*Zf!�VO]��+n�2�\]�_\�_���.�D�Z�E0hA-��iy�x���Ň���%m����z~s���<���@�;-Rnj,�!��w�VT<3�Y�ɜ*
�Fh�	�S��*`X�r˕d.o7��
&����׋:�~�]p"�|���ϵ*l����0�ϒ$�*VV
�G��\�����ε"�lF�ֵ}ɩ(�>f1�=Uh䁥'�ݖJ����W�IU����T6`�7�Ii��ͻLD���)�}[it�m-O2ȑɀ�$G�ukN.�6dZ�o�uZ�KJ )s���X�"���A�3,0p�֢<U�o���HC�%H�9dGé�u�P`͐d�<P�5u]f@�(j��*�jXw�/��a�׷���&�]�qg4ꌎ������Q˭h�Ȃn�v0Vi�ƅZ	�ή�AҤl�gi���5��K�sQM�������a��i���6��?pۤ�+E���)io9�����=�T��(`>�X�;��
��oۂ��*ͅF/���I�+i�`���p��֌f	��	�=ڝ��|g-M�,$���������L�,X��f7!��
��K,>�lBw�x��,���x��լ)�]Q�����8��N��3��!�7	��M�ԑ��
�3!H��u�A}|�Ѷ$q)Rr4��p7D��8I�{�whޡ��F�ž7�f��R}�b)�z
OS����O(׆�Y��ljx:�Z0��(ҏ�Ml��x8t1�������s�DR�i��h�@�)�mʣ��ɋ��q��+�Q�pr���m���˄�6�x�a_W��C���:�Q�w�3�a�Q�oȨK�f~<��k���t����d�<_��ٙeW��A�4ڽ{C�^�]:�܌yF6�.QZw�Bw�u�6����G���1�B��<��v�y���/;7h��a_m Oͧ��B4"�
���ko����W���d;�_�d�l6h��`���je� �w+�ϗ3$e%C�[$�3|�9�!�3o�r}}�����_|v���~/�K�!b�ރ/�����~���#x�8���
x�ـ�?��?�����\�ޯ�΃}�vsƃǃw�q��4c��?��x�x��A�(�#��ݛׯwI��n=�?�����>|�������b
���=8���,k�̄����/�~mNh��_����/�o���o�e�S-���e0G�a������,6U%Ov�б�zs.�f��8�ڹ���z>})�����'���������o7��}�w��ݰ/��އw�77��4����r��>���zv���&/ׇw��C���m��x����~���w�X���ֱ��T�}�O,�{�1�^�ۯ����w���y0��Rj���,r��L���|�/~��9_�\��#'E��dQQ�\X�R$ME�Ud'E���`E�J�h豦�ꉢ���Z񏢬gQX5�DSO<�}��<�'���a4].���`+��֊��,�ᓑ�衈nb*��0Z�%mQ�=y�y�$dҤY�b�mi��&�k��d(j�IMB�p��)ښK��o�<��"f�K��u�ӽ�o�$��O��ظh��e�0F�,�ȒgdOƢ�(��,�0(�dS�uT�3�OKu��u�KC#!%MU�Q�x{����ٶ�p��i�|��������og�d��������bs��s�P�V&=e�2��Y#�OOC!l��0{NX<	O��)�0T�',z�5|<�N�7_�2�~��:�W𱿀�g�N��r)�W8�Z��-J��g�W�:]���ӯ%�ڢ�/z�uz̦�����k)������[��a:����ػ���>>�x�<?r�������M4?x�2<ǭs�6��q�V�6N�8D��8�3��ެ�E���y��(�j�sq���ڸ��-��ڸ�Ǎ@�ڸ.�ZV�8l:��$�ѡ�b) \}��.�����S�r�AJc�9H*�AU � �
W�l��P�U=�P�sR��N"��A�:�x�d�
$3�C��*�ܔz����P�5N~R(�*�ƄadG-C�㥣���֚=%>�ʫ:�b�(.]�@R��+�dI�ͥm!)!m�0vՊvB������S�H��0(h�@��\#�Z�$��FT���>��hC��{�0�COk3����:2a��~����y{�9�bw�R�z\����q�̺�rq3�x�Mc�HmD�K
�<a�M�K�c;-{\j
ʰаǥ� (�P7��$�HBL���g�TB�PxL9�8�׋�Yo�n��"�^�K&P�g�^vJFR�*h�tI�!���4����X�jE;W=0dXI
AU�%��B 	*4��X�HI�4&�7�l��ʇ�R���Bs�T�n3%+&�;(��&��X�O�M����/���>C����G�+N
[���D(֕'��'�+��
$����gHu@J��is���q��H�BG�FU����C&ԉT*J�n�X	�"D&8���﹯(�{-��*Q<����Ѡ;Xr�K��`%I×
�MsʼnV�v0�1e�ޟa�nK�P�¸��1�L+=]e�?�rg@K�\*����-����.o�z���ttϝ��	�
���r78=�����vU�1gk��{���K�� ���o(�U ;
9���ѹP�"��d�(��u� J&FN���ޜ�aQ�y�8����6�Qk,��Qõ��Q͗g�c��KY��R�z��B�:P�Ճ,�RGaȎj1}��8?�Bp�D�����Չ��A�����|ly�:�~e��A�H5s|�ξf���
I�D>\r�_5�;#��_[���DCڈ#�U�3��:�`^8��D>�q#�r�V��F2�]��
�`��
��k%#�'����t��ogֻ��9�_͙G�����I��h~��w�K= �%T�8��i����7��曺�1ip�q��������N�0@e�>�؉�.?�+]�eѲj�C��N<���LZ,��=7�����8��r�b�:�dbî� Z�� �\^��&b���}"R�3ftYd$	@�aL��gZ$�	�����FB�1HK5B�$-$t6�W�'��t�l�	@G�$r-$v��3����ڧ)u�b]��XA�II���2ؙ9�>ݎ�&Ķ�f@�}Xb12�D�kZ�`�8��9i��/=�T��M�<����R������:�s�X���q�[:����IK��#2�iπV9����ٗ��l�f�@ySyB�J���i=��]	�&�v>���	M���ek�J�=���}����<����T�A�fQ+n��$�=h����\��sZ,S������`�]��^�� ���x䤭�5�;��M`���<b` 7�W�б���ر�Y|�b4��9�=����'��dݗ��{�c˭��n��ˈ��̶ꪅ��]5`���~���PC�fR[N�?���g`@�d���L�Ů�� �Ɉ]-=&��	e� �Tc�����/���x�0���uI�
M@��s�& ��i���*�8sS���A1r�H�
m�T	���Z[j���J*�@�	��S�{IU���u�~1_E!L��������qZGZFHY�"(��i�T�S��"��i��՜)�ė�uolr41�D��)<�B�T[q��Q�
�s"L	�����՘�k+�a�7����R��R+�2O��G�O��z������1�f��r��߷���smx�.�<_�ۛ�>�5�~���ƪ{|;��n�y`ޝ����n:NG_�O�78�z8�r���|���`Pw��]O�;�hNͪת�6�f-���'B����g�{RQ}J�h���?ӗ�G�����_Ow~A1��VMo�8��W�:��(��i�h��&i���{�[)i$��H������;$�!�r욀!�3�3oތ8����_�HQ���Ӣ(-<K����WoaV"LU�ըa��/L-���T�DpVU��
h4��0�F�RHU�P���:HZ��2#K�o.�خB��
��]�Jk��8n¡Q!l�&�P�׫�����>ؑ+UuS�E0hA�CX��d���/߾�lL��Z$��-��o׳�W��王L��E4$|V��乁�k�ce͜h"�WF�L���V���LX�$��j���\�=����.�g!0�NG�I%�-���0u��C�1�0������u5>�J-�F��-Jȵ�}L������
�D��Q��4��^�
�?�V����]��O[cUͼ��`T%E���=�	��G���^�?����%��J�w��H�k��

	�j5`�5J�<W��y�B�
��z�NO/A�6�S֝�I?k��������T!�S��+D���%����tb �S��u��[�#~�gͭ%]���WrY8'�;^��T�%�E�=�W���!�c��3�|�̇��}~�����N����`R�f�cX�=F�Fu��v,�6��M��<{=G�Z=rkxC�b��w���;<$�O�4 h�4Sm���F�LCX5��n�4.����@HBf�P�fa���j���u����74�=�.���v��	Q
��oN
'hD_��_}���Zt����~���l17�4<�a�Mi��
�{?@�`��!��:q�{E--��(��-��."���[p�Ӥ�p+�Z�d�['����=��尭*;8\���q-{v�
=e�Y�$u�J�ܨȟo�ڧ"k(�9J�,�6�B�"�2t�J�{;�K�����ƽ�$�qpVy��� ���`��j���9w���2�c�_@��OP���_o�0��)���JM��g�(�R��J[�Z�T��ĆxMb�v�h�w�u�Э� �����sOB����DD<3����h��-E��x�f1��L6)�0���,�rKm%	�
hn�^q�Y,D�qH�d�l`�!7�A�1�XD^�~c7	��7,$V�Z��U�0Te�`)l��!������$�O�8Y�LU�-�-��RV�v~pt7�~}s�.0���b��F�������n�E��L���6�7�M�%�PT͜+Te4I#����o+�f@VȌ&p9���4����f��Y)�����=��'R%�� �|1� �wEx!�6M���21er��I�.b?��Z�bƍXf=�S��ÑjP�z���)�!,��F�(tc�Ϭ	#wQA>&�6��,bd�?<�F�9���ؕv�x���� �]K(U(V�	p� q���E���b0|�p���a`n�J�E�B�䉺��|���X����a���e�x��"����W���r�,o�k�~��.�XA�Pc�B<����So�%�"���^����󥖹����ϐs�S	�#��S1�*D夒��t��c`�������Ӌ��'��Z�]\�Vwc!oӃy"�dzZEIS�'=�S<���V����/v������X�~����SM٭Cٝ���O�ٝC�_�����O�-�����`���	�Y�5{i��� ����w�7��������>	��Z�%��Ih7��n,��OB���Nc	�}�
%tw%����c�/�!�[����	���oo�0���)ny�N�?��M��Y�U�ڨ����F��ʦ}�a���ZhI�������샮k�2�cmA˚�u*� >Dz}SK��9f�d�;��+�R�
�g��90�1�lj��)��C�j�EVC���8��H�4�Iy~���3mmX�&
H@*Dyl�妨�&"�"�P�������B�m�4/3,0p,��m�Re��$�߅_�on;ƴ�D��uq}�\�߅���EB�&WcCT�J�
<�P"��IW�dP�F7F��S�W��P(I� �@\.���*��[�Ë�pӘ��i�,#ŏf����K��R�W�#���Ӥ"�FRW\�\W+x��6kI��h74�1)�ߚ�
��<E	����e�H��(���}h�p�f����z��,��5��1؇'m�?'�*���5����=��a�h��Q�s�i O�"�Qa6�f�S/IV"������E����q�G�Y38�H��NRvue�S>��l�k�*im�p�(ڽ,��������@
uY������ۇ"x�����](��P�>���~��⴮�,�>�IO[���0�;a�>�`�R�5�^���[ w ��`ˎ��p$E�;a�,u$��w �N��q:��FR��V���������w�r�.û��r�O��([�A5}G�A�/yB��a=3�=��&���
��W�S�6�_�Mhoj;_Л��r���!��>�&�!KK&���߻����(�biw��=��u���(5:�_�~�~����J�"��2�C'��U�=8�~
j�n1�Y�5�*BHXJ��\c��(�����@�B Եa�h��ؘt�iU�[p�Ǖ~69���z��8%�P%�@��р��`ٲA��'_f�}��6&�4r󤬓ϗ�볏_f�ԓR���*��R"�4�,��JU�d��B��Lh��<���&�E7\I&��j��"cҴ@wu2;��U�\��qƂ��Oux���t �p~��U�}��$�s�hȜ4s3(��겊r�e�͊T�4�a�D1Ò�-�H���0�ra��`3N<?��ILF,��ȑS�\.���*ꑇ~dw�:�з;}��ZX4߯���n��q.u��ID�@�Y�;��u�3�%PÒ�+���r��y4�3
�Ȩ��6��c��e}?WL~�
2�z��r�CU�©�X�^
�f��
���r���!����)�J-�o����`���1�z�uS�b�ZsI�DI7`G��]����b{����`ﲺj&�KG�އ�Kn����D)S:?"�q�T Zm�v�<��<mva�%-���Z	�����'%Q:e!�8�K����`&m�5R�w4.X��vE��'�/<���hWD�%��f�e�
�����59u��\��bE(���Q�j������~<!$M�N:�R���&�,M����]�m6��m{�I��z���p{�����
��Ċe]p��p���a7�C{��:m�-5�[��?hd;�����5���>�`��l������2轘�`�|�v[#�ʘ迀@��������F�[�������M"�ݽD/k�/v��v���
w�T�?�jo��ڡ�&�G��=f!K˗�7}���7�]��#��e��D��Q�1olY��x������l��}�i��HF���0�@��a��/�>���/�/��{Mt�OB������kj�o]���<��Zms۸��_����K����u���5�$q&v���d��$\(@%A��{w���8퇻�d��}����jA���;D���#-�%-�R�\�e4�_�E)�IY�I%),kH)DN��% D&�3zsDƇ�������d6��Ǐ���1��S�2"�D�/���~'R=�w�I�ӹ(h�b �'�j�ݢ*%�P���Mr�g
�QL^��@\K�B�\HRR929�D�fy��Sؒj9�eR��\d�Np�0��2���SQ�p��%`{��!��WVG���eR̨����>L/��:��EO�JT�:AhY$�J�|��ӒkGW��)��Q�9�2��zi�o��zρ1M���U�W�f��%�ӻcz:O��fۨ�N�L2�K�|���X�H�fs9"!�X�HN����RA�븬9og�Z�Ho����`�8��c{��A
�#�f�N˴�}f�2y)~f
�xV��<[��q\.�]B�5m=j�*���
v�+M^f��B��)�ZLh����VJ8�!�˂���xK%kOA�K���	Z��JC��&_	�o<R�ߘ��KJ*���V�a��4�TV7�wo$��D?�b	�
�B^��2�4)��8�g�G�v�@n�)%�F	�L��=1]��PS@7OV�F�d��H8��'�r�/�#�
a����%0
��0$q3�5k��@�ޏ}�J)�3U�%�V�R�Xi��)U���dضex*��̀�8�!L�pj�
Ѓp��y1��%p� i����� �~Z
�W
%�G�y��k����dA7�e^�)���>���?�A��woB
?@*��ZtlXG�T��R�}��T�4\����JN����M�����0$+G�*9)/���#l����x��ʄ�$��zނ����.a�~'X�UӇ<�|�Me���x�<k0�Ƞ���*��H�����B
R�4����m���T��
$�d����}<��խ���ȓ̿YpQ�-%�v���6�>�^�M���_��'1ar����+�Ϻ�$��h�z4r���1y����T��v���
����r�1��V�;cWx��.o�顸i����:v咦l�%�����5-��G�M�bA3Y�iT�t�lr�:��)Z���ܠ5k����֊'�5�O\7o�m�x��/:���<������	4uj�gb����qw�����h (��JA:-�����Nu3��9��$�$�s�AA@��f�`xlQ�Z1����j?�7h7��h���H�(�"�GZN���;�G�s�I��}��=9!���o��^~����o�_���9��
#J䈄�Х���
s����rˈk��@�N"%��kkf������=�s-�u����=�=mN�+�2?� r�tN��s����S�M�!��Z��.�x�d�B�o��T�q��UE�5&�`!�B���'U�@IBM;�V�ֺ�����T�:}ș��M�)�'�_<�,M̐���td��]�w׉tD��q�P�(!b��"^�)
p��h]%j��NQ�!��&�;l�H� "����/ F�8���Q���Y�6f����qs6�6�,N�li&F���.�j�
�������!l�5ʾ�zc�?\5u�:v
���\���8p~���i����?�$���� �}R�?E��K �霦_��N�d���.�g��՜	*0A�b)WVyV�O�g�3dQ��^ֲm���g�B�ݥ��jnNȒ��c��_|�qN�L���ޞ[�#T�G�)�֣Z*I�Z�"��Y���[��Z,�m�?9W�;��4t�AzCJ��A�����$����XK�o�$ݺ]F�2�Lߌ���ϭ� Q�I}�(���p�)��ԩ��&�{�m����#;�X��z��]�͔��ǒRbM��؏`KA��`����R5�0�u�|Cy��+�*ЀF�T|c�=_�FB]�t�!p����^�rvB��+o��'8\#��]��ћ��8+�پ���[��E;�6������߈~��5ީfa�D�m��(wG�xIw7�fH�oj.E��:83�H�WÑj�̋��_:n�N�������%>1�el��
�{8qle4x�90�i�����Qc�%9P��[A���7��>�7�:i�k��9T������?�ܮ��t-�9�Y��~঩^�=܉N�n����I��l���E)]C�w5X�.��L�/5��v�I��/�ёu��[��{=v8��J]*}(��{������_H�G|Gػ��h�m%uݵ�^QC����ꋃ����l�;�yk�����.��H��S�ʞ�
<��s:O���A�������}�w 9~���p�r�h5;'�#�=׮�:�g�:f���:5�E�n��
׻B������V��PQRIa�
��!�7���Qq38��A�hݾ�t��=PB���!������:;?���
��:1�*[�{b&�6���)��^Mע;��3�F�[��a�zƶ���ԓ޲��ڻ�����3˅@���O�U#-��J���f4<ގt*Ҫ�3��0��ERl��&��Uqg"�,C4�;��m�dmyM�ɿXrS���-Bg�n����Ī$��0tW�y�e�obLm8��o�����+�Au��A EƦS���� �-!^jl��A��us�W�L�� �}njGG��Gv宙��"�nqc��ӎԼ!��$�����3ly�҃��,ڝ�u0{m��\��<���}�h�5n�AIt�������t%����1ԧCb�̩��E��es���l�=�����B0�۬���:NKj|�O��ǿ��Ǒ����`Ge�҂���j\�'Zs���f��9�������pm�3�;��{�!�s-�\�P��-�$]�'Ӵ��с�sg�G��9�1%��>|��������Ao�T_�]�� �)-��1&���x��'�&�Q$�h���hb}�ߟ-|�#jf�V��{�g+�voh�L�H}�n5�����%Ҧ�dSQbj��%nm�w���
'*y/�z�`���a]FtJ�o�*�
�R�i�z�>�
]S�v}�M�-���iS�S{�v���6��Yko����_1�Q�.DRvhUٰ�8��61j����$W���.�]ZV��,��)K�M�u��ݙ�sfό֓��&"�Rs�\e�\����8~
ӘÕJ�)��*W���Yab�kΒ�x
9�<���Lc�!T��-A�d	�B�
��&�~	�,�o�+|�@lL6���t���'����������`�*�n8hn@́����`�go�?���z��PI���0;Y=�z���o���s�E$ti�,�G�np�LC�r댢R��
4�%Z9��Q�$�(F(������3i�@wu6�x=-����$6i���E'�D�[$29�4S�@����jC�A�68qgB	�3<�'�Z��1�w�TbD���OH4BY,ލ]��q�ˑ��x�Sܕ��h�T�g6�X�s�z|2�!��<���BY�q��(	����1�\���E̥
+�^�ط8�<�)z�F�
�\��yt˗�by�%
�d��l���ȩȐ!&]c��#�I���\�3d�"�� �%�Hq-?7��1;�Nm�x��r�))(��Bހ0�V��e4e�l%N{G��͆�R��<d�ф���"�%�\&E�(��̦��i�����v�%"���o)�A���*&+mA�o<8k,��x��=�ac��w����_ɕl����댴v"qW����]���XH4�� Q�m5"%Fɓs��-���į��Vӯ�j0��L��w�g]� �#�:�DΫۺ&�g������z���ʤ4*{�M>7��W"Tet��G��Hm��Ǟ-��"1�ڝ�]�yn5̈́���fu�-�6��ۃkLZ���$QJW�M������H*�f.�B`wL��$4)������ʼ%<�K��\d6tg�J����Ι��
j7`��MN�>C��}����f�+V˵?�l�C�7{jNee`Y۪n{L���z�S\]뵶@O��X�(9O���_(�$߉h�3���=�#�{�rfc�ؒ�����r��ܜ��	"a��h�֖*̶�p�
L��"�2TA�����R�Q���L��Bנ�-V��5Fc=��g��ʍ�oF�<�R�epE��Ty��aŏs�T}���{���k`��F����$R�����ME¸b�J��p,�[T`%�V�q����Q��BV�o��1h��v��0�T�X�d��;���ht�>�6�ո��<�Q6�Z���b��f�k0�WK�I�c;��0M1C�;�-�q��ݷ/l��9I=�j��rRn�1ܱ|�
�R����OlcV:�2jeQG��.�@�5��Y$
=���Ga��<��)�n�(�x����C��]F�unv�wW:Mc����`}�\aVl�y�;s#��j!w�w���F;�{�x)�T�b-ƪ��a��fx_�T/����о)�p?��s��H~""K��v��K���G�����$���M �~��&R��x?Ywe�	�G
V���w��YhƕmP�nkأ���o�DV�2�7���kB�%���el������c�C ���Fi����U�WP�Ep)H����M5�
���l`!��2o��-�ޚ�V&�Vt�U�e|٪�Y/_O�g�'&s��W58��]W�au؎�ÿ��
��C$��B��ϖ����F[��}D��"��w��ԷSڏ�!���$9�]7i��ttU�}��";d2�I��}B���HË�ɧ''�0����py�m�_���XD�}g*tv�k�<)���?�S}�a´>��ۿ�D��K���O����޶'['��8t>:�r�=�yhx�dَċ�x̷���k&ԡ��Zks�8���_A��4�DQ���ٺb��yLv'O;����HB"c��IʉG���>{+s��4�y����&~���v�F�G����]��°|f��t�w�2���4�[��x����_g�"L��1���P�s#���ne�<�����@kqg�I|gx���20�I2H>�xj��],�8�e�Kc��!
#,��d4��C�UT�[ω�ѯ/ϟ��x�_�GĖ��7�,����H���l�c��!x���7�/$�I�E޶�ST�߼�|��ɇˊ�9�"�rMj��i���"76"S��VJbƦT4)�<}�o=5.RC$����&b���J��L$�wp������K�X�Ȅ]��/L�VdF�O�/Q�_��PwO߼�&�(��Kfo�ʁ��l���NFk?�!�FfE$���x�'V"n���:���dR8kQ��5:�@��I�_Q1�t:�?Vr>�ψag�����ɷ�M����2���0���6O
����p���d�@Bn["�n�(0NO8?z�@�'�(z=�x�%�QD��<ϧ���M��L��:�b���G�I��<�O�	��f��:�X�r�l�����U�
��#��������SW
�m,s=/��9��Q��y��c�z��_�z-�༜2M�D�A�����������Bƈ�4+錮��2k���? y�E�J�)�p2���/-!l�d��SC%���l�[�D~1����V*�N,�U��4�hC���������],ZZ����������*��l�
y`_�P����%��x��+%%KA��r0�s��+�_���6��d�K�P�7�4 a�"��K�f��f��Y��Q�%l��[�{�5�#YYBsc"83W�VԆ�lY[�>��U2L�G"<��ԧ��8��2��
��m��j��>"/^"�|}˸&���طD�X�8���S�!����ټ��[� &�,ʓ�&~�t�`���~]�mp�M��٤��I������O�2>G)��G��n\�A•�	і�		O�p�;k	3WN �CLj�j�V�h>�f����b7�:�y>ZEv]Tۧ��U��������]&�yjDy�9�cph��3r;"�<��SӜ����k��+�w:8ˡ��eK0��N������{=�݌��U�]�"�����hXi��"�)�H��
!��AhxS�	����b�R��"�R
;+��H
�mI��NK>
�9�s��`A�]#��Z�60�-�1+��u�a����=|�G����>���X�h�G�Ѽ?��/��]���j��\dm{X�s���=�r}W�J�Z�����y~X�t8�hwX���S,���d��Sۖ߷m7���}���Č@�q7�sk:�bX?gS�Ya1HO4e�E �Ԗo�X~���j�/�u���?��|0Z)O~���cg�[�P�re6�2q�T�����~����O؛jd���'&��������|g)�ٜ䶦�9,$�ٿ�g����	��J�3)I��<��>)�_��t![5�?	,1'���
��0L9� �jurFNɹv)��m+��E�N�����06��@���.�)�����_7�۫tBmN�U�b��v��p)�;K0�_��(�Q��`.�Yb��W�-k5/���?9EJ�N=�8�5�'S�F�xNY���ٖ�A��;	�@u�ĠU�A�c��f0(�j�J��Я�]4pG����	mY]��H�]�Y\�,�c��
WČb�j!�l��B�q�4��5��y�׆@�3T>l���o6Jm�3y��
��jO�ޑ�P�5��f�J�ڇ^�,�}=զ�j�<:��ZN�����tx���$�vI�<�t�)��,Ί�M�L�z�@��c�M�SZ�7��UR�ӉS_�TM���u08�(ˋ�;QG4E؈�T�O���`�c�N+�Ji˪Ĝ U�8Ĺr+c�ƃǻ�U�djʨ}�`�/���誑�)�%z�:��U��Ѝ5�߃b��,��vL M %h�E�x
e��o��':a��5p��j��oQ��EJ��@���B�nC�2Xo��߅ώ&�|p��W��ͥX5��T4��]W���?OwJ~�+
��޷�M��>�x��_T��/M9
x����&�>R�Q,�D}��+��If��bǸ���*����2�E��Б5�{v�$ F�qN(�V��M��p��~���3���
��p_�fkMX/x�i���&w���v��[� '�"p�R��h]!#-��%�Y�������O�,�u>�QbQQX�S�5+>����bI�F_�}��F��O$�/��'*�}�H^ڟ�m�2�T�:��Ty�g�	�m_�|�+^S�{T�{��*�#�@m�z˶<�"4�j�e��5�!�$�+�W��,M�U�¸�,�a���Ӟ�N��/�Z6⦼:�S���ǯNi�t���u���SGs�C�I�����v���,;�v���س{i��2��$�j�\���|�
��
HUp9~��Qbw��v���`��A_���D-�u��<�V	���zخ�X�]��Yq^3*]	�_����Ve����)����`F�.%���U�S���Kh���ɟ*M����*1|��LT��qP�뺹Kz�aͯU�f�5p��9
�݁��תDY�ݵ�r�Z;�OU���v��Y�jøa�<�B�2��ۜ�kZ.a~~2m����Q���5�ot�[�c@�7:5�P���2���5��]�P�OʑkP��� x��֨��&���^Q��'�6�.�\��݂���t�
>tW��*[�t��~�Z�S�h[��ae��!�*�~��T�3�%����L
j�mc���tS%��)�)�z&��,��VU�9�K��Z�|�I�&蕄���cn����$v��au+Ǣ{j�d��zO�o�����"�J+dl�6e�x,��*�-�mD]�����|rOω�B@g~g���.t	dI���{�ha�u�:2|�z�2�
s��!�>��*�*A�BuZ"��l �;���a��*�m*<`�L;ሞk�\2
yʑ6������E׾]"
�ra�ؿ��jnH-�v��|5�@T�>o�ܓd�W��]a@���{p3@������{���p�\p���+�ݤG�,k�]֭p����5�{}��)i;���D�C���S:��Ϸy�޳|y�r}�I�/�[ݿ��:kם��r�,%T�&W) ��(�U�X�-6�u+�(8Gtz¿6�|g�$\j����/PO���pЎ�`�^p���r�O�4�����(c�?�c�VV��|�Q
�(�K��S���#�/
�������H��F����&���]��Bp���T!ti���P�}[/F�u�8��g(�e��T���
�ӏ�q|ߘ���V�G�Ȼx�����fOt�,��V��D�-��U*��,��1���o��G���je)��v!��f^�%�Z��s���꓾{a�V����b*����[+N7ũ�#�[��[��ĩ��$H�a�-8���Z�"Vi�,/P��6�oxhKT�Gj[i8�b�>�����f]-fS�zh���U�W��~EX�=O�?��8�E~$3 �@>v芤d��zE&җ��&pFn��1Q!�i��Ч����MEA}��_0�aI�?�����8�TE��5x{��S!�Т�Q��Ի�=�k�r�jR�t2Ҧ��"w�ZK9:�Q)������l���q�1���?���p�?���ks�6�$�)g7.�ܗ�h:�@zi	�`�5��΅�`�����oWoɂ���jw����5s���`ꍂBh;30�)�c�h������Qв�	R{A�e9=�&1���`�(H�o���-"��l�`�{�,�L�ƃ�T��Ў����u���vʾ���i�f��8S�Y*Q�H%Ͳ5
��.�
U�_¢�Pߦ��B����6��K/vnj{��Uh�2x#��6�\�D��u���ހ[�I��l�׊��$�K:�C��A���3(;X����(���`Ŏ�
.�"���*�q���p�����#z��i(���S��	��)$��<
��SM�Z)�N��6
�f�j���Ĝ�8
��ώ����b��I7�jNx��9�WU���x�w�:H����1Ͼ���9j�~�E!a��X5��ުJN?8h��ʳ�=s�������ExZi�O��EE�5a6�O�; T�lB�l�`�&�a2����"O��f�>TS��O �޵����n~�k;hQ��Y��'�E�h���)�
��&/����F�b9%�	�r��
p1���,���wg���!�zF|o��ό!Z.��x����k�_>~�������'�&,��P5��	(2d�X��7T"�w�%�G��t�����������J�8A����b��a��ϣ˾TY���NJٔM�}[�'6'��G28^�!:ޏ?��;�9�T=�S\Zu�l*�n���Cf�UP���;-X�̏�ˤ�RK4�!��:�D]���{7B�x�z��[�X��J��^��'���@�/�c:~�x-Z�W	�3�|��Zy[5C�i[5C�~[k��y�(٢7�!vGY��.3�E���h'�پ(����S��I�rxp{+��Cȩ��Gy#ٚ�M4
�4����sj�y�+1��5���eYߡ���oS6j
s
1e=bLnט�n�
��?7uPȾ^:�Q�쩒2�;{P1R��V��Ѭ?'���=�	��cJ
�%���.�Y�v�xtRU���4��^����r����1&��È�'��ߍ�����}}�q�V��s��y̓y�N.�t@�Ga
�\��=�:Y�:�v�7�W`�VN,��������쐻zB{���0�z�]
���2^w��#��J2�2�;9Q�3�S;L��-X<���00yÆ
޸5��Kk�Ì�x]�n'�A��ɜ}a��F;�x��
�JX�h��|:@�jʒ/�)��#�%�m^$"�"ޘ9�x�2��f���Uw��M��
��/O�^�w6�/]��n�$%����<�{1�bp�w{���h��<���'b0�|ڽ�����u��a��u4��l^@������3bY/�Lo�-c��O����n�F�Wd�5(�R�>HY�]4b�@\� (4I[tt���82��s��C��!2����ε�<�β,�D迫�L�%�����'���EA�*�\�\�r/�ǡy�l�g0�����w�I�\�`,���g�IN7;e�!�!$�R��w��]d��^�_6���*yԖ�h�����f!o�@�H�_BH��R
)�BJ2���
Cқ�y,(�,s����l���2�o����P͢�:�G�7x��eнZ=ϓ�r��@��k�I��0�s;�%��Bb����:WX��d�3M�V�‚o�'��W�դ�)��\�~��`�f�	�S�ܷ^iW����o��P�F�G�*S�L���X��{�+"�{�EVD�� 9dQ��S���v�"�O�;L<3|�&ͭ�`!!e��"�?��&�z -�rڊ�;[�xc
�Kw
i����ʛ�v�w��J��Ȯ�m3���}2>�
Nwck�����LuIi7�U�Yׅg��$<�J���	F�+��6����6�W6rrd��TZu�k$Z��Ȝ���J�am�z)U�.I�Rmi��=�rцyXCUV�=�2-V�D� E���W�o���S%�_�-S�gp*��[Ђ`��TH�K;o'��K���^+Ѳ8��=sP:d�{z�4Sj��*�k�ՌL��Zk���W�`c��}N7�閚n�b�cOA��d[���|�;��x��Z��Q�<��A��w�3w1���9���h�mI���6�P!�fI(�0�b<3
�����K�_�����76�@q7Ќ�w����W�_n�7E��sϫY�9U�G��ve;�p��K�ˤw���
	(P^��v��Z:�-:��ױ	�H�ǝG���=7�X��T���Yҝ�z��ـ�R�ͫ1b�PkE;�x�����FJ7�����Y�|LM=S�Z(\͓�_L���X����B;^��4"*!}�
��C�l�!���N�Zũ���eiO%��z�8ڗs�|���E��$nnB$�3����#�}i�_�a��!��ku�jObOJ�“3�4\E)��%oo4(��m���#�p�Кů''��y����Щ��~m�:�8;�(+;y�j��.|"�G>�n���_��Mf�㸫�EW�K1�$Qxe^%���8m�uH����۬��a%�/N�`��޹z_���N���JW�צ��5�J��<��MJ�ex���r����b���G+e*)��"f��!\�E�-r+6�0<±ہAu�~��H7�:K"��2�7��-P��@��0�n����2\��E4�~��W��2ϣW��ܬ��tQ=�C˩zLQ�X�d�W_���\=8!�@y���B!lC`�ib��:r�~�k���@���]���k�ӡ���5Q
�E�{�8r�11_�v�,K�S%(���`\��a47H(/�����o�M��b"�RϪ�E��ï�����B�����N���6���D�;��N$d�6�EFO�̤�E��%%�)]+�7�UE��+��J6��x�����/�w�ӫ˛�?�w�q�1y��{��q�z�/��Lz�[�%Q1�[]�3'��m��c#x������&��lR��xd�u����k�?�{ F
�V�OC#=��V�nP�c!ܵ���ޏu=�-+��QB�鍊oXM�1Z&�� ��3Ms�8���%y���U�c�C��1CC_�bg�晫on����{�y�pϢ<��M���{��T�s����
{L՗�~/��Jh�[1�o�����g,����T;�n��)� A�S������'d�-��^̩�S�rY�.c��p������$�G�"��y<,��]ːg�8�}�3Be*W�y�2Z��!C=t?~yw�-i���l�F���k��y�J�`���]�w!�a#S�~�Cc�z����&���/+ֳ����P^.�i����Ėo�	H���k���ڒu�9����� �}���M�|�4ԗ�=��N�0��'�i��w���6�P޾�[�ij�t���+����&@ep��6դ*�`�T���3��՜FQ&�>��Qz8��z�xp�6+p!�w0���^�x��3�Ӵ��^ʀ���]��|��o���y�t�c
��-wQ�
!t'����lL�$��w+�j	��,*n_�gw:���Ǩ<���q~��r�u[����0쨹o,$Mڰ�\����{�;xR���c��6Va����
;������%K'��9�\헷Q3|�8Q2
8s0���W��f4^W
��k��^��q<"�/�+ 6Jq�uӢ���^�=kW�H��9Ǝ���|Zi���v���sm/��M4cl�e9����ztwu�e��ɇ ��Y�V���Ah�v�?�?O,b#p�q��|L0��T��y��xb�>�~:���sL'�H��*��&Z�=���^��N���C�������jh�ph�.�J{z��޽��2І�)sp?Š�o�H*���?�S��\�^CsB���t����jSY=gF�.�<����_=�-���>��d�VH-�h�g�x�I«~��)I繦#����j}�ݭ�cO�nb��k:����u�J _��
ΕX��]�mͮj�6�Z-��y'���<C$���D^�]	.lA���f�j�@lӠ�9hЇC��#n�=��Xc�̀�b��-5��-��-b�����r.�݋S
����$����6��30�ާ^�W�o�58��M�Ӭ�d)��ئ�jk0����V�kYWu�ƤL��4mݕi�r��ǚ�d@����,�}�����nҸP�΅Xݘ1�Y�4K�G�=U��R�
L/���|��-]�$��|M�v\�@�D��l<󽯓�4x7wER1l�,���u����?��O$$���9��kD�4�y`J��ŝF��
�<	�׳��Zh$XwĨP��_άe��ĶLrl,���%W-"	��*��qD_N�l�E��ا������5��K��.��:[y��c猈F���
R,p�p�y���K/ih���#����9����{Bg����%����‚B��S�.K�$2졢

'�䲾�j9z"0x�@6K�qE�����!����as�	d��N��i�r��C���
ǚ�
�P�����d؇�9��yz�n
�Dg���$ @��#�z\K�۴�4hO!�E���>���T#K�?Off�r+�P� 7��D�N��l_F�M5��4u�P)�Fyu�!�$�	�+�k����z���|��M��k��\��Gv�f>y}9��T#�S�6&������3�/Iy��%.X1��J@X���X��.������%��Z�� U0�ǟ����}�
Zd���"!Q�@UhZe�M����I����7.�j�'�`U��ux��Sx"���Č��	�$0H]*�ab���M�(ᛐ(�C|;�����[��^�d����8k�b����$;/V4�_;rL�O��(O����J\�o7~�6�:�C1�
U`J�m�	��)]�{$�u�HC;�Ŷ��/V�Qn$Ds�|"(5W�Խ3�mKk
�J�Y�VK�E� ���9��`�c>�}��)���Ϙc<�c(G�ӻ������/F����:+�cv�fu�$B�y���{�����E~鷀�?]ڢ̐,��B�]�����(�NZb�tY#���̖�ŧ�<�A�\�t4� �tdS�Ԑ#C�9���Qi���
Y�"S�'�Ŭ�&T۞�͵����h�e��u=��y��IV��E��%A��E�z��Uk,:˸�
����@��R�7S4�E�y�(ɃZ�d���U9�m0`�FK;����b
�[����X�AD F�V~���jD��u����f�_�m:/�a��_d^�x��f}.�ͣ���#3@�J�������Qt��t��t�И�.�ퟝ�������J�e���W��0J8)��$a`p00����������e�4/��5'"OI�zӊ�I\d`��Feb��f�̋)sL���y���um�n�+:�0��Fr|LyX�Y�����N�
��+$Q��=
E�#�����t�ƽ
D�����G%�9�����R�Y�dps��ڀ[�Z���zm��=��� 
%#�L8��/�Y49�xE���w��]E�C܍���K�P,Nx�}��f�c�0��s����Op@MĿ����D3OߴZ�:�]�{~Lw�GF�G��X]4��t�
�]��æƗE�t��\9gQ
��Q��l^�S�@�7	���
yg��n9	1~�~
��7v�p���P�#|�휐`h8Dj&��mõ���h�d���6P��V"RBt��^�@f MG�5����'��Z���
���$�oR�#�w	^f����_^������2�9SĦ
3���͜�}�G��/�3g��Ů+3!]���Տ���bk�,f �#պ�!�!6*߱�;}�*�����N��O��Ο�E#�bES}�M�^[P`9
X1�n��m�o8�f�����k��
;z���3s��;�#L�8(��h��"+E�
$�$�!F�F	:0o~�m�T�m���ū�j����d1��ZK�����4�$������nc�E�3��=�ݺ��E �~W��C+������nj���z�(:���[������
�����!�n��g���al�"��3Pר׉���|Q�w��`S��#J3tUq�)�U	�x�sI���Xs�3x�04��z�=�.��M�vUhHmo�@ CoF3�|�ԗ������AOC�.PQ9��]]�������3C/3h���'y��C���r/�ު\�i�C�5��Py!9]P�Xߏ�F8���E�E�o�#�@�'���oQ��8@Q��+��T��w����j�A���i����n���p�����bX�Q�粿�:C�N�^��"�����[Tu�A���o'
~נ���AR��_�����dzO��$�R`C��'��������x�L������/��0V1�f2��O�<�A����ӷ���LVw���_��|���#a~T�b�O
�:�*�:�Qxl��\���M��O-]�.ѓA�H�w�8�\���Ʒڦ1�c%=��C%�wV�ϫб�p݀j�r,��*3cOq�q"X�R��r�f��K�
�YN�\��Ŗ�q����#܁�KZ�T���XΩÏ~�%��.���-��8S[�3A�n��F�;��v�R��p��bo� ��3V	.M�zc�z�X�%���t����IS���Xm�T�� ���d�J��X�A��Q����	�-��w'O�b���A���%=[x�gWu�G����ח����L���ܦMÕʘ�h�C+�B+�ڍ�;��	��z�H��o���:@�7�����:n#�L���V��H�@T7�
����®�E��zP��(Th�A֮�t��
���[e��?QKJ&�]��I�j�����Q"~H#|h9#}���L�����C"����#38'�#�A�7���G3?Xc*)�����ҝH��U+�D��p�y�-�5B\�#�;b�V�Q�pv30ݱ��F�oW�jm�Y*�9HIbHV��w�(ðo�]�Ze����tW�
I��j�)��a_�Ϊ9�-��6:��p5`��ہE���.]o&"4��h5[*�D���қ��@���Q�YR�
� ���f��~�YR!�6�#�V����3=n�
(&g�*�(�/n������o�=WO��m�f��'�}�
I"������:�@��(���P����̩�$�9&���ji�a�
�{MV+�[ٍ��va�)����6$&����r��#&��o�ą$7�`=֫	�a�(����;�wVԼ{�L���?
S����E�ʧ��h�2_�}�6G�W6���슣��0�ٰ/��:�>��l�����)"�6υ
���F[��!E�R=����vM�ϹA������4�զ�&�am�oksuDA�'422ۈ
�ߍNnl�'���	s0tп�.�,�4����)�6P3�D>X�#��,��Bl+��)v��8
z�;�E��Z*F\�N�I:&B�Bo{���a��T}�Tm[;{$�G��P�kna�0�>�͍��
���r1̀�l�G�i+�B�D��?��U�\A��pS�΁�)���mQCb�Y��9��ܹ�u�!�u�3U�	$�3�LmsЈrv�v6���6���d�����ۂL>��A��*/��2+���"�
��gjMhVt
�VpG
����h"�N��%\���+L�o���'�n�9\���͍�T�\<.+D�	���Se\�Ga�^�R��
��!��^7ѿ4G���9�7WX7+v�Q����c�CD5wJYM}�y�I�\� =F�x'>-g�\��fq#)0~�=s�9
��5G���t�L;n�j���h��A�z���%�W��N�ukw�v>��s�S�&v���|���z�*o,�]{)�~��xv
nc8���M0%�)'�$�k�7A�3��{�X���({p�/
�N&
~C���]�H:�_��P�v��5Ңԗ���h��Q0aX1�c���Q=Ɋī�,QؓOUC��]'῕���>[�U�Z��� ��=�K.�+D2�Y裾RG��砜?,�E����0���y�4�fj:��K2�U��Z�3�nZ�^��kDC8}��	��O0��GL*v���́zo�q�n kBr���W�i�l�do�&�_�ۣ���X#F>��0$*�*�����a��5V޾&�LI9��;���xo�ًiakX`�!�9Q��h�1?�\{:��3mņh	b���b�y%���xZZ��4��g9s1�Z��h���[
�8-���"y�u&VK��,
�\eP�$tD:m\���F�ӳ��M]eh�h������])pX3��g��
E��ws��|1������")�g]���:O7R��O�w�]��&a8���}Z�jV��*��s�|F���ȯ4zK�G,)�D��\�7�Y!�T?�o��5D�c�BHv�0��pK�"�����
��w�q�.]�ryǿ-at(eG�}gC��LuO%��"y{������ݜ�������$
�Lw)��$���v�"5�EZrH��F��'�.���׀�M����[i���S5mx�<�٭\9]&���z=J�9�fb��Y;��	�YU����S�TrDOdR�hº��Yl%K��$��L���zmR�e��$Dg7mQpե�`|lr▊!D<���alb�\+8U^��V�G����T�
`W�X��#8���P�aUp=�_1kZ�ST%� x$�.rc�rl��Զ�)m4�h�9�$�=
RRV�k�3!���m�N7��/���$̆�tc|�Y�dc`���s��
^m���~�
��}}�}��2��Iԍ d��]�
���^�b8�9z�r:�h���Ƿ�sSa�;:�����pأ�����#����&.����%�jw~|�nij�go�������rO�z��a�ȩ�ɾdq��n�����S���O�´�.�֠�㧩5����ܯ�݅�1��i�`ݫ�f_��6��wэha�Dmo�O����ݮ��W:=�\�=?|��>�>��0X�Vԇ��m?�^�E��d4ZW�=&}�*���š�3�y����/.�OO2�]��ty�]���H��	U����}�6G����p��p��b,�)�o腥�܈y�AC˴�j����H�iQ2>j����\��KQ6�����_�����Ag�n���b�3켢W������\@Ϝ�^@�pE@�b���w �0U?_�j8�_��QK1>wy��B�Ȁ2-(+������J����%�5���+��2NU+to�i���bl�t���������;C����#�֯4���5��R�#����@*��@�.y_����"��b��H8��h,�8�Z���o�Q��?��b�&�Ϣ�Qv��X+�k(�%�w/�KإZa�7�E��5�hv6��j�T�X%9,u�F{���?���]KO1�-�e���DRH=QQ.U��R�TT�D$T�����a�x�ݰp����G����-'�8$)��w�Ŗ��ʆ^x0��ɜ}�������5�Ė�k	�i��7`n Ur�4�!��K��+ˌ���?K+������)�4#s��7��t���빖�^������.�h��+�G�*�����,�]?�?���������C�t��4��z�B��7���v��2�|�ןh�^��G�7��7~��c*�X7��d)*�
���`�K���&��������v0�da��5�X�w�,��l
�c��\5���'����~	�`��63���/u���	.U9\�&Kp�Γ��1A����a��w��\��\_�SlD���"N[+���GS����;�?�EF��6��z3T`��BlS�{���o�U��n�yrm[����x۽� ��`t*_g�lN4�t�#T���1��ɧ��6��p���?3n[�B��D���`�k	��T�QV4�h��Cv���,�8�'�az����lJ�?���E�P=���9A��!��d���F2%�7!�*W\]xh?�l�W��,q
P��Ӑ�PU��;�zI	�J�`�_��H�21���)/����Pdk�W&2���������|-Ͱ�j�{vϰQ^k�y=��TF�LWL�`"�[���㾕
�?}�	:'�X�y���*ξ�}�4�@��_\`�6�f�*���ߊ~��jۼa��-”>I�����^`"���臃�:��src���>� DM�P1���&�
��^���_
������0��<�B�J H����K3�'e	���Oݠ9�
S *i��Jf�;Ķ��S��uY�<+A3e���`�6j�8D���<�:eΖ=K�C%��x�?���g�b
��(y�t�4�eI̓f�O�j:3��i�Qd��H*�h�a�V����Г��%��e٦ԾG~�ۗ57�B
:���:�s�
�J�m�t��bc������/S".��;�;�n/-.��æIֶc�O�v���F��Z���9 ���Zz��AJf�Qz����>b��͞PN%��ܻ�Sb��9�ݸ�(���8�t��Ĭ���(g}����F��î�sK=�>�h�����sR-2j�[�N	�M�2A�Ĥ���&b��|��i�齬�٢	��PZ�جs�5�E��*"�t/S[l�(*���ճ"����+�]��BJ��#}N�V}��/�$4צT��r���$��u=�"���8LTG��b}�q =��
�Xb&]�	�D��_��g�Th�+)�LK�ZtGP@��ɛk�o��e�t�k�DKi�[�O�x7����F��N� F:�^߳����
u:m8�m������w��m_=ϥ�SV;*�NC�=����pkeIײ��T�:��?�f�Ƽ��M�?���]{OK��*�(�xĄ%�{���$"��d/	Q��B1�F1�cȲf���ꮮ~�m�Y])"�����MN0�܈�\՝W7�sJ�:�6�����b~�BZ�G��w2�n�����)��+|pz��'H�}Z�C�+�l���S't�L�*r��jy���)���5�[>�[��F��J���E����{�7���𢼟>�����nf��.��&�_��k'��c�κ�����{���t�ZM�:�b�d�HS10��˦���;�f��e_�.���g1�P��c��TL�r	HKA��M|Јq�H�B�.���n�?#��iޠ'YJ2��v¢�
b�G�����l���-�/�;��w��ݒe��x�
)�ߖ�.�dJ,(r�4��V�Fo~��[��^��.ly��~v���x�P{D�i4���A1�0�M�-ٵ�v�ߒ�����q��a1E��wi�2a	�	���$�4M-�s��+F~�n
�&���`tB���EE��b$��Fq�TT���&I'�5�v�Θ|��������ex^�̾�6Zu���3�~�ʅ���	KJG�u�(:B�^/ղ��[*%}[,\(0��h
u?l�<�Yr(&�u�?7a��/O�y�a��|��Fɓ}�@�"�+�����l��v݅;�vhE�`���H�d,��Y��ݚ*�#�Pohiqx��PȌ�A��a=i��>�ڽ�&���Ě)����ZL��06�{m
�<�>���q�g2,��?��E�;���N�J۞�#�ﭜ�w���}#@��ս�6Xs�ʧ�n���[�kb�;�����܂���V�\<�m���m�r�<֤pY?�<�=?��-��.�.������J��y��Yũ�����}o|�~@�'ؘ�.&=�_�"��Ș��k�[Xk��XPG�D��#�u�Xɪ�g�l[��X���j-���-�9p
�n�zMWܗ�]��X^�c�v�%`	vH[4�,����k�/�/c
���lH�f����(4	�����ZmA���Ŋ�f�W�u9+S�6'�Z2�� �y�\u59D��e��/DUNH�����
���Gɣ�9�0N(r&��=�nO�BP�5�e\�@��Z�I��\�Rm��42�Yib;U�"�����b��p#Y�T�$?[����_n6�R��/wW�6��y,�VΠ��u�8�h�=�6��@�^P��W����Iɷ�bF�"ROD?vX8)�K�O���^>>&��/0��yk��$s QIuv>��Ǵ�e����9ЦuQ^��&�7��"7��O,V�j�zI�tE�,h��	o�k���K��4�Z'��i?`$�[[��`)5E��JЧ)�(Dn$I��2L�n��nZ�B'���S����4�7;;�挔��l�2鉆�2�{OBn�p�'���:�
�>ۍuœBDp�2���>�-�S���=o�ښQ�=UF���s$	>`NV֑�0B��r"_ �D�dD�Ө" �wA/��pە��F�\BΗɮ�+��5k�=�Dx��%'�u�Ljm�ҽͥw�^�b�S���}��-I��2��2�l���)3�0W����qħQt�9u)5���/�kNx�9��Ŵ��I�l\M�Y��5:�#֓�靝.�׸�Fڕ�zj�y�ot��EYwPL��&��B��mڗ��ɧe����+1��~��I���Ч�_`�x>�M���A�tƄ��ۻ��]>���E�9Ⱦw�F�Ύ}�!�����>��f�-�p|�m�Pug����m&:�'�3.B���@���
=1�N�'�3�5lS�cg�ǹe��r�I��NQ�ǧ��z"���\��
���?�ܬD���t�{b��:<���%�sо�����d��,ÿY�Bz��\Y���'5�&�R U��D8˽wf�^7v�D�A�3���a�x�"�>~!�3�n�Q�]d�8٧X,���7�#����D�	����";)fy���%¯Z GE4/���S`��6����%�^.�1T��n�Ŵ�vU�����<Ybk���꺛\�NSs�z7�:�S���(�+��N�hI��*;#���	�&���ο:���E�3ǣ�MW2L7����І(�g2�󪻥:�ˀ��Y���a��!����m�Kޭ%�j�?=E(��ʁ��=\Id�/����p��Ǘ�>K�oSAJ�^��5��P��~w����XAnjV�.^=�1y�٩8�!t�S6t�/�����P̅pi�/R����Z*�R:5|B>�,t8o��kmG��t�ZF��j\To��4V��[C�8H�����Jo���mX&"��pi��̆��p��8�~���o[����\L�	U���?�3��i��Ŕ�"i�VUOO�b�&�����7��aj�OBzJ���$�����i�
���T�ˑ�d�%��m��J��;_�m�ћ����h}�ܶ����'�R��qc٬�������)�Hc��رԦ�0��#� *yi�)6!Yb�u��x�h�	�Z�W™�%vw��֎��Z�X~f��>M�W�C}H���&�J�ψ3ߤ����n2���@Zޒ�]L䫻r�<rj}p���^7/.�q]�Wԓd�g"Y}ݞ�<�:�N�>��S�)䗊À�Gw�埸���!�B>�U}����5?v@csW>���h�jI�ec��?��v=	���o�>�s�1�5�ᇹn�I�?/��%�w����t�e�Mv�8�f�K}� i1Z���nc��h��_��0D ��vv^ ǽ��v��-67\fi�Ĺ�2<5��t	s{�VS��G"������g��/���d@�&��g��y�<��fo��M
n��0m4'a�'����r�+���S���SCf-�j44<���f����d�=H�̽1i	!���aP@�V��鴛�@��/���Y.o>�Ϋ�D���7��`:D�7���u1��TMί�#b�F&T��A�bdo���	����eQX�2��׹$�P_�����b�n��tg�sס�~��Tg��U��[ga�\']��2\Iw�=�ػ�c����ݑrf>�v��E��N�7�V3R��66H&��^�:cE伻�J���;�+�XI@9#ƃ�DQW�Cc��W�����K!Kerk[��J�'�4�D��Q|�0��hմ�g��|k�o�=0hW&��[̽S-P��A�����n���hN4�v�h:����Zg�L��z��;g���w��g	�{�_g̡��Ԫ�/n/cr�K�)��i�ZOC6���ǜ.�n���xX0f���٧��}[��2��z4~8�/����$���.G�ը��6H�"R̨Բ�����
N�0���imB.�ԗVf���Y+�m޳4�j�y:B�� ϑ p����;�l�<���j���z�׺�a�̓��Y/�J��ȑJ������'r[�nH4>����z^�[���0.6D���{���Լ�-�jz_�/(�74�z�T{w����tش�F�7��`���V'��A�T,	���f�z����:�e�Zy������Wzz�*WZ'5
M��G��	�Gm4�e��j�D�R *����<���i4P�K��n����9����؟�2D�ޖ�b���Ⱦ�S-3�m�g�Z���9�úI�����º�?Ս���KDL�=�f�K�y��[���E����U�03�m��F>��[KY�#F�յ�
�û���c	�^���H�DK�"�[zڴ�]�����n���c��]Bk��x�#���Zd�9��z]�9�Zc(W�C¶E���r4��w�b��qk-����ڦ��o�W��5~��H8}�L�5�fI��6�PR��L��m_���	?�g��K��~"��Q9��^'�M<3�+��1:�����j6��\� ��{����|����X����;߰U��A覻��/��s�������rQhtG�)�ںq�hi�z�#\L�����Q?M�qMsr���ꋯpx�ۡ�������-!�^cZ�e!��z�4�rC�h.�@�O��#}�b���
^g���J/�����lL�1��7�˔|�n`�_������٘�E!o��ga�l{��Y���oW~i<~]�U�:n*��Rm���覑��ir�9
+� :�:�&װD��u����ݪ4&�ú�a��[�TC"-D��&S?rٌ��~��8Ac�7t��5��aC�[�k�)��>.?�}����ف9ӱ<��p
�-���������������o��A叢�����������#404�H�N�?\�AԲ���D�|�<�88;�|x���oz���[����g�7����@�����3�x_�>���Hn+�ljY�%=���y������H�"�??|T�8;�|~vv�Y���^g��H"h}�]�-�pT
�O�
�‚H�^&���n�K��M���U��V�bP>�zWhM�Z�sB��Z��o_�Fi��˗ӯg��/��3x���q�K6@ p>ȯ�,��Q4�
�>�U��l�Ӿ^��x��%е�bJr.�@l��rn��%�.C�h�~�r���#?c�g�ꐔ�}K%u��Ύ_[{I�킃܌x�h�?�����{�《��N�lt_^c@zU��5�g������p�xS�T
f�EUN�B֮:߯Ÿ�����B�ͦ|'}U�b�����f*���Tw�4��U��lc��o��Z��]�\LNFW��l$�)���n��2E
D�*z�Q<�.����X�/����_�׀�@�jT��H1e��Ge���n�Io6���b:Qݸ�Hj]/��9�*
/��[���2,
6�*J���d梘Z����V2�#Y�@ԲȂ<v��	�
�S��_��9�B践���AD<���DjY����1�zWj�m�y���@��
9^��#�\a�f�-�dȆ��n����&����(�W���x���Yz�˔�ߍs�J[��棫rZ��z�����S�H͋Oc9\��|����\w0�qF�'כ##��� ;N�Y\�l��PiA���^�aTx�
�� ���{|r�1Z�EW:N���	®�)�Ǹ��I��o�Y;��T;�^�Ql����ko�6�$c�d���U�u��]>4�±�i*��Jp��w/�G����
����<ދ�]]��Gs�>>��Z~�;�� �.�RP�0��߼;}�D���Lb%0�C�v�@�f~�0	k��p9�� ޭ���y ���h�|�m��}ʓ8H��E��Nέ,�kq&�bUՀ \9@��.8U>�y���C'$wD��6���&KW-%�l��Ύ��z6�hR�bAH,�}CE��]f�m3�]����PN3�m�@�ބ(�����-�T�fǏw��чN��Y��ʿ��5@-�=,�������l��6ףş�Ւ��%1W��M�@qȑ��(��h��.�Hx��!��Dއ����<���>��փ�QEH�����"��/��.s=|�����/���cR�w$�A�z��v�Jj�_�����
t��pK���;��S�j9��b+^��ߖ.+]ӑN�~>��e��0��c�,��^�q�]\�����+H�#^'cA��X}2�}<�9��7�4�
�yA/�5��[�"�뵜u9�9��k3a7��S��-F�M��B�!Y7_5��i����b<��޾��Ӳ*%t�"�|�+�~����r��y=�7��Q��n�w��_��\�0�Ȩ��$t�?�T������3��q�=������UM��)u���]2�*��6�M	\?�Y�
���[��{4��I0�lO
q�pJ���)�F�9��'�&�xh��}]�&��S@���G�eU��V�6��`�1��8��ذL�:fS�d,'��7Kr� ��׫��bw4Vە_�����gX�'}ޒ�o+IՂ����������RVk��u~��}��5���nS��������I�؄H��͂���k�����6�����mp��n�"���#������)�$�mc��W��4��IE�z�W=:���D����	�/���c��@��G�D*��D��\̛,+�}�\�e�@���g��\c�G�
�}�T1(�
�
lU�Zt�"�x�ʫ�<���,�dG��5@��sYI�H��B��̋Ta
���<�^����l
G�x�z=��`} W�<T����C~��q�Oh��0g$��6�u�n�
��[��@���Ó}&�[�}����m5�֥�<hš���sDR⌋[�<��'���i�.)`�7!⹤�Z�u��3�.�^h�V~>F8��Ɖ�`9�E��ݨ>hT��=.�D�V�i�˖l��T��Գ��X����P�OHl�rx�}䚨z@q�0��	����\�B9wOVn"iX��N�sc����1��p��$��͢�%��m��m'#��3�d��AGfRI�	&
�
�1�^��B��׃�{JY�/�5�ڤd6��[�R@����Fg��~g�\�uDJ��^4�b�	�y���S��}�6��h�;�}r�:�i��X�Ҩ�T�S�
��Ȇ
H�
D�b�z>��K?){=����9�6-em���B�Y���� �~�&�9�Y�93:$��A�u�*��T�`6/x��"�C���PI�|��-C�%��T&kP�o^�C�oXK���V�aa,6N����n��}0�Hh
�x_���OG�/�2�)��l��0�HN�\m=Vb�M>ۛ�m�nxx��_��9���	�T��fCo��!w�_��ᡁ=��),L���ߪ�.A�u.�\�㣤�i57��z�1�N@��l$��e)���P[%"���s�0��u�2��Z;䉅Ŵ�|g��\J��/�?8>�>Z��N�T.��(	�x�DžA�#��l�k\��'�M�O|kC;r��_HD�˰��1b��s����ݸ3$��|��g�����*��+Bq:I�$�K�;��&�S�8~�4�v�P��xT�Ĝ,Tޮv�yF/�-�7�j`Zt�L�U^Bj��f�[|�����*m
���1���c��Qh'�^�h��"P��Į���S`V�L��E����=%H�c@M�����mΪ�Q|$g��i_.��7D�a����(���c���d#��m fb�ב��5��u�4�/q�*��6`[k��H~y�
�'�s�fU�@�A:It�N�U��D��6x��mdHNV����O�#������L����w����A���ԐZm�9.»� �qڏD���ox�|�g�@^�ɧ9꬐$x��=��+졓}�>vG�
�Q�鲔�ct��A�m�I}�[�r����Kc7´�{)>D��3R��3�N�l�V�;q5�on1�}�u#���Ct+�c��͏��]�� ԡ+k}
�n��qu�����}���x�?
�|��)ֽ4�e6�MF��Q:)��YJ��p����	�ղv����F�
��q�P���ByNq�[g�?{���jG�Vlk�aأ�%�.�U�-疍)K�R�e-�٪[�Y�l����uZز2
t���&g3�_�~f�&G8ۼlZxa��
$4�e��@G�E����[V����]�
� ~��0V�#�W�i���6v�h�}���TK�m�B��b�2�Ǽ3�O��t��|!8���(�>�c�Q��Ĵ�:-S�Kf�6��"(,^ޝi�t��v��"zo��씗^�<~��T�/H��H3��@}xϱ�O�p�Բ%E��[�HҚr_&}8�6��+����/sTc�u(~LQ�'���$��m΃�*t��\nZj?�,��-��r�m����klQ�IЬ&W�g�Y�E#D��š̋�o+x/�[�`�W�Vvg��Q'	|�|��ܦk��X� �=2z+	@N�m����=k�G��Q��h��O��5C�/`�yX�"
�
#дtj��X��W����jI�.���*++띕��J��e@�|��;I��ϋ���}��2�n�b�Zi�3�Y�T����ݽ��C9-��@f ��yB�����R�ꭋ�z�pr0��
�K���c�&�ob���7���oZ��v	��o���B "�0�Q�-��?n�VY�д(+���3�+�2�0��E����E%��-B>-�6V��H(�A��z�)�	h��V�(<]�,����q�d�:�{2aj�W���(@[q�����eĕ�8��T�Q0��wNC�5i�S�Tav@���6vx4�ۉ&Hl�pr[��Q�h��5�?��^���Ƹ��D��waK�M�Oe��B�P'=J��	t�))�n1�����-/^nݖf�������S�d
����|}��8�w����7��7��YZ���Z`��(���֥���x¨��[~^c\�>@/����I.�i�ŽM�1��$C� Jr�F��8�z�OF�8c�j�����NFؑn��7�p��A�����HF��n'��]��lOXAW��=g-͖ޠ��!���tt�Z�y(J%�3�4��k�w�f��n`v��1��l��T�׺+tAG�	��3pM�6X��k���pgn����c���ȣ���OѡB���@��^���&B�HӋ7���m�������T�EmM�Z�+F�@�jF��lP����Ջ�N^]=��*{<4I����V<�i�_�Ⱦ�	/�^]9�?[+��j�ܹ���Vc���k����U���M��ݏ+	%�v�4��Kz�$q���mAݥ��!B�/�mG��tS8��y�$X�¦���¸m3[V���F��x<�0�>
��(�$p�&�߹�J�y����1��H�n�R�݀fG��v�#(6TC��q75�1w�}A�|.�e�u �����O�Pp�8�߸��ꄻK8���{�xrH�g{=����@�H�jç5:��O D �P!h�%�~���������x:��Kԯ:.�N�&G��]�AB����R2�	u>�ρ~�4��<~������4�b�j[d��;w�N�<چ �"��⫠�\G+c���c�G{���KV���YUr�m�{L��9m�_��m�o��m佥�{�`%2��Ȉ�s�Ӱ#���o���v[ra�ZR�w�X��)�8h�`�]A�[��KQc��+��m�p�)�.
A:-ho�L�Pw� �tKf�r�iAK.S�d{��f���="ǂ�e�ph4�=��~#���A%�{ZД
v�Gc��#����t22�k&���]�K ��
���JF}��f��d~2�w�i�#^��n�#��~	�T0���?�M
�
땁���X��Z������~�a��c�Mn��:�����hr�4�C)��"䬾{���}*b��.��i*��38�pM�Z�O��Wr���<�6h�rbKb��I�D�R���xLIb�)ѹ�$�]�*����,�A�
~mh�#�//�
j}�2���0p�N�;R��ޱ\ߩ	b�|���\���S��R�3���I�Z�4 �V�UY|�,����	�^��j�C���SB_:��x�j����|��\7��BF�a�*��c^[+�O���w����(����D/�X���!��_����]�]`q�δ7�fO��v>�uf]�Y�A�?�Y��K��*i�=hqB}�Z�	��?�W��e�!w\-�r�֓��Ae���R���⚳2���t�w�\2� 4��m���\�$����B�@6�/�kSҀ��[)�3���A������bWϯ%�� �ʸ�n�	౐�h�Ϭ��\��
�cO�HIVHOGL���N�]���8{h��urh�{ۻ"=��r�Sk<jS���Gǿo;��Q%&�e��&F8/|�8e�C* $3�G�#�0��0|)���X��������d��/IN� lj)��X�A��PR`�-��c� ��iP��0�y/����8�60��҅gνdG����Gt׸]�0��DoXf'�J���JTsA<���)
5�;����{:k1"�N����'ׯ1�RU/u>R�^	?_)D�ё�/�cY-��z��RE��੎��
�]\�.���`yH
]�Js_3���᪹s�F��"F@X¾x	���4h�Ѯ�Vy�S>���)j�
�L����c*Z[p�pvƛ����"�,ދ��v6���:i�q��G��$�r�2II5�3�һN�����O���o}����_��;oE�H87ϑ>ۺ�V\>��N!��a�Ʒ�t&:{���
]7�s���)=�։Qρ�����V\�$g5N*>c��#���4�o����&S���j]^Q'
�`{+�����M�R& ���-Ńy
�����m��s^�S21i���Dj�H\'������.�`��ڲ�h��ds�oh�ea�J�+�o�o�Al���:�u�1����kܫ_����ʕ�݄V.��ƾ�����@�����@�^����H&�Z�����Fa��Ѧ���G���M��&k���������Q�:��ͺ�Q\2\��
`�dQT�:p�� �&��F�꒝g>� �!�$/w���0<����J�6���"�.�:n8)��\�o
_1���P�+�"
D�#
C�Z�n$�� H�o�S�l��y?Y��J8��U�ԩ�J��&>�D�*�f�x*;~����xI�B*�
��JY�"���N�c��.��f�0t�Ws�m4���'@C�1	8�s�@"���b5T��O� �M��4�?��e�����ZY�a�o�v+���3��ь(a�խi�]��g~s�"N�2p8��F�9`�#��I�|pkN�W����t�}�>��a>��$�I�V�SA�w�w[u�j�Q�6-���.=��.I�B8�\51U���c��z-�,�l$f�i��k���Ӫb+�M	�����U��7L��Ds�З���o��d^/g+g�k�;�O�E��Q���x5l��2 �T4CsG
�OLc�7���� �P�%��Ĭ�{�<!k1�wFj��G��'�����#����{��{f؈����A�
��� f�6�I�e�1 �����8U����9�9�k��?>��r���'w�P�G��5_��J��?X��cQP�w��
b�`r�Xʳ�d#��ͪ,��}'��X�ew� �X��x�%��~
E�˷�ܔȢ;��
�n�^
f_ �)+[�6t`�4�EX���F��?]�����?f���B��i��"{��D<���р<|�-h�ڞ�����K�)c�!��3�N���z8g��m6f�+HEVI�����6F�	5�)'����ܛ�D
��Z%��xq-��j�}�{2sUd�o��Ӆ�r3�ӥӥ;֖����i�r���OA�#6��ioG�Q�1"{Ǹ5���?�e�KWIyC���r�'��=U�ό�Ll�je��E>ܯM��)�k�Z�-�[�z@%Q��:��ʸ�}�N9"X�� @�����)�B�LQQd
�k�;؃e0ޮ�e�D�������7�S�
i�e�_�ȍ&�0��@�B���uGnlϒM�4�����mH�^�����硙�f��H��@�a�xh�J
sq��H#|����r���ڣ��͢�?rG�f=��hM�n�����6�%�+����~U��j~3]D���O���[��5��,%]���BR�̆�����AT¢�cS�p���ۄs^����,���&�Fz�)����Ud"��HrL5w���=��0�
��]��t���;�ԈI��)��>x���:��W1Ϊ�oK���=aB��0UX#�~�Q����S���COM�i7�F�]�ʐ1r��U�dE�N2;��|��tC3�apX`Y�@ϩ٪�wnd!�伞K���c�)S"y"�������W6��ϰ��{=���������(�t��v�@�l�j���>j�6t�Yv�C�8RHq�M.�ݒ�7��gE�!����)���@�r�z��S��mx��C2ޡݎ�u)rK?>�Z(>u!�yB�r;}��h�$���pf��+۫(�p�5m�f	5�q�h����u����0�#����O�Qo9(g���rwBjn��w�80�h���x�
�x�ELǼ8Cv��ǒ��p��|c���%2�o^��X�9��FZ�	��a��ˀ=[���!�G��à{��v;�*,�|�:V�]��
5���/�Ѵ��~��^]�-������i�~�Y���,-�.C	��7��N�纪e�
����8�i!��~�]�]���!�"�󅶚��CMF��eT.z�t����FH��K���&����9�q��|�+o�w����[v����$>t�k�VJ���Rx�hQU1�|X��S���R��F��	�:FW5�1�����������DT4�-��x.FL�x��U�~ncM���|��w�] L��Yr펤P���E��'�}��J���T=�>u:�L5���89@771���_��z���Cp�%\�w1��_\`�&�����*W�]��#Iwn���;�4���$'A��ܮ�+1*��X��V�eT��9�\��"#�g��t.zh���=�5�H!&���16OLű�X'H��^�i�[.�ֻ���++ہ�t�n��7�Ը�wq
���]�\��ω���C5f�#�*�XKM$������A��-�C4A��hK�I���i�N��ML�1�/`8�5�7H��ʂ�p���A�������P'nr�̖-�z�ۣV�������V�EX�)�E���I����do��o�y!�?Y���^`�V�&Mc�!"�v	OM�Z]Z��'���㄃�A�F�s�R0TΨ��uTc�f��Fh���4�aG�5_yG:qo��v����v��访�eVle���q�������l|�z��~���X	)�O�� �!;`��&8�NɕY$;%cP���c�,Z�M�Z�?�����1+"��C�m=xU�OYe�j�V�rC��Kw�4_����bE�i�e������S}�&�zİ�A����DD� ������t��Ww��M��N��9�o��.�B�X?��i��Ԉ��a<)v��l���[�J��^�]�Uh��z1$k�XT�GbD�X[����m��7V�O��d?&ZX����o�~�:㕂���C�fѷzL��~��Fo���*�᫅�NG���7ぺ
t�����zͯ���犱��78_+)���u
��f
(�!6$(B��W��V�-F���k�u�Sa�XΘpg!�K���&����� I�@?�TXS�	�LH#}��C侇�ޅ�qO��//鄟e�ka�Gܬ���iA�_5��	<�~����\0���D��� ˊ4�|��9���%$>X�x.���p�t�lw�N����a͈V�����8ؠ�af6�S&�A� �`�BBP��6�e3>��k�
�|E��5M��|;���'��R4��Ԯw�գ�c�����eX�>��X�V}�<��� ��m>(#:ۥ���ѭ{�>Uq�EOU�jx�>�K}u�͜���`M�Pڍ#ql�C���E�v[c��qC���I�U�),]�}ݹe��W����3����:��3��Q��"�n��H����xTW5�>,5hD#�@5Fܩ�ZG�,�j��9����E�5���QܨA�A�H��f��]�.����v��t�:��.��O���{?�z�� l��*B��eh���������3L����h�~�ט&z$+�g4���v����g�+���J6*��ZfZ�.�.,�-��ShSӠi֙F�����CTo�*��i�ɉY_�1KU\�T���e��K��̏U*�_���z�i���~��8i���'8�[��7�5�tzW��qE�]{�U8F#�P�=(�#�d�C��a��k��B��O=t�RT����FO
j�*��^����.s,1@6��J�=խjy�NУ�Us
e��*�%Wk�A�
���E����6/�`��@��/�b|FڋGn�`K�	]�$tpHU�H!1�~��/���h�C��c�~;�,a��� ��*�"A�H	��Ҏ�v"��d��q9"���dC?^�Ps��b$8G�yBɲ������A׳��ts#��r���u�X�6�LOt�f��k%�P��gy�F���b����@IL����L�ȸ�����饶�mL� �N�eA%ǾZd@X�8dp�	1�6L�I j3���n���nM���k[I�m1��ECulX(:
����׾���/2��Q���hX�#�r��8�fQ7W�#��J���T<���P��S�l�2�{3�D�ֱ���0�f*k7%�d�ˤ�'�*�d�i��"���Ui���Y$�9\A'��Y�)_+�wQ�y����1д�M�=v��X5���r��s+5��e�{�鲕�c���>�ױ�uᎎ���{ϴ����""�/�k��(��?m���x3[5�6oq���Wb+�`(u��b�4V��&���T4"�����q��EZа��/J
����H��<�-��z�0�ݽ���+\u����s?,���f й��kG� �X������\��Ax����l�c�c�Պi�E�_�����p�H����?p�t�a�@�ϥI*esl6@�oH7��ь�!�2��nr��Q9��E�a�²��#�[�fR��b$]���`��c�m�;��!�wݣ�8�B�R#�F��c<G�������޿sj6򠐍�k�k%�r�;ڼHH
������U�y���x��l�ut����X��A��
���_�<�$m��-��A\��h^��[S�}{�_��
�H`���;�L�neT���W�j������]KOA�+�CD�-��nBIš�h@�(,�
��;c{��'���ȼ_�|���$��Tc8vF� {,�ߺ���y�/�=BW�]t_�-v�~���V�nĶ��Uh̲~��#�O��*���e�=U'�
���ŔZ�nЃ;,}�g5�FP>$�O�apٱ���gN��{�w�E��L�ia؝�0�C�棚�T� ��Ί��A��
%X$Rxn1ޞ_D^E6"f9�[���325qMՂE�/K�mNDq��
�flt4ƻUr�:6P?����0e���^B0ϵ%�;z]��j���e��k������o�����W���D?�b�=��]��F�8��2G|��,.J�����_�k��I�s%����4�����OZ���l�j!($p�����8fa"yY���pv��)�b*�V�[���g:-�����쨹
6�	˯��58��(.�u��g��'rߠ�ۡGT�)f��z�>�D��q$C��f@�`Ӷ����%B��g[O����^��u������f2�N�g7����OH=�~4�T�n��Z�F�m�G��Ć�J!���-��9x�����{U�2��*�w�|��(�ЗҼ��V�[���_�z��5�4�/Wq��e���h��d<
u�@��?�^��=�
qvI��Ҝ�
�s��&DNB��Y�[x�m��Y�c<��߾�
|(���=nAv�g��鵠��Ϥ�°|�����[���u�q�_�?ME	0
M4���X[�I'�h6�H���B�!�&�FN"�f\d$�l���੨2Io16НC�Y�%ϐ���e`5�s��ǻ��K�qDQ�!8/�Z-�#b@�~a<�{�o[I�;Bm�����k(�mp7w��{��.\�uiw����P
70��m�
ᯌ�b�J������8i�mQ�����*d:`4� R%��/��ޤ�&v�o�k����%�
�Tzf��)Er�b��JX.@^n-��I�:��ȴ���a�Я,��!\t�؍�8����2b�;
Ktద$�Ci���3���Yl�7�Q+q��m�\[$2q�/��s�js��jN��:р*C=#0�A�0tZ���`_	}�E�T	��$�R��ʨԫ�*�&�h�qu�n��kO9�{~�ЊFݡ`O�'ͤ���$+��}`�yA'�;�����z�.��=C�|XE"�~�l����K1���S{ΫnkQ!�;����)4�Q��l�J!�'x���&ݧ1�Il��� -1�����1���x���˰��5Wr���w�w@��7��{f���'��G��
}�\���0JC<��N���MNC)�h@T�*NQ�{�CK��pʋr�+��[N+��xc3wvMUmҪ�.l�5W�e;j�Y���>��I;ⷞ�}%���C�|�D:7"G`��o�T�¨�n�6n۞�k3�ʑ�<��lPcd�;�zÆ�&�Y(\_5L_����!x��E{^9ߤ7��;�cγiY�m�*��f?��� zDfk��pՑ��C>z�������G���,M�2�K��gH��5ؚ���<�>E��cAB
��QRg9����yUNZ˞]S/��(�f�%]�9�1Mb����T���W;��nݨ�)�b93���rr��w[��F��$�H(�v��o��9���m8���kx��	�3�9�3m^�<A���ٰA<5�N$�1���6b�`�~M��ĭ�ȓmÙ���?O�瞉�nci^���50A39����]��1����΂���bg��Ǐ��
�v2�Q��Th"��h
)F
Hb�6)ɱ’_���X*����e�dy�XL�ˋE�X�.>@(�\Ӫ���Aɨ$��5E �@��MMUz1�/��[^&�]\@>m�4yak*O%l
�s"+�x�������դ?��t����j����l�B�{�����u����z�>�ZM�@0��}���4�wk�+�QC���>
z�ߦd�DeY�tS��j��n��~t^$�����舰��ŤXf��1����3�-D���$qO;hx�q'S�@��&P�N�p��`�N찷S'�6���@q��e5��v��x=�x�7��ovz_m=H��W)��zv��Z\P$�rB���4���ۘ���d��
��lvV,�@S~�'4�N���J�e��L<�SѰ�m��/�'��3���{�&���=	�>U�	�4�sک�<�P
���\'>v�,���~W���b5���!m�>�3�:�c!U��B������q�@��`�Z�!1�xd��6�Xwd�����&<|�Z�~`-�u2�B̵
.�O?���G�W.�m�tKtA'�Vui=�s#�[�e^S���9/.��%�^��r,|�LՊ��O�25"ju·�;��۾�
�%��S�Y��=��������4tv��Ιm[DzS�N;���th�~��W��k!�����).��Ok98��]�-�/S���k��uR	�#
�w�u��:��c��'dp�4� 
���aj˸�x�ӯ�-��_,�4O,'�01F�8��6�F3n����K��YM�=����b�Ӫ)��%�,'�����ݫ��a�xp��z&c}�u܍�vBPL����������K��v;��/�3��F;��W�\�!O1�Sx��K�Q�Q�E�F�(Aφ�8jE��%�?���}�=Z���,h���
�����0}�J�R��1�h��Y���
��w��+�ҙ����PoL�a��;R�N���9II�7�.�xU�|N�,����.����XΡ�ᢖ6���r�{�H�Y�_|<%�Y4�3pk�h�5��5N�iP�^��S��6�|����d��y��c.��E��E�x{�U���h��+��K�C�z�҉/��kX��-}����24	�)�g���k;sM���3{����b�v����A�
�O��J���_��@�"��W�n*f�\JJg:�@N�i�6J����djg}�����*i�hN
>���  A�z���ʰ8����=n�%��/��
��q!^h�E��bC�j(�ß��ʸ.9��B�N<	�{�m,�jʭ�-.X����� Vpd̸-�_���SӐx��՜orxd`n����tx��bG�S�	�ޚ���;�0Ǡ>��gN|s	=3�O��S��|���$�Y7B*��M�F}^�p�;N�h��	�.+K��W�{��v��^<�RX�
�iF�����s*�|Ϸ�!񊶕�lwV`Ep������P�il�:%9�D�r��Z�O��Jb�S���d�k]��ك�
m����
j�=�sNX�	��f�Q+�;��6l�lC�ю� 'C�u��gKp��|C�/c�
��U��{�d�ֱO�RU�������뱢�tR����a���80j>�����}�!�B4�87t�M~�S�{\����a��m��"���n՟(���
V��מ+�#�l�8���Г
�����%n�ѸF��w0\:�a�"�M�ñb����ĒE>����n�;��s����Ju��^Ee����O�R6�#ՊS���!�2��P���ꠍe�i�	�2�ߑ-��u+�[8�o�L���Q,��������?0J�ۓ�_M��v�oM�
�|>��N�u�t�Ÿ��O��c3�o��v��_�,=��&P�θ���澶/;�L�p��||�K����y��aOj�Q���6�����n���w#U�0��?��3��.�,0v ���M�9	��3G9	�4���ʹDm��a�y7��A���ŌG*'(^CAߤ�"��X�>o ��v{��hr��m�־|�棯�l�`�_�s�Kle������:h�p�'�@��<ձ�m06�܆f����VD��;�,tB�a��?�ܔ&��e;��-%�� �k%>}�:�AZ�@�T�r��/����3{�y|�bT�����|e=%}<f*Z]i��V��]o*��h���
u�$���8���5����C���]���t���zYx�4����ՅMe�JKG[���b����
�W7�`��.8�����!��p��AC�! ��]~���p�,OҾ{ѸŤ�b��:�,#�6�_�8[��
��?|�M��Au���M��X��>�S�{̴K�"y�u&L��`Ǖ���Dj�I��.ǍL*��[�.���.L5,Yz
0
uk+�G�i?�c����R������1i�'#� b,�tO���Pjl��S�O?ޡ��AX�j�>̪�ғ�s���}�q��uu ��䃫��(f%"V}�d�F�`�?��%���_Cs
�Vյ�2�!��"�r�R���Uj��#!��Y���K�T��.�у�+aZ���g��x��S^3��ߊ�Mc-
ԗm�={�O��cI�ۈ�K�-�箷ĭ��L��W�U2,��@�z㗾(!���LHSL���̔����/Fɯ�/$�t���l�7��ץkk�����}0�	��ye������	T�/�^ƃ��J�KXp^6��m%4`�
���5�Ȋ�U痵��.��1�Ma��(�z�5�iXD�l`O�U�Q�K$���D�޺��?����� r�ܳi�?�yf"�j�O`��H� O�[N`�a���ڄ1׏BC bi�5��B��]jA�:Axu=o�=�ׅ=�GLH�$$�A�`_��,y�g=�Q�+�,��:(C�ҕ��Yl�HW��l>��T��7'+P��A�S�q����)�bfG�%��89�-�蜄�9���pz�v_<{v4����W�V<HZ?����j��#-����:\-� �M���!�
�:�>�uj
+ޚ�ƅ�
ޛ�@ا���u�-8�S��h�����\�tww��j�X^���b����ћ��o:˻�3HU���8�q+�aa��M<���?���6!��e“Z=�����?>ꦏ�b�����}���Lm�V�@":�pc��"� �8{�X!g	�us��V��������|��`t�~|�#
���3�����[Dt�8��-���c�.��jZ�j4=�H]��X�Һ)���:�g���cU��j�M��(�����2I#�BQ��'�(�T���e�tM��S;��$�����KYǚ��mxÞ$頣�j*琷�9橫����x���h����)��&��S�lk�w%[g��^�������H4a���r�>��[��ݾn��\a/����|&� �+��]1���׽��&BS�9�
�'锍R˞��t��l�<��s�Nˆ�&�s��i�	��~���>�F�� ��U<4�g���}E	�_���e�Y~֧�yX3x,�Z�~<Lz�g����/FC�����K��%%iMc��M�{S�FȜu
j�(��Bߩ�~ADo��N���� ���0(��	�0h�d�A
�[}���m"C�/
!�)J`A�����j�9�]�}�~�)jT�~�=5Q����4N5{aR�~���A��T�p}�tu�8��6<'\�W����;�<�E��P�?��Y"r��tW�d�XX���~���ǭx�-.s�����%`4|���=6�ߨ��b����{��o���?w������<<�[�Q�D��g�gw;�#g����k�?5�xgg<�%QB�\�<�n����V���K��ժ�VH)^�f&Ohp�.������`^��r�e�%%���Q�I�U��ӳ)�kf�T����E���k6Oo��&K�?/�9�^�H�r�����z6i̧���
{��/�#�8����zt� c)�����|�:�O7c��lx�檎:�G�j��_�;��C�z5�:��+���D�RE�[����t�`w�W�}����W�7a����ÎhQ1ڣ��=ܕ��׹�)x�ʢb��ub��M:g�Dd�D8yhR!�B1�c}ڋV����ϑ�`��SG!��a+�d��8�/C��Hi�)D�Z���r����@�~9ʓ1H4����5W4����|7��1�:��]�mLM�W�>#y�a�?sR�AZqJf-HK�Z���w��X?�@J:@�^�&�m��H8���A���ێE9�JJ[:]���?�[����t�9J�������t��
Y��x�M*����n�0��y�-�����RP!E-R�8��9��� �u8V����O�����k�AJMguQ2<�'x}~y��Dؒ�*���tB�0o�$�"��ށE���*
�R;��*�զ��u����ǰG.���3Wo8���P27�q܌�Q��l�HS��J��2�},IUc�2��k�����f��(�f��EM7�l�Z�:�Pڍ,_C�Q�?/4�f}+W4ע}��8
\�{&5�4k�����aE�w��γ�:���,)�2~D�fI<N9�n�(}�R+��t2��++̽�A�O���%NZ�08+���
/l��N�������C��~��;�s�6�����9
A��4�Zʈ�M�ƽ����unO$A�E�$۱��.�HJrz�ͻ���b���d<�ޖ��*Kg�u8��~-�4��Yy�I�[���*^��+���c���{�汵*b^Y͌['K��C�����:�&�����)�x,Wւ=ZE�X������&�_6VVXQ�X�+"n�g�Ḷ� '��ߊN6�0��V�E�X��5�2����=&��*���~����tL����׸��
-��"�9����biš�)��*k�"%V]&�=�8������p���L��w`�Xa�'W�ٕm�rruvE�ȟg�.>][�\^��_��^Y��ۋ�wg�g��zo������;bqX1��?,+���p5�&�����FRJ��%��$�@�"]��[i��WHe-y��j�����T�-��5�#���ɪ���a$t���ʊ�ӆ���'��*ϧ[��eEs��ı��"�Mi���̭x��`��H5ZS�S�^07��n)���B
7�n�O�vޗ���N�l�"~��Z��.ʂ�
�5�"_5�j���W�x%!g	�C�/Y�[,P.�NS-X�'⬆e�v��U}�{%}he� �^/��q�f��������v2+�����
��ɫ��װ��UUV��]�����*�Y7�ŞM&n;u�$"\�0l)��b���`�$�\ǰlf6I<�26[5����z�:��ٹ��_K`}r@i8\�w�Z^ʛ���cU�R6��l�k��@N�h;F�"�=b��!���@�zmkƠ#r��]��b
ɹJ�8J�C��^���"�X���.��t�}�}���>���[}Rd!�i���bǽ��?�|t�4>��7�z��v)q��̛�t62$I�)�Z9`��ª2*���O�B0�m�m\�Z�3�/��!e��UI�K��D�bG53�(��q{8�&�5{��~Eo��h�X�D�5#_�d/��7�z�ohE����Gt"CJ'� �7�㔆c�"Go&�)�ǑKҗ\{C}9l�����ubP���o�`G>��P�0�u�?��t8|n�1���Q��M%�9u��;>$9E	#2wQ�`��ca
�s�������ƈ���΃;:�l�m�%��F\#��b�2�._��cf���eL�Q�"�F�]���4.#��񢊃���[x��ڮW7�9w�[�i��*b�m�S;�g1�q��%s�
�h��3��aC�:7̒f~W��J�
qЮKʵ�S��R��[�����P�f�%��z5�4��z�t���sݩt��"M�N�9э뒧[�HY�<�F�+'������U{��
3�5>���#Z���2J����y�Ң3dBAtcY�k�n���$h�_v{Zz�>� '�cZ�_��'\��
#O�}�-G�o�yG���8��o�vǐa�Y�[;�R��5����D�@�E\��	<�p��	҉�H`��c1�r�ǃ6��:����9Mu�.�O������{~0��x̺�j)�D[:C���8|��o(��,�9���?|0���u
F��-�z�jÀ�� Ts�hit,6$�K8z�;�^���h�����IV0nɮ8����`S�qNm�����#�@�Ç�u��m�@0���!|���^=��h�(�q!���G��ϥVc��Q�"F4�J��A�
N�����ֿPM�Q���;�i�`��VN��7RSuɌ��B
JA2���:�!3��m�N�n�寴=k��k��½��k��ڮ��ww�;䁶�F�Z�i�-��)1F�O_j���"�a����7�{��H��"̂��6�/2�>�@�f[wc#t!�Ư�ϓr�d��1�"�G��?��%�E��x��3ޗ���,�?a��?7�3��ʭ��o��gC`�-�ĸ�,<�s�	Sd%�=����KKw���E
�D��%(�|CL�mB�$�?J��;:�H�h�>M���bU7��10�Q�S�m�(�Xp�8���r����tG�>B+��[�{�nj}c��m�-��a$�ɉ ����$r�i涕H���\�WJ���d̀m��C)�0w-խ<>w0��g���2bl5W���[�R����l���eo	�ѣ�Y�7��O�Q�59����b� s�����	���K�GYacϏ�dB�\��O�������	��r$^;�s|�a2���o�ABN@���tE�Q���3:��9~���ߗklzq��&��*r��Ӈ�cG�0�F!�����g��B&�����>�=��g����k��xÎ��
�������)8��g�ŀCb� ��&䙔��d���3򬿡�nߙ��U�bA����g�?��Ns*+_s�-��ӭ��q"0��v�O�����p��u�ʀm�"�j�O"��IG���LUfl�m2q�b4+�L�t+s�qqpNu�0� �ЙL]1�NޱTg����&7�-�S�yw;�9w"��9����\�M�>�ڐ��n�I�)�o����$�S
X�/A&nߺ&vƚ�IU�G/��_��!���M��&����i��Lӣd���(��)��c��,����>i�~`>ӱ��ԱF^q<��*�2��vy7H�������Z1.o�-W���:X� �.���u͔Y%S�P}l\v�`}����̢Le�߰��(`��mc�����Ɲ�0M�Nڅ�G]TH�)?bS��T/��[�TͨI��([߄���
a"�%� �ӐBF@��f��n���gE\�{W�����W�%e5HM2�T���-�[8�Q`q]����0�XiW#��(���|{�"�Q�ڄ��"?T:
�n*	b���RU4Ct�����~�O��Tl���q��H��"�K� ���DB��s�6��X>S�ehO��fql���fQ�Z3�9��B���S}
�_\��������/����>��l�V�%&m��R�I,=��t�5�Z�����aҝ�Z�]9�Es�?����
A��&�;��%�aĔC��`}X�`y�@i�*�)��KZ9��غ�qI���`������~'����L��;8y��ɻ;sw4������XǼ,k�?Z�XL���$=�
 (˻<
*6�wr��W_�A	ҕuyOr�X}���8�>
�^�Q#�FV��0�K�rU���6���JZ��R{��
v���KΚ�iX4�zo|Qei֧�6ϖ}@��z��/+H^�A�q].eiW�^��?���/���?L��)��\�GJX����Γ�9��9J�))a�~�������˶gQ��ۊ��"Đm%���}�,�Vu�7đ��6
�����{:��t�lf۳��iC�k`��r��>-���xV�v�W�L�� �~8�y5��b����ÅH�W��g�,�~h�3,>���/VeL�Yl�ɑ7h��� �d�*8�@T~�@�!�/�lI1L%���!9���ީ�fG5��K�R`�a���󪆞X5�̪-�ހ��'u~�؝W'��ċ��?̚E�ĥ��X(�_>�u[�+l<��k��@������Jiu����@�W�d?<�jp�����������h�O?�h��'�������0цa�k	h!���!�O�I����
��1L���$���ՌA�c`��������Dt
 ��<��S�ʫ�1�{�If�:�0���;y�N���P��Sf޺g9�anX8G1�� nПNd��3K+�b3g�O�;|!����*]��ˢ.s�ݳ�p�?y�^�עX3�e�dņI-�uS.����c���=�yM��\5�(7A���L0!���˼x����"c���bAcw�墄p�Hy�F���
�Hg?De΢�P�Q]�r���
�ssI<	AX��H?|"^c��U�*t�-�z�V5_뫈n�{��|�@vP�֢^#��U�aw�vb����[�0q7���k�{<����F�B�AX1�F��r ���>4tl-mBq�	��'{Ry;�7Y�%A򛈛p�k3�DKd[�5�6~��[s�t2�p��Mh��뵏�TI�f��	�Gؼ���|'��4�݋}��N�W�f�AB��$F�|�!)8�t�,��"ϡe�	��;���)(f*��F�=�*<����P3�!@xiI|J�ă�Pb�O�e�{ȶ�����2X��rû�p�54�R]����AFWn��]W�IV@^�,s�,(�t�Y�p"��"bn�	��$9�-�t���ӛP���J�?{gTl�>���)�1	f�;�h�?tj�;�N.��I̖x�ծl�Xs8�Q�J���^m��b�m���
-'�4T�M��^�go�@LX��L̻�%u�[�2���[�D`�����5�]Sg6TU�����qJ��{>��Dx�jlUl��+�3��,~ȓq�����!s�'��(҆6��8��6LN���V�h:���׍����}x\�x!\���X�i��z�AG���q�Gh@�%6ְ2��Æ�-|�a��݆�iv��vƀ��{	n�ow��:��3Y��L��̏����€麙߂Q�6L7Q3O@�|/�B�NN�A��(i���]qmS�9��'H�c�'A	=��mE�o| &�xh_����#<<q��f���W�+�L�C���jE`w�U�[?�����N��*@Qi��VD��N&��WF�23�����&%�Am6�T'q��Z�
����x?�^)�'O���՟[�P�e6��l�x��b�~\�̄`} i69�J�:ُ�zf�!��X1�M�Y?1jsf�uu�b%G���pх`
B�4Y��jT;+4���_4Kd<��{ V7��_8OU!��M���m��ɸ���Lm
�Uwq1�ě�B�w��gJ� 1E�`׀'��DY��<KE�kVga��e�Xq���I�b�;[�M�*4{c�}��4wϿ
��Z7F0N��ñO�KS6,7��z
C�RDN:��S'jB?GR�b	�y�1T�b�d_��bN;�����\ν/�e���b�q�8ZD�]t�!�-"�m��@t�X}�\cE��G3�4M�6'߽�ʶ�����7$��a��2U�c���&o)���Ȇ;���bh��gD�c|�?^�[��ݧP�h�����-��t���B��3Ɔ�ʉ��/�rQ���-�����4̶;�8%�X<��XQ��m�|�j����re�m�@���"�Z�-?�eכE�&}I��u�5�K�|�l�J"���px�B��E���o�p�r���h�D{��	<,��`�e�A���V^�ի�w4���7���UVS�����g}�RA�j�Վ|\X?��cnܫ�Y��Q���(��u��3Ma�B&T6�w��z_�NS��6,�LS�4
>!〨��{�v}�ѥ,l�8�w��#u8+[�LNQS��٦��:�D��Ū�5��
&�h$���@ۤwfl�y�}|�3F=f�to���0����_o?����[���_���Ss�.�C�ä�
~�-�Di5�S_���V�������T?N+]�f�Z�RHOL�ٍ�+ߖX\!	�	E��Dw��jaZW=5��E��d�Z՜�9�:u1��$��&��}d�`��^�J
x�ʤ\��7�u���.c�S��7~31��]y�R���~��i@����H~9�!�1�f���6�.�?&���c��]A晋�"���Os���%�!p�
����c�2�p�3]f#HED��IG�r����
�*F���̤�������H�2�{��>5_�|��*�LzL����k��|`\xC`O����J������q���5�������%%gb@���#���H/���^-��&l�9M��*�uAQ�U\��t5������b�$���ELX�������	��o�#�dd:���u5��{l�EDki�ty�k��Tr�ں�w�!	�@%�>�jP�\�emU �Gt��d|�RB�+�r�Y
�z����}�̽���hq*d�X�d�'n�2�]�;�d�O/_fx]���Lـ��l�U��p��K�]@��Р3�	��`���\��,��G����)5�J{0V�=���_N,��>\l�Z�ȁ�6��f�M�In�d/h瑕2%�s.�8``y��?�Q���%��!��%���zr��l{��>ݳ��MƷ6��Əz��X-[�݈.h[}^n^��W�IGr�?�̓
�d�f,T g���zZ}�MAo:����jpH�Fb%����F\��o�4�&�I
�0-��v ��
�'7(50TT�8��f�7�*8�QV9u>β�,����V[v���h�KGt�0���-ژ8jO�:k���Q}��	�+�K��Q���	��7�t�p�!����).a*��K�~[��Z�Q�]�nna^�30�ʆg�BY��zo�=N\����	1�D��Vd��2�l�GZ!4ǬZ�+x���94���$E��:jR��X
"�m
#o��[��"��9�������xMg�>��Du�r�ƼU���/NT-~kq'C)�1�N�t%8�pXj��R�k��=�n��%���~���g����j*I�ܭ���p�>`"��>'i6���U\�ཽX�$焿SQ��\�+W%�&��;A�BO�����?w�g��s�%3�	����e�PG$����$M�d��e8Ie���u�+\̄���N�my�
`�4�)����J�ײH��p���u{h>a^�[���N,g{��V�Vȣ���c�"�!�{�B�	��%&��H��K����#c�8C�=����p���m�]��A+�F�s�J�;ј�d#C��ֹomj�`v���!d���yj-��W�y��"�JO��Q�)���Q�?���s�Οѝp�K�/8cơ�JSQ�T,�#`g�z*'M��yU/$k�Z�������RH���BQ���E�x���/���I�_Ы���}�ۗ�Q>e�������w
pʰIL|$h[o^׉�'���_>[�EQ��esq%C|o����f���2�*��#CYT/��7�͋2�I���h.:��%�F(�����A_�	�.���҄����>�~�"b�tQ{S���_}���a!F��������&��~рR2�w�jŊ��!��p?
��z�U�$=5K&��M�;�^6�,�ZNٹ� tQ�8c�6�۲yW�Y��hr+.�UҌ�+9�嶳�`R��=�\W�K�\�LUs�����][s�J�+F�MIf0�>9-�ĵO)'��S� +U��n�6��o_�*��h��kwOO��~�B���R��-�
R�y�]YɆ�8+�V�l�&�hJ����R�B�vڀ#a�x)Qtc�"a����+�f���x�ڢ����P������ضy�M���B/!�
�܃�j��$��Б
 dW�W��x��b$�Sx�kOS�,)^���t�~����c�M��](�섾����1���rxl�"����'�
�M9?%ou�nT����a�NY��ѥ�Q�9�cY�����wD�V61ֆ�WgH�6C�G�Ɇ� ��{�@���+��d�=B\n�~�5ҨX��ށ�$�ΰ �g2eD.����D��x�-P�"��-�����+`�E^ͮ���I���Q���m�d�XC9_�v)*������W)�����g����(O��z2���J� �&b}ئd�2��|�K�����-k���f?��)ƒy6�Ֆ]��N�|XR��`�:<אƃ�R�O�%=CKi�q6���m��e/Ճ¿�.���U"�^��C���‘�9u/��j��kFPC��gN�؍F*g(l42~���&9�CG6~`�Sm� Ih䢾lN�Ʀ�@�L�1p��n�6-Z�M��Qg��hb$����ʹ�*�P�zȀ�1.�!?�h�j�kYfXK��P�_ߣ�3��y�§�-|�fXD$U�1��j�2r�&�a�����a~���;&��$B �K���x�E�����ڎ�]izRq���`á���m!cs���X�Љv�%���!�Jw6�z��g����[P��&;SOxht�B�JN[�Yj����sh	ۻ�Db��]�F��h���;U���H`�Z͸����A�����(�3	|��\�Ԇؑ*�6�.�j�(Mx��`5��#UUciI�![x?�;X�@Mi\����+C�
Y7Z���e~�
��c���0�
��S��B�]�
�:,��v�Dh�ֳt��s`k$���ԃ�H�k(
+jY��6#8���d%C��ޭ��I�ާʍ��(A�/��x^�,0��-:4s>r���f�QEQ�h�Ͼ�aVc�w����2�&'+��h*�>�h���t����m��j{�-�y��=�9�eg>
��H~�7��v��"���k��R"
�"�~
��$T����RL�7�&ѩ9�z6�=,�jt��>}�Yg�lnA?W���;'����Lj)��V�B�0x'�rd���J'�k:��G�E2:��)���!Vי/w0n.�������5S>��N���s���%�d
�����\�7~����η���]姸L.l��V�@n�؁���&�8�FnK���
:��Z^dy;���m�;�?�X5�g������U��\���.��[n��5��8L��'Rb!ѣG0����v��B)|��.��Px�և�o��'�cYx���Uy�do#Ty�"K.֋G8��
���*WƗ�zF��o�&H%C����}�����~�e�	�A�n�ޟ�7�0�ow7At~ߎou��}��}
�C���r/@�:�"��c�&���>t<t���p�'�t)4B����^<%S?��)��H��~,�8�_z�R4NW�?h����T`��W�)=��pq������������3��� R鏋��L&�u�AEGcVa	�vpTB5ձL��t@i��)I��P���K��G:��g�2�3p�� *b�5�Κg��������Vy�˻�I:a[�ٮ���nOOϻ���	>�K z���vZnv�A3lձ5��nt�>������r�N�v^w�$�
���=D�K�
�H�b��*�ѻT�~K�FZ"�2�:s.
��:7���!�y�A��Q9�����MH��t.�b���+�1����Vn�>N�j��RS�%�^���C��rط����Y�yrOe\�o�ɟjo8?&����e�k/:.Ɏ��:<��S���6���1��D"�UQ$����ĠI�:�l��Fq�"ũU�O��8�%�`�c�4�I5�R[
�HT%,@?��Z����yj�.�SKf������<�Q�@uT4̩t5/Q�-*�r��{`l��T>�q���T�*����"m%�F��ä�N牓m�qTO���_�մ휺ssE�(��H�}��x�B�6q����)���B ���@m�Զ�Cb�:
׊����#�v�ѐ�Y?j\�
�!�F�ì����G8�SRU�b!��	�o��q�F�|��R���9��D^��P�[�4�]�4U�l�.�����@t�c$!']:��cE��>4_B:&��G>&�4ʚ������{8si�[�W�lv_wi��T�a�0����ѯ >'�Vh���R�e;���7�+U��
e\33+���>:�Ɯ��K�H�A�ˮ�X@	�A�S�|.ݥ�?�.�����P�Хx�h�U8��p>�߾t�Y�ˊ�Gr����-����m��و�n�$��	�h���C�}K�31�NP���N!S�1Vå�儥�%��^�m���;AL��m��j����c)Q��(Q��C_}==�5��b�2E/��j¬�H(b���*�7v.PZDu��h*tXi���Vj�l
J����~5`U��qJh��ݔ~�*1�4��%�c�j�[Q���1�P��:�"��F��D�m��),��Ha�O�?�R;2i��E���cWK\�m_�;�e}N�{ٽ��J\�v���-~t�?~6��X��S}C��f5o&�g��0��[�/x9���	����!��[����ll�E>�N��#c�#��74����95w�h
���HB�Q%7&E$�
���r�:'{��NM�T$E҂
�=�Y��'\#4�N(�6�]���{P~+��X�,��W
����o�@W�!�Vs�!P'xxT���1�x⿎�~6�♿��H+#,�6Z���Y]�u�R��AZ8V��vX��9�km��>~������#<�rL�h:����u����7��?ډ�f�{d���jDG7����7�/8����
��󣚕�jV���1���{�C�X�7s�'��^��=���ꋚ��s�'����X|�Ļ�U7�Fd	�q�.qbYK�kt������(E,2>�<�4��r��S�O�d7���w�YB���c����{�@�r&�ݜ��Nw�������Ս�[��0�V�|ˠ�x獠��]�y��Z���~�T`�^�ЫR�b�E� �;���p,�|j-�\�PWdJ�R�1d���#����je��U����I�N<��ŝ�(zCʋ�2�	�h�Cu���r�t*V{'S��ʏN/:�TV��N�WEN��Q��c�����r�='�ZUMQ����؎b���#�oI�{�o5�\��rsg����j��(���b2��;z���y��Z�σ$�r��tꀋ�����K��0��uN	��^LX���RZ�JYb�N�&��6��H#i�r�e�ۮ��=F���oj�g�$�J�M��ߵ+���;�b;�i{���7@2�
��x^���ĖK�	)>�X0ڼA,�wo����-"�|82�A����)�^���'m#G����K�rU�Ts�o����|MS��(}<�/���x
���0���u��Q�$��Ik0(����K� �*u"M&�3Z�5�u^�v�iB�jw�R7�X��
�K\��d$�A*.q�Kϰ�#�S��_�n��?|�:.����o�g6����k&,�wd��)�©6;���n4�?�1���A�hE��.9�:�S_!]���e�vqYhm�n~A�\��?�+p�v��h^q�ao��B�V*.S���~�|�r͝��ŕ���d����T��y�`>\��W��:�,-b�'t�O�6\�f�(�H�����Щ��c��G�����Y`��!ߤ#ѩ���-+&�b�-)�H��Bތu<��Ek?>nNk�����
wD��1.vLk�i���#��%r���\�8<�*�/?��$����]K�%>6���s��8��||�!�.����@͵��K�%9]�)���]!�m^��0GZ�Ue�:W��,�Cd���oV�f
#󫑸J�*�`b�������U-�&|T�)+	K�><R�gGF]H�i�{8C�r�qP��W}���|��}N�aq�8C౦���L�8�q)����]pF0�\o���e>�$��	xbx�3<K=d�A��ci���K�]
sQY6��2�B�U���]����zD�u��2����C�+Kl�s0��O��0�����σ'�f(�2č-�G?�8��+�uИ�W�(+/�2b�e,��6�*5�� SE����d�z�r����E��y�x�Ăg�X3�q�"�2�R�v~�����}���AМ�����W1r�>�ױ�\���W�a-��O�?��H

>�/�7rlY�����~y��h���^h�1�"��=��Y<���ݖW��~tǠ�>����E�gt�8d|ۘ{�<�B
�)`�B֨�;��0]z��rK��L��	��G����]K�0=�;�$,��0���QL�xw�_:�\���t�|
�5s�x^�@�ޱ�=4*�Y�K
j`Υ%��m���f2��I���$R}�D<N���,�p���@�W�w�/g�DE�7-����Ĺ�����0���q4ޟf�b�9�bE~�g�qI/kd�Is����c7�-7�`-�žU�nL'i�����/7<�?�@��Gx���8U���kZ�VM�+ڞd��'8+9��E�:]_���h��"m�E��3�P����]Ko�6��W�>I��XڃTa�M
�E��vR��zxw��	�N���^ΐ��\ٮ�%��y|���-xqI��v@�\)ɲ��+!q��`D)������	� ,#�廂�����Nθe'�E
�wNV����E�D'�u�z�:���Pp7����U\����{s�v5`45�-`�Q��7�B���������w���ۨ&�{�Wi����0R��VA���q��փ!��[�M�ٔ���z{x�|�0�7�@������.?�����y��o�|N�j#�a���K;�(��LK�R�\���6+��U��ٛ�W,}wF3xN��ՙ����qfz�'�.-[gI�m�s���o�n�CEz���9�x�P���gf\�"���OBu���B���T��ӻ�t�|ډ�Mz�: ��ݜc+S�9�h��i����_�������ɣ�0����.3c�|�qI8�N��%�t�V	��î�܅7O�+��wQ�#/U�S)B��o��>�U��������Fn�N!*j���HW����6<6��[�B�)ܹ���Tc��
��8�)\�qOFO@A���?<ځtwH�R�W�MXuB���(-~���"p|��~>g��'��i{�V�*�?�V�7������IQ���
�Ն1U7��q��	�������R�RylƲ���o�vDm�t���!���3V�i�;/����~�Y�����n���V�GH& �Yx8'�%��kaҡ�b�=\챂��E�Z��%��������.f4$�{ ��RIE�r�D
�Hj��������+���� *��#p���k����hڅ�b:D�T㊃�83�s@��'�h�z�{o�rY�)6��@t5#$�6�+i*3)�&8,Q.L�#a�v먘d��W��o?)\@1:Ҧ�z�M��[��9(�b�6Ũ�%�;B��3�lx��rě9�'��r�㩲�w2��f�Ǩ���7m�����c�N�T�,��`�RW�}=����S������@����^L�e���n�ه�C��	�J|��[�1��b���]@�:��g}��!/f�0� ���J"�ln�j��Q���J!�I�nyR��/��}�6�&SἹ��U-u;�>v�''Ȳ�b�M#��`8�*	}iS�6�&�#�2�F�(����
�EW㪟L����d�|$nX�[
��úB�y�lNGA
l�4�������6Î"�v���2n�^:�B���%Ny�@��_��p��̮�yA0�Mh��*�]k���{�*�i޶�x�H<��L��
��MzW���݈g�����2����Z��A5�M�c�0�(�(6�[����Y�J.�*	�P�L�L�0�92�Yc%�I�O�O��^�	*
�r2�`�'�7X�Vf�Tl�N=�2b?U+sլSH��S��@���$A�VW�Y��c��o�����Ɏ��]�^W�b�%{RP��\V�=����z
Y���V<o{��C�62X 
�7��U�Y�L!Gh�v��n�]�M���R�7*�i���ץޥX%P�;#|�� *ɘ�	�D�ZjJ@%��C��B
Jސ/���E]�idY�o��b��
���C�U7�|����D��TCqC�jdvF�6�Y�/���9����]�.�Xjű- ��OP���#�b`�Be+Қ9D�Nx;j��+R��k��DM���I��i�I��W��G����	�"WBp�e4�r�s�����l_��g�c^؊R��r�ּm�7˴k4��XΑ�Ө-���ۆ�^k�oDSRG�Y܉"�p��=M��7���hn־Y��)�l=��K��E/�i_�9X��d5��蕸m��Á�KTʁ��?^զ�gY�T!�����S�d��B@��*2���?��/�_�����wg.�F���~�Ϲ:4��G˝X�u�k|^b�* N;%�@]j�Ɨ[eB�{M�o�ҏ!@Wv�wX�}A9L+݉�8���+�N?�
L�~?��_���vz�+�"'�潑1�.�i�<im�ܗpt{���.����r-���e�-7㮬ᢿ=�G���:��V��hW8;dYeÜR/�'��OI���9o�!�$��l�N.9��V�t��4�m/Ѯ�i�����>�~�+���:�ہ��:�S$z�F�n�U�SI��7��#�����q\����~�IݥJ�$9X���)d�S���@�ʅ�N���z�O �{Oc)SP�ʸ@*��9������Ao�X3P0�J/f�aD%�h�y�G�$f|�"�����@Ԯp������]Ň�`3��?��ք�����n�0��|���?�-�K�u\7
�F�<E�-6W W�� �ޥl'��M�,g?Ψ���O���jI�ݾa��|���T
†��b�M��h=7S�a�O1a|D[��q	Y�V@�P#�	-�
���$<�i7�HTЬ��{Yvǥ��q�ׅ���z��ݮ
>�e��<2BBځ>b�k�.�?���GW���ή��r}[�]_�Wg�e�ºt������x�T��,�r2����}"H}=��@��:v����9�}ԁ?@�YT��jS�R)<t$�/P� M��E6��w�PHs�Z��%�{,��KW�G|�خiHZ͸����;I<i�¾Pn�OO.Xz*N������2{G51��YAn"�e�X2}��Q3�<��t����B��W���d��R�ȓW����x�Ҥ�H)�%S�����&���,�&R������G�);�q�.Φ��
j[��`���v���E��0����V[O�H~�_qZ��Vڗi6�E�(*� D�O;��z�i,���g.N�E��;���\
�1������ca ʎ��?`V0�Q�Y�
n*��eƵ)T�c�^C�4�V,�ɬ�2�3X��
�j�r�e�a��|�'h�!7,~jHaL9L��'��)�4�*�r5�^�Nc�6��L-K���P_�K��'����n_
�)i*��f��Q�ը��׳oW������Eε��0�
���#6O5)i�YTB0(�$Z��S�lP	4Ϲ�JRW7-�����݌g��+�'�/K��{q�ڶׇC	����Hk����E����m]��Ǐ$��9�����f@��3V�8��D���[2��ǥaH�܁�#(�N�~�����ްb�ּbH�AΖԂ2�`�P�U�I4��^d��$�rDVȊ���������2R���l"{�qVtE��)�4�ˮ#��v2]S��!!�?���?�Bo=Ȱ���k|�Y��!,0�eJtO�#@��[�_�[�Hx[�K(��6QP
R��j��94��C��Nl���[<����{t4
�w��3/LЈ�c��KG�`��j�*��K���-xe�M�4�&D&s`+�t�P��ˢޞC���԰��A8P-)��>�|oh�3���j�۽V�
�0�#$�&�s�v��������������J�%X�a� �Hk�O�qֱ�@��l�6rE+x1,8�
�0D��B���5t��"`0,�{G2�;�h����6�Be?G�ϥ�N�|��݇L�r��e&:)���3��%��g9_!j�_���?��-Qt��?^��=��ߟ%htA�nM����_"�ߒU��I�e�2���bEE�vަ�Cw���=9w����>z�o#,�'��d�uLw��c��
��\�C���;q�(����[s��-3� qW["�a�/��nA�E|��&�ǃ��+�=�7
�@b��ч��ϥ6�vJ�
�Ϯ���W���v�����QЧv_���$�tK�[��AI�.��S܅�~9r��=�ÄZE�n�A;�l�ñ���\p�>�%�t	O�w�Y޸7n]�Z�'���Wx�g��o��:ǩ�v/�nd��={��tzr��P��>v��^�93����t��n�mm!f�Ұ���u��&7d-�A�G�?C�|��-���*��b���e���L
.��rFd3"��L����kS�H�ń�Z��mH�8.!�l�<����Xc-���Ȁ7��fdػ��
�3=�=��O��^'q(R)Z{Y�(��i�:a�mG���T��,Y�D����7�lw^N�Bl7I�KV)�k��i,Y�E���ei�`c��RDl�F���o��2Y.�4m6�`��5-�|k0���2.��qg��{������$��l�'�L��e�[Dv���_O�~9^�0�Ҳ�����2X�J�{��O���zbP�,�X*\ ��e�py.[9/�JE#c�4�'2cr>��e�x�x�e��<aGF��O�Gpw�{����k=��Y��vX�y>T	(t��o���j
�V�S�7-�iT";Y�J����&o?���Z$l�}�qƋ��_���p1|�dɮ��`|,�����1��Hw��1�ȳ���W�́~ɯD�&����k���7�AV\N�6�ß����>����+v��5��
�Q�r��<����u��a��oAp�������X��p8�����c^ɜ��ݳ/q���ji������!.Վ��#��[w�؏sƠs@��uV�t����F�Y�9��x����Ƣ,E��E��E�R��]9=Ï2�
���.A��7��f��q�pҁH�_�Q�71�Y��Оg�s��������K"��z��RN�w���#�M������3�=�nR��NG���2ST�6<]m"�DLJ�
�2X�rL��l��4����%^����O�o������wrI�AN�SS>Sʟe��'���b~E$��8 椗7(���r���>!lOD!�]i�A���(	!�TK��X��jא�䲥ʺòHp?�"O>��L���]�,��"
$�B䘈Res��r�p��I�<!��ʬ骄��n FB��ΐ`Mp�($������
X:xD��c����r��\eQ	$gC�%N2�dI��`�DT�9䜾D��!�;��=3)���sȶh��N��y���ip���/��
��e8ň�p�L��Ca�b���&E��(����"«�,�[,�_�~C�@$�"�<�K
�sq3cd�4C�^�0�Gh���a�nC��ԇ6��.ɘ���G�{��<At�������=d�m*��t�:t�<�����ߗ!ϫ`-iA[qȞ@���3i�"�k���}W��u�I�³�&���;v�f:=쁭�3�1�ť�P�%ƃx�Oy?�C���*�'�4T��,���=�꒷㥯yG�nC��X<axBA(�D����#�P����nP;����J�A)dI�]��y4UXV��H �!B���c~X:��A"�K�Ө:��O|Q ���yqo[o���Z�y�mbb^���&/k�@��ƫ�ڳyR�y�hW�����_9�O����[�B�
�{��n���������nݵ��U�6;�_À�Ws���AN��%�V�R)�Ү�Z�;�V������uU7�mw{l��ӱ�����0�W�<j�:,��SVA��|@3�糱�#�D���v؋����Y��{9��0��j)�[`��b`sڐ	6q(+6�s��8���uC|ّ6G�����M�Q+.Jq�Q2�hp�I(Z�}B���>��~��~��G��r%�.���|���^���t��@F �j/_<h���?է�6NӞ�$�'�*������w��0�b�\�i����P���u�e�Z��
>L��I�K��!ˀ�%��~2OTu��qJǡ@���7�*lf*�iN1b�{G���C�P���P��q�!��k�J2v	�oh�
���j)n���~�V)���R�]V/�Ts��Ζ���U#X	G�#�I`�[`��B4�=S�ZO��a�r�jM2B95��+7c���u��[�ζ6`���v1w�Ѥ*����aXЅ�F�fS��w��P��	ڃNT�V״�S��TꣾU*s7-��GB�������Y�0��lgB�a!�r�ɐ!Qi1U�vv*h4���<i�R� ���t���Iuή[���3�G�1�
'T]?�W�uw]?���]_�T�|�@nH�_�"m��U
��Z��I�[�?A
Z^$��X�i�rW��Y�'q�i�����Pma�;u�N�k��D�r/qܐl�4t�ڶj���);�����2Zd F��A��M[\�/s�A�jgg:�o�<�s����_�
��Cƻ8��V�Z%�b�m�z+�эr�N��ɮ�׵Q��w%`M�Y���5�`�����&��p�#�]wݪ�B?�E��F@ ߈)�����u�x�)xb�NpƂ�`���_W*;��f��NတǔO���w��1t6x&�)AH�:����y��p5��/E*
��CՂ�.V7TF�D�P�8��QW!�a}��$6h���
�s2��>��6"4���2��ıHK~�g&qR��)�]!���T,^��Ť$��Y�ȝ�)`Ѩ��q9�rn�71+���K���H��K�v����rU��z����n�wk�W�/׶ؚ��v�:S[�
{��ʖ�e|g�IZ8�Gq���KniY����a���qC=h� |����0{��p+�-���Y�u���λ@4���$�
R}�Ae��󼂂�-ĝ�щ�����Y׮M�}`�41'���ũ��X�B8eׅ'��^[��T����Ih$�$�!�qȺ�(S� ��[�B\{2, 
*����"P�
2+s^�LTM�…�Ab��zMג�\�$�^@�&]�'UtKl?�����%��_0�p��zhN/jB!>��d�"���~�c޴���2�1x_E-9�!�9c��X��8�ƃ�`��=�E�>�'�7�.��n%5�g�zM��)p@qK�T�MЧ�
��(��5�� �X,�;cӎy�S��V%�|F��	��P}�A����OŞ7.i���]��$���*��2Nb�F�&�
�5E���wzo��1��۲5��b��$ޫ&s�[����ȵת��`B�NO��ذO��\[b�
C@��f%��e��c΂I� &~���d��6���z�G����G���6w;����%�r�-
��b<=[!��F�D�WCu�8����y�K�T�s��b1��� y��t�f���9h���Z��_��]�-s�lL�"=m��#6Z�����;�����m����B���?�yD����
�U�BW��/�Ԯ�>T�ܗ��EQ���:�%6����Dɣ�xm�$�F��UrG9j�NC0���*�,K����^��X�"�x�j��/�@D�zJ���~dwc�B�D5��`���`�C@��N!��k�
S�>�J%�w��+:ML3�N���yUk.{x�V��6�?w�rot�S�,�����l�l��&m~á:���~�g���n�p]=-��WQ�D��xҐ+ͭ�ژ���BK��s<�S5Il�_�/�_4Km.TY�8s2as���nȨ��y V*uc걥܎S��tp�]�˫��~�
�P��6[_��g�{'��4>3S˦��T��nSb�wB�Q�~K�7w���Ԛ�<��9M�l.�����&}{�P�y8�=g�K����{ᴧ�.1�7�8j�h�Լa�o]-y���,�N7�؇��Mi�;��X�q,
o#������ī�[/����*.�+WM<9s8����g_�P�����OD�Lͳ�����
�*���h�Kڭ�kI�4�$�A�j�#�x�>��p69�ϼ9�?�o��j(m��΀�^�!�B��7ෑUp�V8�����ި�h����7��4�����A��c���pZ��8w�f���9�wE��t�]]v�eto��)sd{�WC&4:]A=Xo;�C�x@v�]cY��#�?ki� +i�9U�U��̩~� Jğ�5Ө�>��;m�N���:Gg5
����SJg5��ַҜV'k��d�����0W�[���s��7�8�r�e�*�2>-��!�fl�I^�e]��Z�;P��C0=Z�2�L�c	���^���>��?�Z�
�@������/��EWL�4��������%��@��9�����&6��z&D�!�0����Z�t�mw�<*�_6 ��	㝑6	4KBB�baK�N���6V�w�E[úg�k<���<��~3�_�5)��n�H�
�:�x�[Z��m�g��6˂��B��ʆ��L��v$��Ȁ�=V�k��@���4d�T/ΟR�*�0\���ڃ����xgn��i���C�)<���Q\ݝ�(�p�7��9z;1�^���^#�C���0	2_\�
��^z�>�˛��b\�N�M��
��C��h��rg��H�7 EG�Eē�7��Xms�6��_��/#ٱ�8�N[�N#;r�i�2�r77�	����$8hY����(�Lݻ�$�g�Ͼ�����S&Q�r��|aY7�f���}����U�ʅf�Z�!ˆ�](m"6�2F�
��}+�(/�a�J���"[��`�)��`,@\~fƮ2��l6S0˸
֖�~�tB����jI���ptz9��%������a��1��"�����=��|0Q��rZ�5jP��Q�N��_�5�!�"��a��+�E�9���䚄�U<+����<3��jJ�V1^0���JU����k^�Whw>�NǤX��d^*�߉�zm�{=���"��t>��c������7�2b�o��l�UN@�{�{7��7�+^z�klϵܟ��
Ǜ�1��V�����j	e��B�x�!K'�Y��7U\�H��)�I�^�Ӆ��&����C���A�yb����
�\.��w�����ǵ�fa�f�^�E!4Ϯ��HA��(8�)�,�J���W��w(x&3P����f���`k�p#���"PmÑ�.�"SK"C#u(\XRF��Ea�q�
h%�	ϲi�b�V�Y. �R�\��>�㒗B�dQV6��B`b��I�GA�a�2F����M2��2�\�p2q���!�~(/���1���9??"�G�B�$$�F���a�2�f��xU���|A�i�T���B$7�H��D��-�*��߃�1�H������s��X*��kǘ'AP/�N�Rz�,�U�lW�e�I��m�XP?�zYP�+j�!I����[�T-��6�uZpcMQ�8N"���u��6�E�,�ܹ�9p�����y��(��^���Sq;� /�	�D�g[
z/C-!&
�b��Ob�
���]��6
Nu0�In�'L0Pԍ��'3n,AQ�x�dq�L�T��[J���t}�ά�cH�0���~�FR����[�yŘ��%�b�ۼ���j���D���8W=9�*�!nج*԰������x0i��Gd���æL���Y�:�25�fs�m���&�ܑ�[_��[��1�����k^�QJV�t>ڐ��Z��k�$����M	٣gT~$�.����=8D�
|�.$W��I��)�R��*4Ug��������]律u�*C�*�|�
O�a~f�B�,�������^�h�=�C�a_�f�Y-|�]�֡p|��N�?1.ZO~-��_�<�;*R�1	�]��p0�S��?�#��9/Qy\y����p8��͉��b�Z�@�c�Dh�L
�p�F���Mb6H#6��Z�Ð�3ᄭm@�KxL�Ej=h"�:CK���^��F�^	�I��͡�ApP�p X0�5��(�����H%�d�O������'7�y3z���wo~��W��H�|����c��Ҙy��č�}c!�<s/����7����֟�tW}xp���?N�@�V�|����EaUI�hI��i@o�;���)́�b�F;�}�k��C+� ��(R�uz|��w2]
��R탇FW��FCL
6�7��e�����	�ǽZ���z�.�Y���{��Ē�5{A��EW*f*�`�$LU�9xDķ�̷�XU��&���\<��<v���ͤ�`��<��Ҳ��heGb�e�#C���@-�igg�vdዠ	7���8w�'q�
�:M�~�I�~6�o(/}��f6��]���?�2h�3ӠB
��Ta�俾8�����]0�ڃ��U�0�Z��W���(B�RY����}�Tp�,�w��(^/��='1x�ۆ�����m���֗B5��_�Z>U���G�n���7M�?R����B����/�q����RHj�N'�`lq nx�
0KlOp:�w2�r����IHΥ/����
ڻ�ݟ���:>�"W����.����R��_Y�ؔJ�;����bl�>`~�ܧ�+Z������O�i��_N��n��m8SS�$�r��-9�{����nP#:�0J�p�L�"�	5�o�>�C9�%M㳿ι�0�������������o�M��N�WqT��J�R��4kU#(���<pt��DiT�r����X��w��w3!0&�{s��k_�����M�m��/@p+�e0V�:,�%hÜ��1f@���&�j��~%��7��8O��-��P��	.�0�x}sq6�ؒ��J(�������5X�ϨL �g�z�R���P�����Z6���5���K6���Gs-
���P�v;����R�8�у�?�4����XKo�8��WLz��7�%A�ͫ۠E$�^�n@I��F�rb��;|Y�q��-��"�Ï3�<��~�)g	-%
�x�l�)$C�����`�Q���n�I'�ʸ���9y	�J*4��i�$$<�P�%�2_BL��4��LQ�B��w� �2���Y *Ȕ�'��n͙��8b|�������"R��JxQ�TQ�T���̶�{��O�\��mU��R	ת�x��U������~�U�i[�LZ]h�x	p>��TD�ʹU�2���ѐ$�d�wŁ�@Ҕ)�K��卷�\�R������jj������(���Z�2�)ãFv�/��:<KE�^��N�_�R�Ҍ,�0�0[���Ǐ(0��Ķ��/)/Z�v�&�p؇O)-8�&i�e��̈́[�q�Z+��;}4����l�g��/p���cx	О��P��C;`�����,j:2�ƈ��I--�I��sH�SiDb�I�O̳�H�X���0�eE��r�%�5�ޡ�Ѝ.H^��IE�Y�ܚ���]�c�����YF�9MC#�:z���H�9^�!�(��(�ƃ'�&P�d�H\�zU.0dE�5�Ӊ��ڠ{έ'|'r�n+����2V������:c��%Wl�O�Oq�5�i��@c����3�g��b��2�d^��9�W�t�J�'��8V�G���ʪ�2���94a3��W��$�5��6������-�s$��{�j�	,��.���&Ą�
ԶfSA�7�I��������݂�^���W'��&��8���νRlˏ;�6�yEo�՟��������y/C�z�ر%ܔ
6h���+-��q�G�����L-�ԕ��fS�‡��<��{�`|���Qb4���}m��0�a�;�`Mж���kSw_oQ$�)V4��v�f�!��C��6rY&g��<:Ӆ&ud���m��p]uD﫶�5ȃ	ˋ��E�M�2�;ט��.�4�7l��U�\�x1�h�a2F֕��:l�g_?�y.iM�����`όY��%�&���"����Q�<�N��t��S���#҄�J�(X�z���/ǰ���,�506؅	��n��D�$?B���AТ�u�,�1X���1��#�t<$��C�戸C�& ̘�V]���@5st��u(�>i�����+���qԞ�0�#7��a�����1�@gY�m͟�涻��T�G�����^{Y����㑘�~�N�h��6%�m�Z�*eF��DHf��3y�Z���S-��#3�r��~j\X!�.�%6?X���a
1��Bw����X�M3�X��@�ҕj�З�'��̔�mǴ�LE]*2�M+:�/�)ނhP�����VCY�w8��^U����0º���tF�\
��2R��(h�0^�b\�9���E������._)s]N�4E|��Q�	g��x)�c�M�r0�2�3biΗ�n�[jc�mfun��yΟ��.O[�f��z�.����&qf,o�ц&xu�PƬ�ti�oKZFb�6�f���Gp�="A�r&u-ҹ{TA���T�[��0m�mdmϠ�u�-�=X{[Ei��=h'���hK��mG���?��vM�c���~��vX�+��%Þ�-xF#�V�:��Z��ܨ�l��(��`}��k��!��)l6
��7ڵ��i�3;|�'��u���<e�����
gي��&�z%�)
珘���0#��'*io��~��d7d_�譣=č��D�����f,�n��c������kǗ-��7}�m���(�|��QM��V�O#7߿b����R�/ t@
�H'@��KuJ��N�W�^��@D��;c{�ErB����of~��8������d�����A�<��~=�F5�-�sn���tpպZ������-n�Y�*KF��P�Ü-A+���Cky���!��`�Rr��a���Kj皳<o��l&\���������&s/λU�y#��`�=��f��^}}�|:Xj�(Z�FM:T8�:��=���:�qQ	���b	j=��Mf�1b%�A�F"��l[�����U�pB+&a���?3L�x�p5��yǒ�<�F��4�:��;.JbB�Be�mz�t¯�������r�18�ˊ�5�O.�^��ͥ���׼f�
��	��0��h5�lh��f�^����'�=���Y5-�{n��s��5�X�5�X$ek�����?��cpˆ���֒3Տ�&[<�b~xw����Y0�g�=����TbBG��Ū������H�;%Sh�r�0,�g�0�b��@����c��ߢ҅�vs鸃�L�x��l���&��H&X�Q�o�
�u'�)���k��"��j����m
A
�[C�jM\�T��A5�Wo[,���F��c�d��ɫt�j�[��kٚό����~۪�Zx��x�;Z���5��6Ow�3b�GwG�Q#�L���.W�"��2di��z��*9J�y՘�':��"p���^�q��c�f����7���I�1��D�}��X�(�a���;�6���y��m��?3�(�ff�a��kĩ���qHp�/����ALj�~�4φ[�M�趈Ec����v�	���'H���I}C�����5�O�š����
�iPSX9��O$���p�
��$���� ��2[C��#Y&'����A
�������M�
��$<�\у�:����
��d��5���xjQaAؚU���)R�BV�M�2$t��WN�L�����,���V�p�U�+,���k��<9ݺ��E�7\	���������մ[�u�04�����.��a<ыE����{�η}#m�L�l��
��q��U���5���/�~>��)�[$<�=��A�d��=�kz��rCa$��y�*�Ý���Y�r�8}�Wt����(gw�E�_�q�n⊕���)"!	1E�薌�}��uq�q�,@7�oH��8:�E�ͣ+Yn���t�#����a8�p+�͜+�U�O
\,�L*��E��]�Aq�ՒgI4�	
��8��d�o`�a�y�"C5U^޽m69�7L$�3�̘r��n�d*�l1N������ub�ƚ��y�s�Asr̙e�?G����o?�T���(1^�FkTi��Z�>~~���<�T_��N�0��RN��LG%Sv3B�+���@�\KЋ��n$�X�	#d�r����*V�gXw{1��0��E�H�K���Q��ĵ���9��3�R=�D�9�I�8�SՂ�د84�|��i���O���U}ޏ���g.��h&�Glf�ߑ�d���\���YR���|���pt�1��8��CU�0	��2>a��t���L��Wc^���1EF���F ���bu�Fz&W���8�$Q������FL����N��[�Yo��V��r�c���^V_^��+pM&�o��v0�x�W<I�7}�qz�-E^;�q8#0Y)Eu��y�+I򏤒L�#���hy�}YhLa�ֽ���ӟ+��Y�g�_x��d���~�0�RdP">��BI)XLQ����?���b�rQ�<
�6�t1o3�6�Y5��v4骡���ov�B�F���Q�ʜ���\����,-נe����8���<z����x=�3�9Ӻ	�ʐ:�������+�C{�<QDEy�srE���[LL,�%WFP�!ns�F�)�q�DNu���P��������\�J�o��M¨���סoѨ�k�3X~��ʽl��1B����/�,�jΏ�}r2ף(:�*�(��0\����9�'	B���4:�\��l�넪\t^p� ���v(P�
�ކei$5�a���aTa�B��U�&��uK�:����G���1ܱ	S^�@�y�m�7�*��5vM,s�T.���%��i��\<x�[.��`�y��c��;I��4�Xs��AQ�␒A!w4�z}�jl�B����\Թ4oq�>�Q�F�@��%��p�xq�����O+���m����	�p��Q-�kFR	�*��dV�+f6�OA�Z	j
��/ey�T�Ι�'����E�0c6%�楔9g&K�/�) �A{�ؒK�e�}#u5cŔg�cw�$wD�,�6t��K���)�THp�ݎ��M@�'�䴷�����>���`H9��:=O��/O�@�IS`+�(h�$O��3�Rj�1
Q=C��&G速O`�ڵIkf��m�6e���j!��ڸ3�~VM�'�
t��
Ʒm�g
^��f�"��W��1���l��V�J,��}���ߡ�Ŵ��8�
�̘"�@��/)n�p��Ix��>1�G���Z�?�1��$�N���o�ٵ�$�1ܚMF��V����aH������9���x6�|���~�M�UhTo$��U���iUJ���mܱK�����E��rzr�b6R���d/2��Ű�.���:�n+s��Q�Ȝ�8��� ��`xeg�"���J�wE�ZX;�+bk��.3{w�s���+T�{���i�#�n%�ł�\�X��t?h�tC��a����#�1��;)ף�-Ǯ�=�R����!#Xl[��{���Wu�4O��&�wU�Ə�t��*4�}@�M��Q��t�8�ڢ��^"I��kΙ�8;��0(�i��U8dr@PW
I�>�O?�(	�0�1�1EX:���HSa}�gg�v��L;`������,�@�Š[��͑B�=_�9q�VR=8,�a��
=CU��-�LzPqT�'��U�]�mw#Ji�S3]T���.��H�D�a�?���#�mǺ�˜��JS'ƿ��T�aM�"�ˉ?
7Ml�Y�@��Z���ڀ@j�%9�=�%�x�U�O��
��O�����$�����ٿ����~�Y<��}P`�Z�Y��2�<������H�x>itii/�P�X�1���`��#�o����Vu�5�w]��KK�nP�	c3 �G���1�TwJ$^U�T�s޹��j%\?��-�|05�&��S;�NFY����0ɡ��T7@��u��/�&�3����c��p��#�N�GJ�H �c�q���d���W��No�,d���;��O�0
J�iA�eh_7�6��6V!�F6D���$�O�R������BO�����S�n<څd�����Ꝟ�l���P��?ljaI��ի
�_��aU=/>��۽W�0��VN���=�۪m��Y8����
_~�eOT���vҵw	˱]Ԑ�NH��U���)�H$��j�K����i��n�b�<J
ëbX��
Gb�(�;�皖��rF�z6>�Ĩ�/�B�hB�n]���5!����.]OF�b�ï~�-���D��s>_�a�>b�\�@��i�"��%��B���ɹL��f�]")�h�l#5����[\�ӡ�W9��}†�9r�˚��'�g�`�#�ع�����[�o�8��k�����K��m�����I��(E�6�*�:IN�m��<��%��bqE��9�g~3��ϟw^��Df���|U$W�J�&}�b������U�Z�B�/���j��2i*h|)
Y��ZN���<)�DM�X�+��t%�R,K9�l
d* ��(�U*�^[��qՙWU�;�ht�T��8J�������QT�V��D-�TVR��j&bf��?���?N��[	NTV�xY9�CU�R=<=�8;~��>D]L��i��+�RW |\v��P+��ȵ�A�qZ*Q.��R"�D<�&U��8����8�������b��|�I����Qdƚ�/�@*�.�,�O���_�jq'f�Z<p�|l��(:.T�&�^�y|��b$f	�b�T.dB���u�ѲL�+1Zķ�s��:1�In�i5
>P9�\���`���ro�l�n�*��N�o�I���ۖɟ`0�=�y�*I��$�!�y\
�F*d<�	2�M����b�/Z8�E��Rx���	��l������?��Y~D.�td��"���M�Bɟ�E��ٜ�ΨR���ƪ���Q]#�fYʝQ*g�'��0=`�� ��8��V)Co�<�����<���o'�F����6m���Ȩ� M��(��NV~	���0�H |T�A�]K�zip(��ir-&i\��[��$��֯���߆��
{8��َq�-�떧s���$��(cE!S/e+��_��ܯ���L���i�4�=E\p�����ZV��s�	I��3������d~�.4�Oӆ[�t6�X��;)I��@E}!p�-~W0~O�{,��D� wI.�BpTee�"e���#�,>c5. l
��<��s�G[>JQn<���8]��9�}�z��z��Y�#�l�h�=�/�r��3�D!o�y�H;/uV3JĜ)o)
�e%jJ��+���.?� ��\�馚�:�r"�kA��8E��
؛�˴��Vj��2^ �#0X	���5f<�AIL�fS��8�_g�e:0g ���
�j����cQN
p"�\�+ܼIVւTdh��V�_��({���H�@�=��f��� ��]hW̖%�^ߎ�D�,0�$�~���
6k^!��*���i���/�'���������6��6C.�B�l���R*�qv���h%�`yK����0E��2��M����grf�Pr+��,�Ixs����[�dN~��!P���B�0��f�9#�e2����%������"Ȳe���|C�!�Q-�[!ϡȮ~��0�>	1����<	��|����_>�XJt&��e��|@TI�U� ��a����2��d�1����j.�<�x����3�4u�3�,��;'s�C���,^$�P�
x�ʔ��b=l@(�x��"v:Y��F^��+�l�����o�	$�����L$����0�1��/�0�l��W��T�oL���lb��<ת��(z4sP��Y=��u�C⍆L����٠R������Y��#M�k��.$�L^�f�!�qu��@��|z{0�ͅ�3�-��"D]�C��?�꘤MrZ�ŵV+6�˽���:p��K[Fm��=��v��,cY�ܹ3�-��V��������mr״ija��0���{���a��M\L�u���ꞝ� ��P߿Q���)V�uQ���n�s����h�l����'�pY|u�iv@/��.<���_�`����z���gut�P�g#��A�z�x�:.�y�`l�C{Fn���}���7S����FIţG�����i��+D�aS]g�z��x�:^i�sJ�iu�����9����%l��&�ܧU�ѭ
��|]D|�8qp��&�~� )R�z]�W(��������6�ϯ�}e��3�yb�^r7��	Vr��7�&�%W��lL� }��}P<��5�>�����:V�z�O?�V�OP�88z}z������図�������#�x���0W����=~ݢ=KtE�n ���C]
������ۋ3Q���a���R\�b9�!�P�I	�,á8�p��A�c9Qi!�َB
.�ں4����"�n���Mi�ū�*�Z��N�I����4�^��?R�zW�S:x�V�x��5 ���LŸ�U�f�Y�oߘ�]��C�qX0;i8��iC
��N.W���0_�d*�m.�����0�?Q��R�J$[Q��P��8�dq.�����,� ��Рg�`�f��"�#�s<z�;�`r�*��A-&�՞�6ǏZ����9����2���Nྀ�.������†�^�>��ư&/`�b<Y����h�7�� ��8�S<ó��Ի)W�d^�L-KӜ��drY�B�P�'n�ϞA��*����~~���~�.K���'�@�	v%�<3ӽ�?Z��H��;to�9�!_�u}����?����b���2`V��	����a�^�+�l��{5^l\1�UR���cO���ߚ�0oD
|�(�Rǿ���S
V��ƣ	h09yG&崖�Q�Ҵ�t��/�e�'-��:��a�u���o��cF���Q�3GK�c���F߸��x侸gx�w��%\��Y
!�&�z;��.ϡ�#��0�t�;Z0�z@�AF��@kl���D"7���o�>0�<A5m3��<gԽq�����cu{N����!�2��j���Z˻�H��0�b���:�m�.����YOOԥ�?Wt�!L�=�w2��{�6Y�}q�0-�sG,\���Y���5u̵��<{<�h�^�;���4r�d�i��bTO��/��>n'�d�e}�q���q��~����x�"M�Ń9g����ۦ���M�x37��Jo]Vd
��L4(Bl�l��6�W%_-�Dֱ���S1���e<��4��	�0��_�8�">�Q����+lRRj�G��[���ϰ`#	7��,$�7/�lZ�1���_3�����S}f�q���e����@�(�8یeX�*���]����څ׹Фh��<g+���ܺr�]����*Zk��c�Q���)fs��+s�B��/���dӮ�-�߬����e	�ƾޫM�:
3l�8�xg��-��"u&6,jG77M<��/�ԧW�Zǩ��Fh�L�װ 
�~D}TB�k�[,t���L�����B4]gy������3Kn�@�3���t�g0�z������S�q�>&sC�-���;��_1�g����>���5^�fO	��s��5!yk��:�vr�t
�w֥�h���ҟs�o4x�M���i'�S�4������?���A}�[}���2t��@A��.�p,�s ~�W�)�ͼ�AW"
����5�A�qw\�]/�ʷ���mM�/n$��~a``������NOX�6w��`g�w(��m�G"0�{���I{���*&
"*;����Ƥ�ZIQB��, D�z�K�ky�_�/���G�60��QF�-��*���Ƅaѡ;ǥ�����QeO����vhq��u�y�淁�~���@�B<��;���'�rC�%�P�>�C|۫۲�`�ޖsz,���k��M��ݾp�
��Sa�պ,C���-�^x
(	���I����<�h�Q����`K��� �Q��ՁB��p��&nX�iuw���zF�3iy�f-��LZj�J�1�Ea\�I4/S���p�菮a�C�J�U�aGx�n�����o(�����w���E6w��pϣ�K[}d!�+�*у��"���	�kiD�����82�������,�┴9(G����\3���iEY�Xĩ�eE�	��5�ѝ���^��}��:���
2�lfn�<
�9ݙ=�F��_�Nx�c���&���5�
+��a��o���3�w��{�@w���(d���"�K(I+�-������q���ә)������>�I�6���@{���g~�?���q�ix��[����H�fS>�]�ݿ�A��	%_"�x+�̴����9w|���c�O���{�D�ʈO����8��БIt�{����F=5���>��?���p�Ƥ��B��?{����k鶍v��6%T�c��gg�������3
��&S�>��{�K�O���_�QC7��!���-��nqܟ� �����}Ӌ�E�;R�#zx��?��k��{%ߤ�+��{ߖ��n�a�! �e%���G�j��i�o�q�cǢh�;��S���I�!�ǀ�M8�q�	�;*��c�
�d��>��MƧ�V'��+O��Ӛ���j��k��0��GŋV(��O���5jP�X��㜱���-�����n1�ޯ���� ��Jr�RUꡥ�\�
l�+PH/�{�e{l/dy(Q/a�;�3��x����
+UđO!I$���Fk�I�S9��,L��|� �y�QM��.�3�"rD�a�j����hRE��Ġ�ȶ"4�<�W�������=P֫�l#�7K�D(f�n⹏`W��]��9Z��Ӊ�=�u�n����X��{{6��f�����DHKXһ�����ն�Dh�>��Y
G~Ů|�4A�e��ߟ����)�����)K�B+�e�����3V0�+n��<�W��&��U_����4�9�!|)T�sLE��|�EV���R�Fku+ay����U�6<}���<t��V��>u.�$y
/�V�nF��̩1���s��0���e��5��a�u��xx6��
���4�ʷ_yg�Wy>^5��sy���h�@�܄�=���B�ݠ�y��xPC�)@�;��4��S�}+L�Y�@��F�d�N�3T�Î�(o����}������^0�[[�w� <S>ʻp���C��P�⓼k�F���s�����ѣ�XɛlF�H$k#	�A�/Q����
|�>xg��6%Z7�s�ʩ
��x--��R�j���.o��,+�&�m=��/j��Ϙ��_��z����>�A�
���I�U"��"�WWG#���d�)$�P�	Jh��n&�춎���gĽ%��-��tU]!��;�®���:���9�>s�d���Wa�i����t6.0�/0�z
��ޟ���X�����{Uê�/�`��=�4s�:)^'�ˬ!EF�9�g�f�l�1ը`嵺"����]�1�����0'�h:�Zi7V��:t
]�yƗw�W�U���*�˚�+��LW�q��72XF��
�,��*�O�ݭ�v��ؾ��L�M�}��%V�O(��^\—���Ƿ�H��s�H�”p�e��oGIAj� �q>0���Z�SLG��"�*��x>����d�05���
��K�>��<Š���<v����74�I�����R��Z�:�,���4f-z���:����/w�aUY��kj��\}=o���f.�t�W�Œ�4�6{5�?8
5�?�Xn1��y�%��l�؇wvMڝt��E*�'����.щ����{O��#k;��A1㆔��)a�)KZ��J�'8"�	�
���6�q&��V��
�
H��,�V��٪K�mU��ڻ�˶���눴�W��Xmo�6��_��K� ����N��i��Ҡq?ðRe��HA�{A����d��V�
s�&�;>wIi||��h@�$ΕH�)]�z<F���3�Xt#�6&)�I�g(t���H��.C�^��H��I�9��(!A1�"���e��(�!�(�|}�I�e�Q$`a嬔Jf�q���T�2ߣb�뻫�׷o=�Q&�@�	#� I�yZ&�?����n����*�~�*T�DEVԫ�׋�^\��W����h��g!��x,��&�f�CIA4��Hf�����0��
�zwS�L1W���\��^�Ĝ�C�D@�#�+m��|�bPИr�<����+��(JE<��;�%�oE�P���Dª!Y��(�		h�-m������YHSX?t�N��/Y��#�$����J7^D�V�Y�t�#1�*�		��zQ�{�s�u���q|j��Tp7bd��	u�b�2�;�d��bh�s��d�:�;���Q���5�r�]T�Œ.�^���ll.x�/�<E �=���Z��t2I6s�n9�t���|T�C�Cc�&I�kT��{�h���SY[�vy���i���in�Bd���E��p�^�(�4zZ�`�H�:�c��eQ-PI
ZZcʰϠ�ȭ�k�pS���5w�6�#h��!�� ���c����&`v�X�|�3%5�K�<��3�a���1g�Yd/�ثX?iͬ�d���h���vfҘ�_��#�r��ϸ{�kmP!s�o3��;+@O�m�@�,�V��'mo=6C��Ս����^߼�OzG��pM���+g�J ��a��%�����-$c�cZ��f�2�M|,)�:�&�g�l��\8}E��Ň�F��>z��o�\g�J���tt�e��
�/6��z!;�Ow��-�+}m:,���n���*�*l\����Z6�Jy]�������Mz%k��Z���[d|W�.A*$**��Ÿ�v����"n�����8?���V_<i
�r�`'3��o��^�o;���uV<? �}��T�ۇ����=��@�#��/�-aQ���BBWDn�$���gK��޶JϾ~��%��7%*XY��Y��U(��0��S�50��$c�Hw���n�a8�Z��A��*��0��m	k Z[T9���HU��"b]B���m~ҸIM�ͫ�i��b��c��b��c��b��c��b��c��b��c��b��c��b��c��b9�t�3��Trj��jz�
��ے�&Б>���+����NJ�!��y����'{�{�-��TRxЯy�ʨ�{/DJ`%t]G(�w�b��u�z=�/�¬H%9%��;�~��t�_(%��#Q�f׼�2�`͍],���Ɗ䑦�ɺ�삫-�?c�w�B�+�1x��-��3XDV��&��G:�#���J^j���p�%�4��[C����K���Tש]���"���W��S�6dnP��F�Q�'�!����Osg��Nu���܏����	:j({~�x��^����ʒ�}���Y�o����b�/���l�=�I�}}�A�E���b�U������e[�������o�RON�kFRH���r)�4S�*9��ó7���l�w�?�D�M�2.d7���� �$bF�{Ȩ����h	�`K�	T��P)�(���'�j�8�0���2��Q�Vh0�*����w�o�߿
�B����(�(���ZFl�����?�z�0�4��իQa/�������C
}�}�Ri��
�~�|��G�+#a�i�80(��ё�d��CT@��TQ^D������P=���yx���(杄�K��AP�����0�9-�'98�i?g*g_`"xޏ�1Ǵ�T�Ÿ0��Y�䕺��J[=�)� ��̣��&c�x�����i�;1_x�W�R���dF/�؜�E�.�!)���a��F���
����a��XD�z�џ
>GK#
wx�1T�.U:�uD
�,�H�Z���9��U�^L&\`l�8r�( |��!!�R(�� ��T�rl!�rBӫ$;E�y�j��D/��@a}!�
�L�'V!�j��Q�)~H!A5E�4'�K��4BZhha�4���	��sL�Ʉ�܈Gퟑ�����HJ"�1qi�ȡ�!o��2�΄P	B�<�
Si{�wȁN��$������i(�yTW����H:��� *d;�L��S@�$��e-�0�EĦ��H|����y%�V��U���7�(�0'�r##FGP�CHr�?��>2����.��c�~� <�}��$�Wf�A�H�z�d"h�@����sN�Ud���3�V���Eh�@Y��1C�����l��Z��j\�{U�F�����Ҷ����;	�7�lS����1r��p	Z�qm��OT^9s��Q�ˣ�Xˊ��h�R�p����o�
�s��lg�a�8�/+�n2�tf3���%&�:�N(8A�l|�v�a�KK;�j0�d�`��E�L�Ȯ���DZ�V�,�y���$Ez�Q����豉��눿�&qk��{���-^�'0��}}����fcpa�F�R�I[��i�Mb[�c�.��}K�S3��ךj9�IU$zc
�1��[�z^3(q4�2t��皤:�"6)�����S;d�+�g��_<ps��EU۲���w
��LΩJ2۹jGd�K�hl۫�����|��_���ko�;�[W!��[�?+�_zz����������gt���U	�P�M��KI����m�w��%�!���X�Ok{��E�?�j�׺l%?f4MI�;|vU�gS\��ф�W�l<N��iՍV����<�Z_�����J��.�!�n��6�OF��i���u'l���^Q�������z��B��$/�R�6�՛�Ԓ��*/z���X1=����l�0@vQ���lSr��v���o5��.n]L��z���E�)�e��0��Y��R�.��.��wy���f��.�7�<o�x�����]��x�����]��xΆ-qvr��p�ur�$�YK6�'�s�z��xيx[�i�
-U$6z���K��-���at/��>�����
 �v}z�+5A������N��g��;D?�o=�x�9��i$�3��x���X`>,&jNH����ۚm����k�L�I#Uڲ)����f_AY��L0�E�P�p��5���a���B�_��`u�S����.TCOZ��"�e��K]�ucu��G����ʽ/�RO�V��냾Ɓ{i�: v�mj�^)���ȌJ�8��m�(�
�k�n�
&���l�䒺��=4�j�b��pE�-Lq<��ͯ	+1Wx��XbdҤi+W<)���?'�'�|�'�	�[�%��t�JT���IF���1�f�员�bCߌX�Ά�Y�����Qm��P��]m�5�ݺ�]?�FQKt�/��#�{�֔=�Cc�Z��_��c�Y=ƔD�(��ݫ�!��`�a���[=�H�v=�f�p�|^��&� �{ TCj�!Pd�n-2
��o�?��/�C�\��zy���Zks����_��Lҡ@�I��J-+J��H�HL3O�ZKr-�`R���s�,(�r��P��$�q��}�{v�ы�7�LD�E�L-7��/*�O����?��B��*��d�K�I$;���*u�N����B�r%Ҹ7YH��
��
SE�aS�j-RV)�T�����M&���f
��W�EU-ǣ��*��Z��X���g�W7�qu_�e%*_f�L����vYF��K��2����'&��J9��Vj�KeOJ={w5��x��ċ>#[�R[Y0�t�~Rj��s�[��(#�8al�
C�L+��y���i*+�
�����������jb�{1��|��?�c?�~�BT�沈?���?\���߲Y�r3Y��0G[��N�s\S��秦*�O����q�Y����C���2��\용����oa�T�d!��dj]0�E��IX��M)�D�jnz���?zњ酪��b0Y�,-E�L��^S�.묒A+>�3�+���E��H�/Zs��F?����W^΂#��L�:+�	��ԊR��>�H�TV9_R,-2���;�>-�L!&�y�.�<c
X�h�`+'�L9%�V�bbc�*�I�H���dĩ�_���+�,о�/Vc�
�"1|
Ӭ$g��~-	bj���te������A��x!s#�;���c�H�w��
����|C��i>9x���~f�?xD"IwZІIO�/�NzK���������耭eZ-l	nԲ�㹉,X%qӓ��,���ף�ŎvV�z��h�.�;��_K�?PW��2AFm��9�ԁ�O!�cGħ�F/�Ky�)zb�&ʄh�&�׀0I�T�*}��ˈQ�(��LG������"�e���JM�*�ȌHA��<s"bZ_.�-��eRg��ے���u^���-�ݚY�^U�~D��Ǒ�u53��r��1dQ��hp�F��Zv}b:S���jDYv/�ܤ�I-.x�/��-�z�����j�E��a]�IKy���ҟE[J_��\��|�L�6K|���|�����?Ҁ�/�"��ýJ(M�7p"W2�QI]̮T%,8ٸ�k]8��k@Hw-$�Y�U�OE9d+��x|���7��ߪ�}� Q.�R�FhMV��	�K�ș�h��K�"�"j�V�H��T$�$3�@o�ڱ��8,������]?����|l�n��2�EB��50Dm!"�6Y=u�
FT�@L�R��&��=�\���&W1�6��z�3������tFv��A�m�^Q�Rf��=l��[���[�2��ƍ3p'�'s����h���)�/2IkN�8U)HmcJ���,#›)vS����#���KS���>?ejʳ�*;�Kzf�h7o�@���0.�؃D��G"k������ȹ7�;���βF
=l	��؊'�����,3p��Q;߹�s�\'�a�eILj16��&�Hji�7@�,��W�4y�N��v�O֝����Z������d-J�.��oL��S��P���`� ��7�/��g���E��V�vh�{u��@6`H;s��V1�*Ü�����ұ�OtS"��<U�k��0[�҅���V�)�k���D�"��*/l�8	�;Ek���3VygW��,�(�v�y���&`��2�C�N�$��Ψ�"4�0��UrG�tU�!Vw�zv��� �%tR�ì�Z��,�FoyZP�f��ž���*�͠�p�6�-�`
�p͠,<ge��<�@�4�q�Y����ЦXo�(Jv�S�͆I���k��R�=����#���e�� )����h4b� ? q
�2P��pi�
�r}.q1l�"�N^��Q[��`ˈ�y�W3t���ľ��ͫxIP����
�b}�h1�.	t�c1Y��63Y��vr�M��.�LOPor�(���?Xw�F�V�[�4���i5GW���o�x�V/�#��)�
�^�hH5bp�/UZ#=��
�2v�1u󏟚m�t�������~'��T^o�v��4�H���`��&���&Nm�ݲ���ׅ0'�l�C��i2��4X8��X1�ױP�Am�
R(��v�>��Z�s���l���H��ܣ2E�bp�"��iYj�<+
���U�B�I�� ��,2���Z�x�=_�8�ѻIҦ��2�����c>�$�O5��;>���T��C�?z�kn���T�p��h6�65��k/���:3����`[
]�+�ak�#��Vo>2�
�p8;�h�܌�K��q2�f�/�'��ߥ�NC�ຑۏ`�h0`��J���9��a���]r���E�&`���ȇ
�X[�uc$RM"�P�Ͼ�|*����W��W�~8-�<�������-t��.c���Zӎ�T��+�::�8�51��g��@s�B�q���tZ74��bػ�a{��
��p��jg��
.0>{܊����A'��m���&S����H��Ժ����^���?��>d����A�v����e�趘^�X��IR�t��̞����N��l*���:g�=F[��]T�I�;�-KU):ʲ���v��
P�
zuc/i����K��cK8�]Sy�7yͻ�p��d
s	�^P!�Z�r�O���6�4�
��'L�r��4�	*� �^�rs[ѭ�i���2�-��s�s��b "��`X6�C}
����������	�Ԓ��:	����4�A��%D�a*rE���܌���y7���RCB�Ď�sz���+������y�F�^��j�s�і ��O`��]�t-�7��!�Š8s$�.Pwͱ'b�2��2!���\�nͽl��'�]OA�]nlV0d�6Ќfd�C���"а�v3����}�W��f�M��p���G�]�z����ƪ��^���;��#n%���ߩ�̯j��� ���1�Z2����$ZO�}�HA�;G<��j�3��;f�Bo̦�J��1{yt�c���=E
�!�v�Ne�o�K�:��D�Z���Mw���ZL�duX���t�=րx�?|9|98~��ǚ�,Ɖ����׸3�{m<�ih��K�C�SzAP]&/�_��"#��3�g#M�F��Eo;�1y�û~:+Qz���s�-[��8Yүڹ�������ѷ=z��_v��O�̄�tYdtuf�A����) .<2,��)��~��9.�V���8�P�]sK�Ġwrh�E���l
,^�{m��E�Ge��h�5^#��W�s�6�οb��URF��\���|v��\�fb���NǂHHBK,�V����%+�˴	����ɓ�,1�5.d�Ub�6Џ�����l��L�W�V�?xl�4k�t�i
�^�⚫
O�`�b�p��d�na���<�2O� ���W��6�PɆ�į�L�6�����	
W¬�E(������24wƪˬH�ᠹ��Բb�x�~���ﮏ�27J,JӢ5*E���j�n��� _$B;,t�b?H�B�
��0�JE�ht$K�].컑�r`I"��9Ka����J��|�vo�g�W3�X�d���(��c�d>Z��n���,�A���=j��)~������Y��Y��j�*�<�J��f���F�Ȼ��̾�mm��k�^2Ϳ�/c!�Esk���Oy�sC�/Љ��G_Bx���/Y���K��i�?x�]q�J�x�w�R�H�+�*���ߋFNN�a*,����q�����6A��)������;�s��L���B�N:>��`y]Ed�Kmd6�'��+@�p_��F
�h�)�#���)nEb�]���:�RN����v���i�����^�~M�F�ؿf���-�:��K0�*ڐj��#�4�sif��&���b��#[�V�JX�ۂON2���o*I'uYa�ܓ絽�� `��y^�G�2�a".�\QJ.J�����f׵�,sV�8����?ܜ��Z�6���x�PG��t����qH�rza���\Č�����ej}��>�@�3;�ϘH�}�?T3��L�:V�a��w~�sn!L�
@�����2��w�
r�ᨘ�k��v�:�)n��׭ǧ���R��̣#�د���7�s�U�3�K���HoV�a�&dRa�s|�\��'��-�4����n�$�N��rJx&m�T�1�
:�-���xÔ�����{�?�k�~t�+��LSyK~�D�(-�2�# �܂�ڱ��.:�[����2��l{F{�>{�^�#�O��`E�
�+Z����u�]�#�_��*�9��y���O��>}�R��(��T���լ�=.�G݅��F��[�k�~*�9����e�A�eի��zX6���38�B����"2�ʌlլO�CN�r�i���ņ�!ͽ�U��h-���El����@�01c���q�5\U?-Y!���"��� D�qC	�t�R�B�L$�\x���p��GhЊu�9d��6�Ax�Q��d��v3�Dԓ{�ڝ�7�j(�i������^0�5*���C�:�^#�g��V!�墥͂<�깝�q�)l?�H���:`Tc̫�tC���'�z�`l�J�4�"��@��'���3^)��^�Պv�zL�{R�M�e[�O��Ө�"4j��W�	�݄��G����I�E�����ΐ/O�F$%.bn0eT�����+I�ӚuK�Ȱ?�B�c>����-+,�jV6�W�Xړ?i�}��G�u�qCwٰ�D��n��{��7���*��v��N�\ػ�¼�͢�n�"A�)R���>7��|N��T6pS��k��x��LJiH���mW>�n5�yu�������o�ח��"W@>J�2���Y��J��h5L��z��!�0�^ԫzE9��W�����P�C�ؑ���s{��.��<3���Xz��kV�M�r�P�Ⱦ!~��	g�,0����Z,zh�s��	@�ұU�?h[eK �|�
4/!�ŕLx����1()� T8r7�b-Ҥ�t;nGJ�Ʉ��!w�PO��^�+�U��͍Z�/wxc8@��C��|9R�#�~W�����r#����a�����P����Ӱ�w�Wջ�}OBR�*�
���&�v�
<Z���[��Fz�G�'t��@;)�'⣞��D�S�Q���8���긤��j�ժ��;[�J��aw��.:�������ӹ磄�b���oL`�7D�o����s~�x�01_x�<\��v��е����Y�s����
�T�ʇ������r�[�X�G#�#y6�Cp%F��o�p (KN��3Mf,�p����oí��U�#�Y�|Y�ټ�QW|���;1�+qa�e�
qQ�O**�AU�Ma� I﷢PV��\[�X�T.�ɒ�����E�� S���屰�2Q��-�o�,�yY��0wL3]Ϋp���������ɠ�-Y�Ȥy�J%�*��
��b��o!x�a���#����rE5�TœT�����O?�=�#�E���5�K�13\^� �3#���D^+���5�V!�.����q�Km2�����Y!��7Hwq0>9�`��0�in�c0�{����4�����i�Յ����e��Z�~��r�M�Ժ;�	ܝb�{e�/2L�a��^L���~��_��I��/��$�X3U>E��~ɛ�x��:�����]U�4Dz�����J��1&���P�M��ccǗ���y\e�SI�x]�T��ƶUh�D��˱���C�X�p��yR���JU���Ӥ��琚�i�s�J4W�'JD����ﰎ:�l)q�Ci�+:�B��R��9��g���`��r�Bn�����Կe��G�a���8���8��S���i]��?���<z������M��g�������p��O^|x;��x��������gc��{�����G�l�_n�vý�<9z2�����;hn4D�
&�	��+t�D�]��LzbCgS��Rm�4�_��:�:V�݆�P�J�T��
Z��J���Q�
E'��JFs�*@?���Ą턲w��r)l�"=��r�.
*���)#g��5��Ȧd^0��d��@��*�n��Xw�*.US�����$�M%J3ʆ/��du���Vlm��T�9]o�q��V7�z�-H�Z�P[
ŕ\:Ő	�-	X���H,��_*K�2�D%q��_de+B�^��ަ�������{�jҎЗ�Z�T8\<�|�8fKQ�T
�����Dɲ��N, B�\f3��W�S����JU@��q���d���d�k���0:,��{��8��h	x�ⅸԿ�=�+��73P`Y�G��M��B1TH�p!pS3"��A�/w@
|q���/;=q�<V7,�Ҷ	���K1�+Bmw��-��΢DZK2�r(��XH�X65�
�3@蚪d�Vl��l�*�Lu;�s��+��l���x�ס�}��
uv�I������p�>�L0���{`�We
�Lh!�m��^�U����e��I�F���O7#&&��S�:��r�b��p+��/�s?օb�i&U�����Y%���!�@��o���F�]��Ҙ$��A�#�jw�^�]+ڜ��:?���U�ݶQ�~�{7��,�`0������}hw�0�گ�ug��M�_7�ɫ�����6ᓪ_��n��d%%�XȤB���DY�@\�5��;� �i���/,�N���&�X�U�O��F�ޚ���f�������Oh�^L�5Bc��R�������[{j��[5-[?'��
|
<]t��59�̘��c�]C��}绿巏��Щu�4���_kr�:��+sr��}Y�P�fz���d�x"n�0��px�E�C	Nh�� ��8���5�S�Y(�a�� �7�	��UFD(m�Y�?F>H7a��"�H6%еGIu����o�eF��M����5�Y;b=�B���,*��B�� }�9NS���y}�n̓@�ʐ�-�JÛ%�k�v�,v9nQUp:r(�6�q����٫I/�<:b[
��>4��{O�.4�䌕DB��H�݋�Ќ��Š��&�kd��#��*�w�q�ge�%���7W��8�z�A�-<eNAa
�Ȏ�!x����]#0�m�+�
�%o�\
]����5�#�"�g}p��=j@_�c�v�u�OHމ�?rX��>�{G���uH��HtMع�-�u�p��:���S�x�+��n�=�_��M�ju�F-
(�n3X�Z��Qu5ji�����0��}���*d���-��5�����ѻ�����:����2I�Q%�{Zte={�s�.8���WW�Zkg���*%K�P�;Ⱥ��l�S�C]�l��b���HS�e�yC�e�t�Q��@��ri�*)�霚d.Ԅ�?���蘺"�ϕ�ZH���@�1p��*
��VqG(��	�
�B���CC�$���\���d�F�8I�:��r]��T]v�u�P�q���7��)iP{#i�sU+ĩo��纟r�y�ϩ� �����E�g&0�@�E6�6[�������L��읢 QS�]m*�;2u[;q���"b��딪9�Ny]4X�	�K�r���:If��}�_WpU���[�Q�\��[8M��"k�5|�£y��;��_ZHf:��m���b�S��_�J��M.���pL�b� DLV#i5�YM�c&+?;�W��k��ir#��ё�sȵIVI�[Mmh�Beϱ�)Hp&���Ѕ���w�ebfS:Id�ٌ3#�Z�!��\v���F$V�.���;�4�<&�t�Eʙ�Ff�����x�$)�(h�԰s��l�PET�9�����k��@)�i?W�X^2�1��Fc���x�+Ύݝ�����t�UH�ֹ���u"a?��,�C�g{QF865��-f&�4'9�����O�Q����F���v��n�ns��i4�'a윚<|I �PSR-�1r(d�z|:�g���G��&��r%K�Rd����6�4؝�a�@\N$�oTH����<&���Ծ�F�174�Qu#%�M~
�Ѥ�gVX6&���n�� �,�ĥ\:7��)��t�iĻ)�&%ә�/N{�K��uټtF���5
��q^c}���F����Sg1R��=.�ܷRL
�X1���B34|���g����>���6)M���+��� ߢ��ڧ���#W
Z
����S3��/�U��y���y�R�}���.��D㎂�~���J�#����`U�]?0r�Uhn���(���W4^�� �W�Ɋ�jNP��ے/��"n��	�]u�����%��ͭ����㛝'�}�lhn���A�pVdx,�D�bnҾJ�I�*W��G���%Ԏ�~qӷuv:���]��`��>i�?�>|�&y�����B�!�̦�9��B��?m�3��9mG�Ux�ƋZY���l9z[�ȩ��}� �ylL+sC�'P�u�ɮi�}�yz�P�868y�?�y�����<.��-76r�Iܕ��; !����[�o�D~�_a��%�8�R$�Q*�j� �P}���9�>��j�vf��]��A�R�ggggg�f�ݸ���0�M>ߚ$>Ӻ.g�Z�Q��վ����z�p��F�
�OGKwW��xh�lEl:VY0��4�ޥ�g�C(eÈ+`j�J��
z�+1U%�a~h<PO4�:҅;��l(fbZ�&�}�>3|�0��ܳ�}��!������F�?�����_HQB�=�-��5m����u�v?(˂�>T�3�8[�^\����wa}/��s� ��
Oq(�w>�y��*��H�٘l��2��9C�R�䥹�f�(���W)��-n��G_�\��i�
>-�����.R�	��/���"5IZ���ܬA�AR\�ޔ���d�F�>�l����/W���!���&�?]�f���J�|m4��WN�B�r)�y�j]P�M�~U����j�	7>}�k=FkP�5*�1�Q�
j�Ȱ��Ӑ	ˊ��,�����֖��x�Lj省%qG_|?��I���&�N���\o��WCqU�m+?��*)>�\�F��Z�s4.�^��ċ"�t�oq��4!�k����!��u��™�;�����d��Umm�����ɛQ�ǐ�d�s�L�r�7��
"��vC����$i�.F��Ky���/K��˭n�:1*[:�^g�]���$,S�{���,.�eR����3J��}�>2ř���TV�;x�H��z<�~�0�*+��PZo�'�2��mM�#��[�U��]V$�7������³��XG���^�>�_�O���~�o�H�EQ�m�A��e�m�M�X7�[A��Q��ŚK1��%�M���S.����M>��W�x��R�*[23����z���H��%o�\����7c�#r��~��0�V0@�z�8�� �����A�Z'�����Yu�.tv�P�A����ƭ�L����\;��_���;��_���#}�f�L����$�}{�P3ezA~�L�H�O��s��R�E���y� �L�9�9|��uf�Kv�D���y�C
�Mt�_�U�ː[�5T��L�&��б(vs��q���^�*��R��^QV7ܺL���R��Yi�:��N#+�WK�ZmN��$i�S7�i�vV�l����E+��Q8��jS������������̽�n-�����gsV׫25��/���ƒ|������/qo��{�櫜�+`�ZSnږ��4�������-�.�JJ�����wL��FQm�E=z\M�G�#xP}�2�ta�\N�(�����>��J)v.*���I� cv��e�]�$��,s7��?�w<I̸�VwS��u1�_�)m_q
B�w�O|�N�fv�|��s��a�.检Y{�m��b�\�m�t�o+ځ��<8��ƻ���`^����O�Z��މII-8������R�=���
���&�ɳ�%������ˑ��Y����M���%�a][@<��/�Wa�J���w�Wf�3b�$T@�&�0���C��'�4˴�薻Ƒġ��A���Z�bZ!{@�������ϟ(3�~Ag?�����Ͽ
�
��=a�F�u�E�0���/��i��K�}?����N -��$Le��:�8��p�j�H:��ᦹ����\Ko1��+|�إM��
A $P�(4�FlӨID+��μl���W�>���{gj#഼u�
������7,��z5�a��V<�h-L��.+��E˄��չ���9?�ǐ����0
�%$%yU�-ݐ��Ia�Y����CZ�1J�3� Ů�b�lG�� ���W�4�S^�=��7�D�%�m���ᶏ1c󥠈��H����r�M���,�1�͈���0%�L��^�m]*�5R�Ӎ0l�K���T?ݞˈ1�Mgt�ꍌ��m�Oa�nzbIO<�QǵQ:�(�蘱�`���l5�k���.iA~����$ �p$T��s�zp�2���U�Z���/����Ah\T�1�u.�ц��N�us*�{xˋ0-y�پ�Ȏȵ��}����:�:���g` 9n�s�K��i��L)��L���!n2���Lt܄��v�U�1�>�&ٺ�Xpяއ�|��ƙ��ڦ�<�y�p�%�q1�$V�n'-�bs!����D=��?��,6)��FJ��Y�I��,�v�e�
e�Ӎ�06���<pˌw3C�������p������e�J	�� άF|+/�u��7�%�[�J>��)@iR�����,d��&��蠦�-�M�Tf����6���'���%�5�;ʰ�=�K2�qBe`un
��!,�4�BU���nE��n
��C��붬b��H6�E�b�(f�D�O��
"/�(�7�pZ�%BEh��� <���9�yKi�-�m�܆�$P	PG�5�H3T~
�@�%+��r���׃|+J���-Jpȉ?����R[��{�����]mo�F��_A�ڊld��[r�S�ց��P�r.#�5[�r� ����ݙ�RR�\����}���yyf��E�>��L�B�$c6�Q���m��V�,'��^t<�b޿�o!i��]���$F�����ҧ����7���m+������Ù�o����l�<6�s�T���ԍ���ݮ&�$�i�\%ԝ���V�ZZ߸�z��zy1 �A�ڶR�#�t��:���Bă�n��n�j!�B�F6u����{L5Q����#Q�f�
�%�q���b��>��=C�:B��;��n�#�x������O�g�*R�A�&m�\Ϥ�w�DX��ӊ@/��y
!hU�!�[���0�+\����LT��yN�َx؉z���u�oSipig�꥽�?t�q͍�(�R���P(�&bX
����wA�k���d��3�6�\5����%EH�3�$�Q��!=�F˅ӊFN�����d.��j��t}GV�W���0E9�nc��,{����x���}M3����<.���oof�
��~H��-�{a��h�Qj�g��h��m���P����v�s�r����t[rȨ5:��S��J0��x;��;nk��۹�X��񛑂��ގ���Yӝ��ލNT-�Uz�6?j�W�YO�0_��R�Z����f�4�`3�fj/z�����N�5���SR�����x�}4=h
s��}�3ɖ�eN�{C���pqS�B{��jY�����N*H�F�y&��ф�8�����붚�7�7[��R�(�;T�`"��zBMhҞ�p���]���a�q�8u�-��
c�K�#��W���*�vT�1O��R����^!z�
�|��m��b�$aO�F��vS������$�i2�խ�p��-���r1���$�S/�[�	ν��G��z��!�0��4�����ʎ�;m����I�I���GཫC#�*���ـP'��\>������T��@�S���,<�b �Y�|!����"���>���v�Uw����,��~���F@�	%2��3'*,�<AV)]@0�Y���T��ꤩǒ(1�\L��L�"Kj(���b�<��v�R7O�a�J�5Z�wJ�M-��T�cU|��^yU�[^�
t���k�gx�t�۟u��[�OQ�1�E�ǽ�����~و� ��%O�OͩbA�;
�u|�X��	*�>cL���ũ��7h�T�<!�����i׉��u���}���Xr7���(/��-@�1�J�d*}�H����r���1�A�Cƙ#j�/b8�oކGN�[b4ˉn��f'��}�����c�+z�<*���~6v�B�%r�O�
B-�>�ɮ��.���VQ@hRp��.!�,�
52b�!,@R���W�����X��D
_�Y�O|G��+�w'�4����#�ڬnr�W3��_���N>pɻKp:�h�
�zG$[k�u�/�FaoAo����%s�ǰ��O�I���H�)+�5*?�R�˙�L'
:m����xy�F��O�q��J`[���3r@�1�KC��v����Ħ+��٠p�7�ݥ��L��@��Q>T��)�/�K ~�D��[��h�	2u.`0þ�?�!ۛn��'�`"N:��D0n��,n<�1�3�� ���
�`�C+����I{�8j	{��\��*�S�L��˜��5���c秛 ��x��nh��ʞ���[�!�Bv��D��~����K���1�U�VBdo'�0hb�%��V/;ER^;���'�/���`�϶�����n��B��^)��}��"y:q�&S��$��S0A$ލ�x%��W���V��}-�W�g�����o�,��<��G�9J�Z�v����T���!~s�+ka3��#}q��e��I��� ���&�`�d�8P����J|r�����=�����I��z^<
�_�P%SG83̓����UU�`:+�.s*I*���7;oCC��G�~�4����0�5GdPr�k�Su+��v%�4o�G�&U��E/U�ףH!T�Ⲻ���Cb�[(�f�c �󦣠�nV䄷�e�-i}��	��H�J1�k�����{�o;O�H0J�Ki�j�S-�BZ�WI�����p��֝Z�F���G�8��a�W�m�ܫ�O�R�`��$��r�����
�W����'�Jͻ�
<�@�D�կ> ڱ��J�*
�钌�)����R�����P�gQ\*'���I9w���SS���B�M'�b��Foޢ$WbZ�h��$1��[����W��lZ�@"[Yf����G~_^P�������p�М��`+ƛ/�p;�0��!K��,���v60t��M��!*�1������A}��n�Ж	�9߻�(�N=�V��|��c@��e�ݑC���ZNrU0{�Hm��E�����m�1�-2��m�~]�_�<n*qY�j+9� |+���
�᭠��nC"�+|�T�B4t��uE���0�ƆV4șA��g�͒����yVWh/��r��FuTZ�a��:2�QF,���zI8���7��E�-(W85�N��/n</0�K�>(͖P\�~�"T�,�z쫍�C^&����:���Wd]�A��>��4�8�<J����4���K��_�Z��:N��H<Kz����B}�q��ْ�9�U��Z$��W��xvb�	;�c�=���nO�4X'#����=x!=��A����Y��~EÀ���|:E�^��Qì"�t<o�K�{�im4���1L���נ��/�-{��}��qh����!�W���$l>�	�W���Ez��G �Q����d��B�9[�0[?FH��hc��U^r7���6-�_|T��0�s���W`�ܞ-�GE�SH��W�����{�~^���H��D�7$�ޮ+‰Sז�KW-��ft�>;1�[\z�I�9�Jqu)��©��1U�э����;��"�9�qb�! |�>*3	��)#"��G?R�{���T<��D)
�#������K!�Lp�r�5��$ г�ʉ�`�+��,��L��s�
~�8��	qgu�N/slgx���X�4��^�`D|	�{�~kS��d�^}��я��<yq�6h�����O������|��QT�����шu�TZ����>�f@&@n��K��i�JmqhЂ���������� }��k�Ic)��fSŒ�Y�s�X�O��I�E���������L�hO����ٶUR2�]�������cG�L[;M��ON��kYh	�5�����(# H��A��`���6��O�6�ǑM�k��R�}#�Z�M�p
>��VJ�����Z��J$B�?r;Ư `b����2�ؗ2�j��ԫ6��XB��'��j��K��3޽��c�ݒ+�7�w���U��2*`f.�Е�W�$Sq�������	M�Zص�ѣ�)D��
��лr��4����Z%��pMG��	�;�d𝤼m�WDY��q>j���g�A�+#�7�F��MB��e'Rꩫ%��1��H��U��]	�~�7$�@[=��K����1h�lkH���k�C��O�RJL�b��(� �J��%�3f ��r�?�����m���$7�%
�#���S���~�O�Sz�W�KHa�Ui%�O�)�(�c��a����„�-޷7�6&_�
$lΧ���Y�M݆Ch�-��o��|3�m�/J�-��*�\����}��6
�+1�J�G��*�M�8�B��0FĈ\ﳔ2�e��M�o|�a�	:H�A���3-��3y��d�I�6��+��Ed�f#[����Ţu:8r�W���=6{T�R豢�
�[���,����m�0>���(�|�S�0.���[��|8
�P�XD^�5���$�W��?��-���t�GE�"�:�%��M��ί�Gð>�?i{i_�[�v🲃���K�4
������Euk��9��G�H�������>p�*i����X�����~1��_>o�|7��1:㜄%��m��������D^�
���][o[7~ׯP��"Y��oq�b�l
��Q'ه�hd�D�֖Iv���\H�CJr��>�rHr/Ùo�A�R�$��^�1���Q�D���sdSQ����`����p#	027۝�AIh�=��M��
H&����H��ìǒn߃��D�$�?�M��4҆	�\\�Mt�~�Zv�:A��f! t �|��}��O��A�e��T7�Ӑ"a~փnD֥h����mw?��L��h
���3��%߲��ۆ�3��
0��r����񦛫���j(���
����x^9�+q1�%��^���I����$�k��
)5���%G��n�������5D��H�$���Z�@Xh"���"�2������UTc*����F��[�Œ���Su�\�bP�_��R	��.~p�M�?}���[T�(Ʈ����)xm���7cQ�'
nw���z�4���/��-�W��$����1���%���D��O�pg���Տsi��[�g+�z�-%z81��}mZ��v�@p$c�_V�"�Ѡ��@a8��f�<w-���[��
5�"�3���\��<��;y�s�����	��ˮ���،*��z���h��,�K*��H3*)�u��:��^��>|��S�Sq}ױr�x��Bi0��>VA7�>�r�t}W��8�Ӽt�ue�
��
���~eN���G�p`6`��6lT�O�d�Z���Xǜʸ�����;`L��&9�4`w:7��+�`K�㑲Υ�@owǿ>��
�`f�n9+]J�+���"<��d��^sG��_h��m��r���g~�)�?%��G���_���x4@0�*_�����_#
���p����y�I�Km7�XE
�?�
���]%�|��x���c2���2݉��5��BM�_����_'=�
R��Ld17{��>�%��v
�BM��e� &��%1zK�$r5-?�Y5w��َ �+�rJ�J��{�nV��}�a�n[��=/a�����v)�ju�V�[%�ϵ(�*�FN:��c��pϧY7�>����Q�y�z/�Kg���x�ϦÁ��#����-b|~<r�
�b�N�Α���K�\�z��J)H]����+��j7D������G<	st6q�D�!�O�?
޽K�.�����uH���T{>I�]Lf2��aJ��[���\�C�3�$��3]�'Fe�jU�J��0=�d*!i[,~A�*ߺ<��-֒��Gt's:=�D�j�H
�}�@�l
�@��?���l��R���^!����}����������,�0�6��Nh��k���b �j�X^�o�.�:7��އ�BҔ�[A�50�+Y��4_�ڸ�wcٵ�xjf{�d=7!š-W�g��}��$/C���!�������[�~O�n4�OS���T�(O���B�V�F��$��OV����蔩����iwzeOd)��bAxb�v-:���Ӭ�G�A��>�^?*��Ik[n)+��/�eq���!�7 h��r�A*Q��`Rp[h������
�܈�K���x�/A}��a���	
,Q�K���.�Rs0�sN��RYm��-u�2"����nP�H�w�R�TB�_�l�@)!���p��f	�#hjB/'��!9�aR�a��WH�� ߐ"���K�������?�
�?��[��"{"�LN�(��}q�,��q|r��ۓw?����O�������mC"
G��%ɒ]q���ڥ�Z����r�%��n\����i����|���9�UF�d� ���N���D�L�`S�����K� �e�_�6��&��7Ld`��^��z&M�����§����\hS��l�����̜�u��..w<�	���[,�H����_�i��}�T����lt>��-�9*wYB6��̉]�g�K��w��]9����'�]7P8Ֆ�qz�l֬(ţ;Yo&s��m�K��6�ޓ�����4��9ᵶ%�R��B��jl�8?W+�w��N���r�i~����A���ʝUk�0���&�?A~u+@@�D�a��P�G�c���5��2�3�[m�R�4���<
/�+v����ڦ�JAa|��M%Y��F�����%B{��t��nޑ��U�w� j	(��(R�)��iQ'�Y͗+������F��.
` >�g�\�7�>���/$Y:��t���(y/�q!�j5�F�9�[W:�S�s���燽���Uh�j��V�L����5�
Eѝѽ��2Q(�a.�}����R�A͑lJI�<�i����A�!ar1t�kH��~��k(Ik�.��'����q�'1��X�\S�ۘS�%?����>-2Z��o���9pSx^��Z��U�"���RK3����D��	��i6�G��_֜�),a����o���0^�Esw�oI��gl��u'ޣC��47e�b�Љ�����`z�G� w�|�$:�}�;�@[�t�1�^�Ͳ�;}���(m�u��L���
����)����ͮxi��s
!V!σ�����՘��-�w�tϑ��k"��݄��1�J�Ò�rL��V�=���@���S��a1:�6rhR/����WnE���L��
!���ZTz=�t[�Ů1�یFO�#�j3'�0�d��:Αʸ�C�n϶�g��
~b�Y�i�X�L��B���<�z`�r���ZT\0��n�t=�oʎo�*�S5�V��M�e�y�Ö����B�^j鐾m�%�x��4�W,����Q\x`}��O�Oq��my�
�c@|�	��
�s���>��`�99'W�+���~D֌�S��_0�O.J�'���K˨���,�~����E��˶���<��똘R`�~(��~�=/*BY���j�!�4���w�;r姸�0A�:��yL4l}��l2O�]�s���3�u�>�U^O��-M%�;w�ҫ�h3���� ���xM1q3��8�iC�zNZ�j�<_K�?�^N�Kȹ쯍�.�'��O��$ĵe�3��b���j=]2�jNx���A�z�̚#M����^3$��dT�]~�V�2�~�1��A���]ǐ��H��U�2v�tE�a��'���#�ȧ@��H�p٬��
��ruw��[{�r�n|�l����]�OG�_�D� �b���E�C������
�86�,�wgf?fvg���w��;;3;��뽝���mmi����۝�n��6?�on��tw����۠�����Ԙ��fy��F���|�^��[�rM}���ViB��_����`8_�'>�EN62���=��0��!/�Ϗ.�/>������[�:1�����@��|�(?�g�Զ �?w��!h6#D��� F���"��ٹ"��ȹ|b��.��ߐ����|i½	{ң�K)�O�
ʌ��TW��&�W<X�����A�[������kkK��TX�[��sR������*���w�>�.����6�yUǴ������fG�8fAZ�fTW��(H���E���,-��J"��0`� b�q��x.c�0��PA�y�d��T�}9y��|M`0��i9�^ݸ�����-�S�:������08�w�*�a��W��#�iĺ�hL�@�"���O#āse=�Ki&*�br��\��yo��F���vf`"$�/>�e}��;%\ס���l�4����|��W�r�@�Ħ*g�7CUhi�)�~A�_ecZ�\���ӂp�������DBT��a����b���Vi2�9
��]���¤�!��� �Ѥ�����a�O�����|�����si2�7�X���F��1ؐ�t1^��d���[z�m�D`DCG�(:ڜ��^i��)�Y�k�oԆj�~|*a��:;��Cм�ZJ�
-�+.�97�o�aТ�qCqpPWon�H�~;�y´g��o���<'2*,�Ș��Ŧ4f��r^ �}��F��zf��5���dk4��ٝ��b��I�Z���L��d����HF��EŞGv��2�:��-3ԗ�Q�����-����9�qM�	�iQ�!J���V�\d�5G�6�SDZ�����t�zd���}����%p��+qg�8�Q�'�҉��I���5%�e�U�w�%$���E��
���y9��^Q�E�qz�>">&\�FҾ�a*%�D9%:�/Q�N�s�^̰"�UJ̣?E=j]a�����zY�mqmj�Ü��u��T�C�
���(�X��hb�r�8����A��y|2�^���i���˝��/�N=��2�8�`0�c�xXSȧ�K;��Xq�LS�l'�wA�Z^i����οi���6`Ɋ2���`�b<�+E�a��՚�,�H��+r%���k�>C���	����CU㯮���w��6�g�k�rK�f�;0O�-:��W!X<>	s��Np�r!�Ǣ�gN��7�`�8�(�[�EQH����qJ��\ڼ���X������m-�kR�W�:kd5(+#�+"��4����>���Å��+f��g)�&�j�g�P�#&v�� �I�����mdGF9y��Aeap�ޟP��8�!��#�+�l�v����gQڢs����"��H�9��u�Q�?���|yc��P`�N�J��}�j6[����&�&�v�x&�����39q��tsfj	������6X� 2��0'�t�)�ԛjmp#A̻�f�!г�����}��}9%��`�%��﹌+f̀�"!F������zE��m�T���)�:dG�}??�t|	����yL�֡���n�rB�1m�ۡ���–�o;M���ݝ;O�0������A)b!<$`�R1��iEh+1���_wgG�@�6�{�������3�>�\��� G�b��T�����}��@���xR��0Z�@F=EÕ�D�JKKVL���E�M�o���/!�[o����Px�~�Y����e{��T:�f�,�tH0ym�?��3w��:�{�4 ^@d;;���Fm��r�'~��J�2:�35�`Б14CN�R�v��CB뛌Sk;��)+���}
�=�i��
�0�Q�Yx� Υm��O�za�n�i7��U��BM'	<J�i�a)�ɰE���� Y�T�)�X0�>̣h�kU�
P�ډ�u[�<��Эܖ�x�G��a���H�d�� ��.��F/t��ru}�U��z��sD�ıO�t>l��V��k�݃���@F��#�J��x�Z�y��U,��˙�$WZ.$�O�F�a�4���ON�g:���%W�~V��j��AE�{JMz�^��C���*�3���R@n}�{��,�w�偳�]�`��ܭzh���_n=
��a��nuZ��+�`p�3j�d�����Zms�6��_�$ӣ�T�Ngn��%��5�K�4v�s���	I�I�%@+����]$%K��{ˇ�&�ž<������<KTi�८�u6�[1Lv��'_+��J���P�x_�_Tb�Qc�6�8�s�󍨕Q��J��<3"ѩ�\
]�K1Q�1*M�B��������\	���j�
isk���r�Ƴ�ΛI����㗯ON_��e�]T��Je��
���m'�x���ͻ�[&��u6il'u���R_�;9�p���Y��|�f�ɂ&K��3/͠�5oF^��D�
G��ha�	�n����i��L�2��g�,�=�{t���<����?��07�<�@T��Y�b��A�����ZLk]�omX���K������"�u���D��B�P�ETJ9SFL�2�ʙ�P�v �&M]Ӽ���0�/��KS�Ym숗�z����Ry�EV�V�"2�Z7�64KcUF=� ��+	T#���J#�����]_�y�(B����)��I�kr��N3-&���Pf��e	o��G�G�Z��f�?Ε������bl�����_U/���7�Rh���bu��� �Ȑ��?�'*i�yY�e������t��Rp�&>���_Ҭ��^��t����)@1ijx�ǂ]�"�#!�
Ξgȹ�啵2�#�Z��!�߽��Kv/Y��zh��$ګgU��ʊ�vIZ��H���UK���dV�DS��z�88Uc��w�����7�n6��Fd�}@᪢l{��	ʐ,��Jb��[k�,�*֋��Y����A�A�2�u>N��(#�J�M7"U%����� n�����tݩp��i%�A�ԧ��W7�e�Z)�h�
�0�Y�d�I��0l�-@�Ka*Y䖉�?ĘHEt��Þ���ic�� �\>�N��EJ:�J�AΌB��l�SUhA��m�S<�E��z�~�)���Quٵ/h�D{�S<�DYVRT�@�b�����1�t	�a����������R[�̾�u�·+�7�8�Ť�p�� �d�iq����p�2�2�#��8h�s�e\��k���mL°��jw�u�X�{�F8>�
u'ï�g
��=B�H�"R���n㎧m���d6��'��2TG������@o�;CJv�;��b%G����V2
5vV9�"
�&��K�&�r{�E�elS�(��J.��4�D��C�)pː�z6#$6U�"���A�X�ʌ���ZFh4�\ �>��o����Q���'O�l���G�bh�RET�:߮""�
��n�\��c
_S�d163jE&BVպ�^��5i�\Nn!-j�qkYPt�Mέ�D�
]Y�V��g<V_"]lA��e�O���+�{cP�+�3��n��\7��C�Fo�q]��ybt��;������f9Mz>�Ԙs�����~?,��]{����s��a��5��S��gGs��ֽ�T]��b�����Eq1���+]�$�r�6Wv�:�c[��`���.d�G� O���w~��IK����|�Q���'I�(��Hʇs@]Sg��G��
bZud�`{~�uk���2X�� ���w{�7�t.v�����1����8o��]{ٺ{�×���X9L'��,2�	��3ތ�M�?��� T�BB�ED����~`���N���\�ҵ+Gv�Y�IY����я�w=�`��=���J
��*]qrS�5F��].��!5#�W���g^��–ݨfD,�y����V��o����vوp�\����W��W�����{����}�V�b*�ǚ��f'ޜ}���N���y�`��2��Ψ]q�>��r=�����<�:s���3_$�Ug:udxI��@��Q̴�(�e�!�4�q/�+�좊]�D@%X��pOyE[$�z�=�G1D����Ý.t�
.M�;ss�@����]����&�3Ut.�h���G>��U]cߪ6W:C��7�ܳa? �Gd%�pQ�,��r�1�|��-z��=Q@$�� �R�D
�qZ'�&c"�KG����԰"�U���y�K�1p"�F�� K'ϵ�>�u�K�i��P)/�҈ڼ։�x�]�E�7��c�~ƭnҤ��j�1k�%Z;����tޞ�z�<�E�_mj���������W��7��k;޳}-ڽ��5����	;�?n�4F}�������_B�l���(rs��g8�Qw�ۺ�Y$v{^ݬU8µҷ�:�c�-7~���}�n��-�r��ס+�êPG�$K�~m���ר4�@�������n�֏�[��Q�
@p��a�#��fԲ����^`��
��[���Q��
�!�Z�ֲ���ă��3۩�X����w����Z/�)��^$uc�+c���w�Z��D�"����;�{e�ɭ�2ܘѕrw�ow(�E��V�Q�kO����;_��K�г���J���pڧ�^?h���V���o�����A�k^��(����>�d�G�y�����������ѭGV;V�}ו�������p�ߕ=�X{�B��Y�ڿ��k���}!�W�oM��%��-O���M+��\�~��^�0�=�*Q�H䒺�rz/��~�pO���8D�4�4]DXz
0���.�$�R����&���d��]��͞�^|��^"^_qk�.�ܬ17���K<��O��i�"q2`y�����Y]U�t�䆭?�N8�K� ��Mc\���@z��ˊ�UT<�]����hr�Uy�d��q��?w�F��Hbm�1S	�ݥ�J ���g�)H�_��C��z�@���*�)�V_9��A�s2w������3su��"t��s%����~W�фX;�z
Z���H�NS�L#�p�˜����
W����/]��M����k�l'(|s׵#r=0Ӎg���;:q�Y��]��|�'����)n�+��9O��%�(����_{>�^��M�%_q�㧼��GN�,r5�{��q=?&��@� ��z�٤��;�)�d�y���3�6G���꿙:󳩻p�u�\��BX9Y׫PV�U-�r��֑�����-������J�ir�E�w"�!
f���?��	�sU� Ad��������n�O��^�7�M�����%�^t�a
��ROt
�	���z��%�~�
{���t���ѳ��\B.7X>�#��������t^ʖ����^[�;R����z*��)�dߢ�F-P�"�ئ1'7Z�i=�a�����!��̵L�[�y?��׺N�U�:n��Ko��d�&w�Aٰ��:�3�F��?����Z=k�@�/2Cp�PJ�-୆f+���C%���_=I��N���[|�|����Llt�2\��:9�0�	dw8�M
E7b�D�ɺ�]Py`>�a�5��<�iO��y>�%�Θ��p�כv�����*{r�߇�Qx��=��}��fUnsX�u��0��(���ϸBL��K	��E?�^������+��F�"�\�Khjl\A�i���e@���n�B�_��yh)L�x'���O춧wb|�|(�	�$+#�qQD���"��ڸ�M��>�S7�`�Wb��t�5Iu�Z�����Q�
���?������L㹸/����~8Yt��
�-��'C�E@����U"aA��`���gn�ߖ�7�=�����6� O+)��T�YU�;u�;��w=qff���D�b�VyS|��:Fj���M��)P(d/Ӕ�B�����&Pi�1�C�g�jW�-��UQo�H~�����mH�4��$(j	M�"U	J��C�����v׹��{ǻ66Zx���7�|3�y7�t�O)[ W�DVH�J4x.�߽�I�0i�F	c)q�a��DH�0M��HT(�0�I�,D���
<-`��+�!�1�h����J)B���v!�N�u���&
VL'�<`"�z=����
���Z�u��FP�A,!��L�)�Ç�_�w�G	�k��nX�����no&wח��zT�"f�rQ��)Ċ����E�$+�R�AV5��J����]�8Dq�4<J�z\�%#�OP7N�n&F��	���w�����os�Ji�kƃG��\�aK)֧ņd3��ʿ�I����,�R��
�N	:������+�{���)C����4�R�"���|�Ro�8ƛj;4OKvo05@��zV�q�ٲ聖9�kbn,/I`�h�D|��ka��[3ҟ+��}ev���:巘�{��a���B��3x�Ҝޗd/,3ۘD(=ԕO˦&,��[r���ݩ�VY��ׂ����^7���|Q��
5A#&q��k�����i36[^f���#Ԧ�����PȖ��Q���HԹ�6�f_�U����h+����Y-���%\����=9��F�'G�����o�����'[Dݒ�H��I�Og}kϥ���X�j��M)��M	YG�QT���n	�I�,W�g��Gt��\{D�[�
 ����N���C܁�_aM�@��+��6���^{Z���l��l���5������f
C�[��I{��<_���m��_��J������ޤ�����R�H��Sm�!���K9��u�t+۝�U3�Z��UZ{�F*K�޶��-F��>=>4�A�|�Z�vw�f 5u	��Y�=p�C)-b ��Y�%�K_��A�`�c���w��%?q��g�l�Ŋv�	��VMo�8��WLs��ԑ�vN]8�[�W����(K�D*$��0��w�!�:A�b��̛7����NOɰ��+FF�Z�|�i����0�܉bU2	wR�b
��΄T\�x�)&�X�Y�+X��AIW x���A�X5OF#���OPzU0�!�T�L���U�h��uV�Q.z�'���t�mi-DYL3PL�H�:Z�l��˟�o�?��.�2�kݢ�^E���~L�~���"ɕ�B��%����TT�bF������خ�ʁ&I�s�i��F���\�����l|3���i��e%�~EMl�|���-s�R�i���H�(ߙ�C��s)�Yɒ��=�L��~w`w	�����t
6l����OE�*&�ʪ1�����E���(���2�:�Kx��sjE���6���ݫ@�/Ը�O�|>�tY�/�m��I�r�=����y��9�=r���ھ�v����+��;�jJ2\JQW0�]�D�V����C�Kd)
��'ROK2d.��%��kB5�Cpt͖�1gbc�!�'��t��Vג�-j�X}OD�ӳ��X�*�o���)^�E`���郖5���y�W��QN1>c�jv�ǖ�//_vA�v�IT��2ʗ,	�T����i�����=����om���K�� ������Uф����=�uQ����C��3e�k�o�|����Ux��Ĺ��Fͅ��	v{[�A�lw���Ed��ّ���yݹ���,��p+��'�Q
��� (,9Bв���gvU��@�g�E�{��e��6�ě��vSp�	�S]J�؊׼�0�t�8�T�r�$��m˾����[�MDٌ�m����K�"��`G��-�vݒv��ec�l��������0��
�6���/�_}�����3�U<Gvx[#��ΎO�ᆝC�x�Z�D�ަ�H�ɸ��~gP�~�!��
��/�H�^�	��XKs�F��W�U[!�b��T�"Y�dY�Uml�l尥RIC`HN`���$���=����Ơ_������09-T&+#�s�nk�\Yg���nV�uі���Z�!3g�]�ڤpV��jid�(�4�Y)��%��]-�%4F��T9��h�`l[H�a��-���]�fk�4]*�j�ҳ�.�/>}�H�eX�.ׅ���� ,v;��g�����3]�Z��YM�U�k������������E����4�[�U�%/L�5;#V�1X{��HQ
���� *y��ҕ(��:�Ee����ŧ��U�5��i�
���T�	-U��aF�I�z�¢��w��g��
a\ֺ�(��M0�
�C8E*D	��{��Z�����ߪ�(�Q-T%��4H}��_=��A[��`{��&
����F��=��&"�����K��^"~8%��q ���Ǜ��Z���3����o0B��),��⋰�0~���<�p��b�~�d�@U�"΁����;b�Ε{v�	�I�~-mSW��%^'G��OL$�8�q��<��`x�A��B�ؖ���;��u~��v!���]��D��������Þc,����a���b�L䒛��ǰA�x;�(�>{�u$�K򛳺���w�d��"�>:�$��,͎���]?�7,�����L��r�͔�b�N;-�z�h��
{<�L�*�aEȐ�)�7y]W����}��h�[�}$�����.�1;ŪHf3�9��Q�#G6�GUe�m�ZB�y�Բԏ��!Ea����3�G��+Y�ȩڧ��e
�DI�,h�N�*R��S��x���v�1�@h��R.4�h�㰫� \A�ɠ#1k�ɰhP�O��b_��YzPx�#�14��\�ZexMd)+�n���@3\��J$�J�<��ֆ�ɇ��`k��\Z�1p[�J#�x��ZYWwc?���R\?f�R͞�W��� y�'�i��g�jc2���V��0E��t"F��1���&	q�FǴ��G\D(�'\,p~`1Ԓ���|���Q����*�g6pǤ�jE��0�XIB�Հ�XE�^	U��F��&�1͸�Z����c
%�hx�"̖���Q6华+���mT�R�|�D��Y*�b�l��-/Z�F|�Q\��6GXa��qAL�]<r��m���'��W�'�gsQ�{;�b��f@¾�s�%1t9«�����;�cI�n��i�1�u�R(S�:���{�d���'�J�f Q��0�f*;2Qe�A.�w�&yT��s[#��Χ �e�"����4���z&]�X��|�Jx�8�n�t���`�.+$Z
@F�WƯ�)WN���M�-�Y4؋�X\��X��u�U~r@�x�T�†�u�;�=]ֺYsk�INsl�@?3���s��e���<D7��H�B�e=�t��H�UXư�˫_�|_xNcG!���?��s�R1���X�G�̃�q�Y����r�O��~:�/,7�/�qCv���N�4ÔcP��/���`�"�/a��'c쇹N�Ză7�v����t|8t��3np���N(��v��#�0i�|x}Y�^Y,�:A0�{�)*��s��1?�$q��)�Q�qO�_�ч6}	�޽�̀����?���V8�bOC�+��r�;����n7xe���r�4�7���v��Zݲ���UFK}w�W|�zg��/�
wZ����:��v&/v��H�ͼ�?�TQ�ǔ�;��إ�`�b�?��K��x:X�?��ᆊ��⼥pE�e��7P��ױ)��5��8C�V������^zg�O�~�vt,���v/v{��UKo�6��WLs�x�m��(Y#�k��{OE�P���"U�r���R����6�X��7�oF��it!x��`4SM����c��㯟`U!,��j԰��.[[)m������$ZU�@�J��u��� Gh
��ʒ`,A^-c;�0Ć�"-0U�6Y�6}�d�m��	W���f9O�i�nZ��X�������՟�w�w%��yk��Q@�wQg�7��뫯�=s�(�鱨
y(��♉�}0ו����H&����*`XYr˕d���ͤ��������'���E�GIl��}NP�Zs�|3��(�\k%���Y.�
+��J��Z��#q���C>X�'����(���o0��-�@��\+[�����H>��m�<��y����h�M�Ӹ���R���J=%p+��87�]!0��V�F[bzJ��$���3s�͢��|����'O�^K��o��<u��Փ:"�4ڞ�{����76���hk�6!�η��RG�:�돣	�[Y8�8���
`ˈ�>��{�Z��rv<���v�^����್w����<
IF�i�f0袘��Z���r�Qω�ۏ�A�K��"5�Y������g��9�k��'�.�\��q�U��|
Yf��4�8����e쟒zc9���V���2��7$K�S����a��dp��	��f�ꯣ�>��k�����ՠ������t���y���%\[n8�M�C��kO�Aֹ��+��"
/�2�x��jfyq�l�
f�LOj:�n�t����^M�ҍ�GBJȟa���u/G	���䤥�{C�
9+��gj��bϒ�r3!Ƌ�^e+��ī����7tڵ��f>B�0�}�(�oY�N@�2P��W:a��E��m|�A�_���-�:�[���V]s�6}�����G�
��v��l��LK2��K��-����d����+YƐ
%��+��s�a��}�,���ލ(���R
�g��9�R
�o3*�A�o4�0*u*�
`�9�
$UT�ix��)�EB!#[9�BD�T4�2OF#��(���oX
\��T��2��i�b:-�������6�mi�"+8�� �@*Z�m��ї���Q�X�Z���
�W��Qԛ��lrw�eVC�-�*,�!��oB�0x���H�̨�pB���+���@r I�49�p�P뿒$ׯ`�0�ݎg���
=������[?�BqLh���j
=/�Z�.,�y��h/�)Y3!��%T�@j3&A��)�W�4�"���0���}��Z��cB3�+dX4� ���޵�У�Ki�Cv�Uo�+��y`TjF�ee��O�@^f�-PTP���t����RJ|�5�ai��iM��>�ï�}r��r{	Z��G�%�\��H���V����P	�4�U���
�Eܣ��^I�Sp�;I�l�Q�O��4fK�V�L���H���[�)M��N��P]�\9'�z��<���[R���L���k�ʿ��8�X���e���m�⛄�FR߆�i�mO�c��I�}Y汙ՉV��fÀ6��
�1'Y�լ׻z`W��ۆn������'��Itj�}g"�v
�#�1L1(�9p�֎��z~�L�������ۦCq�U�3D���*�l	�7��U��"�{���9@i���Q�k�f��+�gZ6�Ý��
~�A�rWv��>���e-����
�#N&�;�-S��T8m����^X�������-e�3ν�)��d���P�������0x|����w�vw%"V��$�4�{6���vpqq�s�??��ޞ����j�<��Y���p@��"<
�R�A�7����j�c�����6�Fx��]&��邟vyt�����#���G�R�$0���ۧ.S^k���N���t���PoG���w��d�^w��gK����ʛ��j�Q�F�+n���I��O�G���]�v�Pu��=
�e��
��Y�s۸~�_���I�(ԥ3}IƝ8>��L����Ӊ)�p������]$H��.s}�l�>,��ߚ���>2ʈх��J�Z[�d'���k���mD	���Md�+�֥I�(��(��ȓ�|-
d:�Iw�U����ʈ*�#�Eȏ�����B�?��BjGkk��f��;4YI���Գ�W�����fY�Lo��������:����1��_�n��3�l)�mPGQ/n��wW����"��a�;���+�|jF۴��H+�^Ѩȴ0L���VC� �si�ViW�A��2U��n���slt:��V��$	k�߯�*�ЍT�of�~?�z��e�7������i��~���l�
T6���Q)
u�jD���I�0�<�s�Ai�z���ԫP6=�%���~:���3P�	�2�>���U��]��(p���+w�	j?زT�_�Bl�,C`�u�K��!��B?�,���K�>	��{\��0ip�0Db����^�c-��K��ld	�Z9��#�����J��hIxT�\J���FL��j�K��q�z�OD�ug9��oJ����B�gd���~)i{#RS�N��w��.��V�K]n�`ֺ*r�u��I��0������T�)��=��.=HD|��XA�YIbcD�(0�q,s�$�Y��6�$�
ҥE��Hj���:��逖ŷ-�@i)N��d�5�S��v:�P�.�'�
!��	����]o���Z,
0l���/蕟�b��~��D�-Y�M�/0h����h��B/1�i�#�8��Z)�;��>G?�.��IU�t�ۅ�p��d��ă��Wg���p(��m��
Gѩ����w0�n�X�j%�[���d/+������Li�*	�d�ڑEH?�\�!�	z�G�����{����u!R.�>]b�^�Q��?���1����
�䍋YJ>cƤ���y�G\��'d������009	�����[�*��A�:v �K����³�r�{B�O��&������ѣ]�}��P��nk�1��|�
/%�&���?��>Z��|�޹��
~��g�dB�O�ި��ڄkTo����ojm��{��A�&L.aО'��Ɠ��^'�۞c���X+{4}�����I.����q	��(.)r}��;;SO�
��F�SPE��٧p�|�F��&U��X>+�:0����{Ը��'�JC��8������&4��+_�s�}CD)lU�����u�r�����ښ}_��sv���7‰��G��{G���K~�t[iM��xH��+uΈ��كKi�WD��^�>��a�ᢠ���ɷ��R�r�W����yw�x��Lݵ?�T�ٕ�ߖ��Y:a���޼m�tƶ2���Ö�d�0�&,��?h*.j�<5J��y�5PF$�l��å�/?��%_&-���+a���/a]���eu���n�_Z��P�)ܮ)��5�T�W����߇=�BI��6�U���qyV��N���KQR��)s����/�.�m'�F,ׂ
\�yڀ���fAk��ú��ފ�y�X��n�:���g���W��~���> \�ݚ������AS��^����	����
�
�m�Q܅������1Z��3N{��{��9uH�#�v#�Z�a�A,����{ɂzV�ZC��%$,����F7�O�H���[���Z���.70�^ځ�[4#>��2�a�a��,\"�j�q���k��Q/��G~H Q��&�SkE�����6�Z��1�hʒ����#��K�[��t����p��}��l�y3�]^�=�З7���6�L��x`
�zV��m�z1�K�ˡ.�Vt�&�SxV:�m�j
< ������;�!�S���匜>P��]�o�h0A-��I���/�y�3W8�����W����|��x�*�r��(�U˃u��
�"v�	�xZ���r�aIO����˷?O�n�r��bSXzb�&L;6��)�P8�:�4��)!d����=qA�����A"O%�P��E�j<�
���?�b�D�a}X�(ж�$�S낰�E�T�f?�1ӆ\g'�R������Y�B�9�7nȃ_��������$9��"�1���׃��E@�]>�����t�}Y��~�;u
?��)P�*w�ibML�p��p��t���
}7�E�14�7Uw�W���?*����8C�D���RI���9*���y��ŝ�f���ë�0������H�����J2;�#�eMM��8�}E��k��q�=&kS@�	9<Q��B�a'��!����4�9j��hb�c�j��n�ݦ�5`�+�5T	��T�q�륃v�/
��b.��O��%�)��(�\����1�B@�;���6��F����l6��
!��Y�r7}�W��P�R�l���ˊ��k�Df��TJg@���,�!͕��i�f0ʊW�ʖD\�ӧ/h����R�\�9/v���
�C����fk
�x�˨�w������R�����)���Tlh
fk&!�	�����JI(��(�z�#H�K)��a�q���*&�qa�VL��E�������E�>(�V̳"����
��U��x���_f��7ӽc�+�����T�+�������/3/�\c�0ie!���
/O� ��Qq p@#�$�d�0��I��I
W�<�+Ar��ޝ�.�Όb���e��Q������A3�G���d��%<�����#���cpsǣ�J�|��3"VT��k�a\��)�J}I�Ҍ���H����Wiviat���jA ���r���K@�.ի/�4�(#8hWYf? �w8�x*�P!XB�5�V�%�s-(��1�
ZR�b1R�,w����q���v��cAWh�h���~n�hkS��R+n��>���v�!���1����}h�)�
��VP��;`���`ZИ-q�ܱ���q��kN��a�AN���q)���E`B�S���ȁ�T�%�U1��wݖ�'iY}H��%�Bƅ�!�,e�Bn���ŋ5XҜ���e��e�6���Y��؝�܆���.Kd�D�~�{�^~�,ǖ����m����1F�\���q p\I�_�Q��k���Un�IG��2 ��Z����^�10	�W�F遮�_��֢��UIg�v�4�I���l�H`��'[d/�^@�d$H�YC�K�����K���%%�ݢit�ʃ�[R����1����.��'{z��A��r��7N��j*�KR��:�M���P��fN;�@ m�&6$-qfY�N1��@T),��[whX��`5���G:������6T��NJ&����R$^��p�������DI��(b��-�ܕk^��N��]�xn��%��7n�
3�t
0ث��fC�U��`FQ�O��R;��
K��+w�ļo|�O�Ick9��iz2�M�Uy���[4\:ô,L��ƒ�d%�I��Sz�
[l9���N�x��.d%���h]:�@����K.+������7���o�CEp�Gw���kX�EK��x�q�!��q�Þ,��7IYÈ�m�t�,{\�F٩���J6��r��2�:�#�ŮY��0�*a|XT�'@]T1i��2��y�e�B�h8mX~�	�q�Z��Z��f9Xi*�U���R*���Q+P����0<�khk���*�6�v��S|بK�%��*�R_
>R����r�;=
�L���2[X��ۖ���s�W���z�:CCYl�Hz���[�;��ţ�(�n'�T��X�	�FY�\/��1����:�D��a�u:}��v՝�ҥ�k0��_�ߞg��#��~}*�&�/:(�G�F��t�
e�|~�駰ι!����C]٢��$�jA������j�ڴ��6�f�l��Ƞ�H,.S����Ĵ��k[���M�D�̃��ٝ>v�Lfx�?�����u�ӯ4�U�����Ș�\^�vM���Z�٭��n��л
gI`R#5(��Xze���6�-(�ڛ����ZPQ�5��Ҩ����X<$�[t�Z?ڰ����'��Ӈ�Q��hQ%�-K���>Uf=T�=�ji_>{�'s�S$/nŠ�W˄55�����҈�J��Þ@+�ޘ)i���Ѐϴ�ug_�Aˤ���^�SJ��>�z�+{a3�|y�]���k�>��vT�^x�]�փr��`�����cj�~�ݼ����ﵰ��oM�&h���`XXu@ �BD��B�޼C�8�{�a�iՌ�5��G���>x?[�A�;�.[��\7���	���v{�j�5��6[{�v�ܟ;���~�)��}]`�n�}���}=	�*�:|��a��q%������:�~���Xms۸��_��̜$�^��p��ڱ��3n����3����"X����w��$���|�Ep���'����O5NT���"1Џ����4��E�Ւ��%W�yd�0�����אs����i"4D*�d+P�\Aȡ�<�"�Q�A��nNA����m�\�[`&H��&��/�I�p,����������<��e&�ᠹ5�`���-
��Nϯ�o�*�Tjr���Za�֓����O_����Xh����oJ-�y����d�F�+��ɤV�������ca�J���/e�9K��}9��}��`w�e��~o<.e˿w!���ХH��uo?(�\�*��r%��n>�=�?�<WKR&Pd�IfdHhz���9C�ϻ��W1�[��d_0�:���%H�D�xFi��)�
��K�b.�Ĭ"{�k9����|�2�������
S�\�v/i�*�XD�����!$I�Y� sR��b>)>I�f:㑘\)d�K�<�j�,C֤T��+�с'��1P��NZ�?�,��ǣ�2pQ�
�EJ�.�Z��E�8l_F��q��(\X�m�`����-Q��m%vOA��S;Qir�b�[rP�@��I��S^zE�	_R�6d�2��7<p��"�#��V%�Ҭ^jaa��P8�.!E�G�؆���DD5���`���*��)@�=�|4�b�C|;�L6	jO�n,:�Δ�H8��x�Db��9%�#�ld�����O�߄\��b���Rarbf�u;�ΖI��j��!�!iT~o�c��
3�6���$g�(��ž1���'�)6����{��oes0��n�qO}��>��lCk�c45R��׾j<nӺX��,o�Biw�P��zDF]P��x���҅�)tµ3qd[Y*}>^���K�*�)a6�k�JBZ4�.�&_�ǑiņAy*ڣ��:Ǔe<0Yp��Y$7<[�u�0*̞]ƥ��֑��޽��'fO� ��f�����7Z��Ꭵ�ߑV����� }�&�!8�t�h���765�H������	I�C�4�����@��5IЛ��_�&W*D}�%ĸ��`�$���hC�U[�j9�y�q2�sbe8ޞB���w����}���$�8�=�����T�Z�k_H�V��
\�^:�*���r[���qY��u�o�T}-GX�Ev�3׌������|����M�;�ȟ�6zpS��5�6w�**�n'y�*�8���o�zWz�V~�|����^�0�%����{J��g%����|�5�'�
��{��t�G�}��~85v�"�p�g��&�2�cÖ|�C�m�8݋��-n�����RQ9�7;n��]k��,{�	�%��[">��0p��e��!P�܃��?߀<T��O������^C���5g�*�)��,��.U�G/��x�>��ͮh�+<���6�V��	��A���#�L^�����q�`�n�.��'�S\�P4����i��H_��26[�Ay��Z���vK�*��;J�z�ֻ�!�
���~s�л�0'	��5�!�?6�f�A�i�
p�wVHӴ_�97E�
y�x�o����1����;���pxx�ſ@��E�ؤz���yx/*�u~A�Q8��J�$~��2�@�M��*��d�&�F�8~Mϯ���˳;�qvs~uy��~y�޹���D~}�mW�x~�KL�w�$�3JoPO0�#����M��&�,�_K�c�����(UjDh�<����'V��tMjovo�_�@��f�^��N�n�c?) ��
��]|ܧ��#ԩpz���N�A�5:�v0��P��}Zm�F��g�v�op�u'Gcwh�Am�Ҹ�:�����S���4U�~��`�Ia�-��O�FU��5��T���W�mCq��S�k0J��X���up�L������f�S�SWn��f��ז@�|U����Q���O�A�5�½��w{ީq��ځ��%���E��Q����^Z�bg1O��x]�|�5xK�Y�4յ|��^}ۢ�Gw6�f���Es�Óm���c���Z���_�h��s݅�/_-gܷ��<yo^��V!o���ao���Q#�:��Wmo�8�ί�~Y�˅�I��w�lwi��Zzҩ��@�nG��m��7�!���I�����g�'����I��,S�5�J�e��3�¯G~�i��R$��I����k:R0J y�)&Y��1W0�4\�Ȓ��EPd�h�<��J��nX܅P�b��A���K�%�q1�����ί�����\�y�4�4���];�����뽀s�i�g�ޠ�<*�E_�O�&�7S=6����Xh��
>�D�C��CI��80ȝ�ѐa��bF���0�0���"�\z�/e��`w9���O�X���i.�vxY���!T�My|S�a���H�]������8|�B�a!E�P}����R���c��!�8|��"�|�-�L��3�~Mx�΃c��c��I͙�o\����&hlY��=�+��-�+I"�L(�}z�0��U�p*D�¬�aR���	Ō�@�M��8̖,j�{;,>3�����8ߒ��g�2��E���<�gadb��>x���e�@w>�F�:�oC��B�`�I�zn)�/Vk%��,22T�[�.d�wC���g��W$�(�͍�e���.���\�T5ӟ��W�K4�V�:��U'��;�ܶ�<
5�v4;us*7uNu�wtԙ���
�%D'���׼K]D��o{f7�ōTY�z�@`�ıPcI�b�U'��]�ı�6�9 KnplOR�%6r{n
X��S޲�KV�3��� 	�}��3N��+�'I��������ڽդ��=i]��B�j�ed[:N�te5Y+�jWۋ�Ray! =���H Z��~n�o��>�����.'0���%yr:�2���"Kl=�*E�Tp���B���1d����NM�b)��4l	˖:�Pvڌ�����J5$���A�Ú�E��y���yݝe8�
���관?���ǥ����i>A杭5�)-Q=\-%�O�w�ǡ� 2V9Z�Xԡ���u�a�̶M{��d��Ydv�Y���c�%�cg�κUm��1�?ǭ��7��+�)X;�˳r�v5R�ԣ����z�ۓ��T	,{��=5�]BHw�C|'��C�za��備�<��^�Zw=�:sV��k'P�ʮ�n���BG�k!�*�v�����j7�+F}�q	c(S2������w޿o���%#��f	���;�.�$�1�'�f���� �_r�IhH�24R�Z���6�M�ⴗ����6_ls�R��Zjdl�ϣ)*�a�c�
e0$�n5H*1�ĺ9PĶ��L�/�n�8��d.���*�4
t�*�'�ۣ;P�7'��Z�Cճb�P�|n�]����1a��~ԷA+j5��>���|b5�t�S�3��/��Td��h���ޖ�Bŝv���{zm���� �݂\��{K�+�_����0W��o7�m�W���Q���[k�.��"��U]��m��zo��b��[����]o�J��_q��^ %��Ҿ$�n)M[��D��jUUa0��x|�A���=�̌=6�&��%̜9��ON:o��Q*;c�`�͠���o�	�kv2��D�%�Fy�UI�(��SHd*��\y��6H�W+	;q�XJ�S��<Z!�Q����4;�mX+��u�Y�
��&�m�l�/�@
?OƗ�٥�=f̖�vq(3	��@�Ah����%G��OW7�V����$X�Y��c�B+���t~3yw;��Ǥ�U�j\���>*�A�EډE��H+�FѨH�
�|��3"�ZY�"������({wף��tΌuN��`+��<k?*D���+�w,��J�~�:Q���+��t;Wc���X��gP8&��f2De�
��OS{n�ѵ�����V���ٰ#Z8͠D*���ppO��D�!H�x[�C�LHx/ȸ=}���J�o}O#��U׌j)�*�l��Q����c+�
��ȗ!�ʽ��/,I�Rl���o5�iy�a�H�XD���̴���/�V����I���b%-�e�u�BOzoP*Qc����H�N���+�� ��g�g��3A
Ex_%+��9���(FJxV5ѱ`�Ʃ*���e�2=�V������Ahc���L���sI�4N}�JvDyM�Q-����K�������2J�H��#�MRP���|:�hvxfȸ���x���Ч@�Q6 W�LYt�R���:﹢��5By0.��-��He'U��#Q1��|{��Ԣ!s�yٜ
��탕�R)b�YU��RU�	�*�Tr���a��-����w�jY;�*9��&�X�%	�*�6pS��vȟ�A%3crt���3����f��pQ�?G^�Qb
A��YIH�	tȬEr��,��(�"$�엷�
<���(�-e��}��6Z6X� Kr�����$�,�y� ��oT����̟W\S�٘ໂ
8@��+lg43ϲ6/S5���T,��lV;p�X����bz�Ϣ܇ȋ9d5j��ʟ�+�Nǀ�)f3Y�b&9��]��-B�
z�+Rw�U��T�K�;�W���˺���PKn
<�����mT
�ix<�AQc5�P~�:�@7�Z�����4��I�^��鼐�Ѩ~(R�n��k,Z�ѱ��-6�NymS������}��)⽉��å��!X�m��Y���f�Js2ԂL�1��*��F��$�s�Yо���
�7�ò��sI�ʪ����vsM|�$�00G�t`Nݤ`���<b��~���P����͑NH-2��D>�a�*�3��t���P���E�Ţ(��1�G�TB���[�*�����R��O��|�M5��Y?[��i��˕TfC����N'�K,I����8��Y��G�"k��P��|ս�ywTu�^���A��K�����?� �EC��pߘݐ���(Kzw��A�Ʉj�4�x]yѣ������T���q�Cc��B���A�͂5s@���|a/��K�L4����0&�^�x�l�
���G�v��{Zp�)]C_���e��ۿ�ml�����N;�m�J�^��a,��'���#s��d
X�Z���][ݘ d�tN��������iW;K�H�a�$�3VH3
.�2��B$�ݑ�!+X�����D�������
X�{��{�@(�
	�b��y��waaO��yի�~����:�0�.n�G��,�\M貊��'"��P��?���G�*5R&5W�"�=��F��|̞Q�Ajj���Zi_����J��zoHM-V��j����ܬA���,��gn�3��0�r��&?_R�u��-
3����`�,�͂��j~yc�����B㊞���іeQn�p܊UdW'�p��0���*I��0ց�_}�$Y��|��l�^b��/zI#ƿG7���������<v��M3�t��pE�X"G^O��"2�,�ڴ�������b�\|�w.��U����
U��G��z`���<ț�ļ�(�C4��KOcST�RP�V��ts�� ��,�\���-SzQ���nR�k턷�3)w����=�{����0L�g��گ�-h����B���h�^~`�+�OKt�[X�:uφ*�?���=�-�8v(�ӧn��O?����sě����Т%�XF+r�/f�y�+�z�I`��!
����r�`�nawwv�F�f[�:P80K���C>�:�Q	��g���;V���ȿ� �B��v�Xxv�h0x�6f8� �OPM^7�Ng��n�����pu��	���\��w�ϓ�d�)�N�����6IN��9�L����5��	N�u�`�9�>��*xt��@2pv2��ޒt]
�v�Y"y�kd��BM���UU=�����&��g���-�CDQ���
8��/˻4��p���']Ð���j�(iyz
���{3h��j�Y�=��3��۳����Wc�/�v�l��z4�|���5��ū}�#[�AW;�V�]�X:2-�e{�NŶ�;��_6�����a�vI����LT>�C)�^e��L4��P��`��K�0r"]��<�#x�w3�E4�w�q}���E���C,g�.�jE\u����zs��E�ܫˉ�MQ鵟�#�GNVn1�����c�
+���k�o��9��6>�e�,�DZ�>q.5�af�H�z�
��&��R�K�c�]���c�y��5K�7<}��ݳ��U%ܵ�_���_����ެ�6����/���ZMO�0��W�SZ1��R	iwnH\81T�
Җ	���%��tc$�ʼn��~~�\H�W�UgK9��s�_�h�B"�Z>h�+�0�C=Z�PK�Z�X�{�
�� ���ϝ?����g�l��.o��͝�R(S�g��t�/Y3G�rβL�q��,����Z�=%V2�k�a������*a�8%*�d��v�#�T~���+�r�IQ��*��Ť�eV���'[�@���Er<��p�]�u��4�]ƿs��Bg���)��QC3��}7����r�M&�������оqJh
�.'�=e>�H?�����6�l���)��GfuDI�a@����r��ʼ��:Xb�����9�?��u9��T�:��o�[��x��#�ڽQcWM�9\�̗@#|
�=�����{0�`0��q�y�i���:�������o Hj���$�W)�.E:�Q�#�x�+
<StDM}��nZ���/ �z��x��\�f˫]�hNmQ,c���RDft�H�E�_��a�(QWk~*��V�s7~��by
x���L_BiC��2ӱ=�<e2E��8%�t�t،��]�~r8�/��ow�ow���U�^��g���إ��~�~�#�S�J�\ýV_xda^�Ti�\Jp�47\x�T�T�aώ�2y�-����,F��V���Gɡ�
��[`6H���M&��M�m(������vu�'�Ҋ�>��r0܂J���\��k���=�^�Tf���A
*Txuqw�~X~�����E,��B�G�]��L�3�+%�%�H$�F�)��U�2`q,�P������i��Wdw?_�ܮ]b��$�\a�7aX�V�mJ��{��_̛i�'gIf,��V\bZ�
<l%���X����"s�'d�,L�-���f��s��{a��v�`󓻟�_Ti+"T`؅����	�:�|�<=��|�{@�����G������Fń��Ψ�^s[�̐����K�쾐V��9�H�bY|�6;n7�(h��SYkv�Bo�(p@�m�x�^LP�MY"2:q�5�x�����&#+*�؎8��/g􆆦ޝ]|����r!9����'�ğ"�[w�2�Zd�������l�9�p"Y�d�U���0n�(�2��$Ua��
��aR�鐰+ ���:�ou!&̟��'�n��`v���Rg9�������ks8��Ǩ�߲��P&v�3/2�Y�~����7���<�ʴ0�іKU!c�1Jy�ª:��J!�8�u�c�R2B��� ��}��%�D�<��>
+n�Y��Q�.-�\P�73�&(ؿ��Vsv
k2�aM|PU�Rbwv�ȹ�
b����f0����۔�����vGN&�y"��X]��N��M�D#�����7I�q���m��К�cSuSj�M^^���7��p����ׁi0�n�L[�.�>������1�����7��X_e�u�C/G���z��lܦ��O�ǩ�2ɺ���S��7w�U;��$�6/N�Ĝ���y�S@�;�&ە�p��|jm�˞���3F��]�wq�q�������*xO��K�e�<��˗���.���]Jtpy��z��Ƨp���UMo�8��W�C� ����8���M[m����bMI#��D
"�D
��wH����$ݽ��I>��y���M)R��T�]#V����3x���/�(.T�U�E��aj�5�jt'e	��A��f[BC�2��w�d�A��j̠���<��m��dž\�*p�
c�q�}�h%L�&�P�����|~���JUU�h4P9�>-6�“�Ň�_��J�F$�ٰ��
��N?�/��N/�zj�Ȅ�H����J���\��7.�UœA�&!y��6qc��K�Y&�P��0���.�Odwq�8;_���~�DU+��E~�L����VBF����[�;�U�˽�F�Omi�K:OJ<ł_	���+�:�k�'�ɰK�T�t:I�a��u!�R�	�#�*.��'�i��Gkf
�ˣ{JJ`��Z�ؕF��Z��+�7S�;
d�0��d&RnP���2M���A�9���uJ���Q�M0��1vvíKnj}�J�Y_���&@�L\Mf6����ߙy�����xi��,�N�pM��ʙ��}W�l�]�MmrJr��6�31wD{�w����j�k,Ű�+��c����9�����}��--��8=�1���C:��Fu�o�U�\�A\�~��R;����7��)o�[���h�2��W��Zט��#���,�~'?��a�K@��օ�zn�kS�L���2ty�cW�
ܙ�c���(�_������t�F��o�p2�BG{=�"���xa/���3,�N�Ε�1|-��3k��x�5M�{�u���n���!�*����w%�='�o�`����ImU��L���_�m���t>����u���V	�i�9l#���ZM{�Uc߲1<A�#�r��Y�(�����ɰR`�b�¢�T�}^�*������`�ށ�O�H˿?�>���ݳ#�k�
K�	��[[s۶~��@_*)a�$���G�q\��3�<m&��!��P�J��XG����E�9�i3�d&6��b/�.���x �G�J2�χzQ��tfD7艧��|/F3%^븘�T�N�*0� 73�f�8�cA�3��L��*��he"СsY�ą+�g*y%T���(2S�JX�DC��ǏY��/�O#3��~����:;���s��/be�Ȕz"$3G+�-M$(�v��'�g[i:1i4΍%�����	���??9ꇨ�0ʘ�cL�~�z
���XȔ�D
Yzba�J�q�E����h!!�02�Nd,�_#1k�i*���FG�F�����E�&���L��$�s��}7�~?�1|%�YgoԔ������޿<9?;C�����t*f �PL@�M&-�K؎�Z�J&�D]�� st���,;��_�@�`&��{4o�Se�4A�{�^�������ŝX�<�}+}��S��ȰݥW�U:
�D��@JL�Li�<
A�h�hЯ�] r.��9��Ư�W$Bq�OFTK��$OĆ%w2y��8�Yf5��ĥU��<G��q�Nh]׊v]p�o�B<]|�)�}��%w�jb\�U�u�@+��\��:M�+�K5@�W {Ϻi(�Ul	q/#_'p	MN��$#H������C��BF�QPC�F��3I�	F��L��U�ZIh��K3��?s;�D!*zA`XW�.��k'��c�z�p�b�l%�ů(�A)κ-��ο�NNk�Ҷ-h��./��p��QV{�Wچ�s��::0�g=�R¦���Ȉ!���J3 ��g�Ђ�	����t�o�X�%�h�r%���I�n�@O*n(����Y��I���,0�k-N�L#x�X�+)��
P��xlFk(��*���!�ty=���2�0�6� r�9��['��Z-t���M}�$�>V�&C�Y�#�LǺ��r�E� �|��y���b�0�����%�6�d�Z�Z
��q+�`���d2U�z'�l�:��e�xs����%;�8�cĤ9m�CE��a�Q�F��&�Jm�������rQ�|�gF�볯�[���g+v��>f����FPk�s�A 9�I��S��LrE
�-���U�eC�u�|��-Tj
��R�|Ҋo��w���Ȫ�ɯ(������?E)E�9&UV:t�(Jp�(��rW��{&��qS~R*iu�R秛��W��EG��:����=��Z�	ʨ���Z6�yR�	)�Th��� �N�ۃE-�m:�ҧ[�ڎ���Sk��7��M<�$^�, 2A��h.S��"���0c@�A�q>�Y����1bן� ��N�}�<:?�:���q��q��V�Rlĥ���DG�@��
��v[����s��TPl�_Q�XOV~X�\�IK�o�����͕��$�cO���Xmt���(�w=��&a�Z%�����g�`�x��o�f:!�I�_TQ�T���l��f�dk��Z�cΡ�
���HAy�u�hs{�g�n	��w���%��`��q����).��b#FR�h�ɱ2W�`���Q�.���xBY3��sClS9��6�A⏁h=�9zFߊ��
B��t�+XJA�:Yp	��ܙ�Z�w��U�\�P���'�S��s�&2�����
��l
֎GRy� �^{hC.�=BS�p	�/���)��]��/�#"�/{p^eR圢}N���s(����ѧ
�M��FI�����/"z������CEtj;
�*��C�m���9�MĐY��ʂ��nr�6ֱtMU��P�j8�Bb7�mF���Xt���8k���#c��c����9�D\B�k3��NIH�z�g��Ie����@V�_4�`?>�QX0��}mwL�,�&���O-�}�L1�؃5	�䳎]D-L�j�/j�O[��d��oKb�4��)�*��*�X���
8�e��m�ؖ)n��5�3+�nˌ7HXa��R�'O������F$�0}".��W�!�W���mVw5.�&������ټ���R�E��>�5W�R�M\�U�Dd�SفS��h�|��'�n��J����Ra����0���@�5ܛ���6�ד���=���8,n�"p�Xj�2�ŋ��H�Y��[�6F�M�Z�1_�]��. 
�ǐ�܉���5
�w��3�����ל����kB;�(0d�!P�Px���k>�)�6Yh �|ߊ]�+�w=�>��$��m���'Q���n�Y$۞�$�y�p:�[��M��o�u}~��FI�#E-;~k�T�]ϴ��'�T7T�x�[��4����O�̷���T�k�7�S>gKxi�&�E	X���/%ZI��x�p�|0I"��Σ3����_����Җ�$]*�N�/NYk,/_�B�X�Ϗ}4{&=�؃����1��v�Z���Pt����	�4�������ƽ��w���h�0�h�g�t���lH�(?����;�>��zNj������!q�䴶s>��.��v�)+�_��m�ؕ�^�<��vI���	�Ko��n/f���U��L����V�I�v�9]-!|k�`r� �=t��=��d�q�ef>����g�C�� s�j-����A�~v)㜏����O�4��#�Mm�qZ���7�V"����?ԧ��S{�b��U"P[�2k�KY������n��t�ew�={��;��T�eW��N�+g�a��Ϸ�ܵJH7��H�l�2D��-_޹�,�_^����awP˓I�C�@� ��Iŵ��i�}-3��N��l���nZ�`gmN]׬�'9�;���d�{��%m�N��#�R��lh�IR��;��v�w˸՞;K}Y���Bʏ`�Pn�H�J�n��
��_��!�|qG<Pz4�և�]�V9k��gk�çkD���v�}��}�,w���*Vp�J�ӎ��S՝]1LI�'�|�����m���<�ln1���8��h�'��"H��Q������k^���5��X�x�^���T!yV�@)O�hQ��,���x��E-��ji�\�.����X�a<���y4��������䢝3&.���D�<V�:��&�8�e�/E��2���7��:�ŵ�:�p�`�ڴ��^ãf�B<{�0���޼\�6.�<����O5<[�����k�JB7�J��!�՘��0��F��5�:����oF�v�������v�;8���QO�0���)��1A{wҽ����M�`b�	!H[o
dI��@���q�vn�������N��)RT�H���A/݃߾��8G�hY-���GLJ�kcCH	�߂A����Ź���a�+�JV� �3(UFG�����$B�f���˝+��h��s��2	��.ƣ���Y�^�/+ՋB�C��@π7e���.��M���z��j�HJ�Ae�RGW��xxw�Q�E&l�"�
~i=��e7>Y�J������j�e⿝��g�pB+.a<�����M��e�c���E�)��o�{�J҅.�
mp�:緱�jX:���q�K���A��s�,H���{�ڵ�sF��Z�J�u�
5��kQ�
ۨ-*j����D4�Ї���\��� �X�"�94x�Q����9��U���jڬf��8i혰9�F_};ԩu[��T�Љ�9c�6��I1�\�1�LQ�B��sR�O[�^p��(�K�!�J��s��P�@��N@	�r�����y�rE�.$_g�|�(�Zf��EQ�[�~��M�A����]�♛�B�a���]�mA"��@����1=��y/��͡	�!>G��[{A/BH�L~¤W>�J�Z�hɖ͠�=J���zK�/k���o`}�A����idwG�O'3;G��VKs�6��WlN�<
�v����V�F3�c+g$!p@P�j�w�$P'�h����;:;K.+�s��d����@?����'�Jw�Z/��;��yn�5��M
WU$߀�
�+^�ɬ
��dkP�ZCơmx�,ЌA����1늃�
s���LRS��F�s�.�)�,j��t<�y��懡�r��+n84܀�sa���W^}�}��8i0W�h��fg5	V������~z�mL�-�h�-�![�?J-0y�$5��̢�A�F Y�(hڌ��&��0BIV��.��L�_���j6��Q`��(�Z��^����
�2}nzYVs�Q���|8� �:�J^��(�`��S�ws��dE��nj�l%a�I�+�q�Z�e���h�v6��ӝ
�����XK�9��;����KD��K^J.�$�]A��Bks��
��Z	i�VJ�w����@.ong�s�9��RZy�–1L���˞[�ۊ��	K�%��m
�'��ӱmOU����R�#��(�?V�ޘcB�	^���WF�朾W�;�)��n���ԋ@V��Xբ�T>��.&l	<��8c��E�M	��rD��cf]�s�V��LAeD=�z�$2.�\�&�_Z]x��X�,!ͅ�Ŧ���lfx�C��-��ά�s�ݜ�D6-�!&��W<?mA���b�bٱf�3D�f95����:�gys�=��S̡o��R�?؅oO9���\��b�c۱6��U¬m}W�pM|ЦCpn|&�=`�͙e�#�[�^���86ءP���ف�Q�|��!�#̓�z��}B	#%ŋ.v�{��zﴁU�&���j�I��&�M[�3�.�3e�90�0�Q���N�y�)�i����
�����Xp-���gT؁C=�+b�����;c�淵��jq�"n��%Rjh�=���!�O�*ݎ튦4�A�>�؊i؛���7w��2A��'������5R��Uя=mc�D�OcE�5�q���V��d�#�f����-��V�`�@��Ns���Q�pVl�1i|�r����W�e!�$q��֜h~�lP��az�M���#@1��w��b�ԝI�x*�Ռ�v���oZp^�����Le���CO&���k�g$������7�s�j��'	�pY�ύC<��p%�툴ׄۈm�D1$�pF$ϑ�^i����I9�K�[u�^�����q�_g��3 ���=�i¥��;�����"f�Vk�GR<ɵ�����m�m�[f:�W����t�:&X�mWO�v�!�,�;���7mG=��m��1j)��G¹�O�C��h�����1�l��'���g;v��-9s.�P���t�Ļ������`=���}U���9�\$�tl�h:��Yms۸��_��w����l�y��Ԏ�i=�K2�ҹ��!�p!	�-�r��]_!KJZHD���],�ѓ'�YD}��ĺ`�*��G���h� �#�V1��nj�F|���`Y��(Br}�2����5]��, (�+Ēh�f9	P�����[��UDP��f�ւ�t2�J�7�|Q�<�F���x�����4�gqNPN8b!��,�v�
����?|�Z賄gtV��Ҩh-�Ň��O�o>O5�E@s�a�������8�R�Ie"*%J�@C q�3�3���	�A@9e	���G�y���uϧ��O�a֓�E㔁~���Z���@E��1M��r����f,qÈܻ^���z)NI��-�G>�X���5�.�N��
Y�;ʲf,��ebҝ������o%k0�z�m��h9kY��$��)��<��kȗ9�E��la��;�W7�39l�r����n��FyJ���!KH��QZB���
-K�UO���Lp>C9����rA`P2�d�f�k��2�x��H��
��LX��SP�+d��Q��-Q\�1}&��\*��
�_�gY���3�,��W�� �{�ׯF���9�[��vH�g���傂���Hz9��h2G4>��¦XZȁD!�ː̊0"rG`ϊL��*���j���f�wp����=�;2;����� 7�ކ:P2e�_�K�%
�;�d6��t��&��u�3�O�U�h��< ώN��RC����S[�Dk_�f�x��>��LV��Q-�9�g��gO�0���� �J��-���[r+oW�,�4��M��K,1*�Pz�/VȬ����������:���W-��e"N����O��T��
��W��d��@~��|��i[��F]gD��_�ж��\���a�BT�(bK�O1���*���Ϣ�P��+.�N�-�|��@oI�g4�������k�����_�I�iD���Y����pk0l��z�	s�L@Il@�0@���a��e�
[6Y+�"P�58c���� �v�6�Uǩ�+�h<6!6˞��oB�V$q�$��SԌ�u
5C���H|
v2��H�s�A���4�m�"�V����6�YJ�izo�x�tSj��	�C`�u&Ε}
л�Ģ��Έ�թP�Y@b��?#z/{2�M�-�@��/�@��&HLߪnA6���
7Y���g��_&h1��I5��_@���z4e�qw/��_ϱ;��P�@7
����zp�fo��?M�$Ќ�?��n=�}��*k�3Q�V���x�*��=QԄ[VJ�*��tu^��+%�L&8�-�1'p�g�5v�sh��e+}	�v�W�ӝ�dKIu�rC�w��&�Z�m�;�N��k����pmpLK{�j�8f��=Q�@��Ī;�rPm~K��$��V:����L;�Y[��ڤ�#��>����<`׸�ڵ���e�X�#�ގ���(�etN!
	9�fY��MP��:��1�\�w��~���0�y��i���
�F��sب��|��g���7v ��?�֘
˺>e�r4IXˬ~���[tZ�U�L���N�I�rE[ctƁ������+	iB9�9�?
D�w&ho�|U.W�ov:
ʅ��3wIf_)w��U�����n�n<<T��׌??6�C�&���
�Fӎ֌��i�(SI>�A��:���F�^��Hk`�;�#L�����/f�wg�w
��w���:��s�{y`4�a�y�ѥ���#&����ξ�z��X;D��3��:��-/w�e�[[lΖX�W����z�hp�����Z�;��ʻٿ:ݻ��䪻fPI}��܈��ك��ֲ��#�����k�VND���޷�)Z�ؔ�S��C��D^�"��|��.���^�Y&��w�^����^�@_��۽��z�:A��2�P+��\Fs-����C��DA�>�N�zo��ǜem��gnŰҊ7�E'�!�r� 6�V3ص/�͡��l�ئ0���L�]
ͫ�4m���ʓ�=�`˪r,#aD|>e����盶k5�]�m�R襹�˵���*%2�ߜ�U�X�?��i�xh+⊦�2Q0*�D�8p֕q4�xR]�mt�#t���d��V3R�f���Q��t�D9�	I(�#ybs�T�2�"�	]�g=�<t�ɜC�T�p���% Li A傕��4����-��N$%�ש3�P����Z�n����J:�늌N�]�d�
�J45|��VU�*�{M�Δ꺦��biw[��g
�[����#�=m(�𹡧��/M�_�NKs�q�O�O��SߨrB�c[ծ���|9bP��車��m�V��D#�9�W-��s�d�
2D�{`z�\�4lmڒ�X)��\ZJ����Tl`C1��W–vi�"P�ے��b%����Ql�%��Z��ے�����3�d3`�u�]}t�+�ũc#(��|��:��UCs�����"Kz�?=E����/��J�=%��Xms�6��_hI�$Jr���T��عi�M�q�d2"!5	�Ж���� E���y�\,�
��gI��^�	�.F��/d-ߐ%~�\l�B�q<���ǰ����r�ǿ�`rB��<[�D�P��Z�<�$բ�;��,�H�URN��@�/>�n.���}�}�����pR-��0�����}w�a��,�C/���N�����腕���C�Qu�I]�w�VTAT)XM�]�R�0K��LC�j���,��sx9�b�?0�o��hQ�DQ������!ͻ�"����>�N,}��kM_���=V�X�[��n>sR�涝هhr���ك
�ҙ"y�aE���~B?J���k��xɥ2V?s.R"����cDْ�&޺R<�aM�����3�<��,T��?��3XCӔ�z��)PK�S��qF�UIu`��%�J�	��ljQ�h��п�@�CR�%\0"���*ƃ��rY��|�"+<�>�g��&0�.�e�]{H����͉}�-��������Ox��%��y;�'TA\!G�~���>#�o����U��3Ͳ~���Ag�a���`=U�}�l
ㄊ$#��z5��e�r`��M�'��י`�kW��7{�a���*�coj]�so8�f=�kV�g�l*�<K��3;��C|.�x�B���si��V� �^y�b�x����
e)e['��IXI��@��[M�Œ*E���!-�O����,Z\@�M�&�~ҕ-hJ��I�*I�uGt�`�����B����mU���+:���f�����~rHV
'�N]F��V��-D�<C��hxJb�n�A�)��?���P3G1l�~��qù
��4�q[��N��SoE��Ž-�',����.�
�A�ozW\߃�wV����w�
uJ��d����w���B��,���4/u�NoL^�� �
���I�2��(���a����8���|�k)X�Y����V6��p�U~�ШxW�K�
��{ﹰ�t��S��4�Ȧr�5r���Ou��g�=�%���J��Έ
�l�z{}u�s��h�$ω���4&1�:?M��K����(B��&8��NT�l����T��Atj	�o�܊�J5����N8QU5�Ђ\b��~�t�G�y	X�u��"��vEsГ�R�D�e���`Xu*A*��YJ/[R2h��0�KP�n;��?����҇G���q�ؗڳ@.b7���J�W}�xE�.X��F��P�[Nh����(� 94�|��n���)Q�F�j���udA� ��M�E+�^�۽4��$�׮T�����
�Fs����7��ݪ�+�yin��d��G��3��c����득t�r��
��¶�*D(x�N	��ʣ�:�����^`Sӳp<��^��=kD ��$/EḆ�6�˅f�G��T{>z\qb��3�M�s
�w�:����
s���X5-�̴B_Vc
��7=�Vb�b��;�C[w��'m���ة-�6�9.�k�"�'��)nr
W��g�ī��:�J��G��]Pa�c}���*�PP�P���FG�D�	u�f+���=��A6����`Һ����iw�6��S�S����ccG
�,i�a']_��9)s����:R��0��I�����4
{�4y���ƴI�Z���h۩��(�k�~s��R
�uJ�ӗK��5�o
f4�B��W?�w��o_�l�
���$�Axor�lg�PgR+�����qح����v����w��!-�`�+�����M�B�:�Ф��$�5�a,)�4���(a|�C�����,`�^�3���ͱ`���
5=�{���Դ�d;ips;5�O:yx�/�Zh:�(xN%�t�5�r�O�2h�iF����H�=5��T�D��v9�œN#�'n&
�sH�s��a�n΁ز���Y�Zyv7t7[����
�Xݦ����k���ޯj�8�%:z5l�wY9�(n����$��v��eT.!5}��ޝ�K3ۿ{sҴgE16�c�3HXu3�%:YКGs��WTKV��ش�#�7�6�jj�<��t��;j�oWǫ=JdY�xW)��yГE���?����)�`�	PM�d�7xB�}�q�Uv�q�|�/��Ñ\��T�n�6��+���cx�@/	����E�X{OEᥤ�Ŕ&r����wH���&�"K�f�����䃒j����{+7����_��7XVs��[�0��	�iC��.��R�,:�;,�dYI�)�bF�=���]2
1����B�ֆ� (�����n�fIU�gҌ�|��?.�3z�PVa��BBpH`� ڲB�G�_�?}^�IXMV�
�X��
o��>=.??�~YF�ע���b�=�ă�.��
ɼ*ԝ�,�P΀k��N�Q����B��<꿱B�T7�.����d8N�6�?Ͳ���U�T���:{r�M���C�Ѕo�;i,0	����E�vQK�{�	|K�}q�$�k��c��!�IW+�wA	�d]p�� ��x��5���P�Q�q'T�_�,�o׊�[�)uC���1n�`^{
�j�f�UBo�L�0J.��*B����K�P��r�:'s�$�yz��'�lU�[���4I�,y�x�a�V��J��2��[AE��ٞ+ԝ2Y�Z�/}�kѨ�TQJ�Iك^�H�	/�Wĺ��/XC�E��L�E�~�U��b�y�G�8����(�?��yf3AHv�L	缇֍.�&�GУ��lb���n�-��c�wH�@
\{}q�%�oA�w�d���^��*>��+u2O�����V+�r�<���,Q~j����W3���y���G�Ō㱿��{�Ɲ,�>�z��W �gȕf��Hd�����\�'��dr���i?}�!��p�q�))�y0�m��8g��5�4�p�#��a��:���U�����f^�%m���Q�s�k��#H���~�S�[V���+u�զ^�gv�1iW�Lt���M�/�p���V]o�6}篸p��	")�З�	�8��K��}
���-6����-�߽���(����s�:t��'N�J��(&�l*����]����w0���nr��2_1q0�]f*�Xk�*�X�0
�4S�"�S�b��b
u��#���3����oX��D�\yEe�4\*��q�L��br~y}�{�i%&/5:��dK˻�p�e����o&�p��k��*zTxu��r����˴��p.Re[,JC��,)xiE)+ҁA�%�)�5`�د�Y�LS�)����>��J��]���SOL�EB�!��0�m��YLP�
��"�j��le�U�h��hS=3�-JU�֦7z���,*������g�=�dZ�-�S��J�'�H��~A�`�H="�G��I�����U��:ţ�k��?D��X�T�@�G��hB�&= ��ڠ�9���fܓ�4�	��ĩ�[���Y�����@*��"X��ٌ���5�w�=[�ĭc�ylZ6Į�߶HT�h�J
4.���5K���@m-��m�?�7������R�c�M�h�3Z�L9��Lp���.?"����+ES��U��nH��9�_������[���ҏyHE��C�-1���\g���z���jW�s�9Y��TJ	�~4�
	��,�ZV��,m���)4h���r����0Ņ���X�b]c� �פ����4�%z!I���u�	B���8I(@+�o���S63�N�8�.��Z��<h��H2�������B�O���\��2�Pɩ�p���!5����].�;`�]ҥ%��T��j��*ڥ'Txuހ(�e��Q��g#�!H���$w�^k��B��w��^��;|l#�N�l��KK���
r֯Im�`[�'�m՘8�s
醡#W���NJ����2��n[�C!&[x�3�	�ˈ_������񭕘�6{�4sš��.ž��p/��/Ah��k����8|�x������'���%���ٳ�o��i'Tl���R����H�ߜ{?�|�v���
=�u�ps��s({×>�~���,+�+�׭�F�/n���	��Z[��8~�W���TC/6��:���l�I����KF�4m[.[n�I��#��l0ݩ��R�X�w�sՑ���e�g���
h�{�-W�f
ZF���no�Ã����~(V�t��6���i@�'j�ي`r��C6�]{s
a@-]aB������bٰ�8
DTVBx�FË��K&V�\g��qx?M�x���Ϧ�B@����;/�<�0�LM�
��C��VT(D��f��ϳ�^��bA��f�o�/QyT<�+a�*1x��ѐ�8�\��IJ�`�%6�/}�����h��U.T1�/7C���U&�E� ���>%�l*U/E3ᅋ�]%�I�������:\��M\��;�p���ſf�>"���Z��n�h+f���#���S7i
:��
�ۄ���?�P��q��R�ilo���_S�u<�هL���`�[��싄K�?����k�ӟ�O�����um�E�>�T�������&j/Ã�&��W;Ě
?%X�v�� �`N�Oa��g���*�	F��Mg��l2�Ifͫ�ي��	͕b�za���$2 �0F�=��O��m��:(��H���.ٓT��4^���2�$7�Lj�*���F�5�4ܯ��;�uXcmSe�⥑��k)]����[7W�V�~�G�}Q~|�p�����8f��d�i�\H��7��T��a��@��ckf�UZ7�szqE�f���e���&�րj6J�U�␮��tдݼ5�dהۑ�f�>�h6�W7N�+9�y3
l-	�,�ʅ]��]����̿^��n��e=wTqn[|�UWy9��_	��i9��ﵦa�9�Zt5KMNl1�+���qz O���F,�XV8k�U.�A�8�m��6�<���|��dқ+�.���d#�'u���#P�;��k�?�C�|��]sa��
LH����z���t���ш˜��{�G��3B�2ϰ�0w�\&����5�?2�=���'
�����_!y��
�wzqI�Y�����Rʣ���'���vi!!�ۡ8,$�B2��=b2����<�B+��Iew�������~��I8T�������R�k�ځ[t����(u<���BZ�i�
�u\F��\j�|}\L�1�\1�up�`7�N��O�ɬ?��h<@�����S菆����x���`2b�V}���֐���*�b�)Lɂ�� �����z�7k�Z�Z�O*�f�D��'�op���&;(y�{!R�eHd�M�ʥ��\�}��D��/@B�~��'��Ô�V�<q�k����~�������Xjyb����5�;j���� �.\ Q\k����R'�tBI�Mjga!H��(��U]�_T]�r�Mg���əhky(����v7��p�LmN�dԯz��n�?�:4s!��D0R�����L�j�D�ur*�i+�!)1bQ��N��	l�H`���/�~��΋v�
̙��2r�-�����lw��T6\�ލ�K���t1-D��8�Lq�*Msp�ק�t��f��q�O����*�su�>W�>�">�'�s���i�9i��N�O���N'�4���N>����T��6�^_������k����ڸyu�֩�#8�d�N^��>
�����!#3ts[8t[,K�8rF���C�"?�J镥��Q�[L��,���(��]�"?��֫S<t��u���W��O߻>E~ꜭ�Uq�!_��q�@Z�4S���tw�[bO����{�b�E��{DħK�E�i���s*֔�jL�9�bR\�Z�i_��E�*�q�Kʂh�ƕ&.�t ��W>w(*TO�n��ެ����ZҼ��΢�׋��*j���=l��+��̵9�-D܋N�zp�YwǷ�b��ǿ3�Y؟h�^"/ݕ�Dn;;}��6y;��#��C�{�<����NdFr�:Bpgw�1>1r��gYH� ��xWL�{�e��9���)���v�(m��{ˉ���u+;Г����hi�<[ɱ�3�
�%��-���1��p�e���N��g�R��(E�{&�ER��E����e.tބ��؟�m��Y$�I�Zw�G-�r'�"��	�%z�C��(ob�|�ib������A�$�s(�3&�����:�^R6��P{�˵�����h"�̺������}�}�6�7��6�ׇ~���RپѴ���ek�Z��Zռ7���L����N`��gC�
1'��U]o�8|ׯX������(��p�/h�N���������E
䪶Z�wIIm�u��,�Z�����8�K���ha���MNp�>��h|��ڨ�@��|Ĕ`^Qn��a��z�O���*�R�!��U
	B�0�JgC��opT+��ֆ߂�('*��aِ�Iy����\..��1�(�JMQ*$�f
��h����[����}05��L*��u�� ��j���|�n�A/��t
ې��ʘ
7/\T
ȼ+-���l�P΀���L��e���B��u��
M���z��X����x
����)�I�Wn-YHD�+�t�G|��/�M�+���'31\Rρ6	�{Ѭ�t�i����Y����I�O��}�{�g
��P�����l%-$I�%�3���R���*PS�#�6�z硷9Z��^Y����.��G�h/���(�6B� U�9t�Gכ}���S���ښ"��k�����W��B�f.��1+r�;|���O6�ʝ��~��Q��̽�c��j����ZR�S�ݘĐ��l�Nh7�'�3.l1�OR����Zo��BI��p�tW���U)w�`>�D��f���_�%�s~��z���ʜ��S8=+w�nh�>�<8�1�R�-E���9��8Ȼ���A�qC=٧>9}�!��a�E��}��#�'�O&��yi<{�|��<~���ğ�}�ڵ<�C��'�C��=��"2:0�G��6z ,���;~nml1��d	)�u�	��6�݇FQj��S�c2��P��ٌ	_'|����C&�n�fM��pd`��I
Kh��BC�$Y�
op#�$��^q���Ÿ�S>Uu�ɋasp�͢�H��35���r����vr��,����G*�3��,r����X�[�\�
��M����oo�0��S�x�nj���6�(e�$4&V^3'�5�$�lg[@|w�N�%���F��������٫L�XdU�Z�R���l��Zeu�������ueS�
�u���7�Ѡ�DŽ�m*
�*A�E
��j�*�	TEB2�$_߼c���
w�fAX�Z[�A�$�;i�*�R.7W7�>Z�����"���@4X>m�����O7���*��Qe�TY�
����W�O��?o;��"���"��)����J�}2�J+ek4)2��T�[��$�JU�.�;�wZv���j��q��cv�h�6�E�U�ND"��%
M1��R�
��p�'Q.��@�,p����4�qe�ʧ��*��g��g�`�ݦ���P
���(�AM��
<Hj4�I�,��:�r!��;��	�P�q�)jd�W���3�Vi]��$ނ����qi$U�13l2�)�ߨb%�f_&0�H��j���M�#�y���a�y@߶��KD���u�eA�Gg���$R
*�98�[����&��R��/?�`O�S��㴉���O�%�"O#�.Q�C��@8qS�����(m�^8��<)���)�0/�/���8l���ly4��??!�(t�>�	_P�[2u)�]1"]�:��a�'��.�H�C��^��IC��p�yk�tv��^���=�z����YOzYO:�>�^Z�~˶��]u��Cxg��Μ��}ľ �����ɗ�j�EМ6�g�;�8�k�^]㑟M`D��קt�x6���A�S	��d��,��r*EP�/��rw��W�o�6~�_q�Ü��3Ya5�7[�I����J:[l(R��Z�}GJjjGt��>��;~���y�����TV�|�8���?8�y�p�D�b������ia�k�B��א��ƾ7O��H�)+AIQB�Ph���1�1�=hS
��V�/1&��zY�/�I���wu9������ڸ�"�f
�Fj�J����~�����0R��<,�ST��
;��n��w���M��"溊E4�%��Ԓ6ϴ��܁YV�`��D�Lh��w��I`q�
W�	��m�_�L�=����/��.1���kE;6	�dl���BR�b�Zv=ae]JU�3���'V>\�������]UU�ϢB�v��2E�g��<�)3���X<&%�"��A�p�V���IJ����+e\RQ��4�$�%�c��6�*�=�/O3���;��P9���5�� "~I;�S�*�Q`�%=R�2̫}��D�YR��I�oI�;�ߣ���K|*�z���;A�վ�
�J�7�5ϿC*����rY�J�Դ!$�2*��^�o��W):dy���6��:l�6�	�Xp��VÍ�2�x��1T�6�5maD,�B�4R)��7c������`)�:w���1t���fRw�Q�E@������i�J�D�rB%7�	Ψe�#�����!�L�
��X���&�mm͚;�J�$gTV%���?�֘Қ�X��m��'3�NNr7�z�#撂9��R���Y�B�:�j,DA�����E��R��X��H�CERK�?x�Kr�MTDyW���g���}�ۦ��t{�u�I���6�S&1��ڢWu�jz��V�(.DL��f���&�$��'8oa�g������ڽ%ĊR}�|!�j	�c�AC��
�3�u�}V�=<�
M%��`0��Ac[��q���&�`]"�r]�?cꖈ*M�>�m�v��6��i�x'������6��U���-�㷻ۀ������6��m��+�-��a�S�3�~�I��c�agu�x�×D�t��
�g!��+�`���Y���nς��^���&�V<�c���~������-h;_��]?3t��4�	�G4o���W*��]����keԄ|׫�����}�OM�������� ��K:o��e����4�hp�.����%� ����T���ks�6���Wp��Ll�~�ҝM��ngv�L�~��j��%�$��t��$(��D9	��9�!	������\-]X��Ň��[�����UG����}ڬ��a�}�m~
�н8�mv���j�
��ۅ}������s�{s�6�ձ��{��=�}�携��o���
hwq�Z;s��;�oon�Y�vy�{���������>^�<�r���*B��n;��5��/��ϟ��Ï?5;t��a���S��׮������w���t��υ_�s_)
��k��M�������>+�Y��D�D��~����æ3��x�<,7k��T��3��������<������~�Ixq}]���6��J��/�׿�_,F������.�6�_v`J�>�>��ޯ���_.޹��as5�?.��].���Λ��ۺ���]w�o�l�Li�6엷���j��g����]Isʧp)K}��ۡ�j�F�jwk�v��7ֺ��A�22'����K�����^�|�jQ;���%1����t��H��tV���8�'ԛ�=o���Ǜz|VO=�e�J�=ǩ&��'�z��@�z'�N��qR4�7�U4ˡ��^+Qͣ����Ln&ATZc�l�Ҷ(��"iR�k2�dD��Z�����5G?9N����E�R!�hiʶ挥���g��^���J�Z����؊�~+���V�
_T�,��*Ӕ�3����X��I��*��s�T�3���ө�[K�y#J#��MU9�:��1�V�?�.��$_)�O�otAYRQ>\�~�s%bN�_&��J�%K�Q:�|[��)���{�J4�i,C�-��s��$��r��Ga�霰��?���7�셯��O����3�8��o���_Q�i�Ҷ(�=;{՛�Du�?-Q��󢣭�m6�E��OKQ���>?���i��\���6��o��}XM��fv0wx�̏����4Ƨv�=����=Dm������%�����xN9ZT�7�i�v�SMy�}H$�XkWC�DUk�C���aWk7%Aʨj���)P
``��5bH�@h����r����A�0He�GU�T��
d#D�*F:��Y��8A�@��+lE}�9.�'���L�1�
d7�B��*p�����'C���bh
�1p�q��:��K�_�tU^ԉ<րө+H��z�@����ZH�X&�[�F�#�iQ��@�1
$�EZ
i �ca�խ^���`�Z��C:ic��kb(���s3���2&1q�a�����k�9���cA�qy��j���+@sɝ��r�2]�Y̆1X$��r����Ӌ�9���1�F�q�4'Ҡ9.�ũ�f�"�T�g��i��)�g��H3����/o7P.*�i���:�̴R�C��(oH���p��丸֡Ek�C�#ǖ7�\T3mZB9/Ѩc�e@�6�\�*C��!���wN���~rj��͔�X�'�	�^�4�����}��t�k���ș��	r)���r�#�rG:mi\�E�U ���R��C��RLg����\�i�
@vy&
��W�n2�N�T1�L�ȩ Z�!��r�_�;�����U.Di2�f�<p�=�f�N��h�3X	ҊiA<�`�85:�L���3,�
�<��`RZ?�A5`.���JM _�ПsPȱy.�!��9��I��*�f
����::�Ce�`#���B���Q�U�@����!Z�Y�q�.1�AY�o���U�F����ɹX��ŪM_�y� J$V��x��Y���8���^�q:k�⨳�U���U���94��JU��Ҳ>Ȓ�E(�
��,�2�PG��w/��{Z��(8�}H��:1:
�8Z�u��X��Y����SA��Gj��3�l7;]ܝT�N��R�d��1С2�`�ے�l,���8`������	���)�0��<��8��[G��wuD&4��R4��S�6��g.G���sVg.��z����9��9.�n��
�qV�Ή�r
(�(3s��5����q�RQ:��xsUp�,�s�ΨH7�9*Ĺ5�a�fb|�9�)bDt���M�J�ܗ�m�L��ˌ.����� BЮ
�RgR�*[,`^C�罣�
�pi�@냄��h�U �����UؑK9\dّK��Z�ߟ�i�:�5���XT' �4I�챎v���觞�?
�=�5R�S-�B��-@ʞq\-Z�-;��6��o�^M7��8]ƴ�'��f��6��zѰ#*#n�n�yM>��ƽך��Sc�D���m�m�.f��8e�!]!�Dm@�ԉ����L�h��>�(#Y'��h�4#�(�0�E��/[xE�-�Hə���˘��7;��
��4Lzb.�����:�Z���d�����$b�mF�B-!��*�Dd9ۈ�r��h�5q�DF�=n&f��X�dJj�Vq[��î�#�mС�/��w福;ι�5���p:3;�J�1��
�(JB�8(��t&u�I���8�ųq�3�H���X$:(4�L���B��<�T=q�����eU�?�n���e�r�:3Og�auf�X��%19$�E�ihޟ�5Ƒ+Ax�3�L�3��֦�N�ӕ���N��=Ihm�|���E�
bx�
��^��
���{%U ���������S`a�O����G�T��S4����S:�K�^�YN]�ʻ6��lp�M��Bd�t�}�`�4�3��I�l��g�L��k'J“?n��'*��J&YlS�{AI��=�v���<������Ÿ�n��L7�
;k�o����7}z��/_�����xۡk|�<0{cW��C�����[����.�>�؇��O��8{���-�0J���q��®������Y�J�_g>��|�2	_����w7���/����(��_���������M�"E��S���:,^�Z\�������f�
k��n��/Ǿ��Ð�W��Q|*��1��Vmo�6��_qh>85")}[�8�:��K��0��BIg��D
$�D(��w��X���3[��yx�p<���y�B�7�e�x�8�_���W�`�!�e^�`��
���ɤ�L�����&��ȸ�X&�A����Ҙ@%�1�����s�vmXJ�f�̘�$�f� �&����������<0ƅˢ�� h4 ����ܲ�>���~��
Ka�*�B�:T؊:�z��v�����\$\7X����?�Li�L{%Sn1���6єH�k	���#�	`I�
���p1��*&��ͧ��˅��^8��EK%��Q��}�� JK���u�q�xc�Kd��ܣ_q�y`eI�2"!�/JI{AO��oD��$����F�&+�߽�����r��Fj���h���;�+mdọ���6R���;�	~�G�p�>P����Di��G�)
T<�;�8�r�ԲR�9(����?L�փM��g;��������x�;ە~\�~�x�T�|0M�\���+T.V�n��.&@�sg�f�BFgϞu�*H��u!�4�
e�^���\��2&Ra�z��
�x���m���Ն�i�����]���7�r����6UV�����`4�X��1��"�	��';�6��8���<{=GTJ>q+YI�	b�K*)���1��x�$�*U����iD��->��F��B*�L��r  .�J����o����՚���Nk���fC�%�>{=�.���v��m� �o�ST:r8s����msD����O�`�>�-�
��g�pS�ͦR���a u�G�y�Ǝ�ݺSԣ�%�����6�~��CdG�M�T�L�f��$��}x9��rZ����#�k�=��rٳ�3��&%Ql������oo�؇�5�uB��vr��B�P��r����,f�~lz)�l������+p�V�|
V�����%��mu���u�e���m9Nõ�z�uMJ@��Դ����͏�`D9����8h"��vA�,	�E��2�'��X��%2�02����U]o�:}�� ��.���0 i�eY�V`h�5{^e���ɖ!�I�b�}�l7]�ދ��MR�p�S2��b0�emd�98N^����k�g7Z�9�1���e�XS���[0h�,Q�`�I�9�A����(�*�q����V]nXh:�̹rEe����eṲ�>_�.�n/�[;+�y��!Xt��[X>m���ӯ�O�_nLtጌ+���Q�`������>��BH��"�>j�R��%7>Y�Jʎh"�+��V�wx\�.��˛�����=��t~q5���aD��JS�.��\ӹ�$\ �1uNh���V�K�+�u�y<B3�t�v�����Ҟ'�u:��"Q���#�����Ħ��J!�r�E@t�(����$�y%�_��ЕsY��ʱp'$��A��	���`��y��Vu,��x��.�� !~I;MI�j	G�>C�d�|it
�u��*��ȿ�<EڌmՖe.W��9�@��?���3E��˂��d���Z(\��S-�a�(�J�}#ѭI eV�\�W��7?4����yxiN,�4=��tM���m�
6�8�>:j�b-jx�޵}�T"8\� �4�9�s����ۭ��cx��\�望Tc����"��W̓�i&�a��q�25X��G/Z0�/�%�*�44�a�$H�4�O��
7Mx�t��X���!��p���ɿ���$��Q.�1�S&i�����G��^{'d^I�22�F�}h+ڐ�r�}ѧ�/��PIN޺��/�Z�i�<<_�վj���G�衛M����I��_�}�]���i��f���h���cZ��^b�,3"���h.o���%-�h�=��[���R��پ�
u[�=�n��E;��n��B���=��	���zLwT��U�_,#Ԍ�b!f�T�1VSy��/0d
�#	��VmO9���b.�)��]h�{Y����GQI?U�Żv�.^۲�$Q���$�w�};�H�?3�̋�D�LZ��^>/�����g��n�XU��Q_Y��v�26�!���`�e��$���B�(���@I���Am�ZR�q���X�:�0S���9���n�&s��:O�J�_�/�o/�tMX���`��e�HV�6	�ŧ��>�>X(��k�A�zTxu��z����I=�\Pn[,�!_�oJ�1yb#ML�̳ҁ��F"��
l�7�;D��;�$pu��?7D�Dws1���4�Ei�b�� ��h�Y>�Y�=k��y�(��"�7'HQښ�V�"��)ɤ����Ub?�nKb0Ӧ�Ka��$��3�"	NɩϦob}bܱ
8&SM43����r1�*t�E�Ϩ��SUܠ�5"����� T�5e���;iUvp6J�Q���
�"Y;ks�BkC�%ЗҾB��+��Fik��O�:b��9���ba�>J*:�Uk��b�lɶ�9e��'�8�˦��k"�UǶ&I��]����؄WA�e��OB�B	e��R6#�p1AžӺ�V�ߺ\��^����3����3mq�N:�=��ǘF#�u��}�'{���:������8�`d��*@�U�P��I���6���:ʹ�Z�!.����=��!��E/��p�ʐ������PyN��ݣ�p�ŸpJFhh�+��;�8�X�Np�2x��Iq�J�%�*��2�㣣C�cK�6s�C����L�]����U���7�_����v��\�˖��
kSnm�lz��k��n�Ra��_���ݗd�|��d�v���%���/º:>!���xU�I�Q2�x���ހ5d.��Y��8D�
�D2�3;��H�[,̫٣O��ƍ�ag��6%iT�YdWd�L�D���׭u��q���Y��a��tOr�Dv�Sz˵o�-�i�Hr�wf�-
Ơ��r�n��<	
#���p�I�ݪ�%�	��8�q�ʡG�{�����░�]�qF����+�lz����{��
���Cn
��å��?�[��I:.��{k��4���ǎh���n�8����ji}ڃ�q]c7�nj4�UQl)��ؕDA��E�}�:8r� ��m� �H��?��ؿ� בd"т�TZdr�>�~��P�FEE,2�d�`��	U�=XF��5dB��^p�lC��). ��$* �k�!O8b"�޽m�H@mv
g���|?��z{i�<��Y�o�֞y0�[L�i$�-��ʭ�lpp�q��w/�JL&��<QIC������7o?n��j���X(CP��J�q�T��f�1�J
�����V��|6
h�si�Jh7�F�}Fs�w��v}�-#>�1�Q#2�4.��'3�iE3�?�,D#�p8x��a%�e�N�d*��>�/y���>!w!�p�e�5�
]*T̺����VD$b|�>e�&�=�~C��Ac��LJPAY
5�ޔ0�	�M�vV��L;+p*v$�)������`�6*��]�C8X��ԗ��td¢���N	ĵZմ�\-�g៲�A.�ET�琎U��h^v���������皌^�3����XW�ir�E����%�P��HfX��|�����w��ᩍe�}��y{y�j��f����T|6w�1�#`cv	��,8�+�[�����ͻ��'q�0�V?��Yk�)DP1� R�yk&U�<T3LD4%�����E�������u��A%ckሧ��ѹ�;{|.�gw��\�������l۩��<]�
��ɑ��:��{��9�ǎ�{�Ȟ8��������_��<Ŧ��^�+,�bc/��Z�/U{%Dк	mLk_j�����,TX
���2�z�NA߽n}��z��_�z�������������������������D�K]�O�v��.��˜43~Z��K�[��}�c=J��ͻ�9���BA��na�
e�{GV��������n���]O�0���+�vӂ��&��0�thC���r=��m��8�F���݄v@B[*Uiz|�s��v��P�GIѦ4+�hr��X���eBr���&i���1��r�H�@���ÈA@1��@Ӹ�@��"�B�ɳ��x�jÂ�( ���gǦ���ˈ��oD�u1=��97�#Wm4�b�	0.��Re�m'��W�7��My�_�j�*4�N�.��g��Zz*��[i	�~P��i�U1�J%Ye�0Ō+|u�)���h�b���/s��-��M��s՘vhjZ�dT4�1�zp}���X�h��=�_?�<��a��d�Da$�a/�����N��q��j!|�NVK"b�_6C_dT<i�7���a�G炜)C�E���>}��e8C�:?
t���H޵�VO�z`�+���J)M�f���1���T�p�R5rWd$���2�	JMqo^�b�p��w���7�\�;r;�>șz����|�����,p�G�� _��k�P%���^�6?�"�{?�iL����r��6_�(�6Y��e�J�	���mCq�
nG��]Y��5�ޟe��2hi���&�$̰
fXüW�G-~��k;y5P ��`ˎ��H�Ʃv�H�ԑDr?�Ժ����v3��oU��^��?��LP@�a���T#���sn([�A���>�RyB��a}b�wxߍ��x7��ӄW/;ݎ�wz�o@"^VGeG�c	I��
���O�(��-�
&F���y�I�
��XQS�F~ׯ�IL�J����tBڒa��Ч�$��#ҝFw¸�{�N�[(�"����owOw�ww�w	Q(t�2[�|k�	_C��ۇi�p!�e�9\��
C
G��e�<8J��
rT�_c�9Ә+e���%H�,!@(FP���h
�~��^&Un�I��N�u6�L�͹�����?=�O�=}�-�P�Y�A�9V²i�6��L��|9iJ�szթ�Bc�������/�:��hqU�"�%�.��3�d,�Ɍ*U0�*�IH�(	��w-�	`Q�5��%prQ�?ϙ�-�]M�ϧ���;��3]f�Vg1˒P�
�kڔ�0�bn�1�9��P�LD,����Z��b��-G�T�#��C�z��κ�b�&?���uL���8�j�c�E�U�c1O���S��j!R�����HH�Y��Ҝ��*�v.b,��d��>�d㏟��P"M��L-wA0P�u!�J�~�Д�3�:<�$��yu1��_�*��I��Tg��;��ssH-��Q��>ߍh�0�e�.6��"��:���[0��$�LK�uˡ���u�+c��;�3����j��l�[Z\7c�eA�O�p�pH�����Ky�B��r����P.m)|6�[�.0��uV�RjӗC���JpJ�η#�X��
�Ia�I9�0e>��H�?)�T���MF"�F����X!�xC}�f��i����<�	��vI�\P��G^�\�kI
�4���k�g�\!�Q�b�	he�$���(�[�6���Z�܇��K���`�;�e�6i�Qǚ�f�I8�^��݌6-��0��nwe��1�b�*�^w0�t́67�����U؆�Tt�^��A#����F���D�>��G3�id0xӖA����g�L`{	bd�Y�d�'�72��oe��N�%�e}���t��:���^�Ý�Ɠ+�k;��[�2�F�7x�z������>f!��Q�E_b��
d��yKi�5EQ�(ѽg�B�.Y�ٸ�dͯ�ٞ͝�4]�q�!!��7�#l;���y�|Q��s���[�8��ԡ�q��:r��Gw�#]��ӱvs����-p�y=r"4X�3������$ڹ�e~� r���2���<ks�ȑ��+�vP	R���e9�emVW����R.�	Cr��������=`�/���$�-��������{���f�z�|���t&I': OG?��%�<Y�4'�9��F��(��" /������T��Ɓw=c�D<�$
��gɒ�))�I�ŀFʗW���˄C�L8<%��fR·��\
�LΊq�x�����۫�@�J�V��yB%%�J�'$�l)��]�x��Ż��#�ɜ�Ya�,V������w�/�_[ԧ(��	��0^��r>�͇›��"�R1���&�Q�յ�$�H�L2��	9����a&w������kŘ���t΁�v���i�Phʲ��{v�cwd��t7X��>`3�&��y}0�7��9)�T�i6�>\s�H6;(Z,�T�"�ʾ�Ө��3�Iї.@>���y8�y��~6R�"I8�	����4�����hj��d1��R6xD�N�!4�)P$ЗZ��9���[��r��<�9.c����3&�E�
%:��00=�i�&<�����.a�|̩�|��[��n��Oi�#��=$d˦��;�
у��Ocv�}��!X�<	�C�%,��q£���e�X�<{v
��3I郧}s�.���h�Hz+����4�>�~V2ѠCX|�p,�����bW�M,t��o� H�� �����kB'򫎼&
d�)�Y���b:	�D��5�۴���!��ew�1��� �=zD��.pg��'	_�
���B2*�ߤ�e�1�܄�,A�\�
��ܒ|%���r6W�+%!���uݕ7�jl��a�y�cxBd��n���N�Z�濒ѣ�:�F��<��\Z\�� ��plOQ���Z>3&�*�}���x�����/w-�c
��c�H�6Q�R
	YM �Ia��F?kq�B��*���*�UnX�f)Z�J��T=��W̴�9]Ý�h\�r���6|%�V�W������%�#g:�﹍�5:�󘦜�>���Ve.L�&ww��C��5d�!��#��*d�H8�q��\b9Q!���o���c��M�3F�!��̹�kOq6$G����6�Ş�]E�	����<���3Y�m�w
O�QKb�6��n��`�P8��~����z��یb(�G�*Zh���0﬏2]b�ǁ����U@����F��]F�<�b���1+Đ<q�5�`���9�"�<L!Nç���U&���B$ԩ�'�k;�`��zW~��y�
���W|���ѽ����O�γ���h�Ővb�\�f8�a�@����ܝ�{�ߴ����OX������G�������ە����ɾ��02hg�+��hw_Q};����f)���ZUw��a(��*�]���(ARq���V��a�m9�S�D�KꉨZ%U-ӛY�S7����o�5[��M���a��¹q��ΰb[ΩD}ܮ
H�ձ���. �;k�
��+u�]�f�RY�W�[���=���2��=S��z��b�a7=�vz�b�-��$��쑘�w����O����VUq�PqQ1fQoLep4���P�x�%G��D��t�{uR��~����_J�Q�E4iu�u�<䁞���j��\��� �gPF�q��3cqL���
�NZ��N�i$U�l���=$Q
q�Pc�f"����/��>�""&�įI���mlR��MqX�%�	H�/��M��wt�PUM��Ό�UG�Ŷ�j[lj:��p��}��x�cV[Ti!$��C"��Ս�l@���5|θ�)d�b�vjdI7?;Lg4����W9l[.� �+\6�>V#\x������|J��mJ�J�1�����%/�"�Ԍ2
�"L����'��˶'
"@����[��\jDo��f_B�s&zR�Z罂:��Ҹe��_)jB-[�󮞫v� �KpB��cR�m���VІX
������������@���tMqD
7�LD�Ӧ�&L^�1�4�ۈb��V�A��h�T.h��y�-�͸�p`m�~Qc9��d�m��i^ru�CK
��<�$���M��#�vRVM1
�qN�τނ�p����6�8��fkDX&$
c啠�Y��k��Rp
�]�H����HT���ĺ(�f(	+��bq�3`��G� �s����CA��(aX>��Wp�z˗#g�Pic<���K��U�D�J'�vf!7�]Uq���o�G�Ym/�9��vm%9�U^m�8�.���l¦u�ox���P��(e�(p�ь ��=��0�Q0'�%DiK��iM$�΃˞5E�k�ʽ���o-5��~B[d��"֖f�W�l�u�zH��T�L�|�T�*�u�
a\僛|M0�U�T	B3Q䴪'���{SK�P�DzF�x
�%|�=���!��n��]�aanX���.ԛZ�n+s�9yt�2:��ȳZ��W���-���>�+�g��*��ٴ>�K����}�6����@Zk�ְ�}li����'��-���<�B��^��f�E�bs�j��%㵏�;%AS©b�Y����V?���cB`�k�̔݀%���ޖR�Y�Ҙ���[ck�������d�D�,
��̗��L����e�n� �n��V����Po��<*�V&y8�]}�XP�Q}^��A���!���K���:�x��5��ju�,�hF#+��W�|y��<�|rHJh���<�`����^�XON�������ן~z����ۋWg�/��2��\wk�W��q�j�
C|n}����R-XL�h��F�S��nhc�-j��]���ɜ�)_['l����o)�z�� ]]��/_#8��c��P:%��&�ښ��6kA�aJ����T0%g�/m���#�Q)�C�8���rb�c�(d�S7���n�Z�����.���ʃzW�O�HZ���%"�)YmSwz�6jy�0p�M��B*"��nܔk�_���TE�v�q���%��P���*�)(@�.���޾���J�%��[�����e9�U�d�߻���ÐMM�4�^��
o��̩9փ	���Ҽ�u��tF��I'[�#��cI1C���/k�t.�e��Q�f�>����cgI��.l�޳�O�S��e��a68�_OW1	ͦrO�*Ű����&�
��rhuw*��uu�>^SFh�hV�zw�t.kj�	v�u���u��?�qy�?l��
K��l�1!�ER�c��1�q}*�^B��y���k��@���?� tO����Wk]lu�u�.M�5c9{�DH<u̵(�@"��U@o��&TW,�
ZwTa��.�����������>z��ߌOM�6R�c�5��Y��5q�+(��"x:&/�m��)�b�*�y[8�j���7uG�X�|2%�ׯD��ͺKU���C�j
�UA��tXu�ԩp�=P��g|M�t���M�����m��Tq��	9����O.U,Z�~�|�*!�g�w�M��z��'T�d~�0�r�Vw�v��.�V�Fد8HNU���n�Sq,X,gPHZ���'���D��m]D�N��x���G����;M8Tb
[�5(�*˄9�ֵ�6ł�hfl�N*-�:���+�P�kd}�u7p�xo���h-uk���{rvHV�{�o��]8k�\��ײ�f��R������߁�;�/^]t2�����BT/�XE���|Ig�
�"ة,5B��̩^3'8X�������8	{�h��rpDt���3H�Y����w2�7ԑgρ�E�`~���H�����\�H�moB9�}�t]f�[���:�Q���)Q��S*{8\q躨~6A�uc��I�DXC��q�RY��R��K���t��F���D�l&��nt.�NkB�VV}�OP{��:��%�����n��Vt��r�L��>\a	�oS�;�BJhxC+����I�� �ys���
So`yY`Rl�v�ݓ��cE�Y�����Zk�Vh���5݌ص%�a�O�3���ޝ��~�����d����mթ�I[ɐš�?
��%:~�����k������OR�߭t�V_���.{�=~7Q��=�m��t�-{ߴá��nňr��1���濍��
߷��J��U�ֶF2N�W��86sn�
Ι͟�0���Uk���}S囘�>�RS�v>��3*��%q(Q��T�j����]�D)������/^ئg��DZֺ�IEOZ�`'fG��Q�k�ɩ()�|�Ŋ{FK���h�������rUi�
>!�|p����g9-t�J�Ej��&/��!H�G^k�kߴv���7������"�)�p�́[e�v�Z���~�����
+8�+ANFz�WW������=���|=��:2ۏ(/�v���S�˴�J�i��W�Ev�z}ঊ}#�M5�:�
U�:��u{꾕{
˦��C���/50�J��:iw�ȑE�n �!�o�HC~��k�k%zf�hM 8$qH����>�Aə�&�"��uu��s���Y�L�����E�ݦq��|�̊�˃82X��郹NY^��.����{��`~2ߙ�a�hm�fq��X��
V0g4�
w����.�(L�����i��)�G���4
�.������N��L��"[c����|,Y\�:�����&�f��)65������_�E�|a�=7�X��}��-�Yn�fYaR`�@-Α::�~�!�߇W�	�Y��(��o�^r�FG�X��=��c���/���t��p��$���,�3K�ͽ�"h�5L�d�/�y��:{�F��4W��%Ip��`f쫋���0˭;��cԊh��]�B�io��\^�n�xV��g7�C��k;�n���	��� �s���Fy�n9~�Kش���9{�nt:f?b�{�����\�f���	T����vn�1�0jح��pS�e����C/-�ʕ�Hi�`�ζh��5�G{g�x\�-�F��7�M�5��>C,[XȒ0�~�"��r1�\����&k0|�+1��HJ�f=�D?Q��D�Q�8�a�����{���1[5r�w����b��C�9�M�V�M��ݲ4��7�^������A�UA���m�w���h��jFŅ���\�<��8"�����-�KaH��������-���_�������9�ѱ����)�� M��;A�䆁��f����z{������C�z�l>�߄]�8��D��%��2e��<b��i�nM�9�bO&[;}.Pc雷����Wn�߉��Z)C�R)ܦ
�5����1.
>ݳ�%AxG��V�+F5*c�>�͹p�m�H�`v��|@�9�9��e�+���>��K�VB#�7���\dH M��F����͛}����-�!��)�{M���e{�l��Yʽ -���8��	��U����ϗUɤ�aNH�т.�Wg����[��o�֞�$�C��#��sun�����+����
Z��"6���v���yB`J�E,G����þ�S�E��Ibn+����b'N)ɶ�e+Dÿ/n�"oO�g(9��[>�^����Yea�Z�7tX2�Y�]
3�XY�zð����ђO��9z	�,�.BQ�b���7�b��]���>���:+���A�SC��(p�Y�;�2'�	.Tt�rN�ث�"��*�JE��^���'_�.'w�:�F�����f��b�L�pN@�� ~�vhn�����=����3	�9N!� ��,��'v{U�k_�iY���]��{�+A!��b*#���*���fA��Y[�]0UŤ���v�δcuy��]h
;q�v�N��#�����"e3 ��r�J�%����U�!6Q#�1�:��.�T2��G��WJ��,�����s����幀0:9[&�y��t�w~j���`�~`�\{a�1g��FY
�}���w��jr��,�M	mm��۠P���
Y�Vϲ��{��^��w�'+g����JRf�m&q�kC$v�s��
������܂�UQ%xD�OdЂH�@����SH�`_���;d��|��fft;�)��ʏ�&��S����U_\��6@D1"X��Y��(��v�Og�y��,���2ŀW[��8\͂0�%u
_�d�&��[Є������<�r� ��n�B��Yȋ�n��nƒ��`D�(�@�a\x�!�p�ڐ��ˇ�!x 
���
���r�9���\��B6w��M�;�]��H�ȣ����-
Gy՝�S_u��ޮm��ܽՋ�����|z?�>^�<�O�|�`�����J����Qo�d���wǏ��ᗻ��o��Ng2I��Hw��������O-0���9������������vX1"�Oo'����볁�|����oժ�x9��q��yOKW7_�A�͗!>:Җ?���Ψ���5@�$+z^�OL>	<y`.���v��� ��f���pxs
h��c뿬�:j_�k
fJ-�\!���HYޱ��"�lzǥi�g���*��daeihð ��a�U���v �A��;���������~r{z6#,�h�q�C�Y�
��X�VGx#��͝���L3<(���C�G_�Q,�����BZ
2��yX/L];�����`��t�]s��f���3�Q��;R�X%�ܬ�mJ��E'5��|���s��n�➳;�����D�S0w�o����t�~�$i�[�co�c��#�4��8�e 3f��;"8��R|�?��+V%E��
(��%�\)��W��(Ʌ:��%i<3��A��q�R}	�>�� C�~��/�1��,`�U��,���ӸH�[ qi���}��BJVV��J1#R�ƛ
w�j��k�PP��>MSwe�F�#������N�@��ٌ�|���է�P]�L����G���1X|1��8lCǕ��Iqz
$�NG���9{������fc".��oB4��O��1�u��z������-��q~3ϩ��,.R�%�4�yP���v�3Ϟ2E���0�r��Yg�A".�h��*Сyl�|��O�%w�r�9v�K�����.HCy^S��5Е��
9m�.W�'�7���7��
\�\�_���~��ٳ��B�c�
���J����vB��@�뺪�n6uFe�ѐ�Ɣx���A�ۛ����2�p`��mpZP��j��Sk�p7
��l�!���ncy�`�r�.Ok�
 �ɐ�)VW56h�+��gN-8�J��'[�8,����Y��*>4	Ru5�p-���J�,��g��˩�<֖Ew��>��(N)��Is������OiF�S��*��N/�^;f�w�	D�������������o�US)[M��<d��|6��W+[M�4�u�7�d��T��&�+�*)��'
n�MjE
����'�"V��� *O�W���xܫ6(=�H��WQ��U���uګ�Px^�R�L1�G��¸+�+�kU˹��:ҭ<�_E���w��G�%��_�Y�!b�F��q�F�	P�o�`Dn8$�B�t=�J�M��ߚ���^��X	|+�!����;���_P�د�J>~��/'���2��y�@/��ތ߃8���4U-M�������Y���܋zT�׍��J�
���wd���{wle^��9���=��T���kbe���q�<���֨r=Gmy:rD&�ۉFz���]��֟B=����ܭ�(O]�Q
q�Ϡ_�пf�U$��Y��|����2B9�畀������&46��A�n�3l��4t�
i46v�DNj��R(��UB􊐪I���e5۲��΋�����4�tj>%l1���\�4,=J��	�S��v���ŏ�i�e�2/�G��C�e��X������b���D��0>���6����'Ÿm!p���߻]�kg4����yCPQ_��5��?�H>iww�G:��\��^�}|Tކ+�����ΐ ��U$89�HA�h����1��)������$�����a�+�$���<�>��Gڐ�b�\�$E�y����
�L�A쳧Z�%�S���jA�#믦�it���e ~A�9�)޲��X�3�i�� �:U�:α���>�&�-��Q@s�R=�
iP�	[����یAN�Ei#n��F��-�-:
š�b��vR1���҉摵���bԎH.�l��8}�+	�r����s���I"�G	��
! .P�����xk,��r��lzKk�n7��*���ZL��ţ"��~�Jmmۮ���W-u���m
���7ɑE%�V��O���[��j�	�Ź��N�6�^�)�p<��U����*~��$~߀�0����J�8Bm�y��Z�K������:�_Z Wې/'�
}���Ak���X�j�N�.�dP��_�=a�mqsM�re��=��	��
����X���f�G����N��'��&e�[�$����<��\J���Ki[{�� 9�B��>�-�XX��࢈U�L�[�w��v��ֲᯧ��5�yB�}���Zq`{=��{G�����y��rl���w�D���%H�x�4���q��Q��[e;��A`�nE��������z���&�-蟷��U�nWj��6��w�n��v�C[��}&�ۉ��v=��&�w�٦J�4���4-�l4F��4�ޘ_R�(���O+�͌K�å�6x����CZg�w�bu�tо$,lR}��FQ�ny����Bo�#�/����n���W"PD��b�MQ����9��\a'w	D�P$�'�-	"��*��;�}��!;}E�����ٙ�Yi�B�����ѽ�B���/ө�ҧ�um�Hbu�uY���]Iۛɫ����cu�f��D#EGGKX3�D�*�F�g�|�ګ^H�S�&$R����
����㹯c��߫�ơ�+S��1�����J����b]/z���
䀥J�]�QK����ڡk��f��U�gai��YQ��$��B�YA��k�HT���H������P�ŠT���4@�;�ʰa�1ʜG�	���jPb�YDx�lu��d�=�Š�N���59,s���5-����"N;(�f�q�dث��R֘�2�|�(�Q�d:��H��+G�v��׫7�6�ꊚ�ɨ�W�ڷ�)�DO��o��n��Y�$�3��&T&6V������V�͗�sfl=���,j����@Ȇ�u���l��������$O6��S`Џ6��A�4��;�����:�S=mX�Z�o��UXi)����*�F�cW��:2{�&��DN>NI;0�|�m�6k''��:�����_�=u+d����L����I�+:;[,�o~�L(@C-�*������عQ�yHpzh��kn��X/�/��
�w[S�\@
�%[)ZPX�@9������z,�����	��@���3���}I�fqz5��*���ز��h��d����i��n�Iv*����h-��hM��c(��l�4Kv�"�~T�7L�
��	�Yz��h�ΐi��%�C���\:Һi����`�u/��e�4q2%6uc&�`kCo6�]ga�P�ռʥ-M�g�����c����IΏ���O%��5+b���'����0c����)�r��f�`6CE\G��2�/[=���D��=I�S�\����M��cKC2�9�mB�lζ$N��:'/j�
���07�f�ݦ;�3`�lҬH�m�P9�UZ��8f���<�?�lb��^7�F�8Z��H�2��>�g�Z��L0<,��$�>(�RpvȢ�������FR5��.�S���<��W�j?j	�������o��)�auN�b=�r_�֧�y��]��@S�������>g���2�әm��^u�b�����!Q3�ZY�F֤��*"���&��w'f�X\�
���MM�u�6�OOt��:�	rS���C���P|.�
�d �	�w���@�P��3t��ͨߠ��6�uD��,�®`V��ڡ���t�[���P���<�R嚢c�~���H���t㿝�"t�-��ĎNt:�k��y7��	��qv
c����b9��ބ���_�/?΋d���lv�%Ó?
}�Y����H��~�Z���Mu�/K�4(H��G���;\/���w
t^�����3d�A׉	;ו�8��:7n�^�k�&����2���n;�Q��upAmZ�֦�޹R��ri�Z#�dX�LZ:{��䃴@_oI�w};�A�,�}�Mہ_���{�!mxib��T1Ƥ�2�9�/�ON@�}�ܼ��mV��W�E��
���Iq@����	i��0�e�k|�'G&�*�E����D^`i� g2z�lJ�I�
�`�m���Wn�Hͦ5.��z�Q -F�|ܼ�g�4c�L�����0�,�j��UÆ���X$��D��n��y�
5F�簋��q���;Њ8��¬.�)���x�*��RM*��T�O���3+Ѣ2���Լ�ICe+JYJԟ��L��bg���Ogz:�*#��+sYH	�\��ЮO�ش��t��'p���'���s�(���;��2-D"��&#�j�4t����y8�#�ph�6��b�q1�B�Y>���{�y#v�����XA���Ul���Q�;[+c��_<6� �KǰE����y��[��,�M�wg߿9
�;��:��s��o�i�Jp��
G���~<�������u�`�r��\�U���Z8�
/I�8�������潝KS���ߞq>1��*��F�Kӧ�#�O��;��N���<
 #�b��Z����Fz3��G�}�!I��烿L���$xQ�I>��BM��z�����$���*��i6Ⱦ�\4��	ͼ�^?�^�����L���-3����_3�FMD��79
)C�f�_��V���Γ+���=)����[�Dc�n���n��t�z�Qe>���L`��:c�ToZdZ�g������}/Yx,h���]Ģ�_�]}`P}+�7�����&�	�$H��=ҥ���D��Z՘h���1���o���;'ݲ�>��5�V���fAw��}��R��bմ�:jC���I�]��DO���9`ɼD���Z��ׯn"k�w�7�'����?VP�,�
O�?� 
Kr���T� ��+u�x���0&��e/�%�~w|9�:�!�O����?ƗQڋ(ߢ4vG�%%�$/Ӿ? �+��(_�Jh3�G�d�����Q�w�KL������
0�3�I�K�����Z#��
y�_R�Z#G"��˗��$O{&{�����7z��n���@/�8(��˻l6��"}�|Ot�>}�`�Ka�>��l��U/�Iw���%ɳ���=�{��(��~l��{@o�K���Ov]µ� ���)S��'2|w���
�䗾/�F�AG�@gƪ!�8ɻ�=�*�on*|��}�-�.�CcX�=�Kl�,��_���� ��JH�R��������dݔ �%��&������J�R���i���Tlz8�b�#�5��n�;������
��X����X*�����%;�I�Ӂ���#*���k��
.�#9i�S���U�͑�*�m�c��˵��@c��
��9_:��Z�s�)��K�\�
��t1O:�QL�ǫ\far���-��x�h'zpo�~���\�^���<US([Cw�'��b�7;�ឫ��y��I�%ۂ�U�(�-j�!����΂�˲
ݿ���ko���W�.k����q����gؾ���ʲ,�j�G��s��^΃�!��Rr-p�Y��>���z<S�VHX�t'��j�B��^'�DxCr	o�t�Qb�o��
�ݫH�����=ܸ��(��h1���'���b�N���
��ŋ�=$k�{��#jD�T����щ��i��Ogo�<ٓBU\��
�P30Dg�P��(�N�p�Qe�GQ ��[TIp���ɂ0���KlQ�3�Op�v֩��oԏLr2D|~�������
�J
�t:,�G~�9
��҃���T�� ������ZѶ����>�B�������R�H'|𺃓���Q��wt�
��>�W���%C�$v��
 o�s?�O|mRZE�9C	��Y$.t��g�(�ג��,�����v-$w�,o�R_�I��709���מ�ݰ
W@Q�K��JgR�����y�q�zFB(	kv�T�/��{V��!@?�j��
��$+�"+-"1KU7e�wU+vI 3�C�Y�b:*Y��R�n���Q�k>�A*�C�+ ���_{��Non�
�q��mX,�3�#�3D&��=��]�V
�z�D��C�p���g�UHQ4�K3�)LR��N4!�l�Fplg���S����īxy�����&Ѿ� �R���&���Xt�$g��=c�n���zD�Zq��'W<�%x��zq�u\��N?=�O>��������k���Y��#W��#^��kC֠<�u��)�0��wb����F:Y<��%��d�����ˌ;{�^4A�
� ����\�c���<�j���
�FXa�0��'�~u�~�qt�27P�'|�ul~'��QR�4*���2�$�-��'��$Aq��f�
'aIWבk$ˊT���g[�������V���;?�(^v�Q��r�l�wѻ靾�.~>���/�	��	��mo�_��NV`�9p���{�sza���}2�
g�����I�E68d|��y?\$�>@����<�g�l��b�8�M�����/���F+M�|h��c��+�C (Y�6$`c"�� ��
t�O�ir8�_J����J,	0.��$���Vˌ���(D�JE*b��A�S�.e�(ŕSwSE�(Q7n�J����טY��+0���	C��m�j9������1��E&�D>By�'*Me��TS?�O�Lz�ľ�ϝp�5`r���)�T7l�.f,p�Vb��uܧ��߾Kt	�{��
�*^a��ϟ‹o�;�ƽ���i5����M�|�hԕU�v�t��ťK�:W{N��`x��U"��
�7�/=��&�v��v=����r��\f�]|��.�<����u�����1��C�]�"
Y��#0�*1��Q7���=�B����t�(#ؕ�;��8q�kO��t:^AF�T������G�y�ph9�����2�"cƞ5���0aB��L��� `��������wh�]
�J��h���B>���.B�R�|�%��Ө�dzk��e1U���6a�_����$�At�U�ڧ|�?�޷�{����9�\Z�7s+$�h÷u��k�~�w1Z�I !O�u��x�n��X��~���e'��i���@��)��(����yY؂��ۧ�.k�Ե����:EB²��vs
��T�jȠ-~�@�JdcĮ�V.R�ʜ�p����E=o�9��xZp����̣c��;w��Cf��`�6k��P������5��"�=p���;!'��%�vk+x��x����j���k!b3��|m�\ᔊ�9�|�ֆs�5ネ�ѹG���!б�B�)�[mc5_0/䏬@y��P��W�IVt��B��jɟV��.��ȳ:�g�'@�����֜	�r��QfH�?����pm2�i��Rb���c�60�.���6zs$B��1�^1��e�#uU��j#�U)�t���&��_pa�&s��.�Y
���ԬKgj8`Y��yͰ�A��3V��Ӌ,[�����9��5�/�"/����E��؆�h�K�%��������E��\�i�4|Hg�I��1Ԍ0$���k��&$D��f�Z���ˆ�7�~��W�[*I�^r�SP�;�EԘ������=
 �!u��
n�ڤ��߭VxTO函#F�w@M�^��e�d|g̐����j�E���e/�!�[O//8y !se�y�i��Ҩޞ��Qnw�y��8,�f�����?iX��Js
|I�������:��&\!�Z������|y�?s�dx'ړ-��jbZ!���&U�8�sh�y���Q#n��	����4�\��8���0@�{a:�d�]�B.��$��@����%Lj�������{���qw��`
U���)}�~���VI�+�nEh���mA��H��)�-H�WU#:��.x��q��m�\ݠ[!iHJd����dd	,y1!�R�<b�b�jG��U��<ou��h�w���^]A��Wה�n�sF���xYb�;�pq��$4F�@?���9��]�9U�m���cT͒a:)��%����a)�d�왬<�B����(��=��}:�l�t?��mQ[��(6�~�P�f�0��'�8L��ޱ��z%N��h�uC*�t��q�+-��v�J0M���>n|�M�H�=�.���gA�o$�W
��K�x�4�9
�/���d��Q[���+o2a�e����k	�n��
>�3��<Xu��3�̕Z���X�au:�L1��[pE��'ͮ��Z��(�1پ`����]J`+
K7]�a
��r}X�.��!��Y�W<��QUx ,C8�����okǠ��TY+#�X
�w�u}~�����_A�R0o���}�{�ӳ����m���l8zbS1%�.�v�W�;��7�eU���.�F�|�=��BWuc��y_,&G����!�o��.����.�;��N�6�n6���V���>��e�"J��y�t5���]#�)�*�2�jh޻cͷ���I.`�w_/�[�SA��(F�2�x��X��MX
|���|�+H�$Ƅ��G)�AU�9sK-$\{pˌ����,��+�����B��4?��֤X�Z��~���Q7�"�Cͨ4&�ٵ��m��+���m�Ӕ��L����5���<)�9�I���I�P�W�J�c8���̘�85H�y�q8�@yN���l�C/A�]��Y��r�
y�A�Q���N;�41��Q��İ{��Y�^��\�I=H��w�q�$|}�v�߭��5t?��yʨ��A��C��=2洀�xvF�-�.M��X�*=��7ī�&�덼��V$Ϻk�C���O&A��y�, �OKpO��X���߾򄻲)4M��ۆ=��j���=EP��ҷ��՝燣R���V��iH�.a�����x�t��̇.��5W���r�;�K�1�((:|,���N7�ͦ����yD�7�A�#G���gK�Qܷj�j{1ڭ�QвIR+�'�=N1E�N��44)����i>?����@j4��PjO�I�'�MF�^�W^����{��y�����z�<����5���O	]��KD����`�����U��Ŝ��^=��"oT*RF(�x�t<ہ�W��%|�m��s�JW���.���ۉњ<��l���{X���F&0��c����
57^9�~g�1>n&�{~gS)�&���zɴ��SB�n0>@�
 �O�:�G�gu�y��Ĭ�i�~���T����9�ENΕ���3����G����CN5 ~?�'��T���W�w�/��ٰ���mAp�Kp��{xl�M:m��#���<Ȧ={��}O�8�zYLJ�X�[��e��A����a�%<�!�p�

w�rDj{n��������sV�*�OF�^��>�AzKќ��q�������5�F��\5C��uu�������^��S�����|��	ผ�eL���g���I��E��V�I%�8���c���9+��|vr�޴�U7���qL���=���BT!t39lr�����]o�8��"h�Ի���zE�-�⺥XӇ� �r��fK�N1t�﷟H�)[I����d��������r������7ؤ�5�k����K���ۏ���‹�U�3�;��
}�v���Y:�������0g*�wk���b1�{�v5#�hZ%��g�,��{x�ZY�����`O�¾���+�C�2�}�"�#5
��(.�XoffNd�i�k���.��[V��%E��w=�V���Յ�u̮.?���\\]�����b��6.�Ej�d�w������;��=�����n�8˹�����퇛���=G3��A�8�K��<	H�]�@�n�$}�?�q9��r=��̸
����ǁ{$,쳱e��q��Yv_��|��B���:�Kc��dY*Vl�\�����V=�?w��P��<�H�$��(p���Wq��g'��v���ˡM:��~�����NɬѦ�h���=�A��+R�	Z��=qԳ
R����#
m��h�iO�(y����ۆ^�q j;������Y���W�$��~�K�5eD������|�7�H���63R� ��V��\���|�ĝ��
}�y���g���^�d}!��S�纇;L�fZ���P�Ƶ�լ�Br_2��˓cD'Vv>*攓
=�)e�y����I5�#n�B~Y5�e����!����4s�5<�!Cd�U�ۅ����_���eJ��\'mF���oc;bC��]'	h%qx�('����ꘖ7󅈅���)H���<q�T�.�R�SF��Uv��Ak"��T�^��ޖm���W��������f<�m���,+
&��Β�b�v�!p 2�����u����Q��|Qҁ~�h���!��N|vx^]�Ү&�U�{��tzoU��XS{�+(���Z�Ȍo~04��=	���.����S��P�Ƅ�W0�Nm<�����F��t����.���7����P�+�Bg��@��)F�1C܇Ԃ7�b�_��t1���72�,�O��~m1YI���S@!��i��BА���#�e	J�,����1���_qlP7�:�BƯ��T��1��7#���+ZX��b�R��1
R�o/��1{e����A�r�%t/�N��Y�mAU��gE�����R,�Y�)�n.V�z���ۆ_;H I$�A�^�"n�c}�F��6�yԠL��G�!��+�{.�p��iQ>��7��0;;}q��>OL^q�����Y��`|z�פg����g�.p��E�Fm���P=��W%<���X���
��C�B�
�ޮV��ۓ�$���t����K%D� �7�¾�9�I��~2��a~W�i�-�F�?��?��}�t���t���
�	N�>���+ng�7�a�u"N�W�E�
�"�\�)s"	-9�R���u�Ð�ua�2r���;�܀�,`O<)EX�0�s����	���@)_�Y��MP`�!x*��=�͸�p�
���)���Y��/ݘ�,���;��q:|ި	b��~{;��^�#Qc��XU�j�d:^gM�zz<o��?{��+6R�7k�WIZ����=��v��?�8I�����T|n��aܩa�"�[B���q������_�)�F����gf�{�w���@�b��U�+�m���hSc��x�6�	�>DV2,.f��K��h�Mem��s�����#��(N3���g#Z4�|�z+қ�V`�>H�J��0V��i�*�+��	"[g9�f��#�y{�K�h1tjo���~�X�fT�"t���Z.s/�a��*��0Wk/v{��-as�y���հ�ba7.�Mu�(�\}jf|�)��mbxU���4h�f�V3�)*�V��j'}-���m�S �]�l!Ҥ8r�KY��VO���PR>.�ۭj�ڃ�����m���4�95�>1�GH���
2}y������������i�A�I�v
�B��Zr1��q[��0�����QZY}��_���X��4���=�H�-P�U�nb�>��/��]pfHS՗���=~�sD�:j~̓8����F�iA��!�d�讌^�ٻHa��9�Y��N�t*���4�v!ê�,��6�L̋iJ�#�[���<#�$2\l8;ի���q'+r����S�v�;���&�G���ш�����n9/nk�lq�b�|�͈y�"X%�%ܡ+v�P'���K&��…��TA_%��	��'�Xq�hJ�	���w��-E�_BD!Ѕ�	���]�j�@��T�4��(�PJ�68��>8rP�D��rqM�wg��mv��}���i����=�{�����2R?HNrP��~�*�f�E垵����V��vț��c���8��XE���-��`�{���|Gv�r2z.��PE��I���(0�T��1p���
*-�/�H%�iʏ3�"�^e�+l̇)^?��|<�8��#J����sj	[�t+Z0���9?��>w�f�9^pr��R�>��*��_Pj�����XL3�~x٫��27FL��uJNe��N���,����-�:B�|�i�.�06�R�L^A�I��mF��Ys��(k3B"��Л�GrՁ�8�����m�A��>���P�f�r�}*A�K���Y�ڱ���2D��$g��pY�i4�6��ad��7�Uam�!/��'�G���h��/f�[_�N4��J��/8)� �}�ό��:�`P	i[}c1Q�N���@_�̏�Kǫ`��S&<Ϸ�qc�f����B���D�Jō1�U��;�q�s�D�T������$�-U�a�µ��ƞ)k�n�ǵ�:7�5�:D��`��>FhY;)���ҿ�X�q(��ʍ��{G1�7ᢚ��8���.�d  �y�|�Cӽ�;��k�'��v��Ig�䤻����i����� �T9�����8�y�ZT��%�q&؂An��~�Tc�8�Ʌ�T��ȏO��֊o���K���lj�*��U)^��R�~��QL;^ZZo�X�P�������io�6�����aŝA�I�
ҙd��t��H[�h�ȁ�L����w�|�(���D�}<���,aGQ���ug��0;X
���RQ�e����D�>|�i~}Qt�
ht�"���e��(�p!U�e���x�*5y�[�= 1�;�=�0z�m�,�����
�/( &P�X�8!�*�'� ��Ul���o�
~�Moi���
��4€#.�d^��H�Z����
���Fdށ�=�h�X���ܰL�,y��9/Ἄ��/휙����[��K�^�H�(q�?��BIh��cq��gG�����?���fÉ(~��2���@>T�ƶ93���CX�E��ˇ�}W��=�2P��_���=�~E[>�"���#K�4|ڭ�w�oQ��"��5�S�W��o������Ow4\��Do<�"�����>��K��������C3x�J�J��^�um�����-�;,��=K�Y�4�=�=�#
]��E*b;�1�#m�^u8�|G������#1�ֱ�,4�B����e5<���1r@�9�-s`B
��XR��rU��<���M���e�Dޛ8{NB�_�_cu��v�i���y�a;'$�=@�!�m��c��6�@y�hC��.���!�x���v����#GE�Y�zU�'aW�=�dhl���w����5�Z��5Ę��~�'�+ s{�"��*`���w�U�����K��Jq�ص��›�x�ݲ�ڸN����	�֚�%���F%�;�\_������}0��<���,)	,z�٬��G�z�ڢ���z&�5ۊ�p*�!d�$vע��C�ș�D�Q��_�ϳ:�GA�v�r
9E�CbL�s`^���K�ۋf�r�+U�&#��e�z�Z�F^�cYc��iNI�Gpt�/��2�8'~8g�k��wBI�Hޏ��?��{�����
z�'
���f�8+_��S�/H&��F4R��G�p�5����Al�!��7�.ng�:dxON2��8�MCGe������8�y8>��g�Ҁ��������%N�"�Ɩ��z�HC�P{vBz3���N��].z9j�ho�ȵ
���e��Ujr{[�<m���3Co2h�P�0B�8`��ea���C�Cw���ǃ�K)g��š�W�@��:��/�+H���W�q��+�t(�r/�"-���s���#��E֎@�lQ8�_��ScӼǰ���/��	v�Kw“J�1�r�ǵ��@�P�9w��[SRzq�x�.{˗�ן/O?e��/�>M H��9].������3p����X�s�ɺ�^��}�Ex��&��jzy�jn��\49����տ1�Հ����Ӌ�?St�i�y�T��Co��{Ŋ}����;\�[M��Y|X��V�RP��s�tr$���k��n�0����R�e ������d�6���ެ�Ԍ�����JC��^E���U�֞�;�|ϼ�
ݱqR�0��'؀j����n��Z�W��*���s<��za� ���h�h�Q)�C
9=g��r	�����o���	H7��*��F	�|�K._��1��8�U��$M��/L��/�lɏ�y8X������>Vx�\
2�I#Uw�G�ـW�G�T�����4S����nǹE54�i�p�2��jh�^h1S��r3��	nz��m�o���?���������g?�@71!I��p(�3E%r�9�~WB�<�������r44k	�S«5A�]OT&zkj��jI���CT�.V@�C;7"o��ҚZ���{E����Wx��Dj��5gfpN�H,����(��ڽ�f�"���8w�r�.$-ӺH���9ռ��L�!]���1C��(�>t��U���:���f8܂�T�.dHw8���t�`����Ne���g�S=���2�٠�P8��n���C�a�������S덮����`f4[��F@��h1tF�l��0�|3j(ˢ�e
8���L����fI1&\�Q�
�9���zܬ�.��M&&�Z����i��g�(
"����F��J?S�D�FEޑ�Aq'�dH[�f�n��?��|���;��Q"��c��á�\��Q[昒iE�&����I�|��c�rN!��FL'�HV�q�B�P���¾O� ��X3HԆŢ��P��k·���
��~Ǧ(q{-
7lʧ���u^����m��ol��9HN	�k�x�%�~C��8�K�)R�C�����z1�CƇ&�z��9�k���}��9WR�ڗL���g��1�Ň�G���5���N]A!�S"F�j3bm;�����m�
��4uY���K���J�����J�8��P�RI�$;bň/ɸ-Ķr�d�.�b�̎����L�3]QT�J�b��촛D��햅���y~Xg�>_��[;{$x>��^Ԝ��MZ8�F67Ӈ)`�-��4��c;o���
I;���~Se`s!_@@KgSD
�!�ۢ���H"�.�7�������:Ԋ*!m�1��yA=���R�}��u��/�.g���$3Bq[ܣr�M���H����r]���ο�ք2A��:W�dSh/�&����!�q��Y)b��0$�/|צ�>I]���s�Ns9�sq�_��%D���%�͸�"����:A[� �@$s��YR��Ì��/�#��-!��:L�#r/��qv��A�w*�E}L漲�9-S�(E�$��KU�R�Y�@��8ra�o7G�u`�� 0#O`	�`K�C�G믶
�b���W k6�J���ح=��஘��ꬪ&��Ӝ�y��	U
��:���~7�oz�3�E5#��L�CК��T�I��	P"�:��n"���6���M�%��n��Ct͠K����$�+���N&��HH�t�Q
L�eFYL��-I!!~]V���AT
��q�:	�o]|�W��'��%O�Itς���R`"��/[�W�H������"�i��i�Y:��I�U�Z�3��D$�w8��=�k����'W��b#�S���̒{�$'z�Y~|�&��;��i^%9>0�}�24�a�0�%i���֖�Zڑ�5�ݿ&��9����8�����bZ��8Vo�.G[��1R��k����>�B�i0]T�O�E�AD���ey��_�Ǽ�Y� ��*E�m��$m�A�L��UיX-]�e�=�*7]fAG�`(�r�-�@��M]eh�g�΢ͦ��])��1�0�j�"�S�9�h^9X�~��V�r|��a�q���������a.��`�}��gC'���ɽFNl��'��:�ׯ��%�#��e"��5���|�'0Ī>�1� ::K�ա��CTQ���~�F�;���]_k�0�,ۑc�:��+f���
�Y^����Ac����N�ɱ׍�!Ȓ~w�IVt���VF\���99��0n�~'����0�{������ާ��;�u�|av"	�
$
�k�#3��J�8��`�j���#���ڕ:)�;����BMfɰ��T�?��:#�H�}�+Ok���jQW�y�$��{�Lm{�I�flQ&M�}t����Y���GcZA��/�a(f�t.�iD��w]�r��Kj�˂��zY���
��6Cv�׊!��Ƀka:��ԥ|�.����De�n�O����/tΠS�;?0H��Z�6��	k����\Ѡ��cB�e1����t���q�I���\�i�u_b���G�a��%Ld�N���W8�q���o�;V��E�3��}�<yr<�!En�߾��e&��Ƃb���W��"Ʈ�o�m���$�Tj�h�$�����&�`)�Us�|�.�J0%uQ�>o�2�8���~�7!TEyc)�z(�i;�N�E�Q�	T Jx(p^���X�Nȭ��`��fg
i�d��Mҡ�:z2���g	�1��I�ᶨ]�(�^-
j��bS�[��>k�’ ��>/�j��eܕ���N'��6����Y�Uڶ]��$�:߅i�T�����.ve��I�Hj��X��~���]Mo�0�/�؋�4�թ�C����qVxNC��^�E���DR�ݞSM3�(��#G�Tӷ��1�,st��
�����1�[�%{���°�P�8�g]-��T
�-
��
aD�K'�({|Evl���,�z6�6��n;���Y����n�%��9a�a�^>�Q���]	Q�a�Un�_������%����R;y^��P��t�yn����-e��,:�m�C�sTc.V���[q~SSU	�4t�l^�4�	�]qҰL욷炎%�BI��@�D��|�=��DGPi'Ta6�A�4�mT�K@�$����g��P�X�8��p��� �ke.�شoo*s���94Ǿ���)�91�R4�ER�łv��3�����
h��`���f�F��`�VI�F~��
,�WՋ|q��>f�,���m΅�yYP_w�Dx��K�;G�1�x~d�^p���>
��/p�(�1AwG�&��Iv�uLJ?$%!���'6����r,���[��B���O{���-�����g�D�|?�LY��Y�~�d.����͜���'����.-t�@�)?�t��o��g���G���?D�:�P ���سD$���cU	�l>���]�a��-������og`@g�9l���uH�3�.	�w&��# /�)u@��Cj�H�C5��8�B�qրR��%�S�g	xƜ��Q�<*�"
a����j�^��?X����h^�n-�Hs���ʰB�\xsl����dHcuF$
��H�tn�w�{mƛ��S
����E�c�%,��1��L�G�!����}��aؒ���]moǮ�+��P,X���ԭ��9�� A���`�l)�PY2�rRy���C93+�r{�6^�r8/;�|y���N�N�14�c<�o
�9�%��z�I1��8� �e�P�%"6z*!�3��pm�ŔX��y�Atcw��[���׌5aK�p���aF! ^k���@�*���N�ۧ�d�-8���p��\�H������t~�g�?�t���g A��2>�����l�L�E��1�ݗ'�s5��DW5bY���ӛv��Ǥġ��ҁ[K_�5I&(�\p�S��u2��/1RG�U�;���i�p��4��J�u���€�Y`��BB;7��un����9�f��0`|b��T�8�0��S���.،�'T��%hjU�Z�?E�V���r����Q#]y�WK����!(�i�h��Ⱦ;���D�\ )�������I���y`��xᮖ��%�ľQ%�18����[orC��^/
�)��)�H�4��F4�mZC�$9^f����
�T7���M1T�$gK ��PMQ92�3"�k��f|no|���`��?ݴ�A3'�Cf�^��Σ#�M�3���c�՗���7[��ʨ;0F�v�l�!3�),ɇ�L=\sސ>i[_�~���t]�bi�+LSz�_�`�/�g?�SӐ+�p2e����8��o�t`�ir���Y��Vn+n�E�ٻNS:o�MY�����8�m�t|�0t�`�"
E[Hn-�/@
�X�Qh��&��g�e���[&��>$Qor���lA�/vw������r��K�=xPnm�Db;�>��{����:	.�[8F�������z�n�m�7X@5�؆�~	d[��	f��<l�1�J�׎��uK-���C���7��
�(���@ODpX,C<_��UR5�����H��X-�%����2tW��W[8
��8�;���Dj��j�Z#��@z�(HӅ�~{3�>\��%��
� V����*w'zLR��Z1)�(�w��sA�C���v�
����y���@��z��ԍ�}:�ܓy�5C�1Y�D,G�@<)�n�=�~"G��y�CA�u�ŝ
��ߌ��oɢ'�犛�
�#�϶K4��I�b	^�
^�FC|a�4[H��/�����N:k|0��=�M|�-��_�S���'�݂
�(�UY�?��e��)�
/󍮣1��r?a�k3��`M���f�e��7�������ع���?w2�:2�gMݓ�7�4��?zg�tx�ʶ.���1�Rj&�<#�Ę�D�n!�G���am��_��K?�&���
�ʝD&���j�>I��mBo/vI�\Р∔�""�{D%��v3�O�$�#mQ��/[D�8S��^`Sv��fW92�1P%�?;RU��X_��J,(�6\�^
�aq���W�i�8тju�\|o�����ҭ����ݯo'㖠�����Q�uT�,:uƜg$XSۖG&��D}�ό�EN���'�!w��&QG����Ky"w�Q	D&,�|�X\U��w��e��!6��r�Vqę���59�^MZK�Xk�0N���UWtC64�i���G���d�a�n�
a)i�q�����MW+���^v��l�����R�?��Ã�oR�]������Ϟ(^I�Md'�6\OmFN�
4�l��� �+�ku��[O9����q7X��c�m���c�����ػ�Q=��q�XĹ+
�V�����=��ǁ���g�Z�>a;���k_y�ۅ�B&6~�)P�(��iC�(7*P��݆���	�M���)�*���\ĝ��͑
w�`��i�˗�KV[��-')cC��繤���7�KM%5氬����{"�•�V�Z����S��.Z|�^n��f��`��J�����C):80���N�c������q��"�����F��B�0Ss��nTy	\,�m .�S"O�}u���tq_r`���K���F9��M&��cz��vߒ�]���sK�'�W��ƗȞG!g�fZC��Ŋ62ik�,Q�&_�s0�3l�De�|6���P֬r������g%�J�cwų"@�D�{-A��l��C��7��j�R��[�~CD���7b��6>I%����
��Zc�a#����bd�ڸ}�8"OnG��r$���T1DEƯ����Z*�\��v5m"�^��i�L:N�G7��A�{��)�p�*nƒF����t���I�w�^E*B�L�8fT:)��aLX6x)>>�b���y�8�k�CN�g������3^`��h��~E�F�/�9h<���:���c���L^�D�˘?�eq6�\jp{�$��h��"�E�Ր�
�@@���F�W�8*�8J�R��4,.~�xיp�nK��L.�.Su�&R�)��N�S@q�{��nc�ИH6���XKk���	��[�vf4���lرpnDj�)�ř�3�!�z�^ 0C��i��mht��%��+��n�J�\) ���aM
��GH/�����|�:�[�ޖ�o�7�kr�;`����[r��Y�`�;	�Œ.��KK�Pv}^@#���lp��!@�����j�����G��&�ڀaNFW��R��{��-���+t�F$����CJ��y��Q�nE���5}���H�{�Cg�+��P����N>/k��@.f$�Ą��(�G�;�L$�Du�~y�ץ�G#��s�iky�q7��������h":��t�&����?>J}��y�\*�(�B�f��[�jgo��յ�>b_=w�
}y�+��A0�}5�hI&��w�ے�h���'�[���;.M:�a��=7?]Y0M������[�+ўP�
�ޗ�S��d�y��(��k��E������މ��M�;A
�$�(�3��d��mc`"|�ʹ���,���o��GN�x�����oV��*�1��F�B��EB�΁��aM�}w#���iD��DF�e���d^&�zs|��hTAN��iZ -��#2DB���'�U�En�Yk�o�z�R	���;*ꨁڇ�Ӱ��p@���;-�$���k��_��??(�u�w�@����)?&����>�&*Zx��9��%���+ZDP�}�b��q��t�e���v�
y�"�,$N|S74�W��(���A���:���Z�6y�4[89��`�����O(箹��[�.!$�����j�����ʶ�42y�m �
.(�e�q���x�{󉱎P�T�>!}��2;�jC���J^u�EPL���~�9y�ٌ�9w�Ϙ��<���_#�xZ
o�_�s��jn��a����t����$��<N�P+�U�r�G'Kuϋ^�����Sꡱ��&,��F�������l{t�²���Y�]��n��U9����Dc'Ps�at�!G�-T�-I���C��pj�H4yaT6�f�b2G=��lv�6S�B�)y��\~�e����jc)��\P>o��x�y%�6Y�ʵ,~��;a����l���A��o���\�6s�Eq]U���`�@�9�Q�,�9����d��_�
��� �精��g�/����o�c��K���<��i}���`��Nb)�'�/���H�Z��ר��L'5DӬ�{dLo�*l��T��o�I��[4u��	�՚�R����Y����+�IʈV�n�0�S
,N��~�d���w��ix��1/��?��-Vnb�������e0���;�5R�ЬZ��
i�_l��).����^�n��L��$?k����џA��t��B͏�=�U(
nT,���M$���b�$�Q+�R������l\��^O�L �H���kcji�i#1ε+ǿ�Yħ�M�V7�g~T���-}�!C��$;���ԧ,j������竇�;B�	'�n0l�І�O���˻:��V�O�E�ٻ&%!�\>�O�.���f�E���W����ͯ�w�S
�hC
�4C�@_d����&��!E�m#�j��z"��	2�	�$��ߟt�"i�������pPE,�-n���H��{}h���I%ݭ�}��W��a�M�e]Z�VYX�v��t�;V�p�ÿ�#�"-|��/0�EY��ȕл�-�;��3H��Q�
�'%����D���:J��g�&��0��n�$0V�x��85,")�Vkd�ג��b6�~x|tk��{�_'���؛�t,A�Oo��w�l0����/s9�`��8X���ǷXjk�DY�4

��Ӫv+a�̱���xer��"�����CAi��3~�M�����Js,���7��@(��q��-e�Ǝ�ο�,#��1��:�odrI��2n�+t���o��q|a�RN���M���>ܭ���"(W��cX��(�6ɒ5/W���lK��1.ǰ	T��e��))�ʋ�u��Jv�ښ@d�.9�ګ�4"�U��{dAa
K;���ٛ��AvN��x�q��S�[��Σ"��F���!Ń�ҝi�/Hפ:�VV�r���A,m���Ѹ��8b�.N���L��~_ΐ�w�������~Lw��A’r���x���=���a�z�	�Xֹ8% ��ʽ�����z��>��>��%�Q��s�T��k@5���2`�y<��o��]+���ˊ�����������ʸ��s=2��R��M@$���4r��?eP��
��ˌ8��}���
��"�� �zZ�ן�i9ӻ�:W����,�bB�'3/I��E���PC"(.]����7������ {	4�V�8��M�IԝȂ��NO�x	�AT7K�.KƖ>����'���+E)�ܪA��`�J�V��0Z�7ܖ�[�h��>���dN�#2��w�Rc �^���k�R�%^�ռ�;����Anڑ�4p�;����WӜ��}x�Y�SA�<�����D��O��]�*�X����tZ�^�8*�����pi�����-�=�[�bA���6~��\ʧi��;
.[Wx�l]�7��A�����\x�Ry��"����r��0��Y�T����ȧ��Y�>De�	j���y�S
V^-y��۵&�6��R��
��;V�Y�S`ܕ�W�*}(~s�-~T�> �_���X�ܵ��W>`���.�����uyt��Oݍ�{�~$����ho��Y#j���T`�eb�m�Z��l6�����q?
,�
]���u=#��N��Oc_�/���筕�|;�k�b��,ۻuG[a�v{�xq�8���!1�/��tL�c���L�o�x�@�<�E���s�/��o��%���9�n1�]�ϩC�L�K|�{�-!���Lؗ8�K6���=��������[w%WI�<��b�t�/gg�:��������p{�v<]�M� �bx̮�{��R����.�Jwo����{XӒ����m/f��s��u1�r�uQ�F����=ks���f)<N<b�M>q<�rl9q�Q�Jr)�K��E/E2$������C?�`��wsw,s��x5�T�EO�NOZ|	�¦鬰0�bd^��K
0�.�����I
_דD]��f��/t�/��:}2�1�б���,pv8�o��
���tG�U
dȃ�y��A}.�e�m`5O���O���İŵ��
:��J�kK��#�
����0�,����\k�;O�
�o��}�~x�.1�@�j�l���tz
�ıP$A�����8J���h\u^R�N3R$g���/���O.s)���6���@?q@A�?G���!Ɓ��‘̥/�I��ԇ�e�Gdl h���
��
���b㟱�֑�p�%��Sh۬*�����@x�br@q��դo��}�!�F�5ۛq
6"��n����5P�<��x��n�v���֢��)�C�v:���4�k`\j��.��k����n�� �˂h[i�
�xA��Ҵ[�iAONS�dGƊV�x�}E�
‰+��L��0�1�����ڠ���Li���P���u{x<�2�kF����P�:L�v +x�4���j���Oi�-8�	�|��X���
���0I��c�2�bD�5L�9I^���Q-�5@YTMm�gG������\��J�!�sֆ�#}�	q�D��[�}:��鶉�"�m�\FQ��ƛɕ���L.�Qrbsb��"�D�Vo��x�I�����ZQW��1�e:8���WЇn7B��>��7�+�j�̓�Dp�ݠ�At�K}hN����CZ����z ��k���;	��M�m��o��a�ڑs5Q��uo٩�r��K�hQe��F(�q�t��w�lJA�2GCdy.�Z�R�5�!��0*09m��=)�]K������)�x.~XU�wz�|o�_f�cx���w��}�b/G�����͖�A�|ȯ�:�&v�rW�6}1"#R{%��r.n��J�H��AC�Dc���d�ac�c���^�
�>��e����*�3�e&�F�H|~��m��B��>�k龼��i/��_|o�?}5�!�����fG���m�HFOA�*p�ٴ*��^
���=�i]wҡ�#{)x��R�Kӽ!��)����$��s�E���f#�Y�g:]�8���ms������ô�>c�J��	��T ��d����fu>����,� ʐz��iZ��"�iKA���4zj�_!�5eI�)���7��t�$�J
��ř5*ld��w3-:yQ ��
{6�P�jKt�B܍�}?��6�-�}��6������G��-N`�2?S���A3Gv��NʚG�=
HMp۫��Rm�:����|�;_�E�'�X��ů���e���V�"ZjYj��'W��c�L�����uhpHYD�.Y[s�2��i�ypG�U�" �V>�(b<碞o��h���+�Û�
��_t����U@�ݾ���.�J�b�#�l���0�y�QΚy!g��C�������U%*�4gd�U֙T����6�b��KrY;�c�V�4Tb����C��_ׅ�&S	�ǦĤ���2�*(��y�L��.YRk�JY#D�קo�ŴZ��>;���ӟ��I�_�$R���U"����.�(�ۊ�N�:��ln�
}���ؗ����-�#�;�e���+\�,Z�/������������W��f��;`�8��֞��Ҙ�A*:�/�0�t��c��F��ƾN'��_}v[�%Ko�d��.������=�-3csqw'i�
D5uJS�a���@�����pP�o�ϣ$���/t����,���&�045�)��F��j�k��'�j4���t�(�9Z��AW����2Z�"e/�I��a��1��C&�����Sk��՗���H��1�BA���w@�B�4Ѷ�L%��m�or|�cE�&Ȼ�ȭ�������
�2���;�<j�}w���-9��v#rԛxj^��E1g�z$�x= -Q>4�Fu
�\6
���7�g���I�Z�
���fJ�[6�%O^�k	%�/%�^r6��X
{��3�|ꀋ[C5��1��!-[g�VV�-������W�ß��iT��w�x��n�ű,�Y+�/a�D}� 
`��a��fʅ�<w�O�jS���Z0k��X]:�c:`�3s#���ĵ����^��sdp#�\��1��HғPXQ�8d]�AET�V[
	�),+`��¨h0��M ��	ƸnY/Ɠv�����`���Q@��&8�
4A��
�N���*oăE��V�-8��j�qm\\�A��ȯ}����Ek�w���L@��׋��K�EG.L��܋l�Eg���v֔�\����)�(��t@�4�T���о�I�f��m/���6��xB��H
����X�d{nƗ��)��5���N�����&��K���loH�`�DoY>H`��]4F�S�`�rg��Md�ZED19��qaZ��;�l�/K�ݧ!����$VamJ@�oG#aV�'�{OB]��Z�%���i�;)h)�������V��TH>���.�:����;|G����RN̳���Op_�T�^ӘL�?��!�
�DU��������!
]tF#b�:d�FYx�HՖ�,Z�p��:�a��Ѥ����@�_��Kv���`c�Y����*�ka��1VR��g��XT���ߟ�8������������N~K�n;����A�v�+ɠ3�٭:�H �T��ؾ��s����'^��EP��T�hV����^S�'�A���*��]k4:�5��cNrl���or��惭ֈ�Ogڊ���Ԡ���jex�-�����z<��'��.�|m ��_Qz�ǩ!�c�A�Mu�+�nU6�!��+�םf��"��5����'��Lɂ��S%HZ}��/�?�����[��$�z�j�(^��n[�Ed�X�pC7����I�=10��\
@ȓ�Ί�TNn���&Ȋ�;%\�8n�2�
}�2U��-C���x�3��9��Z�u�6�9�kϧu���]�K�ݝK�7ܓ�������D/'V:�4�b�=��
!�f�b�j�I�a=�-/حe��Lӫk<:X�%^�W0v�D��Jq�������|I���Lŵ4�.��t��R�CPoSHJ#���h��*�8�J��D\1R#$�Au��y��4D�VG��̛�D����#��qx3�ْ�/�՚��G���E�)�?�3�#��O��j@�d��6��P{�˛Kǜo�@���z� ��ء9�F����r=���܂@�K�U�k�(��ߡ�Q�s����Y����]��3��31�* W����L2$ww�d:�?f�ތ״>\
�؜^���p]��sy[��]2��f��"��#�e/\�*��M��m#}�䉤�D|�j��&�ah�'�=�H���n��Z`��Д#��F���g��~�lV��K�1��2�_|b8������p�)0�ZnxwG<rV����n��l �x2>�:2�q	�^�1�%@(e�U���	�ҫ�#J��E�
�0�”����p��Ѵ����]�-Қq��nԔ���S�h<|�o����W7z��zOAP�H<�FY��Q�?��E�y��i�
�skg<&�#$v�I,���r�Du��p�!��������	K��k�q
7�Z9�b����.5�X�xx�8�vg' ��2���6�V=n��Of�x��؋���HJ�3o�����*�߸��Bu�[�?N�n�W,6ś۪�����v62�1Lފ��0#�Q���*�{�P��e��aiX�P7���5�b�V�����#6��۫��B<���6yFO"tS��t&x�KY7"�^�iu�G�����s��W�2N@3��I�W:,U���
6c��>~��_���������j+�}p+$n��[m�9nL�ֱ��`�T6��~�������>ηܺC)��O�N$"{	&zh���5���EP/Xe��k�o$�,P�NL�/;�w��\��sl��U�������d Hp:'W�|�17��g�����:��A:�;�b|�{�PK��"�0��q�+q�����;
p��ؒ^��6y@�b�Ú��i���q1��{^�{\��=T�~sp��k��7�*	��]J\���zDRrI�JQ�����v:����D���.
w�3yx�����#���s�=���u̸!�s�P�6��֭�l�/tP�Ɩb���dR�<�BeP��� �2�e�q����4�Ih͎-�y��Q'�<�ſ�<�d���]��8����w����ژ{��	�#���g��)M�F�ĊH�Bn�3
^zk
q�d�";n0J��h�m�EV�F�nj���h�V�h�ϳ�Y=��%w�&�ۇO��:��h����?+6���λ���������&GW?�}l�BL�S�Yy����F�!��@rB�I��K�`"Z�Z�-.;����Y�|nC}
�#��l�
��e�#$#���yw?��Pܝm��ʶs�����O~��)'���'���#���'�����'�:�9�2Y�Lg�o������J�-W���?K�8X��<��QUH�!	�:���V��M�%����M/$|��Y������W}	^��$�����ٶ���0V<G}�_�+�z�)�R	������ou<H��&�خI�`�+Q8�k��u��b%K	
k�Ɏ+ZW^_|Y������
�hKiξ�\�.�R
��&4�9&�~�݁��I�8�T0P�%�m?�v@���I
��?X��xt! �0�/K;�� .�֥;�� >f,�hɡz�=}�û;�����r{5���U��]��Ǝ��`�ţ6�(��'Fp=wdf�"���Xe���^���q��B/&V�����Xw��@A@��-�O�&d��q翯�� >�n�"�Y�����xM��t,�Du�
O�Up�V��s�R�5���A��{�Z#6�C-|�Wx]�(-���z:��Qۉ�嗆���.1�p�}�:����(ڄ����>P��c�Zآ��C��VOS�����Ewuk�m&��!޾&�d4A���;Xx�x��Dv݈
�-B>�~�e���0����5r\���%^�תb*�|�'�.�<�gvQ34���.�*R��vt���P�cY	�$�>^{(*׬3T�kX�h�vG��+���%
����T��G=d�n�ׄEU�;�몭�K�7JO�,�F����$���4�W� �Nӏ�������.ȾUI��d���P�g�W��C����C)>�>�0
:h�qt1�c_x��Q��@s-�81���|�*���jQr]�F�5;gm�J��i�FeZ��q��G-��~�AcXD��ѥA3����sX��P��vl�y�Q���e˽�a�Y�|Z�ʰг�S[�t`1b�$�F�)!�zgsm�����	�X�q5�PV���#�cz�q!�*yF�Q�֍�f��|\S�>��u3�̶~�ȫ~�ժ�~��i3�u�{`�	Y68PP�-w$
����_T!�G�.��^"����
LjxL�+|88�hcC�d{BC5�M���!�
���v��M~��	�ԩ,�0��Ŀ�	���Diz����lָE���r�m��WK�)�����t���4����w�0p���U��AfX�AY>a[��n4�K�9{w'�ѳ�t��e44Ǧ��`
��x�{}8T�Nh���ɨσ�2&g/PF0�ǡ����E��ߡ2�xq�N%
�:�t��xf��*�c����]�:8�>�A2_�Q��2�*Ψ^� �y݃��g0~aMS�j+ቖ\CX��(d
�v��_�ښ�?o�;kR(VK��0(We�k�P*0�������0������x��������x���m-Q�9VP(6YE<�U�L��,r�
c�;�<QF�T����u��}" �G�,��̅�T_�Q
���˼]/�N��P_�ri�ͳ���]\s��/3?]�>��@���k���
`��F�/���_���T�<����f�PœnW��E�
ww��gHCG�'j,N�(�´Ae��p�W]1Ķ%��ɣ�p����#�Z�s��@��`��:��\��K�Ze$�7�9j���'8(�0�����(�\�"LUL�n�9�yR����k!�r��P3�Y�ȱv4#ӛ��Y��.k�ן6D"��\����`��kH3"��$��n>b�u=,�sټ�) HM;���E������hԱG#G�����tX�(Hm��R��˄o�4.ߓ	��!i��X]�\Ǖ�Ζ�����XuWbY���l!_�j�@����`��?���r.0�ԆJ����ũ ��)��wI��2%a^�B�A��)!��<֖3�^�g��-�������[Y�=3�MՀF���~	�+
��n
Y��ykX�t��A��{�[�o �a,H�����qM��_�!]�՞��o�B��F9��F^�nW�\Ki�:jT�0��2W��U)�̆c�D� d��>T�������	��T��O���|�O�h9�w������(co����N~P��l����\�.�
�-����e�߲�̝�Y�8
R��u���-n)��E��.
�@�U�e%�����/\8��-zӔ+����i�0�}�Hv��V��197���U�'�
�/�y�<ЅAS��(E�W����-���ao��Q�|��U�NL��'�}��a3~ǫV���BP[<[&�^��������9:{�������~���y~~��?,�C���ڱ���UY}�RE�2�%#@7���ሙ��wj�D0y�L�B��E�U�cx�y��8=uy�(^z<en�c���#��zӁ�l���eO��y�E�ۛK0�[~�	��|!�����;�c6Z��n�
�)*�:��Z]"_�B�P>��T/t���c۽}w���?͞���ڀ��l~h�'�}8��>܏�\��nF;�o��Y�}���x��'��U�Ω�E��e�Ɖ�o��7 �ۻ�������7|}�6��i
:V���9�0�i���b>�u,~S�գקj����$F�vnw�9��#<�9I4���S����d��rq��	��&�Np>D��3�����_�%�iZ�[�uJ�=��^�q$Ҁg��H������.�i��F��3�E�5�㦜���b����lZ�	�[6��<�r�f���t�I>��n��c[m)e���L���v]���m����aL����6l1@7�.��@Ϛz����|���Yp�>Eb!5��eT�3D����R��`1%���yu�6&%X����|e�(�����A���~9�zz�>c�1h�9����b
��QӨ�PS�=y��m�ψ	l/%PT������u+���ue�i��'fl<��>;�*�"�ဪ?�O!��)ܯ�qG���l�#�h�@���;���F*qå�� �W�Y��0/��%�,t#	}nr�Ȉ��U���E�q�⟋�m�}+��d{:��^����|4�P�e�/�4^m�
�����V��e��T��u#�"����el�)��6j3+�u�����s�ˆ��Ū�\��A�(�R1��X�ȟ�@�}�'��J�wz��e�(��"�Rg����2�����oW	�����T���x������NM'g�'��n�/~�;v�$@�n�<�IQR�"p�L�I����b�T���_�U��V�`}#��OG�N�
�~�v�s��n%�w��}p��^pz�<8!U��G{�Ѓ�&tU"�տ�
���rb�Z��w���7t��@�W�l�Z�l��4�ܰ�E�.:$_����I�s>�~�����#3��#���e?z2����0�_�#EKƥlVU.���a�|F��*4,��L��ɲs�6�F� Tǚ���joY�q��`;��?@��*�7-(�
:٩ȯ�����u�t�(q�c�W�xԸ{�� ��M���	—�[@��J	�j�ooo�/g��N�����rE�M\�����l�ξ��l�ޣ��O೽b��W��5���i�y\�#�tB�	���V��B���NU5�	��p�ys��>k�\�����Ē-���]�n��[���D#����V���
.�>vˡ��G=(B��]�?ȁ�j$�"�yP�%j��pw�۾��<�+�Í����'�Q�:7�n�X^�j�9��COr�[�hj�s~�ö�G�l�ܿ��d��;���&.�WFw����=X���2��նrٲwZ�l:C~kN�]0��&�6�X��vHk8��GM�9g�f��<�1%���)@�÷��W�Ͱ�78'e�^������ܸ���rn�;y��bU�^g�����{��]��x20;c�Q�"���T9�KFKL�T�Q�ҏ'��}��M������Y�H��:J���oIm��>��h�N3�t��72�@�#�t�� �}�`I��ۼ1)N*���(~���/�j|�%���.=���-��\j�/*n[�������)'f�a!=pf�AD���D��j�!7ף/-���A���bQc��g�Q~��&����d��?`V�b��[��

�j�	��&dr���6 n�|F���nsK�D8���j#2O}��>0f����L�f=�(&>_ί�4knt�&���iΖGMߛͦ���q6P{i�s�<��Tp��,1�8��nޫe�������?�i����n�0�W

�T��t�"]
duFCH�:F3�����C��C7I<)����E��
�}��ʊ��3�I�lY,�u�,*�i���/ҲU��y��n������s�F�x����%���l=�X�v/��n2���Q(8Xe(�Sxe��$����v�@����7���ܱ�aZUz��D�$�h��~�J]��'3��)�OlX��o��"ܦSD�5�pj>�SLi�OdK��Q7�^8�$LIraj�d>�l�ؖO_��y���!�V��zMۚ�B���qQ�p�����_��
���M��P����>�#,���Ɛ�	��Y;Ϸ���X��l��D�E d"�eL�1&�p���2ܗ4�|����>t�&%�bHP����b��4����|��)3ʇ�|f�}_I����1�{^M�����O���[|붕R4�-���o�&�e�.��o�@<Ѯ��H�`�*�p�E�{Z�q]��
�^8�9�%F�m�c3�f��C��I\�M6��΍�E��Ҩ"2gۺ��/:��%��|?����wR��kmj:a.���e�՛H�ga�+�S(��R��.�#Ww�?
���]C�!��A#K�ݿ �p�WA�}G/7N���Ti�qN�9�����|G{���a�8���G �M�'B+�,p�0�6�� G��g̣�d�h��e��1����3PD̳u�3�D.V��$ނ��6��٤��ʫ91
��}�;^�b��6�ܹ��h�äִ�/G{[5z���Z�t��� �|�{�.���Jv������(����Q�M}8��B�u�x��&�T���w�u�#�E���
+���AaPU�D��;�ҷ3�r�t�����o��-���q��
��L�(��ޠ~�e����L��%\���']$��\��ᣡk� \-r��ÐuG_����Qw��橭�7���L�ƴ1���ko�6�,�؈R,_�ÖlC��jl_�U-{Q�؅e7	l���<)J�]�8�w<ދwS65�+�g��%��*1���T�&�V��� `���/ЁQ8�|f��T'ڍ���&(@�u�lM��E�����&�-.�l(�.���0o<�����
�LJ_��$Q''G�!�m�G,���d�|�<���$�i�t?P�wq�^:���nƁ�_��}��-����hgq�n�M�(���M���C:��[
+�,5c�bl�bU�7�v�Ͱ���`�0�x;Y4��_{䇧��-}Y�ȷ��7dz������0�WhT�� u?���P�&b�T%T�A�*�|I���a��-�䊽��qO�/�3cGS�-&_���d�S�i���w+����q�!����3=VV���lY���
��ۜ�q�$[�ca/��۩���!�غ�1n��Q��I����C��8Y�uE�6�N����{į��K��W,���Ey.me�6�#���Ձ�(46s��S�ͅ���̖��/g[�A�Wa��������w.���e��3���qY�3����Do�6�:D�W���uK5J��2V��s�&�pg���
"�ƃ�q�:�xU7�Bɦ�Y�cC��;�|C��mai��#��FM�i��7x�'���pyRL�
�I�N�C����`��pK�+M��y�^�L���x'oD�v‰k0��([�;r���=�A������4��هG��|���\��?�H�#;a��([,��h�	|+�u��t�&�KO��lp�u�"i����:Au1�K��N0d�N���ܹYM�^�\jv��߳�}�Ψd%^����F��P�_ޥ����+#�KK:���͡^f�s�&ʳZ#�	Ukyv���]ڃY��[���A�O vR�<�v����mL3(N��D@�*f�-wVhP�?;n�I�XV󷠟�10)�$�G4A'�'������r
�o�>�>��s��e�����l	T�{�N,���L��}�����x��(%�gLs8�"&�;
`��!!Exm�?v���l(OE~���pws=�Q˯B'L
8�k\K ����5<�U#�u�~�:b�5��^i���
���:{����B��}
� ���xq�i��\u�lv�@k'Q�P�-!O�^����F��7`4%��iB'�:$\����/r�6L���?5��6X�K=(?N/��m�:fC�w��qVZ:�S>���g��H�‘n���w����A�V���ģ
�D�Q�+��+L�U�
z��!^I��}��lN�.����
lP���
%�,�k�.#�V�)��oF�Y�z9
��tf�S4�"�,V��s�IWI��j�m���,���v����r1��8�)�b{�V c+5ο7����~G������w��^�����)Oy?��W��.�5"�BN���^;V���)������,/�׿٢=wɅ�X���O2.��V�c~a$yQB�F��ו��U �z���s15��b�Yy��c���y�e,&�HH�z��nS� f��%>�T	�37�u�t
��z��i��+7,aÍ��&=S��;�I߀�P���/v?�l�T��Ӱ��p�c��s3�W��9�z9����T�G�(��gD(���I��B�8	�}�5��3��D��n�h����^
��$ՠߒ��f�B.y���X���c��'���-Y�T��$^c&\g�oY}·{���I,�Z��L%��ޠ٫����ID�3[慐G��II,��w*�q�������R��j�AI�*�
��
0��L`
ΩE��):Н�H���:��~��!�k�5�ջ��@�]J
_\JM�Ba���z��pǢ?�Vq��
�@�'n�MSr���b!�f�h�dˑ+O�ѯop����qj7a��\��c?Uv祀AWY�"U��RUw/�3��5�B�cRBRi�
�.�OO��oZ}��\���9��}$A;{hS,��1Y"�=[r�����vafE��іZ���AbK�Ј�~?U��M�	�f|��
�_��پ+��u�����
�:IOY`x g���_�����|�Hf�\_R..�u�!��v��^�[�kG=p
U��\U랦b!�p�Ϳ�}�{@�fo����u��)��Ѹ�CA���maqN��k��v*���J��f�R��%�׽~�ifDd+32�P��f�ʌ�hA#(�/✈��̬��,��E��T_����؍Z����%Wm�[�s"�]��c����(b����o6����
�#�^���l�d�ʺ'�{1��	�t�1f���1�,
DED�{�/����/��+�h���vfQ��$�Nf��;�F<�!ŏ�Uz�v�����$
�?�z>�Jh!ۄ��5X��-�3�Fs��05~���m�8�h,,!��^��,:iϺ��Mh x�f>����o?�{���gVvI� D���=�RA��RF�'��l8�|~��U��^Cc��J�SX�5m�,��9��ۛ���`|���*������<�f2���kc���R���Й�B�X
����J�M�\C�[Շ*��h�tncu�;Fm�C���&��Ҩ��R�n�f�>ӡ� ��f|kzqzT�s��Mood����l^�%�VS��;9�͙V���C1�����>�!��m�3�Y�oc�)�^�d�S_�|f�+�$Z�9`���8x!6�C���e�KPB�殇{�;keQd�9�-�=�r�&ӧ��
��sOf�,ټ�Yt�}Z��LCR}��0�B%ݻx��V�q$�w�@5%+$ҕ���=jt��TE1�`Lê�	ܧ�k͘wO@C<�����0bD[�#
��l���"q�J�O��"�^E�@�	��`�Ϭ�f�o��Q R��˼�O�RgR#>�Ϫ�����(�G,�?��rGo�sQ4QD2�;<���̮~�����DuԿ���/��E.t4���bn�B������%���d�I��겉��[�q�thA�MB�5�-�*���ג&;�tLz��eC���A~��ۯ*��v21|
�ǁ�u|���)�Rh1���h����s����ا�.�%�6=Ҫ��=��Qr]yHz��"��F�A\��V��)DaI�\�c	U��ѰqU�ʒ�MAP��5�1$
���ڧ�߲�� sE�OХ6='P����Vu�}$N��	|�j�"
�(����}X��!]�6����V��r]:�msr�&u�*߮D�*�7�@�C�}2����W{R�e�r*��X��d�܇K��H��+L%�?>ԅ�Y��{M(��O�`=r�YA���S�O�\A�J�FvW�SlE��� `@R���/�>_Al�F6��d����e�ʬw>N{n~�q7�K��y���2.8��-nf��a{0��<My�Y���ꋫ#��s?1�$hE��O?�2���[:���Yh$"���|6M����d5D���Yے�5�s�@��QM���b6���'X͖���,��Q%XS/�~?�M�p!��j3�6șl'��O��~��|?.0�Z��#���d��j�߿��[)S�i�{�5ʄB%Ӳ�{��ɡX��Q	�Da�Z���V	��G�16�L�!J�+-��B���Q�~�,��S�`6QMH�-X�vY����zʀU�:n��
���3Pø.�
A[=jոN��g…L��!i���)d��^
H!Mz�/f�NԳ>�X�W�1&����^��X�gb�e!�=�ײ�'q�P��V�jv;C9��yce��-����ڕ	-�Ji8�q+�pXV��x��lM�5Ã��h'�X�=}���Z�����@A6B��L+��ܖ��+��7���lnG���ٳ�������?�=i����Ø�q�6�]cΖ�l�Ӊ��m�-�x骽���󘖚�O�➚��B���9=/��U�fN<�茈����"�%c�qPN��Dj웠k,��Z������kk�U�a8��6X�D�K�@��t�S�>N�s~���dUG��&9E#�^\��C��a�3��1+I�W�0N�l�9�M��S��^Ď�R\J����	�Hf�r}���O���lNv�Z��+��9�_
��Ɲ�)����mo1�@*��Ѣ¿5���$��Z.c~��Op�?s�(���cT$��{8�-N���c�xÓGo���s<U�dHo�/��0~�秽�7��V�5��1O��oM�K���#靋������+���C=46�F���dS[���1���F�z���ʡ���ty@l�!����hm
U������V�0U��&�aL٥��ȥ�aE�ȧʯ>���RH(^���jv�h�(�H���zQ8�����L�����z�b�FQ�I�Q��L�RgfQ�'����5߃���-9�7�5|���$b�}|,���y��o�`��s���y��Y����^��#mޟ���sZc�cĎ+8vj��x�fb�x�V�y/;ݎ�~����=�e,+��
g�gF	I�&�	!�>~#AN2�)�p(�ȹ���}�7�5�*�HcV�~��n6���o'��`�ř�IDpo�b^�p�1϶'?Z�,�+��O�q�_�~�"�$
$y*=V�"��@<���JpR"�g�?K��#Ы&���5�K���6%5q�2�g7(�RW6��I�31�j�9I3U@_��X�7Ct�7�P5�����\ͻ�OP�,��-�ݥ�)��R���$��Æ�&z��-�x��M*����e9�[�Xq��:M%ްl�6m�uť�"���F��%�~C���5�0}�U�GqB���g5��#�w|	���S��
)���V�2n4��iU�O��_9;�l d�X�u��
T��X����#�Y�!Y���Pe��Ly*C&�'����Ay�'#'�ĒuXp�������K}� LW��͉Ïw^բ���E_=:�<�<��}�M��/��kpS��`�a3��Y^*���lΗB�wJ<
,u
n�MZ_�n�#i@��ׄ[?��F���X{pzg��T�F��	�ٛ�XE����RK�
�PZ�a�h\(ց���
N+��b?����z��K!UǺ»���"�K���#M�&�Rm����t��*CP0�_�*��P&�I{C�&q�k��L����GE�D�p��t��c��a(GtE��=k'uV5PDF-�w�SlNd���dÅ�(���C��nIʘm�v���9,�u�dz<jؽ�\.
֓3���q�a�8)��2fe�er���J|Ʊ��-vLΝȕ4�\����P$	ߡ�`N��Ǔ�x���B_P�_
��oqdet\hK��� #-$���t�l��e�(�R{t8���e�]��m�kw��,��\���oJV13Wctf�G���
R��W?�vDY�lW��W�K���~PBNL������t2dEjω=����� ��e��R�����Iޱ,6r4�kR��v���6�삛��s��>�N����2��6�7g�|��v�Ts}eɜ.Z�%��{���'�5)�0"��N�@x<���7��[$}��j~�۵���'��~*�<>"}~��`�Խ��.��	��[��Aa�o���I��p���*��)���{�m��/��^�,�L½�CWH^;�-��}�z#ghq�`�
t�%�k�N�#K%u�ŕ6xC�2�x�\�H�?s{�?�����]�J0l&��[���t0�z��mj��N$�����6��tc�>.g���_5RW��q���L⒨��D����
��b�1�dD�x���������Wf2T�jT�R�"�8`��osv���h]�+�ۭ��~�]�fд��+�J�5�����E���'�k0�*�VZ2��Gt���Ŷ���a7�V��3�DŽ�7�	�l�| U��_ʄE\/�ҵ�^��و�`˙���}݁9D��[����g�Ƒ�ݺ��]ֵ�;��P˳�&�3k��#�D�;W��KY���d:�v��o����|�;�pۄ�f�UAw��8F�;�-�L��*��Ɩn=ǁ�!0!�H?���)l�@y�8zL�5��c�>��!��r�zo��'\�j��RS5s&>��&�}�D���"b}�`��<o!=Ĵ)ܡ�S5�8n�'��B��g����`�h$D��hH֭�lg��qmmicL}C���k���sA��5"X��%���jߙVا�����b�ۨ�Uab��7�eKq�)T�P�C�l ���!�-��#k�����+U����@�z�~��r\�Vx�m^���۶̚��;�B6"|�������KH/�B�#�a�p��\�Tw֝YA�d�W$ӷF@��Gm����	�F�����8#���w�L�dL}�X$�Vt�1c���v�������\~���a��Ժ�F�YZ�������e��e���ŸW��_!S�<�s"&VH�cfՐp�s�G�Bd�D��`6h���ꃵ0�����D�i�#�t�Zݏ�xU�CHs�O|�֮��}���[����c��8�����'�Za�Z�ć�����Շ����;W�+�/���:�(t"�ݯKw��=wk,��ݗ:���>�ſ�l��`2�J]F�E���-R3�u\
�C���Y��
���@�ك�[����O0@���x̎g���avۀ1��d;V�d��*yR��é{v.M��}����F���Yn%�8žt�9ps�R^ڸ�'z_H7�x���~�<iE4!��,��F�1H�!�{�.�s<�\���Y;�붌I�V��&`Y��r�(��ŏ�}�.���qv};��FO!�T��R���^ NC����
��sڜ�K�c-�sY��h⤩��4n0��7�|�� ֠J�cP(���κ�C���џ�7}2{�bz�r���9>t&77�Wۭd^sJ9�Cw�>�aJP��:��aHG�D��2z�5����ɩ���2r\�P7;Q?��i$V��1�гI�ٚgN��y�ž��S];W�xI�!��.�}rJ���d��T��Ef�5�e�\B�g4�*�I=�ӳ��D��xY�o����6��rI ^�x��<��r��t�{>Q
4ݞ�� &JM�k�sR�a�=A䂮�-���*�P\�)��Tut���a�&j�bD�b�g��5G᠗��HB/��ˉ�#uy.bs3�ٿ-c-&$�@tʓM�<,9�U�'��W���|b0f܉�1]�������ر�Vu��Q���[��a<�~���{Bt�S���o5�=�-+	�l��b@��v4��N���f:��7���ϥ~�a�G���ӪI��^/R�!c�a*�$V%(;�;���@L�p�:�$���e%4=�ӹ�n#�N`�ֶ7�7�E�1�6;;�>V�ٌɆM/3p��1-�(�R|���X=�zu��a5��L�ԧ��
�q��,��WU�hO���'��F]�|��Ƨ)œ�xt�T��Xu
��Et�v����T��J>X,0�h�R�\Xy�%��j����iY�-	�R-kj,��uMh�ؠ��a�[i;�|�ǒ2����O�;t���
z��Y�ԗ~��9]�;��1\%��M`C�g��S`�=Ym��E����I?A�	��ۓ9����d���%�O�Wխ�T�!�9�^x� B����%=��g¯rU\�HJ�ܜ�0�f8����W� u���6[���y�N��:X *��Ț7!�-���
�{H1~v����@����#�SA�PI�M,I�x{K��P��5�`�!<	e�@�,����SK�
��֩6���4��1������C���[m��dǢ"_.��@��6���a�pBY#ìT�����ό�UFR�p?�.a�9�G$��hH0u�J�/T��i�m||��_�Z��I*La¥�v�%��U����*)K�0I���f�/�Q�R��G�q�(1�e�﮴k��!8�Ȼ�ʟW�
X�� 4��K]�늁�9�Xk^������|�^O���6��7��l˩ot��@	�=x�?!��qI�[r�9A�{��t��@qL�����nˠ؆�+˜�b�aF��K�ph~�䴌\��| ��>��xu������c�t�ƍ��5���,u�89OG������I�]�ዉٻ�dž�-�dSH��w�Ωw~��`�~ݧt��A8[�VIbR.���Wp�jt�1\(���υwv�����tRD��4�;K@�3&��:0��"l��V4�Mk����4y����ʗ���S"��a��a��>�(QnΙ�k;�7�V�M��_�=��G-O24+���{�"���S�]q���øI���`���<�FT���[�4&�}��8�MV�#�g���S?���u<�_�
�gs�ШQ����oK;T���hK�I$�M�yǪH�pqĄIB�B[�B¤�%�f9u�C.���N��R�F������J��bn󣻶�?��'�j=�bt�FDᵯ�υ'جV�P��5�B��zZxA��#H�kx�*���X
�M�t#@8]@���@��7$�L��uX��)҃�,�����b2�wz�>1@���曄A,�8�D��qQ�w�D����pi�2�L;ҩqΫ��	��
(�K�ۚ�1~B�&uf9`uf�8��Ú�oI^��Z
�A
+?�"�J�8����L�\�7ҁRc���	��-r~�����ӊ�:Ԗip�w(�(?��A����-Ce��
�+�R�̚�t�.,.x���k���FԪ�ta���Z<��C
?xj��Nʡ��y˦��vl�`�%�f#�i�w��X"�$ߔ
���=�A8�U��M3���2�J�]�qU�+���<N�/Ok|�&
�$��+t�8�4t`��vd.�I[��d!�sr�RC{Y�ZY9*lAa4OR�X�x�OQ-d�n�I|�X6�J�T��7z��|O�����ҹ.q�W-��}	YiP�d�F�� �Ώ&��/��Lr�@l���e7㑷8�S�먖�8Dl�P8�gWl޲	Q��<��O9��."ۇ�T	����Ǹm/�6�肱�T�)�}��T�zټ�)�X[1Wd�Ї�֬�#�c)n@뽧��9R"�EӦ���)�FgT�㠾̗z��>��O���-s���4�OفbR�����Zn�2�QJ�9�!Ijߗ�7�_�g��R*ř��_�l�ޯ10�i�7����L����JDf[bNRs[�o�y�J��b\��w%D���	HF��`~��_�DN��e�<UKд���UP�3�~�,��C��'���<�<����;��v���$*�A��R������	�KG��2���S[����ݯAǐ��G#�M��w�vuI�@�d���F��	�nݹ3�O���1f��=�sֻ �kL,L�Hʅˆ�E�B�<L�2Of����h�D!~K���p%�?��-o/I@Jz�MØ��~�Y�E�4ϞO�U��6��6�͟��8��pW�������5�p�	���L�/�g;�Q�U��uD��w�g�6{�t��$}ZDA�]ule�l\�z�0�.��Z$�y{�XNg�n2�d����ݢ;�gOKF���295���S�� F4V�G֓��5"�wB��Q��
���rA�)˶I��0�֡���/k��4���IF��P���,Q�B�h����t
��V	��+����D-����`'�A5��PK�f�5�9�ĸ����}RЗH�?�:��:z�w�4�x'H�!~��8�|���w#�����wυ�u�B�P
��ɵM���u(&�����FbN3� ��#��\�Lށjv$o;�51ij�`D�/����9zzt�(�v�8]JFa�q��Z�㜕)&f�H���h##A���0p�u\}�en�h:���bb@)Fz��̛~�C�$3��V�Zn�^B<�ڜX�#ݩM�}��hR�"��ҵ�u��xt�V��<��x�~����b�q��8�~�}��k��w����t�ړ���ۖ�Ԟ��J�H����r��P��~���a�ޱ5�h�R��w�}4�Ԍ[�F���}��TL���$dqB�%�LlA���g�[:����T��ŞUZ�"��U~>Dr���̾wmq��
�ϞR���}�3�eĤ��퍕%S��ɂ#�:v�g<�R��zc����On�n+��R/�w��	�
��/t��y��2�@3A]�������`�*�G��m��͙>ӓ�<����@M�j�ȶ9�6�aI�qt��RJ��~�^��D,9��2�K���@��=)�$(0׾ڪ} ��1,Ft�m�0P9#@S����fx\�8�̈��~e<E?b��DZy�mAĢ��
N~e(���/�9�|q�P,J��D�>��HY�,�Y�.rx�*<</u�T��H��5�\s�r���.RU��2��(������G�B3����LF�zsY^�
�p�LPˮ��l����7�2�=�T��hC�(m
Os~i�U��f�e��kYJJ[��;�,�aH�0o�#��Wd"Ԟ3@v�FEG��u�6|/"�{���K\��wmN�����'���Є��po�B�!	z�3�&���}�q���?����C9@]W��<���*�g�D�9jAh3�����Ɵ�.h3A��.����oK�=:s<�չ-C+� ���j�@��C"2��Cys9>H.$������n���K�	�F��(�ɀ����:�։	�.lp�Ȇ��!"��K ��-��v�q�
R)]EA`������RL�fd�A�N������}�%We����{$�~+����w>�(1$�ncW�Q��Ls�>,�$�5g�,�1p(�!�v);$�Ƣ�J������A�3�l36�|Z�3�`���i�Ҕ�e����{,��6d���XK�ϖ&��f�'W�v(�![���,�!KW���nP�i�OKv�<�P̋"5Dx��=�M/�8f&"�/�e�c^��d��U��R�Ig�]��g'�V5�J����K%�ͱ��7�h��k�S`<]I�xY ���?wT��I�=W��CQ�Vl���A�+�����zi����5"i�uYR!���/�����d��'��ֶS�o羺��n��(����}��gӾO��$��U�r*�4wvQ�%�C��`Ie`/����
���|;F!��,<����
?7+�p[���î`w�.K�H�n�"��X���	N��o���O}�O���k�8�g�m�J�j?�J�Jn���h)2:��)��X!壑z��r]��=x����#�u'D�ϦE�ʹd��9�*"�V�̙�
G�d19�$f֑�"F7�oR߬:,u���~)p��ˉ��"�~�1���3M�|��{:���9��^��Ov�`�m���[�t�ב��3���`�
S��7[p�������f��T�O-��t
�N�0�3�m2-v����)rD>
@���cK��a(��w~�:f
+�2�y�-�o3�A�(����&r�<�/�[KY��z�a7 {�
%�!��"�fL�^$�<�"-�V�Ȳ��\{�����g|y��k0�C��j��L�Nf���J�lR���6鈤
Y͞N�-�%�*��e��2�
�+h>��KE�o:
��e��$��u��E/�+5ҽ��(��Új�3�yZ��$�S$��2�y�dd�&���N4P�����5�Fi�AB���[C�7�9V�����sY�5�q˩��j�4�����t�������������;r��+��W�c���0�bF�0�
QvI��l�}?��(�H��,�ʜ�[⌫�M#�jd�d���[!{ٕG�5Mb7|�t�?7����^d��ȭ�:<h�ٗ����R�����E���[�@_ҢQ�l���^R�vv�-���A�}!���z��Xb�_��9��n�8`�X��<���֤F�(���y������z�	g�YJ6N?WL�*�u�_4���%F7bYS��y8^��ЬWQ(�n�m�J�N&��h�y}���W�WNF*�H�?w�<*�;��N.����L�ʓËv6��o�^35�K�͵����_iN5Jm�Z��?��B�E�^R�B�j�y�f���3�at���x��a�y�E���[�FD͗;�4�f�����}��2���s�4���`�dq��JĚ�&��ω��/�
����$�(�;ن��R	7S���~����+�ŧp�a�
U�܈���X�8�S�[��(TD��I��k��⥯$C���%����r�H�"��nSTa��1dfO�=���x*�1:����M��>��'S�[�Z�,a��ය�`���+{���Г��ޕ�8������=���鱗O���������D��?s)Ox��uH��r��Be�~��.����$m�5�7p)���N�"v�Y&�E;/�e6�ϸ�����|WX�_�_�G[��<za���'l��Lw�h:�\�)�;�������7�0���g�):qA
�L"��5��S�����7�ɱ�LG�=��ˎ�Ϝҿ���A�و%��=�e�$���|�b������,���/�y!MGY\�@���F��I�������3j@�HY�I-
�� �;�n����`N�q�����J"�M��)�1�:���"�L�J�]f�7�y�)������X��K�).��!o�I�C�'j�Ē*��E�
'֬��U� PE/�k�Pl���u��`"�C���K{����R*t�%V��fQ��s���=��QU/�V�r��_y�t1K�[ÈT��L5k��W-Հ��ܰ	v�NJ/�B\�t�q�`^�^�7Q�
f�J�m�<ܨ��[�w���!@٤�Z&r���
�j� g��&�.8%Oׇc�Ȫ�T|����R�R@�M7�|ﻞ��D"��o�O�
[����O:�`V�l�2)&3��){�Ut��7y�Ry����k������
��{�K�-��Sd�Ч7�E�6&��g���D��
�Ymw���{�RƉO�Q}�A�c
�͡@
ל��zD5�P�	zR1�/��3�fOי�[�v�c��uݯ�3�v�.�p~j���M?���%5��q��g�֮���6� �8��B���Qf(�?I8�[B��O�<W�M>ܰd��!�
*���ڲ��D����g���!���r��_�J}۞�L��:�Γr�}Q�φ�G\�K�
06�.����}����il��n�0(۹��ML�m-+�m�Κ�W�Y��ĵY��rO���XX�
����A�7K�����B���Q��[�"�N�_�:��9UFB^^'�ɞ����d���wxؖ��d.�2?�oL�G<��{�����LJ��gw����{%����	�F�|�r�H�CgS+��P��dz��P*9)S�>
)�t1�U�I�t�•�f��T�"��Ŭ���b�/���ȉ���ؽ�$i�3a�o�4� J"��_�Df[,���f��h������?4�oLl�
p}���Po*�\���n+�+��!O$(Pĝ$�X,�٘VS#�Ǭ�F�B�\�8��C)�n=���O4e�c9�9�*r#�_mBQ��<c��;5{�b~�O{���Y-9i\��.�\��xv@����.�y^}`�o�����x2���rd���ƨX����i:��5���Z�X'���~3_K��a�$'����$�)`�3�v�_�k�r�R�o��9K�!��̂��H�i�?�UҼ�0�̕Y�	�/#�͂����|A`I��t���K�q�҅����~T՚^4�GBaHz�q�Y�~n�߂/�NWezjG�ndJ0X�HL�#�r�5���t���k�#���F��C����e��@��P_�(ޡB?9�����L�F�;+��{Gqϊ?D�Ө\77jzW]��Q?���hӊ�|%���Z��D�	�=>����|��]��+��0�$�gOS�L��g�|Hl�tV�"m{l�V�v�3n?o��o�,��U��9�w���_���L����#��!��^{�-I��v�݋N����,��[��ټj���Q�͑U
\�6�����y믕�`>�����_^���p�H~x<���0"M#�N��TU�n�F�!l��H@�`��M&���ۏdk;�Y�kv�(,�r`�W���&���Bca��Bx&<�Ro������o_�y�n�>�i/ƻ7�,�.j-�i3�`��<gT{7��/��$���Si:<T���E��q�p1x��;����0 �$r��2 DK�hx���-�
��zVQ�<jTn�Z�`�W���`��P��s�����vD-m;%�x�]�7[�q���
A'iA����*����EޱS�f��#`��'�2��O�}g�V�s=���]�Y�����e}�)�I`�H�T�C@/I�k..7�{�j�H+���^��<
�J����Xқ84Y��	2A�3*Z��s�!�>*}���S�O��x`��g%d�Ry��q�d_T��;7��n�5�R{:5H�\���Zc@c�������
+f�X��C[�g>#�=(��9`�V��W#��
="�S9�(�~�������D�J)`�z�5s�����!�}�Wd��fPb^T��.p��s<�y����
r;�O��O�Z���ɼ(^�hT]�O�]T��#��Խ��:?X�7fq&�.���7֠��yWV5N�II˯�O9�J�]�]��?�o�:q��V�«�T�8K��G��=�M$J&�#r����@=$�m�0�(��Fd-A�TTD�jv�r&I�)ɓ�,�_�i�hQ3�k0��{��"ٌ���F�5��3ݔ~ۈO��/�N����U-�A��S��os���:�!��rEo㠍k_h�gHAj��k���{tP�����]'�x�6���
_�&I�{�hw�bE��caDW�=(���q��Kf=�xaL��Z������}im�|�����c�}9��Y;*<�A�i��OfA�F��A�L��_l޹
��|����ږ����Χ��5n]b�IИ�����!ϩ�8YGV�k;n�a��tP[W3���K)�oI�s����6����LY:�\�e>[��+���7�Tq��l�l�0�>�J���5����hqY��i���H�th�d1O�Nj9�y��ʩ���!�q����^Fh�d�����A��Tn�R�+R7;�D<�:Ĵ��Y�Sg�6�v;#��;yN�7���{sP0��ɽ���&X(�,?Tx��J�t9�%˂�l�T�7�(5~Q���)�ɺ�
}��9_������w�0�#��~���x$�E�]��Z&�*>��x�Y��Ҙ��A,��J�F}� YҮ�_|�f����pF1�ĥ�`5?�U����j}U��P�>�r{�{ۃ��
U� �SՖ8ϭ{�PT����#ah��-F��r������-|�u�������?�ںʐY���]5�9|�%�h��.�I�Kg>)py���hԟ�	_��(��3�(�'i�q9'%�d�)�`]��ŧT&!Ϊ�:\�׺��ÿ��rz��?-�Z'��\2�iqOWЙ���\��E�u�h���~V‹�d �V�=�v��b
۲ݪ��Ux�&k���7���8v~�)�Qʀ��#��7w8�\��V�������8 ^�����ewK�{�}0��m/�+?�ı��<#�Q����Vӥ����G0޼Ɲ)X���1�cl�./x�X�9n�$��I;�D´~:$��cl�'�uG�,�^;
u�g�
<�oՙmᷭ�8g]��E���K�0���"�ɪ+��i�h*��-���U$���78��W	=�8��5]x�V���4F2Nb=�dB�۠G�ƒdl���,�֣��Xy0�t}�j�G�s����=��69��X��.�E+Wq2e��� ��Ǹ~e7�5�l!���P����u��~<��K�ڛ�N��3*��7�J1���96���Z�@�J�4w''����5��7Y=C-��-�Z5&��PE=�=˔���K\1\rkR��,BL��d��rJWT��"�$(�Y6���o���R�K����B#=�Q�vn3��d@ηyz:�޿�{�&T�tX��OS�CjQ�Sl�!�[]`B�O��Ԝu��������[���}	�~
�Tow�ԡ�5Q�
��y:�IM^��h��q���Ѥ`�P����	�X������t�w;H.�;fq�T@�-���9��� ���{*��U��:%�K������1gJ3ė�4ܲ=��Y��IZbQK�|WU�_µ��u{F/�򺪽�UAP,'Dֻ�������F��z�?�eеI�*^Ht�Rl�܌����Z�*�‚	{�������{@�H'���F�'�TR���M���n���es�CK��:�EA=���A��G�� wg$�ɥ�E��i̷����	��>q��@��0�Kڶ~��E^+%�9й��W�XU�βt-^�`&�`Chk�ҵ�0�,l��z��nl��/p/��v�S��T�gq��dо$/L�\���%��,_[˄$]3����#L���f���@f/CK�����j��R�U���d���cq���6A�Q�
�j);r���<+#\�@��
�*ry �8�wW1
_]���9�+q!x�r�n�ܸ⬾Ä(w��
�����ꛑ�N]b�k��@�D�ђ�M{bN��R�f<$cY�o�a߀.B�n��r+����:	�����&Y���
�YE\��a�7B�V�$�mw[�HV;o��;�L �|�"�U��B��d9_��}�we�)B�����X6	J�)���ӹ�4�Oƨ���a�w(>�'�j7�Ɋ�ᇡ`sґ�i��-[n[jBZ�S�~�,{������t�E�n^ZE�3��1�aV$(4�a�iT׃�u3UJ��
�U�L,�.�����A�U�q��ySQ��U�GaV������f��?�̽�S�}�ۮ�r�.�t���aL��{q+z�PrXI^|꟎��_��1��	L�T�ct�{����8�ɇ��D
��;fg��+2��5m/�=�䧦M+u�!A��ien�y��z�d,ȿ0#Յ���w�:�o���[�_1��p�0���2i~l��p�w"���}Up�Q��HhҨK)�W��_:յќ�y�m��c���h��϶�-�/�(c۱qqȒ4i
ɬ���a���{2(��[��?��ǫ�&�0���|��G7���r-���o�8��+H��/�y���T��'{�Bu �L����wP��T̉Z�	��
S8adJbI��.u©~�S�� �Z8+��><�ġK�
����lC���M�#y��<He9��NY/�O�������T�(���Ȅd,Kq'��<FF�� KF�Qiv��̧b�r]����ý�/�w9x�j��'��u�֣֡aA�n+��:}�j�L���H;7\�Z�K!̠��[	����F��	�	Dm*��O5~�=��{�������@<��҂�T@�W�kt>�����qjk��B\�T�h�Bf�\t��D���uMBY�y�/�u��7ʝ��#��ѹ��9/�����?ұfX4O���UP�;���@�<��ڥ�����e�s cu���D0W�z�nw~��Vl����86����b�"m*vb�����ƙ5P��}�^������{�zKԑ�:v�p$f��u��"�w2X�Q���_M�t&{�GO�&��Q�MXq�Qk�`YP*�R�X")䍢!X<�x��u�9��1%w�h�l�4<aa���r<R�F���jE�����-�-~-x��pp�!Ha�Ƕ�@���MqD~�"_%Okq��p��E�x;��u���Z�	6&�]��Cg|�8W��;��0ߍ�������/�3�3p�.p���(���U+�d��h�ڗ�학����6.H�s�iro�Yލ���@m8.~�Γ��1�Ń;<�"�z�s2æ)����ߥ��Ml��t�^E��;��7��A{FZ�k)� ✥V1q@���p�QG��["�d���O�3�BA�1���S\��Ib��:��D�0sj�X�}�2���n�����Q�̸�����@y�F�}�h���Kȓ׊�Q*%��~�%�mf�|������)F�e�9*��v3G��H�vd)�b[�η���>����_��̨B��i�� bƪ�\L:��͕�A|P��k�̸�aGB�R���9,o���0�E�3
Ks���>���yN�OLa�pvG1�����Ik�Ne�R`p�|5=[j
X��xWġ܇;{�I��noܢau͎���N1a�r�*�Q+�w���xm�T`E�Q,��sW�T��<��˿LV�J4�;l����1���ȇ�c��t5�BQ�>����(�=lj�2i�/���e�Tv�3�����q}o1�⩄F��&�ެ�X�2�T2���Xĺ�J�Ao���@%�/+w�8�9�°��:j�X����*�ѿ[��9��*䄸�Q�&�s-|��.oWQ�^녪���i���du�/+h(]6�2�F�gmR��6m�R�>���.�I���ڇxw����BZ��9\
E��8~�a�uC�l ���#h�ہAJ�U�6����Q�-����zE�.��vV�F��^a]-�� "
;B��}�I։�o�b@��g��)s�S�`���$��|p:ް9bM�>�~�������m��������(V�ML�'�<DL^u�͝��U��hK�F/Y�v�Ź+�@g�x~�p�S��8�F�4H.sU��9����>F������Ղ'��
���z����.�i�Ұ�W������Iy�;���Iտ ��}�ۅ��n���
p�ylh���	�6=�����Z>��/���E��%��*����	�I/Y	W��r��K�L��wSg�hI�A4iֱ)��]��R垕��ؙʵ�QE�J�Ze���Bo E�]�3:�U���&s��С%o4�
�IKsB�D���κ+��%�L{@�kF��Pu����Az���~�ڗ˄��}z�.?%@��dN�0~�v#l��*�\�,�ڵO�=�#����,�����\�E�a����O������c�d�u��K�Ԇ�|+.�:��B�t[�{������k�t�l���ύ�?�ˊ�R���w3s��]'�-�n۹�eC��e�Y�	vr�F�0z���+ũTJ�������5����O�۳xxKՂ/t�$!�0檲^�UPGX�2������Vs�F�|�`��)�7:~��ڶ=�Rw�Fݖ����A��w�3�\�@A�\2�p#�s+fn.�Sj&�8LX�\0M��,�OIo��i����il�b��v7K<�d�2�JbOCH���x���@u�/�F�4W�wK��F�g.��!l2�������Վ4GTԸ����_м�w7��SP�>	;nY8��G{���CTz�М��D�ֺ������0r.�X3J�ApI[�&#�6[P~�i��: ��>�'�:ճ!o�A
n���eY��.���س㋱�3l�X�ޏ;|a��~mg3�f��u]�p;�5�AZ<̿��$J���/C�9HQ�"�������
9u��|�A�CY��	��u�r<�h�t�(���uw��4�v�*�r�F�	�q��n���K)��#�+}@R0@�u�������]�7�@a�Pȿ�g�Et�3��grI�-�rpc����|J��u�-�.YX'��%�M��)r��	Ug���À^Cv��oj��缌��٥B䬳�f�����G�� M�g�d�bs/܊���L��,����$��n�q-�lY���A�(�8)�3�pWz�Ǔ~����zk�ﴱ��KQK��^���f!�vFOt�'R��(Jv��E��a).v�k��A!�;XA㴬�m��ׯ�@��kD�'<��`}��W����z{F�+w]���Yz�����b�8��
�����Zƞ4֘!O5m%=`�`�Fa�}R����<\\lc��Դ�2'
\�e���=����+�+����	��՝M�qSX�e��
tLgk��xo�p�&F�5�@H�
�	�Qb��D�El�
����/��q�1G����3���;{�ǚ/&�/���k;Ɵ�>�G�1�۾"�Ib�ߔ�Z�{�@�����#�;��H�*� ���B���9��r�w�@B{�cqS��\�6�H}G���B%a���!��R�kGnQ��9�(OEy
ǀz�G��z��1�I���x�'P}#Ѡ�\{1��\��k]8�<�}�cv����M��4
����.��?P%C\����u��8���u��1<O�C�n%��*$
��4����J��hM�5hᓵU�\&a�d�U��V$??<Ēڸ0�;?��j.�de�Y�ؚa�%*q����m�2
a�@b3����A��5(l�Zs4u ���!�L�M@�
y�̑���%� �p�
�����Z��<�b��l�h{�2g�k�"�n�}�P2�K��/���Z��iW�pp����-x�{�h�+��~d���)	�h�<pU�BX*_
XB�K�lLG��1}0.��#�|l�U�_�����5�,��o���y��hke�������.|#�ÏRS�!�)W��A@���ؼғa,8�Q��'1�F��	�sŇV�C��x�뀕~�!�'��`E�L�`:{���p(1`�ʋ	�W��Q�����d*���|SZ�F5@Mv�R!���%K0�Լ�E��ؘ	y���a`�-��俷�D�ep��)��yy槁���\:�]��=tt)��c�>�$�f������d��(�E穎cz4T>@��9-L�L� V•v�e��0��P6����F�����4�BAE��ą/���
&���=J�7ÜI��\/>��j�6 :�	:�K	�R�
:^��[��u2��������l���W��|Ub)5����&��l���\�� �
�єZؕm�ǒ�[�h#:A;����(���`���"z4��_�B�#v������!��``�"gس� a��٪5?�S;!���3�Oe��i
���yr^C��߆F�޷j������]’�(�:���',�2[Y�����V����?>�h�<J��S�'�Wx����k��2��`�/�1N(.��?ġ�}B+D{9��͵��W	\j>��_Eik���֓�*D<f�����[�R��K/X�U�#��q��-n��0o&���η˗��)@�1���YJ��د��������	L҂��ܗJ[�-�H��/{��n��I2*���������`�̥���^g��ǒ!�dv�	t�m����FD���	MJd+~n������<$����� lp�Ź�g`o��)r�� !��j,�
ub�5O>�wr�}/���`C���0O9؁�\Rg�k��!���h ^�Fq�ܩ��b��0ۏe����C��I��ʇ*�Ir�>f8!���=l�i�z�9+�}���c�_���	
�~��P���;���RWxsW�#�]4��Bj5F���� ��Ԧ%��}������6��
�4u_M�EO�I΃ӑ�3�lni-���o��1<�}��1
�
�.2�D^�E4���g��(�K�+�D�*�(D�X�\�bG���"��DO:ZlQ./��PE��re�j��S �E��Z�F��B�&P�:�j�0)�6 �m�x��.
Ӽ{K��_��KIK�Q�k}��']0��XZ�.Z�=��%�A�x�oe��|�ݶ��nY��E�]>m�&Y��5�׋xc-r��eis�
s�ޡ� '.���.���Ws*�\��>xe�%'p���?.�ߔ6�g�Q›#��p�$�{y�E@�F��t�ke'���̷y*��b�
��x���	�oI��E��l��������L�,�s�sc-Z��aԝ���m�fa�%�5\;��~}��eZ��ͥ�3n���M���^o���7�u|Max�D�Yl-�h&�|r��G�A",��(��<c�3�QEE���k�)�����dYg���#
�y4�A�Sw:Z�m����E6��u:ň3
���.���n%|=.�F�IUiq�'�kSp�j���j�P(Cx���qsi�6�j^����i��N�1��e�Ѓ����@&�(�.�RJ0��#��bn����
�k�e1�S�g�I�2��#�b0����9Ek��%��i�Όe��=U�O�i(���M��9|w�f/C���[�"
��/w�F�Dn��NE�׫2ᐖ�U�"(�X�2���2��Q]&K���ؠ��{�$`0�ƽ�=��A�H�{��>�2�a� ���M���o�M���Mzok��!4��ؙ�{&�8���
�2��+L5.^��!6~�xQ�Z��9G�N>~���5^͙o����:�',�;�� 7�*�hG�8��Z��I"8�ߏ�m�n刈X���-�D��^���+0�`y_�?��c�n�{����@����a�g�.3��׻�I dt����
IU��1w��MM/��!-M���[̩&�X��E9���6�
R�m7���3DI�j#��i�}$��W�t{�ݖ7np�����u��F&QDk��`M�#3�:�Zv�P���%��
&*��u+��~iK�����+J)�sS�>o'F������f	��H�j����x�׫:@�D�X�	5l���\K�����zǹ�
�V2�ο2n��m�D�'a�\�'S����\�{�/�I)G��&��I���X��9�5*��i_yTM�җ�nSe��o
T�i��@
�����f�'�H
>�sZt�RP-a�.rEDpۭ���N�1�^�7�	�f�K@��7�R�|i��"�!qǹ(r�o��d:�ി�*�������0u�L��#3�
�Z��(=�LV�BP��m�4��õk2�B�fMf<"|j�a�۩Vy�;;��q��=�4d�mue׺�L���md��S\�_��y�T��U�>����ʇ��CE.��`�59��&B�_a�Q���s��_�a������z�&��e���f�l3�m��7���2B�>/�����i�e\�p=	���&��?2>�R&U]�(~���>��.�F�����k���	���Ҙ�����Tz������(7��C>U�R���Up�����Pz��f��[P�5p���Dš�H�A�ȮX,�c�X%{�X����}���!����,�SܜX�U
����G�`�����|��<e��c�SJF�n���#2f�9ٿт���@�VƼP`	y~�����J>�&/s`1ߨuKd5Z�G��F�s�:	*0ے2*g��D�b�r�)�@�a���Yo�Ͳ�&k
�):�D9\��K��(��ף���L24are��j6�J��і�H�����l6��s]*�<&VQ-��ə�{��=d�=�7��ڀ��<�zP�F�i�X�\���d������:%���r{k��ryX�����+.x�>U�%�B��2�
���k��q�m�}A{�}��X]�~]�@�����TY���2@uB�(|/ (���΀������I�`���s*�&�4R�
1�17��
�>��#���|-��N���S��B��
�T���
��B8O�(��v��M�w~fw��q���Z:�%�DZ�;��2r�Iz�S��1,����k���m'4�2�����Oco�vF�z��cYe�Z�*��J�F���hߘ����Ӝ94�.�x��s��G�½;�%�CZ��q��|�?Z]=��x���웜����MXi���� =fycՇ�
u�}�Y�9.���i[�D���jqk곛�}uE&>���Ȣ��~��K�~�o�y궺��,0�xy���k%vg��,�-��A�pW��+D���.҆�X��4���2���;��y�2<��j��Z����q��k�L��؀�Nj�iJ]HbHR�a�
�s���;=�b�ծ�|�(ٶ\�i�|��&�`JGG��{���1�4�]@R�H.�����a�Oسw����D��1�A򞳅U��f5r�AY�\.��s�e�Em��l�qwt&R�;�a�6�|�
��I���
���{u
w���l�x{՜o�\|L�Ɨ�?��X�8� Z��l����H���"��������5g�I�-hAW�#���`�^jL��և�l��8-#�-�I*h�*���+@$��ָ�$q�.Q�Gn���] Ԓ��d������x?#�;��"�����^7��.毚*v�#��\�,�I]����E�,�>�`�)��gZA7�$ʛ�\�EK�x�
���°��};�Kϖ9�GF�>үq�t��~m���N�Ir�(�����+8�-ʨ��!������D�@���f���J��Dz9�4-��������})Y�h�Y�tZ��fQk]�'E�`�C��V�NТ��H�e�a�0VY�ݼ0_�GdL�|�?�}���gm���P�������snz���f�05�XM:�n�On�f�1�*0�{g�yN
�jh�HӼa��Ĺ��2�7T��M`*��a��(_=Y�_n!���:�Bw��>��~��&֎��i��g���-�G>Y�Y@����\��5�X�����8�����yD�E�`�]X�y�ƅǼ��1\&h������έG��O��/)�
�ac�pf�a��[�ϳE��R�üؚѹ�	
UϏ}:vч�:��DX��|\P�)�h��Ċ4G4�p;6-aC�ui�L����
׫*�����z����_�h��/+ͅ4�ӂ=�M5Ψ�xjǻͧZ�*��k�J��%�9�6��L�[$p�,�S������hr��}=�p��W(��_~���y?m��=�zM\rW6��Ss#ym�9�;�'��c��W
j
���\�굗_l���Y��-��D�>��X��CQ.cy~����/������������ii�����R����0� �$�NCՅ�~HJ#=��J��F�K��'�\ғmd%o.�G���å�}�1����'ԙ-��;f#�aX<c�����\�^��c�X���cf�27+����<z(�$Q�9�F�͝�TQ�xL��p�z
�+w��Z1>�ʳ7��/����Ȃ�ǚ��0�f�C�N�� �Y���V�i��ζ@/�F��T���|��>#?�u}g�Ui�F�y��NrS�\$��C��^-m��]�+�����0h궃��M�@^��
�E|1�k�Ԇ�Ӎ�w����]�Y9_�,/5K	�A��s�L�=��xT3i�{� �
N�����n�_	@($*����-T悋Ԝ��0в�i�
d_\��V��+ܴ�X2l�"~ŒsB�Uc2�R��r����N�rj3�+��F̛/f�����Afr0��y���,T�B[5&���͉.|8왏e�X�[�
����T�d�uM �6m@Cy��x^c�8��s\��D
�2�h9��&tC��@F��
�A� �1߻�%|�9H��v��
-F�D�#-�|�!V���QuA��|l�C��^�ݲM8@B��ܯ�R��d��eW��\X�snFoi,#/��GZ�jA���S?��ty��~CcJ���I�
0t~�/����S�W����t������vkD>�b6j����%�4J�8�;�5��ˈ����Ϗop~�A�y9����n,q��Q��o�w��C���e�ck�f�I��uTD�#0�2�7�tlp�Zִ��r�7�d�oi��.�Ϛ��!��b�R뻁��]`��R����S�����s{J����_��E0RF,z��\��Rya��/n_��kZ"�D
�O�Q��4�4���
0���3�� m�AP�8Ъu�qhۥ�nN���5�̑�����PA�z��׫fZ�՜�
K'8��E�Cq�<U�0dp�젙�}3v_[:4˔%���@��
*����m44�4�Az�ė�h�^�_��#����e��ڱ�X��J�L��/$ު��5��`��,_���^�QI.M��V�(�t4���0�}%�j�m�,�a4���G;s�~.0=+ػ��\����@8o��[����c��G�}�����6�5��p]���a�������C�˓3 j���5������ٓ}!F��e��D
���y��O�q���
f���,���ܜÂ��[.�����+��q[}�`ۡ9������R)�ݛCT���hSpص��+s����@I����M�|I6�%G��#b�ތo5n���3��
ƀ�d"�z�<�4�d���7�m2��~oIY|�x|�و��j<A�[	bt���
y���*��o�؍= �\S��H:�ع�
��d���I��b�x¨��?���ϱyvL�S�|x�@y�+M��
D���d+�%2�BE�+m�"��i�Z����lEC�A��M~��Ig�cP��"�\�0�C�3�����ǟ��|���~����xm�ե����>˩�y������E����o��u6b5��V��S��Cw��C#�P��`�tD�~x�n������
N�[DR�H�J��̟ʔ\��l����ߋ��[sZ4��0J�=t;��x�t|7��]��f�ޝ��:BiE
��F=���%�௢r"Z��A�?�Ɖ	5��M?�B��1�a�����]��`u"Ã�`��Y���6o	���� �Y�p��dC���:X����b����GV4�P窻{���V��s��2�8V.�,�4��(��x���r���r��@�~O_lœ$�:e�j�m��'���(ί�P~��У����^���1�s��IX�`���}�FY	 T�P1�*U��E9fG�VI���Q�+%��P�He�G�.�%v\���o눗o����$����+���g3��=�ގ'˧B~���}�7˄��z�
;C�u_�% �f�X���Z�9��~ۅ��1��7�y����xi˼U�=ϖ˶{K�n��_H4��?k߳Z�9a��&�{�
�yo����]&I�k�&co�u��8��dq�@��N/�~S`3�r\�װ=����V��}��_P: �j�.��:�N�J󫎛�<��.���^�Q\���o�^��{��O�C>�96Bk�z��źs�V�o�Ϛa���^�YF���G^��U���aP�n��l�!��y�O�� _��9�Y�0����d������}4�W��Y���Ű"�}c"�Be4
���k�aL��Y�wi����mW�*$K��e�H��h�/��|�$��؟��I��Gs�c�g �99�NK�]�c}{k��h�� �o�b-��+�)uT&�
�	K
&����t�@��y@��v!t�G,?�c�BF֤�f�:c�4n��đ��w��5�� �.P�jf�a��v��Sò��6�qOS]R��g��Q_��O�\Q��3�N��� >�W�k��6����y,��~c2;_�|���KI�>`
v�"��1�
3��u{Qw���r�JZ�E�g*��������EHs����3�LY�jb|l[h�#k���\�����(��p��]8Y/�5�H�]tCxP4��`��U��a���Hw��I}Dkv���
�<>�k���ӕkGNI�r��1�-�3�Ck��j��f�4�,��[����ip�5���G�qP�5b��M�R�AK:���T�(���F=b�_j�+�/KO�'3aN�0�pdo��
0o�<�B/j�KP�t��_�@p�z9v��~[����tH���Q`��
;9�������=�JÀ~�d��%&3=�{�:����s�8I@�
R�8%���9�)tTV��
H��������>���,BI�G�i-#$=~S��3��\:��X��>���EN�p�Y�v�'t��|%��o?3�G(l�40茶�V\���y���k��;o���R�Ġ�9�g�E6���'bz�ԭȉ���! ��1}�E6�ECg0��/+���&G��.T���J���&v�v��`:�2�ϧ�=�(NQ�KzQ�@,تq,�b��?���(�7-��"���ѱDs
.��:�?���mK��³]�m /��K?@�pP�� �������u�⺯�$0�3�vyݨ
�M07��b�jGQ9Ǝ+_���]�カ�=�򥷠�mgU
���r��J�+%,
����Tp-�Bu�M�";�6�_}]���
��Paɹ�x��0�D��#��jB߹7CZ�՘�㯹��+�x�������DPM5-��h�,�{F�H �3�+�o M|�����2K)Ft��Nr��q�}�~�l ז#�f��c@��gp4=nn��x�b�ԯ����v��T^��/�zh���Wm~�`S��W(�4y����qc�Z���:տY��,k�1�x�#b1�/v���Ь߾* �~���@�������]&w��;���
U���f/x}��0����D��L�D��ν���_�����y)3����L�i�_�,�͛�f9�pv	�P�~R��,+,f	�FY]��
���Ƥ�m���ȕT���J1�Ցg�{݀��'_M|�Ƅ�$�W�X?SC��Z+�(�'I��zcp2l:G��� ��_��_š����+����O��~n�}Xf��|Z�;�x��A��^��Yu�:hL��C*�G���[v�/'�F7��\�E\����|_�_��5w�S�A���^�2^���C
w'ޕ���y'�I=t��z��
���=���:���Iɰ'V|Ѧ����l\�vޞ$��|d\_E���őX,/�Lğ�<˺��+A�9�Mqf�B1�YޑnB����fn��v?\�p0�B�X\lw
F�Y`�5���TQ��l��끙����Vy�{]b���Ȩ'�f��N�� Q\⊡��x�K��v+�Z"(�Z!��
�{9��0����>���:�֑'=�i�vҠ,���`�L\I�_)��j�fx�(@�$̣

N�k�$hq/��^a���^��$0���ߺ\gy	������)��@�G~�ҖX����,ʂm�sj�}���z�-����a���i�(m	��e��%�'�;�N���>��@��#��t���E�(a���7x�m�%q�R�N@�b��H0�
1[�F@!P�"�B�+�[}��H7�Oc_���M�!��n�G�]qj�����:kó��ֿ���>��	�ד9�>�	�S�S�2�Z�����}�9�`ڴ��%I��q�^��*�l�_[��T@�u1
<�}~�Hv�{��5\GvA0<w���'����ry�SP�af%��Wc�2Г�ST�0�Jr��{5�Vz��_��d)}N��Dؼ��l�k�,>�*�}k���3h���F�����[��C�{5�n�c�hWܡ��@�=��Ea������ڧuI���𷑘�n��L.�{�Ե�A�Jn]$}fK1�p�����[�5
K>�D9;M��5	̈8^5�W���v��xvӬr��
��&��ȝ	|�%����m��s
����'���;��|d(P�J������3�f�#bF���I�%V�ͳ���t�n�ԺϺ��ۺYa(��v�[�Y�}��$���\N�05j��`O�.f��J�*��r��iԌܫu��ٞ��SA++�ҿ�����X;��j����;�(h%tr[�!4x&Y8xQ�> �Ք���x#]Rf��Ե^��$���t<���'o.Ɗl���B6r0����8x�a3}���c�:��z:�{e��z�j�/o4�bѤ�P�����$�����#�0�Nƕw�G����A��$��e\��_�?��R�\݁v�:�?��h�k:�x��Ļ���	�w����MA��v��<�x�gV(y_�����T�v܊|]�#�?O̓�����4>5���e�gq>��,t�E➢N~c��dp� *��}Ӆ�c��^�u��4	)V@o[�8R�Z?3�L���?b��:3�������1�CW�}b2�nJ a��y]m�6hr�����q�%U�7�'�ր�fYB�2K�Qf��.#�P�L�����Y��Ҥ��\c�$0���Q���6�Z�{ZsO���?M��Jn�ixb��" �l��&?������������m������IR�H�$K!�)P|�+~��ڣ��P��~eOS�~�ޖi�ĥ`B�rq���q|Τ)鋳l�)&��'ݹ��r恅������43��x(<�o���6\��5/�u�%T�$��T�}M�P9�Z�9ڇ�+���^GW�/�;S�P���-[@�f�����^�e�N�+T�WO4
�<��v/�]R*�a�>��YgI�0����k.1��V��$�Rv�^ap�q�]3�������Py�.%�^V��Ѵ�il~7"�]��cV�D�̰a$&�X".܁n)G��Z����
,\5�Q��z�\{}���6<�BU�p�
�{�I�x����?T���9)e p��qW뗟�"��W\�MQ1���߲Μr��%gJ$�41h�ϚxO�4ݰo�
��8��~��V���D��&敮���8
�ڼЙY��5(��	��A�x��ts���.)�Ҝ�6�.��{".
�gm߭�A%�8
�J��`I��~B)����&q\�v�
�壸�9?��Q|^/|V%9���	��b
i��BD�ٯz��<hm���؅�*��`�?(�n/�pE�H%�6=�aE�V�e�'��tW�ԐoC�((
ޙ<�܂�Û��wn'��D�5���YB���*4�9���l����2��X��?L���R^�
2Cn�N���*����{	��F��'���Ҕ��B�d�;L�>m��7���m+���?�\.r�p 
���+����-];br�%VȽC�w_'Ζ�Qv�n���"��*8愈�OB*��Tԭ຦�������	��F޹��_�� r�F� �p���F&B�̏.�E�.�j�A�u<vNxvLCG�&�����hL��yPֵ	\X�a�7e�DXcz!A���K�{��]��]����O^�6��.�;�M����s ��kʀM�D���y�Aw�0�h��'�{��D����+(}��L�(�??DHB����Vp��⟴;K�	�BE���W�k?��[�Z~��}1�@�!Y�NJ`�E�������ܯ�.�%<�w;G\k����h�1P�)֪k��i�.�f_/�j��^L���p�UK�a���f��-Ġ�<7kF��G�w@�ո���A�\��ne�����2Qu��.��m���TtEl���]�͚���"4+p�rĴWH���K t��	�m n��a<�E��<I�Ȍ)�5���jF���tkܠ�̠'X�~vG
�y��H��Zz��@f�Bo�θ{܍_&u0WQ�N^���+��s�����  %W����WlW�)a$1o���6Ѳ��S`����0���g~>'��S��p�[��Ɏ�[@�A��?�&�h}C\��ւ<���Ƹ�(r��Ƨ�s�",{L�!��&v���¾#^7�m�f��9�JԓC£m���=^ u#�����P�A&z���jN�d�?��=+F��X$���sp�P�.�36��wV,2�1�Lȷ�����Ⱦ]�UBltQj>w�l�r��=��UO׎�\ݚ�Y��^�"��J��(�%v�߉i�Η�_z�,!
��1��?��e�=� ��{�ķ�5�D�����_�o��@4l�E�:社| *F�&��N�q��D��sfA�Ń�ps;eU���o84^?<�GR� ������ЏSv�0���ȐS�zり�]���d����ȓZ�K��#��C6WyP��B)�XCÞ�_��З;2��������1'e�r��6���hH�����/jh^����䶌�1�j\�s�����~��O�M�4�9�ð�"���=�֔\��`�x�1�NO�0�>��SA�Ϩ-N̸��������XT`'գ�_�ir(�fy.;�ٗ�����-���؞���M��9�[wԗ�#۪V��.˞y�YE����ۢ�T֖ۜeb�)�בR
$������y��l��v٤�Ru�M�(*n�k%��t�7�x:l�ڢ�7sk��a��;����<�>M3{��K�)t�Q�/ꓱ�g]��4rbp(�%�pRN�7���þaR�D8!�8k[<��o~����

�F=�OGyR��%�mk7�1N�.NAK�:�X���[�}`޲ve񶠀��`��>���-�R��w�au�f/�X�e'�H���#��hӻ2���ߔ:��#/Z`H�7��0�8�
Ѧ0V�j�=�;�q�m��P$��L���bv����lj�#9�ӷ9q�zk4d9��^uy��.�������!h�QYcR�Dmn��(P�S� 9��%�]6%�jh"Я���~i��. 
����g�q|PZ^�?^�ػQ5�\��`3(�g�����ح/A��E�uރ�����B���b�5���%�t'�s*�~���ڶm�B�A���m�s�9L.�5A!��)�
��i�o��#
�2HCQ��	��'��jV7��&�kߊj;⚜۠�q{��Ƶ�������,w"˼�}�emܻ8:ƶI3d��H��;4cŭA��q�
�-e�2�K�8�;�x���v=S���:Lm֟�J��F"��
��$�����I5�f
{��m�^�̎�П����c�¤���ksrP]_�}��	�mN��{��K�Ɛ�|FJ"��C���)�q�CF�N��Sa4q���yذ�EmRN�֪��&��su<>�B����H�\t�י,���3���n�/�tޏ��i�s~���EaDo��?��t���G�
P�`���Rz�y9\�|�1��v4���ș�
�6����q�[����˘M?x�� �c�%��t�<���1�����
���a��v�o��E��<Ѷ8��rXQQ�%b�
�$��J��;�y~��o8`��ߗ�K��#UF[�͵w�K�{ �n9�r-��
�.A���rp��}v��05^Նc�esh�6hķ�G�	����O��t7�����Z�a�
�J�6Nu/ҏ���PF9�T1�>J\�PNN���z
���<�̓���g,;�s*�ʍ��Ua<\v
&��ҼU�L�c79����U�JF��Z���I{vz�xe��ڎA�&��7/����IX��5��K*a#�.��5�!�w�O��.�&W^i��ȡ�P�<���蚉��w�kNQ7��G���ս�Y��w]~(۰2W�U$�� �-cZ�-������O���pbs̴����D˚�w�
K��Q��,wF%�?���cSl5\"����8w��-k����1�/xW�Z�_v��˻���7�Q�c�
k�'EM�����C,X�����9���d�1Bu�O�1,�˜�`1��|�b��^�p�LZ�	� de�/p���s@6��jU��sy��nF����k[$��6k��%�[�i��U]-�����Y��#X ��E�oi�2.[�O��`����js
몽��Z��m�p�f�]:��'(9�D� ��@�j(2LF��f��n jGr��U��'�c�|';O�*�q�h�CDGE��)�~/�v���?����`�2[6Z�-q-�]�
����W���߶ hfs���6��LǔL��L@��ؚ���O�U���	�5�0��Y8T�ն�(Y6;�?����7�K����xJ��op�_dH��Z�8N/?���P�q�+�/�z!�I��	���Q^M��u�I@�y�a��Ǔ\'61V$]��/\�J����%dH�U-N���$�Zᤪp	8@�a���Z��6:��:.�z@G��Zs5D�ʦF#(Ej���o'.7cg]��Q���~<c[.;�>mX�9�/{��M��8�2:��t�z�4!4�a��ms�c�|�����=�
�*"��(�r�}C9�2���Qs@�U1��;t3n�*�6��bO�S�d�	}/ۄ�@Q�6::�o��&e�#X�,K~y~�I�N�?g����d�i���P�ެ����6f��:Z�]����b�nnrv�M�6����upwC�M�q�G6Ü�^p�:ӡ.>�ű��"�ˌB��G걄X���"�93J�5�	-�[�H2n�&��z�)�Dg��}���="����_�h��Rhb
G������B*�O�Kc���B��h���N&_�x
���}Ɲ*I����]�d#劉��W��l�s3xd<ў��1�Gpx��[��"ຂx���(����lT� ����Y��k8�k�C61 �����p���%��	8G5d�H�t2Ǣ�vB�{�m�u�g���k����ļ+Ҿ~����w�e� <6V�8MT���N��0Q�oS-P!nk��1��c~�w��~
H���x������@��Ml?K��n�MY���,L;�d/�����19v�vBi9�cO��]���((�_,��]���ͭ��0@5U���F
���W��Vm9�-�9Z1
 �B�tj,,�؎�����@sd_�n2J��;���O���5�b�|�i���YT���4>��SG�~sa��ᴫl��
��?�-!��|ۖGI�
§@���=�b��q�:`��v7{�y&���y��H2B'�y��R�,��5}S9�J�%'�8-_�	T�/ ���|���
.�N>��A{^�OW�g�Q kiW�<4�ԓ�D�N�E���v;��:C~VW�z={
��2�n��>��L��@-�����s'��$���P:W�]Ho�{Ò��6���P�������Y�8��rHY��/�$�c��f���@�!}�!b�ԤG���U���{^��n�t������ >�`��jh%J�R�Om�!�J�9����7q��'�y��>a��~h�H8Q����;H�Y:�+�ۉr��dŎ���k�1`p^���w#�e�J��<�����r�j?��%mr*g(��9�T�T �S�<DO�R���m��e�	��|  y'�H*�
���Q3E
K.���b���Q�}�|qOO@�	�xcA�۾���9y���]X�x,Ͽ���fk��+?��n�h����S<�_f��QR�/"3tO�b�&�*�o�ؕ���xK����7�l"v卻v��8�s�d��3f�j����W��M	;���zU�͈�TwE�BN�l��|��G��{i��ߤ�+/)2s�ʟ��cF���H���Orz�ib�I�&@y��n��-.�6�+�#��;h9�1�f�' w}�RK�!���l%:E$�ɸ�
S��ˣ4�pA$�Xnc.���-���`
�K�Gph�A���8����mF��Tf�۶��BzL&�ّCgi�Q�4�o����k2(*zt�!5ɰ�q���z��-��z4_mꯊh�橭�_�=b �)���{�ax9�Xf^���]H�r���,I��=q�1�,D.��vt( _���d�S��!A��:������"^�$E/HuP\O�+X�Ƒ��SC�T���F��������q�X�@��f#���2�,�ޡ����F��ӥF����9��>b�O�Ly^�iV�jg
�����”����>7�ž.9,ԠƛQ���=	�B�UQ�A�
��O쎲�&�c�� ��e��2j��hld6��T��Mo�0���]胡�2�aa��m��Z/�
H�$�
� #��E�t���@U0p�[K�V�U#��#�̧��ʷ?C#%�!��3��
��$&��	���Ӝ�J&f��ـ_ʪ�d��q~&f�`r�o�1*#?C��\^��ԇ�g��Y][��[S�֑H7�O�;�t�X�/���a*��xz�}�?=,ю���HA�����X�}V ���_��� �������\K��΀4(#���9�njKdzfՐ��/i)'N�������c���C&�I4N��Z�r�F&q!ۼ�UN��F�1R���+!ʷ]7h�fu��F)��j�=J��±n���^���^P�1�L$��_�ބwҖ�-rn~���uA���8դu{�V��R���{�<#Մd�d��s�]d���O6��=Ux���?�EwF,x3�����.
�3䧣�K�b]c�6<[e[�g��Q���7�-���PK�赌U<���9��~�:m,z�6�Ot�-g�s�U�u��o�DB�0!ڷw4�WoPN��pŒ���o
J23�1=��eS���$6�$;O�a~��aȐ�3^��V-?��|%
k7�|p&�Pe�W؛��}��U�vOR���1Ws��d�0W%��@��8>ӱ|���׍��}��x����-��c��"r�+�)k!�Eq�]�j5@�AAJ�d�\����_P5�$$�'�kߥ僡>q��9��M���0�i�H�a��m��@�iQ�jv�e���5`��=��D|'X���z����s,������j��|�A�v��樯�i�+X��x����z�Q>0$��m������S�7�<��i��z��Z�(5��F�Lcz����i�xv�AF�
��v��xu�'�{��%�`}�(��jpF6�E
�ͱo�տiq���;CՈ6-eYD��	�>k���Ў�3����\Ƙ��h��ԺĂ{����1�R
"'�_�X�⢋tG�+�>�=��N�j�
G3
�ǥpZ��-�r�œ����{�y�H>�TTkz�\3��r0	��� W��j�]�r�N@}OB�IW�j�,ݚ��3�ٷ�2��K�F0�Y�G��H�U�k+�`!��/j7H�:5�P����U�F��8D�X7s6(�xdž$�U�!P
sneBK��M�,�rN�N۹�L(D��O
ź�&��n}�7m�MRH�8ޚ=�㬛��H!�fi��c��nݲ.��?����8�n?�sPC���e�C�3��[Y�ظZT�L›_Τx�Ϥ��i�R!����s�P/+q��n5�
��M�5U��< ��+�F���嗨�<�U5���>��*M�Ծ�8��1�������r�{I��:��"��Y>��L�=ˡ��1v�T>#a��\$�Ӏ�p&Vف!9\i8���d���Z����ő��E����b��
]c�31���kZ�eJ~%}�P��)���!�݂�b�o�6���n�q�b���?D[�Wv���*�5R�OP�凿ww����:/�@h�f��Z��O�������a�w�-�<��O�u��4��S�?�y�s���:��0;����1�`��
��g}��.|�zE����%	+�$������o
Z�S�ޞ�l45���R`{J�'
�d�]��4��/�#��rQ���(�>*�+B]���`���XM��g�v�h�E�PN�����~6�Z�i��'�\�翤��r���`,ZĬw�����kH���^|�nT�!��2"]�Y�3�mp߼�O?�v�
��)�,2��km�WP�=��;؆�Hw=���zFȘ�Q6�Gt�S��,L��FX~���1�����r
KX�J(1O�vn/,}�bu����j{S{-���)��7Zp��7�[�+�k�[�|��.���`A.�+1Y��!�Q.ذ� �^�,�-)��5�(&��n#**B��A�[S�y9���O���)")��=��o�aA5���r�W�i>��!9�!�`^�g��-�7�11�!�@ �(:���w�_������7m��(�UX��Ѻ�zS�5�8X}'@Z��`�/���i�X*�<Kw����>���O@8�&"�[�! �N��T�mP�yC\f�77�`��bE��x�+dX���)�(SIJ�>񲸀@��낸�k�4��l�����1����k�I���Əl��v�-�7��On:���+!�q��Q)���n��U�t@/8�����
�AQ�
#f�:��Y��]ܝy0#KU��HNj�'׳�Ҝt5x�<��|�{q��W����q4ӧ���X�?����)Ya��g���!8��z5Z,�}pv`+(1�u����om~y����Vz�=��	��pa8���{��*�h[e#����R��]f�]u�3�Z
?Q��ֆ�@�?Q���3�%�dq�*���^�@��^#2ɉ�6tr�����~V��<�(Xy:k�p���`2qι�<��?��P)ó)_vЪ��5G��8��������w���׆��`���re��*�H�OߴK<( �L�s8N���
3z�q��Nj�Q>v���Y�kr:|��V��ޔ꓄�ʲ��2����9J�w�B�g�A��`�`m�Ē��o"�8/���;��p~@�tv��25o	a:QK�Ђ���/�	�#R-F)g���U��N��M��g�a�a��������}�{��Gx5�r���
��Ő�<$��H��>~h��U�(��^z+]��U֬M��
���2|�p�
:1�#��Ry���r������%6��0%C�r��T�*�΅�rG����:y5�o
��,���r������/+�W�*��[�kʛ�]�*��
n�B\ȉ
x�=��ÿ��?>5�����ېZ��h��p
��������,�@�eOn�� �!�%����v�@_.��Cs��3r�3�#�4���
�-/��a�d�vt[�iz�e�EE�kͣv��S_�/�;9H�<c&.�]w�C���#\XJ�8uM�C�y��D���u2��	�0@bn{���{�^E���B��0kLS��>=�j�'�Ca�K�̥pR�=�J�XW����v��@P@q��*׾IMn>���!�X6��Z�c���g���>�I0�s+`:+��,��n�ˁ,h�,%��h(D����*̳�Մ�Pg�y9���z~vҐ塆
�">�uͩc�$k2�p�X�b����M
aՅ��JP�hN�îP��&�RQ��%00�DH�E��u�RJ�w�{�@jĨ�YP�6`�0�X�>���
�v�E�d�C� ʎ��x@J���fS(�\�$ٽ�xd�����q�{��"�!!�����8�+,��ahR�f/	�t�)XH�R����.�[)K����h��1�~��}4�h�l��A��cd3��j�u����&� �*�|`*���t�	@��@�0	�������1��$�!�e�tq΃��8+%|�`����UbVO>�?��c�������`W,y4?3�W��l?���_�*�(�	�@�(0�2 �,j�oV©�r�@�%�ou6oN���U�J]8�aD�j���4yl��q�㟍#��CI�܈���w.���������i��>�2���}�<�%>�"ỏ���L�L}��ہt6M�L��~��<�rdVi���2p��}��W�]�ԭ��.�w,W�af��> 5@ĆP,�N�q�43��΁�Fm��cUZ"�Χs}:6��L�5!YRd]~�ƒ�YaWl��4�iƹ�����:p�P���Ͻ��}��A�n���;�`@����,_c$e���x"m�8/qf�Rg"}+?穡�o��·O^9��P�+�t �K6���?%�������:�ʿZ��*,��V�`��h��:�0��rLQ�6b^±��7��rh��m�Fx�Oh8���h�`Õ4P�1S&Z
q�J�$^Z-I���z?�
D�@m�HӼ�<��6���&�R��h�g�N}R?㖄pPd�+�f��u�����ˆ�l)���{OoDζ���{�9�4�E-q��Y���H�g&Sb�+,�{�u�<��8Xf"lًc*�s���.�w������V�pN�VϠ���p�E��~E�f���6��>$C���}k<ꂕ�P�7y���8�*Vq
3ϧ]Il&�QC��;VVCd�+�S���
�.�(��w��`՗��*�E�����v4=�<�}��r9��=�^Sg���9�4�H�{Y5��l�l����"��#�%��
��'E���O����2��7-��2!���!���������_/��L��Ns_u�`0�O�bk��0���	V����E�1��[�rӕ���;eш��� !޼߉g��ˆg3#38V�lz5%�5<�����
Y	��f�؈�˿@׈�˽x��	^�j�ޗeѩ��3^+D5��z��ҫ�RXȣ��'XH���Q���?(ރ.R�E}֮@�τC����&2~~ՠI�<��d�e�V�����02�=ˆZ
NU.�J�q�:R�H�W�O8֚Ń5�|�z��s�X�uPj�r���]{B"�%��u�
�e����|�m흦(�R��B����RB�H�&��~��a���In��i�	�XdlV�~�/:#�#�259�n���sV��l�6I����(f~2�+��9�}��aL*��\8�����#���g�$}��{��|�4�OC~SDr$�9���xN1o\��S�Xp�|Hy��@��f�q����Ԍ�����3�Yjjp;�	���Aձ[�h�Ω����+O�8�����Y�:�7���jP�Cumk߷G�(�C}֏J%�m�#� ���p�[�L[�\]R�2$��6΄ex�{�\#�{�_�iV������N{������#N�oW��[���i�"9b�������M���r�T�œ�����EMR&�'t��[q����u�#�y�l�p^�q��'q��L���~�������(0#�Ƀ~�s�T���{H��#�4�Bƨ՝�zz�/{n�N>��7}|��.�������5
�eR��:�3�?�X�B�+�T{��K�����Lh9�Ƴ(\ �����&(
���|���Vw��*�<:-�X��J���8�^�8~�ӹ5~�_�x,�Aϵ�v��C
���[As.s¾�BV%�*����j)6���i;XO>f�����<}0�@Gx<6�4�=�d
mE�\�.�{e��~�j�O�ا�;��^,d��L���dP���_>ׇ���BD�r�RM����m�&h�W�b�v�b��wf��XЬ�]������?B�{�t�GB�1I�dW%�#ΛDNx�g�6	 �3�����A ��J�4w��tw��9�dU�Q�{��H���w><�s��M�չgw]���A������뗸�hp7�x�/���M�ƪ̲���[�?�������K��|JW4>�1MA�,��!�2�R��؎�U�i
�L�82�8NY-5F�,��bp��b&\�=���m���v�M���x�$����%�� 	m� ��������$9/K�P��6�� �s�����N0X�9�7¯�~�-_���b�PZ�5�T:߆��Q�cH?U/�\F�ޝ�Bw7�����|(�	}Z/�E�h��:���c��5�pwL�m%�z�L9�]֌?�#�������)T�i@��B�D�՚���k�)O`%�b�Y�5hia�mQ&
 �Hyv�=	[rhj�kY�•",yP�/ �� y�����Z�aHN�S�g��I�rL`�D���}�����������������������T���{�^�Ι���x���&�۲���r��Ä	x�-�-=�r�.^��?�l��_`����އ�ڥ زq0lB�f���yw�� �t�B*d�F��b��3:��S�]��NY�NO��W��o���<0���V��6���|Ј���E�Q��2I�7�v��{�����GD`��=R�*��`�Z��R*U_�LHp�Z�֐DV�s��Q�"�1 ����*�ي	�7QC �y�d�(�X	
�J]G@+_�t'�q��s"q�7�?�� ����֒����>i�FF��k���9{���fk.:p���,�RV�r�ș�J�R[� ri�ƃpJ�"��R6����@B>f����oW�o���ho�t��wv\K����tT��V���#?zT��5Q�(j	�I�Ϋ���D͝�A�P�Ol��2���/���𛋗�g�V�-�V�^�\��w���]#�z��b�M��G#��i�Wc��e�:l���1&�8�:ı��� ��^���݁:����"MG�3��'9�j�t�Lx����4����f-̝���m��L~R��m��Bl���J!�O�FE�fJ�����r�Z�h��,����E7�ܖ�n�>n
�h:���'��"0'ZS1</q/]��i�ɺL\DUGA3�
�^���7��Qw~aQ/���A|�W,��0k�bdMK>�Y�iɵx�R�<in5���&��u×��g�l�7��Bl�r��Ӛ��ca]�=�U�#�Uu����,��3���
!LDD��)�U�eӫt.�>A�
��)��c�z�yF���e=:����R}��tA�w��Ib)dc�qfP���#���nñnd�����3�b$=nj�w��`5�r���k�	�w�:Q%�\�}���?�͘��Y�8%�L�1���S�#�ɿ֨�������{=��8s �:�]h�!�H�ȓ�d�ۡ���b�X�F<�Mv����ф���.��U�a��
�8Nc��$�\��Q�'�b�Iu����|L7S?�N���	���+
;H�����n���',�e�Qa�Ǘ��)�S|�V"��Tau�0	%��r�8	�u.}9���{L�[q��m�̽׋�M�h�Kn�Y�������n�h�SMU�nV_� �`���>�����
�o��Џ����B�������a�<�ߕ5Ƹ���/-ݽ��#w
z3���M�{g�P�A����&���d��\D���YЦGD���^��4z�����8]=Uk�� ��sBEP���E���OZ��w��1.���;@�Vٛ�J����p,x����y\{�B�H�.�JQ�*[ M��c�J��ȿ�q�&T����&bjR�<�N�]V$�BȺn.:�5��8�}�y�����Ȯ��z?��9���\T��������Y�z{���!��6��z�Y��
{�}'�wBx���Ǣ~zɍY9!+R�����������������ӆL��{�S���>o@
��t��4��bԎ�Mu��-+r�'���;s%�JȔ��HF1?�\�3+Q{���(�7
���#��ȴk�gn~�Y7��Pz�g���f�5�j�Y~�Y�V`����5�{��T'/��`	�����L�gᴄq4��GT���78\��@Ω�4?��:�T���~�A�˚.��C�?�9�m����6?��#|-��\B4��t�|�|�Crlv(Cl�1j��yϳ�F�_h�T0�D����B6y�詛�J�ٿHvw+ˑ&��&�Oe>����v�����QnH�����̱�Qh.��,���/���١��+S�
�͢���h]��Y���e�7]�������5��6�)�(���,�Q�h���Nȇ4�w�=ژl_t��+b��Ӥ���G���}����M�{��o"I�T�\Q����/�Y���Dq��b����d�##4��e_�\�s��f���u��tz�,+��a���$p�|��"���HT�-�:(E��`~�XQ�s��瓼䪹�pa��Q=�,�^;����S˄W�l��)
��a��0�ֻ̌*�Z|G��w/�’�@�����ߙ��3��Φ=c�^>�[t$�."�4�<�����Z�L��cf*5˙xƵItd#��"��`
�4��ٍ��Ua]Y�v� �fGF�-���qT	���=ꨒ4s/O��~��:��W�,�%�Ab���ܝLf&��<�~Z�v�
�6�&ۖ=(���6����%ЉX>��r��1nq�����+�^���'��4n�.�hsR�<{gL��a�-�o���G����0-������A)@U8/��?��R�ڰ�<�3g��@#�����A���-�U;1�����i��[���_U���/�V��f���k������g������1<I��x+4%a�m�ic>�Ah���*�y7%�G�]𻌍����

[
-P���T��	^�ϊ�f�bY-b��
�2.�!k�^o����,qp������AI �8<�V{K�}0��3��-I���
��9�s�'x��ׁM�Y�C���I�����UG~_A��S5�꼙��‚��m;��Px�J{���mOZq�"ޯ������0xr~�x`��WF����z,^���"%�!/���T�{K[������2�m66��L���}����]S�z�h��uS�Z�'��]_��MO\�H�YK�ܨSg�����{j�[�uO Ɔ{����]o��j��a#u֕��2��Ԍ��>+	Nq:��8yj��V&���HcH����U�M��wz�_V
K��?2�6�+�<��~r��	�aO�,~�#O��o4��@RDǸ�Y��W�k��/�ߏ�m�*�����u�/��J����zSYj�%����O.߂�Ur����0}c�#��u]\�m]M!܋��U�!���e@�׺E �$�z�:��R����G���gO�dWa�#/l¯�������������#�'�z���ʼ��
ܥ���P��@I���~vR���Gra��C6�k��r��Qo�?֩��jEM@2+�=d��b�6�do=r�4�:���*����T�c��$o//+^�Kf�����B�՗������?������{,�ºz�U~��-���Q��߼��:���"Y�Wz1���z?��6�>��g���=���	�I�ë��l�(Q;Z������u𺵽d�WA����[��{9�f��������~����{C_��,�0g����`w�P�%�0�=���c�LQ��A }u�uCc݁��������mD�_7,�����r�O,��T2>%�b������u|}m�i�q(�������v����ݪEY��=(%�I��"~PG��W������L���r�7Ӏ�Q^X�-�?�"���y����c�_�Z2�S��ӈz]�>#�ً"d�{oWCd#��@2#M����נ�%�O����iځ{�����&ٌI@�toD/�+O����Y -�I��d�^��$�j
��٨������s��e��� ���/2l����7�;��.&���"*{s����Cy��?�pm�x\���4�ӓ+�(]>-r��4������U�B$��Xx����;_��"!�)Q�O�-nO�Q�[O��X^�$��_c��*�Wo=ij�W�/�6�Bv¸�~�K\A5�c*l�&e��N_���0�8�$�sD3]����wG���������3d���>�L��MÔ�d���^H���s�_��VL���M���>��4 ��X�.��%���>��th�X�����%bd��@v�z�K��z9S}/�ړ�ߥ6�Zi�G����]��y��+� 2�s�.'bkI���A}K�mb��Ch������\��פLK���^y����d.�]"��{�/��*����a���mU�7Kf�=�b�W�]#�۾��Zq�'k3c�\��:��^.`C��'o:�hdfev��	Rq�B�۳O�D�;��Y���S�d��Μ���.�X������8�o��g�Ȫ�s�u�?��.!M�=�ZD�7����iXg�t������cfG��GJ4�ٍ�un��,*��:�^��n+(�b�P���`Y(���Ⱥ7fy��K�����Y��߷�7�-Ĥn��*����0�F��m��B�@��Ǯ����K�C�cο3�|��i?�M�`K���g����M�3��?�~�!j��Y�3 � :�DH~�J��͔�Oܜ���.kOy+����q�1:�D|$J!;�+���sFg,�n=U�;�qY:eF�f�F��;�<�nj��
���� g�߰�7�A�Ё^��xQ�`�
s�r�Mvϩ��Q����ɱU-�^*'D-�6XV�����esܴ�
\'-Z��1�y��_�j������l��3k�U�21-�c�˸w)ܳ$�k��EV��a�\�5��A	�N�
���x�t�'Mk�EH^X#�]x�2��/����R�ݍ��µ�����Ԗ�C ��Lɯ��j��G�R@'r�ro9`�r��&uD�B7l���W�ii;H��sn����`��%�&�OV��s��R�=L��� ��GB�&�PPH�n��ұ�Y�ՒoE�2=;�,>S�c��PEm��ĭ��B`����+��?��mC�D�
���z���B���949��^sD.���E	(�&y�6|����ךP��
�2���	�
��@L��~pj��t�X����g牴���e��G�f�����wy��~�ؖR|&KR��'S?)ϼ��]�ʕ�+^�`xƢ�
~֕�j�{
�p���USCD֎G�S��v	�l��w]���R�S�2�2Z�== ����|����9%_�e�����7
�e��v"������3| 3n��c�d�dcV�GG�4$�(��ӭp��K�:����9{G�B���k9<�HD�YFIY6�ӈ���0ɥ�ѭ��>�*v��F�����N�{��<&�qB��e�E
*�%������T5f��ekt
y:D^�
h�����0�I�\_l��m���iaa�i5?j�@=�&~�۰C6��9�L�2R�P�8�wĿ����-��|��Ֆ��E��%�ކ���>߉;o��/�SNn�#0r�)4�(���8U/v�9�K�^���$�����#BUz@1f���O��]��dB��hA��XbPہۈc����O����/���ق54�S�u��tfx9`��գ_Lی�����BC�ංKIv�KK~s��$y�"4� ��<���=ϼĀ��F���;K��P��mH?<S(�@o�Q�H��n�W.�&$L��E7{��T��oN��m =�Ñ.	Ft��R�MPu`_I@��$�Rb%���
Ϫ|�~
1������\=�r0!ﱴ<��"zwV�4� v(iSw��rd&�'���p�L ��9Gu���D�W�K2�WS\AfJ��{��P�"Y��XaΠ�$��C�xq�W�·��m3�U�(�ֱ�Fp��I��a)���\��E�B�_��dHѯE7���l�#-���)�e'A�^��Q0C�p"o�{��:X
F�3hb	��^,��r��R���2�YJ`�l�kK�*�<�O��E@�b���q��[�S���徼װ��]��s�gϟ'��>\��G��F'z��'i/K��u,4�#Z�BHޕK)�A�s5��c��-��%s� ڔ^�B/[�!�te�L~q�VW\NY�IoH|����>Sv_wu �{�m�L�?��Q��xC, s��e�>����CnF�q�B��CA��X̩�2��j�e�b+^±�q34k8nq���	#!��X�\�Q�6W)��1�@wLd��8��q��|��Y�YP.6�sPE�SM�d�Aӌ�%��ٌ�
om�����kY����rQh��gޑ,�;VUck��{pJ�-1��E��8�sx��Kڰ����O��)ʻ`S@���G�@��q
K�q���Uʲs)z�u�S���`TX-��q�3h(�j`�j����6�,Gt^�ۮ�N�~�͊���=�Rۼ����Ӥ��a}�����ӭ�a�Bc�l��6����� O�T��#��j+��ad`��P��Z]T�syiqkhfq�?�>��$�tJXf,=]BAGO0����>2EC�c�
g����Bu�J�Do"�EX	X��*m`�m0��b+�¨��B��eY�Q��e�Ei�?0?�aA���~p./�N�"5�2�k}�A��ezQ��-�nfg�����w\mo�8�΄���+q(����8��0s��[C���De\��	��S�Y�Լ�z�O��a�Vɍ��G�����]+�>H���̄�Qae�2^�V��վ��w���%$�Ԓ@SX�����1�����6�Z���_ѦO�+h#������*�H�j�2�B���<�S@�?��v$��C�r�;�A<�A3
N�;^a����M�J��[����k�j�$(�X*6�&p�����f��KUia�j���^r)q{wv��G�Y�����P�g|�{��Ro����%���@�.�Ow]r|���|;u�7���X�%��嘫���"�Ȩy��Ɠv�{���k�EĚ��H9'�7�Qyĕ	���n��-�S���@;�)͎�F#=k[��|��\�e#�ѕ}����rbߧ}Č�h�t�U��-R��NPr�EI����-G��_C��K�@5D����؉.��zk�3����ո��^co��^z��qV���H��)k�\�:"Z��R�T����m��0���!�R6��J@���8��*���1�N��-�<��s�f��Q@o���M�	Իd9<w�2���v�����:~�$���5`��Ҡ{��%��	��VREt��h�Q%�u
~`�Ӝ����+��;kY��'�OO,�n��2����=�>c�<xo�u8V5}�kE�����	GW��"b��h��#�0�Kd��D�SQӦ����	�(3bD����$��A��i8�~�P�W2�%q�Ο9�w��A��'5��0��5Ԩ�%%��
Y3���4��i/�N����K<�|N/����l7lM�dۊ�\M�6}Ut�~�b؞��x�aWzW}Ε|�%�c��Z�%¸��%��
δ;~��Bv<~}��&���~��򨮱f!�:����3N�_��k��[��ZKv(mp
�Qoq�K
&�u�YN#mH=��b�v'��x%�$�TO,�M�P��H�=���⯑eGaA�><bd(�~���U�\��A��9z�l,CAp�
KdW�>�zm���
KN؇ʪ��G�0�7/�t��
[W�	��V�4��`{~�ϑ��uI�=~�=��[�5ύ@�n�0�Յ{��!!~~t\�o��cq�7d��7���B��B,��b���P��Ō����\��rL�]}�R���F��瀳i�D��f�����wؠ�Yjk�l�-n���O�l��|�$�/f�����F6�+
t�)|d�3�2v����1wy�LN�d/�W��kŠ3M)�BgO��U�$/���a!��EĄ_��p����XOY ��ʂP�V&4���|S�3��}-f�P���dm�oR�>v���(0�:ހ�Js[Wr1��Վ���W~BG6�a���4l�~�����3G�%�+.b�n3Ҿ
�:V`2�v1�ed)�[����5%�&�����_���zA��f+<�)��z/XF>#H�4�.y:�@W�7s��ps@$��g�� �9�A&}nz~��pHCne��7�ͤ��S3r~������
�w�u�~C�͍�4n��5�����jÌM��9�/B\.,\��9��:"��d�<h��{aY��^Θ�Q�#��jF�QD��5I���(wN���O�2����7��m�J�M�;� zv�E *k���#[�6
�M�>ݶ�a�OX�!AJ�Y�G�l۳�b�n�u���<IH��&�:�f�`��(�����l	a���t��
�����^3gaYRgg���q���^����ۑmX�b�!�f��6�:��zb�#��KT&/�q]|�L���3��"��myg�������c/G���m��	>9p�$�~�!.��_��n�7v�6���V-T�8ę�2U�ڦ���`���ʹ��$
��(ƌ�M��l�zM��p���B,�*U�����Җ��ͬ�Q�V�����H:Ԁ�^����䅋����I��:?�w����j�����k�R��z+��f,5��_l�
$njj�-%�=
�{j#����C&�]V��}L�@�9�?��L1_�?�p�����F���w���M�iHޖxݕ�u秄ko!PagK<��$dH�l?c�IYM�қ�;4��7
���Ƿ�(�jSJ�O��rs���'�����!k���S'��Wږ�խ������?�Q�z9e�r<��}G��*��gB/�E�	x�J�CI/�@�����Y�}�f��ƣ���ћ��ᯪVy^nj��MV[�
�'7�{�����~S�}�z������d$�	:�����o��
�/�ei&���&�M�UV��ĭ}<��Dm0�X�P�]2�m���EZ�sX-����u��;g΅�B���,�G� ����b�i�=�4l�Ԭ���Qxް���>�W��<8b[)�ۚ���َ	V�ٶ�<t��4��BA�)k{�UM�L�{v����K�
o'>���y���c�l�~߬q����:���.Z��ᴋ�n5�V�_�R�^v�}/�+����
	��a��B���@��?�oB�f�|aEF��!�yɶ�UnV�?���6<BqF֔��5g�Y�y�m��u�5���۶�u+/���*!l`S��F����W�8��^1�7���³ #���1o�ODVKFsv`/���&gڷ��zj���z�cK�>��c��y����t��
y��|��]�{@�<�?�‘�֋'���N�:w�edž߯E�U_���d�,�3B��M�����d�3P#E��U	v��f��.����!5<S\2�I�~АG�$�2��W����]�g)k-����Ϣ��"�ۈ㬼؃�~���������<!��=^K}���(B�_�חi�<%s��.��kv{�5����%�}[^�щ�C)��	r��/]r��-�_��g�+��\�r��f����K�Gd 8K����'�g�㑜L���*GW���{��o���I��%;�>�~���0�U�W;���,�P�f |�ţ��H&�� ICu9�"z��wn��#��D׸p;��;�')�)cK�vߊ���-��3U]�Zp�Ŕ'���;�ӎl���C��,F�+R�Jm���1���b1���0���.��`�cOf��(�x�b��6����4�����'p�.�c�r�=�����K�h6�cK�+����|s<�/�s��E�[G/��T>�g����1(SZ�-�q?>��6�)t4��+ �.�Z�G���#z��D ��7�����J�8�HP��Զ&�>wB	�QV�?��r���n�M� ��Kƒ��eE�'ID>�#�^��i�"f��%�ٛ���J[˺�I��(Jnx��;�U��Y�	��iK�J�t;�i55rj�3M�/N\X��pZ*}5�&ў�l��;ˇU<$�A*3�6�.t�Lh~��+�3���v�U��:r�T꛾��*�
k�+��m���>�2�2�ߵ9h�#g�}$9��R3d6�Hcw�=s���g[��8��?v"�$����J<R�����&AE�D���qښ�� ��"w��9��?ӷ�2��=���i�}�E:O2���!��#���'�S��Q�q�N�9)��R�	�q�,E�f}��;�t9�x7v��ҁ�T`��$��FC�c�:�����v���y���s#cQ��)F���#FP�3���ߣ��x#���k���T��n��tJj ���1�o�����W<�jD_�4�k�I�x�@V�
�Fղn�
ck��k�o��d0_-��Y��A�eE[p�N�K�?�r=A���½Xsك�<��靄��0Ĝ���fMU�['���b~�31�?�k�Qx	T��~����{iՏ
ά]��9x�s�Ύ)��}��$P`����zU��uu����?�́wd&��aq�}T��I���z��ǁ�I���~���Hx�,��=O�l���yq�CR��Y�!z8.�Z�N��V��h\+�.�s�>\�}v�J���>�<W�3� �q�5�'Oh����1�R'.���nS���+��G1��8{fW��[.���̏L�H)���{f����R_��qЁ�pW���wn+����i�1$|q�p�`�0`S���#?D�s}vמ�ֆ�0SJ���x
Kd,���bc�u�}���?}ĉ�����]
�2g�[N����&��ۛn�s�(*����ty`��
T��A蟢�0�OC�{^�k⧈A~9��lRw�?n$�0��ǃ�tr��d�Nˍ�9��U��r���nJx����"��@���_���J(��1}U�?�����o��j{Իb�=��t�jh*b�u��[���ߡ���o��.���8V4���{��>����4:
�[�]������
<��75��i�%c����*[h����F0K@��ϵ�	�jc��HS��D��.��d;���9�r�Jg����]K���Z��x�6i����i��>+<
s�?�(��v�#+Q�vn��g�'����-%v�
x��b^�FzM9�� ����>�'���f~'4�<���TG�b�H/�}k�;�(���¸����˫L���08�3U��a�����w�AT�mz�҇�P{�X�9b�h���U����s���p�+8�9�U��'w��^z��C%�ViC3]��ʖdJ�ʅ��l�ϒ�GQ��#���H���݉�����]�D�^��ؤ��L��^�L/�o��I�12ɰM�6��K���M��רn��Oz����F���\�u��T9J�G�⎥\{L���L8N���ޱ�)�\��>-RNsX�'����<S&�s����z��Lsw"�����mD�n .�[�J��ӽ�!���J��yi���ƀ='�0Pp�n��J�W���h�V�6�dT�x�X�"	����҆u٘�R�1�U���ό1�+]�(� ���Hz2�g�x���[�()*�W-ȇ'���,�=�+����ޔ)O�"�q�9#���
=�V
砰A	<��Ԑ�2��J
+���F�U4�Ls�j���8�y�J*,�.V9�ޙc��g`�i_�]ž�)��d�p�k�<�Q=��
N��`��n�X�d�������{�Q�=B6x
g���q41��p�N����:W.=A��dAQd�p����->�]6�F�0Fm�
�|�;��seF�$�ʝ�)N�=|��82��dt�B=���j
Q��|&�,E�ף�F#�V�iB�
���R�ٿ�/�����W
R��}�8"ʡ�K����q��ۄ�f��aE
	y�=�^`��28^GE�Z;�]n��*�=�Zt3�RG;o��D��a�c
l.�I�m��<�2`sQ�9!a�?R�Π�O�C�?ג�c����2W^7��-0��u�qk�0�L6n6bAS�qTM�k��&�>�m��R�o�+�}��8+};�G��5�Gܿ��!4�qpGg��UG�ķ��Dk�������������f �����τ�)Fo�(%�/͗�C���-�I����V���)�%�[�	����}8������.�����Xs%(J�i�Y;V�R����bu�,O����3zs�s"�"~�3�[��:"�b�6@��)q7^�N�|G�?s!UDt���9>�x��_y�o�'FƵq�n��n�Ӭ��<lT/���U�ui�ٱ�ZLV�r�*�IU\3��_a�Ai�+L�͸��`��Zf@��+?S�P�J��\��zT6^�8�4O	�u�yL���<�\UV�T�bAޭ���X#���N6ֿ����
M4uq�@^�f�Bn4����eT�����3ЇA��f�6��̨�0��J���7n�{t'T:,nL\���.���Y�
���	�	�s��Z뀕�4�'������l6G�U������ ��)n���t&�H�������T�F,B��Z���{e���N/�j��a?�+	(5r�AS|)=\�kpK�1����~����K�qx7&�����V�at��mS�I��?-?�{//�q��K�������y��4:\�́gK��|ܿ��nNI������!�j�N�T���~�zOs+)�
#�S�1]�"��� �Cw\�g@i=Alp���Pry�D˳��G�� �fYu��Y����^	x�!���w6.��1�U���5;و̼ZF-��`��a�j�җd+{W�2-K��ê���<k�H�F�{P!gi���0=N��96�`�5�5q:!��#�wc�f)�e��S9�n$�qI����!~0\W!��-AQw4iz���{_6���J<�������17����Xn�`;G��K��*�J��Þ'�ڣ���\����ԛ��J'�;�Rd΂�4��z��}����/B�bsQjy:)=�����l�o$*.��W�}}��[�1�1L.	�l���oO5����5yLH�v�8��y	��m����̰Y�
���H�Y�x�;��ϭ��&%��ME�ї�%'�^�(����ߙ���;0~Z�A�Q��FV�ʹHY��U�!� \��R�p��4�]k��?f)W����k)�&�}�
�C�L��H�g�q���&�d����]�ݾ92���E��o���O�P���_cpŠ�<�o����7�1j��5w��#�Ð���V���v��S�)
�v	��rn�*>n��C'�pO��pC5��1Z��i�|����$������4ݐW
d�F�����arzv����V���VPd�w�a�I��(�R�ד4�c9��k��p��'���$�S��W���6����"����:d���vx�7�Z&k��Zr�7��ҷj�k{>}�Yu[y�^�v��F���I+c2I88���T�#�;W��Ƌc�GˁBv���xW6ӥ��W����}k�9#��ɞN���Vq���O������HB):��}kq2I�a��1�ƫo�r�+���MUDu�&.t�k>Cfy�k�`.űJ[
� Ϡ~�7U4��5|�Y����'��9�LuA��s�!<<!��cUîq""#�&R(��������HF/NE�N!ũЅ���4����Q,$���G�)��7(#�]�E��a�R˟Cl\�ר������BѬ��V~Ԝ����ů��Y<�2�P��(��f,�w��m�ծ��c�t�g/f��F�����y��[3��vWK��ӜY���b�J\�ق���˜L"�@~S�˳d ٺ
V�og��*����$�O�E��VoWm��|�� �xW���+�U6��Y3QFQ�祇��O�>����ף�y>�)�>K���tř��^>��|Ef���8�Z���ds�y��I,aw����bz?���ן�515w���0m���V,�Rᖨ�?�a_����Clc��<���R�)���Q�U����3΄�R�����xe���Qi��� �TD+��n�d�)ug�9�t�6W\��<��M��Ի&?�y������*�ۚ�
�S�o\���@`�_�铼Q<2��=�051��G�3�SPo3xO��P�A�/�M����u 
�y��y�`t�e4�zK���7�m�g��+y���ᑚ�[��s[}I��,*s�.�n[A[0E��i�
�?l���ࣗ7TEy�Ǘ�Y@CC}�j�q[2LF>�(��c+!��6���wb��q *$m��
{(��]բ���B
�:V6埛�@���Jw��ݼ�0��e��g�ii���U������Rd_���t1#�c��u�ԇ<Z��'|5���ح.y��I���*��@��n#�CFd�����c���a��ÏI3 �1�'�`R�dѴ�;g8�0���Z��].��	rȸ�G�h�&��+2-#�m�oh'���s����D�"�ًq��u�����YcZ�A�vq�k]p���vP�tq�qx��>_��a.
^��'�$�4�i����: X���0gèb��I�!l�Ħ��>.ä�7��3,I��:ֳ�4�?����8�s�kgL��t�?w��0��S@XÐ�� �V��h��-v0����i׳7������45�a9,��*
������V"V־[Uމ�SYګ�o�*{�8���)�n���,�Y��G`.����
��]�5v���@�)�+���%&�E��#�T�������_S�e�Wy��.�3	���;V�٥�^|�
�X����������Vj�[!/��\ct���ޜ�Ij��G�#O,�v=fu�U[Gq�.$��Vw�^Xɚ�E�B͵�5�~���!�p��Nϱo�&@�w�f�6����S��u��5gԸ�MU�	�Uژ\�a8vσ�CvK cjD����Њ�f�ׇLk��n��)��Xt� J���o
�H��7Λ�0̩�$J;F��dbC��D�F	<ݧ���!�� �;�<2�Lo�ӯ�k6�a����z��!�O�|�P�YǑ/���	�@�E����A�ٖ�4�����	n-�s��;
'.�e�ӿ�q:��������e5�c*�j
��g�8�S��<���Ϻ����C9ĬRYD����=� (Ӳ�5��
R��ID0֩��ʲ�*�l�#��!�q&�P�5̭N�W�A�M%AΘ�0��^9_���FOC�ɡ�Y�2��-bNQ�d�1�c��.�O&/��Jq��G-qt]i�д_���c����δ�r�%�lF"&�#�D0�7ʃI�̬T�h&�?,M%�0��gI�}�+�_�jY�GD�@���Bv�㷅���h/�ߝk!P�WQ�NK�	�LkԴ��荬��>��
�NK��$�zoTs"��IL;24mQq���ʦx�VT���e�-�����8g��rٗd/�%���\���08˲�,�
]�
���Ǚ��wgui|'G�w�w��XQ麩��i�b�l�j���.�P�f
���շ=�
��J��(׮���+2K�P+錻v5K���d��#2)�ES1�S��z��=��:�Sm.��u#
�GKwN��2���(�EP�pO��꘢��ōfЧD�sv����w�y�Ƥ�_1�֩�u��%L0v�O��mA�&9��/PT(����A�֘ԋ�	���1	�/��P!Kp��'��S*GW���X4_u>�c?bk���p�}K�1��}�Zu��UiG0"����Jjv5oiԟ+�d��uEXH
�Y��V����I�tEg��0�\������E�ʈ������#0H�Ɵ�ЍP)����TTݾa5��y9��‘�#^E�~`<�=OЅ2b���x����^o�xZ�Rh^*��J2�����B���˙ؓI{
G�{9P�B'up�$lS�E�� �^0FpH���u`��l�P��Su��4��Vp��N�LwC����QB9�D�Γ ��0�ɘ�K�_hs�P��1��� �Hq��o��ēA��Q��i r���06,;�/���*���]n����[�*-���e<')c���S�7�:n!]"�'�;D3��$�]@��}��$�SW��G7o׽��1?��Ɣ��WWȭ���秌ln�TԀ�l��L'I���ʰHI�("W��-9Lc��QF�&�so�M�NJ��>�h>�CE��7�H�=5�G•�ē�~.��+�i�<�A.�n���Q������k!�F/d�Pt�2��÷��E�ek�ނ�sk�u5l;�iEiv"�}u��(ml��S9���?���C�:5��ީ�����5~cP�8վ֥��ew)
���fV"
�*m�����H�rZ�"0�̍�d�Q�
����md/���fw#�!�2��	�A���g/��.Af7fPY�ց���`_�q
([tk�Ҵ��_AE�*�X����s�i��d��˖�G�EE-��C����<%t�b��3�$�f�����oT���!E2�u]*D�v�u�x|f�2�k�'3��c<��sce�
j�����
[�Um���G�,��@AOAr�����K(��?�-��W�q�5k�\��r�b��PRN���4b�9R�jK��d3sd ��E�Q��yJd�c�@��Q�/TԵ7K#�����'��v�O�
�k����O����^��Xo��ʎ:�搠���)o��sԐ���O
��4�ߙ�mH;x=U����$�P��,��̊��
��u@m�+O}6q
����@!n�ٖ�lͷ��$�2a��'Q�d+t����V�v&4��nɝ܍L"V��Yf��1Q��Oڴ��{�Qz�TՋ@@�g]pᚄ�(�DJ��_27�>񴷧�SFy�D`a<0g1��!9J�x>16.�O�C'm@��Qh\9��g'�����+_�@E��P:���X�����s�\-T<0	�t��A��gD�:��2q$�{@o.a���)������N#e�l}l�D��%�ռ�G���p�0����8�[�8ӿ<��\��HU�J#�E;��Ѹ�_�u���R]m��aTg�8ph�hyvI�LGR�Ld�J�O��E����mV����S[�p�P(r*j��4S
߃x�;N@��Q��`�C�|�`����+�D9s���:�::K^fӘ��7i��2
���o'.�ϥk�>��?�'�Z�n�,�A��סm�r��]7��Y�tNJ;%r�&���}޹t�����8�b��ȓ�u��5�,/[�DHE�`l�s%��B�i��6<�8�D�J�ɾ^�P�C�(m�2�*1&�)��g>7WX�W	�so��{���'v�&v�us�2�!B�������o��uI�nt��M�8�h�����5&�:J�YBC�/2�f�(E�����	��K�;��t�`Y����`i���u��y���xn�� I��9��<U�E�N�+X ��u1<=[#0���ݒjr�-����v�ܥ����B,��A$����ҹ$ir��:\I}T4Dn��ކ�)��b+_siR-^�ñ�:���^VD�Sj*�Ei=t!~и�,fJ��#"�Z3�^�}a����n��S���!�,:�|�E(�PUMjB½�\\�"�eg`�]F":�r���A�p$ʔ^�d�
O;��i��\R���".3T�:bqv���̋ձg�S��P1L�����j�з�ו�q�do!�t���AԪ����.�������7ݽ�j�3BW�$]/��@�@l����	v�HľK
��04W朮m�:� ��
we���^�I{���U�z��6PN�a�TR�yIu�z�|7��<����H�Lݢq�ޥf6`"p.{p���=�>�.,)l�}�ʎ�V��h22X�"��3�B�(j^&�.�Ʋ���
�d�Һhv;�g���8dM�C��F#*	u�����/m�duQ�rqo{��0.�ab�IQ���,��Ab�c0h���dӅV�c�Ժ�Qб��~k�$V����I�	2\<9�f%|�u�n��u��45�v�H�18(���*��Vhv��?n@�� �Ur_��u(�M�"�?�J���ǿ&���FlC�
���	� \�\�ۡ�/������zy�X٫n��<[�8��v-s�L�c��(ld���y.�D\8,�D��x��NC�ş�Y%z��v�ð�W�^�щ$i�R{�@�F!Y�(<�W���~(*fDl��{V��7���HC*�%��VA*�ϵ�l��h#��Q��t����7�8�ӗ��ǵ�?�
�-̪�2�j��hwY��¢FŻ�ƪ�ߎ�q�½�КS�d���(c�K��U��dnP ��P�j��[��=�s�p=YE7�_L��&�ـ�!�W;�3�U)��7�4,el�Y����!��[�?l'b�n|����G1˕�W���.�ud�n/{����]8rDa��U��[T�O���H�"뻾��VHD�E=S3xj+��	{ߜ�;"X����T��P8��1���p�	����p�9�E0~OX���x�,+�%��C��U�.�~��:��w��Ctg
ڂl��x��@0��:� �,[�ܤ�9R�֦-�^���1���J�؊���*�R4�JQ��-f$�u�]t�g���A���#��L^��Xbz�����`p�htLU���
�W4n� 1��C#���eRYYؘ=�v��.p��k�	�0d�N�gP�:mS��P:�r��`�%�}OZ�ȴ���Z�Z�:h/"��a��>�ԍ�;�:��_I��Z[w�Q�N�����{x�0 }���`���-?����GxlxO��2V5m���0�Vw��L�_	�"�Y�^�$�.��!������*"�z>���*����&7�A��Xn�PC����؇{Q�*�ߪ����1�}E�)���t�o�ڒC�����H�Y��q(m�P�ֳ̜��]f�Z74FX�v���m*c�Ċ�C~E[q�9��%�pF��Y3�f�9=�����5��aҊ3t{�}3 ��:!<��;{"}.�߆���H,!�5�L��D%c�Q2MJ��E=]R(DVb� �j*���Z��zR�]���F�~�'ל�W�tXJ�~DV���C��{��(h����Ef��hF�;1R�5��d]��K;X��<
��QNa��3��t#����=�+� �U�3�e����M�S�͍�Ѹ�G19�@4�+���҈1T�ܜOs�f%��x��h�{d���=���?iT�Uv������
w�R�m��7ٙM���!�4�
Bu��ne�*�b��xh��>��$O&�C�RQ�8ə�emD�;�:Z4�+N�k��3�oZ���W�6N�H4;Ng�^��-��E��Ԭ��ﳀ,�HD�����f�ʋ|��l���b��
"��f�*,�i��US�\q^�q?�AD�76��q���s�0e(9��(��T3cV���K�T{;�2M�@�O���[����ژ2* ��I�MoK�KG��r�0�R iMx��O�l�r��Cz���w
i��ڑJCHL)���k�5>��CJ��U�,ZZڅG&^��Si7�.rz0
�>k���2	;�W$�𪴆��#�t+GM���<�K�L�Y��Ib�8��r"ֳ�B�"�Sy��ϋ�!���Pp�$�Zy����$a�S�,�N���c��M�cNfZؓ�|c��3�m�JH�u����:d(�a�rf���O�h���u&��f����c�ȟ{}t�4�U�5��I�Ff�/�H���d�}u�tpP�aP`3�6	9�(��})�,�!�^�!������|�!����kb]�%��xr�|S����R�μ�_ѩi�吻{��UI�=
ARu�z"6H;����~�Z�+�:>(�O�/�]�"�_�=��Z���P�����b���,���3�@�)�P�?S�|r`TQr����E��f"pS�^�Zc,��|4�;�W����¾��P��P���J~�Yl�{
�߮�n}��}��;�Τ�ԦE'7!�sz�7��iZD�^i�]��swG��!��i�]u*��>='7�Vl���&�>uO�s������`��c�������9]E0��u���.Z��k�1��wؖc45j�g��d���>����qk�hfEb�HR]QR�'Kʛ�5�M��(�P��
����t\�Q�Gm{�c3�zYrG���l<!u��.F������>����-@.����'��`�������/�M@���Ǎ�\�>y��Q+���Ǣ���&�T(�~|Y�ic�a��A��Y�!��/d���Ջn*�{��2lQ�!$1��E��o�F�)����)��-��=D�r&���>l���~��	4� �XqHN�H�JG{�~(��]}�Zimport'./RenderingOptions.js';import'./InspectorMain.js';import*as InspectorMain from'./InspectorMain.js';import*as RenderingOptions from'./RenderingOptions.js';export{InspectorMain,RenderingOptions,};export class RenderingOptionsView extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('inspector_main/renderingOptions.css');this._appendCheckbox(ls`Paint flashing`,ls`Highlights areas of the page (green) that need to be repainted. May not be suitable for people prone to photosensitive epilepsy.`,Common.moduleSetting('showPaintRects'));this._appendCheckbox(ls`Layout Shift Regions`,ls`Highlights areas of the page (blue) that were shifted. May not be suitable for people prone to photosensitive epilepsy.`,Common.moduleSetting('showLayoutShiftRegions'));this._appendCheckbox(ls`Layer borders`,ls`Shows layer borders (orange/olive) and tiles (cyan).`,Common.moduleSetting('showDebugBorders'));this._appendCheckbox(ls`FPS meter`,ls`Plots frames per second, frame rate distribution, and GPU memory.`,Common.moduleSetting('showFPSCounter'));this._appendCheckbox(ls`Scrolling performance issues`,ls`Highlights elements (teal) that can slow down scrolling, including touch & wheel event handlers and other main-thread scrolling situations.`,Common.moduleSetting('showScrollBottleneckRects'));this._appendCheckbox(ls`Highlight ad frames`,ls`Highlights frames (red) detected to be ads.`,Common.moduleSetting('showAdHighlights'));this._appendCheckbox(ls`Hit-test borders`,ls`Shows borders around hit-test regions.`,Common.moduleSetting('showHitTestBorders'));this.contentElement.createChild('div').classList.add('panel-section-separator');this._appendSelect(ls`Forces media type for testing print and screen styles`,Common.moduleSetting('emulatedCSSMedia'));this._appendSelect(ls`Forces CSS prefers-color-scheme media feature`,Common.moduleSetting('emulatedCSSMediaFeaturePrefersColorScheme'));this._appendSelect(ls`Forces CSS prefers-reduced-motion media feature`,Common.moduleSetting('emulatedCSSMediaFeaturePrefersReducedMotion'));}
_appendCheckbox(label,subtitle,setting){const checkboxLabel=UI.CheckboxLabel.create(label,false,subtitle);UI.SettingsUI.bindCheckbox(checkboxLabel.checkboxElement,setting);this.contentElement.appendChild(checkboxLabel);}
_appendSelect(label,setting){const control=UI.SettingsUI.createControlForSetting(setting,label);if(control){this.contentElement.appendChild(control);}}}
self.InspectorMain=self.InspectorMain||{};InspectorMain=InspectorMain||{};InspectorMain.RenderingOptionsView=RenderingOptionsView;export class InspectorMainImpl extends Common.Object{async run(){let firstCall=true;await SDK.initMainConnection(async()=>{const type=Root.Runtime.queryParam('v8only')?SDK.Target.Type.Node:SDK.Target.Type.Frame;const waitForDebuggerInPage=type===SDK.Target.Type.Frame&&Root.Runtime.queryParam('panel')==='sources';const target=SDK.targetManager.createTarget('main',Common.UIString('Main'),type,null,undefined,waitForDebuggerInPage);if(!firstCall){return;}
firstCall=false;if(waitForDebuggerInPage){const debuggerModel=target.model(SDK.DebuggerModel);if(!debuggerModel.isReadyToPause()){await debuggerModel.once(SDK.DebuggerModel.Events.DebuggerIsReadyToPause);}
debuggerModel.pause();}
target.runtimeAgent().runIfWaitingForDebugger();},Components.TargetDetachedDialog.webSocketConnectionLost);new SourcesPanelIndicator();new InspectorMain.BackendSettingsSync();new MobileThrottling.NetworkPanelIndicator();Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.ReloadInspectedPage,event=>{const hard=(event.data);SDK.ResourceTreeModel.reloadAllPages(hard);});}}
export class ReloadActionDelegate{handleAction(context,actionId){switch(actionId){case'inspector_main.reload':SDK.ResourceTreeModel.reloadAllPages(false);return true;case'inspector_main.hard-reload':SDK.ResourceTreeModel.reloadAllPages(true);return true;}
return false;}}
export class FocusDebuggeeActionDelegate{handleAction(context,actionId){SDK.targetManager.mainTarget().pageAgent().bringToFront();return true;}}
export class NodeIndicator{constructor(){const element=createElement('div');const shadowRoot=UI.createShadowRootWithCoreStyles(element,'inspector_main/nodeIcon.css');this._element=shadowRoot.createChild('div','node-icon');element.addEventListener('click',()=>Host.InspectorFrontendHost.openNodeFrontend(),false);this._button=new UI.ToolbarItem(element);this._button.setTitle(Common.UIString('Open dedicated DevTools for Node.js'));SDK.targetManager.addEventListener(SDK.TargetManager.Events.AvailableTargetsChanged,event=>this._update((event.data)));this._button.setVisible(false);this._update([]);}
_update(targetInfos){const hasNode=!!targetInfos.find(target=>target.type==='node'&&!target.attached);this._element.classList.toggle('inactive',!hasNode);if(hasNode){this._button.setVisible(true);}}
item(){return this._button;}}
export class SourcesPanelIndicator{constructor(){Common.moduleSetting('javaScriptDisabled').addChangeListener(javaScriptDisabledChanged);javaScriptDisabledChanged();function javaScriptDisabledChanged(){let icon=null;const javaScriptDisabled=Common.moduleSetting('javaScriptDisabled').get();if(javaScriptDisabled){icon=UI.Icon.create('smallicon-warning');icon.title=Common.UIString('JavaScript is disabled');}
UI.inspectorView.setPanelIcon('sources',icon);}}}
export class BackendSettingsSync{constructor(){this._autoAttachSetting=Common.settings.moduleSetting('autoAttachToCreatedPages');this._autoAttachSetting.addChangeListener(this._updateAutoAttach,this);this._updateAutoAttach();this._adBlockEnabledSetting=Common.settings.moduleSetting('network.adBlockingEnabled');this._adBlockEnabledSetting.addChangeListener(this._update,this);this._emulatePageFocusSetting=Common.settings.moduleSetting('emulatePageFocus');this._emulatePageFocusSetting.addChangeListener(this._update,this);SDK.targetManager.observeTargets(this);}
_updateTarget(target){if(target.type()!==SDK.Target.Type.Frame||target.parentTarget()){return;}
target.pageAgent().setAdBlockingEnabled(this._adBlockEnabledSetting.get());target.emulationAgent().setFocusEmulationEnabled(this._emulatePageFocusSetting.get());}
_updateAutoAttach(){Host.InspectorFrontendHost.setOpenNewWindowForPopups(this._autoAttachSetting.get());}
_update(){for(const target of SDK.targetManager.targets()){this._updateTarget(target);}}
targetAdded(target){this._updateTarget(target);}
targetRemoved(target){}}
SDK.ChildTargetManager.install();self.InspectorMain=self.InspectorMain||{};InspectorMain=InspectorMain||{};InspectorMain.InspectorMain=InspectorMainImpl;InspectorMain.ReloadActionDelegate=ReloadActionDelegate;InspectorMain.FocusDebuggeeActionDelegate=FocusDebuggeeActionDelegate;InspectorMain.NodeIndicator=NodeIndicator;InspectorMain.SourcesPanelIndicator=SourcesPanelIndicator;InspectorMain.BackendSettingsSync=BackendSettingsSync;import*as JsMain from'./JsMain.js';export{JsMain,};export class JsMainImpl extends Common.Object{run(){Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConnectToNodeJSDirectly);SDK.initMainConnection(()=>{const target=SDK.targetManager.createTarget('main',ls`Main`,SDK.Target.Type.Node,null);target.runtimeAgent().runIfWaitingForDebugger();},Components.TargetDetachedDialog.webSocketConnectionLost);}}
self.JsMain=self.JsMain||{};JsMain=JsMain||{};JsMain.JsMain=JsMainImpl;import'./SearchView.js';import'./SearchConfig.js';import'./SearchResultsPane.js';import*as SearchConfig from'./SearchConfig.js';import*as SearchResultsPane from'./SearchResultsPane.js';import*as SearchView from'./SearchView.js';export{SearchConfig,SearchResultsPane,SearchView,};export class SearchView extends UI.VBox{constructor(settingKey){super(true);this.setMinimumSize(0,40);this.registerRequiredCSS('search/searchView.css');this._focusOnShow=false;this._isIndexing=false;this._searchId=1;this._searchMatchesCount=0;this._searchResultsCount=0;this._nonEmptySearchResultsCount=0;this._searchingView=null;this._notFoundView=null;this._searchConfig=null;this._pendingSearchConfig=null;this._searchResultsPane=null;this._progressIndicator=null;this._visiblePane=null;this.contentElement.classList.add('search-view');this._searchPanelElement=this.contentElement.createChild('div','search-drawer-header');this._searchPanelElement.addEventListener('keydown',this._onKeyDown.bind(this),false);this._searchResultsElement=this.contentElement.createChild('div');this._searchResultsElement.className='search-results';const searchContainer=createElement('div');searchContainer.style.flex='auto';searchContainer.style.justifyContent='start';searchContainer.style.maxWidth='300px';this._search=UI.HistoryInput.create();searchContainer.appendChild(this._search);this._search.placeholder=Common.UIString('Search');this._search.setAttribute('type','text');this._search.setAttribute('results','0');this._search.setAttribute('size',42);UI.ARIAUtils.setAccessibleName(this._search,ls`Search Query`);const searchItem=new UI.ToolbarItem(searchContainer);const toolbar=new UI.Toolbar('search-toolbar',this._searchPanelElement);this._matchCaseButton=Search.SearchView._appendToolbarToggle(toolbar,'Aa',Common.UIString('Match Case'));this._regexButton=Search.SearchView._appendToolbarToggle(toolbar,'.*',Common.UIString('Use Regular Expression'));toolbar.appendToolbarItem(searchItem);const refreshButton=new UI.ToolbarButton(Common.UIString('Refresh'),'largeicon-refresh');const clearButton=new UI.ToolbarButton(Common.UIString('Clear'),'largeicon-clear');toolbar.appendToolbarItem(refreshButton);toolbar.appendToolbarItem(clearButton);refreshButton.addEventListener(UI.ToolbarButton.Events.Click,this._onAction.bind(this));clearButton.addEventListener(UI.ToolbarButton.Events.Click,()=>{this._resetSearch();this._onSearchInputClear();});const searchStatusBarElement=this.contentElement.createChild('div','search-toolbar-summary');this._searchMessageElement=searchStatusBarElement.createChild('div','search-message');this._searchProgressPlaceholderElement=searchStatusBarElement.createChild('div','flex-centered');this._searchResultsMessageElement=searchStatusBarElement.createChild('div','search-message');this._advancedSearchConfig=Common.settings.createLocalSetting(settingKey+'SearchConfig',new Search.SearchConfig('',true,false).toPlainObject());this._load();this._searchScope=null;}
static _appendToolbarToggle(toolbar,text,tooltip){const toggle=new UI.ToolbarToggle(tooltip);toggle.setText(text);toggle.addEventListener(UI.ToolbarButton.Events.Click,()=>toggle.setToggled(!toggle.toggled()));toolbar.appendToolbarItem(toggle);return toggle;}
_buildSearchConfig(){return new Search.SearchConfig(this._search.value,!this._matchCaseButton.toggled(),this._regexButton.toggled());}
async toggle(queryCandidate,searchImmediately){if(queryCandidate){this._search.value=queryCandidate;}
if(this.isShowing()){this.focus();}else{this._focusOnShow=true;}
this._initScope();if(searchImmediately){this._onAction();}else{this._startIndexing();}}
createScope(){throw new Error('Not implemented');}
_initScope(){this._searchScope=this.createScope();}
wasShown(){if(this._focusOnShow){this.focus();this._focusOnShow=false;}}
_onIndexingFinished(){const finished=!this._progressIndicator.isCanceled();this._progressIndicator.done();this._progressIndicator=null;this._isIndexing=false;this._indexingFinished(finished);if(!finished){this._pendingSearchConfig=null;}
if(!this._pendingSearchConfig){return;}
const searchConfig=this._pendingSearchConfig;this._pendingSearchConfig=null;this._innerStartSearch(searchConfig);}
_startIndexing(){this._isIndexing=true;if(this._progressIndicator){this._progressIndicator.done();}
this._progressIndicator=new UI.ProgressIndicator();this._searchMessageElement.textContent=Common.UIString('Indexing\u2026');this._progressIndicator.show(this._searchProgressPlaceholderElement);this._searchScope.performIndexing(new Common.ProgressProxy(this._progressIndicator,this._onIndexingFinished.bind(this)));}
_onSearchInputClear(){this._search.value='';this.focus();}
_onSearchResult(searchId,searchResult){if(searchId!==this._searchId||!this._progressIndicator){return;}
if(this._progressIndicator&&this._progressIndicator.isCanceled()){this._onIndexingFinished();return;}
this._addSearchResult(searchResult);if(!searchResult.matchesCount()){return;}
if(!this._searchResultsPane){this._searchResultsPane=new Search.SearchResultsPane((this._searchConfig));this._showPane(this._searchResultsPane);}
this._searchResultsPane.addSearchResult(searchResult);}
_onSearchFinished(searchId,finished){if(searchId!==this._searchId||!this._progressIndicator){return;}
if(!this._searchResultsPane){this._nothingFound();}
this._searchFinished(finished);this._searchConfig=null;UI.ARIAUtils.alert(this._searchMessageElement.textContent+' '+this._searchResultsMessageElement.textContent,this._searchMessageElement);}
async _startSearch(searchConfig){this._resetSearch();++this._searchId;this._initScope();if(!this._isIndexing){this._startIndexing();}
this._pendingSearchConfig=searchConfig;}
_innerStartSearch(searchConfig){this._searchConfig=searchConfig;if(this._progressIndicator){this._progressIndicator.done();}
this._progressIndicator=new UI.ProgressIndicator();this._searchStarted(this._progressIndicator);this._searchScope.performSearch(searchConfig,this._progressIndicator,this._onSearchResult.bind(this,this._searchId),this._onSearchFinished.bind(this,this._searchId));}
_resetSearch(){this._stopSearch();this._showPane(null);this._searchResultsPane=null;}
_stopSearch(){if(this._progressIndicator&&!this._isIndexing){this._progressIndicator.cancel();}
if(this._searchScope){this._searchScope.stopSearch();}
this._searchConfig=null;}
_searchStarted(progressIndicator){this._resetCounters();if(!this._searchingView){this._searchingView=new UI.EmptyWidget(Common.UIString('Searching\u2026'));}
this._showPane(this._searchingView);this._searchMessageElement.textContent=Common.UIString('Searching\u2026');progressIndicator.show(this._searchProgressPlaceholderElement);this._updateSearchResultsMessage();}
_indexingFinished(finished){this._searchMessageElement.textContent=finished?'':Common.UIString('Indexing interrupted.');}
_updateSearchResultsMessage(){if(this._searchMatchesCount&&this._searchResultsCount){if(this._searchMatchesCount===1&&this._nonEmptySearchResultsCount===1){this._searchResultsMessageElement.textContent=Common.UIString('Found 1 matching line in 1 file.');}else if(this._searchMatchesCount>1&&this._nonEmptySearchResultsCount===1){this._searchResultsMessageElement.textContent=Common.UIString('Found %d matching lines in 1 file.',this._searchMatchesCount);}else{this._searchResultsMessageElement.textContent=Common.UIString('Found %d matching lines in %d files.',this._searchMatchesCount,this._nonEmptySearchResultsCount);}}else{this._searchResultsMessageElement.textContent='';}}
_showPane(panel){if(this._visiblePane){this._visiblePane.detach();}
if(panel){panel.show(this._searchResultsElement);}
this._visiblePane=panel;}
_resetCounters(){this._searchMatchesCount=0;this._searchResultsCount=0;this._nonEmptySearchResultsCount=0;}
_nothingFound(){if(!this._notFoundView){this._notFoundView=new UI.EmptyWidget(Common.UIString('No matches found.'));}
this._showPane(this._notFoundView);this._searchResultsMessageElement.textContent=Common.UIString('No matches found.');}
_addSearchResult(searchResult){const matchesCount=searchResult.matchesCount();this._searchMatchesCount+=matchesCount;this._searchResultsCount++;if(matchesCount){this._nonEmptySearchResultsCount++;}
this._updateSearchResultsMessage();}
_searchFinished(finished){this._searchMessageElement.textContent=finished?Common.UIString('Search finished.'):Common.UIString('Search interrupted.');}
focus(){this._search.focus();this._search.select();}
willHide(){this._stopSearch();}
_onKeyDown(event){switch(event.keyCode){case UI.KeyboardShortcut.Keys.Enter.code:this._onAction();break;}}
_save(){this._advancedSearchConfig.set(this._buildSearchConfig().toPlainObject());}
_load(){const searchConfig=Search.SearchConfig.fromPlainObject(this._advancedSearchConfig.get());this._search.value=searchConfig.query();this._matchCaseButton.setToggled(!searchConfig.ignoreCase());this._regexButton.setToggled(searchConfig.isRegex());}
_onAction(){UI.ARIAUtils.alert(' ',this._searchMessageElement);const searchConfig=this._buildSearchConfig();if(!searchConfig.query()||!searchConfig.query().length){return;}
this._save();this._startSearch(searchConfig);}}
self.Search=self.Search||{};Search=Search||{};Search.SearchView=SearchView;export default class SearchResultsPane extends UI.VBox{constructor(searchConfig){super(true);this._searchConfig=searchConfig;this._searchResults=[];this._treeOutline=new UI.TreeOutlineInShadow();this._treeOutline.hideOverflow();this._treeOutline.registerRequiredCSS('search/searchResultsPane.css');this.contentElement.appendChild(this._treeOutline.element);this._matchesExpandedCount=0;}
addSearchResult(searchResult){this._searchResults.push(searchResult);this._addTreeElement(searchResult);}
_addTreeElement(searchResult){const treeElement=new Search.SearchResultsPane.SearchResultsTreeElement(this._searchConfig,searchResult);this._treeOutline.appendChild(treeElement);if(!this._treeOutline.selectedTreeElement){treeElement.select(true,true);}
if(this._matchesExpandedCount<Search.SearchResultsPane._matchesExpandedByDefault){treeElement.expand();}
this._matchesExpandedCount+=searchResult.matchesCount();}}
export const _matchesExpandedByDefault=20;export const _matchesShownAtOnce=20;export class SearchResultsTreeElement extends UI.TreeElement{constructor(searchConfig,searchResult){super('',true);this._searchConfig=searchConfig;this._searchResult=searchResult;this._initialized=false;this.toggleOnClick=true;}
onexpand(){if(this._initialized){return;}
this._updateMatchesUI();this._initialized=true;}
_updateMatchesUI(){this.removeChildren();const toIndex=Math.min(this._searchResult.matchesCount(),Search.SearchResultsPane._matchesShownAtOnce);if(toIndex<this._searchResult.matchesCount()){this._appendSearchMatches(0,toIndex-1);this._appendShowMoreMatchesElement(toIndex-1);}else{this._appendSearchMatches(0,toIndex);}}
onattach(){this._updateSearchMatches();}
_updateSearchMatches(){this.listItemElement.classList.add('search-result');const fileNameSpan=span(this._searchResult.label(),'search-result-file-name');fileNameSpan.appendChild(span('\u2014','search-result-dash'));fileNameSpan.appendChild(span(this._searchResult.description(),'search-result-qualifier'));this.tooltip=this._searchResult.description();this.listItemElement.appendChild(fileNameSpan);const matchesCountSpan=createElement('span');matchesCountSpan.className='search-result-matches-count';matchesCountSpan.textContent=`${this._searchResult.matchesCount()}`;UI.ARIAUtils.setAccessibleName(matchesCountSpan,ls`Matches Count ${this._searchResult.matchesCount()}`);this.listItemElement.appendChild(matchesCountSpan);if(this.expanded){this._updateMatchesUI();}
function span(text,className){const span=createElement('span');span.className=className;span.textContent=text;return span;}}
_appendSearchMatches(fromIndex,toIndex){const searchResult=this._searchResult;const queries=this._searchConfig.queries();const regexes=[];for(let i=0;i<queries.length;++i){regexes.push(createSearchRegex(queries[i],!this._searchConfig.ignoreCase(),this._searchConfig.isRegex()));}
for(let i=fromIndex;i<toIndex;++i){const lineContent=searchResult.matchLineContent(i).trim();let matchRanges=[];for(let j=0;j<regexes.length;++j){matchRanges=matchRanges.concat(this._regexMatchRanges(lineContent,regexes[j]));}
const anchor=Components.Linkifier.linkifyRevealable(searchResult.matchRevealable(i),'');anchor.classList.add('search-match-link');const labelSpan=createElement('span');labelSpan.classList.add('search-match-line-number');const resultLabel=searchResult.matchLabel(i);labelSpan.textContent=resultLabel;if(typeof resultLabel==='number'&&!isNaN(resultLabel)){UI.ARIAUtils.setAccessibleName(labelSpan,ls`Line ${resultLabel}`);}else{UI.ARIAUtils.setAccessibleName(labelSpan,ls`${resultLabel}`);}
anchor.appendChild(labelSpan);const contentSpan=this._createContentSpan(lineContent,matchRanges);anchor.appendChild(contentSpan);const searchMatchElement=new UI.TreeElement();this.appendChild(searchMatchElement);searchMatchElement.listItemElement.className='search-match';searchMatchElement.listItemElement.appendChild(anchor);searchMatchElement.listItemElement.addEventListener('keydown',event=>{if(isEnterKey(event)){event.consume(true);Common.Revealer.reveal(searchResult.matchRevealable(i));}});searchMatchElement.tooltip=lineContent;}}
_appendShowMoreMatchesElement(startMatchIndex){const matchesLeftCount=this._searchResult.matchesCount()-startMatchIndex;const showMoreMatchesText=Common.UIString('Show %d more',matchesLeftCount);const showMoreMatchesTreeElement=new UI.TreeElement(showMoreMatchesText);this.appendChild(showMoreMatchesTreeElement);showMoreMatchesTreeElement.listItemElement.classList.add('show-more-matches');showMoreMatchesTreeElement.onselect=this._showMoreMatchesElementSelected.bind(this,showMoreMatchesTreeElement,startMatchIndex);}
_createContentSpan(lineContent,matchRanges){let trimBy=0;if(matchRanges.length>0&&matchRanges[0].offset>20){trimBy=15;}
lineContent=lineContent.substring(trimBy,1000+trimBy);if(trimBy){matchRanges=matchRanges.map(range=>new TextUtils.SourceRange(range.offset-trimBy+1,range.length));lineContent='\u2026'+lineContent;}
const contentSpan=createElement('span');contentSpan.className='search-match-content';contentSpan.textContent=lineContent;UI.ARIAUtils.setAccessibleName(contentSpan,`${lineContent} line`);UI.highlightRangesWithStyleClass(contentSpan,matchRanges,'highlighted-match');return contentSpan;}
_regexMatchRanges(lineContent,regex){regex.lastIndex=0;let match;const matchRanges=[];while((regex.lastIndex<lineContent.length)&&(match=regex.exec(lineContent))){matchRanges.push(new TextUtils.SourceRange(match.index,match[0].length));}
return matchRanges;}
_showMoreMatchesElementSelected(showMoreMatchesTreeElement,startMatchIndex){this.removeChild(showMoreMatchesTreeElement);this._appendSearchMatches(startMatchIndex,this._searchResult.matchesCount());return false;}}
self.Search=self.Search||{};Search=Search||{};Search.SearchResultsPane=SearchResultsPane;Search.SearchResultsPane._matchesExpandedByDefault=_matchesExpandedByDefault;Search.SearchResultsPane._matchesShownAtOnce=_matchesShownAtOnce;Search.SearchResultsPane.SearchResultsTreeElement=SearchResultsTreeElement;export class SearchConfig{constructor(query,ignoreCase,isRegex){this._query=query;this._ignoreCase=ignoreCase;this._isRegex=isRegex;this._parse();}
static fromPlainObject(object){return new SearchConfig(object.query,object.ignoreCase,object.isRegex);}
query(){return this._query;}
ignoreCase(){return this._ignoreCase;}
isRegex(){return this._isRegex;}
toPlainObject(){return{query:this.query(),ignoreCase:this.ignoreCase(),isRegex:this.isRegex()};}
_parse(){const quotedPattern=/"([^\\"]|\\.)+"/;const unquotedWordPattern=/(\s*(?!-?f(ile)?:)[^\\ ]|\\.)+/;const unquotedPattern=unquotedWordPattern.source+'(\\s+'+unquotedWordPattern.source+')*';const pattern=['(\\s*'+FilePatternRegex.source+'\\s*)','('+quotedPattern.source+')','('+unquotedPattern+')',].join('|');const regexp=new RegExp(pattern,'g');const queryParts=this._query.match(regexp)||[];this._fileQueries=[];this._queries=[];for(let i=0;i<queryParts.length;++i){const queryPart=queryParts[i];if(!queryPart){continue;}
const fileQuery=this._parseFileQuery(queryPart);if(fileQuery){this._fileQueries.push(fileQuery);this._fileRegexQueries=this._fileRegexQueries||[];this._fileRegexQueries.push({regex:new RegExp(fileQuery.text,this.ignoreCase?'i':''),isNegative:fileQuery.isNegative});continue;}
if(this._isRegex){this._queries.push(queryPart);continue;}
if(queryPart.startsWith('"')){if(!queryPart.endsWith('"')){continue;}
this._queries.push(this._parseQuotedQuery(queryPart));continue;}
this._queries.push(this._parseUnquotedQuery(queryPart));}}
filePathMatchesFileQuery(filePath){if(!this._fileRegexQueries){return true;}
for(let i=0;i<this._fileRegexQueries.length;++i){if(!!filePath.match(this._fileRegexQueries[i].regex)===this._fileRegexQueries[i].isNegative){return false;}}
return true;}
queries(){return this._queries;}
_parseUnquotedQuery(query){return query.replace(/\\(.)/g,'$1');}
_parseQuotedQuery(query){return query.substring(1,query.length-1).replace(/\\(.)/g,'$1');}
_parseFileQuery(query){const match=query.match(FilePatternRegex);if(!match){return null;}
const isNegative=!!match[1];query=match[3];let result='';for(let i=0;i<query.length;++i){const char=query[i];if(char==='*'){result+='.*';}else if(char==='\\'){++i;const nextChar=query[i];if(nextChar===' '){result+=' ';}}else{if(String.regexSpecialCharacters().indexOf(query.charAt(i))!==-1){result+='\\';}
result+=query.charAt(i);}}
return new QueryTerm(result,isNegative);}}
export const FilePatternRegex=/(-)?f(ile)?:((?:[^\\ ]|\\.)+)/;export class QueryTerm{constructor(text,isNegative){this.text=text;this.isNegative=isNegative;}}
export class SearchResult{label(){}
description(){}
matchesCount(){}
matchLabel(index){}
matchLineContent(index){}
matchRevealable(index){}}
export class SearchScope{performSearch(searchConfig,progress,searchResultCallback,searchFinishedCallback){}
performIndexing(progress){}
stopSearch(){}}
self.Search=self.Search||{};Search=Search||{};Search.SearchConfig=SearchConfig;Search.SearchConfig.RegexQuery;Search.SearchConfig.FilePatternRegex=FilePatternRegex;Search.SearchConfig.QueryTerm=QueryTerm;Search.SearchResult=SearchResult;Search.SearchScope=SearchScope;import*as InputModel from'./InputModel.js';import*as ScreencastApp from'./ScreencastApp.js';import*as ScreencastView from'./ScreencastView.js';export{InputModel,ScreencastApp,ScreencastView,};export default class ScreencastView extends UI.VBox{constructor(screenCaptureModel){super();this._screenCaptureModel=screenCaptureModel;this._domModel=screenCaptureModel.target().model(SDK.DOMModel);this._overlayModel=screenCaptureModel.target().model(SDK.OverlayModel);this._resourceTreeModel=screenCaptureModel.target().model(SDK.ResourceTreeModel);this._networkManager=screenCaptureModel.target().model(SDK.NetworkManager);this._inputModel=screenCaptureModel.target().model(Screencast.InputModel);this.setMinimumSize(150,150);this.registerRequiredCSS('screencast/screencastView.css');}
initialize(){this.element.classList.add('screencast');this._createNavigationBar();this._viewportElement=this.element.createChild('div','screencast-viewport hidden');this._canvasContainerElement=this._viewportElement.createChild('div','screencast-canvas-container');this._glassPaneElement=this._canvasContainerElement.createChild('div','screencast-glasspane fill hidden');this._canvasElement=this._canvasContainerElement.createChild('canvas');this._canvasElement.tabIndex=0;this._canvasElement.addEventListener('mousedown',this._handleMouseEvent.bind(this),false);this._canvasElement.addEventListener('mouseup',this._handleMouseEvent.bind(this),false);this._canvasElement.addEventListener('mousemove',this._handleMouseEvent.bind(this),false);this._canvasElement.addEventListener('mousewheel',this._handleMouseEvent.bind(this),false);this._canvasElement.addEventListener('click',this._handleMouseEvent.bind(this),false);this._canvasElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),false);this._canvasElement.addEventListener('keydown',this._handleKeyEvent.bind(this),false);this._canvasElement.addEventListener('keyup',this._handleKeyEvent.bind(this),false);this._canvasElement.addEventListener('keypress',this._handleKeyEvent.bind(this),false);this._canvasElement.addEventListener('blur',this._handleBlurEvent.bind(this),false);this._titleElement=this._canvasContainerElement.createChild('div','screencast-element-title monospace hidden');this._tagNameElement=this._titleElement.createChild('span','screencast-tag-name');this._nodeIdElement=this._titleElement.createChild('span','screencast-node-id');this._classNameElement=this._titleElement.createChild('span','screencast-class-name');this._titleElement.createTextChild(' ');this._nodeWidthElement=this._titleElement.createChild('span');this._titleElement.createChild('span','screencast-px').textContent='px';this._titleElement.createTextChild(' \u00D7 ');this._nodeHeightElement=this._titleElement.createChild('span');this._titleElement.createChild('span','screencast-px').textContent='px';this._titleElement.style.top='0';this._titleElement.style.left='0';this._imageElement=new Image();this._isCasting=false;this._context=this._canvasElement.getContext('2d');this._checkerboardPattern=this._createCheckerboardPattern(this._context);this._shortcuts=({});this._shortcuts[UI.KeyboardShortcut.makeKey('l',UI.KeyboardShortcut.Modifiers.Ctrl)]=this._focusNavigationBar.bind(this);SDK.targetManager.addEventListener(SDK.TargetManager.Events.SuspendStateChanged,this._onSuspendStateChange,this);this._updateGlasspane();}
wasShown(){this._startCasting();}
willHide(){this._stopCasting();}
_startCasting(){if(SDK.targetManager.allTargetsSuspended()){return;}
if(this._isCasting){return;}
this._isCasting=true;const maxImageDimension=2048;const dimensions=this._viewportDimensions();if(dimensions.width<0||dimensions.height<0){this._isCasting=false;return;}
dimensions.width*=window.devicePixelRatio;dimensions.height*=window.devicePixelRatio;this._screenCaptureModel.startScreencast('jpeg',80,Math.floor(Math.min(maxImageDimension,dimensions.width)),Math.floor(Math.min(maxImageDimension,dimensions.height)),undefined,this._screencastFrame.bind(this),this._screencastVisibilityChanged.bind(this));for(const emulationModel of SDK.targetManager.models(SDK.EmulationModel)){emulationModel.overrideEmulateTouch(true);}
if(this._overlayModel){this._overlayModel.setHighlighter(this);}}
_stopCasting(){if(!this._isCasting){return;}
this._isCasting=false;this._screenCaptureModel.stopScreencast();for(const emulationModel of SDK.targetManager.models(SDK.EmulationModel)){emulationModel.overrideEmulateTouch(false);}
if(this._overlayModel){this._overlayModel.setHighlighter(null);}}
_screencastFrame(base64Data,metadata){this._imageElement.onload=()=>{this._pageScaleFactor=metadata.pageScaleFactor;this._screenOffsetTop=metadata.offsetTop;this._scrollOffsetX=metadata.scrollOffsetX;this._scrollOffsetY=metadata.scrollOffsetY;const deviceSizeRatio=metadata.deviceHeight/metadata.deviceWidth;const dimensionsCSS=this._viewportDimensions();this._imageZoom=Math.min(dimensionsCSS.width/this._imageElement.naturalWidth,dimensionsCSS.height/(this._imageElement.naturalWidth*deviceSizeRatio));this._viewportElement.classList.remove('hidden');const bordersSize=_bordersSize;if(this._imageZoom<1.01/window.devicePixelRatio){this._imageZoom=1/window.devicePixelRatio;}
this._screenZoom=this._imageElement.naturalWidth*this._imageZoom/metadata.deviceWidth;this._viewportElement.style.width=metadata.deviceWidth*this._screenZoom+bordersSize+'px';this._viewportElement.style.height=metadata.deviceHeight*this._screenZoom+bordersSize+'px';this.highlightInOverlay({node:this._highlightNode},this._highlightConfig);};this._imageElement.src='data:image/jpg;base64,'+base64Data;}
_isGlassPaneActive(){return!this._glassPaneElement.classList.contains('hidden');}
_screencastVisibilityChanged(visible){this._targetInactive=!visible;this._updateGlasspane();}
_onSuspendStateChange(event){if(SDK.targetManager.allTargetsSuspended()){this._stopCasting();}else{this._startCasting();}
this._updateGlasspane();}
_updateGlasspane(){if(this._targetInactive){this._glassPaneElement.textContent=Common.UIString('The tab is inactive');this._glassPaneElement.classList.remove('hidden');}else if(SDK.targetManager.allTargetsSuspended()){this._glassPaneElement.textContent=Common.UIString('Profiling in progress');this._glassPaneElement.classList.remove('hidden');}else{this._glassPaneElement.classList.add('hidden');}}
async _handleMouseEvent(event){if(this._isGlassPaneActive()){event.consume();return;}
if(!this._pageScaleFactor||!this._domModel){return;}
if(!this._inspectModeConfig||event.type==='mousewheel'){if(this._inputModel){this._inputModel.emitTouchFromMouseEvent(event,this._screenOffsetTop,this._screenZoom);}
event.preventDefault();if(event.type==='mousedown'){this._canvasElement.focus();}
return;}
const position=this._convertIntoScreenSpace(event);const node=await this._domModel.nodeForLocation(Math.floor(position.x/this._pageScaleFactor+this._scrollOffsetX),Math.floor(position.y/this._pageScaleFactor+this._scrollOffsetY),Common.moduleSetting('showUAShadowDOM').get());if(!node){return;}
if(event.type==='mousemove'){this.highlightInOverlay({node},this._inspectModeConfig);this._domModel.overlayModel().nodeHighlightRequested(node.id);}else if(event.type==='click'){this._domModel.overlayModel().inspectNodeRequested(node.backendNodeId());}}
_handleKeyEvent(event){if(this._isGlassPaneActive()){event.consume();return;}
const shortcutKey=UI.KeyboardShortcut.makeKeyFromEvent((event));const handler=this._shortcuts[shortcutKey];if(handler&&handler(event)){event.consume();return;}
if(this._inputModel){this._inputModel.emitKeyEvent(event);}
event.consume();this._canvasElement.focus();}
_handleContextMenuEvent(event){event.consume(true);}
_handleBlurEvent(event){if(this._inputModel){this._inputModel.cancelTouch();}}
_convertIntoScreenSpace(event){const position={};position.x=Math.round(event.offsetX/this._screenZoom);position.y=Math.round(event.offsetY/this._screenZoom-this._screenOffsetTop);return position;}
onResize(){if(this._deferredCasting){clearTimeout(this._deferredCasting);delete this._deferredCasting;}
this._stopCasting();this._deferredCasting=setTimeout(this._startCasting.bind(this),100);}
highlightInOverlay(data,config){this._highlightInOverlay(data,config);}
async _highlightInOverlay(data,config){const{node:n,deferredNode,object}=data;let node=n;if(!node&&deferredNode){node=await deferredNode.resolvePromise();}
if(!node&&object){const domModel=object.runtimeModel().target().model(SDK.DOMModel);if(domModel){node=await domModel.pushObjectAsNodeToFrontend(object);}}
this._highlightNode=node;this._highlightConfig=config;if(!node){this._model=null;this._config=null;this._node=null;this._titleElement.classList.add('hidden');this._repaint();return;}
this._node=node;node.boxModel().then(model=>{if(!model||!this._pageScaleFactor){this._repaint();return;}
this._model=this._scaleModel(model);this._config=config;this._repaint();});}
_scaleModel(model){function scaleQuad(quad){for(let i=0;i<quad.length;i+=2){quad[i]=quad[i]*this._pageScaleFactor*this._screenZoom;quad[i+1]=(quad[i+1]*this._pageScaleFactor+this._screenOffsetTop)*this._screenZoom;}}
scaleQuad.call(this,model.content);scaleQuad.call(this,model.padding);scaleQuad.call(this,model.border);scaleQuad.call(this,model.margin);return model;}
_repaint(){const model=this._model;const config=this._config;const canvasWidth=this._canvasElement.getBoundingClientRect().width;const canvasHeight=this._canvasElement.getBoundingClientRect().height;this._canvasElement.width=window.devicePixelRatio*canvasWidth;this._canvasElement.height=window.devicePixelRatio*canvasHeight;this._context.save();this._context.scale(window.devicePixelRatio,window.devicePixelRatio);this._context.save();this._context.fillStyle=this._checkerboardPattern;this._context.fillRect(0,0,canvasWidth,this._screenOffsetTop*this._screenZoom);this._context.fillRect(0,this._screenOffsetTop*this._screenZoom+this._imageElement.naturalHeight*this._imageZoom,canvasWidth,canvasHeight);this._context.restore();if(model&&config){this._context.save();const transparentColor='rgba(0, 0, 0, 0)';const quads=[];if(model.content&&config.contentColor!==transparentColor){quads.push({quad:model.content,color:config.contentColor});}
if(model.padding&&config.paddingColor!==transparentColor){quads.push({quad:model.padding,color:config.paddingColor});}
if(model.border&&config.borderColor!==transparentColor){quads.push({quad:model.border,color:config.borderColor});}
if(model.margin&&config.marginColor!==transparentColor){quads.push({quad:model.margin,color:config.marginColor});}
for(let i=quads.length-1;i>0;--i){this._drawOutlinedQuadWithClip(quads[i].quad,quads[i-1].quad,quads[i].color);}
if(quads.length>0){this._drawOutlinedQuad(quads[0].quad,quads[0].color);}
this._context.restore();this._drawElementTitle();this._context.globalCompositeOperation='destination-over';}
this._context.drawImage(this._imageElement,0,this._screenOffsetTop*this._screenZoom,this._imageElement.naturalWidth*this._imageZoom,this._imageElement.naturalHeight*this._imageZoom);this._context.restore();}
_cssColor(color){if(!color){return'transparent';}
return Common.Color.fromRGBA([color.r,color.g,color.b,color.a]).asString(Common.Color.Format.RGBA)||'';}
_quadToPath(quad){this._context.beginPath();this._context.moveTo(quad[0],quad[1]);this._context.lineTo(quad[2],quad[3]);this._context.lineTo(quad[4],quad[5]);this._context.lineTo(quad[6],quad[7]);this._context.closePath();return this._context;}
_drawOutlinedQuad(quad,fillColor){this._context.save();this._context.lineWidth=2;this._quadToPath(quad).clip();this._context.fillStyle=this._cssColor(fillColor);this._context.fill();this._context.restore();}
_drawOutlinedQuadWithClip(quad,clipQuad,fillColor){this._context.fillStyle=this._cssColor(fillColor);this._context.save();this._context.lineWidth=0;this._quadToPath(quad).fill();this._context.globalCompositeOperation='destination-out';this._context.fillStyle='red';this._quadToPath(clipQuad).fill();this._context.restore();}
_drawElementTitle(){if(!this._node){return;}
const canvasWidth=this._canvasElement.getBoundingClientRect().width;const canvasHeight=this._canvasElement.getBoundingClientRect().height;const lowerCaseName=this._node.localName()||this._node.nodeName().toLowerCase();this._tagNameElement.textContent=lowerCaseName;this._nodeIdElement.textContent=this._node.getAttribute('id')?'#'+this._node.getAttribute('id'):'';this._nodeIdElement.textContent=this._node.getAttribute('id')?'#'+this._node.getAttribute('id'):'';let className=this._node.getAttribute('class');if(className&&className.length>50){className=className.substring(0,50)+'\u2026';}
this._classNameElement.textContent=className||'';this._nodeWidthElement.textContent=this._model.width;this._nodeHeightElement.textContent=this._model.height;this._titleElement.classList.remove('hidden');const titleWidth=this._titleElement.offsetWidth+6;const titleHeight=this._titleElement.offsetHeight+4;const anchorTop=this._model.margin[1];const anchorBottom=this._model.margin[7];const arrowHeight=7;let renderArrowUp=false;let renderArrowDown=false;let boxX=Math.max(2,this._model.margin[0]);if(boxX+titleWidth>canvasWidth){boxX=canvasWidth-titleWidth-2;}
let boxY;if(anchorTop>canvasHeight){boxY=canvasHeight-titleHeight-arrowHeight;renderArrowDown=true;}else if(anchorBottom<0){boxY=arrowHeight;renderArrowUp=true;}else if(anchorBottom+titleHeight+arrowHeight<canvasHeight){boxY=anchorBottom+arrowHeight-4;renderArrowUp=true;}else if(anchorTop-titleHeight-arrowHeight>0){boxY=anchorTop-titleHeight-arrowHeight+3;renderArrowDown=true;}else{boxY=arrowHeight;}
this._context.save();this._context.translate(0.5,0.5);this._context.beginPath();this._context.moveTo(boxX,boxY);if(renderArrowUp){this._context.lineTo(boxX+2*arrowHeight,boxY);this._context.lineTo(boxX+3*arrowHeight,boxY-arrowHeight);this._context.lineTo(boxX+4*arrowHeight,boxY);}
this._context.lineTo(boxX+titleWidth,boxY);this._context.lineTo(boxX+titleWidth,boxY+titleHeight);if(renderArrowDown){this._context.lineTo(boxX+4*arrowHeight,boxY+titleHeight);this._context.lineTo(boxX+3*arrowHeight,boxY+titleHeight+arrowHeight);this._context.lineTo(boxX+2*arrowHeight,boxY+titleHeight);}
this._context.lineTo(boxX,boxY+titleHeight);this._context.closePath();this._context.fillStyle='rgb(255, 255, 194)';this._context.fill();this._context.strokeStyle='rgb(128, 128, 128)';this._context.stroke();this._context.restore();this._titleElement.style.top=(boxY+3)+'px';this._titleElement.style.left=(boxX+3)+'px';}
_viewportDimensions(){const gutterSize=30;const bordersSize=_bordersSize;const width=this.element.offsetWidth-bordersSize-gutterSize;const height=this.element.offsetHeight-bordersSize-gutterSize-_navBarHeight;return{width:width,height:height};}
setInspectMode(mode,config){this._inspectModeConfig=mode!==Protocol.Overlay.InspectMode.None?config:null;return Promise.resolve();}
highlightFrame(frameId){}
_createCheckerboardPattern(context){const pattern=(createElement('canvas'));const size=32;pattern.width=size*2;pattern.height=size*2;const pctx=pattern.getContext('2d');pctx.fillStyle='rgb(195, 195, 195)';pctx.fillRect(0,0,size*2,size*2);pctx.fillStyle='rgb(225, 225, 225)';pctx.fillRect(0,0,size,size);pctx.fillRect(size,size,size,size);return context.createPattern(pattern,'repeat');}
_createNavigationBar(){this._navigationBar=this.element.createChild('div','screencast-navigation');this._navigationBack=this._navigationBar.createChild('button','back');this._navigationBack.disabled=true;this._navigationForward=this._navigationBar.createChild('button','forward');this._navigationForward.disabled=true;this._navigationReload=this._navigationBar.createChild('button','reload');this._navigationUrl=UI.createInput();this._navigationBar.appendChild(this._navigationUrl);this._navigationUrl.type='text';this._navigationProgressBar=new Screencast.ScreencastView.ProgressTracker(this._resourceTreeModel,this._networkManager,this._navigationBar.createChild('div','progress'));if(this._resourceTreeModel){this._navigationBack.addEventListener('click',this._navigateToHistoryEntry.bind(this,-1),false);this._navigationForward.addEventListener('click',this._navigateToHistoryEntry.bind(this,1),false);this._navigationReload.addEventListener('click',this._navigateReload.bind(this),false);this._navigationUrl.addEventListener('keyup',this._navigationUrlKeyUp.bind(this),true);this._requestNavigationHistory();this._resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._requestNavigationHistory,this);this._resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.CachedResourcesLoaded,this._requestNavigationHistory,this);}}
_navigateToHistoryEntry(offset){const newIndex=this._historyIndex+offset;if(newIndex<0||newIndex>=this._historyEntries.length){return;}
this._resourceTreeModel.navigateToHistoryEntry(this._historyEntries[newIndex]);this._requestNavigationHistory();}
_navigateReload(){this._resourceTreeModel.reloadPage();}
_navigationUrlKeyUp(event){if(event.key!=='Enter'){return;}
let url=this._navigationUrl.value;if(!url){return;}
if(!url.match(_SchemeRegex)){url='http://'+url;}
this._resourceTreeModel.navigate(url);this._canvasElement.focus();}
async _requestNavigationHistory(){const history=await this._resourceTreeModel.navigationHistory();if(!history){return;}
this._historyIndex=history.currentIndex;this._historyEntries=history.entries;this._navigationBack.disabled=this._historyIndex===0;this._navigationForward.disabled=this._historyIndex===(this._historyEntries.length-1);let url=this._historyEntries[this._historyIndex].url;const match=url.match(_HttpRegex);if(match){url=match[1];}
Host.InspectorFrontendHost.inspectedURLChanged(url);this._navigationUrl.value=url;}
_focusNavigationBar(){this._navigationUrl.focus();this._navigationUrl.select();return true;}}
export const _bordersSize=44;export const _navBarHeight=29;export const _HttpRegex=/^http:\/\/(.+)/;export const _SchemeRegex=/^(https?|about|chrome):/;export class ProgressTracker{constructor(resourceTreeModel,networkManager,element){this._element=element;if(resourceTreeModel){resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._onMainFrameNavigated,this);resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load,this._onLoad,this);}
if(networkManager){networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted,this._onRequestStarted,this);networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished,this._onRequestFinished,this);}}
_onMainFrameNavigated(){this._requestIds={};this._startedRequests=0;this._finishedRequests=0;this._maxDisplayedProgress=0;this._updateProgress(0.1);}
_onLoad(){delete this._requestIds;this._updateProgress(1);setTimeout(function(){if(!this._navigationProgressVisible()){this._displayProgress(0);}}.bind(this),500);}
_navigationProgressVisible(){return!!this._requestIds;}
_onRequestStarted(event){if(!this._navigationProgressVisible()){return;}
const request=(event.data);if(request.type===Common.resourceTypes.WebSocket){return;}
this._requestIds[request.requestId()]=request;++this._startedRequests;}
_onRequestFinished(event){if(!this._navigationProgressVisible()){return;}
const request=(event.data);if(!(request.requestId()in this._requestIds)){return;}
++this._finishedRequests;setTimeout(function(){this._updateProgress(this._finishedRequests/this._startedRequests*0.9);}.bind(this),500);}
_updateProgress(progress){if(!this._navigationProgressVisible()){return;}
if(this._maxDisplayedProgress>=progress){return;}
this._maxDisplayedProgress=progress;this._displayProgress(progress);}
_displayProgress(progress){this._element.style.width=(100*progress)+'%';}}
self.Screencast=self.Screencast||{};Screencast=Screencast||{};Screencast.ScreencastView=ScreencastView;Screencast.ScreencastView._bordersSize=_bordersSize;Screencast.ScreencastView._navBarHeight=_navBarHeight;Screencast.ScreencastView._HttpRegex=_HttpRegex;Screencast.ScreencastView._SchemeRegex=_SchemeRegex;Screencast.ScreencastView.ProgressTracker=ProgressTracker;export default class ScreencastApp{constructor(){this._enabledSetting=Common.settings.createSetting('screencastEnabled',true);this._toggleButton=new UI.ToolbarToggle(Common.UIString('Toggle screencast'),'largeicon-phone');this._toggleButton.setToggled(this._enabledSetting.get());this._toggleButton.setEnabled(false);this._toggleButton.addEventListener(UI.ToolbarButton.Events.Click,this._toggleButtonClicked,this);SDK.targetManager.observeModels(SDK.ScreenCaptureModel,this);}
static _instance(){if(!Screencast.ScreencastApp._appInstance){Screencast.ScreencastApp._appInstance=new Screencast.ScreencastApp();}
return Screencast.ScreencastApp._appInstance;}
presentUI(document){const rootView=new UI.RootView();this._rootSplitWidget=new UI.SplitWidget(false,true,'InspectorView.screencastSplitViewState',300,300);this._rootSplitWidget.setVertical(true);this._rootSplitWidget.setSecondIsSidebar(true);this._rootSplitWidget.show(rootView.element);this._rootSplitWidget.hideMain();this._rootSplitWidget.setSidebarWidget(UI.inspectorView);UI.inspectorView.setOwnerSplit(this._rootSplitWidget);rootView.attachToDocument(document);rootView.focus();}
modelAdded(screenCaptureModel){if(this._screenCaptureModel){return;}
this._screenCaptureModel=screenCaptureModel;this._toggleButton.setEnabled(true);this._screencastView=new Screencast.ScreencastView(screenCaptureModel);this._rootSplitWidget.setMainWidget(this._screencastView);this._screencastView.initialize();this._onScreencastEnabledChanged();}
modelRemoved(screenCaptureModel){if(this._screenCaptureModel!==screenCaptureModel){return;}
delete this._screenCaptureModel;this._toggleButton.setEnabled(false);this._screencastView.detach();delete this._screencastView;this._onScreencastEnabledChanged();}
_toggleButtonClicked(){const enabled=!this._toggleButton.toggled();this._enabledSetting.set(enabled);this._onScreencastEnabledChanged();}
_onScreencastEnabledChanged(){if(!this._rootSplitWidget){return;}
const enabled=this._enabledSetting.get()&&this._screencastView;this._toggleButton.setToggled(enabled);if(enabled){this._rootSplitWidget.showBoth();}else{this._rootSplitWidget.hideMain();}}}
export class ToolbarButtonProvider{item(){return Screencast.ScreencastApp._instance()._toggleButton;}}
export class ScreencastAppProvider{createApp(){return Screencast.ScreencastApp._instance();}}
self.Screencast=self.Screencast||{};Screencast=Screencast||{};Screencast.ScreencastApp=ScreencastApp;Screencast.ScreencastApp.ToolbarButtonProvider=ToolbarButtonProvider;Screencast.ScreencastApp._appInstance;Screencast.ScreencastAppProvider=ScreencastAppProvider;export class InputModel extends SDK.SDKModel{constructor(target){super(target);this._inputAgent=target.inputAgent();this._activeTouchOffsetTop=null;this._activeTouchParams=null;}
emitKeyEvent(event){let type;switch(event.type){case'keydown':type='keyDown';break;case'keyup':type='keyUp';break;case'keypress':type='char';break;default:return;}
const text=event.type==='keypress'?String.fromCharCode(event.charCode):undefined;this._inputAgent.invoke_dispatchKeyEvent({type:type,modifiers:this._modifiersForEvent(event),text:text,unmodifiedText:text?text.toLowerCase():undefined,keyIdentifier:event.keyIdentifier,code:event.code,key:event.key,windowsVirtualKeyCode:event.keyCode,nativeVirtualKeyCode:event.keyCode,autoRepeat:false,isKeypad:false,isSystemKey:false});}
emitTouchFromMouseEvent(event,offsetTop,zoom){const buttons={0:'none',1:'left',2:'middle',3:'right'};const types={'mousedown':'mousePressed','mouseup':'mouseReleased','mousemove':'mouseMoved','mousewheel':'mouseWheel'};if(!(event.type in types)||!(event.which in buttons)){return;}
if(event.type!=='mousewheel'&&buttons[event.which]==='none'){return;}
if(event.type==='mousedown'||this._activeTouchOffsetTop===null){this._activeTouchOffsetTop=offsetTop;}
const x=Math.round(event.offsetX/zoom);let y=Math.round(event.offsetY/zoom);y=Math.round(y-this._activeTouchOffsetTop);const params={type:types[event.type],x:x,y:y,modifiers:this._modifiersForEvent(event),button:buttons[event.which],clickCount:0};if(event.type==='mousewheel'){params.deltaX=event.wheelDeltaX/zoom;params.deltaY=event.wheelDeltaY/zoom;}else{this._activeTouchParams=params;}
if(event.type==='mouseup'){this._activeTouchOffsetTop=null;}
this._inputAgent.invoke_emulateTouchFromMouseEvent(params);}
cancelTouch(){if(this._activeTouchParams!==null){const params=this._activeTouchParams;this._activeTouchParams=null;params.type='mouseReleased';this._inputAgent.invoke_emulateTouchFromMouseEvent(params);}}
_modifiersForEvent(event){return(event.altKey?1:0)|(event.ctrlKey?2:0)|(event.metaKey?4:0)|(event.shiftKey?8:0);}}
SDK.SDKModel.register(InputModel,SDK.Target.Capability.Input,false);self.Screencast=self.Screencast||{};Screencast=Screencast||{};Screencast.InputModel=InputModel;import*as PerformanceMonitor from'./PerformanceMonitor.js';export{PerformanceMonitor,};export class PerformanceMonitorImpl extends UI.HBox{constructor(){super(true);this.registerRequiredCSS('performance_monitor/performanceMonitor.css');this.contentElement.classList.add('perfmon-pane');this._metricsBuffer=[];this._pixelsPerMs=10/1000;this._pollIntervalMs=500;this._scaleHeight=16;this._graphHeight=90;this._gridColor=UI.themeSupport.patchColorText('rgba(0, 0, 0, 0.08)',UI.ThemeSupport.ColorUsage.Foreground);this._controlPane=new PerformanceMonitor.PerformanceMonitor.ControlPane(this.contentElement);const chartContainer=this.contentElement.createChild('div','perfmon-chart-container');this._canvas=(chartContainer.createChild('canvas'));this._canvas.tabIndex=-1;UI.ARIAUtils.setAccessibleName(this._canvas,Common.UIString('Graphs displaying a real-time view of performance metrics'));this.contentElement.createChild('div','perfmon-chart-suspend-overlay fill').createChild('div').textContent=Common.UIString('Paused');this._controlPane.addEventListener(PerformanceMonitor.PerformanceMonitor.ControlPane.Events.MetricChanged,this._recalcChartHeight,this);SDK.targetManager.observeModels(SDK.PerformanceMetricsModel,this);}
wasShown(){if(!this._model){return;}
SDK.targetManager.addEventListener(SDK.TargetManager.Events.SuspendStateChanged,this._suspendStateChanged,this);this._model.enable();this._suspendStateChanged();}
willHide(){if(!this._model){return;}
SDK.targetManager.removeEventListener(SDK.TargetManager.Events.SuspendStateChanged,this._suspendStateChanged,this);this._stopPolling();this._model.disable();}
modelAdded(model){if(this._model){return;}
this._model=model;if(this.isShowing()){this.wasShown();}}
modelRemoved(model){if(this._model!==model){return;}
if(this.isShowing()){this.willHide();}
this._model=null;}
_suspendStateChanged(){const suspended=SDK.targetManager.allTargetsSuspended();if(suspended){this._stopPolling();}else{this._startPolling();}
this.contentElement.classList.toggle('suspended',suspended);}
_startPolling(){this._startTimestamp=0;this._pollTimer=setInterval(()=>this._poll(),this._pollIntervalMs);this.onResize();animate.call(this);function animate(){this._draw();this._animationId=this.contentElement.window().requestAnimationFrame(animate.bind(this));}}
_stopPolling(){clearInterval(this._pollTimer);this.contentElement.window().cancelAnimationFrame(this._animationId);this._metricsBuffer=[];}
async _poll(){const data=await this._model.requestMetrics();const timestamp=data.timestamp;const metrics=data.metrics;this._metricsBuffer.push({timestamp,metrics:metrics});const millisPerWidth=this._width/this._pixelsPerMs;const maxCount=Math.ceil(millisPerWidth/this._pollIntervalMs*2);if(this._metricsBuffer.length>maxCount*2)
{this._metricsBuffer.splice(0,this._metricsBuffer.length-maxCount);}
this._controlPane.updateMetrics(metrics);}
_draw(){const ctx=(this._canvas.getContext('2d'));ctx.save();ctx.scale(window.devicePixelRatio,window.devicePixelRatio);ctx.clearRect(0,0,this._width,this._height);ctx.save();ctx.translate(0,this._scaleHeight);for(const chartInfo of this._controlPane.charts()){if(!this._controlPane.isActive(chartInfo.metrics[0].name)){continue;}
this._drawChart(ctx,chartInfo,this._graphHeight);ctx.translate(0,this._graphHeight);}
ctx.restore();this._drawHorizontalGrid(ctx);ctx.restore();}
_drawHorizontalGrid(ctx){const labelDistanceSeconds=10;const lightGray=UI.themeSupport.patchColorText('rgba(0, 0, 0, 0.02)',UI.ThemeSupport.ColorUsage.Foreground);ctx.font='10px '+Host.fontFamily();ctx.fillStyle=UI.themeSupport.patchColorText('rgba(0, 0, 0, 0.55)',UI.ThemeSupport.ColorUsage.Foreground);const currentTime=Date.now()/1000;for(let sec=Math.ceil(currentTime);;--sec){const x=this._width-((currentTime-sec)*1000-this._pollIntervalMs)*this._pixelsPerMs;if(x<-50){break;}
ctx.beginPath();ctx.moveTo(x,0);ctx.lineTo(x,this._height);if(sec>=0&&sec%labelDistanceSeconds===0){ctx.fillText(new Date(sec*1000).toLocaleTimeString(),x+4,12);}
ctx.strokeStyle=sec%labelDistanceSeconds?lightGray:this._gridColor;ctx.stroke();}}
_drawChart(ctx,chartInfo,height){ctx.save();ctx.rect(0,0,this._width,height);ctx.clip();const bottomPadding=8;const extraSpace=1.05;const max=this._calcMax(chartInfo)*extraSpace;const stackedChartBaseLandscape=chartInfo.stacked?new Map():null;const paths=[];for(let i=chartInfo.metrics.length-1;i>=0;--i){const metricInfo=chartInfo.metrics[i];paths.push({path:this._buildMetricPath(chartInfo,metricInfo,height-bottomPadding,max,i?stackedChartBaseLandscape:null),color:metricInfo.color});}
const backgroundColor=Common.Color.parse(UI.themeSupport.patchColorText('white',UI.ThemeSupport.ColorUsage.Background));for(const path of paths.reverse()){const color=path.color;ctx.save();ctx.fillStyle=backgroundColor.blendWith(Common.Color.parse(color).setAlpha(0.2)).asString(null);ctx.fill(path.path);ctx.strokeStyle=color;ctx.lineWidth=0.5;ctx.stroke(path.path);ctx.restore();}
ctx.fillStyle=UI.themeSupport.patchColorText('rgba(0, 0, 0, 0.55)',UI.ThemeSupport.ColorUsage.Foreground);ctx.font=`10px  ${Host.fontFamily()}`;ctx.fillText(chartInfo.title,8,10);this._drawVerticalGrid(ctx,height-bottomPadding,max,chartInfo);ctx.restore();}
_calcMax(chartInfo){if(chartInfo.max){return chartInfo.max;}
const width=this._width;const startTime=performance.now()-this._pollIntervalMs-width/this._pixelsPerMs;let max=-Infinity;for(const metricInfo of chartInfo.metrics){for(let i=this._metricsBuffer.length-1;i>=0;--i){const metrics=this._metricsBuffer[i];const value=metrics.metrics.get(metricInfo.name);max=Math.max(max,value);if(metrics.timestamp<startTime){break;}}}
if(!this._metricsBuffer.length){return 10;}
const base10=Math.pow(10,Math.floor(Math.log10(max)));max=Math.ceil(max/base10/2)*base10*2;const alpha=0.2;chartInfo.currentMax=max*alpha+(chartInfo.currentMax||max)*(1-alpha);return chartInfo.currentMax;}
_drawVerticalGrid(ctx,height,max,info){let base=Math.pow(10,Math.floor(Math.log10(max)));const firstDigit=Math.floor(max/base);if(firstDigit!==1&&firstDigit%2===1){base*=2;}
let scaleValue=Math.floor(max/base)*base;const span=max;const topPadding=18;const visibleHeight=height-topPadding;ctx.fillStyle=UI.themeSupport.patchColorText('rgba(0, 0, 0, 0.55)',UI.ThemeSupport.ColorUsage.Foreground);ctx.strokeStyle=this._gridColor;ctx.beginPath();for(let i=0;i<2;++i){const y=calcY(scaleValue);const labelText=PerformanceMonitor.PerformanceMonitor.MetricIndicator._formatNumber(scaleValue,info);ctx.moveTo(0,y);ctx.lineTo(4,y);ctx.moveTo(ctx.measureText(labelText).width+12,y);ctx.lineTo(this._width,y);ctx.fillText(labelText,8,calcY(scaleValue)+3);scaleValue/=2;}
ctx.stroke();ctx.beginPath();ctx.moveTo(0,height+0.5);ctx.lineTo(this._width,height+0.5);ctx.strokeStyle=UI.themeSupport.patchColorText('rgba(0, 0, 0, 0.2)',UI.ThemeSupport.ColorUsage.Foreground);ctx.stroke();function calcY(value){return Math.round(height-visibleHeight*value/span)+0.5;}}
_buildMetricPath(chartInfo,metricInfo,height,scaleMax,stackedChartBaseLandscape){const path=new Path2D();const topPadding=18;const visibleHeight=height-topPadding;if(visibleHeight<1){return path;}
const span=scaleMax;const metricName=metricInfo.name;const pixelsPerMs=this._pixelsPerMs;const startTime=performance.now()-this._pollIntervalMs-this._width/pixelsPerMs;const smooth=chartInfo.smooth;let x=0;let lastY=0;let lastX=0;if(this._metricsBuffer.length){x=(this._metricsBuffer[0].timestamp-startTime)*pixelsPerMs;path.moveTo(x,calcY(0));path.lineTo(this._width+5,calcY(0));lastY=calcY(this._metricsBuffer.peekLast().metrics.get(metricName));lastX=this._width+5;path.lineTo(lastX,lastY);}
for(let i=this._metricsBuffer.length-1;i>=0;--i){const metrics=this._metricsBuffer[i];const timestamp=metrics.timestamp;let value=metrics.metrics.get(metricName);if(stackedChartBaseLandscape){value+=stackedChartBaseLandscape.get(timestamp)||0;value=Number.constrain(value,0,1);stackedChartBaseLandscape.set(timestamp,value);}
const y=calcY(value);x=(timestamp-startTime)*pixelsPerMs;if(smooth){const midX=(lastX+x)/2;path.bezierCurveTo(midX,lastY,midX,y,x,y);}else{path.lineTo(x,lastY);path.lineTo(x,y);}
lastX=x;lastY=y;if(timestamp<startTime){break;}}
return path;function calcY(value){return Math.round(height-visibleHeight*value/span)+0.5;}}
onResize(){super.onResize();this._width=this._canvas.offsetWidth;this._canvas.width=Math.round(this._width*window.devicePixelRatio);this._recalcChartHeight();}
_recalcChartHeight(){let height=this._scaleHeight;for(const chartInfo of this._controlPane.charts()){if(this._controlPane.isActive(chartInfo.metrics[0].name)){height+=this._graphHeight;}}
this._height=Math.ceil(height*window.devicePixelRatio);this._canvas.height=this._height;this._canvas.style.height=`${this._height / window.devicePixelRatio}px`;}}
export const Format={Percent:Symbol('Percent'),Bytes:Symbol('Bytes'),};export class ControlPane extends Common.Object{constructor(parent){super();this.element=parent.createChild('div','perfmon-control-pane');this._enabledChartsSetting=Common.settings.createSetting('perfmonActiveIndicators2',['TaskDuration','JSHeapTotalSize','Nodes']);this._enabledCharts=new Set(this._enabledChartsSetting.get());const format=PerformanceMonitor.PerformanceMonitor.Format;this._chartsInfo=[{title:Common.UIString('CPU usage'),metrics:[{name:'TaskDuration',color:'#999'},{name:'ScriptDuration',color:'orange'},{name:'LayoutDuration',color:'blueviolet'},{name:'RecalcStyleDuration',color:'violet'}],format:format.Percent,smooth:true,stacked:true,color:'red',max:1},{title:Common.UIString('JS heap size'),metrics:[{name:'JSHeapTotalSize',color:'#99f'},{name:'JSHeapUsedSize',color:'blue'}],format:format.Bytes,color:'blue'},{title:Common.UIString('DOM Nodes'),metrics:[{name:'Nodes',color:'green'}]},{title:Common.UIString('JS event listeners'),metrics:[{name:'JSEventListeners',color:'yellowgreen'}]},{title:Common.UIString('Documents'),metrics:[{name:'Documents',color:'darkblue'}]},{title:Common.UIString('Document Frames'),metrics:[{name:'Frames',color:'darkcyan'}]},{title:Common.UIString('Layouts / sec'),metrics:[{name:'LayoutCount',color:'hotpink'}]},{title:Common.UIString('Style recalcs / sec'),metrics:[{name:'RecalcStyleCount',color:'deeppink'}]}];for(const info of this._chartsInfo){for(const metric of info.metrics){metric.color=UI.themeSupport.patchColorText(metric.color,UI.ThemeSupport.ColorUsage.Foreground);}}
this._indicators=new Map();for(const chartInfo of this._chartsInfo){const chartName=chartInfo.metrics[0].name;const active=this._enabledCharts.has(chartName);const indicator=new PerformanceMonitor.PerformanceMonitor.MetricIndicator(this.element,chartInfo,active,this._onToggle.bind(this,chartName));this._indicators.set(chartName,indicator);}}
_onToggle(chartName,active){if(active){this._enabledCharts.add(chartName);}else{this._enabledCharts.delete(chartName);}
this._enabledChartsSetting.set(Array.from(this._enabledCharts));this.dispatchEventToListeners(PerformanceMonitor.PerformanceMonitor.ControlPane.Events.MetricChanged);}
charts(){return this._chartsInfo;}
isActive(metricName){return this._enabledCharts.has(metricName);}
updateMetrics(metrics){for(const name of this._indicators.keys()){if(metrics.has(name)){this._indicators.get(name).setValue(metrics.get(name));}}}}
export const Events={MetricChanged:Symbol('MetricChanged')};export class MetricIndicator{constructor(parent,info,active,onToggle){const color=info.color||info.metrics[0].color;this._info=info;this._active=active;this._onToggle=onToggle;this.element=parent.createChild('div','perfmon-indicator');this._swatchElement=UI.Icon.create('smallicon-checkmark-square','perfmon-indicator-swatch');this._swatchElement.style.backgroundColor=color;this.element.appendChild(this._swatchElement);this.element.createChild('div','perfmon-indicator-title').textContent=info.title;this._valueElement=this.element.createChild('div','perfmon-indicator-value');this._valueElement.style.color=color;this.element.addEventListener('click',()=>this._toggleIndicator());this.element.addEventListener('keypress',event=>this._handleKeypress(event));this.element.classList.toggle('active',active);UI.ARIAUtils.markAsCheckbox(this.element);UI.ARIAUtils.setChecked(this.element,this._active);this.element.tabIndex=0;}
static _formatNumber(value,info){if(!PerformanceMonitor.PerformanceMonitor.MetricIndicator._numberFormatter){PerformanceMonitor.PerformanceMonitor.MetricIndicator._numberFormatter=new Intl.NumberFormat('en-US',{maximumFractionDigits:1});PerformanceMonitor.PerformanceMonitor.MetricIndicator._percentFormatter=new Intl.NumberFormat('en-US',{maximumFractionDigits:1,style:'percent'});}
switch(info.format){case PerformanceMonitor.PerformanceMonitor.Format.Percent:return PerformanceMonitor.PerformanceMonitor.MetricIndicator._percentFormatter.format(value);case PerformanceMonitor.PerformanceMonitor.Format.Bytes:return Number.bytesToString(value);default:return PerformanceMonitor.PerformanceMonitor.MetricIndicator._numberFormatter.format(value);}}
setValue(value){this._valueElement.textContent=PerformanceMonitor.PerformanceMonitor.MetricIndicator._formatNumber(value,this._info);}
_toggleIndicator(){this._active=!this._active;this.element.classList.toggle('active',this._active);UI.ARIAUtils.setChecked(this.element,this._active);this._onToggle(this._active);}
_handleKeypress(event){const keyboardEvent=(event);if(keyboardEvent.key===' '||keyboardEvent.key==='Enter'){this._toggleIndicator();}}}
export const _format=new Intl.NumberFormat('en-US',{maximumFractionDigits:1});self.PerformanceMonitor=self.PerformanceMonitor||{};PerformanceMonitor=PerformanceMonitor||{};PerformanceMonitor.PerformanceMonitor=PerformanceMonitorImpl;PerformanceMonitor.PerformanceMonitor.MetricInfo;PerformanceMonitor.PerformanceMonitor.Format=Format;PerformanceMonitor.PerformanceMonitor.ChartInfo;PerformanceMonitor.PerformanceMonitor.ControlPane=ControlPane;PerformanceMonitor.PerformanceMonitor.ControlPane.Events=Events;PerformanceMonitor.PerformanceMonitor.MetricIndicator=MetricIndicator;PerformanceMonitor.PerformanceMonitor.MetricIndicator._format=_format;import*as ScriptSnippetFileSystem from'./ScriptSnippetFileSystem.js';import*as SnippetsQuickOpen from'./SnippetsQuickOpen.js';export{ScriptSnippetFileSystem,SnippetsQuickOpen,};export default class SnippetsQuickOpen extends QuickOpen.FilteredListWidget.Provider{constructor(){super();this._snippets=[];}
selectItem(itemIndex,promptValue){if(itemIndex===null){return;}
Snippets.evaluateScriptSnippet(this._snippets[itemIndex]);}
notFoundText(query){return Common.UIString('No snippets found.');}
attach(){this._snippets=Snippets.project.uiSourceCodes();}
detach(){this._snippets=[];}
itemCount(){return this._snippets.length;}
itemKeyAt(itemIndex){return this._snippets[itemIndex].name();}
renderItem(itemIndex,query,titleElement,subtitleElement){titleElement.textContent=unescape(this._snippets[itemIndex].name());titleElement.classList.add('monospace');QuickOpen.FilteredListWidget.highlightRanges(titleElement,query,true);}}
self.Snippets=self.Snippets||{};Snippets=Snippets||{};Snippets.SnippetsQuickOpen=SnippetsQuickOpen;class SnippetFileSystem extends Persistence.PlatformFileSystem{constructor(){super('snippet://','snippets');this._lastSnippetIdentifierSetting=Common.settings.createSetting('scriptSnippets_lastIdentifier',0);this._snippetsSetting=Common.settings.createSetting('scriptSnippets',[]);}
initialFilePaths(){const savedSnippets=this._snippetsSetting.get();return savedSnippets.map(snippet=>escape(snippet.name));}
async createFile(path,name){const nextId=this._lastSnippetIdentifierSetting.get()+1;this._lastSnippetIdentifierSetting.set(nextId);const snippetName=ls`Script snippet #${nextId}`;const snippets=this._snippetsSetting.get();snippets.push({name:snippetName,content:''});this._snippetsSetting.set(snippets);return escape(snippetName);}
async deleteFile(path){const name=unescape(path.substring(1));const allSnippets=this._snippetsSetting.get();const snippets=allSnippets.filter(snippet=>snippet.name!==name);if(allSnippets.length!==snippets.length){this._snippetsSetting.set(snippets);return true;}
return false;}
async requestFileContent(path){const name=unescape(path.substring(1));const snippet=this._snippetsSetting.get().find(snippet=>snippet.name===name);return{content:snippet?snippet.content:null,isEncoded:false};}
async setFileContent(path,content,isBase64){const name=unescape(path.substring(1));const snippets=this._snippetsSetting.get();const snippet=snippets.find(snippet=>snippet.name===name);if(snippet){snippet.content=content;this._snippetsSetting.set(snippets);return true;}
return false;}
renameFile(path,newName,callback){const name=unescape(path.substring(1));const snippets=this._snippetsSetting.get();const snippet=snippets.find(snippet=>snippet.name===name);newName=newName.trim();if(!snippet||newName.length===0||snippets.find(snippet=>snippet.name===newName)){callback(false);return;}
snippet.name=newName;this._snippetsSetting.set(snippets);callback(true,newName);}
async searchInPath(query,progress){const re=new RegExp(query.escapeForRegExp(),'i');const snippets=this._snippetsSetting.get().filter(snippet=>snippet.content.match(re));return snippets.map(snippet=>escape(snippet.name));}
mimeFromPath(path){return'text/javascript';}
contentType(path){return Common.resourceTypes.Script;}
tooltipForURL(url){return ls`Linked to ${unescape(url.substring(this.path().length))}`;}
supportsAutomapping(){return true;}}
export async function evaluateScriptSnippet(uiSourceCode){if(!uiSourceCode.url().startsWith('snippet://')){return;}
const executionContext=UI.context.flavor(SDK.ExecutionContext);if(!executionContext){return;}
const runtimeModel=executionContext.runtimeModel;await uiSourceCode.requestContent();uiSourceCode.commitWorkingCopy();const expression=uiSourceCode.workingCopy();Common.console.show();const url=uiSourceCode.url();const result=await executionContext.evaluate({expression:`${expression}\n//# sourceURL=${url}`,objectGroup:'console',silent:false,includeCommandLineAPI:true,returnByValue:false,generatePreview:true,replMode:true,},false,true);if(result.exceptionDetails){SDK.consoleModel.addMessage(SDK.ConsoleMessage.fromException(runtimeModel,result.exceptionDetails,undefined,undefined,url));return;}
if(!result.object){return;}
const scripts=executionContext.debuggerModel.scriptsForSourceURL(url);const scriptId=scripts[scripts.length-1].scriptId;SDK.consoleModel.addMessage(new SDK.ConsoleMessage(runtimeModel,SDK.ConsoleMessage.MessageSource.JS,SDK.ConsoleMessage.MessageLevel.Info,'',SDK.ConsoleMessage.MessageType.Result,url,undefined,undefined,[result.object],undefined,undefined,executionContext.id,scriptId));}
export function isSnippetsUISourceCode(uiSourceCode){return uiSourceCode.url().startsWith('snippet://');}
export function isSnippetsProject(project){return project.type()===Workspace.projectTypes.FileSystem&&Persistence.FileSystemWorkspaceBinding.fileSystemType(project)==='snippets';}
self.Snippets=self.Snippets||{};Snippets=Snippets||{};Snippets.evaluateScriptSnippet=evaluateScriptSnippet;Snippets.isSnippetsUISourceCode=isSnippetsUISourceCode;Snippets.isSnippetsProject=isSnippetsProject;Persistence.isolatedFileSystemManager.addPlatformFileSystem('snippet://',new SnippetFileSystem());Snippets.project=(Workspace.workspace.projectsForType(Workspace.projectTypes.FileSystem).find(project=>Persistence.FileSystemWorkspaceBinding.fileSystemType(project)==='snippets'));import'./SettingsScreen.js';import'./FrameworkBlackboxSettingsTab.js';import*as FrameworkBlackboxSettingsTab from'./FrameworkBlackboxSettingsTab.js';import*as SettingsScreen from'./SettingsScreen.js';export{FrameworkBlackboxSettingsTab,SettingsScreen,};export default class SettingsScreen extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('settings/settingsScreen.css');this.contentElement.classList.add('settings-window-main');this.contentElement.classList.add('vbox');const settingsLabelElement=createElement('div');const settingsTitleElement=UI.createShadowRootWithCoreStyles(settingsLabelElement,'settings/settingsScreen.css').createChild('div','settings-window-title');UI.ARIAUtils.markAsHeading(settingsTitleElement,1);settingsTitleElement.textContent=ls`Settings`;this._tabbedLocation=UI.viewManager.createTabbedLocation(()=>SettingsScreen._showSettingsScreen(),'settings-view');const tabbedPane=this._tabbedLocation.tabbedPane();tabbedPane.leftToolbar().appendToolbarItem(new UI.ToolbarItem(settingsLabelElement));tabbedPane.setShrinkableTabs(false);tabbedPane.makeVerticalTabLayout();const shortcutsView=new UI.SimpleView(ls`Shortcuts`);UI.shortcutsScreen.createShortcutsTabView().show(shortcutsView.element);this._tabbedLocation.appendView(shortcutsView);tabbedPane.show(this.contentElement);this.element.addEventListener('keydown',this._keyDown.bind(this),false);this._developerModeCounter=0;this.setDefaultFocusedElement(this.contentElement);}
static _showSettingsScreen(name){const settingsScreen=(self.runtime.sharedInstance(SettingsScreen));if(settingsScreen.isShowing()){return;}
const dialog=new UI.Dialog();dialog.contentElement.tabIndex=-1;dialog.addCloseButton();dialog.setOutsideClickCallback(()=>{});dialog.setPointerEventsBehavior(UI.GlassPane.PointerEventsBehavior.PierceGlassPane);dialog.setOutsideTabIndexBehavior(UI.Dialog.OutsideTabIndexBehavior.PreserveMainViewTabIndex);settingsScreen.show(dialog.contentElement);dialog.show();settingsScreen._selectTab(name||'preferences');}
resolveLocation(locationName){return this._tabbedLocation;}
_selectTab(name){UI.viewManager.showView(name);}
_keyDown(event){const shiftKeyCode=16;if(event.keyCode===shiftKeyCode&&++this._developerModeCounter>5){this.contentElement.classList.add('settings-developer-mode');}}}
class SettingsTab extends UI.VBox{constructor(name,id){super();this.element.classList.add('settings-tab-container');if(id){this.element.id=id;}
const header=this.element.createChild('header');header.createChild('h1').createTextChild(name);this.containerElement=this.element.createChild('div','settings-container-wrapper').createChild('div','settings-tab settings-content settings-container');}
_appendSection(name){const block=this.containerElement.createChild('div','settings-block');if(name){UI.ARIAUtils.markAsGroup(block);const title=block.createChild('div','settings-section-title');title.textContent=name;UI.ARIAUtils.markAsHeading(title,2);UI.ARIAUtils.setAccessibleName(block,name);}
return block;}}
export class GenericSettingsTab extends SettingsTab{constructor(){super(Common.UIString('Preferences'),'preferences-tab-content');const explicitSectionOrder=['','Appearance','Sources','Elements','Network','Performance','Console','Extensions'];this._nameToSection=new Map();for(const sectionName of explicitSectionOrder){this._sectionElement(sectionName);}
self.runtime.extensions('setting').forEach(this._addSetting.bind(this));self.runtime.extensions(UI.SettingUI).forEach(this._addSettingUI.bind(this));this._appendSection().appendChild(UI.createTextButton(Common.UIString('Restore defaults and reload'),restoreAndReload));function restoreAndReload(){Common.settings.clearAll();Components.reload();}}
static isSettingVisible(extension){const descriptor=extension.descriptor();if(!('title'in descriptor)){return false;}
if(!('category'in descriptor)){return false;}
return true;}
_addSetting(extension){if(!GenericSettingsTab.isSettingVisible(extension)){return;}
const sectionElement=this._sectionElement(extension.descriptor()['category']);const setting=Common.moduleSetting(extension.descriptor()['settingName']);const settingControl=UI.SettingsUI.createControlForSetting(setting);if(settingControl){sectionElement.appendChild(settingControl);}}
_addSettingUI(extension){const descriptor=extension.descriptor();const sectionName=descriptor['category']||'';extension.instance().then(appendCustomSetting.bind(this));function appendCustomSetting(object){const settingUI=(object);const element=settingUI.settingElement();if(element){this._sectionElement(sectionName).appendChild(element);}}}
_sectionElement(sectionName){let sectionElement=this._nameToSection.get(sectionName);if(!sectionElement){const uiSectionName=sectionName&&Common.UIString(sectionName);sectionElement=this._appendSection(uiSectionName);this._nameToSection.set(sectionName,sectionElement);}
return sectionElement;}}
export class ExperimentsSettingsTab extends SettingsTab{constructor(){super(Common.UIString('Experiments'),'experiments-tab-content');const experiments=Root.Runtime.experiments.allConfigurableExperiments();if(experiments.length){const experimentsSection=this._appendSection();experimentsSection.appendChild(this._createExperimentsWarningSubsection());for(let i=0;i<experiments.length;++i){experimentsSection.appendChild(this._createExperimentCheckbox(experiments[i]));}}}
_createExperimentsWarningSubsection(){const subsection=createElement('div');const warning=subsection.createChild('span','settings-experiments-warning-subsection-warning');warning.textContent=Common.UIString('WARNING:');subsection.createTextChild(' ');const message=subsection.createChild('span','settings-experiments-warning-subsection-message');message.textContent=Common.UIString('These experiments could be dangerous and may require restart.');return subsection;}
_createExperimentCheckbox(experiment){const label=UI.CheckboxLabel.create(Common.UIString(experiment.title),experiment.isEnabled());const input=label.checkboxElement;input.name=experiment.name;function listener(){experiment.setEnabled(input.checked);}
input.addEventListener('click',listener,false);const p=createElement('p');p.className=experiment.hidden&&!experiment.isEnabled()?'settings-experiment-hidden':'';p.appendChild(label);return p;}}
export class ActionDelegate{handleAction(context,actionId){switch(actionId){case'settings.show':SettingsScreen._showSettingsScreen();return true;case'settings.documentation':Host.InspectorFrontendHost.openInNewTab('https://developers.google.com/web/tools/chrome-devtools/');return true;case'settings.shortcuts':SettingsScreen._showSettingsScreen(Common.UIString('Shortcuts'));return true;}
return false;}}
export class Revealer{reveal(object){console.assert(object instanceof Common.Setting);const setting=(object);let success=false;self.runtime.extensions('setting').forEach(revealModuleSetting);self.runtime.extensions(UI.SettingUI).forEach(revealSettingUI);self.runtime.extensions('view').forEach(revealSettingsView);return success?Promise.resolve():Promise.reject();function revealModuleSetting(extension){if(!GenericSettingsTab.isSettingVisible(extension)){return;}
if(extension.descriptor()['settingName']===setting.name){Host.InspectorFrontendHost.bringToFront();SettingsScreen._showSettingsScreen();success=true;}}
function revealSettingUI(extension){const settings=extension.descriptor()['settings'];if(settings&&settings.indexOf(setting.name)!==-1){Host.InspectorFrontendHost.bringToFront();SettingsScreen._showSettingsScreen();success=true;}}
function revealSettingsView(extension){const location=extension.descriptor()['location'];if(location!=='settings-view'){return;}
const settings=extension.descriptor()['settings'];if(settings&&settings.indexOf(setting.name)!==-1){Host.InspectorFrontendHost.bringToFront();SettingsScreen._showSettingsScreen(extension.descriptor()['id']);success=true;}}}}
self.Settings=self.Settings||{};Settings=Settings||{};Settings.SettingsScreen=SettingsScreen;Settings.SettingsScreen.ActionDelegate=ActionDelegate;Settings.SettingsScreen.Revealer=Revealer;Settings.GenericSettingsTab=GenericSettingsTab;Settings.ExperimentsSettingsTab=ExperimentsSettingsTab;export default class FrameworkBlackboxSettingsTab extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('settings/frameworkBlackboxSettingsTab.css');const header=this.contentElement.createChild('div','header');header.textContent=ls`Framework Blackboxing`;UI.ARIAUtils.markAsHeading(header,1);this.contentElement.createChild('div','intro').textContent=ls`Debugger will skip through the scripts and will not stop on exceptions thrown by them.`;const blackboxContentScripts=this.contentElement.createChild('div','blackbox-content-scripts');blackboxContentScripts.appendChild(UI.SettingsUI.createSettingCheckbox(ls`Blackbox content scripts`,Common.moduleSetting('skipContentScripts'),true));blackboxContentScripts.title=ls`Blackbox content scripts (extension scripts in the page)`;this._blackboxLabel=Common.UIString('Blackbox');this._disabledLabel=Common.UIString('Disabled');this._list=new UI.ListWidget(this);this._list.element.classList.add('blackbox-list');this._list.registerRequiredCSS('settings/frameworkBlackboxSettingsTab.css');const placeholder=createElementWithClass('div','blackbox-list-empty');placeholder.textContent=Common.UIString('No blackboxed patterns');this._list.setEmptyPlaceholder(placeholder);this._list.show(this.contentElement);const addPatternButton=UI.createTextButton(Common.UIString('Add pattern...'),this._addButtonClicked.bind(this),'add-button');this.contentElement.appendChild(addPatternButton);this._setting=Common.moduleSetting('skipStackFramesPattern');this._setting.addChangeListener(this._settingUpdated,this);this.setDefaultFocusedElement(addPatternButton);}
wasShown(){super.wasShown();this._settingUpdated();}
_settingUpdated(){this._list.clear();const patterns=this._setting.getAsArray();for(let i=0;i<patterns.length;++i){this._list.appendItem(patterns[i],true);}}
_addButtonClicked(){this._list.addNewItem(this._setting.getAsArray().length,{pattern:'',disabled:false});}
renderItem(item,editable){const element=createElementWithClass('div','blackbox-list-item');const pattern=element.createChild('div','blackbox-pattern');pattern.textContent=item.pattern;pattern.title=ls`Blackbox scripts whose names match '${item.pattern}'`;element.createChild('div','blackbox-separator');element.createChild('div','blackbox-behavior').textContent=item.disabled?this._disabledLabel:this._blackboxLabel;if(item.disabled){element.classList.add('blackbox-disabled');}
return element;}
removeItemRequested(item,index){const patterns=this._setting.getAsArray();patterns.splice(index,1);this._setting.setAsArray(patterns);}
commitEdit(item,editor,isNew){item.pattern=editor.control('pattern').value.trim();item.disabled=editor.control('behavior').value===this._disabledLabel;const list=this._setting.getAsArray();if(isNew){list.push(item);}
this._setting.setAsArray(list);}
beginEdit(item){const editor=this._createEditor();editor.control('pattern').value=item.pattern;editor.control('behavior').value=item.disabled?this._disabledLabel:this._blackboxLabel;return editor;}
_createEditor(){if(this._editor){return this._editor;}
const editor=new UI.ListWidget.Editor();this._editor=editor;const content=editor.contentElement();const titles=content.createChild('div','blackbox-edit-row');titles.createChild('div','blackbox-pattern').textContent=Common.UIString('Pattern');titles.createChild('div','blackbox-separator blackbox-separator-invisible');titles.createChild('div','blackbox-behavior').textContent=Common.UIString('Behavior');const fields=content.createChild('div','blackbox-edit-row');const pattern=editor.createInput('pattern','text','/framework\\.js$',patternValidator.bind(this));UI.ARIAUtils.setAccessibleName(pattern,ls`Pattern`);fields.createChild('div','blackbox-pattern').appendChild(pattern);fields.createChild('div','blackbox-separator blackbox-separator-invisible');const behavior=editor.createSelect('behavior',[this._blackboxLabel,this._disabledLabel],behaviorValidator);UI.ARIAUtils.setAccessibleName(behavior,ls`Behavior`);fields.createChild('div','blackbox-behavior').appendChild(behavior);return editor;function patternValidator(item,index,input){const pattern=input.value.trim();const patterns=this._setting.getAsArray();if(!pattern.length){return{valid:false,errorMessage:ls`Pattern cannot be empty`};}
for(let i=0;i<patterns.length;++i){if(i!==index&&patterns[i].pattern===pattern){return{valid:false,errorMessage:ls`Pattern already exists`};}}
let regex;try{regex=new RegExp(pattern);}catch(e){}
if(!regex){return{valid:false,errorMessage:ls`Pattern must be a valid regular expression`};}else{return{valid:true};}}
function behaviorValidator(item,index,input){return{valid:true};}}}
self.Settings=self.Settings||{};Settings=Settings||{};Settings.FrameworkBlackboxSettingsTab=FrameworkBlackboxSettingsTab;import*as SecurityModel from'./SecurityModel.js';import*as SecurityPanel from'./SecurityPanel.js';export{SecurityModel,SecurityPanel,};export default class SecurityPanel extends UI.PanelWithSidebar{constructor(){super('security');this._mainView=new Security.SecurityMainView(this);const title=createElementWithClass('span','title');title.textContent=Common.UIString('Overview');this._sidebarMainViewElement=new Security.SecurityPanelSidebarTreeElement(title,this._setVisibleView.bind(this,this._mainView),'security-main-view-sidebar-tree-item','lock-icon');this._sidebarMainViewElement.tooltip=title.textContent;this._sidebarTree=new Security.SecurityPanelSidebarTree(this._sidebarMainViewElement,this.showOrigin.bind(this));this.panelSidebarElement().appendChild(this._sidebarTree.element);this._lastResponseReceivedForLoaderId=new Map();this._origins=new Map();this._filterRequestCounts=new Map();SDK.targetManager.observeModels(Security.SecurityModel,this);}
static _instance(){return(self.runtime.sharedInstance(Security.SecurityPanel));}
static createCertificateViewerButtonForOrigin(text,origin){const certificateButton=UI.createTextButton(text,async e=>{e.consume();const names=await SDK.multitargetNetworkManager.getCertificate(origin);if(names.length>0){Host.InspectorFrontendHost.showCertificateViewer(names);}},'origin-button');UI.ARIAUtils.markAsMenuButton(certificateButton);return certificateButton;}
static createCertificateViewerButtonForCert(text,names){const certificateButton=UI.createTextButton(text,e=>{e.consume();Host.InspectorFrontendHost.showCertificateViewer(names);},'security-certificate-button');UI.ARIAUtils.markAsMenuButton(certificateButton);return certificateButton;}
static createHighlightedUrl(url,securityState){const schemeSeparator='://';const index=url.indexOf(schemeSeparator);if(index===-1){const text=createElement('span','');text.textContent=url;return text;}
const highlightedUrl=createElement('span');const scheme=url.substr(0,index);const content=url.substr(index+schemeSeparator.length);highlightedUrl.createChild('span','url-scheme-'+securityState).textContent=scheme;highlightedUrl.createChild('span','url-scheme-separator').textContent=schemeSeparator;highlightedUrl.createChild('span').textContent=content;return highlightedUrl;}
_updateSecurityState(newSecurityState,explanations,summary){this._sidebarMainViewElement.setSecurityState(newSecurityState);this._mainView.updateSecurityState(newSecurityState,explanations,summary);}
_onSecurityStateChanged(event){const data=(event.data);const securityState=(data.securityState);const explanations=(data.explanations);const summary=(data.summary);this._updateSecurityState(securityState,explanations,summary);}
_updateVisibleSecurityState(visibleSecurityState){this._sidebarMainViewElement.setSecurityState(visibleSecurityState.securityState);this._mainView.updateVisibleSecurityState(visibleSecurityState);}
_onVisibleSecurityStateChanged(event){const data=(event.data);this._updateVisibleSecurityState(data);}
selectAndSwitchToMainView(){this._sidebarMainViewElement.select(true);}
showOrigin(origin){const originState=this._origins.get(origin);if(!originState.originView){originState.originView=new Security.SecurityOriginView(this,origin,originState);}
this._setVisibleView(originState.originView);}
wasShown(){super.wasShown();if(!this._visibleView){this.selectAndSwitchToMainView();}}
focus(){this._sidebarTree.focus();}
_setVisibleView(view){if(this._visibleView===view){return;}
if(this._visibleView){this._visibleView.detach();}
this._visibleView=view;if(view){this.splitWidget().setMainWidget(view);}}
_onResponseReceived(event){const request=(event.data);if(request.resourceType()===Common.resourceTypes.Document){this._lastResponseReceivedForLoaderId.set(request.loaderId,request);}}
_processRequest(request){const origin=Common.ParsedURL.extractOrigin(request.url());if(!origin){return;}
let securityState=(request.securityState());if(request.mixedContentType===Protocol.Security.MixedContentType.Blockable||request.mixedContentType===Protocol.Security.MixedContentType.OptionallyBlockable){securityState=Protocol.Security.SecurityState.Insecure;}
if(this._origins.has(origin)){const originState=this._origins.get(origin);const oldSecurityState=originState.securityState;originState.securityState=this._securityStateMin(oldSecurityState,securityState);if(oldSecurityState!==originState.securityState){const securityDetails=(request.securityDetails());if(securityDetails){originState.securityDetails=securityDetails;}
this._sidebarTree.updateOrigin(origin,securityState);if(originState.originView){originState.originView.setSecurityState(securityState);}}}else{const originState={};originState.securityState=securityState;const securityDetails=request.securityDetails();if(securityDetails){originState.securityDetails=securityDetails;}
originState.loadedFromCache=request.cached();this._origins.set(origin,originState);this._sidebarTree.addOrigin(origin,securityState);}}
_onRequestFinished(event){const request=(event.data);this._updateFilterRequestCounts(request);this._processRequest(request);}
_updateFilterRequestCounts(request){if(request.mixedContentType===Protocol.Security.MixedContentType.None){return;}
let filterKey=Network.NetworkLogView.MixedContentFilterValues.All;if(request.wasBlocked()){filterKey=Network.NetworkLogView.MixedContentFilterValues.Blocked;}else if(request.mixedContentType===Protocol.Security.MixedContentType.Blockable){filterKey=Network.NetworkLogView.MixedContentFilterValues.BlockOverridden;}else if(request.mixedContentType===Protocol.Security.MixedContentType.OptionallyBlockable){filterKey=Network.NetworkLogView.MixedContentFilterValues.Displayed;}
if(!this._filterRequestCounts.has(filterKey)){this._filterRequestCounts.set(filterKey,1);}else{this._filterRequestCounts.set(filterKey,this._filterRequestCounts.get(filterKey)+1);}
this._mainView.refreshExplanations();}
filterRequestCount(filterKey){return this._filterRequestCounts.get(filterKey)||0;}
_securityStateMin(stateA,stateB){return Security.SecurityModel.SecurityStateComparator(stateA,stateB)<0?stateA:stateB;}
modelAdded(securityModel){if(this._securityModel){return;}
this._securityModel=securityModel;const resourceTreeModel=securityModel.resourceTreeModel();const networkManager=securityModel.networkManager();this._eventListeners=[resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._onMainFrameNavigated,this),resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.InterstitialShown,this._onInterstitialShown,this),resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.InterstitialHidden,this._onInterstitialHidden,this),networkManager.addEventListener(SDK.NetworkManager.Events.ResponseReceived,this._onResponseReceived,this),networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished,this._onRequestFinished,this),];if(Root.Runtime.experiments.isEnabled('handleVisibleSecurityStateChanged')){this._eventListeners.push(securityModel.addEventListener(Security.SecurityModel.Events.VisibleSecurityStateChanged,this._onVisibleSecurityStateChanged,this));}else{this._eventListeners.push(securityModel.addEventListener(Security.SecurityModel.Events.SecurityStateChanged,this._onSecurityStateChanged,this));}
if(resourceTreeModel.isInterstitialShowing()){this._onInterstitialShown();}}
modelRemoved(securityModel){if(this._securityModel!==securityModel){return;}
delete this._securityModel;Common.EventTarget.removeEventListeners(this._eventListeners);}
_onMainFrameNavigated(event){const frame=(event.data);const request=this._lastResponseReceivedForLoaderId.get(frame.loaderId);this.selectAndSwitchToMainView();this._sidebarTree.clearOrigins();this._origins.clear();this._lastResponseReceivedForLoaderId.clear();this._filterRequestCounts.clear();this._mainView.refreshExplanations();const origin=Common.ParsedURL.extractOrigin(request?request.url():frame.url);this._sidebarTree.setMainOrigin(origin);if(request){this._processRequest(request);}}
_onInterstitialShown(){this.selectAndSwitchToMainView();this._sidebarTree.toggleOriginsList(true);}
_onInterstitialHidden(){this._sidebarTree.toggleOriginsList(false);}}
export class SecurityPanelSidebarTree extends UI.TreeOutlineInShadow{constructor(mainViewElement,showOriginInPanel){super();this.registerRequiredCSS('security/sidebar.css');this.registerRequiredCSS('security/lockIcon.css');this.appendChild(mainViewElement);this._showOriginInPanel=showOriginInPanel;this._mainOrigin=null;this._originGroups=new Map();this._originGroupTitles=new Map([[Security.SecurityPanelSidebarTree.OriginGroup.MainOrigin,ls`Main origin`],[Security.SecurityPanelSidebarTree.OriginGroup.NonSecure,ls`Non-secure origins`],[Security.SecurityPanelSidebarTree.OriginGroup.Secure,ls`Secure origins`],[Security.SecurityPanelSidebarTree.OriginGroup.Unknown,ls`Unknown / canceled`],]);for(const key in Security.SecurityPanelSidebarTree.OriginGroup){const group=Security.SecurityPanelSidebarTree.OriginGroup[key];const element=this._createOriginGroupElement(this._originGroupTitles.get(group));this._originGroups.set(group,element);this.appendChild(element);}
this._clearOriginGroups();const mainViewReloadMessage=new UI.TreeElement(Common.UIString('Reload to view details'));mainViewReloadMessage.selectable=false;mainViewReloadMessage.listItemElement.classList.add('security-main-view-reload-message');this._originGroups.get(Security.SecurityPanelSidebarTree.OriginGroup.MainOrigin).appendChild(mainViewReloadMessage);this._elementsByOrigin=new Map();}
_createOriginGroupElement(originGroupTitle){const originGroup=new UI.TreeElement(originGroupTitle,true);originGroup.selectable=false;originGroup.setCollapsible(false);originGroup.expand();originGroup.listItemElement.classList.add('security-sidebar-origins');return originGroup;}
toggleOriginsList(hidden){for(const element of this._originGroups.values()){element.hidden=hidden;}}
addOrigin(origin,securityState){const originElement=new Security.SecurityPanelSidebarTreeElement(Security.SecurityPanel.createHighlightedUrl(origin,securityState),this._showOriginInPanel.bind(this,origin),'security-sidebar-tree-item','security-property');originElement.tooltip=origin;this._elementsByOrigin.set(origin,originElement);this.updateOrigin(origin,securityState);}
setMainOrigin(origin){this._mainOrigin=origin;}
updateOrigin(origin,securityState){const originElement=(this._elementsByOrigin.get(origin));originElement.setSecurityState(securityState);let newParent;if(origin===this._mainOrigin){newParent=this._originGroups.get(Security.SecurityPanelSidebarTree.OriginGroup.MainOrigin);if(securityState===Protocol.Security.SecurityState.Secure){newParent.title=ls`Main origin (secure)`;}else{newParent.title=ls`Main origin (non-secure)`;}}else{switch(securityState){case Protocol.Security.SecurityState.Secure:newParent=this._originGroups.get(Security.SecurityPanelSidebarTree.OriginGroup.Secure);break;case Protocol.Security.SecurityState.Unknown:newParent=this._originGroups.get(Security.SecurityPanelSidebarTree.OriginGroup.Unknown);break;default:newParent=this._originGroups.get(Security.SecurityPanelSidebarTree.OriginGroup.NonSecure);break;}}
const oldParent=originElement.parent;if(oldParent!==newParent){if(oldParent){oldParent.removeChild(originElement);if(oldParent.childCount()===0){oldParent.hidden=true;}}
newParent.appendChild(originElement);newParent.hidden=false;}}
_clearOriginGroups(){for(const originGroup of this._originGroups.values()){originGroup.removeChildren();originGroup.hidden=true;}
const mainOrigin=this._originGroups.get(Security.SecurityPanelSidebarTree.OriginGroup.MainOrigin);mainOrigin.title=this._originGroupTitles.get(Security.SecurityPanelSidebarTree.OriginGroup.MainOrigin);mainOrigin.hidden=false;}
clearOrigins(){this._clearOriginGroups();this._elementsByOrigin.clear();}}
export const OriginGroup={MainOrigin:Symbol('MainOrigin'),NonSecure:Symbol('NonSecure'),Secure:Symbol('Secure'),Unknown:Symbol('Unknown')};export class SecurityPanelSidebarTreeElement extends UI.TreeElement{constructor(textElement,selectCallback,className,cssPrefix){super('',false);this._selectCallback=selectCallback;this._cssPrefix=cssPrefix;this.listItemElement.classList.add(className);this._iconElement=this.listItemElement.createChild('div','icon');this._iconElement.classList.add(this._cssPrefix);this.listItemElement.appendChild(textElement);this.setSecurityState(Protocol.Security.SecurityState.Unknown);}
static SecurityStateComparator(a,b){return Security.SecurityModel.SecurityStateComparator(a.securityState(),b.securityState());}
setSecurityState(newSecurityState){if(this._securityState){this._iconElement.classList.remove(this._cssPrefix+'-'+this._securityState);}
this._securityState=newSecurityState;this._iconElement.classList.add(this._cssPrefix+'-'+newSecurityState);}
securityState(){return this._securityState;}
onselect(){this._selectCallback();return true;}}
export class SecurityMainView extends UI.VBox{constructor(panel){super(true);this.registerRequiredCSS('security/mainView.css');this.registerRequiredCSS('security/lockIcon.css');this.setMinimumSize(200,100);this.contentElement.classList.add('security-main-view');this._panel=panel;this._summarySection=this.contentElement.createChild('div','security-summary');this._securityExplanationsMain=this.contentElement.createChild('div','security-explanation-list security-explanations-main');this._securityExplanationsExtra=this.contentElement.createChild('div','security-explanation-list security-explanations-extra');const summaryDiv=this._summarySection.createChild('div','security-summary-section-title');summaryDiv.textContent=ls`Security overview`;UI.ARIAUtils.markAsHeading(summaryDiv,1);const lockSpectrum=this._summarySection.createChild('div','lock-spectrum');this._lockSpectrum=new Map([[Protocol.Security.SecurityState.Secure,lockSpectrum.createChild('div','lock-icon lock-icon-secure')],[Protocol.Security.SecurityState.Neutral,lockSpectrum.createChild('div','lock-icon lock-icon-neutral')],[Protocol.Security.SecurityState.Insecure,lockSpectrum.createChild('div','lock-icon lock-icon-insecure')],]);this._lockSpectrum.get(Protocol.Security.SecurityState.Secure).title=Common.UIString('Secure');this._lockSpectrum.get(Protocol.Security.SecurityState.Neutral).title=Common.UIString('Info');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).title=Common.UIString('Not secure');this._summarySection.createChild('div','triangle-pointer-container').createChild('div','triangle-pointer-wrapper').createChild('div','triangle-pointer');this._summaryText=this._summarySection.createChild('div','security-summary-text');UI.ARIAUtils.markAsHeading(this._summaryText,2);}
_addExplanation(parent,explanation){const explanationSection=parent.createChild('div','security-explanation');explanationSection.classList.add('security-explanation-'+explanation.securityState);explanationSection.createChild('div','security-property').classList.add('security-property-'+explanation.securityState);const text=explanationSection.createChild('div','security-explanation-text');const explanationHeader=text.createChild('div','security-explanation-title');if(explanation.title){explanationHeader.createChild('span').textContent=explanation.title+' - ';explanationHeader.createChild('span','security-explanation-title-'+explanation.securityState).textContent=explanation.summary;}else{explanationHeader.textContent=explanation.summary;}
text.createChild('div').textContent=explanation.description;if(explanation.certificate.length){text.appendChild(Security.SecurityPanel.createCertificateViewerButtonForCert(Common.UIString('View certificate'),explanation.certificate));}
if(explanation.recommendations&&explanation.recommendations.length){const recommendationList=text.createChild('ul','security-explanation-recommendations');for(const recommendation of explanation.recommendations){recommendationList.createChild('li').textContent=recommendation;}}
return text;}
updateSecurityState(newSecurityState,explanations,summary){this._summarySection.classList.remove('security-summary-'+this._securityState);this._securityState=newSecurityState;this._summarySection.classList.add('security-summary-'+this._securityState);const summaryExplanationStrings={'unknown':ls`The security of this page is unknown.`,'insecure':ls`This page is not secure.`,'neutral':ls`This page is not secure.`,'secure':ls`This page is secure (valid HTTPS).`,'insecure-broken':ls`This page is not secure (broken HTTPS).`};if(this._securityState===Protocol.Security.SecurityState.Insecure){this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).classList.add('lock-icon-insecure');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).classList.remove('lock-icon-insecure-broken');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).title=Common.UIString('Not secure');}else if(this._securityState===Protocol.Security.SecurityState.InsecureBroken){this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).classList.add('lock-icon-insecure-broken');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).classList.remove('lock-icon-insecure');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).title=Common.UIString('Not secure (broken)');}
this._summaryText.textContent=summary||summaryExplanationStrings[this._securityState];this._explanations=explanations;this.refreshExplanations();}
updateVisibleSecurityState(visibleSecurityState){this._summarySection.classList.remove('security-summary-'+this._securityState);this._securityState=visibleSecurityState.securityState;this._summarySection.classList.add('security-summary-'+this._securityState);if(this._securityState===Protocol.Security.SecurityState.Insecure){this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).classList.add('lock-icon-insecure');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).classList.remove('lock-icon-insecure-broken');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).title=ls`Not secure`;}else if(this._securityState===Protocol.Security.SecurityState.InsecureBroken){this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).classList.add('lock-icon-insecure-broken');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).classList.remove('lock-icon-insecure');this._lockSpectrum.get(Protocol.Security.SecurityState.Insecure).title=ls`Not secure (broken)`;}
const{summary,explanations}=this._getSecuritySummaryAndExplanations(visibleSecurityState);this._summaryText.textContent=summary||Security.SummaryMessages[this._securityState];this._explanations=this._orderExplanations(explanations);this.refreshExplanations();}
_getSecuritySummaryAndExplanations(visibleSecurityState){const{securityState,securityStateIssueIds}=visibleSecurityState;let summary;const explanations=[];summary=this._explainSafetyTipSecurity(visibleSecurityState,summary,explanations);if(securityStateIssueIds.includes('malicious-content')){summary=ls`This page is dangerous (flagged by Google Safe Browsing).`;explanations.unshift(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Insecure,undefined,ls`Flagged by Google Safe Browsing`,ls`To check this page's status, visit g.co/safebrowsingstatus.`));}else if(securityStateIssueIds.includes('is-error-page')&&(visibleSecurityState.certificateSecurityState===null||visibleSecurityState.certificateSecurityState.certificateNetworkError===null)){summary=ls`This is an error page.`;return{summary,explanations};}else if(securityState===Protocol.Security.SecurityState.InsecureBroken&&securityStateIssueIds.includes('scheme-is-not-cryptographic')){summary=summary||ls`This page is insecure (unencrypted HTTP).`;if(securityStateIssueIds.includes('insecure-input-events')){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Insecure,undefined,ls`Form field edited on a non-secure page`,ls`Data was entered in a field on a non-secure page. A warning has been added to the URL bar.`));}}
if(securityStateIssueIds.includes('scheme-is-not-cryptographic')){if(securityState===Protocol.Security.SecurityState.Neutral&&!securityStateIssueIds.includes('insecure-origin')){summary=ls`This page has a non-HTTPS secure origin.`;}
return{summary,explanations};}
this._explainCertificateSecurity(visibleSecurityState,explanations);this._explainConnectionSecurity(visibleSecurityState,explanations);this._explainContentSecurity(visibleSecurityState,explanations);return{summary,explanations};}
_explainSafetyTipSecurity(visibleSecurityState,summary,explanations){const{securityStateIssueIds,safetyTipInfo}=visibleSecurityState;const currentExplanations=[];if(securityStateIssueIds.includes('bad_reputation')){currentExplanations.push({summary:ls`This page is suspicious`,description:ls`Chrome has determined that this site could be fake or fraudulent.\n\nIf you believe this is shown in error please visit https://bugs.chromium.org/p/chromium/issues/entry?template=Safety+Tips+Appeals.`});}else if(securityStateIssueIds.includes('lookalike')&&safetyTipInfo.safeUrl){currentExplanations.push({summary:ls`Possible spoofing URL`,description:ls`This site's hostname looks similar to ${
            new URL(safetyTipInfo.safeUrl)
                .hostname}. Attackers sometimes mimic sites by making small, hard-to-see changes to the domain name.\n\nIf you believe this is shown in error please visit https://bugs.chromium.org/p/chromium/issues/entry?template=Safety+Tips+Appeals.`});}
if(currentExplanations.length>0){summary=summary||ls`This page is suspicious (flagged by Chrome).`;explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Insecure,undefined,currentExplanations[0].summary,currentExplanations[0].description));}
return summary;}
_explainCertificateSecurity(visibleSecurityState,explanations){const{certificateSecurityState,securityStateIssueIds}=visibleSecurityState;const title=ls`Certificate`;if(certificateSecurityState&&certificateSecurityState.certificateHasSha1Signature){const explanationSummary=ls`insecure (SHA-1)`;const description=ls`The certificate chain for this site contains a certificate signed using SHA-1.`;if(certificateSecurityState.certificateHasWeakSignature){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Insecure,title,explanationSummary,description,certificateSecurityState.certificate,Protocol.Security.MixedContentType.None));}else{explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Neutral,title,explanationSummary,description,certificateSecurityState.certificate,Protocol.Security.MixedContentType.None));}}
if(certificateSecurityState&&securityStateIssueIds.includes('cert-missing-subject-alt-name')){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Insecure,title,ls`Subject Alternative Name missing`,ls`The certificate for this site does not contain a Subject Alternative Name extension containing a domain name or IP address.`,certificateSecurityState.certificate,Protocol.Security.MixedContentType.None));}
if(certificateSecurityState&&certificateSecurityState.certificateNetworkError!==null){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Insecure,title,ls`missing`,ls`This site is missing a valid, trusted certificate (${certificateSecurityState.certificateNetworkError}).`,certificateSecurityState.certificate,Protocol.Security.MixedContentType.None));}else if(certificateSecurityState&&!certificateSecurityState.certificateHasSha1Signature){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Secure,title,ls`valid and trusted`,ls`The connection to this site is using a valid, trusted server certificate issued by ${
              certificateSecurityState.issuer}.`,certificateSecurityState.certificate,Protocol.Security.MixedContentType.None));}
if(securityStateIssueIds.includes('pkp-bypassed')){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Info,title,ls`Public-Key-Pinning bypassed`,ls`Public-Key-Pinning was bypassed by a local root certificate.`));}
if(certificateSecurityState&&certificateSecurityState.isCertificateExpiringSoon()){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Info,undefined,ls`Certificate expires soon`,ls`The certificate for this site expires in less than 48 hours and needs to be renewed.`));}}
_explainConnectionSecurity(visibleSecurityState,explanations){const certificateSecurityState=visibleSecurityState.certificateSecurityState;if(!certificateSecurityState){return;}
const title=ls`Connection`;if(certificateSecurityState.modernSSL){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Secure,title,ls`secure connection settings`,ls`The connection to this site is encrypted and authenticated using ${certificateSecurityState.protocol}, ${
              certificateSecurityState.getKeyExchangeName()}, and ${certificateSecurityState.getCipherFullName()}.`));return;}
const recommendations=[];if(certificateSecurityState.obsoleteSslProtocol){recommendations.push(ls`${certificateSecurityState.protocol} is obsolete. Enable TLS 1.2 or later.`);}
if(certificateSecurityState.obsoleteSslKeyExchange){recommendations.push(ls`RSA key exchange is obsolete. Enable an ECDHE-based cipher suite.`);}
if(certificateSecurityState.obsoleteSslCipher){recommendations.push(ls`${certificateSecurityState.cipher} is obsolete. Enable an AES-GCM-based cipher suite.`);}
if(certificateSecurityState.obsoleteSslSignature){recommendations.push(ls`The server signature uses SHA-1, which is obsolete. Enable a SHA-2 signature algorithm instead. (Note this is different from the signature in the certificate.)`);}
explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Info,title,ls`obsolete connection settings`,ls`The connection to this site is encrypted and authenticated using ${certificateSecurityState.protocol}, ${
            certificateSecurityState.getKeyExchangeName()}, and ${certificateSecurityState.getCipherFullName()}.`,undefined,undefined,recommendations));}
_explainContentSecurity(visibleSecurityState,explanations){let addSecureExplanation=true;const title=ls`Resources`;const securityStateIssueIds=visibleSecurityState.securityStateIssueIds;if(securityStateIssueIds.includes('ran-mixed-content')){addSecureExplanation=false;explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Insecure,title,ls`active mixed content`,ls`You have recently allowed non-secure content (such as scripts or iframes) to run on this site.`,[],Protocol.Security.MixedContentType.Blockable));}
if(securityStateIssueIds.includes('displayed-mixed-content')){addSecureExplanation=false;explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Neutral,title,ls`mixed content`,ls`This page includes HTTP resources.`,[],Protocol.Security.MixedContentType.OptionallyBlockable));}
if(securityStateIssueIds.includes('contained-mixed-form')){addSecureExplanation=false;explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Neutral,title,ls`non-secure form`,ls`This page includes a form with a non-secure "action" attribute.`));}
if(visibleSecurityState.certificateSecurityState===null||visibleSecurityState.certificateSecurityState.certificateNetworkError===null){if(securityStateIssueIds.includes('ran-content-with-cert-error')){addSecureExplanation=false;explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Insecure,title,ls`active content with certificate errors`,ls`You have recently allowed content loaded with certificate errors (such as scripts or iframes) to run on this site.`));}
if(securityStateIssueIds.includes('displayed-content-with-cert-errors')){addSecureExplanation=false;explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Neutral,title,ls`content with certificate errors`,ls`This page includes resources that were loaded with certificate errors.`));}}
if(addSecureExplanation){if(!securityStateIssueIds.includes('scheme-is-not-cryptographic')){explanations.push(new Security.SecurityStyleExplanation(Protocol.Security.SecurityState.Secure,title,ls`all served securely`,ls`All resources on this page are served securely.`));}}}
_orderExplanations(explanations){if(explanations.length===0){return explanations;}
const securityStateOrder=[Protocol.Security.SecurityState.Insecure,Protocol.Security.SecurityState.Neutral,Protocol.Security.SecurityState.Secure,Protocol.Security.SecurityState.Info];const orderedExplanations=[];securityStateOrder.forEach(securityState=>orderedExplanations.push(...explanations.filter(explanation=>explanation.securityState===securityState)));return orderedExplanations;}
refreshExplanations(){this._securityExplanationsMain.removeChildren();this._securityExplanationsExtra.removeChildren();for(const explanation of this._explanations){if(explanation.securityState===Protocol.Security.SecurityState.Info){this._addExplanation(this._securityExplanationsExtra,explanation);}else{switch(explanation.mixedContentType){case Protocol.Security.MixedContentType.Blockable:this._addMixedContentExplanation(this._securityExplanationsMain,explanation,Network.NetworkLogView.MixedContentFilterValues.BlockOverridden);break;case Protocol.Security.MixedContentType.OptionallyBlockable:this._addMixedContentExplanation(this._securityExplanationsMain,explanation,Network.NetworkLogView.MixedContentFilterValues.Displayed);break;default:this._addExplanation(this._securityExplanationsMain,explanation);break;}}}
if(this._panel.filterRequestCount(Network.NetworkLogView.MixedContentFilterValues.Blocked)>0){const explanation=({securityState:Protocol.Security.SecurityState.Info,summary:Common.UIString('Blocked mixed content'),description:Common.UIString('Your page requested non-secure resources that were blocked.'),mixedContentType:Protocol.Security.MixedContentType.Blockable,certificate:[]});this._addMixedContentExplanation(this._securityExplanationsMain,explanation,Network.NetworkLogView.MixedContentFilterValues.Blocked);}}
_addMixedContentExplanation(parent,explanation,filterKey){const element=this._addExplanation(parent,explanation);const filterRequestCount=this._panel.filterRequestCount(filterKey);if(!filterRequestCount){const refreshPrompt=element.createChild('div','security-mixed-content');refreshPrompt.textContent=Common.UIString('Reload the page to record requests for HTTP resources.');return;}
const requestsAnchor=element.createChild('div','security-mixed-content devtools-link');UI.ARIAUtils.markAsLink(requestsAnchor);requestsAnchor.tabIndex=0;if(filterRequestCount===1){requestsAnchor.textContent=Common.UIString('View %d request in Network Panel',filterRequestCount);}else{requestsAnchor.textContent=Common.UIString('View %d requests in Network Panel',filterRequestCount);}
requestsAnchor.addEventListener('click',this.showNetworkFilter.bind(this,filterKey));requestsAnchor.addEventListener('keydown',event=>{if(isEnterKey(event)){this.showNetworkFilter(filterKey,event);}});}
showNetworkFilter(filterKey,e){e.consume();Network.NetworkPanel.revealAndFilter([{filterType:Network.NetworkLogView.FilterType.MixedContent,filterValue:filterKey}]);}}
export class SecurityOriginView extends UI.VBox{constructor(panel,origin,originState){super();this._panel=panel;this.setMinimumSize(200,100);this.element.classList.add('security-origin-view');this.registerRequiredCSS('security/originView.css');this.registerRequiredCSS('security/lockIcon.css');const titleSection=this.element.createChild('div','title-section');const titleDiv=titleSection.createChild('div','title-section-header');titleDiv.textContent=ls`Origin`;UI.ARIAUtils.markAsHeading(titleDiv,1);const originDisplay=titleSection.createChild('div','origin-display');this._originLockIcon=originDisplay.createChild('span','security-property');this._originLockIcon.classList.add('security-property-'+originState.securityState);originDisplay.appendChild(Security.SecurityPanel.createHighlightedUrl(origin,originState.securityState));const originNetworkDiv=titleSection.createChild('div','view-network-button');const originNetworkLink=originNetworkDiv.createChild('span','devtools-link origin-button');originNetworkLink.textContent=ls`View requests in Network Panel`;originNetworkLink.addEventListener('click',e=>{e.consume();const parsedURL=new Common.ParsedURL(origin);Network.NetworkPanel.revealAndFilter([{filterType:Network.NetworkLogView.FilterType.Domain,filterValue:parsedURL.host},{filterType:Network.NetworkLogView.FilterType.Scheme,filterValue:parsedURL.scheme}]);});UI.ARIAUtils.markAsLink(originNetworkLink);if(originState.securityDetails){const connectionSection=this.element.createChild('div','origin-view-section');const connectionDiv=connectionSection.createChild('div','origin-view-section-title');connectionDiv.textContent=ls`Connection`;UI.ARIAUtils.markAsHeading(connectionDiv,2);let table=new Security.SecurityDetailsTable();connectionSection.appendChild(table.element());table.addRow(Common.UIString('Protocol'),originState.securityDetails.protocol);if(originState.securityDetails.keyExchange){table.addRow(Common.UIString('Key exchange'),originState.securityDetails.keyExchange);}
if(originState.securityDetails.keyExchangeGroup){table.addRow(Common.UIString('Key exchange group'),originState.securityDetails.keyExchangeGroup);}
table.addRow(Common.UIString('Cipher'),originState.securityDetails.cipher+
(originState.securityDetails.mac?' with '+originState.securityDetails.mac:''));const certificateSection=this.element.createChild('div','origin-view-section');const certificateDiv=certificateSection.createChild('div','origin-view-section-title');certificateDiv.textContent=ls`Certificate`;UI.ARIAUtils.markAsHeading(certificateDiv,2);const sctListLength=originState.securityDetails.signedCertificateTimestampList.length;const ctCompliance=originState.securityDetails.certificateTransparencyCompliance;let sctSection;if(sctListLength||ctCompliance!==Protocol.Network.CertificateTransparencyCompliance.Unknown){sctSection=this.element.createChild('div','origin-view-section');const sctDiv=sctSection.createChild('div','origin-view-section-title');sctDiv.textContent=ls`Certificate Transparency`;UI.ARIAUtils.markAsHeading(sctDiv,2);}
const sanDiv=this._createSanDiv(originState.securityDetails.sanList);const validFromString=new Date(1000*originState.securityDetails.validFrom).toUTCString();const validUntilString=new Date(1000*originState.securityDetails.validTo).toUTCString();table=new Security.SecurityDetailsTable();certificateSection.appendChild(table.element());table.addRow(Common.UIString('Subject'),originState.securityDetails.subjectName);table.addRow(Common.UIString('SAN'),sanDiv);table.addRow(Common.UIString('Valid from'),validFromString);table.addRow(Common.UIString('Valid until'),validUntilString);table.addRow(Common.UIString('Issuer'),originState.securityDetails.issuer);table.addRow('',Security.SecurityPanel.createCertificateViewerButtonForOrigin(Common.UIString('Open full certificate details'),origin));if(!sctSection){return;}
const sctSummaryTable=new Security.SecurityDetailsTable();sctSummaryTable.element().classList.add('sct-summary');sctSection.appendChild(sctSummaryTable.element());for(let i=0;i<sctListLength;i++){const sct=originState.securityDetails.signedCertificateTimestampList[i];sctSummaryTable.addRow(Common.UIString('SCT'),sct.logDescription+' ('+sct.origin+', '+sct.status+')');}
const sctTableWrapper=sctSection.createChild('div','sct-details');sctTableWrapper.classList.add('hidden');for(let i=0;i<sctListLength;i++){const sctTable=new Security.SecurityDetailsTable();sctTableWrapper.appendChild(sctTable.element());const sct=originState.securityDetails.signedCertificateTimestampList[i];sctTable.addRow(Common.UIString('Log name'),sct.logDescription);sctTable.addRow(Common.UIString('Log ID'),sct.logId.replace(/(.{2})/g,'$1 '));sctTable.addRow(Common.UIString('Validation status'),sct.status);sctTable.addRow(Common.UIString('Source'),sct.origin);sctTable.addRow(Common.UIString('Issued at'),new Date(sct.timestamp).toUTCString());sctTable.addRow(Common.UIString('Hash algorithm'),sct.hashAlgorithm);sctTable.addRow(Common.UIString('Signature algorithm'),sct.signatureAlgorithm);sctTable.addRow(Common.UIString('Signature data'),sct.signatureData.replace(/(.{2})/g,'$1 '));}
if(sctListLength){function toggleSctDetailsDisplay(){let buttonText;const isDetailsShown=!sctTableWrapper.classList.contains('hidden');if(isDetailsShown){buttonText=ls`Show full details`;}else{buttonText=ls`Hide full details`;}
toggleSctsDetailsLink.textContent=buttonText;UI.ARIAUtils.setAccessibleName(toggleSctsDetailsLink,buttonText);UI.ARIAUtils.setExpanded(toggleSctsDetailsLink,!isDetailsShown);sctSummaryTable.element().classList.toggle('hidden');sctTableWrapper.classList.toggle('hidden');}
const toggleSctsDetailsLink=UI.createTextButton(ls`Show full details`,toggleSctDetailsDisplay,'details-toggle');sctSection.appendChild(toggleSctsDetailsLink);}
switch(ctCompliance){case Protocol.Network.CertificateTransparencyCompliance.Compliant:sctSection.createChild('div','origin-view-section-notes').textContent=Common.UIString('This request complies with Chrome\'s Certificate Transparency policy.');break;case Protocol.Network.CertificateTransparencyCompliance.NotCompliant:sctSection.createChild('div','origin-view-section-notes').textContent=Common.UIString('This request does not comply with Chrome\'s Certificate Transparency policy.');break;case Protocol.Network.CertificateTransparencyCompliance.Unknown:break;}
const noteSection=this.element.createChild('div','origin-view-section origin-view-notes');if(originState.loadedFromCache){noteSection.createChild('div').textContent=Common.UIString('This response was loaded from cache. Some security details might be missing.');}
noteSection.createChild('div').textContent=Common.UIString('The security details above are from the first inspected response.');}else if(originState.securityState===Protocol.Security.SecurityState.Secure){const secureSection=this.element.createChild('div','origin-view-section');const secureDiv=secureSection.createChild('div','origin-view-section-title');secureDiv.textContent=ls`Secure`;UI.ARIAUtils.markAsHeading(secureDiv,2);secureSection.createChild('div').textContent=ls`This origin is a non-HTTPS secure origin.`;}else if(originState.securityState!==Protocol.Security.SecurityState.Unknown){const notSecureSection=this.element.createChild('div','origin-view-section');const notSecureDiv=notSecureSection.createChild('div','origin-view-section-title');notSecureDiv.textContent=ls`Not secure`;UI.ARIAUtils.markAsHeading(notSecureDiv,2);notSecureSection.createChild('div').textContent=Common.UIString('Your connection to this origin is not secure.');}else{const noInfoSection=this.element.createChild('div','origin-view-section');const noInfoDiv=noInfoSection.createChild('div','origin-view-section-title');noInfoDiv.textContent=ls`No security information`;UI.ARIAUtils.markAsHeading(noInfoDiv,2);noInfoSection.createChild('div').textContent=Common.UIString('No security details are available for this origin.');}}
_createSanDiv(sanList){const sanDiv=createElement('div');if(sanList.length===0){sanDiv.textContent=Common.UIString('(n/a)');sanDiv.classList.add('empty-san');}else{const truncatedNumToShow=2;const listIsTruncated=sanList.length>truncatedNumToShow+1;for(let i=0;i<sanList.length;i++){const span=sanDiv.createChild('span','san-entry');span.textContent=sanList[i];if(listIsTruncated&&i>=truncatedNumToShow){span.classList.add('truncated-entry');}}
if(listIsTruncated){function toggleSANTruncation(){const isTruncated=sanDiv.classList.contains('truncated-san');let buttonText;if(isTruncated){sanDiv.classList.remove('truncated-san');buttonText=ls`Show less`;}else{sanDiv.classList.add('truncated-san');buttonText=ls`Show more (${sanList.length} total)`;}
truncatedSANToggle.textContent=buttonText;UI.ARIAUtils.setAccessibleName(truncatedSANToggle,buttonText);UI.ARIAUtils.setExpanded(truncatedSANToggle,isTruncated);}
const truncatedSANToggle=UI.createTextButton(ls`Show more (${sanList.length} total)`,toggleSANTruncation);sanDiv.appendChild(truncatedSANToggle);toggleSANTruncation();}}
return sanDiv;}
setSecurityState(newSecurityState){for(const className of Array.prototype.slice.call(this._originLockIcon.classList)){if(className.startsWith('security-property-')){this._originLockIcon.classList.remove(className);}}
this._originLockIcon.classList.add('security-property-'+newSecurityState);}}
export class SecurityDetailsTable{constructor(){this._element=createElement('table');this._element.classList.add('details-table');}
element(){return this._element;}
addRow(key,value){const row=this._element.createChild('div','details-table-row');row.createChild('div').textContent=key;const valueDiv=row.createChild('div');if(typeof value==='string'){valueDiv.textContent=value;}else{valueDiv.appendChild(value);}}}
self.Security=self.Security||{};Security=Security||{};Security.SecurityPanel=SecurityPanel;Security.SecurityPanel.Origin;Security.SecurityPanel.OriginState;Security.SecurityPanelSidebarTree=SecurityPanelSidebarTree;Security.SecurityPanelSidebarTree.OriginGroup=OriginGroup;Security.SecurityPanelSidebarTreeElement=SecurityPanelSidebarTreeElement;Security.SecurityMainView=SecurityMainView;Security.SecurityOriginView=SecurityOriginView;Security.SecurityDetailsTable=SecurityDetailsTable;export default class SecurityModel extends SDK.SDKModel{constructor(target){super(target);this._dispatcher=new SecurityDispatcher(this);this._securityAgent=target.securityAgent();target.registerSecurityDispatcher(this._dispatcher);this._securityAgent.enable();}
resourceTreeModel(){return(this.target().model(SDK.ResourceTreeModel));}
networkManager(){return(this.target().model(SDK.NetworkManager));}
static SecurityStateComparator(a,b){let securityStateMap;if(SecurityModel._symbolicToNumericSecurityState){securityStateMap=SecurityModel._symbolicToNumericSecurityState;}else{securityStateMap=new Map();const ordering=[Protocol.Security.SecurityState.Info,Protocol.Security.SecurityState.InsecureBroken,Protocol.Security.SecurityState.Insecure,Protocol.Security.SecurityState.Neutral,Protocol.Security.SecurityState.Secure,Protocol.Security.SecurityState.Unknown];for(let i=0;i<ordering.length;i++){securityStateMap.set(ordering[i],i+1);}
SecurityModel._symbolicToNumericSecurityState=securityStateMap;}
const aScore=securityStateMap.get(a)||0;const bScore=securityStateMap.get(b)||0;return aScore-bScore;}}
SDK.SDKModel.register(SecurityModel,SDK.Target.Capability.Security,false);export const Events={SecurityStateChanged:Symbol('SecurityStateChanged'),VisibleSecurityStateChanged:Symbol('VisibleSecurityStateChanged')};export const SummaryMessages={[Protocol.Security.SecurityState.Unknown]:ls`The security of this page is unknown.`,[Protocol.Security.SecurityState.Insecure]:ls`This page is not secure.`,[Protocol.Security.SecurityState.Neutral]:ls`This page is not secure.`,[Protocol.Security.SecurityState.Secure]:ls`This page is secure (valid HTTPS).`,[Protocol.Security.SecurityState.InsecureBroken]:ls`This page is not secure (broken HTTPS).`};export class PageSecurityState{constructor(securityState,explanations,summary){this.securityState=securityState;this.explanations=explanations;this.summary=summary;}}
export class PageVisibleSecurityState{constructor(securityState,certificateSecurityState,safetyTipInfo,securityStateIssueIds){this.securityState=securityState;this.certificateSecurityState=certificateSecurityState?new CertificateSecurityState(certificateSecurityState):null;this.safetyTipInfo=safetyTipInfo?new SafetyTipInfo(safetyTipInfo):null;this.securityStateIssueIds=securityStateIssueIds;}}
export class CertificateSecurityState{constructor(certificateSecurityState){this.protocol=certificateSecurityState.protocol;this.keyExchange=certificateSecurityState.keyExchange;this.keyExchangeGroup=certificateSecurityState.keyExchangeGroup||null;this.cipher=certificateSecurityState.cipher;this.mac=certificateSecurityState.mac||null;this.certificate=certificateSecurityState.certificate;this.subjectName=certificateSecurityState.subjectName;this.issuer=certificateSecurityState.issuer;this.validFrom=certificateSecurityState.validFrom;this.validTo=certificateSecurityState.validTo;this.certificateNetworkError=certificateSecurityState.certificateNetworkError||null;this.certificateHasWeakSignature=certificateSecurityState.certificateHasWeakSignature;this.certificateHasSha1Signature=certificateSecurityState.certificateHasSha1Signature;this.modernSSL=certificateSecurityState.modernSSL;this.obsoleteSslProtocol=certificateSecurityState.obsoleteSslProtocol;this.obsoleteSslKeyExchange=certificateSecurityState.obsoleteSslKeyExchange;this.obsoleteSslCipher=certificateSecurityState.obsoleteSslCipher;this.obsoleteSslSignature=certificateSecurityState.obsoleteSslSignature;}
isCertificateExpiringSoon(){const expiryDate=new Date(this.validTo*1000);return(expiryDate<new Date(Date.now()).setHours(48))&&(expiryDate>Date.now());}
getKeyExchangeName(){if(this.keyExchangeGroup){return this.keyExchange?ls`${this.keyExchange} with ${this.keyExchangeGroup}`:this.keyExchangeGroup;}
return this.keyExchange;}
getCipherFullName(){return this.mac?ls`${this.cipher} with ${this.mac}`:this.cipher;}}
class SafetyTipInfo{constructor(safetyTipInfo){this.safetyTipStatus=safetyTipInfo.safetyTipStatus;this.safeUrl=safetyTipInfo.safeUrl||null;}}
export class SecurityStyleExplanation{constructor(securityState,title,summary,description,certificate=[],mixedContentType=Protocol.Security.MixedContentType.None,recommendations=[]){this.securityState=securityState;this.title=title;this.summary=summary;this.description=description;this.certificate=certificate;this.mixedContentType=mixedContentType;this.recommendations=recommendations;}}
class SecurityDispatcher{constructor(model){this._model=model;}
securityStateChanged(securityState,schemeIsCryptographic,explanations,insecureContentStatus,summary){const pageSecurityState=new PageSecurityState(securityState,explanations,summary||null);this._model.dispatchEventToListeners(Events.SecurityStateChanged,pageSecurityState);}
visibleSecurityStateChanged(visibleSecurityState){const pageVisibleSecurityState=new PageVisibleSecurityState(visibleSecurityState.securityState,visibleSecurityState.certificateSecurityState||null,visibleSecurityState.safetyTipInfo||null,visibleSecurityState.securityStateIssueIds);this._model.dispatchEventToListeners(Events.VisibleSecurityStateChanged,pageVisibleSecurityState);}
certificateError(eventId,errorType,requestURL){}}
self.Security=self.Security||{};Security=Security||{};Security.SecurityModel=SecurityModel;Security.SecurityModel.Events=Events;Security.SummaryMessages=SummaryMessages;Security.PageSecurityState=PageSecurityState;Security.PageVisibleSecurityState=PageVisibleSecurityState;Security.CertificateSecurityState=CertificateSecurityState;Security.SecurityStyleExplanation=SecurityStyleExplanation;import'./graph_visualizer/Types.js';import'./graph_visualizer/GraphStyle.js';import'./graph_visualizer/GraphManager.js';import'./graph_visualizer/NodeRendererUtility.js';import'./graph_visualizer/NodeView.js';import'./graph_visualizer/EdgeView.js';import'./graph_visualizer/GraphView.js';import'./WebAudioModel.js';import'./AudioContextSelector.js';import'./AudioContextContentBuilder.js';import'./WebAudioView.js';import*as AudioContextContentBuilder from'./AudioContextContentBuilder.js';import*as AudioContextSelector from'./AudioContextSelector.js';import*as EdgeView from'./graph_visualizer/EdgeView.js';import*as GraphManager from'./graph_visualizer/GraphManager.js';import*as GraphStyle from'./graph_visualizer/GraphStyle.js';import*as GraphView from'./graph_visualizer/GraphView.js';import*as NodeRendererUtility from'./graph_visualizer/NodeRendererUtility.js';import*as NodeView from'./graph_visualizer/NodeView.js';import*as Types from'./graph_visualizer/Types.js';import*as WebAudioModel from'./WebAudioModel.js';import*as WebAudioView from'./WebAudioView.js';export{AudioContextContentBuilder,AudioContextSelector,EdgeView,GraphManager,GraphStyle,GraphView,NodeRendererUtility,NodeView,Types,WebAudioModel,WebAudioView};export const PortTypes={In:Symbol('In'),Out:Symbol('Out'),Param:Symbol('Param'),};self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.GraphVisualizer=WebAudio.GraphVisualizer||{};WebAudio.GraphVisualizer.Size;WebAudio.GraphVisualizer.Point;WebAudio.GraphVisualizer.NodeLayout;WebAudio.GraphVisualizer.PortTypes=PortTypes;WebAudio.GraphVisualizer.Port;WebAudio.GraphVisualizer.NodeCreationData;WebAudio.GraphVisualizer.ParamCreationData;WebAudio.GraphVisualizer.NodesConnectionData;WebAudio.GraphVisualizer.NodesDisconnectionData;WebAudio.GraphVisualizer.NodesDisconnectionDataWithDestination;WebAudio.GraphVisualizer.NodeParamConnectionData;WebAudio.GraphVisualizer.NodeParamDisconnectionData;export const PortPadding=4;export const InputPortRadius=10;export const AudioParamRadius=5;export const LeftMarginOfText=12;export const RightMarginOfText=30;export const LeftSideTopPadding=5;export const BottomPaddingWithoutParam=6;export const BottomPaddingWithParam=8;export const ArrowHeadSize=12;export const GraphPadding=20;export const GraphMargin=20;export const TotalInputPortHeight=InputPortRadius*2+PortPadding;export const TotalOutputPortHeight=TotalInputPortHeight;export const TotalParamPortHeight=AudioParamRadius*2+PortPadding;export const NodeLabelFontStyle='14px Segoe UI, Arial';export const ParamLabelFontStyle='12px Segoe UI, Arial';export const GraphStyles={PortPadding,InputPortRadius,AudioParamRadius,LeftMarginOfText,RightMarginOfText,LeftSideTopPadding,BottomPaddingWithoutParam,BottomPaddingWithParam,ArrowHeadSize,GraphPadding,GraphMargin,TotalInputPortHeight,TotalOutputPortHeight,TotalParamPortHeight,NodeLabelFontStyle,ParamLabelFontStyle};self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.GraphVisualizer=WebAudio.GraphVisualizer||{};WebAudio.GraphVisualizer.GraphStyles=GraphStyles;export class GraphManager extends Common.Object{constructor(){super();this._graphMapByContextId=new Map();}
createContext(contextId){const graph=new WebAudio.GraphVisualizer.GraphView(contextId);graph.addEventListener(WebAudio.GraphVisualizer.GraphView.Events.ShouldRedraw,this._notifyShouldRedraw,this);this._graphMapByContextId.set(contextId,graph);}
destroyContext(contextId){if(!this._graphMapByContextId.has(contextId)){return;}
const graph=this._graphMapByContextId.get(contextId);graph.removeEventListener(WebAudio.GraphVisualizer.GraphView.Events.ShouldRedraw,this._notifyShouldRedraw,this);this._graphMapByContextId.delete(contextId);}
hasContext(contextId){return this._graphMapByContextId.has(contextId);}
clearGraphs(){this._graphMapByContextId.clear();}
getGraph(contextId){return this._graphMapByContextId.get(contextId);}
_notifyShouldRedraw(event){const graph=(event.data);this.dispatchEventToListeners(WebAudio.GraphVisualizer.GraphView.Events.ShouldRedraw,graph);}}
self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.GraphVisualizer=WebAudio.GraphVisualizer||{};WebAudio.GraphVisualizer.GraphManager=GraphManager;export const calculateInputPortXY=portIndex=>{const y=WebAudio.GraphVisualizer.GraphStyles.InputPortRadius+
WebAudio.GraphVisualizer.GraphStyles.LeftSideTopPadding+
portIndex*WebAudio.GraphVisualizer.GraphStyles.TotalInputPortHeight;return{x:0,y:y};};export const calculateOutputPortXY=(portIndex,nodeSize,numberOfOutputs)=>{const{width,height}=nodeSize;const outputPortY=(height/2)+
(2*portIndex-numberOfOutputs+1)*WebAudio.GraphVisualizer.GraphStyles.TotalOutputPortHeight/2;return{x:width,y:outputPortY};};export const calculateParamPortXY=(portIndex,offsetY)=>{const paramPortY=offsetY+WebAudio.GraphVisualizer.GraphStyles.TotalParamPortHeight*(portIndex+1)-
WebAudio.GraphVisualizer.GraphStyles.AudioParamRadius;return{x:0,y:paramPortY};};self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.GraphVisualizer=WebAudio.GraphVisualizer||{};WebAudio.GraphVisualizer.NodeRendererUtility=WebAudio.GraphVisualizer.NodeRendererUtility||{};WebAudio.GraphVisualizer.NodeRendererUtility.calculateInputPortXY=calculateInputPortXY;WebAudio.GraphVisualizer.NodeRendererUtility.calculateOutputPortXY=calculateOutputPortXY;WebAudio.GraphVisualizer.NodeRendererUtility.calculateParamPortXY=calculateParamPortXY;export class NodeView{constructor(data,label){this.id=data.nodeId;this.type=data.nodeType;this.numberOfInputs=data.numberOfInputs;this.numberOfOutputs=data.numberOfOutputs;this.label=label;this.size={width:0,height:0};this.position=null;this._layout={inputPortSectionHeight:0,outputPortSectionHeight:0,maxTextLength:0,totalHeight:0,};this.ports=new Map();this._initialize(data);}
_initialize(data){this._updateNodeLayoutAfterAddingNode(data);this._setupInputPorts();this._setupOutputPorts();}
addParamPort(paramId,paramType){const paramPorts=this.getPortsByType(WebAudio.GraphVisualizer.PortTypes.Param);const numberOfParams=paramPorts.length;const{x,y}=WebAudio.GraphVisualizer.NodeRendererUtility.calculateParamPortXY(numberOfParams,this._layout.inputPortSectionHeight);this._addPort({id:generateParamPortId(this.id,paramId),type:WebAudio.GraphVisualizer.PortTypes.Param,label:paramType,x,y,});this._updateNodeLayoutAfterAddingParam(numberOfParams+1,paramType);this._setupOutputPorts();}
getPortsByType(type){const result=[];this.ports.forEach(port=>{if(port.type===type){result.push(port);}});return result;}
_updateNodeLayoutAfterAddingNode(data){const{TotalInputPortHeight,LeftSideTopPadding,BottomPaddingWithoutParam,TotalOutputPortHeight,NodeLabelFontStyle,}=WebAudio.GraphVisualizer.GraphStyles;const inputPortSectionHeight=TotalInputPortHeight*Math.max(1,data.numberOfInputs)+LeftSideTopPadding;this._layout.inputPortSectionHeight=inputPortSectionHeight;this._layout.outputPortSectionHeight=TotalOutputPortHeight*data.numberOfOutputs;this._layout.totalHeight=Math.max(inputPortSectionHeight+BottomPaddingWithoutParam,this._layout.outputPortSectionHeight);const nodeLabelLength=measureTextWidth(this.label,NodeLabelFontStyle);this._layout.maxTextLength=Math.max(this._layout.maxTextLength,nodeLabelLength);this._updateNodeSize();}
_updateNodeLayoutAfterAddingParam(numberOfParams,paramType){const leftSideMaxHeight=this._layout.inputPortSectionHeight+
numberOfParams*WebAudio.GraphVisualizer.GraphStyles.TotalParamPortHeight+
WebAudio.GraphVisualizer.GraphStyles.BottomPaddingWithParam;this._layout.totalHeight=Math.max(leftSideMaxHeight,this._layout.outputPortSectionHeight);const paramLabelLength=measureTextWidth(paramType,WebAudio.GraphVisualizer.GraphStyles.ParamLabelFontStyle);this._layout.maxTextLength=Math.max(this._layout.maxTextLength,paramLabelLength);this._updateNodeSize();}
_updateNodeSize(){this.size={width:Math.ceil(WebAudio.GraphVisualizer.GraphStyles.LeftMarginOfText+this._layout.maxTextLength+
WebAudio.GraphVisualizer.GraphStyles.RightMarginOfText),height:this._layout.totalHeight,};}
_setupInputPorts(){for(let i=0;i<this.numberOfInputs;i++){const{x,y}=WebAudio.GraphVisualizer.NodeRendererUtility.calculateInputPortXY(i);this._addPort({id:generateInputPortId(this.id,i),type:WebAudio.GraphVisualizer.PortTypes.In,x,y,});}}
_setupOutputPorts(){for(let i=0;i<this.numberOfOutputs;i++){const portId=generateOutputPortId(this.id,i);const{x,y}=WebAudio.GraphVisualizer.NodeRendererUtility.calculateOutputPortXY(i,this.size,this.numberOfOutputs);if(this.ports.has(portId)){const port=this.ports.get(portId);port.x=x;port.y=y;}else{this._addPort({id:portId,type:WebAudio.GraphVisualizer.PortTypes.Out,x,y,});}}}
_addPort(port){this.ports.set(port.id,port);}}
export const generateInputPortId=(nodeId,inputIndex)=>{return`${nodeId}-input-${inputIndex || 0}`;};export const generateOutputPortId=(nodeId,outputIndex)=>{return`${nodeId}-output-${outputIndex || 0}`;};export const generateParamPortId=(nodeId,paramId)=>{return`${nodeId}-param-${paramId}`;};export class NodeLabelGenerator{constructor(){this._totalNumberOfNodes=0;}
generateLabel(nodeType){if(nodeType.endsWith('Node')){nodeType=nodeType.slice(0,nodeType.length-4);}
this._totalNumberOfNodes+=1;const label=`${nodeType} ${this._totalNumberOfNodes}`;return label;}}
export const measureTextWidth=(text,fontStyle)=>{if(!WebAudio.GraphVisualizer._contextForFontTextMeasuring){WebAudio.GraphVisualizer._contextForFontTextMeasuring=createElement('canvas').getContext('2d');}
const context=WebAudio.GraphVisualizer._contextForFontTextMeasuring;context.save();context.font=fontStyle;const width=UI.measureTextWidth(context,text);context.restore();return width;};self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.GraphVisualizer=WebAudio.GraphVisualizer||{};WebAudio.GraphVisualizer.NodeView=NodeView;WebAudio.GraphVisualizer.NodeLabelGenerator=NodeLabelGenerator;WebAudio.GraphVisualizer.generateInputPortId=generateInputPortId;WebAudio.GraphVisualizer.generateOutputPortId=generateOutputPortId;WebAudio.GraphVisualizer.generateParamPortId=generateParamPortId;WebAudio.GraphVisualizer.measureTextWidth=measureTextWidth;export class EdgeView{constructor(data,type){const{edgeId,sourcePortId,destinationPortId}=generateEdgePortIdsByData(data,type);this.id=edgeId;this.type=type;this.sourceId=data.sourceId;this.destinationId=data.destinationId;this.sourcePortId=sourcePortId;this.destinationPortId=destinationPortId;}}
export const generateEdgePortIdsByData=(data,type)=>{if(!data.sourceId||!data.destinationId){console.error(`Undefined node message: ${JSON.stringify(data)}`);return null;}
const sourcePortId=WebAudio.GraphVisualizer.generateOutputPortId(data.sourceId,data.sourceOutputIndex);const destinationPortId=getDestinationPortId(data,type);return{edgeId:`${sourcePortId}->${destinationPortId}`,sourcePortId:sourcePortId,destinationPortId:destinationPortId,};function getDestinationPortId(data,type){if(type===EdgeTypes.NodeToNode){return WebAudio.GraphVisualizer.generateInputPortId(data.destinationId,data.destinationInputIndex);}else if(type===EdgeTypes.NodeToParam){return WebAudio.GraphVisualizer.generateParamPortId(data.destinationId,data.destinationParamId);}else{console.error(`Unknown edge type: ${type}`);return'';}}};export const EdgeTypes={NodeToNode:Symbol('NodeToNode'),NodeToParam:Symbol('NodeToParam'),};self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.GraphVisualizer=WebAudio.GraphVisualizer||{};WebAudio.GraphVisualizer.EdgeView=EdgeView;WebAudio.GraphVisualizer.generateEdgePortIdsByData=generateEdgePortIdsByData;WebAudio.GraphVisualizer.EdgeTypes=EdgeTypes;export class GraphView extends Common.Object{constructor(contextId){super();this.contextId=contextId;this._nodes=new Map();this._edges=new Map();this._outboundEdgeMap=new Platform.Multimap();this._inboundEdgeMap=new Platform.Multimap();this._nodeLabelGenerator=new WebAudio.GraphVisualizer.NodeLabelGenerator();this._paramIdToNodeIdMap=new Map();}
addNode(data){const label=this._nodeLabelGenerator.generateLabel(data.nodeType);const node=new WebAudio.GraphVisualizer.NodeView(data,label);this._nodes.set(data.nodeId,node);this._notifyShouldRedraw();}
removeNode(nodeId){this._outboundEdgeMap.get(nodeId).forEach(edgeId=>this._removeEdge(edgeId));this._inboundEdgeMap.get(nodeId).forEach(edgeId=>this._removeEdge(edgeId));this._nodes.delete(nodeId);this._notifyShouldRedraw();}
addParam(data){const node=this.getNodeById(data.nodeId);if(!node){console.error(`AudioNode should be added before AudioParam`);return;}
node.addParamPort(data.paramId,data.paramType);this._paramIdToNodeIdMap.set(data.paramId,data.nodeId);this._notifyShouldRedraw();}
removeParam(paramId){this._paramIdToNodeIdMap.delete(paramId);}
addNodeToNodeConnection(edgeData){const edge=new WebAudio.GraphVisualizer.EdgeView(edgeData,WebAudio.GraphVisualizer.EdgeTypes.NodeToNode);this._addEdge(edge);}
removeNodeToNodeConnection(edgeData){if(edgeData.destinationId){const{edgeId}=WebAudio.GraphVisualizer.generateEdgePortIdsByData((edgeData),WebAudio.GraphVisualizer.EdgeTypes.NodeToNode);this._removeEdge(edgeId);}else{this._outboundEdgeMap.get(edgeData.sourceId).forEach(edgeId=>this._removeEdge(edgeId));}}
addNodeToParamConnection(edgeData){const edge=new WebAudio.GraphVisualizer.EdgeView(edgeData,WebAudio.GraphVisualizer.EdgeTypes.NodeToParam);this._addEdge(edge);}
removeNodeToParamConnection(edgeData){const{edgeId}=WebAudio.GraphVisualizer.generateEdgePortIdsByData(edgeData,WebAudio.GraphVisualizer.EdgeTypes.NodeToParam);this._removeEdge(edgeId);}
getNodeById(nodeId){return this._nodes.get(nodeId);}
getNodes(){return this._nodes;}
getEdges(){return this._edges;}
getNodeIdByParamId(paramId){return this._paramIdToNodeIdMap.get(paramId);}
_addEdge(edge){const sourceId=edge.sourceId;if(this._outboundEdgeMap.hasValue(sourceId,edge.id)){return;}
this._edges.set(edge.id,edge);this._outboundEdgeMap.set(sourceId,edge.id);this._inboundEdgeMap.set(edge.destinationId,edge.id);this._notifyShouldRedraw();}
_removeEdge(edgeId){const edge=this._edges.get(edgeId);if(!edge){return;}
this._outboundEdgeMap.delete(edge.sourceId,edgeId);this._inboundEdgeMap.delete(edge.destinationId,edgeId);this._edges.delete(edgeId);this._notifyShouldRedraw();}
_notifyShouldRedraw(){this.dispatchEventToListeners(Events.ShouldRedraw,this);}}
export const Events={ShouldRedraw:Symbol('ShouldRedraw')};self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.GraphVisualizer=WebAudio.GraphVisualizer||{};WebAudio.GraphVisualizer.GraphView=GraphView;WebAudio.GraphVisualizer.GraphView.Events=Events;export class WebAudioView extends UI.ThrottledWidget{constructor(){super(true,1000);this.element.classList.add('web-audio-drawer');this.registerRequiredCSS('web_audio/webAudio.css');const toolbarContainer=this.contentElement.createChild('div','web-audio-toolbar-container vbox');this._contextSelector=new WebAudio.AudioContextSelector();const toolbar=new UI.Toolbar('web-audio-toolbar',toolbarContainer);toolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('components.collect-garbage'));toolbar.appendSeparator();toolbar.appendToolbarItem(this._contextSelector.toolbarItem());this._detailViewContainer=this.contentElement.createChild('div','vbox flex-auto');this._graphManager=new WebAudio.GraphVisualizer.GraphManager();this._landingPage=new UI.VBox();this._landingPage.contentElement.classList.add('web-audio-landing-page','fill');this._landingPage.contentElement.appendChild(UI.html`
      <div>
        <p>${ls`Open a page that uses Web Audio API to start monitoring.`}</p>
      </div>
    `);this._landingPage.show(this._detailViewContainer);this._summaryBarContainer=this.contentElement.createChild('div','web-audio-summary-container');this._contextSelector.addEventListener(WebAudio.AudioContextSelector.Events.ContextSelected,event=>{const context=(event.data);this._updateDetailView(context);this.doUpdate();});SDK.targetManager.observeModels(WebAudio.WebAudioModel,this);}
wasShown(){super.wasShown();for(const model of SDK.targetManager.models(WebAudio.WebAudioModel)){this._addEventListeners(model);}}
willHide(){for(const model of SDK.targetManager.models(WebAudio.WebAudioModel)){this._removeEventListeners(model);}}
modelAdded(webAudioModel){if(this.isShowing()){this._addEventListeners(webAudioModel);}}
modelRemoved(webAudioModel){this._removeEventListeners(webAudioModel);}
async doUpdate(){await this._pollRealtimeData();this.update();}
_addEventListeners(webAudioModel){webAudioModel.ensureEnabled();webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.ContextCreated,this._contextCreated,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.ContextDestroyed,this._contextDestroyed,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.ContextChanged,this._contextChanged,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.ModelReset,this._reset,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.ModelSuspend,this._suspendModel,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.AudioListenerCreated,this._audioListenerCreated,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.AudioListenerWillBeDestroyed,this._audioListenerWillBeDestroyed,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.AudioNodeCreated,this._audioNodeCreated,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.AudioNodeWillBeDestroyed,this._audioNodeWillBeDestroyed,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.AudioParamCreated,this._audioParamCreated,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.AudioParamWillBeDestroyed,this._audioParamWillBeDestroyed,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.NodesConnected,this._nodesConnected,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.NodesDisconnected,this._nodesDisconnected,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.NodeParamConnected,this._nodeParamConnected,this);webAudioModel.addEventListener(WebAudio.WebAudioModel.Events.NodeParamDisconnected,this._nodeParamDisconnected,this);}
_removeEventListeners(webAudioModel){webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.ContextCreated,this._contextCreated,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.ContextDestroyed,this._contextDestroyed,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.ContextChanged,this._contextChanged,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.ModelReset,this._reset,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.ModelSuspend,this._suspendModel,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.AudioListenerCreated,this._audioListenerCreated,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.AudioListenerWillBeDestroyed,this._audioListenerWillBeDestroyed,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.AudioNodeCreated,this._audioNodeCreated,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.AudioNodeWillBeDestroyed,this._audioNodeWillBeDestroyed,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.AudioParamCreated,this._audioParamCreated,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.AudioParamWillBeDestroyed,this._audioParamWillBeDestroyed,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.NodesConnected,this._nodesConnected,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.NodesDisconnected,this._nodesDisconnected,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.NodeParamConnected,this._nodeParamConnected,this);webAudioModel.removeEventListener(WebAudio.WebAudioModel.Events.NodeParamDisconnected,this._nodeParamDisconnected,this);}
_contextCreated(event){const context=(event.data);this._graphManager.createContext(context.contextId);this._contextSelector.contextCreated(event);}
_contextDestroyed(event){const contextId=(event.data);this._graphManager.destroyContext(contextId);this._contextSelector.contextDestroyed(event);}
_contextChanged(event){const context=(event.data);if(!this._graphManager.hasContext(context.contextId)){return;}
this._contextSelector.contextChanged(event);}
_reset(){if(this._landingPage.isShowing()){this._landingPage.detach();}
this._contextSelector.reset();this._detailViewContainer.removeChildren();this._landingPage.show(this._detailViewContainer);this._graphManager.clearGraphs();}
_suspendModel(){this._graphManager.clearGraphs();}
_audioListenerCreated(event){const listener=(event.data);const graph=this._graphManager.getGraph(listener.contextId);if(!graph){return;}
graph.addNode({nodeId:listener.listenerId,nodeType:'Listener',numberOfInputs:0,numberOfOutputs:0,});}
_audioListenerWillBeDestroyed(event){const{contextId,listenerId}=event.data;const graph=this._graphManager.getGraph(contextId);if(!graph){return;}
graph.removeNode(listenerId);}
_audioNodeCreated(event){const node=(event.data);const graph=this._graphManager.getGraph(node.contextId);if(!graph){return;}
graph.addNode({nodeId:node.nodeId,nodeType:node.nodeType,numberOfInputs:node.numberOfInputs,numberOfOutputs:node.numberOfOutputs,});}
_audioNodeWillBeDestroyed(event){const{contextId,nodeId}=event.data;const graph=this._graphManager.getGraph(contextId);if(!graph){return;}
graph.removeNode(nodeId);}
_audioParamCreated(event){const param=(event.data);const graph=this._graphManager.getGraph(param.contextId);if(!graph){return;}
graph.addParam({paramId:param.paramId,paramType:param.paramType,nodeId:param.nodeId,});}
_audioParamWillBeDestroyed(event){const{contextId,paramId}=event.data;const graph=this._graphManager.getGraph(contextId);if(!graph){return;}
graph.removeParam(paramId);}
_nodesConnected(event){const{contextId,sourceId,destinationId,sourceOutputIndex,destinationInputIndex}=event.data;const graph=this._graphManager.getGraph(contextId);if(!graph){return;}
graph.addNodeToNodeConnection({sourceId,destinationId,sourceOutputIndex,destinationInputIndex,});}
_nodesDisconnected(event){const{contextId,sourceId,destinationId,sourceOutputIndex,destinationInputIndex}=event.data;const graph=this._graphManager.getGraph(contextId);if(!graph){return;}
graph.removeNodeToNodeConnection({sourceId,destinationId,sourceOutputIndex,destinationInputIndex,});}
_nodeParamConnected(event){const{contextId,sourceId,destinationId,sourceOutputIndex}=event.data;const graph=this._graphManager.getGraph(contextId);if(!graph){return;}
const nodeId=graph.getNodeIdByParamId(destinationId);if(!nodeId){return;}
graph.addNodeToParamConnection({sourceId,destinationId:nodeId,sourceOutputIndex,destinationParamId:destinationId,});}
_nodeParamDisconnected(event){const{contextId,sourceId,destinationId,sourceOutputIndex}=event.data;const graph=this._graphManager.getGraph(contextId);if(!graph){return;}
const nodeId=graph.getNodeIdByParamId(destinationId);if(!nodeId){return;}
graph.removeNodeToParamConnection({sourceId,destinationId:nodeId,sourceOutputIndex,destinationParamId:destinationId,});}
_updateDetailView(context){if(this._landingPage.isShowing()){this._landingPage.detach();}
const detailBuilder=new WebAudio.ContextDetailBuilder(context);this._detailViewContainer.removeChildren();this._detailViewContainer.appendChild(detailBuilder.getFragment());}
_updateSummaryBar(contextId,contextRealtimeData){const summaryBuilder=new WebAudio.AudioContextSummaryBuilder(contextId,contextRealtimeData);this._summaryBarContainer.removeChildren();this._summaryBarContainer.appendChild(summaryBuilder.getFragment());}
_clearSummaryBar(){this._summaryBarContainer.removeChildren();}
async _pollRealtimeData(){const context=this._contextSelector.selectedContext();if(!context){this._clearSummaryBar();return;}
for(const model of SDK.targetManager.models(WebAudio.WebAudioModel)){if(context.contextType==='realtime'){if(!this._graphManager.hasContext(context.contextId)){continue;}
const realtimeData=await model.requestRealtimeData(context.contextId);if(realtimeData){this._updateSummaryBar(context.contextId,realtimeData);}}else{this._clearSummaryBar();}}}}
self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.WebAudioView=WebAudioView;export class WebAudioModel extends SDK.SDKModel{constructor(target){super(target);this._enabled=false;this._agent=target.webAudioAgent();target.registerWebAudioDispatcher(this);SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.FrameNavigated,this._flushContexts,this);}
_flushContexts(){this.dispatchEventToListeners(Events.ModelReset);}
suspendModel(){this.dispatchEventToListeners(Events.ModelSuspend);return this._agent.disable();}
resumeModel(){if(!this._enabled){return Promise.resolve();}
return this._agent.enable();}
ensureEnabled(){if(this._enabled){return;}
this._agent.enable();this._enabled=true;}
contextCreated(context){this.dispatchEventToListeners(Events.ContextCreated,context);}
contextWillBeDestroyed(contextId){this.dispatchEventToListeners(Events.ContextDestroyed,contextId);}
contextChanged(context){this.dispatchEventToListeners(Events.ContextChanged,context);}
audioListenerCreated(listener){this.dispatchEventToListeners(Events.AudioListenerCreated,listener);}
audioListenerWillBeDestroyed(contextId,listenerId){this.dispatchEventToListeners(Events.AudioListenerWillBeDestroyed,{contextId,listenerId});}
audioNodeCreated(node){this.dispatchEventToListeners(Events.AudioNodeCreated,node);}
audioNodeWillBeDestroyed(contextId,nodeId){this.dispatchEventToListeners(Events.AudioNodeWillBeDestroyed,{contextId,nodeId});}
audioParamCreated(param){this.dispatchEventToListeners(Events.AudioParamCreated,param);}
audioParamWillBeDestroyed(contextId,nodeId,paramId){this.dispatchEventToListeners(Events.AudioParamWillBeDestroyed,{contextId,paramId});}
nodesConnected(contextId,sourceId,destinationId,sourceOutputIndex,destinationInputIndex){this.dispatchEventToListeners(Events.NodesConnected,{contextId,sourceId,destinationId,sourceOutputIndex,destinationInputIndex});}
nodesDisconnected(contextId,sourceId,destinationId,sourceOutputIndex,destinationInputIndex){this.dispatchEventToListeners(Events.NodesDisconnected,{contextId,sourceId,destinationId,sourceOutputIndex,destinationInputIndex});}
nodeParamConnected(contextId,sourceId,destinationId,sourceOutputIndex){this.dispatchEventToListeners(Events.NodeParamConnected,{contextId,sourceId,destinationId,sourceOutputIndex,});}
nodeParamDisconnected(contextId,sourceId,destinationId,sourceOutputIndex){this.dispatchEventToListeners(Events.NodeParamDisconnected,{contextId,sourceId,destinationId,sourceOutputIndex,});}
async requestRealtimeData(contextId){return await this._agent.getRealtimeData(contextId);}}
SDK.SDKModel.register(WebAudioModel,SDK.Target.Capability.DOM,false);export const Events={ContextCreated:Symbol('ContextCreated'),ContextDestroyed:Symbol('ContextDestroyed'),ContextChanged:Symbol('ContextChanged'),ModelReset:Symbol('ModelReset'),ModelSuspend:Symbol('ModelSuspend'),AudioListenerCreated:Symbol('AudioListenerCreated'),AudioListenerWillBeDestroyed:Symbol('AudioListenerWillBeDestroyed'),AudioNodeCreated:Symbol('AudioNodeCreated'),AudioNodeWillBeDestroyed:Symbol('AudioNodeWillBeDestroyed'),AudioParamCreated:Symbol('AudioParamCreated'),AudioParamWillBeDestroyed:Symbol('AudioParamWillBeDestroyed'),NodesConnected:Symbol('NodesConnected'),NodesDisconnected:Symbol('NodesDisconnected'),NodeParamConnected:Symbol('NodeParamConnected'),NodeParamDisconnected:Symbol('NodeParamDisconnected'),};self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.WebAudioModel=WebAudioModel;WebAudio.WebAudioModel.Events=Events;export class AudioContextSelector extends Common.Object{constructor(){super();this._placeholderText=ls`(no recordings)`;this._items=new UI.ListModel();this._dropDown=new UI.SoftDropDown(this._items,this);this._dropDown.setPlaceholderText(this._placeholderText);this._toolbarItem=new UI.ToolbarItem(this._dropDown.element);this._toolbarItem.setEnabled(false);this._toolbarItem.setTitle(ls`Audio context: ${this._placeholderText}`);this._items.addEventListener(UI.ListModel.Events.ItemsReplaced,this._onListItemReplaced,this);this._toolbarItem.element.classList.add('toolbar-has-dropdown');this._selectedContext=null;}
_onListItemReplaced(){const hasItems=!!this._items.length;this._toolbarItem.setEnabled(hasItems);if(!hasItems){this._toolbarItem.setTitle(ls`Audio context: ${this._placeholderText}`);}}
contextCreated(event){const context=(event.data);this._items.insert(this._items.length,context);if(this._items.length===1){this._dropDown.selectItem(context);}}
contextDestroyed(event){const contextId=(event.data);const contextIndex=this._items.findIndex(context=>context.contextId===contextId);if(contextIndex>-1){this._items.remove(contextIndex);}}
contextChanged(event){const changedContext=(event.data);const contextIndex=this._items.findIndex(context=>context.contextId===changedContext.contextId);if(contextIndex>-1){this._items.replace(contextIndex,changedContext);if(this._selectedContext&&this._selectedContext.contextId===changedContext.contextId){this._dropDown.selectItem(changedContext);}}}
createElementForItem(item){const element=createElementWithClass('div');const shadowRoot=UI.createShadowRootWithCoreStyles(element,'web_audio/audioContextSelector.css');const title=shadowRoot.createChild('div','title');title.createTextChild(this.titleFor(item).trimEndWithMaxLength(100));return element;}
selectedContext(){if(!this._selectedContext){return null;}
return this._selectedContext;}
highlightedItemChanged(from,to,fromElement,toElement){if(fromElement){fromElement.classList.remove('highlighted');}
if(toElement){toElement.classList.add('highlighted');}}
isItemSelectable(item){return true;}
itemSelected(item){if(!item){return;}
if(!this._selectedContext||this._selectedContext.contextId!==item.contextId){this._selectedContext=item;this._toolbarItem.setTitle(ls`Audio context: ${this.titleFor(item)}`);}
this.dispatchEventToListeners(WebAudio.AudioContextSelector.Events.ContextSelected,item);}
reset(){this._items.replaceAll([]);}
titleFor(context){return`${context.contextType} (${context.contextId.substr(-6)})`;}
toolbarItem(){return this._toolbarItem;}}
export const Events={ContextSelected:Symbol('ContextSelected')};self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.AudioContextSelector=AudioContextSelector;WebAudio.AudioContextSelector.Events=Events;export class ContextDetailBuilder{constructor(context){this._fragment=createDocumentFragment();this._container=createElementWithClass('div','context-detail-container');this._fragment.appendChild(this._container);this._build(context);}
_build(context){const title=context.contextType==='realtime'?ls`AudioContext`:ls`OfflineAudioContext`;this._addTitle(title,context.contextId);this._addEntry(ls`State`,context.contextState);this._addEntry(ls`Sample Rate`,context.sampleRate,'Hz');if(context.contextType==='realtime'){this._addEntry(ls`Callback Buffer Size`,context.callbackBufferSize,'frames');}
this._addEntry(ls`Max Output Channels`,context.maxOutputChannelCount,'ch');}
_addTitle(title,subtitle){this._container.appendChild(UI.html`
      <div class="context-detail-header">
        <div class="context-detail-title">${title}</div>
        <div class="context-detail-subtitle">${subtitle}</div>
      </div>
    `);}
_addEntry(entry,value,unit){const valueWithUnit=value+(unit?` ${unit}`:'');this._container.appendChild(UI.html`
      <div class="context-detail-row">
        <div class="context-detail-row-entry">${entry}</div>
        <div class="context-detail-row-value">${valueWithUnit}</div>
      </div>
    `);}
getFragment(){return this._fragment;}}
export class AudioContextSummaryBuilder{constructor(contextId,contextRealtimeData){const time=contextRealtimeData.currentTime.toFixed(3);const mean=(contextRealtimeData.callbackIntervalMean*1000).toFixed(3);const stddev=(Math.sqrt(contextRealtimeData.callbackIntervalVariance)*1000).toFixed(3);const capacity=(contextRealtimeData.renderCapacity*100).toFixed(3);this._fragment=createDocumentFragment();this._fragment.appendChild(UI.html`
      <div class="context-summary-container">
        <span>${ls`Current Time`}: ${time} s</span>
        <span>\u2758</span>
        <span>${ls`Callback Interval`}: μ = ${mean} ms, σ = ${stddev} ms</span>
        <span>\u2758</span>
        <span>${ls`Render Capacity`}: ${capacity} %</span>
      </div>
    `);}
getFragment(){return this._fragment;}}
self.WebAudio=self.WebAudio||{};WebAudio=WebAudio||{};WebAudio.ContextDetailBuilder=ContextDetailBuilder;WebAudio.AudioContextSummaryBuilder=AudioContextSummaryBuilder;import'./InspectElementModeController.js';import'./ColorSwatchPopoverIcon.js';import'./ComputedStyleModel.js';import'./DOMLinkifier.js';import'./DOMPath.js';import'./ElementsBreadcrumbs.js';import'./ElementsSidebarPane.js';import'./ElementsTreeElement.js';import'./ElementsTreeOutline.js';import'./EventListenersWidget.js';import'./MarkerDecorator.js';import'./MetricsSidebarPane.js';import'./PlatformFontsWidget.js';import'./PropertiesWidget.js';import'./NodeStackTraceWidget.js';import'./StylePropertyHighlighter.js';import'./StylesSidebarPane.js';import'./StylePropertyTreeElement.js';import'./ComputedStyleWidget.js';import'./ElementsPanel.js';import'./ClassesPaneWidget.js';import'./ElementStatePaneWidget.js';import'./ElementsTreeElementHighlighter.js';import*as ClassesPaneWidget from'./ClassesPaneWidget.js';import*as ColorSwatchPopoverIcon from'./ColorSwatchPopoverIcon.js';import*as ComputedStyleModel from'./ComputedStyleModel.js';import*as ComputedStyleWidget from'./ComputedStyleWidget.js';import*as DOMLinkifier from'./DOMLinkifier.js';import*as DOMPath from'./DOMPath.js';import*as ElementsBreadcrumbs from'./ElementsBreadcrumbs.js';import*as ElementsPanel from'./ElementsPanel.js';import*as ElementsSidebarPane from'./ElementsSidebarPane.js';import*as ElementStatePaneWidget from'./ElementStatePaneWidget.js';import*as ElementsTreeElement from'./ElementsTreeElement.js';import*as ElementsTreeElementHighlighter from'./ElementsTreeElementHighlighter.js';import*as ElementsTreeOutline from'./ElementsTreeOutline.js';import*as EventListenersWidget from'./EventListenersWidget.js';import*as InspectElementModeController from'./InspectElementModeController.js';import*as MarkerDecorator from'./MarkerDecorator.js';import*as MetricsSidebarPane from'./MetricsSidebarPane.js';import*as NodeStackTraceWidget from'./NodeStackTraceWidget.js';import*as PlatformFontsWidget from'./PlatformFontsWidget.js';import*as PropertiesWidget from'./PropertiesWidget.js';import*as StylePropertyHighlighter from'./StylePropertyHighlighter.js';import*as StylePropertyTreeElement from'./StylePropertyTreeElement.js';import*as StylesSidebarPane from'./StylesSidebarPane.js';export{ClassesPaneWidget,ColorSwatchPopoverIcon,ComputedStyleModel,ComputedStyleWidget,DOMLinkifier,DOMPath,ElementsBreadcrumbs,ElementsPanel,ElementsSidebarPane,ElementStatePaneWidget,ElementsTreeElement,ElementsTreeElementHighlighter,ElementsTreeOutline,EventListenersWidget,InspectElementModeController,MarkerDecorator,MetricsSidebarPane,NodeStackTraceWidget,PlatformFontsWidget,PropertiesWidget,StylePropertyHighlighter,StylePropertyTreeElement,StylesSidebarPane,};export default class StylesSidebarPane extends Elements.ElementsSidebarPane{constructor(){super(true);this.setMinimumSize(96,26);this.registerRequiredCSS('elements/stylesSidebarPane.css');Common.moduleSetting('colorFormat').addChangeListener(this.update.bind(this));Common.moduleSetting('textEditorIndent').addChangeListener(this.update.bind(this));this._currentToolbarPane=null;this._animatedToolbarPane=null;this._pendingWidget=null;this._pendingWidgetToggle=null;this._toolbarPaneElement=this._createStylesSidebarToolbar();this._noMatchesElement=this.contentElement.createChild('div','gray-info-message hidden');this._noMatchesElement.textContent=ls`No matching selector or style`;this._sectionsContainer=this.contentElement.createChild('div');UI.ARIAUtils.markAsTree(this._sectionsContainer);this._sectionsContainer.addEventListener('keydown',this._sectionsContainerKeyDown.bind(this),false);this._sectionsContainer.addEventListener('focusin',this._sectionsContainerFocusChanged.bind(this),false);this._sectionsContainer.addEventListener('focusout',this._sectionsContainerFocusChanged.bind(this),false);this._swatchPopoverHelper=new InlineEditor.SwatchPopoverHelper();this._linkifier=new Components.Linkifier(_maxLinkLength,true);this._decorator=null;this._userOperation=false;this._isEditingStyle=false;this._filterRegex=null;this._isActivePropertyHighlighted=false;this.contentElement.classList.add('styles-pane');this._sectionBlocks=[];this._needsForceUpdate=false;StylesSidebarPane._instance=this;UI.context.addFlavorChangeListener(SDK.DOMNode,this.forceUpdate,this);this.contentElement.addEventListener('copy',this._clipboardCopy.bind(this));this._resizeThrottler=new Common.Throttler(100);}
swatchPopoverHelper(){return this._swatchPopoverHelper;}
setUserOperation(userOperation){this._userOperation=userOperation;}
static createExclamationMark(property){const exclamationElement=createElement('span','dt-icon-label');exclamationElement.className='exclamation-mark';if(!StylesSidebarPane.ignoreErrorsForProperty(property)){exclamationElement.type='smallicon-warning';}
exclamationElement.title=SDK.cssMetadata().isCSSPropertyName(property.name)?Common.UIString('Invalid property value'):Common.UIString('Unknown property name');return exclamationElement;}
static ignoreErrorsForProperty(property){function hasUnknownVendorPrefix(string){return!string.startsWith('-webkit-')&&/^[-_][\w\d]+-\w/.test(string);}
const name=property.name.toLowerCase();if(name.charAt(0)==='_'){return true;}
if(name==='filter'){return true;}
if(name.startsWith('scrollbar-')){return true;}
if(hasUnknownVendorPrefix(name)){return true;}
const value=property.value.toLowerCase();if(value.endsWith('\\9')){return true;}
if(hasUnknownVendorPrefix(value)){return true;}
return false;}
static createPropertyFilterElement(placeholder,container,filterCallback){const input=createElementWithClass('input');input.placeholder=placeholder;function searchHandler(){const regex=input.value?new RegExp(input.value.escapeForRegExp(),'i'):null;filterCallback(regex);}
input.addEventListener('input',searchHandler,false);function keydownHandler(event){if(event.key!=='Escape'||!input.value){return;}
event.consume(true);input.value='';searchHandler();}
input.addEventListener('keydown',keydownHandler,false);input.setFilterValue=setFilterValue;function setFilterValue(value){input.value=value;input.focus();searchHandler();}
return input;}
revealProperty(cssProperty){this._decorator=new Elements.StylePropertyHighlighter(this,cssProperty);this._decorator.perform();this.update();}
forceUpdate(){this._needsForceUpdate=true;this._swatchPopoverHelper.hide();this._resetCache();this.update();}
_sectionsContainerKeyDown(event){const activeElement=this._sectionsContainer.ownerDocument.deepActiveElement();if(!activeElement){return;}
const section=activeElement._section;if(!section){return;}
switch(event.key){case'ArrowUp':case'ArrowLeft':const sectionToFocus=section.previousSibling()||section.lastSibling();sectionToFocus.element.focus();event.consume(true);break;case'ArrowDown':case'ArrowRight':{const sectionToFocus=section.nextSibling()||section.firstSibling();sectionToFocus.element.focus();event.consume(true);break;}
case'Home':section.firstSibling().element.focus();event.consume(true);break;case'End':section.lastSibling().element.focus();event.consume(true);break;}}
_sectionsContainerFocusChanged(){this.resetFocus();}
resetFocus(){if(this._sectionBlocks[0]&&this._sectionBlocks[0].sections[0]){this._sectionBlocks[0].sections[0].element.tabIndex=this._sectionsContainer.hasFocus()?-1:0;}}
_onAddButtonLongClick(event){const cssModel=this.cssModel();if(!cssModel){return;}
const headers=cssModel.styleSheetHeaders().filter(styleSheetResourceHeader);const contextMenuDescriptors=[];for(let i=0;i<headers.length;++i){const header=headers[i];const handler=this._createNewRuleInStyleSheet.bind(this,header);contextMenuDescriptors.push({text:Bindings.displayNameForURL(header.resourceURL()),handler:handler});}
contextMenuDescriptors.sort(compareDescriptors);const contextMenu=new UI.ContextMenu(event);for(let i=0;i<contextMenuDescriptors.length;++i){const descriptor=contextMenuDescriptors[i];contextMenu.defaultSection().appendItem(descriptor.text,descriptor.handler);}
contextMenu.footerSection().appendItem('inspector-stylesheet',this._createNewRuleInViaInspectorStyleSheet.bind(this));contextMenu.show();function compareDescriptors(descriptor1,descriptor2){return String.naturalOrderComparator(descriptor1.text,descriptor2.text);}
function styleSheetResourceHeader(header){return!header.isViaInspector()&&!header.isInline&&!!header.resourceURL();}}
_onFilterChanged(regex){this._filterRegex=regex;this._updateFilter();}
_refreshUpdate(editedSection,editedTreeElement){if(editedTreeElement){for(const section of this.allSections()){if(section.isBlank){continue;}
section._updateVarFunctions(editedTreeElement);}}
if(this._isEditingStyle){return;}
const node=this.node();if(!node){return;}
for(const section of this.allSections()){if(section.isBlank){continue;}
section.update(section===editedSection);}
if(this._filterRegex){this._updateFilter();}
this._nodeStylesUpdatedForTest(node,false);}
doUpdate(){return this._fetchMatchedCascade().then(this._innerRebuildUpdate.bind(this));}
onResize(){this._resizeThrottler.schedule(this._innerResize.bind(this));}
_innerResize(){const width=this.contentElement.getBoundingClientRect().width+'px';this.allSections().forEach(section=>section.propertiesTreeOutline.element.style.width=width);return Promise.resolve();}
_resetCache(){if(this.cssModel()){this.cssModel().discardCachedMatchedCascade();}}
_fetchMatchedCascade(){const node=this.node();if(!node||!this.cssModel()){return Promise.resolve((null));}
return this.cssModel().cachedMatchedCascadeForNode(node).then(validateStyles.bind(this));function validateStyles(matchedStyles){return matchedStyles&&matchedStyles.node()===this.node()?matchedStyles:null;}}
setEditingStyle(editing,treeElement){if(this._isEditingStyle===editing){return;}
this.contentElement.classList.toggle('is-editing-style',editing);this._isEditingStyle=editing;this._setActiveProperty(null);}
_setActiveProperty(treeElement){if(this._isActivePropertyHighlighted){SDK.OverlayModel.hideDOMNodeHighlight();}
this._isActivePropertyHighlighted=false;if(!this.node()){return;}
if(!treeElement||treeElement.overloaded()||treeElement.inherited()){return;}
const rule=treeElement.property.ownerStyle.parentRule;const selectorList=(rule instanceof SDK.CSSStyleRule)?rule.selectorText():undefined;for(const mode of['padding','border','margin']){if(!treeElement.name.startsWith(mode)){continue;}
this.node().domModel().overlayModel().highlightInOverlay({node:(this.node()),selectorList},mode);this._isActivePropertyHighlighted=true;break;}}
onCSSModelChanged(event){const edit=event&&event.data?(event.data.edit):null;if(edit){for(const section of this.allSections()){section._styleSheetEdited(edit);}
return;}
if(this._userOperation||this._isEditingStyle){return;}
this._resetCache();this.update();}
focusedSectionIndex(){let index=0;for(const block of this._sectionBlocks){for(const section of block.sections){if(section.element.hasFocus()){return index;}
index++;}}
return-1;}
continueEditingElement(sectionIndex,propertyIndex){const section=this.allSections()[sectionIndex];if(section){section.propertiesTreeOutline.rootElement().childAt(propertyIndex).startEditing();}}
async _innerRebuildUpdate(matchedStyles){if(this._needsForceUpdate){this._needsForceUpdate=false;}else if(this._isEditingStyle||this._userOperation){return;}
const focusedIndex=this.focusedSectionIndex();this._linkifier.reset();this._sectionsContainer.removeChildren();this._sectionBlocks=[];const node=this.node();if(!matchedStyles||!node){this._noMatchesElement.classList.remove('hidden');return;}
this._sectionBlocks=await this._rebuildSectionsForMatchedStyleRules((matchedStyles));let pseudoTypes=[];const keys=matchedStyles.pseudoTypes();if(keys.delete(Protocol.DOM.PseudoType.Before)){pseudoTypes.push(Protocol.DOM.PseudoType.Before);}
pseudoTypes=pseudoTypes.concat(keys.valuesArray().sort());for(const pseudoType of pseudoTypes){const block=SectionBlock.createPseudoTypeBlock(pseudoType);for(const style of matchedStyles.pseudoStyles(pseudoType)){const section=new StylePropertiesSection(this,matchedStyles,style);block.sections.push(section);}
this._sectionBlocks.push(block);}
for(const keyframesRule of matchedStyles.keyframes()){const block=SectionBlock.createKeyframesBlock(keyframesRule.name().text);for(const keyframe of keyframesRule.keyframes()){block.sections.push(new KeyframePropertiesSection(this,matchedStyles,keyframe.style));}
this._sectionBlocks.push(block);}
let index=0;for(const block of this._sectionBlocks){const titleElement=block.titleElement();if(titleElement){this._sectionsContainer.appendChild(titleElement);}
for(const section of block.sections){this._sectionsContainer.appendChild(section.element);if(index===focusedIndex){section.element.focus();}
index++;}}
if(focusedIndex>=index){this._sectionBlocks[0].sections[0].element.focus();}
this._sectionsContainerFocusChanged();if(this._filterRegex){this._updateFilter();}else{this._noMatchesElement.classList.toggle('hidden',this._sectionBlocks.length>0);}
this._nodeStylesUpdatedForTest((node),true);if(this._decorator){this._decorator.perform();this._decorator=null;}}
_nodeStylesUpdatedForTest(node,rebuild){}
async _rebuildSectionsForMatchedStyleRules(matchedStyles){const blocks=[new SectionBlock(null)];let lastParentNode=null;for(const style of matchedStyles.nodeStyles()){const parentNode=matchedStyles.isInherited(style)?matchedStyles.nodeForStyle(style):null;if(parentNode&&parentNode!==lastParentNode){lastParentNode=parentNode;const block=await SectionBlock._createInheritedNodeBlock(lastParentNode);blocks.push(block);}
const section=new StylePropertiesSection(this,matchedStyles,style);blocks.peekLast().sections.push(section);}
return blocks;}
async _createNewRuleInViaInspectorStyleSheet(){const cssModel=this.cssModel();const node=this.node();if(!cssModel||!node){return;}
this.setUserOperation(true);const styleSheetHeader=await cssModel.requestViaInspectorStylesheet((node));this.setUserOperation(false);await this._createNewRuleInStyleSheet(styleSheetHeader);}
async _createNewRuleInStyleSheet(styleSheetHeader){if(!styleSheetHeader){return;}
const text=(await styleSheetHeader.requestContent()).content||'';const lines=text.split('\n');const range=TextUtils.TextRange.createFromLocation(lines.length-1,lines[lines.length-1].length);this._addBlankSection(this._sectionBlocks[0].sections[0],styleSheetHeader.id,range);}
_addBlankSection(insertAfterSection,styleSheetId,ruleLocation){const node=this.node();const blankSection=new BlankStylePropertiesSection(this,insertAfterSection._matchedStyles,node?node.simpleSelector():'',styleSheetId,ruleLocation,insertAfterSection._style);this._sectionsContainer.insertBefore(blankSection.element,insertAfterSection.element.nextSibling);for(const block of this._sectionBlocks){const index=block.sections.indexOf(insertAfterSection);if(index===-1){continue;}
block.sections.splice(index+1,0,blankSection);blankSection.startEditingSelector();}}
removeSection(section){for(const block of this._sectionBlocks){const index=block.sections.indexOf(section);if(index===-1){continue;}
block.sections.splice(index,1);section.element.remove();}}
filterRegex(){return this._filterRegex;}
_updateFilter(){let hasAnyVisibleBlock=false;for(const block of this._sectionBlocks){hasAnyVisibleBlock|=block.updateFilter();}
this._noMatchesElement.classList.toggle('hidden',!!hasAnyVisibleBlock);}
willHide(){this._swatchPopoverHelper.hide();super.willHide();}
allSections(){let sections=[];for(const block of this._sectionBlocks){sections=sections.concat(block.sections);}
return sections;}
_clipboardCopy(event){Host.userMetrics.actionTaken(Host.UserMetrics.Action.StyleRuleCopied);}
_createStylesSidebarToolbar(){const container=this.contentElement.createChild('div','styles-sidebar-pane-toolbar-container');const hbox=container.createChild('div','hbox styles-sidebar-pane-toolbar');const filterContainerElement=hbox.createChild('div','styles-sidebar-pane-filter-box');const filterInput=StylesSidebarPane.createPropertyFilterElement(ls`Filter`,hbox,this._onFilterChanged.bind(this));UI.ARIAUtils.setAccessibleName(filterInput,Common.UIString('Filter Styles'));filterContainerElement.appendChild(filterInput);const toolbar=new UI.Toolbar('styles-pane-toolbar',hbox);toolbar.makeToggledGray();toolbar.appendItemsAtLocation('styles-sidebarpane-toolbar');const toolbarPaneContainer=container.createChild('div','styles-sidebar-toolbar-pane-container');const toolbarPaneContent=toolbarPaneContainer.createChild('div','styles-sidebar-toolbar-pane');return toolbarPaneContent;}
showToolbarPane(widget,toggle){if(this._pendingWidgetToggle){this._pendingWidgetToggle.setToggled(false);}
this._pendingWidgetToggle=toggle;if(this._animatedToolbarPane){this._pendingWidget=widget;}else{this._startToolbarPaneAnimation(widget);}
if(widget&&toggle){toggle.setToggled(true);}}
_startToolbarPaneAnimation(widget){if(widget===this._currentToolbarPane){return;}
if(widget&&this._currentToolbarPane){this._currentToolbarPane.detach();widget.show(this._toolbarPaneElement);this._currentToolbarPane=widget;this._currentToolbarPane.focus();return;}
this._animatedToolbarPane=widget;if(this._currentToolbarPane){this._toolbarPaneElement.style.animationName='styles-element-state-pane-slideout';}else if(widget){this._toolbarPaneElement.style.animationName='styles-element-state-pane-slidein';}
if(widget){widget.show(this._toolbarPaneElement);}
const listener=onAnimationEnd.bind(this);this._toolbarPaneElement.addEventListener('animationend',listener,false);function onAnimationEnd(){this._toolbarPaneElement.style.removeProperty('animation-name');this._toolbarPaneElement.removeEventListener('animationend',listener,false);if(this._currentToolbarPane){this._currentToolbarPane.detach();}
this._currentToolbarPane=this._animatedToolbarPane;if(this._currentToolbarPane){this._currentToolbarPane.focus();}
this._animatedToolbarPane=null;if(this._pendingWidget){this._startToolbarPaneAnimation(this._pendingWidget);this._pendingWidget=null;}}}}
export const _maxLinkLength=23;export class SectionBlock{constructor(titleElement){this._titleElement=titleElement;this.sections=[];}
static createPseudoTypeBlock(pseudoType){const separatorElement=createElement('div');separatorElement.className='sidebar-separator';separatorElement.textContent=Common.UIString('Pseudo ::%s element',pseudoType);return new SectionBlock(separatorElement);}
static createKeyframesBlock(keyframesName){const separatorElement=createElement('div');separatorElement.className='sidebar-separator';separatorElement.textContent=`@keyframes ${keyframesName}`;return new SectionBlock(separatorElement);}
static async _createInheritedNodeBlock(node){const separatorElement=createElement('div');separatorElement.className='sidebar-separator';separatorElement.createTextChild(ls`Inherited from${' '}`);const link=await Common.Linkifier.linkify(node,{preventKeyboardFocus:true});separatorElement.appendChild(link);return new SectionBlock(separatorElement);}
updateFilter(){let hasAnyVisibleSection=false;for(const section of this.sections){hasAnyVisibleSection|=section._updateFilter();}
if(this._titleElement){this._titleElement.classList.toggle('hidden',!hasAnyVisibleSection);}
return!!hasAnyVisibleSection;}
titleElement(){return this._titleElement;}}
export class StylePropertiesSection{constructor(parentPane,matchedStyles,style){this._parentPane=parentPane;this._style=style;this._matchedStyles=matchedStyles;this.editable=!!(style.styleSheetId&&style.range);this._hoverTimer=null;this._willCauseCancelEditing=false;this._forceShowAll=false;this._originalPropertiesCount=style.leadingProperties().length;const rule=style.parentRule;this.element=createElementWithClass('div','styles-section matched-styles monospace');this.element.tabIndex=-1;UI.ARIAUtils.markAsTreeitem(this.element);this.element.addEventListener('keydown',this._onKeyDown.bind(this),false);this.element._section=this;this._innerElement=this.element.createChild('div');this._titleElement=this._innerElement.createChild('div','styles-section-title '+(rule?'styles-selector':''));this.propertiesTreeOutline=new UI.TreeOutlineInShadow();this.propertiesTreeOutline.setFocusable(false);this.propertiesTreeOutline.registerRequiredCSS('elements/stylesSectionTree.css');this.propertiesTreeOutline.element.classList.add('style-properties','matched-styles','monospace');this.propertiesTreeOutline.section=this;this._innerElement.appendChild(this.propertiesTreeOutline.element);this._showAllButton=UI.createTextButton('',this._showAllItems.bind(this),'styles-show-all');this._innerElement.appendChild(this._showAllButton);const selectorContainer=createElement('div');this._selectorElement=createElementWithClass('span','selector');this._selectorElement.textContent=this._headerText();selectorContainer.appendChild(this._selectorElement);this._selectorElement.addEventListener('mouseenter',this._onMouseEnterSelector.bind(this),false);this._selectorElement.addEventListener('mousemove',event=>event.consume(),false);this._selectorElement.addEventListener('mouseleave',this._onMouseOutSelector.bind(this),false);const openBrace=selectorContainer.createChild('span','sidebar-pane-open-brace');openBrace.textContent=' {';selectorContainer.addEventListener('mousedown',this._handleEmptySpaceMouseDown.bind(this),false);selectorContainer.addEventListener('click',this._handleSelectorContainerClick.bind(this),false);const closeBrace=this._innerElement.createChild('div','sidebar-pane-closing-brace');closeBrace.textContent='}';this._createHoverMenuToolbar(closeBrace);this._selectorElement.addEventListener('click',this._handleSelectorClick.bind(this),false);this.element.addEventListener('mousedown',this._handleEmptySpaceMouseDown.bind(this),false);this.element.addEventListener('click',this._handleEmptySpaceClick.bind(this),false);this.element.addEventListener('mousemove',this._onMouseMove.bind(this),false);this.element.addEventListener('mouseleave',this._onMouseLeave.bind(this),false);this._selectedSinceMouseDown=false;if(rule){if(rule.isUserAgent()||rule.isInjected()){this.editable=false;}else{if(rule.styleSheetId){const header=rule.cssModel().styleSheetHeaderForId(rule.styleSheetId);this.navigable=!header.isAnonymousInlineStyleSheet();}}}
this._mediaListElement=this._titleElement.createChild('div','media-list media-matches');this._selectorRefElement=this._titleElement.createChild('div','styles-section-subtitle');this._updateMediaList();this._updateRuleOrigin();this._titleElement.appendChild(selectorContainer);this._selectorContainer=selectorContainer;if(this.navigable){this.element.classList.add('navigable');}
if(!this.editable){this.element.classList.add('read-only');this.propertiesTreeOutline.element.classList.add('read-only');}
this._hoverableSelectorsMode=false;this._markSelectorMatches();this.onpopulate();}
static createRuleOriginNode(matchedStyles,linkifier,rule){if(!rule){return createTextNode('');}
const ruleLocation=this._getRuleLocationFromCSSRule(rule);const header=rule.styleSheetId?matchedStyles.cssModel().styleSheetHeaderForId(rule.styleSheetId):null;if(ruleLocation&&rule.styleSheetId&&header&&!header.isAnonymousInlineStyleSheet()){return StylePropertiesSection._linkifyRuleLocation(matchedStyles.cssModel(),linkifier,rule.styleSheetId,ruleLocation);}
if(rule.isUserAgent()){return createTextNode(Common.UIString('user agent stylesheet'));}
if(rule.isInjected()){return createTextNode(Common.UIString('injected stylesheet'));}
if(rule.isViaInspector()){return createTextNode(Common.UIString('via inspector'));}
if(header&&header.ownerNode){const link=Elements.DOMLinkifier.linkifyDeferredNodeReference(header.ownerNode,{preventKeyboardFocus:true});link.textContent='<style>';return link;}
return createTextNode('');}
static _getRuleLocationFromCSSRule(rule){let ruleLocation=null;if(rule instanceof SDK.CSSStyleRule){ruleLocation=rule.style.range;}else if(rule instanceof SDK.CSSKeyframeRule){ruleLocation=rule.key().range;}
return ruleLocation;}
static tryNavigateToRuleLocation(matchedStyles,rule){if(!rule){return;}
const ruleLocation=this._getRuleLocationFromCSSRule(rule);const header=rule.styleSheetId?matchedStyles.cssModel().styleSheetHeaderForId(rule.styleSheetId):null;if(ruleLocation&&rule.styleSheetId&&header&&!header.isAnonymousInlineStyleSheet()){const matchingSelectorLocation=this._getCSSSelectorLocation(matchedStyles.cssModel(),rule.styleSheetId,ruleLocation);this._revealSelectorSource(matchingSelectorLocation,true);}}
static _linkifyRuleLocation(cssModel,linkifier,styleSheetId,ruleLocation){const matchingSelectorLocation=this._getCSSSelectorLocation(cssModel,styleSheetId,ruleLocation);return linkifier.linkifyCSSLocation(matchingSelectorLocation);}
static _getCSSSelectorLocation(cssModel,styleSheetId,ruleLocation){const styleSheetHeader=cssModel.styleSheetHeaderForId(styleSheetId);const lineNumber=styleSheetHeader.lineNumberInSource(ruleLocation.startLine);const columnNumber=styleSheetHeader.columnNumberInSource(ruleLocation.startLine,ruleLocation.startColumn);return new SDK.CSSLocation(styleSheetHeader,lineNumber,columnNumber);}
_onKeyDown(event){if(UI.isEditing()||!this.editable||event.altKey||event.ctrlKey||event.metaKey){return;}
switch(event.key){case'Enter':case' ':this._startEditingAtFirstPosition();event.consume(true);break;default:if(event.key.length===1){this.addNewBlankProperty(0).startEditing();}
break;}}
_setSectionHovered(isHovered){this.element.classList.toggle('styles-panel-hovered',isHovered);this.propertiesTreeOutline.element.classList.toggle('styles-panel-hovered',isHovered);if(this._hoverableSelectorsMode!==isHovered){this._hoverableSelectorsMode=isHovered;this._markSelectorMatches();}}
_onMouseLeave(event){this._setSectionHovered(false);this._parentPane._setActiveProperty(null);}
_onMouseMove(event){const hasCtrlOrMeta=UI.KeyboardShortcut.eventHasCtrlOrMeta((event));this._setSectionHovered(hasCtrlOrMeta);const treeElement=this.propertiesTreeOutline.treeElementFromEvent(event);if(treeElement instanceof Elements.StylePropertyTreeElement){this._parentPane._setActiveProperty((treeElement));}else{this._parentPane._setActiveProperty(null);}
if(!this._selectedSinceMouseDown&&this.element.getComponentSelection().toString()){this._selectedSinceMouseDown=true;}}
_createHoverMenuToolbar(container){if(!this.editable){return;}
const items=[];const textShadowButton=new UI.ToolbarButton(Common.UIString('Add text-shadow'),'largeicon-text-shadow');textShadowButton.addEventListener(UI.ToolbarButton.Events.Click,this._onInsertShadowPropertyClick.bind(this,'text-shadow'));textShadowButton.element.tabIndex=-1;items.push(textShadowButton);const boxShadowButton=new UI.ToolbarButton(Common.UIString('Add box-shadow'),'largeicon-box-shadow');boxShadowButton.addEventListener(UI.ToolbarButton.Events.Click,this._onInsertShadowPropertyClick.bind(this,'box-shadow'));boxShadowButton.element.tabIndex=-1;items.push(boxShadowButton);const colorButton=new UI.ToolbarButton(Common.UIString('Add color'),'largeicon-foreground-color');colorButton.addEventListener(UI.ToolbarButton.Events.Click,this._onInsertColorPropertyClick,this);colorButton.element.tabIndex=-1;items.push(colorButton);const backgroundButton=new UI.ToolbarButton(Common.UIString('Add background-color'),'largeicon-background-color');backgroundButton.addEventListener(UI.ToolbarButton.Events.Click,this._onInsertBackgroundColorPropertyClick,this);backgroundButton.element.tabIndex=-1;items.push(backgroundButton);let newRuleButton=null;if(this._style.parentRule){newRuleButton=new UI.ToolbarButton(Common.UIString('Insert Style Rule Below'),'largeicon-add');newRuleButton.addEventListener(UI.ToolbarButton.Events.Click,this._onNewRuleClick,this);newRuleButton.element.tabIndex=-1;items.push(newRuleButton);}
const sectionToolbar=new UI.Toolbar('sidebar-pane-section-toolbar',container);for(let i=0;i<items.length;++i){sectionToolbar.appendToolbarItem(items[i]);}
const menuButton=new UI.ToolbarButton('','largeicon-menu');menuButton.element.tabIndex=-1;sectionToolbar.appendToolbarItem(menuButton);setItemsVisibility(items,false);sectionToolbar.element.addEventListener('mouseenter',setItemsVisibility.bind(null,items,true));sectionToolbar.element.addEventListener('mouseleave',setItemsVisibility.bind(null,items,false));UI.ARIAUtils.markAsHidden(sectionToolbar.element);function setItemsVisibility(items,value){for(let i=0;i<items.length;++i){items[i].setVisible(value);}
menuButton.setVisible(!value);}}
style(){return this._style;}
_headerText(){const node=this._matchedStyles.nodeForStyle(this._style);if(this._style.type===SDK.CSSStyleDeclaration.Type.Inline){return this._matchedStyles.isInherited(this._style)?Common.UIString('Style Attribute'):'element.style';}
if(this._style.type===SDK.CSSStyleDeclaration.Type.Attributes){return ls`${node.nodeNameInCorrectCase()}[Attributes Style]`;}
return this._style.parentRule.selectorText();}
_onMouseOutSelector(){if(this._hoverTimer){clearTimeout(this._hoverTimer);}
SDK.OverlayModel.hideDOMNodeHighlight();}
_onMouseEnterSelector(){if(this._hoverTimer){clearTimeout(this._hoverTimer);}
this._hoverTimer=setTimeout(this._highlight.bind(this),300);}
_highlight(mode='all'){SDK.OverlayModel.hideDOMNodeHighlight();const node=this._parentPane.node();if(!node){return;}
const selectorList=this._style.parentRule?this._style.parentRule.selectorText():undefined;node.domModel().overlayModel().highlightInOverlay({node,selectorList},mode);}
firstSibling(){const parent=this.element.parentElement;if(!parent){return null;}
let childElement=parent.firstChild;while(childElement){if(childElement._section){return childElement._section;}
childElement=childElement.nextSibling;}
return null;}
lastSibling(){const parent=this.element.parentElement;if(!parent){return null;}
let childElement=parent.lastChild;while(childElement){if(childElement._section){return childElement._section;}
childElement=childElement.previousSibling;}
return null;}
nextSibling(){let curElement=this.element;do{curElement=curElement.nextSibling;}while(curElement&&!curElement._section);return curElement?curElement._section:null;}
previousSibling(){let curElement=this.element;do{curElement=curElement.previousSibling;}while(curElement&&!curElement._section);return curElement?curElement._section:null;}
_onNewRuleClick(event){event.data.consume();const rule=this._style.parentRule;const range=TextUtils.TextRange.createFromLocation(rule.style.range.endLine,rule.style.range.endColumn+1);this._parentPane._addBlankSection(this,(rule.styleSheetId),range);}
_onInsertShadowPropertyClick(propertyName,event){event.data.consume(true);const treeElement=this.addNewBlankProperty();treeElement.property.name=propertyName;treeElement.property.value='0 0 black';treeElement.updateTitle();const shadowSwatchPopoverHelper=Elements.ShadowSwatchPopoverHelper.forTreeElement(treeElement);if(shadowSwatchPopoverHelper){shadowSwatchPopoverHelper.showPopover();}}
_onInsertColorPropertyClick(event){event.data.consume(true);const treeElement=this.addNewBlankProperty();treeElement.property.name='color';treeElement.property.value='black';treeElement.updateTitle();const colorSwatch=Elements.ColorSwatchPopoverIcon.forTreeElement(treeElement);if(colorSwatch){colorSwatch.showPopover();}}
_onInsertBackgroundColorPropertyClick(event){event.data.consume(true);const treeElement=this.addNewBlankProperty();treeElement.property.name='background-color';treeElement.property.value='white';treeElement.updateTitle();const colorSwatch=Elements.ColorSwatchPopoverIcon.forTreeElement(treeElement);if(colorSwatch){colorSwatch.showPopover();}}
_styleSheetEdited(edit){const rule=this._style.parentRule;if(rule){rule.rebase(edit);}else{this._style.rebase(edit);}
this._updateMediaList();this._updateRuleOrigin();}
_createMediaList(mediaRules){for(let i=mediaRules.length-1;i>=0;--i){const media=mediaRules[i];if(!media.text.includes('(')&&media.text!=='print'){continue;}
const mediaDataElement=this._mediaListElement.createChild('div','media');const mediaContainerElement=mediaDataElement.createChild('span');const mediaTextElement=mediaContainerElement.createChild('span','media-text');switch(media.source){case SDK.CSSMedia.Source.LINKED_SHEET:case SDK.CSSMedia.Source.INLINE_SHEET:mediaTextElement.textContent='media="'+media.text+'"';break;case SDK.CSSMedia.Source.MEDIA_RULE:const decoration=mediaContainerElement.createChild('span');mediaContainerElement.insertBefore(decoration,mediaTextElement);decoration.textContent='@media ';mediaTextElement.textContent=media.text;if(media.styleSheetId){mediaDataElement.classList.add('editable-media');mediaTextElement.addEventListener('click',this._handleMediaRuleClick.bind(this,media,mediaTextElement),false);}
break;case SDK.CSSMedia.Source.IMPORT_RULE:mediaTextElement.textContent='@import '+media.text;break;}}}
_updateMediaList(){this._mediaListElement.removeChildren();if(this._style.parentRule&&this._style.parentRule instanceof SDK.CSSStyleRule){this._createMediaList(this._style.parentRule.media);}}
isPropertyInherited(propertyName){if(this._matchedStyles.isInherited(this._style)){return!SDK.cssMetadata().isPropertyInherited(propertyName);}
return false;}
nextEditableSibling(){let curSection=this;do{curSection=curSection.nextSibling();}while(curSection&&!curSection.editable);if(!curSection){curSection=this.firstSibling();while(curSection&&!curSection.editable){curSection=curSection.nextSibling();}}
return(curSection&&curSection.editable)?curSection:null;}
previousEditableSibling(){let curSection=this;do{curSection=curSection.previousSibling();}while(curSection&&!curSection.editable);if(!curSection){curSection=this.lastSibling();while(curSection&&!curSection.editable){curSection=curSection.previousSibling();}}
return(curSection&&curSection.editable)?curSection:null;}
refreshUpdate(editedTreeElement){this._parentPane._refreshUpdate(this,editedTreeElement);}
_updateVarFunctions(editedTreeElement){let child=this.propertiesTreeOutline.firstChild();while(child){if(child!==editedTreeElement){child.updateTitleIfComputedValueChanged();}
child=child.traverseNextTreeElement(false,null,true);}}
update(full){this._selectorElement.textContent=this._headerText();this._markSelectorMatches();if(full){this.onpopulate();}else{let child=this.propertiesTreeOutline.firstChild();while(child){child.setOverloaded(this._isPropertyOverloaded(child.property));child=child.traverseNextTreeElement(false,null,true);}}}
_showAllItems(event){if(event){event.consume();}
if(this._forceShowAll){return;}
this._forceShowAll=true;this.onpopulate();}
onpopulate(){this._parentPane._setActiveProperty(null);this.propertiesTreeOutline.removeChildren();const style=this._style;let count=0;const properties=style.leadingProperties();const maxProperties=StylePropertiesSection.MaxProperties+properties.length-this._originalPropertiesCount;for(const property of properties){if(!this._forceShowAll&&count>=maxProperties){break;}
count++;const isShorthand=!!style.longhandProperties(property.name).length;const inherited=this.isPropertyInherited(property.name);const overloaded=this._isPropertyOverloaded(property);if(style.parentRule&&style.parentRule.isUserAgent()&&inherited){continue;}
const item=new Elements.StylePropertyTreeElement(this._parentPane,this._matchedStyles,property,isShorthand,inherited,overloaded,false);this.propertiesTreeOutline.appendChild(item);}
if(count<properties.length){this._showAllButton.classList.remove('hidden');this._showAllButton.textContent=ls`Show All Properties (${properties.length - count} more)`;}else{this._showAllButton.classList.add('hidden');}}
_isPropertyOverloaded(property){return this._matchedStyles.propertyState(property)===SDK.CSSMatchedStyles.PropertyState.Overloaded;}
_updateFilter(){let hasMatchingChild=false;this._showAllItems();for(const child of this.propertiesTreeOutline.rootElement().children()){hasMatchingChild|=child._updateFilter();}
const regex=this._parentPane.filterRegex();const hideRule=!hasMatchingChild&&!!regex&&!regex.test(this.element.deepTextContent());this.element.classList.toggle('hidden',hideRule);if(!hideRule&&this._style.parentRule){this._markSelectorHighlights();}
return!hideRule;}
_markSelectorMatches(){const rule=this._style.parentRule;if(!rule){return;}
this._mediaListElement.classList.toggle('media-matches',this._matchedStyles.mediaMatches(this._style));const selectorTexts=rule.selectors.map(selector=>selector.text);const matchingSelectorIndexes=this._matchedStyles.matchingSelectors((rule));const matchingSelectors=(new Array(selectorTexts.length).fill(false));for(const matchingIndex of matchingSelectorIndexes){matchingSelectors[matchingIndex]=true;}
if(this._parentPane._isEditingStyle){return;}
const fragment=this._hoverableSelectorsMode?this._renderHoverableSelectors(selectorTexts,matchingSelectors):this._renderSimplifiedSelectors(selectorTexts,matchingSelectors);this._selectorElement.removeChildren();this._selectorElement.appendChild(fragment);this._markSelectorHighlights();}
_renderHoverableSelectors(selectors,matchingSelectors){const fragment=createDocumentFragment();for(let i=0;i<selectors.length;++i){if(i){fragment.createTextChild(', ');}
fragment.appendChild(this._createSelectorElement(selectors[i],matchingSelectors[i],i));}
return fragment;}
_createSelectorElement(text,isMatching,navigationIndex){const element=createElementWithClass('span','simple-selector');element.classList.toggle('selector-matches',isMatching);if(typeof navigationIndex==='number'){element._selectorIndex=navigationIndex;}
element.textContent=text;return element;}
_renderSimplifiedSelectors(selectors,matchingSelectors){const fragment=createDocumentFragment();let currentMatching=false;let text='';for(let i=0;i<selectors.length;++i){if(currentMatching!==matchingSelectors[i]&&text){fragment.appendChild(this._createSelectorElement(text,currentMatching));text='';}
currentMatching=matchingSelectors[i];text+=selectors[i]+(i===selectors.length-1?'':', ');}
if(text){fragment.appendChild(this._createSelectorElement(text,currentMatching));}
return fragment;}
_markSelectorHighlights(){const selectors=this._selectorElement.getElementsByClassName('simple-selector');const regex=this._parentPane.filterRegex();for(let i=0;i<selectors.length;++i){const selectorMatchesFilter=!!regex&&regex.test(selectors[i].textContent);selectors[i].classList.toggle('filter-match',selectorMatchesFilter);}}
_checkWillCancelEditing(){const willCauseCancelEditing=this._willCauseCancelEditing;this._willCauseCancelEditing=false;return willCauseCancelEditing;}
_handleSelectorContainerClick(event){if(this._checkWillCancelEditing()||!this.editable){return;}
if(event.target===this._selectorContainer){this.addNewBlankProperty(0).startEditing();event.consume(true);}}
addNewBlankProperty(index=this.propertiesTreeOutline.rootElement().childCount()){const property=this._style.newBlankProperty(index);const item=new Elements.StylePropertyTreeElement(this._parentPane,this._matchedStyles,property,false,false,false,true);this.propertiesTreeOutline.insertChild(item,property.index);return item;}
_handleEmptySpaceMouseDown(){this._willCauseCancelEditing=this._parentPane._isEditingStyle;this._selectedSinceMouseDown=false;}
_handleEmptySpaceClick(event){if(!this.editable||this.element.hasSelection()||this._checkWillCancelEditing()||this._selectedSinceMouseDown){return;}
if(event.target.classList.contains('header')||this.element.classList.contains('read-only')||event.target.enclosingNodeOrSelfWithClass('media')){event.consume();return;}
const deepTarget=event.deepElementFromPoint();if(deepTarget.treeElement){this.addNewBlankProperty(deepTarget.treeElement.property.index+1).startEditing();}else{this.addNewBlankProperty().startEditing();}
event.consume(true);}
_handleMediaRuleClick(media,element,event){if(UI.isBeingEdited(element)){return;}
if(UI.KeyboardShortcut.eventHasCtrlOrMeta((event))&&this.navigable){const location=media.rawLocation();if(!location){event.consume(true);return;}
const uiLocation=Bindings.cssWorkspaceBinding.rawLocationToUILocation(location);if(uiLocation){Common.Revealer.reveal(uiLocation);}
event.consume(true);return;}
if(!this.editable){return;}
const config=new UI.InplaceEditor.Config(this._editingMediaCommitted.bind(this,media),this._editingMediaCancelled.bind(this,element),undefined,this._editingMediaBlurHandler.bind(this));UI.InplaceEditor.startEditing(element,config);element.getComponentSelection().selectAllChildren(element);this._parentPane.setEditingStyle(true);const parentMediaElement=element.enclosingNodeOrSelfWithClass('media');parentMediaElement.classList.add('editing-media');event.consume(true);}
_editingMediaFinished(element){this._parentPane.setEditingStyle(false);const parentMediaElement=element.enclosingNodeOrSelfWithClass('media');parentMediaElement.classList.remove('editing-media');}
_editingMediaCancelled(element){this._editingMediaFinished(element);this._markSelectorMatches();element.getComponentSelection().collapse(element,0);}
_editingMediaBlurHandler(editor,blurEvent){return true;}
_editingMediaCommitted(media,element,newContent,oldContent,context,moveDirection){this._parentPane.setEditingStyle(false);this._editingMediaFinished(element);if(newContent){newContent=newContent.trim();}
function userCallback(success){if(success){this._matchedStyles.resetActiveProperties();this._parentPane._refreshUpdate(this);}
this._parentPane.setUserOperation(false);this._editingMediaTextCommittedForTest();}
this._parentPane.setUserOperation(true);this._parentPane.cssModel().setMediaText(media.styleSheetId,media.range,newContent).then(userCallback.bind(this));}
_editingMediaTextCommittedForTest(){}
_handleSelectorClick(event){if(UI.KeyboardShortcut.eventHasCtrlOrMeta((event))&&this.navigable&&event.target.classList.contains('simple-selector')){this._navigateToSelectorSource(event.target._selectorIndex,true);event.consume(true);return;}
if(this.element.hasSelection()){return;}
this._startEditingAtFirstPosition();event.consume(true);}
_navigateToSelectorSource(index,focus){const cssModel=this._parentPane.cssModel();const rule=this._style.parentRule;const header=cssModel.styleSheetHeaderForId((rule.styleSheetId));if(!header){return;}
const rawLocation=new SDK.CSSLocation(header,rule.lineNumberInSource(index),rule.columnNumberInSource(index));StylePropertiesSection._revealSelectorSource(rawLocation,focus);}
static _revealSelectorSource(rawLocation,focus){const uiLocation=Bindings.cssWorkspaceBinding.rawLocationToUILocation(rawLocation);if(uiLocation){Common.Revealer.reveal(uiLocation,!focus);}}
_startEditingAtFirstPosition(){if(!this.editable){return;}
if(!this._style.parentRule){this.moveEditorFromSelector('forward');return;}
this.startEditingSelector();}
startEditingSelector(){const element=this._selectorElement;if(UI.isBeingEdited(element)){return;}
element.scrollIntoViewIfNeeded(false);element.textContent=element.textContent.replace(/\s+/g,' ').trim();const config=new UI.InplaceEditor.Config(this.editingSelectorCommitted.bind(this),this.editingSelectorCancelled.bind(this));UI.InplaceEditor.startEditing(this._selectorElement,config);element.getComponentSelection().selectAllChildren(element);this._parentPane.setEditingStyle(true);if(element.classList.contains('simple-selector')){this._navigateToSelectorSource(0,false);}}
moveEditorFromSelector(moveDirection){this._markSelectorMatches();if(!moveDirection){return;}
if(moveDirection==='forward'){let firstChild=this.propertiesTreeOutline.firstChild();while(firstChild&&firstChild.inherited()){firstChild=firstChild.nextSibling;}
if(!firstChild){this.addNewBlankProperty().startEditing();}else{firstChild.startEditing(firstChild.nameElement);}}else{const previousSection=this.previousEditableSibling();if(!previousSection){return;}
previousSection.addNewBlankProperty().startEditing();}}
editingSelectorCommitted(element,newContent,oldContent,context,moveDirection){this._editingSelectorEnded();if(newContent){newContent=newContent.trim();}
if(newContent===oldContent){this._selectorElement.textContent=newContent;this.moveEditorFromSelector(moveDirection);return;}
const rule=this._style.parentRule;if(!rule){return;}
function headerTextCommitted(){this._parentPane.setUserOperation(false);this.moveEditorFromSelector(moveDirection);this._editingSelectorCommittedForTest();}
this._parentPane.setUserOperation(true);this._setHeaderText(rule,newContent).then(headerTextCommitted.bind(this));}
_setHeaderText(rule,newContent){function onSelectorsUpdated(rule,success){if(!success){return Promise.resolve();}
return this._matchedStyles.recomputeMatchingSelectors(rule).then(updateSourceRanges.bind(this,rule));}
function updateSourceRanges(rule){const doesAffectSelectedNode=this._matchedStyles.matchingSelectors(rule).length>0;this.propertiesTreeOutline.element.classList.toggle('no-affect',!doesAffectSelectedNode);this._matchedStyles.resetActiveProperties();this._parentPane._refreshUpdate(this);}
console.assert(rule instanceof SDK.CSSStyleRule);const oldSelectorRange=rule.selectorRange();if(!oldSelectorRange){return Promise.resolve();}
return rule.setSelectorText(newContent).then(onSelectorsUpdated.bind(this,(rule),oldSelectorRange));}
_editingSelectorCommittedForTest(){}
_updateRuleOrigin(){this._selectorRefElement.removeChildren();this._selectorRefElement.appendChild(StylePropertiesSection.createRuleOriginNode(this._matchedStyles,this._parentPane._linkifier,this._style.parentRule));}
_editingSelectorEnded(){this._parentPane.setEditingStyle(false);}
editingSelectorCancelled(){this._editingSelectorEnded();this._markSelectorMatches();}}
StylePropertiesSection.MaxProperties=50;export class BlankStylePropertiesSection extends StylePropertiesSection{constructor(stylesPane,matchedStyles,defaultSelectorText,styleSheetId,ruleLocation,insertAfterStyle){const cssModel=(stylesPane.cssModel());const rule=SDK.CSSStyleRule.createDummyRule(cssModel,defaultSelectorText);super(stylesPane,matchedStyles,rule.style);this._normal=false;this._ruleLocation=ruleLocation;this._styleSheetId=styleSheetId;this._selectorRefElement.removeChildren();this._selectorRefElement.appendChild(StylePropertiesSection._linkifyRuleLocation(cssModel,this._parentPane._linkifier,styleSheetId,this._actualRuleLocation()));if(insertAfterStyle&&insertAfterStyle.parentRule){this._createMediaList(insertAfterStyle.parentRule.media);}
this.element.classList.add('blank-section');}
_actualRuleLocation(){const prefix=this._rulePrefix();const lines=prefix.split('\n');const editRange=new TextUtils.TextRange(0,0,lines.length-1,lines.peekLast().length);return this._ruleLocation.rebaseAfterTextEdit(TextUtils.TextRange.createFromLocation(0,0),editRange);}
_rulePrefix(){return this._ruleLocation.startLine===0&&this._ruleLocation.startColumn===0?'':'\n\n';}
get isBlank(){return!this._normal;}
editingSelectorCommitted(element,newContent,oldContent,context,moveDirection){if(!this.isBlank){super.editingSelectorCommitted(element,newContent,oldContent,context,moveDirection);return;}
function onRuleAdded(newRule){if(!newRule){this.editingSelectorCancelled();this._editingSelectorCommittedForTest();return Promise.resolve();}
return this._matchedStyles.addNewRule(newRule,this._matchedStyles.node()).then(onAddedToCascade.bind(this,newRule));}
function onAddedToCascade(newRule){const doesSelectorAffectSelectedNode=this._matchedStyles.matchingSelectors(newRule).length>0;this._makeNormal(newRule);if(!doesSelectorAffectSelectedNode){this.propertiesTreeOutline.element.classList.add('no-affect');}
this._updateRuleOrigin();this._parentPane.setUserOperation(false);this._editingSelectorEnded();if(this.element.parentElement)
{this.moveEditorFromSelector(moveDirection);}
this._markSelectorMatches();this._editingSelectorCommittedForTest();}
if(newContent){newContent=newContent.trim();}
this._parentPane.setUserOperation(true);const cssModel=this._parentPane.cssModel();const ruleText=this._rulePrefix()+newContent+' {}';cssModel.addRule(this._styleSheetId,ruleText,this._ruleLocation).then(onRuleAdded.bind(this));}
editingSelectorCancelled(){this._parentPane.setUserOperation(false);if(!this.isBlank){super.editingSelectorCancelled();return;}
this._editingSelectorEnded();this._parentPane.removeSection(this);}
_makeNormal(newRule){this.element.classList.remove('blank-section');this._style=newRule.style;this._normal=true;}}
export class KeyframePropertiesSection extends StylePropertiesSection{constructor(stylesPane,matchedStyles,style){super(stylesPane,matchedStyles,style);this._selectorElement.className='keyframe-key';}
_headerText(){return this._style.parentRule.key().text;}
_setHeaderText(rule,newContent){function updateSourceRanges(success){if(!success){return;}
this._parentPane._refreshUpdate(this);}
console.assert(rule instanceof SDK.CSSKeyframeRule);const oldRange=rule.key().range;if(!oldRange){return Promise.resolve();}
return rule.setKeyText(newContent).then(updateSourceRanges.bind(this));}
isPropertyInherited(propertyName){return false;}
_isPropertyOverloaded(property){return false;}
_markSelectorHighlights(){}
_markSelectorMatches(){this._selectorElement.textContent=this._style.parentRule.key().text;}
_highlight(){}}
export class CSSPropertyPrompt extends UI.TextPrompt{constructor(treeElement,isEditingName){super();this.initialize(this._buildPropertyCompletions.bind(this),UI.StyleValueDelimiters);this._isColorAware=SDK.cssMetadata().isColorAwareProperty(treeElement.property.name);this._cssCompletions=[];if(isEditingName){this._cssCompletions=SDK.cssMetadata().allProperties();if(!treeElement.node().isSVGNode()){this._cssCompletions=this._cssCompletions.filter(property=>!SDK.cssMetadata().isSVGProperty(property));}}else{this._cssCompletions=SDK.cssMetadata().propertyValues(treeElement.nameElement.textContent);}
this._treeElement=treeElement;this._isEditingName=isEditingName;this._cssVariables=treeElement.matchedStyles().availableCSSVariables(treeElement.property.ownerStyle);if(this._cssVariables.length<1000){this._cssVariables.sort(String.naturalOrderComparator);}else{this._cssVariables.sort();}
if(!isEditingName){this.disableDefaultSuggestionForEmptyInput();if(treeElement&&treeElement.valueElement){const cssValueText=treeElement.valueElement.textContent;const cmdOrCtrl=Host.isMac()?'Cmd':'Ctrl';if(cssValueText.match(/#[\da-f]{3,6}$/i)){this.setTitle(ls`Increment/decrement with mousewheel or up/down keys. ${cmdOrCtrl}: R ±1, Shift: G ±1, Alt: B ±1`);}else if(cssValueText.match(/\d+/)){this.setTitle(ls`Increment/decrement with mousewheel or up/down keys. ${cmdOrCtrl}: ±100, Shift: ±10, Alt: ±0.1`);}}}}
onKeyDown(event){switch(event.key){case'ArrowUp':case'ArrowDown':case'PageUp':case'PageDown':if(!this.isSuggestBoxVisible()&&this._handleNameOrValueUpDown(event)){event.preventDefault();return;}
break;case'Enter':if(event.shiftKey){return;}
this.tabKeyPressed();event.preventDefault();return;}
super.onKeyDown(event);}
onMouseWheel(event){if(this._handleNameOrValueUpDown(event)){event.consume(true);return;}
super.onMouseWheel(event);}
tabKeyPressed(){this.acceptAutoComplete();return false;}
_handleNameOrValueUpDown(event){function finishHandler(originalValue,replacementString){this._treeElement.applyStyleText(this._treeElement.nameElement.textContent+': '+this._treeElement.valueElement.textContent,false);}
function customNumberHandler(prefix,number,suffix){if(number!==0&&!suffix.length&&SDK.cssMetadata().isLengthProperty(this._treeElement.property.name)){suffix='px';}
return prefix+number+suffix;}
if(!this._isEditingName&&this._treeElement.valueElement&&UI.handleElementValueModifications(event,this._treeElement.valueElement,finishHandler.bind(this),this._isValueSuggestion.bind(this),customNumberHandler.bind(this))){return true;}
return false;}
_isValueSuggestion(word){if(!word){return false;}
word=word.toLowerCase();return this._cssCompletions.indexOf(word)!==-1||word.startsWith('--');}
_buildPropertyCompletions(expression,query,force){const lowerQuery=query.toLowerCase();const editingVariable=!this._isEditingName&&expression.trim().endsWith('var(');if(!query&&!force&&!editingVariable&&(this._isEditingName||expression)){return Promise.resolve([]);}
const prefixResults=[];const anywhereResults=[];if(!editingVariable){this._cssCompletions.forEach(completion=>filterCompletions.call(this,completion,false));}
if(this._isEditingName){const nameValuePresets=SDK.cssMetadata().nameValuePresets(this._treeElement.node().isSVGNode());nameValuePresets.forEach(preset=>filterCompletions.call(this,preset,false,true));}
if(this._isEditingName||editingVariable){this._cssVariables.forEach(variable=>filterCompletions.call(this,variable,true));}
const results=prefixResults.concat(anywhereResults);if(!this._isEditingName&&!results.length&&query.length>1&&'!important'.startsWith(lowerQuery)){results.push({text:'!important'});}
const userEnteredText=query.replace('-','');if(userEnteredText&&(userEnteredText===userEnteredText.toUpperCase())){for(let i=0;i<results.length;++i){if(!results[i].text.startsWith('--')){results[i].text=results[i].text.toUpperCase();}}}
results.forEach(result=>{if(editingVariable){result.title=result.text;result.text+=')';return;}
const valuePreset=SDK.cssMetadata().getValuePreset(this._treeElement.name,result.text);if(!this._isEditingName&&valuePreset){result.title=result.text;result.text=valuePreset.text;result.selectionRange={startColumn:valuePreset.startColumn,endColumn:valuePreset.endColumn};}});if(this._isColorAware&&!this._isEditingName){results.sort((a,b)=>{if(!!a.subtitleRenderer===!!b.subtitleRenderer){return 0;}
return a.subtitleRenderer?-1:1;});}
return Promise.resolve(results);function filterCompletions(completion,variable,nameValue){const index=completion.toLowerCase().indexOf(lowerQuery);const result={text:completion};if(variable){const computedValue=this._treeElement.matchedStyles().computeCSSVariable(this._treeElement.property.ownerStyle,completion);if(computedValue){const color=Common.Color.parse(computedValue);if(color){result.subtitleRenderer=swatchRenderer.bind(null,color);}}}
if(nameValue){result.hideGhostText=true;}
if(index===0){result.priority=this._isEditingName?SDK.cssMetadata().propertyUsageWeight(completion):1;prefixResults.push(result);}else if(index>-1){anywhereResults.push(result);}}
function swatchRenderer(color){const swatch=InlineEditor.ColorSwatch.create();swatch.hideText(true);swatch.setColor(color);swatch.style.pointerEvents='none';return swatch;}}}
export class StylesSidebarPropertyRenderer{constructor(rule,node,name,value){this._rule=rule;this._node=node;this._propertyName=name;this._propertyValue=value;this._colorHandler=null;this._bezierHandler=null;this._shadowHandler=null;this._gridHandler=null;this._varHandler=createTextNode;}
setColorHandler(handler){this._colorHandler=handler;}
setBezierHandler(handler){this._bezierHandler=handler;}
setShadowHandler(handler){this._shadowHandler=handler;}
setGridHandler(handler){this._gridHandler=handler;}
setVarHandler(handler){this._varHandler=handler;}
renderName(){const nameElement=createElement('span');nameElement.className='webkit-css-property';nameElement.textContent=this._propertyName;nameElement.normalize();return nameElement;}
renderValue(){const valueElement=createElement('span');valueElement.className='value';if(!this._propertyValue){return valueElement;}
if(this._shadowHandler&&(this._propertyName==='box-shadow'||this._propertyName==='text-shadow'||this._propertyName==='-webkit-box-shadow')&&!SDK.CSSMetadata.VariableRegex.test(this._propertyValue)){valueElement.appendChild(this._shadowHandler(this._propertyValue,this._propertyName));valueElement.normalize();return valueElement;}
if(this._gridHandler&&SDK.cssMetadata().isGridAreaDefiningProperty(this._propertyName)){valueElement.appendChild(this._gridHandler(this._propertyValue,this._propertyName));valueElement.normalize();return valueElement;}
const regexes=[SDK.CSSMetadata.VariableRegex,SDK.CSSMetadata.URLRegex];const processors=[this._varHandler,this._processURL.bind(this)];if(this._bezierHandler&&SDK.cssMetadata().isBezierAwareProperty(this._propertyName)){regexes.push(UI.Geometry.CubicBezier.Regex);processors.push(this._bezierHandler);}
if(this._colorHandler&&SDK.cssMetadata().isColorAwareProperty(this._propertyName)){regexes.push(Common.Color.Regex);processors.push(this._colorHandler);}
const results=TextUtils.TextUtils.splitStringByRegexes(this._propertyValue,regexes);for(let i=0;i<results.length;i++){const result=results[i];const processor=result.regexIndex===-1?createTextNode:processors[result.regexIndex];valueElement.appendChild(processor(result.value));}
valueElement.normalize();return valueElement;}
_processURL(text){let url=text.substring(4,text.length-1).trim();const isQuoted=/^'.*'$/.test(url)||/^".*"$/.test(url);if(isQuoted){url=url.substring(1,url.length-1);}
const container=createDocumentFragment();container.createTextChild('url(');let hrefUrl=null;if(this._rule&&this._rule.resourceURL()){hrefUrl=Common.ParsedURL.completeURL(this._rule.resourceURL(),url);}else if(this._node){hrefUrl=this._node.resolveURL(url);}
container.appendChild(Components.Linkifier.linkifyURL(hrefUrl||url,{text:url,preventClick:true}));container.createTextChild(')');return container;}}
export class ButtonProvider{constructor(){this._button=new UI.ToolbarButton(Common.UIString('New Style Rule'),'largeicon-add');this._button.addEventListener(UI.ToolbarButton.Events.Click,this._clicked,this);const longclickTriangle=UI.Icon.create('largeicon-longclick-triangle','long-click-glyph');this._button.element.appendChild(longclickTriangle);new UI.LongClickController(this._button.element,this._longClicked.bind(this));UI.context.addFlavorChangeListener(SDK.DOMNode,onNodeChanged.bind(this));onNodeChanged.call(this);function onNodeChanged(){let node=UI.context.flavor(SDK.DOMNode);node=node?node.enclosingElementOrSelf():null;this._button.setEnabled(!!node);}}
_clicked(event){StylesSidebarPane._instance._createNewRuleInViaInspectorStyleSheet();}
_longClicked(e){StylesSidebarPane._instance._onAddButtonLongClick(e);}
item(){return this._button;}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.StylesSidebarPane=StylesSidebarPane;Elements.StylesSidebarPane._maxLinkLength=_maxLinkLength;Elements.StylesSidebarPane.CSSPropertyPrompt=CSSPropertyPrompt;Elements.StylesSidebarPane.ButtonProvider=ButtonProvider;Elements.SectionBlock=SectionBlock;Elements.StylePropertiesSection=StylePropertiesSection;Elements.BlankStylePropertiesSection=BlankStylePropertiesSection;Elements.KeyframePropertiesSection=KeyframePropertiesSection;Elements.StylesSidebarPropertyRenderer=StylesSidebarPropertyRenderer;export default class StylePropertyTreeElement extends UI.TreeElement{constructor(stylesPane,matchedStyles,property,isShorthand,inherited,overloaded,newProperty){super('',isShorthand);this._style=property.ownerStyle;this._matchedStyles=matchedStyles;this.property=property;this._inherited=inherited;this._overloaded=overloaded;this.selectable=false;this._parentPane=stylesPane;this.isShorthand=isShorthand;this._applyStyleThrottler=new Common.Throttler(0);this._newProperty=newProperty;if(this._newProperty){this.listItemElement.textContent='';}
this._expandedDueToFilter=false;this.valueElement=null;this.nameElement=null;this._expandElement=null;this._originalPropertyText='';this._hasBeenEditedIncrementally=false;this._prompt=null;this._lastComputedValue=null;this._contextForTest;}
matchedStyles(){return this._matchedStyles;}
_editable(){return!!(this._style.styleSheetId&&this._style.range);}
inherited(){return this._inherited;}
overloaded(){return this._overloaded;}
setOverloaded(x){if(x===this._overloaded){return;}
this._overloaded=x;this._updateState();}
get name(){return this.property.name;}
get value(){return this.property.value;}
_updateFilter(){const regex=this._parentPane.filterRegex();const matches=!!regex&&(regex.test(this.property.name)||regex.test(this.property.value));this.listItemElement.classList.toggle('filter-match',matches);this.onpopulate();let hasMatchingChildren=false;for(let i=0;i<this.childCount();++i){hasMatchingChildren|=this.childAt(i)._updateFilter();}
if(!regex){if(this._expandedDueToFilter){this.collapse();}
this._expandedDueToFilter=false;}else if(hasMatchingChildren&&!this.expanded){this.expand();this._expandedDueToFilter=true;}else if(!hasMatchingChildren&&this.expanded&&this._expandedDueToFilter){this.collapse();this._expandedDueToFilter=false;}
return matches;}
_processColor(text){const color=Common.Color.parse(text);if(!color){return createTextNode(text);}
if(!this._editable()){const swatch=InlineEditor.ColorSwatch.create();swatch.setColor(color);return swatch;}
const swatch=InlineEditor.ColorSwatch.create();swatch.setColor(color);swatch.setFormat(Common.Color.detectColorFormat(swatch.color()));this._addColorContrastInfo(swatch);return swatch;}
_processVar(text){const computedValue=this._matchedStyles.computeValue(this._style,text);if(!computedValue){return createTextNode(text);}
const color=Common.Color.parse(computedValue);if(!color){const node=createElement('span');node.textContent=text;node.title=computedValue;return node;}
if(!this._editable()){const swatch=InlineEditor.ColorSwatch.create();swatch.setText(text,computedValue);swatch.setColor(color);return swatch;}
const swatch=InlineEditor.ColorSwatch.create();swatch.setColor(color);swatch.setFormat(Common.Color.detectColorFormat(swatch.color()));swatch.setText(text,computedValue);this._addColorContrastInfo(swatch);return swatch;}
async _addColorContrastInfo(swatch){const swatchPopoverHelper=this._parentPane.swatchPopoverHelper();const swatchIcon=new Elements.ColorSwatchPopoverIcon(this,swatchPopoverHelper,swatch);if(this.property.name!=='color'||!this._parentPane.cssModel()||!this.node()){return;}
const cssModel=this._parentPane.cssModel();const contrastInfo=new ColorPicker.ContrastInfo(await cssModel.backgroundColorsPromise(this.node().id));swatchIcon.setContrastInfo(contrastInfo);}
renderedPropertyText(){return this.nameElement.textContent+': '+this.valueElement.textContent;}
_processBezier(text){if(!this._editable()||!UI.Geometry.CubicBezier.parse(text)){return createTextNode(text);}
const swatchPopoverHelper=this._parentPane.swatchPopoverHelper();const swatch=InlineEditor.BezierSwatch.create();swatch.setBezierText(text);new Elements.BezierPopoverIcon(this,swatchPopoverHelper,swatch);return swatch;}
_processShadow(propertyValue,propertyName){if(!this._editable()){return createTextNode(propertyValue);}
let shadows;if(propertyName==='text-shadow'){shadows=InlineEditor.CSSShadowModel.parseTextShadow(propertyValue);}else{shadows=InlineEditor.CSSShadowModel.parseBoxShadow(propertyValue);}
if(!shadows.length){return createTextNode(propertyValue);}
const container=createDocumentFragment();const swatchPopoverHelper=this._parentPane.swatchPopoverHelper();for(let i=0;i<shadows.length;i++){if(i!==0){container.appendChild(createTextNode(', '));}
const cssShadowSwatch=InlineEditor.CSSShadowSwatch.create();cssShadowSwatch.setCSSShadow(shadows[i]);new Elements.ShadowSwatchPopoverHelper(this,swatchPopoverHelper,cssShadowSwatch);const colorSwatch=cssShadowSwatch.colorSwatch();if(colorSwatch){new Elements.ColorSwatchPopoverIcon(this,swatchPopoverHelper,colorSwatch);}
container.appendChild(cssShadowSwatch);}
return container;}
_processGrid(propertyValue,propertyName){const splitResult=TextUtils.TextUtils.splitStringByRegexes(propertyValue,[SDK.CSSMetadata.GridAreaRowRegex]);if(splitResult.length<=1){return createTextNode(propertyValue);}
const indent=Common.moduleSetting('textEditorIndent').get();const container=createDocumentFragment();for(const result of splitResult){const value=result.value.trim();const content=UI.html`<br /><span class='styles-clipboard-only'>${indent.repeat(2)}</span>${value}`;container.appendChild(content);}
return container;}
_updateState(){if(!this.listItemElement){return;}
if(this._style.isPropertyImplicit(this.name)){this.listItemElement.classList.add('implicit');}else{this.listItemElement.classList.remove('implicit');}
const hasIgnorableError=!this.property.parsedOk&&Elements.StylesSidebarPane.ignoreErrorsForProperty(this.property);if(hasIgnorableError){this.listItemElement.classList.add('has-ignorable-error');}else{this.listItemElement.classList.remove('has-ignorable-error');}
if(this.inherited()){this.listItemElement.classList.add('inherited');}else{this.listItemElement.classList.remove('inherited');}
if(this.overloaded()){this.listItemElement.classList.add('overloaded');}else{this.listItemElement.classList.remove('overloaded');}
if(this.property.disabled){this.listItemElement.classList.add('disabled');}else{this.listItemElement.classList.remove('disabled');}}
node(){return this._parentPane.node();}
parentPane(){return this._parentPane;}
section(){return this.treeOutline&&this.treeOutline.section;}
_updatePane(){const section=this.section();if(section){section.refreshUpdate(this);}}
async _toggleDisabled(disabled){const oldStyleRange=this._style.range;if(!oldStyleRange){return;}
this._parentPane.setUserOperation(true);const success=await this.property.setDisabled(disabled);this._parentPane.setUserOperation(false);if(!success){return;}
this._matchedStyles.resetActiveProperties();this._updatePane();this.styleTextAppliedForTest();}
async onpopulate(){if(this.childCount()||!this.isShorthand){return;}
const longhandProperties=this._style.longhandProperties(this.name);for(let i=0;i<longhandProperties.length;++i){const name=longhandProperties[i].name;let inherited=false;let overloaded=false;const section=this.section();if(section){inherited=section.isPropertyInherited(name);overloaded=this._matchedStyles.propertyState(longhandProperties[i])===SDK.CSSMatchedStyles.PropertyState.Overloaded;}
const item=new StylePropertyTreeElement(this._parentPane,this._matchedStyles,longhandProperties[i],false,inherited,overloaded,false);this.appendChild(item);}}
onattach(){this.updateTitle();this.listItemElement.addEventListener('mousedown',event=>{if(event.which===1){this._parentPane[ActiveSymbol]=this;}},false);this.listItemElement.addEventListener('mouseup',this._mouseUp.bind(this));this.listItemElement.addEventListener('click',event=>{if(!event.target.hasSelection()&&event.target!==this.listItemElement){event.consume(true);}});}
onexpand(){this._updateExpandElement();}
oncollapse(){this._updateExpandElement();}
_updateExpandElement(){if(!this._expandElement){return;}
if(this.expanded){this._expandElement.setIconType('smallicon-triangle-down');}else{this._expandElement.setIconType('smallicon-triangle-right');}}
updateTitleIfComputedValueChanged(){const computedValue=this._matchedStyles.computeValue(this.property.ownerStyle,this.property.value);if(computedValue===this._lastComputedValue){return;}
this._lastComputedValue=computedValue;this._innerUpdateTitle();}
updateTitle(){this._lastComputedValue=this._matchedStyles.computeValue(this.property.ownerStyle,this.property.value);this._innerUpdateTitle();}
_innerUpdateTitle(){this._updateState();if(this.isExpandable()){this._expandElement=UI.Icon.create('smallicon-triangle-right','expand-icon');}else{this._expandElement=null;}
const propertyRenderer=new Elements.StylesSidebarPropertyRenderer(this._style.parentRule,this.node(),this.name,this.value);if(this.property.parsedOk){propertyRenderer.setVarHandler(this._processVar.bind(this));propertyRenderer.setColorHandler(this._processColor.bind(this));propertyRenderer.setBezierHandler(this._processBezier.bind(this));propertyRenderer.setShadowHandler(this._processShadow.bind(this));propertyRenderer.setGridHandler(this._processGrid.bind(this));}
this.listItemElement.removeChildren();this.nameElement=propertyRenderer.renderName();if(this.property.name.startsWith('--')){this.nameElement.title=this._matchedStyles.computeCSSVariable(this._style,this.property.name)||'';}
this.valueElement=propertyRenderer.renderValue();if(!this.treeOutline){return;}
const indent=Common.moduleSetting('textEditorIndent').get();this.listItemElement.createChild('span','styles-clipboard-only').createTextChild(indent+(this.property.disabled?'/* ':''));this.listItemElement.appendChild(this.nameElement);const lineBreakValue=this.valueElement.firstElementChild&&this.valueElement.firstElementChild.tagName==='BR';const separator=lineBreakValue?':':': ';this.listItemElement.createChild('span','styles-name-value-separator').textContent=separator;if(this._expandElement){this.listItemElement.appendChild(this._expandElement);}
this.listItemElement.appendChild(this.valueElement);this.listItemElement.createTextChild(';');if(this.property.disabled){this.listItemElement.createChild('span','styles-clipboard-only').createTextChild(' */');}
if(!this.property.parsedOk){this.listItemElement.classList.add('not-parsed-ok');this.listItemElement.insertBefore(Elements.StylesSidebarPane.createExclamationMark(this.property),this.listItemElement.firstChild);}
if(!this.property.activeInStyle()){this.listItemElement.classList.add('inactive');}
this._updateFilter();if(this.property.parsedOk&&this.section()&&this.parent.root){const enabledCheckboxElement=createElement('input');enabledCheckboxElement.className='enabled-button';enabledCheckboxElement.type='checkbox';enabledCheckboxElement.checked=!this.property.disabled;enabledCheckboxElement.addEventListener('mousedown',event=>event.consume(),false);enabledCheckboxElement.addEventListener('click',event=>{this._toggleDisabled(!this.property.disabled);event.consume();},false);UI.ARIAUtils.setAccessibleName(enabledCheckboxElement,`${this.nameElement.textContent} ${this.valueElement.textContent}`);this.listItemElement.insertBefore(enabledCheckboxElement,this.listItemElement.firstChild);}}
_mouseUp(event){const activeTreeElement=this._parentPane[ActiveSymbol];this._parentPane[ActiveSymbol]=null;if(activeTreeElement!==this){return;}
if(this.listItemElement.hasSelection()){return;}
if(UI.isBeingEdited((event.target))){return;}
event.consume(true);if(event.target===this.listItemElement){return;}
if(UI.KeyboardShortcut.eventHasCtrlOrMeta((event))&&this.section().navigable){this._navigateToSource((event.target));return;}
this.startEditing((event.target));}
_handleContextMenuEvent(context,event){const contextMenu=new UI.ContextMenu(event);if(this.property.parsedOk&&this.section()&&this.parent.root){contextMenu.defaultSection().appendCheckboxItem(ls`Toggle property and continue editing`,async()=>{this.editingCancelled(null,context);const sectionIndex=this._parentPane.focusedSectionIndex();const propertyIndex=this.treeOutline.rootElement().indexOfChild(this);await this._toggleDisabled(!this.property.disabled);event.consume();this._parentPane.continueEditingElement(sectionIndex,propertyIndex);},!this.property.disabled);}
contextMenu.defaultSection().appendItem(ls`Reveal in Sources panel`,this._navigateToSource.bind(this));contextMenu.show();}
_navigateToSource(element,omitFocus){if(!this.section().navigable){return;}
const propertyNameClicked=element===this.nameElement;const uiLocation=Bindings.cssWorkspaceBinding.propertyUILocation(this.property,propertyNameClicked);if(uiLocation){Common.Revealer.reveal(uiLocation,omitFocus);}}
startEditing(selectElement){if(this.parent.isShorthand){return;}
if(this._expandElement&&selectElement===this._expandElement){return;}
const section=this.section();if(section&&!section.editable){return;}
if(selectElement){selectElement=selectElement.enclosingNodeOrSelfWithClass('webkit-css-property')||selectElement.enclosingNodeOrSelfWithClass('value');}
if(!selectElement){selectElement=this.nameElement;}
if(UI.isBeingEdited(selectElement)){return;}
const isEditingName=selectElement===this.nameElement;if(!isEditingName){if(SDK.cssMetadata().isGridAreaDefiningProperty(this.name)){this.valueElement.textContent=restoreGridIndents(this.value);}
this.valueElement.textContent=restoreURLs(this.valueElement.textContent,this.value);}
function restoreGridIndents(value){const splitResult=TextUtils.TextUtils.splitStringByRegexes(value,[SDK.CSSMetadata.GridAreaRowRegex]);return splitResult.map(result=>result.value.trim()).join('\n');}
function restoreURLs(fieldValue,modelValue){const urlRegex=/\b(url\([^)]*\))/g;const splitFieldValue=fieldValue.split(urlRegex);if(splitFieldValue.length===1){return fieldValue;}
const modelUrlRegex=new RegExp(urlRegex);for(let i=1;i<splitFieldValue.length;i+=2){const match=modelUrlRegex.exec(modelValue);if(match){splitFieldValue[i]=match[0];}}
return splitFieldValue.join('');}
const context={expanded:this.expanded,hasChildren:this.isExpandable(),isEditingName:isEditingName,originalProperty:this.property,previousContent:selectElement.textContent};this._contextForTest=context;this.setExpandable(false);if(selectElement.parentElement){selectElement.parentElement.classList.add('child-editing');}
selectElement.textContent=selectElement.textContent;function pasteHandler(context,event){const data=event.clipboardData.getData('Text');if(!data){return;}
const colonIdx=data.indexOf(':');if(colonIdx<0){return;}
const name=data.substring(0,colonIdx).trim();const value=data.substring(colonIdx+1).trim();event.preventDefault();if(!('originalName'in context)){context.originalName=this.nameElement.textContent;context.originalValue=this.valueElement.textContent;}
this.property.name=name;this.property.value=value;this.nameElement.textContent=name;this.valueElement.textContent=value;this.nameElement.normalize();this.valueElement.normalize();this._editingCommitted(event.target.textContent,context,'forward');}
function blurListener(context,event){let text=event.target.textContent;if(!context.isEditingName){text=this.value||text;}
this._editingCommitted(text,context,'');}
this._originalPropertyText=this.property.propertyText;this._parentPane.setEditingStyle(true,this);if(selectElement.parentElement){selectElement.parentElement.scrollIntoViewIfNeeded(false);}
this._prompt=new Elements.StylesSidebarPane.CSSPropertyPrompt(this,isEditingName);this._prompt.setAutocompletionTimeout(0);this._prompt.addEventListener(UI.TextPrompt.Events.TextChanged,this._applyFreeFlowStyleTextEdit.bind(this,context));const proxyElement=this._prompt.attachAndStartEditing(selectElement,blurListener.bind(this,context));this._navigateToSource(selectElement,true);proxyElement.addEventListener('keydown',this._editingNameValueKeyDown.bind(this,context),false);proxyElement.addEventListener('keypress',this._editingNameValueKeyPress.bind(this,context),false);if(isEditingName){proxyElement.addEventListener('paste',pasteHandler.bind(this,context),false);proxyElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this,context),false);}
selectElement.getComponentSelection().selectAllChildren(selectElement);}
_editingNameValueKeyDown(context,event){if(event.handled){return;}
let result;if(isEnterKey(event)&&!event.shiftKey){result='forward';}else if(event.keyCode===UI.KeyboardShortcut.Keys.Esc.code||event.key==='Escape'){result='cancel';}else if(!context.isEditingName&&this._newProperty&&event.keyCode===UI.KeyboardShortcut.Keys.Backspace.code){const selection=event.target.getComponentSelection();if(selection.isCollapsed&&!selection.focusOffset){event.preventDefault();result='backward';}}else if(event.key==='Tab'){result=event.shiftKey?'backward':'forward';event.preventDefault();}
if(result){switch(result){case'cancel':this.editingCancelled(null,context);break;case'forward':case'backward':this._editingCommitted(event.target.textContent,context,result);break;}
event.consume();return;}}
_editingNameValueKeyPress(context,event){function shouldCommitValueSemicolon(text,cursorPosition){let openQuote='';for(let i=0;i<cursorPosition;++i){const ch=text[i];if(ch==='\\'&&openQuote!==''){++i;}
else if(!openQuote&&(ch==='"'||ch==='\'')){openQuote=ch;}else if(openQuote===ch){openQuote='';}}
return!openQuote;}
const keyChar=String.fromCharCode(event.charCode);const isFieldInputTerminated=(context.isEditingName?keyChar===':':keyChar===';'&&shouldCommitValueSemicolon(event.target.textContent,event.target.selectionLeftOffset()));if(isFieldInputTerminated){event.consume(true);this._editingCommitted(event.target.textContent,context,'forward');return;}}
async _applyFreeFlowStyleTextEdit(context){if(!this._prompt||!this._parentPane.node()){return;}
const enteredText=this._prompt.text();if(context.isEditingName&&enteredText.includes(':')){this._editingCommitted(enteredText,context,'forward');return;}
const valueText=this._prompt.textWithCurrentSuggestion();if(valueText.includes(';')){return;}
const isPseudo=!!this._parentPane.node().pseudoType();if(isPseudo){if(this.name.toLowerCase()==='content'){return;}
const lowerValueText=valueText.trim().toLowerCase();if(lowerValueText.startsWith('content:')||lowerValueText==='display: none'){return;}}
if(context.isEditingName){if(valueText.includes(':')){await this.applyStyleText(valueText,false);}else if(this._hasBeenEditedIncrementally){await this._applyOriginalStyle(context);}}else{await this.applyStyleText(`${this.nameElement.textContent}: ${valueText}`,false);}}
kickFreeFlowStyleEditForTest(){const context=this._contextForTest;return this._applyFreeFlowStyleTextEdit((context));}
editingEnded(context){this.setExpandable(context.hasChildren);if(context.expanded){this.expand();}
const editedElement=context.isEditingName?this.nameElement:this.valueElement;if(editedElement.parentElement){editedElement.parentElement.classList.remove('child-editing');}
this._parentPane.setEditingStyle(false);}
editingCancelled(element,context){this._removePrompt();if(this._hasBeenEditedIncrementally){this._applyOriginalStyle(context);}else if(this._newProperty){this.treeOutline.removeChild(this);}
this.updateTitle();this.editingEnded(context);}
async _applyOriginalStyle(context){await this.applyStyleText(this._originalPropertyText,false,context.originalProperty);}
_findSibling(moveDirection){let target=this;do{target=(moveDirection==='forward'?target.nextSibling:target.previousSibling);}while(target&&target.inherited());return target;}
async _editingCommitted(userInput,context,moveDirection){this._removePrompt();this.editingEnded(context);const isEditingName=context.isEditingName;const nameValueEntered=isEditingName&&this.nameElement.textContent.includes(':');let createNewProperty,moveToSelector;const isDataPasted='originalName'in context;const isDirtyViaPaste=isDataPasted&&(this.nameElement.textContent!==context.originalName||this.valueElement.textContent!==context.originalValue);const isPropertySplitPaste=isDataPasted&&isEditingName&&this.valueElement.textContent!==context.originalValue;let moveTo=this;const moveToOther=(isEditingName^(moveDirection==='forward'));const abandonNewProperty=this._newProperty&&!userInput&&(moveToOther||isEditingName);if(moveDirection==='forward'&&(!isEditingName||isPropertySplitPaste)||moveDirection==='backward'&&isEditingName){moveTo=moveTo._findSibling(moveDirection);if(!moveTo){if(moveDirection==='forward'&&(!this._newProperty||userInput)){createNewProperty=true;}else if(moveDirection==='backward'){moveToSelector=true;}}}
let moveToIndex=moveTo&&this.treeOutline?this.treeOutline.rootElement().indexOfChild(moveTo):-1;const blankInput=userInput.isWhitespace();const shouldCommitNewProperty=this._newProperty&&(isPropertySplitPaste||moveToOther||(!moveDirection&&!isEditingName)||(isEditingName&&blankInput)||nameValueEntered);const section=(this.section());if(((userInput!==context.previousContent||isDirtyViaPaste)&&!this._newProperty)||shouldCommitNewProperty){let propertyText;if(nameValueEntered){propertyText=this.nameElement.textContent;}else if(blankInput||(this._newProperty&&this.valueElement.textContent.isWhitespace())){propertyText='';}else{if(isEditingName){propertyText=userInput+': '+this.property.value;}else{propertyText=this.property.name+': '+userInput;}}
await this.applyStyleText(propertyText,true);moveToNextCallback.call(this,this._newProperty,!blankInput,section);}else{if(isEditingName){this.property.name=userInput;}else{this.property.value=userInput;}
if(!isDataPasted&&!this._newProperty){this.updateTitle();}
moveToNextCallback.call(this,this._newProperty,false,section);}
function moveToNextCallback(alreadyNew,valueChanged,section){if(!moveDirection){this._parentPane.resetFocus();return;}
if(moveTo&&moveTo.parent){moveTo.startEditing(!isEditingName?moveTo.nameElement:moveTo.valueElement);return;}
if(moveTo&&!moveTo.parent){const rootElement=section.propertiesTreeOutline.rootElement();if(moveDirection==='forward'&&blankInput&&!isEditingName){--moveToIndex;}
if(moveToIndex>=rootElement.childCount()&&!this._newProperty){createNewProperty=true;}else{const treeElement=moveToIndex>=0?rootElement.childAt(moveToIndex):null;if(treeElement){let elementToEdit=!isEditingName||isPropertySplitPaste?treeElement.nameElement:treeElement.valueElement;if(alreadyNew&&blankInput){elementToEdit=moveDirection==='forward'?treeElement.nameElement:treeElement.valueElement;}
treeElement.startEditing(elementToEdit);return;}else if(!alreadyNew){moveToSelector=true;}}}
if(createNewProperty){if(alreadyNew&&!valueChanged&&(isEditingName^(moveDirection==='backward'))){return;}
section.addNewBlankProperty().startEditing();return;}
if(abandonNewProperty){moveTo=this._findSibling(moveDirection);const sectionToEdit=(moveTo||moveDirection==='backward')?section:section.nextEditableSibling();if(sectionToEdit){if(sectionToEdit.style().parentRule){sectionToEdit.startEditingSelector();}else{sectionToEdit.moveEditorFromSelector(moveDirection);}}
return;}
if(moveToSelector){if(section.style().parentRule){section.startEditingSelector();}else{section.moveEditorFromSelector(moveDirection);}}}}
_removePrompt(){if(this._prompt){this._prompt.detach();this._prompt=null;}}
styleTextAppliedForTest(){}
applyStyleText(styleText,majorChange,property){return this._applyStyleThrottler.schedule(this._innerApplyStyleText.bind(this,styleText,majorChange,property));}
async _innerApplyStyleText(styleText,majorChange,property){if(!this.treeOutline){return;}
const oldStyleRange=this._style.range;if(!oldStyleRange){return;}
const hasBeenEditedIncrementally=this._hasBeenEditedIncrementally;styleText=styleText.replace(/[\xA0\t]/g,' ').trim();if(!styleText.length&&majorChange&&this._newProperty&&!hasBeenEditedIncrementally){this.parent.removeChild(this);return;}
const currentNode=this._parentPane.node();this._parentPane.setUserOperation(true);if(styleText.length&&!/;\s*$/.test(styleText)){styleText+=';';}
const overwriteProperty=!this._newProperty||hasBeenEditedIncrementally;let success=await this.property.setText(styleText,majorChange,overwriteProperty);if(hasBeenEditedIncrementally&&majorChange&&!success){majorChange=false;success=await this.property.setText(this._originalPropertyText,majorChange,overwriteProperty);}
this._parentPane.setUserOperation(false);if(!success){if(majorChange){if(this._newProperty){this.treeOutline.removeChild(this);}else{this.updateTitle();}}
this.styleTextAppliedForTest();return;}
this._matchedStyles.resetActiveProperties();this._hasBeenEditedIncrementally=true;this.property=property||this._style.propertyAt(this.property.index);if(currentNode===this.node()){this._updatePane();}
this.styleTextAppliedForTest();}
ondblclick(){return true;}
isEventWithinDisclosureTriangle(event){return event.target===this._expandElement;}}
export const ActiveSymbol=Symbol('ActiveSymbol');self.Elements=self.Elements||{};Elements=Elements||{};Elements.StylePropertyTreeElement=StylePropertyTreeElement;Elements.StylePropertyTreeElement.ActiveSymbol=ActiveSymbol;Elements.StylePropertyTreeElement.Context;export default class StylePropertyHighlighter{constructor(ssp,cssProperty){this._styleSidebarPane=ssp;this._cssProperty=cssProperty;}
perform(){for(const section of this._styleSidebarPane.allSections()){for(let treeElement=section.propertiesTreeOutline.firstChild();treeElement;treeElement=treeElement.nextSibling){treeElement.onpopulate();}}
let highlightTreeElement=null;for(const section of this._styleSidebarPane.allSections()){let treeElement=section.propertiesTreeOutline.firstChild();while(treeElement&&!highlightTreeElement){if(treeElement.property===this._cssProperty){highlightTreeElement=treeElement;break;}
treeElement=treeElement.traverseNextTreeElement(false,null,true);}
if(highlightTreeElement){break;}}
if(!highlightTreeElement){return;}
highlightTreeElement.parent.expand();highlightTreeElement.listItemElement.scrollIntoViewIfNeeded();highlightTreeElement.listItemElement.animate([{offset:0,backgroundColor:'rgba(255, 255, 0, 0.2)'},{offset:0.1,backgroundColor:'rgba(255, 255, 0, 0.7)'},{offset:1,backgroundColor:'transparent'}],{duration:2000,easing:'cubic-bezier(0, 0, 0.2, 1)'});}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.StylePropertyHighlighter=StylePropertyHighlighter;export default class PropertiesWidget extends UI.ThrottledWidget{constructor(){super(true);this.registerRequiredCSS('elements/propertiesWidget.css');SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.AttrModified,this._onNodeChange,this);SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.AttrRemoved,this._onNodeChange,this);SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.CharacterDataModified,this._onNodeChange,this);SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.ChildNodeCountUpdated,this._onNodeChange,this);UI.context.addFlavorChangeListener(SDK.DOMNode,this._setNode,this);this._node=UI.context.flavor(SDK.DOMNode);this._treeOutline=new ObjectUI.ObjectPropertiesSectionsTreeOutline({readOnly:true});this._treeOutline.setShowSelectionOnKeyboardFocus(true,false);this._expandController=new ObjectUI.ObjectPropertiesSectionsTreeExpandController(this._treeOutline);this.contentElement.appendChild(this._treeOutline.element);this._treeOutline.addEventListener(UI.TreeOutline.Events.ElementExpanded,()=>{Host.userMetrics.actionTaken(Host.UserMetrics.Action.DOMPropertiesExpanded);});this.update();}
_setNode(event){this._node=(event.data);this.update();}
async doUpdate(){if(this._lastRequestedNode){this._lastRequestedNode.domModel().runtimeModel().releaseObjectGroup(_objectGroupName);delete this._lastRequestedNode;}
if(!this._node){this.contentElement.removeChildren();return;}
this._lastRequestedNode=this._node;const object=await this._node.resolveToObject(_objectGroupName);if(!object){return;}
const result=await object.callFunction(protoList);object.release();if(!result.object||result.wasThrown){return;}
const propertiesResult=await result.object.getOwnProperties(false);result.object.release();if(!propertiesResult||!propertiesResult.properties){return;}
const properties=propertiesResult.properties;this._treeOutline.removeChildren();let selected=false;for(let i=0;i<properties.length;++i){if(!parseInt(properties[i].name,10)){continue;}
const property=properties[i].value;let title=property.description;title=title.replace(/Prototype$/,'');const section=this._createSectionTreeElement(property,title);this._treeOutline.appendChild(section);if(!selected){section.select(true,false);selected=true;}}
function protoList(){let proto=this;const result={__proto__:null};let counter=1;while(proto){result[counter++]=proto;proto=proto.__proto__;}
return result;}}
_createSectionTreeElement(property,title){const titleElement=createElementWithClass('span','tree-element-title');titleElement.textContent=title;const section=new ObjectUI.ObjectPropertiesSection.RootElement(property);section.title=titleElement;this._expandController.watchSection(title,section);return section;}
_onNodeChange(event){if(!this._node){return;}
const data=event.data;const node=(data instanceof SDK.DOMNode?data:data.node);if(this._node!==node){return;}
this.update();}}
export const _objectGroupName='properties-sidebar-pane';self.Elements=self.Elements||{};Elements=Elements||{};Elements.PropertiesWidget=PropertiesWidget;Elements.PropertiesWidget._objectGroupName=_objectGroupName;export default class PlatformFontsWidget extends UI.ThrottledWidget{constructor(sharedModel){super(true);this.registerRequiredCSS('elements/platformFontsWidget.css');this._sharedModel=sharedModel;this._sharedModel.addEventListener(Elements.ComputedStyleModel.Events.ComputedStyleChanged,this.update,this);this._sectionTitle=createElementWithClass('div','title');this.contentElement.classList.add('platform-fonts');this.contentElement.appendChild(this._sectionTitle);this._sectionTitle.textContent=Common.UIString('Rendered Fonts');this._fontStatsSection=this.contentElement.createChild('div','stats-section');}
doUpdate(){const cssModel=this._sharedModel.cssModel();const node=this._sharedModel.node();if(!node||!cssModel){return Promise.resolve();}
return cssModel.platformFontsPromise(node.id).then(this._refreshUI.bind(this,node));}
_refreshUI(node,platformFonts){if(this._sharedModel.node()!==node){return;}
this._fontStatsSection.removeChildren();const isEmptySection=!platformFonts||!platformFonts.length;this._sectionTitle.classList.toggle('hidden',isEmptySection);if(isEmptySection){return;}
platformFonts.sort(function(a,b){return b.glyphCount-a.glyphCount;});for(let i=0;i<platformFonts.length;++i){const fontStatElement=this._fontStatsSection.createChild('div','font-stats-item');const fontNameElement=fontStatElement.createChild('span','font-name');fontNameElement.textContent=platformFonts[i].familyName;const fontDelimeterElement=fontStatElement.createChild('span','font-delimeter');fontDelimeterElement.textContent='\u2014';const fontOrigin=fontStatElement.createChild('span');fontOrigin.textContent=platformFonts[i].isCustomFont?Common.UIString('Network resource'):Common.UIString('Local file');const fontUsageElement=fontStatElement.createChild('span','font-usage');const usage=platformFonts[i].glyphCount;fontUsageElement.textContent=usage===1?Common.UIString('(%d glyph)',usage):Common.UIString('(%d glyphs)',usage);}}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.PlatformFontsWidget=PlatformFontsWidget;export default class NodeStackTraceWidget extends UI.ThrottledWidget{constructor(){super(true);this.registerRequiredCSS('elements/nodeStackTraceWidget.css');this._noStackTraceElement=this.contentElement.createChild('div','gray-info-message');this._noStackTraceElement.textContent=ls`No stack trace available`;this._creationStackTraceElement=this.contentElement.createChild('div','stack-trace');this._linkifier=new Components.Linkifier(MaxLengthForLinks);}
wasShown(){UI.context.addFlavorChangeListener(SDK.DOMNode,this.update,this);this.update();}
willHide(){UI.context.removeFlavorChangeListener(SDK.DOMNode,this.update,this);}
async doUpdate(){const node=UI.context.flavor(SDK.DOMNode);if(!node){this._noStackTraceElement.classList.remove('hidden');this._creationStackTraceElement.classList.add('hidden');return;}
const creationStackTrace=await node.creationStackTrace();if(creationStackTrace){this._noStackTraceElement.classList.add('hidden');this._creationStackTraceElement.classList.remove('hidden');const stackTracePreview=Components.JSPresentationUtils.buildStackTracePreviewContents(node.domModel().target(),this._linkifier,creationStackTrace);this._creationStackTraceElement.removeChildren();this._creationStackTraceElement.appendChild(stackTracePreview.element);}else{this._noStackTraceElement.classList.remove('hidden');this._creationStackTraceElement.classList.add('hidden');}}}
export const MaxLengthForLinks=40;self.Elements=self.Elements||{};Elements=Elements||{};Elements.NodeStackTraceWidget=NodeStackTraceWidget;Elements.NodeStackTraceWidget.MaxLengthForLinks=MaxLengthForLinks;export default class MetricsSidebarPane extends Elements.ElementsSidebarPane{constructor(){super();this.registerRequiredCSS('elements/metricsSidebarPane.css');this._inlineStyle=null;}
doUpdate(){if(this._isEditingMetrics){return Promise.resolve();}
const node=this.node();const cssModel=this.cssModel();if(!node||node.nodeType()!==Node.ELEMENT_NODE||!cssModel){this.contentElement.removeChildren();return Promise.resolve();}
function callback(style){if(!style||this.node()!==node){return;}
this._updateMetrics(style);}
function inlineStyleCallback(inlineStyleResult){if(inlineStyleResult&&this.node()===node){this._inlineStyle=inlineStyleResult.inlineStyle;}}
const promises=[cssModel.computedStylePromise(node.id).then(callback.bind(this)),cssModel.inlineStylesPromise(node.id).then(inlineStyleCallback.bind(this))];return Promise.all(promises);}
onCSSModelChanged(){this.update();}
_getPropertyValueAsPx(style,propertyName){return Number(style.get(propertyName).replace(/px$/,'')||0);}
_getBox(computedStyle,componentName){const suffix=componentName==='border'?'-width':'';const left=this._getPropertyValueAsPx(computedStyle,componentName+'-left'+suffix);const top=this._getPropertyValueAsPx(computedStyle,componentName+'-top'+suffix);const right=this._getPropertyValueAsPx(computedStyle,componentName+'-right'+suffix);const bottom=this._getPropertyValueAsPx(computedStyle,componentName+'-bottom'+suffix);return{left:left,top:top,right:right,bottom:bottom};}
_highlightDOMNode(showHighlight,mode,event){event.consume();if(showHighlight&&this.node()){if(this._highlightMode===mode){return;}
this._highlightMode=mode;this.node().highlight(mode);}else{delete this._highlightMode;SDK.OverlayModel.hideDOMNodeHighlight();}
for(let i=0;this._boxElements&&i<this._boxElements.length;++i){const element=this._boxElements[i];if(!this.node()||mode==='all'||element._name===mode){element.style.backgroundColor=element._backgroundColor;}else{element.style.backgroundColor='';}}}
_updateMetrics(style){const metricsElement=createElement('div');metricsElement.className='metrics';const self=this;function createBoxPartElement(style,name,side,suffix){const propertyName=(name!=='position'?name+'-':'')+side+suffix;let value=style.get(propertyName);if(value===''||(name!=='position'&&value==='0px')){value='\u2012';}else if(name==='position'&&value==='auto'){value='\u2012';}
value=value.replace(/px$/,'');value=Number.toFixedIfFloating(value);const element=createElement('div');element.className=side;element.textContent=value;element.addEventListener('dblclick',this.startEditing.bind(this,element,name,propertyName,style),false);return element;}
function getContentAreaWidthPx(style){let width=style.get('width').replace(/px$/,'');if(!isNaN(width)&&style.get('box-sizing')==='border-box'){const borderBox=self._getBox(style,'border');const paddingBox=self._getBox(style,'padding');width=width-borderBox.left-borderBox.right-paddingBox.left-paddingBox.right;}
return Number.toFixedIfFloating(width.toString());}
function getContentAreaHeightPx(style){let height=style.get('height').replace(/px$/,'');if(!isNaN(height)&&style.get('box-sizing')==='border-box'){const borderBox=self._getBox(style,'border');const paddingBox=self._getBox(style,'padding');height=height-borderBox.top-borderBox.bottom-paddingBox.top-paddingBox.bottom;}
return Number.toFixedIfFloating(height.toString());}
const noMarginDisplayType={'table-cell':true,'table-column':true,'table-column-group':true,'table-footer-group':true,'table-header-group':true,'table-row':true,'table-row-group':true};const noPaddingDisplayType={'table-column':true,'table-column-group':true,'table-footer-group':true,'table-header-group':true,'table-row':true,'table-row-group':true};const noPositionType={'static':true};const boxes=['content','padding','border','margin','position'];const boxColors=[Common.Color.PageHighlight.Content,Common.Color.PageHighlight.Padding,Common.Color.PageHighlight.Border,Common.Color.PageHighlight.Margin,Common.Color.fromRGBA([0,0,0,0])];const boxLabels=[Common.UIString('content'),Common.UIString('padding'),Common.UIString('border'),Common.UIString('margin'),Common.UIString('position')];let previousBox=null;this._boxElements=[];for(let i=0;i<boxes.length;++i){const name=boxes[i];if(name==='margin'&&noMarginDisplayType[style.get('display')]){continue;}
if(name==='padding'&&noPaddingDisplayType[style.get('display')]){continue;}
if(name==='position'&&noPositionType[style.get('position')]){continue;}
const boxElement=createElement('div');boxElement.className=name;boxElement._backgroundColor=boxColors[i].asString(Common.Color.Format.RGBA);boxElement._name=name;boxElement.style.backgroundColor=boxElement._backgroundColor;boxElement.addEventListener('mouseover',this._highlightDOMNode.bind(this,true,name==='position'?'all':name),false);this._boxElements.push(boxElement);if(name==='content'){const widthElement=createElement('span');widthElement.textContent=getContentAreaWidthPx(style);widthElement.addEventListener('dblclick',this.startEditing.bind(this,widthElement,'width','width',style),false);const heightElement=createElement('span');heightElement.textContent=getContentAreaHeightPx(style);heightElement.addEventListener('dblclick',this.startEditing.bind(this,heightElement,'height','height',style),false);boxElement.appendChild(widthElement);boxElement.createTextChild(' \u00D7 ');boxElement.appendChild(heightElement);}else{const suffix=(name==='border'?'-width':'');const labelElement=createElement('div');labelElement.className='label';labelElement.textContent=boxLabels[i];boxElement.appendChild(labelElement);boxElement.appendChild(createBoxPartElement.call(this,style,name,'top',suffix));boxElement.appendChild(createElement('br'));boxElement.appendChild(createBoxPartElement.call(this,style,name,'left',suffix));if(previousBox){boxElement.appendChild(previousBox);}
boxElement.appendChild(createBoxPartElement.call(this,style,name,'right',suffix));boxElement.appendChild(createElement('br'));boxElement.appendChild(createBoxPartElement.call(this,style,name,'bottom',suffix));}
previousBox=boxElement;}
metricsElement.appendChild(previousBox);metricsElement.addEventListener('mouseover',this._highlightDOMNode.bind(this,false,'all'),false);this.contentElement.removeChildren();this.contentElement.appendChild(metricsElement);Host.userMetrics.panelLoaded('elements','DevTools.Launch.Elements');}
startEditing(targetElement,box,styleProperty,computedStyle){if(UI.isBeingEdited(targetElement)){return;}
const context={box:box,styleProperty:styleProperty,computedStyle:computedStyle};const boundKeyDown=this._handleKeyDown.bind(this,context,styleProperty);context.keyDownHandler=boundKeyDown;targetElement.addEventListener('keydown',boundKeyDown,false);this._isEditingMetrics=true;const config=new UI.InplaceEditor.Config(this._editingCommitted.bind(this),this.editingCancelled.bind(this),context);UI.InplaceEditor.startEditing(targetElement,config);targetElement.getComponentSelection().selectAllChildren(targetElement);}
_handleKeyDown(context,styleProperty,event){const element=event.currentTarget;function finishHandler(originalValue,replacementString){this._applyUserInput(element,replacementString,originalValue,context,false);}
function customNumberHandler(prefix,number,suffix){if(styleProperty!=='margin'&&number<0){number=0;}
return prefix+number+suffix;}
UI.handleElementValueModifications(event,element,finishHandler.bind(this),undefined,customNumberHandler);}
editingEnded(element,context){delete this.originalPropertyData;delete this.previousPropertyDataCandidate;element.removeEventListener('keydown',context.keyDownHandler,false);delete this._isEditingMetrics;}
editingCancelled(element,context){if('originalPropertyData'in this&&this._inlineStyle){if(!this.originalPropertyData){const pastLastSourcePropertyIndex=this._inlineStyle.pastLastSourcePropertyIndex();if(pastLastSourcePropertyIndex){this._inlineStyle.allProperties()[pastLastSourcePropertyIndex-1].setText('',false);}}else{this._inlineStyle.allProperties()[this.originalPropertyData.index].setText(this.originalPropertyData.propertyText,false);}}
this.editingEnded(element,context);this.update();}
_applyUserInput(element,userInput,previousContent,context,commitEditor){if(!this._inlineStyle){return this.editingCancelled(element,context);}
if(commitEditor&&userInput===previousContent){return this.editingCancelled(element,context);}
if(context.box!=='position'&&(!userInput||userInput==='\u2012')){userInput='0px';}else if(context.box==='position'&&(!userInput||userInput==='\u2012')){userInput='auto';}
userInput=userInput.toLowerCase();if(/^\d+$/.test(userInput)){userInput+='px';}
const styleProperty=context.styleProperty;const computedStyle=context.computedStyle;if(computedStyle.get('box-sizing')==='border-box'&&(styleProperty==='width'||styleProperty==='height')){if(!userInput.match(/px$/)){Common.console.error('For elements with box-sizing: border-box, only absolute content area dimensions can be applied');return;}
const borderBox=this._getBox(computedStyle,'border');const paddingBox=this._getBox(computedStyle,'padding');let userValuePx=Number(userInput.replace(/px$/,''));if(isNaN(userValuePx)){return;}
if(styleProperty==='width'){userValuePx+=borderBox.left+borderBox.right+paddingBox.left+paddingBox.right;}else{userValuePx+=borderBox.top+borderBox.bottom+paddingBox.top+paddingBox.bottom;}
userInput=userValuePx+'px';}
this.previousPropertyDataCandidate=null;const allProperties=this._inlineStyle.allProperties();for(let i=0;i<allProperties.length;++i){const property=allProperties[i];if(property.name!==context.styleProperty||!property.activeInStyle()){continue;}
this.previousPropertyDataCandidate=property;property.setValue(userInput,commitEditor,true,callback.bind(this));return;}
this._inlineStyle.appendProperty(context.styleProperty,userInput,callback.bind(this));function callback(success){if(!success){return;}
if(!('originalPropertyData'in this)){this.originalPropertyData=this.previousPropertyDataCandidate;}
if(typeof this._highlightMode!=='undefined'){this.node().highlight(this._highlightMode);}
if(commitEditor){this.update();}}}
_editingCommitted(element,userInput,previousContent,context){this.editingEnded(element,context);this._applyUserInput(element,userInput,previousContent,context,true);}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.MetricsSidebarPane=MetricsSidebarPane;export default class MarkerDecorator{decorate(node){}}
export class GenericDecorator{constructor(extension){this._title=Common.UIString(extension.title());this._color=extension.descriptor()['color'];}
decorate(node){return{title:this._title,color:this._color};}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.MarkerDecorator=MarkerDecorator;Elements.GenericDecorator=GenericDecorator;export default class InspectElementModeController{constructor(){this._toggleSearchAction=UI.actionRegistry.action('elements.toggle-element-search');this._mode=Protocol.Overlay.InspectMode.None;SDK.targetManager.addEventListener(SDK.TargetManager.Events.SuspendStateChanged,this._suspendStateChanged,this);SDK.targetManager.addModelListener(SDK.OverlayModel,SDK.OverlayModel.Events.ExitedInspectMode,()=>this._setMode(Protocol.Overlay.InspectMode.None));SDK.OverlayModel.setInspectNodeHandler(this._inspectNode.bind(this));SDK.targetManager.observeModels(SDK.OverlayModel,this);this._showDetailedInspectTooltipSetting=Common.settings.moduleSetting('showDetailedInspectTooltip');this._showDetailedInspectTooltipSetting.addChangeListener(this._showDetailedInspectTooltipChanged.bind(this));document.addEventListener('keydown',event=>{if(event.keyCode!==UI.KeyboardShortcut.Keys.Esc.code){return;}
if(!this._isInInspectElementMode()){return;}
this._setMode(Protocol.Overlay.InspectMode.None);event.consume(true);},true);}
modelAdded(overlayModel){if(this._mode===Protocol.Overlay.InspectMode.None){return;}
overlayModel.setInspectMode(this._mode,this._showDetailedInspectTooltipSetting.get());}
modelRemoved(overlayModel){}
_isInInspectElementMode(){return this._mode!==Protocol.Overlay.InspectMode.None;}
_toggleInspectMode(){let mode;if(this._isInInspectElementMode()){mode=Protocol.Overlay.InspectMode.None;}else{mode=Common.moduleSetting('showUAShadowDOM').get()?Protocol.Overlay.InspectMode.SearchForUAShadowDOM:Protocol.Overlay.InspectMode.SearchForNode;}
this._setMode(mode);}
_captureScreenshotMode(){this._setMode(Protocol.Overlay.InspectMode.CaptureAreaScreenshot);}
_setMode(mode){if(SDK.targetManager.allTargetsSuspended()){return;}
this._mode=mode;for(const overlayModel of SDK.targetManager.models(SDK.OverlayModel)){overlayModel.setInspectMode(mode,this._showDetailedInspectTooltipSetting.get());}
this._toggleSearchAction.setToggled(this._isInInspectElementMode());}
_suspendStateChanged(){if(!SDK.targetManager.allTargetsSuspended()){return;}
this._mode=Protocol.Overlay.InspectMode.None;this._toggleSearchAction.setToggled(false);}
async _inspectNode(node){Elements.ElementsPanel.instance().revealAndSelectNode(node,true,true);}
_showDetailedInspectTooltipChanged(){this._setMode(this._mode);}}
export class ToggleSearchActionDelegate{handleAction(context,actionId){if(!inspectElementModeController){return false;}
if(actionId==='elements.toggle-element-search'){inspectElementModeController._toggleInspectMode();}else if(actionId==='elements.capture-area-screenshot'){inspectElementModeController._captureScreenshotMode();}
return true;}}
export const inspectElementModeController=Root.Runtime.queryParam('isSharedWorker')?null:new InspectElementModeController();self.Elements=self.Elements||{};Elements=Elements||{};Elements.InspectElementModeController=InspectElementModeController;Elements.InspectElementModeController.ToggleSearchActionDelegate=ToggleSearchActionDelegate;Elements.inspectElementModeController=inspectElementModeController;export default class EventListenersWidget extends UI.ThrottledWidget{constructor(){super();this._toolbarItems=[];this._showForAncestorsSetting=Common.settings.moduleSetting('showEventListenersForAncestors');this._showForAncestorsSetting.addChangeListener(this.update.bind(this));this._dispatchFilterBySetting=Common.settings.createSetting('eventListenerDispatchFilterType',DispatchFilterBy.All);this._dispatchFilterBySetting.addChangeListener(this.update.bind(this));this._showFrameworkListenersSetting=Common.settings.createSetting('showFrameowkrListeners',true);this._showFrameworkListenersSetting.setTitle(Common.UIString('Framework listeners'));this._showFrameworkListenersSetting.addChangeListener(this._showFrameworkListenersChanged.bind(this));this._eventListenersView=new EventListeners.EventListenersView(this.update.bind(this));this._eventListenersView.show(this.element);const refreshButton=new UI.ToolbarButton(Common.UIString('Refresh'),'largeicon-refresh');refreshButton.addEventListener(UI.ToolbarButton.Events.Click,this.update.bind(this));this._toolbarItems.push(refreshButton);this._toolbarItems.push(new UI.ToolbarSettingCheckbox(this._showForAncestorsSetting,Common.UIString('Show listeners on the ancestors'),Common.UIString('Ancestors')));const dispatchFilter=new UI.ToolbarComboBox(this._onDispatchFilterTypeChanged.bind(this),ls`Event listeners category`);function addDispatchFilterOption(name,value){const option=dispatchFilter.createOption(name,value);if(value===this._dispatchFilterBySetting.get()){dispatchFilter.select(option);}}
addDispatchFilterOption.call(this,Common.UIString('All'),DispatchFilterBy.All);addDispatchFilterOption.call(this,Common.UIString('Passive'),DispatchFilterBy.Passive);addDispatchFilterOption.call(this,Common.UIString('Blocking'),DispatchFilterBy.Blocking);dispatchFilter.setMaxWidth(200);this._toolbarItems.push(dispatchFilter);this._toolbarItems.push(new UI.ToolbarSettingCheckbox(this._showFrameworkListenersSetting,Common.UIString('Resolve event listeners bound with framework')));UI.context.addFlavorChangeListener(SDK.DOMNode,this.update,this);this.update();}
doUpdate(){if(this._lastRequestedNode){this._lastRequestedNode.domModel().runtimeModel().releaseObjectGroup(_objectGroupName);delete this._lastRequestedNode;}
const node=UI.context.flavor(SDK.DOMNode);if(!node){this._eventListenersView.reset();this._eventListenersView.addEmptyHolderIfNeeded();return Promise.resolve();}
this._lastRequestedNode=node;const selectedNodeOnly=!this._showForAncestorsSetting.get();const promises=[];promises.push(node.resolveToObject(_objectGroupName));if(!selectedNodeOnly){let currentNode=node.parentNode;while(currentNode){promises.push(currentNode.resolveToObject(_objectGroupName));currentNode=currentNode.parentNode;}
promises.push(this._windowObjectInNodeContext(node));}
return Promise.all(promises).then(this._eventListenersView.addObjects.bind(this._eventListenersView)).then(this._showFrameworkListenersChanged.bind(this));}
toolbarItems(){return this._toolbarItems;}
_onDispatchFilterTypeChanged(event){this._dispatchFilterBySetting.set(event.target.value);}
_showFrameworkListenersChanged(){const dispatchFilter=this._dispatchFilterBySetting.get();const showPassive=dispatchFilter===DispatchFilterBy.All||dispatchFilter===DispatchFilterBy.Passive;const showBlocking=dispatchFilter===DispatchFilterBy.All||dispatchFilter===DispatchFilterBy.Blocking;this._eventListenersView.showFrameworkListeners(this._showFrameworkListenersSetting.get(),showPassive,showBlocking);}
_windowObjectInNodeContext(node){const executionContexts=node.domModel().runtimeModel().executionContexts();let context=null;if(node.frameId()){for(let i=0;i<executionContexts.length;++i){const executionContext=executionContexts[i];if(executionContext.frameId===node.frameId()&&executionContext.isDefault){context=executionContext;}}}else{context=executionContexts[0];}
return context.evaluate({expression:'self',objectGroup:_objectGroupName,includeCommandLineAPI:false,silent:true,returnByValue:false,generatePreview:false},false,false).then(result=>result.object||null);}
_eventListenersArrivedForTest(){}}
export const DispatchFilterBy={All:'All',Blocking:'Blocking',Passive:'Passive'};export const _objectGroupName='event-listeners-panel';self.Elements=self.Elements||{};Elements=Elements||{};Elements.EventListenersWidget=EventListenersWidget;Elements.EventListenersWidget.DispatchFilterBy=DispatchFilterBy;Elements.EventListenersWidget._objectGroupName=_objectGroupName;export default class ElementsTreeOutline extends UI.TreeOutline{constructor(omitRootDOMNode,selectEnabled,hideGutter){super();this._treeElementSymbol=Symbol('treeElement');const shadowContainer=createElement('div');this._shadowRoot=UI.createShadowRootWithCoreStyles(shadowContainer,'elements/elementsTreeOutline.css');const outlineDisclosureElement=this._shadowRoot.createChild('div','elements-disclosure');this._element=this.element;this._element.classList.add('elements-tree-outline','source-code');if(hideGutter){this._element.classList.add('elements-hide-gutter');}
UI.ARIAUtils.setAccessibleName(this._element,Common.UIString('Page DOM'));this._element.addEventListener('focusout',this._onfocusout.bind(this),false);this._element.addEventListener('mousedown',this._onmousedown.bind(this),false);this._element.addEventListener('mousemove',this._onmousemove.bind(this),false);this._element.addEventListener('mouseleave',this._onmouseleave.bind(this),false);this._element.addEventListener('dragstart',this._ondragstart.bind(this),false);this._element.addEventListener('dragover',this._ondragover.bind(this),false);this._element.addEventListener('dragleave',this._ondragleave.bind(this),false);this._element.addEventListener('drop',this._ondrop.bind(this),false);this._element.addEventListener('dragend',this._ondragend.bind(this),false);this._element.addEventListener('contextmenu',this._contextMenuEventFired.bind(this),false);this._element.addEventListener('clipboard-beforecopy',this._onBeforeCopy.bind(this),false);this._element.addEventListener('clipboard-copy',this._onCopyOrCut.bind(this,false),false);this._element.addEventListener('clipboard-cut',this._onCopyOrCut.bind(this,true),false);this._element.addEventListener('clipboard-paste',this._onPaste.bind(this),false);this._element.addEventListener('keydown',this._onKeyDown.bind(this),false);outlineDisclosureElement.appendChild(this._element);this.element=shadowContainer;this._includeRootDOMNode=!omitRootDOMNode;this._selectEnabled=selectEnabled;this._rootDOMNode=null;this._selectedDOMNode=null;this._visible=false;this._popoverHelper=new UI.PopoverHelper(this._element,this._getPopoverRequest.bind(this));this._popoverHelper.setHasPadding(true);this._popoverHelper.setTimeout(0,100);this._updateRecords=new Map();this._treeElementsBeingUpdated=new Set();this._showHTMLCommentsSetting=Common.moduleSetting('showHTMLComments');this._showHTMLCommentsSetting.addChangeListener(this._onShowHTMLCommentsChange.bind(this));this.useLightSelectionColor();}
static forDOMModel(domModel){return domModel[ElementsTreeOutline._treeOutlineSymbol]||null;}
_onShowHTMLCommentsChange(){const selectedNode=this.selectedDOMNode();if(selectedNode&&selectedNode.nodeType()===Node.COMMENT_NODE&&!this._showHTMLCommentsSetting.get()){this.selectDOMNode(selectedNode.parentNode);}
this.update();}
treeElementSymbol(){return this._treeElementSymbol;}
setWordWrap(wrap){this._element.classList.toggle('elements-tree-nowrap',!wrap);}
setMultilineEditing(multilineEditing){this._multilineEditing=multilineEditing;}
visibleWidth(){return this._visibleWidth;}
setVisibleWidth(width){this._visibleWidth=width;if(this._multilineEditing){this._multilineEditing.resize();}}
_setClipboardData(data){if(this._clipboardNodeData){const treeElement=this.findTreeElement(this._clipboardNodeData.node);if(treeElement){treeElement.setInClipboard(false);}
delete this._clipboardNodeData;}
if(data){const treeElement=this.findTreeElement(data.node);if(treeElement){treeElement.setInClipboard(true);}
this._clipboardNodeData=data;}}
resetClipboardIfNeeded(removedNode){if(this._clipboardNodeData&&this._clipboardNodeData.node===removedNode){this._setClipboardData(null);}}
_onBeforeCopy(event){event.handled=true;}
_onCopyOrCut(isCut,event){this._setClipboardData(null);const originalEvent=event['original'];if(originalEvent.target.hasSelection()){return;}
if(UI.isEditing()){return;}
const targetNode=this.selectedDOMNode();if(!targetNode){return;}
originalEvent.clipboardData.clearData();event.handled=true;this.performCopyOrCut(isCut,targetNode);}
performCopyOrCut(isCut,node){if(isCut&&(node.isShadowRoot()||node.ancestorUserAgentShadowRoot())){return;}
node.copyNode();this._setClipboardData({node:node,isCut:isCut});}
canPaste(targetNode){if(targetNode.isShadowRoot()||targetNode.ancestorUserAgentShadowRoot()){return false;}
if(!this._clipboardNodeData){return false;}
const node=this._clipboardNodeData.node;if(this._clipboardNodeData.isCut&&(node===targetNode||node.isAncestor(targetNode))){return false;}
if(targetNode.domModel()!==node.domModel()){return false;}
return true;}
pasteNode(targetNode){if(this.canPaste(targetNode)){this._performPaste(targetNode);}}
_onPaste(event){if(UI.isEditing()){return;}
const targetNode=this.selectedDOMNode();if(!targetNode||!this.canPaste(targetNode)){return;}
event.handled=true;this._performPaste(targetNode);}
_performPaste(targetNode){if(this._clipboardNodeData.isCut){this._clipboardNodeData.node.moveTo(targetNode,null,expandCallback.bind(this));this._setClipboardData(null);}else{this._clipboardNodeData.node.copyTo(targetNode,null,expandCallback.bind(this));}
function expandCallback(error,nodeId){if(error){return;}
const pastedNode=targetNode.domModel().nodeForId(nodeId);if(!pastedNode){return;}
this.selectDOMNode(pastedNode);}}
setVisible(visible){if(visible===this._visible){return;}
this._visible=visible;if(!this._visible){this._popoverHelper.hidePopover();if(this._multilineEditing){this._multilineEditing.cancel();}
return;}
this.runPendingUpdates();if(this._selectedDOMNode){this._revealAndSelectNode(this._selectedDOMNode,false);}}
get rootDOMNode(){return this._rootDOMNode;}
set rootDOMNode(x){if(this._rootDOMNode===x){return;}
this._rootDOMNode=x;this._isXMLMimeType=x&&x.isXMLNode();this.update();}
get isXMLMimeType(){return this._isXMLMimeType;}
selectedDOMNode(){return this._selectedDOMNode;}
selectDOMNode(node,focus){if(this._selectedDOMNode===node){this._revealAndSelectNode(node,!focus);return;}
this._selectedDOMNode=node;this._revealAndSelectNode(node,!focus);if(this._selectedDOMNode===node){this._selectedNodeChanged(!!focus);}}
editing(){const node=this.selectedDOMNode();if(!node){return false;}
const treeElement=this.findTreeElement(node);if(!treeElement){return false;}
return treeElement.isEditing()||false;}
update(){const selectedNode=this.selectedDOMNode();this.removeChildren();if(!this.rootDOMNode){return;}
if(this._includeRootDOMNode){const treeElement=this._createElementTreeElement(this.rootDOMNode);this.appendChild(treeElement);}else{const children=this._visibleChildren(this.rootDOMNode);for(const child of children){const treeElement=this._createElementTreeElement(child);this.appendChild(treeElement);}}
if(selectedNode){this._revealAndSelectNode(selectedNode,true);}}
_selectedNodeChanged(focus){this.dispatchEventToListeners(ElementsTreeOutline.Events.SelectedNodeChanged,{node:this._selectedDOMNode,focus:focus});}
_fireElementsTreeUpdated(nodes){this.dispatchEventToListeners(ElementsTreeOutline.Events.ElementsTreeUpdated,nodes);}
findTreeElement(node){let treeElement=this._lookUpTreeElement(node);if(!treeElement&&node.nodeType()===Node.TEXT_NODE){treeElement=this._lookUpTreeElement(node.parentNode);}
return(treeElement);}
_lookUpTreeElement(node){if(!node){return null;}
const cachedElement=node[this._treeElementSymbol];if(cachedElement){return cachedElement;}
const ancestors=[];let currentNode;for(currentNode=node.parentNode;currentNode;currentNode=currentNode.parentNode){ancestors.push(currentNode);if(currentNode[this._treeElementSymbol])
{break;}}
if(!currentNode){return null;}
for(let i=ancestors.length-1;i>=0;--i){const child=ancestors[i-1]||node;const treeElement=ancestors[i][this._treeElementSymbol];if(treeElement){treeElement.onpopulate();if(child.index>=treeElement.expandedChildrenLimit()){this.setExpandedChildrenLimit(treeElement,child.index+1);}}}
return node[this._treeElementSymbol];}
createTreeElementFor(node){let treeElement=this.findTreeElement(node);if(treeElement){return treeElement;}
if(!node.parentNode){return null;}
treeElement=this.createTreeElementFor(node.parentNode);return treeElement?this._showChild(treeElement,node):null;}
set suppressRevealAndSelect(x){if(this._suppressRevealAndSelect===x){return;}
this._suppressRevealAndSelect=x;}
_revealAndSelectNode(node,omitFocus){if(this._suppressRevealAndSelect){return;}
if(!this._includeRootDOMNode&&node===this.rootDOMNode&&this.rootDOMNode){node=this.rootDOMNode.firstChild;}
if(!node){return;}
const treeElement=this.createTreeElementFor(node);if(!treeElement){return;}
treeElement.revealAndSelect(omitFocus);}
_treeElementFromEvent(event){const scrollContainer=this.element.parentElement;const x=scrollContainer.totalOffsetLeft()+scrollContainer.offsetWidth-36;const y=event.pageY;const elementUnderMouse=this.treeElementFromPoint(x,y);const elementAboveMouse=this.treeElementFromPoint(x,y-2);let element;if(elementUnderMouse===elementAboveMouse){element=elementUnderMouse;}else{element=this.treeElementFromPoint(x,y+2);}
return element;}
_getPopoverRequest(event){let link=event.target;while(link&&!link[Elements.ElementsTreeElement.HrefSymbol]){link=link.parentElementOrShadowHost();}
if(!link){return null;}
return{box:link.boxInWindow(),show:async popover=>{const listItem=link.enclosingNodeOrSelfWithNodeName('li');if(!listItem){return false;}
const node=(listItem.treeElement).node();const precomputedFeatures=await Components.ImagePreview.loadDimensionsForNode(node);const preview=await Components.ImagePreview.build(node.domModel().target(),link[Elements.ElementsTreeElement.HrefSymbol],true,{precomputedFeatures});if(preview){popover.contentElement.appendChild(preview);}
return!!preview;}};}
_onfocusout(event){SDK.OverlayModel.hideDOMNodeHighlight();}
_onmousedown(event){const element=this._treeElementFromEvent(event);if(!element||element.isEventWithinDisclosureTriangle(event)){return;}
element.select();}
setHoverEffect(treeElement){if(this._previousHoveredElement===treeElement){return;}
if(this._previousHoveredElement){this._previousHoveredElement.hovered=false;delete this._previousHoveredElement;}
if(treeElement){treeElement.hovered=true;this._previousHoveredElement=treeElement;}}
_onmousemove(event){const element=this._treeElementFromEvent(event);if(element&&this._previousHoveredElement===element){return;}
this.setHoverEffect(element);this._highlightTreeElement((element),!UI.KeyboardShortcut.eventHasCtrlOrMeta(event));}
_highlightTreeElement(element,showInfo){if(element instanceof Elements.ElementsTreeElement){element.node().domModel().overlayModel().highlightInOverlay({node:element.node()},'all',showInfo);return;}
if(element instanceof ShortcutTreeElement){element.domModel().overlayModel().highlightInOverlay({deferredNode:element.deferredNode()},'all',showInfo);}}
_onmouseleave(event){this.setHoverEffect(null);SDK.OverlayModel.hideDOMNodeHighlight();}
_ondragstart(event){if(event.target.hasSelection()){return false;}
if(event.target.nodeName==='A'){return false;}
const treeElement=this._validDragSourceOrTarget(this._treeElementFromEvent(event));if(!treeElement){return false;}
if(treeElement.node().nodeName()==='BODY'||treeElement.node().nodeName()==='HEAD'){return false;}
event.dataTransfer.setData('text/plain',treeElement.listItemElement.textContent.replace(/\u200b/g,''));event.dataTransfer.effectAllowed='copyMove';this._treeElementBeingDragged=treeElement;SDK.OverlayModel.hideDOMNodeHighlight();return true;}
_ondragover(event){if(!this._treeElementBeingDragged){return false;}
const treeElement=this._validDragSourceOrTarget(this._treeElementFromEvent(event));if(!treeElement){return false;}
let node=treeElement.node();while(node){if(node===this._treeElementBeingDragged._node){return false;}
node=node.parentNode;}
treeElement.listItemElement.classList.add('elements-drag-over');this._dragOverTreeElement=treeElement;event.preventDefault();event.dataTransfer.dropEffect='move';return false;}
_ondragleave(event){this._clearDragOverTreeElementMarker();event.preventDefault();return false;}
_validDragSourceOrTarget(treeElement){if(!treeElement){return null;}
if(!(treeElement instanceof Elements.ElementsTreeElement)){return null;}
const elementsTreeElement=(treeElement);const node=elementsTreeElement.node();if(!node.parentNode||node.parentNode.nodeType()!==Node.ELEMENT_NODE){return null;}
return elementsTreeElement;}
_ondrop(event){event.preventDefault();const treeElement=this._treeElementFromEvent(event);if(treeElement instanceof Elements.ElementsTreeElement){this._doMove(treeElement);}}
_doMove(treeElement){if(!this._treeElementBeingDragged){return;}
let parentNode;let anchorNode;if(treeElement.isClosingTag()){parentNode=treeElement.node();}else{const dragTargetNode=treeElement.node();parentNode=dragTargetNode.parentNode;anchorNode=dragTargetNode;}
const wasExpanded=this._treeElementBeingDragged.expanded;this._treeElementBeingDragged._node.moveTo(parentNode,anchorNode,this.selectNodeAfterEdit.bind(this,wasExpanded));delete this._treeElementBeingDragged;}
_ondragend(event){event.preventDefault();this._clearDragOverTreeElementMarker();delete this._treeElementBeingDragged;}
_clearDragOverTreeElementMarker(){if(this._dragOverTreeElement){this._dragOverTreeElement.listItemElement.classList.remove('elements-drag-over');delete this._dragOverTreeElement;}}
_contextMenuEventFired(event){const treeElement=this._treeElementFromEvent(event);if(treeElement instanceof Elements.ElementsTreeElement){this.showContextMenu(treeElement,event);}}
showContextMenu(treeElement,event){if(UI.isEditing()){return;}
const contextMenu=new UI.ContextMenu(event);const isPseudoElement=!!treeElement.node().pseudoType();const isTag=treeElement.node().nodeType()===Node.ELEMENT_NODE&&!isPseudoElement;let textNode=event.target.enclosingNodeOrSelfWithClass('webkit-html-text-node');if(textNode&&textNode.classList.contains('bogus')){textNode=null;}
const commentNode=event.target.enclosingNodeOrSelfWithClass('webkit-html-comment');contextMenu.saveSection().appendItem(ls`Store as global variable`,this._saveNodeToTempVariable.bind(this,treeElement.node()));if(textNode){treeElement.populateTextContextMenu(contextMenu,textNode);}else if(isTag){treeElement.populateTagContextMenu(contextMenu,event);}else if(commentNode){treeElement.populateNodeContextMenu(contextMenu);}else if(isPseudoElement){treeElement.populateScrollIntoView(contextMenu);}
contextMenu.appendApplicableItems(treeElement.node());contextMenu.show();}
async _saveNodeToTempVariable(node){const remoteObjectForConsole=await node.resolveToObject();await SDK.consoleModel.saveToTempVariable(UI.context.flavor(SDK.ExecutionContext),remoteObjectForConsole);}
runPendingUpdates(){this._updateModifiedNodes();}
_onKeyDown(event){const keyboardEvent=(event);if(UI.isEditing()){return;}
const node=this.selectedDOMNode();if(!node){return;}
const treeElement=node[this._treeElementSymbol];if(!treeElement){return;}
if(UI.KeyboardShortcut.eventHasCtrlOrMeta(keyboardEvent)&&node.parentNode){if(keyboardEvent.key==='ArrowUp'&&node.previousSibling){node.moveTo(node.parentNode,node.previousSibling,this.selectNodeAfterEdit.bind(this,treeElement.expanded));keyboardEvent.consume(true);return;}
if(keyboardEvent.key==='ArrowDown'&&node.nextSibling){node.moveTo(node.parentNode,node.nextSibling.nextSibling,this.selectNodeAfterEdit.bind(this,treeElement.expanded));keyboardEvent.consume(true);return;}}}
toggleEditAsHTML(node,startEditing,callback){const treeElement=node[this._treeElementSymbol];if(!treeElement||!treeElement.hasEditableNode()){return;}
if(node.pseudoType()){return;}
const parentNode=node.parentNode;const index=node.index;const wasExpanded=treeElement.expanded;treeElement.toggleEditAsHTML(editingFinished.bind(this),startEditing);function editingFinished(success){if(callback){callback();}
if(!success){return;}
this.runPendingUpdates();const newNode=parentNode?parentNode.children()[index]||parentNode:null;if(!newNode){return;}
this.selectDOMNode(newNode,true);if(wasExpanded){const newTreeItem=this.findTreeElement(newNode);if(newTreeItem){newTreeItem.expand();}}}}
selectNodeAfterEdit(wasExpanded,error,newNode){if(error){return null;}
this.runPendingUpdates();if(!newNode){return null;}
this.selectDOMNode(newNode,true);const newTreeItem=this.findTreeElement(newNode);if(wasExpanded){if(newTreeItem){newTreeItem.expand();}}
return newTreeItem;}
async toggleHideElement(node){const pseudoType=node.pseudoType();const effectiveNode=pseudoType?node.parentNode:node;if(!effectiveNode){return;}
const hidden=node.marker('hidden-marker');const object=await effectiveNode.resolveToObject('');if(!object){return;}
await object.callFunction(toggleClassAndInjectStyleRule,[{value:pseudoType},{value:!hidden}]);object.release();node.setMarker('hidden-marker',hidden?null:true);function toggleClassAndInjectStyleRule(pseudoType,hidden){const classNamePrefix='__web-inspector-hide';const classNameSuffix='-shortcut__';const styleTagId='__web-inspector-hide-shortcut-style__';const selectors=[];selectors.push('.__web-inspector-hide-shortcut__');selectors.push('.__web-inspector-hide-shortcut__ *');selectors.push('.__web-inspector-hidebefore-shortcut__::before');selectors.push('.__web-inspector-hideafter-shortcut__::after');const selector=selectors.join(', ');const ruleBody='    visibility: hidden !important;';const rule='\n'+selector+'\n{\n'+ruleBody+'\n}\n';const className=classNamePrefix+(pseudoType||'')+classNameSuffix;this.classList.toggle(className,hidden);let localRoot=this;while(localRoot.parentNode){localRoot=localRoot.parentNode;}
if(localRoot.nodeType===Node.DOCUMENT_NODE){localRoot=document.head;}
let style=localRoot.querySelector('style#'+styleTagId);if(style){return;}
style=document.createElement('style');style.id=styleTagId;style.textContent=rule;localRoot.appendChild(style);}}
isToggledToHidden(node){return!!node.marker('hidden-marker');}
_reset(){this.rootDOMNode=null;this.selectDOMNode(null,false);this._popoverHelper.hidePopover();delete this._clipboardNodeData;SDK.OverlayModel.hideDOMNodeHighlight();this._updateRecords.clear();}
wireToDOMModel(domModel){domModel[ElementsTreeOutline._treeOutlineSymbol]=this;domModel.addEventListener(SDK.DOMModel.Events.MarkersChanged,this._markersChanged,this);domModel.addEventListener(SDK.DOMModel.Events.NodeInserted,this._nodeInserted,this);domModel.addEventListener(SDK.DOMModel.Events.NodeRemoved,this._nodeRemoved,this);domModel.addEventListener(SDK.DOMModel.Events.AttrModified,this._attributeModified,this);domModel.addEventListener(SDK.DOMModel.Events.AttrRemoved,this._attributeRemoved,this);domModel.addEventListener(SDK.DOMModel.Events.CharacterDataModified,this._characterDataModified,this);domModel.addEventListener(SDK.DOMModel.Events.DocumentUpdated,this._documentUpdated,this);domModel.addEventListener(SDK.DOMModel.Events.ChildNodeCountUpdated,this._childNodeCountUpdated,this);domModel.addEventListener(SDK.DOMModel.Events.DistributedNodesChanged,this._distributedNodesChanged,this);}
unwireFromDOMModel(domModel){domModel.removeEventListener(SDK.DOMModel.Events.MarkersChanged,this._markersChanged,this);domModel.removeEventListener(SDK.DOMModel.Events.NodeInserted,this._nodeInserted,this);domModel.removeEventListener(SDK.DOMModel.Events.NodeRemoved,this._nodeRemoved,this);domModel.removeEventListener(SDK.DOMModel.Events.AttrModified,this._attributeModified,this);domModel.removeEventListener(SDK.DOMModel.Events.AttrRemoved,this._attributeRemoved,this);domModel.removeEventListener(SDK.DOMModel.Events.CharacterDataModified,this._characterDataModified,this);domModel.removeEventListener(SDK.DOMModel.Events.DocumentUpdated,this._documentUpdated,this);domModel.removeEventListener(SDK.DOMModel.Events.ChildNodeCountUpdated,this._childNodeCountUpdated,this);domModel.removeEventListener(SDK.DOMModel.Events.DistributedNodesChanged,this._distributedNodesChanged,this);delete domModel[ElementsTreeOutline._treeOutlineSymbol];}
_addUpdateRecord(node){let record=this._updateRecords.get(node);if(!record){record=new UpdateRecord();this._updateRecords.set(node,record);}
return record;}
_updateRecordForHighlight(node){if(!this._visible){return null;}
return this._updateRecords.get(node)||null;}
_documentUpdated(event){const domModel=(event.data);this._reset();if(domModel.existingDocument()){this.rootDOMNode=domModel.existingDocument();}}
_attributeModified(event){const node=(event.data.node);this._addUpdateRecord(node).attributeModified(event.data.name);this._updateModifiedNodesSoon();}
_attributeRemoved(event){const node=(event.data.node);this._addUpdateRecord(node).attributeRemoved(event.data.name);this._updateModifiedNodesSoon();}
_characterDataModified(event){const node=(event.data);this._addUpdateRecord(node).charDataModified();if(node.parentNode&&node.parentNode.firstChild===node.parentNode.lastChild){this._addUpdateRecord(node.parentNode).childrenModified();}
this._updateModifiedNodesSoon();}
_nodeInserted(event){const node=(event.data);this._addUpdateRecord((node.parentNode)).nodeInserted(node);this._updateModifiedNodesSoon();}
_nodeRemoved(event){const node=(event.data.node);const parentNode=(event.data.parent);this.resetClipboardIfNeeded(node);this._addUpdateRecord(parentNode).nodeRemoved(node);this._updateModifiedNodesSoon();}
_childNodeCountUpdated(event){const node=(event.data);this._addUpdateRecord(node).childrenModified();this._updateModifiedNodesSoon();}
_distributedNodesChanged(event){const node=(event.data);this._addUpdateRecord(node).childrenModified();this._updateModifiedNodesSoon();}
_updateModifiedNodesSoon(){if(!this._updateRecords.size){return;}
if(this._updateModifiedNodesTimeout){return;}
this._updateModifiedNodesTimeout=setTimeout(this._updateModifiedNodes.bind(this),50);}
_updateModifiedNodes(){if(this._updateModifiedNodesTimeout){clearTimeout(this._updateModifiedNodesTimeout);delete this._updateModifiedNodesTimeout;}
const updatedNodes=this._updateRecords.keysArray();const hidePanelWhileUpdating=updatedNodes.length>10;let treeOutlineContainerElement;let originalScrollTop;if(hidePanelWhileUpdating){treeOutlineContainerElement=this.element.parentNode;originalScrollTop=treeOutlineContainerElement?treeOutlineContainerElement.scrollTop:0;this._element.classList.add('hidden');}
if(this._rootDOMNode&&this._updateRecords.get(this._rootDOMNode)&&this._updateRecords.get(this._rootDOMNode).hasChangedChildren()){this.update();}else{for(const node of this._updateRecords.keys()){if(this._updateRecords.get(node).hasChangedChildren()){this._updateModifiedParentNode(node);}else{this._updateModifiedNode(node);}}}
if(hidePanelWhileUpdating){this._element.classList.remove('hidden');if(originalScrollTop){treeOutlineContainerElement.scrollTop=originalScrollTop;}}
this._updateRecords.clear();this._fireElementsTreeUpdated(updatedNodes);}
_updateModifiedNode(node){const treeElement=this.findTreeElement(node);if(treeElement){treeElement.updateTitle(this._updateRecordForHighlight(node));}}
_updateModifiedParentNode(node){const parentTreeElement=this.findTreeElement(node);if(parentTreeElement){parentTreeElement.setExpandable(this._hasVisibleChildren(node));parentTreeElement.updateTitle(this._updateRecordForHighlight(node));if(parentTreeElement.populated){this._updateChildren(parentTreeElement);}}}
populateTreeElement(treeElement){if(treeElement.childCount()||!treeElement.isExpandable()){return Promise.resolve();}
return new Promise(resolve=>{treeElement.node().getChildNodes(()=>{treeElement.populated=true;this._updateModifiedParentNode(treeElement.node());resolve();});});}
_createElementTreeElement(node,closingTag){const treeElement=new Elements.ElementsTreeElement(node,closingTag);treeElement.setExpandable(!closingTag&&this._hasVisibleChildren(node));if(node.nodeType()===Node.ELEMENT_NODE&&node.parentNode&&node.parentNode.nodeType()===Node.DOCUMENT_NODE&&!node.parentNode.parentNode){treeElement.setCollapsible(false);}
treeElement.selectable=this._selectEnabled;return treeElement;}
_showChild(treeElement,child){if(treeElement.isClosingTag()){return null;}
const index=this._visibleChildren(treeElement.node()).indexOf(child);if(index===-1){return null;}
if(index>=treeElement.expandedChildrenLimit()){this.setExpandedChildrenLimit(treeElement,index+1);}
return(treeElement.childAt(index));}
_visibleChildren(node){let visibleChildren=Elements.ElementsTreeElement.visibleShadowRoots(node);const contentDocument=node.contentDocument();if(contentDocument){visibleChildren.push(contentDocument);}
const importedDocument=node.importedDocument();if(importedDocument){visibleChildren.push(importedDocument);}
const templateContent=node.templateContent();if(templateContent){visibleChildren.push(templateContent);}
const markerPseudoElement=node.markerPseudoElement();if(markerPseudoElement){visibleChildren.push(markerPseudoElement);}
const beforePseudoElement=node.beforePseudoElement();if(beforePseudoElement){visibleChildren.push(beforePseudoElement);}
if(node.childNodeCount()){let children=node.children()||[];if(!this._showHTMLCommentsSetting.get()){children=children.filter(n=>n.nodeType()!==Node.COMMENT_NODE);}
visibleChildren=visibleChildren.concat(children);}
const afterPseudoElement=node.afterPseudoElement();if(afterPseudoElement){visibleChildren.push(afterPseudoElement);}
return visibleChildren;}
_hasVisibleChildren(node){if(node.isIframe()){return true;}
if(node.isPortal()){return true;}
if(node.contentDocument()){return true;}
if(node.importedDocument()){return true;}
if(node.templateContent()){return true;}
if(Elements.ElementsTreeElement.visibleShadowRoots(node).length){return true;}
if(node.hasPseudoElements()){return true;}
if(node.isInsertionPoint()){return true;}
return!!node.childNodeCount()&&!Elements.ElementsTreeElement.canShowInlineText(node);}
_createExpandAllButtonTreeElement(treeElement){const button=UI.createTextButton('',handleLoadAllChildren.bind(this));button.value='';const expandAllButtonElement=new UI.TreeElement(button);expandAllButtonElement.selectable=false;expandAllButtonElement.expandAllButton=true;expandAllButtonElement.button=button;return expandAllButtonElement;function handleLoadAllChildren(event){const visibleChildCount=this._visibleChildren(treeElement.node()).length;this.setExpandedChildrenLimit(treeElement,Math.max(visibleChildCount,treeElement.expandedChildrenLimit()+Elements.ElementsTreeElement.InitialChildrenLimit));event.consume();}}
setExpandedChildrenLimit(treeElement,expandedChildrenLimit){if(treeElement.expandedChildrenLimit()===expandedChildrenLimit){return;}
treeElement.setExpandedChildrenLimit(expandedChildrenLimit);if(treeElement.treeOutline&&!this._treeElementsBeingUpdated.has(treeElement)){this._updateModifiedParentNode(treeElement.node());}}
_updateChildren(treeElement){if(!treeElement.isExpandable()){const selectedTreeElement=treeElement.treeOutline.selectedTreeElement;if(selectedTreeElement&&selectedTreeElement.hasAncestor(treeElement)){treeElement.select(true);}
treeElement.removeChildren();return;}
console.assert(!treeElement.isClosingTag());this._innerUpdateChildren(treeElement);}
insertChildElement(treeElement,child,index,closingTag){const newElement=this._createElementTreeElement(child,closingTag);treeElement.insertChild(newElement,index);return newElement;}
_moveChild(treeElement,child,targetIndex){if(treeElement.indexOfChild(child)===targetIndex){return;}
const wasSelected=child.selected;if(child.parent){child.parent.removeChild(child);}
treeElement.insertChild(child,targetIndex);if(wasSelected){child.select();}}
_innerUpdateChildren(treeElement){if(this._treeElementsBeingUpdated.has(treeElement)){return;}
this._treeElementsBeingUpdated.add(treeElement);const node=treeElement.node();const visibleChildren=this._visibleChildren(node);const visibleChildrenSet=new Set(visibleChildren);const existingTreeElements=new Map();for(let i=treeElement.childCount()-1;i>=0;--i){const existingTreeElement=treeElement.childAt(i);if(!(existingTreeElement instanceof Elements.ElementsTreeElement)){treeElement.removeChildAtIndex(i);continue;}
const elementsTreeElement=(existingTreeElement);const existingNode=elementsTreeElement.node();if(visibleChildrenSet.has(existingNode)){existingTreeElements.set(existingNode,existingTreeElement);continue;}
treeElement.removeChildAtIndex(i);}
for(let i=0;i<visibleChildren.length&&i<treeElement.expandedChildrenLimit();++i){const child=visibleChildren[i];const existingTreeElement=existingTreeElements.get(child)||this.findTreeElement(child);if(existingTreeElement&&existingTreeElement!==treeElement){this._moveChild(treeElement,existingTreeElement,i);}else{const newElement=this.insertChildElement(treeElement,child,i);if(this._updateRecordForHighlight(node)&&treeElement.expanded){Elements.ElementsTreeElement.animateOnDOMUpdate(newElement);}
if(treeElement.childCount()>treeElement.expandedChildrenLimit()){this.setExpandedChildrenLimit(treeElement,treeElement.expandedChildrenLimit()+1);}}}
const expandedChildCount=treeElement.childCount();if(visibleChildren.length>expandedChildCount){const targetButtonIndex=expandedChildCount;if(!treeElement.expandAllButtonElement){treeElement.expandAllButtonElement=this._createExpandAllButtonTreeElement(treeElement);}
treeElement.insertChild(treeElement.expandAllButtonElement,targetButtonIndex);treeElement.expandAllButtonElement.button.textContent=Common.UIString('Show All Nodes (%d More)',visibleChildren.length-expandedChildCount);}else if(treeElement.expandAllButtonElement){delete treeElement.expandAllButtonElement;}
if(node.isInsertionPoint()){for(const distributedNode of node.distributedNodes()){treeElement.appendChild(new ShortcutTreeElement(distributedNode));}}
if(node.nodeType()===Node.ELEMENT_NODE&&treeElement.isExpandable()){this.insertChildElement(treeElement,node,treeElement.childCount(),true);}
this._treeElementsBeingUpdated.delete(treeElement);}
_markersChanged(event){const node=(event.data);const treeElement=node[this._treeElementSymbol];if(treeElement){treeElement.updateDecorations();}}}
ElementsTreeOutline._treeOutlineSymbol=Symbol('treeOutline');ElementsTreeOutline.Events={SelectedNodeChanged:Symbol('SelectedNodeChanged'),ElementsTreeUpdated:Symbol('ElementsTreeUpdated')};export const MappedCharToEntity={'\xA0':'nbsp','\x93':'#147','\xAD':'shy','\u2002':'ensp','\u2003':'emsp','\u2009':'thinsp','\u200a':'#8202','\u200b':'#8203','\u200c':'zwnj','\u200d':'zwj','\u200e':'lrm','\u200f':'rlm','\u202a':'#8234','\u202b':'#8235','\u202c':'#8236','\u202d':'#8237','\u202e':'#8238','\ufeff':'#65279'};export class UpdateRecord{attributeModified(attrName){if(this._removedAttributes&&this._removedAttributes.has(attrName)){this._removedAttributes.delete(attrName);}
if(!this._modifiedAttributes){this._modifiedAttributes=(new Set());}
this._modifiedAttributes.add(attrName);}
attributeRemoved(attrName){if(this._modifiedAttributes&&this._modifiedAttributes.has(attrName)){this._modifiedAttributes.delete(attrName);}
if(!this._removedAttributes){this._removedAttributes=(new Set());}
this._removedAttributes.add(attrName);}
nodeInserted(node){this._hasChangedChildren=true;}
nodeRemoved(node){this._hasChangedChildren=true;this._hasRemovedChildren=true;}
charDataModified(){this._charDataModified=true;}
childrenModified(){this._hasChangedChildren=true;}
isAttributeModified(attributeName){return this._modifiedAttributes&&this._modifiedAttributes.has(attributeName);}
hasRemovedAttributes(){return!!this._removedAttributes&&!!this._removedAttributes.size;}
isCharDataModified(){return!!this._charDataModified;}
hasChangedChildren(){return!!this._hasChangedChildren;}
hasRemovedChildren(){return!!this._hasRemovedChildren;}}
export class Renderer{async render(object){let node;if(object instanceof SDK.DOMNode){node=(object);}else if(object instanceof SDK.DeferredDOMNode){node=await((object)).resolvePromise();}
if(!node){return null;}
const treeOutline=new ElementsTreeOutline(false,true,true);treeOutline.rootDOMNode=node;if(!treeOutline.firstChild().isExpandable()){treeOutline._element.classList.add('single-node');}
treeOutline.setVisible(true);treeOutline.element.treeElementForTest=treeOutline.firstChild();treeOutline.setShowSelectionOnKeyboardFocus(true,true);return{node:treeOutline.element,tree:treeOutline};}}
export class ShortcutTreeElement extends UI.TreeElement{constructor(nodeShortcut){super('');this.listItemElement.createChild('div','selection fill');const title=this.listItemElement.createChild('span','elements-tree-shortcut-title');let text=nodeShortcut.nodeName.toLowerCase();if(nodeShortcut.nodeType===Node.ELEMENT_NODE){text='<'+text+'>';}
title.textContent='\u21AA '+text;const link=Elements.DOMLinkifier.linkifyDeferredNodeReference(nodeShortcut.deferredNode);this.listItemElement.createTextChild(' ');link.classList.add('elements-tree-shortcut-link');link.textContent=Common.UIString('reveal');this.listItemElement.appendChild(link);this._nodeShortcut=nodeShortcut;}
get hovered(){return this._hovered;}
set hovered(x){if(this._hovered===x){return;}
this._hovered=x;this.listItemElement.classList.toggle('hovered',x);}
deferredNode(){return this._nodeShortcut.deferredNode;}
domModel(){return this._nodeShortcut.deferredNode.domModel();}
onselect(selectedByUser){if(!selectedByUser){return true;}
this._nodeShortcut.deferredNode.highlight();this._nodeShortcut.deferredNode.resolve(resolved.bind(this));function resolved(node){if(node){this.treeOutline._selectedDOMNode=node;this.treeOutline._selectedNodeChanged();}}
return true;}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.ElementsTreeOutline=ElementsTreeOutline;Elements.ElementsTreeOutline.MappedCharToEntity=MappedCharToEntity;Elements.ElementsTreeOutline.UpdateRecord=UpdateRecord;Elements.ElementsTreeOutline.Renderer=Renderer;Elements.ElementsTreeOutline.ShortcutTreeElement=ShortcutTreeElement;Elements.ElementsTreeOutline.ClipboardData;export default class ElementsTreeElement extends UI.TreeElement{constructor(node,elementCloseTag){super();this._node=node;this._gutterContainer=this.listItemElement.createChild('div','gutter-container');this._gutterContainer.addEventListener('click',this._showContextMenu.bind(this));const gutterMenuIcon=UI.Icon.create('largeicon-menu','gutter-menu-icon');this._gutterContainer.appendChild(gutterMenuIcon);this._decorationsElement=this._gutterContainer.createChild('div','hidden');this._elementCloseTag=elementCloseTag;if(this._node.nodeType()===Node.ELEMENT_NODE&&!elementCloseTag){this._canAddAttributes=true;}
this._searchQuery=null;this._expandedChildrenLimit=InitialChildrenLimit;this._decorationsThrottler=new Common.Throttler(100);this._htmlEditElement;}
static animateOnDOMUpdate(treeElement){const tagName=treeElement.listItemElement.querySelector('.webkit-html-tag-name');UI.runCSSAnimationOnce(tagName||treeElement.listItemElement,'dom-update-highlight');}
static visibleShadowRoots(node){let roots=node.shadowRoots();if(roots.length&&!Common.moduleSetting('showUAShadowDOM').get()){roots=roots.filter(filter);}
function filter(root){return root.shadowRootType()!==SDK.DOMNode.ShadowRootTypes.UserAgent;}
return roots;}
static canShowInlineText(node){if(node.contentDocument()||node.importedDocument()||node.templateContent()||ElementsTreeElement.visibleShadowRoots(node).length||node.hasPseudoElements()){return false;}
if(node.nodeType()!==Node.ELEMENT_NODE){return false;}
if(!node.firstChild||node.firstChild!==node.lastChild||node.firstChild.nodeType()!==Node.TEXT_NODE){return false;}
const textChild=node.firstChild;const maxInlineTextChildLength=80;if(textChild.nodeValue().length<maxInlineTextChildLength){return true;}
return false;}
static populateForcedPseudoStateItems(contextMenu,node){const pseudoClasses=['active','hover','focus','visited','focus-within'];try{document.querySelector(':focus-visible');pseudoClasses.push('focus-visible');}catch(e){}
const forcedPseudoState=node.domModel().cssModel().pseudoState(node);const stateMenu=contextMenu.debugSection().appendSubMenuItem(Common.UIString('Force state'));for(let i=0;i<pseudoClasses.length;++i){const pseudoClassForced=forcedPseudoState.indexOf(pseudoClasses[i])>=0;stateMenu.defaultSection().appendCheckboxItem(':'+pseudoClasses[i],setPseudoStateCallback.bind(null,pseudoClasses[i],!pseudoClassForced),pseudoClassForced,false);}
function setPseudoStateCallback(pseudoState,enabled){node.domModel().cssModel().forcePseudoState(node,pseudoState,enabled);}}
isClosingTag(){return!!this._elementCloseTag;}
node(){return this._node;}
isEditing(){return!!this._editing;}
highlightSearchResults(searchQuery){if(this._searchQuery!==searchQuery){this._hideSearchHighlight();}
this._searchQuery=searchQuery;this._searchHighlightsVisible=true;this.updateTitle(null,true);}
hideSearchHighlights(){delete this._searchHighlightsVisible;this._hideSearchHighlight();}
_hideSearchHighlight(){if(!this._highlightResult){return;}
function updateEntryHide(entry){switch(entry.type){case'added':entry.node.remove();break;case'changed':entry.node.textContent=entry.oldText;break;}}
for(let i=(this._highlightResult.length-1);i>=0;--i){updateEntryHide(this._highlightResult[i]);}
delete this._highlightResult;}
setInClipboard(inClipboard){if(this._inClipboard===inClipboard){return;}
this._inClipboard=inClipboard;this.listItemElement.classList.toggle('in-clipboard',inClipboard);}
get hovered(){return this._hovered;}
set hovered(x){if(this._hovered===x){return;}
this._hovered=x;if(this.listItemElement){if(x){this._createSelection();this.listItemElement.classList.add('hovered');}else{this.listItemElement.classList.remove('hovered');}}}
expandedChildrenLimit(){return this._expandedChildrenLimit;}
setExpandedChildrenLimit(expandedChildrenLimit){this._expandedChildrenLimit=expandedChildrenLimit;}
_createSelection(){const listItemElement=this.listItemElement;if(!listItemElement){return;}
if(!this.selectionElement){this.selectionElement=createElement('div');this.selectionElement.className='selection fill';this.selectionElement.style.setProperty('margin-left',(-this._computeLeftIndent())+'px');listItemElement.insertBefore(this.selectionElement,listItemElement.firstChild);}}
_createHint(){if(this.listItemElement&&!this._hintElement){this._hintElement=this.listItemElement.createChild('span','selected-hint');const selectedElementCommand='$0';this._hintElement.title=ls`Use ${selectedElementCommand} in the console to refer to this element.`;UI.ARIAUtils.markAsHidden(this._hintElement);}}
onbind(){if(!this._elementCloseTag){this._node[this.treeOutline.treeElementSymbol()]=this;}}
onunbind(){if(this._node[this.treeOutline.treeElementSymbol()]===this){this._node[this.treeOutline.treeElementSymbol()]=null;}}
onattach(){if(this._hovered){this._createSelection();this.listItemElement.classList.add('hovered');}
this.updateTitle();this.listItemElement.draggable=true;}
async onpopulate(){return this.treeOutline.populateTreeElement(this);}
async expandRecursively(){await this._node.getSubtree(-1,true);await super.expandRecursively(Number.MAX_VALUE);}
onexpand(){if(this._elementCloseTag){return;}
this.updateTitle();}
oncollapse(){if(this._elementCloseTag){return;}
this.updateTitle();}
select(omitFocus,selectedByUser){if(this._editing){return false;}
return super.select(omitFocus,selectedByUser);}
onselect(selectedByUser){this.treeOutline.suppressRevealAndSelect=true;this.treeOutline.selectDOMNode(this._node,selectedByUser);if(selectedByUser){this._node.highlight();Host.userMetrics.actionTaken(Host.UserMetrics.Action.ChangeInspectedNodeInElementsPanel);}
this._createSelection();this._createHint();this.treeOutline.suppressRevealAndSelect=false;return true;}
ondelete(){const startTagTreeElement=this.treeOutline.findTreeElement(this._node);startTagTreeElement?startTagTreeElement.remove():this.remove();return true;}
onenter(){if(this._editing){return false;}
this._startEditing();return true;}
selectOnMouseDown(event){super.selectOnMouseDown(event);if(this._editing){return;}
if(event.detail>=2){event.preventDefault();}}
ondblclick(event){if(this._editing||this._elementCloseTag){return false;}
if(this._startEditingTarget((event.target))){return false;}
if(this.isExpandable()&&!this.expanded){this.expand();}
return false;}
hasEditableNode(){return!this._node.isShadowRoot()&&!this._node.ancestorUserAgentShadowRoot();}
_insertInLastAttributePosition(tag,node){if(tag.getElementsByClassName('webkit-html-attribute').length>0){tag.insertBefore(node,tag.lastChild);}else{const nodeName=tag.textContent.match(/^<(.*?)>$/)[1];tag.textContent='';tag.createTextChild('<'+nodeName);tag.appendChild(node);tag.createTextChild('>');}}
_startEditingTarget(eventTarget){if(this.treeOutline.selectedDOMNode()!==this._node){return false;}
if(this._node.nodeType()!==Node.ELEMENT_NODE&&this._node.nodeType()!==Node.TEXT_NODE){return false;}
const textNode=eventTarget.enclosingNodeOrSelfWithClass('webkit-html-text-node');if(textNode){return this._startEditingTextNode(textNode);}
const attribute=eventTarget.enclosingNodeOrSelfWithClass('webkit-html-attribute');if(attribute){return this._startEditingAttribute(attribute,eventTarget);}
const tagName=eventTarget.enclosingNodeOrSelfWithClass('webkit-html-tag-name');if(tagName){return this._startEditingTagName(tagName);}
const newAttribute=eventTarget.enclosingNodeOrSelfWithClass('add-attribute');if(newAttribute){return this._addNewAttribute();}
return false;}
_showContextMenu(event){this.treeOutline.showContextMenu(this,event);}
populateTagContextMenu(contextMenu,event){const treeElement=this._elementCloseTag?this.treeOutline.findTreeElement(this._node):this;contextMenu.editSection().appendItem(Common.UIString('Add attribute'),treeElement._addNewAttribute.bind(treeElement));const attribute=event.target.enclosingNodeOrSelfWithClass('webkit-html-attribute');const newAttribute=event.target.enclosingNodeOrSelfWithClass('add-attribute');if(attribute&&!newAttribute){contextMenu.editSection().appendItem(Common.UIString('Edit attribute'),this._startEditingAttribute.bind(this,attribute,event.target));}
this.populateNodeContextMenu(contextMenu);ElementsTreeElement.populateForcedPseudoStateItems(contextMenu,treeElement.node());this.populateScrollIntoView(contextMenu);contextMenu.viewSection().appendItem(Common.UIString('Focus'),async()=>{await this._node.focus();});}
populateScrollIntoView(contextMenu){contextMenu.viewSection().appendItem(Common.UIString('Scroll into view'),()=>this._node.scrollIntoView());}
populateTextContextMenu(contextMenu,textNode){if(!this._editing){contextMenu.editSection().appendItem(Common.UIString('Edit text'),this._startEditingTextNode.bind(this,textNode));}
this.populateNodeContextMenu(contextMenu);}
populateNodeContextMenu(contextMenu){const isEditable=this.hasEditableNode();if(isEditable&&!this._editing){contextMenu.editSection().appendItem(Common.UIString('Edit as HTML'),this._editAsHTML.bind(this));}
const isShadowRoot=this._node.isShadowRoot();const copyMenu=contextMenu.clipboardSection().appendSubMenuItem(Common.UIString('Copy'));const createShortcut=UI.KeyboardShortcut.shortcutToString.bind(null);const modifier=UI.KeyboardShortcut.Modifiers.CtrlOrMeta;const treeOutline=this.treeOutline;let menuItem;let section;if(!isShadowRoot){section=copyMenu.section();menuItem=section.appendItem(Common.UIString('Copy outerHTML'),treeOutline.performCopyOrCut.bind(treeOutline,false,this._node));menuItem.setShortcut(createShortcut('V',modifier));}
if(this._node.nodeType()===Node.ELEMENT_NODE){section.appendItem(Common.UIString('Copy selector'),this._copyCSSPath.bind(this));section.appendItem(Common.UIString('Copy JS path'),this._copyJSPath.bind(this),!Elements.DOMPath.canGetJSPath(this._node));section.appendItem(ls`Copy styles`,this._copyStyles.bind(this));}
if(!isShadowRoot){section.appendItem(Common.UIString('Copy XPath'),this._copyXPath.bind(this));section.appendItem(ls`Copy full XPath`,this._copyFullXPath.bind(this));}
if(!isShadowRoot){menuItem=copyMenu.clipboardSection().appendItem(Common.UIString('Cut element'),treeOutline.performCopyOrCut.bind(treeOutline,true,this._node),!this.hasEditableNode());menuItem.setShortcut(createShortcut('X',modifier));menuItem=copyMenu.clipboardSection().appendItem(Common.UIString('Copy element'),treeOutline.performCopyOrCut.bind(treeOutline,false,this._node));menuItem.setShortcut(createShortcut('C',modifier));menuItem=copyMenu.clipboardSection().appendItem(Common.UIString('Paste element'),treeOutline.pasteNode.bind(treeOutline,this._node),!treeOutline.canPaste(this._node));menuItem.setShortcut(createShortcut('V',modifier));}
menuItem=contextMenu.debugSection().appendCheckboxItem(Common.UIString('Hide element'),treeOutline.toggleHideElement.bind(treeOutline,this._node),treeOutline.isToggledToHidden(this._node));menuItem.setShortcut(UI.shortcutRegistry.shortcutTitleForAction('elements.hide-element'));if(isEditable){contextMenu.editSection().appendItem(Common.UIString('Delete element'),this.remove.bind(this));}
contextMenu.viewSection().appendItem(ls`Expand recursively`,this.expandRecursively.bind(this));contextMenu.viewSection().appendItem(ls`Collapse children`,this.collapseChildren.bind(this));}
_startEditing(){if(this.treeOutline.selectedDOMNode()!==this._node){return;}
const listItem=this.listItemElement;if(this._canAddAttributes){const attribute=listItem.getElementsByClassName('webkit-html-attribute')[0];if(attribute){return this._startEditingAttribute(attribute,attribute.getElementsByClassName('webkit-html-attribute-value')[0]);}
return this._addNewAttribute();}
if(this._node.nodeType()===Node.TEXT_NODE){const textNode=listItem.getElementsByClassName('webkit-html-text-node')[0];if(textNode){return this._startEditingTextNode(textNode);}
return;}}
_addNewAttribute(){const container=createElement('span');this._buildAttributeDOM(container,' ','',null);const attr=container.firstElementChild;attr.style.marginLeft='2px';attr.style.marginRight='2px';const tag=this.listItemElement.getElementsByClassName('webkit-html-tag')[0];this._insertInLastAttributePosition(tag,attr);attr.scrollIntoViewIfNeeded(true);return this._startEditingAttribute(attr,attr);}
_triggerEditAttribute(attributeName){const attributeElements=this.listItemElement.getElementsByClassName('webkit-html-attribute-name');for(let i=0,len=attributeElements.length;i<len;++i){if(attributeElements[i].textContent===attributeName){for(let elem=attributeElements[i].nextSibling;elem;elem=elem.nextSibling){if(elem.nodeType!==Node.ELEMENT_NODE){continue;}
if(elem.classList.contains('webkit-html-attribute-value')){return this._startEditingAttribute(elem.parentNode,elem);}}}}}
_startEditingAttribute(attribute,elementForSelection){console.assert(this.listItemElement.isAncestor(attribute));if(UI.isBeingEdited(attribute)){return true;}
const attributeNameElement=attribute.getElementsByClassName('webkit-html-attribute-name')[0];if(!attributeNameElement){return false;}
const attributeName=attributeNameElement.textContent;const attributeValueElement=attribute.getElementsByClassName('webkit-html-attribute-value')[0];elementForSelection=attributeValueElement.isAncestor(elementForSelection)?attributeValueElement:elementForSelection;function removeZeroWidthSpaceRecursive(node){if(node.nodeType===Node.TEXT_NODE){node.nodeValue=node.nodeValue.replace(/\u200B/g,'');return;}
if(node.nodeType!==Node.ELEMENT_NODE){return;}
for(let child=node.firstChild;child;child=child.nextSibling){removeZeroWidthSpaceRecursive(child);}}
const attributeValue=attributeName&&attributeValueElement?this._node.getAttribute(attributeName):undefined;if(attributeValue!==undefined){attributeValueElement.setTextContentTruncatedIfNeeded(attributeValue,Common.UIString('<value is too large to edit>'));}
removeZeroWidthSpaceRecursive(attribute);const config=new UI.InplaceEditor.Config(this._attributeEditingCommitted.bind(this),this._editingCancelled.bind(this),attributeName);function postKeyDownFinishHandler(event){UI.handleElementValueModifications(event,attribute);return'';}
if(!attributeValueElement.textContent.asParsedURL()){config.setPostKeydownFinishHandler(postKeyDownFinishHandler);}
this._editing=UI.InplaceEditor.startEditing(attribute,config);this.listItemElement.getComponentSelection().selectAllChildren(elementForSelection);return true;}
_startEditingTextNode(textNodeElement){if(UI.isBeingEdited(textNodeElement)){return true;}
let textNode=this._node;if(textNode.nodeType()===Node.ELEMENT_NODE&&textNode.firstChild){textNode=textNode.firstChild;}
const container=textNodeElement.enclosingNodeOrSelfWithClass('webkit-html-text-node');if(container){container.textContent=textNode.nodeValue();}
const config=new UI.InplaceEditor.Config(this._textNodeEditingCommitted.bind(this,textNode),this._editingCancelled.bind(this));this._editing=UI.InplaceEditor.startEditing(textNodeElement,config);this.listItemElement.getComponentSelection().selectAllChildren(textNodeElement);return true;}
_startEditingTagName(tagNameElement){if(!tagNameElement){tagNameElement=this.listItemElement.getElementsByClassName('webkit-html-tag-name')[0];if(!tagNameElement){return false;}}
const tagName=tagNameElement.textContent;if(EditTagBlacklist.has(tagName.toLowerCase())){return false;}
if(UI.isBeingEdited(tagNameElement)){return true;}
const closingTagElement=this._distinctClosingTagElement();function keyupListener(event){if(closingTagElement){closingTagElement.textContent='</'+tagNameElement.textContent+'>';}}
const keydownListener=event=>{if(event.key!==' '){return;}
this._editing.commit();event.consume(true);};function editingComitted(element,newTagName){tagNameElement.removeEventListener('keyup',keyupListener,false);tagNameElement.removeEventListener('keydown',keydownListener,false);this._tagNameEditingCommitted.apply(this,arguments);}
function editingCancelled(){tagNameElement.removeEventListener('keyup',keyupListener,false);tagNameElement.removeEventListener('keydown',keydownListener,false);this._editingCancelled.apply(this,arguments);}
tagNameElement.addEventListener('keyup',keyupListener,false);tagNameElement.addEventListener('keydown',keydownListener,false);const config=new UI.InplaceEditor.Config(editingComitted.bind(this),editingCancelled.bind(this),tagName);this._editing=UI.InplaceEditor.startEditing(tagNameElement,config);this.listItemElement.getComponentSelection().selectAllChildren(tagNameElement);return true;}
_startEditingAsHTML(commitCallback,disposeCallback,maybeInitialValue){if(maybeInitialValue===null){return;}
let initialValue=maybeInitialValue;if(this._editing){return;}
initialValue=this._convertWhitespaceToEntities(initialValue).text;this._htmlEditElement=createElement('div');this._htmlEditElement.className='source-code elements-tree-editor';let child=this.listItemElement.firstChild;while(child){child.style.display='none';child=child.nextSibling;}
if(this.childrenListElement){this.childrenListElement.style.display='none';}
this.listItemElement.appendChild(this._htmlEditElement);self.runtime.extension(UI.TextEditorFactory).instance().then(gotFactory.bind(this));function gotFactory(factory){const editor=factory.createEditor({lineNumbers:false,lineWrapping:Common.moduleSetting('domWordWrap').get(),mimeType:'text/html',autoHeight:false,padBottom:false});this._editing={commit:commit.bind(this),cancel:dispose.bind(this),editor:editor,resize:resize.bind(this)};resize.call(this);editor.widget().show((this._htmlEditElement));editor.setText(initialValue);editor.widget().focus();editor.widget().element.addEventListener('focusout',event=>{if(event.relatedTarget&&!event.relatedTarget.isSelfOrDescendant(editor.widget().element)){this._editing.commit();}},false);editor.widget().element.addEventListener('keydown',keydown.bind(this),true);this.treeOutline.setMultilineEditing(this._editing);}
function resize(){if(this._htmlEditElement){this._htmlEditElement.style.width=this.treeOutline.visibleWidth()-this._computeLeftIndent()-30+'px';}
this._editing.editor.onResize();}
function commit(){commitCallback(initialValue,this._editing.editor.text());dispose.call(this);}
function dispose(){this._editing.editor.widget().element.removeEventListener('blur',this._editing.commit,true);this._editing.editor.widget().detach();delete this._editing;this.listItemElement.removeChild(this._htmlEditElement);delete this._htmlEditElement;if(this.childrenListElement){this.childrenListElement.style.removeProperty('display');}
let child=this.listItemElement.firstChild;while(child){child.style.removeProperty('display');child=child.nextSibling;}
if(this.treeOutline){this.treeOutline.setMultilineEditing(null);this.treeOutline.focus();}
disposeCallback();}
function keydown(event){const isMetaOrCtrl=UI.KeyboardShortcut.eventHasCtrlOrMeta((event))&&!event.altKey&&!event.shiftKey;if(isEnterKey(event)&&(isMetaOrCtrl||event.isMetaOrCtrlForTest)){event.consume(true);this._editing.commit();}else if(event.keyCode===UI.KeyboardShortcut.Keys.Esc.code||event.key==='Escape'){event.consume(true);this._editing.cancel();}}}
_attributeEditingCommitted(element,newText,oldText,attributeName,moveDirection){delete this._editing;const treeOutline=this.treeOutline;function moveToNextAttributeIfNeeded(error){if(error){this._editingCancelled(element,attributeName);}
if(!moveDirection){return;}
treeOutline.runPendingUpdates();treeOutline.focus();const attributes=this._node.attributes();for(let i=0;i<attributes.length;++i){if(attributes[i].name!==attributeName){continue;}
if(moveDirection==='backward'){if(i===0){this._startEditingTagName();}else{this._triggerEditAttribute(attributes[i-1].name);}}else{if(i===attributes.length-1){this._addNewAttribute();}else{this._triggerEditAttribute(attributes[i+1].name);}}
return;}
if(moveDirection==='backward'){if(newText===' '){if(attributes.length>0){this._triggerEditAttribute(attributes[attributes.length-1].name);}}else{if(attributes.length>1){this._triggerEditAttribute(attributes[attributes.length-2].name);}}}else if(moveDirection==='forward'){if(!newText.isWhitespace()){this._addNewAttribute();}else{this._startEditingTagName();}}}
if((attributeName.trim()||newText.trim())&&oldText!==newText){this._node.setAttribute(attributeName,newText,moveToNextAttributeIfNeeded.bind(this));return;}
this.updateTitle();moveToNextAttributeIfNeeded.call(this);}
_tagNameEditingCommitted(element,newText,oldText,tagName,moveDirection){delete this._editing;const self=this;function cancel(){const closingTagElement=self._distinctClosingTagElement();if(closingTagElement){closingTagElement.textContent='</'+tagName+'>';}
self._editingCancelled(element,tagName);moveToNextAttributeIfNeeded.call(self);}
function moveToNextAttributeIfNeeded(){if(moveDirection!=='forward'){this._addNewAttribute();return;}
const attributes=this._node.attributes();if(attributes.length>0){this._triggerEditAttribute(attributes[0].name);}else{this._addNewAttribute();}}
newText=newText.trim();if(newText===oldText){cancel();return;}
const treeOutline=this.treeOutline;const wasExpanded=this.expanded;this._node.setNodeName(newText,(error,newNode)=>{if(error||!newNode){cancel();return;}
const newTreeItem=treeOutline.selectNodeAfterEdit(wasExpanded,error,newNode);moveToNextAttributeIfNeeded.call(newTreeItem);});}
_textNodeEditingCommitted(textNode,element,newText){delete this._editing;function callback(){this.updateTitle();}
textNode.setNodeValue(newText,callback.bind(this));}
_editingCancelled(element,context){delete this._editing;this.updateTitle();}
_distinctClosingTagElement(){if(this.expanded){const closers=this.childrenListElement.querySelectorAll('.close');return closers[closers.length-1];}
const tags=this.listItemElement.getElementsByClassName('webkit-html-tag');return(tags.length===1?null:tags[tags.length-1]);}
updateTitle(updateRecord,onlySearchQueryChanged){if(this._editing){return;}
if(onlySearchQueryChanged){this._hideSearchHighlight();}else{const nodeInfo=this._nodeTitleInfo(updateRecord||null);if(this._node.nodeType()===Node.DOCUMENT_FRAGMENT_NODE&&this._node.isInShadowTree()&&this._node.shadowRootType()){this.childrenListElement.classList.add('shadow-root');let depth=4;for(let node=this._node;depth&&node;node=node.parentNode){if(node.nodeType()===Node.DOCUMENT_FRAGMENT_NODE){depth--;}}
if(!depth){this.childrenListElement.classList.add('shadow-root-deep');}else{this.childrenListElement.classList.add('shadow-root-depth-'+depth);}}
const highlightElement=createElement('span');highlightElement.className='highlight';highlightElement.appendChild(nodeInfo);this.title=highlightElement;this.updateDecorations();this.listItemElement.insertBefore(this._gutterContainer,this.listItemElement.firstChild);delete this._highlightResult;delete this.selectionElement;delete this._hintElement;if(this.selected){this._createSelection();this._createHint();}}
this._highlightSearchResults();}
_computeLeftIndent(){let treeElement=this.parent;let depth=0;while(treeElement!==null){depth++;treeElement=treeElement.parent;}
return 12*(depth-2)+(this.isExpandable()?1:12);}
updateDecorations(){this._gutterContainer.style.left=(-this._computeLeftIndent())+'px';if(this.isClosingTag()){return;}
if(this._node.nodeType()!==Node.ELEMENT_NODE){return;}
this._decorationsThrottler.schedule(this._updateDecorationsInternal.bind(this));}
_updateDecorationsInternal(){if(!this.treeOutline){return Promise.resolve();}
const node=this._node;if(!this.treeOutline._decoratorExtensions){this.treeOutline._decoratorExtensions=self.runtime.extensions(Elements.MarkerDecorator);}
const markerToExtension=new Map();for(let i=0;i<this.treeOutline._decoratorExtensions.length;++i){markerToExtension.set(this.treeOutline._decoratorExtensions[i].descriptor()['marker'],this.treeOutline._decoratorExtensions[i]);}
const promises=[];const decorations=[];const descendantDecorations=[];node.traverseMarkers(visitor);function visitor(n,marker){const extension=markerToExtension.get(marker);if(!extension){return;}
promises.push(extension.instance().then(collectDecoration.bind(null,n)));}
function collectDecoration(n,decorator){const decoration=decorator.decorate(n);if(!decoration){return;}
(n===node?decorations:descendantDecorations).push(decoration);}
return Promise.all(promises).then(updateDecorationsUI.bind(this));function updateDecorationsUI(){this._decorationsElement.removeChildren();this._decorationsElement.classList.add('hidden');this._gutterContainer.classList.toggle('has-decorations',decorations.length||descendantDecorations.length);if(!decorations.length&&!descendantDecorations.length){return;}
const colors=new Set();const titles=createElement('div');for(const decoration of decorations){const titleElement=titles.createChild('div');titleElement.textContent=decoration.title;colors.add(decoration.color);}
if(this.expanded&&!decorations.length){return;}
const descendantColors=new Set();if(descendantDecorations.length){let element=titles.createChild('div');element.textContent=Common.UIString('Children:');for(const decoration of descendantDecorations){element=titles.createChild('div');element.style.marginLeft='15px';element.textContent=decoration.title;descendantColors.add(decoration.color);}}
let offset=0;processColors.call(this,colors,'elements-gutter-decoration');if(!this.expanded){processColors.call(this,descendantColors,'elements-gutter-decoration elements-has-decorated-children');}
UI.Tooltip.install(this._decorationsElement,titles);function processColors(colors,className){for(const color of colors){const child=this._decorationsElement.createChild('div',className);this._decorationsElement.classList.remove('hidden');child.style.backgroundColor=color;child.style.borderColor=color;if(offset){child.style.marginLeft=offset+'px';}
offset+=3;}}}}
_buildAttributeDOM(parentElement,name,value,updateRecord,forceValue,node){const closingPunctuationRegex=/[\/;:\)\]\}]/g;let highlightIndex=0;let highlightCount;let additionalHighlightOffset=0;let result;function replacer(match,replaceOffset){while(highlightIndex<highlightCount&&result.entityRanges[highlightIndex].offset<replaceOffset){result.entityRanges[highlightIndex].offset+=additionalHighlightOffset;++highlightIndex;}
additionalHighlightOffset+=1;return match+'\u200B';}
function setValueWithEntities(element,value){result=this._convertWhitespaceToEntities(value);highlightCount=result.entityRanges.length;value=result.text.replace(closingPunctuationRegex,replacer);while(highlightIndex<highlightCount){result.entityRanges[highlightIndex].offset+=additionalHighlightOffset;++highlightIndex;}
element.setTextContentTruncatedIfNeeded(value);UI.highlightRangesWithStyleClass(element,result.entityRanges,'webkit-html-entity-value');}
const hasText=(forceValue||value.length>0);const attrSpanElement=parentElement.createChild('span','webkit-html-attribute');const attrNameElement=attrSpanElement.createChild('span','webkit-html-attribute-name');attrNameElement.textContent=name;if(hasText){attrSpanElement.createTextChild('=\u200B"');}
const attrValueElement=attrSpanElement.createChild('span','webkit-html-attribute-value');if(updateRecord&&updateRecord.isAttributeModified(name)){UI.runCSSAnimationOnce(hasText?attrValueElement:attrNameElement,'dom-update-highlight');}
function linkifyValue(value){const rewrittenHref=node.resolveURL(value);if(rewrittenHref===null){const span=createElement('span');setValueWithEntities.call(this,span,value);return span;}
value=value.replace(closingPunctuationRegex,'$&\u200B');if(value.startsWith('data:')){value=value.trimMiddle(60);}
const link=node.nodeName().toLowerCase()==='a'?UI.XLink.create(rewrittenHref,value,'',true):Components.Linkifier.linkifyURL(rewrittenHref,{text:value,preventClick:true});link[HrefSymbol]=rewrittenHref;return link;}
const nodeName=node?node.nodeName().toLowerCase():'';if(nodeName&&(name==='src'||name==='href')){attrValueElement.appendChild(linkifyValue.call(this,value));}else if((nodeName==='img'||nodeName==='source')&&name==='srcset'){attrValueElement.appendChild(linkifySrcset.call(this,value));}else if(nodeName==='image'&&(name==='xlink:href'||name==='href')){attrValueElement.appendChild(linkifySrcset.call(this,value));}else{setValueWithEntities.call(this,attrValueElement,value);}
if(hasText){attrSpanElement.createTextChild('"');}
function linkifySrcset(value){const fragment=createDocumentFragment();let i=0;while(value.length){if(i++>0){fragment.createTextChild(' ');}
value=value.trim();let url='';let descriptor='';const indexOfSpace=value.search(/\s/);if(indexOfSpace===-1){url=value;}else if(indexOfSpace>0&&value[indexOfSpace-1]===','){url=value.substring(0,indexOfSpace);}else{url=value.substring(0,indexOfSpace);const indexOfComma=value.indexOf(',',indexOfSpace);if(indexOfComma!==-1){descriptor=value.substring(indexOfSpace,indexOfComma+1);}else{descriptor=value.substring(indexOfSpace);}}
if(url){if(url.endsWith(',')){fragment.appendChild(linkifyValue.call(this,url.substring(0,url.length-1)));fragment.createTextChild(',');}else{fragment.appendChild(linkifyValue.call(this,url));}}
if(descriptor){fragment.createTextChild(descriptor);}
value=value.substring(url.length+descriptor.length);}
return fragment;}}
_buildPseudoElementDOM(parentElement,pseudoElementName){const pseudoElement=parentElement.createChild('span','webkit-html-pseudo-element');pseudoElement.textContent='::'+pseudoElementName;parentElement.createTextChild('\u200B');}
_buildTagDOM(parentElement,tagName,isClosingTag,isDistinctTreeElement,updateRecord){const node=this._node;const classes=['webkit-html-tag'];if(isClosingTag&&isDistinctTreeElement){classes.push('close');}
const tagElement=parentElement.createChild('span',classes.join(' '));tagElement.createTextChild('<');const tagNameElement=tagElement.createChild('span',isClosingTag?'webkit-html-close-tag-name':'webkit-html-tag-name');tagNameElement.textContent=(isClosingTag?'/':'')+tagName;if(!isClosingTag){if(node.hasAttributes()){const attributes=node.attributes();for(let i=0;i<attributes.length;++i){const attr=attributes[i];tagElement.createTextChild(' ');this._buildAttributeDOM(tagElement,attr.name,attr.value,updateRecord,false,node);}}
if(updateRecord){let hasUpdates=updateRecord.hasRemovedAttributes()||updateRecord.hasRemovedChildren();hasUpdates|=!this.expanded&&updateRecord.hasChangedChildren();if(hasUpdates){UI.runCSSAnimationOnce(tagNameElement,'dom-update-highlight');}}}
tagElement.createTextChild('>');parentElement.createTextChild('\u200B');}
_convertWhitespaceToEntities(text){let result='';let lastIndexAfterEntity=0;const entityRanges=[];const charToEntity=Elements.ElementsTreeOutline.MappedCharToEntity;for(let i=0,size=text.length;i<size;++i){const char=text.charAt(i);if(charToEntity[char]){result+=text.substring(lastIndexAfterEntity,i);const entityValue='&'+charToEntity[char]+';';entityRanges.push({offset:result.length,length:entityValue.length});result+=entityValue;lastIndexAfterEntity=i+1;}}
if(result){result+=text.substring(lastIndexAfterEntity);}
return{text:result||text,entityRanges:entityRanges};}
_nodeTitleInfo(updateRecord){const node=this._node;const titleDOM=createDocumentFragment();switch(node.nodeType()){case Node.ATTRIBUTE_NODE:this._buildAttributeDOM(titleDOM,(node.name),(node.value),updateRecord,true);break;case Node.ELEMENT_NODE:const pseudoType=node.pseudoType();if(pseudoType){this._buildPseudoElementDOM(titleDOM,pseudoType);break;}
const tagName=node.nodeNameInCorrectCase();if(this._elementCloseTag){this._buildTagDOM(titleDOM,tagName,true,true,updateRecord);break;}
this._buildTagDOM(titleDOM,tagName,false,false,updateRecord);if(this.isExpandable()){if(!this.expanded){const textNodeElement=titleDOM.createChild('span','webkit-html-text-node bogus');textNodeElement.textContent='\u2026';titleDOM.createTextChild('\u200B');this._buildTagDOM(titleDOM,tagName,true,false,updateRecord);}
break;}
if(ElementsTreeElement.canShowInlineText(node)){const textNodeElement=titleDOM.createChild('span','webkit-html-text-node');const result=this._convertWhitespaceToEntities(node.firstChild.nodeValue());textNodeElement.textContent=result.text;UI.highlightRangesWithStyleClass(textNodeElement,result.entityRanges,'webkit-html-entity-value');titleDOM.createTextChild('\u200B');this._buildTagDOM(titleDOM,tagName,true,false,updateRecord);if(updateRecord&&updateRecord.hasChangedChildren()){UI.runCSSAnimationOnce(textNodeElement,'dom-update-highlight');}
if(updateRecord&&updateRecord.isCharDataModified()){UI.runCSSAnimationOnce(textNodeElement,'dom-update-highlight');}
break;}
if(this.treeOutline.isXMLMimeType||!ForbiddenClosingTagElements.has(tagName)){this._buildTagDOM(titleDOM,tagName,true,false,updateRecord);}
break;case Node.TEXT_NODE:if(node.parentNode&&node.parentNode.nodeName().toLowerCase()==='script'){const newNode=titleDOM.createChild('span','webkit-html-text-node webkit-html-js-node');const text=node.nodeValue();newNode.textContent=text.startsWith('\n')?text.substring(1):text;const javascriptSyntaxHighlighter=new UI.SyntaxHighlighter('text/javascript',true);javascriptSyntaxHighlighter.syntaxHighlightNode(newNode).then(updateSearchHighlight.bind(this));}else if(node.parentNode&&node.parentNode.nodeName().toLowerCase()==='style'){const newNode=titleDOM.createChild('span','webkit-html-text-node webkit-html-css-node');const text=node.nodeValue();newNode.textContent=text.startsWith('\n')?text.substring(1):text;const cssSyntaxHighlighter=new UI.SyntaxHighlighter('text/css',true);cssSyntaxHighlighter.syntaxHighlightNode(newNode).then(updateSearchHighlight.bind(this));}else{titleDOM.createTextChild('"');const textNodeElement=titleDOM.createChild('span','webkit-html-text-node');const result=this._convertWhitespaceToEntities(node.nodeValue());textNodeElement.textContent=result.text;UI.highlightRangesWithStyleClass(textNodeElement,result.entityRanges,'webkit-html-entity-value');titleDOM.createTextChild('"');if(updateRecord&&updateRecord.isCharDataModified()){UI.runCSSAnimationOnce(textNodeElement,'dom-update-highlight');}}
break;case Node.COMMENT_NODE:const commentElement=titleDOM.createChild('span','webkit-html-comment');commentElement.createTextChild('<!--'+node.nodeValue()+'-->');break;case Node.DOCUMENT_TYPE_NODE:const docTypeElement=titleDOM.createChild('span','webkit-html-doctype');docTypeElement.createTextChild('<!doctype '+node.nodeName());if(node.publicId){docTypeElement.createTextChild(' PUBLIC "'+node.publicId+'"');if(node.systemId){docTypeElement.createTextChild(' "'+node.systemId+'"');}}else if(node.systemId){docTypeElement.createTextChild(' SYSTEM "'+node.systemId+'"');}
if(node.internalSubset){docTypeElement.createTextChild(' ['+node.internalSubset+']');}
docTypeElement.createTextChild('>');break;case Node.CDATA_SECTION_NODE:const cdataElement=titleDOM.createChild('span','webkit-html-text-node');cdataElement.createTextChild('<![CDATA['+node.nodeValue()+']]>');break;case Node.DOCUMENT_FRAGMENT_NODE:const fragmentElement=titleDOM.createChild('span','webkit-html-fragment');fragmentElement.textContent=node.nodeNameInCorrectCase().collapseWhitespace();break;default:titleDOM.createTextChild(node.nodeNameInCorrectCase().collapseWhitespace());}
function updateSearchHighlight(){delete this._highlightResult;this._highlightSearchResults();}
return titleDOM;}
remove(){if(this._node.pseudoType()){return;}
const parentElement=this.parent;if(!parentElement){return;}
if(!this._node.parentNode||this._node.parentNode.nodeType()===Node.DOCUMENT_NODE){return;}
this._node.removeNode();}
toggleEditAsHTML(callback,startEditing){if(this._editing&&this._htmlEditElement){this._editing.commit();return;}
if(startEditing===false){return;}
function selectNode(error){if(callback){callback(!error);}}
function commitChange(initialValue,value){if(initialValue!==value){node.setOuterHTML(value,selectNode);}}
function disposeCallback(){if(callback){callback(false);}}
const node=this._node;node.getOuterHTML().then(this._startEditingAsHTML.bind(this,commitChange,disposeCallback));}
_copyCSSPath(){Host.InspectorFrontendHost.copyText(Elements.DOMPath.cssPath(this._node,true));}
_copyJSPath(){Host.InspectorFrontendHost.copyText(Elements.DOMPath.jsPath(this._node,true));}
_copyXPath(){Host.InspectorFrontendHost.copyText(Elements.DOMPath.xPath(this._node,true));}
_copyFullXPath(){Host.InspectorFrontendHost.copyText(Elements.DOMPath.xPath(this._node,false));}
async _copyStyles(){const node=this._node;const cssModel=node.domModel().cssModel();const cascade=await cssModel.cachedMatchedCascadeForNode(node);if(!cascade){return;}
const lines=[];for(const style of cascade.nodeStyles().reverse()){for(const property of style.leadingProperties()){if(!property.parsedOk||property.disabled||!property.activeInStyle()||property.implicit){continue;}
if(cascade.isInherited(style)&&!SDK.cssMetadata().isPropertyInherited(property.name)){continue;}
if(style.parentRule&&style.parentRule.isUserAgent()){continue;}
if(cascade.propertyState(property)!==SDK.CSSMatchedStyles.PropertyState.Active){continue;}
lines.push(`${property.name}: ${property.value};`);}}
Host.InspectorFrontendHost.copyText(lines.join('\n'));}
_highlightSearchResults(){if(!this._searchQuery||!this._searchHighlightsVisible){return;}
this._hideSearchHighlight();const text=this.listItemElement.textContent;const regexObject=createPlainTextSearchRegex(this._searchQuery,'gi');let match=regexObject.exec(text);const matchRanges=[];while(match){matchRanges.push(new TextUtils.SourceRange(match.index,match[0].length));match=regexObject.exec(text);}
if(!matchRanges.length){matchRanges.push(new TextUtils.SourceRange(0,text.length));}
this._highlightResult=[];UI.highlightSearchResults(this.listItemElement,matchRanges,this._highlightResult);}
_editAsHTML(){const promise=Common.Revealer.reveal(this.node());promise.then(()=>UI.actionRegistry.action('elements.edit-as-html').execute());}}
export const HrefSymbol=Symbol('ElementsTreeElement.Href');export const InitialChildrenLimit=500;export const ForbiddenClosingTagElements=new Set(['area','base','basefont','br','canvas','col','command','embed','frame','hr','img','input','keygen','link','menuitem','meta','param','source','track','wbr']);export const EditTagBlacklist=new Set(['html','head','body']);self.Elements=self.Elements||{};Elements=Elements||{};Elements.ElementsTreeElement=ElementsTreeElement;Elements.ElementsTreeElement.HrefSymbol=HrefSymbol;Elements.ElementsTreeElement.InitialChildrenLimit=InitialChildrenLimit;Elements.ElementsTreeElement.ForbiddenClosingTagElements=ForbiddenClosingTagElements;Elements.ElementsTreeElement.EditTagBlacklist=EditTagBlacklist;Elements.MultilineEditorController;export default class ElementsTreeElementHighlighter{constructor(treeOutline){this._throttler=new Common.Throttler(100);this._treeOutline=treeOutline;this._treeOutline.addEventListener(UI.TreeOutline.Events.ElementExpanded,this._clearState,this);this._treeOutline.addEventListener(UI.TreeOutline.Events.ElementCollapsed,this._clearState,this);this._treeOutline.addEventListener(Elements.ElementsTreeOutline.Events.SelectedNodeChanged,this._clearState,this);SDK.targetManager.addModelListener(SDK.OverlayModel,SDK.OverlayModel.Events.HighlightNodeRequested,this._highlightNode,this);SDK.targetManager.addModelListener(SDK.OverlayModel,SDK.OverlayModel.Events.InspectModeWillBeToggled,this._clearState,this);}
_highlightNode(event){if(!Common.moduleSetting('highlightNodeOnHoverInOverlay').get()){return;}
const domNode=(event.data);this._throttler.schedule(callback.bind(this));this._pendingHighlightNode=this._treeOutline===Elements.ElementsTreeOutline.forDOMModel(domNode.domModel())?domNode:null;function callback(){this._highlightNodeInternal(this._pendingHighlightNode);delete this._pendingHighlightNode;return Promise.resolve();}}
_highlightNodeInternal(node){this._isModifyingTreeOutline=true;let treeElement=null;if(this._currentHighlightedElement){let currentTreeElement=this._currentHighlightedElement;while(currentTreeElement!==this._alreadyExpandedParentElement){if(currentTreeElement.expanded){currentTreeElement.collapse();}
currentTreeElement=currentTreeElement.parent;}}
delete this._currentHighlightedElement;delete this._alreadyExpandedParentElement;if(node){let deepestExpandedParent=node;const treeElementSymbol=this._treeOutline.treeElementSymbol();while(deepestExpandedParent&&(!deepestExpandedParent[treeElementSymbol]||!deepestExpandedParent[treeElementSymbol].expanded)){deepestExpandedParent=deepestExpandedParent.parentNode;}
this._alreadyExpandedParentElement=deepestExpandedParent?deepestExpandedParent[treeElementSymbol]:this._treeOutline.rootElement();treeElement=this._treeOutline.createTreeElementFor(node);}
this._currentHighlightedElement=treeElement;this._treeOutline.setHoverEffect(treeElement);if(treeElement){treeElement.reveal(true);}
this._isModifyingTreeOutline=false;}
_clearState(){if(this._isModifyingTreeOutline){return;}
delete this._currentHighlightedElement;delete this._alreadyExpandedParentElement;delete this._pendingHighlightNode;}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.ElementsTreeElementHighlighter=ElementsTreeElementHighlighter;export default class ElementStatePaneWidget extends UI.Widget{constructor(){super(true);this.registerRequiredCSS('elements/elementStatePaneWidget.css');this.contentElement.className='styles-element-state-pane';this.contentElement.createChild('div').createTextChild(Common.UIString('Force element state'));const table=createElementWithClass('table','source-code');const inputs=[];this._inputs=inputs;function clickListener(event){const node=UI.context.flavor(SDK.DOMNode);if(!node){return;}
node.domModel().cssModel().forcePseudoState(node,event.target.state,event.target.checked);}
function createCheckbox(state){const td=createElement('td');const label=UI.CheckboxLabel.create(':'+state);const input=label.checkboxElement;input.state=state;input.addEventListener('click',clickListener,false);inputs.push(input);td.appendChild(label);return td;}
let tr=table.createChild('tr');tr.appendChild(createCheckbox.call(null,'active'));tr.appendChild(createCheckbox.call(null,'hover'));tr=table.createChild('tr');tr.appendChild(createCheckbox.call(null,'focus'));tr.appendChild(createCheckbox.call(null,'visited'));tr=table.createChild('tr');tr.appendChild(createCheckbox.call(null,'focus-within'));try{tr.querySelector(':focus-visible');tr.appendChild(createCheckbox.call(null,'focus-visible'));}catch(e){}
this.contentElement.appendChild(table);UI.context.addFlavorChangeListener(SDK.DOMNode,this._update,this);}
_updateModel(cssModel){if(this._cssModel===cssModel){return;}
if(this._cssModel){this._cssModel.removeEventListener(SDK.CSSModel.Events.PseudoStateForced,this._update,this);}
this._cssModel=cssModel;if(this._cssModel){this._cssModel.addEventListener(SDK.CSSModel.Events.PseudoStateForced,this._update,this);}}
wasShown(){this._update();}
_update(){if(!this.isShowing()){return;}
let node=UI.context.flavor(SDK.DOMNode);if(node){node=node.enclosingElementOrSelf();}
this._updateModel(node?node.domModel().cssModel():null);if(node){const nodePseudoState=node.domModel().cssModel().pseudoState(node);for(const input of this._inputs){input.disabled=!!node.pseudoType();input.checked=nodePseudoState.indexOf(input.state)>=0;}}else{for(const input of this._inputs){input.disabled=true;input.checked=false;}}}}
export class ButtonProvider{constructor(){this._button=new UI.ToolbarToggle(Common.UIString('Toggle Element State'),'');this._button.setText(Common.UIString(':hov'));this._button.addEventListener(UI.ToolbarButton.Events.Click,this._clicked,this);this._button.element.classList.add('monospace');this._view=new ElementStatePaneWidget();}
_clicked(){Elements.ElementsPanel.instance().showToolbarPane(!this._view.isShowing()?this._view:null,this._button);}
item(){return this._button;}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.ElementStatePaneWidget=ElementStatePaneWidget;Elements.ElementStatePaneWidget.ButtonProvider=ButtonProvider;export default class ElementsSidebarPane extends UI.VBox{constructor(delegatesFocus){super(true,delegatesFocus);this.element.classList.add('flex-none');this._computedStyleModel=new Elements.ComputedStyleModel();this._computedStyleModel.addEventListener(Elements.ComputedStyleModel.Events.ComputedStyleChanged,this.onCSSModelChanged,this);this._updateThrottler=new Common.Throttler(100);this._updateWhenVisible=false;}
node(){return this._computedStyleModel.node();}
cssModel(){return this._computedStyleModel.cssModel();}
doUpdate(){return Promise.resolve();}
update(){this._updateWhenVisible=!this.isShowing();if(this._updateWhenVisible){return;}
this._updateThrottler.schedule(innerUpdate.bind(this));function innerUpdate(){return this.isShowing()?this.doUpdate():Promise.resolve();}}
wasShown(){super.wasShown();if(this._updateWhenVisible){this.update();}}
onCSSModelChanged(event){}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.ElementsSidebarPane=ElementsSidebarPane;export default class ElementsPanel extends UI.Panel{constructor(){super('elements');this.registerRequiredCSS('elements/elementsPanel.css');this._splitWidget=new UI.SplitWidget(true,true,'elementsPanelSplitViewState',325,325);this._splitWidget.addEventListener(UI.SplitWidget.Events.SidebarSizeChanged,this._updateTreeOutlineVisibleWidth.bind(this));this._splitWidget.show(this.element);this._searchableView=new UI.SearchableView(this);this._searchableView.setMinimumSize(25,28);this._searchableView.setPlaceholder(Common.UIString('Find by string, selector, or XPath'));const stackElement=this._searchableView.element;this._contentElement=createElement('div');const crumbsContainer=createElement('div');stackElement.appendChild(this._contentElement);stackElement.appendChild(crumbsContainer);this._splitWidget.setMainWidget(this._searchableView);this._splitMode=null;this._contentElement.id='elements-content';if(Common.moduleSetting('domWordWrap').get()){this._contentElement.classList.add('elements-wrap');}
Common.moduleSetting('domWordWrap').addChangeListener(this._domWordWrapSettingChanged.bind(this));crumbsContainer.id='elements-crumbs';this._breadcrumbs=new Elements.ElementsBreadcrumbs();this._breadcrumbs.show(crumbsContainer);this._breadcrumbs.addEventListener(Elements.ElementsBreadcrumbs.Events.NodeSelected,this._crumbNodeSelected,this);this._stylesWidget=new Elements.StylesSidebarPane();this._computedStyleWidget=new Elements.ComputedStyleWidget();this._metricsWidget=new Elements.MetricsSidebarPane();Common.moduleSetting('sidebarPosition').addChangeListener(this._updateSidebarPosition.bind(this));this._updateSidebarPosition();this._treeOutlines=[];this._treeOutlineHeaders=new Map();SDK.targetManager.observeModels(SDK.DOMModel,this);SDK.targetManager.addEventListener(SDK.TargetManager.Events.NameChanged,event=>this._targetNameChanged((event.data)));Common.moduleSetting('showUAShadowDOM').addChangeListener(this._showUAShadowDOMChanged.bind(this));SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.DocumentUpdated,this._documentUpdatedEvent,this);Extensions.extensionServer.addEventListener(Extensions.ExtensionServer.Events.SidebarPaneAdded,this._extensionSidebarPaneAdded,this);this._searchResults;}
static instance(){return(self.runtime.sharedInstance(ElementsPanel));}
_revealProperty(cssProperty){return this.sidebarPaneView.showView(this._stylesViewToReveal).then(()=>{this._stylesWidget.revealProperty((cssProperty));});}
resolveLocation(locationName){return this.sidebarPaneView;}
showToolbarPane(widget,toggle){this._stylesWidget.showToolbarPane(widget,toggle);}
modelAdded(domModel){const parentModel=domModel.parentModel();let treeOutline=parentModel?Elements.ElementsTreeOutline.forDOMModel(parentModel):null;if(!treeOutline){treeOutline=new Elements.ElementsTreeOutline(true,true);treeOutline.setWordWrap(Common.moduleSetting('domWordWrap').get());treeOutline.addEventListener(Elements.ElementsTreeOutline.Events.SelectedNodeChanged,this._selectedNodeChanged,this);treeOutline.addEventListener(Elements.ElementsTreeOutline.Events.ElementsTreeUpdated,this._updateBreadcrumbIfNeeded,this);new Elements.ElementsTreeElementHighlighter(treeOutline);this._treeOutlines.push(treeOutline);if(domModel.target().parentTarget()){this._treeOutlineHeaders.set(treeOutline,createElementWithClass('div','elements-tree-header'));this._targetNameChanged(domModel.target());}}
treeOutline.wireToDOMModel(domModel);if(this.isShowing()){this.wasShown();}}
modelRemoved(domModel){const treeOutline=Elements.ElementsTreeOutline.forDOMModel(domModel);treeOutline.unwireFromDOMModel(domModel);if(domModel.parentModel()){return;}
this._treeOutlines.remove(treeOutline);const header=this._treeOutlineHeaders.get(treeOutline);if(header){header.remove();}
this._treeOutlineHeaders.delete(treeOutline);treeOutline.element.remove();}
_targetNameChanged(target){const domModel=target.model(SDK.DOMModel);if(!domModel){return;}
const treeOutline=Elements.ElementsTreeOutline.forDOMModel(domModel);if(!treeOutline){return;}
const header=this._treeOutlineHeaders.get(treeOutline);if(!header){return;}
header.removeChildren();header.createChild('div','elements-tree-header-frame').textContent=Common.UIString('Frame');header.appendChild(Components.Linkifier.linkifyURL(target.inspectedURL(),{text:target.name()}));}
_updateTreeOutlineVisibleWidth(){if(!this._treeOutlines.length){return;}
let width=this._splitWidget.element.offsetWidth;if(this._splitWidget.isVertical()){width-=this._splitWidget.sidebarSize();}
for(let i=0;i<this._treeOutlines.length;++i){this._treeOutlines[i].setVisibleWidth(width);}
this._breadcrumbs.updateSizes();}
focus(){if(this._treeOutlines.length){this._treeOutlines[0].focus();}}
searchableView(){return this._searchableView;}
wasShown(){UI.context.setFlavor(ElementsPanel,this);for(let i=0;i<this._treeOutlines.length;++i){const treeOutline=this._treeOutlines[i];if(treeOutline.element.parentElement!==this._contentElement){const header=this._treeOutlineHeaders.get(treeOutline);if(header){this._contentElement.appendChild(header);}
this._contentElement.appendChild(treeOutline.element);}}
super.wasShown();this._breadcrumbs.update();const domModels=SDK.targetManager.models(SDK.DOMModel);for(const domModel of domModels){if(domModel.parentModel()){continue;}
const treeOutline=Elements.ElementsTreeOutline.forDOMModel(domModel);treeOutline.setVisible(true);if(!treeOutline.rootDOMNode){if(domModel.existingDocument()){treeOutline.rootDOMNode=domModel.existingDocument();this._documentUpdated(domModel);}else{domModel.requestDocument();}}}}
willHide(){SDK.OverlayModel.hideDOMNodeHighlight();for(let i=0;i<this._treeOutlines.length;++i){const treeOutline=this._treeOutlines[i];treeOutline.setVisible(false);this._contentElement.removeChild(treeOutline.element);const header=this._treeOutlineHeaders.get(treeOutline);if(header){this._contentElement.removeChild(header);}}
if(this._popoverHelper){this._popoverHelper.hidePopover();}
super.willHide();UI.context.setFlavor(ElementsPanel,null);}
onResize(){this.element.window().requestAnimationFrame(this._updateSidebarPosition.bind(this));this._updateTreeOutlineVisibleWidth();}
_selectedNodeChanged(event){const selectedNode=(event.data.node);const focus=(event.data.focus);for(const treeOutline of this._treeOutlines){if(!selectedNode||Elements.ElementsTreeOutline.forDOMModel(selectedNode.domModel())!==treeOutline){treeOutline.selectDOMNode(null);}}
this._breadcrumbs.setSelectedNode(selectedNode);UI.context.setFlavor(SDK.DOMNode,selectedNode);if(!selectedNode){return;}
selectedNode.setAsInspectedNode();if(focus){this._selectedNodeOnReset=selectedNode;this._hasNonDefaultSelectedNode=true;}
const executionContexts=selectedNode.domModel().runtimeModel().executionContexts();const nodeFrameId=selectedNode.frameId();for(const context of executionContexts){if(context.frameId===nodeFrameId){UI.context.setFlavor(SDK.ExecutionContext,context);break;}}}
_documentUpdatedEvent(event){const domModel=(event.data);this._documentUpdated(domModel);}
_documentUpdated(domModel){this._searchableView.resetSearch();if(!domModel.existingDocument()){if(this.isShowing()){domModel.requestDocument();}
return;}
this._hasNonDefaultSelectedNode=false;if(this._omitDefaultSelection){return;}
const savedSelectedNodeOnReset=this._selectedNodeOnReset;restoreNode.call(this,domModel,this._selectedNodeOnReset);async function restoreNode(domModel,staleNode){const nodePath=staleNode?staleNode.path():null;const restoredNodeId=nodePath?await domModel.pushNodeByPathToFrontend(nodePath):null;if(savedSelectedNodeOnReset!==this._selectedNodeOnReset){return;}
let node=restoredNodeId?domModel.nodeForId(restoredNodeId):null;if(!node){const inspectedDocument=domModel.existingDocument();node=inspectedDocument?inspectedDocument.body||inspectedDocument.documentElement:null;}
this._setDefaultSelectedNode(node);this._lastSelectedNodeSelectedForTest();}}
_lastSelectedNodeSelectedForTest(){}
_setDefaultSelectedNode(node){if(!node||this._hasNonDefaultSelectedNode||this._pendingNodeReveal){return;}
const treeOutline=Elements.ElementsTreeOutline.forDOMModel(node.domModel());if(!treeOutline){return;}
this.selectDOMNode(node);if(treeOutline.selectedTreeElement){treeOutline.selectedTreeElement.expand();}}
searchCanceled(){delete this._searchConfig;this._hideSearchHighlights();this._searchableView.updateSearchMatchesCount(0);delete this._currentSearchResultIndex;delete this._searchResults;SDK.DOMModel.cancelSearch();}
performSearch(searchConfig,shouldJump,jumpBackwards){const query=searchConfig.query;const whitespaceTrimmedQuery=query.trim();if(!whitespaceTrimmedQuery.length){return;}
if(!this._searchConfig||this._searchConfig.query!==query){this.searchCanceled();}else{this._hideSearchHighlights();}
this._searchConfig=searchConfig;const showUAShadowDOM=Common.moduleSetting('showUAShadowDOM').get();const domModels=SDK.targetManager.models(SDK.DOMModel);const promises=domModels.map(domModel=>domModel.performSearch(whitespaceTrimmedQuery,showUAShadowDOM));Promise.all(promises).then(resultCountCallback.bind(this));function resultCountCallback(resultCounts){this._searchResults=[];for(let i=0;i<resultCounts.length;++i){const resultCount=resultCounts[i];for(let j=0;j<resultCount;++j){this._searchResults.push({domModel:domModels[i],index:j,node:undefined});}}
this._searchableView.updateSearchMatchesCount(this._searchResults.length);if(!this._searchResults.length){return;}
if(this._currentSearchResultIndex>=this._searchResults.length){this._currentSearchResultIndex=undefined;}
let index=this._currentSearchResultIndex;if(shouldJump){if(this._currentSearchResultIndex===undefined){index=jumpBackwards?-1:0;}else{index=jumpBackwards?index-1:index+1;}
this._jumpToSearchResult(index);}}}
_domWordWrapSettingChanged(event){this._contentElement.classList.toggle('elements-wrap',event.data);for(let i=0;i<this._treeOutlines.length;++i){this._treeOutlines[i].setWordWrap((event.data));}}
switchToAndFocus(node){this._searchableView.cancelSearch();UI.viewManager.showView('elements').then(()=>this.selectDOMNode(node,true));}
_getPopoverRequest(event){let link=event.target;while(link&&!link[Elements.ElementsTreeElement.HrefSymbol]){link=link.parentElementOrShadowHost();}
if(!link){return null;}
return{box:link.boxInWindow(),show:async popover=>{const node=this.selectedDOMNode();if(!node){return false;}
const preview=await Components.ImagePreview.build(node.domModel().target(),link[Elements.ElementsTreeElement.HrefSymbol],true);if(preview){popover.contentElement.appendChild(preview);}
return!!preview;}};}
_jumpToSearchResult(index){if(!this._searchResults){return;}
this._currentSearchResultIndex=(index+this._searchResults.length)%this._searchResults.length;this._highlightCurrentSearchResult();}
jumpToNextSearchResult(){if(!this._searchResults){return;}
this.performSearch(this._searchConfig,true);}
jumpToPreviousSearchResult(){if(!this._searchResults){return;}
this.performSearch(this._searchConfig,true,true);}
supportsCaseSensitiveSearch(){return false;}
supportsRegexSearch(){return false;}
_highlightCurrentSearchResult(){const index=this._currentSearchResultIndex;const searchResults=this._searchResults;if(!searchResults){return;}
const searchResult=searchResults[index];this._searchableView.updateCurrentMatchIndex(index);if(searchResult.node===null){return;}
if(typeof searchResult.node==='undefined'){searchResult.domModel.searchResult(searchResult.index).then(node=>{searchResult.node=node;this._highlightCurrentSearchResult();});return;}
const treeElement=this._treeElementForNode(searchResult.node);searchResult.node.scrollIntoView();if(treeElement){treeElement.highlightSearchResults(this._searchConfig.query);treeElement.reveal();const matches=treeElement.listItemElement.getElementsByClassName(UI.highlightedSearchResultClassName);if(matches.length){matches[0].scrollIntoViewIfNeeded(false);}}}
_hideSearchHighlights(){if(!this._searchResults||!this._searchResults.length||this._currentSearchResultIndex===undefined){return;}
const searchResult=this._searchResults[this._currentSearchResultIndex];if(!searchResult.node){return;}
const treeOutline=Elements.ElementsTreeOutline.forDOMModel(searchResult.node.domModel());const treeElement=treeOutline.findTreeElement(searchResult.node);if(treeElement){treeElement.hideSearchHighlights();}}
selectedDOMNode(){for(let i=0;i<this._treeOutlines.length;++i){const treeOutline=this._treeOutlines[i];if(treeOutline.selectedDOMNode()){return treeOutline.selectedDOMNode();}}
return null;}
selectDOMNode(node,focus){for(const treeOutline of this._treeOutlines){const outline=Elements.ElementsTreeOutline.forDOMModel(node.domModel());if(outline===treeOutline){treeOutline.selectDOMNode(node,focus);}else{treeOutline.selectDOMNode(null);}}}
_updateBreadcrumbIfNeeded(event){const nodes=(event.data);this._breadcrumbs.updateNodes(nodes);}
_crumbNodeSelected(event){const node=(event.data);this.selectDOMNode(node,true);}
_treeOutlineForNode(node){if(!node){return null;}
return Elements.ElementsTreeOutline.forDOMModel(node.domModel());}
_treeElementForNode(node){const treeOutline=this._treeOutlineForNode(node);return(treeOutline.findTreeElement(node));}
_leaveUserAgentShadowDOM(node){let userAgentShadowRoot;while((userAgentShadowRoot=node.ancestorUserAgentShadowRoot())&&userAgentShadowRoot.parentNode){node=userAgentShadowRoot.parentNode;}
return node;}
revealAndSelectNode(node,focus,omitHighlight){this._omitDefaultSelection=true;node=Common.moduleSetting('showUAShadowDOM').get()?node:this._leaveUserAgentShadowDOM(node);if(!omitHighlight){node.highlightForTwoSeconds();}
return UI.viewManager.showView('elements',false,!focus).then(()=>{this.selectDOMNode(node,focus);delete this._omitDefaultSelection;if(!this._notFirstInspectElement){Elements.ElementsPanel._firstInspectElementNodeNameForTest=node.nodeName();Elements.ElementsPanel._firstInspectElementCompletedForTest();Host.InspectorFrontendHost.inspectElementCompleted();}
this._notFirstInspectElement=true;});}
_showUAShadowDOMChanged(){for(let i=0;i<this._treeOutlines.length;++i){this._treeOutlines[i].update();}}
_setupTextSelectionHack(stylePaneWrapperElement){const uninstallHackBound=uninstallHack.bind(this);const uninstallHackOnMousemove=event=>{if(event.buttons===0){uninstallHack.call(this);}};stylePaneWrapperElement.addEventListener('mousedown',event=>{if(event.which!==1){return;}
this._splitWidget.element.classList.add('disable-resizer-for-elements-hack');stylePaneWrapperElement.style.setProperty('height',`${stylePaneWrapperElement.offsetHeight}px`);const largeLength=1000000;stylePaneWrapperElement.style.setProperty('left',`${- 1 * largeLength}px`);stylePaneWrapperElement.style.setProperty('padding-left',`${largeLength}px`);stylePaneWrapperElement.style.setProperty('width',`calc(100% + ${largeLength}px)`);stylePaneWrapperElement.style.setProperty('position',`fixed`);stylePaneWrapperElement.window().addEventListener('blur',uninstallHackBound);stylePaneWrapperElement.window().addEventListener('contextmenu',uninstallHackBound,true);stylePaneWrapperElement.window().addEventListener('dragstart',uninstallHackBound,true);stylePaneWrapperElement.window().addEventListener('mousemove',uninstallHackOnMousemove,true);stylePaneWrapperElement.window().addEventListener('mouseup',uninstallHackBound,true);stylePaneWrapperElement.window().addEventListener('visibilitychange',uninstallHackBound);},true);function uninstallHack(){this._splitWidget.element.classList.remove('disable-resizer-for-elements-hack');stylePaneWrapperElement.style.removeProperty('left');stylePaneWrapperElement.style.removeProperty('padding-left');stylePaneWrapperElement.style.removeProperty('width');stylePaneWrapperElement.style.removeProperty('position');stylePaneWrapperElement.window().removeEventListener('blur',uninstallHackBound);stylePaneWrapperElement.window().removeEventListener('contextmenu',uninstallHackBound,true);stylePaneWrapperElement.window().removeEventListener('dragstart',uninstallHackBound,true);stylePaneWrapperElement.window().removeEventListener('mousemove',uninstallHackOnMousemove,true);stylePaneWrapperElement.window().removeEventListener('mouseup',uninstallHackBound,true);stylePaneWrapperElement.window().removeEventListener('visibilitychange',uninstallHackBound);}}
_updateSidebarPosition(){if(this.sidebarPaneView&&this.sidebarPaneView.tabbedPane().shouldHideOnDetach()){return;}
let splitMode;const position=Common.moduleSetting('sidebarPosition').get();if(position==='right'||(position==='auto'&&UI.inspectorView.element.offsetWidth>680)){splitMode=_splitMode.Vertical;}else if(UI.inspectorView.element.offsetWidth>415){splitMode=_splitMode.Horizontal;}else{splitMode=_splitMode.Slim;}
if(this.sidebarPaneView&&splitMode===this._splitMode){return;}
this._splitMode=splitMode;const extensionSidebarPanes=Extensions.extensionServer.sidebarPanes();let lastSelectedTabId=null;if(this.sidebarPaneView){lastSelectedTabId=this.sidebarPaneView.tabbedPane().selectedTabId;this.sidebarPaneView.tabbedPane().detach();this._splitWidget.uninstallResizer(this.sidebarPaneView.tabbedPane().headerElement());}
this._splitWidget.setVertical(this._splitMode===_splitMode.Vertical);this.showToolbarPane(null,null);const matchedStylePanesWrapper=new UI.VBox();matchedStylePanesWrapper.element.classList.add('style-panes-wrapper');this._stylesWidget.show(matchedStylePanesWrapper.element);this._setupTextSelectionHack(matchedStylePanesWrapper.element);const computedStylePanesWrapper=new UI.VBox();computedStylePanesWrapper.element.classList.add('style-panes-wrapper');this._computedStyleWidget.show(computedStylePanesWrapper.element);function showMetrics(inComputedStyle){if(inComputedStyle){this._metricsWidget.show(computedStylePanesWrapper.element,this._computedStyleWidget.element);}else{this._metricsWidget.show(matchedStylePanesWrapper.element);}}
function tabSelected(event){const tabId=(event.data.tabId);if(tabId===Common.UIString('Computed')){showMetrics.call(this,true);}else if(tabId===Common.UIString('Styles')){showMetrics.call(this,false);}}
this.sidebarPaneView=UI.viewManager.createTabbedLocation(()=>UI.viewManager.showView('elements'));const tabbedPane=this.sidebarPaneView.tabbedPane();if(this._popoverHelper){this._popoverHelper.hidePopover();}
this._popoverHelper=new UI.PopoverHelper(tabbedPane.element,this._getPopoverRequest.bind(this));this._popoverHelper.setHasPadding(true);this._popoverHelper.setTimeout(0);if(this._splitMode!==_splitMode.Vertical){this._splitWidget.installResizer(tabbedPane.headerElement());}
const stylesView=new UI.SimpleView(Common.UIString('Styles'));this.sidebarPaneView.appendView(stylesView);if(splitMode===_splitMode.Horizontal){stylesView.element.classList.add('flex-auto');const splitWidget=new UI.SplitWidget(true,true,'stylesPaneSplitViewState',215);splitWidget.show(stylesView.element);splitWidget.setMainWidget(matchedStylePanesWrapper);splitWidget.setSidebarWidget(computedStylePanesWrapper);}else{stylesView.element.classList.add('flex-auto');matchedStylePanesWrapper.show(stylesView.element);const computedView=new UI.SimpleView(Common.UIString('Computed'));computedView.element.classList.add('composite','fill');computedStylePanesWrapper.show(computedView.element);tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected,tabSelected,this);this.sidebarPaneView.appendView(computedView);}
this._stylesViewToReveal=stylesView;showMetrics.call(this,this._splitMode===_splitMode.Horizontal);this.sidebarPaneView.appendApplicableItems('elements-sidebar');for(let i=0;i<extensionSidebarPanes.length;++i){this._addExtensionSidebarPane(extensionSidebarPanes[i]);}
if(lastSelectedTabId){this.sidebarPaneView.tabbedPane().selectTab(lastSelectedTabId);}
this._splitWidget.setSidebarWidget(this.sidebarPaneView.tabbedPane());}
_extensionSidebarPaneAdded(event){const pane=(event.data);this._addExtensionSidebarPane(pane);}
_addExtensionSidebarPane(pane){if(pane.panelName()===this.name){this.sidebarPaneView.appendView(pane);}}}
export const _splitMode={Vertical:Symbol('Vertical'),Horizontal:Symbol('Horizontal'),Slim:Symbol('Slim'),};export class ContextMenuProvider{appendApplicableItems(event,contextMenu,object){if(!(object instanceof SDK.RemoteObject&&((object)).isNode())&&!(object instanceof SDK.DOMNode)&&!(object instanceof SDK.DeferredDOMNode)){return;}
if(ElementsPanel.instance().element.isAncestor((event.target))){return;}
const commandCallback=Common.Revealer.reveal.bind(Common.Revealer,object);contextMenu.revealSection().appendItem(Common.UIString('Reveal in Elements panel'),commandCallback);}}
export class DOMNodeRevealer{reveal(node,omitFocus){const panel=ElementsPanel.instance();panel._pendingNodeReveal=true;return new Promise(revealPromise);function revealPromise(resolve,reject){if(node instanceof SDK.DOMNode){onNodeResolved((node));}else if(node instanceof SDK.DeferredDOMNode){((node)).resolve(onNodeResolved);}else if(node instanceof SDK.RemoteObject){const domModel=(node).runtimeModel().target().model(SDK.DOMModel);if(domModel){domModel.pushObjectAsNodeToFrontend(node).then(onNodeResolved);}else{reject(new Error('Could not resolve a node to reveal.'));}}else{reject(new Error('Can\'t reveal a non-node.'));panel._pendingNodeReveal=false;}
function onNodeResolved(resolvedNode){panel._pendingNodeReveal=false;let currentNode=resolvedNode;while(currentNode.parentNode){currentNode=currentNode.parentNode;}
const isDetached=!(currentNode instanceof SDK.DOMDocument);const isDocument=node instanceof SDK.DOMDocument;if(!isDocument&&isDetached){const msg=ls`Node cannot be found in the current page.`;Common.console.warn(msg);reject(new Error(msg));return;}
if(resolvedNode){panel.revealAndSelectNode(resolvedNode,!omitFocus).then(resolve);return;}
reject(new Error('Could not resolve node to reveal.'));}}}}
export class CSSPropertyRevealer{reveal(property){const panel=ElementsPanel.instance();return panel._revealProperty((property));}}
export class ElementsActionDelegate{handleAction(context,actionId){const node=UI.context.flavor(SDK.DOMNode);if(!node){return true;}
const treeOutline=Elements.ElementsTreeOutline.forDOMModel(node.domModel());if(!treeOutline){return true;}
switch(actionId){case'elements.hide-element':treeOutline.toggleHideElement(node);return true;case'elements.edit-as-html':treeOutline.toggleEditAsHTML(node);return true;case'elements.undo':SDK.domModelUndoStack.undo();ElementsPanel.instance()._stylesWidget.forceUpdate();return true;case'elements.redo':SDK.domModelUndoStack.redo();ElementsPanel.instance()._stylesWidget.forceUpdate();return true;}
return false;}}
export class PseudoStateMarkerDecorator{decorate(node){return{color:'orange',title:Common.UIString('Element state: %s',':'+node.domModel().cssModel().pseudoState(node).join(', :'))};}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.ElementsPanel=ElementsPanel;Elements.ElementsPanel._firstInspectElementCompletedForTest=function(){};Elements.ElementsPanel._splitMode=_splitMode;Elements.ElementsPanel.ContextMenuProvider=ContextMenuProvider;Elements.ElementsPanel.DOMNodeRevealer=DOMNodeRevealer;Elements.ElementsPanel.CSSPropertyRevealer=CSSPropertyRevealer;Elements.ElementsActionDelegate=ElementsActionDelegate;Elements.ElementsPanel.PseudoStateMarkerDecorator=PseudoStateMarkerDecorator;export default class ElementsBreadcrumbs extends UI.HBox{constructor(){super(true);this.registerRequiredCSS('elements/breadcrumbs.css');this.crumbsElement=this.contentElement.createChild('div','crumbs');this.crumbsElement.addEventListener('mousemove',this._mouseMovedInCrumbs.bind(this),false);this.crumbsElement.addEventListener('mouseleave',this._mouseMovedOutOfCrumbs.bind(this),false);this._nodeSymbol=Symbol('node');UI.ARIAUtils.markAsHidden(this.element);}
wasShown(){this.update();}
updateNodes(nodes){if(!nodes.length){return;}
const crumbs=this.crumbsElement;for(let crumb=crumbs.firstChild;crumb;crumb=crumb.nextSibling){if(nodes.indexOf(crumb[this._nodeSymbol])!==-1){this.update(true);return;}}}
setSelectedNode(node){this._currentDOMNode=node;this.crumbsElement.window().requestAnimationFrame(()=>this.update());}
_mouseMovedInCrumbs(event){const nodeUnderMouse=event.target;const crumbElement=nodeUnderMouse.enclosingNodeOrSelfWithClass('crumb');const node=(crumbElement?crumbElement[this._nodeSymbol]:null);if(node){node.highlight();}}
_mouseMovedOutOfCrumbs(event){if(this._currentDOMNode){SDK.OverlayModel.hideDOMNodeHighlight();}}
_onClickCrumb(event){event.preventDefault();let crumb=(event.currentTarget);if(!crumb.classList.contains('collapsed')){this.dispatchEventToListeners(Events.NodeSelected,crumb[this._nodeSymbol]);return;}
if(crumb===this.crumbsElement.firstChild){let currentCrumb=crumb;while(currentCrumb){const hidden=currentCrumb.classList.contains('hidden');const collapsed=currentCrumb.classList.contains('collapsed');if(!hidden&&!collapsed){break;}
crumb=currentCrumb;currentCrumb=currentCrumb.nextSiblingElement;}}
this.updateSizes(crumb);}
_determineElementTitle(domNode){switch(domNode.nodeType()){case Node.ELEMENT_NODE:if(domNode.pseudoType()){return'::'+domNode.pseudoType();}
return null;case Node.TEXT_NODE:return Common.UIString('(text)');case Node.COMMENT_NODE:return'<!-->';case Node.DOCUMENT_TYPE_NODE:return'<!doctype>';case Node.DOCUMENT_FRAGMENT_NODE:return domNode.shadowRootType()?'#shadow-root':domNode.nodeNameInCorrectCase();default:return domNode.nodeNameInCorrectCase();}}
update(force){if(!this.isShowing()){return;}
const currentDOMNode=this._currentDOMNode;const crumbs=this.crumbsElement;let handled=false;let crumb=crumbs.firstChild;while(crumb){if(crumb[this._nodeSymbol]===currentDOMNode){crumb.classList.add('selected');handled=true;}else{crumb.classList.remove('selected');}
crumb=crumb.nextSibling;}
if(handled&&!force){this.updateSizes();return;}
crumbs.removeChildren();for(let current=currentDOMNode;current;current=current.parentNode){if(current.nodeType()===Node.DOCUMENT_NODE){continue;}
crumb=createElementWithClass('span','crumb');crumb[this._nodeSymbol]=current;crumb.addEventListener('mousedown',this._onClickCrumb.bind(this),false);const crumbTitle=this._determineElementTitle(current);if(crumbTitle){const nameElement=createElement('span');nameElement.textContent=crumbTitle;crumb.appendChild(nameElement);crumb.title=crumbTitle;}else{Elements.DOMLinkifier.decorateNodeLabel(current,crumb);}
if(current===currentDOMNode){crumb.classList.add('selected');}
crumbs.insertBefore(crumb,crumbs.firstChild);}
this.updateSizes();}
_resetCrumbStylesAndFindSelections(focusedCrumb){const crumbs=this.crumbsElement;let selectedIndex=0;let focusedIndex=0;let selectedCrumb=null;for(let i=0;i<crumbs.childNodes.length;++i){const crumb=crumbs.children[i];if(!selectedCrumb&&crumb.classList.contains('selected')){selectedCrumb=crumb;selectedIndex=i;}
if(crumb===focusedCrumb){focusedIndex=i;}
crumb.classList.remove('compact','collapsed','hidden');}
return{selectedIndex:selectedIndex,focusedIndex:focusedIndex,selectedCrumb:selectedCrumb};}
_measureElementSizes(){const crumbs=this.crumbsElement;const collapsedElement=createElementWithClass('span','crumb collapsed');crumbs.insertBefore(collapsedElement,crumbs.firstChild);const available=crumbs.offsetWidth;const collapsed=collapsedElement.offsetWidth;const normalSizes=[];for(let i=1;i<crumbs.childNodes.length;++i){const crumb=crumbs.childNodes[i];normalSizes[i-1]=crumb.offsetWidth;}
crumbs.removeChild(collapsedElement);const compactSizes=[];for(let i=0;i<crumbs.childNodes.length;++i){const crumb=crumbs.childNodes[i];crumb.classList.add('compact');}
for(let i=0;i<crumbs.childNodes.length;++i){const crumb=crumbs.childNodes[i];compactSizes[i]=crumb.offsetWidth;}
for(let i=0;i<crumbs.childNodes.length;++i){const crumb=crumbs.childNodes[i];crumb.classList.remove('compact','collapsed');}
return{normal:normalSizes,compact:compactSizes,collapsed:collapsed,available:available};}
updateSizes(focusedCrumb){if(!this.isShowing()){return;}
const crumbs=this.crumbsElement;if(!crumbs.firstChild){return;}
const selections=this._resetCrumbStylesAndFindSelections(focusedCrumb);const sizes=this._measureElementSizes();const selectedIndex=selections.selectedIndex;const focusedIndex=selections.focusedIndex;const selectedCrumb=selections.selectedCrumb;function crumbsAreSmallerThanContainer(){let totalSize=0;for(let i=0;i<crumbs.childNodes.length;++i){const crumb=crumbs.childNodes[i];if(crumb.classList.contains('hidden')){continue;}
if(crumb.classList.contains('collapsed')){totalSize+=sizes.collapsed;continue;}
totalSize+=crumb.classList.contains('compact')?sizes.compact[i]:sizes.normal[i];}
const rightPadding=10;return totalSize+rightPadding<sizes.available;}
if(crumbsAreSmallerThanContainer()){return;}
const BothSides=0;const AncestorSide=-1;const ChildSide=1;function makeCrumbsSmaller(shrinkingFunction,direction){const significantCrumb=focusedCrumb||selectedCrumb;const significantIndex=significantCrumb===selectedCrumb?selectedIndex:focusedIndex;function shrinkCrumbAtIndex(index){const shrinkCrumb=crumbs.children[index];if(shrinkCrumb&&shrinkCrumb!==significantCrumb){shrinkingFunction(shrinkCrumb);}
if(crumbsAreSmallerThanContainer()){return true;}
return false;}
if(direction){let index=(direction>0?0:crumbs.childNodes.length-1);while(index!==significantIndex){if(shrinkCrumbAtIndex(index)){return true;}
index+=(direction>0?1:-1);}}else{let startIndex=0;let endIndex=crumbs.childNodes.length-1;while(startIndex!==significantIndex||endIndex!==significantIndex){const startDistance=significantIndex-startIndex;const endDistance=endIndex-significantIndex;let index;if(startDistance>=endDistance){index=startIndex++;}else{index=endIndex--;}
if(shrinkCrumbAtIndex(index)){return true;}}}
return false;}
function coalesceCollapsedCrumbs(){let crumb=crumbs.firstChild;let collapsedRun=false;let newStartNeeded=false;let newEndNeeded=false;while(crumb){const hidden=crumb.classList.contains('hidden');if(!hidden){const collapsed=crumb.classList.contains('collapsed');if(collapsedRun&&collapsed){crumb.classList.add('hidden');crumb.classList.remove('compact');crumb.classList.remove('collapsed');if(crumb.classList.contains('start')){crumb.classList.remove('start');newStartNeeded=true;}
if(crumb.classList.contains('end')){crumb.classList.remove('end');newEndNeeded=true;}
continue;}
collapsedRun=collapsed;if(newEndNeeded){newEndNeeded=false;crumb.classList.add('end');}}else{collapsedRun=true;}
crumb=crumb.nextSibling;}
if(newStartNeeded){crumb=crumbs.lastChild;while(crumb){if(!crumb.classList.contains('hidden')){crumb.classList.add('start');break;}
crumb=crumb.previousSibling;}}}
function compact(crumb){if(crumb.classList.contains('hidden')){return;}
crumb.classList.add('compact');}
function collapse(crumb,dontCoalesce){if(crumb.classList.contains('hidden')){return;}
crumb.classList.add('collapsed');crumb.classList.remove('compact');if(!dontCoalesce){coalesceCollapsedCrumbs();}}
if(!focusedCrumb){if(makeCrumbsSmaller(compact,ChildSide)){return;}
if(makeCrumbsSmaller(collapse,ChildSide)){return;}}
if(makeCrumbsSmaller(compact,focusedCrumb?BothSides:AncestorSide)){return;}
if(makeCrumbsSmaller(collapse,focusedCrumb?BothSides:AncestorSide)){return;}
if(!selectedCrumb){return;}
compact(selectedCrumb);if(crumbsAreSmallerThanContainer()){return;}
collapse(selectedCrumb,true);}}
export const Events={NodeSelected:Symbol('NodeSelected')};self.Elements=self.Elements||{};Elements=Elements||{};Elements.ElementsBreadcrumbs=ElementsBreadcrumbs;Elements.ElementsBreadcrumbs.Events=Events;export const fullQualifiedSelector=function(node,justSelector){if(node.nodeType()!==Node.ELEMENT_NODE){return node.localName()||node.nodeName().toLowerCase();}
return cssPath(node,justSelector);};export const cssPath=function(node,optimized){if(node.nodeType()!==Node.ELEMENT_NODE){return'';}
const steps=[];let contextNode=node;while(contextNode){const step=_cssPathStep(contextNode,!!optimized,contextNode===node);if(!step){break;}
steps.push(step);if(step.optimized){break;}
contextNode=contextNode.parentNode;}
steps.reverse();return steps.join(' > ');};export const canGetJSPath=function(node){let wp=node;while(wp){if(wp.ancestorShadowRoot()&&wp.ancestorShadowRoot().shadowRootType()!==SDK.DOMNode.ShadowRootTypes.Open){return false;}
wp=wp.ancestorShadowHost();}
return true;};export const jsPath=function(node,optimized){if(node.nodeType()!==Node.ELEMENT_NODE){return'';}
const path=[];let wp=node;while(wp){path.push(cssPath(wp,optimized));wp=wp.ancestorShadowHost();}
path.reverse();let result='';for(let i=0;i<path.length;++i){const string=JSON.stringify(path[i]);if(i){result+=`.shadowRoot.querySelector(${string})`;}else{result+=`document.querySelector(${string})`;}}
return result;};export const _cssPathStep=function(node,optimized,isTargetNode){if(node.nodeType()!==Node.ELEMENT_NODE){return null;}
const id=node.getAttribute('id');if(optimized){if(id){return new Step(idSelector(id),true);}
const nodeNameLower=node.nodeName().toLowerCase();if(nodeNameLower==='body'||nodeNameLower==='head'||nodeNameLower==='html'){return new Step(node.nodeNameInCorrectCase(),true);}}
const nodeName=node.nodeNameInCorrectCase();if(id){return new Step(nodeName+idSelector(id),true);}
const parent=node.parentNode;if(!parent||parent.nodeType()===Node.DOCUMENT_NODE){return new Step(nodeName,true);}
function prefixedElementClassNames(node){const classAttribute=node.getAttribute('class');if(!classAttribute){return[];}
return classAttribute.split(/\s+/g).filter(Boolean).map(function(name){return'$'+name;});}
function idSelector(id){return'#'+CSS.escape(id);}
const prefixedOwnClassNamesArray=prefixedElementClassNames(node);let needsClassNames=false;let needsNthChild=false;let ownIndex=-1;let elementIndex=-1;const siblings=parent.children();for(let i=0;(ownIndex===-1||!needsNthChild)&&i<siblings.length;++i){const sibling=siblings[i];if(sibling.nodeType()!==Node.ELEMENT_NODE){continue;}
elementIndex+=1;if(sibling===node){ownIndex=elementIndex;continue;}
if(needsNthChild){continue;}
if(sibling.nodeNameInCorrectCase()!==nodeName){continue;}
needsClassNames=true;const ownClassNames=new Set(prefixedOwnClassNamesArray);if(!ownClassNames.size){needsNthChild=true;continue;}
const siblingClassNamesArray=prefixedElementClassNames(sibling);for(let j=0;j<siblingClassNamesArray.length;++j){const siblingClass=siblingClassNamesArray[j];if(!ownClassNames.has(siblingClass)){continue;}
ownClassNames.delete(siblingClass);if(!ownClassNames.size){needsNthChild=true;break;}}}
let result=nodeName;if(isTargetNode&&nodeName.toLowerCase()==='input'&&node.getAttribute('type')&&!node.getAttribute('id')&&!node.getAttribute('class')){result+='[type='+CSS.escape(node.getAttribute('type'))+']';}
if(needsNthChild){result+=':nth-child('+(ownIndex+1)+')';}else if(needsClassNames){for(const prefixedName of prefixedOwnClassNamesArray){result+='.'+CSS.escape(prefixedName.slice(1));}}
return new Step(result,false);};export const xPath=function(node,optimized){if(node.nodeType()===Node.DOCUMENT_NODE){return'/';}
const steps=[];let contextNode=node;while(contextNode){const step=_xPathValue(contextNode,optimized);if(!step){break;}
steps.push(step);if(step.optimized){break;}
contextNode=contextNode.parentNode;}
steps.reverse();return(steps.length&&steps[0].optimized?'':'/')+steps.join('/');};export const _xPathValue=function(node,optimized){let ownValue;const ownIndex=_xPathIndex(node);if(ownIndex===-1){return null;}
switch(node.nodeType()){case Node.ELEMENT_NODE:if(optimized&&node.getAttribute('id')){return new Step('//*[@id="'+node.getAttribute('id')+'"]',true);}
ownValue=node.localName();break;case Node.ATTRIBUTE_NODE:ownValue='@'+node.nodeName();break;case Node.TEXT_NODE:case Node.CDATA_SECTION_NODE:ownValue='text()';break;case Node.PROCESSING_INSTRUCTION_NODE:ownValue='processing-instruction()';break;case Node.COMMENT_NODE:ownValue='comment()';break;case Node.DOCUMENT_NODE:ownValue='';break;default:ownValue='';break;}
if(ownIndex>0){ownValue+='['+ownIndex+']';}
return new Step(ownValue,node.nodeType()===Node.DOCUMENT_NODE);};export const _xPathIndex=function(node){function areNodesSimilar(left,right){if(left===right){return true;}
if(left.nodeType()===Node.ELEMENT_NODE&&right.nodeType()===Node.ELEMENT_NODE){return left.localName()===right.localName();}
if(left.nodeType()===right.nodeType()){return true;}
const leftType=left.nodeType()===Node.CDATA_SECTION_NODE?Node.TEXT_NODE:left.nodeType();const rightType=right.nodeType()===Node.CDATA_SECTION_NODE?Node.TEXT_NODE:right.nodeType();return leftType===rightType;}
const siblings=node.parentNode?node.parentNode.children():null;if(!siblings){return 0;}
let hasSameNamedElements;for(let i=0;i<siblings.length;++i){if(areNodesSimilar(node,siblings[i])&&siblings[i]!==node){hasSameNamedElements=true;break;}}
if(!hasSameNamedElements){return 0;}
let ownIndex=1;for(let i=0;i<siblings.length;++i){if(areNodesSimilar(node,siblings[i])){if(siblings[i]===node){return ownIndex;}
++ownIndex;}}
return-1;};export class Step{constructor(value,optimized){this.value=value;this.optimized=optimized||false;}
toString(){return this.value;}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.DOMPath={};Elements.DOMPath.fullQualifiedSelector=fullQualifiedSelector;Elements.DOMPath.cssPath=cssPath;Elements.DOMPath.canGetJSPath=canGetJSPath;Elements.DOMPath.jsPath=jsPath;Elements.DOMPath._cssPathStep=_cssPathStep;Elements.DOMPath.xPath=xPath;Elements.DOMPath._xPathValue=_xPathValue;Elements.DOMPath._xPathIndex=_xPathIndex;Elements.DOMPath.Step=Step;export const decorateNodeLabel=function(node,parentElement,tooltipContent){const originalNode=node;const isPseudo=node.nodeType()===Node.ELEMENT_NODE&&node.pseudoType();if(isPseudo&&node.parentNode){node=node.parentNode;}
let title=node.nodeNameInCorrectCase();const nameElement=parentElement.createChild('span','node-label-name');nameElement.textContent=title;const idAttribute=node.getAttribute('id');if(idAttribute){const idElement=parentElement.createChild('span','node-label-id');const part='#'+idAttribute;title+=part;idElement.createTextChild(part);nameElement.classList.add('extra');}
const classAttribute=node.getAttribute('class');if(classAttribute){const classes=classAttribute.split(/\s+/);const foundClasses={};if(classes.length){const classesElement=parentElement.createChild('span','extra node-label-class');for(let i=0;i<classes.length;++i){const className=classes[i];if(className&&!(className in foundClasses)){const part='.'+className;title+=part;classesElement.createTextChild(part);foundClasses[className]=true;}}}}
if(isPseudo){const pseudoElement=parentElement.createChild('span','extra node-label-pseudo');const pseudoText='::'+originalNode.pseudoType();pseudoElement.createTextChild(pseudoText);title+=pseudoText;}
parentElement.title=tooltipContent||title;};export const linkifyNodeReference=function(node,options={}){if(!node){return createTextNode(Common.UIString('<node>'));}
const root=createElementWithClass('span','monospace');const shadowRoot=UI.createShadowRootWithCoreStyles(root,'elements/domLinkifier.css');const link=shadowRoot.createChild('div','node-link');decorateNodeLabel(node,link,options.tooltip);link.addEventListener('click',()=>Common.Revealer.reveal(node,false)&&false,false);link.addEventListener('mouseover',node.highlight.bind(node,undefined),false);link.addEventListener('mouseleave',()=>SDK.OverlayModel.hideDOMNodeHighlight(),false);if(!options.preventKeyboardFocus){link.addEventListener('keydown',event=>isEnterKey(event)&&Common.Revealer.reveal(node,false)&&false);link.tabIndex=0;UI.ARIAUtils.markAsLink(link);}
return root;};export const linkifyDeferredNodeReference=function(deferredNode,options={}){const root=createElement('div');const shadowRoot=UI.createShadowRootWithCoreStyles(root,'elements/domLinkifier.css');const link=shadowRoot.createChild('div','node-link');link.createChild('slot');link.addEventListener('click',deferredNode.resolve.bind(deferredNode,onDeferredNodeResolved),false);link.addEventListener('mousedown',e=>e.consume(),false);if(!options.preventKeyboardFocus){link.addEventListener('keydown',event=>isEnterKey(event)&&deferredNode.resolve(onDeferredNodeResolved));link.tabIndex=0;UI.ARIAUtils.markAsLink(link);}
function onDeferredNodeResolved(node){Common.Revealer.reveal(node);}
return root;};export class Linkifier{linkify(object,options){if(object instanceof SDK.DOMNode){return linkifyNodeReference(object,options);}
if(object instanceof SDK.DeferredDOMNode){return linkifyDeferredNodeReference(object,options);}
throw new Error('Can\'t linkify non-node');}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.DOMLinkifier={};Elements.DOMLinkifier.decorateNodeLabel=decorateNodeLabel;Elements.DOMLinkifier.linkifyNodeReference=linkifyNodeReference;Elements.DOMLinkifier.linkifyDeferredNodeReference=linkifyDeferredNodeReference;Elements.DOMLinkifier.Linkifier=Linkifier;export default class ComputedStyleWidget extends UI.ThrottledWidget{constructor(){super(true);this.registerRequiredCSS('elements/computedStyleSidebarPane.css');this._alwaysShowComputedProperties={'display':true,'height':true,'width':true};this._computedStyleModel=new Elements.ComputedStyleModel();this._computedStyleModel.addEventListener(Elements.ComputedStyleModel.Events.ComputedStyleChanged,this.update,this);this._showInheritedComputedStylePropertiesSetting=Common.settings.createSetting('showInheritedComputedStyleProperties',false);this._showInheritedComputedStylePropertiesSetting.addChangeListener(this._showInheritedComputedStyleChanged.bind(this));const hbox=this.contentElement.createChild('div','hbox styles-sidebar-pane-toolbar');const filterContainerElement=hbox.createChild('div','styles-sidebar-pane-filter-box');const filterInput=Elements.StylesSidebarPane.createPropertyFilterElement(ls`Filter`,hbox,filterCallback.bind(this));UI.ARIAUtils.setAccessibleName(filterInput,Common.UIString('Filter Computed Styles'));filterContainerElement.appendChild(filterInput);this.setDefaultFocusedElement(filterInput);const toolbar=new UI.Toolbar('styles-pane-toolbar',hbox);toolbar.appendToolbarItem(new UI.ToolbarSettingCheckbox(this._showInheritedComputedStylePropertiesSetting,undefined,Common.UIString('Show all')));this._noMatchesElement=this.contentElement.createChild('div','gray-info-message');this._noMatchesElement.textContent=ls`No matching property`;this._propertiesOutline=new UI.TreeOutlineInShadow();this._propertiesOutline.hideOverflow();this._propertiesOutline.setShowSelectionOnKeyboardFocus(true);this._propertiesOutline.setFocusable(true);this._propertiesOutline.registerRequiredCSS('elements/computedStyleWidgetTree.css');this._propertiesOutline.element.classList.add('monospace','computed-properties');this.contentElement.appendChild(this._propertiesOutline.element);this._linkifier=new Components.Linkifier(_maxLinkLength);function filterCallback(regex){this._filterRegex=regex;this._updateFilter(regex);}
const fontsWidget=new Elements.PlatformFontsWidget(this._computedStyleModel);fontsWidget.show(this.contentElement);}
onResize(){const isNarrow=this.contentElement.offsetWidth<260;this._propertiesOutline.contentElement.classList.toggle('computed-narrow',isNarrow);}
_showInheritedComputedStyleChanged(){this.update();}
doUpdate(){const promises=[this._computedStyleModel.fetchComputedStyle(),this._fetchMatchedCascade()];return Promise.all(promises).spread(this._innerRebuildUpdate.bind(this));}
_fetchMatchedCascade(){const node=this._computedStyleModel.node();if(!node||!this._computedStyleModel.cssModel()){return Promise.resolve((null));}
return this._computedStyleModel.cssModel().cachedMatchedCascadeForNode(node).then(validateStyles.bind(this));function validateStyles(matchedStyles){return matchedStyles&&matchedStyles.node()===this._computedStyleModel.node()?matchedStyles:null;}}
_processColor(text){const color=Common.Color.parse(text);if(!color){return createTextNode(text);}
const swatch=InlineEditor.ColorSwatch.create();swatch.setColor(color);swatch.setFormat(Common.Color.detectColorFormat(color));return swatch;}
_innerRebuildUpdate(nodeStyle,matchedStyles){const expandedProperties=new Set();for(const treeElement of this._propertiesOutline.rootElement().children()){if(!treeElement.expanded){continue;}
const propertyName=treeElement[_propertySymbol].name;expandedProperties.add(propertyName);}
const hadFocus=this._propertiesOutline.element.hasFocus();this._propertiesOutline.removeChildren();this._linkifier.reset();const cssModel=this._computedStyleModel.cssModel();if(!nodeStyle||!matchedStyles||!cssModel){this._noMatchesElement.classList.remove('hidden');return;}
const uniqueProperties=nodeStyle.computedStyle.keysArray();uniqueProperties.sort(propertySorter);const propertyTraces=this._computePropertyTraces(matchedStyles);const inhertiedProperties=this._computeInheritedProperties(matchedStyles);const showInherited=this._showInheritedComputedStylePropertiesSetting.get();for(let i=0;i<uniqueProperties.length;++i){const propertyName=uniqueProperties[i];const propertyValue=nodeStyle.computedStyle.get(propertyName);const canonicalName=SDK.cssMetadata().canonicalPropertyName(propertyName);const inherited=!inhertiedProperties.has(canonicalName);if(!showInherited&&inherited&&!(propertyName in this._alwaysShowComputedProperties)){continue;}
if(!showInherited&&propertyName.startsWith('--')){continue;}
if(propertyName!==canonicalName&&propertyValue===nodeStyle.computedStyle.get(canonicalName)){continue;}
const propertyElement=createElement('div');propertyElement.classList.add('computed-style-property');propertyElement.classList.toggle('computed-style-property-inherited',inherited);const renderer=new Elements.StylesSidebarPropertyRenderer(null,nodeStyle.node,propertyName,(propertyValue));renderer.setColorHandler(this._processColor.bind(this));const propertyNameElement=renderer.renderName();propertyNameElement.classList.add('property-name');propertyElement.appendChild(propertyNameElement);const colon=createElementWithClass('span','delimeter');colon.textContent=': ';propertyNameElement.appendChild(colon);const propertyValueElement=propertyElement.createChild('span','property-value');const propertyValueText=renderer.renderValue();propertyValueText.classList.add('property-value-text');propertyValueElement.appendChild(propertyValueText);const semicolon=createElementWithClass('span','delimeter');semicolon.textContent=';';propertyValueElement.appendChild(semicolon);const treeElement=new UI.TreeElement();treeElement.title=propertyElement;treeElement[_propertySymbol]={name:propertyName,value:propertyValue};const isOdd=this._propertiesOutline.rootElement().children().length%2===0;treeElement.listItemElement.classList.toggle('odd-row',isOdd);this._propertiesOutline.appendChild(treeElement);if(!this._propertiesOutline.selectedTreeElement){treeElement.select(!hadFocus);}
const trace=propertyTraces.get(propertyName);if(trace){const activeProperty=this._renderPropertyTrace(cssModel,matchedStyles,nodeStyle.node,treeElement,trace);treeElement.listItemElement.addEventListener('mousedown',e=>e.consume(),false);treeElement.listItemElement.addEventListener('dblclick',e=>e.consume(),false);treeElement.listItemElement.addEventListener('click',handleClick.bind(null,treeElement),false);treeElement.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this,matchedStyles,activeProperty));const gotoSourceElement=UI.Icon.create('mediumicon-arrow-in-circle','goto-source-icon');gotoSourceElement.addEventListener('click',this._navigateToSource.bind(this,activeProperty));propertyValueElement.appendChild(gotoSourceElement);if(expandedProperties.has(propertyName)){treeElement.expand();}}}
this._updateFilter(this._filterRegex);function propertySorter(a,b){if(a.startsWith('--')^b.startsWith('--')){return a.startsWith('--')?1:-1;}
if(a.startsWith('-webkit')^b.startsWith('-webkit')){return a.startsWith('-webkit')?1:-1;}
const canonical1=SDK.cssMetadata().canonicalPropertyName(a);const canonical2=SDK.cssMetadata().canonicalPropertyName(b);return canonical1.compareTo(canonical2);}
function handleClick(treeElement,event){if(!treeElement.expanded){treeElement.expand();}else{treeElement.collapse();}
event.consume();}}
_navigateToSource(cssProperty,event){Common.Revealer.reveal(cssProperty);event.consume(true);}
_renderPropertyTrace(cssModel,matchedStyles,node,rootTreeElement,tracedProperties){let activeProperty=null;for(const property of tracedProperties){const trace=createElement('div');trace.classList.add('property-trace');if(matchedStyles.propertyState(property)===SDK.CSSMatchedStyles.PropertyState.Overloaded){trace.classList.add('property-trace-inactive');}else{activeProperty=property;}
const renderer=new Elements.StylesSidebarPropertyRenderer(null,node,property.name,(property.value));renderer.setColorHandler(this._processColor.bind(this));const valueElement=renderer.renderValue();valueElement.classList.add('property-trace-value');valueElement.addEventListener('click',this._navigateToSource.bind(this,property),false);const gotoSourceElement=UI.Icon.create('mediumicon-arrow-in-circle','goto-source-icon');gotoSourceElement.addEventListener('click',this._navigateToSource.bind(this,property));valueElement.insertBefore(gotoSourceElement,valueElement.firstChild);trace.appendChild(valueElement);const rule=property.ownerStyle.parentRule;const selectorElement=trace.createChild('span','property-trace-selector');selectorElement.textContent=rule?rule.selectorText():'element.style';selectorElement.title=selectorElement.textContent;if(rule){const linkSpan=trace.createChild('span','trace-link');linkSpan.appendChild(Elements.StylePropertiesSection.createRuleOriginNode(matchedStyles,this._linkifier,rule));}
const traceTreeElement=new UI.TreeElement();traceTreeElement.title=trace;traceTreeElement.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this,matchedStyles,property));rootTreeElement.appendChild(traceTreeElement);}
return(activeProperty);}
_handleContextMenuEvent(matchedStyles,property,event){const contextMenu=new UI.ContextMenu(event);const rule=property.ownerStyle.parentRule;if(rule){const header=rule.styleSheetId?matchedStyles.cssModel().styleSheetHeaderForId(rule.styleSheetId):null;if(header&&!header.isAnonymousInlineStyleSheet()){contextMenu.defaultSection().appendItem(ls`Navigate to selector source`,()=>{Elements.StylePropertiesSection.tryNavigateToRuleLocation(matchedStyles,rule);});}}
contextMenu.defaultSection().appendItem(ls`Navigate to style`,()=>Common.Revealer.reveal(property));contextMenu.show();}
_computePropertyTraces(matchedStyles){const result=new Map();for(const style of matchedStyles.nodeStyles()){const allProperties=style.allProperties();for(const property of allProperties){if(!property.activeInStyle()||!matchedStyles.propertyState(property)){continue;}
if(!result.has(property.name)){result.set(property.name,[]);}
result.get(property.name).push(property);}}
return result;}
_computeInheritedProperties(matchedStyles){const result=new Set();for(const style of matchedStyles.nodeStyles()){for(const property of style.allProperties()){if(!matchedStyles.propertyState(property)){continue;}
result.add(SDK.cssMetadata().canonicalPropertyName(property.name));}}
return result;}
_updateFilter(regex){const children=this._propertiesOutline.rootElement().children();let hasMatch=false;for(const child of children){const property=child[_propertySymbol];const matched=!regex||regex.test(property.name)||regex.test(property.value);child.hidden=!matched;hasMatch|=matched;}
this._noMatchesElement.classList.toggle('hidden',!!hasMatch);}}
export const _maxLinkLength=30;export const _propertySymbol=Symbol('property');self.Elements=self.Elements||{};Elements=Elements||{};Elements.ComputedStyleWidget=ComputedStyleWidget;Elements.ComputedStyleWidget._maxLinkLength=_maxLinkLength;Elements.ComputedStyleWidget._propertySymbol=_propertySymbol;export default class ComputedStyleModel extends Common.Object{constructor(){super();this._node=UI.context.flavor(SDK.DOMNode);this._cssModel=null;this._eventListeners=[];UI.context.addFlavorChangeListener(SDK.DOMNode,this._onNodeChanged,this);}
node(){return this._node;}
cssModel(){return this._cssModel&&this._cssModel.isEnabled()?this._cssModel:null;}
_onNodeChanged(event){this._node=(event.data);this._updateModel(this._node?this._node.domModel().cssModel():null);this._onComputedStyleChanged(null);}
_updateModel(cssModel){if(this._cssModel===cssModel){return;}
Common.EventTarget.removeEventListeners(this._eventListeners);this._cssModel=cssModel;const domModel=cssModel?cssModel.domModel():null;const resourceTreeModel=cssModel?cssModel.target().model(SDK.ResourceTreeModel):null;if(cssModel&&domModel&&resourceTreeModel){this._eventListeners=[cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded,this._onComputedStyleChanged,this),cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetRemoved,this._onComputedStyleChanged,this),cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged,this._onComputedStyleChanged,this),cssModel.addEventListener(SDK.CSSModel.Events.FontsUpdated,this._onComputedStyleChanged,this),cssModel.addEventListener(SDK.CSSModel.Events.MediaQueryResultChanged,this._onComputedStyleChanged,this),cssModel.addEventListener(SDK.CSSModel.Events.PseudoStateForced,this._onComputedStyleChanged,this),cssModel.addEventListener(SDK.CSSModel.Events.ModelWasEnabled,this._onComputedStyleChanged,this),domModel.addEventListener(SDK.DOMModel.Events.DOMMutated,this._onDOMModelChanged,this),resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameResized,this._onFrameResized,this),];}}
_onComputedStyleChanged(event){delete this._computedStylePromise;this.dispatchEventToListeners(Events.ComputedStyleChanged,event?event.data:null);}
_onDOMModelChanged(event){const node=(event.data);if(!this._node||this._node!==node&&node.parentNode!==this._node.parentNode&&!node.isAncestor(this._node)){return;}
this._onComputedStyleChanged(null);}
_onFrameResized(event){function refreshContents(){this._onComputedStyleChanged(null);delete this._frameResizedTimer;}
if(this._frameResizedTimer){clearTimeout(this._frameResizedTimer);}
this._frameResizedTimer=setTimeout(refreshContents.bind(this),100);}
_elementNode(){return this.node()?this.node().enclosingElementOrSelf():null;}
fetchComputedStyle(){const elementNode=this._elementNode();const cssModel=this.cssModel();if(!elementNode||!cssModel){return Promise.resolve((null));}
if(!this._computedStylePromise){this._computedStylePromise=cssModel.computedStylePromise(elementNode.id).then(verifyOutdated.bind(this,elementNode));}
return this._computedStylePromise;function verifyOutdated(elementNode,style){return elementNode===this._elementNode()&&style?new ComputedStyle(elementNode,style):(null);}}}
export const Events={ComputedStyleChanged:Symbol('ComputedStyleChanged')};export class ComputedStyle{constructor(node,computedStyle){this.node=node;this.computedStyle=computedStyle;}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.ComputedStyleModel=ComputedStyleModel;Elements.ComputedStyleModel.Events=Events;Elements.ComputedStyleModel.ComputedStyle=ComputedStyle;export class BezierPopoverIcon{constructor(treeElement,swatchPopoverHelper,swatch){this._treeElement=treeElement;this._swatchPopoverHelper=swatchPopoverHelper;this._swatch=swatch;this._swatch.iconElement().title=Common.UIString('Open cubic bezier editor.');this._swatch.iconElement().addEventListener('click',this._iconClick.bind(this),false);this._swatch.iconElement().addEventListener('mousedown',event=>event.consume(),false);this._boundBezierChanged=this._bezierChanged.bind(this);this._boundOnScroll=this._onScroll.bind(this);}
_iconClick(event){event.consume(true);if(this._swatchPopoverHelper.isShowing()){this._swatchPopoverHelper.hide(true);return;}
this._bezierEditor=new InlineEditor.BezierEditor();let cubicBezier=UI.Geometry.CubicBezier.parse(this._swatch.bezierText());if(!cubicBezier){cubicBezier=(UI.Geometry.CubicBezier.parse('linear'));}
this._bezierEditor.setBezier(cubicBezier);this._bezierEditor.addEventListener(InlineEditor.BezierEditor.Events.BezierChanged,this._boundBezierChanged);this._swatchPopoverHelper.show(this._bezierEditor,this._swatch.iconElement(),this._onPopoverHidden.bind(this));this._scrollerElement=this._swatch.enclosingNodeOrSelfWithClass('style-panes-wrapper');if(this._scrollerElement){this._scrollerElement.addEventListener('scroll',this._boundOnScroll,false);}
this._originalPropertyText=this._treeElement.property.propertyText;this._treeElement.parentPane().setEditingStyle(true);const uiLocation=Bindings.cssWorkspaceBinding.propertyUILocation(this._treeElement.property,false);if(uiLocation){Common.Revealer.reveal(uiLocation,true);}}
_bezierChanged(event){this._swatch.setBezierText((event.data));this._treeElement.applyStyleText(this._treeElement.renderedPropertyText(),false);}
_onScroll(event){this._swatchPopoverHelper.reposition();}
_onPopoverHidden(commitEdit){if(this._scrollerElement){this._scrollerElement.removeEventListener('scroll',this._boundOnScroll,false);}
this._bezierEditor.removeEventListener(InlineEditor.BezierEditor.Events.BezierChanged,this._boundBezierChanged);delete this._bezierEditor;const propertyText=commitEdit?this._treeElement.renderedPropertyText():this._originalPropertyText;this._treeElement.applyStyleText(propertyText,true);this._treeElement.parentPane().setEditingStyle(false);delete this._originalPropertyText;}}
export default class ColorSwatchPopoverIcon{constructor(treeElement,swatchPopoverHelper,swatch){this._treeElement=treeElement;this._treeElement[ColorSwatchPopoverIcon._treeElementSymbol]=this;this._swatchPopoverHelper=swatchPopoverHelper;this._swatch=swatch;const shiftClickMessage=Common.UIString('Shift + Click to change color format.');this._swatch.iconElement().title=Common.UIString('Open color picker. %s',shiftClickMessage);this._swatch.iconElement().addEventListener('click',this._iconClick.bind(this));this._swatch.iconElement().addEventListener('mousedown',event=>event.consume(),false);this._contrastInfo=null;this._boundSpectrumChanged=this._spectrumChanged.bind(this);this._boundOnScroll=this._onScroll.bind(this);}
_generateCSSVariablesPalette(){const matchedStyles=this._treeElement.matchedStyles();const style=this._treeElement.property.ownerStyle;const cssVariables=matchedStyles.availableCSSVariables(style);const colors=[];const colorNames=[];for(const cssVariable of cssVariables){if(cssVariable===this._treeElement.property.name){continue;}
const value=matchedStyles.computeCSSVariable(style,cssVariable);if(!value){continue;}
const color=Common.Color.parse(value);if(!color){continue;}
colors.push(value);colorNames.push(cssVariable);}
return{title:'CSS Variables',mutable:false,matchUserFormat:true,colors:colors,colorNames:colorNames};}
static forTreeElement(treeElement){return treeElement[ColorSwatchPopoverIcon._treeElementSymbol]||null;}
setContrastInfo(contrastInfo){this._contrastInfo=contrastInfo;}
_iconClick(event){event.consume(true);this.showPopover();}
showPopover(){if(this._swatchPopoverHelper.isShowing()){this._swatchPopoverHelper.hide(true);return;}
const color=this._swatch.color();let format=this._swatch.format();if(format===Common.Color.Format.Original){format=color.format();}
this._spectrum=new ColorPicker.Spectrum(this._contrastInfo);this._spectrum.setColor(color,format);this._spectrum.addPalette(this._generateCSSVariablesPalette());this._spectrum.addEventListener(ColorPicker.Spectrum.Events.SizeChanged,this._spectrumResized,this);this._spectrum.addEventListener(ColorPicker.Spectrum.Events.ColorChanged,this._boundSpectrumChanged);this._swatchPopoverHelper.show(this._spectrum,this._swatch.iconElement(),this._onPopoverHidden.bind(this));this._scrollerElement=this._swatch.enclosingNodeOrSelfWithClass('style-panes-wrapper');if(this._scrollerElement){this._scrollerElement.addEventListener('scroll',this._boundOnScroll,false);}
this._originalPropertyText=this._treeElement.property.propertyText;this._treeElement.parentPane().setEditingStyle(true);const uiLocation=Bindings.cssWorkspaceBinding.propertyUILocation(this._treeElement.property,false);if(uiLocation){Common.Revealer.reveal(uiLocation,true);}}
_spectrumResized(event){this._swatchPopoverHelper.reposition();}
_spectrumChanged(event){const color=Common.Color.parse((event.data));if(!color){return;}
this._swatch.setColor(color);const colorName=this._spectrum.colorName();if(colorName&&colorName.startsWith('--')){this._swatch.setText(`var(${colorName})`);}
this._treeElement.applyStyleText(this._treeElement.renderedPropertyText(),false);}
_onScroll(event){this._swatchPopoverHelper.reposition();}
_onPopoverHidden(commitEdit){if(this._scrollerElement){this._scrollerElement.removeEventListener('scroll',this._boundOnScroll,false);}
this._spectrum.removeEventListener(ColorPicker.Spectrum.Events.ColorChanged,this._boundSpectrumChanged);delete this._spectrum;const propertyText=commitEdit?this._treeElement.renderedPropertyText():this._originalPropertyText;this._treeElement.applyStyleText(propertyText,true);this._treeElement.parentPane().setEditingStyle(false);delete this._originalPropertyText;}}
ColorSwatchPopoverIcon._treeElementSymbol=Symbol('ColorSwatchPopoverIcon._treeElementSymbol');export class ShadowSwatchPopoverHelper{constructor(treeElement,swatchPopoverHelper,shadowSwatch){this._treeElement=treeElement;this._treeElement[ShadowSwatchPopoverHelper._treeElementSymbol]=this;this._swatchPopoverHelper=swatchPopoverHelper;this._shadowSwatch=shadowSwatch;this._iconElement=shadowSwatch.iconElement();this._iconElement.title=Common.UIString('Open shadow editor.');this._iconElement.addEventListener('click',this._iconClick.bind(this),false);this._iconElement.addEventListener('mousedown',event=>event.consume(),false);this._boundShadowChanged=this._shadowChanged.bind(this);this._boundOnScroll=this._onScroll.bind(this);}
static forTreeElement(treeElement){return treeElement[ShadowSwatchPopoverHelper._treeElementSymbol]||null;}
_iconClick(event){event.consume(true);this.showPopover();}
showPopover(){if(this._swatchPopoverHelper.isShowing()){this._swatchPopoverHelper.hide(true);return;}
this._cssShadowEditor=new InlineEditor.CSSShadowEditor();this._cssShadowEditor.setModel(this._shadowSwatch.model());this._cssShadowEditor.addEventListener(InlineEditor.CSSShadowEditor.Events.ShadowChanged,this._boundShadowChanged);this._swatchPopoverHelper.show(this._cssShadowEditor,this._iconElement,this._onPopoverHidden.bind(this));this._scrollerElement=this._iconElement.enclosingNodeOrSelfWithClass('style-panes-wrapper');if(this._scrollerElement){this._scrollerElement.addEventListener('scroll',this._boundOnScroll,false);}
this._originalPropertyText=this._treeElement.property.propertyText;this._treeElement.parentPane().setEditingStyle(true);const uiLocation=Bindings.cssWorkspaceBinding.propertyUILocation(this._treeElement.property,false);if(uiLocation){Common.Revealer.reveal(uiLocation,true);}}
_shadowChanged(event){this._shadowSwatch.setCSSShadow((event.data));this._treeElement.applyStyleText(this._treeElement.renderedPropertyText(),false);}
_onScroll(event){this._swatchPopoverHelper.reposition();}
_onPopoverHidden(commitEdit){if(this._scrollerElement){this._scrollerElement.removeEventListener('scroll',this._boundOnScroll,false);}
this._cssShadowEditor.removeEventListener(InlineEditor.CSSShadowEditor.Events.ShadowChanged,this._boundShadowChanged);delete this._cssShadowEditor;const propertyText=commitEdit?this._treeElement.renderedPropertyText():this._originalPropertyText;this._treeElement.applyStyleText(propertyText,true);this._treeElement.parentPane().setEditingStyle(false);delete this._originalPropertyText;}}
ShadowSwatchPopoverHelper._treeElementSymbol=Symbol('ShadowSwatchPopoverHelper._treeElementSymbol');self.Elements=self.Elements||{};Elements=Elements||{};Elements.ColorSwatchPopoverIcon=ColorSwatchPopoverIcon;Elements.BezierPopoverIcon=BezierPopoverIcon;Elements.ShadowSwatchPopoverHelper=ShadowSwatchPopoverHelper;export default class ClassesPaneWidget extends UI.Widget{constructor(){super(true);this.registerRequiredCSS('elements/classesPaneWidget.css');this.contentElement.className='styles-element-classes-pane';const container=this.contentElement.createChild('div','title-container');this._input=container.createChild('div','new-class-input monospace');this.setDefaultFocusedElement(this._input);this._classesContainer=this.contentElement.createChild('div','source-code');this._classesContainer.classList.add('styles-element-classes-container');this._prompt=new ClassNamePrompt(this._nodeClasses.bind(this));this._prompt.setAutocompletionTimeout(0);this._prompt.renderAsBlock();const proxyElement=this._prompt.attach(this._input);this._prompt.setPlaceholder(Common.UIString('Add new class'));this._prompt.addEventListener(UI.TextPrompt.Events.TextChanged,this._onTextChanged,this);proxyElement.addEventListener('keydown',this._onKeyDown.bind(this),false);SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.DOMMutated,this._onDOMMutated,this);this._mutatingNodes=new Set();this._pendingNodeClasses=new Map();this._updateNodeThrottler=new Common.Throttler(0);this._previousTarget=null;UI.context.addFlavorChangeListener(SDK.DOMNode,this._onSelectedNodeChanged,this);}
_splitTextIntoClasses(text){return text.split(/[.,\s]/).map(className=>className.trim()).filter(className=>className.length);}
_onKeyDown(event){if(!isEnterKey(event)&&!isEscKey(event)){return;}
if(isEnterKey(event)){event.consume();if(this._prompt.acceptAutoComplete()){return;}}
let text=event.target.textContent;if(isEscKey(event)){if(!text.isWhitespace()){event.consume(true);}
text='';}
this._prompt.clearAutocomplete();event.target.textContent='';const node=UI.context.flavor(SDK.DOMNode);if(!node){return;}
const classNames=this._splitTextIntoClasses(text);for(const className of classNames){this._toggleClass(node,className,true);}
this._installNodeClasses(node);this._update();}
_onTextChanged(){const node=UI.context.flavor(SDK.DOMNode);if(!node){return;}
this._installNodeClasses(node);}
_onDOMMutated(event){const node=(event.data);if(this._mutatingNodes.has(node)){return;}
delete node[ClassesPaneWidget._classesSymbol];this._update();}
_onSelectedNodeChanged(event){if(this._previousTarget&&this._prompt.text()){this._input.textContent='';this._installNodeClasses(this._previousTarget);}
this._previousTarget=(event.data);this._update();}
wasShown(){this._update();}
_update(){if(!this.isShowing()){return;}
let node=UI.context.flavor(SDK.DOMNode);if(node){node=node.enclosingElementOrSelf();}
this._classesContainer.removeChildren();this._input.disabled=!node;if(!node){return;}
const classes=this._nodeClasses(node);const keys=classes.keysArray();keys.sort(String.caseInsensetiveComparator);for(let i=0;i<keys.length;++i){const className=keys[i];const label=UI.CheckboxLabel.create(className,classes.get(className));label.classList.add('monospace');label.checkboxElement.addEventListener('click',this._onClick.bind(this,className),false);this._classesContainer.appendChild(label);}}
_onClick(className,event){const node=UI.context.flavor(SDK.DOMNode);if(!node){return;}
const enabled=event.target.checked;this._toggleClass(node,className,enabled);this._installNodeClasses(node);}
_nodeClasses(node){let result=node[ClassesPaneWidget._classesSymbol];if(!result){const classAttribute=node.getAttribute('class')||'';const classes=classAttribute.split(/\s/);result=new Map();for(let i=0;i<classes.length;++i){const className=classes[i].trim();if(!className.length){continue;}
result.set(className,true);}
node[ClassesPaneWidget._classesSymbol]=result;}
return result;}
_toggleClass(node,className,enabled){const classes=this._nodeClasses(node);classes.set(className,enabled);}
_installNodeClasses(node){const classes=this._nodeClasses(node);const activeClasses=new Set();for(const className of classes.keys()){if(classes.get(className)){activeClasses.add(className);}}
const additionalClasses=this._splitTextIntoClasses(this._prompt.textWithCurrentSuggestion());for(const className of additionalClasses){activeClasses.add(className);}
const newClasses=activeClasses.valuesArray();newClasses.sort();this._pendingNodeClasses.set(node,newClasses.join(' '));this._updateNodeThrottler.schedule(this._flushPendingClasses.bind(this));}
_flushPendingClasses(){const promises=[];for(const node of this._pendingNodeClasses.keys()){this._mutatingNodes.add(node);const promise=node.setAttributeValuePromise('class',this._pendingNodeClasses.get(node)).then(onClassValueUpdated.bind(this,node));promises.push(promise);}
this._pendingNodeClasses.clear();return Promise.all(promises);function onClassValueUpdated(node){this._mutatingNodes.delete(node);}}}
ClassesPaneWidget._classesSymbol=Symbol('ClassesPaneWidget._classesSymbol');export class ButtonProvider{constructor(){this._button=new UI.ToolbarToggle(Common.UIString('Element Classes'),'');this._button.setText('.cls');this._button.element.classList.add('monospace');this._button.addEventListener(UI.ToolbarButton.Events.Click,this._clicked,this);this._view=new ClassesPaneWidget();}
_clicked(){Elements.ElementsPanel.instance().showToolbarPane(!this._view.isShowing()?this._view:null,this._button);}
item(){return this._button;}}
export class ClassNamePrompt extends UI.TextPrompt{constructor(nodeClasses){super();this._nodeClasses=nodeClasses;this.initialize(this._buildClassNameCompletions.bind(this),' ');this.disableDefaultSuggestionForEmptyInput();this._selectedFrameId='';this._classNamesPromise=null;}
_getClassNames(selectedNode){const promises=[];const completions=new Set();this._selectedFrameId=selectedNode.frameId();const cssModel=selectedNode.domModel().cssModel();const allStyleSheets=cssModel.allStyleSheets();for(const stylesheet of allStyleSheets){if(stylesheet.frameId!==this._selectedFrameId){continue;}
const cssPromise=cssModel.classNamesPromise(stylesheet.id).then(classes=>completions.addAll(classes));promises.push(cssPromise);}
const domPromise=selectedNode.domModel().classNamesPromise(selectedNode.ownerDocument.id).then(classes=>completions.addAll(classes));promises.push(domPromise);return Promise.all(promises).then(()=>completions.valuesArray());}
_buildClassNameCompletions(expression,prefix,force){if(!prefix||force){this._classNamesPromise=null;}
const selectedNode=UI.context.flavor(SDK.DOMNode);if(!selectedNode||(!prefix&&!force&&!expression.trim())){return Promise.resolve([]);}
if(!this._classNamesPromise||this._selectedFrameId!==selectedNode.frameId()){this._classNamesPromise=this._getClassNames(selectedNode);}
return this._classNamesPromise.then(completions=>{const classesMap=this._nodeClasses((selectedNode));completions=completions.filter(value=>!classesMap.get(value));if(prefix[0]==='.'){completions=completions.map(value=>'.'+value);}
return completions.filter(value=>value.startsWith(prefix)).sort().map(completion=>({text:completion}));});}}
self.Elements=self.Elements||{};Elements=Elements||{};Elements.ClassesPaneWidget=ClassesPaneWidget;Elements.ClassesPaneWidget.ButtonProvider=ButtonProvider;Elements.ClassesPaneWidget.ClassNamePrompt=ClassNamePrompt;import'./NativeFunctions.js';import'./JavaScriptMetadata.js';import*as JavaScriptMetadata from'./JavaScriptMetadata.js';import*as NativeFunctions from'./NativeFunctions.js';export{JavaScriptMetadata,NativeFunctions,};export const NativeFunctions=[{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Array"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"ReadonlyArray"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Int8Array"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Uint8Array"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Uint8ClampedArray"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Int16Array"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Uint16Array"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Int32Array"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Uint32Array"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Float32Array"},{"name":"find","signatures":[["predicate","?thisArg"]],"receiver":"Float64Array"},{"name":"find","signatures":[["?string","?caseSensitive","?backwards","?wrap","?wholeWord","?searchInFrames","?showDialog"]],"receiver":"Window"},{"name":"findIndex","signatures":[["predicate","?thisArg"]]},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Array"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Int8Array"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Uint8Array"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Uint8ClampedArray"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Int16Array"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Uint16Array"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Int32Array"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Uint32Array"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Float32Array"},{"name":"fill","signatures":[["value","?start","?end"]],"receiver":"Float64Array"},{"name":"fill","signatures":[["?winding"],["path","?winding"]],"receiver":"CanvasRenderingContext2D"},{"name":"fill","signatures":[["?winding"],["path","?winding"]],"receiver":"OffscreenCanvasRenderingContext2D"},{"name":"fill","signatures":[["?winding"],["path","?winding"]],"receiver":"PaintRenderingContext2D"},{"name":"copyWithin","signatures":[["target","start","?end"]]},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"],["iterable","?mapfn","?thisArg"]],"static":true,"receiver":"Array"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Int8Array"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Uint8Array"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Uint8ClampedArray"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Int16Array"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Uint16Array"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Int32Array"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Uint32Array"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Float32Array"},{"name":"from","signatures":[["arrayLike","?mapfn","?thisArg"]],"static":true,"receiver":"Float64Array"},{"name":"of","signatures":[["...items"]]},{"name":"clz32","signatures":[["x"]]},{"name":"imul","signatures":[["x","y"]]},{"name":"sign","signatures":[["x"]],"receiver":"Math"},{"name":"sign","signatures":[["algorithm","key","data"]],"receiver":"SubtleCrypto"},{"name":"log10","signatures":[["x"]]},{"name":"log2","signatures":[["x"]]},{"name":"log1p","signatures":[["x"]]},{"name":"expm1","signatures":[["x"]]},{"name":"cosh","signatures":[["x"]]},{"name":"sinh","signatures":[["x"]]},{"name":"tanh","signatures":[["x"]]},{"name":"acosh","signatures":[["x"]]},{"name":"asinh","signatures":[["x"]]},{"name":"atanh","signatures":[["x"]]},{"name":"hypot","signatures":[["...values"]]},{"name":"trunc","signatures":[["x"]]},{"name":"fround","signatures":[["x"]]},{"name":"cbrt","signatures":[["x"]]},{"name":"isFinite","signatures":[["number"]]},{"name":"isInteger","signatures":[["number"]]},{"name":"isNaN","signatures":[["number"]]},{"name":"isSafeInteger","signatures":[["number"]]},{"name":"parseFloat","signatures":[["string"]]},{"name":"parseInt","signatures":[["string","?radix"]],"static":true,"receiver":"Number"},{"name":"parseInt","signatures":[["s","?radix"]],"receiver":"Window"},{"name":"hasOwnProperty","signatures":[["v"]]},{"name":"propertyIsEnumerable","signatures":[["v"]]},{"name":"assign","signatures":[["target","source"],["target","...sources"],["target","source1","source2","?source3"]],"static":true,"receiver":"Object"},{"name":"assign","signatures":[["url"]],"receiver":"Location"},{"name":"assign","signatures":[["nodes"]],"receiver":"HTMLSlotElement"},{"name":"getOwnPropertySymbols","signatures":[["o"]]},{"name":"is","signatures":[["value1","value2"]]},{"name":"setPrototypeOf","signatures":[["o","proto"]],"static":true,"receiver":"Object"},{"name":"setPrototypeOf","signatures":[["target","v"]],"receiver":"ProxyHandler"},{"name":"getOwnPropertyDescriptor","signatures":[["o","propertyKey"],["o","p"]],"static":true,"receiver":"Object"},{"name":"getOwnPropertyDescriptor","signatures":[["target","p"]],"receiver":"ProxyHandler"},{"name":"defineProperty","signatures":[["o","propertyKey","attributes"],["o","p","attributes"]],"static":true,"receiver":"Object"},{"name":"defineProperty","signatures":[["target","p","attributes"]],"receiver":"ProxyHandler"},{"name":"codePointAt","signatures":[["pos"]]},{"name":"includes","signatures":[["searchString","?position"]],"receiver":"String"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Array"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"ReadonlyArray"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Int8Array"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint8Array"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint8ClampedArray"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Int16Array"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint16Array"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Int32Array"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint32Array"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Float32Array"},{"name":"includes","signatures":[["searchElement","?fromIndex"]],"receiver":"Float64Array"},{"name":"includes","signatures":[["key"]],"receiver":"IDBKeyRange"},{"name":"endsWith","signatures":[["searchString","?endPosition"]]},{"name":"normalize","signatures":[["?form"]],"receiver":"String"},{"name":"repeat","signatures":[["count"]]},{"name":"startsWith","signatures":[["searchString","?position"]]},{"name":"anchor","signatures":[["name"]]},{"name":"fontcolor","signatures":[["color"]]},{"name":"fontsize","signatures":[["size"]]},{"name":"link","signatures":[["url"]]},{"name":"sub","signatures":[["typedArray","index","value"]],"receiver":"Atomics"},{"name":"sub","signatures":[["...values"]],"receiver":"CSSNumericValue"},{"name":"fromCodePoint","signatures":[["...codePoints"]]},{"name":"raw","signatures":[["template","...substitutions"]]},{"name":"clear","signatures":[["mask"]],"receiver":"WebGLRenderingContextBase"},{"name":"delete","signatures":[["key"]],"receiver":"Map"},{"name":"delete","signatures":[["key"]],"receiver":"WeakMap"},{"name":"delete","signatures":[["value"]],"receiver":"Set"},{"name":"delete","signatures":[["value"]],"receiver":"WeakSet"},{"name":"delete","signatures":[["property"]],"receiver":"StylePropertyMap"},{"name":"delete","signatures":[["key"]],"receiver":"Headers"},{"name":"delete","signatures":[["name"]],"receiver":"FormData"},{"name":"delete","signatures":[["name"]],"receiver":"URLSearchParams"},{"name":"delete","signatures":[["cacheName"]],"receiver":"CacheStorage"},{"name":"delete","signatures":[["request","?options"]],"receiver":"Cache"},{"name":"delete","signatures":[["name"],["options"]],"receiver":"CookieStore"},{"name":"delete","signatures":[["key"]],"receiver":"IDBObjectStore"},{"name":"delete","signatures":[["instrumentKey"]],"receiver":"PaymentInstruments"},{"name":"forEach","signatures":[["callbackfn","?thisArg"]]},{"name":"get","signatures":[["key"]],"receiver":"Map"},{"name":"get","signatures":[["key"]],"receiver":"ReadonlyMap"},{"name":"get","signatures":[["key"]],"receiver":"WeakMap"},{"name":"get","signatures":[["target","p","receiver"]],"receiver":"ProxyHandler"},{"name":"get","signatures":[["property"]],"receiver":"StylePropertyMapReadOnly"},{"name":"get","signatures":[["key"]],"receiver":"Headers"},{"name":"get","signatures":[["name"]],"receiver":"CustomElementRegistry"},{"name":"get","signatures":[["name"]],"receiver":"FormData"},{"name":"get","signatures":[["name"]],"receiver":"URLSearchParams"},{"name":"get","signatures":[["id"]],"receiver":"BackgroundFetchManager"},{"name":"get","signatures":[["name"],["?options"]],"receiver":"CookieStore"},{"name":"get","signatures":[["?options"]],"receiver":"CredentialsContainer"},{"name":"get","signatures":[["keyId"]],"receiver":"MediaKeyStatusMap"},{"name":"get","signatures":[["key"]],"receiver":"IDBIndex"},{"name":"get","signatures":[["key"]],"receiver":"IDBObjectStore"},{"name":"get","signatures":[["instrumentKey"]],"receiver":"PaymentInstruments"},{"name":"get","signatures":[["id"]],"receiver":"Clients"},{"name":"has","signatures":[["key"]],"receiver":"Map"},{"name":"has","signatures":[["key"]],"receiver":"ReadonlyMap"},{"name":"has","signatures":[["key"]],"receiver":"WeakMap"},{"name":"has","signatures":[["value"]],"receiver":"Set"},{"name":"has","signatures":[["value"]],"receiver":"ReadonlySet"},{"name":"has","signatures":[["value"]],"receiver":"WeakSet"},{"name":"has","signatures":[["target","p"]],"receiver":"ProxyHandler"},{"name":"has","signatures":[["property"]],"receiver":"StylePropertyMapReadOnly"},{"name":"has","signatures":[["key"]],"receiver":"Headers"},{"name":"has","signatures":[["name"]],"receiver":"FormData"},{"name":"has","signatures":[["name"]],"receiver":"URLSearchParams"},{"name":"has","signatures":[["cacheName"]],"receiver":"CacheStorage"},{"name":"has","signatures":[["keyId"]],"receiver":"MediaKeyStatusMap"},{"name":"has","signatures":[["instrumentKey"]],"receiver":"PaymentInstruments"},{"name":"set","signatures":[["key","value"]],"receiver":"Map"},{"name":"set","signatures":[["key","value"]],"receiver":"WeakMap"},{"name":"set","signatures":[["target","p","value","receiver"]],"receiver":"ProxyHandler"},{"name":"set","signatures":[["v"]],"receiver":"PropertyDescriptor"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Int8Array"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Uint8Array"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Uint8ClampedArray"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Int16Array"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Uint16Array"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Int32Array"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Uint32Array"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Float32Array"},{"name":"set","signatures":[["array","?offset"]],"receiver":"Float64Array"},{"name":"set","signatures":[["property","...values"]],"receiver":"StylePropertyMap"},{"name":"set","signatures":[["key","value"]],"receiver":"Headers"},{"name":"set","signatures":[["name","value","?filename"]],"receiver":"FormData"},{"name":"set","signatures":[["name","value"]],"receiver":"URLSearchParams"},{"name":"set","signatures":[["?contents"]],"static":true,"receiver":"ExperimentalBadge"},{"name":"set","signatures":[["options"],["name","value","?options"]],"receiver":"CookieStore"},{"name":"set","signatures":[["instrumentKey","details"]],"receiver":"PaymentInstruments"},{"name":"add","signatures":[["value"]],"receiver":"Set"},{"name":"add","signatures":[["value"]],"receiver":"WeakSet"},{"name":"add","signatures":[["typedArray","index","value"]],"receiver":"Atomics"},{"name":"add","signatures":[["node","?before"]],"receiver":"AccessibleNodeList"},{"name":"add","signatures":[["file"],["data","type"]],"receiver":"DataTransferItemList"},{"name":"add","signatures":[["...values"]],"receiver":"CSSNumericValue"},{"name":"add","signatures":[["...tokens"]],"receiver":"DOMTokenList"},{"name":"add","signatures":[["element","?before"]],"receiver":"HTMLOptionsCollection"},{"name":"add","signatures":[["element","?before"]],"receiver":"HTMLSelectElement"},{"name":"add","signatures":[["request"]],"receiver":"Cache"},{"name":"add","signatures":[["value","?key"]],"receiver":"IDBObjectStore"},{"name":"all","signatures":[["values"]]},{"name":"race","signatures":[["values"]]},{"name":"reject","signatures":[["reason"]]},{"name":"resolve","signatures":[["?value"]]},{"name":"toString","signatures":[["?radix"]],"receiver":"Number"},{"name":"for","signatures":[["key"]]},{"name":"keyFor","signatures":[["sym"]]},{"name":"next","signatures":[["?value"]],"receiver":"Iterator"},{"name":"next","signatures":[["?value"]],"receiver":"AsyncIterator"},{"name":"return","signatures":[["?value"]],"receiver":"Iterator"},{"name":"return","signatures":[["?value"]],"receiver":"AsyncIterator"},{"name":"throw","signatures":[["?e"]]},{"name":"entries","signatures":[["o"]],"static":true,"receiver":"Object"},{"name":"keys","signatures":[["o"]],"static":true,"receiver":"Object"},{"name":"keys","signatures":[["?request","?options"]],"receiver":"Cache"},{"name":"values","signatures":[["o"]],"static":true,"receiver":"Object"},{"name":"getPrototypeOf","signatures":[["target"]],"receiver":"ProxyHandler"},{"name":"getPrototypeOf","signatures":[["o"]],"static":true,"receiver":"Object"},{"name":"isExtensible","signatures":[["target"]],"receiver":"ProxyHandler"},{"name":"isExtensible","signatures":[["o"]],"static":true,"receiver":"Object"},{"name":"preventExtensions","signatures":[["target"]],"receiver":"ProxyHandler"},{"name":"preventExtensions","signatures":[["o"]],"static":true,"receiver":"Object"},{"name":"deleteProperty","signatures":[["target","p"]]},{"name":"enumerate","signatures":[["target"]]},{"name":"ownKeys","signatures":[["target"]]},{"name":"apply","signatures":[["target","thisArg","?argArray"]],"receiver":"ProxyHandler"},{"name":"apply","signatures":[["thisArg","?argArray"]],"receiver":"Function"},{"name":"construct","signatures":[["target","argArray","?newTarget"]]},{"name":"revocable","signatures":[["target","handler"]]},{"name":"match","signatures":[["matcher"],["regexp"]],"receiver":"String"},{"name":"match","signatures":[["request","?options"]],"receiver":"BackgroundFetchRegistration"},{"name":"match","signatures":[["request","?options"]],"receiver":"CacheStorage"},{"name":"match","signatures":[["request","?options"]],"receiver":"Cache"},{"name":"replace","signatures":[["searchValue","replaceValue"],["searchValue","replacer"]],"receiver":"String"},{"name":"replace","signatures":[["text"]],"receiver":"CSSStyleSheet"},{"name":"replace","signatures":[["token","newToken"]],"receiver":"DOMTokenList"},{"name":"replace","signatures":[["url"]],"receiver":"Location"},{"name":"search","signatures":[["searcher"],["regexp"]]},{"name":"split","signatures":[["splitter","?limit"],["separator","?limit"]]},{"name":"eval","signatures":[["x"]]},{"name":"decodeURI","signatures":[["encodedURI"]]},{"name":"decodeURIComponent","signatures":[["encodedURIComponent"]]},{"name":"encodeURI","signatures":[["uri"]]},{"name":"encodeURIComponent","signatures":[["uriComponent"]]},{"name":"escape","signatures":[["string"]],"receiver":"Window"},{"name":"escape","signatures":[["ident"]],"static":true,"receiver":"CSS"},{"name":"unescape","signatures":[["string"]]},{"name":"toLocaleString","signatures":[["?locales","?options"]],"receiver":"Date"},{"name":"toLocaleString","signatures":[["?locales","?options"]],"receiver":"Number"},{"name":"isPrototypeOf","signatures":[["v"]]},{"name":"getOwnPropertyNames","signatures":[["o"]]},{"name":"create","signatures":[["o","?properties"]],"static":true,"receiver":"Object"},{"name":"create","signatures":[["?options"]],"receiver":"CredentialsContainer"},{"name":"defineProperties","signatures":[["o","properties"]]},{"name":"seal","signatures":[["o"]]},{"name":"freeze","signatures":[["a"],["f"],["o"]]},{"name":"isSealed","signatures":[["o"]]},{"name":"isFrozen","signatures":[["o"]]},{"name":"call","signatures":[["thisArg","...argArray"]]},{"name":"bind","signatures":[["thisArg","...argArray"]]},{"name":"charAt","signatures":[["pos"]]},{"name":"charCodeAt","signatures":[["index"]]},{"name":"concat","signatures":[["...strings"]],"receiver":"String"},{"name":"concat","signatures":[["...items"]],"receiver":"ReadonlyArray"},{"name":"concat","signatures":[["...items"]],"receiver":"Array"},{"name":"indexOf","signatures":[["searchString","?position"]],"receiver":"String"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"ReadonlyArray"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Array"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Int8Array"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint8Array"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint8ClampedArray"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Int16Array"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint16Array"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Int32Array"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint32Array"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Float32Array"},{"name":"indexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Float64Array"},{"name":"lastIndexOf","signatures":[["searchString","?position"]],"receiver":"String"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"ReadonlyArray"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Array"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Int8Array"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint8Array"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint8ClampedArray"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Int16Array"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint16Array"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Int32Array"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Uint32Array"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Float32Array"},{"name":"lastIndexOf","signatures":[["searchElement","?fromIndex"]],"receiver":"Float64Array"},{"name":"localeCompare","signatures":[["that","?locales","?options"]]},{"name":"slice","signatures":[["?start","?end"]],"receiver":"String"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"ReadonlyArray"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"ConcatArray"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Array"},{"name":"slice","signatures":[["begin","?end"]],"receiver":"ArrayBuffer"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Int8Array"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Uint8Array"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Uint8ClampedArray"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Int16Array"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Uint16Array"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Int32Array"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Uint32Array"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Float32Array"},{"name":"slice","signatures":[["?start","?end"]],"receiver":"Float64Array"},{"name":"slice","signatures":[["begin","?end"]],"receiver":"SharedArrayBuffer"},{"name":"slice","signatures":[["?start","?end","?contentType"]],"receiver":"Blob"},{"name":"substring","signatures":[["start","?end"]]},{"name":"substr","signatures":[["from","?length"]]},{"name":"fromCharCode","signatures":[["...codes"]]},{"name":"toFixed","signatures":[["?fractionDigits"]]},{"name":"toExponential","signatures":[["?fractionDigits"]]},{"name":"toPrecision","signatures":[["?precision"]]},{"name":"abs","signatures":[["x"]]},{"name":"acos","signatures":[["x"]]},{"name":"asin","signatures":[["x"]]},{"name":"atan","signatures":[["x"]]},{"name":"atan2","signatures":[["y","x"]]},{"name":"ceil","signatures":[["x"]]},{"name":"cos","signatures":[["x"]]},{"name":"exp","signatures":[["x"]]},{"name":"floor","signatures":[["x"]]},{"name":"log","signatures":[["x"]],"receiver":"Math"},{"name":"log","signatures":[["...data"]],"receiver":"console"},{"name":"max","signatures":[["...values"]]},{"name":"min","signatures":[["...values"]]},{"name":"pow","signatures":[["x","y"]]},{"name":"round","signatures":[["x"]]},{"name":"sin","signatures":[["x"]]},{"name":"sqrt","signatures":[["x"]]},{"name":"tan","signatures":[["x"]]},{"name":"toLocaleDateString","signatures":[["?locales","?options"]]},{"name":"toLocaleTimeString","signatures":[["?locales","?options"]]},{"name":"setTime","signatures":[["time"]]},{"name":"setMilliseconds","signatures":[["ms"]]},{"name":"setUTCMilliseconds","signatures":[["ms"]]},{"name":"setSeconds","signatures":[["sec","?ms"]]},{"name":"setUTCSeconds","signatures":[["sec","?ms"]]},{"name":"setMinutes","signatures":[["min","?sec","?ms"]]},{"name":"setUTCMinutes","signatures":[["min","?sec","?ms"]]},{"name":"setHours","signatures":[["hours","?min","?sec","?ms"]]},{"name":"setUTCHours","signatures":[["hours","?min","?sec","?ms"]]},{"name":"setDate","signatures":[["date"]]},{"name":"setUTCDate","signatures":[["date"]]},{"name":"setMonth","signatures":[["month","?date"]]},{"name":"setUTCMonth","signatures":[["month","?date"]]},{"name":"setFullYear","signatures":[["year","?month","?date"]]},{"name":"setUTCFullYear","signatures":[["year","?month","?date"]]},{"name":"toJSON","signatures":[["?key"]],"receiver":"Date"},{"name":"parse","signatures":[["s"]],"static":true,"receiver":"Date"},{"name":"parse","signatures":[["text","?reviver"]],"receiver":"JSON"},{"name":"parse","signatures":[["cssText"]],"static":true,"receiver":"CSSNumericValue"},{"name":"UTC","signatures":[["year","month","?date","?hours","?minutes","?seconds","?ms"]]},{"name":"exec","signatures":[["string"]]},{"name":"test","signatures":[["string"]]},{"name":"stringify","signatures":[["value","?replacer","?space"]]},{"name":"join","signatures":[["?separator"]]},{"name":"every","signatures":[["callbackfn","?thisArg"]]},{"name":"some","signatures":[["callbackfn","?thisArg"]]},{"name":"map","signatures":[["callbackfn","?thisArg"]]},{"name":"filter","signatures":[["callbackfn","?thisArg"]]},{"name":"reduce","signatures":[["callbackfn","?initialValue"]]},{"name":"reduceRight","signatures":[["callbackfn","?initialValue"]]},{"name":"push","signatures":[["...items"]],"receiver":"Array"},{"name":"push","signatures":[["message","?options"]],"receiver":"NFC"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Array"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Int8Array"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Uint8Array"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Uint8ClampedArray"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Int16Array"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Uint16Array"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Int32Array"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Uint32Array"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Float32Array"},{"name":"sort","signatures":[["?compareFn"]],"receiver":"Float64Array"},{"name":"splice","signatures":[["start","?deleteCount","...items"]]},{"name":"unshift","signatures":[["...items"]]},{"name":"isArray","signatures":[["arg"]]},{"name":"then","signatures":[["?onfulfilled","?onrejected"]]},{"name":"catch","signatures":[["?onrejected"]]},{"name":"isView","signatures":[["arg"]]},{"name":"getFloat32","signatures":[["byteOffset","?littleEndian"]]},{"name":"getFloat64","signatures":[["byteOffset","?littleEndian"]]},{"name":"getInt8","signatures":[["byteOffset"]]},{"name":"getInt16","signatures":[["byteOffset","?littleEndian"]]},{"name":"getInt32","signatures":[["byteOffset","?littleEndian"]]},{"name":"getUint8","signatures":[["byteOffset"]]},{"name":"getUint16","signatures":[["byteOffset","?littleEndian"]]},{"name":"getUint32","signatures":[["byteOffset","?littleEndian"]]},{"name":"setFloat32","signatures":[["byteOffset","value","?littleEndian"]]},{"name":"setFloat64","signatures":[["byteOffset","value","?littleEndian"]]},{"name":"setInt8","signatures":[["byteOffset","value"]]},{"name":"setInt16","signatures":[["byteOffset","value","?littleEndian"]]},{"name":"setInt32","signatures":[["byteOffset","value","?littleEndian"]]},{"name":"setUint8","signatures":[["byteOffset","value"]]},{"name":"setUint16","signatures":[["byteOffset","value","?littleEndian"]]},{"name":"setUint32","signatures":[["byteOffset","value","?littleEndian"]]},{"name":"subarray","signatures":[["begin","?end"]]},{"name":"getOwnPropertyDescriptors","signatures":[["o"]]},{"name":"and","signatures":[["typedArray","index","value"]]},{"name":"compareExchange","signatures":[["typedArray","index","expectedValue","replacementValue"]]},{"name":"exchange","signatures":[["typedArray","index","value"]]},{"name":"isLockFree","signatures":[["size"]]},{"name":"load","signatures":[["typedArray","index"]],"receiver":"Atomics"},{"name":"load","signatures":[["font","?text"]],"receiver":"FontFaceSet"},{"name":"load","signatures":[["sessionId"]],"receiver":"MediaKeySession"},{"name":"or","signatures":[["typedArray","index","value"]]},{"name":"store","signatures":[["typedArray","index","value"]],"receiver":"Atomics"},{"name":"store","signatures":[["credential"]],"receiver":"CredentialsContainer"},{"name":"wait","signatures":[["typedArray","index","value","?timeout"]]},{"name":"wake","signatures":[["typedArray","index","count"]]},{"name":"xor","signatures":[["typedArray","index","value"]]},{"name":"padStart","signatures":[["maxLength","?fillString"]]},{"name":"padEnd","signatures":[["maxLength","?fillString"]]},{"name":"formatToParts","signatures":[["?date"]]},{"name":"finally","signatures":[["?onfinally"]]},{"name":"flatMap","signatures":[["callback","?thisArg"]]},{"name":"flatten","signatures":[["?depth"]]},{"name":"updateTiming","signatures":[["?timing"]]},{"name":"Animation","signatures":[["?effect","?timeline"]]},{"name":"cancel","signatures":[["?reason"]],"receiver":"ReadableStream"},{"name":"cancel","signatures":[["?reason"]],"receiver":"UnderlyingSourceBase"},{"name":"animate","signatures":[["keyframes","?options"]]},{"name":"setKeyframes","signatures":[["keyframes"]]},{"name":"item","signatures":[["index"]],"receiver":"AccessibleNodeList"},{"name":"item","signatures":[["index"]],"receiver":"CSSRuleList"},{"name":"item","signatures":[["index"]],"receiver":"CSSStyleDeclaration"},{"name":"item","signatures":[["index"]],"receiver":"MediaList"},{"name":"item","signatures":[["index"]],"receiver":"StyleSheetList"},{"name":"item","signatures":[["index"]],"receiver":"DOMStringList"},{"name":"item","signatures":[["index"]],"receiver":"DOMTokenList"},{"name":"item","signatures":[["index"]],"receiver":"NamedNodeMap"},{"name":"item","signatures":[["index"]],"receiver":"NodeList"},{"name":"item","signatures":[["index"]],"receiver":"FileList"},{"name":"item","signatures":[["index"]],"receiver":"DOMRectList"},{"name":"item","signatures":[["index"]],"receiver":"HTMLSelectElement"},{"name":"item","signatures":[["?nameOrIndex"]],"receiver":"HTMLAllCollection"},{"name":"item","signatures":[["index"]],"receiver":"HTMLCollection"},{"name":"item","signatures":[["index"]],"receiver":"TouchList"},{"name":"item","signatures":[["?index"]],"receiver":"GamepadList"},{"name":"item","signatures":[["index"]],"receiver":"MimeTypeArray"},{"name":"item","signatures":[["index"]],"receiver":"PluginArray"},{"name":"item","signatures":[["index"]],"receiver":"Plugin"},{"name":"item","signatures":[["index"]],"receiver":"SpeechGrammarList"},{"name":"item","signatures":[["index"]],"receiver":"SpeechRecognitionResultList"},{"name":"item","signatures":[["index"]],"receiver":"SpeechRecognitionResult"},{"name":"item","signatures":[["index"]],"receiver":"SQLResultSetRowList"},{"name":"null","signatures":[["index","node"]],"receiver":"AccessibleNodeList"},{"name":"null","signatures":[["index"]],"receiver":"DataTransferItemList"},{"name":"null","signatures":[["index"]],"receiver":"CSSKeyframesRule"},{"name":"null","signatures":[["name"],["property","propertyValue"]],"receiver":"CSSStyleDeclaration"},{"name":"null","signatures":[["index"]],"receiver":"CSSNumericArray"},{"name":"null","signatures":[["index","?val"]],"receiver":"CSSTransformValue"},{"name":"null","signatures":[["index","?val"]],"receiver":"CSSUnparsedValue"},{"name":"null","signatures":[["name"]],"receiver":"StyleSheetList"},{"name":"null","signatures":[["name","?value"]],"receiver":"DOMStringMap"},{"name":"null","signatures":[["index"],["name"]],"receiver":"Window"},{"name":"null","signatures":[["index"]],"receiver":"HTMLFormControlsCollection"},{"name":"null","signatures":[["index"],["name"]],"receiver":"HTMLFormElement"},{"name":"null","signatures":[["index","?option"],["name"]],"receiver":"HTMLOptionsCollection"},{"name":"null","signatures":[["index","option"]],"receiver":"HTMLSelectElement"},{"name":"null","signatures":[["index"]],"receiver":"RadioNodeList"},{"name":"null","signatures":[["index"]],"receiver":"HTMLAllCollection"},{"name":"null","signatures":[["name","?value"]],"receiver":"HTMLEmbedElement"},{"name":"null","signatures":[["name","?value"]],"receiver":"HTMLObjectElement"},{"name":"null","signatures":[["index"]],"receiver":"AudioTrackList"},{"name":"null","signatures":[["index"]],"receiver":"TextTrackCueList"},{"name":"null","signatures":[["index"]],"receiver":"TextTrackList"},{"name":"null","signatures":[["index"]],"receiver":"VideoTrackList"},{"name":"null","signatures":[["index","newItem"]],"receiver":"SVGLengthList"},{"name":"null","signatures":[["index","newItem"]],"receiver":"SVGNumberList"},{"name":"null","signatures":[["index","newItem"]],"receiver":"SVGPointList"},{"name":"null","signatures":[["index","newItem"]],"receiver":"SVGStringList"},{"name":"null","signatures":[["index","newItem"]],"receiver":"SVGTransformList"},{"name":"null","signatures":[["index"]],"receiver":"SourceBufferList"},{"name":"null","signatures":[["index"]],"receiver":"TrackDefaultList"},{"name":"null","signatures":[["?name"]],"receiver":"RTCStatsResponse"},{"name":"remove","signatures":[["index"]],"receiver":"AccessibleNodeList"},{"name":"remove","signatures":[["index"]],"receiver":"DataTransferItemList"},{"name":"remove","signatures":[["...tokens"]],"receiver":"DOMTokenList"},{"name":"remove","signatures":[["index"]],"receiver":"HTMLOptionsCollection"},{"name":"remove","signatures":[["?index"]],"receiver":"HTMLSelectElement"},{"name":"remove","signatures":[["successCallback","?errorCallback"]],"receiver":"Entry"},{"name":"remove","signatures":[["start","end"]],"receiver":"SourceBuffer"},{"name":"appendChild","signatures":[["child"]],"receiver":"AccessibleNode"},{"name":"appendChild","signatures":[["node"]],"receiver":"Node"},{"name":"removeChild","signatures":[["child"]]},{"name":"getAsString","signatures":[["callback"]]},{"name":"setDragImage","signatures":[["image","x","y"]]},{"name":"getData","signatures":[["format"]]},{"name":"setData","signatures":[["format","data"]]},{"name":"clearData","signatures":[["?format"]]},{"name":"insertRule","signatures":[["rule","index"]],"receiver":"CSSGroupingRule"},{"name":"insertRule","signatures":[["rule","?index"]],"receiver":"CSSStyleSheet"},{"name":"deleteRule","signatures":[["index"]],"receiver":"CSSGroupingRule"},{"name":"deleteRule","signatures":[["select"]],"receiver":"CSSKeyframesRule"},{"name":"deleteRule","signatures":[["index"]],"receiver":"CSSStyleSheet"},{"name":"appendRule","signatures":[["rule"]]},{"name":"findRule","signatures":[["select"]]},{"name":"getPropertyValue","signatures":[["property"]]},{"name":"getPropertyPriority","signatures":[["property"]]},{"name":"setProperty","signatures":[["property","value","?priority"]]},{"name":"removeProperty","signatures":[["property"]]},{"name":"CSSStyleSheet","signatures":[["?options"]]},{"name":"replaceSync","signatures":[["text"]]},{"name":"addRule","signatures":[["?selector","?style","?index"]]},{"name":"removeRule","signatures":[["?index"]]},{"name":"supports","signatures":[["conditionText"],["property","value"]],"static":true,"receiver":"CSS"},{"name":"supports","signatures":[["token"]],"receiver":"DOMTokenList"},{"name":"CSSKeywordValue","signatures":[["keyword"]]},{"name":"CSSMathInvert","signatures":[["arg"]]},{"name":"CSSMathMax","signatures":[["...args"]]},{"name":"CSSMathMin","signatures":[["...args"]]},{"name":"CSSMathNegate","signatures":[["arg"]]},{"name":"CSSMathProduct","signatures":[["...args"]]},{"name":"CSSMathSum","signatures":[["...args"]]},{"name":"CSSMatrixComponent","signatures":[["matrix","?options"]]},{"name":"mul","signatures":[["...values"]]},{"name":"div","signatures":[["...values"]]},{"name":"equals","signatures":[["...values"]]},{"name":"to","signatures":[["unit"]]},{"name":"toSum","signatures":[["...units"]]},{"name":"CSSPerspective","signatures":[["length"]]},{"name":"CSSPositionValue","signatures":[["x","y"]]},{"name":"CSSRotate","signatures":[["angleValue"]]},{"name":"CSSScale","signatures":[["x","y","?z"]]},{"name":"CSSSkewX","signatures":[["ax"]]},{"name":"CSSSkewY","signatures":[["ay"]]},{"name":"CSSSkew","signatures":[["ax","ay"]]},{"name":"CSSTransformValue","signatures":[["transforms"]]},{"name":"CSSTranslate","signatures":[["x","y","?z"]]},{"name":"CSSUnitValue","signatures":[["value","unit"]]},{"name":"number","signatures":[["value"]]},{"name":"percent","signatures":[["value"]]},{"name":"em","signatures":[["value"]]},{"name":"ex","signatures":[["value"]]},{"name":"ch","signatures":[["value"]]},{"name":"rem","signatures":[["value"]]},{"name":"vw","signatures":[["value"]]},{"name":"vh","signatures":[["value"]]},{"name":"vmin","signatures":[["value"]]},{"name":"vmax","signatures":[["value"]]},{"name":"cm","signatures":[["value"]]},{"name":"mm","signatures":[["value"]]},{"name":"in","signatures":[["value"]]},{"name":"pt","signatures":[["value"]]},{"name":"pc","signatures":[["value"]]},{"name":"px","signatures":[["value"]]},{"name":"Q","signatures":[["value"]]},{"name":"deg","signatures":[["value"]]},{"name":"grad","signatures":[["value"]]},{"name":"rad","signatures":[["value"]]},{"name":"turn","signatures":[["value"]]},{"name":"s","signatures":[["value"]]},{"name":"ms","signatures":[["value"]]},{"name":"Hz","signatures":[["value"]]},{"name":"kHz","signatures":[["value"]]},{"name":"dpi","signatures":[["value"]]},{"name":"dpcm","signatures":[["value"]]},{"name":"dppx","signatures":[["value"]]},{"name":"fr","signatures":[["value"]]},{"name":"CSSUnparsedValue","signatures":[["members"]]},{"name":"CSSVariableReferenceValue","signatures":[["variable","?fallback"]]},{"name":"getAll","signatures":[["property"]],"receiver":"StylePropertyMapReadOnly"},{"name":"getAll","signatures":[["name"]],"receiver":"FormData"},{"name":"getAll","signatures":[["name"]],"receiver":"URLSearchParams"},{"name":"getAll","signatures":[["name"],["?options"]],"receiver":"CookieStore"},{"name":"getAll","signatures":[["?query","?count"]],"receiver":"IDBIndex"},{"name":"getAll","signatures":[["?query","?count"]],"receiver":"IDBObjectStore"},{"name":"append","signatures":[["property","...values"]],"receiver":"StylePropertyMap"},{"name":"append","signatures":[["...nodes"]],"receiver":"ParentNode"},{"name":"append","signatures":[["name","value"]],"receiver":"Headers"},{"name":"append","signatures":[["name","value","?filename"]],"receiver":"FormData"},{"name":"append","signatures":[["name","value"]],"receiver":"URLSearchParams"},{"name":"FontFaceSetLoadEvent","signatures":[["type","?eventInitDict"]]},{"name":"check","signatures":[["font","?text"]]},{"name":"FontFace","signatures":[["family","source","?descriptors"]]},{"name":"appendMedium","signatures":[["medium"]]},{"name":"deleteMedium","signatures":[["medium"]]},{"name":"MediaQueryListEvent","signatures":[["type","?eventInitDict"]]},{"name":"addListener","signatures":[["listener"]]},{"name":"removeListener","signatures":[["listener"]]},{"name":"registerProperty","signatures":[["descriptor"]]},{"name":"matchMedium","signatures":[["?mediaquery"]]},{"name":"acquire","signatures":[["?options"]]},{"name":"update","signatures":[["response"]],"receiver":"MediaKeySession"},{"name":"update","signatures":[["value"]],"receiver":"IDBCursor"},{"name":"abort","signatures":[["?reason"]],"receiver":"WritableStream"},{"name":"substringData","signatures":[["offset","count"]]},{"name":"appendData","signatures":[["data"]]},{"name":"insertData","signatures":[["offset","data"]]},{"name":"deleteData","signatures":[["offset","count"]]},{"name":"replaceData","signatures":[["offset","count","data"]]},{"name":"before","signatures":[["...nodes"]]},{"name":"after","signatures":[["...nodes"]]},{"name":"replaceWith","signatures":[["...nodes"]]},{"name":"elementFromPoint","signatures":[["x","y"]]},{"name":"elementsFromPoint","signatures":[["x","y"]]},{"name":"getElementsByTagName","signatures":[["localName"]]},{"name":"getElementsByTagNameNS","signatures":[["namespaceURI","localName"]]},{"name":"getElementsByClassName","signatures":[["classNames"]]},{"name":"createElement","signatures":[["localName","?options"]]},{"name":"createElementNS","signatures":[["namespaceURI","qualifiedName","?options"]]},{"name":"createTextNode","signatures":[["data"]]},{"name":"createCDATASection","signatures":[["data"]]},{"name":"createComment","signatures":[["data"]]},{"name":"createProcessingInstruction","signatures":[["target","data"]]},{"name":"importNode","signatures":[["node","?deep"]]},{"name":"adoptNode","signatures":[["node"]]},{"name":"createAttribute","signatures":[["localName"]]},{"name":"createAttributeNS","signatures":[["namespaceURI","qualifiedName"]]},{"name":"createEvent","signatures":[["eventType"]]},{"name":"createNodeIterator","signatures":[["root","?whatToShow","?filter"]]},{"name":"createTreeWalker","signatures":[["root","?whatToShow","?filter"]]},{"name":"getElementsByName","signatures":[["elementName"]]},{"name":"open","signatures":[["?type","?replace"],["url","name","features"]],"receiver":"Document"},{"name":"open","signatures":[["?url","?target","?features"]],"receiver":"Window"},{"name":"open","signatures":[["method","url","?async","?username","?password"]],"receiver":"XMLHttpRequest"},{"name":"open","signatures":[["cacheName"]],"receiver":"CacheStorage"},{"name":"open","signatures":[["name","?version"]],"receiver":"IDBFactory"},{"name":"open","signatures":[["options"]],"receiver":"SerialPort"},{"name":"close","signatures":[["?returnValue"]],"receiver":"HTMLDialogElement"},{"name":"close","signatures":[["?code","?reason"]],"receiver":"WebSocket"},{"name":"write","signatures":[["...text"],["text"]],"receiver":"Document"},{"name":"write","signatures":[["data"]],"receiver":"Clipboard"},{"name":"write","signatures":[["position","data"]],"receiver":"FileSystemWriter"},{"name":"write","signatures":[["data"]],"receiver":"FileWriterSync"},{"name":"write","signatures":[["data"]],"receiver":"FileWriter"},{"name":"write","signatures":[["data"]],"receiver":"RTCQuicStream"},{"name":"writeln","signatures":[["...text"],["text"]]},{"name":"execCommand","signatures":[["commandId","?showUI","?value"]]},{"name":"queryCommandEnabled","signatures":[["commandId"]]},{"name":"queryCommandIndeterm","signatures":[["commandId"]]},{"name":"queryCommandState","signatures":[["commandId"]]},{"name":"queryCommandSupported","signatures":[["commandId"]]},{"name":"queryCommandValue","signatures":[["commandId"]]},{"name":"registerElement","signatures":[["type","?options"]]},{"name":"caretRangeFromPoint","signatures":[["?x","?y"]]},{"name":"DOMException","signatures":[["?message","?name"]]},{"name":"createDocumentType","signatures":[["qualifiedName","publicId","systemId"]]},{"name":"createDocument","signatures":[["namespaceURI","qualifiedName","?doctype"]]},{"name":"createHTMLDocument","signatures":[["?title"]]},{"name":"contains","signatures":[["string"]],"receiver":"DOMStringList"},{"name":"contains","signatures":[["token"]],"receiver":"DOMTokenList"},{"name":"contains","signatures":[["other"]],"receiver":"Node"},{"name":"toggle","signatures":[["token","?force"]]},{"name":"setPointerCapture","signatures":[["pointerId"]]},{"name":"releasePointerCapture","signatures":[["pointerId"]]},{"name":"hasPointerCapture","signatures":[["pointerId"]]},{"name":"getAttribute","signatures":[["name"]]},{"name":"getAttributeNS","signatures":[["namespaceURI","localName"]]},{"name":"setAttribute","signatures":[["name","value"]]},{"name":"setAttributeNS","signatures":[["namespaceURI","name","value"]]},{"name":"removeAttribute","signatures":[["name"]]},{"name":"removeAttributeNS","signatures":[["namespaceURI","localName"]]},{"name":"hasAttribute","signatures":[["name"]]},{"name":"hasAttributeNS","signatures":[["namespaceURI","localName"]]},{"name":"toggleAttribute","signatures":[["qualifiedName","?force"]]},{"name":"getAttributeNode","signatures":[["name"]]},{"name":"getAttributeNodeNS","signatures":[["namespaceURI","localName"]]},{"name":"setAttributeNode","signatures":[["attr"]]},{"name":"setAttributeNodeNS","signatures":[["attr"]]},{"name":"removeAttributeNode","signatures":[["attr"]]},{"name":"closest","signatures":[["selectors"]]},{"name":"matches","signatures":[["selectors"]]},{"name":"webkitMatchesSelector","signatures":[["selectors"]]},{"name":"attachShadow","signatures":[["shadowRootInitDict"]]},{"name":"insertAdjacentElement","signatures":[["where","element"]]},{"name":"insertAdjacentText","signatures":[["where","data"]]},{"name":"insertAdjacentHTML","signatures":[["position","text"]]},{"name":"scrollIntoView","signatures":[["?arg"]]},{"name":"scroll","signatures":[["?options"],["x","y"]]},{"name":"scrollTo","signatures":[["?options"],["x","y"]]},{"name":"scrollBy","signatures":[["?options"],["x","y"]]},{"name":"scrollIntoViewIfNeeded","signatures":[["?centerIfNeeded"]]},{"name":"CustomEvent","signatures":[["type","?eventInitDict"]]},{"name":"initCustomEvent","signatures":[["type","?bubbles","?cancelable","?detail"]]},{"name":"handleEvent","signatures":[["event"]],"receiver":"EventListener"},{"name":"handleEvent","signatures":[["entries"]],"receiver":"EntriesCallback"},{"name":"handleEvent","signatures":[["entry"]],"receiver":"EntryCallback"},{"name":"handleEvent","signatures":[["error"]],"receiver":"ErrorCallback"},{"name":"handleEvent","signatures":[["file"]],"receiver":"FileCallback"},{"name":"handleEvent","signatures":[["fileSystem"]],"receiver":"FileSystemCallback"},{"name":"handleEvent","signatures":[["fileWriter"]],"receiver":"FileWriterCallback"},{"name":"handleEvent","signatures":[["metadata"]],"receiver":"MetadataCallback"},{"name":"handleEvent","signatures":[["transaction","resultSet"]],"receiver":"SQLStatementCallback"},{"name":"handleEvent","signatures":[["transaction","error"]],"receiver":"SQLStatementErrorCallback"},{"name":"handleEvent","signatures":[["transaction"]],"receiver":"SQLTransactionCallback"},{"name":"handleEvent","signatures":[["error"]],"receiver":"SQLTransactionErrorCallback"},{"name":"addEventListener","signatures":[["type","listener","?options"]]},{"name":"removeEventListener","signatures":[["type","listener","?options"]]},{"name":"dispatchEvent","signatures":[["event"]]},{"name":"Event","signatures":[["type","?eventInitDict"]]},{"name":"initEvent","signatures":[["type","?bubbles","?cancelable"]]},{"name":"MutationObserver","signatures":[["callback"]]},{"name":"observe","signatures":[["target","?options"]],"receiver":"MutationObserver"},{"name":"observe","signatures":[["target"]],"receiver":"IntersectionObserver"},{"name":"observe","signatures":[["target"]],"receiver":"ResizeObserver"},{"name":"observe","signatures":[["options"]],"receiver":"PerformanceObserver"},{"name":"observe","signatures":[["db","tx","options"]],"receiver":"IDBObserver"},{"name":"disconnect","signatures":[["?output"],["destination","?output","?input"]],"receiver":"AudioNode"},{"name":"getNamedItem","signatures":[["name"]]},{"name":"getNamedItemNS","signatures":[["namespaceURI","localName"]]},{"name":"setNamedItem","signatures":[["attr"]]},{"name":"setNamedItemNS","signatures":[["attr"]]},{"name":"removeNamedItem","signatures":[["name"]]},{"name":"removeNamedItemNS","signatures":[["namespaceURI","localName"]]},{"name":"acceptNode","signatures":[["node"]]},{"name":"setApplyScroll","signatures":[["scrollStateCallback","nativeScrollBehavior"]]},{"name":"setDistributeScroll","signatures":[["scrollStateCallback","nativeScrollBehavior"]]},{"name":"getRootNode","signatures":[["?options"]]},{"name":"cloneNode","signatures":[["?deep"]]},{"name":"isEqualNode","signatures":[["otherNode"]]},{"name":"isSameNode","signatures":[["otherNode"]]},{"name":"compareDocumentPosition","signatures":[["other"]]},{"name":"lookupPrefix","signatures":[["namespaceURI"]]},{"name":"lookupNamespaceURI","signatures":[["prefix"]],"receiver":"Node"},{"name":"lookupNamespaceURI","signatures":[["?prefix"]],"receiver":"XPathNSResolver"},{"name":"isDefaultNamespace","signatures":[["namespaceURI"]]},{"name":"insertBefore","signatures":[["node","child"]]},{"name":"replaceChild","signatures":[["node","child"]]},{"name":"getElementById","signatures":[["elementId"]]},{"name":"prepend","signatures":[["...nodes"]]},{"name":"querySelector","signatures":[["selectors"]]},{"name":"querySelectorAll","signatures":[["selectors"]]},{"name":"setStart","signatures":[["node","offset"]]},{"name":"setEnd","signatures":[["node","offset"]]},{"name":"setStartBefore","signatures":[["node"]]},{"name":"setStartAfter","signatures":[["node"]]},{"name":"setEndBefore","signatures":[["node"]]},{"name":"setEndAfter","signatures":[["node"]]},{"name":"collapse","signatures":[["?toStart"]],"receiver":"Range"},{"name":"collapse","signatures":[["node","?offset"]],"receiver":"Selection"},{"name":"selectNode","signatures":[["node"]]},{"name":"selectNodeContents","signatures":[["node"]]},{"name":"compareBoundaryPoints","signatures":[["how","sourceRange"]]},{"name":"insertNode","signatures":[["node"]]},{"name":"surroundContents","signatures":[["newParent"]]},{"name":"isPointInRange","signatures":[["node","offset"]]},{"name":"comparePoint","signatures":[["node","offset"]]},{"name":"intersectsNode","signatures":[["node"]]},{"name":"default","signatures":[["queue_type"]]},{"name":"postTask","signatures":[["callback","?signal"]],"receiver":"ScriptedTaskQueue"},{"name":"postTask","signatures":[["task","...arguments"]],"receiver":"TaskWorklet"},{"name":"postTask","signatures":[["task","...arguments"]],"receiver":"WorkerTaskQueue"},{"name":"splitText","signatures":[["offset"]]},{"name":"getRangeAt","signatures":[["index"]]},{"name":"addRange","signatures":[["range"]]},{"name":"removeRange","signatures":[["range"]]},{"name":"setPosition","signatures":[["node","?offset"]],"receiver":"Selection"},{"name":"setPosition","signatures":[["x","y","z"]],"receiver":"AudioListener"},{"name":"setPosition","signatures":[["x","y","z"]],"receiver":"PannerNode"},{"name":"extend","signatures":[["node","?offset"]]},{"name":"setBaseAndExtent","signatures":[["baseNode","baseOffset","extentNode","extentOffset"]]},{"name":"selectAllChildren","signatures":[["node"]]},{"name":"containsNode","signatures":[["node","?allowPartialContainment"]]},{"name":"ClipboardEvent","signatures":[["type","?eventInitDict"]]},{"name":"CompositionEvent","signatures":[["type","?eventInitDict"]]},{"name":"initCompositionEvent","signatures":[["?type","?bubbles","?cancelable","?view","?data"]]},{"name":"DragEvent","signatures":[["type","?eventInitDict"]]},{"name":"ErrorEvent","signatures":[["type","?eventInitDict"]]},{"name":"FocusEvent","signatures":[["type","?eventInitDict"]]},{"name":"HashChangeEvent","signatures":[["type","?eventInitDict"]]},{"name":"InputEvent","signatures":[["type","?eventInitDict"]]},{"name":"KeyboardEvent","signatures":[["type","?eventInitDict"]]},{"name":"getModifierState","signatures":[["keyArg"]]},{"name":"initKeyboardEvent","signatures":[["type","?bubbles","?cancelable","?view","?keyIdentifier","?location","?ctrlKey","?altKey","?shiftKey","?metaKey"]]},{"name":"MessageEvent","signatures":[["type","?eventInitDict"]]},{"name":"initMessageEvent","signatures":[["typeArg","?canBubbleArg","?cancelableArg","?dataArg","?originArg","?lastEventIdArg","?sourceArg","?portsArg"]]},{"name":"MouseEvent","signatures":[["type","?eventInitDict"]]},{"name":"initMouseEvent","signatures":[["?type","?bubbles","?cancelable","?view","?detail","?screenX","?screenY","?clientX","?clientY","?ctrlKey","?altKey","?shiftKey","?metaKey","?button","?relatedTarget"]]},{"name":"initMutationEvent","signatures":[["?type","?bubbles","?cancelable","?relatedNode","?prevValue","?newValue","?attrName","?attrChange"]]},{"name":"PageTransitionEvent","signatures":[["type","?eventInitDict"]]},{"name":"PopStateEvent","signatures":[["type","?eventInitDict"]]},{"name":"ProgressEvent","signatures":[["type","?eventInitDict"]]},{"name":"PromiseRejectionEvent","signatures":[["type","eventInitDict"]]},{"name":"initTextEvent","signatures":[["?type","?bubbles","?cancelable","?view","?data"]]},{"name":"TouchEvent","signatures":[["type","?eventInitDict"]]},{"name":"UIEvent","signatures":[["type","?eventInitDict"]]},{"name":"initUIEvent","signatures":[["?type","?bubbles","?cancelable","?view","?detail"]]},{"name":"WheelEvent","signatures":[["type","?eventInitDict"]]},{"name":"allowsFeature","signatures":[["feature","?url"]]},{"name":"getAllowlistForFeature","signatures":[["feature"]]},{"name":"Headers","signatures":[["?init"]]},{"name":"Request","signatures":[["input","?requestInitDict"]]},{"name":"Response","signatures":[["?body","?init"]]},{"name":"error","signatures":[["?e"]],"receiver":"ReadableStreamDefaultController"},{"name":"error","signatures":[["?e"]],"receiver":"WritableStreamDefaultController"},{"name":"error","signatures":[["...data"]],"receiver":"console"},{"name":"redirect","signatures":[["url","?status"]]},{"name":"fetch","signatures":[["input","?init"]],"receiver":"Window"},{"name":"fetch","signatures":[["input","?init"]],"receiver":"WorkerGlobalScope"},{"name":"fetch","signatures":[["id","requests","?options"]],"receiver":"BackgroundFetchManager"},{"name":"fetch","signatures":[["input","?init"]],"receiver":"ServiceWorkerGlobalScope"},{"name":"Blob","signatures":[["?blobParts","?options"]]},{"name":"readAsArrayBuffer","signatures":[["blob"]]},{"name":"readAsBinaryString","signatures":[["blob"]]},{"name":"readAsText","signatures":[["blob","?label"]]},{"name":"readAsDataURL","signatures":[["blob"]]},{"name":"File","signatures":[["fileBits","fileName","?options"]]},{"name":"createObjectURL","signatures":[["blob"],["source"]]},{"name":"revokeObjectURL","signatures":[["url"]]},{"name":"go","signatures":[["?delta"]]},{"name":"pushState","signatures":[["data","title","?url"]]},{"name":"replaceState","signatures":[["data","title","?url"]]},{"name":"isInputPending","signatures":[["?inputTypes"]]},{"name":"btoa","signatures":[["btoa"]]},{"name":"atob","signatures":[["atob"]]},{"name":"setTimeout","signatures":[["handler","?timeout","...arguments"]]},{"name":"clearTimeout","signatures":[["?handle"]]},{"name":"setInterval","signatures":[["handler","?timeout","...arguments"]]},{"name":"clearInterval","signatures":[["?handle"]]},{"name":"createImageBitmap","signatures":[["imageBitmap","?options"],["imageBitmap","sx","sy","sw","sh","?options"]]},{"name":"stop","signatures":[["?when"]],"receiver":"AudioScheduledSourceNode"},{"name":"focus","signatures":[["?options"]],"receiver":"HTMLElement"},{"name":"alert","signatures":[["?message"]]},{"name":"confirm","signatures":[["?message"]]},{"name":"prompt","signatures":[["?message","?defaultValue"]],"receiver":"Window"},{"name":"postMessage","signatures":[["message","?options"],["message","targetOrigin","?transfer"]],"receiver":"Window"},{"name":"postMessage","signatures":[["message","transfer"],["message","?options"]],"receiver":"MessagePort"},{"name":"postMessage","signatures":[["message","transfer"],["message","?options"]],"receiver":"DedicatedWorkerGlobalScope"},{"name":"postMessage","signatures":[["message","transfer"],["message","?options"]],"receiver":"Worker"},{"name":"postMessage","signatures":[["message"]],"receiver":"BroadcastChannel"},{"name":"postMessage","signatures":[["message","transfer"],["message","?options"]],"receiver":"Client"},{"name":"postMessage","signatures":[["message","transfer"],["message","?options"]],"receiver":"ServiceWorker"},{"name":"queueMicrotask","signatures":[["callback"]]},{"name":"requestAnimationFrame","signatures":[["callback"]]},{"name":"cancelAnimationFrame","signatures":[["handle"]]},{"name":"requestIdleCallback","signatures":[["callback","?options"]]},{"name":"cancelIdleCallback","signatures":[["handle"]]},{"name":"getComputedStyle","signatures":[["elt","?pseudoElt"]]},{"name":"matchMedia","signatures":[["query"]]},{"name":"moveTo","signatures":[["x","y"]],"receiver":"Window"},{"name":"moveTo","signatures":[["x","y"]],"receiver":"CanvasPath"},{"name":"moveTo","signatures":[["parent","name"]],"receiver":"EntrySync"},{"name":"moveTo","signatures":[["parent","?name","?successCallback","?errorCallback"]],"receiver":"Entry"},{"name":"moveTo","signatures":[["parent","?name"]],"receiver":"FileSystemBaseHandle"},{"name":"moveBy","signatures":[["x","y"]]},{"name":"resizeTo","signatures":[["x","y"]]},{"name":"resizeBy","signatures":[["x","y"]]},{"name":"getComputedAccessibleNode","signatures":[["element"]]},{"name":"webkitRequestAnimationFrame","signatures":[["callback"]]},{"name":"webkitCancelAnimationFrame","signatures":[["id"]]},{"name":"requestFullscreen","signatures":[["?options"]]},{"name":"webkitRequestFullScreen","signatures":[["?options"]]},{"name":"webkitRequestFullscreen","signatures":[["?options"]]},{"name":"DOMMatrixReadOnly","signatures":[["?init"]]},{"name":"fromMatrix","signatures":[["?other"]]},{"name":"fromFloat32Array","signatures":[["array32"]]},{"name":"fromFloat64Array","signatures":[["array64"]]},{"name":"translate","signatures":[["?tx","?ty","?tz"]],"receiver":"DOMMatrixReadOnly"},{"name":"translate","signatures":[["x","y"]],"receiver":"SVGMatrix"},{"name":"translate","signatures":[["x","y"]],"receiver":"CanvasRenderingContext2D"},{"name":"translate","signatures":[["x","y"]],"receiver":"OffscreenCanvasRenderingContext2D"},{"name":"translate","signatures":[["x","y"]],"receiver":"PaintRenderingContext2D"},{"name":"scale","signatures":[["?scaleX","?scaleY","?scaleZ","?originX","?originY","?originZ"]],"receiver":"DOMMatrixReadOnly"},{"name":"scale","signatures":[["scaleFactor"]],"receiver":"SVGMatrix"},{"name":"scale","signatures":[["x","y"]],"receiver":"CanvasRenderingContext2D"},{"name":"scale","signatures":[["x","y"]],"receiver":"OffscreenCanvasRenderingContext2D"},{"name":"scale","signatures":[["x","y"]],"receiver":"PaintRenderingContext2D"},{"name":"scaleNonUniform","signatures":[["?scaleX","?scaleY"]],"receiver":"DOMMatrixReadOnly"},{"name":"scaleNonUniform","signatures":[["scaleFactorX","scaleFactorY"]],"receiver":"SVGMatrix"},{"name":"scale3d","signatures":[["?scale","?originX","?originY","?originZ"]]},{"name":"rotate","signatures":[["?rotX","?rotY","?rotZ"]],"receiver":"DOMMatrixReadOnly"},{"name":"rotate","signatures":[["angle"]],"receiver":"SVGMatrix"},{"name":"rotate","signatures":[["angle"]],"receiver":"CanvasRenderingContext2D"},{"name":"rotate","signatures":[["angle"]],"receiver":"OffscreenCanvasRenderingContext2D"},{"name":"rotate","signatures":[["angle"]],"receiver":"PaintRenderingContext2D"},{"name":"rotateFromVector","signatures":[["?x","?y"]],"receiver":"DOMMatrixReadOnly"},{"name":"rotateFromVector","signatures":[["x","y"]],"receiver":"SVGMatrix"},{"name":"rotateAxisAngle","signatures":[["?x","?y","?z","?angle"]]},{"name":"skewX","signatures":[["?sx"]],"receiver":"DOMMatrixReadOnly"},{"name":"skewX","signatures":[["angle"]],"receiver":"SVGMatrix"},{"name":"skewY","signatures":[["?sy"]],"receiver":"DOMMatrixReadOnly"},{"name":"skewY","signatures":[["angle"]],"receiver":"SVGMatrix"},{"name":"multiply","signatures":[["?other"]],"receiver":"DOMMatrixReadOnly"},{"name":"multiply","signatures":[["secondMatrix"]],"receiver":"SVGMatrix"},{"name":"transformPoint","signatures":[["?point"]]},{"name":"DOMMatrix","signatures":[["?init"]]},{"name":"multiplySelf","signatures":[["?other"]]},{"name":"preMultiplySelf","signatures":[["?other"]]},{"name":"translateSelf","signatures":[["?tx","?ty","?tz"]]},{"name":"scaleSelf","signatures":[["?scaleX","?scaleY","?scaleZ","?originX","?originY","?originZ"]]},{"name":"scale3dSelf","signatures":[["?scale","?originX","?originY","?originZ"]]},{"name":"rotateSelf","signatures":[["?rotX","?rotY","?rotZ"]]},{"name":"rotateFromVectorSelf","signatures":[["?x","?y"]]},{"name":"rotateAxisAngleSelf","signatures":[["?x","?y","?z","?angle"]]},{"name":"skewXSelf","signatures":[["?sx"]]},{"name":"skewYSelf","signatures":[["?sy"]]},{"name":"setMatrixValue","signatures":[["transformList"]]},{"name":"DOMPointReadOnly","signatures":[["?x","?y","?z","?w"]]},{"name":"fromPoint","signatures":[["?other"]]},{"name":"matrixTransform","signatures":[["?matrix"]],"receiver":"DOMPointReadOnly"},{"name":"matrixTransform","signatures":[["matrix"]],"receiver":"SVGPoint"},{"name":"DOMPoint","signatures":[["?x","?y","?z","?w"]]},{"name":"DOMQuad","signatures":[["?p1","?p2","?p3","?p4"]]},{"name":"fromRect","signatures":[["?other"]]},{"name":"fromQuad","signatures":[["?other"]]},{"name":"DOMRectReadOnly","signatures":[["?x","?y","?width","?height"]]},{"name":"DOMRect","signatures":[["?x","?y","?width","?height"]]},{"name":"toDataURL","signatures":[["?type","?arguments"]]},{"name":"toBlob","signatures":[["callback","?type","?arguments"]]},{"name":"convertToBlob","signatures":[["?options"]]},{"name":"ImageData","signatures":[["sw","sh"]]},{"name":"define","signatures":[["name","constructor","?options"]]},{"name":"whenDefined","signatures":[["name"]]},{"name":"upgrade","signatures":[["root"]]},{"name":"setFormValue","signatures":[["value","?entrySource"]]},{"name":"setValidity","signatures":[["flags","?message"]]},{"name":"FormDataEvent","signatures":[["type","?eventInitDict"]]},{"name":"FormData","signatures":[["?form"]]},{"name":"setCustomValidity","signatures":[["error"]]},{"name":"namedItem","signatures":[["name"]],"receiver":"HTMLFormControlsCollection"},{"name":"namedItem","signatures":[["name"]],"receiver":"HTMLSelectElement"},{"name":"namedItem","signatures":[["name"]],"receiver":"HTMLAllCollection"},{"name":"namedItem","signatures":[["name"]],"receiver":"HTMLCollection"},{"name":"namedItem","signatures":[["?name"]],"receiver":"RTCStatsResponse"},{"name":"namedItem","signatures":[["name"]],"receiver":"MimeTypeArray"},{"name":"namedItem","signatures":[["name"]],"receiver":"PluginArray"},{"name":"namedItem","signatures":[["name"]],"receiver":"Plugin"},{"name":"stepUp","signatures":[["?n"]]},{"name":"stepDown","signatures":[["?n"]]},{"name":"select","signatures":[["options"]],"receiver":"ContactsManager"},{"name":"setRangeText","signatures":[["replacement","?start","?end","?selectionMode"]]},{"name":"setSelectionRange","signatures":[["start","end","?direction"]]},{"name":"Option","signatures":[["?data","?value","?defaultSelected","?selected"]]},{"name":"Image","signatures":[["?width","?height"]]},{"name":"decode","signatures":[["?input","?options"]],"receiver":"TextDecoder"},{"name":"start","signatures":[["index"]],"receiver":"TimeRanges"},{"name":"start","signatures":[["stream"]],"receiver":"UnderlyingSourceBase"},{"name":"start","signatures":[["?timeslice"]],"receiver":"MediaRecorder"},{"name":"start","signatures":[["remoteParameters","?role"]],"receiver":"RTCIceTransport"},{"name":"start","signatures":[["?when","?grainOffset","?grainDuration"]],"receiver":"AudioBufferSourceNode"},{"name":"start","signatures":[["?when"]],"receiver":"AudioScheduledSourceNode"},{"name":"assignedNodes","signatures":[["?options"]]},{"name":"assignedElements","signatures":[["?options"]]},{"name":"insertRow","signatures":[["?index"]]},{"name":"deleteRow","signatures":[["index"]]},{"name":"insertCell","signatures":[["?index"]]},{"name":"deleteCell","signatures":[["index"]]},{"name":"Audio","signatures":[["?src"]]},{"name":"canPlayType","signatures":[["type"]]},{"name":"addTextTrack","signatures":[["kind","?label","?language"]]},{"name":"end","signatures":[["index"]],"receiver":"TimeRanges"},{"name":"getTrackById","signatures":[["id"]],"receiver":"AudioTrackList"},{"name":"getTrackById","signatures":[["id"]],"receiver":"TextTrackList"},{"name":"getTrackById","signatures":[["id"]],"receiver":"VideoTrackList"},{"name":"getTrackById","signatures":[["trackId"]],"receiver":"MediaStream"},{"name":"getCueById","signatures":[["id"]]},{"name":"addCue","signatures":[["cue"]]},{"name":"removeCue","signatures":[["cue"]]},{"name":"Touch","signatures":[["initDict"]]},{"name":"copyText","signatures":[["text"]]},{"name":"showContextMenuAtPoint","signatures":[["x","y","items","?document"]]},{"name":"sendMessageToEmbedder","signatures":[["message"]]},{"name":"unobserve","signatures":[["target"]],"receiver":"IntersectionObserver"},{"name":"unobserve","signatures":[["target"]],"receiver":"ResizeObserver"},{"name":"unobserve","signatures":[["db"]],"receiver":"IDBObserver"},{"name":"layoutNextFragment","signatures":[["?options"]]},{"name":"registerLayout","signatures":[["name","layoutCtor"]]},{"name":"watch","signatures":[["signals","callback"]],"receiver":"MojoHandle"},{"name":"watch","signatures":[["callback","?options"]],"receiver":"NFC"},{"name":"writeMessage","signatures":[["buffer","handles"]]},{"name":"readMessage","signatures":[["?flags"]]},{"name":"writeData","signatures":[["buffer","?options"]]},{"name":"discardData","signatures":[["numBytes","?options"]]},{"name":"readData","signatures":[["buffer","?options"]]},{"name":"mapBuffer","signatures":[["offset","numBytes"]]},{"name":"duplicateBufferHandle","signatures":[["?options"]]},{"name":"createDataPipe","signatures":[["options"]]},{"name":"createSharedBuffer","signatures":[["numBytes"]]},{"name":"bindInterface","signatures":[["interfaceName","request_handle","?scope"]]},{"name":"replaceDocumentInterfaceBrokerForTesting","signatures":[["test_broker_handle"]]},{"name":"MojoInterfaceInterceptor","signatures":[["interfaceName","?scope"]]},{"name":"MojoInterfaceRequestEvent","signatures":[["type","?eventInitDict"]]},{"name":"OffscreenCanvas","signatures":[["width","height"]]},{"name":"setValueAndClosePopup","signatures":[["numberValue","stringValue"]]},{"name":"setValue","signatures":[["value"]]},{"name":"selectFontsFromOwnerDocument","signatures":[["targetDocument"]]},{"name":"localizeNumberString","signatures":[["numberString"]]},{"name":"formatMonth","signatures":[["year","zeroBaseMonth"]]},{"name":"formatShortMonth","signatures":[["year","zeroBaseMonth"]]},{"name":"formatWeek","signatures":[["year","weekNumber","localizedStartDate"]]},{"name":"setWindowRect","signatures":[["x","y","width","height"]]},{"name":"consumeDelta","signatures":[["x","y"]]},{"name":"enqueue","signatures":[["?chunk"]]},{"name":"getReader","signatures":[["?mode"]]},{"name":"pipeThrough","signatures":[["transformStream","?options"]]},{"name":"pipeTo","signatures":[["destination","?option"]]},{"name":"TransformStream","signatures":[["?transformer","?writableStrategy","?readableStrategy"]]},{"name":"newValueSpecifiedUnits","signatures":[["unitType","valueInSpecifiedUnits"]]},{"name":"convertToSpecifiedUnits","signatures":[["unitType"]]},{"name":"beginElementAt","signatures":[["offset"]]},{"name":"endElementAt","signatures":[["offset"]]},{"name":"setStdDeviation","signatures":[["stdDeviationX","stdDeviationY"]]},{"name":"isPointInFill","signatures":[["point"]]},{"name":"isPointInStroke","signatures":[["point"]],"receiver":"SVGGeometryElement"},{"name":"isPointInStroke","signatures":[["x","y"],["path","x","y"]],"receiver":"CanvasRenderingContext2D"},{"name":"isPointInStroke","signatures":[["x","y"],["path","x","y"]],"receiver":"OffscreenCanvasRenderingContext2D"},{"name":"isPointInStroke","signatures":[["x","y"],["path","x","y"]],"receiver":"PaintRenderingContext2D"},{"name":"getPointAtLength","signatures":[["distance"]]},{"name":"initialize","signatures":[["newItem"]]},{"name":"getItem","signatures":[["index"]],"receiver":"SVGLengthList"},{"name":"getItem","signatures":[["index"]],"receiver":"SVGNumberList"},{"name":"getItem","signatures":[["index"]],"receiver":"SVGPointList"},{"name":"getItem","signatures":[["index"]],"receiver":"SVGStringList"},{"name":"getItem","signatures":[["index"]],"receiver":"SVGTransformList"},{"name":"getItem","signatures":[["key"]],"receiver":"Storage"},{"name":"insertItemBefore","signatures":[["newItem","index"]],"receiver":"SVGLengthList"},{"name":"insertItemBefore","signatures":[["newItem","index"]],"receiver":"SVGNumberList"},{"name":"insertItemBefore","signatures":[["newItem","index"]],"receiver":"SVGPointList"},{"name":"insertItemBefore","signatures":[["item","index"]],"receiver":"SVGStringList"},{"name":"insertItemBefore","signatures":[["newItem","index"]],"receiver":"SVGTransformList"},{"name":"replaceItem","signatures":[["newItem","index"]]},{"name":"removeItem","signatures":[["index"]],"receiver":"SVGLengthList"},{"name":"removeItem","signatures":[["index"]],"receiver":"SVGNumberList"},{"name":"removeItem","signatures":[["index"]],"receiver":"SVGPointList"},{"name":"removeItem","signatures":[["index"]],"receiver":"SVGStringList"},{"name":"removeItem","signatures":[["index"]],"receiver":"SVGTransformList"},{"name":"removeItem","signatures":[["key"]],"receiver":"Storage"},{"name":"appendItem","signatures":[["newItem"]]},{"name":"setOrientToAngle","signatures":[["angle"]]},{"name":"getIntersectionList","signatures":[["rect","referenceElement"]]},{"name":"getEnclosureList","signatures":[["rect","referenceElement"]]},{"name":"checkIntersection","signatures":[["element","rect"]]},{"name":"checkEnclosure","signatures":[["element","rect"]]},{"name":"createSVGTransformFromMatrix","signatures":[["matrix"]]},{"name":"suspendRedraw","signatures":[["maxWaitMilliseconds"]]},{"name":"unsuspendRedraw","signatures":[["suspendHandleId"]]},{"name":"setCurrentTime","signatures":[["seconds"]]},{"name":"getSubStringLength","signatures":[["charnum","nchars"]]},{"name":"getStartPositionOfChar","signatures":[["charnum"]]},{"name":"getEndPositionOfChar","signatures":[["charnum"]]},{"name":"getExtentOfChar","signatures":[["charnum"]]},{"name":"getRotationOfChar","signatures":[["charnum"]]},{"name":"getCharNumAtPosition","signatures":[["point"]]},{"name":"selectSubString","signatures":[["charnum","nchars"]]},{"name":"setMatrix","signatures":[["matrix"]]},{"name":"setTranslate","signatures":[["tx","ty"]]},{"name":"setScale","signatures":[["sx","sy"]]},{"name":"setRotate","signatures":[["angle","cx","cy"]]},{"name":"setSkewX","signatures":[["angle"]]},{"name":"setSkewY","signatures":[["angle"]]},{"name":"getEntriesByType","signatures":[["entryType"]]},{"name":"getEntriesByName","signatures":[["name","?entryType"]]},{"name":"PerformanceObserver","signatures":[["callback"]]},{"name":"setResourceTimingBufferSize","signatures":[["maxSize"]]},{"name":"setElementTimingBufferMaxSize","signatures":[["maxSize"]]},{"name":"setEventTimingBufferMaxSize","signatures":[["maxSize"]]},{"name":"mark","signatures":[["markName","?markOptions"]]},{"name":"clearMarks","signatures":[["?markName"]]},{"name":"measure","signatures":[["measureName","?startOrOptions","?end"]]},{"name":"clearMeasures","signatures":[["?measureName"]]},{"name":"createPolicy","signatures":[["policyName","policyOptions","?exposed"]]},{"name":"getExposedPolicy","signatures":[["policyName"]]},{"name":"isHTML","signatures":[["checkedObject"]]},{"name":"isScript","signatures":[["checkedObject"]]},{"name":"isScriptURL","signatures":[["checkedObject"]]},{"name":"isURL","signatures":[["checkedObject"]]},{"name":"createHTML","signatures":[["input"]]},{"name":"createScript","signatures":[["input"]]},{"name":"createScriptURL","signatures":[["input"]]},{"name":"createURL","signatures":[["input"]]},{"name":"URLSearchParams","signatures":[["?init"]]},{"name":"URL","signatures":[["url","?base"]]},{"name":"registerTask","signatures":[["name","taskConstructor"]]},{"name":"WorkerTaskQueue","signatures":[["queue_type"]]},{"name":"postFunction","signatures":[["task","?signal","...arguments"]]},{"name":"importScripts","signatures":[["...urls"]]},{"name":"Worker","signatures":[["scriptURL","?options"]]},{"name":"addModule","signatures":[["moduleURL","?options"]]},{"name":"createExpression","signatures":[["expression","?resolver"]]},{"name":"createNSResolver","signatures":[["nodeResolver"]]},{"name":"evaluate","signatures":[["expression","contextNode","?resolver","?type","?inResult"]],"receiver":"Document"},{"name":"evaluate","signatures":[["expression","contextNode","?resolver","?type","?inResult"]],"receiver":"XPathEvaluator"},{"name":"evaluate","signatures":[["contextNode","?type","?inResult"]],"receiver":"XPathExpression"},{"name":"parseFromString","signatures":[["str","type"]]},{"name":"serializeToString","signatures":[["root"]]},{"name":"snapshotItem","signatures":[["index"]]},{"name":"importStylesheet","signatures":[["style"]]},{"name":"transformToFragment","signatures":[["source","output"]]},{"name":"transformToDocument","signatures":[["source"]]},{"name":"setParameter","signatures":[["namespaceURI","localName","value"]]},{"name":"getParameter","signatures":[["namespaceURI","localName"]],"receiver":"XSLTProcessor"},{"name":"getParameter","signatures":[["pname"]],"receiver":"WebGLRenderingContextBase"},{"name":"removeParameter","signatures":[["namespaceURI","localName"]]},{"name":"setRequestHeader","signatures":[["name","value"]]},{"name":"send","signatures":[["?body"]],"receiver":"XMLHttpRequest"},{"name":"send","signatures":[["data"]],"receiver":"RTCDataChannel"},{"name":"send","signatures":[["message"],["data"]],"receiver":"PresentationConnection"},{"name":"send","signatures":[["data","?timestamp"]],"receiver":"MIDIOutput"},{"name":"send","signatures":[["data"]],"receiver":"WebSocket"},{"name":"getResponseHeader","signatures":[["name"]]},{"name":"overrideMimeType","signatures":[["mime"]]},{"name":"registerAnimator","signatures":[["name","animatorConstructor"]]},{"name":"setSinkId","signatures":[["sinkId"]]},{"name":"BackgroundFetchEvent","signatures":[["type","init"]]},{"name":"matchAll","signatures":[["?request","?options"]],"receiver":"BackgroundFetchRegistration"},{"name":"matchAll","signatures":[["?request","?options"]],"receiver":"Cache"},{"name":"matchAll","signatures":[["?options"]],"receiver":"Clients"},{"name":"BackgroundFetchUpdateUIEvent","signatures":[["type","init"]]},{"name":"updateUI","signatures":[["options"]]},{"name":"SyncEvent","signatures":[["type","init"]]},{"name":"register","signatures":[["tag"]],"receiver":"SyncManager"},{"name":"register","signatures":[["url","?options"]],"receiver":"ServiceWorkerContainer"},{"name":"sendBeacon","signatures":[["url","?data"]]},{"name":"getDescriptor","signatures":[["descriptor"]],"receiver":"BluetoothRemoteGATTCharacteristic"},{"name":"getDescriptor","signatures":[["name"]],"static":true,"receiver":"BluetoothUUID"},{"name":"getDescriptors","signatures":[["?descriptor"]]},{"name":"writeValue","signatures":[["value"]]},{"name":"connect","signatures":[["destination","?output","?input"]],"receiver":"AudioNode"},{"name":"getPrimaryService","signatures":[["service"]]},{"name":"getPrimaryServices","signatures":[["?service"]]},{"name":"getCharacteristic","signatures":[["characteristic"]],"receiver":"BluetoothRemoteGATTService"},{"name":"getCharacteristic","signatures":[["name"]],"static":true,"receiver":"BluetoothUUID"},{"name":"getCharacteristics","signatures":[["?characteristic"]]},{"name":"getService","signatures":[["name"]]},{"name":"canonicalUUID","signatures":[["alias"]]},{"name":"requestDevice","signatures":[["?options"]],"receiver":"Bluetooth"},{"name":"requestDevice","signatures":[["options"]],"receiver":"USB"},{"name":"requestLEScan","signatures":[["?options"]]},{"name":"BroadcastChannel","signatures":[["name"]]},{"name":"addAll","signatures":[["requests"]]},{"name":"put","signatures":[["request","response"]],"receiver":"Cache"},{"name":"put","signatures":[["value","?key"]],"receiver":"IDBObjectStore"},{"name":"addColorStop","signatures":[["offset","color"]]},{"name":"lineTo","signatures":[["x","y"]]},{"name":"quadraticCurveTo","signatures":[["cpx","cpy","x","y"]]},{"name":"bezierCurveTo","signatures":[["cp1x","cp1y","cp2x","cp2y","x","y"]]},{"name":"arcTo","signatures":[["x1","y1","x2","y2","radius"]]},{"name":"rect","signatures":[["x","y","width","height"]]},{"name":"arc","signatures":[["x","y","radius","startAngle","endAngle","?anticlockwise"]]},{"name":"ellipse","signatures":[["x","y","radiusX","radiusY","rotation","startAngle","endAngle","?anticlockwise"]]},{"name":"setTransform","signatures":[["?transform"]],"receiver":"CanvasPattern"},{"name":"setTransform","signatures":[["?transform"],["a","b","c","d","e","f"]],"receiver":"CanvasRenderingContext2D"},{"name":"setTransform","signatures":[["a","b","c","d","e","f"]],"receiver":"OffscreenCanvasRenderingContext2D"},{"name":"setTransform","signatures":[["?transform"],["a","b","c","d","e","f"]],"receiver":"PaintRenderingContext2D"},{"name":"transform","signatures":[["a","b","c","d","e","f"]]},{"name":"createLinearGradient","signatures":[["x0","y0","x1","y1"]]},{"name":"createRadialGradient","signatures":[["x0","y0","r0","x1","y1","r1"]]},{"name":"createPattern","signatures":[["image","repetitionType"]]},{"name":"clearRect","signatures":[["x","y","width","height"]]},{"name":"fillRect","signatures":[["x","y","width","height"]]},{"name":"strokeRect","signatures":[["x","y","width","height"]]},{"name":"stroke","signatures":[["?path"]]},{"name":"drawFocusIfNeeded","signatures":[["element"],["path","element"]]},{"name":"scrollPathIntoView","signatures":[["?path"]]},{"name":"clip","signatures":[["?winding"],["path","?winding"]],"receiver":"CanvasRenderingContext2D"},{"name":"clip","signatures":[["?path"]],"receiver":"OffscreenCanvasRenderingContext2D"},{"name":"clip","signatures":[["?winding"],["path","?winding"]],"receiver":"PaintRenderingContext2D"},{"name":"isPointInPath","signatures":[["x","y","?winding"],["path","x","y","?winding"]]},{"name":"fillText","signatures":[["text","x","y","?maxWidth"]]},{"name":"strokeText","signatures":[["text","x","y","?maxWidth"]]},{"name":"measureText","signatures":[["text"]]},{"name":"drawImage","signatures":[["image","x","y","?width","?height"],["image","sx","sy","sw","sh","dx","dy","dw","dh"]]},{"name":"addHitRegion","signatures":[["?options"]]},{"name":"removeHitRegion","signatures":[["id"]]},{"name":"createImageData","signatures":[["imagedata"],["sw","sh","?imageDataColorSettings"],["data","sw","sh","?imageDataColorSettings"]],"receiver":"CanvasRenderingContext2D"},{"name":"createImageData","signatures":[["imagedata"],["sw","sh","?imageDataColorSettings"],["data","sw","sh","imageDataColorSettings"]],"receiver":"OffscreenCanvasRenderingContext2D"},{"name":"getImageData","signatures":[["sx","sy","sw","sh"]]},{"name":"putImageData","signatures":[["imagedata","dx","dy","?dirtyX","?dirtyY","?dirtyWidth","?dirtyHeight"]]},{"name":"setLineDash","signatures":[["dash"]]},{"name":"Path2D","signatures":[["?path"]]},{"name":"addPath","signatures":[["path","?transform"]]},{"name":"getContext","signatures":[["contextId","?attributes"]],"receiver":"HTMLCanvasElement"},{"name":"getContext","signatures":[["contextType","?attributes"]],"receiver":"OffscreenCanvas"},{"name":"transferFromImageBitmap","signatures":[["bitmap"]]},{"name":"writeText","signatures":[["data"]]},{"name":"CookieChangeEvent","signatures":[["type","?eventInitDict"]]},{"name":"subscribeToChanges","signatures":[["subscriptions"]]},{"name":"ExtendableCookieChangeEvent","signatures":[["type","?eventInitDict"]]},{"name":"FederatedCredential","signatures":[["data"]]},{"name":"PasswordCredential","signatures":[["data"]]},{"name":"getRandomValues","signatures":[["array"]]},{"name":"encrypt","signatures":[["algorithm","key","data"]]},{"name":"decrypt","signatures":[["algorithm","key","data"]]},{"name":"verify","signatures":[["algorithm","key","signature","data"]]},{"name":"digest","signatures":[["algorithm","data"]]},{"name":"generateKey","signatures":[["algorithm","extractable","keyUsages"]]},{"name":"deriveKey","signatures":[["algorithm","baseKey","derivedKeyType","extractable","keyUsages"]]},{"name":"deriveBits","signatures":[["algorithm","baseKey","length"]]},{"name":"importKey","signatures":[["format","keyData","algorithm","extractable","keyUsages"]]},{"name":"exportKey","signatures":[["format","key"]]},{"name":"wrapKey","signatures":[["format","key","wrappingKey","wrapAlgorithm"]]},{"name":"unwrapKey","signatures":[["format","wrappedKey","unwrappingKey","unwrapAlgorithm","unwrappedKeyAlgorithm","extractable","keyUsages"]]},{"name":"registerPaint","signatures":[["name","paintCtor"]]},{"name":"DeviceMotionEvent","signatures":[["type","?eventInitDict"]]},{"name":"DeviceOrientationEvent","signatures":[["type","?eventInitDict"]]},{"name":"TextDecoderStream","signatures":[["?label","?options"]]},{"name":"TextDecoder","signatures":[["?label","?options"]]},{"name":"encode","signatures":[["?input"]]},{"name":"encodeInto","signatures":[["source","destination"]]},{"name":"setMediaKeys","signatures":[["mediaKeys"]]},{"name":"generateRequest","signatures":[["initDataType","initData"]]},{"name":"getStatusForPolicy","signatures":[["policy"]]},{"name":"createSession","signatures":[["?sessionType"]]},{"name":"setServerCertificate","signatures":[["serverCertificate"]]},{"name":"requestMediaKeySystemAccess","signatures":[["keySystem","supportedConfigurations"]]},{"name":"EventSource","signatures":[["url","?eventSourceInitDict"]]},{"name":"webkitRequestFileSystem","signatures":[["type","size","?successCallback","?errorCallback"]],"receiver":"DedicatedWorkerGlobalScope"},{"name":"webkitRequestFileSystem","signatures":[["type","size","?successCallback","?errorCallback"]],"receiver":"SharedWorkerGlobalScope"},{"name":"webkitRequestFileSystem","signatures":[["type","size","successCallback","?errorCallback"]],"receiver":"Window"},{"name":"webkitRequestFileSystemSync","signatures":[["type","size"]]},{"name":"webkitResolveLocalFileSystemURL","signatures":[["url","successCallback","?errorCallback"]]},{"name":"webkitResolveLocalFileSystemSyncURL","signatures":[["url"]]},{"name":"isolatedFileSystem","signatures":[["fileSystemId","registeredName"]]},{"name":"upgradeDraggedFileSystemPermissions","signatures":[["domFileSystem"]]},{"name":"getFile","signatures":[["path","flags"]],"receiver":"DirectoryEntrySync"},{"name":"getFile","signatures":[["path","?options","?successCallback","?errorCallback"]],"receiver":"DirectoryEntry"},{"name":"getFile","signatures":[["name","?options"]],"receiver":"FileSystemDirectoryHandle"},{"name":"getDirectory","signatures":[["path","flags"]],"receiver":"DirectoryEntrySync"},{"name":"getDirectory","signatures":[["path","?options","?successCallback","?errorCallback"]],"receiver":"DirectoryEntry"},{"name":"getDirectory","signatures":[["name","?options"]],"receiver":"FileSystemDirectoryHandle"},{"name":"removeRecursively","signatures":[["successCallback","?errorCallback"]],"receiver":"DirectoryEntry"},{"name":"readEntries","signatures":[["successCallback","?errorCallback"]],"receiver":"DirectoryReader"},{"name":"getMetadata","signatures":[["successCallback","?errorCallback"]],"receiver":"Entry"},{"name":"copyTo","signatures":[["parent","name"]],"receiver":"EntrySync"},{"name":"copyTo","signatures":[["parent","?name","?successCallback","?errorCallback"]],"receiver":"Entry"},{"name":"copyTo","signatures":[["parent","?name"]],"receiver":"FileSystemBaseHandle"},{"name":"getParent","signatures":[["?successCallback","?errorCallback"]],"receiver":"Entry"},{"name":"file","signatures":[["successCallback","?errorCallback"]],"receiver":"FileEntry"},{"name":"createWriter","signatures":[["successCallback","?errorCallback"]],"receiver":"FileEntry"},{"name":"getSystemDirectory","signatures":[["options"]]},{"name":"truncate","signatures":[["size"]]},{"name":"seek","signatures":[["position"]]},{"name":"chooseFileSystemEntries","signatures":[["?options"]]},{"name":"playEffect","signatures":[["type","params"]]},{"name":"getCurrentPosition","signatures":[["successCallback","?errorCallback","?options"]]},{"name":"watchPosition","signatures":[["successCallback","?errorCallback","?options"]]},{"name":"clearWatch","signatures":[["watchID"]]},{"name":"query","signatures":[["?options"]],"receiver":"IdleManager"},{"name":"query","signatures":[["permission"]],"receiver":"Permissions"},{"name":"ImageCapture","signatures":[["track"]]},{"name":"takePhoto","signatures":[["?photoSettings"]]},{"name":"advance","signatures":[["count"]]},{"name":"continue","signatures":[["?key"]]},{"name":"continuePrimaryKey","signatures":[["key","primaryKey"]]},{"name":"transaction","signatures":[["storeNames","?mode"]],"receiver":"IDBDatabase"},{"name":"transaction","signatures":[["callback","?errorCallback","?successCallback"]],"receiver":"Database"},{"name":"createObjectStore","signatures":[["name","?options"]]},{"name":"deleteObjectStore","signatures":[["name"]]},{"name":"deleteDatabase","signatures":[["name"]]},{"name":"cmp","signatures":[["first","second"]]},{"name":"getKey","signatures":[["key"]],"receiver":"IDBIndex"},{"name":"getKey","signatures":[["key"]],"receiver":"IDBObjectStore"},{"name":"getKey","signatures":[["name"]],"receiver":"PushSubscription"},{"name":"getAllKeys","signatures":[["?query","?count"]]},{"name":"count","signatures":[["?key"]],"receiver":"IDBIndex"},{"name":"count","signatures":[["?key"]],"receiver":"IDBObjectStore"},{"name":"count","signatures":[["?label"]],"receiver":"console"},{"name":"openCursor","signatures":[["?range","?direction"]]},{"name":"openKeyCursor","signatures":[["?range","?direction"]]},{"name":"only","signatures":[["value"]]},{"name":"lowerBound","signatures":[["bound","?open"]]},{"name":"upperBound","signatures":[["bound","?open"]]},{"name":"bound","signatures":[["lower","upper","?lowerOpen","?upperOpen"]]},{"name":"index","signatures":[["name"]]},{"name":"createIndex","signatures":[["name","keyPath","?options"]]},{"name":"deleteIndex","signatures":[["name"]]},{"name":"IDBObserver","signatures":[["callback"]]},{"name":"objectStore","signatures":[["name"]]},{"name":"IDBVersionChangeEvent","signatures":[["type","?eventInitDict"]]},{"name":"lock","signatures":[["?keyCodes"]],"receiver":"Keyboard"},{"name":"lock","signatures":[["orientation"]],"receiver":"ScreenOrientation"},{"name":"request","signatures":[["name","callback"],["name","options","callback"]],"receiver":"LockManager"},{"name":"request","signatures":[["permissions"]],"receiver":"Permissions"},{"name":"decodingInfo","signatures":[["configuration"]]},{"name":"encodingInfo","signatures":[["configuration"]]},{"name":"captureStream","signatures":[["?frameRate"]],"receiver":"HTMLCanvasElement"},{"name":"BlobEvent","signatures":[["type","eventInitDict"]]},{"name":"MediaRecorder","signatures":[["stream","?options"]]},{"name":"isTypeSupported","signatures":[["type"]]},{"name":"setActionHandler","signatures":[["action","handler"]]},{"name":"addSourceBuffer","signatures":[["type"]]},{"name":"removeSourceBuffer","signatures":[["buffer"]]},{"name":"endOfStream","signatures":[["?error"]]},{"name":"setLiveSeekableRange","signatures":[["start","end"]]},{"name":"appendBuffer","signatures":[["data"]]},{"name":"changeType","signatures":[["type"]]},{"name":"getCapabilities","signatures":[["kind"]],"static":true,"receiver":"RTCRtpReceiver"},{"name":"getCapabilities","signatures":[["kind"]],"static":true,"receiver":"RTCRtpSender"},{"name":"getUserMedia","signatures":[["?constraints"]],"receiver":"MediaDevices"},{"name":"getUserMedia","signatures":[["constraints","successCallback","errorCallback"]],"receiver":"Navigator"},{"name":"getDisplayMedia","signatures":[["?constraints"]]},{"name":"MediaStreamTrackEvent","signatures":[["type","eventInitDict"]]},{"name":"applyConstraints","signatures":[["?constraints"]]},{"name":"addTrack","signatures":[["track"]],"receiver":"MediaStream"},{"name":"addTrack","signatures":[["track","...streams"]],"receiver":"RTCPeerConnection"},{"name":"removeTrack","signatures":[["track"]],"receiver":"MediaStream"},{"name":"removeTrack","signatures":[["sender"]],"receiver":"RTCPeerConnection"},{"name":"webkitGetUserMedia","signatures":[["constraints","successCallback","errorCallback"]]},{"name":"registerProtocolHandler","signatures":[["scheme","url","title"]]},{"name":"unregisterProtocolHandler","signatures":[["scheme","url"]]},{"name":"cancelPush","signatures":[["?target"]]},{"name":"cancelWatch","signatures":[["?id"]]},{"name":"NotificationEvent","signatures":[["type","eventInitDict"]]},{"name":"Notification","signatures":[["title","?options"]]},{"name":"requestPermission","signatures":[["?deprecatedCallback"]]},{"name":"showNotification","signatures":[["title","?options"]]},{"name":"getNotifications","signatures":[["?filter"]]},{"name":"TimestampTrigger","signatures":[["timestamp"]]},{"name":"AbortPaymentEvent","signatures":[["type","eventInitDict"]]},{"name":"respondWith","signatures":[["paymentAbortedResponse"]],"receiver":"AbortPaymentEvent"},{"name":"respondWith","signatures":[["canMakePaymentResponse"]],"receiver":"CanMakePaymentEvent"},{"name":"respondWith","signatures":[["response"]],"receiver":"PaymentRequestEvent"},{"name":"respondWith","signatures":[["r"]],"receiver":"FetchEvent"},{"name":"CanMakePaymentEvent","signatures":[["type","eventInitDict"]]},{"name":"MerchantValidationEvent","signatures":[["type","?eventInitDict"]]},{"name":"complete","signatures":[["merchantSessionPromise"]],"receiver":"MerchantValidationEvent"},{"name":"complete","signatures":[["?paymentResult"]],"receiver":"PaymentResponse"},{"name":"PaymentMethodChangeEvent","signatures":[["type","?eventInitDict"]]},{"name":"PaymentRequestEvent","signatures":[["type","eventInitDict"]]},{"name":"openWindow","signatures":[["url"]]},{"name":"PaymentRequestUpdateEvent","signatures":[["type","?eventInitDict"]]},{"name":"updateWith","signatures":[["detailsPromise"]]},{"name":"PaymentRequest","signatures":[["methodData","details","?options"]]},{"name":"retry","signatures":[["?errorFields"]]},{"name":"RTCDataChannelEvent","signatures":[["type","eventInitDict"]]},{"name":"insertDTMF","signatures":[["tones","?duration","?interToneGap"]]},{"name":"RTCErrorEvent","signatures":[["type","eventInitDict"]]},{"name":"RTCIceCandidate","signatures":[["?candidateInitDict"]]},{"name":"gather","signatures":[["options"]]},{"name":"addRemoteCandidate","signatures":[["remoteCandidate"]]},{"name":"stat","signatures":[["name"]]},{"name":"RTCPeerConnectionIceEvent","signatures":[["type","?eventInitDict"]]},{"name":"RTCPeerConnection","signatures":[["?configuration","?mediaConstraints"]]},{"name":"createOffer","signatures":[["?options"],["successCallback","failureCallback","?rtcOfferOptions"]]},{"name":"createAnswer","signatures":[["?options"],["successCallback","failureCallback","?mediaConstraints"]]},{"name":"setLocalDescription","signatures":[["description","?successCallback","?failureCallback"]]},{"name":"setRemoteDescription","signatures":[["description","?successCallback","?failureCallback"]]},{"name":"addIceCandidate","signatures":[["candidate","?successCallback","?failureCallback"]]},{"name":"setConfiguration","signatures":[["configuration"]]},{"name":"getStats","signatures":[["?callbackOrSelector"],["successCallback","selector"]],"receiver":"RTCPeerConnection"},{"name":"addTransceiver","signatures":[["track_or_kind","?init"]]},{"name":"createDataChannel","signatures":[["label","?dataChannelDict"]]},{"name":"generateCertificate","signatures":[["keygenAlgorithm"]]},{"name":"addStream","signatures":[["stream","?mediaConstraints"]]},{"name":"removeStream","signatures":[["stream"]]},{"name":"createDTMFSender","signatures":[["track"]]},{"name":"RTCQuicStreamEvent","signatures":[["type","?eventInitDict"]]},{"name":"readInto","signatures":[["data"]]},{"name":"waitForWriteBufferedAmountBelow","signatures":[["amount"]]},{"name":"waitForReadable","signatures":[["amount"]]},{"name":"RTCQuicTransport","signatures":[["transport"]]},{"name":"listen","signatures":[["remote_key"]]},{"name":"setParameters","signatures":[["?parameters"]]},{"name":"replaceTrack","signatures":[["withTrack"]]},{"name":"RTCSessionDescription","signatures":[["?descriptionInitDict"]]},{"name":"revoke","signatures":[["permission"]]},{"name":"requestAll","signatures":[["permissions"]]},{"name":"EnterPictureInPictureEvent","signatures":[["type","eventInitDict"]]},{"name":"refresh","signatures":[["?reload"]]},{"name":"PresentationConnectionAvailableEvent","signatures":[["type","eventInitDict"]]},{"name":"PresentationConnectionCloseEvent","signatures":[["type","eventInitDict"]]},{"name":"PresentationRequest","signatures":[["url"]]},{"name":"reconnect","signatures":[["id"]]},{"name":"PushEvent","signatures":[["type","?eventInitDict"]]},{"name":"queryUsageAndQuota","signatures":[["storageType","?usageCallback","?errorCallback"]],"receiver":"DeprecatedStorageInfo"},{"name":"queryUsageAndQuota","signatures":[["usageCallback","?errorCallback"]],"receiver":"DeprecatedStorageQuota"},{"name":"requestQuota","signatures":[["storageType","newQuotaInBytes","?quotaCallback","?errorCallback"]],"receiver":"DeprecatedStorageInfo"},{"name":"requestQuota","signatures":[["newQuotaInBytes","?quotaCallback","?errorCallback"]],"receiver":"DeprecatedStorageQuota"},{"name":"watchAvailability","signatures":[["callback"]]},{"name":"cancelWatchAvailability","signatures":[["?id"]]},{"name":"AbsoluteOrientationSensor","signatures":[["?sensorOptions"]]},{"name":"Accelerometer","signatures":[["?sensorOptions"]]},{"name":"AmbientLightSensor","signatures":[["?sensorOptions"]]},{"name":"Gyroscope","signatures":[["?sensorOptions"]]},{"name":"LinearAccelerationSensor","signatures":[["?sensorOptions"]]},{"name":"populateMatrix","signatures":[["targetBuffer"]]},{"name":"RelativeOrientationSensor","signatures":[["?sensorOptions"]]},{"name":"SensorErrorEvent","signatures":[["type","eventInitDict"]]},{"name":"requestPort","signatures":[["options"]]},{"name":"ExtendableEvent","signatures":[["type","?eventInitDict"]]},{"name":"waitUntil","signatures":[["f"]]},{"name":"FetchEvent","signatures":[["type","eventInitDict"]]},{"name":"InstallEvent","signatures":[["type","?eventInitDict"]]},{"name":"enable","signatures":[["cap"]],"receiver":"WebGLRenderingContextBase"},{"name":"disable","signatures":[["cap"]],"receiver":"WebGLRenderingContextBase"},{"name":"setHeaderValue","signatures":[["value"]]},{"name":"getRegistration","signatures":[["?documentURL"]]},{"name":"navigate","signatures":[["url"]]},{"name":"detect","signatures":[["image"]]},{"name":"FaceDetector","signatures":[["?faceDetectorOptions"]]},{"name":"addFromUri","signatures":[["src","?weight"]]},{"name":"addFromString","signatures":[["string","?weight"]]},{"name":"SpeechSynthesisErrorEvent","signatures":[["type","eventInitDict"]]},{"name":"speak","signatures":[["utterance"]]},{"name":"StorageEvent","signatures":[["type","?eventInitDict"]]},{"name":"initStorageEvent","signatures":[["type","?bubbles","?cancelable","?key","?oldValue","?newValue","?url","?storageArea"]]},{"name":"key","signatures":[["index"]]},{"name":"setItem","signatures":[["key","value"]]},{"name":"vibrate","signatures":[["pattern"]]},{"name":"getFrameData","signatures":[["frameData"]]},{"name":"getEyeParameters","signatures":[["whichEye"]]},{"name":"requestPresent","signatures":[["layers"]]},{"name":"getWakeLock","signatures":[["type"]]},{"name":"getFloatFrequencyData","signatures":[["array"]]},{"name":"getByteFrequencyData","signatures":[["array"]]},{"name":"getFloatTimeDomainData","signatures":[["array"]]},{"name":"getByteTimeDomainData","signatures":[["array"]]},{"name":"getChannelData","signatures":[["channelIndex"]]},{"name":"copyFromChannel","signatures":[["destination","channelNumber","?startInChannel"]]},{"name":"copyToChannel","signatures":[["source","channelNumber","?startInChannel"]]},{"name":"suspend","signatures":[["suspendTime"]],"receiver":"OfflineAudioContext"},{"name":"createMediaElementSource","signatures":[["mediaElement"]]},{"name":"createMediaStreamSource","signatures":[["mediaStream"]]},{"name":"setOrientation","signatures":[["x","y","z","xUp","yUp","zUp"]],"receiver":"AudioListener"},{"name":"setOrientation","signatures":[["x","y","z"]],"receiver":"PannerNode"},{"name":"setValueAtTime","signatures":[["value","time"]]},{"name":"linearRampToValueAtTime","signatures":[["value","time"]]},{"name":"exponentialRampToValueAtTime","signatures":[["value","time"]]},{"name":"setTargetAtTime","signatures":[["target","time","timeConstant"]]},{"name":"setValueCurveAtTime","signatures":[["values","time","duration"]]},{"name":"cancelScheduledValues","signatures":[["startTime"]]},{"name":"cancelAndHoldAtTime","signatures":[["startTime"]]},{"name":"registerProcessor","signatures":[["name","processorConstructor"]]},{"name":"createBuffer","signatures":[["numberOfChannels","numberOfFrames","sampleRate"]],"receiver":"BaseAudioContext"},{"name":"decodeAudioData","signatures":[["audioData","?successCallback","?errorCallback"]]},{"name":"createDelay","signatures":[["?maxDelayTime"]]},{"name":"createIIRFilter","signatures":[["feedForward","feedBack"]]},{"name":"createScriptProcessor","signatures":[["?bufferSize","?numberOfInputChannels","?numberOfOutputChannels"]]},{"name":"createPeriodicWave","signatures":[["real","imag","?options"]]},{"name":"createChannelSplitter","signatures":[["?numberOfOutputs"]]},{"name":"createChannelMerger","signatures":[["?numberOfInputs"]]},{"name":"getFrequencyResponse","signatures":[["frequencyHz","magResponse","phaseResponse"]]},{"name":"setPeriodicWave","signatures":[["periodicWave"]]},{"name":"changeVersion","signatures":[["oldVersion","newVersion","?callback","?errorCallback","?successCallback"]]},{"name":"readTransaction","signatures":[["callback","?errorCallback","?successCallback"]]},{"name":"executeSql","signatures":[["sqlStatement","?arguments","?callback","?errorCallback"]]},{"name":"openDatabase","signatures":[["name","version","displayName","estimatedSize","?creationCallback"]]},{"name":"drawArraysInstancedANGLE","signatures":[["mode","first","count","primcount"]]},{"name":"drawElementsInstancedANGLE","signatures":[["mode","count","type","offset","primcount"]]},{"name":"vertexAttribDivisorANGLE","signatures":[["index","divisor"]]},{"name":"queryCounterEXT","signatures":[["query","target"]]},{"name":"deleteQueryEXT","signatures":[["query"]]},{"name":"isQueryEXT","signatures":[["query"]]},{"name":"beginQueryEXT","signatures":[["target","query"]]},{"name":"endQueryEXT","signatures":[["target"]]},{"name":"getQueryEXT","signatures":[["target","pname"]]},{"name":"getQueryObjectEXT","signatures":[["query","pname"]]},{"name":"deleteVertexArrayOES","signatures":[["?arrayObject"]]},{"name":"isVertexArrayOES","signatures":[["?arrayObject"]]},{"name":"bindVertexArrayOES","signatures":[["?arrayObject"]]},{"name":"getTranslatedShaderSource","signatures":[["shader"]]},{"name":"drawBuffersWEBGL","signatures":[["buffers"]]},{"name":"multiDrawArraysInstancedWEBGL","signatures":[["mode","firstsList","firstsOffset","countsList","countsOffset","instanceCountsList","instanceCountsOffset","drawcount"]]},{"name":"multiDrawElementsInstancedWEBGL","signatures":[["mode","countsList","countsOffset","type","offsetsList","offsetsOffset","instanceCountsList","instanceCountsOffset","drawcount"]]},{"name":"multiDrawArraysWEBGL","signatures":[["mode","firstsList","firstsOffset","countsList","countsOffset","drawcount"]]},{"name":"multiDrawElementsWEBGL","signatures":[["mode","countsList","countsOffset","type","offsetsList","offsetsOffset","drawcount"]]},{"name":"framebufferTextureMultiviewWEBGL","signatures":[["target","attachment","texture","level","baseViewIndex","numViews"]]},{"name":"activeTexture","signatures":[["texture"]]},{"name":"attachShader","signatures":[["program","shader"]]},{"name":"bindAttribLocation","signatures":[["program","index","name"]]},{"name":"bindBuffer","signatures":[["target","buffer"]]},{"name":"bindFramebuffer","signatures":[["target","framebuffer"]]},{"name":"bindRenderbuffer","signatures":[["target","renderbuffer"]]},{"name":"bindTexture","signatures":[["target","texture"]]},{"name":"blendColor","signatures":[["red","green","blue","alpha"]]},{"name":"blendEquation","signatures":[["mode"]]},{"name":"blendEquationSeparate","signatures":[["modeRGB","modeAlpha"]]},{"name":"blendFunc","signatures":[["sfactor","dfactor"]]},{"name":"blendFuncSeparate","signatures":[["srcRGB","dstRGB","srcAlpha","dstAlpha"]]},{"name":"bufferData","signatures":[["target","size","usage"],["target","data","usage"]],"receiver":"WebGLRenderingContextBase"},{"name":"bufferData","signatures":[["target","srcData","usage","srcOffset","?length"]],"receiver":"WebGL2RenderingContextBase"},{"name":"bufferSubData","signatures":[["target","offset","data"]],"receiver":"WebGLRenderingContextBase"},{"name":"bufferSubData","signatures":[["target","dstByteOffset","srcData","srcOffset","?length"]],"receiver":"WebGL2RenderingContextBase"},{"name":"checkFramebufferStatus","signatures":[["target"]]},{"name":"clearColor","signatures":[["red","green","blue","alpha"]]},{"name":"clearDepth","signatures":[["depth"]]},{"name":"clearStencil","signatures":[["s"]]},{"name":"colorMask","signatures":[["red","green","blue","alpha"]]},{"name":"compileShader","signatures":[["shader"]]},{"name":"compressedTexImage2D","signatures":[["target","level","internalformat","width","height","border","data"]],"receiver":"WebGLRenderingContextBase"},{"name":"compressedTexImage2D","signatures":[["target","level","internalformat","width","height","border","imageSize","offset"],["target","level","internalformat","width","height","border","data","srcOffset","?srcLengthOverride"]],"receiver":"WebGL2RenderingContextBase"},{"name":"compressedTexSubImage2D","signatures":[["target","level","xoffset","yoffset","width","height","format","data"]],"receiver":"WebGLRenderingContextBase"},{"name":"compressedTexSubImage2D","signatures":[["target","level","xoffset","yoffset","width","height","format","imageSize","offset"],["target","level","xoffset","yoffset","width","height","format","data","srcOffset","?srcLengthOverride"]],"receiver":"WebGL2RenderingContextBase"},{"name":"copyTexImage2D","signatures":[["target","level","internalformat","x","y","width","height","border"]]},{"name":"copyTexSubImage2D","signatures":[["target","level","xoffset","yoffset","x","y","width","height"]]},{"name":"createShader","signatures":[["type"]]},{"name":"cullFace","signatures":[["mode"]]},{"name":"deleteBuffer","signatures":[["buffer"]]},{"name":"deleteFramebuffer","signatures":[["framebuffer"]]},{"name":"deleteProgram","signatures":[["program"]]},{"name":"deleteRenderbuffer","signatures":[["renderbuffer"]]},{"name":"deleteShader","signatures":[["shader"]]},{"name":"deleteTexture","signatures":[["texture"]]},{"name":"depthFunc","signatures":[["func"]]},{"name":"depthMask","signatures":[["flag"]]},{"name":"depthRange","signatures":[["zNear","zFar"]]},{"name":"detachShader","signatures":[["program","shader"]]},{"name":"disableVertexAttribArray","signatures":[["index"]]},{"name":"drawArrays","signatures":[["mode","first","count"]]},{"name":"drawElements","signatures":[["mode","count","type","offset"]]},{"name":"enableVertexAttribArray","signatures":[["index"]]},{"name":"framebufferRenderbuffer","signatures":[["target","attachment","renderbuffertarget","renderbuffer"]]},{"name":"framebufferTexture2D","signatures":[["target","attachment","textarget","texture","level"]]},{"name":"frontFace","signatures":[["mode"]]},{"name":"generateMipmap","signatures":[["target"]]},{"name":"getActiveAttrib","signatures":[["program","index"]]},{"name":"getActiveUniform","signatures":[["program","index"]]},{"name":"getAttachedShaders","signatures":[["program"]]},{"name":"getAttribLocation","signatures":[["program","name"]]},{"name":"getBufferParameter","signatures":[["target","pname"]]},{"name":"getExtension","signatures":[["name"]]},{"name":"getFramebufferAttachmentParameter","signatures":[["target","attachment","pname"]]},{"name":"getProgramParameter","signatures":[["program","pname"]]},{"name":"getProgramInfoLog","signatures":[["program"]]},{"name":"getRenderbufferParameter","signatures":[["target","pname"]]},{"name":"getShaderParameter","signatures":[["shader","pname"]]},{"name":"getShaderInfoLog","signatures":[["shader"]]},{"name":"getShaderPrecisionFormat","signatures":[["shadertype","precisiontype"]]},{"name":"getShaderSource","signatures":[["shader"]]},{"name":"getTexParameter","signatures":[["target","pname"]]},{"name":"getUniform","signatures":[["program","location"]]},{"name":"getUniformLocation","signatures":[["program","name"]]},{"name":"getVertexAttrib","signatures":[["index","pname"]]},{"name":"getVertexAttribOffset","signatures":[["index","pname"]]},{"name":"hint","signatures":[["target","mode"]]},{"name":"isBuffer","signatures":[["buffer"]]},{"name":"isEnabled","signatures":[["cap"]]},{"name":"isFramebuffer","signatures":[["framebuffer"]]},{"name":"isProgram","signatures":[["program"]]},{"name":"isRenderbuffer","signatures":[["renderbuffer"]]},{"name":"isShader","signatures":[["shader"]]},{"name":"isTexture","signatures":[["texture"]]},{"name":"lineWidth","signatures":[["width"]]},{"name":"linkProgram","signatures":[["program"]]},{"name":"pixelStorei","signatures":[["pname","param"]]},{"name":"polygonOffset","signatures":[["factor","units"]]},{"name":"readPixels","signatures":[["x","y","width","height","format","type","pixels"]],"receiver":"WebGLRenderingContextBase"},{"name":"readPixels","signatures":[["x","y","width","height","format","type","offset"],["x","y","width","height","format","type","dstData","offset"]],"receiver":"WebGL2RenderingContextBase"},{"name":"renderbufferStorage","signatures":[["target","internalformat","width","height"]]},{"name":"sampleCoverage","signatures":[["value","invert"]]},{"name":"scissor","signatures":[["x","y","width","height"]]},{"name":"shaderSource","signatures":[["shader","string"]]},{"name":"stencilFunc","signatures":[["func","ref","mask"]]},{"name":"stencilFuncSeparate","signatures":[["face","func","ref","mask"]]},{"name":"stencilMask","signatures":[["mask"]]},{"name":"stencilMaskSeparate","signatures":[["face","mask"]]},{"name":"stencilOp","signatures":[["fail","zfail","zpass"]]},{"name":"stencilOpSeparate","signatures":[["face","fail","zfail","zpass"]]},{"name":"texParameterf","signatures":[["target","pname","param"]]},{"name":"texParameteri","signatures":[["target","pname","param"]]},{"name":"texImage2D","signatures":[["target","level","internalformat","format","type","pixels"],["target","level","internalformat","format","type","image"],["target","level","internalformat","format","type","canvas"],["target","level","internalformat","format","type","offscreenCanvas"],["target","level","internalformat","format","type","video"],["target","level","internalformat","format","type","bitmap"],["target","level","internalformat","width","height","border","format","type","pixels"]],"receiver":"WebGLRenderingContextBase"},{"name":"texImage2D","signatures":[["target","level","internalformat","width","height","border","format","type","offset"],["target","level","internalformat","width","height","border","format","type","data"],["target","level","internalformat","width","height","border","format","type","image"],["target","level","internalformat","width","height","border","format","type","canvas"],["target","level","internalformat","width","height","border","format","type","offscreenCanvas"],["target","level","internalformat","width","height","border","format","type","video"],["target","level","internalformat","width","height","border","format","type","bitmap"],["target","level","internalformat","width","height","border","format","type","srcData","srcOffset"]],"receiver":"WebGL2RenderingContextBase"},{"name":"texSubImage2D","signatures":[["target","level","xoffset","yoffset","format","type","pixels"],["target","level","xoffset","yoffset","format","type","image"],["target","level","xoffset","yoffset","format","type","canvas"],["target","level","xoffset","yoffset","format","type","offscreenCanvas"],["target","level","xoffset","yoffset","format","type","video"],["target","level","xoffset","yoffset","format","type","bitmap"],["target","level","xoffset","yoffset","width","height","format","type","pixels"]],"receiver":"WebGLRenderingContextBase"},{"name":"texSubImage2D","signatures":[["target","level","xoffset","yoffset","width","height","format","type","offset"],["target","level","xoffset","yoffset","width","height","format","type","data"],["target","level","xoffset","yoffset","width","height","format","type","image"],["target","level","xoffset","yoffset","width","height","format","type","canvas"],["target","level","xoffset","yoffset","width","height","format","type","offscreenCanvas"],["target","level","xoffset","yoffset","width","height","format","type","video"],["target","level","xoffset","yoffset","width","height","format","type","bitmap"],["target","level","xoffset","yoffset","width","height","format","type","srcData","srcOffset"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniform1f","signatures":[["location","x"]]},{"name":"uniform1fv","signatures":[["location","v"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniform1fv","signatures":[["location","v","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniform1i","signatures":[["location","x"]]},{"name":"uniform1iv","signatures":[["location","v"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniform1iv","signatures":[["location","v","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniform2f","signatures":[["location","x","y"]]},{"name":"uniform2fv","signatures":[["location","v"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniform2fv","signatures":[["location","v","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniform2i","signatures":[["location","x","y"]]},{"name":"uniform2iv","signatures":[["location","v"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniform2iv","signatures":[["location","v","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniform3f","signatures":[["location","x","y","z"]]},{"name":"uniform3fv","signatures":[["location","v"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniform3fv","signatures":[["location","v","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniform3i","signatures":[["location","x","y","z"]]},{"name":"uniform3iv","signatures":[["location","v"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniform3iv","signatures":[["location","v","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniform4f","signatures":[["location","x","y","z","w"]]},{"name":"uniform4fv","signatures":[["location","v"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniform4fv","signatures":[["location","v","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniform4i","signatures":[["location","x","y","z","w"]]},{"name":"uniform4iv","signatures":[["location","v"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniform4iv","signatures":[["location","v","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniformMatrix2fv","signatures":[["location","transpose","array"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniformMatrix2fv","signatures":[["location","transpose","array","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniformMatrix3fv","signatures":[["location","transpose","array"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniformMatrix3fv","signatures":[["location","transpose","array","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"uniformMatrix4fv","signatures":[["location","transpose","array"]],"receiver":"WebGLRenderingContextBase"},{"name":"uniformMatrix4fv","signatures":[["location","transpose","array","srcOffset","?srcLength"]],"receiver":"WebGL2RenderingContextBase"},{"name":"useProgram","signatures":[["program"]]},{"name":"validateProgram","signatures":[["program"]]},{"name":"vertexAttrib1f","signatures":[["indx","x"]]},{"name":"vertexAttrib1fv","signatures":[["indx","values"]]},{"name":"vertexAttrib2f","signatures":[["indx","x","y"]]},{"name":"vertexAttrib2fv","signatures":[["indx","values"]]},{"name":"vertexAttrib3f","signatures":[["indx","x","y","z"]]},{"name":"vertexAttrib3fv","signatures":[["indx","values"]]},{"name":"vertexAttrib4f","signatures":[["indx","x","y","z","w"]]},{"name":"vertexAttrib4fv","signatures":[["indx","values"]]},{"name":"vertexAttribPointer","signatures":[["indx","size","type","normalized","stride","offset"]]},{"name":"viewport","signatures":[["x","y","width","height"]]},{"name":"dispatchCompute","signatures":[["numGroupsX","numGroupsY","numGroupsZ"]]},{"name":"getProgramInterfaceParameter","signatures":[["program","programInterface","pname"]]},{"name":"getProgramResourceIndex","signatures":[["program","programInterface","name"]]},{"name":"getProgramResourceName","signatures":[["program","programInterface","index"]]},{"name":"getProgramResource","signatures":[["program","programInterface","index","props"]]},{"name":"getProgramResourceLocation","signatures":[["program","programInterface","name"]]},{"name":"bindImageTexture","signatures":[["unit","texture","level","layered","layer","access","format"]]},{"name":"memoryBarrier","signatures":[["barriers"]]},{"name":"memoryBarrierByRegion","signatures":[["barriers"]]},{"name":"copyBufferSubData","signatures":[["readTarget","writeTarget","readOffset","writeOffset","size"]]},{"name":"getBufferSubData","signatures":[["target","srcByteOffset","dstData","?dstOffset","?length"]]},{"name":"blitFramebuffer","signatures":[["srcX0","srcY0","srcX1","srcY1","dstX0","dstY0","dstX1","dstY1","mask","filter"]]},{"name":"framebufferTextureLayer","signatures":[["target","attachment","texture","level","layer"]]},{"name":"getInternalformatParameter","signatures":[["target","internalformat","pname"]]},{"name":"invalidateFramebuffer","signatures":[["target","attachments"]]},{"name":"invalidateSubFramebuffer","signatures":[["target","attachments","x","y","width","height"]]},{"name":"readBuffer","signatures":[["mode"]]},{"name":"renderbufferStorageMultisample","signatures":[["target","samples","internalformat","width","height"]]},{"name":"texStorage2D","signatures":[["target","levels","internalformat","width","height"]]},{"name":"texStorage3D","signatures":[["target","levels","internalformat","width","height","depth"]]},{"name":"texImage3D","signatures":[["target","level","internalformat","width","height","depth","border","format","type","offset"],["target","level","internalformat","width","height","depth","border","format","type","data"],["target","level","internalformat","width","height","depth","border","format","type","image"],["target","level","internalformat","width","height","depth","border","format","type","canvas"],["target","level","internalformat","width","height","depth","border","format","type","offscreenCanvas"],["target","level","internalformat","width","height","depth","border","format","type","video"],["target","level","internalformat","width","height","depth","border","format","type","bitmap"],["target","level","internalformat","width","height","depth","border","format","type","pixels","?srcOffset"]]},{"name":"texSubImage3D","signatures":[["target","level","xoffset","yoffset","zoffset","width","height","depth","format","type","offset"],["target","level","xoffset","yoffset","zoffset","width","height","depth","format","type","data"],["target","level","xoffset","yoffset","zoffset","width","height","depth","format","type","image"],["target","level","xoffset","yoffset","zoffset","width","height","depth","format","type","canvas"],["target","level","xoffset","yoffset","zoffset","width","height","depth","format","type","offscreenCanvas"],["target","level","xoffset","yoffset","zoffset","width","height","depth","format","type","video"],["target","level","xoffset","yoffset","zoffset","width","height","depth","format","type","bitmap"],["target","level","xoffset","yoffset","zoffset","width","height","depth","format","type","pixels","?srcOffset"]]},{"name":"copyTexSubImage3D","signatures":[["target","level","xoffset","yoffset","zoffset","x","y","width","height"]]},{"name":"compressedTexImage3D","signatures":[["target","level","internalformat","width","height","depth","border","imageSize","offset"],["target","level","internalformat","width","height","depth","border","data","?srcOffset","?srcLengthOverride"]]},{"name":"compressedTexSubImage3D","signatures":[["target","level","xoffset","yoffset","zoffset","width","height","depth","format","imageSize","offset"],["target","level","xoffset","yoffset","zoffset","width","height","depth","format","data","?srcOffset","?srcLengthOverride"]]},{"name":"getFragDataLocation","signatures":[["program","name"]]},{"name":"uniform1ui","signatures":[["location","v0"]]},{"name":"uniform2ui","signatures":[["location","v0","v1"]]},{"name":"uniform3ui","signatures":[["location","v0","v1","v2"]]},{"name":"uniform4ui","signatures":[["location","v0","v1","v2","v3"]]},{"name":"uniform1uiv","signatures":[["location","v","?srcOffset","?srcLength"]]},{"name":"uniform2uiv","signatures":[["location","v","?srcOffset","?srcLength"]]},{"name":"uniform3uiv","signatures":[["location","v","?srcOffset","?srcLength"]]},{"name":"uniform4uiv","signatures":[["location","v","?srcOffset","?srcLength"]]},{"name":"uniformMatrix2x3fv","signatures":[["location","transpose","value","?srcOffset","?srcLength"]]},{"name":"uniformMatrix3x2fv","signatures":[["location","transpose","value","?srcOffset","?srcLength"]]},{"name":"uniformMatrix2x4fv","signatures":[["location","transpose","value","?srcOffset","?srcLength"]]},{"name":"uniformMatrix4x2fv","signatures":[["location","transpose","value","?srcOffset","?srcLength"]]},{"name":"uniformMatrix3x4fv","signatures":[["location","transpose","value","?srcOffset","?srcLength"]]},{"name":"uniformMatrix4x3fv","signatures":[["location","transpose","value","?srcOffset","?srcLength"]]},{"name":"vertexAttribI4i","signatures":[["index","x","y","z","w"]]},{"name":"vertexAttribI4iv","signatures":[["index","v"]]},{"name":"vertexAttribI4ui","signatures":[["index","x","y","z","w"]]},{"name":"vertexAttribI4uiv","signatures":[["index","v"]]},{"name":"vertexAttribIPointer","signatures":[["index","size","type","stride","offset"]]},{"name":"vertexAttribDivisor","signatures":[["index","divisor"]]},{"name":"drawArraysInstanced","signatures":[["mode","first","count","instanceCount"]]},{"name":"drawElementsInstanced","signatures":[["mode","count","type","offset","instanceCount"]]},{"name":"drawRangeElements","signatures":[["mode","start","end","count","type","offset"]]},{"name":"drawBuffers","signatures":[["buffers"]]},{"name":"clearBufferiv","signatures":[["buffer","drawbuffer","value","?srcOffset"]]},{"name":"clearBufferuiv","signatures":[["buffer","drawbuffer","value","?srcOffset"]]},{"name":"clearBufferfv","signatures":[["buffer","drawbuffer","value","?srcOffset"]]},{"name":"clearBufferfi","signatures":[["buffer","drawbuffer","depth","stencil"]]},{"name":"deleteQuery","signatures":[["query"]]},{"name":"isQuery","signatures":[["query"]]},{"name":"beginQuery","signatures":[["target","query"]]},{"name":"endQuery","signatures":[["target"]]},{"name":"getQuery","signatures":[["target","pname"]]},{"name":"getQueryParameter","signatures":[["query","pname"]]},{"name":"deleteSampler","signatures":[["sampler"]]},{"name":"isSampler","signatures":[["sampler"]]},{"name":"bindSampler","signatures":[["unit","sampler"]]},{"name":"samplerParameteri","signatures":[["sampler","pname","param"]]},{"name":"samplerParameterf","signatures":[["sampler","pname","param"]]},{"name":"getSamplerParameter","signatures":[["sampler","pname"]]},{"name":"fenceSync","signatures":[["condition","flags"]]},{"name":"isSync","signatures":[["sync"]]},{"name":"deleteSync","signatures":[["sync"]]},{"name":"clientWaitSync","signatures":[["sync","flags","timeout"]]},{"name":"waitSync","signatures":[["sync","flags","timeout"]]},{"name":"getSyncParameter","signatures":[["sync","pname"]]},{"name":"deleteTransformFeedback","signatures":[["feedback"]]},{"name":"isTransformFeedback","signatures":[["feedback"]]},{"name":"bindTransformFeedback","signatures":[["target","feedback"]]},{"name":"beginTransformFeedback","signatures":[["primitiveMode"]]},{"name":"transformFeedbackVaryings","signatures":[["program","varyings","bufferMode"]]},{"name":"getTransformFeedbackVarying","signatures":[["program","index"]]},{"name":"bindBufferBase","signatures":[["target","index","buffer"]]},{"name":"bindBufferRange","signatures":[["target","index","buffer","offset","size"]]},{"name":"getIndexedParameter","signatures":[["target","index"]]},{"name":"getUniformIndices","signatures":[["program","uniformNames"]]},{"name":"getActiveUniforms","signatures":[["program","uniformIndices","pname"]]},{"name":"getUniformBlockIndex","signatures":[["program","uniformBlockName"]]},{"name":"getActiveUniformBlockParameter","signatures":[["program","uniformBlockIndex","pname"]]},{"name":"getActiveUniformBlockName","signatures":[["program","uniformBlockIndex"]]},{"name":"uniformBlockBinding","signatures":[["program","uniformBlockIndex","uniformBlockBinding"]]},{"name":"deleteVertexArray","signatures":[["vertexArray"]]},{"name":"isVertexArray","signatures":[["vertexArray"]]},{"name":"bindVertexArray","signatures":[["vertexArray"]]},{"name":"getAdapter","signatures":[["descriptor"]]},{"name":"requestMIDIAccess","signatures":[["?options"]]},{"name":"canShare","signatures":[["?data"]]},{"name":"share","signatures":[["?data"]]},{"name":"CloseEvent","signatures":[["type","?eventInitDict"]]},{"name":"WebSocket","signatures":[["url","?protocols"]]},{"name":"USBAlternateInterface","signatures":[["deviceInterface","alternateSetting"]]},{"name":"USBConfiguration","signatures":[["device","configurationValue"]]},{"name":"USBConnectionEvent","signatures":[["type","eventInitDict"]]},{"name":"selectConfiguration","signatures":[["configurationValue"]]},{"name":"claimInterface","signatures":[["interfaceNumber"]]},{"name":"releaseInterface","signatures":[["interfaceNumber"]]},{"name":"selectAlternateInterface","signatures":[["interfaceNumber","alternateSetting"]]},{"name":"controlTransferIn","signatures":[["setup","length"]]},{"name":"controlTransferOut","signatures":[["setup","?data"]]},{"name":"clearHalt","signatures":[["direction","endpointNumber"]]},{"name":"transferIn","signatures":[["endpointNumber","length"]]},{"name":"transferOut","signatures":[["endpointNumber","data"]]},{"name":"isochronousTransferIn","signatures":[["endpointNumber","packetLengths"]]},{"name":"isochronousTransferOut","signatures":[["endpointNumber","data","packetLengths"]]},{"name":"USBEndpoint","signatures":[["alternate","endpointNumber","direction"]]},{"name":"USBInTransferResult","signatures":[["status","?data"]]},{"name":"USBInterface","signatures":[["configuration","interfaceNumber"]]},{"name":"USBIsochronousInTransferPacket","signatures":[["status","?data"]]},{"name":"USBIsochronousInTransferResult","signatures":[["packets","?data"]]},{"name":"USBIsochronousOutTransferPacket","signatures":[["status","?bytesWritten"]]},{"name":"USBIsochronousOutTransferResult","signatures":[["packets"]]},{"name":"USBOutTransferResult","signatures":[["status","?bytesWritten"]]},{"name":"getViewerPose","signatures":[["referenceSpace"]]},{"name":"getInputPose","signatures":[["inputSource","referenceSpace"]]},{"name":"XRInputSourceEvent","signatures":[["type","eventInitDict"]]},{"name":"XRRigidTransform","signatures":[["?position","?orientation"]]},{"name":"XRSessionEvent","signatures":[["type","eventInitDict"]]},{"name":"updateRenderState","signatures":[["init"]]},{"name":"requestReferenceSpace","signatures":[["options"]]},{"name":"requestHitTest","signatures":[["ray","space"]]},{"name":"getTransformTo","signatures":[["other"]]},{"name":"XRWebGLLayer","signatures":[["session","context","?layerInit"]]},{"name":"getViewport","signatures":[["view"]]},{"name":"requestViewportScaling","signatures":[["viewportScaleFactor"]]},{"name":"getNativeFramebufferScaleFactor","signatures":[["session"]]},{"name":"supportsSessionMode","signatures":[["mode"]]},{"name":"requestSession","signatures":[["?options"]]},{"name":"assert","signatures":[["?condition","...data"]]},{"name":"debug","signatures":[["...data"]]},{"name":"dir","signatures":[["item","?options"]]},{"name":"dirxml","signatures":[["...data"]]},{"name":"group","signatures":[["...data"]]},{"name":"groupCollapsed","signatures":[["...data"]]},{"name":"info","signatures":[["...data"]]},{"name":"profile","signatures":[["?title"]]},{"name":"profileEnd","signatures":[["?title"]]},{"name":"table","signatures":[["...tabularData"]]},{"name":"time","signatures":[["?label"]]},{"name":"timeEnd","signatures":[["?label"]]},{"name":"timeStamp","signatures":[["?name"]]},{"name":"trace","signatures":[["...data"]]},{"name":"warn","signatures":[["...data"]]}];self.JavaScriptMetadata=self.JavaScriptMetadata||{};JavaScriptMetadata=JavaScriptMetadata||{};JavaScriptMetadata.NativeFunctions=NativeFunctions;export default class JavaScriptMetadataImpl{constructor(){this._uniqueFunctions=new Map();this._instanceMethods=new Map();this._staticMethods=new Map();for(const nativeFunction of JavaScriptMetadata.NativeFunctions){if(!nativeFunction.receiver){this._uniqueFunctions.set(nativeFunction.name,nativeFunction.signatures);}else if(nativeFunction.static){if(!this._staticMethods.has(nativeFunction.receiver)){this._staticMethods.set(nativeFunction.receiver,new Map());}
this._staticMethods.get(nativeFunction.receiver).set(nativeFunction.name,nativeFunction.signatures);}else{if(!this._instanceMethods.has(nativeFunction.receiver)){this._instanceMethods.set(nativeFunction.receiver,new Map());}
this._instanceMethods.get(nativeFunction.receiver).set(nativeFunction.name,nativeFunction.signatures);}}}
signaturesForNativeFunction(name){return this._uniqueFunctions.get(name)||null;}
signaturesForInstanceMethod(name,receiverClassName){if(!this._instanceMethods.has(receiverClassName)){return null;}
return this._instanceMethods.get(receiverClassName).get(name)||null;}
signaturesForStaticMethod(name,receiverConstructorName){if(!this._staticMethods.has(receiverConstructorName)){return null;}
return this._staticMethods.get(receiverConstructorName).get(name)||null;}}
self.JavaScriptMetadata=self.JavaScriptMetadata||{};JavaScriptMetadata=JavaScriptMetadata||{};JavaScriptMetadata.JavaScriptMetadata=JavaScriptMetadataImpl;JavaScriptMetadata.NativeFunctions;import*as HARFormat from'./HARFormat.js';import*as HARImporter from'./HARImporter.js';export{HARFormat,HARImporter,};export class Importer{static requestsFromHARLog(log){const pages=new Map();for(const page of log.pages){pages.set(page.id,page);}
log.entries.sort((a,b)=>a.startedDateTime-b.startedDateTime);const pageLoads=new Map();const requests=[];for(const entry of log.entries){let pageLoad=pageLoads.get(entry.pageref);const documentURL=pageLoad?pageLoad.mainRequest.url():entry.request.url;let initiator=null;if(entry._initiator){initiator={type:entry._initiator.type,url:entry._initiator.url,lineNumber:entry._initiator.lineNumber};}
const request=new SDK.NetworkRequest('har-'+requests.length,entry.request.url,documentURL,'','',initiator);const page=pages.get(entry.pageref);if(!pageLoad&&page){pageLoad=HARImporter.Importer._buildPageLoad(page,request);pageLoads.set(entry.pageref,pageLoad);}
HARImporter.Importer._fillRequestFromHAREntry(request,entry,pageLoad);if(pageLoad){pageLoad.bindRequest(request);}
requests.push(request);}
return requests;}
static _buildPageLoad(page,mainRequest){const pageLoad=new SDK.NetworkLog.PageLoad(mainRequest);pageLoad.startTime=page.startedDateTime;pageLoad.contentLoadTime=page.pageTimings.onContentLoad*1000;pageLoad.loadTime=page.pageTimings.onLoad*1000;return pageLoad;}
static _fillRequestFromHAREntry(request,entry,pageLoad){if(entry.request.postData){request.setRequestFormData(true,entry.request.postData.text);}else{request.setRequestFormData(false,null);}
request.connectionId=entry.connection||'';request.requestMethod=entry.request.method;request.setRequestHeaders(entry.request.headers);if(entry.response.content.mimeType&&entry.response.content.mimeType!=='x-unknown'){request.mimeType=entry.response.content.mimeType;}
request.responseHeaders=entry.response.headers;request.statusCode=entry.response.status;request.statusText=entry.response.statusText;let protocol=entry.response.httpVersion.toLowerCase();if(protocol==='http/2.0'){protocol='h2';}
request.protocol=protocol.replace(/^http\/2\.0?\+quic/,'http/2+quic');const issueTime=entry.startedDateTime.getTime()/1000;request.setIssueTime(issueTime,issueTime);const contentSize=entry.response.content.size>0?entry.response.content.size:0;const headersSize=entry.response.headersSize>0?entry.response.headersSize:0;const bodySize=entry.response.bodySize>0?entry.response.bodySize:0;request.resourceSize=contentSize||(headersSize+bodySize);let transferSize=entry.response.customAsNumber('transferSize');if(transferSize===undefined){transferSize=entry.response.headersSize+entry.response.bodySize;}
request.setTransferSize(transferSize>=0?transferSize:0);const fromCache=entry.customAsString('fromCache');if(fromCache==='memory'){request.setFromMemoryCache();}else if(fromCache==='disk'){request.setFromDiskCache();}
const contentData={error:null,content:null,encoded:entry.response.content.encoding==='base64'};if(entry.response.content.text!==undefined){contentData.content=entry.response.content.text;}
request.setContentDataProvider(async()=>contentData);HARImporter.Importer._setupTiming(request,issueTime,entry.time,entry.timings);request.setRemoteAddress(entry.serverIPAddress||'',80);request.setResourceType(HARImporter.Importer._getResourceType(request,entry,pageLoad));const priority=entry.customAsString('priority');if(Protocol.Network.ResourcePriority.hasOwnProperty(priority)){request.setPriority((priority));}
const messages=entry.customAsArray('webSocketMessages');if(messages){for(const message of messages){if(message.time===undefined){continue;}
if(!Object.values(SDK.NetworkRequest.WebSocketFrameType).includes(message.type)){continue;}
if(message.opcode===undefined){continue;}
if(message.data===undefined){continue;}
const mask=message.type===SDK.NetworkRequest.WebSocketFrameType.Send;request.addFrame({time:message.time,text:message.data,opCode:message.opcode,mask:mask,type:message.type});}}
request.finished=true;}
static _getResourceType(request,entry,pageLoad){const customResourceTypeName=entry.customAsString('resourceType');if(customResourceTypeName){const customResourceType=Common.ResourceType.fromName(customResourceTypeName);if(customResourceType){return customResourceType;}}
if(pageLoad&&pageLoad.mainRequest===request){return Common.resourceTypes.Document;}
const resourceTypeFromMime=Common.ResourceType.fromMimeType(entry.response.content.mimeType);if(resourceTypeFromMime!==Common.resourceTypes.Other){return resourceTypeFromMime;}
const resourceTypeFromUrl=Common.ResourceType.fromURL(entry.request.url);if(resourceTypeFromUrl){return resourceTypeFromUrl;}
return Common.resourceTypes.Other;}
static _setupTiming(request,issueTime,entryTotalDuration,timings){function accumulateTime(timing){if(timing===undefined||timing<0){return-1;}
lastEntry+=timing;return lastEntry;}
let lastEntry=timings.blocked>=0?timings.blocked:0;const proxy=timings.customAsNumber('blocked_proxy')||-1;const queueing=timings.customAsNumber('blocked_queueing')||-1;const ssl=timings.ssl>=0?timings.ssl:0;if(timings.connect>0){timings.connect-=ssl;}
const timing={proxyStart:proxy>0?lastEntry-proxy:-1,proxyEnd:proxy>0?lastEntry:-1,requestTime:issueTime+(queueing>0?queueing:0)/1000,dnsStart:timings.dns>=0?lastEntry:-1,dnsEnd:accumulateTime(timings.dns),connectStart:timings.connect>=0?lastEntry:-1,connectEnd:accumulateTime(timings.connect)+ssl,sslStart:timings.ssl>=0?lastEntry:-1,sslEnd:accumulateTime(timings.ssl),workerStart:-1,workerReady:-1,sendStart:timings.send>=0?lastEntry:-1,sendEnd:accumulateTime(timings.send),pushStart:0,pushEnd:0,receiveHeadersEnd:accumulateTime(timings.wait)};accumulateTime(timings.receive);request.timing=timing;request.endTime=issueTime+Math.max(entryTotalDuration,lastEntry)/1000;}}
self.HARImporter=self.HARImporter||{};HARImporter=HARImporter||{};HARImporter.Importer=Importer;class HARBase{constructor(data){if(!data||typeof data!=='object'){throw'First parameter is expected to be an object';}}
static _safeDate(data){const date=new Date(data);if(!Number.isNaN(date.getTime())){return date;}
throw'Invalid date format';}
static _safeNumber(data){const result=Number(data);if(!Number.isNaN(result)){return result;}
throw'Casting to number results in NaN';}
static _optionalNumber(data){return data!==undefined?HARBase._safeNumber(data):undefined;}
static _optionalString(data){return data!==undefined?String(data):undefined;}
customAsString(name){const value=(this)['_'+name];return value!==undefined?String(value):undefined;}
customAsNumber(name){let value=(this)['_'+name];if(value===undefined){return;}
value=Number(value);if(Number.isNaN(value)){return;}
return value;}
customAsArray(name){const value=(this)['_'+name];return Array.isArray(value)?value:undefined;}}
export class HARRoot extends HARBase{constructor(data){super(data);this.log=new HARLog(data['log']);}}
export class HARLog extends HARBase{constructor(data){super(data);this.version=String(data['version']);this.creator=new HARCreator(data['creator']);this.browser=data['browser']?new HARCreator(data['browser']):undefined;this.pages=Array.isArray(data['pages'])?data['pages'].map(page=>new HARImporter.HARPage(page)):[];if(!Array.isArray(data['entries'])){throw'log.entries is expected to be an array';}
this.entries=data['entries'].map(entry=>new HAREntry(entry));this.comment=HARBase._optionalString(data['comment']);}}
class HARCreator extends HARBase{constructor(data){super(data);this.name=String(data['name']);this.version=String(data['version']);this.comment=HARBase._optionalString(data['comment']);}}
export class HARPage extends HARBase{constructor(data){super(data);this.startedDateTime=HARBase._safeDate(data['startedDateTime']);this.id=String(data['id']);this.title=String(data['title']);this.pageTimings=new HARPageTimings(data['pageTimings']);this.comment=HARBase._optionalString(data['comment']);}}
class HARPageTimings extends HARBase{constructor(data){super(data);this.onContentLoad=HARBase._optionalNumber(data['onContentLoad']);this.onLoad=HARBase._optionalNumber(data['onLoad']);this.comment=HARBase._optionalString(data['comment']);}}
export class HAREntry extends HARBase{constructor(data){super(data);this.pageref=HARBase._optionalString(data['pageref']);this.startedDateTime=HARBase._safeDate(data['startedDateTime']);this.time=HARBase._safeNumber(data['time']);this.request=new HARRequest(data['request']);this.response=new HARResponse(data['response']);this.cache={};this.timings=new HARTimings(data['timings']);this.serverIPAddress=HARBase._optionalString(data['serverIPAddress']);this.connection=HARBase._optionalString(data['connection']);this.comment=HARBase._optionalString(data['comment']);this._fromCache=HARBase._optionalString(data['_fromCache']);this._initiator=this._importInitiator(data['_initiator']);this._priority=HARBase._optionalString(data['_priority']);this._resourceType=HARBase._optionalString(data['_resourceType']);this._webSocketMessages=this._importWebSocketMessages(data['_webSocketMessages']);}
_importInitiator(initiator){if(typeof initiator!=='object'){return;}
return new HARInitiator(initiator);}
_importWebSocketMessages(inputMessages){if(!Array.isArray(inputMessages)){return;}
const outputMessages=[];for(const message of inputMessages){if(typeof message!=='object'){return;}
outputMessages.push(new HARWebSocketMessage(message));}
return outputMessages;}}
class HARRequest extends HARBase{constructor(data){super(data);this.method=String(data['method']);this.url=String(data['url']);this.httpVersion=String(data['httpVersion']);this.cookies=Array.isArray(data['cookies'])?data['cookies'].map(cookie=>new HARCookie(cookie)):[];this.headers=Array.isArray(data['headers'])?data['headers'].map(header=>new HARHeader(header)):[];this.queryString=Array.isArray(data['queryString'])?data['queryString'].map(qs=>new HARQueryString(qs)):[];this.postData=data['postData']?new HARPostData(data['postData']):undefined;this.headersSize=HARBase._safeNumber(data['headersSize']);this.bodySize=HARBase._safeNumber(data['bodySize']);this.comment=HARBase._optionalString(data['comment']);}}
class HARResponse extends HARBase{constructor(data){super(data);this.status=HARBase._safeNumber(data['status']);this.statusText=String(data['statusText']);this.httpVersion=String(data['httpVersion']);this.cookies=Array.isArray(data['cookies'])?data['cookies'].map(cookie=>new HARCookie(cookie)):[];this.headers=Array.isArray(data['headers'])?data['headers'].map(header=>new HARHeader(header)):[];this.content=new HARContent(data['content']);this.redirectURL=String(data['redirectURL']);this.headersSize=HARBase._safeNumber(data['headersSize']);this.bodySize=HARBase._safeNumber(data['bodySize']);this.comment=HARBase._optionalString(data['comment']);this._transferSize=HARBase._optionalNumber(data['_transferSize']);this._error=HARBase._optionalString(data['_error']);}}
class HARCookie extends HARBase{constructor(data){super(data);this.name=String(data['name']);this.value=String(data['value']);this.path=HARBase._optionalString(data['path']);this.domain=HARBase._optionalString(data['domain']);this.expires=data['expires']?HARBase._safeDate(data['expires']):undefined;this.httpOnly=data['httpOnly']!==undefined?!!data['httpOnly']:undefined;this.secure=data['secure']!==undefined?!!data['secure']:undefined;this.comment=HARBase._optionalString(data['comment']);}}
class HARHeader extends HARBase{constructor(data){super(data);this.name=String(data['name']);this.value=String(data['value']);this.comment=HARBase._optionalString(data['comment']);}}
class HARQueryString extends HARBase{constructor(data){super(data);this.name=String(data['name']);this.value=String(data['value']);this.comment=HARBase._optionalString(data['comment']);}}
class HARPostData extends HARBase{constructor(data){super(data);this.mimeType=String(data['mimeType']);this.params=Array.isArray(data['params'])?data['params'].map(param=>new HARImporter.HARParam(param)):[];this.text=String(data['text']);this.comment=HARBase._optionalString(data['comment']);}}
export class HARParam extends HARBase{constructor(data){super(data);this.name=String(data['name']);this.value=HARBase._optionalString(data['value']);this.fileName=HARBase._optionalString(data['fileName']);this.contentType=HARBase._optionalString(data['contentType']);this.comment=HARBase._optionalString(data['comment']);}}
class HARContent extends HARBase{constructor(data){super(data);this.size=HARBase._safeNumber(data['size']);this.compression=HARBase._optionalNumber(data['compression']);this.mimeType=String(data['mimeType']);this.text=HARBase._optionalString(data['text']);this.encoding=HARBase._optionalString(data['encoding']);this.comment=HARBase._optionalString(data['comment']);}}
export class HARTimings extends HARBase{constructor(data){super(data);this.blocked=HARBase._optionalNumber(data['blocked']);this.dns=HARBase._optionalNumber(data['dns']);this.connect=HARBase._optionalNumber(data['connect']);this.send=HARBase._safeNumber(data['send']);this.wait=HARBase._safeNumber(data['wait']);this.receive=HARBase._safeNumber(data['receive']);this.ssl=HARBase._optionalNumber(data['ssl']);this.comment=HARBase._optionalString(data['comment']);this._blocked_queueing=HARBase._optionalNumber(data['_blocked_queueing']);this._blocked_proxy=HARBase._optionalNumber(data['_blocked_proxy']);}}
export class HARInitiator extends HARBase{constructor(data){super(data);this.type=HARBase._optionalString(data['type']);this.url=HARBase._optionalString(data['url']);this.lineNumber=HARBase._optionalNumber(data['lineNumber']);}}
class HARWebSocketMessage extends HARBase{constructor(data){super(data);this.time=HARBase._optionalNumber(data['time']);this.opcode=HARBase._optionalNumber(data['opcode']);this.data=HARBase._optionalString(data['data']);this.type=HARBase._optionalString(data['type']);}}
self.HARImporter=self.HARImporter||{};HARImporter=HARImporter||{};HARImporter.HARRoot=HARRoot;HARImporter.HARLog=HARLog;HARImporter.HARPage=HARPage;HARImporter.HAREntry=HAREntry;HARImporter.HARParam=HARParam;HARImporter.HARTimings=HARTimings;HARImporter.HARInitiator=HARInitiator;import*as DOMBreakpointsSidebarPane from'./DOMBreakpointsSidebarPane.js';import*as EventListenerBreakpointsSidebarPane from'./EventListenerBreakpointsSidebarPane.js';import*as ObjectEventListenersSidebarPane from'./ObjectEventListenersSidebarPane.js';import*as XHRBreakpointsSidebarPane from'./XHRBreakpointsSidebarPane.js';export{DOMBreakpointsSidebarPane,EventListenerBreakpointsSidebarPane,ObjectEventListenersSidebarPane,XHRBreakpointsSidebarPane,};export class XHRBreakpointsSidebarPane extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('browser_debugger/xhrBreakpointsSidebarPane.css');this._listElement=this.contentElement.createChild('div','breakpoint-list hidden');this._emptyElement=this.contentElement.createChild('div','gray-info-message');this._emptyElement.textContent=Common.UIString('No breakpoints');this._breakpointElements=new Map();this._addButton=new UI.ToolbarButton(Common.UIString('Add breakpoint'),'largeicon-add');this._addButton.addEventListener(UI.ToolbarButton.Events.Click,this._addButtonClicked.bind(this));this._emptyElement.addEventListener('contextmenu',this._emptyElementContextMenu.bind(this),true);this._restoreBreakpoints();this._update();}
toolbarItems(){return[this._addButton];}
_emptyElementContextMenu(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Add breakpoint'),this._addButtonClicked.bind(this));contextMenu.show();}
async _addButtonClicked(){await UI.viewManager.showView('sources.xhrBreakpoints');const inputElementContainer=createElementWithClass('p','breakpoint-condition');inputElementContainer.textContent=Common.UIString('Break when URL contains:');const inputElement=inputElementContainer.createChild('span','breakpoint-condition-input');this._addListElement(inputElementContainer,(this._listElement.firstChild));function finishEditing(accept,e,text){this._removeListElement(inputElementContainer);if(accept){SDK.domDebuggerManager.addXHRBreakpoint(text,true);this._setBreakpoint(text,true);}}
const config=new UI.InplaceEditor.Config(finishEditing.bind(this,true),finishEditing.bind(this,false));UI.InplaceEditor.startEditing(inputElement,config);}
_setBreakpoint(url,enabled){if(this._breakpointElements.has(url)){this._breakpointElements.get(url)._checkboxElement.checked=enabled;return;}
const element=createElementWithClass('div','breakpoint-entry');element._url=url;element.addEventListener('contextmenu',this._contextMenu.bind(this,url),true);const title=url?Common.UIString('URL contains "%s"',url):Common.UIString('Any XHR or fetch');const label=UI.CheckboxLabel.create(title,enabled);element.appendChild(label);label.checkboxElement.addEventListener('click',this._checkboxClicked.bind(this,url),false);element._checkboxElement=label.checkboxElement;label.classList.add('cursor-auto');label.textElement.addEventListener('dblclick',this._labelClicked.bind(this,url),false);let currentElement=(this._listElement.firstChild);while(currentElement){if(currentElement._url&&currentElement._url<element._url){break;}
currentElement=(currentElement.nextSibling);}
this._addListElement(element,currentElement);this._breakpointElements.set(url,element);}
_removeBreakpoint(url){const element=this._breakpointElements.get(url);if(!element){return;}
this._removeListElement(element);this._breakpointElements.delete(url);}
_addListElement(element,beforeNode){this._listElement.insertBefore(element,beforeNode);this._emptyElement.classList.add('hidden');this._listElement.classList.remove('hidden');}
_removeListElement(element){this._listElement.removeChild(element);if(!this._listElement.firstChild){this._emptyElement.classList.remove('hidden');this._listElement.classList.add('hidden');}}
_contextMenu(url,event){const contextMenu=new UI.ContextMenu(event);function removeBreakpoint(){SDK.domDebuggerManager.removeXHRBreakpoint(url);this._removeBreakpoint(url);}
function removeAllBreakpoints(){for(const url of this._breakpointElements.keys()){SDK.domDebuggerManager.removeXHRBreakpoint(url);this._removeBreakpoint(url);}}
const removeAllTitle=Common.UIString('Remove all breakpoints');contextMenu.defaultSection().appendItem(Common.UIString('Add breakpoint'),this._addButtonClicked.bind(this));contextMenu.defaultSection().appendItem(Common.UIString('Remove breakpoint'),removeBreakpoint.bind(this));contextMenu.defaultSection().appendItem(removeAllTitle,removeAllBreakpoints.bind(this));contextMenu.show();}
_checkboxClicked(url,event){SDK.domDebuggerManager.toggleXHRBreakpoint(url,event.target.checked);}
_labelClicked(url){const element=this._breakpointElements.get(url)||null;const inputElement=createElementWithClass('span','breakpoint-condition');inputElement.textContent=url;this._listElement.insertBefore(inputElement,element);element.classList.add('hidden');function finishEditing(accept,e,text){this._removeListElement(inputElement);if(accept){SDK.domDebuggerManager.removeXHRBreakpoint(url);this._removeBreakpoint(url);const enabled=element?element._checkboxElement.checked:true;SDK.domDebuggerManager.addXHRBreakpoint(text,enabled);this._setBreakpoint(text,enabled);}else{element.classList.remove('hidden');}}
UI.InplaceEditor.startEditing(inputElement,new UI.InplaceEditor.Config(finishEditing.bind(this,true),finishEditing.bind(this,false)));}
flavorChanged(object){this._update();}
_update(){const details=UI.context.flavor(SDK.DebuggerPausedDetails);if(!details||details.reason!==SDK.DebuggerModel.BreakReason.XHR){if(this._highlightedElement){this._highlightedElement.classList.remove('breakpoint-hit');delete this._highlightedElement;}
return;}
const url=details.auxData['breakpointURL'];const element=this._breakpointElements.get(url);if(!element){return;}
UI.viewManager.showView('sources.xhrBreakpoints');element.classList.add('breakpoint-hit');this._highlightedElement=element;}
_restoreBreakpoints(){const breakpoints=SDK.domDebuggerManager.xhrBreakpoints();for(const url of breakpoints.keys()){this._setBreakpoint(url,breakpoints.get(url));}}}
self.BrowserDebugger=self.BrowserDebugger||{};BrowserDebugger=BrowserDebugger||{};BrowserDebugger.XHRBreakpointsSidebarPane=XHRBreakpointsSidebarPane;export class ObjectEventListenersSidebarPane extends UI.VBox{constructor(){super();this._refreshButton=new UI.ToolbarButton(ls`Refresh global listeners`,'largeicon-refresh');this._refreshButton.addEventListener(UI.ToolbarButton.Events.Click,this._refreshClick,this);this._refreshButton.setEnabled(false);this._eventListenersView=new EventListeners.EventListenersView(this.update.bind(this));this._eventListenersView.show(this.element);this.setDefaultFocusedChild(this._eventListenersView);}
toolbarItems(){return[this._refreshButton];}
update(){if(this._lastRequestedContext){this._lastRequestedContext.runtimeModel.releaseObjectGroup(_objectGroupName);delete this._lastRequestedContext;}
const executionContext=UI.context.flavor(SDK.ExecutionContext);if(!executionContext){this._eventListenersView.reset();this._eventListenersView.addEmptyHolderIfNeeded();return;}
this._lastRequestedContext=executionContext;Promise.all([this._windowObjectInContext(executionContext)]).then(this._eventListenersView.addObjects.bind(this._eventListenersView));}
wasShown(){super.wasShown();UI.context.addFlavorChangeListener(SDK.ExecutionContext,this.update,this);this._refreshButton.setEnabled(true);this.update();}
willHide(){super.willHide();UI.context.removeFlavorChangeListener(SDK.ExecutionContext,this.update,this);this._refreshButton.setEnabled(false);}
_windowObjectInContext(executionContext){return executionContext.evaluate({expression:'self',objectGroup:_objectGroupName,includeCommandLineAPI:false,silent:true,returnByValue:false,generatePreview:false},false,false).then(result=>result.object&&!result.exceptionDetails?result.object:null);}
_refreshClick(event){event.data.consume();this.update();}}
export const _objectGroupName='object-event-listeners-sidebar-pane';self.BrowserDebugger=self.BrowserDebugger||{};BrowserDebugger=BrowserDebugger||{};BrowserDebugger.ObjectEventListenersSidebarPane=ObjectEventListenersSidebarPane;BrowserDebugger.ObjectEventListenersSidebarPane._objectGroupName=_objectGroupName;export class EventListenerBreakpointsSidebarPane extends UI.VBox{constructor(){super(true);this._categoriesTreeOutline=new UI.TreeOutlineInShadow();this._categoriesTreeOutline.registerRequiredCSS('browser_debugger/eventListenerBreakpoints.css');this._categoriesTreeOutline.setShowSelectionOnKeyboardFocus(true);this.contentElement.appendChild(this._categoriesTreeOutline.element);this._categories=new Map();const categories=SDK.domDebuggerManager.eventListenerBreakpoints().map(breakpoint=>breakpoint.category());categories.sort();for(const category of categories){if(!this._categories.has(category)){this._createCategory(category);}}
if(categories.length>0){const firstCategory=this._categories.get(categories[0]);firstCategory.element.select();}
this._breakpoints=new Map();for(const breakpoint of SDK.domDebuggerManager.eventListenerBreakpoints()){this._createBreakpoint(breakpoint);}
SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerPaused,this._update,this);SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerResumed,this._update,this);UI.context.addFlavorChangeListener(SDK.Target,this._update,this);}
focus(){this._categoriesTreeOutline.forceSelect();}
_createCategory(name){const labelNode=UI.CheckboxLabel.create(name);labelNode.checkboxElement.addEventListener('click',this._categoryCheckboxClicked.bind(this,name),true);labelNode.checkboxElement.tabIndex=-1;const treeElement=new UI.TreeElement(labelNode);treeElement.listItemElement.addEventListener('keydown',event=>{if(event.key===' '){this._categories.get(name).checkbox.click();event.consume(true);}});UI.ARIAUtils.setChecked(treeElement.listItemElement,false);this._categoriesTreeOutline.appendChild(treeElement);this._categories.set(name,{element:treeElement,checkbox:labelNode.checkboxElement});}
_createBreakpoint(breakpoint){const labelNode=UI.CheckboxLabel.create(breakpoint.title());labelNode.classList.add('source-code');labelNode.checkboxElement.addEventListener('click',this._breakpointCheckboxClicked.bind(this,breakpoint),true);labelNode.checkboxElement.tabIndex=-1;const treeElement=new UI.TreeElement(labelNode);treeElement.listItemElement.addEventListener('keydown',event=>{if(event.key===' '){this._breakpoints.get(breakpoint).checkbox.click();event.consume(true);}});UI.ARIAUtils.setChecked(treeElement.listItemElement,false);treeElement.listItemElement.createChild('div','breakpoint-hit-marker');this._categories.get(breakpoint.category()).element.appendChild(treeElement);this._breakpoints.set(breakpoint,{element:treeElement,checkbox:labelNode.checkboxElement});}
_update(){const target=UI.context.flavor(SDK.Target);const debuggerModel=target?target.model(SDK.DebuggerModel):null;const details=debuggerModel?debuggerModel.debuggerPausedDetails():null;if(!details||details.reason!==SDK.DebuggerModel.BreakReason.EventListener||!details.auxData){if(this._highlightedElement){UI.ARIAUtils.setDescription(this._highlightedElement,'');this._highlightedElement.classList.remove('breakpoint-hit');delete this._highlightedElement;}
return;}
const breakpoint=SDK.domDebuggerManager.resolveEventListenerBreakpoint((details.auxData));if(!breakpoint){return;}
UI.viewManager.showView('sources.eventListenerBreakpoints');this._categories.get(breakpoint.category()).element.expand();this._highlightedElement=this._breakpoints.get(breakpoint).element.listItemElement;UI.ARIAUtils.setDescription(this._highlightedElement,ls`breakpoint hit`);this._highlightedElement.classList.add('breakpoint-hit');}
_categoryCheckboxClicked(category){const item=this._categories.get(category);const enabled=item.checkbox.checked;UI.ARIAUtils.setChecked(item.element.listItemElement,enabled);for(const breakpoint of this._breakpoints.keys()){if(breakpoint.category()===category){breakpoint.setEnabled(enabled);this._breakpoints.get(breakpoint).checkbox.checked=enabled;}}}
_breakpointCheckboxClicked(breakpoint){const item=this._breakpoints.get(breakpoint);breakpoint.setEnabled(item.checkbox.checked);UI.ARIAUtils.setChecked(item.element.listItemElement,item.checkbox.checked);let hasEnabled=false;let hasDisabled=false;for(const other of this._breakpoints.keys()){if(other.category()===breakpoint.category()){if(other.enabled()){hasEnabled=true;}else{hasDisabled=true;}}}
const category=this._categories.get(breakpoint.category());category.checkbox.checked=hasEnabled;category.checkbox.indeterminate=hasEnabled&&hasDisabled;if(category.checkbox.indeterminate){UI.ARIAUtils.setCheckboxAsIndeterminate(category.element.listItemElement);}else{UI.ARIAUtils.setChecked(category.element.listItemElement,hasEnabled);}}}
self.BrowserDebugger=self.BrowserDebugger||{};BrowserDebugger=BrowserDebugger||{};BrowserDebugger.EventListenerBreakpointsSidebarPane=EventListenerBreakpointsSidebarPane;BrowserDebugger.EventListenerBreakpointsSidebarPane.Item;export class DOMBreakpointsSidebarPane extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('browser_debugger/domBreakpointsSidebarPane.css');this._listElement=this.contentElement.createChild('div','breakpoint-list hidden');this._emptyElement=this.contentElement.createChild('div','gray-info-message');this._emptyElement.textContent=Common.UIString('No breakpoints');this._items=new Map();SDK.targetManager.addModelListener(SDK.DOMDebuggerModel,SDK.DOMDebuggerModel.Events.DOMBreakpointAdded,this._breakpointAdded,this);SDK.targetManager.addModelListener(SDK.DOMDebuggerModel,SDK.DOMDebuggerModel.Events.DOMBreakpointToggled,this._breakpointToggled,this);SDK.targetManager.addModelListener(SDK.DOMDebuggerModel,SDK.DOMDebuggerModel.Events.DOMBreakpointsRemoved,this._breakpointsRemoved,this);for(const domDebuggerModel of SDK.targetManager.models(SDK.DOMDebuggerModel)){domDebuggerModel.retrieveDOMBreakpoints();for(const breakpoint of domDebuggerModel.domBreakpoints()){this._addBreakpoint(breakpoint);}}
this._highlightedElement=null;this._update();}
_breakpointAdded(event){this._addBreakpoint((event.data));}
_breakpointToggled(event){const breakpoint=(event.data);const item=this._items.get(breakpoint);if(item){item.checkbox.checked=breakpoint.enabled;}}
_breakpointsRemoved(event){const breakpoints=(event.data);for(const breakpoint of breakpoints){const item=this._items.get(breakpoint);if(item){this._items.delete(breakpoint);this._listElement.removeChild(item.element);}}
if(!this._listElement.firstChild){this._emptyElement.classList.remove('hidden');this._listElement.classList.add('hidden');}}
_addBreakpoint(breakpoint){const element=createElementWithClass('div','breakpoint-entry');element.addEventListener('contextmenu',this._contextMenu.bind(this,breakpoint),true);const checkboxLabel=UI.CheckboxLabel.create('',breakpoint.enabled);const checkboxElement=checkboxLabel.checkboxElement;checkboxElement.addEventListener('click',this._checkboxClicked.bind(this,breakpoint),false);element.appendChild(checkboxLabel);const labelElement=createElementWithClass('div','dom-breakpoint');element.appendChild(labelElement);const description=createElement('div');const breakpointTypeLabel=BreakpointTypeLabels.get(breakpoint.type);description.textContent=breakpointTypeLabel;const linkifiedNode=createElementWithClass('monospace');linkifiedNode.style.display='block';labelElement.appendChild(linkifiedNode);Common.Linkifier.linkify(breakpoint.node).then(linkified=>{linkifiedNode.appendChild(linkified);UI.ARIAUtils.setAccessibleName(checkboxElement,ls`${breakpointTypeLabel}: ${linkified.deepTextContent()}`);});labelElement.appendChild(description);const item={breakpoint:breakpoint,element:element,checkbox:checkboxElement};element._item=item;this._items.set(breakpoint,item);let currentElement=this._listElement.firstChild;while(currentElement){if(currentElement._item&&currentElement._item.breakpoint.type<breakpoint.type){break;}
currentElement=currentElement.nextSibling;}
this._listElement.insertBefore(element,currentElement);this._emptyElement.classList.add('hidden');this._listElement.classList.remove('hidden');}
_contextMenu(breakpoint,event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Remove breakpoint'),()=>{breakpoint.domDebuggerModel.removeDOMBreakpoint(breakpoint.node,breakpoint.type);});contextMenu.defaultSection().appendItem(Common.UIString('Remove all DOM breakpoints'),()=>{breakpoint.domDebuggerModel.removeAllDOMBreakpoints();});contextMenu.show();}
_checkboxClicked(breakpoint){const item=this._items.get(breakpoint);if(!item){return;}
breakpoint.domDebuggerModel.toggleDOMBreakpoint(breakpoint,item.checkbox.checked);}
flavorChanged(object){this._update();}
_update(){const details=UI.context.flavor(SDK.DebuggerPausedDetails);if(!details||!details.auxData||details.reason!==SDK.DebuggerModel.BreakReason.DOM){if(this._highlightedElement){this._highlightedElement.classList.remove('breakpoint-hit');delete this._highlightedElement;}
return;}
const domDebuggerModel=details.debuggerModel.target().model(SDK.DOMDebuggerModel);if(!domDebuggerModel){return;}
const data=domDebuggerModel.resolveDOMBreakpointData((details.auxData));if(!data){return;}
let element=null;for(const item of this._items.values()){if(item.breakpoint.node===data.node&&item.breakpoint.type===data.type){element=item.element;}}
if(!element){return;}
UI.viewManager.showView('sources.domBreakpoints');element.classList.add('breakpoint-hit');this._highlightedElement=element;}}
export const BreakpointTypeLabels=new Map([[SDK.DOMDebuggerModel.DOMBreakpoint.Type.SubtreeModified,Common.UIString('Subtree modified')],[SDK.DOMDebuggerModel.DOMBreakpoint.Type.AttributeModified,Common.UIString('Attribute modified')],[SDK.DOMDebuggerModel.DOMBreakpoint.Type.NodeRemoved,Common.UIString('Node removed')],]);export class ContextMenuProvider{appendApplicableItems(event,contextMenu,object){const node=(object);if(node.pseudoType()){return;}
const domDebuggerModel=node.domModel().target().model(SDK.DOMDebuggerModel);if(!domDebuggerModel){return;}
function toggleBreakpoint(type){if(domDebuggerModel.hasDOMBreakpoint(node,type)){domDebuggerModel.removeDOMBreakpoint(node,type);}else{domDebuggerModel.setDOMBreakpoint(node,type);}}
const breakpointsMenu=contextMenu.debugSection().appendSubMenuItem(Common.UIString('Break on'));for(const key in SDK.DOMDebuggerModel.DOMBreakpoint.Type){const type=SDK.DOMDebuggerModel.DOMBreakpoint.Type[key];const label=Sources.DebuggerPausedMessage.BreakpointTypeNouns.get(type);breakpointsMenu.defaultSection().appendCheckboxItem(label,toggleBreakpoint.bind(null,type),domDebuggerModel.hasDOMBreakpoint(node,type));}}}
self.BrowserDebugger=self.BrowserDebugger||{};BrowserDebugger=BrowserDebugger||{};BrowserDebugger.DOMBreakpointsSidebarPane=DOMBreakpointsSidebarPane;BrowserDebugger.DOMBreakpointsSidebarPane.BreakpointTypeLabels=BreakpointTypeLabels;BrowserDebugger.DOMBreakpointsSidebarPane.Item;BrowserDebugger.DOMBreakpointsSidebarPane.ContextMenuProvider=ContextMenuProvider;import'./LayerDetailsView.js';import'./LayerTreeOutline.js';import'./LayerViewHost.js';import'./Layers3DView.js';import'./PaintProfilerView.js';import'./TransformController.js';import*as LayerDetailsView from'./LayerDetailsView.js';import*as Layers3DView from'./Layers3DView.js';import*as LayerTreeOutline from'./LayerTreeOutline.js';import*as LayerViewHost from'./LayerViewHost.js';import*as PaintProfilerView from'./PaintProfilerView.js';import*as TransformController from'./TransformController.js';export{LayerDetailsView,Layers3DView,LayerTreeOutline,LayerViewHost,PaintProfilerView,TransformController,};export class TransformController extends Common.Object{constructor(element,disableRotate){super();this._shortcuts={};this.element=element;this._registerShortcuts();UI.installDragHandle(element,this._onDragStart.bind(this),this._onDrag.bind(this),this._onDragEnd.bind(this),'move',null);element.addEventListener('keydown',this._onKeyDown.bind(this),false);element.addEventListener('mousewheel',this._onMouseWheel.bind(this),false);this._minScale=0;this._maxScale=Infinity;this._controlPanelToolbar=new UI.Toolbar('transform-control-panel');this._modeButtons={};if(!disableRotate){const panModeButton=new UI.ToolbarToggle(Common.UIString('Pan mode (X)'),'largeicon-pan');panModeButton.addEventListener(UI.ToolbarButton.Events.Click,this._setMode.bind(this,Modes.Pan));this._modeButtons[Modes.Pan]=panModeButton;this._controlPanelToolbar.appendToolbarItem(panModeButton);const rotateModeButton=new UI.ToolbarToggle(Common.UIString('Rotate mode (V)'),'largeicon-rotate');rotateModeButton.addEventListener(UI.ToolbarButton.Events.Click,this._setMode.bind(this,Modes.Rotate));this._modeButtons[Modes.Rotate]=rotateModeButton;this._controlPanelToolbar.appendToolbarItem(rotateModeButton);}
this._setMode(Modes.Pan);const resetButton=new UI.ToolbarButton(Common.UIString('Reset transform (0)'),'largeicon-center');resetButton.addEventListener(UI.ToolbarButton.Events.Click,this.resetAndNotify.bind(this,undefined));this._controlPanelToolbar.appendToolbarItem(resetButton);this._reset();}
toolbar(){return this._controlPanelToolbar;}
_onKeyDown(event){const shortcutKey=UI.KeyboardShortcut.makeKeyFromEventIgnoringModifiers(event);const handler=this._shortcuts[shortcutKey];if(handler&&handler(event)){event.consume();}}
_addShortcuts(keys,handler){for(let i=0;i<keys.length;++i){this._shortcuts[keys[i].key]=handler;}}
_registerShortcuts(){this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.ResetView,this.resetAndNotify.bind(this));this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.PanMode,this._setMode.bind(this,Modes.Pan));this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.RotateMode,this._setMode.bind(this,Modes.Rotate));const zoomFactor=1.1;this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.ZoomIn,this._onKeyboardZoom.bind(this,zoomFactor));this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.ZoomOut,this._onKeyboardZoom.bind(this,1/zoomFactor));this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.Up,this._onKeyboardPanOrRotate.bind(this,0,-1));this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.Down,this._onKeyboardPanOrRotate.bind(this,0,1));this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.Left,this._onKeyboardPanOrRotate.bind(this,-1,0));this._addShortcuts(UI.ShortcutsScreen.LayersPanelShortcuts.Right,this._onKeyboardPanOrRotate.bind(this,1,0));}
_postChangeEvent(){this.dispatchEventToListeners(Events.TransformChanged);}
_reset(){this._scale=1;this._offsetX=0;this._offsetY=0;this._rotateX=0;this._rotateY=0;}
_setMode(mode){if(this._mode===mode){return;}
this._mode=mode;this._updateModeButtons();}
_updateModeButtons(){for(const mode in this._modeButtons){this._modeButtons[mode].setToggled(mode===this._mode);}}
resetAndNotify(event){this._reset();this._postChangeEvent();if(event){event.preventDefault();}
this.element.focus();}
setScaleConstraints(minScale,maxScale){this._minScale=minScale;this._maxScale=maxScale;this._scale=Number.constrain(this._scale,minScale,maxScale);}
clampOffsets(minX,maxX,minY,maxY){this._offsetX=Number.constrain(this._offsetX,minX,maxX);this._offsetY=Number.constrain(this._offsetY,minY,maxY);}
scale(){return this._scale;}
offsetX(){return this._offsetX;}
offsetY(){return this._offsetY;}
rotateX(){return this._rotateX;}
rotateY(){return this._rotateY;}
_onScale(scaleFactor,x,y){scaleFactor=Number.constrain(this._scale*scaleFactor,this._minScale,this._maxScale)/this._scale;this._scale*=scaleFactor;this._offsetX-=(x-this._offsetX)*(scaleFactor-1);this._offsetY-=(y-this._offsetY)*(scaleFactor-1);this._postChangeEvent();}
_onPan(offsetX,offsetY){this._offsetX+=offsetX;this._offsetY+=offsetY;this._postChangeEvent();}
_onRotate(rotateX,rotateY){this._rotateX=rotateX;this._rotateY=rotateY;this._postChangeEvent();}
_onKeyboardZoom(zoomFactor){this._onScale(zoomFactor,this.element.clientWidth/2,this.element.clientHeight/2);}
_onKeyboardPanOrRotate(xMultiplier,yMultiplier){const panStepInPixels=6;const rotateStepInDegrees=5;if(this._mode===Modes.Rotate){this._onRotate(this._rotateX+yMultiplier*rotateStepInDegrees,this._rotateY+xMultiplier*rotateStepInDegrees);}else{this._onPan(xMultiplier*panStepInPixels,yMultiplier*panStepInPixels);}}
_onMouseWheel(event){const zoomFactor=1.1;const mouseWheelZoomSpeed=1/120;const scaleFactor=Math.pow(zoomFactor,event.wheelDeltaY*mouseWheelZoomSpeed);this._onScale(scaleFactor,event.clientX-this.element.totalOffsetLeft(),event.clientY-this.element.totalOffsetTop());}
_onDrag(event){if(this._mode===Modes.Rotate){this._onRotate(this._oldRotateX+(this._originY-event.clientY)/this.element.clientHeight*180,this._oldRotateY-(this._originX-event.clientX)/this.element.clientWidth*180);}else{this._onPan(event.clientX-this._originX,event.clientY-this._originY);this._originX=event.clientX;this._originY=event.clientY;}}
_onDragStart(event){this.element.focus();this._originX=event.clientX;this._originY=event.clientY;this._oldRotateX=this._rotateX;this._oldRotateY=this._rotateY;return true;}
_onDragEnd(){delete this._originX;delete this._originY;delete this._oldRotateX;delete this._oldRotateY;}}
export const Events={TransformChanged:Symbol('TransformChanged')};export const Modes={Pan:'Pan',Rotate:'Rotate',};self.LayerViewer=self.LayerViewer||{};LayerViewer=LayerViewer||{};LayerViewer.TransformController=TransformController;LayerViewer.TransformController.Events=Events;LayerViewer.TransformController.Modes=Modes;export class PaintProfilerView extends UI.HBox{constructor(showImageCallback){super(true);this.registerRequiredCSS('layer_viewer/paintProfiler.css');this.contentElement.classList.add('paint-profiler-overview');this._canvasContainer=this.contentElement.createChild('div','paint-profiler-canvas-container');this._progressBanner=this.contentElement.createChild('div','full-widget-dimmed-banner hidden');this._progressBanner.textContent=Common.UIString('Profiling\u2026');this._pieChart=new PerfUI.PieChart({chartName:ls`Profiling Results`,size:55,formatter:this._formatPieChartTime.bind(this)});this._pieChart.element.classList.add('paint-profiler-pie-chart');this.contentElement.appendChild(this._pieChart.element);this._showImageCallback=showImageCallback;this._canvas=this._canvasContainer.createChild('canvas','fill');this._context=this._canvas.getContext('2d');this._selectionWindow=new PerfUI.OverviewGrid.Window(this._canvasContainer);this._selectionWindow.addEventListener(PerfUI.OverviewGrid.Events.WindowChanged,this._onWindowChanged,this);this._innerBarWidth=4*window.devicePixelRatio;this._minBarHeight=window.devicePixelRatio;this._barPaddingWidth=2*window.devicePixelRatio;this._outerBarWidth=this._innerBarWidth+this._barPaddingWidth;this._pendingScale=1;this._scale=this._pendingScale;this._reset();}
static categories(){if(PaintProfilerView._categories){return PaintProfilerView._categories;}
PaintProfilerView._categories={shapes:new PaintProfilerCategory('shapes',Common.UIString('Shapes'),'rgb(255, 161, 129)'),bitmap:new PaintProfilerCategory('bitmap',Common.UIString('Bitmap'),'rgb(136, 196, 255)'),text:new PaintProfilerCategory('text',Common.UIString('Text'),'rgb(180, 255, 137)'),misc:new PaintProfilerCategory('misc',Common.UIString('Misc'),'rgb(206, 160, 255)')};return PaintProfilerView._categories;}
static _initLogItemCategories(){if(PaintProfilerView._logItemCategoriesMap){return PaintProfilerView._logItemCategoriesMap;}
const categories=PaintProfilerView.categories();const logItemCategories={};logItemCategories['Clear']=categories['misc'];logItemCategories['DrawPaint']=categories['misc'];logItemCategories['DrawData']=categories['misc'];logItemCategories['SetMatrix']=categories['misc'];logItemCategories['PushCull']=categories['misc'];logItemCategories['PopCull']=categories['misc'];logItemCategories['Translate']=categories['misc'];logItemCategories['Scale']=categories['misc'];logItemCategories['Concat']=categories['misc'];logItemCategories['Restore']=categories['misc'];logItemCategories['SaveLayer']=categories['misc'];logItemCategories['Save']=categories['misc'];logItemCategories['BeginCommentGroup']=categories['misc'];logItemCategories['AddComment']=categories['misc'];logItemCategories['EndCommentGroup']=categories['misc'];logItemCategories['ClipRect']=categories['misc'];logItemCategories['ClipRRect']=categories['misc'];logItemCategories['ClipPath']=categories['misc'];logItemCategories['ClipRegion']=categories['misc'];logItemCategories['DrawPoints']=categories['shapes'];logItemCategories['DrawRect']=categories['shapes'];logItemCategories['DrawOval']=categories['shapes'];logItemCategories['DrawRRect']=categories['shapes'];logItemCategories['DrawPath']=categories['shapes'];logItemCategories['DrawVertices']=categories['shapes'];logItemCategories['DrawDRRect']=categories['shapes'];logItemCategories['DrawBitmap']=categories['bitmap'];logItemCategories['DrawBitmapRectToRect']=categories['bitmap'];logItemCategories['DrawBitmapMatrix']=categories['bitmap'];logItemCategories['DrawBitmapNine']=categories['bitmap'];logItemCategories['DrawSprite']=categories['bitmap'];logItemCategories['DrawPicture']=categories['bitmap'];logItemCategories['DrawText']=categories['text'];logItemCategories['DrawPosText']=categories['text'];logItemCategories['DrawPosTextH']=categories['text'];logItemCategories['DrawTextOnPath']=categories['text'];PaintProfilerView._logItemCategoriesMap=logItemCategories;return logItemCategories;}
static _categoryForLogItem(logItem){const method=logItem.method.toTitleCase();const logItemCategories=PaintProfilerView._initLogItemCategories();let result=logItemCategories[method];if(!result){result=PaintProfilerView.categories()['misc'];logItemCategories[method]=result;}
return result;}
onResize(){this._update();}
async setSnapshotAndLog(snapshot,log,clipRect){this._reset();this._snapshot=snapshot;if(this._snapshot){this._snapshot.addReference();}
this._log=log;this._logCategories=this._log.map(PaintProfilerView._categoryForLogItem);if(!this._snapshot){this._update();this._pieChart.setTotal(0);this._selectionWindow.setEnabled(false);return;}
this._selectionWindow.setEnabled(true);this._progressBanner.classList.remove('hidden');this._updateImage();const profiles=await snapshot.profile(clipRect);this._progressBanner.classList.add('hidden');this._profiles=profiles;this._update();this._updatePieChart();}
setScale(scale){const needsUpdate=scale>this._scale;const predictiveGrowthFactor=2;this._pendingScale=Math.min(1,scale*predictiveGrowthFactor);if(needsUpdate&&this._snapshot){this._updateImage();}}
_update(){this._canvas.width=this._canvasContainer.clientWidth*window.devicePixelRatio;this._canvas.height=this._canvasContainer.clientHeight*window.devicePixelRatio;this._samplesPerBar=0;if(!this._profiles||!this._profiles.length){return;}
const maxBars=Math.floor((this._canvas.width-2*this._barPaddingWidth)/this._outerBarWidth);const sampleCount=this._log.length;this._samplesPerBar=Math.ceil(sampleCount/maxBars);let maxBarTime=0;const barTimes=[];const barHeightByCategory=[];let heightByCategory={};for(let i=0,lastBarIndex=0,lastBarTime=0;i<sampleCount;){let categoryName=(this._logCategories[i]&&this._logCategories[i].name)||'misc';const sampleIndex=this._log[i].commandIndex;for(let row=0;row<this._profiles.length;row++){const sample=this._profiles[row][sampleIndex];lastBarTime+=sample;heightByCategory[categoryName]=(heightByCategory[categoryName]||0)+sample;}
++i;if(i-lastBarIndex===this._samplesPerBar||i===sampleCount){const factor=this._profiles.length*(i-lastBarIndex);lastBarTime/=factor;for(categoryName in heightByCategory){heightByCategory[categoryName]/=factor;}
barTimes.push(lastBarTime);barHeightByCategory.push(heightByCategory);if(lastBarTime>maxBarTime){maxBarTime=lastBarTime;}
lastBarTime=0;heightByCategory={};lastBarIndex=i;}}
const paddingHeight=4*window.devicePixelRatio;const scale=(this._canvas.height-paddingHeight-this._minBarHeight)/maxBarTime;for(let i=0;i<barTimes.length;++i){for(const categoryName in barHeightByCategory[i]){barHeightByCategory[i][categoryName]*=(barTimes[i]*scale+this._minBarHeight)/barTimes[i];}
this._renderBar(i,barHeightByCategory[i]);}}
_renderBar(index,heightByCategory){const categories=PaintProfilerView.categories();let currentHeight=0;const x=this._barPaddingWidth+index*this._outerBarWidth;for(const categoryName in categories){if(!heightByCategory[categoryName]){continue;}
currentHeight+=heightByCategory[categoryName];const y=this._canvas.height-currentHeight;this._context.fillStyle=categories[categoryName].color;this._context.fillRect(x,y,this._innerBarWidth,heightByCategory[categoryName]);}}
_onWindowChanged(){this.dispatchEventToListeners(Events.WindowChanged);this._updatePieChart();if(this._updateImageTimer){return;}
this._updateImageTimer=setTimeout(this._updateImage.bind(this),100);}
_updatePieChart(){const window=this.selectionWindow();if(!this._profiles||!this._profiles.length||!window){return;}
let totalTime=0;const timeByCategory={};for(let i=window.left;i<window.right;++i){const logEntry=this._log[i];const category=PaintProfilerView._categoryForLogItem(logEntry);timeByCategory[category.color]=timeByCategory[category.color]||0;for(let j=0;j<this._profiles.length;++j){const time=this._profiles[j][logEntry.commandIndex];totalTime+=time;timeByCategory[category.color]+=time;}}
this._pieChart.setTotal(totalTime/this._profiles.length);for(const color in timeByCategory){this._pieChart.addSlice(timeByCategory[color]/this._profiles.length,color);}}
_formatPieChartTime(value){return Number.millisToString(value*1000,true);}
selectionWindow(){if(!this._log){return null;}
const screenLeft=this._selectionWindow.windowLeft*this._canvas.width;const screenRight=this._selectionWindow.windowRight*this._canvas.width;const barLeft=Math.floor(screenLeft/this._outerBarWidth);const barRight=Math.floor((screenRight+this._innerBarWidth-this._barPaddingWidth/2)/this._outerBarWidth);const stepLeft=Number.constrain(barLeft*this._samplesPerBar,0,this._log.length-1);const stepRight=Number.constrain(barRight*this._samplesPerBar,0,this._log.length);return{left:stepLeft,right:stepRight};}
_updateImage(){delete this._updateImageTimer;let left;let right;const window=this.selectionWindow();if(this._profiles&&this._profiles.length&&window){left=this._log[window.left].commandIndex;right=this._log[window.right-1].commandIndex;}
const scale=this._pendingScale;this._snapshot.replay(scale,left,right).then(image=>{if(!image){return;}
this._scale=scale;this._showImageCallback(image);});}
_reset(){if(this._snapshot){this._snapshot.release();}
this._snapshot=null;this._profiles=null;this._selectionWindow.reset();this._selectionWindow.setEnabled(false);}}
export const Events={WindowChanged:Symbol('WindowChanged')};export class PaintProfilerCommandLogView extends UI.ThrottledWidget{constructor(){super();this.setMinimumSize(100,25);this.element.classList.add('overflow-auto');this._treeOutline=new UI.TreeOutlineInShadow();UI.ARIAUtils.setAccessibleName(this._treeOutline.contentElement,ls`Command Log`);this.element.appendChild(this._treeOutline.element);this._log=[];}
setCommandLog(log){this._log=log;this._treeItemCache=new Map();this.updateWindow({left:0,right:this._log.length});}
_appendLogItem(logItem){let treeElement=this._treeItemCache.get(logItem);if(!treeElement){treeElement=new LogTreeElement(this,logItem);this._treeItemCache.set(logItem,treeElement);}else if(treeElement.parent){return;}
this._treeOutline.appendChild(treeElement);}
updateWindow(selectionWindow){this._selectionWindow=selectionWindow;this.update();}
doUpdate(){if(!this._selectionWindow||!this._log.length){this._treeOutline.removeChildren();return Promise.resolve();}
const root=this._treeOutline.rootElement();for(;;){const child=root.firstChild();if(!child||child._logItem.commandIndex>=this._selectionWindow.left){break;}
root.removeChildAtIndex(0);}
for(;;){const child=root.lastChild();if(!child||child._logItem.commandIndex<this._selectionWindow.right){break;}
root.removeChildAtIndex(root.children().length-1);}
for(let i=this._selectionWindow.left,right=this._selectionWindow.right;i<right;++i){this._appendLogItem(this._log[i]);}
return Promise.resolve();}}
export class LogTreeElement extends UI.TreeElement{constructor(ownerView,logItem){super('',!!logItem.params);this._logItem=logItem;this._ownerView=ownerView;this._filled=false;}
onattach(){this._update();}
async onpopulate(){for(const param in this._logItem.params){LogPropertyTreeElement._appendLogPropertyItem(this,param,this._logItem.params[param]);}}
_paramToString(param,name){if(typeof param!=='object'){return typeof param==='string'&&param.length>100?name:JSON.stringify(param);}
let str='';let keyCount=0;for(const key in param){if(++keyCount>4||typeof param[key]==='object'||(typeof param[key]==='string'&&param[key].length>100)){return name;}
if(str){str+=', ';}
str+=param[key];}
return str;}
_paramsToString(params){let str='';for(const key in params){if(str){str+=', ';}
str+=this._paramToString(params[key],key);}
return str;}
_update(){const title=createDocumentFragment();title.createTextChild(this._logItem.method+'('+this._paramsToString(this._logItem.params)+')');this.title=title;}}
export class LogPropertyTreeElement extends UI.TreeElement{constructor(property){super();this._property=property;}
static _appendLogPropertyItem(element,name,value){const treeElement=new LogPropertyTreeElement({name:name,value:value});element.appendChild(treeElement);if(value&&typeof value==='object'){for(const property in value){LogPropertyTreeElement._appendLogPropertyItem(treeElement,property,value[property]);}}}
onattach(){const title=createDocumentFragment();const nameElement=title.createChild('span','name');nameElement.textContent=this._property.name;const separatorElement=title.createChild('span','separator');separatorElement.textContent=': ';if(this._property.value===null||typeof this._property.value!=='object'){const valueElement=title.createChild('span','value');valueElement.textContent=JSON.stringify(this._property.value);valueElement.classList.add('cm-js-'+(this._property.value===null?'null':typeof this._property.value));}
this.title=title;}}
export class PaintProfilerCategory{constructor(name,title,color){this.name=name;this.title=title;this.color=color;}}
self.LayerViewer=self.LayerViewer||{};LayerViewer=LayerViewer||{};LayerViewer.PaintProfilerView=PaintProfilerView;LayerViewer.PaintProfilerView.Events=Events;LayerViewer.PaintProfilerCommandLogView=PaintProfilerCommandLogView;LayerViewer.LogTreeElement=LogTreeElement;LayerViewer.LogPropertyTreeElement=LogPropertyTreeElement;LayerViewer.PaintProfilerCategory=PaintProfilerCategory;export class Layers3DView extends UI.VBox{constructor(layerViewHost){super(true);this.registerRequiredCSS('layer_viewer/layers3DView.css');this.contentElement.classList.add('layers-3d-view');this._failBanner=new UI.VBox();this._failBanner.element.classList.add('full-widget-dimmed-banner');this._failBanner.element.createTextChild(Common.UIString('Layer information is not yet available.'));this._layerViewHost=layerViewHost;this._layerViewHost.registerView(this);this._transformController=new LayerViewer.TransformController(this.contentElement);this._transformController.addEventListener(LayerViewer.TransformController.Events.TransformChanged,this._update,this);this._initToolbar();this._canvasElement=this.contentElement.createChild('canvas');this._canvasElement.tabIndex=0;this._canvasElement.addEventListener('dblclick',this._onDoubleClick.bind(this),false);this._canvasElement.addEventListener('mousedown',this._onMouseDown.bind(this),false);this._canvasElement.addEventListener('mouseup',this._onMouseUp.bind(this),false);this._canvasElement.addEventListener('mouseleave',this._onMouseMove.bind(this),false);this._canvasElement.addEventListener('mousemove',this._onMouseMove.bind(this),false);this._canvasElement.addEventListener('contextmenu',this._onContextMenu.bind(this),false);UI.ARIAUtils.setAccessibleName(this._canvasElement,ls`3D Layers View`);this._lastSelection={};this._layerTree=null;this._textureManager=new LayerTextureManager(this._update.bind(this));this._chromeTextures=[];this._rects=[];this._snapshotLayers=new Map();this._layerViewHost.setLayerSnapshotMap(this._snapshotLayers);this._layerViewHost.showInternalLayersSetting().addChangeListener(this._update,this);}
setLayerTree(layerTree){this._layerTree=layerTree;this._layerTexture=null;delete this._oldTextureScale;if(this._showPaints()){this._textureManager.setLayerTree(layerTree);}
this._update();}
showImageForLayer(layer,imageURL){if(!imageURL){this._layerTexture=null;this._update();return;}
UI.loadImage(imageURL).then(image=>{const texture=image&&LayerTextureManager._createTextureForImage(this._gl,image);this._layerTexture=texture?{layer:layer,texture:texture}:null;this._update();});}
onResize(){this._resizeCanvas();this._update();}
willHide(){this._textureManager.suspend();}
wasShown(){this._textureManager.resume();if(!this._needsUpdate){return;}
this._resizeCanvas();this._update();}
updateLayerSnapshot(layer){this._textureManager.layerNeedsUpdate(layer);}
_setOutline(type,selection){this._lastSelection[type]=selection;this._update();}
hoverObject(selection){this._setOutline(OutlineType.Hovered,selection);}
selectObject(selection){this._setOutline(OutlineType.Hovered,null);this._setOutline(OutlineType.Selected,selection);}
snapshotForSelection(selection){if(selection.type()===LayerViewer.LayerView.Selection.Type.Snapshot){const snapshotWithRect=(selection).snapshot();snapshotWithRect.snapshot.addReference();return(Promise.resolve(snapshotWithRect));}
if(selection.layer()){const promise=selection.layer().snapshots()[0];if(promise){return promise;}}
return(Promise.resolve(null));}
_initGL(canvas){const gl=canvas.getContext('webgl');if(!gl){return null;}
gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA);gl.enable(gl.BLEND);gl.clearColor(0.0,0.0,0.0,0.0);gl.enable(gl.DEPTH_TEST);return gl;}
_createShader(type,script){const shader=this._gl.createShader(type);this._gl.shaderSource(shader,script);this._gl.compileShader(shader);this._gl.attachShader(this._shaderProgram,shader);}
_initShaders(){this._shaderProgram=this._gl.createProgram();this._createShader(this._gl.FRAGMENT_SHADER,FragmentShader);this._createShader(this._gl.VERTEX_SHADER,VertexShader);this._gl.linkProgram(this._shaderProgram);this._gl.useProgram(this._shaderProgram);this._shaderProgram.vertexPositionAttribute=this._gl.getAttribLocation(this._shaderProgram,'aVertexPosition');this._gl.enableVertexAttribArray(this._shaderProgram.vertexPositionAttribute);this._shaderProgram.vertexColorAttribute=this._gl.getAttribLocation(this._shaderProgram,'aVertexColor');this._gl.enableVertexAttribArray(this._shaderProgram.vertexColorAttribute);this._shaderProgram.textureCoordAttribute=this._gl.getAttribLocation(this._shaderProgram,'aTextureCoord');this._gl.enableVertexAttribArray(this._shaderProgram.textureCoordAttribute);this._shaderProgram.pMatrixUniform=this._gl.getUniformLocation(this._shaderProgram,'uPMatrix');this._shaderProgram.samplerUniform=this._gl.getUniformLocation(this._shaderProgram,'uSampler');}
_resizeCanvas(){this._canvasElement.width=this._canvasElement.offsetWidth*window.devicePixelRatio;this._canvasElement.height=this._canvasElement.offsetHeight*window.devicePixelRatio;}
_updateTransformAndConstraints(){const paddingFraction=0.1;const viewport=this._layerTree.viewportSize();const baseWidth=viewport?viewport.width:this._dimensionsForAutoscale.width;const baseHeight=viewport?viewport.height:this._dimensionsForAutoscale.height;const canvasWidth=this._canvasElement.width;const canvasHeight=this._canvasElement.height;const paddingX=canvasWidth*paddingFraction;const paddingY=canvasHeight*paddingFraction;const scaleX=(canvasWidth-2*paddingX)/baseWidth;const scaleY=(canvasHeight-2*paddingY)/baseHeight;const viewScale=Math.min(scaleX,scaleY);const minScaleConstraint=Math.min(baseWidth/this._dimensionsForAutoscale.width,baseHeight/this._dimensionsForAutoscale.width)/2;this._transformController.setScaleConstraints(minScaleConstraint,10/viewScale);const scale=this._transformController.scale();const rotateX=this._transformController.rotateX();const rotateY=this._transformController.rotateY();this._scale=scale*viewScale;const textureScale=Number.constrain(this._scale,0.1,1);if(textureScale!==this._oldTextureScale){this._oldTextureScale=textureScale;this._textureManager.setScale(textureScale);this.dispatchEventToListeners(Events.ScaleChanged,textureScale);}
const scaleAndRotationMatrix=new WebKitCSSMatrix().scale(scale,scale,scale).translate(canvasWidth/2,canvasHeight/2,0).rotate(rotateX,rotateY,0).scale(viewScale,viewScale,viewScale).translate(-baseWidth/2,-baseHeight/2,0);let bounds;for(let i=0;i<this._rects.length;++i){bounds=UI.Geometry.boundsForTransformedPoints(scaleAndRotationMatrix,this._rects[i].vertices,bounds);}
this._transformController.clampOffsets((paddingX-bounds.maxX)/window.devicePixelRatio,(canvasWidth-paddingX-bounds.minX)/window.devicePixelRatio,(paddingY-bounds.maxY)/window.devicePixelRatio,(canvasHeight-paddingY-bounds.minY)/window.devicePixelRatio);const offsetX=this._transformController.offsetX()*window.devicePixelRatio;const offsetY=this._transformController.offsetY()*window.devicePixelRatio;this._projectionMatrix=new WebKitCSSMatrix().translate(offsetX,offsetY,0).multiply(scaleAndRotationMatrix);const glProjectionMatrix=new WebKitCSSMatrix().scale(1,-1,-1).translate(-1,-1,0).scale(2/this._canvasElement.width,2/this._canvasElement.height,1/1000000).multiply(this._projectionMatrix);this._gl.uniformMatrix4fv(this._shaderProgram.pMatrixUniform,false,this._arrayFromMatrix(glProjectionMatrix));}
_arrayFromMatrix(m){return new Float32Array([m.m11,m.m12,m.m13,m.m14,m.m21,m.m22,m.m23,m.m24,m.m31,m.m32,m.m33,m.m34,m.m41,m.m42,m.m43,m.m44]);}
_initWhiteTexture(){this._whiteTexture=this._gl.createTexture();this._gl.bindTexture(this._gl.TEXTURE_2D,this._whiteTexture);const whitePixel=new Uint8Array([255,255,255,255]);this._gl.texImage2D(this._gl.TEXTURE_2D,0,this._gl.RGBA,1,1,0,this._gl.RGBA,this._gl.UNSIGNED_BYTE,whitePixel);}
_initChromeTextures(){function loadChromeTexture(index,url){UI.loadImage(url).then(image=>{this._chromeTextures[index]=image&&LayerTextureManager._createTextureForImage(this._gl,image)||undefined;});}
loadChromeTexture.call(this,ChromeTexture.Left,'Images/chromeLeft.png');loadChromeTexture.call(this,ChromeTexture.Middle,'Images/chromeMiddle.png');loadChromeTexture.call(this,ChromeTexture.Right,'Images/chromeRight.png');}
_initGLIfNecessary(){if(this._gl){return this._gl;}
this._gl=this._initGL(this._canvasElement);if(!this._gl){return null;}
this._initShaders();this._initWhiteTexture();this._initChromeTextures();this._textureManager.setContext(this._gl);return this._gl;}
_calculateDepthsAndVisibility(){this._depthByLayerId={};let depth=0;const showInternalLayers=this._layerViewHost.showInternalLayersSetting().get();const root=showInternalLayers?this._layerTree.root():(this._layerTree.contentRoot()||this._layerTree.root());const queue=[root];this._depthByLayerId[root.id()]=0;this._visibleLayers=new Set();while(queue.length>0){const layer=queue.shift();if(showInternalLayers||layer.drawsContent()){this._visibleLayers.add(layer);}
const children=layer.children();for(let i=0;i<children.length;++i){this._depthByLayerId[children[i].id()]=++depth;queue.push(children[i]);}}
this._maxDepth=depth;}
_depthForLayer(layer){return this._depthByLayerId[layer.id()]*LayerSpacing;}
_calculateScrollRectDepth(layer,index){return this._depthForLayer(layer)+index*ScrollRectSpacing+1;}
_updateDimensionsForAutoscale(layer){this._dimensionsForAutoscale.width=Math.max(layer.width(),this._dimensionsForAutoscale.width);this._dimensionsForAutoscale.height=Math.max(layer.height(),this._dimensionsForAutoscale.height);}
_calculateLayerRect(layer){if(!this._visibleLayers.has(layer)){return;}
const selection=new LayerViewer.LayerView.LayerSelection(layer);const rect=new Rectangle(selection);rect.setVertices(layer.quad(),this._depthForLayer(layer));this._appendRect(rect);this._updateDimensionsForAutoscale(layer);}
_appendRect(rect){const selection=rect.relatedObject;const isSelected=LayerViewer.LayerView.Selection.isEqual(this._lastSelection[OutlineType.Selected],selection);const isHovered=LayerViewer.LayerView.Selection.isEqual(this._lastSelection[OutlineType.Hovered],selection);if(isSelected){rect.borderColor=SelectedBorderColor;}else if(isHovered){rect.borderColor=HoveredBorderColor;const fillColor=rect.fillColor||[255,255,255,1];const maskColor=HoveredImageMaskColor;rect.fillColor=[fillColor[0]*maskColor[0]/255,fillColor[1]*maskColor[1]/255,fillColor[2]*maskColor[2]/255,fillColor[3]*maskColor[3]];}else{rect.borderColor=BorderColor;}
rect.lineWidth=isSelected?SelectedBorderWidth:BorderWidth;this._rects.push(rect);}
_calculateLayerScrollRects(layer){const scrollRects=layer.scrollRects();for(let i=0;i<scrollRects.length;++i){const selection=new LayerViewer.LayerView.ScrollRectSelection(layer,i);const rect=new Rectangle(selection);rect.calculateVerticesFromRect(layer,scrollRects[i].rect,this._calculateScrollRectDepth(layer,i));rect.fillColor=ScrollRectBackgroundColor;this._appendRect(rect);}}
_calculateLayerTileRects(layer){const tiles=this._textureManager.tilesForLayer(layer);for(let i=0;i<tiles.length;++i){const tile=tiles[i];if(!tile.texture){continue;}
const selection=new LayerViewer.LayerView.SnapshotSelection(layer,{rect:tile.rect,snapshot:tile.snapshot});const rect=new Rectangle(selection);if(!this._snapshotLayers.has(layer)){this._snapshotLayers.set(layer,selection);}
rect.calculateVerticesFromRect(layer,tile.rect,this._depthForLayer(layer)+1);rect.texture=tile.texture;this._appendRect(rect);}}
_calculateRects(){this._rects=[];this._snapshotLayers.clear();this._dimensionsForAutoscale={width:0,height:0};this._layerTree.forEachLayer(this._calculateLayerRect.bind(this));if(this._showSlowScrollRectsSetting.get()){this._layerTree.forEachLayer(this._calculateLayerScrollRects.bind(this));}
if(this._layerTexture&&this._visibleLayers.has(this._layerTexture.layer)){const layer=this._layerTexture.layer;const selection=new LayerViewer.LayerView.LayerSelection(layer);const rect=new Rectangle(selection);rect.setVertices(layer.quad(),this._depthForLayer(layer));rect.texture=this._layerTexture.texture;this._appendRect(rect);}else if(this._showPaints()){this._layerTree.forEachLayer(this._calculateLayerTileRects.bind(this));}}
_makeColorsArray(color){let colors=[];const normalizedColor=[color[0]/255,color[1]/255,color[2]/255,color[3]];for(let i=0;i<4;i++){colors=colors.concat(normalizedColor);}
return colors;}
_setVertexAttribute(attribute,array,length){const gl=this._gl;const buffer=gl.createBuffer();gl.bindBuffer(gl.ARRAY_BUFFER,buffer);gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(array),gl.STATIC_DRAW);gl.vertexAttribPointer(attribute,length,gl.FLOAT,false,0,0);}
_drawRectangle(vertices,mode,color,texture){const gl=this._gl;const white=[255,255,255,1];color=color||white;this._setVertexAttribute(this._shaderProgram.vertexPositionAttribute,vertices,3);this._setVertexAttribute(this._shaderProgram.textureCoordAttribute,[0,1,1,1,1,0,0,0],2);this._setVertexAttribute(this._shaderProgram.vertexColorAttribute,this._makeColorsArray(color),color.length);if(texture){gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,texture);gl.uniform1i(this._shaderProgram.samplerUniform,0);}else{gl.bindTexture(gl.TEXTURE_2D,this._whiteTexture);}
const numberOfVertices=vertices.length/3;gl.drawArrays(mode,0,numberOfVertices);}
_drawTexture(vertices,texture,color){this._drawRectangle(vertices,this._gl.TRIANGLE_FAN,color,texture);}
_drawViewportAndChrome(){const viewport=this._layerTree.viewportSize();if(!viewport){return;}
const drawChrome=!Common.moduleSetting('frameViewerHideChromeWindow').get()&&this._chromeTextures.length>=3&&this._chromeTextures.indexOf(undefined)<0;const z=(this._maxDepth+1)*LayerSpacing;const borderWidth=Math.ceil(ViewportBorderWidth*this._scale);let vertices=[viewport.width,0,z,viewport.width,viewport.height,z,0,viewport.height,z,0,0,z];this._gl.lineWidth(borderWidth);this._drawRectangle(vertices,drawChrome?this._gl.LINE_STRIP:this._gl.LINE_LOOP,ViewportBorderColor);if(!drawChrome){return;}
const borderAdjustment=ViewportBorderWidth/2;const viewportWidth=this._layerTree.viewportSize().width+2*borderAdjustment;const chromeHeight=this._chromeTextures[0].image.naturalHeight;const middleFragmentWidth=viewportWidth-this._chromeTextures[0].image.naturalWidth-this._chromeTextures[2].image.naturalWidth;let x=-borderAdjustment;const y=-chromeHeight;for(let i=0;i<this._chromeTextures.length;++i){const width=i===ChromeTexture.Middle?middleFragmentWidth:this._chromeTextures[i].image.naturalWidth;if(width<0||x+width>viewportWidth){break;}
vertices=[x,y,z,x+width,y,z,x+width,y+chromeHeight,z,x,y+chromeHeight,z];this._drawTexture(vertices,(this._chromeTextures[i]));x+=width;}}
_drawViewRect(rect){const vertices=rect.vertices;if(rect.texture){this._drawTexture(vertices,rect.texture,rect.fillColor||undefined);}else if(rect.fillColor){this._drawRectangle(vertices,this._gl.TRIANGLE_FAN,rect.fillColor);}
this._gl.lineWidth(rect.lineWidth);if(rect.borderColor){this._drawRectangle(vertices,this._gl.LINE_LOOP,rect.borderColor);}}
_update(){if(!this.isShowing()){this._needsUpdate=true;return;}
if(!this._layerTree||!this._layerTree.root()){this._failBanner.show(this.contentElement);return;}
const gl=this._initGLIfNecessary();if(!gl){this._failBanner.element.removeChildren();this._failBanner.element.appendChild(this._webglDisabledBanner());this._failBanner.show(this.contentElement);return;}
this._failBanner.detach();this._gl.viewportWidth=this._canvasElement.width;this._gl.viewportHeight=this._canvasElement.height;this._calculateDepthsAndVisibility();this._calculateRects();this._updateTransformAndConstraints();gl.viewport(0,0,gl.viewportWidth,gl.viewportHeight);gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);this._rects.forEach(this._drawViewRect.bind(this));this._drawViewportAndChrome();}
_webglDisabledBanner(){const fragment=this.contentElement.ownerDocument.createDocumentFragment();fragment.createChild('div').textContent=Common.UIString('Can\'t display layers,');fragment.createChild('div').textContent=Common.UIString('WebGL support is disabled in your browser.');fragment.appendChild(UI.formatLocalized('Check %s for possible reasons.',[UI.XLink.create('about:gpu')]));return fragment;}
_selectionFromEventPoint(event){if(!this._layerTree){return null;}
let closestIntersectionPoint=Infinity;let closestObject=null;const projectionMatrix=new WebKitCSSMatrix().scale(1,-1,-1).translate(-1,-1,0).multiply(this._projectionMatrix);const x0=(event.clientX-this._canvasElement.totalOffsetLeft())*window.devicePixelRatio;const y0=-(event.clientY-this._canvasElement.totalOffsetTop())*window.devicePixelRatio;function checkIntersection(rect){if(!rect.relatedObject){return;}
const t=rect.intersectWithLine(projectionMatrix,x0,y0);if(t<closestIntersectionPoint){closestIntersectionPoint=t;closestObject=rect.relatedObject;}}
this._rects.forEach(checkIntersection);return closestObject;}
_createVisibilitySetting(caption,name,value,toolbar){const setting=Common.settings.createSetting(name,value);setting.setTitle(Common.UIString(caption));setting.addChangeListener(this._update,this);toolbar.appendToolbarItem(new UI.ToolbarSettingCheckbox(setting));return setting;}
_initToolbar(){this._panelToolbar=this._transformController.toolbar();this.contentElement.appendChild(this._panelToolbar.element);this._showSlowScrollRectsSetting=this._createVisibilitySetting(ls`Slow scroll rects`,'frameViewerShowSlowScrollRects',true,this._panelToolbar);this._showPaintsSetting=this._createVisibilitySetting(ls`Paints`,'frameViewerShowPaints',true,this._panelToolbar);this._showPaintsSetting.addChangeListener(this._updatePaints,this);Common.moduleSetting('frameViewerHideChromeWindow').addChangeListener(this._update,this);}
_onContextMenu(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Reset View'),this._transformController.resetAndNotify.bind(this._transformController),false);const selection=this._selectionFromEventPoint(event);if(selection&&selection.type()===LayerViewer.LayerView.Selection.Type.Snapshot){contextMenu.defaultSection().appendItem(Common.UIString('Show Paint Profiler'),this.dispatchEventToListeners.bind(this,Events.PaintProfilerRequested,selection),false);}
this._layerViewHost.showContextMenu(contextMenu,selection);}
_onMouseMove(event){if(event.which){return;}
this._layerViewHost.hoverObject(this._selectionFromEventPoint(event));}
_onMouseDown(event){this._mouseDownX=event.clientX;this._mouseDownY=event.clientY;}
_onMouseUp(event){const maxDistanceInPixels=6;if(this._mouseDownX&&Math.abs(event.clientX-this._mouseDownX)<maxDistanceInPixels&&Math.abs(event.clientY-this._mouseDownY)<maxDistanceInPixels){this._layerViewHost.selectObject(this._selectionFromEventPoint(event));}
delete this._mouseDownX;delete this._mouseDownY;}
_onDoubleClick(event){const selection=this._selectionFromEventPoint(event);if(selection&&(selection.type()===LayerViewer.LayerView.Selection.Type.Snapshot||selection.layer())){this.dispatchEventToListeners(Events.PaintProfilerRequested,selection);}
event.stopPropagation();}
_updatePaints(){if(this._showPaints()){this._textureManager.setLayerTree(this._layerTree);this._textureManager.forceUpdate();}else{this._textureManager.reset();}
this._update();}
_showPaints(){return this._showPaintsSetting.get();}}
export const OutlineType={Hovered:'hovered',Selected:'selected'};export const Events={PaintProfilerRequested:Symbol('PaintProfilerRequested'),ScaleChanged:Symbol('ScaleChanged')};export const ChromeTexture={Left:0,Middle:1,Right:2};export const ScrollRectTitles={RepaintsOnScroll:Common.UIString('repaints on scroll'),TouchEventHandler:Common.UIString('touch event listener'),WheelEventHandler:Common.UIString('mousewheel event listener')};export const FragmentShader=''+'precision mediump float;\n'+'varying vec4 vColor;\n'+'varying vec2 vTextureCoord;\n'+'uniform sampler2D uSampler;\n'+'void main(void)\n'+'{\n'+'    gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)) * vColor;\n'+'}';export const VertexShader=''+'attribute vec3 aVertexPosition;\n'+'attribute vec2 aTextureCoord;\n'+'attribute vec4 aVertexColor;\n'+'uniform mat4 uPMatrix;\n'+'varying vec2 vTextureCoord;\n'+'varying vec4 vColor;\n'+'void main(void)\n'+'{\n'+'gl_Position = uPMatrix * vec4(aVertexPosition, 1.0);\n'+'vColor = aVertexColor;\n'+'vTextureCoord = aTextureCoord;\n'+'}';export const HoveredBorderColor=[0,0,255,1];export const SelectedBorderColor=[0,255,0,1];export const BorderColor=[0,0,0,1];export const ViewportBorderColor=[160,160,160,1];export const ScrollRectBackgroundColor=[178,100,100,0.6];export const HoveredImageMaskColor=[200,200,255,1];export const BorderWidth=1;export const SelectedBorderWidth=2;export const ViewportBorderWidth=3;export const LayerSpacing=20;export const ScrollRectSpacing=4;export class LayerTextureManager{constructor(textureUpdatedCallback){this._textureUpdatedCallback=textureUpdatedCallback;this._throttler=new Common.Throttler(0);this._scale=0;this._active=false;this.reset();}
static _createTextureForImage(gl,image){const texture=gl.createTexture();texture.image=image;gl.bindTexture(gl.TEXTURE_2D,texture);gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,1);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,texture.image);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);gl.bindTexture(gl.TEXTURE_2D,null);return texture;}
reset(){if(this._tilesByLayer){this.setLayerTree(null);}
this._tilesByLayer=new Map();this._queue=[];}
setContext(glContext){this._gl=glContext;if(this._scale){this._updateTextures();}}
suspend(){this._active=false;}
resume(){this._active=true;if(this._queue.length){this._update();}}
setLayerTree(layerTree){const newLayers=new Set();const oldLayers=Array.from(this._tilesByLayer.keys());if(layerTree){layerTree.forEachLayer(layer=>{if(!layer.drawsContent()){return;}
newLayers.add(layer);if(!this._tilesByLayer.has(layer)){this._tilesByLayer.set(layer,[]);this.layerNeedsUpdate(layer);}});}
if(!oldLayers.length){this.forceUpdate();}
for(const layer of oldLayers){if(newLayers.has(layer)){continue;}
this._tilesByLayer.get(layer).forEach(tile=>tile.dispose());this._tilesByLayer.delete(layer);}}
_setSnapshotsForLayer(layer,snapshots){const oldSnapshotsToTiles=new Map((this._tilesByLayer.get(layer)||[]).map(tile=>[tile.snapshot,tile]));const newTiles=[];const reusedTiles=[];for(const snapshot of snapshots){const oldTile=oldSnapshotsToTiles.get(snapshot);if(oldTile){reusedTiles.push(oldTile);oldSnapshotsToTiles.delete(oldTile);}else{newTiles.push(new Tile(snapshot));}}
this._tilesByLayer.set(layer,reusedTiles.concat(newTiles));for(const tile of oldSnapshotsToTiles.values()){tile.dispose();}
if(!this._gl||!this._scale){return Promise.resolve();}
return Promise.all(newTiles.map(tile=>tile.update(this._gl,this._scale))).then(this._textureUpdatedCallback);}
setScale(scale){if(this._scale&&this._scale>=scale){return;}
this._scale=scale;this._updateTextures();}
tilesForLayer(layer){return this._tilesByLayer.get(layer)||[];}
layerNeedsUpdate(layer){if(this._queue.indexOf(layer)<0){this._queue.push(layer);}
if(this._active){this._throttler.schedule(this._update.bind(this));}}
forceUpdate(){this._queue.forEach(layer=>this._updateLayer(layer));this._queue=[];this._update();}
_update(){const layer=this._queue.shift();if(!layer){return Promise.resolve();}
if(this._queue.length){this._throttler.schedule(this._update.bind(this));}
return this._updateLayer(layer);}
_updateLayer(layer){return Promise.all(layer.snapshots()).then(snapshots=>this._setSnapshotsForLayer(layer,snapshots.filter(snapshot=>!!snapshot)));}
_updateTextures(){if(!this._gl){return;}
if(!this._scale){return;}
for(const tiles of this._tilesByLayer.values()){for(const tile of tiles){const promise=tile.updateScale(this._gl,this._scale);if(promise){promise.then(this._textureUpdatedCallback);}}}}}
export class Rectangle{constructor(relatedObject){this.relatedObject=relatedObject;this.lineWidth=1;this.borderColor=null;this.fillColor=null;this.texture=null;}
setVertices(quad,z){this.vertices=[quad[0],quad[1],z,quad[2],quad[3],z,quad[4],quad[5],z,quad[6],quad[7],z];}
_calculatePointOnQuad(quad,ratioX,ratioY){const x0=quad[0];const y0=quad[1];const x1=quad[2];const y1=quad[3];const x2=quad[4];const y2=quad[5];const x3=quad[6];const y3=quad[7];const firstSidePointX=x0+ratioX*(x1-x0);const firstSidePointY=y0+ratioX*(y1-y0);const thirdSidePointX=x3+ratioX*(x2-x3);const thirdSidePointY=y3+ratioX*(y2-y3);const x=firstSidePointX+ratioY*(thirdSidePointX-firstSidePointX);const y=firstSidePointY+ratioY*(thirdSidePointY-firstSidePointY);return[x,y];}
calculateVerticesFromRect(layer,rect,z){const quad=layer.quad();const rx1=rect.x/layer.width();const rx2=(rect.x+rect.width)/layer.width();const ry1=rect.y/layer.height();const ry2=(rect.y+rect.height)/layer.height();const rectQuad=this._calculatePointOnQuad(quad,rx1,ry1).concat(this._calculatePointOnQuad(quad,rx2,ry1)).concat(this._calculatePointOnQuad(quad,rx2,ry2)).concat(this._calculatePointOnQuad(quad,rx1,ry2));this.setVertices(rectQuad,z);}
intersectWithLine(matrix,x0,y0){let i;const points=[];for(i=0;i<4;++i){points[i]=UI.Geometry.multiplyVectorByMatrixAndNormalize(new UI.Geometry.Vector(this.vertices[i*3],this.vertices[i*3+1],this.vertices[i*3+2]),matrix);}
const normal=UI.Geometry.crossProduct(UI.Geometry.subtract(points[1],points[0]),UI.Geometry.subtract(points[2],points[1]));const A=normal.x;const B=normal.y;const C=normal.z;const D=-(A*points[0].x+B*points[0].y+C*points[0].z);const t=-(D+A*x0+B*y0)/C;const pt=new UI.Geometry.Vector(x0,y0,t);const tVects=points.map(UI.Geometry.subtract.bind(null,pt));for(i=0;i<tVects.length;++i){const product=UI.Geometry.scalarProduct(normal,UI.Geometry.crossProduct(tVects[i],tVects[(i+1)%tVects.length]));if(product<0){return undefined;}}
return t;}}
export class Tile{constructor(snapshotWithRect){this.snapshot=snapshotWithRect.snapshot;this.rect=snapshotWithRect.rect;this.scale=0;this.texture=null;}
dispose(){this.snapshot.release();if(this.texture){this._gl.deleteTexture(this.texture);this.texture=null;}}
updateScale(glContext,scale){if(this.texture&&this.scale>=scale){return null;}
return this.update(glContext,scale);}
async update(glContext,scale){this._gl=glContext;this.scale=scale;const imageURL=await this.snapshot.replay(scale);const image=imageURL?await UI.loadImage(imageURL):null;this.texture=image?LayerTextureManager._createTextureForImage(glContext,image):null;}}
self.LayerViewer=self.LayerViewer||{};LayerViewer=LayerViewer||{};LayerViewer.Layers3DView=Layers3DView;LayerViewer.Layers3DView.LayerStyle;LayerViewer.Layers3DView.OutlineType=OutlineType;LayerViewer.Layers3DView.Events=Events;LayerViewer.Layers3DView.ChromeTexture=ChromeTexture;LayerViewer.Layers3DView.ScrollRectTitles=ScrollRectTitles;LayerViewer.Layers3DView.FragmentShader=FragmentShader;LayerViewer.Layers3DView.VertexShader=VertexShader;LayerViewer.Layers3DView.HoveredBorderColor=HoveredBorderColor;LayerViewer.Layers3DView.SelectedBorderColor=SelectedBorderColor;LayerViewer.Layers3DView.BorderColor=BorderColor;LayerViewer.Layers3DView.ViewportBorderColor=ViewportBorderColor;LayerViewer.Layers3DView.ScrollRectBackgroundColor=ScrollRectBackgroundColor;LayerViewer.Layers3DView.HoveredImageMaskColor=HoveredImageMaskColor;LayerViewer.Layers3DView.BorderWidth=BorderWidth;LayerViewer.Layers3DView.SelectedBorderWidth=SelectedBorderWidth;LayerViewer.Layers3DView.ViewportBorderWidth=ViewportBorderWidth;LayerViewer.Layers3DView.LayerSpacing=LayerSpacing;LayerViewer.Layers3DView.ScrollRectSpacing=ScrollRectSpacing;LayerViewer.Layers3DView.Rectangle=Rectangle;LayerViewer.LayerTextureManager=LayerTextureManager;LayerViewer.LayerTextureManager.Tile=Tile;export class LayerView{hoverObject(selection){}
selectObject(selection){}
setLayerTree(layerTree){}}
export class Selection{constructor(type,layer){this._type=type;this._layer=layer;}
static isEqual(a,b){return a&&b?a._isEqual(b):a===b;}
type(){return this._type;}
layer(){return this._layer;}
_isEqual(other){return false;}}
export const Type={Layer:Symbol('Layer'),ScrollRect:Symbol('ScrollRect'),Snapshot:Symbol('Snapshot')};export class LayerSelection extends Selection{constructor(layer){console.assert(layer,'LayerSelection with empty layer');super(Type.Layer,layer);}
_isEqual(other){return other._type===Type.Layer&&other.layer().id()===this.layer().id();}}
export class ScrollRectSelection extends Selection{constructor(layer,scrollRectIndex){super(Type.ScrollRect,layer);this.scrollRectIndex=scrollRectIndex;}
_isEqual(other){return other._type===Type.ScrollRect&&this.layer().id()===other.layer().id()&&this.scrollRectIndex===other.scrollRectIndex;}}
export class SnapshotSelection extends Selection{constructor(layer,snapshot){super(Type.Snapshot,layer);this._snapshot=snapshot;}
_isEqual(other){return other._type===Type.Snapshot&&this.layer().id()===other.layer().id()&&this._snapshot===other._snapshot;}
snapshot(){return this._snapshot;}}
export class LayerViewHost{constructor(){this._views=[];this._selectedObject=null;this._hoveredObject=null;this._showInternalLayersSetting=Common.settings.createSetting('layersShowInternalLayers',false);}
registerView(layerView){this._views.push(layerView);}
setLayerSnapshotMap(snapshotLayers){this._snapshotLayers=snapshotLayers;}
getLayerSnapshotMap(){return this._snapshotLayers;}
setLayerTree(layerTree){this._target=layerTree.target();const selectedLayer=this._selectedObject&&this._selectedObject.layer();if(selectedLayer&&(!layerTree||!layerTree.layerById(selectedLayer.id()))){this.selectObject(null);}
const hoveredLayer=this._hoveredObject&&this._hoveredObject.layer();if(hoveredLayer&&(!layerTree||!layerTree.layerById(hoveredLayer.id()))){this.hoverObject(null);}
for(const view of this._views){view.setLayerTree(layerTree);}}
hoverObject(selection){if(Selection.isEqual(this._hoveredObject,selection)){return;}
this._hoveredObject=selection;const layer=selection&&selection.layer();this._toggleNodeHighlight(layer?layer.nodeForSelfOrAncestor():null);for(const view of this._views){view.hoverObject(selection);}}
selectObject(selection){if(Selection.isEqual(this._selectedObject,selection)){return;}
this._selectedObject=selection;for(const view of this._views){view.selectObject(selection);}}
selection(){return this._selectedObject;}
showContextMenu(contextMenu,selection){contextMenu.defaultSection().appendCheckboxItem(Common.UIString('Show internal layers'),this._toggleShowInternalLayers.bind(this),this._showInternalLayersSetting.get());const node=selection&&selection.layer()&&selection.layer().nodeForSelfOrAncestor();if(node){contextMenu.appendApplicableItems(node);}
contextMenu.show();}
showInternalLayersSetting(){return this._showInternalLayersSetting;}
_toggleShowInternalLayers(){this._showInternalLayersSetting.set(!this._showInternalLayersSetting.get());}
_toggleNodeHighlight(node){if(node){node.highlightForTwoSeconds();return;}
SDK.OverlayModel.hideDOMNodeHighlight();}}
self.LayerViewer=self.LayerViewer||{};LayerViewer=LayerViewer||{};LayerViewer.LayerView=LayerView;LayerViewer.LayerView.Selection=Selection;LayerViewer.LayerView.Selection.Type=Type;LayerViewer.LayerView.LayerSelection=LayerSelection;LayerViewer.LayerView.ScrollRectSelection=ScrollRectSelection;LayerViewer.LayerView.SnapshotSelection=SnapshotSelection;LayerViewer.LayerViewHost=LayerViewHost;const _symbol=Symbol('layer');export class LayerTreeOutline extends Common.Object{constructor(layerViewHost){super();this._layerViewHost=layerViewHost;this._layerViewHost.registerView(this);this._treeOutline=new UI.TreeOutlineInShadow();this._treeOutline.element.classList.add('layer-tree','overflow-auto');this._treeOutline.element.addEventListener('mousemove',this._onMouseMove.bind(this),false);this._treeOutline.element.addEventListener('mouseout',this._onMouseMove.bind(this),false);this._treeOutline.element.addEventListener('contextmenu',this._onContextMenu.bind(this),true);UI.ARIAUtils.setAccessibleName(this._treeOutline.contentElement,ls`Layers Tree Pane`);this._lastHoveredNode=null;this.element=this._treeOutline.element;this._layerViewHost.showInternalLayersSetting().addChangeListener(this._update,this);}
focus(){this._treeOutline.focus();}
selectObject(selection){this.hoverObject(null);const layer=selection&&selection.layer();const node=layer&&layer[_symbol];if(node){node.revealAndSelect(true);}else if(this._treeOutline.selectedTreeElement){this._treeOutline.selectedTreeElement.deselect();}}
hoverObject(selection){const layer=selection&&selection.layer();const node=layer&&layer[_symbol];if(node===this._lastHoveredNode){return;}
if(this._lastHoveredNode){this._lastHoveredNode.setHovered(false);}
if(node){node.setHovered(true);}
this._lastHoveredNode=node;}
setLayerTree(layerTree){this._layerTree=layerTree;this._update();}
_update(){const showInternalLayers=this._layerViewHost.showInternalLayersSetting().get();const seenLayers=new Map();let root=null;if(this._layerTree){if(!showInternalLayers){root=this._layerTree.contentRoot();}
if(!root){root=this._layerTree.root();}}
function updateLayer(layer){if(!layer.drawsContent()&&!showInternalLayers){return;}
if(seenLayers.get(layer)){console.assert(false,'Duplicate layer: '+layer.id());}
seenLayers.set(layer,true);let node=layer[_symbol];let parentLayer=layer.parent();while(parentLayer&&parentLayer!==root&&!parentLayer.drawsContent()&&!showInternalLayers){parentLayer=parentLayer.parent();}
const parent=layer===root?this._treeOutline.rootElement():parentLayer[_symbol];if(!parent){console.assert(false,'Parent is not in the tree');return;}
if(!node){node=new LayerTreeElement(this,layer);parent.appendChild(node);if(!layer.drawsContent()){node.expand();}}else{if(node.parent!==parent){const oldSelection=this._treeOutline.selectedTreeElement;if(node.parent){node.parent.removeChild(node);}
parent.appendChild(node);if(oldSelection!==this._treeOutline.selectedTreeElement){oldSelection.select();}}
node._update();}}
if(root){this._layerTree.forEachLayer(updateLayer.bind(this),root);}
const rootElement=this._treeOutline.rootElement();for(let node=rootElement.firstChild();node&&!node.root;){if(seenLayers.get(node._layer)){node=node.traverseNextTreeElement(false);}else{const nextNode=node.nextSibling||node.parent;node.parent.removeChild(node);if(node===this._lastHoveredNode){this._lastHoveredNode=null;}
node=nextNode;}}
if(!this._treeOutline.selectedTreeElement){const elementToSelect=this._layerTree.contentRoot()||this._layerTree.root();if(elementToSelect){elementToSelect[_symbol].revealAndSelect(true);}}}
_onMouseMove(event){const node=this._treeOutline.treeElementFromEvent(event);if(node===this._lastHoveredNode){return;}
this._layerViewHost.hoverObject(this._selectionForNode(node));}
_selectedNodeChanged(node){this._layerViewHost.selectObject(this._selectionForNode(node));}
_onContextMenu(event){const selection=this._selectionForNode(this._treeOutline.treeElementFromEvent(event));const contextMenu=new UI.ContextMenu(event);const layer=selection&&selection.layer();if(layer){this._layerSnapshotMap=this._layerViewHost.getLayerSnapshotMap();if(this._layerSnapshotMap.has(layer)){contextMenu.defaultSection().appendItem(ls`Show Paint Profiler`,this.dispatchEventToListeners.bind(this,Events.PaintProfilerRequested,selection),false);}}
this._layerViewHost.showContextMenu(contextMenu,selection);}
_selectionForNode(node){return node&&node._layer?new LayerViewer.LayerView.LayerSelection(node._layer):null;}}
export const Events={PaintProfilerRequested:Symbol('PaintProfilerRequested')};export class LayerTreeElement extends UI.TreeElement{constructor(tree,layer){super();this._treeOutline=tree;this._layer=layer;this._layer[_symbol]=this;this._update();}
_update(){const node=this._layer.nodeForSelfOrAncestor();const title=createDocumentFragment();title.createTextChild(node?node.simpleSelector():'#'+this._layer.id());const details=title.createChild('span','dimmed');details.textContent=Common.UIString(' (%d × %d)',this._layer.width(),this._layer.height());this.title=title;}
onselect(){this._treeOutline._selectedNodeChanged(this);return false;}
setHovered(hovered){this.listItemElement.classList.toggle('hovered',hovered);}}
self.LayerViewer=self.LayerViewer||{};LayerViewer=LayerViewer||{};LayerViewer.LayerTreeOutline=LayerTreeOutline;LayerViewer.LayerTreeOutline.Events=Events;LayerViewer.LayerTreeElement=LayerTreeElement;LayerViewer.LayerTreeElement._symbol=_symbol;export class LayerDetailsView extends UI.Widget{constructor(layerViewHost){super(true);this.registerRequiredCSS('layer_viewer/layerDetailsView.css');this._layerViewHost=layerViewHost;this._layerViewHost.registerView(this);this._emptyWidget=new UI.EmptyWidget(Common.UIString('Select a layer to see its details'));this._layerSnapshotMap=this._layerViewHost.getLayerSnapshotMap();this._buildContent();}
hoverObject(selection){}
selectObject(selection){this._selection=selection;if(this.isShowing()){this.update();}}
setLayerTree(layerTree){}
wasShown(){super.wasShown();this.update();}
_onScrollRectClicked(index,event){if(event.which!==1){return;}
this._layerViewHost.selectObject(new LayerViewer.LayerView.ScrollRectSelection(this._selection.layer(),index));}
_invokeProfilerLink(){const snapshotSelection=this._selection.type()===LayerViewer.LayerView.Selection.Type.Snapshot?this._selection:this._layerSnapshotMap.get(this._selection.layer());if(snapshotSelection){this.dispatchEventToListeners(Events.PaintProfilerRequested,snapshotSelection);}}
_createScrollRectElement(scrollRect,index){if(index){this._scrollRectsCell.createTextChild(', ');}
const element=this._scrollRectsCell.createChild('span','scroll-rect');if(this._selection.scrollRectIndex===index){element.classList.add('active');}
element.textContent=Common.UIString('%s %d × %d (at %d, %d)',_slowScrollRectNames.get(scrollRect.type),scrollRect.rect.width,scrollRect.rect.height,scrollRect.rect.x,scrollRect.rect.y);element.addEventListener('click',this._onScrollRectClicked.bind(this,index),false);}
_formatStickyAncestorLayer(title,layer){if(!layer){return'';}
const node=layer.nodeForSelfOrAncestor();const name=node?node.simpleSelector():Common.UIString('<unnamed>');return Common.UIString('%s: %s (%s)',title,name,layer.id());}
_createStickyAncestorChild(title,layer){if(!layer){return;}
this._stickyPositionConstraintCell.createTextChild(', ');const child=this._stickyPositionConstraintCell.createChild('span');child.textContent=this._formatStickyAncestorLayer(title,layer);}
_populateStickyPositionConstraintCell(constraint){this._stickyPositionConstraintCell.removeChildren();if(!constraint){return;}
const stickyBoxRect=constraint.stickyBoxRect();const stickyBoxRectElement=this._stickyPositionConstraintCell.createChild('span');stickyBoxRectElement.textContent=Common.UIString('Sticky Box %d × %d (at %d, %d)',stickyBoxRect.width,stickyBoxRect.height,stickyBoxRect.x,stickyBoxRect.y);this._stickyPositionConstraintCell.createTextChild(', ');const containingBlockRect=constraint.containingBlockRect();const containingBlockRectElement=this._stickyPositionConstraintCell.createChild('span');containingBlockRectElement.textContent=Common.UIString('Containing Block %d × %d (at %d, %d)',containingBlockRect.width,containingBlockRect.height,containingBlockRect.x,containingBlockRect.y);this._createStickyAncestorChild(Common.UIString('Nearest Layer Shifting Sticky Box'),constraint.nearestLayerShiftingStickyBox());this._createStickyAncestorChild(Common.UIString('Nearest Layer Shifting Containing Block'),constraint.nearestLayerShiftingContainingBlock());}
update(){const layer=this._selection&&this._selection.layer();if(!layer){this._tableElement.remove();this._paintProfilerLink.remove();this._emptyWidget.show(this.contentElement);return;}
this._emptyWidget.detach();this.contentElement.appendChild(this._tableElement);this.contentElement.appendChild(this._paintProfilerLink);this._sizeCell.textContent=Common.UIString('%d × %d (at %d,%d)',layer.width(),layer.height(),layer.offsetX(),layer.offsetY());this._paintCountCell.parentElement.classList.toggle('hidden',!layer.paintCount());this._paintCountCell.textContent=layer.paintCount();this._memoryEstimateCell.textContent=Number.bytesToString(layer.gpuMemoryUsage());layer.requestCompositingReasons().then(this._updateCompositingReasons.bind(this));this._scrollRectsCell.removeChildren();layer.scrollRects().forEach(this._createScrollRectElement.bind(this));this._populateStickyPositionConstraintCell(layer.stickyPositionConstraint());const snapshot=this._selection.type()===LayerViewer.LayerView.Selection.Type.Snapshot?(this._selection).snapshot():null;this._paintProfilerLink.classList.toggle('hidden',!(this._layerSnapshotMap.has(layer)||snapshot));}
_buildContent(){this._tableElement=this.contentElement.createChild('table');this._tbodyElement=this._tableElement.createChild('tbody');this._sizeCell=this._createRow(Common.UIString('Size'));this._compositingReasonsCell=this._createRow(Common.UIString('Compositing Reasons'));this._memoryEstimateCell=this._createRow(Common.UIString('Memory estimate'));this._paintCountCell=this._createRow(Common.UIString('Paint count'));this._scrollRectsCell=this._createRow(Common.UIString('Slow scroll regions'));this._stickyPositionConstraintCell=this._createRow(Common.UIString('Sticky position constraint'));this._paintProfilerLink=this.contentElement.createChild('span','hidden devtools-link link-margin');UI.ARIAUtils.markAsLink(this._paintProfilerLink);this._paintProfilerLink.textContent=ls`Paint Profiler`;this._paintProfilerLink.tabIndex=0;this._paintProfilerLink.addEventListener('click',e=>{e.consume(true);this._invokeProfilerLink();});this._paintProfilerLink.addEventListener('keydown',event=>{if(isEnterKey(event)){event.consume();this._invokeProfilerLink();}});}
_createRow(title){const tr=this._tbodyElement.createChild('tr');const titleCell=tr.createChild('td');titleCell.textContent=title;return tr.createChild('td');}
_updateCompositingReasons(compositingReasons){if(!compositingReasons||!compositingReasons.length){this._compositingReasonsCell.textContent='n/a';return;}
this._compositingReasonsCell.removeChildren();const list=this._compositingReasonsCell.createChild('ul');for(let i=0;i<compositingReasons.length;++i){let text=compositingReasons[i];if(/\s.*[^.]$/.test(text)){text+='.';}
list.createChild('li').textContent=text;}}}
export const Events={PaintProfilerRequested:Symbol('PaintProfilerRequested')};export const _slowScrollRectNames=new Map([[SDK.Layer.ScrollRectType.NonFastScrollable,Common.UIString('Non fast scrollable')],[SDK.Layer.ScrollRectType.TouchEventHandler,Common.UIString('Touch event handler')],[SDK.Layer.ScrollRectType.WheelEventHandler,Common.UIString('Wheel event handler')],[SDK.Layer.ScrollRectType.RepaintsOnScroll,Common.UIString('Repaints on scroll')],[SDK.Layer.ScrollRectType.MainThreadScrollingReason,Common.UIString('Main thread scrolling reason')]]);self.LayerViewer=self.LayerViewer||{};LayerViewer=LayerViewer||{};LayerViewer.LayerDetailsView=LayerDetailsView;LayerViewer.LayerDetailsView.Events=Events;LayerViewer.LayerDetailsView._slowScrollRectNames=_slowScrollRectNames;export default{}import'../cm/cm.js';import'./css.js';import'./javascript.js';import'./xml.js';import'./htmlmixed.js';import'./htmlembedded.js';import'../cm_headless/cm_headless.js';import'./css.js';import'./javascript.js';import'./xml.js';import'./htmlmixed.js';import'./htmlembedded.js';(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("css",function(config,parserConfig){var inline=parserConfig.inline
if(!parserConfig.propertyKeywords)parserConfig=CodeMirror.resolveMode("text/css");var indentUnit=config.indentUnit,tokenHooks=parserConfig.tokenHooks,documentTypes=parserConfig.documentTypes||{},mediaTypes=parserConfig.mediaTypes||{},mediaFeatures=parserConfig.mediaFeatures||{},mediaValueKeywords=parserConfig.mediaValueKeywords||{},propertyKeywords=parserConfig.propertyKeywords||{},nonStandardPropertyKeywords=parserConfig.nonStandardPropertyKeywords||{},fontProperties=parserConfig.fontProperties||{},counterDescriptors=parserConfig.counterDescriptors||{},colorKeywords=parserConfig.colorKeywords||{},valueKeywords=parserConfig.valueKeywords||{},allowNested=parserConfig.allowNested,lineComment=parserConfig.lineComment,supportsAtComponent=parserConfig.supportsAtComponent===true;var type,override;function ret(style,tp){type=tp;return style;}
function tokenBase(stream,state){var ch=stream.next();if(tokenHooks[ch]){var result=tokenHooks[ch](stream,state);if(result!==false)return result;}
if(ch=="@"){stream.eatWhile(/[\w\\\-]/);return ret("def",stream.current());}else if(ch=="="||(ch=="~"||ch=="|")&&stream.eat("=")){return ret(null,"compare");}else if(ch=="\""||ch=="'"){state.tokenize=tokenString(ch);return state.tokenize(stream,state);}else if(ch=="#"){stream.eatWhile(/[\w\\\-]/);return ret("atom","hash");}else if(ch=="!"){stream.match(/^\s*\w*/);return ret("keyword","important");}else if(/\d/.test(ch)||ch=="."&&stream.eat(/\d/)){stream.eatWhile(/[\w.%]/);return ret("number","unit");}else if(ch==="-"){if(/[\d.]/.test(stream.peek())){stream.eatWhile(/[\w.%]/);return ret("number","unit");}else if(stream.match(/^-[\w\\\-]*/)){stream.eatWhile(/[\w\\\-]/);if(stream.match(/^\s*:/,false))
return ret("variable-2","variable-definition");return ret("variable-2","variable");}else if(stream.match(/^\w+-/)){return ret("meta","meta");}}else if(/[,+>*\/]/.test(ch)){return ret(null,"select-op");}else if(ch=="."&&stream.match(/^-?[_a-z][_a-z0-9-]*/i)){return ret("qualifier","qualifier");}else if(/[:;{}\[\]\(\)]/.test(ch)){return ret(null,ch);}else if(stream.match(/[\w-.]+(?=\()/)){if(/^(url(-prefix)?|domain|regexp)$/.test(stream.current().toLowerCase())){state.tokenize=tokenParenthesized;}
return ret("variable callee","variable");}else if(/[\w\\\-]/.test(ch)){stream.eatWhile(/[\w\\\-]/);return ret("property","word");}else{return ret(null,null);}}
function tokenString(quote){return function(stream,state){var escaped=false,ch;while((ch=stream.next())!=null){if(ch==quote&&!escaped){if(quote==")")stream.backUp(1);break;}
escaped=!escaped&&ch=="\\";}
if(ch==quote||!escaped&&quote!=")")state.tokenize=null;return ret("string","string");};}
function tokenParenthesized(stream,state){stream.next();if(!stream.match(/\s*[\"\')]/,false))
state.tokenize=tokenString(")");else
state.tokenize=null;return ret(null,"(");}
function Context(type,indent,prev){this.type=type;this.indent=indent;this.prev=prev;}
function pushContext(state,stream,type,indent){state.context=new Context(type,stream.indentation()+(indent===false?0:indentUnit),state.context);return type;}
function popContext(state){if(state.context.prev)
state.context=state.context.prev;return state.context.type;}
function pass(type,stream,state){return states[state.context.type](type,stream,state);}
function popAndPass(type,stream,state,n){for(var i=n||1;i>0;i--)
state.context=state.context.prev;return pass(type,stream,state);}
function wordAsValue(stream){var word=stream.current().toLowerCase();if(valueKeywords.hasOwnProperty(word))
override="atom";else if(colorKeywords.hasOwnProperty(word))
override="keyword";else
override="variable";}
var states={};states.top=function(type,stream,state){if(type=="{"){return pushContext(state,stream,"block");}else if(type=="}"&&state.context.prev){return popContext(state);}else if(supportsAtComponent&&/@component/i.test(type)){return pushContext(state,stream,"atComponentBlock");}else if(/^@(-moz-)?document$/i.test(type)){return pushContext(state,stream,"documentTypes");}else if(/^@(media|supports|(-moz-)?document|import)$/i.test(type)){return pushContext(state,stream,"atBlock");}else if(/^@(font-face|counter-style)/i.test(type)){state.stateArg=type;return"restricted_atBlock_before";}else if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)){return"keyframes";}else if(type&&type.charAt(0)=="@"){return pushContext(state,stream,"at");}else if(type=="hash"){override="builtin";}else if(type=="word"){override="tag";}else if(type=="variable-definition"){return"maybeprop";}else if(type=="interpolation"){return pushContext(state,stream,"interpolation");}else if(type==":"){return"pseudo";}else if(allowNested&&type=="("){return pushContext(state,stream,"parens");}
return state.context.type;};states.block=function(type,stream,state){if(type=="word"){var word=stream.current().toLowerCase();if(propertyKeywords.hasOwnProperty(word)){override="property";return"maybeprop";}else if(nonStandardPropertyKeywords.hasOwnProperty(word)){override="string-2";return"maybeprop";}else if(allowNested){override=stream.match(/^\s*:(?:\s|$)/,false)?"property":"tag";return"block";}else{override+=" error";return"maybeprop";}}else if(type=="meta"){return"block";}else if(!allowNested&&(type=="hash"||type=="qualifier")){override="error";return"block";}else{return states.top(type,stream,state);}};states.maybeprop=function(type,stream,state){if(type==":")return pushContext(state,stream,"prop");return pass(type,stream,state);};states.prop=function(type,stream,state){if(type==";")return popContext(state);if(type=="{"&&allowNested)return pushContext(state,stream,"propBlock");if(type=="}"||type=="{")return popAndPass(type,stream,state);if(type=="(")return pushContext(state,stream,"parens");if(type=="hash"&&!/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())){override+=" error";}else if(type=="word"){wordAsValue(stream);}else if(type=="interpolation"){return pushContext(state,stream,"interpolation");}
return"prop";};states.propBlock=function(type,_stream,state){if(type=="}")return popContext(state);if(type=="word"){override="property";return"maybeprop";}
return state.context.type;};states.parens=function(type,stream,state){if(type=="{"||type=="}")return popAndPass(type,stream,state);if(type==")")return popContext(state);if(type=="(")return pushContext(state,stream,"parens");if(type=="interpolation")return pushContext(state,stream,"interpolation");if(type=="word")wordAsValue(stream);return"parens";};states.pseudo=function(type,stream,state){if(type=="meta")return"pseudo";if(type=="word"){override="variable-3";return state.context.type;}
return pass(type,stream,state);};states.documentTypes=function(type,stream,state){if(type=="word"&&documentTypes.hasOwnProperty(stream.current())){override="tag";return state.context.type;}else{return states.atBlock(type,stream,state);}};states.atBlock=function(type,stream,state){if(type=="(")return pushContext(state,stream,"atBlock_parens");if(type=="}"||type==";")return popAndPass(type,stream,state);if(type=="{")return popContext(state)&&pushContext(state,stream,allowNested?"block":"top");if(type=="interpolation")return pushContext(state,stream,"interpolation");if(type=="word"){var word=stream.current().toLowerCase();if(word=="only"||word=="not"||word=="and"||word=="or")
override="keyword";else if(mediaTypes.hasOwnProperty(word))
override="attribute";else if(mediaFeatures.hasOwnProperty(word))
override="property";else if(mediaValueKeywords.hasOwnProperty(word))
override="keyword";else if(propertyKeywords.hasOwnProperty(word))
override="property";else if(nonStandardPropertyKeywords.hasOwnProperty(word))
override="string-2";else if(valueKeywords.hasOwnProperty(word))
override="atom";else if(colorKeywords.hasOwnProperty(word))
override="keyword";else
override="error";}
return state.context.type;};states.atComponentBlock=function(type,stream,state){if(type=="}")
return popAndPass(type,stream,state);if(type=="{")
return popContext(state)&&pushContext(state,stream,allowNested?"block":"top",false);if(type=="word")
override="error";return state.context.type;};states.atBlock_parens=function(type,stream,state){if(type==")")return popContext(state);if(type=="{"||type=="}")return popAndPass(type,stream,state,2);return states.atBlock(type,stream,state);};states.restricted_atBlock_before=function(type,stream,state){if(type=="{")
return pushContext(state,stream,"restricted_atBlock");if(type=="word"&&state.stateArg=="@counter-style"){override="variable";return"restricted_atBlock_before";}
return pass(type,stream,state);};states.restricted_atBlock=function(type,stream,state){if(type=="}"){state.stateArg=null;return popContext(state);}
if(type=="word"){if((state.stateArg=="@font-face"&&!fontProperties.hasOwnProperty(stream.current().toLowerCase()))||(state.stateArg=="@counter-style"&&!counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))
override="error";else
override="property";return"maybeprop";}
return"restricted_atBlock";};states.keyframes=function(type,stream,state){if(type=="word"){override="variable";return"keyframes";}
if(type=="{")return pushContext(state,stream,"top");return pass(type,stream,state);};states.at=function(type,stream,state){if(type==";")return popContext(state);if(type=="{"||type=="}")return popAndPass(type,stream,state);if(type=="word")override="tag";else if(type=="hash")override="builtin";return"at";};states.interpolation=function(type,stream,state){if(type=="}")return popContext(state);if(type=="{"||type==";")return popAndPass(type,stream,state);if(type=="word")override="variable";else if(type!="variable"&&type!="("&&type!=")")override="error";return"interpolation";};return{startState:function(base){return{tokenize:null,state:inline?"block":"top",stateArg:null,context:new Context(inline?"block":"top",base||0,null)};},token:function(stream,state){if(!state.tokenize&&stream.eatSpace())return null;var style=(state.tokenize||tokenBase)(stream,state);if(style&&typeof style=="object"){type=style[1];style=style[0];}
override=style;if(type!="comment")
state.state=states[state.state](type,stream,state);return override;},indent:function(state,textAfter){var cx=state.context,ch=textAfter&&textAfter.charAt(0);var indent=cx.indent;if(cx.type=="prop"&&(ch=="}"||ch==")"))cx=cx.prev;if(cx.prev){if(ch=="}"&&(cx.type=="block"||cx.type=="top"||cx.type=="interpolation"||cx.type=="restricted_atBlock")){cx=cx.prev;indent=cx.indent;}else if(ch==")"&&(cx.type=="parens"||cx.type=="atBlock_parens")||ch=="{"&&(cx.type=="at"||cx.type=="atBlock")){indent=Math.max(0,cx.indent-indentUnit);}}
return indent;},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:lineComment,fold:"brace"};});function keySet(array){var keys={};for(var i=0;i<array.length;++i){keys[array[i].toLowerCase()]=true;}
return keys;}
var documentTypes_=["domain","regexp","url","url-prefix"],documentTypes=keySet(documentTypes_);var mediaTypes_=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],mediaTypes=keySet(mediaTypes_);var mediaFeatures_=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],mediaFeatures=keySet(mediaFeatures_);var mediaValueKeywords_=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],mediaValueKeywords=keySet(mediaValueKeywords_);var propertyKeywords_=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],propertyKeywords=keySet(propertyKeywords_);var nonStandardPropertyKeywords_=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],nonStandardPropertyKeywords=keySet(nonStandardPropertyKeywords_);var fontProperties_=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],fontProperties=keySet(fontProperties_);var counterDescriptors_=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],counterDescriptors=keySet(counterDescriptors_);var colorKeywords_=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],colorKeywords=keySet(colorKeywords_);var valueKeywords_=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","linktext","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visitedtext","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],valueKeywords=keySet(valueKeywords_);var allWords=documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_).concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_).concat(valueKeywords_);CodeMirror.registerHelper("hintWords","css",allWords);function tokenCComment(stream,state){var maybeEnd=false,ch;while((ch=stream.next())!=null){if(maybeEnd&&ch=="/"){state.tokenize=null;break;}
maybeEnd=(ch=="*");}
return["comment","comment"];}
CodeMirror.defineMIME("text/css",{documentTypes:documentTypes,mediaTypes:mediaTypes,mediaFeatures:mediaFeatures,mediaValueKeywords:mediaValueKeywords,propertyKeywords:propertyKeywords,nonStandardPropertyKeywords:nonStandardPropertyKeywords,fontProperties:fontProperties,counterDescriptors:counterDescriptors,colorKeywords:colorKeywords,valueKeywords:valueKeywords,tokenHooks:{"/":function(stream,state){if(!stream.eat("*"))return false;state.tokenize=tokenCComment;return tokenCComment(stream,state);}},name:"css"});CodeMirror.defineMIME("text/x-scss",{mediaTypes:mediaTypes,mediaFeatures:mediaFeatures,mediaValueKeywords:mediaValueKeywords,propertyKeywords:propertyKeywords,nonStandardPropertyKeywords:nonStandardPropertyKeywords,colorKeywords:colorKeywords,valueKeywords:valueKeywords,fontProperties:fontProperties,allowNested:true,lineComment:"//",tokenHooks:{"/":function(stream,state){if(stream.eat("/")){stream.skipToEnd();return["comment","comment"];}else if(stream.eat("*")){state.tokenize=tokenCComment;return tokenCComment(stream,state);}else{return["operator","operator"];}},":":function(stream){if(stream.match(/\s*\{/,false))
return[null,null]
return false;},"$":function(stream){stream.match(/^[\w-]+/);if(stream.match(/^\s*:/,false))
return["variable-2","variable-definition"];return["variable-2","variable"];},"#":function(stream){if(!stream.eat("{"))return false;return[null,"interpolation"];}},name:"css",helperType:"scss"});CodeMirror.defineMIME("text/x-less",{mediaTypes:mediaTypes,mediaFeatures:mediaFeatures,mediaValueKeywords:mediaValueKeywords,propertyKeywords:propertyKeywords,nonStandardPropertyKeywords:nonStandardPropertyKeywords,colorKeywords:colorKeywords,valueKeywords:valueKeywords,fontProperties:fontProperties,allowNested:true,lineComment:"//",tokenHooks:{"/":function(stream,state){if(stream.eat("/")){stream.skipToEnd();return["comment","comment"];}else if(stream.eat("*")){state.tokenize=tokenCComment;return tokenCComment(stream,state);}else{return["operator","operator"];}},"@":function(stream){if(stream.eat("{"))return[null,"interpolation"];if(stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,false))return false;stream.eatWhile(/[\w\\\-]/);if(stream.match(/^\s*:/,false))
return["variable-2","variable-definition"];return["variable-2","variable"];},"&":function(){return["atom","atom"];}},name:"css",helperType:"less"});CodeMirror.defineMIME("text/x-gss",{documentTypes:documentTypes,mediaTypes:mediaTypes,mediaFeatures:mediaFeatures,propertyKeywords:propertyKeywords,nonStandardPropertyKeywords:nonStandardPropertyKeywords,fontProperties:fontProperties,counterDescriptors:counterDescriptors,colorKeywords:colorKeywords,valueKeywords:valueKeywords,supportsAtComponent:true,tokenHooks:{"/":function(stream,state){if(!stream.eat("*"))return false;state.tokenize=tokenCComment;return tokenCComment(stream,state);}},name:"css",helperType:"gss"});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("javascript",function(config,parserConfig){var indentUnit=config.indentUnit;var statementIndent=parserConfig.statementIndent;var jsonldMode=parserConfig.jsonld;var jsonMode=parserConfig.json||jsonldMode;var isTS=parserConfig.typescript;var wordRE=parserConfig.wordCharacters||/[\w$\xa1-\uffff]/;var keywords=function(){function kw(type){return{type:type,style:"keyword"};}
var A=kw("keyword a"),B=kw("keyword b"),C=kw("keyword c"),D=kw("keyword d");var operator=kw("operator"),atom={type:"atom",style:"atom"};return{"if":kw("if"),"while":A,"with":A,"else":B,"do":B,"try":B,"finally":B,"return":D,"break":D,"continue":D,"new":kw("new"),"delete":C,"void":C,"throw":C,"debugger":kw("debugger"),"var":kw("var"),"const":kw("var"),"let":kw("var"),"function":kw("function"),"catch":kw("catch"),"for":kw("for"),"switch":kw("switch"),"case":kw("case"),"default":kw("default"),"in":operator,"typeof":operator,"instanceof":operator,"true":atom,"false":atom,"null":atom,"undefined":atom,"NaN":atom,"Infinity":atom,"this":kw("this"),"class":kw("class"),"super":kw("atom"),"yield":C,"export":kw("export"),"import":kw("import"),"extends":C,"await":C};}();var isOperatorChar=/[+\-*&%=<>!?|~^@]/;var isJsonldKeyword=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function readRegexp(stream){var escaped=false,next,inSet=false;while((next=stream.next())!=null){if(!escaped){if(next=="/"&&!inSet)return;if(next=="[")inSet=true;else if(inSet&&next=="]")inSet=false;}
escaped=!escaped&&next=="\\";}}
var type,content;function ret(tp,style,cont){type=tp;content=cont;return style;}
function tokenBase(stream,state){var ch=stream.next();if(ch=='"'||ch=="'"){state.tokenize=tokenString(ch);return state.tokenize(stream,state);}else if(ch=="."&&stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)){return ret("number","number");}else if(ch=="."&&stream.match("..")){return ret("spread","meta");}else if(/[\[\]{}\(\),;\:\.]/.test(ch)){return ret(ch);}else if(ch=="="&&stream.eat(">")){return ret("=>","operator");}else if(ch=="0"&&stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)){return ret("number","number");}else if(/\d/.test(ch)){stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/);return ret("number","number");}else if(ch=="/"){if(stream.eat("*")){state.tokenize=tokenComment;return tokenComment(stream,state);}else if(stream.eat("/")){stream.skipToEnd();return ret("comment","comment");}else if(expressionAllowed(stream,state,1)){readRegexp(stream);stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);return ret("regexp","string-2");}else{stream.eat("=");return ret("operator","operator",stream.current());}}else if(ch=="`"){state.tokenize=tokenQuasi;return tokenQuasi(stream,state);}else if(ch=="#"){stream.skipToEnd();return ret("error","error");}else if(isOperatorChar.test(ch)){if(ch!=">"||!state.lexical||state.lexical.type!=">"){if(stream.eat("=")){if(ch=="!"||ch=="=")stream.eat("=")}else if(/[<>*+\-]/.test(ch)){stream.eat(ch)
if(ch==">")stream.eat(ch)}}
return ret("operator","operator",stream.current());}else if(wordRE.test(ch)){stream.eatWhile(wordRE);var word=stream.current()
if(state.lastType!="."){if(keywords.propertyIsEnumerable(word)){var kw=keywords[word]
return ret(kw.type,kw.style,word)}
if(word=="async"&&stream.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,false))
return ret("async","keyword",word)}
return ret("variable","variable",word)}}
function tokenString(quote){return function(stream,state){var escaped=false,next;if(jsonldMode&&stream.peek()=="@"&&stream.match(isJsonldKeyword)){state.tokenize=tokenBase;return ret("jsonld-keyword","meta");}
while((next=stream.next())!=null){if(next==quote&&!escaped)break;escaped=!escaped&&next=="\\";}
if(!escaped)state.tokenize=tokenBase;return ret("string","string");};}
function tokenComment(stream,state){var maybeEnd=false,ch;while(ch=stream.next()){if(ch=="/"&&maybeEnd){state.tokenize=tokenBase;break;}
maybeEnd=(ch=="*");}
return ret("comment","comment");}
function tokenQuasi(stream,state){var escaped=false,next;while((next=stream.next())!=null){if(!escaped&&(next=="`"||next=="$"&&stream.eat("{"))){state.tokenize=tokenBase;break;}
escaped=!escaped&&next=="\\";}
return ret("quasi","string-2",stream.current());}
var brackets="([{}])";function findFatArrow(stream,state){if(state.fatArrowAt)state.fatArrowAt=null;var arrow=stream.string.indexOf("=>",stream.start);if(arrow<0)return;if(isTS){var m=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start,arrow))
if(m)arrow=m.index}
var depth=0,sawSomething=false;for(var pos=arrow-1;pos>=0;--pos){var ch=stream.string.charAt(pos);var bracket=brackets.indexOf(ch);if(bracket>=0&&bracket<3){if(!depth){++pos;break;}
if(--depth==0){if(ch=="(")sawSomething=true;break;}}else if(bracket>=3&&bracket<6){++depth;}else if(wordRE.test(ch)){sawSomething=true;}else if(/["'\/`]/.test(ch)){for(;;--pos){if(pos==0)return
var next=stream.string.charAt(pos-1)
if(next==ch&&stream.string.charAt(pos-2)!="\\"){pos--;break}}}else if(sawSomething&&!depth){++pos;break;}}
if(sawSomething&&!depth)state.fatArrowAt=pos;}
var atomicTypes={"atom":true,"number":true,"variable":true,"string":true,"regexp":true,"this":true,"jsonld-keyword":true};function JSLexical(indented,column,type,align,prev,info){this.indented=indented;this.column=column;this.type=type;this.prev=prev;this.info=info;if(align!=null)this.align=align;}
function inScope(state,varname){for(var v=state.localVars;v;v=v.next)
if(v.name==varname)return true;for(var cx=state.context;cx;cx=cx.prev){for(var v=cx.vars;v;v=v.next)
if(v.name==varname)return true;}}
function parseJS(state,style,type,content,stream){var cc=state.cc;cx.state=state;cx.stream=stream;cx.marked=null,cx.cc=cc;cx.style=style;if(!state.lexical.hasOwnProperty("align"))
state.lexical.align=true;while(true){var combinator=cc.length?cc.pop():jsonMode?expression:statement;if(combinator(type,content)){while(cc.length&&cc[cc.length-1].lex)
cc.pop()();if(cx.marked)return cx.marked;if(type=="variable"&&inScope(state,content))return"variable-2";return style;}}}
var cx={state:null,column:null,marked:null,cc:null};function pass(){for(var i=arguments.length-1;i>=0;i--)cx.cc.push(arguments[i]);}
function cont(){pass.apply(null,arguments);return true;}
function inList(name,list){for(var v=list;v;v=v.next)if(v.name==name)return true
return false;}
function register(varname){var state=cx.state;cx.marked="def";if(state.context){if(state.lexical.info=="var"&&state.context&&state.context.block){var newContext=registerVarScoped(varname,state.context)
if(newContext!=null){state.context=newContext
return}}else if(!inList(varname,state.localVars)){state.localVars=new Var(varname,state.localVars)
return}}
if(parserConfig.globalVars&&!inList(varname,state.globalVars))
state.globalVars=new Var(varname,state.globalVars)}
function registerVarScoped(varname,context){if(!context){return null}else if(context.block){var inner=registerVarScoped(varname,context.prev)
if(!inner)return null
if(inner==context.prev)return context
return new Context(inner,context.vars,true)}else if(inList(varname,context.vars)){return context}else{return new Context(context.prev,new Var(varname,context.vars),false)}}
function isModifier(name){return name=="public"||name=="private"||name=="protected"||name=="abstract"||name=="readonly"}
function Context(prev,vars,block){this.prev=prev;this.vars=vars;this.block=block}
function Var(name,next){this.name=name;this.next=next}
var defaultVars=new Var("this",new Var("arguments",null))
function pushcontext(){cx.state.context=new Context(cx.state.context,cx.state.localVars,false)
cx.state.localVars=defaultVars}
function pushblockcontext(){cx.state.context=new Context(cx.state.context,cx.state.localVars,true)
cx.state.localVars=null}
function popcontext(){cx.state.localVars=cx.state.context.vars
cx.state.context=cx.state.context.prev}
popcontext.lex=true
function pushlex(type,info){var result=function(){var state=cx.state,indent=state.indented;if(state.lexical.type=="stat")indent=state.lexical.indented;else for(var outer=state.lexical;outer&&outer.type==")"&&outer.align;outer=outer.prev)
indent=outer.indented;state.lexical=new JSLexical(indent,cx.stream.column(),type,null,state.lexical,info);};result.lex=true;return result;}
function poplex(){var state=cx.state;if(state.lexical.prev){if(state.lexical.type==")")
state.indented=state.lexical.indented;state.lexical=state.lexical.prev;}}
poplex.lex=true;function expect(wanted){function exp(type){if(type==wanted)return cont();else if(wanted==";"||type=="}"||type==")"||type=="]")return pass();else return cont(exp);};return exp;}
function statement(type,value){if(type=="var")return cont(pushlex("vardef",value),vardef,expect(";"),poplex);if(type=="keyword a")return cont(pushlex("form"),parenExpr,statement,poplex);if(type=="keyword b")return cont(pushlex("form"),statement,poplex);if(type=="keyword d")return cx.stream.match(/^\s*$/,false)?cont():cont(pushlex("stat"),maybeexpression,expect(";"),poplex);if(type=="debugger")return cont(expect(";"));if(type=="{")return cont(pushlex("}"),pushblockcontext,block,poplex,popcontext);if(type==";")return cont();if(type=="if"){if(cx.state.lexical.info=="else"&&cx.state.cc[cx.state.cc.length-1]==poplex)
cx.state.cc.pop()();return cont(pushlex("form"),parenExpr,statement,poplex,maybeelse);}
if(type=="function")return cont(functiondef);if(type=="for")return cont(pushlex("form"),forspec,statement,poplex);if(type=="class"||(isTS&&value=="interface")){cx.marked="keyword"
return cont(pushlex("form",type=="class"?type:value),className,poplex)}
if(type=="variable"){if(isTS&&value=="declare"){cx.marked="keyword"
return cont(statement)}else if(isTS&&(value=="module"||value=="enum"||value=="type")&&cx.stream.match(/^\s*\w/,false)){cx.marked="keyword"
if(value=="enum")return cont(enumdef);else if(value=="type")return cont(typename,expect("operator"),typeexpr,expect(";"));else return cont(pushlex("form"),pattern,expect("{"),pushlex("}"),block,poplex,poplex)}else if(isTS&&value=="namespace"){cx.marked="keyword"
return cont(pushlex("form"),expression,statement,poplex)}else if(isTS&&value=="abstract"){cx.marked="keyword"
return cont(statement)}else{return cont(pushlex("stat"),maybelabel);}}
if(type=="switch")return cont(pushlex("form"),parenExpr,expect("{"),pushlex("}","switch"),pushblockcontext,block,poplex,poplex,popcontext);if(type=="case")return cont(expression,expect(":"));if(type=="default")return cont(expect(":"));if(type=="catch")return cont(pushlex("form"),pushcontext,maybeCatchBinding,statement,poplex,popcontext);if(type=="export")return cont(pushlex("stat"),afterExport,poplex);if(type=="import")return cont(pushlex("stat"),afterImport,poplex);if(type=="async")return cont(statement)
if(value=="@")return cont(expression,statement)
return pass(pushlex("stat"),expression,expect(";"),poplex);}
function maybeCatchBinding(type){if(type=="(")return cont(funarg,expect(")"))}
function expression(type,value){return expressionInner(type,value,false);}
function expressionNoComma(type,value){return expressionInner(type,value,true);}
function parenExpr(type){if(type!="(")return pass()
return cont(pushlex(")"),expression,expect(")"),poplex)}
function expressionInner(type,value,noComma){if(cx.state.fatArrowAt==cx.stream.start){var body=noComma?arrowBodyNoComma:arrowBody;if(type=="(")return cont(pushcontext,pushlex(")"),commasep(funarg,")"),poplex,expect("=>"),body,popcontext);else if(type=="variable")return pass(pushcontext,pattern,expect("=>"),body,popcontext);}
var maybeop=noComma?maybeoperatorNoComma:maybeoperatorComma;if(atomicTypes.hasOwnProperty(type))return cont(maybeop);if(type=="function")return cont(functiondef,maybeop);if(type=="class"||(isTS&&value=="interface")){cx.marked="keyword";return cont(pushlex("form"),classExpression,poplex);}
if(type=="keyword c"||type=="async")return cont(noComma?expressionNoComma:expression);if(type=="(")return cont(pushlex(")"),maybeexpression,expect(")"),poplex,maybeop);if(type=="operator"||type=="spread")return cont(noComma?expressionNoComma:expression);if(type=="[")return cont(pushlex("]"),arrayLiteral,poplex,maybeop);if(type=="{")return contCommasep(objprop,"}",null,maybeop);if(type=="quasi")return pass(quasi,maybeop);if(type=="new")return cont(maybeTarget(noComma));if(type=="import")return cont(expression);return cont();}
function maybeexpression(type){if(type.match(/[;\}\)\],]/))return pass();return pass(expression);}
function maybeoperatorComma(type,value){if(type==",")return cont(expression);return maybeoperatorNoComma(type,value,false);}
function maybeoperatorNoComma(type,value,noComma){var me=noComma==false?maybeoperatorComma:maybeoperatorNoComma;var expr=noComma==false?expression:expressionNoComma;if(type=="=>")return cont(pushcontext,noComma?arrowBodyNoComma:arrowBody,popcontext);if(type=="operator"){if(/\+\+|--/.test(value)||isTS&&value=="!")return cont(me);if(isTS&&value=="<"&&cx.stream.match(/^([^>]|<.*?>)*>\s*\(/,false))
return cont(pushlex(">"),commasep(typeexpr,">"),poplex,me);if(value=="?")return cont(expression,expect(":"),expr);return cont(expr);}
if(type=="quasi"){return pass(quasi,me);}
if(type==";")return;if(type=="(")return contCommasep(expressionNoComma,")","call",me);if(type==".")return cont(property,me);if(type=="[")return cont(pushlex("]"),maybeexpression,expect("]"),poplex,me);if(isTS&&value=="as"){cx.marked="keyword";return cont(typeexpr,me)}
if(type=="regexp"){cx.state.lastType=cx.marked="operator"
cx.stream.backUp(cx.stream.pos-cx.stream.start-1)
return cont(expr)}}
function quasi(type,value){if(type!="quasi")return pass();if(value.slice(value.length-2)!="${")return cont(quasi);return cont(expression,continueQuasi);}
function continueQuasi(type){if(type=="}"){cx.marked="string-2";cx.state.tokenize=tokenQuasi;return cont(quasi);}}
function arrowBody(type){findFatArrow(cx.stream,cx.state);return pass(type=="{"?statement:expression);}
function arrowBodyNoComma(type){findFatArrow(cx.stream,cx.state);return pass(type=="{"?statement:expressionNoComma);}
function maybeTarget(noComma){return function(type){if(type==".")return cont(noComma?targetNoComma:target);else if(type=="variable"&&isTS)return cont(maybeTypeArgs,noComma?maybeoperatorNoComma:maybeoperatorComma)
else return pass(noComma?expressionNoComma:expression);};}
function target(_,value){if(value=="target"){cx.marked="keyword";return cont(maybeoperatorComma);}}
function targetNoComma(_,value){if(value=="target"){cx.marked="keyword";return cont(maybeoperatorNoComma);}}
function maybelabel(type){if(type==":")return cont(poplex,statement);return pass(maybeoperatorComma,expect(";"),poplex);}
function property(type){if(type=="variable"){cx.marked="property";return cont();}}
function objprop(type,value){if(type=="async"){cx.marked="property";return cont(objprop);}else if(type=="variable"||cx.style=="keyword"){cx.marked="property";if(value=="get"||value=="set")return cont(getterSetter);var m
if(isTS&&cx.state.fatArrowAt==cx.stream.start&&(m=cx.stream.match(/^\s*:\s*/,false)))
cx.state.fatArrowAt=cx.stream.pos+m[0].length
return cont(afterprop);}else if(type=="number"||type=="string"){cx.marked=jsonldMode?"property":(cx.style+" property");return cont(afterprop);}else if(type=="jsonld-keyword"){return cont(afterprop);}else if(isTS&&isModifier(value)){cx.marked="keyword"
return cont(objprop)}else if(type=="["){return cont(expression,maybetype,expect("]"),afterprop);}else if(type=="spread"){return cont(expressionNoComma,afterprop);}else if(value=="*"){cx.marked="keyword";return cont(objprop);}else if(type==":"){return pass(afterprop)}}
function getterSetter(type){if(type!="variable")return pass(afterprop);cx.marked="property";return cont(functiondef);}
function afterprop(type){if(type==":")return cont(expressionNoComma);if(type=="(")return pass(functiondef);}
function commasep(what,end,sep){function proceed(type,value){if(sep?sep.indexOf(type)>-1:type==","){var lex=cx.state.lexical;if(lex.info=="call")lex.pos=(lex.pos||0)+1;return cont(function(type,value){if(type==end||value==end)return pass()
return pass(what)},proceed);}
if(type==end||value==end)return cont();if(sep&&sep.indexOf(";")>-1)return pass(what)
return cont(expect(end));}
return function(type,value){if(type==end||value==end)return cont();return pass(what,proceed);};}
function contCommasep(what,end,info){for(var i=3;i<arguments.length;i++)
cx.cc.push(arguments[i]);return cont(pushlex(end,info),commasep(what,end),poplex);}
function block(type){if(type=="}")return cont();return pass(statement,block);}
function maybetype(type,value){if(isTS){if(type==":")return cont(typeexpr);if(value=="?")return cont(maybetype);}}
function maybetypeOrIn(type,value){if(isTS&&(type==":"||value=="in"))return cont(typeexpr)}
function mayberettype(type){if(isTS&&type==":"){if(cx.stream.match(/^\s*\w+\s+is\b/,false))return cont(expression,isKW,typeexpr)
else return cont(typeexpr)}}
function isKW(_,value){if(value=="is"){cx.marked="keyword"
return cont()}}
function typeexpr(type,value){if(value=="keyof"||value=="typeof"||value=="infer"){cx.marked="keyword"
return cont(value=="typeof"?expressionNoComma:typeexpr)}
if(type=="variable"||value=="void"){cx.marked="type"
return cont(afterType)}
if(value=="|"||value=="&")return cont(typeexpr)
if(type=="string"||type=="number"||type=="atom")return cont(afterType);if(type=="[")return cont(pushlex("]"),commasep(typeexpr,"]",","),poplex,afterType)
if(type=="{")return cont(pushlex("}"),commasep(typeprop,"}",",;"),poplex,afterType)
if(type=="(")return cont(commasep(typearg,")"),maybeReturnType,afterType)
if(type=="<")return cont(commasep(typeexpr,">"),typeexpr)}
function maybeReturnType(type){if(type=="=>")return cont(typeexpr)}
function typeprop(type,value){if(type=="variable"||cx.style=="keyword"){cx.marked="property"
return cont(typeprop)}else if(value=="?"||type=="number"||type=="string"){return cont(typeprop)}else if(type==":"){return cont(typeexpr)}else if(type=="["){return cont(expect("variable"),maybetypeOrIn,expect("]"),typeprop)}else if(type=="("){return pass(functiondecl,typeprop)}}
function typearg(type,value){if(type=="variable"&&cx.stream.match(/^\s*[?:]/,false)||value=="?")return cont(typearg)
if(type==":")return cont(typeexpr)
if(type=="spread")return cont(typearg)
return pass(typeexpr)}
function afterType(type,value){if(value=="<")return cont(pushlex(">"),commasep(typeexpr,">"),poplex,afterType)
if(value=="|"||type=="."||value=="&")return cont(typeexpr)
if(type=="[")return cont(typeexpr,expect("]"),afterType)
if(value=="extends"||value=="implements"){cx.marked="keyword";return cont(typeexpr)}
if(value=="?")return cont(typeexpr,expect(":"),typeexpr)}
function maybeTypeArgs(_,value){if(value=="<")return cont(pushlex(">"),commasep(typeexpr,">"),poplex,afterType)}
function typeparam(){return pass(typeexpr,maybeTypeDefault)}
function maybeTypeDefault(_,value){if(value=="=")return cont(typeexpr)}
function vardef(_,value){if(value=="enum"){cx.marked="keyword";return cont(enumdef)}
return pass(pattern,maybetype,maybeAssign,vardefCont);}
function pattern(type,value){if(isTS&&isModifier(value)){cx.marked="keyword";return cont(pattern)}
if(type=="variable"){register(value);return cont();}
if(type=="spread")return cont(pattern);if(type=="[")return contCommasep(eltpattern,"]");if(type=="{")return contCommasep(proppattern,"}");}
function proppattern(type,value){if(type=="variable"&&!cx.stream.match(/^\s*:/,false)){register(value);return cont(maybeAssign);}
if(type=="variable")cx.marked="property";if(type=="spread")return cont(pattern);if(type=="}")return pass();if(type=="[")return cont(expression,expect(']'),expect(':'),proppattern);return cont(expect(":"),pattern,maybeAssign);}
function eltpattern(){return pass(pattern,maybeAssign)}
function maybeAssign(_type,value){if(value=="=")return cont(expressionNoComma);}
function vardefCont(type){if(type==",")return cont(vardef);}
function maybeelse(type,value){if(type=="keyword b"&&value=="else")return cont(pushlex("form","else"),statement,poplex);}
function forspec(type,value){if(value=="await")return cont(forspec);if(type=="(")return cont(pushlex(")"),forspec1,poplex);}
function forspec1(type){if(type=="var")return cont(vardef,forspec2);if(type=="variable")return cont(forspec2);return pass(forspec2)}
function forspec2(type,value){if(type==")")return cont()
if(type==";")return cont(forspec2)
if(value=="in"||value=="of"){cx.marked="keyword";return cont(expression,forspec2)}
return pass(expression,forspec2)}
function functiondef(type,value){if(value=="*"){cx.marked="keyword";return cont(functiondef);}
if(type=="variable"){register(value);return cont(functiondef);}
if(type=="(")return cont(pushcontext,pushlex(")"),commasep(funarg,")"),poplex,mayberettype,statement,popcontext);if(isTS&&value=="<")return cont(pushlex(">"),commasep(typeparam,">"),poplex,functiondef)}
function functiondecl(type,value){if(value=="*"){cx.marked="keyword";return cont(functiondecl);}
if(type=="variable"){register(value);return cont(functiondecl);}
if(type=="(")return cont(pushcontext,pushlex(")"),commasep(funarg,")"),poplex,mayberettype,popcontext);if(isTS&&value=="<")return cont(pushlex(">"),commasep(typeparam,">"),poplex,functiondecl)}
function typename(type,value){if(type=="keyword"||type=="variable"){cx.marked="type"
return cont(typename)}else if(value=="<"){return cont(pushlex(">"),commasep(typeparam,">"),poplex)}}
function funarg(type,value){if(value=="@")cont(expression,funarg)
if(type=="spread")return cont(funarg);if(isTS&&isModifier(value)){cx.marked="keyword";return cont(funarg);}
if(isTS&&type=="this")return cont(maybetype,maybeAssign)
return pass(pattern,maybetype,maybeAssign);}
function classExpression(type,value){if(type=="variable")return className(type,value);return classNameAfter(type,value);}
function className(type,value){if(type=="variable"){register(value);return cont(classNameAfter);}}
function classNameAfter(type,value){if(value=="<")return cont(pushlex(">"),commasep(typeparam,">"),poplex,classNameAfter)
if(value=="extends"||value=="implements"||(isTS&&type==",")){if(value=="implements")cx.marked="keyword";return cont(isTS?typeexpr:expression,classNameAfter);}
if(type=="{")return cont(pushlex("}"),classBody,poplex);}
function classBody(type,value){if(type=="async"||(type=="variable"&&(value=="static"||value=="get"||value=="set"||(isTS&&isModifier(value)))&&cx.stream.match(/^\s+[\w$\xa1-\uffff]/,false))){cx.marked="keyword";return cont(classBody);}
if(type=="variable"||cx.style=="keyword"){cx.marked="property";return cont(isTS?classfield:functiondef,classBody);}
if(type=="number"||type=="string")return cont(isTS?classfield:functiondef,classBody);if(type=="[")
return cont(expression,maybetype,expect("]"),isTS?classfield:functiondef,classBody)
if(value=="*"){cx.marked="keyword";return cont(classBody);}
if(isTS&&type=="(")return pass(functiondecl,classBody)
if(type==";"||type==",")return cont(classBody);if(type=="}")return cont();if(value=="@")return cont(expression,classBody)}
function classfield(type,value){if(value=="?")return cont(classfield)
if(type==":")return cont(typeexpr,maybeAssign)
if(value=="=")return cont(expressionNoComma)
var context=cx.state.lexical.prev,isInterface=context&&context.info=="interface"
return pass(isInterface?functiondecl:functiondef)}
function afterExport(type,value){if(value=="*"){cx.marked="keyword";return cont(maybeFrom,expect(";"));}
if(value=="default"){cx.marked="keyword";return cont(expression,expect(";"));}
if(type=="{")return cont(commasep(exportField,"}"),maybeFrom,expect(";"));return pass(statement);}
function exportField(type,value){if(value=="as"){cx.marked="keyword";return cont(expect("variable"));}
if(type=="variable")return pass(expressionNoComma,exportField);}
function afterImport(type){if(type=="string")return cont();if(type=="(")return pass(expression);return pass(importSpec,maybeMoreImports,maybeFrom);}
function importSpec(type,value){if(type=="{")return contCommasep(importSpec,"}");if(type=="variable")register(value);if(value=="*")cx.marked="keyword";return cont(maybeAs);}
function maybeMoreImports(type){if(type==",")return cont(importSpec,maybeMoreImports)}
function maybeAs(_type,value){if(value=="as"){cx.marked="keyword";return cont(importSpec);}}
function maybeFrom(_type,value){if(value=="from"){cx.marked="keyword";return cont(expression);}}
function arrayLiteral(type){if(type=="]")return cont();return pass(commasep(expressionNoComma,"]"));}
function enumdef(){return pass(pushlex("form"),pattern,expect("{"),pushlex("}"),commasep(enummember,"}"),poplex,poplex)}
function enummember(){return pass(pattern,maybeAssign);}
function isContinuedStatement(state,textAfter){return state.lastType=="operator"||state.lastType==","||isOperatorChar.test(textAfter.charAt(0))||/[,.]/.test(textAfter.charAt(0));}
function expressionAllowed(stream,state,backUp){return state.tokenize==tokenBase&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType)||(state.lastType=="quasi"&&/\{\s*$/.test(stream.string.slice(0,stream.pos-(backUp||0))))}
return{startState:function(basecolumn){var state={tokenize:tokenBase,lastType:"sof",cc:[],lexical:new JSLexical((basecolumn||0)-indentUnit,0,"block",false),localVars:parserConfig.localVars,context:parserConfig.localVars&&new Context(null,null,false),indented:basecolumn||0};if(parserConfig.globalVars&&typeof parserConfig.globalVars=="object")
state.globalVars=parserConfig.globalVars;return state;},token:function(stream,state){if(stream.sol()){if(!state.lexical.hasOwnProperty("align"))
state.lexical.align=false;state.indented=stream.indentation();findFatArrow(stream,state);}
if(state.tokenize!=tokenComment&&stream.eatSpace())return null;var style=state.tokenize(stream,state);if(type=="comment")return style;state.lastType=type=="operator"&&(content=="++"||content=="--")?"incdec":type;return parseJS(state,style,type,content,stream);},indent:function(state,textAfter){if(state.tokenize==tokenComment)return CodeMirror.Pass;if(state.tokenize!=tokenBase)return 0;var firstChar=textAfter&&textAfter.charAt(0),lexical=state.lexical,top
if(!/^\s*else\b/.test(textAfter))for(var i=state.cc.length-1;i>=0;--i){var c=state.cc[i];if(c==poplex)lexical=lexical.prev;else if(c!=maybeelse)break;}
while((lexical.type=="stat"||lexical.type=="form")&&(firstChar=="}"||((top=state.cc[state.cc.length-1])&&(top==maybeoperatorComma||top==maybeoperatorNoComma)&&!/^[,\.=+\-*:?[\(]/.test(textAfter))))
lexical=lexical.prev;if(statementIndent&&lexical.type==")"&&lexical.prev.type=="stat")
lexical=lexical.prev;var type=lexical.type,closing=firstChar==type;if(type=="vardef")return lexical.indented+(state.lastType=="operator"||state.lastType==","?lexical.info.length+1:0);else if(type=="form"&&firstChar=="{")return lexical.indented;else if(type=="form")return lexical.indented+indentUnit;else if(type=="stat")
return lexical.indented+(isContinuedStatement(state,textAfter)?statementIndent||indentUnit:0);else if(lexical.info=="switch"&&!closing&&parserConfig.doubleIndentSwitch!=false)
return lexical.indented+(/^(?:case|default)\b/.test(textAfter)?indentUnit:2*indentUnit);else if(lexical.align)return lexical.column+(closing?0:1);else return lexical.indented+(closing?0:indentUnit);},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:jsonMode?null:"/*",blockCommentEnd:jsonMode?null:"*/",blockCommentContinue:jsonMode?null:" * ",lineComment:jsonMode?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:jsonMode?"json":"javascript",jsonldMode:jsonldMode,jsonMode:jsonMode,expressionAllowed:expressionAllowed,skipExpression:function(state){var top=state.cc[state.cc.length-1]
if(top==expression||top==expressionNoComma)state.cc.pop()}};});CodeMirror.registerHelper("wordChars","javascript",/[\w$]/);CodeMirror.defineMIME("text/javascript","javascript");CodeMirror.defineMIME("text/ecmascript","javascript");CodeMirror.defineMIME("application/javascript","javascript");CodeMirror.defineMIME("application/x-javascript","javascript");CodeMirror.defineMIME("application/ecmascript","javascript");CodeMirror.defineMIME("application/json",{name:"javascript",json:true});CodeMirror.defineMIME("application/x-json",{name:"javascript",json:true});CodeMirror.defineMIME("application/ld+json",{name:"javascript",jsonld:true});CodeMirror.defineMIME("text/typescript",{name:"javascript",typescript:true});CodeMirror.defineMIME("application/typescript",{name:"javascript",typescript:true});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";var htmlConfig={autoSelfClosers:{'area':true,'base':true,'br':true,'col':true,'command':true,'embed':true,'frame':true,'hr':true,'img':true,'input':true,'keygen':true,'link':true,'meta':true,'param':true,'source':true,'track':true,'wbr':true,'menuitem':true},implicitlyClosed:{'dd':true,'li':true,'optgroup':true,'option':true,'p':true,'rp':true,'rt':true,'tbody':true,'td':true,'tfoot':true,'th':true,'tr':true},contextGrabbers:{'dd':{'dd':true,'dt':true},'dt':{'dd':true,'dt':true},'li':{'li':true},'option':{'option':true,'optgroup':true},'optgroup':{'optgroup':true},'p':{'address':true,'article':true,'aside':true,'blockquote':true,'dir':true,'div':true,'dl':true,'fieldset':true,'footer':true,'form':true,'h1':true,'h2':true,'h3':true,'h4':true,'h5':true,'h6':true,'header':true,'hgroup':true,'hr':true,'menu':true,'nav':true,'ol':true,'p':true,'pre':true,'section':true,'table':true,'ul':true},'rp':{'rp':true,'rt':true},'rt':{'rp':true,'rt':true},'tbody':{'tbody':true,'tfoot':true},'td':{'td':true,'th':true},'tfoot':{'tbody':true},'th':{'td':true,'th':true},'thead':{'tbody':true,'tfoot':true},'tr':{'tr':true}},doNotIndent:{"pre":true},allowUnquoted:true,allowMissing:true,caseFold:true}
var xmlConfig={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:false,allowMissing:false,allowMissingTagName:false,caseFold:false}
CodeMirror.defineMode("xml",function(editorConf,config_){var indentUnit=editorConf.indentUnit
var config={}
var defaults=config_.htmlMode?htmlConfig:xmlConfig
for(var prop in defaults)config[prop]=defaults[prop]
for(var prop in config_)config[prop]=config_[prop]
var type,setStyle;function inText(stream,state){function chain(parser){state.tokenize=parser;return parser(stream,state);}
var ch=stream.next();if(ch=="<"){if(stream.eat("!")){if(stream.eat("[")){if(stream.match("CDATA["))return chain(inBlock("atom","]]>"));else return null;}else if(stream.match("--")){return chain(inBlock("comment","-->"));}else if(stream.match("DOCTYPE",true,true)){stream.eatWhile(/[\w\._\-]/);return chain(doctype(1));}else{return null;}}else if(stream.eat("?")){stream.eatWhile(/[\w\._\-]/);state.tokenize=inBlock("meta","?>");return"meta";}else{type=stream.eat("/")?"closeTag":"openTag";state.tokenize=inTag;return"tag bracket";}}else if(ch=="&"){var ok;if(stream.eat("#")){if(stream.eat("x")){ok=stream.eatWhile(/[a-fA-F\d]/)&&stream.eat(";");}else{ok=stream.eatWhile(/[\d]/)&&stream.eat(";");}}else{ok=stream.eatWhile(/[\w\.\-:]/)&&stream.eat(";");}
return ok?"atom":"error";}else{stream.eatWhile(/[^&<]/);return null;}}
inText.isInText=true;function inTag(stream,state){var ch=stream.next();if(ch==">"||(ch=="/"&&stream.eat(">"))){state.tokenize=inText;type=ch==">"?"endTag":"selfcloseTag";return"tag bracket";}else if(ch=="="){type="equals";return null;}else if(ch=="<"){state.tokenize=inText;state.state=baseState;state.tagName=state.tagStart=null;var next=state.tokenize(stream,state);return next?next+" tag error":"tag error";}else if(/[\'\"]/.test(ch)){state.tokenize=inAttribute(ch);state.stringStartCol=stream.column();return state.tokenize(stream,state);}else{stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/);return"word";}}
function inAttribute(quote){var closure=function(stream,state){while(!stream.eol()){if(stream.next()==quote){state.tokenize=inTag;break;}}
return"string";};closure.isInAttribute=true;return closure;}
function inBlock(style,terminator){return function(stream,state){while(!stream.eol()){if(stream.match(terminator)){state.tokenize=inText;break;}
stream.next();}
return style;}}
function doctype(depth){return function(stream,state){var ch;while((ch=stream.next())!=null){if(ch=="<"){state.tokenize=doctype(depth+1);return state.tokenize(stream,state);}else if(ch==">"){if(depth==1){state.tokenize=inText;break;}else{state.tokenize=doctype(depth-1);return state.tokenize(stream,state);}}}
return"meta";};}
function Context(state,tagName,startOfLine){this.prev=state.context;this.tagName=tagName;this.indent=state.indented;this.startOfLine=startOfLine;if(config.doNotIndent.hasOwnProperty(tagName)||(state.context&&state.context.noIndent))
this.noIndent=true;}
function popContext(state){if(state.context)state.context=state.context.prev;}
function maybePopContext(state,nextTagName){var parentTagName;while(true){if(!state.context){return;}
parentTagName=state.context.tagName;if(!config.contextGrabbers.hasOwnProperty(parentTagName)||!config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)){return;}
popContext(state);}}
function baseState(type,stream,state){if(type=="openTag"){state.tagStart=stream.column();return tagNameState;}else if(type=="closeTag"){return closeTagNameState;}else{return baseState;}}
function tagNameState(type,stream,state){if(type=="word"){state.tagName=stream.current();setStyle="tag";return attrState;}else if(config.allowMissingTagName&&type=="endTag"){setStyle="tag bracket";return attrState(type,stream,state);}else{setStyle="error";return tagNameState;}}
function closeTagNameState(type,stream,state){if(type=="word"){var tagName=stream.current();if(state.context&&state.context.tagName!=tagName&&config.implicitlyClosed.hasOwnProperty(state.context.tagName))
popContext(state);if((state.context&&state.context.tagName==tagName)||config.matchClosing===false){setStyle="tag";return closeState;}else{setStyle="tag error";return closeStateErr;}}else if(config.allowMissingTagName&&type=="endTag"){setStyle="tag bracket";return closeState(type,stream,state);}else{setStyle="error";return closeStateErr;}}
function closeState(type,_stream,state){if(type!="endTag"){setStyle="error";return closeState;}
popContext(state);return baseState;}
function closeStateErr(type,stream,state){setStyle="error";return closeState(type,stream,state);}
function attrState(type,_stream,state){if(type=="word"){setStyle="attribute";return attrEqState;}else if(type=="endTag"||type=="selfcloseTag"){var tagName=state.tagName,tagStart=state.tagStart;state.tagName=state.tagStart=null;if(type=="selfcloseTag"||config.autoSelfClosers.hasOwnProperty(tagName)){maybePopContext(state,tagName);}else{maybePopContext(state,tagName);state.context=new Context(state,tagName,tagStart==state.indented);}
return baseState;}
setStyle="error";return attrState;}
function attrEqState(type,stream,state){if(type=="equals")return attrValueState;if(!config.allowMissing)setStyle="error";return attrState(type,stream,state);}
function attrValueState(type,stream,state){if(type=="string")return attrContinuedState;if(type=="word"&&config.allowUnquoted){setStyle="string";return attrState;}
setStyle="error";return attrState(type,stream,state);}
function attrContinuedState(type,stream,state){if(type=="string")return attrContinuedState;return attrState(type,stream,state);}
return{startState:function(baseIndent){var state={tokenize:inText,state:baseState,indented:baseIndent||0,tagName:null,tagStart:null,context:null}
if(baseIndent!=null)state.baseIndent=baseIndent
return state},token:function(stream,state){if(!state.tagName&&stream.sol())
state.indented=stream.indentation();if(stream.eatSpace())return null;type=null;var style=state.tokenize(stream,state);if((style||type)&&style!="comment"){setStyle=null;state.state=state.state(type||style,stream,state);if(setStyle)
style=setStyle=="error"?style+" error":setStyle;}
return style;},indent:function(state,textAfter,fullLine){var context=state.context;if(state.tokenize.isInAttribute){if(state.tagStart==state.indented)
return state.stringStartCol+1;else
return state.indented+indentUnit;}
if(context&&context.noIndent)return CodeMirror.Pass;if(state.tokenize!=inTag&&state.tokenize!=inText)
return fullLine?fullLine.match(/^(\s*)/)[0].length:0;if(state.tagName){if(config.multilineTagIndentPastTag!==false)
return state.tagStart+state.tagName.length+2;else
return state.tagStart+indentUnit*(config.multilineTagIndentFactor||1);}
if(config.alignCDATA&&/<!\[CDATA\[/.test(textAfter))return 0;var tagAfter=textAfter&&/^<(\/)?([\w_:\.-]*)/.exec(textAfter);if(tagAfter&&tagAfter[1]){while(context){if(context.tagName==tagAfter[2]){context=context.prev;break;}else if(config.implicitlyClosed.hasOwnProperty(context.tagName)){context=context.prev;}else{break;}}}else if(tagAfter){while(context){var grabbers=config.contextGrabbers[context.tagName];if(grabbers&&grabbers.hasOwnProperty(tagAfter[2]))
context=context.prev;else
break;}}
while(context&&context.prev&&!context.startOfLine)
context=context.prev;if(context)return context.indent+indentUnit;else return state.baseIndent||0;},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:config.htmlMode?"html":"xml",helperType:config.htmlMode?"html":"xml",skipAttribute:function(state){if(state.state==attrValueState)
state.state=attrState}};});CodeMirror.defineMIME("text/xml","xml");CodeMirror.defineMIME("application/xml","xml");if(!CodeMirror.mimeModes.hasOwnProperty("text/html"))
CodeMirror.defineMIME("text/html",{name:"xml",htmlMode:true});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"),require("../css/css"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";var defaultTags={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};function maybeBackup(stream,pat,style){var cur=stream.current(),close=cur.search(pat);if(close>-1){stream.backUp(cur.length-close);}else if(cur.match(/<\/?$/)){stream.backUp(cur.length);if(!stream.match(pat,false))stream.match(cur);}
return style;}
var attrRegexpCache={};function getAttrRegexp(attr){var regexp=attrRegexpCache[attr];if(regexp)return regexp;return attrRegexpCache[attr]=new RegExp("\\s+"+attr+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*");}
function getAttrValue(text,attr){var match=text.match(getAttrRegexp(attr))
return match?/^\s*(.*?)\s*$/.exec(match[2])[1]:""}
function getTagRegexp(tagName,anchored){return new RegExp((anchored?"^":"")+"<\/\s*"+tagName+"\s*>","i");}
function addTags(from,to){for(var tag in from){var dest=to[tag]||(to[tag]=[]);var source=from[tag];for(var i=source.length-1;i>=0;i--)
dest.unshift(source[i])}}
function findMatchingMode(tagInfo,tagText){for(var i=0;i<tagInfo.length;i++){var spec=tagInfo[i];if(!spec[0]||spec[1].test(getAttrValue(tagText,spec[0])))return spec[2];}}
CodeMirror.defineMode("htmlmixed",function(config,parserConfig){var htmlMode=CodeMirror.getMode(config,{name:"xml",htmlMode:true,multilineTagIndentFactor:parserConfig.multilineTagIndentFactor,multilineTagIndentPastTag:parserConfig.multilineTagIndentPastTag});var tags={};var configTags=parserConfig&&parserConfig.tags,configScript=parserConfig&&parserConfig.scriptTypes;addTags(defaultTags,tags);if(configTags)addTags(configTags,tags);if(configScript)for(var i=configScript.length-1;i>=0;i--)
tags.script.unshift(["type",configScript[i].matches,configScript[i].mode])
function html(stream,state){var style=htmlMode.token(stream,state.htmlState),tag=/\btag\b/.test(style),tagName
if(tag&&!/[<>\s\/]/.test(stream.current())&&(tagName=state.htmlState.tagName&&state.htmlState.tagName.toLowerCase())&&tags.hasOwnProperty(tagName)){state.inTag=tagName+" "}else if(state.inTag&&tag&&/>$/.test(stream.current())){var inTag=/^([\S]+) (.*)/.exec(state.inTag)
state.inTag=null
var modeSpec=stream.current()==">"&&findMatchingMode(tags[inTag[1]],inTag[2])
var mode=CodeMirror.getMode(config,modeSpec)
var endTagA=getTagRegexp(inTag[1],true),endTag=getTagRegexp(inTag[1],false);state.token=function(stream,state){if(stream.match(endTagA,false)){state.token=html;state.localState=state.localMode=null;return null;}
return maybeBackup(stream,endTag,state.localMode.token(stream,state.localState));};state.localMode=mode;state.localState=CodeMirror.startState(mode,htmlMode.indent(state.htmlState,"",""));}else if(state.inTag){state.inTag+=stream.current()
if(stream.eol())state.inTag+=" "}
return style;};return{startState:function(){var state=CodeMirror.startState(htmlMode);return{token:html,inTag:null,localMode:null,localState:null,htmlState:state};},copyState:function(state){var local;if(state.localState){local=CodeMirror.copyState(state.localMode,state.localState);}
return{token:state.token,inTag:state.inTag,localMode:state.localMode,localState:local,htmlState:CodeMirror.copyState(htmlMode,state.htmlState)};},token:function(stream,state){return state.token(stream,state);},indent:function(state,textAfter,line){if(!state.localMode||/^\s*<\//.test(textAfter))
return htmlMode.indent(state.htmlState,textAfter,line);else if(state.localMode.indent)
return state.localMode.indent(state.localState,textAfter,line);else
return CodeMirror.Pass;},innerMode:function(state){return{state:state.localState||state.htmlState,mode:state.localMode||htmlMode};}};},"xml","javascript","css");CodeMirror.defineMIME("text/html","htmlmixed");});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"),require("../htmlmixed/htmlmixed"),require("../../addon/mode/multiplex"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror","../htmlmixed/htmlmixed","../../addon/mode/multiplex"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("htmlembedded",function(config,parserConfig){var closeComment=parserConfig.closeComment||"--%>"
return CodeMirror.multiplexingMode(CodeMirror.getMode(config,"htmlmixed"),{open:parserConfig.openComment||"<%--",close:closeComment,delimStyle:"comment",mode:{token:function(stream){stream.skipTo(closeComment)||stream.skipToEnd()
return"comment"}}},{open:parserConfig.open||parserConfig.scriptStartRegex||"<%",close:parserConfig.close||parserConfig.scriptEndRegex||"%>",mode:CodeMirror.getMode(config,parserConfig.scriptingModeSpec)});},"htmlmixed");CodeMirror.defineMIME("application/x-ejs",{name:"htmlembedded",scriptingModeSpec:"javascript"});CodeMirror.defineMIME("application/x-aspx",{name:"htmlembedded",scriptingModeSpec:"text/x-csharp"});CodeMirror.defineMIME("application/x-jsp",{name:"htmlembedded",scriptingModeSpec:"text/x-java"});CodeMirror.defineMIME("application/x-erb",{name:"htmlembedded",scriptingModeSpec:"ruby"});});import'../cm_web_modes/cm_web_modes_cm.js';import'./CodeMirrorUtils.js';import'./TextEditorAutocompleteController.js';import'./CodeMirrorTextEditor.js';import*as CodeMirrorTextEditor from'./CodeMirrorTextEditor.js';import*as CodeMirrorUtils from'./CodeMirrorUtils.js';import*as TextEditorAutocompleteController from'./TextEditorAutocompleteController.js';export{CodeMirrorTextEditor,CodeMirrorUtils,TextEditorAutocompleteController,};export class TextEditorAutocompleteController{constructor(textEditor,codeMirror,config){this._textEditor=textEditor;this._codeMirror=codeMirror;this._config=config;this._initialized=false;this._onScroll=this._onScroll.bind(this);this._onCursorActivity=this._onCursorActivity.bind(this);this._changes=this._changes.bind(this);this._blur=this._blur.bind(this);this._beforeChange=this._beforeChange.bind(this);this._mouseDown=()=>{this.clearAutocomplete();this._tooltipGlassPane.hide();};this._codeMirror.on('changes',this._changes);this._lastHintText='';this._suggestBox=null;this._currentSuggestion=null;this._hintElement=createElementWithClass('span','auto-complete-text');this._tooltipGlassPane=new UI.GlassPane();this._tooltipGlassPane.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);this._tooltipGlassPane.setOutsideClickCallback(this._tooltipGlassPane.hide.bind(this._tooltipGlassPane));this._tooltipElement=createElementWithClass('div','autocomplete-tooltip');const shadowRoot=UI.createShadowRootWithCoreStyles(this._tooltipGlassPane.contentElement,'text_editor/autocompleteTooltip.css');shadowRoot.appendChild(this._tooltipElement);}
_initializeIfNeeded(){if(this._initialized){return;}
this._initialized=true;this._codeMirror.on('scroll',this._onScroll);this._codeMirror.on('cursorActivity',this._onCursorActivity);this._codeMirror.on('mousedown',this._mouseDown);this._codeMirror.on('blur',this._blur);if(this._config.isWordChar){this._codeMirror.on('beforeChange',this._beforeChange);this._dictionary=new Common.TextDictionary();this._addWordsFromText(this._codeMirror.getValue());}}
dispose(){this._codeMirror.off('changes',this._changes);if(this._initialized){this._codeMirror.off('scroll',this._onScroll);this._codeMirror.off('cursorActivity',this._onCursorActivity);this._codeMirror.off('mousedown',this._mouseDown);this._codeMirror.off('blur',this._blur);}
if(this._dictionary){this._codeMirror.off('beforeChange',this._beforeChange);this._dictionary.reset();}}
_beforeChange(codeMirror,changeObject){this._updatedLines=this._updatedLines||{};for(let i=changeObject.from.line;i<=changeObject.to.line;++i){if(this._updatedLines[i]===undefined){this._updatedLines[i]=this._codeMirror.getLine(i);}}}
_addWordsFromText(text){TextUtils.TextUtils.textToWords(text,(this._config.isWordChar),addWord.bind(this));function addWord(word){if(word.length&&(word[0]<'0'||word[0]>'9')){this._dictionary.addWord(word);}}}
_removeWordsFromText(text){TextUtils.TextUtils.textToWords(text,(this._config.isWordChar),word=>this._dictionary.removeWord(word));}
_substituteRange(lineNumber,columnNumber){let range=this._config.substituteRangeCallback?this._config.substituteRangeCallback(lineNumber,columnNumber):null;if(!range&&this._config.isWordChar){range=this._textEditor.wordRangeForCursorPosition(lineNumber,columnNumber,this._config.isWordChar);}
return range;}
_wordsWithQuery(queryRange,substituteRange,force){const external=this._config.suggestionsCallback?this._config.suggestionsCallback(queryRange,substituteRange,force):null;if(external){return external;}
if(!this._dictionary||(!force&&queryRange.isEmpty())){return Promise.resolve([]);}
let completions=this._dictionary.wordsWithPrefix(this._textEditor.text(queryRange));const substituteWord=this._textEditor.text(substituteRange);if(this._dictionary.wordCount(substituteWord)===1){completions=completions.filter(word=>word!==substituteWord);}
completions.sort((a,b)=>this._dictionary.wordCount(b)-this._dictionary.wordCount(a)||a.length-b.length);return Promise.resolve(completions.map(item=>({text:item})));}
_changes(codeMirror,changes){if(!changes.length){return;}
if(this._dictionary&&this._updatedLines){for(const lineNumber in this._updatedLines){this._removeWordsFromText(this._updatedLines[lineNumber]);}
delete this._updatedLines;const linesToUpdate={};for(let changeIndex=0;changeIndex<changes.length;++changeIndex){const changeObject=changes[changeIndex];const editInfo=TextEditor.CodeMirrorUtils.changeObjectToEditOperation(changeObject);for(let i=editInfo.newRange.startLine;i<=editInfo.newRange.endLine;++i){linesToUpdate[i]=this._codeMirror.getLine(i);}}
for(const lineNumber in linesToUpdate){this._addWordsFromText(linesToUpdate[lineNumber]);}}
let singleCharInput=false;let singleCharDelete=false;const cursor=this._codeMirror.getCursor('head');for(let changeIndex=0;changeIndex<changes.length;++changeIndex){const changeObject=changes[changeIndex];if(changeObject.origin==='+input'&&changeObject.text.length===1&&changeObject.text[0].length===1&&changeObject.to.line===cursor.line&&changeObject.to.ch+1===cursor.ch){singleCharInput=true;break;}
if(changeObject.origin==='+delete'&&changeObject.removed.length===1&&changeObject.removed[0].length===1&&changeObject.to.line===cursor.line&&changeObject.to.ch-1===cursor.ch){singleCharDelete=true;break;}}
if(this._queryRange){if(singleCharInput){this._queryRange.endColumn++;}else if(singleCharDelete){this._queryRange.endColumn--;}
if(singleCharDelete||singleCharInput){this._setHint(this._lastHintText);}}
if(singleCharInput||singleCharDelete){setImmediate(this.autocomplete.bind(this));}else{this.clearAutocomplete();}}
_blur(){this.clearAutocomplete();}
_validateSelectionsContexts(mainSelection){const selections=this._codeMirror.listSelections();if(selections.length<=1){return true;}
const mainSelectionContext=this._textEditor.text(mainSelection);for(let i=0;i<selections.length;++i){const wordRange=this._substituteRange(selections[i].head.line,selections[i].head.ch);if(!wordRange){return false;}
const context=this._textEditor.text(wordRange);if(context!==mainSelectionContext){return false;}}
return true;}
autocomplete(force){this._initializeIfNeeded();if(this._codeMirror.somethingSelected()){this._hideSuggestBox();return;}
const cursor=this._codeMirror.getCursor('head');const substituteRange=this._substituteRange(cursor.line,cursor.ch);if(!substituteRange||!this._validateSelectionsContexts(substituteRange)){this._hideSuggestBox();return;}
const queryRange=substituteRange.clone();queryRange.endColumn=cursor.ch;const query=this._textEditor.text(queryRange);let hadSuggestBox=false;if(this._suggestBox){hadSuggestBox=true;}
this._wordsWithQuery(queryRange,substituteRange,force).then(wordsAcquired.bind(this));function wordsAcquired(wordsWithQuery){if(!wordsWithQuery.length||(wordsWithQuery.length===1&&query===wordsWithQuery[0].text)||(!this._suggestBox&&hadSuggestBox)){this._hideSuggestBox();this._onSuggestionsShownForTest([]);return;}
if(!this._suggestBox){this._suggestBox=new UI.SuggestBox(this,20);if(this._config.anchorBehavior){this._suggestBox.setAnchorBehavior(this._config.anchorBehavior);}}
const oldQueryRange=this._queryRange;this._queryRange=queryRange;if(!oldQueryRange||queryRange.startLine!==oldQueryRange.startLine||queryRange.startColumn!==oldQueryRange.startColumn){this._updateAnchorBox();}
this._suggestBox.updateSuggestions(this._anchorBox,wordsWithQuery,true,!this._isCursorAtEndOfLine(),query);if(this._suggestBox.visible){this._tooltipGlassPane.hide();}
this._onSuggestionsShownForTest(wordsWithQuery);}}
_setHint(hint){const query=this._textEditor.text(this._queryRange);if(!hint||!this._isCursorAtEndOfLine()||!hint.startsWith(query)){this._clearHint();return;}
const suffix=hint.substring(query.length).split('\n')[0];this._hintElement.textContent=suffix.trimEndWithMaxLength(10000);const cursor=this._codeMirror.getCursor('to');if(this._hintMarker){const position=this._hintMarker.position();if(!position||!position.equal(TextUtils.TextRange.createFromLocation(cursor.line,cursor.ch))){this._hintMarker.clear();this._hintMarker=null;}}
if(!this._hintMarker){this._hintMarker=this._textEditor.addBookmark(cursor.line,cursor.ch,this._hintElement,TextEditorAutocompleteController.HintBookmark,true);}else if(this._lastHintText!==hint){this._hintMarker.refresh();}
this._lastHintText=hint;}
_clearHint(){if(!this._hintElement.textContent){return;}
this._lastHintText='';this._hintElement.textContent='';if(this._hintMarker){this._hintMarker.refresh();}}
_onSuggestionsShownForTest(suggestions){}
_onSuggestionsHiddenForTest(){}
clearAutocomplete(){this._tooltipGlassPane.hide();this._hideSuggestBox();}
_hideSuggestBox(){if(!this._suggestBox){return;}
this._suggestBox.hide();this._suggestBox=null;this._queryRange=null;this._anchorBox=null;this._currentSuggestion=null;this._textEditor.dispatchEventToListeners(UI.TextEditor.Events.SuggestionChanged);this._clearHint();this._onSuggestionsHiddenForTest();}
keyDown(event){if(this._tooltipGlassPane.isShowing()&&event.keyCode===UI.KeyboardShortcut.Keys.Esc.code){this._tooltipGlassPane.hide();return true;}
if(!this._suggestBox){return false;}
switch(event.keyCode){case UI.KeyboardShortcut.Keys.Tab.code:this._suggestBox.acceptSuggestion();this.clearAutocomplete();return true;case UI.KeyboardShortcut.Keys.End.code:case UI.KeyboardShortcut.Keys.Right.code:if(this._isCursorAtEndOfLine()){this._suggestBox.acceptSuggestion();this.clearAutocomplete();return true;}else{this.clearAutocomplete();return false;}
case UI.KeyboardShortcut.Keys.Left.code:case UI.KeyboardShortcut.Keys.Home.code:this.clearAutocomplete();return false;case UI.KeyboardShortcut.Keys.Esc.code:this.clearAutocomplete();return true;}
return this._suggestBox.keyPressed(event);}
_isCursorAtEndOfLine(){const cursor=this._codeMirror.getCursor('to');return cursor.ch===this._codeMirror.getLine(cursor.line).length;}
applySuggestion(suggestion,isIntermediateSuggestion){const oldSuggestion=this._currentSuggestion;this._currentSuggestion=suggestion;this._setHint(suggestion?suggestion.text:'');if((oldSuggestion?oldSuggestion.text:'')!==(suggestion?suggestion.text:'')){this._textEditor.dispatchEventToListeners(UI.TextEditor.Events.SuggestionChanged);}}
acceptSuggestion(){const selections=this._codeMirror.listSelections().slice();const queryLength=this._queryRange.endColumn-this._queryRange.startColumn;const suggestion=this._currentSuggestion.text;this._codeMirror.operation(()=>{for(let i=selections.length-1;i>=0;--i){const start=selections[i].head;const end=new CodeMirror.Pos(start.line,start.ch-queryLength);this._codeMirror.replaceRange(suggestion,start,end,'+autocomplete');}});}
textWithCurrentSuggestion(){if(!this._queryRange||this._currentSuggestion===null){return this._codeMirror.getValue();}
const selections=this._codeMirror.listSelections().slice();let last={line:0,column:0};let text='';const queryLength=this._queryRange.endColumn-this._queryRange.startColumn;for(const selection of selections){const range=new TextUtils.TextRange(last.line,last.column,selection.head.line,selection.head.ch-queryLength);text+=this._textEditor.text(range);text+=this._currentSuggestion.text;last={line:selection.head.line,column:selection.head.ch};}
const range=new TextUtils.TextRange(last.line,last.column,Infinity,Infinity);text+=this._textEditor.text(range);return text;}
_onScroll(){this._tooltipGlassPane.hide();if(!this._suggestBox){return;}
const cursor=this._codeMirror.getCursor();const scrollInfo=this._codeMirror.getScrollInfo();const topmostLineNumber=this._codeMirror.lineAtHeight(scrollInfo.top,'local');const bottomLine=this._codeMirror.lineAtHeight(scrollInfo.top+scrollInfo.clientHeight,'local');if(cursor.line<topmostLineNumber||cursor.line>bottomLine){this.clearAutocomplete();}else{this._updateAnchorBox();this._suggestBox.setPosition(this._anchorBox);}}
async _updateTooltip(){const cursor=this._codeMirror.getCursor();const tooltip=this._config.tooltipCallback?await this._config.tooltipCallback(cursor.line,cursor.ch):null;const newCursor=this._codeMirror.getCursor();if(newCursor.line!==cursor.line&&newCursor.ch!==cursor.ch){return;}
if(this._suggestBox&&this._suggestBox.visible){return;}
if(!tooltip){this._tooltipGlassPane.hide();return;}
const metrics=this._textEditor.cursorPositionToCoordinates(cursor.line,cursor.ch);if(!metrics){this._tooltipGlassPane.hide();return;}
this._tooltipGlassPane.setContentAnchorBox(new AnchorBox(metrics.x,metrics.y,0,metrics.height));this._tooltipElement.removeChildren();this._tooltipElement.appendChild(tooltip);this._tooltipGlassPane.show((this._textEditor.element.ownerDocument));}
_onCursorActivity(){this._updateTooltip();if(!this._suggestBox){return;}
const cursor=this._codeMirror.getCursor();let shouldCloseAutocomplete=!(cursor.line===this._queryRange.startLine&&this._queryRange.startColumn<=cursor.ch&&cursor.ch<=this._queryRange.endColumn);if(cursor.line===this._queryRange.startLine&&cursor.ch===this._queryRange.endColumn+1){const line=this._codeMirror.getLine(cursor.line);shouldCloseAutocomplete=this._config.isWordChar?!this._config.isWordChar(line.charAt(cursor.ch-1)):false;}
if(shouldCloseAutocomplete){this.clearAutocomplete();}
this._onCursorActivityHandledForTest();}
_onCursorActivityHandledForTest(){}
_updateAnchorBox(){const line=this._queryRange.startLine;const column=this._queryRange.startColumn;const metrics=this._textEditor.cursorPositionToCoordinates(line,column);this._anchorBox=metrics?new AnchorBox(metrics.x,metrics.y,0,metrics.height):null;}}
TextEditorAutocompleteController.HintBookmark=Symbol('hint');self.TextEditor=self.TextEditor||{};TextEditor=TextEditor||{};TextEditor.TextEditorAutocompleteController=TextEditorAutocompleteController;export function toPos(range){return{start:new CodeMirror.Pos(range.startLine,range.startColumn),end:new CodeMirror.Pos(range.endLine,range.endColumn)};}
export function toRange(start,end){return new TextUtils.TextRange(start.line,start.ch,end.line,end.ch);}
export function changeObjectToEditOperation(changeObject){const oldRange=toRange(changeObject.from,changeObject.to);const newRange=oldRange.clone();const linesAdded=changeObject.text.length;if(linesAdded===0){newRange.endLine=newRange.startLine;newRange.endColumn=newRange.startColumn;}else if(linesAdded===1){newRange.endLine=newRange.startLine;newRange.endColumn=newRange.startColumn+changeObject.text[0].length;}else{newRange.endLine=newRange.startLine+linesAdded-1;newRange.endColumn=changeObject.text[linesAdded-1].length;}
return{oldRange:oldRange,newRange:newRange};}
export function pullLines(codeMirror,linesCount){const lines=[];codeMirror.eachLine(0,linesCount,onLineHandle);return lines;function onLineHandle(lineHandle){lines.push(lineHandle.text);}}
export class TokenizerFactory{createTokenizer(mimeType){const mode=CodeMirror.getMode({indentUnit:2},mimeType);const state=CodeMirror.startState(mode);function tokenize(line,callback){const stream=new CodeMirror.StringStream(line);while(!stream.eol()){const style=mode.token(stream,state);const value=stream.current();callback(value,style,stream.start,stream.start+value.length);stream.start=stream.pos;}}
return tokenize;}}
self.TextEditor=self.TextEditor||{};TextEditor=TextEditor||{};TextEditor.CodeMirrorUtils={};TextEditor.CodeMirrorUtils.toPos=toPos;TextEditor.CodeMirrorUtils.toRange=toRange;TextEditor.CodeMirrorUtils.changeObjectToEditOperation=changeObjectToEditOperation;TextEditor.CodeMirrorUtils.pullLines=pullLines;TextEditor.CodeMirrorUtils.TokenizerFactory=TokenizerFactory;export class CodeMirrorTextEditor extends UI.VBox{constructor(options){super();this._options=options;this.registerRequiredCSS('cm/codemirror.css');this.registerRequiredCSS('text_editor/cmdevtools.css');const{indentWithTabs,indentUnit}=CodeMirrorTextEditor._getIndentation(Common.moduleSetting('textEditorIndent').get());this._codeMirror=new CodeMirror(this.element,{devtoolsAccessibleName:options.devtoolsAccessibleName,lineNumbers:options.lineNumbers,matchBrackets:true,smartIndent:true,styleSelectedText:true,electricChars:true,styleActiveLine:true,indentUnit,indentWithTabs,lineWrapping:options.lineWrapping,lineWiseCopyCut:false,tabIndex:0,pollInterval:Math.pow(2,31)-1,inputStyle:'devToolsAccessibleTextArea'});this._codeMirrorElement=this.element.lastElementChild;this._codeMirror._codeMirrorTextEditor=this;Common.moduleSetting('textEditorIndent').addChangeListener(this._updateIndentSize.bind(this));CodeMirror.keyMap['devtools-common']={'Left':'goCharLeft','Right':'goCharRight','Up':'goLineUp','Down':'goLineDown','End':'goLineEnd','Home':'goLineStartSmart','PageUp':'goSmartPageUp','PageDown':'goSmartPageDown','Delete':'delCharAfter','Backspace':'delCharBefore','Tab':'UserIndent','Shift-Tab':'indentLessOrPass','Enter':'newlineAndIndent','Ctrl-Space':'autocomplete','Esc':'dismiss','Ctrl-M':'gotoMatchingBracket'};CodeMirror.keyMap['devtools-pc']={'Ctrl-A':'selectAll','Ctrl-Z':'undoAndReveal','Shift-Ctrl-Z':'redoAndReveal','Ctrl-Y':'redo','Ctrl-Home':'goDocStart','Ctrl-Up':'goDocStart','Ctrl-End':'goDocEnd','Ctrl-Down':'goDocEnd','Ctrl-Left':'goGroupLeft','Ctrl-Right':'goGroupRight','Alt-Left':'moveCamelLeft','Alt-Right':'moveCamelRight','Shift-Alt-Left':'selectCamelLeft','Shift-Alt-Right':'selectCamelRight','Ctrl-Backspace':'delGroupBefore','Ctrl-Delete':'delGroupAfter','Ctrl-/':'toggleComment','Ctrl-D':'selectNextOccurrence','Ctrl-U':'undoLastSelection',fallthrough:'devtools-common'};CodeMirror.keyMap['devtools-mac']={'Cmd-A':'selectAll','Cmd-Z':'undoAndReveal','Shift-Cmd-Z':'redoAndReveal','Cmd-Up':'goDocStart','Cmd-Down':'goDocEnd','Alt-Left':'goGroupLeft','Alt-Right':'goGroupRight','Ctrl-Left':'moveCamelLeft','Ctrl-Right':'moveCamelRight','Ctrl-A':'goLineLeft','Ctrl-E':'goLineRight','Ctrl-B':'goCharLeft','Ctrl-F':'goCharRight','Ctrl-Alt-B':'goGroupLeft','Ctrl-Alt-F':'goGroupRight','Ctrl-H':'delCharBefore','Ctrl-D':'delCharAfter','Ctrl-K':'killLine','Ctrl-T':'transposeChars','Ctrl-P':'goLineUp','Ctrl-N':'goLineDown','Shift-Ctrl-Left':'selectCamelLeft','Shift-Ctrl-Right':'selectCamelRight','Cmd-Left':'goLineStartSmart','Cmd-Right':'goLineEnd','Cmd-Backspace':'delLineLeft','Alt-Backspace':'delGroupBefore','Alt-Delete':'delGroupAfter','Cmd-/':'toggleComment','Cmd-D':'selectNextOccurrence','Cmd-U':'undoLastSelection',fallthrough:'devtools-common'};if(options.bracketMatchingSetting){options.bracketMatchingSetting.addChangeListener(this._enableBracketMatchingIfNeeded,this);}
this._enableBracketMatchingIfNeeded();this._codeMirror.setOption('keyMap',Host.isMac()?'devtools-mac':'devtools-pc');this._codeMirror.setOption('flattenSpans',false);let maxHighlightLength=options.maxHighlightLength;if(typeof maxHighlightLength!=='number'){maxHighlightLength=CodeMirrorTextEditor.maxHighlightLength;}
this._codeMirror.setOption('maxHighlightLength',maxHighlightLength);this._codeMirror.setOption('mode',null);this._codeMirror.setOption('crudeMeasuringFrom',1000);this._shouldClearHistory=true;this._lineSeparator='\n';CodeMirrorTextEditor._fixWordMovement(this._codeMirror);this._selectNextOccurrenceController=new SelectNextOccurrenceController(this,this._codeMirror);this._codeMirror.on('changes',this._changes.bind(this));this._codeMirror.on('beforeSelectionChange',this._beforeSelectionChange.bind(this));this._codeMirror.on('cursorActivity',()=>{this.dispatchEventToListeners(UI.TextEditor.Events.CursorChanged);});this.element.style.overflow='hidden';this._codeMirrorElement.classList.add('source-code');this._codeMirrorElement.classList.add('fill');this._decorations=new Platform.Multimap();this.element.addEventListener('keydown',this._handleKeyDown.bind(this),true);this.element.addEventListener('keydown',this._handlePostKeyDown.bind(this),false);this._needsRefresh=true;this._readOnly=false;this._mimeType='';if(options.mimeType){this.setMimeType(options.mimeType);}
if(options.autoHeight){this._codeMirror.setSize(null,'auto');}
this._placeholderElement=null;if(options.placeholder){this._placeholderElement=createElement('pre');this._placeholderElement.classList.add('placeholder-text');this._placeholderElement.textContent=options.placeholder;this._updatePlaceholder();}}
static autocompleteCommand(codeMirror){const autocompleteController=codeMirror._codeMirrorTextEditor._autocompleteController;if(autocompleteController){autocompleteController.autocomplete(true);}}
static undoLastSelectionCommand(codeMirror){codeMirror._codeMirrorTextEditor._selectNextOccurrenceController.undoLastSelection();}
static selectNextOccurrenceCommand(codeMirror){codeMirror._codeMirrorTextEditor._selectNextOccurrenceController.selectNextOccurrence();}
static moveCamelLeftCommand(shift,codeMirror){codeMirror._codeMirrorTextEditor._doCamelCaseMovement(-1,shift);}
static moveCamelRightCommand(shift,codeMirror){codeMirror._codeMirrorTextEditor._doCamelCaseMovement(1,shift);}
static _getIndentation(indentationValue){const indentWithTabs=/\t/.test(indentationValue);const indentUnit=indentWithTabs?4:indentationValue.length;return{indentWithTabs,indentUnit};}
static _overrideModeWithPrefixedTokens(modeName,tokenPrefix){const oldModeName=modeName+'-old';if(CodeMirror.modes[oldModeName]){return;}
CodeMirror.defineMode(oldModeName,CodeMirror.modes[modeName]);CodeMirror.defineMode(modeName,modeConstructor);function modeConstructor(config,parserConfig){const innerConfig={};for(const i in parserConfig){innerConfig[i]=parserConfig[i];}
innerConfig.name=oldModeName;const codeMirrorMode=CodeMirror.getMode(config,innerConfig);codeMirrorMode.name=modeName;codeMirrorMode.token=tokenOverride.bind(null,codeMirrorMode.token);return codeMirrorMode;}
function tokenOverride(superToken,stream,state){const token=superToken(stream,state);return token?tokenPrefix+token.split(/ +/).join(' '+tokenPrefix):token;}}
static _collectUninstalledModes(mimeType){const installed=_loadedMimeModeExtensions;const nameToExtension=new Map();const extensions=self.runtime.extensions(CodeMirrorMimeMode);for(const extension of extensions){nameToExtension.set(extension.descriptor()['fileName'],extension);}
const modesToLoad=new Set();for(const extension of extensions){const descriptor=extension.descriptor();if(installed.has(extension)||descriptor['mimeTypes'].indexOf(mimeType)===-1){continue;}
modesToLoad.add(extension);const deps=descriptor['dependencies']||[];for(let i=0;i<deps.length;++i){const extension=nameToExtension.get(deps[i]);if(extension&&!installed.has(extension)){modesToLoad.add(extension);}}}
return Array.from(modesToLoad);}
static _installMimeTypeModes(extensions){const promises=extensions.map(extension=>extension.instance().then(installMode.bind(null,extension)));return Promise.all(promises);function installMode(extension,instance){if(_loadedMimeModeExtensions.has(extension)){return;}
const mode=(instance);mode.install(extension);_loadedMimeModeExtensions.add(extension);}}
static _fixWordMovement(codeMirror){function moveLeft(shift,codeMirror){codeMirror.setExtending(shift);const cursor=codeMirror.getCursor('head');codeMirror.execCommand('goGroupLeft');const newCursor=codeMirror.getCursor('head');if(newCursor.ch===0&&newCursor.line!==0){codeMirror.setExtending(false);return;}
const skippedText=codeMirror.getRange(newCursor,cursor,'#');if(/^\s+$/.test(skippedText)){codeMirror.execCommand('goGroupLeft');}
codeMirror.setExtending(false);}
function moveRight(shift,codeMirror){codeMirror.setExtending(shift);const cursor=codeMirror.getCursor('head');codeMirror.execCommand('goGroupRight');const newCursor=codeMirror.getCursor('head');if(newCursor.ch===0&&newCursor.line!==0){codeMirror.setExtending(false);return;}
const skippedText=codeMirror.getRange(cursor,newCursor,'#');if(/^\s+$/.test(skippedText)){codeMirror.execCommand('goGroupRight');}
codeMirror.setExtending(false);}
const modifierKey=Host.isMac()?'Alt':'Ctrl';const leftKey=modifierKey+'-Left';const rightKey=modifierKey+'-Right';const keyMap={};keyMap[leftKey]=moveLeft.bind(null,false);keyMap[rightKey]=moveRight.bind(null,false);keyMap['Shift-'+leftKey]=moveLeft.bind(null,true);keyMap['Shift-'+rightKey]=moveRight.bind(null,true);codeMirror.addKeyMap(keyMap);}
codeMirror(){return this._codeMirror;}
widget(){return this;}
setPlaceholder(placeholder){if(!this._placeholderElement){this._placeholderElement=createElement('pre');this._placeholderElement.classList.add('placeholder-text');}
this._placeholderElement.textContent=placeholder||'';this._updatePlaceholder();}
_normalizePositionForOverlappingColumn(lineNumber,lineLength,charNumber){const linesCount=this._codeMirror.lineCount();let columnNumber=charNumber;if(charNumber<0&&lineNumber>0){--lineNumber;columnNumber=this.line(lineNumber).length;}else if(charNumber>=lineLength&&lineNumber<linesCount-1){++lineNumber;columnNumber=0;}else{columnNumber=Number.constrain(charNumber,0,lineLength);}
return{lineNumber:lineNumber,columnNumber:columnNumber};}
_camelCaseMoveFromPosition(lineNumber,columnNumber,direction){function valid(charNumber,length){return charNumber>=0&&charNumber<length;}
function isWordStart(text,charNumber){const position=charNumber;const nextPosition=charNumber+1;return valid(position,text.length)&&valid(nextPosition,text.length)&&TextUtils.TextUtils.isWordChar(text[position])&&TextUtils.TextUtils.isWordChar(text[nextPosition])&&TextUtils.TextUtils.isUpperCase(text[position])&&TextUtils.TextUtils.isLowerCase(text[nextPosition]);}
function isWordEnd(text,charNumber){const position=charNumber;const prevPosition=charNumber-1;return valid(position,text.length)&&valid(prevPosition,text.length)&&TextUtils.TextUtils.isWordChar(text[position])&&TextUtils.TextUtils.isWordChar(text[prevPosition])&&TextUtils.TextUtils.isUpperCase(text[position])&&TextUtils.TextUtils.isLowerCase(text[prevPosition]);}
function constrainPosition(lineNumber,lineLength,columnNumber){return{lineNumber:lineNumber,columnNumber:Number.constrain(columnNumber,0,lineLength)};}
const text=this.line(lineNumber);const length=text.length;if((columnNumber===length&&direction===1)||(columnNumber===0&&direction===-1)){return this._normalizePositionForOverlappingColumn(lineNumber,length,columnNumber+direction);}
let charNumber=direction===1?columnNumber:columnNumber-1;while(valid(charNumber,length)&&TextUtils.TextUtils.isSpaceChar(text[charNumber])){charNumber+=direction;}
if(!valid(charNumber,length)){return constrainPosition(lineNumber,length,charNumber);}
if(TextUtils.TextUtils.isStopChar(text[charNumber])){while(valid(charNumber,length)&&TextUtils.TextUtils.isStopChar(text[charNumber])){charNumber+=direction;}
if(!valid(charNumber,length)){return constrainPosition(lineNumber,length,charNumber);}
return{lineNumber:lineNumber,columnNumber:direction===-1?charNumber+1:charNumber};}
charNumber+=direction;while(valid(charNumber,length)&&!isWordStart(text,charNumber)&&!isWordEnd(text,charNumber)&&TextUtils.TextUtils.isWordChar(text[charNumber])){charNumber+=direction;}
if(!valid(charNumber,length)){return constrainPosition(lineNumber,length,charNumber);}
if(isWordStart(text,charNumber)||isWordEnd(text,charNumber)){return{lineNumber:lineNumber,columnNumber:charNumber};}
return{lineNumber:lineNumber,columnNumber:direction===-1?charNumber+1:charNumber};}
_doCamelCaseMovement(direction,shift){const selections=this.selections();for(let i=0;i<selections.length;++i){const selection=selections[i];const move=this._camelCaseMoveFromPosition(selection.endLine,selection.endColumn,direction);selection.endLine=move.lineNumber;selection.endColumn=move.columnNumber;if(!shift){selections[i]=selection.collapseToEnd();}}
this.setSelections(selections);}
dispose(){if(this._options.bracketMatchingSetting){this._options.bracketMatchingSetting.removeChangeListener(this._enableBracketMatchingIfNeeded,this);}}
_enableBracketMatchingIfNeeded(){this._codeMirror.setOption('autoCloseBrackets',(this._options.bracketMatchingSetting&&this._options.bracketMatchingSetting.get())?{explode:false}:false);}
wasShown(){if(this._needsRefresh){this.refresh();}}
refresh(){if(this.isShowing()){this._codeMirror.refresh();this._needsRefresh=false;return;}
this._needsRefresh=true;}
willHide(){delete this._editorSizeInSync;}
undo(){this._codeMirror.undo();}
redo(){this._codeMirror.redo();}
_handleKeyDown(e){if(e.key==='Tab'&&Common.moduleSetting('textEditorTabMovesFocus').get()){e.consume(false);return;}
if(this._autocompleteController&&this._autocompleteController.keyDown(e)){e.consume(true);}}
_handlePostKeyDown(e){if(e.defaultPrevented){e.consume(true);}}
configureAutocomplete(config){if(this._autocompleteController){this._autocompleteController.dispose();delete this._autocompleteController;}
if(config){this._autocompleteController=new TextEditor.TextEditorAutocompleteController(this,this._codeMirror,config);}}
cursorPositionToCoordinates(lineNumber,column){if(lineNumber>=this._codeMirror.lineCount()||lineNumber<0||column<0||column>this._codeMirror.getLine(lineNumber).length){return null;}
const metrics=this._codeMirror.cursorCoords(new CodeMirror.Pos(lineNumber,column));return{x:metrics.left,y:metrics.top,height:metrics.bottom-metrics.top};}
coordinatesToCursorPosition(x,y){const element=this.element.ownerDocument.elementFromPoint(x,y);if(!element||!element.isSelfOrDescendant(this._codeMirror.getWrapperElement())){return null;}
const gutterBox=this._codeMirror.getGutterElement().boxInWindow();if(x>=gutterBox.x&&x<=gutterBox.x+gutterBox.width&&y>=gutterBox.y&&y<=gutterBox.y+gutterBox.height){return null;}
const coords=this._codeMirror.coordsChar({left:x,top:y});return TextEditor.CodeMirrorUtils.toRange(coords,coords);}
visualCoordinates(lineNumber,columnNumber){const metrics=this._codeMirror.cursorCoords(new CodeMirror.Pos(lineNumber,columnNumber));return{x:metrics.left,y:metrics.top};}
tokenAtTextPosition(lineNumber,columnNumber){if(lineNumber<0||lineNumber>=this._codeMirror.lineCount()){return null;}
const token=this._codeMirror.getTokenAt(new CodeMirror.Pos(lineNumber,(columnNumber||0)+1));if(!token){return null;}
return{startColumn:token.start,endColumn:token.end,type:token.type};}
isClean(generation){return this._codeMirror.isClean(generation);}
markClean(){return this._codeMirror.changeGeneration(true);}
_hasLongLines(){function lineIterator(lineHandle){if(lineHandle.text.length>CodeMirrorTextEditor.LongLineModeLineLengthThreshold){hasLongLines=true;}
return hasLongLines;}
let hasLongLines=false;this._codeMirror.eachLine(lineIterator);return hasLongLines;}
_enableLongLinesMode(){this._codeMirror.setOption('styleSelectedText',false);}
_disableLongLinesMode(){this._codeMirror.setOption('styleSelectedText',true);}
_updateIndentSize(updatedValue){const{indentWithTabs,indentUnit}=CodeMirrorTextEditor._getIndentation((updatedValue.data));this._codeMirror.setOption('indentUnit',indentUnit);this._codeMirror.setOption('indentWithTabs',indentWithTabs);}
setMimeType(mimeType){this._mimeType=mimeType;const modesToLoad=CodeMirrorTextEditor._collectUninstalledModes(mimeType);if(!modesToLoad.length){setMode.call(this);}else{CodeMirrorTextEditor._installMimeTypeModes(modesToLoad).then(setMode.bind(this));}
function setMode(){const rewrittenMimeType=this.rewriteMimeType(mimeType);if(this._codeMirror.options.mode!==rewrittenMimeType){this._codeMirror.setOption('mode',rewrittenMimeType);}}}
setHighlightMode(mode){this._mimeType='';this._codeMirror.setOption('mode',mode);}
rewriteMimeType(mimeType){return mimeType;}
mimeType(){return this._mimeType;}
setReadOnly(readOnly){if(this._readOnly===readOnly){return;}
this.clearPositionHighlight();this._readOnly=readOnly;this.element.classList.toggle('CodeMirror-readonly',readOnly);this._codeMirror.setOption('readOnly',readOnly);}
readOnly(){return!!this._codeMirror.getOption('readOnly');}
setLineNumberFormatter(formatter){this._codeMirror.setOption('lineNumberFormatter',formatter);}
addKeyDownHandler(handler){this._codeMirror.on('keydown',(CodeMirror,event)=>handler(event));}
addBookmark(lineNumber,columnNumber,element,type,insertBefore){const bookmark=new TextEditorBookMark(this._codeMirror.setBookmark(new CodeMirror.Pos(lineNumber,columnNumber),{widget:element,insertLeft:insertBefore}),type,this);this._updateDecorations(lineNumber);return bookmark;}
bookmarks(range,type){const pos=TextEditor.CodeMirrorUtils.toPos(range);let markers=this._codeMirror.findMarksAt(pos.start);if(!range.isEmpty()){const middleMarkers=this._codeMirror.findMarks(pos.start,pos.end);const endMarkers=this._codeMirror.findMarksAt(pos.end);markers=markers.concat(middleMarkers,endMarkers);}
const bookmarks=[];for(let i=0;i<markers.length;i++){const bookmark=markers[i][TextEditorBookMark._symbol];if(bookmark&&(!type||bookmark.type()===type)){bookmarks.push(bookmark);}}
return bookmarks;}
focus(){this._codeMirror.focus();}
hasFocus(){return this._codeMirror.hasFocus();}
operation(operation){this._codeMirror.operation(operation);}
scrollLineIntoView(lineNumber){this._innerRevealLine(lineNumber,this._codeMirror.getScrollInfo());}
_innerRevealLine(lineNumber,scrollInfo){const topLine=this._codeMirror.lineAtHeight(scrollInfo.top,'local');const bottomLine=this._codeMirror.lineAtHeight(scrollInfo.top+scrollInfo.clientHeight,'local');const linesPerScreen=bottomLine-topLine+1;if(lineNumber<topLine){const topLineToReveal=Math.max(lineNumber-(linesPerScreen/2)+1,0)|0;this._codeMirror.scrollIntoView(new CodeMirror.Pos(topLineToReveal,0));}else if(lineNumber>bottomLine){const bottomLineToReveal=Math.min(lineNumber+(linesPerScreen/2)-1,this.linesCount-1)|0;this._codeMirror.scrollIntoView(new CodeMirror.Pos(bottomLineToReveal,0));}}
addDecoration(element,lineNumber,startColumn,endColumn){const widget=this._codeMirror.addLineWidget(lineNumber,element);let update=null;if(typeof startColumn!=='undefined'){if(typeof endColumn==='undefined'){endColumn=Infinity;}
update=this._updateFloatingDecoration.bind(this,element,lineNumber,startColumn,endColumn);update();}
this._decorations.set(lineNumber,{element:element,update:update,widget:widget});}
_updateFloatingDecoration(element,lineNumber,startColumn,endColumn){const base=this._codeMirror.cursorCoords(new CodeMirror.Pos(lineNumber,0),'page');const start=this._codeMirror.cursorCoords(new CodeMirror.Pos(lineNumber,startColumn),'page');const end=this._codeMirror.charCoords(new CodeMirror.Pos(lineNumber,endColumn),'page');element.style.width=(end.right-start.left)+'px';element.style.left=(start.left-base.left)+'px';}
_updateDecorations(lineNumber){this._decorations.get(lineNumber).forEach(innerUpdateDecorations);function innerUpdateDecorations(decoration){if(decoration.update){decoration.update();}}}
removeDecoration(element,lineNumber){this._decorations.get(lineNumber).forEach(innerRemoveDecoration.bind(this));function innerRemoveDecoration(decoration){if(decoration.element!==element){return;}
this._codeMirror.removeLineWidget(decoration.widget);this._decorations.delete(lineNumber,decoration);}}
revealPosition(lineNumber,columnNumber,shouldHighlight){lineNumber=Number.constrain(lineNumber,0,this._codeMirror.lineCount()-1);if(typeof columnNumber!=='number'){columnNumber=0;}
columnNumber=Number.constrain(columnNumber,0,this._codeMirror.getLine(lineNumber).length);this.clearPositionHighlight();this._highlightedLine=this._codeMirror.getLineHandle(lineNumber);if(!this._highlightedLine){return;}
this.scrollLineIntoView(lineNumber);if(shouldHighlight){this._codeMirror.addLineClass(this._highlightedLine,null,this._readOnly?'cm-readonly-highlight':'cm-highlight');if(!this._readOnly){this._clearHighlightTimeout=setTimeout(this.clearPositionHighlight.bind(this),2000);}}
this.setSelection(TextUtils.TextRange.createFromLocation(lineNumber,columnNumber));}
clearPositionHighlight(){if(this._clearHighlightTimeout){clearTimeout(this._clearHighlightTimeout);}
delete this._clearHighlightTimeout;if(this._highlightedLine){this._codeMirror.removeLineClass(this._highlightedLine,null,this._readOnly?'cm-readonly-highlight':'cm-highlight');}
delete this._highlightedLine;}
elementsToRestoreScrollPositionsFor(){return[];}
_updatePaddingBottom(width,height){if(!this._options.padBottom){return;}
const scrollInfo=this._codeMirror.getScrollInfo();let newPaddingBottom;const linesElement=this._codeMirrorElement.querySelector('.CodeMirror-lines');const lineCount=this._codeMirror.lineCount();if(lineCount<=1){newPaddingBottom=0;}else{newPaddingBottom=Math.max(scrollInfo.clientHeight-this._codeMirror.getLineHandle(this._codeMirror.lastLine()).height,0);}
newPaddingBottom+='px';linesElement.style.paddingBottom=newPaddingBottom;this._codeMirror.setSize(width,height);}
_resizeEditor(){const parentElement=this.element.parentElement;if(!parentElement||!this.isShowing()){return;}
this._codeMirror.operation(()=>{const scrollLeft=this._codeMirror.doc.scrollLeft;const scrollTop=this._codeMirror.doc.scrollTop;const width=parentElement.offsetWidth;const height=parentElement.offsetHeight-this.element.offsetTop;if(this._options.autoHeight){this._codeMirror.setSize(width,'auto');}else{this._codeMirror.setSize(width,height);this._updatePaddingBottom(width,height);}
this._codeMirror.scrollTo(scrollLeft,scrollTop);});}
onResize(){if(this._autocompleteController){this._autocompleteController.clearAutocomplete();}
this._resizeEditor();this._editorSizeInSync=true;if(this._selectionSetScheduled){delete this._selectionSetScheduled;this.setSelection(this._lastSelection);}}
editRange(range,text,origin){const pos=TextEditor.CodeMirrorUtils.toPos(range);this._codeMirror.replaceRange(text,pos.start,pos.end,origin);const newRange=TextEditor.CodeMirrorUtils.toRange(pos.start,this._codeMirror.posFromIndex(this._codeMirror.indexFromPos(pos.start)+text.length));this.dispatchEventToListeners(UI.TextEditor.Events.TextChanged,{oldRange:range,newRange:newRange});return newRange;}
clearAutocomplete(){if(this._autocompleteController){this._autocompleteController.clearAutocomplete();}}
wordRangeForCursorPosition(lineNumber,column,isWordChar){const line=this.line(lineNumber);let wordStart=column;if(column!==0&&isWordChar(line.charAt(column-1))){wordStart=column-1;while(wordStart>0&&isWordChar(line.charAt(wordStart-1))){--wordStart;}}
let wordEnd=column;while(wordEnd<line.length&&isWordChar(line.charAt(wordEnd))){++wordEnd;}
return new TextUtils.TextRange(lineNumber,wordStart,lineNumber,wordEnd);}
_changes(codeMirror,changes){if(!changes.length){return;}
this._updatePlaceholder();const hasOneLine=this._codeMirror.lineCount()===1;if(hasOneLine!==this._hasOneLine){this._resizeEditor();}
this._hasOneLine=hasOneLine;this._decorations.valuesArray().forEach(decoration=>this._codeMirror.removeLineWidget(decoration.widget));this._decorations.clear();const edits=[];let currentEdit;for(let changeIndex=0;changeIndex<changes.length;++changeIndex){const changeObject=changes[changeIndex];const edit=TextEditor.CodeMirrorUtils.changeObjectToEditOperation(changeObject);if(currentEdit&&edit.oldRange.equal(currentEdit.newRange)){currentEdit.newRange=edit.newRange;}else{currentEdit=edit;edits.push(currentEdit);}}
for(let i=0;i<edits.length;i++){this.dispatchEventToListeners(UI.TextEditor.Events.TextChanged,{oldRange:edits[i].oldRange,newRange:edits[i].newRange});}}
_beforeSelectionChange(codeMirror,selection){this._selectNextOccurrenceController.selectionWillChange();}
scrollToLine(lineNumber){const pos=new CodeMirror.Pos(lineNumber,0);const coords=this._codeMirror.charCoords(pos,'local');this._codeMirror.scrollTo(0,coords.top);}
firstVisibleLine(){return this._codeMirror.lineAtHeight(this._codeMirror.getScrollInfo().top,'local');}
scrollTop(){return this._codeMirror.getScrollInfo().top;}
setScrollTop(scrollTop){this._codeMirror.scrollTo(0,scrollTop);}
lastVisibleLine(){const scrollInfo=this._codeMirror.getScrollInfo();return this._codeMirror.lineAtHeight(scrollInfo.top+scrollInfo.clientHeight,'local');}
selection(){const start=this._codeMirror.getCursor('anchor');const end=this._codeMirror.getCursor('head');return TextEditor.CodeMirrorUtils.toRange(start,end);}
selections(){const selectionList=this._codeMirror.listSelections();const result=[];for(let i=0;i<selectionList.length;++i){const selection=selectionList[i];result.push(TextEditor.CodeMirrorUtils.toRange(selection.anchor,selection.head));}
return result;}
lastSelection(){return this._lastSelection;}
setSelection(textRange,dontScroll){this._lastSelection=textRange;if(!this._editorSizeInSync){this._selectionSetScheduled=true;return;}
const pos=TextEditor.CodeMirrorUtils.toPos(textRange);this._codeMirror.setSelection(pos.start,pos.end,{scroll:!dontScroll});}
setSelections(ranges,primarySelectionIndex){const selections=[];for(let i=0;i<ranges.length;++i){const selection=TextEditor.CodeMirrorUtils.toPos(ranges[i]);selections.push({anchor:selection.start,head:selection.end});}
primarySelectionIndex=primarySelectionIndex||0;this._codeMirror.setSelections(selections,primarySelectionIndex,{scroll:false});}
_detectLineSeparator(text){this._lineSeparator=text.indexOf('\r\n')>=0?'\r\n':'\n';}
setText(text){if(text.length>CodeMirrorTextEditor.MaxEditableTextSize){this.configureAutocomplete(null);this.setReadOnly(true);}
this._codeMirror.setValue(text);if(this._shouldClearHistory){this._codeMirror.clearHistory();this._shouldClearHistory=false;}
this._detectLineSeparator(text);if(this._hasLongLines()){this._enableLongLinesMode();}else{this._disableLongLinesMode();}
if(!this.isShowing()){this.refresh();}}
text(textRange){if(!textRange){return this._codeMirror.getValue(this._lineSeparator);}
const pos=TextEditor.CodeMirrorUtils.toPos(textRange.normalize());return this._codeMirror.getRange(pos.start,pos.end,this._lineSeparator);}
textWithCurrentSuggestion(){if(!this._autocompleteController){return this.text();}
return this._autocompleteController.textWithCurrentSuggestion();}
fullRange(){const lineCount=this.linesCount;const lastLine=this._codeMirror.getLine(lineCount-1);return TextEditor.CodeMirrorUtils.toRange(new CodeMirror.Pos(0,0),new CodeMirror.Pos(lineCount-1,lastLine.length));}
currentLineNumber(){return this._codeMirror.getCursor().line;}
line(lineNumber){return this._codeMirror.getLine(lineNumber);}
get linesCount(){return this._codeMirror.lineCount();}
newlineAndIndent(){this._codeMirror.execCommand('newlineAndIndent');}
textEditorPositionHandle(lineNumber,columnNumber){return new CodeMirrorPositionHandle(this._codeMirror,new CodeMirror.Pos(lineNumber,columnNumber));}
_updatePlaceholder(){if(!this._placeholderElement){return;}
this._placeholderElement.remove();if(this.linesCount===1&&!this.line(0)){this._codeMirror.display.lineSpace.insertBefore(this._placeholderElement,this._codeMirror.display.lineSpace.firstChild);}}}
CodeMirrorTextEditor.maxHighlightLength=1000;CodeMirrorTextEditor.LongLineModeLineLengthThreshold=2000;CodeMirrorTextEditor.MaxEditableTextSize=1024*1024*10;CodeMirrorTextEditor._overrideModeWithPrefixedTokens('css','css-');CodeMirrorTextEditor._overrideModeWithPrefixedTokens('javascript','js-');CodeMirrorTextEditor._overrideModeWithPrefixedTokens('xml','xml-');CodeMirror.commands.autocomplete=CodeMirrorTextEditor.autocompleteCommand;CodeMirror.commands.undoLastSelection=CodeMirrorTextEditor.undoLastSelectionCommand;CodeMirror.commands.selectNextOccurrence=CodeMirrorTextEditor.selectNextOccurrenceCommand;CodeMirror.commands.moveCamelLeft=CodeMirrorTextEditor.moveCamelLeftCommand.bind(null,false);CodeMirror.commands.selectCamelLeft=CodeMirrorTextEditor.moveCamelLeftCommand.bind(null,true);CodeMirror.commands.moveCamelRight=CodeMirrorTextEditor.moveCamelRightCommand.bind(null,false);CodeMirror.commands.selectCamelRight=CodeMirrorTextEditor.moveCamelRightCommand.bind(null,true);CodeMirror.commands.UserIndent=function(codeMirror){const ranges=codeMirror.listSelections();if(ranges.length===0){return;}
if(codeMirror.somethingSelected()){codeMirror.indentSelection('add');return;}
const indentation=Common.moduleSetting('textEditorIndent').get();codeMirror.replaceSelection(indentation);};CodeMirror.commands.indentLessOrPass=function(codeMirror){const selections=codeMirror.listSelections();if(selections.length===1){const range=TextEditor.CodeMirrorUtils.toRange(selections[0].anchor,selections[0].head);if(range.isEmpty()&&!/^\s/.test(codeMirror.getLine(range.startLine))){return CodeMirror.Pass;}}
codeMirror.execCommand('indentLess');};CodeMirror.commands.gotoMatchingBracket=function(codeMirror){const updatedSelections=[];const selections=codeMirror.listSelections();for(let i=0;i<selections.length;++i){const selection=selections[i];const cursor=selection.head;const matchingBracket=codeMirror.findMatchingBracket(cursor,false,{maxScanLines:10000});let updatedHead=cursor;if(matchingBracket&&matchingBracket.match){const columnCorrection=CodeMirror.cmpPos(matchingBracket.from,cursor)===0?1:0;updatedHead=new CodeMirror.Pos(matchingBracket.to.line,matchingBracket.to.ch+columnCorrection);}
updatedSelections.push({anchor:updatedHead,head:updatedHead});}
codeMirror.setSelections(updatedSelections);};CodeMirror.commands.undoAndReveal=function(codemirror){const scrollInfo=codemirror.getScrollInfo();codemirror.execCommand('undo');const cursor=codemirror.getCursor('start');codemirror._codeMirrorTextEditor._innerRevealLine(cursor.line,scrollInfo);const autocompleteController=codemirror._codeMirrorTextEditor._autocompleteController;if(autocompleteController){autocompleteController.clearAutocomplete();}};CodeMirror.commands.redoAndReveal=function(codemirror){const scrollInfo=codemirror.getScrollInfo();codemirror.execCommand('redo');const cursor=codemirror.getCursor('start');codemirror._codeMirrorTextEditor._innerRevealLine(cursor.line,scrollInfo);const autocompleteController=codemirror._codeMirrorTextEditor._autocompleteController;if(autocompleteController){autocompleteController.clearAutocomplete();}};CodeMirror.commands.dismiss=function(codemirror){const selections=codemirror.listSelections();const selection=selections[0];if(selections.length===1){if(TextEditor.CodeMirrorUtils.toRange(selection.anchor,selection.head).isEmpty()){return CodeMirror.Pass;}
codemirror.setSelection(selection.anchor,selection.anchor,{scroll:false});codemirror._codeMirrorTextEditor.scrollLineIntoView(selection.anchor.line);return;}
codemirror.setSelection(selection.anchor,selection.head,{scroll:false});codemirror._codeMirrorTextEditor.scrollLineIntoView(selection.anchor.line);};CodeMirror.commands.goSmartPageUp=function(codemirror){if(codemirror._codeMirrorTextEditor.selection().equal(TextUtils.TextRange.createFromLocation(0,0))){return CodeMirror.Pass;}
codemirror.execCommand('goPageUp');};CodeMirror.commands.goSmartPageDown=function(codemirror){if(codemirror._codeMirrorTextEditor.selection().equal(codemirror._codeMirrorTextEditor.fullRange().collapseToEnd())){return CodeMirror.Pass;}
codemirror.execCommand('goPageDown');};export class CodeMirrorPositionHandle{constructor(codeMirror,pos){this._codeMirror=codeMirror;this._lineHandle=codeMirror.getLineHandle(pos.line);this._columnNumber=pos.ch;}
resolve(){const lineNumber=this._lineHandle?this._codeMirror.getLineNumber(this._lineHandle):null;if(typeof lineNumber!=='number'){return null;}
return{lineNumber:lineNumber,columnNumber:this._columnNumber};}
equal(argPositionHandle){const positionHandle=(argPositionHandle);return positionHandle._lineHandle===this._lineHandle&&positionHandle._columnNumber===this._columnNumber&&positionHandle._codeMirror===this._codeMirror;}}
export class SelectNextOccurrenceController{constructor(textEditor,codeMirror){this._textEditor=textEditor;this._codeMirror=codeMirror;}
selectionWillChange(){if(!this._muteSelectionListener){delete this._fullWordSelection;}}
_findRange(selections,range){for(let i=0;i<selections.length;++i){if(range.equal(selections[i])){return true;}}
return false;}
undoLastSelection(){this._muteSelectionListener=true;this._codeMirror.execCommand('undoSelection');this._muteSelectionListener=false;}
selectNextOccurrence(){const selections=this._textEditor.selections();let anyEmptySelection=false;for(let i=0;i<selections.length;++i){const selection=selections[i];anyEmptySelection=anyEmptySelection||selection.isEmpty();if(selection.startLine!==selection.endLine){return;}}
if(anyEmptySelection){this._expandSelectionsToWords(selections);return;}
const last=selections[selections.length-1];let next=last;do{next=this._findNextOccurrence(next,!!this._fullWordSelection);}while(next&&this._findRange(selections,next)&&!next.equal(last));if(!next){return;}
selections.push(next);this._muteSelectionListener=true;this._textEditor.setSelections(selections,selections.length-1);delete this._muteSelectionListener;this._textEditor.scrollLineIntoView(next.startLine);}
_expandSelectionsToWords(selections){const newSelections=[];for(let i=0;i<selections.length;++i){const selection=selections[i];const startRangeWord=this._textEditor.wordRangeForCursorPosition(selection.startLine,selection.startColumn,TextUtils.TextUtils.isWordChar)||TextUtils.TextRange.createFromLocation(selection.startLine,selection.startColumn);const endRangeWord=this._textEditor.wordRangeForCursorPosition(selection.endLine,selection.endColumn,TextUtils.TextUtils.isWordChar)||TextUtils.TextRange.createFromLocation(selection.endLine,selection.endColumn);const newSelection=new TextUtils.TextRange(startRangeWord.startLine,startRangeWord.startColumn,endRangeWord.endLine,endRangeWord.endColumn);newSelections.push(newSelection);}
this._textEditor.setSelections(newSelections,newSelections.length-1);this._fullWordSelection=true;}
_findNextOccurrence(range,fullWord){range=range.normalize();let matchedLineNumber;let matchedColumnNumber;const textToFind=this._textEditor.text(range);function findWordInLine(wordRegex,lineNumber,lineText,from,to){if(typeof matchedLineNumber==='number'){return true;}
wordRegex.lastIndex=from;const result=wordRegex.exec(lineText);if(!result||result.index+textToFind.length>to){return false;}
matchedLineNumber=lineNumber;matchedColumnNumber=result.index;return true;}
let iteratedLineNumber;function lineIterator(regex,lineHandle){if(findWordInLine(regex,iteratedLineNumber++,lineHandle.text,0,lineHandle.text.length)){return true;}}
let regexSource=textToFind.escapeForRegExp();if(fullWord){regexSource='\\b'+regexSource+'\\b';}
const wordRegex=new RegExp(regexSource,'g');const currentLineText=this._codeMirror.getLine(range.startLine);findWordInLine(wordRegex,range.startLine,currentLineText,range.endColumn,currentLineText.length);iteratedLineNumber=range.startLine+1;this._codeMirror.eachLine(range.startLine+1,this._codeMirror.lineCount(),lineIterator.bind(null,wordRegex));iteratedLineNumber=0;this._codeMirror.eachLine(0,range.startLine,lineIterator.bind(null,wordRegex));findWordInLine(wordRegex,range.startLine,currentLineText,0,range.startColumn);if(typeof matchedLineNumber!=='number'){return null;}
return new TextUtils.TextRange(matchedLineNumber,matchedColumnNumber,matchedLineNumber,matchedColumnNumber+textToFind.length);}}
export class TextEditorPositionHandle{resolve(){}
equal(positionHandle){}}
export const _loadedMimeModeExtensions=new Set();export class CodeMirrorMimeMode{async install(extension){}}
export class TextEditorBookMark{constructor(marker,type,editor){marker[TextEditorBookMark._symbol]=this;this._marker=marker;this._type=type;this._editor=editor;}
clear(){const position=this._marker.find();this._marker.clear();if(position){this._editor._updateDecorations(position.line);}}
refresh(){this._marker.changed();const position=this._marker.find();if(position){this._editor._updateDecorations(position.line);}}
type(){return this._type;}
position(){const pos=this._marker.find();return pos?TextUtils.TextRange.createFromLocation(pos.line,pos.ch):null;}}
TextEditorBookMark._symbol=Symbol('TextEditorBookMark');export class CodeMirrorTextEditorFactory{createEditor(options){return new CodeMirrorTextEditor(options);}}
CodeMirror.inputStyles.devToolsAccessibleTextArea=class extends CodeMirror.inputStyles.textarea{init(display){super.init(display);UI.ARIAUtils.setAccessibleName(this.textarea,this.cm.options.devtoolsAccessibleName||ls`Code editor`);this.textarea.addEventListener('compositionstart',this._onCompositionStart.bind(this));}
_onCompositionStart(){if(this.textarea.selectionEnd===this.textarea.value.length){return;}
this.textarea.value=this.textarea.value.substring(0,this.textarea.selectionEnd);this.textarea.setSelectionRange(this.textarea.value.length,this.textarea.value.length);this.prevInput=this.textarea.value;}
reset(typing){if(typing||this.contextMenuPending||this.composing||this.cm.somethingSelected()){super.reset(typing);return;}
const cursor=this.cm.getCursor();let start,end;if(this.cm.options.lineWrapping){const top=this.cm.charCoords(cursor,'page').top;start=this.cm.coordsChar({left:-Infinity,top});end=this.cm.coordsChar({left:Infinity,top});}else{const offset=Math.floor(cursor.ch/1000)*1000;start={ch:offset,line:cursor.line};end={ch:offset+1000,line:cursor.line};}
this.textarea.value=this.cm.getRange(start,end);const caretPosition=cursor.ch-start.ch;this.textarea.setSelectionRange(caretPosition,caretPosition);this.prevInput=this.textarea.value;}
poll(){if(this.contextMenuPending||this.composing){return super.poll();}
const text=this.textarea.value;let start=0;const length=Math.min(this.prevInput.length,text.length);while(start<length&&this.prevInput[start]===text[start]){++start;}
let end=0;while(end<length-start&&this.prevInput[this.prevInput.length-end-1]===text[text.length-end-1]){++end;}
const placeholder=this.textarea;this.textarea=(createElement('textarea'));this.textarea.value=text.substring(start,text.length-end);this.textarea.setSelectionRange(placeholder.selectionStart-start,placeholder.selectionEnd-start);this.prevInput='';const result=super.poll();this.prevInput=text;this.textarea=placeholder;return result;}};self.TextEditor=self.TextEditor||{};TextEditor=TextEditor||{};TextEditor.CodeMirrorTextEditor=CodeMirrorTextEditor;TextEditor.CodeMirrorTextEditor.SelectNextOccurrenceController=SelectNextOccurrenceController;TextEditor.TextEditorPositionHandle=TextEditorPositionHandle;TextEditor.CodeMirrorTextEditor._loadedMimeModeExtensions=_loadedMimeModeExtensions;TextEditor.CodeMirrorPositionHandle=CodeMirrorPositionHandle;TextEditor.CodeMirrorMimeMode=CodeMirrorMimeMode;TextEditor.TextEditorBookMark=TextEditorBookMark;TextEditor.CodeMirrorTextEditorFactory=CodeMirrorTextEditorFactory;TextEditor.CodeMirrorTextEditor.Decoration;import'./FilteredListWidget.js';import'./QuickOpen.js';import'./CommandMenu.js';import'./HelpQuickOpen.js';import*as CommandMenu from'./CommandMenu.js';import*as FilteredListWidget from'./FilteredListWidget.js';import*as HelpQuickOpen from'./HelpQuickOpen.js';import*as QuickOpen from'./QuickOpen.js';export{CommandMenu,FilteredListWidget,HelpQuickOpen,QuickOpen,};export const _history=[];export class QuickOpenImpl{constructor(){this._prefix=null;this._query='';this._providers=new Map();this._prefixes=[];this._filteredListWidget=null;self.runtime.extensions(QuickOpen.FilteredListWidget.Provider).forEach(this._addProvider.bind(this));this._prefixes.sort((a,b)=>b.length-a.length);}
static show(query){const quickOpen=new this();const filteredListWidget=new QuickOpen.FilteredListWidget(null,this._history,quickOpen._queryChanged.bind(quickOpen));quickOpen._filteredListWidget=filteredListWidget;filteredListWidget.setPlaceholder(ls`Type '?' to see available commands`,ls`Type question mark to see available commands`);filteredListWidget.showAsDialog();filteredListWidget.setQuery(query);}
_addProvider(extension){const prefix=extension.descriptor()['prefix'];this._prefixes.push(prefix);this._providers.set(prefix,(extension.instance.bind(extension)));}
_queryChanged(query){const prefix=this._prefixes.find(prefix=>query.startsWith(prefix));if(typeof prefix!=='string'||this._prefix===prefix){return;}
this._prefix=prefix;this._filteredListWidget.setPrefix(prefix);this._filteredListWidget.setProvider(null);this._providers.get(prefix)().then(provider=>{if(this._prefix!==prefix){return;}
this._filteredListWidget.setProvider(provider);this._providerLoadedForTest(provider);});}
_providerLoadedForTest(provider){}}
export class ShowActionDelegate{handleAction(context,actionId){switch(actionId){case'quickOpen.show':QuickOpenImpl.show('');return true;}
return false;}}
self.QuickOpen=self.QuickOpen||{};QuickOpen=QuickOpen||{};QuickOpen.QuickOpen=QuickOpenImpl;QuickOpen.QuickOpen._history=_history;QuickOpen.QuickOpen.ShowActionDelegate=ShowActionDelegate;export class HelpQuickOpen extends QuickOpen.FilteredListWidget.Provider{constructor(){super();this._providers=[];self.runtime.extensions(QuickOpen.FilteredListWidget.Provider).forEach(this._addProvider.bind(this));}
_addProvider(extension){if(extension.title()){this._providers.push({prefix:extension.descriptor()['prefix'],title:extension.title()});}}
itemCount(){return this._providers.length;}
itemKeyAt(itemIndex){return this._providers[itemIndex].prefix;}
itemScoreAt(itemIndex,query){return-this._providers[itemIndex].prefix.length;}
renderItem(itemIndex,query,titleElement,subtitleElement){const provider=this._providers[itemIndex];const prefixElement=titleElement.createChild('span','monospace');prefixElement.textContent=(provider.prefix||'\u2026')+' ';titleElement.createTextChild(provider.title);}
selectItem(itemIndex,promptValue){if(itemIndex!==null){QuickOpen.QuickOpen.show(this._providers[itemIndex].prefix);}}
renderAsTwoRows(){return false;}}
self.QuickOpen=self.QuickOpen||{};QuickOpen=QuickOpen||{};QuickOpen.HelpQuickOpen=HelpQuickOpen;export class FilteredListWidget extends UI.VBox{constructor(provider,promptHistory,queryChangedCallback){super(true);this._promptHistory=promptHistory||[];this.contentElement.classList.add('filtered-list-widget');this.contentElement.addEventListener('keydown',this._onKeyDown.bind(this),true);UI.ARIAUtils.markAsCombobox(this.contentElement);this.registerRequiredCSS('quick_open/filteredListWidget.css');this._promptElement=this.contentElement.createChild('div','filtered-list-widget-input');UI.ARIAUtils.setAccessibleName(this._promptElement,ls`Quick open prompt`);this._promptElement.setAttribute('spellcheck','false');this._promptElement.setAttribute('contenteditable','plaintext-only');this._prompt=new UI.TextPrompt();this._prompt.initialize(()=>Promise.resolve([]));const promptProxy=this._prompt.attach(this._promptElement);promptProxy.addEventListener('input',this._onInput.bind(this),false);promptProxy.classList.add('filtered-list-widget-prompt-element');this._bottomElementsContainer=this.contentElement.createChild('div','vbox');this._progressElement=this._bottomElementsContainer.createChild('div','filtered-list-widget-progress');this._progressBarElement=this._progressElement.createChild('div','filtered-list-widget-progress-bar');this._items=new UI.ListModel();this._list=new UI.ListControl(this._items,this,UI.ListMode.EqualHeightItems);this._itemElementsContainer=this._list.element;this._itemElementsContainer.classList.add('container');this._bottomElementsContainer.appendChild(this._itemElementsContainer);this._itemElementsContainer.addEventListener('click',this._onClick.bind(this),false);UI.ARIAUtils.markAsListBox(this._itemElementsContainer);UI.ARIAUtils.setControls(this._promptElement,this._itemElementsContainer);UI.ARIAUtils.setAutocomplete(this._promptElement,UI.ARIAUtils.AutocompleteInteractionModel.list);this._notFoundElement=this._bottomElementsContainer.createChild('div','not-found-text');this._notFoundElement.classList.add('hidden');this.setDefaultFocusedElement(this._promptElement);this._prefix='';this._provider=provider;this._queryChangedCallback=queryChangedCallback;}
static highlightRanges(element,query,caseInsensitive){if(!query){return false;}
function rangesForMatch(text,query){const opcodes=Diff.Diff.charDiff(query,text);let offset=0;const ranges=[];for(let i=0;i<opcodes.length;++i){const opcode=opcodes[i];if(opcode[0]===Diff.Diff.Operation.Equal){ranges.push(new TextUtils.SourceRange(offset,opcode[1].length));}else if(opcode[0]!==Diff.Diff.Operation.Insert){return null;}
offset+=opcode[1].length;}
return ranges;}
const text=element.textContent;let ranges=rangesForMatch(text,query);if(!ranges||caseInsensitive){ranges=rangesForMatch(text.toUpperCase(),query.toUpperCase());}
if(ranges){UI.highlightRangesWithStyleClass(element,ranges,'highlight');return true;}
return false;}
setPlaceholder(placeholder,ariaPlaceholder){this._prompt.setPlaceholder(placeholder,ariaPlaceholder);}
showAsDialog(){this._dialog=new UI.Dialog();UI.ARIAUtils.setAccessibleName(this._dialog.contentElement,ls`Quick open`);this._dialog.setMaxContentSize(new UI.Size(504,340));this._dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactWidthMaxHeight);this._dialog.setContentPosition(null,22);this.show(this._dialog.contentElement);UI.ARIAUtils.setExpanded(this.contentElement,true);this._dialog.show();}
setPrefix(prefix){this._prefix=prefix;}
setProvider(provider){if(provider===this._provider){return;}
if(this._provider){this._provider.detach();}
this._clearTimers();this._provider=provider;if(this.isShowing()){this._attachProvider();}}
_attachProvider(){this._items.replaceAll([]);this._list.invalidateItemHeight();if(this._provider){this._provider.setRefreshCallback(this._itemsLoaded.bind(this,this._provider));this._provider.attach();}
this._itemsLoaded(this._provider);}
_value(){return this._prompt.text().trim();}
_cleanValue(){return this._value().substring(this._prefix.length);}
wasShown(){this._attachProvider();}
willHide(){if(this._provider){this._provider.detach();}
this._clearTimers();UI.ARIAUtils.setExpanded(this.contentElement,false);}
_clearTimers(){clearTimeout(this._filterTimer);clearTimeout(this._scoringTimer);clearTimeout(this._loadTimeout);delete this._filterTimer;delete this._scoringTimer;delete this._loadTimeout;delete this._refreshListWithCurrentResult;}
_onEnter(event){if(!this._provider){return;}
const selectedIndexInProvider=this._provider.itemCount()?this._list.selectedItem():null;this._selectItem(selectedIndexInProvider);if(this._dialog){this._dialog.hide();}}
_itemsLoaded(provider){if(this._loadTimeout||provider!==this._provider){return;}
this._loadTimeout=setTimeout(this._updateAfterItemsLoaded.bind(this),0);}
_updateAfterItemsLoaded(){delete this._loadTimeout;this._filterItems();}
createElementForItem(item){const itemElement=createElement('div');itemElement.className='filtered-list-widget-item '+(this._provider.renderAsTwoRows()?'two-rows':'one-row');const titleElement=itemElement.createChild('div','filtered-list-widget-title');const subtitleElement=itemElement.createChild('div','filtered-list-widget-subtitle');subtitleElement.textContent='\u200B';this._provider.renderItem(item,this._cleanValue(),titleElement,subtitleElement);UI.ARIAUtils.markAsOption(itemElement);return itemElement;}
heightForItem(item){return 0;}
isItemSelectable(item){return true;}
selectedItemChanged(from,to,fromElement,toElement){if(fromElement){fromElement.classList.remove('selected');}
if(toElement){toElement.classList.add('selected');}
UI.ARIAUtils.setActiveDescendant(this._promptElement,toElement);}
_onClick(event){const item=this._list.itemForNode((event.target));if(item===null){return;}
event.consume(true);this._selectItem(item);if(this._dialog){this._dialog.hide();}}
setQuery(query){this._prompt.focus();this._prompt.setText(query);this._queryChanged();this._prompt.autoCompleteSoon(true);this._scheduleFilter();}
_tabKeyPressed(){const userEnteredText=this._prompt.text();let completion;for(let i=this._promptHistory.length-1;i>=0;i--){if(this._promptHistory[i]!==userEnteredText&&this._promptHistory[i].startsWith(userEnteredText)){completion=this._promptHistory[i];break;}}
if(!completion){return false;}
this._prompt.focus();this._prompt.setText(completion);this._prompt.setDOMSelection(userEnteredText.length,completion.length);this._scheduleFilter();return true;}
_itemsFilteredForTest(){}
_filterItems(){delete this._filterTimer;if(this._scoringTimer){clearTimeout(this._scoringTimer);delete this._scoringTimer;if(this._refreshListWithCurrentResult){this._refreshListWithCurrentResult();}}
if(!this._provider){this._bottomElementsContainer.classList.toggle('hidden',true);this._itemsFilteredForTest();return;}
this._bottomElementsContainer.classList.toggle('hidden',false);this._progressBarElement.style.transform='scaleX(0)';this._progressBarElement.classList.remove('filtered-widget-progress-fade');this._progressBarElement.classList.remove('hidden');const query=this._provider.rewriteQuery(this._cleanValue());this._query=query;const filterRegex=query?String.filterRegex(query):null;const filteredItems=[];const bestScores=[];const bestItems=[];const bestItemsToCollect=100;let minBestScore=0;const overflowItems=[];const scoreStartTime=window.performance.now();const maxWorkItems=Number.constrain(10,500,(this._provider.itemCount()/10)|0);scoreItems.call(this,0);function compareIntegers(a,b){return b-a;}
function scoreItems(fromIndex){delete this._scoringTimer;let workDone=0;let i;for(i=fromIndex;i<this._provider.itemCount()&&workDone<maxWorkItems;++i){if(filterRegex&&!filterRegex.test(this._provider.itemKeyAt(i))){continue;}
const score=this._provider.itemScoreAt(i,query);if(query){workDone++;}
if(score>minBestScore||bestScores.length<bestItemsToCollect){const index=bestScores.upperBound(score,compareIntegers);bestScores.splice(index,0,score);bestItems.splice(index,0,i);if(bestScores.length>bestItemsToCollect){overflowItems.push(bestItems.peekLast());bestScores.length=bestItemsToCollect;bestItems.length=bestItemsToCollect;}
minBestScore=bestScores.peekLast();}else{filteredItems.push(i);}}
this._refreshListWithCurrentResult=this._refreshList.bind(this,bestItems,overflowItems,filteredItems);if(i<this._provider.itemCount()){this._scoringTimer=setTimeout(scoreItems.bind(this,i),0);if(window.performance.now()-scoreStartTime>50){this._progressBarElement.style.transform='scaleX('+i/this._provider.itemCount()+')';}
return;}
if(window.performance.now()-scoreStartTime>100){this._progressBarElement.style.transform='scaleX(1)';this._progressBarElement.classList.add('filtered-widget-progress-fade');}else{this._progressBarElement.classList.add('hidden');}
this._refreshListWithCurrentResult();}}
_refreshList(bestItems,overflowItems,filteredItems){delete this._refreshListWithCurrentResult;filteredItems=[].concat(bestItems,overflowItems,filteredItems);this._updateNotFoundMessage(!!filteredItems.length);const oldHeight=this._list.element.offsetHeight;this._items.replaceAll(filteredItems);if(filteredItems.length){this._list.selectItem(filteredItems[0]);}
if(this._list.element.offsetHeight!==oldHeight){this._list.viewportResized();}
this._itemsFilteredForTest();}
_updateNotFoundMessage(hasItems){this._list.element.classList.toggle('hidden',!hasItems);this._notFoundElement.classList.toggle('hidden',hasItems);if(!hasItems){this._notFoundElement.textContent=this._provider.notFoundText(this._cleanValue());UI.ARIAUtils.alert(this._notFoundElement.textContent,this._notFoundElement);}}
_onInput(){this._queryChanged();this._scheduleFilter();}
_queryChanged(){if(this._queryChangedCallback){this._queryChangedCallback(this._value());}
if(this._provider){this._provider.queryChanged(this._cleanValue());}}
_onKeyDown(event){let handled=false;switch(event.key){case'Enter':this._onEnter(event);return;case'Tab':handled=this._tabKeyPressed();break;case'ArrowUp':handled=this._list.selectPreviousItem(true,false);break;case'ArrowDown':handled=this._list.selectNextItem(true,false);break;case'PageUp':handled=this._list.selectItemPreviousPage(false);break;case'PageDown':handled=this._list.selectItemNextPage(false);break;}
if(handled){event.consume(true);}}
_scheduleFilter(){if(this._filterTimer){return;}
this._filterTimer=setTimeout(this._filterItems.bind(this),0);}
_selectItem(itemIndex){this._promptHistory.push(this._value());if(this._promptHistory.length>100){this._promptHistory.shift();}
this._provider.selectItem(itemIndex,this._cleanValue());}}
export class Provider{setRefreshCallback(refreshCallback){this._refreshCallback=refreshCallback;}
attach(){}
itemCount(){return 0;}
itemKeyAt(itemIndex){return'';}
itemScoreAt(itemIndex,query){return 1;}
renderItem(itemIndex,query,titleElement,subtitleElement){}
renderAsTwoRows(){return false;}
selectItem(itemIndex,promptValue){}
refresh(){this._refreshCallback();}
rewriteQuery(query){return query;}
queryChanged(query){}
notFoundText(query){return Common.UIString('No results found');}
detach(){}}
self.QuickOpen=self.QuickOpen||{};QuickOpen=QuickOpen||{};QuickOpen.FilteredListWidget=FilteredListWidget;QuickOpen.FilteredListWidget.Provider=Provider;export class CommandMenu{constructor(){this._commands=[];this._loadCommands();}
static createCommand(category,keys,title,shortcut,executeHandler,availableHandler){const keyList=keys.split(',');let key='';keyList.forEach(k=>{key+=(ls(k.trim())+'\0');});return new Command(category,title,key,shortcut,executeHandler,availableHandler);}
static createSettingCommand(extension,title,value){const category=extension.descriptor()['category']||'';const tags=extension.descriptor()['tags']||'';const setting=Common.settings.moduleSetting(extension.descriptor()['settingName']);return QuickOpen.CommandMenu.createCommand(ls(category),tags,title,'',setting.set.bind(setting,value),availableHandler);function availableHandler(){return setting.get()!==value;}}
static createActionCommand(action){const shortcut=UI.shortcutRegistry.shortcutTitleForAction(action.id())||'';return QuickOpen.CommandMenu.createCommand(action.category(),action.tags(),action.title(),shortcut,action.execute.bind(action));}
static createRevealViewCommand(extension,category){const viewId=extension.descriptor()['id'];const executeHandler=UI.viewManager.showView.bind(UI.viewManager,viewId);const tags=extension.descriptor()['tags']||'';return QuickOpen.CommandMenu.createCommand(category,tags,Common.UIString('Show %s',extension.title()),'',executeHandler);}
_loadCommands(){const locations=new Map();self.runtime.extensions(UI.ViewLocationResolver).forEach(extension=>{const category=extension.descriptor()['category'];const name=extension.descriptor()['name'];if(category&&name){locations.set(name,category);}});const viewExtensions=self.runtime.extensions('view');for(const extension of viewExtensions){const category=locations.get(extension.descriptor()['location']);if(category){this._commands.push(QuickOpen.CommandMenu.createRevealViewCommand(extension,ls(category)));}}
const settingExtensions=self.runtime.extensions('setting');for(const extension of settingExtensions){const options=extension.descriptor()['options'];if(!options||!extension.descriptor()['category']){continue;}
for(const pair of options){this._commands.push(QuickOpen.CommandMenu.createSettingCommand(extension,ls(pair['title']),pair['value']));}}}
commands(){return this._commands;}}
export class CommandMenuProvider extends QuickOpen.FilteredListWidget.Provider{constructor(){super();this._commands=[];}
attach(){const allCommands=commandMenu.commands();const actions=UI.actionRegistry.availableActions();for(const action of actions){if(action.category()){this._commands.push(QuickOpen.CommandMenu.createActionCommand(action));}}
for(const command of allCommands){if(command.available()){this._commands.push(command);}}
this._commands=this._commands.sort(commandComparator);function commandComparator(left,right){const cats=left.category().compareTo(right.category());return cats?cats:left.title().compareTo(right.title());}}
detach(){this._commands=[];}
itemCount(){return this._commands.length;}
itemKeyAt(itemIndex){return this._commands[itemIndex].key();}
itemScoreAt(itemIndex,query){const command=this._commands[itemIndex];const opcodes=Diff.Diff.charDiff(query.toLowerCase(),command.title().toLowerCase());let score=0;for(let i=0;i<opcodes.length;++i){if(opcodes[i][0]===Diff.Diff.Operation.Equal){score+=opcodes[i][1].length*opcodes[i][1].length;}}
if(command.category().startsWith('Panel')){score+=2;}else if(command.category().startsWith('Drawer')){score+=1;}
return score;}
renderItem(itemIndex,query,titleElement,subtitleElement){const command=this._commands[itemIndex];titleElement.removeChildren();const tagElement=titleElement.createChild('span','tag');const index=String.hashCode(command.category())%MaterialPaletteColors.length;tagElement.style.backgroundColor=MaterialPaletteColors[index];tagElement.textContent=command.category();titleElement.createTextChild(command.title());QuickOpen.FilteredListWidget.highlightRanges(titleElement,query,true);subtitleElement.textContent=command.shortcut();}
selectItem(itemIndex,promptValue){if(itemIndex===null){return;}
this._commands[itemIndex].execute();Host.userMetrics.actionTaken(Host.UserMetrics.Action.SelectCommandFromCommandMenu);}
notFoundText(){return ls`No commands found`;}}
export const MaterialPaletteColors=['#F44336','#E91E63','#9C27B0','#673AB7','#3F51B5','#03A9F4','#00BCD4','#009688','#4CAF50','#8BC34A','#CDDC39','#FFC107','#FF9800','#FF5722','#795548','#9E9E9E','#607D8B'];export class Command{constructor(category,title,key,shortcut,executeHandler,availableHandler){this._category=category;this._title=title;this._key=category+'\0'+title+'\0'+key;this._shortcut=shortcut;this._executeHandler=executeHandler;this._availableHandler=availableHandler;}
category(){return this._category;}
title(){return this._title;}
key(){return this._key;}
shortcut(){return this._shortcut;}
available(){return this._availableHandler?this._availableHandler():true;}
execute(){this._executeHandler();}}
export class ShowActionDelegate{handleAction(context,actionId){Host.InspectorFrontendHost.bringToFront();QuickOpen.QuickOpen.show('>');return true;}}
self.QuickOpen=self.QuickOpen||{};QuickOpen=QuickOpen||{};QuickOpen.CommandMenu=CommandMenu;QuickOpen.CommandMenu.Command=Command;QuickOpen.CommandMenu.ShowActionDelegate=ShowActionDelegate;QuickOpen.CommandMenuProvider=CommandMenuProvider;QuickOpen.CommandMenuProvider.MaterialPaletteColors=MaterialPaletteColors;const commandMenu=new CommandMenu();QuickOpen.commandMenu=commandMenu;import'./TimelineModelFilter.js';import'./TracingLayerTree.js';import'./TimelineModel.js';import'./TimelineIRModel.js';import'./TimelineJSProfile.js';import'./TimelineFrameModel.js';import'./TimelineProfileTree.js';import*as TimelineFrameModel from'./TimelineFrameModel.js';import*as TimelineIRModel from'./TimelineIRModel.js';import*as TimelineJSProfile from'./TimelineJSProfile.js';import*as TimelineModel from'./TimelineModel.js';import*as TimelineModelFilter from'./TimelineModelFilter.js';import*as TimelineProfileTree from'./TimelineProfileTree.js';import*as TracingLayerTree from'./TracingLayerTree.js';export{TimelineFrameModel,TimelineIRModel,TimelineJSProfile,TimelineModel,TimelineModelFilter,TimelineProfileTree,TracingLayerTree,};export class TracingLayerTree extends SDK.LayerTreeBase{constructor(target){super(target);this._tileById=new Map();this._paintProfilerModel=target&&target.model(SDK.PaintProfilerModel);}
async setLayers(root,layers,paints){const idsToResolve=new Set();if(root){this._extractNodeIdsToResolve(idsToResolve,{},root);}else{for(let i=0;i<layers.length;++i){this._extractNodeIdsToResolve(idsToResolve,{},layers[i]);}}
await this.resolveBackendNodeIds(idsToResolve);const oldLayersById=this._layersById;this._layersById={};this.setContentRoot(null);if(root){const convertedLayers=this._innerSetLayers(oldLayersById,root);this.setRoot(convertedLayers);}else{const processedLayers=layers.map(this._innerSetLayers.bind(this,oldLayersById));const contentRoot=this.contentRoot();this.setRoot(contentRoot);for(let i=0;i<processedLayers.length;++i){if(processedLayers[i].id()!==contentRoot.id()){contentRoot.addChild(processedLayers[i]);}}}
this._setPaints(paints);}
setTiles(tiles){this._tileById=new Map();for(const tile of tiles){this._tileById.set(tile.id,tile);}}
pictureForRasterTile(tileId){const tile=this._tileById.get('cc::Tile/'+tileId);if(!tile){Common.console.error(`Tile ${tileId} is missing`);return(Promise.resolve(null));}
const layer=(this.layerById(tile.layer_id));if(!layer){Common.console.error(`Layer ${tile.layer_id} for tile ${tileId} is not found`);return(Promise.resolve(null));}
return layer._pictureForRect(tile.content_rect);}
_setPaints(paints){for(let i=0;i<paints.length;++i){const layer=this._layersById[paints[i].layerId()];if(layer){layer._addPaintEvent(paints[i]);}}}
_innerSetLayers(oldLayersById,payload){let layer=(oldLayersById[payload.layer_id]);if(layer){layer._reset(payload);}else{layer=new TracingLayer(this._paintProfilerModel,payload);}
this._layersById[payload.layer_id]=layer;if(payload.owner_node){layer._setNode(this.backendNodeIdToNode().get(payload.owner_node)||null);}
if(!this.contentRoot()&&layer.drawsContent()){this.setContentRoot(layer);}
for(let i=0;payload.children&&i<payload.children.length;++i){layer.addChild(this._innerSetLayers(oldLayersById,payload.children[i]));}
return layer;}
_extractNodeIdsToResolve(nodeIdsToResolve,seenNodeIds,payload){const backendNodeId=payload.owner_node;if(backendNodeId&&!this.backendNodeIdToNode().has(backendNodeId)){nodeIdsToResolve.add(backendNodeId);}
for(let i=0;payload.children&&i<payload.children.length;++i){this._extractNodeIdsToResolve(nodeIdsToResolve,seenNodeIds,payload.children[i]);}}}
export class TracingLayer{constructor(paintProfilerModel,payload){this._paintProfilerModel=paintProfilerModel;this._reset(payload);}
_reset(payload){this._node=null;this._layerId=String(payload.layer_id);this._offsetX=payload.position[0];this._offsetY=payload.position[1];this._width=payload.bounds.width;this._height=payload.bounds.height;this._children=[];this._parentLayerId=null;this._parent=null;this._quad=payload.layer_quad||[];this._createScrollRects(payload);this._compositingReasons=payload.compositing_reasons||(payload.debug_info&&payload.debug_info.compositing_reasons)||[];this._drawsContent=!!payload.draws_content;this._gpuMemoryUsage=payload.gpu_memory_usage;this._paints=[];}
id(){return this._layerId;}
parentId(){return this._parentLayerId;}
parent(){return this._parent;}
isRoot(){return!this.parentId();}
children(){return this._children;}
addChild(childParam){const child=(childParam);if(child._parent){console.assert(false,'Child already has a parent');}
this._children.push(child);child._parent=this;child._parentLayerId=this._layerId;}
_setNode(node){this._node=node;}
node(){return this._node;}
nodeForSelfOrAncestor(){for(let layer=this;layer;layer=layer._parent){if(layer._node){return layer._node;}}
return null;}
offsetX(){return this._offsetX;}
offsetY(){return this._offsetY;}
width(){return this._width;}
height(){return this._height;}
transform(){return null;}
quad(){return this._quad;}
anchorPoint(){return[0.5,0.5,0];}
invisible(){return false;}
paintCount(){return 0;}
lastPaintRect(){return null;}
scrollRects(){return this._scrollRects;}
stickyPositionConstraint(){return null;}
gpuMemoryUsage(){return this._gpuMemoryUsage;}
snapshots(){return this._paints.map(paint=>paint.snapshotPromise().then(snapshot=>{if(!snapshot){return null;}
const rect={x:snapshot.rect[0],y:snapshot.rect[1],width:snapshot.rect[2],height:snapshot.rect[3]};return{rect:rect,snapshot:snapshot.snapshot};}));}
_pictureForRect(targetRect){return Promise.all(this._paints.map(paint=>paint.picturePromise())).then(pictures=>{const fragments=pictures.filter(picture=>picture&&rectsOverlap(picture.rect,targetRect)).map(picture=>({x:picture.rect[0],y:picture.rect[1],picture:picture.serializedPicture}));if(!fragments.length||!this._paintProfilerModel){return null;}
const x0=fragments.reduce((min,item)=>Math.min(min,item.x),Infinity);const y0=fragments.reduce((min,item)=>Math.min(min,item.y),Infinity);const rect={x:targetRect[0]-x0,y:targetRect[1]-y0,width:targetRect[2],height:targetRect[3]};return this._paintProfilerModel.loadSnapshotFromFragments(fragments).then(snapshot=>snapshot?{rect:rect,snapshot:snapshot}:null);});function segmentsOverlap(a1,a2,b1,b2){console.assert(a1<=a2&&b1<=b2,'segments should be specified as ordered pairs');return a2>b1&&a1<b2;}
function rectsOverlap(a,b){return segmentsOverlap(a[0],a[0]+a[2],b[0],b[0]+b[2])&&segmentsOverlap(a[1],a[1]+a[3],b[1],b[1]+b[3]);}}
_scrollRectsFromParams(params,type){return{rect:{x:params[0],y:params[1],width:params[2],height:params[3]},type:type};}
_createScrollRects(payload){this._scrollRects=[];if(payload.non_fast_scrollable_region){this._scrollRects.push(this._scrollRectsFromParams(payload.non_fast_scrollable_region,SDK.Layer.ScrollRectType.NonFastScrollable.name));}
if(payload.touch_event_handler_region){this._scrollRects.push(this._scrollRectsFromParams(payload.touch_event_handler_region,SDK.Layer.ScrollRectType.TouchEventHandler.name));}
if(payload.wheel_event_handler_region){this._scrollRects.push(this._scrollRectsFromParams(payload.wheel_event_handler_region,SDK.Layer.ScrollRectType.WheelEventHandler.name));}
if(payload.scroll_event_handler_region){this._scrollRects.push(this._scrollRectsFromParams(payload.scroll_event_handler_region,SDK.Layer.ScrollRectType.RepaintsOnScroll.name));}}
_addPaintEvent(paint){this._paints.push(paint);}
requestCompositingReasons(){return Promise.resolve(this._compositingReasons);}
drawsContent(){return this._drawsContent;}}
self.TimelineModel=self.TimelineModel||{};TimelineModel=TimelineModel||{};TimelineModel.TracingLayerTree=TracingLayerTree;TimelineModel.TracingLayer=TracingLayer;TimelineModel.TracingLayerPayload;TimelineModel.TracingLayerTile;export class Node{constructor(id,event){this.totalTime=0;this.selfTime=0;this.id=id;this.event=event;this.parent;this._groupId='';this._isGroupNode=false;}
isGroupNode(){return this._isGroupNode;}
hasChildren(){throw'Not implemented';}
children(){throw'Not implemented';}
searchTree(matchFunction,results){results=results||[];if(this.event&&matchFunction(this.event)){results.push(this);}
for(const child of this.children().values()){child.searchTree(matchFunction,results);}
return results;}}
export class TopDownNode extends Node{constructor(id,event,parent){super(id,event);this._root=parent&&parent._root;this._hasChildren=false;this._children=null;this.parent=parent;}
hasChildren(){return this._hasChildren;}
children(){return this._children||this._buildChildren();}
_buildChildren(){const path=[];for(let node=this;node.parent&&!node._isGroupNode;node=node.parent){path.push((node));}
path.reverse();const children=new Map();const self=this;const root=this._root;const startTime=root._startTime;const endTime=root._endTime;const instantEventCallback=root._doNotAggregate?onInstantEvent:undefined;const eventIdCallback=root._doNotAggregate?undefined:_eventId;const eventGroupIdCallback=root._eventGroupIdCallback;let depth=0;let matchedDepth=0;let currentDirectChild=null;TimelineModel.TimelineModel.forEachEvent(root._events,onStartEvent,onEndEvent,instantEventCallback,startTime,endTime,root._filter);function onStartEvent(e){++depth;if(depth>path.length+2){return;}
if(!matchPath(e)){return;}
const duration=Math.min(endTime,e.endTime)-Math.max(startTime,e.startTime);if(duration<0){console.error('Negative event duration');}
processEvent(e,duration);}
function onInstantEvent(e){++depth;if(matchedDepth===path.length&&depth<=path.length+2){processEvent(e,0);}
--depth;}
function processEvent(e,duration){if(depth===path.length+2){currentDirectChild._hasChildren=true;currentDirectChild.selfTime-=duration;return;}
let id;let groupId='';if(!eventIdCallback){id=Symbol('uniqueId');}else{id=eventIdCallback(e);groupId=eventGroupIdCallback?eventGroupIdCallback(e):'';if(groupId){id+='/'+groupId;}}
let node=children.get(id);if(!node){node=new TopDownNode(id,e,self);node._groupId=groupId;children.set(id,node);}
node.selfTime+=duration;node.totalTime+=duration;currentDirectChild=node;}
function matchPath(e){if(matchedDepth===path.length){return true;}
if(matchedDepth!==depth-1){return false;}
if(!e.endTime){return false;}
if(!eventIdCallback){if(e===path[matchedDepth].event){++matchedDepth;}
return false;}
let id=eventIdCallback(e);const groupId=eventGroupIdCallback?eventGroupIdCallback(e):'';if(groupId){id+='/'+groupId;}
if(id===path[matchedDepth].id){++matchedDepth;}
return false;}
function onEndEvent(e){--depth;if(matchedDepth>depth){matchedDepth=depth;}}
this._children=children;return children;}}
export class TopDownRootNode extends TopDownNode{constructor(events,filters,startTime,endTime,doNotAggregate,eventGroupIdCallback){super('',null,null);this._root=this;this._events=events;this._filter=e=>filters.every(f=>f.accept(e));this._startTime=startTime;this._endTime=endTime;this._eventGroupIdCallback=eventGroupIdCallback;this._doNotAggregate=doNotAggregate;this.totalTime=endTime-startTime;this.selfTime=this.totalTime;}
children(){return this._children||this._grouppedTopNodes();}
_grouppedTopNodes(){const flatNodes=super.children();for(const node of flatNodes.values()){this.selfTime-=node.totalTime;}
if(!this._eventGroupIdCallback){return flatNodes;}
const groupNodes=new Map();for(const node of flatNodes.values()){const groupId=this._eventGroupIdCallback((node.event));let groupNode=groupNodes.get(groupId);if(!groupNode){groupNode=new GroupNode(groupId,this,(node.event));groupNodes.set(groupId,groupNode);}
groupNode.addChild(node,node.selfTime,node.totalTime);}
this._children=groupNodes;return groupNodes;}}
export class BottomUpRootNode extends Node{constructor(events,textFilter,filters,startTime,endTime,eventGroupIdCallback){super('',null);this._children=null;this._events=events;this._textFilter=textFilter;this._filter=e=>filters.every(f=>f.accept(e));this._startTime=startTime;this._endTime=endTime;this._eventGroupIdCallback=eventGroupIdCallback;this.totalTime=endTime-startTime;}
hasChildren(){return true;}
_filterChildren(children){for(const[id,child]of children){if(child.event&&!this._textFilter.accept(child.event)){children.delete((id));}}
return children;}
children(){if(!this._children){this._children=this._filterChildren(this._grouppedTopNodes());}
return this._children;}
_ungrouppedTopNodes(){const root=this;const startTime=this._startTime;const endTime=this._endTime;const nodeById=new Map();const selfTimeStack=[endTime-startTime];const firstNodeStack=[];const totalTimeById=new Map();TimelineModel.TimelineModel.forEachEvent(this._events,onStartEvent,onEndEvent,undefined,startTime,endTime,this._filter);function onStartEvent(e){const duration=Math.min(e.endTime,endTime)-Math.max(e.startTime,startTime);selfTimeStack[selfTimeStack.length-1]-=duration;selfTimeStack.push(duration);const id=_eventId(e);const noNodeOnStack=!totalTimeById.has(id);if(noNodeOnStack){totalTimeById.set(id,duration);}
firstNodeStack.push(noNodeOnStack);}
function onEndEvent(e){const id=_eventId(e);let node=nodeById.get(id);if(!node){node=new BottomUpNode(root,id,e,false,root);nodeById.set(id,node);}
node.selfTime+=selfTimeStack.pop();if(firstNodeStack.pop()){node.totalTime+=totalTimeById.get(id);totalTimeById.delete(id);}
if(firstNodeStack.length){node.setHasChildren();}}
this.selfTime=selfTimeStack.pop();for(const pair of nodeById){if(pair[1].selfTime<=0){nodeById.delete((pair[0]));}}
return nodeById;}
_grouppedTopNodes(){const flatNodes=this._ungrouppedTopNodes();if(!this._eventGroupIdCallback){return flatNodes;}
const groupNodes=new Map();for(const node of flatNodes.values()){const groupId=this._eventGroupIdCallback((node.event));let groupNode=groupNodes.get(groupId);if(!groupNode){groupNode=new GroupNode(groupId,this,(node.event));groupNodes.set(groupId,groupNode);}
groupNode.addChild(node,node.selfTime,node.selfTime);}
return groupNodes;}}
export class GroupNode extends Node{constructor(id,parent,event){super(id,event);this._children=new Map();this.parent=parent;this._isGroupNode=true;}
addChild(child,selfTime,totalTime){this._children.set(child.id,child);this.selfTime+=selfTime;this.totalTime+=totalTime;child.parent=this;}
hasChildren(){return true;}
children(){return this._children;}}
export class BottomUpNode extends Node{constructor(root,id,event,hasChildren,parent){super(id,event);this.parent=parent;this._root=root;this._depth=(parent._depth||0)+1;this._cachedChildren=null;this._hasChildren=hasChildren;}
setHasChildren(){this._hasChildren=true;}
hasChildren(){return this._hasChildren;}
children(){if(this._cachedChildren){return this._cachedChildren;}
const selfTimeStack=[0];const eventIdStack=[];const eventStack=[];const nodeById=new Map();const startTime=this._root._startTime;const endTime=this._root._endTime;let lastTimeMarker=startTime;const self=this;TimelineModel.TimelineModel.forEachEvent(this._root._events,onStartEvent,onEndEvent,undefined,startTime,endTime,this._root._filter);function onStartEvent(e){const duration=Math.min(e.endTime,endTime)-Math.max(e.startTime,startTime);if(duration<0){console.assert(false,'Negative duration of an event');}
selfTimeStack[selfTimeStack.length-1]-=duration;selfTimeStack.push(duration);const id=_eventId(e);eventIdStack.push(id);eventStack.push(e);}
function onEndEvent(e){const selfTime=selfTimeStack.pop();const id=eventIdStack.pop();eventStack.pop();let node;for(node=self;node._depth>1;node=node.parent){if(node.id!==eventIdStack[eventIdStack.length+1-node._depth]){return;}}
if(node.id!==id||eventIdStack.length<self._depth){return;}
const childId=eventIdStack[eventIdStack.length-self._depth];node=nodeById.get(childId);if(!node){const event=eventStack[eventStack.length-self._depth];const hasChildren=eventStack.length>self._depth;node=new BottomUpNode(self._root,childId,event,hasChildren,self);nodeById.set(childId,node);}
const totalTime=Math.min(e.endTime,endTime)-Math.max(e.startTime,lastTimeMarker);node.selfTime+=selfTime;node.totalTime+=totalTime;lastTimeMarker=Math.min(e.endTime,endTime);}
this._cachedChildren=this._root._filterChildren(nodeById);return this._cachedChildren;}
searchTree(matchFunction,results){results=results||[];if(this.event&&matchFunction(this.event)){results.push(this);}
return results;}}
export function eventURL(event){const data=event.args['data']||event.args['beginData'];if(data&&data['url']){return data['url'];}
let frame=eventStackFrame(event);while(frame){const url=frame['url'];if(url){return url;}
frame=frame.parent;}
return null;}
export function eventStackFrame(event){if(event.name===TimelineModel.TimelineModel.RecordType.JSFrame){return(event.args['data']||null);}
return TimelineModel.TimelineData.forEvent(event).topFrame();}
export function _eventId(event){if(event.name===TimelineModel.TimelineModel.RecordType.TimeStamp){return`${event.name}:${event.args.data.message}`;}
if(event.name!==TimelineModel.TimelineModel.RecordType.JSFrame){return event.name;}
const frame=event.args['data'];const location=frame['scriptId']||frame['url']||'';const functionName=frame['functionName'];const name=TimelineModel.TimelineJSProfileProcessor.isNativeRuntimeFrame(frame)?TimelineModel.TimelineJSProfileProcessor.nativeGroup(functionName)||functionName:`${functionName}:${frame['lineNumber']}:${frame['columnNumber']}`;return`f:${name}@${location}`;}
self.TimelineModel=self.TimelineModel||{};TimelineModel=TimelineModel||{};TimelineModel.TimelineProfileTree={};TimelineModel.TimelineProfileTree.Node=Node;TimelineModel.TimelineProfileTree.TopDownNode=TopDownNode;TimelineModel.TimelineProfileTree.TopDownRootNode=TopDownRootNode;TimelineModel.TimelineProfileTree.BottomUpRootNode=BottomUpRootNode;TimelineModel.TimelineProfileTree.GroupNode=GroupNode;TimelineModel.TimelineProfileTree.BottomUpNode=BottomUpNode;TimelineModel.TimelineProfileTree.eventURL=eventURL;TimelineModel.TimelineProfileTree.eventStackFrame=eventStackFrame;TimelineModel.TimelineProfileTree._eventId=_eventId;TimelineModel.TimelineProfileTree.ChildrenCache;export class TimelineModelImpl{constructor(){this._reset();}
static forEachEvent(events,onStartEvent,onEndEvent,onInstantEvent,startTime,endTime,filter){startTime=startTime||0;endTime=endTime||Infinity;const stack=[];const startEvent=TimelineModelImpl._topLevelEventEndingAfter(events,startTime);for(let i=startEvent;i<events.length;++i){const e=events[i];if((e.endTime||e.startTime)<startTime){continue;}
if(e.startTime>=endTime){break;}
if(SDK.TracingModel.isAsyncPhase(e.phase)||SDK.TracingModel.isFlowPhase(e.phase)){continue;}
while(stack.length&&stack.peekLast().endTime<=e.startTime){onEndEvent(stack.pop());}
if(filter&&!filter(e)){continue;}
if(e.duration){onStartEvent(e);stack.push(e);}else{onInstantEvent&&onInstantEvent(e,stack.peekLast()||null);}}
while(stack.length){onEndEvent(stack.pop());}}
static _topLevelEventEndingAfter(events,time){let index=events.upperBound(time,(time,event)=>time-event.startTime)-1;while(index>0&&!SDK.TracingModel.isTopLevelEvent(events[index])){index--;}
return Math.max(index,0);}
isMarkerEvent(event){const recordTypes=RecordType;switch(event.name){case recordTypes.TimeStamp:return true;case recordTypes.MarkFirstPaint:case recordTypes.MarkFCP:case recordTypes.MarkFMP:return this._mainFrame&&event.args.frame===this._mainFrame.frameId&&!!event.args.data;case recordTypes.MarkDOMContent:case recordTypes.MarkLoad:case recordTypes.MarkLCPCandidate:case recordTypes.MarkLCPInvalidate:return!!event.args['data']['isMainFrame'];default:return false;}}
isLCPCandidateEvent(event){return event.name===RecordType.MarkLCPCandidate&&!!event.args['data']['isMainFrame'];}
isLCPInvalidateEvent(event){return event.name===RecordType.MarkLCPInvalidate&&!!event.args['data']['isMainFrame'];}
static globalEventId(event,field){const data=event.args['data']||event.args['beginData'];const id=data&&data[field];if(!id){return'';}
return`${event.thread.process().id()}.${id}`;}
static eventFrameId(event){const data=event.args['data']||event.args['beginData'];return data&&data['frame']||'';}
cpuProfiles(){return this._cpuProfiles;}
targetByEvent(event){const workerId=this._workerIdByThread.get(event.thread);const mainTarget=SDK.targetManager.mainTarget();return workerId?SDK.targetManager.targetById(workerId):mainTarget;}
setEvents(tracingModel){this._reset();this._resetProcessingState();this._tracingModel=tracingModel;this._minimumRecordTime=tracingModel.minimumRecordTime();this._maximumRecordTime=tracingModel.maximumRecordTime();this._processSyncBrowserEvents(tracingModel);if(this._browserFrameTracking){this._processThreadsForBrowserFrames(tracingModel);}else{const metadataEvents=this._processMetadataEvents(tracingModel);this._isGenericTrace=!metadataEvents;if(metadataEvents){this._processMetadataAndThreads(tracingModel,metadataEvents);}else{this._processGenericTrace(tracingModel);}}
this._inspectedTargetEvents.sort(SDK.TracingModel.Event.compareStartTime);this._processAsyncBrowserEvents(tracingModel);this._buildGPUEvents(tracingModel);this._resetProcessingState();}
_processGenericTrace(tracingModel){let browserMainThread=SDK.TracingModel.browserMainThread(tracingModel);if(!browserMainThread&&tracingModel.sortedProcesses().length){browserMainThread=tracingModel.sortedProcesses()[0].sortedThreads()[0];}
for(const process of tracingModel.sortedProcesses()){for(const thread of process.sortedThreads()){this._processThreadEvents(tracingModel,[{from:0,to:Infinity}],thread,thread===browserMainThread,false,true,null);}}}
_processMetadataAndThreads(tracingModel,metadataEvents){let startTime=0;for(let i=0,length=metadataEvents.page.length;i<length;i++){const metaEvent=metadataEvents.page[i];const process=metaEvent.thread.process();const endTime=i+1<length?metadataEvents.page[i+1].startTime:Infinity;if(startTime===endTime){continue;}
this._legacyCurrentPage=metaEvent.args['data']&&metaEvent.args['data']['page'];for(const thread of process.sortedThreads()){let workerUrl=null;if(thread.name()===TimelineModelImpl.WorkerThreadName||thread.name()===TimelineModelImpl.WorkerThreadNameLegacy){const workerMetaEvent=metadataEvents.workers.find(e=>{if(e.args['data']['workerThreadId']!==thread.id()){return false;}
if(e.args['data']['sessionId']===this._sessionId){return true;}
return!!this._pageFrames.get(TimelineModelImpl.eventFrameId(e));});if(!workerMetaEvent){continue;}
const workerId=workerMetaEvent.args['data']['workerId'];if(workerId){this._workerIdByThread.set(thread,workerId);}
workerUrl=workerMetaEvent.args['data']['url']||'';}
this._processThreadEvents(tracingModel,[{from:startTime,to:endTime}],thread,thread===metaEvent.thread,!!workerUrl,true,workerUrl);}
startTime=endTime;}}
_processThreadsForBrowserFrames(tracingModel){const processData=new Map();for(const frame of this._pageFrames.values()){for(let i=0;i<frame.processes.length;i++){const pid=frame.processes[i].processId;let data=processData.get(pid);if(!data){data=[];processData.set(pid,data);}
const to=i===frame.processes.length-1?(frame.deletedTime||Infinity):frame.processes[i+1].time;data.push({from:frame.processes[i].time,to:to,main:!frame.parent,url:frame.processes[i].url});}}
const allMetadataEvents=tracingModel.devToolsMetadataEvents();for(const process of tracingModel.sortedProcesses()){const data=processData.get(process.id());if(!data){continue;}
data.sort((a,b)=>a.from-b.from||a.to-b.to);const ranges=[];let lastUrl=null;let lastMainUrl=null;let hasMain=false;for(const item of data){if(!ranges.length||item.from>ranges.peekLast().to){ranges.push({from:item.from,to:item.to});}else{ranges.peekLast().to=item.to;}
if(item.main){hasMain=true;}
if(item.url){if(item.main){lastMainUrl=item.url;}
lastUrl=item.url;}}
for(const thread of process.sortedThreads()){if(thread.name()===TimelineModelImpl.RendererMainThreadName){this._processThreadEvents(tracingModel,ranges,thread,true,false,hasMain,hasMain?lastMainUrl:lastUrl);}else if(thread.name()===TimelineModelImpl.WorkerThreadName||thread.name()===TimelineModelImpl.WorkerThreadNameLegacy){const workerMetaEvent=allMetadataEvents.find(e=>{if(e.name!==TimelineModelImpl.DevToolsMetadataEvent.TracingSessionIdForWorker){return false;}
if(e.thread.process()!==process){return false;}
if(e.args['data']['workerThreadId']!==thread.id()){return false;}
return!!this._pageFrames.get(TimelineModelImpl.eventFrameId(e));});if(!workerMetaEvent){continue;}
this._workerIdByThread.set(thread,workerMetaEvent.args['data']['workerId']||'');this._processThreadEvents(tracingModel,ranges,thread,false,true,false,workerMetaEvent.args['data']['url']||'');}else{this._processThreadEvents(tracingModel,ranges,thread,false,false,false,null);}}}}
_processMetadataEvents(tracingModel){const metadataEvents=tracingModel.devToolsMetadataEvents();const pageDevToolsMetadataEvents=[];const workersDevToolsMetadataEvents=[];for(const event of metadataEvents){if(event.name===TimelineModelImpl.DevToolsMetadataEvent.TracingStartedInPage){pageDevToolsMetadataEvents.push(event);if(event.args['data']&&event.args['data']['persistentIds']){this._persistentIds=true;}
const frames=((event.args['data']&&event.args['data']['frames'])||[]);frames.forEach(payload=>this._addPageFrame(event,payload));this._mainFrame=this.rootFrames()[0];}else if(event.name===TimelineModelImpl.DevToolsMetadataEvent.TracingSessionIdForWorker){workersDevToolsMetadataEvents.push(event);}else if(event.name===TimelineModelImpl.DevToolsMetadataEvent.TracingStartedInBrowser){console.assert(!this._mainFrameNodeId,'Multiple sessions in trace');this._mainFrameNodeId=event.args['frameTreeNodeId'];}}
if(!pageDevToolsMetadataEvents.length){return null;}
const sessionId=pageDevToolsMetadataEvents[0].args['sessionId']||pageDevToolsMetadataEvents[0].args['data']['sessionId'];this._sessionId=sessionId;const mismatchingIds=new Set();function checkSessionId(event){let args=event.args;if(args['data']){args=args['data'];}
const id=args['sessionId'];if(id===sessionId){return true;}
mismatchingIds.add(id);return false;}
const result={page:pageDevToolsMetadataEvents.filter(checkSessionId).sort(SDK.TracingModel.Event.compareStartTime),workers:workersDevToolsMetadataEvents.sort(SDK.TracingModel.Event.compareStartTime)};if(mismatchingIds.size){Common.console.error('Timeline recording was started in more than one page simultaneously. Session id mismatch: '+
this._sessionId+' and '+mismatchingIds.valuesArray()+'.');}
return result;}
_processSyncBrowserEvents(tracingModel){const browserMain=SDK.TracingModel.browserMainThread(tracingModel);if(browserMain){browserMain.events().forEach(this._processBrowserEvent,this);}}
_processAsyncBrowserEvents(tracingModel){const browserMain=SDK.TracingModel.browserMainThread(tracingModel);if(browserMain){this._processAsyncEvents(browserMain,[{from:0,to:Infinity}]);}}
_buildGPUEvents(tracingModel){const thread=tracingModel.threadByName('GPU Process','CrGpuMain');if(!thread){return;}
const gpuEventName=RecordType.GPUTask;const track=this._ensureNamedTrack(TrackType.GPU);track.thread=thread;track.events=thread.events().filter(event=>event.name===gpuEventName);}
_resetProcessingState(){this._asyncEventTracker=new TimelineAsyncEventTracker();this._invalidationTracker=new InvalidationTracker();this._layoutInvalidate={};this._lastScheduleStyleRecalculation={};this._paintImageEventByPixelRefId={};this._lastPaintForLayer={};this._lastRecalculateStylesEvent=null;this._currentScriptEvent=null;this._eventStack=[];this._knownInputEvents=new Set();this._browserFrameTracking=false;this._persistentIds=false;this._legacyCurrentPage=null;}
_extractCpuProfile(tracingModel,thread){const events=thread.events();let cpuProfile;let target=null;let cpuProfileEvent=events.peekLast();if(cpuProfileEvent&&cpuProfileEvent.name===RecordType.CpuProfile){const eventData=cpuProfileEvent.args['data'];cpuProfile=(eventData&&eventData['cpuProfile']);target=this.targetByEvent(cpuProfileEvent);}
if(!cpuProfile){cpuProfileEvent=events.find(e=>e.name===RecordType.Profile);if(!cpuProfileEvent){return null;}
target=this.targetByEvent(cpuProfileEvent);const profileGroup=tracingModel.profileGroup(cpuProfileEvent);if(!profileGroup){Common.console.error('Invalid CPU profile format.');return null;}
cpuProfile=({startTime:cpuProfileEvent.args['data']['startTime'],endTime:0,nodes:[],samples:[],timeDeltas:[],lines:[]});for(const profileEvent of profileGroup.children){const eventData=profileEvent.args['data'];if('startTime'in eventData){cpuProfile.startTime=eventData['startTime'];}
if('endTime'in eventData){cpuProfile.endTime=eventData['endTime'];}
const nodesAndSamples=eventData['cpuProfile']||{};const samples=nodesAndSamples['samples']||[];const lines=eventData['lines']||Array(samples.length).fill(0);cpuProfile.nodes.pushAll(nodesAndSamples['nodes']||[]);cpuProfile.lines.pushAll(lines);cpuProfile.samples.pushAll(samples);cpuProfile.timeDeltas.pushAll(eventData['timeDeltas']||[]);if(cpuProfile.samples.length!==cpuProfile.timeDeltas.length){Common.console.error('Failed to parse CPU profile.');return null;}}
if(!cpuProfile.endTime){cpuProfile.endTime=cpuProfile.timeDeltas.reduce((x,y)=>x+y,cpuProfile.startTime);}}
try{const jsProfileModel=new SDK.CPUProfileDataModel(cpuProfile,target);this._cpuProfiles.push(jsProfileModel);return jsProfileModel;}catch(e){Common.console.error('Failed to parse CPU profile.');}
return null;}
_injectJSFrameEvents(tracingModel,thread){const jsProfileModel=this._extractCpuProfile(tracingModel,thread);let events=thread.events();const jsSamples=jsProfileModel?TimelineModel.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile(jsProfileModel,thread):null;if(jsSamples&&jsSamples.length){events=events.mergeOrdered(jsSamples,SDK.TracingModel.Event.orderedCompareStartTime);}
if(jsSamples||events.some(e=>e.name===RecordType.JSSample)){const jsFrameEvents=TimelineModel.TimelineJSProfileProcessor.generateJSFrameEvents(events);if(jsFrameEvents&&jsFrameEvents.length){events=jsFrameEvents.mergeOrdered(events,SDK.TracingModel.Event.orderedCompareStartTime);}}
return events;}
_processThreadEvents(tracingModel,ranges,thread,isMainThread,isWorker,forMainFrame,url){const track=new Track();track.name=thread.name()||ls`Thread ${thread.id()}`;track.type=TrackType.Other;track.thread=thread;if(isMainThread){track.type=TrackType.MainThread;track.url=url||null;track.forMainFrame=forMainFrame;}else if(isWorker){track.type=TrackType.Worker;track.url=url;}else if(thread.name().startsWith('CompositorTileWorker')){track.type=TrackType.Raster;}
this._tracks.push(track);const events=this._injectJSFrameEvents(tracingModel,thread);this._eventStack=[];const eventStack=this._eventStack;for(const range of ranges){let i=events.lowerBound(range.from,(time,event)=>time-event.startTime);for(;i<events.length;i++){const event=events[i];if(event.startTime>=range.to){break;}
while(eventStack.length&&eventStack.peekLast().endTime<=event.startTime){eventStack.pop();}
if(!this._processEvent(event)){continue;}
if(!SDK.TracingModel.isAsyncPhase(event.phase)&&event.duration){if(eventStack.length){const parent=eventStack.peekLast();parent.selfTime-=event.duration;if(parent.selfTime<0){this._fixNegativeDuration(parent,event);}}
event.selfTime=event.duration;if(!eventStack.length){track.tasks.push(event);}
eventStack.push(event);}
if(this.isMarkerEvent(event)){this._timeMarkerEvents.push(event);}
track.events.push(event);this._inspectedTargetEvents.push(event);}}
this._processAsyncEvents(thread,ranges);}
_fixNegativeDuration(event,child){const epsilon=1e-3;if(event.selfTime<-epsilon){console.error(`Children are longer than parent at ${event.startTime} `+`(${(child.startTime - this.minimumRecordTime()).toFixed(3)} by ${(-event.selfTime).toFixed(3)}`);}
event.selfTime=0;}
_processAsyncEvents(thread,ranges){const asyncEvents=thread.asyncEvents();const groups=new Map();function group(type){if(!groups.has(type)){groups.set(type,[]);}
return groups.get(type);}
for(const range of ranges){let i=asyncEvents.lowerBound(range.from,function(time,asyncEvent){return time-asyncEvent.startTime;});for(;i<asyncEvents.length;++i){const asyncEvent=asyncEvents[i];if(asyncEvent.startTime>=range.to){break;}
if(asyncEvent.hasCategory(TimelineModelImpl.Category.Console)){group(TrackType.Console).push(asyncEvent);continue;}
if(asyncEvent.hasCategory(TimelineModelImpl.Category.UserTiming)){group(TrackType.Timings).push(asyncEvent);continue;}
if(asyncEvent.name===RecordType.Animation){group(TrackType.Animation).push(asyncEvent);continue;}
if(asyncEvent.hasCategory(TimelineModelImpl.Category.LatencyInfo)||asyncEvent.name===RecordType.ImplSideFling){const lastStep=asyncEvent.steps.peekLast();if(lastStep.phase!==SDK.TracingModel.Phase.AsyncEnd){continue;}
const data=lastStep.args['data'];asyncEvent.causedFrame=!!(data&&data['INPUT_EVENT_LATENCY_RENDERER_SWAP_COMPONENT']);if(asyncEvent.hasCategory(TimelineModelImpl.Category.LatencyInfo)){if(!this._knownInputEvents.has(lastStep.id)){continue;}
if(asyncEvent.name===RecordType.InputLatencyMouseMove&&!asyncEvent.causedFrame){continue;}
if(data['is_coalesced']){continue;}
const rendererMain=data['INPUT_EVENT_LATENCY_RENDERER_MAIN_COMPONENT'];if(rendererMain){const time=rendererMain['time']/1000;TimelineData.forEvent(asyncEvent.steps[0]).timeWaitingForMainThread=time-asyncEvent.steps[0].startTime;}}
group(TrackType.Input).push(asyncEvent);continue;}}}
for(const[type,events]of groups){const track=this._ensureNamedTrack(type);track.thread=thread;track.asyncEvents=track.asyncEvents.mergeOrdered(events,SDK.TracingModel.Event.compareStartTime);}}
_processEvent(event){const recordTypes=RecordType;const eventStack=this._eventStack;if(!eventStack.length){if(this._currentTaskLayoutAndRecalcEvents&&this._currentTaskLayoutAndRecalcEvents.length){const totalTime=this._currentTaskLayoutAndRecalcEvents.reduce((time,event)=>time+event.duration,0);if(totalTime>TimelineModelImpl.Thresholds.ForcedLayout){for(const e of this._currentTaskLayoutAndRecalcEvents){const timelineData=TimelineData.forEvent(e);timelineData.warning=e.name===recordTypes.Layout?TimelineModelImpl.WarningType.ForcedLayout:TimelineModelImpl.WarningType.ForcedStyle;}}}
this._currentTaskLayoutAndRecalcEvents=[];}
if(this._currentScriptEvent&&event.startTime>this._currentScriptEvent.endTime){this._currentScriptEvent=null;}
const eventData=event.args['data']||event.args['beginData']||{};const timelineData=TimelineData.forEvent(event);if(eventData['stackTrace']){timelineData.stackTrace=eventData['stackTrace'];}
if(timelineData.stackTrace&&event.name!==recordTypes.JSSample){for(let i=0;i<timelineData.stackTrace.length;++i){--timelineData.stackTrace[i].lineNumber;--timelineData.stackTrace[i].columnNumber;}}
let pageFrameId=TimelineModelImpl.eventFrameId(event);if(!pageFrameId&&eventStack.length){pageFrameId=TimelineData.forEvent(eventStack.peekLast()).frameId;}
timelineData.frameId=pageFrameId||(this._mainFrame&&this._mainFrame.frameId)||'';this._asyncEventTracker.processEvent(event);if(this.isMarkerEvent(event)){this._ensureNamedTrack(TrackType.Timings);}
switch(event.name){case recordTypes.ResourceSendRequest:case recordTypes.WebSocketCreate:timelineData.setInitiator(eventStack.peekLast()||null);timelineData.url=eventData['url'];break;case recordTypes.ScheduleStyleRecalculation:this._lastScheduleStyleRecalculation[eventData['frame']]=event;break;case recordTypes.UpdateLayoutTree:case recordTypes.RecalculateStyles:this._invalidationTracker.didRecalcStyle(event);if(event.args['beginData']){timelineData.setInitiator(this._lastScheduleStyleRecalculation[event.args['beginData']['frame']]);}
this._lastRecalculateStylesEvent=event;if(this._currentScriptEvent){this._currentTaskLayoutAndRecalcEvents.push(event);}
break;case recordTypes.ScheduleStyleInvalidationTracking:case recordTypes.StyleRecalcInvalidationTracking:case recordTypes.StyleInvalidatorInvalidationTracking:case recordTypes.LayoutInvalidationTracking:this._invalidationTracker.addInvalidation(new InvalidationTrackingEvent(event));break;case recordTypes.InvalidateLayout:{let layoutInitator=event;const frameId=eventData['frame'];if(!this._layoutInvalidate[frameId]&&this._lastRecalculateStylesEvent&&this._lastRecalculateStylesEvent.endTime>event.startTime){layoutInitator=TimelineData.forEvent(this._lastRecalculateStylesEvent).initiator();}
this._layoutInvalidate[frameId]=layoutInitator;break;}
case recordTypes.Layout:{this._invalidationTracker.didLayout(event);const frameId=event.args['beginData']['frame'];timelineData.setInitiator(this._layoutInvalidate[frameId]);if(event.args['endData']){timelineData.backendNodeId=event.args['endData']['rootNode'];}
this._layoutInvalidate[frameId]=null;if(this._currentScriptEvent){this._currentTaskLayoutAndRecalcEvents.push(event);}
break;}
case recordTypes.Task:if(event.duration>TimelineModelImpl.Thresholds.LongTask){timelineData.warning=TimelineModelImpl.WarningType.LongTask;}
break;case recordTypes.EventDispatch:if(event.duration>TimelineModelImpl.Thresholds.RecurringHandler){timelineData.warning=TimelineModelImpl.WarningType.LongHandler;}
break;case recordTypes.TimerFire:case recordTypes.FireAnimationFrame:if(event.duration>TimelineModelImpl.Thresholds.RecurringHandler){timelineData.warning=TimelineModelImpl.WarningType.LongRecurringHandler;}
break;case recordTypes.FunctionCall:if(typeof eventData['scriptName']==='string'){eventData['url']=eventData['scriptName'];}
if(typeof eventData['scriptLine']==='number'){eventData['lineNumber']=eventData['scriptLine'];}
case recordTypes.EvaluateScript:case recordTypes.CompileScript:if(typeof eventData['lineNumber']==='number'){--eventData['lineNumber'];}
if(typeof eventData['columnNumber']==='number'){--eventData['columnNumber'];}
case recordTypes.RunMicrotasks:if(!this._currentScriptEvent){this._currentScriptEvent=event;}
break;case recordTypes.SetLayerTreeId:if(this._sessionId&&eventData['sessionId']&&this._sessionId===eventData['sessionId']){this._mainFrameLayerTreeId=eventData['layerTreeId'];break;}
const frameId=TimelineModelImpl.eventFrameId(event);const pageFrame=this._pageFrames.get(frameId);if(!pageFrame||pageFrame.parent){return false;}
this._mainFrameLayerTreeId=eventData['layerTreeId'];break;case recordTypes.Paint:{this._invalidationTracker.didPaint(event);timelineData.backendNodeId=eventData['nodeId'];if(!eventData['layerId']){break;}
const layerId=eventData['layerId'];this._lastPaintForLayer[layerId]=event;break;}
case recordTypes.DisplayItemListSnapshot:case recordTypes.PictureSnapshot:{const layerUpdateEvent=this._findAncestorEvent(recordTypes.UpdateLayer);if(!layerUpdateEvent||layerUpdateEvent.args['layerTreeId']!==this._mainFrameLayerTreeId){break;}
const paintEvent=this._lastPaintForLayer[layerUpdateEvent.args['layerId']];if(paintEvent){TimelineData.forEvent(paintEvent).picture=(event);}
break;}
case recordTypes.ScrollLayer:timelineData.backendNodeId=eventData['nodeId'];break;case recordTypes.PaintImage:timelineData.backendNodeId=eventData['nodeId'];timelineData.url=eventData['url'];break;case recordTypes.DecodeImage:case recordTypes.ResizeImage:{let paintImageEvent=this._findAncestorEvent(recordTypes.PaintImage);if(!paintImageEvent){const decodeLazyPixelRefEvent=this._findAncestorEvent(recordTypes.DecodeLazyPixelRef);paintImageEvent=decodeLazyPixelRefEvent&&this._paintImageEventByPixelRefId[decodeLazyPixelRefEvent.args['LazyPixelRef']];}
if(!paintImageEvent){break;}
const paintImageData=TimelineData.forEvent(paintImageEvent);timelineData.backendNodeId=paintImageData.backendNodeId;timelineData.url=paintImageData.url;break;}
case recordTypes.DrawLazyPixelRef:{const paintImageEvent=this._findAncestorEvent(recordTypes.PaintImage);if(!paintImageEvent){break;}
this._paintImageEventByPixelRefId[event.args['LazyPixelRef']]=paintImageEvent;const paintImageData=TimelineData.forEvent(paintImageEvent);timelineData.backendNodeId=paintImageData.backendNodeId;timelineData.url=paintImageData.url;break;}
case recordTypes.FrameStartedLoading:if(timelineData.frameId!==event.args['frame']){return false;}
break;case recordTypes.MarkLCPCandidate:timelineData.backendNodeId=eventData['nodeId'];break;case recordTypes.MarkDOMContent:case recordTypes.MarkLoad:{const frameId=TimelineModelImpl.eventFrameId(event);if(!this._pageFrames.has(frameId)){return false;}
break;}
case recordTypes.CommitLoad:{if(this._browserFrameTracking){break;}
const frameId=TimelineModelImpl.eventFrameId(event);const isMainFrame=!!eventData['isMainFrame'];const pageFrame=this._pageFrames.get(frameId);if(pageFrame){pageFrame.update(event.startTime,eventData);}else{if(!this._persistentIds){if(eventData['page']&&eventData['page']!==this._legacyCurrentPage){return false;}}else if(isMainFrame){return false;}else if(!this._addPageFrame(event,eventData)){return false;}}
if(isMainFrame){this._mainFrame=this._pageFrames.get(frameId);}
break;}
case recordTypes.FireIdleCallback:if(event.duration>eventData['allottedMilliseconds']+TimelineModelImpl.Thresholds.IdleCallbackAddon){timelineData.warning=TimelineModelImpl.WarningType.IdleDeadlineExceeded;}
break;}
return true;}
_processBrowserEvent(event){if(event.name===RecordType.LatencyInfoFlow){const frameId=event.args['frameTreeNodeId'];if(typeof frameId==='number'&&frameId===this._mainFrameNodeId){this._knownInputEvents.add(event.bind_id);}
return;}
if(event.name===RecordType.ResourceWillSendRequest){const requestId=event.args['data']['requestId'];if(typeof requestId==='string'){this._requestsFromBrowser.set(requestId,event);}
return;}
if(event.hasCategory(SDK.TracingModel.DevToolsMetadataEventCategory)&&event.args['data']){const data=event.args['data'];if(event.name===TimelineModelImpl.DevToolsMetadataEvent.TracingStartedInBrowser){if(!data['persistentIds']){return;}
this._browserFrameTracking=true;this._mainFrameNodeId=data['frameTreeNodeId'];const frames=data['frames']||[];frames.forEach(payload=>{const parent=payload['parent']&&this._pageFrames.get(payload['parent']);if(payload['parent']&&!parent){return;}
let frame=this._pageFrames.get(payload['frame']);if(!frame){frame=new PageFrame(payload);this._pageFrames.set(frame.frameId,frame);if(parent){parent.addChild(frame);}else{this._mainFrame=frame;}}
frame.update(this._minimumRecordTime,payload);});return;}
if(event.name===TimelineModelImpl.DevToolsMetadataEvent.FrameCommittedInBrowser&&this._browserFrameTracking){let frame=this._pageFrames.get(data['frame']);if(!frame){const parent=data['parent']&&this._pageFrames.get(data['parent']);if(!parent){return;}
frame=new PageFrame(data);this._pageFrames.set(frame.frameId,frame);parent.addChild(frame);}
frame.update(event.startTime,data);return;}
if(event.name===TimelineModelImpl.DevToolsMetadataEvent.ProcessReadyInBrowser&&this._browserFrameTracking){const frame=this._pageFrames.get(data['frame']);if(frame){frame.processReady(data['processPseudoId'],data['processId']);}
return;}
if(event.name===TimelineModelImpl.DevToolsMetadataEvent.FrameDeletedInBrowser&&this._browserFrameTracking){const frame=this._pageFrames.get(data['frame']);if(frame){frame.deletedTime=event.startTime;}
return;}}}
_ensureNamedTrack(type){if(!this._namedTracks.has(type)){const track=new Track();track.type=type;this._tracks.push(track);this._namedTracks.set(type,track);}
return this._namedTracks.get(type);}
_findAncestorEvent(name){for(let i=this._eventStack.length-1;i>=0;--i){const event=this._eventStack[i];if(event.name===name){return event;}}
return null;}
_addPageFrame(event,payload){const parent=payload['parent']&&this._pageFrames.get(payload['parent']);if(payload['parent']&&!parent){return false;}
const pageFrame=new PageFrame(payload);this._pageFrames.set(pageFrame.frameId,pageFrame);pageFrame.update(event.startTime,payload);if(parent){parent.addChild(pageFrame);}
return true;}
_reset(){this._isGenericTrace=false;this._tracks=[];this._namedTracks=new Map();this._inspectedTargetEvents=[];this._timeMarkerEvents=[];this._sessionId=null;this._mainFrameNodeId=null;this._cpuProfiles=[];this._workerIdByThread=new WeakMap();this._pageFrames=new Map();this._mainFrame=null;this._requestsFromBrowser=new Map();this._minimumRecordTime=0;this._maximumRecordTime=0;}
isGenericTrace(){return this._isGenericTrace;}
tracingModel(){return this._tracingModel;}
minimumRecordTime(){return this._minimumRecordTime;}
maximumRecordTime(){return this._maximumRecordTime;}
inspectedTargetEvents(){return this._inspectedTargetEvents;}
tracks(){return this._tracks;}
isEmpty(){return this.minimumRecordTime()===0&&this.maximumRecordTime()===0;}
timeMarkerEvents(){return this._timeMarkerEvents;}
rootFrames(){return Array.from(this._pageFrames.values()).filter(frame=>!frame.parent);}
pageURL(){return this._mainFrame&&this._mainFrame.url||'';}
pageFrameById(frameId){return frameId?this._pageFrames.get(frameId)||null:null;}
networkRequests(){if(this.isGenericTrace()){return[];}
const requests=new Map();const requestsList=[];const zeroStartRequestsList=[];const types=RecordType;const resourceTypes=new Set([types.ResourceWillSendRequest,types.ResourceSendRequest,types.ResourceReceiveResponse,types.ResourceReceivedData,types.ResourceFinish,types.ResourceMarkAsCached]);const events=this.inspectedTargetEvents();for(let i=0;i<events.length;++i){const e=events[i];if(!resourceTypes.has(e.name)){continue;}
const id=TimelineModelImpl.globalEventId(e,'requestId');if(e.name===types.ResourceSendRequest&&this._requestsFromBrowser.has(e.args.data.requestId)){addRequest(this._requestsFromBrowser.get(e.args.data.requestId),id);}
addRequest(e,id);}
function addRequest(e,id){let request=requests.get(id);if(request){request.addEvent(e);}else{request=new NetworkRequest(e);requests.set(id,request);if(request.startTime){requestsList.push(request);}else{zeroStartRequestsList.push(request);}}}
return zeroStartRequestsList.concat(requestsList);}}
export const RecordType={Task:'RunTask',Program:'Program',EventDispatch:'EventDispatch',GPUTask:'GPUTask',Animation:'Animation',RequestMainThreadFrame:'RequestMainThreadFrame',BeginFrame:'BeginFrame',NeedsBeginFrameChanged:'NeedsBeginFrameChanged',BeginMainThreadFrame:'BeginMainThreadFrame',ActivateLayerTree:'ActivateLayerTree',DrawFrame:'DrawFrame',HitTest:'HitTest',ScheduleStyleRecalculation:'ScheduleStyleRecalculation',RecalculateStyles:'RecalculateStyles',UpdateLayoutTree:'UpdateLayoutTree',InvalidateLayout:'InvalidateLayout',Layout:'Layout',UpdateLayer:'UpdateLayer',UpdateLayerTree:'UpdateLayerTree',PaintSetup:'PaintSetup',Paint:'Paint',PaintImage:'PaintImage',Rasterize:'Rasterize',RasterTask:'RasterTask',ScrollLayer:'ScrollLayer',CompositeLayers:'CompositeLayers',ScheduleStyleInvalidationTracking:'ScheduleStyleInvalidationTracking',StyleRecalcInvalidationTracking:'StyleRecalcInvalidationTracking',StyleInvalidatorInvalidationTracking:'StyleInvalidatorInvalidationTracking',LayoutInvalidationTracking:'LayoutInvalidationTracking',ParseHTML:'ParseHTML',ParseAuthorStyleSheet:'ParseAuthorStyleSheet',TimerInstall:'TimerInstall',TimerRemove:'TimerRemove',TimerFire:'TimerFire',XHRReadyStateChange:'XHRReadyStateChange',XHRLoad:'XHRLoad',CompileScript:'v8.compile',EvaluateScript:'EvaluateScript',CompileModule:'v8.compileModule',EvaluateModule:'v8.evaluateModule',WasmStreamFromResponseCallback:'v8.wasm.streamFromResponseCallback',WasmCompiledModule:'v8.wasm.compiledModule',WasmCachedModule:'v8.wasm.cachedModule',WasmModuleCacheHit:'v8.wasm.moduleCacheHit',WasmModuleCacheInvalid:'v8.wasm.moduleCacheInvalid',FrameStartedLoading:'FrameStartedLoading',CommitLoad:'CommitLoad',MarkLoad:'MarkLoad',MarkDOMContent:'MarkDOMContent',MarkFirstPaint:'firstPaint',MarkFCP:'firstContentfulPaint',MarkFMP:'firstMeaningfulPaint',MarkLCPCandidate:'largestContentfulPaint::Candidate',MarkLCPInvalidate:'largestContentfulPaint::Invalidate',TimeStamp:'TimeStamp',ConsoleTime:'ConsoleTime',UserTiming:'UserTiming',ResourceWillSendRequest:'ResourceWillSendRequest',ResourceSendRequest:'ResourceSendRequest',ResourceReceiveResponse:'ResourceReceiveResponse',ResourceReceivedData:'ResourceReceivedData',ResourceFinish:'ResourceFinish',ResourceMarkAsCached:'ResourceMarkAsCached',RunMicrotasks:'RunMicrotasks',FunctionCall:'FunctionCall',GCEvent:'GCEvent',MajorGC:'MajorGC',MinorGC:'MinorGC',JSFrame:'JSFrame',JSSample:'JSSample',V8Sample:'V8Sample',JitCodeAdded:'JitCodeAdded',JitCodeMoved:'JitCodeMoved',StreamingCompileScript:'v8.parseOnBackground',StreamingCompileScriptWaiting:'v8.parseOnBackgroundWaiting',StreamingCompileScriptParsing:'v8.parseOnBackgroundParsing',V8Execute:'V8.Execute',UpdateCounters:'UpdateCounters',RequestAnimationFrame:'RequestAnimationFrame',CancelAnimationFrame:'CancelAnimationFrame',FireAnimationFrame:'FireAnimationFrame',RequestIdleCallback:'RequestIdleCallback',CancelIdleCallback:'CancelIdleCallback',FireIdleCallback:'FireIdleCallback',WebSocketCreate:'WebSocketCreate',WebSocketSendHandshakeRequest:'WebSocketSendHandshakeRequest',WebSocketReceiveHandshakeResponse:'WebSocketReceiveHandshakeResponse',WebSocketDestroy:'WebSocketDestroy',EmbedderCallback:'EmbedderCallback',SetLayerTreeId:'SetLayerTreeId',TracingStartedInPage:'TracingStartedInPage',TracingSessionIdForWorker:'TracingSessionIdForWorker',DecodeImage:'Decode Image',ResizeImage:'Resize Image',DrawLazyPixelRef:'Draw LazyPixelRef',DecodeLazyPixelRef:'Decode LazyPixelRef',LazyPixelRef:'LazyPixelRef',LayerTreeHostImplSnapshot:'cc::LayerTreeHostImpl',PictureSnapshot:'cc::Picture',DisplayItemListSnapshot:'cc::DisplayItemList',LatencyInfo:'LatencyInfo',LatencyInfoFlow:'LatencyInfo.Flow',InputLatencyMouseMove:'InputLatency::MouseMove',InputLatencyMouseWheel:'InputLatency::MouseWheel',ImplSideFling:'InputHandlerProxy::HandleGestureFling::started',GCCollectGarbage:'BlinkGC.AtomicPhase',CryptoDoEncrypt:'DoEncrypt',CryptoDoEncryptReply:'DoEncryptReply',CryptoDoDecrypt:'DoDecrypt',CryptoDoDecryptReply:'DoDecryptReply',CryptoDoDigest:'DoDigest',CryptoDoDigestReply:'DoDigestReply',CryptoDoSign:'DoSign',CryptoDoSignReply:'DoSignReply',CryptoDoVerify:'DoVerify',CryptoDoVerifyReply:'DoVerifyReply',CpuProfile:'CpuProfile',Profile:'Profile',AsyncTask:'AsyncTask',};TimelineModelImpl.Category={Console:'blink.console',UserTiming:'blink.user_timing',LatencyInfo:'latencyInfo'};TimelineModelImpl.WarningType={LongTask:'LongTask',ForcedStyle:'ForcedStyle',ForcedLayout:'ForcedLayout',IdleDeadlineExceeded:'IdleDeadlineExceeded',LongHandler:'LongHandler',LongRecurringHandler:'LongRecurringHandler',V8Deopt:'V8Deopt'};TimelineModelImpl.WorkerThreadName='DedicatedWorker thread';TimelineModelImpl.WorkerThreadNameLegacy='DedicatedWorker Thread';TimelineModelImpl.RendererMainThreadName='CrRendererMain';TimelineModelImpl.BrowserMainThreadName='CrBrowserMain';TimelineModelImpl.DevToolsMetadataEvent={TracingStartedInBrowser:'TracingStartedInBrowser',TracingStartedInPage:'TracingStartedInPage',TracingSessionIdForWorker:'TracingSessionIdForWorker',FrameCommittedInBrowser:'FrameCommittedInBrowser',ProcessReadyInBrowser:'ProcessReadyInBrowser',FrameDeletedInBrowser:'FrameDeletedInBrowser',};TimelineModelImpl.Thresholds={LongTask:200,Handler:150,RecurringHandler:50,ForcedLayout:30,IdleCallbackAddon:5};export class Track{constructor(){this.name='';this.type=TrackType.Other;this.forMainFrame=false;this.url='';this.events=[];this.asyncEvents=[];this.tasks=[];this._syncEvents=null;this.thread=null;}
syncEvents(){if(this.events.length){return this.events;}
if(this._syncEvents){return this._syncEvents;}
const stack=[];this._syncEvents=[];for(const event of this.asyncEvents){const startTime=event.startTime;const endTime=event.endTime;while(stack.length&&startTime>=stack.peekLast().endTime){stack.pop();}
if(stack.length&&endTime>stack.peekLast().endTime){this._syncEvents=[];break;}
const syncEvent=new SDK.TracingModel.Event(event.categoriesString,event.name,SDK.TracingModel.Phase.Complete,startTime,event.thread);syncEvent.setEndTime(endTime);syncEvent.addArgs(event.args);this._syncEvents.push(syncEvent);stack.push(syncEvent);}
return this._syncEvents;}}
export const TrackType={MainThread:Symbol('MainThread'),Worker:Symbol('Worker'),Input:Symbol('Input'),Animation:Symbol('Animation'),Timings:Symbol('Timings'),Console:Symbol('Console'),Raster:Symbol('Raster'),GPU:Symbol('GPU'),Other:Symbol('Other'),};export class PageFrame{constructor(payload){this.frameId=payload['frame'];this.url=payload['url']||'';this.name=payload['name'];this.children=[];this.parent=null;this.processes=[];this.deletedTime=null;this.ownerNode=null;}
update(time,payload){this.url=payload['url']||'';this.name=payload['name'];if(payload['processId']){this.processes.push({time:time,processId:payload['processId'],processPseudoId:'',url:payload['url']||''});}else{this.processes.push({time:time,processId:-1,processPseudoId:payload['processPseudoId'],url:payload['url']||''});}}
processReady(processPseudoId,processId){for(const process of this.processes){if(process.processPseudoId===processPseudoId){process.processPseudoId='';process.processId=processId;}}}
addChild(child){this.children.push(child);child.parent=this;}}
export class NetworkRequest{constructor(event){const recordType=RecordType;const isInitial=event.name===recordType.ResourceSendRequest||event.name===recordType.ResourceWillSendRequest;this.startTime=isInitial?event.startTime:0;this.endTime=Infinity;this.encodedDataLength=0;this.decodedBodyLength=0;this.children=[];this.timing;this.mimeType;this.url;this.requestMethod;this._transferSize=0;this._maybeDiskCached=false;this._memoryCached=false;this.addEvent(event);}
addEvent(event){this.children.push(event);const recordType=RecordType;this.startTime=Math.min(this.startTime,event.startTime);const eventData=event.args['data'];if(eventData['mimeType']){this.mimeType=eventData['mimeType'];}
if('priority'in eventData){this.priority=eventData['priority'];}
if(event.name===recordType.ResourceFinish){this.endTime=event.startTime;}
if(eventData['finishTime']){this.finishTime=eventData['finishTime']*1000;}
if(!this.responseTime&&(event.name===recordType.ResourceReceiveResponse||event.name===recordType.ResourceReceivedData)){this.responseTime=event.startTime;}
const encodedDataLength=eventData['encodedDataLength']||0;if(event.name===recordType.ResourceMarkAsCached){this._memoryCached=true;}
if(event.name===recordType.ResourceReceiveResponse){if(eventData['fromCache']){this._maybeDiskCached=true;}
if(eventData['fromServiceWorker']){this.fromServiceWorker=true;}
if(eventData['hasCachedResource']){this.hasCachedResource=true;}
this.encodedDataLength=encodedDataLength;}
if(event.name===recordType.ResourceReceivedData){this.encodedDataLength+=encodedDataLength;}
if(event.name===recordType.ResourceFinish&&encodedDataLength){this.encodedDataLength=encodedDataLength;this._transferSize=encodedDataLength;}
const decodedBodyLength=eventData['decodedBodyLength'];if(event.name===recordType.ResourceFinish&&decodedBodyLength){this.decodedBodyLength=decodedBodyLength;}
if(!this.url){this.url=eventData['url'];}
if(!this.requestMethod){this.requestMethod=eventData['requestMethod'];}
if(!this.timing){this.timing=eventData['timing'];}
if(eventData['fromServiceWorker']){this.fromServiceWorker=true;}}
cached(){return!!this._memoryCached||(!!this._maybeDiskCached&&!this._transferSize&&!this.fromServiceWorker);}
memoryCached(){return this._memoryCached;}
getSendReceiveTiming(){if(this.cached()||!this.timing){return{sendStartTime:this.startTime,headersEndTime:this.startTime};}
const requestTime=this.timing.requestTime*1000;const sendStartTime=requestTime+this.timing.sendStart;const headersEndTime=requestTime+this.timing.receiveHeadersEnd;return{sendStartTime,headersEndTime};}
getStartTime(){return Math.min(this.startTime,!this.cached()&&this.timing&&this.timing.requestTime*1000||Infinity);}
beginTime(){return Math.min(this.getStartTime(),!this.cached()&&this.timing&&this.timing.pushStart*1000||Infinity);}}
export class InvalidationTrackingEvent{constructor(event){this.type=event.name;this.startTime=event.startTime;this._tracingEvent=event;const eventData=event.args['data'];this.frame=eventData['frame'];this.nodeId=eventData['nodeId'];this.nodeName=eventData['nodeName'];this.invalidationSet=eventData['invalidationSet'];this.invalidatedSelectorId=eventData['invalidatedSelectorId'];this.changedId=eventData['changedId'];this.changedClass=eventData['changedClass'];this.changedAttribute=eventData['changedAttribute'];this.changedPseudo=eventData['changedPseudo'];this.selectorPart=eventData['selectorPart'];this.extraData=eventData['extraData'];this.invalidationList=eventData['invalidationList'];this.cause={reason:eventData['reason'],stackTrace:eventData['stackTrace']};if(!this.cause.reason&&this.cause.stackTrace&&this.type===RecordType.LayoutInvalidationTracking){this.cause.reason='Layout forced';}}}
export class InvalidationTracker{constructor(){this._lastRecalcStyle=null;this._lastPaintWithLayer=null;this._didPaint=false;this._initializePerFrameState();}
static invalidationEventsFor(event){return event[InvalidationTracker._invalidationTrackingEventsSymbol]||null;}
addInvalidation(invalidation){this._startNewFrameIfNeeded();if(!invalidation.nodeId){console.error('Invalidation lacks node information.');console.error(invalidation);return;}
const recordTypes=RecordType;if(invalidation.type===recordTypes.StyleRecalcInvalidationTracking&&invalidation.cause.reason==='StyleInvalidator'){return;}
const styleRecalcInvalidation=(invalidation.type===recordTypes.ScheduleStyleInvalidationTracking||invalidation.type===recordTypes.StyleInvalidatorInvalidationTracking||invalidation.type===recordTypes.StyleRecalcInvalidationTracking);if(styleRecalcInvalidation){const duringRecalcStyle=invalidation.startTime&&this._lastRecalcStyle&&invalidation.startTime>=this._lastRecalcStyle.startTime&&invalidation.startTime<=this._lastRecalcStyle.endTime;if(duringRecalcStyle){this._associateWithLastRecalcStyleEvent(invalidation);}}
if(this._invalidations[invalidation.type]){this._invalidations[invalidation.type].push(invalidation);}else{this._invalidations[invalidation.type]=[invalidation];}
if(invalidation.nodeId){if(this._invalidationsByNodeId[invalidation.nodeId]){this._invalidationsByNodeId[invalidation.nodeId].push(invalidation);}else{this._invalidationsByNodeId[invalidation.nodeId]=[invalidation];}}}
didRecalcStyle(recalcStyleEvent){this._lastRecalcStyle=recalcStyleEvent;const types=[RecordType.ScheduleStyleInvalidationTracking,RecordType.StyleInvalidatorInvalidationTracking,RecordType.StyleRecalcInvalidationTracking];for(const invalidation of this._invalidationsOfTypes(types)){this._associateWithLastRecalcStyleEvent(invalidation);}}
_associateWithLastRecalcStyleEvent(invalidation){if(invalidation.linkedRecalcStyleEvent){return;}
const recordTypes=RecordType;const recalcStyleFrameId=this._lastRecalcStyle.args['beginData']['frame'];if(invalidation.type===recordTypes.StyleInvalidatorInvalidationTracking){this._addSyntheticStyleRecalcInvalidations(this._lastRecalcStyle,recalcStyleFrameId,invalidation);}else if(invalidation.type===recordTypes.ScheduleStyleInvalidationTracking){}else{this._addInvalidationToEvent(this._lastRecalcStyle,recalcStyleFrameId,invalidation);}
invalidation.linkedRecalcStyleEvent=true;}
_addSyntheticStyleRecalcInvalidations(event,frameId,styleInvalidatorInvalidation){if(!styleInvalidatorInvalidation.invalidationList){this._addSyntheticStyleRecalcInvalidation(styleInvalidatorInvalidation._tracingEvent,styleInvalidatorInvalidation);return;}
if(!styleInvalidatorInvalidation.nodeId){console.error('Invalidation lacks node information.');console.error(styleInvalidatorInvalidation);return;}
for(let i=0;i<styleInvalidatorInvalidation.invalidationList.length;i++){const setId=styleInvalidatorInvalidation.invalidationList[i]['id'];let lastScheduleStyleRecalculation;const nodeInvalidations=this._invalidationsByNodeId[styleInvalidatorInvalidation.nodeId]||[];for(let j=0;j<nodeInvalidations.length;j++){const invalidation=nodeInvalidations[j];if(invalidation.frame!==frameId||invalidation.invalidationSet!==setId||invalidation.type!==RecordType.ScheduleStyleInvalidationTracking){continue;}
lastScheduleStyleRecalculation=invalidation;}
if(!lastScheduleStyleRecalculation){console.error('Failed to lookup the event that scheduled a style invalidator invalidation.');continue;}
this._addSyntheticStyleRecalcInvalidation(lastScheduleStyleRecalculation._tracingEvent,styleInvalidatorInvalidation);}}
_addSyntheticStyleRecalcInvalidation(baseEvent,styleInvalidatorInvalidation){const invalidation=new InvalidationTrackingEvent(baseEvent);invalidation.type=RecordType.StyleRecalcInvalidationTracking;if(styleInvalidatorInvalidation.cause.reason){invalidation.cause.reason=styleInvalidatorInvalidation.cause.reason;}
if(styleInvalidatorInvalidation.selectorPart){invalidation.selectorPart=styleInvalidatorInvalidation.selectorPart;}
this.addInvalidation(invalidation);if(!invalidation.linkedRecalcStyleEvent){this._associateWithLastRecalcStyleEvent(invalidation);}}
didLayout(layoutEvent){const layoutFrameId=layoutEvent.args['beginData']['frame'];for(const invalidation of this._invalidationsOfTypes([RecordType.LayoutInvalidationTracking])){if(invalidation.linkedLayoutEvent){continue;}
this._addInvalidationToEvent(layoutEvent,layoutFrameId,invalidation);invalidation.linkedLayoutEvent=true;}}
didPaint(paintEvent){this._didPaint=true;}
_addInvalidationToEvent(event,eventFrameId,invalidation){if(eventFrameId!==invalidation.frame){return;}
if(!event[InvalidationTracker._invalidationTrackingEventsSymbol]){event[InvalidationTracker._invalidationTrackingEventsSymbol]=[invalidation];}else{event[InvalidationTracker._invalidationTrackingEventsSymbol].push(invalidation);}}
_invalidationsOfTypes(types){const invalidations=this._invalidations;if(!types){types=Object.keys(invalidations);}
function*generator(){for(let i=0;i<types.length;++i){const invalidationList=invalidations[types[i]]||[];for(let j=0;j<invalidationList.length;++j){yield invalidationList[j];}}}
return generator();}
_startNewFrameIfNeeded(){if(!this._didPaint){return;}
this._initializePerFrameState();}
_initializePerFrameState(){this._invalidations={};this._invalidationsByNodeId={};this._lastRecalcStyle=null;this._lastPaintWithLayer=null;this._didPaint=false;}}
InvalidationTracker._invalidationTrackingEventsSymbol=Symbol('invalidationTrackingEvents');export class TimelineAsyncEventTracker{constructor(){TimelineAsyncEventTracker._initialize();this._initiatorByType=new Map();for(const initiator of TimelineAsyncEventTracker._asyncEvents.keys()){this._initiatorByType.set(initiator,new Map());}}
static _initialize(){if(TimelineAsyncEventTracker._asyncEvents){return;}
const events=new Map();let type=RecordType;events.set(type.TimerInstall,{causes:[type.TimerFire],joinBy:'timerId'});events.set(type.ResourceSendRequest,{causes:[type.ResourceMarkAsCached,type.ResourceReceiveResponse,type.ResourceReceivedData,type.ResourceFinish],joinBy:'requestId'});events.set(type.RequestAnimationFrame,{causes:[type.FireAnimationFrame],joinBy:'id'});events.set(type.RequestIdleCallback,{causes:[type.FireIdleCallback],joinBy:'id'});events.set(type.WebSocketCreate,{causes:[type.WebSocketSendHandshakeRequest,type.WebSocketReceiveHandshakeResponse,type.WebSocketDestroy],joinBy:'identifier'});TimelineAsyncEventTracker._asyncEvents=events;TimelineAsyncEventTracker._typeToInitiator=new Map();for(const entry of events){const types=entry[1].causes;for(type of types){TimelineAsyncEventTracker._typeToInitiator.set(type,entry[0]);}}}
processEvent(event){let initiatorType=TimelineAsyncEventTracker._typeToInitiator.get((event.name));const isInitiator=!initiatorType;if(!initiatorType){initiatorType=(event.name);}
const initiatorInfo=TimelineAsyncEventTracker._asyncEvents.get(initiatorType);if(!initiatorInfo){return;}
const id=TimelineModelImpl.globalEventId(event,initiatorInfo.joinBy);if(!id){return;}
const initiatorMap=this._initiatorByType.get(initiatorType);if(isInitiator){initiatorMap.set(id,event);return;}
const initiator=initiatorMap.get(id)||null;const timelineData=TimelineData.forEvent(event);timelineData.setInitiator(initiator);if(!timelineData.frameId&&initiator){timelineData.frameId=TimelineModelImpl.eventFrameId(initiator);}}}
export class TimelineData{constructor(){this.warning=null;this.previewElement=null;this.url=null;this.backendNodeId=0;this.stackTrace=null;this.picture=null;this._initiator=null;this.frameId='';this.timeWaitingForMainThread;}
setInitiator(initiator){this._initiator=initiator;if(!initiator||this.url){return;}
const initiatorURL=TimelineData.forEvent(initiator).url;if(initiatorURL){this.url=initiatorURL;}}
initiator(){return this._initiator;}
topFrame(){const stackTrace=this.stackTraceForSelfOrInitiator();return stackTrace&&stackTrace[0]||null;}
stackTraceForSelfOrInitiator(){return this.stackTrace||(this._initiator&&TimelineData.forEvent(this._initiator).stackTrace);}
static forEvent(event){let data=event[TimelineData._symbol];if(!data){data=new TimelineData();event[TimelineData._symbol]=data;}
return data;}}
TimelineData._symbol=Symbol('timelineData');self.TimelineModel=self.TimelineModel||{};TimelineModel=TimelineModel||{};TimelineModel.TimelineModel=TimelineModelImpl;TimelineModel.TimelineModel.Track=Track;TimelineModel.TimelineModel.TrackType=TrackType;TimelineModel.TimelineModel.RecordType=RecordType;TimelineModel.TimelineModel.PageFrame=PageFrame;TimelineModel.TimelineModel.NetworkRequest=NetworkRequest;TimelineModel.InvalidationTrackingEvent=InvalidationTrackingEvent;TimelineModel.InvalidationTracker=InvalidationTracker;TimelineModel.TimelineAsyncEventTracker=TimelineAsyncEventTracker;TimelineModel.TimelineData=TimelineData;TimelineModel.InvalidationCause;TimelineModel.TimelineModel.MetadataEvents;export class TimelineModelFilter{accept(event){return true;}}
export class TimelineVisibleEventsFilter extends TimelineModelFilter{constructor(visibleTypes){super();this._visibleTypes=new Set(visibleTypes);}
accept(event){return this._visibleTypes.has(TimelineVisibleEventsFilter._eventType(event));}
static _eventType(event){if(event.hasCategory(TimelineModel.TimelineModel.Category.Console)){return TimelineModel.TimelineModel.RecordType.ConsoleTime;}
if(event.hasCategory(TimelineModel.TimelineModel.Category.UserTiming)){return TimelineModel.TimelineModel.RecordType.UserTiming;}
if(event.hasCategory(TimelineModel.TimelineModel.Category.LatencyInfo)){return TimelineModel.TimelineModel.RecordType.LatencyInfo;}
return(event.name);}}
export class TimelineInvisibleEventsFilter extends TimelineModelFilter{constructor(invisibleTypes){super();this._invisibleTypes=new Set(invisibleTypes);}
accept(event){return!this._invisibleTypes.has(TimelineVisibleEventsFilter._eventType(event));}}
export class ExclusiveNameFilter extends TimelineModelFilter{constructor(excludeNames){super();this._excludeNames=new Set(excludeNames);}
accept(event){return!this._excludeNames.has(event.name);}}
self.TimelineModel=self.TimelineModel||{};TimelineModel=TimelineModel||{};TimelineModel.TimelineModelFilter=TimelineModelFilter;TimelineModel.TimelineVisibleEventsFilter=TimelineVisibleEventsFilter;TimelineModel.TimelineInvisibleEventsFilter=TimelineInvisibleEventsFilter;TimelineModel.ExclusiveNameFilter=ExclusiveNameFilter;export class TimelineJSProfileProcessor{static generateTracingEventsFromCpuProfile(jsProfileModel,thread){const idleNode=jsProfileModel.idleNode;const programNode=jsProfileModel.programNode;const gcNode=jsProfileModel.gcNode;const samples=jsProfileModel.samples;const timestamps=jsProfileModel.timestamps;const jsEvents=[];const nodeToStackMap=new Map();nodeToStackMap.set(programNode,[]);for(let i=0;i<samples.length;++i){let node=jsProfileModel.nodeByIndex(i);if(!node){console.error(`Node with unknown id ${samples[i]} at index ${i}`);continue;}
if(node===gcNode||node===idleNode){continue;}
let callFrames=nodeToStackMap.get(node);if(!callFrames){callFrames=(new Array(node.depth+1));nodeToStackMap.set(node,callFrames);for(let j=0;node.parent;node=node.parent){callFrames[j++]=(node);}}
const jsSampleEvent=new SDK.TracingModel.Event(SDK.TracingModel.DevToolsTimelineEventCategory,TimelineModel.TimelineModel.RecordType.JSSample,SDK.TracingModel.Phase.Instant,timestamps[i],thread);jsSampleEvent.args['data']={stackTrace:callFrames};jsEvents.push(jsSampleEvent);}
return jsEvents;}
static generateJSFrameEvents(events){function equalFrames(frame1,frame2){return frame1.scriptId===frame2.scriptId&&frame1.functionName===frame2.functionName&&frame1.lineNumber===frame2.lineNumber;}
function isJSInvocationEvent(e){switch(e.name){case TimelineModel.TimelineModel.RecordType.RunMicrotasks:case TimelineModel.TimelineModel.RecordType.FunctionCall:case TimelineModel.TimelineModel.RecordType.EvaluateScript:case TimelineModel.TimelineModel.RecordType.EvaluateModule:case TimelineModel.TimelineModel.RecordType.EventDispatch:case TimelineModel.TimelineModel.RecordType.V8Execute:return true;}
return false;}
const jsFrameEvents=[];const jsFramesStack=[];const lockedJsStackDepth=[];let ordinal=0;const showAllEvents=Root.Runtime.experiments.isEnabled('timelineShowAllEvents');const showRuntimeCallStats=Root.Runtime.experiments.isEnabled('timelineV8RuntimeCallStats');const showNativeFunctions=Common.moduleSetting('showNativeFunctionsInJSProfile').get();function onStartEvent(e){e.ordinal=++ordinal;extractStackTrace(e);lockedJsStackDepth.push(jsFramesStack.length);}
function onInstantEvent(e,parent){e.ordinal=++ordinal;if(parent&&isJSInvocationEvent(parent)){extractStackTrace(e);}}
function onEndEvent(e){truncateJSStack(lockedJsStackDepth.pop(),e.endTime);}
function truncateJSStack(depth,time){if(lockedJsStackDepth.length){const lockedDepth=lockedJsStackDepth.peekLast();if(depth<lockedDepth){console.error(`Child stack is shallower (${depth}) than the parent stack (${lockedDepth}) at ${time}`);depth=lockedDepth;}}
if(jsFramesStack.length<depth){console.error(`Trying to truncate higher than the current stack size at ${time}`);depth=jsFramesStack.length;}
for(let k=0;k<jsFramesStack.length;++k){jsFramesStack[k].setEndTime(time);}
jsFramesStack.length=depth;}
function showNativeName(name){return showRuntimeCallStats&&!!TimelineJSProfileProcessor.nativeGroup(name);}
function filterStackFrames(stack){if(showAllEvents){return;}
let previousNativeFrameName=null;let j=0;for(let i=0;i<stack.length;++i){const frame=stack[i];const url=frame.url;const isNativeFrame=url&&url.startsWith('native ');if(!showNativeFunctions&&isNativeFrame){continue;}
const isNativeRuntimeFrame=TimelineJSProfileProcessor.isNativeRuntimeFrame(frame);if(isNativeRuntimeFrame&&!showNativeName(frame.functionName)){continue;}
const nativeFrameName=isNativeRuntimeFrame?TimelineJSProfileProcessor.nativeGroup(frame.functionName):null;if(previousNativeFrameName&&previousNativeFrameName===nativeFrameName){continue;}
previousNativeFrameName=nativeFrameName;stack[j++]=frame;}
stack.length=j;}
function extractStackTrace(e){const recordTypes=TimelineModel.TimelineModel.RecordType;const callFrames=e.name===recordTypes.JSSample?e.args['data']['stackTrace'].slice().reverse():jsFramesStack.map(frameEvent=>frameEvent.args['data']);filterStackFrames(callFrames);const endTime=e.endTime||e.startTime;const minFrames=Math.min(callFrames.length,jsFramesStack.length);let i;for(i=lockedJsStackDepth.peekLast()||0;i<minFrames;++i){const newFrame=callFrames[i];const oldFrame=jsFramesStack[i].args['data'];if(!equalFrames(newFrame,oldFrame)){break;}
jsFramesStack[i].setEndTime(Math.max(jsFramesStack[i].endTime,endTime));}
truncateJSStack(i,e.startTime);for(;i<callFrames.length;++i){const frame=callFrames[i];const jsFrameEvent=new SDK.TracingModel.Event(SDK.TracingModel.DevToolsTimelineEventCategory,recordTypes.JSFrame,SDK.TracingModel.Phase.Complete,e.startTime,e.thread);jsFrameEvent.ordinal=e.ordinal;jsFrameEvent.addArgs({data:frame});jsFrameEvent.setEndTime(endTime);jsFramesStack.push(jsFrameEvent);jsFrameEvents.push(jsFrameEvent);}}
const firstTopLevelEvent=events.find(SDK.TracingModel.isTopLevelEvent);const startTime=firstTopLevelEvent?firstTopLevelEvent.startTime:0;TimelineModel.TimelineModel.forEachEvent(events,onStartEvent,onEndEvent,onInstantEvent,startTime);return jsFrameEvents;}
static isNativeRuntimeFrame(frame){return frame.url==='native V8Runtime';}
static nativeGroup(nativeName){if(nativeName.startsWith('Parse')){return TimelineJSProfileProcessor.NativeGroups.Parse;}
if(nativeName.startsWith('Compile')||nativeName.startsWith('Recompile')){return TimelineJSProfileProcessor.NativeGroups.Compile;}
return null;}
static buildTraceProfileFromCpuProfile(profile,tid,injectPageEvent,name){const events=[];if(injectPageEvent){appendEvent('TracingStartedInPage',{data:{'sessionId':'1'}},0,0,'M');}
if(!name){name=ls`Thread ${tid}`;}
appendEvent(SDK.TracingModel.MetadataEvent.ThreadName,{name},0,0,'M','__metadata');if(!profile){return events;}
const idToNode=new Map();const nodes=profile['nodes'];for(let i=0;i<nodes.length;++i){idToNode.set(nodes[i].id,nodes[i]);}
let programEvent=null;let functionEvent=null;let nextTime=profile.startTime;let currentTime;const samples=profile['samples'];const timeDeltas=profile['timeDeltas'];for(let i=0;i<samples.length;++i){currentTime=nextTime;nextTime+=timeDeltas[i];const node=idToNode.get(samples[i]);const name=node.callFrame.functionName;if(name==='(idle)'){closeEvents();continue;}
if(!programEvent){programEvent=appendEvent('MessageLoop::RunTask',{},currentTime,0,'X','toplevel');}
if(name==='(program)'){if(functionEvent){functionEvent.dur=currentTime-functionEvent.ts;functionEvent=null;}}else{if(!functionEvent){functionEvent=appendEvent('FunctionCall',{data:{'sessionId':'1'}},currentTime);}}}
closeEvents();appendEvent('CpuProfile',{data:{'cpuProfile':profile}},profile.endTime,0,'I');return events;function closeEvents(){if(programEvent){programEvent.dur=currentTime-programEvent.ts;}
if(functionEvent){functionEvent.dur=currentTime-functionEvent.ts;}
programEvent=null;functionEvent=null;}
function appendEvent(name,args,ts,dur,ph,cat){const event=({cat:cat||'disabled-by-default-devtools.timeline',name,ph:ph||'X',pid:1,tid,ts,args});if(dur){event.dur=dur;}
events.push(event);return event;}}}
TimelineJSProfileProcessor.NativeGroups={'Compile':'Compile','Parse':'Parse'};self.TimelineModel=self.TimelineModel||{};TimelineModel=TimelineModel||{};TimelineModel.TimelineJSProfileProcessor=TimelineJSProfileProcessor;export class TimelineIRModel{constructor(){this.reset();}
static phaseForEvent(event){return event[TimelineIRModel._eventIRPhase];}
populate(inputLatencies,animations){this.reset();if(!inputLatencies){return;}
this._processInputLatencies(inputLatencies);if(animations){this._processAnimations(animations);}
const range=new Common.SegmentedRange();range.appendRange(this._drags);range.appendRange(this._cssAnimations);range.appendRange(this._scrolls);range.appendRange(this._responses);this._segments=range.segments();}
_processInputLatencies(events){const eventTypes=InputEvents;const phases=Phases;const thresholdsMs=TimelineIRModel._mergeThresholdsMs;let scrollStart;let flingStart;let touchStart;let firstTouchMove;let mouseWheel;let mouseDown;let mouseMove;for(let i=0;i<events.length;++i){const event=events[i];if(i>0&&events[i].startTime<events[i-1].startTime){console.assert(false,'Unordered input events');}
const type=this._inputEventType(event.name);switch(type){case eventTypes.ScrollBegin:this._scrolls.append(this._segmentForEvent(event,phases.Scroll));scrollStart=event;break;case eventTypes.ScrollEnd:if(scrollStart){this._scrolls.append(this._segmentForEventRange(scrollStart,event,phases.Scroll));}else{this._scrolls.append(this._segmentForEvent(event,phases.Scroll));}
scrollStart=null;break;case eventTypes.ScrollUpdate:touchStart=null;this._scrolls.append(this._segmentForEvent(event,phases.Scroll));break;case eventTypes.FlingStart:if(flingStart){Common.console.error(Common.UIString('Two flings at the same time? %s vs %s',flingStart.startTime,event.startTime));break;}
flingStart=event;break;case eventTypes.FlingCancel:if(!flingStart){break;}
this._scrolls.append(this._segmentForEventRange(flingStart,event,phases.Fling));flingStart=null;break;case eventTypes.ImplSideFling:this._scrolls.append(this._segmentForEvent(event,phases.Fling));break;case eventTypes.ShowPress:case eventTypes.Tap:case eventTypes.KeyDown:case eventTypes.KeyDownRaw:case eventTypes.KeyUp:case eventTypes.Char:case eventTypes.Click:case eventTypes.ContextMenu:this._responses.append(this._segmentForEvent(event,phases.Response));break;case eventTypes.TouchStart:if(touchStart){Common.console.error(Common.UIString('Two touches at the same time? %s vs %s',touchStart.startTime,event.startTime));break;}
touchStart=event;event.steps[0][TimelineIRModel._eventIRPhase]=phases.Response;firstTouchMove=null;break;case eventTypes.TouchCancel:touchStart=null;break;case eventTypes.TouchMove:if(firstTouchMove){this._drags.append(this._segmentForEvent(event,phases.Drag));}else if(touchStart){firstTouchMove=event;this._responses.append(this._segmentForEventRange(touchStart,event,phases.Response));}
break;case eventTypes.TouchEnd:touchStart=null;break;case eventTypes.MouseDown:mouseDown=event;mouseMove=null;break;case eventTypes.MouseMove:if(mouseDown&&!mouseMove&&mouseDown.startTime+thresholdsMs.mouse>event.startTime){this._responses.append(this._segmentForEvent(mouseDown,phases.Response));this._responses.append(this._segmentForEvent(event,phases.Response));}else if(mouseDown){this._drags.append(this._segmentForEvent(event,phases.Drag));}
mouseMove=event;break;case eventTypes.MouseUp:this._responses.append(this._segmentForEvent(event,phases.Response));mouseDown=null;break;case eventTypes.MouseWheel:if(mouseWheel&&canMerge(thresholdsMs.mouse,mouseWheel,event)){this._scrolls.append(this._segmentForEventRange(mouseWheel,event,phases.Scroll));}else{this._scrolls.append(this._segmentForEvent(event,phases.Scroll));}
mouseWheel=event;break;}}
function canMerge(threshold,first,second){return first.endTime<second.startTime&&second.startTime<first.endTime+threshold;}}
_processAnimations(events){for(let i=0;i<events.length;++i){this._cssAnimations.append(this._segmentForEvent(events[i],Phases.Animation));}}
_segmentForEvent(event,phase){this._setPhaseForEvent(event,phase);return new Common.Segment(event.startTime,event.endTime,phase);}
_segmentForEventRange(startEvent,endEvent,phase){this._setPhaseForEvent(startEvent,phase);this._setPhaseForEvent(endEvent,phase);return new Common.Segment(startEvent.startTime,endEvent.endTime,phase);}
_setPhaseForEvent(asyncEvent,phase){asyncEvent.steps[0][TimelineIRModel._eventIRPhase]=phase;}
interactionRecords(){return this._segments;}
reset(){const thresholdsMs=TimelineIRModel._mergeThresholdsMs;this._segments=[];this._drags=new Common.SegmentedRange(merge.bind(null,thresholdsMs.mouse));this._cssAnimations=new Common.SegmentedRange(merge.bind(null,thresholdsMs.animation));this._responses=new Common.SegmentedRange(merge.bind(null,0));this._scrolls=new Common.SegmentedRange(merge.bind(null,thresholdsMs.animation));function merge(threshold,first,second){return first.end+threshold>=second.begin&&first.data===second.data?first:null;}}
_inputEventType(eventName){const prefix='InputLatency::';if(!eventName.startsWith(prefix)){if(eventName===InputEvents.ImplSideFling){return(eventName);}
console.error('Unrecognized input latency event: '+eventName);return null;}
return(eventName.substr(prefix.length));}}
export const Phases={Idle:'Idle',Response:'Response',Scroll:'Scroll',Fling:'Fling',Drag:'Drag',Animation:'Animation',Uncategorized:'Uncategorized'};export const InputEvents={Char:'Char',Click:'GestureClick',ContextMenu:'ContextMenu',FlingCancel:'GestureFlingCancel',FlingStart:'GestureFlingStart',ImplSideFling:TimelineModel.TimelineModel.RecordType.ImplSideFling,KeyDown:'KeyDown',KeyDownRaw:'RawKeyDown',KeyUp:'KeyUp',LatencyScrollUpdate:'ScrollUpdate',MouseDown:'MouseDown',MouseMove:'MouseMove',MouseUp:'MouseUp',MouseWheel:'MouseWheel',PinchBegin:'GesturePinchBegin',PinchEnd:'GesturePinchEnd',PinchUpdate:'GesturePinchUpdate',ScrollBegin:'GestureScrollBegin',ScrollEnd:'GestureScrollEnd',ScrollUpdate:'GestureScrollUpdate',ScrollUpdateRenderer:'ScrollUpdate',ShowPress:'GestureShowPress',Tap:'GestureTap',TapCancel:'GestureTapCancel',TapDown:'GestureTapDown',TouchCancel:'TouchCancel',TouchEnd:'TouchEnd',TouchMove:'TouchMove',TouchStart:'TouchStart'};TimelineIRModel._mergeThresholdsMs={animation:1,mouse:40,};TimelineIRModel._eventIRPhase=Symbol('eventIRPhase');self.TimelineModel=self.TimelineModel||{};TimelineModel=TimelineModel||{};TimelineModel.TimelineIRModel=TimelineIRModel;TimelineModel.TimelineIRModel.Phases=Phases;TimelineModel.TimelineIRModel.InputEvents=InputEvents;export class TimelineFrameModel{constructor(categoryMapper){this._categoryMapper=categoryMapper;this.reset();}
frames(startTime,endTime){if(!startTime&&!endTime){return this._frames;}
const firstFrame=this._frames.lowerBound(startTime||0,(time,frame)=>time-frame.endTime);const lastFrame=this._frames.lowerBound(endTime||Infinity,(time,frame)=>time-frame.startTime);return this._frames.slice(firstFrame,lastFrame);}
hasRasterTile(rasterTask){const data=rasterTask.args['tileData'];if(!data){return false;}
const frameId=data['sourceFrameNumber'];const frame=frameId&&this._frameById[frameId];if(!frame||!frame.layerTree){return false;}
return true;}
rasterTilePromise(rasterTask){if(!this._target){return Promise.resolve(null);}
const data=rasterTask.args['tileData'];const frameId=data['sourceFrameNumber'];const tileId=data['tileId']&&data['tileId']['id_ref'];const frame=frameId&&this._frameById[frameId];if(!frame||!frame.layerTree||!tileId){return Promise.resolve(null);}
return frame.layerTree.layerTreePromise().then(layerTree=>layerTree&&layerTree.pictureForRasterTile(tileId));}
reset(){this._minimumRecordTime=Infinity;this._frames=[];this._frameById={};this._lastFrame=null;this._lastLayerTree=null;this._mainFrameCommitted=false;this._mainFrameRequested=false;this._framePendingCommit=null;this._lastBeginFrame=null;this._lastNeedsBeginFrame=null;this._framePendingActivation=null;this._lastTaskBeginTime=null;this._target=null;this._layerTreeId=null;this._currentTaskTimeByCategory={};}
handleBeginFrame(startTime){if(!this._lastFrame){this._startFrame(startTime);}
this._lastBeginFrame=startTime;}
handleDrawFrame(startTime){if(!this._lastFrame){this._startFrame(startTime);return;}
if(this._mainFrameCommitted||!this._mainFrameRequested){if(this._lastNeedsBeginFrame){const idleTimeEnd=this._framePendingActivation?this._framePendingActivation.triggerTime:(this._lastBeginFrame||this._lastNeedsBeginFrame);if(idleTimeEnd>this._lastFrame.startTime){this._lastFrame.idle=true;this._startFrame(idleTimeEnd);if(this._framePendingActivation){this._commitPendingFrame();}
this._lastBeginFrame=null;}
this._lastNeedsBeginFrame=null;}
this._startFrame(startTime);}
this._mainFrameCommitted=false;}
handleActivateLayerTree(){if(!this._lastFrame){return;}
if(this._framePendingActivation&&!this._lastNeedsBeginFrame){this._commitPendingFrame();}}
handleRequestMainThreadFrame(){if(!this._lastFrame){return;}
this._mainFrameRequested=true;}
handleCompositeLayers(){if(!this._framePendingCommit){return;}
this._framePendingActivation=this._framePendingCommit;this._framePendingCommit=null;this._mainFrameRequested=false;this._mainFrameCommitted=true;}
handleLayerTreeSnapshot(layerTree){this._lastLayerTree=layerTree;}
handleNeedFrameChanged(startTime,needsBeginFrame){if(needsBeginFrame){this._lastNeedsBeginFrame=startTime;}}
_startFrame(startTime){if(this._lastFrame){this._flushFrame(this._lastFrame,startTime);}
this._lastFrame=new TimelineFrame(startTime,startTime-this._minimumRecordTime);}
_flushFrame(frame,endTime){frame._setLayerTree(this._lastLayerTree);frame._setEndTime(endTime);if(this._lastLayerTree){this._lastLayerTree._setPaints(frame._paints);}
if(this._frames.length&&(frame.startTime!==this._frames.peekLast().endTime||frame.startTime>frame.endTime)){console.assert(false,`Inconsistent frame time for frame ${this._frames.length} (${frame.startTime} - ${frame.endTime})`);}
this._frames.push(frame);if(typeof frame._mainFrameId==='number'){this._frameById[frame._mainFrameId]=frame;}}
_commitPendingFrame(){this._lastFrame._addTimeForCategories(this._framePendingActivation.timeByCategory);this._lastFrame._paints=this._framePendingActivation.paints;this._lastFrame._mainFrameId=this._framePendingActivation.mainFrameId;this._framePendingActivation=null;}
addTraceEvents(target,events,threadData){this._target=target;let j=0;this._currentProcessMainThread=threadData.length&&threadData[0].thread||null;for(let i=0;i<events.length;++i){while(j+1<threadData.length&&threadData[j+1].time<=events[i].startTime){this._currentProcessMainThread=threadData[++j].thread;}
this._addTraceEvent(events[i]);}
this._currentProcessMainThread=null;}
_addTraceEvent(event){const eventNames=TimelineModel.TimelineModel.RecordType;if(event.startTime&&event.startTime<this._minimumRecordTime){this._minimumRecordTime=event.startTime;}
if(event.name===eventNames.SetLayerTreeId){this._layerTreeId=event.args['layerTreeId']||event.args['data']['layerTreeId'];}else if(event.phase===SDK.TracingModel.Phase.SnapshotObject&&event.name===eventNames.LayerTreeHostImplSnapshot&&parseInt(event.id,0)===this._layerTreeId){const snapshot=(event);this.handleLayerTreeSnapshot(new TracingFrameLayerTree(this._target,snapshot));}else{this._processCompositorEvents(event);if(event.thread===this._currentProcessMainThread){this._addMainThreadTraceEvent(event);}else if(this._lastFrame&&event.selfTime&&!SDK.TracingModel.isTopLevelEvent(event)){this._lastFrame._addTimeForCategory(this._categoryMapper(event),event.selfTime);}}}
_processCompositorEvents(event){const eventNames=TimelineModel.TimelineModel.RecordType;if(event.args['layerTreeId']!==this._layerTreeId){return;}
const timestamp=event.startTime;if(event.name===eventNames.BeginFrame){this.handleBeginFrame(timestamp);}else if(event.name===eventNames.DrawFrame){this.handleDrawFrame(timestamp);}else if(event.name===eventNames.ActivateLayerTree){this.handleActivateLayerTree();}else if(event.name===eventNames.RequestMainThreadFrame){this.handleRequestMainThreadFrame();}else if(event.name===eventNames.NeedsBeginFrameChanged){this.handleNeedFrameChanged(timestamp,event.args['data']&&event.args['data']['needsBeginFrame']);}}
_addMainThreadTraceEvent(event){const eventNames=TimelineModel.TimelineModel.RecordType;if(SDK.TracingModel.isTopLevelEvent(event)){this._currentTaskTimeByCategory={};this._lastTaskBeginTime=event.startTime;}
if(!this._framePendingCommit&&TimelineFrameModel._mainFrameMarkers.indexOf(event.name)>=0){this._framePendingCommit=new TimelineModel.PendingFrame(this._lastTaskBeginTime||event.startTime,this._currentTaskTimeByCategory);}
if(!this._framePendingCommit){this._addTimeForCategory(this._currentTaskTimeByCategory,event);return;}
this._addTimeForCategory(this._framePendingCommit.timeByCategory,event);if(event.name===eventNames.BeginMainThreadFrame&&event.args['data']&&event.args['data']['frameId']){this._framePendingCommit.mainFrameId=event.args['data']['frameId'];}
if(event.name===eventNames.Paint&&event.args['data']['layerId']&&TimelineModel.TimelineData.forEvent(event).picture&&this._target){this._framePendingCommit.paints.push(new LayerPaintEvent(event,this._target));}
if(event.name===eventNames.CompositeLayers&&event.args['layerTreeId']===this._layerTreeId){this.handleCompositeLayers();}}
_addTimeForCategory(timeByCategory,event){if(!event.selfTime){return;}
const categoryName=this._categoryMapper(event);timeByCategory[categoryName]=(timeByCategory[categoryName]||0)+event.selfTime;}}
TimelineFrameModel._mainFrameMarkers=[TimelineModel.TimelineModel.RecordType.ScheduleStyleRecalculation,TimelineModel.TimelineModel.RecordType.InvalidateLayout,TimelineModel.TimelineModel.RecordType.BeginMainThreadFrame,TimelineModel.TimelineModel.RecordType.ScrollLayer];export class TracingFrameLayerTree{constructor(target,snapshot){this._target=target;this._snapshot=snapshot;this._paints;}
async layerTreePromise(){const result=await this._snapshot.objectPromise();if(!result){return null;}
const viewport=result['device_viewport_size'];const tiles=result['active_tiles'];const rootLayer=result['active_tree']['root_layer'];const layers=result['active_tree']['layers'];const layerTree=new TimelineModel.TracingLayerTree(this._target);layerTree.setViewportSize(viewport);layerTree.setTiles(tiles);await layerTree.setLayers(rootLayer,layers,this._paints||[]);return layerTree;}
paints(){return this._paints||[];}
_setPaints(paints){this._paints=paints;}}
export class TimelineFrame{constructor(startTime,startTimeOffset){this.startTime=startTime;this.startTimeOffset=startTimeOffset;this.endTime=this.startTime;this.duration=0;this.timeByCategory={};this.cpuTime=0;this.idle=false;this.layerTree=null;this._paints=[];this._mainFrameId=undefined;}
hasWarnings(){return false;}
_setEndTime(endTime){this.endTime=endTime;this.duration=this.endTime-this.startTime;}
_setLayerTree(layerTree){this.layerTree=layerTree;}
_addTimeForCategories(timeByCategory){for(const category in timeByCategory){this._addTimeForCategory(category,timeByCategory[category]);}}
_addTimeForCategory(category,time){this.timeByCategory[category]=(this.timeByCategory[category]||0)+time;this.cpuTime+=time;}}
export class LayerPaintEvent{constructor(event,target){this._event=event;this._target=target;}
layerId(){return this._event.args['data']['layerId'];}
event(){return this._event;}
picturePromise(){const picture=TimelineModel.TimelineData.forEvent(this._event).picture;return picture.objectPromise().then(result=>{if(!result){return null;}
const rect=result['params']&&result['params']['layer_rect'];const picture=result['skp64'];return rect&&picture?{rect:rect,serializedPicture:picture}:null;});}
snapshotPromise(){const paintProfilerModel=this._target&&this._target.model(SDK.PaintProfilerModel);return this.picturePromise().then(picture=>{if(!picture||!paintProfilerModel){return null;}
return paintProfilerModel.loadSnapshot(picture.serializedPicture).then(snapshot=>snapshot?{rect:picture.rect,snapshot:snapshot}:null);});}}
export class PendingFrame{constructor(triggerTime,timeByCategory){this.timeByCategory=timeByCategory;this.paints=[];this.mainFrameId=undefined;this.triggerTime=triggerTime;}}
self.TimelineModel=self.TimelineModel||{};TimelineModel=TimelineModel||{};TimelineModel.TimelineFrameModel=TimelineFrameModel;TimelineModel.TracingFrameLayerTree=TracingFrameLayerTree;TimelineModel.TimelineFrame=TimelineFrame;TimelineModel.LayerPaintEvent=LayerPaintEvent;TimelineModel.PendingFrame=PendingFrame;import'./HelpImpl.js';import'./ReleaseNoteView.js';import'./ReleaseNoteText.js';import*as Help from'./HelpImpl.js';import*as ReleaseNoteText from'./ReleaseNoteText.js';import*as ReleaseNoteView from'./ReleaseNoteView.js';export{Help,ReleaseNoteText,ReleaseNoteView,};export default class ReleaseNoteView extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('help/releaseNote.css');const releaseNoteElement=this._createReleaseNoteElement(Help.latestReleaseNote());const topSection=this.contentElement.createChild('div','release-note-top-section');topSection.textContent=Common.UIString(Help.latestReleaseNote().header);this.contentElement.appendChild(releaseNoteElement);}
_createReleaseNoteElement(releaseNote){const hbox=createElementWithClass('div','hbox');const container=hbox.createChild('div','release-note-container');const contentContainer=container.createChild('ul');for(const highlight of releaseNote.highlights){const listItem=contentContainer.createChild('li');const title=UI.XLink.create(highlight.link,highlight.title+' ','release-note-title');title.title='';listItem.appendChild(title);const subtitle=UI.XLink.create(highlight.link,highlight.subtitle+' ','release-note-subtitle');subtitle.title='';listItem.appendChild(subtitle);}
const actionContainer=container.createChild('div','release-note-action-container');actionContainer.appendChild(UI.createTextButton(Common.UIString('Learn more'),event=>{event.consume(true);Host.InspectorFrontendHost.openInNewTab(releaseNote.link);}));actionContainer.appendChild(UI.createTextButton(Common.UIString('Close'),event=>{event.consume(true);UI.inspectorView.closeDrawerTab(Help.releaseNoteViewId,true);},'close-release-note'));const imageLink=UI.XLink.create(releaseNote.link,' ');imageLink.classList.add('release-note-image');imageLink.title='';hbox.appendChild(imageLink);const image=imageLink.createChild('img');image.src='Images/whatsnew.png';return hbox;}}
self.Help=self.Help||{};Help=Help||{};Help.ReleaseNoteView=ReleaseNoteView;const continueToHereShortcut=Host.isMac()?'Command':'Control';const networkSearchShortcut=Host.isMac()?'Command+F':'Control+F';const commandMenuShortcut=Host.isMac()?'Command+Shift+P':'Control+Shift+P';export const releaseNoteText=[{version:22,header:'Highlights from the Chrome 80 update',highlights:[{title:'Support for let and class redeclarations',subtitle:'When experimenting with new code in the Console, repeating let or class declarations no longer causes errors.',link:'https://developers.google.com/web/updates/2019/12/devtools#redeclarations',},{title:'Improved WebAssembly debugging',subtitle:'The Sources panel has increased support for stepping over code, setting breakpoints, and resolving stack traces in source languages.',link:'https://developers.google.com/web/updates/2019/12/devtools#webassembly',},{title:'Network panel updates',subtitle:'View request initiator chains, highlight requests in the Overview, and more.',link:'https://developers.google.com/web/updates/2019/12/devtools#network',},{title:'Audits panel updates',subtitle:'The redesigned configuration UI has simplified throttling options.',link:'https://developers.google.com/web/updates/2019/12/devtools#audits',},{title:'Coverage tab updates',subtitle:'Choose per-function or per-block coverage, and more.',link:'https://developers.google.com/web/updates/2019/12/devtools#coverage',},],link:'https://developers.google.com/web/updates/2019/12/devtools',},{version:21,header:'Highlights from the Chrome 79 update',highlights:[{title:'Debug why a cookie was blocked',subtitle:'Click a resource in the Network panel and go to the updated Cookies tab.',link:'https://developers.google.com/web/updates/2019/10/devtools#blockedcookies',},{title:'View cookie values',subtitle:'Click a row in the Cookies pane in the Application panel to see the cookie\'s value.',link:'https://developers.google.com/web/updates/2019/10/devtools#cookiepreviews',},{title:'Simulate prefers-color-scheme and prefers-reduced-motion preferences',subtitle:'Open the Rendering tab to force your site into dark or light mode or set motion preferences.',link:'https://developers.google.com/web/updates/2019/10/devtools#userpreferences',},{title:'Code coverage updates',subtitle:'More accessible colors, a filter text box, and a new integration with the Sources panel.',link:'https://developers.google.com/web/updates/2019/10/devtools#coverage',},{title:'Debug why a network resource was requested',subtitle:'Click a resource in the Network panel and go to the new Initiator tab.',link:'https://developers.google.com/web/updates/2019/10/devtools#initiator',},{title:'Console and Sources panels respect indentation preferences again',subtitle:'Set your preference in Settings > Preferences > Sources > Default Indentation.',link:'https://developers.google.com/web/updates/2019/10/devtools#indentation',},{title:'New shortcuts for cursor navigation',subtitle:'Press Control+P or Control+N to move your cursor to the line above or below.',link:'https://developers.google.com/web/updates/2019/10/devtools#console',},],link:'https://developers.google.com/web/updates/2019/10/devtools',},{version:20,header:'Highlights from the Chrome 78 update',highlights:[{title:'Multi-client support in the Audits panel',subtitle:'Use the Audits panel in combination with other features, like Local Overrides or Request Blocking.',link:'https://developers.google.com/web/updates/2019/09/devtools#multiclient',},{title:'Payment Handler debugging',subtitle:'Record Payment Handler events for 3 days, even when DevTools is closed.',link:'https://developers.google.com/web/updates/2019/09/devtools#payments',},{title:'Lighthouse 5.2 in the Audits panel',subtitle:'Measure the impact of third-party code on your load performance with the new Third-Party Usage audit.',link:'https://developers.google.com/web/updates/2019/09/devtools#audits',},{title:'Largest Contentful Paint (LCP) in the Performance panel',subtitle:'Click the new LCP marker in the Timing section to see the DOM node associated with your LCP.',link:'https://developers.google.com/web/updates/2019/09/devtools#LCP',},{title:'File issues and feature requests from the Main Menu',subtitle:'Found a bug? Got an idea on how to improve DevTools? Go to Main Menu > Help > Report a DevTools issue.',link:'https://developers.google.com/web/updates/2019/09/devtools#issues',},],link:'https://developers.google.com/web/updates/2019/09/devtools',},{version:19,header:'Highlights from the Chrome 77 update',highlights:[{title:'Copy element styles',subtitle:'Right-click an element in the DOM Tree and select Copy > Copy Styles.',link:'https://developers.google.com/web/updates/2019/07/devtools#copystyles',},{title:'Visualize layout shifts',subtitle:`Press ${
            commandMenuShortcut}, run Show Rendering, and enable Layout Shift Regions to visualize content shifts.`,link:'https://developers.google.com/web/updates/2019/07/devtools#layoutshifts',},{title:'Lighthouse 5.1 in the Audits panel',subtitle:'New audits for checking for PWA installability on iOS, keeping resource counts low, and more.',link:'https://developers.google.com/web/updates/2019/07/devtools#audits',},{title:'OS theme syncing',subtitle:'DevTools now automatically switches to its own dark theme when it detects an OS in dark mode.',link:'https://developers.google.com/web/updates/2019/07/devtools#theming',},{title:'Keyboard shortcut for opening the Breakpoint Editor',subtitle:`Press ${
            Host.isMac() ?
                'Command+Option+B' :
                'Control+Alt+B'} when focused in the Editor to create Logpoints and Conditional Breakpoints more quickly.`,link:'https://developers.google.com/web/updates/2019/07/devtools#breakpointeditor',},{title:'Prefetch cache in Network panel',subtitle:'The Size column now indicates whether a resource came from the prefetch cache.',link:'https://developers.google.com/web/updates/2019/07/devtools#prefetch',},{title:'Private properties when viewing objects',subtitle:'The Console now shows private class fields in its object previews.',link:'https://developers.google.com/web/updates/2019/07/devtools#privateclassfields',},{title:'Notification and push message logs',subtitle:'Go to Application > Background Services > Notifications or Messages and click Record to log events for 3 days.',link:'https://developers.google.com/web/updates/2019/07/devtools#backgroundservices',},],link:'https://developers.google.com/web/updates/2019/07/devtools',},{version:18,header:'Highlights from the Chrome 76 update',highlights:[{title:'Autocomplete with CSS keyword values',subtitle:'Typing a keyword value like "bold" in the Styles pane now autocompletes to "font-weight: bold".',link:'https://developers.google.com/web/updates/2019/05/devtools#values',},{title:'A new UI for network settings',subtitle:'The "Use large request rows", "Group by frame", "Show overview", and "Capture screenshots" options have moved to the new Network Settings pane.',link:'https://developers.google.com/web/updates/2019/05/devtools#settings',},{title:'WebSocket messages in HAR exports',subtitle:'Network logs downloaded from the Network panel now include WebSocket messages.',link:'https://developers.google.com/web/updates/2019/05/devtools#websocket',},],link:'https://developers.google.com/web/updates/2019/05/devtools',},{version:17,header:'Highlights from the Chrome 75 update',highlights:[{title:'Meaningful preset values when autocompleting CSS functions',subtitle:'Properties like "filter" that take functions for values now autocomplete to previewable values in the Styles pane.',link:'https://developers.google.com/web/updates/2019/04/devtools#presets',},{title:'Clear site data from the Command Menu',subtitle:`Press ${commandMenuShortcut} and run the "Clear Site Data" command to clear cookies, storage, and more.`,link:'https://developers.google.com/web/updates/2019/04/devtools#clear',},{title:'View all IndexedDB databases',subtitle:'The IndexedDB pane now shows databases for all origins rather than just the main origin.',link:'https://developers.google.com/web/updates/2019/04/devtools#indexeddb',},{title:'View a resource\'s uncompressed size on hover',subtitle:'Hover over the Size column in the Network panel to view a resource\'s full size.',link:'https://developers.google.com/web/updates/2019/04/devtools#uncompressed',},{title:'Inline breakpoints in the Breakpoints pane',subtitle:'When you\'ve got multiple breakpoints on a single line of code, the Breakpoints pane now lets you manage each one independently.',link:'https://developers.google.com/web/updates/2019/04/devtools#inline',},],link:'https://developers.google.com/web/updates/2019/04/devtools',},{version:16,header:'Highlights from the Chrome 74 update',highlights:[{title:'Highlight all nodes affected by CSS property',subtitle:'Hover over a CSS property like padding or margin in the Styles pane to highlight all nodes affected by that declaration.',link:'https://developers.google.com/web/updates/2019/03/devtools#highlight',},{title:'Lighthouse v4 in the Audits panel',subtitle:'Featuring a new "tap targets" audit for checking that mobile links and buttons are properly sized, and a new UI for PWA reports.',link:'https://developers.google.com/web/updates/2019/03/devtools#lighthouse',},{title:'WebSocket binary message viewer',subtitle:'Click a WebSocket connection in the Network Log, go to the Messages tab, then click a binary message to view its contents.',link:'https://developers.google.com/web/updates/2019/03/devtools#binary',},{title:'Capture area screenshot in the Command Menu',subtitle:'Press '+commandMenuShortcut+', run the "Capture area screenshot" command, and then drag your mouse to take a screenshot of part of the viewport.',link:'https://developers.google.com/web/updates/2019/03/devtools#screenshot',},{title:'Service worker filters in the Network panel',subtitle:'Type "is:service-worker-initiated" or "is:service-worker-intercepted" to only show service worker activity.',link:'https://developers.google.com/web/updates/2019/03/devtools#swfilters',},],link:'https://developers.google.com/web/updates/2019/03/devtools',},{version:15,header:'Highlights from the Chrome 73 update',highlights:[{title:'Logpoints',subtitle:'Log messages to the Console without cluttering up your code with console.log() calls.',link:'https://developers.google.com/web/updates/2019/01/devtools#logpoints',},{title:'Detailed tooltips in Inspect Mode',subtitle:'When inspecting a node, DevTools now shows an expanded tooltip containing text, '+'color contrast, and box model information.',link:'https://developers.google.com/web/updates/2019/01/devtools#inspect',},{title:'Export code coverage data',subtitle:'The Coverage tab now supports exporting coverage data as JSON.',link:'https://developers.google.com/web/updates/2019/01/devtools#coverage',},{title:'Navigate the Console with the keyboard',subtitle:'Press Shift+Tab to focus the last message and then use the arrow keys to navigate.',link:'https://developers.google.com/web/updates/2019/01/devtools#keyboard',},{title:'Save custom geolocation overrides',subtitle:'Click Manage in the Sensors tab or open Settings > Geolocations.',link:'https://developers.google.com/web/updates/2019/01/devtools#geolocation',},{title:'Code folding',subtitle:'Go to Settings > Preferences > Sources and enable Code Folding to fold '+'code in the Sources panel.',link:'https://developers.google.com/web/updates/2019/01/devtools#folding',},],link:'https://developers.google.com/web/updates/2019/01/devtools',},{version:14,header:'Highlights from the Chrome 72 update',highlights:[{title:'Visualize performance metrics',subtitle:'Performance metrics like DOMContentLoaded and First Meaningful Paint are now marked in the Timings section of the Performance panel.',link:'https://developers.google.com/web/updates/2018/11/devtools#metrics',},{title:'Highlight text nodes',subtitle:'Hover over a text node in the DOM Tree to highlight it in the viewport.',link:'https://developers.google.com/web/updates/2018/11/devtools#highlight',},{title:'Copy JS path',subtitle:'Right-click a DOM node and select "Copy" > "Copy JS path" to quickly get a JavaScript expression that points to that node.',link:'https://developers.google.com/web/updates/2018/11/devtools#copy',},{title:'Audits panel updates',subtitle:'A new audit that lists detected JS libraries and new keywords for accessing the Audits panel from the Command Menu.',link:'https://developers.google.com/web/updates/2018/11/devtools#audits',},],link:'https://developers.google.com/web/updates/2018/11/devtools',},{version:13,header:'Highlights from the Chrome 71 update',highlights:[{title:'Hover over a Live Expression to highlight a DOM node',subtitle:'Hover over a result that evaluates to a node to highlight that node in the viewport.',link:'https://developers.google.com/web/updates/2018/10/devtools#hover',},{title:'Store DOM nodes as global variables',subtitle:'Right-click a node in the Elements panel or Console and select "Store as global variable".',link:'https://developers.google.com/web/updates/2018/10/devtools#store',},{title:'Initiator and priority information now in HAR imports and exports',subtitle:'Get more context around what caused a resource to be requested and what priority the browser assigned to each resource when sharing network logs.',link:'https://developers.google.com/web/updates/2018/10/devtools#HAR',},{title:'Access the Command Menu from the Main Menu',subtitle:'Open the Main Menu and select "Run command".',link:'https://developers.google.com/web/updates/2018/10/devtools#command-menu',},],link:'https://developers.google.com/web/updates/2018/10/devtools',},{version:12,header:'Highlights from the Chrome 70 update',highlights:[{title:'Live Expressions in the Console',subtitle:'Pin expressions to the top of the Console to monitor their values in real-time.',link:'https://developers.google.com/web/updates/2018/08/devtools#watch',},{title:'Highlight DOM nodes during Eager Evaluation',subtitle:'Type an expression that evaluates to a node to highlight that node in the viewport.',link:'https://developers.google.com/web/updates/2018/08/devtools#nodes',},{title:'Autocomplete Conditional Breakpoints',subtitle:'Type expressions quickly and accurately.',link:'https://developers.google.com/web/updates/2018/08/devtools#autocomplete',},{title:'Performance panel optimizations',subtitle:'Faster loading and processing of Performance recordings.',link:'https://developers.google.com/web/updates/2018/08/devtools#performance',},{title:'More reliable debugging',subtitle:'Bug fixes for sourcemaps and blackboxing.',link:'https://developers.google.com/web/updates/2018/08/devtools#debugging',},{title:'Debug Node.js apps with ndb',subtitle:'Detect and attach to child processes, place breakpoints before modules are required, edit files within DevTools, and more.',link:'https://developers.google.com/web/updates/2018/08/devtools#ndb',},],link:'https://developers.google.com/web/updates/2018/08/devtools',},{version:11,header:'Highlights from the Chrome 68 update',highlights:[{title:'Eager evaluation',subtitle:'Preview return values in the Console without explicitly executing expressions.',link:'https://developers.google.com/web/updates/2018/05/devtools#eagerevaluation',},{title:'Argument hints',subtitle:`View a function's expected arguments in the Console.`,link:'https://developers.google.com/web/updates/2018/05/devtools#hints',},{title:'Function autocompletion',subtitle:'View available properties and methods after calling a function in the Console.',link:'https://developers.google.com/web/updates/2018/05/devtools#autocomplete',},{title:'Audits panel updates',subtitle:'Faster, more consisent audits, a new UI, and new audits, thanks to Lighthouse 3.0.',link:'https://developers.google.com/web/updates/2018/05/devtools#lh3',}],link:'https://developers.google.com/web/updates/2018/05/devtools',},{version:10,header:'Highlights from the Chrome 67 update',highlights:[{title:'Search across all network headers',subtitle:`Press ${networkSearchShortcut} in the Network panel to open the Network Search pane.`,link:'https://developers.google.com/web/updates/2018/04/devtools#network-search',},{title:'CSS variable value previews in the Styles pane',subtitle:'When a property value is a CSS variable, DevTools now shows a color preview next to the variable.',link:'https://developers.google.com/web/updates/2018/04/devtools#vars',},{title:'Stop infinite loops',subtitle:'Pause JavaScript execution then select the new Stop Current JavaScript Call button.',link:'https://developers.google.com/web/updates/2018/04/devtools#stop',},{title:'Copy as fetch',subtitle:'Right-click a network request then select Copy > Copy as fetch.',link:'https://developers.google.com/web/updates/2018/04/devtools#fetch',},{title:'More audits',subtitle:'Two new audits, desktop configuration options, and viewing traces.',link:'https://developers.google.com/web/updates/2018/04/devtools#audits',},{title:'User Timing in the Performance tabs',subtitle:'Click the User Timing section to view measures in the Summary, Bottom-Up, and Call Tree tabs.',link:'https://developers.google.com/web/updates/2018/04/devtools#tabs',},],link:'https://developers.google.com/web/updates/2018/04/devtools',},{version:9,header:'Highlights from the Chrome 66 update',highlights:[{title:'Pretty-printing in the Preview and Response tabs',subtitle:'The Preview tab now pretty-prints by default, and you can force '+'pretty-printing in the Response tab via the new Format button.',link:'https://developers.google.com/web/updates/2018/02/devtools#pretty-printing',},{title:'Previewing HTML content in the Preview tab',subtitle:'The Preview tab now always does a basic rendering of HTML content.',link:'https://developers.google.com/web/updates/2018/02/devtools#previews',},{title:'Local Overrides with styles defined in HTML',subtitle:'Local Overrides now works with styles defined in HTML, with one exception.',link:'https://developers.google.com/web/updates/2018/02/devtools#overrides',},{title:'Blackboxing in the Initiator column',subtitle:'Hide framework scripts in order to see the app code that caused a request.',link:'https://developers.google.com/web/updates/2018/02/devtools#blackboxing',},],link:'https://developers.google.com/web/updates/2018/02/devtools',},{version:8,header:'Highlights from the Chrome 65 update',highlights:[{title:'Local overrides',subtitle:'Override network requests and serve local resources instead.',link:'https://developers.google.com/web/updates/2018/01/devtools#overrides',},{title:'Changes tab',subtitle:'Track changes that you make locally in DevTools via the Changes tab.',link:'https://developers.google.com/web/updates/2018/01/devtools#changes',},{title:'New accessibility tools',subtitle:'Inspect the accessibility properties and contrast ratio of elements.',link:'https://developers.google.com/web/updates/2018/01/devtools#a11y',},{title:'New audits',subtitle:'New performance audits, a whole new category of SEO audits, and more.',link:'https://developers.google.com/web/updates/2018/01/devtools#audits',},{title:'Code stepping updates',subtitle:'Reliably step into web worker and asynchronous code.',link:'https://developers.google.com/web/updates/2018/01/devtools#stepping',},{title:'Multiple recordings in the Performance panel',subtitle:'Temporarily save up to 5 recordings.',link:'https://developers.google.com/web/updates/2018/01/devtools#recordings',},],link:'https://developers.google.com/web/updates/2018/01/devtools',},{version:7,header:'Highlights from the Chrome 64 update',highlights:[{title:'Performance monitor',subtitle:'Get a real-time view of various performance metrics.',link:'https://developers.google.com/web/updates/2017/11/devtools-release-notes#perf-monitor',},{title:'Console sidebar',subtitle:'Reduce console noise and focus on the messages that are important to you.',link:'https://developers.google.com/web/updates/2017/11/devtools-release-notes#console-sidebar',},{title:'Group similar console messages',subtitle:'The Console now groups similar messages by default.',link:'https://developers.google.com/web/updates/2017/11/devtools-release-notes#group-similar',},],link:'https://developers.google.com/web/updates/2017/11/devtools-release-notes',},{version:6,header:'Highlights from the Chrome 63 update',highlights:[{title:'Multi-client remote debugging',subtitle:'Use DevTools while debugging your app from an IDE or testing framework.',link:'https://developers.google.com/web/updates/2017/10/devtools-release-notes#multi-client',},{title:'Workspaces 2.0',subtitle:'Save changes made in DevTools to disk, now with more helpful UI and better auto-mapping.',link:'https://developers.google.com/web/updates/2017/10/devtools-release-notes#workspaces',},{title:'Four new audits',subtitle:'Including "Appropriate aspect ratios for images", "Avoid JS libraries with known vulnerabilities", and more.',link:'https://developers.google.com/web/updates/2017/10/devtools-release-notes#audits',},{title:'Custom push notifications',subtitle:'Simulate push notifications with custom data.',link:'https://developers.google.com/web/updates/2017/10/devtools-release-notes#push',},{title:'Custom background sync events',subtitle:'Trigger background sync events with custom tags.',link:'https://developers.google.com/web/updates/2017/10/devtools-release-notes#sync',},],link:'https://developers.google.com/web/updates/2017/10/devtools-release-notes',},{version:5,header:'Highlights from the Chrome 62 update',highlights:[{title:'Top-level await operators in the Console',subtitle:'Use await to conveniently experiment with asynchronous functions in the Console.',link:'https://developers.google.com/web/updates/2017/08/devtools-release-notes#await',},{title:'New screenshot workflows',subtitle:'Take screenshots of a portion of the viewport, or of specific HTML nodes.',link:'https://developers.google.com/web/updates/2017/08/devtools-release-notes#screenshots',},{title:'CSS Grid highlighting',subtitle:'Hover over an element to see the CSS Grid that\'s affecting it.',link:'https://developers.google.com/web/updates/2017/08/devtools-release-notes#css-grid-highlighting',},{title:'A new Console API for querying objects',subtitle:'Call queryObjects(Constructor) to get an array of objects instantiated with that constructor.',link:'https://developers.google.com/web/updates/2017/08/devtools-release-notes#query-objects',},{title:'New Console filters',subtitle:'Filter out logging noise with the new negative and URL filters.',link:'https://developers.google.com/web/updates/2017/08/devtools-release-notes#console-filters',},{title:'HAR imports in the Network panel',subtitle:'Drag-and-drop a HAR file to analyze a previous network recording.',link:'https://developers.google.com/web/updates/2017/08/devtools-release-notes#har-imports',},{title:'Previewable cache resources in the Application panel',subtitle:'Click a row in a Cache Storage table to see a preview of that resource.',link:'https://developers.google.com/web/updates/2017/08/devtools-release-notes#cache-preview',}],link:'https://developers.google.com/web/updates/2017/08/devtools-release-notes',},{version:4,header:'Highlights from the Chrome 61 update',highlights:[{title:'Mobile device throttling',subtitle:'Simulate a mobile device\'s CPU and network throttling from Device Mode.',link:'https://developers.google.com/web/updates/2017/07/devtools-release-notes#throttling',},{title:'Storage usage',subtitle:'See how much storage (IndexedDB, local, session, cache, etc.) an origin is using.',link:'https://developers.google.com/web/updates/2017/07/devtools-release-notes#storage',},{title:'Cache timestamps',subtitle:'View when a service worker cached a response.',link:'https://developers.google.com/web/updates/2017/07/devtools-release-notes#time-cached',},{title:'ES6 Modules support',subtitle:'Debug ES6 Modules natively from the Sources panel.',link:'https://developers.google.com/web/updates/2017/07/devtools-release-notes#modules',}],link:'https://developers.google.com/web/updates/2017/07/devtools-release-notes',},{version:3,header:'Highlights from the Chrome 60 update',highlights:[{title:'New Audits panel, powered by Lighthouse',subtitle:'Find out whether your site qualifies as a Progressive Web App, measure the accessibility and performance of a page, and discover best practices.',link:'https://developers.google.com/web/updates/2017/05/devtools-release-notes#lighthouse',},{title:'Third-party badges',subtitle:'See what third-party entities are logging to the Console, making network requests, and causing work during performance recordings.',link:'https://developers.google.com/web/updates/2017/05/devtools-release-notes#badges',},{title:'New "Continue to Here" gesture',subtitle:'While paused on a line of code, hold '+continueToHereShortcut+' and then click to continue to another line of code.',link:'https://developers.google.com/web/updates/2017/05/devtools-release-notes#continue',},{title:'Step into async',subtitle:'Predictably step into a promise resolution or other asynchronous code with a single gesture.',link:'https://developers.google.com/web/updates/2017/05/devtools-release-notes#step-into-async',},{title:'More informative object previews',subtitle:'Get a better idea of the contents of objects when logging them to the Console.',link:'https://developers.google.com/web/updates/2017/05/devtools-release-notes#object-previews',},{title:'Real-time Coverage tab updates',subtitle:'See what code is being used in real-time.',link:'https://developers.google.com/web/updates/2017/05/devtools-release-notes#coverage',}],link:'https://developers.google.com/web/updates/2017/05/devtools-release-notes',},{version:2,header:'Highlights from Chrome 59 update',highlights:[{title:'CSS and JS code coverage',subtitle:'Find unused CSS and JS with the new Coverage drawer.',link:'https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage',},{title:'Full-page screenshots',subtitle:'Take a screenshot of the entire page, from the top of the viewport to the bottom.',link:'https://developers.google.com/web/updates/2017/04/devtools-release-notes#screenshots',},{title:'Block requests',subtitle:'Manually disable individual requests in the Network panel.',link:'https://developers.google.com/web/updates/2017/04/devtools-release-notes#block-requests',},{title:'Step over async await',subtitle:'Step through async functions predictably.',link:'https://developers.google.com/web/updates/2017/04/devtools-release-notes#async',},{title:'Unified Command Menu',subtitle:'Execute commands and open files from the newly-unified Command Menu ('+commandMenuShortcut+').',link:'https://developers.google.com/web/updates/2017/04/devtools-release-notes#command-menu',}],link:'https://developers.google.com/web/updates/2017/04/devtools-release-notes',},{version:1,header:'Highlights from Chrome 58 update',highlights:[{title:'New Performance and Memory panels',subtitle:'Head to Performance for JavaScript profiling',link:'https://developers.google.com/web/updates/2017/03/devtools-release-notes#performance-panel',},{title:'Editable cookies',subtitle:'You can edit any existing cookies and create new ones in the Application panel',link:'https://developers.google.com/web/updates/2017/03/devtools-release-notes#cookies',},{title:'Console filtering & settings',subtitle:'Use the text filter or click the Console settings icon to touch up your preferences',link:'https://developers.google.com/web/updates/2017/03/devtools-release-notes#console',},{title:'Debugger catches out-of-memory errors',subtitle:'See the stack or grab a heap snapshot to see why the app may crash',link:'https://developers.google.com/web/updates/2017/03/devtools-release-notes#out-of-memory-breakpoints',},],link:'https://developers.google.com/web/updates/2017/03/devtools-release-notes',}];self.Help=self.Help||{};Help=Help||{};Help.releaseNoteText=releaseNoteText;export const releaseNoteViewId='release-note';export function latestReleaseNote(){if(!Help._latestReleaseNote){Help._latestReleaseNote=Help.releaseNoteText.reduce((acc,note)=>note.version>acc.version?note:acc);}
return Help._latestReleaseNote;}
function _showReleaseNoteIfNeeded(){_innerShowReleaseNoteIfNeeded(Help._releaseNoteVersionSetting.get(),latestReleaseNote().version,Common.settings.moduleSetting('help.show-release-note').get());}
function _innerShowReleaseNoteIfNeeded(lastSeenVersion,latestVersion,showReleaseNote){if(!lastSeenVersion){Help._releaseNoteVersionSetting.set(latestVersion);return;}
if(!showReleaseNote){return;}
if(lastSeenVersion>=latestVersion){return;}
Help._releaseNoteVersionSetting.set(latestVersion);UI.viewManager.showView(releaseNoteViewId,true);}
export class HelpLateInitialization{async run(){if(!Host.isUnderTest()){_showReleaseNoteIfNeeded();}}}
export class ReleaseNotesActionDelegate{handleAction(context,actionId){Host.InspectorFrontendHost.openInNewTab(latestReleaseNote().link);return true;}}
export class ReportIssueActionDelegate{handleAction(context,actionId){Host.InspectorFrontendHost.openInNewTab('https://bugs.chromium.org/p/chromium/issues/entry?template=DevTools+issue');return true;}}
self.Help=self.Help||{};Help=Help||{};Help.releaseNoteViewId=releaseNoteViewId;Help.latestReleaseNote=latestReleaseNote;Help._innerShowReleaseNoteIfNeeded=_innerShowReleaseNoteIfNeeded;Help._showReleaseNoteIfNeeded=_showReleaseNoteIfNeeded;Help._releaseNoteVersionSetting=Common.settings.createSetting('releaseNoteVersionSeen',0);Help.ReleaseNoteHighlight;Help.ReleaseNote;Help.HelpLateInitialization=HelpLateInitialization;Help.ReleaseNotesActionDelegate=ReleaseNotesActionDelegate;Help.ReportIssueActionDelegate=ReportIssueActionDelegate;import*as WorkspaceDiff from'./WorkspaceDiff.js';export{WorkspaceDiff,};export class WorkspaceDiffImpl extends Common.Object{constructor(workspace){super();this._uiSourceCodeDiffs=new WeakMap();this._loadingUISourceCodes=new Map();this._modifiedUISourceCodes=new Set();workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyChanged,this._uiSourceCodeChanged,this);workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyCommitted,this._uiSourceCodeChanged,this);workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this._uiSourceCodeAdded,this);workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved,this._uiSourceCodeRemoved,this);workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved,this._projectRemoved,this);workspace.uiSourceCodes().forEach(this._updateModifiedState.bind(this));}
requestDiff(uiSourceCode){return this._uiSourceCodeDiff(uiSourceCode).requestDiff();}
subscribeToDiffChange(uiSourceCode,callback,thisObj){this._uiSourceCodeDiff(uiSourceCode).addEventListener(Events.DiffChanged,callback,thisObj);}
unsubscribeFromDiffChange(uiSourceCode,callback,thisObj){this._uiSourceCodeDiff(uiSourceCode).removeEventListener(Events.DiffChanged,callback,thisObj);}
modifiedUISourceCodes(){return Array.from(this._modifiedUISourceCodes);}
isUISourceCodeModified(uiSourceCode){return this._modifiedUISourceCodes.has(uiSourceCode)||this._loadingUISourceCodes.has(uiSourceCode);}
_uiSourceCodeDiff(uiSourceCode){if(!this._uiSourceCodeDiffs.has(uiSourceCode)){this._uiSourceCodeDiffs.set(uiSourceCode,new UISourceCodeDiff(uiSourceCode));}
return this._uiSourceCodeDiffs.get(uiSourceCode);}
_uiSourceCodeChanged(event){const uiSourceCode=(event.data.uiSourceCode);this._updateModifiedState(uiSourceCode);}
_uiSourceCodeAdded(event){const uiSourceCode=(event.data);this._updateModifiedState(uiSourceCode);}
_uiSourceCodeRemoved(event){const uiSourceCode=(event.data);this._removeUISourceCode(uiSourceCode);}
_projectRemoved(event){const project=(event.data);for(const uiSourceCode of project.uiSourceCodes()){this._removeUISourceCode(uiSourceCode);}}
_removeUISourceCode(uiSourceCode){this._loadingUISourceCodes.delete(uiSourceCode);const uiSourceCodeDiff=this._uiSourceCodeDiffs.get(uiSourceCode);if(uiSourceCodeDiff){uiSourceCodeDiff._dispose=true;}
this._markAsUnmodified(uiSourceCode);}
_markAsUnmodified(uiSourceCode){this._uiSourceCodeProcessedForTest();if(this._modifiedUISourceCodes.delete(uiSourceCode)){this.dispatchEventToListeners(Events.ModifiedStatusChanged,{uiSourceCode,isModified:false});}}
_markAsModified(uiSourceCode){this._uiSourceCodeProcessedForTest();if(this._modifiedUISourceCodes.has(uiSourceCode)){return;}
this._modifiedUISourceCodes.add(uiSourceCode);this.dispatchEventToListeners(Events.ModifiedStatusChanged,{uiSourceCode,isModified:true});}
_uiSourceCodeProcessedForTest(){}
async _updateModifiedState(uiSourceCode){this._loadingUISourceCodes.delete(uiSourceCode);if(uiSourceCode.project().type()!==Workspace.projectTypes.Network){this._markAsUnmodified(uiSourceCode);return;}
if(uiSourceCode.isDirty()){this._markAsModified(uiSourceCode);return;}
if(!uiSourceCode.hasCommits()){this._markAsUnmodified(uiSourceCode);return;}
const contentsPromise=Promise.all([this.requestOriginalContentForUISourceCode(uiSourceCode),uiSourceCode.requestContent().then(deferredContent=>deferredContent.content)]);this._loadingUISourceCodes.set(uiSourceCode,contentsPromise);const contents=await contentsPromise;if(this._loadingUISourceCodes.get(uiSourceCode)!==contentsPromise){return;}
this._loadingUISourceCodes.delete(uiSourceCode);if(contents[0]!==null&&contents[1]!==null&&contents[0]!==contents[1]){this._markAsModified(uiSourceCode);}else{this._markAsUnmodified(uiSourceCode);}}
requestOriginalContentForUISourceCode(uiSourceCode){return this._uiSourceCodeDiff(uiSourceCode)._originalContent();}
revertToOriginal(uiSourceCode){function callback(content){if(typeof content!=='string'){return;}
uiSourceCode.addRevision(content);}
Host.userMetrics.actionTaken(Host.UserMetrics.Action.RevisionApplied);return this.requestOriginalContentForUISourceCode(uiSourceCode).then(callback);}}
export class UISourceCodeDiff extends Common.Object{constructor(uiSourceCode){super();this._uiSourceCode=uiSourceCode;uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._uiSourceCodeChanged,this);uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._uiSourceCodeChanged,this);this._requestDiffPromise=null;this._pendingChanges=null;this._dispose=false;}
_uiSourceCodeChanged(){if(this._pendingChanges){clearTimeout(this._pendingChanges);this._pendingChanges=null;}
this._requestDiffPromise=null;const content=this._uiSourceCode.content();const delay=(!content||content.length<65536)?0:UpdateTimeout;this._pendingChanges=setTimeout(emitDiffChanged.bind(this),delay);function emitDiffChanged(){if(this._dispose){return;}
this.dispatchEventToListeners(Events.DiffChanged);this._pendingChanges=null;}}
requestDiff(){if(!this._requestDiffPromise){this._requestDiffPromise=this._innerRequestDiff();}
return this._requestDiffPromise;}
async _originalContent(){const originalNetworkContent=Persistence.networkPersistenceManager.originalContentForUISourceCode(this._uiSourceCode);if(originalNetworkContent){return originalNetworkContent;}
const content=await this._uiSourceCode.project().requestFileContent(this._uiSourceCode);return content.content||content.error||'';}
async _innerRequestDiff(){if(this._dispose){return null;}
const baseline=await this._originalContent();if(baseline.length>1024*1024){return null;}
if(this._dispose){return null;}
let current=this._uiSourceCode.workingCopy();if(!current&&!this._uiSourceCode.contentLoaded()){current=(await this._uiSourceCode.requestContent()).content;}
if(current.length>1024*1024){return null;}
if(this._dispose){return null;}
if(current===null||baseline===null){return null;}
return Diff.Diff.lineDiff(baseline.split(/\r\n|\n|\r/),current.split(/\r\n|\n|\r/));}}
export const Events={DiffChanged:Symbol('DiffChanged'),ModifiedStatusChanged:Symbol('ModifiedStatusChanged')};let _instance=null;export function workspaceDiff(){if(!_instance){_instance=new WorkspaceDiffImpl(Workspace.workspace);}
return _instance;}
export class DiffUILocation{constructor(uiSourceCode){this.uiSourceCode=uiSourceCode;}}
export const UpdateTimeout=200;self.WorkspaceDiff=self.WorkspaceDiff||{};WorkspaceDiff=WorkspaceDiff||{};WorkspaceDiff.WorkspaceDiff=WorkspaceDiffImpl;WorkspaceDiff.WorkspaceDiff.UISourceCodeDiff=UISourceCodeDiff;WorkspaceDiff.WorkspaceDiff.UpdateTimeout=UpdateTimeout;WorkspaceDiff.Events=Events;WorkspaceDiff.workspaceDiff=workspaceDiff;WorkspaceDiff.DiffUILocation=DiffUILocation;import'./ThrottlingPresets.js';import'./MobileThrottlingSelector.js';import'./NetworkPanelIndicator.js';import'./NetworkThrottlingSelector.js';import'./ThrottlingSettingsTab.js';import'./ThrottlingManager.js';import*as MobileThrottlingSelector from'./MobileThrottlingSelector.js';import*as NetworkPanelIndicator from'./NetworkPanelIndicator.js';import*as NetworkThrottlingSelector from'./NetworkThrottlingSelector.js';import*as ThrottlingManager from'./ThrottlingManager.js';import*as ThrottlingPresets from'./ThrottlingPresets.js';import*as ThrottlingSettingsTab from'./ThrottlingSettingsTab.js';export{MobileThrottlingSelector,NetworkPanelIndicator,NetworkThrottlingSelector,ThrottlingManager,ThrottlingPresets,ThrottlingSettingsTab,};export class ThrottlingSettingsTab extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('mobile_throttling/throttlingSettingsTab.css');const header=this.contentElement.createChild('div','header');header.textContent=ls`Network Throttling Profiles`;UI.ARIAUtils.markAsHeading(header,1);const addButton=UI.createTextButton(Common.UIString('Add custom profile...'),this._addButtonClicked.bind(this),'add-conditions-button');this.contentElement.appendChild(addButton);this._list=new UI.ListWidget(this);this._list.element.classList.add('conditions-list');this._list.registerRequiredCSS('mobile_throttling/throttlingSettingsTab.css');this._list.show(this.contentElement);this._customSetting=Common.moduleSetting('customNetworkConditions');this._customSetting.addChangeListener(this._conditionsUpdated,this);this.setDefaultFocusedElement(addButton);}
wasShown(){super.wasShown();this._conditionsUpdated();}
_conditionsUpdated(){this._list.clear();const conditions=this._customSetting.get();for(let i=0;i<conditions.length;++i){this._list.appendItem(conditions[i],true);}
this._list.appendSeparator();}
_addButtonClicked(){this._list.addNewItem(this._customSetting.get().length,{title:'',download:-1,upload:-1,latency:0});}
renderItem(item,editable){const conditions=(item);const element=createElementWithClass('div','conditions-list-item');const title=element.createChild('div','conditions-list-text conditions-list-title');const titleText=title.createChild('div','conditions-list-title-text');titleText.textContent=conditions.title;titleText.title=conditions.title;element.createChild('div','conditions-list-separator');element.createChild('div','conditions-list-text').textContent=throughputText(conditions.download);element.createChild('div','conditions-list-separator');element.createChild('div','conditions-list-text').textContent=throughputText(conditions.upload);element.createChild('div','conditions-list-separator');element.createChild('div','conditions-list-text').textContent=Common.UIString('%dms',conditions.latency);return element;}
removeItemRequested(item,index){const list=this._customSetting.get();list.splice(index,1);this._customSetting.set(list);}
commitEdit(item,editor,isNew){const conditions=(item);conditions.title=editor.control('title').value.trim();const download=editor.control('download').value.trim();conditions.download=download?parseInt(download,10)*(1024/8):-1;const upload=editor.control('upload').value.trim();conditions.upload=upload?parseInt(upload,10)*(1024/8):-1;const latency=editor.control('latency').value.trim();conditions.latency=latency?parseInt(latency,10):0;const list=this._customSetting.get();if(isNew){list.push(conditions);}
this._customSetting.set(list);}
beginEdit(item){const conditions=(item);const editor=this._createEditor();editor.control('title').value=conditions.title;editor.control('download').value=conditions.download<=0?'':String(conditions.download/(1024/8));editor.control('upload').value=conditions.upload<=0?'':String(conditions.upload/(1024/8));editor.control('latency').value=conditions.latency?String(conditions.latency):'';return editor;}
_createEditor(){if(this._editor){return this._editor;}
const editor=new UI.ListWidget.Editor();this._editor=editor;const content=editor.contentElement();const titles=content.createChild('div','conditions-edit-row');const nameLabel=titles.createChild('div','conditions-list-text conditions-list-title');const nameStr=ls`Profile Name`;nameLabel.textContent=nameStr;titles.createChild('div','conditions-list-separator conditions-list-separator-invisible');const downloadLabel=titles.createChild('div','conditions-list-text');const downloadStr=ls`Download`;downloadLabel.textContent=downloadStr;titles.createChild('div','conditions-list-separator conditions-list-separator-invisible');const uploadLabel=titles.createChild('div','conditions-list-text');const uploadStr=ls`Upload`;uploadLabel.textContent=uploadStr;titles.createChild('div','conditions-list-separator conditions-list-separator-invisible');const latencyLabel=titles.createChild('div','conditions-list-text');const latencyStr=ls`Latency`;latencyLabel.textContent=latencyStr;const fields=content.createChild('div','conditions-edit-row');const nameInput=editor.createInput('title','text','',titleValidator);UI.ARIAUtils.setAccessibleName(nameInput,nameStr);fields.createChild('div','conditions-list-text conditions-list-title').appendChild(nameInput);fields.createChild('div','conditions-list-separator conditions-list-separator-invisible');let cell=fields.createChild('div','conditions-list-text');const downloadInput=editor.createInput('download','text',ls`kb/s`,throughputValidator);cell.appendChild(downloadInput);UI.ARIAUtils.setAccessibleName(downloadInput,downloadStr);const downloadOptional=cell.createChild('div','conditions-edit-optional');const optionalStr=ls`optional`;downloadOptional.textContent=optionalStr;UI.ARIAUtils.setDescription(downloadInput,optionalStr);fields.createChild('div','conditions-list-separator conditions-list-separator-invisible');cell=fields.createChild('div','conditions-list-text');const uploadInput=editor.createInput('upload','text',ls`kb/s`,throughputValidator);UI.ARIAUtils.setAccessibleName(uploadInput,uploadStr);cell.appendChild(uploadInput);const uploadOptional=cell.createChild('div','conditions-edit-optional');uploadOptional.textContent=optionalStr;UI.ARIAUtils.setDescription(uploadInput,optionalStr);fields.createChild('div','conditions-list-separator conditions-list-separator-invisible');cell=fields.createChild('div','conditions-list-text');const latencyInput=editor.createInput('latency','text',ls`ms`,latencyValidator);UI.ARIAUtils.setAccessibleName(latencyInput,latencyStr);cell.appendChild(latencyInput);const latencyOptional=cell.createChild('div','conditions-edit-optional');latencyOptional.textContent=optionalStr;UI.ARIAUtils.setDescription(latencyInput,optionalStr);return editor;function titleValidator(item,index,input){const value=input.value.trim();const valid=value.length>0&&value.length<50;return{valid};}
function throughputValidator(item,index,input){const value=input.value.trim();const valid=!value||(/^[\d]+(\.\d+)?|\.\d+$/.test(value)&&value>=0&&value<=10000000);return{valid};}
function latencyValidator(item,index,input){const value=input.value.trim();const valid=!value||(/^[\d]+$/.test(value)&&value>=0&&value<=1000000);return{valid};}}}
export function throughputText(throughput,plainText){if(throughput<0){return'';}
const throughputInKbps=throughput/(1024/8);const delimiter=plainText?'':' ';if(throughputInKbps<1024){return Common.UIString('%d%skb/s',throughputInKbps,delimiter);}
if(throughputInKbps<1024*10){return Common.UIString('%.1f%sMb/s',throughputInKbps/1024,delimiter);}
return Common.UIString('%d%sMb/s',(throughputInKbps/1024)|0,delimiter);}
self.MobileThrottling=self.MobileThrottling||{};MobileThrottling=MobileThrottling||{};MobileThrottling.ThrottlingSettingsTab=ThrottlingSettingsTab;MobileThrottling.throughputText=throughputText;export const CPUThrottlingRates={NoThrottling:1,MidTierMobile:4,LowEndMobile:6,};export const NoThrottlingConditions={title:SDK.NetworkManager.NoThrottlingConditions.title,description:Common.UIString('No throttling'),network:SDK.NetworkManager.NoThrottlingConditions,cpuThrottlingRate:CPUThrottlingRates.NoThrottling,};export const OfflineConditions={title:SDK.NetworkManager.OfflineConditions.title,description:Common.UIString('No internet connectivity'),network:SDK.NetworkManager.OfflineConditions,cpuThrottlingRate:CPUThrottlingRates.NoThrottling,};export const LowEndMobileConditions={title:Common.UIString('Low-end mobile'),description:Common.UIString('Slow 3G & 6x CPU slowdown'),network:SDK.NetworkManager.Slow3GConditions,cpuThrottlingRate:CPUThrottlingRates.LowEndMobile,};export const MidTierMobileConditions={title:Common.UIString('Mid-tier mobile'),description:Common.UIString('Fast 3G & 4x CPU slowdown'),network:SDK.NetworkManager.Fast3GConditions,cpuThrottlingRate:CPUThrottlingRates.MidTierMobile,};export const CustomConditions={title:Common.UIString('Custom'),description:Common.UIString('Check Network and Performance panels'),};export const mobilePresets=[MidTierMobileConditions,LowEndMobileConditions,CustomConditions];export const advancedMobilePresets=[OfflineConditions,];export const networkPresets=[SDK.NetworkManager.Fast3GConditions,SDK.NetworkManager.Slow3GConditions,SDK.NetworkManager.OfflineConditions,];export const cpuThrottlingPresets=[CPUThrottlingRates.NoThrottling,CPUThrottlingRates.MidTierMobile,CPUThrottlingRates.LowEndMobile,];self.MobileThrottling=self.MobileThrottling||{};MobileThrottling=MobileThrottling||{};MobileThrottling.CPUThrottlingRates=CPUThrottlingRates;MobileThrottling.NoThrottlingConditions=NoThrottlingConditions;MobileThrottling.OfflineConditions=OfflineConditions;MobileThrottling.LowEndMobileConditions=LowEndMobileConditions;MobileThrottling.MidTierMobileConditions=MidTierMobileConditions;MobileThrottling.CustomConditions=CustomConditions;MobileThrottling.mobilePresets=mobilePresets;MobileThrottling.advancedMobilePresets=advancedMobilePresets;MobileThrottling.networkPresets=networkPresets;MobileThrottling.cpuThrottlingPresets=cpuThrottlingPresets;MobileThrottling.Conditions;MobileThrottling.NetworkThrottlingConditionsGroup;MobileThrottling.MobileThrottlingConditionsGroup;MobileThrottling.ConditionsList;MobileThrottling.PlaceholderConditions;export class ThrottlingManager extends Common.Object{constructor(){super();this._cpuThrottlingRate=MobileThrottling.CPUThrottlingRates.NoThrottling;this._cpuThrottlingControls=new Set();this._cpuThrottlingRates=MobileThrottling.cpuThrottlingPresets;this._customNetworkConditionsSetting=Common.moduleSetting('customNetworkConditions');this._currentNetworkThrottlingConditions=SDK.NetworkManager.NoThrottlingConditions;this._lastNetworkThrottlingConditions;SDK.multitargetNetworkManager.addEventListener(SDK.MultitargetNetworkManager.Events.ConditionsChanged,()=>{this._lastNetworkThrottlingConditions=this._currentNetworkThrottlingConditions;this._currentNetworkThrottlingConditions=SDK.multitargetNetworkManager.networkConditions();});SDK.targetManager.observeModels(SDK.EmulationModel,this);}
decorateSelectWithNetworkThrottling(selectElement){let options=[];const selector=new MobileThrottling.NetworkThrottlingSelector(populate,select,this._customNetworkConditionsSetting);selectElement.addEventListener('change',optionSelected,false);return selector;function populate(groups){selectElement.removeChildren();options=[];for(let i=0;i<groups.length;++i){const group=groups[i];const groupElement=selectElement.createChild('optgroup');groupElement.label=group.title;for(const conditions of group.items){const title=conditions.title;const option=new Option(title,title);UI.ARIAUtils.setAccessibleName(option,ls`${group.title}: ${title}`);groupElement.appendChild(option);options.push(conditions);}
if(i===groups.length-1){const option=new Option(ls`Add\u2026`,ls`Add\u2026`);UI.ARIAUtils.setAccessibleName(option,ls`Add ${group.title}`);groupElement.appendChild(option);options.push(null);}}
return options;}
function optionSelected(){if(selectElement.selectedIndex===selectElement.options.length-1){selector.revealAndUpdate();}else{selector.optionSelected(options[selectElement.selectedIndex]);}}
function select(index){if(selectElement.selectedIndex!==index){selectElement.selectedIndex=index;}}}
createOfflineToolbarCheckbox(){const checkbox=new UI.ToolbarCheckbox(Common.UIString('Offline'),Common.UIString('Force disconnected from network'),forceOffline.bind(this));SDK.multitargetNetworkManager.addEventListener(SDK.MultitargetNetworkManager.Events.ConditionsChanged,networkConditionsChanged);checkbox.setChecked(SDK.multitargetNetworkManager.networkConditions()===SDK.NetworkManager.OfflineConditions);function forceOffline(){if(checkbox.checked()){SDK.multitargetNetworkManager.setNetworkConditions(SDK.NetworkManager.OfflineConditions);}else{SDK.multitargetNetworkManager.setNetworkConditions(this._lastNetworkThrottlingConditions);}}
function networkConditionsChanged(){checkbox.setChecked(SDK.multitargetNetworkManager.networkConditions()===SDK.NetworkManager.OfflineConditions);}
return checkbox;}
createMobileThrottlingButton(){const button=new UI.ToolbarMenuButton(appendItems);button.setTitle(Common.UIString('Throttling'));button.setGlyph('');button.turnIntoSelect();button.setDarkText();let options=[];let selectedIndex=-1;const selector=new MobileThrottling.MobileThrottlingSelector(populate,select);return button;function appendItems(contextMenu){for(let index=0;index<options.length;++index){const conditions=options[index];if(!conditions){continue;}
if(conditions.title===MobileThrottling.CustomConditions.title&&conditions.description===MobileThrottling.CustomConditions.description){continue;}
contextMenu.defaultSection().appendCheckboxItem(Common.UIString(conditions.title),selector.optionSelected.bind(selector,(conditions)),selectedIndex===index);}}
function populate(groups){options=[];for(const group of groups){for(const conditions of group.items){options.push(conditions);}
options.push(null);}
return options;}
function select(index){selectedIndex=index;button.setText(options[index].title);button.setTitle(options[index].description);}}
cpuThrottlingRate(){return this._cpuThrottlingRate;}
setCPUThrottlingRate(rate){this._cpuThrottlingRate=rate;for(const emulationModel of SDK.targetManager.models(SDK.EmulationModel)){emulationModel.setCPUThrottlingRate(this._cpuThrottlingRate);}
let icon=null;if(this._cpuThrottlingRate!==MobileThrottling.CPUThrottlingRates.NoThrottling){Host.userMetrics.actionTaken(Host.UserMetrics.Action.CpuThrottlingEnabled);icon=UI.Icon.create('smallicon-warning');icon.title=Common.UIString('CPU throttling is enabled');}
const index=this._cpuThrottlingRates.indexOf(this._cpuThrottlingRate);for(const control of this._cpuThrottlingControls){control.setSelectedIndex(index);}
UI.inspectorView.setPanelIcon('timeline',icon);this.dispatchEventToListeners(Events.RateChanged,this._cpuThrottlingRate);}
modelAdded(emulationModel){if(this._cpuThrottlingRate!==MobileThrottling.CPUThrottlingRates.NoThrottling){emulationModel.setCPUThrottlingRate(this._cpuThrottlingRate);}}
modelRemoved(emulationModel){}
createCPUThrottlingSelector(){const control=new UI.ToolbarComboBox(event=>this.setCPUThrottlingRate(this._cpuThrottlingRates[event.target.selectedIndex]),ls`CPU throttling`);this._cpuThrottlingControls.add(control);const currentRate=this._cpuThrottlingRate;for(let i=0;i<this._cpuThrottlingRates.length;++i){const rate=this._cpuThrottlingRates[i];const title=rate===1?Common.UIString('No throttling'):Common.UIString('%d\xD7 slowdown',rate);const option=control.createOption(title);control.addOption(option);if(currentRate===rate){control.setSelectedIndex(i);}}
return control;}}
export const Events={RateChanged:Symbol('RateChanged')};export class ActionDelegate{handleAction(context,actionId){if(actionId==='network-conditions.network-online'){SDK.multitargetNetworkManager.setNetworkConditions(SDK.NetworkManager.NoThrottlingConditions);return true;}
if(actionId==='network-conditions.network-low-end-mobile'){SDK.multitargetNetworkManager.setNetworkConditions(SDK.NetworkManager.Slow3GConditions);return true;}
if(actionId==='network-conditions.network-mid-tier-mobile'){SDK.multitargetNetworkManager.setNetworkConditions(SDK.NetworkManager.Fast3GConditions);return true;}
if(actionId==='network-conditions.network-offline'){SDK.multitargetNetworkManager.setNetworkConditions(SDK.NetworkManager.OfflineConditions);return true;}
return false;}}
export function throttlingManager(){return self.singleton(ThrottlingManager);}
self.MobileThrottling=self.MobileThrottling||{};MobileThrottling=MobileThrottling||{};MobileThrottling.ThrottlingManager=ThrottlingManager;MobileThrottling.ThrottlingManager.Events=Events;MobileThrottling.ThrottlingManager.ActionDelegate=ActionDelegate;MobileThrottling.throttlingManager=throttlingManager;export class NetworkThrottlingSelector{constructor(populateCallback,selectCallback,customNetworkConditionsSetting){this._populateCallback=populateCallback;this._selectCallback=selectCallback;this._customNetworkConditionsSetting=customNetworkConditionsSetting;this._customNetworkConditionsSetting.addChangeListener(this._populateOptions,this);SDK.multitargetNetworkManager.addEventListener(SDK.MultitargetNetworkManager.Events.ConditionsChanged,this._networkConditionsChanged,this);this._options;this._populateOptions();}
revealAndUpdate(){Common.Revealer.reveal(this._customNetworkConditionsSetting);this._networkConditionsChanged();}
optionSelected(conditions){SDK.multitargetNetworkManager.setNetworkConditions(conditions);}
_populateOptions(){const disabledGroup={title:Common.UIString('Disabled'),items:[SDK.NetworkManager.NoThrottlingConditions]};const presetsGroup={title:Common.UIString('Presets'),items:MobileThrottling.networkPresets};const customGroup={title:Common.UIString('Custom'),items:this._customNetworkConditionsSetting.get()};this._options=this._populateCallback([disabledGroup,presetsGroup,customGroup]);if(!this._networkConditionsChanged()){for(let i=this._options.length-1;i>=0;i--){if(this._options[i]){this.optionSelected((this._options[i]));break;}}}}
_networkConditionsChanged(){const value=SDK.multitargetNetworkManager.networkConditions();for(let index=0;index<this._options.length;++index){const option=this._options[index];if(option&&option.download===value.download&&option.upload===value.upload&&option.latency===value.latency&&option.title===value.title){this._selectCallback(index);return true;}}
return false;}}
self.MobileThrottling=self.MobileThrottling||{};MobileThrottling=MobileThrottling||{};MobileThrottling.NetworkThrottlingSelector=NetworkThrottlingSelector;export class NetworkPanelIndicator{constructor(){if(!UI.inspectorView.hasPanel('network')){return;}
const manager=SDK.multitargetNetworkManager;manager.addEventListener(SDK.MultitargetNetworkManager.Events.ConditionsChanged,updateVisibility);manager.addEventListener(SDK.MultitargetNetworkManager.Events.BlockedPatternsChanged,updateVisibility);manager.addEventListener(SDK.MultitargetNetworkManager.Events.InterceptorsChanged,updateVisibility);updateVisibility();function updateVisibility(){let icon=null;if(manager.isThrottling()){icon=UI.Icon.create('smallicon-warning');icon.title=Common.UIString('Network throttling is enabled');}else if(SDK.multitargetNetworkManager.isIntercepting()){icon=UI.Icon.create('smallicon-warning');icon.title=Common.UIString('Requests may be rewritten by local overrides');}else if(manager.isBlocking()){icon=UI.Icon.create('smallicon-warning');icon.title=Common.UIString('Requests may be blocked');}
UI.inspectorView.setPanelIcon('network',icon);}}}
self.MobileThrottling=self.MobileThrottling||{};MobileThrottling=MobileThrottling||{};MobileThrottling.NetworkPanelIndicator=NetworkPanelIndicator;export class MobileThrottlingSelector{constructor(populateCallback,selectCallback){this._populateCallback=populateCallback;this._selectCallback=selectCallback;MobileThrottling.throttlingManager().addEventListener(MobileThrottling.ThrottlingManager.Events.RateChanged,this._conditionsChanged,this);SDK.multitargetNetworkManager.addEventListener(SDK.MultitargetNetworkManager.Events.ConditionsChanged,this._conditionsChanged,this);this._options=this._populateOptions();this._conditionsChanged();}
optionSelected(conditions){SDK.multitargetNetworkManager.setNetworkConditions(conditions.network);MobileThrottling.throttlingManager().setCPUThrottlingRate(conditions.cpuThrottlingRate);}
_populateOptions(){const disabledGroup={title:Common.UIString('Disabled'),items:[MobileThrottling.NoThrottlingConditions]};const presetsGroup={title:Common.UIString('Presets'),items:MobileThrottling.mobilePresets};const advancedGroup={title:Common.UIString('Advanced'),items:MobileThrottling.advancedMobilePresets};return this._populateCallback([disabledGroup,presetsGroup,advancedGroup]);}
_conditionsChanged(){const networkConditions=SDK.multitargetNetworkManager.networkConditions();const cpuThrottlingRate=MobileThrottling.throttlingManager().cpuThrottlingRate();for(let index=0;index<this._options.length;++index){const option=this._options[index];if(option&&option.network===networkConditions&&option.cpuThrottlingRate===cpuThrottlingRate){this._selectCallback(index);return;}}
this._selectCallback(this._options.indexOf(MobileThrottling.CustomConditions));}}
self.MobileThrottling=self.MobileThrottling||{};MobileThrottling=MobileThrottling||{};MobileThrottling.MobileThrottlingSelector=MobileThrottlingSelector;import*as EventListenersUtils from'./EventListenersUtils.js';import*as EventListenersView from'./EventListenersView.js';export{EventListenersUtils,EventListenersView,};export class EventListenersView extends UI.VBox{constructor(changeCallback){super();this._changeCallback=changeCallback;this._treeOutline=new UI.TreeOutlineInShadow();this._treeOutline.hideOverflow();this._treeOutline.registerRequiredCSS('object_ui/objectValue.css');this._treeOutline.registerRequiredCSS('event_listeners/eventListenersView.css');this._treeOutline.setComparator(EventListenersTreeElement.comparator);this._treeOutline.element.classList.add('monospace');this._treeOutline.setShowSelectionOnKeyboardFocus(true);this._treeOutline.setFocusable(true);this.element.appendChild(this._treeOutline.element);this._emptyHolder=createElementWithClass('div','gray-info-message');this._emptyHolder.textContent=Common.UIString('No event listeners');this._emptyHolder.tabIndex=-1;this._linkifier=new Components.Linkifier();this._treeItemMap=new Map();}
focus(){if(!this._emptyHolder.parentNode){this._treeOutline.forceSelect();}else{this._emptyHolder.focus();}}
async addObjects(objects){this.reset();await Promise.all(objects.map(obj=>obj?this._addObject(obj):Promise.resolve()));this.addEmptyHolderIfNeeded();this._eventListenersArrivedForTest();}
_addObject(object){let eventListeners;let frameworkEventListenersObject=null;const promises=[];const domDebuggerModel=object.runtimeModel().target().model(SDK.DOMDebuggerModel);if(domDebuggerModel){promises.push(domDebuggerModel.eventListeners(object).then(storeEventListeners));}
promises.push(EventListeners.frameworkEventListeners(object).then(storeFrameworkEventListenersObject));return Promise.all(promises).then(markInternalEventListeners).then(addEventListeners.bind(this));function storeEventListeners(result){eventListeners=result;}
function storeFrameworkEventListenersObject(result){frameworkEventListenersObject=result;}
function markInternalEventListeners(){if(!frameworkEventListenersObject.internalHandlers){return Promise.resolve(undefined);}
return frameworkEventListenersObject.internalHandlers.object().callFunctionJSON(isInternalEventListener,eventListeners.map(handlerArgument)).then(setIsInternal);function handlerArgument(listener){return SDK.RemoteObject.toCallArgument(listener.handler());}
function isInternalEventListener(){const isInternal=[];const internalHandlersSet=new Set(this);for(const handler of arguments){isInternal.push(internalHandlersSet.has(handler));}
return isInternal;}
function setIsInternal(isInternal){for(let i=0;i<eventListeners.length;++i){if(isInternal[i]){eventListeners[i].markAsFramework();}}}}
function addEventListeners(){this._addObjectEventListeners(object,eventListeners);this._addObjectEventListeners(object,frameworkEventListenersObject.eventListeners);}}
_addObjectEventListeners(object,eventListeners){if(!eventListeners){return;}
for(const eventListener of eventListeners){const treeItem=this._getOrCreateTreeElementForType(eventListener.type());treeItem.addObjectEventListener(eventListener,object);}}
showFrameworkListeners(showFramework,showPassive,showBlocking){const eventTypes=this._treeOutline.rootElement().children();for(const eventType of eventTypes){let hiddenEventType=true;for(const listenerElement of eventType.children()){const listenerOrigin=listenerElement.eventListener().origin();let hidden=false;if(listenerOrigin===SDK.EventListener.Origin.FrameworkUser&&!showFramework){hidden=true;}
if(listenerOrigin===SDK.EventListener.Origin.Framework&&showFramework){hidden=true;}
if(!showPassive&&listenerElement.eventListener().passive()){hidden=true;}
if(!showBlocking&&!listenerElement.eventListener().passive()){hidden=true;}
listenerElement.hidden=hidden;hiddenEventType=hiddenEventType&&hidden;}
eventType.hidden=hiddenEventType;}}
_getOrCreateTreeElementForType(type){let treeItem=this._treeItemMap.get(type);if(!treeItem){treeItem=new EventListenersTreeElement(type,this._linkifier,this._changeCallback);this._treeItemMap.set(type,treeItem);treeItem.hidden=true;this._treeOutline.appendChild(treeItem);}
this._emptyHolder.remove();return treeItem;}
addEmptyHolderIfNeeded(){let allHidden=true;let firstVisibleChild=null;for(const eventType of this._treeOutline.rootElement().children()){eventType.hidden=!eventType.firstChild();allHidden=allHidden&&eventType.hidden;if(!firstVisibleChild&&!eventType.hidden){firstVisibleChild=eventType;}}
if(allHidden&&!this._emptyHolder.parentNode){this.element.appendChild(this._emptyHolder);}
if(firstVisibleChild){firstVisibleChild.select(true);}}
reset(){const eventTypes=this._treeOutline.rootElement().children();for(const eventType of eventTypes){eventType.removeChildren();}
this._linkifier.reset();}
_eventListenersArrivedForTest(){}}
export class EventListenersTreeElement extends UI.TreeElement{constructor(type,linkifier,changeCallback){super(type);this.toggleOnClick=true;this._linkifier=linkifier;this._changeCallback=changeCallback;}
static comparator(element1,element2){if(element1.title===element2.title){return 0;}
return element1.title>element2.title?1:-1;}
addObjectEventListener(eventListener,object){const treeElement=new ObjectEventListenerBar(eventListener,object,this._linkifier,this._changeCallback);this.appendChild((treeElement));}}
export class ObjectEventListenerBar extends UI.TreeElement{constructor(eventListener,object,linkifier,changeCallback){super('',true);this._eventListener=eventListener;this.editable=false;this._setTitle(object,linkifier);this._changeCallback=changeCallback;}
async onpopulate(){const properties=[];const eventListener=this._eventListener;const runtimeModel=eventListener.domDebuggerModel().runtimeModel();properties.push(runtimeModel.createRemotePropertyFromPrimitiveValue('useCapture',eventListener.useCapture()));properties.push(runtimeModel.createRemotePropertyFromPrimitiveValue('passive',eventListener.passive()));properties.push(runtimeModel.createRemotePropertyFromPrimitiveValue('once',eventListener.once()));if(typeof eventListener.handler()!=='undefined'){properties.push(new SDK.RemoteObjectProperty('handler',eventListener.handler()));}
ObjectUI.ObjectPropertyTreeElement.populateWithProperties(this,properties,[],true,null);}
_setTitle(object,linkifier){const title=this.listItemElement.createChild('span','event-listener-details');const subtitle=this.listItemElement.createChild('span','event-listener-tree-subtitle');const linkElement=linkifier.linkifyRawLocation(this._eventListener.location(),this._eventListener.sourceURL());subtitle.appendChild(linkElement);this._valueTitle=ObjectUI.ObjectPropertiesSection.createValueElement(object,false,false);title.appendChild(this._valueTitle);if(this._eventListener.canRemove()){const deleteButton=title.createChild('span','event-listener-button');deleteButton.textContent=Common.UIString('Remove');deleteButton.title=Common.UIString('Delete event listener');deleteButton.addEventListener('click',event=>{this._removeListener();event.consume();},false);title.appendChild(deleteButton);}
if(this._eventListener.isScrollBlockingType()&&this._eventListener.canTogglePassive()){const passiveButton=title.createChild('span','event-listener-button');passiveButton.textContent=Common.UIString('Toggle Passive');passiveButton.title=Common.UIString('Toggle whether event listener is passive or blocking');passiveButton.addEventListener('click',event=>{this._togglePassiveListener();event.consume();},false);title.appendChild(passiveButton);}
this.listItemElement.addEventListener('contextmenu',event=>{const menu=new UI.ContextMenu(event);if(event.target!==linkElement){menu.appendApplicableItems(linkElement);}
menu.defaultSection().appendItem(ls`Delete event listener`,this._removeListener.bind(this),!this._eventListener.canRemove());menu.defaultSection().appendCheckboxItem(ls`Passive`,this._togglePassiveListener.bind(this),this._eventListener.passive(),!this._eventListener.canTogglePassive());menu.show();});}
_removeListener(){this._removeListenerBar();this._eventListener.remove();}
_togglePassiveListener(){this._eventListener.togglePassive().then(this._changeCallback());}
_removeListenerBar(){const parent=this.parent;parent.removeChild(this);if(!parent.childCount()){parent.collapse();}
let allHidden=true;for(let i=0;i<parent.childCount();++i){if(!parent.childAt(i).hidden){allHidden=false;}}
parent.hidden=allHidden;}
eventListener(){return this._eventListener;}
onenter(){if(this._valueTitle){this._valueTitle.click();return true;}
return false;}}
self.EventListeners=self.EventListeners||{};EventListeners=EventListeners||{};EventListeners.EventListenersView=EventListenersView;EventListeners.EventListenersTreeElement=EventListenersTreeElement;EventListeners.ObjectEventListenerBar=ObjectEventListenerBar;EventListeners.EventListenersResult;export function frameworkEventListeners(object){const domDebuggerModel=object.runtimeModel().target().model(SDK.DOMDebuggerModel);if(!domDebuggerModel){return Promise.resolve(({eventListeners:[],internalHandlers:null}));}
const listenersResult=({eventListeners:[]});return object.callFunction(frameworkEventListenersImpl,undefined).then(assertCallFunctionResult).then(getOwnProperties).then(createEventListeners).then(returnResult).catchException(listenersResult);function getOwnProperties(object){return object.getOwnProperties(false);}
function createEventListeners(result){if(!result.properties){throw new Error('Object properties is empty');}
const promises=[];for(const property of result.properties){if(property.name==='eventListeners'&&property.value){promises.push(convertToEventListeners(property.value).then(storeEventListeners));}
if(property.name==='internalHandlers'&&property.value){promises.push(convertToInternalHandlers(property.value).then(storeInternalHandlers));}
if(property.name==='errorString'&&property.value){printErrorString(property.value);}}
return(Promise.all(promises));}
function convertToEventListeners(pageEventListenersObject){return SDK.RemoteArray.objectAsArray(pageEventListenersObject).map(toEventListener).then(filterOutEmptyObjects);function toEventListener(listenerObject){let type;let useCapture;let passive;let once;let handler=null;let originalHandler=null;let location=null;let removeFunctionObject=null;const promises=[];promises.push(listenerObject.callFunctionJSON(truncatePageEventListener,undefined).then(storeTruncatedListener));function truncatePageEventListener(){return{type:this.type,useCapture:this.useCapture,passive:this.passive,once:this.once};}
function storeTruncatedListener(truncatedListener){type=truncatedListener.type;useCapture=truncatedListener.useCapture;passive=truncatedListener.passive;once=truncatedListener.once;}
promises.push(listenerObject.callFunction(handlerFunction).then(assertCallFunctionResult).then(storeOriginalHandler).then(toTargetFunction).then(storeFunctionWithDetails));function handlerFunction(){return this.handler;}
function storeOriginalHandler(functionObject){originalHandler=functionObject;return originalHandler;}
function storeFunctionWithDetails(functionObject){handler=functionObject;return(functionObject.debuggerModel().functionDetailsPromise(functionObject).then(storeFunctionDetails));}
function storeFunctionDetails(functionDetails){location=functionDetails?functionDetails.location:null;}
promises.push(listenerObject.callFunction(getRemoveFunction).then(assertCallFunctionResult).then(storeRemoveFunction));function getRemoveFunction(){return this.remove;}
function storeRemoveFunction(functionObject){if(functionObject.type!=='function'){return;}
removeFunctionObject=functionObject;}
return Promise.all(promises).then(createEventListener).catchException((null));function createEventListener(){if(!location){throw new Error('Empty event listener\'s location');}
return new SDK.EventListener((domDebuggerModel),object,type,useCapture,passive,once,handler,originalHandler,location,removeFunctionObject,SDK.EventListener.Origin.FrameworkUser);}}}
function convertToInternalHandlers(pageInternalHandlersObject){return SDK.RemoteArray.objectAsArray(pageInternalHandlersObject).map(toTargetFunction).then(SDK.RemoteArray.createFromRemoteObjects.bind(null));}
function toTargetFunction(functionObject){return SDK.RemoteFunction.objectAsFunction(functionObject).targetFunction();}
function storeEventListeners(eventListeners){listenersResult.eventListeners=eventListeners;}
function storeInternalHandlers(internalHandlers){listenersResult.internalHandlers=internalHandlers;}
function printErrorString(errorString){Common.console.error(String(errorString.value));}
function returnResult(){return listenersResult;}
function assertCallFunctionResult(result){if(result.wasThrown||!result.object){throw new Error('Exception in callFunction or empty result');}
return result.object;}
function filterOutEmptyObjects(objects){return objects.filter(filterOutEmpty);function filterOutEmpty(object){return!!object;}}
function frameworkEventListenersImpl(){const errorLines=[];let eventListeners=[];let internalHandlers=[];let fetchers=[jQueryFetcher];try{if(self.devtoolsFrameworkEventListeners&&isArrayLike(self.devtoolsFrameworkEventListeners)){fetchers=fetchers.concat(self.devtoolsFrameworkEventListeners);}}catch(e){errorLines.push('devtoolsFrameworkEventListeners call produced error: '+toString(e));}
for(let i=0;i<fetchers.length;++i){try{const fetcherResult=fetchers[i](this);if(fetcherResult.eventListeners&&isArrayLike(fetcherResult.eventListeners)){eventListeners=eventListeners.concat(fetcherResult.eventListeners.map(checkEventListener).filter(nonEmptyObject));}
if(fetcherResult.internalHandlers&&isArrayLike(fetcherResult.internalHandlers)){internalHandlers=internalHandlers.concat(fetcherResult.internalHandlers.map(checkInternalHandler).filter(nonEmptyObject));}}catch(e){errorLines.push('fetcher call produced error: '+toString(e));}}
const result={eventListeners:eventListeners};if(internalHandlers.length){result.internalHandlers=internalHandlers;}
if(errorLines.length){let errorString='Framework Event Listeners API Errors:\n\t'+errorLines.join('\n\t');errorString=errorString.substr(0,errorString.length-1);result.errorString=errorString;}
return result;function isArrayLike(obj){if(!obj||typeof obj!=='object'){return false;}
try{if(typeof obj.splice==='function'){const len=obj.length;return typeof len==='number'&&(len>>>0===len&&(len>0||1/len>0));}}catch(e){}
return false;}
function checkEventListener(eventListener){try{let errorString='';if(!eventListener){errorString+='empty event listener, ';}
const type=eventListener.type;if(!type||(typeof type!=='string')){errorString+='event listener\'s type isn\'t string or empty, ';}
const useCapture=eventListener.useCapture;if(typeof useCapture!=='boolean'){errorString+='event listener\'s useCapture isn\'t boolean or undefined, ';}
const passive=eventListener.passive;if(typeof passive!=='boolean'){errorString+='event listener\'s passive isn\'t boolean or undefined, ';}
const once=eventListener.once;if(typeof once!=='boolean'){errorString+='event listener\'s once isn\'t boolean or undefined, ';}
const handler=eventListener.handler;if(!handler||(typeof handler!=='function')){errorString+='event listener\'s handler isn\'t a function or empty, ';}
const remove=eventListener.remove;if(remove&&(typeof remove!=='function')){errorString+='event listener\'s remove isn\'t a function, ';}
if(!errorString){return{type:type,useCapture:useCapture,passive:passive,once:once,handler:handler,remove:remove};}else{errorLines.push(errorString.substr(0,errorString.length-2));return null;}}catch(e){errorLines.push(toString(e));return null;}}
function checkInternalHandler(handler){if(handler&&(typeof handler==='function')){return handler;}
errorLines.push('internal handler isn\'t a function or empty');return null;}
function toString(obj){try{return''+obj;}catch(e){return'<error>';}}
function nonEmptyObject(obj){return!!obj;}
function jQueryFetcher(node){if(!node||!(node instanceof Node)){return{eventListeners:[]};}
const jQuery=(window['jQuery']);if(!jQuery||!jQuery.fn){return{eventListeners:[]};}
const jQueryFunction=(jQuery);const data=jQuery._data||jQuery.data;const eventListeners=[];const internalHandlers=[];if(typeof data==='function'){const events=data(node,'events');for(const type in events){for(const key in events[type]){const frameworkListener=events[type][key];if(typeof frameworkListener==='object'||typeof frameworkListener==='function'){const listener={handler:frameworkListener.handler||frameworkListener,useCapture:true,passive:false,once:false,type:type};listener.remove=jQueryRemove.bind(node,frameworkListener.selector);eventListeners.push(listener);}}}
const nodeData=data(node);if(nodeData&&typeof nodeData.handle==='function'){internalHandlers.push(nodeData.handle);}}
const entry=jQueryFunction(node)[0];if(entry){const entryEvents=entry['$events'];for(const type in entryEvents){const events=entryEvents[type];for(const key in events){if(typeof events[key]==='function'){const listener={handler:events[key],useCapture:true,passive:false,once:false,type:type};eventListeners.push(listener);}}}
if(entry&&entry['$handle']){internalHandlers.push(entry['$handle']);}}
return{eventListeners:eventListeners,internalHandlers:internalHandlers};}
function jQueryRemove(selector,type,handler){if(!this||!(this instanceof Node)){return;}
const node=(this);const jQuery=(window['jQuery']);if(!jQuery||!jQuery.fn){return;}
const jQueryFunction=(jQuery);jQueryFunction(node).off(type,selector,handler);}}}
self.EventListeners=self.EventListeners||{};EventListeners=EventListeners||{};EventListeners.frameworkEventListeners=frameworkEventListeners;EventListeners.FrameworkEventListenersObject;EventListeners.EventListenerObjectInInspectedPage;import'./LayerPaintProfilerView.js';import'./LayersPanel.js';import'./LayerTreeModel.js';import*as LayerPaintProfilerView from'./LayerPaintProfilerView.js';import*as LayersPanel from'./LayersPanel.js';import*as LayerTreeModel from'./LayerTreeModel.js';export{LayerPaintProfilerView,LayersPanel,LayerTreeModel,};export default class LayersPanel extends UI.PanelWithSidebar{constructor(){super('layers',225);this._model=null;SDK.targetManager.observeTargets(this);this._layerViewHost=new LayerViewer.LayerViewHost();this._layerTreeOutline=new LayerViewer.LayerTreeOutline(this._layerViewHost);this._layerTreeOutline.addEventListener(LayerViewer.LayerTreeOutline.Events.PaintProfilerRequested,this._onPaintProfileRequested,this);this.panelSidebarElement().appendChild(this._layerTreeOutline.element);this.setDefaultFocusedElement(this._layerTreeOutline.element);this._rightSplitWidget=new UI.SplitWidget(false,true,'layerDetailsSplitViewState');this.splitWidget().setMainWidget(this._rightSplitWidget);this._layers3DView=new LayerViewer.Layers3DView(this._layerViewHost);this._rightSplitWidget.setMainWidget(this._layers3DView);this._layers3DView.addEventListener(LayerViewer.Layers3DView.Events.PaintProfilerRequested,this._onPaintProfileRequested,this);this._layers3DView.addEventListener(LayerViewer.Layers3DView.Events.ScaleChanged,this._onScaleChanged,this);this._tabbedPane=new UI.TabbedPane();this._rightSplitWidget.setSidebarWidget(this._tabbedPane);this._layerDetailsView=new LayerViewer.LayerDetailsView(this._layerViewHost);this._layerDetailsView.addEventListener(LayerViewer.LayerDetailsView.Events.PaintProfilerRequested,this._onPaintProfileRequested,this);this._tabbedPane.appendTab(Layers.LayersPanel.DetailsViewTabs.Details,Common.UIString('Details'),this._layerDetailsView);this._paintProfilerView=new Layers.LayerPaintProfilerView(this._showImage.bind(this));this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabClosed,this._onTabClosed,this);this._updateThrottler=new Common.Throttler(100);}
focus(){this._layerTreeOutline.focus();}
wasShown(){super.wasShown();if(this._model){this._model.enable();}}
willHide(){if(this._model){this._model.disable();}
super.willHide();}
targetAdded(target){if(this._model){return;}
this._model=target.model(Layers.LayerTreeModel);if(!this._model){return;}
this._model.addEventListener(Layers.LayerTreeModel.Events.LayerTreeChanged,this._onLayerTreeUpdated,this);this._model.addEventListener(Layers.LayerTreeModel.Events.LayerPainted,this._onLayerPainted,this);if(this.isShowing()){this._model.enable();}}
targetRemoved(target){if(!this._model||this._model.target()!==target){return;}
this._model.removeEventListener(Layers.LayerTreeModel.Events.LayerTreeChanged,this._onLayerTreeUpdated,this);this._model.removeEventListener(Layers.LayerTreeModel.Events.LayerPainted,this._onLayerPainted,this);this._model.disable();this._model=null;}
_onLayerTreeUpdated(){this._updateThrottler.schedule(this._update.bind(this));}
_update(){if(this._model){this._layerViewHost.setLayerTree(this._model.layerTree());}
return Promise.resolve();}
_onLayerPainted(event){if(!this._model){return;}
const layer=(event.data);if(this._layerViewHost.selection()&&this._layerViewHost.selection().layer()===layer){this._layerDetailsView.update();}
this._layers3DView.updateLayerSnapshot(layer);}
_onPaintProfileRequested(event){const selection=(event.data);this._layers3DView.snapshotForSelection(selection).then(snapshotWithRect=>{if(!snapshotWithRect){return;}
this._layerBeingProfiled=selection.layer();if(!this._tabbedPane.hasTab(Layers.LayersPanel.DetailsViewTabs.Profiler)){this._tabbedPane.appendTab(Layers.LayersPanel.DetailsViewTabs.Profiler,Common.UIString('Profiler'),this._paintProfilerView,undefined,true,true);}
this._tabbedPane.selectTab(Layers.LayersPanel.DetailsViewTabs.Profiler);this._paintProfilerView.profile(snapshotWithRect.snapshot);});}
_onTabClosed(event){if(event.data.tabId!==Layers.LayersPanel.DetailsViewTabs.Profiler||!this._layerBeingProfiled){return;}
this._paintProfilerView.reset();this._layers3DView.showImageForLayer(this._layerBeingProfiled,undefined);this._layerBeingProfiled=null;}
_showImage(imageURL){this._layers3DView.showImageForLayer(this._layerBeingProfiled,imageURL);}
_onScaleChanged(event){this._paintProfilerView.setScale((event.data));}}
export const DetailsViewTabs={Details:'details',Profiler:'profiler'};self.Layers=self.Layers||{};Layers=Layers||{};Layers.LayersPanel=LayersPanel;Layers.LayersPanel.DetailsViewTabs=DetailsViewTabs;export default class LayerTreeModel extends SDK.SDKModel{constructor(target){super(target);this._layerTreeAgent=target.layerTreeAgent();target.registerLayerTreeDispatcher(new LayerTreeDispatcher(this));this._paintProfilerModel=(target.model(SDK.PaintProfilerModel));const resourceTreeModel=target.model(SDK.ResourceTreeModel);if(resourceTreeModel){resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._onMainFrameNavigated,this);}
this._layerTree=null;this._throttler=new Common.Throttler(20);}
disable(){if(!this._enabled){return;}
this._enabled=false;this._layerTreeAgent.disable();}
enable(){if(this._enabled){return;}
this._enabled=true;this._forceEnable();}
_forceEnable(){this._lastPaintRectByLayerId={};if(!this._layerTree){this._layerTree=new AgentLayerTree(this);}
this._layerTreeAgent.enable();}
layerTree(){return this._layerTree;}
async _layerTreeChanged(layers){if(!this._enabled){return;}
this._throttler.schedule(this._innerSetLayers.bind(this,layers));}
async _innerSetLayers(layers){const layerTree=(this._layerTree);await layerTree.setLayers(layers);for(const layerId in this._lastPaintRectByLayerId){const lastPaintRect=this._lastPaintRectByLayerId[layerId];const layer=layerTree.layerById(layerId);if(layer){(layer)._lastPaintRect=lastPaintRect;}}
this._lastPaintRectByLayerId={};this.dispatchEventToListeners(Events.LayerTreeChanged);}
_layerPainted(layerId,clipRect){if(!this._enabled){return;}
const layerTree=(this._layerTree);const layer=(layerTree.layerById(layerId));if(!layer){this._lastPaintRectByLayerId[layerId]=clipRect;return;}
layer._didPaint(clipRect);this.dispatchEventToListeners(Events.LayerPainted,layer);}
_onMainFrameNavigated(){this._layerTree=null;if(this._enabled){this._forceEnable();}}}
SDK.SDKModel.register(LayerTreeModel,SDK.Target.Capability.DOM,false);export const Events={LayerTreeChanged:Symbol('LayerTreeChanged'),LayerPainted:Symbol('LayerPainted'),};export class AgentLayerTree extends SDK.LayerTreeBase{constructor(layerTreeModel){super(layerTreeModel.target());this._layerTreeModel=layerTreeModel;}
async setLayers(payload){if(!payload){this._innerSetLayers(payload);return;}
const idsToResolve=new Set();for(let i=0;i<payload.length;++i){const backendNodeId=payload[i].backendNodeId;if(!backendNodeId||this.backendNodeIdToNode().has(backendNodeId)){continue;}
idsToResolve.add(backendNodeId);}
await this.resolveBackendNodeIds(idsToResolve);this._innerSetLayers(payload);}
_innerSetLayers(layers){this.setRoot(null);this.setContentRoot(null);if(!layers){return;}
let root;const oldLayersById=this._layersById;this._layersById={};for(let i=0;i<layers.length;++i){const layerId=layers[i].layerId;let layer=oldLayersById[layerId];if(layer){layer._reset(layers[i]);}else{layer=new AgentLayer(this._layerTreeModel,layers[i]);}
this._layersById[layerId]=layer;const backendNodeId=layers[i].backendNodeId;if(backendNodeId){layer._setNode(this.backendNodeIdToNode().get(backendNodeId));}
if(!this.contentRoot()&&layer.drawsContent()){this.setContentRoot(layer);}
const parentId=layer.parentId();if(parentId){const parent=this._layersById[parentId];if(!parent){console.assert(parent,'missing parent '+parentId+' for layer '+layerId);}
parent.addChild(layer);}else{if(root){console.assert(false,'Multiple root layers');}
root=layer;}}
if(root){this.setRoot(root);root._calculateQuad(new WebKitCSSMatrix());}}}
export class AgentLayer{constructor(layerTreeModel,layerPayload){this._layerTreeModel=layerTreeModel;this._reset(layerPayload);}
id(){return this._layerPayload.layerId;}
parentId(){return this._layerPayload.parentLayerId;}
parent(){return this._parent;}
isRoot(){return!this.parentId();}
children(){return this._children;}
addChild(childParam){const child=(childParam);if(child._parent){console.assert(false,'Child already has a parent');}
this._children.push(child);child._parent=this;}
_setNode(node){this._node=node;}
node(){return this._node;}
nodeForSelfOrAncestor(){for(let layer=this;layer;layer=layer._parent){if(layer._node){return layer._node;}}
return null;}
offsetX(){return this._layerPayload.offsetX;}
offsetY(){return this._layerPayload.offsetY;}
width(){return this._layerPayload.width;}
height(){return this._layerPayload.height;}
transform(){return this._layerPayload.transform;}
quad(){return this._quad;}
anchorPoint(){return[this._layerPayload.anchorX||0,this._layerPayload.anchorY||0,this._layerPayload.anchorZ||0,];}
invisible(){return this._layerPayload.invisible;}
paintCount(){return this._paintCount||this._layerPayload.paintCount;}
lastPaintRect(){return this._lastPaintRect;}
scrollRects(){return this._scrollRects;}
stickyPositionConstraint(){return this._stickyPositionConstraint;}
async requestCompositingReasons(){const reasons=await this._layerTreeModel._layerTreeAgent.compositingReasons(this.id());return reasons||[];}
drawsContent(){return this._layerPayload.drawsContent;}
gpuMemoryUsage(){const bytesPerPixel=4;return this.drawsContent()?this.width()*this.height()*bytesPerPixel:0;}
snapshots(){const promise=this._layerTreeModel._paintProfilerModel.makeSnapshot(this.id()).then(snapshot=>{if(!snapshot){return null;}
return{rect:{x:0,y:0,width:this.width(),height:this.height()},snapshot:snapshot};});return[promise];}
_didPaint(rect){this._lastPaintRect=rect;this._paintCount=this.paintCount()+1;this._image=null;}
_reset(layerPayload){this._node=null;this._children=[];this._parent=null;this._paintCount=0;this._layerPayload=layerPayload;this._image=null;this._scrollRects=this._layerPayload.scrollRects||[];this._stickyPositionConstraint=this._layerPayload.stickyPositionConstraint?new SDK.Layer.StickyPositionConstraint(this._layerTreeModel.layerTree(),this._layerPayload.stickyPositionConstraint):null;}
_matrixFromArray(a){function toFixed9(x){return x.toFixed(9);}
return new WebKitCSSMatrix('matrix3d('+a.map(toFixed9).join(',')+')');}
_calculateTransformToViewport(parentTransform){const offsetMatrix=new WebKitCSSMatrix().translate(this._layerPayload.offsetX,this._layerPayload.offsetY);let matrix=offsetMatrix;if(this._layerPayload.transform){const transformMatrix=this._matrixFromArray(this._layerPayload.transform);const anchorVector=new UI.Geometry.Vector(this._layerPayload.width*this.anchorPoint()[0],this._layerPayload.height*this.anchorPoint()[1],this.anchorPoint()[2]);const anchorPoint=UI.Geometry.multiplyVectorByMatrixAndNormalize(anchorVector,matrix);const anchorMatrix=new WebKitCSSMatrix().translate(-anchorPoint.x,-anchorPoint.y,-anchorPoint.z);matrix=anchorMatrix.inverse().multiply(transformMatrix.multiply(anchorMatrix.multiply(matrix)));}
matrix=parentTransform.multiply(matrix);return matrix;}
_createVertexArrayForRect(width,height){return[0,0,0,width,0,0,width,height,0,0,height,0];}
_calculateQuad(parentTransform){const matrix=this._calculateTransformToViewport(parentTransform);this._quad=[];const vertices=this._createVertexArrayForRect(this._layerPayload.width,this._layerPayload.height);for(let i=0;i<4;++i){const point=UI.Geometry.multiplyVectorByMatrixAndNormalize(new UI.Geometry.Vector(vertices[i*3],vertices[i*3+1],vertices[i*3+2]),matrix);this._quad.push(point.x,point.y);}
function calculateQuadForLayer(layer){layer._calculateQuad(matrix);}
this._children.forEach(calculateQuadForLayer);}}
class LayerTreeDispatcher{constructor(layerTreeModel){this._layerTreeModel=layerTreeModel;}
layerTreeDidChange(layers){this._layerTreeModel._layerTreeChanged(layers||null);}
layerPainted(layerId,clipRect){this._layerTreeModel._layerPainted(layerId,clipRect);}}
self.Layers=self.Layers||{};Layers=Layers||{};Layers.LayerTreeModel=LayerTreeModel;Layers.LayerTreeModel.Events=Events;Layers.AgentLayerTree=AgentLayerTree;Layers.AgentLayer=AgentLayer;export default class LayerPaintProfilerView extends UI.SplitWidget{constructor(showImageCallback){super(true,false);this._logTreeView=new LayerViewer.PaintProfilerCommandLogView();this.setSidebarWidget(this._logTreeView);this._paintProfilerView=new LayerViewer.PaintProfilerView(showImageCallback);this.setMainWidget(this._paintProfilerView);this._paintProfilerView.addEventListener(LayerViewer.PaintProfilerView.Events.WindowChanged,this._onWindowChanged,this);}
reset(){this._paintProfilerView.setSnapshotAndLog(null,[],null);}
profile(snapshot){snapshot.commandLog().then(log=>setSnapshotAndLog.call(this,snapshot,log));function setSnapshotAndLog(snapshot,log){this._logTreeView.setCommandLog(log||[]);this._paintProfilerView.setSnapshotAndLog(snapshot,log||[],null);if(snapshot){snapshot.release();}}}
setScale(scale){this._paintProfilerView.setScale(scale);}
_onWindowChanged(){this._logTreeView.updateWindow(this._paintProfilerView.selectionWindow());}}
self.Layers=self.Layers||{};Layers=Layers||{};Layers.LayerPaintProfilerView=LayerPaintProfilerView;import*as CustomPreviewComponent from'./CustomPreviewComponent.js';import*as JavaScriptAutocomplete from'./JavaScriptAutocomplete.js';import*as JavaScriptREPL from'./JavaScriptREPL.js';import*as ObjectPopoverHelper from'./ObjectPopoverHelper.js';import*as ObjectPropertiesSection from'./ObjectPropertiesSection.js';import*as RemoteObjectPreviewFormatter from'./RemoteObjectPreviewFormatter.js';export{CustomPreviewComponent,JavaScriptAutocomplete,JavaScriptREPL,ObjectPopoverHelper,ObjectPropertiesSection,RemoteObjectPreviewFormatter,};export default class RemoteObjectPreviewFormatter{static _objectPropertyComparator(a,b){return sortValue(a)-sortValue(b);function sortValue(property){const internalName=_internalName;if(property.name===internalName.PromiseStatus){return 1;}else if(property.name===internalName.PromiseValue){return 2;}else if(property.name===internalName.GeneratorStatus||property.name===internalName.PrimitiveValue){return 3;}
else if(property.type!=='function'&&!property.name.startsWith('#')){return 4;}
return 5;}}
appendObjectPreview(parentElement,preview,isEntry){const description=preview.description;const subTypesWithoutValuePreview=new Set(['null','regexp','error','internal#entry']);if(preview.type!=='object'||subTypesWithoutValuePreview.has(preview.subtype)||isEntry){parentElement.appendChild(this.renderPropertyPreview(preview.type,preview.subtype,description));return;}
const isArrayOrTypedArray=preview.subtype==='array'||preview.subtype==='typedarray';if(description){let text;if(isArrayOrTypedArray){const arrayLength=SDK.RemoteObject.arrayLength(preview);const arrayLengthText=arrayLength>1?('('+arrayLength+')'):'';const arrayName=SDK.RemoteObject.arrayNameFromDescription(description);text=arrayName==='Array'?arrayLengthText:(arrayName+arrayLengthText);}else{const hideDescription=description==='Object';text=hideDescription?'':description;}
if(text.length>0){parentElement.createChild('span','object-description').textContent=text+'\xA0';}}
const propertiesElement=parentElement.createChild('span','object-properties-preview');propertiesElement.createTextChild(isArrayOrTypedArray?'[':'{');if(preview.entries){this._appendEntriesPreview(propertiesElement,preview);}else if(isArrayOrTypedArray){this._appendArrayPropertiesPreview(propertiesElement,preview);}else{this._appendObjectPropertiesPreview(propertiesElement,preview);}
if(preview.overflow){const ellipsisText=propertiesElement.textContent.length>1?',\xA0\u2026':'\u2026';propertiesElement.createChild('span').textContent=ellipsisText;}
propertiesElement.createTextChild(isArrayOrTypedArray?']':'}');}
_abbreviateFullQualifiedClassName(description){const abbreviatedDescription=description.split('.');for(let i=0;i<abbreviatedDescription.length-1;++i){abbreviatedDescription[i]=abbreviatedDescription[i].trimMiddle(3);}
return abbreviatedDescription.join('.');}
_appendObjectPropertiesPreview(parentElement,preview){const internalName=_internalName;const properties=preview.properties.filter(p=>p.type!=='accessor').sort(RemoteObjectPreviewFormatter._objectPropertyComparator);for(let i=0;i<properties.length;++i){if(i>0){parentElement.createTextChild(', ');}
const property=properties[i];const name=property.name;if(preview.subtype==='promise'&&name===internalName.PromiseStatus){parentElement.appendChild(this._renderDisplayName('<'+property.value+'>'));const nextProperty=i+1<properties.length?properties[i+1]:null;if(nextProperty&&nextProperty.name===internalName.PromiseValue){if(property.value!=='pending'){parentElement.createTextChild(': ');parentElement.appendChild(this._renderPropertyPreviewOrAccessor([nextProperty]));}
i++;}}else if(preview.subtype==='generator'&&name===internalName.GeneratorStatus){parentElement.appendChild(this._renderDisplayName('<'+property.value+'>'));}else if(name===internalName.PrimitiveValue){parentElement.appendChild(this._renderPropertyPreviewOrAccessor([property]));}else{parentElement.appendChild(this._renderDisplayName(name));parentElement.createTextChild(': ');parentElement.appendChild(this._renderPropertyPreviewOrAccessor([property]));}}}
_appendArrayPropertiesPreview(parentElement,preview){const arrayLength=SDK.RemoteObject.arrayLength(preview);const indexProperties=preview.properties.filter(p=>toArrayIndex(p.name)!==-1).sort(arrayEntryComparator);const otherProperties=preview.properties.filter(p=>toArrayIndex(p.name)===-1).sort(RemoteObjectPreviewFormatter._objectPropertyComparator);function arrayEntryComparator(a,b){return toArrayIndex(a.name)-toArrayIndex(b.name);}
function toArrayIndex(name){const index=name>>>0;if(String(index)===name&&index<arrayLength){return index;}
return-1;}
const canShowGaps=!preview.overflow;let lastNonEmptyArrayIndex=-1;let elementsAdded=false;for(let i=0;i<indexProperties.length;++i){if(elementsAdded){parentElement.createTextChild(', ');}
const property=indexProperties[i];const index=toArrayIndex(property.name);if(canShowGaps&&index-lastNonEmptyArrayIndex>1){appendUndefined(index);parentElement.createTextChild(', ');}
if(!canShowGaps&&i!==index){parentElement.appendChild(this._renderDisplayName(property.name));parentElement.createTextChild(': ');}
parentElement.appendChild(this._renderPropertyPreviewOrAccessor([property]));lastNonEmptyArrayIndex=index;elementsAdded=true;}
if(canShowGaps&&arrayLength-lastNonEmptyArrayIndex>1){if(elementsAdded){parentElement.createTextChild(', ');}
appendUndefined(arrayLength);}
for(let i=0;i<otherProperties.length;++i){if(elementsAdded){parentElement.createTextChild(', ');}
const property=otherProperties[i];parentElement.appendChild(this._renderDisplayName(property.name));parentElement.createTextChild(': ');parentElement.appendChild(this._renderPropertyPreviewOrAccessor([property]));elementsAdded=true;}
function appendUndefined(index){const span=parentElement.createChild('span','object-value-undefined');const count=index-lastNonEmptyArrayIndex-1;span.textContent=count!==1?Common.UIString('empty × %d',count):Common.UIString('empty');elementsAdded=true;}}
_appendEntriesPreview(parentElement,preview){for(let i=0;i<preview.entries.length;++i){if(i>0){parentElement.createTextChild(', ');}
const entry=preview.entries[i];if(entry.key){this.appendObjectPreview(parentElement,entry.key,true);parentElement.createTextChild(' => ');}
this.appendObjectPreview(parentElement,entry.value,true);}}
_renderDisplayName(name){const result=createElementWithClass('span','name');const needsQuotes=/^\s|\s$|^$|\n/.test(name);result.textContent=needsQuotes?'"'+name.replace(/\n/g,'\u21B5')+'"':name;return result;}
_renderPropertyPreviewOrAccessor(propertyPath){const property=propertyPath.peekLast();return this.renderPropertyPreview(property.type,(property.subtype),property.value);}
renderPropertyPreview(type,subtype,description){const span=createElementWithClass('span','object-value-'+(subtype||type));description=description||'';if(type==='accessor'){span.textContent='(...)';span.title=Common.UIString('The property is computed with a getter');return span;}
if(type==='function'){span.textContent='\u0192';return span;}
if(type==='object'&&subtype==='node'&&description){createSpansForNodeTitle(span,description);return span;}
if(type==='string'){span.createTextChildren('"',description.replace(/\n/g,'\u21B5'),'"');return span;}
if(type==='object'&&!subtype){let preview=this._abbreviateFullQualifiedClassName(description);if(preview==='Object'){preview='{\u2026}';}
span.textContent=preview;span.title=description;return span;}
span.textContent=description;return span;}}
const _internalName={GeneratorStatus:'[[GeneratorStatus]]',PrimitiveValue:'[[PrimitiveValue]]',PromiseStatus:'[[PromiseStatus]]',PromiseValue:'[[PromiseValue]]'};export const createSpansForNodeTitle=function(container,nodeTitle){const match=nodeTitle.match(/([^#.]+)(#[^.]+)?(\..*)?/);container.createChild('span','webkit-html-tag-name').textContent=match[1];if(match[2]){container.createChild('span','webkit-html-attribute-value').textContent=match[2];}
if(match[3]){container.createChild('span','webkit-html-attribute-name').textContent=match[3];}};self.ObjectUI=self.ObjectUI||{};ObjectUI=ObjectUI||{};ObjectUI.RemoteObjectPreviewFormatter=RemoteObjectPreviewFormatter;ObjectUI.RemoteObjectPreviewFormatter.createSpansForNodeTitle=createSpansForNodeTitle;export default class ObjectPropertiesSection extends UI.TreeOutlineInShadow{constructor(object,title,linkifier,emptyPlaceholder,ignoreHasOwnProperty,extraProperties,showOverflow){super();this._object=object;this._editable=true;if(!showOverflow){this.hideOverflow();}
this.setFocusable(true);this.setShowSelectionOnKeyboardFocus(true);this._objectTreeElement=new RootElement(object,linkifier,emptyPlaceholder,ignoreHasOwnProperty,extraProperties);this.appendChild(this._objectTreeElement);if(typeof title==='string'||!title){this.titleElement=this.element.createChild('span');this.titleElement.textContent=title||'';}else{this.titleElement=title;this.element.appendChild(title);}
if(!this.titleElement.hasAttribute('tabIndex')){this.titleElement.tabIndex=-1;}
this.element._section=this;this.registerRequiredCSS('object_ui/objectValue.css');this.registerRequiredCSS('object_ui/objectPropertiesSection.css');this.rootElement().childrenListElement.classList.add('source-code','object-properties-section');}
static defaultObjectPresentation(object,linkifier,skipProto,readOnly){const objectPropertiesSection=ObjectPropertiesSection.defaultObjectPropertiesSection(object,linkifier,skipProto,readOnly);if(!object.hasChildren){return objectPropertiesSection.titleElement;}else{return objectPropertiesSection.element;}}
static defaultObjectPropertiesSection(object,linkifier,skipProto,readOnly){const titleElement=createElementWithClass('span','source-code');const shadowRoot=UI.createShadowRootWithCoreStyles(titleElement,'object_ui/objectValue.css');shadowRoot.appendChild(ObjectPropertiesSection.createValueElement(object,false,true));const objectPropertiesSection=new ObjectPropertiesSection(object,titleElement,linkifier);objectPropertiesSection.editable=false;if(skipProto){objectPropertiesSection.skipProto();}
if(readOnly){objectPropertiesSection.setEditable(false);}
return objectPropertiesSection;}
static CompareProperties(propertyA,propertyB){const a=propertyA.name;const b=propertyB.name;if(a==='__proto__'){return 1;}
if(b==='__proto__'){return-1;}
if(!propertyA.enumerable&&propertyB.enumerable){return 1;}
if(!propertyB.enumerable&&propertyA.enumerable){return-1;}
if(a.startsWith('_')&&!b.startsWith('_')){return 1;}
if(b.startsWith('_')&&!a.startsWith('_')){return-1;}
if(propertyA.symbol&&!propertyB.symbol){return 1;}
if(propertyB.symbol&&!propertyA.symbol){return-1;}
if(propertyA.private&&!propertyB.private){return 1;}
if(propertyB.private&&!propertyA.private){return-1;}
return String.naturalOrderComparator(a,b);}
static createNameElement(name,isPrivate){if(name===null){return UI.html`<span class="name"></span>`;}
if(/^\s|\s$|^$|\n/.test(name)){return UI.html`<span class="name">"${name.replace(/\n/g, '\u21B5')}"</span>`;}
if(isPrivate){return UI.html`<span class="name">
        <span class="private-property-hash">${name[0]}</span>${name.substring(1)}
      </span>`;}
return UI.html`<span class="name">${name}</span>`;}
static valueElementForFunctionDescription(description,includePreview,defaultName){const valueElement=createElementWithClass('span','object-value-function');description=description||'';const text=description.replace(/^function [gs]et /,'function ').replace(/^function [gs]et\(/,'function\(').replace(/^[gs]et /,'');defaultName=defaultName||'';const asyncMatch=text.match(/^(async\s+function)/);const isGenerator=text.startsWith('function*');const isGeneratorShorthand=text.startsWith('*');const isBasic=!isGenerator&&text.startsWith('function');const isClass=text.startsWith('class ')||text.startsWith('class{');const firstArrowIndex=text.indexOf('=>');const isArrow=!asyncMatch&&!isGenerator&&!isBasic&&!isClass&&firstArrowIndex>0;let textAfterPrefix;if(isClass){textAfterPrefix=text.substring('class'.length);const classNameMatch=/^[^{\s]+/.exec(textAfterPrefix.trim());let className=defaultName;if(classNameMatch){className=classNameMatch[0].trim()||defaultName;}
addElements('class',textAfterPrefix,className);}else if(asyncMatch){textAfterPrefix=text.substring(asyncMatch[1].length);addElements('async \u0192',textAfterPrefix,nameAndArguments(textAfterPrefix));}else if(isGenerator){textAfterPrefix=text.substring('function*'.length);addElements('\u0192*',textAfterPrefix,nameAndArguments(textAfterPrefix));}else if(isGeneratorShorthand){textAfterPrefix=text.substring('*'.length);addElements('\u0192*',textAfterPrefix,nameAndArguments(textAfterPrefix));}else if(isBasic){textAfterPrefix=text.substring('function'.length);addElements('\u0192',textAfterPrefix,nameAndArguments(textAfterPrefix));}else if(isArrow){const maxArrowFunctionCharacterLength=60;let abbreviation=text;if(defaultName){abbreviation=defaultName+'()';}else if(text.length>maxArrowFunctionCharacterLength){abbreviation=text.substring(0,firstArrowIndex+2)+' {\u2026}';}
addElements('',text,abbreviation);}else{addElements('\u0192',text,nameAndArguments(text));}
valueElement.title=description.trimEndWithMaxLength(500);return valueElement;function nameAndArguments(contents){const startOfArgumentsIndex=contents.indexOf('(');const endOfArgumentsMatch=contents.match(/\)\s*{/);if(startOfArgumentsIndex!==-1&&endOfArgumentsMatch&&endOfArgumentsMatch.index>startOfArgumentsIndex){const name=contents.substring(0,startOfArgumentsIndex).trim()||defaultName;const args=contents.substring(startOfArgumentsIndex,endOfArgumentsMatch.index+1);return name+args;}
return defaultName+'()';}
function addElements(prefix,body,abbreviation){const maxFunctionBodyLength=200;if(prefix.length){valueElement.createChild('span','object-value-function-prefix').textContent=prefix+' ';}
if(includePreview){valueElement.createTextChild(body.trim().trimEndWithMaxLength(maxFunctionBodyLength));}else{valueElement.createTextChild(abbreviation.replace(/\n/g,' '));}}}
static createValueElementWithCustomSupport(value,wasThrown,showPreview,parentElement,linkifier){if(value.customPreview()){const result=(new ObjectUI.CustomPreviewComponent(value)).element;result.classList.add('object-properties-section-custom-section');return result;}
return ObjectPropertiesSection.createValueElement(value,wasThrown,showPreview,parentElement,linkifier);}
static createValueElement(value,wasThrown,showPreview,parentElement,linkifier){let valueElement;const type=value.type;const subtype=value.subtype;const description=value.description;if(type==='object'&&subtype==='internal#location'){const rawLocation=value.debuggerModel().createRawLocationByScriptId(value.value.scriptId,value.value.lineNumber,value.value.columnNumber);if(rawLocation&&linkifier){return linkifier.linkifyRawLocation(rawLocation,'');}
valueElement=createUnknownInternalLocationElement();}else if(type==='string'&&typeof description==='string'){valueElement=createStringElement();}else if(type==='function'){valueElement=ObjectPropertiesSection.valueElementForFunctionDescription(description);}else if(type==='object'&&subtype==='node'&&description){valueElement=createNodeElement();}else if(type==='number'&&description&&description.indexOf('e')!==-1){valueElement=createNumberWithExponentElement();if(parentElement)
{parentElement.classList.add('hbox');}}else{valueElement=createElementWithClass('span','object-value-'+(subtype||type));valueElement.title=description||'';if(value.preview&&showPreview){const previewFormatter=new ObjectUI.RemoteObjectPreviewFormatter();previewFormatter.appendObjectPreview(valueElement,value.preview,false);}else if(description.length>ObjectUI.ObjectPropertiesSection._maxRenderableStringLength){valueElement.appendChild(UI.createExpandableText(description,50));}else{valueElement.textContent=description;}}
if(wasThrown){const wrapperElement=createElementWithClass('span','error value');wrapperElement.appendChild(UI.formatLocalized('[Exception: %s]',[valueElement]));return wrapperElement;}
valueElement.classList.add('value');return valueElement;function createUnknownInternalLocationElement(){const valueElement=createElementWithClass('span');valueElement.textContent='<'+Common.UIString('unknown')+'>';valueElement.title=description||'';return valueElement;}
function createStringElement(){const valueElement=createElementWithClass('span','object-value-string');const text=description.replace(/\n/g,'\u21B5');valueElement.createChild('span','object-value-string-quote').textContent='"';if(description.length>ObjectUI.ObjectPropertiesSection._maxRenderableStringLength){valueElement.appendChild(UI.createExpandableText(text,50));}else{valueElement.createTextChild(text);}
valueElement.createChild('span','object-value-string-quote').textContent='"';valueElement.title=description||'';return valueElement;}
function createNodeElement(){const valueElement=createElementWithClass('span','object-value-node');ObjectUI.RemoteObjectPreviewFormatter.createSpansForNodeTitle(valueElement,(description));valueElement.addEventListener('click',event=>{Common.Revealer.reveal(value);event.consume(true);},false);valueElement.addEventListener('mousemove',()=>SDK.OverlayModel.highlightObjectAsDOMNode(value),false);valueElement.addEventListener('mouseleave',()=>SDK.OverlayModel.hideDOMNodeHighlight(),false);return valueElement;}
function createNumberWithExponentElement(){const valueElement=createElementWithClass('span','object-value-number');const numberParts=description.split('e');valueElement.createChild('span','object-value-scientific-notation-mantissa').textContent=numberParts[0];valueElement.createChild('span','object-value-scientific-notation-exponent').textContent='e'+numberParts[1];valueElement.classList.add('object-value-scientific-notation-number');valueElement.title=description||'';return valueElement;}}
static formatObjectAsFunction(func,element,linkify,includePreview){return func.debuggerModel().functionDetailsPromise(func).then(didGetDetails);function didGetDetails(response){if(linkify&&response&&response.location){element.classList.add('linkified');element.addEventListener('click',()=>Common.Revealer.reveal(response.location)&&false);}
let defaultName=includePreview?'':'anonymous';if(response&&response.functionName){defaultName=response.functionName;}
const valueElement=ObjectPropertiesSection.valueElementForFunctionDescription(func.description,includePreview,defaultName);element.appendChild(valueElement);}}
static _isDisplayableProperty(property,parentProperty){if(!parentProperty||!parentProperty.synthetic){return true;}
const name=property.name;const useless=(parentProperty.name==='[[Entries]]'&&(name==='length'||name==='__proto__'));return!useless;}
skipProto(){this._skipProto=true;}
expand(){this._objectTreeElement.expand();}
setEditable(value){this._editable=value;}
objectTreeElement(){return this._objectTreeElement;}
enableContextMenu(){this.element.addEventListener('contextmenu',this._contextMenuEventFired.bind(this),false);}
_contextMenuEventFired(event){const contextMenu=new UI.ContextMenu(event);contextMenu.appendApplicableItems(this._object);if(this._object instanceof SDK.LocalJSONObject){contextMenu.viewSection().appendItem(ls`Expand recursively`,this._objectTreeElement.expandRecursively.bind(this._objectTreeElement,Number.MAX_VALUE));contextMenu.viewSection().appendItem(ls`Collapse children`,this._objectTreeElement.collapseChildren.bind(this._objectTreeElement));}
contextMenu.show();}
titleLessMode(){this._objectTreeElement.listItemElement.classList.add('hidden');this._objectTreeElement.childrenListElement.classList.add('title-less-mode');this._objectTreeElement.expand();}}
const _arrayLoadThreshold=100;export const _maxRenderableStringLength=10000;export class ObjectPropertiesSectionsTreeOutline extends UI.TreeOutlineInShadow{constructor(options){super();this.registerRequiredCSS('object_ui/objectValue.css');this.registerRequiredCSS('object_ui/objectPropertiesSection.css');this._editable=!(options&&options.readOnly);this.contentElement.classList.add('source-code');this.contentElement.classList.add('object-properties-section');this.hideOverflow();}}
export class RootElement extends UI.TreeElement{constructor(object,linkifier,emptyPlaceholder,ignoreHasOwnProperty,extraProperties){const contentElement=createElement('slot');super(contentElement);this._object=object;this._extraProperties=extraProperties||[];this._ignoreHasOwnProperty=!!ignoreHasOwnProperty;this._emptyPlaceholder=emptyPlaceholder;this.setExpandable(true);this.selectable=true;this.toggleOnClick=true;this.listItemElement.classList.add('object-properties-section-root-element');this._linkifier=linkifier;}
onexpand(){if(this.treeOutline){this.treeOutline.element.classList.add('expanded');}}
oncollapse(){if(this.treeOutline){this.treeOutline.element.classList.remove('expanded');}}
ondblclick(e){return true;}
async onpopulate(){return ObjectPropertyTreeElement._populate(this,this._object,!!this.treeOutline._skipProto,this._linkifier,this._emptyPlaceholder,this._ignoreHasOwnProperty,this._extraProperties);}}
export class ObjectPropertyTreeElement extends UI.TreeElement{constructor(property,linkifier){super();this.property=property;this.toggleOnClick=true;this._highlightChanges=[];this._linkifier=linkifier;this.listItemElement.addEventListener('contextmenu',this._contextMenuFired.bind(this),false);}
static async _populate(treeElement,value,skipProto,linkifier,emptyPlaceholder,flattenProtoChain,extraProperties,targetValue){if(value.arrayLength()>_arrayLoadThreshold){treeElement.removeChildren();ArrayGroupingTreeElement._populateArray(treeElement,value,0,value.arrayLength()-1,linkifier);return;}
let allProperties;if(flattenProtoChain){allProperties=await value.getAllProperties(false,true);}else{allProperties=await SDK.RemoteObject.loadFromObjectPerProto(value,true);}
const properties=allProperties.properties;const internalProperties=allProperties.internalProperties;treeElement.removeChildren();if(!properties){return;}
extraProperties=extraProperties||[];for(let i=0;i<extraProperties.length;++i){properties.push(extraProperties[i]);}
ObjectPropertyTreeElement.populateWithProperties(treeElement,properties,internalProperties,skipProto,targetValue||value,linkifier,emptyPlaceholder);}
static populateWithProperties(treeNode,properties,internalProperties,skipProto,value,linkifier,emptyPlaceholder){internalProperties=internalProperties||[];const entriesProperty=internalProperties.find(property=>property.name==='[[Entries]]');if(entriesProperty){entriesProperty.parentObject=value;const treeElement=new ObjectPropertyTreeElement(entriesProperty,linkifier);treeElement.setExpandable(true);treeElement.expand();treeNode.appendChild(treeElement);}
const tailProperties=[];let protoProperty=null;for(let i=0;i<properties.length;++i){const property=properties[i];property.parentObject=value;if(!ObjectPropertiesSection._isDisplayableProperty(property,treeNode.property)){continue;}
if(property.name==='__proto__'&&!property.isAccessorProperty()){protoProperty=property;continue;}
if(property.isOwn&&property.getter){const getterProperty=new SDK.RemoteObjectProperty('get '+property.name,property.getter,false);getterProperty.parentObject=value;tailProperties.push(getterProperty);}
if(property.isOwn&&property.setter){const setterProperty=new SDK.RemoteObjectProperty('set '+property.name,property.setter,false);setterProperty.parentObject=value;tailProperties.push(setterProperty);}
const canShowProperty=property.getter||!property.isAccessorProperty();if(canShowProperty&&property.name!=='__proto__'){treeNode.appendChild(new ObjectPropertyTreeElement(property,linkifier));}}
for(let i=0;i<tailProperties.length;++i){treeNode.appendChild(new ObjectPropertyTreeElement(tailProperties[i],linkifier));}
if(!skipProto&&protoProperty){treeNode.appendChild(new ObjectPropertyTreeElement(protoProperty,linkifier));}
for(const property of internalProperties){property.parentObject=value;const treeElement=new ObjectPropertyTreeElement(property,linkifier);if(property.name==='[[Entries]]'){continue;}
treeNode.appendChild(treeElement);}
ObjectPropertyTreeElement._appendEmptyPlaceholderIfNeeded(treeNode,emptyPlaceholder);}
static _appendEmptyPlaceholderIfNeeded(treeNode,emptyPlaceholder){if(treeNode.childCount()){return;}
const title=createElementWithClass('div','gray-info-message');title.textContent=emptyPlaceholder||Common.UIString('No properties');const infoElement=new UI.TreeElement(title);treeNode.appendChild(infoElement);}
static createRemoteObjectAccessorPropertySpan(object,propertyPath,callback){const rootElement=createElement('span');const element=rootElement.createChild('span');element.textContent=Common.UIString('(...)');if(!object){return rootElement;}
element.classList.add('object-value-calculate-value-button');element.title=Common.UIString('Invoke property getter');element.addEventListener('click',onInvokeGetterClick,false);function onInvokeGetterClick(event){event.consume();object.callFunction(invokeGetter,[{value:JSON.stringify(propertyPath)}]).then(callback);}
function invokeGetter(arrayStr){let result=this;const properties=JSON.parse(arrayStr);for(let i=0,n=properties.length;i<n;++i){result=result[properties[i]];}
return result;}
return rootElement;}
setSearchRegex(regex,additionalCssClassName){let cssClasses=UI.highlightedSearchResultClassName;if(additionalCssClassName){cssClasses+=' '+additionalCssClassName;}
this.revertHighlightChanges();this._applySearch(regex,this.nameElement,cssClasses);const valueType=this.property.value.type;if(valueType!=='object'){this._applySearch(regex,this.valueElement,cssClasses);}
return!!this._highlightChanges.length;}
_applySearch(regex,element,cssClassName){const ranges=[];const content=element.textContent;regex.lastIndex=0;let match=regex.exec(content);while(match){ranges.push(new TextUtils.SourceRange(match.index,match[0].length));match=regex.exec(content);}
if(ranges.length){UI.highlightRangesWithStyleClass(element,ranges,cssClassName,this._highlightChanges);}}
revertHighlightChanges(){UI.revertDomChanges(this._highlightChanges);this._highlightChanges=[];}
async onpopulate(){const propertyValue=(this.property.value);console.assert(propertyValue);const skipProto=this.treeOutline?this.treeOutline._skipProto:true;const targetValue=this.property.name!=='__proto__'?propertyValue:this.property.parentObject;await ObjectPropertyTreeElement._populate(this,propertyValue,skipProto,this._linkifier,undefined,undefined,undefined,targetValue);}
ondblclick(event){const inEditableElement=event.target.isSelfOrDescendant(this.valueElement)||(this.expandedValueElement&&event.target.isSelfOrDescendant(this.expandedValueElement));if(!this.property.value.customPreview()&&inEditableElement&&(this.property.writable||this.property.setter)){this._startEditing();}
return false;}
onenter(){if(!this.property.value.customPreview()&&(this.property.writable||this.property.setter)){this._startEditing();return true;}
return false;}
onattach(){this.update();this._updateExpandable();}
onexpand(){this._showExpandedValueElement(true);}
oncollapse(){this._showExpandedValueElement(false);}
_showExpandedValueElement(value){if(!this.expandedValueElement){return;}
if(value){this._rowContainer.replaceChild(this.expandedValueElement,this.valueElement);}else{this._rowContainer.replaceChild(this.valueElement,this.expandedValueElement);}}
_createExpandedValueElement(value){const needsAlternateValue=value.hasChildren&&!value.customPreview()&&value.subtype!=='node'&&value.type!=='function'&&(value.type!=='object'||value.preview);if(!needsAlternateValue){return null;}
const valueElement=createElementWithClass('span','value');if(value.description==='Object'){valueElement.textContent='';}else{valueElement.setTextContentTruncatedIfNeeded(value.description||'');}
valueElement.classList.add('object-value-'+(value.subtype||value.type));valueElement.title=value.description||'';return valueElement;}
update(){this.nameElement=ObjectPropertiesSection.createNameElement(this.property.name,this.property.private);if(!this.property.enumerable){this.nameElement.classList.add('object-properties-section-dimmed');}
if(this.property.synthetic){this.nameElement.classList.add('synthetic-property');}
this._updatePropertyPath();const isInternalEntries=this.property.synthetic&&this.property.name==='[[Entries]]';if(isInternalEntries){this.valueElement=createElementWithClass('span','value');}else if(this.property.value){const showPreview=this.property.name!=='__proto__';this.valueElement=ObjectPropertiesSection.createValueElementWithCustomSupport(this.property.value,this.property.wasThrown,showPreview,this.listItemElement,this._linkifier);}else if(this.property.getter){this.valueElement=ObjectPropertyTreeElement.createRemoteObjectAccessorPropertySpan(this.property.parentObject,[this.property.name],this._onInvokeGetterClick.bind(this));}else{this.valueElement=createElementWithClass('span','object-value-undefined');this.valueElement.textContent=Common.UIString('<unreadable>');this.valueElement.title=Common.UIString('No property getter');}
const valueText=this.valueElement.textContent;if(this.property.value&&valueText&&!this.property.wasThrown){this.expandedValueElement=this._createExpandedValueElement(this.property.value);}
this.listItemElement.removeChildren();if(isInternalEntries){this._rowContainer=UI.html`<span class='name-and-value'>${this.nameElement}</span>`;}else{this._rowContainer=UI.html`<span class='name-and-value'>${this.nameElement}: ${this.valueElement}</span>`;}
this.listItemElement.appendChild(this._rowContainer);}
_updatePropertyPath(){if(this.nameElement.title){return;}
const name=this.property.name;if(this.property.synthetic){this.nameElement.title=name;return;}
const useDotNotation=/^(_|\$|[A-Z])(_|\$|[A-Z]|\d)*$/i;const isInteger=/^[1-9]\d*$/;const parentPath=(this.parent.nameElement&&!this.parent.property.synthetic)?this.parent.nameElement.title:'';if(this.property.private||useDotNotation.test(name)){this.nameElement.title=parentPath?`${parentPath}.${name}`:name;}else if(isInteger.test(name)){this.nameElement.title=parentPath+'['+name+']';}else{this.nameElement.title=parentPath+'["'+JSON.stringify(name)+'"]';}}
_contextMenuFired(event){const contextMenu=new UI.ContextMenu(event);contextMenu.appendApplicableItems(this);if(this.property.symbol){contextMenu.appendApplicableItems(this.property.symbol);}
if(this.property.value){contextMenu.appendApplicableItems(this.property.value);}
if(!this.property.synthetic&&this.nameElement&&this.nameElement.title){const copyPathHandler=Host.InspectorFrontendHost.copyText.bind(Host.InspectorFrontendHost,this.nameElement.title);contextMenu.clipboardSection().appendItem(ls`Copy property path`,copyPathHandler);}
if(this.property.parentObject instanceof SDK.LocalJSONObject){contextMenu.viewSection().appendItem(ls`Expand recursively`,this.expandRecursively.bind(this,Number.MAX_VALUE));contextMenu.viewSection().appendItem(ls`Collapse children`,this.collapseChildren.bind(this));}
contextMenu.show();}
_startEditing(){if(this._prompt||!this.treeOutline._editable||this._readOnly){return;}
this._editableDiv=this._rowContainer.createChild('span','editable-div');let text=this.property.value.description;if(this.property.value.type==='string'&&typeof text==='string'){text='"'+text+'"';}
this._editableDiv.setTextContentTruncatedIfNeeded(text,Common.UIString('<string is too large to edit>'));const originalContent=this._editableDiv.textContent;this.setExpandable(false);this.listItemElement.classList.add('editing-sub-part');this.valueElement.classList.add('hidden');this._prompt=new ObjectPropertyPrompt();const proxyElement=this._prompt.attachAndStartEditing(this._editableDiv,this._editingCommitted.bind(this,originalContent));proxyElement.classList.add('property-prompt');this.listItemElement.getComponentSelection().selectAllChildren(this._editableDiv);proxyElement.addEventListener('keydown',this._promptKeyDown.bind(this,originalContent),false);}
_editingEnded(){this._prompt.detach();delete this._prompt;this._editableDiv.remove();this._updateExpandable();this.listItemElement.scrollLeft=0;this.listItemElement.classList.remove('editing-sub-part');this.select();}
_editingCancelled(){this.valueElement.classList.remove('hidden');this._editingEnded();}
async _editingCommitted(originalContent){const userInput=this._prompt.text();if(userInput===originalContent){this._editingCancelled();return;}
this._editingEnded();await this._applyExpression(userInput);}
_promptKeyDown(originalContent,event){if(isEnterKey(event)){event.consume();this._editingCommitted(originalContent);return;}
if(event.key==='Escape'){event.consume();this._editingCancelled();return;}}
async _applyExpression(expression){const property=SDK.RemoteObject.toCallArgument(this.property.symbol||this.property.name);expression=ObjectUI.JavaScriptREPL.wrapObjectLiteral(expression.trim());if(this.property.synthetic){let invalidate=false;if(expression){invalidate=await this.property.setSyntheticValue(expression);}
if(invalidate){const parent=this.parent;parent.invalidateChildren();parent.onpopulate();}else{this.update();}
return;}
const errorPromise=expression?this.property.parentObject.setPropertyValue(property,expression):this.property.parentObject.deleteProperty(property);const error=await errorPromise;if(error){this.update();return;}
if(!expression){this.parent.removeChild(this);}else{const parent=this.parent;parent.invalidateChildren();parent.onpopulate();}}
_onInvokeGetterClick(result){if(!result.object){return;}
this.property.value=result.object;this.property.wasThrown=result.wasThrown;this.update();this.invalidateChildren();this._updateExpandable();}
_updateExpandable(){if(this.property.value){this.setExpandable(!this.property.value.customPreview()&&this.property.value.hasChildren&&!this.property.wasThrown);}else{this.setExpandable(false);}}
path(){return this.nameElement.title;}}
class ArrayGroupingTreeElement extends UI.TreeElement{constructor(object,fromIndex,toIndex,propertyCount,linkifier){super(String.sprintf('[%d \u2026 %d]',fromIndex,toIndex),true);this.toggleOnClick=true;this._fromIndex=fromIndex;this._toIndex=toIndex;this._object=object;this._readOnly=true;this._propertyCount=propertyCount;this._linkifier=linkifier;}
static async _populateArray(treeNode,object,fromIndex,toIndex,linkifier){await ArrayGroupingTreeElement._populateRanges(treeNode,object,fromIndex,toIndex,true,linkifier);}
static async _populateRanges(treeNode,object,fromIndex,toIndex,topLevel,linkifier){const jsonValue=await object.callFunctionJSON(packRanges,[{value:fromIndex},{value:toIndex},{value:ArrayGroupingTreeElement._bucketThreshold},{value:ArrayGroupingTreeElement._sparseIterationThreshold},{value:ArrayGroupingTreeElement._getOwnPropertyNamesThreshold}]);await callback(jsonValue);function packRanges(fromIndex,toIndex,bucketThreshold,sparseIterationThreshold,getOwnPropertyNamesThreshold){let ownPropertyNames=null;const consecutiveRange=(toIndex-fromIndex>=sparseIterationThreshold)&&ArrayBuffer.isView(this);const skipGetOwnPropertyNames=consecutiveRange&&(toIndex-fromIndex>=getOwnPropertyNamesThreshold);function*arrayIndexes(object){if(toIndex-fromIndex<sparseIterationThreshold){for(let i=fromIndex;i<=toIndex;++i){if(i in object){yield i;}}}else{ownPropertyNames=ownPropertyNames||Object.getOwnPropertyNames(object);for(let i=0;i<ownPropertyNames.length;++i){const name=ownPropertyNames[i];const index=name>>>0;if((''+index)===name&&fromIndex<=index&&index<=toIndex){yield index;}}}}
let count=0;if(consecutiveRange){count=toIndex-fromIndex+1;}else{for(const i of arrayIndexes(this))
++count;}
let bucketSize=count;if(count<=bucketThreshold){bucketSize=count;}else{bucketSize=Math.pow(bucketThreshold,Math.ceil(Math.log(count)/Math.log(bucketThreshold))-1);}
const ranges=[];if(consecutiveRange){for(let i=fromIndex;i<=toIndex;i+=bucketSize){const groupStart=i;let groupEnd=groupStart+bucketSize-1;if(groupEnd>toIndex){groupEnd=toIndex;}
ranges.push([groupStart,groupEnd,groupEnd-groupStart+1]);}}else{count=0;let groupStart=-1;let groupEnd=0;for(const i of arrayIndexes(this)){if(groupStart===-1){groupStart=i;}
groupEnd=i;if(++count===bucketSize){ranges.push([groupStart,groupEnd,count]);count=0;groupStart=-1;}}
if(count>0){ranges.push([groupStart,groupEnd,count]);}}
return{ranges:ranges,skipGetOwnPropertyNames:skipGetOwnPropertyNames};}
async function callback(result){if(!result){return;}
const ranges=(result.ranges);if(ranges.length===1){await ArrayGroupingTreeElement._populateAsFragment(treeNode,object,ranges[0][0],ranges[0][1],linkifier);}else{for(let i=0;i<ranges.length;++i){const fromIndex=ranges[i][0];const toIndex=ranges[i][1];const count=ranges[i][2];if(fromIndex===toIndex){await ArrayGroupingTreeElement._populateAsFragment(treeNode,object,fromIndex,toIndex,linkifier);}else{treeNode.appendChild(new ArrayGroupingTreeElement(object,fromIndex,toIndex,count,linkifier));}}}
if(topLevel){await ArrayGroupingTreeElement._populateNonIndexProperties(treeNode,object,result.skipGetOwnPropertyNames,linkifier);}}}
static async _populateAsFragment(treeNode,object,fromIndex,toIndex,linkifier){const result=await object.callFunction(buildArrayFragment,[{value:fromIndex},{value:toIndex},{value:ArrayGroupingTreeElement._sparseIterationThreshold}]);if(!result.object||result.wasThrown){return;}
const arrayFragment=result.object;const allProperties=await arrayFragment.getAllProperties(false,true);arrayFragment.release();const properties=allProperties.properties;if(!properties){return;}
properties.sort(ObjectPropertiesSection.CompareProperties);for(let i=0;i<properties.length;++i){properties[i].parentObject=this._object;const childTreeElement=new ObjectPropertyTreeElement(properties[i],linkifier);childTreeElement._readOnly=true;treeNode.appendChild(childTreeElement);}
function buildArrayFragment(fromIndex,toIndex,sparseIterationThreshold){const result=Object.create(null);if(toIndex-fromIndex<sparseIterationThreshold){for(let i=fromIndex;i<=toIndex;++i){if(i in this){result[i]=this[i];}}}else{const ownPropertyNames=Object.getOwnPropertyNames(this);for(let i=0;i<ownPropertyNames.length;++i){const name=ownPropertyNames[i];const index=name>>>0;if(String(index)===name&&fromIndex<=index&&index<=toIndex){result[index]=this[index];}}}
return result;}}
static async _populateNonIndexProperties(treeNode,object,skipGetOwnPropertyNames,linkifier){const result=await object.callFunction(buildObjectFragment,[{value:skipGetOwnPropertyNames}]);if(!result.object||result.wasThrown){return;}
const allProperties=await result.object.getOwnProperties(true);result.object.release();if(!allProperties.properties){return;}
const properties=allProperties.properties;properties.sort(ObjectPropertiesSection.CompareProperties);for(const property of properties){property.parentObject=this._object;if(!ObjectPropertiesSection._isDisplayableProperty(property,treeNode.property)){continue;}
const childTreeElement=new ObjectPropertyTreeElement(property,linkifier);childTreeElement._readOnly=true;treeNode.appendChild(childTreeElement);}
function buildObjectFragment(skipGetOwnPropertyNames){const result={__proto__:this.__proto__};if(skipGetOwnPropertyNames){return result;}
const names=Object.getOwnPropertyNames(this);for(let i=0;i<names.length;++i){const name=names[i];if(String(name>>>0)===name&&name>>>0!==0xffffffff){continue;}
const descriptor=Object.getOwnPropertyDescriptor(this,name);if(descriptor){Object.defineProperty(result,name,descriptor);}}
return result;}}
async onpopulate(){if(this._propertyCount>=ArrayGroupingTreeElement._bucketThreshold){await ArrayGroupingTreeElement._populateRanges(this,this._object,this._fromIndex,this._toIndex,false,this._linkifier);return;}
await ArrayGroupingTreeElement._populateAsFragment(this,this._object,this._fromIndex,this._toIndex,this._linkifier);}
onattach(){this.listItemElement.classList.add('object-properties-section-name');}}
ArrayGroupingTreeElement._bucketThreshold=100;ArrayGroupingTreeElement._sparseIterationThreshold=250000;ArrayGroupingTreeElement._getOwnPropertyNamesThreshold=500000;export class ObjectPropertyPrompt extends UI.TextPrompt{constructor(){super();this.initialize(ObjectUI.javaScriptAutocomplete.completionsForTextInCurrentContext.bind(ObjectUI.javaScriptAutocomplete));}}
export class ObjectPropertiesSectionsTreeExpandController{constructor(treeOutline){this._expandedProperties=new Set();treeOutline.addEventListener(UI.TreeOutline.Events.ElementAttached,this._elementAttached,this);treeOutline.addEventListener(UI.TreeOutline.Events.ElementExpanded,this._elementExpanded,this);treeOutline.addEventListener(UI.TreeOutline.Events.ElementCollapsed,this._elementCollapsed,this);}
watchSection(id,section){section[ObjectPropertiesSectionsTreeExpandController._treeOutlineId]=id;if(this._expandedProperties.has(id)){section.expand();}}
stopWatchSectionsWithId(id){for(const property of this._expandedProperties){if(property.startsWith(id+':')){this._expandedProperties.delete(property);}}}
_elementAttached(event){const element=(event.data);if(element.isExpandable()&&this._expandedProperties.has(this._propertyPath(element))){element.expand();}}
_elementExpanded(event){const element=(event.data);this._expandedProperties.add(this._propertyPath(element));}
_elementCollapsed(event){const element=(event.data);this._expandedProperties.delete(this._propertyPath(element));}
_propertyPath(treeElement){const cachedPropertyPath=treeElement[ObjectPropertiesSectionsTreeExpandController._cachedPathSymbol];if(cachedPropertyPath){return cachedPropertyPath;}
let current=treeElement;let sectionRoot=current;const rootElement=treeElement.treeOutline.rootElement();let result;while(current!==rootElement){let currentName='';if(current.property){currentName=current.property.name;}else{currentName=typeof current.title==='string'?current.title:current.title.textContent;}
result=currentName+(result?'.'+result:'');sectionRoot=current;current=current.parent;}
const treeOutlineId=sectionRoot[ObjectPropertiesSectionsTreeExpandController._treeOutlineId];result=treeOutlineId+(result?':'+result:'');treeElement[ObjectPropertiesSectionsTreeExpandController._cachedPathSymbol]=result;return result;}}
ObjectPropertiesSectionsTreeExpandController._cachedPathSymbol=Symbol('cachedPath');ObjectPropertiesSectionsTreeExpandController._treeOutlineId=Symbol('treeOutlineId');export class Renderer{render(object,options){if(!(object instanceof SDK.RemoteObject)){return Promise.reject(new Error('Can\'t render '+object));}
options=options||{};const title=options.title;const section=new ObjectPropertiesSection(object,title);if(!title){section.titleLessMode();}
section.editable=!!options.editable;return Promise.resolve(({node:section.element,tree:section}));}}
self.ObjectUI=self.ObjectUI||{};ObjectUI=ObjectUI||{};ObjectUI.ArrayGroupingTreeElement=ArrayGroupingTreeElement;ObjectUI.ObjectPropertiesSection=ObjectPropertiesSection;ObjectUI.ObjectPropertiesSection._maxRenderableStringLength=_maxRenderableStringLength;ObjectUI.ObjectPropertiesSectionsTreeOutline=ObjectPropertiesSectionsTreeOutline;ObjectUI.ObjectPropertiesSection.RootElement=RootElement;ObjectUI.ObjectPropertiesSection.Renderer=Renderer;ObjectUI.ObjectPropertyTreeElement=ObjectPropertyTreeElement;ObjectUI.ObjectPropertyPrompt=ObjectPropertyPrompt;ObjectUI.ObjectPropertiesSectionsTreeExpandController=ObjectPropertiesSectionsTreeExpandController;ObjectUI.ObjectPropertiesSectionsTreeOutlineOptions;export default class ObjectPopoverHelper{constructor(linkifier,resultHighlightedAsDOM){this._linkifier=linkifier;this._resultHighlightedAsDOM=resultHighlightedAsDOM;}
dispose(){if(this._resultHighlightedAsDOM){SDK.OverlayModel.hideDOMNodeHighlight();}
if(this._linkifier){this._linkifier.dispose();}}
static async buildObjectPopover(result,popover){const description=result.description.trimEndWithMaxLength(MaxPopoverTextLength);let popoverContentElement=null;if(result.type==='object'){let linkifier=null;let resultHighlightedAsDOM=false;if(result.subtype==='node'){SDK.OverlayModel.highlightObjectAsDOMNode(result);resultHighlightedAsDOM=true;}
if(result.customPreview()){const customPreviewComponent=new ObjectUI.CustomPreviewComponent(result);customPreviewComponent.expandIfPossible();popoverContentElement=customPreviewComponent.element;}else{popoverContentElement=createElementWithClass('div','object-popover-content');UI.appendStyle(popoverContentElement,'object_ui/objectPopover.css');const titleElement=popoverContentElement.createChild('div','monospace object-popover-title');titleElement.createChild('span').textContent=description;linkifier=new Components.Linkifier();const section=new ObjectUI.ObjectPropertiesSection(result,'',linkifier,undefined,undefined,undefined,true);section.element.classList.add('object-popover-tree');section.titleLessMode();popoverContentElement.appendChild(section.element);}
popover.setMaxContentSize(new UI.Size(300,250));popover.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactSize);popover.contentElement.appendChild(popoverContentElement);return new ObjectPopoverHelper(linkifier,resultHighlightedAsDOM);}
popoverContentElement=createElement('span');UI.appendStyle(popoverContentElement,'object_ui/objectValue.css');UI.appendStyle(popoverContentElement,'object_ui/objectPopover.css');const valueElement=popoverContentElement.createChild('span','monospace object-value-'+result.type);valueElement.style.whiteSpace='pre';if(result.type==='string'){valueElement.createTextChildren(`"${description}"`);}else if(result.type!=='function'){valueElement.textContent=description;}
if(result.type!=='function'){popover.contentElement.appendChild(popoverContentElement);return new ObjectPopoverHelper(null,false);}
ObjectUI.ObjectPropertiesSection.formatObjectAsFunction(result,valueElement,true);const response=await result.debuggerModel().functionDetailsPromise(result);if(!response){return null;}
const container=createElementWithClass('div','object-popover-container');const title=container.createChild('div','function-popover-title source-code');const functionName=title.createChild('span','function-name');functionName.textContent=UI.beautifyFunctionName(response.functionName);const rawLocation=response.location;const linkContainer=title.createChild('div','function-title-link-container');const sourceURL=rawLocation&&rawLocation.script()&&rawLocation.script().sourceURL;let linkifier=null;if(sourceURL){linkifier=new Components.Linkifier();linkContainer.appendChild(linkifier.linkifyRawLocation((rawLocation),sourceURL));}
container.appendChild(popoverContentElement);popover.contentElement.appendChild(container);return new ObjectPopoverHelper(linkifier,false);}}
const MaxPopoverTextLength=10000;self.ObjectUI=self.ObjectUI||{};ObjectUI=ObjectUI||{};ObjectUI.ObjectPopoverHelper=ObjectPopoverHelper;export default class JavaScriptREPL{static wrapObjectLiteral(code){if(!(/^\s*\{/.test(code)&&/\}\s*$/.test(code))){return code;}
const parse=(async()=>0).constructor;try{parse('return '+code+';');const wrappedCode='('+code+')';parse(wrappedCode);return wrappedCode;}catch(e){return code;}}
static async preprocessExpression(text){text=JavaScriptREPL.wrapObjectLiteral(text);let preprocessed=false;if(text.indexOf('await')!==-1){const preprocessedText=await Formatter.formatterWorkerPool().preprocessTopLevelAwaitExpressions(text);preprocessed=!!preprocessedText;text=preprocessedText||text;}
return{text,preprocessed};}
static async evaluateAndBuildPreview(text,throwOnSideEffect,timeout,allowErrors,objectGroup){const executionContext=UI.context.flavor(SDK.ExecutionContext);const isTextLong=text.length>ObjectUI.JavaScriptREPL._MaxLengthForEvaluation;if(!text||!executionContext||(throwOnSideEffect&&isTextLong)){return{preview:createDocumentFragment(),result:null};}
const wrappedResult=await JavaScriptREPL.preprocessExpression(text);const options={expression:wrappedResult.text,generatePreview:true,includeCommandLineAPI:true,throwOnSideEffect:throwOnSideEffect,timeout:timeout,objectGroup:objectGroup,disableBreaks:true};const result=await executionContext.evaluate(options,false,wrappedResult.preprocessed);const preview=JavaScriptREPL._buildEvaluationPreview(result,allowErrors);return{preview,result};}
static _buildEvaluationPreview(result,allowErrors){const fragment=createDocumentFragment();if(result.error){return fragment;}
if(result.exceptionDetails&&result.exceptionDetails.exception&&result.exceptionDetails.exception.description){const exception=result.exceptionDetails.exception.description;if(exception.startsWith('TypeError: ')||allowErrors){fragment.createChild('span').textContent=result.exceptionDetails.text+' '+exception;}
return fragment;}
const formatter=new ObjectUI.RemoteObjectPreviewFormatter();const{preview,type,subtype,description}=result.object;if(preview&&type==='object'&&subtype!=='node'){formatter.appendObjectPreview(fragment,preview,false);}else{const nonObjectPreview=formatter.renderPropertyPreview(type,subtype,description.trimEndWithMaxLength(400));fragment.appendChild(nonObjectPreview);}
return fragment;}}
export const _MaxLengthForEvaluation=2000;self.ObjectUI=self.ObjectUI||{};ObjectUI=ObjectUI||{};ObjectUI.JavaScriptREPL=JavaScriptREPL;ObjectUI.JavaScriptREPL._MaxLengthForEvaluation=_MaxLengthForEvaluation;export default class JavaScriptAutocomplete{constructor(){this._expressionCache=new Map();SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.CommandEvaluated,this._clearCache,this);UI.context.addFlavorChangeListener(SDK.ExecutionContext,this._clearCache,this);SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerResumed,this._clearCache,this);SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerPaused,this._clearCache,this);}
_clearCache(){this._expressionCache.clear();}
async completionsForTextInCurrentContext(fullText,query,force){const trimmedText=fullText.trim();const[mapCompletions,expressionCompletions]=await Promise.all([this._mapCompletions(trimmedText,query),this._completionsForExpression(trimmedText,query,force)]);return mapCompletions.concat(expressionCompletions);}
async argumentsHint(fullText){const functionCall=await Formatter.formatterWorkerPool().findLastFunctionCall(fullText);if(!functionCall){return null;}
const executionContext=UI.context.flavor(SDK.ExecutionContext);if(!executionContext){return null;}
const result=await executionContext.evaluate({expression:functionCall.baseExpression,objectGroup:'argumentsHint',includeCommandLineAPI:true,silent:true,returnByValue:false,generatePreview:false,throwOnSideEffect:functionCall.possibleSideEffects,timeout:functionCall.possibleSideEffects?500:undefined},false,false);if(!result||result.exceptionDetails||!result.object||result.object.type!=='function'){executionContext.runtimeModel.releaseObjectGroup('argumentsHint');return null;}
const args=await this._argumentsForFunction(result.object,async()=>{const result=await executionContext.evaluate({expression:functionCall.receiver,objectGroup:'argumentsHint',includeCommandLineAPI:true,silent:true,returnByValue:false,generatePreview:false,throwOnSideEffect:functionCall.possibleSideEffects,timeout:functionCall.possibleSideEffects?500:undefined},false,false);return(result&&!result.exceptionDetails&&result.object)?result.object:null;},functionCall.functionName);executionContext.runtimeModel.releaseObjectGroup('argumentsHint');if(!args.length||(args.length===1&&!args[0].length)){return null;}
return{args,argumentIndex:functionCall.argumentIndex};}
async _argumentsForFunction(functionObject,receiverObjGetter,parsedFunctionName){const description=functionObject.description;if(!description.endsWith('{ [native code] }')){return[await Formatter.formatterWorkerPool().argumentsList(description)];}
if(description==='function () { [native code] }'){const properties=await functionObject.getOwnProperties(false);const internalProperties=properties.internalProperties||[];const targetProperty=internalProperties.find(property=>property.name==='[[TargetFunction]]');const argsProperty=internalProperties.find(property=>property.name==='[[BoundArgs]]');const thisProperty=internalProperties.find(property=>property.name==='[[BoundThis]]');if(thisProperty&&targetProperty&&argsProperty){const originalSignatures=await this._argumentsForFunction(targetProperty.value,()=>Promise.resolve(thisProperty.value));const boundArgsLength=SDK.RemoteObject.arrayLength(argsProperty.value);const clippedArgs=[];for(const signature of originalSignatures){const restIndex=signature.slice(0,boundArgsLength).findIndex(arg=>arg.startsWith('...'));if(restIndex!==-1){clippedArgs.push(signature.slice(restIndex));}else{clippedArgs.push(signature.slice(boundArgsLength));}}
return clippedArgs;}}
const javaScriptMetadata=await self.runtime.extension(Common.JavaScriptMetadata).instance();const name=/^function ([^(]*)\(/.exec(description)[1]||parsedFunctionName;if(!name){return[];}
const uniqueSignatures=javaScriptMetadata.signaturesForNativeFunction(name);if(uniqueSignatures){return uniqueSignatures;}
const receiverObj=await receiverObjGetter();const className=receiverObj.className;if(javaScriptMetadata.signaturesForInstanceMethod(name,className)){return javaScriptMetadata.signaturesForInstanceMethod(name,className);}
if(receiverObj.type==='function'&&receiverObj.description.endsWith('{ [native code] }')){const receiverName=/^function ([^(]*)\(/.exec(receiverObj.description)[1];const staticSignatures=javaScriptMetadata.signaturesForStaticMethod(name,receiverName);if(staticSignatures){return staticSignatures;}}
let protoNames;if(receiverObj.type==='number'){protoNames=['Number','Object'];}else if(receiverObj.type==='string'){protoNames=['String','Object'];}else if(receiverObj.type==='symbol'){protoNames=['Symbol','Object'];}else if(receiverObj.type==='bigint'){protoNames=['BigInt','Object'];}else if(receiverObj.type==='boolean'){protoNames=['Boolean','Object'];}else if(receiverObj.type==='undefined'||receiverObj.subtype==='null'){protoNames=[];}else{protoNames=await receiverObj.callFunctionJSON(function(){const result=[];for(let object=this;object;object=Object.getPrototypeOf(object)){if(typeof object==='object'&&object.constructor&&object.constructor.name){result[result.length]=object.constructor.name;}}
return result;},[]);}
for(const proto of protoNames){const instanceSignatures=javaScriptMetadata.signaturesForInstanceMethod(name,proto);if(instanceSignatures){return instanceSignatures;}}
return[];}
async _mapCompletions(text,query){const mapMatch=text.match(/\.\s*(get|set|delete)\s*\(\s*$/);const executionContext=UI.context.flavor(SDK.ExecutionContext);if(!executionContext||!mapMatch){return[];}
const expression=await Formatter.formatterWorkerPool().findLastExpression(text.substring(0,mapMatch.index));if(!expression){return[];}
const result=await executionContext.evaluate({expression:expression.baseExpression,objectGroup:'mapCompletion',includeCommandLineAPI:true,silent:true,returnByValue:false,generatePreview:false,throwOnSideEffect:expression.possibleSideEffects,timeout:expression.possibleSideEffects?500:undefined},false,false);if(result.error||!!result.exceptionDetails||result.object.subtype!=='map'){return[];}
const properties=await result.object.getOwnProperties(false);const internalProperties=properties.internalProperties||[];const entriesProperty=internalProperties.find(property=>property.name==='[[Entries]]');if(!entriesProperty){return[];}
const keysObj=await entriesProperty.value.callFunctionJSON(getEntries);executionContext.runtimeModel.releaseObjectGroup('mapCompletion');return gotKeys(Object.keys(keysObj));function getEntries(){const result={__proto__:null};for(let i=0;i<this.length;i++){if(typeof this[i].key==='string'){result[this[i].key]=true;}}
return result;}
function gotKeys(rawKeys){const caseSensitivePrefix=[];const caseInsensitivePrefix=[];const caseSensitiveAnywhere=[];const caseInsensitiveAnywhere=[];let quoteChar='"';if(query.startsWith('\'')){quoteChar='\'';}
let endChar=')';if(mapMatch[0].indexOf('set')!==-1){endChar=', ';}
const sorter=rawKeys.length<1000?String.naturalOrderComparator:undefined;const keys=rawKeys.sort(sorter).map(key=>quoteChar+key+quoteChar);for(const key of keys){if(key.length<query.length){continue;}
if(query.length&&key.toLowerCase().indexOf(query.toLowerCase())===-1){continue;}
const title=key.split('\n').join('\\n');const text=title+endChar;if(key.startsWith(query)){caseSensitivePrefix.push({text:text,title:title,priority:4});}else if(key.toLowerCase().startsWith(query.toLowerCase())){caseInsensitivePrefix.push({text:text,title:title,priority:3});}else if(key.indexOf(query)!==-1){caseSensitiveAnywhere.push({text:text,title:title,priority:2});}else{caseInsensitiveAnywhere.push({text:text,title:title,priority:1});}}
const suggestions=caseSensitivePrefix.concat(caseInsensitivePrefix,caseSensitiveAnywhere,caseInsensitiveAnywhere);if(suggestions.length){suggestions[0].subtitle=Common.UIString('Keys');}
return suggestions;}}
async _completionsForExpression(fullText,query,force){const executionContext=UI.context.flavor(SDK.ExecutionContext);if(!executionContext){return[];}
let expression;if(fullText.endsWith('.')||fullText.endsWith('[')){expression=await Formatter.formatterWorkerPool().findLastExpression(fullText.substring(0,fullText.length-1));}
if(!expression){if(fullText.endsWith('.')){return[];}
expression={baseExpression:'',possibleSideEffects:false};}
const needsNoSideEffects=expression.possibleSideEffects;const expressionString=expression.baseExpression;const dotNotation=fullText.endsWith('.');const bracketNotation=!!expressionString&&fullText.endsWith('[');if((expressionString&&!isNaN(expressionString))||(!expressionString&&query&&!isNaN(query))){return[];}
if(!query&&!expressionString&&!force){return[];}
const selectedFrame=executionContext.debuggerModel.selectedCallFrame();let completionGroups;const TEN_SECONDS=10000;let cache=this._expressionCache.get(expressionString);if(cache&&cache.date+TEN_SECONDS>Date.now()){completionGroups=await cache.value;}else if(!expressionString&&selectedFrame){cache={date:Date.now(),value:completionsOnPause(selectedFrame)};this._expressionCache.set(expressionString,cache);completionGroups=await cache.value;}else{const resultPromise=executionContext.evaluate({expression:expressionString,objectGroup:'completion',includeCommandLineAPI:true,silent:true,returnByValue:false,generatePreview:false,throwOnSideEffect:needsNoSideEffects,timeout:needsNoSideEffects?500:undefined},false,false);cache={date:Date.now(),value:resultPromise.then(result=>completionsOnGlobal.call(this,result))};this._expressionCache.set(expressionString,cache);completionGroups=await cache.value;}
return this._receivedPropertyNames(completionGroups.slice(0),dotNotation,bracketNotation,expressionString,query);async function completionsOnGlobal(result){if(result.error||!!result.exceptionDetails||!result.object){return[];}
let object=result.object;while(object&&object.type==='object'&&object.subtype==='proxy'){const properties=await object.getOwnProperties(false);const internalProperties=properties.internalProperties||[];const target=internalProperties.find(property=>property.name==='[[Target]]');object=target?target.value:null;}
if(!object){return[];}
let completions=[];if(object.type==='object'||object.type==='function'){completions=await object.callFunctionJSON(getCompletions,[SDK.RemoteObject.toCallArgument(object.subtype)])||[];}else if(object.type==='string'||object.type==='number'||object.type==='boolean'||object.type==='bigint'){const evaluateResult=await executionContext.evaluate({expression:'('+getCompletions+')("'+object.type+'")',objectGroup:'completion',includeCommandLineAPI:false,silent:true,returnByValue:true,generatePreview:false},false,false);if(evaluateResult.object&&!evaluateResult.exceptionDetails){completions=(evaluateResult.object.value)||[];}}
executionContext.runtimeModel.releaseObjectGroup('completion');if(!expressionString){const globalNames=await executionContext.globalLexicalScopeNames();if(completions.length){completions[0].items=completions[0].items.concat(globalNames);}else{completions.push({items:globalNames.sort(),title:Common.UIString('Lexical scope variables')});}}
for(const group of completions){for(let i=0;i<group.items.length;i++){group.items[i]=group.items[i].replace(/\n/g,'\\n');}
group.items.sort(group.items.length<1000?this._itemComparator:undefined);}
return completions;function getCompletions(type){let object;if(type==='string'){object=new String('');}else if(type==='number'){object=new Number(0);}
else if(type==='bigint'){object=Object(BigInt(0));}else if(type==='boolean'){object=new Boolean(false);}else{object=this;}
const result=[];try{for(let o=object;o;o=Object.getPrototypeOf(o)){if((type==='array'||type==='typedarray')&&o===object&&o.length>9999){continue;}
const group={items:[],__proto__:null};try{if(typeof o==='object'&&Object.prototype.hasOwnProperty.call(o,'constructor')&&o.constructor&&o.constructor.name){group.title=o.constructor.name;}}catch(ee){}
result[result.length]=group;const names=Object.getOwnPropertyNames(o);const isArray=Array.isArray(o);for(let i=0;i<names.length&&group.items.length<10000;++i){if(isArray&&/^[0-9]/.test(names[i])){continue;}
group.items[group.items.length]=names[i];}}}catch(e){}
return result;}}
async function completionsOnPause(callFrame){const result=[{items:['this']}];const scopeChain=callFrame.scopeChain();const groupPromises=[];for(const scope of scopeChain){groupPromises.push(scope.object().getAllProperties(false,false).then(result=>({properties:result.properties,name:scope.name()})));}
const fullScopes=await Promise.all(groupPromises);executionContext.runtimeModel.releaseObjectGroup('completion');for(const scope of fullScopes){result.push({title:scope.name,items:scope.properties.map(property=>property.name).sort()});}
return result;}}
_receivedPropertyNames(propertyGroups,dotNotation,bracketNotation,expressionString,query){if(!propertyGroups){return[];}
const includeCommandLineAPI=(!dotNotation&&!bracketNotation);if(includeCommandLineAPI){const commandLineAPI=['dir','dirxml','keys','values','profile','profileEnd','monitorEvents','unmonitorEvents','inspect','copy','clear','getEventListeners','debug','undebug','monitor','unmonitor','table','queryObjects','$','$$','$x','$0','$_'];propertyGroups.push({items:commandLineAPI});}
return this._completionsForQuery(dotNotation,bracketNotation,expressionString,query,propertyGroups);}
_completionsForQuery(dotNotation,bracketNotation,expressionString,query,propertyGroups){const quoteUsed=(bracketNotation&&query.startsWith('\''))?'\'':'"';if(!expressionString){const keywords=['await','break','case','catch','class','const','continue','debugger','default','delete','do','else','exports','extends','finally','for','function','if','import','in','instanceof','new','return','super','switch','this','throw','try','typeof','var','void','while','with','yield','let','static','async','of'];propertyGroups.push({title:ls`keywords`,items:keywords.sort()});}
const allProperties=new Set();let result=[];let lastGroupTitle;const regex=/^[a-zA-Z_$\u008F-\uFFFF][a-zA-Z0-9_$\u008F-\uFFFF]*$/;const lowerCaseQuery=query.toLowerCase();for(const group of propertyGroups){const caseSensitivePrefix=[];const caseInsensitivePrefix=[];const caseSensitiveAnywhere=[];const caseInsensitiveAnywhere=[];for(let i=0;i<group.items.length;i++){let property=group.items[i];if(!bracketNotation&&!regex.test(property)){continue;}
if(bracketNotation){if(!/^[0-9]+$/.test(property)){property=quoteUsed+property.escapeCharacters(quoteUsed+'\\')+quoteUsed;}
property+=']';}
if(allProperties.has(property)){continue;}
if(property.length<query.length){continue;}
const lowerCaseProperty=property.toLowerCase();if(query.length&&lowerCaseProperty.indexOf(lowerCaseQuery)===-1){continue;}
allProperties.add(property);if(property.startsWith(query)){caseSensitivePrefix.push({text:property,priority:property===query?5:4});}else if(lowerCaseProperty.startsWith(lowerCaseQuery)){caseInsensitivePrefix.push({text:property,priority:3});}else if(property.indexOf(query)!==-1){caseSensitiveAnywhere.push({text:property,priority:2});}else{caseInsensitiveAnywhere.push({text:property,priority:1});}}
const structuredGroup=caseSensitivePrefix.concat(caseInsensitivePrefix,caseSensitiveAnywhere,caseInsensitiveAnywhere);if(structuredGroup.length&&group.title!==lastGroupTitle){structuredGroup[0].subtitle=group.title;lastGroupTitle=group.title;}
result=result.concat(structuredGroup);result.forEach(item=>{if(item.text.endsWith(']')){item.title=item.text.substring(0,item.text.length-1);}});}
return result;}
_itemComparator(a,b){const aStartsWithUnderscore=a.startsWith('_');const bStartsWithUnderscore=b.startsWith('_');if(aStartsWithUnderscore&&!bStartsWithUnderscore){return 1;}
if(bStartsWithUnderscore&&!aStartsWithUnderscore){return-1;}
return String.naturalOrderComparator(a,b);}
static async isExpressionComplete(expression){const currentExecutionContext=UI.context.flavor(SDK.ExecutionContext);if(!currentExecutionContext){return true;}
const result=await currentExecutionContext.runtimeModel.compileScript(expression,'',false,currentExecutionContext.id);if(!result.exceptionDetails){return true;}
const description=result.exceptionDetails.exception.description;return!description.startsWith('SyntaxError: Unexpected end of input')&&!description.startsWith('SyntaxError: Unterminated template literal');}}
export class JavaScriptAutocompleteConfig{constructor(editor){this._editor=editor;}
static createConfigForEditor(editor){const autocomplete=new JavaScriptAutocompleteConfig(editor);return{substituteRangeCallback:autocomplete._substituteRange.bind(autocomplete),suggestionsCallback:autocomplete._suggestionsCallback.bind(autocomplete),tooltipCallback:autocomplete._tooltipCallback.bind(autocomplete),};}
_substituteRange(lineNumber,columnNumber){const token=this._editor.tokenAtTextPosition(lineNumber,columnNumber);if(token&&token.type==='js-string'){return new TextUtils.TextRange(lineNumber,token.startColumn,lineNumber,columnNumber);}
const lineText=this._editor.line(lineNumber);let index;for(index=columnNumber-1;index>=0;index--){if(' =:[({;,!+-*/&|^<>.\t\r\n'.indexOf(lineText.charAt(index))!==-1){break;}}
return new TextUtils.TextRange(lineNumber,index+1,lineNumber,columnNumber);}
async _suggestionsCallback(queryRange,substituteRange,force){const query=this._editor.text(queryRange);const before=this._editor.text(new TextUtils.TextRange(0,0,queryRange.startLine,queryRange.startColumn));const token=this._editor.tokenAtTextPosition(substituteRange.startLine,substituteRange.startColumn);if(token){const excludedTokens=new Set(['js-comment','js-string-2','js-def']);const trimmedBefore=before.trim();if(!trimmedBefore.endsWith('[')&&!trimmedBefore.match(/\.\s*(get|set|delete)\s*\(\s*$/)){excludedTokens.add('js-string');}
if(!trimmedBefore.endsWith('.')){excludedTokens.add('js-property');}
if(excludedTokens.has(token.type)){return[];}}
const queryAndAfter=this._editor.line(queryRange.startLine).substring(queryRange.startColumn);const words=await ObjectUI.javaScriptAutocomplete.completionsForTextInCurrentContext(before,query,force);if(!force&&queryAndAfter&&queryAndAfter!==query&&words.some(word=>queryAndAfter.startsWith(word.text)&&query.length!==word.text.length)){return[];}
return words;}
async _tooltipCallback(lineNumber,columnNumber){const before=this._editor.text(new TextUtils.TextRange(0,0,lineNumber,columnNumber));const result=await ObjectUI.javaScriptAutocomplete.argumentsHint(before);if(!result){return null;}
const argumentIndex=result.argumentIndex;const tooltip=createElement('div');for(const args of result.args){const argumentsElement=createElement('span');for(let i=0;i<args.length;i++){if(i===argumentIndex||(i<argumentIndex&&args[i].startsWith('...'))){argumentsElement.appendChild(UI.html`<b>${args[i]}</b>`);}else{argumentsElement.createTextChild(args[i]);}
if(i<args.length-1){argumentsElement.createTextChild(', ');}}
tooltip.appendChild(UI.html`<div class='source-code'>\u0192(${argumentsElement})</div>`);}
return tooltip;}}
self.ObjectUI=self.ObjectUI||{};ObjectUI=ObjectUI||{};ObjectUI.JavaScriptAutocomplete=JavaScriptAutocomplete;ObjectUI.JavaScriptAutocompleteConfig=JavaScriptAutocompleteConfig;ObjectUI.javaScriptAutocomplete=new JavaScriptAutocomplete();ObjectUI.JavaScriptAutocomplete.CompletionGroup;class CustomPreviewSection{constructor(object){this._sectionElement=createElementWithClass('span','custom-expandable-section');this._object=object;this._expanded=false;this._cachedContent=null;const customPreview=object.customPreview();let headerJSON;try{headerJSON=JSON.parse(customPreview.header);}catch(e){Common.console.error('Broken formatter: header is invalid json '+e);return;}
this._header=this._renderJSONMLTag(headerJSON);if(this._header.nodeType===Node.TEXT_NODE){Common.console.error('Broken formatter: header should be an element node.');return;}
if(customPreview.hasBody||customPreview.bodyGetterId){this._header.classList.add('custom-expandable-section-header');this._header.addEventListener('click',this._onClick.bind(this),false);this._expandIcon=UI.Icon.create('smallicon-triangle-right','custom-expand-icon');this._header.insertBefore(this._expandIcon,this._header.firstChild);}
this._sectionElement.appendChild(this._header);}
element(){return this._sectionElement;}
_renderJSONMLTag(jsonML){if(!Array.isArray(jsonML)){return createTextNode(jsonML+'');}
const array=(jsonML);return array[0]==='object'?this._layoutObjectTag(array):this._renderElement(array);}
_renderElement(object){const tagName=object.shift();if(!CustomPreviewSection._tagsWhiteList.has(tagName)){Common.console.error('Broken formatter: element '+tagName+' is not allowed!');return createElement('span');}
const element=createElement((tagName));if((typeof object[0]==='object')&&!Array.isArray(object[0])){const attributes=object.shift();for(const key in attributes){const value=attributes[key];if((key!=='style')||(typeof value!=='string')){continue;}
element.setAttribute(key,value);}}
this._appendJsonMLTags(element,object);return element;}
_layoutObjectTag(objectTag){objectTag.shift();const attributes=objectTag.shift();const remoteObject=this._object.runtimeModel().createRemoteObject((attributes));if(remoteObject.customPreview()){return(new CustomPreviewSection(remoteObject)).element();}
const sectionElement=ObjectUI.ObjectPropertiesSection.defaultObjectPresentation(remoteObject);sectionElement.classList.toggle('custom-expandable-section-standard-section',remoteObject.hasChildren);return sectionElement;}
_appendJsonMLTags(parentElement,jsonMLTags){for(let i=0;i<jsonMLTags.length;++i){parentElement.appendChild(this._renderJSONMLTag(jsonMLTags[i]));}}
_onClick(event){event.consume(true);if(this._cachedContent){this._toggleExpand();}else{this._loadBody();}}
_toggleExpand(){this._expanded=!this._expanded;this._header.classList.toggle('expanded',this._expanded);this._cachedContent.classList.toggle('hidden',!this._expanded);if(this._expanded){this._expandIcon.setIconType('smallicon-triangle-down');}else{this._expandIcon.setIconType('smallicon-triangle-right');}}
_loadBody(){function load(bindRemoteObject,formatter,config){function substituteObjectTagsInCustomPreview(jsonMLObject){if(!jsonMLObject||(typeof jsonMLObject!=='object')||(typeof jsonMLObject.splice!=='function')){return;}
const obj=jsonMLObject.length;if(!(typeof obj==='number'&&obj>>>0===obj&&(obj>0||1/obj>0))){return;}
let startIndex=1;if(jsonMLObject[0]==='object'){const attributes=jsonMLObject[1];const originObject=attributes['object'];const config=attributes['config'];if(typeof originObject==='undefined'){throw'Illegal format: obligatory attribute "object" isn\'t specified';}
jsonMLObject[1]=bindRemoteObject(originObject,config);startIndex=2;}
for(let i=startIndex;i<jsonMLObject.length;++i){substituteObjectTagsInCustomPreview(jsonMLObject[i]);}}
try{const body=formatter.body(this,config);substituteObjectTagsInCustomPreview(body);return body;}catch(e){console.error('Custom Formatter Failed: '+e);return null;}}
const customPreview=this._object.customPreview();if(customPreview.bindRemoteObjectFunctionId&&customPreview.formatterObjectId){const args=[{objectId:customPreview.bindRemoteObjectFunctionId},{objectId:customPreview.formatterObjectId}];if(customPreview.configObjectId){args.push({objectId:customPreview.configObjectId});}
this._object.callFunctionJSON(load,args).then(onBodyLoaded.bind(this));}else if(customPreview.bodyGetterId){this._object.callFunctionJSON(bodyGetter=>bodyGetter(),[{objectId:customPreview.bodyGetterId}]).then(onBodyLoaded.bind(this));}
function onBodyLoaded(bodyJsonML){if(!bodyJsonML){return;}
this._cachedContent=this._renderJSONMLTag(bodyJsonML);this._sectionElement.appendChild(this._cachedContent);this._toggleExpand();}}}
export default class CustomPreviewComponent{constructor(object){this._object=object;this._customPreviewSection=new CustomPreviewSection(object);this.element=createElementWithClass('span','source-code');const shadowRoot=UI.createShadowRootWithCoreStyles(this.element,'object_ui/customPreviewComponent.css');this.element.addEventListener('contextmenu',this._contextMenuEventFired.bind(this),false);shadowRoot.appendChild(this._customPreviewSection.element());}
expandIfPossible(){if((this._object.customPreview().hasBody||this._object.customPreview().bodyGetterId)&&this._customPreviewSection){this._customPreviewSection._loadBody();}}
_contextMenuEventFired(event){const contextMenu=new UI.ContextMenu(event);if(this._customPreviewSection){contextMenu.revealSection().appendItem(Common.UIString('Show as JavaScript object'),this._disassemble.bind(this));}
contextMenu.appendApplicableItems(this._object);contextMenu.show();}
_disassemble(){this.element.shadowRoot.textContent='';this._customPreviewSection=null;this.element.shadowRoot.appendChild(ObjectUI.ObjectPropertiesSection.defaultObjectPresentation(this._object));}}
CustomPreviewSection._tagsWhiteList=new Set(['span','div','ol','li','table','tr','td']);self.ObjectUI=self.ObjectUI||{};ObjectUI=ObjectUI||{};ObjectUI.CustomPreviewComponent=CustomPreviewComponent;import*as CookiesTable from'./CookiesTable.js';export{CookiesTable,};export class CookiesTable extends UI.VBox{constructor(renderInline,saveCallback,refreshCallback,selectedCallback,deleteCallback){super();this._saveCallback=saveCallback;this._refreshCallback=refreshCallback;this._deleteCallback=deleteCallback;const editable=!!saveCallback;const columns=([{id:SDK.Cookie.Attributes.Name,title:ls`Name`,sortable:true,disclosure:editable,sort:DataGrid.DataGrid.Order.Ascending,longText:true,weight:24,editable:editable},{id:SDK.Cookie.Attributes.Value,title:ls`Value`,sortable:true,longText:true,weight:34,editable:editable},{id:SDK.Cookie.Attributes.Domain,title:ls`Domain`,sortable:true,weight:7,editable:editable},{id:SDK.Cookie.Attributes.Path,title:ls`Path`,sortable:true,weight:7,editable:editable},{id:SDK.Cookie.Attributes.Expires,title:ls`Expires / Max-Age`,sortable:true,weight:7,editable:editable},{id:SDK.Cookie.Attributes.Size,title:ls`Size`,sortable:true,align:DataGrid.DataGrid.Align.Right,weight:7},{id:SDK.Cookie.Attributes.HttpOnly,title:ls`HttpOnly`,sortable:true,align:DataGrid.DataGrid.Align.Center,weight:7},{id:SDK.Cookie.Attributes.Secure,title:ls`Secure`,sortable:true,align:DataGrid.DataGrid.Align.Center,weight:7},{id:SDK.Cookie.Attributes.SameSite,title:ls`SameSite`,sortable:true,weight:7}]);if(editable){this._dataGrid=new DataGrid.DataGrid(columns,this._onUpdateCookie.bind(this),this._onDeleteCookie.bind(this),refreshCallback);}else{this._dataGrid=new DataGrid.DataGrid(columns);}
this._dataGrid.setStriped(true);this._dataGrid.setName('cookiesTable');this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._rebuildTable,this);if(renderInline){this._dataGrid.renderInline();}
if(selectedCallback){this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,selectedCallback,this);}
this._lastEditedColumnId=null;this._dataGrid.asWidget().show(this.element);this._data=[];this._cookieDomain='';this._cookieToBlockedReasons=null;}
setCookies(cookies,cookieToBlockedReasons){this.setCookieFolders([{cookies:cookies}],cookieToBlockedReasons);}
setCookieFolders(cookieFolders,cookieToBlockedReasons){this._data=cookieFolders;this._cookieToBlockedReasons=cookieToBlockedReasons||null;this._rebuildTable();}
setCookieDomain(cookieDomain){this._cookieDomain=cookieDomain;}
selectedCookie(){const node=this._dataGrid.selectedNode;return node?node.cookie:null;}
_getSelectionCookies(){const node=this._dataGrid.selectedNode;const nextNeighbor=node&&node.traverseNextNode(true);const previousNeighbor=node&&node.traversePreviousNode(true);return{current:node&&node.cookie,neighbor:(nextNeighbor&&nextNeighbor.cookie)||(previousNeighbor&&previousNeighbor.cookie)};}
willHide(){this._lastEditedColumnId=null;}
_findSelectedCookie(selectionCookies,cookies){if(!cookies){return null;}
const current=selectionCookies.current;const foundCurrent=cookies.find(cookie=>this._isSameCookie(cookie,current));if(foundCurrent){return foundCurrent;}
const neighbor=selectionCookies.neighbor;const foundNeighbor=cookies.find(cookie=>this._isSameCookie(cookie,neighbor));if(foundNeighbor){return foundNeighbor;}
return null;}
_isSameCookie(cookieA,cookieB){return!!cookieB&&cookieB.name()===cookieA.name()&&cookieB.domain()===cookieA.domain()&&cookieB.path()===cookieA.path();}
_rebuildTable(){const selectionCookies=this._getSelectionCookies();const lastEditedColumnId=this._lastEditedColumnId;this._lastEditedColumnId=null;this._dataGrid.rootNode().removeChildren();for(let i=0;i<this._data.length;++i){const item=this._data[i];const selectedCookie=this._findSelectedCookie(selectionCookies,item.cookies);if(item.folderName){const groupData={};groupData[SDK.Cookie.Attributes.Name]=item.folderName;groupData[SDK.Cookie.Attributes.Value]='';groupData[SDK.Cookie.Attributes.Size]=this._totalSize(item.cookies);groupData[SDK.Cookie.Attributes.Domain]='';groupData[SDK.Cookie.Attributes.Path]='';groupData[SDK.Cookie.Attributes.Expires]='';groupData[SDK.Cookie.Attributes.HttpOnly]='';groupData[SDK.Cookie.Attributes.Secure]='';groupData[SDK.Cookie.Attributes.SameSite]='';const groupNode=new DataGrid.DataGridNode(groupData);groupNode.selectable=true;this._dataGrid.rootNode().appendChild(groupNode);groupNode.element().classList.add('row-group');this._populateNode(groupNode,item.cookies,selectedCookie,lastEditedColumnId);groupNode.expand();}else{this._populateNode(this._dataGrid.rootNode(),item.cookies,selectedCookie,lastEditedColumnId);}}
if(selectionCookies.current&&lastEditedColumnId&&!this._dataGrid.selectedNode){this._addInactiveNode(this._dataGrid.rootNode(),selectionCookies.current,lastEditedColumnId);}
if(this._saveCallback){this._dataGrid.addCreationNode(false);}}
_populateNode(parentNode,cookies,selectedCookie,lastEditedColumnId){parentNode.removeChildren();if(!cookies){return;}
this._sortCookies(cookies);for(let i=0;i<cookies.length;++i){const cookie=cookies[i];const cookieNode=this._createGridNode(cookie);parentNode.appendChild(cookieNode);if(this._isSameCookie(cookie,selectedCookie)){cookieNode.select();if(lastEditedColumnId!==null){this._dataGrid.startEditingNextEditableColumnOfDataGridNode(cookieNode,lastEditedColumnId);}}}}
_addInactiveNode(parentNode,cookie,editedColumnId){const cookieNode=this._createGridNode(cookie);parentNode.appendChild(cookieNode);cookieNode.select();cookieNode.setInactive(true);if(editedColumnId!==null){this._dataGrid.startEditingNextEditableColumnOfDataGridNode(cookieNode,editedColumnId);}}
_totalSize(cookies){let totalSize=0;for(let i=0;cookies&&i<cookies.length;++i){totalSize+=cookies[i].size();}
return totalSize;}
_sortCookies(cookies){const sortDirection=this._dataGrid.isSortOrderAscending()?1:-1;function getValue(cookie,property){return typeof cookie[property]==='function'?String(cookie[property]()):String(cookie.name());}
function compareTo(property,cookie1,cookie2){return sortDirection*getValue(cookie1,property).compareTo(getValue(cookie2,property));}
function numberCompare(cookie1,cookie2){return sortDirection*(cookie1.size()-cookie2.size());}
function expiresCompare(cookie1,cookie2){if(cookie1.session()!==cookie2.session()){return sortDirection*(cookie1.session()?1:-1);}
if(cookie1.session()){return 0;}
if(cookie1.maxAge()&&cookie2.maxAge()){return sortDirection*(cookie1.maxAge()-cookie2.maxAge());}
if(cookie1.expires()&&cookie2.expires()){return sortDirection*(cookie1.expires()-cookie2.expires());}
return sortDirection*(cookie1.expires()?1:-1);}
let comparator;const columnId=this._dataGrid.sortColumnId()||'name';if(columnId==='expires'){comparator=expiresCompare;}else if(columnId==='size'){comparator=numberCompare;}else{comparator=compareTo.bind(null,columnId);}
cookies.sort(comparator);}
_createGridNode(cookie){const data={};data[SDK.Cookie.Attributes.Name]=cookie.name();data[SDK.Cookie.Attributes.Value]=cookie.value();if(cookie.type()===SDK.Cookie.Type.Request){data[SDK.Cookie.Attributes.Domain]=cookie.domain()?cookie.domain():ls`N/A`;data[SDK.Cookie.Attributes.Path]=cookie.path()?cookie.path():ls`N/A`;}else{data[SDK.Cookie.Attributes.Domain]=cookie.domain()||'';data[SDK.Cookie.Attributes.Path]=cookie.path()||'';}
if(cookie.maxAge()){data[SDK.Cookie.Attributes.Expires]=Number.secondsToString(parseInt(cookie.maxAge(),10));}else if(cookie.expires()){if(cookie.expires()<0){data[SDK.Cookie.Attributes.Expires]=_expiresSessionValue;}else{data[SDK.Cookie.Attributes.Expires]=new Date(cookie.expires()).toISOString();}}else{data[SDK.Cookie.Attributes.Expires]=cookie.type()===SDK.Cookie.Type.Request?ls`N/A`:_expiresSessionValue;}
data[SDK.Cookie.Attributes.Size]=cookie.size();const checkmark='\u2713';data[SDK.Cookie.Attributes.HttpOnly]=(cookie.httpOnly()?checkmark:'');data[SDK.Cookie.Attributes.Secure]=(cookie.secure()?checkmark:'');data[SDK.Cookie.Attributes.SameSite]=cookie.sameSite()||'';const node=new DataGridNode(data,cookie,this._cookieToBlockedReasons?this._cookieToBlockedReasons.get(cookie):null);node.selectable=true;return node;}
_onDeleteCookie(node){if(node.cookie&&this._deleteCallback){this._deleteCallback(node.cookie,()=>this._refresh());}}
_onUpdateCookie(editingNode,columnIdentifier,oldText,newText){this._lastEditedColumnId=columnIdentifier;this._setDefaults(editingNode);if(this._isValidCookieData(editingNode.data)){this._saveNode(editingNode);}else{editingNode.setDirty(true);}}
_setDefaults(node){if(node.data[SDK.Cookie.Attributes.Name]===null){node.data[SDK.Cookie.Attributes.Name]='';}
if(node.data[SDK.Cookie.Attributes.Value]===null){node.data[SDK.Cookie.Attributes.Value]='';}
if(node.data[SDK.Cookie.Attributes.Domain]===null){node.data[SDK.Cookie.Attributes.Domain]=this._cookieDomain;}
if(node.data[SDK.Cookie.Attributes.Path]===null){node.data[SDK.Cookie.Attributes.Path]='/';}
if(node.data[SDK.Cookie.Attributes.Expires]===null){node.data[SDK.Cookie.Attributes.Expires]=_expiresSessionValue;}}
_saveNode(node){const oldCookie=node.cookie;const newCookie=this._createCookieFromData(node.data);node.cookie=newCookie;this._saveCallback(newCookie,oldCookie).then(success=>{if(success){this._refresh();}else{node.setDirty(true);}});}
_createCookieFromData(data){const cookie=new SDK.Cookie(data[SDK.Cookie.Attributes.Name],data[SDK.Cookie.Attributes.Value],null);cookie.addAttribute(SDK.Cookie.Attributes.Domain,data[SDK.Cookie.Attributes.Domain]);cookie.addAttribute(SDK.Cookie.Attributes.Path,data[SDK.Cookie.Attributes.Path]);if(data.expires&&data.expires!==_expiresSessionValue){cookie.addAttribute(SDK.Cookie.Attributes.Expires,(new Date(data[SDK.Cookie.Attributes.Expires])).toUTCString());}
if(data[SDK.Cookie.Attributes.HttpOnly]){cookie.addAttribute(SDK.Cookie.Attributes.HttpOnly);}
if(data[SDK.Cookie.Attributes.Secure]){cookie.addAttribute(SDK.Cookie.Attributes.Secure);}
if(data[SDK.Cookie.Attributes.SameSite]){cookie.addAttribute(SDK.Cookie.Attributes.SameSite,data[SDK.Cookie.Attributes.SameSite]);}
cookie.setSize(data[SDK.Cookie.Attributes.Name].length+data[SDK.Cookie.Attributes.Value].length);return cookie;}
_isValidCookieData(data){return(data.name||data.value)&&this._isValidDomain(data.domain)&&this._isValidPath(data.path)&&this._isValidDate(data.expires);}
_isValidDomain(domain){if(!domain){return true;}
const parsedURL=('http://'+domain).asParsedURL();return!!parsedURL&&parsedURL.domain()===domain;}
_isValidPath(path){const parsedURL=('http://example.com'+path).asParsedURL();return!!parsedURL&&parsedURL.path===path;}
_isValidDate(date){return date===''||date===_expiresSessionValue||!isNaN(Date.parse(date));}
_refresh(){if(this._refreshCallback){this._refreshCallback();}}}
export class DataGridNode extends DataGrid.DataGridNode{constructor(data,cookie,blockedReasons){super(data);this.cookie=cookie;this._blockedReasons=blockedReasons;}
createCells(element){super.createCells(element);if(this._blockedReasons&&this._blockedReasons.length){element.classList.add('flagged-cookie-attribute-row');}}
createCell(columnId){const cell=super.createCell(columnId);cell.title=cell.textContent;let blockedReasonString='';if(this._blockedReasons){for(const blockedReason of this._blockedReasons){const attributeMatches=blockedReason.attribute===(columnId);const useNameColumn=!blockedReason.attribute&&columnId===SDK.Cookie.Attributes.Name;if(attributeMatches||useNameColumn){if(blockedReasonString){blockedReasonString+='\n';}
blockedReasonString+=blockedReason.uiString;}}}
if(blockedReasonString){const infoElement=UI.Icon.create('smallicon-info','cookie-warning-icon');infoElement.title=blockedReasonString;cell.insertBefore(infoElement,cell.firstChild);cell.classList.add('flagged-cookie-attribute-cell');}
return cell;}}
export const _expiresSessionValue=Common.UIString('Session');self.CookieTable=self.CookieTable||{};CookieTable=CookieTable||{};CookieTable.CookiesTable=CookiesTable;CookieTable.CookiesTable._expiresSessionValue=_expiresSessionValue;CookieTable.DataGridNode=DataGridNode;CookieTable.BlockedReason;import'./clike.js';import'./coffeescript.js';import'./php.js';import'./python.js';import'./shell.js';import'./livescript.js';import'./markdown.js';import'./clojure.js';import'./jsx.js';import*as DefaultCodeMirrorMimeMode from'./DefaultCodeMirrorMimeMode.js';export{DefaultCodeMirrorMimeMode,};export class DefaultCodeMirrorMimeMode{async install(extension){const modeFileName=extension.descriptor()['fileName'];return(eval(`import('./${modeFileName}')`));}}
CmModes.DefaultCodeMirrorMimeMode=DefaultCodeMirrorMimeMode;(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";function Context(indented,column,type,info,align,prev){this.indented=indented;this.column=column;this.type=type;this.info=info;this.align=align;this.prev=prev;}
function pushContext(state,col,type,info){var indent=state.indented;if(state.context&&state.context.type=="statement"&&type!="statement")
indent=state.context.indented;return state.context=new Context(indent,col,type,info,null,state.context);}
function popContext(state){var t=state.context.type;if(t==")"||t=="]"||t=="}")
state.indented=state.context.indented;return state.context=state.context.prev;}
function typeBefore(stream,state,pos){if(state.prevToken=="variable"||state.prevToken=="type")return true;if(/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(stream.string.slice(0,pos)))return true;if(state.typeAtEndOfLine&&stream.column()==stream.indentation())return true;}
function isTopScope(context){for(;;){if(!context||context.type=="top")return true;if(context.type=="}"&&context.prev.info!="namespace")return false;context=context.prev;}}
CodeMirror.defineMode("clike",function(config,parserConfig){var indentUnit=config.indentUnit,statementIndentUnit=parserConfig.statementIndentUnit||indentUnit,dontAlignCalls=parserConfig.dontAlignCalls,keywords=parserConfig.keywords||{},types=parserConfig.types||{},builtin=parserConfig.builtin||{},blockKeywords=parserConfig.blockKeywords||{},defKeywords=parserConfig.defKeywords||{},atoms=parserConfig.atoms||{},hooks=parserConfig.hooks||{},multiLineStrings=parserConfig.multiLineStrings,indentStatements=parserConfig.indentStatements!==false,indentSwitch=parserConfig.indentSwitch!==false,namespaceSeparator=parserConfig.namespaceSeparator,isPunctuationChar=parserConfig.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,numberStart=parserConfig.numberStart||/[\d\.]/,number=parserConfig.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,isOperatorChar=parserConfig.isOperatorChar||/[+\-*&%=<>!?|\/]/,isIdentifierChar=parserConfig.isIdentifierChar||/[\w\$_\xa1-\uffff]/,isReservedIdentifier=parserConfig.isReservedIdentifier||false;var curPunc,isDefKeyword;function tokenBase(stream,state){var ch=stream.next();if(hooks[ch]){var result=hooks[ch](stream,state);if(result!==false)return result;}
if(ch=='"'||ch=="'"){state.tokenize=tokenString(ch);return state.tokenize(stream,state);}
if(isPunctuationChar.test(ch)){curPunc=ch;return null;}
if(numberStart.test(ch)){stream.backUp(1)
if(stream.match(number))return"number"
stream.next()}
if(ch=="/"){if(stream.eat("*")){state.tokenize=tokenComment;return tokenComment(stream,state);}
if(stream.eat("/")){stream.skipToEnd();return"comment";}}
if(isOperatorChar.test(ch)){while(!stream.match(/^\/[\/*]/,false)&&stream.eat(isOperatorChar)){}
return"operator";}
stream.eatWhile(isIdentifierChar);if(namespaceSeparator)while(stream.match(namespaceSeparator))
stream.eatWhile(isIdentifierChar);var cur=stream.current();if(contains(keywords,cur)){if(contains(blockKeywords,cur))curPunc="newstatement";if(contains(defKeywords,cur))isDefKeyword=true;return"keyword";}
if(contains(types,cur))return"type";if(contains(builtin,cur)||(isReservedIdentifier&&isReservedIdentifier(cur))){if(contains(blockKeywords,cur))curPunc="newstatement";return"builtin";}
if(contains(atoms,cur))return"atom";return"variable";}
function tokenString(quote){return function(stream,state){var escaped=false,next,end=false;while((next=stream.next())!=null){if(next==quote&&!escaped){end=true;break;}
escaped=!escaped&&next=="\\";}
if(end||!(escaped||multiLineStrings))
state.tokenize=null;return"string";};}
function tokenComment(stream,state){var maybeEnd=false,ch;while(ch=stream.next()){if(ch=="/"&&maybeEnd){state.tokenize=null;break;}
maybeEnd=(ch=="*");}
return"comment";}
function maybeEOL(stream,state){if(parserConfig.typeFirstDefinitions&&stream.eol()&&isTopScope(state.context))
state.typeAtEndOfLine=typeBefore(stream,state,stream.pos)}
return{startState:function(basecolumn){return{tokenize:null,context:new Context((basecolumn||0)-indentUnit,0,"top",null,false),indented:0,startOfLine:true,prevToken:null};},token:function(stream,state){var ctx=state.context;if(stream.sol()){if(ctx.align==null)ctx.align=false;state.indented=stream.indentation();state.startOfLine=true;}
if(stream.eatSpace()){maybeEOL(stream,state);return null;}
curPunc=isDefKeyword=null;var style=(state.tokenize||tokenBase)(stream,state);if(style=="comment"||style=="meta")return style;if(ctx.align==null)ctx.align=true;if(curPunc==";"||curPunc==":"||(curPunc==","&&stream.match(/^\s*(?:\/\/.*)?$/,false)))
while(state.context.type=="statement")popContext(state);else if(curPunc=="{")pushContext(state,stream.column(),"}");else if(curPunc=="[")pushContext(state,stream.column(),"]");else if(curPunc=="(")pushContext(state,stream.column(),")");else if(curPunc=="}"){while(ctx.type=="statement")ctx=popContext(state);if(ctx.type=="}")ctx=popContext(state);while(ctx.type=="statement")ctx=popContext(state);}
else if(curPunc==ctx.type)popContext(state);else if(indentStatements&&(((ctx.type=="}"||ctx.type=="top")&&curPunc!=";")||(ctx.type=="statement"&&curPunc=="newstatement"))){pushContext(state,stream.column(),"statement",stream.current());}
if(style=="variable"&&((state.prevToken=="def"||(parserConfig.typeFirstDefinitions&&typeBefore(stream,state,stream.start)&&isTopScope(state.context)&&stream.match(/^\s*\(/,false)))))
style="def";if(hooks.token){var result=hooks.token(stream,state,style);if(result!==undefined)style=result;}
if(style=="def"&&parserConfig.styleDefs===false)style="variable";state.startOfLine=false;state.prevToken=isDefKeyword?"def":style||curPunc;maybeEOL(stream,state);return style;},indent:function(state,textAfter){if(state.tokenize!=tokenBase&&state.tokenize!=null||state.typeAtEndOfLine)return CodeMirror.Pass;var ctx=state.context,firstChar=textAfter&&textAfter.charAt(0);var closing=firstChar==ctx.type;if(ctx.type=="statement"&&firstChar=="}")ctx=ctx.prev;if(parserConfig.dontIndentStatements)
while(ctx.type=="statement"&&parserConfig.dontIndentStatements.test(ctx.info))
ctx=ctx.prev
if(hooks.indent){var hook=hooks.indent(state,ctx,textAfter,indentUnit);if(typeof hook=="number")return hook}
var switchBlock=ctx.prev&&ctx.prev.info=="switch";if(parserConfig.allmanIndentation&&/[{(]/.test(firstChar)){while(ctx.type!="top"&&ctx.type!="}")ctx=ctx.prev
return ctx.indented}
if(ctx.type=="statement")
return ctx.indented+(firstChar=="{"?0:statementIndentUnit);if(ctx.align&&(!dontAlignCalls||ctx.type!=")"))
return ctx.column+(closing?0:1);if(ctx.type==")"&&!closing)
return ctx.indented+statementIndentUnit;return ctx.indented+(closing?0:indentUnit)+
(!closing&&switchBlock&&!/^(?:case|default)\b/.test(textAfter)?indentUnit:0);},electricInput:indentSwitch?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"};});function words(str){var obj={},words=str.split(" ");for(var i=0;i<words.length;++i)obj[words[i]]=true;return obj;}
function contains(words,word){if(typeof words==="function"){return words(word);}else{return words.propertyIsEnumerable(word);}}
var cKeywords="auto if break case register continue return default do sizeof "+"static else struct switch extern typedef union for goto while enum const "+"volatile inline restrict asm fortran";var basicCTypes=words("int long char short double float unsigned signed "+"void bool");var basicObjCTypes=words("SEL instancetype id Class Protocol BOOL");function cTypes(identifier){return contains(basicCTypes,identifier)||/.+_t$/.test(identifier);}
function objCTypes(identifier){return cTypes(identifier)||contains(basicObjCTypes,identifier);}
var cBlockKeywords="case do else for if switch while struct enum union";var cDefKeywords="struct enum union";function cppHook(stream,state){if(!state.startOfLine)return false
for(var ch,next=null;ch=stream.peek();){if(ch=="\\"&&stream.match(/^.$/)){next=cppHook
break}else if(ch=="/"&&stream.match(/^\/[\/\*]/,false)){break}
stream.next()}
state.tokenize=next
return"meta"}
function pointerHook(_stream,state){if(state.prevToken=="type")return"type";return false;}
function cIsReservedIdentifier(token){if(!token||token.length<2)return false;if(token[0]!='_')return false;return(token[1]=='_')||(token[1]!==token[1].toLowerCase());}
function cpp14Literal(stream){stream.eatWhile(/[\w\.']/);return"number";}
function cpp11StringHook(stream,state){stream.backUp(1);if(stream.match(/(R|u8R|uR|UR|LR)/)){var match=stream.match(/"([^\s\\()]{0,16})\(/);if(!match){return false;}
state.cpp11RawStringDelim=match[1];state.tokenize=tokenRawString;return tokenRawString(stream,state);}
if(stream.match(/(u8|u|U|L)/)){if(stream.match(/["']/,false)){return"string";}
return false;}
stream.next();return false;}
function cppLooksLikeConstructor(word){var lastTwo=/(\w+)::~?(\w+)$/.exec(word);return lastTwo&&lastTwo[1]==lastTwo[2];}
function tokenAtString(stream,state){var next;while((next=stream.next())!=null){if(next=='"'&&!stream.eat('"')){state.tokenize=null;break;}}
return"string";}
function tokenRawString(stream,state){var delim=state.cpp11RawStringDelim.replace(/[^\w\s]/g,'\\$&');var match=stream.match(new RegExp(".*?\\)"+delim+'"'));if(match)
state.tokenize=null;else
stream.skipToEnd();return"string";}
function def(mimes,mode){if(typeof mimes=="string")mimes=[mimes];var words=[];function add(obj){if(obj)for(var prop in obj)if(obj.hasOwnProperty(prop))
words.push(prop);}
add(mode.keywords);add(mode.types);add(mode.builtin);add(mode.atoms);if(words.length){mode.helperType=mimes[0];CodeMirror.registerHelper("hintWords",mimes[0],words);}
for(var i=0;i<mimes.length;++i)
CodeMirror.defineMIME(mimes[i],mode);}
def(["text/x-csrc","text/x-c","text/x-chdr"],{name:"clike",keywords:words(cKeywords),types:cTypes,blockKeywords:words(cBlockKeywords),defKeywords:words(cDefKeywords),typeFirstDefinitions:true,atoms:words("NULL true false"),isReservedIdentifier:cIsReservedIdentifier,hooks:{"#":cppHook,"*":pointerHook,},modeProps:{fold:["brace","include"]}});def(["text/x-c++src","text/x-c++hdr"],{name:"clike",keywords:words(cKeywords+"alignas alignof and and_eq audit axiom bitand bitor catch "+"class compl concept constexpr const_cast decltype delete dynamic_cast "+"explicit export final friend import module mutable namespace new noexcept "+"not not_eq operator or or_eq override private protected public "+"reinterpret_cast requires static_assert static_cast template this "+"thread_local throw try typeid typename using virtual xor xor_eq"),types:cTypes,blockKeywords:words(cBlockKeywords+" class try catch"),defKeywords:words(cDefKeywords+" class namespace"),typeFirstDefinitions:true,atoms:words("true false NULL nullptr"),dontIndentStatements:/^template$/,isIdentifierChar:/[\w\$_~\xa1-\uffff]/,isReservedIdentifier:cIsReservedIdentifier,hooks:{"#":cppHook,"*":pointerHook,"u":cpp11StringHook,"U":cpp11StringHook,"L":cpp11StringHook,"R":cpp11StringHook,"0":cpp14Literal,"1":cpp14Literal,"2":cpp14Literal,"3":cpp14Literal,"4":cpp14Literal,"5":cpp14Literal,"6":cpp14Literal,"7":cpp14Literal,"8":cpp14Literal,"9":cpp14Literal,token:function(stream,state,style){if(style=="variable"&&stream.peek()=="("&&(state.prevToken==";"||state.prevToken==null||state.prevToken=="}")&&cppLooksLikeConstructor(stream.current()))
return"def";}},namespaceSeparator:"::",modeProps:{fold:["brace","include"]}});def("text/x-java",{name:"clike",keywords:words("abstract assert break case catch class const continue default "+"do else enum extends final finally for goto if implements import "+"instanceof interface native new package private protected public "+"return static strictfp super switch synchronized this throw throws transient "+"try volatile while @interface"),types:words("byte short int long float double boolean char void Boolean Byte Character Double Float "+"Integer Long Number Object Short String StringBuffer StringBuilder Void"),blockKeywords:words("catch class do else finally for if switch try while"),defKeywords:words("class interface enum @interface"),typeFirstDefinitions:true,atoms:words("true false null"),number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+\.?\d*|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,hooks:{"@":function(stream){if(stream.match('interface',false))return false;stream.eatWhile(/[\w\$_]/);return"meta";}},modeProps:{fold:["brace","import"]}});def("text/x-csharp",{name:"clike",keywords:words("abstract as async await base break case catch checked class const continue"+" default delegate do else enum event explicit extern finally fixed for"+" foreach goto if implicit in interface internal is lock namespace new"+" operator out override params private protected public readonly ref return sealed"+" sizeof stackalloc static struct switch this throw try typeof unchecked"+" unsafe using virtual void volatile while add alias ascending descending dynamic from get"+" global group into join let orderby partial remove select set value var yield"),types:words("Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func"+" Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32"+" UInt64 bool byte char decimal double short int long object"+" sbyte float string ushort uint ulong"),blockKeywords:words("catch class do else finally for foreach if struct switch try while"),defKeywords:words("class interface namespace struct var"),typeFirstDefinitions:true,atoms:words("true false null"),hooks:{"@":function(stream,state){if(stream.eat('"')){state.tokenize=tokenAtString;return tokenAtString(stream,state);}
stream.eatWhile(/[\w\$_]/);return"meta";}}});function tokenTripleString(stream,state){var escaped=false;while(!stream.eol()){if(!escaped&&stream.match('"""')){state.tokenize=null;break;}
escaped=stream.next()=="\\"&&!escaped;}
return"string";}
function tokenNestedComment(depth){return function(stream,state){var ch
while(ch=stream.next()){if(ch=="*"&&stream.eat("/")){if(depth==1){state.tokenize=null
break}else{state.tokenize=tokenNestedComment(depth-1)
return state.tokenize(stream,state)}}else if(ch=="/"&&stream.eat("*")){state.tokenize=tokenNestedComment(depth+1)
return state.tokenize(stream,state)}}
return"comment"}}
def("text/x-scala",{name:"clike",keywords:words("abstract case catch class def do else extends final finally for forSome if "+"implicit import lazy match new null object override package private protected return "+"sealed super this throw trait try type val var while with yield _ "+"assert assume require print println printf readLine readBoolean readByte readShort "+"readChar readInt readLong readFloat readDouble"),types:words("AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either "+"Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable "+"Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering "+"Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder "+"StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector "+"Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable "+"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process "+"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String "+"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),multiLineStrings:true,blockKeywords:words("catch class enum do else finally for forSome if match switch try while"),defKeywords:words("class enum def object package trait type val var"),atoms:words("true false null"),indentStatements:false,indentSwitch:false,isOperatorChar:/[+\-*&%=<>!?|\/#:@]/,hooks:{"@":function(stream){stream.eatWhile(/[\w\$_]/);return"meta";},'"':function(stream,state){if(!stream.match('""'))return false;state.tokenize=tokenTripleString;return state.tokenize(stream,state);},"'":function(stream){stream.eatWhile(/[\w\$_\xa1-\uffff]/);return"atom";},"=":function(stream,state){var cx=state.context
if(cx.type=="}"&&cx.align&&stream.eat(">")){state.context=new Context(cx.indented,cx.column,cx.type,cx.info,null,cx.prev)
return"operator"}else{return false}},"/":function(stream,state){if(!stream.eat("*"))return false
state.tokenize=tokenNestedComment(1)
return state.tokenize(stream,state)}},modeProps:{closeBrackets:{pairs:'()[]{}""',triples:'"'}}});function tokenKotlinString(tripleString){return function(stream,state){var escaped=false,next,end=false;while(!stream.eol()){if(!tripleString&&!escaped&&stream.match('"')){end=true;break;}
if(tripleString&&stream.match('"""')){end=true;break;}
next=stream.next();if(!escaped&&next=="$"&&stream.match('{'))
stream.skipTo("}");escaped=!escaped&&next=="\\"&&!tripleString;}
if(end||!tripleString)
state.tokenize=null;return"string";}}
def("text/x-kotlin",{name:"clike",keywords:words("package as typealias class interface this super val operator "+"var fun for is in This throw return annotation "+"break continue object if else while do try when !in !is as? "+"file import where by get set abstract enum open inner override private public internal "+"protected catch finally out final vararg reified dynamic companion constructor init "+"sealed field property receiver param sparam lateinit data inline noinline tailrec "+"external annotation crossinline const operator infix suspend actual expect setparam"),types:words("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable "+"Compiler Double Exception Float Integer Long Math Number Object Package Pair Process "+"Runtime Runnable SecurityManager Short StackTraceElement StrictMath String "+"StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray "+"ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy "+"LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:false,indentStatements:false,multiLineStrings:true,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:words("catch class do else finally for if where try while enum"),defKeywords:words("class val var object interface fun"),atoms:words("true false null this"),hooks:{"@":function(stream){stream.eatWhile(/[\w\$_]/);return"meta";},'*':function(_stream,state){return state.prevToken=='.'?'variable':'operator';},'"':function(stream,state){state.tokenize=tokenKotlinString(stream.match('""'));return state.tokenize(stream,state);},indent:function(state,ctx,textAfter,indentUnit){var firstChar=textAfter&&textAfter.charAt(0);if((state.prevToken=="}"||state.prevToken==")")&&textAfter=="")
return state.indented;if(state.prevToken=="operator"&&textAfter!="}"||state.prevToken=="variable"&&firstChar=="."||(state.prevToken=="}"||state.prevToken==")")&&firstChar==".")
return indentUnit*2+ctx.indented;if(ctx.align&&ctx.type=="}")
return ctx.indented+(state.context.type==(textAfter||"").charAt(0)?0:indentUnit);}},modeProps:{closeBrackets:{triples:'"'}}});def(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:words("sampler1D sampler2D sampler3D samplerCube "+"sampler1DShadow sampler2DShadow "+"const attribute uniform varying "+"break continue discard return "+"for while do if else struct "+"in out inout"),types:words("float int bool void "+"vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 "+"mat2 mat3 mat4"),blockKeywords:words("for while do if else struct"),builtin:words("radians degrees sin cos tan asin acos atan "+"pow exp log exp2 sqrt inversesqrt "+"abs sign floor ceil fract mod min max clamp mix step smoothstep "+"length distance dot cross normalize ftransform faceforward "+"reflect refract matrixCompMult "+"lessThan lessThanEqual greaterThan greaterThanEqual "+"equal notEqual any all not "+"texture1D texture1DProj texture1DLod texture1DProjLod "+"texture2D texture2DProj texture2DLod texture2DProjLod "+"texture3D texture3DProj texture3DLod texture3DProjLod "+"textureCube textureCubeLod "+"shadow1D shadow2D shadow1DProj shadow2DProj "+"shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod "+"dFdx dFdy fwidth "+"noise1 noise2 noise3 noise4"),atoms:words("true false "+"gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex "+"gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 "+"gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 "+"gl_FogCoord gl_PointCoord "+"gl_Position gl_PointSize gl_ClipVertex "+"gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor "+"gl_TexCoord gl_FogFragCoord "+"gl_FragCoord gl_FrontFacing "+"gl_FragData gl_FragDepth "+"gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix "+"gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse "+"gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse "+"gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose "+"gl_ProjectionMatrixInverseTranspose "+"gl_ModelViewProjectionMatrixInverseTranspose "+"gl_TextureMatrixInverseTranspose "+"gl_NormalScale gl_DepthRange gl_ClipPlane "+"gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel "+"gl_FrontLightModelProduct gl_BackLightModelProduct "+"gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ "+"gl_FogParameters "+"gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords "+"gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats "+"gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits "+"gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits "+"gl_MaxDrawBuffers"),indentSwitch:false,hooks:{"#":cppHook},modeProps:{fold:["brace","include"]}});def("text/x-nesc",{name:"clike",keywords:words(cKeywords+" as atomic async call command component components configuration event generic "+"implementation includes interface module new norace nx_struct nx_union post provides "+"signal task uses abstract extends"),types:cTypes,blockKeywords:words(cBlockKeywords),atoms:words("null true false"),hooks:{"#":cppHook},modeProps:{fold:["brace","include"]}});def("text/x-objectivec",{name:"clike",keywords:words(cKeywords+" bycopy byref in inout oneway out self super atomic nonatomic retain copy "+"readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd "+"@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class "+"@public @package @private @protected @required @optional @try @catch @finally @import "+"@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available"),types:objCTypes,builtin:words("FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION NS_RETURNS_RETAINED "+"NS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER "+"NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN "+"NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT"),blockKeywords:words(cBlockKeywords+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:words(cDefKeywords+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:true,atoms:words("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:cIsReservedIdentifier,hooks:{"#":cppHook,"*":pointerHook,},modeProps:{fold:["brace","include"]}});def("text/x-squirrel",{name:"clike",keywords:words("base break clone continue const default delete enum extends function in class"+" foreach local resume return this throw typeof yield constructor instanceof static"),types:cTypes,blockKeywords:words("case catch class else for foreach if switch try while"),defKeywords:words("function local class"),typeFirstDefinitions:true,atoms:words("true false null"),hooks:{"#":cppHook},modeProps:{fold:["brace","include"]}});var stringTokenizer=null;function tokenCeylonString(type){return function(stream,state){var escaped=false,next,end=false;while(!stream.eol()){if(!escaped&&stream.match('"')&&(type=="single"||stream.match('""'))){end=true;break;}
if(!escaped&&stream.match('``')){stringTokenizer=tokenCeylonString(type);end=true;break;}
next=stream.next();escaped=type=="single"&&!escaped&&next=="\\";}
if(end)
state.tokenize=null;return"string";}}
def("text/x-ceylon",{name:"clike",keywords:words("abstracts alias assembly assert assign break case catch class continue dynamic else"+" exists extends finally for function given if import in interface is let module new"+" nonempty object of out outer package return satisfies super switch then this throw"+" try value void while"),types:function(word){var first=word.charAt(0);return(first===first.toUpperCase()&&first!==first.toLowerCase());},blockKeywords:words("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:words("class dynamic function interface module object package value"),builtin:words("abstract actual aliased annotation by default deprecated doc final formal late license"+" native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:true,typeFirstDefinitions:true,atoms:words("true false null larger smaller equal empty finished"),indentSwitch:false,styleDefs:false,hooks:{"@":function(stream){stream.eatWhile(/[\w\$_]/);return"meta";},'"':function(stream,state){state.tokenize=tokenCeylonString(stream.match('""')?"triple":"single");return state.tokenize(stream,state);},'`':function(stream,state){if(!stringTokenizer||!stream.match('`'))return false;state.tokenize=stringTokenizer;stringTokenizer=null;return state.tokenize(stream,state);},"'":function(stream){stream.eatWhile(/[\w\$_\xa1-\uffff]/);return"atom";},token:function(_stream,state,style){if((style=="variable"||style=="type")&&state.prevToken=="."){return"variable-2";}}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("coffeescript",function(conf,parserConf){var ERRORCLASS="error";function wordRegexp(words){return new RegExp("^(("+words.join(")|(")+"))\\b");}
var operators=/^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/;var delimiters=/^(?:[()\[\]{},:`=;]|\.\.?\.?)/;var identifiers=/^[_A-Za-z$][_A-Za-z$0-9]*/;var atProp=/^@[_A-Za-z$][_A-Za-z$0-9]*/;var wordOperators=wordRegexp(["and","or","not","is","isnt","in","instanceof","typeof"]);var indentKeywords=["for","while","loop","if","unless","else","switch","try","catch","finally","class"];var commonKeywords=["break","by","continue","debugger","delete","do","in","of","new","return","then","this","@","throw","when","until","extends"];var keywords=wordRegexp(indentKeywords.concat(commonKeywords));indentKeywords=wordRegexp(indentKeywords);var stringPrefixes=/^('{3}|\"{3}|['\"])/;var regexPrefixes=/^(\/{3}|\/)/;var commonConstants=["Infinity","NaN","undefined","null","true","false","on","off","yes","no"];var constants=wordRegexp(commonConstants);function tokenBase(stream,state){if(stream.sol()){if(state.scope.align===null)state.scope.align=false;var scopeOffset=state.scope.offset;if(stream.eatSpace()){var lineOffset=stream.indentation();if(lineOffset>scopeOffset&&state.scope.type=="coffee"){return"indent";}else if(lineOffset<scopeOffset){return"dedent";}
return null;}else{if(scopeOffset>0){dedent(stream,state);}}}
if(stream.eatSpace()){return null;}
var ch=stream.peek();if(stream.match("####")){stream.skipToEnd();return"comment";}
if(stream.match("###")){state.tokenize=longComment;return state.tokenize(stream,state);}
if(ch==="#"){stream.skipToEnd();return"comment";}
if(stream.match(/^-?[0-9\.]/,false)){var floatLiteral=false;if(stream.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)){floatLiteral=true;}
if(stream.match(/^-?\d+\.\d*/)){floatLiteral=true;}
if(stream.match(/^-?\.\d+/)){floatLiteral=true;}
if(floatLiteral){if(stream.peek()=="."){stream.backUp(1);}
return"number";}
var intLiteral=false;if(stream.match(/^-?0x[0-9a-f]+/i)){intLiteral=true;}
if(stream.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)){intLiteral=true;}
if(stream.match(/^-?0(?![\dx])/i)){intLiteral=true;}
if(intLiteral){return"number";}}
if(stream.match(stringPrefixes)){state.tokenize=tokenFactory(stream.current(),false,"string");return state.tokenize(stream,state);}
if(stream.match(regexPrefixes)){if(stream.current()!="/"||stream.match(/^.*\//,false)){state.tokenize=tokenFactory(stream.current(),true,"string-2");return state.tokenize(stream,state);}else{stream.backUp(1);}}
if(stream.match(operators)||stream.match(wordOperators)){return"operator";}
if(stream.match(delimiters)){return"punctuation";}
if(stream.match(constants)){return"atom";}
if(stream.match(atProp)||state.prop&&stream.match(identifiers)){return"property";}
if(stream.match(keywords)){return"keyword";}
if(stream.match(identifiers)){return"variable";}
stream.next();return ERRORCLASS;}
function tokenFactory(delimiter,singleline,outclass){return function(stream,state){while(!stream.eol()){stream.eatWhile(/[^'"\/\\]/);if(stream.eat("\\")){stream.next();if(singleline&&stream.eol()){return outclass;}}else if(stream.match(delimiter)){state.tokenize=tokenBase;return outclass;}else{stream.eat(/['"\/]/);}}
if(singleline){if(parserConf.singleLineStringErrors){outclass=ERRORCLASS;}else{state.tokenize=tokenBase;}}
return outclass;};}
function longComment(stream,state){while(!stream.eol()){stream.eatWhile(/[^#]/);if(stream.match("###")){state.tokenize=tokenBase;break;}
stream.eatWhile("#");}
return"comment";}
function indent(stream,state,type){type=type||"coffee";var offset=0,align=false,alignOffset=null;for(var scope=state.scope;scope;scope=scope.prev){if(scope.type==="coffee"||scope.type=="}"){offset=scope.offset+conf.indentUnit;break;}}
if(type!=="coffee"){align=null;alignOffset=stream.column()+stream.current().length;}else if(state.scope.align){state.scope.align=false;}
state.scope={offset:offset,type:type,prev:state.scope,align:align,alignOffset:alignOffset};}
function dedent(stream,state){if(!state.scope.prev)return;if(state.scope.type==="coffee"){var _indent=stream.indentation();var matched=false;for(var scope=state.scope;scope;scope=scope.prev){if(_indent===scope.offset){matched=true;break;}}
if(!matched){return true;}
while(state.scope.prev&&state.scope.offset!==_indent){state.scope=state.scope.prev;}
return false;}else{state.scope=state.scope.prev;return false;}}
function tokenLexer(stream,state){var style=state.tokenize(stream,state);var current=stream.current();if(current==="return"){state.dedent=true;}
if(((current==="->"||current==="=>")&&stream.eol())||style==="indent"){indent(stream,state);}
var delimiter_index="[({".indexOf(current);if(delimiter_index!==-1){indent(stream,state,"])}".slice(delimiter_index,delimiter_index+1));}
if(indentKeywords.exec(current)){indent(stream,state);}
if(current=="then"){dedent(stream,state);}
if(style==="dedent"){if(dedent(stream,state)){return ERRORCLASS;}}
delimiter_index="])}".indexOf(current);if(delimiter_index!==-1){while(state.scope.type=="coffee"&&state.scope.prev)
state.scope=state.scope.prev;if(state.scope.type==current)
state.scope=state.scope.prev;}
if(state.dedent&&stream.eol()){if(state.scope.type=="coffee"&&state.scope.prev)
state.scope=state.scope.prev;state.dedent=false;}
return style;}
var external={startState:function(basecolumn){return{tokenize:tokenBase,scope:{offset:basecolumn||0,type:"coffee",prev:null,align:false},prop:false,dedent:0};},token:function(stream,state){var fillAlign=state.scope.align===null&&state.scope;if(fillAlign&&stream.sol())fillAlign.align=false;var style=tokenLexer(stream,state);if(style&&style!="comment"){if(fillAlign)fillAlign.align=true;state.prop=style=="punctuation"&&stream.current()=="."}
return style;},indent:function(state,text){if(state.tokenize!=tokenBase)return 0;var scope=state.scope;var closer=text&&"])}".indexOf(text.charAt(0))>-1;if(closer)while(scope.type=="coffee"&&scope.prev)scope=scope.prev;var closes=closer&&scope.type===text.charAt(0);if(scope.align)
return scope.alignOffset-(closes?1:0);else
return(closes?scope.prev:scope).offset;},lineComment:"#",fold:"indent"};return external;});CodeMirror.defineMIME("application/vnd.coffeescript","coffeescript");CodeMirror.defineMIME("text/x-coffeescript","coffeescript");CodeMirror.defineMIME("text/coffeescript","coffeescript");});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"),require("../htmlmixed/htmlmixed"),require("../clike/clike"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror","../htmlmixed/htmlmixed","../clike/clike"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";function keywords(str){var obj={},words=str.split(" ");for(var i=0;i<words.length;++i)obj[words[i]]=true;return obj;}
function matchSequence(list,end,escapes){if(list.length==0)return phpString(end);return function(stream,state){var patterns=list[0];for(var i=0;i<patterns.length;i++)if(stream.match(patterns[i][0])){state.tokenize=matchSequence(list.slice(1),end);return patterns[i][1];}
state.tokenize=phpString(end,escapes);return"string";};}
function phpString(closing,escapes){return function(stream,state){return phpString_(stream,state,closing,escapes);};}
function phpString_(stream,state,closing,escapes){if(escapes!==false&&stream.match("${",false)||stream.match("{$",false)){state.tokenize=null;return"string";}
if(escapes!==false&&stream.match(/^\$[a-zA-Z_][a-zA-Z0-9_]*/)){if(stream.match("[",false)){state.tokenize=matchSequence([[["[",null]],[[/\d[\w\.]*/,"number"],[/\$[a-zA-Z_][a-zA-Z0-9_]*/,"variable-2"],[/[\w\$]+/,"variable"]],[["]",null]]],closing,escapes);}
if(stream.match(/\-\>\w/,false)){state.tokenize=matchSequence([[["->",null]],[[/[\w]+/,"variable"]]],closing,escapes);}
return"variable-2";}
var escaped=false;while(!stream.eol()&&(escaped||escapes===false||(!stream.match("{$",false)&&!stream.match(/^(\$[a-zA-Z_][a-zA-Z0-9_]*|\$\{)/,false)))){if(!escaped&&stream.match(closing)){state.tokenize=null;state.tokStack.pop();state.tokStack.pop();break;}
escaped=stream.next()=="\\"&&!escaped;}
return"string";}
var phpKeywords="abstract and array as break case catch class clone const continue declare default "+"do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final "+"for foreach function global goto if implements interface instanceof namespace "+"new or private protected public static switch throw trait try use var while xor "+"die echo empty exit eval include include_once isset list require require_once return "+"print unset __halt_compiler self static parent yield insteadof finally";var phpAtoms="true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__ __TRAIT__";var phpBuiltin="func_num_args func_get_arg func_get_args strlen strcmp strncmp strcasecmp strncasecmp each error_reporting define defined trigger_error user_error set_error_handler restore_error_handler get_declared_classes get_loaded_extensions extension_loaded get_extension_funcs debug_backtrace constant bin2hex hex2bin sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html_entity_decode md5 md5_file crc32 getimagesize image_type_to_mime_type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr_count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str_shuffle str_word_count strcoll substr substr_replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str_replace str_repeat count_chars chunk_split trim ltrim strip_tags similar_text explode implode setlocale localeconv parse_str str_pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse_url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell_exec proc_open proc_close rand srand getrandmax mt_rand mt_srand mt_getrandmax base64_decode base64_encode abs ceil floor round is_finite is_nan is_infinite bindec hexdec octdec decbin decoct dechex base_convert number_format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted_printable_decode set_time_limit get_cfg_var magic_quotes_runtime set_magic_quotes_runtime get_magic_quotes_gpc get_magic_quotes_runtime import_request_variables error_log serialize unserialize memory_get_usage var_dump var_export debug_zval_dump print_r highlight_file show_source highlight_string ini_get ini_get_all ini_set ini_alter ini_restore get_include_path set_include_path restore_include_path setcookie header headers_sent connection_aborted connection_status ignore_user_abort parse_ini_file is_uploaded_file move_uploaded_file intval floatval doubleval strval gettype settype is_null is_resource is_bool is_long is_float is_int is_integer is_double is_real is_numeric is_string is_array is_object is_scalar ereg ereg_replace eregi eregi_replace split spliti join sql_regcase dl pclose popen readfile rewind rmdir umask fclose feof fgetc fgets fgetss fread fopen fpassthru ftruncate fstat fseek ftell fflush fwrite fputs mkdir rename copy tempnam tmpfile file file_get_contents file_put_contents stream_select stream_context_create stream_context_set_params stream_context_set_option stream_context_get_options stream_filter_prepend stream_filter_append fgetcsv flock get_meta_tags stream_set_write_buffer set_file_buffer set_socket_blocking stream_set_blocking socket_set_blocking stream_get_meta_data stream_register_wrapper stream_wrapper_register stream_set_timeout socket_set_timeout socket_get_status realpath fnmatch fsockopen pfsockopen pack unpack get_browser crypt opendir closedir chdir getcwd rewinddir readdir dir glob fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype file_exists is_writable is_writeable is_readable is_executable is_file is_dir is_link stat lstat chown touch clearstatcache mail ob_start ob_flush ob_clean ob_end_flush ob_end_clean ob_get_flush ob_get_clean ob_get_length ob_get_level ob_get_status ob_get_contents ob_implicit_flush ob_list_handlers ksort krsort natsort natcasesort asort arsort sort rsort usort uasort uksort shuffle array_walk count end prev next reset current key min max in_array array_search extract compact array_fill range array_multisort array_push array_pop array_shift array_unshift array_splice array_slice array_merge array_merge_recursive array_keys array_values array_count_values array_reverse array_reduce array_pad array_flip array_change_key_case array_rand array_unique array_intersect array_intersect_assoc array_diff array_diff_assoc array_sum array_filter array_map array_chunk array_key_exists array_intersect_key array_combine array_column pos sizeof key_exists assert assert_options version_compare ftok str_rot13 aggregate session_name session_module_name session_save_path session_id session_regenerate_id session_decode session_register session_unregister session_is_registered session_encode session_start session_destroy session_unset session_set_save_handler session_cache_limiter session_cache_expire session_set_cookie_params session_get_cookie_params session_write_close preg_match preg_match_all preg_replace preg_replace_callback preg_split preg_quote preg_grep overload ctype_alnum ctype_alpha ctype_cntrl ctype_digit ctype_lower ctype_graph ctype_print ctype_punct ctype_space ctype_upper ctype_xdigit virtual apache_request_headers apache_note apache_lookup_uri apache_child_terminate apache_setenv apache_response_headers apache_get_version getallheaders mysql_connect mysql_pconnect mysql_close mysql_select_db mysql_create_db mysql_drop_db mysql_query mysql_unbuffered_query mysql_db_query mysql_list_dbs mysql_list_tables mysql_list_fields mysql_list_processes mysql_error mysql_errno mysql_affected_rows mysql_insert_id mysql_result mysql_num_rows mysql_num_fields mysql_fetch_row mysql_fetch_array mysql_fetch_assoc mysql_fetch_object mysql_data_seek mysql_fetch_lengths mysql_fetch_field mysql_field_seek mysql_free_result mysql_field_name mysql_field_table mysql_field_len mysql_field_type mysql_field_flags mysql_escape_string mysql_real_escape_string mysql_stat mysql_thread_id mysql_client_encoding mysql_get_client_info mysql_get_host_info mysql_get_proto_info mysql_get_server_info mysql_info mysql mysql_fieldname mysql_fieldtable mysql_fieldlen mysql_fieldtype mysql_fieldflags mysql_selectdb mysql_createdb mysql_dropdb mysql_freeresult mysql_numfields mysql_numrows mysql_listdbs mysql_listtables mysql_listfields mysql_db_name mysql_dbname mysql_tablename mysql_table_name pg_connect pg_pconnect pg_close pg_connection_status pg_connection_busy pg_connection_reset pg_host pg_dbname pg_port pg_tty pg_options pg_ping pg_query pg_send_query pg_cancel_query pg_fetch_result pg_fetch_row pg_fetch_assoc pg_fetch_array pg_fetch_object pg_fetch_all pg_affected_rows pg_get_result pg_result_seek pg_result_status pg_free_result pg_last_oid pg_num_rows pg_num_fields pg_field_name pg_field_num pg_field_size pg_field_type pg_field_prtlen pg_field_is_null pg_get_notify pg_get_pid pg_result_error pg_last_error pg_last_notice pg_put_line pg_end_copy pg_copy_to pg_copy_from pg_trace pg_untrace pg_lo_create pg_lo_unlink pg_lo_open pg_lo_close pg_lo_read pg_lo_write pg_lo_read_all pg_lo_import pg_lo_export pg_lo_seek pg_lo_tell pg_escape_string pg_escape_bytea pg_unescape_bytea pg_client_encoding pg_set_client_encoding pg_meta_data pg_convert pg_insert pg_update pg_delete pg_select pg_exec pg_getlastoid pg_cmdtuples pg_errormessage pg_numrows pg_numfields pg_fieldname pg_fieldsize pg_fieldtype pg_fieldnum pg_fieldprtlen pg_fieldisnull pg_freeresult pg_result pg_loreadall pg_locreate pg_lounlink pg_loopen pg_loclose pg_loread pg_lowrite pg_loimport pg_loexport http_response_code get_declared_traits getimagesizefromstring socket_import_stream stream_set_chunk_size trait_exists header_register_callback class_uses session_status session_register_shutdown echo print global static exit array empty eval isset unset die include require include_once require_once json_decode json_encode json_last_error json_last_error_msg curl_close curl_copy_handle curl_errno curl_error curl_escape curl_exec curl_file_create curl_getinfo curl_init curl_multi_add_handle curl_multi_close curl_multi_exec curl_multi_getcontent curl_multi_info_read curl_multi_init curl_multi_remove_handle curl_multi_select curl_multi_setopt curl_multi_strerror curl_pause curl_reset curl_setopt_array curl_setopt curl_share_close curl_share_init curl_share_setopt curl_strerror curl_unescape curl_version mysqli_affected_rows mysqli_autocommit mysqli_change_user mysqli_character_set_name mysqli_close mysqli_commit mysqli_connect_errno mysqli_connect_error mysqli_connect mysqli_data_seek mysqli_debug mysqli_dump_debug_info mysqli_errno mysqli_error_list mysqli_error mysqli_fetch_all mysqli_fetch_array mysqli_fetch_assoc mysqli_fetch_field_direct mysqli_fetch_field mysqli_fetch_fields mysqli_fetch_lengths mysqli_fetch_object mysqli_fetch_row mysqli_field_count mysqli_field_seek mysqli_field_tell mysqli_free_result mysqli_get_charset mysqli_get_client_info mysqli_get_client_stats mysqli_get_client_version mysqli_get_connection_stats mysqli_get_host_info mysqli_get_proto_info mysqli_get_server_info mysqli_get_server_version mysqli_info mysqli_init mysqli_insert_id mysqli_kill mysqli_more_results mysqli_multi_query mysqli_next_result mysqli_num_fields mysqli_num_rows mysqli_options mysqli_ping mysqli_prepare mysqli_query mysqli_real_connect mysqli_real_escape_string mysqli_real_query mysqli_reap_async_query mysqli_refresh mysqli_rollback mysqli_select_db mysqli_set_charset mysqli_set_local_infile_default mysqli_set_local_infile_handler mysqli_sqlstate mysqli_ssl_set mysqli_stat mysqli_stmt_init mysqli_store_result mysqli_thread_id mysqli_thread_safe mysqli_use_result mysqli_warning_count";CodeMirror.registerHelper("hintWords","php",[phpKeywords,phpAtoms,phpBuiltin].join(" ").split(" "));CodeMirror.registerHelper("wordChars","php",/[\w$]/);var phpConfig={name:"clike",helperType:"php",keywords:keywords(phpKeywords),blockKeywords:keywords("catch do else elseif for foreach if switch try while finally"),defKeywords:keywords("class function interface namespace trait"),atoms:keywords(phpAtoms),builtin:keywords(phpBuiltin),multiLineStrings:true,hooks:{"$":function(stream){stream.eatWhile(/[\w\$_]/);return"variable-2";},"<":function(stream,state){var before;if(before=stream.match(/<<\s*/)){var quoted=stream.eat(/['"]/);stream.eatWhile(/[\w\.]/);var delim=stream.current().slice(before[0].length+(quoted?2:1));if(quoted)stream.eat(quoted);if(delim){(state.tokStack||(state.tokStack=[])).push(delim,0);state.tokenize=phpString(delim,quoted!="'");return"string";}}
return false;},"#":function(stream){while(!stream.eol()&&!stream.match("?>",false))stream.next();return"comment";},"/":function(stream){if(stream.eat("/")){while(!stream.eol()&&!stream.match("?>",false))stream.next();return"comment";}
return false;},'"':function(_stream,state){(state.tokStack||(state.tokStack=[])).push('"',0);state.tokenize=phpString('"');return"string";},"{":function(_stream,state){if(state.tokStack&&state.tokStack.length)
state.tokStack[state.tokStack.length-1]++;return false;},"}":function(_stream,state){if(state.tokStack&&state.tokStack.length>0&&!--state.tokStack[state.tokStack.length-1]){state.tokenize=phpString(state.tokStack[state.tokStack.length-2]);}
return false;}}};CodeMirror.defineMode("php",function(config,parserConfig){var htmlMode=CodeMirror.getMode(config,(parserConfig&&parserConfig.htmlMode)||"text/html");var phpMode=CodeMirror.getMode(config,phpConfig);function dispatch(stream,state){var isPHP=state.curMode==phpMode;if(stream.sol()&&state.pending&&state.pending!='"'&&state.pending!="'")state.pending=null;if(!isPHP){if(stream.match(/^<\?\w*/)){state.curMode=phpMode;if(!state.php)state.php=CodeMirror.startState(phpMode,htmlMode.indent(state.html,"",""))
state.curState=state.php;return"meta";}
if(state.pending=='"'||state.pending=="'"){while(!stream.eol()&&stream.next()!=state.pending){}
var style="string";}else if(state.pending&&stream.pos<state.pending.end){stream.pos=state.pending.end;var style=state.pending.style;}else{var style=htmlMode.token(stream,state.curState);}
if(state.pending)state.pending=null;var cur=stream.current(),openPHP=cur.search(/<\?/),m;if(openPHP!=-1){if(style=="string"&&(m=cur.match(/[\'\"]$/))&&!/\?>/.test(cur))state.pending=m[0];else state.pending={end:stream.pos,style:style};stream.backUp(cur.length-openPHP);}
return style;}else if(isPHP&&state.php.tokenize==null&&stream.match("?>")){state.curMode=htmlMode;state.curState=state.html;if(!state.php.context.prev)state.php=null;return"meta";}else{return phpMode.token(stream,state.curState);}}
return{startState:function(){var html=CodeMirror.startState(htmlMode)
var php=parserConfig.startOpen?CodeMirror.startState(phpMode):null
return{html:html,php:php,curMode:parserConfig.startOpen?phpMode:htmlMode,curState:parserConfig.startOpen?php:html,pending:null};},copyState:function(state){var html=state.html,htmlNew=CodeMirror.copyState(htmlMode,html),php=state.php,phpNew=php&&CodeMirror.copyState(phpMode,php),cur;if(state.curMode==htmlMode)cur=htmlNew;else cur=phpNew;return{html:htmlNew,php:phpNew,curMode:state.curMode,curState:cur,pending:state.pending};},token:dispatch,indent:function(state,textAfter,line){if((state.curMode!=phpMode&&/^\s*<\//.test(textAfter))||(state.curMode==phpMode&&/^\?>/.test(textAfter)))
return htmlMode.indent(state.html,textAfter,line);return state.curMode.indent(state.curState,textAfter,line);},blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",innerMode:function(state){return{state:state.curState,mode:state.curMode};}};},"htmlmixed","clike");CodeMirror.defineMIME("application/x-httpd-php","php");CodeMirror.defineMIME("application/x-httpd-php-open",{name:"php",startOpen:true});CodeMirror.defineMIME("text/x-php",phpConfig);});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";function wordRegexp(words){return new RegExp("^(("+words.join(")|(")+"))\\b");}
var wordOperators=wordRegexp(["and","or","not","is"]);var commonKeywords=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield","in"];var commonBuiltins=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"];CodeMirror.registerHelper("hintWords","python",commonKeywords.concat(commonBuiltins));function top(state){return state.scopes[state.scopes.length-1];}
CodeMirror.defineMode("python",function(conf,parserConf){var ERRORCLASS="error";var delimiters=parserConf.delimiters||parserConf.singleDelimiters||/^[\(\)\[\]\{\}@,:`=;\.\\]/;var operators=[parserConf.singleOperators,parserConf.doubleOperators,parserConf.doubleDelimiters,parserConf.tripleDelimiters,parserConf.operators||/^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/]
for(var i=0;i<operators.length;i++)if(!operators[i])operators.splice(i--,1)
var hangingIndent=parserConf.hangingIndent||conf.indentUnit;var myKeywords=commonKeywords,myBuiltins=commonBuiltins;if(parserConf.extra_keywords!=undefined)
myKeywords=myKeywords.concat(parserConf.extra_keywords);if(parserConf.extra_builtins!=undefined)
myBuiltins=myBuiltins.concat(parserConf.extra_builtins);var py3=!(parserConf.version&&Number(parserConf.version)<3)
if(py3){var identifiers=parserConf.identifiers||/^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/;myKeywords=myKeywords.concat(["nonlocal","False","True","None","async","await"]);myBuiltins=myBuiltins.concat(["ascii","bytes","exec","print"]);var stringPrefixes=new RegExp("^(([rbuf]|(br)|(fr))?('{3}|\"{3}|['\"]))","i");}else{var identifiers=parserConf.identifiers||/^[_A-Za-z][_A-Za-z0-9]*/;myKeywords=myKeywords.concat(["exec","print"]);myBuiltins=myBuiltins.concat(["apply","basestring","buffer","cmp","coerce","execfile","file","intern","long","raw_input","reduce","reload","unichr","unicode","xrange","False","True","None"]);var stringPrefixes=new RegExp("^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))","i");}
var keywords=wordRegexp(myKeywords);var builtins=wordRegexp(myBuiltins);function tokenBase(stream,state){var sol=stream.sol()&&state.lastToken!="\\"
if(sol)state.indent=stream.indentation()
if(sol&&top(state).type=="py"){var scopeOffset=top(state).offset;if(stream.eatSpace()){var lineOffset=stream.indentation();if(lineOffset>scopeOffset)
pushPyScope(state);else if(lineOffset<scopeOffset&&dedent(stream,state)&&stream.peek()!="#")
state.errorToken=true;return null;}else{var style=tokenBaseInner(stream,state);if(scopeOffset>0&&dedent(stream,state))
style+=" "+ERRORCLASS;return style;}}
return tokenBaseInner(stream,state);}
function tokenBaseInner(stream,state){if(stream.eatSpace())return null;if(stream.match(/^#.*/))return"comment";if(stream.match(/^[0-9\.]/,false)){var floatLiteral=false;if(stream.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)){floatLiteral=true;}
if(stream.match(/^[\d_]+\.\d*/)){floatLiteral=true;}
if(stream.match(/^\.\d+/)){floatLiteral=true;}
if(floatLiteral){stream.eat(/J/i);return"number";}
var intLiteral=false;if(stream.match(/^0x[0-9a-f_]+/i))intLiteral=true;if(stream.match(/^0b[01_]+/i))intLiteral=true;if(stream.match(/^0o[0-7_]+/i))intLiteral=true;if(stream.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)){stream.eat(/J/i);intLiteral=true;}
if(stream.match(/^0(?![\dx])/i))intLiteral=true;if(intLiteral){stream.eat(/L/i);return"number";}}
if(stream.match(stringPrefixes)){var isFmtString=stream.current().toLowerCase().indexOf('f')!==-1;if(!isFmtString){state.tokenize=tokenStringFactory(stream.current(),state.tokenize);return state.tokenize(stream,state);}else{state.tokenize=formatStringFactory(stream.current(),state.tokenize);return state.tokenize(stream,state);}}
for(var i=0;i<operators.length;i++)
if(stream.match(operators[i]))return"operator"
if(stream.match(delimiters))return"punctuation";if(state.lastToken=="."&&stream.match(identifiers))
return"property";if(stream.match(keywords)||stream.match(wordOperators))
return"keyword";if(stream.match(builtins))
return"builtin";if(stream.match(/^(self|cls)\b/))
return"variable-2";if(stream.match(identifiers)){if(state.lastToken=="def"||state.lastToken=="class")
return"def";return"variable";}
stream.next();return ERRORCLASS;}
function formatStringFactory(delimiter,tokenOuter){while("rubf".indexOf(delimiter.charAt(0).toLowerCase())>=0)
delimiter=delimiter.substr(1);var singleline=delimiter.length==1;var OUTCLASS="string";function tokenNestedExpr(depth){return function(stream,state){var inner=tokenBaseInner(stream,state)
if(inner=="punctuation"){if(stream.current()=="{"){state.tokenize=tokenNestedExpr(depth+1)}else if(stream.current()=="}"){if(depth>1)state.tokenize=tokenNestedExpr(depth-1)
else state.tokenize=tokenString}}
return inner}}
function tokenString(stream,state){while(!stream.eol()){stream.eatWhile(/[^'"\{\}\\]/);if(stream.eat("\\")){stream.next();if(singleline&&stream.eol())
return OUTCLASS;}else if(stream.match(delimiter)){state.tokenize=tokenOuter;return OUTCLASS;}else if(stream.match('{{')){return OUTCLASS;}else if(stream.match('{',false)){state.tokenize=tokenNestedExpr(0)
if(stream.current())return OUTCLASS;else return state.tokenize(stream,state)}else if(stream.match('}}')){return OUTCLASS;}else if(stream.match('}')){return ERRORCLASS;}else{stream.eat(/['"]/);}}
if(singleline){if(parserConf.singleLineStringErrors)
return ERRORCLASS;else
state.tokenize=tokenOuter;}
return OUTCLASS;}
tokenString.isString=true;return tokenString;}
function tokenStringFactory(delimiter,tokenOuter){while("rubf".indexOf(delimiter.charAt(0).toLowerCase())>=0)
delimiter=delimiter.substr(1);var singleline=delimiter.length==1;var OUTCLASS="string";function tokenString(stream,state){while(!stream.eol()){stream.eatWhile(/[^'"\\]/);if(stream.eat("\\")){stream.next();if(singleline&&stream.eol())
return OUTCLASS;}else if(stream.match(delimiter)){state.tokenize=tokenOuter;return OUTCLASS;}else{stream.eat(/['"]/);}}
if(singleline){if(parserConf.singleLineStringErrors)
return ERRORCLASS;else
state.tokenize=tokenOuter;}
return OUTCLASS;}
tokenString.isString=true;return tokenString;}
function pushPyScope(state){while(top(state).type!="py")state.scopes.pop()
state.scopes.push({offset:top(state).offset+conf.indentUnit,type:"py",align:null})}
function pushBracketScope(stream,state,type){var align=stream.match(/^([\s\[\{\(]|#.*)*$/,false)?null:stream.column()+1
state.scopes.push({offset:state.indent+hangingIndent,type:type,align:align})}
function dedent(stream,state){var indented=stream.indentation();while(state.scopes.length>1&&top(state).offset>indented){if(top(state).type!="py")return true;state.scopes.pop();}
return top(state).offset!=indented;}
function tokenLexer(stream,state){if(stream.sol())state.beginningOfLine=true;var style=state.tokenize(stream,state);var current=stream.current();if(state.beginningOfLine&&current=="@")
return stream.match(identifiers,false)?"meta":py3?"operator":ERRORCLASS;if(/\S/.test(current))state.beginningOfLine=false;if((style=="variable"||style=="builtin")&&state.lastToken=="meta")
style="meta";if(current=="pass"||current=="return")
state.dedent+=1;if(current=="lambda")state.lambda=true;if(current==":"&&!state.lambda&&top(state).type=="py")
pushPyScope(state);if(current.length==1&&!/string|comment/.test(style)){var delimiter_index="[({".indexOf(current);if(delimiter_index!=-1)
pushBracketScope(stream,state,"])}".slice(delimiter_index,delimiter_index+1));delimiter_index="])}".indexOf(current);if(delimiter_index!=-1){if(top(state).type==current)state.indent=state.scopes.pop().offset-hangingIndent
else return ERRORCLASS;}}
if(state.dedent>0&&stream.eol()&&top(state).type=="py"){if(state.scopes.length>1)state.scopes.pop();state.dedent-=1;}
return style;}
var external={startState:function(basecolumn){return{tokenize:tokenBase,scopes:[{offset:basecolumn||0,type:"py",align:null}],indent:basecolumn||0,lastToken:null,lambda:false,dedent:0};},token:function(stream,state){var addErr=state.errorToken;if(addErr)state.errorToken=false;var style=tokenLexer(stream,state);if(style&&style!="comment")
state.lastToken=(style=="keyword"||style=="punctuation")?stream.current():style;if(style=="punctuation")style=null;if(stream.eol()&&state.lambda)
state.lambda=false;return addErr?style+" "+ERRORCLASS:style;},indent:function(state,textAfter){if(state.tokenize!=tokenBase)
return state.tokenize.isString?CodeMirror.Pass:0;var scope=top(state),closing=scope.type==textAfter.charAt(0)
if(scope.align!=null)
return scope.align-(closing?1:0)
else
return scope.offset-(closing?hangingIndent:0)},electricInput:/^\s*[\}\]\)]$/,closeBrackets:{triples:"'\""},lineComment:"#",fold:"indent"};return external;});CodeMirror.defineMIME("text/x-python","python");var words=function(str){return str.split(" ");};CodeMirror.defineMIME("text/x-cython",{name:"python",extra_keywords:words("by cdef cimport cpdef ctypedef enum except "+"extern gil include nogil property public "+"readonly struct union DEF IF ELIF ELSE")});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode('shell',function(){var words={};function define(style,dict){for(var i=0;i<dict.length;i++){words[dict[i]]=style;}};var commonAtoms=["true","false"];var commonKeywords=["if","then","do","else","elif","while","until","for","in","esac","fi","fin","fil","done","exit","set","unset","export","function"];var commonCommands=["ab","awk","bash","beep","cat","cc","cd","chown","chmod","chroot","clear","cp","curl","cut","diff","echo","find","gawk","gcc","get","git","grep","hg","kill","killall","ln","ls","make","mkdir","openssl","mv","nc","nl","node","npm","ping","ps","restart","rm","rmdir","sed","service","sh","shopt","shred","source","sort","sleep","ssh","start","stop","su","sudo","svn","tee","telnet","top","touch","vi","vim","wall","wc","wget","who","write","yes","zsh"];CodeMirror.registerHelper("hintWords","shell",commonAtoms.concat(commonKeywords,commonCommands));define('atom',commonAtoms);define('keyword',commonKeywords);define('builtin',commonCommands);function tokenBase(stream,state){if(stream.eatSpace())return null;var sol=stream.sol();var ch=stream.next();if(ch==='\\'){stream.next();return null;}
if(ch==='\''||ch==='"'||ch==='`'){state.tokens.unshift(tokenString(ch,ch==="`"?"quote":"string"));return tokenize(stream,state);}
if(ch==='#'){if(sol&&stream.eat('!')){stream.skipToEnd();return'meta';}
stream.skipToEnd();return'comment';}
if(ch==='$'){state.tokens.unshift(tokenDollar);return tokenize(stream,state);}
if(ch==='+'||ch==='='){return'operator';}
if(ch==='-'){stream.eat('-');stream.eatWhile(/\w/);return'attribute';}
if(/\d/.test(ch)){stream.eatWhile(/\d/);if(stream.eol()||!/\w/.test(stream.peek())){return'number';}}
stream.eatWhile(/[\w-]/);var cur=stream.current();if(stream.peek()==='='&&/\w+/.test(cur))return'def';return words.hasOwnProperty(cur)?words[cur]:null;}
function tokenString(quote,style){var close=quote=="("?")":quote=="{"?"}":quote
return function(stream,state){var next,escaped=false;while((next=stream.next())!=null){if(next===close&&!escaped){state.tokens.shift();break;}else if(next==='$'&&!escaped&&quote!=="'"&&stream.peek()!=close){escaped=true;stream.backUp(1);state.tokens.unshift(tokenDollar);break;}else if(!escaped&&quote!==close&&next===quote){state.tokens.unshift(tokenString(quote,style))
return tokenize(stream,state)}else if(!escaped&&/['"]/.test(next)&&!/['"]/.test(quote)){state.tokens.unshift(tokenStringStart(next,"string"));stream.backUp(1);break;}
escaped=!escaped&&next==='\\';}
return style;};};function tokenStringStart(quote,style){return function(stream,state){state.tokens[0]=tokenString(quote,style)
stream.next()
return tokenize(stream,state)}}
var tokenDollar=function(stream,state){if(state.tokens.length>1)stream.eat('$');var ch=stream.next()
if(/['"({]/.test(ch)){state.tokens[0]=tokenString(ch,ch=="("?"quote":ch=="{"?"def":"string");return tokenize(stream,state);}
if(!/\d/.test(ch))stream.eatWhile(/\w/);state.tokens.shift();return'def';};function tokenize(stream,state){return(state.tokens[0]||tokenBase)(stream,state);};return{startState:function(){return{tokens:[]};},token:function(stream,state){return tokenize(stream,state);},closeBrackets:"()[]{}''\"\"``",lineComment:'#',fold:"brace"};});CodeMirror.defineMIME('text/x-sh','shell');CodeMirror.defineMIME('application/x-sh','shell');});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode('livescript',function(){var tokenBase=function(stream,state){var next_rule=state.next||"start";if(next_rule){state.next=state.next;var nr=Rules[next_rule];if(nr.splice){for(var i$=0;i$<nr.length;++i$){var r=nr[i$];if(r.regex&&stream.match(r.regex)){state.next=r.next||state.next;return r.token;}}
stream.next();return'error';}
if(stream.match(r=Rules[next_rule])){if(r.regex&&stream.match(r.regex)){state.next=r.next;return r.token;}else{stream.next();return'error';}}}
stream.next();return'error';};var external={startState:function(){return{next:'start',lastToken:{style:null,indent:0,content:""}};},token:function(stream,state){while(stream.pos==stream.start)
var style=tokenBase(stream,state);state.lastToken={style:style,indent:stream.indentation(),content:stream.current()};return style.replace(/\./g,' ');},indent:function(state){var indentation=state.lastToken.indent;if(state.lastToken.content.match(indenter)){indentation+=2;}
return indentation;}};return external;});var identifier='(?![\\d\\s])[$\\w\\xAA-\\uFFDC](?:(?!\\s)[$\\w\\xAA-\\uFFDC]|-[A-Za-z])*';var indenter=RegExp('(?:[({[=:]|[-~]>|\\b(?:e(?:lse|xport)|d(?:o|efault)|t(?:ry|hen)|finally|import(?:\\s*all)?|const|var|let|new|catch(?:\\s*'+identifier+')?))\\s*$');var keywordend='(?![$\\w]|-[A-Za-z]|\\s*:(?![:=]))';var stringfill={token:'string',regex:'.+'};var Rules={start:[{token:'comment.doc',regex:'/\\*',next:'comment'},{token:'comment',regex:'#.*'},{token:'keyword',regex:'(?:t(?:h(?:is|row|en)|ry|ypeof!?)|c(?:on(?:tinue|st)|a(?:se|tch)|lass)|i(?:n(?:stanceof)?|mp(?:ort(?:\\s+all)?|lements)|[fs])|d(?:e(?:fault|lete|bugger)|o)|f(?:or(?:\\s+own)?|inally|unction)|s(?:uper|witch)|e(?:lse|x(?:tends|port)|val)|a(?:nd|rguments)|n(?:ew|ot)|un(?:less|til)|w(?:hile|ith)|o[fr]|return|break|let|var|loop)'+keywordend},{token:'constant.language',regex:'(?:true|false|yes|no|on|off|null|void|undefined)'+keywordend},{token:'invalid.illegal',regex:'(?:p(?:ackage|r(?:ivate|otected)|ublic)|i(?:mplements|nterface)|enum|static|yield)'+keywordend},{token:'language.support.class',regex:'(?:R(?:e(?:gExp|ferenceError)|angeError)|S(?:tring|yntaxError)|E(?:rror|valError)|Array|Boolean|Date|Function|Number|Object|TypeError|URIError)'+keywordend},{token:'language.support.function',regex:'(?:is(?:NaN|Finite)|parse(?:Int|Float)|Math|JSON|(?:en|de)codeURI(?:Component)?)'+keywordend},{token:'variable.language',regex:'(?:t(?:hat|il|o)|f(?:rom|allthrough)|it|by|e)'+keywordend},{token:'identifier',regex:identifier+'\\s*:(?![:=])'},{token:'variable',regex:identifier},{token:'keyword.operator',regex:'(?:\\.{3}|\\s+\\?)'},{token:'keyword.variable',regex:'(?:@+|::|\\.\\.)',next:'key'},{token:'keyword.operator',regex:'\\.\\s*',next:'key'},{token:'string',regex:'\\\\\\S[^\\s,;)}\\]]*'},{token:'string.doc',regex:'\'\'\'',next:'qdoc'},{token:'string.doc',regex:'"""',next:'qqdoc'},{token:'string',regex:'\'',next:'qstring'},{token:'string',regex:'"',next:'qqstring'},{token:'string',regex:'`',next:'js'},{token:'string',regex:'<\\[',next:'words'},{token:'string.regex',regex:'//',next:'heregex'},{token:'string.regex',regex:'\\/(?:[^[\\/\\n\\\\]*(?:(?:\\\\.|\\[[^\\]\\n\\\\]*(?:\\\\.[^\\]\\n\\\\]*)*\\])[^[\\/\\n\\\\]*)*)\\/[gimy$]{0,4}',next:'key'},{token:'constant.numeric',regex:'(?:0x[\\da-fA-F][\\da-fA-F_]*|(?:[2-9]|[12]\\d|3[0-6])r[\\da-zA-Z][\\da-zA-Z_]*|(?:\\d[\\d_]*(?:\\.\\d[\\d_]*)?|\\.\\d[\\d_]*)(?:e[+-]?\\d[\\d_]*)?[\\w$]*)'},{token:'lparen',regex:'[({[]'},{token:'rparen',regex:'[)}\\]]',next:'key'},{token:'keyword.operator',regex:'\\S+'},{token:'text',regex:'\\s+'}],heregex:[{token:'string.regex',regex:'.*?//[gimy$?]{0,4}',next:'start'},{token:'string.regex',regex:'\\s*#{'},{token:'comment.regex',regex:'\\s+(?:#.*)?'},{token:'string.regex',regex:'\\S+'}],key:[{token:'keyword.operator',regex:'[.?@!]+'},{token:'identifier',regex:identifier,next:'start'},{token:'text',regex:'',next:'start'}],comment:[{token:'comment.doc',regex:'.*?\\*/',next:'start'},{token:'comment.doc',regex:'.+'}],qdoc:[{token:'string',regex:".*?'''",next:'key'},stringfill],qqdoc:[{token:'string',regex:'.*?"""',next:'key'},stringfill],qstring:[{token:'string',regex:'[^\\\\\']*(?:\\\\.[^\\\\\']*)*\'',next:'key'},stringfill],qqstring:[{token:'string',regex:'[^\\\\"]*(?:\\\\.[^\\\\"]*)*"',next:'key'},stringfill],js:[{token:'string',regex:'[^\\\\`]*(?:\\\\.[^\\\\`]*)*`',next:'key'},stringfill],words:[{token:'string',regex:'.*?\\]>',next:'key'},stringfill]};for(var idx in Rules){var r=Rules[idx];if(r.splice){for(var i=0,len=r.length;i<len;++i){var rr=r[i];if(typeof rr.regex==='string'){Rules[idx][i].regex=new RegExp('^'+rr.regex);}}}else if(typeof rr.regex==='string'){Rules[idx].regex=new RegExp('^'+r.regex);}}
CodeMirror.defineMIME('text/x-livescript','livescript');});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"),require("../xml/xml"),require("../meta"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror","../xml/xml","../meta"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("markdown",function(cmCfg,modeCfg){var htmlMode=CodeMirror.getMode(cmCfg,"text/html");var htmlModeMissing=htmlMode.name=="null"
function getMode(name){if(CodeMirror.findModeByName){var found=CodeMirror.findModeByName(name);if(found)name=found.mime||found.mimes[0];}
var mode=CodeMirror.getMode(cmCfg,name);return mode.name=="null"?null:mode;}
if(modeCfg.highlightFormatting===undefined)
modeCfg.highlightFormatting=false;if(modeCfg.maxBlockquoteDepth===undefined)
modeCfg.maxBlockquoteDepth=0;if(modeCfg.taskLists===undefined)modeCfg.taskLists=false;if(modeCfg.strikethrough===undefined)
modeCfg.strikethrough=false;if(modeCfg.emoji===undefined)
modeCfg.emoji=false;if(modeCfg.fencedCodeBlockHighlighting===undefined)
modeCfg.fencedCodeBlockHighlighting=true;if(modeCfg.xml===undefined)
modeCfg.xml=true;if(modeCfg.tokenTypeOverrides===undefined)
modeCfg.tokenTypeOverrides={};var tokenTypes={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var tokenType in tokenTypes){if(tokenTypes.hasOwnProperty(tokenType)&&modeCfg.tokenTypeOverrides[tokenType]){tokenTypes[tokenType]=modeCfg.tokenTypeOverrides[tokenType];}}
var hrRE=/^([*\-_])(?:\s*\1){2,}\s*$/,listRE=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,taskListRE=/^\[(x| )\](?=\s)/i,atxHeaderRE=modeCfg.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,setextHeaderRE=/^ *(?:\={1,}|-{1,})\s*$/,textRE=/^[^#!\[\]*_\\<>` "'(~:]+/,fencedCodeRE=/^(~~~+|```+)[ \t]*([\w+#-]*)[^\n`]*$/,linkDefRE=/^\s*\[[^\]]+?\]:.*$/,punctuation=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/,expandedTab="    "
function switchInline(stream,state,f){state.f=state.inline=f;return f(stream,state);}
function switchBlock(stream,state,f){state.f=state.block=f;return f(stream,state);}
function lineIsEmpty(line){return!line||!/\S/.test(line.string)}
function blankLine(state){state.linkTitle=false;state.linkHref=false;state.linkText=false;state.em=false;state.strong=false;state.strikethrough=false;state.quote=0;state.indentedCode=false;if(state.f==htmlBlock){var exit=htmlModeMissing
if(!exit){var inner=CodeMirror.innerMode(htmlMode,state.htmlState)
exit=inner.mode.name=="xml"&&inner.state.tagStart===null&&(!inner.state.context&&inner.state.tokenize.isInText)}
if(exit){state.f=inlineNormal;state.block=blockNormal;state.htmlState=null;}}
state.trailingSpace=0;state.trailingSpaceNewLine=false;state.prevLine=state.thisLine
state.thisLine={stream:null}
return null;}
function blockNormal(stream,state){var firstTokenOnLine=stream.column()===state.indentation;var prevLineLineIsEmpty=lineIsEmpty(state.prevLine.stream);var prevLineIsIndentedCode=state.indentedCode;var prevLineIsHr=state.prevLine.hr;var prevLineIsList=state.list!==false;var maxNonCodeIndentation=(state.listStack[state.listStack.length-1]||0)+3;state.indentedCode=false;var lineIndentation=state.indentation;if(state.indentationDiff===null){state.indentationDiff=state.indentation;if(prevLineIsList){state.em=false;state.strong=false;state.code=false;state.strikethrough=false;state.list=null;while(lineIndentation<state.listStack[state.listStack.length-1]){state.listStack.pop();if(state.listStack.length){state.indentation=state.listStack[state.listStack.length-1];}else{state.list=false;}}
if(state.list!==false){state.indentationDiff=lineIndentation-state.listStack[state.listStack.length-1]}}}
var allowsInlineContinuation=(!prevLineLineIsEmpty&&!prevLineIsHr&&!state.prevLine.header&&(!prevLineIsList||!prevLineIsIndentedCode)&&!state.prevLine.fencedCodeEnd);var isHr=(state.list===false||prevLineIsHr||prevLineLineIsEmpty)&&state.indentation<=maxNonCodeIndentation&&stream.match(hrRE);var match=null;if(state.indentationDiff>=4&&(prevLineIsIndentedCode||state.prevLine.fencedCodeEnd||state.prevLine.header||prevLineLineIsEmpty)){stream.skipToEnd();state.indentedCode=true;return tokenTypes.code;}else if(stream.eatSpace()){return null;}else if(firstTokenOnLine&&state.indentation<=maxNonCodeIndentation&&(match=stream.match(atxHeaderRE))&&match[1].length<=6){state.quote=0;state.header=match[1].length;state.thisLine.header=true;if(modeCfg.highlightFormatting)state.formatting="header";state.f=state.inline;return getType(state);}else if(state.indentation<=maxNonCodeIndentation&&stream.eat('>')){state.quote=firstTokenOnLine?1:state.quote+1;if(modeCfg.highlightFormatting)state.formatting="quote";stream.eatSpace();return getType(state);}else if(!isHr&&!state.setext&&firstTokenOnLine&&state.indentation<=maxNonCodeIndentation&&(match=stream.match(listRE))){var listType=match[1]?"ol":"ul";state.indentation=lineIndentation+stream.current().length;state.list=true;state.quote=0;state.listStack.push(state.indentation);if(modeCfg.taskLists&&stream.match(taskListRE,false)){state.taskList=true;}
state.f=state.inline;if(modeCfg.highlightFormatting)state.formatting=["list","list-"+listType];return getType(state);}else if(firstTokenOnLine&&state.indentation<=maxNonCodeIndentation&&(match=stream.match(fencedCodeRE,true))){state.quote=0;state.fencedEndRE=new RegExp(match[1]+"+ *$");state.localMode=modeCfg.fencedCodeBlockHighlighting&&getMode(match[2]);if(state.localMode)state.localState=CodeMirror.startState(state.localMode);state.f=state.block=local;if(modeCfg.highlightFormatting)state.formatting="code-block";state.code=-1
return getType(state);}else if(state.setext||((!allowsInlineContinuation||!prevLineIsList)&&!state.quote&&state.list===false&&!state.code&&!isHr&&!linkDefRE.test(stream.string)&&(match=stream.lookAhead(1))&&(match=match.match(setextHeaderRE)))){if(!state.setext){state.header=match[0].charAt(0)=='='?1:2;state.setext=state.header;}else{state.header=state.setext;state.setext=0;stream.skipToEnd();if(modeCfg.highlightFormatting)state.formatting="header";}
state.thisLine.header=true;state.f=state.inline;return getType(state);}else if(isHr){stream.skipToEnd();state.hr=true;state.thisLine.hr=true;return tokenTypes.hr;}else if(stream.peek()==='['){return switchInline(stream,state,footnoteLink);}
return switchInline(stream,state,state.inline);}
function htmlBlock(stream,state){var style=htmlMode.token(stream,state.htmlState);if(!htmlModeMissing){var inner=CodeMirror.innerMode(htmlMode,state.htmlState)
if((inner.mode.name=="xml"&&inner.state.tagStart===null&&(!inner.state.context&&inner.state.tokenize.isInText))||(state.md_inside&&stream.current().indexOf(">")>-1)){state.f=inlineNormal;state.block=blockNormal;state.htmlState=null;}}
return style;}
function local(stream,state){var currListInd=state.listStack[state.listStack.length-1]||0;var hasExitedList=state.indentation<currListInd;var maxFencedEndInd=currListInd+3;if(state.fencedEndRE&&state.indentation<=maxFencedEndInd&&(hasExitedList||stream.match(state.fencedEndRE))){if(modeCfg.highlightFormatting)state.formatting="code-block";var returnType;if(!hasExitedList)returnType=getType(state)
state.localMode=state.localState=null;state.block=blockNormal;state.f=inlineNormal;state.fencedEndRE=null;state.code=0
state.thisLine.fencedCodeEnd=true;if(hasExitedList)return switchBlock(stream,state,state.block);return returnType;}else if(state.localMode){return state.localMode.token(stream,state.localState);}else{stream.skipToEnd();return tokenTypes.code;}}
function getType(state){var styles=[];if(state.formatting){styles.push(tokenTypes.formatting);if(typeof state.formatting==="string")state.formatting=[state.formatting];for(var i=0;i<state.formatting.length;i++){styles.push(tokenTypes.formatting+"-"+state.formatting[i]);if(state.formatting[i]==="header"){styles.push(tokenTypes.formatting+"-"+state.formatting[i]+"-"+state.header);}
if(state.formatting[i]==="quote"){if(!modeCfg.maxBlockquoteDepth||modeCfg.maxBlockquoteDepth>=state.quote){styles.push(tokenTypes.formatting+"-"+state.formatting[i]+"-"+state.quote);}else{styles.push("error");}}}}
if(state.taskOpen){styles.push("meta");return styles.length?styles.join(' '):null;}
if(state.taskClosed){styles.push("property");return styles.length?styles.join(' '):null;}
if(state.linkHref){styles.push(tokenTypes.linkHref,"url");}else{if(state.strong){styles.push(tokenTypes.strong);}
if(state.em){styles.push(tokenTypes.em);}
if(state.strikethrough){styles.push(tokenTypes.strikethrough);}
if(state.emoji){styles.push(tokenTypes.emoji);}
if(state.linkText){styles.push(tokenTypes.linkText);}
if(state.code){styles.push(tokenTypes.code);}
if(state.image){styles.push(tokenTypes.image);}
if(state.imageAltText){styles.push(tokenTypes.imageAltText,"link");}
if(state.imageMarker){styles.push(tokenTypes.imageMarker);}}
if(state.header){styles.push(tokenTypes.header,tokenTypes.header+"-"+state.header);}
if(state.quote){styles.push(tokenTypes.quote);if(!modeCfg.maxBlockquoteDepth||modeCfg.maxBlockquoteDepth>=state.quote){styles.push(tokenTypes.quote+"-"+state.quote);}else{styles.push(tokenTypes.quote+"-"+modeCfg.maxBlockquoteDepth);}}
if(state.list!==false){var listMod=(state.listStack.length-1)%3;if(!listMod){styles.push(tokenTypes.list1);}else if(listMod===1){styles.push(tokenTypes.list2);}else{styles.push(tokenTypes.list3);}}
if(state.trailingSpaceNewLine){styles.push("trailing-space-new-line");}else if(state.trailingSpace){styles.push("trailing-space-"+(state.trailingSpace%2?"a":"b"));}
return styles.length?styles.join(' '):null;}
function handleText(stream,state){if(stream.match(textRE,true)){return getType(state);}
return undefined;}
function inlineNormal(stream,state){var style=state.text(stream,state);if(typeof style!=='undefined')
return style;if(state.list){state.list=null;return getType(state);}
if(state.taskList){var taskOpen=stream.match(taskListRE,true)[1]===" ";if(taskOpen)state.taskOpen=true;else state.taskClosed=true;if(modeCfg.highlightFormatting)state.formatting="task";state.taskList=false;return getType(state);}
state.taskOpen=false;state.taskClosed=false;if(state.header&&stream.match(/^#+$/,true)){if(modeCfg.highlightFormatting)state.formatting="header";return getType(state);}
var ch=stream.next();if(state.linkTitle){state.linkTitle=false;var matchCh=ch;if(ch==='('){matchCh=')';}
matchCh=(matchCh+'').replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1");var regex='^\\s*(?:[^'+matchCh+'\\\\]+|\\\\\\\\|\\\\.)'+matchCh;if(stream.match(new RegExp(regex),true)){return tokenTypes.linkHref;}}
if(ch==='`'){var previousFormatting=state.formatting;if(modeCfg.highlightFormatting)state.formatting="code";stream.eatWhile('`');var count=stream.current().length
if(state.code==0&&(!state.quote||count==1)){state.code=count
return getType(state)}else if(count==state.code){var t=getType(state)
state.code=0
return t}else{state.formatting=previousFormatting
return getType(state)}}else if(state.code){return getType(state);}
if(ch==='\\'){stream.next();if(modeCfg.highlightFormatting){var type=getType(state);var formattingEscape=tokenTypes.formatting+"-escape";return type?type+" "+formattingEscape:formattingEscape;}}
if(ch==='!'&&stream.match(/\[[^\]]*\] ?(?:\(|\[)/,false)){state.imageMarker=true;state.image=true;if(modeCfg.highlightFormatting)state.formatting="image";return getType(state);}
if(ch==='['&&state.imageMarker&&stream.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,false)){state.imageMarker=false;state.imageAltText=true
if(modeCfg.highlightFormatting)state.formatting="image";return getType(state);}
if(ch===']'&&state.imageAltText){if(modeCfg.highlightFormatting)state.formatting="image";var type=getType(state);state.imageAltText=false;state.image=false;state.inline=state.f=linkHref;return type;}
if(ch==='['&&!state.image){if(state.linkText&&stream.match(/^.*?\]/))return getType(state)
state.linkText=true;if(modeCfg.highlightFormatting)state.formatting="link";return getType(state);}
if(ch===']'&&state.linkText){if(modeCfg.highlightFormatting)state.formatting="link";var type=getType(state);state.linkText=false;state.inline=state.f=stream.match(/\(.*?\)| ?\[.*?\]/,false)?linkHref:inlineNormal
return type;}
if(ch==='<'&&stream.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,false)){state.f=state.inline=linkInline;if(modeCfg.highlightFormatting)state.formatting="link";var type=getType(state);if(type){type+=" ";}else{type="";}
return type+tokenTypes.linkInline;}
if(ch==='<'&&stream.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,false)){state.f=state.inline=linkInline;if(modeCfg.highlightFormatting)state.formatting="link";var type=getType(state);if(type){type+=" ";}else{type="";}
return type+tokenTypes.linkEmail;}
if(modeCfg.xml&&ch==='<'&&stream.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,false)){var end=stream.string.indexOf(">",stream.pos);if(end!=-1){var atts=stream.string.substring(stream.start,end);if(/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(atts))state.md_inside=true;}
stream.backUp(1);state.htmlState=CodeMirror.startState(htmlMode);return switchBlock(stream,state,htmlBlock);}
if(modeCfg.xml&&ch==='<'&&stream.match(/^\/\w*?>/)){state.md_inside=false;return"tag";}else if(ch==="*"||ch==="_"){var len=1,before=stream.pos==1?" ":stream.string.charAt(stream.pos-2)
while(len<3&&stream.eat(ch))len++
var after=stream.peek()||" "
var leftFlanking=!/\s/.test(after)&&(!punctuation.test(after)||/\s/.test(before)||punctuation.test(before))
var rightFlanking=!/\s/.test(before)&&(!punctuation.test(before)||/\s/.test(after)||punctuation.test(after))
var setEm=null,setStrong=null
if(len%2){if(!state.em&&leftFlanking&&(ch==="*"||!rightFlanking||punctuation.test(before)))
setEm=true
else if(state.em==ch&&rightFlanking&&(ch==="*"||!leftFlanking||punctuation.test(after)))
setEm=false}
if(len>1){if(!state.strong&&leftFlanking&&(ch==="*"||!rightFlanking||punctuation.test(before)))
setStrong=true
else if(state.strong==ch&&rightFlanking&&(ch==="*"||!leftFlanking||punctuation.test(after)))
setStrong=false}
if(setStrong!=null||setEm!=null){if(modeCfg.highlightFormatting)state.formatting=setEm==null?"strong":setStrong==null?"em":"strong em"
if(setEm===true)state.em=ch
if(setStrong===true)state.strong=ch
var t=getType(state)
if(setEm===false)state.em=false
if(setStrong===false)state.strong=false
return t}}else if(ch===' '){if(stream.eat('*')||stream.eat('_')){if(stream.peek()===' '){return getType(state);}else{stream.backUp(1);}}}
if(modeCfg.strikethrough){if(ch==='~'&&stream.eatWhile(ch)){if(state.strikethrough){if(modeCfg.highlightFormatting)state.formatting="strikethrough";var t=getType(state);state.strikethrough=false;return t;}else if(stream.match(/^[^\s]/,false)){state.strikethrough=true;if(modeCfg.highlightFormatting)state.formatting="strikethrough";return getType(state);}}else if(ch===' '){if(stream.match(/^~~/,true)){if(stream.peek()===' '){return getType(state);}else{stream.backUp(2);}}}}
if(modeCfg.emoji&&ch===":"&&stream.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){state.emoji=true;if(modeCfg.highlightFormatting)state.formatting="emoji";var retType=getType(state);state.emoji=false;return retType;}
if(ch===' '){if(stream.match(/^ +$/,false)){state.trailingSpace++;}else if(state.trailingSpace){state.trailingSpaceNewLine=true;}}
return getType(state);}
function linkInline(stream,state){var ch=stream.next();if(ch===">"){state.f=state.inline=inlineNormal;if(modeCfg.highlightFormatting)state.formatting="link";var type=getType(state);if(type){type+=" ";}else{type="";}
return type+tokenTypes.linkInline;}
stream.match(/^[^>]+/,true);return tokenTypes.linkInline;}
function linkHref(stream,state){if(stream.eatSpace()){return null;}
var ch=stream.next();if(ch==='('||ch==='['){state.f=state.inline=getLinkHrefInside(ch==="("?")":"]");if(modeCfg.highlightFormatting)state.formatting="link-string";state.linkHref=true;return getType(state);}
return'error';}
var linkRE={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/}
function getLinkHrefInside(endChar){return function(stream,state){var ch=stream.next();if(ch===endChar){state.f=state.inline=inlineNormal;if(modeCfg.highlightFormatting)state.formatting="link-string";var returnState=getType(state);state.linkHref=false;return returnState;}
stream.match(linkRE[endChar])
state.linkHref=true;return getType(state);};}
function footnoteLink(stream,state){if(stream.match(/^([^\]\\]|\\.)*\]:/,false)){state.f=footnoteLinkInside;stream.next();if(modeCfg.highlightFormatting)state.formatting="link";state.linkText=true;return getType(state);}
return switchInline(stream,state,inlineNormal);}
function footnoteLinkInside(stream,state){if(stream.match(/^\]:/,true)){state.f=state.inline=footnoteUrl;if(modeCfg.highlightFormatting)state.formatting="link";var returnType=getType(state);state.linkText=false;return returnType;}
stream.match(/^([^\]\\]|\\.)+/,true);return tokenTypes.linkText;}
function footnoteUrl(stream,state){if(stream.eatSpace()){return null;}
stream.match(/^[^\s]+/,true);if(stream.peek()===undefined){state.linkTitle=true;}else{stream.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,true);}
state.f=state.inline=inlineNormal;return tokenTypes.linkHref+" url";}
var mode={startState:function(){return{f:blockNormal,prevLine:{stream:null},thisLine:{stream:null},block:blockNormal,htmlState:null,indentation:0,inline:inlineNormal,text:handleText,formatting:false,linkText:false,linkHref:false,linkTitle:false,code:0,em:false,strong:false,header:0,setext:0,hr:false,taskList:false,list:false,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:false,strikethrough:false,emoji:false,fencedEndRE:null};},copyState:function(s){return{f:s.f,prevLine:s.prevLine,thisLine:s.thisLine,block:s.block,htmlState:s.htmlState&&CodeMirror.copyState(htmlMode,s.htmlState),indentation:s.indentation,localMode:s.localMode,localState:s.localMode?CodeMirror.copyState(s.localMode,s.localState):null,inline:s.inline,text:s.text,formatting:false,linkText:s.linkText,linkTitle:s.linkTitle,linkHref:s.linkHref,code:s.code,em:s.em,strong:s.strong,strikethrough:s.strikethrough,emoji:s.emoji,header:s.header,setext:s.setext,hr:s.hr,taskList:s.taskList,list:s.list,listStack:s.listStack.slice(0),quote:s.quote,indentedCode:s.indentedCode,trailingSpace:s.trailingSpace,trailingSpaceNewLine:s.trailingSpaceNewLine,md_inside:s.md_inside,fencedEndRE:s.fencedEndRE};},token:function(stream,state){state.formatting=false;if(stream!=state.thisLine.stream){state.header=0;state.hr=false;if(stream.match(/^\s*$/,true)){blankLine(state);return null;}
state.prevLine=state.thisLine
state.thisLine={stream:stream}
state.taskList=false;state.trailingSpace=0;state.trailingSpaceNewLine=false;if(!state.localState){state.f=state.block;if(state.f!=htmlBlock){var indentation=stream.match(/^\s*/,true)[0].replace(/\t/g,expandedTab).length;state.indentation=indentation;state.indentationDiff=null;if(indentation>0)return null;}}}
return state.f(stream,state);},innerMode:function(state){if(state.block==htmlBlock)return{state:state.htmlState,mode:htmlMode};if(state.localState)return{state:state.localState,mode:state.localMode};return{state:state,mode:mode};},indent:function(state,textAfter,line){if(state.block==htmlBlock&&htmlMode.indent)return htmlMode.indent(state.htmlState,textAfter,line)
if(state.localState&&state.localMode.indent)return state.localMode.indent(state.localState,textAfter,line)
return CodeMirror.Pass},blankLine:blankLine,getType:getType,blockCommentStart:"<!--",blockCommentEnd:"-->",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return mode;},"xml");CodeMirror.defineMIME("text/markdown","markdown");CodeMirror.defineMIME("text/x-markdown","markdown");});(function(mod){if(typeof exports==="object"&&typeof module==="object")
mod(require("../../lib/codemirror"));else if(typeof define==="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("clojure",function(options){var atoms=["false","nil","true"];var specialForms=[".","catch","def","do","if","monitor-enter","monitor-exit","new","quote","recur","set!","throw","try","var"];var coreSymbols=["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","cast","cat","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"];var haveBodyParameter=["->","->>","as->","binding","bound-fn","case","catch","comment","cond","cond->","cond->>","condp","def","definterface","defmethod","defn","defmacro","defprotocol","defrecord","defstruct","deftype","do","doseq","dotimes","doto","extend","extend-protocol","extend-type","fn","for","future","if","if-let","if-not","if-some","let","letfn","locking","loop","ns","proxy","reify","struct-map","some->","some->>","try","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn"];CodeMirror.registerHelper("hintWords","clojure",[].concat(atoms,specialForms,coreSymbols));var atom=createLookupMap(atoms);var specialForm=createLookupMap(specialForms);var coreSymbol=createLookupMap(coreSymbols);var hasBodyParameter=createLookupMap(haveBodyParameter);var delimiter=/^(?:[\\\[\]\s"(),;@^`{}~]|$)/;var numberLiteral=/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/;var characterLiteral=/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/;var qualifiedSymbol=/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/;function base(stream,state){if(stream.eatSpace()||stream.eat(","))return["space",null];if(stream.match(numberLiteral))return[null,"number"];if(stream.match(characterLiteral))return[null,"string-2"];if(stream.eat(/^"/))return(state.tokenize=inString)(stream,state);if(stream.eat(/^[(\[{]/))return["open","bracket"];if(stream.eat(/^[)\]}]/))return["close","bracket"];if(stream.eat(/^;/)){stream.skipToEnd();return["space","comment"];}
if(stream.eat(/^[#'@^`~]/))return[null,"meta"];var matches=stream.match(qualifiedSymbol);var symbol=matches&&matches[0];if(!symbol){stream.next();stream.eatWhile(function(c){return!is(c,delimiter);});return[null,"error"];}
if(symbol==="comment"&&state.lastToken==="(")
return(state.tokenize=inComment)(stream,state);if(is(symbol,atom)||symbol.charAt(0)===":")return["symbol","atom"];if(is(symbol,specialForm)||is(symbol,coreSymbol))return["symbol","keyword"];if(state.lastToken==="(")return["symbol","builtin"];return["symbol","variable"];}
function inString(stream,state){var escaped=false,next;while(next=stream.next()){if(next==="\""&&!escaped){state.tokenize=base;break;}
escaped=!escaped&&next==="\\";}
return[null,"string"];}
function inComment(stream,state){var parenthesisCount=1;var next;while(next=stream.next()){if(next===")")parenthesisCount--;if(next==="(")parenthesisCount++;if(parenthesisCount===0){stream.backUp(1);state.tokenize=base;break;}}
return["space","comment"];}
function createLookupMap(words){var obj={};for(var i=0;i<words.length;++i)obj[words[i]]=true;return obj;}
function is(value,test){if(test instanceof RegExp)return test.test(value);if(test instanceof Object)return test.propertyIsEnumerable(value);}
return{startState:function(){return{ctx:{prev:null,start:0,indentTo:0},lastToken:null,tokenize:base};},token:function(stream,state){if(stream.sol()&&(typeof state.ctx.indentTo!=="number"))
state.ctx.indentTo=state.ctx.start+1;var typeStylePair=state.tokenize(stream,state);var type=typeStylePair[0];var style=typeStylePair[1];var current=stream.current();if(type!=="space"){if(state.lastToken==="("&&state.ctx.indentTo===null){if(type==="symbol"&&is(current,hasBodyParameter))
state.ctx.indentTo=state.ctx.start+options.indentUnit;else state.ctx.indentTo="next";}else if(state.ctx.indentTo==="next"){state.ctx.indentTo=stream.column();}
state.lastToken=current;}
if(type==="open")
state.ctx={prev:state.ctx,start:stream.column(),indentTo:null};else if(type==="close")state.ctx=state.ctx.prev||state.ctx;return style;},indent:function(state){var i=state.ctx.indentTo;return(typeof i==="number")?i:state.ctx.start+1;},closeBrackets:{pairs:"()[]{}\"\""},lineComment:";;"};});CodeMirror.defineMIME("text/x-clojure","clojure");CodeMirror.defineMIME("text/x-clojurescript","clojure");CodeMirror.defineMIME("application/edn","clojure");});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"))
else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror","../xml/xml","../javascript/javascript"],mod)
else
mod(CodeMirror)})(function(CodeMirror){"use strict"
function Context(state,mode,depth,prev){this.state=state;this.mode=mode;this.depth=depth;this.prev=prev}
function copyContext(context){return new Context(CodeMirror.copyState(context.mode,context.state),context.mode,context.depth,context.prev&&copyContext(context.prev))}
CodeMirror.defineMode("jsx",function(config,modeConfig){var xmlMode=CodeMirror.getMode(config,{name:"xml",allowMissing:true,multilineTagIndentPastTag:false,allowMissingTagName:true})
var jsMode=CodeMirror.getMode(config,modeConfig&&modeConfig.base||"javascript")
function flatXMLIndent(state){var tagName=state.tagName
state.tagName=null
var result=xmlMode.indent(state,"","")
state.tagName=tagName
return result}
function token(stream,state){if(state.context.mode==xmlMode)
return xmlToken(stream,state,state.context)
else
return jsToken(stream,state,state.context)}
function xmlToken(stream,state,cx){if(cx.depth==2){if(stream.match(/^.*?\*\//))cx.depth=1
else stream.skipToEnd()
return"comment"}
if(stream.peek()=="{"){xmlMode.skipAttribute(cx.state)
var indent=flatXMLIndent(cx.state),xmlContext=cx.state.context
if(xmlContext&&stream.match(/^[^>]*>\s*$/,false)){while(xmlContext.prev&&!xmlContext.startOfLine)
xmlContext=xmlContext.prev
if(xmlContext.startOfLine)indent-=config.indentUnit
else if(cx.prev.state.lexical)indent=cx.prev.state.lexical.indented}else if(cx.depth==1){indent+=config.indentUnit}
state.context=new Context(CodeMirror.startState(jsMode,indent),jsMode,0,state.context)
return null}
if(cx.depth==1){if(stream.peek()=="<"){xmlMode.skipAttribute(cx.state)
state.context=new Context(CodeMirror.startState(xmlMode,flatXMLIndent(cx.state)),xmlMode,0,state.context)
return null}else if(stream.match("//")){stream.skipToEnd()
return"comment"}else if(stream.match("/*")){cx.depth=2
return token(stream,state)}}
var style=xmlMode.token(stream,cx.state),cur=stream.current(),stop
if(/\btag\b/.test(style)){if(/>$/.test(cur)){if(cx.state.context)cx.depth=0
else state.context=state.context.prev}else if(/^</.test(cur)){cx.depth=1}}else if(!style&&(stop=cur.indexOf("{"))>-1){stream.backUp(cur.length-stop)}
return style}
function jsToken(stream,state,cx){if(stream.peek()=="<"&&jsMode.expressionAllowed(stream,cx.state)){jsMode.skipExpression(cx.state)
state.context=new Context(CodeMirror.startState(xmlMode,jsMode.indent(cx.state,"","")),xmlMode,0,state.context)
return null}
var style=jsMode.token(stream,cx.state)
if(!style&&cx.depth!=null){var cur=stream.current()
if(cur=="{"){cx.depth++}else if(cur=="}"){if(--cx.depth==0)state.context=state.context.prev}}
return style}
return{startState:function(){return{context:new Context(CodeMirror.startState(jsMode),jsMode)}},copyState:function(state){return{context:copyContext(state.context)}},token:token,indent:function(state,textAfter,fullLine){return state.context.mode.indent(state.context.state,textAfter,fullLine)},innerMode:function(state){return state.context}}},"xml","javascript")
CodeMirror.defineMIME("text/jsx","jsx")
CodeMirror.defineMIME("text/typescript-jsx",{name:"jsx",base:{name:"javascript",typescript:true}})});import'./CoverageModel.js';import'./CoverageListView.js';import'./CoverageView.js';import'./CoverageDecorationManager.js';import*as CoverageDecorationManager from'./CoverageDecorationManager.js';import*as CoverageListView from'./CoverageListView.js';import*as CoverageModel from'./CoverageModel.js';import*as CoverageView from'./CoverageView.js';export{CoverageDecorationManager,CoverageListView,CoverageModel,CoverageView,};export class CoverageView extends UI.VBox{constructor(){super(true);this._model=null;this._decorationManager=null;this._resourceTreeModel=null;this.registerRequiredCSS('coverage/coverageView.css');const toolbarContainer=this.contentElement.createChild('div','coverage-toolbar-container');const toolbar=new UI.Toolbar('coverage-toolbar',toolbarContainer);this._coverageType=null;this._coverageTypeComboBox=new UI.ToolbarComboBox(null,ls`Choose coverage granularity: Per function has low overhead, per block has significant overhead.`);const coverageTypes=[{label:ls`Per function`,value:Coverage.CoverageType.JavaScript|Coverage.CoverageType.JavaScriptPerFunction,},{label:ls`Per block`,value:Coverage.CoverageType.JavaScript,},];for(const type of coverageTypes){this._coverageTypeComboBox.addOption(this._coverageTypeComboBox.createOption(type.label,type.value));}
this._coverageTypeComboBox.setSelectedIndex(0);this._coverageTypeComboBox.setEnabled(true);toolbar.appendToolbarItem(this._coverageTypeComboBox);this._toggleRecordAction=(UI.actionRegistry.action('coverage.toggle-recording'));this._toggleRecordButton=UI.Toolbar.createActionButton(this._toggleRecordAction);toolbar.appendToolbarItem(this._toggleRecordButton);const mainTarget=SDK.targetManager.mainTarget();const mainTargetSupportsRecordOnReload=mainTarget&&mainTarget.model(SDK.ResourceTreeModel);if(mainTargetSupportsRecordOnReload){const startWithReloadAction=(UI.actionRegistry.action('coverage.start-with-reload'));this._startWithReloadButton=UI.Toolbar.createActionButton(startWithReloadAction);toolbar.appendToolbarItem(this._startWithReloadButton);this._toggleRecordButton.setEnabled(false);this._toggleRecordButton.setVisible(false);}
this._clearButton=new UI.ToolbarButton(Common.UIString('Clear all'),'largeicon-clear');this._clearButton.addEventListener(UI.ToolbarButton.Events.Click,this._clear.bind(this));toolbar.appendToolbarItem(this._clearButton);toolbar.appendSeparator();const saveButton=new UI.ToolbarButton(Common.UIString('Export...'),'largeicon-download');saveButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._exportReport());toolbar.appendToolbarItem(saveButton);this._textFilterRegExp=null;toolbar.appendSeparator();this._filterInput=new UI.ToolbarInput(Common.UIString('URL filter'),'',0.4,1);this._filterInput.setEnabled(false);this._filterInput.addEventListener(UI.ToolbarInput.Event.TextChanged,this._onFilterChanged,this);toolbar.appendToolbarItem(this._filterInput);toolbar.appendSeparator();this._typeFilterValue=null;this._filterByTypeComboBox=new UI.ToolbarComboBox(this._onFilterByTypeChanged.bind(this),ls`Filter coverage by type`);const options=[{label:ls`All`,value:'',},{label:ls`CSS`,value:Coverage.CoverageType.CSS,},{label:ls`JavaScript`,value:Coverage.CoverageType.JavaScript|Coverage.CoverageType.JavaScriptPerFunction,},];for(const option of options){this._filterByTypeComboBox.addOption(this._filterByTypeComboBox.createOption(option.label,option.value));}
this._filterByTypeComboBox.setSelectedIndex(0);this._filterByTypeComboBox.setEnabled(false);toolbar.appendToolbarItem(this._filterByTypeComboBox);toolbar.appendSeparator();this._showContentScriptsSetting=Common.settings.createSetting('showContentScripts',false);this._showContentScriptsSetting.addChangeListener(this._onFilterChanged,this);const contentScriptsCheckbox=new UI.ToolbarSettingCheckbox(this._showContentScriptsSetting,Common.UIString('Include extension content scripts'),Common.UIString('Content scripts'));toolbar.appendToolbarItem(contentScriptsCheckbox);this._coverageResultsElement=this.contentElement.createChild('div','coverage-results');this._landingPage=this._buildLandingPage();this._listView=new Coverage.CoverageListView(this._isVisible.bind(this,false));this._statusToolbarElement=this.contentElement.createChild('div','coverage-toolbar-summary');this._statusMessageElement=this._statusToolbarElement.createChild('div','coverage-message');this._landingPage.show(this._coverageResultsElement);}
_buildLandingPage(){const widget=new UI.VBox();let message;if(this._startWithReloadButton){const reloadButton=UI.createInlineButton(UI.Toolbar.createActionButtonForId('coverage.start-with-reload'));message=UI.formatLocalized('Click the reload button %s to reload and start capturing coverage.',[reloadButton]);}else{const recordButton=UI.createInlineButton(UI.Toolbar.createActionButton(this._toggleRecordAction));message=UI.formatLocalized('Click the record button %s to start capturing coverage.',[recordButton]);}
message.classList.add('message');widget.contentElement.appendChild(message);widget.element.classList.add('landing-page');return widget;}
_clear(){if(this._model){this._model.reset();}
this._reset();}
_reset(){if(this._decorationManager){this._decorationManager.dispose();this._decorationManager=null;}
this._listView.reset();this._listView.detach();this._landingPage.show(this._coverageResultsElement);this._statusMessageElement.textContent='';this._filterInput.setEnabled(false);this._filterByTypeComboBox.setEnabled(false);}
_toggleRecording(){const enable=!this._toggleRecordAction.toggled();if(enable){this._startRecording({reload:false,jsCoveragePerBlock:this.isBlockCoverageSelected()});}else{this.stopRecording();}}
isBlockCoverageSelected(){const coverageType=Number(this._coverageTypeComboBox.selectedOption().value);return coverageType===Coverage.CoverageType.JavaScript;}
_selectCoverageType(jsCoveragePerBlock){const selectedIndex=jsCoveragePerBlock?1:0;this._coverageTypeComboBox.setSelectedIndex(selectedIndex);}
async ensureRecordingStarted(){const enabled=this._toggleRecordAction.toggled();if(enabled){await this.stopRecording();}
await this._startRecording({reload:false,jsCoveragePerBlock:false});}
async _startRecording(options){this._reset();const mainTarget=SDK.targetManager.mainTarget();if(!mainTarget){return;}
const{reload,jsCoveragePerBlock}={reload:false,jsCoveragePerBlock:false,...options};if(!this._model||reload){this._model=mainTarget.model(Coverage.CoverageModel);}
Host.userMetrics.actionTaken(Host.UserMetrics.Action.CoverageStarted);if(jsCoveragePerBlock){Host.userMetrics.actionTaken(Host.UserMetrics.Action.CoverageStartedPerBlock);}
const success=await this._model.start(jsCoveragePerBlock);if(!success){return;}
this._selectCoverageType(jsCoveragePerBlock);this._model.addEventListener(Coverage.CoverageModel.Events.CoverageUpdated,this._onCoverageDataReceived,this);this._resourceTreeModel=(mainTarget.model(SDK.ResourceTreeModel));if(this._resourceTreeModel){this._resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._onMainFrameNavigated,this);}
this._decorationManager=new Coverage.CoverageDecorationManager((this._model));this._toggleRecordAction.setToggled(true);this._clearButton.setEnabled(false);if(this._startWithReloadButton){this._startWithReloadButton.setEnabled(false);this._startWithReloadButton.setVisible(false);this._toggleRecordButton.setEnabled(true);this._toggleRecordButton.setVisible(true);}
this._coverageTypeComboBox.setEnabled(false);this._filterInput.setEnabled(true);this._filterByTypeComboBox.setEnabled(true);if(this._landingPage.isShowing()){this._landingPage.detach();}
this._listView.show(this._coverageResultsElement);if(reload&&this._resourceTreeModel){this._resourceTreeModel.reloadPage();}else{this._model.startPolling();}}
_onCoverageDataReceived(event){this._updateViews(event.data);}
async stopRecording(){if(this._resourceTreeModel){this._resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._onMainFrameNavigated,this);this._resourceTreeModel=null;}
await this._model.stop();this._model.removeEventListener(Coverage.CoverageModel.Events.CoverageUpdated,this._onCoverageDataReceived,this);this._toggleRecordAction.setToggled(false);this._coverageTypeComboBox.setEnabled(true);if(this._startWithReloadButton){this._startWithReloadButton.setEnabled(true);this._startWithReloadButton.setVisible(true);this._toggleRecordButton.setEnabled(false);this._toggleRecordButton.setVisible(false);}
this._clearButton.setEnabled(true);}
_onMainFrameNavigated(){this._model.reset();this._decorationManager.reset();this._listView.reset();this._model.startPolling();}
_updateViews(updatedEntries){this._updateStats();this._listView.update(this._model.entries());this._decorationManager.update(updatedEntries);}
_updateStats(){let total=0;let unused=0;for(const info of this._model.entries()){if(!this._isVisible(true,info)){continue;}
total+=info.size();unused+=info.unusedSize();}
const used=total-unused;const percentUsed=total?Math.round(100*used/total):0;this._statusMessageElement.textContent=ls`${Number.bytesToString(used)} of ${Number.bytesToString(total)} (${percentUsed}%) used so far.
        ${Number.bytesToString(unused)} unused.`;}
_onFilterChanged(){if(!this._listView){return;}
const text=this._filterInput.value();this._textFilterRegExp=text?createPlainTextSearchRegex(text,'i'):null;this._listView.updateFilterAndHighlight(this._textFilterRegExp);this._updateStats();}
_onFilterByTypeChanged(){if(!this._listView){return;}
Host.userMetrics.actionTaken(Host.UserMetrics.Action.CoverageReportFiltered);const type=this._filterByTypeComboBox.selectedOption().value;this._typeFilterValue=parseInt(type,10)||null;this._listView.updateFilterAndHighlight(this._textFilterRegExp);this._updateStats();}
_isVisible(ignoreTextFilter,coverageInfo){const url=coverageInfo.url();if(url.startsWith(Coverage.CoverageView._extensionBindingsURLPrefix)){return false;}
if(coverageInfo.isContentScript()&&!this._showContentScriptsSetting.get()){return false;}
if(this._typeFilterValue&&!(coverageInfo.type()&this._typeFilterValue)){return false;}
return ignoreTextFilter||!this._textFilterRegExp||this._textFilterRegExp.test(url);}
async _exportReport(){const fos=new Bindings.FileOutputStream();const fileName=`Coverage-${new Date().toISO8601Compact()}.json`;const accepted=await fos.open(fileName);if(!accepted){return;}
this._model.exportReport(fos);}
selectCoverageItemByUrl(url){this._listView.selectByUrl(url);}}
CoverageView._extensionBindingsURLPrefix='extensions::';export class ActionDelegate{handleAction(context,actionId){const coverageViewId='coverage';UI.viewManager.showView(coverageViewId).then(()=>UI.viewManager.view(coverageViewId).widget()).then(widget=>this._innerHandleAction((widget),actionId));return true;}
_innerHandleAction(coverageView,actionId){switch(actionId){case'coverage.toggle-recording':coverageView._toggleRecording();break;case'coverage.start-with-reload':coverageView._startRecording({reload:true,jsCoveragePerBlock:coverageView.isBlockCoverageSelected()});break;default:console.assert(false,`Unknown action: ${actionId}`);}}}
export class LineDecorator{constructor(){this._listeners=new WeakMap();}
decorate(uiSourceCode,textEditor){const decorations=uiSourceCode.decorationsForType(Coverage.CoverageDecorationManager.decoratorType);if(!decorations||!decorations.size){this._uninstallGutter(textEditor);return;}
const decorationManager=(decorations.values().next().value.data());decorationManager.usageByLine(uiSourceCode).then(lineUsage=>{textEditor.operation(()=>this._innerDecorate(uiSourceCode,textEditor,lineUsage));});}
_innerDecorate(uiSourceCode,textEditor,lineUsage){const gutterType=Coverage.CoverageView.LineDecorator._gutterType;this._uninstallGutter(textEditor);if(lineUsage.length){this._installGutter(textEditor,uiSourceCode.url());}
for(let line=0;line<lineUsage.length;++line){if(typeof lineUsage[line]!=='boolean'){continue;}
const className=lineUsage[line]?'text-editor-coverage-used-marker':'text-editor-coverage-unused-marker';const gutterElement=createElementWithClass('div',className);textEditor.setGutterDecoration(line,gutterType,gutterElement);}}
makeGutterClickHandler(url){function handleGutterClick(event){const eventData=(event.data);if(eventData.gutterType!==Coverage.CoverageView.LineDecorator._gutterType){return;}
const coverageViewId='coverage';UI.viewManager.showView(coverageViewId).then(()=>UI.viewManager.view(coverageViewId).widget()).then(widget=>{const matchFormattedSuffix=url.match(/(.*):formatted$/);const urlWithoutFormattedSuffix=(matchFormattedSuffix&&matchFormattedSuffix[1])||url;widget.selectCoverageItemByUrl(urlWithoutFormattedSuffix);});}
return handleGutterClick;}
_installGutter(textEditor,url){let listener=this._listeners.get(textEditor);if(!listener){listener=this.makeGutterClickHandler(url);this._listeners.set(textEditor,listener);}
textEditor.installGutter(Coverage.CoverageView.LineDecorator._gutterType,false);textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.GutterClick,listener,this);}
_uninstallGutter(textEditor){textEditor.uninstallGutter(Coverage.CoverageView.LineDecorator._gutterType);const listener=this._listeners.get(textEditor);if(listener){textEditor.removeEventListener(SourceFrame.SourcesTextEditor.Events.GutterClick,listener,this);this._listeners.delete(textEditor);}}}
LineDecorator._gutterType='CodeMirror-gutter-coverage';self.Coverage=self.Coverage||{};Coverage=Coverage||{};Coverage.CoverageView=CoverageView;Coverage.CoverageView.LineDecorator=LineDecorator;Coverage.CoverageView.ActionDelegate=ActionDelegate;Coverage.RangeUseCount;Coverage.CoverageSegment;export const CoverageType={CSS:(1<<0),JavaScript:(1<<1),JavaScriptPerFunction:(1<<2),};export const SuspensionState={Active:Symbol('Active'),Suspending:Symbol('Suspending'),Suspended:Symbol('Suspended')};export const Events={CoverageUpdated:Symbol('CoverageUpdated')};const _coveragePollingPeriodMs=200;export default class CoverageModel extends SDK.SDKModel{constructor(target){super(target);this._cpuProfilerModel=target.model(SDK.CPUProfilerModel);this._cssModel=target.model(SDK.CSSModel);this._debuggerModel=target.model(SDK.DebuggerModel);this._coverageByURL=new Map();this._coverageByContentProvider=new Map();this._suspensionState=SuspensionState.Active;this._pollTimer=null;this._currentPollPromise=null;this._shouldResumePollingOnResume=false;this._jsBacklog=[];this._cssBacklog=[];this._performanceTraceRecording=false;}
async start(jsCoveragePerBlock){if(this._suspensionState!==SuspensionState.Active){throw Error('Cannot start CoverageModel while it is not active.');}
const promises=[];if(this._cssModel){this._clearCSS();this._cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded,this._handleStyleSheetAdded,this);promises.push(this._cssModel.startCoverage());}
if(this._cpuProfilerModel){promises.push(this._cpuProfilerModel.startPreciseCoverage(jsCoveragePerBlock));}
await Promise.all(promises);return!!(this._cssModel||this._cpuProfilerModel);}
async stop(){await this.stopPolling();const promises=[];if(this._cpuProfilerModel){promises.push(this._cpuProfilerModel.stopPreciseCoverage());}
if(this._cssModel){promises.push(this._cssModel.stopCoverage());this._cssModel.removeEventListener(SDK.CSSModel.Events.StyleSheetAdded,this._handleStyleSheetAdded,this);}
await Promise.all(promises);}
reset(){this._coverageByURL=new Map();this._coverageByContentProvider=new Map();}
async startPolling(){if(this._currentPollPromise||this._suspensionState!==SuspensionState.Active){return;}
await this._pollLoop();}
async _pollLoop(){this._clearTimer();this._currentPollPromise=this._pollAndCallback();await this._currentPollPromise;if(this._suspensionState===SuspensionState.Active||this._performanceTraceRecording){this._pollTimer=setTimeout(()=>this._pollLoop(),_coveragePollingPeriodMs);}}
async stopPolling(){this._clearTimer();await this._currentPollPromise;this._currentPollPromise=null;await this._pollAndCallback();}
async _pollAndCallback(){if(this._suspensionState===SuspensionState.Suspended&&!this._performanceTraceRecording){return;}
const updates=await this._takeAllCoverage();console.assert(this._suspensionState!==SuspensionState.Suspended||this._performanceTraceRecording,'CoverageModel was suspended while polling.');if(updates.length){this.dispatchEventToListeners(Events.CoverageUpdated,updates);}}
_clearTimer(){if(this._pollTimer){clearTimeout(this._pollTimer);this._pollTimer=null;}}
async preSuspendModel(reason){if(this._suspensionState!==SuspensionState.Active){return;}
this._suspensionState=SuspensionState.Suspending;if(reason==='performance-timeline'){this._performanceTraceRecording=true;return;}
if(this._currentPollPromise){await this.stopPolling();this._shouldResumePollingOnResume=true;}}
async suspendModel(reason){this._suspensionState=SuspensionState.Suspended;}
async resumeModel(){}
async postResumeModel(){this._suspensionState=SuspensionState.Active;this._performanceTraceRecording=false;if(this._shouldResumePollingOnResume){this._shouldResumePollingOnResume=false;await this.startPolling();}}
entries(){return Array.from(this._coverageByURL.values());}
usageForRange(contentProvider,startOffset,endOffset){const coverageInfo=this._coverageByContentProvider.get(contentProvider);return coverageInfo&&coverageInfo.usageForRange(startOffset,endOffset);}
_clearCSS(){for(const entry of this._coverageByContentProvider.values()){if(entry.type()!==CoverageType.CSS){continue;}
const contentProvider=(entry.contentProvider());this._coverageByContentProvider.delete(contentProvider);const key=`${contentProvider.startLine}:${contentProvider.startColumn}`;const urlEntry=this._coverageByURL.get(entry.url());if(!urlEntry||!urlEntry._coverageInfoByLocation.delete(key)){continue;}
urlEntry._addToSizes(-entry._usedSize,-entry._size);if(!urlEntry._coverageInfoByLocation.size){this._coverageByURL.delete(entry.url());}}
for(const styleSheetHeader of this._cssModel.getAllStyleSheetHeaders()){this._addStyleSheetToCSSCoverage(styleSheetHeader);}}
async _takeAllCoverage(){const[updatesCSS,updatesJS]=await Promise.all([this._takeCSSCoverage(),this._takeJSCoverage()]);return[...updatesCSS,...updatesJS];}
async _takeJSCoverage(){if(!this._cpuProfilerModel){return[];}
const now=Date.now();const freshRawCoverageData=await this._cpuProfilerModel.takePreciseCoverage();if(this._suspensionState!==SuspensionState.Active){if(freshRawCoverageData.length>0){this._jsBacklog.push({rawCoverageData:freshRawCoverageData,stamp:now});}
return[];}
const results=[];for(const{rawCoverageData,stamp}of this._jsBacklog){results.push(this._processJSCoverage(rawCoverageData,stamp));}
this._jsBacklog=[];if(freshRawCoverageData.length>0){results.push(this._processJSCoverage(freshRawCoverageData,now));}
return results.flat();}
_processJSCoverage(scriptsCoverage,stamp){const updatedEntries=[];for(const entry of scriptsCoverage){const script=this._debuggerModel.scriptForId(entry.scriptId);if(!script){continue;}
const ranges=[];let type=CoverageType.JavaScript;for(const func of entry.functions){if(func.isBlockCoverage===false&&!(func.ranges.length===1&&!func.ranges[0].count)){type|=CoverageType.JavaScriptPerFunction;}
for(const range of func.ranges){ranges.push(range);}}
const subentry=this._addCoverage(script,script.contentLength,script.lineOffset,script.columnOffset,ranges,(type),stamp);if(subentry){updatedEntries.push(subentry);}}
return updatedEntries;}
_handleStyleSheetAdded(event){const styleSheetHeader=(event.data);this._addStyleSheetToCSSCoverage(styleSheetHeader);}
async _takeCSSCoverage(){if(!this._cssModel){return[];}
const now=Date.now();const freshRawCoverageData=await this._cssModel.takeCoverageDelta();if(this._suspensionState!==SuspensionState.Active){if(freshRawCoverageData.length>0){this._cssBacklog.push({rawCoverageData:freshRawCoverageData,stamp:now});}
return[];}
const results=[];for(const{rawCoverageData,stamp}of this._cssBacklog){results.push(this._processCSSCoverage(rawCoverageData,stamp));}
this._cssBacklog=[];if(freshRawCoverageData.length>0){results.push(this._processCSSCoverage(freshRawCoverageData,now));}
return results.flat();}
_processCSSCoverage(ruleUsageList,stamp){const updatedEntries=[];const rulesByStyleSheet=new Map();for(const rule of ruleUsageList){const styleSheetHeader=this._cssModel.styleSheetHeaderForId(rule.styleSheetId);if(!styleSheetHeader){continue;}
let ranges=rulesByStyleSheet.get(styleSheetHeader);if(!ranges){ranges=[];rulesByStyleSheet.set(styleSheetHeader,ranges);}
ranges.push({startOffset:rule.startOffset,endOffset:rule.endOffset,count:Number(rule.used)});}
for(const entry of rulesByStyleSheet){const styleSheetHeader=(entry[0]);const ranges=(entry[1]);const subentry=this._addCoverage(styleSheetHeader,styleSheetHeader.contentLength,styleSheetHeader.startLine,styleSheetHeader.startColumn,ranges,CoverageType.CSS,stamp);if(subentry){updatedEntries.push(subentry);}}
return updatedEntries;}
static _convertToDisjointSegments(ranges,stamp){ranges.sort((a,b)=>a.startOffset-b.startOffset);const result=[];const stack=[];for(const entry of ranges){let top=stack.peekLast();while(top&&top.endOffset<=entry.startOffset){append(top.endOffset,top.count);stack.pop();top=stack.peekLast();}
append(entry.startOffset,top?top.count:undefined);stack.push(entry);}
while(stack.length){const top=stack.pop();append(top.endOffset,top.count);}
function append(end,count){const last=result.peekLast();if(last){if(last.end===end){return;}
if(last.count===count){last.end=end;return;}}
result.push({end:end,count:count,stamp:stamp});}
return result;}
_addStyleSheetToCSSCoverage(styleSheetHeader){this._addCoverage(styleSheetHeader,styleSheetHeader.contentLength,styleSheetHeader.startLine,styleSheetHeader.startColumn,[],CoverageType.CSS,Date.now());}
_addCoverage(contentProvider,contentLength,startLine,startColumn,ranges,type,stamp){const url=contentProvider.contentURL();if(!url){return null;}
let urlCoverage=this._coverageByURL.get(url);let isNewUrlCoverage=false;if(!urlCoverage){isNewUrlCoverage=true;urlCoverage=new Coverage.URLCoverageInfo(url);this._coverageByURL.set(url,urlCoverage);}
const coverageInfo=urlCoverage._ensureEntry(contentProvider,contentLength,startLine,startColumn,type);this._coverageByContentProvider.set(contentProvider,coverageInfo);const segments=Coverage.CoverageModel._convertToDisjointSegments(ranges,stamp);if(segments.length&&segments.peekLast().end<contentLength){segments.push({end:contentLength,stamp:stamp});}
const oldUsedSize=coverageInfo._usedSize;coverageInfo.mergeCoverage(segments);if(!isNewUrlCoverage&&coverageInfo._usedSize===oldUsedSize){return null;}
urlCoverage._addToSizes(coverageInfo._usedSize-oldUsedSize,0);return coverageInfo;}
async exportReport(fos){const result=[];function locationCompare(a,b){const[aLine,aPos]=a.split(':');const[bLine,bPos]=b.split(':');return aLine-bLine||aPos-bPos;}
const coverageByUrlKeys=Array.from(this._coverageByURL.keys()).sort();for(const urlInfoKey of coverageByUrlKeys){const urlInfo=this._coverageByURL.get(urlInfoKey);const url=urlInfo.url();if(url.startsWith('extensions::')||url.startsWith('chrome-extension://')){continue;}
let useFullText=false;for(const info of urlInfo._coverageInfoByLocation.values()){if(info._lineOffset||info._columnOffset){useFullText=!!url;break;}}
let fullText=null;if(useFullText){const resource=SDK.ResourceTreeModel.resourceForURL(url);const content=(await resource.requestContent()).content;fullText=resource?new TextUtils.Text(content||''):null;}
const coverageByLocationKeys=Array.from(urlInfo._coverageInfoByLocation.keys()).sort(locationCompare);if(fullText){const entry={url,ranges:[],text:fullText.value()};for(const infoKey of coverageByLocationKeys){const info=urlInfo._coverageInfoByLocation.get(infoKey);const offset=fullText?fullText.offsetFromPosition(info._lineOffset,info._columnOffset):0;let start=0;for(const segment of info._segments){if(segment.count){entry.ranges.push({start:start+offset,end:segment.end+offset});}else{start=segment.end;}}}
result.push(entry);continue;}
for(const infoKey of coverageByLocationKeys){const info=urlInfo._coverageInfoByLocation.get(infoKey);const entry={url,ranges:[],text:(await info.contentProvider().requestContent()).content};let start=0;for(const segment of info._segments){if(segment.count){entry.ranges.push({start:start,end:segment.end});}else{start=segment.end;}}
result.push(entry);}}
await fos.write(JSON.stringify(result,undefined,2));fos.close();}}
SDK.SDKModel.register(CoverageModel,SDK.Target.Capability.None,false);export class URLCoverageInfo{constructor(url){this._url=url;this._coverageInfoByLocation=new Map();this._size=0;this._usedSize=0;this._type;this._isContentScript=false;}
url(){return this._url;}
type(){return this._type;}
size(){return this._size;}
usedSize(){return this._usedSize;}
unusedSize(){return this._size-this._usedSize;}
usedPercentage(){if(this._size===0){return 0;}
return this.usedSize()/this.size()*100;}
unusedPercentage(){if(this._size===0){return 100;}
return this.unusedSize()/this.size()*100;}
isContentScript(){return this._isContentScript;}
entries(){return this._coverageInfoByLocation.values();}
_addToSizes(usedSize,size){this._usedSize+=usedSize;this._size+=size;}
_ensureEntry(contentProvider,contentLength,lineOffset,columnOffset,type){const key=`${lineOffset}:${columnOffset}`;let entry=this._coverageInfoByLocation.get(key);if((type&CoverageType.JavaScript)&&!this._coverageInfoByLocation.size){this._isContentScript=(contentProvider).isContentScript();}
this._type|=type;if(entry){entry._coverageType|=type;return entry;}
if((type&CoverageType.JavaScript)&&!this._coverageInfoByLocation.size){this._isContentScript=(contentProvider).isContentScript();}
entry=new Coverage.CoverageInfo(contentProvider,contentLength,lineOffset,columnOffset,type);this._coverageInfoByLocation.set(key,entry);this._addToSizes(0,contentLength);return entry;}}
export class CoverageInfo{constructor(contentProvider,size,lineOffset,columnOffset,type){this._contentProvider=contentProvider;this._size=size;this._usedSize=0;this._statsByTimestamp=new Map();this._lineOffset=lineOffset;this._columnOffset=columnOffset;this._coverageType=type;this._segments=[];}
contentProvider(){return this._contentProvider;}
url(){return this._contentProvider.contentURL();}
type(){return this._coverageType;}
mergeCoverage(segments){this._segments=Coverage.CoverageInfo._mergeCoverage(this._segments,segments);this._updateStats();}
usedByTimestamp(){return this._statsByTimestamp;}
size(){return this._size;}
usageForRange(start,end){let index=this._segments.upperBound(start,(position,segment)=>position-segment.end);for(;index<this._segments.length&&this._segments[index].end<end;++index){if(this._segments[index].count){return true;}}
return index<this._segments.length&&!!this._segments[index].count;}
static _mergeCoverage(segmentsA,segmentsB){const result=[];let indexA=0;let indexB=0;while(indexA<segmentsA.length&&indexB<segmentsB.length){const a=segmentsA[indexA];const b=segmentsB[indexB];const count=typeof a.count==='number'||typeof b.count==='number'?(a.count||0)+(b.count||0):undefined;const end=Math.min(a.end,b.end);const last=result.peekLast();const stamp=Math.min(a.stamp,b.stamp);if(!last||last.count!==count||last.stamp!==stamp){result.push({end:end,count:count,stamp:stamp});}else{last.end=end;}
if(a.end<=b.end){indexA++;}
if(a.end>=b.end){indexB++;}}
for(;indexA<segmentsA.length;indexA++){result.push(segmentsA[indexA]);}
for(;indexB<segmentsB.length;indexB++){result.push(segmentsB[indexB]);}
return result;}
_updateStats(){this._statsByTimestamp=new Map();this._usedSize=0;let last=0;for(const segment of this._segments){if(!this._statsByTimestamp.has(segment.stamp)){this._statsByTimestamp.set(segment.stamp,0);}
if(segment.count){const used=segment.end-last;this._usedSize+=used;this._statsByTimestamp.set(segment.stamp,this._statsByTimestamp.get(segment.stamp)+used);}
last=segment.end;}}}
self.Coverage=self.Coverage||{};Coverage=Coverage||{};Coverage.CoverageModel=CoverageModel;Coverage.CoverageModel.Events=Events;Coverage.CoverageType=CoverageType;Coverage.SuspensionState=SuspensionState;Coverage.URLCoverageInfo=URLCoverageInfo;Coverage.CoverageInfo=CoverageInfo;export default class CoverageListView extends UI.VBox{constructor(filterCallback){super(true);this._nodeForCoverageInfo=new Map();this._filterCallback=filterCallback;this._highlightRegExp=null;this.registerRequiredCSS('coverage/coverageListView.css');const columns=[{id:'url',title:Common.UIString('URL'),width:'250px',fixedWidth:false,sortable:true},{id:'type',title:Common.UIString('Type'),width:'45px',fixedWidth:true,sortable:true},{id:'size',title:Common.UIString('Total Bytes'),width:'60px',fixedWidth:true,sortable:true,align:DataGrid.DataGrid.Align.Right},{id:'unusedSize',title:Common.UIString('Unused Bytes'),width:'100px',fixedWidth:true,sortable:true,align:DataGrid.DataGrid.Align.Right,sort:DataGrid.DataGrid.Order.Descending},{id:'bars',title:ls`Usage Visualization`,width:'250px',fixedWidth:false,sortable:true}];this._dataGrid=new DataGrid.SortableDataGrid(columns);this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last);this._dataGrid.element.classList.add('flex-auto');this._dataGrid.element.addEventListener('keydown',this._onKeyDown.bind(this),false);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.OpenedNode,this._onOpenedNode,this);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortingChanged,this);const dataGridWidget=this._dataGrid.asWidget();dataGridWidget.show(this.contentElement);}
update(coverageInfo){let hadUpdates=false;const maxSize=coverageInfo.reduce((acc,entry)=>Math.max(acc,entry.size()),0);const rootNode=this._dataGrid.rootNode();for(const entry of coverageInfo){let node=this._nodeForCoverageInfo.get(entry);if(node){if(this._filterCallback(node._coverageInfo)){hadUpdates=node._refreshIfNeeded(maxSize)||hadUpdates;}
continue;}
node=new GridNode(entry,maxSize);this._nodeForCoverageInfo.set(entry,node);if(this._filterCallback(node._coverageInfo)){rootNode.appendChild(node);hadUpdates=true;}}
if(hadUpdates){this._sortingChanged();}}
reset(){this._nodeForCoverageInfo.clear();this._dataGrid.rootNode().removeChildren();}
updateFilterAndHighlight(highlightRegExp){this._highlightRegExp=highlightRegExp;let hadTreeUpdates=false;for(const node of this._nodeForCoverageInfo.values()){const shouldBeVisible=this._filterCallback(node._coverageInfo);const isVisible=!!node.parent;if(shouldBeVisible){node._setHighlight(this._highlightRegExp);}
if(shouldBeVisible===isVisible){continue;}
hadTreeUpdates=true;if(!shouldBeVisible){node.remove();}else{this._dataGrid.rootNode().appendChild(node);}}
if(hadTreeUpdates){this._sortingChanged();}}
selectByUrl(url){for(const[info,node]of this._nodeForCoverageInfo.entries()){if(info.url()===url){node.revealAndSelect();break;}}}
_onOpenedNode(){this._revealSourceForSelectedNode();}
_onKeyDown(event){if(!isEnterKey(event)){return;}
event.consume(true);this._revealSourceForSelectedNode();}
async _revealSourceForSelectedNode(){const node=this._dataGrid.selectedNode;if(!node){return;}
const coverageInfo=(node)._coverageInfo;let sourceCode=Workspace.workspace.uiSourceCodeForURL(coverageInfo.url());if(!sourceCode){return;}
const content=(await sourceCode.requestContent()).content||'';if(TextUtils.isMinified(content)){const formatData=await Sources.sourceFormatter.format(sourceCode);sourceCode=formatData.formattedSourceCode;}
if(this._dataGrid.selectedNode!==node){return;}
Common.Revealer.reveal(sourceCode);}
_sortingChanged(){const columnId=this._dataGrid.sortColumnId();if(!columnId){return;}
let sortFunction;switch(columnId){case'url':sortFunction=compareURL;break;case'type':sortFunction=compareType;break;case'size':sortFunction=compareNumericField.bind(null,'size');break;case'bars':case'unusedSize':sortFunction=compareNumericField.bind(null,'unusedSize');break;default:console.assert(false,'Unknown sort field: '+columnId);return;}
this._dataGrid.sortNodes(sortFunction,!this._dataGrid.isSortOrderAscending());function compareURL(a,b){const nodeA=(a);const nodeB=(b);return nodeA._url.localeCompare(nodeB._url);}
function compareNumericField(fieldName,a,b){const nodeA=(a);const nodeB=(b);return nodeA._coverageInfo[fieldName]()-nodeB._coverageInfo[fieldName]()||compareURL(a,b);}
function compareType(a,b){const nodeA=(a);const nodeB=(b);const typeA=Coverage.CoverageListView._typeToString(nodeA._coverageInfo.type());const typeB=Coverage.CoverageListView._typeToString(nodeB._coverageInfo.type());return typeA.localeCompare(typeB)||compareURL(a,b);}}
static _typeToString(type){const types=[];if(type&Coverage.CoverageType.CSS){types.push(Common.UIString('CSS'));}
if(type&Coverage.CoverageType.JavaScriptPerFunction){types.push(Common.UIString('JS (per function)'));}else if(type&Coverage.CoverageType.JavaScript){types.push(Common.UIString('JS (per block)'));}
return types.join('+');}}
export class GridNode extends DataGrid.SortableDataGridNode{constructor(coverageInfo,maxSize){super();this._coverageInfo=coverageInfo;this._lastUsedSize;this._url=coverageInfo.url();this._maxSize=maxSize;this._highlightDOMChanges=[];this._highlightRegExp=null;}
_setHighlight(highlightRegExp){if(this._highlightRegExp===highlightRegExp){return;}
this._highlightRegExp=highlightRegExp;this.refresh();}
_refreshIfNeeded(maxSize){if(this._lastUsedSize===this._coverageInfo.usedSize()&&maxSize===this._maxSize){return false;}
this._lastUsedSize=this._coverageInfo.usedSize();this._maxSize=maxSize;this.refresh();return true;}
createCell(columnId){const cell=this.createTD(columnId);switch(columnId){case'url':cell.title=this._url;const outer=cell.createChild('div','url-outer');const prefix=outer.createChild('div','url-prefix');const suffix=outer.createChild('div','url-suffix');const splitURL=/^(.*)(\/[^/]*)$/.exec(this._url);prefix.textContent=splitURL?splitURL[1]:this._url;suffix.textContent=splitURL?splitURL[2]:'';if(this._highlightRegExp){this._highlight(outer,this._url);}
break;case'type':cell.textContent=Coverage.CoverageListView._typeToString(this._coverageInfo.type());if(this._coverageInfo.type()&Coverage.CoverageType.JavaScriptPerFunction){cell.title=ls`JS coverage with per function granularity: Once a function was executed, the whole function is marked as covered.`;}else if(this._coverageInfo.type()&Coverage.CoverageType.JavaScript){cell.title=ls`JS coverage with per block granularity: Once a block of JavaScript was executed, that block is marked as covered.`;}
break;case'size':const sizeSpan=cell.createChild('span');sizeSpan.textContent=Number.withThousandsSeparator(this._coverageInfo.size()||0);UI.ARIAUtils.markAsHidden(sizeSpan);UI.ARIAUtils.setAccessibleName(cell,ls`${this._coverageInfo.size() || 0} bytes`);break;case'unusedSize':const unusedSize=this._coverageInfo.unusedSize()||0;const unusedSizeSpan=cell.createChild('span');const unusedPercentsSpan=cell.createChild('span','percent-value');unusedSizeSpan.textContent=Number.withThousandsSeparator(unusedSize);const unusedPercentFormatted=ls`${this._percentageString(this._coverageInfo.unusedPercentage())} %`;unusedPercentsSpan.textContent=unusedPercentFormatted;UI.ARIAUtils.markAsHidden(unusedPercentsSpan);UI.ARIAUtils.markAsHidden(unusedSizeSpan);UI.ARIAUtils.setAccessibleName(cell,ls`${unusedSize} bytes, ${unusedPercentFormatted}`);break;case'bars':const barContainer=cell.createChild('div','bar-container');const unusedPercent=this._percentageString(this._coverageInfo.unusedPercentage());const usedPercent=this._percentageString(this._coverageInfo.usedPercentage());if(this._coverageInfo.unusedSize()>0){const unusedSizeBar=barContainer.createChild('div','bar bar-unused-size');unusedSizeBar.style.width=((this._coverageInfo.unusedSize()/this._maxSize)*100||0)+'%';if(this._coverageInfo.type()&Coverage.CoverageType.JavaScriptPerFunction){unusedSizeBar.title=ls`${this._coverageInfo.unusedSize()} bytes (${
                unusedPercent} %) belong to functions that have not (yet) been executed.`;}else if(this._coverageInfo.type()&Coverage.CoverageType.JavaScript){unusedSizeBar.title=ls`${this._coverageInfo.unusedSize()} bytes (${
                unusedPercent} %) belong to blocks of JavaScript that have not (yet) been executed.`;}}
if(this._coverageInfo.usedSize()>0){const usedSizeBar=barContainer.createChild('div','bar bar-used-size');usedSizeBar.style.width=((this._coverageInfo.usedSize()/this._maxSize)*100||0)+'%';if(this._coverageInfo.type()&Coverage.CoverageType.JavaScriptPerFunction){usedSizeBar.title=ls`${this._coverageInfo.usedSize()} bytes (${
                usedPercent} %) belong to functions that have executed at least once.`;}else if(this._coverageInfo.type()&Coverage.CoverageType.JavaScript){usedSizeBar.title=ls`${this._coverageInfo.usedSize()} bytes (${
                usedPercent} %) belong to blocks of JavaScript that have executed at least once.`;}}
UI.ARIAUtils.setAccessibleName(barContainer,ls`${unusedPercent} % of file unused, ${usedPercent} % of file used`);}
return cell;}
_percentageString(value){return value.toFixed(1);}
_highlight(element,textContent){const matches=this._highlightRegExp.exec(textContent);if(!matches||!matches.length){return;}
const range=new TextUtils.SourceRange(matches.index,matches[0].length);UI.highlightRangesWithStyleClass(element,[range],'filter-highlight');}}
self.Coverage=self.Coverage||{};Coverage=Coverage||{};Coverage.CoverageListView=CoverageListView;Coverage.CoverageListView.GridNode=GridNode;export const _decoratorType='coverage';export default class CoverageDecorationManager{constructor(coverageModel){this._coverageModel=coverageModel;this._textByProvider=new Map();this._uiSourceCodeByContentProvider=new Platform.Multimap();for(const uiSourceCode of Workspace.workspace.uiSourceCodes()){uiSourceCode.addLineDecoration(0,_decoratorType,this);}
Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this._onUISourceCodeAdded,this);}
reset(){for(const uiSourceCode of Workspace.workspace.uiSourceCodes()){uiSourceCode.removeDecorationsForType(_decoratorType);}}
dispose(){this.reset();Workspace.workspace.removeEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this._onUISourceCodeAdded,this);}
update(updatedEntries){for(const entry of updatedEntries){for(const uiSourceCode of this._uiSourceCodeByContentProvider.get(entry.contentProvider())){uiSourceCode.removeDecorationsForType(_decoratorType);uiSourceCode.addLineDecoration(0,_decoratorType,this);}}}
async usageByLine(uiSourceCode){const result=[];const{content}=await uiSourceCode.requestContent();if(!content){return[];}
const sourceText=new TextUtils.Text((content));await this._updateTexts(uiSourceCode,sourceText);const lineEndings=sourceText.lineEndings();for(let line=0;line<sourceText.lineCount();++line){const lineLength=lineEndings[line]-(line?lineEndings[line-1]:0)-1;if(!lineLength){result.push(undefined);continue;}
const startLocations=this._rawLocationsForSourceLocation(uiSourceCode,line,0);const endLocations=this._rawLocationsForSourceLocation(uiSourceCode,line,lineLength);let used=undefined;for(let startIndex=0,endIndex=0;startIndex<startLocations.length;++startIndex){const start=startLocations[startIndex];while(endIndex<endLocations.length&&Coverage.CoverageDecorationManager._compareLocations(start,endLocations[endIndex])>=0){++endIndex;}
if(endIndex>=endLocations.length||endLocations[endIndex].id!==start.id){continue;}
const end=endLocations[endIndex++];const text=this._textByProvider.get(end.contentProvider);if(!text){continue;}
const textValue=text.value();let startOffset=Math.min(text.offsetFromPosition(start.line,start.column),textValue.length-1);let endOffset=Math.min(text.offsetFromPosition(end.line,end.column),textValue.length-1);while(startOffset<=endOffset&&/\s/.test(textValue[startOffset])){++startOffset;}
while(startOffset<=endOffset&&/\s/.test(textValue[endOffset])){--endOffset;}
if(startOffset<=endOffset){used=this._coverageModel.usageForRange(end.contentProvider,startOffset,endOffset);}
if(used){break;}}
result.push(used);}
return result;}
_updateTexts(uiSourceCode,text){const promises=[];for(let line=0;line<text.lineCount();++line){for(const entry of this._rawLocationsForSourceLocation(uiSourceCode,line,0)){if(this._textByProvider.has(entry.contentProvider)){continue;}
this._textByProvider.set(entry.contentProvider,null);this._uiSourceCodeByContentProvider.set(entry.contentProvider,uiSourceCode);promises.push(this._updateTextForProvider(entry.contentProvider));}}
return Promise.all(promises);}
async _updateTextForProvider(contentProvider){const{content}=await contentProvider.requestContent();this._textByProvider.set(contentProvider,new TextUtils.Text(content||''));}
_rawLocationsForSourceLocation(uiSourceCode,line,column){const result=[];const contentType=uiSourceCode.contentType();if(contentType.hasScripts()){let locations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(uiSourceCode,line,column);locations=locations.filter(location=>!!location.script());for(const location of locations){const script=location.script();if(script.isInlineScript()&&contentType.isDocument()){location.lineNumber-=script.lineOffset;if(!location.lineNumber){location.columnNumber-=script.columnOffset;}}
result.push({id:`js:${location.scriptId}`,contentProvider:location.script(),line:location.lineNumber,column:location.columnNumber});}}
if(contentType.isStyleSheet()||contentType.isDocument()){const rawStyleLocations=Bindings.cssWorkspaceBinding.uiLocationToRawLocations(new Workspace.UILocation(uiSourceCode,line,column));for(const location of rawStyleLocations){const header=location.header();if(!header){continue;}
if(header.isInline&&contentType.isDocument()){location.lineNumber-=header.startLine;if(!location.lineNumber){location.columnNumber-=header.startColumn;}}
result.push({id:`css:${location.styleSheetId}`,contentProvider:location.header(),line:location.lineNumber,column:location.columnNumber});}}
return result.sort(Coverage.CoverageDecorationManager._compareLocations);}
static _compareLocations(a,b){return a.id.localeCompare(b.id)||a.line-b.line||a.column-b.column;}
_onUISourceCodeAdded(event){const uiSourceCode=(event.data);uiSourceCode.addLineDecoration(0,_decoratorType,this);}}
self.Coverage=self.Coverage||{};Coverage=Coverage||{};Coverage.RawLocation;Coverage.CoverageDecorationManager=CoverageDecorationManager;Coverage.CoverageDecorationManager.decoratorType=_decoratorType;import'./CSSOverviewController.js';import'./CSSOverviewUnusedDeclarations.js';import'./CSSOverviewModel.js';import'./CSSOverviewStartView.js';import'./CSSOverviewProcessingView.js';import'./CSSOverviewCompletedView.js';import'./CSSOverviewSidebarPanel.js';import'./CSSOverviewPanel.js';import*as CSSOverviewCompletedView from'./CSSOverviewCompletedView.js';import*as CSSOverviewController from'./CSSOverviewController.js';import*as CSSOverviewModel from'./CSSOverviewModel.js';import*as CSSOverviewPanel from'./CSSOverviewPanel.js';import*as CSSOverviewProcessingView from'./CSSOverviewProcessingView.js';import*as CSSOverviewSidebarPanel from'./CSSOverviewSidebarPanel.js';import*as CSSOverviewStartView from'./CSSOverviewStartView.js';import*as CSSOverviewUnusedDeclarations from'./CSSOverviewUnusedDeclarations.js';export{CSSOverviewCompletedView,CSSOverviewController,CSSOverviewModel,CSSOverviewPanel,CSSOverviewProcessingView,CSSOverviewSidebarPanel,CSSOverviewStartView,CSSOverviewUnusedDeclarations,};export class CSSOverviewUnusedDeclarations{static _add(target,key,item){const values=target.get(key)||[];values.push(item);target.set(key,values);}
static checkForUnusedPositionValues(unusedDeclarations,nodeId,strings,positionIdx,topIdx,leftIdx,rightIdx,bottomIdx){if(strings[positionIdx]!=='static'){return;}
if(strings[topIdx]!=='auto'){const reason=ls`Top applied to a statically positioned element`;this._add(unusedDeclarations,reason,{declaration:`top: ${strings[topIdx]}`,nodeId,});}
if(strings[leftIdx]!=='auto'){const reason=ls`Left applied to a statically positioned element`;this._add(unusedDeclarations,reason,{declaration:`left: ${strings[leftIdx]}`,nodeId,});}
if(strings[rightIdx]!=='auto'){const reason=ls`Right applied to a statically positioned element`;this._add(unusedDeclarations,reason,{declaration:`right: ${strings[rightIdx]}`,nodeId,});}
if(strings[bottomIdx]!=='auto'){const reason=ls`Bottom applied to a statically positioned element`;this._add(unusedDeclarations,reason,{declaration:`bottom: ${strings[bottomIdx]}`,nodeId,});}}
static checkForUnusedWidthAndHeightValues(unusedDeclarations,nodeId,strings,displayIdx,widthIdx,heightIdx){if(strings[displayIdx]!=='inline'){return;}
if(strings[widthIdx]!=='auto'){const reason=ls`Width applied to an inline element`;this._add(unusedDeclarations,reason,{declaration:`width: ${strings[widthIdx]}`,nodeId,});}
if(strings[heightIdx]!=='auto'){const reason=ls`Height applied to an inline element`;this._add(unusedDeclarations,reason,{declaration:`height: ${strings[heightIdx]}`,nodeId,});}}
static checkForInvalidVerticalAlignment(unusedDeclarations,nodeId,strings,displayIdx,verticalAlignIdx){if(strings[displayIdx]==='inline'||strings[displayIdx].startsWith('table')){return;}
if(strings[verticalAlignIdx]!=='baseline'){const reason=ls`Vertical alignment applied to element which is neither inline nor table-cell`;this._add(unusedDeclarations,reason,{declaration:`vertical-align: ${strings[verticalAlignIdx]}`,nodeId,});}}}
self.CssOverview=self.CssOverview||{};CssOverview=CssOverview||{};CssOverview.CSSOverviewUnusedDeclarations=CSSOverviewUnusedDeclarations;export class CSSOverviewStartView extends UI.Widget{constructor(controller){super();this.registerRequiredCSS('css_overview/cssOverviewStartView.css');this._controller=controller;this._render();}
_render(){const startButton=UI.createTextButton(ls`Capture overview`,()=>this._controller.dispatchEventToListeners(CssOverview.Events.RequestOverviewStart),'',true);this.setDefaultFocusedElement(startButton);const fragment=UI.Fragment.build`
      <div class="vbox overview-start-view">
        <h1>${ls`CSS Overview`}</h1>
        <div>${startButton}</div>
      </div>
    `;this.contentElement.appendChild(fragment.element());this.contentElement.style.overflow='auto';}}
self.CssOverview=self.CssOverview||{};CssOverview=CssOverview||{};CssOverview.CSSOverviewStartView=CSSOverviewStartView;export default class CSSOverviewSidebarPanel extends UI.VBox{static get ITEM_CLASS_NAME(){return'overview-sidebar-panel-item';}
static get SELECTED(){return'selected';}
constructor(){super(true);this.registerRequiredCSS('css_overview/cssOverviewSidebarPanel.css');this.contentElement.classList.add('overview-sidebar-panel');this.contentElement.addEventListener('click',this._onItemClick.bind(this));const clearResultsButton=new UI.ToolbarButton(ls`Clear overview`,'largeicon-clear');clearResultsButton.addEventListener(UI.ToolbarButton.Events.Click,this._reset,this);const toolbarElement=this.contentElement.createChild('div','overview-toolbar');const toolbar=new UI.Toolbar('',toolbarElement);toolbar.appendToolbarItem(clearResultsButton);}
addItem(name,id){const item=this.contentElement.createChild('div',CssOverview.CSSOverviewSidebarPanel.ITEM_CLASS_NAME);item.textContent=name;item.dataset.id=id;}
_reset(){this.dispatchEventToListeners(SidebarEvents.Reset);}
_deselectAllItems(){const items=this.contentElement.querySelectorAll(`.${CssOverview.CSSOverviewSidebarPanel.ITEM_CLASS_NAME}`);for(const item of items){item.classList.remove(CssOverview.CSSOverviewSidebarPanel.SELECTED);}}
_onItemClick(event){const target=event.path[0];if(!target.classList.contains(CssOverview.CSSOverviewSidebarPanel.ITEM_CLASS_NAME)){return;}
const{id}=target.dataset;this.select(id);this.dispatchEventToListeners(SidebarEvents.ItemSelected,id);}
select(id){const target=this.contentElement.querySelector(`[data-id=${CSS.escape(id)}]`);if(!target){return;}
if(target.classList.contains(CssOverview.CSSOverviewSidebarPanel.SELECTED)){return;}
this._deselectAllItems();target.classList.add(CssOverview.CSSOverviewSidebarPanel.SELECTED);}}
export const SidebarEvents={ItemSelected:Symbol('ItemSelected'),Reset:Symbol('Reset')};self.CssOverview=self.CssOverview||{};CssOverview=CssOverview||{};CssOverview.CSSOverviewSidebarPanel=CSSOverviewSidebarPanel;CssOverview.SidebarEvents=SidebarEvents;export default class CSSOverviewProcessingView extends UI.Widget{constructor(controller){super();this.registerRequiredCSS('css_overview/cssOverviewProcessingView.css');this._formatter=new Intl.NumberFormat('en-US');this._controller=controller;this._render();}
_render(){const cancelButton=UI.createTextButton(ls`Cancel`,()=>this._controller.dispatchEventToListeners(CssOverview.Events.RequestOverviewCancel),'',true);this.setDefaultFocusedElement(cancelButton);this.fragment=UI.Fragment.build`
      <div class="vbox overview-processing-view">
        <h1>Processing page</h1>
        <div>${cancelButton}</div>
      </div>
    `;this.contentElement.appendChild(this.fragment.element());this.contentElement.style.overflow='auto';}}
self.CssOverview=self.CssOverview||{};CssOverview=CssOverview||{};CssOverview.CSSOverviewProcessingView=CSSOverviewProcessingView;export class CSSOverviewPanel extends UI.Panel{constructor(){super('css_overview');this.registerRequiredCSS('css_overview/cssOverview.css');this.element.classList.add('css-overview-panel');const[model]=SDK.targetManager.models(CssOverview.CSSOverviewModel);this._model=model;this._controller=new CssOverview.OverviewController();this._startView=new CssOverview.CSSOverviewStartView(this._controller);this._processingView=new CssOverview.CSSOverviewProcessingView(this._controller);this._completedView=new CssOverview.CSSOverviewCompletedView(this._controller,model.target());this._controller.addEventListener(CssOverview.Events.RequestOverviewStart,this._startOverview,this);this._controller.addEventListener(CssOverview.Events.RequestOverviewCancel,this._cancelOverview,this);this._controller.addEventListener(CssOverview.Events.OverviewCompleted,this._overviewCompleted,this);this._controller.addEventListener(CssOverview.Events.Reset,this._reset,this);this._controller.addEventListener(CssOverview.Events.RequestNodeHighlight,this._requestNodeHighlight,this);this._reset();}
_reset(){this._backgroundColors=new Map();this._textColors=new Map();this._fillColors=new Map();this._borderColors=new Map();this._fontInfo=new Map();this._mediaQueries=[];this._unusedDeclarations=new Map();this._elementCount=0;this._cancelled=false;this._globalStyleStats={styleRules:0,inlineStyles:0,externalSheets:0,stats:{type:0,class:0,id:0,universal:0,attribute:0,nonSimple:0}};this._renderInitialView();}
_requestNodeHighlight(evt){this._model.highlightNode(evt.data);}
_renderInitialView(){this._processingView.hideWidget();this._completedView.hideWidget();this._startView.show(this.contentElement);}
_renderOverviewStartedView(){this._startView.hideWidget();this._completedView.hideWidget();this._processingView.show(this.contentElement);}
_renderOverviewCompletedView(){this._startView.hideWidget();this._processingView.hideWidget();this._completedView.show(this.contentElement);this._completedView.setOverviewData({backgroundColors:this._backgroundColors,textColors:this._textColors,fillColors:this._fillColors,borderColors:this._borderColors,globalStyleStats:this._globalStyleStats,fontInfo:this._fontInfo,elementCount:this._elementCount,mediaQueries:this._mediaQueries,unusedDeclarations:this._unusedDeclarations,});}
async _startOverview(){this._renderOverviewStartedView();const[globalStyleStats,{elementCount,backgroundColors,textColors,fillColors,borderColors,fontInfo,unusedDeclarations},mediaQueries]=await Promise.all([this._model.getGlobalStylesheetStats(),this._model.getNodeStyleStats(),this._model.getMediaQueries()]);if(elementCount){this._elementCount=elementCount;}
if(globalStyleStats){this._globalStyleStats=globalStyleStats;}
if(mediaQueries){this._mediaQueries=mediaQueries;}
if(backgroundColors){this._backgroundColors=backgroundColors;}
if(textColors){this._textColors=textColors;}
if(fillColors){this._fillColors=fillColors;}
if(borderColors){this._borderColors=borderColors;}
if(fontInfo){this._fontInfo=fontInfo;}
if(unusedDeclarations){this._unusedDeclarations=unusedDeclarations;}
this._controller.dispatchEventToListeners(CssOverview.Events.OverviewCompleted);}
_getStyleValue(styles,name){const item=styles.filter(style=>style.name===name);if(!item.length){return;}
return item[0].value;}
_cancelOverview(){this._cancelled=true;}
_overviewCompleted(){this._renderOverviewCompletedView();}}
self.CssOverview=self.CssOverview||{};CssOverview=CssOverview||{};CssOverview.CSSOverviewPanel=CSSOverviewPanel;export default class CSSOverviewModel extends SDK.SDKModel{constructor(target){super(target);this._runtimeAgent=target.runtimeAgent();this._cssAgent=target.cssAgent();this._domAgent=target.domAgent();this._domSnapshotAgent=target.domsnapshotAgent();this._overlayAgent=target.overlayAgent();}
highlightNode(node){const highlightConfig={contentColor:Common.Color.PageHighlight.Content.toProtocolRGBA(),showInfo:true};this._overlayAgent.invoke_hideHighlight({});this._overlayAgent.invoke_highlightNode({backendNodeId:node,highlightConfig});}
async getNodeStyleStats(){const backgroundColors=new Map();const textColors=new Map();const fillColors=new Map();const borderColors=new Map();const fontInfo=new Map();const unusedDeclarations=new Map();const snapshotConfig={computedStyles:['background-color','color','fill','border-top-width','border-top-color','border-bottom-width','border-bottom-color','border-left-width','border-left-color','border-right-width','border-right-color','font-family','font-size','font-weight','line-height','position','top','right','bottom','left','display','width','height','vertical-align']};const storeColor=(id,nodeId,target)=>{if(id===-1){return;}
const colorText=strings[id];const color=Common.Color.parse(colorText);if(!color||color.rgba()[3]===0){return;}
const colorFormatted=color.hasAlpha()?color.asString(Common.Color.Format.HEXA):color.asString(Common.Color.Format.HEX);const colorValues=target.get(colorFormatted)||new Set();colorValues.add(nodeId);target.set(colorFormatted,colorValues);};const isSVGNode=nodeName=>{const validNodes=new Set(['altglyph','circle','ellipse','path','polygon','polyline','rect','svg','text','textpath','tref','tspan']);return validNodes.has(nodeName.toLowerCase());};const isReplacedContent=nodeName=>{const validNodes=new Set(['iframe','video','embed','img']);return validNodes.has(nodeName.toLowerCase());};const isTableElementWithDefaultStyles=(nodeName,display)=>{const validNodes=new Set(['tr','td','thead','tbody']);return validNodes.has(nodeName.toLowerCase())&&display.startsWith('table');};let elementCount=0;const{documents,strings}=await this._domSnapshotAgent.invoke_captureSnapshot(snapshotConfig);for(const{nodes,layout}of documents){elementCount+=layout.nodeIndex.length;for(let idx=0;idx<layout.styles.length;idx++){const styles=layout.styles[idx];const nodeIdx=layout.nodeIndex[idx];const nodeId=nodes.backendNodeId[nodeIdx];const nodeName=nodes.nodeName[nodeIdx];const[backgroundColorIdx,textColorIdx,fillIdx,borderTopWidthIdx,borderTopColorIdx,borderBottomWidthIdx,borderBottomColorIdx,borderLeftWidthIdx,borderLeftColorIdx,borderRightWidthIdx,borderRightColorIdx,fontFamilyIdx,fontSizeIdx,fontWeightIdx,lineHeightIdx,positionIdx,topIdx,rightIdx,bottomIdx,leftIdx,displayIdx,widthIdx,heightIdx,verticalAlignIdx]=styles;storeColor(backgroundColorIdx,nodeId,backgroundColors);storeColor(textColorIdx,nodeId,textColors);if(isSVGNode(strings[nodeName])){storeColor(fillIdx,nodeId,fillColors);}
if(strings[borderTopWidthIdx]!=='0px'){storeColor(borderTopColorIdx,nodeId,borderColors);}
if(strings[borderBottomWidthIdx]!=='0px'){storeColor(borderBottomColorIdx,nodeId,borderColors);}
if(strings[borderLeftWidthIdx]!=='0px'){storeColor(borderLeftColorIdx,nodeId,borderColors);}
if(strings[borderRightWidthIdx]!=='0px'){storeColor(borderRightColorIdx,nodeId,borderColors);}
if(fontFamilyIdx!==-1){const fontFamily=strings[fontFamilyIdx];const fontFamilyInfo=fontInfo.get(fontFamily)||new Map();const sizeLabel='font-size';const weightLabel='font-weight';const lineHeightLabel='line-height';const size=fontFamilyInfo.get(sizeLabel)||new Map();const weight=fontFamilyInfo.get(weightLabel)||new Map();const lineHeight=fontFamilyInfo.get(lineHeightLabel)||new Map();if(fontSizeIdx!==-1){const fontSizeValue=strings[fontSizeIdx];const nodes=size.get(fontSizeValue)||[];nodes.push(nodeId);size.set(fontSizeValue,nodes);}
if(fontWeightIdx!==-1){const fontWeightValue=strings[fontWeightIdx];const nodes=weight.get(fontWeightValue)||[];nodes.push(nodeId);weight.set(fontWeightValue,nodes);}
if(lineHeightIdx!==-1){const lineHeightValue=strings[lineHeightIdx];const nodes=lineHeight.get(lineHeightValue)||[];nodes.push(nodeId);lineHeight.set(lineHeightValue,nodes);}
fontFamilyInfo.set(sizeLabel,size);fontFamilyInfo.set(weightLabel,weight);fontFamilyInfo.set(lineHeightLabel,lineHeight);fontInfo.set(fontFamily,fontFamilyInfo);}
CssOverview.CSSOverviewUnusedDeclarations.checkForUnusedPositionValues(unusedDeclarations,nodeId,strings,positionIdx,topIdx,leftIdx,rightIdx,bottomIdx);if(!isSVGNode(strings[nodeName])&&!isReplacedContent(strings[nodeName])){CssOverview.CSSOverviewUnusedDeclarations.checkForUnusedWidthAndHeightValues(unusedDeclarations,nodeId,strings,displayIdx,widthIdx,heightIdx);}
if(verticalAlignIdx!==-1&&!isTableElementWithDefaultStyles(strings[nodeName],strings[displayIdx])){CssOverview.CSSOverviewUnusedDeclarations.checkForInvalidVerticalAlignment(unusedDeclarations,nodeId,strings,displayIdx,verticalAlignIdx);}}}
return{backgroundColors,textColors,fillColors,borderColors,fontInfo,unusedDeclarations,elementCount};}
getComputedStyleForNode(nodeId){return this._cssAgent.getComputedStyleForNode(nodeId);}
async getMediaQueries(){const queries=await this._cssAgent.getMediaQueries();const queryMap=new Map();if(!queries){return queryMap;}
for(const query of queries){if(query.source==='linkedSheet'){continue;}
const entries=queryMap.get(query.text)||[];entries.push(query);queryMap.set(query.text,entries);}
return queryMap;}
async getGlobalStylesheetStats(){const expression=`(function() {
      let styleRules = 0;
      let inlineStyles = 0;
      let externalSheets = 0;
      const stats = {
        // Simple.
        type: new Set(),
        class: new Set(),
        id: new Set(),
        universal: new Set(),
        attribute: new Set(),

        // Non-simple.
        nonSimple: new Set()
      };

      for (const styleSheet of document.styleSheets) {
        if (styleSheet.href) {
          externalSheets++;
        } else {
          inlineStyles++;
        }

        // Attempting to grab rules can trigger a DOMException.
        // Try it and if it fails skip to the next stylesheet.
        let rules;
        try {
          rules = styleSheet.rules;
        } catch (err) {
          continue;
        }

        for (const rule of rules) {
          if ('selectorText' in rule) {
            styleRules++;

            // Each group that was used.
            for (const selectorGroup of rule.selectorText.split(',')) {
              // Each selector in the group.
              for (const selector of selectorGroup.split(\/[\\t\\n\\f\\r ]+\/g)) {
                if (selector.startsWith('.')) {
                  // Class.
                  stats.class.add(selector);
                } else if (selector.startsWith('#')) {
                  // Id.
                  stats.id.add(selector);
                } else if (selector.startsWith('*')) {
                  // Universal.
                  stats.universal.add(selector);
                } else if (selector.startsWith('[')) {
                  // Attribute.
                  stats.attribute.add(selector);
                } else {
                  // Type or non-simple selector.
                  const specialChars = \/[#\.:\\[\\]|\\+>~]\/;
                  if (specialChars.test(selector)) {
                    stats.nonSimple.add(selector);
                  } else {
                    stats.type.add(selector);
                  }
                }
              }
            }
          }
        }
      }

      return {
        styleRules,
        inlineStyles,
        externalSheets,
        stats: {
          // Simple.
          type: stats.type.size,
          class: stats.class.size,
          id: stats.id.size,
          universal: stats.universal.size,
          attribute: stats.attribute.size,

          // Non-simple.
          nonSimple: stats.nonSimple.size
        }
      }
    })()`;const{result}=await this._runtimeAgent.invoke_evaluate({expression,returnByValue:true});if(result.type!=='object'){return;}
return result.value;}}
SDK.SDKModel.register(CSSOverviewModel,SDK.Target.Capability.DOM,false);self.CssOverview=self.CssOverview||{};CssOverview=CssOverview||{};CssOverview.CSSOverviewModel=CSSOverviewModel;export class OverviewController extends Common.Object{constructor(){super();this.currentUrl=SDK.targetManager.inspectedURL();SDK.targetManager.addEventListener(SDK.TargetManager.Events.InspectedURLChanged,this._checkUrlAndResetIfChanged,this);}
_checkUrlAndResetIfChanged(){if(this.currentUrl===SDK.targetManager.inspectedURL()){return;}
this.currentUrl=SDK.targetManager.inspectedURL();this.dispatchEventToListeners(Events.Reset);}}
export const Events={RequestOverviewStart:Symbol('RequestOverviewStart'),RequestNodeHighlight:Symbol('RequestNodeHighlight'),PopulateNodes:Symbol('PopulateNodes'),RequestOverviewCancel:Symbol('RequestOverviewCancel'),OverviewCompleted:Symbol('OverviewCompleted'),Reset:Symbol('Reset'),};self.CssOverview=self.CssOverview||{};CssOverview=CssOverview||{};CssOverview.OverviewController=OverviewController;CssOverview.Events=Events;export default class CSSOverviewCompletedView extends UI.PanelWithSidebar{constructor(controller,target){super('css_overview_completed_view');this.registerRequiredCSS('css_overview/cssOverviewCompletedView.css');this._controller=controller;this._formatter=new Intl.NumberFormat('en-US');this._mainContainer=new UI.SplitWidget(true,true);this._resultsContainer=new UI.VBox();this._elementContainer=new DetailsView();this._elementContainer.addEventListener(UI.TabbedPane.Events.TabClosed,evt=>{if(evt.data===0){this._mainContainer.setSidebarMinimized(true);}});this._mainContainer.registerRequiredCSS('css_overview/cssOverviewCompletedView.css');this._mainContainer.setMainWidget(this._resultsContainer);this._mainContainer.setSidebarWidget(this._elementContainer);this._mainContainer.setVertical(false);this._mainContainer.setSecondIsSidebar(true);this._mainContainer.setSidebarMinimized(true);this._sideBar=new CssOverview.CSSOverviewSidebarPanel();this.splitWidget().setSidebarWidget(this._sideBar);this.splitWidget().setMainWidget(this._mainContainer);this._cssModel=target.model(SDK.CSSModel);this._domModel=target.model(SDK.DOMModel);this._domAgent=target.domAgent();this._linkifier=new Components.Linkifier(20,true);this._viewMap=new Map();this._sideBar.addItem(ls`Overview summary`,'summary');this._sideBar.addItem(ls`Colors`,'colors');this._sideBar.addItem(ls`Font info`,'font-info');this._sideBar.addItem(ls`Unused declarations`,'unused-declarations');this._sideBar.addItem(ls`Media queries`,'media-queries');this._sideBar.select('summary');this._sideBar.addEventListener(CssOverview.SidebarEvents.ItemSelected,this._sideBarItemSelected,this);this._sideBar.addEventListener(CssOverview.SidebarEvents.Reset,this._sideBarReset,this);this._controller.addEventListener(CssOverview.Events.Reset,this._reset,this);this._controller.addEventListener(CssOverview.Events.PopulateNodes,this._createElementsView,this);this._resultsContainer.element.addEventListener('click',this._onClick.bind(this));this._data=null;}
wasShown(){super.wasShown();}
_sideBarItemSelected(event){const section=this._fragment.$(event.data);if(!section){return;}
section.scrollIntoView();}
_sideBarReset(){this._controller.dispatchEventToListeners(CssOverview.Events.Reset);}
_reset(){this._resultsContainer.element.removeChildren();this._mainContainer.setSidebarMinimized(true);this._elementContainer.closeTabs();this._viewMap=new Map();}
_onClick(evt){const type=evt.target.dataset.type;if(!type){return;}
let payload;switch(type){case'color':{const color=evt.target.dataset.color;const section=evt.target.dataset.section;if(!color){return;}
let nodes;switch(section){case'text':nodes=this._data.textColors.get(color);break;case'background':nodes=this._data.backgroundColors.get(color);break;case'fill':nodes=this._data.fillColors.get(color);break;case'border':nodes=this._data.borderColors.get(color);break;}
if(!nodes){return;}
nodes=Array.from(nodes).map(nodeId=>({nodeId}));payload={type,color,nodes,section};break;}
case'unused-declarations':{const declaration=evt.target.dataset.declaration;const nodes=this._data.unusedDeclarations.get(declaration);if(!nodes){return;}
payload={type,declaration,nodes};break;}
case'media-queries':{const text=evt.target.dataset.text;const nodes=this._data.mediaQueries.get(text);if(!nodes){return;}
payload={type,text,nodes};break;}
case'font-info':{const value=evt.target.dataset.value;const[fontFamily,fontMetric]=evt.target.dataset.path.split('/');const nodesIds=this._data.fontInfo.get(fontFamily).get(fontMetric).get(value);if(!nodesIds){return;}
const nodes=nodesIds.map(nodeId=>({nodeId}));const name=`${value} (${fontFamily}, ${fontMetric})`;payload={type,name,nodes};break;}
default:return;}
evt.consume();this._controller.dispatchEventToListeners(CssOverview.Events.PopulateNodes,payload);this._mainContainer.setSidebarMinimized(false);}
_onMouseOver(evt){const node=evt.path.find(el=>el.dataset&&el.dataset.backendNodeId);if(!node){return;}
const backendNodeId=Number(node.dataset.backendNodeId);this._controller.dispatchEventToListeners(CssOverview.Events.RequestNodeHighlight,backendNodeId);}
async _render(data){if(!data||!('backgroundColors'in data)||!('textColors'in data)){return;}
this._data=data;const{elementCount,backgroundColors,textColors,fillColors,borderColors,globalStyleStats,mediaQueries,unusedDeclarations,fontInfo}=this._data;const sortedBackgroundColors=this._sortColorsByLuminance(backgroundColors);const sortedTextColors=this._sortColorsByLuminance(textColors);const sortedFillColors=this._sortColorsByLuminance(fillColors);const sortedBorderColors=this._sortColorsByLuminance(borderColors);this._fragment=UI.Fragment.build`
    <div class="vbox overview-completed-view">
      <div $="summary" class="results-section horizontally-padded summary">
        <h1>${ls`Overview summary`}</h1>

        <ul>
          <li>
            <div class="label">${ls`Elements`}</div>
            <div class="value">${this._formatter.format(elementCount)}</div>
          </li>
          <li>
            <div class="label">${ls`External stylesheets`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.externalSheets)}</div>
          </li>
          <li>
            <div class="label">${ls`Inline style elements`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.inlineStyles)}</div>
          </li>
          <li>
            <div class="label">${ls`Style rules`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.styleRules)}</div>
          </li>
          <li>
            <div class="label">${ls`Media queries`}</div>
            <div class="value">${this._formatter.format(mediaQueries.size)}</div>
          </li>
          <li>
            <div class="label">${ls`Type selectors`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.stats.type)}</div>
          </li>
          <li>
            <div class="label">${ls`ID selectors`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.stats.id)}</div>
          </li>
          <li>
            <div class="label">${ls`Class selectors`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.stats.class)}</div>
          </li>
          <li>
            <div class="label">${ls`Universal selectors`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.stats.universal)}</div>
          </li>
          <li>
            <div class="label">${ls`Attribute selectors`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.stats.attribute)}</div>
          </li>
          <li>
            <div class="label">${ls`Non-simple selectors`}</div>
            <div class="value">${this._formatter.format(globalStyleStats.stats.nonSimple)}</div>
          </li>
        </ul>
      </div>

      <div $="colors" class="results-section horizontally-padded colors">
        <h1>${ls`Colors`}</h1>
        <h2>${ls`Background colors:${sortedBackgroundColors.length}`}</h2>
        <ul>
          ${sortedBackgroundColors.map(this._colorsToFragment.bind(this, 'background'))}
        </ul>

        <h2>${ls`Text colors:${sortedTextColors.length}`}</h2>
        <ul>
          ${sortedTextColors.map(this._colorsToFragment.bind(this, 'text'))}
        </ul>

        <h2>${ls`Fill colors:${sortedFillColors.length}`}</h2>
        <ul>
          ${sortedFillColors.map(this._colorsToFragment.bind(this, 'fill'))}
        </ul>

        <h2>${ls`Border colors:${sortedBorderColors.length}`}</h2>
        <ul>
          ${sortedBorderColors.map(this._colorsToFragment.bind(this, 'border'))}
        </ul>
      </div>

      <div $="font-info" class="results-section font-info">
        <h1>${ls`Font info`}</h1>
        ${
        fontInfo.size > 0 ? this._fontInfoToFragment(fontInfo) :
                            UI.Fragment.build`<div>${ls`There are no fonts.`}</div>`}
      </div>

      <div $="unused-declarations" class="results-section unused-declarations">
        <h1>${ls`Unused declarations`}</h1>
        ${
        unusedDeclarations.size > 0 ?
            this._groupToFragment(unusedDeclarations, 'unused-declarations', 'declaration') :
            UI.Fragment.build`<div class="horizontally-padded">${ls`There are no unused declarations.`}</div>`}
      </div>

      <div $="media-queries" class="results-section media-queries">
        <h1>${ls`Media queries`}</h1>
        ${
        mediaQueries.size > 0 ?
            this._groupToFragment(mediaQueries, 'media-queries', 'text') :
            UI.Fragment.build`<div class="horizontally-padded">${ls`There are no media queries.`}</div>`}
      </div>
    </div>`;this._resultsContainer.element.appendChild(this._fragment.element());}
_createElementsView(evt){const{type,nodes}=evt.data;let id='';let tabTitle='';switch(type){case'color':const{section,color}=evt.data;id=`${section}-${color}`;tabTitle=`${color.toUpperCase()} (${section})`;break;case'unused-declarations':const{declaration}=evt.data;id=`${declaration}`;tabTitle=`${declaration}`;break;case'media-queries':const{text}=evt.data;id=`${text}`;tabTitle=`${text}`;break;case'font-info':const{name}=evt.data;id=`${name}`;tabTitle=`${name}`;break;}
let view=this._viewMap.get(id);if(!view){view=new ElementDetailsView(this._controller,this._domModel,this._cssModel,this._linkifier);view.populateNodes(nodes);this._viewMap.set(id,view);}
this._elementContainer.appendTab(id,tabTitle,view,true);}
_fontInfoToFragment(fontInfo){const fonts=Array.from(fontInfo.entries());return UI.Fragment.build`
      ${fonts.map(([font, fontMetrics]) => {
      return UI.Fragment.build
      `<section class="font-family"><h2>${font}</h2>${this._fontMetricsToFragment(font,fontMetrics)}</section>`;
    })}
    `;}
_fontMetricsToFragment(font,fontMetrics){const fontMetricInfo=Array.from(fontMetrics.entries());return UI.Fragment.build`
      <div class="font-metric">
      ${fontMetricInfo.map(([label, values]) => {
      const sanitizedPath = `${font}/${label}`;
      return UI.Fragment.build`<div><h3>${label}</h3>${this._groupToFragment(values,'font-info','value',sanitizedPath)}</div>`;
    })}
      </div>`;}
_groupToFragment(items,type,dataLabel,path=''){const values=Array.from(items.entries()).sort((d1,d2)=>{const v1Nodes=d1[1];const v2Nodes=d2[1];return v2Nodes.length-v1Nodes.length;});const total=values.reduce((prev,curr)=>prev+curr[1].length,0);return UI.Fragment.build`<ul>
    ${values.map(([title, nodes]) => {
      const width = 100 * nodes.length / total;
      const itemLabel = nodes.length === 1 ? ls`occurrence` : ls`occurrences`;

      return UI.Fragment.build`<li><div class="title">${title}</div><button data-type="${type}"data-path="${path}"data-${dataLabel}="${title}"><div class="details">${ls`${nodes.length} ${itemLabel}`}</div><div class="bar-container"><div class="bar"style="width: ${width}%"></div></div></button></li>`;
    })}
    </ul>`;}
_colorsToFragment(section,color){const blockFragment=UI.Fragment.build`<li>
      <button data-type="color" data-color="${color}" data-section="${section}" class="block" $="color"></button>
      <div class="block-title">${color}</div>
    </li>`;const block=blockFragment.$('color');block.style.backgroundColor=color;const borderColor=Common.Color.parse(color);let[h,s,l]=borderColor.hsla();h=Math.round(h*360);s=Math.round(s*100);l=Math.round(l*100);l=Math.max(0,l-15);const borderString=`1px solid hsl(${h}, ${s}%, ${l}%)`;block.style.border=borderString;return blockFragment;}
_sortColorsByLuminance(srcColors){return Array.from(srcColors.keys()).sort((colA,colB)=>{const colorA=Common.Color.parse(colA);const colorB=Common.Color.parse(colB);return Common.Color.luminance(colorB.rgba())-Common.Color.luminance(colorA.rgba());});}
setOverviewData(data){this._render(data);}}
CSSOverviewCompletedView.pushedNodes=new Set();export class DetailsView extends UI.VBox{constructor(){super();this._tabbedPane=new UI.TabbedPane();this._tabbedPane.show(this.element);this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabClosed,()=>{this.dispatchEventToListeners(UI.TabbedPane.Events.TabClosed,this._tabbedPane.tabIds().length);});}
appendTab(id,tabTitle,view,isCloseable){if(!this._tabbedPane.hasTab(id)){this._tabbedPane.appendTab(id,tabTitle,view,undefined,undefined,isCloseable);}
this._tabbedPane.selectTab(id);}
closeTabs(){this._tabbedPane.closeTabs(this._tabbedPane.tabIds());}}
export class ElementDetailsView extends UI.Widget{constructor(controller,domModel,cssModel,linkifier){super();this._controller=controller;this._domModel=domModel;this._cssModel=cssModel;this._linkifier=linkifier;this._elementGridColumns=[{id:'nodeId',title:ls`Element`,visible:false,sortable:true,hideable:true,weight:50},{id:'declaration',title:ls`Declaration`,visible:false,sortable:true,hideable:true,weight:50},{id:'sourceURL',title:ls`Source`,visible:true,sortable:false,hideable:true,weight:100}];this._elementGrid=new DataGrid.SortableDataGrid(this._elementGridColumns);this._elementGrid.element.classList.add('element-grid');this._elementGrid.element.addEventListener('mouseover',this._onMouseOver.bind(this));this._elementGrid.setStriped(true);this._elementGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortMediaQueryDataGrid.bind(this));this.element.appendChild(this._elementGrid.element);}
_sortMediaQueryDataGrid(){const sortColumnId=this._elementGrid.sortColumnId();if(!sortColumnId){return;}
const comparator=DataGrid.SortableDataGrid.StringComparator.bind(null,sortColumnId);this._elementGrid.sortNodes(comparator,!this._elementGrid.isSortOrderAscending());}
_onMouseOver(evt){const node=evt.path.find(el=>el.dataset&&el.dataset.backendNodeId);if(!node){return;}
const backendNodeId=Number(node.dataset.backendNodeId);this._controller.dispatchEventToListeners(CssOverview.Events.RequestNodeHighlight,backendNodeId);}
async populateNodes(data){this._elementGrid.rootNode().removeChildren();if(!data.length){return;}
const[firstItem]=data;const visibility={'nodeId':!!firstItem.nodeId,'declaration':!!firstItem.declaration,'sourceURL':!!firstItem.sourceURL};let relatedNodesMap;if(visibility.nodeId){const nodeIds=data.reduce((prev,curr)=>{if(CssOverview.CSSOverviewCompletedView.pushedNodes.has(curr.nodeId)){return prev;}
CssOverview.CSSOverviewCompletedView.pushedNodes.add(curr.nodeId);return prev.add(curr.nodeId);},new Set());relatedNodesMap=await this._domModel.pushNodesByBackendIdsToFrontend(nodeIds);}
for(const item of data){if(visibility.nodeId){const frontendNode=relatedNodesMap.get(item.nodeId);if(!frontendNode){continue;}
item.node=frontendNode;}
const node=new ElementNode(this._elementGrid,item,this._linkifier,this._cssModel);node.selectable=false;this._elementGrid.insertChild(node);}
this._elementGrid.setColumnsVisiblity(visibility);this._elementGrid.renderInline();this._elementGrid.wasShown();}}
export class ElementNode extends DataGrid.SortableDataGridNode{constructor(dataGrid,data,linkifier,cssModel){super(dataGrid,data.hasChildren);this.data=data;this._linkifier=linkifier;this._cssModel=cssModel;}
createCell(columnId){if(columnId==='nodeId'){const cell=this.createTD(columnId);cell.textContent='...';Common.Linkifier.linkify(this.data.node).then(link=>{cell.textContent='';link.dataset.backendNodeId=this.data.node.backendNodeId();cell.appendChild(link);});return cell;}
if(columnId==='sourceURL'){const cell=this.createTD(columnId);if(this.data.range){const link=this._linkifyRuleLocation(this._cssModel,this._linkifier,this.data.styleSheetId,TextUtils.TextRange.fromObject(this.data.range));if(link.textContent!==''){cell.appendChild(link);}else{cell.textContent=`(unable to link)`;}}else{cell.textContent='(unable to link to inlined styles)';}
return cell;}
return super.createCell(columnId);}
_linkifyRuleLocation(cssModel,linkifier,styleSheetId,ruleLocation){const styleSheetHeader=cssModel.styleSheetHeaderForId(styleSheetId);const lineNumber=styleSheetHeader.lineNumberInSource(ruleLocation.startLine);const columnNumber=styleSheetHeader.columnNumberInSource(ruleLocation.startLine,ruleLocation.startColumn);const matchingSelectorLocation=new SDK.CSSLocation(styleSheetHeader,lineNumber,columnNumber);return linkifier.linkifyCSSLocation(matchingSelectorLocation);}}
self.CssOverview=self.CssOverview||{};CssOverview=CssOverview||{};CssOverview.CSSOverviewCompletedView=CSSOverviewCompletedView;CssOverview.CSSOverviewCompletedView.DetailsView=DetailsView;CssOverview.CSSOverviewCompletedView.ElementDetailsView=ElementDetailsView;CssOverview.CSSOverviewCompletedView.ElementNode=ElementNode;'use strict';const ELLIPSIS='\u2026';const NBSP='\xa0';const PASS_THRESHOLD=0.9;const SCREENSHOT_PREFIX='data:image/jpeg;base64,';const RATINGS={PASS:{label:'pass',minScore:PASS_THRESHOLD},AVERAGE:{label:'average',minScore:0.5},FAIL:{label:'fail'},ERROR:{label:'error'},};const listOfTlds=['com','co','gov','edu','ac','org','go','gob','or','net','in','ne','nic','gouv','web','spb','blog','jus','kiev','mil','wi','qc','ca','bel','on',];class Util{static get PASS_THRESHOLD(){return PASS_THRESHOLD;}
static get MS_DISPLAY_VALUE(){return`%10d${NBSP}ms`;}
static prepareReportResult(result){const clone=(JSON.parse(JSON.stringify(result)));if(!clone.configSettings.locale){clone.configSettings.locale='en';}
for(const audit of Object.values(clone.audits)){if(audit.scoreDisplayMode==='not_applicable'||audit.scoreDisplayMode==='not-applicable'){audit.scoreDisplayMode='notApplicable';}
if(audit.details){if(audit.details.type===undefined||audit.details.type==='diagnostic'){audit.details.type='debugdata';}
if(audit.details.type==='filmstrip'){for(const screenshot of audit.details.items){if(!screenshot.data.startsWith(SCREENSHOT_PREFIX)){screenshot.data=SCREENSHOT_PREFIX+screenshot.data;}}}}}
Util.setNumberDateLocale(clone.configSettings.locale);if(clone.i18n&&clone.i18n.rendererFormattedStrings){Util.updateAllUIStrings(clone.i18n.rendererFormattedStrings);}
if(typeof clone.categories!=='object')throw new Error('No categories provided.');for(const category of Object.values(clone.categories)){category.auditRefs.forEach(auditRef=>{const result=clone.audits[auditRef.id];auditRef.result=result;if(clone.stackPacks){clone.stackPacks.forEach(pack=>{if(pack.descriptions[auditRef.id]){auditRef.stackPacks=auditRef.stackPacks||[];auditRef.stackPacks.push({title:pack.title,iconDataURL:pack.iconDataURL,description:pack.descriptions[auditRef.id],});}});}});}
return clone;}
static updateAllUIStrings(rendererFormattedStrings){for(const[key,value]of Object.entries(rendererFormattedStrings)){Util.UIStrings[key]=value;}}
static showAsPassed(audit){switch(audit.scoreDisplayMode){case'manual':case'notApplicable':return true;case'error':case'informative':return false;case'numeric':case'binary':default:return Number(audit.score)>=RATINGS.PASS.minScore;}}
static calculateRating(score,scoreDisplayMode){if(scoreDisplayMode==='manual'||scoreDisplayMode==='notApplicable'){return RATINGS.PASS.label;}else if(scoreDisplayMode==='error'){return RATINGS.ERROR.label;}else if(score===null){return RATINGS.FAIL.label;}
let rating=RATINGS.FAIL.label;if(score>=RATINGS.PASS.minScore){rating=RATINGS.PASS.label;}else if(score>=RATINGS.AVERAGE.minScore){rating=RATINGS.AVERAGE.label;}
return rating;}
static formatNumber(number,granularity=0.1){const coarseValue=Math.round(number/granularity)*granularity;return Util.numberFormatter.format(coarseValue);}
static formatBytesToKB(size,granularity=0.1){const kbs=Util.numberFormatter.format(Math.round(size/1024/granularity)*granularity);return`${kbs}${NBSP}KB`;}
static formatMilliseconds(ms,granularity=10){const coarseTime=Math.round(ms/granularity)*granularity;return`${Util.numberFormatter.format(coarseTime)}${NBSP}ms`;}
static formatSeconds(ms,granularity=0.1){const coarseTime=Math.round(ms/1000/granularity)*granularity;return`${Util.numberFormatter.format(coarseTime)}${NBSP}s`;}
static formatDateTime(date){const options={month:'short',day:'numeric',year:'numeric',hour:'numeric',minute:'numeric',timeZoneName:'short',};let formatter=new Intl.DateTimeFormat(Util.numberDateLocale,options);const tz=formatter.resolvedOptions().timeZone;if(!tz||tz.toLowerCase()==='etc/unknown'){options.timeZone='UTC';formatter=new Intl.DateTimeFormat(Util.numberDateLocale,options);}
return formatter.format(new Date(date));}
static formatDuration(timeInMilliseconds){let timeInSeconds=timeInMilliseconds/1000;if(Math.round(timeInSeconds)===0){return'None';}
const parts=[];const unitLabels=({d:60*60*24,h:60*60,m:60,s:1,});Object.keys(unitLabels).forEach(label=>{const unit=unitLabels[label];const numberOfUnits=Math.floor(timeInSeconds/unit);if(numberOfUnits>0){timeInSeconds-=numberOfUnits*unit;parts.push(`${numberOfUnits}\xa0${label}`);}});return parts.join(' ');}
static splitMarkdownCodeSpans(text){const segments=[];const parts=text.split(/`(.*?)`/g);for(let i=0;i<parts.length;i++){const text=parts[i];if(!text)continue;const isCode=i%2!==0;segments.push({isCode,text,});}
return segments;}
static splitMarkdownLink(text){const segments=[];const parts=text.split(/\[([^\]]+?)\]\((https?:\/\/.*?)\)/g);while(parts.length){const[preambleText,linkText,linkHref]=parts.splice(0,3);if(preambleText){segments.push({isLink:false,text:preambleText,});}
if(linkText&&linkHref){segments.push({isLink:true,text:linkText,linkHref,});}}
return segments;}
static getURLDisplayName(parsedUrl,options){options=options||{numPathParts:undefined,preserveQuery:undefined,preserveHost:undefined};const numPathParts=options.numPathParts!==undefined?options.numPathParts:2;const preserveQuery=options.preserveQuery!==undefined?options.preserveQuery:true;const preserveHost=options.preserveHost||false;let name;if(parsedUrl.protocol==='about:'||parsedUrl.protocol==='data:'){name=parsedUrl.href;}else{name=parsedUrl.pathname;const parts=name.split('/').filter(part=>part.length);if(numPathParts&&parts.length>numPathParts){name=ELLIPSIS+parts.slice(-1*numPathParts).join('/');}
if(preserveHost){name=`${parsedUrl.host}/${name.replace(/^\//, '')}`;}
if(preserveQuery){name=`${name}${parsedUrl.search}`;}}
const MAX_LENGTH=64;name=name.replace(/([a-f0-9]{7})[a-f0-9]{13}[a-f0-9]*/g,`$1${ELLIPSIS}`);name=name.replace(/([a-zA-Z0-9-_]{9})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9-_]{10,}/g,`$1${ELLIPSIS}`);name=name.replace(/(\d{3})\d{6,}/g,`$1${ELLIPSIS}`);name=name.replace(/\u2026+/g,ELLIPSIS);if(name.length>MAX_LENGTH&&name.includes('?')){name=name.replace(/\?([^=]*)(=)?.*/,`?$1$2${ELLIPSIS}`);if(name.length>MAX_LENGTH){name=name.replace(/\?.*/,`?${ELLIPSIS}`);}}
if(name.length>MAX_LENGTH){const dotIndex=name.lastIndexOf('.');if(dotIndex>=0){name=name.slice(0,MAX_LENGTH-1-(name.length-dotIndex))+`${ELLIPSIS}${name.slice(dotIndex)}`;}else{name=name.slice(0,MAX_LENGTH-1)+ELLIPSIS;}}
return name;}
static parseURL(url){const parsedUrl=new URL(url);return{file:Util.getURLDisplayName(parsedUrl),hostname:parsedUrl.hostname,origin:parsedUrl.origin,};}
static createOrReturnURL(value){if(value instanceof URL){return value;}
return new URL(value);}
static getTld(hostname){const tlds=hostname.split('.').slice(-2);if(!listOfTlds.includes(tlds[0])){return`.${tlds[tlds.length - 1]}`;}
return`.${tlds.join('.')}`;}
static getRootDomain(url){const hostname=Util.createOrReturnURL(url).hostname;const tld=Util.getTld(hostname);const splitTld=tld.split('.');return hostname.split('.').slice(-splitTld.length).join('.');}
static getEnvironmentDisplayValues(settings){const emulationDesc=Util.getEmulationDescriptions(settings);return[{name:'Device',description:emulationDesc.deviceEmulation,},{name:'Network throttling',description:emulationDesc.networkThrottling,},{name:'CPU throttling',description:emulationDesc.cpuThrottling,},];}
static getEmulationDescriptions(settings){let cpuThrottling;let networkThrottling;let summary;const throttling=settings.throttling;switch(settings.throttlingMethod){case'provided':cpuThrottling='Provided by environment';networkThrottling='Provided by environment';summary='No throttling applied';break;case'devtools':{const{cpuSlowdownMultiplier,requestLatencyMs}=throttling;cpuThrottling=`${Util.formatNumber(cpuSlowdownMultiplier)}x slowdown (DevTools)`;networkThrottling=`${Util.formatNumber(requestLatencyMs)}${NBSP}ms HTTP RTT, `+`${Util.formatNumber(throttling.downloadThroughputKbps)}${NBSP}Kbps down, `+`${Util.formatNumber(throttling.uploadThroughputKbps)}${NBSP}Kbps up (DevTools)`;summary='Throttled Slow 4G network';break;}
case'simulate':{const{cpuSlowdownMultiplier,rttMs,throughputKbps}=throttling;cpuThrottling=`${Util.formatNumber(cpuSlowdownMultiplier)}x slowdown (Simulated)`;networkThrottling=`${Util.formatNumber(rttMs)}${NBSP}ms TCP RTT, `+`${Util.formatNumber(throughputKbps)}${NBSP}Kbps throughput (Simulated)`;summary='Simulated Slow 4G network';break;}
default:cpuThrottling='Unknown';networkThrottling='Unknown';summary='Unknown';}
let deviceEmulation='No emulation';if(settings.emulatedFormFactor==='mobile')deviceEmulation='Emulated Nexus 5X';if(settings.emulatedFormFactor==='desktop')deviceEmulation='Emulated Desktop';return{deviceEmulation,cpuThrottling,networkThrottling,summary:`${deviceEmulation}, ${summary}`,};}
static setNumberDateLocale(locale){if(locale==='en-XA')locale='de';Util.numberDateLocale=locale;Util.numberFormatter=new Intl.NumberFormat(locale);}
static filterRelevantLines(lines,lineMessages,surroundingLineCount){if(lineMessages.length===0){return lines.slice(0,surroundingLineCount*2+1);}
const minGapSize=3;const lineNumbersToKeep=new Set();lineMessages=lineMessages.sort((a,b)=>(a.lineNumber||0)-(b.lineNumber||0));lineMessages.forEach(({lineNumber})=>{let firstSurroundingLineNumber=lineNumber-surroundingLineCount;let lastSurroundingLineNumber=lineNumber+surroundingLineCount;while(firstSurroundingLineNumber<1){firstSurroundingLineNumber++;lastSurroundingLineNumber++;}
if(lineNumbersToKeep.has(firstSurroundingLineNumber-minGapSize-1)){firstSurroundingLineNumber-=minGapSize;}
for(let i=firstSurroundingLineNumber;i<=lastSurroundingLineNumber;i++){const surroundingLineNumber=i;lineNumbersToKeep.add(surroundingLineNumber);}});return lines.filter(line=>lineNumbersToKeep.has(line.lineNumber));}
static isPluginCategory(categoryId){return categoryId.startsWith('lighthouse-plugin-');}}
Util.numberDateLocale='en';Util.numberFormatter=new Intl.NumberFormat(Util.numberDateLocale);Util.UIStrings={varianceDisclaimer:'Values are estimated and may vary. The performance score is [based only on these metrics](https://github.com/GoogleChrome/lighthouse/blob/d2ec9ffbb21de9ad1a0f86ed24575eda32c796f0/docs/scoring.md#how-are-the-scores-weighted).',opportunityResourceColumnLabel:'Opportunity',opportunitySavingsColumnLabel:'Estimated Savings',errorMissingAuditInfo:'Report error: no audit information',errorLabel:'Error!',warningHeader:'Warnings: ',auditGroupExpandTooltip:'Show audits',warningAuditsGroupTitle:'Passed audits but with warnings',passedAuditsGroupTitle:'Passed audits',notApplicableAuditsGroupTitle:'Not applicable',manualAuditsGroupTitle:'Additional items to manually check',toplevelWarningsMessage:'There were issues affecting this run of Lighthouse:',crcInitialNavigation:'Initial Navigation',crcLongestDurationLabel:'Maximum critical path latency:',snippetExpandButtonLabel:'Expand snippet',snippetCollapseButtonLabel:'Collapse snippet',lsPerformanceCategoryDescription:'[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.',labDataTitle:'Lab Data',thirdPartyResourcesLabel:'Show 3rd-party resources',};if(typeof module!=='undefined'&&module.exports){module.exports=Util;}else{self.Util=Util;};'use strict';class DOM{constructor(document){this._document=document;this._lighthouseChannel='unknown';}
createElement(name,className,attrs={}){const element=this._document.createElement(name);if(className){element.className=className;}
Object.keys(attrs).forEach(key=>{const value=attrs[key];if(typeof value!=='undefined'){element.setAttribute(key,value);}});return element;}
createFragment(){return this._document.createDocumentFragment();}
createChildOf(parentElem,elementName,className,attrs){const element=this.createElement(elementName,className,attrs);parentElem.appendChild(element);return element;}
cloneTemplate(selector,context){const template=(context.querySelector(selector));if(!template){throw new Error(`Template not found: template${selector}`);}
const clone=this._document.importNode(template.content,true);if(template.hasAttribute('data-stamped')){this.findAll('style',clone).forEach(style=>style.remove());}
template.setAttribute('data-stamped','true');return clone;}
resetTemplates(){this.findAll('template[data-stamped]',this._document).forEach(t=>{t.removeAttribute('data-stamped');});}
convertMarkdownLinkSnippets(text){const element=this.createElement('span');for(const segment of Util.splitMarkdownLink(text)){if(!segment.isLink){element.appendChild(this._document.createTextNode(segment.text));continue;}
const url=new URL(segment.linkHref);const DOCS_ORIGINS=['https://developers.google.com','https://web.dev'];if(DOCS_ORIGINS.includes(url.origin)){url.searchParams.set('utm_source','lighthouse');url.searchParams.set('utm_medium',this._lighthouseChannel);}
const a=this.createElement('a');a.rel='noopener';a.target='_blank';a.textContent=segment.text;a.href=url.href;element.appendChild(a);}
return element;}
convertMarkdownCodeSnippets(markdownText){const element=this.createElement('span');for(const segment of Util.splitMarkdownCodeSpans(markdownText)){if(segment.isCode){const pre=this.createElement('code');pre.textContent=segment.text;element.appendChild(pre);}else{element.appendChild(this._document.createTextNode(segment.text));}}
return element;}
setLighthouseChannel(lighthouseChannel){this._lighthouseChannel=lighthouseChannel;}
document(){return this._document;}
isDevTools(){return!!this._document.querySelector('.lh-devtools');}
find(query,context){const result=context.querySelector(query);if(result===null){throw new Error(`query ${query} not found`);}
return result;}
findAll(query,context){return Array.from(context.querySelectorAll(query));}}
if(typeof module!=='undefined'&&module.exports){module.exports=DOM;}else{self.DOM=DOM;};(function(){"use strict";var element=document.createElement("details");var elementIsNative=typeof HTMLDetailsElement!="undefined"&&element instanceof HTMLDetailsElement;var support={open:"open"in element||elementIsNative,toggle:"ontoggle"in element};var styles='\ndetails, summary {\n  display: block;\n}\ndetails:not([open]) > *:not(summary) {\n  display: none;\n}\nsummary::before {\n  content: "►";\n  padding-right: 0.3rem;\n  font-size: 0.6rem;\n  cursor: default;\n}\n[open] > summary::before {\n  content: "▼";\n}\n';var _ref=[],forEach=_ref.forEach,slice=_ref.slice;if(!support.open){polyfillStyles();polyfillProperties();polyfillToggle();polyfillAccessibility();}
if(support.open&&!support.toggle){polyfillToggleEvent();}
function polyfillStyles(){document.head.insertAdjacentHTML("afterbegin","<style>"+styles+"</style>");}
function polyfillProperties(){var prototype=document.createElement("details").constructor.prototype;var setAttribute=prototype.setAttribute,removeAttribute=prototype.removeAttribute;var open=Object.getOwnPropertyDescriptor(prototype,"open");Object.defineProperties(prototype,{open:{get:function get(){if(this.tagName=="DETAILS"){return this.hasAttribute("open");}else{if(open&&open.get){return open.get.call(this);}}},set:function set(value){if(this.tagName=="DETAILS"){return value?this.setAttribute("open",""):this.removeAttribute("open");}else{if(open&&open.set){return open.set.call(this,value);}}}},setAttribute:{value:function value(name,_value){var _this=this;var call=function call(){return setAttribute.call(_this,name,_value);};if(name=="open"&&this.tagName=="DETAILS"){var wasOpen=this.hasAttribute("open");var result=call();if(!wasOpen){var summary=this.querySelector("summary");if(summary)summary.setAttribute("aria-expanded",true);triggerToggle(this);}
return result;}
return call();}},removeAttribute:{value:function value(name){var _this2=this;var call=function call(){return removeAttribute.call(_this2,name);};if(name=="open"&&this.tagName=="DETAILS"){var wasOpen=this.hasAttribute("open");var result=call();if(wasOpen){var summary=this.querySelector("summary");if(summary)summary.setAttribute("aria-expanded",false);triggerToggle(this);}
return result;}
return call();}}});}
function polyfillToggle(){onTogglingTrigger(function(element){element.hasAttribute("open")?element.removeAttribute("open"):element.setAttribute("open","");});}
function polyfillToggleEvent(){if(window.MutationObserver){new MutationObserver(function(mutations){forEach.call(mutations,function(mutation){var target=mutation.target,attributeName=mutation.attributeName;if(target.tagName=="DETAILS"&&attributeName=="open"){triggerToggle(target);}});}).observe(document.documentElement,{attributes:true,subtree:true});}else{onTogglingTrigger(function(element){var wasOpen=element.getAttribute("open");setTimeout(function(){var isOpen=element.getAttribute("open");if(wasOpen!=isOpen){triggerToggle(element);}},1);});}}
function polyfillAccessibility(){setAccessibilityAttributes(document);if(window.MutationObserver){new MutationObserver(function(mutations){forEach.call(mutations,function(mutation){forEach.call(mutation.addedNodes,setAccessibilityAttributes);});}).observe(document.documentElement,{subtree:true,childList:true});}else{document.addEventListener("DOMNodeInserted",function(event){setAccessibilityAttributes(event.target);});}}
function setAccessibilityAttributes(root){findElementsWithTagName(root,"SUMMARY").forEach(function(summary){var details=findClosestElementWithTagName(summary,"DETAILS");summary.setAttribute("aria-expanded",details.hasAttribute("open"));if(!summary.hasAttribute("tabindex"))summary.setAttribute("tabindex","0");if(!summary.hasAttribute("role"))summary.setAttribute("role","button");});}
function eventIsSignificant(event){return!(event.defaultPrevented||event.ctrlKey||event.metaKey||event.shiftKey||event.target.isContentEditable);}
function onTogglingTrigger(callback){addEventListener("click",function(event){if(eventIsSignificant(event)){if(event.which<=1){var element=findClosestElementWithTagName(event.target,"SUMMARY");if(element&&element.parentNode&&element.parentNode.tagName=="DETAILS"){callback(element.parentNode);}}}},false);addEventListener("keydown",function(event){if(eventIsSignificant(event)){if(event.keyCode==13||event.keyCode==32){var element=findClosestElementWithTagName(event.target,"SUMMARY");if(element&&element.parentNode&&element.parentNode.tagName=="DETAILS"){callback(element.parentNode);event.preventDefault();}}}},false);}
function triggerToggle(element){var event=document.createEvent("Event");event.initEvent("toggle",false,false);element.dispatchEvent(event);}
function findElementsWithTagName(root,tagName){return(root.tagName==tagName?[root]:[]).concat(typeof root.getElementsByTagName=="function"?slice.call(root.getElementsByTagName(tagName)):[]);}
function findClosestElementWithTagName(element,tagName){if(typeof element.closest=="function"){return element.closest(tagName);}else{while(element){if(element.tagName==tagName){return element;}else{element=element.parentNode;}}}}})();;'use strict';const URL_PREFIXES=['http://','https://','data:'];class DetailsRenderer{constructor(dom){this._dom=dom;this._templateContext;}
setTemplateContext(context){this._templateContext=context;}
render(details){switch(details.type){case'filmstrip':return this._renderFilmstrip(details);case'list':return this._renderList(details);case'table':return this._renderTable(details);case'criticalrequestchain':return CriticalRequestChainRenderer.render(this._dom,this._templateContext,details,this);case'opportunity':return this._renderTable(details);case'screenshot':case'debugdata':return null;default:{return this._renderUnknown(details.type,details);}}}
_renderBytes(details){const value=Util.formatBytesToKB(details.value,details.granularity);return this._renderText(value);}
_renderMilliseconds(details){let value=Util.formatMilliseconds(details.value,details.granularity);if(details.displayUnit==='duration'){value=Util.formatDuration(details.value);}
return this._renderText(value);}
renderTextURL(text){const url=text;let displayedPath;let displayedHost;let title;try{const parsed=Util.parseURL(url);displayedPath=parsed.file==='/'?parsed.origin:parsed.file;displayedHost=parsed.file==='/'?'':`(${parsed.hostname})`;title=url;}catch(e){displayedPath=url;}
const element=this._dom.createElement('div','lh-text__url');element.appendChild(this._renderLink({text:displayedPath,url}));if(displayedHost){const hostElem=this._renderText(displayedHost);hostElem.classList.add('lh-text__url-host');element.appendChild(hostElem);}
if(title){element.title=url;element.dataset.url=url;}
return element;}
_renderLink(details){const allowedProtocols=['https:','http:'];let url;try{url=new URL(details.url);}catch(_){}
if(!url||!allowedProtocols.includes(url.protocol)){return this._renderText(details.text);}
const a=this._dom.createElement('a');a.rel='noopener';a.target='_blank';a.textContent=details.text;a.href=url.href;return a;}
_renderText(text){const element=this._dom.createElement('div','lh-text');element.textContent=text;return element;}
_renderNumeric(text){const element=this._dom.createElement('div','lh-numeric');element.textContent=text;return element;}
_renderThumbnail(details){const element=this._dom.createElement('img','lh-thumbnail');const strValue=details;element.src=strValue;element.title=strValue;element.alt='';return element;}
_renderUnknown(type,value){console.error(`Unknown details type: ${type}`,value);const element=this._dom.createElement('details','lh-unknown');this._dom.createChildOf(element,'summary').textContent=`We don't know how to render audit details of type \`${type}\`. `+'The Lighthouse version that collected this data is likely newer than the Lighthouse '+'version of the report renderer. Expand for the raw JSON.';this._dom.createChildOf(element,'pre').textContent=JSON.stringify(value,null,2);return element;}
_renderTableValue(value,heading){if(typeof value==='undefined'||value===null){return null;}
if(typeof value==='object'){switch(value.type){case'code':{return this._renderCode(value.value);}
case'link':{return this._renderLink(value);}
case'node':{return this.renderNode(value);}
case'url':{return this.renderTextURL(value.value);}
default:{return this._renderUnknown(value.type,value);}}}
switch(heading.valueType){case'bytes':{const numValue=Number(value);return this._renderBytes({value:numValue,granularity:1});}
case'code':{const strValue=String(value);return this._renderCode(strValue);}
case'ms':{const msValue={value:Number(value),granularity:heading.granularity,displayUnit:heading.displayUnit,};return this._renderMilliseconds(msValue);}
case'numeric':{const strValue=String(value);return this._renderNumeric(strValue);}
case'text':{const strValue=String(value);return this._renderText(strValue);}
case'thumbnail':{const strValue=String(value);return this._renderThumbnail(strValue);}
case'timespanMs':{const numValue=Number(value);return this._renderMilliseconds({value:numValue});}
case'url':{const strValue=String(value);if(URL_PREFIXES.some(prefix=>strValue.startsWith(prefix))){return this.renderTextURL(strValue);}else{return this._renderCode(strValue);}}
default:{return this._renderUnknown(heading.valueType,value);}}}
_getCanonicalizedTableHeadings(tableLike){if(tableLike.type==='opportunity'){return tableLike.headings;}
return tableLike.headings.map(heading=>{return{key:heading.key,label:heading.text,valueType:heading.itemType,displayUnit:heading.displayUnit,granularity:heading.granularity,};});}
_renderTable(details){if(!details.items.length)return this._dom.createElement('span');const tableElem=this._dom.createElement('table','lh-table');const theadElem=this._dom.createChildOf(tableElem,'thead');const theadTrElem=this._dom.createChildOf(theadElem,'tr');const headings=this._getCanonicalizedTableHeadings(details);for(const heading of headings){const valueType=heading.valueType||'text';const classes=`lh-table-column--${valueType}`;const labelEl=this._dom.createElement('div','lh-text');labelEl.textContent=heading.label;this._dom.createChildOf(theadTrElem,'th',classes).appendChild(labelEl);}
const tbodyElem=this._dom.createChildOf(tableElem,'tbody');for(const row of details.items){const rowElem=this._dom.createChildOf(tbodyElem,'tr');for(const heading of headings){const value=row[heading.key];const valueElement=this._renderTableValue(value,heading);if(valueElement){const classes=`lh-table-column--${heading.valueType}`;this._dom.createChildOf(rowElem,'td',classes).appendChild(valueElement);}else{this._dom.createChildOf(rowElem,'td','lh-table-column--empty');}}}
return tableElem;}
_renderList(details){const listContainer=this._dom.createElement('div','lh-list');details.items.forEach(item=>{const snippetEl=SnippetRenderer.render(this._dom,this._templateContext,item,this);listContainer.appendChild(snippetEl);});return listContainer;}
renderNode(item){const element=this._dom.createElement('span','lh-node');if(item.nodeLabel){const nodeLabelEl=this._dom.createElement('div');nodeLabelEl.textContent=item.nodeLabel;element.appendChild(nodeLabelEl);}
if(item.snippet){const snippetEl=this._dom.createElement('div');snippetEl.classList.add('lh-node__snippet');snippetEl.textContent=item.snippet;element.appendChild(snippetEl);}
if(item.selector){element.title=item.selector;}
if(item.path)element.setAttribute('data-path',item.path);if(item.selector)element.setAttribute('data-selector',item.selector);if(item.snippet)element.setAttribute('data-snippet',item.snippet);return element;}
_renderFilmstrip(details){const filmstripEl=this._dom.createElement('div','lh-filmstrip');for(const thumbnail of details.items){const frameEl=this._dom.createChildOf(filmstripEl,'div','lh-filmstrip__frame');this._dom.createChildOf(frameEl,'img','lh-filmstrip__thumbnail',{src:thumbnail.data,alt:`Screenshot`,});}
return filmstripEl;}
_renderCode(text){const pre=this._dom.createElement('pre','lh-code');pre.textContent=text;return pre;}}
if(typeof module!=='undefined'&&module.exports){module.exports=DetailsRenderer;}else{self.DetailsRenderer=DetailsRenderer;};'use strict';class CriticalRequestChainRenderer{static initTree(tree){let startTime=0;const rootNodes=Object.keys(tree);if(rootNodes.length>0){const node=tree[rootNodes[0]];startTime=node.request.startTime;}
return{tree,startTime,transferSize:0};}
static createSegment(parent,id,startTime,transferSize,treeMarkers,parentIsLastChild){const node=parent[id];const siblings=Object.keys(parent);const isLastChild=siblings.indexOf(id)===(siblings.length-1);const hasChildren=!!node.children&&Object.keys(node.children).length>0;const newTreeMarkers=Array.isArray(treeMarkers)?treeMarkers.slice(0):[];if(typeof parentIsLastChild!=='undefined'){newTreeMarkers.push(!parentIsLastChild);}
return{node,isLastChild,hasChildren,startTime,transferSize:transferSize+node.request.transferSize,treeMarkers:newTreeMarkers,};}
static createChainNode(dom,tmpl,segment,detailsRenderer){const chainsEl=dom.cloneTemplate('#tmpl-lh-crc__chains',tmpl);dom.find('.crc-node',chainsEl).setAttribute('title',segment.node.request.url);const treeMarkeEl=dom.find('.crc-node__tree-marker',chainsEl);segment.treeMarkers.forEach(separator=>{if(separator){treeMarkeEl.appendChild(dom.createElement('span','tree-marker vert'));treeMarkeEl.appendChild(dom.createElement('span','tree-marker'));}else{treeMarkeEl.appendChild(dom.createElement('span','tree-marker'));treeMarkeEl.appendChild(dom.createElement('span','tree-marker'));}});if(segment.isLastChild){treeMarkeEl.appendChild(dom.createElement('span','tree-marker up-right'));treeMarkeEl.appendChild(dom.createElement('span','tree-marker right'));}else{treeMarkeEl.appendChild(dom.createElement('span','tree-marker vert-right'));treeMarkeEl.appendChild(dom.createElement('span','tree-marker right'));}
if(segment.hasChildren){treeMarkeEl.appendChild(dom.createElement('span','tree-marker horiz-down'));}else{treeMarkeEl.appendChild(dom.createElement('span','tree-marker right'));}
const url=segment.node.request.url;const linkEl=detailsRenderer.renderTextURL(url);const treevalEl=dom.find('.crc-node__tree-value',chainsEl);treevalEl.appendChild(linkEl);if(!segment.hasChildren){const{startTime,endTime,transferSize}=segment.node.request;const span=dom.createElement('span','crc-node__chain-duration');span.textContent=' - '+Util.formatMilliseconds((endTime-startTime)*1000)+', ';const span2=dom.createElement('span','crc-node__chain-duration');span2.textContent=Util.formatBytesToKB(transferSize,0.01);treevalEl.appendChild(span);treevalEl.appendChild(span2);}
return chainsEl;}
static buildTree(dom,tmpl,segment,elem,details,detailsRenderer){elem.appendChild(CRCRenderer.createChainNode(dom,tmpl,segment,detailsRenderer));if(segment.node.children){for(const key of Object.keys(segment.node.children)){const childSegment=CRCRenderer.createSegment(segment.node.children,key,segment.startTime,segment.transferSize,segment.treeMarkers,segment.isLastChild);CRCRenderer.buildTree(dom,tmpl,childSegment,elem,details,detailsRenderer);}}}
static render(dom,templateContext,details,detailsRenderer){const tmpl=dom.cloneTemplate('#tmpl-lh-crc',templateContext);const containerEl=dom.find('.lh-crc',tmpl);dom.find('.crc-initial-nav',tmpl).textContent=Util.UIStrings.crcInitialNavigation;dom.find('.lh-crc__longest_duration_label',tmpl).textContent=Util.UIStrings.crcLongestDurationLabel;dom.find('.lh-crc__longest_duration',tmpl).textContent=Util.formatMilliseconds(details.longestChain.duration);const root=CRCRenderer.initTree(details.chains);for(const key of Object.keys(root.tree)){const segment=CRCRenderer.createSegment(root.tree,key,root.startTime,root.transferSize);CRCRenderer.buildTree(dom,tmpl,segment,containerEl,details,detailsRenderer);}
return dom.find('.lh-crc-container',tmpl);}}
const CRCRenderer=CriticalRequestChainRenderer;if(typeof module!=='undefined'&&module.exports){module.exports=CriticalRequestChainRenderer;}else{self.CriticalRequestChainRenderer=CriticalRequestChainRenderer;};'use strict';const LineVisibility={ALWAYS:0,WHEN_COLLAPSED:1,WHEN_EXPANDED:2,};const LineContentType={CONTENT_NORMAL:0,CONTENT_HIGHLIGHTED:1,PLACEHOLDER:2,MESSAGE:3,};const classNamesByContentType={[LineContentType.CONTENT_NORMAL]:['lh-snippet__line--content'],[LineContentType.CONTENT_HIGHLIGHTED]:['lh-snippet__line--content','lh-snippet__line--content-highlighted',],[LineContentType.PLACEHOLDER]:['lh-snippet__line--placeholder'],[LineContentType.MESSAGE]:['lh-snippet__line--message'],};function getLineAndPreviousLine(lines,lineNumber){return{line:lines.find(l=>l.lineNumber===lineNumber),previousLine:lines.find(l=>l.lineNumber===lineNumber-1),};}
function getMessagesForLineNumber(messages,lineNumber){return messages.filter(h=>h.lineNumber===lineNumber);}
function getLinesWhenCollapsed(details){const SURROUNDING_LINES_TO_SHOW_WHEN_COLLAPSED=2;return Util.filterRelevantLines(details.lines,details.lineMessages,SURROUNDING_LINES_TO_SHOW_WHEN_COLLAPSED);}
class SnippetRenderer{static renderHeader(dom,tmpl,details,detailsRenderer,toggleExpandedFn){const linesWhenCollapsed=getLinesWhenCollapsed(details);const canExpand=linesWhenCollapsed.length<details.lines.length;const header=dom.cloneTemplate('#tmpl-lh-snippet__header',tmpl);dom.find('.lh-snippet__title',header).textContent=details.title;const{snippetCollapseButtonLabel,snippetExpandButtonLabel,}=Util.UIStrings;dom.find('.lh-snippet__btn-label-collapse',header).textContent=snippetCollapseButtonLabel;dom.find('.lh-snippet__btn-label-expand',header).textContent=snippetExpandButtonLabel;const toggleExpandButton=dom.find('.lh-snippet__toggle-expand',header);if(!canExpand){toggleExpandButton.remove();}else{toggleExpandButton.addEventListener('click',()=>toggleExpandedFn());}
if(details.node&&dom.isDevTools()){const nodeContainer=dom.find('.lh-snippet__node',header);nodeContainer.appendChild(detailsRenderer.renderNode(details.node));}
return header;}
static renderSnippetLine(dom,tmpl,{content,lineNumber,truncated,contentType,visibility}){const clonedTemplate=dom.cloneTemplate('#tmpl-lh-snippet__line',tmpl);const contentLine=dom.find('.lh-snippet__line',clonedTemplate);const{classList}=contentLine;classNamesByContentType[contentType].forEach(typeClass=>classList.add(typeClass));if(visibility===LineVisibility.WHEN_COLLAPSED){classList.add('lh-snippet__show-if-collapsed');}else if(visibility===LineVisibility.WHEN_EXPANDED){classList.add('lh-snippet__show-if-expanded');}
const lineContent=content+(truncated?'…':'');const lineContentEl=dom.find('.lh-snippet__line code',contentLine);if(contentType===LineContentType.MESSAGE){lineContentEl.appendChild(dom.convertMarkdownLinkSnippets(lineContent));}else{lineContentEl.textContent=lineContent;}
dom.find('.lh-snippet__line-number',contentLine).textContent=lineNumber.toString();return contentLine;}
static renderMessage(dom,tmpl,message){return SnippetRenderer.renderSnippetLine(dom,tmpl,{lineNumber:' ',content:message.message,contentType:LineContentType.MESSAGE,});}
static renderOmittedLinesPlaceholder(dom,tmpl,visibility){return SnippetRenderer.renderSnippetLine(dom,tmpl,{lineNumber:'…',content:'',visibility,contentType:LineContentType.PLACEHOLDER,});}
static renderSnippetContent(dom,tmpl,details){const template=dom.cloneTemplate('#tmpl-lh-snippet__content',tmpl);const snippetEl=dom.find('.lh-snippet__snippet-inner',template);details.generalMessages.forEach(m=>snippetEl.append(SnippetRenderer.renderMessage(dom,tmpl,m)));snippetEl.append(SnippetRenderer.renderSnippetLines(dom,tmpl,details));return template;}
static renderSnippetLines(dom,tmpl,details){const{lineMessages,generalMessages,lineCount,lines}=details;const linesWhenCollapsed=getLinesWhenCollapsed(details);const hasOnlyGeneralMessages=generalMessages.length>0&&lineMessages.length===0;const lineContainer=dom.createFragment();let hasPendingOmittedLinesPlaceholderForCollapsedState=false;for(let lineNumber=1;lineNumber<=lineCount;lineNumber++){const{line,previousLine}=getLineAndPreviousLine(lines,lineNumber);const{line:lineWhenCollapsed,previousLine:previousLineWhenCollapsed,}=getLineAndPreviousLine(linesWhenCollapsed,lineNumber);const showLineWhenCollapsed=!!lineWhenCollapsed;const showPreviousLineWhenCollapsed=!!previousLineWhenCollapsed;if(showPreviousLineWhenCollapsed&&!showLineWhenCollapsed){hasPendingOmittedLinesPlaceholderForCollapsedState=true;}
if(showLineWhenCollapsed&&hasPendingOmittedLinesPlaceholderForCollapsedState){lineContainer.append(SnippetRenderer.renderOmittedLinesPlaceholder(dom,tmpl,LineVisibility.WHEN_COLLAPSED));hasPendingOmittedLinesPlaceholderForCollapsedState=false;}
const isFirstOmittedLineWhenExpanded=!line&&!!previousLine;const isFirstLineOverallAndIsOmittedWhenExpanded=!line&&lineNumber===1;if(isFirstOmittedLineWhenExpanded||isFirstLineOverallAndIsOmittedWhenExpanded){const hasRenderedAllLinesVisibleWhenCollapsed=!linesWhenCollapsed.some(l=>l.lineNumber>lineNumber);const onlyShowWhenExpanded=hasRenderedAllLinesVisibleWhenCollapsed||lineNumber===1;lineContainer.append(SnippetRenderer.renderOmittedLinesPlaceholder(dom,tmpl,onlyShowWhenExpanded?LineVisibility.WHEN_EXPANDED:LineVisibility.ALWAYS));hasPendingOmittedLinesPlaceholderForCollapsedState=false;}
if(!line){continue;}
const messages=getMessagesForLineNumber(lineMessages,lineNumber);const highlightLine=messages.length>0||hasOnlyGeneralMessages;const contentLineDetails=Object.assign({},line,{contentType:highlightLine?LineContentType.CONTENT_HIGHLIGHTED:LineContentType.CONTENT_NORMAL,visibility:lineWhenCollapsed?LineVisibility.ALWAYS:LineVisibility.WHEN_EXPANDED,});lineContainer.append(SnippetRenderer.renderSnippetLine(dom,tmpl,contentLineDetails));messages.forEach(message=>{lineContainer.append(SnippetRenderer.renderMessage(dom,tmpl,message));});}
return lineContainer;}
static render(dom,templateContext,details,detailsRenderer){const tmpl=dom.cloneTemplate('#tmpl-lh-snippet',templateContext);const snippetEl=dom.find('.lh-snippet',tmpl);const header=SnippetRenderer.renderHeader(dom,tmpl,details,detailsRenderer,()=>snippetEl.classList.toggle('lh-snippet--expanded'));const content=SnippetRenderer.renderSnippetContent(dom,tmpl,details);snippetEl.append(header,content);return snippetEl;}}
if(typeof module!=='undefined'&&module.exports){module.exports=SnippetRenderer;}else{self.SnippetRenderer=SnippetRenderer;};'use strict';function getFilenamePrefix(lhr){const hostname=new URL(lhr.finalUrl).hostname;const date=(lhr.fetchTime&&new Date(lhr.fetchTime))||new Date();const timeStr=date.toLocaleTimeString('en-US',{hour12:false});const dateParts=date.toLocaleDateString('en-US',{year:'numeric',month:'2-digit',day:'2-digit',}).split('/');dateParts.unshift(dateParts.pop());const dateStr=dateParts.join('-');const filenamePrefix=`${hostname}_${dateStr}_${timeStr}`;return filenamePrefix.replace(/[/?<>\\:*|"]/g,'-');}
if(typeof module!=='undefined'&&module.exports){module.exports={getFilenamePrefix};};'use strict';class Logger{constructor(element){this.el=element;this._id=undefined;}
log(msg,autoHide=true){this._id&&clearTimeout(this._id);this.el.textContent=msg;this.el.classList.add('show');if(autoHide){this._id=setTimeout(_=>{this.el.classList.remove('show');},7000);}}
warn(msg){this.log('Warning: '+msg);}
error(msg){this.log(msg);setTimeout(_=>{throw new Error(msg);},0);}
hide(){this._id&&clearTimeout(this._id);this.el.classList.remove('show');}}
if(typeof module!=='undefined'&&module.exports){module.exports=Logger;};'use strict';function getTableRows(tableEl){return Array.from(tableEl.tBodies[0].rows);}
class ReportUIFeatures{constructor(dom){this.json;this._dom=dom;this._document=this._dom.document();this._templateContext=this._dom.document();this._dropDown=new DropDown(this._dom);this._copyAttempt=false;this.topbarEl;this.scoreScaleEl;this.stickyHeaderEl;this.highlightEl;this.onMediaQueryChange=this.onMediaQueryChange.bind(this);this.onCopy=this.onCopy.bind(this);this.onDropDownMenuClick=this.onDropDownMenuClick.bind(this);this.onKeyUp=this.onKeyUp.bind(this);this.collapseAllDetails=this.collapseAllDetails.bind(this);this.expandAllDetails=this.expandAllDetails.bind(this);this._toggleDarkTheme=this._toggleDarkTheme.bind(this);this._updateStickyHeaderOnScroll=this._updateStickyHeaderOnScroll.bind(this);}
initFeatures(report){this.json=report;this._setupMediaQueryListeners();this._dropDown.setup(this.onDropDownMenuClick);this._setupThirdPartyFilter();this._setUpCollapseDetailsAfterPrinting();this._resetUIState();this._document.addEventListener('keyup',this.onKeyUp);this._document.addEventListener('copy',this.onCopy);const topbarLogo=this._dom.find('.lh-topbar__logo',this._document);topbarLogo.addEventListener('click',()=>this._toggleDarkTheme());let turnOffTheLights=false;if(!this._dom.isDevTools()&&window.matchMedia('(prefers-color-scheme: dark)').matches){turnOffTheLights=true;}
const scoresAll100=Object.values(report.categories).every(cat=>cat.score===1);const hasAllCoreCategories=Object.keys(report.categories).filter(id=>!Util.isPluginCategory(id)).length>=5;if(scoresAll100&&hasAllCoreCategories){turnOffTheLights=true;this._enableFireworks();}
if(turnOffTheLights){this._toggleDarkTheme(true);}
if(Object.keys(this.json.categories).length>=2){this._setupStickyHeaderElements();const containerEl=this._dom.find('.lh-container',this._document);const elToAddScrollListener=this._getScrollParent(containerEl);elToAddScrollListener.addEventListener('scroll',this._updateStickyHeaderOnScroll);if(this._dom.isDevTools()){const resizeObserver=new window.ResizeObserver(this._updateStickyHeaderOnScroll);resizeObserver.observe(containerEl);}else{window.addEventListener('resize',this._updateStickyHeaderOnScroll);}}
const hasMetricError=report.categories.performance&&report.categories.performance.auditRefs.some(audit=>Boolean(audit.group==='metrics'&&report.audits[audit.id].errorMessage));if(hasMetricError){const toggleInputEl=(this._dom.find('.lh-metrics-toggle__input',this._document));toggleInputEl.checked=true;}}
setTemplateContext(context){this._templateContext=context;}
_getScrollParent(element){const{overflowY}=window.getComputedStyle(element);const isScrollable=overflowY!=='visible'&&overflowY!=='hidden';if(isScrollable){return element;}
if(element.parentElement){return this._getScrollParent(element.parentElement);}
return document;}
_enableFireworks(){const scoresContainer=this._dom.find('.lh-scores-container',this._document);scoresContainer.classList.add('score100');scoresContainer.addEventListener('click',_=>{scoresContainer.classList.toggle('fireworks-paused');});}
_fireEventOn(name,target=this._document,detail){const event=new CustomEvent(name,detail?{detail}:undefined);target.dispatchEvent(event);}
_setupMediaQueryListeners(){const mediaQuery=self.matchMedia('(max-width: 500px)');mediaQuery.addListener(this.onMediaQueryChange);this.onMediaQueryChange(mediaQuery);}
onMediaQueryChange(mql){const root=this._dom.find('.lh-root',this._document);root.classList.toggle('lh-narrow',mql.matches);}
_setupThirdPartyFilter(){const thirdPartyFilterAuditExclusions=['uses-rel-preconnect',];const tables=Array.from(this._document.querySelectorAll('.lh-table'));const tablesWithUrls=tables.filter(el=>el.querySelector('td.lh-table-column--url')).filter(el=>{const containingAudit=el.closest('.lh-audit');if(!containingAudit)throw new Error('.lh-table not within audit');return!thirdPartyFilterAuditExclusions.includes(containingAudit.id);});tablesWithUrls.forEach((tableEl,index)=>{const urlItems=this._getUrlItems(tableEl);const thirdPartyRows=this._getThirdPartyRows(tableEl,urlItems,this.json.finalUrl);const filterTemplate=this._dom.cloneTemplate('#tmpl-lh-3p-filter',this._templateContext);const filterInput=(this._dom.find('input',filterTemplate));const id=`lh-3p-filter-label--${index}`;filterInput.id=id;filterInput.addEventListener('change',e=>{if(e.target instanceof HTMLInputElement&&!e.target.checked){for(const row of thirdPartyRows.values()){row.remove();}}else{for(const[position,row]of thirdPartyRows.entries()){const childrenArr=getTableRows(tableEl);tableEl.tBodies[0].insertBefore(row,childrenArr[position]);}}});this._dom.find('label',filterTemplate).setAttribute('for',id);this._dom.find('.lh-3p-filter-count',filterTemplate).textContent=`${thirdPartyRows.size}`;this._dom.find('.lh-3p-ui-string',filterTemplate).textContent=Util.UIStrings.thirdPartyResourcesLabel;if(thirdPartyRows.size===urlItems.length||!thirdPartyRows.size){filterInput.disabled=true;filterInput.checked=thirdPartyRows.size===urlItems.length;}
if(!tableEl.parentNode)return;tableEl.parentNode.insertBefore(filterTemplate,tableEl);});}
_getThirdPartyRows(el,urlItems,finalUrl){const finalUrlRootDomain=Util.getRootDomain(finalUrl);const thirdPartyRows=new Map();for(const urlItem of urlItems){const datasetUrl=urlItem.dataset.url;if(!datasetUrl)continue;const isThirdParty=Util.getRootDomain(datasetUrl)!==finalUrlRootDomain;if(!isThirdParty)continue;const urlRowEl=urlItem.closest('tr');if(urlRowEl){const rowPosition=getTableRows(el).indexOf(urlRowEl);thirdPartyRows.set(rowPosition,urlRowEl);}}
return thirdPartyRows;}
_getUrlItems(tableEl){return this._dom.findAll('.lh-text__url',tableEl);}
_setupStickyHeaderElements(){this.topbarEl=this._dom.find('.lh-topbar',this._document);this.scoreScaleEl=this._dom.find('.lh-scorescale',this._document);this.stickyHeaderEl=this._dom.find('.lh-sticky-header',this._document);this.highlightEl=this._dom.createChildOf(this.stickyHeaderEl,'div','lh-highlighter');}
onCopy(e){if(this._copyAttempt&&e.clipboardData){e.preventDefault();e.clipboardData.setData('text/plain',JSON.stringify(this.json,null,2));this._fireEventOn('lh-log',this._document,{cmd:'log',msg:'Report JSON copied to clipboard',});}
this._copyAttempt=false;}
onCopyButtonClick(){this._fireEventOn('lh-analytics',this._document,{cmd:'send',fields:{hitType:'event',eventCategory:'report',eventAction:'copy'},});try{if(this._document.queryCommandSupported('copy')){this._copyAttempt=true;if(!this._document.execCommand('copy')){this._copyAttempt=false;this._fireEventOn('lh-log',this._document,{cmd:'warn',msg:'Your browser does not support copy to clipboard.',});}}}catch(e){this._copyAttempt=false;this._fireEventOn('lh-log',this._document,{cmd:'log',msg:e.message});}}
_resetUIState(){this._dropDown.close();this._dom.resetTemplates();}
onDropDownMenuClick(e){e.preventDefault();const el=(e.target);if(!el||!el.hasAttribute('data-action')){return;}
switch(el.getAttribute('data-action')){case'copy':this.onCopyButtonClick();break;case'print-summary':this.collapseAllDetails();this._print();break;case'print-expanded':this.expandAllDetails();this._print();break;case'save-json':{const jsonStr=JSON.stringify(this.json,null,2);this._saveFile(new Blob([jsonStr],{type:'application/json'}));break;}
case'save-html':{const htmlStr=this.getReportHtml();try{this._saveFile(new Blob([htmlStr],{type:'text/html'}));}catch(e){this._fireEventOn('lh-log',this._document,{cmd:'error',msg:'Could not export as HTML. '+e.message,});}
break;}
case'open-viewer':{const viewerPath='/lighthouse/viewer/';ReportUIFeatures.openTabAndSendJsonReport(this.json,viewerPath);break;}
case'save-gist':{this.saveAsGist();break;}
case'toggle-dark':{this._toggleDarkTheme();break;}}
this._dropDown.close();}
_print(){self.print();}
onKeyUp(e){if((e.ctrlKey||e.metaKey)&&e.keyCode===80){this._dropDown.close();}}
static openTabAndSendJsonReport(reportJson,viewerPath){const VIEWER_ORIGIN='https://googlechrome.github.io';const json=reportJson;window.addEventListener('message',function msgHandler(messageEvent){if(messageEvent.origin!==VIEWER_ORIGIN){return;}
if(popup&&messageEvent.data.opened){popup.postMessage({lhresults:json},VIEWER_ORIGIN);window.removeEventListener('message',msgHandler);}});const fallbackFetchTime=(json.generatedTime);const fetchTime=json.fetchTime||fallbackFetchTime;const windowName=`${json.lighthouseVersion}-${json.requestedUrl}-${fetchTime}`;const popup=window.open(`${VIEWER_ORIGIN}${viewerPath}`,windowName);}
expandAllDetails(){const details=(this._dom.findAll('.lh-categories details',this._document));details.map(detail=>detail.open=true);}
collapseAllDetails(){const details=(this._dom.findAll('.lh-categories details',this._document));details.map(detail=>detail.open=false);}
_setUpCollapseDetailsAfterPrinting(){if('onbeforeprint'in self){self.addEventListener('afterprint',this.collapseAllDetails);}else{const win=(self);win.matchMedia('print').addListener(mql=>{if(mql.matches){this.expandAllDetails();}else{this.collapseAllDetails();}});}}
getReportHtml(){this._resetUIState();return this._document.documentElement.outerHTML;}
saveAsGist(){throw new Error('Cannot save as gist from base report');}
_saveFile(blob){const filename=getFilenamePrefix({finalUrl:this.json.finalUrl,fetchTime:this.json.fetchTime,});const ext=blob.type.match('json')?'.json':'.html';const href=URL.createObjectURL(blob);const a=this._dom.createElement('a');a.download=`${filename}${ext}`;a.href=href;this._document.body.appendChild(a);a.click();this._document.body.removeChild(a);setTimeout(_=>URL.revokeObjectURL(href),500);}
_toggleDarkTheme(force){const el=this._dom.find('.lh-vars',this._document);if(typeof force==='undefined'){el.classList.toggle('dark');}else{el.classList.toggle('dark',force);}}
_updateStickyHeaderOnScroll(){const topbarBottom=this.topbarEl.getBoundingClientRect().bottom;const scoreScaleTop=this.scoreScaleEl.getBoundingClientRect().top;const showStickyHeader=topbarBottom>=scoreScaleTop;const categoryEls=Array.from(this._document.querySelectorAll('.lh-category'));const categoriesAboveTheMiddle=categoryEls.filter(el=>el.getBoundingClientRect().top-window.innerHeight/2<0);const highlightIndex=categoriesAboveTheMiddle.length>0?categoriesAboveTheMiddle.length-1:0;const gaugeWrapperEls=this.stickyHeaderEl.querySelectorAll('.lh-gauge__wrapper');const gaugeToHighlight=gaugeWrapperEls[highlightIndex];const origin=gaugeWrapperEls[0].getBoundingClientRect().left;const offset=gaugeToHighlight.getBoundingClientRect().left-origin;this.highlightEl.style.transform=`translate(${offset}px)`;this.stickyHeaderEl.classList.toggle('lh-sticky-header--visible',showStickyHeader);}}
class DropDown{constructor(dom){this._dom=dom;this._toggleEl;this._menuEl;this.onDocumentKeyDown=this.onDocumentKeyDown.bind(this);this.onToggleClick=this.onToggleClick.bind(this);this.onToggleKeydown=this.onToggleKeydown.bind(this);this.onMenuKeydown=this.onMenuKeydown.bind(this);this._getNextMenuItem=this._getNextMenuItem.bind(this);this._getNextSelectableNode=this._getNextSelectableNode.bind(this);this._getPreviousMenuItem=this._getPreviousMenuItem.bind(this);}
setup(menuClickHandler){this._toggleEl=this._dom.find('.lh-tools__button',this._dom.document());this._toggleEl.addEventListener('click',this.onToggleClick);this._toggleEl.addEventListener('keydown',this.onToggleKeydown);this._menuEl=this._dom.find('.lh-tools__dropdown',this._dom.document());this._menuEl.addEventListener('keydown',this.onMenuKeydown);this._menuEl.addEventListener('click',menuClickHandler);}
close(){this._toggleEl.classList.remove('active');this._toggleEl.setAttribute('aria-expanded','false');if(this._menuEl.contains(this._dom.document().activeElement)){this._toggleEl.focus();}
this._dom.document().removeEventListener('keydown',this.onDocumentKeyDown);}
open(firstFocusElement){if(this._toggleEl.classList.contains('active')){firstFocusElement.focus();}else{this._menuEl.addEventListener('transitionend',()=>{firstFocusElement.focus();},{once:true});}
this._toggleEl.classList.add('active');this._toggleEl.setAttribute('aria-expanded','true');this._dom.document().addEventListener('keydown',this.onDocumentKeyDown);}
onToggleClick(e){e.preventDefault();e.stopImmediatePropagation();if(this._toggleEl.classList.contains('active')){this.close();}else{this.open(this._getNextMenuItem());}}
onToggleKeydown(e){switch(e.code){case'ArrowUp':e.preventDefault();this.open(this._getPreviousMenuItem());break;case'ArrowDown':case'Enter':case' ':e.preventDefault();this.open(this._getNextMenuItem());break;default:}}
onMenuKeydown(e){const el=(e.target);switch(e.code){case'ArrowUp':e.preventDefault();this._getPreviousMenuItem(el).focus();break;case'ArrowDown':e.preventDefault();this._getNextMenuItem(el).focus();break;case'Home':e.preventDefault();this._getNextMenuItem().focus();break;case'End':e.preventDefault();this._getPreviousMenuItem().focus();break;default:}}
onDocumentKeyDown(e){if(e.keyCode===27){this.close();}}
_getNextSelectableNode(allNodes,startNode){const nodes=allNodes.filter((node)=>{if(!(node instanceof HTMLElement)){return false;}
if(node.hasAttribute('disabled')){return false;}
if(window.getComputedStyle(node).display==='none'){return false;}
return true;});let nextIndex=startNode?(nodes.indexOf(startNode)+1):0;if(nextIndex>=nodes.length){nextIndex=0;}
return nodes[nextIndex];}
_getNextMenuItem(startEl){const nodes=Array.from(this._menuEl.childNodes);return(this._getNextSelectableNode(nodes,startEl));}
_getPreviousMenuItem(startEl){const nodes=Array.from(this._menuEl.childNodes).reverse();return(this._getNextSelectableNode(nodes,startEl));}}
if(typeof module!=='undefined'&&module.exports){module.exports=ReportUIFeatures;}else{self.ReportUIFeatures=ReportUIFeatures;};'use strict';class CategoryRenderer{constructor(dom,detailsRenderer){this.dom=dom;this.detailsRenderer=detailsRenderer;this.templateContext=this.dom.document();this.detailsRenderer.setTemplateContext(this.templateContext);}
get _clumpTitles(){return{warning:Util.UIStrings.warningAuditsGroupTitle,manual:Util.UIStrings.manualAuditsGroupTitle,passed:Util.UIStrings.passedAuditsGroupTitle,notApplicable:Util.UIStrings.notApplicableAuditsGroupTitle,};}
renderAudit(audit){const tmpl=this.dom.cloneTemplate('#tmpl-lh-audit',this.templateContext);return this.populateAuditValues(audit,tmpl);}
populateAuditValues(audit,tmpl){const auditEl=this.dom.find('.lh-audit',tmpl);auditEl.id=audit.result.id;const scoreDisplayMode=audit.result.scoreDisplayMode;if(audit.result.displayValue){this.dom.find('.lh-audit__display-text',auditEl).textContent=audit.result.displayValue;}
const titleEl=this.dom.find('.lh-audit__title',auditEl);titleEl.appendChild(this.dom.convertMarkdownCodeSnippets(audit.result.title));this.dom.find('.lh-audit__description',auditEl).appendChild(this.dom.convertMarkdownLinkSnippets(audit.result.description));if(audit.stackPacks){audit.stackPacks.forEach(pack=>{const packElm=this.dom.createElement('div');packElm.classList.add('lh-audit__stackpack');const packElmImg=this.dom.createElement('img');packElmImg.classList.add('lh-audit__stackpack__img');packElmImg.src=pack.iconDataURL;packElmImg.alt=pack.title;packElm.appendChild(packElmImg);packElm.appendChild(this.dom.convertMarkdownLinkSnippets(pack.description));this.dom.find('.lh-audit__stackpacks',auditEl).appendChild(packElm);});}
const header=(this.dom.find('details',auditEl));if(audit.result.details){const elem=this.detailsRenderer.render(audit.result.details);if(elem){elem.classList.add('lh-details');header.appendChild(elem);}}
this.dom.find('.lh-chevron-container',auditEl).appendChild(this._createChevron());this._setRatingClass(auditEl,audit.result.score,scoreDisplayMode);if(audit.result.scoreDisplayMode==='error'){auditEl.classList.add(`lh-audit--error`);const textEl=this.dom.find('.lh-audit__display-text',auditEl);textEl.textContent=Util.UIStrings.errorLabel;textEl.classList.add('tooltip-boundary');const tooltip=this.dom.createChildOf(textEl,'div','tooltip tooltip--error');tooltip.textContent=audit.result.errorMessage||Util.UIStrings.errorMissingAuditInfo;}else if(audit.result.explanation){const explEl=this.dom.createChildOf(titleEl,'div','lh-audit-explanation');explEl.textContent=audit.result.explanation;}
const warnings=audit.result.warnings;if(!warnings||warnings.length===0)return auditEl;const warningsEl=this.dom.createChildOf(titleEl,'div','lh-warnings');this.dom.createChildOf(warningsEl,'span').textContent=Util.UIStrings.warningHeader;if(warnings.length===1){warningsEl.appendChild(this.dom.document().createTextNode(warnings.join('')));}else{const warningsUl=this.dom.createChildOf(warningsEl,'ul');for(const warning of warnings){const item=this.dom.createChildOf(warningsUl,'li');item.textContent=warning;}}
return auditEl;}
_createChevron(){const chevronTmpl=this.dom.cloneTemplate('#tmpl-lh-chevron',this.templateContext);const chevronEl=this.dom.find('.lh-chevron',chevronTmpl);return chevronEl;}
_setRatingClass(element,score,scoreDisplayMode){const rating=Util.calculateRating(score,scoreDisplayMode);element.classList.add(`lh-audit--${scoreDisplayMode.toLowerCase()}`);if(scoreDisplayMode!=='informative'){element.classList.add(`lh-audit--${rating}`);}
return element;}
renderCategoryHeader(category,groupDefinitions){const tmpl=this.dom.cloneTemplate('#tmpl-lh-category-header',this.templateContext);const gaugeContainerEl=this.dom.find('.lh-score__gauge',tmpl);const gaugeEl=this.renderScoreGauge(category,groupDefinitions);gaugeContainerEl.appendChild(gaugeEl);if(category.description){const descEl=this.dom.convertMarkdownLinkSnippets(category.description);this.dom.find('.lh-category-header__description',tmpl).appendChild(descEl);}
return(tmpl.firstElementChild);}
renderAuditGroup(group){const groupEl=this.dom.createElement('div','lh-audit-group');const auditGroupHeader=this.dom.createElement('div','lh-audit-group__header');this.dom.createChildOf(auditGroupHeader,'span','lh-audit-group__title').textContent=group.title;if(group.description){const descriptionEl=this.dom.convertMarkdownLinkSnippets(group.description);descriptionEl.classList.add('lh-audit-group__description');auditGroupHeader.appendChild(descriptionEl);}
groupEl.appendChild(auditGroupHeader);return groupEl;}
_renderGroupedAudits(auditRefs,groupDefinitions){const grouped=new Map();const notAGroup='NotAGroup';grouped.set(notAGroup,[]);for(const auditRef of auditRefs){const groupId=auditRef.group||notAGroup;const groupAuditRefs=grouped.get(groupId)||[];groupAuditRefs.push(auditRef);grouped.set(groupId,groupAuditRefs);}
const auditElements=[];for(const[groupId,groupAuditRefs]of grouped){if(groupId===notAGroup){for(const auditRef of groupAuditRefs){auditElements.push(this.renderAudit(auditRef));}
continue;}
const groupDef=groupDefinitions[groupId];const auditGroupElem=this.renderAuditGroup(groupDef);for(const auditRef of groupAuditRefs){auditGroupElem.appendChild(this.renderAudit(auditRef));}
auditGroupElem.classList.add(`lh-audit-group--${groupId}`);auditElements.push(auditGroupElem);}
return auditElements;}
renderUnexpandableClump(auditRefs,groupDefinitions){const clumpElement=this.dom.createElement('div');const elements=this._renderGroupedAudits(auditRefs,groupDefinitions);elements.forEach(elem=>clumpElement.appendChild(elem));return clumpElement;}
renderClump(clumpId,{auditRefs,description}){const clumpTmpl=this.dom.cloneTemplate('#tmpl-lh-clump',this.templateContext);const clumpElement=this.dom.find('.lh-clump',clumpTmpl);if(clumpId==='warning'){clumpElement.setAttribute('open','');}
const summaryInnerEl=this.dom.find('.lh-audit-group__summary',clumpElement);const chevronEl=summaryInnerEl.appendChild(this._createChevron());chevronEl.title=Util.UIStrings.auditGroupExpandTooltip;const headerEl=this.dom.find('.lh-audit-group__header',clumpElement);const title=this._clumpTitles[clumpId];this.dom.find('.lh-audit-group__title',headerEl).textContent=title;if(description){const descriptionEl=this.dom.convertMarkdownLinkSnippets(description);descriptionEl.classList.add('lh-audit-group__description');headerEl.appendChild(descriptionEl);}
const itemCountEl=this.dom.find('.lh-audit-group__itemcount',clumpElement);itemCountEl.textContent=`(${auditRefs.length})`;const auditElements=auditRefs.map(this.renderAudit.bind(this));clumpElement.append(...auditElements);clumpElement.classList.add(`lh-clump--${clumpId.toLowerCase()}`);return clumpElement;}
setTemplateContext(context){this.templateContext=context;this.detailsRenderer.setTemplateContext(context);}
renderScoreGauge(category,groupDefinitions){const tmpl=this.dom.cloneTemplate('#tmpl-lh-gauge',this.templateContext);const wrapper=(this.dom.find('.lh-gauge__wrapper',tmpl));wrapper.href=`#${category.id}`;wrapper.classList.add(`lh-gauge__wrapper--${Util.calculateRating(category.score)}`);if(Util.isPluginCategory(category.id)){wrapper.classList.add('lh-gauge__wrapper--plugin');}
const numericScore=Number(category.score);const gauge=this.dom.find('.lh-gauge',tmpl);const gaugeArc=gauge.querySelector('.lh-gauge-arc');if(gaugeArc){gaugeArc.style.strokeDasharray=`${numericScore * 352} 352`;}
const scoreOutOf100=Math.round(numericScore*100);const percentageEl=this.dom.find('.lh-gauge__percentage',tmpl);percentageEl.textContent=scoreOutOf100.toString();if(category.score===null){percentageEl.textContent='?';percentageEl.title=Util.UIStrings.errorLabel;}
this.dom.find('.lh-gauge__label',tmpl).textContent=category.title;return tmpl;}
_auditHasWarning(audit){return Boolean(audit.result.warnings&&audit.result.warnings.length);}
_getClumpIdForAuditRef(auditRef){const scoreDisplayMode=auditRef.result.scoreDisplayMode;if(scoreDisplayMode==='manual'||scoreDisplayMode==='notApplicable'){return scoreDisplayMode;}
if(Util.showAsPassed(auditRef.result)){if(this._auditHasWarning(auditRef)){return'warning';}else{return'passed';}}else{return'failed';}}
render(category,groupDefinitions={}){const element=this.dom.createElement('div','lh-category');this.createPermalinkSpan(element,category.id);element.appendChild(this.renderCategoryHeader(category,groupDefinitions));const clumps=new Map();clumps.set('failed',[]);clumps.set('warning',[]);clumps.set('manual',[]);clumps.set('passed',[]);clumps.set('notApplicable',[]);for(const auditRef of category.auditRefs){const clumpId=this._getClumpIdForAuditRef(auditRef);const clump=(clumps.get(clumpId));clump.push(auditRef);clumps.set(clumpId,clump);}
for(const[clumpId,auditRefs]of clumps){if(auditRefs.length===0)continue;if(clumpId==='failed'){const clumpElem=this.renderUnexpandableClump(auditRefs,groupDefinitions);clumpElem.classList.add(`lh-clump--failed`);element.appendChild(clumpElem);continue;}
const description=clumpId==='manual'?category.manualDescription:undefined;const clumpElem=this.renderClump(clumpId,{auditRefs,description});element.appendChild(clumpElem);}
return element;}
createPermalinkSpan(element,id){const permalinkEl=this.dom.createChildOf(element,'span','lh-permalink');permalinkEl.id=id;}}
if(typeof module!=='undefined'&&module.exports){module.exports=CategoryRenderer;}else{self.CategoryRenderer=CategoryRenderer;};'use strict';class PerformanceCategoryRenderer extends CategoryRenderer{_renderMetric(audit){const tmpl=this.dom.cloneTemplate('#tmpl-lh-metric',this.templateContext);const element=this.dom.find('.lh-metric',tmpl);element.id=audit.result.id;const rating=Util.calculateRating(audit.result.score,audit.result.scoreDisplayMode);element.classList.add(`lh-metric--${rating}`);const titleEl=this.dom.find('.lh-metric__title',tmpl);titleEl.textContent=audit.result.title;const valueEl=this.dom.find('.lh-metric__value',tmpl);valueEl.textContent=audit.result.displayValue||'';const descriptionEl=this.dom.find('.lh-metric__description',tmpl);descriptionEl.appendChild(this.dom.convertMarkdownLinkSnippets(audit.result.description));if(audit.result.scoreDisplayMode==='error'){descriptionEl.textContent='';valueEl.textContent='Error!';const tooltip=this.dom.createChildOf(descriptionEl,'span');tooltip.textContent=audit.result.errorMessage||'Report error: no metric information';}
return element;}
_renderOpportunity(audit,scale){const oppTmpl=this.dom.cloneTemplate('#tmpl-lh-opportunity',this.templateContext);const element=this.populateAuditValues(audit,oppTmpl);element.id=audit.result.id;if(!audit.result.details||audit.result.scoreDisplayMode==='error'){return element;}
const details=audit.result.details;if(details.type!=='opportunity'){return element;}
const displayEl=this.dom.find('.lh-audit__display-text',element);const sparklineWidthPct=`${details.overallSavingsMs / scale * 100}%`;this.dom.find('.lh-sparkline__bar',element).style.width=sparklineWidthPct;displayEl.textContent=Util.formatSeconds(details.overallSavingsMs,0.01);if(audit.result.displayValue){const displayValue=audit.result.displayValue;this.dom.find('.lh-load-opportunity__sparkline',element).title=displayValue;displayEl.title=displayValue;}
return element;}
_getWastedMs(audit){if(audit.result.details&&audit.result.details.type==='opportunity'){const details=audit.result.details;if(typeof details.overallSavingsMs!=='number'){throw new Error('non-opportunity details passed to _getWastedMs');}
return details.overallSavingsMs;}else{return Number.MIN_VALUE;}}
render(category,groups,environment){const element=this.dom.createElement('div','lh-category');if(environment==='PSI'){const gaugeEl=this.dom.createElement('div','lh-score__gauge');gaugeEl.appendChild(this.renderScoreGauge(category,groups));element.appendChild(gaugeEl);}else{this.createPermalinkSpan(element,category.id);element.appendChild(this.renderCategoryHeader(category,groups));}
const metricAuditsEl=this.renderAuditGroup(groups.metrics);const toggleTmpl=this.dom.cloneTemplate('#tmpl-lh-metrics-toggle',this.templateContext);const _toggleEl=this.dom.find('.lh-metrics-toggle',toggleTmpl);metricAuditsEl.append(..._toggleEl.childNodes);const metricAudits=category.auditRefs.filter(audit=>audit.group==='metrics');const keyMetrics=metricAudits.filter(a=>a.weight>=3);const otherMetrics=metricAudits.filter(a=>a.weight<3);const metricsBoxesEl=this.dom.createChildOf(metricAuditsEl,'div','lh-columns');const metricsColumn1El=this.dom.createChildOf(metricsBoxesEl,'div','lh-column');const metricsColumn2El=this.dom.createChildOf(metricsBoxesEl,'div','lh-column');keyMetrics.forEach(item=>{metricsColumn1El.appendChild(this._renderMetric(item));});otherMetrics.forEach(item=>{metricsColumn2El.appendChild(this._renderMetric(item));});if(environment!=='PSI'){const estValuesEl=this.dom.createChildOf(metricAuditsEl,'div','lh-metrics__disclaimer');const disclaimerEl=this.dom.convertMarkdownLinkSnippets(Util.UIStrings.varianceDisclaimer);estValuesEl.appendChild(disclaimerEl);}
metricAuditsEl.classList.add('lh-audit-group--metrics');element.appendChild(metricAuditsEl);const timelineEl=this.dom.createChildOf(element,'div','lh-filmstrip-container');const thumbnailAudit=category.auditRefs.find(audit=>audit.id==='screenshot-thumbnails');const thumbnailResult=thumbnailAudit&&thumbnailAudit.result;if(thumbnailResult&&thumbnailResult.details){timelineEl.id=thumbnailResult.id;const filmstripEl=this.detailsRenderer.render(thumbnailResult.details);filmstripEl&&timelineEl.appendChild(filmstripEl);}
const budgetAudit=category.auditRefs.find(audit=>audit.id==='performance-budget');if(budgetAudit&&budgetAudit.result.details){const table=this.detailsRenderer.render(budgetAudit.result.details);if(table){table.id=budgetAudit.id;table.classList.add('lh-audit');const budgetsGroupEl=this.renderAuditGroup(groups.budgets);budgetsGroupEl.appendChild(table);budgetsGroupEl.classList.add('lh-audit-group--budgets');element.appendChild(budgetsGroupEl);}}
const opportunityAudits=category.auditRefs.filter(audit=>audit.group==='load-opportunities'&&!Util.showAsPassed(audit.result)).sort((auditA,auditB)=>this._getWastedMs(auditB)-this._getWastedMs(auditA));if(opportunityAudits.length){const minimumScale=2000;const wastedMsValues=opportunityAudits.map(audit=>this._getWastedMs(audit));const maxWaste=Math.max(...wastedMsValues);const scale=Math.max(Math.ceil(maxWaste/1000)*1000,minimumScale);const groupEl=this.renderAuditGroup(groups['load-opportunities']);const tmpl=this.dom.cloneTemplate('#tmpl-lh-opportunity-header',this.templateContext);this.dom.find('.lh-load-opportunity__col--one',tmpl).textContent=Util.UIStrings.opportunityResourceColumnLabel;this.dom.find('.lh-load-opportunity__col--two',tmpl).textContent=Util.UIStrings.opportunitySavingsColumnLabel;const headerEl=this.dom.find('.lh-load-opportunity__header',tmpl);groupEl.appendChild(headerEl);opportunityAudits.forEach(item=>groupEl.appendChild(this._renderOpportunity(item,scale)));groupEl.classList.add('lh-audit-group--load-opportunities');element.appendChild(groupEl);}
const diagnosticAudits=category.auditRefs.filter(audit=>audit.group==='diagnostics'&&!Util.showAsPassed(audit.result)).sort((a,b)=>{const scoreA=a.result.scoreDisplayMode==='informative'?100:Number(a.result.score);const scoreB=b.result.scoreDisplayMode==='informative'?100:Number(b.result.score);return scoreA-scoreB;});if(diagnosticAudits.length){const groupEl=this.renderAuditGroup(groups['diagnostics']);diagnosticAudits.forEach(item=>groupEl.appendChild(this.renderAudit(item)));groupEl.classList.add('lh-audit-group--diagnostics');element.appendChild(groupEl);}
const passedAudits=category.auditRefs.filter(audit=>(audit.group==='load-opportunities'||audit.group==='diagnostics')&&Util.showAsPassed(audit.result));if(!passedAudits.length)return element;const clumpOpts={auditRefs:passedAudits,groupDefinitions:groups,};const passedElem=this.renderClump('passed',clumpOpts);element.appendChild(passedElem);return element;}}
if(typeof module!=='undefined'&&module.exports){module.exports=PerformanceCategoryRenderer;}else{self.PerformanceCategoryRenderer=PerformanceCategoryRenderer;};'use strict';const getUniqueSuffix=(()=>{let svgSuffix=0;return function(){return svgSuffix++;};})();class PwaCategoryRenderer extends CategoryRenderer{render(category,groupDefinitions={}){const categoryElem=this.dom.createElement('div','lh-category');this.createPermalinkSpan(categoryElem,category.id);categoryElem.appendChild(this.renderCategoryHeader(category,groupDefinitions));const auditRefs=category.auditRefs;const regularAuditRefs=auditRefs.filter(ref=>ref.result.scoreDisplayMode!=='manual');const auditsElem=this._renderAudits(regularAuditRefs,groupDefinitions);categoryElem.appendChild(auditsElem);const manualAuditRefs=auditRefs.filter(ref=>ref.result.scoreDisplayMode==='manual');const manualElem=this.renderClump('manual',{auditRefs:manualAuditRefs,description:category.manualDescription});categoryElem.appendChild(manualElem);return categoryElem;}
renderScoreGauge(category,groupDefinitions){if(category.score===null){return super.renderScoreGauge(category,groupDefinitions);}
const tmpl=this.dom.cloneTemplate('#tmpl-lh-gauge--pwa',this.templateContext);const wrapper=(this.dom.find('.lh-gauge--pwa__wrapper',tmpl));wrapper.href=`#${category.id}`;const svgRoot=tmpl.querySelector('svg');if(!svgRoot)throw new Error('no SVG element found in PWA score gauge template');PwaCategoryRenderer._makeSvgReferencesUnique(svgRoot);const allGroups=this._getGroupIds(category.auditRefs);const passingGroupIds=this._getPassingGroupIds(category.auditRefs);if(passingGroupIds.size===allGroups.size){wrapper.classList.add('lh-badged--all');}else{for(const passingGroupId of passingGroupIds){wrapper.classList.add(`lh-badged--${passingGroupId}`);}}
this.dom.find('.lh-gauge__label',tmpl).textContent=category.title;wrapper.title=this._getGaugeTooltip(category.auditRefs,groupDefinitions);return tmpl;}
_getGroupIds(auditRefs){const groupIds=auditRefs.map(ref=>ref.group).filter(g=>!!g);return new Set(groupIds);}
_getPassingGroupIds(auditRefs){const uniqueGroupIds=this._getGroupIds(auditRefs);for(const auditRef of auditRefs){if(!Util.showAsPassed(auditRef.result)&&auditRef.group){uniqueGroupIds.delete(auditRef.group);}}
return uniqueGroupIds;}
_getGaugeTooltip(auditRefs,groupDefinitions){const groupIds=this._getGroupIds(auditRefs);const tips=[];for(const groupId of groupIds){const groupAuditRefs=auditRefs.filter(ref=>ref.group===groupId);const auditCount=groupAuditRefs.length;const passedCount=groupAuditRefs.filter(ref=>Util.showAsPassed(ref.result)).length;const title=groupDefinitions[groupId].title;tips.push(`${title}: ${passedCount}/${auditCount}`);}
return tips.join(', ');}
_renderAudits(auditRefs,groupDefinitions){const auditsElem=this.renderUnexpandableClump(auditRefs,groupDefinitions);const passsingGroupIds=this._getPassingGroupIds(auditRefs);for(const groupId of passsingGroupIds){const groupElem=this.dom.find(`.lh-audit-group--${groupId}`,auditsElem);groupElem.classList.add('lh-badged');}
return auditsElem;}
static _makeSvgReferencesUnique(svgRoot){const defsEl=svgRoot.querySelector('defs');if(!defsEl)return;const idSuffix=getUniqueSuffix();const elementsToUpdate=defsEl.querySelectorAll('[id]');for(const el of elementsToUpdate){const oldId=el.id;const newId=`${oldId}-${idSuffix}`;el.id=newId;const useEls=svgRoot.querySelectorAll(`use[href="#${oldId}"]`);for(const useEl of useEls){useEl.setAttribute('href',`#${newId}`);}
const fillEls=svgRoot.querySelectorAll(`[fill="url(#${oldId})"]`);for(const fillEl of fillEls){fillEl.setAttribute('fill',`url(#${newId})`);}}}}
if(typeof module!=='undefined'&&module.exports){module.exports=PwaCategoryRenderer;}else{self.PwaCategoryRenderer=PwaCategoryRenderer;};'use strict';class ReportRenderer{constructor(dom){this._dom=dom;this._templateContext=this._dom.document();}
renderReport(result,container){const originalUIStrings=JSON.parse(JSON.stringify(Util.UIStrings));this._dom.setLighthouseChannel(result.configSettings.channel||'unknown');const report=Util.prepareReportResult(result);container.textContent='';container.appendChild(this._renderReport(report));Util.updateAllUIStrings(originalUIStrings);return container;}
setTemplateContext(context){this._templateContext=context;}
_renderReportTopbar(report){const el=this._dom.cloneTemplate('#tmpl-lh-topbar',this._templateContext);const metadataUrl=(this._dom.find('.lh-topbar__url',el));metadataUrl.href=metadataUrl.textContent=report.finalUrl;metadataUrl.title=report.finalUrl;return el;}
_renderReportHeader(){const el=this._dom.cloneTemplate('#tmpl-lh-heading',this._templateContext);const domFragment=this._dom.cloneTemplate('#tmpl-lh-scores-wrapper',this._templateContext);const placeholder=this._dom.find('.lh-scores-wrapper-placeholder',el);(placeholder.parentNode).replaceChild(domFragment,placeholder);return el;}
_renderReportFooter(report){const footer=this._dom.cloneTemplate('#tmpl-lh-footer',this._templateContext);const env=this._dom.find('.lh-env__items',footer);env.id='runtime-settings';const envValues=Util.getEnvironmentDisplayValues(report.configSettings||{});[{name:'URL',description:report.finalUrl},{name:'Fetch time',description:Util.formatDateTime(report.fetchTime)},...envValues,{name:'User agent (host)',description:report.userAgent},{name:'User agent (network)',description:report.environment&&report.environment.networkUserAgent},{name:'CPU/Memory Power',description:report.environment&&report.environment.benchmarkIndex.toFixed(0)},].forEach(runtime=>{if(!runtime.description)return;const item=this._dom.cloneTemplate('#tmpl-lh-env__items',env);this._dom.find('.lh-env__name',item).textContent=runtime.name;this._dom.find('.lh-env__description',item).textContent=runtime.description;env.appendChild(item);});this._dom.find('.lh-footer__version',footer).textContent=report.lighthouseVersion;return footer;}
_renderReportWarnings(report){if(!report.runWarnings||report.runWarnings.length===0){return this._dom.createElement('div');}
const container=this._dom.cloneTemplate('#tmpl-lh-warnings--toplevel',this._templateContext);const message=this._dom.find('.lh-warnings__msg',container);message.textContent=Util.UIStrings.toplevelWarningsMessage;const warnings=this._dom.find('ul',container);for(const warningString of report.runWarnings){const warning=warnings.appendChild(this._dom.createElement('li'));warning.textContent=warningString;}
return container;}
_renderScoreGauges(report,categoryRenderer,specificCategoryRenderers){const defaultGauges=[];const customGauges=[];const pluginGauges=[];for(const category of Object.values(report.categories)){const renderer=specificCategoryRenderers[category.id]||categoryRenderer;const categoryGauge=renderer.renderScoreGauge(category,report.categoryGroups||{});if(Util.isPluginCategory(category.id)){pluginGauges.push(categoryGauge);}else if(renderer.renderScoreGauge===categoryRenderer.renderScoreGauge){defaultGauges.push(categoryGauge);}else{customGauges.push(categoryGauge);}}
return[...defaultGauges,...customGauges,...pluginGauges];}
_renderReport(report){const detailsRenderer=new DetailsRenderer(this._dom);const categoryRenderer=new CategoryRenderer(this._dom,detailsRenderer);categoryRenderer.setTemplateContext(this._templateContext);const specificCategoryRenderers={performance:new PerformanceCategoryRenderer(this._dom,detailsRenderer),pwa:new PwaCategoryRenderer(this._dom,detailsRenderer),};Object.values(specificCategoryRenderers).forEach(renderer=>{renderer.setTemplateContext(this._templateContext);});const headerContainer=this._dom.createElement('div');headerContainer.appendChild(this._renderReportHeader());const reportContainer=this._dom.createElement('div','lh-container');const reportSection=this._dom.createElement('div','lh-report');reportSection.appendChild(this._renderReportWarnings(report));let scoreHeader;const isSoloCategory=Object.keys(report.categories).length===1;if(!isSoloCategory){scoreHeader=this._dom.createElement('div','lh-scores-header');}else{headerContainer.classList.add('lh-header--solo-category');}
if(scoreHeader){const scoreScale=this._dom.cloneTemplate('#tmpl-lh-scorescale',this._templateContext);const scoresContainer=this._dom.find('.lh-scores-container',headerContainer);scoreHeader.append(...this._renderScoreGauges(report,categoryRenderer,specificCategoryRenderers));scoresContainer.appendChild(scoreHeader);scoresContainer.appendChild(scoreScale);const stickyHeader=this._dom.createElement('div','lh-sticky-header');stickyHeader.append(...this._renderScoreGauges(report,categoryRenderer,specificCategoryRenderers));reportContainer.appendChild(stickyHeader);}
const categories=reportSection.appendChild(this._dom.createElement('div','lh-categories'));for(const category of Object.values(report.categories)){const renderer=specificCategoryRenderers[category.id]||categoryRenderer;const wrapper=renderer.dom.createChildOf(categories,'div','lh-category-wrapper');wrapper.appendChild(renderer.render(category,report.categoryGroups));}
const reportFragment=this._dom.createFragment();const topbarDocumentFragment=this._renderReportTopbar(report);reportFragment.appendChild(topbarDocumentFragment);reportFragment.appendChild(reportContainer);reportContainer.appendChild(headerContainer);reportContainer.appendChild(reportSection);reportSection.appendChild(this._renderReportFooter(report));return reportFragment;}}
ReportRenderer._UIStringsStash={};if(typeof module!=='undefined'&&module.exports){module.exports=ReportRenderer;}else{self.ReportRenderer=ReportRenderer;}(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}(g.Lighthouse||(g.Lighthouse={})).ReportGenerator=f()}})(function(){var define,module,exports;return(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({"./html/html-report-assets.js":[function(require,module,exports){'use strict';const cachedResources=Root.Runtime.cachedResources;module.exports={get REPORT_CSS(){return cachedResources['audits/lighthouse/report.css'];},get REPORT_JAVASCRIPT(){return cachedResources['audits/lighthouse/report.js'];},get REPORT_TEMPLATE(){return cachedResources['audits/lighthouse/template.html'];},get REPORT_TEMPLATES(){return cachedResources['audits/lighthouse/templates.html'];},};},{}],1:[function(require,module,exports){'use strict';const htmlReportAssets=require('./html/html-report-assets.js');class ReportGenerator{static replaceStrings(source,replacements){if(replacements.length===0){return source;}
const firstReplacement=replacements[0];const nextReplacements=replacements.slice(1);return source.split(firstReplacement.search).map(part=>ReportGenerator.replaceStrings(part,nextReplacements)).join(firstReplacement.replacement);}
static generateReportHtml(lhr){const sanitizedJson=JSON.stringify(lhr).replace(/</g,'\\u003c').replace(/\u2028/g,'\\u2028').replace(/\u2029/g,'\\u2029');const sanitizedJavascript=htmlReportAssets.REPORT_JAVASCRIPT.replace(/<\//g,'\\u003c/');return ReportGenerator.replaceStrings(htmlReportAssets.REPORT_TEMPLATE,[{search:'%%LIGHTHOUSE_JSON%%',replacement:sanitizedJson},{search:'%%LIGHTHOUSE_JAVASCRIPT%%',replacement:sanitizedJavascript},{search:'/*%%LIGHTHOUSE_CSS%%*/',replacement:htmlReportAssets.REPORT_CSS},{search:'%%LIGHTHOUSE_TEMPLATES%%',replacement:htmlReportAssets.REPORT_TEMPLATES},]);}
static generateReportCSV(lhr){const CRLF='\r\n';const separator=',';const escape=value=>`"${value.replace(/"/g, '""')}"`;const header=['category','name','title','type','score'];const table=Object.values(lhr.categories).map(category=>{return category.auditRefs.map(auditRef=>{const audit=lhr.audits[auditRef.id];const numericScore=audit.score===null?-1:audit.score;return[category.title,audit.id,audit.title,audit.scoreDisplayMode,numericScore].map(value=>value.toString()).map(escape);});});return[header].concat(...table).map(row=>row.join(separator)).join(CRLF);}
static generateReport(lhr,outputModes){const outputAsArray=Array.isArray(outputModes);if(typeof outputModes==='string')outputModes=[outputModes];const output=outputModes.map(outputMode=>{if(outputMode==='html'){return ReportGenerator.generateReportHtml(lhr);}
if(outputMode==='csv'){return ReportGenerator.generateReportCSV(lhr);}
if(outputMode==='json'){return JSON.stringify(lhr,null,2);}
throw new Error('Invalid output mode: '+outputMode);});return outputAsArray?output:output[0];}}
module.exports=ReportGenerator;},{"./html/html-report-assets.js":"./html/html-report-assets.js"}]},{},[1])(1)});import'./lighthouse/report.js';import'./lighthouse/report-generator.js';import'./RadioSetting.js';import'./AuditsPanel.js';import'./AuditsController.js';import'./AuditsReportSelector.js';import'./AuditsReportRenderer.js';import'./AuditsStartView.js';import'./AuditsStatusView.js';import'./AuditsProtocolService.js';import*as AuditsController from'./AuditsController.js';import*as AuditsPanel from'./AuditsPanel.js';import*as AuditsProtocolService from'./AuditsProtocolService.js';import*as AuditsReportRenderer from'./AuditsReportRenderer.js';import*as AuditsReportSelector from'./AuditsReportSelector.js';import*as AuditsStartView from'./AuditsStartView.js';import*as AuditsStatusView from'./AuditsStatusView.js';import*as RadioSetting from'./RadioSetting.js';export{AuditsController,AuditsPanel,AuditsProtocolService,AuditsReportRenderer,AuditsReportSelector,AuditsStartView,AuditsStatusView,RadioSetting,};export default class RadioSetting{constructor(options,setting,description){this._setting=setting;this._options=options;this.element=createElement('div','audits-radio-group');this.element.title=description;UI.ARIAUtils.setDescription(this.element,description);UI.ARIAUtils.markAsRadioGroup(this.element);this._radioElements=[];for(const option of this._options){const fragment=UI.Fragment.build`
        <label $="label" class="audits-radio">
          <input $="input" type="radio" value=${option.value} name=${setting.name}>
          ${option.label}
        </label>
      `;this.element.appendChild(fragment.element());if(option.title){UI.Tooltip.install(fragment.$('label'),option.title);}
const radioElement=fragment.$('input');radioElement.addEventListener('change',this._valueChanged.bind(this));this._radioElements.push(radioElement);}
this._ignoreChangeEvents=false;this._selectedIndex=-1;setting.addChangeListener(this._settingChanged,this);this._settingChanged();}
_updateUI(){this._ignoreChangeEvents=true;this._radioElements[this._selectedIndex].checked=true;this._ignoreChangeEvents=false;}
_settingChanged(){const value=this._setting.get();this._selectedIndex=this._options.findIndex(option=>option.value===value);this._updateUI();}
_valueChanged(event){if(this._ignoreChangeEvents){return;}
const selectedRadio=this._radioElements.find(radio=>radio.checked);this._setting.set(selectedRadio.value);}}
self.Audits=self.Audits||{};Audits=Audits||{};Audits.RadioSetting=RadioSetting;export default class StatusView{constructor(controller){this._controller=controller;this._statusView=null;this._statusHeader=null;this._progressWrapper=null;this._progressBar=null;this._statusText=null;this._cancelButton=null;this._inspectedURL='';this._textChangedAt=0;this._fastFactsQueued=FastFacts.slice();this._currentPhase=null;this._scheduledTextChangeTimeout=null;this._scheduledFastFactTimeout=null;this._dialog=new UI.Dialog();this._dialog.setDimmed(true);this._dialog.setCloseOnEscape(false);this._dialog.setOutsideClickCallback(event=>event.consume(true));this._render();}
_render(){const dialogRoot=UI.createShadowRootWithCoreStyles(this._dialog.contentElement,'audits/auditsDialog.css');const auditsViewElement=dialogRoot.createChild('div','audits-view vbox');const cancelButton=UI.createTextButton(ls`Cancel`,this._cancel.bind(this));const fragment=UI.Fragment.build`
      <div class="audits-view vbox">
        <h2 $="status-header">Auditing your web page\u2026</h2>
        <div class="audits-status vbox" $="status-view">
          <div class="audits-progress-wrapper" $="progress-wrapper">
            <div class="audits-progress-bar" $="progress-bar"></div>
          </div>
          <div class="audits-status-text" $="status-text"></div>
        </div>
        ${cancelButton}
      </div>
    `;auditsViewElement.appendChild(fragment.element());this._statusView=fragment.$('status-view');this._statusHeader=fragment.$('status-header');this._progressWrapper=fragment.$('progress-wrapper');this._progressBar=fragment.$('progress-bar');this._statusText=fragment.$('status-text');UI.ARIAUtils.markAsProgressBar(this._progressBar,0,Audits.StatusView.StatusPhases.length-1);this._cancelButton=cancelButton;UI.ARIAUtils.markAsStatus(this._statusText);this._dialog.setDefaultFocusedElement(cancelButton);this._dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.SetExactWidthMaxHeight);this._dialog.setMaxContentSize(new UI.Size(500,400));}
_reset(){this._resetProgressBarClasses();clearTimeout(this._scheduledFastFactTimeout);this._textChangedAt=0;this._fastFactsQueued=FastFacts.slice();this._currentPhase=null;this._scheduledTextChangeTimeout=null;this._scheduledFastFactTimeout=null;}
show(dialogRenderElement){this._reset();this.updateStatus(ls`Loading\u2026`);const parsedURL=this._inspectedURL.asParsedURL();const pageHost=parsedURL&&parsedURL.host;const statusHeader=pageHost?ls`Auditing ${pageHost}`:ls`Auditing your web page`;this._renderStatusHeader(statusHeader);this._dialog.show(dialogRenderElement);}
_renderStatusHeader(statusHeader){this._statusHeader.textContent=`${statusHeader}\u2026`;}
hide(){if(this._dialog.isShowing()){this._dialog.hide();}}
setInspectedURL(url=''){this._inspectedURL=url;}
updateStatus(message){if(!message||!this._statusText){return;}
if(message.startsWith('Cancel')){this._commitTextChange(Common.UIString('Cancelling\u2026'));clearTimeout(this._scheduledFastFactTimeout);return;}
const nextPhase=this._getPhaseForMessage(message);const nextPhaseIndex=Audits.StatusView.StatusPhases.indexOf(nextPhase);const currentPhaseIndex=Audits.StatusView.StatusPhases.indexOf(this._currentPhase);if(!nextPhase&&!this._currentPhase){this._commitTextChange(Common.UIString('Lighthouse is warming up\u2026'));clearTimeout(this._scheduledFastFactTimeout);}else if(nextPhase&&(!this._currentPhase||currentPhaseIndex<nextPhaseIndex)){this._currentPhase=nextPhase;const text=this._getMessageForPhase(nextPhase);this._scheduleTextChange(text);this._scheduleFastFactCheck();this._resetProgressBarClasses();this._progressBar.classList.add(nextPhase.progressBarClass);UI.ARIAUtils.setProgressBarValue(this._progressBar,nextPhaseIndex,text);}}
_cancel(){this._controller.dispatchEventToListeners(Audits.Events.RequestAuditCancel);}
_getMessageForPhase(phase){if(phase.message){return phase.message;}
const deviceType=Audits.RuntimeSettings.find(item=>item.setting.name==='audits.device_type').setting.get();const throttling=Audits.RuntimeSettings.find(item=>item.setting.name==='audits.throttling').setting.get();const match=LoadingMessages.find(item=>{return item.deviceType===deviceType&&item.throttling===throttling;});return match?match.message:ls`Lighthouse is loading your page`;}
_getPhaseForMessage(message){return StatusPhases.find(phase=>message.startsWith(phase.statusMessagePrefix));}
_resetProgressBarClasses(){if(!this._progressBar){return;}
this._progressBar.className='audits-progress-bar';}
_scheduleFastFactCheck(){if(!this._currentPhase||this._scheduledFastFactTimeout){return;}
this._scheduledFastFactTimeout=setTimeout(()=>{this._updateFastFactIfNecessary();this._scheduledFastFactTimeout=null;this._scheduleFastFactCheck();},100);}
_updateFastFactIfNecessary(){const now=performance.now();if(now-this._textChangedAt<fastFactRotationInterval){return;}
if(!this._fastFactsQueued.length){return;}
const fastFactIndex=Math.floor(Math.random()*this._fastFactsQueued.length);this._scheduleTextChange(ls`\ud83d\udca1 ${this._fastFactsQueued[fastFactIndex]}`);this._fastFactsQueued.splice(fastFactIndex,1);}
_commitTextChange(text){if(!this._statusText){return;}
this._textChangedAt=performance.now();this._statusText.textContent=text;}
_scheduleTextChange(text){if(this._scheduledTextChangeTimeout){clearTimeout(this._scheduledTextChangeTimeout);}
const msSinceLastChange=performance.now()-this._textChangedAt;const msToTextChange=minimumTextVisibilityDuration-msSinceLastChange;this._scheduledTextChangeTimeout=setTimeout(()=>{this._commitTextChange(text);},Math.max(msToTextChange,0));}
renderBugReport(err){console.error(err);clearTimeout(this._scheduledFastFactTimeout);clearTimeout(this._scheduledTextChangeTimeout);this._resetProgressBarClasses();this._progressBar.classList.add('errored');this._commitTextChange('');this._statusText.createChild('p').createTextChild(Common.UIString('Ah, sorry! We ran into an error.'));if(KnownBugPatterns.some(pattern=>pattern.test(err.message))){const message=Common.UIString('Try to navigate to the URL in a fresh Chrome profile without any other tabs or extensions open and try again.');this._statusText.createChild('p').createTextChild(message);}else{this._renderBugReportBody(err,this._inspectedURL);}}
renderText(statusHeader,text){this._renderStatusHeader(statusHeader);this._commitTextChange(text);}
toggleCancelButton(show){this._cancelButton.style.visibility=show?'visible':'hidden';}
_renderBugReportBody(err,auditURL){const issueBody=`
${err.message}
\`\`\`
Channel: DevTools
Initial URL: ${auditURL}
Chrome Version: ${navigator.userAgent.match(/Chrome\/(\S+)/)[1]}
Stack Trace: ${err.stack}
\`\`\`
`;this._statusText.createChild('p').createTextChild(ls`If this issue is reproducible, please report it at the Lighthouse GitHub repo.`);this._statusText.createChild('code','monospace').createTextChild(issueBody.trim());}}
export const fastFactRotationInterval=6000;export const minimumTextVisibilityDuration=3000;const KnownBugPatterns=[/PARSING_PROBLEM/,/DOCUMENT_REQUEST/,/READ_FAILED/,/TRACING_ALREADY_STARTED/,/^You must provide a url to the runner/,/^You probably have multiple tabs open/,];export const StatusPhases=[{id:'loading',progressBarClass:'loading',statusMessagePrefix:'Loading page',},{id:'gathering',progressBarClass:'gathering',message:ls`Lighthouse is gathering information about the page to compute your score.`,statusMessagePrefix:'Gathering',},{id:'auditing',progressBarClass:'auditing',message:ls`Almost there! Lighthouse is now generating your report.`,statusMessagePrefix:'Auditing',}];const LoadingMessages=[{deviceType:'mobile',throttling:'on',message:ls`Lighthouse is loading your page with throttling to measure performance on a mobile device on 3G.`,},{deviceType:'desktop',throttling:'on',message:ls`Lighthouse is loading your page with throttling to measure performance on a slow desktop on 3G.`,},{deviceType:'mobile',throttling:'off',message:ls`Lighthouse is loading your page with mobile emulation.`,},{deviceType:'desktop',throttling:'off',message:ls`Lighthouse is loading your page.`,},];const FastFacts=[ls`1MB takes a minimum of 5 seconds to download on a typical 3G connection [Source: WebPageTest and DevTools 3G definition].`,ls`Rebuilding Pinterest pages for performance increased conversion rates by 15% [Source: WPO Stats]`,ls`BBC has seen a loss of 10% of their users for every extra second of page load [Source: WPO Stats]`,ls`By reducing the response size of JSON needed for displaying comments, Instagram saw increased impressions [Source: WPO Stats]`,ls`Walmart saw a 1% increase in revenue for every 100ms improvement in page load [Source: WPO Stats]`,ls`If a site takes >1 second to become interactive, users lose attention, and their perception of completing the page task is broken [Source: Google Developers Blog]`,ls`75% of global mobile users in 2016 were on 2G or 3G [Source: GSMA Mobile]`,ls`The average user device costs less than 200 USD. [Source: International Data Corporation]`,ls`53% of all site visits are abandoned if page load takes more than 3 seconds [Source: Google DoubleClick blog]`,ls`19 seconds is the average time a mobile web page takes to load on a 3G connection [Source: Google DoubleClick blog]`,ls`14 seconds is the average time a mobile web page takes to load on a 4G connection [Source: Google DoubleClick blog]`,ls`70% of mobile pages take nearly 7 seconds for the visual content above the fold to display on the screen. [Source: Think with Google]`,ls`As page load time increases from one second to seven seconds, the probability of a mobile site visitor bouncing increases 113%. [Source: Think with Google]`,ls`As the number of elements on a page increases from 400 to 6,000, the probability of conversion drops 95%. [Source: Think with Google]`,ls`70% of mobile pages weigh over 1MB, 36% over 2MB, and 12% over 4MB. [Source: Think with Google]`,ls`Lighthouse only simulates mobile performance; to measure performance on a real device, try WebPageTest.org [Source: Lighthouse team]`,];self.Audits=self.Audits||{};Audits=Audits||{};Audits.StatusView=StatusView;Audits.StatusView.StatusPhases=StatusPhases;export default class StartView extends UI.Widget{constructor(controller){super();this.registerRequiredCSS('audits/auditsStartView.css');this._controller=controller;this._settingsToolbar=new UI.Toolbar('');this._render();}
settingsToolbar(){return this._settingsToolbar;}
_populateRuntimeSettingAsRadio(settingName,label,parentElement){const runtimeSetting=Audits.RuntimeSettings.find(item=>item.setting.name===settingName);if(!runtimeSetting||!runtimeSetting.options){throw new Error(`${settingName} is not a setting with options`);}
const control=new Audits.RadioSetting(runtimeSetting.options,runtimeSetting.setting,runtimeSetting.description);parentElement.appendChild(control.element);UI.ARIAUtils.setAccessibleName(control.element,label);}
_populateRuntimeSettingAsToolbarCheckbox(settingName,toolbar){const runtimeSetting=Audits.RuntimeSettings.find(item=>item.setting.name===settingName);if(!runtimeSetting||!runtimeSetting.title){throw new Error(`${settingName} is not a setting with a title`);}
runtimeSetting.setting.setTitle(runtimeSetting.title);const control=new UI.ToolbarSettingCheckbox(runtimeSetting.setting,runtimeSetting.description);toolbar.appendToolbarItem(control);if(runtimeSetting.learnMore){const link=UI.XLink.create(runtimeSetting.learnMore,ls`Learn more`,'audits-learn-more');link.style.padding='5px';control.element.appendChild(link);}}
_populateFormControls(fragment){const deviceTypeFormElements=fragment.$('device-type-form-elements');this._populateRuntimeSettingAsRadio('audits.device_type',ls`Device`,deviceTypeFormElements);const categoryFormElements=fragment.$('categories-form-elements');const pluginFormElements=fragment.$('plugins-form-elements');for(const preset of Audits.Presets){const formElements=preset.plugin?pluginFormElements:categoryFormElements;preset.setting.setTitle(preset.title);const checkbox=new UI.ToolbarSettingCheckbox(preset.setting);const row=formElements.createChild('div','vbox audits-launcher-row');row.title=preset.description;row.appendChild(checkbox.element);}
UI.ARIAUtils.markAsGroup(categoryFormElements);UI.ARIAUtils.setAccessibleName(categoryFormElements,ls`Categories`);UI.ARIAUtils.markAsGroup(pluginFormElements);UI.ARIAUtils.setAccessibleName(pluginFormElements,ls`Community Plugins (beta)`);}
_render(){this._populateRuntimeSettingAsToolbarCheckbox('audits.clear_storage',this._settingsToolbar);this._populateRuntimeSettingAsToolbarCheckbox('audits.throttling',this._settingsToolbar);this._startButton=UI.createTextButton(ls`Generate report`,()=>this._controller.dispatchEventToListeners(Audits.Events.RequestAuditStart),'',true);this.setDefaultFocusedElement(this._startButton);const auditsDescription=ls`Identify and fix common problems that affect your site's performance, accessibility, and user experience.`;const fragment=UI.Fragment.build`
      <div class="vbox audits-start-view">
        <header>
          <div class="audits-logo"></div>
          <div class="audits-start-button-container hbox">
            ${this._startButton}
            </div>
          <div $="help-text" class="audits-help-text hidden"></div>
          <div class="audits-start-view-text">
            <span>${auditsDescription}</span>
            ${UI.XLink.create('https://developers.google.com/web/tools/lighthouse/', ls`Learn more`)}
          </div>
        </header>
        <form>
          <div class="audits-form-categories">
            <div class="audits-form-section">
              <div class="audits-form-section-label">
                ${ls`Categories`}
              </div>
              <div class="audits-form-elements" $="categories-form-elements"></div>
            </div>
            <div class="audits-form-section">
              <div class="audits-form-section-label">
                <div class="audits-icon-label">${ls`Community Plugins(beta)`}</div>
              </div>
              <div class="audits-form-elements" $="plugins-form-elements"></div>
            </div>
          </div>
          <div class="audits-form-section">
            <div class="audits-form-section-label">
              ${ls`Device`}
            </div>
            <div class="audits-form-elements" $="device-type-form-elements"></div>
          </div>
        </form>
      </div>
    `;this._helpText=fragment.$('help-text');this._populateFormControls(fragment);this.contentElement.appendChild(fragment.element());this.contentElement.style.overflow='auto';}
onResize(){const useNarrowLayout=this.contentElement.offsetWidth<560;const startViewEl=this.contentElement.querySelector('.audits-start-view');startViewEl.classList.toggle('hbox',!useNarrowLayout);startViewEl.classList.toggle('vbox',useNarrowLayout);}
focusStartButton(){this._startButton.focus();}
setStartButtonEnabled(isEnabled){if(this._helpText){this._helpText.classList.toggle('hidden',isEnabled);}
if(this._startButton){this._startButton.disabled=!isEnabled;}}
setUnauditableExplanation(text){if(this._helpText){this._helpText.textContent=text;}}}
self.Audits=self.Audits||{};Audits=Audits||{};Audits.StartView=StartView;export default class ReportSelector{constructor(renderNewAuditView){this._renderNewAuditView=renderNewAuditView;this._newAuditItem=createElement('option');this._comboBox=new UI.ToolbarComboBox(this._handleChange.bind(this),ls`Reports`,'audits-report');this._comboBox.setMaxWidth(180);this._comboBox.setMinWidth(140);this._itemByOptionElement=new Map();this._setEmptyState();}
_setEmptyState(){this._comboBox.selectElement().removeChildren();this._comboBox.setEnabled(false);this._newAuditItem=createElement('option');this._newAuditItem.label=Common.UIString('(new audit)');this._comboBox.selectElement().appendChild(this._newAuditItem);this._comboBox.select(this._newAuditItem);}
_handleChange(event){const item=this._selectedItem();if(item){item.select();}else{this._renderNewAuditView();}}
_selectedItem(){const option=this._comboBox.selectedOption();return this._itemByOptionElement.get(option);}
hasCurrentSelection(){return!!this._selectedItem();}
hasItems(){return this._itemByOptionElement.size>0;}
comboBox(){return this._comboBox;}
prepend(item){const optionEl=item.optionElement();const selectEl=this._comboBox.selectElement();this._itemByOptionElement.set(optionEl,item);selectEl.insertBefore(optionEl,selectEl.firstElementChild);this._comboBox.setEnabled(true);this._comboBox.select(optionEl);item.select();}
clearAll(){for(const elem of this._comboBox.options()){if(elem===this._newAuditItem){continue;}
this._itemByOptionElement.get(elem).delete();this._itemByOptionElement.delete(elem);}
this._setEmptyState();}
selectNewAudit(){this._comboBox.select(this._newAuditItem);}}
export class Item{constructor(lighthouseResult,renderReport,showLandingCallback){this._lighthouseResult=lighthouseResult;this._renderReport=renderReport;this._showLandingCallback=showLandingCallback;const url=new Common.ParsedURL(lighthouseResult.finalUrl);const timestamp=lighthouseResult.fetchTime;this._element=createElement('option');this._element.label=`${new Date(timestamp).toLocaleTimeString()} - ${url.domain()}`;}
select(){this._renderReport();}
optionElement(){return this._element;}
delete(){if(this._element){this._element.remove();}
this._showLandingCallback();}}
self.Audits=self.Audits||{};Audits=Audits||{};Audits.ReportSelector=ReportSelector;Audits.ReportSelector.Item=Item;const MaxLengthForLinks=40;export class AuditsReportRenderer extends ReportRenderer{static addViewTraceButton(el,artifacts){if(!artifacts||!artifacts.traces||!artifacts.traces.defaultPass){return;}
const container=el.querySelector('.lh-audit-group');const columnsEl=container.querySelector('.lh-columns');if(!columnsEl){return;}
const defaultPassTrace=artifacts.traces.defaultPass;const timelineButton=UI.createTextButton(Common.UIString('View Trace'),onViewTraceClick,'view-trace');container.insertBefore(timelineButton,columnsEl.nextSibling);async function onViewTraceClick(){Host.userMetrics.actionTaken(Host.UserMetrics.Action.AuditsViewTrace);await UI.inspectorView.showPanel('timeline');Timeline.TimelinePanel.instance().loadFromEvents(defaultPassTrace.traceEvents);}}
static async linkifyNodeDetails(el){const mainTarget=SDK.targetManager.mainTarget();const domModel=mainTarget.model(SDK.DOMModel);for(const origElement of el.getElementsByClassName('lh-node')){const detailsItem=origElement.dataset;if(!detailsItem.path){continue;}
const nodeId=await domModel.pushNodeByPathToFrontend(detailsItem.path);if(!nodeId){continue;}
const node=domModel.nodeForId(nodeId);if(!node){continue;}
const element=await Common.Linkifier.linkify(node,{tooltip:detailsItem.snippet});origElement.title='';origElement.textContent='';origElement.appendChild(element);}}
static async linkifySourceLocationDetails(el){for(const origElement of el.getElementsByClassName('lh-source-location')){const detailsItem=origElement.dataset;if(!detailsItem.sourceUrl||!detailsItem.sourceLine||!detailsItem.sourceColumn){continue;}
const url=detailsItem.sourceUrl;const line=Number(detailsItem.sourceLine);const column=Number(detailsItem.sourceColumn);const element=await Components.Linkifier.linkifyURL(url,{lineNumber:line,column,maxLength:MaxLengthForLinks});origElement.title='';origElement.textContent='';origElement.appendChild(element);}}
static handleDarkMode(el){if(UI.themeSupport.themeName()==='dark'){el.classList.add('dark');}}}
export class AuditsReportUIFeatures extends ReportUIFeatures{constructor(dom){super(dom);this._beforePrint=null;this._afterPrint=null;}
setBeforePrint(beforePrint){this._beforePrint=beforePrint;}
setAfterPrint(afterPrint){this._afterPrint=afterPrint;}
getReportHtml(){this.resetUIState();return Lighthouse.ReportGenerator.generateReportHtml(this.json);}
async _saveFile(blob){const domain=new Common.ParsedURL(this.json.finalUrl).domain();const sanitizedDomain=domain.replace(/[^a-z0-9.-]+/gi,'_');const timestamp=new Date(this.json.fetchTime).toISO8601Compact();const ext=blob.type.match('json')?'.json':'.html';const basename=`${sanitizedDomain}-${timestamp}${ext}`;const text=await blob.text();Workspace.fileManager.save(basename,text,true);}
async _print(){const document=this.getDocument();const clonedReport=document.querySelector('.lh-root').cloneNode(true);const printWindow=window.open('','_blank','channelmode=1,status=1,resizable=1');const style=printWindow.document.createElement('style');style.textContent=Root.Runtime.cachedResources['audits/lighthouse/report.css'];printWindow.document.head.appendChild(style);printWindow.document.body.replaceWith(clonedReport);await Audits.ReportRenderer.linkifyNodeDetails(clonedReport);if(this._beforePrint){this._beforePrint();}
printWindow.focus();printWindow.print();printWindow.close();if(this._afterPrint){this._afterPrint();}}
getDocument(){return this._document;}
resetUIState(){this._resetUIState();}}
self.Audits=self.Audits||{};Audits=Audits||{};Audits.ReportRenderer=AuditsReportRenderer;Audits.ReportUIFeatures=AuditsReportUIFeatures;export class ProtocolService extends Common.Object{constructor(){super();this._rawConnection=null;this._backend=null;this._backendPromise=null;this._status=null;}
async attach(){await SDK.targetManager.suspendAllTargets();const childTargetManager=SDK.targetManager.mainTarget().model(SDK.ChildTargetManager);this._rawConnection=await childTargetManager.createParallelConnection(this._dispatchProtocolMessage.bind(this));}
startLighthouse(auditURL,categoryIDs,flags){return this._send('start',{url:auditURL,categoryIDs,flags});}
async detach(){await this._send('stop');await this._backend.dispose();delete this._backend;delete this._backendPromise;await this._rawConnection.disconnect();await SDK.targetManager.resumeAllTargets();}
registerStatusCallback(callback){this._status=callback;}
_dispatchProtocolMessage(message){this._send('dispatchProtocolMessage',{message:JSON.stringify(message)});}
_initWorker(){this._backendPromise=Services.serviceManager.createAppService('audits_worker','AuditsService').then(backend=>{if(this._backend){return;}
this._backend=backend;this._backend.on('statusUpdate',result=>this._status(result.message));this._backend.on('sendProtocolMessage',result=>this._sendProtocolMessage(result.message));});}
_sendProtocolMessage(message){this._rawConnection.sendRawMessage(message);}
_send(method,params){if(!this._backendPromise){this._initWorker();}
return this._backendPromise.then(_=>this._backend.send(method,params));}}
self.Audits=self.Audits||{};Audits=Audits||{};Audits.ProtocolService=ProtocolService;export default class AuditsPanel extends UI.Panel{constructor(){super('audits');this.registerRequiredCSS('audits/lighthouse/report.css');this.registerRequiredCSS('audits/auditsPanel.css');this._protocolService=new Audits.ProtocolService();this._controller=new Audits.AuditController(this._protocolService);this._startView=new Audits.StartView(this._controller);this._statusView=new Audits.StatusView(this._controller);this._unauditableExplanation=null;this._cachedRenderedReports=new Map();this._dropTarget=new UI.DropTarget(this.contentElement,[UI.DropTarget.Type.File],Common.UIString('Drop audit file here'),this._handleDrop.bind(this));this._controller.addEventListener(Audits.Events.PageAuditabilityChanged,this._refreshStartAuditUI.bind(this));this._controller.addEventListener(Audits.Events.AuditProgressChanged,this._refreshStatusUI.bind(this));this._controller.addEventListener(Audits.Events.RequestAuditStart,this._startAudit.bind(this));this._controller.addEventListener(Audits.Events.RequestAuditCancel,this._cancelAudit.bind(this));this._renderToolbar();this._auditResultsElement=this.contentElement.createChild('div','audits-results-container');this._renderStartView();this._controller.recomputePageAuditability();}
_refreshStartAuditUI(evt){if(this._isLHAttached){return;}
this._unauditableExplanation=evt.data.helpText;this._startView.setUnauditableExplanation(evt.data.helpText);this._startView.setStartButtonEnabled(!evt.data.helpText);}
_refreshStatusUI(evt){this._statusView.updateStatus(evt.data.message);}
_refreshToolbarUI(){this._clearButton.setEnabled(this._reportSelector.hasItems());}
_clearAll(){this._reportSelector.clearAll();this._renderStartView();this._refreshToolbarUI();}
_renderToolbar(){const auditsToolbarContainer=this.element.createChild('div','audits-toolbar-container');const toolbar=new UI.Toolbar('',auditsToolbarContainer);this._newButton=new UI.ToolbarButton(Common.UIString('Perform an audit\u2026'),'largeicon-add');toolbar.appendToolbarItem(this._newButton);this._newButton.addEventListener(UI.ToolbarButton.Events.Click,this._renderStartView.bind(this));toolbar.appendSeparator();this._reportSelector=new Audits.ReportSelector(()=>this._renderStartView());toolbar.appendToolbarItem(this._reportSelector.comboBox());this._clearButton=new UI.ToolbarButton(Common.UIString('Clear all'),'largeicon-clear');toolbar.appendToolbarItem(this._clearButton);this._clearButton.addEventListener(UI.ToolbarButton.Events.Click,this._clearAll.bind(this));this._settingsPane=new UI.HBox();this._settingsPane.show(this.contentElement);this._settingsPane.element.classList.add('audits-settings-pane');this._settingsPane.element.appendChild(this._startView.settingsToolbar().element);this._showSettingsPaneSetting=Common.settings.createSetting('auditsShowSettingsToolbar',false);this._rightToolbar=new UI.Toolbar('',auditsToolbarContainer);this._rightToolbar.appendSeparator();this._rightToolbar.appendToolbarItem(new UI.ToolbarSettingToggle(this._showSettingsPaneSetting,'largeicon-settings-gear',ls`Audits settings`));this._showSettingsPaneSetting.addChangeListener(this._updateSettingsPaneVisibility.bind(this));this._updateSettingsPaneVisibility();this._refreshToolbarUI();}
_updateSettingsPaneVisibility(){this._settingsPane.element.classList.toggle('hidden',!this._showSettingsPaneSetting.get());}
_toggleSettingsDisplay(show){this._rightToolbar.element.classList.toggle('hidden',!show);this._settingsPane.element.classList.toggle('hidden',!show);this._updateSettingsPaneVisibility();}
_renderStartView(){this._auditResultsElement.removeChildren();this._statusView.hide();this._reportSelector.selectNewAudit();this.contentElement.classList.toggle('in-progress',false);this._startView.show(this.contentElement);this._toggleSettingsDisplay(true);this._startView.setUnauditableExplanation(this._unauditableExplanation);this._startView.setStartButtonEnabled(!this._unauditableExplanation);if(!this._unauditableExplanation){this._startView.focusStartButton();}
this._newButton.setEnabled(false);this._refreshToolbarUI();this.setDefaultFocusedChild(this._startView);}
_renderStatusView(inspectedURL){this.contentElement.classList.toggle('in-progress',true);this._statusView.setInspectedURL(inspectedURL);this._statusView.show(this.contentElement);}
_beforePrint(){this._statusView.show(this.contentElement);this._statusView.toggleCancelButton(false);this._statusView.renderText(ls`Printing`,ls`The print popup window is open. Please close it to continue.`);}
_afterPrint(){this._statusView.hide();this._statusView.toggleCancelButton(true);}
_renderReport(lighthouseResult,artifacts){this._toggleSettingsDisplay(false);this.contentElement.classList.toggle('in-progress',false);this._startView.hideWidget();this._statusView.hide();this._auditResultsElement.removeChildren();this._newButton.setEnabled(true);this._refreshToolbarUI();const cachedRenderedReport=this._cachedRenderedReports.get(lighthouseResult);if(cachedRenderedReport){this._auditResultsElement.appendChild(cachedRenderedReport);return;}
const reportContainer=this._auditResultsElement.createChild('div','lh-vars lh-root lh-devtools');const dom=new DOM((this._auditResultsElement.ownerDocument));const renderer=new Audits.ReportRenderer(dom);const templatesHTML=Root.Runtime.cachedResources['audits/lighthouse/templates.html'];const templatesDOM=new DOMParser().parseFromString(templatesHTML,'text/html');if(!templatesDOM){return;}
renderer.setTemplateContext(templatesDOM);const el=renderer.renderReport(lighthouseResult,reportContainer);Audits.ReportRenderer.addViewTraceButton(el,artifacts);this._waitForMainTargetLoad().then(()=>{Audits.ReportRenderer.linkifyNodeDetails(el);Audits.ReportRenderer.linkifySourceLocationDetails(el);});Audits.ReportRenderer.handleDarkMode(el);const features=new Audits.ReportUIFeatures(dom);features.setBeforePrint(this._beforePrint.bind(this));features.setAfterPrint(this._afterPrint.bind(this));features.setTemplateContext(templatesDOM);features.initFeatures(lighthouseResult);this._cachedRenderedReports.set(lighthouseResult,reportContainer);}
_waitForMainTargetLoad(){const mainTarget=SDK.targetManager.mainTarget();const resourceTreeModel=mainTarget.model(SDK.ResourceTreeModel);return resourceTreeModel.once(SDK.ResourceTreeModel.Events.Load);}
_buildReportUI(lighthouseResult,artifacts){if(lighthouseResult===null){return;}
const optionElement=new Audits.ReportSelector.Item(lighthouseResult,()=>this._renderReport(lighthouseResult,artifacts),this._renderStartView.bind(this));this._reportSelector.prepend(optionElement);this._refreshToolbarUI();this._renderReport(lighthouseResult);}
_handleDrop(dataTransfer){const items=dataTransfer.items;if(!items.length){return;}
const item=items[0];if(item.kind==='file'){const entry=items[0].webkitGetAsEntry();if(!entry.isFile){return;}
entry.file(file=>{const reader=new FileReader();reader.onload=()=>this._loadedFromFile((reader.result));reader.readAsText(file);});}}
_loadedFromFile(report){const data=JSON.parse(report);if(!data['lighthouseVersion']){return;}
this._buildReportUI((data));}
async _startAudit(){Host.userMetrics.actionTaken(Host.UserMetrics.Action.AuditsStarted);try{const inspectedURL=await this._controller.getInspectedURL({force:true});const categoryIDs=this._controller.getCategoryIDs();const flags=this._controller.getFlags();await this._setupEmulationAndProtocolConnection();this._renderStatusView(inspectedURL);const lighthouseResponse=await this._protocolService.startLighthouse(inspectedURL,categoryIDs,flags);if(lighthouseResponse&&lighthouseResponse.fatal){const error=new Error(lighthouseResponse.message);error.stack=lighthouseResponse.stack;throw error;}
if(!lighthouseResponse){throw new Error('Auditing failed to produce a result');}
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AuditsFinished);await this._resetEmulationAndProtocolConnection();this._buildReportUI(lighthouseResponse.lhr,lighthouseResponse.artifacts);}catch(err){await this._resetEmulationAndProtocolConnection();if(err instanceof Error){this._statusView.renderBugReport(err);}}}
async _cancelAudit(){this._statusView.updateStatus(ls`Cancelling`);await this._resetEmulationAndProtocolConnection();this._renderStartView();}
async _setupEmulationAndProtocolConnection(){const flags=this._controller.getFlags();const emulationModel=self.singleton(Emulation.DeviceModeModel);this._stateBefore={emulation:{enabled:emulationModel.enabledSetting().get(),outlineEnabled:emulationModel.deviceOutlineSetting().get(),toolbarControlsEnabled:emulationModel.toolbarControlsEnabledSetting().get()},network:{conditions:SDK.multitargetNetworkManager.networkConditions()}};emulationModel.toolbarControlsEnabledSetting().set(false);if(flags.emulatedFormFactor==='desktop'){emulationModel.enabledSetting().set(false);emulationModel.emulate(Emulation.DeviceModeModel.Type.None,null,null);}else if(flags.emulatedFormFactor==='mobile'){emulationModel.enabledSetting().set(true);emulationModel.deviceOutlineSetting().set(true);for(const device of Emulation.EmulatedDevicesList.instance().standard()){if(device.title==='Nexus 5X'){emulationModel.emulate(Emulation.DeviceModeModel.Type.Device,device,device.modes[0],1);}}}
await this._protocolService.attach();this._isLHAttached=true;}
async _resetEmulationAndProtocolConnection(){if(!this._isLHAttached){return;}
this._isLHAttached=false;await this._protocolService.detach();if(this._stateBefore){const emulationModel=self.singleton(Emulation.DeviceModeModel);emulationModel.enabledSetting().set(this._stateBefore.emulation.enabled);emulationModel.deviceOutlineSetting().set(this._stateBefore.emulation.outlineEnabled);emulationModel.toolbarControlsEnabledSetting().set(this._stateBefore.emulation.toolbarControlsEnabled);SDK.multitargetNetworkManager.setNetworkConditions(this._stateBefore.network.conditions);delete this._stateBefore;}
Emulation.InspectedPagePlaceholder.instance().update(true);const resourceTreeModel=SDK.targetManager.mainTarget().model(SDK.ResourceTreeModel);const inspectedURL=await this._controller.getInspectedURL();await resourceTreeModel.navigate(inspectedURL);}}
self.Audits=self.Audits||{};Audits=Audits||{};Audits.AuditsPanel=AuditsPanel;class AuditController extends Common.Object{constructor(protocolService){super();protocolService.registerStatusCallback(message=>this.dispatchEventToListeners(Audits.Events.AuditProgressChanged,{message}));for(const preset of Audits.Presets){preset.setting.addChangeListener(this.recomputePageAuditability.bind(this));}
SDK.targetManager.observeModels(SDK.ServiceWorkerManager,this);SDK.targetManager.addEventListener(SDK.TargetManager.Events.InspectedURLChanged,this.recomputePageAuditability,this);}
modelAdded(serviceWorkerManager){if(this._manager){return;}
this._manager=serviceWorkerManager;this._serviceWorkerListeners=[this._manager.addEventListener(SDK.ServiceWorkerManager.Events.RegistrationUpdated,this.recomputePageAuditability,this),this._manager.addEventListener(SDK.ServiceWorkerManager.Events.RegistrationDeleted,this.recomputePageAuditability,this),];this.recomputePageAuditability();}
modelRemoved(serviceWorkerManager){if(this._manager!==serviceWorkerManager){return;}
Common.EventTarget.removeEventListeners(this._serviceWorkerListeners);this._manager=null;this.recomputePageAuditability();}
_hasActiveServiceWorker(){if(!this._manager){return false;}
const mainTarget=this._manager.target();if(!mainTarget){return false;}
const inspectedURL=mainTarget.inspectedURL().asParsedURL();const inspectedOrigin=inspectedURL&&inspectedURL.securityOrigin();for(const registration of this._manager.registrations().values()){if(registration.securityOrigin!==inspectedOrigin){continue;}
for(const version of registration.versions.values()){if(version.controlledClients.length>1){return true;}}}
return false;}
_hasAtLeastOneCategory(){return Audits.Presets.some(preset=>preset.setting.get());}
_unauditablePageMessage(){if(!this._manager){return null;}
const mainTarget=this._manager.target();const inspectedURL=mainTarget&&mainTarget.inspectedURL();if(inspectedURL&&!/^(http|chrome-extension)/.test(inspectedURL)){return Common.UIString('Can only audit HTTP/HTTPS pages and Chrome extensions. Navigate to a different page to start an audit.');}
return null;}
async _evaluateInspectedURL(){const mainTarget=this._manager.target();const runtimeModel=mainTarget.model(SDK.RuntimeModel);const executionContext=runtimeModel&&runtimeModel.defaultExecutionContext();let inspectedURL=mainTarget.inspectedURL();if(!executionContext){return inspectedURL;}
try{const result=await executionContext.evaluate({expression:'window.location.href',objectGroup:'audits',includeCommandLineAPI:false,silent:false,returnByValue:true,generatePreview:false},false,false);if(!result.exceptionDetails&&result.object){inspectedURL=result.object.value;result.object.release();}}catch(err){console.error(err);}
return inspectedURL;}
getFlags(){const flags={internalDisableDeviceScreenEmulation:true};for(const runtimeSetting of Audits.RuntimeSettings){runtimeSetting.setFlags(flags,runtimeSetting.setting.get());}
return flags;}
getCategoryIDs(){const categoryIDs=[];for(const preset of Audits.Presets){if(preset.setting.get()){categoryIDs.push(preset.configID);}}
return categoryIDs;}
async getInspectedURL(options){if(options&&options.force||!this._inspectedURL){this._inspectedURL=await this._evaluateInspectedURL();}
return this._inspectedURL;}
recomputePageAuditability(){const hasActiveServiceWorker=this._hasActiveServiceWorker();const hasAtLeastOneCategory=this._hasAtLeastOneCategory();const unauditablePageMessage=this._unauditablePageMessage();let helpText='';if(hasActiveServiceWorker){helpText=Common.UIString('Multiple tabs are being controlled by the same service worker. Close your other tabs on the same origin to audit this page.');}else if(!hasAtLeastOneCategory){helpText=Common.UIString('At least one category must be selected.');}else if(unauditablePageMessage){helpText=unauditablePageMessage;}
this.dispatchEventToListeners(Audits.Events.PageAuditabilityChanged,{helpText});}}
export const Presets=[{setting:Common.settings.createSetting('audits.cat_perf',true),configID:'performance',title:ls`Performance`,description:ls`How long does this app take to show content and become usable`},{setting:Common.settings.createSetting('audits.cat_pwa',true),configID:'pwa',title:ls`Progressive Web App`,description:ls`Does this page meet the standard of a Progressive Web App`},{setting:Common.settings.createSetting('audits.cat_best_practices',true),configID:'best-practices',title:ls`Best practices`,description:ls`Does this page follow best practices for modern web development`},{setting:Common.settings.createSetting('audits.cat_a11y',true),configID:'accessibility',title:ls`Accessibility`,description:ls`Is this page usable by people with disabilities or impairments`},{setting:Common.settings.createSetting('audits.cat_seo',true),configID:'seo',title:ls`SEO`,description:ls`Is this page optimized for search engine results ranking`},{setting:Common.settings.createSetting('audits.cat_pubads',false),plugin:true,configID:'lighthouse-plugin-publisher-ads',title:ls`Publisher Ads`,description:ls`Is this page optimized for ad speed and quality`},];export const RuntimeSettings=[{setting:Common.settings.createSetting('audits.device_type','mobile'),description:ls`Apply mobile emulation during auditing`,setFlags:(flags,value)=>{flags.emulatedFormFactor=value;},options:[{label:ls`Mobile`,value:'mobile'},{label:ls`Desktop`,value:'desktop'},],},{setting:Common.settings.createSetting('audits.throttling',true),title:ls`Simulated throttling`,learnMore:'https://github.com/GoogleChrome/lighthouse/blob/master/docs/throttling.md#devtools-audits-panel-throttling',setFlags:(flags,value)=>{flags.throttlingMethod=value?'simulate':'devtools';},},{setting:Common.settings.createSetting('audits.clear_storage',true),title:ls`Clear storage`,description:ls`Reset storage (localStorage, IndexedDB, etc) before auditing. (Good for performance & PWA testing)`,setFlags:(flags,value)=>{flags.disableStorageReset=!value;},},];export const Events={PageAuditabilityChanged:Symbol('PageAuditabilityChanged'),AuditProgressChanged:Symbol('AuditProgressChanged'),RequestAuditStart:Symbol('RequestAuditStart'),RequestAuditCancel:Symbol('RequestAuditCancel'),};self.Audits=self.Audits||{};Audits=Audits||{};Audits.AuditController=AuditController;Audits.Preset;Audits.Events=Events;Audits.RuntimeSetting;Audits.RuntimeSettings=RuntimeSettings;Audits.Presets=Presets;import'./ConsoleContextSelector.js';import'./ConsoleFilter.js';import'./ConsolePinPane.js';import'./ConsoleSidebar.js';import'./ConsoleViewport.js';import'./ConsoleViewMessage.js';import'./ConsolePrompt.js';import'./ConsoleView.js';import'./ConsolePanel.js';import*as ConsoleContextSelector from'./ConsoleContextSelector.js';import*as ConsoleFilter from'./ConsoleFilter.js';import*as ConsolePanel from'./ConsolePanel.js';import*as ConsolePinPane from'./ConsolePinPane.js';import*as ConsolePrompt from'./ConsolePrompt.js';import*as ConsoleSidebar from'./ConsoleSidebar.js';import*as ConsoleView from'./ConsoleView.js';import*as ConsoleViewMessage from'./ConsoleViewMessage.js';import*as ConsoleViewport from'./ConsoleViewport.js';export{ConsoleContextSelector,ConsoleFilter,ConsolePanel,ConsolePinPane,ConsolePrompt,ConsoleSidebar,ConsoleView,ConsoleViewMessage,ConsoleViewport,};export default class ConsoleContextSelector{constructor(){this._items=new UI.ListModel();this._dropDown=new UI.SoftDropDown(this._items,this);this._dropDown.setRowHeight(36);this._toolbarItem=new UI.ToolbarItem(this._dropDown.element);this._toolbarItem.setEnabled(false);this._toolbarItem.setTitle(ls`JavaScript context: Not selected`);this._items.addEventListener(UI.ListModel.Events.ItemsReplaced,()=>this._toolbarItem.setEnabled(!!this._items.length));this._toolbarItem.element.classList.add('toolbar-has-dropdown');SDK.targetManager.addModelListener(SDK.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextCreated,this._onExecutionContextCreated,this);SDK.targetManager.addModelListener(SDK.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextChanged,this._onExecutionContextChanged,this);SDK.targetManager.addModelListener(SDK.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextDestroyed,this._onExecutionContextDestroyed,this);SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.FrameNavigated,this._frameNavigated,this);UI.context.addFlavorChangeListener(SDK.ExecutionContext,this._executionContextChangedExternally,this);UI.context.addFlavorChangeListener(SDK.DebuggerModel.CallFrame,this._callFrameSelectedInUI,this);SDK.targetManager.observeModels(SDK.RuntimeModel,this);SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.CallFrameSelected,this._callFrameSelectedInModel,this);}
toolbarItem(){return this._toolbarItem;}
highlightedItemChanged(from,to,fromElement,toElement){SDK.OverlayModel.hideDOMNodeHighlight();if(to&&to.frameId){const overlayModel=to.target().model(SDK.OverlayModel);if(overlayModel){overlayModel.highlightFrame(to.frameId);}}
if(fromElement){fromElement.classList.remove('highlighted');}
if(toElement){toElement.classList.add('highlighted');}}
titleFor(executionContext){const target=executionContext.target();let label=executionContext.label()?target.decorateLabel(executionContext.label()):'';if(executionContext.frameId){const resourceTreeModel=target.model(SDK.ResourceTreeModel);const frame=resourceTreeModel&&resourceTreeModel.frameForId(executionContext.frameId);if(frame){label=label||frame.displayName();}}
label=label||executionContext.origin;return label;}
_depthFor(executionContext){let target=executionContext.target();let depth=0;if(!executionContext.isDefault){depth++;}
if(executionContext.frameId){const resourceTreeModel=target.model(SDK.ResourceTreeModel);let frame=resourceTreeModel&&resourceTreeModel.frameForId(executionContext.frameId);while(frame){frame=frame.parentFrame||frame.crossTargetParentFrame();if(frame){depth++;target=frame.resourceTreeModel().target();}}}
let targetDepth=0;while(target.parentTarget()&&target.type()!==SDK.Target.Type.ServiceWorker){targetDepth++;target=target.parentTarget();}
depth+=targetDepth;return depth;}
_executionContextCreated(executionContext){this._items.insertWithComparator(executionContext,executionContext.runtimeModel.executionContextComparator());if(executionContext===UI.context.flavor(SDK.ExecutionContext)){this._dropDown.selectItem(executionContext);}}
_onExecutionContextCreated(event){const executionContext=(event.data);this._executionContextCreated(executionContext);}
_onExecutionContextChanged(event){const executionContext=(event.data);if(this._items.indexOf(executionContext)===-1){return;}
this._executionContextDestroyed(executionContext);this._executionContextCreated(executionContext);}
_executionContextDestroyed(executionContext){const index=this._items.indexOf(executionContext);if(index===-1){return;}
this._items.remove(index);}
_onExecutionContextDestroyed(event){const executionContext=(event.data);this._executionContextDestroyed(executionContext);}
_executionContextChangedExternally(event){const executionContext=(event.data);this._dropDown.selectItem(executionContext);}
_isTopContext(executionContext){if(!executionContext||!executionContext.isDefault){return false;}
const resourceTreeModel=executionContext.target().model(SDK.ResourceTreeModel);const frame=executionContext.frameId&&resourceTreeModel&&resourceTreeModel.frameForId(executionContext.frameId);if(!frame){return false;}
return frame.isTopFrame();}
_hasTopContext(){return this._items.some(executionContext=>this._isTopContext(executionContext));}
modelAdded(runtimeModel){runtimeModel.executionContexts().forEach(this._executionContextCreated,this);}
modelRemoved(runtimeModel){for(let i=this._items.length-1;i>=0;i--){if(this._items.at(i).runtimeModel===runtimeModel){this._executionContextDestroyed(this._items.at(i));}}}
createElementForItem(item){const element=createElementWithClass('div');const shadowRoot=UI.createShadowRootWithCoreStyles(element,'console/consoleContextSelector.css');const title=shadowRoot.createChild('div','title');title.createTextChild(this.titleFor(item).trimEndWithMaxLength(100));const subTitle=shadowRoot.createChild('div','subtitle');subTitle.createTextChild(this._subtitleFor(item));element.style.paddingLeft=(8+this._depthFor(item)*15)+'px';return element;}
_subtitleFor(executionContext){const target=executionContext.target();let frame;if(executionContext.frameId){const resourceTreeModel=target.model(SDK.ResourceTreeModel);frame=resourceTreeModel&&resourceTreeModel.frameForId(executionContext.frameId);}
if(executionContext.origin.startsWith('chrome-extension://')){return Common.UIString('Extension');}
if(!frame||!frame.parentFrame||frame.parentFrame.securityOrigin!==executionContext.origin){const url=executionContext.origin.asParsedURL();if(url){return url.domain();}}
if(frame){const callFrame=frame.findCreationCallFrame(callFrame=>!!callFrame.url);if(callFrame){return new Common.ParsedURL(callFrame.url).domain();}
return Common.UIString('IFrame');}
return'';}
isItemSelectable(item){const callFrame=item.debuggerModel.selectedCallFrame();const callFrameContext=callFrame&&callFrame.script.executionContext();return!callFrameContext||item===callFrameContext;}
itemSelected(item){this._toolbarItem.element.classList.toggle('warning',!this._isTopContext(item)&&this._hasTopContext());const title=item?ls`JavaScript context: ${this.titleFor(item)}`:ls`JavaScript context: Not selected`;this._toolbarItem.setTitle(title);UI.context.setFlavor(SDK.ExecutionContext,item);}
_callFrameSelectedInUI(){const callFrame=UI.context.flavor(SDK.DebuggerModel.CallFrame);const callFrameContext=callFrame&&callFrame.script.executionContext();if(callFrameContext){UI.context.setFlavor(SDK.ExecutionContext,callFrameContext);}}
_callFrameSelectedInModel(event){const debuggerModel=(event.data);for(const executionContext of this._items){if(executionContext.debuggerModel===debuggerModel){this._dropDown.refreshItem(executionContext);}}}
_frameNavigated(event){const frame=(event.data);const runtimeModel=frame.resourceTreeModel().target().model(SDK.RuntimeModel);if(!runtimeModel){return;}
for(const executionContext of runtimeModel.executionContexts()){if(frame.id===executionContext.frameId){this._dropDown.refreshItem(executionContext);}}}}
self.Console=self.Console||{};Console=Console||{};Console.ConsoleContextSelector=ConsoleContextSelector;export default class ConsoleFilter{constructor(name,parsedFilters,executionContext,levelsMask){this.name=name;this.parsedFilters=parsedFilters;this.executionContext=executionContext;this.levelsMask=levelsMask||Console.ConsoleFilter.defaultLevelsFilterValue();}
static allLevelsFilterValue(){const result={};for(const name of Object.values(SDK.ConsoleMessage.MessageLevel)){result[name]=true;}
return result;}
static defaultLevelsFilterValue(){const result=Console.ConsoleFilter.allLevelsFilterValue();result[SDK.ConsoleMessage.MessageLevel.Verbose]=false;return result;}
static singleLevelMask(level){const result={};result[level]=true;return result;}
clone(){const parsedFilters=this.parsedFilters.map(TextUtils.FilterParser.cloneFilter);const levelsMask=Object.assign({},this.levelsMask);return new Console.ConsoleFilter(this.name,parsedFilters,this.executionContext,levelsMask);}
shouldBeVisible(viewMessage){const message=viewMessage.consoleMessage();if(this.executionContext&&(this.executionContext.runtimeModel!==message.runtimeModel()||this.executionContext.id!==message.executionContextId)){return false;}
if(message.type===SDK.ConsoleMessage.MessageType.Command||message.type===SDK.ConsoleMessage.MessageType.Result||message.isGroupMessage()){return true;}
if(message.level&&!this.levelsMask[(message.level)]){return false;}
for(const filter of this.parsedFilters){if(!filter.key){if(filter.regex&&viewMessage.matchesFilterRegex(filter.regex)===filter.negative){return false;}
if(filter.text&&viewMessage.matchesFilterText(filter.text)===filter.negative){return false;}}else{switch(filter.key){case FilterType.Context:if(!passesFilter(filter,message.context,false)){return false;}
break;case FilterType.Source:const sourceNameForMessage=message.source?SDK.ConsoleMessage.MessageSourceDisplayName.get((message.source)):message.source;if(!passesFilter(filter,sourceNameForMessage,true)){return false;}
break;case FilterType.Url:if(!passesFilter(filter,message.url,false)){return false;}
break;}}}
return true;function passesFilter(filter,value,exactMatch){if(!filter.text){return!!value===filter.negative;}
if(!value){return!filter.text===!filter.negative;}
const filterText=(filter.text).toLowerCase();const lowerCaseValue=value.toLowerCase();if(exactMatch&&(lowerCaseValue===filterText)===filter.negative){return false;}
if(!exactMatch&&lowerCaseValue.includes(filterText)===filter.negative){return false;}
return true;}}}
export const FilterType={Context:'context',Source:'source',Url:'url'};self.Console=self.Console||{};Console=Console||{};Console.ConsoleFilter=ConsoleFilter;Console.ConsoleFilter.FilterType=FilterType;export default class ConsoleSidebar extends UI.VBox{constructor(){super(true);this.setMinimumSize(125,0);this._tree=new UI.TreeOutlineInShadow();this._tree.registerRequiredCSS('console/consoleSidebar.css');this._tree.addEventListener(UI.TreeOutline.Events.ElementSelected,this._selectionChanged.bind(this));this.contentElement.appendChild(this._tree.element);this._selectedTreeElement=null;this._treeElements=[];const selectedFilterSetting=Common.settings.createSetting('console.sidebarSelectedFilter',null);const Levels=SDK.ConsoleMessage.MessageLevel;const consoleAPIParsedFilters=[{key:Console.ConsoleFilter.FilterType.Source,text:SDK.ConsoleMessage.MessageSource.ConsoleAPI,negative:false}];this._appendGroup(_groupName.All,[],Console.ConsoleFilter.allLevelsFilterValue(),UI.Icon.create('mediumicon-list'),selectedFilterSetting);this._appendGroup(_groupName.ConsoleAPI,consoleAPIParsedFilters,Console.ConsoleFilter.allLevelsFilterValue(),UI.Icon.create('mediumicon-account-circle'),selectedFilterSetting);this._appendGroup(_groupName.Error,[],Console.ConsoleFilter.singleLevelMask(Levels.Error),UI.Icon.create('mediumicon-error-circle'),selectedFilterSetting);this._appendGroup(_groupName.Warning,[],Console.ConsoleFilter.singleLevelMask(Levels.Warning),UI.Icon.create('mediumicon-warning-triangle'),selectedFilterSetting);this._appendGroup(_groupName.Info,[],Console.ConsoleFilter.singleLevelMask(Levels.Info),UI.Icon.create('mediumicon-info-circle'),selectedFilterSetting);this._appendGroup(_groupName.Verbose,[],Console.ConsoleFilter.singleLevelMask(Levels.Verbose),UI.Icon.create('mediumicon-bug'),selectedFilterSetting);const selectedTreeElementName=selectedFilterSetting.get();const defaultTreeElement=this._treeElements.find(x=>x.name()===selectedTreeElementName)||this._treeElements[0];defaultTreeElement.select();}
_appendGroup(name,parsedFilters,levelsMask,icon,selectedFilterSetting){const filter=new Console.ConsoleFilter(name,parsedFilters,null,levelsMask);const treeElement=new FilterTreeElement(filter,icon,selectedFilterSetting);this._tree.appendChild(treeElement);this._treeElements.push(treeElement);}
clear(){for(const treeElement of this._treeElements){treeElement.clear();}}
onMessageAdded(viewMessage){for(const treeElement of this._treeElements){treeElement.onMessageAdded(viewMessage);}}
shouldBeVisible(viewMessage){if(!this._selectedTreeElement){return true;}
return this._selectedTreeElement._filter.shouldBeVisible(viewMessage);}
_selectionChanged(event){this._selectedTreeElement=(event.data);this.dispatchEventToListeners(Events.FilterSelected);}}
export const Events={FilterSelected:Symbol('FilterSelected')};export class URLGroupTreeElement extends UI.TreeElement{constructor(filter){super(filter.name);this._filter=filter;this._countElement=this.listItemElement.createChild('span','count');const leadingIcons=[UI.Icon.create('largeicon-navigator-file')];this.setLeadingIcons(leadingIcons);this._messageCount=0;}
incrementAndUpdateCounter(){this._messageCount++;this._countElement.textContent=this._messageCount;}}
export class FilterTreeElement extends UI.TreeElement{constructor(filter,icon,selectedFilterSetting){super(filter.name);this._filter=filter;this._selectedFilterSetting=selectedFilterSetting;this._urlTreeElements=new Map();this.setLeadingIcons([icon]);this._messageCount=0;this._updateCounter();}
clear(){this._urlTreeElements.clear();this.removeChildren();this._messageCount=0;this._updateCounter();}
name(){return this._filter.name;}
onselect(selectedByUser){this._selectedFilterSetting.set(this._filter.name);return super.onselect(selectedByUser);}
_updateCounter(){if(!this._messageCount){this.title=_groupNoMessageTitleMap.get(this._filter.name);}else if(this._messageCount===1){this.title=_groupSingularTitleMap.get(this._filter.name);}else{this.title=String.sprintf(_groupPluralTitleMap.get(this._filter.name),this._messageCount);}
this.setExpandable(!!this.childCount());}
onMessageAdded(viewMessage){const message=viewMessage.consoleMessage();const shouldIncrementCounter=message.type!==SDK.ConsoleMessage.MessageType.Command&&message.type!==SDK.ConsoleMessage.MessageType.Result&&!message.isGroupMessage();if(!this._filter.shouldBeVisible(viewMessage)||!shouldIncrementCounter){return;}
const child=this._childElement(message.url);child.incrementAndUpdateCounter();this._messageCount++;this._updateCounter();}
_childElement(url){const urlValue=url||null;let child=this._urlTreeElements.get(urlValue);if(child){return child;}
const filter=this._filter.clone();const parsedURL=urlValue?urlValue.asParsedURL():null;if(urlValue){filter.name=parsedURL?parsedURL.displayName:urlValue;}else{filter.name=Common.UIString('<other>');}
filter.parsedFilters.push({key:Console.ConsoleFilter.FilterType.Url,text:urlValue,negative:false});child=new URLGroupTreeElement(filter);if(urlValue){child.tooltip=urlValue;}
this._urlTreeElements.set(urlValue,child);this.appendChild(child);return child;}}
const _groupName={ConsoleAPI:'user message',All:'message',Error:'error',Warning:'warning',Info:'info',Verbose:'verbose'};const _groupSingularTitleMap=new Map([[_groupName.ConsoleAPI,ls`1 user message`],[_groupName.All,ls`1 message`],[_groupName.Error,ls`1 error`],[_groupName.Warning,ls`1 warning`],[_groupName.Info,ls`1 info`],[_groupName.Verbose,ls`1 verbose`]]);const _groupPluralTitleMap=new Map([[_groupName.ConsoleAPI,ls`%d user messages`],[_groupName.All,ls`%d messages`],[_groupName.Error,ls`%d errors`],[_groupName.Warning,ls`%d warnings`],[_groupName.Info,ls`%d info`],[_groupName.Verbose,ls`%d verbose`]]);const _groupNoMessageTitleMap=new Map([[_groupName.ConsoleAPI,ls`No user messages`],[_groupName.All,ls`No messages`],[_groupName.Error,ls`No errors`],[_groupName.Warning,ls`No warnings`],[_groupName.Info,ls`No info`],[_groupName.Verbose,ls`No verbose`]]);self.Console=self.Console||{};Console=Console||{};Console.ConsoleSidebar=ConsoleSidebar;Console.ConsoleSidebar.Events=Events;Console.ConsoleSidebar.URLGroupTreeElement=URLGroupTreeElement;Console.ConsoleSidebar.FilterTreeElement=FilterTreeElement;export default class ConsolePanel extends UI.Panel{constructor(){super('console');this._view=Console.ConsoleView.instance();}
static instance(){return(self.runtime.sharedInstance(Console.ConsolePanel));}
static _updateContextFlavor(){const consoleView=Console.ConsolePanel.instance()._view;UI.context.setFlavor(Console.ConsoleView,consoleView.isShowing()?consoleView:null);}
wasShown(){super.wasShown();const wrapper=Console.ConsolePanel.WrapperView._instance;if(wrapper&&wrapper.isShowing()){UI.inspectorView.setDrawerMinimized(true);}
this._view.show(this.element);Console.ConsolePanel._updateContextFlavor();}
willHide(){super.willHide();UI.inspectorView.setDrawerMinimized(false);if(Console.ConsolePanel.WrapperView._instance){Console.ConsolePanel.WrapperView._instance._showViewInWrapper();}
Console.ConsolePanel._updateContextFlavor();}
searchableView(){return Console.ConsoleView.instance().searchableView();}}
export class WrapperView extends UI.VBox{constructor(){super();this.element.classList.add('console-view-wrapper');Console.ConsolePanel.WrapperView._instance=this;this._view=Console.ConsoleView.instance();}
wasShown(){if(!Console.ConsolePanel.instance().isShowing()){this._showViewInWrapper();}else{UI.inspectorView.setDrawerMinimized(true);}
Console.ConsolePanel._updateContextFlavor();}
willHide(){UI.inspectorView.setDrawerMinimized(false);Console.ConsolePanel._updateContextFlavor();}
_showViewInWrapper(){this._view.show(this.element);}}
export class ConsoleRevealer{reveal(object){const consoleView=Console.ConsoleView.instance();if(consoleView.isShowing()){consoleView.focus();return Promise.resolve();}
UI.viewManager.showView('console-view');return Promise.resolve();}}
self.Console=self.Console||{};Console=Console||{};Console.ConsolePanel=ConsolePanel;Console.ConsolePanel.WrapperView=WrapperView;Console.ConsolePanel.ConsoleRevealer=ConsoleRevealer;const _PinSymbol=Symbol('pinSymbol');export default class ConsolePinPane extends UI.ThrottledWidget{constructor(liveExpressionButton){super(true,250);this._liveExpressionButton=liveExpressionButton;this.registerRequiredCSS('console/consolePinPane.css');this.registerRequiredCSS('object_ui/objectValue.css');this.contentElement.classList.add('console-pins','monospace');this.contentElement.addEventListener('contextmenu',this._contextMenuEventFired.bind(this),false);this._pins=new Set();this._pinsSetting=Common.settings.createLocalSetting('consolePins',[]);for(const expression of this._pinsSetting.get()){this.addPin(expression);}}
willHide(){for(const pin of this._pins){pin.setHovered(false);}}
_savePins(){const toSave=Array.from(this._pins).map(pin=>pin.expression());this._pinsSetting.set(toSave);}
_contextMenuEventFired(event){const contextMenu=new UI.ContextMenu(event);const target=event.deepElementFromPoint();if(target){const targetPinElement=target.enclosingNodeOrSelfWithClass('console-pin');if(targetPinElement){const targetPin=targetPinElement[_PinSymbol];contextMenu.editSection().appendItem(ls`Edit expression`,targetPin.focus.bind(targetPin));contextMenu.editSection().appendItem(ls`Remove expression`,this._removePin.bind(this,targetPin));targetPin.appendToContextMenu(contextMenu);}}
contextMenu.editSection().appendItem(ls`Remove all expressions`,this._removeAllPins.bind(this));contextMenu.show();}
_removeAllPins(){for(const pin of this._pins){this._removePin(pin);}}
_removePin(pin){pin.element().remove();this._pins.delete(pin);this._savePins();this._liveExpressionButton.element.focus();}
addPin(expression,userGesture){const pin=new ConsolePin(expression,this);this.contentElement.appendChild(pin.element());this._pins.add(pin);this._savePins();if(userGesture){pin.focus();}
this.update();}
doUpdate(){if(!this._pins.size||!this.isShowing()){return Promise.resolve();}
if(this.isShowing()){this.update();}
const updatePromises=Array.from(this._pins,pin=>pin.updatePreview());return Promise.all(updatePromises).then(this._updatedForTest.bind(this));}
_updatedForTest(){}}
export class ConsolePin extends Common.Object{constructor(expression,pinPane){super();const deletePinIcon=UI.Icon.create('smallicon-cross','console-delete-pin');self.onInvokeElement(deletePinIcon,event=>{pinPane._removePin(this);event.consume(true);});deletePinIcon.tabIndex=0;UI.ARIAUtils.setAccessibleName(deletePinIcon,ls`Remove expression`);UI.ARIAUtils.markAsButton(deletePinIcon);const fragment=UI.Fragment.build`
    <div class='console-pin'>
      ${deletePinIcon}
      <div class='console-pin-name' $='name'></div>
      <div class='console-pin-preview' $='preview'>${ls`not available`}</div>
    </div>`;this._pinElement=fragment.element();this._pinPreview=fragment.$('preview');const nameElement=fragment.$('name');nameElement.title=expression;this._pinElement[_PinSymbol]=this;this._lastResult=null;this._lastExecutionContext=null;this._editor=null;this._committedExpression=expression;this._hovered=false;this._lastNode=null;this._pinPreview.addEventListener('mouseenter',this.setHovered.bind(this,true),false);this._pinPreview.addEventListener('mouseleave',this.setHovered.bind(this,false),false);this._pinPreview.addEventListener('click',event=>{if(this._lastNode){Common.Revealer.reveal(this._lastNode);event.consume();}},false);this._editorPromise=self.runtime.extension(UI.TextEditorFactory).instance().then(factory=>{this._editor=factory.createEditor({devtoolsAccessibleName:ls`Live expression editor`,lineNumbers:false,lineWrapping:true,mimeType:'javascript',autoHeight:true,placeholder:ls`Expression`});this._editor.configureAutocomplete(ObjectUI.JavaScriptAutocompleteConfig.createConfigForEditor(this._editor));this._editor.widget().show(nameElement);this._editor.widget().element.classList.add('console-pin-editor');this._editor.widget().element.tabIndex=-1;this._editor.setText(expression);this._editor.widget().element.addEventListener('keydown',event=>{if(event.key==='Tab'&&!this._editor.text()){event.consume();return;}
if(event.keyCode===UI.KeyboardShortcut.Keys.Esc.code){this._editor.setText(this._committedExpression);}},true);this._editor.widget().element.addEventListener('focusout',event=>{const text=this._editor.text();const trimmedText=text.trim();if(text.length!==trimmedText.length){this._editor.setText(trimmedText);}
this._committedExpression=trimmedText;pinPane._savePins();this._editor.setSelection(TextUtils.TextRange.createFromLocation(Infinity,Infinity));});});}
setHovered(hovered){if(this._hovered===hovered){return;}
this._hovered=hovered;if(!hovered&&this._lastNode){SDK.OverlayModel.hideDOMNodeHighlight();}}
expression(){return this._committedExpression;}
element(){return this._pinElement;}
async focus(){await this._editorPromise;this._editor.widget().focus();this._editor.setSelection(TextUtils.TextRange.createFromLocation(Infinity,Infinity));}
appendToContextMenu(contextMenu){if(this._lastResult&&this._lastResult.object){contextMenu.appendApplicableItems(this._lastResult.object);this._lastResult=null;}}
async updatePreview(){if(!this._editor){return;}
const text=this._editor.textWithCurrentSuggestion().trim();const isEditing=this._pinElement.hasFocus();const throwOnSideEffect=isEditing&&text!==this._committedExpression;const timeout=throwOnSideEffect?250:undefined;const executionContext=UI.context.flavor(SDK.ExecutionContext);const{preview,result}=await ObjectUI.JavaScriptREPL.evaluateAndBuildPreview(text,throwOnSideEffect,timeout,!isEditing,'console');if(this._lastResult&&this._lastExecutionContext){this._lastExecutionContext.runtimeModel.releaseEvaluationResult(this._lastResult);}
this._lastResult=result||null;this._lastExecutionContext=executionContext||null;const previewText=preview.deepTextContent();if(!previewText||previewText!==this._pinPreview.deepTextContent()){this._pinPreview.removeChildren();if(result&&SDK.RuntimeModel.isSideEffectFailure(result)){const sideEffectLabel=this._pinPreview.createChild('span','object-value-calculate-value-button');sideEffectLabel.textContent=`(...)`;sideEffectLabel.title=ls`Evaluate, allowing side effects`;}else if(previewText){this._pinPreview.appendChild(preview);}else if(!isEditing){this._pinPreview.createTextChild(ls`not available`);}
this._pinPreview.title=previewText;}
let node=null;if(result&&result.object&&result.object.type==='object'&&result.object.subtype==='node'){node=result.object;}
if(this._hovered){if(node){SDK.OverlayModel.highlightObjectAsDOMNode(node);}else if(this._lastNode){SDK.OverlayModel.hideDOMNodeHighlight();}}
this._lastNode=node||null;const isError=result&&result.exceptionDetails&&!SDK.RuntimeModel.isSideEffectFailure(result);this._pinElement.classList.toggle('error-level',!!isError);}}
self.Console=self.Console||{};Console=Console||{};Console.ConsolePinPane=ConsolePinPane;Console.ConsolePin=ConsolePin;export default class ConsolePrompt extends UI.Widget{constructor(){super();this.registerRequiredCSS('console/consolePrompt.css');this._addCompletionsFromHistory=true;this._history=new Console.ConsoleHistoryManager();this._initialText='';this._editor=null;this._eagerPreviewElement=createElementWithClass('div','console-eager-preview');this._textChangeThrottler=new Common.Throttler(150);this._formatter=new ObjectUI.RemoteObjectPreviewFormatter();this._requestPreviewBound=this._requestPreview.bind(this);this._innerPreviewElement=this._eagerPreviewElement.createChild('div','console-eager-inner-preview');this._eagerPreviewElement.appendChild(UI.Icon.create('smallicon-command-result','preview-result-icon'));const editorContainerElement=this.element.createChild('div','console-prompt-editor-container');this.element.appendChild(this._eagerPreviewElement);this._promptIcon=UI.Icon.create('smallicon-text-prompt','console-prompt-icon');this.element.appendChild(this._promptIcon);this._iconThrottler=new Common.Throttler(0);this._eagerEvalSetting=Common.settings.moduleSetting('consoleEagerEval');this._eagerEvalSetting.addChangeListener(this._eagerSettingChanged.bind(this));this._eagerPreviewElement.classList.toggle('hidden',!this._eagerEvalSetting.get());this.element.tabIndex=0;this._previewRequestForTest=null;this._defaultAutocompleteConfig=null;this._highlightingNode=false;self.runtime.extension(UI.TextEditorFactory).instance().then(gotFactory.bind(this));function gotFactory(factory){this._editor=factory.createEditor({devtoolsAccessibleName:ls`Console prompt`,lineNumbers:false,lineWrapping:true,mimeType:'javascript',autoHeight:true});this._defaultAutocompleteConfig=ObjectUI.JavaScriptAutocompleteConfig.createConfigForEditor(this._editor);this._editor.configureAutocomplete(Object.assign({},this._defaultAutocompleteConfig,{suggestionsCallback:this._wordsWithQuery.bind(this),anchorBehavior:UI.GlassPane.AnchorBehavior.PreferTop}));this._editor.widget().element.addEventListener('keydown',this._editorKeyDown.bind(this),true);this._editor.widget().show(editorContainerElement);this._editor.addEventListener(UI.TextEditor.Events.CursorChanged,this._updatePromptIcon,this);this._editor.addEventListener(UI.TextEditor.Events.TextChanged,this._onTextChanged,this);this._editor.addEventListener(UI.TextEditor.Events.SuggestionChanged,this._onTextChanged,this);this.setText(this._initialText);delete this._initialText;if(this.hasFocus()){this.focus();}
this.element.removeAttribute('tabindex');this._editor.widget().element.tabIndex=-1;this._editorSetForTest();Host.userMetrics.panelLoaded('console','DevTools.Launch.Console');}}
_eagerSettingChanged(){const enabled=this._eagerEvalSetting.get();this._eagerPreviewElement.classList.toggle('hidden',!enabled);if(enabled){this._requestPreview();}}
belowEditorElement(){return this._eagerPreviewElement;}
_onTextChanged(){if(this._eagerEvalSetting.get()){const asSoonAsPossible=!this._editor.textWithCurrentSuggestion();this._previewRequestForTest=this._textChangeThrottler.schedule(this._requestPreviewBound,asSoonAsPossible);}
this._updatePromptIcon();this.dispatchEventToListeners(Events.TextChanged);}
async _requestPreview(){const text=this._editor.textWithCurrentSuggestion().trim();const executionContext=UI.context.flavor(SDK.ExecutionContext);const{preview,result}=await ObjectUI.JavaScriptREPL.evaluateAndBuildPreview(text,true,500);this._innerPreviewElement.removeChildren();if(preview.deepTextContent()!==this._editor.textWithCurrentSuggestion().trim()){this._innerPreviewElement.appendChild(preview);}
if(result&&result.object&&result.object.subtype==='node'){this._highlightingNode=true;SDK.OverlayModel.highlightObjectAsDOMNode(result.object);}else if(this._highlightingNode){this._highlightingNode=false;SDK.OverlayModel.hideDOMNodeHighlight();}
if(result){executionContext.runtimeModel.releaseEvaluationResult(result);}}
willHide(){if(this._highlightingNode){this._highlightingNode=false;SDK.OverlayModel.hideDOMNodeHighlight();}}
history(){return this._history;}
clearAutocomplete(){if(this._editor){this._editor.clearAutocomplete();}}
_isCaretAtEndOfPrompt(){return!!this._editor&&this._editor.selection().collapseToEnd().equal(this._editor.fullRange().collapseToEnd());}
moveCaretToEndOfPrompt(){if(this._editor){this._editor.setSelection(TextUtils.TextRange.createFromLocation(Infinity,Infinity));}}
setText(text){if(this._editor){this._editor.setText(text);}else{this._initialText=text;}
this.dispatchEventToListeners(Events.TextChanged);}
text(){return this._editor?this._editor.text():this._initialText;}
setAddCompletionsFromHistory(value){this._addCompletionsFromHistory=value;}
_editorKeyDown(event){const keyboardEvent=(event);let newText;let isPrevious;const selection=this._editor.selection();const cursorY=this._editor.visualCoordinates(selection.endLine,selection.endColumn).y;switch(keyboardEvent.keyCode){case UI.KeyboardShortcut.Keys.Up.code:const startY=this._editor.visualCoordinates(0,0).y;if(keyboardEvent.shiftKey||!selection.isEmpty()||cursorY!==startY){break;}
newText=this._history.previous(this.text());isPrevious=true;break;case UI.KeyboardShortcut.Keys.Down.code:const fullRange=this._editor.fullRange();const endY=this._editor.visualCoordinates(fullRange.endLine,fullRange.endColumn).y;if(keyboardEvent.shiftKey||!selection.isEmpty()||cursorY!==endY){break;}
newText=this._history.next();break;case UI.KeyboardShortcut.Keys.P.code:if(Host.isMac()&&keyboardEvent.ctrlKey&&!keyboardEvent.metaKey&&!keyboardEvent.altKey&&!keyboardEvent.shiftKey){newText=this._history.previous(this.text());isPrevious=true;}
break;case UI.KeyboardShortcut.Keys.N.code:if(Host.isMac()&&keyboardEvent.ctrlKey&&!keyboardEvent.metaKey&&!keyboardEvent.altKey&&!keyboardEvent.shiftKey){newText=this._history.next();}
break;case UI.KeyboardShortcut.Keys.Enter.code:this._enterKeyPressed(keyboardEvent);break;case UI.KeyboardShortcut.Keys.Tab.code:if(!this.text()){keyboardEvent.consume();}
break;}
if(newText===undefined){return;}
keyboardEvent.consume(true);this.setText(newText);if(isPrevious){this._editor.setSelection(TextUtils.TextRange.createFromLocation(0,Infinity));}else{this.moveCaretToEndOfPrompt();}}
async _enterWillEvaluate(){if(!this._isCaretAtEndOfPrompt()){return true;}
return await ObjectUI.JavaScriptAutocomplete.isExpressionComplete(this.text());}
_updatePromptIcon(){this._iconThrottler.schedule(async()=>{const canComplete=await this._enterWillEvaluate();this._promptIcon.classList.toggle('console-prompt-incomplete',!canComplete);});}
async _enterKeyPressed(event){if(event.altKey||event.ctrlKey||event.shiftKey){return;}
event.consume(true);this.element.scrollIntoView();this.clearAutocomplete();const str=this.text();if(!str.length){return;}
if(await this._enterWillEvaluate()){await this._appendCommand(str,true);}else{this._editor.newlineAndIndent();}
this._enterProcessedForTest();}
async _appendCommand(text,useCommandLineAPI){this.setText('');const currentExecutionContext=UI.context.flavor(SDK.ExecutionContext);if(currentExecutionContext){const executionContext=currentExecutionContext;const message=SDK.consoleModel.addCommandMessage(executionContext,text);const wrappedResult=await ObjectUI.JavaScriptREPL.preprocessExpression(text);SDK.consoleModel.evaluateCommandInConsole(executionContext,message,wrappedResult.text,useCommandLineAPI,wrappedResult.preprocessed);if(Console.ConsolePanel.instance().isShowing()){Host.userMetrics.actionTaken(Host.UserMetrics.Action.CommandEvaluatedInConsolePanel);}}}
_enterProcessedForTest(){}
_historyCompletions(prefix,force){const text=this.text();if(!this._addCompletionsFromHistory||!this._isCaretAtEndOfPrompt()||(!text&&!force)){return[];}
const result=[];const set=new Set();const data=this._history.historyData();for(let i=data.length-1;i>=0&&result.length<50;--i){const item=data[i];if(!item.startsWith(text)){continue;}
if(set.has(item)){continue;}
set.add(item);result.push({text:item.substring(text.length-prefix.length),iconType:'smallicon-text-prompt',isSecondary:true});}
return result;}
focus(){if(this._editor){this._editor.widget().focus();}else{this.element.focus();}}
async _wordsWithQuery(queryRange,substituteRange,force){const query=this._editor.text(queryRange);const words=await this._defaultAutocompleteConfig.suggestionsCallback(queryRange,substituteRange,force);const historyWords=this._historyCompletions(query,force);return words.concat(historyWords);}
_editorSetForTest(){}}
export class ConsoleHistoryManager{constructor(){this._data=[];this._historyOffset=1;}
historyData(){return this._data;}
setHistoryData(data){this._data=data.slice();this._historyOffset=1;}
pushHistoryItem(text){if(this._uncommittedIsTop){this._data.pop();delete this._uncommittedIsTop;}
this._historyOffset=1;if(text===this._currentHistoryItem()){return;}
this._data.push(text);}
_pushCurrentText(currentText){if(this._uncommittedIsTop){this._data.pop();}
this._uncommittedIsTop=true;this._data.push(currentText);}
previous(currentText){if(this._historyOffset>this._data.length){return undefined;}
if(this._historyOffset===1){this._pushCurrentText(currentText);}
++this._historyOffset;return this._currentHistoryItem();}
next(){if(this._historyOffset===1){return undefined;}
--this._historyOffset;return this._currentHistoryItem();}
_currentHistoryItem(){return this._data[this._data.length-this._historyOffset];}}
export const Events={TextChanged:Symbol('TextChanged')};self.Console=self.Console||{};Console=Console||{};Console.ConsolePrompt=ConsolePrompt;Console.ConsolePrompt.Events=Events;Console.ConsoleHistoryManager=ConsoleHistoryManager;export default class ConsoleView extends UI.VBox{constructor(){super();this.setMinimumSize(0,35);this.registerRequiredCSS('console/consoleView.css');this.registerRequiredCSS('object_ui/objectValue.css');this._searchableView=new UI.SearchableView(this);this._searchableView.element.classList.add('console-searchable-view');this._searchableView.setPlaceholder(Common.UIString('Find string in logs'));this._searchableView.setMinimalSearchQuerySize(0);this._sidebar=new Console.ConsoleSidebar();this._sidebar.addEventListener(Console.ConsoleSidebar.Events.FilterSelected,this._onFilterChanged.bind(this));this._isSidebarOpen=false;this._filter=new ConsoleViewFilter(this._onFilterChanged.bind(this));const consoleToolbarContainer=this.element.createChild('div','console-toolbar-container');this._splitWidget=new UI.SplitWidget(true,false,'console.sidebar.width',100);this._splitWidget.setMainWidget(this._searchableView);this._splitWidget.setSidebarWidget(this._sidebar);this._splitWidget.show(this.element);this._splitWidget.hideSidebar();this._splitWidget.enableShowModeSaving();this._isSidebarOpen=this._splitWidget.showMode()===UI.SplitWidget.ShowMode.Both;if(this._isSidebarOpen){this._filter._levelMenuButton.setEnabled(false);}
this._splitWidget.addEventListener(UI.SplitWidget.Events.ShowModeChanged,event=>{this._isSidebarOpen=event.data===UI.SplitWidget.ShowMode.Both;this._filter._levelMenuButton.setEnabled(!this._isSidebarOpen);this._onFilterChanged();});this._contentsElement=this._searchableView.element;this.element.classList.add('console-view');this._visibleViewMessages=[];this._hiddenByFilterCount=0;this._shouldBeHiddenCache=new Set();this._groupableMessages=new Map();this._groupableMessageTitle=new Map();this._regexMatchRanges=[];this._consoleContextSelector=new Console.ConsoleContextSelector();this._filterStatusText=new UI.ToolbarText();this._filterStatusText.element.classList.add('dimmed');this._showSettingsPaneSetting=Common.settings.createSetting('consoleShowSettingsToolbar',false);this._showSettingsPaneButton=new UI.ToolbarSettingToggle(this._showSettingsPaneSetting,'largeicon-settings-gear',Common.UIString('Console settings'));this._progressToolbarItem=new UI.ToolbarItem(createElement('div'));this._groupSimilarSetting=Common.settings.moduleSetting('consoleGroupSimilar');this._groupSimilarSetting.addChangeListener(()=>this._updateMessageList());const groupSimilarToggle=new UI.ToolbarSettingCheckbox(this._groupSimilarSetting,Common.UIString('Group similar'));const toolbar=new UI.Toolbar('console-main-toolbar',consoleToolbarContainer);const rightToolbar=new UI.Toolbar('',consoleToolbarContainer);toolbar.appendToolbarItem(this._splitWidget.createShowHideSidebarButton(ls`console sidebar`));toolbar.appendToolbarItem(UI.Toolbar.createActionButton((UI.actionRegistry.action('console.clear'))));toolbar.appendSeparator();toolbar.appendToolbarItem(this._consoleContextSelector.toolbarItem());toolbar.appendSeparator();const liveExpressionButton=UI.Toolbar.createActionButton((UI.actionRegistry.action('console.create-pin')));toolbar.appendToolbarItem(liveExpressionButton);toolbar.appendSeparator();toolbar.appendToolbarItem(this._filter._textFilterUI);toolbar.appendToolbarItem(this._filter._levelMenuButton);toolbar.appendToolbarItem(this._progressToolbarItem);rightToolbar.appendSeparator();rightToolbar.appendToolbarItem(this._filterStatusText);rightToolbar.appendToolbarItem(this._showSettingsPaneButton);this._preserveLogCheckbox=new UI.ToolbarSettingCheckbox(Common.moduleSetting('preserveConsoleLog'),Common.UIString('Do not clear log on page reload / navigation'),Common.UIString('Preserve log'));this._hideNetworkMessagesCheckbox=new UI.ToolbarSettingCheckbox(this._filter._hideNetworkMessagesSetting,this._filter._hideNetworkMessagesSetting.title(),Common.UIString('Hide network'));const filterByExecutionContextCheckbox=new UI.ToolbarSettingCheckbox(this._filter._filterByExecutionContextSetting,Common.UIString('Only show messages from the current context (top, iframe, worker, extension)'),Common.UIString('Selected context only'));const monitoringXHREnabledSetting=Common.moduleSetting('monitoringXHREnabled');this._timestampsSetting=Common.moduleSetting('consoleTimestampsEnabled');this._consoleHistoryAutocompleteSetting=Common.moduleSetting('consoleHistoryAutocomplete');const settingsPane=new UI.HBox();settingsPane.show(this._contentsElement);settingsPane.element.classList.add('console-settings-pane');UI.ARIAUtils.setAccessibleName(settingsPane.element,ls`Console settings`);UI.ARIAUtils.markAsGroup(settingsPane.element);const settingsToolbarLeft=new UI.Toolbar('',settingsPane.element);settingsToolbarLeft.makeVertical();settingsToolbarLeft.appendToolbarItem(this._hideNetworkMessagesCheckbox);settingsToolbarLeft.appendToolbarItem(this._preserveLogCheckbox);settingsToolbarLeft.appendToolbarItem(filterByExecutionContextCheckbox);settingsToolbarLeft.appendToolbarItem(groupSimilarToggle);const settingsToolbarRight=new UI.Toolbar('',settingsPane.element);settingsToolbarRight.makeVertical();settingsToolbarRight.appendToolbarItem(new UI.ToolbarSettingCheckbox(monitoringXHREnabledSetting));const eagerEvalCheckbox=new UI.ToolbarSettingCheckbox(Common.settings.moduleSetting('consoleEagerEval'),ls`Eagerly evaluate text in the prompt`);settingsToolbarRight.appendToolbarItem(eagerEvalCheckbox);settingsToolbarRight.appendToolbarItem(new UI.ToolbarSettingCheckbox(this._consoleHistoryAutocompleteSetting));const userGestureCheckbox=new UI.ToolbarSettingCheckbox(Common.settings.moduleSetting('consoleUserActivationEval'));settingsToolbarRight.appendToolbarItem(userGestureCheckbox);if(!this._showSettingsPaneSetting.get()){settingsPane.element.classList.add('hidden');}
this._showSettingsPaneSetting.addChangeListener(()=>settingsPane.element.classList.toggle('hidden',!this._showSettingsPaneSetting.get()));this._pinPane=new Console.ConsolePinPane(liveExpressionButton);this._pinPane.element.classList.add('console-view-pinpane');this._pinPane.show(this._contentsElement);this._pinPane.element.addEventListener('keydown',event=>{if((event.key==='Enter'&&UI.KeyboardShortcut.eventHasCtrlOrMeta((event)))||event.keyCode===UI.KeyboardShortcut.Keys.Esc.code){this._prompt.focus();event.consume();}});this._viewport=new Console.ConsoleViewport(this);this._viewport.setStickToBottom(true);this._viewport.contentElement().classList.add('console-group','console-group-messages');this._contentsElement.appendChild(this._viewport.element);this._messagesElement=this._viewport.element;this._messagesElement.id='console-messages';this._messagesElement.classList.add('monospace');this._messagesElement.addEventListener('click',this._messagesClicked.bind(this),false);this._messagesElement.addEventListener('paste',this._messagesPasted.bind(this),true);this._messagesElement.addEventListener('clipboard-paste',this._messagesPasted.bind(this),true);this._viewportThrottler=new Common.Throttler(50);this._pendingBatchResize=false;this._onMessageResizedBound=this._onMessageResized.bind(this);this._topGroup=ConsoleGroup.createTopGroup();this._currentGroup=this._topGroup;this._promptElement=this._messagesElement.createChild('div','source-code');this._promptElement.id='console-prompt';const selectAllFixer=this._messagesElement.createChild('div','console-view-fix-select-all');selectAllFixer.textContent='.';UI.ARIAUtils.markAsHidden(selectAllFixer);this._registerShortcuts();this._messagesElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),false);this._linkifier=new Components.Linkifier(Console.ConsoleViewMessage.MaxLengthForLinks);this._consoleMessages=[];this._viewMessageSymbol=Symbol('viewMessage');this._consoleHistorySetting=Common.settings.createLocalSetting('consoleHistory',[]);this._prompt=new Console.ConsolePrompt();this._prompt.show(this._promptElement);this._prompt.element.addEventListener('keydown',this._promptKeyDown.bind(this),true);this._prompt.addEventListener(Console.ConsolePrompt.Events.TextChanged,this._promptTextChanged,this);this._messagesElement.addEventListener('keydown',this._messagesKeyDown.bind(this),false);this._prompt.element.addEventListener('focusin',()=>{if(this._isScrolledToBottom()){this._viewport.setStickToBottom(true);}});this._consoleHistoryAutocompleteSetting.addChangeListener(this._consoleHistoryAutocompleteChanged,this);const historyData=this._consoleHistorySetting.get();this._prompt.history().setHistoryData(historyData);this._consoleHistoryAutocompleteChanged();this._updateFilterStatus();this._timestampsSetting.addChangeListener(this._consoleTimestampsSettingChanged,this);this._registerWithMessageSink();UI.context.addFlavorChangeListener(SDK.ExecutionContext,this._executionContextChanged,this);this._messagesElement.addEventListener('mousedown',event=>this._updateStickToBottomOnPointerDown(event.button===2),false);this._messagesElement.addEventListener('mouseup',this._updateStickToBottomOnPointerUp.bind(this),false);this._messagesElement.addEventListener('mouseleave',this._updateStickToBottomOnPointerUp.bind(this),false);this._messagesElement.addEventListener('wheel',this._updateStickToBottomOnWheel.bind(this),false);this._messagesElement.addEventListener('touchstart',this._updateStickToBottomOnPointerDown.bind(this,false),false);this._messagesElement.addEventListener('touchend',this._updateStickToBottomOnPointerUp.bind(this),false);this._messagesElement.addEventListener('touchcancel',this._updateStickToBottomOnPointerUp.bind(this),false);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared,this._consoleCleared,this);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded,this._onConsoleMessageAdded,this);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated,this._onConsoleMessageUpdated,this);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.CommandEvaluated,this._commandEvaluated,this);SDK.consoleModel.messages().forEach(this._addConsoleMessage,this);}
static instance(){if(!ConsoleView._instance){ConsoleView._instance=new ConsoleView();}
return ConsoleView._instance;}
static clearConsole(){SDK.consoleModel.requestClearMessages();}
_onFilterChanged(){this._filter._currentFilter.levelsMask=this._isSidebarOpen?Console.ConsoleFilter.allLevelsFilterValue():this._filter._messageLevelFiltersSetting.get();this._cancelBuildHiddenCache();if(this._immediatelyFilterMessagesForTest){for(const viewMessage of this._consoleMessages){this._computeShouldMessageBeVisible(viewMessage);}
this._updateMessageList();return;}
this._buildHiddenCache(0,this._consoleMessages.slice());}
_setImmediatelyFilterMessagesForTest(){this._immediatelyFilterMessagesForTest=true;}
searchableView(){return this._searchableView;}
_clearHistory(){this._consoleHistorySetting.set([]);this._prompt.history().setHistoryData([]);}
_consoleHistoryAutocompleteChanged(){this._prompt.setAddCompletionsFromHistory(this._consoleHistoryAutocompleteSetting.get());}
itemCount(){return this._visibleViewMessages.length;}
itemElement(index){return this._visibleViewMessages[index];}
fastHeight(index){return this._visibleViewMessages[index].fastHeight();}
minimumRowHeight(){return 16;}
_registerWithMessageSink(){Common.console.messages().forEach(this._addSinkMessage,this);Common.console.addEventListener(Common.Console.Events.MessageAdded,messageAdded,this);function messageAdded(event){this._addSinkMessage((event.data));}}
_addSinkMessage(message){let level=SDK.ConsoleMessage.MessageLevel.Verbose;switch(message.level){case Common.Console.MessageLevel.Info:level=SDK.ConsoleMessage.MessageLevel.Info;break;case Common.Console.MessageLevel.Error:level=SDK.ConsoleMessage.MessageLevel.Error;break;case Common.Console.MessageLevel.Warning:level=SDK.ConsoleMessage.MessageLevel.Warning;break;}
const consoleMessage=new SDK.ConsoleMessage(null,SDK.ConsoleMessage.MessageSource.Other,level,message.text,SDK.ConsoleMessage.MessageType.System,undefined,undefined,undefined,undefined,undefined,message.timestamp);this._addConsoleMessage(consoleMessage);}
_consoleTimestampsSettingChanged(){this._updateMessageList();this._consoleMessages.forEach(viewMessage=>viewMessage.updateTimestamp());this._groupableMessageTitle.forEach(viewMessage=>viewMessage.updateTimestamp());}
_executionContextChanged(){this._prompt.clearAutocomplete();}
willHide(){this._hidePromptSuggestBox();}
wasShown(){this._viewport.refresh();}
focus(){if(this._viewport.hasVirtualSelection()){this._viewport.contentElement().focus();}else{this._focusPrompt();}}
_focusPrompt(){if(!this._prompt.hasFocus()){const oldStickToBottom=this._viewport.stickToBottom();const oldScrollTop=this._viewport.element.scrollTop;this._prompt.focus();this._viewport.setStickToBottom(oldStickToBottom);this._viewport.element.scrollTop=oldScrollTop;}}
restoreScrollPositions(){if(this._viewport.stickToBottom()){this._immediatelyScrollToBottom();}else{super.restoreScrollPositions();}}
onResize(){this._scheduleViewportRefresh();this._hidePromptSuggestBox();if(this._viewport.stickToBottom()){this._immediatelyScrollToBottom();}
for(let i=0;i<this._visibleViewMessages.length;++i){this._visibleViewMessages[i].onResize();}}
_hidePromptSuggestBox(){this._prompt.clearAutocomplete();}
_invalidateViewport(){if(this._muteViewportUpdates){this._maybeDirtyWhileMuted=true;return Promise.resolve();}
if(this._needsFullUpdate){this._updateMessageList();delete this._needsFullUpdate;}else{this._viewport.invalidate();}
return Promise.resolve();}
_scheduleViewportRefresh(){if(this._muteViewportUpdates){this._maybeDirtyWhileMuted=true;this._scheduleViewportRefreshForTest(true);return;}else{this._scheduleViewportRefreshForTest(false);}
this._scheduledRefreshPromiseForTest=this._viewportThrottler.schedule(this._invalidateViewport.bind(this));}
_scheduleViewportRefreshForTest(muted){}
_immediatelyScrollToBottom(){this._viewport.setStickToBottom(true);this._promptElement.scrollIntoView(true);}
_updateFilterStatus(){if(this._hiddenByFilterCount===this._lastShownHiddenByFilterCount){return;}
this._filterStatusText.setText(ls`${this._hiddenByFilterCount} hidden`);this._filterStatusText.setVisible(!!this._hiddenByFilterCount);this._lastShownHiddenByFilterCount=this._hiddenByFilterCount;}
_onConsoleMessageAdded(event){const message=(event.data);this._addConsoleMessage(message);}
_addConsoleMessage(message){const viewMessage=this._createViewMessage(message);message[this._viewMessageSymbol]=viewMessage;if(message.type===SDK.ConsoleMessage.MessageType.Command||message.type===SDK.ConsoleMessage.MessageType.Result){const lastMessage=this._consoleMessages.peekLast();viewMessage[_messageSortingTimeSymbol]=lastMessage?lastMessage[_messageSortingTimeSymbol]:0;}else{viewMessage[_messageSortingTimeSymbol]=viewMessage.consoleMessage().timestamp;}
let insertAt;if(!this._consoleMessages.length||timeComparator(viewMessage,this._consoleMessages[this._consoleMessages.length-1])>0){insertAt=this._consoleMessages.length;}else{insertAt=this._consoleMessages.upperBound(viewMessage,timeComparator);}
const insertedInMiddle=insertAt<this._consoleMessages.length;this._consoleMessages.splice(insertAt,0,viewMessage);this._filter.onMessageAdded(message);this._sidebar.onMessageAdded(viewMessage);let shouldGoIntoGroup=false;if(message.isGroupable()){const groupKey=viewMessage.groupKey();shouldGoIntoGroup=this._groupSimilarSetting.get()&&this._groupableMessages.has(groupKey);let list=this._groupableMessages.get(groupKey);if(!list){list=[];this._groupableMessages.set(groupKey,list);}
list.push(viewMessage);}
this._computeShouldMessageBeVisible(viewMessage);if(!shouldGoIntoGroup&&!insertedInMiddle){this._appendMessageToEnd(viewMessage);this._updateFilterStatus();this._searchableView.updateSearchMatchesCount(this._regexMatchRanges.length);}else{this._needsFullUpdate=true;}
this._scheduleViewportRefresh();this._consoleMessageAddedForTest(viewMessage);function timeComparator(viewMessage1,viewMessage2){return viewMessage1[_messageSortingTimeSymbol]-viewMessage2[_messageSortingTimeSymbol];}}
_onConsoleMessageUpdated(event){const message=(event.data);const viewMessage=message[this._viewMessageSymbol];if(viewMessage){viewMessage.updateMessageElement();this._computeShouldMessageBeVisible(viewMessage);this._updateMessageList();}}
_consoleMessageAddedForTest(viewMessage){}
_shouldMessageBeVisible(viewMessage){return!this._shouldBeHiddenCache.has(viewMessage);}
_computeShouldMessageBeVisible(viewMessage){if(this._filter.shouldBeVisible(viewMessage)&&(!this._isSidebarOpen||this._sidebar.shouldBeVisible(viewMessage))){this._shouldBeHiddenCache.delete(viewMessage);}else{this._shouldBeHiddenCache.add(viewMessage);}}
_appendMessageToEnd(viewMessage,preventCollapse){if(!this._shouldMessageBeVisible(viewMessage)){this._hiddenByFilterCount++;return;}
if(!preventCollapse&&this._tryToCollapseMessages(viewMessage,this._visibleViewMessages.peekLast())){return;}
const lastMessage=this._visibleViewMessages.peekLast();if(viewMessage.consoleMessage().type===SDK.ConsoleMessage.MessageType.EndGroup){if(lastMessage&&!this._currentGroup.messagesHidden()){lastMessage.incrementCloseGroupDecorationCount();}
this._currentGroup=this._currentGroup.parentGroup()||this._currentGroup;return;}
if(!this._currentGroup.messagesHidden()){const originatingMessage=viewMessage.consoleMessage().originatingMessage();if(lastMessage&&originatingMessage&&lastMessage.consoleMessage()===originatingMessage){viewMessage.toMessageElement().classList.add('console-adjacent-user-command-result');}
this._visibleViewMessages.push(viewMessage);this._searchMessage(this._visibleViewMessages.length-1);}
if(viewMessage.consoleMessage().isGroupStartMessage()){this._currentGroup=new ConsoleGroup(this._currentGroup,viewMessage);}
this._messageAppendedForTests();}
_messageAppendedForTests(){}
_createViewMessage(message){const nestingLevel=this._currentGroup.nestingLevel();switch(message.type){case SDK.ConsoleMessage.MessageType.Command:return new ConsoleCommand(message,this._linkifier,nestingLevel,this._onMessageResizedBound);case SDK.ConsoleMessage.MessageType.Result:return new ConsoleCommandResult(message,this._linkifier,nestingLevel,this._onMessageResizedBound);case SDK.ConsoleMessage.MessageType.StartGroupCollapsed:case SDK.ConsoleMessage.MessageType.StartGroup:return new Console.ConsoleGroupViewMessage(message,this._linkifier,nestingLevel,this._updateMessageList.bind(this),this._onMessageResizedBound);default:return new Console.ConsoleViewMessage(message,this._linkifier,nestingLevel,this._onMessageResizedBound);}}
async _onMessageResized(event){const treeElement=(event.data);if(this._pendingBatchResize||!treeElement.treeOutline){return;}
this._pendingBatchResize=true;await Promise.resolve();const treeOutlineElement=treeElement.treeOutline.element;this._viewport.setStickToBottom(this._isScrolledToBottom());if(treeOutlineElement.offsetHeight<=this._messagesElement.offsetHeight){treeOutlineElement.scrollIntoViewIfNeeded();}
this._pendingBatchResize=false;}
_consoleCleared(){const hadFocus=this._viewport.element.hasFocus();this._cancelBuildHiddenCache();this._currentMatchRangeIndex=-1;this._consoleMessages=[];this._groupableMessages.clear();this._groupableMessageTitle.clear();this._sidebar.clear();this._updateMessageList();this._hidePromptSuggestBox();this._viewport.setStickToBottom(true);this._linkifier.reset();this._filter.clear();if(hadFocus){this._prompt.focus();}}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);if(event.target.isSelfOrDescendant(this._promptElement)){contextMenu.show();return;}
const sourceElement=event.target.enclosingNodeOrSelfWithClass('console-message-wrapper');const consoleMessage=sourceElement?sourceElement.message.consoleMessage():null;if(consoleMessage&&consoleMessage.url){const menuTitle=ls`Hide messages from ${new Common.ParsedURL(consoleMessage.url).displayName}`;contextMenu.headerSection().appendItem(menuTitle,this._filter.addMessageURLFilter.bind(this._filter,consoleMessage.url));}
contextMenu.defaultSection().appendAction('console.clear');contextMenu.defaultSection().appendAction('console.clear.history');contextMenu.saveSection().appendItem(Common.UIString('Save as...'),this._saveConsole.bind(this));if(this.element.hasSelection()){contextMenu.clipboardSection().appendItem(Common.UIString('Copy visible styled selection'),this._viewport.copyWithStyles.bind(this._viewport));}
if(consoleMessage){const request=SDK.NetworkLog.requestForConsoleMessage(consoleMessage);if(request&&SDK.NetworkManager.canReplayRequest(request)){contextMenu.debugSection().appendItem(ls`Replay XHR`,SDK.NetworkManager.replayRequest.bind(null,request));}}
contextMenu.show();}
async _saveConsole(){const url=SDK.targetManager.mainTarget().inspectedURL();const parsedURL=url.asParsedURL();const filename=String.sprintf('%s-%d.log',parsedURL?parsedURL.host:'console',Date.now());const stream=new Bindings.FileOutputStream();const progressIndicator=new UI.ProgressIndicator();progressIndicator.setTitle(Common.UIString('Writing file…'));progressIndicator.setTotalWork(this.itemCount());const chunkSize=350;if(!await stream.open(filename)){return;}
this._progressToolbarItem.element.appendChild(progressIndicator.element);let messageIndex=0;while(messageIndex<this.itemCount()&&!progressIndicator.isCanceled()){const messageContents=[];let i;for(i=0;i<chunkSize&&i+messageIndex<this.itemCount();++i){const message=(this.itemElement(messageIndex+i));messageContents.push(message.toExportString());}
messageIndex+=i;await stream.write(messageContents.join('\n')+'\n');progressIndicator.setWorked(messageIndex);}
stream.close();progressIndicator.done();}
_tryToCollapseMessages(viewMessage,lastMessage){const timestampsShown=this._timestampsSetting.get();if(!timestampsShown&&lastMessage&&!viewMessage.consoleMessage().isGroupMessage()&&viewMessage.consoleMessage().type!==SDK.ConsoleMessage.MessageType.Command&&viewMessage.consoleMessage().type!==SDK.ConsoleMessage.MessageType.Result&&viewMessage.consoleMessage().isEqual(lastMessage.consoleMessage())){lastMessage.incrementRepeatCount();if(viewMessage.isLastInSimilarGroup()){lastMessage.setInSimilarGroup(true,true);}
return true;}
return false;}
_buildHiddenCache(startIndex,viewMessages){const startTime=Date.now();let i;for(i=startIndex;i<viewMessages.length;++i){this._computeShouldMessageBeVisible(viewMessages[i]);if(i%10===0&&Date.now()-startTime>12){break;}}
if(i===viewMessages.length){this._updateMessageList();return;}
this._buildHiddenCacheTimeout=this.element.window().requestAnimationFrame(this._buildHiddenCache.bind(this,i,viewMessages));}
_cancelBuildHiddenCache(){this._shouldBeHiddenCache.clear();if(this._buildHiddenCacheTimeout){this.element.window().cancelAnimationFrame(this._buildHiddenCacheTimeout);delete this._buildHiddenCacheTimeout;}}
_updateMessageList(){this._topGroup=ConsoleGroup.createTopGroup();this._currentGroup=this._topGroup;this._regexMatchRanges=[];this._hiddenByFilterCount=0;for(let i=0;i<this._visibleViewMessages.length;++i){this._visibleViewMessages[i].resetCloseGroupDecorationCount();this._visibleViewMessages[i].resetIncrementRepeatCount();}
this._visibleViewMessages=[];if(this._groupSimilarSetting.get()){this._addGroupableMessagesToEnd();}else{for(let i=0;i<this._consoleMessages.length;++i){this._consoleMessages[i].setInSimilarGroup(false);this._appendMessageToEnd(this._consoleMessages[i]);}}
this._updateFilterStatus();this._searchableView.updateSearchMatchesCount(this._regexMatchRanges.length);this._viewport.invalidate();}
_addGroupableMessagesToEnd(){const alreadyAdded=new Set();const processedGroupKeys=new Set();for(let i=0;i<this._consoleMessages.length;++i){const viewMessage=this._consoleMessages[i];const message=viewMessage.consoleMessage();if(alreadyAdded.has(message)){continue;}
if(!message.isGroupable()){this._appendMessageToEnd(viewMessage);alreadyAdded.add(message);continue;}
const key=viewMessage.groupKey();const viewMessagesInGroup=this._groupableMessages.get(key);if(!viewMessagesInGroup||viewMessagesInGroup.length<5){viewMessage.setInSimilarGroup(false);this._appendMessageToEnd(viewMessage);alreadyAdded.add(message);continue;}
if(processedGroupKeys.has(key)){continue;}
if(!viewMessagesInGroup.find(x=>this._shouldMessageBeVisible(x))){alreadyAdded.addAll(viewMessagesInGroup);processedGroupKeys.add(key);continue;}
let startGroupViewMessage=this._groupableMessageTitle.get(key);if(!startGroupViewMessage){const startGroupMessage=new SDK.ConsoleMessage(null,message.source,message.level,viewMessage.groupTitle(),SDK.ConsoleMessage.MessageType.StartGroupCollapsed);startGroupViewMessage=this._createViewMessage(startGroupMessage);this._groupableMessageTitle.set(key,startGroupViewMessage);}
startGroupViewMessage.setRepeatCount(viewMessagesInGroup.length);this._appendMessageToEnd(startGroupViewMessage);for(const viewMessageInGroup of viewMessagesInGroup){viewMessageInGroup.setInSimilarGroup(true,viewMessagesInGroup.peekLast()===viewMessageInGroup);this._appendMessageToEnd(viewMessageInGroup,true);alreadyAdded.add(viewMessageInGroup.consoleMessage());}
const endGroupMessage=new SDK.ConsoleMessage(null,message.source,message.level,message.messageText,SDK.ConsoleMessage.MessageType.EndGroup);this._appendMessageToEnd(this._createViewMessage(endGroupMessage));}}
_messagesClicked(event){const target=(event.target);if(!this._messagesElement.hasSelection()){const clickedOutsideMessageList=target===this._messagesElement||this._prompt.belowEditorElement().isSelfOrAncestor(target);if(clickedOutsideMessageList){this._prompt.moveCaretToEndOfPrompt();this._focusPrompt();}}}
_messagesKeyDown(event){const hasActionModifier=event.ctrlKey||event.altKey||event.metaKey;if(hasActionModifier||event.key.length!==1||UI.isEditing()||this._messagesElement.hasSelection()){return;}
this._prompt.moveCaretToEndOfPrompt();this._focusPrompt();}
_messagesPasted(event){if(UI.isEditing()){return;}
this._prompt.focus();}
_registerShortcuts(){this._shortcuts={};this._shortcuts[UI.KeyboardShortcut.makeKey('u',UI.KeyboardShortcut.Modifiers.Ctrl)]=this._clearPromptBackwards.bind(this);}
_clearPromptBackwards(){this._prompt.setText('');}
_promptKeyDown(event){const keyboardEvent=(event);if(keyboardEvent.key==='PageUp'){this._updateStickToBottomOnWheel();return;}
const shortcut=UI.KeyboardShortcut.makeKeyFromEvent(keyboardEvent);const handler=this._shortcuts[shortcut];if(handler){handler();keyboardEvent.preventDefault();}}
_printResult(result,originatingConsoleMessage,exceptionDetails){if(!result){return;}
const level=!!exceptionDetails?SDK.ConsoleMessage.MessageLevel.Error:SDK.ConsoleMessage.MessageLevel.Info;let message;if(!exceptionDetails){message=new SDK.ConsoleMessage(result.runtimeModel(),SDK.ConsoleMessage.MessageSource.JS,level,'',SDK.ConsoleMessage.MessageType.Result,undefined,undefined,undefined,[result]);}else{message=SDK.ConsoleMessage.fromException(result.runtimeModel(),exceptionDetails,SDK.ConsoleMessage.MessageType.Result,undefined,undefined);}
message.setOriginatingMessage(originatingConsoleMessage);SDK.consoleModel.addMessage(message);}
_commandEvaluated(event){const data=(event.data);this._prompt.history().pushHistoryItem(data.commandMessage.messageText);this._consoleHistorySetting.set(this._prompt.history().historyData().slice(-persistedHistorySize));this._printResult(data.result,data.commandMessage,data.exceptionDetails);}
elementsToRestoreScrollPositionsFor(){return[this._messagesElement];}
searchCanceled(){this._cleanupAfterSearch();for(let i=0;i<this._visibleViewMessages.length;++i){const message=this._visibleViewMessages[i];message.setSearchRegex(null);}
this._currentMatchRangeIndex=-1;this._regexMatchRanges=[];delete this._searchRegex;this._viewport.refresh();}
performSearch(searchConfig,shouldJump,jumpBackwards){this.searchCanceled();this._searchableView.updateSearchMatchesCount(0);this._searchRegex=searchConfig.toSearchRegex(true);this._regexMatchRanges=[];this._currentMatchRangeIndex=-1;if(shouldJump){this._searchShouldJumpBackwards=!!jumpBackwards;}
this._searchProgressIndicator=new UI.ProgressIndicator();this._searchProgressIndicator.setTitle(Common.UIString('Searching…'));this._searchProgressIndicator.setTotalWork(this._visibleViewMessages.length);this._progressToolbarItem.element.appendChild(this._searchProgressIndicator.element);this._innerSearch(0);}
_cleanupAfterSearch(){delete this._searchShouldJumpBackwards;if(this._innerSearchTimeoutId){clearTimeout(this._innerSearchTimeoutId);delete this._innerSearchTimeoutId;}
if(this._searchProgressIndicator){this._searchProgressIndicator.done();delete this._searchProgressIndicator;}}
_searchFinishedForTests(){}
_innerSearch(index){delete this._innerSearchTimeoutId;if(this._searchProgressIndicator.isCanceled()){this._cleanupAfterSearch();return;}
const startTime=Date.now();for(;index<this._visibleViewMessages.length&&Date.now()-startTime<100;++index){this._searchMessage(index);}
this._searchableView.updateSearchMatchesCount(this._regexMatchRanges.length);if(typeof this._searchShouldJumpBackwards!=='undefined'&&this._regexMatchRanges.length){this._jumpToMatch(this._searchShouldJumpBackwards?-1:0);delete this._searchShouldJumpBackwards;}
if(index===this._visibleViewMessages.length){this._cleanupAfterSearch();setTimeout(this._searchFinishedForTests.bind(this),0);return;}
this._innerSearchTimeoutId=setTimeout(this._innerSearch.bind(this,index),100);this._searchProgressIndicator.setWorked(index);}
_searchMessage(index){const message=this._visibleViewMessages[index];message.setSearchRegex(this._searchRegex);for(let i=0;i<message.searchCount();++i){this._regexMatchRanges.push({messageIndex:index,matchIndex:i});}}
jumpToNextSearchResult(){this._jumpToMatch(this._currentMatchRangeIndex+1);}
jumpToPreviousSearchResult(){this._jumpToMatch(this._currentMatchRangeIndex-1);}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return true;}
_jumpToMatch(index){if(!this._regexMatchRanges.length){return;}
let matchRange;if(this._currentMatchRangeIndex>=0){matchRange=this._regexMatchRanges[this._currentMatchRangeIndex];const message=this._visibleViewMessages[matchRange.messageIndex];message.searchHighlightNode(matchRange.matchIndex).classList.remove(UI.highlightedCurrentSearchResultClassName);}
index=mod(index,this._regexMatchRanges.length);this._currentMatchRangeIndex=index;this._searchableView.updateCurrentMatchIndex(index);matchRange=this._regexMatchRanges[index];const message=this._visibleViewMessages[matchRange.messageIndex];const highlightNode=message.searchHighlightNode(matchRange.matchIndex);highlightNode.classList.add(UI.highlightedCurrentSearchResultClassName);this._viewport.scrollItemIntoView(matchRange.messageIndex);highlightNode.scrollIntoViewIfNeeded();}
_updateStickToBottomOnPointerDown(isRightClick){this._muteViewportUpdates=!isRightClick;this._viewport.setStickToBottom(false);if(this._waitForScrollTimeout){clearTimeout(this._waitForScrollTimeout);delete this._waitForScrollTimeout;}}
_updateStickToBottomOnPointerUp(){if(!this._muteViewportUpdates){return;}
this._waitForScrollTimeout=setTimeout(updateViewportState.bind(this),200);function updateViewportState(){this._muteViewportUpdates=false;if(this.isShowing()){this._viewport.setStickToBottom(this._isScrolledToBottom());}
if(this._maybeDirtyWhileMuted){this._scheduleViewportRefresh();delete this._maybeDirtyWhileMuted;}
delete this._waitForScrollTimeout;this._updateViewportStickinessForTest();}}
_updateViewportStickinessForTest(){}
_updateStickToBottomOnWheel(){this._updateStickToBottomOnPointerDown();this._updateStickToBottomOnPointerUp();}
_promptTextChanged(){const oldStickToBottom=this._viewport.stickToBottom();const willStickToBottom=this._isScrolledToBottom();this._viewport.setStickToBottom(willStickToBottom);if(willStickToBottom&&!oldStickToBottom){this._scheduleViewportRefresh();}
this._promptTextChangedForTest();}
_promptTextChangedForTest(){}
_isScrolledToBottom(){const distanceToPromptEditorBottom=this._messagesElement.scrollHeight-this._messagesElement.scrollTop-
this._messagesElement.clientHeight-this._prompt.belowEditorElement().offsetHeight;return distanceToPromptEditorBottom<=2;}}
const persistedHistorySize=300;export class ConsoleViewFilter{constructor(filterChangedCallback){this._filterChanged=filterChangedCallback;this._messageLevelFiltersSetting=ConsoleViewFilter.levelFilterSetting();this._hideNetworkMessagesSetting=Common.moduleSetting('hideNetworkMessages');this._filterByExecutionContextSetting=Common.moduleSetting('selectedContextFilterEnabled');this._messageLevelFiltersSetting.addChangeListener(this._onFilterChanged.bind(this));this._hideNetworkMessagesSetting.addChangeListener(this._onFilterChanged.bind(this));this._filterByExecutionContextSetting.addChangeListener(this._onFilterChanged.bind(this));UI.context.addFlavorChangeListener(SDK.ExecutionContext,this._onFilterChanged,this);const filterKeys=Object.values(Console.ConsoleFilter.FilterType);this._suggestionBuilder=new UI.FilterSuggestionBuilder(filterKeys);this._textFilterUI=new UI.ToolbarInput(Common.UIString('Filter'),'',0.2,1,Common.UIString('e.g. /event\\d/ -cdn url:a.com'),this._suggestionBuilder.completions.bind(this._suggestionBuilder));this._textFilterSetting=Common.settings.createSetting('console.textFilter','');if(this._textFilterSetting.get()){this._textFilterUI.setValue(this._textFilterSetting.get());}
this._textFilterUI.addEventListener(UI.ToolbarInput.Event.TextChanged,()=>{this._textFilterSetting.set(this._textFilterUI.value());this._onFilterChanged();});this._filterParser=new TextUtils.FilterParser(filterKeys);this._currentFilter=new Console.ConsoleFilter('',[],null,this._messageLevelFiltersSetting.get());this._updateCurrentFilter();this._levelLabels={};this._levelLabels[SDK.ConsoleMessage.MessageLevel.Verbose]=Common.UIString('Verbose');this._levelLabels[SDK.ConsoleMessage.MessageLevel.Info]=Common.UIString('Info');this._levelLabels[SDK.ConsoleMessage.MessageLevel.Warning]=Common.UIString('Warnings');this._levelLabels[SDK.ConsoleMessage.MessageLevel.Error]=Common.UIString('Errors');this._levelMenuButton=new UI.ToolbarButton(ls`Log levels`);this._levelMenuButton.turnIntoSelect();this._levelMenuButton.addEventListener(UI.ToolbarButton.Events.Click,this._showLevelContextMenu.bind(this));UI.ARIAUtils.markAsMenuButton(this._levelMenuButton.element);this._updateLevelMenuButtonText();this._messageLevelFiltersSetting.addChangeListener(this._updateLevelMenuButtonText.bind(this));}
onMessageAdded(message){if(message.type===SDK.ConsoleMessage.MessageType.Command||message.type===SDK.ConsoleMessage.MessageType.Result||message.isGroupMessage()){return;}
if(message.context){this._suggestionBuilder.addItem(Console.ConsoleFilter.FilterType.Context,message.context);}
if(message.source){this._suggestionBuilder.addItem(Console.ConsoleFilter.FilterType.Source,message.source);}
if(message.url){this._suggestionBuilder.addItem(Console.ConsoleFilter.FilterType.Url,message.url);}}
static levelFilterSetting(){return Common.settings.createSetting('messageLevelFilters',Console.ConsoleFilter.defaultLevelsFilterValue());}
_updateCurrentFilter(){const parsedFilters=this._filterParser.parse(this._textFilterUI.value());if(this._hideNetworkMessagesSetting.get()){parsedFilters.push({key:Console.ConsoleFilter.FilterType.Source,text:SDK.ConsoleMessage.MessageSource.Network,negative:true});}
this._currentFilter.executionContext=this._filterByExecutionContextSetting.get()?UI.context.flavor(SDK.ExecutionContext):null;this._currentFilter.parsedFilters=parsedFilters;this._currentFilter.levelsMask=this._messageLevelFiltersSetting.get();}
_onFilterChanged(){this._updateCurrentFilter();this._filterChanged();}
_updateLevelMenuButtonText(){let isAll=true;let isDefault=true;const allValue=Console.ConsoleFilter.allLevelsFilterValue();const defaultValue=Console.ConsoleFilter.defaultLevelsFilterValue();let text=null;const levels=this._messageLevelFiltersSetting.get();for(const name of Object.values(SDK.ConsoleMessage.MessageLevel)){isAll=isAll&&levels[name]===allValue[name];isDefault=isDefault&&levels[name]===defaultValue[name];if(levels[name]){text=text?Common.UIString('Custom levels'):Common.UIString('%s only',this._levelLabels[name]);}}
if(isAll){text=Common.UIString('All levels');}else if(isDefault){text=Common.UIString('Default levels');}else{text=text||Common.UIString('Hide all');}
this._levelMenuButton.element.classList.toggle('warning',!isAll&&!isDefault);this._levelMenuButton.setText(text);this._levelMenuButton.setTitle(ls`Log level: ${text}`);}
_showLevelContextMenu(event){const mouseEvent=(event.data);const setting=this._messageLevelFiltersSetting;const levels=setting.get();const contextMenu=new UI.ContextMenu(mouseEvent,true,this._levelMenuButton.element.totalOffsetLeft(),this._levelMenuButton.element.totalOffsetTop()+this._levelMenuButton.element.offsetHeight);contextMenu.headerSection().appendItem(Common.UIString('Default'),()=>setting.set(Console.ConsoleFilter.defaultLevelsFilterValue()));for(const level in this._levelLabels){contextMenu.defaultSection().appendCheckboxItem(this._levelLabels[level],toggleShowLevel.bind(null,level),levels[level]);}
contextMenu.show();function toggleShowLevel(level){levels[level]=!levels[level];setting.set(levels);}}
addMessageURLFilter(url){if(!url){return;}
const suffix=this._textFilterUI.value()?` ${this._textFilterUI.value()}`:'';this._textFilterUI.setValue(`-url:${url}${suffix}`);this._textFilterSetting.set(this._textFilterUI.value());this._onFilterChanged();}
shouldBeVisible(viewMessage){return this._currentFilter.shouldBeVisible(viewMessage);}
clear(){this._suggestionBuilder.clear();}
reset(){this._messageLevelFiltersSetting.set(Console.ConsoleFilter.defaultLevelsFilterValue());this._filterByExecutionContextSetting.set(false);this._hideNetworkMessagesSetting.set(false);this._textFilterUI.setValue('');this._onFilterChanged();}}
export class ConsoleCommand extends Console.ConsoleViewMessage{contentElement(){if(!this._contentElement){this._contentElement=createElementWithClass('div','console-user-command');const icon=UI.Icon.create('smallicon-user-command','command-result-icon');this._contentElement.appendChild(icon);this._contentElement.message=this;this._formattedCommand=createElementWithClass('span','source-code');this._formattedCommand.textContent=this.text.replaceControlCharacters();this._contentElement.appendChild(this._formattedCommand);if(this._formattedCommand.textContent.length<MaxLengthToIgnoreHighlighter){const javascriptSyntaxHighlighter=new UI.SyntaxHighlighter('text/javascript',true);javascriptSyntaxHighlighter.syntaxHighlightNode(this._formattedCommand).then(this._updateSearch.bind(this));}else{this._updateSearch();}
this.updateTimestamp();}
return this._contentElement;}
_updateSearch(){this.setSearchRegex(this.searchRegex());}}
class ConsoleCommandResult extends Console.ConsoleViewMessage{contentElement(){const element=super.contentElement();if(!element.classList.contains('console-user-command-result')){element.classList.add('console-user-command-result');if(this.consoleMessage().level===SDK.ConsoleMessage.MessageLevel.Info){const icon=UI.Icon.create('smallicon-command-result','command-result-icon');element.insertBefore(icon,element.firstChild);}}
return element;}}
export class ConsoleGroup{constructor(parentGroup,groupMessage){this._parentGroup=parentGroup;this._nestingLevel=parentGroup?parentGroup.nestingLevel()+1:0;this._messagesHidden=groupMessage&&groupMessage.collapsed()||this._parentGroup&&this._parentGroup.messagesHidden();}
static createTopGroup(){return new ConsoleGroup(null,null);}
messagesHidden(){return this._messagesHidden;}
nestingLevel(){return this._nestingLevel;}
parentGroup(){return this._parentGroup;}}
export class ActionDelegate{handleAction(context,actionId){switch(actionId){case'console.show':Host.InspectorFrontendHost.bringToFront();Common.console.show();ConsoleView.instance()._focusPrompt();return true;case'console.clear':ConsoleView.clearConsole();return true;case'console.clear.history':ConsoleView.instance()._clearHistory();return true;case'console.create-pin':ConsoleView.instance()._pinPane.addPin('',true);return true;}
return false;}}
const _messageSortingTimeSymbol=Symbol('messageSortingTime');const MaxLengthToIgnoreHighlighter=10000;self.Console=self.Console||{};Console=Console||{};Console.ConsoleView=ConsoleView;Console.ConsoleViewFilter=ConsoleViewFilter;Console.ConsoleView.RegexMatchRange;Console.ConsoleView.ActionDelegate=ActionDelegate;Console.ConsoleCommand=ConsoleCommand;Console.ConsoleGroup=ConsoleGroup;export default class ConsoleViewMessage{constructor(consoleMessage,linkifier,nestingLevel,onResize){this._message=consoleMessage;this._linkifier=linkifier;this._repeatCount=1;this._closeGroupDecorationCount=0;this._nestingLevel=nestingLevel;this._selectableChildren=[];this._messageResized=onResize;this._dataGrid=null;this._previewFormatter=new ObjectUI.RemoteObjectPreviewFormatter();this._searchRegex=null;this._messageLevelIcon=null;this._traceExpanded=false;this._expandTrace=null;this._anchorElement=null;}
element(){return this.toMessageElement();}
wasShown(){if(this._dataGrid){this._dataGrid.updateWidths();}
this._isVisible=true;}
onResize(){if(!this._isVisible){return;}
if(this._dataGrid){this._dataGrid.onResize();}}
willHide(){this._isVisible=false;this._cachedHeight=this.element().offsetHeight;}
fastHeight(){if(this._cachedHeight){return this._cachedHeight;}
const defaultConsoleRowHeight=19;if(this._message.type===SDK.ConsoleMessage.MessageType.Table){const table=this._message.parameters[0];if(table&&table.preview){return defaultConsoleRowHeight*table.preview.properties.length;}}
return defaultConsoleRowHeight;}
consoleMessage(){return this._message;}
_buildTableMessage(){const formattedMessage=createElementWithClass('span','source-code');this._anchorElement=this._buildMessageAnchor();if(this._anchorElement){formattedMessage.appendChild(this._anchorElement);}
let table=this._message.parameters&&this._message.parameters.length?this._message.parameters[0]:null;if(table){table=this._parameterToRemoteObject(table);}
if(!table||!table.preview){return this._buildMessage();}
const rawValueColumnSymbol=Symbol('rawValueColumn');const columnNames=[];const preview=table.preview;const rows=[];for(let i=0;i<preview.properties.length;++i){const rowProperty=preview.properties[i];let rowSubProperties;if(rowProperty.valuePreview){rowSubProperties=rowProperty.valuePreview.properties;}else if(rowProperty.value){rowSubProperties=[{name:rawValueColumnSymbol,type:rowProperty.type,value:rowProperty.value}];}else{continue;}
const rowValue={};const maxColumnsToRender=20;for(let j=0;j<rowSubProperties.length;++j){const cellProperty=rowSubProperties[j];let columnRendered=columnNames.indexOf(cellProperty.name)!==-1;if(!columnRendered){if(columnNames.length===maxColumnsToRender){continue;}
columnRendered=true;columnNames.push(cellProperty.name);}
if(columnRendered){const cellElement=this._renderPropertyPreviewOrAccessor(table,[rowProperty,cellProperty]);cellElement.classList.add('console-message-nowrap-below');rowValue[cellProperty.name]=cellElement;}}
rows.push([rowProperty.name,rowValue]);}
const flatValues=[];for(let i=0;i<rows.length;++i){const rowName=rows[i][0];const rowValue=rows[i][1];flatValues.push(rowName);for(let j=0;j<columnNames.length;++j){flatValues.push(rowValue[columnNames[j]]);}}
columnNames.unshift(Common.UIString('(index)'));const columnDisplayNames=columnNames.map(name=>name===rawValueColumnSymbol?Common.UIString('Value'):name);if(flatValues.length){this._dataGrid=DataGrid.SortableDataGrid.create(columnDisplayNames,flatValues);this._dataGrid.setStriped(true);this._dataGrid.setFocusable(false);const formattedResult=createElementWithClass('span','console-message-text');const tableElement=formattedResult.createChild('div','console-message-formatted-table');const dataGridContainer=tableElement.createChild('span');tableElement.appendChild(this._formatParameter(table,true,false));dataGridContainer.appendChild(this._dataGrid.element);formattedMessage.appendChild(formattedResult);this._dataGrid.renderInline();}
return formattedMessage;}
_buildMessage(){let messageElement;let messageText=this._message.messageText;if(this._message.source===SDK.ConsoleMessage.MessageSource.ConsoleAPI){switch(this._message.type){case SDK.ConsoleMessage.MessageType.Trace:messageElement=this._format(this._message.parameters||['console.trace']);break;case SDK.ConsoleMessage.MessageType.Clear:messageElement=createElementWithClass('span','console-info');if(Common.moduleSetting('preserveConsoleLog').get()){messageElement.textContent=Common.UIString('console.clear() was prevented due to \'Preserve log\'');}else{messageElement.textContent=Common.UIString('Console was cleared');}
messageElement.title=ls`Clear all messages with ${UI.shortcutRegistry.shortcutTitleForAction('console.clear')}`;break;case SDK.ConsoleMessage.MessageType.Dir:{const obj=this._message.parameters?this._message.parameters[0]:undefined;const args=['%O',obj];messageElement=this._format(args);break;}
case SDK.ConsoleMessage.MessageType.Profile:case SDK.ConsoleMessage.MessageType.ProfileEnd:messageElement=this._format([messageText]);break;case SDK.ConsoleMessage.MessageType.Assert:this._messagePrefix=ls`Assertion failed: `;default:{if(this._message.parameters&&this._message.parameters.length===1&&this._message.parameters[0].type==='string'){messageElement=this._tryFormatAsError((this._message.parameters[0].value));}
const args=this._message.parameters||[messageText];messageElement=messageElement||this._format(args);}}}else{if(this._message.source===SDK.ConsoleMessage.MessageSource.Network){messageElement=this._formatAsNetworkRequest()||this._format([messageText]);}else{const messageInParameters=this._message.parameters&&messageText===(this._message.parameters[0]);if(this._message.source===SDK.ConsoleMessage.MessageSource.Violation){messageText=Common.UIString('[Violation] %s',messageText);}else if(this._message.source===SDK.ConsoleMessage.MessageSource.Intervention){messageText=Common.UIString('[Intervention] %s',messageText);}else if(this._message.source===SDK.ConsoleMessage.MessageSource.Deprecation){messageText=Common.UIString('[Deprecation] %s',messageText);}
const args=this._message.parameters||[messageText];if(messageInParameters){args[0]=messageText;}
messageElement=this._format(args);}}
messageElement.classList.add('console-message-text');const formattedMessage=createElementWithClass('span','source-code');this._anchorElement=this._buildMessageAnchor();if(this._anchorElement){formattedMessage.appendChild(this._anchorElement);}
formattedMessage.appendChild(messageElement);return formattedMessage;}
_formatAsNetworkRequest(){const request=SDK.NetworkLog.requestForConsoleMessage(this._message);if(!request){return null;}
const messageElement=createElement('span');if(this._message.level===SDK.ConsoleMessage.MessageLevel.Error){messageElement.createTextChild(request.requestMethod+' ');const linkElement=Components.Linkifier.linkifyRevealable(request,request.url(),request.url());linkElement.tabIndex=-1;this._selectableChildren.push({element:linkElement,forceSelect:()=>linkElement.focus()});messageElement.appendChild(linkElement);if(request.failed){messageElement.createTextChildren(' ',request.localizedFailDescription);}
if(request.statusCode!==0){messageElement.createTextChildren(' ',String(request.statusCode));}
if(request.statusText){messageElement.createTextChildren(' (',request.statusText,')');}}else{const messageText=this._message.messageText;const fragment=this._linkifyWithCustomLinkifier(messageText,(text,url,lineNumber,columnNumber)=>{let linkElement;if(url===request.url()){linkElement=Components.Linkifier.linkifyRevealable((request),url,request.url());}else{linkElement=Components.Linkifier.linkifyURL(url,{text,lineNumber,columnNumber});}
linkElement.tabIndex=-1;this._selectableChildren.push({element:linkElement,forceSelect:()=>linkElement.focus()});return linkElement;});messageElement.appendChild(fragment);}
return messageElement;}
_buildMessageAnchor(){let anchorElement=null;if(this._message.scriptId){anchorElement=this._linkifyScriptId(this._message.scriptId,this._message.url||'',this._message.line,this._message.column);}else if(this._message.stackTrace&&this._message.stackTrace.callFrames.length){anchorElement=this._linkifyStackTraceTopFrame(this._message.stackTrace);}else if(this._message.url&&this._message.url!=='undefined'){anchorElement=this._linkifyLocation(this._message.url,this._message.line,this._message.column);}
if(anchorElement){anchorElement.tabIndex=-1;this._selectableChildren.push({element:anchorElement,forceSelect:()=>anchorElement.focus(),});const anchorWrapperElement=createElementWithClass('span','console-message-anchor');anchorWrapperElement.appendChild(anchorElement);anchorWrapperElement.createTextChild(' ');return anchorWrapperElement;}
return null;}
_buildMessageWithStackTrace(){const toggleElement=createElementWithClass('div','console-message-stack-trace-toggle');const contentElement=toggleElement.createChild('div','console-message-stack-trace-wrapper');const messageElement=this._buildMessage();const icon=UI.Icon.create('smallicon-triangle-right','console-message-expand-icon');const clickableElement=contentElement.createChild('div');clickableElement.appendChild(icon);clickableElement.tabIndex=-1;clickableElement.appendChild(messageElement);const stackTraceElement=contentElement.createChild('div');const stackTracePreview=Components.JSPresentationUtils.buildStackTracePreviewContents(this._message.runtimeModel().target(),this._linkifier,this._message.stackTrace);stackTraceElement.appendChild(stackTracePreview.element);for(const linkElement of stackTracePreview.links){linkElement.tabIndex=-1;this._selectableChildren.push({element:linkElement,forceSelect:()=>linkElement.focus()});}
stackTraceElement.classList.add('hidden');this._expandTrace=expand=>{icon.setIconType(expand?'smallicon-triangle-down':'smallicon-triangle-right');stackTraceElement.classList.toggle('hidden',!expand);this._traceExpanded=expand;};function toggleStackTrace(event){if(UI.isEditing()||contentElement.hasSelection()){return;}
this._expandTrace(stackTraceElement.classList.contains('hidden'));event.consume();}
clickableElement.addEventListener('click',toggleStackTrace.bind(this),false);if(this._message.type===SDK.ConsoleMessage.MessageType.Trace){this._expandTrace(true);}
toggleElement._expandStackTraceForTest=this._expandTrace.bind(this,true);return toggleElement;}
_linkifyLocation(url,lineNumber,columnNumber){if(!this._message.runtimeModel()){return null;}
return this._linkifier.linkifyScriptLocation(this._message.runtimeModel().target(),null,url,lineNumber,columnNumber);}
_linkifyStackTraceTopFrame(stackTrace){if(!this._message.runtimeModel()){return null;}
return this._linkifier.linkifyStackTraceTopFrame(this._message.runtimeModel().target(),stackTrace);}
_linkifyScriptId(scriptId,url,lineNumber,columnNumber){if(!this._message.runtimeModel()){return null;}
return this._linkifier.linkifyScriptLocation(this._message.runtimeModel().target(),scriptId,url,lineNumber,columnNumber);}
_parameterToRemoteObject(parameter){if(parameter instanceof SDK.RemoteObject){return parameter;}
const runtimeModel=this._message.runtimeModel();if(!runtimeModel){return SDK.RemoteObject.fromLocalObject(parameter);}
if(typeof parameter==='object'){return runtimeModel.createRemoteObject(parameter);}
return runtimeModel.createRemoteObjectFromPrimitiveValue(parameter);}
_format(rawParameters){const formattedResult=createElement('span');if(this._messagePrefix){formattedResult.createChild('span').textContent=this._messagePrefix;}
if(!rawParameters.length){return formattedResult;}
let parameters=[];for(let i=0;i<rawParameters.length;++i){parameters[i]=this._parameterToRemoteObject(rawParameters[i]);}
const shouldFormatMessage=SDK.RemoteObject.type(((parameters))[0])==='string'&&(this._message.type!==SDK.ConsoleMessage.MessageType.Result||this._message.level===SDK.ConsoleMessage.MessageLevel.Error);if(shouldFormatMessage){const result=this._formatWithSubstitutionString((parameters[0].description),parameters.slice(1),formattedResult);parameters=result.unusedSubstitutions;if(parameters.length){formattedResult.createTextChild(' ');}}
for(let i=0;i<parameters.length;++i){if(shouldFormatMessage&&parameters[i].type==='string'){formattedResult.appendChild(this._linkifyStringAsFragment(parameters[i].description));}else{formattedResult.appendChild(this._formatParameter(parameters[i],false,true));}
if(i<parameters.length-1){formattedResult.createTextChild(' ');}}
return formattedResult;}
_formatParameter(output,forceObjectFormat,includePreview){if(output.customPreview()){return(new ObjectUI.CustomPreviewComponent(output)).element;}
const type=forceObjectFormat?'object':(output.subtype||output.type);let element;switch(type){case'error':element=this._formatParameterAsError(output);break;case'function':element=this._formatParameterAsFunction(output,includePreview);break;case'array':case'arraybuffer':case'blob':case'dataview':case'generator':case'iterator':case'map':case'object':case'promise':case'proxy':case'set':case'typedarray':case'weakmap':case'weakset':element=this._formatParameterAsObject(output,includePreview);break;case'node':element=output.isNode()?this._formatParameterAsNode(output):this._formatParameterAsObject(output,false);break;case'string':element=this._formatParameterAsString(output);break;case'boolean':case'date':case'null':case'number':case'regexp':case'symbol':case'undefined':case'bigint':element=this._formatParameterAsValue(output);break;default:element=this._formatParameterAsValue(output);console.error('Tried to format remote object of unknown type.');}
element.classList.add('object-value-'+type);element.classList.add('source-code');return element;}
_formatParameterAsValue(obj){const result=createElement('span');const description=obj.description||'';if(description.length>Console.ConsoleViewMessage._MaxTokenizableStringLength){result.appendChild(UI.createExpandableText(description,Console.ConsoleViewMessage._LongStringVisibleLength));}else{result.createTextChild(description);}
if(obj.objectId){result.addEventListener('contextmenu',this._contextMenuEventFired.bind(this,obj),false);}
return result;}
_formatParameterAsObject(obj,includePreview){const titleElement=createElementWithClass('span','console-object');if(includePreview&&obj.preview){titleElement.classList.add('console-object-preview');this._previewFormatter.appendObjectPreview(titleElement,obj.preview,false);}else if(obj.type==='function'){const functionElement=titleElement.createChild('span');ObjectUI.ObjectPropertiesSection.formatObjectAsFunction(obj,functionElement,false);titleElement.classList.add('object-value-function');}else{titleElement.createTextChild(obj.description||'');}
if(!obj.hasChildren||obj.customPreview()){return titleElement;}
const note=titleElement.createChild('span','object-state-note info-note');if(this._message.type===SDK.ConsoleMessage.MessageType.QueryObjectResult){note.title=ls`This value will not be collected until console is cleared.`;}else{note.title=ls`Value below was evaluated just now.`;}
const section=new ObjectUI.ObjectPropertiesSection(obj,titleElement,this._linkifier);section.element.classList.add('console-view-object-properties-section');section.enableContextMenu();section.setShowSelectionOnKeyboardFocus(true,true);this._selectableChildren.push(section);section.addEventListener(UI.TreeOutline.Events.ElementAttached,this._messageResized);section.addEventListener(UI.TreeOutline.Events.ElementExpanded,this._messageResized);section.addEventListener(UI.TreeOutline.Events.ElementCollapsed,this._messageResized);return section.element;}
_formatParameterAsFunction(func,includePreview){const result=createElement('span');SDK.RemoteFunction.objectAsFunction(func).targetFunction().then(formatTargetFunction.bind(this));return result;function formatTargetFunction(targetFunction){const functionElement=createElement('span');const promise=ObjectUI.ObjectPropertiesSection.formatObjectAsFunction(targetFunction,functionElement,true,includePreview);result.appendChild(functionElement);if(targetFunction!==func){const note=result.createChild('span','object-info-state-note');note.title=Common.UIString('Function was resolved from bound function.');}
result.addEventListener('contextmenu',this._contextMenuEventFired.bind(this,targetFunction),false);promise.then(()=>this._formattedParameterAsFunctionForTest());}}
_formattedParameterAsFunctionForTest(){}
_contextMenuEventFired(obj,event){const contextMenu=new UI.ContextMenu(event);contextMenu.appendApplicableItems(obj);contextMenu.show();}
_renderPropertyPreviewOrAccessor(object,propertyPath){const property=propertyPath.peekLast();if(property.type==='accessor'){return this._formatAsAccessorProperty(object,propertyPath.map(property=>property.name),false);}
return this._previewFormatter.renderPropertyPreview(property.type,(property.subtype),property.value);}
_formatParameterAsNode(remoteObject){const result=createElement('span');const domModel=remoteObject.runtimeModel().target().model(SDK.DOMModel);if(!domModel){return result;}
domModel.pushObjectAsNodeToFrontend(remoteObject).then(async node=>{if(!node){result.appendChild(this._formatParameterAsObject(remoteObject,false));return;}
const renderResult=await UI.Renderer.render((node));if(renderResult){if(renderResult.tree){this._selectableChildren.push(renderResult.tree);renderResult.tree.addEventListener(UI.TreeOutline.Events.ElementAttached,this._messageResized);renderResult.tree.addEventListener(UI.TreeOutline.Events.ElementExpanded,this._messageResized);renderResult.tree.addEventListener(UI.TreeOutline.Events.ElementCollapsed,this._messageResized);}
result.appendChild(renderResult.node);}else{result.appendChild(this._formatParameterAsObject(remoteObject,false));}
this._formattedParameterAsNodeForTest();});return result;}
_formattedParameterAsNodeForTest(){}
_formatParameterAsString(output){const span=createElement('span');span.appendChild(this._linkifyStringAsFragment(output.description||''));const result=createElement('span');result.createChild('span','object-value-string-quote').textContent='"';result.appendChild(span);result.createChild('span','object-value-string-quote').textContent='"';return result;}
_formatParameterAsError(output){const result=createElement('span');const errorSpan=this._tryFormatAsError(output.description||'');result.appendChild(errorSpan?errorSpan:this._linkifyStringAsFragment(output.description||''));return result;}
_formatAsArrayEntry(output){return this._previewFormatter.renderPropertyPreview(output.type,output.subtype,output.description);}
_formatAsAccessorProperty(object,propertyPath,isArrayEntry){const rootElement=ObjectUI.ObjectPropertyTreeElement.createRemoteObjectAccessorPropertySpan(object,propertyPath,onInvokeGetterClick.bind(this));function onInvokeGetterClick(result){const wasThrown=result.wasThrown;const object=result.object;if(!object){return;}
rootElement.removeChildren();if(wasThrown){const element=rootElement.createChild('span');element.textContent=Common.UIString('<exception>');element.title=(object.description);}else if(isArrayEntry){rootElement.appendChild(this._formatAsArrayEntry(object));}else{const maxLength=100;const type=object.type;const subtype=object.subtype;let description='';if(type!=='function'&&object.description){if(type==='string'||subtype==='regexp'){description=object.description.trimMiddle(maxLength);}else{description=object.description.trimEndWithMaxLength(maxLength);}}
rootElement.appendChild(this._previewFormatter.renderPropertyPreview(type,subtype,description));}}
return rootElement;}
_formatWithSubstitutionString(format,parameters,formattedResult){const formatters={};function parameterFormatter(force,includePreview,obj){return this._formatParameter(obj,force,includePreview);}
function stringFormatter(obj){return obj.description;}
function floatFormatter(obj){if(typeof obj.value!=='number'){return'NaN';}
return obj.value;}
function integerFormatter(obj){if(obj.type==='bigint'){return obj.description;}
if(typeof obj.value!=='number'){return'NaN';}
return Math.floor(obj.value);}
function bypassFormatter(obj){return(obj instanceof Node)?obj:'';}
let currentStyle=null;function styleFormatter(obj){currentStyle={};const buffer=createElement('span');buffer.setAttribute('style',obj.description);for(let i=0;i<buffer.style.length;i++){const property=buffer.style[i];if(isWhitelistedProperty(property)){currentStyle[property]=buffer.style[property];}}}
function isWhitelistedProperty(property){const prefixes=['background','border','color','font','line','margin','padding','text','-webkit-background','-webkit-border','-webkit-font','-webkit-margin','-webkit-padding','-webkit-text'];for(let i=0;i<prefixes.length;i++){if(property.startsWith(prefixes[i])){return true;}}
return false;}
formatters.o=parameterFormatter.bind(this,false,true);formatters.s=stringFormatter;formatters.f=floatFormatter;formatters.i=integerFormatter;formatters.d=integerFormatter;formatters.c=styleFormatter;formatters.O=parameterFormatter.bind(this,true,false);formatters._=bypassFormatter;function append(a,b){if(b instanceof Node){a.appendChild(b);return a;}
if(typeof b==='undefined'){return a;}
if(!currentStyle){a.appendChild(this._linkifyStringAsFragment(String(b)));return a;}
const lines=String(b).split('\n');for(let i=0;i<lines.length;i++){const line=lines[i];const lineFragment=this._linkifyStringAsFragment(line);const wrapper=createElement('span');wrapper.style.setProperty('contain','paint');wrapper.style.setProperty('display','inline-block');wrapper.style.setProperty('max-width','100%');wrapper.appendChild(lineFragment);applyCurrentStyle(wrapper);for(const child of wrapper.children){if(child.classList.contains('devtools-link')){this._applyForcedVisibleStyle(child);}}
a.appendChild(wrapper);if(i<lines.length-1){a.appendChild(createElement('br'));}}
return a;}
function applyCurrentStyle(element){for(const key in currentStyle){element.style[key]=currentStyle[key];}}
return String.format(format,parameters,formatters,formattedResult,append.bind(this));}
_applyForcedVisibleStyle(element){element.style.setProperty('-webkit-text-stroke','0','important');element.style.setProperty('text-decoration','underline','important');const themedColor=UI.themeSupport.patchColorText('rgb(33%, 33%, 33%)',UI.ThemeSupport.ColorUsage.Foreground);element.style.setProperty('color',themedColor,'important');let backgroundColor='hsl(0, 0%, 100%)';if(this._message.level===SDK.ConsoleMessage.MessageLevel.Error){backgroundColor='hsl(0, 100%, 97%)';}else if(this._message.level===SDK.ConsoleMessage.MessageLevel.Warning||this._shouldRenderAsWarning()){backgroundColor='hsl(50, 100%, 95%)';}
const themedBackgroundColor=UI.themeSupport.patchColorText(backgroundColor,UI.ThemeSupport.ColorUsage.Background);element.style.setProperty('background-color',themedBackgroundColor,'important');}
matchesFilterRegex(regexObject){regexObject.lastIndex=0;const contentElement=this.contentElement();const anchorText=this._anchorElement?this._anchorElement.deepTextContent():'';return(anchorText&&regexObject.test(anchorText.trim()))||regexObject.test(contentElement.deepTextContent().slice(anchorText.length));}
matchesFilterText(filter){const text=this.contentElement().deepTextContent();return text.toLowerCase().includes(filter.toLowerCase());}
updateTimestamp(){if(!this._contentElement){return;}
if(Common.moduleSetting('consoleTimestampsEnabled').get()){if(!this._timestampElement){this._timestampElement=createElementWithClass('span','console-timestamp');}
this._timestampElement.textContent=UI.formatTimestamp(this._message.timestamp,false)+' ';this._timestampElement.title=UI.formatTimestamp(this._message.timestamp,true);this._contentElement.insertBefore(this._timestampElement,this._contentElement.firstChild);}else if(this._timestampElement){this._timestampElement.remove();delete this._timestampElement;}}
nestingLevel(){return this._nestingLevel;}
setInSimilarGroup(inSimilarGroup,isLast){this._inSimilarGroup=inSimilarGroup;this._lastInSimilarGroup=inSimilarGroup&&!!isLast;if(this._similarGroupMarker&&!inSimilarGroup){this._similarGroupMarker.remove();this._similarGroupMarker=null;}else if(this._element&&!this._similarGroupMarker&&inSimilarGroup){this._similarGroupMarker=createElementWithClass('div','nesting-level-marker');this._element.insertBefore(this._similarGroupMarker,this._element.firstChild);this._similarGroupMarker.classList.toggle('group-closed',this._lastInSimilarGroup);}}
isLastInSimilarGroup(){return this._inSimilarGroup&&this._lastInSimilarGroup;}
resetCloseGroupDecorationCount(){if(!this._closeGroupDecorationCount){return;}
this._closeGroupDecorationCount=0;this._updateCloseGroupDecorations();}
incrementCloseGroupDecorationCount(){++this._closeGroupDecorationCount;this._updateCloseGroupDecorations();}
_updateCloseGroupDecorations(){if(!this._nestingLevelMarkers){return;}
for(let i=0,n=this._nestingLevelMarkers.length;i<n;++i){const marker=this._nestingLevelMarkers[i];marker.classList.toggle('group-closed',n-i<=this._closeGroupDecorationCount);}}
_focusedChildIndex(){if(!this._selectableChildren.length){return-1;}
return this._selectableChildren.findIndex(child=>child.element.hasFocus());}
_onKeyDown(event){if(UI.isEditing()||!this._element.hasFocus()||this._element.hasSelection()){return;}
if(this.maybeHandleOnKeyDown(event)){event.consume(true);}}
maybeHandleOnKeyDown(event){const focusedChildIndex=this._focusedChildIndex();const isWrapperFocused=focusedChildIndex===-1;if(this._expandTrace&&isWrapperFocused){if((event.key==='ArrowLeft'&&this._traceExpanded)||(event.key==='ArrowRight'&&!this._traceExpanded)){this._expandTrace(!this._traceExpanded);return true;}}
if(!this._selectableChildren.length){return false;}
if(event.key==='ArrowLeft'){this._element.focus();return true;}
if(event.key==='ArrowRight'){if(isWrapperFocused&&this._selectNearestVisibleChild(0)){return true;}}
if(event.key==='ArrowUp'){const firstVisibleChild=this._nearestVisibleChild(0);if(this._selectableChildren[focusedChildIndex]===firstVisibleChild&&firstVisibleChild){this._element.focus();return true;}else if(this._selectNearestVisibleChild(focusedChildIndex-1,true)){return true;}}
if(event.key==='ArrowDown'){if(isWrapperFocused&&this._selectNearestVisibleChild(0)){return true;}
if(!isWrapperFocused&&this._selectNearestVisibleChild(focusedChildIndex+1)){return true;}}
return false;}
_selectNearestVisibleChild(fromIndex,backwards){const nearestChild=this._nearestVisibleChild(fromIndex,backwards);if(nearestChild){nearestChild.forceSelect();return true;}
return false;}
_nearestVisibleChild(fromIndex,backwards){const childCount=this._selectableChildren.length;if(fromIndex<0||fromIndex>=childCount){return null;}
const direction=backwards?-1:1;let index=fromIndex;while(!this._selectableChildren[index].element.offsetParent){index+=direction;if(index<0||index>=childCount){return null;}}
return this._selectableChildren[index];}
focusLastChildOrSelf(){if(this._element&&!this._selectNearestVisibleChild(this._selectableChildren.length-1,true)){this._element.focus();}}
contentElement(){if(this._contentElement){return this._contentElement;}
const contentElement=createElementWithClass('div','console-message');if(this._messageLevelIcon){contentElement.appendChild(this._messageLevelIcon);}
this._contentElement=contentElement;let formattedMessage;const shouldIncludeTrace=!!this._message.stackTrace&&(this._message.source===SDK.ConsoleMessage.MessageSource.Network||this._message.source===SDK.ConsoleMessage.MessageSource.Violation||this._message.level===SDK.ConsoleMessage.MessageLevel.Error||this._message.level===SDK.ConsoleMessage.MessageLevel.Warning||this._message.type===SDK.ConsoleMessage.MessageType.Trace);if(this._message.runtimeModel()&&shouldIncludeTrace){formattedMessage=this._buildMessageWithStackTrace();}else if(this._message.type===SDK.ConsoleMessage.MessageType.Table){formattedMessage=this._buildTableMessage();}else{formattedMessage=this._buildMessage();}
contentElement.appendChild(formattedMessage);this.updateTimestamp();return this._contentElement;}
toMessageElement(){if(this._element){return this._element;}
this._element=createElement('div');this._element.tabIndex=-1;this._element.addEventListener('keydown',this._onKeyDown.bind(this));this.updateMessageElement();return this._element;}
updateMessageElement(){if(!this._element){return;}
this._element.className='console-message-wrapper';this._element.removeChildren();if(this._message.isGroupStartMessage()){this._element.classList.add('console-group-title');}
if(this._message.source===SDK.ConsoleMessage.MessageSource.ConsoleAPI){this._element.classList.add('console-from-api');}
if(this._inSimilarGroup){this._similarGroupMarker=this._element.createChild('div','nesting-level-marker');this._similarGroupMarker.classList.toggle('group-closed',this._lastInSimilarGroup);}
this._nestingLevelMarkers=[];for(let i=0;i<this._nestingLevel;++i){this._nestingLevelMarkers.push(this._element.createChild('div','nesting-level-marker'));}
this._updateCloseGroupDecorations();this._element.message=this;switch(this._message.level){case SDK.ConsoleMessage.MessageLevel.Verbose:this._element.classList.add('console-verbose-level');break;case SDK.ConsoleMessage.MessageLevel.Info:this._element.classList.add('console-info-level');if(this._message.type===SDK.ConsoleMessage.MessageType.System){this._element.classList.add('console-system-type');}
break;case SDK.ConsoleMessage.MessageLevel.Warning:this._element.classList.add('console-warning-level');break;case SDK.ConsoleMessage.MessageLevel.Error:this._element.classList.add('console-error-level');break;}
this._updateMessageLevelIcon();if(this._shouldRenderAsWarning()){this._element.classList.add('console-warning-level');}
this._element.appendChild(this.contentElement());if(this._repeatCount>1){this._showRepeatCountElement();}}
_shouldRenderAsWarning(){return(this._message.level===SDK.ConsoleMessage.MessageLevel.Verbose||this._message.level===SDK.ConsoleMessage.MessageLevel.Info)&&(this._message.source===SDK.ConsoleMessage.MessageSource.Violation||this._message.source===SDK.ConsoleMessage.MessageSource.Deprecation||this._message.source===SDK.ConsoleMessage.MessageSource.Intervention||this._message.source===SDK.ConsoleMessage.MessageSource.Recommendation);}
_updateMessageLevelIcon(){let iconType='';let accessibleName='';if(this._message.level===SDK.ConsoleMessage.MessageLevel.Warning){iconType='smallicon-warning';accessibleName=ls`Warning`;}else if(this._message.level===SDK.ConsoleMessage.MessageLevel.Error){iconType='smallicon-error';accessibleName=ls`Error`;}
if(!iconType&&!this._messageLevelIcon){return;}
if(iconType&&!this._messageLevelIcon){this._messageLevelIcon=UI.Icon.create('','message-level-icon');if(this._contentElement){this._contentElement.insertBefore(this._messageLevelIcon,this._contentElement.firstChild);}}
this._messageLevelIcon.setIconType(iconType);UI.ARIAUtils.setAccessibleName(this._messageLevelIcon,accessibleName);}
repeatCount(){return this._repeatCount||1;}
resetIncrementRepeatCount(){this._repeatCount=1;if(!this._repeatCountElement){return;}
this._repeatCountElement.remove();if(this._contentElement){this._contentElement.classList.remove('repeated-message');}
delete this._repeatCountElement;}
incrementRepeatCount(){this._repeatCount++;this._showRepeatCountElement();}
setRepeatCount(repeatCount){this._repeatCount=repeatCount;this._showRepeatCountElement();}
_showRepeatCountElement(){if(!this._element){return;}
if(!this._repeatCountElement){this._repeatCountElement=createElementWithClass('span','console-message-repeat-count','dt-small-bubble');switch(this._message.level){case SDK.ConsoleMessage.MessageLevel.Warning:this._repeatCountElement.type='warning';break;case SDK.ConsoleMessage.MessageLevel.Error:this._repeatCountElement.type='error';break;case SDK.ConsoleMessage.MessageLevel.Verbose:this._repeatCountElement.type='verbose';break;default:this._repeatCountElement.type='info';}
if(this._shouldRenderAsWarning()){this._repeatCountElement.type='warning';}
this._element.insertBefore(this._repeatCountElement,this._contentElement);this._contentElement.classList.add('repeated-message');}
this._repeatCountElement.textContent=this._repeatCount;let accessibleName=ls`Repeat ${this._repeatCount}`;if(this._message.level===SDK.ConsoleMessage.MessageLevel.Warning){accessibleName=ls`Warning ${accessibleName}`;}else if(this._message.level===SDK.ConsoleMessage.MessageLevel.Error){accessibleName=ls`Error ${accessibleName}`;}
UI.ARIAUtils.setAccessibleName(this._repeatCountElement,accessibleName);}
get text(){return this._message.messageText;}
toExportString(){const lines=[];const nodes=this.contentElement().childTextNodes();const messageContent=nodes.map(Components.Linkifier.untruncatedNodeText).join('');for(let i=0;i<this.repeatCount();++i){lines.push(messageContent);}
return lines.join('\n');}
setSearchRegex(regex){if(this._searchHiglightNodeChanges&&this._searchHiglightNodeChanges.length){UI.revertDomChanges(this._searchHiglightNodeChanges);}
this._searchRegex=regex;this._searchHighlightNodes=[];this._searchHiglightNodeChanges=[];if(!this._searchRegex){return;}
const text=this.contentElement().deepTextContent();let match;this._searchRegex.lastIndex=0;const sourceRanges=[];while((match=this._searchRegex.exec(text))&&match[0]){sourceRanges.push(new TextUtils.SourceRange(match.index,match[0].length));}
if(sourceRanges.length){this._searchHighlightNodes=UI.highlightSearchResults(this.contentElement(),sourceRanges,this._searchHiglightNodeChanges);}}
searchRegex(){return this._searchRegex;}
searchCount(){return this._searchHighlightNodes.length;}
searchHighlightNode(index){return this._searchHighlightNodes[index];}
_tryFormatAsError(string){function startsWith(prefix){return string.startsWith(prefix);}
const errorPrefixes=['EvalError','ReferenceError','SyntaxError','TypeError','RangeError','Error','URIError'];if(!this._message.runtimeModel()||!errorPrefixes.some(startsWith)){return null;}
const debuggerModel=this._message.runtimeModel().debuggerModel();const baseURL=this._message.runtimeModel().target().inspectedURL();const lines=string.split('\n');const links=[];let position=0;for(let i=0;i<lines.length;++i){position+=i>0?lines[i-1].length+1:0;const isCallFrameLine=/^\s*at\s/.test(lines[i]);if(!isCallFrameLine&&links.length){return null;}
if(!isCallFrameLine){continue;}
let openBracketIndex=-1;let closeBracketIndex=-1;const inBracketsWithLineAndColumn=/\([^\)\(]+:\d+:\d+\)/g;const inBrackets=/\([^\)\(]+\)/g;let lastMatch=null;let currentMatch;while((currentMatch=inBracketsWithLineAndColumn.exec(lines[i]))){lastMatch=currentMatch;}
if(!lastMatch){while((currentMatch=inBrackets.exec(lines[i]))){lastMatch=currentMatch;}}
if(lastMatch){openBracketIndex=lastMatch.index;closeBracketIndex=lastMatch.index+lastMatch[0].length-1;}
const hasOpenBracket=openBracketIndex!==-1;const left=hasOpenBracket?openBracketIndex+1:lines[i].indexOf('at')+3;const right=hasOpenBracket?closeBracketIndex:lines[i].length;const linkCandidate=lines[i].substring(left,right);const splitResult=Common.ParsedURL.splitLineAndColumn(linkCandidate);if(!splitResult){return null;}
if(splitResult.url==='<anonymous>'){continue;}
let url=parseOrScriptMatch(splitResult.url);if(!url&&Common.ParsedURL.isRelativeURL(splitResult.url)){url=parseOrScriptMatch(Common.ParsedURL.completeURL(baseURL,splitResult.url));}
if(!url){return null;}
links.push({url:url,positionLeft:position+left,positionRight:position+right,lineNumber:splitResult.lineNumber,columnNumber:splitResult.columnNumber});}
if(!links.length){return null;}
const formattedResult=createElement('span');let start=0;for(let i=0;i<links.length;++i){formattedResult.appendChild(this._linkifyStringAsFragment(string.substring(start,links[i].positionLeft)));const scriptLocationLink=this._linkifier.linkifyScriptLocation(debuggerModel.target(),null,links[i].url,links[i].lineNumber,links[i].columnNumber);scriptLocationLink.tabIndex=-1;this._selectableChildren.push({element:scriptLocationLink,forceSelect:()=>scriptLocationLink.focus()});formattedResult.appendChild(scriptLocationLink);start=links[i].positionRight;}
if(start!==string.length){formattedResult.appendChild(this._linkifyStringAsFragment(string.substring(start)));}
return formattedResult;function parseOrScriptMatch(url){if(!url){return null;}
const parsedURL=url.asParsedURL();if(parsedURL){return parsedURL.url;}
if(debuggerModel.scriptsForSourceURL(url).length){return url;}
return null;}}
_linkifyWithCustomLinkifier(string,linkifier){if(string.length>Console.ConsoleViewMessage._MaxTokenizableStringLength){return UI.createExpandableText(string,Console.ConsoleViewMessage._LongStringVisibleLength);}
const container=createDocumentFragment();const tokens=Console.ConsoleViewMessage._tokenizeMessageText(string);for(const token of tokens){if(!token.text){continue;}
switch(token.type){case'url':{const realURL=(token.text.startsWith('www.')?'http://'+token.text:token.text);const splitResult=Common.ParsedURL.splitLineAndColumn(realURL);let linkNode;if(splitResult){linkNode=linkifier(token.text,splitResult.url,splitResult.lineNumber,splitResult.columnNumber);}else{linkNode=linkifier(token.text,token.value);}
container.appendChild(linkNode);break;}
default:container.appendChild(createTextNode(token.text));break;}}
return container;}
_linkifyStringAsFragment(string){return this._linkifyWithCustomLinkifier(string,(text,url,lineNumber,columnNumber)=>{const linkElement=Components.Linkifier.linkifyURL(url,{text,lineNumber,columnNumber});linkElement.tabIndex=-1;this._selectableChildren.push({element:linkElement,forceSelect:()=>linkElement.focus()});return linkElement;});}
static _tokenizeMessageText(string){if(!Console.ConsoleViewMessage._tokenizerRegexes){const controlCodes='\\u0000-\\u0020\\u007f-\\u009f';const linkStringRegex=new RegExp('(?:[a-zA-Z][a-zA-Z0-9+.-]{2,}:\\/\\/|data:|www\\.)[^\\s'+controlCodes+'"]{2,}[^\\s'+controlCodes+'"\')}\\],:;.!?]','u');const pathLineRegex=/(?:\/[\w\.-]*)+\:[\d]+/;const timeRegex=/took [\d]+ms/;const eventRegex=/'\w+' event/;const milestoneRegex=/\sM[6-7]\d/;const autofillRegex=/\(suggested: \"[\w-]+\"\)/;const handlers=new Map();handlers.set(linkStringRegex,'url');handlers.set(pathLineRegex,'url');handlers.set(timeRegex,'time');handlers.set(eventRegex,'event');handlers.set(milestoneRegex,'milestone');handlers.set(autofillRegex,'autofill');Console.ConsoleViewMessage._tokenizerRegexes=Array.from(handlers.keys());Console.ConsoleViewMessage._tokenizerTypes=Array.from(handlers.values());}
if(string.length>Console.ConsoleViewMessage._MaxTokenizableStringLength){return[{text:string,type:undefined}];}
const results=TextUtils.TextUtils.splitStringByRegexes(string,Console.ConsoleViewMessage._tokenizerRegexes);return results.map(result=>({text:result.value,type:Console.ConsoleViewMessage._tokenizerTypes[result.regexIndex]}));}
groupKey(){if(!this._groupKey){this._groupKey=this._message.groupCategoryKey()+':'+this.groupTitle();}
return this._groupKey;}
groupTitle(){const tokens=Console.ConsoleViewMessage._tokenizeMessageText(this._message.messageText);const result=tokens.reduce((acc,token)=>{let text=token.text;if(token.type==='url'){text=Common.UIString('<URL>');}else if(token.type==='time'){text=Common.UIString('took <N>ms');}else if(token.type==='event'){text=Common.UIString('<some> event');}else if(token.type==='milestone'){text=Common.UIString(' M<XX>');}else if(token.type==='autofill'){text=Common.UIString('<attribute>');}
return acc+text;},'');return result.replace(/[%]o/g,'');}}
export class ConsoleGroupViewMessage extends ConsoleViewMessage{constructor(consoleMessage,linkifier,nestingLevel,onToggle,onResize){console.assert(consoleMessage.isGroupStartMessage());super(consoleMessage,linkifier,nestingLevel,onResize);this._collapsed=consoleMessage.type===SDK.ConsoleMessage.MessageType.StartGroupCollapsed;this._expandGroupIcon=null;this._onToggle=onToggle;}
_setCollapsed(collapsed){this._collapsed=collapsed;if(this._expandGroupIcon){this._expandGroupIcon.setIconType(this._collapsed?'smallicon-triangle-right':'smallicon-triangle-down');}
this._onToggle.call(null);}
collapsed(){return this._collapsed;}
maybeHandleOnKeyDown(event){const focusedChildIndex=this._focusedChildIndex();if(focusedChildIndex===-1){if((event.key==='ArrowLeft'&&!this._collapsed)||(event.key==='ArrowRight'&&this._collapsed)){this._setCollapsed(!this._collapsed);return true;}}
return super.maybeHandleOnKeyDown(event);}
toMessageElement(){if(!this._element){super.toMessageElement();const iconType=this._collapsed?'smallicon-triangle-right':'smallicon-triangle-down';this._expandGroupIcon=UI.Icon.create(iconType,'expand-group-icon');this._contentElement.tabIndex=-1;if(this._repeatCountElement){this._repeatCountElement.insertBefore(this._expandGroupIcon,this._repeatCountElement.firstChild);}else{this._element.insertBefore(this._expandGroupIcon,this._contentElement);}
this._element.addEventListener('click',()=>this._setCollapsed(!this._collapsed));}
return this._element;}
_showRepeatCountElement(){super._showRepeatCountElement();if(this._repeatCountElement&&this._expandGroupIcon){this._repeatCountElement.insertBefore(this._expandGroupIcon,this._repeatCountElement.firstChild);}}}
export const MaxLengthForLinks=40;export const _MaxTokenizableStringLength=10000;export const _LongStringVisibleLength=5000;self.Console=self.Console||{};Console=Console||{};Console.ConsoleViewMessage=ConsoleViewMessage;Console.ConsoleGroupViewMessage=ConsoleGroupViewMessage;Console.ConsoleViewMessage.MaxLengthForLinks=MaxLengthForLinks;Console.ConsoleViewMessage._MaxTokenizableStringLength=_MaxTokenizableStringLength;Console.ConsoleViewMessage._LongStringVisibleLength=_LongStringVisibleLength;export default class ConsoleViewport{constructor(provider){this.element=createElement('div');this.element.style.overflow='auto';this._topGapElement=this.element.createChild('div');this._topGapElement.style.height='0px';this._topGapElement.style.color='transparent';this._contentElement=this.element.createChild('div');this._bottomGapElement=this.element.createChild('div');this._bottomGapElement.style.height='0px';this._bottomGapElement.style.color='transparent';this._topGapElement.textContent='\uFEFF';this._bottomGapElement.textContent='\uFEFF';UI.ARIAUtils.markAsHidden(this._topGapElement);UI.ARIAUtils.markAsHidden(this._bottomGapElement);this._provider=provider;this.element.addEventListener('scroll',this._onScroll.bind(this),false);this.element.addEventListener('copy',this._onCopy.bind(this),false);this.element.addEventListener('dragstart',this._onDragStart.bind(this),false);this._contentElement.addEventListener('focusin',this._onFocusIn.bind(this),false);this._contentElement.addEventListener('focusout',this._onFocusOut.bind(this),false);this._contentElement.addEventListener('keydown',this._onKeyDown.bind(this),false);this._virtualSelectedIndex=-1;this._contentElement.tabIndex=-1;this._firstActiveIndex=-1;this._lastActiveIndex=-1;this._renderedItems=[];this._anchorSelection=null;this._headSelection=null;this._itemCount=0;this._cumulativeHeights=new Int32Array(0);this._muteCopyHandler=false;this._observer=new MutationObserver(this.refresh.bind(this));this._observerConfig={childList:true,subtree:true};}
stickToBottom(){return this._stickToBottom;}
setStickToBottom(value){this._stickToBottom=value;if(this._stickToBottom){this._observer.observe(this._contentElement,this._observerConfig);}else{this._observer.disconnect();}}
hasVirtualSelection(){return this._virtualSelectedIndex!==-1;}
copyWithStyles(){this._muteCopyHandler=true;this.element.ownerDocument.execCommand('copy');this._muteCopyHandler=false;}
_onCopy(event){if(this._muteCopyHandler){return;}
const text=this._selectedText();if(!text){return;}
event.preventDefault();event.clipboardData.setData('text/plain',text);}
_onFocusIn(event){const renderedIndex=this._renderedItems.findIndex(item=>item.element().isSelfOrAncestor(event.target));if(renderedIndex!==-1){this._virtualSelectedIndex=this._firstActiveIndex+renderedIndex;}
let focusLastChild=false;if(this._virtualSelectedIndex===-1&&this._isOutsideViewport((event.relatedTarget))&&event.target===this._contentElement&&this._itemCount){focusLastChild=true;this._virtualSelectedIndex=this._itemCount-1;this.refresh();this.scrollItemIntoView(this._virtualSelectedIndex);}
this._updateFocusedItem(focusLastChild);}
_onFocusOut(event){if(this._isOutsideViewport((event.relatedTarget))){this._virtualSelectedIndex=-1;}
this._updateFocusedItem();}
_isOutsideViewport(element){return!!element&&!element.isSelfOrDescendant(this._contentElement);}
_onDragStart(event){const text=this._selectedText();if(!text){return false;}
event.dataTransfer.clearData();event.dataTransfer.setData('text/plain',text);event.dataTransfer.effectAllowed='copy';return true;}
_onKeyDown(event){if(UI.isEditing()||!this._itemCount||event.shiftKey){return;}
let isArrowUp=false;switch(event.key){case'ArrowUp':if(this._virtualSelectedIndex>0){isArrowUp=true;this._virtualSelectedIndex--;}else{return;}
break;case'ArrowDown':if(this._virtualSelectedIndex<this._itemCount-1){this._virtualSelectedIndex++;}else{return;}
break;case'Home':this._virtualSelectedIndex=0;break;case'End':this._virtualSelectedIndex=this._itemCount-1;break;default:return;}
event.consume(true);this.scrollItemIntoView(this._virtualSelectedIndex);this._updateFocusedItem(isArrowUp);}
_updateFocusedItem(focusLastChild){const selectedElement=this.renderedElementAt(this._virtualSelectedIndex);const changed=this._lastSelectedElement!==selectedElement;const containerHasFocus=this._contentElement===this.element.ownerDocument.deepActiveElement();if(this._lastSelectedElement&&changed){this._lastSelectedElement.classList.remove('console-selected');}
if(selectedElement&&(focusLastChild||changed||containerHasFocus)&&this.element.hasFocus()){selectedElement.classList.add('console-selected');if(focusLastChild){this.setStickToBottom(false);this._renderedItems[this._virtualSelectedIndex-this._firstActiveIndex].focusLastChildOrSelf();}else if(!selectedElement.hasFocus()){focusWithoutScroll(selectedElement);}}
if(this._itemCount&&!this._contentElement.hasFocus()){this._contentElement.tabIndex=0;}else{this._contentElement.tabIndex=-1;}
this._lastSelectedElement=selectedElement;function focusWithoutScroll(element){element.focus({preventScroll:true});}}
contentElement(){return this._contentElement;}
invalidate(){delete this._cachedProviderElements;this._itemCount=this._provider.itemCount();if(this._virtualSelectedIndex>this._itemCount-1){this._virtualSelectedIndex=this._itemCount-1;}
this._rebuildCumulativeHeights();this.refresh();}
_providerElement(index){if(!this._cachedProviderElements){this._cachedProviderElements=new Array(this._itemCount);}
let element=this._cachedProviderElements[index];if(!element){element=this._provider.itemElement(index);this._cachedProviderElements[index]=element;}
return element;}
_rebuildCumulativeHeights(){const firstActiveIndex=this._firstActiveIndex;const lastActiveIndex=this._lastActiveIndex;let height=0;this._cumulativeHeights=new Int32Array(this._itemCount);for(let i=0;i<this._itemCount;++i){if(firstActiveIndex<=i&&i-firstActiveIndex<this._renderedItems.length&&i<=lastActiveIndex){height+=this._renderedItems[i-firstActiveIndex].element().offsetHeight;}else{height+=this._provider.fastHeight(i);}
this._cumulativeHeights[i]=height;}}
_rebuildCumulativeHeightsIfNeeded(){let totalCachedHeight=0;let totalMeasuredHeight=0;for(let i=0;i<this._renderedItems.length;++i){const cachedItemHeight=this._cachedItemHeight(this._firstActiveIndex+i);const measuredHeight=this._renderedItems[i].element().offsetHeight;if(Math.abs(cachedItemHeight-measuredHeight)>1){this._rebuildCumulativeHeights();return;}
totalMeasuredHeight+=measuredHeight;totalCachedHeight+=cachedItemHeight;if(Math.abs(totalCachedHeight-totalMeasuredHeight)>1){this._rebuildCumulativeHeights();return;}}}
_cachedItemHeight(index){return index===0?this._cumulativeHeights[0]:this._cumulativeHeights[index]-this._cumulativeHeights[index-1];}
_isSelectionBackwards(selection){if(!selection||!selection.rangeCount){return false;}
const range=document.createRange();range.setStart(selection.anchorNode,selection.anchorOffset);range.setEnd(selection.focusNode,selection.focusOffset);return range.collapsed;}
_createSelectionModel(itemIndex,node,offset){return{item:itemIndex,node:node,offset:offset};}
_updateSelectionModel(selection){const range=selection&&selection.rangeCount?selection.getRangeAt(0):null;if(!range||selection.isCollapsed||!this.element.hasSelection()){this._headSelection=null;this._anchorSelection=null;return false;}
let firstSelected=Number.MAX_VALUE;let lastSelected=-1;let hasVisibleSelection=false;for(let i=0;i<this._renderedItems.length;++i){if(range.intersectsNode(this._renderedItems[i].element())){const index=i+this._firstActiveIndex;firstSelected=Math.min(firstSelected,index);lastSelected=Math.max(lastSelected,index);hasVisibleSelection=true;}}
if(hasVisibleSelection){firstSelected=this._createSelectionModel(firstSelected,(range.startContainer),range.startOffset);lastSelected=this._createSelectionModel(lastSelected,(range.endContainer),range.endOffset);}
const topOverlap=range.intersectsNode(this._topGapElement)&&this._topGapElement._active;const bottomOverlap=range.intersectsNode(this._bottomGapElement)&&this._bottomGapElement._active;if(!topOverlap&&!bottomOverlap&&!hasVisibleSelection){this._headSelection=null;this._anchorSelection=null;return false;}
if(!this._anchorSelection||!this._headSelection){this._anchorSelection=this._createSelectionModel(0,this.element,0);this._headSelection=this._createSelectionModel(this._itemCount-1,this.element,this.element.children.length);this._selectionIsBackward=false;}
const isBackward=this._isSelectionBackwards(selection);const startSelection=this._selectionIsBackward?this._headSelection:this._anchorSelection;const endSelection=this._selectionIsBackward?this._anchorSelection:this._headSelection;if(topOverlap&&bottomOverlap&&hasVisibleSelection){firstSelected=firstSelected.item<startSelection.item?firstSelected:startSelection;lastSelected=lastSelected.item>endSelection.item?lastSelected:endSelection;}else if(!hasVisibleSelection){firstSelected=startSelection;lastSelected=endSelection;}else if(topOverlap){firstSelected=isBackward?this._headSelection:this._anchorSelection;}else if(bottomOverlap){lastSelected=isBackward?this._anchorSelection:this._headSelection;}
if(isBackward){this._anchorSelection=lastSelected;this._headSelection=firstSelected;}else{this._anchorSelection=firstSelected;this._headSelection=lastSelected;}
this._selectionIsBackward=isBackward;return true;}
_restoreSelection(selection){let anchorElement=null;let anchorOffset;if(this._firstActiveIndex<=this._anchorSelection.item&&this._anchorSelection.item<=this._lastActiveIndex){anchorElement=this._anchorSelection.node;anchorOffset=this._anchorSelection.offset;}else{if(this._anchorSelection.item<this._firstActiveIndex){anchorElement=this._topGapElement;}else if(this._anchorSelection.item>this._lastActiveIndex){anchorElement=this._bottomGapElement;}
anchorOffset=this._selectionIsBackward?1:0;}
let headElement=null;let headOffset;if(this._firstActiveIndex<=this._headSelection.item&&this._headSelection.item<=this._lastActiveIndex){headElement=this._headSelection.node;headOffset=this._headSelection.offset;}else{if(this._headSelection.item<this._firstActiveIndex){headElement=this._topGapElement;}else if(this._headSelection.item>this._lastActiveIndex){headElement=this._bottomGapElement;}
headOffset=this._selectionIsBackward?0:1;}
selection.setBaseAndExtent(anchorElement,anchorOffset,headElement,headOffset);}
refresh(){this._observer.disconnect();this._innerRefresh();if(this._stickToBottom){this._observer.observe(this._contentElement,this._observerConfig);}}
_innerRefresh(){if(!this._visibleHeight()){return;}
if(!this._itemCount){for(let i=0;i<this._renderedItems.length;++i){this._renderedItems[i].willHide();}
this._renderedItems=[];this._contentElement.removeChildren();this._topGapElement.style.height='0px';this._bottomGapElement.style.height='0px';this._firstActiveIndex=-1;this._lastActiveIndex=-1;this._updateFocusedItem();return;}
const selection=this.element.getComponentSelection();const shouldRestoreSelection=this._updateSelectionModel(selection);const visibleFrom=this.element.scrollTop;const visibleHeight=this._visibleHeight();const activeHeight=visibleHeight*2;this._rebuildCumulativeHeightsIfNeeded();if(this._stickToBottom){this._firstActiveIndex=Math.max(this._itemCount-Math.ceil(activeHeight/this._provider.minimumRowHeight()),0);this._lastActiveIndex=this._itemCount-1;}else{this._firstActiveIndex=Math.max(this._cumulativeHeights.lowerBound(visibleFrom+1-(activeHeight-visibleHeight)/2),0);this._lastActiveIndex=this._firstActiveIndex+Math.ceil(activeHeight/this._provider.minimumRowHeight())-1;this._lastActiveIndex=Math.min(this._lastActiveIndex,this._itemCount-1);}
const topGapHeight=this._cumulativeHeights[this._firstActiveIndex-1]||0;const bottomGapHeight=this._cumulativeHeights[this._cumulativeHeights.length-1]-this._cumulativeHeights[this._lastActiveIndex];function prepare(){this._topGapElement.style.height=topGapHeight+'px';this._bottomGapElement.style.height=bottomGapHeight+'px';this._topGapElement._active=!!topGapHeight;this._bottomGapElement._active=!!bottomGapHeight;this._contentElement.style.setProperty('height','10000000px');}
this._partialViewportUpdate(prepare.bind(this));this._contentElement.style.removeProperty('height');if(shouldRestoreSelection){this._restoreSelection(selection);}
if(this._stickToBottom){this.element.scrollTop=10000000;}}
_partialViewportUpdate(prepare){const itemsToRender=new Set();for(let i=this._firstActiveIndex;i<=this._lastActiveIndex;++i){itemsToRender.add(this._providerElement(i));}
const willBeHidden=this._renderedItems.filter(item=>!itemsToRender.has(item));for(let i=0;i<willBeHidden.length;++i){willBeHidden[i].willHide();}
prepare();let hadFocus=false;for(let i=0;i<willBeHidden.length;++i){hadFocus=hadFocus||willBeHidden[i].element().hasFocus();willBeHidden[i].element().remove();}
const wasShown=[];let anchor=this._contentElement.firstChild;for(const viewportElement of itemsToRender){const element=viewportElement.element();if(element!==anchor){const shouldCallWasShown=!element.parentElement;if(shouldCallWasShown){wasShown.push(viewportElement);}
this._contentElement.insertBefore(element,anchor);}else{anchor=anchor.nextSibling;}}
for(let i=0;i<wasShown.length;++i){wasShown[i].wasShown();}
this._renderedItems=Array.from(itemsToRender);if(hadFocus){this._contentElement.focus();}
this._updateFocusedItem();}
_selectedText(){this._updateSelectionModel(this.element.getComponentSelection());if(!this._headSelection||!this._anchorSelection){return null;}
let startSelection=null;let endSelection=null;if(this._selectionIsBackward){startSelection=this._headSelection;endSelection=this._anchorSelection;}else{startSelection=this._anchorSelection;endSelection=this._headSelection;}
const textLines=[];for(let i=startSelection.item;i<=endSelection.item;++i){const element=this._providerElement(i).element();const lineContent=element.childTextNodes().map(Components.Linkifier.untruncatedNodeText).join('');textLines.push(lineContent);}
const endSelectionElement=this._providerElement(endSelection.item).element();if(endSelection.node&&endSelection.node.isSelfOrDescendant(endSelectionElement)){const itemTextOffset=this._textOffsetInNode(endSelectionElement,endSelection.node,endSelection.offset);textLines[textLines.length-1]=textLines.peekLast().substring(0,itemTextOffset);}
const startSelectionElement=this._providerElement(startSelection.item).element();if(startSelection.node&&startSelection.node.isSelfOrDescendant(startSelectionElement)){const itemTextOffset=this._textOffsetInNode(startSelectionElement,startSelection.node,startSelection.offset);textLines[0]=textLines[0].substring(itemTextOffset);}
return textLines.join('\n');}
_textOffsetInNode(itemElement,selectionNode,offset){if(selectionNode.nodeType!==Node.TEXT_NODE){if(offset<selectionNode.childNodes.length){selectionNode=(selectionNode.childNodes.item(offset));offset=0;}else{offset=selectionNode.textContent.length;}}
let chars=0;let node=itemElement;while((node=node.traverseNextNode(itemElement))&&node!==selectionNode){if(node.nodeType!==Node.TEXT_NODE||node.parentElement.nodeName==='STYLE'||node.parentElement.nodeName==='SCRIPT'){continue;}
chars+=Components.Linkifier.untruncatedNodeText(node).length;}
const untruncatedContainerLength=Components.Linkifier.untruncatedNodeText(selectionNode).length;if(offset>0&&untruncatedContainerLength!==selectionNode.textContent.length){offset=untruncatedContainerLength;}
return chars+offset;}
_onScroll(event){this.refresh();}
firstVisibleIndex(){if(!this._cumulativeHeights.length){return-1;}
this._rebuildCumulativeHeightsIfNeeded();return this._cumulativeHeights.lowerBound(this.element.scrollTop+1);}
lastVisibleIndex(){if(!this._cumulativeHeights.length){return-1;}
this._rebuildCumulativeHeightsIfNeeded();const scrollBottom=this.element.scrollTop+this.element.clientHeight;const right=this._itemCount-1;return this._cumulativeHeights.lowerBound(scrollBottom,undefined,undefined,right);}
renderedElementAt(index){if(index===-1||index<this._firstActiveIndex||index>this._lastActiveIndex){return null;}
return this._renderedItems[index-this._firstActiveIndex].element();}
scrollItemIntoView(index,makeLast){const firstVisibleIndex=this.firstVisibleIndex();const lastVisibleIndex=this.lastVisibleIndex();if(index>firstVisibleIndex&&index<lastVisibleIndex){return;}
if(index===lastVisibleIndex&&this._cumulativeHeights[index]<=this.element.scrollTop+this._visibleHeight()){return;}
if(makeLast){this.forceScrollItemToBeLast(index);}else if(index<=firstVisibleIndex){this.forceScrollItemToBeFirst(index);}else if(index>=lastVisibleIndex){this.forceScrollItemToBeLast(index);}}
forceScrollItemToBeFirst(index){console.assert(index>=0&&index<this._itemCount,'Cannot scroll item at invalid index');this.setStickToBottom(false);this._rebuildCumulativeHeightsIfNeeded();this.element.scrollTop=index>0?this._cumulativeHeights[index-1]:0;if(this.element.isScrolledToBottom()){this.setStickToBottom(true);}
this.refresh();this.renderedElementAt(index).scrollIntoView(true);}
forceScrollItemToBeLast(index){console.assert(index>=0&&index<this._itemCount,'Cannot scroll item at invalid index');this.setStickToBottom(false);this._rebuildCumulativeHeightsIfNeeded();this.element.scrollTop=this._cumulativeHeights[index]-this._visibleHeight();if(this.element.isScrolledToBottom()){this.setStickToBottom(true);}
this.refresh();this.renderedElementAt(index).scrollIntoView(false);}
_visibleHeight(){return this.element.offsetHeight;}}
class ConsoleViewportProvider{fastHeight(index){return 0;}
itemCount(){return 0;}
minimumRowHeight(){return 0;}
itemElement(index){return null;}}
export class ConsoleViewportElement{willHide(){}
wasShown(){}
element(){}}
self.Console=self.Console||{};Console=Console||{};Console.ConsoleViewport=ConsoleViewport;Console.ConsoleViewportProvider=ConsoleViewportProvider;Console.ConsoleViewportElement=ConsoleViewportElement;import'./AnimationModel.js';import'./AnimationGroupPreviewUI.js';import'./AnimationScreenshotPopover.js';import'./AnimationTimeline.js';import'./AnimationUI.js';import*as AnimationGroupPreviewUI from'./AnimationGroupPreviewUI.js';import*as AnimationModel from'./AnimationModel.js';import*as AnimationScreenshotPopover from'./AnimationScreenshotPopover.js';import*as AnimationTimeline from'./AnimationTimeline.js';import*as AnimationUI from'./AnimationUI.js';export{AnimationGroupPreviewUI,AnimationModel,AnimationScreenshotPopover,AnimationTimeline,AnimationUI,};export default class AnimationUI{constructor(animation,timeline,parentElement){this._animation=animation;this._timeline=timeline;this._parentElement=parentElement;if(this._animation.source().keyframesRule()){this._keyframes=this._animation.source().keyframesRule().keyframes();}
this._nameElement=parentElement.createChild('div','animation-name');this._nameElement.textContent=this._animation.name();this._svg=parentElement.createSVGChild('svg','animation-ui');this._svg.setAttribute('height',Animation.AnimationUI.Options.AnimationSVGHeight);this._svg.style.marginLeft='-'+Animation.AnimationUI.Options.AnimationMargin+'px';this._svg.addEventListener('contextmenu',this._onContextMenu.bind(this));this._activeIntervalGroup=this._svg.createSVGChild('g');UI.installDragHandle(this._activeIntervalGroup,this._mouseDown.bind(this,Animation.AnimationUI.MouseEvents.AnimationDrag,null),this._mouseMove.bind(this),this._mouseUp.bind(this),'-webkit-grabbing','-webkit-grab');this._cachedElements=[];this._movementInMs=0;this._color=Animation.AnimationUI.Color(this._animation);}
static Color(animation){const names=Object.keys(Animation.AnimationUI.Colors);const color=Animation.AnimationUI.Colors[names[String.hashCode(animation.name()||animation.id())%names.length]];return color.asString(Common.Color.Format.RGB);}
animation(){return this._animation;}
setNode(node){this._node=node;}
_createLine(parentElement,className){const line=parentElement.createSVGChild('line',className);line.setAttribute('x1',Animation.AnimationUI.Options.AnimationMargin);line.setAttribute('y1',Animation.AnimationUI.Options.AnimationHeight);line.setAttribute('y2',Animation.AnimationUI.Options.AnimationHeight);line.style.stroke=this._color;return line;}
_drawAnimationLine(iteration,parentElement){const cache=this._cachedElements[iteration];if(!cache.animationLine){cache.animationLine=this._createLine(parentElement,'animation-line');}
cache.animationLine.setAttribute('x2',(this._duration()*this._timeline.pixelMsRatio()+Animation.AnimationUI.Options.AnimationMargin).toFixed(2));}
_drawDelayLine(parentElement){if(!this._delayLine){this._delayLine=this._createLine(parentElement,'animation-delay-line');this._endDelayLine=this._createLine(parentElement,'animation-delay-line');}
const fill=this._animation.source().fill();this._delayLine.classList.toggle('animation-fill',fill==='backwards'||fill==='both');const margin=Animation.AnimationUI.Options.AnimationMargin;this._delayLine.setAttribute('x1',margin);this._delayLine.setAttribute('x2',(this._delay()*this._timeline.pixelMsRatio()+margin).toFixed(2));const forwardsFill=fill==='forwards'||fill==='both';this._endDelayLine.classList.toggle('animation-fill',forwardsFill);const leftMargin=Math.min(this._timeline.width(),(this._delay()+this._duration()*this._animation.source().iterations())*this._timeline.pixelMsRatio());this._endDelayLine.style.transform='translateX('+leftMargin.toFixed(2)+'px)';this._endDelayLine.setAttribute('x1',margin);this._endDelayLine.setAttribute('x2',forwardsFill?(this._timeline.width()-leftMargin+margin).toFixed(2):(this._animation.source().endDelay()*this._timeline.pixelMsRatio()+margin).toFixed(2));}
_drawPoint(iteration,parentElement,x,keyframeIndex,attachEvents){if(this._cachedElements[iteration].keyframePoints[keyframeIndex]){this._cachedElements[iteration].keyframePoints[keyframeIndex].setAttribute('cx',x.toFixed(2));return;}
const circle=parentElement.createSVGChild('circle',keyframeIndex<=0?'animation-endpoint':'animation-keyframe-point');circle.setAttribute('cx',x.toFixed(2));circle.setAttribute('cy',Animation.AnimationUI.Options.AnimationHeight);circle.style.stroke=this._color;circle.setAttribute('r',Animation.AnimationUI.Options.AnimationMargin/2);if(keyframeIndex<=0){circle.style.fill=this._color;}
this._cachedElements[iteration].keyframePoints[keyframeIndex]=circle;if(!attachEvents){return;}
let eventType;if(keyframeIndex===0){eventType=Animation.AnimationUI.MouseEvents.StartEndpointMove;}else if(keyframeIndex===-1){eventType=Animation.AnimationUI.MouseEvents.FinishEndpointMove;}else{eventType=Animation.AnimationUI.MouseEvents.KeyframeMove;}
UI.installDragHandle(circle,this._mouseDown.bind(this,eventType,keyframeIndex),this._mouseMove.bind(this),this._mouseUp.bind(this),'ew-resize');}
_renderKeyframe(iteration,keyframeIndex,parentElement,leftDistance,width,easing){function createStepLine(parentElement,x,strokeColor){const line=parentElement.createSVGChild('line');line.setAttribute('x1',x);line.setAttribute('x2',x);line.setAttribute('y1',Animation.AnimationUI.Options.AnimationMargin);line.setAttribute('y2',Animation.AnimationUI.Options.AnimationHeight);line.style.stroke=strokeColor;}
const bezier=UI.Geometry.CubicBezier.parse(easing);const cache=this._cachedElements[iteration].keyframeRender;if(!cache[keyframeIndex]){cache[keyframeIndex]=bezier?parentElement.createSVGChild('path','animation-keyframe'):parentElement.createSVGChild('g','animation-keyframe-step');}
const group=cache[keyframeIndex];group.style.transform='translateX('+leftDistance.toFixed(2)+'px)';if(easing==='linear'){group.style.fill=this._color;const height=InlineEditor.BezierUI.Height;group.setAttribute('d',['M',0,height,'L',0,5,'L',width.toFixed(2),5,'L',width.toFixed(2),height,'Z'].join(' '));}else if(bezier){group.style.fill=this._color;InlineEditor.BezierUI.drawVelocityChart(bezier,group,width);}else{const stepFunction=Animation.AnimationTimeline.StepTimingFunction.parse(easing);group.removeChildren();const offsetMap={'start':0,'middle':0.5,'end':1};const offsetWeight=offsetMap[stepFunction.stepAtPosition];for(let i=0;i<stepFunction.steps;i++){createStepLine(group,(i+offsetWeight)*width/stepFunction.steps,this._color);}}}
redraw(){const maxWidth=this._timeline.width()-Animation.AnimationUI.Options.AnimationMargin;this._svg.setAttribute('width',(maxWidth+2*Animation.AnimationUI.Options.AnimationMargin).toFixed(2));this._activeIntervalGroup.style.transform='translateX('+(this._delay()*this._timeline.pixelMsRatio()).toFixed(2)+'px)';this._nameElement.style.transform='translateX('+
(this._delay()*this._timeline.pixelMsRatio()+Animation.AnimationUI.Options.AnimationMargin).toFixed(2)+'px)';this._nameElement.style.width=(this._duration()*this._timeline.pixelMsRatio()).toFixed(2)+'px';this._drawDelayLine(this._svg);if(this._animation.type()==='CSSTransition'){this._renderTransition();return;}
this._renderIteration(this._activeIntervalGroup,0);if(!this._tailGroup){this._tailGroup=this._activeIntervalGroup.createSVGChild('g','animation-tail-iterations');}
const iterationWidth=this._duration()*this._timeline.pixelMsRatio();let iteration;for(iteration=1;iteration<this._animation.source().iterations()&&iterationWidth*(iteration-1)<this._timeline.width();iteration++){this._renderIteration(this._tailGroup,iteration);}
while(iteration<this._cachedElements.length){this._cachedElements.pop().group.remove();}}
_renderTransition(){if(!this._cachedElements[0]){this._cachedElements[0]={animationLine:null,keyframePoints:{},keyframeRender:{},group:null};}
this._drawAnimationLine(0,this._activeIntervalGroup);this._renderKeyframe(0,0,this._activeIntervalGroup,Animation.AnimationUI.Options.AnimationMargin,this._duration()*this._timeline.pixelMsRatio(),this._animation.source().easing());this._drawPoint(0,this._activeIntervalGroup,Animation.AnimationUI.Options.AnimationMargin,0,true);this._drawPoint(0,this._activeIntervalGroup,this._duration()*this._timeline.pixelMsRatio()+Animation.AnimationUI.Options.AnimationMargin,-1,true);}
_renderIteration(parentElement,iteration){if(!this._cachedElements[iteration]){this._cachedElements[iteration]={animationLine:null,keyframePoints:{},keyframeRender:{},group:parentElement.createSVGChild('g')};}
const group=this._cachedElements[iteration].group;group.style.transform='translateX('+(iteration*this._duration()*this._timeline.pixelMsRatio()).toFixed(2)+'px)';this._drawAnimationLine(iteration,group);console.assert(this._keyframes.length>1);for(let i=0;i<this._keyframes.length-1;i++){const leftDistance=this._offset(i)*this._duration()*this._timeline.pixelMsRatio()+
Animation.AnimationUI.Options.AnimationMargin;const width=this._duration()*(this._offset(i+1)-this._offset(i))*this._timeline.pixelMsRatio();this._renderKeyframe(iteration,i,group,leftDistance,width,this._keyframes[i].easing());if(i||(!i&&iteration===0)){this._drawPoint(iteration,group,leftDistance,i,iteration===0);}}
this._drawPoint(iteration,group,this._duration()*this._timeline.pixelMsRatio()+Animation.AnimationUI.Options.AnimationMargin,-1,iteration===0);}
_delay(){let delay=this._animation.source().delay();if(this._mouseEventType===Animation.AnimationUI.MouseEvents.AnimationDrag||this._mouseEventType===Animation.AnimationUI.MouseEvents.StartEndpointMove){delay+=this._movementInMs;}
return Math.max(0,delay);}
_duration(){let duration=this._animation.source().duration();if(this._mouseEventType===Animation.AnimationUI.MouseEvents.FinishEndpointMove){duration+=this._movementInMs;}else if(this._mouseEventType===Animation.AnimationUI.MouseEvents.StartEndpointMove){duration-=Math.max(this._movementInMs,-this._animation.source().delay());}
return Math.max(0,duration);}
_offset(i){let offset=this._keyframes[i].offsetAsNumber();if(this._mouseEventType===Animation.AnimationUI.MouseEvents.KeyframeMove&&i===this._keyframeMoved){console.assert(i>0&&i<this._keyframes.length-1,'First and last keyframe cannot be moved');offset+=this._movementInMs/this._animation.source().duration();offset=Math.max(offset,this._keyframes[i-1].offsetAsNumber());offset=Math.min(offset,this._keyframes[i+1].offsetAsNumber());}
return offset;}
_mouseDown(mouseEventType,keyframeIndex,event){if(event.buttons===2){return false;}
if(this._svg.enclosingNodeOrSelfWithClass('animation-node-removed')){return false;}
this._mouseEventType=mouseEventType;this._keyframeMoved=keyframeIndex;this._downMouseX=event.clientX;event.consume(true);if(this._node){Common.Revealer.reveal(this._node);}
return true;}
_mouseMove(event){this._movementInMs=(event.clientX-this._downMouseX)/this._timeline.pixelMsRatio();if(this._delay()+this._duration()>this._timeline.duration()*0.8){this._timeline.setDuration(this._timeline.duration()*1.2);}
this.redraw();}
_mouseUp(event){this._movementInMs=(event.clientX-this._downMouseX)/this._timeline.pixelMsRatio();if(this._mouseEventType===Animation.AnimationUI.MouseEvents.KeyframeMove){this._keyframes[this._keyframeMoved].setOffset(this._offset(this._keyframeMoved));}else{this._animation.setTiming(this._duration(),this._delay());}
this._movementInMs=0;this.redraw();delete this._mouseEventType;delete this._downMouseX;delete this._keyframeMoved;}
_onContextMenu(event){function showContextMenu(remoteObject){if(!remoteObject){return;}
const contextMenu=new UI.ContextMenu(event);contextMenu.appendApplicableItems(remoteObject);contextMenu.show();}
this._animation.remoteObjectPromise().then(showContextMenu);event.consume(true);}}
export const MouseEvents={AnimationDrag:'AnimationDrag',KeyframeMove:'KeyframeMove',StartEndpointMove:'StartEndpointMove',FinishEndpointMove:'FinishEndpointMove'};export const Options={AnimationHeight:26,AnimationSVGHeight:50,AnimationMargin:7,EndpointsClickRegionSize:10,GridCanvasHeight:40};export const Colors={'Purple':Common.Color.parse('#9C27B0'),'Light Blue':Common.Color.parse('#03A9F4'),'Deep Orange':Common.Color.parse('#FF5722'),'Blue':Common.Color.parse('#5677FC'),'Lime':Common.Color.parse('#CDDC39'),'Blue Grey':Common.Color.parse('#607D8B'),'Pink':Common.Color.parse('#E91E63'),'Green':Common.Color.parse('#0F9D58'),'Brown':Common.Color.parse('#795548'),'Cyan':Common.Color.parse('#00BCD4')};self.Animation=self.Animation||{};Animation=Animation||{};Animation.AnimationUI=AnimationUI;Animation.AnimationUI.MouseEvents=MouseEvents;Animation.AnimationUI.Options=Options;Animation.AnimationUI.Colors=Colors;export default class AnimationTimeline extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('animation/animationTimeline.css');this.element.classList.add('animations-timeline');this._grid=this.contentElement.createSVGChild('svg','animation-timeline-grid');this._playbackRate=1;this._allPaused=false;this._createHeader();this._animationsContainer=this.contentElement.createChild('div','animation-timeline-rows');const timelineHint=this.contentElement.createChild('div','animation-timeline-rows-hint');timelineHint.textContent=ls`Select an effect above to inspect and modify.`;this._defaultDuration=100;this._duration=this._defaultDuration;this._timelineControlsWidth=150;this._nodesMap=new Map();this._uiAnimations=[];this._groupBuffer=[];this._previewMap=new Map();this._symbol=Symbol('animationTimeline');this._animationsMap=new Map();SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.NodeRemoved,this._nodeRemoved,this);SDK.targetManager.observeModels(Animation.AnimationModel,this);UI.context.addFlavorChangeListener(SDK.DOMNode,this._nodeChanged,this);}
wasShown(){for(const animationModel of SDK.targetManager.models(Animation.AnimationModel)){this._addEventListeners(animationModel);}}
willHide(){for(const animationModel of SDK.targetManager.models(Animation.AnimationModel)){this._removeEventListeners(animationModel);}
this._popoverHelper.hidePopover();}
modelAdded(animationModel){if(this.isShowing()){this._addEventListeners(animationModel);}}
modelRemoved(animationModel){this._removeEventListeners(animationModel);}
_addEventListeners(animationModel){animationModel.ensureEnabled();animationModel.addEventListener(Animation.AnimationModel.Events.AnimationGroupStarted,this._animationGroupStarted,this);animationModel.addEventListener(Animation.AnimationModel.Events.ModelReset,this._reset,this);}
_removeEventListeners(animationModel){animationModel.removeEventListener(Animation.AnimationModel.Events.AnimationGroupStarted,this._animationGroupStarted,this);animationModel.removeEventListener(Animation.AnimationModel.Events.ModelReset,this._reset,this);}
_nodeChanged(){for(const nodeUI of this._nodesMap.values()){nodeUI._nodeChanged();}}
_createScrubber(){this._timelineScrubber=createElementWithClass('div','animation-scrubber hidden');this._timelineScrubberLine=this._timelineScrubber.createChild('div','animation-scrubber-line');this._timelineScrubberLine.createChild('div','animation-scrubber-head');this._timelineScrubber.createChild('div','animation-time-overlay');return this._timelineScrubber;}
_createHeader(){const toolbarContainer=this.contentElement.createChild('div','animation-timeline-toolbar-container');const topToolbar=new UI.Toolbar('animation-timeline-toolbar',toolbarContainer);const clearButton=new UI.ToolbarButton(ls`Clear all`,'largeicon-clear');clearButton.addEventListener(UI.ToolbarButton.Events.Click,this._reset.bind(this));topToolbar.appendToolbarItem(clearButton);topToolbar.appendSeparator();this._pauseButton=new UI.ToolbarToggle(ls`Pause all`,'largeicon-pause','largeicon-resume');this._pauseButton.addEventListener(UI.ToolbarButton.Events.Click,this._togglePauseAll.bind(this));topToolbar.appendToolbarItem(this._pauseButton);const playbackRateControl=toolbarContainer.createChild('div','animation-playback-rate-control');this._playbackRateButtons=[];for(const playbackRate of Animation.AnimationTimeline.GlobalPlaybackRates){const button=playbackRateControl.createChild('div','animation-playback-rate-button');button.textContent=playbackRate?ls`${playbackRate * 100}%`:ls`Pause`;button.playbackRate=playbackRate;button.addEventListener('click',this._setPlaybackRate.bind(this,playbackRate));button.title=ls`Set speed to ${button.textContent}`;this._playbackRateButtons.push(button);}
this._updatePlaybackControls();this._previewContainer=this.contentElement.createChild('div','animation-timeline-buffer');this._popoverHelper=new UI.PopoverHelper(this._previewContainer,this._getPopoverRequest.bind(this));this._popoverHelper.setDisableOnClick(true);this._popoverHelper.setTimeout(0);const emptyBufferHint=this.contentElement.createChild('div','animation-timeline-buffer-hint');emptyBufferHint.textContent=ls`Listening for animations...`;const container=this.contentElement.createChild('div','animation-timeline-header');const controls=container.createChild('div','animation-controls');this._currentTime=controls.createChild('div','animation-timeline-current-time monospace');const toolbar=new UI.Toolbar('animation-controls-toolbar',controls);this._controlButton=new UI.ToolbarToggle(ls`Replay timeline`,'largeicon-replay-animation');this._controlState=Animation.AnimationTimeline._ControlState.Replay;this._controlButton.setToggled(true);this._controlButton.addEventListener(UI.ToolbarButton.Events.Click,this._controlButtonToggle.bind(this));toolbar.appendToolbarItem(this._controlButton);const gridHeader=container.createChild('div','animation-grid-header');UI.installDragHandle(gridHeader,this._repositionScrubber.bind(this),this._scrubberDragMove.bind(this),this._scrubberDragEnd.bind(this),'text');container.appendChild(this._createScrubber());UI.installDragHandle(this._timelineScrubberLine,this._scrubberDragStart.bind(this),this._scrubberDragMove.bind(this),this._scrubberDragEnd.bind(this),'col-resize');this._currentTime.textContent='';return container;}
_getPopoverRequest(event){const element=event.target;if(!element.isDescendant(this._previewContainer)){return null;}
return{box:event.target.boxInWindow(),show:popover=>{let animGroup;for(const group of this._previewMap.keysArray()){if(this._previewMap.get(group).element===element.parentElement){animGroup=group;}}
console.assert(animGroup);const screenshots=animGroup.screenshots();if(!screenshots.length){return Promise.resolve(false);}
let fulfill;const promise=new Promise(x=>fulfill=x);if(!screenshots[0].complete){screenshots[0].onload=onFirstScreenshotLoaded.bind(null,screenshots);}else{onFirstScreenshotLoaded(screenshots);}
return promise;function onFirstScreenshotLoaded(screenshots){new Animation.AnimationScreenshotPopover(screenshots).show(popover.contentElement);fulfill(true);}}};}
_togglePauseAll(){this._allPaused=!this._allPaused;this._pauseButton.setToggled(this._allPaused);this._setPlaybackRate(this._playbackRate);this._pauseButton.setTitle(this._allPaused?ls`Resume all`:ls`Pause all`);}
_setPlaybackRate(playbackRate){this._playbackRate=playbackRate;for(const animationModel of SDK.targetManager.models(Animation.AnimationModel)){animationModel.setPlaybackRate(this._allPaused?0:this._playbackRate);}
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AnimationsPlaybackRateChanged);if(this._scrubberPlayer){this._scrubberPlayer.playbackRate=this._effectivePlaybackRate();}
this._updatePlaybackControls();}
_updatePlaybackControls(){for(const button of this._playbackRateButtons){const selected=this._playbackRate===button.playbackRate;button.classList.toggle('selected',selected);}}
_controlButtonToggle(){if(this._controlState===Animation.AnimationTimeline._ControlState.Play){this._togglePause(false);}else if(this._controlState===Animation.AnimationTimeline._ControlState.Replay){this._replay();}else{this._togglePause(true);}}
_updateControlButton(){this._controlButton.setEnabled(!!this._selectedGroup);if(this._selectedGroup&&this._selectedGroup.paused()){this._controlState=Animation.AnimationTimeline._ControlState.Play;this._controlButton.setToggled(true);this._controlButton.setTitle(ls`Play timeline`);this._controlButton.setGlyph('largeicon-play-animation');}else if(!this._scrubberPlayer||this._scrubberPlayer.currentTime>=this.duration()){this._controlState=Animation.AnimationTimeline._ControlState.Replay;this._controlButton.setToggled(true);this._controlButton.setTitle(ls`Replay timeline`);this._controlButton.setGlyph('largeicon-replay-animation');}else{this._controlState=Animation.AnimationTimeline._ControlState.Pause;this._controlButton.setToggled(false);this._controlButton.setTitle(ls`Pause timeline`);this._controlButton.setGlyph('largeicon-pause-animation');}}
_effectivePlaybackRate(){return(this._allPaused||(this._selectedGroup&&this._selectedGroup.paused()))?0:this._playbackRate;}
_togglePause(pause){this._selectedGroup.togglePause(pause);if(this._scrubberPlayer){this._scrubberPlayer.playbackRate=this._effectivePlaybackRate();}
this._previewMap.get(this._selectedGroup).element.classList.toggle('paused',pause);this._updateControlButton();}
_replay(){if(!this._selectedGroup){return;}
this._selectedGroup.seekTo(0);this._animateTime(0);this._updateControlButton();}
duration(){return this._duration;}
setDuration(duration){this._duration=duration;this.scheduleRedraw();}
_clearTimeline(){this._uiAnimations=[];this._nodesMap.clear();this._animationsMap.clear();this._animationsContainer.removeChildren();this._duration=this._defaultDuration;this._timelineScrubber.classList.add('hidden');delete this._selectedGroup;if(this._scrubberPlayer){this._scrubberPlayer.cancel();}
delete this._scrubberPlayer;this._currentTime.textContent='';this._updateControlButton();}
_reset(){this._clearTimeline();if(this._allPaused){this._togglePauseAll();}else{this._setPlaybackRate(this._playbackRate);}
for(const group of this._groupBuffer){group.release();}
this._groupBuffer=[];this._previewMap.clear();this._previewContainer.removeChildren();this._popoverHelper.hidePopover();this._renderGrid();}
_animationGroupStarted(event){this._addAnimationGroup((event.data));}
_addAnimationGroup(group){function startTimeComparator(left,right){return left.startTime()>right.startTime();}
if(this._previewMap.get(group)){if(this._selectedGroup===group){this._syncScrubber();}else{this._previewMap.get(group).replay();}
return;}
this._groupBuffer.sort(startTimeComparator);const groupsToDiscard=[];const bufferSize=this.width()/50;while(this._groupBuffer.length>bufferSize){const toDiscard=this._groupBuffer.splice(this._groupBuffer[0]===this._selectedGroup?1:0,1);groupsToDiscard.push(toDiscard[0]);}
for(const g of groupsToDiscard){this._previewMap.get(g).element.remove();this._previewMap.delete(g);g.release();}
const preview=new Animation.AnimationGroupPreviewUI(group);this._groupBuffer.push(group);this._previewMap.set(group,preview);this._previewContainer.appendChild(preview.element);preview.removeButton().addEventListener('click',this._removeAnimationGroup.bind(this,group));preview.element.addEventListener('click',this._selectAnimationGroup.bind(this,group));}
_removeAnimationGroup(group,event){this._groupBuffer.remove(group);this._previewMap.get(group).element.remove();this._previewMap.delete(group);group.release();event.consume(true);if(this._selectedGroup===group){this._clearTimeline();this._renderGrid();}}
_selectAnimationGroup(group){function applySelectionClass(ui,group){ui.element.classList.toggle('selected',this._selectedGroup===group);}
if(this._selectedGroup===group){this._togglePause(false);this._replay();return;}
this._clearTimeline();this._selectedGroup=group;this._previewMap.forEach(applySelectionClass,this);this.setDuration(Math.max(500,group.finiteDuration()+100));for(const anim of group.animations()){this._addAnimation(anim);}
this.scheduleRedraw();this._timelineScrubber.classList.remove('hidden');this._togglePause(false);this._replay();}
_addAnimation(animation){function nodeResolved(node){nodeUI.nodeResolved(node);uiAnimation.setNode(node);if(node){node[this._symbol]=nodeUI;}}
let nodeUI=this._nodesMap.get(animation.source().backendNodeId());if(!nodeUI){nodeUI=new Animation.AnimationTimeline.NodeUI(animation.source());this._animationsContainer.appendChild(nodeUI.element);this._nodesMap.set(animation.source().backendNodeId(),nodeUI);}
const nodeRow=nodeUI.createNewRow();const uiAnimation=new Animation.AnimationUI(animation,this,nodeRow);animation.source().deferredNode().resolve(nodeResolved.bind(this));this._uiAnimations.push(uiAnimation);this._animationsMap.set(animation.id(),animation);}
_nodeRemoved(event){const node=event.data.node;if(node[this._symbol]){node[this._symbol].nodeRemoved();}}
_renderGrid(){const gridSize=250;this._grid.setAttribute('width',this.width()+10);this._grid.setAttribute('height',this._cachedTimelineHeight+30);this._grid.setAttribute('shape-rendering','crispEdges');this._grid.removeChildren();let lastDraw=undefined;for(let time=0;time<this.duration();time+=gridSize){const line=this._grid.createSVGChild('rect','animation-timeline-grid-line');line.setAttribute('x',time*this.pixelMsRatio()+10);line.setAttribute('y',23);line.setAttribute('height','100%');line.setAttribute('width',1);}
for(let time=0;time<this.duration();time+=gridSize){const gridWidth=time*this.pixelMsRatio();if(lastDraw===undefined||gridWidth-lastDraw>50){lastDraw=gridWidth;const label=this._grid.createSVGChild('text','animation-timeline-grid-label');label.textContent=Number.millisToString(time);label.setAttribute('x',gridWidth+10);label.setAttribute('y',16);}}}
scheduleRedraw(){this._renderQueue=[];for(const ui of this._uiAnimations){this._renderQueue.push(ui);}
if(this._redrawing){return;}
this._redrawing=true;this._renderGrid();this._animationsContainer.window().requestAnimationFrame(this._render.bind(this));}
_render(timestamp){while(this._renderQueue.length&&(!timestamp||window.performance.now()-timestamp<50)){this._renderQueue.shift().redraw();}
if(this._renderQueue.length){this._animationsContainer.window().requestAnimationFrame(this._render.bind(this));}else{delete this._redrawing;}}
onResize(){this._cachedTimelineWidth=Math.max(0,this._animationsContainer.offsetWidth-this._timelineControlsWidth)||0;this._cachedTimelineHeight=this._animationsContainer.offsetHeight;this.scheduleRedraw();if(this._scrubberPlayer){this._syncScrubber();}
delete this._gridOffsetLeft;}
width(){return this._cachedTimelineWidth||0;}
_resizeWindow(animation){let resized=false;const duration=animation.source().duration()*Math.min(2,animation.source().iterations());const requiredDuration=animation.source().delay()+duration+animation.source().endDelay();if(requiredDuration>this._duration){resized=true;this._duration=requiredDuration+200;}
return resized;}
_syncScrubber(){if(!this._selectedGroup){return;}
this._selectedGroup.currentTimePromise().then(this._animateTime.bind(this)).then(this._updateControlButton.bind(this));}
_animateTime(currentTime){if(this._scrubberPlayer){this._scrubberPlayer.cancel();}
this._scrubberPlayer=this._timelineScrubber.animate([{transform:'translateX(0px)'},{transform:'translateX('+this.width()+'px)'}],{duration:this.duration(),fill:'forwards'});this._scrubberPlayer.playbackRate=this._effectivePlaybackRate();this._scrubberPlayer.onfinish=this._updateControlButton.bind(this);this._scrubberPlayer.currentTime=currentTime;this.element.window().requestAnimationFrame(this._updateScrubber.bind(this));}
pixelMsRatio(){return this.width()/this.duration()||0;}
_updateScrubber(timestamp){if(!this._scrubberPlayer){return;}
this._currentTime.textContent=Number.millisToString(this._scrubberPlayer.currentTime);if(this._scrubberPlayer.playState==='pending'||this._scrubberPlayer.playState==='running'){this.element.window().requestAnimationFrame(this._updateScrubber.bind(this));}else if(this._scrubberPlayer.playState==='finished'){this._currentTime.textContent='';}}
_repositionScrubber(event){if(!this._selectedGroup){return false;}
if(!this._gridOffsetLeft){this._gridOffsetLeft=this._grid.totalOffsetLeft()+10;}
const seekTime=Math.max(0,event.x-this._gridOffsetLeft)/this.pixelMsRatio();this._selectedGroup.seekTo(seekTime);this._togglePause(true);this._animateTime(seekTime);this._originalScrubberTime=seekTime;this._originalMousePosition=event.x;return true;}
_scrubberDragStart(event){if(!this._scrubberPlayer||!this._selectedGroup){return false;}
this._originalScrubberTime=this._scrubberPlayer.currentTime;this._timelineScrubber.classList.remove('animation-timeline-end');this._scrubberPlayer.pause();this._originalMousePosition=event.x;this._togglePause(true);return true;}
_scrubberDragMove(event){const delta=event.x-this._originalMousePosition;const currentTime=Math.max(0,Math.min(this._originalScrubberTime+delta/this.pixelMsRatio(),this.duration()));this._scrubberPlayer.currentTime=currentTime;this._currentTime.textContent=Number.millisToString(Math.round(currentTime));this._selectedGroup.seekTo(currentTime);}
_scrubberDragEnd(event){const currentTime=Math.max(0,this._scrubberPlayer.currentTime);this._scrubberPlayer.play();this._scrubberPlayer.currentTime=currentTime;this._currentTime.window().requestAnimationFrame(this._updateScrubber.bind(this));}}
export const GlobalPlaybackRates=[1,0.25,0.1];export const _ControlState={Play:'play-outline',Replay:'replay-outline',Pause:'pause-outline'};export class NodeUI{constructor(animationEffect){this.element=createElementWithClass('div','animation-node-row');this._description=this.element.createChild('div','animation-node-description');this._timelineElement=this.element.createChild('div','animation-node-timeline');}
nodeResolved(node){if(!node){this._description.createTextChild('<node>');return;}
this._node=node;this._nodeChanged();Common.Linkifier.linkify(node).then(link=>this._description.appendChild(link));if(!node.ownerDocument){this.nodeRemoved();}}
createNewRow(){return this._timelineElement.createChild('div','animation-timeline-row');}
nodeRemoved(){this.element.classList.add('animation-node-removed');this._node=null;}
_nodeChanged(){this.element.classList.toggle('animation-node-selected',this._node&&this._node===UI.context.flavor(SDK.DOMNode));}}
export class StepTimingFunction{constructor(steps,stepAtPosition){this.steps=steps;this.stepAtPosition=stepAtPosition;}
static parse(text){let match=text.match(/^steps\((\d+), (start|middle)\)$/);if(match){return new Animation.AnimationTimeline.StepTimingFunction(parseInt(match[1],10),match[2]);}
match=text.match(/^steps\((\d+)\)$/);if(match){return new Animation.AnimationTimeline.StepTimingFunction(parseInt(match[1],10),'end');}
return null;}}
self.Animation=self.Animation||{};Animation=Animation||{};Animation.AnimationTimeline=AnimationTimeline;Animation.AnimationTimeline.GlobalPlaybackRates=GlobalPlaybackRates;Animation.AnimationTimeline._ControlState=_ControlState;Animation.AnimationTimeline.NodeUI=NodeUI;Animation.AnimationTimeline.StepTimingFunction=StepTimingFunction;export default class AnimationScreenshotPopover extends UI.VBox{constructor(images){super(true);console.assert(images.length);this.registerRequiredCSS('animation/animationScreenshotPopover.css');this.contentElement.classList.add('animation-screenshot-popover');this._frames=images;for(const image of images){this.contentElement.appendChild(image);image.style.display='none';}
this._currentFrame=0;this._frames[0].style.display='block';this._progressBar=this.contentElement.createChild('div','animation-progress');}
wasShown(){this._rafId=this.contentElement.window().requestAnimationFrame(this._changeFrame.bind(this));}
willHide(){this.contentElement.window().cancelAnimationFrame(this._rafId);delete this._endDelay;}
_changeFrame(){this._rafId=this.contentElement.window().requestAnimationFrame(this._changeFrame.bind(this));if(this._endDelay){this._endDelay--;return;}
this._showFrame=!this._showFrame;if(!this._showFrame){return;}
const numFrames=this._frames.length;this._frames[this._currentFrame%numFrames].style.display='none';this._currentFrame++;this._frames[(this._currentFrame)%numFrames].style.display='block';if(this._currentFrame%numFrames===numFrames-1){this._endDelay=50;}
this._progressBar.style.width=(this._currentFrame%numFrames+1)/numFrames*100+'%';}}
self.Animation=self.Animation||{};Animation=Animation||{};Animation.AnimationScreenshotPopover=AnimationScreenshotPopover;export default class AnimationModel extends SDK.SDKModel{constructor(target){super(target);this._runtimeModel=(target.model(SDK.RuntimeModel));this._agent=target.animationAgent();target.registerAnimationDispatcher(new Animation.AnimationDispatcher(this));this._animationsById=new Map();this._animationGroups=new Map();this._pendingAnimations=[];this._playbackRate=1;const resourceTreeModel=(target.model(SDK.ResourceTreeModel));resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._reset,this);const screenCaptureModel=target.model(SDK.ScreenCaptureModel);if(screenCaptureModel){this._screenshotCapture=new ScreenshotCapture(this,screenCaptureModel);}}
_reset(){this._animationsById.clear();this._animationGroups.clear();this._pendingAnimations=[];this.dispatchEventToListeners(Events.ModelReset);}
animationCreated(id){this._pendingAnimations.push(id);}
_animationCanceled(id){this._pendingAnimations.remove(id);this._flushPendingAnimationsIfNeeded();}
animationStarted(payload){if(!payload.source||!payload.source.backendNodeId){return;}
const animation=AnimationImpl.parsePayload(this,payload);if(animation.type()==='WebAnimation'&&animation.source().keyframesRule().keyframes().length===0){this._pendingAnimations.remove(animation.id());}else{this._animationsById.set(animation.id(),animation);if(this._pendingAnimations.indexOf(animation.id())===-1){this._pendingAnimations.push(animation.id());}}
this._flushPendingAnimationsIfNeeded();}
_flushPendingAnimationsIfNeeded(){for(const id of this._pendingAnimations){if(!this._animationsById.get(id)){return;}}
while(this._pendingAnimations.length){this._matchExistingGroups(this._createGroupFromPendingAnimations());}}
_matchExistingGroups(incomingGroup){let matchedGroup=null;for(const group of this._animationGroups.values()){if(group._matches(incomingGroup)){matchedGroup=group;group._update(incomingGroup);break;}}
if(!matchedGroup){this._animationGroups.set(incomingGroup.id(),incomingGroup);if(this._screenshotCapture){this._screenshotCapture.captureScreenshots(incomingGroup.finiteDuration(),incomingGroup._screenshots);}}
this.dispatchEventToListeners(Events.AnimationGroupStarted,matchedGroup||incomingGroup);return!!matchedGroup;}
_createGroupFromPendingAnimations(){console.assert(this._pendingAnimations.length);const groupedAnimations=[this._animationsById.get(this._pendingAnimations.shift())];const remainingAnimations=[];for(const id of this._pendingAnimations){const anim=this._animationsById.get(id);if(anim.startTime()===groupedAnimations[0].startTime()){groupedAnimations.push(anim);}else{remainingAnimations.push(id);}}
this._pendingAnimations=remainingAnimations;return new AnimationGroup(this,groupedAnimations[0].id(),groupedAnimations);}
setPlaybackRate(playbackRate){this._playbackRate=playbackRate;this._agent.setPlaybackRate(playbackRate);}
_releaseAnimations(animations){this._agent.releaseAnimations(animations);}
suspendModel(){this._reset();return this._agent.disable();}
resumeModel(){if(!this._enabled){return Promise.resolve();}
return this._agent.enable();}
ensureEnabled(){if(this._enabled){return;}
this._agent.enable();this._enabled=true;}}
export const Events={AnimationGroupStarted:Symbol('AnimationGroupStarted'),ModelReset:Symbol('ModelReset')};export class AnimationImpl{constructor(animationModel,payload){this._animationModel=animationModel;this._payload=payload;this._source=new AnimationEffect(animationModel,(this._payload.source));}
static parsePayload(animationModel,payload){return new AnimationImpl(animationModel,payload);}
payload(){return this._payload;}
id(){return this._payload.id;}
name(){return this._payload.name;}
paused(){return this._payload.pausedState;}
playState(){return this._playState||this._payload.playState;}
setPlayState(playState){this._playState=playState;}
playbackRate(){return this._payload.playbackRate;}
startTime(){return this._payload.startTime;}
endTime(){if(!this.source().iterations){return Infinity;}
return this.startTime()+this.source().delay()+this.source().duration()*this.source().iterations()+
this.source().endDelay();}
_finiteDuration(){const iterations=Math.min(this.source().iterations(),3);return this.source().delay()+this.source().duration()*iterations;}
currentTime(){return this._payload.currentTime;}
source(){return this._source;}
type(){return(this._payload.type);}
overlaps(animation){if(!this.source().iterations()||!animation.source().iterations()){return true;}
const firstAnimation=this.startTime()<animation.startTime()?this:animation;const secondAnimation=firstAnimation===this?animation:this;return firstAnimation.endTime()>=secondAnimation.startTime();}
setTiming(duration,delay){this._source.node().then(this._updateNodeStyle.bind(this,duration,delay));this._source._duration=duration;this._source._delay=delay;this._animationModel._agent.setTiming(this.id(),duration,delay);}
_updateNodeStyle(duration,delay,node){let animationPrefix;if(this.type()===Type.CSSTransition){animationPrefix='transition-';}else if(this.type()===Type.CSSAnimation){animationPrefix='animation-';}else{return;}
const cssModel=node.domModel().cssModel();cssModel.setEffectivePropertyValueForNode(node.id,animationPrefix+'duration',duration+'ms');cssModel.setEffectivePropertyValueForNode(node.id,animationPrefix+'delay',delay+'ms');}
remoteObjectPromise(){return this._animationModel._agent.resolveAnimation(this.id()).then(payload=>payload&&this._animationModel._runtimeModel.createRemoteObject(payload));}
_cssId(){return this._payload.cssId||'';}}
export const Type={CSSTransition:'CSSTransition',CSSAnimation:'CSSAnimation',WebAnimation:'WebAnimation'};export class AnimationEffect{constructor(animationModel,payload){this._animationModel=animationModel;this._payload=payload;if(payload.keyframesRule){this._keyframesRule=new KeyframesRule(payload.keyframesRule);}
this._delay=this._payload.delay;this._duration=this._payload.duration;}
delay(){return this._delay;}
endDelay(){return this._payload.endDelay;}
iterationStart(){return this._payload.iterationStart;}
iterations(){if(!this.delay()&&!this.endDelay()&&!this.duration()){return 0;}
return this._payload.iterations||Infinity;}
duration(){return this._duration;}
direction(){return this._payload.direction;}
fill(){return this._payload.fill;}
node(){if(!this._deferredNode){this._deferredNode=new SDK.DeferredDOMNode(this._animationModel.target(),this.backendNodeId());}
return this._deferredNode.resolvePromise();}
deferredNode(){return new SDK.DeferredDOMNode(this._animationModel.target(),this.backendNodeId());}
backendNodeId(){return(this._payload.backendNodeId);}
keyframesRule(){return this._keyframesRule;}
easing(){return this._payload.easing;}}
export class KeyframesRule{constructor(payload){this._payload=payload;this._keyframes=this._payload.keyframes.map(function(keyframeStyle){return new KeyframeStyle(keyframeStyle);});}
_setKeyframesPayload(payload){this._keyframes=payload.map(function(keyframeStyle){return new KeyframeStyle(keyframeStyle);});}
name(){return this._payload.name;}
keyframes(){return this._keyframes;}}
export class KeyframeStyle{constructor(payload){this._payload=payload;this._offset=this._payload.offset;}
offset(){return this._offset;}
setOffset(offset){this._offset=offset*100+'%';}
offsetAsNumber(){return parseFloat(this._offset)/100;}
easing(){return this._payload.easing;}}
export class AnimationGroup{constructor(animationModel,id,animations){this._animationModel=animationModel;this._id=id;this._animations=animations;this._paused=false;this._screenshots=[];this._screenshotImages=[];}
id(){return this._id;}
animations(){return this._animations;}
release(){this._animationModel._animationGroups.remove(this.id());this._animationModel._releaseAnimations(this._animationIds());}
_animationIds(){function extractId(animation){return animation.id();}
return this._animations.map(extractId);}
startTime(){return this._animations[0].startTime();}
finiteDuration(){let maxDuration=0;for(let i=0;i<this._animations.length;++i){maxDuration=Math.max(maxDuration,this._animations[i]._finiteDuration());}
return maxDuration;}
seekTo(currentTime){this._animationModel._agent.seekAnimations(this._animationIds(),currentTime);}
paused(){return this._paused;}
togglePause(paused){if(paused===this._paused){return;}
this._paused=paused;this._animationModel._agent.setPaused(this._animationIds(),paused);}
currentTimePromise(){let longestAnim=null;for(const anim of this._animations){if(!longestAnim||anim.endTime()>longestAnim.endTime()){longestAnim=anim;}}
return this._animationModel._agent.getCurrentTime(longestAnim.id()).then(currentTime=>currentTime||0);}
_matches(group){function extractId(anim){if(anim.type()===Type.WebAnimation){return anim.type()+anim.id();}else{return anim._cssId();}}
if(this._animations.length!==group._animations.length){return false;}
const left=this._animations.map(extractId).sort();const right=group._animations.map(extractId).sort();for(let i=0;i<left.length;i++){if(left[i]!==right[i]){return false;}}
return true;}
_update(group){this._animationModel._releaseAnimations(this._animationIds());this._animations=group._animations;}
screenshots(){for(let i=0;i<this._screenshots.length;++i){const image=new Image();image.src='data:image/jpeg;base64,'+this._screenshots[i];this._screenshotImages.push(image);}
this._screenshots=[];return this._screenshotImages;}}
export class AnimationDispatcher{constructor(animationModel){this._animationModel=animationModel;}
animationCreated(id){this._animationModel.animationCreated(id);}
animationCanceled(id){this._animationModel._animationCanceled(id);}
animationStarted(payload){this._animationModel.animationStarted(payload);}}
export class ScreenshotCapture{constructor(animationModel,screenCaptureModel){this._requests=[];this._screenCaptureModel=screenCaptureModel;this._animationModel=animationModel;this._animationModel.addEventListener(Events.ModelReset,this._stopScreencast,this);}
captureScreenshots(duration,screenshots){const screencastDuration=Math.min(duration/this._animationModel._playbackRate,3000);const endTime=screencastDuration+window.performance.now();this._requests.push({endTime:endTime,screenshots:screenshots});if(!this._endTime||endTime>this._endTime){clearTimeout(this._stopTimer);this._stopTimer=setTimeout(this._stopScreencast.bind(this),screencastDuration);this._endTime=endTime;}
if(this._capturing){return;}
this._capturing=true;this._screenCaptureModel.startScreencast('jpeg',80,undefined,300,2,this._screencastFrame.bind(this),visible=>{});}
_screencastFrame(base64Data,metadata){function isAnimating(request){return request.endTime>=now;}
if(!this._capturing){return;}
const now=window.performance.now();this._requests=this._requests.filter(isAnimating);for(const request of this._requests){request.screenshots.push(base64Data);}}
_stopScreencast(){if(!this._capturing){return;}
delete this._stopTimer;delete this._endTime;this._requests=[];this._capturing=false;this._screenCaptureModel.stopScreencast();}}
SDK.SDKModel.register(AnimationModel,SDK.Target.Capability.DOM,false);self.Animation=self.Animation||{};Animation=Animation||{};Animation.AnimationModel=AnimationModel;Animation.AnimationModel.Events=Events;Animation.AnimationModel.Animation=AnimationImpl;Animation.AnimationModel.Animation.Type=Type;Animation.AnimationModel.AnimationEffect=AnimationEffect;Animation.AnimationModel.KeyframesRule=KeyframesRule;Animation.AnimationModel.KeyframeStyle=KeyframeStyle;Animation.AnimationModel.AnimationGroup=AnimationGroup;Animation.AnimationModel.ScreenshotCapture=ScreenshotCapture;Animation.AnimationModel.ScreenshotCapture.Request;Animation.AnimationDispatcher=AnimationDispatcher;export default class AnimationGroupPreviewUI{constructor(model){this._model=model;this.element=createElementWithClass('div','animation-buffer-preview');this.element.createChild('div','animation-paused fill');this._removeButton=this.element.createChild('div','animation-remove-button');this._removeButton.textContent='\u2715';this._replayOverlayElement=this.element.createChild('div','animation-buffer-preview-animation');this._svg=this.element.createSVGChild('svg');this._svg.setAttribute('width','100%');this._svg.setAttribute('preserveAspectRatio','none');this._svg.setAttribute('height','100%');this._viewBoxHeight=32;this._svg.setAttribute('viewBox','0 0 100 '+this._viewBoxHeight);this._svg.setAttribute('shape-rendering','crispEdges');this._render();}
_groupDuration(){let duration=0;for(const anim of this._model.animations()){const animDuration=anim.source().delay()+anim.source().duration();if(animDuration>duration){duration=animDuration;}}
return duration;}
removeButton(){return this._removeButton;}
replay(){this._replayOverlayElement.animate([{offset:0,width:'0%',opacity:1},{offset:0.9,width:'100%',opacity:1},{offset:1,width:'100%',opacity:0}],{duration:200,easing:'cubic-bezier(0, 0, 0.2, 1)'});}
_render(){this._svg.removeChildren();const maxToShow=10;const numberOfAnimations=Math.min(this._model.animations().length,maxToShow);const timeToPixelRatio=100/Math.max(this._groupDuration(),750);for(let i=0;i<numberOfAnimations;i++){const effect=this._model.animations()[i].source();const line=this._svg.createSVGChild('line');line.setAttribute('x1',effect.delay()*timeToPixelRatio);line.setAttribute('x2',(effect.delay()+effect.duration())*timeToPixelRatio);const y=Math.floor(this._viewBoxHeight/Math.max(6,numberOfAnimations)*i+1);line.setAttribute('y1',y);line.setAttribute('y2',y);line.style.stroke=Animation.AnimationUI.Color(this._model.animations()[i]);}}}
self.Animation=self.Animation||{};Animation=Animation||{};Animation.AnimationGroupPreviewUI=AnimationGroupPreviewUI;import'./ChangesHighlighter.js';import'./ChangesView.js';import'./ChangesSidebar.js';import*as ChangesHighlighter from'./ChangesHighlighter.js';import*as ChangesSidebar from'./ChangesSidebar.js';import*as ChangesView from'./ChangesView.js';export{ChangesHighlighter,ChangesSidebar,ChangesView,};export default class ChangesView extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('changes/changesView.css');const splitWidget=new UI.SplitWidget(true,false);const mainWidget=new UI.Widget();splitWidget.setMainWidget(mainWidget);splitWidget.show(this.contentElement);this._emptyWidget=new UI.EmptyWidget('');this._emptyWidget.show(mainWidget.element);this._workspaceDiff=WorkspaceDiff.workspaceDiff();this._changesSidebar=new Changes.ChangesSidebar(this._workspaceDiff);this._changesSidebar.addEventListener(Changes.ChangesSidebar.Events.SelectedUISourceCodeChanged,this._selectedUISourceCodeChanged,this);splitWidget.setSidebarWidget(this._changesSidebar);this._selectedUISourceCode=null;this._diffRows=[];this._maxLineDigits=1;this._editor=new TextEditor.CodeMirrorTextEditor({lineNumbers:true,lineWrapping:false,maxHighlightLength:Infinity});this._editor.setReadOnly(true);this._editor.show(mainWidget.element.createChild('div','editor-container'));this._editor.hideWidget();this._editor.element.addEventListener('click',this._click.bind(this),false);this._toolbar=new UI.Toolbar('changes-toolbar',mainWidget.element);const revertButton=new UI.ToolbarButton(Common.UIString('Revert all changes'),'largeicon-undo');revertButton.addEventListener(UI.ToolbarButton.Events.Click,this._revert.bind(this));this._toolbar.appendToolbarItem(revertButton);this._diffStats=new UI.ToolbarText('');this._toolbar.appendToolbarItem(this._diffStats);this._toolbar.setEnabled(false);this._hideDiff(ls`No changes`);this._selectedUISourceCodeChanged();}
_selectedUISourceCodeChanged(){this._revealUISourceCode(this._changesSidebar.selectedUISourceCode());}
_revert(){const uiSourceCode=this._selectedUISourceCode;if(!uiSourceCode){return;}
this._workspaceDiff.revertToOriginal(uiSourceCode);}
_click(event){const selection=this._editor.selection();if(!selection.isEmpty()){return;}
const row=this._diffRows[selection.startLine];Common.Revealer.reveal(this._selectedUISourceCode.uiLocation(row.currentLineNumber-1,selection.startColumn),false);event.consume(true);}
_revealUISourceCode(uiSourceCode){if(this._selectedUISourceCode===uiSourceCode){return;}
if(this._selectedUISourceCode){this._workspaceDiff.unsubscribeFromDiffChange(this._selectedUISourceCode,this._refreshDiff,this);}
if(uiSourceCode&&this.isShowing()){this._workspaceDiff.subscribeToDiffChange(uiSourceCode,this._refreshDiff,this);}
this._selectedUISourceCode=uiSourceCode;this._refreshDiff();}
wasShown(){this._refreshDiff();}
_refreshDiff(){if(!this.isShowing()){return;}
if(!this._selectedUISourceCode){this._renderDiffRows(null);return;}
const uiSourceCode=this._selectedUISourceCode;if(!uiSourceCode.contentType().isTextType()){this._hideDiff(ls`Binary data`);return;}
this._workspaceDiff.requestDiff(uiSourceCode).then(diff=>{if(this._selectedUISourceCode!==uiSourceCode){return;}
this._renderDiffRows(diff);});}
_hideDiff(message){this._diffStats.setText('');this._toolbar.setEnabled(false);this._editor.hideWidget();this._emptyWidget.text=message;this._emptyWidget.showWidget();}
_renderDiffRows(diff){this._diffRows=[];if(!diff||(diff.length===1&&diff[0][0]===Diff.Diff.Operation.Equal)){this._hideDiff(ls`No changes`);return;}
let insertions=0;let deletions=0;let currentLineNumber=0;let baselineLineNumber=0;const paddingLines=3;const originalLines=[];const currentLines=[];for(let i=0;i<diff.length;++i){const token=diff[i];switch(token[0]){case Diff.Diff.Operation.Equal:this._diffRows.pushAll(createEqualRows(token[1],i===0,i===diff.length-1));originalLines.pushAll(token[1]);currentLines.pushAll(token[1]);break;case Diff.Diff.Operation.Insert:for(const line of token[1]){this._diffRows.push(createRow(line,RowType.Addition));}
insertions+=token[1].length;currentLines.pushAll(token[1]);break;case Diff.Diff.Operation.Delete:deletions+=token[1].length;originalLines.pushAll(token[1]);if(diff[i+1]&&diff[i+1][0]===Diff.Diff.Operation.Insert){i++;this._diffRows.pushAll(createModifyRows(token[1].join('\n'),diff[i][1].join('\n')));insertions+=diff[i][1].length;currentLines.pushAll(diff[i][1]);}else{for(const line of token[1]){this._diffRows.push(createRow(line,RowType.Deletion));}}
break;}}
this._maxLineDigits=Math.ceil(Math.log10(Math.max(currentLineNumber,baselineLineNumber)));let insertionText='';if(insertions===1){insertionText=ls`${insertions} insertion (+),`;}else{insertionText=ls`${insertions} insertions (+),`;}
let deletionText='';if(deletions===1){deletionText=ls`${deletions} deletion (-)`;}else{deletionText=ls`${deletions} deletions (-)`;}
this._diffStats.setText(`${insertionText} ${deletionText}`);this._toolbar.setEnabled(true);this._emptyWidget.hideWidget();this._editor.operation(()=>{this._editor.showWidget();this._editor.setHighlightMode({name:'devtools-diff',diffRows:this._diffRows,mimeType:(this._selectedUISourceCode).mimeType(),baselineLines:originalLines,currentLines:currentLines});this._editor.setText(this._diffRows.map(row=>row.tokens.map(t=>t.text).join('')).join('\n'));this._editor.setLineNumberFormatter(this._lineFormatter.bind(this));});function createEqualRows(lines,atStart,atEnd){const equalRows=[];if(!atStart){for(let i=0;i<paddingLines&&i<lines.length;i++){equalRows.push(createRow(lines[i],RowType.Equal));}
if(lines.length>paddingLines*2+1&&!atEnd){equalRows.push(createRow(Common.UIString('( \u2026 Skipping %d matching lines \u2026 )',lines.length-paddingLines*2),RowType.Spacer));}}
if(!atEnd){const start=Math.max(lines.length-paddingLines-1,atStart?0:paddingLines);let skip=lines.length-paddingLines-1;if(!atStart){skip-=paddingLines;}
if(skip>0){baselineLineNumber+=skip;currentLineNumber+=skip;}
for(let i=start;i<lines.length;i++){equalRows.push(createRow(lines[i],RowType.Equal));}}
return equalRows;}
function createModifyRows(before,after){const internalDiff=Diff.Diff.charDiff(before,after,true);const deletionRows=[createRow('',RowType.Deletion)];const insertionRows=[createRow('',RowType.Addition)];for(const token of internalDiff){const text=token[1];const type=token[0];const className=type===Diff.Diff.Operation.Equal?'':'inner-diff';const lines=text.split('\n');for(let i=0;i<lines.length;i++){if(i>0&&type!==Diff.Diff.Operation.Insert){deletionRows.push(createRow('',RowType.Deletion));}
if(i>0&&type!==Diff.Diff.Operation.Delete){insertionRows.push(createRow('',RowType.Addition));}
if(!lines[i]){continue;}
if(type!==Diff.Diff.Operation.Insert){deletionRows[deletionRows.length-1].tokens.push({text:lines[i],className});}
if(type!==Diff.Diff.Operation.Delete){insertionRows[insertionRows.length-1].tokens.push({text:lines[i],className});}}}
return deletionRows.concat(insertionRows);}
function createRow(text,type){if(type===RowType.Addition){currentLineNumber++;}
if(type===RowType.Deletion){baselineLineNumber++;}
if(type===RowType.Equal){baselineLineNumber++;currentLineNumber++;}
return{baselineLineNumber,currentLineNumber,tokens:text?[{text,className:'inner-diff'}]:[],type};}}
_lineFormatter(lineNumber){const row=this._diffRows[lineNumber-1];let showBaseNumber=row.type===RowType.Deletion;let showCurrentNumber=row.type===RowType.Addition;if(row.type===RowType.Equal){showBaseNumber=true;showCurrentNumber=true;}
const base=showBaseNumber?numberToStringWithSpacesPadding(row.baselineLineNumber,this._maxLineDigits):spacesPadding(this._maxLineDigits);const current=showCurrentNumber?numberToStringWithSpacesPadding(row.currentLineNumber,this._maxLineDigits):spacesPadding(this._maxLineDigits);return base+spacesPadding(1)+current;}}
export const RowType={Deletion:'deletion',Addition:'addition',Equal:'equal',Spacer:'spacer'};export class DiffUILocationRevealer{async reveal(diffUILocation,omitFocus){if(!(diffUILocation instanceof WorkspaceDiff.DiffUILocation)){throw new Error('Internal error: not a diff ui location');}
const changesView=self.runtime.sharedInstance(Changes.ChangesView);await UI.viewManager.showView('changes.changes');changesView._changesSidebar.selectUISourceCode(diffUILocation.uiSourceCode,omitFocus);}}
self.Changes=self.Changes||{};Changes=Changes||{};Changes.ChangesView=ChangesView;Changes.ChangesView.RowType=RowType;Changes.ChangesView.Row;Changes.ChangesView.DiffUILocationRevealer=DiffUILocationRevealer;export default class ChangesSidebar extends UI.Widget{constructor(workspaceDiff){super();this._treeoutline=new UI.TreeOutlineInShadow();this._treeoutline.registerRequiredCSS('changes/changesSidebar.css');this._treeoutline.setComparator((a,b)=>a.titleAsText().compareTo(b.titleAsText()));this._treeoutline.addEventListener(UI.TreeOutline.Events.ElementSelected,this._selectionChanged,this);this.element.appendChild(this._treeoutline.element);this._treeElements=new Map();this._workspaceDiff=workspaceDiff;this._workspaceDiff.modifiedUISourceCodes().forEach(this._addUISourceCode.bind(this));this._workspaceDiff.addEventListener(WorkspaceDiff.Events.ModifiedStatusChanged,this._uiSourceCodeMofiedStatusChanged,this);}
selectUISourceCode(uiSourceCode,omitFocus){const treeElement=this._treeElements.get(uiSourceCode);if(!treeElement){return;}
treeElement.select(omitFocus);}
selectedUISourceCode(){return this._treeoutline.selectedTreeElement?this._treeoutline.selectedTreeElement.uiSourceCode:null;}
_selectionChanged(){this.dispatchEventToListeners(Events.SelectedUISourceCodeChanged);}
_uiSourceCodeMofiedStatusChanged(event){if(event.data.isModified){this._addUISourceCode(event.data.uiSourceCode);}else{this._removeUISourceCode(event.data.uiSourceCode);}}
_removeUISourceCode(uiSourceCode){const treeElement=this._treeElements.get(uiSourceCode);this._treeElements.delete(uiSourceCode);if(this._treeoutline.selectedTreeElement===treeElement){const nextElementToSelect=treeElement.previousSibling||treeElement.nextSibling;if(nextElementToSelect){nextElementToSelect.select(true);}else{treeElement.deselect();this._selectionChanged();}}
this._treeoutline.removeChild(treeElement);treeElement.dispose();}
_addUISourceCode(uiSourceCode){const treeElement=new UISourceCodeTreeElement(uiSourceCode);this._treeElements.set(uiSourceCode,treeElement);this._treeoutline.appendChild(treeElement);if(!this._treeoutline.selectedTreeElement){treeElement.select(true);}}}
export const Events={SelectedUISourceCodeChanged:Symbol('SelectedUISourceCodeChanged')};export class UISourceCodeTreeElement extends UI.TreeElement{constructor(uiSourceCode){super();this.uiSourceCode=uiSourceCode;this.listItemElement.classList.add('navigator-'+uiSourceCode.contentType().name()+'-tree-item');let iconType='largeicon-navigator-file';if(Snippets.isSnippetsUISourceCode(this.uiSourceCode)){iconType='largeicon-navigator-snippet';}
const defaultIcon=UI.Icon.create(iconType,'icon');this.setLeadingIcons([defaultIcon]);this._eventListeners=[uiSourceCode.addEventListener(Workspace.UISourceCode.Events.TitleChanged,this._updateTitle,this),uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._updateTitle,this),uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._updateTitle,this)];this._updateTitle();}
_updateTitle(){let titleText=this.uiSourceCode.displayName();if(this.uiSourceCode.isDirty()){titleText='*'+titleText;}
this.title=titleText;let tooltip=this.uiSourceCode.url();if(this.uiSourceCode.contentType().isFromSourceMap()){tooltip=Common.UIString('%s (from source map)',this.uiSourceCode.displayName());}
this.tooltip=tooltip;}
dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);}}
self.Changes=self.Changes||{};Changes=Changes||{};Changes.ChangesSidebar=ChangesSidebar;Changes.ChangesSidebar.Events=Events;Changes.ChangesSidebar.UISourceCodeTreeElement=UISourceCodeTreeElement;export default function ChangesHighlighter(config,parserConfig){const diffRows=parserConfig.diffRows;const baselineLines=parserConfig.baselineLines;const currentLines=parserConfig.currentLines;const syntaxHighlightMode=CodeMirror.getMode({},parserConfig.mimeType);function fastForward(state,baselineLineNumber,currentLineNumber){if(baselineLineNumber>state.baselineLineNumber){fastForwardSyntaxHighlighter(state.baselineSyntaxState,state.baselineLineNumber,baselineLineNumber,baselineLines);state.baselineLineNumber=baselineLineNumber;}
if(currentLineNumber>state.currentLineNumber){fastForwardSyntaxHighlighter(state.currentSyntaxState,state.currentLineNumber,currentLineNumber,currentLines);state.currentLineNumber=currentLineNumber;}}
function fastForwardSyntaxHighlighter(syntaxState,from,to,lines){let lineNumber=from;while(lineNumber<to&&lineNumber<lines.length){const stream=new CodeMirror.StringStream(lines[lineNumber]);if(stream.eol()&&syntaxHighlightMode.blankLine){syntaxHighlightMode.blankLine(syntaxState);}
while(!stream.eol()){syntaxHighlightMode.token(stream,syntaxState);stream.start=stream.pos;}
lineNumber++;}}
return{startState:function(){return{rowNumber:0,diffTokenIndex:0,currentLineNumber:0,baselineLineNumber:0,currentSyntaxState:CodeMirror.startState(syntaxHighlightMode),baselineSyntaxState:CodeMirror.startState(syntaxHighlightMode),syntaxPosition:0,diffPosition:0,syntaxStyle:'',diffStyle:''};},token:function(stream,state){const diffRow=diffRows[state.rowNumber];if(!diffRow){stream.next();return'';}
fastForward(state,diffRow.baselineLineNumber-1,diffRow.currentLineNumber-1);let classes='';if(stream.pos===0){classes+=' line-background-'+diffRow.type+' line-'+diffRow.type;}
const syntaxHighlighterNeedsRefresh=state.diffPosition>=state.syntaxPosition;if(state.diffPosition<=state.syntaxPosition){state.diffPosition+=diffRow.tokens[state.diffTokenIndex].text.length;state.diffStyle=diffRow.tokens[state.diffTokenIndex].className;state.diffTokenIndex++;}
if(syntaxHighlighterNeedsRefresh){if(diffRow.type===Changes.ChangesView.RowType.Deletion||diffRow.type===Changes.ChangesView.RowType.Addition||diffRow.type===Changes.ChangesView.RowType.Equal){state.syntaxStyle=syntaxHighlightMode.token(stream,diffRow.type===Changes.ChangesView.RowType.Deletion?state.baselineSyntaxState:state.currentSyntaxState);state.syntaxPosition=stream.pos;}else{state.syntaxStyle='';state.syntaxPosition=Infinity;}}
stream.pos=Math.min(state.syntaxPosition,state.diffPosition);classes+=' '+state.syntaxStyle;classes+=' '+state.diffStyle;if(stream.eol()){state.rowNumber++;if(diffRow.type===Changes.ChangesView.RowType.Deletion){state.baselineLineNumber++;}else{state.currentLineNumber++;}
state.diffPosition=0;state.syntaxPosition=0;state.diffTokenIndex=0;}
return classes;},blankLine:function(state){const diffRow=diffRows[state.rowNumber];state.rowNumber++;state.syntaxPosition=0;state.diffPosition=0;state.diffTokenIndex=0;if(!diffRow){return'';}
let style='';if(syntaxHighlightMode.blankLine){if(diffRow.type===Changes.ChangesView.RowType.Equal||diffRow.type===Changes.ChangesView.RowType.Addition){style=syntaxHighlightMode.blankLine(state.currentSyntaxState);state.currentLineNumber++;}else if(diffRow.type===Changes.ChangesView.RowType.Deletion){style=syntaxHighlightMode.blankLine(state.baselineSyntaxState);state.baselineLineNumber++;}}
return style+' line-background-'+diffRow.type+' line-'+diffRow.type;},copyState:function(state){const newState=Object.assign({},state);newState.currentSyntaxState=CodeMirror.copyState(syntaxHighlightMode,state.currentSyntaxState);newState.baselineSyntaxState=CodeMirror.copyState(syntaxHighlightMode,state.baselineSyntaxState);return(newState);}};}
CodeMirror.defineMode('devtools-diff',ChangesHighlighter);self.Changes=self.Changes||{};Changes=Changes||{};Changes.ChangesHighlighter=ChangesHighlighter;Changes.ChangesHighlighter.DiffState;import'./BinaryResourceViewFactory.js';import'./SourcesTextEditor.js';import'./FontView.js';import'./ImageView.js';import'./SourceFrame.js';import'./ResourceSourceFrame.js';import'./JSONView.js';import'./XMLView.js';import'./PreviewFactory.js';import'./SourceCodeDiff.js';import*as BinaryResourceViewFactory from'./BinaryResourceViewFactory.js';import*as FontView from'./FontView.js';import*as ImageView from'./ImageView.js';import*as JSONView from'./JSONView.js';import*as PreviewFactory from'./PreviewFactory.js';import*as ResourceSourceFrame from'./ResourceSourceFrame.js';import*as SourceCodeDiff from'./SourceCodeDiff.js';import*as SourceFrame from'./SourceFrame.js';import*as SourcesTextEditor from'./SourcesTextEditor.js';import*as XMLView from'./XMLView.js';export{BinaryResourceViewFactory,FontView,ImageView,JSONView,PreviewFactory,ResourceSourceFrame,SourceCodeDiff,SourceFrame,SourcesTextEditor,XMLView,};export class XMLView extends UI.Widget{constructor(parsedXML){super(true);this.registerRequiredCSS('source_frame/xmlView.css');this.contentElement.classList.add('shadow-xml-view','source-code');this._treeOutline=new UI.TreeOutlineInShadow();this._treeOutline.registerRequiredCSS('source_frame/xmlTree.css');this.contentElement.appendChild(this._treeOutline.element);this._searchableView;this._currentSearchFocusIndex=0;this._currentSearchTreeElements=[];this._searchConfig;XMLViewNode.populate(this._treeOutline,parsedXML,this);this._treeOutline.firstChild().select(true,false);}
static createSearchableView(parsedXML){const xmlView=new XMLView(parsedXML);const searchableView=new UI.SearchableView(xmlView);searchableView.setPlaceholder(Common.UIString('Find'));xmlView._searchableView=searchableView;xmlView.show(searchableView.element);return searchableView;}
static parseXML(text,mimeType){let parsedXML;try{parsedXML=(new DOMParser()).parseFromString(text,mimeType);}catch(e){return null;}
if(parsedXML.body){return null;}
return parsedXML;}
_jumpToMatch(index,shouldJump){if(!this._searchConfig){return;}
const regex=this._searchConfig.toSearchRegex(true);const previousFocusElement=this._currentSearchTreeElements[this._currentSearchFocusIndex];if(previousFocusElement){previousFocusElement.setSearchRegex(regex);}
const newFocusElement=this._currentSearchTreeElements[index];if(newFocusElement){this._updateSearchIndex(index);if(shouldJump){newFocusElement.reveal(true);}
newFocusElement.setSearchRegex(regex,UI.highlightedCurrentSearchResultClassName);}else{this._updateSearchIndex(0);}}
_updateSearchCount(count){if(!this._searchableView){return;}
this._searchableView.updateSearchMatchesCount(count);}
_updateSearchIndex(index){this._currentSearchFocusIndex=index;if(!this._searchableView){return;}
this._searchableView.updateCurrentMatchIndex(index);}
_innerPerformSearch(shouldJump,jumpBackwards){if(!this._searchConfig){return;}
let newIndex=this._currentSearchFocusIndex;const previousSearchFocusElement=this._currentSearchTreeElements[newIndex];this._innerSearchCanceled();this._currentSearchTreeElements=[];const regex=this._searchConfig.toSearchRegex(true);for(let element=this._treeOutline.rootElement();element;element=element.traverseNextTreeElement(false)){if(!(element instanceof XMLViewNode)){continue;}
const hasMatch=element.setSearchRegex(regex);if(hasMatch){this._currentSearchTreeElements.push(element);}
if(previousSearchFocusElement===element){const currentIndex=this._currentSearchTreeElements.length-1;if(hasMatch||jumpBackwards){newIndex=currentIndex;}else{newIndex=currentIndex+1;}}}
this._updateSearchCount(this._currentSearchTreeElements.length);if(!this._currentSearchTreeElements.length){this._updateSearchIndex(0);return;}
newIndex=mod(newIndex,this._currentSearchTreeElements.length);this._jumpToMatch(newIndex,shouldJump);}
_innerSearchCanceled(){for(let element=this._treeOutline.rootElement();element;element=element.traverseNextTreeElement(false)){if(!(element instanceof XMLViewNode)){continue;}
element.revertHighlightChanges();}
this._updateSearchCount(0);this._updateSearchIndex(0);}
searchCanceled(){this._searchConfig=null;this._currentSearchTreeElements=[];this._innerSearchCanceled();}
performSearch(searchConfig,shouldJump,jumpBackwards){this._searchConfig=searchConfig;this._innerPerformSearch(shouldJump,jumpBackwards);}
jumpToNextSearchResult(){if(!this._currentSearchTreeElements.length){return;}
const newIndex=mod(this._currentSearchFocusIndex+1,this._currentSearchTreeElements.length);this._jumpToMatch(newIndex,true);}
jumpToPreviousSearchResult(){if(!this._currentSearchTreeElements.length){return;}
const newIndex=mod(this._currentSearchFocusIndex-1,this._currentSearchTreeElements.length);this._jumpToMatch(newIndex,true);}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return true;}}
export class XMLViewNode extends UI.TreeElement{constructor(node,closeTag,xmlView){super('',!closeTag&&!!node.childElementCount);this._node=node;this._closeTag=closeTag;this.selectable=true;this._highlightChanges=[];this._xmlView=xmlView;this._updateTitle();}
static populate(root,xmlNode,xmlView){let node=xmlNode.firstChild;while(node){const currentNode=node;node=node.nextSibling;const nodeType=currentNode.nodeType;if(nodeType===3&&currentNode.nodeValue.match(/\s+/)){continue;}
if((nodeType!==1)&&(nodeType!==3)&&(nodeType!==4)&&(nodeType!==7)&&(nodeType!==8)){continue;}
root.appendChild(new XMLViewNode(currentNode,false,xmlView));}}
setSearchRegex(regex,additionalCssClassName){this.revertHighlightChanges();if(!regex){return false;}
if(this._closeTag&&this.parent&&!this.parent.expanded){return false;}
regex.lastIndex=0;let cssClasses=UI.highlightedSearchResultClassName;if(additionalCssClassName){cssClasses+=' '+additionalCssClassName;}
const content=this.listItemElement.textContent.replace(/\xA0/g,' ');let match=regex.exec(content);const ranges=[];while(match){ranges.push(new TextUtils.SourceRange(match.index,match[0].length));match=regex.exec(content);}
if(ranges.length){UI.highlightRangesWithStyleClass(this.listItemElement,ranges,cssClasses,this._highlightChanges);}
return!!this._highlightChanges.length;}
revertHighlightChanges(){UI.revertDomChanges(this._highlightChanges);this._highlightChanges=[];}
_updateTitle(){const node=this._node;switch(node.nodeType){case 1:const tag=node.tagName;if(this._closeTag){this._setTitle(['</'+tag+'>','shadow-xml-view-tag']);return;}
const titleItems=['<'+tag,'shadow-xml-view-tag'];const attributes=node.attributes;for(let i=0;i<attributes.length;++i){const attributeNode=attributes.item(i);titleItems.push('\xA0','shadow-xml-view-tag',attributeNode.name,'shadow-xml-view-attribute-name','="','shadow-xml-view-tag',attributeNode.value,'shadow-xml-view-attribute-value','"','shadow-xml-view-tag');}
if(!this.expanded){if(node.childElementCount){titleItems.push('>','shadow-xml-view-tag','\u2026','shadow-xml-view-comment','</'+tag,'shadow-xml-view-tag');}else if(this._node.textContent){titleItems.push('>','shadow-xml-view-tag',node.textContent,'shadow-xml-view-text','</'+tag,'shadow-xml-view-tag');}else{titleItems.push(' /','shadow-xml-view-tag');}}
titleItems.push('>','shadow-xml-view-tag');this._setTitle(titleItems);return;case 3:this._setTitle([node.nodeValue,'shadow-xml-view-text']);return;case 4:this._setTitle(['<![CDATA[','shadow-xml-view-cdata',node.nodeValue,'shadow-xml-view-text',']]>','shadow-xml-view-cdata']);return;case 7:this._setTitle(['<?'+node.nodeName+' '+node.nodeValue+'?>','shadow-xml-view-processing-instruction']);return;case 8:this._setTitle(['<!--'+node.nodeValue+'-->','shadow-xml-view-comment']);return;}}
_setTitle(items){const titleFragment=createDocumentFragment();for(let i=0;i<items.length;i+=2){titleFragment.createChild('span',items[i+1]).textContent=items[i];}
this.title=titleFragment;this._xmlView._innerPerformSearch(false,false);}
onattach(){this.listItemElement.classList.toggle('shadow-xml-view-close-tag',this._closeTag);}
onexpand(){this._updateTitle();}
oncollapse(){this._updateTitle();}
async onpopulate(){XMLViewNode.populate(this,this._node,this._xmlView);this.appendChild(new XMLViewNode(this._node,true,this._xmlView));}}
self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.XMLView=XMLView;SourceFrame.XMLView.Node=XMLViewNode;export class SourcesTextEditor extends TextEditor.CodeMirrorTextEditor{constructor(delegate,codeMirrorOptions){const defaultCodeMirrorOptions={lineNumbers:true,lineWrapping:false,bracketMatchingSetting:Common.moduleSetting('textEditorBracketMatching'),padBottom:true};if(codeMirrorOptions){Object.assign(defaultCodeMirrorOptions,codeMirrorOptions);}
super(defaultCodeMirrorOptions);this.codeMirror().addKeyMap({'Enter':'smartNewlineAndIndent','Esc':'sourcesDismiss'});this._delegate=delegate;this.codeMirror().on('cursorActivity',this._cursorActivity.bind(this));this.codeMirror().on('gutterClick',this._gutterClick.bind(this));this.codeMirror().on('scroll',this._scroll.bind(this));this.codeMirror().on('focus',this._focus.bind(this));this.codeMirror().on('blur',this._blur.bind(this));this.codeMirror().on('beforeSelectionChange',this._fireBeforeSelectionChanged.bind(this));this.element.addEventListener('contextmenu',this._contextMenu.bind(this),false);this._gutterMouseMove=event=>{this.element.classList.toggle('CodeMirror-gutter-hovered',event.clientX<this.codeMirror().getGutterElement().getBoundingClientRect().right);};this._gutterMouseOut=event=>{this.element.classList.toggle('CodeMirror-gutter-hovered',false);};this.codeMirror().addKeyMap(_BlockIndentController);this._tokenHighlighter=new TokenHighlighter(this,this.codeMirror());this._gutters=[lineNumbersGutterType];this.codeMirror().setOption('gutters',this._gutters.slice());this.codeMirror().setOption('electricChars',false);this.codeMirror().setOption('smartIndent',false);function updateAnticipateJumpFlag(value){this._isHandlingMouseDownEvent=value;}
this.element.addEventListener('mousedown',updateAnticipateJumpFlag.bind(this,true),true);this.element.addEventListener('mousedown',updateAnticipateJumpFlag.bind(this,false),false);Common.moduleSetting('textEditorIndent').addChangeListener(this._onUpdateEditorIndentation,this);Common.moduleSetting('textEditorAutoDetectIndent').addChangeListener(this._onUpdateEditorIndentation,this);Common.moduleSetting('showWhitespacesInEditor').addChangeListener(this._updateWhitespace,this);Common.moduleSetting('textEditorCodeFolding').addChangeListener(this._updateCodeFolding,this);this._updateCodeFolding();this._autocompleteConfig={isWordChar:TextUtils.TextUtils.isWordChar};Common.moduleSetting('textEditorAutocompletion').addChangeListener(this._updateAutocomplete,this);this._updateAutocomplete();this._onUpdateEditorIndentation();this._setupWhitespaceHighlight();this._infoBarDiv=null;}
attachInfobar(infobar){if(!this._infoBarDiv){this._infoBarDiv=createElementWithClass('div','flex-none');UI.ARIAUtils.markAsAlert(this._infoBarDiv);this.element.insertBefore(this._infoBarDiv,this.element.firstChild);}
this._infoBarDiv.appendChild(infobar.element);infobar.setParentView(this);this.doResize();}
static _guessIndentationLevel(lines){const tabRegex=/^\t+/;let tabLines=0;const indents={};for(let lineNumber=0;lineNumber<lines.length;++lineNumber){const text=lines[lineNumber];if(text.length===0||!TextUtils.TextUtils.isSpaceChar(text[0])){continue;}
if(tabRegex.test(text)){++tabLines;continue;}
let i=0;while(i<text.length&&TextUtils.TextUtils.isSpaceChar(text[i])){++i;}
if(i%2!==0){continue;}
indents[i]=1+(indents[i]||0);}
const linesCountPerIndentThreshold=3*lines.length/100;if(tabLines&&tabLines>linesCountPerIndentThreshold){return'\t';}
let minimumIndent=Infinity;for(const i in indents){if(indents[i]<linesCountPerIndentThreshold){continue;}
const indent=parseInt(i,10);if(minimumIndent>indent){minimumIndent=indent;}}
if(minimumIndent===Infinity){return Common.moduleSetting('textEditorIndent').get();}
return' '.repeat(minimumIndent);}
_isSearchActive(){return!!this._tokenHighlighter.highlightedRegex();}
scrollToLine(lineNumber){super.scrollToLine(lineNumber);this._scroll();}
highlightSearchResults(regex,range){function innerHighlightRegex(){if(range){this.scrollLineIntoView(range.startLine);if(range.endColumn>TextEditor.CodeMirrorTextEditor.maxHighlightLength){this.setSelection(range);}else{this.setSelection(TextUtils.TextRange.createFromLocation(range.startLine,range.startColumn));}}
this._tokenHighlighter.highlightSearchResults(regex,range);}
if(!this._selectionBeforeSearch){this._selectionBeforeSearch=this.selection();}
this.codeMirror().operation(innerHighlightRegex.bind(this));}
cancelSearchResultsHighlight(){this.codeMirror().operation(this._tokenHighlighter.highlightSelectedTokens.bind(this._tokenHighlighter));if(this._selectionBeforeSearch){this._reportJump(this._selectionBeforeSearch,this.selection());delete this._selectionBeforeSearch;}}
removeHighlight(highlightDescriptor){highlightDescriptor.clear();}
highlightRange(range,cssClass){cssClass='CodeMirror-persist-highlight '+cssClass;const pos=TextEditor.CodeMirrorUtils.toPos(range);++pos.end.ch;return this.codeMirror().markText(pos.start,pos.end,{className:cssClass,startStyle:cssClass+'-start',endStyle:cssClass+'-end'});}
installGutter(type,leftToNumbers){if(this._gutters.indexOf(type)!==-1){return;}
if(leftToNumbers){this._gutters.unshift(type);}else{this._gutters.push(type);}
this.codeMirror().setOption('gutters',this._gutters.slice());this.refresh();}
uninstallGutter(type){const index=this._gutters.indexOf(type);if(index===-1){return;}
this.codeMirror().clearGutter(type);this._gutters.splice(index,1);this.codeMirror().setOption('gutters',this._gutters.slice());this.refresh();}
setGutterDecoration(lineNumber,type,element){console.assert(this._gutters.indexOf(type)!==-1,'Cannot decorate unexisting gutter.');this.codeMirror().setGutterMarker(lineNumber,type,element);}
setExecutionLocation(lineNumber,columnNumber){this.clearPositionHighlight();this._executionLine=this.codeMirror().getLineHandle(lineNumber);if(!this._executionLine){return;}
this.showExecutionLineBackground();this.codeMirror().addLineClass(this._executionLine,'wrap','cm-execution-line-outline');let token=this.tokenAtTextPosition(lineNumber,columnNumber);if(token&&!token.type&&token.startColumn+1===token.endColumn){const tokenContent=this.codeMirror().getLine(lineNumber)[token.startColumn];if(tokenContent==='.'||tokenContent==='('){token=this.tokenAtTextPosition(lineNumber,token.endColumn+1);}}
let endColumn;if(token&&token.type){endColumn=token.endColumn;}else{endColumn=this.codeMirror().getLine(lineNumber).length;}
this._executionLineTailMarker=this.codeMirror().markText({line:lineNumber,ch:columnNumber},{line:lineNumber,ch:endColumn},{className:'cm-execution-line-tail'});}
showExecutionLineBackground(){if(this._executionLine){this.codeMirror().addLineClass(this._executionLine,'wrap','cm-execution-line');}}
hideExecutionLineBackground(){if(this._executionLine){this.codeMirror().removeLineClass(this._executionLine,'wrap','cm-execution-line');}}
clearExecutionLine(){this.clearPositionHighlight();if(this._executionLine){this.hideExecutionLineBackground();this.codeMirror().removeLineClass(this._executionLine,'wrap','cm-execution-line-outline');}
delete this._executionLine;if(this._executionLineTailMarker){this._executionLineTailMarker.clear();}
delete this._executionLineTailMarker;}
toggleLineClass(lineNumber,className,toggled){if(this.hasLineClass(lineNumber,className)===toggled){return;}
const lineHandle=this.codeMirror().getLineHandle(lineNumber);if(!lineHandle){return;}
if(toggled){this.codeMirror().addLineClass(lineHandle,'gutter',className);this.codeMirror().addLineClass(lineHandle,'wrap',className);}else{this.codeMirror().removeLineClass(lineHandle,'gutter',className);this.codeMirror().removeLineClass(lineHandle,'wrap',className);}}
hasLineClass(lineNumber,className){const lineInfo=this.codeMirror().lineInfo(lineNumber);const wrapClass=lineInfo.wrapClass||'';const classNames=wrapClass.split(' ');return classNames.indexOf(className)!==-1;}
_gutterClick(instance,lineNumber,gutterType,event){this.dispatchEventToListeners(Events.GutterClick,{gutterType,lineNumber,event});}
_contextMenu(event){const contextMenu=new UI.ContextMenu(event);event.consume(true);const wrapper=event.target.enclosingNodeOrSelfWithClass('CodeMirror-gutter-wrapper');const target=wrapper?wrapper.querySelector('.CodeMirror-linenumber'):null;let promise;if(target){promise=this._delegate.populateLineGutterContextMenu(contextMenu,parseInt(target.textContent,10)-1);}else{const textSelection=this.selection();promise=this._delegate.populateTextAreaContextMenu(contextMenu,textSelection.startLine,textSelection.startColumn);}
promise.then(showAsync.bind(this));function showAsync(){contextMenu.appendApplicableItems(this);contextMenu.show();}}
editRange(range,text,origin){const newRange=super.editRange(range,text,origin);if(Common.moduleSetting('textEditorAutoDetectIndent').get()){this._onUpdateEditorIndentation();}
return newRange;}
_onUpdateEditorIndentation(){this._setEditorIndentation(TextEditor.CodeMirrorUtils.pullLines(this.codeMirror(),LinesToScanForIndentationGuessing));}
_setEditorIndentation(lines){const extraKeys={};let indent=Common.moduleSetting('textEditorIndent').get();if(Common.moduleSetting('textEditorAutoDetectIndent').get()){indent=SourceFrame.SourcesTextEditor._guessIndentationLevel(lines);}
if(indent===TextUtils.TextUtils.Indent.TabCharacter){this.codeMirror().setOption('indentWithTabs',true);this.codeMirror().setOption('indentUnit',4);}else{this.codeMirror().setOption('indentWithTabs',false);this.codeMirror().setOption('indentUnit',indent.length);extraKeys.Tab=function(codeMirror){if(codeMirror.somethingSelected()){return CodeMirror.Pass;}
const pos=codeMirror.getCursor('head');codeMirror.replaceRange(indent.substring(pos.ch%indent.length),codeMirror.getCursor());};}
this.codeMirror().setOption('extraKeys',extraKeys);this._indentationLevel=indent;}
indent(){return this._indentationLevel;}
_onAutoAppendedSpaces(){this._autoAppendedSpaces=this._autoAppendedSpaces||[];for(let i=0;i<this._autoAppendedSpaces.length;++i){const position=this._autoAppendedSpaces[i].resolve();if(!position){continue;}
const line=this.line(position.lineNumber);if(line.length===position.columnNumber&&TextUtils.TextUtils.lineIndent(line).length===line.length){this.codeMirror().replaceRange('',new CodeMirror.Pos(position.lineNumber,0),new CodeMirror.Pos(position.lineNumber,position.columnNumber));}}
this._autoAppendedSpaces=[];const selections=this.selections();for(let i=0;i<selections.length;++i){const selection=selections[i];this._autoAppendedSpaces.push(this.textEditorPositionHandle(selection.startLine,selection.startColumn));}}
_cursorActivity(){if(!this._isSearchActive()){this.codeMirror().operation(this._tokenHighlighter.highlightSelectedTokens.bind(this._tokenHighlighter));}
const start=this.codeMirror().getCursor('anchor');const end=this.codeMirror().getCursor('head');this.dispatchEventToListeners(Events.SelectionChanged,TextEditor.CodeMirrorUtils.toRange(start,end));}
_reportJump(from,to){if(from&&to&&from.equal(to)){return;}
this.dispatchEventToListeners(Events.JumpHappened,{from:from,to:to});}
_scroll(){const topmostLineNumber=this.codeMirror().lineAtHeight(this.codeMirror().getScrollInfo().top,'local');this.dispatchEventToListeners(Events.ScrollChanged,topmostLineNumber);}
_focus(){this.dispatchEventToListeners(Events.EditorFocused);}
_blur(){this.dispatchEventToListeners(Events.EditorBlurred);}
_fireBeforeSelectionChanged(codeMirror,selection){if(!this._isHandlingMouseDownEvent){return;}
if(!selection.ranges.length){return;}
const primarySelection=selection.ranges[0];this._reportJump(this.selection(),TextEditor.CodeMirrorUtils.toRange(primarySelection.anchor,primarySelection.head));}
dispose(){super.dispose();Common.moduleSetting('textEditorIndent').removeChangeListener(this._onUpdateEditorIndentation,this);Common.moduleSetting('textEditorAutoDetectIndent').removeChangeListener(this._onUpdateEditorIndentation,this);Common.moduleSetting('showWhitespacesInEditor').removeChangeListener(this._updateWhitespace,this);Common.moduleSetting('textEditorCodeFolding').removeChangeListener(this._updateCodeFolding,this);}
setText(text){this._setEditorIndentation(text.split('\n').slice(0,LinesToScanForIndentationGuessing));super.setText(text);}
_updateWhitespace(){this.setMimeType(this.mimeType());}
_updateCodeFolding(){if(Common.moduleSetting('textEditorCodeFolding').get()){this.installGutter('CodeMirror-foldgutter',false);this.element.addEventListener('mousemove',this._gutterMouseMove);this.element.addEventListener('mouseout',this._gutterMouseOut);this.codeMirror().setOption('foldGutter',true);this.codeMirror().setOption('foldOptions',{minFoldSize:1});}else{this.codeMirror().execCommand('unfoldAll');this.element.removeEventListener('mousemove',this._gutterMouseMove);this.element.removeEventListener('mouseout',this._gutterMouseOut);this.uninstallGutter('CodeMirror-foldgutter');this.codeMirror().setOption('foldGutter',false);}}
rewriteMimeType(mimeType){this._setupWhitespaceHighlight();const whitespaceMode=Common.moduleSetting('showWhitespacesInEditor').get();this.element.classList.toggle('show-whitespaces',whitespaceMode==='all');if(whitespaceMode==='all'){return this._allWhitespaceOverlayMode(mimeType);}else if(whitespaceMode==='trailing'){return this._trailingWhitespaceOverlayMode(mimeType);}
return mimeType;}
_allWhitespaceOverlayMode(mimeType){let modeName=CodeMirror.mimeModes[mimeType]?(CodeMirror.mimeModes[mimeType].name||CodeMirror.mimeModes[mimeType]):CodeMirror.mimeModes['text/plain'];modeName+='+all-whitespaces';if(CodeMirror.modes[modeName]){return modeName;}
function modeConstructor(config,parserConfig){function nextToken(stream){if(stream.peek()===' '){let spaces=0;while(spaces<MaximumNumberOfWhitespacesPerSingleSpan&&stream.peek()===' '){++spaces;stream.next();}
return'whitespace whitespace-'+spaces;}
while(!stream.eol()&&stream.peek()!==' '){stream.next();}
return null;}
const whitespaceMode={token:nextToken};return CodeMirror.overlayMode(CodeMirror.getMode(config,mimeType),whitespaceMode,false);}
CodeMirror.defineMode(modeName,modeConstructor);return modeName;}
_trailingWhitespaceOverlayMode(mimeType){let modeName=CodeMirror.mimeModes[mimeType]?(CodeMirror.mimeModes[mimeType].name||CodeMirror.mimeModes[mimeType]):CodeMirror.mimeModes['text/plain'];modeName+='+trailing-whitespaces';if(CodeMirror.modes[modeName]){return modeName;}
function modeConstructor(config,parserConfig){function nextToken(stream){if(stream.match(/^\s+$/,true)){return true?'trailing-whitespace':null;}
do{stream.next();}while(!stream.eol()&&stream.peek()!==' ');return null;}
const whitespaceMode={token:nextToken};return CodeMirror.overlayMode(CodeMirror.getMode(config,mimeType),whitespaceMode,false);}
CodeMirror.defineMode(modeName,modeConstructor);return modeName;}
_setupWhitespaceHighlight(){const doc=this.element.ownerDocument;if(doc._codeMirrorWhitespaceStyleInjected||!Common.moduleSetting('showWhitespacesInEditor').get()){return;}
doc._codeMirrorWhitespaceStyleInjected=true;const classBase='.show-whitespaces .CodeMirror .cm-whitespace-';const spaceChar='·';let spaceChars='';let rules='';for(let i=1;i<=MaximumNumberOfWhitespacesPerSingleSpan;++i){spaceChars+=spaceChar;const rule=classBase+i+'::before { content: \''+spaceChars+'\';}\n';rules+=rule;}
const style=doc.createElement('style');style.textContent=rules;doc.head.appendChild(style);}
configureAutocomplete(config){this._autocompleteConfig=config;this._updateAutocomplete();}
_updateAutocomplete(){super.configureAutocomplete(Common.moduleSetting('textEditorAutocompletion').get()?this._autocompleteConfig:null);}}
export const Events={GutterClick:Symbol('GutterClick'),SelectionChanged:Symbol('SelectionChanged'),ScrollChanged:Symbol('ScrollChanged'),EditorFocused:Symbol('EditorFocused'),EditorBlurred:Symbol('EditorBlurred'),JumpHappened:Symbol('JumpHappened')};export class SourcesTextEditorDelegate{populateLineGutterContextMenu(contextMenu,lineNumber){}
populateTextAreaContextMenu(contextMenu,lineNumber,columnNumber){}}
CodeMirror.commands.smartNewlineAndIndent=function(codeMirror){codeMirror.operation(innerSmartNewlineAndIndent.bind(null,codeMirror));function innerSmartNewlineAndIndent(codeMirror){const selections=codeMirror.listSelections();const replacements=[];for(let i=0;i<selections.length;++i){const selection=selections[i];const cur=CodeMirror.cmpPos(selection.head,selection.anchor)<0?selection.head:selection.anchor;const line=codeMirror.getLine(cur.line);const indent=TextUtils.TextUtils.lineIndent(line);replacements.push('\n'+indent.substring(0,Math.min(cur.ch,indent.length)));}
codeMirror.replaceSelections(replacements);codeMirror._codeMirrorTextEditor._onAutoAppendedSpaces();}};CodeMirror.commands.sourcesDismiss=function(codemirror){if(codemirror.listSelections().length===1&&codemirror._codeMirrorTextEditor._isSearchActive()){return CodeMirror.Pass;}
return CodeMirror.commands.dismiss(codemirror);};export const _BlockIndentController={name:'blockIndentKeymap',Enter:function(codeMirror){let selections=codeMirror.listSelections();const replacements=[];let allSelectionsAreCollapsedBlocks=false;for(let i=0;i<selections.length;++i){const selection=selections[i];const start=CodeMirror.cmpPos(selection.head,selection.anchor)<0?selection.head:selection.anchor;const line=codeMirror.getLine(start.line);const indent=TextUtils.TextUtils.lineIndent(line);let indentToInsert='\n'+indent+codeMirror._codeMirrorTextEditor.indent();let isCollapsedBlock=false;if(selection.head.ch===0){return CodeMirror.Pass;}
if(line.substr(selection.head.ch-1,2)==='{}'){indentToInsert+='\n'+indent;isCollapsedBlock=true;}else if(line.substr(selection.head.ch-1,1)!=='{'){return CodeMirror.Pass;}
if(i>0&&allSelectionsAreCollapsedBlocks!==isCollapsedBlock){return CodeMirror.Pass;}
replacements.push(indentToInsert);allSelectionsAreCollapsedBlocks=isCollapsedBlock;}
codeMirror.replaceSelections(replacements);if(!allSelectionsAreCollapsedBlocks){codeMirror._codeMirrorTextEditor._onAutoAppendedSpaces();return;}
selections=codeMirror.listSelections();const updatedSelections=[];for(let i=0;i<selections.length;++i){const selection=selections[i];const line=codeMirror.getLine(selection.head.line-1);const position=new CodeMirror.Pos(selection.head.line-1,line.length);updatedSelections.push({head:position,anchor:position});}
codeMirror.setSelections(updatedSelections);codeMirror._codeMirrorTextEditor._onAutoAppendedSpaces();},'\'}\'':function(codeMirror){if(codeMirror.somethingSelected()){return CodeMirror.Pass;}
let selections=codeMirror.listSelections();let replacements=[];for(let i=0;i<selections.length;++i){const selection=selections[i];const line=codeMirror.getLine(selection.head.line);if(line!==TextUtils.TextUtils.lineIndent(line)){return CodeMirror.Pass;}
replacements.push('}');}
codeMirror.replaceSelections(replacements);selections=codeMirror.listSelections();replacements=[];const updatedSelections=[];for(let i=0;i<selections.length;++i){const selection=selections[i];const matchingBracket=codeMirror.findMatchingBracket(selection.head);if(!matchingBracket||!matchingBracket.match){return;}
updatedSelections.push({head:selection.head,anchor:new CodeMirror.Pos(selection.head.line,0)});const line=codeMirror.getLine(matchingBracket.to.line);const indent=TextUtils.TextUtils.lineIndent(line);replacements.push(indent+'}');}
codeMirror.setSelections(updatedSelections);codeMirror.replaceSelections(replacements);}};export class TokenHighlighter{constructor(textEditor,codeMirror){this._textEditor=textEditor;this._codeMirror=codeMirror;}
highlightSearchResults(regex,range){const oldRegex=this._highlightRegex;this._highlightRegex=regex;this._highlightRange=range;if(this._searchResultMarker){this._searchResultMarker.clear();delete this._searchResultMarker;}
if(this._highlightDescriptor&&this._highlightDescriptor.selectionStart){this._codeMirror.removeLineClass(this._highlightDescriptor.selectionStart.line,'wrap','cm-line-with-selection');}
const selectionStart=this._highlightRange?new CodeMirror.Pos(this._highlightRange.startLine,this._highlightRange.startColumn):null;if(selectionStart){this._codeMirror.addLineClass(selectionStart.line,'wrap','cm-line-with-selection');}
if(oldRegex&&this._highlightRegex.toString()===oldRegex.toString()){if(this._highlightDescriptor){this._highlightDescriptor.selectionStart=selectionStart;}}else{this._removeHighlight();this._setHighlighter(this._searchHighlighter.bind(this,this._highlightRegex),selectionStart);}
if(this._highlightRange){const pos=TextEditor.CodeMirrorUtils.toPos(this._highlightRange);this._searchResultMarker=this._codeMirror.markText(pos.start,pos.end,{className:'cm-column-with-selection'});}}
highlightedRegex(){return this._highlightRegex;}
highlightSelectedTokens(){delete this._highlightRegex;delete this._highlightRange;if(this._highlightDescriptor&&this._highlightDescriptor.selectionStart){this._codeMirror.removeLineClass(this._highlightDescriptor.selectionStart.line,'wrap','cm-line-with-selection');}
this._removeHighlight();const selectionStart=this._codeMirror.getCursor('start');const selectionEnd=this._codeMirror.getCursor('end');if(selectionStart.line!==selectionEnd.line){return;}
if(selectionStart.ch===selectionEnd.ch){return;}
const selections=this._codeMirror.getSelections();if(selections.length>1){return;}
const selectedText=selections[0];if(this._isWord(selectedText,selectionStart.line,selectionStart.ch,selectionEnd.ch)){if(selectionStart){this._codeMirror.addLineClass(selectionStart.line,'wrap','cm-line-with-selection');}
this._setHighlighter(this._tokenHighlighter.bind(this,selectedText,selectionStart),selectionStart);}}
_isWord(selectedText,lineNumber,startColumn,endColumn){const line=this._codeMirror.getLine(lineNumber);const leftBound=startColumn===0||!TextUtils.TextUtils.isWordChar(line.charAt(startColumn-1));const rightBound=endColumn===line.length||!TextUtils.TextUtils.isWordChar(line.charAt(endColumn));return leftBound&&rightBound&&TextUtils.TextUtils.isWord(selectedText);}
_removeHighlight(){if(this._highlightDescriptor){this._codeMirror.removeOverlay(this._highlightDescriptor.overlay);delete this._highlightDescriptor;}}
_searchHighlighter(regex,stream){if(stream.column()===0){delete this._searchMatchLength;}
if(this._searchMatchLength){if(this._searchMatchLength>2){for(let i=0;i<this._searchMatchLength-2;++i){stream.next();}
this._searchMatchLength=1;return'search-highlight';}else{stream.next();delete this._searchMatchLength;return'search-highlight search-highlight-end';}}
const match=stream.match(regex,false);if(match){stream.next();const matchLength=match[0].length;if(matchLength===1){return'search-highlight search-highlight-full';}
this._searchMatchLength=matchLength;return'search-highlight search-highlight-start';}
while(!stream.match(regex,false)&&stream.next()){}}
_tokenHighlighter(token,selectionStart,stream){const tokenFirstChar=token.charAt(0);if(stream.match(token)&&(stream.eol()||!TextUtils.TextUtils.isWordChar(stream.peek()))){return stream.column()===selectionStart.ch?'token-highlight column-with-selection':'token-highlight';}
let eatenChar;do{eatenChar=stream.next();}while(eatenChar&&(TextUtils.TextUtils.isWordChar(eatenChar)||stream.peek()!==tokenFirstChar));}
_setHighlighter(highlighter,selectionStart){const overlayMode={token:highlighter};this._codeMirror.addOverlay(overlayMode);this._highlightDescriptor={overlay:overlayMode,selectionStart:selectionStart};}}
const LinesToScanForIndentationGuessing=1000;const MaximumNumberOfWhitespacesPerSingleSpan=16;export const lineNumbersGutterType='CodeMirror-linenumbers';self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.SourcesTextEditor=SourcesTextEditor;SourceFrame.SourcesTextEditor.Events=Events;SourceFrame.SourcesTextEditor.lineNumbersGutterType=lineNumbersGutterType;SourceFrame.SourcesTextEditorDelegate=SourcesTextEditorDelegate;SourceFrame.SourcesTextEditor.TokenHighlighter=TokenHighlighter;SourceFrame.SourcesTextEditor.GutterClickEventData;export class SourceFrameImpl extends UI.SimpleView{constructor(lazyContent,codeMirrorOptions){super(Common.UIString('Source'));this._lazyContent=lazyContent;this._pretty=false;this._rawContent=null;this._formattedContentPromise=null;this._formattedMap=null;this._prettyToggle=new UI.ToolbarToggle(ls`Pretty print`,'largeicon-pretty-print');this._prettyToggle.addEventListener(UI.ToolbarButton.Events.Click,()=>{this._setPretty(!this._prettyToggle.toggled());});this._shouldAutoPrettyPrint=false;this._prettyToggle.setVisible(false);this._textEditor=new SourceFrame.SourcesTextEditor(this,codeMirrorOptions);this._textEditor.show(this.element);this._prettyCleanGeneration=null;this._cleanGeneration=0;this._searchConfig=null;this._delayedFindSearchMatches=null;this._currentSearchResultIndex=-1;this._searchResults=[];this._searchRegex=null;this._loadError=false;this._textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.EditorFocused,this._resetCurrentSearchResultIndex,this);this._textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.SelectionChanged,this._updateSourcePosition,this);this._textEditor.addEventListener(UI.TextEditor.Events.TextChanged,event=>{if(!this._muteChangeEventsForSetContent){this.onTextChanged(event.data.oldRange,event.data.newRange);}});this._muteChangeEventsForSetContent=false;this._sourcePosition=new UI.ToolbarText();this._searchableView=null;this._editable=false;this._textEditor.setReadOnly(true);this._positionToReveal=null;this._lineToScrollTo=null;this._selectionToSet=null;this._loaded=false;this._contentRequested=false;this._highlighterType='';this._transformer={editorToRawLocation:(editorLineNumber,editorColumnNumber=0)=>{if(!this._pretty){return[editorLineNumber,editorColumnNumber];}
return this._prettyToRawLocation(editorLineNumber,editorColumnNumber);},rawToEditorLocation:(lineNumber,columnNumber=0)=>{if(!this._pretty){return[lineNumber,columnNumber];}
return this._rawToPrettyLocation(lineNumber,columnNumber);}};}
setCanPrettyPrint(canPrettyPrint,autoPrettyPrint){this._shouldAutoPrettyPrint=canPrettyPrint&&!!autoPrettyPrint;this._prettyToggle.setVisible(canPrettyPrint);}
async _setPretty(value){this._pretty=value;this._prettyToggle.setEnabled(false);const wasLoaded=this.loaded;const selection=this.selection();let newSelection;if(this._pretty){const formatInfo=await this._requestFormattedContent();this._formattedMap=formatInfo.map;this.setContent(formatInfo.content,null);this._prettyCleanGeneration=this._textEditor.markClean();const start=this._rawToPrettyLocation(selection.startLine,selection.startColumn);const end=this._rawToPrettyLocation(selection.endLine,selection.endColumn);newSelection=new TextUtils.TextRange(start[0],start[1],end[0],end[1]);}else{this.setContent(this._rawContent,null);this._cleanGeneration=this._textEditor.markClean();const start=this._prettyToRawLocation(selection.startLine,selection.startColumn);const end=this._prettyToRawLocation(selection.endLine,selection.endColumn);newSelection=new TextUtils.TextRange(start[0],start[1],end[0],end[1]);}
if(wasLoaded){this.textEditor.revealPosition(newSelection.endLine,newSelection.endColumn,this._editable);this.textEditor.setSelection(newSelection);}
this._prettyToggle.setEnabled(true);this._updatePrettyPrintState();}
_updatePrettyPrintState(){this._prettyToggle.setToggled(this._pretty);this._textEditor.element.classList.toggle('pretty-printed',this._pretty);if(this._pretty){this._textEditor.setLineNumberFormatter(lineNumber=>{const line=this._prettyToRawLocation(lineNumber-1,0)[0]+1;if(lineNumber===1){return String(line);}
if(line!==this._prettyToRawLocation(lineNumber-2,0)[0]+1){return String(line);}
return'-';});}else{this._textEditor.setLineNumberFormatter(lineNumber=>{return String(lineNumber);});}}
transformer(){return this._transformer;}
_prettyToRawLocation(line,column){if(!this._formattedMap){return[line,column];}
return this._formattedMap.formattedToOriginal(line,column);}
_rawToPrettyLocation(line,column){if(!this._formattedMap){return[line,column];}
return this._formattedMap.originalToFormatted(line,column);}
setEditable(editable){this._editable=editable;if(this._loaded){this._textEditor.setReadOnly(!editable);}}
hasLoadError(){return this._loadError;}
wasShown(){this._ensureContentLoaded();this._wasShownOrLoaded();}
willHide(){super.willHide();this._clearPositionToReveal();}
syncToolbarItems(){return[this._prettyToggle,this._sourcePosition];}
get loaded(){return this._loaded;}
get textEditor(){return this._textEditor;}
get pretty(){return this._pretty;}
async _ensureContentLoaded(){if(!this._contentRequested){this._contentRequested=true;const{content,error}=(await this._lazyContent());this._rawContent=error||content||'';this._formattedContentPromise=null;this._formattedMap=null;this._prettyToggle.setEnabled(true);if(error){this.setContent(null,error);this._prettyToggle.setEnabled(false);setTimeout(()=>this.setHighlighterType('text/plain'),50);}else{if(this._shouldAutoPrettyPrint&&TextUtils.isMinified(content||'')){await this._setPretty(true);}else{this.setContent(this._rawContent,null);}}}}
_requestFormattedContent(){if(this._formattedContentPromise){return this._formattedContentPromise;}
let fulfill;this._formattedContentPromise=new Promise(x=>fulfill=x);new Formatter.ScriptFormatter(this._highlighterType,this._rawContent||'',(content,map)=>{fulfill({content,map});});return this._formattedContentPromise;}
revealPosition(line,column,shouldHighlight){this._lineToScrollTo=null;this._selectionToSet=null;this._positionToReveal={line:line,column:column,shouldHighlight:shouldHighlight};this._innerRevealPositionIfNeeded();}
_innerRevealPositionIfNeeded(){if(!this._positionToReveal){return;}
if(!this.loaded||!this.isShowing()){return;}
const[line,column]=this._transformer.rawToEditorLocation(this._positionToReveal.line,this._positionToReveal.column);this._textEditor.revealPosition(line,column,this._positionToReveal.shouldHighlight);this._positionToReveal=null;}
_clearPositionToReveal(){this._textEditor.clearPositionHighlight();this._positionToReveal=null;}
scrollToLine(line){this._clearPositionToReveal();this._lineToScrollTo=line;this._innerScrollToLineIfNeeded();}
_innerScrollToLineIfNeeded(){if(this._lineToScrollTo!==null){if(this.loaded&&this.isShowing()){this._textEditor.scrollToLine(this._lineToScrollTo);this._lineToScrollTo=null;}}}
selection(){return this.textEditor.selection();}
setSelection(textRange){this._selectionToSet=textRange;this._innerSetSelectionIfNeeded();}
_innerSetSelectionIfNeeded(){if(this._selectionToSet&&this.loaded&&this.isShowing()){this._textEditor.setSelection(this._selectionToSet,true);this._selectionToSet=null;}}
_wasShownOrLoaded(){this._innerRevealPositionIfNeeded();this._innerSetSelectionIfNeeded();this._innerScrollToLineIfNeeded();}
onTextChanged(oldRange,newRange){const wasPretty=this.pretty;this._pretty=this._prettyCleanGeneration!==null&&this.textEditor.isClean(this._prettyCleanGeneration);if(this._pretty!==wasPretty){this._updatePrettyPrintState();}
this._prettyToggle.setEnabled(this.isClean());if(this._searchConfig&&this._searchableView){this.performSearch(this._searchConfig,false,false);}}
isClean(){return this.textEditor.isClean(this._cleanGeneration)||(this._prettyCleanGeneration!==null&&this.textEditor.isClean(this._prettyCleanGeneration));}
contentCommitted(){this._cleanGeneration=this._textEditor.markClean();this._prettyCleanGeneration=null;this._rawContent=this.textEditor.text();this._formattedMap=null;this._formattedContentPromise=null;if(this._pretty){this._pretty=false;this._updatePrettyPrintState();}
this._prettyToggle.setEnabled(true);}
_simplifyMimeType(content,mimeType){if(!mimeType){return'';}
if(mimeType.indexOf('typescript')>=0){return'text/typescript-jsx';}
if(mimeType.indexOf('javascript')>=0||mimeType.indexOf('jscript')>=0||mimeType.indexOf('ecmascript')>=0){return'text/jsx';}
if(mimeType==='text/x-php'&&content.match(/\<\?.*\?\>/g)){return'application/x-httpd-php';}
return mimeType;}
setHighlighterType(highlighterType){this._highlighterType=highlighterType;this._updateHighlighterType('');}
highlighterType(){return this._highlighterType;}
_updateHighlighterType(content){this._textEditor.setMimeType(this._simplifyMimeType(content,this._highlighterType));}
setContent(content,loadError){this._muteChangeEventsForSetContent=true;if(!this._loaded){this._loaded=true;if(!loadError){this._textEditor.setText(content||'');this._cleanGeneration=this._textEditor.markClean();this._textEditor.setReadOnly(!this._editable);this._loadError=false;}else{this._textEditor.setText(loadError||'');this._highlighterType='text/plain';this._textEditor.setReadOnly(true);this._loadError=true;}}else{const scrollTop=this._textEditor.scrollTop();const selection=this._textEditor.selection();this._textEditor.setText(content||'');this._textEditor.setScrollTop(scrollTop);this._textEditor.setSelection(selection);}
this._updateHighlighterType(content||'');this._wasShownOrLoaded();if(this._delayedFindSearchMatches){this._delayedFindSearchMatches();this._delayedFindSearchMatches=null;}
this._muteChangeEventsForSetContent=false;}
setSearchableView(view){this._searchableView=view;}
_doFindSearchMatches(searchConfig,shouldJump,jumpBackwards){this._currentSearchResultIndex=-1;this._searchResults=[];const regex=searchConfig.toSearchRegex();this._searchRegex=regex;this._searchResults=this._collectRegexMatches(regex);if(this._searchableView){this._searchableView.updateSearchMatchesCount(this._searchResults.length);}
if(!this._searchResults.length){this._textEditor.cancelSearchResultsHighlight();}else if(shouldJump&&jumpBackwards){this.jumpToPreviousSearchResult();}else if(shouldJump){this.jumpToNextSearchResult();}else{this._textEditor.highlightSearchResults(regex,null);}}
performSearch(searchConfig,shouldJump,jumpBackwards){if(this._searchableView){this._searchableView.updateSearchMatchesCount(0);}
this._resetSearch();this._searchConfig=searchConfig;if(this.loaded){this._doFindSearchMatches(searchConfig,shouldJump,!!jumpBackwards);}else{this._delayedFindSearchMatches=this._doFindSearchMatches.bind(this,searchConfig,shouldJump,!!jumpBackwards);}
this._ensureContentLoaded();}
_resetCurrentSearchResultIndex(){if(!this._searchResults.length){return;}
this._currentSearchResultIndex=-1;if(this._searchableView){this._searchableView.updateCurrentMatchIndex(this._currentSearchResultIndex);}
this._textEditor.highlightSearchResults((this._searchRegex),null);}
_resetSearch(){this._searchConfig=null;this._delayedFindSearchMatches=null;this._currentSearchResultIndex=-1;this._searchResults=[];this._searchRegex=null;}
searchCanceled(){const range=this._currentSearchResultIndex!==-1?this._searchResults[this._currentSearchResultIndex]:null;this._resetSearch();if(!this.loaded){return;}
this._textEditor.cancelSearchResultsHighlight();if(range){this.setSelection(range);}}
jumpToLastSearchResult(){this.jumpToSearchResult(this._searchResults.length-1);}
_searchResultIndexForCurrentSelection(){return this._searchResults.lowerBound(this._textEditor.selection().collapseToEnd(),TextUtils.TextRange.comparator);}
jumpToNextSearchResult(){const currentIndex=this._searchResultIndexForCurrentSelection();const nextIndex=this._currentSearchResultIndex===-1?currentIndex:currentIndex+1;this.jumpToSearchResult(nextIndex);}
jumpToPreviousSearchResult(){const currentIndex=this._searchResultIndexForCurrentSelection();this.jumpToSearchResult(currentIndex-1);}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return true;}
jumpToSearchResult(index){if(!this.loaded||!this._searchResults.length){return;}
this._currentSearchResultIndex=(index+this._searchResults.length)%this._searchResults.length;if(this._searchableView){this._searchableView.updateCurrentMatchIndex(this._currentSearchResultIndex);}
this._textEditor.highlightSearchResults((this._searchRegex),this._searchResults[this._currentSearchResultIndex]);}
replaceSelectionWith(searchConfig,replacement){const range=this._searchResults[this._currentSearchResultIndex];if(!range){return;}
this._textEditor.highlightSearchResults((this._searchRegex),null);const oldText=this._textEditor.text(range);const regex=searchConfig.toSearchRegex();let text;if(regex.__fromRegExpQuery){text=oldText.replace(regex,replacement);}else{text=oldText.replace(regex,function(){return replacement;});}
const newRange=this._textEditor.editRange(range,text);this._textEditor.setSelection(newRange.collapseToEnd());}
replaceAllWith(searchConfig,replacement){this._resetCurrentSearchResultIndex();let text=this._textEditor.text();const range=this._textEditor.fullRange();const regex=searchConfig.toSearchRegex(true);if(regex.__fromRegExpQuery){text=text.replace(regex,replacement);}else{text=text.replace(regex,function(){return replacement;});}
const ranges=this._collectRegexMatches(regex);if(!ranges.length){return;}
const currentRangeIndex=ranges.lowerBound(this._textEditor.selection(),TextUtils.TextRange.comparator);const lastRangeIndex=mod(currentRangeIndex-1,ranges.length);const lastRange=ranges[lastRangeIndex];const replacementLineEndings=replacement.computeLineEndings();const replacementLineCount=replacementLineEndings.length;const lastLineNumber=lastRange.startLine+replacementLineEndings.length-1;let lastColumnNumber=lastRange.startColumn;if(replacementLineEndings.length>1){lastColumnNumber=replacementLineEndings[replacementLineCount-1]-replacementLineEndings[replacementLineCount-2]-1;}
this._textEditor.editRange(range,text);this._textEditor.revealPosition(lastLineNumber,lastColumnNumber);this._textEditor.setSelection(TextUtils.TextRange.createFromLocation(lastLineNumber,lastColumnNumber));}
_collectRegexMatches(regexObject){const ranges=[];for(let i=0;i<this._textEditor.linesCount;++i){let line=this._textEditor.line(i);let offset=0;let match;do{match=regexObject.exec(line);if(match){const matchEndIndex=match.index+Math.max(match[0].length,1);if(match[0].length){ranges.push(new TextUtils.TextRange(i,offset+match.index,i,offset+matchEndIndex));}
offset+=matchEndIndex;line=line.substring(matchEndIndex);}}while(match&&line);}
return ranges;}
populateLineGutterContextMenu(contextMenu,editorLineNumber){return Promise.resolve();}
populateTextAreaContextMenu(contextMenu,editorLineNumber,editorColumnNumber){return Promise.resolve();}
canEditSource(){return this._editable;}
_updateSourcePosition(){const selections=this._textEditor.selections();if(!selections.length){return;}
if(selections.length>1){this._sourcePosition.setText(Common.UIString('%d selection regions',selections.length));return;}
let textRange=selections[0];if(textRange.isEmpty()){const location=this._prettyToRawLocation(textRange.endLine,textRange.endColumn);this._sourcePosition.setText(ls`Line ${location[0] + 1}, Column ${location[1] + 1}`);return;}
textRange=textRange.normalize();const selectedText=this._textEditor.text(textRange);if(textRange.startLine===textRange.endLine){this._sourcePosition.setText(Common.UIString('%d characters selected',selectedText.length));}else{this._sourcePosition.setText(Common.UIString('%d lines, %d characters selected',textRange.endLine-textRange.startLine+1,selectedText.length));}}}
export class LineDecorator{decorate(uiSourceCode,textEditor,type){}}
self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.SourceFrame=SourceFrameImpl;SourceFrame.LineDecorator=LineDecorator;SourceFrame.Transformer;export class SourceCodeDiff{constructor(textEditor){this._textEditor=textEditor;this._animatedLines=[];this._animationTimeout=null;}
highlightModifiedLines(oldContent,newContent){if(typeof oldContent!=='string'||typeof newContent!=='string'){return;}
const diff=SourceCodeDiff.computeDiff(Diff.Diff.lineDiff(oldContent.split('\n'),newContent.split('\n')));const changedLines=[];for(let i=0;i<diff.length;++i){const diffEntry=diff[i];if(diffEntry.type===EditType.Delete){continue;}
for(let lineNumber=diffEntry.from;lineNumber<diffEntry.to;++lineNumber){const position=this._textEditor.textEditorPositionHandle(lineNumber,0);if(position){changedLines.push(position);}}}
this._updateHighlightedLines(changedLines);this._animationTimeout=setTimeout(this._updateHighlightedLines.bind(this,[]),400);}
_updateHighlightedLines(newLines){if(this._animationTimeout){clearTimeout(this._animationTimeout);}
this._animationTimeout=null;this._textEditor.operation(operation.bind(this));function operation(){toggleLines.call(this,false);this._animatedLines=newLines;toggleLines.call(this,true);}
function toggleLines(value){for(let i=0;i<this._animatedLines.length;++i){const location=this._animatedLines[i].resolve();if(location){this._textEditor.toggleLineClass(location.lineNumber,'highlight-line-modification',value);}}}}
static computeDiff(diff){const result=[];let hasAdded=false;let hasRemoved=false;let blockStartLineNumber=0;let currentLineNumber=0;let isInsideBlock=false;for(let i=0;i<diff.length;++i){const token=diff[i];if(token[0]===Diff.Diff.Operation.Equal){if(isInsideBlock){flush();}
currentLineNumber+=token[1].length;continue;}
if(!isInsideBlock){isInsideBlock=true;blockStartLineNumber=currentLineNumber;}
if(token[0]===Diff.Diff.Operation.Delete){hasRemoved=true;}else{currentLineNumber+=token[1].length;hasAdded=true;}}
if(isInsideBlock){flush();}
if(result.length>1&&result[0].from===0&&result[1].from===0){const merged={type:EditType.Modify,from:0,to:result[1].to};result.splice(0,2,merged);}
return result;function flush(){let type=EditType.Insert;let from=blockStartLineNumber;let to=currentLineNumber;if(hasAdded&&hasRemoved){type=EditType.Modify;}else if(!hasAdded&&hasRemoved&&from===0&&to===0){type=EditType.Modify;to=1;}else if(!hasAdded&&hasRemoved){type=EditType.Delete;from-=1;}
result.push({type:type,from:from,to:to});isInsideBlock=false;hasAdded=false;hasRemoved=false;}}}
export const EditType={Insert:Symbol('Insert'),Delete:Symbol('Delete'),Modify:Symbol('Modify'),};self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.SourceCodeDiff=SourceCodeDiff;SourceFrame.SourceCodeDiff.EditType=EditType;export class ResourceSourceFrame extends SourceFrame.SourceFrame{constructor(resource,autoPrettyPrint,codeMirrorOptions){super(async()=>{let content=(await resource.requestContent()).content||'';if(await resource.contentEncoded()){content=window.atob(content);}
return{content,isEncoded:false};},codeMirrorOptions);this._resource=resource;this.setCanPrettyPrint(this._resource.contentType().isDocumentOrScriptOrStyleSheet(),autoPrettyPrint);}
static createSearchableView(resource,highlighterType,autoPrettyPrint){return new SearchableContainer(resource,highlighterType,autoPrettyPrint);}
get resource(){return this._resource;}
populateTextAreaContextMenu(contextMenu,lineNumber,columnNumber){contextMenu.appendApplicableItems(this._resource);return Promise.resolve();}}
export class SearchableContainer extends UI.VBox{constructor(resource,highlighterType,autoPrettyPrint){super(true);this.registerRequiredCSS('source_frame/resourceSourceFrame.css');const sourceFrame=new ResourceSourceFrame(resource,autoPrettyPrint);this._sourceFrame=sourceFrame;sourceFrame.setHighlighterType(highlighterType);const searchableView=new UI.SearchableView(sourceFrame);searchableView.element.classList.add('searchable-view');searchableView.setPlaceholder(ls`Find`);sourceFrame.show(searchableView.element);sourceFrame.setSearchableView(searchableView);searchableView.show(this.contentElement);const toolbar=new UI.Toolbar('toolbar',this.contentElement);for(const item of sourceFrame.syncToolbarItems()){toolbar.appendToolbarItem(item);}}
async revealPosition(lineNumber,columnNumber){this._sourceFrame.revealPosition(lineNumber,columnNumber,true);}}
self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.ResourceSourceFrame=ResourceSourceFrame;SourceFrame.ResourceSourceFrame.SearchableContainer=SearchableContainer;export class PreviewFactory{static async createPreview(provider,mimeType){let resourceType=Common.ResourceType.fromMimeType(mimeType);if(resourceType===Common.resourceTypes.Other){resourceType=provider.contentType();}
switch(resourceType){case Common.resourceTypes.Image:return new SourceFrame.ImageView(mimeType,provider);case Common.resourceTypes.Font:return new SourceFrame.FontView(mimeType,provider);}
const deferredContent=await provider.requestContent();if(deferredContent.error){return new UI.EmptyWidget(deferredContent.error);}else if(!deferredContent.content){return new UI.EmptyWidget(Common.UIString('Nothing to preview'));}
let content=deferredContent.content;if(await provider.contentEncoded()){content=window.atob(content);}
const parsedXML=SourceFrame.XMLView.parseXML(content,mimeType);if(parsedXML){return SourceFrame.XMLView.createSearchableView(parsedXML);}
const jsonView=await SourceFrame.JSONView.createView(content);if(jsonView){return jsonView;}
if(resourceType.isTextType()){const highlighterType=provider.contentType().canonicalMimeType()||mimeType.replace(/;.*/,'');return SourceFrame.ResourceSourceFrame.createSearchableView(provider,highlighterType,true);}
return null;}}
self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.PreviewFactory=PreviewFactory;export class JSONView extends UI.VBox{constructor(parsedJSON){super();this._initialized=false;this.registerRequiredCSS('source_frame/jsonView.css');this._parsedJSON=parsedJSON;this.element.classList.add('json-view');this._searchableView;this._treeOutline;this._currentSearchFocusIndex=0;this._currentSearchTreeElements=[];this._searchRegex=null;}
static async createView(content){const parsedJSON=await JSONView._parseJSON(content);if(!parsedJSON||typeof parsedJSON.data!=='object'){return null;}
const jsonView=new JSONView(parsedJSON);const searchableView=new UI.SearchableView(jsonView);searchableView.setPlaceholder(Common.UIString('Find'));jsonView._searchableView=searchableView;jsonView.show(searchableView.element);return searchableView;}
static createViewSync(obj){const jsonView=new JSONView(new ParsedJSON(obj,'',''));const searchableView=new UI.SearchableView(jsonView);searchableView.setPlaceholder(Common.UIString('Find'));jsonView._searchableView=searchableView;jsonView.show(searchableView.element);jsonView.element.setAttribute('tabIndex',0);return searchableView;}
static _parseJSON(text){let returnObj=null;if(text){returnObj=JSONView._extractJSON((text));}
if(!returnObj){return Promise.resolve((null));}
return Formatter.formatterWorkerPool().parseJSONRelaxed(returnObj.data).then(handleReturnedJSON);function handleReturnedJSON(data){if(!data){return null;}
returnObj.data=data;return returnObj;}}
static _extractJSON(text){if(text.startsWith('<')){return null;}
let inner=JSONView._findBrackets(text,'{','}');const inner2=JSONView._findBrackets(text,'[',']');inner=inner2.length>inner.length?inner2:inner;if(inner.length===-1||text.length-inner.length>80){return null;}
const prefix=text.substring(0,inner.start);const suffix=text.substring(inner.end+1);text=text.substring(inner.start,inner.end+1);if(suffix.trim().length&&!(suffix.trim().startsWith(')')&&prefix.trim().endsWith('('))){return null;}
return new ParsedJSON(text,prefix,suffix);}
static _findBrackets(text,open,close){const start=text.indexOf(open);const end=text.lastIndexOf(close);let length=end-start-1;if(start===-1||end===-1||end<start){length=-1;}
return{start:start,end:end,length:length};}
wasShown(){this._initialize();}
_initialize(){if(this._initialized){return;}
this._initialized=true;const obj=SDK.RemoteObject.fromLocalObject(this._parsedJSON.data);const title=this._parsedJSON.prefix+obj.description+this._parsedJSON.suffix;this._treeOutline=new ObjectUI.ObjectPropertiesSection(obj,title,undefined,undefined,undefined,undefined,true);this._treeOutline.enableContextMenu();this._treeOutline.setEditable(false);this._treeOutline.expand();this.element.appendChild(this._treeOutline.element);this._treeOutline.firstChild().select(true,false);}
_jumpToMatch(index){if(!this._searchRegex){return;}
const previousFocusElement=this._currentSearchTreeElements[this._currentSearchFocusIndex];if(previousFocusElement){previousFocusElement.setSearchRegex(this._searchRegex);}
const newFocusElement=this._currentSearchTreeElements[index];if(newFocusElement){this._updateSearchIndex(index);newFocusElement.setSearchRegex(this._searchRegex,UI.highlightedCurrentSearchResultClassName);newFocusElement.reveal();}else{this._updateSearchIndex(0);}}
_updateSearchCount(count){if(!this._searchableView){return;}
this._searchableView.updateSearchMatchesCount(count);}
_updateSearchIndex(index){this._currentSearchFocusIndex=index;if(!this._searchableView){return;}
this._searchableView.updateCurrentMatchIndex(index);}
searchCanceled(){this._searchRegex=null;this._currentSearchTreeElements=[];for(let element=this._treeOutline.rootElement();element;element=element.traverseNextTreeElement(false)){if(!(element instanceof ObjectUI.ObjectPropertyTreeElement)){continue;}
element.revertHighlightChanges();}
this._updateSearchCount(0);this._updateSearchIndex(0);}
performSearch(searchConfig,shouldJump,jumpBackwards){let newIndex=this._currentSearchFocusIndex;const previousSearchFocusElement=this._currentSearchTreeElements[newIndex];this.searchCanceled();this._searchRegex=searchConfig.toSearchRegex(true);for(let element=this._treeOutline.rootElement();element;element=element.traverseNextTreeElement(false)){if(!(element instanceof ObjectUI.ObjectPropertyTreeElement)){continue;}
const hasMatch=element.setSearchRegex(this._searchRegex);if(hasMatch){this._currentSearchTreeElements.push(element);}
if(previousSearchFocusElement===element){const currentIndex=this._currentSearchTreeElements.length-1;if(hasMatch||jumpBackwards){newIndex=currentIndex;}else{newIndex=currentIndex+1;}}}
this._updateSearchCount(this._currentSearchTreeElements.length);if(!this._currentSearchTreeElements.length){this._updateSearchIndex(0);return;}
newIndex=mod(newIndex,this._currentSearchTreeElements.length);this._jumpToMatch(newIndex);}
jumpToNextSearchResult(){if(!this._currentSearchTreeElements.length){return;}
const newIndex=mod(this._currentSearchFocusIndex+1,this._currentSearchTreeElements.length);this._jumpToMatch(newIndex);}
jumpToPreviousSearchResult(){if(!this._currentSearchTreeElements.length){return;}
const newIndex=mod(this._currentSearchFocusIndex-1,this._currentSearchTreeElements.length);this._jumpToMatch(newIndex);}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return true;}}
export class ParsedJSON{constructor(data,prefix,suffix){this.data=data;this.prefix=prefix;this.suffix=suffix;}}
self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.JSONView=JSONView;SourceFrame.ParsedJSON=ParsedJSON;export class ImageView extends UI.SimpleView{constructor(mimeType,contentProvider){super(Common.UIString('Image'));this.registerRequiredCSS('source_frame/imageView.css');this.element.tabIndex=0;this.element.classList.add('image-view');this._url=contentProvider.contentURL();this._parsedURL=new Common.ParsedURL(this._url);this._mimeType=mimeType;this._contentProvider=contentProvider;this._uiSourceCode=contentProvider instanceof Workspace.UISourceCode?(contentProvider):null;if(this._uiSourceCode){this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._workingCopyCommitted,this);new UI.DropTarget(this.element,[UI.DropTarget.Type.ImageFile,UI.DropTarget.Type.URI],Common.UIString('Drop image file here'),this._handleDrop.bind(this));}
this._sizeLabel=new UI.ToolbarText();this._dimensionsLabel=new UI.ToolbarText();this._mimeTypeLabel=new UI.ToolbarText(mimeType);this._container=this.element.createChild('div','image');this._imagePreviewElement=this._container.createChild('img','resource-image-view');this._imagePreviewElement.addEventListener('contextmenu',this._contextMenu.bind(this),true);this._imagePreviewElement.alt=ls`Image from ${this._url}`;}
syncToolbarItems(){return[this._sizeLabel,new UI.ToolbarSeparator(),this._dimensionsLabel,new UI.ToolbarSeparator(),this._mimeTypeLabel];}
wasShown(){this._updateContentIfNeeded();}
disposeView(){if(this._uiSourceCode){this._uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._workingCopyCommitted,this);}}
_workingCopyCommitted(){this._updateContentIfNeeded();}
async _updateContentIfNeeded(){const{content}=await this._contentProvider.requestContent();if(this._cachedContent===content){return;}
const contentEncoded=await this._contentProvider.contentEncoded();this._cachedContent=content;let imageSrc=Common.ContentProvider.contentAsDataURL(content,this._mimeType,contentEncoded);if(content===null){imageSrc=this._url;}
const loadPromise=new Promise(x=>this._imagePreviewElement.onload=x);this._imagePreviewElement.src=imageSrc;const size=content&&!contentEncoded?content.length:base64ToSize(content);this._sizeLabel.setText(Number.bytesToString(size));await loadPromise;this._dimensionsLabel.setText(Common.UIString('%d × %d',this._imagePreviewElement.naturalWidth,this._imagePreviewElement.naturalHeight));}
_contextMenu(event){const contextMenu=new UI.ContextMenu(event);if(!this._parsedURL.isDataURL()){contextMenu.clipboardSection().appendItem(Common.UIString('Copy image URL'),this._copyImageURL.bind(this));}
if(this._imagePreviewElement.src){contextMenu.clipboardSection().appendItem(Common.UIString('Copy image as data URI'),this._copyImageAsDataURL.bind(this));}
contextMenu.clipboardSection().appendItem(Common.UIString('Open image in new tab'),this._openInNewTab.bind(this));contextMenu.clipboardSection().appendItem(Common.UIString('Save\u2026'),this._saveImage.bind(this));contextMenu.show();}
_copyImageAsDataURL(){Host.InspectorFrontendHost.copyText(this._imagePreviewElement.src);}
_copyImageURL(){Host.InspectorFrontendHost.copyText(this._url);}
_saveImage(){const link=createElement('a');link.download=this._parsedURL.displayName;link.href=this._url;link.click();}
_openInNewTab(){Host.InspectorFrontendHost.openInNewTab(this._url);}
async _handleDrop(dataTransfer){const items=dataTransfer.items;if(!items.length||items[0].kind!=='file'){return;}
const entry=items[0].webkitGetAsEntry();const encoded=!entry.name.endsWith('.svg');entry.file(file=>{const reader=new FileReader();reader.onloadend=()=>{let result;try{result=(reader.result);}catch(e){result=null;console.error('Can\'t read file: '+e);}
if(typeof result!=='string'){return;}
this._uiSourceCode.setContent(encoded?btoa(result):result,encoded);};if(encoded){reader.readAsBinaryString(file);}else{reader.readAsText(file);}});}}
self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.ImageView=ImageView;export class FontView extends UI.SimpleView{constructor(mimeType,contentProvider){super(Common.UIString('Font'));this.registerRequiredCSS('source_frame/fontView.css');this.element.classList.add('font-view');this._url=contentProvider.contentURL();UI.ARIAUtils.setAccessibleName(this.element,ls`Preview of font from ${this._url}`);this._mimeType=mimeType;this._contentProvider=contentProvider;this._mimeTypeLabel=new UI.ToolbarText(mimeType);}
syncToolbarItems(){return[this._mimeTypeLabel];}
_onFontContentLoaded(uniqueFontName,deferredContent){const{content}=deferredContent;const url=content?Common.ContentProvider.contentAsDataURL(content,this._mimeType,true):this._url;this.fontStyleElement.textContent=String.sprintf('@font-face { font-family: "%s"; src: url(%s); }',uniqueFontName,url);}
_createContentIfNeeded(){if(this.fontPreviewElement){return;}
const uniqueFontName='WebInspectorFontPreview'+(++_fontId);this.fontStyleElement=createElement('style');this._contentProvider.requestContent().then(deferredContent=>{this._onFontContentLoaded(uniqueFontName,deferredContent);});this.element.appendChild(this.fontStyleElement);const fontPreview=createElement('div');for(let i=0;i<_fontPreviewLines.length;++i){if(i>0){fontPreview.createChild('br');}
fontPreview.createTextChild(_fontPreviewLines[i]);}
this.fontPreviewElement=fontPreview.cloneNode(true);UI.ARIAUtils.markAsHidden(this.fontPreviewElement);this.fontPreviewElement.style.overflow='hidden';this.fontPreviewElement.style.setProperty('font-family',uniqueFontName);this.fontPreviewElement.style.setProperty('visibility','hidden');this._dummyElement=fontPreview;this._dummyElement.style.visibility='hidden';this._dummyElement.style.zIndex='-1';this._dummyElement.style.display='inline';this._dummyElement.style.position='absolute';this._dummyElement.style.setProperty('font-family',uniqueFontName);this._dummyElement.style.setProperty('font-size',_measureFontSize+'px');this.element.appendChild(this.fontPreviewElement);}
wasShown(){this._createContentIfNeeded();this.updateFontPreviewSize();}
onResize(){if(this._inResize){return;}
this._inResize=true;try{this.updateFontPreviewSize();}finally{delete this._inResize;}}
_measureElement(){this.element.appendChild(this._dummyElement);const result={width:this._dummyElement.offsetWidth,height:this._dummyElement.offsetHeight};this.element.removeChild(this._dummyElement);return result;}
updateFontPreviewSize(){if(!this.fontPreviewElement||!this.isShowing()){return;}
this.fontPreviewElement.style.removeProperty('visibility');const dimension=this._measureElement();const height=dimension.height;const width=dimension.width;const containerWidth=this.element.offsetWidth-50;const containerHeight=this.element.offsetHeight-30;if(!height||!width||!containerWidth||!containerHeight){this.fontPreviewElement.style.removeProperty('font-size');return;}
const widthRatio=containerWidth/width;const heightRatio=containerHeight/height;const finalFontSize=Math.floor(_measureFontSize*Math.min(widthRatio,heightRatio))-2;this.fontPreviewElement.style.setProperty('font-size',finalFontSize+'px',null);}}
let _fontId=0;const _fontPreviewLines=['ABCDEFGHIJKLM','NOPQRSTUVWXYZ','abcdefghijklm','nopqrstuvwxyz','1234567890'];const _measureFontSize=50;self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.FontView=FontView;export class BinaryResourceViewFactory{constructor(base64content,contentUrl,resourceType){this._base64content=base64content;this._contentUrl=contentUrl;this._resourceType=resourceType;this._arrayPromise=null;this._hexPromise=null;this._utf8Promise=null;}
async _fetchContentAsArray(){if(!this._arrayPromise){this._arrayPromise=new Promise(async resolve=>{const fetchResponse=await fetch('data:;base64,'+this._base64content);resolve(new Uint8Array(await fetchResponse.arrayBuffer()));});}
return await this._arrayPromise;}
async hex(){if(!this._hexPromise){this._hexPromise=new Promise(async resolve=>{const content=await this._fetchContentAsArray();const hexString=BinaryResourceViewFactory.uint8ArrayToHexString(content);resolve({content:hexString,isEncoded:false});});}
return this._hexPromise;}
async base64(){return{content:this._base64content,isEncoded:true};}
async utf8(){if(!this._utf8Promise){this._utf8Promise=new Promise(async resolve=>{const content=await this._fetchContentAsArray();const utf8String=new TextDecoder('utf8').decode(content);resolve({content:utf8String,isEncoded:false});});}
return this._utf8Promise;}
createBase64View(){return new SourceFrame.ResourceSourceFrame(Common.StaticContentProvider.fromString(this._contentUrl,this._resourceType,this._base64content),false,{lineNumbers:false,lineWrapping:true});}
createHexView(){const hexViewerContentProvider=new Common.StaticContentProvider(this._contentUrl,this._resourceType,async()=>{const contentAsArray=await this._fetchContentAsArray();const content=BinaryResourceViewFactory.uint8ArrayToHexViewer(contentAsArray);return{content,isEncoded:false};});return new SourceFrame.ResourceSourceFrame(hexViewerContentProvider,false,{lineNumbers:false,lineWrapping:false});}
createUtf8View(){const utf8fn=this.utf8.bind(this);const utf8ContentProvider=new Common.StaticContentProvider(this._contentUrl,this._resourceType,utf8fn);return new SourceFrame.ResourceSourceFrame(utf8ContentProvider,false,{lineNumbers:true,lineWrapping:true});}
static uint8ArrayToHexString(uint8Array){let output='';for(let i=0;i<uint8Array.length;i++){output+=BinaryResourceViewFactory.numberToHex(uint8Array[i],2);}
return output;}
static numberToHex(number,padding){let hex=number.toString(16);while(hex.length<padding){hex='0'+hex;}
return hex;}
static uint8ArrayToHexViewer(array){let output='';let line=0;while((line*16)<array.length){const lineArray=array.slice(line*16,(line+1)*16);output+=BinaryResourceViewFactory.numberToHex(line,8)+':';let hexColsPrinted=0;for(let i=0;i<lineArray.length;i++){if(i%2===0){output+=' ';hexColsPrinted++;}
output+=BinaryResourceViewFactory.numberToHex(lineArray[i],2);hexColsPrinted+=2;}
while(hexColsPrinted<42){output+=' ';hexColsPrinted++;}
for(let i=0;i<lineArray.length;i++){const code=lineArray[i];if(code>=32&&code<=126){output+=String.fromCharCode(code);}else{output+='.';}}
output+='\n';line++;}
return output;}}
self.SourceFrame=self.SourceFrame||{};SourceFrame=SourceFrame||{};SourceFrame.BinaryResourceViewFactory=BinaryResourceViewFactory;import*as BezierEditor from'./BezierEditor.js';import*as BezierUI from'./BezierUI.js';import*as ColorSwatch from'./ColorSwatch.js';import*as CSSShadowEditor from'./CSSShadowEditor.js';import*as CSSShadowModel from'./CSSShadowModel.js';import*as SwatchPopoverHelper from'./SwatchPopoverHelper.js';export{BezierEditor,BezierUI,ColorSwatch,CSSShadowEditor,CSSShadowModel,SwatchPopoverHelper,};export class SwatchPopoverHelper extends Common.Object{constructor(){super();this._popover=new UI.GlassPane();this._popover.registerRequiredCSS('inline_editor/swatchPopover.css');this._popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);this._popover.setMarginBehavior(UI.GlassPane.MarginBehavior.Arrow);this._popover.element.addEventListener('mousedown',e=>e.consume(),false);this._hideProxy=this.hide.bind(this,true);this._boundOnKeyDown=this._onKeyDown.bind(this);this._boundFocusOut=this._onFocusOut.bind(this);this._isHidden=true;}
_onFocusOut(event){if(!event.relatedTarget||event.relatedTarget.isSelfOrDescendant(this._view.contentElement)){return;}
this._hideProxy();}
isShowing(){return this._popover.isShowing();}
show(view,anchorElement,hiddenCallback){if(this._popover.isShowing()){if(this._anchorElement===anchorElement){return;}
this.hide(true);}
delete this._isHidden;this._anchorElement=anchorElement;this._view=view;this._hiddenCallback=hiddenCallback;this.reposition();view.focus();const document=this._popover.element.ownerDocument;document.addEventListener('mousedown',this._hideProxy,false);document.defaultView.addEventListener('resize',this._hideProxy,false);this._view.contentElement.addEventListener('keydown',this._boundOnKeyDown,false);}
reposition(){this._view.contentElement.removeEventListener('focusout',this._boundFocusOut,false);this._view.show(this._popover.contentElement);this._popover.setContentAnchorBox(this._anchorElement.boxInWindow());this._popover.show(this._anchorElement.ownerDocument);this._view.contentElement.addEventListener('focusout',this._boundFocusOut,false);if(!this._focusRestorer){this._focusRestorer=new UI.WidgetFocusRestorer(this._view);}}
hide(commitEdit){if(this._isHidden){return;}
const document=this._popover.element.ownerDocument;this._isHidden=true;this._popover.hide();document.removeEventListener('mousedown',this._hideProxy,false);document.defaultView.removeEventListener('resize',this._hideProxy,false);if(this._hiddenCallback){this._hiddenCallback.call(null,!!commitEdit);}
this._focusRestorer.restore();delete this._anchorElement;if(this._view){this._view.detach();this._view.contentElement.removeEventListener('keydown',this._boundOnKeyDown,false);this._view.contentElement.removeEventListener('focusout',this._boundFocusOut,false);delete this._view;}}
_onKeyDown(event){if(event.key==='Enter'){this.hide(true);event.consume(true);return;}
if(event.key==='Escape'){this.hide(false);event.consume(true);}}}
self.InlineEditor=self.InlineEditor||{};InlineEditor=InlineEditor||{};InlineEditor.SwatchPopoverHelper=SwatchPopoverHelper;export class CSSShadowModel{constructor(isBoxShadow){this._isBoxShadow=isBoxShadow;this._inset=false;this._offsetX=InlineEditor.CSSLength.zero();this._offsetY=InlineEditor.CSSLength.zero();this._blurRadius=InlineEditor.CSSLength.zero();this._spreadRadius=InlineEditor.CSSLength.zero();this._color=(Common.Color.parse('black'));this._format=[_Part.OffsetX,_Part.OffsetY];}
static parseTextShadow(text){return CSSShadowModel._parseShadow(text,false);}
static parseBoxShadow(text){return CSSShadowModel._parseShadow(text,true);}
static _parseShadow(text,isBoxShadow){const shadowTexts=[];const splits=TextUtils.TextUtils.splitStringByRegexes(text,[Common.Color.Regex,/,/g]);let currentIndex=0;for(let i=0;i<splits.length;i++){if(splits[i].regexIndex===1){const comma=splits[i];shadowTexts.push(text.substring(currentIndex,comma.position));currentIndex=comma.position+1;}}
shadowTexts.push(text.substring(currentIndex,text.length));const shadows=[];for(let i=0;i<shadowTexts.length;i++){const shadow=new CSSShadowModel(isBoxShadow);shadow._format=[];let nextPartAllowed=true;const regexes=[/inset/gi,Common.Color.Regex,InlineEditor.CSSLength.Regex];const results=TextUtils.TextUtils.splitStringByRegexes(shadowTexts[i],regexes);for(let j=0;j<results.length;j++){const result=results[j];if(result.regexIndex===-1){if(/\S/.test(result.value)){return[];}
nextPartAllowed=true;}else{if(!nextPartAllowed){return[];}
nextPartAllowed=false;if(result.regexIndex===0){shadow._inset=true;shadow._format.push(_Part.Inset);}else if(result.regexIndex===1){const color=Common.Color.parse(result.value);if(!color){return[];}
shadow._color=color;shadow._format.push(_Part.Color);}else if(result.regexIndex===2){const length=InlineEditor.CSSLength.parse(result.value);if(!length){return[];}
const previousPart=shadow._format.length>0?shadow._format[shadow._format.length-1]:'';if(previousPart===_Part.OffsetX){shadow._offsetY=length;shadow._format.push(_Part.OffsetY);}else if(previousPart===_Part.OffsetY){shadow._blurRadius=length;shadow._format.push(_Part.BlurRadius);}else if(previousPart===_Part.BlurRadius){shadow._spreadRadius=length;shadow._format.push(_Part.SpreadRadius);}else{shadow._offsetX=length;shadow._format.push(_Part.OffsetX);}}}}
if(invalidCount(shadow,_Part.OffsetX,1,1)||invalidCount(shadow,_Part.OffsetY,1,1)||invalidCount(shadow,_Part.Color,0,1)||invalidCount(shadow,_Part.BlurRadius,0,1)||invalidCount(shadow,_Part.Inset,0,isBoxShadow?1:0)||invalidCount(shadow,_Part.SpreadRadius,0,isBoxShadow?1:0)){return[];}
shadows.push(shadow);}
return shadows;function invalidCount(shadow,part,min,max){let count=0;for(let i=0;i<shadow._format.length;i++){if(shadow._format[i]===part){count++;}}
return count<min||count>max;}}
setInset(inset){this._inset=inset;if(this._format.indexOf(_Part.Inset)===-1){this._format.unshift(_Part.Inset);}}
setOffsetX(offsetX){this._offsetX=offsetX;}
setOffsetY(offsetY){this._offsetY=offsetY;}
setBlurRadius(blurRadius){this._blurRadius=blurRadius;if(this._format.indexOf(_Part.BlurRadius)===-1){const yIndex=this._format.indexOf(_Part.OffsetY);this._format.splice(yIndex+1,0,_Part.BlurRadius);}}
setSpreadRadius(spreadRadius){this._spreadRadius=spreadRadius;if(this._format.indexOf(_Part.SpreadRadius)===-1){this.setBlurRadius(this._blurRadius);const blurIndex=this._format.indexOf(_Part.BlurRadius);this._format.splice(blurIndex+1,0,_Part.SpreadRadius);}}
setColor(color){this._color=color;if(this._format.indexOf(_Part.Color)===-1){this._format.push(_Part.Color);}}
isBoxShadow(){return this._isBoxShadow;}
inset(){return this._inset;}
offsetX(){return this._offsetX;}
offsetY(){return this._offsetY;}
blurRadius(){return this._blurRadius;}
spreadRadius(){return this._spreadRadius;}
color(){return this._color;}
asCSSText(){const parts=[];for(let i=0;i<this._format.length;i++){const part=this._format[i];if(part===_Part.Inset&&this._inset){parts.push('inset');}else if(part===_Part.OffsetX){parts.push(this._offsetX.asCSSText());}else if(part===_Part.OffsetY){parts.push(this._offsetY.asCSSText());}else if(part===_Part.BlurRadius){parts.push(this._blurRadius.asCSSText());}else if(part===_Part.SpreadRadius){parts.push(this._spreadRadius.asCSSText());}else if(part===_Part.Color){parts.push(this._color.asString(this._color.format()));}}
return parts.join(' ');}}
export const _Part={Inset:'I',OffsetX:'X',OffsetY:'Y',BlurRadius:'B',SpreadRadius:'S',Color:'C'};export class CSSLength{constructor(amount,unit){this.amount=amount;this.unit=unit;}
static parse(text){const lengthRegex=new RegExp('^(?:'+InlineEditor.CSSLength.Regex.source+')$','i');const match=text.match(lengthRegex);if(!match){return null;}
if(match.length>2&&match[2]){return new InlineEditor.CSSLength(parseFloat(match[1]),match[2]);}
return InlineEditor.CSSLength.zero();}
static zero(){return new InlineEditor.CSSLength(0,'');}
asCSSText(){return this.amount+this.unit;}}
CSSLength.Regex=(function(){const number='([+-]?(?:[0-9]*[.])?[0-9]+(?:[eE][+-]?[0-9]+)?)';const unit='(ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmax|vmin|vw)';const zero='[+-]?(?:0*[.])?0+(?:[eE][+-]?[0-9]+)?';return new RegExp(number+unit+'|'+zero,'gi');})();self.InlineEditor=self.InlineEditor||{};InlineEditor=InlineEditor||{};InlineEditor.CSSShadowModel=CSSShadowModel;InlineEditor.CSSShadowModel._Part=_Part;InlineEditor.CSSLength=CSSLength;const maxRange=20;const defaultUnit='px';const sliderThumbRadius=6;const canvasSize=88;export class CSSShadowEditor extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('inline_editor/cssShadowEditor.css');this.contentElement.tabIndex=0;this.setDefaultFocusedElement(this.contentElement);this._typeField=this.contentElement.createChild('div','shadow-editor-field shadow-editor-flex-field');this._typeField.createChild('label','shadow-editor-label').textContent=Common.UIString('Type');this._outsetButton=this._typeField.createChild('button','shadow-editor-button-left');this._outsetButton.textContent=Common.UIString('Outset');this._outsetButton.addEventListener('click',this._onButtonClick.bind(this),false);this._insetButton=this._typeField.createChild('button','shadow-editor-button-right');this._insetButton.textContent=Common.UIString('Inset');this._insetButton.addEventListener('click',this._onButtonClick.bind(this),false);const xField=this.contentElement.createChild('div','shadow-editor-field');this._xInput=this._createTextInput(xField,Common.UIString('X offset'));const yField=this.contentElement.createChild('div','shadow-editor-field');this._yInput=this._createTextInput(yField,Common.UIString('Y offset'));this._xySlider=xField.createChild('canvas','shadow-editor-2D-slider');this._xySlider.width=canvasSize;this._xySlider.height=canvasSize;this._xySlider.tabIndex=-1;this._halfCanvasSize=canvasSize/2;this._innerCanvasSize=this._halfCanvasSize-sliderThumbRadius;UI.installDragHandle(this._xySlider,this._dragStart.bind(this),this._dragMove.bind(this),null,'default');this._xySlider.addEventListener('keydown',this._onCanvasArrowKey.bind(this),false);this._xySlider.addEventListener('blur',this._onCanvasBlur.bind(this),false);const blurField=this.contentElement.createChild('div','shadow-editor-field shadow-editor-flex-field shadow-editor-blur-field');this._blurInput=this._createTextInput(blurField,Common.UIString('Blur'));this._blurSlider=this._createSlider(blurField);this._spreadField=this.contentElement.createChild('div','shadow-editor-field shadow-editor-flex-field');this._spreadInput=this._createTextInput(this._spreadField,Common.UIString('Spread'));this._spreadSlider=this._createSlider(this._spreadField);}
_createTextInput(field,propertyName){const label=field.createChild('label','shadow-editor-label');label.textContent=propertyName;label.setAttribute('for',propertyName);const textInput=UI.createInput('shadow-editor-text-input','text');field.appendChild(textInput);textInput.id=propertyName;textInput.addEventListener('keydown',this._handleValueModification.bind(this),false);textInput.addEventListener('mousewheel',this._handleValueModification.bind(this),false);textInput.addEventListener('input',this._onTextInput.bind(this),false);textInput.addEventListener('blur',this._onTextBlur.bind(this),false);return textInput;}
_createSlider(field){const slider=UI.createSlider(0,maxRange,-1);slider.addEventListener('input',this._onSliderInput.bind(this),false);field.appendChild(slider);return slider;}
wasShown(){this._updateUI();}
setModel(model){this._model=model;this._typeField.classList.toggle('hidden',!model.isBoxShadow());this._spreadField.classList.toggle('hidden',!model.isBoxShadow());this._updateUI();}
_updateUI(){this._updateButtons();this._xInput.value=this._model.offsetX().asCSSText();this._yInput.value=this._model.offsetY().asCSSText();this._blurInput.value=this._model.blurRadius().asCSSText();this._spreadInput.value=this._model.spreadRadius().asCSSText();this._blurSlider.value=this._model.blurRadius().amount;this._spreadSlider.value=this._model.spreadRadius().amount;this._updateCanvas(false);}
_updateButtons(){this._insetButton.classList.toggle('enabled',this._model.inset());this._outsetButton.classList.toggle('enabled',!this._model.inset());}
_updateCanvas(drawFocus){const context=this._xySlider.getContext('2d');context.clearRect(0,0,this._xySlider.width,this._xySlider.height);context.save();context.setLineDash([1,1]);context.strokeStyle='rgba(210, 210, 210, 0.8)';context.beginPath();context.moveTo(this._halfCanvasSize,0);context.lineTo(this._halfCanvasSize,canvasSize);context.moveTo(0,this._halfCanvasSize);context.lineTo(canvasSize,this._halfCanvasSize);context.stroke();context.restore();const thumbPoint=this._sliderThumbPosition();context.save();context.translate(this._halfCanvasSize,this._halfCanvasSize);context.lineWidth=2;context.strokeStyle='rgba(130, 130, 130, 0.75)';context.beginPath();context.moveTo(0,0);context.lineTo(thumbPoint.x,thumbPoint.y);context.stroke();if(drawFocus){context.beginPath();context.fillStyle='rgba(66, 133, 244, 0.4)';context.arc(thumbPoint.x,thumbPoint.y,sliderThumbRadius+2,0,2*Math.PI);context.fill();}
context.beginPath();context.fillStyle='#4285F4';context.arc(thumbPoint.x,thumbPoint.y,sliderThumbRadius,0,2*Math.PI);context.fill();context.restore();}
_onButtonClick(event){const insetClicked=(event.currentTarget===this._insetButton);if(insetClicked&&this._model.inset()||!insetClicked&&!this._model.inset()){return;}
this._model.setInset(insetClicked);this._updateButtons();this.dispatchEventToListeners(Events.ShadowChanged,this._model);}
_handleValueModification(event){const modifiedValue=UI.createReplacementString(event.currentTarget.value,event,customNumberHandler);if(!modifiedValue){return;}
const length=InlineEditor.CSSLength.parse(modifiedValue);if(!length){return;}
if(event.currentTarget===this._blurInput&&length.amount<0){length.amount=0;}
event.currentTarget.value=length.asCSSText();event.currentTarget.selectionStart=0;event.currentTarget.selectionEnd=event.currentTarget.value.length;this._onTextInput(event);event.consume(true);function customNumberHandler(prefix,number,suffix){if(!suffix.length){suffix=defaultUnit;}
return prefix+number+suffix;}}
_onTextInput(event){this._changedElement=event.currentTarget;this._changedElement.classList.remove('invalid');const length=InlineEditor.CSSLength.parse(event.currentTarget.value);if(!length||event.currentTarget===this._blurInput&&length.amount<0){return;}
if(event.currentTarget===this._xInput){this._model.setOffsetX(length);this._updateCanvas(false);}else if(event.currentTarget===this._yInput){this._model.setOffsetY(length);this._updateCanvas(false);}else if(event.currentTarget===this._blurInput){this._model.setBlurRadius(length);this._blurSlider.value=length.amount;}else if(event.currentTarget===this._spreadInput){this._model.setSpreadRadius(length);this._spreadSlider.value=length.amount;}
this.dispatchEventToListeners(Events.ShadowChanged,this._model);}
_onTextBlur(){if(!this._changedElement){return;}
let length=!this._changedElement.value.trim()?InlineEditor.CSSLength.zero():InlineEditor.CSSLength.parse(this._changedElement.value);if(!length){length=InlineEditor.CSSLength.parse(this._changedElement.value+defaultUnit);}
if(!length){this._changedElement.classList.add('invalid');this._changedElement=null;return;}
if(this._changedElement===this._xInput){this._model.setOffsetX(length);this._xInput.value=length.asCSSText();this._updateCanvas(false);}else if(this._changedElement===this._yInput){this._model.setOffsetY(length);this._yInput.value=length.asCSSText();this._updateCanvas(false);}else if(this._changedElement===this._blurInput){if(length.amount<0){length=InlineEditor.CSSLength.zero();}
this._model.setBlurRadius(length);this._blurInput.value=length.asCSSText();this._blurSlider.value=length.amount;}else if(this._changedElement===this._spreadInput){this._model.setSpreadRadius(length);this._spreadInput.value=length.asCSSText();this._spreadSlider.value=length.amount;}
this._changedElement=null;this.dispatchEventToListeners(Events.ShadowChanged,this._model);}
_onSliderInput(event){if(event.currentTarget===this._blurSlider){this._model.setBlurRadius(new InlineEditor.CSSLength(this._blurSlider.value,this._model.blurRadius().unit||defaultUnit));this._blurInput.value=this._model.blurRadius().asCSSText();this._blurInput.classList.remove('invalid');}else if(event.currentTarget===this._spreadSlider){this._model.setSpreadRadius(new InlineEditor.CSSLength(this._spreadSlider.value,this._model.spreadRadius().unit||defaultUnit));this._spreadInput.value=this._model.spreadRadius().asCSSText();this._spreadInput.classList.remove('invalid');}
this.dispatchEventToListeners(Events.ShadowChanged,this._model);}
_dragStart(event){this._xySlider.focus();this._updateCanvas(true);this._canvasOrigin=new UI.Geometry.Point(this._xySlider.totalOffsetLeft()+this._halfCanvasSize,this._xySlider.totalOffsetTop()+this._halfCanvasSize);const clickedPoint=new UI.Geometry.Point(event.x-this._canvasOrigin.x,event.y-this._canvasOrigin.y);const thumbPoint=this._sliderThumbPosition();if(clickedPoint.distanceTo(thumbPoint)>=sliderThumbRadius){this._dragMove(event);}
return true;}
_dragMove(event){let point=new UI.Geometry.Point(event.x-this._canvasOrigin.x,event.y-this._canvasOrigin.y);if(event.shiftKey){point=this._snapToClosestDirection(point);}
const constrainedPoint=this._constrainPoint(point,this._innerCanvasSize);const newX=Math.round((constrainedPoint.x/this._innerCanvasSize)*maxRange);const newY=Math.round((constrainedPoint.y/this._innerCanvasSize)*maxRange);if(event.shiftKey){this._model.setOffsetX(new InlineEditor.CSSLength(newX,this._model.offsetX().unit||defaultUnit));this._model.setOffsetY(new InlineEditor.CSSLength(newY,this._model.offsetY().unit||defaultUnit));}else{if(!event.altKey){this._model.setOffsetX(new InlineEditor.CSSLength(newX,this._model.offsetX().unit||defaultUnit));}
if(!UI.KeyboardShortcut.eventHasCtrlOrMeta(event)){this._model.setOffsetY(new InlineEditor.CSSLength(newY,this._model.offsetY().unit||defaultUnit));}}
this._xInput.value=this._model.offsetX().asCSSText();this._yInput.value=this._model.offsetY().asCSSText();this._xInput.classList.remove('invalid');this._yInput.classList.remove('invalid');this._updateCanvas(true);this.dispatchEventToListeners(Events.ShadowChanged,this._model);}
_onCanvasBlur(){this._updateCanvas(false);}
_onCanvasArrowKey(event){let shiftX=0;let shiftY=0;if(event.key==='ArrowRight'){shiftX=1;}else if(event.key==='ArrowLeft'){shiftX=-1;}else if(event.key==='ArrowUp'){shiftY=-1;}else if(event.key==='ArrowDown'){shiftY=1;}
if(!shiftX&&!shiftY){return;}
event.consume(true);if(shiftX){const offsetX=this._model.offsetX();const newAmount=Number.constrain(offsetX.amount+shiftX,-maxRange,maxRange);if(newAmount===offsetX.amount){return;}
this._model.setOffsetX(new InlineEditor.CSSLength(newAmount,offsetX.unit||defaultUnit));this._xInput.value=this._model.offsetX().asCSSText();this._xInput.classList.remove('invalid');}
if(shiftY){const offsetY=this._model.offsetY();const newAmount=Number.constrain(offsetY.amount+shiftY,-maxRange,maxRange);if(newAmount===offsetY.amount){return;}
this._model.setOffsetY(new InlineEditor.CSSLength(newAmount,offsetY.unit||defaultUnit));this._yInput.value=this._model.offsetY().asCSSText();this._yInput.classList.remove('invalid');}
this._updateCanvas(true);this.dispatchEventToListeners(Events.ShadowChanged,this._model);}
_constrainPoint(point,max){if(Math.abs(point.x)<=max&&Math.abs(point.y)<=max){return new UI.Geometry.Point(point.x,point.y);}
return point.scale(max/Math.max(Math.abs(point.x),Math.abs(point.y)));}
_snapToClosestDirection(point){let minDistance=Number.MAX_VALUE;let closestPoint=point;const directions=[new UI.Geometry.Point(0,-1),new UI.Geometry.Point(1,-1),new UI.Geometry.Point(1,0),new UI.Geometry.Point(1,1)];for(const direction of directions){const projection=point.projectOn(direction);const distance=point.distanceTo(projection);if(distance<minDistance){minDistance=distance;closestPoint=projection;}}
return closestPoint;}
_sliderThumbPosition(){const x=(this._model.offsetX().amount/maxRange)*this._innerCanvasSize;const y=(this._model.offsetY().amount/maxRange)*this._innerCanvasSize;return this._constrainPoint(new UI.Geometry.Point(x,y),this._innerCanvasSize);}}
export const Events={ShadowChanged:Symbol('ShadowChanged')};self.InlineEditor=self.InlineEditor||{};InlineEditor=InlineEditor||{};InlineEditor.CSSShadowEditor=CSSShadowEditor;InlineEditor.CSSShadowEditor.Events=Events;export class ColorSwatch extends HTMLSpanElement{constructor(){super();const root=UI.createShadowRootWithCoreStyles(this,'inline_editor/colorSwatch.css');this._iconElement=root.createChild('span','color-swatch');this._iconElement.title=Common.UIString('Shift-click to change color format');this._swatchInner=this._iconElement.createChild('span','color-swatch-inner');this._swatchInner.addEventListener('dblclick',e=>e.consume(),false);this._swatchInner.addEventListener('mousedown',e=>e.consume(),false);this._swatchInner.addEventListener('click',this._handleClick.bind(this),true);root.createChild('slot');this._colorValueElement=this.createChild('span');}
static create(){if(!ColorSwatch._constructor){ColorSwatch._constructor=UI.registerCustomElement('span','color-swatch',ColorSwatch);}
return(ColorSwatch._constructor());}
static _nextColorFormat(color,curFormat){const cf=Common.Color.Format;switch(curFormat){case cf.Original:return!color.hasAlpha()?cf.RGB:cf.RGBA;case cf.RGB:case cf.RGBA:return!color.hasAlpha()?cf.HSL:cf.HSLA;case cf.HSL:case cf.HSLA:if(color.nickname()){return cf.Nickname;}
return color.detectHEXFormat();case cf.ShortHEX:return cf.HEX;case cf.ShortHEXA:return cf.HEXA;case cf.HEXA:case cf.HEX:return cf.Original;case cf.Nickname:return color.detectHEXFormat();default:return cf.RGBA;}}
color(){return this._color;}
setColor(color){this._color=color;this._format=this._color.format();const colorString=(this._color.asString(this._format));this.setText(colorString);this._swatchInner.style.backgroundColor=colorString;}
hideText(hide){this._colorValueElement.hidden=hide;}
setText(text,tooltip){this._colorValueElement.textContent=text;this._colorValueElement.title=tooltip;}
format(){return this._format;}
setFormat(format){this._format=format;this.setText(this._color.asString(this._format));}
toggleNextFormat(){let currentValue;do{this._format=ColorSwatch._nextColorFormat(this._color,this._format);currentValue=this._color.asString(this._format);}while(currentValue===this._colorValueElement.textContent);this.setText(currentValue);}
iconElement(){return this._iconElement;}
_handleClick(event){if(!event.shiftKey){return;}
event.target.parentNode.parentNode.host.toggleNextFormat();event.consume(true);}}
export class BezierSwatch extends HTMLSpanElement{constructor(){super();const root=UI.createShadowRootWithCoreStyles(this,'inline_editor/bezierSwatch.css');this._iconElement=UI.Icon.create('smallicon-bezier','bezier-swatch-icon');root.appendChild(this._iconElement);this._textElement=this.createChild('span');root.createChild('slot');}
static create(){if(!BezierSwatch._constructor){BezierSwatch._constructor=UI.registerCustomElement('span','bezier-swatch',BezierSwatch);}
return(BezierSwatch._constructor());}
bezierText(){return this._textElement.textContent;}
setBezierText(text){this._textElement.textContent=text;}
hideText(hide){this._textElement.hidden=hide;}
iconElement(){return this._iconElement;}}
export class CSSShadowSwatch extends HTMLSpanElement{constructor(){super();const root=UI.createShadowRootWithCoreStyles(this,'inline_editor/cssShadowSwatch.css');this._iconElement=UI.Icon.create('smallicon-shadow','shadow-swatch-icon');root.appendChild(this._iconElement);root.createChild('slot');this._contentElement=this.createChild('span');}
static create(){if(!CSSShadowSwatch._constructor){CSSShadowSwatch._constructor=UI.registerCustomElement('span','css-shadow-swatch',CSSShadowSwatch);}
return(CSSShadowSwatch._constructor());}
model(){return this._model;}
setCSSShadow(model){this._model=model;this._contentElement.removeChildren();const results=TextUtils.TextUtils.splitStringByRegexes(model.asCSSText(),[/inset/g,Common.Color.Regex]);for(let i=0;i<results.length;i++){const result=results[i];if(result.regexIndex===1){if(!this._colorSwatch){this._colorSwatch=ColorSwatch.create();}
this._colorSwatch.setColor(model.color());this._contentElement.appendChild(this._colorSwatch);}else{this._contentElement.appendChild(createTextNode(result.value));}}}
hideText(hide){this._contentElement.hidden=hide;}
iconElement(){return this._iconElement;}
colorSwatch(){return this._colorSwatch;}}
self.InlineEditor=self.InlineEditor||{};InlineEditor=InlineEditor||{};InlineEditor.ColorSwatch=ColorSwatch;InlineEditor.BezierSwatch=BezierSwatch;InlineEditor.CSSShadowSwatch=CSSShadowSwatch;export class BezierUI{constructor(width,height,marginTop,controlPointRadius,linearLine){this.width=width;this.height=height;this.marginTop=marginTop;this.radius=controlPointRadius;this.linearLine=linearLine;}
static drawVelocityChart(bezier,path,width){const height=Height;let pathBuilder=['M',0,height];const sampleSize=1/40;let prev=bezier.evaluateAt(0);for(let t=sampleSize;t<1+sampleSize;t+=sampleSize){const current=bezier.evaluateAt(t);let slope=(current.y-prev.y)/(current.x-prev.x);const weightedX=prev.x*(1-t)+current.x*t;slope=Math.tanh(slope/1.5);pathBuilder=pathBuilder.concat(['L',(weightedX*width).toFixed(2),(height-slope*height).toFixed(2)]);prev=current;}
pathBuilder=pathBuilder.concat(['L',width.toFixed(2),height,'Z']);path.setAttribute('d',pathBuilder.join(' '));}
curveWidth(){return this.width-this.radius*2;}
curveHeight(){return this.height-this.radius*2-this.marginTop*2;}
_drawLine(parentElement,className,x1,y1,x2,y2){const line=parentElement.createSVGChild('line',className);line.setAttribute('x1',x1+this.radius);line.setAttribute('y1',y1+this.radius+this.marginTop);line.setAttribute('x2',x2+this.radius);line.setAttribute('y2',y2+this.radius+this.marginTop);}
_drawControlPoints(parentElement,startX,startY,controlX,controlY){this._drawLine(parentElement,'bezier-control-line',startX,startY,controlX,controlY);const circle=parentElement.createSVGChild('circle','bezier-control-circle');circle.setAttribute('cx',controlX+this.radius);circle.setAttribute('cy',controlY+this.radius+this.marginTop);circle.setAttribute('r',this.radius);}
drawCurve(bezier,svg){if(!bezier){return;}
const width=this.curveWidth();const height=this.curveHeight();svg.setAttribute('width',this.width);svg.setAttribute('height',this.height);svg.removeChildren();const group=svg.createSVGChild('g');if(this.linearLine){this._drawLine(group,'linear-line',0,height,width,0);}
const curve=group.createSVGChild('path','bezier-path');const curvePoints=[new UI.Geometry.Point(bezier.controlPoints[0].x*width+this.radius,(1-bezier.controlPoints[0].y)*height+this.radius+this.marginTop),new UI.Geometry.Point(bezier.controlPoints[1].x*width+this.radius,(1-bezier.controlPoints[1].y)*height+this.radius+this.marginTop),new UI.Geometry.Point(width+this.radius,this.marginTop+this.radius)];curve.setAttribute('d','M'+this.radius+','+(height+this.radius+this.marginTop)+' C'+curvePoints.join(' '));this._drawControlPoints(group,0,height,bezier.controlPoints[0].x*width,(1-bezier.controlPoints[0].y)*height);this._drawControlPoints(group,width,0,bezier.controlPoints[1].x*width,(1-bezier.controlPoints[1].y)*height);}}
export const Height=26;self.InlineEditor=self.InlineEditor||{};InlineEditor=InlineEditor||{};InlineEditor.BezierUI=BezierUI;InlineEditor.BezierUI.Height=Height;export class BezierEditor extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('inline_editor/bezierEditor.css');this.contentElement.tabIndex=0;this.setDefaultFocusedElement(this.contentElement);this._previewElement=this.contentElement.createChild('div','bezier-preview-container');this._previewElement.createChild('div','bezier-preview-animation');this._previewElement.addEventListener('click',this._startPreviewAnimation.bind(this));this._previewOnion=this.contentElement.createChild('div','bezier-preview-onion');this._previewOnion.addEventListener('click',this._startPreviewAnimation.bind(this));this._outerContainer=this.contentElement.createChild('div','bezier-container');this._presetsContainer=this._outerContainer.createChild('div','bezier-presets');this._presetUI=new InlineEditor.BezierUI(40,40,0,2,false);this._presetCategories=[];for(let i=0;i<Presets.length;i++){this._presetCategories[i]=this._createCategory(Presets[i]);this._presetsContainer.appendChild(this._presetCategories[i].icon);}
this._curveUI=new InlineEditor.BezierUI(150,250,50,7,true);this._curve=this._outerContainer.createSVGChild('svg','bezier-curve');UI.installDragHandle(this._curve,this._dragStart.bind(this),this._dragMove.bind(this),this._dragEnd.bind(this),'default');this._header=this.contentElement.createChild('div','bezier-header');const minus=this._createPresetModifyIcon(this._header,'bezier-preset-minus','M 12 6 L 8 10 L 12 14');const plus=this._createPresetModifyIcon(this._header,'bezier-preset-plus','M 8 6 L 12 10 L 8 14');minus.addEventListener('click',this._presetModifyClicked.bind(this,false));plus.addEventListener('click',this._presetModifyClicked.bind(this,true));this._label=this._header.createChild('span','source-code bezier-display-value');}
setBezier(bezier){if(!bezier){return;}
this._bezier=bezier;this._updateUI();}
bezier(){return this._bezier;}
wasShown(){this._unselectPresets();for(const category of this._presetCategories){for(let i=0;i<category.presets.length;i++){if(this._bezier.asCSSText()===category.presets[i].value){category.presetIndex=i;this._presetCategorySelected(category);}}}
this._updateUI();this._startPreviewAnimation();}
_onchange(){this._updateUI();this.dispatchEventToListeners(Events.BezierChanged,this._bezier.asCSSText());}
_updateUI(){const labelText=this._selectedCategory?this._selectedCategory.presets[this._selectedCategory.presetIndex].name:this._bezier.asCSSText().replace(/\s(-\d\.\d)/g,'$1');this._label.textContent=Common.UIString(labelText);this._curveUI.drawCurve(this._bezier,this._curve);this._previewOnion.removeChildren();}
_dragStart(event){this._mouseDownPosition=new UI.Geometry.Point(event.x,event.y);const ui=this._curveUI;this._controlPosition=new UI.Geometry.Point(Number.constrain((event.offsetX-ui.radius)/ui.curveWidth(),0,1),(ui.curveHeight()+ui.marginTop+ui.radius-event.offsetY)/ui.curveHeight());const firstControlPointIsCloser=this._controlPosition.distanceTo(this._bezier.controlPoints[0])<this._controlPosition.distanceTo(this._bezier.controlPoints[1]);this._selectedPoint=firstControlPointIsCloser?0:1;this._bezier.controlPoints[this._selectedPoint]=this._controlPosition;this._unselectPresets();this._onchange();event.consume(true);return true;}
_updateControlPosition(mouseX,mouseY){const deltaX=(mouseX-this._mouseDownPosition.x)/this._curveUI.curveWidth();const deltaY=(mouseY-this._mouseDownPosition.y)/this._curveUI.curveHeight();const newPosition=new UI.Geometry.Point(Number.constrain(this._controlPosition.x+deltaX,0,1),this._controlPosition.y-deltaY);this._bezier.controlPoints[this._selectedPoint]=newPosition;}
_dragMove(event){this._updateControlPosition(event.x,event.y);this._onchange();}
_dragEnd(event){this._updateControlPosition(event.x,event.y);this._onchange();this._startPreviewAnimation();}
_createCategory(presetGroup){const presetElement=createElementWithClass('div','bezier-preset-category');const iconElement=presetElement.createSVGChild('svg','bezier-preset monospace');const category={presets:presetGroup,presetIndex:0,icon:presetElement};this._presetUI.drawCurve(UI.Geometry.CubicBezier.parse(category.presets[0].value),iconElement);iconElement.addEventListener('click',this._presetCategorySelected.bind(this,category));return category;}
_createPresetModifyIcon(parentElement,className,drawPath){const icon=parentElement.createSVGChild('svg','bezier-preset-modify '+className);icon.setAttribute('width',20);icon.setAttribute('height',20);const path=icon.createSVGChild('path');path.setAttribute('d',drawPath);return icon;}
_unselectPresets(){for(const category of this._presetCategories){category.icon.classList.remove('bezier-preset-selected');}
delete this._selectedCategory;this._header.classList.remove('bezier-header-active');}
_presetCategorySelected(category,event){if(this._selectedCategory===category){return;}
this._unselectPresets();this._header.classList.add('bezier-header-active');this._selectedCategory=category;this._selectedCategory.icon.classList.add('bezier-preset-selected');this.setBezier(UI.Geometry.CubicBezier.parse(category.presets[category.presetIndex].value));this._onchange();this._startPreviewAnimation();if(event){event.consume(true);}}
_presetModifyClicked(intensify,event){if(!this._selectedCategory){return;}
const length=this._selectedCategory.presets.length;this._selectedCategory.presetIndex=(this._selectedCategory.presetIndex+(intensify?1:-1)+length)%length;this.setBezier(UI.Geometry.CubicBezier.parse(this._selectedCategory.presets[this._selectedCategory.presetIndex].value));this._onchange();this._startPreviewAnimation();}
_startPreviewAnimation(){if(this._previewAnimation){this._previewAnimation.cancel();}
const animationDuration=1600;const numberOnionSlices=20;const keyframes=[{offset:0,transform:'translateX(0px)',easing:this._bezier.asCSSText(),opacity:1},{offset:0.9,transform:'translateX(218px)',opacity:1},{offset:1,transform:'translateX(218px)',opacity:0}];this._previewAnimation=this._previewElement.animate(keyframes,animationDuration);this._previewOnion.removeChildren();for(let i=0;i<=numberOnionSlices;i++){const slice=this._previewOnion.createChild('div','bezier-preview-animation');const player=slice.animate([{transform:'translateX(0px)',easing:this._bezier.asCSSText()},{transform:'translateX(218px)'}],{duration:animationDuration,fill:'forwards'});player.pause();player.currentTime=animationDuration*i/numberOnionSlices;}}}
export const Events={BezierChanged:Symbol('BezierChanged')};export const Presets=[[{name:'ease-in-out',value:'ease-in-out'},{name:'In Out · Sine',value:'cubic-bezier(0.45, 0.05, 0.55, 0.95)'},{name:'In Out · Quadratic',value:'cubic-bezier(0.46, 0.03, 0.52, 0.96)'},{name:'In Out · Cubic',value:'cubic-bezier(0.65, 0.05, 0.36, 1)'},{name:'Fast Out, Slow In',value:'cubic-bezier(0.4, 0, 0.2, 1)'},{name:'In Out · Back',value:'cubic-bezier(0.68, -0.55, 0.27, 1.55)'}],[{name:'Fast Out, Linear In',value:'cubic-bezier(0.4, 0, 1, 1)'},{name:'ease-in',value:'ease-in'},{name:'In · Sine',value:'cubic-bezier(0.47, 0, 0.75, 0.72)'},{name:'In · Quadratic',value:'cubic-bezier(0.55, 0.09, 0.68, 0.53)'},{name:'In · Cubic',value:'cubic-bezier(0.55, 0.06, 0.68, 0.19)'},{name:'In · Back',value:'cubic-bezier(0.6, -0.28, 0.74, 0.05)'}],[{name:'ease-out',value:'ease-out'},{name:'Out · Sine',value:'cubic-bezier(0.39, 0.58, 0.57, 1)'},{name:'Out · Quadratic',value:'cubic-bezier(0.25, 0.46, 0.45, 0.94)'},{name:'Out · Cubic',value:'cubic-bezier(0.22, 0.61, 0.36, 1)'},{name:'Linear Out, Slow In',value:'cubic-bezier(0, 0, 0.2, 1)'},{name:'Out · Back',value:'cubic-bezier(0.18, 0.89, 0.32, 1.28)'}]];self.InlineEditor=self.InlineEditor||{};InlineEditor=InlineEditor||{};InlineEditor.BezierEditor=BezierEditor;InlineEditor.BezierEditor.Events=Events;InlineEditor.BezierEditor.Presets=Presets;InlineEditor.BezierEditor.PresetCategory;import'./DiffWrapper.js';import'./diff_match_patch.js';import*as Diff from'./DiffWrapper.js';export{Diff,};(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32}
diff_match_patch.prototype.diff_main=function(a,b,c,d){"undefined"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);var f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a};diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c):1==f.length?[[-1,a],[1,b]]:(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};diff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([0,""]);for(var e=d=b=0,f="",g="";b<a.length;){switch(a[b][0]){case 1:e++;g+=a[b][1];break;case-1:d++;f+=a[b][1];break;case 0:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=d.length}d=e=0;g=f=""}b++}a.pop();return a};diff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=f,h=2*f,j=Array(h),i=Array(h),k=0;k<h;k++)j[k]=-1,i[k]=-1;j[g+1]=0;i[g+1]=0;for(var k=d-e,q=0!=k%2,r=0,t=0,p=0,w=0,v=0;v<f&&!((new Date).getTime()>c);v++){for(var n=-v+r;n<=v-t;n+=2){var l=g+n,m;m=n==-v||n!=v&&j[l-1]<j[l+1]?j[l+1]:j[l-1]+1;for(var s=m-n;m<d&&s<e&&a.charAt(m)==b.charAt(s);)m++,s++;j[l]=m;if(m>d)t+=2;else if(s>e)r+=2;else if(q&&(l=g+k-n,0<=l&&l<h&&-1!=i[l])){var u=d-i[l];if(m>=u)return this.diff_bisectSplit_(a,b,m,s,c)}}for(n=-v+p;n<=v-w;n+=2){l=g+n;u=n==-v||n!=v&&i[l-1]<i[l+1]?i[l+1]:i[l-1]+1;for(m=u-n;u<d&&m<e&&a.charAt(d-u-1)==b.charAt(e-m-1);)u++,m++;i[l]=u;if(u>d)w+=2;else if(m>e)p+=2;else if(!q&&(l=g+k-n,0<=l&&(l<h&&-1!=j[l])&&(m=j[l],s=g+m-l,u=d-u,m>=u)))return this.diff_bisectSplit_(a,b,m,s,c)}}return[[-1,a],[1,b]]};diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf("\n",c);-1==f&&(f=a.length-1);var r=a.substring(c,f+1),c=f+1;(e.hasOwnProperty?e.hasOwnProperty(r):void 0!==e[r])?b+=String.fromCharCode(e[r]):(b+=String.fromCharCode(g),e[r]=g,d[g++]=r)}return b}var d=[],e={};d[0]="";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};diff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join("")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};diff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};diff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;for(var d=0,e=1;;){var f=a.substring(c-e),f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};diff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g="",h,j,n,l;-1!=(e=b.indexOf(d,e+1));){var m=f.diff_commonPrefix(a.substring(c),b.substring(e)),s=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<s+m&&(g=b.substring(e-s,e)+b.substring(e,e+m),h=a.substring(0,c-s),j=a.substring(c+m),n=b.substring(0,e-s),l=b.substring(e+m))}return 2*g.length>=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null;var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4)),d=c(d,e,Math.ceil(d.length/2)),h;if(!g&&!d)return null;h=d?g?g[4].length>d[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]};diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f<a.length;)0==a[f][0]?(c[d++]=f,g=j,h=i,i=j=0,e=a[f][1]):(1==a[f][0]?j+=a[f][1].length:i+=a[f][1].length,e&&(e.length<=Math.max(g,h)&&e.length<=Math.max(j,i))&&(a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,d--,f=0<d?c[d-1]:-1,i=j=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(-1==a[f-1][0]&&1==a[f][0]){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}};diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_);return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(0==a[c-1][0]&&0==a[c+1][0]){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g)var h=e.substring(e.length-g),d=d.substring(0,d.length-g),e=h+e.substring(0,e.length-g),f=h+f;for(var g=d,h=e,j=f,i=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){var d=d+e.charAt(0),e=e.substring(1)+f.charAt(0),f=f.substring(1),k=b(d,e)+b(e,f);k>=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]=h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/;diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;f<a.length;){if(0==a[f][0])a[f][1].length<this.Diff_EditCost&&(j||i)?(c[d++]=f,g=j,h=i,e=a[f][1]):(d=0,e=null),j=i=!1;else if(-1==a[f][0]?i=!0:j=!0,e&&(g&&h&&j&&i||e.length<this.Diff_EditCost/2&&3==g+h+j+i))a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,e=null,g&&h?(j=i=!0,d=0):(d--,f=0<d?c[d-1]:-1,j=i=!1),b=!0;f++}b&&this.diff_cleanupMerge(a)};diff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([0,""]);for(var b=0,c=0,d=0,e="",f="",g;b<a.length;)switch(a[b][0]){case 1:d++;f+=a[b][1];b++;break;case-1:c++;e+=a[b][1];b++;break;case 0:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&0==a[b-c-d-1][0]?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[0,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-g)+a[b][1],f=f.substring(0,f.length-
g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[1,f]):0===d?a.splice(b-c,c+d,[-1,e]):a.splice(b-c-d,c+d,[-1,e],[1,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&0==a[b-1][0]?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=""}""===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)0==a[b-1][0]&&0==a[b+1][0]&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,a[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};diff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){1!==a[g][0]&&(c+=a[g][1].length);-1!==a[g][0]&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)};diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\n/g,g=0;g<a.length;g++){var h=a[g][0],j=a[g][1],j=j.replace(c,"&amp;").replace(d,"&lt;").replace(e,"&gt;").replace(f,"&para;<br>");switch(h){case 1:b[g]='<ins style="background:#e6ffe6;">'+j+"</ins>";break;case-1:b[g]='<del style="background:#ffe6e6;">'+j+"</del>";break;case 0:b[g]="<span>"+j+"</span>"}}return b.join("")};diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)-1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][0],g=a[e][1];switch(f){case 1:c+=g.length;break;case-1:d+=g.length;break;case 0:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};diff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case 1:b[c]="+"+encodeURI(a[c][1]);break;case-1:b[c]="-"+a[c][1].length;break;case 0:b[c]="="+a[c][1].length}return b.join("\t").replace(/%20/g," ")};diff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case"+":try{c[d++]=[1,decodeURI(h)]}catch(j){throw Error("Illegal escape in diff_fromDelta: "+h);}break;case"-":case"=":var i=parseInt(h,10);if(isNaN(i)||0>i)throw Error("Invalid number in diff_fromDelta: "+h);h=a.substring(e,e+=i);"="==f[g].charAt(0)?c[d++]=[0,h]:c[d++]=[-1,h];break;default:if(f[g])throw Error("Invalid diff operation in diff_fromDelta: "+
f[g]);}}if(e!=a.length)throw Error("Delta length ("+e+") does not equal source text length ("+a.length+").");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error("Null input. (match_main)");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};diff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return!f.Match_Distance?g?1:e:e+g/f.Match_Distance}if(b.length>this.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<<b.length-1,h=-1,i,k,q=b.length+a.length,r,t=0;t<b.length;t++){i=0;for(k=q;i<k;)d(t,c+
k)<=g?i=k:q=k,k=Math.floor((q-i)/2+i);q=k;i=Math.max(1,c-k+1);var p=Math.min(c+k,a.length)+b.length;k=Array(p+2);for(k[p+1]=(1<<t)-1;p>=i;p--){var w=e[a.charAt(p-1)];k[p]=0===t?(k[p+1]<<1|1)&w:(k[p+1]<<1|1)&w|((r[p+1]|r[p])<<1|1)|r[p+1];if(k[p]&j&&(w=d(t,p-1),w<=g))if(g=w,h=p-1,h>c)i=Math.max(1,2*c-h);else break}if(d(t+1,c)>g)break;r=k}return h};diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};diff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([0,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([0,d]);a.start1-=c.length;a.start2-=c.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};diff_match_patch.prototype.patch_make=function(a,b,c){var d;if("string"==typeof a&&"string"==typeof b&&"undefined"==typeof c)d=a,b=this.diff_main(d,b,!0),2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b));else if(a&&"object"==typeof a&&"undefined"==typeof b&&"undefined"==typeof c)b=a,d=this.diff_text1(b);else if("string"==typeof a&&b&&"object"==typeof b&&"undefined"==typeof c)d=a;else if("string"==typeof a&&"string"==typeof b&&c&&"object"==typeof c)d=a,b=c;else throw Error("Unknown call format to patch_make.");if(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,j=0;j<b.length;j++){var i=b[j][0],k=b[j][1];!e&&0!==i&&(a.start1=f,a.start2=g);switch(i){case 1:a.diffs[e++]=b[j];a.length2+=k.length;d=d.substring(0,g)+k+d.substring(g);break;case-1:a.length1+=k.length;a.diffs[e++]=b[j];d=d.substring(0,g)+d.substring(g+k.length);break;case 0:k.length<=2*this.Patch_Margin&&e&&b.length!=j+1?(a.diffs[e++]=b[j],a.length1+=k.length,a.length2+=k.length):k.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};diff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),j,i=-1;if(h.length>this.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g);if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;i<a[f].diffs.length;i++){var q=a[f].diffs[i];0!==q[0]&&(k=this.diff_xIndex(g,h));1===q[0]?b=b.substring(0,j+k)+q[1]+b.substring(j+k):-1===q[0]&&(b=b.substring(0,j+k)+b.substring(j+this.diff_xIndex(g,h+q[1].length)));-1!==q[0]&&(h+=q[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};diff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c="",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;var d=a[0],e=d.diffs;if(0==e.length||0!=e[0][0])e.unshift([0,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g="";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,j=!0;h.start1=e-g.length;h.start2=f-g.length;""!==g&&(h.length1=h.length2=g.length,h.diffs.push([0,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){var g=d.diffs[0][0],i=d.diffs[0][1];1===g?(h.length2+=i.length,f+=i.length,h.diffs.push(d.diffs.shift()),j=!1):-1===g&&1==h.diffs.length&&0==h.diffs[0][0]&&i.length>2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&&(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join("")};diff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split("\n");for(var c=0,d=/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error("Invalid patch string: "+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);""===e[2]?(f.start1--,f.length1=1):"0"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);""===e[4]?(f.start2--,f.length2=1):"0"==e[4]?f.length2=0:(f.start2--,f.length2=parseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error("Illegal escape in patch_fromText: "+g);}if("-"==e)f.diffs.push([-1,g]);else if("+"==e)f.diffs.push([1,g]);else if(" "==e)f.diffs.push([0,g]);else if("@"==e)break;else if(""!==e)throw Error('Invalid patch mode "'+e+'" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};diff_match_patch.patch_obj.prototype.toString=function(){var a,b;a=0===this.length1?this.start1+",0":1==this.length1?this.start1+1:this.start1+1+","+this.length1;b=0===this.length2?this.start2+",0":1==this.length2?this.start2+1:this.start2+1+","+this.length2;a=["@@ -"+a+" +"+b+" @@\n"];var c;for(b=0;b<this.diffs.length;b++){switch(this.diffs[b][0]){case 1:c="+";break;case-1:c="-";break;case 0:c=" "}a[b+1]=c+encodeURI(this.diffs[b][1])+"\n"}return a.join("").replace(/%20/g," ")};window.diff_match_patch=diff_match_patch;window.DIFF_DELETE=-1;window.DIFF_INSERT=1;window.DIFF_EQUAL=0;})()export const DiffWrapper={charDiff:function(text1,text2,cleanup){const differ=new diff_match_patch();const diff=differ.diff_main(text1,text2);if(cleanup){differ.diff_cleanupSemantic(diff);}
return diff;},lineDiff:function(lines1,lines2){const idMap=new Common.CharacterIdMap();const text1=lines1.map(line=>idMap.toChar(line)).join('');const text2=lines2.map(line=>idMap.toChar(line)).join('');const diff=DiffWrapper.charDiff(text1,text2);const lineDiff=[];for(let i=0;i<diff.length;i++){const lines=[];for(let j=0;j<diff[i][1].length;j++){lines.push(idMap.fromChar(diff[i][1][j]));}
lineDiff.push({0:diff[i][0],1:lines});}
return lineDiff;},convertToEditDiff:function(diff){const normalized=[];let added=0;let removed=0;for(let i=0;i<diff.length;++i){const token=diff[i];if(token[0]===Operation.Equal){flush();normalized.push([Operation.Equal,token[1].length]);}else if(token[0]===Operation.Delete){removed+=token[1].length;}else{added+=token[1].length;}}
flush();return normalized;function flush(){if(added&&removed){const min=Math.min(added,removed);normalized.push([Operation.Edit,min]);added-=min;removed-=min;}
if(added||removed){const balance=added-removed;const type=balance<0?Operation.Delete:Operation.Insert;normalized.push([type,Math.abs(balance)]);added=0;removed=0;}}}};export const Operation={Equal:0,Insert:1,Delete:-1,Edit:2};self.Diff=self.Diff||{};Diff=Diff||{};Diff.Diff=DiffWrapper;Diff.Diff.Operation=Operation;Diff.Diff.DiffArray;import*as FormatterWorkerPool from'./FormatterWorkerPool.js';import*as ScriptFormatter from'./ScriptFormatter.js';export{FormatterWorkerPool,ScriptFormatter,};export class FormatterInterface{}
FormatterInterface.format=function(contentType,mimeType,content,callback){if(contentType.isDocumentOrScriptOrStyleSheet()){new ScriptFormatter(mimeType,content,callback);}else{new ScriptIdentityFormatter(mimeType,content,callback);}};FormatterInterface.locationToPosition=function(lineEndings,lineNumber,columnNumber){const position=lineNumber?lineEndings[lineNumber-1]+1:0;return position+columnNumber;};FormatterInterface.positionToLocation=function(lineEndings,position){const lineNumber=lineEndings.upperBound(position-1);let columnNumber;if(!lineNumber){columnNumber=position;}else{columnNumber=position-lineEndings[lineNumber-1]-1;}
return[lineNumber,columnNumber];};export class ScriptFormatter{constructor(mimeType,content,callback){content=content.replace(/\r\n?|[\n\u2028\u2029]/g,'\n').replace(/^\uFEFF/,'');this._callback=callback;this._originalContent=content;Formatter.formatterWorkerPool().format(mimeType,content,Common.moduleSetting('textEditorIndent').get()).then(this._didFormatContent.bind(this));}
_didFormatContent(formatResult){const sourceMapping=new FormatterSourceMappingImpl(this._originalContent.computeLineEndings(),formatResult.content.computeLineEndings(),formatResult.mapping);this._callback(formatResult.content,sourceMapping);}}
class ScriptIdentityFormatter{constructor(mimeType,content,callback){callback(content,new IdentityFormatterSourceMapping());}}
export class FormatterSourceMapping{originalToFormatted(lineNumber,columnNumber){}
formattedToOriginal(lineNumber,columnNumber){}}
class IdentityFormatterSourceMapping{originalToFormatted(lineNumber,columnNumber){return[lineNumber,columnNumber||0];}
formattedToOriginal(lineNumber,columnNumber){return[lineNumber,columnNumber||0];}}
class FormatterSourceMappingImpl{constructor(originalLineEndings,formattedLineEndings,mapping){this._originalLineEndings=originalLineEndings;this._formattedLineEndings=formattedLineEndings;this._mapping=mapping;}
originalToFormatted(lineNumber,columnNumber){const originalPosition=FormatterInterface.locationToPosition(this._originalLineEndings,lineNumber,columnNumber||0);const formattedPosition=this._convertPosition(this._mapping.original,this._mapping.formatted,originalPosition||0);return FormatterInterface.positionToLocation(this._formattedLineEndings,formattedPosition);}
formattedToOriginal(lineNumber,columnNumber){const formattedPosition=FormatterInterface.locationToPosition(this._formattedLineEndings,lineNumber,columnNumber||0);const originalPosition=this._convertPosition(this._mapping.formatted,this._mapping.original,formattedPosition);return FormatterInterface.positionToLocation(this._originalLineEndings,originalPosition||0);}
_convertPosition(positions1,positions2,position){const index=positions1.upperBound(position)-1;let convertedPosition=positions2[index]+position-positions1[index];if(index<positions2.length-1&&convertedPosition>positions2[index+1]){convertedPosition=positions2[index+1];}
return convertedPosition;}}
self.Formatter=self.Formatter||{};Formatter=Formatter||{};Formatter.Formatter=FormatterInterface;Formatter.ScriptFormatter=ScriptFormatter;Formatter.FormatterSourceMapping=FormatterSourceMapping;const MaxWorkers=2;export class FormatterWorkerPool{constructor(){this._taskQueue=[];this._workerTasks=new Map();}
_createWorker(){const worker=new Common.Worker('formatter_worker');worker.onmessage=this._onWorkerMessage.bind(this,worker);worker.onerror=this._onWorkerError.bind(this,worker);return worker;}
_processNextTask(){if(!this._taskQueue.length){return;}
let freeWorker=this._workerTasks.keysArray().find(worker=>!this._workerTasks.get(worker));if(!freeWorker&&this._workerTasks.size<MaxWorkers){freeWorker=this._createWorker();}
if(!freeWorker){return;}
const task=this._taskQueue.shift();this._workerTasks.set(freeWorker,task);freeWorker.postMessage({method:task.method,params:task.params});}
_onWorkerMessage(worker,event){const task=this._workerTasks.get(worker);if(task.isChunked&&event.data&&!event.data['isLastChunk']){task.callback(event.data);return;}
this._workerTasks.set(worker,null);this._processNextTask();task.callback(event.data?event.data:null);}
_onWorkerError(worker,event){console.error(event);const task=this._workerTasks.get(worker);worker.terminate();this._workerTasks.delete(worker);const newWorker=this._createWorker();this._workerTasks.set(newWorker,null);this._processNextTask();task.callback(null);}
_runChunkedTask(methodName,params,callback){const task=new Task(methodName,params,onData,true);this._taskQueue.push(task);this._processNextTask();function onData(data){if(!data){callback(true,null);return;}
const isLastChunk=!!data['isLastChunk'];const chunk=data['chunk'];callback(isLastChunk,chunk);}}
_runTask(methodName,params){let callback;const promise=new Promise(fulfill=>callback=fulfill);const task=new Task(methodName,params,callback,false);this._taskQueue.push(task);this._processNextTask();return promise;}
parseJSONRelaxed(content){return this._runTask('parseJSONRelaxed',{content:content});}
parseSCSS(content){return this._runTask('parseSCSS',{content:content}).then(rules=>rules||[]);}
format(mimeType,content,indentString){const parameters={mimeType:mimeType,content:content,indentString:indentString};return(this._runTask('format',parameters));}
javaScriptIdentifiers(content){return this._runTask('javaScriptIdentifiers',{content:content}).then(ids=>ids||[]);}
evaluatableJavaScriptSubstring(content){return this._runTask('evaluatableJavaScriptSubstring',{content:content}).then(text=>text||'');}
preprocessTopLevelAwaitExpressions(content){return this._runTask('preprocessTopLevelAwaitExpressions',{content:content}).then(text=>text||'');}
parseCSS(content,callback){this._runChunkedTask('parseCSS',{content:content},onDataChunk);function onDataChunk(isLastChunk,data){const rules=(data||[]);callback(isLastChunk,rules);}}
javaScriptOutline(content,callback){this._runChunkedTask('javaScriptOutline',{content:content},onDataChunk);function onDataChunk(isLastChunk,data){const items=(data||[]);callback(isLastChunk,items);}}
outlineForMimetype(content,mimeType,callback){switch(mimeType){case'text/html':case'text/javascript':this.javaScriptOutline(content,javaScriptCallback);return true;case'text/css':this.parseCSS(content,cssCallback);return true;}
return false;function javaScriptCallback(isLastChunk,items){callback(isLastChunk,items.map(item=>({line:item.line,column:item.column,title:item.name,subtitle:item.arguments})));}
function cssCallback(isLastChunk,rules){callback(isLastChunk,rules.map(rule=>({line:rule.lineNumber,column:rule.columnNumber,title:rule.selectorText||rule.atRule})));}}
findLastExpression(content){return(this._runTask('findLastExpression',{content}));}
findLastFunctionCall(content){return(this._runTask('findLastFunctionCall',{content}));}
argumentsList(content){return(this._runTask('argumentsList',{content}));}}
class Task{constructor(method,params,callback,isChunked){this.method=method;this.params=params;this.callback=callback;this.isChunked=isChunked;}}
export class FormatResult{constructor(){this.content;this.mapping;}}
class JSOutlineItem{constructor(){this.name;this.arguments;this.line;this.column;}}
class CSSProperty{constructor(){this.name;this.nameRange;this.value;this.valueRange;this.range;this.disabled;}}
class CSSStyleRule{constructor(){this.selectorText;this.styleRange;this.lineNumber;this.columnNumber;this.properties;}}
class SCSSProperty{constructor(){this.range;this.name;this.value;this.disabled;}}
class SCSSRule{constructor(){this.selectors;this.properties;this.styleRange;}}
export function formatterWorkerPool(){if(!Formatter._formatterWorkerPool){Formatter._formatterWorkerPool=new FormatterWorkerPool();}
return Formatter._formatterWorkerPool;}
self.Formatter=self.Formatter||{};Formatter=Formatter||{};Formatter.FormatterWorkerPool=FormatterWorkerPool;Formatter.formatterWorkerPool=formatterWorkerPool;Formatter.FormatterWorkerPool.FormatResult=FormatResult;Formatter.FormatterWorkerPool.FormatMapping;Formatter.FormatterWorkerPool.OutlineItem;Formatter.FormatterWorkerPool.CSSAtRule;Formatter.FormatterWorkerPool.CSSRule;Formatter.FormatterWorkerPool.TextRange;import*as ContrastDetails from'./ContrastDetails.js';import*as ContrastInfo from'./ContrastInfo.js';import*as ContrastOverlay from'./ContrastOverlay.js';import*as Spectrum from'./Spectrum.js';export{ContrastDetails,ContrastInfo,ContrastOverlay,Spectrum,};export class Spectrum extends UI.VBox{constructor(contrastInfo){function appendSwitcherIcon(parentElement){const icon=parentElement.createSVGChild('svg');icon.setAttribute('height',16);icon.setAttribute('width',16);const path=icon.createSVGChild('path');path.setAttribute('d','M5,6 L11,6 L8,2 Z M5,10 L11,10 L8,14 Z');return icon;}
super(true);this.registerRequiredCSS('color_picker/spectrum.css');this.contentElement.tabIndex=0;this.setDefaultFocusedElement(this.contentElement);this._colorElement=this.contentElement.createChild('div','spectrum-color');this._colorDragElement=this._colorElement.createChild('div','spectrum-sat fill').createChild('div','spectrum-val fill').createChild('div','spectrum-dragger');this._dragX=0;this._dragY=0;const toolsContainer=this.contentElement.createChild('div','spectrum-tools');const toolbar=new UI.Toolbar('spectrum-eye-dropper',toolsContainer);this._colorPickerButton=new UI.ToolbarToggle(Common.UIString('Toggle color picker'),'largeicon-eyedropper');this._colorPickerButton.setToggled(true);this._colorPickerButton.addEventListener(UI.ToolbarButton.Events.Click,this._toggleColorPicker.bind(this,undefined));toolbar.appendToolbarItem(this._colorPickerButton);this._swatch=new Swatch(toolsContainer);this._hueElement=toolsContainer.createChild('div','spectrum-hue');this._hueElement.tabIndex=0;this._hueElement.addEventListener('keydown',this._onSliderKeydown.bind(this,positionHue.bind(this)));UI.ARIAUtils.setAccessibleName(this._hueElement,ls`Change hue`);UI.ARIAUtils.markAsSlider(this._hueElement,0,360);this._hueSlider=this._hueElement.createChild('div','spectrum-slider');this._alphaElement=toolsContainer.createChild('div','spectrum-alpha');this._alphaElement.tabIndex=0;this._alphaElement.addEventListener('keydown',this._onSliderKeydown.bind(this,positionAlpha.bind(this)));UI.ARIAUtils.setAccessibleName(this._alphaElement,ls`Change alpha`);UI.ARIAUtils.markAsSlider(this._alphaElement,0,1);this._alphaElementBackground=this._alphaElement.createChild('div','spectrum-alpha-background');this._alphaSlider=this._alphaElement.createChild('div','spectrum-slider');this._displayContainer=toolsContainer.createChild('div','spectrum-text source-code');this._textValues=[];for(let i=0;i<4;++i){const inputValue=UI.createInput('spectrum-text-value');this._displayContainer.appendChild(inputValue);inputValue.maxLength=4;this._textValues.push(inputValue);inputValue.addEventListener('keydown',this._inputChanged.bind(this),false);inputValue.addEventListener('input',this._inputChanged.bind(this),false);inputValue.addEventListener('mousewheel',this._inputChanged.bind(this),false);}
this._textLabels=this._displayContainer.createChild('div','spectrum-text-label');this._hexContainer=toolsContainer.createChild('div','spectrum-text spectrum-text-hex source-code');this._hexValue=UI.createInput('spectrum-text-value');this._hexContainer.appendChild(this._hexValue);this._hexValue.maxLength=9;this._hexValue.addEventListener('keydown',this._inputChanged.bind(this),false);this._hexValue.addEventListener('input',this._inputChanged.bind(this),false);this._hexValue.addEventListener('mousewheel',this._inputChanged.bind(this),false);const label=this._hexContainer.createChild('div','spectrum-text-label');label.textContent=ls`HEX`;UI.ARIAUtils.setAccessibleName(this._hexValue,label.textContent);const displaySwitcher=toolsContainer.createChild('div','spectrum-display-switcher spectrum-switcher');appendSwitcherIcon(displaySwitcher);displaySwitcher.tabIndex=0;self.onInvokeElement(displaySwitcher,event=>{this._formatViewSwitch();event.consume(true);});UI.ARIAUtils.setAccessibleName(displaySwitcher,ls`Change color format`);UI.ARIAUtils.markAsButton(displaySwitcher);UI.installDragHandle(this._hueElement,dragStart.bind(this,positionHue.bind(this)),positionHue.bind(this),null,'pointer','default');UI.installDragHandle(this._alphaElement,dragStart.bind(this,positionAlpha.bind(this)),positionAlpha.bind(this),null,'pointer','default');UI.installDragHandle(this._colorElement,dragStart.bind(this,positionColor.bind(this)),positionColor.bind(this),null,'pointer','default');if(contrastInfo){this._contrastInfo=contrastInfo;this._contrastOverlay=new ColorPicker.ContrastOverlay(this._contrastInfo,this._colorElement);this._contrastDetails=new ColorPicker.ContrastDetails(this._contrastInfo,this.contentElement,this._toggleColorPicker.bind(this),this._contrastPanelExpanded.bind(this));this._contrastDetailsBackgroundColorPickedToggledBound=this._contrastDetailsBackgroundColorPickedToggled.bind(this);}
this.element.classList.add('flex-none');this._palettes=new Map();this._palettePanel=this.contentElement.createChild('div','palette-panel');this._palettePanelShowing=false;this._paletteSectionContainer=this.contentElement.createChild('div','spectrum-palette-container');this._paletteContainer=this._paletteSectionContainer.createChild('div','spectrum-palette');this._paletteContainer.addEventListener('contextmenu',this._showPaletteColorContextMenu.bind(this,-1));this._shadesContainer=this.contentElement.createChild('div','palette-color-shades hidden');UI.installDragHandle(this._paletteContainer,this._paletteDragStart.bind(this),this._paletteDrag.bind(this),this._paletteDragEnd.bind(this),'default');const paletteSwitcher=this._paletteSectionContainer.createChild('div','spectrum-palette-switcher spectrum-switcher');appendSwitcherIcon(paletteSwitcher);UI.ARIAUtils.markAsButton(paletteSwitcher);UI.ARIAUtils.setAccessibleName(paletteSwitcher,ls`Preview palettes`);paletteSwitcher.tabIndex=0;self.onInvokeElement(paletteSwitcher,event=>{this._togglePalettePanel(true);event.consume(true);});this._deleteIconToolbar=new UI.Toolbar('delete-color-toolbar');this._deleteButton=new UI.ToolbarButton('','largeicon-trash-bin');this._deleteIconToolbar.appendToolbarItem(this._deleteButton);const overlay=this.contentElement.createChild('div','spectrum-overlay fill');overlay.addEventListener('click',this._togglePalettePanel.bind(this,false));this._addColorToolbar=new UI.Toolbar('add-color-toolbar');const addColorButton=new UI.ToolbarButton(Common.UIString('Add to palette'),'largeicon-add');addColorButton.addEventListener(UI.ToolbarButton.Events.Click,this._onAddColorMousedown.bind(this));addColorButton.element.addEventListener('keydown',this._onAddColorKeydown.bind(this));this._addColorToolbar.appendToolbarItem(addColorButton);this._colorPickedBound=this._colorPicked.bind(this);this._loadPalettes();new PaletteGenerator(palette=>{if(palette.colors.length){this.addPalette(palette);}else if(this._selectedColorPalette.get()===palette.title){this._paletteSelected(MaterialPalette);}});function dragStart(callback,event){this._colorOffset=this._colorElement.totalOffset();callback(event);return true;}
function getUpdatedSliderPosition(element,event){const elementPosition=element.getBoundingClientRect();switch(event.key){case'ArrowLeft':case'ArrowDown':return elementPosition.left-1;case'ArrowRight':case'ArrowUp':return elementPosition.right+1;default:return event.x;}}
function positionHue(event){const hsva=this._hsv.slice();const sliderPosition=getUpdatedSliderPosition(this._hueSlider,event);const hueAlphaLeft=this._hueElement.getBoundingClientRect().left;const positionFraction=(sliderPosition-hueAlphaLeft)/this._hueAlphaWidth;const newHue=1-positionFraction;hsva[0]=Number.constrain(newHue,0,1);this._innerSetColor(hsva,'',undefined,undefined,_ChangeSource.Other);const colorValues=this._color().canonicalHSLA();UI.ARIAUtils.setValueNow(this._hueElement,colorValues[0]);}
function positionAlpha(event){const hsva=this._hsv.slice();const sliderPosition=getUpdatedSliderPosition(this._alphaSlider,event);const hueAlphaLeft=this._hueElement.getBoundingClientRect().left;const positionFraction=(sliderPosition-hueAlphaLeft)/this._hueAlphaWidth;const newAlpha=Math.round(positionFraction*100)/100;hsva[3]=Number.constrain(newAlpha,0,1);this._innerSetColor(hsva,'',undefined,undefined,_ChangeSource.Other);const colorValues=this._color().canonicalHSLA();UI.ARIAUtils.setValueText(this._alphaElement,colorValues[3]);}
function positionColor(event){const hsva=this._hsv.slice();hsva[1]=Number.constrain((event.x-this._colorOffset.left)/this.dragWidth,0,1);hsva[2]=Number.constrain(1-(event.y-this._colorOffset.top)/this.dragHeight,0,1);this._innerSetColor(hsva,'',undefined,undefined,_ChangeSource.Other);}}
_contrastDetailsBackgroundColorPickedToggled({data:enabled}){if(enabled){this._toggleColorPicker(false);}}
_contrastPanelExpanded(){this._contrastOverlay.setVisible(this._contrastDetails.expanded());this._resizeForSelectedPalette(true);}
_updatePalettePanel(){this._palettePanel.removeChildren();const title=this._palettePanel.createChild('div','palette-title');title.textContent=Common.UIString('Color Palettes');const toolbar=new UI.Toolbar('',this._palettePanel);this._closeButton=new UI.ToolbarButton(ls`Return to color picker`,'largeicon-delete');this._closeButton.addEventListener(UI.ToolbarButton.Events.Click,this._togglePalettePanel.bind(this,false));this._closeButton.element.addEventListener('keydown',this._onCloseBtnKeydown.bind(this));toolbar.appendToolbarItem(this._closeButton);for(const palette of this._palettes.values()){this._palettePanel.appendChild(this._createPreviewPaletteElement(palette));}}
_togglePalettePanel(show){if(this._palettePanelShowing===show){return;}
if(show){this._updatePalettePanel();}
this._palettePanelShowing=show;this.contentElement.classList.toggle('palette-panel-showing',show);this._focus();}
_onCloseBtnKeydown(event){if(isEscKey(event)||isEnterOrSpaceKey(event)){this._togglePalettePanel(false);event.consume(true);}}
_onSliderKeydown(sliderNewPosition,event){switch(event.key){case'ArrowLeft':case'ArrowRight':case'ArrowDown':case'ArrowUp':sliderNewPosition(event);event.consume(true);}}
_focus(){if(!this.isShowing()){return;}
if(this._palettePanelShowing){this._closeButton.element.focus({preventScroll:true});}else{this.contentElement.focus();}}
_createPaletteColor(colorText,colorName,animationDelay){const element=createElementWithClass('div','spectrum-palette-color');element.style.background=String.sprintf('linear-gradient(%s, %s), url(Images/checker.png)',colorText,colorText);if(animationDelay){element.animate([{opacity:0},{opacity:1}],{duration:100,delay:animationDelay,fill:'backwards'});}
element.title=colorName||colorText;return element;}
_showPalette(palette,animate,event){this._resizeForSelectedPalette();this._paletteContainer.removeChildren();for(let i=0;i<palette.colors.length;i++){const animationDelay=animate?i*100/palette.colors.length:0;const colorElement=this._createPaletteColor(palette.colors[i],palette.colorNames[i],animationDelay);UI.ARIAUtils.markAsButton(colorElement);UI.ARIAUtils.setAccessibleName(colorElement,ls`Color ${palette.colors[i]}`);colorElement.tabIndex=-1;colorElement.addEventListener('mousedown',this._paletteColorSelected.bind(this,palette.colors[i],palette.colorNames[i],palette.matchUserFormat));colorElement.addEventListener('keydown',this._onPaletteColorKeydown.bind(this,palette.colors[i],palette.colorNames[i],palette.matchUserFormat));if(palette.mutable){colorElement.__mutable=true;colorElement.__color=palette.colors[i];colorElement.addEventListener('contextmenu',this._showPaletteColorContextMenu.bind(this,i));}else if(palette===MaterialPalette){colorElement.classList.add('has-material-shades');let shadow=colorElement.createChild('div','spectrum-palette-color spectrum-palette-color-shadow');shadow.style.background=palette.colors[i];shadow=colorElement.createChild('div','spectrum-palette-color spectrum-palette-color-shadow');shadow.style.background=palette.colors[i];colorElement.title=ls`${palette.colors[i]}. Long-click to show alternate shades.`;UI.ARIAUtils.setAccessibleName(colorElement,colorElement.title);new UI.LongClickController(colorElement,this._showLightnessShades.bind(this,colorElement,palette.colors[i]));}
this._paletteContainer.appendChild(colorElement);}
if(this._paletteContainer.childNodes.length>0){this._paletteContainer.childNodes[0].tabIndex=0;}
this._paletteContainerMutable=palette.mutable;if(palette.mutable){this._paletteContainer.appendChild(this._addColorToolbar.element);this._paletteContainer.appendChild(this._deleteIconToolbar.element);}else{this._addColorToolbar.element.remove();this._deleteIconToolbar.element.remove();}
this._togglePalettePanel(false);this._focus();}
_showLightnessShades(colorElement,colorText,event){function closeLightnessShades(element){this._shadesContainer.classList.add('hidden');element.classList.remove('spectrum-shades-shown');this._shadesContainer.ownerDocument.removeEventListener('mousedown',this._shadesCloseHandler,true);delete this._shadesCloseHandler;}
if(this._shadesCloseHandler){this._shadesCloseHandler();}
this._shadesContainer.classList.remove('hidden');this._shadesContainer.removeChildren();this._shadesContainer.animate([{transform:'scaleY(0)',opacity:'0'},{transform:'scaleY(1)',opacity:'1'}],{duration:200,easing:'cubic-bezier(0.4, 0, 0.2, 1)'});let shadesTop=this._paletteContainer.offsetTop+colorElement.offsetTop+colorElement.parentElement.offsetTop;if(this._contrastDetails){shadesTop+=this._contrastDetails.element().offsetHeight;}
this._shadesContainer.style.top=shadesTop+'px';this._shadesContainer.style.left=colorElement.offsetLeft+'px';colorElement.classList.add('spectrum-shades-shown');const shades=MaterialPaletteShades[colorText];for(let i=shades.length-1;i>=0;i--){const shadeElement=this._createPaletteColor(shades[i],undefined,i*200/shades.length+100);UI.ARIAUtils.markAsButton(shadeElement);UI.ARIAUtils.setAccessibleName(shadeElement,ls`Color ${shades[i]}`);shadeElement.tabIndex=-1;shadeElement.addEventListener('mousedown',this._paletteColorSelected.bind(this,shades[i],shades[i],false));shadeElement.addEventListener('keydown',this._onShadeColorKeydown.bind(this,shades[i],shades[i],false,colorElement));this._shadesContainer.appendChild(shadeElement);}
if(this._shadesContainer.childNodes.length>0){this._shadesContainer.childNodes[this._shadesContainer.childNodes.length-1].focus();}
this._shadesCloseHandler=closeLightnessShades.bind(this,colorElement);this._shadesContainer.ownerDocument.addEventListener('mousedown',this._shadesCloseHandler,true);}
_slotIndexForEvent(e){const localX=e.pageX-this._paletteContainer.totalOffsetLeft();const localY=e.pageY-this._paletteContainer.totalOffsetTop();const col=Math.min(localX/_colorChipSize|0,_itemsPerPaletteRow-1);const row=(localY/_colorChipSize)|0;return Math.min(row*_itemsPerPaletteRow+col,this._customPaletteSetting.get().colors.length-1);}
_isDraggingToBin(e){return e.pageX>this._deleteIconToolbar.element.totalOffsetLeft();}
_paletteDragStart(e){const element=e.deepElementFromPoint();if(!element||!element.__mutable){return false;}
const index=this._slotIndexForEvent(e);this._dragElement=element;this._dragHotSpotX=e.pageX-(index%_itemsPerPaletteRow)*_colorChipSize;this._dragHotSpotY=e.pageY-(index/_itemsPerPaletteRow|0)*_colorChipSize;return true;}
_paletteDrag(e){if(e.pageX<this._paletteContainer.totalOffsetLeft()||e.pageY<this._paletteContainer.totalOffsetTop()){return;}
const newIndex=this._slotIndexForEvent(e);const offsetX=e.pageX-(newIndex%_itemsPerPaletteRow)*_colorChipSize;const offsetY=e.pageY-(newIndex/_itemsPerPaletteRow|0)*_colorChipSize;const isDeleting=this._isDraggingToBin(e);this._deleteIconToolbar.element.classList.add('dragging');this._deleteIconToolbar.element.classList.toggle('delete-color-toolbar-active',isDeleting);const dragElementTransform='translateX('+(offsetX-this._dragHotSpotX)+'px) translateY('+(offsetY-this._dragHotSpotY)+'px)';this._dragElement.style.transform=isDeleting?dragElementTransform+' scale(0.8)':dragElementTransform;const children=Array.prototype.slice.call(this._paletteContainer.children);const index=children.indexOf(this._dragElement);const swatchOffsets=new Map();for(const swatch of children){swatchOffsets.set(swatch,swatch.totalOffset());}
if(index!==newIndex){this._paletteContainer.insertBefore(this._dragElement,children[newIndex>index?newIndex+1:newIndex]);}
for(const swatch of children){if(swatch===this._dragElement){continue;}
const before=swatchOffsets.get(swatch);const after=swatch.totalOffset();if(before.left!==after.left||before.top!==after.top){swatch.animate([{transform:'translateX('+(before.left-after.left)+'px) translateY('+(before.top-after.top)+'px)'},{transform:'none'}],{duration:100,easing:'cubic-bezier(0, 0, 0.2, 1)'});}}}
_paletteDragEnd(e){if(this._isDraggingToBin(e)){this._dragElement.remove();}
this._dragElement.style.removeProperty('transform');const children=this._paletteContainer.children;const colors=[];for(let i=0;i<children.length;++i){if(children[i].__color){colors.push(children[i].__color);}}
const palette=this._customPaletteSetting.get();palette.colors=colors;this._customPaletteSetting.set(palette);this._showPalette(this._customPaletteSetting.get(),false);this._deleteIconToolbar.element.classList.remove('dragging');this._deleteIconToolbar.element.classList.remove('delete-color-toolbar-active');}
_loadPalettes(){this._palettes.set(MaterialPalette.title,MaterialPalette);const defaultCustomPalette={title:'Custom',colors:[],colorNames:[],mutable:true};this._customPaletteSetting=Common.settings.createSetting('customColorPalette',defaultCustomPalette);const customPalette=this._customPaletteSetting.get();customPalette.colorNames=customPalette.colorNames||[];this._palettes.set(customPalette.title,customPalette);this._selectedColorPalette=Common.settings.createSetting('selectedColorPalette',GeneratedPaletteTitle);const palette=this._palettes.get(this._selectedColorPalette.get());if(palette){this._showPalette(palette,true);}}
addPalette(palette){this._palettes.set(palette.title,palette);if(this._selectedColorPalette.get()===palette.title){this._showPalette(palette,true);}}
_createPreviewPaletteElement(palette){const colorsPerPreviewRow=5;const previewElement=createElementWithClass('div','palette-preview');UI.ARIAUtils.markAsButton(previewElement);previewElement.tabIndex=0;const titleElement=previewElement.createChild('div','palette-preview-title');titleElement.textContent=palette.title;let i;for(i=0;i<colorsPerPreviewRow&&i<palette.colors.length;i++){previewElement.appendChild(this._createPaletteColor(palette.colors[i],palette.colorNames[i]));}
for(;i<colorsPerPreviewRow;i++){previewElement.createChild('div','spectrum-palette-color empty-color');}
self.onInvokeElement(previewElement,event=>{this._paletteSelected(palette);event.consume(true);});return previewElement;}
_paletteSelected(palette){this._selectedColorPalette.set(palette.title);this._showPalette(palette,true);}
_resizeForSelectedPalette(force){const palette=this._palettes.get(this._selectedColorPalette.get());if(!palette){return;}
let numColors=palette.colors.length;if(palette===this._customPaletteSetting.get()){numColors++;}
const rowsNeeded=Math.max(1,Math.ceil(numColors/_itemsPerPaletteRow));if(this._numPaletteRowsShown===rowsNeeded&&!force){return;}
this._numPaletteRowsShown=rowsNeeded;const paletteColorHeight=12;const paletteMargin=12;let paletteTop=236;if(this._contrastDetails){if(this._contrastDetails.expanded()){paletteTop+=78;}else{paletteTop+=36;}}
this.element.style.height=(paletteTop+paletteMargin+(paletteColorHeight+paletteMargin)*rowsNeeded)+'px';this.dispatchEventToListeners(Events.SizeChanged);}
_paletteColorSelected(colorText,colorName,matchUserFormat){const color=Common.Color.parse(colorText);if(!color){return;}
this._innerSetColor(color.hsva(),colorText,colorName,matchUserFormat?this._colorFormat:color.format(),_ChangeSource.Other);}
_onPaletteColorKeydown(colorText,colorName,matchUserFormat,event){if(isEnterOrSpaceKey(event)){this._paletteColorSelected(colorText,colorName,matchUserFormat);event.stopPropagation();}else if(event.key==='ArrowLeft'&&event.target.previousElementSibling){event.target.previousElementSibling.focus();event.consume(true);}else if(event.key==='ArrowRight'&&event.target.nextElementSibling){event.target.nextElementSibling.focus();event.consume(true);}}
_onShadeColorKeydown(colorText,colorName,matchUserFormat,colorElement,event){if(isEnterOrSpaceKey(event)){this._paletteColorSelected(colorText,colorName,matchUserFormat);event.consume(true);}else if(isEscKey(event)||event.key==='Tab'){colorElement.focus();this._shadesCloseHandler();event.consume(true);}else if(event.key==='ArrowUp'&&event.target.previousElementSibling){event.target.previousElementSibling.focus();event.consume(true);}else if(event.key==='ArrowDown'&&event.target.nextElementSibling){event.target.nextElementSibling.focus();event.consume(true);}}
_onAddColorMousedown(){this._addColorToCustomPalette();}
_onAddColorKeydown(event){if(isEnterOrSpaceKey(event)){this._addColorToCustomPalette();event.consume(true);}}
_addColorToCustomPalette(){const palette=this._customPaletteSetting.get();palette.colors.push(this.colorString());this._customPaletteSetting.set(palette);this._showPalette(this._customPaletteSetting.get(),false);const colorElements=this._paletteContainer.querySelectorAll('.spectrum-palette-color');colorElements[colorElements.length-1].focus();}
_showPaletteColorContextMenu(colorIndex,event){if(!this._paletteContainerMutable){return;}
const contextMenu=new UI.ContextMenu(event);if(colorIndex!==-1){contextMenu.defaultSection().appendItem(Common.UIString('Remove color'),this._deletePaletteColors.bind(this,colorIndex,false));contextMenu.defaultSection().appendItem(Common.UIString('Remove all to the right'),this._deletePaletteColors.bind(this,colorIndex,true));}
contextMenu.defaultSection().appendItem(Common.UIString('Clear palette'),this._deletePaletteColors.bind(this,-1,true));contextMenu.show();}
_deletePaletteColors(colorIndex,toRight){const palette=this._customPaletteSetting.get();if(toRight){palette.colors.splice(colorIndex+1,palette.colors.length-colorIndex-1);}else{palette.colors.splice(colorIndex,1);}
this._customPaletteSetting.set(palette);this._showPalette(this._customPaletteSetting.get(),false);}
setColor(color,colorFormat){this._originalFormat=colorFormat;this._innerSetColor(color.hsva(),'',undefined,colorFormat,_ChangeSource.Model);const colorValues=this._color().canonicalHSLA();UI.ARIAUtils.setValueNow(this._hueElement,colorValues[0]);UI.ARIAUtils.setValueText(this._alphaElement,colorValues[3]);}
_innerSetColor(hsva,colorString,colorName,colorFormat,changeSource){if(hsva!==undefined){this._hsv=hsva;}
this._colorName=colorName;if(colorString!==undefined){this._colorString=colorString;}
if(colorFormat!==undefined){const cf=Common.Color.Format;console.assert(colorFormat!==cf.Original,'Spectrum\'s color format cannot be Original');if(colorFormat===cf.RGBA){colorFormat=cf.RGB;}else if(colorFormat===cf.HSLA){colorFormat=cf.HSL;}else if(colorFormat===cf.HEXA){colorFormat=cf.HEX;}else if(colorFormat===cf.ShortHEXA){colorFormat=cf.ShortHEX;}
this._colorFormat=colorFormat;}
if(hsva&&this._contrastInfo){this._contrastInfo.setColor(Common.Color.fromHSVA(hsva));}
this._updateHelperLocations();this._updateUI();if(changeSource!==_ChangeSource.Input){this._updateInput();}
if(changeSource!==_ChangeSource.Model){this.dispatchEventToListeners(Events.ColorChanged,this.colorString());}}
_color(){return Common.Color.fromHSVA(this._hsv);}
colorName(){return this._colorName;}
colorString(){if(this._colorString){return this._colorString;}
const cf=Common.Color.Format;const color=this._color();let colorString=color.asString(this._colorFormat);if(colorString){return colorString;}
if(this._colorFormat===cf.Nickname){colorString=color.asString(color.hasAlpha()?cf.HEXA:cf.HEX);}else if(this._colorFormat===cf.ShortHEX){colorString=color.asString(color.detectHEXFormat());}else if(this._colorFormat===cf.HEX){colorString=color.asString(cf.HEXA);}else if(this._colorFormat===cf.HSL){colorString=color.asString(cf.HSLA);}else{colorString=color.asString(cf.RGBA);}
console.assert(colorString);return colorString||'';}
_updateHelperLocations(){const h=this._hsv[0];const s=this._hsv[1];const v=this._hsv[2];const alpha=this._hsv[3];this._dragX=s*this.dragWidth;this._dragY=this.dragHeight-(v*this.dragHeight);const dragX=Math.max(-this._colorDragElementHeight,Math.min(this.dragWidth-this._colorDragElementHeight,this._dragX-this._colorDragElementHeight));const dragY=Math.max(-this._colorDragElementHeight,Math.min(this.dragHeight-this._colorDragElementHeight,this._dragY-this._colorDragElementHeight));this._colorDragElement.positionAt(dragX,dragY);const hueSlideX=(1-h)*this._hueAlphaWidth-this.slideHelperWidth;this._hueSlider.style.left=hueSlideX+'px';const alphaSlideX=alpha*this._hueAlphaWidth-this.slideHelperWidth;this._alphaSlider.style.left=alphaSlideX+'px';}
_updateInput(){const cf=Common.Color.Format;if(this._colorFormat===cf.HEX||this._colorFormat===cf.ShortHEX||this._colorFormat===cf.Nickname){this._hexContainer.hidden=false;this._displayContainer.hidden=true;if(this._colorFormat===cf.ShortHEX){this._hexValue.value=this._color().asString(this._color().detectHEXFormat());}else{this._hexValue.value=this._color().asString(this._color().hasAlpha()?cf.HEXA:cf.HEX);}}else{this._hexContainer.hidden=true;this._displayContainer.hidden=false;const isRgb=this._colorFormat===cf.RGB;this._textLabels.textContent=isRgb?'RGBA':'HSLA';const colorValues=isRgb?this._color().canonicalRGBA():this._color().canonicalHSLA();for(let i=0;i<3;++i){UI.ARIAUtils.setAccessibleName(this._textValues[i],ls`${this._textLabels.textContent.charAt(i)} in ${this._textLabels.textContent}`);this._textValues[i].value=colorValues[i];if(!isRgb&&(i===1||i===2)){this._textValues[i].value+='%';}}
UI.ARIAUtils.setAccessibleName(this._textValues[3],ls`${this._textLabels.textContent.charAt(3)} in ${this._textLabels.textContent}`);this._textValues[3].value=Math.round(colorValues[3]*100)/100;}}
_updateUI(){const h=Common.Color.fromHSVA([this._hsv[0],1,1,1]);this._colorElement.style.backgroundColor=(h.asString(Common.Color.Format.RGB));if(this._contrastOverlay){this._contrastOverlay.setDimensions(this.dragWidth,this.dragHeight);}
this._swatch.setColor(this._color(),this.colorString());this._colorDragElement.style.backgroundColor=(this._color().asString(Common.Color.Format.RGBA));const noAlpha=Common.Color.fromHSVA(this._hsv.slice(0,3).concat(1));this._alphaElementBackground.style.backgroundImage=String.sprintf('linear-gradient(to right, rgba(0,0,0,0), %s)',noAlpha.asString(Common.Color.Format.RGB));}
_formatViewSwitch(){const cf=Common.Color.Format;let format=cf.RGB;if(this._colorFormat===cf.RGB){format=cf.HSL;}else if(this._colorFormat===cf.HSL){format=(this._originalFormat===cf.ShortHEX||this._originalFormat===cf.ShortHEXA)?cf.ShortHEX:cf.HEX;}
this._innerSetColor(undefined,'',undefined,format,_ChangeSource.Other);}
_inputChanged(event){function elementValue(element){return element.value;}
const inputElement=(event.currentTarget);const newValue=UI.createReplacementString(inputElement.value,event);if(newValue){inputElement.value=newValue;inputElement.selectionStart=0;inputElement.selectionEnd=newValue.length;event.consume(true);}
const cf=Common.Color.Format;let colorString;if(this._colorFormat===cf.Nickname||this._colorFormat===cf.HEX||this._colorFormat===cf.ShortHEX){colorString=this._hexValue.value;}else{const format=this._colorFormat===cf.RGB?'rgba':'hsla';const values=this._textValues.map(elementValue).join(', ');colorString=String.sprintf('%s(%s)',format,values);}
const color=Common.Color.parse(colorString);if(!color){return;}
let colorFormat=undefined;if(this._colorFormat===cf.HEX||this._colorFormat===cf.ShortHEX){colorFormat=color.detectHEXFormat();}
this._innerSetColor(color.hsva(),colorString,undefined,colorFormat,_ChangeSource.Input);}
wasShown(){this._hueAlphaWidth=this._hueElement.offsetWidth;this.slideHelperWidth=this._hueSlider.offsetWidth/2;this.dragWidth=this._colorElement.offsetWidth;this.dragHeight=this._colorElement.offsetHeight;this._colorDragElementHeight=this._colorDragElement.offsetHeight/2;this._innerSetColor(undefined,undefined,undefined,undefined,_ChangeSource.Model);this._toggleColorPicker(true);if(this._contrastDetails){this._contrastDetails.addEventListener(ColorPicker.ContrastDetails.Events.BackgroundColorPickerWillBeToggled,this._contrastDetailsBackgroundColorPickedToggledBound);}}
willHide(){this._toggleColorPicker(false);if(this._contrastDetails){this._contrastDetails.removeEventListener(ColorPicker.ContrastDetails.Events.BackgroundColorPickerWillBeToggled,this._contrastDetailsBackgroundColorPickedToggledBound);}}
_toggleColorPicker(enabled,event){if(enabled===undefined){enabled=!this._colorPickerButton.toggled();}
this._colorPickerButton.setToggled(enabled);if(this._contrastDetails&&enabled&&this._contrastDetails.backgroundColorPickerEnabled()){this._contrastDetails.toggleBackgroundColorPicker(false);}
Host.InspectorFrontendHost.setEyeDropperActive(enabled);if(enabled){Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.EyeDropperPickedColor,this._colorPickedBound);}else{Host.InspectorFrontendHost.events.removeEventListener(Host.InspectorFrontendHostAPI.Events.EyeDropperPickedColor,this._colorPickedBound);}}
_colorPicked(event){const rgbColor=(event.data);const rgba=[rgbColor.r,rgbColor.g,rgbColor.b,(rgbColor.a/2.55|0)/100];const color=Common.Color.fromRGBA(rgba);this._innerSetColor(color.hsva(),'',undefined,undefined,_ChangeSource.Other);Host.InspectorFrontendHost.bringToFront();}}
export const _ChangeSource={Input:'Input',Model:'Model',Other:'Other'};export const Events={ColorChanged:Symbol('ColorChanged'),SizeChanged:Symbol('SizeChanged')};const _colorChipSize=24;const _itemsPerPaletteRow=8;const GeneratedPaletteTitle='Page colors';export class PaletteGenerator{constructor(callback){this._callback=callback;this._frequencyMap=new Map();const stylesheetPromises=[];for(const cssModel of SDK.targetManager.models(SDK.CSSModel)){for(const stylesheet of cssModel.allStyleSheets()){stylesheetPromises.push(this._processStylesheet(stylesheet));}}
Promise.all(stylesheetPromises).catchException(null).then(this._finish.bind(this));}
_frequencyComparator(a,b){return this._frequencyMap.get(b)-this._frequencyMap.get(a);}
_finish(){function hueComparator(a,b){const hsva=paletteColors.get(a).hsva();const hsvb=paletteColors.get(b).hsva();if(hsvb[1]<0.12&&hsva[1]<0.12){return hsvb[2]*hsvb[3]-hsva[2]*hsva[3];}
if(hsvb[1]<0.12){return-1;}
if(hsva[1]<0.12){return 1;}
if(hsvb[0]===hsva[0]){return hsvb[1]*hsvb[3]-hsva[1]*hsva[3];}
return(hsvb[0]+0.94)%1-(hsva[0]+0.94)%1;}
let colors=this._frequencyMap.keysArray();colors=colors.sort(this._frequencyComparator.bind(this));const paletteColors=new Map();const colorsPerRow=24;while(paletteColors.size<colorsPerRow&&colors.length){const colorText=colors.shift();const color=Common.Color.parse(colorText);if(!color||color.nickname()==='white'||color.nickname()==='black'){continue;}
paletteColors.set(colorText,color);}
this._callback({title:GeneratedPaletteTitle,colors:paletteColors.keysArray().sort(hueComparator),colorNames:[],mutable:false});}
async _processStylesheet(stylesheet){let text=(await stylesheet.requestContent()).content||'';text=text.toLowerCase();const regexResult=text.match(/((?:rgb|hsl)a?\([^)]+\)|#[0-9a-f]{6}|#[0-9a-f]{3})/g)||[];for(const c of regexResult){let frequency=this._frequencyMap.get(c)||0;this._frequencyMap.set(c,++frequency);}}}
export const MaterialPaletteShades={'#F44336':['#FFEBEE','#FFCDD2','#EF9A9A','#E57373','#EF5350','#F44336','#E53935','#D32F2F','#C62828','#B71C1C'],'#E91E63':['#FCE4EC','#F8BBD0','#F48FB1','#F06292','#EC407A','#E91E63','#D81B60','#C2185B','#AD1457','#880E4F'],'#9C27B0':['#F3E5F5','#E1BEE7','#CE93D8','#BA68C8','#AB47BC','#9C27B0','#8E24AA','#7B1FA2','#6A1B9A','#4A148C'],'#673AB7':['#EDE7F6','#D1C4E9','#B39DDB','#9575CD','#7E57C2','#673AB7','#5E35B1','#512DA8','#4527A0','#311B92'],'#3F51B5':['#E8EAF6','#C5CAE9','#9FA8DA','#7986CB','#5C6BC0','#3F51B5','#3949AB','#303F9F','#283593','#1A237E'],'#2196F3':['#E3F2FD','#BBDEFB','#90CAF9','#64B5F6','#42A5F5','#2196F3','#1E88E5','#1976D2','#1565C0','#0D47A1'],'#03A9F4':['#E1F5FE','#B3E5FC','#81D4FA','#4FC3F7','#29B6F6','#03A9F4','#039BE5','#0288D1','#0277BD','#01579B'],'#00BCD4':['#E0F7FA','#B2EBF2','#80DEEA','#4DD0E1','#26C6DA','#00BCD4','#00ACC1','#0097A7','#00838F','#006064'],'#009688':['#E0F2F1','#B2DFDB','#80CBC4','#4DB6AC','#26A69A','#009688','#00897B','#00796B','#00695C','#004D40'],'#4CAF50':['#E8F5E9','#C8E6C9','#A5D6A7','#81C784','#66BB6A','#4CAF50','#43A047','#388E3C','#2E7D32','#1B5E20'],'#8BC34A':['#F1F8E9','#DCEDC8','#C5E1A5','#AED581','#9CCC65','#8BC34A','#7CB342','#689F38','#558B2F','#33691E'],'#CDDC39':['#F9FBE7','#F0F4C3','#E6EE9C','#DCE775','#D4E157','#CDDC39','#C0CA33','#AFB42B','#9E9D24','#827717'],'#FFEB3B':['#FFFDE7','#FFF9C4','#FFF59D','#FFF176','#FFEE58','#FFEB3B','#FDD835','#FBC02D','#F9A825','#F57F17'],'#FFC107':['#FFF8E1','#FFECB3','#FFE082','#FFD54F','#FFCA28','#FFC107','#FFB300','#FFA000','#FF8F00','#FF6F00'],'#FF9800':['#FFF3E0','#FFE0B2','#FFCC80','#FFB74D','#FFA726','#FF9800','#FB8C00','#F57C00','#EF6C00','#E65100'],'#FF5722':['#FBE9E7','#FFCCBC','#FFAB91','#FF8A65','#FF7043','#FF5722','#F4511E','#E64A19','#D84315','#BF360C'],'#795548':['#EFEBE9','#D7CCC8','#BCAAA4','#A1887F','#8D6E63','#795548','#6D4C41','#5D4037','#4E342E','#3E2723'],'#9E9E9E':['#FAFAFA','#F5F5F5','#EEEEEE','#E0E0E0','#BDBDBD','#9E9E9E','#757575','#616161','#424242','#212121'],'#607D8B':['#ECEFF1','#CFD8DC','#B0BEC5','#90A4AE','#78909C','#607D8B','#546E7A','#455A64','#37474F','#263238']};export const MaterialPalette={title:'Material',mutable:false,matchUserFormat:true,colors:Object.keys(MaterialPaletteShades),colorNames:[]};export class Swatch{constructor(parentElement){this._colorString;const swatchElement=parentElement.createChild('span','swatch');this._swatchInnerElement=swatchElement.createChild('span','swatch-inner');this._swatchOverlayElement=swatchElement.createChild('span','swatch-overlay');UI.ARIAUtils.markAsButton(this._swatchOverlayElement);UI.ARIAUtils.setPressed(this._swatchOverlayElement,false);this._swatchOverlayElement.tabIndex=0;self.onInvokeElement(this._swatchOverlayElement,this._onCopyText.bind(this));this._swatchOverlayElement.addEventListener('mouseout',this._onCopyIconMouseout.bind(this));this._swatchOverlayElement.addEventListener('blur',this._onCopyIconMouseout.bind(this));this._swatchCopyIcon=UI.Icon.create('largeicon-copy','copy-color-icon');this._swatchCopyIcon.title=ls`Copy color to clipboard`;this._swatchOverlayElement.appendChild(this._swatchCopyIcon);UI.ARIAUtils.setAccessibleName(this._swatchOverlayElement,this._swatchCopyIcon.title);}
setColor(color,colorString){this._swatchInnerElement.style.backgroundColor=(color.asString(Common.Color.Format.RGBA));this._swatchInnerElement.classList.toggle('swatch-inner-white',color.hsla()[2]>0.9);this._colorString=colorString||null;if(colorString){this._swatchOverlayElement.hidden=false;}else{this._swatchOverlayElement.hidden=true;}}
_onCopyText(event){this._swatchCopyIcon.setIconType('largeicon-checkmark');Host.InspectorFrontendHost.copyText(this._colorString);UI.ARIAUtils.setPressed(this._swatchOverlayElement,true);event.consume();}
_onCopyIconMouseout(){this._swatchCopyIcon.setIconType('largeicon-copy');UI.ARIAUtils.setPressed(this._swatchOverlayElement,false);}}
self.ColorPicker=self.ColorPicker||{};ColorPicker=ColorPicker||{};ColorPicker.Spectrum=Spectrum;ColorPicker.Spectrum.PaletteGenerator=PaletteGenerator;ColorPicker.Spectrum._ChangeSource=_ChangeSource;ColorPicker.Spectrum.Swatch=Swatch;ColorPicker.Spectrum.Events=Events;ColorPicker.Spectrum.Palette;export class ContrastOverlay{constructor(contrastInfo,colorElement){this._contrastInfo=contrastInfo;this._visible=false;this._contrastRatioSVG=colorElement.createSVGChild('svg','spectrum-contrast-container fill');this._contrastRatioLines={aa:this._contrastRatioSVG.createSVGChild('path','spectrum-contrast-line'),aaa:this._contrastRatioSVG.createSVGChild('path','spectrum-contrast-line')};this._width=0;this._height=0;this._contrastRatioLineBuilder=new ColorPicker.ContrastRatioLineBuilder(this._contrastInfo);this._contrastRatioLinesThrottler=new Common.Throttler(0);this._drawContrastRatioLinesBound=this._drawContrastRatioLines.bind(this);this._contrastInfo.addEventListener(ColorPicker.ContrastInfo.Events.ContrastInfoUpdated,this._update.bind(this));}
_update(){if(!this._visible||this._contrastInfo.isNull()||!this._contrastInfo.contrastRatio()){return;}
this._contrastRatioLinesThrottler.schedule(this._drawContrastRatioLinesBound);}
setDimensions(width,height){this._width=width;this._height=height;this._update();}
setVisible(visible){this._visible=visible;this._contrastRatioSVG.classList.toggle('hidden',!visible);this._update();}
async _drawContrastRatioLines(){for(const level in this._contrastRatioLines){const path=this._contrastRatioLineBuilder.drawContrastRatioLine(this._width,this._height,level);if(path){this._contrastRatioLines[level].setAttribute('d',path);}else{this._contrastRatioLines[level].removeAttribute('d');}}}}
export class ContrastRatioLineBuilder{constructor(contrastInfo){this._contrastInfo=contrastInfo;}
drawContrastRatioLine(width,height,level){const requiredContrast=this._contrastInfo.contrastRatioThreshold(level);if(!width||!height||!requiredContrast){return null;}
const dS=0.02;const epsilon=0.0002;const H=0;const S=1;const V=2;const A=3;const color=this._contrastInfo.color();const bgColor=this._contrastInfo.bgColor();if(!color||!bgColor){return null;}
const fgRGBA=color.rgba();const fgHSVA=color.hsva();const bgRGBA=bgColor.rgba();const bgLuminance=Common.Color.luminance(bgRGBA);const blendedRGBA=[];Common.Color.blendColors(fgRGBA,bgRGBA,blendedRGBA);const fgLuminance=Common.Color.luminance(blendedRGBA);const fgIsLighter=fgLuminance>bgLuminance;const desiredLuminance=Common.Color.desiredLuminance(bgLuminance,requiredContrast,fgIsLighter);let lastV=fgHSVA[V];let currentSlope=0;const candidateHSVA=[fgHSVA[H],0,0,fgHSVA[A]];let pathBuilder=[];const candidateRGBA=[];Common.Color.hsva2rgba(candidateHSVA,candidateRGBA);Common.Color.blendColors(candidateRGBA,bgRGBA,blendedRGBA);function updateCandidateAndComputeDelta(index,x){candidateHSVA[index]=x;Common.Color.hsva2rgba(candidateHSVA,candidateRGBA);Common.Color.blendColors(candidateRGBA,bgRGBA,blendedRGBA);return Common.Color.luminance(blendedRGBA)-desiredLuminance;}
function approach(index){let x=candidateHSVA[index];let multiplier=1;let dLuminance=updateCandidateAndComputeDelta(index,x);let previousSign=Math.sign(dLuminance);for(let guard=100;guard;guard--){if(Math.abs(dLuminance)<epsilon){return x;}
const sign=Math.sign(dLuminance);if(sign!==previousSign){multiplier/=2;previousSign=sign;}else if(x<0||x>1){return null;}
x+=multiplier*(index===V?-dLuminance:dLuminance);dLuminance=updateCandidateAndComputeDelta(index,x);}
console.error('Loop exited unexpectedly');return null;}
let s;for(s=0;s<1+dS;s+=dS){s=Math.min(1,s);candidateHSVA[S]=s;candidateHSVA[V]=lastV+currentSlope*dS;const v=approach(V);if(v===null){break;}
currentSlope=s===0?0:(v-lastV)/dS;lastV=v;pathBuilder.push(pathBuilder.length?'L':'M');pathBuilder.push((s*width).toFixed(2));pathBuilder.push(((1-v)*height).toFixed(2));}
if(s<1+dS){s-=dS;candidateHSVA[V]=1;s=approach(S);if(s!==null){pathBuilder=pathBuilder.concat(['L',(s*width).toFixed(2),'-0.1']);}}
if(pathBuilder.length===0){return null;}
return pathBuilder.join(' ');}}
self.ColorPicker=self.ColorPicker||{};ColorPicker=ColorPicker||{};ColorPicker.ContrastOverlay=ContrastOverlay;ColorPicker.ContrastRatioLineBuilder=ContrastRatioLineBuilder;export class ContrastInfo extends Common.Object{constructor(contrastInfo){super();this._isNull=true;this._contrastRatio=null;this._contrastRatioThresholds=null;this._fgColor=null;this._bgColor=null;if(!contrastInfo){return;}
if(!contrastInfo.computedFontSize||!contrastInfo.computedFontWeight||!contrastInfo.backgroundColors||contrastInfo.backgroundColors.length!==1){return;}
this._isNull=false;const isLargeFont=ContrastInfo.computeIsLargeFont(contrastInfo.computedFontSize,contrastInfo.computedFontWeight);this._contrastRatioThresholds=_ContrastThresholds[(isLargeFont?'largeFont':'normalFont')];const bgColorText=contrastInfo.backgroundColors[0];const bgColor=Common.Color.parse(bgColorText);if(bgColor){this._setBgColorInternal(bgColor);}}
isNull(){return this._isNull;}
setColor(fgColor){this._fgColor=fgColor;this._updateContrastRatio();this.dispatchEventToListeners(Events.ContrastInfoUpdated);}
color(){return this._fgColor;}
contrastRatio(){return this._contrastRatio;}
setBgColor(bgColor){this._setBgColorInternal(bgColor);this.dispatchEventToListeners(Events.ContrastInfoUpdated);}
_setBgColorInternal(bgColor){this._bgColor=bgColor;if(!this._fgColor){return;}
const fgRGBA=this._fgColor.rgba();if(bgColor.hasAlpha()){const blendedRGBA=[];Common.Color.blendColors(bgColor.rgba(),fgRGBA,blendedRGBA);this._bgColor=new Common.Color(blendedRGBA,Common.Color.Format.RGBA);}
this._contrastRatio=Common.Color.calculateContrastRatio(fgRGBA,this._bgColor.rgba());}
bgColor(){return this._bgColor;}
_updateContrastRatio(){if(!this._bgColor||!this._fgColor){return;}
this._contrastRatio=Common.Color.calculateContrastRatio(this._fgColor.rgba(),this._bgColor.rgba());}
contrastRatioThreshold(level){if(!this._contrastRatioThresholds){return null;}
return this._contrastRatioThresholds[level];}
static computeIsLargeFont(fontSize,fontWeight){const boldWeights=['bold','bolder','600','700','800','900'];const fontSizePx=parseFloat(fontSize.replace('px',''));const isBold=(boldWeights.indexOf(fontWeight)!==-1);const fontSizePt=fontSizePx*72/96;if(isBold){return fontSizePt>=14;}else{return fontSizePt>=18;}}}
export const Events={ContrastInfoUpdated:Symbol('ContrastInfoUpdated')};const _ContrastThresholds={largeFont:{aa:3.0,aaa:4.5},normalFont:{aa:4.5,aaa:7.0}};self.ColorPicker=self.ColorPicker||{};ColorPicker=ColorPicker||{};ColorPicker.ContrastInfo=ContrastInfo;ColorPicker.ContrastInfo.Events=Events;export class ContrastDetails extends Common.Object{constructor(contrastInfo,contentElement,toggleMainColorPickerCallback,expandedChangedCallback){super();this._contrastInfo=contrastInfo;this._element=contentElement.createChild('div','spectrum-contrast-details collapsed');this._toggleMainColorPicker=toggleMainColorPickerCallback;this._expandedChangedCallback=expandedChangedCallback;this._expanded=false;this._passesAA=true;this._contrastUnknown=false;this._visible=false;const contrastValueRow=this._element.createChild('div');contrastValueRow.addEventListener('click',this._topRowClicked.bind(this));const contrastValueRowContents=contrastValueRow.createChild('div','container');contrastValueRowContents.createTextChild(Common.UIString('Contrast ratio'));this._contrastValueBubble=contrastValueRowContents.createChild('span','contrast-details-value');this._contrastValue=this._contrastValueBubble.createChild('span');this._contrastValueBubbleIcons=[];this._contrastValueBubbleIcons.push(this._contrastValueBubble.appendChild(UI.Icon.create('smallicon-checkmark-square')));this._contrastValueBubbleIcons.push(this._contrastValueBubble.appendChild(UI.Icon.create('smallicon-checkmark-behind')));this._contrastValueBubbleIcons.push(this._contrastValueBubble.appendChild(UI.Icon.create('smallicon-no')));this._contrastValueBubbleIcons.forEach(button=>button.addEventListener('click',event=>{ColorPicker.ContrastDetails._showHelp();event.consume(false);}));const expandToolbar=new UI.Toolbar('expand',contrastValueRowContents);this._expandButton=new UI.ToolbarButton(Common.UIString('Show more'),'smallicon-expand-more');this._expandButton.addEventListener(UI.ToolbarButton.Events.Click,this._expandButtonClicked.bind(this));UI.ARIAUtils.setExpanded(this._expandButton.element,false);expandToolbar.appendToolbarItem(this._expandButton);this._expandedDetails=this._element.createChild('div','expanded-details');UI.ARIAUtils.setControls(this._expandButton.element,this._expandedDetails);this._contrastThresholds=this._expandedDetails.createChild('div','contrast-thresholds');this._contrastAA=this._contrastThresholds.createChild('div','contrast-threshold');this._contrastPassFailAA=this._contrastAA.createChild('span','contrast-pass-fail');this._contrastAAA=this._contrastThresholds.createChild('div','contrast-threshold');this._contrastPassFailAAA=this._contrastAAA.createChild('span','contrast-pass-fail');this._chooseBgColor=this._expandedDetails.createChild('div','contrast-choose-bg-color');this._chooseBgColor.textContent=Common.UIString('Pick background color');const bgColorContainer=this._expandedDetails.createChild('div','background-color');const pickerToolbar=new UI.Toolbar('spectrum-eye-dropper',bgColorContainer);this._bgColorPickerButton=new UI.ToolbarToggle(Common.UIString('Toggle background color picker'),'largeicon-eyedropper');this._bgColorPickerButton.addEventListener(UI.ToolbarButton.Events.Click,this._toggleBackgroundColorPicker.bind(this,undefined,true));pickerToolbar.appendToolbarItem(this._bgColorPickerButton);this._bgColorPickedBound=this._bgColorPicked.bind(this);this._bgColorSwatch=new Swatch(bgColorContainer);this._contrastInfo.addEventListener(ColorPicker.ContrastInfo.Events.ContrastInfoUpdated,this._update.bind(this));}
_update(){if(this._contrastInfo.isNull()){this.setVisible(false);return;}
this.setVisible(true);const contrastRatio=this._contrastInfo.contrastRatio();const fgColor=this._contrastInfo.color();const bgColor=this._contrastInfo.bgColor();if(!contrastRatio||!bgColor||!fgColor){this._contrastUnknown=true;this._contrastValue.textContent='';this._contrastValueBubble.classList.add('contrast-unknown');this._chooseBgColor.classList.remove('hidden');this._contrastThresholds.classList.add('hidden');return;}
this._contrastUnknown=false;this._chooseBgColor.classList.add('hidden');this._contrastThresholds.classList.remove('hidden');this._contrastValueBubble.classList.remove('contrast-unknown');this._contrastValue.textContent=contrastRatio.toFixed(2);this._bgColorSwatch.setColors(fgColor,bgColor);const aa=this._contrastInfo.contrastRatioThreshold('aa');this._passesAA=this._contrastInfo.contrastRatio()>=aa;this._contrastPassFailAA.removeChildren();const labelAA=this._contrastPassFailAA.createChild('span','contrast-link-label');labelAA.textContent=Common.UIString('AA');this._contrastPassFailAA.createChild('span').textContent=Common.UIString(': %s',aa.toFixed(1));if(this._passesAA){this._contrastPassFailAA.appendChild(UI.Icon.create('smallicon-checkmark-square'));}else{this._contrastPassFailAA.appendChild(UI.Icon.create('smallicon-no'));}
const aaa=this._contrastInfo.contrastRatioThreshold('aaa');const passesAAA=this._contrastInfo.contrastRatio()>=aaa;this._contrastPassFailAAA.removeChildren();const labelAAA=this._contrastPassFailAAA.createChild('span','contrast-link-label');labelAAA.textContent=Common.UIString('AAA');this._contrastPassFailAAA.createChild('span').textContent=Common.UIString(': %s',aaa.toFixed(1));if(passesAAA){this._contrastPassFailAAA.appendChild(UI.Icon.create('smallicon-checkmark-square'));}else{this._contrastPassFailAAA.appendChild(UI.Icon.create('smallicon-no'));}
[labelAA,labelAAA].forEach(e=>e.addEventListener('click',event=>ColorPicker.ContrastDetails._showHelp()));this._element.classList.toggle('contrast-fail',!this._passesAA);this._contrastValueBubble.classList.toggle('contrast-aa',this._passesAA);this._contrastValueBubble.classList.toggle('contrast-aaa',passesAAA);}
static _showHelp(){Host.InspectorFrontendHost.openInNewTab('https://developers.google.com/web/fundamentals/accessibility/accessible-styles#color_and_contrast');}
setVisible(visible){this._visible=visible;this._element.classList.toggle('hidden',!visible);}
visible(){return this._visible;}
element(){return this._element;}
_expandButtonClicked(event){this._contrastValueBubble.getComponentSelection().empty();this._toggleExpanded();}
_topRowClicked(event){this._contrastValueBubble.getComponentSelection().empty();this._toggleExpanded();event.consume(true);}
_toggleExpanded(){this._expanded=!this._expanded;UI.ARIAUtils.setExpanded(this._expandButton.element,this._expanded);this._element.classList.toggle('collapsed',!this._expanded);if(this._expanded){this._toggleMainColorPicker(false);this._expandButton.setGlyph('smallicon-expand-less');this._expandButton.setTitle(Common.UIString('Show less'));if(this._contrastUnknown){this._toggleBackgroundColorPicker(true);}}else{this._toggleBackgroundColorPicker(false);this._expandButton.setGlyph('smallicon-expand-more');this._expandButton.setTitle(Common.UIString('Show more'));}
this._expandedChangedCallback();}
collapse(){this._element.classList.remove('expanded');this._toggleBackgroundColorPicker(false);this._toggleMainColorPicker(false);}
expanded(){return this._expanded;}
backgroundColorPickerEnabled(){return this._bgColorPickerButton.toggled();}
toggleBackgroundColorPicker(enabled){this._toggleBackgroundColorPicker(enabled,false);}
_toggleBackgroundColorPicker(enabled,shouldTriggerEvent=true){if(enabled===undefined){enabled=!this._bgColorPickerButton.toggled();}
this._bgColorPickerButton.setToggled(enabled);if(shouldTriggerEvent){this.dispatchEventToListeners(Events.BackgroundColorPickerWillBeToggled,enabled);}
Host.InspectorFrontendHost.setEyeDropperActive(enabled);if(enabled){Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.EyeDropperPickedColor,this._bgColorPickedBound);}else{Host.InspectorFrontendHost.events.removeEventListener(Host.InspectorFrontendHostAPI.Events.EyeDropperPickedColor,this._bgColorPickedBound);}}
_bgColorPicked(event){const rgbColor=(event.data);const rgba=[rgbColor.r,rgbColor.g,rgbColor.b,(rgbColor.a/2.55|0)/100];const color=Common.Color.fromRGBA(rgba);this._contrastInfo.setBgColor(color);this._toggleBackgroundColorPicker(false);Host.InspectorFrontendHost.bringToFront();}}
export const Events={BackgroundColorPickerWillBeToggled:Symbol('BackgroundColorPickerWillBeToggled')};export class Swatch{constructor(parentElement){this._parentElement=parentElement;this._swatchElement=parentElement.createChild('span','swatch contrast swatch-inner-white');this._swatchInnerElement=this._swatchElement.createChild('span','swatch-inner');this._textPreview=this._swatchElement.createChild('div','text-preview');this._textPreview.textContent='Aa';}
setColors(fgColor,bgColor){this._textPreview.style.color=(fgColor.asString(Common.Color.Format.RGBA));this._swatchInnerElement.style.backgroundColor=(bgColor.asString(Common.Color.Format.RGBA));this._swatchElement.classList.toggle('swatch-inner-white',bgColor.hsla()[2]>0.9);}}
self.ColorPicker=self.ColorPicker||{};ColorPicker=ColorPicker||{};ColorPicker.ContrastDetails=ContrastDetails;ColorPicker.ContrastDetails.Events=Events;ColorPicker.ContrastDetails.Swatch=Swatch;import'./codemirror.js';import'./multiplex.js';import'./matchbrackets.js';import'./closebrackets.js';import'./mark-selection.js';import'./comment.js';import'./overlay.js';import'./active-line.js';import'./foldcode.js';import'./foldgutter.js';import'./brace-fold.js';(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";var WRAP_CLASS="CodeMirror-activeline";var BACK_CLASS="CodeMirror-activeline-background";var GUTT_CLASS="CodeMirror-activeline-gutter";CodeMirror.defineOption("styleActiveLine",false,function(cm,val,old){var prev=old==CodeMirror.Init?false:old;if(val==prev)return
if(prev){cm.off("beforeSelectionChange",selectionChange);clearActiveLines(cm);delete cm.state.activeLines;}
if(val){cm.state.activeLines=[];updateActiveLines(cm,cm.listSelections());cm.on("beforeSelectionChange",selectionChange);}});function clearActiveLines(cm){for(var i=0;i<cm.state.activeLines.length;i++){cm.removeLineClass(cm.state.activeLines[i],"wrap",WRAP_CLASS);cm.removeLineClass(cm.state.activeLines[i],"background",BACK_CLASS);cm.removeLineClass(cm.state.activeLines[i],"gutter",GUTT_CLASS);}}
function sameArray(a,b){if(a.length!=b.length)return false;for(var i=0;i<a.length;i++)
if(a[i]!=b[i])return false;return true;}
function updateActiveLines(cm,ranges){var active=[];for(var i=0;i<ranges.length;i++){var range=ranges[i];var option=cm.getOption("styleActiveLine");if(typeof option=="object"&&option.nonEmpty?range.anchor.line!=range.head.line:!range.empty())
continue
var line=cm.getLineHandleVisualStart(range.head.line);if(active[active.length-1]!=line)active.push(line);}
if(sameArray(cm.state.activeLines,active))return;cm.operation(function(){clearActiveLines(cm);for(var i=0;i<active.length;i++){cm.addLineClass(active[i],"wrap",WRAP_CLASS);cm.addLineClass(active[i],"background",BACK_CLASS);cm.addLineClass(active[i],"gutter",GUTT_CLASS);}
cm.state.activeLines=active;});}
function selectionChange(cm,sel){updateActiveLines(cm,sel.ranges);}});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.registerHelper("fold","brace",function(cm,start){var line=start.line,lineText=cm.getLine(line);var tokenType;function findOpening(openCh){for(var at=start.ch,pass=0;;){var found=at<=0?-1:lineText.lastIndexOf(openCh,at-1);if(found==-1){if(pass==1)break;pass=1;at=lineText.length;continue;}
if(pass==1&&found<start.ch)break;tokenType=cm.getTokenTypeAt(CodeMirror.Pos(line,found+1));if(!/^(comment|string)/.test(tokenType))return found+1;at=found-1;}}
var startToken="{",endToken="}",startCh=findOpening("{");if(startCh==null){startToken="[",endToken="]";startCh=findOpening("[");}
if(startCh==null)return;var count=1,lastLine=cm.lastLine(),end,endCh;outer:for(var i=line;i<=lastLine;++i){var text=cm.getLine(i),pos=i==line?startCh:0;for(;;){var nextOpen=text.indexOf(startToken,pos),nextClose=text.indexOf(endToken,pos);if(nextOpen<0)nextOpen=text.length;if(nextClose<0)nextClose=text.length;pos=Math.min(nextOpen,nextClose);if(pos==text.length)break;if(cm.getTokenTypeAt(CodeMirror.Pos(i,pos+1))==tokenType){if(pos==nextOpen)++count;else if(!--count){end=i;endCh=pos;break outer;}}
++pos;}}
if(end==null||line==end)return;return{from:CodeMirror.Pos(line,startCh),to:CodeMirror.Pos(end,endCh)};});CodeMirror.registerHelper("fold","import",function(cm,start){function hasImport(line){if(line<cm.firstLine()||line>cm.lastLine())return null;var start=cm.getTokenAt(CodeMirror.Pos(line,1));if(!/\S/.test(start.string))start=cm.getTokenAt(CodeMirror.Pos(line,start.end+1));if(start.type!="keyword"||start.string!="import")return null;for(var i=line,e=Math.min(cm.lastLine(),line+10);i<=e;++i){var text=cm.getLine(i),semi=text.indexOf(";");if(semi!=-1)return{startCh:start.end,end:CodeMirror.Pos(i,semi)};}}
var startLine=start.line,has=hasImport(startLine),prev;if(!has||hasImport(startLine-1)||((prev=hasImport(startLine-2))&&prev.end.line==startLine-1))
return null;for(var end=has.end;;){var next=hasImport(end.line+1);if(next==null)break;end=next.end;}
return{from:cm.clipPos(CodeMirror.Pos(startLine,has.startCh+1)),to:end};});CodeMirror.registerHelper("fold","include",function(cm,start){function hasInclude(line){if(line<cm.firstLine()||line>cm.lastLine())return null;var start=cm.getTokenAt(CodeMirror.Pos(line,1));if(!/\S/.test(start.string))start=cm.getTokenAt(CodeMirror.Pos(line,start.end+1));if(start.type=="meta"&&start.string.slice(0,8)=="#include")return start.start+8;}
var startLine=start.line,has=hasInclude(startLine);if(has==null||hasInclude(startLine-1)!=null)return null;for(var end=startLine;;){var next=hasInclude(end+1);if(next==null)break;++end;}
return{from:CodeMirror.Pos(startLine,has+1),to:cm.clipPos(CodeMirror.Pos(end))};});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){var defaults={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"};var Pos=CodeMirror.Pos;CodeMirror.defineOption("autoCloseBrackets",false,function(cm,val,old){if(old&&old!=CodeMirror.Init){cm.removeKeyMap(keyMap);cm.state.closeBrackets=null;}
if(val){ensureBound(getOption(val,"pairs"))
cm.state.closeBrackets=val;cm.addKeyMap(keyMap);}});function getOption(conf,name){if(name=="pairs"&&typeof conf=="string")return conf;if(typeof conf=="object"&&conf[name]!=null)return conf[name];return defaults[name];}
var keyMap={Backspace:handleBackspace,Enter:handleEnter};function ensureBound(chars){for(var i=0;i<chars.length;i++){var ch=chars.charAt(i),key="'"+ch+"'"
if(!keyMap[key])keyMap[key]=handler(ch)}}
ensureBound(defaults.pairs+"`")
function handler(ch){return function(cm){return handleChar(cm,ch);};}
function getConfig(cm){var deflt=cm.state.closeBrackets;if(!deflt||deflt.override)return deflt;var mode=cm.getModeAt(cm.getCursor());return mode.closeBrackets||deflt;}
function handleBackspace(cm){var conf=getConfig(cm);if(!conf||cm.getOption("disableInput"))return CodeMirror.Pass;var pairs=getOption(conf,"pairs");var ranges=cm.listSelections();for(var i=0;i<ranges.length;i++){if(!ranges[i].empty())return CodeMirror.Pass;var around=charsAround(cm,ranges[i].head);if(!around||pairs.indexOf(around)%2!=0)return CodeMirror.Pass;}
for(var i=ranges.length-1;i>=0;i--){var cur=ranges[i].head;cm.replaceRange("",Pos(cur.line,cur.ch-1),Pos(cur.line,cur.ch+1),"+delete");}}
function handleEnter(cm){var conf=getConfig(cm);var explode=conf&&getOption(conf,"explode");if(!explode||cm.getOption("disableInput"))return CodeMirror.Pass;var ranges=cm.listSelections();for(var i=0;i<ranges.length;i++){if(!ranges[i].empty())return CodeMirror.Pass;var around=charsAround(cm,ranges[i].head);if(!around||explode.indexOf(around)%2!=0)return CodeMirror.Pass;}
cm.operation(function(){var linesep=cm.lineSeparator()||"\n";cm.replaceSelection(linesep+linesep,null);cm.execCommand("goCharLeft");ranges=cm.listSelections();for(var i=0;i<ranges.length;i++){var line=ranges[i].head.line;cm.indentLine(line,null,true);cm.indentLine(line+1,null,true);}});}
function contractSelection(sel){var inverted=CodeMirror.cmpPos(sel.anchor,sel.head)>0;return{anchor:new Pos(sel.anchor.line,sel.anchor.ch+(inverted?-1:1)),head:new Pos(sel.head.line,sel.head.ch+(inverted?1:-1))};}
function handleChar(cm,ch){var conf=getConfig(cm);if(!conf||cm.getOption("disableInput"))return CodeMirror.Pass;var pairs=getOption(conf,"pairs");var pos=pairs.indexOf(ch);if(pos==-1)return CodeMirror.Pass;var closeBefore=getOption(conf,"closeBefore");var triples=getOption(conf,"triples");var identical=pairs.charAt(pos+1)==ch;var ranges=cm.listSelections();var opening=pos%2==0;var type;for(var i=0;i<ranges.length;i++){var range=ranges[i],cur=range.head,curType;var next=cm.getRange(cur,Pos(cur.line,cur.ch+1));if(opening&&!range.empty()){curType="surround";}else if((identical||!opening)&&next==ch){if(identical&&stringStartsAfter(cm,cur))
curType="both";else if(triples.indexOf(ch)>=0&&cm.getRange(cur,Pos(cur.line,cur.ch+3))==ch+ch+ch)
curType="skipThree";else
curType="skip";}else if(identical&&cur.ch>1&&triples.indexOf(ch)>=0&&cm.getRange(Pos(cur.line,cur.ch-2),cur)==ch+ch){if(cur.ch>2&&/\bstring/.test(cm.getTokenTypeAt(Pos(cur.line,cur.ch-2))))return CodeMirror.Pass;curType="addFour";}else if(identical){var prev=cur.ch==0?" ":cm.getRange(Pos(cur.line,cur.ch-1),cur)
if(!CodeMirror.isWordChar(next)&&prev!=ch&&!CodeMirror.isWordChar(prev))curType="both";else return CodeMirror.Pass;}else if(opening&&(next.length===0||/\s/.test(next)||closeBefore.indexOf(next)>-1)){curType="both";}else{return CodeMirror.Pass;}
if(!type)type=curType;else if(type!=curType)return CodeMirror.Pass;}
var left=pos%2?pairs.charAt(pos-1):ch;var right=pos%2?ch:pairs.charAt(pos+1);cm.operation(function(){if(type=="skip"){cm.execCommand("goCharRight");}else if(type=="skipThree"){for(var i=0;i<3;i++)
cm.execCommand("goCharRight");}else if(type=="surround"){var sels=cm.getSelections();for(var i=0;i<sels.length;i++)
sels[i]=left+sels[i]+right;cm.replaceSelections(sels,"around");sels=cm.listSelections().slice();for(var i=0;i<sels.length;i++)
sels[i]=contractSelection(sels[i]);cm.setSelections(sels);}else if(type=="both"){cm.replaceSelection(left+right,null);cm.triggerElectric(left+right);cm.execCommand("goCharLeft");}else if(type=="addFour"){cm.replaceSelection(left+left+left+left,"before");cm.execCommand("goCharRight");}});}
function charsAround(cm,pos){var str=cm.getRange(Pos(pos.line,pos.ch-1),Pos(pos.line,pos.ch+1));return str.length==2?str:null;}
function stringStartsAfter(cm,pos){var token=cm.getTokenAt(Pos(pos.line,pos.ch+1))
return/\bstring/.test(token.type)&&token.start==pos.ch&&(pos.ch==0||!/\bstring/.test(cm.getTokenTypeAt(pos)))}});(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?module.exports=factory():typeof define==='function'&&define.amd?define(factory):(global.CodeMirror=factory());}(self,(function(){'use strict';var userAgent=navigator.userAgent;var platform=navigator.platform;var gecko=/gecko\/\d/i.test(userAgent);var ie_upto10=/MSIE \d/.test(userAgent);var ie_11up=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent);var edge=/Edge\/(\d+)/.exec(userAgent);var ie=ie_upto10||ie_11up||edge;var ie_version=ie&&(ie_upto10?document.documentMode||6:+(edge||ie_11up)[1]);var webkit=!edge&&/WebKit\//.test(userAgent);var qtwebkit=webkit&&/Qt\/\d+\.\d+/.test(userAgent);var chrome=!edge&&/Chrome\//.test(userAgent);var presto=/Opera\//.test(userAgent);var safari=/Apple Computer/.test(navigator.vendor);var mac_geMountainLion=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent);var phantom=/PhantomJS/.test(userAgent);var ios=!edge&&/AppleWebKit/.test(userAgent)&&/Mobile\/\w+/.test(userAgent);var android=/Android/.test(userAgent);var mobile=ios||android||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);var mac=ios||/Mac/.test(platform);var chromeOS=/\bCrOS\b/.test(userAgent);var windows=/win/i.test(platform);var presto_version=presto&&userAgent.match(/Version\/(\d*\.\d*)/);if(presto_version){presto_version=Number(presto_version[1]);}
if(presto_version&&presto_version>=15){presto=false;webkit=true;}
var flipCtrlCmd=mac&&(qtwebkit||presto&&(presto_version==null||presto_version<12.11));var captureRightClick=gecko||(ie&&ie_version>=9);function classTest(cls){return new RegExp("(^|\\s)"+cls+"(?:$|\\s)\\s*")}
var rmClass=function(node,cls){var current=node.className;var match=classTest(cls).exec(current);if(match){var after=current.slice(match.index+match[0].length);node.className=current.slice(0,match.index)+(after?match[1]+after:"");}};function removeChildren(e){for(var count=e.childNodes.length;count>0;--count)
{e.removeChild(e.firstChild);}
return e}
function removeChildrenAndAdd(parent,e){return removeChildren(parent).appendChild(e)}
function elt(tag,content,className,style){var e=document.createElement(tag);if(className){e.className=className;}
if(style){e.style.cssText=style;}
if(typeof content=="string"){e.appendChild(document.createTextNode(content));}
else if(content){for(var i=0;i<content.length;++i){e.appendChild(content[i]);}}
return e}
function eltP(tag,content,className,style){var e=elt(tag,content,className,style);e.setAttribute("role","presentation");return e}
var range;if(document.createRange){range=function(node,start,end,endNode){var r=document.createRange();r.setEnd(endNode||node,end);r.setStart(node,start);return r};}
else{range=function(node,start,end){var r=document.body.createTextRange();try{r.moveToElementText(node.parentNode);}
catch(e){return r}
r.collapse(true);r.moveEnd("character",end);r.moveStart("character",start);return r};}
function contains(parent,child){if(child.nodeType==3)
{child=child.parentNode;}
if(parent.contains)
{return parent.contains(child)}
do{if(child.nodeType==11){child=child.host;}
if(child==parent){return true}}while(child=child.parentNode)}
function activeElt(){var activeElement;try{activeElement=document.activeElement;}catch(e){activeElement=document.body||null;}
while(activeElement&&activeElement.shadowRoot&&activeElement.shadowRoot.activeElement)
{activeElement=activeElement.shadowRoot.activeElement;}
return activeElement}
function addClass(node,cls){var current=node.className;if(!classTest(cls).test(current)){node.className+=(current?" ":"")+cls;}}
function joinClasses(a,b){var as=a.split(" ");for(var i=0;i<as.length;i++)
{if(as[i]&&!classTest(as[i]).test(b)){b+=" "+as[i];}}
return b}
var selectInput=function(node){node.select();};if(ios)
{selectInput=function(node){node.selectionStart=0;node.selectionEnd=node.value.length;};}
else if(ie)
{selectInput=function(node){try{node.select();}catch(_e){}};}
function bind(f){var args=Array.prototype.slice.call(arguments,1);return function(){return f.apply(null,args)}}
function copyObj(obj,target,overwrite){if(!target){target={};}
for(var prop in obj)
{if(obj.hasOwnProperty(prop)&&(overwrite!==false||!target.hasOwnProperty(prop)))
{target[prop]=obj[prop];}}
return target}
function countColumn(string,end,tabSize,startIndex,startValue){if(end==null){end=string.search(/[^\s\u00a0]/);if(end==-1){end=string.length;}}
for(var i=startIndex||0,n=startValue||0;;){var nextTab=string.indexOf("\t",i);if(nextTab<0||nextTab>=end)
{return n+(end-i)}
n+=nextTab-i;n+=tabSize-(n%tabSize);i=nextTab+1;}}
var Delayed=function(){this.id=null;};Delayed.prototype.set=function(ms,f){clearTimeout(this.id);this.id=setTimeout(f,ms);};function indexOf(array,elt){for(var i=0;i<array.length;++i)
{if(array[i]==elt){return i}}
return-1}
var scrollerGap=30;var Pass={toString:function(){return"CodeMirror.Pass"}};var sel_dontScroll={scroll:false},sel_mouse={origin:"*mouse"},sel_move={origin:"+move"};function findColumn(string,goal,tabSize){for(var pos=0,col=0;;){var nextTab=string.indexOf("\t",pos);if(nextTab==-1){nextTab=string.length;}
var skipped=nextTab-pos;if(nextTab==string.length||col+skipped>=goal)
{return pos+Math.min(skipped,goal-col)}
col+=nextTab-pos;col+=tabSize-(col%tabSize);pos=nextTab+1;if(col>=goal){return pos}}}
var spaceStrs=[""];function spaceStr(n){while(spaceStrs.length<=n)
{spaceStrs.push(lst(spaceStrs)+" ");}
return spaceStrs[n]}
function lst(arr){return arr[arr.length-1]}
function map(array,f){var out=[];for(var i=0;i<array.length;i++){out[i]=f(array[i],i);}
return out}
function insertSorted(array,value,score){var pos=0,priority=score(value);while(pos<array.length&&score(array[pos])<=priority){pos++;}
array.splice(pos,0,value);}
function nothing(){}
function createObj(base,props){var inst;if(Object.create){inst=Object.create(base);}else{nothing.prototype=base;inst=new nothing();}
if(props){copyObj(props,inst);}
return inst}
var nonASCIISingleCaseWordChar=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function isWordCharBasic(ch){return/\w/.test(ch)||ch>"\x80"&&(ch.toUpperCase()!=ch.toLowerCase()||nonASCIISingleCaseWordChar.test(ch))}
function isWordChar(ch,helper){if(!helper){return isWordCharBasic(ch)}
if(helper.source.indexOf("\\w")>-1&&isWordCharBasic(ch)){return true}
return helper.test(ch)}
function isEmpty(obj){for(var n in obj){if(obj.hasOwnProperty(n)&&obj[n]){return false}}
return true}
var extendingChars=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function isExtendingChar(ch){return ch.charCodeAt(0)>=768&&extendingChars.test(ch)}
function skipExtendingChars(str,pos,dir){while((dir<0?pos>0:pos<str.length)&&isExtendingChar(str.charAt(pos))){pos+=dir;}
return pos}
function findFirst(pred,from,to){var dir=from>to?-1:1;for(;;){if(from==to){return from}
var midF=(from+to)/2,mid=dir<0?Math.ceil(midF):Math.floor(midF);if(mid==from){return pred(mid)?from:to}
if(pred(mid)){to=mid;}
else{from=mid+dir;}}}
function iterateBidiSections(order,from,to,f){if(!order){return f(from,to,"ltr",0)}
var found=false;for(var i=0;i<order.length;++i){var part=order[i];if(part.from<to&&part.to>from||from==to&&part.to==from){f(Math.max(part.from,from),Math.min(part.to,to),part.level==1?"rtl":"ltr",i);found=true;}}
if(!found){f(from,to,"ltr");}}
var bidiOther=null;function getBidiPartAt(order,ch,sticky){var found;bidiOther=null;for(var i=0;i<order.length;++i){var cur=order[i];if(cur.from<ch&&cur.to>ch){return i}
if(cur.to==ch){if(cur.from!=cur.to&&sticky=="before"){found=i;}
else{bidiOther=i;}}
if(cur.from==ch){if(cur.from!=cur.to&&sticky!="before"){found=i;}
else{bidiOther=i;}}}
return found!=null?found:bidiOther}
var bidiOrdering=(function(){var lowTypes="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";var arabicTypes="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function charType(code){if(code<=0xf7){return lowTypes.charAt(code)}
else if(0x590<=code&&code<=0x5f4){return"R"}
else if(0x600<=code&&code<=0x6f9){return arabicTypes.charAt(code-0x600)}
else if(0x6ee<=code&&code<=0x8ac){return"r"}
else if(0x2000<=code&&code<=0x200b){return"w"}
else if(code==0x200c){return"b"}
else{return"L"}}
var bidiRE=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;var isNeutral=/[stwN]/,isStrong=/[LRr]/,countsAsLeft=/[Lb1n]/,countsAsNum=/[1n]/;function BidiSpan(level,from,to){this.level=level;this.from=from;this.to=to;}
return function(str,direction){var outerType=direction=="ltr"?"L":"R";if(str.length==0||direction=="ltr"&&!bidiRE.test(str)){return false}
var len=str.length,types=[];for(var i=0;i<len;++i)
{types.push(charType(str.charCodeAt(i)));}
for(var i$1=0,prev=outerType;i$1<len;++i$1){var type=types[i$1];if(type=="m"){types[i$1]=prev;}
else{prev=type;}}
for(var i$2=0,cur=outerType;i$2<len;++i$2){var type$1=types[i$2];if(type$1=="1"&&cur=="r"){types[i$2]="n";}
else if(isStrong.test(type$1)){cur=type$1;if(type$1=="r"){types[i$2]="R";}}}
for(var i$3=1,prev$1=types[0];i$3<len-1;++i$3){var type$2=types[i$3];if(type$2=="+"&&prev$1=="1"&&types[i$3+1]=="1"){types[i$3]="1";}
else if(type$2==","&&prev$1==types[i$3+1]&&(prev$1=="1"||prev$1=="n")){types[i$3]=prev$1;}
prev$1=type$2;}
for(var i$4=0;i$4<len;++i$4){var type$3=types[i$4];if(type$3==","){types[i$4]="N";}
else if(type$3=="%"){var end=(void 0);for(end=i$4+1;end<len&&types[end]=="%";++end){}
var replace=(i$4&&types[i$4-1]=="!")||(end<len&&types[end]=="1")?"1":"N";for(var j=i$4;j<end;++j){types[j]=replace;}
i$4=end-1;}}
for(var i$5=0,cur$1=outerType;i$5<len;++i$5){var type$4=types[i$5];if(cur$1=="L"&&type$4=="1"){types[i$5]="L";}
else if(isStrong.test(type$4)){cur$1=type$4;}}
for(var i$6=0;i$6<len;++i$6){if(isNeutral.test(types[i$6])){var end$1=(void 0);for(end$1=i$6+1;end$1<len&&isNeutral.test(types[end$1]);++end$1){}
var before=(i$6?types[i$6-1]:outerType)=="L";var after=(end$1<len?types[end$1]:outerType)=="L";var replace$1=before==after?(before?"L":"R"):outerType;for(var j$1=i$6;j$1<end$1;++j$1){types[j$1]=replace$1;}
i$6=end$1-1;}}
var order=[],m;for(var i$7=0;i$7<len;){if(countsAsLeft.test(types[i$7])){var start=i$7;for(++i$7;i$7<len&&countsAsLeft.test(types[i$7]);++i$7){}
order.push(new BidiSpan(0,start,i$7));}else{var pos=i$7,at=order.length;for(++i$7;i$7<len&&types[i$7]!="L";++i$7){}
for(var j$2=pos;j$2<i$7;){if(countsAsNum.test(types[j$2])){if(pos<j$2){order.splice(at,0,new BidiSpan(1,pos,j$2));}
var nstart=j$2;for(++j$2;j$2<i$7&&countsAsNum.test(types[j$2]);++j$2){}
order.splice(at,0,new BidiSpan(2,nstart,j$2));pos=j$2;}else{++j$2;}}
if(pos<i$7){order.splice(at,0,new BidiSpan(1,pos,i$7));}}}
if(direction=="ltr"){if(order[0].level==1&&(m=str.match(/^\s+/))){order[0].from=m[0].length;order.unshift(new BidiSpan(0,0,m[0].length));}
if(lst(order).level==1&&(m=str.match(/\s+$/))){lst(order).to-=m[0].length;order.push(new BidiSpan(0,len-m[0].length,len));}}
return direction=="rtl"?order.reverse():order}})();function getOrder(line,direction){var order=line.order;if(order==null){order=line.order=bidiOrdering(line.text,direction);}
return order}
var noHandlers=[];var on=function(emitter,type,f){if(emitter.addEventListener){emitter.addEventListener(type,f,false);}else if(emitter.attachEvent){emitter.attachEvent("on"+type,f);}else{var map$$1=emitter._handlers||(emitter._handlers={});map$$1[type]=(map$$1[type]||noHandlers).concat(f);}};function getHandlers(emitter,type){return emitter._handlers&&emitter._handlers[type]||noHandlers}
function off(emitter,type,f){if(emitter.removeEventListener){emitter.removeEventListener(type,f,false);}else if(emitter.detachEvent){emitter.detachEvent("on"+type,f);}else{var map$$1=emitter._handlers,arr=map$$1&&map$$1[type];if(arr){var index=indexOf(arr,f);if(index>-1)
{map$$1[type]=arr.slice(0,index).concat(arr.slice(index+1));}}}}
function signal(emitter,type){var handlers=getHandlers(emitter,type);if(!handlers.length){return}
var args=Array.prototype.slice.call(arguments,2);for(var i=0;i<handlers.length;++i){handlers[i].apply(null,args);}}
function signalDOMEvent(cm,e,override){if(typeof e=="string")
{e={type:e,preventDefault:function(){this.defaultPrevented=true;}};}
signal(cm,override||e.type,cm,e);return e_defaultPrevented(e)||e.codemirrorIgnore}
function signalCursorActivity(cm){var arr=cm._handlers&&cm._handlers.cursorActivity;if(!arr){return}
var set=cm.curOp.cursorActivityHandlers||(cm.curOp.cursorActivityHandlers=[]);for(var i=0;i<arr.length;++i){if(indexOf(set,arr[i])==-1)
{set.push(arr[i]);}}}
function hasHandler(emitter,type){return getHandlers(emitter,type).length>0}
function eventMixin(ctor){ctor.prototype.on=function(type,f){on(this,type,f);};ctor.prototype.off=function(type,f){off(this,type,f);};}
function e_preventDefault(e){if(e.preventDefault){e.preventDefault();}
else{e.returnValue=false;}}
function e_stopPropagation(e){if(e.stopPropagation){e.stopPropagation();}
else{e.cancelBubble=true;}}
function e_defaultPrevented(e){return e.defaultPrevented!=null?e.defaultPrevented:e.returnValue==false}
function e_stop(e){e_preventDefault(e);e_stopPropagation(e);}
function e_target(e){return e.target||e.srcElement}
function e_button(e){var b=e.which;if(b==null){if(e.button&1){b=1;}
else if(e.button&2){b=3;}
else if(e.button&4){b=2;}}
if(mac&&e.ctrlKey&&b==1){b=3;}
return b}
var dragAndDrop=function(){if(ie&&ie_version<9){return false}
var div=elt('div');return"draggable"in div||"dragDrop"in div}();var zwspSupported;function zeroWidthElement(measure){if(zwspSupported==null){var test=elt("span","\u200b");removeChildrenAndAdd(measure,elt("span",[test,document.createTextNode("x")]));if(measure.firstChild.offsetHeight!=0)
{zwspSupported=test.offsetWidth<=1&&test.offsetHeight>2&&!(ie&&ie_version<8);}}
var node=zwspSupported?elt("span","\u200b"):elt("span","\u00a0",null,"display: inline-block; width: 1px; margin-right: -1px");node.setAttribute("cm-text","");return node}
var badBidiRects;function hasBadBidiRects(measure){if(badBidiRects!=null){return badBidiRects}
var txt=removeChildrenAndAdd(measure,document.createTextNode("A\u062eA"));var r0=range(txt,0,1).getBoundingClientRect();var r1=range(txt,1,2).getBoundingClientRect();removeChildren(measure);if(!r0||r0.left==r0.right){return false}
return badBidiRects=(r1.right-r0.right<3)}
var splitLinesAuto="\n\nb".split(/\n/).length!=3?function(string){var pos=0,result=[],l=string.length;while(pos<=l){var nl=string.indexOf("\n",pos);if(nl==-1){nl=string.length;}
var line=string.slice(pos,string.charAt(nl-1)=="\r"?nl-1:nl);var rt=line.indexOf("\r");if(rt!=-1){result.push(line.slice(0,rt));pos+=rt+1;}else{result.push(line);pos=nl+1;}}
return result}:function(string){return string.split(/\r\n?|\n/);};var hasSelection=window.getSelection?function(te){try{return te.selectionStart!=te.selectionEnd}
catch(e){return false}}:function(te){var range$$1;try{range$$1=te.ownerDocument.selection.createRange();}
catch(e){}
if(!range$$1||range$$1.parentElement()!=te){return false}
return range$$1.compareEndPoints("StartToEnd",range$$1)!=0};var hasCopyEvent=(function(){var e=elt("div");if("oncopy"in e){return true}
e.setAttribute("oncopy","return;");return typeof e.oncopy=="function"})();var badZoomedRects=null;function hasBadZoomedRects(measure){if(badZoomedRects!=null){return badZoomedRects}
var node=removeChildrenAndAdd(measure,elt("span","x"));var normal=node.getBoundingClientRect();var fromRange=range(node,0,1).getBoundingClientRect();return badZoomedRects=Math.abs(normal.left-fromRange.left)>1}
var modes={},mimeModes={};function defineMode(name,mode){if(arguments.length>2)
{mode.dependencies=Array.prototype.slice.call(arguments,2);}
modes[name]=mode;}
function defineMIME(mime,spec){mimeModes[mime]=spec;}
function resolveMode(spec){if(typeof spec=="string"&&mimeModes.hasOwnProperty(spec)){spec=mimeModes[spec];}else if(spec&&typeof spec.name=="string"&&mimeModes.hasOwnProperty(spec.name)){var found=mimeModes[spec.name];if(typeof found=="string"){found={name:found};}
spec=createObj(found,spec);spec.name=found.name;}else if(typeof spec=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(spec)){return resolveMode("application/xml")}else if(typeof spec=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(spec)){return resolveMode("application/json")}
if(typeof spec=="string"){return{name:spec}}
else{return spec||{name:"null"}}}
function getMode(options,spec){spec=resolveMode(spec);var mfactory=modes[spec.name];if(!mfactory){return getMode(options,"text/plain")}
var modeObj=mfactory(options,spec);if(modeExtensions.hasOwnProperty(spec.name)){var exts=modeExtensions[spec.name];for(var prop in exts){if(!exts.hasOwnProperty(prop)){continue}
if(modeObj.hasOwnProperty(prop)){modeObj["_"+prop]=modeObj[prop];}
modeObj[prop]=exts[prop];}}
modeObj.name=spec.name;if(spec.helperType){modeObj.helperType=spec.helperType;}
if(spec.modeProps){for(var prop$1 in spec.modeProps)
{modeObj[prop$1]=spec.modeProps[prop$1];}}
return modeObj}
var modeExtensions={};function extendMode(mode,properties){var exts=modeExtensions.hasOwnProperty(mode)?modeExtensions[mode]:(modeExtensions[mode]={});copyObj(properties,exts);}
function copyState(mode,state){if(state===true){return state}
if(mode.copyState){return mode.copyState(state)}
var nstate={};for(var n in state){var val=state[n];if(val instanceof Array){val=val.concat([]);}
nstate[n]=val;}
return nstate}
function innerMode(mode,state){var info;while(mode.innerMode){info=mode.innerMode(state);if(!info||info.mode==mode){break}
state=info.state;mode=info.mode;}
return info||{mode:mode,state:state}}
function startState(mode,a1,a2){return mode.startState?mode.startState(a1,a2):true}
var StringStream=function(string,tabSize,lineOracle){this.pos=this.start=0;this.string=string;this.tabSize=tabSize||8;this.lastColumnPos=this.lastColumnValue=0;this.lineStart=0;this.lineOracle=lineOracle;};StringStream.prototype.eol=function(){return this.pos>=this.string.length};StringStream.prototype.sol=function(){return this.pos==this.lineStart};StringStream.prototype.peek=function(){return this.string.charAt(this.pos)||undefined};StringStream.prototype.next=function(){if(this.pos<this.string.length)
{return this.string.charAt(this.pos++)}};StringStream.prototype.eat=function(match){var ch=this.string.charAt(this.pos);var ok;if(typeof match=="string"){ok=ch==match;}
else{ok=ch&&(match.test?match.test(ch):match(ch));}
if(ok){++this.pos;return ch}};StringStream.prototype.eatWhile=function(match){var start=this.pos;while(this.eat(match)){}
return this.pos>start};StringStream.prototype.eatSpace=function(){var start=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos))){++this.pos;}
return this.pos>start};StringStream.prototype.skipToEnd=function(){this.pos=this.string.length;};StringStream.prototype.skipTo=function(ch){var found=this.string.indexOf(ch,this.pos);if(found>-1){this.pos=found;return true}};StringStream.prototype.backUp=function(n){this.pos-=n;};StringStream.prototype.column=function(){if(this.lastColumnPos<this.start){this.lastColumnValue=countColumn(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue);this.lastColumnPos=this.start;}
return this.lastColumnValue-(this.lineStart?countColumn(this.string,this.lineStart,this.tabSize):0)};StringStream.prototype.indentation=function(){return countColumn(this.string,null,this.tabSize)-
(this.lineStart?countColumn(this.string,this.lineStart,this.tabSize):0)};StringStream.prototype.match=function(pattern,consume,caseInsensitive){if(typeof pattern=="string"){var cased=function(str){return caseInsensitive?str.toLowerCase():str;};var substr=this.string.substr(this.pos,pattern.length);if(cased(substr)==cased(pattern)){if(consume!==false){this.pos+=pattern.length;}
return true}}else{var match=this.string.slice(this.pos).match(pattern);if(match&&match.index>0){return null}
if(match&&consume!==false){this.pos+=match[0].length;}
return match}};StringStream.prototype.current=function(){return this.string.slice(this.start,this.pos)};StringStream.prototype.hideFirstChars=function(n,inner){this.lineStart+=n;try{return inner()}
finally{this.lineStart-=n;}};StringStream.prototype.lookAhead=function(n){var oracle=this.lineOracle;return oracle&&oracle.lookAhead(n)};StringStream.prototype.baseToken=function(){var oracle=this.lineOracle;return oracle&&oracle.baseToken(this.pos)};function getLine(doc,n){n-=doc.first;if(n<0||n>=doc.size){throw new Error("There is no line "+(n+doc.first)+" in the document.")}
var chunk=doc;while(!chunk.lines){for(var i=0;;++i){var child=chunk.children[i],sz=child.chunkSize();if(n<sz){chunk=child;break}
n-=sz;}}
return chunk.lines[n]}
function getBetween(doc,start,end){var out=[],n=start.line;doc.iter(start.line,end.line+1,function(line){var text=line.text;if(n==end.line){text=text.slice(0,end.ch);}
if(n==start.line){text=text.slice(start.ch);}
out.push(text);++n;});return out}
function getLines(doc,from,to){var out=[];doc.iter(from,to,function(line){out.push(line.text);});return out}
function updateLineHeight(line,height){var diff=height-line.height;if(diff){for(var n=line;n;n=n.parent){n.height+=diff;}}}
function lineNo(line){if(line.parent==null){return null}
var cur=line.parent,no=indexOf(cur.lines,line);for(var chunk=cur.parent;chunk;cur=chunk,chunk=chunk.parent){for(var i=0;;++i){if(chunk.children[i]==cur){break}
no+=chunk.children[i].chunkSize();}}
return no+cur.first}
function lineAtHeight(chunk,h){var n=chunk.first;outer:do{for(var i$1=0;i$1<chunk.children.length;++i$1){var child=chunk.children[i$1],ch=child.height;if(h<ch){chunk=child;continue outer}
h-=ch;n+=child.chunkSize();}
return n}while(!chunk.lines)
var i=0;for(;i<chunk.lines.length;++i){var line=chunk.lines[i],lh=line.height;if(h<lh){break}
h-=lh;}
return n+i}
function isLine(doc,l){return l>=doc.first&&l<doc.first+doc.size}
function lineNumberFor(options,i){return String(options.lineNumberFormatter(i+options.firstLineNumber))}
function Pos(line,ch,sticky){if(sticky===void 0)sticky=null;if(!(this instanceof Pos)){return new Pos(line,ch,sticky)}
this.line=line;this.ch=ch;this.sticky=sticky;}
function cmp(a,b){return a.line-b.line||a.ch-b.ch}
function equalCursorPos(a,b){return a.sticky==b.sticky&&cmp(a,b)==0}
function copyPos(x){return Pos(x.line,x.ch)}
function maxPos(a,b){return cmp(a,b)<0?b:a}
function minPos(a,b){return cmp(a,b)<0?a:b}
function clipLine(doc,n){return Math.max(doc.first,Math.min(n,doc.first+doc.size-1))}
function clipPos(doc,pos){if(pos.line<doc.first){return Pos(doc.first,0)}
var last=doc.first+doc.size-1;if(pos.line>last){return Pos(last,getLine(doc,last).text.length)}
return clipToLen(pos,getLine(doc,pos.line).text.length)}
function clipToLen(pos,linelen){var ch=pos.ch;if(ch==null||ch>linelen){return Pos(pos.line,linelen)}
else if(ch<0){return Pos(pos.line,0)}
else{return pos}}
function clipPosArray(doc,array){var out=[];for(var i=0;i<array.length;i++){out[i]=clipPos(doc,array[i]);}
return out}
var SavedContext=function(state,lookAhead){this.state=state;this.lookAhead=lookAhead;};var Context=function(doc,state,line,lookAhead){this.state=state;this.doc=doc;this.line=line;this.maxLookAhead=lookAhead||0;this.baseTokens=null;this.baseTokenPos=1;};Context.prototype.lookAhead=function(n){var line=this.doc.getLine(this.line+n);if(line!=null&&n>this.maxLookAhead){this.maxLookAhead=n;}
return line};Context.prototype.baseToken=function(n){if(!this.baseTokens){return null}
while(this.baseTokens[this.baseTokenPos]<=n)
{this.baseTokenPos+=2;}
var type=this.baseTokens[this.baseTokenPos+1];return{type:type&&type.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-n}};Context.prototype.nextLine=function(){this.line++;if(this.maxLookAhead>0){this.maxLookAhead--;}};Context.fromSaved=function(doc,saved,line){if(saved instanceof SavedContext)
{return new Context(doc,copyState(doc.mode,saved.state),line,saved.lookAhead)}
else
{return new Context(doc,copyState(doc.mode,saved),line)}};Context.prototype.save=function(copy){var state=copy!==false?copyState(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new SavedContext(state,this.maxLookAhead):state};function highlightLine(cm,line,context,forceToEnd){var st=[cm.state.modeGen],lineClasses={};runMode(cm,line.text,cm.doc.mode,context,function(end,style){return st.push(end,style);},lineClasses,forceToEnd);var state=context.state;var loop=function(o){context.baseTokens=st;var overlay=cm.state.overlays[o],i=1,at=0;context.state=true;runMode(cm,line.text,overlay.mode,context,function(end,style){var start=i;while(at<end){var i_end=st[i];if(i_end>end)
{st.splice(i,1,end,st[i+1],i_end);}
i+=2;at=Math.min(end,i_end);}
if(!style){return}
if(overlay.opaque){st.splice(start,i-start,end,"overlay "+style);i=start+2;}else{for(;start<i;start+=2){var cur=st[start+1];st[start+1]=(cur?cur+" ":"")+"overlay "+style;}}},lineClasses);context.state=state;context.baseTokens=null;context.baseTokenPos=1;};for(var o=0;o<cm.state.overlays.length;++o)loop(o);return{styles:st,classes:lineClasses.bgClass||lineClasses.textClass?lineClasses:null}}
function getLineStyles(cm,line,updateFrontier){if(!line.styles||line.styles[0]!=cm.state.modeGen){var context=getContextBefore(cm,lineNo(line));var resetState=line.text.length>cm.options.maxHighlightLength&&copyState(cm.doc.mode,context.state);var result=highlightLine(cm,line,context);if(resetState){context.state=resetState;}
line.stateAfter=context.save(!resetState);line.styles=result.styles;if(result.classes){line.styleClasses=result.classes;}
else if(line.styleClasses){line.styleClasses=null;}
if(updateFrontier===cm.doc.highlightFrontier)
{cm.doc.modeFrontier=Math.max(cm.doc.modeFrontier,++cm.doc.highlightFrontier);}}
return line.styles}
function getContextBefore(cm,n,precise){var doc=cm.doc,display=cm.display;if(!doc.mode.startState){return new Context(doc,true,n)}
var start=findStartLine(cm,n,precise);var saved=start>doc.first&&getLine(doc,start-1).stateAfter;var context=saved?Context.fromSaved(doc,saved,start):new Context(doc,startState(doc.mode),start);doc.iter(start,n,function(line){processLine(cm,line.text,context);var pos=context.line;line.stateAfter=pos==n-1||pos%5==0||pos>=display.viewFrom&&pos<display.viewTo?context.save():null;context.nextLine();});if(precise){doc.modeFrontier=context.line;}
return context}
function processLine(cm,text,context,startAt){var mode=cm.doc.mode;var stream=new StringStream(text,cm.options.tabSize,context);stream.start=stream.pos=startAt||0;if(text==""){callBlankLine(mode,context.state);}
while(!stream.eol()){readToken(mode,stream,context.state);stream.start=stream.pos;}}
function callBlankLine(mode,state){if(mode.blankLine){return mode.blankLine(state)}
if(!mode.innerMode){return}
var inner=innerMode(mode,state);if(inner.mode.blankLine){return inner.mode.blankLine(inner.state)}}
function readToken(mode,stream,state,inner){for(var i=0;i<10;i++){if(inner){inner[0]=innerMode(mode,state).mode;}
var style=mode.token(stream,state);if(stream.pos>stream.start){return style}}
throw new Error("Mode "+mode.name+" failed to advance stream.")}
var Token=function(stream,type,state){this.start=stream.start;this.end=stream.pos;this.string=stream.current();this.type=type||null;this.state=state;};function takeToken(cm,pos,precise,asArray){var doc=cm.doc,mode=doc.mode,style;pos=clipPos(doc,pos);var line=getLine(doc,pos.line),context=getContextBefore(cm,pos.line,precise);var stream=new StringStream(line.text,cm.options.tabSize,context),tokens;if(asArray){tokens=[];}
while((asArray||stream.pos<pos.ch)&&!stream.eol()){stream.start=stream.pos;style=readToken(mode,stream,context.state);if(asArray){tokens.push(new Token(stream,style,copyState(doc.mode,context.state)));}}
return asArray?tokens:new Token(stream,style,context.state)}
function extractLineClasses(type,output){if(type){for(;;){var lineClass=type.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!lineClass){break}
type=type.slice(0,lineClass.index)+type.slice(lineClass.index+lineClass[0].length);var prop=lineClass[1]?"bgClass":"textClass";if(output[prop]==null)
{output[prop]=lineClass[2];}
else if(!(new RegExp("(?:^|\s)"+lineClass[2]+"(?:$|\s)")).test(output[prop]))
{output[prop]+=" "+lineClass[2];}}}
return type}
function runMode(cm,text,mode,context,f,lineClasses,forceToEnd){var flattenSpans=mode.flattenSpans;if(flattenSpans==null){flattenSpans=cm.options.flattenSpans;}
var curStart=0,curStyle=null;var stream=new StringStream(text,cm.options.tabSize,context),style;var inner=cm.options.addModeClass&&[null];if(text==""){extractLineClasses(callBlankLine(mode,context.state),lineClasses);}
while(!stream.eol()){if(stream.pos>cm.options.maxHighlightLength){flattenSpans=false;if(forceToEnd){processLine(cm,text,context,stream.pos);}
stream.pos=text.length;style=null;}else{style=extractLineClasses(readToken(mode,stream,context.state,inner),lineClasses);}
if(inner){var mName=inner[0].name;if(mName){style="m-"+(style?mName+" "+style:mName);}}
if(!flattenSpans||curStyle!=style){while(curStart<stream.start){curStart=Math.min(stream.start,curStart+5000);f(curStart,curStyle);}
curStyle=style;}
stream.start=stream.pos;}
while(curStart<stream.pos){var pos=Math.min(stream.pos,curStart+5000);f(pos,curStyle);curStart=pos;}}
function findStartLine(cm,n,precise){var minindent,minline,doc=cm.doc;var lim=precise?-1:n-(cm.doc.mode.innerMode?1000:100);for(var search=n;search>lim;--search){if(search<=doc.first){return doc.first}
var line=getLine(doc,search-1),after=line.stateAfter;if(after&&(!precise||search+(after instanceof SavedContext?after.lookAhead:0)<=doc.modeFrontier))
{return search}
var indented=countColumn(line.text,null,cm.options.tabSize);if(minline==null||minindent>indented){minline=search-1;minindent=indented;}}
return minline}
function retreatFrontier(doc,n){doc.modeFrontier=Math.min(doc.modeFrontier,n);if(doc.highlightFrontier<n-10){return}
var start=doc.first;for(var line=n-1;line>start;line--){var saved=getLine(doc,line).stateAfter;if(saved&&(!(saved instanceof SavedContext)||line+saved.lookAhead<n)){start=line+1;break}}
doc.highlightFrontier=Math.min(doc.highlightFrontier,start);}
var sawReadOnlySpans=false,sawCollapsedSpans=false;function seeReadOnlySpans(){sawReadOnlySpans=true;}
function seeCollapsedSpans(){sawCollapsedSpans=true;}
function MarkedSpan(marker,from,to){this.marker=marker;this.from=from;this.to=to;}
function getMarkedSpanFor(spans,marker){if(spans){for(var i=0;i<spans.length;++i){var span=spans[i];if(span.marker==marker){return span}}}}
function removeMarkedSpan(spans,span){var r;for(var i=0;i<spans.length;++i)
{if(spans[i]!=span){(r||(r=[])).push(spans[i]);}}
return r}
function addMarkedSpan(line,span){line.markedSpans=line.markedSpans?line.markedSpans.concat([span]):[span];span.marker.attachLine(line);}
function markedSpansBefore(old,startCh,isInsert){var nw;if(old){for(var i=0;i<old.length;++i){var span=old[i],marker=span.marker;var startsBefore=span.from==null||(marker.inclusiveLeft?span.from<=startCh:span.from<startCh);if(startsBefore||span.from==startCh&&marker.type=="bookmark"&&(!isInsert||!span.marker.insertLeft)){var endsAfter=span.to==null||(marker.inclusiveRight?span.to>=startCh:span.to>startCh);(nw||(nw=[])).push(new MarkedSpan(marker,span.from,endsAfter?null:span.to));}}}
return nw}
function markedSpansAfter(old,endCh,isInsert){var nw;if(old){for(var i=0;i<old.length;++i){var span=old[i],marker=span.marker;var endsAfter=span.to==null||(marker.inclusiveRight?span.to>=endCh:span.to>endCh);if(endsAfter||span.from==endCh&&marker.type=="bookmark"&&(!isInsert||span.marker.insertLeft)){var startsBefore=span.from==null||(marker.inclusiveLeft?span.from<=endCh:span.from<endCh);(nw||(nw=[])).push(new MarkedSpan(marker,startsBefore?null:span.from-endCh,span.to==null?null:span.to-endCh));}}}
return nw}
function stretchSpansOverChange(doc,change){if(change.full){return null}
var oldFirst=isLine(doc,change.from.line)&&getLine(doc,change.from.line).markedSpans;var oldLast=isLine(doc,change.to.line)&&getLine(doc,change.to.line).markedSpans;if(!oldFirst&&!oldLast){return null}
var startCh=change.from.ch,endCh=change.to.ch,isInsert=cmp(change.from,change.to)==0;var first=markedSpansBefore(oldFirst,startCh,isInsert);var last=markedSpansAfter(oldLast,endCh,isInsert);var sameLine=change.text.length==1,offset=lst(change.text).length+(sameLine?startCh:0);if(first){for(var i=0;i<first.length;++i){var span=first[i];if(span.to==null){var found=getMarkedSpanFor(last,span.marker);if(!found){span.to=startCh;}
else if(sameLine){span.to=found.to==null?null:found.to+offset;}}}}
if(last){for(var i$1=0;i$1<last.length;++i$1){var span$1=last[i$1];if(span$1.to!=null){span$1.to+=offset;}
if(span$1.from==null){var found$1=getMarkedSpanFor(first,span$1.marker);if(!found$1){span$1.from=offset;if(sameLine){(first||(first=[])).push(span$1);}}}else{span$1.from+=offset;if(sameLine){(first||(first=[])).push(span$1);}}}}
if(first){first=clearEmptySpans(first);}
if(last&&last!=first){last=clearEmptySpans(last);}
var newMarkers=[first];if(!sameLine){var gap=change.text.length-2,gapMarkers;if(gap>0&&first)
{for(var i$2=0;i$2<first.length;++i$2)
{if(first[i$2].to==null)
{(gapMarkers||(gapMarkers=[])).push(new MarkedSpan(first[i$2].marker,null,null));}}}
for(var i$3=0;i$3<gap;++i$3)
{newMarkers.push(gapMarkers);}
newMarkers.push(last);}
return newMarkers}
function clearEmptySpans(spans){for(var i=0;i<spans.length;++i){var span=spans[i];if(span.from!=null&&span.from==span.to&&span.marker.clearWhenEmpty!==false)
{spans.splice(i--,1);}}
if(!spans.length){return null}
return spans}
function removeReadOnlyRanges(doc,from,to){var markers=null;doc.iter(from.line,to.line+1,function(line){if(line.markedSpans){for(var i=0;i<line.markedSpans.length;++i){var mark=line.markedSpans[i].marker;if(mark.readOnly&&(!markers||indexOf(markers,mark)==-1))
{(markers||(markers=[])).push(mark);}}}});if(!markers){return null}
var parts=[{from:from,to:to}];for(var i=0;i<markers.length;++i){var mk=markers[i],m=mk.find(0);for(var j=0;j<parts.length;++j){var p=parts[j];if(cmp(p.to,m.from)<0||cmp(p.from,m.to)>0){continue}
var newParts=[j,1],dfrom=cmp(p.from,m.from),dto=cmp(p.to,m.to);if(dfrom<0||!mk.inclusiveLeft&&!dfrom)
{newParts.push({from:p.from,to:m.from});}
if(dto>0||!mk.inclusiveRight&&!dto)
{newParts.push({from:m.to,to:p.to});}
parts.splice.apply(parts,newParts);j+=newParts.length-3;}}
return parts}
function detachMarkedSpans(line){var spans=line.markedSpans;if(!spans){return}
for(var i=0;i<spans.length;++i)
{spans[i].marker.detachLine(line);}
line.markedSpans=null;}
function attachMarkedSpans(line,spans){if(!spans){return}
for(var i=0;i<spans.length;++i)
{spans[i].marker.attachLine(line);}
line.markedSpans=spans;}
function extraLeft(marker){return marker.inclusiveLeft?-1:0}
function extraRight(marker){return marker.inclusiveRight?1:0}
function compareCollapsedMarkers(a,b){var lenDiff=a.lines.length-b.lines.length;if(lenDiff!=0){return lenDiff}
var aPos=a.find(),bPos=b.find();var fromCmp=cmp(aPos.from,bPos.from)||extraLeft(a)-extraLeft(b);if(fromCmp){return-fromCmp}
var toCmp=cmp(aPos.to,bPos.to)||extraRight(a)-extraRight(b);if(toCmp){return toCmp}
return b.id-a.id}
function collapsedSpanAtSide(line,start){var sps=sawCollapsedSpans&&line.markedSpans,found;if(sps){for(var sp=(void 0),i=0;i<sps.length;++i){sp=sps[i];if(sp.marker.collapsed&&(start?sp.from:sp.to)==null&&(!found||compareCollapsedMarkers(found,sp.marker)<0))
{found=sp.marker;}}}
return found}
function collapsedSpanAtStart(line){return collapsedSpanAtSide(line,true)}
function collapsedSpanAtEnd(line){return collapsedSpanAtSide(line,false)}
function collapsedSpanAround(line,ch){var sps=sawCollapsedSpans&&line.markedSpans,found;if(sps){for(var i=0;i<sps.length;++i){var sp=sps[i];if(sp.marker.collapsed&&(sp.from==null||sp.from<ch)&&(sp.to==null||sp.to>ch)&&(!found||compareCollapsedMarkers(found,sp.marker)<0)){found=sp.marker;}}}
return found}
function conflictingCollapsedRange(doc,lineNo$$1,from,to,marker){var line=getLine(doc,lineNo$$1);var sps=sawCollapsedSpans&&line.markedSpans;if(sps){for(var i=0;i<sps.length;++i){var sp=sps[i];if(!sp.marker.collapsed){continue}
var found=sp.marker.find(0);var fromCmp=cmp(found.from,from)||extraLeft(sp.marker)-extraLeft(marker);var toCmp=cmp(found.to,to)||extraRight(sp.marker)-extraRight(marker);if(fromCmp>=0&&toCmp<=0||fromCmp<=0&&toCmp>=0){continue}
if(fromCmp<=0&&(sp.marker.inclusiveRight&&marker.inclusiveLeft?cmp(found.to,from)>=0:cmp(found.to,from)>0)||fromCmp>=0&&(sp.marker.inclusiveRight&&marker.inclusiveLeft?cmp(found.from,to)<=0:cmp(found.from,to)<0))
{return true}}}}
function visualLine(line){var merged;while(merged=collapsedSpanAtStart(line))
{line=merged.find(-1,true).line;}
return line}
function visualLineEnd(line){var merged;while(merged=collapsedSpanAtEnd(line))
{line=merged.find(1,true).line;}
return line}
function visualLineContinued(line){var merged,lines;while(merged=collapsedSpanAtEnd(line)){line=merged.find(1,true).line;(lines||(lines=[])).push(line);}
return lines}
function visualLineNo(doc,lineN){var line=getLine(doc,lineN),vis=visualLine(line);if(line==vis){return lineN}
return lineNo(vis)}
function visualLineEndNo(doc,lineN){if(lineN>doc.lastLine()){return lineN}
var line=getLine(doc,lineN),merged;if(!lineIsHidden(doc,line)){return lineN}
while(merged=collapsedSpanAtEnd(line))
{line=merged.find(1,true).line;}
return lineNo(line)+1}
function lineIsHidden(doc,line){var sps=sawCollapsedSpans&&line.markedSpans;if(sps){for(var sp=(void 0),i=0;i<sps.length;++i){sp=sps[i];if(!sp.marker.collapsed){continue}
if(sp.from==null){return true}
if(sp.marker.widgetNode){continue}
if(sp.from==0&&sp.marker.inclusiveLeft&&lineIsHiddenInner(doc,line,sp))
{return true}}}}
function lineIsHiddenInner(doc,line,span){if(span.to==null){var end=span.marker.find(1,true);return lineIsHiddenInner(doc,end.line,getMarkedSpanFor(end.line.markedSpans,span.marker))}
if(span.marker.inclusiveRight&&span.to==line.text.length)
{return true}
for(var sp=(void 0),i=0;i<line.markedSpans.length;++i){sp=line.markedSpans[i];if(sp.marker.collapsed&&!sp.marker.widgetNode&&sp.from==span.to&&(sp.to==null||sp.to!=span.from)&&(sp.marker.inclusiveLeft||span.marker.inclusiveRight)&&lineIsHiddenInner(doc,line,sp)){return true}}}
function heightAtLine(lineObj){lineObj=visualLine(lineObj);var h=0,chunk=lineObj.parent;for(var i=0;i<chunk.lines.length;++i){var line=chunk.lines[i];if(line==lineObj){break}
else{h+=line.height;}}
for(var p=chunk.parent;p;chunk=p,p=chunk.parent){for(var i$1=0;i$1<p.children.length;++i$1){var cur=p.children[i$1];if(cur==chunk){break}
else{h+=cur.height;}}}
return h}
function lineLength(line){if(line.height==0){return 0}
var len=line.text.length,merged,cur=line;while(merged=collapsedSpanAtStart(cur)){var found=merged.find(0,true);cur=found.from.line;len+=found.from.ch-found.to.ch;}
cur=line;while(merged=collapsedSpanAtEnd(cur)){var found$1=merged.find(0,true);len-=cur.text.length-found$1.from.ch;cur=found$1.to.line;len+=cur.text.length-found$1.to.ch;}
return len}
function findMaxLine(cm){var d=cm.display,doc=cm.doc;d.maxLine=getLine(doc,doc.first);d.maxLineLength=lineLength(d.maxLine);d.maxLineChanged=true;doc.iter(function(line){var len=lineLength(line);if(len>d.maxLineLength){d.maxLineLength=len;d.maxLine=line;}});}
var Line=function(text,markedSpans,estimateHeight){this.text=text;attachMarkedSpans(this,markedSpans);this.height=estimateHeight?estimateHeight(this):1;};Line.prototype.lineNo=function(){return lineNo(this)};eventMixin(Line);function updateLine(line,text,markedSpans,estimateHeight){line.text=text;if(line.stateAfter){line.stateAfter=null;}
if(line.styles){line.styles=null;}
if(line.order!=null){line.order=null;}
detachMarkedSpans(line);attachMarkedSpans(line,markedSpans);var estHeight=estimateHeight?estimateHeight(line):1;if(estHeight!=line.height){updateLineHeight(line,estHeight);}}
function cleanUpLine(line){line.parent=null;detachMarkedSpans(line);}
var styleToClassCache={},styleToClassCacheWithMode={};function interpretTokenStyle(style,options){if(!style||/^\s*$/.test(style)){return null}
var cache=options.addModeClass?styleToClassCacheWithMode:styleToClassCache;return cache[style]||(cache[style]=style.replace(/\S+/g,"cm-$&"))}
function buildLineContent(cm,lineView){var content=eltP("span",null,null,webkit?"padding-right: .1px":null);var builder={pre:eltP("pre",[content],"CodeMirror-line"),content:content,col:0,pos:0,cm:cm,trailingSpace:false,splitSpaces:cm.getOption("lineWrapping")};lineView.measure={};for(var i=0;i<=(lineView.rest?lineView.rest.length:0);i++){var line=i?lineView.rest[i-1]:lineView.line,order=(void 0);builder.pos=0;builder.addToken=buildToken;if(hasBadBidiRects(cm.display.measure)&&(order=getOrder(line,cm.doc.direction)))
{builder.addToken=buildTokenBadBidi(builder.addToken,order);}
builder.map=[];var allowFrontierUpdate=lineView!=cm.display.externalMeasured&&lineNo(line);insertLineContent(line,builder,getLineStyles(cm,line,allowFrontierUpdate));if(line.styleClasses){if(line.styleClasses.bgClass)
{builder.bgClass=joinClasses(line.styleClasses.bgClass,builder.bgClass||"");}
if(line.styleClasses.textClass)
{builder.textClass=joinClasses(line.styleClasses.textClass,builder.textClass||"");}}
if(builder.map.length==0)
{builder.map.push(0,0,builder.content.appendChild(zeroWidthElement(cm.display.measure)));}
if(i==0){lineView.measure.map=builder.map;lineView.measure.cache={};}else{(lineView.measure.maps||(lineView.measure.maps=[])).push(builder.map);(lineView.measure.caches||(lineView.measure.caches=[])).push({});}}
if(webkit){var last=builder.content.lastChild;if(/\bcm-tab\b/.test(last.className)||(last.querySelector&&last.querySelector(".cm-tab")))
{builder.content.className="cm-tab-wrap-hack";}}
signal(cm,"renderLine",cm,lineView.line,builder.pre);if(builder.pre.className)
{builder.textClass=joinClasses(builder.pre.className,builder.textClass||"");}
return builder}
function defaultSpecialCharPlaceholder(ch){var token=elt("span","\u2022","cm-invalidchar");token.title="\\u"+ch.charCodeAt(0).toString(16);token.setAttribute("aria-label",token.title);return token}
function buildToken(builder,text,style,startStyle,endStyle,css,attributes){if(!text){return}
var displayText=builder.splitSpaces?splitSpaces(text,builder.trailingSpace):text;var special=builder.cm.state.specialChars,mustWrap=false;var content;if(!special.test(text)){builder.col+=text.length;content=document.createTextNode(displayText);builder.map.push(builder.pos,builder.pos+text.length,content);if(ie&&ie_version<9){mustWrap=true;}
builder.pos+=text.length;}else{content=document.createDocumentFragment();var pos=0;while(true){special.lastIndex=pos;var m=special.exec(text);var skipped=m?m.index-pos:text.length-pos;if(skipped){var txt=document.createTextNode(displayText.slice(pos,pos+skipped));if(ie&&ie_version<9){content.appendChild(elt("span",[txt]));}
else{content.appendChild(txt);}
builder.map.push(builder.pos,builder.pos+skipped,txt);builder.col+=skipped;builder.pos+=skipped;}
if(!m){break}
pos+=skipped+1;var txt$1=(void 0);if(m[0]=="\t"){var tabSize=builder.cm.options.tabSize,tabWidth=tabSize-builder.col%tabSize;txt$1=content.appendChild(elt("span",spaceStr(tabWidth),"cm-tab"));txt$1.setAttribute("role","presentation");txt$1.setAttribute("cm-text","\t");builder.col+=tabWidth;}else if(m[0]=="\r"||m[0]=="\n"){txt$1=content.appendChild(elt("span",m[0]=="\r"?"\u240d":"\u2424","cm-invalidchar"));txt$1.setAttribute("cm-text",m[0]);builder.col+=1;}else{txt$1=builder.cm.options.specialCharPlaceholder(m[0]);txt$1.setAttribute("cm-text",m[0]);if(ie&&ie_version<9){content.appendChild(elt("span",[txt$1]));}
else{content.appendChild(txt$1);}
builder.col+=1;}
builder.map.push(builder.pos,builder.pos+1,txt$1);builder.pos++;}}
builder.trailingSpace=displayText.charCodeAt(text.length-1)==32;if(style||startStyle||endStyle||mustWrap||css){var fullStyle=style||"";if(startStyle){fullStyle+=startStyle;}
if(endStyle){fullStyle+=endStyle;}
var token=elt("span",[content],fullStyle,css);if(attributes){for(var attr in attributes){if(attributes.hasOwnProperty(attr)&&attr!="style"&&attr!="class")
{token.setAttribute(attr,attributes[attr]);}}}
return builder.content.appendChild(token)}
builder.content.appendChild(content);}
function splitSpaces(text,trailingBefore){if(text.length>1&&!/  /.test(text)){return text}
var spaceBefore=trailingBefore,result="";for(var i=0;i<text.length;i++){var ch=text.charAt(i);if(ch==" "&&spaceBefore&&(i==text.length-1||text.charCodeAt(i+1)==32))
{ch="\u00a0";}
result+=ch;spaceBefore=ch==" ";}
return result}
function buildTokenBadBidi(inner,order){return function(builder,text,style,startStyle,endStyle,css,attributes){style=style?style+" cm-force-border":"cm-force-border";var start=builder.pos,end=start+text.length;for(;;){var part=(void 0);for(var i=0;i<order.length;i++){part=order[i];if(part.to>start&&part.from<=start){break}}
if(part.to>=end){return inner(builder,text,style,startStyle,endStyle,css,attributes)}
inner(builder,text.slice(0,part.to-start),style,startStyle,null,css,attributes);startStyle=null;text=text.slice(part.to-start);start=part.to;}}}
function buildCollapsedSpan(builder,size,marker,ignoreWidget){var widget=!ignoreWidget&&marker.widgetNode;if(widget){builder.map.push(builder.pos,builder.pos+size,widget);}
if(!ignoreWidget&&builder.cm.display.input.needsContentAttribute){if(!widget)
{widget=builder.content.appendChild(document.createElement("span"));}
widget.setAttribute("cm-marker",marker.id);}
if(widget){builder.cm.display.input.setUneditable(widget);builder.content.appendChild(widget);}
builder.pos+=size;builder.trailingSpace=false;}
function insertLineContent(line,builder,styles){var spans=line.markedSpans,allText=line.text,at=0;if(!spans){for(var i$1=1;i$1<styles.length;i$1+=2)
{builder.addToken(builder,allText.slice(at,at=styles[i$1]),interpretTokenStyle(styles[i$1+1],builder.cm.options));}
return}
var len=allText.length,pos=0,i=1,text="",style,css;var nextChange=0,spanStyle,spanEndStyle,spanStartStyle,collapsed,attributes;for(;;){if(nextChange==pos){spanStyle=spanEndStyle=spanStartStyle=css="";attributes=null;collapsed=null;nextChange=Infinity;var foundBookmarks=[],endStyles=(void 0);for(var j=0;j<spans.length;++j){var sp=spans[j],m=sp.marker;if(m.type=="bookmark"&&sp.from==pos&&m.widgetNode){foundBookmarks.push(m);}else if(sp.from<=pos&&(sp.to==null||sp.to>pos||m.collapsed&&sp.to==pos&&sp.from==pos)){if(sp.to!=null&&sp.to!=pos&&nextChange>sp.to){nextChange=sp.to;spanEndStyle="";}
if(m.className){spanStyle+=" "+m.className;}
if(m.css){css=(css?css+";":"")+m.css;}
if(m.startStyle&&sp.from==pos){spanStartStyle+=" "+m.startStyle;}
if(m.endStyle&&sp.to==nextChange){(endStyles||(endStyles=[])).push(m.endStyle,sp.to);}
if(m.title){(attributes||(attributes={})).title=m.title;}
if(m.attributes){for(var attr in m.attributes)
{(attributes||(attributes={}))[attr]=m.attributes[attr];}}
if(m.collapsed&&(!collapsed||compareCollapsedMarkers(collapsed.marker,m)<0))
{collapsed=sp;}}else if(sp.from>pos&&nextChange>sp.from){nextChange=sp.from;}}
if(endStyles){for(var j$1=0;j$1<endStyles.length;j$1+=2)
{if(endStyles[j$1+1]==nextChange){spanEndStyle+=" "+endStyles[j$1];}}}
if(!collapsed||collapsed.from==pos){for(var j$2=0;j$2<foundBookmarks.length;++j$2)
{buildCollapsedSpan(builder,0,foundBookmarks[j$2]);}}
if(collapsed&&(collapsed.from||0)==pos){buildCollapsedSpan(builder,(collapsed.to==null?len+1:collapsed.to)-pos,collapsed.marker,collapsed.from==null);if(collapsed.to==null){return}
if(collapsed.to==pos){collapsed=false;}}}
if(pos>=len){break}
var upto=Math.min(len,nextChange);while(true){if(text){var end=pos+text.length;if(!collapsed){var tokenText=end>upto?text.slice(0,upto-pos):text;builder.addToken(builder,tokenText,style?style+spanStyle:spanStyle,spanStartStyle,pos+tokenText.length==nextChange?spanEndStyle:"",css,attributes);}
if(end>=upto){text=text.slice(upto-pos);pos=upto;break}
pos=end;spanStartStyle="";}
text=allText.slice(at,at=styles[i++]);style=interpretTokenStyle(styles[i++],builder.cm.options);}}}
function LineView(doc,line,lineN){this.line=line;this.rest=visualLineContinued(line);this.size=this.rest?lineNo(lst(this.rest))-lineN+1:1;this.node=this.text=null;this.hidden=lineIsHidden(doc,line);}
function buildViewArray(cm,from,to){var array=[],nextPos;for(var pos=from;pos<to;pos=nextPos){var view=new LineView(cm.doc,getLine(cm.doc,pos),pos);nextPos=pos+view.size;array.push(view);}
return array}
var operationGroup=null;function pushOperation(op){if(operationGroup){operationGroup.ops.push(op);}else{op.ownsGroup=operationGroup={ops:[op],delayedCallbacks:[]};}}
function fireCallbacksForOps(group){var callbacks=group.delayedCallbacks,i=0;do{for(;i<callbacks.length;i++)
{callbacks[i].call(null);}
for(var j=0;j<group.ops.length;j++){var op=group.ops[j];if(op.cursorActivityHandlers)
{while(op.cursorActivityCalled<op.cursorActivityHandlers.length)
{op.cursorActivityHandlers[op.cursorActivityCalled++].call(null,op.cm);}}}}while(i<callbacks.length)}
function finishOperation(op,endCb){var group=op.ownsGroup;if(!group){return}
try{fireCallbacksForOps(group);}
finally{operationGroup=null;endCb(group);}}
var orphanDelayedCallbacks=null;function signalLater(emitter,type){var arr=getHandlers(emitter,type);if(!arr.length){return}
var args=Array.prototype.slice.call(arguments,2),list;if(operationGroup){list=operationGroup.delayedCallbacks;}else if(orphanDelayedCallbacks){list=orphanDelayedCallbacks;}else{list=orphanDelayedCallbacks=[];setTimeout(fireOrphanDelayed,0);}
var loop=function(i){list.push(function(){return arr[i].apply(null,args);});};for(var i=0;i<arr.length;++i)
loop(i);}
function fireOrphanDelayed(){var delayed=orphanDelayedCallbacks;orphanDelayedCallbacks=null;for(var i=0;i<delayed.length;++i){delayed[i]();}}
function updateLineForChanges(cm,lineView,lineN,dims){for(var j=0;j<lineView.changes.length;j++){var type=lineView.changes[j];if(type=="text"){updateLineText(cm,lineView);}
else if(type=="gutter"){updateLineGutter(cm,lineView,lineN,dims);}
else if(type=="class"){updateLineClasses(cm,lineView);}
else if(type=="widget"){updateLineWidgets(cm,lineView,dims);}}
lineView.changes=null;}
function ensureLineWrapped(lineView){if(lineView.node==lineView.text){lineView.node=elt("div",null,null,"position: relative");if(lineView.text.parentNode)
{lineView.text.parentNode.replaceChild(lineView.node,lineView.text);}
lineView.node.appendChild(lineView.text);if(ie&&ie_version<8){lineView.node.style.zIndex=2;}}
return lineView.node}
function updateLineBackground(cm,lineView){var cls=lineView.bgClass?lineView.bgClass+" "+(lineView.line.bgClass||""):lineView.line.bgClass;if(cls){cls+=" CodeMirror-linebackground";}
if(lineView.background){if(cls){lineView.background.className=cls;}
else{lineView.background.parentNode.removeChild(lineView.background);lineView.background=null;}}else if(cls){var wrap=ensureLineWrapped(lineView);lineView.background=wrap.insertBefore(elt("div",null,cls),wrap.firstChild);cm.display.input.setUneditable(lineView.background);}}
function getLineContent(cm,lineView){var ext=cm.display.externalMeasured;if(ext&&ext.line==lineView.line){cm.display.externalMeasured=null;lineView.measure=ext.measure;return ext.built}
return buildLineContent(cm,lineView)}
function updateLineText(cm,lineView){var cls=lineView.text.className;var built=getLineContent(cm,lineView);if(lineView.text==lineView.node){lineView.node=built.pre;}
lineView.text.parentNode.replaceChild(built.pre,lineView.text);lineView.text=built.pre;if(built.bgClass!=lineView.bgClass||built.textClass!=lineView.textClass){lineView.bgClass=built.bgClass;lineView.textClass=built.textClass;updateLineClasses(cm,lineView);}else if(cls){lineView.text.className=cls;}}
function updateLineClasses(cm,lineView){updateLineBackground(cm,lineView);if(lineView.line.wrapClass)
{ensureLineWrapped(lineView).className=lineView.line.wrapClass;}
else if(lineView.node!=lineView.text)
{lineView.node.className="";}
var textClass=lineView.textClass?lineView.textClass+" "+(lineView.line.textClass||""):lineView.line.textClass;lineView.text.className=textClass||"";}
function updateLineGutter(cm,lineView,lineN,dims){if(lineView.gutter){lineView.node.removeChild(lineView.gutter);lineView.gutter=null;}
if(lineView.gutterBackground){lineView.node.removeChild(lineView.gutterBackground);lineView.gutterBackground=null;}
if(lineView.line.gutterClass){var wrap=ensureLineWrapped(lineView);lineView.gutterBackground=elt("div",null,"CodeMirror-gutter-background "+lineView.line.gutterClass,("left: "+(cm.options.fixedGutter?dims.fixedPos:-dims.gutterTotalWidth)+"px; width: "+(dims.gutterTotalWidth)+"px"));cm.display.input.setUneditable(lineView.gutterBackground);wrap.insertBefore(lineView.gutterBackground,lineView.text);}
var markers=lineView.line.gutterMarkers;if(cm.options.lineNumbers||markers){var wrap$1=ensureLineWrapped(lineView);var gutterWrap=lineView.gutter=elt("div",null,"CodeMirror-gutter-wrapper",("left: "+(cm.options.fixedGutter?dims.fixedPos:-dims.gutterTotalWidth)+"px"));cm.display.input.setUneditable(gutterWrap);wrap$1.insertBefore(gutterWrap,lineView.text);if(lineView.line.gutterClass)
{gutterWrap.className+=" "+lineView.line.gutterClass;}
if(cm.options.lineNumbers&&(!markers||!markers["CodeMirror-linenumbers"]))
{lineView.lineNumber=gutterWrap.appendChild(elt("div",lineNumberFor(cm.options,lineN),"CodeMirror-linenumber CodeMirror-gutter-elt",("left: "+(dims.gutterLeft["CodeMirror-linenumbers"])+"px; width: "+(cm.display.lineNumInnerWidth)+"px")));}
if(markers){for(var k=0;k<cm.display.gutterSpecs.length;++k){var id=cm.display.gutterSpecs[k].className,found=markers.hasOwnProperty(id)&&markers[id];if(found)
{gutterWrap.appendChild(elt("div",[found],"CodeMirror-gutter-elt",("left: "+(dims.gutterLeft[id])+"px; width: "+(dims.gutterWidth[id])+"px")));}}}}}
function updateLineWidgets(cm,lineView,dims){if(lineView.alignable){lineView.alignable=null;}
for(var node=lineView.node.firstChild,next=(void 0);node;node=next){next=node.nextSibling;if(node.className=="CodeMirror-linewidget")
{lineView.node.removeChild(node);}}
insertLineWidgets(cm,lineView,dims);}
function buildLineElement(cm,lineView,lineN,dims){var built=getLineContent(cm,lineView);lineView.text=lineView.node=built.pre;if(built.bgClass){lineView.bgClass=built.bgClass;}
if(built.textClass){lineView.textClass=built.textClass;}
updateLineClasses(cm,lineView);updateLineGutter(cm,lineView,lineN,dims);insertLineWidgets(cm,lineView,dims);return lineView.node}
function insertLineWidgets(cm,lineView,dims){insertLineWidgetsFor(cm,lineView.line,lineView,dims,true);if(lineView.rest){for(var i=0;i<lineView.rest.length;i++)
{insertLineWidgetsFor(cm,lineView.rest[i],lineView,dims,false);}}}
function insertLineWidgetsFor(cm,line,lineView,dims,allowAbove){if(!line.widgets){return}
var wrap=ensureLineWrapped(lineView);for(var i=0,ws=line.widgets;i<ws.length;++i){var widget=ws[i],node=elt("div",[widget.node],"CodeMirror-linewidget");if(!widget.handleMouseEvents){node.setAttribute("cm-ignore-events","true");}
positionLineWidget(widget,node,lineView,dims);cm.display.input.setUneditable(node);if(allowAbove&&widget.above)
{wrap.insertBefore(node,lineView.gutter||lineView.text);}
else
{wrap.appendChild(node);}
signalLater(widget,"redraw");}}
function positionLineWidget(widget,node,lineView,dims){if(widget.noHScroll){(lineView.alignable||(lineView.alignable=[])).push(node);var width=dims.wrapperWidth;node.style.left=dims.fixedPos+"px";if(!widget.coverGutter){width-=dims.gutterTotalWidth;node.style.paddingLeft=dims.gutterTotalWidth+"px";}
node.style.width=width+"px";}
if(widget.coverGutter){node.style.zIndex=5;node.style.position="relative";if(!widget.noHScroll){node.style.marginLeft=-dims.gutterTotalWidth+"px";}}}
function widgetHeight(widget){if(widget.height!=null){return widget.height}
var cm=widget.doc.cm;if(!cm){return 0}
if(!contains(document.body,widget.node)){var parentStyle="position: relative;";if(widget.coverGutter)
{parentStyle+="margin-left: -"+cm.display.gutters.offsetWidth+"px;";}
if(widget.noHScroll)
{parentStyle+="width: "+cm.display.wrapper.clientWidth+"px;";}
removeChildrenAndAdd(cm.display.measure,elt("div",[widget.node],null,parentStyle));}
return widget.height=widget.node.parentNode.offsetHeight}
function eventInWidget(display,e){for(var n=e_target(e);n!=display.wrapper;n=n.parentNode){if(!n||(n.nodeType==1&&n.getAttribute("cm-ignore-events")=="true")||(n.parentNode==display.sizer&&n!=display.mover))
{return true}}}
function paddingTop(display){return display.lineSpace.offsetTop}
function paddingVert(display){return display.mover.offsetHeight-display.lineSpace.offsetHeight}
function paddingH(display){if(display.cachedPaddingH){return display.cachedPaddingH}
var e=removeChildrenAndAdd(display.measure,elt("pre","x"));var style=window.getComputedStyle?window.getComputedStyle(e):e.currentStyle;var data={left:parseInt(style.paddingLeft),right:parseInt(style.paddingRight)};if(!isNaN(data.left)&&!isNaN(data.right)){display.cachedPaddingH=data;}
return data}
function scrollGap(cm){return scrollerGap-cm.display.nativeBarWidth}
function displayWidth(cm){return cm.display.scroller.clientWidth-scrollGap(cm)-cm.display.barWidth}
function displayHeight(cm){return cm.display.scroller.clientHeight-scrollGap(cm)-cm.display.barHeight}
function ensureLineHeights(cm,lineView,rect){var wrapping=cm.options.lineWrapping;var curWidth=wrapping&&displayWidth(cm);if(!lineView.measure.heights||wrapping&&lineView.measure.width!=curWidth){var heights=lineView.measure.heights=[];if(wrapping){lineView.measure.width=curWidth;var rects=lineView.text.firstChild.getClientRects();for(var i=0;i<rects.length-1;i++){var cur=rects[i],next=rects[i+1];if(Math.abs(cur.bottom-next.bottom)>2)
{heights.push((cur.bottom+next.top)/2-rect.top);}}}
heights.push(rect.bottom-rect.top);}}
function mapFromLineView(lineView,line,lineN){if(lineView.line==line)
{return{map:lineView.measure.map,cache:lineView.measure.cache}}
for(var i=0;i<lineView.rest.length;i++)
{if(lineView.rest[i]==line)
{return{map:lineView.measure.maps[i],cache:lineView.measure.caches[i]}}}
for(var i$1=0;i$1<lineView.rest.length;i$1++)
{if(lineNo(lineView.rest[i$1])>lineN)
{return{map:lineView.measure.maps[i$1],cache:lineView.measure.caches[i$1],before:true}}}}
function updateExternalMeasurement(cm,line){line=visualLine(line);var lineN=lineNo(line);var view=cm.display.externalMeasured=new LineView(cm.doc,line,lineN);view.lineN=lineN;var built=view.built=buildLineContent(cm,view);view.text=built.pre;removeChildrenAndAdd(cm.display.lineMeasure,built.pre);return view}
function measureChar(cm,line,ch,bias){return measureCharPrepared(cm,prepareMeasureForLine(cm,line),ch,bias)}
function findViewForLine(cm,lineN){if(lineN>=cm.display.viewFrom&&lineN<cm.display.viewTo)
{return cm.display.view[findViewIndex(cm,lineN)]}
var ext=cm.display.externalMeasured;if(ext&&lineN>=ext.lineN&&lineN<ext.lineN+ext.size)
{return ext}}
function prepareMeasureForLine(cm,line){var lineN=lineNo(line);var view=findViewForLine(cm,lineN);if(view&&!view.text){view=null;}else if(view&&view.changes){updateLineForChanges(cm,view,lineN,getDimensions(cm));cm.curOp.forceUpdate=true;}
if(!view)
{view=updateExternalMeasurement(cm,line);}
var info=mapFromLineView(view,line,lineN);return{line:line,view:view,rect:null,map:info.map,cache:info.cache,before:info.before,hasHeights:false}}
function measureCharPrepared(cm,prepared,ch,bias,varHeight){if(prepared.before){ch=-1;}
var key=ch+(bias||""),found;if(prepared.cache.hasOwnProperty(key)){found=prepared.cache[key];}else{if(!prepared.rect)
{prepared.rect=prepared.view.text.getBoundingClientRect();}
if(!prepared.hasHeights){ensureLineHeights(cm,prepared.view,prepared.rect);prepared.hasHeights=true;}
found=measureCharInner(cm,prepared,ch,bias);if(!found.bogus){prepared.cache[key]=found;}}
return{left:found.left,right:found.right,top:varHeight?found.rtop:found.top,bottom:varHeight?found.rbottom:found.bottom}}
var nullRect={left:0,right:0,top:0,bottom:0};function nodeAndOffsetInLineMap(map$$1,ch,bias){var node,start,end,collapse,mStart,mEnd;for(var i=0;i<map$$1.length;i+=3){mStart=map$$1[i];mEnd=map$$1[i+1];if(ch<mStart){start=0;end=1;collapse="left";}else if(ch<mEnd){start=ch-mStart;end=start+1;}else if(i==map$$1.length-3||ch==mEnd&&map$$1[i+3]>ch){end=mEnd-mStart;start=end-1;if(ch>=mEnd){collapse="right";}}
if(start!=null){node=map$$1[i+2];if(mStart==mEnd&&bias==(node.insertLeft?"left":"right"))
{collapse=bias;}
if(bias=="left"&&start==0)
{while(i&&map$$1[i-2]==map$$1[i-3]&&map$$1[i-1].insertLeft){node=map$$1[(i-=3)+2];collapse="left";}}
if(bias=="right"&&start==mEnd-mStart)
{while(i<map$$1.length-3&&map$$1[i+3]==map$$1[i+4]&&!map$$1[i+5].insertLeft){node=map$$1[(i+=3)+2];collapse="right";}}
break}}
return{node:node,start:start,end:end,collapse:collapse,coverStart:mStart,coverEnd:mEnd}}
function getUsefulRect(rects,bias){var rect=nullRect;if(bias=="left"){for(var i=0;i<rects.length;i++){if((rect=rects[i]).left!=rect.right){break}}}else{for(var i$1=rects.length-1;i$1>=0;i$1--){if((rect=rects[i$1]).left!=rect.right){break}}}
return rect}
function measureCharInner(cm,prepared,ch,bias){var place=nodeAndOffsetInLineMap(prepared.map,ch,bias);var node=place.node,start=place.start,end=place.end,collapse=place.collapse;var rect;if(node.nodeType==3){for(var i$1=0;i$1<4;i$1++){while(start&&isExtendingChar(prepared.line.text.charAt(place.coverStart+start))){--start;}
while(place.coverStart+end<place.coverEnd&&isExtendingChar(prepared.line.text.charAt(place.coverStart+end))){++end;}
if(ie&&ie_version<9&&start==0&&end==place.coverEnd-place.coverStart)
{rect=node.parentNode.getBoundingClientRect();}
else
{rect=getUsefulRect(range(node,start,end).getClientRects(),bias);}
if(rect.left||rect.right||start==0){break}
end=start;start=start-1;collapse="right";}
if(ie&&ie_version<11){rect=maybeUpdateRectForZooming(cm.display.measure,rect);}}else{if(start>0){collapse=bias="right";}
var rects;if(cm.options.lineWrapping&&(rects=node.getClientRects()).length>1)
{rect=rects[bias=="right"?rects.length-1:0];}
else
{rect=node.getBoundingClientRect();}}
if(ie&&ie_version<9&&!start&&(!rect||!rect.left&&!rect.right)){var rSpan=node.parentNode.getClientRects()[0];if(rSpan)
{rect={left:rSpan.left,right:rSpan.left+charWidth(cm.display),top:rSpan.top,bottom:rSpan.bottom};}
else
{rect=nullRect;}}
var rtop=rect.top-prepared.rect.top,rbot=rect.bottom-prepared.rect.top;var mid=(rtop+rbot)/2;var heights=prepared.view.measure.heights;var i=0;for(;i<heights.length-1;i++)
{if(mid<heights[i]){break}}
var top=i?heights[i-1]:0,bot=heights[i];var result={left:(collapse=="right"?rect.right:rect.left)-prepared.rect.left,right:(collapse=="left"?rect.left:rect.right)-prepared.rect.left,top:top,bottom:bot};if(!rect.left&&!rect.right){result.bogus=true;}
if(!cm.options.singleCursorHeightPerLine){result.rtop=rtop;result.rbottom=rbot;}
return result}
function maybeUpdateRectForZooming(measure,rect){if(!window.screen||screen.logicalXDPI==null||screen.logicalXDPI==screen.deviceXDPI||!hasBadZoomedRects(measure))
{return rect}
var scaleX=screen.logicalXDPI/screen.deviceXDPI;var scaleY=screen.logicalYDPI/screen.deviceYDPI;return{left:rect.left*scaleX,right:rect.right*scaleX,top:rect.top*scaleY,bottom:rect.bottom*scaleY}}
function clearLineMeasurementCacheFor(lineView){if(lineView.measure){lineView.measure.cache={};lineView.measure.heights=null;if(lineView.rest){for(var i=0;i<lineView.rest.length;i++)
{lineView.measure.caches[i]={};}}}}
function clearLineMeasurementCache(cm){cm.display.externalMeasure=null;removeChildren(cm.display.lineMeasure);for(var i=0;i<cm.display.view.length;i++)
{clearLineMeasurementCacheFor(cm.display.view[i]);}}
function clearCaches(cm){clearLineMeasurementCache(cm);cm.display.cachedCharWidth=cm.display.cachedTextHeight=cm.display.cachedPaddingH=null;if(!cm.options.lineWrapping){cm.display.maxLineChanged=true;}
cm.display.lineNumChars=null;}
function pageScrollX(){if(chrome&&android){return-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft))}
return window.pageXOffset||(document.documentElement||document.body).scrollLeft}
function pageScrollY(){if(chrome&&android){return-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop))}
return window.pageYOffset||(document.documentElement||document.body).scrollTop}
function widgetTopHeight(lineObj){var height=0;if(lineObj.widgets){for(var i=0;i<lineObj.widgets.length;++i){if(lineObj.widgets[i].above)
{height+=widgetHeight(lineObj.widgets[i]);}}}
return height}
function intoCoordSystem(cm,lineObj,rect,context,includeWidgets){if(!includeWidgets){var height=widgetTopHeight(lineObj);rect.top+=height;rect.bottom+=height;}
if(context=="line"){return rect}
if(!context){context="local";}
var yOff=heightAtLine(lineObj);if(context=="local"){yOff+=paddingTop(cm.display);}
else{yOff-=cm.display.viewOffset;}
if(context=="page"||context=="window"){var lOff=cm.display.lineSpace.getBoundingClientRect();yOff+=lOff.top+(context=="window"?0:pageScrollY());var xOff=lOff.left+(context=="window"?0:pageScrollX());rect.left+=xOff;rect.right+=xOff;}
rect.top+=yOff;rect.bottom+=yOff;return rect}
function fromCoordSystem(cm,coords,context){if(context=="div"){return coords}
var left=coords.left,top=coords.top;if(context=="page"){left-=pageScrollX();top-=pageScrollY();}else if(context=="local"||!context){var localBox=cm.display.sizer.getBoundingClientRect();left+=localBox.left;top+=localBox.top;}
var lineSpaceBox=cm.display.lineSpace.getBoundingClientRect();return{left:left-lineSpaceBox.left,top:top-lineSpaceBox.top}}
function charCoords(cm,pos,context,lineObj,bias){if(!lineObj){lineObj=getLine(cm.doc,pos.line);}
return intoCoordSystem(cm,lineObj,measureChar(cm,lineObj,pos.ch,bias),context)}
function cursorCoords(cm,pos,context,lineObj,preparedMeasure,varHeight){lineObj=lineObj||getLine(cm.doc,pos.line);if(!preparedMeasure){preparedMeasure=prepareMeasureForLine(cm,lineObj);}
function get(ch,right){var m=measureCharPrepared(cm,preparedMeasure,ch,right?"right":"left",varHeight);if(right){m.left=m.right;}else{m.right=m.left;}
return intoCoordSystem(cm,lineObj,m,context)}
var order=getOrder(lineObj,cm.doc.direction),ch=pos.ch,sticky=pos.sticky;if(ch>=lineObj.text.length){ch=lineObj.text.length;sticky="before";}else if(ch<=0){ch=0;sticky="after";}
if(!order){return get(sticky=="before"?ch-1:ch,sticky=="before")}
function getBidi(ch,partPos,invert){var part=order[partPos],right=part.level==1;return get(invert?ch-1:ch,right!=invert)}
var partPos=getBidiPartAt(order,ch,sticky);var other=bidiOther;var val=getBidi(ch,partPos,sticky=="before");if(other!=null){val.other=getBidi(ch,other,sticky!="before");}
return val}
function estimateCoords(cm,pos){var left=0;pos=clipPos(cm.doc,pos);if(!cm.options.lineWrapping){left=charWidth(cm.display)*pos.ch;}
var lineObj=getLine(cm.doc,pos.line);var top=heightAtLine(lineObj)+paddingTop(cm.display);return{left:left,right:left,top:top,bottom:top+lineObj.height}}
function PosWithInfo(line,ch,sticky,outside,xRel){var pos=Pos(line,ch,sticky);pos.xRel=xRel;if(outside){pos.outside=true;}
return pos}
function coordsChar(cm,x,y){var doc=cm.doc;y+=cm.display.viewOffset;if(y<0){return PosWithInfo(doc.first,0,null,true,-1)}
var lineN=lineAtHeight(doc,y),last=doc.first+doc.size-1;if(lineN>last)
{return PosWithInfo(doc.first+doc.size-1,getLine(doc,last).text.length,null,true,1)}
if(x<0){x=0;}
var lineObj=getLine(doc,lineN);for(;;){var found=coordsCharInner(cm,lineObj,lineN,x,y);var collapsed=collapsedSpanAround(lineObj,found.ch+(found.xRel>0?1:0));if(!collapsed){return found}
var rangeEnd=collapsed.find(1);if(rangeEnd.line==lineN){return rangeEnd}
lineObj=getLine(doc,lineN=rangeEnd.line);}}
function wrappedLineExtent(cm,lineObj,preparedMeasure,y){y-=widgetTopHeight(lineObj);var end=lineObj.text.length;var begin=findFirst(function(ch){return measureCharPrepared(cm,preparedMeasure,ch-1).bottom<=y;},end,0);end=findFirst(function(ch){return measureCharPrepared(cm,preparedMeasure,ch).top>y;},begin,end);return{begin:begin,end:end}}
function wrappedLineExtentChar(cm,lineObj,preparedMeasure,target){if(!preparedMeasure){preparedMeasure=prepareMeasureForLine(cm,lineObj);}
var targetTop=intoCoordSystem(cm,lineObj,measureCharPrepared(cm,preparedMeasure,target),"line").top;return wrappedLineExtent(cm,lineObj,preparedMeasure,targetTop)}
function boxIsAfter(box,x,y,left){return box.bottom<=y?false:box.top>y?true:(left?box.left:box.right)>x}
function coordsCharInner(cm,lineObj,lineNo$$1,x,y){y-=heightAtLine(lineObj);var preparedMeasure=prepareMeasureForLine(cm,lineObj);var widgetHeight$$1=widgetTopHeight(lineObj);var begin=0,end=lineObj.text.length,ltr=true;var order=getOrder(lineObj,cm.doc.direction);if(order){var part=(cm.options.lineWrapping?coordsBidiPartWrapped:coordsBidiPart)
(cm,lineObj,lineNo$$1,preparedMeasure,order,x,y);ltr=part.level!=1;begin=ltr?part.from:part.to-1;end=ltr?part.to:part.from-1;}
var chAround=null,boxAround=null;var ch=findFirst(function(ch){var box=measureCharPrepared(cm,preparedMeasure,ch);box.top+=widgetHeight$$1;box.bottom+=widgetHeight$$1;if(!boxIsAfter(box,x,y,false)){return false}
if(box.top<=y&&box.left<=x){chAround=ch;boxAround=box;}
return true},begin,end);var baseX,sticky,outside=false;if(boxAround){var atLeft=x-boxAround.left<boxAround.right-x,atStart=atLeft==ltr;ch=chAround+(atStart?0:1);sticky=atStart?"after":"before";baseX=atLeft?boxAround.left:boxAround.right;}else{if(!ltr&&(ch==end||ch==begin)){ch++;}
sticky=ch==0?"after":ch==lineObj.text.length?"before":(measureCharPrepared(cm,preparedMeasure,ch-(ltr?1:0)).bottom+widgetHeight$$1<=y)==ltr?"after":"before";var coords=cursorCoords(cm,Pos(lineNo$$1,ch,sticky),"line",lineObj,preparedMeasure);baseX=coords.left;outside=y<coords.top||y>=coords.bottom;}
ch=skipExtendingChars(lineObj.text,ch,1);return PosWithInfo(lineNo$$1,ch,sticky,outside,x-baseX)}
function coordsBidiPart(cm,lineObj,lineNo$$1,preparedMeasure,order,x,y){var index=findFirst(function(i){var part=order[i],ltr=part.level!=1;return boxIsAfter(cursorCoords(cm,Pos(lineNo$$1,ltr?part.to:part.from,ltr?"before":"after"),"line",lineObj,preparedMeasure),x,y,true)},0,order.length-1);var part=order[index];if(index>0){var ltr=part.level!=1;var start=cursorCoords(cm,Pos(lineNo$$1,ltr?part.from:part.to,ltr?"after":"before"),"line",lineObj,preparedMeasure);if(boxIsAfter(start,x,y,true)&&start.top>y)
{part=order[index-1];}}
return part}
function coordsBidiPartWrapped(cm,lineObj,_lineNo,preparedMeasure,order,x,y){var ref=wrappedLineExtent(cm,lineObj,preparedMeasure,y);var begin=ref.begin;var end=ref.end;if(/\s/.test(lineObj.text.charAt(end-1))){end--;}
var part=null,closestDist=null;for(var i=0;i<order.length;i++){var p=order[i];if(p.from>=end||p.to<=begin){continue}
var ltr=p.level!=1;var endX=measureCharPrepared(cm,preparedMeasure,ltr?Math.min(end,p.to)-1:Math.max(begin,p.from)).right;var dist=endX<x?x-endX+1e9:endX-x;if(!part||closestDist>dist){part=p;closestDist=dist;}}
if(!part){part=order[order.length-1];}
if(part.from<begin){part={from:begin,to:part.to,level:part.level};}
if(part.to>end){part={from:part.from,to:end,level:part.level};}
return part}
var measureText;function textHeight(display){if(display.cachedTextHeight!=null){return display.cachedTextHeight}
if(measureText==null){measureText=elt("pre");for(var i=0;i<49;++i){measureText.appendChild(document.createTextNode("x"));measureText.appendChild(elt("br"));}
measureText.appendChild(document.createTextNode("x"));}
removeChildrenAndAdd(display.measure,measureText);var height=measureText.offsetHeight/50;if(height>3){display.cachedTextHeight=height;}
removeChildren(display.measure);return height||1}
function charWidth(display){if(display.cachedCharWidth!=null){return display.cachedCharWidth}
var anchor=elt("span","xxxxxxxxxx");var pre=elt("pre",[anchor]);removeChildrenAndAdd(display.measure,pre);var rect=anchor.getBoundingClientRect(),width=(rect.right-rect.left)/10;if(width>2){display.cachedCharWidth=width;}
return width||10}
function getDimensions(cm){var d=cm.display,left={},width={};var gutterLeft=d.gutters.clientLeft;for(var n=d.gutters.firstChild,i=0;n;n=n.nextSibling,++i){var id=cm.display.gutterSpecs[i].className;left[id]=n.offsetLeft+n.clientLeft+gutterLeft;width[id]=n.clientWidth;}
return{fixedPos:compensateForHScroll(d),gutterTotalWidth:d.gutters.offsetWidth,gutterLeft:left,gutterWidth:width,wrapperWidth:d.wrapper.clientWidth}}
function compensateForHScroll(display){return display.scroller.getBoundingClientRect().left-display.sizer.getBoundingClientRect().left}
function estimateHeight(cm){var th=textHeight(cm.display),wrapping=cm.options.lineWrapping;var perLine=wrapping&&Math.max(5,cm.display.scroller.clientWidth/charWidth(cm.display)-3);return function(line){if(lineIsHidden(cm.doc,line)){return 0}
var widgetsHeight=0;if(line.widgets){for(var i=0;i<line.widgets.length;i++){if(line.widgets[i].height){widgetsHeight+=line.widgets[i].height;}}}
if(wrapping)
{return widgetsHeight+(Math.ceil(line.text.length/perLine)||1)*th}
else
{return widgetsHeight+th}}}
function estimateLineHeights(cm){var doc=cm.doc,est=estimateHeight(cm);doc.iter(function(line){var estHeight=est(line);if(estHeight!=line.height){updateLineHeight(line,estHeight);}});}
function posFromMouse(cm,e,liberal,forRect){var display=cm.display;if(!liberal&&e_target(e).getAttribute("cm-not-content")=="true"){return null}
var x,y,space=display.lineSpace.getBoundingClientRect();try{x=e.clientX-space.left;y=e.clientY-space.top;}
catch(e){return null}
var coords=coordsChar(cm,x,y),line;if(forRect&&coords.xRel==1&&(line=getLine(cm.doc,coords.line).text).length==coords.ch){var colDiff=countColumn(line,line.length,cm.options.tabSize)-line.length;coords=Pos(coords.line,Math.max(0,Math.round((x-paddingH(cm.display).left)/charWidth(cm.display))-colDiff));}
return coords}
function findViewIndex(cm,n){if(n>=cm.display.viewTo){return null}
n-=cm.display.viewFrom;if(n<0){return null}
var view=cm.display.view;for(var i=0;i<view.length;i++){n-=view[i].size;if(n<0){return i}}}
function regChange(cm,from,to,lendiff){if(from==null){from=cm.doc.first;}
if(to==null){to=cm.doc.first+cm.doc.size;}
if(!lendiff){lendiff=0;}
var display=cm.display;if(lendiff&&to<display.viewTo&&(display.updateLineNumbers==null||display.updateLineNumbers>from))
{display.updateLineNumbers=from;}
cm.curOp.viewChanged=true;if(from>=display.viewTo){if(sawCollapsedSpans&&visualLineNo(cm.doc,from)<display.viewTo)
{resetView(cm);}}else if(to<=display.viewFrom){if(sawCollapsedSpans&&visualLineEndNo(cm.doc,to+lendiff)>display.viewFrom){resetView(cm);}else{display.viewFrom+=lendiff;display.viewTo+=lendiff;}}else if(from<=display.viewFrom&&to>=display.viewTo){resetView(cm);}else if(from<=display.viewFrom){var cut=viewCuttingPoint(cm,to,to+lendiff,1);if(cut){display.view=display.view.slice(cut.index);display.viewFrom=cut.lineN;display.viewTo+=lendiff;}else{resetView(cm);}}else if(to>=display.viewTo){var cut$1=viewCuttingPoint(cm,from,from,-1);if(cut$1){display.view=display.view.slice(0,cut$1.index);display.viewTo=cut$1.lineN;}else{resetView(cm);}}else{var cutTop=viewCuttingPoint(cm,from,from,-1);var cutBot=viewCuttingPoint(cm,to,to+lendiff,1);if(cutTop&&cutBot){display.view=display.view.slice(0,cutTop.index).concat(buildViewArray(cm,cutTop.lineN,cutBot.lineN)).concat(display.view.slice(cutBot.index));display.viewTo+=lendiff;}else{resetView(cm);}}
var ext=display.externalMeasured;if(ext){if(to<ext.lineN)
{ext.lineN+=lendiff;}
else if(from<ext.lineN+ext.size)
{display.externalMeasured=null;}}}
function regLineChange(cm,line,type){cm.curOp.viewChanged=true;var display=cm.display,ext=cm.display.externalMeasured;if(ext&&line>=ext.lineN&&line<ext.lineN+ext.size)
{display.externalMeasured=null;}
if(line<display.viewFrom||line>=display.viewTo){return}
var lineView=display.view[findViewIndex(cm,line)];if(lineView.node==null){return}
var arr=lineView.changes||(lineView.changes=[]);if(indexOf(arr,type)==-1){arr.push(type);}}
function resetView(cm){cm.display.viewFrom=cm.display.viewTo=cm.doc.first;cm.display.view=[];cm.display.viewOffset=0;}
function viewCuttingPoint(cm,oldN,newN,dir){var index=findViewIndex(cm,oldN),diff,view=cm.display.view;if(!sawCollapsedSpans||newN==cm.doc.first+cm.doc.size)
{return{index:index,lineN:newN}}
var n=cm.display.viewFrom;for(var i=0;i<index;i++)
{n+=view[i].size;}
if(n!=oldN){if(dir>0){if(index==view.length-1){return null}
diff=(n+view[index].size)-oldN;index++;}else{diff=n-oldN;}
oldN+=diff;newN+=diff;}
while(visualLineNo(cm.doc,newN)!=newN){if(index==(dir<0?0:view.length-1)){return null}
newN+=dir*view[index-(dir<0?1:0)].size;index+=dir;}
return{index:index,lineN:newN}}
function adjustView(cm,from,to){var display=cm.display,view=display.view;if(view.length==0||from>=display.viewTo||to<=display.viewFrom){display.view=buildViewArray(cm,from,to);display.viewFrom=from;}else{if(display.viewFrom>from)
{display.view=buildViewArray(cm,from,display.viewFrom).concat(display.view);}
else if(display.viewFrom<from)
{display.view=display.view.slice(findViewIndex(cm,from));}
display.viewFrom=from;if(display.viewTo<to)
{display.view=display.view.concat(buildViewArray(cm,display.viewTo,to));}
else if(display.viewTo>to)
{display.view=display.view.slice(0,findViewIndex(cm,to));}}
display.viewTo=to;}
function countDirtyView(cm){var view=cm.display.view,dirty=0;for(var i=0;i<view.length;i++){var lineView=view[i];if(!lineView.hidden&&(!lineView.node||lineView.changes)){++dirty;}}
return dirty}
function updateSelection(cm){cm.display.input.showSelection(cm.display.input.prepareSelection());}
function prepareSelection(cm,primary){if(primary===void 0)primary=true;var doc=cm.doc,result={};var curFragment=result.cursors=document.createDocumentFragment();var selFragment=result.selection=document.createDocumentFragment();for(var i=0;i<doc.sel.ranges.length;i++){if(!primary&&i==doc.sel.primIndex){continue}
var range$$1=doc.sel.ranges[i];if(range$$1.from().line>=cm.display.viewTo||range$$1.to().line<cm.display.viewFrom){continue}
var collapsed=range$$1.empty();if(collapsed||cm.options.showCursorWhenSelecting)
{drawSelectionCursor(cm,range$$1.head,curFragment);}
if(!collapsed)
{drawSelectionRange(cm,range$$1,selFragment);}}
return result}
function drawSelectionCursor(cm,head,output){var pos=cursorCoords(cm,head,"div",null,null,!cm.options.singleCursorHeightPerLine);var cursor=output.appendChild(elt("div","\u00a0","CodeMirror-cursor"));cursor.style.left=pos.left+"px";cursor.style.top=pos.top+"px";cursor.style.height=Math.max(0,pos.bottom-pos.top)*cm.options.cursorHeight+"px";if(pos.other){var otherCursor=output.appendChild(elt("div","\u00a0","CodeMirror-cursor CodeMirror-secondarycursor"));otherCursor.style.display="";otherCursor.style.left=pos.other.left+"px";otherCursor.style.top=pos.other.top+"px";otherCursor.style.height=(pos.other.bottom-pos.other.top)*.85+"px";}}
function cmpCoords(a,b){return a.top-b.top||a.left-b.left}
function drawSelectionRange(cm,range$$1,output){var display=cm.display,doc=cm.doc;var fragment=document.createDocumentFragment();var padding=paddingH(cm.display),leftSide=padding.left;var rightSide=Math.max(display.sizerWidth,displayWidth(cm)-display.sizer.offsetLeft)-padding.right;var docLTR=doc.direction=="ltr";function add(left,top,width,bottom){if(top<0){top=0;}
top=Math.round(top);bottom=Math.round(bottom);fragment.appendChild(elt("div",null,"CodeMirror-selected",("position: absolute; left: "+left+"px;\n                             top: "+top+"px; width: "+(width==null?rightSide-left:width)+"px;\n                             height: "+(bottom-top)+"px")));}
function drawForLine(line,fromArg,toArg){var lineObj=getLine(doc,line);var lineLen=lineObj.text.length;var start,end;function coords(ch,bias){return charCoords(cm,Pos(line,ch),"div",lineObj,bias)}
function wrapX(pos,dir,side){var extent=wrappedLineExtentChar(cm,lineObj,null,pos);var prop=(dir=="ltr")==(side=="after")?"left":"right";var ch=side=="after"?extent.begin:extent.end-(/\s/.test(lineObj.text.charAt(extent.end-1))?2:1);return coords(ch,prop)[prop]}
var order=getOrder(lineObj,doc.direction);iterateBidiSections(order,fromArg||0,toArg==null?lineLen:toArg,function(from,to,dir,i){var ltr=dir=="ltr";var fromPos=coords(from,ltr?"left":"right");var toPos=coords(to-1,ltr?"right":"left");var openStart=fromArg==null&&from==0,openEnd=toArg==null&&to==lineLen;var first=i==0,last=!order||i==order.length-1;if(toPos.top-fromPos.top<=3){var openLeft=(docLTR?openStart:openEnd)&&first;var openRight=(docLTR?openEnd:openStart)&&last;var left=openLeft?leftSide:(ltr?fromPos:toPos).left;var right=openRight?rightSide:(ltr?toPos:fromPos).right;add(left,fromPos.top,right-left,fromPos.bottom);}else{var topLeft,topRight,botLeft,botRight;if(ltr){topLeft=docLTR&&openStart&&first?leftSide:fromPos.left;topRight=docLTR?rightSide:wrapX(from,dir,"before");botLeft=docLTR?leftSide:wrapX(to,dir,"after");botRight=docLTR&&openEnd&&last?rightSide:toPos.right;}else{topLeft=!docLTR?leftSide:wrapX(from,dir,"before");topRight=!docLTR&&openStart&&first?rightSide:fromPos.right;botLeft=!docLTR&&openEnd&&last?leftSide:toPos.left;botRight=!docLTR?rightSide:wrapX(to,dir,"after");}
add(topLeft,fromPos.top,topRight-topLeft,fromPos.bottom);if(fromPos.bottom<toPos.top){add(leftSide,fromPos.bottom,null,toPos.top);}
add(botLeft,toPos.top,botRight-botLeft,toPos.bottom);}
if(!start||cmpCoords(fromPos,start)<0){start=fromPos;}
if(cmpCoords(toPos,start)<0){start=toPos;}
if(!end||cmpCoords(fromPos,end)<0){end=fromPos;}
if(cmpCoords(toPos,end)<0){end=toPos;}});return{start:start,end:end}}
var sFrom=range$$1.from(),sTo=range$$1.to();if(sFrom.line==sTo.line){drawForLine(sFrom.line,sFrom.ch,sTo.ch);}else{var fromLine=getLine(doc,sFrom.line),toLine=getLine(doc,sTo.line);var singleVLine=visualLine(fromLine)==visualLine(toLine);var leftEnd=drawForLine(sFrom.line,sFrom.ch,singleVLine?fromLine.text.length+1:null).end;var rightStart=drawForLine(sTo.line,singleVLine?0:null,sTo.ch).start;if(singleVLine){if(leftEnd.top<rightStart.top-2){add(leftEnd.right,leftEnd.top,null,leftEnd.bottom);add(leftSide,rightStart.top,rightStart.left,rightStart.bottom);}else{add(leftEnd.right,leftEnd.top,rightStart.left-leftEnd.right,leftEnd.bottom);}}
if(leftEnd.bottom<rightStart.top)
{add(leftSide,leftEnd.bottom,null,rightStart.top);}}
output.appendChild(fragment);}
function restartBlink(cm){if(!cm.state.focused){return}
var display=cm.display;clearInterval(display.blinker);var on=true;display.cursorDiv.style.visibility="";if(cm.options.cursorBlinkRate>0)
{display.blinker=setInterval(function(){return display.cursorDiv.style.visibility=(on=!on)?"":"hidden";},cm.options.cursorBlinkRate);}
else if(cm.options.cursorBlinkRate<0)
{display.cursorDiv.style.visibility="hidden";}}
function ensureFocus(cm){if(!cm.state.focused){cm.display.input.focus();onFocus(cm);}}
function delayBlurEvent(cm){cm.state.delayingBlurEvent=true;setTimeout(function(){if(cm.state.delayingBlurEvent){cm.state.delayingBlurEvent=false;onBlur(cm);}},100);}
function onFocus(cm,e){if(cm.state.delayingBlurEvent){cm.state.delayingBlurEvent=false;}
if(cm.options.readOnly=="nocursor"){return}
if(!cm.state.focused){signal(cm,"focus",cm,e);cm.state.focused=true;addClass(cm.display.wrapper,"CodeMirror-focused");if(!cm.curOp&&cm.display.selForContextMenu!=cm.doc.sel){cm.display.input.reset();if(webkit){setTimeout(function(){return cm.display.input.reset(true);},20);}}
cm.display.input.receivedFocus();}
restartBlink(cm);}
function onBlur(cm,e){if(cm.state.delayingBlurEvent){return}
if(cm.state.focused){signal(cm,"blur",cm,e);cm.state.focused=false;rmClass(cm.display.wrapper,"CodeMirror-focused");}
clearInterval(cm.display.blinker);setTimeout(function(){if(!cm.state.focused){cm.display.shift=false;}},150);}
function updateHeightsInViewport(cm){var display=cm.display;var prevBottom=display.lineDiv.offsetTop;for(var i=0;i<display.view.length;i++){var cur=display.view[i],wrapping=cm.options.lineWrapping;var height=(void 0),width=0;if(cur.hidden){continue}
if(ie&&ie_version<8){var bot=cur.node.offsetTop+cur.node.offsetHeight;height=bot-prevBottom;prevBottom=bot;}else{var box=cur.node.getBoundingClientRect();height=box.bottom-box.top;if(!wrapping&&cur.text.firstChild)
{width=cur.text.firstChild.getBoundingClientRect().right-box.left-1;}}
var diff=cur.line.height-height;if(diff>.005||diff<-.005){updateLineHeight(cur.line,height);updateWidgetHeight(cur.line);if(cur.rest){for(var j=0;j<cur.rest.length;j++)
{updateWidgetHeight(cur.rest[j]);}}}
if(width>cm.display.sizerWidth){var chWidth=Math.ceil(width/charWidth(cm.display));if(chWidth>cm.display.maxLineLength){cm.display.maxLineLength=chWidth;cm.display.maxLine=cur.line;cm.display.maxLineChanged=true;}}}}
function updateWidgetHeight(line){if(line.widgets){for(var i=0;i<line.widgets.length;++i){var w=line.widgets[i],parent=w.node.parentNode;if(parent){w.height=parent.offsetHeight;}}}}
function visibleLines(display,doc,viewport){var top=viewport&&viewport.top!=null?Math.max(0,viewport.top):display.scroller.scrollTop;top=Math.floor(top-paddingTop(display));var bottom=viewport&&viewport.bottom!=null?viewport.bottom:top+display.wrapper.clientHeight;var from=lineAtHeight(doc,top),to=lineAtHeight(doc,bottom);if(viewport&&viewport.ensure){var ensureFrom=viewport.ensure.from.line,ensureTo=viewport.ensure.to.line;if(ensureFrom<from){from=ensureFrom;to=lineAtHeight(doc,heightAtLine(getLine(doc,ensureFrom))+display.wrapper.clientHeight);}else if(Math.min(ensureTo,doc.lastLine())>=to){from=lineAtHeight(doc,heightAtLine(getLine(doc,ensureTo))-display.wrapper.clientHeight);to=ensureTo;}}
return{from:from,to:Math.max(to,from+1)}}
function maybeScrollWindow(cm,rect){if(signalDOMEvent(cm,"scrollCursorIntoView")){return}
var display=cm.display,box=display.sizer.getBoundingClientRect(),doScroll=null;if(rect.top+box.top<0){doScroll=true;}
else if(rect.bottom+box.top>(window.innerHeight||document.documentElement.clientHeight)){doScroll=false;}
if(doScroll!=null&&!phantom){var scrollNode=elt("div","\u200b",null,("position: absolute;\n                         top: "+(rect.top-display.viewOffset-paddingTop(cm.display))+"px;\n                         height: "+(rect.bottom-rect.top+scrollGap(cm)+display.barHeight)+"px;\n                         left: "+(rect.left)+"px; width: "+(Math.max(2,rect.right-rect.left))+"px;"));cm.display.lineSpace.appendChild(scrollNode);scrollNode.scrollIntoView(doScroll);cm.display.lineSpace.removeChild(scrollNode);}}
function scrollPosIntoView(cm,pos,end,margin){if(margin==null){margin=0;}
var rect;if(!cm.options.lineWrapping&&pos==end){pos=pos.ch?Pos(pos.line,pos.sticky=="before"?pos.ch-1:pos.ch,"after"):pos;end=pos.sticky=="before"?Pos(pos.line,pos.ch+1,"before"):pos;}
for(var limit=0;limit<5;limit++){var changed=false;var coords=cursorCoords(cm,pos);var endCoords=!end||end==pos?coords:cursorCoords(cm,end);rect={left:Math.min(coords.left,endCoords.left),top:Math.min(coords.top,endCoords.top)-margin,right:Math.max(coords.left,endCoords.left),bottom:Math.max(coords.bottom,endCoords.bottom)+margin};var scrollPos=calculateScrollPos(cm,rect);var startTop=cm.doc.scrollTop,startLeft=cm.doc.scrollLeft;if(scrollPos.scrollTop!=null){updateScrollTop(cm,scrollPos.scrollTop);if(Math.abs(cm.doc.scrollTop-startTop)>1){changed=true;}}
if(scrollPos.scrollLeft!=null){setScrollLeft(cm,scrollPos.scrollLeft);if(Math.abs(cm.doc.scrollLeft-startLeft)>1){changed=true;}}
if(!changed){break}}
return rect}
function scrollIntoView(cm,rect){var scrollPos=calculateScrollPos(cm,rect);if(scrollPos.scrollTop!=null){updateScrollTop(cm,scrollPos.scrollTop);}
if(scrollPos.scrollLeft!=null){setScrollLeft(cm,scrollPos.scrollLeft);}}
function calculateScrollPos(cm,rect){var display=cm.display,snapMargin=textHeight(cm.display);if(rect.top<0){rect.top=0;}
var screentop=cm.curOp&&cm.curOp.scrollTop!=null?cm.curOp.scrollTop:display.scroller.scrollTop;var screen=displayHeight(cm),result={};if(rect.bottom-rect.top>screen){rect.bottom=rect.top+screen;}
var docBottom=cm.doc.height+paddingVert(display);var atTop=rect.top<snapMargin,atBottom=rect.bottom>docBottom-snapMargin;if(rect.top<screentop){result.scrollTop=atTop?0:rect.top;}else if(rect.bottom>screentop+screen){var newTop=Math.min(rect.top,(atBottom?docBottom:rect.bottom)-screen);if(newTop!=screentop){result.scrollTop=newTop;}}
var screenleft=cm.curOp&&cm.curOp.scrollLeft!=null?cm.curOp.scrollLeft:display.scroller.scrollLeft;var screenw=displayWidth(cm)-(cm.options.fixedGutter?display.gutters.offsetWidth:0);var tooWide=rect.right-rect.left>screenw;if(tooWide){rect.right=rect.left+screenw;}
if(rect.left<10)
{result.scrollLeft=0;}
else if(rect.left<screenleft)
{result.scrollLeft=Math.max(0,rect.left-(tooWide?0:10));}
else if(rect.right>screenw+screenleft-3)
{result.scrollLeft=rect.right+(tooWide?0:10)-screenw;}
return result}
function addToScrollTop(cm,top){if(top==null){return}
resolveScrollToPos(cm);cm.curOp.scrollTop=(cm.curOp.scrollTop==null?cm.doc.scrollTop:cm.curOp.scrollTop)+top;}
function ensureCursorVisible(cm){resolveScrollToPos(cm);var cur=cm.getCursor();cm.curOp.scrollToPos={from:cur,to:cur,margin:cm.options.cursorScrollMargin};}
function scrollToCoords(cm,x,y){if(x!=null||y!=null){resolveScrollToPos(cm);}
if(x!=null){cm.curOp.scrollLeft=x;}
if(y!=null){cm.curOp.scrollTop=y;}}
function scrollToRange(cm,range$$1){resolveScrollToPos(cm);cm.curOp.scrollToPos=range$$1;}
function resolveScrollToPos(cm){var range$$1=cm.curOp.scrollToPos;if(range$$1){cm.curOp.scrollToPos=null;var from=estimateCoords(cm,range$$1.from),to=estimateCoords(cm,range$$1.to);scrollToCoordsRange(cm,from,to,range$$1.margin);}}
function scrollToCoordsRange(cm,from,to,margin){var sPos=calculateScrollPos(cm,{left:Math.min(from.left,to.left),top:Math.min(from.top,to.top)-margin,right:Math.max(from.right,to.right),bottom:Math.max(from.bottom,to.bottom)+margin});scrollToCoords(cm,sPos.scrollLeft,sPos.scrollTop);}
function updateScrollTop(cm,val){if(Math.abs(cm.doc.scrollTop-val)<2){return}
if(!gecko){updateDisplaySimple(cm,{top:val});}
setScrollTop(cm,val,true);if(gecko){updateDisplaySimple(cm);}
startWorker(cm,100);}
function setScrollTop(cm,val,forceScroll){val=Math.min(cm.display.scroller.scrollHeight-cm.display.scroller.clientHeight,val);if(cm.display.scroller.scrollTop==val&&!forceScroll){return}
cm.doc.scrollTop=val;cm.display.scrollbars.setScrollTop(val);if(cm.display.scroller.scrollTop!=val){cm.display.scroller.scrollTop=val;}}
function setScrollLeft(cm,val,isScroller,forceScroll){val=Math.min(val,cm.display.scroller.scrollWidth-cm.display.scroller.clientWidth);if((isScroller?val==cm.doc.scrollLeft:Math.abs(cm.doc.scrollLeft-val)<2)&&!forceScroll){return}
cm.doc.scrollLeft=val;alignHorizontally(cm);if(cm.display.scroller.scrollLeft!=val){cm.display.scroller.scrollLeft=val;}
cm.display.scrollbars.setScrollLeft(val);}
function measureForScrollbars(cm){var d=cm.display,gutterW=d.gutters.offsetWidth;var docH=Math.round(cm.doc.height+paddingVert(cm.display));return{clientHeight:d.scroller.clientHeight,viewHeight:d.wrapper.clientHeight,scrollWidth:d.scroller.scrollWidth,clientWidth:d.scroller.clientWidth,viewWidth:d.wrapper.clientWidth,barLeft:cm.options.fixedGutter?gutterW:0,docHeight:docH,scrollHeight:docH+scrollGap(cm)+d.barHeight,nativeBarWidth:d.nativeBarWidth,gutterWidth:gutterW}}
var NativeScrollbars=function(place,scroll,cm){this.cm=cm;var vert=this.vert=elt("div",[elt("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar");var horiz=this.horiz=elt("div",[elt("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");vert.tabIndex=horiz.tabIndex=-1;place(vert);place(horiz);on(vert,"scroll",function(){if(vert.clientHeight){scroll(vert.scrollTop,"vertical");}});on(horiz,"scroll",function(){if(horiz.clientWidth){scroll(horiz.scrollLeft,"horizontal");}});this.checkedZeroWidth=false;if(ie&&ie_version<8){this.horiz.style.minHeight=this.vert.style.minWidth="18px";}};NativeScrollbars.prototype.update=function(measure){var needsH=measure.scrollWidth>measure.clientWidth+1;var needsV=measure.scrollHeight>measure.clientHeight+1;var sWidth=measure.nativeBarWidth;if(needsV){this.vert.style.display="block";this.vert.style.bottom=needsH?sWidth+"px":"0";var totalHeight=measure.viewHeight-(needsH?sWidth:0);this.vert.firstChild.style.height=Math.max(0,measure.scrollHeight-measure.clientHeight+totalHeight)+"px";}else{this.vert.style.display="";this.vert.firstChild.style.height="0";}
if(needsH){this.horiz.style.display="block";this.horiz.style.right=needsV?sWidth+"px":"0";this.horiz.style.left=measure.barLeft+"px";var totalWidth=measure.viewWidth-measure.barLeft-(needsV?sWidth:0);this.horiz.firstChild.style.width=Math.max(0,measure.scrollWidth-measure.clientWidth+totalWidth)+"px";}else{this.horiz.style.display="";this.horiz.firstChild.style.width="0";}
if(!this.checkedZeroWidth&&measure.clientHeight>0){if(sWidth==0){this.zeroWidthHack();}
this.checkedZeroWidth=true;}
return{right:needsV?sWidth:0,bottom:needsH?sWidth:0}};NativeScrollbars.prototype.setScrollLeft=function(pos){if(this.horiz.scrollLeft!=pos){this.horiz.scrollLeft=pos;}
if(this.disableHoriz){this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz");}};NativeScrollbars.prototype.setScrollTop=function(pos){if(this.vert.scrollTop!=pos){this.vert.scrollTop=pos;}
if(this.disableVert){this.enableZeroWidthBar(this.vert,this.disableVert,"vert");}};NativeScrollbars.prototype.zeroWidthHack=function(){var w=mac&&!mac_geMountainLion?"12px":"18px";this.horiz.style.height=this.vert.style.width=w;this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none";this.disableHoriz=new Delayed;this.disableVert=new Delayed;};NativeScrollbars.prototype.enableZeroWidthBar=function(bar,delay,type){bar.style.pointerEvents="auto";function maybeDisable(){var box=bar.getBoundingClientRect();var elt$$1=type=="vert"?document.elementFromPoint(box.right-1,(box.top+box.bottom)/2):document.elementFromPoint((box.right+box.left)/2,box.bottom-1);if(elt$$1!=bar){bar.style.pointerEvents="none";}
else{delay.set(1000,maybeDisable);}}
delay.set(1000,maybeDisable);};NativeScrollbars.prototype.clear=function(){var parent=this.horiz.parentNode;parent.removeChild(this.horiz);parent.removeChild(this.vert);};var NullScrollbars=function(){};NullScrollbars.prototype.update=function(){return{bottom:0,right:0}};NullScrollbars.prototype.setScrollLeft=function(){};NullScrollbars.prototype.setScrollTop=function(){};NullScrollbars.prototype.clear=function(){};function updateScrollbars(cm,measure){if(!measure){measure=measureForScrollbars(cm);}
var startWidth=cm.display.barWidth,startHeight=cm.display.barHeight;updateScrollbarsInner(cm,measure);for(var i=0;i<4&&startWidth!=cm.display.barWidth||startHeight!=cm.display.barHeight;i++){if(startWidth!=cm.display.barWidth&&cm.options.lineWrapping)
{updateHeightsInViewport(cm);}
updateScrollbarsInner(cm,measureForScrollbars(cm));startWidth=cm.display.barWidth;startHeight=cm.display.barHeight;}}
function updateScrollbarsInner(cm,measure){var d=cm.display;var sizes=d.scrollbars.update(measure);d.sizer.style.paddingRight=(d.barWidth=sizes.right)+"px";d.sizer.style.paddingBottom=(d.barHeight=sizes.bottom)+"px";d.heightForcer.style.borderBottom=sizes.bottom+"px solid transparent";if(sizes.right&&sizes.bottom){d.scrollbarFiller.style.display="block";d.scrollbarFiller.style.height=sizes.bottom+"px";d.scrollbarFiller.style.width=sizes.right+"px";}else{d.scrollbarFiller.style.display="";}
if(sizes.bottom&&cm.options.coverGutterNextToScrollbar&&cm.options.fixedGutter){d.gutterFiller.style.display="block";d.gutterFiller.style.height=sizes.bottom+"px";d.gutterFiller.style.width=measure.gutterWidth+"px";}else{d.gutterFiller.style.display="";}}
var scrollbarModel={"native":NativeScrollbars,"null":NullScrollbars};function initScrollbars(cm){if(cm.display.scrollbars){cm.display.scrollbars.clear();if(cm.display.scrollbars.addClass)
{rmClass(cm.display.wrapper,cm.display.scrollbars.addClass);}}
cm.display.scrollbars=new scrollbarModel[cm.options.scrollbarStyle](function(node){cm.display.wrapper.insertBefore(node,cm.display.scrollbarFiller);on(node,"mousedown",function(){if(cm.state.focused){setTimeout(function(){return cm.display.input.focus();},0);}});node.setAttribute("cm-not-content","true");},function(pos,axis){if(axis=="horizontal"){setScrollLeft(cm,pos);}
else{updateScrollTop(cm,pos);}},cm);if(cm.display.scrollbars.addClass)
{addClass(cm.display.wrapper,cm.display.scrollbars.addClass);}}
var nextOpId=0;function startOperation(cm){cm.curOp={cm:cm,viewChanged:false,startHeight:cm.doc.height,forceUpdate:false,updateInput:0,typing:false,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:false,updateMaxLine:false,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:false,id:++nextOpId};pushOperation(cm.curOp);}
function endOperation(cm){var op=cm.curOp;if(op){finishOperation(op,function(group){for(var i=0;i<group.ops.length;i++)
{group.ops[i].cm.curOp=null;}
endOperations(group);});}}
function endOperations(group){var ops=group.ops;for(var i=0;i<ops.length;i++)
{endOperation_R1(ops[i]);}
for(var i$1=0;i$1<ops.length;i$1++)
{endOperation_W1(ops[i$1]);}
for(var i$2=0;i$2<ops.length;i$2++)
{endOperation_R2(ops[i$2]);}
for(var i$3=0;i$3<ops.length;i$3++)
{endOperation_W2(ops[i$3]);}
for(var i$4=0;i$4<ops.length;i$4++)
{endOperation_finish(ops[i$4]);}}
function endOperation_R1(op){var cm=op.cm,display=cm.display;maybeClipScrollbars(cm);if(op.updateMaxLine){findMaxLine(cm);}
op.mustUpdate=op.viewChanged||op.forceUpdate||op.scrollTop!=null||op.scrollToPos&&(op.scrollToPos.from.line<display.viewFrom||op.scrollToPos.to.line>=display.viewTo)||display.maxLineChanged&&cm.options.lineWrapping;op.update=op.mustUpdate&&new DisplayUpdate(cm,op.mustUpdate&&{top:op.scrollTop,ensure:op.scrollToPos},op.forceUpdate);}
function endOperation_W1(op){op.updatedDisplay=op.mustUpdate&&updateDisplayIfNeeded(op.cm,op.update);}
function endOperation_R2(op){var cm=op.cm,display=cm.display;if(op.updatedDisplay){updateHeightsInViewport(cm);}
op.barMeasure=measureForScrollbars(cm);if(display.maxLineChanged&&!cm.options.lineWrapping){op.adjustWidthTo=measureChar(cm,display.maxLine,display.maxLine.text.length).left+3;cm.display.sizerWidth=op.adjustWidthTo;op.barMeasure.scrollWidth=Math.max(display.scroller.clientWidth,display.sizer.offsetLeft+op.adjustWidthTo+scrollGap(cm)+cm.display.barWidth);op.maxScrollLeft=Math.max(0,display.sizer.offsetLeft+op.adjustWidthTo-displayWidth(cm));}
if(op.updatedDisplay||op.selectionChanged)
{op.preparedSelection=display.input.prepareSelection();}}
function endOperation_W2(op){var cm=op.cm;if(op.adjustWidthTo!=null){cm.display.sizer.style.minWidth=op.adjustWidthTo+"px";if(op.maxScrollLeft<cm.doc.scrollLeft)
{setScrollLeft(cm,Math.min(cm.display.scroller.scrollLeft,op.maxScrollLeft),true);}
cm.display.maxLineChanged=false;}
var takeFocus=op.focus&&op.focus==activeElt();if(op.preparedSelection)
{cm.display.input.showSelection(op.preparedSelection,takeFocus);}
if(op.updatedDisplay||op.startHeight!=cm.doc.height)
{updateScrollbars(cm,op.barMeasure);}
if(op.updatedDisplay)
{setDocumentHeight(cm,op.barMeasure);}
if(op.selectionChanged){restartBlink(cm);}
if(cm.state.focused&&op.updateInput)
{cm.display.input.reset(op.typing);}
if(takeFocus){ensureFocus(op.cm);}}
function endOperation_finish(op){var cm=op.cm,display=cm.display,doc=cm.doc;if(op.updatedDisplay){postUpdateDisplay(cm,op.update);}
if(display.wheelStartX!=null&&(op.scrollTop!=null||op.scrollLeft!=null||op.scrollToPos))
{display.wheelStartX=display.wheelStartY=null;}
if(op.scrollTop!=null){setScrollTop(cm,op.scrollTop,op.forceScroll);}
if(op.scrollLeft!=null){setScrollLeft(cm,op.scrollLeft,true,true);}
if(op.scrollToPos){var rect=scrollPosIntoView(cm,clipPos(doc,op.scrollToPos.from),clipPos(doc,op.scrollToPos.to),op.scrollToPos.margin);maybeScrollWindow(cm,rect);}
var hidden=op.maybeHiddenMarkers,unhidden=op.maybeUnhiddenMarkers;if(hidden){for(var i=0;i<hidden.length;++i)
{if(!hidden[i].lines.length){signal(hidden[i],"hide");}}}
if(unhidden){for(var i$1=0;i$1<unhidden.length;++i$1)
{if(unhidden[i$1].lines.length){signal(unhidden[i$1],"unhide");}}}
if(display.wrapper.offsetHeight)
{doc.scrollTop=cm.display.scroller.scrollTop;}
if(op.changeObjs)
{signal(cm,"changes",cm,op.changeObjs);}
if(op.update)
{op.update.finish();}}
function runInOp(cm,f){if(cm.curOp){return f()}
startOperation(cm);try{return f()}
finally{endOperation(cm);}}
function operation(cm,f){return function(){if(cm.curOp){return f.apply(cm,arguments)}
startOperation(cm);try{return f.apply(cm,arguments)}
finally{endOperation(cm);}}}
function methodOp(f){return function(){if(this.curOp){return f.apply(this,arguments)}
startOperation(this);try{return f.apply(this,arguments)}
finally{endOperation(this);}}}
function docMethodOp(f){return function(){var cm=this.cm;if(!cm||cm.curOp){return f.apply(this,arguments)}
startOperation(cm);try{return f.apply(this,arguments)}
finally{endOperation(cm);}}}
function startWorker(cm,time){if(cm.doc.highlightFrontier<cm.display.viewTo)
{cm.state.highlight.set(time,bind(highlightWorker,cm));}}
function highlightWorker(cm){var doc=cm.doc;if(doc.highlightFrontier>=cm.display.viewTo){return}
var end=+new Date+cm.options.workTime;var context=getContextBefore(cm,doc.highlightFrontier);var changedLines=[];doc.iter(context.line,Math.min(doc.first+doc.size,cm.display.viewTo+500),function(line){if(context.line>=cm.display.viewFrom){var oldStyles=line.styles;var resetState=line.text.length>cm.options.maxHighlightLength?copyState(doc.mode,context.state):null;var highlighted=highlightLine(cm,line,context,true);if(resetState){context.state=resetState;}
line.styles=highlighted.styles;var oldCls=line.styleClasses,newCls=highlighted.classes;if(newCls){line.styleClasses=newCls;}
else if(oldCls){line.styleClasses=null;}
var ischange=!oldStyles||oldStyles.length!=line.styles.length||oldCls!=newCls&&(!oldCls||!newCls||oldCls.bgClass!=newCls.bgClass||oldCls.textClass!=newCls.textClass);for(var i=0;!ischange&&i<oldStyles.length;++i){ischange=oldStyles[i]!=line.styles[i];}
if(ischange){changedLines.push(context.line);}
line.stateAfter=context.save();context.nextLine();}else{if(line.text.length<=cm.options.maxHighlightLength)
{processLine(cm,line.text,context);}
line.stateAfter=context.line%5==0?context.save():null;context.nextLine();}
if(+new Date>end){startWorker(cm,cm.options.workDelay);return true}});doc.highlightFrontier=context.line;doc.modeFrontier=Math.max(doc.modeFrontier,context.line);if(changedLines.length){runInOp(cm,function(){for(var i=0;i<changedLines.length;i++)
{regLineChange(cm,changedLines[i],"text");}});}}
var DisplayUpdate=function(cm,viewport,force){var display=cm.display;this.viewport=viewport;this.visible=visibleLines(display,cm.doc,viewport);this.editorIsHidden=!display.wrapper.offsetWidth;this.wrapperHeight=display.wrapper.clientHeight;this.wrapperWidth=display.wrapper.clientWidth;this.oldDisplayWidth=displayWidth(cm);this.force=force;this.dims=getDimensions(cm);this.events=[];};DisplayUpdate.prototype.signal=function(emitter,type){if(hasHandler(emitter,type))
{this.events.push(arguments);}};DisplayUpdate.prototype.finish=function(){for(var i=0;i<this.events.length;i++)
{signal.apply(null,this.events[i]);}};function maybeClipScrollbars(cm){var display=cm.display;if(!display.scrollbarsClipped&&display.scroller.offsetWidth){display.nativeBarWidth=display.scroller.offsetWidth-display.scroller.clientWidth;display.heightForcer.style.height=scrollGap(cm)+"px";display.sizer.style.marginBottom=-display.nativeBarWidth+"px";display.sizer.style.borderRightWidth=scrollGap(cm)+"px";display.scrollbarsClipped=true;}}
function selectionSnapshot(cm){if(cm.hasFocus()){return null}
var active=activeElt();if(!active||!contains(cm.display.lineDiv,active)){return null}
var result={activeElt:active};if(window.getSelection){var sel=window.getSelection();if(sel.anchorNode&&sel.extend&&contains(cm.display.lineDiv,sel.anchorNode)){result.anchorNode=sel.anchorNode;result.anchorOffset=sel.anchorOffset;result.focusNode=sel.focusNode;result.focusOffset=sel.focusOffset;}}
return result}
function restoreSelection(snapshot){if(!snapshot||!snapshot.activeElt||snapshot.activeElt==activeElt()){return}
snapshot.activeElt.focus();if(snapshot.anchorNode&&contains(document.body,snapshot.anchorNode)&&contains(document.body,snapshot.focusNode)){var sel=window.getSelection(),range$$1=document.createRange();range$$1.setEnd(snapshot.anchorNode,snapshot.anchorOffset);range$$1.collapse(false);sel.removeAllRanges();sel.addRange(range$$1);sel.extend(snapshot.focusNode,snapshot.focusOffset);}}
function updateDisplayIfNeeded(cm,update){var display=cm.display,doc=cm.doc;if(update.editorIsHidden){resetView(cm);return false}
if(!update.force&&update.visible.from>=display.viewFrom&&update.visible.to<=display.viewTo&&(display.updateLineNumbers==null||display.updateLineNumbers>=display.viewTo)&&display.renderedView==display.view&&countDirtyView(cm)==0)
{return false}
if(maybeUpdateLineNumberWidth(cm)){resetView(cm);update.dims=getDimensions(cm);}
var end=doc.first+doc.size;var from=Math.max(update.visible.from-cm.options.viewportMargin,doc.first);var to=Math.min(end,update.visible.to+cm.options.viewportMargin);if(display.viewFrom<from&&from-display.viewFrom<20){from=Math.max(doc.first,display.viewFrom);}
if(display.viewTo>to&&display.viewTo-to<20){to=Math.min(end,display.viewTo);}
if(sawCollapsedSpans){from=visualLineNo(cm.doc,from);to=visualLineEndNo(cm.doc,to);}
var different=from!=display.viewFrom||to!=display.viewTo||display.lastWrapHeight!=update.wrapperHeight||display.lastWrapWidth!=update.wrapperWidth;adjustView(cm,from,to);display.viewOffset=heightAtLine(getLine(cm.doc,display.viewFrom));cm.display.mover.style.top=display.viewOffset+"px";var toUpdate=countDirtyView(cm);if(!different&&toUpdate==0&&!update.force&&display.renderedView==display.view&&(display.updateLineNumbers==null||display.updateLineNumbers>=display.viewTo))
{return false}
var selSnapshot=selectionSnapshot(cm);if(toUpdate>4){display.lineDiv.style.display="none";}
patchDisplay(cm,display.updateLineNumbers,update.dims);if(toUpdate>4){display.lineDiv.style.display="";}
display.renderedView=display.view;restoreSelection(selSnapshot);removeChildren(display.cursorDiv);removeChildren(display.selectionDiv);display.gutters.style.height=display.sizer.style.minHeight=0;if(different){display.lastWrapHeight=update.wrapperHeight;display.lastWrapWidth=update.wrapperWidth;startWorker(cm,400);}
display.updateLineNumbers=null;return true}
function postUpdateDisplay(cm,update){var viewport=update.viewport;for(var first=true;;first=false){if(!first||!cm.options.lineWrapping||update.oldDisplayWidth==displayWidth(cm)){if(viewport&&viewport.top!=null)
{viewport={top:Math.min(cm.doc.height+paddingVert(cm.display)-displayHeight(cm),viewport.top)};}
update.visible=visibleLines(cm.display,cm.doc,viewport);if(update.visible.from>=cm.display.viewFrom&&update.visible.to<=cm.display.viewTo)
{break}}
if(!updateDisplayIfNeeded(cm,update)){break}
updateHeightsInViewport(cm);var barMeasure=measureForScrollbars(cm);updateSelection(cm);updateScrollbars(cm,barMeasure);setDocumentHeight(cm,barMeasure);update.force=false;}
update.signal(cm,"update",cm);if(cm.display.viewFrom!=cm.display.reportedViewFrom||cm.display.viewTo!=cm.display.reportedViewTo){update.signal(cm,"viewportChange",cm,cm.display.viewFrom,cm.display.viewTo);cm.display.reportedViewFrom=cm.display.viewFrom;cm.display.reportedViewTo=cm.display.viewTo;}}
function updateDisplaySimple(cm,viewport){var update=new DisplayUpdate(cm,viewport);if(updateDisplayIfNeeded(cm,update)){updateHeightsInViewport(cm);postUpdateDisplay(cm,update);var barMeasure=measureForScrollbars(cm);updateSelection(cm);updateScrollbars(cm,barMeasure);setDocumentHeight(cm,barMeasure);update.finish();}}
function patchDisplay(cm,updateNumbersFrom,dims){var display=cm.display,lineNumbers=cm.options.lineNumbers;var container=display.lineDiv,cur=container.firstChild;function rm(node){var next=node.nextSibling;if(webkit&&mac&&cm.display.currentWheelTarget==node)
{node.style.display="none";}
else
{node.parentNode.removeChild(node);}
return next}
var view=display.view,lineN=display.viewFrom;for(var i=0;i<view.length;i++){var lineView=view[i];if(lineView.hidden);else if(!lineView.node||lineView.node.parentNode!=container){var node=buildLineElement(cm,lineView,lineN,dims);container.insertBefore(node,cur);}else{while(cur!=lineView.node){cur=rm(cur);}
var updateNumber=lineNumbers&&updateNumbersFrom!=null&&updateNumbersFrom<=lineN&&lineView.lineNumber;if(lineView.changes){if(indexOf(lineView.changes,"gutter")>-1){updateNumber=false;}
updateLineForChanges(cm,lineView,lineN,dims);}
if(updateNumber){removeChildren(lineView.lineNumber);lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options,lineN)));}
cur=lineView.node.nextSibling;}
lineN+=lineView.size;}
while(cur){cur=rm(cur);}}
function updateGutterSpace(display){var width=display.gutters.offsetWidth;display.sizer.style.marginLeft=width+"px";}
function setDocumentHeight(cm,measure){cm.display.sizer.style.minHeight=measure.docHeight+"px";cm.display.heightForcer.style.top=measure.docHeight+"px";cm.display.gutters.style.height=(measure.docHeight+cm.display.barHeight+scrollGap(cm))+"px";}
function alignHorizontally(cm){var display=cm.display,view=display.view;if(!display.alignWidgets&&(!display.gutters.firstChild||!cm.options.fixedGutter)){return}
var comp=compensateForHScroll(display)-display.scroller.scrollLeft+cm.doc.scrollLeft;var gutterW=display.gutters.offsetWidth,left=comp+"px";for(var i=0;i<view.length;i++){if(!view[i].hidden){if(cm.options.fixedGutter){if(view[i].gutter)
{view[i].gutter.style.left=left;}
if(view[i].gutterBackground)
{view[i].gutterBackground.style.left=left;}}
var align=view[i].alignable;if(align){for(var j=0;j<align.length;j++)
{align[j].style.left=left;}}}}
if(cm.options.fixedGutter)
{display.gutters.style.left=(comp+gutterW)+"px";}}
function maybeUpdateLineNumberWidth(cm){if(!cm.options.lineNumbers){return false}
var doc=cm.doc,last=lineNumberFor(cm.options,doc.first+doc.size-1),display=cm.display;if(last.length!=display.lineNumChars){var test=display.measure.appendChild(elt("div",[elt("div",last)],"CodeMirror-linenumber CodeMirror-gutter-elt"));var innerW=test.firstChild.offsetWidth,padding=test.offsetWidth-innerW;display.lineGutter.style.width="";display.lineNumInnerWidth=Math.max(innerW,display.lineGutter.offsetWidth-padding)+1;display.lineNumWidth=display.lineNumInnerWidth+padding;display.lineNumChars=display.lineNumInnerWidth?last.length:-1;display.lineGutter.style.width=display.lineNumWidth+"px";updateGutterSpace(cm.display);return true}
return false}
function getGutters(gutters,lineNumbers){var result=[],sawLineNumbers=false;for(var i=0;i<gutters.length;i++){var name=gutters[i],style=null;if(typeof name!="string"){style=name.style;name=name.className;}
if(name=="CodeMirror-linenumbers"){if(!lineNumbers){continue}
else{sawLineNumbers=true;}}
result.push({className:name,style:style});}
if(lineNumbers&&!sawLineNumbers){result.push({className:"CodeMirror-linenumbers",style:null});}
return result}
function renderGutters(display){var gutters=display.gutters,specs=display.gutterSpecs;removeChildren(gutters);display.lineGutter=null;for(var i=0;i<specs.length;++i){var ref=specs[i];var className=ref.className;var style=ref.style;var gElt=gutters.appendChild(elt("div",null,"CodeMirror-gutter "+className));if(style){gElt.style.cssText=style;}
if(className=="CodeMirror-linenumbers"){display.lineGutter=gElt;gElt.style.width=(display.lineNumWidth||1)+"px";}}
gutters.style.display=specs.length?"":"none";updateGutterSpace(display);}
function updateGutters(cm){renderGutters(cm.display);regChange(cm);alignHorizontally(cm);}
function Display(place,doc,input,options){var d=this;this.input=input;d.scrollbarFiller=elt("div",null,"CodeMirror-scrollbar-filler");d.scrollbarFiller.setAttribute("cm-not-content","true");d.gutterFiller=elt("div",null,"CodeMirror-gutter-filler");d.gutterFiller.setAttribute("cm-not-content","true");d.lineDiv=eltP("div",null,"CodeMirror-code");d.selectionDiv=elt("div",null,null,"position: relative; z-index: 1");d.cursorDiv=elt("div",null,"CodeMirror-cursors");d.measure=elt("div",null,"CodeMirror-measure");d.lineMeasure=elt("div",null,"CodeMirror-measure");d.lineSpace=eltP("div",[d.measure,d.lineMeasure,d.selectionDiv,d.cursorDiv,d.lineDiv],null,"position: relative; outline: none");var lines=eltP("div",[d.lineSpace],"CodeMirror-lines");d.mover=elt("div",[lines],null,"position: relative");d.sizer=elt("div",[d.mover],"CodeMirror-sizer");d.sizerWidth=null;d.heightForcer=elt("div",null,null,"position: absolute; height: "+scrollerGap+"px; width: 1px;");d.gutters=elt("div",null,"CodeMirror-gutters");d.lineGutter=null;d.scroller=elt("div",[d.sizer,d.heightForcer,d.gutters],"CodeMirror-scroll");d.scroller.setAttribute("tabIndex","-1");d.wrapper=elt("div",[d.scrollbarFiller,d.gutterFiller,d.scroller],"CodeMirror");if(ie&&ie_version<8){d.gutters.style.zIndex=-1;d.scroller.style.paddingRight=0;}
if(!webkit&&!(gecko&&mobile)){d.scroller.draggable=true;}
if(place){if(place.appendChild){place.appendChild(d.wrapper);}
else{place(d.wrapper);}}
d.viewFrom=d.viewTo=doc.first;d.reportedViewFrom=d.reportedViewTo=doc.first;d.view=[];d.renderedView=null;d.externalMeasured=null;d.viewOffset=0;d.lastWrapHeight=d.lastWrapWidth=0;d.updateLineNumbers=null;d.nativeBarWidth=d.barHeight=d.barWidth=0;d.scrollbarsClipped=false;d.lineNumWidth=d.lineNumInnerWidth=d.lineNumChars=null;d.alignWidgets=false;d.cachedCharWidth=d.cachedTextHeight=d.cachedPaddingH=null;d.maxLine=null;d.maxLineLength=0;d.maxLineChanged=false;d.wheelDX=d.wheelDY=d.wheelStartX=d.wheelStartY=null;d.shift=false;d.selForContextMenu=null;d.activeTouch=null;d.gutterSpecs=getGutters(options.gutters,options.lineNumbers);renderGutters(d);input.init(d);}
var wheelSamples=0,wheelPixelsPerUnit=null;if(ie){wheelPixelsPerUnit=-.53;}
else if(gecko){wheelPixelsPerUnit=15;}
else if(chrome){wheelPixelsPerUnit=-.7;}
else if(safari){wheelPixelsPerUnit=-1/3;}
function wheelEventDelta(e){var dx=e.wheelDeltaX,dy=e.wheelDeltaY;if(dx==null&&e.detail&&e.axis==e.HORIZONTAL_AXIS){dx=e.detail;}
if(dy==null&&e.detail&&e.axis==e.VERTICAL_AXIS){dy=e.detail;}
else if(dy==null){dy=e.wheelDelta;}
return{x:dx,y:dy}}
function wheelEventPixels(e){var delta=wheelEventDelta(e);delta.x*=wheelPixelsPerUnit;delta.y*=wheelPixelsPerUnit;return delta}
function onScrollWheel(cm,e){var delta=wheelEventDelta(e),dx=delta.x,dy=delta.y;var display=cm.display,scroll=display.scroller;var canScrollX=scroll.scrollWidth>scroll.clientWidth;var canScrollY=scroll.scrollHeight>scroll.clientHeight;if(!(dx&&canScrollX||dy&&canScrollY)){return}
if(dy&&mac&&webkit){outer:for(var cur=e.target,view=display.view;cur!=scroll;cur=cur.parentNode){for(var i=0;i<view.length;i++){if(view[i].node==cur){cm.display.currentWheelTarget=cur;break outer}}}}
if(dx&&!gecko&&!presto&&wheelPixelsPerUnit!=null){if(dy&&canScrollY)
{updateScrollTop(cm,Math.max(0,scroll.scrollTop+dy*wheelPixelsPerUnit));}
setScrollLeft(cm,Math.max(0,scroll.scrollLeft+dx*wheelPixelsPerUnit));if(!dy||(dy&&canScrollY))
{e_preventDefault(e);}
display.wheelStartX=null;return}
if(dy&&wheelPixelsPerUnit!=null){var pixels=dy*wheelPixelsPerUnit;var top=cm.doc.scrollTop,bot=top+display.wrapper.clientHeight;if(pixels<0){top=Math.max(0,top+pixels-50);}
else{bot=Math.min(cm.doc.height,bot+pixels+50);}
updateDisplaySimple(cm,{top:top,bottom:bot});}
if(wheelSamples<20){if(display.wheelStartX==null){display.wheelStartX=scroll.scrollLeft;display.wheelStartY=scroll.scrollTop;display.wheelDX=dx;display.wheelDY=dy;setTimeout(function(){if(display.wheelStartX==null){return}
var movedX=scroll.scrollLeft-display.wheelStartX;var movedY=scroll.scrollTop-display.wheelStartY;var sample=(movedY&&display.wheelDY&&movedY/display.wheelDY)||(movedX&&display.wheelDX&&movedX/display.wheelDX);display.wheelStartX=display.wheelStartY=null;if(!sample){return}
wheelPixelsPerUnit=(wheelPixelsPerUnit*wheelSamples+sample)/(wheelSamples+1);++wheelSamples;},200);}else{display.wheelDX+=dx;display.wheelDY+=dy;}}}
var Selection=function(ranges,primIndex){this.ranges=ranges;this.primIndex=primIndex;};Selection.prototype.primary=function(){return this.ranges[this.primIndex]};Selection.prototype.equals=function(other){if(other==this){return true}
if(other.primIndex!=this.primIndex||other.ranges.length!=this.ranges.length){return false}
for(var i=0;i<this.ranges.length;i++){var here=this.ranges[i],there=other.ranges[i];if(!equalCursorPos(here.anchor,there.anchor)||!equalCursorPos(here.head,there.head)){return false}}
return true};Selection.prototype.deepCopy=function(){var out=[];for(var i=0;i<this.ranges.length;i++)
{out[i]=new Range(copyPos(this.ranges[i].anchor),copyPos(this.ranges[i].head));}
return new Selection(out,this.primIndex)};Selection.prototype.somethingSelected=function(){for(var i=0;i<this.ranges.length;i++)
{if(!this.ranges[i].empty()){return true}}
return false};Selection.prototype.contains=function(pos,end){if(!end){end=pos;}
for(var i=0;i<this.ranges.length;i++){var range=this.ranges[i];if(cmp(end,range.from())>=0&&cmp(pos,range.to())<=0)
{return i}}
return-1};var Range=function(anchor,head){this.anchor=anchor;this.head=head;};Range.prototype.from=function(){return minPos(this.anchor,this.head)};Range.prototype.to=function(){return maxPos(this.anchor,this.head)};Range.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch};function normalizeSelection(cm,ranges,primIndex){var mayTouch=cm&&cm.options.selectionsMayTouch;var prim=ranges[primIndex];ranges.sort(function(a,b){return cmp(a.from(),b.from());});primIndex=indexOf(ranges,prim);for(var i=1;i<ranges.length;i++){var cur=ranges[i],prev=ranges[i-1];var diff=cmp(prev.to(),cur.from());if(mayTouch&&!cur.empty()?diff>0:diff>=0){var from=minPos(prev.from(),cur.from()),to=maxPos(prev.to(),cur.to());var inv=prev.empty()?cur.from()==cur.head:prev.from()==prev.head;if(i<=primIndex){--primIndex;}
ranges.splice(--i,2,new Range(inv?to:from,inv?from:to));}}
return new Selection(ranges,primIndex)}
function simpleSelection(anchor,head){return new Selection([new Range(anchor,head||anchor)],0)}
function changeEnd(change){if(!change.text){return change.to}
return Pos(change.from.line+change.text.length-1,lst(change.text).length+(change.text.length==1?change.from.ch:0))}
function adjustForChange(pos,change){if(cmp(pos,change.from)<0){return pos}
if(cmp(pos,change.to)<=0){return changeEnd(change)}
var line=pos.line+change.text.length-(change.to.line-change.from.line)-1,ch=pos.ch;if(pos.line==change.to.line){ch+=changeEnd(change).ch-change.to.ch;}
return Pos(line,ch)}
function computeSelAfterChange(doc,change){var out=[];for(var i=0;i<doc.sel.ranges.length;i++){var range=doc.sel.ranges[i];out.push(new Range(adjustForChange(range.anchor,change),adjustForChange(range.head,change)));}
return normalizeSelection(doc.cm,out,doc.sel.primIndex)}
function offsetPos(pos,old,nw){if(pos.line==old.line)
{return Pos(nw.line,pos.ch-old.ch+nw.ch)}
else
{return Pos(nw.line+(pos.line-old.line),pos.ch)}}
function computeReplacedSel(doc,changes,hint){var out=[];var oldPrev=Pos(doc.first,0),newPrev=oldPrev;for(var i=0;i<changes.length;i++){var change=changes[i];var from=offsetPos(change.from,oldPrev,newPrev);var to=offsetPos(changeEnd(change),oldPrev,newPrev);oldPrev=change.to;newPrev=to;if(hint=="around"){var range=doc.sel.ranges[i],inv=cmp(range.head,range.anchor)<0;out[i]=new Range(inv?to:from,inv?from:to);}else{out[i]=new Range(from,from);}}
return new Selection(out,doc.sel.primIndex)}
function loadMode(cm){cm.doc.mode=getMode(cm.options,cm.doc.modeOption);resetModeState(cm);}
function resetModeState(cm){cm.doc.iter(function(line){if(line.stateAfter){line.stateAfter=null;}
if(line.styles){line.styles=null;}});cm.doc.modeFrontier=cm.doc.highlightFrontier=cm.doc.first;startWorker(cm,100);cm.state.modeGen++;if(cm.curOp){regChange(cm);}}
function isWholeLineUpdate(doc,change){return change.from.ch==0&&change.to.ch==0&&lst(change.text)==""&&(!doc.cm||doc.cm.options.wholeLineUpdateBefore)}
function updateDoc(doc,change,markedSpans,estimateHeight$$1){function spansFor(n){return markedSpans?markedSpans[n]:null}
function update(line,text,spans){updateLine(line,text,spans,estimateHeight$$1);signalLater(line,"change",line,change);}
function linesFor(start,end){var result=[];for(var i=start;i<end;++i)
{result.push(new Line(text[i],spansFor(i),estimateHeight$$1));}
return result}
var from=change.from,to=change.to,text=change.text;var firstLine=getLine(doc,from.line),lastLine=getLine(doc,to.line);var lastText=lst(text),lastSpans=spansFor(text.length-1),nlines=to.line-from.line;if(change.full){doc.insert(0,linesFor(0,text.length));doc.remove(text.length,doc.size-text.length);}else if(isWholeLineUpdate(doc,change)){var added=linesFor(0,text.length-1);update(lastLine,lastLine.text,lastSpans);if(nlines){doc.remove(from.line,nlines);}
if(added.length){doc.insert(from.line,added);}}else if(firstLine==lastLine){if(text.length==1){update(firstLine,firstLine.text.slice(0,from.ch)+lastText+firstLine.text.slice(to.ch),lastSpans);}else{var added$1=linesFor(1,text.length-1);added$1.push(new Line(lastText+firstLine.text.slice(to.ch),lastSpans,estimateHeight$$1));update(firstLine,firstLine.text.slice(0,from.ch)+text[0],spansFor(0));doc.insert(from.line+1,added$1);}}else if(text.length==1){update(firstLine,firstLine.text.slice(0,from.ch)+text[0]+lastLine.text.slice(to.ch),spansFor(0));doc.remove(from.line+1,nlines);}else{update(firstLine,firstLine.text.slice(0,from.ch)+text[0],spansFor(0));update(lastLine,lastText+lastLine.text.slice(to.ch),lastSpans);var added$2=linesFor(1,text.length-1);if(nlines>1){doc.remove(from.line+1,nlines-1);}
doc.insert(from.line+1,added$2);}
signalLater(doc,"change",doc,change);}
function linkedDocs(doc,f,sharedHistOnly){function propagate(doc,skip,sharedHist){if(doc.linked){for(var i=0;i<doc.linked.length;++i){var rel=doc.linked[i];if(rel.doc==skip){continue}
var shared=sharedHist&&rel.sharedHist;if(sharedHistOnly&&!shared){continue}
f(rel.doc,shared);propagate(rel.doc,doc,shared);}}}
propagate(doc,null,true);}
function attachDoc(cm,doc){if(doc.cm){throw new Error("This document is already in use.")}
cm.doc=doc;doc.cm=cm;estimateLineHeights(cm);loadMode(cm);setDirectionClass(cm);if(!cm.options.lineWrapping){findMaxLine(cm);}
cm.options.mode=doc.modeOption;regChange(cm);}
function setDirectionClass(cm){(cm.doc.direction=="rtl"?addClass:rmClass)(cm.display.lineDiv,"CodeMirror-rtl");}
function directionChanged(cm){runInOp(cm,function(){setDirectionClass(cm);regChange(cm);});}
function History(startGen){this.done=[];this.undone=[];this.undoDepth=Infinity;this.lastModTime=this.lastSelTime=0;this.lastOp=this.lastSelOp=null;this.lastOrigin=this.lastSelOrigin=null;this.generation=this.maxGeneration=startGen||1;}
function historyChangeFromChange(doc,change){var histChange={from:copyPos(change.from),to:changeEnd(change),text:getBetween(doc,change.from,change.to)};attachLocalSpans(doc,histChange,change.from.line,change.to.line+1);linkedDocs(doc,function(doc){return attachLocalSpans(doc,histChange,change.from.line,change.to.line+1);},true);return histChange}
function clearSelectionEvents(array){while(array.length){var last=lst(array);if(last.ranges){array.pop();}
else{break}}}
function lastChangeEvent(hist,force){if(force){clearSelectionEvents(hist.done);return lst(hist.done)}else if(hist.done.length&&!lst(hist.done).ranges){return lst(hist.done)}else if(hist.done.length>1&&!hist.done[hist.done.length-2].ranges){hist.done.pop();return lst(hist.done)}}
function addChangeToHistory(doc,change,selAfter,opId){var hist=doc.history;hist.undone.length=0;var time=+new Date,cur;var last;if((hist.lastOp==opId||hist.lastOrigin==change.origin&&change.origin&&((change.origin.charAt(0)=="+"&&hist.lastModTime>time-(doc.cm?doc.cm.options.historyEventDelay:500))||change.origin.charAt(0)=="*"))&&(cur=lastChangeEvent(hist,hist.lastOp==opId))){last=lst(cur.changes);if(cmp(change.from,change.to)==0&&cmp(change.from,last.to)==0){last.to=changeEnd(change);}else{cur.changes.push(historyChangeFromChange(doc,change));}}else{var before=lst(hist.done);if(!before||!before.ranges)
{pushSelectionToHistory(doc.sel,hist.done);}
cur={changes:[historyChangeFromChange(doc,change)],generation:hist.generation};hist.done.push(cur);while(hist.done.length>hist.undoDepth){hist.done.shift();if(!hist.done[0].ranges){hist.done.shift();}}}
hist.done.push(selAfter);hist.generation=++hist.maxGeneration;hist.lastModTime=hist.lastSelTime=time;hist.lastOp=hist.lastSelOp=opId;hist.lastOrigin=hist.lastSelOrigin=change.origin;if(!last){signal(doc,"historyAdded");}}
function selectionEventCanBeMerged(doc,origin,prev,sel){var ch=origin.charAt(0);return ch=="*"||ch=="+"&&prev.ranges.length==sel.ranges.length&&prev.somethingSelected()==sel.somethingSelected()&&new Date-doc.history.lastSelTime<=(doc.cm?doc.cm.options.historyEventDelay:500)}
function addSelectionToHistory(doc,sel,opId,options){var hist=doc.history,origin=options&&options.origin;if(opId==hist.lastSelOp||(origin&&hist.lastSelOrigin==origin&&(hist.lastModTime==hist.lastSelTime&&hist.lastOrigin==origin||selectionEventCanBeMerged(doc,origin,lst(hist.done),sel))))
{hist.done[hist.done.length-1]=sel;}
else
{pushSelectionToHistory(sel,hist.done);}
hist.lastSelTime=+new Date;hist.lastSelOrigin=origin;hist.lastSelOp=opId;if(options&&options.clearRedo!==false)
{clearSelectionEvents(hist.undone);}}
function pushSelectionToHistory(sel,dest){var top=lst(dest);if(!(top&&top.ranges&&top.equals(sel)))
{dest.push(sel);}}
function attachLocalSpans(doc,change,from,to){var existing=change["spans_"+doc.id],n=0;doc.iter(Math.max(doc.first,from),Math.min(doc.first+doc.size,to),function(line){if(line.markedSpans)
{(existing||(existing=change["spans_"+doc.id]={}))[n]=line.markedSpans;}
++n;});}
function removeClearedSpans(spans){if(!spans){return null}
var out;for(var i=0;i<spans.length;++i){if(spans[i].marker.explicitlyCleared){if(!out){out=spans.slice(0,i);}}
else if(out){out.push(spans[i]);}}
return!out?spans:out.length?out:null}
function getOldSpans(doc,change){var found=change["spans_"+doc.id];if(!found){return null}
var nw=[];for(var i=0;i<change.text.length;++i)
{nw.push(removeClearedSpans(found[i]));}
return nw}
function mergeOldSpans(doc,change){var old=getOldSpans(doc,change);var stretched=stretchSpansOverChange(doc,change);if(!old){return stretched}
if(!stretched){return old}
for(var i=0;i<old.length;++i){var oldCur=old[i],stretchCur=stretched[i];if(oldCur&&stretchCur){spans:for(var j=0;j<stretchCur.length;++j){var span=stretchCur[j];for(var k=0;k<oldCur.length;++k)
{if(oldCur[k].marker==span.marker){continue spans}}
oldCur.push(span);}}else if(stretchCur){old[i]=stretchCur;}}
return old}
function copyHistoryArray(events,newGroup,instantiateSel){var copy=[];for(var i=0;i<events.length;++i){var event=events[i];if(event.ranges){copy.push(instantiateSel?Selection.prototype.deepCopy.call(event):event);continue}
var changes=event.changes,newChanges=[];copy.push({changes:newChanges});for(var j=0;j<changes.length;++j){var change=changes[j],m=(void 0);newChanges.push({from:change.from,to:change.to,text:change.text});if(newGroup){for(var prop in change){if(m=prop.match(/^spans_(\d+)$/)){if(indexOf(newGroup,Number(m[1]))>-1){lst(newChanges)[prop]=change[prop];delete change[prop];}}}}}}
return copy}
function extendRange(range,head,other,extend){if(extend){var anchor=range.anchor;if(other){var posBefore=cmp(head,anchor)<0;if(posBefore!=(cmp(other,anchor)<0)){anchor=head;head=other;}else if(posBefore!=(cmp(head,other)<0)){head=other;}}
return new Range(anchor,head)}else{return new Range(other||head,head)}}
function extendSelection(doc,head,other,options,extend){if(extend==null){extend=doc.cm&&(doc.cm.display.shift||doc.extend);}
setSelection(doc,new Selection([extendRange(doc.sel.primary(),head,other,extend)],0),options);}
function extendSelections(doc,heads,options){var out=[];var extend=doc.cm&&(doc.cm.display.shift||doc.extend);for(var i=0;i<doc.sel.ranges.length;i++)
{out[i]=extendRange(doc.sel.ranges[i],heads[i],null,extend);}
var newSel=normalizeSelection(doc.cm,out,doc.sel.primIndex);setSelection(doc,newSel,options);}
function replaceOneSelection(doc,i,range,options){var ranges=doc.sel.ranges.slice(0);ranges[i]=range;setSelection(doc,normalizeSelection(doc.cm,ranges,doc.sel.primIndex),options);}
function setSimpleSelection(doc,anchor,head,options){setSelection(doc,simpleSelection(anchor,head),options);}
function filterSelectionChange(doc,sel,options){var obj={ranges:sel.ranges,update:function(ranges){this.ranges=[];for(var i=0;i<ranges.length;i++)
{this.ranges[i]=new Range(clipPos(doc,ranges[i].anchor),clipPos(doc,ranges[i].head));}},origin:options&&options.origin};signal(doc,"beforeSelectionChange",doc,obj);if(doc.cm){signal(doc.cm,"beforeSelectionChange",doc.cm,obj);}
if(obj.ranges!=sel.ranges){return normalizeSelection(doc.cm,obj.ranges,obj.ranges.length-1)}
else{return sel}}
function setSelectionReplaceHistory(doc,sel,options){var done=doc.history.done,last=lst(done);if(last&&last.ranges){done[done.length-1]=sel;setSelectionNoUndo(doc,sel,options);}else{setSelection(doc,sel,options);}}
function setSelection(doc,sel,options){setSelectionNoUndo(doc,sel,options);addSelectionToHistory(doc,doc.sel,doc.cm?doc.cm.curOp.id:NaN,options);}
function setSelectionNoUndo(doc,sel,options){if(hasHandler(doc,"beforeSelectionChange")||doc.cm&&hasHandler(doc.cm,"beforeSelectionChange"))
{sel=filterSelectionChange(doc,sel,options);}
var bias=options&&options.bias||(cmp(sel.primary().head,doc.sel.primary().head)<0?-1:1);setSelectionInner(doc,skipAtomicInSelection(doc,sel,bias,true));if(!(options&&options.scroll===false)&&doc.cm)
{ensureCursorVisible(doc.cm);}}
function setSelectionInner(doc,sel){if(sel.equals(doc.sel)){return}
doc.sel=sel;if(doc.cm){doc.cm.curOp.updateInput=1;doc.cm.curOp.selectionChanged=true;signalCursorActivity(doc.cm);}
signalLater(doc,"cursorActivity",doc);}
function reCheckSelection(doc){setSelectionInner(doc,skipAtomicInSelection(doc,doc.sel,null,false));}
function skipAtomicInSelection(doc,sel,bias,mayClear){var out;for(var i=0;i<sel.ranges.length;i++){var range=sel.ranges[i];var old=sel.ranges.length==doc.sel.ranges.length&&doc.sel.ranges[i];var newAnchor=skipAtomic(doc,range.anchor,old&&old.anchor,bias,mayClear);var newHead=skipAtomic(doc,range.head,old&&old.head,bias,mayClear);if(out||newAnchor!=range.anchor||newHead!=range.head){if(!out){out=sel.ranges.slice(0,i);}
out[i]=new Range(newAnchor,newHead);}}
return out?normalizeSelection(doc.cm,out,sel.primIndex):sel}
function skipAtomicInner(doc,pos,oldPos,dir,mayClear){var line=getLine(doc,pos.line);if(line.markedSpans){for(var i=0;i<line.markedSpans.length;++i){var sp=line.markedSpans[i],m=sp.marker;var preventCursorLeft=("selectLeft"in m)?!m.selectLeft:m.inclusiveLeft;var preventCursorRight=("selectRight"in m)?!m.selectRight:m.inclusiveRight;if((sp.from==null||(preventCursorLeft?sp.from<=pos.ch:sp.from<pos.ch))&&(sp.to==null||(preventCursorRight?sp.to>=pos.ch:sp.to>pos.ch))){if(mayClear){signal(m,"beforeCursorEnter");if(m.explicitlyCleared){if(!line.markedSpans){break}
else{--i;continue}}}
if(!m.atomic){continue}
if(oldPos){var near=m.find(dir<0?1:-1),diff=(void 0);if(dir<0?preventCursorRight:preventCursorLeft)
{near=movePos(doc,near,-dir,near&&near.line==pos.line?line:null);}
if(near&&near.line==pos.line&&(diff=cmp(near,oldPos))&&(dir<0?diff<0:diff>0))
{return skipAtomicInner(doc,near,pos,dir,mayClear)}}
var far=m.find(dir<0?-1:1);if(dir<0?preventCursorLeft:preventCursorRight)
{far=movePos(doc,far,dir,far.line==pos.line?line:null);}
return far?skipAtomicInner(doc,far,pos,dir,mayClear):null}}}
return pos}
function skipAtomic(doc,pos,oldPos,bias,mayClear){var dir=bias||1;var found=skipAtomicInner(doc,pos,oldPos,dir,mayClear)||(!mayClear&&skipAtomicInner(doc,pos,oldPos,dir,true))||skipAtomicInner(doc,pos,oldPos,-dir,mayClear)||(!mayClear&&skipAtomicInner(doc,pos,oldPos,-dir,true));if(!found){doc.cantEdit=true;return Pos(doc.first,0)}
return found}
function movePos(doc,pos,dir,line){if(dir<0&&pos.ch==0){if(pos.line>doc.first){return clipPos(doc,Pos(pos.line-1))}
else{return null}}else if(dir>0&&pos.ch==(line||getLine(doc,pos.line)).text.length){if(pos.line<doc.first+doc.size-1){return Pos(pos.line+1,0)}
else{return null}}else{return new Pos(pos.line,pos.ch+dir)}}
function selectAll(cm){cm.setSelection(Pos(cm.firstLine(),0),Pos(cm.lastLine()),sel_dontScroll);}
function filterChange(doc,change,update){var obj={canceled:false,from:change.from,to:change.to,text:change.text,origin:change.origin,cancel:function(){return obj.canceled=true;}};if(update){obj.update=function(from,to,text,origin){if(from){obj.from=clipPos(doc,from);}
if(to){obj.to=clipPos(doc,to);}
if(text){obj.text=text;}
if(origin!==undefined){obj.origin=origin;}};}
signal(doc,"beforeChange",doc,obj);if(doc.cm){signal(doc.cm,"beforeChange",doc.cm,obj);}
if(obj.canceled){if(doc.cm){doc.cm.curOp.updateInput=2;}
return null}
return{from:obj.from,to:obj.to,text:obj.text,origin:obj.origin}}
function makeChange(doc,change,ignoreReadOnly){if(doc.cm){if(!doc.cm.curOp){return operation(doc.cm,makeChange)(doc,change,ignoreReadOnly)}
if(doc.cm.state.suppressEdits){return}}
if(hasHandler(doc,"beforeChange")||doc.cm&&hasHandler(doc.cm,"beforeChange")){change=filterChange(doc,change,true);if(!change){return}}
var split=sawReadOnlySpans&&!ignoreReadOnly&&removeReadOnlyRanges(doc,change.from,change.to);if(split){for(var i=split.length-1;i>=0;--i)
{makeChangeInner(doc,{from:split[i].from,to:split[i].to,text:i?[""]:change.text,origin:change.origin});}}else{makeChangeInner(doc,change);}}
function makeChangeInner(doc,change){if(change.text.length==1&&change.text[0]==""&&cmp(change.from,change.to)==0){return}
var selAfter=computeSelAfterChange(doc,change);addChangeToHistory(doc,change,selAfter,doc.cm?doc.cm.curOp.id:NaN);makeChangeSingleDoc(doc,change,selAfter,stretchSpansOverChange(doc,change));var rebased=[];linkedDocs(doc,function(doc,sharedHist){if(!sharedHist&&indexOf(rebased,doc.history)==-1){rebaseHist(doc.history,change);rebased.push(doc.history);}
makeChangeSingleDoc(doc,change,null,stretchSpansOverChange(doc,change));});}
function makeChangeFromHistory(doc,type,allowSelectionOnly){var suppress=doc.cm&&doc.cm.state.suppressEdits;if(suppress&&!allowSelectionOnly){return}
var hist=doc.history,event,selAfter=doc.sel;var source=type=="undo"?hist.done:hist.undone,dest=type=="undo"?hist.undone:hist.done;var i=0;for(;i<source.length;i++){event=source[i];if(allowSelectionOnly?event.ranges&&!event.equals(doc.sel):!event.ranges)
{break}}
if(i==source.length){return}
hist.lastOrigin=hist.lastSelOrigin=null;for(;;){event=source.pop();if(event.ranges){pushSelectionToHistory(event,dest);if(allowSelectionOnly&&!event.equals(doc.sel)){setSelection(doc,event,{clearRedo:false});return}
selAfter=event;}else if(suppress){source.push(event);return}else{break}}
var antiChanges=[];pushSelectionToHistory(selAfter,dest);dest.push({changes:antiChanges,generation:hist.generation});hist.generation=event.generation||++hist.maxGeneration;var filter=hasHandler(doc,"beforeChange")||doc.cm&&hasHandler(doc.cm,"beforeChange");var loop=function(i){var change=event.changes[i];change.origin=type;if(filter&&!filterChange(doc,change,false)){source.length=0;return{}}
antiChanges.push(historyChangeFromChange(doc,change));var after=i?computeSelAfterChange(doc,change):lst(source);makeChangeSingleDoc(doc,change,after,mergeOldSpans(doc,change));if(!i&&doc.cm){doc.cm.scrollIntoView({from:change.from,to:changeEnd(change)});}
var rebased=[];linkedDocs(doc,function(doc,sharedHist){if(!sharedHist&&indexOf(rebased,doc.history)==-1){rebaseHist(doc.history,change);rebased.push(doc.history);}
makeChangeSingleDoc(doc,change,null,mergeOldSpans(doc,change));});};for(var i$1=event.changes.length-1;i$1>=0;--i$1){var returned=loop(i$1);if(returned)return returned.v;}}
function shiftDoc(doc,distance){if(distance==0){return}
doc.first+=distance;doc.sel=new Selection(map(doc.sel.ranges,function(range){return new Range(Pos(range.anchor.line+distance,range.anchor.ch),Pos(range.head.line+distance,range.head.ch));}),doc.sel.primIndex);if(doc.cm){regChange(doc.cm,doc.first,doc.first-distance,distance);for(var d=doc.cm.display,l=d.viewFrom;l<d.viewTo;l++)
{regLineChange(doc.cm,l,"gutter");}}}
function makeChangeSingleDoc(doc,change,selAfter,spans){if(doc.cm&&!doc.cm.curOp)
{return operation(doc.cm,makeChangeSingleDoc)(doc,change,selAfter,spans)}
if(change.to.line<doc.first){shiftDoc(doc,change.text.length-1-(change.to.line-change.from.line));return}
if(change.from.line>doc.lastLine()){return}
if(change.from.line<doc.first){var shift=change.text.length-1-(doc.first-change.from.line);shiftDoc(doc,shift);change={from:Pos(doc.first,0),to:Pos(change.to.line+shift,change.to.ch),text:[lst(change.text)],origin:change.origin};}
var last=doc.lastLine();if(change.to.line>last){change={from:change.from,to:Pos(last,getLine(doc,last).text.length),text:[change.text[0]],origin:change.origin};}
change.removed=getBetween(doc,change.from,change.to);if(!selAfter){selAfter=computeSelAfterChange(doc,change);}
if(doc.cm){makeChangeSingleDocInEditor(doc.cm,change,spans);}
else{updateDoc(doc,change,spans);}
setSelectionNoUndo(doc,selAfter,sel_dontScroll);}
function makeChangeSingleDocInEditor(cm,change,spans){var doc=cm.doc,display=cm.display,from=change.from,to=change.to;var recomputeMaxLength=false,checkWidthStart=from.line;if(!cm.options.lineWrapping){checkWidthStart=lineNo(visualLine(getLine(doc,from.line)));doc.iter(checkWidthStart,to.line+1,function(line){if(line==display.maxLine){recomputeMaxLength=true;return true}});}
if(doc.sel.contains(change.from,change.to)>-1)
{signalCursorActivity(cm);}
updateDoc(doc,change,spans,estimateHeight(cm));if(!cm.options.lineWrapping){doc.iter(checkWidthStart,from.line+change.text.length,function(line){var len=lineLength(line);if(len>display.maxLineLength){display.maxLine=line;display.maxLineLength=len;display.maxLineChanged=true;recomputeMaxLength=false;}});if(recomputeMaxLength){cm.curOp.updateMaxLine=true;}}
retreatFrontier(doc,from.line);startWorker(cm,400);var lendiff=change.text.length-(to.line-from.line)-1;if(change.full)
{regChange(cm);}
else if(from.line==to.line&&change.text.length==1&&!isWholeLineUpdate(cm.doc,change))
{regLineChange(cm,from.line,"text");}
else
{regChange(cm,from.line,to.line+1,lendiff);}
var changesHandler=hasHandler(cm,"changes"),changeHandler=hasHandler(cm,"change");if(changeHandler||changesHandler){var obj={from:from,to:to,text:change.text,removed:change.removed,origin:change.origin};if(changeHandler){signalLater(cm,"change",cm,obj);}
if(changesHandler){(cm.curOp.changeObjs||(cm.curOp.changeObjs=[])).push(obj);}}
cm.display.selForContextMenu=null;}
function replaceRange(doc,code,from,to,origin){var assign;if(!to){to=from;}
if(cmp(to,from)<0){(assign=[to,from],from=assign[0],to=assign[1]);}
if(typeof code=="string"){code=doc.splitLines(code);}
makeChange(doc,{from:from,to:to,text:code,origin:origin});}
function rebaseHistSelSingle(pos,from,to,diff){if(to<pos.line){pos.line+=diff;}else if(from<pos.line){pos.line=from;pos.ch=0;}}
function rebaseHistArray(array,from,to,diff){for(var i=0;i<array.length;++i){var sub=array[i],ok=true;if(sub.ranges){if(!sub.copied){sub=array[i]=sub.deepCopy();sub.copied=true;}
for(var j=0;j<sub.ranges.length;j++){rebaseHistSelSingle(sub.ranges[j].anchor,from,to,diff);rebaseHistSelSingle(sub.ranges[j].head,from,to,diff);}
continue}
for(var j$1=0;j$1<sub.changes.length;++j$1){var cur=sub.changes[j$1];if(to<cur.from.line){cur.from=Pos(cur.from.line+diff,cur.from.ch);cur.to=Pos(cur.to.line+diff,cur.to.ch);}else if(from<=cur.to.line){ok=false;break}}
if(!ok){array.splice(0,i+1);i=0;}}}
function rebaseHist(hist,change){var from=change.from.line,to=change.to.line,diff=change.text.length-(to-from)-1;rebaseHistArray(hist.done,from,to,diff);rebaseHistArray(hist.undone,from,to,diff);}
function changeLine(doc,handle,changeType,op){var no=handle,line=handle;if(typeof handle=="number"){line=getLine(doc,clipLine(doc,handle));}
else{no=lineNo(handle);}
if(no==null){return null}
if(op(line,no)&&doc.cm){regLineChange(doc.cm,no,changeType);}
return line}
function LeafChunk(lines){this.lines=lines;this.parent=null;var height=0;for(var i=0;i<lines.length;++i){lines[i].parent=this;height+=lines[i].height;}
this.height=height;}
LeafChunk.prototype={chunkSize:function(){return this.lines.length},removeInner:function(at,n){for(var i=at,e=at+n;i<e;++i){var line=this.lines[i];this.height-=line.height;cleanUpLine(line);signalLater(line,"delete");}
this.lines.splice(at,n);},collapse:function(lines){lines.push.apply(lines,this.lines);},insertInner:function(at,lines,height){this.height+=height;this.lines=this.lines.slice(0,at).concat(lines).concat(this.lines.slice(at));for(var i=0;i<lines.length;++i){lines[i].parent=this;}},iterN:function(at,n,op){for(var e=at+n;at<e;++at)
{if(op(this.lines[at])){return true}}}};function BranchChunk(children){this.children=children;var size=0,height=0;for(var i=0;i<children.length;++i){var ch=children[i];size+=ch.chunkSize();height+=ch.height;ch.parent=this;}
this.size=size;this.height=height;this.parent=null;}
BranchChunk.prototype={chunkSize:function(){return this.size},removeInner:function(at,n){this.size-=n;for(var i=0;i<this.children.length;++i){var child=this.children[i],sz=child.chunkSize();if(at<sz){var rm=Math.min(n,sz-at),oldHeight=child.height;child.removeInner(at,rm);this.height-=oldHeight-child.height;if(sz==rm){this.children.splice(i--,1);child.parent=null;}
if((n-=rm)==0){break}
at=0;}else{at-=sz;}}
if(this.size-n<25&&(this.children.length>1||!(this.children[0]instanceof LeafChunk))){var lines=[];this.collapse(lines);this.children=[new LeafChunk(lines)];this.children[0].parent=this;}},collapse:function(lines){for(var i=0;i<this.children.length;++i){this.children[i].collapse(lines);}},insertInner:function(at,lines,height){this.size+=lines.length;this.height+=height;for(var i=0;i<this.children.length;++i){var child=this.children[i],sz=child.chunkSize();if(at<=sz){child.insertInner(at,lines,height);if(child.lines&&child.lines.length>50){var remaining=child.lines.length%25+25;for(var pos=remaining;pos<child.lines.length;){var leaf=new LeafChunk(child.lines.slice(pos,pos+=25));child.height-=leaf.height;this.children.splice(++i,0,leaf);leaf.parent=this;}
child.lines=child.lines.slice(0,remaining);this.maybeSpill();}
break}
at-=sz;}},maybeSpill:function(){if(this.children.length<=10){return}
var me=this;do{var spilled=me.children.splice(me.children.length-5,5);var sibling=new BranchChunk(spilled);if(!me.parent){var copy=new BranchChunk(me.children);copy.parent=me;me.children=[copy,sibling];me=copy;}else{me.size-=sibling.size;me.height-=sibling.height;var myIndex=indexOf(me.parent.children,me);me.parent.children.splice(myIndex+1,0,sibling);}
sibling.parent=me.parent;}while(me.children.length>10)
me.parent.maybeSpill();},iterN:function(at,n,op){for(var i=0;i<this.children.length;++i){var child=this.children[i],sz=child.chunkSize();if(at<sz){var used=Math.min(n,sz-at);if(child.iterN(at,used,op)){return true}
if((n-=used)==0){break}
at=0;}else{at-=sz;}}}};var LineWidget=function(doc,node,options){if(options){for(var opt in options){if(options.hasOwnProperty(opt))
{this[opt]=options[opt];}}}
this.doc=doc;this.node=node;};LineWidget.prototype.clear=function(){var cm=this.doc.cm,ws=this.line.widgets,line=this.line,no=lineNo(line);if(no==null||!ws){return}
for(var i=0;i<ws.length;++i){if(ws[i]==this){ws.splice(i--,1);}}
if(!ws.length){line.widgets=null;}
var height=widgetHeight(this);updateLineHeight(line,Math.max(0,line.height-height));if(cm){runInOp(cm,function(){adjustScrollWhenAboveVisible(cm,line,-height);regLineChange(cm,no,"widget");});signalLater(cm,"lineWidgetCleared",cm,this,no);}};LineWidget.prototype.changed=function(){var this$1=this;var oldH=this.height,cm=this.doc.cm,line=this.line;this.height=null;var diff=widgetHeight(this)-oldH;if(!diff){return}
if(!lineIsHidden(this.doc,line)){updateLineHeight(line,line.height+diff);}
if(cm){runInOp(cm,function(){cm.curOp.forceUpdate=true;adjustScrollWhenAboveVisible(cm,line,diff);signalLater(cm,"lineWidgetChanged",cm,this$1,lineNo(line));});}};eventMixin(LineWidget);function adjustScrollWhenAboveVisible(cm,line,diff){if(heightAtLine(line)<((cm.curOp&&cm.curOp.scrollTop)||cm.doc.scrollTop))
{addToScrollTop(cm,diff);}}
function addLineWidget(doc,handle,node,options){var widget=new LineWidget(doc,node,options);var cm=doc.cm;if(cm&&widget.noHScroll){cm.display.alignWidgets=true;}
changeLine(doc,handle,"widget",function(line){var widgets=line.widgets||(line.widgets=[]);if(widget.insertAt==null){widgets.push(widget);}
else{widgets.splice(Math.min(widgets.length-1,Math.max(0,widget.insertAt)),0,widget);}
widget.line=line;if(cm&&!lineIsHidden(doc,line)){var aboveVisible=heightAtLine(line)<doc.scrollTop;updateLineHeight(line,line.height+widgetHeight(widget));if(aboveVisible){addToScrollTop(cm,widget.height);}
cm.curOp.forceUpdate=true;}
return true});if(cm){signalLater(cm,"lineWidgetAdded",cm,widget,typeof handle=="number"?handle:lineNo(handle));}
return widget}
var nextMarkerId=0;var TextMarker=function(doc,type){this.lines=[];this.type=type;this.doc=doc;this.id=++nextMarkerId;};TextMarker.prototype.clear=function(){if(this.explicitlyCleared){return}
var cm=this.doc.cm,withOp=cm&&!cm.curOp;if(withOp){startOperation(cm);}
if(hasHandler(this,"clear")){var found=this.find();if(found){signalLater(this,"clear",found.from,found.to);}}
var min=null,max=null;for(var i=0;i<this.lines.length;++i){var line=this.lines[i];var span=getMarkedSpanFor(line.markedSpans,this);if(cm&&!this.collapsed){regLineChange(cm,lineNo(line),"text");}
else if(cm){if(span.to!=null){max=lineNo(line);}
if(span.from!=null){min=lineNo(line);}}
line.markedSpans=removeMarkedSpan(line.markedSpans,span);if(span.from==null&&this.collapsed&&!lineIsHidden(this.doc,line)&&cm)
{updateLineHeight(line,textHeight(cm.display));}}
if(cm&&this.collapsed&&!cm.options.lineWrapping){for(var i$1=0;i$1<this.lines.length;++i$1){var visual=visualLine(this.lines[i$1]),len=lineLength(visual);if(len>cm.display.maxLineLength){cm.display.maxLine=visual;cm.display.maxLineLength=len;cm.display.maxLineChanged=true;}}}
if(min!=null&&cm&&this.collapsed){regChange(cm,min,max+1);}
this.lines.length=0;this.explicitlyCleared=true;if(this.atomic&&this.doc.cantEdit){this.doc.cantEdit=false;if(cm){reCheckSelection(cm.doc);}}
if(cm){signalLater(cm,"markerCleared",cm,this,min,max);}
if(withOp){endOperation(cm);}
if(this.parent){this.parent.clear();}};TextMarker.prototype.find=function(side,lineObj){if(side==null&&this.type=="bookmark"){side=1;}
var from,to;for(var i=0;i<this.lines.length;++i){var line=this.lines[i];var span=getMarkedSpanFor(line.markedSpans,this);if(span.from!=null){from=Pos(lineObj?line:lineNo(line),span.from);if(side==-1){return from}}
if(span.to!=null){to=Pos(lineObj?line:lineNo(line),span.to);if(side==1){return to}}}
return from&&{from:from,to:to}};TextMarker.prototype.changed=function(){var this$1=this;var pos=this.find(-1,true),widget=this,cm=this.doc.cm;if(!pos||!cm){return}
runInOp(cm,function(){var line=pos.line,lineN=lineNo(pos.line);var view=findViewForLine(cm,lineN);if(view){clearLineMeasurementCacheFor(view);cm.curOp.selectionChanged=cm.curOp.forceUpdate=true;}
cm.curOp.updateMaxLine=true;if(!lineIsHidden(widget.doc,line)&&widget.height!=null){var oldHeight=widget.height;widget.height=null;var dHeight=widgetHeight(widget)-oldHeight;if(dHeight)
{updateLineHeight(line,line.height+dHeight);}}
signalLater(cm,"markerChanged",cm,this$1);});};TextMarker.prototype.attachLine=function(line){if(!this.lines.length&&this.doc.cm){var op=this.doc.cm.curOp;if(!op.maybeHiddenMarkers||indexOf(op.maybeHiddenMarkers,this)==-1)
{(op.maybeUnhiddenMarkers||(op.maybeUnhiddenMarkers=[])).push(this);}}
this.lines.push(line);};TextMarker.prototype.detachLine=function(line){this.lines.splice(indexOf(this.lines,line),1);if(!this.lines.length&&this.doc.cm){var op=this.doc.cm.curOp;(op.maybeHiddenMarkers||(op.maybeHiddenMarkers=[])).push(this);}};eventMixin(TextMarker);function markText(doc,from,to,options,type){if(options&&options.shared){return markTextShared(doc,from,to,options,type)}
if(doc.cm&&!doc.cm.curOp){return operation(doc.cm,markText)(doc,from,to,options,type)}
var marker=new TextMarker(doc,type),diff=cmp(from,to);if(options){copyObj(options,marker,false);}
if(diff>0||diff==0&&marker.clearWhenEmpty!==false)
{return marker}
if(marker.replacedWith){marker.collapsed=true;marker.widgetNode=eltP("span",[marker.replacedWith],"CodeMirror-widget");if(!options.handleMouseEvents){marker.widgetNode.setAttribute("cm-ignore-events","true");}
if(options.insertLeft){marker.widgetNode.insertLeft=true;}}
if(marker.collapsed){if(conflictingCollapsedRange(doc,from.line,from,to,marker)||from.line!=to.line&&conflictingCollapsedRange(doc,to.line,from,to,marker))
{throw new Error("Inserting collapsed marker partially overlapping an existing one")}
seeCollapsedSpans();}
if(marker.addToHistory)
{addChangeToHistory(doc,{from:from,to:to,origin:"markText"},doc.sel,NaN);}
var curLine=from.line,cm=doc.cm,updateMaxLine;doc.iter(curLine,to.line+1,function(line){if(cm&&marker.collapsed&&!cm.options.lineWrapping&&visualLine(line)==cm.display.maxLine)
{updateMaxLine=true;}
if(marker.collapsed&&curLine!=from.line){updateLineHeight(line,0);}
addMarkedSpan(line,new MarkedSpan(marker,curLine==from.line?from.ch:null,curLine==to.line?to.ch:null));++curLine;});if(marker.collapsed){doc.iter(from.line,to.line+1,function(line){if(lineIsHidden(doc,line)){updateLineHeight(line,0);}});}
if(marker.clearOnEnter){on(marker,"beforeCursorEnter",function(){return marker.clear();});}
if(marker.readOnly){seeReadOnlySpans();if(doc.history.done.length||doc.history.undone.length)
{doc.clearHistory();}}
if(marker.collapsed){marker.id=++nextMarkerId;marker.atomic=true;}
if(cm){if(updateMaxLine){cm.curOp.updateMaxLine=true;}
if(marker.collapsed)
{regChange(cm,from.line,to.line+1);}
else if(marker.className||marker.startStyle||marker.endStyle||marker.css||marker.attributes||marker.title)
{for(var i=from.line;i<=to.line;i++){regLineChange(cm,i,"text");}}
if(marker.atomic){reCheckSelection(cm.doc);}
signalLater(cm,"markerAdded",cm,marker);}
return marker}
var SharedTextMarker=function(markers,primary){this.markers=markers;this.primary=primary;for(var i=0;i<markers.length;++i)
{markers[i].parent=this;}};SharedTextMarker.prototype.clear=function(){if(this.explicitlyCleared){return}
this.explicitlyCleared=true;for(var i=0;i<this.markers.length;++i)
{this.markers[i].clear();}
signalLater(this,"clear");};SharedTextMarker.prototype.find=function(side,lineObj){return this.primary.find(side,lineObj)};eventMixin(SharedTextMarker);function markTextShared(doc,from,to,options,type){options=copyObj(options);options.shared=false;var markers=[markText(doc,from,to,options,type)],primary=markers[0];var widget=options.widgetNode;linkedDocs(doc,function(doc){if(widget){options.widgetNode=widget.cloneNode(true);}
markers.push(markText(doc,clipPos(doc,from),clipPos(doc,to),options,type));for(var i=0;i<doc.linked.length;++i)
{if(doc.linked[i].isParent){return}}
primary=lst(markers);});return new SharedTextMarker(markers,primary)}
function findSharedMarkers(doc){return doc.findMarks(Pos(doc.first,0),doc.clipPos(Pos(doc.lastLine())),function(m){return m.parent;})}
function copySharedMarkers(doc,markers){for(var i=0;i<markers.length;i++){var marker=markers[i],pos=marker.find();var mFrom=doc.clipPos(pos.from),mTo=doc.clipPos(pos.to);if(cmp(mFrom,mTo)){var subMark=markText(doc,mFrom,mTo,marker.primary,marker.primary.type);marker.markers.push(subMark);subMark.parent=marker;}}}
function detachSharedMarkers(markers){var loop=function(i){var marker=markers[i],linked=[marker.primary.doc];linkedDocs(marker.primary.doc,function(d){return linked.push(d);});for(var j=0;j<marker.markers.length;j++){var subMarker=marker.markers[j];if(indexOf(linked,subMarker.doc)==-1){subMarker.parent=null;marker.markers.splice(j--,1);}}};for(var i=0;i<markers.length;i++)loop(i);}
var nextDocId=0;var Doc=function(text,mode,firstLine,lineSep,direction){if(!(this instanceof Doc)){return new Doc(text,mode,firstLine,lineSep,direction)}
if(firstLine==null){firstLine=0;}
BranchChunk.call(this,[new LeafChunk([new Line("",null)])]);this.first=firstLine;this.scrollTop=this.scrollLeft=0;this.cantEdit=false;this.cleanGeneration=1;this.modeFrontier=this.highlightFrontier=firstLine;var start=Pos(firstLine,0);this.sel=simpleSelection(start);this.history=new History(null);this.id=++nextDocId;this.modeOption=mode;this.lineSep=lineSep;this.direction=(direction=="rtl")?"rtl":"ltr";this.extend=false;if(typeof text=="string"){text=this.splitLines(text);}
updateDoc(this,{from:start,to:start,text:text});setSelection(this,simpleSelection(start),sel_dontScroll);};Doc.prototype=createObj(BranchChunk.prototype,{constructor:Doc,iter:function(from,to,op){if(op){this.iterN(from-this.first,to-from,op);}
else{this.iterN(this.first,this.first+this.size,from);}},insert:function(at,lines){var height=0;for(var i=0;i<lines.length;++i){height+=lines[i].height;}
this.insertInner(at-this.first,lines,height);},remove:function(at,n){this.removeInner(at-this.first,n);},getValue:function(lineSep){var lines=getLines(this,this.first,this.first+this.size);if(lineSep===false){return lines}
return lines.join(lineSep||this.lineSeparator())},setValue:docMethodOp(function(code){var top=Pos(this.first,0),last=this.first+this.size-1;makeChange(this,{from:top,to:Pos(last,getLine(this,last).text.length),text:this.splitLines(code),origin:"setValue",full:true},true);if(this.cm){scrollToCoords(this.cm,0,0);}
setSelection(this,simpleSelection(top),sel_dontScroll);}),replaceRange:function(code,from,to,origin){from=clipPos(this,from);to=to?clipPos(this,to):from;replaceRange(this,code,from,to,origin);},getRange:function(from,to,lineSep){var lines=getBetween(this,clipPos(this,from),clipPos(this,to));if(lineSep===false){return lines}
return lines.join(lineSep||this.lineSeparator())},getLine:function(line){var l=this.getLineHandle(line);return l&&l.text},getLineHandle:function(line){if(isLine(this,line)){return getLine(this,line)}},getLineNumber:function(line){return lineNo(line)},getLineHandleVisualStart:function(line){if(typeof line=="number"){line=getLine(this,line);}
return visualLine(line)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(pos){return clipPos(this,pos)},getCursor:function(start){var range$$1=this.sel.primary(),pos;if(start==null||start=="head"){pos=range$$1.head;}
else if(start=="anchor"){pos=range$$1.anchor;}
else if(start=="end"||start=="to"||start===false){pos=range$$1.to();}
else{pos=range$$1.from();}
return pos},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:docMethodOp(function(line,ch,options){setSimpleSelection(this,clipPos(this,typeof line=="number"?Pos(line,ch||0):line),null,options);}),setSelection:docMethodOp(function(anchor,head,options){setSimpleSelection(this,clipPos(this,anchor),clipPos(this,head||anchor),options);}),extendSelection:docMethodOp(function(head,other,options){extendSelection(this,clipPos(this,head),other&&clipPos(this,other),options);}),extendSelections:docMethodOp(function(heads,options){extendSelections(this,clipPosArray(this,heads),options);}),extendSelectionsBy:docMethodOp(function(f,options){var heads=map(this.sel.ranges,f);extendSelections(this,clipPosArray(this,heads),options);}),setSelections:docMethodOp(function(ranges,primary,options){if(!ranges.length){return}
var out=[];for(var i=0;i<ranges.length;i++)
{out[i]=new Range(clipPos(this,ranges[i].anchor),clipPos(this,ranges[i].head));}
if(primary==null){primary=Math.min(ranges.length-1,this.sel.primIndex);}
setSelection(this,normalizeSelection(this.cm,out,primary),options);}),addSelection:docMethodOp(function(anchor,head,options){var ranges=this.sel.ranges.slice(0);ranges.push(new Range(clipPos(this,anchor),clipPos(this,head||anchor)));setSelection(this,normalizeSelection(this.cm,ranges,ranges.length-1),options);}),getSelection:function(lineSep){var ranges=this.sel.ranges,lines;for(var i=0;i<ranges.length;i++){var sel=getBetween(this,ranges[i].from(),ranges[i].to());lines=lines?lines.concat(sel):sel;}
if(lineSep===false){return lines}
else{return lines.join(lineSep||this.lineSeparator())}},getSelections:function(lineSep){var parts=[],ranges=this.sel.ranges;for(var i=0;i<ranges.length;i++){var sel=getBetween(this,ranges[i].from(),ranges[i].to());if(lineSep!==false){sel=sel.join(lineSep||this.lineSeparator());}
parts[i]=sel;}
return parts},replaceSelection:function(code,collapse,origin){var dup=[];for(var i=0;i<this.sel.ranges.length;i++)
{dup[i]=code;}
this.replaceSelections(dup,collapse,origin||"+input");},replaceSelections:docMethodOp(function(code,collapse,origin){var changes=[],sel=this.sel;for(var i=0;i<sel.ranges.length;i++){var range$$1=sel.ranges[i];changes[i]={from:range$$1.from(),to:range$$1.to(),text:this.splitLines(code[i]),origin:origin};}
var newSel=collapse&&collapse!="end"&&computeReplacedSel(this,changes,collapse);for(var i$1=changes.length-1;i$1>=0;i$1--)
{makeChange(this,changes[i$1]);}
if(newSel){setSelectionReplaceHistory(this,newSel);}
else if(this.cm){ensureCursorVisible(this.cm);}}),undo:docMethodOp(function(){makeChangeFromHistory(this,"undo");}),redo:docMethodOp(function(){makeChangeFromHistory(this,"redo");}),undoSelection:docMethodOp(function(){makeChangeFromHistory(this,"undo",true);}),redoSelection:docMethodOp(function(){makeChangeFromHistory(this,"redo",true);}),setExtending:function(val){this.extend=val;},getExtending:function(){return this.extend},historySize:function(){var hist=this.history,done=0,undone=0;for(var i=0;i<hist.done.length;i++){if(!hist.done[i].ranges){++done;}}
for(var i$1=0;i$1<hist.undone.length;i$1++){if(!hist.undone[i$1].ranges){++undone;}}
return{undo:done,redo:undone}},clearHistory:function(){this.history=new History(this.history.maxGeneration);},markClean:function(){this.cleanGeneration=this.changeGeneration(true);},changeGeneration:function(forceSplit){if(forceSplit)
{this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null;}
return this.history.generation},isClean:function(gen){return this.history.generation==(gen||this.cleanGeneration)},getHistory:function(){return{done:copyHistoryArray(this.history.done),undone:copyHistoryArray(this.history.undone)}},setHistory:function(histData){var hist=this.history=new History(this.history.maxGeneration);hist.done=copyHistoryArray(histData.done.slice(0),null,true);hist.undone=copyHistoryArray(histData.undone.slice(0),null,true);},setGutterMarker:docMethodOp(function(line,gutterID,value){return changeLine(this,line,"gutter",function(line){var markers=line.gutterMarkers||(line.gutterMarkers={});markers[gutterID]=value;if(!value&&isEmpty(markers)){line.gutterMarkers=null;}
return true})}),clearGutter:docMethodOp(function(gutterID){var this$1=this;this.iter(function(line){if(line.gutterMarkers&&line.gutterMarkers[gutterID]){changeLine(this$1,line,"gutter",function(){line.gutterMarkers[gutterID]=null;if(isEmpty(line.gutterMarkers)){line.gutterMarkers=null;}
return true});}});}),lineInfo:function(line){var n;if(typeof line=="number"){if(!isLine(this,line)){return null}
n=line;line=getLine(this,line);if(!line){return null}}else{n=lineNo(line);if(n==null){return null}}
return{line:n,handle:line,text:line.text,gutterMarkers:line.gutterMarkers,textClass:line.textClass,bgClass:line.bgClass,wrapClass:line.wrapClass,widgets:line.widgets}},addLineClass:docMethodOp(function(handle,where,cls){return changeLine(this,handle,where=="gutter"?"gutter":"class",function(line){var prop=where=="text"?"textClass":where=="background"?"bgClass":where=="gutter"?"gutterClass":"wrapClass";if(!line[prop]){line[prop]=cls;}
else if(classTest(cls).test(line[prop])){return false}
else{line[prop]+=" "+cls;}
return true})}),removeLineClass:docMethodOp(function(handle,where,cls){return changeLine(this,handle,where=="gutter"?"gutter":"class",function(line){var prop=where=="text"?"textClass":where=="background"?"bgClass":where=="gutter"?"gutterClass":"wrapClass";var cur=line[prop];if(!cur){return false}
else if(cls==null){line[prop]=null;}
else{var found=cur.match(classTest(cls));if(!found){return false}
var end=found.index+found[0].length;line[prop]=cur.slice(0,found.index)+(!found.index||end==cur.length?"":" ")+cur.slice(end)||null;}
return true})}),addLineWidget:docMethodOp(function(handle,node,options){return addLineWidget(this,handle,node,options)}),removeLineWidget:function(widget){widget.clear();},markText:function(from,to,options){return markText(this,clipPos(this,from),clipPos(this,to),options,options&&options.type||"range")},setBookmark:function(pos,options){var realOpts={replacedWith:options&&(options.nodeType==null?options.widget:options),insertLeft:options&&options.insertLeft,clearWhenEmpty:false,shared:options&&options.shared,handleMouseEvents:options&&options.handleMouseEvents};pos=clipPos(this,pos);return markText(this,pos,pos,realOpts,"bookmark")},findMarksAt:function(pos){pos=clipPos(this,pos);var markers=[],spans=getLine(this,pos.line).markedSpans;if(spans){for(var i=0;i<spans.length;++i){var span=spans[i];if((span.from==null||span.from<=pos.ch)&&(span.to==null||span.to>=pos.ch))
{markers.push(span.marker.parent||span.marker);}}}
return markers},findMarks:function(from,to,filter){from=clipPos(this,from);to=clipPos(this,to);var found=[],lineNo$$1=from.line;this.iter(from.line,to.line+1,function(line){var spans=line.markedSpans;if(spans){for(var i=0;i<spans.length;i++){var span=spans[i];if(!(span.to!=null&&lineNo$$1==from.line&&from.ch>=span.to||span.from==null&&lineNo$$1!=from.line||span.from!=null&&lineNo$$1==to.line&&span.from>=to.ch)&&(!filter||filter(span.marker)))
{found.push(span.marker.parent||span.marker);}}}
++lineNo$$1;});return found},getAllMarks:function(){var markers=[];this.iter(function(line){var sps=line.markedSpans;if(sps){for(var i=0;i<sps.length;++i)
{if(sps[i].from!=null){markers.push(sps[i].marker);}}}});return markers},posFromIndex:function(off){var ch,lineNo$$1=this.first,sepSize=this.lineSeparator().length;this.iter(function(line){var sz=line.text.length+sepSize;if(sz>off){ch=off;return true}
off-=sz;++lineNo$$1;});return clipPos(this,Pos(lineNo$$1,ch))},indexFromPos:function(coords){coords=clipPos(this,coords);var index=coords.ch;if(coords.line<this.first||coords.ch<0){return 0}
var sepSize=this.lineSeparator().length;this.iter(this.first,coords.line,function(line){index+=line.text.length+sepSize;});return index},copy:function(copyHistory){var doc=new Doc(getLines(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);doc.scrollTop=this.scrollTop;doc.scrollLeft=this.scrollLeft;doc.sel=this.sel;doc.extend=false;if(copyHistory){doc.history.undoDepth=this.history.undoDepth;doc.setHistory(this.getHistory());}
return doc},linkedDoc:function(options){if(!options){options={};}
var from=this.first,to=this.first+this.size;if(options.from!=null&&options.from>from){from=options.from;}
if(options.to!=null&&options.to<to){to=options.to;}
var copy=new Doc(getLines(this,from,to),options.mode||this.modeOption,from,this.lineSep,this.direction);if(options.sharedHist){copy.history=this.history;}(this.linked||(this.linked=[])).push({doc:copy,sharedHist:options.sharedHist});copy.linked=[{doc:this,isParent:true,sharedHist:options.sharedHist}];copySharedMarkers(copy,findSharedMarkers(this));return copy},unlinkDoc:function(other){if(other instanceof CodeMirror){other=other.doc;}
if(this.linked){for(var i=0;i<this.linked.length;++i){var link=this.linked[i];if(link.doc!=other){continue}
this.linked.splice(i,1);other.unlinkDoc(this);detachSharedMarkers(findSharedMarkers(this));break}}
if(other.history==this.history){var splitIds=[other.id];linkedDocs(other,function(doc){return splitIds.push(doc.id);},true);other.history=new History(null);other.history.done=copyHistoryArray(this.history.done,splitIds);other.history.undone=copyHistoryArray(this.history.undone,splitIds);}},iterLinkedDocs:function(f){linkedDocs(this,f);},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(str){if(this.lineSep){return str.split(this.lineSep)}
return splitLinesAuto(str)},lineSeparator:function(){return this.lineSep||"\n"},setDirection:docMethodOp(function(dir){if(dir!="rtl"){dir="ltr";}
if(dir==this.direction){return}
this.direction=dir;this.iter(function(line){return line.order=null;});if(this.cm){directionChanged(this.cm);}})});Doc.prototype.eachLine=Doc.prototype.iter;var lastDrop=0;function onDrop(e){var cm=this;clearDragCursor(cm);if(signalDOMEvent(cm,e)||eventInWidget(cm.display,e))
{return}
e_preventDefault(e);if(ie){lastDrop=+new Date;}
var pos=posFromMouse(cm,e,true),files=e.dataTransfer.files;if(!pos||cm.isReadOnly()){return}
if(files&&files.length&&window.FileReader&&window.File){var n=files.length,text=Array(n),read=0;var loadFile=function(file,i){if(cm.options.allowDropFileTypes&&indexOf(cm.options.allowDropFileTypes,file.type)==-1)
{return}
var reader=new FileReader;reader.onload=operation(cm,function(){var content=reader.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(content)){content="";}
text[i]=content;if(++read==n){pos=clipPos(cm.doc,pos);var change={from:pos,to:pos,text:cm.doc.splitLines(text.join(cm.doc.lineSeparator())),origin:"paste"};makeChange(cm.doc,change);setSelectionReplaceHistory(cm.doc,simpleSelection(pos,changeEnd(change)));}});reader.readAsText(file);};for(var i=0;i<n;++i){loadFile(files[i],i);}}else{if(cm.state.draggingText&&cm.doc.sel.contains(pos)>-1){cm.state.draggingText(e);setTimeout(function(){return cm.display.input.focus();},20);return}
try{var text$1=e.dataTransfer.getData("Text");if(text$1){var selected;if(cm.state.draggingText&&!cm.state.draggingText.copy)
{selected=cm.listSelections();}
setSelectionNoUndo(cm.doc,simpleSelection(pos,pos));if(selected){for(var i$1=0;i$1<selected.length;++i$1)
{replaceRange(cm.doc,"",selected[i$1].anchor,selected[i$1].head,"drag");}}
cm.replaceSelection(text$1,"around","paste");cm.display.input.focus();}}
catch(e){}}}
function onDragStart(cm,e){if(ie&&(!cm.state.draggingText||+new Date-lastDrop<100)){e_stop(e);return}
if(signalDOMEvent(cm,e)||eventInWidget(cm.display,e)){return}
e.dataTransfer.setData("Text",cm.getSelection());e.dataTransfer.effectAllowed="copyMove";if(e.dataTransfer.setDragImage&&!safari){var img=elt("img",null,null,"position: fixed; left: 0; top: 0;");img.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";if(presto){img.width=img.height=1;cm.display.wrapper.appendChild(img);img._top=img.offsetTop;}
e.dataTransfer.setDragImage(img,0,0);if(presto){img.parentNode.removeChild(img);}}}
function onDragOver(cm,e){var pos=posFromMouse(cm,e);if(!pos){return}
var frag=document.createDocumentFragment();drawSelectionCursor(cm,pos,frag);if(!cm.display.dragCursor){cm.display.dragCursor=elt("div",null,"CodeMirror-cursors CodeMirror-dragcursors");cm.display.lineSpace.insertBefore(cm.display.dragCursor,cm.display.cursorDiv);}
removeChildrenAndAdd(cm.display.dragCursor,frag);}
function clearDragCursor(cm){if(cm.display.dragCursor){cm.display.lineSpace.removeChild(cm.display.dragCursor);cm.display.dragCursor=null;}}
function forEachCodeMirror(f){if(!document.getElementsByClassName){return}
var byClass=document.getElementsByClassName("CodeMirror"),editors=[];for(var i=0;i<byClass.length;i++){var cm=byClass[i].CodeMirror;if(cm){editors.push(cm);}}
if(editors.length){editors[0].operation(function(){for(var i=0;i<editors.length;i++){f(editors[i]);}});}}
var globalsRegistered=false;function ensureGlobalHandlers(){if(globalsRegistered){return}
registerGlobalHandlers();globalsRegistered=true;}
function registerGlobalHandlers(){var resizeTimer;on(window,"resize",function(){if(resizeTimer==null){resizeTimer=setTimeout(function(){resizeTimer=null;forEachCodeMirror(onResize);},100);}});on(window,"blur",function(){return forEachCodeMirror(onBlur);});}
function onResize(cm){var d=cm.display;d.cachedCharWidth=d.cachedTextHeight=d.cachedPaddingH=null;d.scrollbarsClipped=false;cm.setSize();}
var keyNames={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};for(var i=0;i<10;i++){keyNames[i+48]=keyNames[i+96]=String(i);}
for(var i$1=65;i$1<=90;i$1++){keyNames[i$1]=String.fromCharCode(i$1);}
for(var i$2=1;i$2<=12;i$2++){keyNames[i$2+111]=keyNames[i$2+63235]="F"+i$2;}
var keyMap={};keyMap.basic={"Left":"goCharLeft","Right":"goCharRight","Up":"goLineUp","Down":"goLineDown","End":"goLineEnd","Home":"goLineStartSmart","PageUp":"goPageUp","PageDown":"goPageDown","Delete":"delCharAfter","Backspace":"delCharBefore","Shift-Backspace":"delCharBefore","Tab":"defaultTab","Shift-Tab":"indentAuto","Enter":"newlineAndIndent","Insert":"toggleOverwrite","Esc":"singleSelection"};keyMap.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection","fallthrough":"basic"};keyMap.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"};keyMap.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd","fallthrough":["basic","emacsy"]};keyMap["default"]=mac?keyMap.macDefault:keyMap.pcDefault;function normalizeKeyName(name){var parts=name.split(/-(?!$)/);name=parts[parts.length-1];var alt,ctrl,shift,cmd;for(var i=0;i<parts.length-1;i++){var mod=parts[i];if(/^(cmd|meta|m)$/i.test(mod)){cmd=true;}
else if(/^a(lt)?$/i.test(mod)){alt=true;}
else if(/^(c|ctrl|control)$/i.test(mod)){ctrl=true;}
else if(/^s(hift)?$/i.test(mod)){shift=true;}
else{throw new Error("Unrecognized modifier name: "+mod)}}
if(alt){name="Alt-"+name;}
if(ctrl){name="Ctrl-"+name;}
if(cmd){name="Cmd-"+name;}
if(shift){name="Shift-"+name;}
return name}
function normalizeKeyMap(keymap){var copy={};for(var keyname in keymap){if(keymap.hasOwnProperty(keyname)){var value=keymap[keyname];if(/^(name|fallthrough|(de|at)tach)$/.test(keyname)){continue}
if(value=="..."){delete keymap[keyname];continue}
var keys=map(keyname.split(" "),normalizeKeyName);for(var i=0;i<keys.length;i++){var val=(void 0),name=(void 0);if(i==keys.length-1){name=keys.join(" ");val=value;}else{name=keys.slice(0,i+1).join(" ");val="...";}
var prev=copy[name];if(!prev){copy[name]=val;}
else if(prev!=val){throw new Error("Inconsistent bindings for "+name)}}
delete keymap[keyname];}}
for(var prop in copy){keymap[prop]=copy[prop];}
return keymap}
function lookupKey(key,map$$1,handle,context){map$$1=getKeyMap(map$$1);var found=map$$1.call?map$$1.call(key,context):map$$1[key];if(found===false){return"nothing"}
if(found==="..."){return"multi"}
if(found!=null&&handle(found)){return"handled"}
if(map$$1.fallthrough){if(Object.prototype.toString.call(map$$1.fallthrough)!="[object Array]")
{return lookupKey(key,map$$1.fallthrough,handle,context)}
for(var i=0;i<map$$1.fallthrough.length;i++){var result=lookupKey(key,map$$1.fallthrough[i],handle,context);if(result){return result}}}}
function isModifierKey(value){var name=typeof value=="string"?value:keyNames[value.keyCode];return name=="Ctrl"||name=="Alt"||name=="Shift"||name=="Mod"}
function addModifierNames(name,event,noShift){var base=name;if(event.altKey&&base!="Alt"){name="Alt-"+name;}
if((flipCtrlCmd?event.metaKey:event.ctrlKey)&&base!="Ctrl"){name="Ctrl-"+name;}
if((flipCtrlCmd?event.ctrlKey:event.metaKey)&&base!="Cmd"){name="Cmd-"+name;}
if(!noShift&&event.shiftKey&&base!="Shift"){name="Shift-"+name;}
return name}
function keyName(event,noShift){if(presto&&event.keyCode==34&&event["char"]){return false}
var name=keyNames[event.keyCode];if(name==null||event.altGraphKey){return false}
if(event.keyCode==3&&event.code){name=event.code;}
return addModifierNames(name,event,noShift)}
function getKeyMap(val){return typeof val=="string"?keyMap[val]:val}
function deleteNearSelection(cm,compute){var ranges=cm.doc.sel.ranges,kill=[];for(var i=0;i<ranges.length;i++){var toKill=compute(ranges[i]);while(kill.length&&cmp(toKill.from,lst(kill).to)<=0){var replaced=kill.pop();if(cmp(replaced.from,toKill.from)<0){toKill.from=replaced.from;break}}
kill.push(toKill);}
runInOp(cm,function(){for(var i=kill.length-1;i>=0;i--)
{replaceRange(cm.doc,"",kill[i].from,kill[i].to,"+delete");}
ensureCursorVisible(cm);});}
function moveCharLogically(line,ch,dir){var target=skipExtendingChars(line.text,ch+dir,dir);return target<0||target>line.text.length?null:target}
function moveLogically(line,start,dir){var ch=moveCharLogically(line,start.ch,dir);return ch==null?null:new Pos(start.line,ch,dir<0?"after":"before")}
function endOfLine(visually,cm,lineObj,lineNo,dir){if(visually){var order=getOrder(lineObj,cm.doc.direction);if(order){var part=dir<0?lst(order):order[0];var moveInStorageOrder=(dir<0)==(part.level==1);var sticky=moveInStorageOrder?"after":"before";var ch;if(part.level>0||cm.doc.direction=="rtl"){var prep=prepareMeasureForLine(cm,lineObj);ch=dir<0?lineObj.text.length-1:0;var targetTop=measureCharPrepared(cm,prep,ch).top;ch=findFirst(function(ch){return measureCharPrepared(cm,prep,ch).top==targetTop;},(dir<0)==(part.level==1)?part.from:part.to-1,ch);if(sticky=="before"){ch=moveCharLogically(lineObj,ch,1);}}else{ch=dir<0?part.to:part.from;}
return new Pos(lineNo,ch,sticky)}}
return new Pos(lineNo,dir<0?lineObj.text.length:0,dir<0?"before":"after")}
function moveVisually(cm,line,start,dir){var bidi=getOrder(line,cm.doc.direction);if(!bidi){return moveLogically(line,start,dir)}
if(start.ch>=line.text.length){start.ch=line.text.length;start.sticky="before";}else if(start.ch<=0){start.ch=0;start.sticky="after";}
var partPos=getBidiPartAt(bidi,start.ch,start.sticky),part=bidi[partPos];if(cm.doc.direction=="ltr"&&part.level%2==0&&(dir>0?part.to>start.ch:part.from<start.ch)){return moveLogically(line,start,dir)}
var mv=function(pos,dir){return moveCharLogically(line,pos instanceof Pos?pos.ch:pos,dir);};var prep;var getWrappedLineExtent=function(ch){if(!cm.options.lineWrapping){return{begin:0,end:line.text.length}}
prep=prep||prepareMeasureForLine(cm,line);return wrappedLineExtentChar(cm,line,prep,ch)};var wrappedLineExtent=getWrappedLineExtent(start.sticky=="before"?mv(start,-1):start.ch);if(cm.doc.direction=="rtl"||part.level==1){var moveInStorageOrder=(part.level==1)==(dir<0);var ch=mv(start,moveInStorageOrder?1:-1);if(ch!=null&&(!moveInStorageOrder?ch>=part.from&&ch>=wrappedLineExtent.begin:ch<=part.to&&ch<=wrappedLineExtent.end)){var sticky=moveInStorageOrder?"before":"after";return new Pos(start.line,ch,sticky)}}
var searchInVisualLine=function(partPos,dir,wrappedLineExtent){var getRes=function(ch,moveInStorageOrder){return moveInStorageOrder?new Pos(start.line,mv(ch,1),"before"):new Pos(start.line,ch,"after");};for(;partPos>=0&&partPos<bidi.length;partPos+=dir){var part=bidi[partPos];var moveInStorageOrder=(dir>0)==(part.level!=1);var ch=moveInStorageOrder?wrappedLineExtent.begin:mv(wrappedLineExtent.end,-1);if(part.from<=ch&&ch<part.to){return getRes(ch,moveInStorageOrder)}
ch=moveInStorageOrder?part.from:mv(part.to,-1);if(wrappedLineExtent.begin<=ch&&ch<wrappedLineExtent.end){return getRes(ch,moveInStorageOrder)}}};var res=searchInVisualLine(partPos+dir,dir,wrappedLineExtent);if(res){return res}
var nextCh=dir>0?wrappedLineExtent.end:mv(wrappedLineExtent.begin,-1);if(nextCh!=null&&!(dir>0&&nextCh==line.text.length)){res=searchInVisualLine(dir>0?0:bidi.length-1,dir,getWrappedLineExtent(nextCh));if(res){return res}}
return null}
var commands={selectAll:selectAll,singleSelection:function(cm){return cm.setSelection(cm.getCursor("anchor"),cm.getCursor("head"),sel_dontScroll);},killLine:function(cm){return deleteNearSelection(cm,function(range){if(range.empty()){var len=getLine(cm.doc,range.head.line).text.length;if(range.head.ch==len&&range.head.line<cm.lastLine())
{return{from:range.head,to:Pos(range.head.line+1,0)}}
else
{return{from:range.head,to:Pos(range.head.line,len)}}}else{return{from:range.from(),to:range.to()}}});},deleteLine:function(cm){return deleteNearSelection(cm,function(range){return({from:Pos(range.from().line,0),to:clipPos(cm.doc,Pos(range.to().line+1,0))});});},delLineLeft:function(cm){return deleteNearSelection(cm,function(range){return({from:Pos(range.from().line,0),to:range.from()});});},delWrappedLineLeft:function(cm){return deleteNearSelection(cm,function(range){var top=cm.charCoords(range.head,"div").top+5;var leftPos=cm.coordsChar({left:0,top:top},"div");return{from:leftPos,to:range.from()}});},delWrappedLineRight:function(cm){return deleteNearSelection(cm,function(range){var top=cm.charCoords(range.head,"div").top+5;var rightPos=cm.coordsChar({left:cm.display.lineDiv.offsetWidth+100,top:top},"div");return{from:range.from(),to:rightPos}});},undo:function(cm){return cm.undo();},redo:function(cm){return cm.redo();},undoSelection:function(cm){return cm.undoSelection();},redoSelection:function(cm){return cm.redoSelection();},goDocStart:function(cm){return cm.extendSelection(Pos(cm.firstLine(),0));},goDocEnd:function(cm){return cm.extendSelection(Pos(cm.lastLine()));},goLineStart:function(cm){return cm.extendSelectionsBy(function(range){return lineStart(cm,range.head.line);},{origin:"+move",bias:1});},goLineStartSmart:function(cm){return cm.extendSelectionsBy(function(range){return lineStartSmart(cm,range.head);},{origin:"+move",bias:1});},goLineEnd:function(cm){return cm.extendSelectionsBy(function(range){return lineEnd(cm,range.head.line);},{origin:"+move",bias:-1});},goLineRight:function(cm){return cm.extendSelectionsBy(function(range){var top=cm.cursorCoords(range.head,"div").top+5;return cm.coordsChar({left:cm.display.lineDiv.offsetWidth+100,top:top},"div")},sel_move);},goLineLeft:function(cm){return cm.extendSelectionsBy(function(range){var top=cm.cursorCoords(range.head,"div").top+5;return cm.coordsChar({left:0,top:top},"div")},sel_move);},goLineLeftSmart:function(cm){return cm.extendSelectionsBy(function(range){var top=cm.cursorCoords(range.head,"div").top+5;var pos=cm.coordsChar({left:0,top:top},"div");if(pos.ch<cm.getLine(pos.line).search(/\S/)){return lineStartSmart(cm,range.head)}
return pos},sel_move);},goLineUp:function(cm){return cm.moveV(-1,"line");},goLineDown:function(cm){return cm.moveV(1,"line");},goPageUp:function(cm){return cm.moveV(-1,"page");},goPageDown:function(cm){return cm.moveV(1,"page");},goCharLeft:function(cm){return cm.moveH(-1,"char");},goCharRight:function(cm){return cm.moveH(1,"char");},goColumnLeft:function(cm){return cm.moveH(-1,"column");},goColumnRight:function(cm){return cm.moveH(1,"column");},goWordLeft:function(cm){return cm.moveH(-1,"word");},goGroupRight:function(cm){return cm.moveH(1,"group");},goGroupLeft:function(cm){return cm.moveH(-1,"group");},goWordRight:function(cm){return cm.moveH(1,"word");},delCharBefore:function(cm){return cm.deleteH(-1,"char");},delCharAfter:function(cm){return cm.deleteH(1,"char");},delWordBefore:function(cm){return cm.deleteH(-1,"word");},delWordAfter:function(cm){return cm.deleteH(1,"word");},delGroupBefore:function(cm){return cm.deleteH(-1,"group");},delGroupAfter:function(cm){return cm.deleteH(1,"group");},indentAuto:function(cm){return cm.indentSelection("smart");},indentMore:function(cm){return cm.indentSelection("add");},indentLess:function(cm){return cm.indentSelection("subtract");},insertTab:function(cm){return cm.replaceSelection("\t");},insertSoftTab:function(cm){var spaces=[],ranges=cm.listSelections(),tabSize=cm.options.tabSize;for(var i=0;i<ranges.length;i++){var pos=ranges[i].from();var col=countColumn(cm.getLine(pos.line),pos.ch,tabSize);spaces.push(spaceStr(tabSize-col%tabSize));}
cm.replaceSelections(spaces);},defaultTab:function(cm){if(cm.somethingSelected()){cm.indentSelection("add");}
else{cm.execCommand("insertTab");}},transposeChars:function(cm){return runInOp(cm,function(){var ranges=cm.listSelections(),newSel=[];for(var i=0;i<ranges.length;i++){if(!ranges[i].empty()){continue}
var cur=ranges[i].head,line=getLine(cm.doc,cur.line).text;if(line){if(cur.ch==line.length){cur=new Pos(cur.line,cur.ch-1);}
if(cur.ch>0){cur=new Pos(cur.line,cur.ch+1);cm.replaceRange(line.charAt(cur.ch-1)+line.charAt(cur.ch-2),Pos(cur.line,cur.ch-2),cur,"+transpose");}else if(cur.line>cm.doc.first){var prev=getLine(cm.doc,cur.line-1).text;if(prev){cur=new Pos(cur.line,1);cm.replaceRange(line.charAt(0)+cm.doc.lineSeparator()+
prev.charAt(prev.length-1),Pos(cur.line-1,prev.length-1),cur,"+transpose");}}}
newSel.push(new Range(cur,cur));}
cm.setSelections(newSel);});},newlineAndIndent:function(cm){return runInOp(cm,function(){var sels=cm.listSelections();for(var i=sels.length-1;i>=0;i--)
{cm.replaceRange(cm.doc.lineSeparator(),sels[i].anchor,sels[i].head,"+input");}
sels=cm.listSelections();for(var i$1=0;i$1<sels.length;i$1++)
{cm.indentLine(sels[i$1].from().line,null,true);}
ensureCursorVisible(cm);});},openLine:function(cm){return cm.replaceSelection("\n","start");},toggleOverwrite:function(cm){return cm.toggleOverwrite();}};function lineStart(cm,lineN){var line=getLine(cm.doc,lineN);var visual=visualLine(line);if(visual!=line){lineN=lineNo(visual);}
return endOfLine(true,cm,visual,lineN,1)}
function lineEnd(cm,lineN){var line=getLine(cm.doc,lineN);var visual=visualLineEnd(line);if(visual!=line){lineN=lineNo(visual);}
return endOfLine(true,cm,line,lineN,-1)}
function lineStartSmart(cm,pos){var start=lineStart(cm,pos.line);var line=getLine(cm.doc,start.line);var order=getOrder(line,cm.doc.direction);if(!order||order[0].level==0){var firstNonWS=Math.max(0,line.text.search(/\S/));var inWS=pos.line==start.line&&pos.ch<=firstNonWS&&pos.ch;return Pos(start.line,inWS?0:firstNonWS,start.sticky)}
return start}
function doHandleBinding(cm,bound,dropShift){if(typeof bound=="string"){bound=commands[bound];if(!bound){return false}}
cm.display.input.ensurePolled();var prevShift=cm.display.shift,done=false;try{if(cm.isReadOnly()){cm.state.suppressEdits=true;}
if(dropShift){cm.display.shift=false;}
done=bound(cm)!=Pass;}finally{cm.display.shift=prevShift;cm.state.suppressEdits=false;}
return done}
function lookupKeyForEditor(cm,name,handle){for(var i=0;i<cm.state.keyMaps.length;i++){var result=lookupKey(name,cm.state.keyMaps[i],handle,cm);if(result){return result}}
return(cm.options.extraKeys&&lookupKey(name,cm.options.extraKeys,handle,cm))||lookupKey(name,cm.options.keyMap,handle,cm)}
var stopSeq=new Delayed;function dispatchKey(cm,name,e,handle){var seq=cm.state.keySeq;if(seq){if(isModifierKey(name)){return"handled"}
if(/\'$/.test(name))
{cm.state.keySeq=null;}
else
{stopSeq.set(50,function(){if(cm.state.keySeq==seq){cm.state.keySeq=null;cm.display.input.reset();}});}
if(dispatchKeyInner(cm,seq+" "+name,e,handle)){return true}}
return dispatchKeyInner(cm,name,e,handle)}
function dispatchKeyInner(cm,name,e,handle){var result=lookupKeyForEditor(cm,name,handle);if(result=="multi")
{cm.state.keySeq=name;}
if(result=="handled")
{signalLater(cm,"keyHandled",cm,name,e);}
if(result=="handled"||result=="multi"){e_preventDefault(e);restartBlink(cm);}
return!!result}
function handleKeyBinding(cm,e){var name=keyName(e,true);if(!name){return false}
if(e.shiftKey&&!cm.state.keySeq){return dispatchKey(cm,"Shift-"+name,e,function(b){return doHandleBinding(cm,b,true);})||dispatchKey(cm,name,e,function(b){if(typeof b=="string"?/^go[A-Z]/.test(b):b.motion)
{return doHandleBinding(cm,b)}})}else{return dispatchKey(cm,name,e,function(b){return doHandleBinding(cm,b);})}}
function handleCharBinding(cm,e,ch){return dispatchKey(cm,"'"+ch+"'",e,function(b){return doHandleBinding(cm,b,true);})}
var lastStoppedKey=null;function onKeyDown(e){var cm=this;cm.curOp.focus=activeElt();if(signalDOMEvent(cm,e)){return}
if(ie&&ie_version<11&&e.keyCode==27){e.returnValue=false;}
var code=e.keyCode;cm.display.shift=code==16||e.shiftKey;var handled=handleKeyBinding(cm,e);if(presto){lastStoppedKey=handled?code:null;if(!handled&&code==88&&!hasCopyEvent&&(mac?e.metaKey:e.ctrlKey))
{cm.replaceSelection("",null,"cut");}}
if(code==18&&!/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className))
{showCrossHair(cm);}}
function showCrossHair(cm){var lineDiv=cm.display.lineDiv;addClass(lineDiv,"CodeMirror-crosshair");function up(e){if(e.keyCode==18||!e.altKey){rmClass(lineDiv,"CodeMirror-crosshair");off(document,"keyup",up);off(document,"mouseover",up);}}
on(document,"keyup",up);on(document,"mouseover",up);}
function onKeyUp(e){if(e.keyCode==16){this.doc.sel.shift=false;}
signalDOMEvent(this,e);}
function onKeyPress(e){var cm=this;if(eventInWidget(cm.display,e)||signalDOMEvent(cm,e)||e.ctrlKey&&!e.altKey||mac&&e.metaKey){return}
var keyCode=e.keyCode,charCode=e.charCode;if(presto&&keyCode==lastStoppedKey){lastStoppedKey=null;e_preventDefault(e);return}
if((presto&&(!e.which||e.which<10))&&handleKeyBinding(cm,e)){return}
var ch=String.fromCharCode(charCode==null?keyCode:charCode);if(ch=="\x08"){return}
if(handleCharBinding(cm,e,ch)){return}
cm.display.input.onKeyPress(e);}
var DOUBLECLICK_DELAY=400;var PastClick=function(time,pos,button){this.time=time;this.pos=pos;this.button=button;};PastClick.prototype.compare=function(time,pos,button){return this.time+DOUBLECLICK_DELAY>time&&cmp(pos,this.pos)==0&&button==this.button};var lastClick,lastDoubleClick;function clickRepeat(pos,button){var now=+new Date;if(lastDoubleClick&&lastDoubleClick.compare(now,pos,button)){lastClick=lastDoubleClick=null;return"triple"}else if(lastClick&&lastClick.compare(now,pos,button)){lastDoubleClick=new PastClick(now,pos,button);lastClick=null;return"double"}else{lastClick=new PastClick(now,pos,button);lastDoubleClick=null;return"single"}}
function onMouseDown(e){var cm=this,display=cm.display;if(signalDOMEvent(cm,e)||display.activeTouch&&display.input.supportsTouch()){return}
display.input.ensurePolled();display.shift=e.shiftKey;if(eventInWidget(display,e)){if(!webkit){display.scroller.draggable=false;setTimeout(function(){return display.scroller.draggable=true;},100);}
return}
if(clickInGutter(cm,e)){return}
var pos=posFromMouse(cm,e),button=e_button(e),repeat=pos?clickRepeat(pos,button):"single";window.focus();if(button==1&&cm.state.selectingText)
{cm.state.selectingText(e);}
if(pos&&handleMappedButton(cm,button,pos,repeat,e)){return}
if(button==1){if(pos){leftButtonDown(cm,pos,repeat,e);}
else if(e_target(e)==display.scroller){e_preventDefault(e);}}else if(button==2){if(pos){extendSelection(cm.doc,pos);}
setTimeout(function(){return display.input.focus();},20);}else if(button==3){if(captureRightClick){cm.display.input.onContextMenu(e);}
else{delayBlurEvent(cm);}}}
function handleMappedButton(cm,button,pos,repeat,event){var name="Click";if(repeat=="double"){name="Double"+name;}
else if(repeat=="triple"){name="Triple"+name;}
name=(button==1?"Left":button==2?"Middle":"Right")+name;return dispatchKey(cm,addModifierNames(name,event),event,function(bound){if(typeof bound=="string"){bound=commands[bound];}
if(!bound){return false}
var done=false;try{if(cm.isReadOnly()){cm.state.suppressEdits=true;}
done=bound(cm,pos)!=Pass;}finally{cm.state.suppressEdits=false;}
return done})}
function configureMouse(cm,repeat,event){var option=cm.getOption("configureMouse");var value=option?option(cm,repeat,event):{};if(value.unit==null){var rect=chromeOS?event.shiftKey&&event.metaKey:event.altKey;value.unit=rect?"rectangle":repeat=="single"?"char":repeat=="double"?"word":"line";}
if(value.extend==null||cm.doc.extend){value.extend=cm.doc.extend||event.shiftKey;}
if(value.addNew==null){value.addNew=mac?event.metaKey:event.ctrlKey;}
if(value.moveOnDrag==null){value.moveOnDrag=!(mac?event.altKey:event.ctrlKey);}
return value}
function leftButtonDown(cm,pos,repeat,event){if(ie){setTimeout(bind(ensureFocus,cm),0);}
else{cm.curOp.focus=activeElt();}
var behavior=configureMouse(cm,repeat,event);var sel=cm.doc.sel,contained;if(cm.options.dragDrop&&dragAndDrop&&!cm.isReadOnly()&&repeat=="single"&&(contained=sel.contains(pos))>-1&&(cmp((contained=sel.ranges[contained]).from(),pos)<0||pos.xRel>0)&&(cmp(contained.to(),pos)>0||pos.xRel<0))
{leftButtonStartDrag(cm,event,pos,behavior);}
else
{leftButtonSelect(cm,event,pos,behavior);}}
function leftButtonStartDrag(cm,event,pos,behavior){var display=cm.display,moved=false;var dragEnd=operation(cm,function(e){if(webkit){display.scroller.draggable=false;}
cm.state.draggingText=false;off(display.wrapper.ownerDocument,"mouseup",dragEnd);off(display.wrapper.ownerDocument,"mousemove",mouseMove);off(display.scroller,"dragstart",dragStart);off(display.scroller,"drop",dragEnd);if(!moved){e_preventDefault(e);if(!behavior.addNew)
{extendSelection(cm.doc,pos,null,null,behavior.extend);}
if(webkit||ie&&ie_version==9)
{setTimeout(function(){display.wrapper.ownerDocument.body.focus();display.input.focus();},20);}
else
{display.input.focus();}}});var mouseMove=function(e2){moved=moved||Math.abs(event.clientX-e2.clientX)+Math.abs(event.clientY-e2.clientY)>=10;};var dragStart=function(){return moved=true;};if(webkit){display.scroller.draggable=true;}
cm.state.draggingText=dragEnd;dragEnd.copy=!behavior.moveOnDrag;if(display.scroller.dragDrop){display.scroller.dragDrop();}
on(display.wrapper.ownerDocument,"mouseup",dragEnd);on(display.wrapper.ownerDocument,"mousemove",mouseMove);on(display.scroller,"dragstart",dragStart);on(display.scroller,"drop",dragEnd);delayBlurEvent(cm);setTimeout(function(){return display.input.focus();},20);}
function rangeForUnit(cm,pos,unit){if(unit=="char"){return new Range(pos,pos)}
if(unit=="word"){return cm.findWordAt(pos)}
if(unit=="line"){return new Range(Pos(pos.line,0),clipPos(cm.doc,Pos(pos.line+1,0)))}
var result=unit(cm,pos);return new Range(result.from,result.to)}
function leftButtonSelect(cm,event,start,behavior){var display=cm.display,doc=cm.doc;e_preventDefault(event);var ourRange,ourIndex,startSel=doc.sel,ranges=startSel.ranges;if(behavior.addNew&&!behavior.extend){ourIndex=doc.sel.contains(start);if(ourIndex>-1)
{ourRange=ranges[ourIndex];}
else
{ourRange=new Range(start,start);}}else{ourRange=doc.sel.primary();ourIndex=doc.sel.primIndex;}
if(behavior.unit=="rectangle"){if(!behavior.addNew){ourRange=new Range(start,start);}
start=posFromMouse(cm,event,true,true);ourIndex=-1;}else{var range$$1=rangeForUnit(cm,start,behavior.unit);if(behavior.extend)
{ourRange=extendRange(ourRange,range$$1.anchor,range$$1.head,behavior.extend);}
else
{ourRange=range$$1;}}
if(!behavior.addNew){ourIndex=0;setSelection(doc,new Selection([ourRange],0),sel_mouse);startSel=doc.sel;}else if(ourIndex==-1){ourIndex=ranges.length;setSelection(doc,normalizeSelection(cm,ranges.concat([ourRange]),ourIndex),{scroll:false,origin:"*mouse"});}else if(ranges.length>1&&ranges[ourIndex].empty()&&behavior.unit=="char"&&!behavior.extend){setSelection(doc,normalizeSelection(cm,ranges.slice(0,ourIndex).concat(ranges.slice(ourIndex+1)),0),{scroll:false,origin:"*mouse"});startSel=doc.sel;}else{replaceOneSelection(doc,ourIndex,ourRange,sel_mouse);}
var lastPos=start;function extendTo(pos){if(cmp(lastPos,pos)==0){return}
lastPos=pos;if(behavior.unit=="rectangle"){var ranges=[],tabSize=cm.options.tabSize;var startCol=countColumn(getLine(doc,start.line).text,start.ch,tabSize);var posCol=countColumn(getLine(doc,pos.line).text,pos.ch,tabSize);var left=Math.min(startCol,posCol),right=Math.max(startCol,posCol);for(var line=Math.min(start.line,pos.line),end=Math.min(cm.lastLine(),Math.max(start.line,pos.line));line<=end;line++){var text=getLine(doc,line).text,leftPos=findColumn(text,left,tabSize);if(left==right)
{ranges.push(new Range(Pos(line,leftPos),Pos(line,leftPos)));}
else if(text.length>leftPos)
{ranges.push(new Range(Pos(line,leftPos),Pos(line,findColumn(text,right,tabSize))));}}
if(!ranges.length){ranges.push(new Range(start,start));}
setSelection(doc,normalizeSelection(cm,startSel.ranges.slice(0,ourIndex).concat(ranges),ourIndex),{origin:"*mouse",scroll:false});cm.scrollIntoView(pos);}else{var oldRange=ourRange;var range$$1=rangeForUnit(cm,pos,behavior.unit);var anchor=oldRange.anchor,head;if(cmp(range$$1.anchor,anchor)>0){head=range$$1.head;anchor=minPos(oldRange.from(),range$$1.anchor);}else{head=range$$1.anchor;anchor=maxPos(oldRange.to(),range$$1.head);}
var ranges$1=startSel.ranges.slice(0);ranges$1[ourIndex]=bidiSimplify(cm,new Range(clipPos(doc,anchor),head));setSelection(doc,normalizeSelection(cm,ranges$1,ourIndex),sel_mouse);}}
var editorSize=display.wrapper.getBoundingClientRect();var counter=0;function extend(e){var curCount=++counter;var cur=posFromMouse(cm,e,true,behavior.unit=="rectangle");if(!cur){return}
if(cmp(cur,lastPos)!=0){cm.curOp.focus=activeElt();extendTo(cur);var visible=visibleLines(display,doc);if(cur.line>=visible.to||cur.line<visible.from)
{setTimeout(operation(cm,function(){if(counter==curCount){extend(e);}}),150);}}else{var outside=e.clientY<editorSize.top?-20:e.clientY>editorSize.bottom?20:0;if(outside){setTimeout(operation(cm,function(){if(counter!=curCount){return}
display.scroller.scrollTop+=outside;extend(e);}),50);}}}
function done(e){cm.state.selectingText=false;counter=Infinity;if(e){e_preventDefault(e);display.input.focus();}
off(display.wrapper.ownerDocument,"mousemove",move);off(display.wrapper.ownerDocument,"mouseup",up);doc.history.lastSelOrigin=null;}
var move=operation(cm,function(e){if(e.buttons===0||!e_button(e)){done(e);}
else{extend(e);}});var up=operation(cm,done);cm.state.selectingText=up;on(display.wrapper.ownerDocument,"mousemove",move);on(display.wrapper.ownerDocument,"mouseup",up);}
function bidiSimplify(cm,range$$1){var anchor=range$$1.anchor;var head=range$$1.head;var anchorLine=getLine(cm.doc,anchor.line);if(cmp(anchor,head)==0&&anchor.sticky==head.sticky){return range$$1}
var order=getOrder(anchorLine);if(!order){return range$$1}
var index=getBidiPartAt(order,anchor.ch,anchor.sticky),part=order[index];if(part.from!=anchor.ch&&part.to!=anchor.ch){return range$$1}
var boundary=index+((part.from==anchor.ch)==(part.level!=1)?0:1);if(boundary==0||boundary==order.length){return range$$1}
var leftSide;if(head.line!=anchor.line){leftSide=(head.line-anchor.line)*(cm.doc.direction=="ltr"?1:-1)>0;}else{var headIndex=getBidiPartAt(order,head.ch,head.sticky);var dir=headIndex-index||(head.ch-anchor.ch)*(part.level==1?-1:1);if(headIndex==boundary-1||headIndex==boundary)
{leftSide=dir<0;}
else
{leftSide=dir>0;}}
var usePart=order[boundary+(leftSide?-1:0)];var from=leftSide==(usePart.level==1);var ch=from?usePart.from:usePart.to,sticky=from?"after":"before";return anchor.ch==ch&&anchor.sticky==sticky?range$$1:new Range(new Pos(anchor.line,ch,sticky),head)}
function gutterEvent(cm,e,type,prevent){var mX,mY;if(e.touches){mX=e.touches[0].clientX;mY=e.touches[0].clientY;}else{try{mX=e.clientX;mY=e.clientY;}
catch(e){return false}}
if(mX>=Math.floor(cm.display.gutters.getBoundingClientRect().right)){return false}
if(prevent){e_preventDefault(e);}
var display=cm.display;var lineBox=display.lineDiv.getBoundingClientRect();if(mY>lineBox.bottom||!hasHandler(cm,type)){return e_defaultPrevented(e)}
mY-=lineBox.top-display.viewOffset;for(var i=0;i<cm.display.gutterSpecs.length;++i){var g=display.gutters.childNodes[i];if(g&&g.getBoundingClientRect().right>=mX){var line=lineAtHeight(cm.doc,mY);var gutter=cm.display.gutterSpecs[i];signal(cm,type,cm,line,gutter.className,e);return e_defaultPrevented(e)}}}
function clickInGutter(cm,e){return gutterEvent(cm,e,"gutterClick",true)}
function onContextMenu(cm,e){if(eventInWidget(cm.display,e)||contextMenuInGutter(cm,e)){return}
if(signalDOMEvent(cm,e,"contextmenu")){return}
if(!captureRightClick){cm.display.input.onContextMenu(e);}}
function contextMenuInGutter(cm,e){if(!hasHandler(cm,"gutterContextMenu")){return false}
return gutterEvent(cm,e,"gutterContextMenu",false)}
function themeChanged(cm){cm.display.wrapper.className=cm.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+
cm.options.theme.replace(/(^|\s)\s*/g," cm-s-");clearCaches(cm);}
var Init={toString:function(){return"CodeMirror.Init"}};var defaults={};var optionHandlers={};function defineOptions(CodeMirror){var optionHandlers=CodeMirror.optionHandlers;function option(name,deflt,handle,notOnInit){CodeMirror.defaults[name]=deflt;if(handle){optionHandlers[name]=notOnInit?function(cm,val,old){if(old!=Init){handle(cm,val,old);}}:handle;}}
CodeMirror.defineOption=option;CodeMirror.Init=Init;option("value","",function(cm,val){return cm.setValue(val);},true);option("mode",null,function(cm,val){cm.doc.modeOption=val;loadMode(cm);},true);option("indentUnit",2,loadMode,true);option("indentWithTabs",false);option("smartIndent",true);option("tabSize",4,function(cm){resetModeState(cm);clearCaches(cm);regChange(cm);},true);option("lineSeparator",null,function(cm,val){cm.doc.lineSep=val;if(!val){return}
var newBreaks=[],lineNo=cm.doc.first;cm.doc.iter(function(line){for(var pos=0;;){var found=line.text.indexOf(val,pos);if(found==-1){break}
pos=found+val.length;newBreaks.push(Pos(lineNo,found));}
lineNo++;});for(var i=newBreaks.length-1;i>=0;i--)
{replaceRange(cm.doc,val,newBreaks[i],Pos(newBreaks[i].line,newBreaks[i].ch+val.length));}});option("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(cm,val,old){cm.state.specialChars=new RegExp(val.source+(val.test("\t")?"":"|\t"),"g");if(old!=Init){cm.refresh();}});option("specialCharPlaceholder",defaultSpecialCharPlaceholder,function(cm){return cm.refresh();},true);option("electricChars",true);option("inputStyle",mobile?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},true);option("spellcheck",false,function(cm,val){return cm.getInputField().spellcheck=val;},true);option("autocorrect",false,function(cm,val){return cm.getInputField().autocorrect=val;},true);option("autocapitalize",false,function(cm,val){return cm.getInputField().autocapitalize=val;},true);option("rtlMoveVisually",!windows);option("wholeLineUpdateBefore",true);option("theme","default",function(cm){themeChanged(cm);updateGutters(cm);},true);option("keyMap","default",function(cm,val,old){var next=getKeyMap(val);var prev=old!=Init&&getKeyMap(old);if(prev&&prev.detach){prev.detach(cm,next);}
if(next.attach){next.attach(cm,prev||null);}});option("extraKeys",null);option("configureMouse",null);option("lineWrapping",false,wrappingChanged,true);option("gutters",[],function(cm,val){cm.display.gutterSpecs=getGutters(val,cm.options.lineNumbers);updateGutters(cm);},true);option("fixedGutter",true,function(cm,val){cm.display.gutters.style.left=val?compensateForHScroll(cm.display)+"px":"0";cm.refresh();},true);option("coverGutterNextToScrollbar",false,function(cm){return updateScrollbars(cm);},true);option("scrollbarStyle","native",function(cm){initScrollbars(cm);updateScrollbars(cm);cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);},true);option("lineNumbers",false,function(cm,val){cm.display.gutterSpecs=getGutters(cm.options.gutters,val);updateGutters(cm);},true);option("firstLineNumber",1,updateGutters,true);option("lineNumberFormatter",function(integer){return integer;},updateGutters,true);option("showCursorWhenSelecting",false,updateSelection,true);option("resetSelectionOnContextMenu",true);option("lineWiseCopyCut",true);option("pasteLinesPerSelection",true);option("selectionsMayTouch",false);option("readOnly",false,function(cm,val){if(val=="nocursor"){onBlur(cm);cm.display.input.blur();}
cm.display.input.readOnlyChanged(val);});option("disableInput",false,function(cm,val){if(!val){cm.display.input.reset();}},true);option("dragDrop",true,dragDropChanged);option("allowDropFileTypes",null);option("cursorBlinkRate",530);option("cursorScrollMargin",0);option("cursorHeight",1,updateSelection,true);option("singleCursorHeightPerLine",true,updateSelection,true);option("workTime",100);option("workDelay",100);option("flattenSpans",true,resetModeState,true);option("addModeClass",false,resetModeState,true);option("pollInterval",100);option("undoDepth",200,function(cm,val){return cm.doc.history.undoDepth=val;});option("historyEventDelay",1250);option("viewportMargin",10,function(cm){return cm.refresh();},true);option("maxHighlightLength",10000,resetModeState,true);option("moveInputWithCursor",true,function(cm,val){if(!val){cm.display.input.resetPosition();}});option("tabindex",null,function(cm,val){return cm.display.input.getField().tabIndex=val||"";});option("autofocus",null);option("direction","ltr",function(cm,val){return cm.doc.setDirection(val);},true);option("phrases",null);}
function dragDropChanged(cm,value,old){var wasOn=old&&old!=Init;if(!value!=!wasOn){var funcs=cm.display.dragFunctions;var toggle=value?on:off;toggle(cm.display.scroller,"dragstart",funcs.start);toggle(cm.display.scroller,"dragenter",funcs.enter);toggle(cm.display.scroller,"dragover",funcs.over);toggle(cm.display.scroller,"dragleave",funcs.leave);toggle(cm.display.scroller,"drop",funcs.drop);}}
function wrappingChanged(cm){if(cm.options.lineWrapping){addClass(cm.display.wrapper,"CodeMirror-wrap");cm.display.sizer.style.minWidth="";cm.display.sizerWidth=null;}else{rmClass(cm.display.wrapper,"CodeMirror-wrap");findMaxLine(cm);}
estimateLineHeights(cm);regChange(cm);clearCaches(cm);setTimeout(function(){return updateScrollbars(cm);},100);}
function CodeMirror(place,options){var this$1=this;if(!(this instanceof CodeMirror)){return new CodeMirror(place,options)}
this.options=options=options?copyObj(options):{};copyObj(defaults,options,false);var doc=options.value;if(typeof doc=="string"){doc=new Doc(doc,options.mode,null,options.lineSeparator,options.direction);}
else if(options.mode){doc.modeOption=options.mode;}
this.doc=doc;var input=new CodeMirror.inputStyles[options.inputStyle](this);var display=this.display=new Display(place,doc,input,options);display.wrapper.CodeMirror=this;themeChanged(this);if(options.lineWrapping)
{this.display.wrapper.className+=" CodeMirror-wrap";}
initScrollbars(this);this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:false,delayingBlurEvent:false,focused:false,suppressEdits:false,pasteIncoming:-1,cutIncoming:-1,selectingText:false,draggingText:false,highlight:new Delayed(),keySeq:null,specialChars:null};if(options.autofocus&&!mobile){display.input.focus();}
if(ie&&ie_version<11){setTimeout(function(){return this$1.display.input.reset(true);},20);}
registerEventHandlers(this);ensureGlobalHandlers();startOperation(this);this.curOp.forceUpdate=true;attachDoc(this,doc);if((options.autofocus&&!mobile)||this.hasFocus())
{setTimeout(bind(onFocus,this),20);}
else
{onBlur(this);}
for(var opt in optionHandlers){if(optionHandlers.hasOwnProperty(opt))
{optionHandlers[opt](this,options[opt],Init);}}
maybeUpdateLineNumberWidth(this);if(options.finishInit){options.finishInit(this);}
for(var i=0;i<initHooks.length;++i){initHooks[i](this);}
endOperation(this);if(webkit&&options.lineWrapping&&getComputedStyle(display.lineDiv).textRendering=="optimizelegibility")
{display.lineDiv.style.textRendering="auto";}}
CodeMirror.defaults=defaults;CodeMirror.optionHandlers=optionHandlers;function registerEventHandlers(cm){var d=cm.display;on(d.scroller,"mousedown",operation(cm,onMouseDown));if(ie&&ie_version<11)
{on(d.scroller,"dblclick",operation(cm,function(e){if(signalDOMEvent(cm,e)){return}
var pos=posFromMouse(cm,e);if(!pos||clickInGutter(cm,e)||eventInWidget(cm.display,e)){return}
e_preventDefault(e);var word=cm.findWordAt(pos);extendSelection(cm.doc,word.anchor,word.head);}));}
else
{on(d.scroller,"dblclick",function(e){return signalDOMEvent(cm,e)||e_preventDefault(e);});}
on(d.scroller,"contextmenu",function(e){return onContextMenu(cm,e);});var touchFinished,prevTouch={end:0};function finishTouch(){if(d.activeTouch){touchFinished=setTimeout(function(){return d.activeTouch=null;},1000);prevTouch=d.activeTouch;prevTouch.end=+new Date;}}
function isMouseLikeTouchEvent(e){if(e.touches.length!=1){return false}
var touch=e.touches[0];return touch.radiusX<=1&&touch.radiusY<=1}
function farAway(touch,other){if(other.left==null){return true}
var dx=other.left-touch.left,dy=other.top-touch.top;return dx*dx+dy*dy>20*20}
on(d.scroller,"touchstart",function(e){if(!signalDOMEvent(cm,e)&&!isMouseLikeTouchEvent(e)&&!clickInGutter(cm,e)){d.input.ensurePolled();clearTimeout(touchFinished);var now=+new Date;d.activeTouch={start:now,moved:false,prev:now-prevTouch.end<=300?prevTouch:null};if(e.touches.length==1){d.activeTouch.left=e.touches[0].pageX;d.activeTouch.top=e.touches[0].pageY;}}});on(d.scroller,"touchmove",function(){if(d.activeTouch){d.activeTouch.moved=true;}});on(d.scroller,"touchend",function(e){var touch=d.activeTouch;if(touch&&!eventInWidget(d,e)&&touch.left!=null&&!touch.moved&&new Date-touch.start<300){var pos=cm.coordsChar(d.activeTouch,"page"),range;if(!touch.prev||farAway(touch,touch.prev))
{range=new Range(pos,pos);}
else if(!touch.prev.prev||farAway(touch,touch.prev.prev))
{range=cm.findWordAt(pos);}
else
{range=new Range(Pos(pos.line,0),clipPos(cm.doc,Pos(pos.line+1,0)));}
cm.setSelection(range.anchor,range.head);cm.focus();e_preventDefault(e);}
finishTouch();});on(d.scroller,"touchcancel",finishTouch);on(d.scroller,"scroll",function(){if(d.scroller.clientHeight){updateScrollTop(cm,d.scroller.scrollTop);setScrollLeft(cm,d.scroller.scrollLeft,true);signal(cm,"scroll",cm);}});on(d.scroller,"mousewheel",function(e){return onScrollWheel(cm,e);});on(d.scroller,"DOMMouseScroll",function(e){return onScrollWheel(cm,e);});on(d.wrapper,"scroll",function(){return d.wrapper.scrollTop=d.wrapper.scrollLeft=0;});d.dragFunctions={enter:function(e){if(!signalDOMEvent(cm,e)){e_stop(e);}},over:function(e){if(!signalDOMEvent(cm,e)){onDragOver(cm,e);e_stop(e);}},start:function(e){return onDragStart(cm,e);},drop:operation(cm,onDrop),leave:function(e){if(!signalDOMEvent(cm,e)){clearDragCursor(cm);}}};var inp=d.input.getField();on(inp,"keyup",function(e){return onKeyUp.call(cm,e);});on(inp,"keydown",operation(cm,onKeyDown));on(inp,"keypress",operation(cm,onKeyPress));on(inp,"focus",function(e){return onFocus(cm,e);});on(inp,"blur",function(e){return onBlur(cm,e);});}
var initHooks=[];CodeMirror.defineInitHook=function(f){return initHooks.push(f);};function indentLine(cm,n,how,aggressive){var doc=cm.doc,state;if(how==null){how="add";}
if(how=="smart"){if(!doc.mode.indent){how="prev";}
else{state=getContextBefore(cm,n).state;}}
var tabSize=cm.options.tabSize;var line=getLine(doc,n),curSpace=countColumn(line.text,null,tabSize);if(line.stateAfter){line.stateAfter=null;}
var curSpaceString=line.text.match(/^\s*/)[0],indentation;if(!aggressive&&!/\S/.test(line.text)){indentation=0;how="not";}else if(how=="smart"){indentation=doc.mode.indent(state,line.text.slice(curSpaceString.length),line.text);if(indentation==Pass||indentation>150){if(!aggressive){return}
how="prev";}}
if(how=="prev"){if(n>doc.first){indentation=countColumn(getLine(doc,n-1).text,null,tabSize);}
else{indentation=0;}}else if(how=="add"){indentation=curSpace+cm.options.indentUnit;}else if(how=="subtract"){indentation=curSpace-cm.options.indentUnit;}else if(typeof how=="number"){indentation=curSpace+how;}
indentation=Math.max(0,indentation);var indentString="",pos=0;if(cm.options.indentWithTabs)
{for(var i=Math.floor(indentation/tabSize);i;--i){pos+=tabSize;indentString+="\t";}}
if(pos<indentation){indentString+=spaceStr(indentation-pos);}
if(indentString!=curSpaceString){replaceRange(doc,indentString,Pos(n,0),Pos(n,curSpaceString.length),"+input");line.stateAfter=null;return true}else{for(var i$1=0;i$1<doc.sel.ranges.length;i$1++){var range=doc.sel.ranges[i$1];if(range.head.line==n&&range.head.ch<curSpaceString.length){var pos$1=Pos(n,curSpaceString.length);replaceOneSelection(doc,i$1,new Range(pos$1,pos$1));break}}}}
var lastCopied=null;function setLastCopied(newLastCopied){lastCopied=newLastCopied;}
function applyTextInput(cm,inserted,deleted,sel,origin){var doc=cm.doc;cm.display.shift=false;if(!sel){sel=doc.sel;}
var recent=+new Date-200;var paste=origin=="paste"||cm.state.pasteIncoming>recent;var textLines=splitLinesAuto(inserted),multiPaste=null;if(paste&&sel.ranges.length>1){if(lastCopied&&lastCopied.text.join("\n")==inserted){if(sel.ranges.length%lastCopied.text.length==0){multiPaste=[];for(var i=0;i<lastCopied.text.length;i++)
{multiPaste.push(doc.splitLines(lastCopied.text[i]));}}}else if(textLines.length==sel.ranges.length&&cm.options.pasteLinesPerSelection){multiPaste=map(textLines,function(l){return[l];});}}
var updateInput=cm.curOp.updateInput;for(var i$1=sel.ranges.length-1;i$1>=0;i$1--){var range$$1=sel.ranges[i$1];var from=range$$1.from(),to=range$$1.to();if(range$$1.empty()){if(deleted&&deleted>0)
{from=Pos(from.line,from.ch-deleted);}
else if(cm.state.overwrite&&!paste)
{to=Pos(to.line,Math.min(getLine(doc,to.line).text.length,to.ch+lst(textLines).length));}
else if(paste&&lastCopied&&lastCopied.lineWise&&lastCopied.text.join("\n")==inserted)
{from=to=Pos(from.line,0);}}
var changeEvent={from:from,to:to,text:multiPaste?multiPaste[i$1%multiPaste.length]:textLines,origin:origin||(paste?"paste":cm.state.cutIncoming>recent?"cut":"+input")};makeChange(cm.doc,changeEvent);signalLater(cm,"inputRead",cm,changeEvent);}
if(inserted&&!paste)
{triggerElectric(cm,inserted);}
ensureCursorVisible(cm);if(cm.curOp.updateInput<2){cm.curOp.updateInput=updateInput;}
cm.curOp.typing=true;cm.state.pasteIncoming=cm.state.cutIncoming=-1;}
function handlePaste(e,cm){var pasted=e.clipboardData&&e.clipboardData.getData("Text");if(pasted){e.preventDefault();if(!cm.isReadOnly()&&!cm.options.disableInput)
{runInOp(cm,function(){return applyTextInput(cm,pasted,0,null,"paste");});}
return true}}
function triggerElectric(cm,inserted){if(!cm.options.electricChars||!cm.options.smartIndent){return}
var sel=cm.doc.sel;for(var i=sel.ranges.length-1;i>=0;i--){var range$$1=sel.ranges[i];if(range$$1.head.ch>100||(i&&sel.ranges[i-1].head.line==range$$1.head.line)){continue}
var mode=cm.getModeAt(range$$1.head);var indented=false;if(mode.electricChars){for(var j=0;j<mode.electricChars.length;j++)
{if(inserted.indexOf(mode.electricChars.charAt(j))>-1){indented=indentLine(cm,range$$1.head.line,"smart");break}}}else if(mode.electricInput){if(mode.electricInput.test(getLine(cm.doc,range$$1.head.line).text.slice(0,range$$1.head.ch)))
{indented=indentLine(cm,range$$1.head.line,"smart");}}
if(indented){signalLater(cm,"electricInput",cm,range$$1.head.line);}}}
function copyableRanges(cm){var text=[],ranges=[];for(var i=0;i<cm.doc.sel.ranges.length;i++){var line=cm.doc.sel.ranges[i].head.line;var lineRange={anchor:Pos(line,0),head:Pos(line+1,0)};ranges.push(lineRange);text.push(cm.getRange(lineRange.anchor,lineRange.head));}
return{text:text,ranges:ranges}}
function disableBrowserMagic(field,spellcheck,autocorrect,autocapitalize){field.setAttribute("autocorrect",autocorrect?"":"off");field.setAttribute("autocapitalize",autocapitalize?"":"off");field.setAttribute("spellcheck",!!spellcheck);}
function hiddenTextarea(){var te=elt("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none");var div=elt("div",[te],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");if(webkit){te.style.width="1000px";}
else{te.setAttribute("wrap","off");}
if(ios){te.style.border="1px solid black";}
disableBrowserMagic(te);return div}
function addEditorMethods(CodeMirror){var optionHandlers=CodeMirror.optionHandlers;var helpers=CodeMirror.helpers={};CodeMirror.prototype={constructor:CodeMirror,focus:function(){window.focus();this.display.input.focus();},setOption:function(option,value){var options=this.options,old=options[option];if(options[option]==value&&option!="mode"){return}
options[option]=value;if(optionHandlers.hasOwnProperty(option))
{operation(this,optionHandlers[option])(this,value,old);}
signal(this,"optionChange",this,option);},getOption:function(option){return this.options[option]},getDoc:function(){return this.doc},addKeyMap:function(map$$1,bottom){this.state.keyMaps[bottom?"push":"unshift"](getKeyMap(map$$1));},removeKeyMap:function(map$$1){var maps=this.state.keyMaps;for(var i=0;i<maps.length;++i)
{if(maps[i]==map$$1||maps[i].name==map$$1){maps.splice(i,1);return true}}},addOverlay:methodOp(function(spec,options){var mode=spec.token?spec:CodeMirror.getMode(this.options,spec);if(mode.startState){throw new Error("Overlays may not be stateful.")}
insertSorted(this.state.overlays,{mode:mode,modeSpec:spec,opaque:options&&options.opaque,priority:(options&&options.priority)||0},function(overlay){return overlay.priority;});this.state.modeGen++;regChange(this);}),removeOverlay:methodOp(function(spec){var overlays=this.state.overlays;for(var i=0;i<overlays.length;++i){var cur=overlays[i].modeSpec;if(cur==spec||typeof spec=="string"&&cur.name==spec){overlays.splice(i,1);this.state.modeGen++;regChange(this);return}}}),indentLine:methodOp(function(n,dir,aggressive){if(typeof dir!="string"&&typeof dir!="number"){if(dir==null){dir=this.options.smartIndent?"smart":"prev";}
else{dir=dir?"add":"subtract";}}
if(isLine(this.doc,n)){indentLine(this,n,dir,aggressive);}}),indentSelection:methodOp(function(how){var ranges=this.doc.sel.ranges,end=-1;for(var i=0;i<ranges.length;i++){var range$$1=ranges[i];if(!range$$1.empty()){var from=range$$1.from(),to=range$$1.to();var start=Math.max(end,from.line);end=Math.min(this.lastLine(),to.line-(to.ch?0:1))+1;for(var j=start;j<end;++j)
{indentLine(this,j,how);}
var newRanges=this.doc.sel.ranges;if(from.ch==0&&ranges.length==newRanges.length&&newRanges[i].from().ch>0)
{replaceOneSelection(this.doc,i,new Range(from,newRanges[i].to()),sel_dontScroll);}}else if(range$$1.head.line>end){indentLine(this,range$$1.head.line,how,true);end=range$$1.head.line;if(i==this.doc.sel.primIndex){ensureCursorVisible(this);}}}}),getTokenAt:function(pos,precise){return takeToken(this,pos,precise)},getLineTokens:function(line,precise){return takeToken(this,Pos(line),precise,true)},getTokenTypeAt:function(pos){pos=clipPos(this.doc,pos);var styles=getLineStyles(this,getLine(this.doc,pos.line));var before=0,after=(styles.length-1)/2,ch=pos.ch;var type;if(ch==0){type=styles[2];}
else{for(;;){var mid=(before+after)>>1;if((mid?styles[mid*2-1]:0)>=ch){after=mid;}
else if(styles[mid*2+1]<ch){before=mid+1;}
else{type=styles[mid*2+2];break}}}
var cut=type?type.indexOf("overlay "):-1;return cut<0?type:cut==0?null:type.slice(0,cut-1)},getModeAt:function(pos){var mode=this.doc.mode;if(!mode.innerMode){return mode}
return CodeMirror.innerMode(mode,this.getTokenAt(pos).state).mode},getHelper:function(pos,type){return this.getHelpers(pos,type)[0]},getHelpers:function(pos,type){var found=[];if(!helpers.hasOwnProperty(type)){return found}
var help=helpers[type],mode=this.getModeAt(pos);if(typeof mode[type]=="string"){if(help[mode[type]]){found.push(help[mode[type]]);}}else if(mode[type]){for(var i=0;i<mode[type].length;i++){var val=help[mode[type][i]];if(val){found.push(val);}}}else if(mode.helperType&&help[mode.helperType]){found.push(help[mode.helperType]);}else if(help[mode.name]){found.push(help[mode.name]);}
for(var i$1=0;i$1<help._global.length;i$1++){var cur=help._global[i$1];if(cur.pred(mode,this)&&indexOf(found,cur.val)==-1)
{found.push(cur.val);}}
return found},getStateAfter:function(line,precise){var doc=this.doc;line=clipLine(doc,line==null?doc.first+doc.size-1:line);return getContextBefore(this,line+1,precise).state},cursorCoords:function(start,mode){var pos,range$$1=this.doc.sel.primary();if(start==null){pos=range$$1.head;}
else if(typeof start=="object"){pos=clipPos(this.doc,start);}
else{pos=start?range$$1.from():range$$1.to();}
return cursorCoords(this,pos,mode||"page")},charCoords:function(pos,mode){return charCoords(this,clipPos(this.doc,pos),mode||"page")},coordsChar:function(coords,mode){coords=fromCoordSystem(this,coords,mode||"page");return coordsChar(this,coords.left,coords.top)},lineAtHeight:function(height,mode){height=fromCoordSystem(this,{top:height,left:0},mode||"page").top;return lineAtHeight(this.doc,height+this.display.viewOffset)},heightAtLine:function(line,mode,includeWidgets){var end=false,lineObj;if(typeof line=="number"){var last=this.doc.first+this.doc.size-1;if(line<this.doc.first){line=this.doc.first;}
else if(line>last){line=last;end=true;}
lineObj=getLine(this.doc,line);}else{lineObj=line;}
return intoCoordSystem(this,lineObj,{top:0,left:0},mode||"page",includeWidgets||end).top+
(end?this.doc.height-heightAtLine(lineObj):0)},defaultTextHeight:function(){return textHeight(this.display)},defaultCharWidth:function(){return charWidth(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(pos,node,scroll,vert,horiz){var display=this.display;pos=cursorCoords(this,clipPos(this.doc,pos));var top=pos.bottom,left=pos.left;node.style.position="absolute";node.setAttribute("cm-ignore-events","true");this.display.input.setUneditable(node);display.sizer.appendChild(node);if(vert=="over"){top=pos.top;}else if(vert=="above"||vert=="near"){var vspace=Math.max(display.wrapper.clientHeight,this.doc.height),hspace=Math.max(display.sizer.clientWidth,display.lineSpace.clientWidth);if((vert=='above'||pos.bottom+node.offsetHeight>vspace)&&pos.top>node.offsetHeight)
{top=pos.top-node.offsetHeight;}
else if(pos.bottom+node.offsetHeight<=vspace)
{top=pos.bottom;}
if(left+node.offsetWidth>hspace)
{left=hspace-node.offsetWidth;}}
node.style.top=top+"px";node.style.left=node.style.right="";if(horiz=="right"){left=display.sizer.clientWidth-node.offsetWidth;node.style.right="0px";}else{if(horiz=="left"){left=0;}
else if(horiz=="middle"){left=(display.sizer.clientWidth-node.offsetWidth)/2;}
node.style.left=left+"px";}
if(scroll)
{scrollIntoView(this,{left:left,top:top,right:left+node.offsetWidth,bottom:top+node.offsetHeight});}},triggerOnKeyDown:methodOp(onKeyDown),triggerOnKeyPress:methodOp(onKeyPress),triggerOnKeyUp:onKeyUp,triggerOnMouseDown:methodOp(onMouseDown),execCommand:function(cmd){if(commands.hasOwnProperty(cmd))
{return commands[cmd].call(null,this)}},triggerElectric:methodOp(function(text){triggerElectric(this,text);}),findPosH:function(from,amount,unit,visually){var dir=1;if(amount<0){dir=-1;amount=-amount;}
var cur=clipPos(this.doc,from);for(var i=0;i<amount;++i){cur=findPosH(this.doc,cur,dir,unit,visually);if(cur.hitSide){break}}
return cur},moveH:methodOp(function(dir,unit){var this$1=this;this.extendSelectionsBy(function(range$$1){if(this$1.display.shift||this$1.doc.extend||range$$1.empty())
{return findPosH(this$1.doc,range$$1.head,dir,unit,this$1.options.rtlMoveVisually)}
else
{return dir<0?range$$1.from():range$$1.to()}},sel_move);}),deleteH:methodOp(function(dir,unit){var sel=this.doc.sel,doc=this.doc;if(sel.somethingSelected())
{doc.replaceSelection("",null,"+delete");}
else
{deleteNearSelection(this,function(range$$1){var other=findPosH(doc,range$$1.head,dir,unit,false);return dir<0?{from:other,to:range$$1.head}:{from:range$$1.head,to:other}});}}),findPosV:function(from,amount,unit,goalColumn){var dir=1,x=goalColumn;if(amount<0){dir=-1;amount=-amount;}
var cur=clipPos(this.doc,from);for(var i=0;i<amount;++i){var coords=cursorCoords(this,cur,"div");if(x==null){x=coords.left;}
else{coords.left=x;}
cur=findPosV(this,coords,dir,unit);if(cur.hitSide){break}}
return cur},moveV:methodOp(function(dir,unit){var this$1=this;var doc=this.doc,goals=[];var collapse=!this.display.shift&&!doc.extend&&doc.sel.somethingSelected();doc.extendSelectionsBy(function(range$$1){if(collapse)
{return dir<0?range$$1.from():range$$1.to()}
var headPos=cursorCoords(this$1,range$$1.head,"div");if(range$$1.goalColumn!=null){headPos.left=range$$1.goalColumn;}
goals.push(headPos.left);var pos=findPosV(this$1,headPos,dir,unit);if(unit=="page"&&range$$1==doc.sel.primary())
{addToScrollTop(this$1,charCoords(this$1,pos,"div").top-headPos.top);}
return pos},sel_move);if(goals.length){for(var i=0;i<doc.sel.ranges.length;i++)
{doc.sel.ranges[i].goalColumn=goals[i];}}}),findWordAt:function(pos){var doc=this.doc,line=getLine(doc,pos.line).text;var start=pos.ch,end=pos.ch;if(line){var helper=this.getHelper(pos,"wordChars");if((pos.sticky=="before"||end==line.length)&&start){--start;}else{++end;}
var startChar=line.charAt(start);var check=isWordChar(startChar,helper)?function(ch){return isWordChar(ch,helper);}:/\s/.test(startChar)?function(ch){return/\s/.test(ch);}:function(ch){return(!/\s/.test(ch)&&!isWordChar(ch));};while(start>0&&check(line.charAt(start-1))){--start;}
while(end<line.length&&check(line.charAt(end))){++end;}}
return new Range(Pos(pos.line,start),Pos(pos.line,end))},toggleOverwrite:function(value){if(value!=null&&value==this.state.overwrite){return}
if(this.state.overwrite=!this.state.overwrite)
{addClass(this.display.cursorDiv,"CodeMirror-overwrite");}
else
{rmClass(this.display.cursorDiv,"CodeMirror-overwrite");}
signal(this,"overwriteToggle",this,this.state.overwrite);},hasFocus:function(){return this.display.input.getField()==activeElt()},isReadOnly:function(){return!!(this.options.readOnly||this.doc.cantEdit)},scrollTo:methodOp(function(x,y){scrollToCoords(this,x,y);}),getScrollInfo:function(){var scroller=this.display.scroller;return{left:scroller.scrollLeft,top:scroller.scrollTop,height:scroller.scrollHeight-scrollGap(this)-this.display.barHeight,width:scroller.scrollWidth-scrollGap(this)-this.display.barWidth,clientHeight:displayHeight(this),clientWidth:displayWidth(this)}},scrollIntoView:methodOp(function(range$$1,margin){if(range$$1==null){range$$1={from:this.doc.sel.primary().head,to:null};if(margin==null){margin=this.options.cursorScrollMargin;}}else if(typeof range$$1=="number"){range$$1={from:Pos(range$$1,0),to:null};}else if(range$$1.from==null){range$$1={from:range$$1,to:null};}
if(!range$$1.to){range$$1.to=range$$1.from;}
range$$1.margin=margin||0;if(range$$1.from.line!=null){scrollToRange(this,range$$1);}else{scrollToCoordsRange(this,range$$1.from,range$$1.to,range$$1.margin);}}),setSize:methodOp(function(width,height){var this$1=this;var interpret=function(val){return typeof val=="number"||/^\d+$/.test(String(val))?val+"px":val;};if(width!=null){this.display.wrapper.style.width=interpret(width);}
if(height!=null){this.display.wrapper.style.height=interpret(height);}
if(this.options.lineWrapping){clearLineMeasurementCache(this);}
var lineNo$$1=this.display.viewFrom;this.doc.iter(lineNo$$1,this.display.viewTo,function(line){if(line.widgets){for(var i=0;i<line.widgets.length;i++)
{if(line.widgets[i].noHScroll){regLineChange(this$1,lineNo$$1,"widget");break}}}
++lineNo$$1;});this.curOp.forceUpdate=true;signal(this,"refresh",this);}),operation:function(f){return runInOp(this,f)},startOperation:function(){return startOperation(this)},endOperation:function(){return endOperation(this)},refresh:methodOp(function(){var oldHeight=this.display.cachedTextHeight;regChange(this);this.curOp.forceUpdate=true;clearCaches(this);scrollToCoords(this,this.doc.scrollLeft,this.doc.scrollTop);updateGutterSpace(this.display);if(oldHeight==null||Math.abs(oldHeight-textHeight(this.display))>.5)
{estimateLineHeights(this);}
signal(this,"refresh",this);}),swapDoc:methodOp(function(doc){var old=this.doc;old.cm=null;if(this.state.selectingText){this.state.selectingText();}
attachDoc(this,doc);clearCaches(this);this.display.input.reset();scrollToCoords(this,doc.scrollLeft,doc.scrollTop);this.curOp.forceScroll=true;signalLater(this,"swapDoc",this,old);return old}),phrase:function(phraseText){var phrases=this.options.phrases;return phrases&&Object.prototype.hasOwnProperty.call(phrases,phraseText)?phrases[phraseText]:phraseText},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}};eventMixin(CodeMirror);CodeMirror.registerHelper=function(type,name,value){if(!helpers.hasOwnProperty(type)){helpers[type]=CodeMirror[type]={_global:[]};}
helpers[type][name]=value;};CodeMirror.registerGlobalHelper=function(type,name,predicate,value){CodeMirror.registerHelper(type,name,value);helpers[type]._global.push({pred:predicate,val:value});};}
function findPosH(doc,pos,dir,unit,visually){var oldPos=pos;var origDir=dir;var lineObj=getLine(doc,pos.line);function findNextLine(){var l=pos.line+dir;if(l<doc.first||l>=doc.first+doc.size){return false}
pos=new Pos(l,pos.ch,pos.sticky);return lineObj=getLine(doc,l)}
function moveOnce(boundToLine){var next;if(visually){next=moveVisually(doc.cm,lineObj,pos,dir);}else{next=moveLogically(lineObj,pos,dir);}
if(next==null){if(!boundToLine&&findNextLine())
{pos=endOfLine(visually,doc.cm,lineObj,pos.line,dir);}
else
{return false}}else{pos=next;}
return true}
if(unit=="char"){moveOnce();}else if(unit=="column"){moveOnce(true);}else if(unit=="word"||unit=="group"){var sawType=null,group=unit=="group";var helper=doc.cm&&doc.cm.getHelper(pos,"wordChars");for(var first=true;;first=false){if(dir<0&&!moveOnce(!first)){break}
var cur=lineObj.text.charAt(pos.ch)||"\n";var type=isWordChar(cur,helper)?"w":group&&cur=="\n"?"n":!group||/\s/.test(cur)?null:"p";if(group&&!first&&!type){type="s";}
if(sawType&&sawType!=type){if(dir<0){dir=1;moveOnce();pos.sticky="after";}
break}
if(type){sawType=type;}
if(dir>0&&!moveOnce(!first)){break}}}
var result=skipAtomic(doc,pos,oldPos,origDir,true);if(equalCursorPos(oldPos,result)){result.hitSide=true;}
return result}
function findPosV(cm,pos,dir,unit){var doc=cm.doc,x=pos.left,y;if(unit=="page"){var pageSize=Math.min(cm.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);var moveAmount=Math.max(pageSize-.5*textHeight(cm.display),3);y=(dir>0?pos.bottom:pos.top)+dir*moveAmount;}else if(unit=="line"){y=dir>0?pos.bottom+3:pos.top-3;}
var target;for(;;){target=coordsChar(cm,x,y);if(!target.outside){break}
if(dir<0?y<=0:y>=doc.height){target.hitSide=true;break}
y+=dir*5;}
return target}
var ContentEditableInput=function(cm){this.cm=cm;this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null;this.polling=new Delayed();this.composing=null;this.gracePeriod=false;this.readDOMTimeout=null;};ContentEditableInput.prototype.init=function(display){var this$1=this;var input=this,cm=input.cm;var div=input.div=display.lineDiv;disableBrowserMagic(div,cm.options.spellcheck,cm.options.autocorrect,cm.options.autocapitalize);on(div,"paste",function(e){if(signalDOMEvent(cm,e)||handlePaste(e,cm)){return}
if(ie_version<=11){setTimeout(operation(cm,function(){return this$1.updateFromDOM();}),20);}});on(div,"compositionstart",function(e){this$1.composing={data:e.data,done:false};});on(div,"compositionupdate",function(e){if(!this$1.composing){this$1.composing={data:e.data,done:false};}});on(div,"compositionend",function(e){if(this$1.composing){if(e.data!=this$1.composing.data){this$1.readFromDOMSoon();}
this$1.composing.done=true;}});on(div,"touchstart",function(){return input.forceCompositionEnd();});on(div,"input",function(){if(!this$1.composing){this$1.readFromDOMSoon();}});function onCopyCut(e){if(signalDOMEvent(cm,e)){return}
if(cm.somethingSelected()){setLastCopied({lineWise:false,text:cm.getSelections()});if(e.type=="cut"){cm.replaceSelection("",null,"cut");}}else if(!cm.options.lineWiseCopyCut){return}else{var ranges=copyableRanges(cm);setLastCopied({lineWise:true,text:ranges.text});if(e.type=="cut"){cm.operation(function(){cm.setSelections(ranges.ranges,0,sel_dontScroll);cm.replaceSelection("",null,"cut");});}}
if(e.clipboardData){e.clipboardData.clearData();var content=lastCopied.text.join("\n");e.clipboardData.setData("Text",content);if(e.clipboardData.getData("Text")==content){e.preventDefault();return}}
var kludge=hiddenTextarea(),te=kludge.firstChild;cm.display.lineSpace.insertBefore(kludge,cm.display.lineSpace.firstChild);te.value=lastCopied.text.join("\n");var hadFocus=document.activeElement;selectInput(te);setTimeout(function(){cm.display.lineSpace.removeChild(kludge);hadFocus.focus();if(hadFocus==div){input.showPrimarySelection();}},50);}
on(div,"copy",onCopyCut);on(div,"cut",onCopyCut);};ContentEditableInput.prototype.prepareSelection=function(){var result=prepareSelection(this.cm,false);result.focus=this.cm.state.focused;return result};ContentEditableInput.prototype.showSelection=function(info,takeFocus){if(!info||!this.cm.display.view.length){return}
if(info.focus||takeFocus){this.showPrimarySelection();}
this.showMultipleSelections(info);};ContentEditableInput.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()};ContentEditableInput.prototype.showPrimarySelection=function(){var sel=this.getSelection(),cm=this.cm,prim=cm.doc.sel.primary();var from=prim.from(),to=prim.to();if(cm.display.viewTo==cm.display.viewFrom||from.line>=cm.display.viewTo||to.line<cm.display.viewFrom){sel.removeAllRanges();return}
var curAnchor=domToPos(cm,sel.anchorNode,sel.anchorOffset);var curFocus=domToPos(cm,sel.focusNode,sel.focusOffset);if(curAnchor&&!curAnchor.bad&&curFocus&&!curFocus.bad&&cmp(minPos(curAnchor,curFocus),from)==0&&cmp(maxPos(curAnchor,curFocus),to)==0)
{return}
var view=cm.display.view;var start=(from.line>=cm.display.viewFrom&&posToDOM(cm,from))||{node:view[0].measure.map[2],offset:0};var end=to.line<cm.display.viewTo&&posToDOM(cm,to);if(!end){var measure=view[view.length-1].measure;var map$$1=measure.maps?measure.maps[measure.maps.length-1]:measure.map;end={node:map$$1[map$$1.length-1],offset:map$$1[map$$1.length-2]-map$$1[map$$1.length-3]};}
if(!start||!end){sel.removeAllRanges();return}
var old=sel.rangeCount&&sel.getRangeAt(0),rng;try{rng=range(start.node,start.offset,end.offset,end.node);}
catch(e){}
if(rng){if(!gecko&&cm.state.focused){sel.collapse(start.node,start.offset);if(!rng.collapsed){sel.removeAllRanges();sel.addRange(rng);}}else{sel.removeAllRanges();sel.addRange(rng);}
if(old&&sel.anchorNode==null){sel.addRange(old);}
else if(gecko){this.startGracePeriod();}}
this.rememberSelection();};ContentEditableInput.prototype.startGracePeriod=function(){var this$1=this;clearTimeout(this.gracePeriod);this.gracePeriod=setTimeout(function(){this$1.gracePeriod=false;if(this$1.selectionChanged())
{this$1.cm.operation(function(){return this$1.cm.curOp.selectionChanged=true;});}},20);};ContentEditableInput.prototype.showMultipleSelections=function(info){removeChildrenAndAdd(this.cm.display.cursorDiv,info.cursors);removeChildrenAndAdd(this.cm.display.selectionDiv,info.selection);};ContentEditableInput.prototype.rememberSelection=function(){var sel=this.getSelection();this.lastAnchorNode=sel.anchorNode;this.lastAnchorOffset=sel.anchorOffset;this.lastFocusNode=sel.focusNode;this.lastFocusOffset=sel.focusOffset;};ContentEditableInput.prototype.selectionInEditor=function(){var sel=this.getSelection();if(!sel.rangeCount){return false}
var node=sel.getRangeAt(0).commonAncestorContainer;return contains(this.div,node)};ContentEditableInput.prototype.focus=function(){if(this.cm.options.readOnly!="nocursor"){if(!this.selectionInEditor())
{this.showSelection(this.prepareSelection(),true);}
this.div.focus();}};ContentEditableInput.prototype.blur=function(){this.div.blur();};ContentEditableInput.prototype.getField=function(){return this.div};ContentEditableInput.prototype.supportsTouch=function(){return true};ContentEditableInput.prototype.receivedFocus=function(){var input=this;if(this.selectionInEditor())
{this.pollSelection();}
else
{runInOp(this.cm,function(){return input.cm.curOp.selectionChanged=true;});}
function poll(){if(input.cm.state.focused){input.pollSelection();input.polling.set(input.cm.options.pollInterval,poll);}}
this.polling.set(this.cm.options.pollInterval,poll);};ContentEditableInput.prototype.selectionChanged=function(){var sel=this.getSelection();return sel.anchorNode!=this.lastAnchorNode||sel.anchorOffset!=this.lastAnchorOffset||sel.focusNode!=this.lastFocusNode||sel.focusOffset!=this.lastFocusOffset};ContentEditableInput.prototype.pollSelection=function(){if(this.readDOMTimeout!=null||this.gracePeriod||!this.selectionChanged()){return}
var sel=this.getSelection(),cm=this.cm;if(android&&chrome&&this.cm.display.gutterSpecs.length&&isInGutter(sel.anchorNode)){this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs});this.blur();this.focus();return}
if(this.composing){return}
this.rememberSelection();var anchor=domToPos(cm,sel.anchorNode,sel.anchorOffset);var head=domToPos(cm,sel.focusNode,sel.focusOffset);if(anchor&&head){runInOp(cm,function(){setSelection(cm.doc,simpleSelection(anchor,head),sel_dontScroll);if(anchor.bad||head.bad){cm.curOp.selectionChanged=true;}});}};ContentEditableInput.prototype.pollContent=function(){if(this.readDOMTimeout!=null){clearTimeout(this.readDOMTimeout);this.readDOMTimeout=null;}
var cm=this.cm,display=cm.display,sel=cm.doc.sel.primary();var from=sel.from(),to=sel.to();if(from.ch==0&&from.line>cm.firstLine())
{from=Pos(from.line-1,getLine(cm.doc,from.line-1).length);}
if(to.ch==getLine(cm.doc,to.line).text.length&&to.line<cm.lastLine())
{to=Pos(to.line+1,0);}
if(from.line<display.viewFrom||to.line>display.viewTo-1){return false}
var fromIndex,fromLine,fromNode;if(from.line==display.viewFrom||(fromIndex=findViewIndex(cm,from.line))==0){fromLine=lineNo(display.view[0].line);fromNode=display.view[0].node;}else{fromLine=lineNo(display.view[fromIndex].line);fromNode=display.view[fromIndex-1].node.nextSibling;}
var toIndex=findViewIndex(cm,to.line);var toLine,toNode;if(toIndex==display.view.length-1){toLine=display.viewTo-1;toNode=display.lineDiv.lastChild;}else{toLine=lineNo(display.view[toIndex+1].line)-1;toNode=display.view[toIndex+1].node.previousSibling;}
if(!fromNode){return false}
var newText=cm.doc.splitLines(domTextBetween(cm,fromNode,toNode,fromLine,toLine));var oldText=getBetween(cm.doc,Pos(fromLine,0),Pos(toLine,getLine(cm.doc,toLine).text.length));while(newText.length>1&&oldText.length>1){if(lst(newText)==lst(oldText)){newText.pop();oldText.pop();toLine--;}
else if(newText[0]==oldText[0]){newText.shift();oldText.shift();fromLine++;}
else{break}}
var cutFront=0,cutEnd=0;var newTop=newText[0],oldTop=oldText[0],maxCutFront=Math.min(newTop.length,oldTop.length);while(cutFront<maxCutFront&&newTop.charCodeAt(cutFront)==oldTop.charCodeAt(cutFront))
{++cutFront;}
var newBot=lst(newText),oldBot=lst(oldText);var maxCutEnd=Math.min(newBot.length-(newText.length==1?cutFront:0),oldBot.length-(oldText.length==1?cutFront:0));while(cutEnd<maxCutEnd&&newBot.charCodeAt(newBot.length-cutEnd-1)==oldBot.charCodeAt(oldBot.length-cutEnd-1))
{++cutEnd;}
if(newText.length==1&&oldText.length==1&&fromLine==from.line){while(cutFront&&cutFront>from.ch&&newBot.charCodeAt(newBot.length-cutEnd-1)==oldBot.charCodeAt(oldBot.length-cutEnd-1)){cutFront--;cutEnd++;}}
newText[newText.length-1]=newBot.slice(0,newBot.length-cutEnd).replace(/^\u200b+/,"");newText[0]=newText[0].slice(cutFront).replace(/\u200b+$/,"");var chFrom=Pos(fromLine,cutFront);var chTo=Pos(toLine,oldText.length?lst(oldText).length-cutEnd:0);if(newText.length>1||newText[0]||cmp(chFrom,chTo)){replaceRange(cm.doc,newText,chFrom,chTo,"+input");return true}};ContentEditableInput.prototype.ensurePolled=function(){this.forceCompositionEnd();};ContentEditableInput.prototype.reset=function(){this.forceCompositionEnd();};ContentEditableInput.prototype.forceCompositionEnd=function(){if(!this.composing){return}
clearTimeout(this.readDOMTimeout);this.composing=null;this.updateFromDOM();this.div.blur();this.div.focus();};ContentEditableInput.prototype.readFromDOMSoon=function(){var this$1=this;if(this.readDOMTimeout!=null){return}
this.readDOMTimeout=setTimeout(function(){this$1.readDOMTimeout=null;if(this$1.composing){if(this$1.composing.done){this$1.composing=null;}
else{return}}
this$1.updateFromDOM();},80);};ContentEditableInput.prototype.updateFromDOM=function(){var this$1=this;if(this.cm.isReadOnly()||!this.pollContent())
{runInOp(this.cm,function(){return regChange(this$1.cm);});}};ContentEditableInput.prototype.setUneditable=function(node){node.contentEditable="false";};ContentEditableInput.prototype.onKeyPress=function(e){if(e.charCode==0||this.composing){return}
e.preventDefault();if(!this.cm.isReadOnly())
{operation(this.cm,applyTextInput)(this.cm,String.fromCharCode(e.charCode==null?e.keyCode:e.charCode),0);}};ContentEditableInput.prototype.readOnlyChanged=function(val){this.div.contentEditable=String(val!="nocursor");};ContentEditableInput.prototype.onContextMenu=function(){};ContentEditableInput.prototype.resetPosition=function(){};ContentEditableInput.prototype.needsContentAttribute=true;function posToDOM(cm,pos){var view=findViewForLine(cm,pos.line);if(!view||view.hidden){return null}
var line=getLine(cm.doc,pos.line);var info=mapFromLineView(view,line,pos.line);var order=getOrder(line,cm.doc.direction),side="left";if(order){var partPos=getBidiPartAt(order,pos.ch);side=partPos%2?"right":"left";}
var result=nodeAndOffsetInLineMap(info.map,pos.ch,side);result.offset=result.collapse=="right"?result.end:result.start;return result}
function isInGutter(node){for(var scan=node;scan;scan=scan.parentNode)
{if(/CodeMirror-gutter-wrapper/.test(scan.className)){return true}}
return false}
function badPos(pos,bad){if(bad){pos.bad=true;}return pos}
function domTextBetween(cm,from,to,fromLine,toLine){var text="",closing=false,lineSep=cm.doc.lineSeparator(),extraLinebreak=false;function recognizeMarker(id){return function(marker){return marker.id==id;}}
function close(){if(closing){text+=lineSep;if(extraLinebreak){text+=lineSep;}
closing=extraLinebreak=false;}}
function addText(str){if(str){close();text+=str;}}
function walk(node){if(node.nodeType==1){var cmText=node.getAttribute("cm-text");if(cmText){addText(cmText);return}
var markerID=node.getAttribute("cm-marker"),range$$1;if(markerID){var found=cm.findMarks(Pos(fromLine,0),Pos(toLine+1,0),recognizeMarker(+markerID));if(found.length&&(range$$1=found[0].find(0)))
{addText(getBetween(cm.doc,range$$1.from,range$$1.to).join(lineSep));}
return}
if(node.getAttribute("contenteditable")=="false"){return}
var isBlock=/^(pre|div|p|li|table|br)$/i.test(node.nodeName);if(!/^br$/i.test(node.nodeName)&&node.textContent.length==0){return}
if(isBlock){close();}
for(var i=0;i<node.childNodes.length;i++)
{walk(node.childNodes[i]);}
if(/^(pre|p)$/i.test(node.nodeName)){extraLinebreak=true;}
if(isBlock){closing=true;}}else if(node.nodeType==3){addText(node.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "));}}
for(;;){walk(from);if(from==to){break}
from=from.nextSibling;extraLinebreak=false;}
return text}
function domToPos(cm,node,offset){var lineNode;if(node==cm.display.lineDiv){lineNode=cm.display.lineDiv.childNodes[offset];if(!lineNode){return badPos(cm.clipPos(Pos(cm.display.viewTo-1)),true)}
node=null;offset=0;}else{for(lineNode=node;;lineNode=lineNode.parentNode){if(!lineNode||lineNode==cm.display.lineDiv){return null}
if(lineNode.parentNode&&lineNode.parentNode==cm.display.lineDiv){break}}}
for(var i=0;i<cm.display.view.length;i++){var lineView=cm.display.view[i];if(lineView.node==lineNode)
{return locateNodeInLineView(lineView,node,offset)}}}
function locateNodeInLineView(lineView,node,offset){var wrapper=lineView.text.firstChild,bad=false;if(!node||!contains(wrapper,node)){return badPos(Pos(lineNo(lineView.line),0),true)}
if(node==wrapper){bad=true;node=wrapper.childNodes[offset];offset=0;if(!node){var line=lineView.rest?lst(lineView.rest):lineView.line;return badPos(Pos(lineNo(line),line.text.length),bad)}}
var textNode=node.nodeType==3?node:null,topNode=node;if(!textNode&&node.childNodes.length==1&&node.firstChild.nodeType==3){textNode=node.firstChild;if(offset){offset=textNode.nodeValue.length;}}
while(topNode.parentNode!=wrapper){topNode=topNode.parentNode;}
var measure=lineView.measure,maps=measure.maps;function find(textNode,topNode,offset){for(var i=-1;i<(maps?maps.length:0);i++){var map$$1=i<0?measure.map:maps[i];for(var j=0;j<map$$1.length;j+=3){var curNode=map$$1[j+2];if(curNode==textNode||curNode==topNode){var line=lineNo(i<0?lineView.line:lineView.rest[i]);var ch=map$$1[j]+offset;if(offset<0||curNode!=textNode){ch=map$$1[j+(offset?1:0)];}
return Pos(line,ch)}}}}
var found=find(textNode,topNode,offset);if(found){return badPos(found,bad)}
for(var after=topNode.nextSibling,dist=textNode?textNode.nodeValue.length-offset:0;after;after=after.nextSibling){found=find(after,after.firstChild,0);if(found)
{return badPos(Pos(found.line,found.ch-dist),bad)}
else
{dist+=after.textContent.length;}}
for(var before=topNode.previousSibling,dist$1=offset;before;before=before.previousSibling){found=find(before,before.firstChild,-1);if(found)
{return badPos(Pos(found.line,found.ch+dist$1),bad)}
else
{dist$1+=before.textContent.length;}}}
var TextareaInput=function(cm){this.cm=cm;this.prevInput="";this.pollingFast=false;this.polling=new Delayed();this.hasSelection=false;this.composing=null;};TextareaInput.prototype.init=function(display){var this$1=this;var input=this,cm=this.cm;this.createField(display);var te=this.textarea;display.wrapper.insertBefore(this.wrapper,display.wrapper.firstChild);if(ios){te.style.width="0px";}
on(te,"input",function(){if(ie&&ie_version>=9&&this$1.hasSelection){this$1.hasSelection=null;}
input.poll();});on(te,"paste",function(e){if(signalDOMEvent(cm,e)||handlePaste(e,cm)){return}
cm.state.pasteIncoming=+new Date;input.fastPoll();});function prepareCopyCut(e){if(signalDOMEvent(cm,e)){return}
if(cm.somethingSelected()){setLastCopied({lineWise:false,text:cm.getSelections()});}else if(!cm.options.lineWiseCopyCut){return}else{var ranges=copyableRanges(cm);setLastCopied({lineWise:true,text:ranges.text});if(e.type=="cut"){cm.setSelections(ranges.ranges,null,sel_dontScroll);}else{input.prevInput="";te.value=ranges.text.join("\n");selectInput(te);}}
if(e.type=="cut"){cm.state.cutIncoming=+new Date;}}
on(te,"cut",prepareCopyCut);on(te,"copy",prepareCopyCut);on(display.scroller,"paste",function(e){if(eventInWidget(display,e)||signalDOMEvent(cm,e)){return}
if(!te.dispatchEvent){cm.state.pasteIncoming=+new Date;input.focus();return}
var event=new Event("paste");event.clipboardData=e.clipboardData;te.dispatchEvent(event);});on(display.lineSpace,"selectstart",function(e){if(!eventInWidget(display,e)){e_preventDefault(e);}});on(te,"compositionstart",function(){var start=cm.getCursor("from");if(input.composing){input.composing.range.clear();}
input.composing={start:start,range:cm.markText(start,cm.getCursor("to"),{className:"CodeMirror-composing"})};});on(te,"compositionend",function(){if(input.composing){input.poll();input.composing.range.clear();input.composing=null;}});};TextareaInput.prototype.createField=function(_display){this.wrapper=hiddenTextarea();this.textarea=this.wrapper.firstChild;};TextareaInput.prototype.prepareSelection=function(){var cm=this.cm,display=cm.display,doc=cm.doc;var result=prepareSelection(cm);if(cm.options.moveInputWithCursor){var headPos=cursorCoords(cm,doc.sel.primary().head,"div");var wrapOff=display.wrapper.getBoundingClientRect(),lineOff=display.lineDiv.getBoundingClientRect();result.teTop=Math.max(0,Math.min(display.wrapper.clientHeight-10,headPos.top+lineOff.top-wrapOff.top));result.teLeft=Math.max(0,Math.min(display.wrapper.clientWidth-10,headPos.left+lineOff.left-wrapOff.left));}
return result};TextareaInput.prototype.showSelection=function(drawn){var cm=this.cm,display=cm.display;removeChildrenAndAdd(display.cursorDiv,drawn.cursors);removeChildrenAndAdd(display.selectionDiv,drawn.selection);if(drawn.teTop!=null){this.wrapper.style.top=drawn.teTop+"px";this.wrapper.style.left=drawn.teLeft+"px";}};TextareaInput.prototype.reset=function(typing){if(this.contextMenuPending||this.composing){return}
var cm=this.cm;if(cm.somethingSelected()){this.prevInput="";var content=cm.getSelection();this.textarea.value=content;if(cm.state.focused){selectInput(this.textarea);}
if(ie&&ie_version>=9){this.hasSelection=content;}}else if(!typing){this.prevInput=this.textarea.value="";if(ie&&ie_version>=9){this.hasSelection=null;}}};TextareaInput.prototype.getField=function(){return this.textarea};TextareaInput.prototype.supportsTouch=function(){return false};TextareaInput.prototype.focus=function(){if(this.cm.options.readOnly!="nocursor"&&(!mobile||activeElt()!=this.textarea)){try{this.textarea.focus();}
catch(e){}}};TextareaInput.prototype.blur=function(){this.textarea.blur();};TextareaInput.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0;};TextareaInput.prototype.receivedFocus=function(){this.slowPoll();};TextareaInput.prototype.slowPoll=function(){var this$1=this;if(this.pollingFast){return}
this.polling.set(this.cm.options.pollInterval,function(){this$1.poll();if(this$1.cm.state.focused){this$1.slowPoll();}});};TextareaInput.prototype.fastPoll=function(){var missed=false,input=this;input.pollingFast=true;function p(){var changed=input.poll();if(!changed&&!missed){missed=true;input.polling.set(60,p);}
else{input.pollingFast=false;input.slowPoll();}}
input.polling.set(20,p);};TextareaInput.prototype.poll=function(){var this$1=this;var cm=this.cm,input=this.textarea,prevInput=this.prevInput;if(this.contextMenuPending||!cm.state.focused||(hasSelection(input)&&!prevInput&&!this.composing)||cm.isReadOnly()||cm.options.disableInput||cm.state.keySeq)
{return false}
var text=input.value;if(text==prevInput&&!cm.somethingSelected()){return false}
if(ie&&ie_version>=9&&this.hasSelection===text||mac&&/[\uf700-\uf7ff]/.test(text)){cm.display.input.reset();return false}
if(cm.doc.sel==cm.display.selForContextMenu){var first=text.charCodeAt(0);if(first==0x200b&&!prevInput){prevInput="\u200b";}
if(first==0x21da){this.reset();return this.cm.execCommand("undo")}}
var same=0,l=Math.min(prevInput.length,text.length);while(same<l&&prevInput.charCodeAt(same)==text.charCodeAt(same)){++same;}
runInOp(cm,function(){applyTextInput(cm,text.slice(same),prevInput.length-same,null,this$1.composing?"*compose":null);if(text.length>1000||text.indexOf("\n")>-1){input.value=this$1.prevInput="";}
else{this$1.prevInput=text;}
if(this$1.composing){this$1.composing.range.clear();this$1.composing.range=cm.markText(this$1.composing.start,cm.getCursor("to"),{className:"CodeMirror-composing"});}});return true};TextareaInput.prototype.ensurePolled=function(){if(this.pollingFast&&this.poll()){this.pollingFast=false;}};TextareaInput.prototype.onKeyPress=function(){if(ie&&ie_version>=9){this.hasSelection=null;}
this.fastPoll();};TextareaInput.prototype.onContextMenu=function(e){var input=this,cm=input.cm,display=cm.display,te=input.textarea;if(input.contextMenuPending){input.contextMenuPending();}
var pos=posFromMouse(cm,e),scrollPos=display.scroller.scrollTop;if(!pos||presto){return}
var reset=cm.options.resetSelectionOnContextMenu;if(reset&&cm.doc.sel.contains(pos)==-1)
{operation(cm,setSelection)(cm.doc,simpleSelection(pos),sel_dontScroll);}
var oldCSS=te.style.cssText,oldWrapperCSS=input.wrapper.style.cssText;var wrapperBox=input.wrapper.offsetParent.getBoundingClientRect();input.wrapper.style.cssText="position: static";te.style.cssText="position: absolute; width: 30px; height: 30px;\n      top: "+(e.clientY-wrapperBox.top-5)+"px; left: "+(e.clientX-wrapperBox.left-5)+"px;\n      z-index: 1000; background: "+(ie?"rgba(255, 255, 255, .05)":"transparent")+";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";var oldScrollY;if(webkit){oldScrollY=window.scrollY;}
display.input.focus();if(webkit){window.scrollTo(null,oldScrollY);}
display.input.reset();if(!cm.somethingSelected()){te.value=input.prevInput=" ";}
input.contextMenuPending=rehide;display.selForContextMenu=cm.doc.sel;clearTimeout(display.detectingSelectAll);function prepareSelectAllHack(){if(te.selectionStart!=null){var selected=cm.somethingSelected();var extval="\u200b"+(selected?te.value:"");te.value="\u21da";te.value=extval;input.prevInput=selected?"":"\u200b";te.selectionStart=1;te.selectionEnd=extval.length;display.selForContextMenu=cm.doc.sel;}}
function rehide(){if(input.contextMenuPending!=rehide){return}
input.contextMenuPending=false;input.wrapper.style.cssText=oldWrapperCSS;te.style.cssText=oldCSS;if(ie&&ie_version<9){display.scrollbars.setScrollTop(display.scroller.scrollTop=scrollPos);}
if(te.selectionStart!=null){if(!ie||(ie&&ie_version<9)){prepareSelectAllHack();}
var i=0,poll=function(){if(display.selForContextMenu==cm.doc.sel&&te.selectionStart==0&&te.selectionEnd>0&&input.prevInput=="\u200b"){operation(cm,selectAll)(cm);}else if(i++<10){display.detectingSelectAll=setTimeout(poll,500);}else{display.selForContextMenu=null;display.input.reset();}};display.detectingSelectAll=setTimeout(poll,200);}}
if(ie&&ie_version>=9){prepareSelectAllHack();}
if(captureRightClick){e_stop(e);var mouseup=function(){off(window,"mouseup",mouseup);setTimeout(rehide,20);};on(window,"mouseup",mouseup);}else{setTimeout(rehide,50);}};TextareaInput.prototype.readOnlyChanged=function(val){if(!val){this.reset();}
this.textarea.disabled=val=="nocursor";};TextareaInput.prototype.setUneditable=function(){};TextareaInput.prototype.needsContentAttribute=false;function fromTextArea(textarea,options){options=options?copyObj(options):{};options.value=textarea.value;if(!options.tabindex&&textarea.tabIndex)
{options.tabindex=textarea.tabIndex;}
if(!options.placeholder&&textarea.placeholder)
{options.placeholder=textarea.placeholder;}
if(options.autofocus==null){var hasFocus=activeElt();options.autofocus=hasFocus==textarea||textarea.getAttribute("autofocus")!=null&&hasFocus==document.body;}
function save(){textarea.value=cm.getValue();}
var realSubmit;if(textarea.form){on(textarea.form,"submit",save);if(!options.leaveSubmitMethodAlone){var form=textarea.form;realSubmit=form.submit;try{var wrappedSubmit=form.submit=function(){save();form.submit=realSubmit;form.submit();form.submit=wrappedSubmit;};}catch(e){}}}
options.finishInit=function(cm){cm.save=save;cm.getTextArea=function(){return textarea;};cm.toTextArea=function(){cm.toTextArea=isNaN;save();textarea.parentNode.removeChild(cm.getWrapperElement());textarea.style.display="";if(textarea.form){off(textarea.form,"submit",save);if(typeof textarea.form.submit=="function")
{textarea.form.submit=realSubmit;}}};};textarea.style.display="none";var cm=CodeMirror(function(node){return textarea.parentNode.insertBefore(node,textarea.nextSibling);},options);return cm}
function addLegacyProps(CodeMirror){CodeMirror.off=off;CodeMirror.on=on;CodeMirror.wheelEventPixels=wheelEventPixels;CodeMirror.Doc=Doc;CodeMirror.splitLines=splitLinesAuto;CodeMirror.countColumn=countColumn;CodeMirror.findColumn=findColumn;CodeMirror.isWordChar=isWordCharBasic;CodeMirror.Pass=Pass;CodeMirror.signal=signal;CodeMirror.Line=Line;CodeMirror.changeEnd=changeEnd;CodeMirror.scrollbarModel=scrollbarModel;CodeMirror.Pos=Pos;CodeMirror.cmpPos=cmp;CodeMirror.modes=modes;CodeMirror.mimeModes=mimeModes;CodeMirror.resolveMode=resolveMode;CodeMirror.getMode=getMode;CodeMirror.modeExtensions=modeExtensions;CodeMirror.extendMode=extendMode;CodeMirror.copyState=copyState;CodeMirror.startState=startState;CodeMirror.innerMode=innerMode;CodeMirror.commands=commands;CodeMirror.keyMap=keyMap;CodeMirror.keyName=keyName;CodeMirror.isModifierKey=isModifierKey;CodeMirror.lookupKey=lookupKey;CodeMirror.normalizeKeyMap=normalizeKeyMap;CodeMirror.StringStream=StringStream;CodeMirror.SharedTextMarker=SharedTextMarker;CodeMirror.TextMarker=TextMarker;CodeMirror.LineWidget=LineWidget;CodeMirror.e_preventDefault=e_preventDefault;CodeMirror.e_stopPropagation=e_stopPropagation;CodeMirror.e_stop=e_stop;CodeMirror.addClass=addClass;CodeMirror.contains=contains;CodeMirror.rmClass=rmClass;CodeMirror.keyNames=keyNames;}
defineOptions(CodeMirror);addEditorMethods(CodeMirror);var dontDelegate="iter insert remove copy getEditor constructor".split(" ");for(var prop in Doc.prototype){if(Doc.prototype.hasOwnProperty(prop)&&indexOf(dontDelegate,prop)<0)
{CodeMirror.prototype[prop]=(function(method){return function(){return method.apply(this.doc,arguments)}})(Doc.prototype[prop]);}}
eventMixin(Doc);CodeMirror.inputStyles={"textarea":TextareaInput,"contenteditable":ContentEditableInput};CodeMirror.defineMode=function(name){if(!CodeMirror.defaults.mode&&name!="null"){CodeMirror.defaults.mode=name;}
defineMode.apply(this,arguments);};CodeMirror.defineMIME=defineMIME;CodeMirror.defineMode("null",function(){return({token:function(stream){return stream.skipToEnd();}});});CodeMirror.defineMIME("text/plain","null");CodeMirror.defineExtension=function(name,func){CodeMirror.prototype[name]=func;};CodeMirror.defineDocExtension=function(name,func){Doc.prototype[name]=func;};CodeMirror.fromTextArea=fromTextArea;addLegacyProps(CodeMirror);CodeMirror.version="5.48.3";return CodeMirror;})));(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";var noOptions={};var nonWS=/[^\s\u00a0]/;var Pos=CodeMirror.Pos;function firstNonWS(str){var found=str.search(nonWS);return found==-1?0:found;}
CodeMirror.commands.toggleComment=function(cm){cm.toggleComment();};CodeMirror.defineExtension("toggleComment",function(options){if(!options)options=noOptions;var cm=this;var minLine=Infinity,ranges=this.listSelections(),mode=null;for(var i=ranges.length-1;i>=0;i--){var from=ranges[i].from(),to=ranges[i].to();if(from.line>=minLine)continue;if(to.line>=minLine)to=Pos(minLine,0);minLine=from.line;if(mode==null){if(cm.uncomment(from,to,options))mode="un";else{cm.lineComment(from,to,options);mode="line";}}else if(mode=="un"){cm.uncomment(from,to,options);}else{cm.lineComment(from,to,options);}}});function probablyInsideString(cm,pos,line){return/\bstring\b/.test(cm.getTokenTypeAt(Pos(pos.line,0)))&&!/^[\'\"\`]/.test(line)}
function getMode(cm,pos){var mode=cm.getMode()
return mode.useInnerComments===false||!mode.innerMode?mode:cm.getModeAt(pos)}
CodeMirror.defineExtension("lineComment",function(from,to,options){if(!options)options=noOptions;var self=this,mode=getMode(self,from);var firstLine=self.getLine(from.line);if(firstLine==null||probablyInsideString(self,from,firstLine))return;var commentString=options.lineComment||mode.lineComment;if(!commentString){if(options.blockCommentStart||mode.blockCommentStart){options.fullLines=true;self.blockComment(from,to,options);}
return;}
var end=Math.min(to.ch!=0||to.line==from.line?to.line+1:to.line,self.lastLine()+1);var pad=options.padding==null?" ":options.padding;var blankLines=options.commentBlankLines||from.line==to.line;self.operation(function(){if(options.indent){var baseString=null;for(var i=from.line;i<end;++i){var line=self.getLine(i);var whitespace=line.slice(0,firstNonWS(line));if(baseString==null||baseString.length>whitespace.length){baseString=whitespace;}}
for(var i=from.line;i<end;++i){var line=self.getLine(i),cut=baseString.length;if(!blankLines&&!nonWS.test(line))continue;if(line.slice(0,cut)!=baseString)cut=firstNonWS(line);self.replaceRange(baseString+commentString+pad,Pos(i,0),Pos(i,cut));}}else{for(var i=from.line;i<end;++i){if(blankLines||nonWS.test(self.getLine(i)))
self.replaceRange(commentString+pad,Pos(i,0));}}});});CodeMirror.defineExtension("blockComment",function(from,to,options){if(!options)options=noOptions;var self=this,mode=getMode(self,from);var startString=options.blockCommentStart||mode.blockCommentStart;var endString=options.blockCommentEnd||mode.blockCommentEnd;if(!startString||!endString){if((options.lineComment||mode.lineComment)&&options.fullLines!=false)
self.lineComment(from,to,options);return;}
if(/\bcomment\b/.test(self.getTokenTypeAt(Pos(from.line,0))))return
var end=Math.min(to.line,self.lastLine());if(end!=from.line&&to.ch==0&&nonWS.test(self.getLine(end)))--end;var pad=options.padding==null?" ":options.padding;if(from.line>end)return;self.operation(function(){if(options.fullLines!=false){var lastLineHasText=nonWS.test(self.getLine(end));self.replaceRange(pad+endString,Pos(end));self.replaceRange(startString+pad,Pos(from.line,0));var lead=options.blockCommentLead||mode.blockCommentLead;if(lead!=null)for(var i=from.line+1;i<=end;++i)
if(i!=end||lastLineHasText)
self.replaceRange(lead+pad,Pos(i,0));}else{self.replaceRange(endString,to);self.replaceRange(startString,from);}});});CodeMirror.defineExtension("uncomment",function(from,to,options){if(!options)options=noOptions;var self=this,mode=getMode(self,from);var end=Math.min(to.ch!=0||to.line==from.line?to.line:to.line-1,self.lastLine()),start=Math.min(from.line,end);var lineString=options.lineComment||mode.lineComment,lines=[];var pad=options.padding==null?" ":options.padding,didSomething;lineComment:{if(!lineString)break lineComment;for(var i=start;i<=end;++i){var line=self.getLine(i);var found=line.indexOf(lineString);if(found>-1&&!/comment/.test(self.getTokenTypeAt(Pos(i,found+1))))found=-1;if(found==-1&&nonWS.test(line))break lineComment;if(found>-1&&nonWS.test(line.slice(0,found)))break lineComment;lines.push(line);}
self.operation(function(){for(var i=start;i<=end;++i){var line=lines[i-start];var pos=line.indexOf(lineString),endPos=pos+lineString.length;if(pos<0)continue;if(line.slice(endPos,endPos+pad.length)==pad)endPos+=pad.length;didSomething=true;self.replaceRange("",Pos(i,pos),Pos(i,endPos));}});if(didSomething)return true;}
var startString=options.blockCommentStart||mode.blockCommentStart;var endString=options.blockCommentEnd||mode.blockCommentEnd;if(!startString||!endString)return false;var lead=options.blockCommentLead||mode.blockCommentLead;var startLine=self.getLine(start),open=startLine.indexOf(startString)
if(open==-1)return false
var endLine=end==start?startLine:self.getLine(end)
var close=endLine.indexOf(endString,end==start?open+startString.length:0);var insideStart=Pos(start,open+1),insideEnd=Pos(end,close+1)
if(close==-1||!/comment/.test(self.getTokenTypeAt(insideStart))||!/comment/.test(self.getTokenTypeAt(insideEnd))||self.getRange(insideStart,insideEnd,"\n").indexOf(endString)>-1)
return false;var lastStart=startLine.lastIndexOf(startString,from.ch);var firstEnd=lastStart==-1?-1:startLine.slice(0,from.ch).indexOf(endString,lastStart+startString.length);if(lastStart!=-1&&firstEnd!=-1&&firstEnd+endString.length!=from.ch)return false;firstEnd=endLine.indexOf(endString,to.ch);var almostLastStart=endLine.slice(to.ch).lastIndexOf(startString,firstEnd-to.ch);lastStart=(firstEnd==-1||almostLastStart==-1)?-1:to.ch+almostLastStart;if(firstEnd!=-1&&lastStart!=-1&&lastStart!=to.ch)return false;self.operation(function(){self.replaceRange("",Pos(end,close-(pad&&endLine.slice(close-pad.length,close)==pad?pad.length:0)),Pos(end,close+endString.length));var openEnd=open+startString.length;if(pad&&startLine.slice(openEnd,openEnd+pad.length)==pad)openEnd+=pad.length;self.replaceRange("",Pos(start,open),Pos(start,openEnd));if(lead)for(var i=start+1;i<=end;++i){var line=self.getLine(i),found=line.indexOf(lead);if(found==-1||nonWS.test(line.slice(0,found)))continue;var foundEnd=found+lead.length;if(pad&&line.slice(foundEnd,foundEnd+pad.length)==pad)foundEnd+=pad.length;self.replaceRange("",Pos(i,found),Pos(i,foundEnd));}});return true;});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";function doFold(cm,pos,options,force){if(options&&options.call){var finder=options;options=null;}else{var finder=getOption(cm,options,"rangeFinder");}
if(typeof pos=="number")pos=CodeMirror.Pos(pos,0);var minSize=getOption(cm,options,"minFoldSize");function getRange(allowFolded){var range=finder(cm,pos);if(!range||range.to.line-range.from.line<minSize)return null;var marks=cm.findMarksAt(range.from);for(var i=0;i<marks.length;++i){if(marks[i].__isFold&&force!=="fold"){if(!allowFolded)return null;range.cleared=true;marks[i].clear();}}
return range;}
var range=getRange(true);if(getOption(cm,options,"scanUp"))while(!range&&pos.line>cm.firstLine()){pos=CodeMirror.Pos(pos.line-1,0);range=getRange(false);}
if(!range||range.cleared||force==="unfold")return;var myWidget=makeWidget(cm,options);CodeMirror.on(myWidget,"mousedown",function(e){myRange.clear();CodeMirror.e_preventDefault(e);});var myRange=cm.markText(range.from,range.to,{replacedWith:myWidget,clearOnEnter:getOption(cm,options,"clearOnEnter"),__isFold:true});myRange.on("clear",function(from,to){CodeMirror.signal(cm,"unfold",cm,from,to);});CodeMirror.signal(cm,"fold",cm,range.from,range.to);}
function makeWidget(cm,options){var widget=getOption(cm,options,"widget");if(typeof widget=="string"){var text=document.createTextNode(widget);widget=document.createElement("span");widget.appendChild(text);widget.className="CodeMirror-foldmarker";}else if(widget){widget=widget.cloneNode(true)}
return widget;}
CodeMirror.newFoldFunction=function(rangeFinder,widget){return function(cm,pos){doFold(cm,pos,{rangeFinder:rangeFinder,widget:widget});};};CodeMirror.defineExtension("foldCode",function(pos,options,force){doFold(this,pos,options,force);});CodeMirror.defineExtension("isFolded",function(pos){var marks=this.findMarksAt(pos);for(var i=0;i<marks.length;++i)
if(marks[i].__isFold)return true;});CodeMirror.commands.toggleFold=function(cm){cm.foldCode(cm.getCursor());};CodeMirror.commands.fold=function(cm){cm.foldCode(cm.getCursor(),null,"fold");};CodeMirror.commands.unfold=function(cm){cm.foldCode(cm.getCursor(),null,"unfold");};CodeMirror.commands.foldAll=function(cm){cm.operation(function(){for(var i=cm.firstLine(),e=cm.lastLine();i<=e;i++)
cm.foldCode(CodeMirror.Pos(i,0),null,"fold");});};CodeMirror.commands.unfoldAll=function(cm){cm.operation(function(){for(var i=cm.firstLine(),e=cm.lastLine();i<=e;i++)
cm.foldCode(CodeMirror.Pos(i,0),null,"unfold");});};CodeMirror.registerHelper("fold","combine",function(){var funcs=Array.prototype.slice.call(arguments,0);return function(cm,start){for(var i=0;i<funcs.length;++i){var found=funcs[i](cm,start);if(found)return found;}};});CodeMirror.registerHelper("fold","auto",function(cm,start){var helpers=cm.getHelpers(start,"fold");for(var i=0;i<helpers.length;i++){var cur=helpers[i](cm,start);if(cur)return cur;}});var defaultOptions={rangeFinder:CodeMirror.fold.auto,widget:"\u2194",minFoldSize:0,scanUp:false,clearOnEnter:true};CodeMirror.defineOption("foldOptions",null);function getOption(cm,options,name){if(options&&options[name]!==undefined)
return options[name];var editorOptions=cm.options.foldOptions;if(editorOptions&&editorOptions[name]!==undefined)
return editorOptions[name];return defaultOptions[name];}
CodeMirror.defineExtension("foldOption",function(options,name){return getOption(this,options,name);});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"),require("./foldcode"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror","./foldcode"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineOption("foldGutter",false,function(cm,val,old){if(old&&old!=CodeMirror.Init){cm.clearGutter(cm.state.foldGutter.options.gutter);cm.state.foldGutter=null;cm.off("gutterClick",onGutterClick);cm.off("change",onChange);cm.off("viewportChange",onViewportChange);cm.off("fold",onFold);cm.off("unfold",onFold);cm.off("swapDoc",onChange);}
if(val){cm.state.foldGutter=new State(parseOptions(val));updateInViewport(cm);cm.on("gutterClick",onGutterClick);cm.on("change",onChange);cm.on("viewportChange",onViewportChange);cm.on("fold",onFold);cm.on("unfold",onFold);cm.on("swapDoc",onChange);}});var Pos=CodeMirror.Pos;function State(options){this.options=options;this.from=this.to=0;}
function parseOptions(opts){if(opts===true)opts={};if(opts.gutter==null)opts.gutter="CodeMirror-foldgutter";if(opts.indicatorOpen==null)opts.indicatorOpen="CodeMirror-foldgutter-open";if(opts.indicatorFolded==null)opts.indicatorFolded="CodeMirror-foldgutter-folded";return opts;}
function isFolded(cm,line){var marks=cm.findMarks(Pos(line,0),Pos(line+1,0));for(var i=0;i<marks.length;++i)
if(marks[i].__isFold&&marks[i].find().from.line==line)return marks[i];}
function marker(spec){if(typeof spec=="string"){var elt=document.createElement("div");elt.className=spec+" CodeMirror-guttermarker-subtle";return elt;}else{return spec.cloneNode(true);}}
function updateFoldInfo(cm,from,to){var opts=cm.state.foldGutter.options,cur=from;var minSize=cm.foldOption(opts,"minFoldSize");var func=cm.foldOption(opts,"rangeFinder");cm.eachLine(from,to,function(line){var mark=null;if(isFolded(cm,cur)){mark=marker(opts.indicatorFolded);}else{var pos=Pos(cur,0);var range=func&&func(cm,pos);if(range&&range.to.line-range.from.line>=minSize)
mark=marker(opts.indicatorOpen);}
cm.setGutterMarker(line,opts.gutter,mark);++cur;});}
function updateInViewport(cm){var vp=cm.getViewport(),state=cm.state.foldGutter;if(!state)return;cm.operation(function(){updateFoldInfo(cm,vp.from,vp.to);});state.from=vp.from;state.to=vp.to;}
function onGutterClick(cm,line,gutter){var state=cm.state.foldGutter;if(!state)return;var opts=state.options;if(gutter!=opts.gutter)return;var folded=isFolded(cm,line);if(folded)folded.clear();else cm.foldCode(Pos(line,0),opts.rangeFinder);}
function onChange(cm){var state=cm.state.foldGutter;if(!state)return;var opts=state.options;state.from=state.to=0;clearTimeout(state.changeUpdate);state.changeUpdate=setTimeout(function(){updateInViewport(cm);},opts.foldOnChangeTimeSpan||600);}
function onViewportChange(cm){var state=cm.state.foldGutter;if(!state)return;var opts=state.options;clearTimeout(state.changeUpdate);state.changeUpdate=setTimeout(function(){var vp=cm.getViewport();if(state.from==state.to||vp.from-state.to>20||state.from-vp.to>20){updateInViewport(cm);}else{cm.operation(function(){if(vp.from<state.from){updateFoldInfo(cm,vp.from,state.from);state.from=vp.from;}
if(vp.to>state.to){updateFoldInfo(cm,state.to,vp.to);state.to=vp.to;}});}},opts.updateViewportTimeSpan||400);}
function onFold(cm,from){var state=cm.state.foldGutter;if(!state)return;var line=from.line;if(line>=state.from&&line<state.to)
updateFoldInfo(cm,line,line+1);}});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineOption("styleSelectedText",false,function(cm,val,old){var prev=old&&old!=CodeMirror.Init;if(val&&!prev){cm.state.markedSelection=[];cm.state.markedSelectionStyle=typeof val=="string"?val:"CodeMirror-selectedtext";reset(cm);cm.on("cursorActivity",onCursorActivity);cm.on("change",onChange);}else if(!val&&prev){cm.off("cursorActivity",onCursorActivity);cm.off("change",onChange);clear(cm);cm.state.markedSelection=cm.state.markedSelectionStyle=null;}});function onCursorActivity(cm){if(cm.state.markedSelection)
cm.operation(function(){update(cm);});}
function onChange(cm){if(cm.state.markedSelection&&cm.state.markedSelection.length)
cm.operation(function(){clear(cm);});}
var CHUNK_SIZE=8;var Pos=CodeMirror.Pos;var cmp=CodeMirror.cmpPos;function coverRange(cm,from,to,addAt){if(cmp(from,to)==0)return;var array=cm.state.markedSelection;var cls=cm.state.markedSelectionStyle;for(var line=from.line;;){var start=line==from.line?from:Pos(line,0);var endLine=line+CHUNK_SIZE,atEnd=endLine>=to.line;var end=atEnd?to:Pos(endLine,0);var mark=cm.markText(start,end,{className:cls});if(addAt==null)array.push(mark);else array.splice(addAt++,0,mark);if(atEnd)break;line=endLine;}}
function clear(cm){var array=cm.state.markedSelection;for(var i=0;i<array.length;++i)array[i].clear();array.length=0;}
function reset(cm){clear(cm);var ranges=cm.listSelections();for(var i=0;i<ranges.length;i++)
coverRange(cm,ranges[i].from(),ranges[i].to());}
function update(cm){if(!cm.somethingSelected())return clear(cm);if(cm.listSelections().length>1)return reset(cm);var from=cm.getCursor("start"),to=cm.getCursor("end");var array=cm.state.markedSelection;if(!array.length)return coverRange(cm,from,to);var coverStart=array[0].find(),coverEnd=array[array.length-1].find();if(!coverStart||!coverEnd||to.line-from.line<=CHUNK_SIZE||cmp(from,coverEnd.to)>=0||cmp(to,coverStart.from)<=0)
return reset(cm);while(cmp(from,coverStart.from)>0){array.shift().clear();coverStart=array[0].find();}
if(cmp(from,coverStart.from)<0){if(coverStart.to.line-from.line<CHUNK_SIZE){array.shift().clear();coverRange(cm,from,coverStart.to,0);}else{coverRange(cm,from,coverStart.from,0);}}
while(cmp(to,coverEnd.to)<0){array.pop().clear();coverEnd=array[array.length-1].find();}
if(cmp(to,coverEnd.to)>0){if(to.line-coverEnd.from.line<CHUNK_SIZE){array.pop().clear();coverRange(cm,coverEnd.from,to);}else{coverRange(cm,coverEnd.to,to);}}}});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){var ie_lt8=/MSIE \d/.test(navigator.userAgent)&&(document.documentMode==null||document.documentMode<8);var Pos=CodeMirror.Pos;var matching={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function bracketRegex(config){return config&&config.bracketRegex||/[(){}[\]]/}
function findMatchingBracket(cm,where,config){var line=cm.getLineHandle(where.line),pos=where.ch-1;var afterCursor=config&&config.afterCursor
if(afterCursor==null)
afterCursor=/(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className)
var re=bracketRegex(config)
var match=(!afterCursor&&pos>=0&&re.test(line.text.charAt(pos))&&matching[line.text.charAt(pos)])||re.test(line.text.charAt(pos+1))&&matching[line.text.charAt(++pos)];if(!match)return null;var dir=match.charAt(1)==">"?1:-1;if(config&&config.strict&&(dir>0)!=(pos==where.ch))return null;var style=cm.getTokenTypeAt(Pos(where.line,pos+1));var found=scanForBracket(cm,Pos(where.line,pos+(dir>0?1:0)),dir,style||null,config);if(found==null)return null;return{from:Pos(where.line,pos),to:found&&found.pos,match:found&&found.ch==match.charAt(0),forward:dir>0};}
function scanForBracket(cm,where,dir,style,config){var maxScanLen=(config&&config.maxScanLineLength)||10000;var maxScanLines=(config&&config.maxScanLines)||1000;var stack=[];var re=bracketRegex(config)
var lineEnd=dir>0?Math.min(where.line+maxScanLines,cm.lastLine()+1):Math.max(cm.firstLine()-1,where.line-maxScanLines);for(var lineNo=where.line;lineNo!=lineEnd;lineNo+=dir){var line=cm.getLine(lineNo);if(!line)continue;var pos=dir>0?0:line.length-1,end=dir>0?line.length:-1;if(line.length>maxScanLen)continue;if(lineNo==where.line)pos=where.ch-(dir<0?1:0);for(;pos!=end;pos+=dir){var ch=line.charAt(pos);if(re.test(ch)&&(style===undefined||cm.getTokenTypeAt(Pos(lineNo,pos+1))==style)){var match=matching[ch];if(match&&(match.charAt(1)==">")==(dir>0))stack.push(ch);else if(!stack.length)return{pos:Pos(lineNo,pos),ch:ch};else stack.pop();}}}
return lineNo-dir==(dir>0?cm.lastLine():cm.firstLine())?false:null;}
function matchBrackets(cm,autoclear,config){var maxHighlightLen=cm.state.matchBrackets.maxHighlightLineLength||1000;var marks=[],ranges=cm.listSelections();for(var i=0;i<ranges.length;i++){var match=ranges[i].empty()&&findMatchingBracket(cm,ranges[i].head,config);if(match&&cm.getLine(match.from.line).length<=maxHighlightLen){var style=match.match?"CodeMirror-matchingbracket":"CodeMirror-nonmatchingbracket";marks.push(cm.markText(match.from,Pos(match.from.line,match.from.ch+1),{className:style}));if(match.to&&cm.getLine(match.to.line).length<=maxHighlightLen)
marks.push(cm.markText(match.to,Pos(match.to.line,match.to.ch+1),{className:style}));}}
if(marks.length){if(ie_lt8&&cm.state.focused)cm.focus();var clear=function(){cm.operation(function(){for(var i=0;i<marks.length;i++)marks[i].clear();});};if(autoclear)setTimeout(clear,800);else return clear;}}
function doMatchBrackets(cm){cm.operation(function(){if(cm.state.matchBrackets.currentlyHighlighted){cm.state.matchBrackets.currentlyHighlighted();cm.state.matchBrackets.currentlyHighlighted=null;}
cm.state.matchBrackets.currentlyHighlighted=matchBrackets(cm,false,cm.state.matchBrackets);});}
CodeMirror.defineOption("matchBrackets",false,function(cm,val,old){if(old&&old!=CodeMirror.Init){cm.off("cursorActivity",doMatchBrackets);if(cm.state.matchBrackets&&cm.state.matchBrackets.currentlyHighlighted){cm.state.matchBrackets.currentlyHighlighted();cm.state.matchBrackets.currentlyHighlighted=null;}}
if(val){cm.state.matchBrackets=typeof val=="object"?val:{};cm.on("cursorActivity",doMatchBrackets);}});CodeMirror.defineExtension("matchBrackets",function(){matchBrackets(this,true);});CodeMirror.defineExtension("findMatchingBracket",function(pos,config,oldConfig){if(oldConfig||typeof config=="boolean"){if(!oldConfig){config=config?{strict:true}:null}else{oldConfig.strict=config
config=oldConfig}}
return findMatchingBracket(this,pos,config)});CodeMirror.defineExtension("scanForBracket",function(pos,dir,style,config){return scanForBracket(this,pos,dir,style,config);});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.multiplexingMode=function(outer){var others=Array.prototype.slice.call(arguments,1);function indexOf(string,pattern,from,returnEnd){if(typeof pattern=="string"){var found=string.indexOf(pattern,from);return returnEnd&&found>-1?found+pattern.length:found;}
var m=pattern.exec(from?string.slice(from):string);return m?m.index+from+(returnEnd?m[0].length:0):-1;}
return{startState:function(){return{outer:CodeMirror.startState(outer),innerActive:null,inner:null};},copyState:function(state){return{outer:CodeMirror.copyState(outer,state.outer),innerActive:state.innerActive,inner:state.innerActive&&CodeMirror.copyState(state.innerActive.mode,state.inner)};},token:function(stream,state){if(!state.innerActive){var cutOff=Infinity,oldContent=stream.string;for(var i=0;i<others.length;++i){var other=others[i];var found=indexOf(oldContent,other.open,stream.pos);if(found==stream.pos){if(!other.parseDelimiters)stream.match(other.open);state.innerActive=other;var outerIndent=0;if(outer.indent){var possibleOuterIndent=outer.indent(state.outer,"","");if(possibleOuterIndent!==CodeMirror.Pass)outerIndent=possibleOuterIndent;}
state.inner=CodeMirror.startState(other.mode,outerIndent);return other.delimStyle&&(other.delimStyle+" "+other.delimStyle+"-open");}else if(found!=-1&&found<cutOff){cutOff=found;}}
if(cutOff!=Infinity)stream.string=oldContent.slice(0,cutOff);var outerToken=outer.token(stream,state.outer);if(cutOff!=Infinity)stream.string=oldContent;return outerToken;}else{var curInner=state.innerActive,oldContent=stream.string;if(!curInner.close&&stream.sol()){state.innerActive=state.inner=null;return this.token(stream,state);}
var found=curInner.close?indexOf(oldContent,curInner.close,stream.pos,curInner.parseDelimiters):-1;if(found==stream.pos&&!curInner.parseDelimiters){stream.match(curInner.close);state.innerActive=state.inner=null;return curInner.delimStyle&&(curInner.delimStyle+" "+curInner.delimStyle+"-close");}
if(found>-1)stream.string=oldContent.slice(0,found);var innerToken=curInner.mode.token(stream,state.inner);if(found>-1)stream.string=oldContent;if(found==stream.pos&&curInner.parseDelimiters)
state.innerActive=state.inner=null;if(curInner.innerStyle){if(innerToken)innerToken=innerToken+" "+curInner.innerStyle;else innerToken=curInner.innerStyle;}
return innerToken;}},indent:function(state,textAfter,line){var mode=state.innerActive?state.innerActive.mode:outer;if(!mode.indent)return CodeMirror.Pass;return mode.indent(state.innerActive?state.inner:state.outer,textAfter,line);},blankLine:function(state){var mode=state.innerActive?state.innerActive.mode:outer;if(mode.blankLine){mode.blankLine(state.innerActive?state.inner:state.outer);}
if(!state.innerActive){for(var i=0;i<others.length;++i){var other=others[i];if(other.open==="\n"){state.innerActive=other;state.inner=CodeMirror.startState(other.mode,mode.indent?mode.indent(state.outer,"",""):0);}}}else if(state.innerActive.close==="\n"){state.innerActive=state.inner=null;}},electricChars:outer.electricChars,innerMode:function(state){return state.inner?{state:state.inner,mode:state.innerActive.mode}:{state:state.outer,mode:outer};}};};});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.overlayMode=function(base,overlay,combine){return{startState:function(){return{base:CodeMirror.startState(base),overlay:CodeMirror.startState(overlay),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null};},copyState:function(state){return{base:CodeMirror.copyState(base,state.base),overlay:CodeMirror.copyState(overlay,state.overlay),basePos:state.basePos,baseCur:null,overlayPos:state.overlayPos,overlayCur:null};},token:function(stream,state){if(stream!=state.streamSeen||Math.min(state.basePos,state.overlayPos)<stream.start){state.streamSeen=stream;state.basePos=state.overlayPos=stream.start;}
if(stream.start==state.basePos){state.baseCur=base.token(stream,state.base);state.basePos=stream.pos;}
if(stream.start==state.overlayPos){stream.pos=stream.start;state.overlayCur=overlay.token(stream,state.overlay);state.overlayPos=stream.pos;}
stream.pos=Math.min(state.basePos,state.overlayPos);if(state.overlayCur==null)return state.baseCur;else if(state.baseCur!=null&&state.overlay.combineTokens||combine&&state.overlay.combineTokens==null)
return state.baseCur+" "+state.overlayCur;else return state.overlayCur;},indent:base.indent&&function(state,textAfter,line){return base.indent(state.base,textAfter,line);},electricChars:base.electricChars,innerMode:function(state){return{state:state.base,mode:base};},blankLine:function(state){var baseToken,overlayToken;if(base.blankLine)baseToken=base.blankLine(state.base);if(overlay.blankLine)overlayToken=overlay.blankLine(state.overlay);return overlayToken==null?baseToken:(combine&&baseToken!=null?baseToken+" "+overlayToken:overlayToken);}};};});import*as HeapSnapshotModel from'./HeapSnapshotModel.js';export{HeapSnapshotModel,};export const HeapSnapshotProgressEvent={Update:'ProgressUpdate',BrokenSnapshot:'BrokenSnapshot'};export const baseSystemDistance=100000000;export class AllocationNodeCallers{constructor(nodesWithSingleCaller,branchingCallers){this.nodesWithSingleCaller=nodesWithSingleCaller;this.branchingCallers=branchingCallers;}}
export class SerializedAllocationNode{constructor(nodeId,functionName,scriptName,scriptId,line,column,count,size,liveCount,liveSize,hasChildren){this.id=nodeId;this.name=functionName;this.scriptName=scriptName;this.scriptId=scriptId;this.line=line;this.column=column;this.count=count;this.size=size;this.liveCount=liveCount;this.liveSize=liveSize;this.hasChildren=hasChildren;}}
export class AllocationStackFrame{constructor(functionName,scriptName,scriptId,line,column){this.functionName=functionName;this.scriptName=scriptName;this.scriptId=scriptId;this.line=line;this.column=column;}}
export class Node{constructor(id,name,distance,nodeIndex,retainedSize,selfSize,type){this.id=id;this.name=name;this.distance=distance;this.nodeIndex=nodeIndex;this.retainedSize=retainedSize;this.selfSize=selfSize;this.type=type;this.canBeQueried=false;this.detachedDOMTreeNode=false;}}
export class Edge{constructor(name,node,type,edgeIndex){this.name=name;this.node=node;this.type=type;this.edgeIndex=edgeIndex;}}
export class Aggregate{constructor(){this.count;this.distance;this.self;this.maxRet;this.type;this.name;this.idxs;}}
export class AggregateForDiff{constructor(){this.indexes=[];this.ids=[];this.selfSizes=[];}}
export class Diff{constructor(){this.addedCount=0;this.removedCount=0;this.addedSize=0;this.removedSize=0;this.deletedIndexes=[];this.addedIndexes=[];}}
export class DiffForClass{constructor(){this.addedCount;this.removedCount;this.addedSize;this.removedSize;this.deletedIndexes;this.addedIndexes;this.countDelta;this.sizeDelta;}}
export class ComparatorConfig{constructor(){this.fieldName1;this.ascending1;this.fieldName2;this.ascending2;}}
export class WorkerCommand{constructor(){this.callId;this.disposition;this.objectId;this.newObjectId;this.methodName;this.methodArguments;this.source;}}
export class ItemsRange{constructor(startPosition,endPosition,totalLength,items){this.startPosition=startPosition;this.endPosition=endPosition;this.totalLength=totalLength;this.items=items;}}
export class StaticData{constructor(nodeCount,rootNodeIndex,totalSize,maxJSObjectId){this.nodeCount=nodeCount;this.rootNodeIndex=rootNodeIndex;this.totalSize=totalSize;this.maxJSObjectId=maxJSObjectId;}}
export class Statistics{constructor(){this.total;this.v8heap;this.native;this.code;this.jsArrays;this.strings;this.system;}}
export class NodeFilter{constructor(minNodeId,maxNodeId){this.minNodeId=minNodeId;this.maxNodeId=maxNodeId;this.allocationNodeId;}
equals(o){return this.minNodeId===o.minNodeId&&this.maxNodeId===o.maxNodeId&&this.allocationNodeId===o.allocationNodeId;}}
export class SearchConfig{constructor(query,caseSensitive,isRegex,shouldJump,jumpBackward){this.query=query;this.caseSensitive=caseSensitive;this.isRegex=isRegex;this.shouldJump=shouldJump;this.jumpBackward=jumpBackward;}}
export class Samples{constructor(timestamps,lastAssignedIds,sizes){this.timestamps=timestamps;this.lastAssignedIds=lastAssignedIds;this.sizes=sizes;}}
export class Location{constructor(scriptId,lineNumber,columnNumber){this.scriptId=scriptId;this.lineNumber=lineNumber;this.columnNumber=columnNumber;}}
self.HeapSnapshotModel=self.HeapSnapshotModel||{};HeapSnapshotModel=HeapSnapshotModel||{};HeapSnapshotModel.HeapSnapshotProgressEvent=HeapSnapshotProgressEvent;HeapSnapshotModel.baseSystemDistance=baseSystemDistance;HeapSnapshotModel.AllocationNodeCallers=AllocationNodeCallers;HeapSnapshotModel.SerializedAllocationNode=SerializedAllocationNode;HeapSnapshotModel.AllocationStackFrame=AllocationStackFrame;HeapSnapshotModel.Node=Node;HeapSnapshotModel.Edge=Edge;HeapSnapshotModel.Aggregate=Aggregate;HeapSnapshotModel.AggregateForDiff=AggregateForDiff;HeapSnapshotModel.Diff=Diff;HeapSnapshotModel.DiffForClass=DiffForClass;HeapSnapshotModel.ComparatorConfig=ComparatorConfig;HeapSnapshotModel.WorkerCommand=WorkerCommand;HeapSnapshotModel.ItemsRange=ItemsRange;HeapSnapshotModel.StaticData=StaticData;HeapSnapshotModel.Statistics=Statistics;HeapSnapshotModel.NodeFilter=NodeFilter;HeapSnapshotModel.SearchConfig=SearchConfig;HeapSnapshotModel.Samples=Samples;HeapSnapshotModel.Location=Location;import'./AllocationProfile.js';import'./HeapSnapshot.js';import'./HeapSnapshotLoader.js';import'./HeapSnapshotWorkerDispatcher.js';import'./HeapSnapshotWorker.js';import*as AllocationProfile from'./AllocationProfile.js';import*as HeapSnapshot from'./HeapSnapshot.js';import*as HeapSnapshotLoader from'./HeapSnapshotLoader.js';import*as HeapSnapshotWorkerDispatcher from'./HeapSnapshotWorkerDispatcher.js';export{AllocationProfile,HeapSnapshot,HeapSnapshotLoader,HeapSnapshotWorkerDispatcher,};export class AllocationProfile{constructor(profile,liveObjectStats){this._strings=profile.strings;this._liveObjectStats=liveObjectStats;this._nextNodeId=1;this._functionInfos=[];this._idToNode={};this._idToTopDownNode={};this._collapsedTopNodeIdToFunctionInfo={};this._traceTops=null;this._buildFunctionAllocationInfos(profile);this._traceTree=this._buildAllocationTree(profile,liveObjectStats);}
_buildFunctionAllocationInfos(profile){const strings=this._strings;const functionInfoFields=profile.snapshot.meta.trace_function_info_fields;const functionNameOffset=functionInfoFields.indexOf('name');const scriptNameOffset=functionInfoFields.indexOf('script_name');const scriptIdOffset=functionInfoFields.indexOf('script_id');const lineOffset=functionInfoFields.indexOf('line');const columnOffset=functionInfoFields.indexOf('column');const functionInfoFieldCount=functionInfoFields.length;const rawInfos=profile.trace_function_infos;const infoLength=rawInfos.length;const functionInfos=this._functionInfos=new Array(infoLength/functionInfoFieldCount);let index=0;for(let i=0;i<infoLength;i+=functionInfoFieldCount){functionInfos[index++]=new FunctionAllocationInfo(strings[rawInfos[i+functionNameOffset]],strings[rawInfos[i+scriptNameOffset]],rawInfos[i+scriptIdOffset],rawInfos[i+lineOffset],rawInfos[i+columnOffset]);}}
_buildAllocationTree(profile,liveObjectStats){const traceTreeRaw=profile.trace_tree;const functionInfos=this._functionInfos;const idToTopDownNode=this._idToTopDownNode;const traceNodeFields=profile.snapshot.meta.trace_node_fields;const nodeIdOffset=traceNodeFields.indexOf('id');const functionInfoIndexOffset=traceNodeFields.indexOf('function_info_index');const allocationCountOffset=traceNodeFields.indexOf('count');const allocationSizeOffset=traceNodeFields.indexOf('size');const childrenOffset=traceNodeFields.indexOf('children');const nodeFieldCount=traceNodeFields.length;function traverseNode(rawNodeArray,nodeOffset,parent){const functionInfo=functionInfos[rawNodeArray[nodeOffset+functionInfoIndexOffset]];const id=rawNodeArray[nodeOffset+nodeIdOffset];const stats=liveObjectStats[id];const liveCount=stats?stats.count:0;const liveSize=stats?stats.size:0;const result=new TopDownAllocationNode(id,functionInfo,rawNodeArray[nodeOffset+allocationCountOffset],rawNodeArray[nodeOffset+allocationSizeOffset],liveCount,liveSize,parent);idToTopDownNode[id]=result;functionInfo.addTraceTopNode(result);const rawChildren=rawNodeArray[nodeOffset+childrenOffset];for(let i=0;i<rawChildren.length;i+=nodeFieldCount){result.children.push(traverseNode(rawChildren,i,result));}
return result;}
return traverseNode(traceTreeRaw,0,null);}
serializeTraceTops(){if(this._traceTops){return this._traceTops;}
const result=this._traceTops=[];const functionInfos=this._functionInfos;for(let i=0;i<functionInfos.length;i++){const info=functionInfos[i];if(info.totalCount===0){continue;}
const nodeId=this._nextNodeId++;const isRoot=i===0;result.push(this._serializeNode(nodeId,info,info.totalCount,info.totalSize,info.totalLiveCount,info.totalLiveSize,!isRoot));this._collapsedTopNodeIdToFunctionInfo[nodeId]=info;}
result.sort(function(a,b){return b.size-a.size;});return result;}
serializeCallers(nodeId){let node=this._ensureBottomUpNode(nodeId);const nodesWithSingleCaller=[];while(node.callers().length===1){node=node.callers()[0];nodesWithSingleCaller.push(this._serializeCaller(node));}
const branchingCallers=[];const callers=node.callers();for(let i=0;i<callers.length;i++){branchingCallers.push(this._serializeCaller(callers[i]));}
return new HeapSnapshotModel.AllocationNodeCallers(nodesWithSingleCaller,branchingCallers);}
serializeAllocationStack(traceNodeId){let node=this._idToTopDownNode[traceNodeId];const result=[];while(node){const functionInfo=node.functionInfo;result.push(new HeapSnapshotModel.AllocationStackFrame(functionInfo.functionName,functionInfo.scriptName,functionInfo.scriptId,functionInfo.line,functionInfo.column));node=node.parent;}
return result;}
traceIds(allocationNodeId){return this._ensureBottomUpNode(allocationNodeId).traceTopIds;}
_ensureBottomUpNode(nodeId){let node=this._idToNode[nodeId];if(!node){const functionInfo=this._collapsedTopNodeIdToFunctionInfo[nodeId];node=functionInfo.bottomUpRoot();delete this._collapsedTopNodeIdToFunctionInfo[nodeId];this._idToNode[nodeId]=node;}
return node;}
_serializeCaller(node){const callerId=this._nextNodeId++;this._idToNode[callerId]=node;return this._serializeNode(callerId,node.functionInfo,node.allocationCount,node.allocationSize,node.liveCount,node.liveSize,node.hasCallers());}
_serializeNode(nodeId,functionInfo,count,size,liveCount,liveSize,hasChildren){return new HeapSnapshotModel.SerializedAllocationNode(nodeId,functionInfo.functionName,functionInfo.scriptName,functionInfo.scriptId,functionInfo.line,functionInfo.column,count,size,liveCount,liveSize,hasChildren);}}
export class TopDownAllocationNode{constructor(id,functionInfo,count,size,liveCount,liveSize,parent){this.id=id;this.functionInfo=functionInfo;this.allocationCount=count;this.allocationSize=size;this.liveCount=liveCount;this.liveSize=liveSize;this.parent=parent;this.children=[];}}
export class BottomUpAllocationNode{constructor(functionInfo){this.functionInfo=functionInfo;this.allocationCount=0;this.allocationSize=0;this.liveCount=0;this.liveSize=0;this.traceTopIds=[];this._callers=[];}
addCaller(traceNode){const functionInfo=traceNode.functionInfo;let result;for(let i=0;i<this._callers.length;i++){const caller=this._callers[i];if(caller.functionInfo===functionInfo){result=caller;break;}}
if(!result){result=new BottomUpAllocationNode(functionInfo);this._callers.push(result);}
return result;}
callers(){return this._callers;}
hasCallers(){return this._callers.length>0;}}
export class FunctionAllocationInfo{constructor(functionName,scriptName,scriptId,line,column){this.functionName=functionName;this.scriptName=scriptName;this.scriptId=scriptId;this.line=line;this.column=column;this.totalCount=0;this.totalSize=0;this.totalLiveCount=0;this.totalLiveSize=0;this._traceTops=[];}
addTraceTopNode(node){if(node.allocationCount===0){return;}
this._traceTops.push(node);this.totalCount+=node.allocationCount;this.totalSize+=node.allocationSize;this.totalLiveCount+=node.liveCount;this.totalLiveSize+=node.liveSize;}
bottomUpRoot(){if(!this._traceTops.length){return null;}
if(!this._bottomUpTree){this._buildAllocationTraceTree();}
return this._bottomUpTree;}
_buildAllocationTraceTree(){this._bottomUpTree=new BottomUpAllocationNode(this);for(let i=0;i<this._traceTops.length;i++){let node=this._traceTops[i];let bottomUpNode=this._bottomUpTree;const count=node.allocationCount;const size=node.allocationSize;const liveCount=node.liveCount;const liveSize=node.liveSize;const traceId=node.id;while(true){bottomUpNode.allocationCount+=count;bottomUpNode.allocationSize+=size;bottomUpNode.liveCount+=liveCount;bottomUpNode.liveSize+=liveSize;bottomUpNode.traceTopIds.push(traceId);node=node.parent;if(node===null){break;}
bottomUpNode=bottomUpNode.addCaller(node);}}}}
self.HeapSnapshotWorker=self.HeapSnapshotWorker||{};HeapSnapshotWorker=HeapSnapshotWorker||{};HeapSnapshotWorker.AllocationProfile=AllocationProfile;HeapSnapshotWorker.TopDownAllocationNode=TopDownAllocationNode;HeapSnapshotWorker.BottomUpAllocationNode=BottomUpAllocationNode;HeapSnapshotWorker.FunctionAllocationInfo=FunctionAllocationInfo;export class HeapSnapshotItem{itemIndex(){}
serialize(){}}
export class HeapSnapshotEdge{constructor(snapshot,edgeIndex){this._snapshot=snapshot;this._edges=snapshot.containmentEdges;this.edgeIndex=edgeIndex||0;}
clone(){return new HeapSnapshotEdge(this._snapshot,this.edgeIndex);}
hasStringName(){throw new Error('Not implemented');}
name(){throw new Error('Not implemented');}
node(){return this._snapshot.createNode(this.nodeIndex());}
nodeIndex(){return this._edges[this.edgeIndex+this._snapshot._edgeToNodeOffset];}
toString(){return'HeapSnapshotEdge: '+this.name();}
type(){return this._snapshot._edgeTypes[this.rawType()];}
itemIndex(){return this.edgeIndex;}
serialize(){return new HeapSnapshotModel.Edge(this.name(),this.node().serialize(),this.type(),this.edgeIndex);}
rawType(){return this._edges[this.edgeIndex+this._snapshot._edgeTypeOffset];}}
export class HeapSnapshotItemIterator{hasNext(){}
item(){}
next(){}}
export class HeapSnapshotItemIndexProvider{itemForIndex(newIndex){}}
export class HeapSnapshotNodeIndexProvider{constructor(snapshot){this._node=snapshot.createNode();}
itemForIndex(index){this._node.nodeIndex=index;return this._node;}}
export class HeapSnapshotEdgeIndexProvider{constructor(snapshot){this._edge=snapshot.createEdge(0);}
itemForIndex(index){this._edge.edgeIndex=index;return this._edge;}}
export class HeapSnapshotRetainerEdgeIndexProvider{constructor(snapshot){this._retainerEdge=snapshot.createRetainingEdge(0);}
itemForIndex(index){this._retainerEdge.setRetainerIndex(index);return this._retainerEdge;}}
export class HeapSnapshotEdgeIterator{constructor(node){this._sourceNode=node;this.edge=node._snapshot.createEdge(node.edgeIndexesStart());}
hasNext(){return this.edge.edgeIndex<this._sourceNode.edgeIndexesEnd();}
item(){return this.edge;}
next(){this.edge.edgeIndex+=this.edge._snapshot._edgeFieldsCount;}}
export class HeapSnapshotRetainerEdge{constructor(snapshot,retainerIndex){this._snapshot=snapshot;this.setRetainerIndex(retainerIndex);}
clone(){return new HeapSnapshotRetainerEdge(this._snapshot,this.retainerIndex());}
hasStringName(){return this._edge().hasStringName();}
name(){return this._edge().name();}
node(){return this._node();}
nodeIndex(){return this._retainingNodeIndex;}
retainerIndex(){return this._retainerIndex;}
setRetainerIndex(retainerIndex){if(retainerIndex===this._retainerIndex){return;}
this._retainerIndex=retainerIndex;this._globalEdgeIndex=this._snapshot._retainingEdges[retainerIndex];this._retainingNodeIndex=this._snapshot._retainingNodes[retainerIndex];this._edgeInstance=null;this._nodeInstance=null;}
set edgeIndex(edgeIndex){this.setRetainerIndex(edgeIndex);}
_node(){if(!this._nodeInstance){this._nodeInstance=this._snapshot.createNode(this._retainingNodeIndex);}
return this._nodeInstance;}
_edge(){if(!this._edgeInstance){this._edgeInstance=this._snapshot.createEdge(this._globalEdgeIndex);}
return this._edgeInstance;}
toString(){return this._edge().toString();}
itemIndex(){return this._retainerIndex;}
serialize(){return new HeapSnapshotModel.Edge(this.name(),this.node().serialize(),this.type(),this._globalEdgeIndex);}
type(){return this._edge().type();}}
export class HeapSnapshotRetainerEdgeIterator{constructor(retainedNode){const snapshot=retainedNode._snapshot;const retainedNodeOrdinal=retainedNode.ordinal();const retainerIndex=snapshot._firstRetainerIndex[retainedNodeOrdinal];this._retainersEnd=snapshot._firstRetainerIndex[retainedNodeOrdinal+1];this.retainer=snapshot.createRetainingEdge(retainerIndex);}
hasNext(){return this.retainer.retainerIndex()<this._retainersEnd;}
item(){return this.retainer;}
next(){this.retainer.setRetainerIndex(this.retainer.retainerIndex()+1);}}
export class HeapSnapshotNode{constructor(snapshot,nodeIndex){this._snapshot=snapshot;this.nodeIndex=nodeIndex||0;}
distance(){return this._snapshot._nodeDistances[this.nodeIndex/this._snapshot._nodeFieldCount];}
className(){throw new Error('Not implemented');}
classIndex(){throw new Error('Not implemented');}
dominatorIndex(){const nodeFieldCount=this._snapshot._nodeFieldCount;return this._snapshot._dominatorsTree[this.nodeIndex/this._snapshot._nodeFieldCount]*nodeFieldCount;}
edges(){return new HeapSnapshotEdgeIterator(this);}
edgesCount(){return(this.edgeIndexesEnd()-this.edgeIndexesStart())/this._snapshot._edgeFieldsCount;}
id(){throw new Error('Not implemented');}
isRoot(){return this.nodeIndex===this._snapshot._rootNodeIndex;}
name(){return this._snapshot.strings[this._name()];}
retainedSize(){return this._snapshot._retainedSizes[this.ordinal()];}
retainers(){return new HeapSnapshotRetainerEdgeIterator(this);}
retainersCount(){const snapshot=this._snapshot;const ordinal=this.ordinal();return snapshot._firstRetainerIndex[ordinal+1]-snapshot._firstRetainerIndex[ordinal];}
selfSize(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeSelfSizeOffset];}
type(){return this._snapshot._nodeTypes[this.rawType()];}
traceNodeId(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeTraceNodeIdOffset];}
itemIndex(){return this.nodeIndex;}
serialize(){return new HeapSnapshotModel.Node(this.id(),this.name(),this.distance(),this.nodeIndex,this.retainedSize(),this.selfSize(),this.type());}
_name(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeNameOffset];}
edgeIndexesStart(){return this._snapshot._firstEdgeIndexes[this.ordinal()];}
edgeIndexesEnd(){return this._snapshot._firstEdgeIndexes[this.ordinal()+1];}
ordinal(){return this.nodeIndex/this._snapshot._nodeFieldCount;}
_nextNodeIndex(){return this.nodeIndex+this._snapshot._nodeFieldCount;}
rawType(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeTypeOffset];}}
export class HeapSnapshotNodeIterator{constructor(node){this.node=node;this._nodesLength=node._snapshot.nodes.length;}
hasNext(){return this.node.nodeIndex<this._nodesLength;}
item(){return this.node;}
next(){this.node.nodeIndex=this.node._nextNodeIndex();}}
export class HeapSnapshotIndexRangeIterator{constructor(itemProvider,indexes){this._itemProvider=itemProvider;this._indexes=indexes;this._position=0;}
hasNext(){return this._position<this._indexes.length;}
item(){const index=this._indexes[this._position];return this._itemProvider.itemForIndex(index);}
next(){++this._position;}}
export class HeapSnapshotFilteredIterator{constructor(iterator,filter){this._iterator=iterator;this._filter=filter;this._skipFilteredItems();}
hasNext(){return this._iterator.hasNext();}
item(){return this._iterator.item();}
next(){this._iterator.next();this._skipFilteredItems();}
_skipFilteredItems(){while(this._iterator.hasNext()&&!this._filter(this._iterator.item())){this._iterator.next();}}}
export class HeapSnapshotProgress{constructor(dispatcher){this._dispatcher=dispatcher;}
updateStatus(status){this._sendUpdateEvent(Common.serializeUIString(status));}
updateProgress(title,value,total){const percentValue=((total?(value/total):0)*100).toFixed(0);this._sendUpdateEvent(Common.serializeUIString(title,[percentValue]));}
reportProblem(error){if(this._dispatcher){this._dispatcher.sendEvent(HeapSnapshotModel.HeapSnapshotProgressEvent.BrokenSnapshot,error);}}
_sendUpdateEvent(serializedText){if(this._dispatcher){this._dispatcher.sendEvent(HeapSnapshotModel.HeapSnapshotProgressEvent.Update,serializedText);}}}
export class HeapSnapshotProblemReport{constructor(title){this._errors=[title];}
addError(error){if(this._errors.length>100){return;}
this._errors.push(error);}
toString(){return this._errors.join('\n  ');}}
export class HeapSnapshot{constructor(profile,progress){this.nodes=profile.nodes;this.containmentEdges=profile.edges;this._metaNode=profile.snapshot.meta;this._rawSamples=profile.samples;this._samples=null;this.strings=profile.strings;this._locations=profile.locations;this._progress=progress;this._noDistance=-5;this._rootNodeIndex=0;if(profile.snapshot.root_index){this._rootNodeIndex=profile.snapshot.root_index;}
this._snapshotDiffs={};this._aggregatesForDiff=null;this._aggregates={};this._aggregatesSortedFlags={};this._profile=profile;}
initialize(){const meta=this._metaNode;this._nodeTypeOffset=meta.node_fields.indexOf('type');this._nodeNameOffset=meta.node_fields.indexOf('name');this._nodeIdOffset=meta.node_fields.indexOf('id');this._nodeSelfSizeOffset=meta.node_fields.indexOf('self_size');this._nodeEdgeCountOffset=meta.node_fields.indexOf('edge_count');this._nodeTraceNodeIdOffset=meta.node_fields.indexOf('trace_node_id');this._nodeFieldCount=meta.node_fields.length;this._nodeTypes=meta.node_types[this._nodeTypeOffset];this._nodeArrayType=this._nodeTypes.indexOf('array');this._nodeHiddenType=this._nodeTypes.indexOf('hidden');this._nodeObjectType=this._nodeTypes.indexOf('object');this._nodeNativeType=this._nodeTypes.indexOf('native');this._nodeConsStringType=this._nodeTypes.indexOf('concatenated string');this._nodeSlicedStringType=this._nodeTypes.indexOf('sliced string');this._nodeCodeType=this._nodeTypes.indexOf('code');this._nodeSyntheticType=this._nodeTypes.indexOf('synthetic');this._edgeFieldsCount=meta.edge_fields.length;this._edgeTypeOffset=meta.edge_fields.indexOf('type');this._edgeNameOffset=meta.edge_fields.indexOf('name_or_index');this._edgeToNodeOffset=meta.edge_fields.indexOf('to_node');this._edgeTypes=meta.edge_types[this._edgeTypeOffset];this._edgeTypes.push('invisible');this._edgeElementType=this._edgeTypes.indexOf('element');this._edgeHiddenType=this._edgeTypes.indexOf('hidden');this._edgeInternalType=this._edgeTypes.indexOf('internal');this._edgeShortcutType=this._edgeTypes.indexOf('shortcut');this._edgeWeakType=this._edgeTypes.indexOf('weak');this._edgeInvisibleType=this._edgeTypes.indexOf('invisible');const location_fields=meta.location_fields||[];this._locationIndexOffset=location_fields.indexOf('object_index');this._locationScriptIdOffset=location_fields.indexOf('script_id');this._locationLineOffset=location_fields.indexOf('line');this._locationColumnOffset=location_fields.indexOf('column');this._locationFieldCount=location_fields.length;this.nodeCount=this.nodes.length/this._nodeFieldCount;this._edgeCount=this.containmentEdges.length/this._edgeFieldsCount;this._retainedSizes=new Float64Array(this.nodeCount);this._firstEdgeIndexes=new Uint32Array(this.nodeCount+1);this._retainingNodes=new Uint32Array(this._edgeCount);this._retainingEdges=new Uint32Array(this._edgeCount);this._firstRetainerIndex=new Uint32Array(this.nodeCount+1);this._nodeDistances=new Int32Array(this.nodeCount);this._firstDominatedNodeIndex=new Uint32Array(this.nodeCount+1);this._dominatedNodes=new Uint32Array(this.nodeCount-1);this._progress.updateStatus(ls`Building edge indexes\u2026`);this._buildEdgeIndexes();this._progress.updateStatus(ls`Building retainers\u2026`);this._buildRetainers();this._progress.updateStatus(ls`Calculating node flags\u2026`);this.calculateFlags();this._progress.updateStatus(ls`Calculating distances\u2026`);this.calculateDistances();this._progress.updateStatus(ls`Building postorder index\u2026`);const result=this._buildPostOrderIndex();this._progress.updateStatus(ls`Building dominator tree\u2026`);this._dominatorsTree=this._buildDominatorTree(result.postOrderIndex2NodeOrdinal,result.nodeOrdinal2PostOrderIndex);this._progress.updateStatus(ls`Calculating retained sizes\u2026`);this._calculateRetainedSizes(result.postOrderIndex2NodeOrdinal);this._progress.updateStatus(ls`Building dominated nodes\u2026`);this._buildDominatedNodes();this._progress.updateStatus(ls`Calculating statistics\u2026`);this.calculateStatistics();this._progress.updateStatus(ls`Calculating samples\u2026`);this._buildSamples();this._progress.updateStatus(ls`Building locations\u2026`);this._buildLocationMap();this._progress.updateStatus(ls`Finished processing.`);if(this._profile.snapshot.trace_function_count){this._progress.updateStatus(ls`Building allocation statistics\u2026`);const nodes=this.nodes;const nodesLength=nodes.length;const nodeFieldCount=this._nodeFieldCount;const node=this.rootNode();const liveObjects={};for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){node.nodeIndex=nodeIndex;const traceNodeId=node.traceNodeId();let stats=liveObjects[traceNodeId];if(!stats){liveObjects[traceNodeId]=stats={count:0,size:0,ids:[]};}
stats.count++;stats.size+=node.selfSize();stats.ids.push(node.id());}
this._allocationProfile=new HeapSnapshotWorker.AllocationProfile(this._profile,liveObjects);this._progress.updateStatus(ls`Done`);}}
_buildEdgeIndexes(){const nodes=this.nodes;const nodeCount=this.nodeCount;const firstEdgeIndexes=this._firstEdgeIndexes;const nodeFieldCount=this._nodeFieldCount;const edgeFieldsCount=this._edgeFieldsCount;const nodeEdgeCountOffset=this._nodeEdgeCountOffset;firstEdgeIndexes[nodeCount]=this.containmentEdges.length;for(let nodeOrdinal=0,edgeIndex=0;nodeOrdinal<nodeCount;++nodeOrdinal){firstEdgeIndexes[nodeOrdinal]=edgeIndex;edgeIndex+=nodes[nodeOrdinal*nodeFieldCount+nodeEdgeCountOffset]*edgeFieldsCount;}}
_buildRetainers(){const retainingNodes=this._retainingNodes;const retainingEdges=this._retainingEdges;const firstRetainerIndex=this._firstRetainerIndex;const containmentEdges=this.containmentEdges;const edgeFieldsCount=this._edgeFieldsCount;const nodeFieldCount=this._nodeFieldCount;const edgeToNodeOffset=this._edgeToNodeOffset;const firstEdgeIndexes=this._firstEdgeIndexes;const nodeCount=this.nodeCount;for(let toNodeFieldIndex=edgeToNodeOffset,l=containmentEdges.length;toNodeFieldIndex<l;toNodeFieldIndex+=edgeFieldsCount){const toNodeIndex=containmentEdges[toNodeFieldIndex];if(toNodeIndex%nodeFieldCount){throw new Error('Invalid toNodeIndex '+toNodeIndex);}
++firstRetainerIndex[toNodeIndex/nodeFieldCount];}
for(let i=0,firstUnusedRetainerSlot=0;i<nodeCount;i++){const retainersCount=firstRetainerIndex[i];firstRetainerIndex[i]=firstUnusedRetainerSlot;retainingNodes[firstUnusedRetainerSlot]=retainersCount;firstUnusedRetainerSlot+=retainersCount;}
firstRetainerIndex[nodeCount]=retainingNodes.length;let nextNodeFirstEdgeIndex=firstEdgeIndexes[0];for(let srcNodeOrdinal=0;srcNodeOrdinal<nodeCount;++srcNodeOrdinal){const firstEdgeIndex=nextNodeFirstEdgeIndex;nextNodeFirstEdgeIndex=firstEdgeIndexes[srcNodeOrdinal+1];const srcNodeIndex=srcNodeOrdinal*nodeFieldCount;for(let edgeIndex=firstEdgeIndex;edgeIndex<nextNodeFirstEdgeIndex;edgeIndex+=edgeFieldsCount){const toNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];if(toNodeIndex%nodeFieldCount){throw new Error('Invalid toNodeIndex '+toNodeIndex);}
const firstRetainerSlotIndex=firstRetainerIndex[toNodeIndex/nodeFieldCount];const nextUnusedRetainerSlotIndex=firstRetainerSlotIndex+(--retainingNodes[firstRetainerSlotIndex]);retainingNodes[nextUnusedRetainerSlotIndex]=srcNodeIndex;retainingEdges[nextUnusedRetainerSlotIndex]=edgeIndex;}}}
createNode(nodeIndex){throw new Error('Not implemented');}
createEdge(edgeIndex){throw new Error('Not implemented');}
createRetainingEdge(retainerIndex){throw new Error('Not implemented');}
_allNodes(){return new HeapSnapshotNodeIterator(this.rootNode());}
rootNode(){return this.createNode(this._rootNodeIndex);}
get rootNodeIndex(){return this._rootNodeIndex;}
get totalSize(){return this.rootNode().retainedSize();}
_getDominatedIndex(nodeIndex){if(nodeIndex%this._nodeFieldCount){throw new Error('Invalid nodeIndex: '+nodeIndex);}
return this._firstDominatedNodeIndex[nodeIndex/this._nodeFieldCount];}
_createFilter(nodeFilter){const minNodeId=nodeFilter.minNodeId;const maxNodeId=nodeFilter.maxNodeId;const allocationNodeId=nodeFilter.allocationNodeId;let filter;if(typeof allocationNodeId==='number'){filter=this._createAllocationStackFilter(allocationNodeId);filter.key='AllocationNodeId: '+allocationNodeId;}else if(typeof minNodeId==='number'&&typeof maxNodeId==='number'){filter=this._createNodeIdFilter(minNodeId,maxNodeId);filter.key='NodeIdRange: '+minNodeId+'..'+maxNodeId;}
return filter;}
search(searchConfig,nodeFilter){const query=searchConfig.query;function filterString(matchedStringIndexes,string,index){if(string.indexOf(query)!==-1){matchedStringIndexes.add(index);}
return matchedStringIndexes;}
const regexp=searchConfig.isRegex?new RegExp(query):createPlainTextSearchRegex(query,'i');function filterRegexp(matchedStringIndexes,string,index){if(regexp.test(string)){matchedStringIndexes.add(index);}
return matchedStringIndexes;}
const stringFilter=(searchConfig.isRegex||!searchConfig.caseSensitive)?filterRegexp:filterString;const stringIndexes=this.strings.reduce(stringFilter,new Set());if(!stringIndexes.size){return[];}
const filter=this._createFilter(nodeFilter);const nodeIds=[];const nodesLength=this.nodes.length;const nodes=this.nodes;const nodeNameOffset=this._nodeNameOffset;const nodeIdOffset=this._nodeIdOffset;const nodeFieldCount=this._nodeFieldCount;const node=this.rootNode();for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){node.nodeIndex=nodeIndex;if(filter&&!filter(node)){continue;}
if(stringIndexes.has(nodes[nodeIndex+nodeNameOffset])){nodeIds.push(nodes[nodeIndex+nodeIdOffset]);}}
return nodeIds;}
aggregatesWithFilter(nodeFilter){const filter=this._createFilter(nodeFilter);const key=filter?filter.key:'allObjects';return this.aggregates(false,key,filter);}
_createNodeIdFilter(minNodeId,maxNodeId){function nodeIdFilter(node){const id=node.id();return id>minNodeId&&id<=maxNodeId;}
return nodeIdFilter;}
_createAllocationStackFilter(bottomUpAllocationNodeId){const traceIds=this._allocationProfile.traceIds(bottomUpAllocationNodeId);if(!traceIds.length){return undefined;}
const set={};for(let i=0;i<traceIds.length;i++){set[traceIds[i]]=true;}
function traceIdFilter(node){return!!set[node.traceNodeId()];}
return traceIdFilter;}
aggregates(sortedIndexes,key,filter){let aggregatesByClassName=key&&this._aggregates[key];if(!aggregatesByClassName){const aggregates=this._buildAggregates(filter);this._calculateClassesRetainedSize(aggregates.aggregatesByClassIndex,filter);aggregatesByClassName=aggregates.aggregatesByClassName;if(key){this._aggregates[key]=aggregatesByClassName;}}
if(sortedIndexes&&(!key||!this._aggregatesSortedFlags[key])){this._sortAggregateIndexes(aggregatesByClassName);if(key){this._aggregatesSortedFlags[key]=sortedIndexes;}}
return aggregatesByClassName;}
allocationTracesTops(){return this._allocationProfile.serializeTraceTops();}
allocationNodeCallers(nodeId){return this._allocationProfile.serializeCallers(nodeId);}
allocationStack(nodeIndex){const node=this.createNode(nodeIndex);const allocationNodeId=node.traceNodeId();if(!allocationNodeId){return null;}
return this._allocationProfile.serializeAllocationStack(allocationNodeId);}
aggregatesForDiff(){if(this._aggregatesForDiff){return this._aggregatesForDiff;}
const aggregatesByClassName=this.aggregates(true,'allObjects');this._aggregatesForDiff={};const node=this.createNode();for(const className in aggregatesByClassName){const aggregate=aggregatesByClassName[className];const indexes=aggregate.idxs;const ids=new Array(indexes.length);const selfSizes=new Array(indexes.length);for(let i=0;i<indexes.length;i++){node.nodeIndex=indexes[i];ids[i]=node.id();selfSizes[i]=node.selfSize();}
this._aggregatesForDiff[className]={indexes:indexes,ids:ids,selfSizes:selfSizes};}
return this._aggregatesForDiff;}
isUserRoot(node){return true;}
calculateDistances(filter){const nodeCount=this.nodeCount;const distances=this._nodeDistances;const noDistance=this._noDistance;for(let i=0;i<nodeCount;++i){distances[i]=noDistance;}
const nodesToVisit=new Uint32Array(this.nodeCount);let nodesToVisitLength=0;for(let iter=this.rootNode().edges();iter.hasNext();iter.next()){const node=iter.edge.node();if(this.isUserRoot(node)){distances[node.ordinal()]=1;nodesToVisit[nodesToVisitLength++]=node.nodeIndex;}}
this._bfs(nodesToVisit,nodesToVisitLength,distances,filter);distances[this.rootNode().ordinal()]=nodesToVisitLength>0?HeapSnapshotModel.baseSystemDistance:0;nodesToVisit[0]=this.rootNode().nodeIndex;nodesToVisitLength=1;this._bfs(nodesToVisit,nodesToVisitLength,distances,filter);}
_bfs(nodesToVisit,nodesToVisitLength,distances,filter){const edgeFieldsCount=this._edgeFieldsCount;const nodeFieldCount=this._nodeFieldCount;const containmentEdges=this.containmentEdges;const firstEdgeIndexes=this._firstEdgeIndexes;const edgeToNodeOffset=this._edgeToNodeOffset;const edgeTypeOffset=this._edgeTypeOffset;const nodeCount=this.nodeCount;const edgeWeakType=this._edgeWeakType;const noDistance=this._noDistance;let index=0;const edge=this.createEdge(0);const node=this.createNode(0);while(index<nodesToVisitLength){const nodeIndex=nodesToVisit[index++];const nodeOrdinal=nodeIndex/nodeFieldCount;const distance=distances[nodeOrdinal]+1;const firstEdgeIndex=firstEdgeIndexes[nodeOrdinal];const edgesEnd=firstEdgeIndexes[nodeOrdinal+1];node.nodeIndex=nodeIndex;for(let edgeIndex=firstEdgeIndex;edgeIndex<edgesEnd;edgeIndex+=edgeFieldsCount){const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];if(edgeType===edgeWeakType){continue;}
const childNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];const childNodeOrdinal=childNodeIndex/nodeFieldCount;if(distances[childNodeOrdinal]!==noDistance){continue;}
edge.edgeIndex=edgeIndex;if(filter&&!filter(node,edge)){continue;}
distances[childNodeOrdinal]=distance;nodesToVisit[nodesToVisitLength++]=childNodeIndex;}}
if(nodesToVisitLength>nodeCount){throw new Error('BFS failed. Nodes to visit ('+nodesToVisitLength+') is more than nodes count ('+nodeCount+')');}}
_buildAggregates(filter){const aggregates={};const aggregatesByClassName={};const classIndexes=[];const nodes=this.nodes;const nodesLength=nodes.length;const nodeNativeType=this._nodeNativeType;const nodeFieldCount=this._nodeFieldCount;const selfSizeOffset=this._nodeSelfSizeOffset;const nodeTypeOffset=this._nodeTypeOffset;const node=this.rootNode();const nodeDistances=this._nodeDistances;for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){node.nodeIndex=nodeIndex;if(filter&&!filter(node)){continue;}
const selfSize=nodes[nodeIndex+selfSizeOffset];if(!selfSize&&nodes[nodeIndex+nodeTypeOffset]!==nodeNativeType){continue;}
const classIndex=node.classIndex();const nodeOrdinal=nodeIndex/nodeFieldCount;const distance=nodeDistances[nodeOrdinal];if(!(classIndex in aggregates)){const nodeType=node.type();const nameMatters=nodeType==='object'||nodeType==='native';const value={count:1,distance:distance,self:selfSize,maxRet:0,type:nodeType,name:nameMatters?node.name():null,idxs:[nodeIndex]};aggregates[classIndex]=value;classIndexes.push(classIndex);aggregatesByClassName[node.className()]=value;}else{const clss=aggregates[classIndex];clss.distance=Math.min(clss.distance,distance);++clss.count;clss.self+=selfSize;clss.idxs.push(nodeIndex);}}
for(let i=0,l=classIndexes.length;i<l;++i){const classIndex=classIndexes[i];aggregates[classIndex].idxs=aggregates[classIndex].idxs.slice();}
return{aggregatesByClassName:aggregatesByClassName,aggregatesByClassIndex:aggregates};}
_calculateClassesRetainedSize(aggregates,filter){const rootNodeIndex=this._rootNodeIndex;const node=this.createNode(rootNodeIndex);const list=[rootNodeIndex];const sizes=[-1];const classes=[];const seenClassNameIndexes={};const nodeFieldCount=this._nodeFieldCount;const nodeTypeOffset=this._nodeTypeOffset;const nodeNativeType=this._nodeNativeType;const dominatedNodes=this._dominatedNodes;const nodes=this.nodes;const firstDominatedNodeIndex=this._firstDominatedNodeIndex;while(list.length){const nodeIndex=list.pop();node.nodeIndex=nodeIndex;let classIndex=node.classIndex();const seen=!!seenClassNameIndexes[classIndex];const nodeOrdinal=nodeIndex/nodeFieldCount;const dominatedIndexFrom=firstDominatedNodeIndex[nodeOrdinal];const dominatedIndexTo=firstDominatedNodeIndex[nodeOrdinal+1];if(!seen&&(!filter||filter(node))&&(node.selfSize()||nodes[nodeIndex+nodeTypeOffset]===nodeNativeType)){aggregates[classIndex].maxRet+=node.retainedSize();if(dominatedIndexFrom!==dominatedIndexTo){seenClassNameIndexes[classIndex]=true;sizes.push(list.length);classes.push(classIndex);}}
for(let i=dominatedIndexFrom;i<dominatedIndexTo;i++){list.push(dominatedNodes[i]);}
const l=list.length;while(sizes[sizes.length-1]===l){sizes.pop();classIndex=classes.pop();seenClassNameIndexes[classIndex]=false;}}}
_sortAggregateIndexes(aggregates){const nodeA=this.createNode();const nodeB=this.createNode();for(const clss in aggregates){aggregates[clss].idxs.sort((idxA,idxB)=>{nodeA.nodeIndex=idxA;nodeB.nodeIndex=idxB;return nodeA.id()<nodeB.id()?-1:1;});}}
_isEssentialEdge(nodeIndex,edgeType){return edgeType!==this._edgeWeakType&&(edgeType!==this._edgeShortcutType||nodeIndex===this._rootNodeIndex);}
_buildPostOrderIndex(){const nodeFieldCount=this._nodeFieldCount;const nodeCount=this.nodeCount;const rootNodeOrdinal=this._rootNodeIndex/nodeFieldCount;const edgeFieldsCount=this._edgeFieldsCount;const edgeTypeOffset=this._edgeTypeOffset;const edgeToNodeOffset=this._edgeToNodeOffset;const firstEdgeIndexes=this._firstEdgeIndexes;const containmentEdges=this.containmentEdges;const mapAndFlag=this.userObjectsMapAndFlag();const flags=mapAndFlag?mapAndFlag.map:null;const flag=mapAndFlag?mapAndFlag.flag:0;const stackNodes=new Uint32Array(nodeCount);const stackCurrentEdge=new Uint32Array(nodeCount);const postOrderIndex2NodeOrdinal=new Uint32Array(nodeCount);const nodeOrdinal2PostOrderIndex=new Uint32Array(nodeCount);const visited=new Uint8Array(nodeCount);let postOrderIndex=0;let stackTop=0;stackNodes[0]=rootNodeOrdinal;stackCurrentEdge[0]=firstEdgeIndexes[rootNodeOrdinal];visited[rootNodeOrdinal]=1;let iteration=0;while(true){++iteration;while(stackTop>=0){const nodeOrdinal=stackNodes[stackTop];const edgeIndex=stackCurrentEdge[stackTop];const edgesEnd=firstEdgeIndexes[nodeOrdinal+1];if(edgeIndex<edgesEnd){stackCurrentEdge[stackTop]+=edgeFieldsCount;const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];if(!this._isEssentialEdge(nodeOrdinal*nodeFieldCount,edgeType)){continue;}
const childNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];const childNodeOrdinal=childNodeIndex/nodeFieldCount;if(visited[childNodeOrdinal]){continue;}
const nodeFlag=!flags||(flags[nodeOrdinal]&flag);const childNodeFlag=!flags||(flags[childNodeOrdinal]&flag);if(nodeOrdinal!==rootNodeOrdinal&&childNodeFlag&&!nodeFlag){continue;}
++stackTop;stackNodes[stackTop]=childNodeOrdinal;stackCurrentEdge[stackTop]=firstEdgeIndexes[childNodeOrdinal];visited[childNodeOrdinal]=1;}else{nodeOrdinal2PostOrderIndex[nodeOrdinal]=postOrderIndex;postOrderIndex2NodeOrdinal[postOrderIndex++]=nodeOrdinal;--stackTop;}}
if(postOrderIndex===nodeCount||iteration>1){break;}
const errors=new HeapSnapshotProblemReport(`Heap snapshot: ${
          nodeCount - postOrderIndex} nodes are unreachable from the root. Following nodes have only weak retainers:`);const dumpNode=this.rootNode();--postOrderIndex;stackTop=0;stackNodes[0]=rootNodeOrdinal;stackCurrentEdge[0]=firstEdgeIndexes[rootNodeOrdinal+1];for(let i=0;i<nodeCount;++i){if(visited[i]||!this._hasOnlyWeakRetainers(i)){continue;}
stackNodes[++stackTop]=i;stackCurrentEdge[stackTop]=firstEdgeIndexes[i];visited[i]=1;dumpNode.nodeIndex=i*nodeFieldCount;const retainers=[];for(let it=dumpNode.retainers();it.hasNext();it.next()){retainers.push(`${it.item().node().name()}@${it.item().node().id()}.${it.item().name()}`);}
errors.addError(`${dumpNode.name()} @${dumpNode.id()}  weak retainers: ${retainers.join(', ')}`);}
console.warn(errors.toString());}
if(postOrderIndex!==nodeCount){const errors=new HeapSnapshotProblemReport('Still found '+(nodeCount-postOrderIndex)+' unreachable nodes in heap snapshot:');const dumpNode=this.rootNode();--postOrderIndex;for(let i=0;i<nodeCount;++i){if(visited[i]){continue;}
dumpNode.nodeIndex=i*nodeFieldCount;errors.addError(dumpNode.name()+' @'+dumpNode.id());nodeOrdinal2PostOrderIndex[i]=postOrderIndex;postOrderIndex2NodeOrdinal[postOrderIndex++]=i;}
nodeOrdinal2PostOrderIndex[rootNodeOrdinal]=postOrderIndex;postOrderIndex2NodeOrdinal[postOrderIndex++]=rootNodeOrdinal;console.warn(errors.toString());}
return{postOrderIndex2NodeOrdinal:postOrderIndex2NodeOrdinal,nodeOrdinal2PostOrderIndex:nodeOrdinal2PostOrderIndex};}
_hasOnlyWeakRetainers(nodeOrdinal){const edgeTypeOffset=this._edgeTypeOffset;const edgeWeakType=this._edgeWeakType;const edgeShortcutType=this._edgeShortcutType;const containmentEdges=this.containmentEdges;const retainingEdges=this._retainingEdges;const beginRetainerIndex=this._firstRetainerIndex[nodeOrdinal];const endRetainerIndex=this._firstRetainerIndex[nodeOrdinal+1];for(let retainerIndex=beginRetainerIndex;retainerIndex<endRetainerIndex;++retainerIndex){const retainerEdgeIndex=retainingEdges[retainerIndex];const retainerEdgeType=containmentEdges[retainerEdgeIndex+edgeTypeOffset];if(retainerEdgeType!==edgeWeakType&&retainerEdgeType!==edgeShortcutType){return false;}}
return true;}
_buildDominatorTree(postOrderIndex2NodeOrdinal,nodeOrdinal2PostOrderIndex){const nodeFieldCount=this._nodeFieldCount;const firstRetainerIndex=this._firstRetainerIndex;const retainingNodes=this._retainingNodes;const retainingEdges=this._retainingEdges;const edgeFieldsCount=this._edgeFieldsCount;const edgeTypeOffset=this._edgeTypeOffset;const edgeToNodeOffset=this._edgeToNodeOffset;const firstEdgeIndexes=this._firstEdgeIndexes;const containmentEdges=this.containmentEdges;const rootNodeIndex=this._rootNodeIndex;const mapAndFlag=this.userObjectsMapAndFlag();const flags=mapAndFlag?mapAndFlag.map:null;const flag=mapAndFlag?mapAndFlag.flag:0;const nodesCount=postOrderIndex2NodeOrdinal.length;const rootPostOrderedIndex=nodesCount-1;const noEntry=nodesCount;const dominators=new Uint32Array(nodesCount);for(let i=0;i<rootPostOrderedIndex;++i){dominators[i]=noEntry;}
dominators[rootPostOrderedIndex]=rootPostOrderedIndex;const affected=new Uint8Array(nodesCount);let nodeOrdinal;{nodeOrdinal=this._rootNodeIndex/nodeFieldCount;const endEdgeIndex=firstEdgeIndexes[nodeOrdinal+1];for(let edgeIndex=firstEdgeIndexes[nodeOrdinal];edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];if(!this._isEssentialEdge(this._rootNodeIndex,edgeType)){continue;}
const childNodeOrdinal=containmentEdges[edgeIndex+edgeToNodeOffset]/nodeFieldCount;affected[nodeOrdinal2PostOrderIndex[childNodeOrdinal]]=1;}}
let changed=true;while(changed){changed=false;for(let postOrderIndex=rootPostOrderedIndex-1;postOrderIndex>=0;--postOrderIndex){if(affected[postOrderIndex]===0){continue;}
affected[postOrderIndex]=0;if(dominators[postOrderIndex]===rootPostOrderedIndex){continue;}
nodeOrdinal=postOrderIndex2NodeOrdinal[postOrderIndex];const nodeFlag=!flags||(flags[nodeOrdinal]&flag);let newDominatorIndex=noEntry;const beginRetainerIndex=firstRetainerIndex[nodeOrdinal];const endRetainerIndex=firstRetainerIndex[nodeOrdinal+1];let orphanNode=true;for(let retainerIndex=beginRetainerIndex;retainerIndex<endRetainerIndex;++retainerIndex){const retainerEdgeIndex=retainingEdges[retainerIndex];const retainerEdgeType=containmentEdges[retainerEdgeIndex+edgeTypeOffset];const retainerNodeIndex=retainingNodes[retainerIndex];if(!this._isEssentialEdge(retainerNodeIndex,retainerEdgeType)){continue;}
orphanNode=false;const retainerNodeOrdinal=retainerNodeIndex/nodeFieldCount;const retainerNodeFlag=!flags||(flags[retainerNodeOrdinal]&flag);if(retainerNodeIndex!==rootNodeIndex&&nodeFlag&&!retainerNodeFlag){continue;}
let retanerPostOrderIndex=nodeOrdinal2PostOrderIndex[retainerNodeOrdinal];if(dominators[retanerPostOrderIndex]!==noEntry){if(newDominatorIndex===noEntry){newDominatorIndex=retanerPostOrderIndex;}else{while(retanerPostOrderIndex!==newDominatorIndex){while(retanerPostOrderIndex<newDominatorIndex){retanerPostOrderIndex=dominators[retanerPostOrderIndex];}
while(newDominatorIndex<retanerPostOrderIndex){newDominatorIndex=dominators[newDominatorIndex];}}}
if(newDominatorIndex===rootPostOrderedIndex){break;}}}
if(orphanNode){newDominatorIndex=rootPostOrderedIndex;}
if(newDominatorIndex!==noEntry&&dominators[postOrderIndex]!==newDominatorIndex){dominators[postOrderIndex]=newDominatorIndex;changed=true;nodeOrdinal=postOrderIndex2NodeOrdinal[postOrderIndex];const beginEdgeToNodeFieldIndex=firstEdgeIndexes[nodeOrdinal]+edgeToNodeOffset;const endEdgeToNodeFieldIndex=firstEdgeIndexes[nodeOrdinal+1];for(let toNodeFieldIndex=beginEdgeToNodeFieldIndex;toNodeFieldIndex<endEdgeToNodeFieldIndex;toNodeFieldIndex+=edgeFieldsCount){const childNodeOrdinal=containmentEdges[toNodeFieldIndex]/nodeFieldCount;affected[nodeOrdinal2PostOrderIndex[childNodeOrdinal]]=1;}}}}
const dominatorsTree=new Uint32Array(nodesCount);for(let postOrderIndex=0,l=dominators.length;postOrderIndex<l;++postOrderIndex){nodeOrdinal=postOrderIndex2NodeOrdinal[postOrderIndex];dominatorsTree[nodeOrdinal]=postOrderIndex2NodeOrdinal[dominators[postOrderIndex]];}
return dominatorsTree;}
_calculateRetainedSizes(postOrderIndex2NodeOrdinal){const nodeCount=this.nodeCount;const nodes=this.nodes;const nodeSelfSizeOffset=this._nodeSelfSizeOffset;const nodeFieldCount=this._nodeFieldCount;const dominatorsTree=this._dominatorsTree;const retainedSizes=this._retainedSizes;for(let nodeOrdinal=0;nodeOrdinal<nodeCount;++nodeOrdinal){retainedSizes[nodeOrdinal]=nodes[nodeOrdinal*nodeFieldCount+nodeSelfSizeOffset];}
for(let postOrderIndex=0;postOrderIndex<nodeCount-1;++postOrderIndex){const nodeOrdinal=postOrderIndex2NodeOrdinal[postOrderIndex];const dominatorOrdinal=dominatorsTree[nodeOrdinal];retainedSizes[dominatorOrdinal]+=retainedSizes[nodeOrdinal];}}
_buildDominatedNodes(){const indexArray=this._firstDominatedNodeIndex;const dominatedNodes=this._dominatedNodes;const nodeFieldCount=this._nodeFieldCount;const dominatorsTree=this._dominatorsTree;let fromNodeOrdinal=0;let toNodeOrdinal=this.nodeCount;const rootNodeOrdinal=this._rootNodeIndex/nodeFieldCount;if(rootNodeOrdinal===fromNodeOrdinal){fromNodeOrdinal=1;}else if(rootNodeOrdinal===toNodeOrdinal-1){toNodeOrdinal=toNodeOrdinal-1;}else{throw new Error('Root node is expected to be either first or last');}
for(let nodeOrdinal=fromNodeOrdinal;nodeOrdinal<toNodeOrdinal;++nodeOrdinal){++indexArray[dominatorsTree[nodeOrdinal]];}
let firstDominatedNodeIndex=0;for(let i=0,l=this.nodeCount;i<l;++i){const dominatedCount=dominatedNodes[firstDominatedNodeIndex]=indexArray[i];indexArray[i]=firstDominatedNodeIndex;firstDominatedNodeIndex+=dominatedCount;}
indexArray[this.nodeCount]=dominatedNodes.length;for(let nodeOrdinal=fromNodeOrdinal;nodeOrdinal<toNodeOrdinal;++nodeOrdinal){const dominatorOrdinal=dominatorsTree[nodeOrdinal];let dominatedRefIndex=indexArray[dominatorOrdinal];dominatedRefIndex+=(--dominatedNodes[dominatedRefIndex]);dominatedNodes[dominatedRefIndex]=nodeOrdinal*nodeFieldCount;}}
_buildSamples(){const samples=this._rawSamples;if(!samples||!samples.length){return;}
const sampleCount=samples.length/2;const sizeForRange=new Array(sampleCount);const timestamps=new Array(sampleCount);const lastAssignedIds=new Array(sampleCount);const timestampOffset=this._metaNode.sample_fields.indexOf('timestamp_us');const lastAssignedIdOffset=this._metaNode.sample_fields.indexOf('last_assigned_id');for(let i=0;i<sampleCount;i++){sizeForRange[i]=0;timestamps[i]=(samples[2*i+timestampOffset])/1000;lastAssignedIds[i]=samples[2*i+lastAssignedIdOffset];}
const nodes=this.nodes;const nodesLength=nodes.length;const nodeFieldCount=this._nodeFieldCount;const node=this.rootNode();for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){node.nodeIndex=nodeIndex;const nodeId=node.id();if(nodeId%2===0){continue;}
const rangeIndex=lastAssignedIds.lowerBound(nodeId);if(rangeIndex===sampleCount){continue;}
sizeForRange[rangeIndex]+=node.selfSize();}
this._samples=new HeapSnapshotModel.Samples(timestamps,lastAssignedIds,sizeForRange);}
_buildLocationMap(){const map=new Map();const locations=this._locations;for(let i=0;i<locations.length;i+=this._locationFieldCount){const nodeIndex=locations[i+this._locationIndexOffset];const scriptId=locations[i+this._locationScriptIdOffset];const line=locations[i+this._locationLineOffset];const col=locations[i+this._locationColumnOffset];map.set(nodeIndex,new HeapSnapshotModel.Location(scriptId,line,col));}
this._locationMap=map;}
getLocation(nodeIndex){return this._locationMap.get(nodeIndex)||null;}
getSamples(){return this._samples;}
calculateFlags(){throw new Error('Not implemented');}
calculateStatistics(){throw new Error('Not implemented');}
userObjectsMapAndFlag(){throw new Error('Not implemented');}
calculateSnapshotDiff(baseSnapshotId,baseSnapshotAggregates){let snapshotDiff=this._snapshotDiffs[baseSnapshotId];if(snapshotDiff){return snapshotDiff;}
snapshotDiff={};const aggregates=this.aggregates(true,'allObjects');for(const className in baseSnapshotAggregates){const baseAggregate=baseSnapshotAggregates[className];const diff=this._calculateDiffForClass(baseAggregate,aggregates[className]);if(diff){snapshotDiff[className]=diff;}}
const emptyBaseAggregate=new HeapSnapshotModel.AggregateForDiff();for(const className in aggregates){if(className in baseSnapshotAggregates){continue;}
snapshotDiff[className]=this._calculateDiffForClass(emptyBaseAggregate,aggregates[className]);}
this._snapshotDiffs[baseSnapshotId]=snapshotDiff;return snapshotDiff;}
_calculateDiffForClass(baseAggregate,aggregate){const baseIds=baseAggregate.ids;const baseIndexes=baseAggregate.indexes;const baseSelfSizes=baseAggregate.selfSizes;const indexes=aggregate?aggregate.idxs:[];let i=0;let j=0;const l=baseIds.length;const m=indexes.length;const diff=new HeapSnapshotModel.Diff();const nodeB=this.createNode(indexes[j]);while(i<l&&j<m){const nodeAId=baseIds[i];if(nodeAId<nodeB.id()){diff.deletedIndexes.push(baseIndexes[i]);diff.removedCount++;diff.removedSize+=baseSelfSizes[i];++i;}else if(nodeAId>nodeB.id()){diff.addedIndexes.push(indexes[j]);diff.addedCount++;diff.addedSize+=nodeB.selfSize();nodeB.nodeIndex=indexes[++j];}else{++i;nodeB.nodeIndex=indexes[++j];}}
while(i<l){diff.deletedIndexes.push(baseIndexes[i]);diff.removedCount++;diff.removedSize+=baseSelfSizes[i];++i;}
while(j<m){diff.addedIndexes.push(indexes[j]);diff.addedCount++;diff.addedSize+=nodeB.selfSize();nodeB.nodeIndex=indexes[++j];}
diff.countDelta=diff.addedCount-diff.removedCount;diff.sizeDelta=diff.addedSize-diff.removedSize;if(!diff.addedCount&&!diff.removedCount){return null;}
return diff;}
_nodeForSnapshotObjectId(snapshotObjectId){for(let it=this._allNodes();it.hasNext();it.next()){if(it.node.id()===snapshotObjectId){return it.node;}}
return null;}
nodeClassName(snapshotObjectId){const node=this._nodeForSnapshotObjectId(snapshotObjectId);if(node){return node.className();}
return null;}
idsOfObjectsWithName(name){const ids=[];for(let it=this._allNodes();it.hasNext();it.next()){if(it.item().name()===name){ids.push(it.item().id());}}
return ids;}
createEdgesProvider(nodeIndex){const node=this.createNode(nodeIndex);const filter=this.containmentEdgesFilter();const indexProvider=new HeapSnapshotEdgeIndexProvider(this);return new HeapSnapshotEdgesProvider(this,filter,node.edges(),indexProvider);}
createEdgesProviderForTest(nodeIndex,filter){const node=this.createNode(nodeIndex);const indexProvider=new HeapSnapshotEdgeIndexProvider(this);return new HeapSnapshotEdgesProvider(this,filter,node.edges(),indexProvider);}
retainingEdgesFilter(){return null;}
containmentEdgesFilter(){return null;}
createRetainingEdgesProvider(nodeIndex){const node=this.createNode(nodeIndex);const filter=this.retainingEdgesFilter();const indexProvider=new HeapSnapshotRetainerEdgeIndexProvider(this);return new HeapSnapshotEdgesProvider(this,filter,node.retainers(),indexProvider);}
createAddedNodesProvider(baseSnapshotId,className){const snapshotDiff=this._snapshotDiffs[baseSnapshotId];const diffForClass=snapshotDiff[className];return new HeapSnapshotNodesProvider(this,diffForClass.addedIndexes);}
createDeletedNodesProvider(nodeIndexes){return new HeapSnapshotNodesProvider(this,nodeIndexes);}
createNodesProviderForClass(className,nodeFilter){return new HeapSnapshotNodesProvider(this,this.aggregatesWithFilter(nodeFilter)[className].idxs);}
_maxJsNodeId(){const nodeFieldCount=this._nodeFieldCount;const nodes=this.nodes;const nodesLength=nodes.length;let id=0;for(let nodeIndex=this._nodeIdOffset;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){const nextId=nodes[nodeIndex];if(nextId%2===0){continue;}
if(id<nextId){id=nextId;}}
return id;}
updateStaticData(){return new HeapSnapshotModel.StaticData(this.nodeCount,this._rootNodeIndex,this.totalSize,this._maxJsNodeId());}}
const HeapSnapshotMetainfo=class{constructor(){this.node_fields=[];this.node_types=[];this.edge_fields=[];this.edge_types=[];this.trace_function_info_fields=[];this.trace_node_fields=[];this.sample_fields=[];this.type_strings={};}};export class HeapSnapshotHeader{constructor(){this.title='';this.meta=new HeapSnapshotMetainfo();this.node_count=0;this.edge_count=0;this.trace_function_count=0;}}
export class HeapSnapshotItemProvider{constructor(iterator,indexProvider){this._iterator=iterator;this._indexProvider=indexProvider;this._isEmpty=!iterator.hasNext();this._iterationOrder=null;this._currentComparator=null;this._sortedPrefixLength=0;this._sortedSuffixLength=0;}
_createIterationOrder(){if(this._iterationOrder){return;}
this._iterationOrder=[];for(let iterator=this._iterator;iterator.hasNext();iterator.next()){this._iterationOrder.push(iterator.item().itemIndex());}}
isEmpty(){return this._isEmpty;}
serializeItemsRange(begin,end){this._createIterationOrder();if(begin>end){throw new Error('Start position > end position: '+begin+' > '+end);}
if(end>this._iterationOrder.length){end=this._iterationOrder.length;}
if(this._sortedPrefixLength<end&&begin<this._iterationOrder.length-this._sortedSuffixLength){this.sort(this._currentComparator,this._sortedPrefixLength,this._iterationOrder.length-1-this._sortedSuffixLength,begin,end-1);if(begin<=this._sortedPrefixLength){this._sortedPrefixLength=end;}
if(end>=this._iterationOrder.length-this._sortedSuffixLength){this._sortedSuffixLength=this._iterationOrder.length-begin;}}
let position=begin;const count=end-begin;const result=new Array(count);for(let i=0;i<count;++i){const itemIndex=this._iterationOrder[position++];const item=this._indexProvider.itemForIndex(itemIndex);result[i]=item.serialize();}
return new HeapSnapshotModel.ItemsRange(begin,end,this._iterationOrder.length,result);}
sortAndRewind(comparator){this._currentComparator=comparator;this._sortedPrefixLength=0;this._sortedSuffixLength=0;}}
export class HeapSnapshotEdgesProvider extends HeapSnapshotItemProvider{constructor(snapshot,filter,edgesIter,indexProvider){const iter=filter?new HeapSnapshotFilteredIterator(edgesIter,(filter)):edgesIter;super(iter,indexProvider);this.snapshot=snapshot;}
sort(comparator,leftBound,rightBound,windowLeft,windowRight){const fieldName1=comparator.fieldName1;const fieldName2=comparator.fieldName2;const ascending1=comparator.ascending1;const ascending2=comparator.ascending2;const edgeA=(this._iterator.item()).clone();const edgeB=edgeA.clone();const nodeA=this.snapshot.createNode();const nodeB=this.snapshot.createNode();function compareEdgeFieldName(ascending,indexA,indexB){edgeA.edgeIndex=indexA;edgeB.edgeIndex=indexB;if(edgeB.name()==='__proto__'){return-1;}
if(edgeA.name()==='__proto__'){return 1;}
const result=edgeA.hasStringName()===edgeB.hasStringName()?(edgeA.name()<edgeB.name()?-1:(edgeA.name()>edgeB.name()?1:0)):(edgeA.hasStringName()?-1:1);return ascending?result:-result;}
function compareNodeField(fieldName,ascending,indexA,indexB){edgeA.edgeIndex=indexA;nodeA.nodeIndex=edgeA.nodeIndex();const valueA=nodeA[fieldName]();edgeB.edgeIndex=indexB;nodeB.nodeIndex=edgeB.nodeIndex();const valueB=nodeB[fieldName]();const result=valueA<valueB?-1:(valueA>valueB?1:0);return ascending?result:-result;}
function compareEdgeAndNode(indexA,indexB){let result=compareEdgeFieldName(ascending1,indexA,indexB);if(result===0){result=compareNodeField(fieldName2,ascending2,indexA,indexB);}
if(result===0){return indexA-indexB;}
return result;}
function compareNodeAndEdge(indexA,indexB){let result=compareNodeField(fieldName1,ascending1,indexA,indexB);if(result===0){result=compareEdgeFieldName(ascending2,indexA,indexB);}
if(result===0){return indexA-indexB;}
return result;}
function compareNodeAndNode(indexA,indexB){let result=compareNodeField(fieldName1,ascending1,indexA,indexB);if(result===0){result=compareNodeField(fieldName2,ascending2,indexA,indexB);}
if(result===0){return indexA-indexB;}
return result;}
if(fieldName1==='!edgeName'){this._iterationOrder.sortRange(compareEdgeAndNode,leftBound,rightBound,windowLeft,windowRight);}else if(fieldName2==='!edgeName'){this._iterationOrder.sortRange(compareNodeAndEdge,leftBound,rightBound,windowLeft,windowRight);}else{this._iterationOrder.sortRange(compareNodeAndNode,leftBound,rightBound,windowLeft,windowRight);}}}
export class HeapSnapshotNodesProvider extends HeapSnapshotItemProvider{constructor(snapshot,nodeIndexes){const indexProvider=new HeapSnapshotNodeIndexProvider(snapshot);const it=new HeapSnapshotIndexRangeIterator(indexProvider,nodeIndexes);super(it,indexProvider);this.snapshot=snapshot;}
nodePosition(snapshotObjectId){this._createIterationOrder();const node=this.snapshot.createNode();let i=0;for(;i<this._iterationOrder.length;i++){node.nodeIndex=this._iterationOrder[i];if(node.id()===snapshotObjectId){break;}}
if(i===this._iterationOrder.length){return-1;}
const targetNodeIndex=this._iterationOrder[i];let smallerCount=0;const compare=this._buildCompareFunction(this._currentComparator);for(let i=0;i<this._iterationOrder.length;i++){if(compare(this._iterationOrder[i],targetNodeIndex)<0){++smallerCount;}}
return smallerCount;}
_buildCompareFunction(comparator){const nodeA=this.snapshot.createNode();const nodeB=this.snapshot.createNode();const fieldAccessor1=nodeA[comparator.fieldName1];const fieldAccessor2=nodeA[comparator.fieldName2];const ascending1=comparator.ascending1?1:-1;const ascending2=comparator.ascending2?1:-1;function sortByNodeField(fieldAccessor,ascending){const valueA=fieldAccessor.call(nodeA);const valueB=fieldAccessor.call(nodeB);return valueA<valueB?-ascending:(valueA>valueB?ascending:0);}
function sortByComparator(indexA,indexB){nodeA.nodeIndex=indexA;nodeB.nodeIndex=indexB;let result=sortByNodeField(fieldAccessor1,ascending1);if(result===0){result=sortByNodeField(fieldAccessor2,ascending2);}
return result||indexA-indexB;}
return sortByComparator;}
sort(comparator,leftBound,rightBound,windowLeft,windowRight){this._iterationOrder.sortRange(this._buildCompareFunction(comparator),leftBound,rightBound,windowLeft,windowRight);}}
export class JSHeapSnapshot extends HeapSnapshot{constructor(profile,progress){super(profile,progress);this._nodeFlags={canBeQueried:1,detachedDOMTreeNode:2,pageObject:4};this._lazyStringCache={};this.initialize();}
createNode(nodeIndex){return new JSHeapSnapshotNode(this,nodeIndex===undefined?-1:nodeIndex);}
createEdge(edgeIndex){return new JSHeapSnapshotEdge(this,edgeIndex);}
createRetainingEdge(retainerIndex){return new JSHeapSnapshotRetainerEdge(this,retainerIndex);}
containmentEdgesFilter(){return edge=>!edge.isInvisible();}
retainingEdgesFilter(){const containmentEdgesFilter=this.containmentEdgesFilter();function filter(edge){return containmentEdgesFilter(edge)&&!edge.node().isRoot()&&!edge.isWeak();}
return filter;}
calculateFlags(){this._flags=new Uint32Array(this.nodeCount);this._markDetachedDOMTreeNodes();this._markQueriableHeapObjects();this._markPageOwnedNodes();}
calculateDistances(){function filter(node,edge){if(node.isHidden()){return edge.name()!=='sloppy_function_map'||node.rawName()!=='system / NativeContext';}
if(node.isArray()){if(node.rawName()!=='(map descriptors)'){return true;}
const index=edge.name();return index<2||(index%3)!==1;}
return true;}
super.calculateDistances(filter);}
isUserRoot(node){return node.isUserRoot()||node.isDocumentDOMTreesRoot();}
userObjectsMapAndFlag(){return{map:this._flags,flag:this._nodeFlags.pageObject};}
_flagsOfNode(node){return this._flags[node.nodeIndex/this._nodeFieldCount];}
_markDetachedDOMTreeNodes(){const nodes=this.nodes;const nodesLength=nodes.length;const nodeFieldCount=this._nodeFieldCount;const nodeNativeType=this._nodeNativeType;const nodeTypeOffset=this._nodeTypeOffset;const flag=this._nodeFlags.detachedDOMTreeNode;const node=this.rootNode();for(let nodeIndex=0,ordinal=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount,ordinal++){const nodeType=nodes[nodeIndex+nodeTypeOffset];if(nodeType!==nodeNativeType){continue;}
node.nodeIndex=nodeIndex;if(node.name().startsWith('Detached ')){this._flags[ordinal]|=flag;}}}
_markQueriableHeapObjects(){const flag=this._nodeFlags.canBeQueried;const hiddenEdgeType=this._edgeHiddenType;const internalEdgeType=this._edgeInternalType;const invisibleEdgeType=this._edgeInvisibleType;const weakEdgeType=this._edgeWeakType;const edgeToNodeOffset=this._edgeToNodeOffset;const edgeTypeOffset=this._edgeTypeOffset;const edgeFieldsCount=this._edgeFieldsCount;const containmentEdges=this.containmentEdges;const nodeFieldCount=this._nodeFieldCount;const firstEdgeIndexes=this._firstEdgeIndexes;const flags=this._flags;const list=[];for(let iter=this.rootNode().edges();iter.hasNext();iter.next()){if(iter.edge.node().isUserRoot()){list.push(iter.edge.node().nodeIndex/nodeFieldCount);}}
while(list.length){const nodeOrdinal=list.pop();if(flags[nodeOrdinal]&flag){continue;}
flags[nodeOrdinal]|=flag;const beginEdgeIndex=firstEdgeIndexes[nodeOrdinal];const endEdgeIndex=firstEdgeIndexes[nodeOrdinal+1];for(let edgeIndex=beginEdgeIndex;edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const childNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];const childNodeOrdinal=childNodeIndex/nodeFieldCount;if(flags[childNodeOrdinal]&flag){continue;}
const type=containmentEdges[edgeIndex+edgeTypeOffset];if(type===hiddenEdgeType||type===invisibleEdgeType||type===internalEdgeType||type===weakEdgeType){continue;}
list.push(childNodeOrdinal);}}}
_markPageOwnedNodes(){const edgeShortcutType=this._edgeShortcutType;const edgeElementType=this._edgeElementType;const edgeToNodeOffset=this._edgeToNodeOffset;const edgeTypeOffset=this._edgeTypeOffset;const edgeFieldsCount=this._edgeFieldsCount;const edgeWeakType=this._edgeWeakType;const firstEdgeIndexes=this._firstEdgeIndexes;const containmentEdges=this.containmentEdges;const nodeFieldCount=this._nodeFieldCount;const nodesCount=this.nodeCount;const flags=this._flags;const pageObjectFlag=this._nodeFlags.pageObject;const nodesToVisit=new Uint32Array(nodesCount);let nodesToVisitLength=0;const rootNodeOrdinal=this._rootNodeIndex/nodeFieldCount;const node=this.rootNode();for(let edgeIndex=firstEdgeIndexes[rootNodeOrdinal],endEdgeIndex=firstEdgeIndexes[rootNodeOrdinal+1];edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];const nodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];if(edgeType===edgeElementType){node.nodeIndex=nodeIndex;if(!node.isDocumentDOMTreesRoot()){continue;}}else if(edgeType!==edgeShortcutType){continue;}
const nodeOrdinal=nodeIndex/nodeFieldCount;nodesToVisit[nodesToVisitLength++]=nodeOrdinal;flags[nodeOrdinal]|=pageObjectFlag;}
while(nodesToVisitLength){const nodeOrdinal=nodesToVisit[--nodesToVisitLength];const beginEdgeIndex=firstEdgeIndexes[nodeOrdinal];const endEdgeIndex=firstEdgeIndexes[nodeOrdinal+1];for(let edgeIndex=beginEdgeIndex;edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const childNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];const childNodeOrdinal=childNodeIndex/nodeFieldCount;if(flags[childNodeOrdinal]&pageObjectFlag){continue;}
const type=containmentEdges[edgeIndex+edgeTypeOffset];if(type===edgeWeakType){continue;}
nodesToVisit[nodesToVisitLength++]=childNodeOrdinal;flags[childNodeOrdinal]|=pageObjectFlag;}}}
calculateStatistics(){const nodeFieldCount=this._nodeFieldCount;const nodes=this.nodes;const nodesLength=nodes.length;const nodeTypeOffset=this._nodeTypeOffset;const nodeSizeOffset=this._nodeSelfSizeOffset;const nodeNativeType=this._nodeNativeType;const nodeCodeType=this._nodeCodeType;const nodeConsStringType=this._nodeConsStringType;const nodeSlicedStringType=this._nodeSlicedStringType;const distances=this._nodeDistances;let sizeNative=0;let sizeCode=0;let sizeStrings=0;let sizeJSArrays=0;let sizeSystem=0;const node=this.rootNode();for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){const nodeSize=nodes[nodeIndex+nodeSizeOffset];const ordinal=nodeIndex/nodeFieldCount;if(distances[ordinal]>=HeapSnapshotModel.baseSystemDistance){sizeSystem+=nodeSize;continue;}
const nodeType=nodes[nodeIndex+nodeTypeOffset];node.nodeIndex=nodeIndex;if(nodeType===nodeNativeType){sizeNative+=nodeSize;}else if(nodeType===nodeCodeType){sizeCode+=nodeSize;}else if(nodeType===nodeConsStringType||nodeType===nodeSlicedStringType||node.type()==='string'){sizeStrings+=nodeSize;}else if(node.name()==='Array'){sizeJSArrays+=this._calculateArraySize(node);}}
this._statistics=new HeapSnapshotModel.Statistics();this._statistics.total=this.totalSize;this._statistics.v8heap=this.totalSize-sizeNative;this._statistics.native=sizeNative;this._statistics.code=sizeCode;this._statistics.jsArrays=sizeJSArrays;this._statistics.strings=sizeStrings;this._statistics.system=sizeSystem;}
_calculateArraySize(node){let size=node.selfSize();const beginEdgeIndex=node.edgeIndexesStart();const endEdgeIndex=node.edgeIndexesEnd();const containmentEdges=this.containmentEdges;const strings=this.strings;const edgeToNodeOffset=this._edgeToNodeOffset;const edgeTypeOffset=this._edgeTypeOffset;const edgeNameOffset=this._edgeNameOffset;const edgeFieldsCount=this._edgeFieldsCount;const edgeInternalType=this._edgeInternalType;for(let edgeIndex=beginEdgeIndex;edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];if(edgeType!==edgeInternalType){continue;}
const edgeName=strings[containmentEdges[edgeIndex+edgeNameOffset]];if(edgeName!=='elements'){continue;}
const elementsNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];node.nodeIndex=elementsNodeIndex;if(node.retainersCount()===1){size+=node.selfSize();}
break;}
return size;}
getStatistics(){return this._statistics;}}
export class JSHeapSnapshotNode extends HeapSnapshotNode{constructor(snapshot,nodeIndex){super(snapshot,nodeIndex);}
canBeQueried(){const flags=this._snapshot._flagsOfNode(this);return!!(flags&this._snapshot._nodeFlags.canBeQueried);}
rawName(){return super.name();}
name(){const snapshot=this._snapshot;if(this.rawType()===snapshot._nodeConsStringType){let string=snapshot._lazyStringCache[this.nodeIndex];if(typeof string==='undefined'){string=this._consStringName();snapshot._lazyStringCache[this.nodeIndex]=string;}
return string;}
return this.rawName();}
_consStringName(){const snapshot=this._snapshot;const consStringType=snapshot._nodeConsStringType;const edgeInternalType=snapshot._edgeInternalType;const edgeFieldsCount=snapshot._edgeFieldsCount;const edgeToNodeOffset=snapshot._edgeToNodeOffset;const edgeTypeOffset=snapshot._edgeTypeOffset;const edgeNameOffset=snapshot._edgeNameOffset;const strings=snapshot.strings;const edges=snapshot.containmentEdges;const firstEdgeIndexes=snapshot._firstEdgeIndexes;const nodeFieldCount=snapshot._nodeFieldCount;const nodeTypeOffset=snapshot._nodeTypeOffset;const nodeNameOffset=snapshot._nodeNameOffset;const nodes=snapshot.nodes;const nodesStack=[];nodesStack.push(this.nodeIndex);let name='';while(nodesStack.length&&name.length<1024){const nodeIndex=nodesStack.pop();if(nodes[nodeIndex+nodeTypeOffset]!==consStringType){name+=strings[nodes[nodeIndex+nodeNameOffset]];continue;}
const nodeOrdinal=nodeIndex/nodeFieldCount;const beginEdgeIndex=firstEdgeIndexes[nodeOrdinal];const endEdgeIndex=firstEdgeIndexes[nodeOrdinal+1];let firstNodeIndex=0;let secondNodeIndex=0;for(let edgeIndex=beginEdgeIndex;edgeIndex<endEdgeIndex&&(!firstNodeIndex||!secondNodeIndex);edgeIndex+=edgeFieldsCount){const edgeType=edges[edgeIndex+edgeTypeOffset];if(edgeType===edgeInternalType){const edgeName=strings[edges[edgeIndex+edgeNameOffset]];if(edgeName==='first'){firstNodeIndex=edges[edgeIndex+edgeToNodeOffset];}else if(edgeName==='second'){secondNodeIndex=edges[edgeIndex+edgeToNodeOffset];}}}
nodesStack.push(secondNodeIndex);nodesStack.push(firstNodeIndex);}
return name;}
className(){const type=this.type();switch(type){case'hidden':return'(system)';case'object':case'native':return this.name();case'code':return'(compiled code)';default:return'('+type+')';}}
classIndex(){const snapshot=this._snapshot;const nodes=snapshot.nodes;const type=nodes[this.nodeIndex+snapshot._nodeTypeOffset];if(type===snapshot._nodeObjectType||type===snapshot._nodeNativeType){return nodes[this.nodeIndex+snapshot._nodeNameOffset];}
return-1-type;}
id(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeIdOffset];}
isHidden(){return this.rawType()===this._snapshot._nodeHiddenType;}
isArray(){return this.rawType()===this._snapshot._nodeArrayType;}
isSynthetic(){return this.rawType()===this._snapshot._nodeSyntheticType;}
isUserRoot(){return!this.isSynthetic();}
isDocumentDOMTreesRoot(){return this.isSynthetic()&&this.name()==='(Document DOM trees)';}
serialize(){const result=super.serialize();const flags=this._snapshot._flagsOfNode(this);if(flags&this._snapshot._nodeFlags.canBeQueried){result.canBeQueried=true;}
if(flags&this._snapshot._nodeFlags.detachedDOMTreeNode){result.detachedDOMTreeNode=true;}
return result;}}
export class JSHeapSnapshotEdge extends HeapSnapshotEdge{constructor(snapshot,edgeIndex){super(snapshot,edgeIndex);}
clone(){const snapshot=(this._snapshot);return new JSHeapSnapshotEdge(snapshot,this.edgeIndex);}
hasStringName(){if(!this.isShortcut()){return this._hasStringName();}
return isNaN(parseInt(this._name(),10));}
isElement(){return this.rawType()===this._snapshot._edgeElementType;}
isHidden(){return this.rawType()===this._snapshot._edgeHiddenType;}
isWeak(){return this.rawType()===this._snapshot._edgeWeakType;}
isInternal(){return this.rawType()===this._snapshot._edgeInternalType;}
isInvisible(){return this.rawType()===this._snapshot._edgeInvisibleType;}
isShortcut(){return this.rawType()===this._snapshot._edgeShortcutType;}
name(){const name=this._name();if(!this.isShortcut()){return String(name);}
const numName=parseInt(name,10);return String(isNaN(numName)?name:numName);}
toString(){const name=this.name();switch(this.type()){case'context':return'->'+name;case'element':return'['+name+']';case'weak':return'[['+name+']]';case'property':return name.indexOf(' ')===-1?'.'+name:'["'+name+'"]';case'shortcut':if(typeof name==='string'){return name.indexOf(' ')===-1?'.'+name:'["'+name+'"]';}else{return'['+name+']';}
case'internal':case'hidden':case'invisible':return'{'+name+'}';}
return'?'+name+'?';}
_hasStringName(){const type=this.rawType();const snapshot=this._snapshot;return type!==snapshot._edgeElementType&&type!==snapshot._edgeHiddenType;}
_name(){return this._hasStringName()?this._snapshot.strings[this._nameOrIndex()]:this._nameOrIndex();}
_nameOrIndex(){return this._edges[this.edgeIndex+this._snapshot._edgeNameOffset];}
rawType(){return this._edges[this.edgeIndex+this._snapshot._edgeTypeOffset];}}
export class JSHeapSnapshotRetainerEdge extends HeapSnapshotRetainerEdge{constructor(snapshot,retainerIndex){super(snapshot,retainerIndex);}
clone(){const snapshot=(this._snapshot);return new JSHeapSnapshotRetainerEdge(snapshot,this.retainerIndex());}
isHidden(){return this._edge().isHidden();}
isInternal(){return this._edge().isInternal();}
isInvisible(){return this._edge().isInvisible();}
isShortcut(){return this._edge().isShortcut();}
isWeak(){return this._edge().isWeak();}}
(function disableLoggingForTest(){if(self.Root&&self.Root.Runtime&&Root.Runtime.queryParam('test')){console.warn=()=>undefined;}})();self.HeapSnapshotWorker=self.HeapSnapshotWorker||{};HeapSnapshotWorker=HeapSnapshotWorker||{};HeapSnapshotWorker.HeapSnapshotItem=HeapSnapshotItem;HeapSnapshotWorker.HeapSnapshotEdge=HeapSnapshotEdge;HeapSnapshotWorker.HeapSnapshotItemIterator=HeapSnapshotItemIterator;HeapSnapshotWorker.HeapSnapshotItemIndexProvider=HeapSnapshotItemIndexProvider;HeapSnapshotWorker.HeapSnapshotNodeIndexProvider=HeapSnapshotNodeIndexProvider;HeapSnapshotWorker.HeapSnapshotEdgeIndexProvider=HeapSnapshotEdgeIndexProvider;HeapSnapshotWorker.HeapSnapshotRetainerEdgeIndexProvider=HeapSnapshotRetainerEdgeIndexProvider;HeapSnapshotWorker.HeapSnapshotEdgeIterator=HeapSnapshotEdgeIterator;HeapSnapshotWorker.HeapSnapshotRetainerEdge=HeapSnapshotRetainerEdge;HeapSnapshotWorker.HeapSnapshotRetainerEdgeIterator=HeapSnapshotRetainerEdgeIterator;HeapSnapshotWorker.HeapSnapshotNode=HeapSnapshotNode;HeapSnapshotWorker.HeapSnapshotNodeIterator=HeapSnapshotNodeIterator;HeapSnapshotWorker.HeapSnapshotIndexRangeIterator=HeapSnapshotIndexRangeIterator;HeapSnapshotWorker.HeapSnapshotFilteredIterator=HeapSnapshotFilteredIterator;HeapSnapshotWorker.HeapSnapshotProgress=HeapSnapshotProgress;HeapSnapshotWorker.HeapSnapshotProblemReport=HeapSnapshotProblemReport;HeapSnapshotWorker.HeapSnapshot=HeapSnapshot;HeapSnapshotWorker.HeapSnapshotHeader=HeapSnapshotHeader;HeapSnapshotWorker.HeapSnapshotItemProvider=HeapSnapshotItemProvider;HeapSnapshotWorker.HeapSnapshotEdgesProvider=HeapSnapshotEdgesProvider;HeapSnapshotWorker.HeapSnapshotNodesProvider=HeapSnapshotNodesProvider;HeapSnapshotWorker.JSHeapSnapshot=JSHeapSnapshot;HeapSnapshotWorker.JSHeapSnapshotNode=JSHeapSnapshotNode;HeapSnapshotWorker.JSHeapSnapshotEdge=JSHeapSnapshotEdge;HeapSnapshotWorker.JSHeapSnapshotRetainerEdge=JSHeapSnapshotRetainerEdge;HeapSnapshotWorker.HeapSnapshot.AggregatedInfo;export class HeapSnapshotLoader{constructor(dispatcher){this._reset();this._progress=new HeapSnapshotWorker.HeapSnapshotProgress(dispatcher);this._buffer='';this._dataCallback=null;this._done=false;this._parseInput();}
dispose(){this._reset();}
_reset(){this._json='';this._snapshot={};}
close(){this._done=true;if(this._dataCallback){this._dataCallback('');}}
buildSnapshot(){this._progress.updateStatus(ls`Processing snapshot\u2026`);const result=new HeapSnapshotWorker.JSHeapSnapshot(this._snapshot,this._progress);this._reset();return result;}
_parseUintArray(){let index=0;const char0='0'.charCodeAt(0);const char9='9'.charCodeAt(0);const closingBracket=']'.charCodeAt(0);const length=this._json.length;while(true){while(index<length){const code=this._json.charCodeAt(index);if(char0<=code&&code<=char9){break;}else if(code===closingBracket){this._json=this._json.slice(index+1);return false;}
++index;}
if(index===length){this._json='';return true;}
let nextNumber=0;const startIndex=index;while(index<length){const code=this._json.charCodeAt(index);if(char0>code||code>char9){break;}
nextNumber*=10;nextNumber+=(code-char0);++index;}
if(index===length){this._json=this._json.slice(startIndex);return true;}
this._array[this._arrayIndex++]=nextNumber;}}
_parseStringsArray(){this._progress.updateStatus(ls`Parsing strings\u2026`);const closingBracketIndex=this._json.lastIndexOf(']');if(closingBracketIndex===-1){throw new Error('Incomplete JSON');}
this._json=this._json.slice(0,closingBracketIndex+1);this._snapshot.strings=JSON.parse(this._json);}
write(chunk){this._buffer+=chunk;if(!this._dataCallback){return;}
this._dataCallback(this._buffer);this._dataCallback=null;this._buffer='';}
_fetchChunk(){return this._done?Promise.resolve(this._buffer):new Promise(r=>this._dataCallback=r);}
async _findToken(token,startIndex){while(true){const pos=this._json.indexOf(token,startIndex||0);if(pos!==-1){return pos;}
startIndex=this._json.length-token.length+1;this._json+=await this._fetchChunk();}}
async _parseArray(name,title,length){const nameIndex=await this._findToken(name);const bracketIndex=await this._findToken('[',nameIndex);this._json=this._json.slice(bracketIndex+1);this._array=length?new Uint32Array(length):[];this._arrayIndex=0;while(this._parseUintArray()){this._progress.updateProgress(title,this._arrayIndex,this._array.length);this._json+=await this._fetchChunk();}
const result=this._array;this._array=null;return result;}
async _parseInput(){const snapshotToken='"snapshot"';const snapshotTokenIndex=await this._findToken(snapshotToken);if(snapshotTokenIndex===-1){throw new Error('Snapshot token not found');}
this._progress.updateStatus(ls`Loading snapshot info\u2026`);const json=this._json.slice(snapshotTokenIndex+snapshotToken.length+1);this._jsonTokenizer=new TextUtils.BalancedJSONTokenizer(metaJSON=>{this._json=this._jsonTokenizer.remainder();this._jsonTokenizer=null;this._snapshot.snapshot=(JSON.parse(metaJSON));});this._jsonTokenizer.write(json);while(this._jsonTokenizer){this._jsonTokenizer.write(await this._fetchChunk());}
this._snapshot.nodes=await this._parseArray('"nodes"',ls`Loading nodes\u2026 %d%%`,this._snapshot.snapshot.meta.node_fields.length*this._snapshot.snapshot.node_count);this._snapshot.edges=await this._parseArray('"edges"',ls`Loading edges\u2026 %d%%`,this._snapshot.snapshot.meta.edge_fields.length*this._snapshot.snapshot.edge_count);if(this._snapshot.snapshot.trace_function_count){this._snapshot.trace_function_infos=await this._parseArray('"trace_function_infos"',ls`Loading allocation traces\u2026 %d%%`,this._snapshot.snapshot.meta.trace_function_info_fields.length*this._snapshot.snapshot.trace_function_count);const thisTokenEndIndex=await this._findToken(':');const nextTokenIndex=await this._findToken('"',thisTokenEndIndex);const openBracketIndex=this._json.indexOf('[');const closeBracketIndex=this._json.lastIndexOf(']',nextTokenIndex);this._snapshot.trace_tree=JSON.parse(this._json.substring(openBracketIndex,closeBracketIndex+1));this._json=this._json.slice(closeBracketIndex+1);}
if(this._snapshot.snapshot.meta.sample_fields){this._snapshot.samples=await this._parseArray('"samples"',ls`Loading samples\u2026`);}
if(this._snapshot.snapshot.meta['location_fields']){this._snapshot.locations=await this._parseArray('"locations"',ls`Loading locations\u2026`);}else{this._snapshot.locations=[];}
this._progress.updateStatus(ls`Loading strings\u2026`);const stringsTokenIndex=await this._findToken('"strings"');const bracketIndex=await this._findToken('[',stringsTokenIndex);this._json=this._json.slice(bracketIndex);while(!this._done){this._json+=await this._fetchChunk();}
this._parseStringsArray();}}
self.HeapSnapshotWorker=self.HeapSnapshotWorker||{};HeapSnapshotWorker=HeapSnapshotWorker||{};HeapSnapshotWorker.HeapSnapshotLoader=HeapSnapshotLoader;function postMessageWrapper(message){postMessage(message);}
const dispatcher=new HeapSnapshotWorker.HeapSnapshotWorkerDispatcher(this,postMessageWrapper);function installMessageEventListener(listener){self.addEventListener('message',listener,false);}
installMessageEventListener(dispatcher.dispatchMessage.bind(dispatcher));export class HeapSnapshotWorkerDispatcher{constructor(globalObject,postMessage){this._objects=[];this._global=globalObject;this._postMessage=postMessage;}
_findFunction(name){const path=name.split('.');let result=this._global;for(let i=0;i<path.length;++i){result=result[path[i]];}
return result;}
sendEvent(name,data){this._postMessage({eventName:name,data:data});}
dispatchMessage(event){const data=(event.data);const response={callId:data.callId};try{switch(data.disposition){case'create':const constructorFunction=this._findFunction(data.methodName);this._objects[data.objectId]=new constructorFunction(this);break;case'dispose':delete this._objects[data.objectId];break;case'getter':{const object=this._objects[data.objectId];const result=object[data.methodName];response.result=result;break;}
case'factory':{const object=this._objects[data.objectId];const result=object[data.methodName].apply(object,data.methodArguments);if(result){this._objects[data.newObjectId]=result;}
response.result=!!result;break;}
case'method':{const object=this._objects[data.objectId];response.result=object[data.methodName].apply(object,data.methodArguments);break;}
case'evaluateForTest':try{response.result=self.eval(data.source);}catch(e){response.result=e.toString();}
break;}}catch(e){response.error=e.toString();response.errorCallStack=e.stack;if(data.methodName){response.errorMethodName=data.methodName;}}
this._postMessage(response);}}
self.HeapSnapshotWorker=self.HeapSnapshotWorker||{};HeapSnapshotWorker=HeapSnapshotWorker||{};HeapSnapshotWorker.HeapSnapshotWorkerDispatcher=HeapSnapshotWorkerDispatcher;import*as Text from'./Text.js';import*as TextRange from'./TextRange.js';import*as TextUtils from'./TextUtils.js';export{Text,TextRange,TextUtils,};const Utils={isStopChar:function(char){return(char>' '&&char<'0')||(char>'9'&&char<'A')||(char>'Z'&&char<'_')||(char>'_'&&char<'a')||(char>'z'&&char<='~');},isWordChar:function(char){return!TextUtils.TextUtils.isStopChar(char)&&!TextUtils.TextUtils.isSpaceChar(char);},isSpaceChar:function(char){return TextUtils.TextUtils._SpaceCharRegex.test(char);},isWord:function(word){for(let i=0;i<word.length;++i){if(!TextUtils.TextUtils.isWordChar(word.charAt(i))){return false;}}
return true;},isOpeningBraceChar:function(char){return char==='('||char==='{';},isClosingBraceChar:function(char){return char===')'||char==='}';},isBraceChar:function(char){return TextUtils.TextUtils.isOpeningBraceChar(char)||TextUtils.TextUtils.isClosingBraceChar(char);},textToWords:function(text,isWordChar,wordCallback){let startWord=-1;for(let i=0;i<text.length;++i){if(!isWordChar(text.charAt(i))){if(startWord!==-1){wordCallback(text.substring(startWord,i));}
startWord=-1;}else if(startWord===-1){startWord=i;}}
if(startWord!==-1){wordCallback(text.substring(startWord));}},lineIndent:function(line){let indentation=0;while(indentation<line.length&&TextUtils.TextUtils.isSpaceChar(line.charAt(indentation))){++indentation;}
return line.substr(0,indentation);},isUpperCase:function(text){return text===text.toUpperCase();},isLowerCase:function(text){return text===text.toLowerCase();},splitStringByRegexes(text,regexes){const matches=[];const globalRegexes=[];for(let i=0;i<regexes.length;i++){const regex=regexes[i];if(!regex.global){globalRegexes.push(new RegExp(regex.source,regex.flags?regex.flags+'g':'g'));}else{globalRegexes.push(regex);}}
doSplit(text,0,0);return matches;function doSplit(text,regexIndex,startIndex){if(regexIndex>=globalRegexes.length){matches.push({value:text,position:startIndex,regexIndex:-1,captureGroups:[]});return;}
const regex=globalRegexes[regexIndex];let currentIndex=0;let result;regex.lastIndex=0;while((result=regex.exec(text))!==null){const stringBeforeMatch=text.substring(currentIndex,result.index);if(stringBeforeMatch){doSplit(stringBeforeMatch,regexIndex+1,startIndex+currentIndex);}
const match=result[0];matches.push({value:match,position:startIndex+result.index,regexIndex:regexIndex,captureGroups:result.slice(1)});currentIndex=result.index+match.length;}
const stringAfterMatches=text.substring(currentIndex);if(stringAfterMatches){doSplit(stringAfterMatches,regexIndex+1,startIndex+currentIndex);}}}};export default Utils;export class FilterParser{constructor(keys){this._keys=keys;}
static cloneFilter(filter){return{key:filter.key,text:filter.text,regex:filter.regex,negative:filter.negative};}
parse(query){const splitResult=TextUtils.TextUtils.splitStringByRegexes(query,[TextUtils.TextUtils._keyValueFilterRegex,TextUtils.TextUtils._regexFilterRegex,TextUtils.TextUtils._textFilterRegex]);const filters=[];for(let i=0;i<splitResult.length;i++){const regexIndex=splitResult[i].regexIndex;if(regexIndex===-1){continue;}
const result=splitResult[i].captureGroups;if(regexIndex===0){if(this._keys.indexOf((result[1]))!==-1){filters.push({key:result[1],text:result[2],negative:!!result[0]});}else{filters.push({text:result[1]+':'+result[2],negative:!!result[0]});}}else if(regexIndex===1){try{filters.push({regex:new RegExp(result[1],'i'),negative:!!result[0]});}catch(e){filters.push({text:'/'+result[1]+'/',negative:!!result[0]});}}else if(regexIndex===2){filters.push({text:result[1],negative:!!result[0]});}}
return filters;}}
Utils._keyValueFilterRegex=/(?:^|\s)(\-)?([\w\-]+):([^\s]+)/;Utils._regexFilterRegex=/(?:^|\s)(\-)?\/([^\s]+)\//;Utils._textFilterRegex=/(?:^|\s)(\-)?([^\s]+)/;Utils._SpaceCharRegex=/\s/;Utils.Indent={TwoSpaces:'  ',FourSpaces:'    ',EightSpaces:'        ',TabCharacter:'\t'};export class BalancedJSONTokenizer{constructor(callback,findMultiple){this._callback=callback;this._index=0;this._balance=0;this._buffer='';this._findMultiple=findMultiple||false;this._closingDoubleQuoteRegex=/[^\\](?:\\\\)*"/g;}
write(chunk){this._buffer+=chunk;const lastIndex=this._buffer.length;const buffer=this._buffer;let index;for(index=this._index;index<lastIndex;++index){const character=buffer[index];if(character==='"'){this._closingDoubleQuoteRegex.lastIndex=index;if(!this._closingDoubleQuoteRegex.test(buffer)){break;}
index=this._closingDoubleQuoteRegex.lastIndex-1;}else if(character==='{'){++this._balance;}else if(character==='}'){--this._balance;if(this._balance<0){this._reportBalanced();return false;}
if(!this._balance){this._lastBalancedIndex=index+1;if(!this._findMultiple){break;}}}else if(character===']'&&!this._balance){this._reportBalanced();return false;}}
this._index=index;this._reportBalanced();return true;}
_reportBalanced(){if(!this._lastBalancedIndex){return;}
this._callback(this._buffer.slice(0,this._lastBalancedIndex));this._buffer=this._buffer.slice(this._lastBalancedIndex);this._index-=this._lastBalancedIndex;this._lastBalancedIndex=0;}
remainder(){return this._buffer;}}
export class TokenizerFactory{createTokenizer(mimeType){}}
export function isMinified(text){const kMaxNonMinifiedLength=500;let linesToCheck=10;let lastPosition=0;do{let eolIndex=text.indexOf('\n',lastPosition);if(eolIndex<0){eolIndex=text.length;}
if(eolIndex-lastPosition>kMaxNonMinifiedLength&&text.substr(lastPosition,3)!=='//#'){return true;}
lastPosition=eolIndex+1;}while(--linesToCheck>=0&&lastPosition<text.length);linesToCheck=10;lastPosition=text.length;do{let eolIndex=text.lastIndexOf('\n',lastPosition);if(eolIndex<0){eolIndex=0;}
if(lastPosition-eolIndex>kMaxNonMinifiedLength&&text.substr(lastPosition,3)!=='//#'){return true;}
lastPosition=eolIndex-1;}while(--linesToCheck>=0&&lastPosition>0);return false;}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.TextUtils=Utils;TextUtils.FilterParser=FilterParser;TextUtils.BalancedJSONTokenizer=BalancedJSONTokenizer;TextUtils.TokenizerFactory=TokenizerFactory;TextUtils.isMinified=isMinified;TextUtils.FilterParser.ParsedFilter;export class TextRange{constructor(startLine,startColumn,endLine,endColumn){this.startLine=startLine;this.startColumn=startColumn;this.endLine=endLine;this.endColumn=endColumn;}
static createFromLocation(line,column){return new TextRange(line,column,line,column);}
static fromObject(serializedTextRange){return new TextRange(serializedTextRange.startLine,serializedTextRange.startColumn,serializedTextRange.endLine,serializedTextRange.endColumn);}
static comparator(range1,range2){return range1.compareTo(range2);}
static fromEdit(oldRange,newText){let endLine=oldRange.startLine;let endColumn=oldRange.startColumn+newText.length;const lineEndings=newText.computeLineEndings();if(lineEndings.length>1){endLine=oldRange.startLine+lineEndings.length-1;const len=lineEndings.length;endColumn=lineEndings[len-1]-lineEndings[len-2]-1;}
return new TextRange(oldRange.startLine,oldRange.startColumn,endLine,endColumn);}
isEmpty(){return this.startLine===this.endLine&&this.startColumn===this.endColumn;}
immediatelyPrecedes(range){if(!range){return false;}
return this.endLine===range.startLine&&this.endColumn===range.startColumn;}
immediatelyFollows(range){if(!range){return false;}
return range.immediatelyPrecedes(this);}
follows(range){return(range.endLine===this.startLine&&range.endColumn<=this.startColumn)||range.endLine<this.startLine;}
get linesCount(){return this.endLine-this.startLine;}
collapseToEnd(){return new TextRange(this.endLine,this.endColumn,this.endLine,this.endColumn);}
collapseToStart(){return new TextRange(this.startLine,this.startColumn,this.startLine,this.startColumn);}
normalize(){if(this.startLine>this.endLine||(this.startLine===this.endLine&&this.startColumn>this.endColumn)){return new TextRange(this.endLine,this.endColumn,this.startLine,this.startColumn);}else{return this.clone();}}
clone(){return new TextRange(this.startLine,this.startColumn,this.endLine,this.endColumn);}
serializeToObject(){const serializedTextRange={};serializedTextRange.startLine=this.startLine;serializedTextRange.startColumn=this.startColumn;serializedTextRange.endLine=this.endLine;serializedTextRange.endColumn=this.endColumn;return serializedTextRange;}
compareTo(other){if(this.startLine>other.startLine){return 1;}
if(this.startLine<other.startLine){return-1;}
if(this.startColumn>other.startColumn){return 1;}
if(this.startColumn<other.startColumn){return-1;}
return 0;}
compareToPosition(lineNumber,columnNumber){if(lineNumber<this.startLine||(lineNumber===this.startLine&&columnNumber<this.startColumn)){return-1;}
if(lineNumber>this.endLine||(lineNumber===this.endLine&&columnNumber>this.endColumn)){return 1;}
return 0;}
equal(other){return this.startLine===other.startLine&&this.endLine===other.endLine&&this.startColumn===other.startColumn&&this.endColumn===other.endColumn;}
relativeTo(line,column){const relative=this.clone();if(this.startLine===line){relative.startColumn-=column;}
if(this.endLine===line){relative.endColumn-=column;}
relative.startLine-=line;relative.endLine-=line;return relative;}
relativeFrom(line,column){const relative=this.clone();if(this.startLine===0){relative.startColumn+=column;}
if(this.endLine===0){relative.endColumn+=column;}
relative.startLine+=line;relative.endLine+=line;return relative;}
rebaseAfterTextEdit(originalRange,editedRange){console.assert(originalRange.startLine===editedRange.startLine);console.assert(originalRange.startColumn===editedRange.startColumn);const rebase=this.clone();if(!this.follows(originalRange)){return rebase;}
const lineDelta=editedRange.endLine-originalRange.endLine;const columnDelta=editedRange.endColumn-originalRange.endColumn;rebase.startLine+=lineDelta;rebase.endLine+=lineDelta;if(rebase.startLine===editedRange.endLine){rebase.startColumn+=columnDelta;}
if(rebase.endLine===editedRange.endLine){rebase.endColumn+=columnDelta;}
return rebase;}
toString(){return JSON.stringify(this);}
containsLocation(lineNumber,columnNumber){if(this.startLine===this.endLine){return this.startLine===lineNumber&&this.startColumn<=columnNumber&&columnNumber<=this.endColumn;}
if(this.startLine===lineNumber){return this.startColumn<=columnNumber;}
if(this.endLine===lineNumber){return columnNumber<=this.endColumn;}
return this.startLine<lineNumber&&lineNumber<this.endLine;}}
export class SourceRange{constructor(offset,length){this.offset=offset;this.length=length;}}
export class SourceEdit{constructor(sourceURL,oldRange,newText){this.sourceURL=sourceURL;this.oldRange=oldRange;this.newText=newText;}
static comparator(edit1,edit2){return TextRange.comparator(edit1.oldRange,edit2.oldRange);}
newRange(){return TextRange.fromEdit(this.oldRange,this.newText);}}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.TextRange=TextRange;TextUtils.SourceRange=SourceRange;TextUtils.SourceEdit=SourceEdit;export class Text{constructor(value){this._value=value;}
lineEndings(){if(!this._lineEndings){this._lineEndings=this._value.computeLineEndings();}
return this._lineEndings;}
value(){return this._value;}
lineCount(){const lineEndings=this.lineEndings();return lineEndings.length;}
offsetFromPosition(lineNumber,columnNumber){return(lineNumber?this.lineEndings()[lineNumber-1]+1:0)+columnNumber;}
positionFromOffset(offset){const lineEndings=this.lineEndings();const lineNumber=lineEndings.lowerBound(offset);return{lineNumber:lineNumber,columnNumber:offset-(lineNumber&&(lineEndings[lineNumber-1]+1))};}
lineAt(lineNumber){const lineEndings=this.lineEndings();const lineStart=lineNumber>0?lineEndings[lineNumber-1]+1:0;const lineEnd=lineEndings[lineNumber];let lineContent=this._value.substring(lineStart,lineEnd);if(lineContent.length>0&&lineContent.charAt(lineContent.length-1)==='\r'){lineContent=lineContent.substring(0,lineContent.length-1);}
return lineContent;}
toSourceRange(range){const start=this.offsetFromPosition(range.startLine,range.startColumn);const end=this.offsetFromPosition(range.endLine,range.endColumn);return new TextUtils.SourceRange(start,end-start);}
toTextRange(sourceRange){const cursor=new TextCursor(this.lineEndings());const result=TextUtils.TextRange.createFromLocation(0,0);cursor.resetTo(sourceRange.offset);result.startLine=cursor.lineNumber();result.startColumn=cursor.columnNumber();cursor.advance(sourceRange.offset+sourceRange.length);result.endLine=cursor.lineNumber();result.endColumn=cursor.columnNumber();return result;}
replaceRange(range,replacement){const sourceRange=this.toSourceRange(range);return this._value.substring(0,sourceRange.offset)+replacement+
this._value.substring(sourceRange.offset+sourceRange.length);}
extract(range){const sourceRange=this.toSourceRange(range);return this._value.substr(sourceRange.offset,sourceRange.length);}}
export class TextCursor{constructor(lineEndings){this._lineEndings=lineEndings;this._offset=0;this._lineNumber=0;this._columnNumber=0;}
advance(offset){this._offset=offset;while(this._lineNumber<this._lineEndings.length&&this._lineEndings[this._lineNumber]<this._offset){++this._lineNumber;}
this._columnNumber=this._lineNumber?this._offset-this._lineEndings[this._lineNumber-1]-1:this._offset;}
offset(){return this._offset;}
resetTo(offset){this._offset=offset;this._lineNumber=this._lineEndings.lowerBound(offset);this._columnNumber=this._lineNumber?this._offset-this._lineEndings[this._lineNumber-1]-1:this._offset;}
lineNumber(){return this._lineNumber;}
columnNumber(){return this._columnNumber;}}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.Text=Text;TextUtils.TextCursor=TextCursor;TextUtils.Text.Position;import'./headlesscodemirror.js';(function(window){window.CodeMirror={};(function(){"use strict";function splitLines(string){return string.split(/\r?\n|\r/);};function StringStream(string){this.pos=this.start=0;this.string=string;this.lineStart=0;}
StringStream.prototype={eol:function(){return this.pos>=this.string.length;},sol:function(){return this.pos==0;},peek:function(){return this.string.charAt(this.pos)||null;},next:function(){if(this.pos<this.string.length)
return this.string.charAt(this.pos++);},eat:function(match){var ch=this.string.charAt(this.pos);if(typeof match=="string")var ok=ch==match;else var ok=ch&&(match.test?match.test(ch):match(ch));if(ok){++this.pos;return ch;}},eatWhile:function(match){var start=this.pos;while(this.eat(match)){}
return this.pos>start;},eatSpace:function(){var start=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>start;},skipToEnd:function(){this.pos=this.string.length;},skipTo:function(ch){var found=this.string.indexOf(ch,this.pos);if(found>-1){this.pos=found;return true;}},backUp:function(n){this.pos-=n;},column:function(){return this.start-this.lineStart;},indentation:function(){return 0;},match:function(pattern,consume,caseInsensitive){if(typeof pattern=="string"){var cased=function(str){return caseInsensitive?str.toLowerCase():str;};var substr=this.string.substr(this.pos,pattern.length);if(cased(substr)==cased(pattern)){if(consume!==false)this.pos+=pattern.length;return true;}}else{var match=this.string.slice(this.pos).match(pattern);if(match&&match.index>0)return null;if(match&&consume!==false)this.pos+=match[0].length;return match;}},current:function(){return this.string.slice(this.start,this.pos);},hideFirstChars:function(n,inner){this.lineStart+=n;try{return inner();}
finally{this.lineStart-=n;}},lookAhead:function(){return null}};CodeMirror.StringStream=StringStream;CodeMirror.startState=function(mode,a1,a2){return mode.startState?mode.startState(a1,a2):true;};var modes=CodeMirror.modes={},mimeModes=CodeMirror.mimeModes={};CodeMirror.defineMode=function(name,mode){if(arguments.length>2)
mode.dependencies=Array.prototype.slice.call(arguments,2);modes[name]=mode;};CodeMirror.defineMIME=function(mime,spec){mimeModes[mime]=spec;};CodeMirror.resolveMode=function(spec){if(typeof spec=="string"&&mimeModes.hasOwnProperty(spec)){spec=mimeModes[spec];}else if(spec&&typeof spec.name=="string"&&mimeModes.hasOwnProperty(spec.name)){spec=mimeModes[spec.name];}
if(typeof spec=="string")return{name:spec};else return spec||{name:"null"};};CodeMirror.getMode=function(options,spec){spec=CodeMirror.resolveMode(spec);var mfactory=modes[spec.name];if(!mfactory)throw new Error("Unknown mode: "+spec);return mfactory(options,spec);};CodeMirror.registerHelper=CodeMirror.registerGlobalHelper=Math.min;CodeMirror.defineMode("null",function(){return{token:function(stream){stream.skipToEnd();}};});CodeMirror.defineMIME("text/plain","null");CodeMirror.runMode=function(string,modespec,callback,options){var mode=CodeMirror.getMode({indentUnit:2},modespec);if(callback.nodeType==1){var tabSize=(options&&options.tabSize)||4;var node=callback,col=0;node.innerHTML="";callback=function(text,style){if(text=="\n"){node.appendChild(document.createElement("br"));col=0;return;}
var content="";for(var pos=0;;){var idx=text.indexOf("\t",pos);if(idx==-1){content+=text.slice(pos);col+=text.length-pos;break;}else{col+=idx-pos;content+=text.slice(pos,idx);var size=tabSize-col%tabSize;col+=size;for(var i=0;i<size;++i)content+=" ";pos=idx+1;}}
if(style){var sp=node.appendChild(document.createElement("span"));sp.className="cm-"+style.replace(/ +/g," cm-");sp.appendChild(document.createTextNode(content));}else{node.appendChild(document.createTextNode(content));}};}
var lines=splitLines(string),state=(options&&options.state)||CodeMirror.startState(mode);for(var i=0,e=lines.length;i<e;++i){if(i)callback("\n");var stream=new CodeMirror.StringStream(lines[i]);if(!stream.string&&mode.blankLine)mode.blankLine(state);while(!stream.eol()){var style=mode.token(stream,state);callback(stream.current(),style,i,stream.start,state);stream.start=stream.pos;}}};})();}(self))import'./DataGrid.js';import'./ViewportDataGrid.js';import'./SortableDataGrid.js';import'./ShowMoreDataGridNode.js';import*as DataGrid from'./DataGrid.js';import*as ShowMoreDataGridNode from'./ShowMoreDataGridNode.js';import*as SortableDataGrid from'./SortableDataGrid.js';import*as ViewportDataGrid from'./ViewportDataGrid.js';export{DataGrid,ShowMoreDataGridNode,SortableDataGrid,ViewportDataGrid};export default class ViewportDataGrid extends DataGrid.DataGrid{constructor(columnsArray,editCallback,deleteCallback,refreshCallback){super(columnsArray,editCallback,deleteCallback,refreshCallback);this._onScrollBound=this._onScroll.bind(this);this.scrollContainer.addEventListener('scroll',this._onScrollBound,true);this._visibleNodes=[];this._inline=false;this._stickToBottom=false;this._updateIsFromUser=false;this._lastScrollTop=0;this._firstVisibleIsStriped=false;this._isStriped=false;this.setRootNode(new DataGrid.ViewportDataGridNode());}
setStriped(striped){this._isStriped=striped;let startsWithOdd=true;if(this._visibleNodes.length){const allChildren=this.rootNode().flatChildren();startsWithOdd=!!(allChildren.indexOf(this._visibleNodes[0]));}
this._updateStripesClass(startsWithOdd);}
_updateStripesClass(startsWithOdd){this.element.classList.toggle('striped-data-grid',!startsWithOdd&&this._isStriped);this.element.classList.toggle('striped-data-grid-starts-with-odd',startsWithOdd&&this._isStriped);}
setScrollContainer(scrollContainer){this.scrollContainer.removeEventListener('scroll',this._onScrollBound,true);this._scrollContainer=scrollContainer;this.scrollContainer.addEventListener('scroll',this._onScrollBound,true);}
onResize(){if(this._stickToBottom){this.scrollContainer.scrollTop=this.scrollContainer.scrollHeight-this.scrollContainer.clientHeight;}
this.scheduleUpdate();super.onResize();}
setStickToBottom(stick){this._stickToBottom=stick;}
_onScroll(event){this._stickToBottom=this.scrollContainer.isScrolledToBottom();if(this._lastScrollTop!==this.scrollContainer.scrollTop){this.scheduleUpdate(true);}}
scheduleUpdateStructure(){this.scheduleUpdate();}
scheduleUpdate(isFromUser){if(this._stickToBottom&&isFromUser){this._stickToBottom=this.scrollContainer.isScrolledToBottom();}
this._updateIsFromUser=this._updateIsFromUser||isFromUser;if(this._updateAnimationFrameId){return;}
this._updateAnimationFrameId=this.element.window().requestAnimationFrame(this._update.bind(this));}
updateInstantly(){this._update();}
renderInline(){this._inline=true;super.renderInline();this._update();}
_calculateVisibleNodes(clientHeight,scrollTop){const nodes=this.rootNode().flatChildren();if(this._inline){return{topPadding:0,bottomPadding:0,contentHeight:0,visibleNodes:nodes,offset:0};}
const size=nodes.length;let i=0;let y=0;for(;i<size&&y+nodes[i].nodeSelfHeight()<scrollTop;++i){y+=nodes[i].nodeSelfHeight();}
const start=i;const topPadding=y;for(;i<size&&y<scrollTop+clientHeight;++i){y+=nodes[i].nodeSelfHeight();}
const end=i;let bottomPadding=0;for(;i<size;++i){bottomPadding+=nodes[i].nodeSelfHeight();}
return{topPadding:topPadding,bottomPadding:bottomPadding,contentHeight:y-topPadding,visibleNodes:nodes.slice(start,end),offset:start};}
_contentHeight(){const nodes=this.rootNode().flatChildren();let result=0;for(let i=0,size=nodes.length;i<size;++i){result+=nodes[i].nodeSelfHeight();}
return result;}
_update(){if(this._updateAnimationFrameId){this.element.window().cancelAnimationFrame(this._updateAnimationFrameId);delete this._updateAnimationFrameId;}
const clientHeight=this.scrollContainer.clientHeight;let scrollTop=this.scrollContainer.scrollTop;const currentScrollTop=scrollTop;const maxScrollTop=Math.max(0,this._contentHeight()-clientHeight);if(!this._updateIsFromUser&&this._stickToBottom){scrollTop=maxScrollTop;}
this._updateIsFromUser=false;scrollTop=Math.min(maxScrollTop,scrollTop);const viewportState=this._calculateVisibleNodes(clientHeight,scrollTop);const visibleNodes=viewportState.visibleNodes;const visibleNodesSet=new Set(visibleNodes);for(let i=0;i<this._visibleNodes.length;++i){const oldNode=this._visibleNodes[i];if(!visibleNodesSet.has(oldNode)&&oldNode.attached()){const element=oldNode.existingElement();element.remove();}}
let previousElement=this.topFillerRowElement();const tBody=this.dataTableBody;let offset=viewportState.offset;if(visibleNodes.length){const nodes=this.rootNode().flatChildren();const index=nodes.indexOf(visibleNodes[0]);this._updateStripesClass(!!(index%2));if(this._stickToBottom&&index!==-1&&!!(index%2)!==this._firstVisibleIsStriped){offset+=1;}}
this._firstVisibleIsStriped=!!(offset%2);for(let i=0;i<visibleNodes.length;++i){const node=visibleNodes[i];const element=node.element();node.setStriped((offset+i)%2===0);if(element!==previousElement.nextSibling){tBody.insertBefore(element,previousElement.nextSibling);}
node.revealed=true;previousElement=element;}
this.setVerticalPadding(viewportState.topPadding,viewportState.bottomPadding);this._lastScrollTop=scrollTop;if(scrollTop!==currentScrollTop){this.scrollContainer.scrollTop=scrollTop;}
const contentFits=viewportState.contentHeight<=clientHeight&&viewportState.topPadding+viewportState.bottomPadding===0;if(contentFits!==this.element.classList.contains('data-grid-fits-viewport')){this.element.classList.toggle('data-grid-fits-viewport',contentFits);this.updateWidths();}
this._visibleNodes=visibleNodes;this.dispatchEventToListeners(Events.ViewportCalculated);}
_revealViewportNode(node){const nodes=this.rootNode().flatChildren();const index=nodes.indexOf(node);if(index===-1){return;}
let fromY=0;for(let i=0;i<index;++i){fromY+=nodes[i].nodeSelfHeight();}
const toY=fromY+node.nodeSelfHeight();let scrollTop=this.scrollContainer.scrollTop;if(scrollTop>fromY){scrollTop=fromY;this._stickToBottom=false;}else if(scrollTop+this.scrollContainer.offsetHeight<toY){scrollTop=toY-this.scrollContainer.offsetHeight;}
this.scrollContainer.scrollTop=scrollTop;}}
export const Events={ViewportCalculated:Symbol('ViewportCalculated')};export class ViewportDataGridNode extends DataGrid.DataGridNode{constructor(data,hasChildren){super(data,hasChildren);this._stale=false;this._flatNodes=null;this._isStriped=false;}
element(){const existingElement=this.existingElement();const element=existingElement||this.createElement();if(!existingElement||this._stale){this.createCells(element);this._stale=false;}
return element;}
setStriped(isStriped){this._isStriped=isStriped;this.element().classList.toggle('odd',isStriped);}
isStriped(){return this._isStriped;}
clearFlatNodes(){this._flatNodes=null;const parent=(this.parent);if(parent){parent.clearFlatNodes();}}
flatChildren(){if(this._flatNodes){return this._flatNodes;}
const flatNodes=[];const children=[this.children];const counters=[0];let depth=0;while(depth>=0){if(children[depth].length<=counters[depth]){depth--;continue;}
const node=children[depth][counters[depth]++];flatNodes.push(node);if(node.expanded&&node.children.length){depth++;children[depth]=node.children;counters[depth]=0;}}
this._flatNodes=flatNodes;return flatNodes;}
insertChild(child,index){this.clearFlatNodes();if(child.parent===this){const currentIndex=this.children.indexOf(child);if(currentIndex<0){console.assert(false,'Inconsistent DataGrid state');}
if(currentIndex===index){return;}
if(currentIndex<index){--index;}}
child.remove();child.parent=this;child.dataGrid=this.dataGrid;if(!this.children.length){this.setHasChildren(true);}
this.children.splice(index,0,child);child.recalculateSiblings(index);if(this.expanded){this.dataGrid.scheduleUpdateStructure();}}
removeChild(child){this.clearFlatNodes();if(this.dataGrid){this.dataGrid.updateSelectionBeforeRemoval(child,false);}
if(child.previousSibling){child.previousSibling.nextSibling=child.nextSibling;}
if(child.nextSibling){child.nextSibling.previousSibling=child.previousSibling;}
if(child.parent!==this){throw'removeChild: Node is not a child of this node.';}
this.children.remove(child,true);child._unlink();if(!this.children.length){this.setHasChildren(false);}
if(this.expanded){this.dataGrid.scheduleUpdateStructure();}}
removeChildren(){this.clearFlatNodes();if(this.dataGrid){this.dataGrid.updateSelectionBeforeRemoval(this,true);}
for(let i=0;i<this.children.length;++i){this.children[i]._unlink();}
this.children=[];if(this.expanded){this.dataGrid.scheduleUpdateStructure();}}
_unlink(){if(this.attached()){this.existingElement().remove();}
this.resetNode();}
collapse(){if(!this.expanded){return;}
this.clearFlatNodes();this._expanded=false;if(this.existingElement()){this.existingElement().classList.remove('expanded');}
this.dataGrid.scheduleUpdateStructure();}
expand(){if(this.expanded){return;}
this.dataGrid._stickToBottom=false;this.clearFlatNodes();super.expand();this.dataGrid.scheduleUpdateStructure();}
attached(){return!!(this.dataGrid&&this.existingElement()&&this.existingElement().parentElement);}
refresh(){if(this.attached()){this._stale=true;this.dataGrid.scheduleUpdate();}else{this.resetElement();}}
reveal(){this.dataGrid._revealViewportNode(this);}
recalculateSiblings(index){this.clearFlatNodes();super.recalculateSiblings(index);}}
self.DataGrid=self.DataGrid||{};DataGrid=DataGrid||{};DataGrid.ViewportDataGrid=ViewportDataGrid;DataGrid.ViewportDataGrid.Events=Events;DataGrid.ViewportDataGridNode=ViewportDataGridNode;export default class SortableDataGrid extends DataGrid.ViewportDataGrid{constructor(columnsArray,editCallback,deleteCallback,refreshCallback){super(columnsArray,editCallback,deleteCallback,refreshCallback);this._sortingFunction=DataGrid.SortableDataGrid.TrivialComparator;this.setRootNode((new DataGrid.SortableDataGridNode()));}
static TrivialComparator(a,b){return 0;}
static NumericComparator(columnId,a,b){const aValue=a.data[columnId];const bValue=b.data[columnId];const aNumber=Number(aValue instanceof Node?aValue.textContent:aValue);const bNumber=Number(bValue instanceof Node?bValue.textContent:bValue);return aNumber<bNumber?-1:(aNumber>bNumber?1:0);}
static StringComparator(columnId,a,b){const aValue=a.data[columnId];const bValue=b.data[columnId];const aString=aValue instanceof Node?aValue.textContent:String(aValue);const bString=bValue instanceof Node?bValue.textContent:String(bValue);return aString<bString?-1:(aString>bString?1:0);}
static Comparator(comparator,reverseMode,a,b){return reverseMode?comparator(b,a):comparator(a,b);}
static create(columnNames,values){const numColumns=columnNames.length;if(!numColumns){return null;}
const columns=([]);for(let i=0;i<columnNames.length;++i){columns.push({id:String(i),title:columnNames[i],width:columnNames[i].length,sortable:true});}
const nodes=[];for(let i=0;i<values.length/numColumns;++i){const data={};for(let j=0;j<columnNames.length;++j){data[j]=values[numColumns*i+j];}
const node=new DataGrid.SortableDataGridNode(data);node.selectable=false;nodes.push(node);}
const dataGrid=new DataGrid.SortableDataGrid(columns);const length=nodes.length;const rootNode=dataGrid.rootNode();for(let i=0;i<length;++i){rootNode.appendChild(nodes[i]);}
dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,sortDataGrid);function sortDataGrid(){const nodes=dataGrid.rootNode().children;const sortColumnId=dataGrid.sortColumnId();if(!sortColumnId){return;}
let columnIsNumeric=true;for(let i=0;i<nodes.length;i++){const value=nodes[i].data[sortColumnId];if(isNaN(value instanceof Node?value.textContent:value)){columnIsNumeric=false;break;}}
const comparator=columnIsNumeric?DataGrid.SortableDataGrid.NumericComparator:DataGrid.SortableDataGrid.StringComparator;dataGrid.sortNodes(comparator.bind(null,sortColumnId),!dataGrid.isSortOrderAscending());}
return dataGrid;}
insertChild(node){const root=(this.rootNode());root.insertChildOrdered(node);}
sortNodes(comparator,reverseMode){this._sortingFunction=DataGrid.SortableDataGrid.Comparator.bind(null,comparator,reverseMode);this.rootNode().recalculateSiblings(0);this.rootNode()._sortChildren(reverseMode);this.scheduleUpdateStructure();}}
export class SortableDataGridNode extends DataGrid.ViewportDataGridNode{constructor(data,hasChildren){super(data,hasChildren);}
insertChildOrdered(node){this.insertChild(node,this.children.upperBound(node,this.dataGrid._sortingFunction));}
_sortChildren(){this.children.sort(this.dataGrid._sortingFunction);for(let i=0;i<this.children.length;++i){this.children[i].recalculateSiblings(i);}
for(const child of this.children){child._sortChildren();}}}
self.DataGrid=self.DataGrid||{};DataGrid=DataGrid||{};DataGrid.SortableDataGrid=SortableDataGrid;DataGrid.SortableDataGridNode=SortableDataGridNode;export default class ShowMoreDataGridNode extends DataGrid.DataGridNode{constructor(callback,startPosition,endPosition,chunkSize){super({summaryRow:true},false);this._callback=callback;this._startPosition=startPosition;this._endPosition=endPosition;this._chunkSize=chunkSize;this.showNext=createElement('button');this.showNext.setAttribute('type','button');this.showNext.addEventListener('click',this._showNextChunk.bind(this),false);this.showNext.textContent=Common.UIString('Show %d before',this._chunkSize);this.showAll=createElement('button');this.showAll.setAttribute('type','button');this.showAll.addEventListener('click',this._showAll.bind(this),false);this.showLast=createElement('button');this.showLast.setAttribute('type','button');this.showLast.addEventListener('click',this._showLastChunk.bind(this),false);this.showLast.textContent=Common.UIString('Show %d after',this._chunkSize);this._updateLabels();this.selectable=false;}
_showNextChunk(){this._callback(this._startPosition,this._startPosition+this._chunkSize);}
_showAll(){this._callback(this._startPosition,this._endPosition);}
_showLastChunk(){this._callback(this._endPosition-this._chunkSize,this._endPosition);}
_updateLabels(){const totalSize=this._endPosition-this._startPosition;if(totalSize>this._chunkSize){this.showNext.classList.remove('hidden');this.showLast.classList.remove('hidden');}else{this.showNext.classList.add('hidden');this.showLast.classList.add('hidden');}
this.showAll.textContent=Common.UIString('Show all %d',totalSize);}
createCells(element){this._hasCells=false;super.createCells(element);}
createCell(columnIdentifier){const cell=this.createTD(columnIdentifier);if(!this._hasCells){this._hasCells=true;if(this.depth){cell.style.setProperty('padding-left',(this.depth*this.dataGrid.indentWidth)+'px');}
cell.appendChild(this.showNext);cell.appendChild(this.showAll);cell.appendChild(this.showLast);}
return cell;}
setStartPosition(from){this._startPosition=from;this._updateLabels();}
setEndPosition(to){this._endPosition=to;this._updateLabels();}
nodeSelfHeight(){return 40;}
dispose(){}}
self.DataGrid=self.DataGrid||{};DataGrid=DataGrid||{};DataGrid.ShowMoreDataGridNode=ShowMoreDataGridNode;export default class DataGridImpl extends Common.Object{constructor(columnsArray,editCallback,deleteCallback,refreshCallback){super();this.element=createElementWithClass('div','data-grid');UI.appendStyle(this.element,'data_grid/dataGrid.css');this.element.tabIndex=0;this.element.addEventListener('keydown',this._keyDown.bind(this),false);this.element.addEventListener('contextmenu',this._contextMenu.bind(this),true);this._editCallback=editCallback;this._deleteCallback=deleteCallback;this._refreshCallback=refreshCallback;const headerContainer=this.element.createChild('div','header-container');this._headerTable=headerContainer.createChild('table','header');this._headerTableHeaders={};this._scrollContainer=this.element.createChild('div','data-container');this._dataTable=this._scrollContainer.createChild('table','data');if(editCallback){this._dataTable.addEventListener('dblclick',this._ondblclick.bind(this),false);}
this._dataTable.addEventListener('mousedown',this._mouseDownInDataTable.bind(this));this._dataTable.addEventListener('click',this._clickInDataTable.bind(this),true);this._inline=false;this._columnsArray=[];this._columns={};this._visibleColumnsArray=columnsArray;columnsArray.forEach(column=>this._innerAddColumn(column));this._cellClass=null;this._headerTableColumnGroup=this._headerTable.createChild('colgroup');this._headerTableBody=this._headerTable.createChild('tbody');this._headerRow=this._headerTableBody.createChild('tr');this._dataTableColumnGroup=this._dataTable.createChild('colgroup');this.dataTableBody=this._dataTable.createChild('tbody');this._topFillerRow=this.dataTableBody.createChild('tr','data-grid-filler-row revealed');this._bottomFillerRow=this.dataTableBody.createChild('tr','data-grid-filler-row revealed');this.setVerticalPadding(0,0);this._refreshHeader();this._editing=false;this.selectedNode=null;this.expandNodesWhenArrowing=false;this.setRootNode((new DataGridNode()));this.setHasSelection(false);this.indentWidth=15;this._resizers=[];this._columnWidthsInitialized=false;this._cornerWidth=CornerWidth;this._resizeMethod=ResizeMethod.Nearest;this._headerContextMenuCallback=null;this._rowContextMenuCallback=null;}
_firstSelectableNode(){let firstSelectableNode=this._rootNode;while(firstSelectableNode&&!firstSelectableNode.selectable){firstSelectableNode=firstSelectableNode.traverseNextNode(true);}
return firstSelectableNode;}
_lastSelectableNode(){let lastSelectableNode=this._rootNode;let iterator=this._rootNode;while(iterator){if(iterator.selectable){lastSelectableNode=iterator;}
iterator=iterator.traverseNextNode(true);}
return lastSelectableNode;}
static setElementText(element,newText,longText){if(longText&&newText.length>1000){element.textContent=newText.trimEndWithMaxLength(1000);element.title=newText;element[DataGrid._longTextSymbol]=newText;}else{element.textContent=newText;element.title='';element[DataGrid._longTextSymbol]=undefined;}}
setStriped(isStriped){this.element.classList.toggle('striped-data-grid',isStriped);}
setFocusable(focusable){this.element.tabIndex=focusable?0:-1;}
setHasSelection(hasSelected){this.element.classList.toggle('no-selection',!hasSelected);}
headerTableBody(){return this._headerTableBody;}
_innerAddColumn(column,position){const columnId=column.id;if(columnId in this._columns){this._innerRemoveColumn(columnId);}
if(position===undefined){position=this._columnsArray.length;}
this._columnsArray.splice(position,0,column);this._columns[columnId]=column;if(column.disclosure){this.disclosureColumnId=columnId;}
const cell=createElement('th');cell.className=columnId+'-column';cell[DataGrid._columnIdSymbol]=columnId;this._headerTableHeaders[columnId]=cell;const div=createElement('div');if(column.titleDOMFragment){div.appendChild(column.titleDOMFragment);}else{div.textContent=column.title;}
cell.appendChild(div);if(column.sort){cell.classList.add(column.sort);this._sortColumnCell=cell;}
if(column.sortable){cell.addEventListener('click',this._clickInHeaderCell.bind(this),false);cell.classList.add('sortable');const icon=UI.Icon.create('','sort-order-icon');cell.createChild('div','sort-order-icon-container').appendChild(icon);cell[DataGrid._sortIconSymbol]=icon;}}
addColumn(column,position){this._innerAddColumn(column,position);}
_innerRemoveColumn(columnId){const column=this._columns[columnId];if(!column){return;}
delete this._columns[columnId];const index=this._columnsArray.findIndex(columnConfig=>columnConfig.id===columnId);this._columnsArray.splice(index,1);const cell=this._headerTableHeaders[columnId];if(cell.parentElement){cell.parentElement.removeChild(cell);}
delete this._headerTableHeaders[columnId];}
removeColumn(columnId){this._innerRemoveColumn(columnId);}
setCellClass(cellClass){this._cellClass=cellClass;}
_refreshHeader(){this._headerTableColumnGroup.removeChildren();this._dataTableColumnGroup.removeChildren();this._headerRow.removeChildren();this._topFillerRow.removeChildren();this._bottomFillerRow.removeChildren();for(let i=0;i<this._visibleColumnsArray.length;++i){const column=this._visibleColumnsArray[i];const columnId=column.id;const headerColumn=this._headerTableColumnGroup.createChild('col');const dataColumn=this._dataTableColumnGroup.createChild('col');if(column.width){headerColumn.style.width=column.width;dataColumn.style.width=column.width;}
this._headerRow.appendChild(this._headerTableHeaders[columnId]);const topFillerRowCell=this._topFillerRow.createChild('th','top-filler-td');topFillerRowCell.textContent=column.title;topFillerRowCell.scope='col';this._bottomFillerRow.createChild('td','bottom-filler-td')[DataGrid._columnIdSymbol]=columnId;}
this._headerRow.createChild('th','corner');const topFillerRowCornerCell=this._topFillerRow.createChild('th','corner');topFillerRowCornerCell.classList.add('top-filler-td');topFillerRowCornerCell.scope='col';this._bottomFillerRow.createChild('td','corner').classList.add('bottom-filler-td');this._headerTableColumnGroup.createChild('col','corner');this._dataTableColumnGroup.createChild('col','corner');}
setVerticalPadding(top,bottom){const topPx=top+'px';const bottomPx=(top||bottom)?bottom+'px':'auto';if(this._topFillerRow.style.height===topPx&&this._bottomFillerRow.style.height===bottomPx){return;}
this._topFillerRow.style.height=topPx;this._bottomFillerRow.style.height=bottomPx;this.dispatchEventToListeners(Events.PaddingChanged);}
setRootNode(rootNode){if(this._rootNode){this._rootNode.removeChildren();this._rootNode.dataGrid=null;this._rootNode._isRoot=false;}
this._rootNode=rootNode;rootNode._isRoot=true;rootNode.setHasChildren(false);rootNode._expanded=true;rootNode._revealed=true;rootNode.selectable=false;rootNode.dataGrid=this;}
rootNode(){return this._rootNode;}
_ondblclick(event){if(this._editing||this._editingNode){return;}
const columnId=this.columnIdFromNode((event.target));if(!columnId||!this._columns[columnId].editable){return;}
this._startEditing((event.target));}
_startEditingColumnOfDataGridNode(node,cellIndex){this._editing=true;this._editingNode=node;this._editingNode.select();const element=this._editingNode._element.children[cellIndex];UI.InplaceEditor.startEditing(element,this._startEditingConfig(element));element.getComponentSelection().selectAllChildren(element);}
startEditingNextEditableColumnOfDataGridNode(node,columnIdentifier){const column=this._columns[columnIdentifier];const cellIndex=this._visibleColumnsArray.indexOf(column);const nextEditableColumn=this._nextEditableColumn(cellIndex);if(nextEditableColumn!==-1){this._startEditingColumnOfDataGridNode(node,nextEditableColumn);}}
_startEditing(target){const element=(target.enclosingNodeOrSelfWithNodeName('td'));if(!element){return;}
this._editingNode=this.dataGridNodeFromNode(target);if(!this._editingNode){if(!this.creationNode){return;}
this._editingNode=this.creationNode;}
if(this._editingNode.isCreationNode){this._startEditingColumnOfDataGridNode(this._editingNode,this._nextEditableColumn(-1));return;}
this._editing=true;if(element[DataGrid._longTextSymbol]){element.textContent=element[DataGrid._longTextSymbol];}
UI.InplaceEditor.startEditing(element,this._startEditingConfig(element));element.getComponentSelection().selectAllChildren(element);}
renderInline(){this.element.classList.add('inline');this._cornerWidth=0;this._inline=true;this.updateWidths();}
_startEditingConfig(element){return new UI.InplaceEditor.Config(this._editingCommitted.bind(this),this._editingCancelled.bind(this));}
_editingCommitted(element,newText,oldText,context,moveDirection){const columnId=this.columnIdFromNode(element);if(!columnId){this._editingCancelled(element);return;}
const column=this._columns[columnId];const cellIndex=this._visibleColumnsArray.indexOf(column);const textBeforeEditing=(this._editingNode.data[columnId]||'');const currentEditingNode=this._editingNode;function moveToNextIfNeeded(wasChange){if(!moveDirection){return;}
if(moveDirection==='forward'){const firstEditableColumn=this._nextEditableColumn(-1);if(currentEditingNode.isCreationNode&&cellIndex===firstEditableColumn&&!wasChange){return;}
const nextEditableColumn=this._nextEditableColumn(cellIndex);if(nextEditableColumn!==-1){this._startEditingColumnOfDataGridNode(currentEditingNode,nextEditableColumn);return;}
const nextDataGridNode=currentEditingNode.traverseNextNode(true,null,true);if(nextDataGridNode){this._startEditingColumnOfDataGridNode(nextDataGridNode,firstEditableColumn);return;}
if(currentEditingNode.isCreationNode&&wasChange){this.addCreationNode(false);this._startEditingColumnOfDataGridNode(this.creationNode,firstEditableColumn);return;}
return;}
if(moveDirection==='backward'){const prevEditableColumn=this._nextEditableColumn(cellIndex,true);if(prevEditableColumn!==-1){this._startEditingColumnOfDataGridNode(currentEditingNode,prevEditableColumn);return;}
const lastEditableColumn=this._nextEditableColumn(this._visibleColumnsArray.length,true);const nextDataGridNode=currentEditingNode.traversePreviousNode(true,true);if(nextDataGridNode){this._startEditingColumnOfDataGridNode(nextDataGridNode,lastEditableColumn);}
return;}}
DataGrid.DataGrid.setElementText(element,newText,!!column.longText);if(textBeforeEditing===newText){this._editingCancelled(element);moveToNextIfNeeded.call(this,false);return;}
this._editingNode.data[columnId]=newText;this._editCallback(this._editingNode,columnId,textBeforeEditing,newText);if(this._editingNode.isCreationNode){this.addCreationNode(false);}
this._editingCancelled(element);moveToNextIfNeeded.call(this,true);}
_editingCancelled(element){this._editing=false;this._editingNode=null;}
_nextEditableColumn(cellIndex,moveBackward){const increment=moveBackward?-1:1;const columns=this._visibleColumnsArray;for(let i=cellIndex+increment;(i>=0)&&(i<columns.length);i+=increment){if(columns[i].editable){return i;}}
return-1;}
sortColumnId(){if(!this._sortColumnCell){return null;}
return this._sortColumnCell[DataGrid._columnIdSymbol];}
sortOrder(){if(!this._sortColumnCell||this._sortColumnCell.classList.contains(Order.Ascending)){return Order.Ascending;}
if(this._sortColumnCell.classList.contains(Order.Descending)){return Order.Descending;}
return null;}
isSortOrderAscending(){return!this._sortColumnCell||this._sortColumnCell.classList.contains(Order.Ascending);}
_autoSizeWidths(widths,minPercent,maxPercent){if(minPercent){minPercent=Math.min(minPercent,Math.floor(100/widths.length));}
let totalWidth=0;for(let i=0;i<widths.length;++i){totalWidth+=widths[i];}
let totalPercentWidth=0;for(let i=0;i<widths.length;++i){let width=Math.round(100*widths[i]/totalWidth);if(minPercent&&width<minPercent){width=minPercent;}else if(maxPercent&&width>maxPercent){width=maxPercent;}
totalPercentWidth+=width;widths[i]=width;}
let recoupPercent=totalPercentWidth-100;while(minPercent&&recoupPercent>0){for(let i=0;i<widths.length;++i){if(widths[i]>minPercent){--widths[i];--recoupPercent;if(!recoupPercent){break;}}}}
while(maxPercent&&recoupPercent<0){for(let i=0;i<widths.length;++i){if(widths[i]<maxPercent){++widths[i];++recoupPercent;if(!recoupPercent){break;}}}}
return widths;}
autoSizeColumns(minPercent,maxPercent,maxDescentLevel){let widths=[];for(let i=0;i<this._columnsArray.length;++i){widths.push((this._columnsArray[i].title||'').length);}
maxDescentLevel=maxDescentLevel||0;const children=this._enumerateChildren(this._rootNode,[],maxDescentLevel+1);for(let i=0;i<children.length;++i){const node=children[i];for(let j=0;j<this._columnsArray.length;++j){const text=String(node.data[this._columnsArray[j].id]);if(text.length>widths[j]){widths[j]=text.length;}}}
widths=this._autoSizeWidths(widths,minPercent,maxPercent);for(let i=0;i<this._columnsArray.length;++i){this._columnsArray[i].weight=widths[i];}
this._columnWidthsInitialized=false;this.updateWidths();}
_enumerateChildren(rootNode,result,maxLevel){if(!rootNode._isRoot){result.push(rootNode);}
if(!maxLevel){return[];}
for(let i=0;i<rootNode.children.length;++i){this._enumerateChildren(rootNode.children[i],result,maxLevel-1);}
return result;}
onResize(){this.updateWidths();}
updateWidths(){if(!this._columnWidthsInitialized&&this.element.offsetWidth){const tableWidth=this.element.offsetWidth-this._cornerWidth;const cells=this._headerTableBody.rows[0].cells;const numColumns=cells.length-1;for(let i=0;i<numColumns;i++){const column=this._visibleColumnsArray[i];if(!column.weight){column.weight=100*cells[i].offsetWidth/tableWidth||10;}}
this._columnWidthsInitialized=true;}
this._applyColumnWeights();}
indexOfVisibleColumn(columnId){return this._visibleColumnsArray.findIndex(column=>column.id===columnId);}
setName(name){this._columnWeightsSetting=Common.settings.createSetting('dataGrid-'+name+'-columnWeights',{});this._loadColumnWeights();}
_loadColumnWeights(){if(!this._columnWeightsSetting){return;}
const weights=this._columnWeightsSetting.get();for(let i=0;i<this._columnsArray.length;++i){const column=this._columnsArray[i];const weight=weights[column.id];if(weight){column.weight=weight;}}
this._applyColumnWeights();}
_saveColumnWeights(){if(!this._columnWeightsSetting){return;}
const weights={};for(let i=0;i<this._columnsArray.length;++i){const column=this._columnsArray[i];weights[column.id]=column.weight;}
this._columnWeightsSetting.set(weights);}
wasShown(){this._loadColumnWeights();}
willHide(){}
_applyColumnWeights(){let tableWidth=this.element.offsetWidth-this._cornerWidth;if(tableWidth<=0){return;}
let sumOfWeights=0.0;const fixedColumnWidths=[];for(let i=0;i<this._visibleColumnsArray.length;++i){const column=this._visibleColumnsArray[i];if(column.fixedWidth){const width=this._headerTableColumnGroup.children[i][DataGrid._preferredWidthSymbol]||this._headerTableBody.rows[0].cells[i].offsetWidth;fixedColumnWidths[i]=width;tableWidth-=width;}else{sumOfWeights+=this._visibleColumnsArray[i].weight;}}
let sum=0;let lastOffset=0;for(let i=0;i<this._visibleColumnsArray.length;++i){const column=this._visibleColumnsArray[i];let width;if(column.fixedWidth){width=fixedColumnWidths[i];}else{sum+=column.weight;const offset=(sum*tableWidth/sumOfWeights)|0;width=offset-lastOffset;lastOffset=offset;}
this._setPreferredWidth(i,width);}
this._positionResizers();}
setColumnsVisiblity(columnsVisibility){this._visibleColumnsArray=[];for(let i=0;i<this._columnsArray.length;++i){const column=this._columnsArray[i];if(columnsVisibility[column.id]){this._visibleColumnsArray.push(column);}}
this._refreshHeader();this._applyColumnWeights();const nodes=this._enumerateChildren(this.rootNode(),[],-1);for(let i=0;i<nodes.length;++i){nodes[i].refresh();}}
get scrollContainer(){return this._scrollContainer;}
_positionResizers(){const headerTableColumns=this._headerTableColumnGroup.children;const numColumns=headerTableColumns.length-1;const left=[];const resizers=this._resizers;while(resizers.length>numColumns-1){resizers.pop().remove();}
for(let i=0;i<numColumns-1;i++){left[i]=(left[i-1]||0)+this._headerTableBody.rows[0].cells[i].offsetWidth;}
for(let i=0;i<numColumns-1;i++){let resizer=resizers[i];if(!resizer){resizer=createElement('div');resizer.__index=i;resizer.classList.add('data-grid-resizer');UI.installDragHandle(resizer,this._startResizerDragging.bind(this),this._resizerDragging.bind(this),this._endResizerDragging.bind(this),'col-resize');this.element.appendChild(resizer);resizers.push(resizer);}
if(resizer.__position!==left[i]){resizer.__position=left[i];resizer.style.left=left[i]+'px';}}}
addCreationNode(hasChildren){if(this.creationNode){this.creationNode.makeNormal();}
const emptyData={};for(const column in this._columns){emptyData[column]=null;}
this.creationNode=new DataGrid.CreationDataGridNode(emptyData,hasChildren);this.rootNode().appendChild(this.creationNode);}
_keyDown(event){if(event.shiftKey||event.metaKey||event.ctrlKey||this._editing||UI.isEditing()){return;}
let handled=false;let nextSelectedNode;if(!this.selectedNode){if(event.key==='ArrowUp'&&!event.altKey){nextSelectedNode=this._lastSelectableNode();}else if(event.key==='ArrowDown'&&!event.altKey){nextSelectedNode=this._firstSelectableNode();}
handled=nextSelectedNode?true:false;}else if(event.key==='ArrowUp'&&!event.altKey){nextSelectedNode=this.selectedNode.traversePreviousNode(true);while(nextSelectedNode&&!nextSelectedNode.selectable){nextSelectedNode=nextSelectedNode.traversePreviousNode(true);}
handled=nextSelectedNode?true:false;}else if(event.key==='ArrowDown'&&!event.altKey){nextSelectedNode=this.selectedNode.traverseNextNode(true);while(nextSelectedNode&&!nextSelectedNode.selectable){nextSelectedNode=nextSelectedNode.traverseNextNode(true);}
handled=nextSelectedNode?true:false;}else if(event.key==='ArrowLeft'){if(this.selectedNode.expanded){if(event.altKey){this.selectedNode.collapseRecursively();}else{this.selectedNode.collapse();}
handled=true;}else if(this.selectedNode.parent&&!this.selectedNode.parent._isRoot){handled=true;if(this.selectedNode.parent.selectable){nextSelectedNode=this.selectedNode.parent;handled=nextSelectedNode?true:false;}else if(this.selectedNode.parent){this.selectedNode.parent.collapse();}}}else if(event.key==='ArrowRight'){if(!this.selectedNode.revealed){this.selectedNode.reveal();handled=true;}else if(this.selectedNode.hasChildren()){handled=true;if(this.selectedNode.expanded){nextSelectedNode=this.selectedNode.children[0];handled=nextSelectedNode?true:false;}else{if(event.altKey){this.selectedNode.expandRecursively();}else{this.selectedNode.expand();}}}}else if(event.keyCode===8||event.keyCode===46){if(this._deleteCallback){handled=true;this._deleteCallback(this.selectedNode);}}else if(isEnterKey(event)){if(this._editCallback){handled=true;this._startEditing(this.selectedNode._element.children[this._nextEditableColumn(-1)]);}else{this.dispatchEventToListeners(Events.OpenedNode,this.selectedNode);}}
if(nextSelectedNode){nextSelectedNode.reveal();nextSelectedNode.select();}
if((event.key==='ArrowUp'||event.key==='ArrowDown'||event.key==='ArrowLeft'||event.key==='ArrowRight')&&document.activeElement!==this.element){this.element.focus();}
if(handled){event.consume(true);}}
updateSelectionBeforeRemoval(root,onlyAffectsSubtree){let ancestor=this.selectedNode;while(ancestor&&ancestor!==root){ancestor=ancestor.parent;}
if(!ancestor){return;}
let nextSelectedNode;for(ancestor=root;ancestor&&!ancestor.nextSibling;ancestor=ancestor.parent){}
if(ancestor){nextSelectedNode=ancestor.nextSibling;}
while(nextSelectedNode&&!nextSelectedNode.selectable){nextSelectedNode=nextSelectedNode.traverseNextNode(true);}
if(!nextSelectedNode||nextSelectedNode.isCreationNode){nextSelectedNode=root.traversePreviousNode(true);while(nextSelectedNode&&!nextSelectedNode.selectable){nextSelectedNode=nextSelectedNode.traversePreviousNode(true);}}
if(nextSelectedNode){nextSelectedNode.reveal();nextSelectedNode.select();}else{this.selectedNode.deselect();}}
dataGridNodeFromNode(target){const rowElement=target.enclosingNodeOrSelfWithNodeName('tr');return rowElement&&rowElement._dataGridNode;}
columnIdFromNode(target){const cellElement=target.enclosingNodeOrSelfWithNodeName('td');return cellElement&&cellElement[DataGrid._columnIdSymbol];}
_clickInHeaderCell(event){const cell=event.target.enclosingNodeOrSelfWithNodeName('th');if(!cell){return;}
this._sortByColumnHeaderCell(cell);}
_sortByColumnHeaderCell(cell){if((cell[DataGrid._columnIdSymbol]===undefined)||!cell.classList.contains('sortable')){return;}
let sortOrder=Order.Ascending;if((cell===this._sortColumnCell)&&this.isSortOrderAscending()){sortOrder=Order.Descending;}
if(this._sortColumnCell){this._sortColumnCell.classList.remove(Order.Ascending,Order.Descending);}
this._sortColumnCell=cell;cell.classList.add(sortOrder);const icon=cell[DataGrid._sortIconSymbol];icon.setIconType(sortOrder===Order.Ascending?'smallicon-triangle-up':'smallicon-triangle-down');this.dispatchEventToListeners(Events.SortingChanged);}
markColumnAsSortedBy(columnId,sortOrder){if(this._sortColumnCell){this._sortColumnCell.classList.remove(Order.Ascending,Order.Descending);}
this._sortColumnCell=this._headerTableHeaders[columnId];this._sortColumnCell.classList.add(sortOrder);}
headerTableHeader(columnId){return this._headerTableHeaders[columnId];}
_mouseDownInDataTable(event){const target=(event.target);const gridNode=this.dataGridNodeFromNode(target);if(!gridNode||!gridNode.selectable||gridNode.isEventWithinDisclosureTriangle(event)){return;}
const columnId=this.columnIdFromNode(target);if(columnId&&this._columns[columnId].nonSelectable){return;}
if(event.metaKey){if(gridNode.selected){gridNode.deselect();}else{gridNode.select();}}else{gridNode.select();this.dispatchEventToListeners(Events.OpenedNode,gridNode);}}
setHeaderContextMenuCallback(callback){this._headerContextMenuCallback=callback;}
setRowContextMenuCallback(callback){this._rowContextMenuCallback=callback;}
_contextMenu(event){const contextMenu=new UI.ContextMenu(event);const target=(event.target);const sortableVisibleColumns=this._visibleColumnsArray.filter(column=>{return(column.sortable&&column.title);});const sortableHiddenColumns=this._columnsArray.filter(column=>sortableVisibleColumns.indexOf(column)===-1&&column.allowInSortByEvenWhenHidden);const sortableColumns=[...sortableVisibleColumns,...sortableHiddenColumns];if(sortableColumns.length>0){const sortMenu=contextMenu.defaultSection().appendSubMenuItem(ls`Sort By`);for(const column of sortableColumns){const headerCell=this._headerTableHeaders[column.id];sortMenu.defaultSection().appendItem((column.title),this._sortByColumnHeaderCell.bind(this,headerCell));}}
const isContextMenuKey=(event.button===0);if(!isContextMenuKey&&target.isSelfOrDescendant(this._headerTableBody)){if(this._headerContextMenuCallback){this._headerContextMenuCallback(contextMenu);}else{contextMenu.show();}
return;}
const gridNode=isContextMenuKey?this.selectedNode:this.dataGridNodeFromNode(target);if(isContextMenuKey&&this.selectedNode){const boundingRowRect=this.selectedNode.existingElement().getBoundingClientRect();if(boundingRowRect){const x=(boundingRowRect.right+boundingRowRect.left)/2;const y=(boundingRowRect.bottom+boundingRowRect.top)/2;contextMenu.setX(x);contextMenu.setY(y);}}
if(this._refreshCallback&&(!gridNode||gridNode!==this.creationNode)){contextMenu.defaultSection().appendItem(Common.UIString('Refresh'),this._refreshCallback.bind(this));}
if(gridNode&&gridNode.selectable&&!gridNode.isEventWithinDisclosureTriangle(event)){if(this._editCallback){if(gridNode===this.creationNode){contextMenu.defaultSection().appendItem(Common.UIString('Add new'),this._startEditing.bind(this,target));}else if(isContextMenuKey){const firstEditColumnIndex=this._nextEditableColumn(-1);if(firstEditColumnIndex>-1){const firstColumn=this._visibleColumnsArray[firstEditColumnIndex];if(firstColumn&&firstColumn.editable){contextMenu.defaultSection().appendItem(ls`Edit "${firstColumn.title}"`,this._startEditingColumnOfDataGridNode.bind(this,gridNode,firstEditColumnIndex));}}}else{const columnId=this.columnIdFromNode(target);if(columnId&&this._columns[columnId].editable){contextMenu.defaultSection().appendItem(Common.UIString('Edit "%s"',this._columns[columnId].title),this._startEditing.bind(this,target));}}}
if(this._deleteCallback&&gridNode!==this.creationNode){contextMenu.defaultSection().appendItem(Common.UIString('Delete'),this._deleteCallback.bind(this,gridNode));}
if(this._rowContextMenuCallback){this._rowContextMenuCallback(contextMenu,gridNode);}}
contextMenu.show();}
_clickInDataTable(event){const gridNode=this.dataGridNodeFromNode((event.target));if(!gridNode||!gridNode.hasChildren()||!gridNode.isEventWithinDisclosureTriangle(event)){return;}
if(gridNode.expanded){if(event.altKey){gridNode.collapseRecursively();}else{gridNode.collapse();}}else{if(event.altKey){gridNode.expandRecursively();}else{gridNode.expand();}}}
setResizeMethod(method){this._resizeMethod=method;}
_startResizerDragging(event){this._currentResizer=event.target;return true;}
_endResizerDragging(){this._currentResizer=null;this._saveColumnWeights();}
_resizerDragging(event){const resizer=this._currentResizer;if(!resizer){return;}
let dragPoint=event.clientX-this.element.totalOffsetLeft();const firstRowCells=this._headerTableBody.rows[0].cells;let leftEdgeOfPreviousColumn=0;let leftCellIndex=resizer.__index;let rightCellIndex=leftCellIndex+1;for(let i=0;i<leftCellIndex;i++){leftEdgeOfPreviousColumn+=firstRowCells[i].offsetWidth;}
if(this._resizeMethod===ResizeMethod.Last){rightCellIndex=this._resizers.length;}else if(this._resizeMethod===ResizeMethod.First){leftEdgeOfPreviousColumn+=firstRowCells[leftCellIndex].offsetWidth-firstRowCells[0].offsetWidth;leftCellIndex=0;}
const rightEdgeOfNextColumn=leftEdgeOfPreviousColumn+firstRowCells[leftCellIndex].offsetWidth+firstRowCells[rightCellIndex].offsetWidth;const leftMinimum=leftEdgeOfPreviousColumn+ColumnResizePadding;const rightMaximum=rightEdgeOfNextColumn-ColumnResizePadding;if(leftMinimum>rightMaximum){return;}
dragPoint=Number.constrain(dragPoint,leftMinimum,rightMaximum);const position=(dragPoint-CenterResizerOverBorderAdjustment);resizer.__position=position;resizer.style.left=position+'px';this._setPreferredWidth(leftCellIndex,dragPoint-leftEdgeOfPreviousColumn);this._setPreferredWidth(rightCellIndex,rightEdgeOfNextColumn-dragPoint);const leftColumn=this._visibleColumnsArray[leftCellIndex];const rightColumn=this._visibleColumnsArray[rightCellIndex];if(leftColumn.weight||rightColumn.weight){const sumOfWeights=leftColumn.weight+rightColumn.weight;const delta=rightEdgeOfNextColumn-leftEdgeOfPreviousColumn;leftColumn.weight=(dragPoint-leftEdgeOfPreviousColumn)*sumOfWeights/delta;rightColumn.weight=(rightEdgeOfNextColumn-dragPoint)*sumOfWeights/delta;}
this._positionResizers();event.preventDefault();}
_setPreferredWidth(columnIndex,width){const pxWidth=width+'px';this._headerTableColumnGroup.children[columnIndex][DataGrid._preferredWidthSymbol]=width;this._headerTableColumnGroup.children[columnIndex].style.width=pxWidth;this._dataTableColumnGroup.children[columnIndex].style.width=pxWidth;}
columnOffset(columnId){if(!this.element.offsetWidth){return 0;}
for(let i=1;i<this._visibleColumnsArray.length;++i){if(columnId===this._visibleColumnsArray[i].id){if(this._resizers[i-1]){return this._resizers[i-1].__position;}}}
return 0;}
asWidget(){if(!this._dataGridWidget){this._dataGridWidget=new DataGridWidget(this);}
return this._dataGridWidget;}
topFillerRowElement(){return this._topFillerRow;}}
export const CornerWidth=14;export const Events={SelectedNode:Symbol('SelectedNode'),DeselectedNode:Symbol('DeselectedNode'),OpenedNode:Symbol('OpenedNode'),SortingChanged:Symbol('SortingChanged'),PaddingChanged:Symbol('PaddingChanged'),};export const Order={Ascending:'sort-ascending',Descending:'sort-descending'};export const Align={Center:'center',Right:'right'};export const ColumnResizePadding=24;export const CenterResizerOverBorderAdjustment=3;export const ResizeMethod={Nearest:'nearest',First:'first',Last:'last'};export class DataGridNode extends Common.Object{constructor(data,hasChildren){super();this._element=null;this._expanded=false;this._selected=false;this._dirty=false;this._inactive=false;this._depth;this._revealed;this._attached=false;this._savedPosition=null;this._shouldRefreshChildren=true;this._data=data||{};this._hasChildren=hasChildren||false;this.children=[];this.dataGrid=null;this.parent=null;this.previousSibling=null;this.nextSibling=null;this.disclosureToggleWidth=10;this.selectable=true;this._isRoot=false;}
element(){if(!this._element){const element=this.createElement();this.createCells(element);}
return(this._element);}
createElement(){this._element=createElementWithClass('tr','data-grid-data-grid-node');this._element._dataGridNode=this;if(this._hasChildren){this._element.classList.add('parent');}
if(this.expanded){this._element.classList.add('expanded');}
if(this.selected){this._element.classList.add('selected');}
if(this.revealed){this._element.classList.add('revealed');}
if(this.dirty){this._element.classList.add('dirty');}
if(this.inactive){this._element.classList.add('inactive');}
return this._element;}
existingElement(){return this._element||null;}
resetElement(){this._element=null;}
createCells(element){element.removeChildren();const columnsArray=this.dataGrid._visibleColumnsArray;for(let i=0;i<columnsArray.length;++i){element.appendChild(this.createCell(columnsArray[i].id));}
element.appendChild(this._createTDWithClass('corner'));}
get data(){return this._data;}
set data(x){this._data=x||{};this.refresh();}
get revealed(){if(this._revealed!==undefined){return this._revealed;}
let currentAncestor=this.parent;while(currentAncestor&&!currentAncestor._isRoot){if(!currentAncestor.expanded){this._revealed=false;return false;}
currentAncestor=currentAncestor.parent;}
this.revealed=true;return true;}
set revealed(x){if(this._revealed===x){return;}
this._revealed=x;if(this._element){this._element.classList.toggle('revealed',this._revealed);}
for(let i=0;i<this.children.length;++i){this.children[i].revealed=x&&this.expanded;}}
isDirty(){return this._dirty;}
setDirty(dirty){if(this._dirty===dirty){return;}
this._dirty=dirty;if(!this._element){return;}
if(dirty){this._element.classList.add('dirty');}else{this._element.classList.remove('dirty');}}
isInactive(){return this._inactive;}
setInactive(inactive){if(this._inactive===inactive){return;}
this._inactive=inactive;if(!this._element){return;}
if(inactive){this._element.classList.add('inactive');}else{this._element.classList.remove('inactive');}}
hasChildren(){return this._hasChildren;}
setHasChildren(x){if(this._hasChildren===x){return;}
this._hasChildren=x;if(!this._element){return;}
this._element.classList.toggle('parent',this._hasChildren);this._element.classList.toggle('expanded',this._hasChildren&&this.expanded);}
get depth(){if(this._depth!==undefined){return this._depth;}
if(this.parent&&!this.parent._isRoot){this._depth=this.parent.depth+1;}else{this._depth=0;}
return this._depth;}
get leftPadding(){return this.depth*this.dataGrid.indentWidth;}
get shouldRefreshChildren(){return this._shouldRefreshChildren;}
set shouldRefreshChildren(x){this._shouldRefreshChildren=x;if(x&&this.expanded){this.expand();}}
get selected(){return this._selected;}
set selected(x){if(x){this.select();}else{this.deselect();}}
get expanded(){return this._expanded;}
set expanded(x){if(x){this.expand();}else{this.collapse();}}
refresh(){if(!this.dataGrid){this._element=null;}
if(!this._element){return;}
this.createCells(this._element);}
_createTDWithClass(className){const cell=createElementWithClass('td',className);const cellClass=this.dataGrid._cellClass;if(cellClass){cell.classList.add(cellClass);}
return cell;}
createTD(columnId){const cell=this._createTDWithClass(columnId+'-column');cell[DataGrid._columnIdSymbol]=columnId;const alignment=this.dataGrid._columns[columnId].align;if(alignment){cell.classList.add(alignment);}
if(columnId===this.dataGrid.disclosureColumnId){cell.classList.add('disclosure');if(this.leftPadding){cell.style.setProperty('padding-left',this.leftPadding+'px');}}
return cell;}
createCell(columnId){const cell=this.createTD(columnId);const data=this.data[columnId];if(data instanceof Node){cell.appendChild(data);}else if(data!==null){DataGrid.DataGrid.setElementText(cell,(data),!!this.dataGrid._columns[columnId].longText);}
return cell;}
nodeSelfHeight(){return 20;}
appendChild(child){this.insertChild(child,this.children.length);}
resetNode(onlyCaches){delete this._depth;delete this._revealed;if(onlyCaches){return;}
if(this.previousSibling){this.previousSibling.nextSibling=this.nextSibling;}
if(this.nextSibling){this.nextSibling.previousSibling=this.previousSibling;}
this.dataGrid=null;this.parent=null;this.nextSibling=null;this.previousSibling=null;this._attached=false;}
insertChild(child,index){if(!child){throw'insertChild: Node can\'t be undefined or null.';}
if(child.parent===this){const currentIndex=this.children.indexOf(child);if(currentIndex<0){console.assert(false,'Inconsistent DataGrid state');}
if(currentIndex===index){return;}
if(currentIndex<index){--index;}}
child.remove();this.children.splice(index,0,child);this.setHasChildren(true);child.parent=this;child.dataGrid=this.dataGrid;child.recalculateSiblings(index);child._shouldRefreshChildren=true;let current=child.children[0];while(current){current.resetNode(true);current.dataGrid=this.dataGrid;current._attached=false;current._shouldRefreshChildren=true;current=current.traverseNextNode(false,child,true);}
if(this.expanded){child._attach();}
if(!this.revealed){child.revealed=false;}}
remove(){if(this.parent){this.parent.removeChild(this);}}
removeChild(child){if(!child){throw'removeChild: Node can\'t be undefined or null.';}
if(child.parent!==this){throw'removeChild: Node is not a child of this node.';}
if(this.dataGrid){this.dataGrid.updateSelectionBeforeRemoval(child,false);}
child._detach();child.resetNode();this.children.remove(child,true);if(this.children.length<=0){this.setHasChildren(false);}}
removeChildren(){if(this.dataGrid){this.dataGrid.updateSelectionBeforeRemoval(this,true);}
for(let i=0;i<this.children.length;++i){const child=this.children[i];child._detach();child.resetNode();}
this.children=[];this.setHasChildren(false);}
recalculateSiblings(myIndex){if(!this.parent){return;}
const previousChild=this.parent.children[myIndex-1]||null;if(previousChild){previousChild.nextSibling=this;}
this.previousSibling=previousChild;const nextChild=this.parent.children[myIndex+1]||null;if(nextChild){nextChild.previousSibling=this;}
this.nextSibling=nextChild;}
collapse(){if(this._isRoot){return;}
if(this._element){this._element.classList.remove('expanded');}
this._expanded=false;for(let i=0;i<this.children.length;++i){this.children[i].revealed=false;}}
collapseRecursively(){let item=this;while(item){if(item.expanded){item.collapse();}
item=item.traverseNextNode(false,this,true);}}
populate(){}
expand(){if(!this._hasChildren||this.expanded){return;}
if(this._isRoot){return;}
if(this.revealed&&!this._shouldRefreshChildren){for(let i=0;i<this.children.length;++i){this.children[i].revealed=true;}}
if(this._shouldRefreshChildren){for(let i=0;i<this.children.length;++i){this.children[i]._detach();}
this.populate();if(this._attached){for(let i=0;i<this.children.length;++i){const child=this.children[i];if(this.revealed){child.revealed=true;}
child._attach();}}
this._shouldRefreshChildren=false;}
if(this._element){this._element.classList.add('expanded');}
this._expanded=true;}
expandRecursively(){let item=this;while(item){item.expand();item=item.traverseNextNode(false,this);}}
reveal(){if(this._isRoot){return;}
let currentAncestor=this.parent;while(currentAncestor&&!currentAncestor._isRoot){if(!currentAncestor.expanded){currentAncestor.expand();}
currentAncestor=currentAncestor.parent;}
this.element().scrollIntoViewIfNeeded(false);}
select(supressSelectedEvent){if(!this.dataGrid||!this.selectable||this.selected){return;}
if(this.dataGrid.selectedNode){this.dataGrid.selectedNode.deselect();}
this._selected=true;this.dataGrid.selectedNode=this;if(this._element){this._element.classList.add('selected');this.dataGrid.setHasSelection(true);}
if(!supressSelectedEvent){this.dataGrid.dispatchEventToListeners(Events.SelectedNode,this);}}
revealAndSelect(){if(this._isRoot){return;}
this.reveal();this.select();}
deselect(supressDeselectedEvent){if(!this.dataGrid||this.dataGrid.selectedNode!==this||!this.selected){return;}
this._selected=false;this.dataGrid.selectedNode=null;if(this._element){this._element.classList.remove('selected');this.dataGrid.setHasSelection(false);}
if(!supressDeselectedEvent){this.dataGrid.dispatchEventToListeners(Events.DeselectedNode);}}
traverseNextNode(skipHidden,stayWithin,dontPopulate,info){if(!dontPopulate&&this._hasChildren){this.populate();}
if(info){info.depthChange=0;}
let node=(!skipHidden||this.revealed)?this.children[0]:null;if(node&&(!skipHidden||this.expanded)){if(info){info.depthChange=1;}
return node;}
if(this===stayWithin){return null;}
node=(!skipHidden||this.revealed)?this.nextSibling:null;if(node){return node;}
node=this;while(node&&!node._isRoot&&!((!skipHidden||node.revealed)?node.nextSibling:null)&&node.parent!==stayWithin){if(info){info.depthChange-=1;}
node=node.parent;}
if(!node){return null;}
return(!skipHidden||node.revealed)?node.nextSibling:null;}
traversePreviousNode(skipHidden,dontPopulate){let node=(!skipHidden||this.revealed)?this.previousSibling:null;if(!dontPopulate&&node&&node._hasChildren){node.populate();}
while(node&&((!skipHidden||(node.revealed&&node.expanded))?node.children[node.children.length-1]:null)){if(!dontPopulate&&node._hasChildren){node.populate();}
node=((!skipHidden||(node.revealed&&node.expanded))?node.children[node.children.length-1]:null);}
if(node){return node;}
if(!this.parent||this.parent._isRoot){return null;}
return this.parent;}
isEventWithinDisclosureTriangle(event){if(!this._hasChildren){return false;}
const cell=event.target.enclosingNodeOrSelfWithNodeName('td');if(!cell||!cell.classList.contains('disclosure')){return false;}
const left=cell.totalOffsetLeft()+this.leftPadding;return event.pageX>=left&&event.pageX<=left+this.disclosureToggleWidth;}
_attach(){if(!this.dataGrid||this._attached){return;}
this._attached=true;const previousNode=this.traversePreviousNode(true,true);const previousElement=previousNode?previousNode.element():this.dataGrid._topFillerRow;this.dataGrid.dataTableBody.insertBefore(this.element(),previousElement.nextSibling);if(this.expanded){for(let i=0;i<this.children.length;++i){this.children[i]._attach();}}}
_detach(){if(!this._attached){return;}
this._attached=false;if(this._element){this._element.remove();}
for(let i=0;i<this.children.length;++i){this.children[i]._detach();}}
savePosition(){if(this._savedPosition){return;}
if(!this.parent){throw'savePosition: Node must have a parent.';}
this._savedPosition={parent:this.parent,index:this.parent.children.indexOf(this)};}
restorePosition(){if(!this._savedPosition){return;}
if(this.parent!==this._savedPosition.parent){this._savedPosition.parent.insertChild(this,this._savedPosition.index);}
this._savedPosition=null;}}
export class CreationDataGridNode extends DataGridNode{constructor(data,hasChildren){super(data,hasChildren);this.isCreationNode=true;}
makeNormal(){this.isCreationNode=false;}}
export class DataGridWidget extends UI.VBox{constructor(dataGrid){super();this._dataGrid=dataGrid;this.element.appendChild(dataGrid.element);}
wasShown(){this._dataGrid.wasShown();}
willHide(){this._dataGrid.willHide();}
onResize(){this._dataGrid.onResize();}
elementsToRestoreScrollPositionsFor(){return[this._dataGrid._scrollContainer];}
detachChildWidgets(){super.detachChildWidgets();for(const dataGrid of this._dataGrids){this.element.removeChild(dataGrid.element);}
this._dataGrids=[];}}
self.DataGrid=self.DataGrid||{};DataGrid=DataGrid||{};DataGrid.ColumnDescriptor;DataGrid._preferredWidthSymbol=Symbol('preferredWidth');DataGrid._columnIdSymbol=Symbol('columnId');DataGrid._sortIconSymbol=Symbol('sortIcon');DataGrid._longTextSymbol=Symbol('longText');DataGrid.DataGrid=DataGridImpl;DataGrid.CreationDataGridNode=CreationDataGridNode;DataGrid.DataGridNode=DataGridNode;DataGrid.DataGridWidget=DataGridWidget;DataGrid.DataGrid.Events=Events;DataGrid.DataGrid.Order=Order;DataGrid.DataGrid.Align=Align;DataGrid.DataGrid.ResizeMethod=ResizeMethod;DataGrid.DataGrid.ColumnDescriptor=DataGrid.ColumnDescriptor;import'./AccessibilityModel.js';import'./AccessibilitySidebarView.js';import'./AccessibilityNodeView.js';import'./AccessibilityStrings.js';import'./ARIAAttributesView.js';import'./ARIAMetadata.js';import'./AXBreadcrumbsPane.js';import*as AccessibilityModel from'./AccessibilityModel.js';import*as AccessibilityNodeView from'./AccessibilityNodeView.js';import*as AccessibilitySidebarView from'./AccessibilitySidebarView.js';import*as AccessibilityStrings from'./AccessibilityStrings.js';import*as ARIAAttributesView from'./ARIAAttributesView.js';import*as ARIAMetadata from'./ARIAMetadata.js';import*as AXBreadcrumbsPane from'./AXBreadcrumbsPane.js';export{AccessibilityModel,AccessibilityNodeView,AccessibilitySidebarView,AccessibilityStrings,ARIAAttributesView,ARIAMetadata,AXBreadcrumbsPane,};export const AXAttributes={'disabled':{name:ls`Disabled`,description:ls`If true, this element currently cannot be interacted with.`,group:'AXGlobalStates'},'invalid':{name:ls`Invalid user entry`,description:ls`If true, this element's user-entered value does not conform to validation requirement.`,group:'AXGlobalStates'},'editable':{name:ls`Editable`,description:ls`If and how this element can be edited.`},'focusable':{name:ls`Focusable`,description:ls`If true, this element can receive focus.`},'focused':{name:ls`Focused`,description:ls`If true, this element currently has focus.`},'settable':{name:ls`Can set value`,description:ls`Whether the value of this element can be set.`},'live':{name:ls`Live region`,description:ls`Whether and what priority of live updates may be expected for this element.`,group:'AXLiveRegionAttributes'},'atomic':{name:ls`Atomic (live regions)`,description:ls`If this element may receive live updates, whether the entire live region should be presented to the user on changes, or only changed nodes.`,group:'AXLiveRegionAttributes'},'relevant':{name:ls`Relevant (live regions)`,description:ls`If this element may receive live updates, what type of updates should trigger a notification.`,group:'AXLiveRegionAttributes'},'busy':{name:ls`Busy (live regions)`,description:ls`Whether this element or its subtree are currently being updated (and thus may be in an inconsistent state).`,group:'AXLiveRegionAttributes'},'root':{name:ls`Live region root`,description:ls`If this element may receive live updates, the root element of the containing live region.`,group:'AXLiveRegionAttributes'},'autocomplete':{name:ls`Has autocomplete`,description:ls`Whether and what type of autocomplete suggestions are currently provided by this element.`,group:'AXWidgetAttributes'},'haspopup':{name:ls`Has popup`,description:ls`Whether this element has caused some kind of pop-up (such as a menu) to appear.`,group:'AXWidgetAttributes'},'level':{name:ls`Level`,description:ls`The hierarchical level of this element.`,group:'AXWidgetAttributes'},'multiselectable':{name:ls`Multi-selectable`,description:ls`Whether a user may select more than one option from this widget.`,group:'AXWidgetAttributes'},'orientation':{name:ls`Orientation`,description:ls`Whether this linear element's orientation is horizontal or vertical.`,group:'AXWidgetAttributes'},'multiline':{name:ls`Multi-line`,description:ls`Whether this text box may have more than one line.`,group:'AXWidgetAttributes'},'readonly':{name:ls`Read-only`,description:ls`If true, this element may be interacted with, but its value cannot be changed.`,group:'AXWidgetAttributes'},'required':{name:ls`Required`,description:ls`Whether this element is a required field in a form.`,group:'AXWidgetAttributes'},'valuemin':{name:ls`Minimum value`,description:ls`For a range widget, the minimum allowed value.`,group:'AXWidgetAttributes'},'valuemax':{name:ls`Maximum value`,description:ls`For a range widget, the maximum allowed value.`,group:'AXWidgetAttributes'},'valuetext':{name:ls`Value description`,description:ls`A human-readable version of the value of a range widget (where necessary).`,group:'AXWidgetAttributes'},'checked':{name:ls`Checked`,description:ls`Whether this checkbox, radio button or tree item is checked, unchecked, or mixed (e.g. has both checked and un-checked children).`,group:'AXWidgetStates'},'expanded':{name:ls`Expanded`,description:ls`Whether this element, or another grouping element it controls, is expanded.`,group:'AXWidgetStates'},'pressed':{name:ls`Pressed`,description:ls`Whether this toggle button is currently in a pressed state.`,group:'AXWidgetStates'},'selected':{name:ls`Selected`,description:ls`Whether the option represented by this element is currently selected.`,group:'AXWidgetStates'},'activedescendant':{name:ls`Active descendant`,description:ls`The descendant of this element which is active; i.e. the element to which focus should be delegated.`,group:'AXRelationshipAttributes'},'flowto':{name:ls`Flows to`,description:ls`Element to which the user may choose to navigate after this one, instead of the next element in the DOM order.`,group:'AXRelationshipAttributes'},'controls':{name:ls`Controls`,description:ls`Element or elements whose content or presence is/are controlled by this widget.`,group:'AXRelationshipAttributes'},'describedby':{name:ls`Described by`,description:ls`Element or elements which form the description of this element.`,group:'AXRelationshipAttributes'},'labelledby':{name:ls`Labeled by`,description:ls`Element or elements which may form the name of this element.`,group:'AXRelationshipAttributes'},'owns':{name:ls`Owns`,description:ls`Element or elements which should be considered descendants of this element, despite not being descendants in the DOM.`,group:'AXRelationshipAttributes'},'name':{name:ls`Name`,description:ls`The computed name of this element.`,group:'Default'},'role':{name:ls`Role`,description:ls`Indicates the purpose of this element, such as a user interface idiom for a widget, or structural role within a document.`,group:'Default'},'value':{name:ls`Value`,description:ls`The value of this element; this may be user-provided or developer-provided, depending on the element.`,group:'Default'},'help':{name:ls`Help`,description:ls`The computed help text for this element.`,group:'Default'},'description':{name:ls`Description`,description:ls`The accessible description for this element.`,group:'Default'}};export const AXSourceTypes={'attribute':{name:ls`From attribute`,description:ls`Value from attribute.`},'implicit':{name:ls`Implicit`,description:ls`Implicit value.`,},'style':{name:ls`From style`,description:ls`Value from style.`},'contents':{name:ls`Contents`,description:ls`Value from element contents.`},'placeholder':{name:ls`From placeholder attribute`,description:ls`Value from placeholder attribute.`},'relatedElement':{name:ls`Related element`,description:ls`Value from related element.`}};export const AXNativeSourceTypes={'figcaption':{name:ls`From caption`,description:ls`Value from figcaption element.`},'label':{name:ls`From label`,description:ls`Value from label element.`},'labelfor':{name:ls`From label (for)`,description:ls`Value from label element with for= attribute.`},'labelwrapped':{name:ls`From label (wrapped)`,description:ls`Value from label element wrapped.`},'tablecaption':{name:ls`From caption`,description:ls`Value from table caption.`},'title':{name:ls`From title`,description:ls`Value from title attribute.`},'other':{name:ls`From native HTML`,description:ls`Value from native HTML (unknown source).`},};self.Accessibility=self.Accessibility||{};Accessibility=Accessibility||{};Accessibility.AccessibilityStrings={};Accessibility.AccessibilityStrings.AXAttributes=AXAttributes;Accessibility.AccessibilityStrings.AXSourceTypes=AXSourceTypes;Accessibility.AccessibilityStrings.AXNativeSourceTypes=AXNativeSourceTypes;export default class AccessibilitySidebarView extends UI.ThrottledWidget{constructor(){super();this._node=null;this._axNode=null;this._skipNextPullNode=false;this._sidebarPaneStack=UI.viewManager.createStackLocation();this._breadcrumbsSubPane=new Accessibility.AXBreadcrumbsPane(this);this._sidebarPaneStack.showView(this._breadcrumbsSubPane);this._ariaSubPane=new Accessibility.ARIAAttributesPane();this._sidebarPaneStack.showView(this._ariaSubPane);this._axNodeSubPane=new Accessibility.AXNodeSubPane();this._sidebarPaneStack.showView(this._axNodeSubPane);this._sidebarPaneStack.widget().show(this.element);UI.context.addFlavorChangeListener(SDK.DOMNode,this._pullNode,this);this._pullNode();}
node(){return this._node;}
axNode(){return this._axNode;}
setNode(node,fromAXTree){this._skipNextPullNode=!!fromAXTree;this._node=node;this.update();}
accessibilityNodeCallback(axNode){if(!axNode){return;}
this._axNode=axNode;if(axNode.isDOMNode()){this._sidebarPaneStack.showView(this._ariaSubPane,this._axNodeSubPane);}else{this._sidebarPaneStack.removeView(this._ariaSubPane);}
if(this._axNodeSubPane){this._axNodeSubPane.setAXNode(axNode);}
if(this._breadcrumbsSubPane){this._breadcrumbsSubPane.setAXNode(axNode);}}
doUpdate(){const node=this.node();this._axNodeSubPane.setNode(node);this._ariaSubPane.setNode(node);this._breadcrumbsSubPane.setNode(node);if(!node){return Promise.resolve();}
const accessibilityModel=node.domModel().target().model(Accessibility.AccessibilityModel);accessibilityModel.clear();return accessibilityModel.requestPartialAXTree(node).then(()=>{this.accessibilityNodeCallback(accessibilityModel.axNodeForDOMNode(node));});}
wasShown(){super.wasShown();this.doUpdate();SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.AttrModified,this._onAttrChange,this);SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.AttrRemoved,this._onAttrChange,this);SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.CharacterDataModified,this._onNodeChange,this);SDK.targetManager.addModelListener(SDK.DOMModel,SDK.DOMModel.Events.ChildNodeCountUpdated,this._onNodeChange,this);}
willHide(){SDK.targetManager.removeModelListener(SDK.DOMModel,SDK.DOMModel.Events.AttrModified,this._onAttrChange,this);SDK.targetManager.removeModelListener(SDK.DOMModel,SDK.DOMModel.Events.AttrRemoved,this._onAttrChange,this);SDK.targetManager.removeModelListener(SDK.DOMModel,SDK.DOMModel.Events.CharacterDataModified,this._onNodeChange,this);SDK.targetManager.removeModelListener(SDK.DOMModel,SDK.DOMModel.Events.ChildNodeCountUpdated,this._onNodeChange,this);}
_pullNode(){if(this._skipNextPullNode){this._skipNextPullNode=false;return;}
this.setNode(UI.context.flavor(SDK.DOMNode));}
_onAttrChange(event){if(!this.node()){return;}
const node=event.data.node;if(this.node()!==node){return;}
this.update();}
_onNodeChange(event){if(!this.node()){return;}
const node=event.data;if(this.node()!==node){return;}
this.update();}}
export class AccessibilitySubPane extends UI.SimpleView{constructor(name){super(name);this._axNode=null;this.registerRequiredCSS('accessibility/accessibilityProperties.css');}
setAXNode(axNode){}
node(){return this._node;}
setNode(node){this._node=node;}
createInfo(textContent,className){const classNameOrDefault=className||'gray-info-message';const info=this.element.createChild('div',classNameOrDefault);info.textContent=textContent;return info;}
createTreeOutline(){const treeOutline=new UI.TreeOutlineInShadow();treeOutline.registerRequiredCSS('accessibility/accessibilityNode.css');treeOutline.registerRequiredCSS('accessibility/accessibilityProperties.css');treeOutline.registerRequiredCSS('object_ui/objectValue.css');treeOutline.element.classList.add('hidden');treeOutline.hideOverflow();this.element.appendChild(treeOutline.element);return treeOutline;}}
self.Accessibility=self.Accessibility||{};Accessibility=Accessibility||{};Accessibility.AccessibilitySidebarView=AccessibilitySidebarView;Accessibility.AccessibilitySubPane=AccessibilitySubPane;export class AXNodeSubPane extends Accessibility.AccessibilitySubPane{constructor(){super(ls`Computed Properties`);this.contentElement.classList.add('ax-subpane');this._noNodeInfo=this.createInfo(ls`No accessibility node`);this._ignoredInfo=this.createInfo(ls`Accessibility node not exposed`,'ax-ignored-info hidden');this._treeOutline=this.createTreeOutline();this._ignoredReasonsTree=this.createTreeOutline();this.element.classList.add('accessibility-computed');this.registerRequiredCSS('accessibility/accessibilityNode.css');this._treeOutline.setFocusable(true);}
setAXNode(axNode){if(this._axNode===axNode){return;}
this._axNode=axNode;const treeOutline=this._treeOutline;treeOutline.removeChildren();const ignoredReasons=this._ignoredReasonsTree;ignoredReasons.removeChildren();if(!axNode){treeOutline.element.classList.add('hidden');this._ignoredInfo.classList.add('hidden');ignoredReasons.element.classList.add('hidden');this._noNodeInfo.classList.remove('hidden');this.element.classList.add('ax-ignored-node-pane');return;}
if(axNode.ignored()){this._noNodeInfo.classList.add('hidden');treeOutline.element.classList.add('hidden');this.element.classList.add('ax-ignored-node-pane');this._ignoredInfo.classList.remove('hidden');ignoredReasons.element.classList.remove('hidden');function addIgnoredReason(property){ignoredReasons.appendChild(new Accessibility.AXNodeIgnoredReasonTreeElement(property,(axNode)));}
const ignoredReasonsArray=(axNode.ignoredReasons());for(const reason of ignoredReasonsArray){addIgnoredReason(reason);}
if(!ignoredReasons.firstChild()){ignoredReasons.element.classList.add('hidden');}
return;}
this.element.classList.remove('ax-ignored-node-pane');this._ignoredInfo.classList.add('hidden');ignoredReasons.element.classList.add('hidden');this._noNodeInfo.classList.add('hidden');treeOutline.element.classList.remove('hidden');function addProperty(property){treeOutline.appendChild(new Accessibility.AXNodePropertyTreePropertyElement(property,(axNode)));}
for(const property of axNode.coreProperties()){addProperty(property);}
const roleProperty=({name:'role',value:axNode.role()});addProperty(roleProperty);for(const property of(axNode.properties())){addProperty(property);}
const firstNode=treeOutline.firstChild();if(firstNode){firstNode.select(true,false);}}
setNode(node){super.setNode(node);this._axNode=null;}}
export class AXNodePropertyTreeElement extends UI.TreeElement{constructor(axNode){super('');this._axNode=axNode;}
static createSimpleValueElement(type,value){let valueElement;const AXValueType=Protocol.Accessibility.AXValueType;if(!type||type===AXValueType.ValueUndefined||type===AXValueType.ComputedString){valueElement=createElement('span');}else{valueElement=createElementWithClass('span','monospace');}
let valueText;const isStringProperty=type&&Accessibility.AXNodePropertyTreeElement.StringProperties.has(type);if(isStringProperty){valueText='"'+value.replace(/\n/g,'\u21B5')+'"';valueElement._originalTextContent=value;}else{valueText=String(value);}
if(type&&type in Accessibility.AXNodePropertyTreeElement.TypeStyles){valueElement.classList.add(Accessibility.AXNodePropertyTreeElement.TypeStyles[type]);}
valueElement.setTextContentTruncatedIfNeeded(valueText||'');valueElement.title=String(value)||'';return valueElement;}
static createExclamationMark(tooltip){const exclamationElement=createElement('span','dt-icon-label');exclamationElement.type='smallicon-warning';exclamationElement.title=tooltip;return exclamationElement;}
appendNameElement(name){const nameElement=createElement('span');const AXAttributes=Accessibility.AccessibilityStrings.AXAttributes;if(name in AXAttributes){nameElement.textContent=AXAttributes[name].name;nameElement.title=AXAttributes[name].description;nameElement.classList.add('ax-readable-name');}else{nameElement.textContent=name;nameElement.classList.add('ax-name');nameElement.classList.add('monospace');}
this.listItemElement.appendChild(nameElement);}
appendValueElement(value){const AXValueType=Protocol.Accessibility.AXValueType;if(value.type===AXValueType.Idref||value.type===AXValueType.Node||value.type===AXValueType.IdrefList||value.type===AXValueType.NodeList){this.appendRelatedNodeListValueElement(value);return;}else if(value.sources){const sources=value.sources;for(let i=0;i<sources.length;i++){const source=sources[i];const child=new Accessibility.AXValueSourceTreeElement(source,this._axNode);this.appendChild(child);}
this.expand();}
const element=Accessibility.AXNodePropertyTreeElement.createSimpleValueElement(value.type,String(value.value));this.listItemElement.appendChild(element);}
appendRelatedNode(relatedNode,index){const deferredNode=new SDK.DeferredDOMNode(this._axNode.accessibilityModel().target(),relatedNode.backendDOMNodeId);const nodeTreeElement=new Accessibility.AXRelatedNodeSourceTreeElement({deferredNode:deferredNode},relatedNode);this.appendChild(nodeTreeElement);}
appendRelatedNodeInline(relatedNode){const deferredNode=new SDK.DeferredDOMNode(this._axNode.accessibilityModel().target(),relatedNode.backendDOMNodeId);const linkedNode=new Accessibility.AXRelatedNodeElement({deferredNode:deferredNode},relatedNode);this.listItemElement.appendChild(linkedNode.render());}
appendRelatedNodeListValueElement(value){if(value.relatedNodes.length===1&&!value.value){this.appendRelatedNodeInline(value.relatedNodes[0]);return;}
value.relatedNodes.forEach(this.appendRelatedNode,this);if(value.relatedNodes.length<=3){this.expand();}else{this.collapse();}}}
export const TypeStyles={attribute:'ax-value-string',boolean:'object-value-boolean',booleanOrUndefined:'object-value-boolean',computedString:'ax-readable-string',idref:'ax-value-string',idrefList:'ax-value-string',integer:'object-value-number',internalRole:'ax-internal-role',number:'ax-value-number',role:'ax-role',string:'ax-value-string',tristate:'object-value-boolean',valueUndefined:'ax-value-undefined'};export const StringProperties=new Set([Protocol.Accessibility.AXValueType.String,Protocol.Accessibility.AXValueType.ComputedString,Protocol.Accessibility.AXValueType.IdrefList,Protocol.Accessibility.AXValueType.Idref]);export class AXNodePropertyTreePropertyElement extends AXNodePropertyTreeElement{constructor(property,axNode){super(axNode);this._property=property;this.toggleOnClick=true;this.listItemElement.classList.add('property');}
onattach(){this._update();}
_update(){this.listItemElement.removeChildren();this.appendNameElement(this._property.name);this.listItemElement.createChild('span','separator').textContent=':\xA0';this.appendValueElement(this._property.value);}}
export class AXValueSourceTreeElement extends AXNodePropertyTreeElement{constructor(source,axNode){super(axNode);this._source=source;}
onattach(){this._update();}
appendRelatedNodeWithIdref(relatedNode,index,idref){const deferredNode=new SDK.DeferredDOMNode(this._axNode.accessibilityModel().target(),relatedNode.backendDOMNodeId);const nodeTreeElement=new Accessibility.AXRelatedNodeSourceTreeElement({deferredNode:deferredNode,idref:idref},relatedNode);this.appendChild(nodeTreeElement);}
appendIDRefValueElement(value){const relatedNodes=value.relatedNodes;const idrefs=value.value.trim().split(/\s+/);if(idrefs.length===1){const idref=idrefs[0];const matchingNode=relatedNodes.find(node=>node.idref===idref);if(matchingNode){this.appendRelatedNodeWithIdref(matchingNode,0,idref);}else{this.listItemElement.appendChild(new Accessibility.AXRelatedNodeElement({idref:idref}).render());}}else{for(let i=0;i<idrefs.length;++i){const idref=idrefs[i];const matchingNode=relatedNodes.find(node=>node.idref===idref);if(matchingNode){this.appendRelatedNodeWithIdref(matchingNode,i,idref);}else{this.appendChild(new Accessibility.AXRelatedNodeSourceTreeElement({idref:idref}));}}}}
appendRelatedNodeListValueElement(value){const relatedNodes=value.relatedNodes;const numNodes=relatedNodes.length;if(value.type===Protocol.Accessibility.AXValueType.IdrefList||value.type===Protocol.Accessibility.AXValueType.Idref){this.appendIDRefValueElement(value);}else{super.appendRelatedNodeListValueElement(value);}
if(numNodes<=3){this.expand();}else{this.collapse();}}
appendSourceNameElement(source){const nameElement=createElement('span');const AXValueSourceType=Protocol.Accessibility.AXValueSourceType;const type=source.type;switch(type){case AXValueSourceType.Attribute:case AXValueSourceType.Placeholder:case AXValueSourceType.RelatedElement:if(source.nativeSource){const AXNativeSourceTypes=Accessibility.AccessibilityStrings.AXNativeSourceTypes;const nativeSource=source.nativeSource;nameElement.textContent=AXNativeSourceTypes[nativeSource].name;nameElement.title=AXNativeSourceTypes[nativeSource].description;nameElement.classList.add('ax-readable-name');break;}
nameElement.textContent=source.attribute;nameElement.classList.add('ax-name');nameElement.classList.add('monospace');break;default:const AXSourceTypes=Accessibility.AccessibilityStrings.AXSourceTypes;if(type in AXSourceTypes){nameElement.textContent=AXSourceTypes[type].name;nameElement.title=AXSourceTypes[type].description;nameElement.classList.add('ax-readable-name');}else{console.warn(type,'not in AXSourceTypes');nameElement.textContent=type;}}
this.listItemElement.appendChild(nameElement);}
_update(){this.listItemElement.removeChildren();if(this._source.invalid){const exclamationMark=Accessibility.AXNodePropertyTreeElement.createExclamationMark(ls`Invalid source.`);this.listItemElement.appendChild(exclamationMark);this.listItemElement.classList.add('ax-value-source-invalid');}else if(this._source.superseded){this.listItemElement.classList.add('ax-value-source-unused');}
this.appendSourceNameElement(this._source);this.listItemElement.createChild('span','separator').textContent=':\xA0';if(this._source.attributeValue){this.appendValueElement(this._source.attributeValue);this.listItemElement.createTextChild('\xA0');}else if(this._source.nativeSourceValue){this.appendValueElement(this._source.nativeSourceValue);this.listItemElement.createTextChild('\xA0');if(this._source.value){this.appendValueElement(this._source.value);}}else if(this._source.value){this.appendValueElement(this._source.value);}else{const valueElement=Accessibility.AXNodePropertyTreeElement.createSimpleValueElement(Protocol.Accessibility.AXValueType.ValueUndefined,ls`Not specified`);this.listItemElement.appendChild(valueElement);this.listItemElement.classList.add('ax-value-source-unused');}
if(this._source.value&&this._source.superseded){this.listItemElement.classList.add('ax-value-source-superseded');}}}
export class AXRelatedNodeSourceTreeElement extends UI.TreeElement{constructor(node,value){super('');this._value=value;this._axRelatedNodeElement=new Accessibility.AXRelatedNodeElement(node,value);this.selectable=true;}
onattach(){this.listItemElement.appendChild(this._axRelatedNodeElement.render());if(!this._value){return;}
if(this._value.text){this.listItemElement.appendChild(Accessibility.AXNodePropertyTreeElement.createSimpleValueElement(Protocol.Accessibility.AXValueType.ComputedString,this._value.text));}}
onenter(){this._axRelatedNodeElement.revealNode();return true;}}
export class AXRelatedNodeElement{constructor(node,value){this._deferredNode=node.deferredNode;this._idref=node.idref;this._value=value;}
render(){const element=createElement('span');let valueElement;if(this._deferredNode){valueElement=createElement('span');element.appendChild(valueElement);this._deferredNode.resolvePromise().then(node=>{Common.Linkifier.linkify(node,{preventKeyboardFocus:true}).then(linkfied=>valueElement.appendChild(linkfied));});}else if(this._idref){element.classList.add('invalid');valueElement=Accessibility.AXNodePropertyTreeElement.createExclamationMark(ls`No node with this ID.`);valueElement.createTextChild(this._idref);element.appendChild(valueElement);}
return element;}
revealNode(){this._deferredNode.resolvePromise().then(node=>Common.Revealer.reveal(node));}}
export class AXNodeIgnoredReasonTreeElement extends AXNodePropertyTreeElement{constructor(property,axNode){super(axNode);this._property=property;this._axNode=axNode;this.toggleOnClick=true;this.selectable=false;}
static createReasonElement(reason,axNode){let reasonElement=null;switch(reason){case'activeModalDialog':reasonElement=UI.formatLocalized('Element is hidden by active modal dialog:\xA0',[]);break;case'ancestorIsLeafNode':reasonElement=UI.formatLocalized('Ancestor\'s children are all presentational:\xA0',[]);break;case'ariaHiddenElement':{const ariaHiddenSpan=createElement('span','source-code').textContent='aria-hidden';reasonElement=UI.formatLocalized('Element is %s.',[ariaHiddenSpan]);break;}
case'ariaHiddenSubtree':{const ariaHiddenSpan=createElement('span','source-code').textContent='aria-hidden';const trueSpan=createElement('span','source-code').textContent='true';reasonElement=UI.formatLocalized('%s is %s on ancestor:\xA0',[ariaHiddenSpan,trueSpan]);break;}
case'emptyAlt':reasonElement=UI.formatLocalized('Element has empty alt text.',[]);break;case'emptyText':reasonElement=UI.formatLocalized('No text content.',[]);break;case'inertElement':reasonElement=UI.formatLocalized('Element is inert.',[]);break;case'inertSubtree':reasonElement=UI.formatLocalized('Element is in an inert subtree from\xA0',[]);break;case'inheritsPresentation':reasonElement=UI.formatLocalized('Element inherits presentational role from\xA0',[]);break;case'labelContainer':reasonElement=UI.formatLocalized('Part of label element:\xA0',[]);break;case'labelFor':reasonElement=UI.formatLocalized('Label for\xA0',[]);break;case'notRendered':reasonElement=UI.formatLocalized('Element is not rendered.',[]);break;case'notVisible':reasonElement=UI.formatLocalized('Element is not visible.',[]);break;case'presentationalRole':{const rolePresentationSpan=createElement('span','source-code').textContent='role='+axNode.role().value;reasonElement=UI.formatLocalized('Element has %s.',[rolePresentationSpan]);break;}
case'probablyPresentational':reasonElement=UI.formatLocalized('Element is presentational.',[]);break;case'staticTextUsedAsNameFor':reasonElement=UI.formatLocalized('Static text node is used as name for\xA0',[]);break;case'uninteresting':reasonElement=UI.formatLocalized('Element not interesting for accessibility.',[]);break;}
if(reasonElement){reasonElement.classList.add('ax-reason');}
return reasonElement;}
onattach(){this.listItemElement.removeChildren();this._reasonElement=Accessibility.AXNodeIgnoredReasonTreeElement.createReasonElement(this._property.name,this._axNode);this.listItemElement.appendChild(this._reasonElement);const value=this._property.value;if(value.type===Protocol.Accessibility.AXValueType.Idref){this.appendRelatedNodeListValueElement(value);}}}
self.Accessibility=self.Accessibility||{};Accessibility=Accessibility||{};Accessibility.AXNodeSubPane=AXNodeSubPane;Accessibility.AXNodePropertyTreeElement=AXNodePropertyTreeElement;Accessibility.AXNodePropertyTreeElement.TypeStyles=TypeStyles;Accessibility.AXNodePropertyTreeElement.StringProperties=StringProperties;Accessibility.AXNodePropertyTreePropertyElement=AXNodePropertyTreePropertyElement;Accessibility.AXValueSourceTreeElement=AXValueSourceTreeElement;Accessibility.AXRelatedNodeSourceTreeElement=AXRelatedNodeSourceTreeElement;Accessibility.AXRelatedNodeElement=AXRelatedNodeElement;Accessibility.AXNodeIgnoredReasonTreeElement=AXNodeIgnoredReasonTreeElement;export class AccessibilityNode{constructor(accessibilityModel,payload){this._accessibilityModel=accessibilityModel;this._agent=accessibilityModel._agent;this._id=payload.nodeId;accessibilityModel._setAXNodeForAXId(this._id,this);if(payload.backendDOMNodeId){accessibilityModel._setAXNodeForBackendDOMNodeId(payload.backendDOMNodeId,this);this._backendDOMNodeId=payload.backendDOMNodeId;this._deferredDOMNode=new SDK.DeferredDOMNode(accessibilityModel.target(),payload.backendDOMNodeId);}else{this._backendDOMNodeId=null;this._deferredDOMNode=null;}
this._ignored=payload.ignored;if(this._ignored&&'ignoredReasons'in payload){this._ignoredReasons=payload.ignoredReasons;}
this._role=payload.role||null;this._name=payload.name||null;this._description=payload.description||null;this._value=payload.value||null;this._properties=payload.properties||null;this._childIds=payload.childIds||null;this._parentNode=null;}
accessibilityModel(){return this._accessibilityModel;}
ignored(){return this._ignored;}
ignoredReasons(){return this._ignoredReasons||null;}
role(){return this._role||null;}
coreProperties(){const properties=[];if(this._name){properties.push(({name:'name',value:this._name}));}
if(this._description){properties.push(({name:'description',value:this._description}));}
if(this._value){properties.push(({name:'value',value:this._value}));}
return properties;}
name(){return this._name||null;}
description(){return this._description||null;}
value(){return this._value||null;}
properties(){return this._properties||null;}
parentNode(){return this._parentNode;}
_setParentNode(parentNode){this._parentNode=parentNode;}
isDOMNode(){return!!this._backendDOMNodeId;}
backendDOMNodeId(){return this._backendDOMNodeId;}
deferredDOMNode(){return this._deferredDOMNode;}
highlightDOMNode(){if(!this.deferredDOMNode()){return;}
this.deferredDOMNode().highlight();}
children(){const children=[];if(!this._childIds){return children;}
for(const childId of this._childIds){const child=this._accessibilityModel.axNodeForId(childId);if(child){children.push(child);}}
return children;}
numChildren(){if(!this._childIds){return 0;}
return this._childIds.length;}
hasOnlyUnloadedChildren(){if(!this._childIds||!this._childIds.length){return false;}
return!this._childIds.some(id=>this._accessibilityModel.axNodeForId(id)!==undefined);}
printSelfAndChildren(inspectedNode,leadingSpace){let string=leadingSpace||'';if(this._role){string+=this._role.value;}else{string+='<no role>';}
string+=(this._name?' '+this._name.value:'');string+=' '+this._id;if(this._domNode){string+=' ('+this._domNode.nodeName()+')';}
if(this===inspectedNode){string+=' *';}
for(const child of this.children()){string+='\n'+child.printSelfAndChildren(inspectedNode,(leadingSpace||'')+'  ');}
return string;}}
export default class AccessibilityModel extends SDK.SDKModel{constructor(target){super(target);this._agent=target.accessibilityAgent();this._axIdToAXNode=new Map();this._backendDOMNodeIdToAXNode=new Map();}
clear(){this._axIdToAXNode.clear();}
async requestPartialAXTree(node){const payloads=await this._agent.getPartialAXTree(node.id,undefined,undefined,true);if(!payloads){return;}
for(const payload of payloads){new Accessibility.AccessibilityNode(this,payload);}
for(const axNode of this._axIdToAXNode.values()){for(const axChild of axNode.children()){axChild._setParentNode(axNode);}}}
axNodeForId(axId){return this._axIdToAXNode.get(axId);}
_setAXNodeForAXId(axId,axNode){this._axIdToAXNode.set(axId,axNode);}
axNodeForDOMNode(domNode){if(!domNode){return null;}
return this._backendDOMNodeIdToAXNode.get(domNode.backendNodeId());}
_setAXNodeForBackendDOMNodeId(backendDOMNodeId,axNode){this._backendDOMNodeIdToAXNode.set(backendDOMNodeId,axNode);}
logTree(inspectedNode){let rootNode=inspectedNode;while(rootNode.parentNode()){rootNode=rootNode.parentNode();}
console.log(rootNode.printSelfAndChildren(inspectedNode));}}
self.Accessibility=self.Accessibility||{};Accessibility=Accessibility||{};Accessibility.AccessibilityNode=AccessibilityNode;Accessibility.AccessibilityModel=AccessibilityModel;SDK.SDKModel.register(Accessibility.AccessibilityModel,SDK.Target.Capability.DOM,false);export default class AXBreadcrumbsPane extends Accessibility.AccessibilitySubPane{constructor(axSidebarView){super(ls`Accessibility Tree`);this.element.classList.add('ax-subpane');UI.ARIAUtils.markAsTree(this.element);this.element.tabIndex=-1;this._axSidebarView=axSidebarView;this._preselectedBreadcrumb=null;this._inspectedNodeBreadcrumb=null;this._hoveredBreadcrumb=null;this._rootElement=this.element.createChild('div','ax-breadcrumbs');this._rootElement.addEventListener('keydown',this._onKeyDown.bind(this),true);this._rootElement.addEventListener('mousemove',this._onMouseMove.bind(this),false);this._rootElement.addEventListener('mouseleave',this._onMouseLeave.bind(this),false);this._rootElement.addEventListener('click',this._onClick.bind(this),false);this._rootElement.addEventListener('contextmenu',this._contextMenuEventFired.bind(this),false);this._rootElement.addEventListener('focusout',this._onFocusOut.bind(this),false);this.registerRequiredCSS('accessibility/axBreadcrumbs.css');}
focus(){if(this._inspectedNodeBreadcrumb){this._inspectedNodeBreadcrumb.nodeElement().focus();}else{this.element.focus();}}
setAXNode(axNode){const hadFocus=this.element.hasFocus();super.setAXNode(axNode);this._rootElement.removeChildren();if(!axNode){return;}
const ancestorChain=[];let ancestor=axNode;while(ancestor){ancestorChain.push(ancestor);ancestor=ancestor.parentNode();}
ancestorChain.reverse();let depth=0;let breadcrumb=null;let parent=null;for(ancestor of ancestorChain){breadcrumb=new Accessibility.AXBreadcrumb(ancestor,depth,(ancestor===axNode));if(parent){parent.appendChild(breadcrumb);}else{this._rootElement.appendChild(breadcrumb.element());}
parent=breadcrumb;depth++;}
this._inspectedNodeBreadcrumb=breadcrumb;this._inspectedNodeBreadcrumb.setPreselected(true,hadFocus);this._setPreselectedBreadcrumb(this._inspectedNodeBreadcrumb);function append(parentBreadcrumb,axNode,localDepth){const childBreadcrumb=new Accessibility.AXBreadcrumb(axNode,localDepth,false);parentBreadcrumb.appendChild(childBreadcrumb);for(const child of axNode.children()){append(childBreadcrumb,child,localDepth+1);}}
for(const child of axNode.children()){append(this._inspectedNodeBreadcrumb,child,depth);}}
willHide(){this._setPreselectedBreadcrumb(null);}
_onKeyDown(event){if(!this._preselectedBreadcrumb){return;}
if(!event.composedPath().some(element=>element===this._preselectedBreadcrumb.element())){return;}
if(event.shiftKey||event.metaKey||event.ctrlKey){return;}
let handled=false;if((event.key==='ArrowUp'||event.key==='ArrowLeft')&&!event.altKey){handled=this._preselectPrevious();}else if((event.key==='ArrowDown'||event.key==='ArrowRight')&&!event.altKey){handled=this._preselectNext();}else if(isEnterKey(event)){handled=this._inspectDOMNode(this._preselectedBreadcrumb.axNode());}
if(handled){event.consume(true);}}
_preselectPrevious(){const previousBreadcrumb=this._preselectedBreadcrumb.previousBreadcrumb();if(!previousBreadcrumb){return false;}
this._setPreselectedBreadcrumb(previousBreadcrumb);return true;}
_preselectNext(){const nextBreadcrumb=this._preselectedBreadcrumb.nextBreadcrumb();if(!nextBreadcrumb){return false;}
this._setPreselectedBreadcrumb(nextBreadcrumb);return true;}
_setPreselectedBreadcrumb(breadcrumb){if(breadcrumb===this._preselectedBreadcrumb){return;}
const hadFocus=this.element.hasFocus();if(this._preselectedBreadcrumb){this._preselectedBreadcrumb.setPreselected(false,hadFocus);}
if(breadcrumb){this._preselectedBreadcrumb=breadcrumb;}else{this._preselectedBreadcrumb=this._inspectedNodeBreadcrumb;}
this._preselectedBreadcrumb.setPreselected(true,hadFocus);if(!breadcrumb&&hadFocus){SDK.OverlayModel.hideDOMNodeHighlight();}}
_onMouseLeave(event){this._setHoveredBreadcrumb(null);}
_onMouseMove(event){const breadcrumbElement=event.target.enclosingNodeOrSelfWithClass('ax-breadcrumb');if(!breadcrumbElement){this._setHoveredBreadcrumb(null);return;}
const breadcrumb=breadcrumbElement.breadcrumb;if(!breadcrumb.isDOMNode()){return;}
this._setHoveredBreadcrumb(breadcrumb);}
_onFocusOut(event){if(!this._preselectedBreadcrumb||event.target!==this._preselectedBreadcrumb.nodeElement()){return;}
this._setPreselectedBreadcrumb(null);}
_onClick(event){const breadcrumbElement=event.target.enclosingNodeOrSelfWithClass('ax-breadcrumb');if(!breadcrumbElement){this._setHoveredBreadcrumb(null);return;}
const breadcrumb=breadcrumbElement.breadcrumb;if(breadcrumb.inspected()){breadcrumb.nodeElement().focus();return;}
if(!breadcrumb.isDOMNode()){return;}
this._inspectDOMNode(breadcrumb.axNode());}
_setHoveredBreadcrumb(breadcrumb){if(breadcrumb===this._hoveredBreadcrumb){return;}
if(this._hoveredBreadcrumb){this._hoveredBreadcrumb.setHovered(false);}
if(breadcrumb){breadcrumb.setHovered(true);}else if(this.node()){this.node().domModel().overlayModel().nodeHighlightRequested(this.node().id);}
this._hoveredBreadcrumb=breadcrumb;}
_inspectDOMNode(axNode){if(!axNode.isDOMNode()){return false;}
axNode.deferredDOMNode().resolve(domNode=>{this._axSidebarView.setNode(domNode,true);Common.Revealer.reveal(domNode,true);});return true;}
_contextMenuEventFired(event){const breadcrumbElement=event.target.enclosingNodeOrSelfWithClass('ax-breadcrumb');if(!breadcrumbElement){return;}
const axNode=breadcrumbElement.breadcrumb.axNode();if(!axNode.isDOMNode()||!axNode.deferredDOMNode()){return;}
const contextMenu=new UI.ContextMenu(event);contextMenu.viewSection().appendItem(ls`Scroll into view`,()=>{axNode.deferredDOMNode().resolvePromise().then(domNode=>{if(!domNode){return;}
domNode.scrollIntoView();});});contextMenu.appendApplicableItems(axNode.deferredDOMNode());contextMenu.show();}}
export class AXBreadcrumb{constructor(axNode,depth,inspected){this._axNode=axNode;this._element=createElementWithClass('div','ax-breadcrumb');this._element.breadcrumb=this;this._nodeElement=createElementWithClass('div','ax-node');UI.ARIAUtils.markAsTreeitem(this._nodeElement);this._nodeElement.tabIndex=-1;this._element.appendChild(this._nodeElement);this._nodeWrapper=createElementWithClass('div','wrapper');this._nodeElement.appendChild(this._nodeWrapper);this._selectionElement=createElementWithClass('div','selection fill');this._nodeElement.appendChild(this._selectionElement);this._childrenGroupElement=createElementWithClass('div','children');UI.ARIAUtils.markAsGroup(this._childrenGroupElement);this._element.appendChild(this._childrenGroupElement);this._children=[];this._hovered=false;this._preselected=false;this._parent=null;this._inspected=inspected;this._nodeElement.classList.toggle('inspected',inspected);this._nodeElement.style.paddingLeft=(16*depth+4)+'px';if(this._axNode.ignored()){this._appendIgnoredNodeElement();}else{this._appendRoleElement(this._axNode.role());if(this._axNode.name()&&this._axNode.name().value){this._nodeWrapper.createChild('span','separator').textContent='\xA0';this._appendNameElement((this._axNode.name().value));}}
if(this._axNode.hasOnlyUnloadedChildren()){this._nodeElement.classList.add('children-unloaded');}
if(!this._axNode.isDOMNode()){this._nodeElement.classList.add('no-dom-node');}}
element(){return this._element;}
nodeElement(){return this._nodeElement;}
appendChild(breadcrumb){this._children.push(breadcrumb);breadcrumb.setParent(this);this._nodeElement.classList.add('parent');UI.ARIAUtils.setExpanded(this._nodeElement,true);this._childrenGroupElement.appendChild(breadcrumb.element());}
setParent(breadcrumb){this._parent=breadcrumb;}
preselected(){return this._preselected;}
setPreselected(preselected,selectedByUser){if(this._preselected===preselected){return;}
this._preselected=preselected;this._nodeElement.classList.toggle('preselected',preselected);if(preselected){this._nodeElement.setAttribute('tabIndex',0);}else{this._nodeElement.setAttribute('tabIndex',-1);}
if(this._preselected){if(selectedByUser){this._nodeElement.focus();}
if(!this._inspected){this._axNode.highlightDOMNode();}else{SDK.OverlayModel.hideDOMNodeHighlight();}}}
setHovered(hovered){if(this._hovered===hovered){return;}
this._hovered=hovered;this._nodeElement.classList.toggle('hovered',hovered);if(this._hovered){this._nodeElement.classList.toggle('hovered',true);this._axNode.highlightDOMNode();}}
axNode(){return this._axNode;}
inspected(){return this._inspected;}
isDOMNode(){return this._axNode.isDOMNode();}
nextBreadcrumb(){if(this._children.length){return this._children[0];}
const nextSibling=this.element().nextSibling;if(nextSibling){return nextSibling.breadcrumb;}
return null;}
previousBreadcrumb(){const previousSibling=this.element().previousSibling;if(previousSibling){return previousSibling.breadcrumb;}
return this._parent;}
_appendNameElement(name){const nameElement=createElement('span');nameElement.textContent='"'+name+'"';nameElement.classList.add('ax-readable-string');this._nodeWrapper.appendChild(nameElement);}
_appendRoleElement(role){if(!role){return;}
const roleElement=createElementWithClass('span','monospace');roleElement.classList.add(Accessibility.AXBreadcrumb.RoleStyles[role.type]);roleElement.setTextContentTruncatedIfNeeded(role.value||'');this._nodeWrapper.appendChild(roleElement);}
_appendIgnoredNodeElement(){const ignoredNodeElement=createElementWithClass('span','monospace');ignoredNodeElement.textContent=ls`Ignored`;ignoredNodeElement.classList.add('ax-breadcrumbs-ignored-node');this._nodeWrapper.appendChild(ignoredNodeElement);}}
export const RoleStyles={internalRole:'ax-internal-role',role:'ax-role',};self.Accessibility=self.Accessibility||{};Accessibility=Accessibility||{};Accessibility.AXBreadcrumbsPane=AXBreadcrumbsPane;Accessibility.AXBreadcrumb=AXBreadcrumb;Accessibility.AXBreadcrumb.RoleStyles=RoleStyles;export default class ARIAMetadata{constructor(config){this._attributes=new Map();if(config){this._initialize(config);}}
_initialize(config){const attributes=config['attributes'];const booleanEnum=['true','false'];for(const attributeConfig of attributes){if(attributeConfig.type==='boolean'){attributeConfig.enum=booleanEnum;}
this._attributes.set(attributeConfig.name,new Accessibility.ARIAMetadata.Attribute(attributeConfig));}
this._roleNames=config['roles'].map(roleConfig=>roleConfig.name);}
valuesForProperty(property){if(this._attributes.has(property)){return this._attributes.get(property).getEnum();}
if(property==='role'){return this._roleNames;}
return[];}}
export function ariaMetadata(){if(!Accessibility.ARIAMetadata._instance){Accessibility.ARIAMetadata._instance=new Accessibility.ARIAMetadata(Accessibility.ARIAMetadata._config||null);}
return Accessibility.ARIAMetadata._instance;}
export class Attribute{constructor(config){this._enum=[];if('enum'in config){this._enum=config.enum;}}
getEnum(){return this._enum;}}
self.Accessibility=self.Accessibility||{};Accessibility=Accessibility||{};Accessibility.ARIAMetadata=ARIAMetadata;Accessibility.ARIAMetadata.Attribute=Attribute;Accessibility.ariaMetadata=ariaMetadata;export default class ARIAAttributesPane extends Accessibility.AccessibilitySubPane{constructor(){super(ls`ARIA Attributes`);this._noPropertiesInfo=this.createInfo(ls`No ARIA attributes`);this._treeOutline=this.createTreeOutline();}
setNode(node){super.setNode(node);this._treeOutline.removeChildren();if(!this.node()){return;}
const target=this.node().domModel().target();const attributes=node.attributes();for(let i=0;i<attributes.length;++i){const attribute=attributes[i];if(Accessibility.ARIAAttributesPane._attributes.indexOf(attribute.name)<0){continue;}
this._treeOutline.appendChild(new Accessibility.ARIAAttributesTreeElement(this,attribute,target));}
const foundAttributes=(this._treeOutline.rootElement().childCount()!==0);this._noPropertiesInfo.classList.toggle('hidden',foundAttributes);this._treeOutline.element.classList.toggle('hidden',!foundAttributes);}}
export class ARIAAttributesTreeElement extends UI.TreeElement{constructor(parentPane,attribute,target){super('');this._parentPane=parentPane;this._attribute=attribute;this.selectable=false;}
static createARIAValueElement(value){const valueElement=createElementWithClass('span','monospace');valueElement.setTextContentTruncatedIfNeeded(value||'');return valueElement;}
onattach(){this._populateListItem();this.listItemElement.addEventListener('click',this._mouseClick.bind(this));}
_populateListItem(){this.listItemElement.removeChildren();this.appendNameElement(this._attribute.name);this.listItemElement.createChild('span','separator').textContent=':\xA0';this.appendAttributeValueElement(this._attribute.value);}
appendNameElement(name){this._nameElement=createElement('span');this._nameElement.textContent=name;this._nameElement.classList.add('ax-name');this._nameElement.classList.add('monospace');this.listItemElement.appendChild(this._nameElement);}
appendAttributeValueElement(value){this._valueElement=Accessibility.ARIAAttributesTreeElement.createARIAValueElement(value);this.listItemElement.appendChild(this._valueElement);}
_mouseClick(event){if(event.target===this.listItemElement){return;}
event.consume(true);this._startEditing();}
_startEditing(){const valueElement=this._valueElement;if(UI.isBeingEdited(valueElement)){return;}
const previousContent=valueElement.textContent;function blurListener(previousContent,event){const text=event.target.textContent;this._editingCommitted(text,previousContent);}
this._prompt=new Accessibility.ARIAAttributesPane.ARIAAttributePrompt(Accessibility.ariaMetadata().valuesForProperty(this._nameElement.textContent),this);this._prompt.setAutocompletionTimeout(0);const proxyElement=this._prompt.attachAndStartEditing(valueElement,blurListener.bind(this,previousContent));proxyElement.addEventListener('keydown',this._editingValueKeyDown.bind(this,previousContent),false);valueElement.getComponentSelection().selectAllChildren(valueElement);}
_removePrompt(){if(!this._prompt){return;}
this._prompt.detach();delete this._prompt;}
_editingCommitted(userInput,previousContent){this._removePrompt();if(userInput!==previousContent){this._parentPane.node().setAttributeValue(this._attribute.name,userInput);}}
_editingCancelled(){this._removePrompt();this._populateListItem();}
_editingValueKeyDown(previousContent,event){if(event.handled){return;}
if(isEnterKey(event)){this._editingCommitted(event.target.textContent,previousContent);event.consume();return;}
if(isEscKey(event)){this._editingCancelled();event.consume();return;}}}
export class ARIAAttributePrompt extends UI.TextPrompt{constructor(ariaCompletions,treeElement){super();this.initialize(this._buildPropertyCompletions.bind(this));this._ariaCompletions=ariaCompletions;this._treeElement=treeElement;}
_buildPropertyCompletions(expression,prefix,force){prefix=prefix.toLowerCase();if(!prefix&&!force&&(this._isEditingName||expression)){return Promise.resolve([]);}
return Promise.resolve(this._ariaCompletions.filter(value=>value.startsWith(prefix)).map(c=>({text:c})));}}
const _attributes=['role','aria-busy','aria-checked','aria-disabled','aria-expanded','aria-grabbed','aria-hidden','aria-invalid','aria-pressed','aria-selected','aria-activedescendant','aria-atomic','aria-autocomplete','aria-controls','aria-describedby','aria-dropeffect','aria-flowto','aria-haspopup','aria-label','aria-labelledby','aria-level','aria-live','aria-multiline','aria-multiselectable','aria-orientation','aria-owns','aria-posinset','aria-readonly','aria-relevant','aria-required','aria-setsize','aria-sort','aria-valuemax','aria-valuemin','aria-valuenow','aria-valuetext',];self.Accessibility=self.Accessibility||{};Accessibility=Accessibility||{};Accessibility.ARIAAttributesPane=ARIAAttributesPane;Accessibility.ARIAAttributesTreeElement=ARIAAttributesTreeElement;Accessibility.ARIAAttributesPane.ARIAAttributePrompt=ARIAAttributePrompt;Accessibility.ARIAAttributesPane._attributes=_attributes;import'./ProtocolMonitor.js';import*as ProtocolMonitor from'./ProtocolMonitor.js';export{ProtocolMonitor,};export default class ProtocolMonitorImpl extends UI.VBox{constructor(){super(true);this._nodes=[];this._started=false;this._startTime=0;this._nodeForId={};this._filter=node=>true;this._columns=[{id:'method',title:ls`Method`,visible:true,sortable:true,weight:60},{id:'direction',title:ls`Direction`,visible:false,sortable:true,hideable:true,weight:30},{id:'request',title:ls`Request`,visible:true,hideable:true,weight:60},{id:'response',title:ls`Response`,visible:true,hideable:true,weight:60},{id:'timestamp',title:ls`Timestamp`,visible:false,sortable:true,hideable:true,weight:30},{id:'target',title:ls`Target`,visible:false,sortable:true,hideable:true,weight:30}];this.registerRequiredCSS('protocol_monitor/protocolMonitor.css');const topToolbar=new UI.Toolbar('protocol-monitor-toolbar',this.contentElement);const recordButton=new UI.ToolbarToggle(ls`Record`,'largeicon-start-recording','largeicon-stop-recording');recordButton.addEventListener(UI.ToolbarButton.Events.Click,()=>{recordButton.setToggled(!recordButton.toggled());this._setRecording(recordButton.toggled());});recordButton.setToggleWithRedColor(true);topToolbar.appendToolbarItem(recordButton);recordButton.setToggled(true);const clearButton=new UI.ToolbarButton(ls`Clear all`,'largeicon-clear');clearButton.addEventListener(UI.ToolbarButton.Events.Click,()=>{this._dataGrid.rootNode().removeChildren();this._nodes=[];this._nodeForId={};});topToolbar.appendToolbarItem(clearButton);const split=new UI.SplitWidget(true,true,'protocol-monitor-panel-split',250);split.show(this.contentElement);this._dataGrid=new DataGrid.SortableDataGrid(this._columns);this._dataGrid.element.style.flex='1';this._infoWidget=new ProtocolMonitor.ProtocolMonitor.InfoWidget();split.setMainWidget(this._dataGrid.asWidget());split.setSidebarWidget(this._infoWidget);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,event=>this._infoWidget.render(event.data.data));this._dataGrid.addEventListener(DataGrid.DataGrid.Events.DeselectedNode,event=>this._infoWidget.render(null));this._dataGrid.setHeaderContextMenuCallback(this._innerHeaderContextMenu.bind(this));this._dataGrid.setRowContextMenuCallback(this._innerRowContextMenu.bind(this));this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortDataGrid.bind(this));this._dataGrid.setStickToBottom(true);this._dataGrid.sortNodes(DataGrid.SortableDataGrid.NumericComparator.bind(null,'timestamp'),false);this._updateColumnVisibility();const keys=['method','request','response','direction'];this._filterParser=new TextUtils.FilterParser(keys);this._suggestionBuilder=new UI.FilterSuggestionBuilder(keys);this._textFilterUI=new UI.ToolbarInput(ls`Filter`,'',1,.2,'',this._suggestionBuilder.completions.bind(this._suggestionBuilder));this._textFilterUI.addEventListener(UI.ToolbarInput.Event.TextChanged,event=>{const query=(event.data);const filters=this._filterParser.parse(query);this._filter=node=>{for(const{key,text,negative}of filters){if(!text){continue;}
const data=key?node.data[key]:node.data;if(!data){continue;}
const found=JSON.stringify(data).toLowerCase().indexOf(text.toLowerCase())!==-1;if(found===negative){return false;}}
return true;};this._filterNodes();});topToolbar.appendToolbarItem(this._textFilterUI);}
_filterNodes(){for(const node of this._nodes){if(this._filter(node)){if(!node.parent){this._dataGrid.insertChild(node);}}else{node.remove();}}}
_innerHeaderContextMenu(contextMenu){const columnConfigs=this._columns.filter(columnConfig=>columnConfig.hideable);for(const columnConfig of columnConfigs){contextMenu.headerSection().appendCheckboxItem(columnConfig.title,this._toggleColumnVisibility.bind(this,columnConfig),columnConfig.visible);}
contextMenu.show();}
_innerRowContextMenu(contextMenu,node){contextMenu.defaultSection().appendItem(ls`Filter`,()=>{this._textFilterUI.setValue(`method:${node.data.method}`,true);});contextMenu.defaultSection().appendItem(ls`Documentation`,()=>{const[domain,method]=node.data.method.split('.');const type=node.data.direction==='sent'?'method':'event';Host.InspectorFrontendHost.openInNewTab(`https://chromedevtools.github.io/devtools-protocol/tot/${domain}#${type}-${method}`);});}
_toggleColumnVisibility(columnConfig){columnConfig.visible=!columnConfig.visible;this._updateColumnVisibility();}
_updateColumnVisibility(){const visibleColumns=({});for(const columnConfig of this._columns){visibleColumns[columnConfig.id]=columnConfig.visible;}
this._dataGrid.setColumnsVisiblity(visibleColumns);}
_sortDataGrid(){const sortColumnId=this._dataGrid.sortColumnId();if(!sortColumnId){return;}
let columnIsNumeric=true;switch(sortColumnId){case'method':case'direction':columnIsNumeric=false;break;}
const comparator=columnIsNumeric?DataGrid.SortableDataGrid.NumericComparator:DataGrid.SortableDataGrid.StringComparator;this._dataGrid.sortNodes(comparator.bind(null,sortColumnId),!this._dataGrid.isSortOrderAscending());}
wasShown(){if(this._started){return;}
this._started=true;this._startTime=Date.now();this._setRecording(true);}
_setRecording(recording){if(recording){Protocol.test.onMessageSent=this._messageSent.bind(this);Protocol.test.onMessageReceived=this._messageRecieved.bind(this);}else{Protocol.test.onMessageSent=null;Protocol.test.onMessageReceived=null;}}
_targetToString(target){if(!target){return'';}
return target.decorateLabel(`${target.name()} ${target === SDK.targetManager.mainTarget() ? '' : target.id()}`);}
_messageRecieved(message,target){if('id'in message){const node=this._nodeForId[message.id];if(!node){return;}
node.data.response=message.result||message.error;node.hasError=!!message.error;node.refresh();if(this._dataGrid.selectedNode===node){this._infoWidget.render(node.data);}
return;}
const sdkTarget=(target);const node=new ProtocolMonitor.ProtocolMonitor.ProtocolNode({method:message.method,direction:'recieved',response:message.params,timestamp:Date.now()-this._startTime,request:'',target:this._targetToString(sdkTarget)});this._nodes.push(node);if(this._filter(node)){this._dataGrid.insertChild(node);}}
_messageSent(message,target){const sdkTarget=(target);const node=new ProtocolMonitor.ProtocolMonitor.ProtocolNode({method:message.method,direction:'sent',request:message.params,timestamp:Date.now()-this._startTime,response:'(pending)',id:message.id,target:this._targetToString(sdkTarget)});this._nodeForId[message.id]=node;this._nodes.push(node);if(this._filter(node)){this._dataGrid.insertChild(node);}}}
export class ProtocolNode extends DataGrid.SortableDataGridNode{constructor(data){super(data);this.hasError=false;}
createCell(columnId){switch(columnId){case'response':if(!this.data[columnId]&&this.data.direction==='send'){const cell=this.createTD(columnId);cell.textContent='(pending)';return cell;}
case'request':{const cell=this.createTD(columnId);const obj=SDK.RemoteObject.fromLocalObject(this.data[columnId]);cell.textContent=obj.description.trimEndWithMaxLength(50);cell.classList.add('source-code');return cell;}
case'timestamp':{const cell=this.createTD(columnId);cell.textContent=ls`${this.data[columnId]} ms`;return cell;}}
return super.createCell(columnId);}
element(){const element=super.element();element.classList.toggle('protocol-message-sent',this.data.direction==='sent');element.classList.toggle('protocol-message-recieved',this.data.direction!=='sent');element.classList.toggle('error',this.hasError);return element;}}
export class InfoWidget extends UI.VBox{constructor(){super();this._tabbedPane=new UI.TabbedPane();this._tabbedPane.appendTab('request','Request',new UI.Widget());this._tabbedPane.appendTab('response','Response',new UI.Widget());this._tabbedPane.show(this.contentElement);this._tabbedPane.selectTab('response');this.render(null);}
render(data){const requestEnabled=data&&data.direction==='sent';this._tabbedPane.setTabEnabled('request',!!requestEnabled);if(!data){this._tabbedPane.changeTabView('request',new UI.EmptyWidget(ls`No message selected`));this._tabbedPane.changeTabView('response',new UI.EmptyWidget(ls`No message selected`));return;}
if(!requestEnabled){this._tabbedPane.selectTab('response');}
this._tabbedPane.changeTabView('request',SourceFrame.JSONView.createViewSync(data.request));this._tabbedPane.changeTabView('response',SourceFrame.JSONView.createViewSync(data.response));}}
self.ProtocolMonitor=self.ProtocolMonitor||{};ProtocolMonitor=ProtocolMonitor||{};ProtocolMonitor.ProtocolMonitor=ProtocolMonitorImpl;ProtocolMonitor.ProtocolMonitor.InfoWidget=InfoWidget;ProtocolMonitor.ProtocolMonitor.ProtocolNode=ProtocolNode;import*as WarningErrorCounter from'./WarningErrorCounter.js';export{WarningErrorCounter,};export default class WarningErrorCounter{constructor(){WarningErrorCounter._instanceForTest=this;const countersWrapper=createElement('div');this._toolbarItem=new UI.ToolbarItem(countersWrapper);this._counter=createElement('div');this._counter.addEventListener('click',Common.console.show.bind(Common.console),false);const shadowRoot=UI.createShadowRootWithCoreStyles(this._counter,'console_counters/errorWarningCounter.css');countersWrapper.appendChild(this._counter);this._violationCounter=createElement('div');this._violationCounter.addEventListener('click',()=>{UI.viewManager.showView('audits');});const violationShadowRoot=UI.createShadowRootWithCoreStyles(this._violationCounter,'console_counters/errorWarningCounter.css');if(Root.Runtime.experiments.isEnabled('spotlight')){countersWrapper.appendChild(this._violationCounter);}
this._errors=this._createItem(shadowRoot,'smallicon-error');this._warnings=this._createItem(shadowRoot,'smallicon-warning');if(Root.Runtime.experiments.isEnabled('spotlight')){this._violations=this._createItem(violationShadowRoot,'smallicon-info');}
this._titles='';this._errorCount=-1;this._warningCount=-1;this._violationCount=-1;this._throttler=new Common.Throttler(100);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared,this._update,this);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded,this._update,this);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageUpdated,this._update,this);this._update();}
_updatedForTest(){}
_createItem(shadowRoot,iconType){const item=createElementWithClass('span','counter-item');UI.ARIAUtils.markAsHidden(item);const icon=item.createChild('span','','dt-icon-label');icon.type=iconType;const text=icon.createChild('span');shadowRoot.appendChild(item);return{item:item,text:text};}
_updateItem(item,count,first){item.item.classList.toggle('hidden',!count);item.item.classList.toggle('counter-item-first',first);item.text.textContent=count;}
_update(){this._updatingForTest=true;this._throttler.schedule(this._updateThrottled.bind(this));}
_updateThrottled(){const errors=SDK.consoleModel.errors();const warnings=SDK.consoleModel.warnings();const violations=SDK.consoleModel.violations();if(errors===this._errorCount&&warnings===this._warningCount&&violations===this._violationCount){return Promise.resolve();}
this._errorCount=errors;this._warningCount=warnings;this._violationCount=violations;this._counter.classList.toggle('hidden',!(errors||warnings));this._violationCounter.classList.toggle('hidden',!violations);this._toolbarItem.setVisible(!!(errors||warnings||violations));let errorCountTitle='';if(errors===1){errorCountTitle=ls`${errors} error`;}else{errorCountTitle=ls`${errors} errors`;}
this._updateItem(this._errors,errors,false);let warningCountTitle='';if(warnings===1){warningCountTitle=ls`${warnings} warning`;}else{warningCountTitle=ls`${warnings} warnings`;}
this._updateItem(this._warnings,warnings,!errors);if(Root.Runtime.experiments.isEnabled('spotlight')){let violationCountTitle='';if(violations===1){violationCountTitle=ls`${violations} violation`;}else{violationCountTitle=ls`${violations} violations`;}
this._updateItem(this._violations,violations,true);this._violationCounter.title=violationCountTitle;}
this._titles='';if(errors&warnings){this._titles=ls`${errorCountTitle}, ${warningCountTitle}`;}else if(errors){this._titles=errorCountTitle;}else if(warnings){this._titles=warningCountTitle;}
this._counter.title=this._titles;UI.ARIAUtils.setAccessibleName(this._counter,this._titles);UI.inspectorView.toolbarItemResized();this._updatingForTest=false;this._updatedForTest();return Promise.resolve();}
item(){return this._toolbarItem;}}
self.ConsoleCounters=self.ConsoleCounters||{};ConsoleCounters=ConsoleCounters||{};ConsoleCounters.WarningErrorCounter=WarningErrorCounter;import'./ExtensionAPI.js';import*as ExtensionPanel from'./ExtensionPanel.js';import*as ExtensionServer from'./ExtensionServer.js';import*as ExtensionTraceProvider from'./ExtensionTraceProvider.js';import*as ExtensionView from'./ExtensionView.js';export{ExtensionPanel,ExtensionServer,ExtensionTraceProvider,ExtensionView,};function defineCommonExtensionSymbols(apiPrivate){if(!apiPrivate.panels){apiPrivate.panels={};}
apiPrivate.panels.SearchAction={CancelSearch:'cancelSearch',PerformSearch:'performSearch',NextSearchResult:'nextSearchResult',PreviousSearchResult:'previousSearchResult'};apiPrivate.Events={ButtonClicked:'button-clicked-',PanelObjectSelected:'panel-objectSelected-',NetworkRequestFinished:'network-request-finished',OpenResource:'open-resource',PanelSearch:'panel-search-',RecordingStarted:'trace-recording-started-',RecordingStopped:'trace-recording-stopped-',ResourceAdded:'resource-added',ResourceContentCommitted:'resource-content-committed',ViewShown:'view-shown-',ViewHidden:'view-hidden-'};apiPrivate.Commands={AddRequestHeaders:'addRequestHeaders',AddTraceProvider:'addTraceProvider',ApplyStyleSheet:'applyStyleSheet',CompleteTraceSession:'completeTraceSession',CreatePanel:'createPanel',CreateSidebarPane:'createSidebarPane',CreateToolbarButton:'createToolbarButton',EvaluateOnInspectedPage:'evaluateOnInspectedPage',ForwardKeyboardEvent:'_forwardKeyboardEvent',GetHAR:'getHAR',GetPageResources:'getPageResources',GetRequestContent:'getRequestContent',GetResourceContent:'getResourceContent',InspectedURLChanged:'inspectedURLChanged',OpenResource:'openResource',Reload:'Reload',Subscribe:'subscribe',SetOpenResourceHandler:'setOpenResourceHandler',SetResourceContent:'setResourceContent',SetSidebarContent:'setSidebarContent',SetSidebarHeight:'setSidebarHeight',SetSidebarPage:'setSidebarPage',ShowPanel:'showPanel',Unsubscribe:'unsubscribe',UpdateButton:'updateButton'};}
self.injectedExtensionAPI=function(extensionInfo,inspectedTabId,themeName,keysToForward,testHook,injectedScriptId){const keysToForwardSet=new Set(keysToForward);const chrome=window.chrome||{};const devtools_descriptor=Object.getOwnPropertyDescriptor(chrome,'devtools');if(devtools_descriptor){return;}
const apiPrivate={};defineCommonExtensionSymbols(apiPrivate);const commands=apiPrivate.Commands;const events=apiPrivate.Events;let userAction=false;function EventSinkImpl(type,customDispatch){this._type=type;this._listeners=[];this._customDispatch=customDispatch;}
EventSinkImpl.prototype={addListener:function(callback){if(typeof callback!=='function'){throw'addListener: callback is not a function';}
if(this._listeners.length===0){extensionServer.sendRequest({command:commands.Subscribe,type:this._type});}
this._listeners.push(callback);extensionServer.registerHandler('notify-'+this._type,this._dispatch.bind(this));},removeListener:function(callback){const listeners=this._listeners;for(let i=0;i<listeners.length;++i){if(listeners[i]===callback){listeners.splice(i,1);break;}}
if(this._listeners.length===0){extensionServer.sendRequest({command:commands.Unsubscribe,type:this._type});}},_fire:function(vararg){const listeners=this._listeners.slice();for(let i=0;i<listeners.length;++i){listeners[i].apply(null,arguments);}},_dispatch:function(request){if(this._customDispatch){this._customDispatch.call(this,request);}else{this._fire.apply(this,request.arguments);}}};function InspectorExtensionAPI(){this.inspectedWindow=new InspectedWindow();this.panels=new Panels();this.network=new Network();this.timeline=new Timeline();defineDeprecatedProperty(this,'webInspector','resources','network');}
function Network(){function dispatchRequestEvent(message){const request=message.arguments[1];request.__proto__=new Request(message.arguments[0]);this._fire(request);}
this.onRequestFinished=new EventSink(events.NetworkRequestFinished,dispatchRequestEvent);defineDeprecatedProperty(this,'network','onFinished','onRequestFinished');this.onNavigated=new EventSink(events.InspectedURLChanged);}
Network.prototype={getHAR:function(callback){function callbackWrapper(result){const entries=(result&&result.entries)||[];for(let i=0;i<entries.length;++i){entries[i].__proto__=new Request(entries[i]._requestId);delete entries[i]._requestId;}
callback(result);}
extensionServer.sendRequest({command:commands.GetHAR},callback&&callbackWrapper);},addRequestHeaders:function(headers){extensionServer.sendRequest({command:commands.AddRequestHeaders,headers:headers,extensionId:window.location.hostname});}};function RequestImpl(id){this._id=id;}
RequestImpl.prototype={getContent:function(callback){function callbackWrapper(response){callback(response.content,response.encoding);}
extensionServer.sendRequest({command:commands.GetRequestContent,id:this._id},callback&&callbackWrapper);}};function Panels(){const panels={elements:new ElementsPanel(),sources:new SourcesPanel(),};function panelGetter(name){return panels[name];}
for(const panel in panels){Object.defineProperty(this,panel,{get:panelGetter.bind(null,panel),enumerable:true});}
this.applyStyleSheet=function(styleSheet){extensionServer.sendRequest({command:commands.ApplyStyleSheet,styleSheet:styleSheet});};}
Panels.prototype={create:function(title,icon,page,callback){const id='extension-panel-'+extensionServer.nextObjectId();const request={command:commands.CreatePanel,id:id,title:title,icon:icon,page:page};extensionServer.sendRequest(request,callback&&callback.bind(this,new ExtensionPanel(id)));},setOpenResourceHandler:function(callback){const hadHandler=extensionServer.hasHandler(events.OpenResource);function callbackWrapper(message){userAction=true;try{callback.call(null,new Resource(message.resource),message.lineNumber);}finally{userAction=false;}}
if(!callback){extensionServer.unregisterHandler(events.OpenResource);}else{extensionServer.registerHandler(events.OpenResource,callbackWrapper);}
if(hadHandler===!callback){extensionServer.sendRequest({command:commands.SetOpenResourceHandler,'handlerPresent':!!callback});}},openResource:function(url,lineNumber,callback){extensionServer.sendRequest({command:commands.OpenResource,'url':url,'lineNumber':lineNumber},callback);},get SearchAction(){return apiPrivate.panels.SearchAction;}};function ExtensionViewImpl(id){this._id=id;function dispatchShowEvent(message){const frameIndex=message.arguments[0];if(typeof frameIndex==='number'){this._fire(window.parent.frames[frameIndex]);}else{this._fire();}}
if(id){this.onShown=new EventSink(events.ViewShown+id,dispatchShowEvent);this.onHidden=new EventSink(events.ViewHidden+id);}}
function PanelWithSidebarImpl(hostPanelName){ExtensionViewImpl.call(this,null);this._hostPanelName=hostPanelName;this.onSelectionChanged=new EventSink(events.PanelObjectSelected+hostPanelName);}
PanelWithSidebarImpl.prototype={createSidebarPane:function(title,callback){const id='extension-sidebar-'+extensionServer.nextObjectId();const request={command:commands.CreateSidebarPane,panel:this._hostPanelName,id:id,title:title};function callbackWrapper(){callback(new ExtensionSidebarPane(id));}
extensionServer.sendRequest(request,callback&&callbackWrapper);},__proto__:ExtensionViewImpl.prototype};function declareInterfaceClass(implConstructor){return function(){const impl={__proto__:implConstructor.prototype};implConstructor.apply(impl,arguments);populateInterfaceClass(this,impl);};}
function defineDeprecatedProperty(object,className,oldName,newName){let warningGiven=false;function getter(){if(!warningGiven){console.warn(className+'.'+oldName+' is deprecated. Use '+className+'.'+newName+' instead');warningGiven=true;}
return object[newName];}
object.__defineGetter__(oldName,getter);}
function extractCallbackArgument(args){const lastArgument=args[args.length-1];return typeof lastArgument==='function'?lastArgument:undefined;}
const Button=declareInterfaceClass(ButtonImpl);const EventSink=declareInterfaceClass(EventSinkImpl);const ExtensionPanel=declareInterfaceClass(ExtensionPanelImpl);const ExtensionSidebarPane=declareInterfaceClass(ExtensionSidebarPaneImpl);const PanelWithSidebarClass=declareInterfaceClass(PanelWithSidebarImpl);const Request=declareInterfaceClass(RequestImpl);const Resource=declareInterfaceClass(ResourceImpl);const TraceSession=declareInterfaceClass(TraceSessionImpl);class ElementsPanel extends PanelWithSidebarClass{constructor(){super('elements');}}
class SourcesPanel extends PanelWithSidebarClass{constructor(){super('sources');}}
function ExtensionPanelImpl(id){ExtensionViewImpl.call(this,id);this.onSearch=new EventSink(events.PanelSearch+id);}
ExtensionPanelImpl.prototype={createStatusBarButton:function(iconPath,tooltipText,disabled){const id='button-'+extensionServer.nextObjectId();const request={command:commands.CreateToolbarButton,panel:this._id,id:id,icon:iconPath,tooltip:tooltipText,disabled:!!disabled};extensionServer.sendRequest(request);return new Button(id);},show:function(){if(!userAction){return;}
const request={command:commands.ShowPanel,id:this._id};extensionServer.sendRequest(request);},__proto__:ExtensionViewImpl.prototype};function ExtensionSidebarPaneImpl(id){ExtensionViewImpl.call(this,id);}
ExtensionSidebarPaneImpl.prototype={setHeight:function(height){extensionServer.sendRequest({command:commands.SetSidebarHeight,id:this._id,height:height});},setExpression:function(expression,rootTitle,evaluateOptions){const request={command:commands.SetSidebarContent,id:this._id,expression:expression,rootTitle:rootTitle,evaluateOnPage:true,};if(typeof evaluateOptions==='object'){request.evaluateOptions=evaluateOptions;}
extensionServer.sendRequest(request,extractCallbackArgument(arguments));},setObject:function(jsonObject,rootTitle,callback){extensionServer.sendRequest({command:commands.SetSidebarContent,id:this._id,expression:jsonObject,rootTitle:rootTitle},callback);},setPage:function(page){extensionServer.sendRequest({command:commands.SetSidebarPage,id:this._id,page:page});},__proto__:ExtensionViewImpl.prototype};function ButtonImpl(id){this._id=id;this.onClicked=new EventSink(events.ButtonClicked+id);}
ButtonImpl.prototype={update:function(iconPath,tooltipText,disabled){const request={command:commands.UpdateButton,id:this._id,icon:iconPath,tooltip:tooltipText,disabled:!!disabled};extensionServer.sendRequest(request);}};function Timeline(){}
Timeline.prototype={addTraceProvider:function(categoryName,categoryTooltip){const id='extension-trace-provider-'+extensionServer.nextObjectId();extensionServer.sendRequest({command:commands.AddTraceProvider,id:id,categoryName:categoryName,categoryTooltip:categoryTooltip});return new TraceProvider(id);}};function TraceSessionImpl(id){this._id=id;}
TraceSessionImpl.prototype={complete:function(url,timeOffset){const request={command:commands.CompleteTraceSession,id:this._id,url:url||'',timeOffset:timeOffset||0};extensionServer.sendRequest(request);}};function TraceProvider(id){function dispatchRecordingStarted(message){const sessionId=message.arguments[0];this._fire(new TraceSession(sessionId));}
this.onRecordingStarted=new EventSink(events.RecordingStarted+id,dispatchRecordingStarted);this.onRecordingStopped=new EventSink(events.RecordingStopped+id);}
function InspectedWindow(){function dispatchResourceEvent(message){this._fire(new Resource(message.arguments[0]));}
function dispatchResourceContentEvent(message){this._fire(new Resource(message.arguments[0]),message.arguments[1]);}
this.onResourceAdded=new EventSink(events.ResourceAdded,dispatchResourceEvent);this.onResourceContentCommitted=new EventSink(events.ResourceContentCommitted,dispatchResourceContentEvent);}
InspectedWindow.prototype={reload:function(optionsOrUserAgent){let options=null;if(typeof optionsOrUserAgent==='object'){options=optionsOrUserAgent;}else if(typeof optionsOrUserAgent==='string'){options={userAgent:optionsOrUserAgent};console.warn('Passing userAgent as string parameter to inspectedWindow.reload() is deprecated. '+'Use inspectedWindow.reload({ userAgent: value}) instead.');}
extensionServer.sendRequest({command:commands.Reload,options:options});},eval:function(expression,evaluateOptions){const callback=extractCallbackArgument(arguments);function callbackWrapper(result){if(result.isError||result.isException){callback(undefined,result);}else{callback(result.value);}}
const request={command:commands.EvaluateOnInspectedPage,expression:expression};if(typeof evaluateOptions==='object'){request.evaluateOptions=evaluateOptions;}
extensionServer.sendRequest(request,callback&&callbackWrapper);return null;},getResources:function(callback){function wrapResource(resourceData){return new Resource(resourceData);}
function callbackWrapper(resources){callback(resources.map(wrapResource));}
extensionServer.sendRequest({command:commands.GetPageResources},callback&&callbackWrapper);}};function ResourceImpl(resourceData){this._url=resourceData.url;this._type=resourceData.type;}
ResourceImpl.prototype={get url(){return this._url;},get type(){return this._type;},getContent:function(callback){function callbackWrapper(response){callback(response.content,response.encoding);}
extensionServer.sendRequest({command:commands.GetResourceContent,url:this._url},callback&&callbackWrapper);},setContent:function(content,commit,callback){extensionServer.sendRequest({command:commands.SetResourceContent,url:this._url,content:content,commit:commit},callback);}};function getTabId(){return inspectedTabId;}
let keyboardEventRequestQueue=[];let forwardTimer=null;function forwardKeyboardEvent(event){const focused=document.activeElement;if(focused){const isInput=focused.nodeName==='INPUT'||focused.nodeName==='TEXTAREA';if(isInput&&!(event.ctrlKey||event.altKey||event.metaKey)){return;}}
let modifiers=0;if(event.shiftKey){modifiers|=1;}
if(event.ctrlKey){modifiers|=2;}
if(event.altKey){modifiers|=4;}
if(event.metaKey){modifiers|=8;}
const num=(event.keyCode&255)|(modifiers<<8);if(!keysToForwardSet.has(num)){return;}
event.preventDefault();const requestPayload={eventType:event.type,ctrlKey:event.ctrlKey,altKey:event.altKey,metaKey:event.metaKey,shiftKey:event.shiftKey,keyIdentifier:event.keyIdentifier,key:event.key,code:event.code,location:event.location,keyCode:event.keyCode};keyboardEventRequestQueue.push(requestPayload);if(!forwardTimer){forwardTimer=setTimeout(forwardEventQueue,0);}}
function forwardEventQueue(){forwardTimer=null;const request={command:commands.ForwardKeyboardEvent,entries:keyboardEventRequestQueue};extensionServer.sendRequest(request);keyboardEventRequestQueue=[];}
document.addEventListener('keydown',forwardKeyboardEvent,false);function ExtensionServerClient(){this._callbacks={};this._handlers={};this._lastRequestId=0;this._lastObjectId=0;this.registerHandler('callback',this._onCallback.bind(this));const channel=new MessageChannel();this._port=channel.port1;this._port.addEventListener('message',this._onMessage.bind(this),false);this._port.start();window.parent.postMessage('registerExtension','*',[channel.port2]);}
ExtensionServerClient.prototype={sendRequest:function(message,callback){if(typeof callback==='function'){message.requestId=this._registerCallback(callback);}
this._port.postMessage(message);},hasHandler:function(command){return!!this._handlers[command];},registerHandler:function(command,handler){this._handlers[command]=handler;},unregisterHandler:function(command){delete this._handlers[command];},nextObjectId:function(){return injectedScriptId.toString()+'_'+ ++this._lastObjectId;},_registerCallback:function(callback){const id=++this._lastRequestId;this._callbacks[id]=callback;return id;},_onCallback:function(request){if(request.requestId in this._callbacks){const callback=this._callbacks[request.requestId];delete this._callbacks[request.requestId];callback(request.result);}},_onMessage:function(event){const request=event.data;const handler=this._handlers[request.command];if(handler){handler.call(this,request);}}};function populateInterfaceClass(interfaze,implementation){for(const member in implementation){if(member.charAt(0)==='_'){continue;}
let descriptor=null;for(let owner=implementation;owner&&!descriptor;owner=owner.__proto__){descriptor=Object.getOwnPropertyDescriptor(owner,member);}
if(!descriptor){continue;}
if(typeof descriptor.value==='function'){interfaze[member]=descriptor.value.bind(implementation);}else if(typeof descriptor.get==='function'){interfaze.__defineGetter__(member,descriptor.get.bind(implementation));}else{Object.defineProperty(interfaze,member,descriptor);}}}
const extensionServer=new ExtensionServerClient();const coreAPI=new InspectorExtensionAPI();Object.defineProperty(chrome,'devtools',{value:{},enumerable:true});chrome.devtools.inspectedWindow={};Object.defineProperty(chrome.devtools.inspectedWindow,'tabId',{get:getTabId});chrome.devtools.inspectedWindow.__proto__=coreAPI.inspectedWindow;chrome.devtools.network=coreAPI.network;chrome.devtools.panels=coreAPI.panels;chrome.devtools.panels.themeName=themeName;if(extensionInfo.exposeExperimentalAPIs!==false){chrome.experimental=chrome.experimental||{};chrome.experimental.devtools=chrome.experimental.devtools||{};const properties=Object.getOwnPropertyNames(coreAPI);for(let i=0;i<properties.length;++i){const descriptor=Object.getOwnPropertyDescriptor(coreAPI,properties[i]);if(descriptor){Object.defineProperty(chrome.experimental.devtools,properties[i],descriptor);}}
chrome.experimental.devtools.inspectedWindow=chrome.devtools.inspectedWindow;}
if(extensionInfo.exposeWebInspectorNamespace){window.webInspector=coreAPI;}
testHook(extensionServer,coreAPI);};self.buildExtensionAPIInjectedScript=function(extensionInfo,inspectedTabId,themeName,keysToForward,testHook){const argumentsJSON=[extensionInfo,inspectedTabId||null,themeName,keysToForward].map(_=>JSON.stringify(_)).join(',');if(!testHook){testHook=()=>{};}
return'(function(injectedScriptId){ '+defineCommonExtensionSymbols.toString()+';'+'('+self.injectedExtensionAPI.toString()+')('+argumentsJSON+','+testHook+', injectedScriptId);'+'})';};self.Extensions=self.Extensions||{};Extensions=Extensions||{};Extensions.extensionAPI={};defineCommonExtensionSymbols(Extensions.extensionAPI);export default class ExtensionPanel extends UI.Panel{constructor(server,panelName,id,pageURL){super(panelName);this._server=server;this._id=id;this.setHideOnDetach();this._panelToolbar=new UI.Toolbar('hidden',this.element);this._searchableView=new UI.SearchableView(this);this._searchableView.show(this.element);const extensionView=new Extensions.ExtensionView(server,this._id,pageURL,'extension');extensionView.show(this._searchableView.element);}
addToolbarItem(item){this._panelToolbar.element.classList.remove('hidden');this._panelToolbar.appendToolbarItem(item);}
searchCanceled(){this._server.notifySearchAction(this._id,Extensions.extensionAPI.panels.SearchAction.CancelSearch);this._searchableView.updateSearchMatchesCount(0);}
searchableView(){return this._searchableView;}
performSearch(searchConfig,shouldJump,jumpBackwards){const query=searchConfig.query;this._server.notifySearchAction(this._id,Extensions.extensionAPI.panels.SearchAction.PerformSearch,query);}
jumpToNextSearchResult(){this._server.notifySearchAction(this._id,Extensions.extensionAPI.panels.SearchAction.NextSearchResult);}
jumpToPreviousSearchResult(){this._server.notifySearchAction(this._id,Extensions.extensionAPI.panels.SearchAction.PreviousSearchResult);}
supportsCaseSensitiveSearch(){return false;}
supportsRegexSearch(){return false;}}
export class ExtensionButton{constructor(server,id,iconURL,tooltip,disabled){this._id=id;this._toolbarButton=new UI.ToolbarButton('','');this._toolbarButton.addEventListener(UI.ToolbarButton.Events.Click,server.notifyButtonClicked.bind(server,this._id));this.update(iconURL,tooltip,disabled);}
update(iconURL,tooltip,disabled){if(typeof iconURL==='string'){this._toolbarButton.setBackgroundImage(iconURL);}
if(typeof tooltip==='string'){this._toolbarButton.setTitle(tooltip);}
if(typeof disabled==='boolean'){this._toolbarButton.setEnabled(!disabled);}}
toolbarButton(){return this._toolbarButton;}}
export class ExtensionSidebarPane extends UI.SimpleView{constructor(server,panelName,title,id){super(title);this.element.classList.add('fill');this._panelName=panelName;this._server=server;this._id=id;}
id(){return this._id;}
panelName(){return this._panelName;}
setObject(object,title,callback){this._createObjectPropertiesView();this._setObject(SDK.RemoteObject.fromLocalObject(object),title,callback);}
setExpression(expression,title,evaluateOptions,securityOrigin,callback){this._createObjectPropertiesView();this._server.evaluate(expression,true,false,evaluateOptions,securityOrigin,this._onEvaluate.bind(this,title,callback));}
setPage(url){if(this._objectPropertiesView){this._objectPropertiesView.detach();delete this._objectPropertiesView;}
if(this._extensionView){this._extensionView.detach(true);}
this._extensionView=new Extensions.ExtensionView(this._server,this._id,url,'extension fill');this._extensionView.show(this.element);if(!this.element.style.height){this.setHeight('150px');}}
setHeight(height){this.element.style.height=height;}
_onEvaluate(title,callback,error,result,wasThrown){if(error||!result){callback(error.toString());}else{this._setObject(result,title,callback);}}
_createObjectPropertiesView(){if(this._objectPropertiesView){return;}
if(this._extensionView){this._extensionView.detach(true);delete this._extensionView;}
this._objectPropertiesView=new Extensions.ExtensionNotifierView(this._server,this._id);this._objectPropertiesView.show(this.element);}
_setObject(object,title,callback){if(!this._objectPropertiesView){callback('operation cancelled');return;}
this._objectPropertiesView.element.removeChildren();UI.Renderer.render(object,{title,editable:false}).then(result=>{if(!result){callback();return;}
if(result.tree&&result.tree.firstChild()){result.tree.firstChild().expand();}
this._objectPropertiesView.element.appendChild(result.node);callback();});}}
self.Extensions=self.Extensions||{};Extensions=Extensions||{};Extensions.ExtensionPanel=ExtensionPanel;Extensions.ExtensionButton=ExtensionButton;Extensions.ExtensionSidebarPane=ExtensionSidebarPane;export default class ExtensionServer extends Common.Object{constructor(){super();this._clientObjects={};this._handlers={};this._subscribers={};this._subscriptionStartHandlers={};this._subscriptionStopHandlers={};this._extraHeaders={};this._requests={};this._lastRequestId=0;this._registeredExtensions={};this._status=new ExtensionStatus();this._sidebarPanes=[];this._traceProviders=[];this._traceSessions=new Map();const commands=Extensions.extensionAPI.Commands;this._registerHandler(commands.AddRequestHeaders,this._onAddRequestHeaders.bind(this));this._registerHandler(commands.AddTraceProvider,this._onAddTraceProvider.bind(this));this._registerHandler(commands.ApplyStyleSheet,this._onApplyStyleSheet.bind(this));this._registerHandler(commands.CompleteTraceSession,this._onCompleteTraceSession.bind(this));this._registerHandler(commands.CreatePanel,this._onCreatePanel.bind(this));this._registerHandler(commands.CreateSidebarPane,this._onCreateSidebarPane.bind(this));this._registerHandler(commands.CreateToolbarButton,this._onCreateToolbarButton.bind(this));this._registerHandler(commands.EvaluateOnInspectedPage,this._onEvaluateOnInspectedPage.bind(this));this._registerHandler(commands.ForwardKeyboardEvent,this._onForwardKeyboardEvent.bind(this));this._registerHandler(commands.GetHAR,this._onGetHAR.bind(this));this._registerHandler(commands.GetPageResources,this._onGetPageResources.bind(this));this._registerHandler(commands.GetRequestContent,this._onGetRequestContent.bind(this));this._registerHandler(commands.GetResourceContent,this._onGetResourceContent.bind(this));this._registerHandler(commands.Reload,this._onReload.bind(this));this._registerHandler(commands.SetOpenResourceHandler,this._onSetOpenResourceHandler.bind(this));this._registerHandler(commands.SetResourceContent,this._onSetResourceContent.bind(this));this._registerHandler(commands.SetSidebarHeight,this._onSetSidebarHeight.bind(this));this._registerHandler(commands.SetSidebarContent,this._onSetSidebarContent.bind(this));this._registerHandler(commands.SetSidebarPage,this._onSetSidebarPage.bind(this));this._registerHandler(commands.ShowPanel,this._onShowPanel.bind(this));this._registerHandler(commands.Subscribe,this._onSubscribe.bind(this));this._registerHandler(commands.OpenResource,this._onOpenResource.bind(this));this._registerHandler(commands.Unsubscribe,this._onUnsubscribe.bind(this));this._registerHandler(commands.UpdateButton,this._onUpdateButton.bind(this));window.addEventListener('message',this._onWindowMessage.bind(this),false);const existingTabId=window.DevToolsAPI&&window.DevToolsAPI.getInspectedTabId&&window.DevToolsAPI.getInspectedTabId();if(existingTabId){this._setInspectedTabId({data:existingTabId});}
Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.SetInspectedTabId,this._setInspectedTabId,this);this._initExtensions();}
initializeExtensions(){Host.InspectorFrontendHost.setAddExtensionCallback(this._addExtension.bind(this));}
hasExtensions(){return!!Object.keys(this._registeredExtensions).length;}
notifySearchAction(panelId,action,searchString){this._postNotification(Extensions.extensionAPI.Events.PanelSearch+panelId,action,searchString);}
notifyViewShown(identifier,frameIndex){this._postNotification(Extensions.extensionAPI.Events.ViewShown+identifier,frameIndex);}
notifyViewHidden(identifier){this._postNotification(Extensions.extensionAPI.Events.ViewHidden+identifier);}
notifyButtonClicked(identifier){this._postNotification(Extensions.extensionAPI.Events.ButtonClicked+identifier);}
_inspectedURLChanged(event){if(event.data!==SDK.targetManager.mainTarget()){return;}
this._requests={};const url=event.data.inspectedURL();this._postNotification(Extensions.extensionAPI.Events.InspectedURLChanged,url);}
startTraceRecording(providerId,sessionId,session){this._traceSessions.set(sessionId,session);this._postNotification('trace-recording-started-'+providerId,sessionId);}
stopTraceRecording(providerId){this._postNotification('trace-recording-stopped-'+providerId);}
hasSubscribers(type){return!!this._subscribers[type];}
_postNotification(type,vararg){const subscribers=this._subscribers[type];if(!subscribers){return;}
const message={command:'notify-'+type,arguments:Array.prototype.slice.call(arguments,1)};for(let i=0;i<subscribers.length;++i){subscribers[i].postMessage(message);}}
_onSubscribe(message,port){const subscribers=this._subscribers[message.type];if(subscribers){subscribers.push(port);}else{this._subscribers[message.type]=[port];if(this._subscriptionStartHandlers[message.type]){this._subscriptionStartHandlers[message.type]();}}}
_onUnsubscribe(message,port){const subscribers=this._subscribers[message.type];if(!subscribers){return;}
subscribers.remove(port);if(!subscribers.length){delete this._subscribers[message.type];if(this._subscriptionStopHandlers[message.type]){this._subscriptionStopHandlers[message.type]();}}}
_onAddRequestHeaders(message){const id=message.extensionId;if(typeof id!=='string'){return this._status.E_BADARGTYPE('extensionId',typeof id,'string');}
let extensionHeaders=this._extraHeaders[id];if(!extensionHeaders){extensionHeaders={};this._extraHeaders[id]=extensionHeaders;}
for(const name in message.headers){extensionHeaders[name]=message.headers[name];}
const allHeaders=({});for(const extension in this._extraHeaders){const headers=this._extraHeaders[extension];for(const name in headers){if(typeof headers[name]==='string'){allHeaders[name]=headers[name];}}}
SDK.multitargetNetworkManager.setExtraHTTPHeaders(allHeaders);}
_onApplyStyleSheet(message){if(!Root.Runtime.experiments.isEnabled('applyCustomStylesheet')){return;}
const styleSheet=createElement('style');styleSheet.textContent=message.styleSheet;document.head.appendChild(styleSheet);UI.themeSupport.addCustomStylesheet(message.styleSheet);for(let node=document.body;node;node=node.traverseNextNode(document.body)){if(node instanceof ShadowRoot){UI.themeSupport.injectCustomStyleSheets(node);}}}
_onCreatePanel(message,port){const id=message.id;if(id in this._clientObjects||UI.inspectorView.hasPanel(id)){return this._status.E_EXISTS(id);}
const page=this._expandResourcePath(port._extensionOrigin,message.page);let persistentId=port._extensionOrigin+message.title;persistentId=persistentId.replace(/\s/g,'');const panelView=new ExtensionServerPanelView(persistentId,message.title,new Extensions.ExtensionPanel(this,persistentId,id,page));this._clientObjects[id]=panelView;UI.inspectorView.addPanel(panelView);return this._status.OK();}
_onShowPanel(message){let panelViewId=message.id;const panelView=this._clientObjects[message.id];if(panelView&&panelView instanceof ExtensionServerPanelView){panelViewId=panelView.viewId();}
UI.inspectorView.showPanel(panelViewId);}
_onCreateToolbarButton(message,port){const panelView=this._clientObjects[message.panel];if(!panelView||!(panelView instanceof ExtensionServerPanelView)){return this._status.E_NOTFOUND(message.panel);}
const button=new Extensions.ExtensionButton(this,message.id,this._expandResourcePath(port._extensionOrigin,message.icon),message.tooltip,message.disabled);this._clientObjects[message.id]=button;panelView.widget().then(appendButton);function appendButton(panel){(panel).addToolbarItem(button.toolbarButton());}
return this._status.OK();}
_onUpdateButton(message,port){const button=this._clientObjects[message.id];if(!button||!(button instanceof Extensions.ExtensionButton)){return this._status.E_NOTFOUND(message.id);}
button.update(this._expandResourcePath(port._extensionOrigin,message.icon),message.tooltip,message.disabled);return this._status.OK();}
_onCompleteTraceSession(message){const session=this._traceSessions.get(message.id);if(!session){return this._status.E_NOTFOUND(message.id);}
this._traceSessions.delete(message.id);session.complete(message.url,message.timeOffset);}
_onCreateSidebarPane(message){if(message.panel!=='elements'&&message.panel!=='sources'){return this._status.E_NOTFOUND(message.panel);}
const id=message.id;const sidebar=new Extensions.ExtensionSidebarPane(this,message.panel,message.title,id);this._sidebarPanes.push(sidebar);this._clientObjects[id]=sidebar;this.dispatchEventToListeners(Events.SidebarPaneAdded,sidebar);return this._status.OK();}
sidebarPanes(){return this._sidebarPanes;}
_onSetSidebarHeight(message){const sidebar=this._clientObjects[message.id];if(!sidebar){return this._status.E_NOTFOUND(message.id);}
sidebar.setHeight(message.height);return this._status.OK();}
_onSetSidebarContent(message,port){const sidebar=this._clientObjects[message.id];if(!sidebar){return this._status.E_NOTFOUND(message.id);}
function callback(error){const result=error?this._status.E_FAILED(error):this._status.OK();this._dispatchCallback(message.requestId,port,result);}
if(message.evaluateOnPage){return sidebar.setExpression(message.expression,message.rootTitle,message.evaluateOptions,port._extensionOrigin,callback.bind(this));}
sidebar.setObject(message.expression,message.rootTitle,callback.bind(this));}
_onSetSidebarPage(message,port){const sidebar=this._clientObjects[message.id];if(!sidebar){return this._status.E_NOTFOUND(message.id);}
sidebar.setPage(this._expandResourcePath(port._extensionOrigin,message.page));}
_onOpenResource(message){const uiSourceCode=Workspace.workspace.uiSourceCodeForURL(message.url);if(uiSourceCode){Common.Revealer.reveal(uiSourceCode.uiLocation(message.lineNumber,0));return this._status.OK();}
const resource=Bindings.resourceForURL(message.url);if(resource){Common.Revealer.reveal(resource);return this._status.OK();}
const request=SDK.networkLog.requestForURL(message.url);if(request){Common.Revealer.reveal(request);return this._status.OK();}
return this._status.E_NOTFOUND(message.url);}
_onSetOpenResourceHandler(message,port){const name=this._registeredExtensions[port._extensionOrigin].name||('Extension '+port._extensionOrigin);if(message.handlerPresent){Components.Linkifier.registerLinkHandler(name,this._handleOpenURL.bind(this,port));}else{Components.Linkifier.unregisterLinkHandler(name);}}
_handleOpenURL(port,contentProvider,lineNumber){port.postMessage({command:'open-resource',resource:this._makeResource(contentProvider),lineNumber:lineNumber+1});}
_onReload(message){const options=(message.options||{});SDK.multitargetNetworkManager.setUserAgentOverride(typeof options.userAgent==='string'?options.userAgent:'');let injectedScript;if(options.injectedScript){injectedScript='(function(){'+options.injectedScript+'})()';}
SDK.ResourceTreeModel.reloadAllPages(!!options.ignoreCache,injectedScript);return this._status.OK();}
_onEvaluateOnInspectedPage(message,port){function callback(error,object,wasThrown){let result;if(error||!object){result=this._status.E_PROTOCOLERROR(error.toString());}else if(wasThrown){result={isException:true,value:object.description};}else{result={value:object.value};}
this._dispatchCallback(message.requestId,port,result);}
return this.evaluate(message.expression,true,true,message.evaluateOptions,port._extensionOrigin,callback.bind(this));}
async _onGetHAR(){const requests=SDK.networkLog.requests();const harLog=await SDK.HARLog.build(requests);for(let i=0;i<harLog.entries.length;++i){harLog.entries[i]._requestId=this._requestId(requests[i]);}
return harLog;}
_makeResource(contentProvider){return{url:contentProvider.contentURL(),type:contentProvider.contentType().name()};}
_onGetPageResources(){const resources=new Map();function pushResourceData(contentProvider){if(!resources.has(contentProvider.contentURL())){resources.set(contentProvider.contentURL(),this._makeResource(contentProvider));}}
let uiSourceCodes=Workspace.workspace.uiSourceCodesForProjectType(Workspace.projectTypes.Network);uiSourceCodes=uiSourceCodes.concat(Workspace.workspace.uiSourceCodesForProjectType(Workspace.projectTypes.ContentScripts));uiSourceCodes.forEach(pushResourceData.bind(this));for(const resourceTreeModel of SDK.targetManager.models(SDK.ResourceTreeModel)){resourceTreeModel.forAllResources(pushResourceData.bind(this));}
return resources.valuesArray();}
async _getResourceContent(contentProvider,message,port){const{content}=await contentProvider.requestContent();const encoded=await contentProvider.contentEncoded();this._dispatchCallback(message.requestId,port,{encoding:encoded?'base64':'',content:content});}
_onGetRequestContent(message,port){const request=this._requestById(message.id);if(!request){return this._status.E_NOTFOUND(message.id);}
this._getResourceContent(request,message,port);}
_onGetResourceContent(message,port){const url=(message.url);const contentProvider=Workspace.workspace.uiSourceCodeForURL(url)||Bindings.resourceForURL(url);if(!contentProvider){return this._status.E_NOTFOUND(url);}
this._getResourceContent(contentProvider,message,port);}
_onSetResourceContent(message,port){function callbackWrapper(error){const response=error?this._status.E_FAILED(error):this._status.OK();this._dispatchCallback(message.requestId,port,response);}
const url=(message.url);const uiSourceCode=Workspace.workspace.uiSourceCodeForURL(url);if(!uiSourceCode||!uiSourceCode.contentType().isDocumentOrScriptOrStyleSheet()){const resource=SDK.ResourceTreeModel.resourceForURL(url);if(!resource){return this._status.E_NOTFOUND(url);}
return this._status.E_NOTSUPPORTED('Resource is not editable');}
uiSourceCode.setWorkingCopy(message.content);if(message.commit){uiSourceCode.commitWorkingCopy();}
callbackWrapper.call(this,null);}
_requestId(request){if(!request._extensionRequestId){request._extensionRequestId=++this._lastRequestId;this._requests[request._extensionRequestId]=request;}
return request._extensionRequestId;}
_requestById(id){return this._requests[id];}
_onAddTraceProvider(message,port){const provider=new Extensions.ExtensionTraceProvider(port._extensionOrigin,message.id,message.categoryName,message.categoryTooltip);this._clientObjects[message.id]=provider;this._traceProviders.push(provider);this.dispatchEventToListeners(Events.TraceProviderAdded,provider);}
traceProviders(){return this._traceProviders;}
_onForwardKeyboardEvent(message){message.entries.forEach(handleEventEntry);function handleEventEntry(entry){const event=new window.KeyboardEvent(entry.eventType,{key:entry.key,code:entry.code,keyCode:entry.keyCode,location:entry.location,ctrlKey:entry.ctrlKey,altKey:entry.altKey,shiftKey:entry.shiftKey,metaKey:entry.metaKey});event.__keyCode=keyCodeForEntry(entry);document.dispatchEvent(event);}
function keyCodeForEntry(entry){let keyCode=entry.keyCode;if(!keyCode){if(entry.key==='Escape'){keyCode=27;}}
return keyCode||0;}}
_dispatchCallback(requestId,port,result){if(requestId){port.postMessage({command:'callback',requestId:requestId,result:result});}}
_initExtensions(){this._registerAutosubscriptionHandler(Extensions.extensionAPI.Events.ResourceAdded,Workspace.workspace,Workspace.Workspace.Events.UISourceCodeAdded,this._notifyResourceAdded);this._registerAutosubscriptionTargetManagerHandler(Extensions.extensionAPI.Events.NetworkRequestFinished,SDK.NetworkManager,SDK.NetworkManager.Events.RequestFinished,this._notifyRequestFinished);function onElementsSubscriptionStarted(){UI.context.addFlavorChangeListener(SDK.DOMNode,this._notifyElementsSelectionChanged,this);}
function onElementsSubscriptionStopped(){UI.context.removeFlavorChangeListener(SDK.DOMNode,this._notifyElementsSelectionChanged,this);}
this._registerSubscriptionHandler(Extensions.extensionAPI.Events.PanelObjectSelected+'elements',onElementsSubscriptionStarted.bind(this),onElementsSubscriptionStopped.bind(this));this._registerResourceContentCommittedHandler(this._notifyUISourceCodeContentCommitted);SDK.targetManager.addEventListener(SDK.TargetManager.Events.InspectedURLChanged,this._inspectedURLChanged,this);}
_notifyResourceAdded(event){const uiSourceCode=(event.data);this._postNotification(Extensions.extensionAPI.Events.ResourceAdded,this._makeResource(uiSourceCode));}
_notifyUISourceCodeContentCommitted(event){const uiSourceCode=(event.data.uiSourceCode);const content=(event.data.content);this._postNotification(Extensions.extensionAPI.Events.ResourceContentCommitted,this._makeResource(uiSourceCode),content);}
async _notifyRequestFinished(event){const request=(event.data);const entry=await SDK.HARLog.Entry.build(request);this._postNotification(Extensions.extensionAPI.Events.NetworkRequestFinished,this._requestId(request),entry);}
_notifyElementsSelectionChanged(){this._postNotification(Extensions.extensionAPI.Events.PanelObjectSelected+'elements');}
sourceSelectionChanged(url,range){this._postNotification(Extensions.extensionAPI.Events.PanelObjectSelected+'sources',{startLine:range.startLine,startColumn:range.startColumn,endLine:range.endLine,endColumn:range.endColumn,url:url,});}
_setInspectedTabId(event){this._inspectedTabId=(event.data);}
_addExtension(extensionInfo){const urlOriginRegExp=new RegExp('([^:]+:\/\/[^/]*)\/');const startPage=extensionInfo.startPage;const name=extensionInfo.name;try{const originMatch=urlOriginRegExp.exec(startPage);if(!originMatch){console.error('Skipping extension with invalid URL: '+startPage);return false;}
const extensionOrigin=originMatch[1];if(!this._registeredExtensions[extensionOrigin]){const injectedAPI=self.buildExtensionAPIInjectedScript(extensionInfo,this._inspectedTabId,UI.themeSupport.themeName(),UI.shortcutRegistry.globalShortcutKeys(),Extensions.extensionServer['_extensionAPITestHook']);Host.InspectorFrontendHost.setInjectedScriptForOrigin(extensionOrigin,injectedAPI);this._registeredExtensions[extensionOrigin]={name:name};}
const iframe=createElement('iframe');iframe.src=startPage;iframe.style.display='none';document.body.appendChild(iframe);}catch(e){console.error('Failed to initialize extension '+startPage+':'+e);return false;}
return true;}
_registerExtension(origin,port){if(!this._registeredExtensions.hasOwnProperty(origin)){if(origin!==window.location.origin)
{console.error('Ignoring unauthorized client request from '+origin);}
return;}
port._extensionOrigin=origin;port.addEventListener('message',this._onmessage.bind(this),false);port.start();}
_onWindowMessage(event){if(event.data==='registerExtension'){this._registerExtension(event.origin,event.ports[0]);}}
async _onmessage(event){const message=event.data;let result;if(message.command in this._handlers){result=await this._handlers[message.command](message,event.target);}else{result=this._status.E_NOTSUPPORTED(message.command);}
if(result&&message.requestId){this._dispatchCallback(message.requestId,event.target,result);}}
_registerHandler(command,callback){console.assert(command);this._handlers[command]=callback;}
_registerSubscriptionHandler(eventTopic,onSubscribeFirst,onUnsubscribeLast){this._subscriptionStartHandlers[eventTopic]=onSubscribeFirst;this._subscriptionStopHandlers[eventTopic]=onUnsubscribeLast;}
_registerAutosubscriptionHandler(eventTopic,eventTarget,frontendEventType,handler){this._registerSubscriptionHandler(eventTopic,eventTarget.addEventListener.bind(eventTarget,frontendEventType,handler,this),eventTarget.removeEventListener.bind(eventTarget,frontendEventType,handler,this));}
_registerAutosubscriptionTargetManagerHandler(eventTopic,modelClass,frontendEventType,handler){this._registerSubscriptionHandler(eventTopic,SDK.targetManager.addModelListener.bind(SDK.targetManager,modelClass,frontendEventType,handler,this),SDK.targetManager.removeModelListener.bind(SDK.targetManager,modelClass,frontendEventType,handler,this));}
_registerResourceContentCommittedHandler(handler){function addFirstEventListener(){Workspace.workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyCommittedByUser,handler,this);Workspace.workspace.setHasResourceContentTrackingExtensions(true);}
function removeLastEventListener(){Workspace.workspace.setHasResourceContentTrackingExtensions(false);Workspace.workspace.removeEventListener(Workspace.Workspace.Events.WorkingCopyCommittedByUser,handler,this);}
this._registerSubscriptionHandler(Extensions.extensionAPI.Events.ResourceContentCommitted,addFirstEventListener.bind(this),removeLastEventListener.bind(this));}
_expandResourcePath(extensionPath,resourcePath){if(!resourcePath){return;}
return extensionPath+this._normalizePath(resourcePath);}
_normalizePath(path){const source=path.split('/');const result=[];for(let i=0;i<source.length;++i){if(source[i]==='.'){continue;}
if(source[i]===''){continue;}
if(source[i]==='..'){result.pop();}else{result.push(source[i]);}}
return'/'+result.join('/');}
evaluate(expression,exposeCommandLineAPI,returnByValue,options,securityOrigin,callback){let context;function resolveURLToFrame(url){let found;function hasMatchingURL(frame){found=(frame.url===url)?frame:null;return found;}
SDK.ResourceTreeModel.frames().some(hasMatchingURL);return found;}
options=options||{};let frame;if(options.frameURL){frame=resolveURLToFrame(options.frameURL);}else{const target=SDK.targetManager.mainTarget();const resourceTreeModel=target&&target.model(SDK.ResourceTreeModel);frame=resourceTreeModel&&resourceTreeModel.mainFrame;}
if(!frame){if(options.frameURL){console.warn('evaluate: there is no frame with URL '+options.frameURL);}else{console.warn('evaluate: the main frame is not yet available');}
return this._status.E_NOTFOUND(options.frameURL||'<top>');}
let contextSecurityOrigin;if(options.useContentScriptContext){contextSecurityOrigin=securityOrigin;}else if(options.scriptExecutionContext){contextSecurityOrigin=options.scriptExecutionContext;}
const runtimeModel=frame.resourceTreeModel().target().model(SDK.RuntimeModel);const executionContexts=runtimeModel?runtimeModel.executionContexts():[];if(contextSecurityOrigin){for(let i=0;i<executionContexts.length;++i){const executionContext=executionContexts[i];if(executionContext.frameId===frame.id&&executionContext.origin===contextSecurityOrigin&&!executionContext.isDefault){context=executionContext;}}
if(!context){console.warn('The JavaScript context '+contextSecurityOrigin+' was not found in the frame '+frame.url);return this._status.E_NOTFOUND(contextSecurityOrigin);}}else{for(let i=0;i<executionContexts.length;++i){const executionContext=executionContexts[i];if(executionContext.frameId===frame.id&&executionContext.isDefault){context=executionContext;}}
if(!context){return this._status.E_FAILED(frame.url+' has no execution context');}}
context.evaluate({expression:expression,objectGroup:'extension',includeCommandLineAPI:exposeCommandLineAPI,silent:true,returnByValue:returnByValue,generatePreview:false},false,false).then(onEvaluate);function onEvaluate(result){if(result.error){callback(result.error,null,false);return;}
callback(null,result.object||null,!!result.exceptionDetails);}}}
export const Events={SidebarPaneAdded:Symbol('SidebarPaneAdded'),TraceProviderAdded:Symbol('TraceProviderAdded')};class ExtensionServerPanelView extends UI.SimpleView{constructor(name,title,panel){super(title);this._name=name;this._panel=panel;}
viewId(){return this._name;}
widget(){return(Promise.resolve(this._panel));}}
export class ExtensionStatus{constructor(){function makeStatus(code,description){const details=Array.prototype.slice.call(arguments,2);const status={code:code,description:description,details:details};if(code!=='OK'){status.isError=true;console.error('Extension server error: '+String.vsprintf(description,details));}
return status;}
this.OK=makeStatus.bind(null,'OK','OK');this.E_EXISTS=makeStatus.bind(null,'E_EXISTS','Object already exists: %s');this.E_BADARG=makeStatus.bind(null,'E_BADARG','Invalid argument %s: %s');this.E_BADARGTYPE=makeStatus.bind(null,'E_BADARGTYPE','Invalid type for argument %s: got %s, expected %s');this.E_NOTFOUND=makeStatus.bind(null,'E_NOTFOUND','Object not found: %s');this.E_NOTSUPPORTED=makeStatus.bind(null,'E_NOTSUPPORTED','Object does not support requested operation: %s');this.E_PROTOCOLERROR=makeStatus.bind(null,'E_PROTOCOLERROR','Inspector protocol error: %s');this.E_FAILED=makeStatus.bind(null,'E_FAILED','Operation failed: %s');}}
self.Extensions=self.Extensions||{};Extensions=Extensions||{};Extensions.ExtensionServer=ExtensionServer;Extensions.ExtensionServer.Events=Events;Extensions.ExtensionStatus=ExtensionStatus;Extensions.ExtensionStatus.Record;Extensions.extensionServer;export default class ExtensionTraceProvider{constructor(extensionOrigin,id,categoryName,categoryTooltip){this._extensionOrigin=extensionOrigin;this._id=id;this._categoryName=categoryName;this._categoryTooltip=categoryTooltip;}
start(session){const sessionId=String(++_lastSessionId);Extensions.extensionServer.startTraceRecording(this._id,sessionId,session);}
stop(){Extensions.extensionServer.stopTraceRecording(this._id);}
shortDisplayName(){return this._categoryName;}
longDisplayName(){return this._categoryTooltip;}
persistentIdentifier(){return`${this._extensionOrigin}/${this._categoryName}`;}}
let _lastSessionId=0;export class TracingSession{complete(url,timeOffsetMicroseconds){}}
self.Extensions=self.Extensions||{};Extensions=Extensions||{};Extensions.ExtensionTraceProvider=ExtensionTraceProvider;Extensions.TracingSession=TracingSession;export default class ExtensionView extends UI.Widget{constructor(server,id,src,className){super();this.setHideOnDetach();this.element.className='vbox flex-auto';this.element.tabIndex=-1;this._server=server;this._id=id;this._iframe=createElement('iframe');this._iframe.addEventListener('load',this._onLoad.bind(this),false);this._iframe.src=src;this._iframe.className=className;this.setDefaultFocusedElement(this.element);this.element.appendChild(this._iframe);}
wasShown(){if(typeof this._frameIndex==='number'){this._server.notifyViewShown(this._id,this._frameIndex);}}
willHide(){if(typeof this._frameIndex==='number'){this._server.notifyViewHidden(this._id);}}
_onLoad(){const frames=window.frames;this._frameIndex=Array.prototype.indexOf.call(frames,this._iframe.contentWindow);if(this.isShowing()){this._server.notifyViewShown(this._id,this._frameIndex);}}}
export class ExtensionNotifierView extends UI.VBox{constructor(server,id){super();this._server=server;this._id=id;}
wasShown(){this._server.notifyViewShown(this._id);}
willHide(){this._server.notifyViewHidden(this._id);}}
self.Extensions=self.Extensions||{};Extensions=Extensions||{};Extensions.ExtensionView=ExtensionView;Extensions.ExtensionNotifierView=ExtensionNotifierView;import*as LogManager from'./LogManager.js';export{LogManager,};export default class LogManager{constructor(){SDK.targetManager.observeModels(SDK.LogModel,this);}
modelAdded(logModel){const eventListeners=[];eventListeners.push(logModel.addEventListener(SDK.LogModel.Events.EntryAdded,this._logEntryAdded,this));logModel[_eventSymbol]=eventListeners;}
modelRemoved(logModel){Common.EventTarget.removeEventListeners(logModel[_eventSymbol]);}
_logEntryAdded(event){const data=(event.data);const target=data.logModel.target();const consoleMessage=new SDK.ConsoleMessage(target.model(SDK.RuntimeModel),data.entry.source,data.entry.level,data.entry.text,undefined,data.entry.url,data.entry.lineNumber,undefined,[data.entry.text,...(data.entry.args||[])],data.entry.stackTrace,data.entry.timestamp,undefined,undefined,data.entry.workerId);if(data.entry.networkRequestId){SDK.networkLog.associateConsoleMessageWithRequest(consoleMessage,data.entry.networkRequestId);}
if(consoleMessage.source===SDK.ConsoleMessage.MessageSource.Worker){const workerId=consoleMessage.workerId||'';if(SDK.targetManager.targetById(workerId)){return;}
setTimeout(()=>{if(!SDK.targetManager.targetById(workerId)){SDK.consoleModel.addMessage(consoleMessage);}},1000);}else{SDK.consoleModel.addMessage(consoleMessage);}}}
const _eventSymbol=Symbol('_events');self.BrowserSDK=self.BrowserSDK||{};BrowserSDK=BrowserSDK||{};BrowserSDK.LogManager=LogManager;new LogManager();import'./PlatformFileSystem.js';import*as Automapping from'./Automapping.js';import*as EditFileSystemView from'./EditFileSystemView.js';import*as FileSystemWorkspaceBinding from'./FileSystemWorkspaceBinding.js';import*as IsolatedFileSystem from'./IsolatedFileSystem.js';import*as IsolatedFileSystemManager from'./IsolatedFileSystemManager.js';import*as NetworkPersistenceManager from'./NetworkPersistenceManager.js';import*as PersistenceActions from'./PersistenceActions.js';import*as Persistence from'./PersistenceImpl.js';import*as PersistenceUtils from'./PersistenceUtils.js';import*as PlatformFileSystem from'./PlatformFileSystem.js';import*as WorkspaceSettingsTab from'./WorkspaceSettingsTab.js';export{Automapping,EditFileSystemView,FileSystemWorkspaceBinding,IsolatedFileSystem,IsolatedFileSystemManager,NetworkPersistenceManager,Persistence,PersistenceActions,PersistenceUtils,PlatformFileSystem,WorkspaceSettingsTab,};export default class WorkspaceSettingsTab extends UI.VBox{constructor(){super();this.registerRequiredCSS('persistence/workspaceSettingsTab.css');const header=this.element.createChild('header');header.createChild('h1').createTextChild(Common.UIString('Workspace'));this.containerElement=this.element.createChild('div','settings-container-wrapper').createChild('div','settings-tab settings-content settings-container');Persistence.isolatedFileSystemManager.addEventListener(Persistence.IsolatedFileSystemManager.Events.FileSystemAdded,event=>this._fileSystemAdded((event.data)),this);Persistence.isolatedFileSystemManager.addEventListener(Persistence.IsolatedFileSystemManager.Events.FileSystemRemoved,event=>this._fileSystemRemoved((event.data)),this);const folderExcludePatternInput=this._createFolderExcludePatternInput();folderExcludePatternInput.classList.add('folder-exclude-pattern');this.containerElement.appendChild(folderExcludePatternInput);const div=this.containerElement.createChild('div','settings-info-message');div.createTextChild(Common.UIString('Mappings are inferred automatically.'));this._fileSystemsListContainer=this.containerElement.createChild('div','');const addButton=UI.createTextButton(ls`Add folder\u2026`,this._addFileSystemClicked.bind(this));this.containerElement.appendChild(addButton);this.setDefaultFocusedElement(addButton);this._elementByPath=new Map();this._mappingViewByPath=new Map();const fileSystems=Persistence.isolatedFileSystemManager.fileSystems();for(let i=0;i<fileSystems.length;++i){this._addItem(fileSystems[i]);}}
_createFolderExcludePatternInput(){const p=createElement('p');const labelElement=p.createChild('label');labelElement.textContent=ls`Folder exclude pattern`;const inputElement=UI.createInput('','text');UI.ARIAUtils.bindLabelToControl(labelElement,inputElement);p.appendChild(inputElement);inputElement.style.width='270px';const folderExcludeSetting=Persistence.isolatedFileSystemManager.workspaceFolderExcludePatternSetting();const setValue=UI.bindInput(inputElement,folderExcludeSetting.set.bind(folderExcludeSetting),regexValidator,false);folderExcludeSetting.addChangeListener(()=>setValue.call(null,folderExcludeSetting.get()));setValue(folderExcludeSetting.get());return p;function regexValidator(value){let regex;try{regex=new RegExp(value);}catch(e){}
const valid=!!regex;return{valid};}}
_addItem(fileSystem){if(!(fileSystem instanceof Persistence.IsolatedFileSystem)){return;}
const networkPersistenceProject=Persistence.networkPersistenceManager.project();if(networkPersistenceProject&&Persistence.isolatedFileSystemManager.fileSystem((networkPersistenceProject).fileSystemPath())===fileSystem){return;}
const element=this._renderFileSystem(fileSystem);this._elementByPath.set(fileSystem.path(),element);this._fileSystemsListContainer.appendChild(element);const mappingView=new Persistence.EditFileSystemView(fileSystem.path());this._mappingViewByPath.set(fileSystem.path(),mappingView);mappingView.element.classList.add('file-system-mapping-view');mappingView.show(element);}
_renderFileSystem(fileSystem){const fileSystemPath=fileSystem.path();const lastIndexOfSlash=fileSystemPath.lastIndexOf('/');const folderName=fileSystemPath.substr(lastIndexOfSlash+1);const element=createElementWithClass('div','file-system-container');const header=element.createChild('div','file-system-header');const nameElement=header.createChild('div','file-system-name');nameElement.textContent=folderName;UI.ARIAUtils.markAsHeading(nameElement,2);const path=header.createChild('div','file-system-path');path.textContent=fileSystemPath;path.title=fileSystemPath;const toolbar=new UI.Toolbar('');const button=new UI.ToolbarButton(Common.UIString('Remove'),'largeicon-delete');button.addEventListener(UI.ToolbarButton.Events.Click,this._removeFileSystemClicked.bind(this,fileSystem));toolbar.appendToolbarItem(button);header.appendChild(toolbar.element);return element;}
_removeFileSystemClicked(fileSystem){Persistence.isolatedFileSystemManager.removeFileSystem(fileSystem);}
_addFileSystemClicked(){Persistence.isolatedFileSystemManager.addFileSystem();}
_fileSystemAdded(fileSystem){this._addItem(fileSystem);}
_fileSystemRemoved(fileSystem){const mappingView=this._mappingViewByPath.get(fileSystem.path());if(mappingView){mappingView.dispose();this._mappingViewByPath.delete(fileSystem.path());}
const element=this._elementByPath.get(fileSystem.path());if(element){this._elementByPath.delete(fileSystem.path());element.remove();}}}
self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.WorkspaceSettingsTab=WorkspaceSettingsTab;export default class PlatformFileSystem{constructor(path,type){this._path=path;this._type=type;}
getMetadata(path){return Promise.resolve((null));}
initialFilePaths(){return[];}
initialGitFolders(){return[];}
path(){return this._path;}
embedderPath(){throw new Error('Not implemented');}
type(){return this._type;}
async createFile(path,name){return Promise.resolve(null);}
deleteFile(path){return Promise.resolve(false);}
requestFileBlob(path){return Promise.resolve((null));}
async requestFileContent(path){return{error:ls`Unable to read files with this implementation.`,isEncoded:false};}
setFileContent(path,content,isBase64){throw new Error('Not implemented');}
renameFile(path,newName,callback){callback(false);}
addExcludedFolder(path){}
removeExcludedFolder(path){}
fileSystemRemoved(){}
isFileExcluded(folderPath){return false;}
excludedFolders(){return new Set();}
searchInPath(query,progress){return Promise.resolve([]);}
indexContent(progress){setImmediate(()=>progress.done());}
mimeFromPath(path){throw new Error('Not implemented');}
canExcludeFolder(path){return false;}
contentType(path){throw new Error('Not implemented');}
tooltipForURL(url){throw new Error('Not implemented');}
supportsAutomapping(){throw new Error('Not implemented');}}
self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.PlatformFileSystem=PlatformFileSystem;export default class PersistenceUtils{static tooltipForUISourceCode(uiSourceCode){const binding=Persistence.persistence.binding(uiSourceCode);if(!binding){return'';}
if(uiSourceCode===binding.network){return Persistence.FileSystemWorkspaceBinding.tooltipForUISourceCode(binding.fileSystem);}
if(binding.network.contentType().isFromSourceMap()){return Common.UIString('Linked to source map: %s',binding.network.url().trimMiddle(150));}
return Common.UIString('Linked to %s',binding.network.url().trimMiddle(150));}
static iconForUISourceCode(uiSourceCode){const binding=Persistence.persistence.binding(uiSourceCode);if(binding){if(!binding.fileSystem.url().startsWith('file://')){return null;}
const icon=UI.Icon.create('mediumicon-file-sync');icon.title=PersistenceUtils.tooltipForUISourceCode(binding.network);if(Persistence.networkPersistenceManager.project()===binding.fileSystem.project()){icon.style.filter='hue-rotate(160deg)';}
return icon;}
if(uiSourceCode.project().type()!==Workspace.projectTypes.FileSystem||!uiSourceCode.url().startsWith('file://')){return null;}
const icon=UI.Icon.create('mediumicon-file');icon.title=PersistenceUtils.tooltipForUISourceCode(uiSourceCode);return icon;}}
export class LinkDecorator extends Common.Object{constructor(persistence){super();persistence.addEventListener(Persistence.Persistence.Events.BindingCreated,this._bindingChanged,this);persistence.addEventListener(Persistence.Persistence.Events.BindingRemoved,this._bindingChanged,this);}
_bindingChanged(event){const binding=(event.data);this.dispatchEventToListeners(Components.LinkDecorator.Events.LinkIconChanged,binding.network);}
linkIcon(uiSourceCode){return PersistenceUtils.iconForUISourceCode(uiSourceCode);}}
self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.PersistenceUtils=PersistenceUtils;Persistence.PersistenceUtils.LinkDecorator=LinkDecorator;export default class PersistenceImpl extends Common.Object{constructor(workspace,breakpointManager){super();this._workspace=workspace;this._breakpointManager=breakpointManager;this._filePathPrefixesToBindingCount=new Map();this._subscribedBindingEventListeners=new Platform.Multimap();const linkDecorator=new Persistence.PersistenceUtils.LinkDecorator(this);Components.Linkifier.setLinkDecorator(linkDecorator);this._mapping=new Persistence.Automapping(this._workspace,this._onStatusAdded.bind(this),this._onStatusRemoved.bind(this));}
addNetworkInterceptor(interceptor){this._mapping.addNetworkInterceptor(interceptor);}
refreshAutomapping(){this._mapping.scheduleRemap();}
addBinding(binding){this._innerAddBinding(binding);}
addBindingForTest(binding){this._innerAddBinding(binding);}
removeBinding(binding){this._innerRemoveBinding(binding);}
removeBindingForTest(binding){this._innerRemoveBinding(binding);}
_innerAddBinding(binding){binding.network[_binding]=binding;binding.fileSystem[_binding]=binding;binding.fileSystem.forceLoadOnCheckContent();binding.network.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._onWorkingCopyCommitted,this);binding.fileSystem.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._onWorkingCopyCommitted,this);binding.network.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._onWorkingCopyChanged,this);binding.fileSystem.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._onWorkingCopyChanged,this);this._addFilePathBindingPrefixes(binding.fileSystem.url());this._moveBreakpoints(binding.fileSystem,binding.network);console.assert(!binding.fileSystem.isDirty()||!binding.network.isDirty());if(binding.fileSystem.isDirty()){this._syncWorkingCopy(binding.fileSystem);}else if(binding.network.isDirty()){this._syncWorkingCopy(binding.network);}else if(binding.network.hasCommits()&&binding.network.content()!==binding.fileSystem.content()){binding.network.setWorkingCopy(binding.network.content());this._syncWorkingCopy(binding.network);}
this._notifyBindingEvent(binding.network);this._notifyBindingEvent(binding.fileSystem);this.dispatchEventToListeners(Events.BindingCreated,binding);}
_innerRemoveBinding(binding){if(binding.network[_binding]!==binding){return;}
console.assert(binding.network[_binding]===binding.fileSystem[_binding],'ERROR: inconsistent binding for networkURL '+binding.network.url());binding.network[_binding]=null;binding.fileSystem[_binding]=null;binding.network.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._onWorkingCopyCommitted,this);binding.fileSystem.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._onWorkingCopyCommitted,this);binding.network.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._onWorkingCopyChanged,this);binding.fileSystem.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._onWorkingCopyChanged,this);this._removeFilePathBindingPrefixes(binding.fileSystem.url());this._breakpointManager.copyBreakpoints(binding.network.url(),binding.fileSystem);this._notifyBindingEvent(binding.network);this._notifyBindingEvent(binding.fileSystem);this.dispatchEventToListeners(Events.BindingRemoved,binding);}
_onStatusAdded(status){const binding=new PersistenceBinding(status.network,status.fileSystem);status[_binding]=binding;this._innerAddBinding(binding);}
_onStatusRemoved(status){const binding=(status[_binding]);this._innerRemoveBinding(binding);}
_onWorkingCopyChanged(event){const uiSourceCode=(event.data);this._syncWorkingCopy(uiSourceCode);}
_syncWorkingCopy(uiSourceCode){const binding=uiSourceCode[_binding];if(!binding||binding[_muteWorkingCopy]){return;}
const other=binding.network===uiSourceCode?binding.fileSystem:binding.network;if(!uiSourceCode.isDirty()){binding[_muteWorkingCopy]=true;other.resetWorkingCopy();binding[_muteWorkingCopy]=false;this._contentSyncedForTest();return;}
const target=Bindings.NetworkProject.targetForUISourceCode(binding.network);if(target.type()===SDK.Target.Type.Node){const newContent=uiSourceCode.workingCopy();other.requestContent().then(()=>{const nodeJSContent=PersistenceImpl.rewrapNodeJSContent(other,other.workingCopy(),newContent);setWorkingCopy.call(this,()=>nodeJSContent);});return;}
setWorkingCopy.call(this,()=>uiSourceCode.workingCopy());function setWorkingCopy(workingCopyGetter){binding[_muteWorkingCopy]=true;other.setWorkingCopyGetter(workingCopyGetter);binding[_muteWorkingCopy]=false;this._contentSyncedForTest();}}
_onWorkingCopyCommitted(event){const uiSourceCode=(event.data.uiSourceCode);const newContent=(event.data.content);this.syncContent(uiSourceCode,newContent,event.data.encoded);}
syncContent(uiSourceCode,newContent,encoded){const binding=uiSourceCode[_binding];if(!binding||binding[_muteCommit]){return;}
const other=binding.network===uiSourceCode?binding.fileSystem:binding.network;const target=Bindings.NetworkProject.targetForUISourceCode(binding.network);if(target.type()===SDK.Target.Type.Node){other.requestContent().then(currentContent=>{const nodeJSContent=PersistenceImpl.rewrapNodeJSContent(other,currentContent.content,newContent);setContent.call(this,nodeJSContent);});return;}
setContent.call(this,newContent);function setContent(newContent){binding[_muteCommit]=true;other.setContent(newContent,encoded);binding[_muteCommit]=false;this._contentSyncedForTest();}}
static rewrapNodeJSContent(uiSourceCode,currentContent,newContent){if(uiSourceCode.project().type()===Workspace.projectTypes.FileSystem){if(newContent.startsWith(_NodePrefix)&&newContent.endsWith(_NodeSuffix)){newContent=newContent.substring(_NodePrefix.length,newContent.length-_NodeSuffix.length);}
if(currentContent.startsWith(_NodeShebang)){newContent=_NodeShebang+newContent;}}else{if(newContent.startsWith(_NodeShebang)){newContent=newContent.substring(_NodeShebang.length);}
if(currentContent.startsWith(_NodePrefix)&&currentContent.endsWith(_NodeSuffix)){newContent=_NodePrefix+newContent+_NodeSuffix;}}
return newContent;}
_contentSyncedForTest(){}
_moveBreakpoints(from,to){const breakpoints=this._breakpointManager.breakpointLocationsForUISourceCode(from).map(breakpointLocation=>breakpointLocation.breakpoint);for(const breakpoint of breakpoints){breakpoint.remove(false);this._breakpointManager.setBreakpoint(to,breakpoint.lineNumber(),breakpoint.columnNumber(),breakpoint.condition(),breakpoint.enabled());}}
hasUnsavedCommittedChanges(uiSourceCode){if(this._workspace.hasResourceContentTrackingExtensions()){return false;}
if(uiSourceCode.project().canSetFileContent()){return false;}
if(uiSourceCode[_binding]){return false;}
return!!uiSourceCode.hasCommits();}
binding(uiSourceCode){return uiSourceCode[_binding]||null;}
subscribeForBindingEvent(uiSourceCode,listener){this._subscribedBindingEventListeners.set(uiSourceCode,listener);}
unsubscribeFromBindingEvent(uiSourceCode,listener){this._subscribedBindingEventListeners.delete(uiSourceCode,listener);}
_notifyBindingEvent(uiSourceCode){if(!this._subscribedBindingEventListeners.has(uiSourceCode)){return;}
const listeners=Array.from(this._subscribedBindingEventListeners.get(uiSourceCode));for(const listener of listeners){listener.call(null);}}
fileSystem(uiSourceCode){const binding=this.binding(uiSourceCode);return binding?binding.fileSystem:null;}
network(uiSourceCode){const binding=this.binding(uiSourceCode);return binding?binding.network:null;}
_addFilePathBindingPrefixes(filePath){let relative='';for(const token of filePath.split('/')){relative+=token+'/';const count=this._filePathPrefixesToBindingCount.get(relative)||0;this._filePathPrefixesToBindingCount.set(relative,count+1);}}
_removeFilePathBindingPrefixes(filePath){let relative='';for(const token of filePath.split('/')){relative+=token+'/';const count=this._filePathPrefixesToBindingCount.get(relative);if(count===1){this._filePathPrefixesToBindingCount.delete(relative);}else{this._filePathPrefixesToBindingCount.set(relative,count-1);}}}
filePathHasBindings(filePath){if(!filePath.endsWith('/')){filePath+='/';}
return this._filePathPrefixesToBindingCount.has(filePath);}}
const _binding=Symbol('Persistence.Binding');const _muteCommit=Symbol('Persistence.MuteCommit');const _muteWorkingCopy=Symbol('Persistence.MuteWorkingCopy');const _NodePrefix='(function (exports, require, module, __filename, __dirname) { ';const _NodeSuffix='\n});';const _NodeShebang='#!/usr/bin/env node';export const Events={BindingCreated:Symbol('BindingCreated'),BindingRemoved:Symbol('BindingRemoved')};export class PathEncoder{constructor(){this._encoder=new Common.CharacterIdMap();}
encode(path){return path.split('/').map(token=>this._encoder.toChar(token)).join('');}
decode(path){return path.split('').map(token=>this._encoder.fromChar(token)).join('/');}}
export class PersistenceBinding{constructor(network,fileSystem){this.network=network;this.fileSystem=fileSystem;}}
self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.Persistence=PersistenceImpl;Persistence.Persistence.Events=Events;Persistence.Persistence._NodeShebang=_NodeShebang;Persistence.Persistence._NodePrefix=_NodePrefix;Persistence.Persistence._NodeSuffix=_NodeSuffix;Persistence.PathEncoder=PathEncoder;Persistence.PersistenceBinding=PersistenceBinding;Persistence.persistence;export class ContextMenuProvider{appendApplicableItems(event,contextMenu,target){const contentProvider=(target);async function saveAs(){if(contentProvider instanceof Workspace.UISourceCode){(contentProvider).commitWorkingCopy();}
let content=(await contentProvider.requestContent()).content||'';if(await contentProvider.contentEncoded()){content=window.atob(content);}
const url=contentProvider.contentURL();Workspace.fileManager.save(url,(content),true);Workspace.fileManager.close(url);}
if(contentProvider.contentType().isDocumentOrScriptOrStyleSheet()){contextMenu.saveSection().appendItem(Common.UIString('Save as...'),saveAs);}
const uiSourceCode=Workspace.workspace.uiSourceCodeForURL(contentProvider.contentURL());if(uiSourceCode&&Persistence.networkPersistenceManager.canSaveUISourceCodeForOverrides(uiSourceCode)){contextMenu.saveSection().appendItem(Common.UIString('Save for overrides'),()=>{uiSourceCode.commitWorkingCopy();Persistence.networkPersistenceManager.saveUISourceCodeForOverrides((uiSourceCode));Common.Revealer.reveal(uiSourceCode);});}
const binding=uiSourceCode&&Persistence.persistence.binding(uiSourceCode);const fileURL=binding?binding.fileSystem.contentURL():contentProvider.contentURL();if(fileURL.startsWith('file://')){const path=Common.ParsedURL.urlToPlatformPath(fileURL,Host.isWin());contextMenu.revealSection().appendItem(Common.UIString('Open in containing folder'),()=>Host.InspectorFrontendHost.showItemInFolder(path));}}}
self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.PersistenceActions={};Persistence.PersistenceActions.ContextMenuProvider=ContextMenuProvider;export default class NetworkPersistenceManager extends Common.Object{constructor(workspace){super();this._bindingSymbol=Symbol('NetworkPersistenceBinding');this._originalResponseContentPromiseSymbol=Symbol('OriginalResponsePromise');this._savingSymbol=Symbol('SavingForOverrides');this._enabledSetting=Common.settings.moduleSetting('persistenceNetworkOverridesEnabled');this._enabledSetting.addChangeListener(this._enabledChanged,this);this._workspace=workspace;this._networkUISourceCodeForEncodedPath=new Map();this._interceptionHandlerBound=this._interceptionHandler.bind(this);this._updateInterceptionThrottler=new Common.Throttler(50);this._project=null;this._activeProject=null;this._active=false;this._enabled=false;this._workspace.addEventListener(Workspace.Workspace.Events.ProjectAdded,event=>this._onProjectAdded((event.data)));this._workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved,event=>this._onProjectRemoved((event.data)));Persistence.persistence.addNetworkInterceptor(this._canHandleNetworkUISourceCode.bind(this));this._eventDescriptors=[];this._enabledChanged();}
active(){return this._active;}
project(){return this._project;}
originalContentForUISourceCode(uiSourceCode){if(!uiSourceCode[this._bindingSymbol]){return null;}
const fileSystemUISourceCode=uiSourceCode[this._bindingSymbol].fileSystem;return fileSystemUISourceCode[this._originalResponseContentPromiseSymbol]||null;}
_enabledChanged(){if(this._enabled===this._enabledSetting.get()){return;}
this._enabled=this._enabledSetting.get();if(this._enabled){this._eventDescriptors=[Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRenamed,event=>{const uiSourceCode=(event.data.uiSourceCode);this._onUISourceCodeRemoved(uiSourceCode);this._onUISourceCodeAdded(uiSourceCode);}),Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,event=>this._onUISourceCodeAdded((event.data))),Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved,event=>this._onUISourceCodeRemoved((event.data))),Workspace.workspace.addEventListener(Workspace.Workspace.Events.WorkingCopyCommitted,event=>this._onUISourceCodeWorkingCopyCommitted((event.data.uiSourceCode)))];this._updateActiveProject();}else{Common.EventTarget.removeEventListeners(this._eventDescriptors);this._updateActiveProject();}}
_updateActiveProject(){const wasActive=this._active;this._active=!!(this._enabledSetting.get()&&SDK.targetManager.mainTarget()&&this._project);if(this._active===wasActive){return;}
if(this._active){this._project.uiSourceCodes().forEach(this._filesystemUISourceCodeAdded.bind(this));const networkProjects=this._workspace.projectsForType(Workspace.projectTypes.Network);for(const networkProject of networkProjects){networkProject.uiSourceCodes().forEach(this._networkUISourceCodeAdded.bind(this));}}else if(this._project){this._project.uiSourceCodes().forEach(this._filesystemUISourceCodeRemoved.bind(this));this._networkUISourceCodeForEncodedPath.clear();}
Persistence.persistence.refreshAutomapping();}
_encodedPathFromUrl(url){if(!this._active){return'';}
let urlPath=Common.ParsedURL.urlWithoutHash(url.replace(/^https?:\/\//,''));if(urlPath.endsWith('/')&&urlPath.indexOf('?')===-1){urlPath=urlPath+'index.html';}
let encodedPathParts=encodeUrlPathToLocalPathParts(urlPath);const projectPath=Persistence.FileSystemWorkspaceBinding.fileSystemPath(this._project.id());const encodedPath=encodedPathParts.join('/');if(projectPath.length+encodedPath.length>200){const domain=encodedPathParts[0];const encodedFileName=encodedPathParts[encodedPathParts.length-1];const shortFileName=encodedFileName?encodedFileName.substr(0,10)+'-':'';const extension=Common.ParsedURL.extractExtension(urlPath);const extensionPart=extension?'.'+extension.substr(0,10):'';encodedPathParts=[domain,'longurls',shortFileName+String.hashCode(encodedPath).toString(16)+extensionPart];}
return encodedPathParts.join('/');function encodeUrlPathToLocalPathParts(urlPath){const encodedParts=[];for(const pathPart of fileNamePartsFromUrlPath(urlPath)){if(!pathPart){continue;}
let encodedName=encodeURI(pathPart).replace(/[\/:\?\*]/g,match=>'%'+match[0].charCodeAt(0).toString(16));if(_reservedFileNames.has(encodedName.toLowerCase())){encodedName=encodedName.split('').map(char=>'%'+char.charCodeAt(0).toString(16)).join('');}
const lastChar=encodedName.charAt(encodedName.length-1);if(lastChar==='.'){encodedName=encodedName.substr(0,encodedName.length-1)+'%2e';}
encodedParts.push(encodedName);}
return encodedParts;}
function fileNamePartsFromUrlPath(urlPath){urlPath=Common.ParsedURL.urlWithoutHash(urlPath);const queryIndex=urlPath.indexOf('?');if(queryIndex===-1){return urlPath.split('/');}
if(queryIndex===0){return[urlPath];}
const endSection=urlPath.substr(queryIndex);const parts=urlPath.substr(0,urlPath.length-endSection.length).split('/');parts[parts.length-1]+=endSection;return parts;}}
_decodeLocalPathToUrlPath(path){try{return unescape(path);}catch(e){console.error(e);}
return path;}
_unbind(uiSourceCode){const binding=uiSourceCode[this._bindingSymbol];if(!binding){return;}
delete binding.network[this._bindingSymbol];delete binding.fileSystem[this._bindingSymbol];Persistence.persistence.removeBinding(binding);}
async _bind(networkUISourceCode,fileSystemUISourceCode){if(networkUISourceCode[this._bindingSymbol]){this._unbind(networkUISourceCode);}
if(fileSystemUISourceCode[this._bindingSymbol]){this._unbind(fileSystemUISourceCode);}
const binding=new Persistence.PersistenceBinding(networkUISourceCode,fileSystemUISourceCode);networkUISourceCode[this._bindingSymbol]=binding;fileSystemUISourceCode[this._bindingSymbol]=binding;Persistence.persistence.addBinding(binding);const uiSourceCodeOfTruth=networkUISourceCode[this._savingSymbol]?networkUISourceCode:fileSystemUISourceCode;const[{content},encoded]=await Promise.all([uiSourceCodeOfTruth.requestContent(),uiSourceCodeOfTruth.contentEncoded()]);Persistence.persistence.syncContent(uiSourceCodeOfTruth,content,encoded);}
_onUISourceCodeWorkingCopyCommitted(uiSourceCode){this.saveUISourceCodeForOverrides(uiSourceCode);}
canSaveUISourceCodeForOverrides(uiSourceCode){return this._active&&uiSourceCode.project().type()===Workspace.projectTypes.Network&&!uiSourceCode[this._bindingSymbol]&&!uiSourceCode[this._savingSymbol];}
async saveUISourceCodeForOverrides(uiSourceCode){if(!this.canSaveUISourceCodeForOverrides(uiSourceCode)){return;}
uiSourceCode[this._savingSymbol]=true;let encodedPath=this._encodedPathFromUrl(uiSourceCode.url());const content=(await uiSourceCode.requestContent()).content||'';const encoded=await uiSourceCode.contentEncoded();const lastIndexOfSlash=encodedPath.lastIndexOf('/');const encodedFileName=encodedPath.substr(lastIndexOfSlash+1);encodedPath=encodedPath.substr(0,lastIndexOfSlash);await this._project.createFile(encodedPath,encodedFileName,content,encoded);this._fileCreatedForTest(encodedPath,encodedFileName);uiSourceCode[this._savingSymbol]=false;}
_fileCreatedForTest(path,fileName){}
_patternForFileSystemUISourceCode(uiSourceCode){const relativePathParts=Persistence.FileSystemWorkspaceBinding.relativePath(uiSourceCode);if(relativePathParts.length<2){return'';}
if(relativePathParts[1]==='longurls'&&relativePathParts.length!==2){return'http?://'+relativePathParts[0]+'/*';}
return'http?://'+this._decodeLocalPathToUrlPath(relativePathParts.join('/'));}
_onUISourceCodeAdded(uiSourceCode){this._networkUISourceCodeAdded(uiSourceCode);this._filesystemUISourceCodeAdded(uiSourceCode);}
_canHandleNetworkUISourceCode(uiSourceCode){return this._active&&!uiSourceCode.url().startsWith('snippet://');}
_networkUISourceCodeAdded(uiSourceCode){if(uiSourceCode.project().type()!==Workspace.projectTypes.Network||!this._canHandleNetworkUISourceCode(uiSourceCode)){return;}
const url=Common.ParsedURL.urlWithoutHash(uiSourceCode.url());this._networkUISourceCodeForEncodedPath.set(this._encodedPathFromUrl(url),uiSourceCode);const fileSystemUISourceCode=this._project.uiSourceCodeForURL((this._project).fileSystemPath()+'/'+
this._encodedPathFromUrl(url));if(!fileSystemUISourceCode){return;}
this._bind(uiSourceCode,fileSystemUISourceCode);}
_filesystemUISourceCodeAdded(uiSourceCode){if(!this._active||uiSourceCode.project()!==this._project){return;}
this._updateInterceptionPatterns();const relativePath=Persistence.FileSystemWorkspaceBinding.relativePath(uiSourceCode);const networkUISourceCode=this._networkUISourceCodeForEncodedPath.get(relativePath.join('/'));if(networkUISourceCode){this._bind(networkUISourceCode,uiSourceCode);}}
_updateInterceptionPatterns(){this._updateInterceptionThrottler.schedule(innerUpdateInterceptionPatterns.bind(this));function innerUpdateInterceptionPatterns(){if(!this._active){return SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns([],this._interceptionHandlerBound);}
const patterns=new Set();const indexFileName='index.html';for(const uiSourceCode of this._project.uiSourceCodes()){const pattern=this._patternForFileSystemUISourceCode(uiSourceCode);patterns.add(pattern);if(pattern.endsWith('/'+indexFileName)){patterns.add(pattern.substr(0,pattern.length-indexFileName.length));}}
return SDK.multitargetNetworkManager.setInterceptionHandlerForPatterns(Array.from(patterns).map(pattern=>({urlPattern:pattern,interceptionStage:Protocol.Network.InterceptionStage.HeadersReceived})),this._interceptionHandlerBound);}}
_onUISourceCodeRemoved(uiSourceCode){this._networkUISourceCodeRemoved(uiSourceCode);this._filesystemUISourceCodeRemoved(uiSourceCode);}
_networkUISourceCodeRemoved(uiSourceCode){if(uiSourceCode.project().type()!==Workspace.projectTypes.Network){return;}
this._unbind(uiSourceCode);this._networkUISourceCodeForEncodedPath.delete(this._encodedPathFromUrl(uiSourceCode.url()));}
_filesystemUISourceCodeRemoved(uiSourceCode){if(uiSourceCode.project()!==this._project){return;}
this._updateInterceptionPatterns();delete uiSourceCode[this._originalResponseContentPromiseSymbol];this._unbind(uiSourceCode);}
_setProject(project){if(project===this._project){return;}
if(this._project){this._project.uiSourceCodes().forEach(this._filesystemUISourceCodeRemoved.bind(this));}
this._project=project;if(this._project){this._project.uiSourceCodes().forEach(this._filesystemUISourceCodeAdded.bind(this));}
this._updateActiveProject();this.dispatchEventToListeners(Events.ProjectChanged,this._project);}
_onProjectAdded(project){if(project.type()!==Workspace.projectTypes.FileSystem||Persistence.FileSystemWorkspaceBinding.fileSystemType(project)!=='overrides'){return;}
const fileSystemPath=Persistence.FileSystemWorkspaceBinding.fileSystemPath(project.id());if(!fileSystemPath){return;}
if(this._project){this._project.remove();}
this._setProject(project);}
_onProjectRemoved(project){if(project!==this._project){return;}
this._setProject(null);}
async _interceptionHandler(interceptedRequest){const method=interceptedRequest.request.method;if(!this._active||(method!=='GET'&&method!=='POST')){return;}
const path=(this._project).fileSystemPath()+'/'+this._encodedPathFromUrl(interceptedRequest.request.url);const fileSystemUISourceCode=this._project.uiSourceCodeForURL(path);if(!fileSystemUISourceCode){return;}
let mimeType='';if(interceptedRequest.responseHeaders){const responseHeaders=SDK.NetworkManager.lowercaseHeaders(interceptedRequest.responseHeaders);mimeType=responseHeaders['content-type'];}
if(!mimeType){const expectedResourceType=Common.resourceTypes[interceptedRequest.resourceType]||Common.resourceTypes.Other;mimeType=fileSystemUISourceCode.mimeType();if(Common.ResourceType.fromMimeType(mimeType)!==expectedResourceType){mimeType=expectedResourceType.canonicalMimeType();}}
const project=(fileSystemUISourceCode.project());fileSystemUISourceCode[this._originalResponseContentPromiseSymbol]=interceptedRequest.responseBody().then(response=>{if(response.error||response.content===null){return null;}
return response.encoded?atob(response.content):response.content;});const blob=await project.requestFileBlob(fileSystemUISourceCode);interceptedRequest.continueRequestWithContent(new Blob([blob],{type:mimeType}));}}
const _reservedFileNames=new Set(['con','prn','aux','nul','com1','com2','com3','com4','com5','com6','com7','com8','com9','lpt1','lpt2','lpt3','lpt4','lpt5','lpt6','lpt7','lpt8','lpt9']);export const Events={ProjectChanged:Symbol('ProjectChanged')};self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.NetworkPersistenceManager=NetworkPersistenceManager;Persistence.NetworkPersistenceManager.Events=Events;Persistence.networkPersistenceManager;export default class IsolatedFileSystemManager extends Common.Object{constructor(){super();this._fileSystems=new Map();this._callbacks=new Map();this._progresses=new Map();Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.FileSystemRemoved,this._onFileSystemRemoved,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.FileSystemAdded,this._onFileSystemAdded,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.FileSystemFilesChangedAddedRemoved,this._onFileSystemFilesChanged,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.IndexingTotalWorkCalculated,this._onIndexingTotalWorkCalculated,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.IndexingWorked,this._onIndexingWorked,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.IndexingDone,this._onIndexingDone,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.SearchCompleted,this._onSearchCompleted,this);this._initExcludePatterSetting();this._fileSystemRequestResolve=null;this._fileSystemsLoadedPromise=this._requestFileSystems();}
_requestFileSystems(){let fulfill;const promise=new Promise(f=>fulfill=f);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.FileSystemsLoaded,onFileSystemsLoaded,this);Host.InspectorFrontendHost.requestFileSystems();return promise;function onFileSystemsLoaded(event){const fileSystems=(event.data);const promises=[];for(let i=0;i<fileSystems.length;++i){promises.push(this._innerAddFileSystem(fileSystems[i],false));}
Promise.all(promises).then(onFileSystemsAdded);}
function onFileSystemsAdded(fileSystems){fulfill(fileSystems.filter(fs=>!!fs));}}
addFileSystem(type){return new Promise(resolve=>{this._fileSystemRequestResolve=resolve;Host.InspectorFrontendHost.addFileSystem(type||'');});}
removeFileSystem(fileSystem){Host.InspectorFrontendHost.removeFileSystem(fileSystem.embedderPath());}
waitForFileSystems(){return this._fileSystemsLoadedPromise;}
_innerAddFileSystem(fileSystem,dispatchEvent){const embedderPath=fileSystem.fileSystemPath;const fileSystemURL=Common.ParsedURL.platformPathToURL(fileSystem.fileSystemPath);const promise=Persistence.IsolatedFileSystem.create(this,fileSystemURL,embedderPath,fileSystem.type,fileSystem.fileSystemName,fileSystem.rootURL);return promise.then(storeFileSystem.bind(this));function storeFileSystem(fileSystem){if(!fileSystem){return null;}
this._fileSystems.set(fileSystemURL,fileSystem);if(dispatchEvent){this.dispatchEventToListeners(Events.FileSystemAdded,fileSystem);}
return fileSystem;}}
addPlatformFileSystem(fileSystemURL,fileSystem){this._fileSystems.set(fileSystemURL,fileSystem);this.dispatchEventToListeners(Events.FileSystemAdded,fileSystem);}
async _onFileSystemAdded(event){const errorMessage=(event.data['errorMessage']);let fileSystem=(event.data['fileSystem']);if(errorMessage){Common.console.error(Common.UIString('Unable to add filesystem: %s',errorMessage));if(!this._fileSystemRequestResolve){return;}
this._fileSystemRequestResolve.call(null,null);this._fileSystemRequestResolve=null;}else if(fileSystem){fileSystem=await this._innerAddFileSystem(fileSystem,true);if(this._fileSystemRequestResolve){this._fileSystemRequestResolve.call(null,fileSystem);this._fileSystemRequestResolve=null;}}}
_onFileSystemRemoved(event){const embedderPath=(event.data);const fileSystemPath=Common.ParsedURL.platformPathToURL(embedderPath);const isolatedFileSystem=this._fileSystems.get(fileSystemPath);if(!isolatedFileSystem){return;}
this._fileSystems.delete(fileSystemPath);isolatedFileSystem.fileSystemRemoved();this.dispatchEventToListeners(Events.FileSystemRemoved,isolatedFileSystem);}
_onFileSystemFilesChanged(event){const urlPaths={changed:groupFilePathsIntoFileSystemPaths.call(this,event.data.changed),added:groupFilePathsIntoFileSystemPaths.call(this,event.data.added),removed:groupFilePathsIntoFileSystemPaths.call(this,event.data.removed)};this.dispatchEventToListeners(Events.FileSystemFilesChanged,urlPaths);function groupFilePathsIntoFileSystemPaths(embedderPaths){const paths=new Platform.Multimap();for(const embedderPath of embedderPaths){const filePath=Common.ParsedURL.platformPathToURL(embedderPath);for(const fileSystemPath of this._fileSystems.keys()){if(this._fileSystems.get(fileSystemPath).isFileExcluded(embedderPath)){continue;}
const pathPrefix=fileSystemPath.endsWith('/')?fileSystemPath:fileSystemPath+'/';if(!filePath.startsWith(pathPrefix)){continue;}
paths.set(fileSystemPath,filePath);}}
return paths;}}
fileSystems(){return this._fileSystems.valuesArray();}
fileSystem(fileSystemPath){return this._fileSystems.get(fileSystemPath)||null;}
_initExcludePatterSetting(){const defaultCommonExcludedFolders=['/node_modules/','/bower_components/','/\\.devtools','/\\.git/','/\\.sass-cache/','/\\.hg/','/\\.idea/','/\\.svn/','/\\.cache/','/\\.project/'];const defaultWinExcludedFolders=['/Thumbs.db$','/ehthumbs.db$','/Desktop.ini$','/\\$RECYCLE.BIN/'];const defaultMacExcludedFolders=['/\\.DS_Store$','/\\.Trashes$','/\\.Spotlight-V100$','/\\.AppleDouble$','/\\.LSOverride$','/Icon$','/\\._.*$'];const defaultLinuxExcludedFolders=['/.*~$'];let defaultExcludedFolders=defaultCommonExcludedFolders;if(Host.isWin()){defaultExcludedFolders=defaultExcludedFolders.concat(defaultWinExcludedFolders);}else if(Host.isMac()){defaultExcludedFolders=defaultExcludedFolders.concat(defaultMacExcludedFolders);}else{defaultExcludedFolders=defaultExcludedFolders.concat(defaultLinuxExcludedFolders);}
const defaultExcludedFoldersPattern=defaultExcludedFolders.join('|');this._workspaceFolderExcludePatternSetting=Common.settings.createRegExpSetting('workspaceFolderExcludePattern',defaultExcludedFoldersPattern,Host.isWin()?'i':'');}
workspaceFolderExcludePatternSetting(){return this._workspaceFolderExcludePatternSetting;}
registerCallback(callback){const requestId=++_lastRequestId;this._callbacks.set(requestId,callback);return requestId;}
registerProgress(progress){const requestId=++_lastRequestId;this._progresses.set(requestId,progress);return requestId;}
_onIndexingTotalWorkCalculated(event){const requestId=(event.data['requestId']);const totalWork=(event.data['totalWork']);const progress=this._progresses.get(requestId);if(!progress){return;}
progress.setTotalWork(totalWork);}
_onIndexingWorked(event){const requestId=(event.data['requestId']);const worked=(event.data['worked']);const progress=this._progresses.get(requestId);if(!progress){return;}
progress.worked(worked);if(progress.isCanceled()){Host.InspectorFrontendHost.stopIndexing(requestId);this._onIndexingDone(event);}}
_onIndexingDone(event){const requestId=(event.data['requestId']);const progress=this._progresses.get(requestId);if(!progress){return;}
progress.done();this._progresses.delete(requestId);}
_onSearchCompleted(event){const requestId=(event.data['requestId']);const files=(event.data['files']);const callback=this._callbacks.get(requestId);if(!callback){return;}
callback.call(null,files);this._callbacks.delete(requestId);}}
export const Events={FileSystemAdded:Symbol('FileSystemAdded'),FileSystemRemoved:Symbol('FileSystemRemoved'),FileSystemFilesChanged:Symbol('FileSystemFilesChanged'),ExcludedFolderAdded:Symbol('ExcludedFolderAdded'),ExcludedFolderRemoved:Symbol('ExcludedFolderRemoved')};let _lastRequestId=0;self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.IsolatedFileSystemManager=IsolatedFileSystemManager;Persistence.IsolatedFileSystemManager.Events=Events;Persistence.IsolatedFileSystemManager.FileSystem;Persistence.IsolatedFileSystemManager.FilesChangedData;Persistence.isolatedFileSystemManager;export default class IsolatedFileSystem extends Persistence.PlatformFileSystem{constructor(manager,path,embedderPath,domFileSystem,type){super(path,type);this._manager=manager;this._embedderPath=embedderPath;this._domFileSystem=domFileSystem;this._excludedFoldersSetting=Common.settings.createLocalSetting('workspaceExcludedFolders',{});this._excludedFolders=new Set(this._excludedFoldersSetting.get()[path]||[]);this._excludedEmbedderFolders=[];this._initialFilePaths=new Set();this._initialGitFolders=new Set();this._fileLocks=new Map();}
static create(manager,path,embedderPath,type,name,rootURL){const domFileSystem=Host.InspectorFrontendHost.isolatedFileSystem(name,rootURL);if(!domFileSystem){return Promise.resolve((null));}
const fileSystem=new IsolatedFileSystem(manager,path,embedderPath,domFileSystem,type);return fileSystem._initializeFilePaths().then(()=>fileSystem).catchException((null));}
static errorMessage(error){return Common.UIString('File system error: %s',error.message);}
_serializedFileOperation(path,operation){const promise=Promise.resolve(this._fileLocks.get(path)).then(()=>operation.call(null));this._fileLocks.set(path,promise);return promise;}
getMetadata(path){let fulfill;const promise=new Promise(f=>fulfill=f);this._domFileSystem.root.getFile(path,undefined,fileEntryLoaded,errorHandler);return promise;function fileEntryLoaded(entry){entry.getMetadata(fulfill,errorHandler);}
function errorHandler(error){const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' when getting file metadata \''+path);fulfill(null);}}
initialFilePaths(){return this._initialFilePaths.valuesArray();}
initialGitFolders(){return this._initialGitFolders.valuesArray();}
embedderPath(){return this._embedderPath;}
_initializeFilePaths(){let fulfill;const promise=new Promise(x=>fulfill=x);let pendingRequests=1;const boundInnerCallback=innerCallback.bind(this);this._requestEntries('',boundInnerCallback);return promise;function innerCallback(entries){for(let i=0;i<entries.length;++i){const entry=entries[i];if(!entry.isDirectory){if(this.isFileExcluded(entry.fullPath)){continue;}
this._initialFilePaths.add(entry.fullPath.substr(1));}else{if(entry.fullPath.endsWith('/.git')){const lastSlash=entry.fullPath.lastIndexOf('/');const parentFolder=entry.fullPath.substring(1,lastSlash);this._initialGitFolders.add(parentFolder);}
if(this.isFileExcluded(entry.fullPath+'/')){this._excludedEmbedderFolders.push(Common.ParsedURL.urlToPlatformPath(this.path()+entry.fullPath,Host.isWin()));continue;}
++pendingRequests;this._requestEntries(entry.fullPath,boundInnerCallback);}}
if((--pendingRequests===0)){fulfill();}}}
async _createFoldersIfNotExist(folderPath){let dirEntry=await new Promise(resolve=>this._domFileSystem.root.getDirectory(folderPath,undefined,resolve,()=>resolve(null)));if(dirEntry){return dirEntry;}
const paths=folderPath.split('/');let activePath='';for(const path of paths){activePath=activePath+'/'+path;dirEntry=await this._innerCreateFolderIfNeeded(activePath);if(!dirEntry){return null;}}
return dirEntry;}
_innerCreateFolderIfNeeded(path){return new Promise(resolve=>{this._domFileSystem.root.getDirectory(path,{create:true},dirEntry=>resolve(dirEntry),error=>{const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' trying to create directory \''+path+'\'');resolve(null);});});}
async createFile(path,name){const dirEntry=await this._createFoldersIfNotExist(path);if(!dirEntry){return null;}
const fileEntry=await this._serializedFileOperation(path,createFileCandidate.bind(this,name||'NewFile'));if(!fileEntry){return null;}
return fileEntry.fullPath.substr(1);function createFileCandidate(name,newFileIndex){return new Promise(resolve=>{const nameCandidate=name+(newFileIndex||'');dirEntry.getFile(nameCandidate,{create:true,exclusive:true},resolve,error=>{if(error.name==='InvalidModificationError'){resolve(createFileCandidate.call(this,name,(newFileIndex?newFileIndex+1:1)));return;}
const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' when testing if file exists \''+(this.path()+'/'+path+'/'+nameCandidate)+'\'');resolve(null);});});}}
deleteFile(path){let resolveCallback;const promise=new Promise(resolve=>resolveCallback=resolve);this._domFileSystem.root.getFile(path,undefined,fileEntryLoaded.bind(this),errorHandler.bind(this));return promise;function fileEntryLoaded(fileEntry){fileEntry.remove(fileEntryRemoved,errorHandler.bind(this));}
function fileEntryRemoved(){resolveCallback(true);}
function errorHandler(error){const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' when deleting file \''+(this.path()+'/'+path)+'\'');resolveCallback(false);}}
requestFileBlob(path){return new Promise(resolve=>{this._domFileSystem.root.getFile(path,undefined,entry=>{entry.file(resolve,errorHandler.bind(this));},errorHandler.bind(this));function errorHandler(error){if(error.name==='NotFoundError'){resolve(null);return;}
const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' when getting content for file \''+(this.path()+'/'+path)+'\'');resolve(null);}});}
requestFileContent(path){return this._serializedFileOperation(path,()=>this._innerRequestFileContent(path));}
async _innerRequestFileContent(path){const blob=await this.requestFileBlob(path);if(!blob){return{error:ls`Blob could not be loaded.`,isEncoded:false};}
const reader=new FileReader();const extension=Common.ParsedURL.extractExtension(path);const encoded=Persistence.IsolatedFileSystem.BinaryExtensions.has(extension);const readPromise=new Promise(x=>reader.onloadend=x);if(encoded){reader.readAsBinaryString(blob);}else{reader.readAsText(blob);}
await readPromise;if(reader.error){const error=ls`Can't read file: ${path}: ${reader.error}`;console.error(error);return{isEncoded:false,error};}
let result=null;let error=null;try{result=(reader.result);}catch(e){result=null;error=ls`Can't read file: ${path}: ${e.message}`;}
if(result===undefined||result===null){error=error||ls`Unknown error reading file: ${path}`;console.error(error);return{isEncoded:false,error};}
return{isEncoded:encoded,content:encoded?btoa(result):result};}
async setFileContent(path,content,isBase64){Host.userMetrics.actionTaken(Host.UserMetrics.Action.FileSavedInWorkspace);let callback;const innerSetFileContent=()=>{const promise=new Promise(x=>callback=x);this._domFileSystem.root.getFile(path,{create:true},fileEntryLoaded.bind(this),errorHandler.bind(this));return promise;};this._serializedFileOperation(path,innerSetFileContent);function fileEntryLoaded(entry){entry.createWriter(fileWriterCreated.bind(this),errorHandler.bind(this));}
async function fileWriterCreated(fileWriter){fileWriter.onerror=errorHandler.bind(this);fileWriter.onwriteend=fileWritten;let blob;if(isBase64){blob=await(await fetch(`data:application/octet-stream;base64,${content}`)).blob();}else{blob=new Blob([content],{type:'text/plain'});}
fileWriter.write(blob);function fileWritten(){fileWriter.onwriteend=callback;fileWriter.truncate(blob.size);}}
function errorHandler(error){const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' when setting content for file \''+(this.path()+'/'+path)+'\'');callback();}}
renameFile(path,newName,callback){newName=newName?newName.trim():newName;if(!newName||newName.indexOf('/')!==-1){callback(false);return;}
let fileEntry;let dirEntry;this._domFileSystem.root.getFile(path,undefined,fileEntryLoaded.bind(this),errorHandler.bind(this));function fileEntryLoaded(entry){if(entry.name===newName){callback(false);return;}
fileEntry=entry;fileEntry.getParent(dirEntryLoaded.bind(this),errorHandler.bind(this));}
function dirEntryLoaded(entry){dirEntry=entry;dirEntry.getFile(newName,null,newFileEntryLoaded,newFileEntryLoadErrorHandler.bind(this));}
function newFileEntryLoaded(entry){callback(false);}
function newFileEntryLoadErrorHandler(error){if(error.name!=='NotFoundError'){callback(false);return;}
fileEntry.moveTo(dirEntry,newName,fileRenamed,errorHandler.bind(this));}
function fileRenamed(entry){callback(true,entry.name);}
function errorHandler(error){const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' when renaming file \''+(this.path()+'/'+path)+'\' to \''+newName+'\'');callback(false);}}
_readDirectory(dirEntry,callback){const dirReader=dirEntry.createReader();let entries=[];function innerCallback(results){if(!results.length){callback(entries.sort());}else{entries=entries.concat(toArray(results));dirReader.readEntries(innerCallback,errorHandler);}}
function toArray(list){return Array.prototype.slice.call(list||[],0);}
dirReader.readEntries(innerCallback,errorHandler);function errorHandler(error){const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' when reading directory \''+dirEntry.fullPath+'\'');callback([]);}}
_requestEntries(path,callback){this._domFileSystem.root.getDirectory(path,undefined,innerCallback.bind(this),errorHandler);function innerCallback(dirEntry){this._readDirectory(dirEntry,callback);}
function errorHandler(error){const errorMessage=IsolatedFileSystem.errorMessage(error);console.error(errorMessage+' when requesting entry \''+path+'\'');callback([]);}}
_saveExcludedFolders(){const settingValue=this._excludedFoldersSetting.get();settingValue[this.path()]=this._excludedFolders.valuesArray();this._excludedFoldersSetting.set(settingValue);}
addExcludedFolder(path){this._excludedFolders.add(path);this._saveExcludedFolders();this._manager.dispatchEventToListeners(Persistence.IsolatedFileSystemManager.Events.ExcludedFolderAdded,path);}
removeExcludedFolder(path){this._excludedFolders.delete(path);this._saveExcludedFolders();this._manager.dispatchEventToListeners(Persistence.IsolatedFileSystemManager.Events.ExcludedFolderRemoved,path);}
fileSystemRemoved(){const settingValue=this._excludedFoldersSetting.get();delete settingValue[this.path()];this._excludedFoldersSetting.set(settingValue);}
isFileExcluded(folderPath){if(this._excludedFolders.has(folderPath)){return true;}
const regex=this._manager.workspaceFolderExcludePatternSetting().asRegExp();return!!(regex&&regex.test(folderPath));}
excludedFolders(){return this._excludedFolders;}
searchInPath(query,progress){return new Promise(resolve=>{const requestId=this._manager.registerCallback(innerCallback);Host.InspectorFrontendHost.searchInPath(requestId,this._embedderPath,query);function innerCallback(files){resolve(files.map(path=>Common.ParsedURL.platformPathToURL(path)));progress.worked(1);}});}
indexContent(progress){progress.setTotalWork(1);const requestId=this._manager.registerProgress(progress);Host.InspectorFrontendHost.indexPath(requestId,this._embedderPath,JSON.stringify(this._excludedEmbedderFolders));}
mimeFromPath(path){return Common.ResourceType.mimeFromURL(path)||'text/plain';}
canExcludeFolder(path){return!!path&&this.type()!=='overrides';}
contentType(path){const extension=Common.ParsedURL.extractExtension(path);if(_styleSheetExtensions.has(extension)){return Common.resourceTypes.Stylesheet;}
if(_documentExtensions.has(extension)){return Common.resourceTypes.Document;}
if(ImageExtensions.has(extension)){return Common.resourceTypes.Image;}
if(_scriptExtensions.has(extension)){return Common.resourceTypes.Script;}
return BinaryExtensions.has(extension)?Common.resourceTypes.Other:Common.resourceTypes.Document;}
tooltipForURL(url){const path=Common.ParsedURL.urlToPlatformPath(url,Host.isWin()).trimMiddle(150);return ls`Linked to ${path}`;}
supportsAutomapping(){return this.type()!=='overrides';}}
const _styleSheetExtensions=new Set(['css','scss','sass','less']);const _documentExtensions=new Set(['htm','html','asp','aspx','phtml','jsp']);const _scriptExtensions=new Set(['asp','aspx','c','cc','cljs','coffee','cpp','cs','dart','java','js','jsp','jsx','h','m','mjs','mm','py','sh','ts','tsx','ls']);const ImageExtensions=new Set(['jpeg','jpg','svg','gif','webp','png','ico','tiff','tif','bmp']);export const BinaryExtensions=new Set(['cmd','com','exe','a','ar','iso','tar','bz2','gz','lz','lzma','z','7z','apk','arc','cab','dmg','jar','pak','rar','zip','3gp','aac','aiff','flac','m4a','mmf','mp3','ogg','oga','raw','sln','wav','wma','webm','mkv','flv','vob','ogv','gifv','avi','mov','qt','mp4','m4p','m4v','mpg','mpeg','jpeg','jpg','gif','webp','png','ico','tiff','tif','bmp']);self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.IsolatedFileSystem=IsolatedFileSystem;Persistence.IsolatedFileSystem.BinaryExtensions=BinaryExtensions;export default class FileSystemWorkspaceBinding{constructor(isolatedFileSystemManager,workspace){this._isolatedFileSystemManager=isolatedFileSystemManager;this._workspace=workspace;this._eventListeners=[this._isolatedFileSystemManager.addEventListener(Persistence.IsolatedFileSystemManager.Events.FileSystemAdded,this._onFileSystemAdded,this),this._isolatedFileSystemManager.addEventListener(Persistence.IsolatedFileSystemManager.Events.FileSystemRemoved,this._onFileSystemRemoved,this),this._isolatedFileSystemManager.addEventListener(Persistence.IsolatedFileSystemManager.Events.FileSystemFilesChanged,this._fileSystemFilesChanged,this)];this._boundFileSystems=new Map();this._isolatedFileSystemManager.waitForFileSystems().then(this._onFileSystemsLoaded.bind(this));}
static projectId(fileSystemPath){return fileSystemPath;}
static relativePath(uiSourceCode){const baseURL=(uiSourceCode.project())._fileSystemBaseURL;return uiSourceCode.url().substring(baseURL.length).split('/');}
static tooltipForUISourceCode(uiSourceCode){const fileSystem=(uiSourceCode.project())._fileSystem;return fileSystem.tooltipForURL(uiSourceCode.url());}
static fileSystemType(project){const fileSystem=(project)._fileSystem;return fileSystem.type();}
static fileSystemSupportsAutomapping(project){const fileSystem=(project)._fileSystem;return fileSystem.supportsAutomapping();}
static completeURL(project,relativePath){const fsProject=(project);return fsProject._fileSystemBaseURL+relativePath;}
static fileSystemPath(projectId){return projectId;}
fileSystemManager(){return this._isolatedFileSystemManager;}
_onFileSystemsLoaded(fileSystems){for(const fileSystem of fileSystems){this._addFileSystem(fileSystem);}}
_onFileSystemAdded(event){const fileSystem=(event.data);this._addFileSystem(fileSystem);}
_addFileSystem(fileSystem){const boundFileSystem=new FileSystem(this,fileSystem,this._workspace);this._boundFileSystems.set(fileSystem.path(),boundFileSystem);}
_onFileSystemRemoved(event){const fileSystem=(event.data);const boundFileSystem=this._boundFileSystems.get(fileSystem.path());boundFileSystem.dispose();this._boundFileSystems.remove(fileSystem.path());}
_fileSystemFilesChanged(event){const paths=(event.data);for(const fileSystemPath of paths.changed.keysArray()){const fileSystem=this._boundFileSystems.get(fileSystemPath);if(!fileSystem){continue;}
paths.changed.get(fileSystemPath).forEach(path=>fileSystem._fileChanged(path));}
for(const fileSystemPath of paths.added.keysArray()){const fileSystem=this._boundFileSystems.get(fileSystemPath);if(!fileSystem){continue;}
paths.added.get(fileSystemPath).forEach(path=>fileSystem._fileChanged(path));}
for(const fileSystemPath of paths.removed.keysArray()){const fileSystem=this._boundFileSystems.get(fileSystemPath);if(!fileSystem){continue;}
paths.removed.get(fileSystemPath).forEach(path=>fileSystem.removeUISourceCode(path));}}
dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);for(const fileSystem of this._boundFileSystems.values()){fileSystem.dispose();this._boundFileSystems.remove(fileSystem._fileSystem.path());}}}
export class FileSystem extends Workspace.ProjectStore{constructor(fileSystemWorkspaceBinding,isolatedFileSystem,workspace){const fileSystemPath=isolatedFileSystem.path();const id=FileSystemWorkspaceBinding.projectId(fileSystemPath);console.assert(!workspace.project(id));const displayName=fileSystemPath.substr(fileSystemPath.lastIndexOf('/')+1);super(workspace,id,Workspace.projectTypes.FileSystem,displayName);this._fileSystem=isolatedFileSystem;this._fileSystemBaseURL=this._fileSystem.path()+'/';this._fileSystemParentURL=this._fileSystemBaseURL.substr(0,fileSystemPath.lastIndexOf('/')+1);this._fileSystemWorkspaceBinding=fileSystemWorkspaceBinding;this._fileSystemPath=fileSystemPath;this._creatingFilesGuard=new Set();workspace.addProject(this);this.populate();}
fileSystemPath(){return this._fileSystemPath;}
mimeType(uiSourceCode){return this._fileSystem.mimeFromPath(uiSourceCode.url());}
initialGitFolders(){return this._fileSystem.initialGitFolders().map(folder=>this._fileSystemPath+'/'+folder);}
_filePathForUISourceCode(uiSourceCode){return uiSourceCode.url().substring(this._fileSystemPath.length);}
isServiceProject(){return false;}
requestMetadata(uiSourceCode){if(uiSourceCode[_metadata]){return uiSourceCode[_metadata];}
const relativePath=this._filePathForUISourceCode(uiSourceCode);const promise=this._fileSystem.getMetadata(relativePath).then(onMetadata);uiSourceCode[_metadata]=promise;return promise;function onMetadata(metadata){if(!metadata){return null;}
return new Workspace.UISourceCodeMetadata(metadata.modificationTime,metadata.size);}}
requestFileBlob(uiSourceCode){return this._fileSystem.requestFileBlob(this._filePathForUISourceCode(uiSourceCode));}
requestFileContent(uiSourceCode){const filePath=this._filePathForUISourceCode(uiSourceCode);return this._fileSystem.requestFileContent(filePath);}
canSetFileContent(){return true;}
async setFileContent(uiSourceCode,newContent,isBase64){const filePath=this._filePathForUISourceCode(uiSourceCode);await this._fileSystem.setFileContent(filePath,newContent,isBase64);}
fullDisplayName(uiSourceCode){const baseURL=(uiSourceCode.project())._fileSystemParentURL;return uiSourceCode.url().substring(baseURL.length);}
canRename(){return true;}
rename(uiSourceCode,newName,callback){if(newName===uiSourceCode.name()){callback(true,uiSourceCode.name(),uiSourceCode.url(),uiSourceCode.contentType());return;}
let filePath=this._filePathForUISourceCode(uiSourceCode);this._fileSystem.renameFile(filePath,newName,innerCallback.bind(this));function innerCallback(success,newName){if(!success||!newName){callback(false,newName);return;}
console.assert(newName);const slash=filePath.lastIndexOf('/');const parentPath=filePath.substring(0,slash);filePath=parentPath+'/'+newName;filePath=filePath.substr(1);const newURL=this._fileSystemBaseURL+filePath;const newContentType=this._fileSystem.contentType(newName);this.renameUISourceCode(uiSourceCode,newName);callback(true,newName,newURL,newContentType);}}
async searchInFileContent(uiSourceCode,query,caseSensitive,isRegex){const filePath=this._filePathForUISourceCode(uiSourceCode);const{content}=await this._fileSystem.requestFileContent(filePath);if(content){return Common.ContentProvider.performSearchInContent(content,query,caseSensitive,isRegex);}
return[];}
async findFilesMatchingSearchRequest(searchConfig,filesMathingFileQuery,progress){let result=filesMathingFileQuery;const queriesToRun=searchConfig.queries().slice();if(!queriesToRun.length){queriesToRun.push('');}
progress.setTotalWork(queriesToRun.length);for(const query of queriesToRun){const files=await this._fileSystem.searchInPath(searchConfig.isRegex()?'':query,progress);result=result.intersectOrdered(files.sort(),String.naturalOrderComparator);progress.worked(1);}
progress.done();return result;}
indexContent(progress){this._fileSystem.indexContent(progress);}
populate(){const chunkSize=1000;const filePaths=this._fileSystem.initialFilePaths();reportFileChunk.call(this,0);function reportFileChunk(from){const to=Math.min(from+chunkSize,filePaths.length);for(let i=from;i<to;++i){this._addFile(filePaths[i]);}
if(to<filePaths.length){setTimeout(reportFileChunk.bind(this,to),100);}}}
excludeFolder(url){let relativeFolder=url.substring(this._fileSystemBaseURL.length);if(!relativeFolder.startsWith('/')){relativeFolder='/'+relativeFolder;}
if(!relativeFolder.endsWith('/')){relativeFolder+='/';}
this._fileSystem.addExcludedFolder(relativeFolder);const uiSourceCodes=this.uiSourceCodes().slice();for(let i=0;i<uiSourceCodes.length;++i){const uiSourceCode=uiSourceCodes[i];if(uiSourceCode.url().startsWith(url)){this.removeUISourceCode(uiSourceCode.url());}}}
canExcludeFolder(path){return this._fileSystem.canExcludeFolder(path);}
canCreateFile(){return true;}
async createFile(path,name,content,isBase64){const guardFileName=this._fileSystemPath+path+(!path.endsWith('/')?'/':'')+name;this._creatingFilesGuard.add(guardFileName);const filePath=await this._fileSystem.createFile(path,name);if(!filePath){return null;}
const uiSourceCode=this._addFile(filePath);uiSourceCode.setContent(content,!!isBase64);this._creatingFilesGuard.delete(guardFileName);return uiSourceCode;}
deleteFile(uiSourceCode){const relativePath=this._filePathForUISourceCode(uiSourceCode);this._fileSystem.deleteFile(relativePath).then(success=>{if(success){this.removeUISourceCode(uiSourceCode.url());}});}
remove(){this._fileSystemWorkspaceBinding._isolatedFileSystemManager.removeFileSystem(this._fileSystem);}
_addFile(filePath){const contentType=this._fileSystem.contentType(filePath);const uiSourceCode=this.createUISourceCode(this._fileSystemBaseURL+filePath,contentType);this.addUISourceCode(uiSourceCode);return uiSourceCode;}
_fileChanged(path){if(this._creatingFilesGuard.has(path)){return;}
const uiSourceCode=this.uiSourceCodeForURL(path);if(!uiSourceCode){const contentType=this._fileSystem.contentType(path);this.addUISourceCode(this.createUISourceCode(path,contentType));return;}
uiSourceCode[_metadata]=null;uiSourceCode.checkContentUpdated();}
tooltipForURL(url){return this._fileSystem.tooltipForURL(url);}
dispose(){this.removeProject();}}
const _metadata=Symbol('FileSystemWorkspaceBinding.Metadata');self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.FileSystemWorkspaceBinding=FileSystemWorkspaceBinding;Persistence.FileSystemWorkspaceBinding.FileSystem=FileSystem;export default class EditFileSystemView extends UI.VBox{constructor(fileSystemPath){super(true);this.registerRequiredCSS('persistence/editFileSystemView.css');this._fileSystemPath=fileSystemPath;this._eventListeners=[Persistence.isolatedFileSystemManager.addEventListener(Persistence.IsolatedFileSystemManager.Events.ExcludedFolderAdded,this._update,this),Persistence.isolatedFileSystemManager.addEventListener(Persistence.IsolatedFileSystemManager.Events.ExcludedFolderRemoved,this._update,this)];const excludedFoldersHeader=this.contentElement.createChild('div','file-system-header');excludedFoldersHeader.createChild('div','file-system-header-text').textContent=Common.UIString('Excluded folders');excludedFoldersHeader.appendChild(UI.createTextButton(Common.UIString('Add'),this._addExcludedFolderButtonClicked.bind(this),'add-button'));this._excludedFoldersList=new UI.ListWidget(this);this._excludedFoldersList.element.classList.add('file-system-list');this._excludedFoldersList.registerRequiredCSS('persistence/editFileSystemView.css');const excludedFoldersPlaceholder=createElementWithClass('div','file-system-list-empty');excludedFoldersPlaceholder.textContent=Common.UIString('None');this._excludedFoldersList.setEmptyPlaceholder(excludedFoldersPlaceholder);this._excludedFoldersList.show(this.contentElement);this._update();}
dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);}
_update(){if(this._muteUpdate){return;}
this._excludedFoldersList.clear();this._excludedFolders=[];for(const folder of Persistence.isolatedFileSystemManager.fileSystem(this._fileSystemPath).excludedFolders().values()){this._excludedFolders.push(folder);this._excludedFoldersList.appendItem(folder,true);}}
_addExcludedFolderButtonClicked(){this._excludedFoldersList.addNewItem(0,'');}
renderItem(item,editable){const element=createElementWithClass('div','file-system-list-item');const pathPrefix=(editable?item:Common.UIString('%s (via .devtools)',item));const pathPrefixElement=element.createChild('div','file-system-value');pathPrefixElement.textContent=pathPrefix;pathPrefixElement.title=pathPrefix;return element;}
removeItemRequested(item,index){Persistence.isolatedFileSystemManager.fileSystem(this._fileSystemPath).removeExcludedFolder(this._excludedFolders[index]);}
commitEdit(item,editor,isNew){this._muteUpdate=true;if(!isNew){Persistence.isolatedFileSystemManager.fileSystem(this._fileSystemPath).removeExcludedFolder((item));}
Persistence.isolatedFileSystemManager.fileSystem(this._fileSystemPath).addExcludedFolder(this._normalizePrefix(editor.control('pathPrefix').value));this._muteUpdate=false;this._update();}
beginEdit(item){const editor=this._createExcludedFolderEditor();editor.control('pathPrefix').value=item;return editor;}
_createExcludedFolderEditor(){if(this._excludedFolderEditor){return this._excludedFolderEditor;}
const editor=new UI.ListWidget.Editor();this._excludedFolderEditor=editor;const content=editor.contentElement();const titles=content.createChild('div','file-system-edit-row');titles.createChild('div','file-system-value').textContent=Common.UIString('Folder path');const fields=content.createChild('div','file-system-edit-row');fields.createChild('div','file-system-value').appendChild(editor.createInput('pathPrefix','text','/path/to/folder/',pathPrefixValidator.bind(this)));return editor;function pathPrefixValidator(item,index,input){const prefix=this._normalizePrefix(input.value.trim());if(!prefix){return{valid:false,errorMessage:ls`Enter a path`};}
const configurableCount=Persistence.isolatedFileSystemManager.fileSystem(this._fileSystemPath).excludedFolders().size;for(let i=0;i<configurableCount;++i){if(i!==index&&this._excludedFolders[i]===prefix){return{valid:false,errorMessage:ls`Enter a unique path`};}}
return{valid:true};}}
_normalizePrefix(prefix){if(!prefix){return'';}
return prefix+(prefix[prefix.length-1]==='/'?'':'/');}}
self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.EditFileSystemView=EditFileSystemView;export default class Automapping{constructor(workspace,onStatusAdded,onStatusRemoved){this._workspace=workspace;this._onStatusAdded=onStatusAdded;this._onStatusRemoved=onStatusRemoved;this._statuses=new Set();this._statusSymbol=Symbol('Automapping.Status');this._processingPromiseSymbol=Symbol('Automapping.ProcessingPromise');this._metadataSymbol=Symbol('Automapping.Metadata');this._fileSystemUISourceCodes=new Map();this._sweepThrottler=new Common.Throttler(100);const pathEncoder=new Persistence.PathEncoder();this._filesIndex=new FilePathIndex(pathEncoder);this._projectFoldersIndex=new FolderIndex(pathEncoder);this._activeFoldersIndex=new FolderIndex(pathEncoder);this._interceptors=[];this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,event=>this._onUISourceCodeAdded((event.data)));this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved,event=>this._onUISourceCodeRemoved((event.data)));this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRenamed,this._onUISourceCodeRenamed,this);this._workspace.addEventListener(Workspace.Workspace.Events.ProjectAdded,event=>this._onProjectAdded((event.data)),this);this._workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved,event=>this._onProjectRemoved((event.data)),this);for(const fileSystem of workspace.projects()){this._onProjectAdded(fileSystem);}
for(const uiSourceCode of workspace.uiSourceCodes()){this._onUISourceCodeAdded(uiSourceCode);}}
addNetworkInterceptor(interceptor){this._interceptors.push(interceptor);this.scheduleRemap();}
scheduleRemap(){for(const status of this._statuses.valuesArray()){this._clearNetworkStatus(status.network);}
this._scheduleSweep();}
_scheduleSweep(){this._sweepThrottler.schedule(sweepUnmapped.bind(this));function sweepUnmapped(){const networkProjects=this._workspace.projectsForType(Workspace.projectTypes.Network);for(const networkProject of networkProjects){for(const uiSourceCode of networkProject.uiSourceCodes()){this._computeNetworkStatus(uiSourceCode);}}
this._onSweepHappenedForTest();return Promise.resolve();}}
_onSweepHappenedForTest(){}
_onProjectRemoved(project){for(const uiSourceCode of project.uiSourceCodes()){this._onUISourceCodeRemoved(uiSourceCode);}
if(project.type()!==Workspace.projectTypes.FileSystem){return;}
const fileSystem=(project);for(const gitFolder of fileSystem.initialGitFolders()){this._projectFoldersIndex.removeFolder(gitFolder);}
this._projectFoldersIndex.removeFolder(fileSystem.fileSystemPath());this.scheduleRemap();}
_onProjectAdded(project){if(project.type()!==Workspace.projectTypes.FileSystem){return;}
const fileSystem=(project);for(const gitFolder of fileSystem.initialGitFolders()){this._projectFoldersIndex.addFolder(gitFolder);}
this._projectFoldersIndex.addFolder(fileSystem.fileSystemPath());project.uiSourceCodes().forEach(this._onUISourceCodeAdded.bind(this));this.scheduleRemap();}
_onUISourceCodeAdded(uiSourceCode){const project=uiSourceCode.project();if(project.type()===Workspace.projectTypes.FileSystem){if(!Persistence.FileSystemWorkspaceBinding.fileSystemSupportsAutomapping(project)){return;}
this._filesIndex.addPath(uiSourceCode.url());this._fileSystemUISourceCodes.set(uiSourceCode.url(),uiSourceCode);this._scheduleSweep();}else if(project.type()===Workspace.projectTypes.Network){this._computeNetworkStatus(uiSourceCode);}}
_onUISourceCodeRemoved(uiSourceCode){if(uiSourceCode.project().type()===Workspace.projectTypes.FileSystem){this._filesIndex.removePath(uiSourceCode.url());this._fileSystemUISourceCodes.delete(uiSourceCode.url());const status=uiSourceCode[this._statusSymbol];if(status){this._clearNetworkStatus(status.network);}}else if(uiSourceCode.project().type()===Workspace.projectTypes.Network){this._clearNetworkStatus(uiSourceCode);}}
_onUISourceCodeRenamed(event){const uiSourceCode=(event.data.uiSourceCode);const oldURL=(event.data.oldURL);if(uiSourceCode.project().type()!==Workspace.projectTypes.FileSystem){return;}
this._filesIndex.removePath(oldURL);this._fileSystemUISourceCodes.delete(oldURL);const status=uiSourceCode[this._statusSymbol];if(status){this._clearNetworkStatus(status.network);}
this._filesIndex.addPath(uiSourceCode.url());this._fileSystemUISourceCodes.set(uiSourceCode.url(),uiSourceCode);this._scheduleSweep();}
_computeNetworkStatus(networkSourceCode){if(networkSourceCode[this._processingPromiseSymbol]||networkSourceCode[this._statusSymbol]){return;}
if(this._interceptors.some(interceptor=>interceptor(networkSourceCode))){return;}
if(networkSourceCode.url().startsWith('wasm://')){return;}
const createBindingPromise=this._createBinding(networkSourceCode).then(validateStatus.bind(this)).then(onStatus.bind(this));networkSourceCode[this._processingPromiseSymbol]=createBindingPromise;async function validateStatus(status){if(!status){return null;}
if(networkSourceCode[this._processingPromiseSymbol]!==createBindingPromise){return null;}
if(status.network.contentType().isFromSourceMap()||!status.fileSystem.contentType().isTextType()){return status;}
if(status.fileSystem.isDirty()&&(status.network.isDirty()||status.network.hasCommits())){return null;}
const[fileSystemContent,networkContent]=await Promise.all([status.fileSystem.requestContent(),status.network.project().requestFileContent(status.network)]);if(fileSystemContent.content===null||networkContent===null){return null;}
if(networkSourceCode[this._processingPromiseSymbol]!==createBindingPromise){return null;}
const target=Bindings.NetworkProject.targetForUISourceCode(status.network);let isValid=false;const fileContent=fileSystemContent.content;if(target&&target.type()===SDK.Target.Type.Node){const rewrappedNetworkContent=Persistence.Persistence.rewrapNodeJSContent(status.fileSystem,fileContent,networkContent.content);isValid=fileContent===rewrappedNetworkContent;}else{isValid=fileContent.trimRight()===networkContent.content.trimRight();}
if(!isValid){this._prevalidationFailedForTest(status);return null;}
return status;}
function onStatus(status){if(networkSourceCode[this._processingPromiseSymbol]!==createBindingPromise){return;}
networkSourceCode[this._processingPromiseSymbol]=null;if(!status){this._onBindingFailedForTest();return;}
if(status.network[this._statusSymbol]||status.fileSystem[this._statusSymbol]){return;}
this._statuses.add(status);status.network[this._statusSymbol]=status;status.fileSystem[this._statusSymbol]=status;if(status.exactMatch){const projectFolder=this._projectFoldersIndex.closestParentFolder(status.fileSystem.url());const newFolderAdded=projectFolder?this._activeFoldersIndex.addFolder(projectFolder):false;if(newFolderAdded){this._scheduleSweep();}}
this._onStatusAdded.call(null,status);}}
_prevalidationFailedForTest(binding){}
_onBindingFailedForTest(){}
_clearNetworkStatus(networkSourceCode){if(networkSourceCode[this._processingPromiseSymbol]){networkSourceCode[this._processingPromiseSymbol]=null;return;}
const status=networkSourceCode[this._statusSymbol];if(!status){return;}
this._statuses.delete(status);status.network[this._statusSymbol]=null;status.fileSystem[this._statusSymbol]=null;if(status.exactMatch){const projectFolder=this._projectFoldersIndex.closestParentFolder(status.fileSystem.url());if(projectFolder){this._activeFoldersIndex.removeFolder(projectFolder);}}
this._onStatusRemoved.call(null,status);}
_createBinding(networkSourceCode){if(networkSourceCode.url().startsWith('file://')||networkSourceCode.url().startsWith('snippet://')){const decodedUrl=decodeURI(networkSourceCode.url());const fileSourceCode=this._fileSystemUISourceCodes.get(decodedUrl);const status=fileSourceCode?new AutomappingStatus(networkSourceCode,fileSourceCode,false):null;return Promise.resolve(status);}
let networkPath=Common.ParsedURL.extractPath(networkSourceCode.url());if(networkPath===null){return Promise.resolve((null));}
if(networkPath.endsWith('/')){networkPath+='index.html';}
const urlDecodedNetworkPath=decodeURI(networkPath);const similarFiles=this._filesIndex.similarFiles(urlDecodedNetworkPath).map(path=>this._fileSystemUISourceCodes.get(path));if(!similarFiles.length){return Promise.resolve((null));}
return this._pullMetadatas(similarFiles.concat(networkSourceCode)).then(onMetadatas.bind(this));function onMetadatas(){const activeFiles=similarFiles.filter(file=>!!this._activeFoldersIndex.closestParentFolder(file.url()));const networkMetadata=networkSourceCode[this._metadataSymbol];if(!networkMetadata||(!networkMetadata.modificationTime&&typeof networkMetadata.contentSize!=='number')){if(activeFiles.length!==1){return null;}
return new AutomappingStatus(networkSourceCode,activeFiles[0],false);}
let exactMatches=this._filterWithMetadata(activeFiles,networkMetadata);if(!exactMatches.length){exactMatches=this._filterWithMetadata(similarFiles,networkMetadata);}
if(exactMatches.length!==1){return null;}
return new AutomappingStatus(networkSourceCode,exactMatches[0],true);}}
_pullMetadatas(uiSourceCodes){return Promise.all(uiSourceCodes.map(async file=>{file[this._metadataSymbol]=await file.requestMetadata();}));}
_filterWithMetadata(files,networkMetadata){return files.filter(file=>{const fileMetadata=file[this._metadataSymbol];if(!fileMetadata){return false;}
const timeMatches=!networkMetadata.modificationTime||Math.abs(networkMetadata.modificationTime-fileMetadata.modificationTime)<1000;const contentMatches=!networkMetadata.contentSize||fileMetadata.contentSize===networkMetadata.contentSize;return timeMatches&&contentMatches;});}}
class FilePathIndex{constructor(encoder){this._encoder=encoder;this._reversedIndex=new Common.Trie();}
addPath(path){const encodedPath=this._encoder.encode(path);this._reversedIndex.add(encodedPath.reverse());}
removePath(path){const encodedPath=this._encoder.encode(path);this._reversedIndex.remove(encodedPath.reverse());}
similarFiles(networkPath){const encodedPath=this._encoder.encode(networkPath);const longestCommonPrefix=this._reversedIndex.longestPrefix(encodedPath.reverse(),false);if(!longestCommonPrefix){return[];}
return this._reversedIndex.words(longestCommonPrefix).map(encodedPath=>this._encoder.decode(encodedPath.reverse()));}}
class FolderIndex{constructor(encoder){this._encoder=encoder;this._index=new Common.Trie();this._folderCount=new Map();}
addFolder(path){if(path.endsWith('/')){path=path.substring(0,path.length-1);}
const encodedPath=this._encoder.encode(path);this._index.add(encodedPath);const count=this._folderCount.get(encodedPath)||0;this._folderCount.set(encodedPath,count+1);return count===0;}
removeFolder(path){if(path.endsWith('/')){path=path.substring(0,path.length-1);}
const encodedPath=this._encoder.encode(path);const count=this._folderCount.get(encodedPath)||0;if(!count){return false;}
if(count>1){this._folderCount.set(encodedPath,count-1);return false;}
this._index.remove(encodedPath);this._folderCount.delete(encodedPath);return true;}
closestParentFolder(path){const encodedPath=this._encoder.encode(path);const commonPrefix=this._index.longestPrefix(encodedPath,true);return this._encoder.decode(commonPrefix);}}
export class AutomappingStatus{constructor(network,fileSystem,exactMatch){this.network=network;this.fileSystem=fileSystem;this.exactMatch=exactMatch;}}
self.Persistence=self.Persistence||{};Persistence=Persistence||{};Persistence.Automapping=Automapping;Persistence.AutomappingStatus=AutomappingStatus;import*as DockController from'./DockController.js';import*as ImagePreview from'./ImagePreview.js';import*as JSPresentationUtils from'./JSPresentationUtils.js';import*as Linkifier from'./Linkifier.js';import*as Reload from'./Reload.js';import*as TargetDetachedDialog from'./TargetDetachedDialog.js';export{DockController,ImagePreview,JSPresentationUtils,Linkifier,Reload,TargetDetachedDialog,};export default class TargetDetachedDialog extends SDK.SDKModel{constructor(target){super(target);if(target.parentTarget()){return;}
target.registerInspectorDispatcher(this);target.inspectorAgent().enable();this._hideCrashedDialog=null;TargetDetachedDialog._disconnectedScreenWithReasonWasShown=false;}
detached(reason){TargetDetachedDialog._disconnectedScreenWithReasonWasShown=true;UI.RemoteDebuggingTerminatedScreen.show(reason);}
static webSocketConnectionLost(){UI.RemoteDebuggingTerminatedScreen.show(ls`WebSocket disconnected`);}
targetCrashed(){const dialog=new UI.Dialog();dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);dialog.addCloseButton();dialog.setDimmed(true);this._hideCrashedDialog=dialog.hide.bind(dialog);new UI.TargetCrashedScreen(()=>this._hideCrashedDialog=null).show(dialog.contentElement);dialog.show();}
targetReloadedAfterCrash(){this.target().runtimeAgent().runIfWaitingForDebugger();if(this._hideCrashedDialog){this._hideCrashedDialog.call(null);this._hideCrashedDialog=null;}}}
self.Components=self.Components||{};Components=Components||{};Components.TargetDetachedDialog=TargetDetachedDialog;SDK.SDKModel.register(TargetDetachedDialog,SDK.Target.Capability.Inspector,true);export function reload(){if(Components.dockController.canDock()&&Components.dockController.dockSide()===Components.DockController.State.Undocked){Host.InspectorFrontendHost.setIsDocked(true,function(){});}
window.location.reload();}
self.Components=self.Components||{};Components=Components||{};Components.reload=reload;export default class Linkifier{constructor(maxLengthForDisplayedURLs,useLinkDecorator){this._maxLength=maxLengthForDisplayedURLs||UI.MaxLengthForDisplayedURLs;this._anchorsByTarget=new Map();this._locationPoolByTarget=new Map();this._useLinkDecorator=!!useLinkDecorator;_instances.add(this);SDK.targetManager.observeTargets(this);}
static setLinkDecorator(decorator){console.assert(!_decorator,'Cannot re-register link decorator.');_decorator=decorator;decorator.addEventListener(LinkDecorator.Events.LinkIconChanged,onLinkIconChanged);for(const linkifier of _instances){linkifier._updateAllAnchorDecorations();}
function onLinkIconChanged(event){const uiSourceCode=(event.data);const links=uiSourceCode[_sourceCodeAnchors]||[];for(const link of links){Linkifier._updateLinkDecorations(link);}}}
_updateAllAnchorDecorations(){for(const anchors of this._anchorsByTarget.values()){for(const anchor of anchors){Linkifier._updateLinkDecorations(anchor);}}}
static _bindUILocation(anchor,uiLocation){Linkifier._linkInfo(anchor).uiLocation=uiLocation;if(!uiLocation){return;}
const uiSourceCode=uiLocation.uiSourceCode;let sourceCodeAnchors=uiSourceCode[_sourceCodeAnchors];if(!sourceCodeAnchors){sourceCodeAnchors=new Set();uiSourceCode[_sourceCodeAnchors]=sourceCodeAnchors;}
sourceCodeAnchors.add(anchor);}
static _unbindUILocation(anchor){const info=Linkifier._linkInfo(anchor);if(!info.uiLocation){return;}
const uiSourceCode=info.uiLocation.uiSourceCode;info.uiLocation=null;const sourceCodeAnchors=uiSourceCode[_sourceCodeAnchors];if(sourceCodeAnchors){sourceCodeAnchors.delete(anchor);}}
targetAdded(target){this._anchorsByTarget.set(target,[]);this._locationPoolByTarget.set(target,new Bindings.LiveLocationPool());}
targetRemoved(target){const locationPool=(this._locationPoolByTarget.remove(target));locationPool.disposeAll();const anchors=this._anchorsByTarget.remove(target);for(const anchor of anchors){const info=Linkifier._linkInfo(anchor);info.liveLocation=null;Linkifier._unbindUILocation(anchor);if(info.fallback){anchor.href=info.fallback.href;anchor.title=info.fallback.title;anchor.className=info.fallback.className;anchor.textContent=info.fallback.textContent;anchor[_infoSymbol]=info.fallback[_infoSymbol];}}}
maybeLinkifyScriptLocation(target,scriptId,sourceURL,lineNumber,columnNumber,classes){let fallbackAnchor=null;if(sourceURL){fallbackAnchor=Linkifier.linkifyURL(sourceURL,{className:classes,lineNumber:lineNumber,columnNumber:columnNumber,maxLength:this._maxLength});}
if(!target||target.isDisposed()){return fallbackAnchor;}
const debuggerModel=target.model(SDK.DebuggerModel);if(!debuggerModel){return fallbackAnchor;}
const rawLocation=(scriptId?debuggerModel.createRawLocationByScriptId(scriptId,lineNumber,columnNumber||0):null)||debuggerModel.createRawLocationByURL(sourceURL,lineNumber,columnNumber||0);if(!rawLocation){return fallbackAnchor;}
const anchor=Linkifier._createLink('',classes||'');const info=Linkifier._linkInfo(anchor);info.enableDecorator=this._useLinkDecorator;info.fallback=fallbackAnchor;info.liveLocation=Bindings.debuggerWorkspaceBinding.createLiveLocation(rawLocation,this._updateAnchor.bind(this,anchor),(this._locationPoolByTarget.get(rawLocation.debuggerModel.target())));const anchors=(this._anchorsByTarget.get(rawLocation.debuggerModel.target()));anchors.push(anchor);return anchor;}
linkifyScriptLocation(target,scriptId,sourceURL,lineNumber,columnNumber,classes){const scriptLink=this.maybeLinkifyScriptLocation(target,scriptId,sourceURL,lineNumber,columnNumber,classes);return scriptLink||Linkifier.linkifyURL(sourceURL,{className:classes,lineNumber:lineNumber,columnNumber:columnNumber,maxLength:this._maxLength});}
linkifyRawLocation(rawLocation,fallbackUrl,classes){return this.linkifyScriptLocation(rawLocation.debuggerModel.target(),rawLocation.scriptId,fallbackUrl,rawLocation.lineNumber,rawLocation.columnNumber,classes);}
maybeLinkifyConsoleCallFrame(target,callFrame,classes){return this.maybeLinkifyScriptLocation(target,callFrame.scriptId,callFrame.url,callFrame.lineNumber,callFrame.columnNumber,classes);}
linkifyStackTraceTopFrame(target,stackTrace,classes){console.assert(stackTrace.callFrames&&stackTrace.callFrames.length);const topFrame=stackTrace.callFrames[0];const fallbackAnchor=Linkifier.linkifyURL(topFrame.url,{className:classes,lineNumber:topFrame.lineNumber,columnNumber:topFrame.columnNumber,maxLength:this._maxLength});if(target.isDisposed()){return fallbackAnchor;}
const debuggerModel=target.model(SDK.DebuggerModel);const rawLocations=debuggerModel.createRawLocationsByStackTrace(stackTrace);if(rawLocations.length===0){return fallbackAnchor;}
const anchor=Linkifier._createLink('',classes||'');const info=Linkifier._linkInfo(anchor);info.enableDecorator=this._useLinkDecorator;info.fallback=fallbackAnchor;info.liveLocation=Bindings.debuggerWorkspaceBinding.createStackTraceTopFrameLiveLocation(rawLocations,this._updateAnchor.bind(this,anchor),(this._locationPoolByTarget.get(target)));const anchors=(this._anchorsByTarget.get(target));anchors.push(anchor);return anchor;}
linkifyCSSLocation(rawLocation,classes){const anchor=Linkifier._createLink('',classes||'');const info=Linkifier._linkInfo(anchor);info.enableDecorator=this._useLinkDecorator;info.liveLocation=Bindings.cssWorkspaceBinding.createLiveLocation(rawLocation,this._updateAnchor.bind(this,anchor),(this._locationPoolByTarget.get(rawLocation.cssModel().target())));const anchors=(this._anchorsByTarget.get(rawLocation.cssModel().target()));anchors.push(anchor);return anchor;}
reset(){for(const target of this._anchorsByTarget.keysArray()){this.targetRemoved(target);this.targetAdded(target);}}
dispose(){for(const target of this._anchorsByTarget.keysArray()){this.targetRemoved(target);}
SDK.targetManager.unobserveTargets(this);_instances.delete(this);}
_updateAnchor(anchor,liveLocation){Linkifier._unbindUILocation(anchor);const uiLocation=liveLocation.uiLocation();if(!uiLocation){return;}
Linkifier._bindUILocation(anchor,uiLocation);const text=uiLocation.linkText(true);Linkifier._setTrimmedText(anchor,text,this._maxLength);let titleText=uiLocation.uiSourceCode.url();if(typeof uiLocation.lineNumber==='number'){titleText+=':'+(uiLocation.lineNumber+1);}
anchor.title=titleText;anchor.classList.toggle('webkit-html-blackbox-link',liveLocation.isBlackboxed());Linkifier._updateLinkDecorations(anchor);}
static _updateLinkDecorations(anchor){const info=Linkifier._linkInfo(anchor);if(!info||!info.enableDecorator){return;}
if(!_decorator||!info.uiLocation){return;}
if(info.icon&&info.icon.parentElement){anchor.removeChild(info.icon);}
const icon=_decorator.linkIcon(info.uiLocation.uiSourceCode);if(icon){icon.style.setProperty('margin-right','2px');anchor.insertBefore(icon,anchor.firstChild);}
info.icon=icon;}
static linkifyURL(url,options){options=options||{};const text=options.text;const className=options.className||'';const lineNumber=options.lineNumber;const columnNumber=options.columnNumber;const preventClick=options.preventClick;const maxLength=options.maxLength||UI.MaxLengthForDisplayedURLs;if(!url||url.trim().toLowerCase().startsWith('javascript:')){const element=createElementWithClass('span',className);element.textContent=text||url||Common.UIString('(unknown)');return element;}
let linkText=text||Bindings.displayNameForURL(url);if(typeof lineNumber==='number'&&!text){linkText+=':'+(lineNumber+1);}
const title=linkText!==url?url:'';const link=Linkifier._createLink(linkText,className,maxLength,title,url,preventClick);const info=Linkifier._linkInfo(link);if(typeof lineNumber==='number'){info.lineNumber=lineNumber;}
if(typeof columnNumber==='number'){info.columnNumber=columnNumber;}
return link;}
static linkifyRevealable(revealable,text,fallbackHref){const link=Linkifier._createLink(text,'',UI.MaxLengthForDisplayedURLs,undefined,fallbackHref);Linkifier._linkInfo(link).revealable=revealable;return link;}
static _createLink(text,className,maxLength,title,href,preventClick){const link=createElementWithClass('span',className);link.classList.add('devtools-link');if(title){link.title=title;}
if(href){link.href=href;}
Linkifier._setTrimmedText(link,text,maxLength);link[_infoSymbol]={icon:null,enableDecorator:false,uiLocation:null,liveLocation:null,url:href||null,lineNumber:null,columnNumber:null,revealable:null,fallback:null};if(!preventClick){link.addEventListener('click',event=>{if(Linkifier._handleClick(event)){event.consume(true);}},false);link.addEventListener('keydown',event=>{if(isEnterKey(event)&&Linkifier._handleClick(event)){event.consume(true);}},false);}else{link.classList.add('devtools-link-prevent-click');}
UI.ARIAUtils.markAsLink(link);return link;}
static _setTrimmedText(link,text,maxLength){link.removeChildren();if(maxLength&&text.length>maxLength){const middleSplit=splitMiddle(text,maxLength);appendTextWithoutHashes(middleSplit[0]);appendHiddenText(middleSplit[1]);appendTextWithoutHashes(middleSplit[2]);}else{appendTextWithoutHashes(text);}
function appendHiddenText(string){const ellipsisNode=link.createChild('span','devtools-link-ellipsis').createTextChild('\u2026');ellipsisNode[_untruncatedNodeTextSymbol]=string;}
function appendTextWithoutHashes(string){const hashSplit=TextUtils.TextUtils.splitStringByRegexes(string,[/[a-f0-9]{20,}/g]);for(const match of hashSplit){if(match.regexIndex===-1){link.createTextChild(match.value);}else{link.createTextChild(match.value.substring(0,7));appendHiddenText(match.value.substring(7));}}}
function splitMiddle(string,maxLength){let leftIndex=Math.floor(maxLength/2);let rightIndex=string.length-Math.ceil(maxLength/2)+1;if(string.codePointAt(rightIndex-1)>=0x10000){rightIndex++;leftIndex++;}
if(leftIndex>0&&string.codePointAt(leftIndex-1)>=0x10000){leftIndex--;}
return[string.substring(0,leftIndex),string.substring(leftIndex,rightIndex),string.substring(rightIndex)];}}
static untruncatedNodeText(node){return node[_untruncatedNodeTextSymbol]||node.textContent;}
static _linkInfo(link){return(link?link[_infoSymbol]||null:null);}
static _handleClick(event){const link=(event.currentTarget);if(UI.isBeingEdited((event.target))||link.hasSelection()){return false;}
return Components.Linkifier.invokeFirstAction(link);}
static invokeFirstAction(link){const actions=Components.Linkifier._linkActions(link);if(actions.length){actions[0].handler.call(null);return true;}
return false;}
static _linkHandlerSetting(){if(!Linkifier._linkHandlerSettingInstance){Linkifier._linkHandlerSettingInstance=Common.settings.createSetting('openLinkHandler',ls`auto`);}
return Linkifier._linkHandlerSettingInstance;}
static registerLinkHandler(title,handler){_linkHandlers.set(title,handler);self.runtime.sharedInstance(LinkHandlerSettingUI)._update();}
static unregisterLinkHandler(title){_linkHandlers.delete(title);self.runtime.sharedInstance(LinkHandlerSettingUI)._update();}
static uiLocation(link){const info=Linkifier._linkInfo(link);return info?info.uiLocation:null;}
static _linkActions(link){const info=Linkifier._linkInfo(link);const result=[];if(!info){return result;}
let url='';let uiLocation=null;if(info.uiLocation){uiLocation=info.uiLocation;url=uiLocation.uiSourceCode.contentURL();}else if(info.url){url=info.url;const uiSourceCode=Workspace.workspace.uiSourceCodeForURL(url)||Workspace.workspace.uiSourceCodeForURL(Common.ParsedURL.urlWithoutHash(url));uiLocation=uiSourceCode?uiSourceCode.uiLocation(info.lineNumber||0,info.columnNumber||0):null;}
const resource=url?Bindings.resourceForURL(url):null;const contentProvider=uiLocation?uiLocation.uiSourceCode:resource;const revealable=info.revealable||uiLocation||resource;if(revealable){const destination=Common.Revealer.revealDestination(revealable);result.push({section:'reveal',title:destination?ls`Reveal in ${destination}`:ls`Reveal`,handler:()=>Common.Revealer.reveal(revealable)});}
if(contentProvider){const lineNumber=uiLocation?uiLocation.lineNumber:info.lineNumber||0;for(const title of _linkHandlers.keys()){const handler=_linkHandlers.get(title);const action={section:'reveal',title:Common.UIString('Open using %s',title),handler:handler.bind(null,contentProvider,lineNumber)};if(title===Linkifier._linkHandlerSetting().get()){result.unshift(action);}else{result.push(action);}}}
if(resource||info.url){result.push({section:'reveal',title:UI.openLinkExternallyLabel(),handler:()=>Host.InspectorFrontendHost.openInNewTab(url)});result.push({section:'clipboard',title:UI.copyLinkAddressLabel(),handler:()=>Host.InspectorFrontendHost.copyText(url)});}
return result;}}
const _instances=new Set();let _decorator=null;const _sourceCodeAnchors=Symbol('Linkifier.anchors');const _infoSymbol=Symbol('Linkifier.info');const _untruncatedNodeTextSymbol=Symbol('Linkifier.untruncatedNodeText');const _linkHandlers=new Map();export class LinkDecorator{linkIcon(uiSourceCode){}}
LinkDecorator.Events={LinkIconChanged:Symbol('LinkIconChanged')};export class LinkContextMenuProvider{appendApplicableItems(event,contextMenu,target){let targetNode=(target);while(targetNode&&!targetNode[_infoSymbol]){targetNode=targetNode.parentNodeOrShadowHost();}
const link=(targetNode);const actions=Linkifier._linkActions(link);for(const action of actions){contextMenu.section(action.section).appendItem(action.title,action.handler);}}}
export class LinkHandlerSettingUI{constructor(){this._element=createElementWithClass('select','chrome-select');this._element.addEventListener('change',this._onChange.bind(this),false);this._update();}
_update(){this._element.removeChildren();const names=_linkHandlers.keysArray();names.unshift(Common.UIString('auto'));for(const name of names){const option=createElement('option');option.textContent=name;option.selected=name===Linkifier._linkHandlerSetting().get();this._element.appendChild(option);}
this._element.disabled=names.length<=1;}
_onChange(event){const value=event.target.value;Linkifier._linkHandlerSetting().set(value);}
settingElement(){return UI.SettingsUI.createCustomSetting(Common.UIString('Link handling:'),this._element);}}
export class ContentProviderContextMenuProvider{appendApplicableItems(event,contextMenu,target){const contentProvider=(target);if(!contentProvider.contentURL()){return;}
contextMenu.revealSection().appendItem(UI.openLinkExternallyLabel(),()=>Host.InspectorFrontendHost.openInNewTab(contentProvider.contentURL()));for(const title of _linkHandlers.keys()){const handler=_linkHandlers.get(title);contextMenu.revealSection().appendItem(Common.UIString('Open using %s',title),handler.bind(null,contentProvider,0));}
if(contentProvider instanceof SDK.NetworkRequest){return;}
contextMenu.clipboardSection().appendItem(UI.copyLinkAddressLabel(),()=>Host.InspectorFrontendHost.copyText(contentProvider.contentURL()));}}
self.Components=self.Components||{};Components=Components||{};Components.Linkifier=Linkifier;Components.Linkifier.LinkContextMenuProvider=LinkContextMenuProvider;Components.Linkifier.LinkHandlerSettingUI=LinkHandlerSettingUI;Components.Linkifier.ContentProviderContextMenuProvider=ContentProviderContextMenuProvider;Components.LinkDecorator=LinkDecorator;Components._LinkInfo;Components.LinkifyURLOptions;Components.Linkifier.LinkHandler;export function buildStackTracePreviewContents(target,linkifier,stackTrace,contentUpdated){const element=createElementWithClass('span','monospace');element.style.display='inline-block';const shadowRoot=UI.createShadowRootWithCoreStyles(element,'components/jsUtils.css');const contentElement=shadowRoot.createChild('table','stack-preview-container');let totalHiddenCallFramesCount=0;let totalCallFramesCount=0;const links=[];function appendStackTrace(stackTrace){let hiddenCallFrames=0;for(const stackFrame of stackTrace.callFrames){totalCallFramesCount++;let shouldHide=totalCallFramesCount>30&&stackTrace.callFrames.length>31;const row=createElement('tr');row.createChild('td').textContent='\n';row.createChild('td','function-name').textContent=UI.beautifyFunctionName(stackFrame.functionName);const link=linkifier.maybeLinkifyConsoleCallFrame(target,stackFrame);if(link){link.addEventListener('contextmenu',populateContextMenu.bind(null,link));const uiLocation=Components.Linkifier.uiLocation(link);if(uiLocation&&Bindings.blackboxManager.isBlackboxedUISourceCode(uiLocation.uiSourceCode)){shouldHide=true;}
row.createChild('td').textContent=' @ ';row.createChild('td').appendChild(link);links.push(link);}
if(shouldHide){row.classList.add('blackboxed');++hiddenCallFrames;}
contentElement.appendChild(row);}
totalHiddenCallFramesCount+=hiddenCallFrames;return stackTrace.callFrames.length===hiddenCallFrames;}
function populateContextMenu(link,event){const contextMenu=new UI.ContextMenu(event);event.consume(true);const uiLocation=Components.Linkifier.uiLocation(link);if(uiLocation&&Bindings.blackboxManager.canBlackboxUISourceCode(uiLocation.uiSourceCode)){if(Bindings.blackboxManager.isBlackboxedUISourceCode(uiLocation.uiSourceCode)){contextMenu.debugSection().appendItem(ls`Stop blackboxing`,()=>Bindings.blackboxManager.unblackboxUISourceCode(uiLocation.uiSourceCode));}else{contextMenu.debugSection().appendItem(ls`Blackbox script`,()=>Bindings.blackboxManager.blackboxUISourceCode(uiLocation.uiSourceCode));}}
contextMenu.appendApplicableItems(event);contextMenu.show();}
if(!stackTrace){return{element,links};}
appendStackTrace(stackTrace);let asyncStackTrace=stackTrace.parent;while(asyncStackTrace){if(!asyncStackTrace.callFrames.length){asyncStackTrace=asyncStackTrace.parent;continue;}
const row=contentElement.createChild('tr');row.createChild('td').textContent='\n';row.createChild('td','stack-preview-async-description').textContent=UI.asyncStackTraceLabel(asyncStackTrace.description);row.createChild('td');row.createChild('td');if(appendStackTrace(asyncStackTrace)){row.classList.add('blackboxed');}
asyncStackTrace=asyncStackTrace.parent;}
if(totalHiddenCallFramesCount){const row=contentElement.createChild('tr','show-blackboxed-link');row.createChild('td').textContent='\n';const cell=row.createChild('td');cell.colSpan=4;const showAllLink=cell.createChild('span','link');if(totalHiddenCallFramesCount===1){showAllLink.textContent=ls`Show 1 more frame`;}else{showAllLink.textContent=ls`Show ${totalHiddenCallFramesCount} more frames`;}
showAllLink.addEventListener('click',()=>{contentElement.classList.add('show-blackboxed');if(contentUpdated){contentUpdated();}},false);}
return{element,links};}
self.Components=self.Components||{};Components=Components||{};Components.JSPresentationUtils={};Components.JSPresentationUtils.buildStackTracePreviewContents=buildStackTracePreviewContents;export default class ImagePreview{static build(target,originalImageURL,showDimensions,options={}){const{precomputedFeatures,imageAltText}=options;const resourceTreeModel=target.model(SDK.ResourceTreeModel);if(!resourceTreeModel){return Promise.resolve((null));}
let resource=resourceTreeModel.resourceForURL(originalImageURL);let imageURL=originalImageURL;if(!isImageResource(resource)&&precomputedFeatures&&precomputedFeatures.currentSrc){imageURL=precomputedFeatures.currentSrc;resource=resourceTreeModel.resourceForURL(imageURL);}
if(!isImageResource(resource)){return Promise.resolve((null));}
let fulfill;const promise=new Promise(x=>fulfill=x);const imageElement=createElement('img');imageElement.addEventListener('load',buildContent,false);imageElement.addEventListener('error',()=>fulfill(null),false);if(imageAltText){imageElement.alt=imageAltText;}
resource.populateImageSource(imageElement);return promise;function isImageResource(resource){return!!resource&&resource.resourceType()===Common.resourceTypes.Image;}
function buildContent(){const container=createElement('table');UI.appendStyle(container,'components/imagePreview.css');container.className='image-preview-container';const intrinsicWidth=imageElement.naturalWidth;const intrinsicHeight=imageElement.naturalHeight;const renderedWidth=precomputedFeatures?precomputedFeatures.renderedWidth:intrinsicWidth;const renderedHeight=precomputedFeatures?precomputedFeatures.renderedHeight:intrinsicHeight;let description;if(showDimensions){if(renderedHeight!==intrinsicHeight||renderedWidth!==intrinsicWidth){description=ls`${renderedWidth} \xd7 ${renderedHeight} pixels (intrinsic: ${intrinsicWidth} \xd7 ${
              intrinsicHeight} pixels)`;}else{description=ls`${renderedWidth} \xd7 ${renderedHeight} pixels`;}}
container.createChild('tr').createChild('td','image-container').appendChild(imageElement);if(description){container.createChild('tr').createChild('td').createChild('span','description').textContent=description;}
if(imageURL!==originalImageURL){container.createChild('tr').createChild('td').createChild('span','description').textContent=String.sprintf('currentSrc: %s',imageURL.trimMiddle(100));}
fulfill(container);}}
static async loadDimensionsForNode(node){if(!node.nodeName()||node.nodeName().toLowerCase()!=='img'){return;}
const object=await node.resolveToObject('');if(!object){return;}
const featuresObject=object.callFunctionJSON(features,undefined);object.release();return featuresObject;function features(){return{renderedWidth:this.width,renderedHeight:this.height,currentSrc:this.currentSrc};}}
static defaultAltTextForImageURL(url){const parsedImageURL=new Common.ParsedURL(url);const imageSourceText=parsedImageURL.isValid?parsedImageURL.displayName:ls`unknown source`;return ls`Image from ${imageSourceText}`;}}
self.Components=self.Components||{};Components=Components||{};Components.ImagePreview=ImagePreview;export default class DockController extends Common.Object{constructor(canDock){super();this._canDock=canDock;this._closeButton=new UI.ToolbarButton(Common.UIString('Close'),'largeicon-delete');this._closeButton.addEventListener(UI.ToolbarButton.Events.Click,Host.InspectorFrontendHost.closeWindow.bind(Host.InspectorFrontendHost));if(!canDock){this._dockSide=State.Undocked;this._closeButton.setVisible(false);return;}
this._states=[State.DockedToRight,State.DockedToBottom,State.DockedToLeft,State.Undocked];this._currentDockStateSetting=Common.settings.moduleSetting('currentDockState');this._currentDockStateSetting.addChangeListener(this._dockSideChanged,this);this._lastDockStateSetting=Common.settings.createSetting('lastDockState','bottom');if(this._states.indexOf(this._currentDockStateSetting.get())===-1){this._currentDockStateSetting.set('right');}
if(this._states.indexOf(this._lastDockStateSetting.get())===-1){this._currentDockStateSetting.set('bottom');}}
initialize(){if(!this._canDock){return;}
this._titles=[Common.UIString('Dock to right'),Common.UIString('Dock to bottom'),Common.UIString('Dock to left'),Common.UIString('Undock into separate window')];this._dockSideChanged();}
_dockSideChanged(){this.setDockSide(this._currentDockStateSetting.get());}
dockSide(){return this._dockSide;}
canDock(){return this._canDock;}
isVertical(){return this._dockSide===State.DockedToRight||this._dockSide===State.DockedToLeft;}
setDockSide(dockSide){if(this._states.indexOf(dockSide)===-1){dockSide=this._states[0];}
if(this._dockSide===dockSide){return;}
if(this._dockSide){this._lastDockStateSetting.set(this._dockSide);}
this._savedFocus=document.deepActiveElement();const eventData={from:this._dockSide,to:dockSide};this.dispatchEventToListeners(Events.BeforeDockSideChanged,eventData);console.timeStamp('DockController.setIsDocked');this._dockSide=dockSide;this._currentDockStateSetting.set(dockSide);Host.InspectorFrontendHost.setIsDocked(dockSide!==State.Undocked,this._setIsDockedResponse.bind(this,eventData));this._closeButton.setVisible(this._dockSide!==State.Undocked);this.dispatchEventToListeners(Events.DockSideChanged,eventData);}
_setIsDockedResponse(eventData){this.dispatchEventToListeners(Events.AfterDockSideChanged,eventData);if(this._savedFocus){this._savedFocus.focus();this._savedFocus=null;}}
_toggleDockSide(){if(this._lastDockStateSetting.get()===this._currentDockStateSetting.get()){const index=this._states.indexOf(this._currentDockStateSetting.get())||0;this._lastDockStateSetting.set(this._states[(index+1)%this._states.length]);}
this.setDockSide(this._lastDockStateSetting.get());}}
export const State={DockedToBottom:'bottom',DockedToRight:'right',DockedToLeft:'left',Undocked:'undocked'};export const Events={BeforeDockSideChanged:Symbol('BeforeDockSideChanged'),DockSideChanged:Symbol('DockSideChanged'),AfterDockSideChanged:Symbol('AfterDockSideChanged')};export class ToggleDockActionDelegate{handleAction(context,actionId){Components.dockController._toggleDockSide();return true;}}
export class CloseButtonProvider{item(){return Components.dockController._closeButton;}}
self.Components=self.Components||{};Components=Components||{};Components.DockController=DockController;Components.DockController.State=State;Components.DockController.Events=Events;Components.DockController.ToggleDockActionDelegate=ToggleDockActionDelegate;Components.DockController.CloseButtonProvider=CloseButtonProvider;Components.dockController;import'./LiveLocation.js';import'./ResourceMapping.js';import*as BlackboxManager from'./BlackboxManager.js';import*as BreakpointManager from'./BreakpointManager.js';import*as CompilerScriptMapping from'./CompilerScriptMapping.js';import*as ContentProviderBasedProject from'./ContentProviderBasedProject.js';import*as CSSWorkspaceBinding from'./CSSWorkspaceBinding.js';import*as DebuggerWorkspaceBinding from'./DebuggerWorkspaceBinding.js';import*as DefaultScriptMapping from'./DefaultScriptMapping.js';import*as FileUtils from'./FileUtils.js';import*as LiveLocation from'./LiveLocation.js';import*as NetworkProject from'./NetworkProject.js';import*as PresentationConsoleMessageHelper from'./PresentationConsoleMessageHelper.js';import*as ResourceMapping from'./ResourceMapping.js';import*as ResourceScriptMapping from'./ResourceScriptMapping.js';import*as ResourceUtils from'./ResourceUtils.js';import*as SASSSourceMapping from'./SASSSourceMapping.js';import*as StylesSourceMapping from'./StylesSourceMapping.js';import*as TempFile from'./TempFile.js';export{BlackboxManager,BreakpointManager,CompilerScriptMapping,ContentProviderBasedProject,CSSWorkspaceBinding,DebuggerWorkspaceBinding,DefaultScriptMapping,FileUtils,LiveLocation,NetworkProject,PresentationConsoleMessageHelper,ResourceMapping,ResourceScriptMapping,ResourceUtils,SASSSourceMapping,StylesSourceMapping,TempFile,};export default class TempFile{constructor(){this._lastBlob=null;}
write(pieces){if(this._lastBlob){pieces.unshift(this._lastBlob);}
this._lastBlob=new Blob(pieces,{type:'text/plain'});}
read(){return this.readRange();}
size(){return this._lastBlob?this._lastBlob.size:0;}
async readRange(startOffset,endOffset){if(!this._lastBlob){Common.console.error('Attempt to read a temp file that was never written');return Promise.resolve('');}
const blob=typeof startOffset==='number'||typeof endOffset==='number'?this._lastBlob.slice((startOffset),(endOffset)):this._lastBlob;const reader=new FileReader();try{await new Promise((resolve,reject)=>{reader.onloadend=resolve;reader.onerror=reject;reader.readAsText(blob);});}catch(error){Common.console.error('Failed to read from temp file: '+error.message);}
return(reader.result);}
copyToOutputStream(outputStream,progress){if(!this._lastBlob){outputStream.close();return Promise.resolve((null));}
const reader=new Bindings.ChunkedFileReader((this._lastBlob),10*1000*1000,progress);return reader.read(outputStream).then(success=>success?null:reader.error());}
remove(){this._lastBlob=null;}}
export class TempFileBackingStorage{constructor(){this._file=null;this._strings;this._stringsLength;this.reset();}
appendString(string){this._strings.push(string);this._stringsLength+=string.length;const flushStringLength=10*1024*1024;if(this._stringsLength>flushStringLength){this._flush();}}
appendAccessibleString(string){this._flush();const startOffset=this._file.size();this._strings.push(string);this._flush();return this._file.readRange.bind(this._file,startOffset,this._file.size());}
_flush(){if(!this._strings.length){return;}
if(!this._file){this._file=new TempFile();}
this._stringsLength=0;this._file.write(this._strings.splice(0));}
finishWriting(){this._flush();}
reset(){if(this._file){this._file.remove();}
this._file=null;this._strings=[];this._stringsLength=0;}
writeToStream(outputStream){return this._file?this._file.copyToOutputStream(outputStream):Promise.resolve(null);}}
self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.TempFile=TempFile;Bindings.TempFileBackingStorage=TempFileBackingStorage;Bindings.TempFileBackingStorage.Chunk;export default class StylesSourceMapping{constructor(cssModel,workspace){this._cssModel=cssModel;const target=this._cssModel.target();this._project=new Bindings.ContentProviderBasedProject(workspace,'css:'+target.id(),Workspace.projectTypes.Network,'',false);Bindings.NetworkProject.setTargetForProject(this._project,target);this._styleFiles=new Map();this._eventListeners=[this._cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded,this._styleSheetAdded,this),this._cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetRemoved,this._styleSheetRemoved,this),this._cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged,this._styleSheetChanged,this),];}
rawLocationToUILocation(rawLocation){const header=rawLocation.header();if(!header||!this._acceptsHeader(header)){return null;}
const styleFile=this._styleFiles.get(header.resourceURL());if(!styleFile){return null;}
let lineNumber=rawLocation.lineNumber;let columnNumber=rawLocation.columnNumber;if(header.isInline&&header.hasSourceURL){lineNumber-=header.lineNumberInSource(0);columnNumber-=header.columnNumberInSource(lineNumber,0);}
return styleFile._uiSourceCode.uiLocation(lineNumber,columnNumber);}
uiLocationToRawLocations(uiLocation){const styleFile=uiLocation.uiSourceCode[StyleFile._symbol];if(!styleFile){return[];}
const rawLocations=[];for(const header of styleFile._headers){let lineNumber=uiLocation.lineNumber;let columnNumber=uiLocation.columnNumber;if(header.isInline&&header.hasSourceURL){columnNumber=header.columnNumberInSource(lineNumber,columnNumber);lineNumber=header.lineNumberInSource(lineNumber);}
rawLocations.push(new SDK.CSSLocation(header,lineNumber,columnNumber));}
return rawLocations;}
_acceptsHeader(header){if(header.isInline&&!header.hasSourceURL&&header.origin!=='inspector'){return false;}
if(!header.resourceURL()){return false;}
return true;}
_styleSheetAdded(event){const header=(event.data);if(!this._acceptsHeader(header)){return;}
const url=header.resourceURL();let styleFile=this._styleFiles.get(url);if(!styleFile){styleFile=new StyleFile(this._cssModel,this._project,header);this._styleFiles.set(url,styleFile);}else{styleFile.addHeader(header);}}
_styleSheetRemoved(event){const header=(event.data);if(!this._acceptsHeader(header)){return;}
const url=header.resourceURL();const styleFile=this._styleFiles.get(url);if(styleFile._headers.size===1){styleFile.dispose();this._styleFiles.delete(url);}else{styleFile.removeHeader(header);}}
_styleSheetChanged(event){const header=this._cssModel.styleSheetHeaderForId(event.data.styleSheetId);if(!header||!this._acceptsHeader(header)){return;}
const styleFile=this._styleFiles.get(header.resourceURL());styleFile._styleSheetChanged(header);}
dispose(){for(const styleFile of this._styleFiles.values()){styleFile.dispose();}
this._styleFiles.clear();Common.EventTarget.removeEventListeners(this._eventListeners);this._project.removeProject();}}
export class StyleFile{constructor(cssModel,project,header){this._cssModel=cssModel;this._project=project;this._headers=new Set([header]);const target=cssModel.target();const url=header.resourceURL();const metadata=Bindings.metadataForURL(target,header.frameId,url);this._uiSourceCode=this._project.createUISourceCode(url,header.contentType());this._uiSourceCode[StyleFile._symbol]=this;Bindings.NetworkProject.setInitialFrameAttribution(this._uiSourceCode,header.frameId);this._project.addUISourceCodeWithProvider(this._uiSourceCode,this,metadata,'text/css');this._eventListeners=[this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._workingCopyChanged,this),this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._workingCopyCommitted,this)];this._throttler=new Common.Throttler(StyleFile.updateTimeout);this._terminated=false;}
addHeader(header){this._headers.add(header);Bindings.NetworkProject.addFrameAttribution(this._uiSourceCode,header.frameId);}
removeHeader(header){this._headers.delete(header);Bindings.NetworkProject.removeFrameAttribution(this._uiSourceCode,header.frameId);}
_styleSheetChanged(header){console.assert(this._headers.has(header));if(this._isUpdatingHeaders||!this._headers.has(header)){return;}
const mirrorContentBound=this._mirrorContent.bind(this,header,true);this._throttler.schedule(mirrorContentBound,false);}
_workingCopyCommitted(event){if(this._isAddingRevision){return;}
const mirrorContentBound=this._mirrorContent.bind(this,this._uiSourceCode,true);this._throttler.schedule(mirrorContentBound,true);}
_workingCopyChanged(event){if(this._isAddingRevision){return;}
const mirrorContentBound=this._mirrorContent.bind(this,this._uiSourceCode,false);this._throttler.schedule(mirrorContentBound,false);}
async _mirrorContent(fromProvider,majorChange){if(this._terminated){this._styleFileSyncedForTest();return;}
let newContent=null;if(fromProvider===this._uiSourceCode){newContent=this._uiSourceCode.workingCopy();}else{const deferredContent=await fromProvider.requestContent();newContent=deferredContent.content;}
if(newContent===null||this._terminated){this._styleFileSyncedForTest();return;}
if(fromProvider!==this._uiSourceCode){this._isAddingRevision=true;this._uiSourceCode.addRevision(newContent);this._isAddingRevision=false;}
this._isUpdatingHeaders=true;const promises=[];for(const header of this._headers){if(header===fromProvider){continue;}
promises.push(this._cssModel.setStyleSheetText(header.id,newContent,majorChange));}
await Promise.all(promises);this._isUpdatingHeaders=false;this._styleFileSyncedForTest();}
_styleFileSyncedForTest(){}
dispose(){if(this._terminated){return;}
this._terminated=true;this._project.removeFile(this._uiSourceCode.url());Common.EventTarget.removeEventListeners(this._eventListeners);}
contentURL(){return this._headers.firstValue().originalContentProvider().contentURL();}
contentType(){return this._headers.firstValue().originalContentProvider().contentType();}
contentEncoded(){return this._headers.firstValue().originalContentProvider().contentEncoded();}
requestContent(){return this._headers.firstValue().originalContentProvider().requestContent();}
searchInContent(query,caseSensitive,isRegex){return this._headers.firstValue().originalContentProvider().searchInContent(query,caseSensitive,isRegex);}}
StyleFile._symbol=Symbol('Bindings.StyleFile._symbol');StyleFile.updateTimeout=200;self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.StylesSourceMapping=StylesSourceMapping;Bindings.StyleFile=StyleFile;export default class SASSSourceMapping{constructor(target,sourceMapManager,workspace){this._sourceMapManager=sourceMapManager;this._project=new Bindings.ContentProviderBasedProject(workspace,'cssSourceMaps:'+target.id(),Workspace.projectTypes.Network,'',false);Bindings.NetworkProject.setTargetForProject(this._project,target);this._eventListeners=[this._sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapAttached,this._sourceMapAttached,this),this._sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapDetached,this._sourceMapDetached,this),this._sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapChanged,this._sourceMapChanged,this)];}
_sourceMapAttachedForTest(sourceMap){}
_sourceMapAttached(event){const header=(event.data.client);const sourceMap=(event.data.sourceMap);for(const sassURL of sourceMap.sourceURLs()){let uiSourceCode=this._project.uiSourceCodeForURL(sassURL);if(uiSourceCode){Bindings.NetworkProject.addFrameAttribution(uiSourceCode,header.frameId);continue;}
const contentProvider=sourceMap.sourceContentProvider(sassURL,Common.resourceTypes.SourceMapStyleSheet);const mimeType=Common.ResourceType.mimeFromURL(sassURL)||contentProvider.contentType().canonicalMimeType();const embeddedContent=sourceMap.embeddedContentByURL(sassURL);const metadata=typeof embeddedContent==='string'?new Workspace.UISourceCodeMetadata(null,embeddedContent.length):null;uiSourceCode=this._project.createUISourceCode(sassURL,contentProvider.contentType());Bindings.NetworkProject.setInitialFrameAttribution(uiSourceCode,header.frameId);uiSourceCode[_sourceMapSymbol]=sourceMap;this._project.addUISourceCodeWithProvider(uiSourceCode,contentProvider,metadata,mimeType);}
Bindings.cssWorkspaceBinding.updateLocations(header);this._sourceMapAttachedForTest(sourceMap);}
_sourceMapDetached(event){const header=(event.data.client);const sourceMap=(event.data.sourceMap);const headers=this._sourceMapManager.clientsForSourceMap(sourceMap);for(const sassURL of sourceMap.sourceURLs()){if(headers.length){const uiSourceCode=(this._project.uiSourceCodeForURL(sassURL));Bindings.NetworkProject.removeFrameAttribution(uiSourceCode,header.frameId);}else{this._project.removeFile(sassURL);}}
Bindings.cssWorkspaceBinding.updateLocations(header);}
_sourceMapChanged(event){const sourceMap=(event.data.sourceMap);const newSources=(event.data.newSources);const headers=this._sourceMapManager.clientsForSourceMap(sourceMap);for(const sourceURL of newSources.keys()){const uiSourceCode=this._project.uiSourceCodeForURL(sourceURL);if(!uiSourceCode){console.error('Failed to update source for '+sourceURL);continue;}
const sassText=(newSources.get(sourceURL));uiSourceCode.setWorkingCopy(sassText);}
for(const header of headers){Bindings.cssWorkspaceBinding.updateLocations(header);}}
rawLocationToUILocation(rawLocation){const header=rawLocation.header();if(!header){return null;}
const sourceMap=this._sourceMapManager.sourceMapForClient(header);if(!sourceMap){return null;}
const entry=sourceMap.findEntry(rawLocation.lineNumber,rawLocation.columnNumber);if(!entry||!entry.sourceURL){return null;}
const uiSourceCode=this._project.uiSourceCodeForURL(entry.sourceURL);if(!uiSourceCode){return null;}
return uiSourceCode.uiLocation(entry.sourceLineNumber||0,entry.sourceColumnNumber);}
uiLocationToRawLocations(uiLocation){const sourceMap=uiLocation.uiSourceCode[_sourceMapSymbol];if(!sourceMap){return[];}
const entries=sourceMap.findReverseEntries(uiLocation.uiSourceCode.url(),uiLocation.lineNumber,uiLocation.columnNumber);const locations=[];for(const header of this._sourceMapManager.clientsForSourceMap(sourceMap)){locations.pushAll(entries.map(entry=>new SDK.CSSLocation(header,entry.lineNumber,entry.columnNumber)));}
return locations;}
dispose(){this._project.dispose();Common.EventTarget.removeEventListeners(this._eventListeners);}}
const _sourceMapSymbol=Symbol('sourceMap');self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.SASSSourceMapping=SASSSourceMapping;export function resourceForURL(url){for(const resourceTreeModel of SDK.targetManager.models(SDK.ResourceTreeModel)){const resource=resourceTreeModel.resourceForURL(url);if(resource){return resource;}}
return null;}
export function displayNameForURL(url){if(!url){return'';}
const resource=Bindings.resourceForURL(url);if(resource){return resource.displayName;}
const uiSourceCode=Workspace.workspace.uiSourceCodeForURL(url);if(uiSourceCode){return uiSourceCode.displayName();}
const mainTarget=SDK.targetManager.mainTarget();const inspectedURL=mainTarget&&mainTarget.inspectedURL();if(!inspectedURL){return url.trimURL('');}
const parsedURL=inspectedURL.asParsedURL();const lastPathComponent=parsedURL?parsedURL.lastPathComponent:parsedURL;const index=inspectedURL.indexOf(lastPathComponent);if(index!==-1&&index+lastPathComponent.length===inspectedURL.length){const baseURL=inspectedURL.substring(0,index);if(url.startsWith(baseURL)){return url.substring(index);}}
if(!parsedURL){return url;}
const displayName=url.trimURL(parsedURL.host);return displayName==='/'?parsedURL.host+'/':displayName;}
export function metadataForURL(target,frameId,url){const resourceTreeModel=target.model(SDK.ResourceTreeModel);if(!resourceTreeModel){return null;}
const frame=resourceTreeModel.frameForId(frameId);if(!frame){return null;}
return Bindings.resourceMetadata(frame.resourceForURL(url));}
export function resourceMetadata(resource){if(!resource||(typeof resource.contentSize()!=='number'&&!resource.lastModified())){return null;}
return new Workspace.UISourceCodeMetadata(resource.lastModified(),resource.contentSize());}
export function frameIdForScript(script){const executionContext=script.executionContext();if(executionContext){return executionContext.frameId||'';}
const resourceTreeModel=script.debuggerModel.target().model(SDK.ResourceTreeModel);if(!resourceTreeModel||!resourceTreeModel.mainFrame){return'';}
return resourceTreeModel.mainFrame.id;}
self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.resourceForURL=resourceForURL;Bindings.displayNameForURL=displayNameForURL;Bindings.metadataForURL=metadataForURL;Bindings.resourceMetadata=resourceMetadata;Bindings.frameIdForScript=frameIdForScript;export default class ResourceScriptMapping{constructor(debuggerModel,workspace,debuggerWorkspaceBinding){this._debuggerModel=debuggerModel;this._workspace=workspace;this._debuggerWorkspaceBinding=debuggerWorkspaceBinding;this._uiSourceCodeToScriptFile=new Map();this._projects=new Map();this._acceptedScripts=new Set();const runtimeModel=debuggerModel.runtimeModel();this._eventListeners=[this._debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource,this._parsedScriptSource,this),this._debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared,this._globalObjectCleared,this),runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExecutionContextDestroyed,this._executionContextDestroyed,this),];}
_project(script){const frameId=script[_frameIdSymbol];const prefix=script.isContentScript()?'js:extensions:':'js::';const projectId=prefix+this._debuggerModel.target().id()+':'+frameId;let project=this._projects.get(projectId);if(!project){const projectType=script.isContentScript()?Workspace.projectTypes.ContentScripts:Workspace.projectTypes.Network;project=new Bindings.ContentProviderBasedProject(this._workspace,projectId,projectType,'',false);Bindings.NetworkProject.setTargetForProject(project,this._debuggerModel.target());this._projects.set(projectId,project);}
return project;}
rawLocationToUILocation(rawLocation){const script=rawLocation.script();if(!script){return null;}
const project=this._project(script);const uiSourceCode=project.uiSourceCodeForURL(script.sourceURL);if(!uiSourceCode){return null;}
const scriptFile=this._uiSourceCodeToScriptFile.get(uiSourceCode);if(!scriptFile){return null;}
if((scriptFile.hasDivergedFromVM()&&!scriptFile.isMergingToVM())||scriptFile.isDivergingFromVM()){return null;}
if(!scriptFile._hasScripts([script])){return null;}
const lineNumber=rawLocation.lineNumber-(script.isInlineScriptWithSourceURL()?script.lineOffset:0);let columnNumber=rawLocation.columnNumber||0;if(script.isInlineScriptWithSourceURL()&&!lineNumber&&columnNumber){columnNumber-=script.columnOffset;}
return uiSourceCode.uiLocation(lineNumber,columnNumber);}
uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber){const scriptFile=this._uiSourceCodeToScriptFile.get(uiSourceCode);if(!scriptFile){return[];}
const script=scriptFile._script;if(script.isInlineScriptWithSourceURL()){return[this._debuggerModel.createRawLocation(script,lineNumber+script.lineOffset,lineNumber?columnNumber:columnNumber+script.columnOffset)];}
return[this._debuggerModel.createRawLocation(script,lineNumber,columnNumber)];}
_acceptsScript(script){if(!script.sourceURL||script.isLiveEdit()||(script.isInlineScript()&&!script.hasSourceURL)){return false;}
if(script.isContentScript()&&!script.hasSourceURL){const parsedURL=new Common.ParsedURL(script.sourceURL);if(!parsedURL.isValid){return false;}}
return true;}
_parsedScriptSource(event){const script=(event.data);if(!this._acceptsScript(script)){return;}
this._acceptedScripts.add(script);const originalContentProvider=script.originalContentProvider();const frameId=Bindings.frameIdForScript(script);script[_frameIdSymbol]=frameId;const url=script.sourceURL;const project=this._project(script);const oldUISourceCode=project.uiSourceCodeForURL(url);if(oldUISourceCode){const scriptFile=this._uiSourceCodeToScriptFile.get(oldUISourceCode);this._removeScript(scriptFile._script);}
const uiSourceCode=project.createUISourceCode(url,originalContentProvider.contentType());Bindings.NetworkProject.setInitialFrameAttribution(uiSourceCode,frameId);const metadata=Bindings.metadataForURL(this._debuggerModel.target(),frameId,url);const scriptFile=new ResourceScriptFile(this,uiSourceCode,[script]);this._uiSourceCodeToScriptFile.set(uiSourceCode,scriptFile);project.addUISourceCodeWithProvider(uiSourceCode,originalContentProvider,metadata,'text/javascript');this._debuggerWorkspaceBinding.updateLocations(script);}
scriptFile(uiSourceCode){return this._uiSourceCodeToScriptFile.get(uiSourceCode)||null;}
_removeScript(script){if(!this._acceptedScripts.has(script)){return;}
this._acceptedScripts.delete(script);const project=this._project(script);const uiSourceCode=(project.uiSourceCodeForURL(script.sourceURL));const scriptFile=this._uiSourceCodeToScriptFile.get(uiSourceCode);scriptFile.dispose();this._uiSourceCodeToScriptFile.delete(uiSourceCode);project.removeFile(script.sourceURL);this._debuggerWorkspaceBinding.updateLocations(script);}
_executionContextDestroyed(event){const executionContext=(event.data);const scripts=this._debuggerModel.scriptsForExecutionContext(executionContext);for(const script of scripts){this._removeScript(script);}}
_globalObjectCleared(event){const scripts=Array.from(this._acceptedScripts);for(const script of scripts){this._removeScript(script);}}
resetForTest(){const scripts=Array.from(this._acceptedScripts);for(const script of scripts){this._removeScript(script);}}
dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);const scripts=Array.from(this._acceptedScripts);for(const script of scripts){this._removeScript(script);}
for(const project of this._projects.values()){project.removeProject();}
this._projects.clear();}}
export class ResourceScriptFile extends Common.Object{constructor(resourceScriptMapping,uiSourceCode,scripts){super();console.assert(scripts.length);this._resourceScriptMapping=resourceScriptMapping;this._uiSourceCode=uiSourceCode;if(this._uiSourceCode.contentType().isScript()){this._script=scripts[scripts.length-1];}
this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._workingCopyChanged,this);this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._workingCopyCommitted,this);}
_hasScripts(scripts){return this._script&&this._script===scripts[0];}
_isDiverged(){if(this._uiSourceCode.isDirty()){return true;}
if(!this._script){return false;}
if(typeof this._scriptSource==='undefined'){return false;}
const workingCopy=this._uiSourceCode.workingCopy();if(!workingCopy){return false;}
if(!workingCopy.startsWith(this._scriptSource.trimRight())){return true;}
const suffix=this._uiSourceCode.workingCopy().substr(this._scriptSource.length);return!!suffix.length&&!suffix.match(SDK.Script.sourceURLRegex);}
_workingCopyChanged(event){this._update();}
_workingCopyCommitted(event){if(this._uiSourceCode.project().canSetFileContent()){return;}
if(!this._script){return;}
const debuggerModel=this._resourceScriptMapping._debuggerModel;const breakpoints=Bindings.breakpointManager.breakpointLocationsForUISourceCode(this._uiSourceCode).map(breakpointLocation=>breakpointLocation.breakpoint);const source=this._uiSourceCode.workingCopy();debuggerModel.setScriptSource(this._script.scriptId,source,scriptSourceWasSet.bind(this));async function scriptSourceWasSet(error,exceptionDetails){if(!error&&!exceptionDetails){this._scriptSource=source;}
this._update();if(!error&&!exceptionDetails){breakpoints.map(breakpoint=>breakpoint.refreshInDebugger());return;}
if(!exceptionDetails){Common.console.addMessage(Common.UIString('LiveEdit failed: %s',error),Common.Console.MessageLevel.Warning);return;}
const messageText=Common.UIString('LiveEdit compile failed: %s',exceptionDetails.text);this._uiSourceCode.addLineMessage(Workspace.UISourceCode.Message.Level.Error,messageText,exceptionDetails.lineNumber,exceptionDetails.columnNumber);}}
_update(){if(this._isDiverged()&&!this._hasDivergedFromVM){this._divergeFromVM();}else if(!this._isDiverged()&&this._hasDivergedFromVM){this._mergeToVM();}}
_divergeFromVM(){this._isDivergingFromVM=true;this._resourceScriptMapping._debuggerWorkspaceBinding.updateLocations(this._script);delete this._isDivergingFromVM;this._hasDivergedFromVM=true;this.dispatchEventToListeners(ResourceScriptFile.Events.DidDivergeFromVM,this._uiSourceCode);}
_mergeToVM(){delete this._hasDivergedFromVM;this._isMergingToVM=true;this._resourceScriptMapping._debuggerWorkspaceBinding.updateLocations(this._script);delete this._isMergingToVM;this.dispatchEventToListeners(ResourceScriptFile.Events.DidMergeToVM,this._uiSourceCode);}
hasDivergedFromVM(){return this._hasDivergedFromVM;}
isDivergingFromVM(){return this._isDivergingFromVM;}
isMergingToVM(){return this._isMergingToVM;}
checkMapping(){if(!this._script||typeof this._scriptSource!=='undefined'){this._mappingCheckedForTest();return;}
this._script.requestContent().then(deferredContent=>{this._scriptSource=deferredContent.content;this._update();this._mappingCheckedForTest();});}
_mappingCheckedForTest(){}
dispose(){this._uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._workingCopyChanged,this);this._uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._workingCopyCommitted,this);}
addSourceMapURL(sourceMapURL){if(!this._script){return;}
this._script.debuggerModel.setSourceMapURL(this._script,sourceMapURL);}
hasSourceMapURL(){return this._script&&!!this._script.sourceMapURL;}}
const _frameIdSymbol=Symbol('frameid');ResourceScriptFile.Events={DidMergeToVM:Symbol('DidMergeToVM'),DidDivergeFromVM:Symbol('DidDivergeFromVM'),};self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.ResourceScriptMapping=ResourceScriptMapping;Bindings.ResourceScriptFile=ResourceScriptFile;export default class ResourceMapping{constructor(targetManager,workspace){this._workspace=workspace;this._modelToInfo=new Map();targetManager.observeModels(SDK.ResourceTreeModel,this);}
modelAdded(resourceTreeModel){const info=new ModelInfo(this._workspace,resourceTreeModel);this._modelToInfo.set(resourceTreeModel,info);}
modelRemoved(resourceTreeModel){const info=this._modelToInfo.get(resourceTreeModel);info.dispose();this._modelToInfo.delete(resourceTreeModel);}
_infoForTarget(target){const resourceTreeModel=target.model(SDK.ResourceTreeModel);return resourceTreeModel?this._modelToInfo.get(resourceTreeModel):null;}
cssLocationToUILocation(cssLocation){const header=cssLocation.header();if(!header){return null;}
const info=this._infoForTarget(cssLocation.cssModel().target());if(!info){return null;}
const uiSourceCode=info._project.uiSourceCodeForURL(cssLocation.url);if(!uiSourceCode){return null;}
const offset=header[_offsetSymbol]||TextUtils.TextRange.createFromLocation(header.startLine,header.startColumn);const lineNumber=cssLocation.lineNumber+offset.startLine-header.startLine;let columnNumber=cssLocation.columnNumber;if(cssLocation.lineNumber===header.startLine){columnNumber+=offset.startColumn-header.startColumn;}
return uiSourceCode.uiLocation(lineNumber,columnNumber);}
jsLocationToUILocation(jsLocation){const script=jsLocation.script();if(!script){return null;}
const info=this._infoForTarget(jsLocation.debuggerModel.target());if(!info){return null;}
const uiSourceCode=info._project.uiSourceCodeForURL(script.sourceURL);if(!uiSourceCode){return null;}
const offset=script[_offsetSymbol]||TextUtils.TextRange.createFromLocation(script.lineOffset,script.columnOffset);const lineNumber=jsLocation.lineNumber+offset.startLine-script.lineOffset;let columnNumber=jsLocation.columnNumber;if(jsLocation.lineNumber===script.lineOffset){columnNumber+=offset.startColumn-script.columnOffset;}
return uiSourceCode.uiLocation(lineNumber,columnNumber);}
uiLocationToJSLocations(uiSourceCode,lineNumber,columnNumber){if(!uiSourceCode[_symbol]){return[];}
const target=Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);if(!target){return[];}
const debuggerModel=target.model(SDK.DebuggerModel);if(!debuggerModel){return[];}
const location=debuggerModel.createRawLocationByURL(uiSourceCode.url(),lineNumber,columnNumber);if(location&&location.script().containsLocation(lineNumber,columnNumber)){return[location];}
return[];}
uiLocationToCSSLocations(uiLocation){if(!uiLocation.uiSourceCode[_symbol]){return[];}
const target=Bindings.NetworkProject.targetForUISourceCode(uiLocation.uiSourceCode);if(!target){return[];}
const cssModel=target.model(SDK.CSSModel);if(!cssModel){return[];}
return cssModel.createRawLocationsByURL(uiLocation.uiSourceCode.url(),uiLocation.lineNumber,uiLocation.columnNumber);}
_resetForTest(target){const resourceTreeModel=target.model(SDK.ResourceTreeModel);const info=resourceTreeModel?this._modelToInfo.get(resourceTreeModel):null;if(info){info._resetForTest();}}}
class ModelInfo{constructor(workspace,resourceTreeModel){const target=resourceTreeModel.target();this._project=new Bindings.ContentProviderBasedProject(workspace,'resources:'+target.id(),Workspace.projectTypes.Network,'',false);Bindings.NetworkProject.setTargetForProject(this._project,target);this._bindings=new Map();const cssModel=target.model(SDK.CSSModel);this._cssModel=cssModel;this._eventListeners=[resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.ResourceAdded,this._resourceAdded,this),resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameWillNavigate,this._frameWillNavigate,this),resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameDetached,this._frameDetached,this),cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged,this._styleSheetChanged,this)];}
_styleSheetChanged(event){const header=this._cssModel.styleSheetHeaderForId(event.data.styleSheetId);if(!header||!header.isInline){return;}
const binding=this._bindings.get(header.resourceURL());if(!binding){return;}
binding._styleSheetChanged(header,event.data.edit);}
_acceptsResource(resource){const resourceType=resource.resourceType();if(resourceType!==Common.resourceTypes.Image&&resourceType!==Common.resourceTypes.Font&&resourceType!==Common.resourceTypes.Document&&resourceType!==Common.resourceTypes.Manifest){return false;}
if(resourceType===Common.resourceTypes.Image&&resource.mimeType&&!resource.mimeType.startsWith('image')){return false;}
if(resourceType===Common.resourceTypes.Font&&resource.mimeType&&!resource.mimeType.includes('font')){return false;}
if((resourceType===Common.resourceTypes.Image||resourceType===Common.resourceTypes.Font)&&resource.contentURL().startsWith('data:')){return false;}
return true;}
_resourceAdded(event){const resource=(event.data);if(!this._acceptsResource(resource)){return;}
let binding=this._bindings.get(resource.url);if(!binding){binding=new Binding(this._project,resource);this._bindings.set(resource.url,binding);}else{binding.addResource(resource);}}
_removeFrameResources(frame){for(const resource of frame.resources()){if(!this._acceptsResource(resource)){continue;}
const binding=this._bindings.get(resource.url);if(binding._resources.size===1){binding.dispose();this._bindings.delete(resource.url);}else{binding.removeResource(resource);}}}
_frameWillNavigate(event){const frame=(event.data);this._removeFrameResources(frame);}
_frameDetached(event){const frame=(event.data);this._removeFrameResources(frame);}
_resetForTest(){for(const binding of this._bindings.valuesArray()){binding.dispose();}
this._bindings.clear();}
dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);for(const binding of this._bindings.valuesArray()){binding.dispose();}
this._bindings.clear();this._project.removeProject();}}
class Binding{constructor(project,resource){this._resources=new Set([resource]);this._project=project;this._uiSourceCode=this._project.createUISourceCode(resource.url,resource.contentType());this._uiSourceCode[_symbol]=true;Bindings.NetworkProject.setInitialFrameAttribution(this._uiSourceCode,resource.frameId);this._project.addUISourceCodeWithProvider(this._uiSourceCode,this,Bindings.resourceMetadata(resource),resource.mimeType);this._edits=[];}
_inlineStyles(){const target=Bindings.NetworkProject.targetForUISourceCode(this._uiSourceCode);const cssModel=target.model(SDK.CSSModel);const stylesheets=[];if(cssModel){for(const headerId of cssModel.styleSheetIdsForURL(this._uiSourceCode.url())){const header=cssModel.styleSheetHeaderForId(headerId);if(header){stylesheets.push(header);}}}
return stylesheets;}
_inlineScripts(){const target=Bindings.NetworkProject.targetForUISourceCode(this._uiSourceCode);const debuggerModel=target.model(SDK.DebuggerModel);if(!debuggerModel){return[];}
return debuggerModel.scriptsForSourceURL(this._uiSourceCode.url());}
async _styleSheetChanged(stylesheet,edit){this._edits.push({stylesheet,edit});if(this._edits.length>1){return;}
const{content}=await this._uiSourceCode.requestContent();if(content!==null){this._innerStyleSheetChanged(content);}
this._edits=[];}
_innerStyleSheetChanged(content){const scripts=this._inlineScripts();const styles=this._inlineStyles();let text=new TextUtils.Text(content);for(const data of this._edits){const edit=data.edit;const stylesheet=data.stylesheet;const startLocation=stylesheet[_offsetSymbol]||TextUtils.TextRange.createFromLocation(stylesheet.startLine,stylesheet.startColumn);const oldRange=edit.oldRange.relativeFrom(startLocation.startLine,startLocation.startColumn);const newRange=edit.newRange.relativeFrom(startLocation.startLine,startLocation.startColumn);text=new TextUtils.Text(text.replaceRange(oldRange,edit.newText));for(const script of scripts){const scriptOffset=script[_offsetSymbol]||TextUtils.TextRange.createFromLocation(script.lineOffset,script.columnOffset);if(!scriptOffset.follows(oldRange)){continue;}
script[_offsetSymbol]=scriptOffset.rebaseAfterTextEdit(oldRange,newRange);Bindings.debuggerWorkspaceBinding.updateLocations(script);}
for(const style of styles){const styleOffset=style[_offsetSymbol]||TextUtils.TextRange.createFromLocation(style.startLine,style.startColumn);if(!styleOffset.follows(oldRange)){continue;}
style[_offsetSymbol]=styleOffset.rebaseAfterTextEdit(oldRange,newRange);Bindings.cssWorkspaceBinding.updateLocations(style);}}
this._uiSourceCode.addRevision(text.value());}
addResource(resource){this._resources.add(resource);Bindings.NetworkProject.addFrameAttribution(this._uiSourceCode,resource.frameId);}
removeResource(resource){this._resources.delete(resource);Bindings.NetworkProject.removeFrameAttribution(this._uiSourceCode,resource.frameId);}
dispose(){this._project.removeFile(this._uiSourceCode.url());}
contentURL(){return this._resources.firstValue().contentURL();}
contentType(){return this._resources.firstValue().contentType();}
contentEncoded(){return this._resources.firstValue().contentEncoded();}
requestContent(){return this._resources.firstValue().requestContent();}
searchInContent(query,caseSensitive,isRegex){return this._resources.firstValue().searchInContent(query,caseSensitive,isRegex);}}
export const _symbol=Symbol('Bindings.ResourceMapping._symbol');export const _offsetSymbol=Symbol('Bindings.ResourceMapping._offsetSymbol');self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.ResourceMapping=ResourceMapping;Bindings.ResourceMapping._symbol=_symbol;Bindings.ResourceMapping._offsetSymbol=_offsetSymbol;export class PresentationConsoleMessageManager{constructor(){SDK.targetManager.observeModels(SDK.DebuggerModel,this);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.ConsoleCleared,this._consoleCleared,this);SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded,event=>this._consoleMessageAdded((event.data)));SDK.consoleModel.messages().forEach(this._consoleMessageAdded,this);}
modelAdded(debuggerModel){debuggerModel[PresentationConsoleMessageManager._symbol]=new PresentationConsoleMessageHelper(debuggerModel);}
modelRemoved(debuggerModel){debuggerModel[PresentationConsoleMessageManager._symbol]._consoleCleared();}
_consoleMessageAdded(message){if(!message.isErrorOrWarning()||!message.runtimeModel()||message.source===SDK.ConsoleMessage.MessageSource.Violation){return;}
const debuggerModel=message.runtimeModel().debuggerModel();debuggerModel[PresentationConsoleMessageManager._symbol]._consoleMessageAdded(message);}
_consoleCleared(){for(const debuggerModel of SDK.targetManager.models(SDK.DebuggerModel)){debuggerModel[PresentationConsoleMessageManager._symbol]._consoleCleared();}}}
PresentationConsoleMessageManager._symbol=Symbol('PresentationConsoleMessageHelper');export default class PresentationConsoleMessageHelper{constructor(debuggerModel){this._debuggerModel=debuggerModel;this._pendingConsoleMessages={};this._presentationConsoleMessages=[];debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource,event=>setImmediate(this._parsedScriptSource.bind(this,event)));debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared,this._debuggerReset,this);this._locationPool=new Bindings.LiveLocationPool();}
_consoleMessageAdded(message){const rawLocation=this._rawLocation(message);if(rawLocation){this._addConsoleMessageToScript(message,rawLocation);}else{this._addPendingConsoleMessage(message);}}
_rawLocation(message){if(message.scriptId){return this._debuggerModel.createRawLocationByScriptId(message.scriptId,message.line,message.column);}
const callFrame=message.stackTrace&&message.stackTrace.callFrames?message.stackTrace.callFrames[0]:null;if(callFrame){return this._debuggerModel.createRawLocationByScriptId(callFrame.scriptId,callFrame.lineNumber,callFrame.columnNumber);}
if(message.url){return this._debuggerModel.createRawLocationByURL(message.url,message.line,message.column);}
return null;}
_addConsoleMessageToScript(message,rawLocation){this._presentationConsoleMessages.push(new PresentationConsoleMessage(message,rawLocation,this._locationPool));}
_addPendingConsoleMessage(message){if(!message.url){return;}
if(!this._pendingConsoleMessages[message.url]){this._pendingConsoleMessages[message.url]=[];}
this._pendingConsoleMessages[message.url].push(message);}
_parsedScriptSource(event){const script=(event.data);const messages=this._pendingConsoleMessages[script.sourceURL];if(!messages){return;}
const pendingMessages=[];for(let i=0;i<messages.length;i++){const message=messages[i];const rawLocation=this._rawLocation(message);if(!rawLocation){continue;}
if(script.scriptId===rawLocation.scriptId){this._addConsoleMessageToScript(message,rawLocation);}else{pendingMessages.push(message);}}
if(pendingMessages.length){this._pendingConsoleMessages[script.sourceURL]=pendingMessages;}else{delete this._pendingConsoleMessages[script.sourceURL];}}
_consoleCleared(){this._pendingConsoleMessages={};this._debuggerReset();}
_debuggerReset(){for(const message of this._presentationConsoleMessages){message.dispose();}
this._presentationConsoleMessages=[];this._locationPool.disposeAll();}}
export class PresentationConsoleMessage{constructor(message,rawLocation,locationPool){this._text=message.messageText;this._level=message.level===SDK.ConsoleMessage.MessageLevel.Error?Workspace.UISourceCode.Message.Level.Error:Workspace.UISourceCode.Message.Level.Warning;Bindings.debuggerWorkspaceBinding.createLiveLocation(rawLocation,this._updateLocation.bind(this),locationPool);}
_updateLocation(liveLocation){if(this._uiMessage){this._uiMessage.remove();}
const uiLocation=liveLocation.uiLocation();if(!uiLocation){return;}
this._uiMessage=uiLocation.uiSourceCode.addLineMessage(this._level,this._text,uiLocation.lineNumber,uiLocation.columnNumber);}
dispose(){if(this._uiMessage){this._uiMessage.remove();}}}
self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.PresentationConsoleMessageManager=PresentationConsoleMessageManager;Bindings.PresentationConsoleMessage=PresentationConsoleMessage;export class NetworkProjectManager extends Common.Object{}
export const Events={FrameAttributionAdded:Symbol('FrameAttributionAdded'),FrameAttributionRemoved:Symbol('FrameAttributionRemoved')};export default class NetworkProject{static _resolveFrame(uiSourceCode,frameId){const target=NetworkProject.targetForUISourceCode(uiSourceCode);const resourceTreeModel=target&&target.model(SDK.ResourceTreeModel);return resourceTreeModel?resourceTreeModel.frameForId(frameId):null;}
static setInitialFrameAttribution(uiSourceCode,frameId){const frame=NetworkProject._resolveFrame(uiSourceCode,frameId);if(!frame){return;}
const attribution=new Map();attribution.set(frameId,{frame:frame,count:1});uiSourceCode[_frameAttributionSymbol]=attribution;}
static cloneInitialFrameAttribution(fromUISourceCode,toUISourceCode){const fromAttribution=fromUISourceCode[_frameAttributionSymbol];if(!fromAttribution){return;}
const toAttribution=new Map();toUISourceCode[_frameAttributionSymbol]=toAttribution;for(const frameId of fromAttribution.keys()){const value=fromAttribution.get(frameId);toAttribution.set(frameId,{frame:value.frame,count:value.count});}}
static addFrameAttribution(uiSourceCode,frameId){const frame=NetworkProject._resolveFrame(uiSourceCode,frameId);if(!frame){return;}
const frameAttribution=uiSourceCode[_frameAttributionSymbol];const attributionInfo=frameAttribution.get(frameId)||{frame:frame,count:0};attributionInfo.count+=1;frameAttribution.set(frameId,attributionInfo);if(attributionInfo.count!==1){return;}
const data={uiSourceCode:uiSourceCode,frame:frame};Bindings.networkProjectManager.dispatchEventToListeners(Events.FrameAttributionAdded,data);}
static removeFrameAttribution(uiSourceCode,frameId){const frameAttribution=uiSourceCode[_frameAttributionSymbol];if(!frameAttribution){return;}
const attributionInfo=frameAttribution.get(frameId);console.assert(attributionInfo,'Failed to remove frame attribution for url: '+uiSourceCode.url());attributionInfo.count-=1;if(attributionInfo.count>0){return;}
frameAttribution.delete(frameId);const data={uiSourceCode:uiSourceCode,frame:attributionInfo.frame};Bindings.networkProjectManager.dispatchEventToListeners(Events.FrameAttributionRemoved,data);}
static targetForUISourceCode(uiSourceCode){return uiSourceCode.project()[_targetSymbol]||null;}
static setTargetForProject(project,target){project[_targetSymbol]=target;}
static framesForUISourceCode(uiSourceCode){const target=NetworkProject.targetForUISourceCode(uiSourceCode);const resourceTreeModel=target&&target.model(SDK.ResourceTreeModel);const attribution=uiSourceCode[_frameAttributionSymbol];if(!resourceTreeModel||!attribution){return[];}
const frames=Array.from(attribution.keys()).map(frameId=>resourceTreeModel.frameForId(frameId));return frames.filter(frame=>!!frame);}}
const _targetSymbol=Symbol('target');const _frameAttributionSymbol=Symbol('_frameAttributionSymbol');self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.NetworkProjectManager=NetworkProjectManager;Bindings.NetworkProjectManager.Events=Events;Bindings.NetworkProject=NetworkProject;export default class LiveLocation{update(){}
uiLocation(){}
dispose(){}
isBlackboxed(){}}
export class LiveLocationWithPool{constructor(updateDelegate,locationPool){this._updateDelegate=updateDelegate;this._locationPool=locationPool;this._locationPool._add(this);}
update(){this._updateDelegate(this);}
uiLocation(){throw'Not implemented';}
dispose(){this._locationPool._delete(this);this._updateDelegate=null;}
isBlackboxed(){throw'Not implemented';}}
export class LiveLocationPool{constructor(){this._locations=new Set();}
_add(location){this._locations.add(location);}
_delete(location){this._locations.delete(location);}
disposeAll(){for(const location of this._locations){location.dispose();}}}
self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.LiveLocation=LiveLocation;Bindings.LiveLocationWithPool=LiveLocationWithPool;Bindings.LiveLocationPool=LiveLocationPool;export class ChunkedReader{fileSize(){}
loadedSize(){}
fileName(){}
cancel(){}
error(){}}
export class ChunkedFileReader{constructor(blob,chunkSize,chunkTransferredCallback){this._file=blob;this._fileSize=blob.size;this._loadedSize=0;this._chunkSize=chunkSize;this._chunkTransferredCallback=chunkTransferredCallback;this._decoder=new TextDecoder();this._isCanceled=false;this._error=null;}
read(output){if(this._chunkTransferredCallback){this._chunkTransferredCallback(this);}
this._output=output;this._reader=new FileReader();this._reader.onload=this._onChunkLoaded.bind(this);this._reader.onerror=this._onError.bind(this);this._loadChunk();return new Promise(resolve=>this._transferFinished=resolve);}
cancel(){this._isCanceled=true;}
loadedSize(){return this._loadedSize;}
fileSize(){return this._fileSize;}
fileName(){return this._file.name;}
error(){return this._error;}
_onChunkLoaded(event){if(this._isCanceled){return;}
if(event.target.readyState!==FileReader.DONE){return;}
const buffer=this._reader.result;this._loadedSize+=buffer.byteLength;const endOfFile=this._loadedSize===this._fileSize;const decodedString=this._decoder.decode(buffer,{stream:!endOfFile});this._output.write(decodedString);if(this._isCanceled){return;}
if(this._chunkTransferredCallback){this._chunkTransferredCallback(this);}
if(endOfFile){this._file=null;this._reader=null;this._output.close();this._transferFinished(!this._error);return;}
this._loadChunk();}
_loadChunk(){const chunkStart=this._loadedSize;const chunkEnd=Math.min(this._fileSize,chunkStart+this._chunkSize);const nextPart=this._file.slice(chunkStart,chunkEnd);this._reader.readAsArrayBuffer(nextPart);}
_onError(event){this._error=event.target.error;this._transferFinished(false);}}
export class FileOutputStream{async open(fileName){this._closed=false;this._writeCallbacks=[];this._fileName=fileName;const saveResponse=await Workspace.fileManager.save(this._fileName,'',true);if(saveResponse){Workspace.fileManager.addEventListener(Workspace.FileManager.Events.AppendedToURL,this._onAppendDone,this);}
return!!saveResponse;}
write(data){return new Promise(resolve=>{this._writeCallbacks.push(resolve);Workspace.fileManager.append(this._fileName,data);});}
async close(){this._closed=true;if(this._writeCallbacks.length){return;}
Workspace.fileManager.removeEventListener(Workspace.FileManager.Events.AppendedToURL,this._onAppendDone,this);Workspace.fileManager.close(this._fileName);}
_onAppendDone(event){if(event.data!==this._fileName){return;}
this._writeCallbacks.shift()();if(this._writeCallbacks.length){return;}
if(!this._closed){return;}
Workspace.fileManager.removeEventListener(Workspace.FileManager.Events.AppendedToURL,this._onAppendDone,this);Workspace.fileManager.close(this._fileName);}}
self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.ChunkedReader=ChunkedReader;Bindings.ChunkedFileReader=ChunkedFileReader;Bindings.FileOutputStream=FileOutputStream;export default class DefaultScriptMapping{constructor(debuggerModel,workspace,debuggerWorkspaceBinding){this._debuggerModel=debuggerModel;this._debuggerWorkspaceBinding=debuggerWorkspaceBinding;this._project=new Bindings.ContentProviderBasedProject(workspace,'debugger:'+debuggerModel.target().id(),Workspace.projectTypes.Debugger,'',true);this._eventListeners=[debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared,this._debuggerReset,this),debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource,this._parsedScriptSource,this),debuggerModel.addEventListener(SDK.DebuggerModel.Events.DiscardedAnonymousScriptSource,this._discardedScriptSource,this)];this._scriptSymbol=Symbol('symbol');}
static scriptForUISourceCode(uiSourceCode){const scripts=uiSourceCode[_scriptsSymbol];return scripts?scripts.values().next().value:null;}
rawLocationToUILocation(rawLocation){const script=rawLocation.script();if(!script){return null;}
const uiSourceCode=script[_uiSourceCodeSymbol];const lineNumber=rawLocation.lineNumber-(script.isInlineScriptWithSourceURL()?script.lineOffset:0);let columnNumber=rawLocation.columnNumber||0;if(script.isInlineScriptWithSourceURL()&&!lineNumber&&columnNumber){columnNumber-=script.columnOffset;}
return uiSourceCode.uiLocation(lineNumber,columnNumber);}
uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber){const script=uiSourceCode[this._scriptSymbol];if(!script){return[];}
if(script.isInlineScriptWithSourceURL()){return[this._debuggerModel.createRawLocation(script,lineNumber+script.lineOffset,lineNumber?columnNumber:columnNumber+script.columnOffset)];}
return[this._debuggerModel.createRawLocation(script,lineNumber,columnNumber)];}
_parsedScriptSource(event){const script=(event.data);const name=Common.ParsedURL.extractName(script.sourceURL);const url='debugger:///VM'+script.scriptId+(name?' '+name:'');const uiSourceCode=this._project.createUISourceCode(url,Common.resourceTypes.Script);uiSourceCode[this._scriptSymbol]=script;if(!uiSourceCode[_scriptsSymbol]){uiSourceCode[_scriptsSymbol]=new Set([script]);}else{uiSourceCode[_scriptsSymbol].add(script);}
script[_uiSourceCodeSymbol]=uiSourceCode;this._project.addUISourceCodeWithProvider(uiSourceCode,script,null,'text/javascript');this._debuggerWorkspaceBinding.updateLocations(script);}
_discardedScriptSource(event){const script=(event.data);const uiSourceCode=script[_uiSourceCodeSymbol];if(!uiSourceCode){return;}
delete script[_uiSourceCodeSymbol];delete uiSourceCode[this._scriptSymbol];uiSourceCode[_scriptsSymbol].delete(script);if(!uiSourceCode[_scriptsSymbol].size){delete uiSourceCode[_scriptsSymbol];}
this._project.removeUISourceCode(uiSourceCode.url());}
_debuggerReset(){this._project.reset();}
dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);this._debuggerReset();this._project.dispose();}}
const _scriptsSymbol=Symbol('symbol');const _uiSourceCodeSymbol=Symbol('uiSourceCodeSymbol');self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.DefaultScriptMapping=DefaultScriptMapping;export default class DebuggerWorkspaceBinding{constructor(targetManager,workspace){this._workspace=workspace;this._sourceMappings=[];this._debuggerModelToData=new Map();targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.GlobalObjectCleared,this._globalObjectCleared,this);targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerResumed,this._debuggerResumed,this);targetManager.observeModels(SDK.DebuggerModel,this);}
addSourceMapping(sourceMapping){this._sourceMappings.push(sourceMapping);}
modelAdded(debuggerModel){this._debuggerModelToData.set(debuggerModel,new ModelData(debuggerModel,this));}
modelRemoved(debuggerModel){const modelData=this._debuggerModelToData.get(debuggerModel);modelData._dispose();this._debuggerModelToData.remove(debuggerModel);}
updateLocations(script){const modelData=this._debuggerModelToData.get(script.debuggerModel);if(modelData){modelData._updateLocations(script);}}
createLiveLocation(rawLocation,updateDelegate,locationPool){const modelData=this._debuggerModelToData.get(rawLocation.script().debuggerModel);return modelData._createLiveLocation(rawLocation,updateDelegate,locationPool);}
createStackTraceTopFrameLiveLocation(rawLocations,updateDelegate,locationPool){console.assert(rawLocations.length);const location=new StackTraceTopFrameLocation(rawLocations,this,updateDelegate,locationPool);location.update();return location;}
createCallFrameLiveLocation(location,updateDelegate,locationPool){const script=location.script();if(!script){return null;}
const debuggerModel=location.debuggerModel;const liveLocation=this.createLiveLocation(location,updateDelegate,locationPool);this._registerCallFrameLiveLocation(debuggerModel,liveLocation);return liveLocation;}
rawLocationToUILocation(rawLocation){for(let i=0;i<this._sourceMappings.length;++i){const uiLocation=this._sourceMappings[i].rawLocationToUILocation(rawLocation);if(uiLocation){return uiLocation;}}
const modelData=this._debuggerModelToData.get(rawLocation.debuggerModel);return modelData._rawLocationToUILocation(rawLocation);}
uiSourceCodeForSourceMapSourceURL(debuggerModel,url,isContentScript){const modelData=this._debuggerModelToData.get(debuggerModel);if(!modelData){return null;}
return modelData._compilerMapping.uiSourceCodeForURL(url,isContentScript);}
uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber){let locations=[];for(let i=0;i<this._sourceMappings.length&&!locations.length;++i){locations=this._sourceMappings[i].uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber);}
if(locations.length){return locations;}
for(const modelData of this._debuggerModelToData.values()){locations.push(...modelData._uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber));}
return locations;}
normalizeUILocation(uiLocation){const rawLocations=this.uiLocationToRawLocations(uiLocation.uiSourceCode,uiLocation.lineNumber,uiLocation.columnNumber);for(const location of rawLocations){const uiLocationCandidate=this.rawLocationToUILocation(location);if(uiLocationCandidate){return uiLocationCandidate;}}
return uiLocation;}
scriptFile(uiSourceCode,debuggerModel){const modelData=this._debuggerModelToData.get(debuggerModel);return modelData?modelData._resourceMapping.scriptFile(uiSourceCode):null;}
sourceMapForScript(script){const modelData=this._debuggerModelToData.get(script.debuggerModel);if(!modelData){return null;}
return modelData._compilerMapping.sourceMapForScript(script);}
_globalObjectCleared(event){const debuggerModel=(event.data);this._reset(debuggerModel);}
_reset(debuggerModel){const modelData=this._debuggerModelToData.get(debuggerModel);modelData.callFrameLocations.valuesArray().forEach(location=>this._removeLiveLocation(location));modelData.callFrameLocations.clear();}
_resetForTest(target){const debuggerModel=(target.model(SDK.DebuggerModel));const modelData=this._debuggerModelToData.get(debuggerModel);modelData._resourceMapping.resetForTest();}
_registerCallFrameLiveLocation(debuggerModel,location){const locations=this._debuggerModelToData.get(debuggerModel).callFrameLocations;locations.add(location);}
_removeLiveLocation(location){const modelData=this._debuggerModelToData.get(location._script.debuggerModel);if(modelData){modelData._disposeLocation(location);}}
_debuggerResumed(event){const debuggerModel=(event.data);this._reset(debuggerModel);}}
class ModelData{constructor(debuggerModel,debuggerWorkspaceBinding){this._debuggerModel=debuggerModel;this._debuggerWorkspaceBinding=debuggerWorkspaceBinding;this.callFrameLocations=new Set();const workspace=debuggerWorkspaceBinding._workspace;this._defaultMapping=new Bindings.DefaultScriptMapping(debuggerModel,workspace,debuggerWorkspaceBinding);this._resourceMapping=new Bindings.ResourceScriptMapping(debuggerModel,workspace,debuggerWorkspaceBinding);this._compilerMapping=new Bindings.CompilerScriptMapping(debuggerModel,workspace,debuggerWorkspaceBinding);this._locations=new Platform.Multimap();debuggerModel.setBeforePausedCallback(this._beforePaused.bind(this));}
_createLiveLocation(rawLocation,updateDelegate,locationPool){const script=(rawLocation.script());console.assert(script);const location=new Location(script,rawLocation,this._debuggerWorkspaceBinding,updateDelegate,locationPool);this._locations.set(script,location);location.update();return location;}
_disposeLocation(location){this._locations.delete(location._script,location);}
_updateLocations(script){for(const location of this._locations.get(script)){location.update();}}
_rawLocationToUILocation(rawLocation){let uiLocation=null;uiLocation=uiLocation||this._compilerMapping.rawLocationToUILocation(rawLocation);uiLocation=uiLocation||this._resourceMapping.rawLocationToUILocation(rawLocation);uiLocation=uiLocation||Bindings.resourceMapping.jsLocationToUILocation(rawLocation);uiLocation=uiLocation||this._defaultMapping.rawLocationToUILocation(rawLocation);return(uiLocation);}
_uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber){let locations=this._compilerMapping.uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber);locations=locations.length?locations:this._resourceMapping.uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber);locations=locations.length?locations:Bindings.resourceMapping.uiLocationToJSLocations(uiSourceCode,lineNumber,columnNumber);locations=locations.length?locations:this._defaultMapping.uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber);return locations;}
_beforePaused(debuggerPausedDetails){const callFrame=debuggerPausedDetails.callFrames[0];if(callFrame.script.sourceMapURL!==SDK.WasmSourceMap.FAKE_URL&&!Root.Runtime.experiments.isEnabled('emptySourceMapAutoStepping')){return true;}
return!!this._compilerMapping.mapsToSourceCode(callFrame.location());}
_dispose(){this._debuggerModel.setBeforePausedCallback(null);this._compilerMapping.dispose();this._resourceMapping.dispose();this._defaultMapping.dispose();}}
class Location extends Bindings.LiveLocationWithPool{constructor(script,rawLocation,binding,updateDelegate,locationPool){super(updateDelegate,locationPool);this._script=script;this._rawLocation=rawLocation;this._binding=binding;}
uiLocation(){const debuggerModelLocation=this._rawLocation;return this._binding.rawLocationToUILocation(debuggerModelLocation);}
dispose(){super.dispose();this._binding._removeLiveLocation(this);}
isBlackboxed(){const uiLocation=this.uiLocation();return uiLocation?Bindings.blackboxManager.isBlackboxedUISourceCode(uiLocation.uiSourceCode):false;}}
class StackTraceTopFrameLocation extends Bindings.LiveLocationWithPool{constructor(rawLocations,binding,updateDelegate,locationPool){super(updateDelegate,locationPool);this._updateScheduled=true;this._current=null;this._locations=rawLocations.map(location=>binding.createLiveLocation(location,this._scheduleUpdate.bind(this),locationPool));this._updateLocation();}
uiLocation(){return this._current.uiLocation();}
isBlackboxed(){return this._current.isBlackboxed();}
dispose(){super.dispose();for(const location of this._locations){location.dispose();}
this._locations=null;this._current=null;}
_scheduleUpdate(){if(this._updateScheduled){return;}
this._updateScheduled=true;setImmediate(this._updateLocation.bind(this));}
_updateLocation(){this._updateScheduled=false;if(!this._locations){return;}
this._current=this._locations.find(location=>!location.isBlackboxed())||this._locations[0];this.update();}}
export class DebuggerSourceMapping{rawLocationToUILocation(rawLocation){}
uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber){}}
self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.DebuggerWorkspaceBinding=DebuggerWorkspaceBinding;Bindings.DebuggerSourceMapping=DebuggerSourceMapping;Bindings.debuggerWorkspaceBinding;export default class CSSWorkspaceBinding{constructor(targetManager,workspace){this._workspace=workspace;this._modelToInfo=new Map();this._sourceMappings=[];targetManager.observeModels(SDK.CSSModel,this);}
modelAdded(cssModel){this._modelToInfo.set(cssModel,new ModelInfo(cssModel,this._workspace));}
modelRemoved(cssModel){this._modelToInfo.get(cssModel)._dispose();this._modelToInfo.delete(cssModel);}
updateLocations(header){this._modelToInfo.get(header.cssModel())._updateLocations(header);}
createLiveLocation(rawLocation,updateDelegate,locationPool){return this._modelToInfo.get(rawLocation.cssModel())._createLiveLocation(rawLocation,updateDelegate,locationPool);}
propertyUILocation(cssProperty,forName){const style=cssProperty.ownerStyle;if(!style||style.type!==SDK.CSSStyleDeclaration.Type.Regular||!style.styleSheetId){return null;}
const header=style.cssModel().styleSheetHeaderForId(style.styleSheetId);if(!header){return null;}
const range=forName?cssProperty.nameRange():cssProperty.valueRange();if(!range){return null;}
const lineNumber=range.startLine;const columnNumber=range.startColumn;const rawLocation=new SDK.CSSLocation(header,header.lineNumberInSource(lineNumber),header.columnNumberInSource(lineNumber,columnNumber));return this.rawLocationToUILocation(rawLocation);}
rawLocationToUILocation(rawLocation){for(let i=this._sourceMappings.length-1;i>=0;--i){const uiLocation=this._sourceMappings[i].rawLocationToUILocation(rawLocation);if(uiLocation){return uiLocation;}}
return this._modelToInfo.get(rawLocation.cssModel())._rawLocationToUILocation(rawLocation);}
uiLocationToRawLocations(uiLocation){for(let i=this._sourceMappings.length-1;i>=0;--i){const rawLocations=this._sourceMappings[i].uiLocationToRawLocations(uiLocation);if(rawLocations.length){return rawLocations;}}
const rawLocations=[];for(const modelInfo of this._modelToInfo.values()){rawLocations.pushAll(modelInfo._uiLocationToRawLocations(uiLocation));}
return rawLocations;}
addSourceMapping(sourceMapping){this._sourceMappings.push(sourceMapping);}}
class SourceMapping{rawLocationToUILocation(rawLocation){}
uiLocationToRawLocations(uiLocation){}}
class ModelInfo{constructor(cssModel,workspace){this._eventListeners=[cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded,this._styleSheetAdded,this),cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetRemoved,this._styleSheetRemoved,this)];this._stylesSourceMapping=new Bindings.StylesSourceMapping(cssModel,workspace);const sourceMapManager=cssModel.sourceMapManager();this._sassSourceMapping=new Bindings.SASSSourceMapping(cssModel.target(),sourceMapManager,workspace);this._locations=new Platform.Multimap();this._unboundLocations=new Platform.Multimap();}
_createLiveLocation(rawLocation,updateDelegate,locationPool){const location=new LiveLocation(rawLocation,this,updateDelegate,locationPool);const header=rawLocation.header();if(header){location._header=header;this._locations.set(header,location);location.update();}else{this._unboundLocations.set(rawLocation.url,location);}
return location;}
_disposeLocation(location){if(location._header){this._locations.delete(location._header,location);}else{this._unboundLocations.delete(location._url,location);}}
_updateLocations(header){for(const location of this._locations.get(header)){location.update();}}
_styleSheetAdded(event){const header=(event.data);if(!header.sourceURL){return;}
for(const location of this._unboundLocations.get(header.sourceURL)){location._header=header;this._locations.set(header,location);location.update();}
this._unboundLocations.deleteAll(header.sourceURL);}
_styleSheetRemoved(event){const header=(event.data);for(const location of this._locations.get(header)){location._header=null;this._unboundLocations.set(location._url,location);location.update();}
this._locations.deleteAll(header);}
_rawLocationToUILocation(rawLocation){let uiLocation=null;uiLocation=uiLocation||this._sassSourceMapping.rawLocationToUILocation(rawLocation);uiLocation=uiLocation||this._stylesSourceMapping.rawLocationToUILocation(rawLocation);uiLocation=uiLocation||Bindings.resourceMapping.cssLocationToUILocation(rawLocation);return uiLocation;}
_uiLocationToRawLocations(uiLocation){let rawLocations=this._sassSourceMapping.uiLocationToRawLocations(uiLocation);if(rawLocations.length){return rawLocations;}
rawLocations=this._stylesSourceMapping.uiLocationToRawLocations(uiLocation);if(rawLocations.length){return rawLocations;}
return Bindings.resourceMapping.uiLocationToCSSLocations(uiLocation);}
_dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);this._stylesSourceMapping.dispose();this._sassSourceMapping.dispose();}}
class LiveLocation extends Bindings.LiveLocationWithPool{constructor(rawLocation,info,updateDelegate,locationPool){super(updateDelegate,locationPool);this._url=rawLocation.url;this._lineNumber=rawLocation.lineNumber;this._columnNumber=rawLocation.columnNumber;this._info=info;this._header=null;}
uiLocation(){if(!this._header){return null;}
const rawLocation=new SDK.CSSLocation(this._header,this._lineNumber,this._columnNumber);return Bindings.cssWorkspaceBinding.rawLocationToUILocation(rawLocation);}
dispose(){super.dispose();this._info._disposeLocation(this);}
isBlackboxed(){return false;}}
self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.CSSWorkspaceBinding=CSSWorkspaceBinding;Bindings.CSSWorkspaceBinding.SourceMapping=SourceMapping;Bindings.CSSWorkspaceBinding.ModelInfo=ModelInfo;Bindings.cssWorkspaceBinding;export default class ContentProviderBasedProject extends Workspace.ProjectStore{constructor(workspace,id,type,displayName,isServiceProject){super(workspace,id,type,displayName);this._contentProviders={};this._isServiceProject=isServiceProject;workspace.addProject(this);}
async requestFileContent(uiSourceCode){const contentProvider=this._contentProviders[uiSourceCode.url()];try{const[content,isEncoded]=await Promise.all([contentProvider.requestContent(),contentProvider.contentEncoded()]);return{content:content.content,isEncoded,error:content.error};}catch(err){return{isEncoded:false,error:err?String(err):ls`Unknown error loading file`};}}
isServiceProject(){return this._isServiceProject;}
requestMetadata(uiSourceCode){return Promise.resolve(uiSourceCode[_metadata]);}
canSetFileContent(){return false;}
async setFileContent(uiSourceCode,newContent,isBase64){}
fullDisplayName(uiSourceCode){let parentPath=uiSourceCode.parentURL().replace(/^(?:https?|file)\:\/\//,'');try{parentPath=decodeURI(parentPath);}catch(e){}
return parentPath+'/'+uiSourceCode.displayName(true);}
mimeType(uiSourceCode){return(uiSourceCode[_mimeType]);}
canRename(){return false;}
rename(uiSourceCode,newName,callback){const path=uiSourceCode.url();this.performRename(path,newName,innerCallback.bind(this));function innerCallback(success,newName){if(success&&newName){const copyOfPath=path.split('/');copyOfPath[copyOfPath.length-1]=newName;const newPath=copyOfPath.join('/');this._contentProviders[newPath]=this._contentProviders[path];delete this._contentProviders[path];this.renameUISourceCode(uiSourceCode,newName);}
callback(success,newName);}}
excludeFolder(path){}
canExcludeFolder(path){return false;}
createFile(path,name,content,isBase64){}
canCreateFile(){return false;}
deleteFile(uiSourceCode){}
remove(){}
performRename(path,newName,callback){callback(false);}
searchInFileContent(uiSourceCode,query,caseSensitive,isRegex){const contentProvider=this._contentProviders[uiSourceCode.url()];return contentProvider.searchInContent(query,caseSensitive,isRegex);}
async findFilesMatchingSearchRequest(searchConfig,filesMathingFileQuery,progress){const result=[];progress.setTotalWork(filesMathingFileQuery.length);await Promise.all(filesMathingFileQuery.map(searchInContent.bind(this)));progress.done();return result;async function searchInContent(path){const provider=this._contentProviders[path];let allMatchesFound=true;for(const query of searchConfig.queries().slice()){const searchMatches=await provider.searchInContent(query,!searchConfig.ignoreCase(),searchConfig.isRegex());if(!searchMatches.length){allMatchesFound=false;break;}}
if(allMatchesFound){result.push(path);}
progress.worked(1);}}
indexContent(progress){setImmediate(progress.done.bind(progress));}
addUISourceCodeWithProvider(uiSourceCode,contentProvider,metadata,mimeType){uiSourceCode[_mimeType]=mimeType;this._contentProviders[uiSourceCode.url()]=contentProvider;uiSourceCode[_metadata]=metadata;this.addUISourceCode(uiSourceCode);}
addContentProvider(url,contentProvider,mimeType){const uiSourceCode=this.createUISourceCode(url,contentProvider.contentType());this.addUISourceCodeWithProvider(uiSourceCode,contentProvider,null,mimeType);return uiSourceCode;}
removeFile(path){delete this._contentProviders[path];this.removeUISourceCode(path);}
reset(){this._contentProviders={};this.removeProject();this.workspace().addProject(this);}
dispose(){this._contentProviders={};this.removeProject();}}
const _metadata=Symbol('ContentProviderBasedProject.Metadata');const _mimeType=Symbol('ContentProviderBasedProject.MimeType');self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.ContentProviderBasedProject=ContentProviderBasedProject;export default class CompilerScriptMapping{constructor(debuggerModel,workspace,debuggerWorkspaceBinding){this._debuggerModel=debuggerModel;this._sourceMapManager=this._debuggerModel.sourceMapManager();this._workspace=workspace;this._debuggerWorkspaceBinding=debuggerWorkspaceBinding;const target=debuggerModel.target();this._regularProject=new Bindings.ContentProviderBasedProject(workspace,'jsSourceMaps::'+target.id(),Workspace.projectTypes.Network,'',false);this._contentScriptsProject=new Bindings.ContentProviderBasedProject(workspace,'jsSourceMaps:extensions:'+target.id(),Workspace.projectTypes.ContentScripts,'',false);Bindings.NetworkProject.setTargetForProject(this._regularProject,target);Bindings.NetworkProject.setTargetForProject(this._contentScriptsProject,target);this._regularBindings=new Map();this._contentScriptsBindings=new Map();this._stubUISourceCodes=new Map();this._stubProject=new Bindings.ContentProviderBasedProject(workspace,'jsSourceMaps:stub:'+target.id(),Workspace.projectTypes.Service,'',true);this._eventListeners=[this._sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapWillAttach,this._sourceMapWillAttach,this),this._sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapFailedToAttach,this._sourceMapFailedToAttach,this),this._sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapAttached,this._sourceMapAttached,this),this._sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapDetached,this._sourceMapDetached,this),];}
_addStubUISourceCode(script){const stubUISourceCode=this._stubProject.addContentProvider(script.sourceURL+':sourcemap',Common.StaticContentProvider.fromString(script.sourceURL,Common.resourceTypes.Script,'\n\n\n\n\n// Please wait a bit.\n// Compiled script is not shown while source map is being loaded!'),'text/javascript');this._stubUISourceCodes.set(script,stubUISourceCode);}
_removeStubUISourceCode(script){const uiSourceCode=this._stubUISourceCodes.get(script);this._stubUISourceCodes.delete(script);this._stubProject.removeFile(uiSourceCode.url());this._debuggerWorkspaceBinding.updateLocations(script);}
static uiSourceCodeOrigin(uiSourceCode){const sourceMap=uiSourceCode[_sourceMapSymbol];if(!sourceMap){return null;}
return sourceMap.compiledURL();}
mapsToSourceCode(rawLocation){const script=rawLocation.script();const sourceMap=script?this._sourceMapManager.sourceMapForClient(script):null;if(!sourceMap){return true;}
const entry=sourceMap.findEntry(rawLocation.lineNumber,rawLocation.columnNumber);return!!entry&&entry.lineNumber===rawLocation.lineNumber&&entry.columnNumber===rawLocation.columnNumber;}
uiSourceCodeForURL(url,isContentScript){return isContentScript?this._contentScriptsProject.uiSourceCodeForURL(url):this._regularProject.uiSourceCodeForURL(url);}
rawLocationToUILocation(rawLocation){const script=rawLocation.script();if(!script){return null;}
const lineNumber=rawLocation.lineNumber-script.lineOffset;let columnNumber=rawLocation.columnNumber;if(!lineNumber){columnNumber-=script.columnOffset;}
const stubUISourceCode=this._stubUISourceCodes.get(script);if(stubUISourceCode){return new Workspace.UILocation(stubUISourceCode,lineNumber,columnNumber);}
const sourceMap=this._sourceMapManager.sourceMapForClient(script);if(!sourceMap){return null;}
const entry=sourceMap.findEntry(lineNumber,columnNumber);if(!entry||!entry.sourceURL){return null;}
const uiSourceCode=script.isContentScript()?this._contentScriptsProject.uiSourceCodeForURL(entry.sourceURL):this._regularProject.uiSourceCodeForURL(entry.sourceURL);if(!uiSourceCode){return null;}
return uiSourceCode.uiLocation((entry.sourceLineNumber),(entry.sourceColumnNumber));}
uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber){const sourceMap=uiSourceCode[_sourceMapSymbol];if(!sourceMap){return[];}
const scripts=this._sourceMapManager.clientsForSourceMap(sourceMap);if(!scripts.length){return[];}
const entry=sourceMap.sourceLineMapping(uiSourceCode.url(),lineNumber,columnNumber);if(!entry){return[];}
return scripts.map(script=>this._debuggerModel.createRawLocation(script,entry.lineNumber+script.lineOffset,!entry.lineNumber?entry.columnNumber+script.columnOffset:entry.columnNumber));}
_sourceMapWillAttach(event){const script=(event.data);this._addStubUISourceCode(script);this._debuggerWorkspaceBinding.updateLocations(script);}
_sourceMapFailedToAttach(event){const script=(event.data);this._removeStubUISourceCode(script);}
_sourceMapAttached(event){const script=(event.data.client);const sourceMap=(event.data.sourceMap);this._removeStubUISourceCode(script);if(Bindings.blackboxManager.isBlackboxedURL(script.sourceURL,script.isContentScript())){this._sourceMapAttachedForTest(sourceMap);return;}
this._populateSourceMapSources(script,sourceMap);this._sourceMapAttachedForTest(sourceMap);}
_sourceMapDetached(event){const script=(event.data.client);const frameId=script[_frameIdSymbol];const sourceMap=(event.data.sourceMap);const bindings=script.isContentScript()?this._contentScriptsBindings:this._regularBindings;for(const sourceURL of sourceMap.sourceURLs()){const binding=bindings.get(sourceURL);if(binding){binding.removeSourceMap(sourceMap,frameId);if(!binding._uiSourceCode){bindings.delete(sourceURL);}}}
this._debuggerWorkspaceBinding.updateLocations(script);}
sourceMapForScript(script){return this._sourceMapManager.sourceMapForClient(script);}
_sourceMapAttachedForTest(sourceMap){}
_populateSourceMapSources(script,sourceMap){const frameId=Bindings.frameIdForScript(script);script[_frameIdSymbol]=frameId;const project=script.isContentScript()?this._contentScriptsProject:this._regularProject;const bindings=script.isContentScript()?this._contentScriptsBindings:this._regularBindings;for(const sourceURL of sourceMap.sourceURLs()){let binding=bindings.get(sourceURL);if(!binding){binding=new Binding(project,sourceURL);bindings.set(sourceURL,binding);}
binding.addSourceMap(sourceMap,frameId);}
this._debuggerWorkspaceBinding.updateLocations(script);}
static uiLineHasMapping(uiSourceCode,lineNumber){const sourceMap=uiSourceCode[_sourceMapSymbol];if(!sourceMap){return true;}
return!!sourceMap.sourceLineMapping(uiSourceCode.url(),lineNumber,0);}
dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);this._regularProject.dispose();this._contentScriptsProject.dispose();this._stubProject.dispose();}}
const _frameIdSymbol=Symbol('_frameIdSymbol');const _sourceMapSymbol=Symbol('_sourceMapSymbol');class Binding{constructor(project,url){this._project=project;this._url=url;this._referringSourceMaps=[];this._activeSourceMap=null;this._uiSourceCode=null;}
_recreateUISourceCodeIfNeeded(frameId){const sourceMap=this._referringSourceMaps.peekLast();if(this._activeSourceMap===sourceMap){return;}
this._activeSourceMap=sourceMap;const newUISourceCode=this._project.createUISourceCode(this._url,Common.resourceTypes.SourceMapScript);newUISourceCode[_sourceMapSymbol]=sourceMap;const contentProvider=sourceMap.sourceContentProvider(this._url,Common.resourceTypes.SourceMapScript);const mimeType=Common.ResourceType.mimeFromURL(this._url)||'text/javascript';const embeddedContent=sourceMap.embeddedContentByURL(this._url);const metadata=typeof embeddedContent==='string'?new Workspace.UISourceCodeMetadata(null,embeddedContent.length):null;if(this._uiSourceCode){Bindings.NetworkProject.cloneInitialFrameAttribution(this._uiSourceCode,newUISourceCode);this._project.removeFile(this._uiSourceCode.url());}else{Bindings.NetworkProject.setInitialFrameAttribution(newUISourceCode,frameId);}
this._uiSourceCode=newUISourceCode;this._project.addUISourceCodeWithProvider(this._uiSourceCode,contentProvider,metadata,mimeType);}
addSourceMap(sourceMap,frameId){if(this._uiSourceCode){Bindings.NetworkProject.addFrameAttribution(this._uiSourceCode,frameId);}
this._referringSourceMaps.push(sourceMap);this._recreateUISourceCodeIfNeeded(frameId);}
removeSourceMap(sourceMap,frameId){Bindings.NetworkProject.removeFrameAttribution((this._uiSourceCode),frameId);const lastIndex=this._referringSourceMaps.lastIndexOf(sourceMap);if(lastIndex!==-1){this._referringSourceMaps.splice(lastIndex,1);}
if(!this._referringSourceMaps.length){this._project.removeFile(this._uiSourceCode.url());this._uiSourceCode=null;}else{this._recreateUISourceCodeIfNeeded(frameId);}}}
self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.CompilerScriptMapping=CompilerScriptMapping;export default class BreakpointManager extends Common.Object{constructor(workspace,targetManager,debuggerWorkspaceBinding){super();this._storage=new Storage();this._workspace=workspace;this._targetManager=targetManager;this._debuggerWorkspaceBinding=debuggerWorkspaceBinding;this._breakpointsForUISourceCode=new Map();this._breakpointByStorageId=new Map();this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this._uiSourceCodeAdded,this);}
static _breakpointStorageId(url,lineNumber,columnNumber){if(!url){return'';}
return url+':'+lineNumber+':'+columnNumber;}
copyBreakpoints(fromURL,toSourceCode){const breakpointItems=this._storage.breakpointItems(fromURL);for(const item of breakpointItems){this.setBreakpoint(toSourceCode,item.lineNumber,item.columnNumber,item.condition,item.enabled);}}
_restoreBreakpoints(uiSourceCode){const url=uiSourceCode.url();if(!url){return;}
this._storage.mute();const breakpointItems=this._storage.breakpointItems(url);for(const item of breakpointItems){this._innerSetBreakpoint(uiSourceCode,item.lineNumber,item.columnNumber,item.condition,item.enabled);}
this._storage.unmute();}
_uiSourceCodeAdded(event){const uiSourceCode=(event.data);this._restoreBreakpoints(uiSourceCode);}
setBreakpoint(uiSourceCode,lineNumber,columnNumber,condition,enabled){let uiLocation=new Workspace.UILocation(uiSourceCode,lineNumber,columnNumber);const normalizedLocation=this._debuggerWorkspaceBinding.normalizeUILocation(uiLocation);if(normalizedLocation.id()!==uiLocation.id()){Common.Revealer.reveal(normalizedLocation);uiLocation=normalizedLocation;}
return this._innerSetBreakpoint(uiLocation.uiSourceCode,uiLocation.lineNumber,uiLocation.columnNumber,condition,enabled);}
_innerSetBreakpoint(uiSourceCode,lineNumber,columnNumber,condition,enabled){const itemId=BreakpointManager._breakpointStorageId(uiSourceCode.url(),lineNumber,columnNumber);let breakpoint=this._breakpointByStorageId.get(itemId);if(breakpoint){breakpoint._updateState(condition,enabled);breakpoint.setPrimaryUISourceCode(uiSourceCode);breakpoint._updateBreakpoint();return breakpoint;}
breakpoint=new Breakpoint(this,uiSourceCode,uiSourceCode.url(),lineNumber,columnNumber,condition,enabled);this._breakpointByStorageId.set(itemId,breakpoint);return breakpoint;}
findBreakpoint(uiLocation){const breakpoints=this._breakpointsForUISourceCode.get(uiLocation.uiSourceCode);return breakpoints?(breakpoints.get(uiLocation.id()))||null:null;}
possibleBreakpoints(uiSourceCode,textRange){const startLocations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(uiSourceCode,textRange.startLine,textRange.startColumn);const endLocations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(uiSourceCode,textRange.endLine,textRange.endColumn);const endLocationByModel=new Map();for(const location of endLocations){endLocationByModel.set(location.debuggerModel,location);}
let startLocation=null;let endLocation=null;for(const location of startLocations){const endLocationCandidate=endLocationByModel.get(location.debuggerModel);if(endLocationCandidate){startLocation=location;endLocation=endLocationCandidate;break;}}
if(!startLocation||!endLocation){return Promise.resolve([]);}
return startLocation.debuggerModel.getPossibleBreakpoints(startLocation,endLocation,false).then(toUILocations.bind(this));function toUILocations(locations){let sortedLocations=locations.map(location=>this._debuggerWorkspaceBinding.rawLocationToUILocation(location));sortedLocations=sortedLocations.filter(location=>location&&location.uiSourceCode===uiSourceCode);sortedLocations.sort(Workspace.UILocation.comparator);if(!sortedLocations.length){return[];}
const result=[sortedLocations[0]];let lastLocation=sortedLocations[0];for(let i=1;i<sortedLocations.length;++i){if(sortedLocations[i].id()===lastLocation.id()){continue;}
result.push(sortedLocations[i]);lastLocation=sortedLocations[i];}
return result;}}
breakpointLocationsForUISourceCode(uiSourceCode){const breakpoints=this._breakpointsForUISourceCode.get(uiSourceCode);return breakpoints?Array.from(breakpoints.values()):[];}
allBreakpointLocations(){let result=[];for(const breakpoints of this._breakpointsForUISourceCode.values()){result=result.concat(Array.from(breakpoints.values()));}
return result;}
_removeBreakpoint(breakpoint,removeFromStorage){if(removeFromStorage){this._storage._removeBreakpoint(breakpoint);}
this._breakpointByStorageId.delete(breakpoint._breakpointStorageId());}
_uiLocationAdded(breakpoint,uiLocation){let breakpoints=this._breakpointsForUISourceCode.get(uiLocation.uiSourceCode);if(!breakpoints){breakpoints=new Map();this._breakpointsForUISourceCode.set(uiLocation.uiSourceCode,breakpoints);}
const breakpointLocation={breakpoint:breakpoint,uiLocation:uiLocation};breakpoints.set(uiLocation.id(),breakpointLocation);this.dispatchEventToListeners(Events.BreakpointAdded,breakpointLocation);}
_uiLocationRemoved(breakpoint,uiLocation){const breakpoints=this._breakpointsForUISourceCode.get(uiLocation.uiSourceCode);if(!breakpoints){return;}
const breakpointLocation=breakpoints.get(uiLocation.id())||null;if(!breakpointLocation){return;}
breakpoints.delete(uiLocation.id());if(breakpoints.size===0){this._breakpointsForUISourceCode.delete(uiLocation.uiSourceCode);}
this.dispatchEventToListeners(Events.BreakpointRemoved,{breakpoint:breakpoint,uiLocation:uiLocation});}}
export const Events={BreakpointAdded:Symbol('breakpoint-added'),BreakpointRemoved:Symbol('breakpoint-removed')};export class Breakpoint{constructor(breakpointManager,primaryUISourceCode,url,lineNumber,columnNumber,condition,enabled){this._breakpointManager=breakpointManager;this._url=url;this._lineNumber=lineNumber;this._columnNumber=columnNumber;this._defaultUILocation=null;this._uiLocations=new Set();this._condition;this._enabled;this._isRemoved;this._currentState=null;this._modelBreakpoints=new Map();this._updateState(condition,enabled);this.setPrimaryUISourceCode(primaryUISourceCode);this._breakpointManager._targetManager.observeModels(SDK.DebuggerModel,this);}
refreshInDebugger(){if(this._isRemoved){return;}
for(const breakpoint of this._modelBreakpoints.values()){breakpoint._refreshBreakpoint();}}
modelAdded(debuggerModel){const debuggerWorkspaceBinding=this._breakpointManager._debuggerWorkspaceBinding;this._modelBreakpoints.set(debuggerModel,new ModelBreakpoint(debuggerModel,this,debuggerWorkspaceBinding));}
modelRemoved(debuggerModel){const modelBreakpoint=this._modelBreakpoints.remove(debuggerModel);modelBreakpoint._cleanUpAfterDebuggerIsGone();modelBreakpoint._removeEventListeners();}
setPrimaryUISourceCode(primaryUISourceCode){if(this._uiLocations.size===0&&this._defaultUILocation){this._breakpointManager._uiLocationRemoved(this,this._defaultUILocation);}
if(primaryUISourceCode){this._defaultUILocation=primaryUISourceCode.uiLocation(this._lineNumber,this._columnNumber);}else{this._defaultUILocation=null;}
if(this._uiLocations.size===0&&this._defaultUILocation&&!this._isRemoved){this._breakpointManager._uiLocationAdded(this,this._defaultUILocation);}}
url(){return this._url;}
lineNumber(){return this._lineNumber;}
columnNumber(){return this._columnNumber;}
_uiLocationAdded(uiLocation){if(this._isRemoved){return;}
if(this._uiLocations.size===0&&this._defaultUILocation){this._breakpointManager._uiLocationRemoved(this,this._defaultUILocation);}
this._uiLocations.add(uiLocation);this._breakpointManager._uiLocationAdded(this,uiLocation);}
_uiLocationRemoved(uiLocation){this._uiLocations.delete(uiLocation);this._breakpointManager._uiLocationRemoved(this,uiLocation);if(this._uiLocations.size===0&&this._defaultUILocation&&!this._isRemoved){this._breakpointManager._uiLocationAdded(this,this._defaultUILocation);}}
enabled(){return this._enabled;}
setEnabled(enabled){this._updateState(this._condition,enabled);}
condition(){return this._condition;}
setCondition(condition){this._updateState(condition,this._enabled);}
_updateState(condition,enabled){if(this._enabled===enabled&&this._condition===condition){return;}
this._enabled=enabled;this._condition=condition;this._breakpointManager._storage._updateBreakpoint(this);this._updateBreakpoint();}
_updateBreakpoint(){if(this._uiLocations.size===0&&this._defaultUILocation){this._breakpointManager._uiLocationRemoved(this,this._defaultUILocation);}
if(this._uiLocations.size===0&&this._defaultUILocation&&!this._isRemoved){this._breakpointManager._uiLocationAdded(this,this._defaultUILocation);}
const modelBreakpoints=this._modelBreakpoints.valuesArray();for(let i=0;i<modelBreakpoints.length;++i){modelBreakpoints[i]._scheduleUpdateInDebugger();}}
remove(keepInStorage){this._isRemoved=true;const removeFromStorage=!keepInStorage;const modelBreakpoints=this._modelBreakpoints.valuesArray();for(let i=0;i<modelBreakpoints.length;++i){modelBreakpoints[i]._scheduleUpdateInDebugger();modelBreakpoints[i]._removeEventListeners();}
this._breakpointManager._removeBreakpoint(this,removeFromStorage);this._breakpointManager._targetManager.unobserveModels(SDK.DebuggerModel,this);this.setPrimaryUISourceCode(null);}
_breakpointStorageId(){return BreakpointManager._breakpointStorageId(this._url,this._lineNumber,this._columnNumber);}
_resetLocations(){this.setPrimaryUISourceCode(null);const modelBreakpoints=this._modelBreakpoints.valuesArray();for(let i=0;i<modelBreakpoints.length;++i){modelBreakpoints[i]._resetLocations();}}}
class ModelBreakpoint{constructor(debuggerModel,breakpoint,debuggerWorkspaceBinding){this._debuggerModel=debuggerModel;this._breakpoint=breakpoint;this._debuggerWorkspaceBinding=debuggerWorkspaceBinding;this._liveLocations=new Bindings.LiveLocationPool();this._uiLocations=new Map();this._debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerWasDisabled,this._cleanUpAfterDebuggerIsGone,this);this._debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerWasEnabled,this._scheduleUpdateInDebugger,this);this._hasPendingUpdate=false;this._isUpdating=false;this._cancelCallback=false;this._currentState=null;if(this._debuggerModel.debuggerEnabled()){this._scheduleUpdateInDebugger();}}
_resetLocations(){for(const uiLocation of this._uiLocations.values()){this._breakpoint._uiLocationRemoved(uiLocation);}
this._uiLocations.clear();this._liveLocations.disposeAll();}
_scheduleUpdateInDebugger(){if(this._isUpdating){this._hasPendingUpdate=true;return;}
this._isUpdating=true;this._updateInDebugger(this._didUpdateInDebugger.bind(this));}
_didUpdateInDebugger(){this._isUpdating=false;if(this._hasPendingUpdate){this._hasPendingUpdate=false;this._scheduleUpdateInDebugger();}}
_scriptDiverged(){const uiLocation=this._breakpoint._defaultUILocation;const uiSourceCode=uiLocation?uiLocation.uiSourceCode:null;if(!uiSourceCode){return false;}
const scriptFile=this._debuggerWorkspaceBinding.scriptFile(uiSourceCode,this._debuggerModel);return!!scriptFile&&scriptFile.hasDivergedFromVM();}
async _updateInDebugger(callback){if(this._debuggerModel.target().isDisposed()){this._cleanUpAfterDebuggerIsGone();callback();return;}
const uiLocation=this._breakpoint._defaultUILocation;const uiSourceCode=uiLocation?uiLocation.uiSourceCode:null;const lineNumber=this._breakpoint._lineNumber;const columnNumber=this._breakpoint._columnNumber;const condition=this._breakpoint.condition();let debuggerLocation=null;if(uiSourceCode){const locations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber);debuggerLocation=locations.find(location=>location.debuggerModel===this._debuggerModel);}
let newState;if(this._breakpoint._isRemoved||!this._breakpoint.enabled()||this._scriptDiverged()){newState=null;}else if(debuggerLocation){const script=debuggerLocation.script();if(script.sourceURL){newState=new Breakpoint.State(script.sourceURL,null,null,debuggerLocation.lineNumber,debuggerLocation.columnNumber,condition);}else{newState=new Breakpoint.State(null,script.scriptId,script.hash,debuggerLocation.lineNumber,debuggerLocation.columnNumber,condition);}}else if(this._breakpoint._currentState&&this._breakpoint._currentState.url){const position=this._breakpoint._currentState;newState=new Breakpoint.State(position.url,null,null,position.lineNumber,position.columnNumber,condition);}else if(uiSourceCode){newState=new Breakpoint.State(uiSourceCode.url(),null,null,lineNumber,columnNumber,condition);}
if(this._debuggerId&&Breakpoint.State.equals(newState,this._currentState)){callback();return;}
this._breakpoint._currentState=newState;if(this._debuggerId){await this._refreshBreakpoint();callback();return;}
if(!newState){callback();return;}
let result;this._currentState=newState;if(newState.url){result=await this._debuggerModel.setBreakpointByURL(newState.url,newState.lineNumber,newState.columnNumber,newState.condition);}else if(newState.scriptId&&newState.scriptHash){result=await this._debuggerModel.setBreakpointInAnonymousScript(newState.scriptId,newState.scriptHash,newState.lineNumber,newState.columnNumber,newState.condition);}
if(result&&result.breakpointId){this._didSetBreakpointInDebugger(callback,result.breakpointId,result.locations);}else{this._didSetBreakpointInDebugger(callback,null,[]);}}
async _refreshBreakpoint(){if(!this._debuggerId){return;}
this._resetLocations();await this._debuggerModel.removeBreakpoint(this._debuggerId);this._didRemoveFromDebugger();this._currentState=null;this._scheduleUpdateInDebugger();}
_didSetBreakpointInDebugger(callback,breakpointId,locations){if(this._cancelCallback){this._cancelCallback=false;callback();return;}
if(!breakpointId){this._breakpoint.remove(true);callback();return;}
this._debuggerId=breakpointId;this._debuggerModel.addBreakpointListener(this._debuggerId,this._breakpointResolved,this);for(let i=0;i<locations.length;++i){if(!this._addResolvedLocation(locations[i])){break;}}
callback();}
_didRemoveFromDebugger(){if(this._cancelCallback){this._cancelCallback=false;return;}
this._resetLocations();this._debuggerModel.removeBreakpointListener(this._debuggerId,this._breakpointResolved,this);delete this._debuggerId;}
_breakpointResolved(event){this._addResolvedLocation((event.data));}
_locationUpdated(liveLocation){const oldUILocation=this._uiLocations.get(liveLocation);if(oldUILocation){this._breakpoint._uiLocationRemoved(oldUILocation);}
let uiLocation=liveLocation.uiLocation();if(uiLocation){const breakpointLocation=this._breakpoint._breakpointManager.findBreakpoint(uiLocation);if(breakpointLocation&&breakpointLocation.uiLocation!==breakpointLocation.breakpoint._defaultUILocation){uiLocation=null;}}
if(uiLocation){this._uiLocations.set(liveLocation,uiLocation);this._breakpoint._uiLocationAdded(uiLocation);}else{this._uiLocations.delete(liveLocation);}}
_addResolvedLocation(location){const uiLocation=this._debuggerWorkspaceBinding.rawLocationToUILocation(location);if(!uiLocation){return false;}
const breakpointLocation=this._breakpoint._breakpointManager.findBreakpoint(uiLocation);if(breakpointLocation&&breakpointLocation.breakpoint!==this._breakpoint){this._breakpoint.remove(false);return false;}
this._debuggerWorkspaceBinding.createLiveLocation(location,this._locationUpdated.bind(this),this._liveLocations);return true;}
_cleanUpAfterDebuggerIsGone(){if(this._isUpdating){this._cancelCallback=true;}
this._resetLocations();this._currentState=null;if(this._debuggerId){this._didRemoveFromDebugger();}}
_removeEventListeners(){this._debuggerModel.removeEventListener(SDK.DebuggerModel.Events.DebuggerWasDisabled,this._cleanUpAfterDebuggerIsGone,this);this._debuggerModel.removeEventListener(SDK.DebuggerModel.Events.DebuggerWasEnabled,this._scheduleUpdateInDebugger,this);}}
Breakpoint.State=class{constructor(url,scriptId,scriptHash,lineNumber,columnNumber,condition){this.url=url;this.scriptId=scriptId;this.scriptHash=scriptHash;this.lineNumber=lineNumber;this.columnNumber=columnNumber;this.condition=condition;}
static equals(stateA,stateB){if(!stateA||!stateB){return false;}
return stateA.url===stateB.url&&stateA.scriptId===stateB.scriptId&&stateA.scriptHash===stateB.scriptHash&&stateA.lineNumber===stateB.lineNumber&&stateA.columnNumber===stateB.columnNumber&&stateA.condition===stateB.condition;}};class Storage{constructor(){this._setting=Common.settings.createLocalSetting('breakpoints',[]);this._breakpoints=new Map();const items=(this._setting.get());for(const item of items){item.columnNumber=item.columnNumber||0;this._breakpoints.set(BreakpointManager._breakpointStorageId(item.url,item.lineNumber,item.columnNumber),item);}
this._muted;}
mute(){this._muted=true;}
unmute(){delete this._muted;}
breakpointItems(url){return Array.from(this._breakpoints.values()).filter(item=>item.url===url);}
_updateBreakpoint(breakpoint){if(this._muted||!breakpoint._breakpointStorageId()){return;}
this._breakpoints.set(breakpoint._breakpointStorageId(),new Storage.Item(breakpoint));this._save();}
_removeBreakpoint(breakpoint){if(this._muted){return;}
this._breakpoints.delete(breakpoint._breakpointStorageId());this._save();}
_save(){this._setting.set(Array.from(this._breakpoints.values()));}}
Storage.Item=class{constructor(breakpoint){this.url=breakpoint._url;this.lineNumber=breakpoint.lineNumber();this.columnNumber=breakpoint.columnNumber();this.condition=breakpoint.condition();this.enabled=breakpoint.enabled();}};self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.BreakpointManager=BreakpointManager;Bindings.BreakpointManager.Events=Events;Bindings.BreakpointManager.Breakpoint=Breakpoint;Bindings.BreakpointManager.ModelBreakpoint=ModelBreakpoint;Bindings.BreakpointManager.BreakpointLocation;Bindings.breakpointManager;export default class BlackboxManager{constructor(debuggerWorkspaceBinding){this._debuggerWorkspaceBinding=debuggerWorkspaceBinding;SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.GlobalObjectCleared,this._clearCacheIfNeeded.bind(this),this);Common.moduleSetting('skipStackFramesPattern').addChangeListener(this._patternChanged.bind(this));Common.moduleSetting('skipContentScripts').addChangeListener(this._patternChanged.bind(this));this._listeners=new Set();this._isBlackboxedURLCache=new Map();SDK.targetManager.observeModels(SDK.DebuggerModel,this);}
addChangeListener(listener){this._listeners.add(listener);}
removeChangeListener(listener){this._listeners.delete(listener);}
modelAdded(debuggerModel){this._setBlackboxPatterns(debuggerModel);const sourceMapManager=debuggerModel.sourceMapManager();sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapAttached,this._sourceMapAttached,this);sourceMapManager.addEventListener(SDK.SourceMapManager.Events.SourceMapDetached,this._sourceMapDetached,this);}
modelRemoved(debuggerModel){this._clearCacheIfNeeded();const sourceMapManager=debuggerModel.sourceMapManager();sourceMapManager.removeEventListener(SDK.SourceMapManager.Events.SourceMapAttached,this._sourceMapAttached,this);sourceMapManager.removeEventListener(SDK.SourceMapManager.Events.SourceMapDetached,this._sourceMapDetached,this);}
_clearCacheIfNeeded(){if(this._isBlackboxedURLCache.size>1024){this._isBlackboxedURLCache.clear();}}
_setBlackboxPatterns(debuggerModel){const regexPatterns=Common.moduleSetting('skipStackFramesPattern').getAsArray();const patterns=([]);for(const item of regexPatterns){if(!item.disabled&&item.pattern){patterns.push(item.pattern);}}
return debuggerModel.setBlackboxPatterns(patterns);}
isBlackboxedUISourceCode(uiSourceCode){const projectType=uiSourceCode.project().type();const isContentScript=projectType===Workspace.projectTypes.ContentScripts;if(isContentScript&&Common.moduleSetting('skipContentScripts').get()){return true;}
const url=this._uiSourceCodeURL(uiSourceCode);return url?this.isBlackboxedURL(url):false;}
isBlackboxedURL(url,isContentScript){if(this._isBlackboxedURLCache.has(url)){return!!this._isBlackboxedURLCache.get(url);}
if(isContentScript&&Common.moduleSetting('skipContentScripts').get()){return true;}
const regex=Common.moduleSetting('skipStackFramesPattern').asRegExp();const isBlackboxed=(regex&&regex.test(url))||false;this._isBlackboxedURLCache.set(url,isBlackboxed);return isBlackboxed;}
_sourceMapAttached(event){const script=(event.data.client);const sourceMap=(event.data.sourceMap);this._updateScriptRanges(script,sourceMap);}
_sourceMapDetached(event){const script=(event.data.client);this._updateScriptRanges(script,null);}
async _updateScriptRanges(script,sourceMap){let hasBlackboxedMappings=false;if(!Bindings.blackboxManager.isBlackboxedURL(script.sourceURL,script.isContentScript())){hasBlackboxedMappings=sourceMap?sourceMap.sourceURLs().some(url=>this.isBlackboxedURL(url)):false;}
if(!hasBlackboxedMappings){if(script[_blackboxedRanges]&&await script.setBlackboxedRanges([])){delete script[_blackboxedRanges];}
this._debuggerWorkspaceBinding.updateLocations(script);return;}
const mappings=sourceMap.mappings();const newRanges=[];let currentBlackboxed=false;if(mappings[0].lineNumber!==0||mappings[0].columnNumber!==0){newRanges.push({lineNumber:0,columnNumber:0});currentBlackboxed=true;}
for(const mapping of mappings){if(mapping.sourceURL&&currentBlackboxed!==this.isBlackboxedURL(mapping.sourceURL)){newRanges.push({lineNumber:mapping.lineNumber,columnNumber:mapping.columnNumber});currentBlackboxed=!currentBlackboxed;}}
const oldRanges=script[_blackboxedRanges]||[];if(!isEqual(oldRanges,newRanges)&&await script.setBlackboxedRanges(newRanges)){script[_blackboxedRanges]=newRanges;}
this._debuggerWorkspaceBinding.updateLocations(script);function isEqual(rangesA,rangesB){if(rangesA.length!==rangesB.length){return false;}
for(let i=0;i<rangesA.length;++i){if(rangesA[i].lineNumber!==rangesB[i].lineNumber||rangesA[i].columnNumber!==rangesB[i].columnNumber){return false;}}
return true;}}
_uiSourceCodeURL(uiSourceCode){return uiSourceCode.project().type()===Workspace.projectTypes.Debugger?null:uiSourceCode.url();}
canBlackboxUISourceCode(uiSourceCode){const url=this._uiSourceCodeURL(uiSourceCode);return url?!!this._urlToRegExpString(url):false;}
blackboxUISourceCode(uiSourceCode){const url=this._uiSourceCodeURL(uiSourceCode);if(url){this._blackboxURL(url);}}
unblackboxUISourceCode(uiSourceCode){const url=this._uiSourceCodeURL(uiSourceCode);if(url){this._unblackboxURL(url);}}
blackboxContentScripts(){Common.moduleSetting('skipContentScripts').set(true);}
unblackboxContentScripts(){Common.moduleSetting('skipContentScripts').set(false);}
_blackboxURL(url){const regexPatterns=Common.moduleSetting('skipStackFramesPattern').getAsArray();const regexValue=this._urlToRegExpString(url);if(!regexValue){return;}
let found=false;for(let i=0;i<regexPatterns.length;++i){const item=regexPatterns[i];if(item.pattern===regexValue){item.disabled=false;found=true;break;}}
if(!found){regexPatterns.push({pattern:regexValue});}
Common.moduleSetting('skipStackFramesPattern').setAsArray(regexPatterns);}
_unblackboxURL(url){let regexPatterns=Common.moduleSetting('skipStackFramesPattern').getAsArray();const regexValue=Bindings.blackboxManager._urlToRegExpString(url);if(!regexValue){return;}
regexPatterns=regexPatterns.filter(function(item){return item.pattern!==regexValue;});for(let i=0;i<regexPatterns.length;++i){const item=regexPatterns[i];if(item.disabled){continue;}
try{const regex=new RegExp(item.pattern);if(regex.test(url)){item.disabled=true;}}catch(e){}}
Common.moduleSetting('skipStackFramesPattern').setAsArray(regexPatterns);}
async _patternChanged(){this._isBlackboxedURLCache.clear();const promises=[];for(const debuggerModel of SDK.targetManager.models(SDK.DebuggerModel)){promises.push(this._setBlackboxPatterns(debuggerModel));const sourceMapManager=debuggerModel.sourceMapManager();for(const script of debuggerModel.scripts()){promises.push(this._updateScriptRanges(script,sourceMapManager.sourceMapForClient(script)));}}
await Promise.all(promises);const listeners=Array.from(this._listeners);for(const listener of listeners){listener();}
this._patternChangeFinishedForTests();}
_patternChangeFinishedForTests(){}
_urlToRegExpString(url){const parsedURL=new Common.ParsedURL(url);if(parsedURL.isAboutBlank()||parsedURL.isDataURL()){return'';}
if(!parsedURL.isValid){return'^'+url.escapeForRegExp()+'$';}
let name=parsedURL.lastPathComponent;if(name){name='/'+name;}else if(parsedURL.folderPathComponents){name=parsedURL.folderPathComponents+'/';}
if(!name){name=parsedURL.host;}
if(!name){return'';}
const scheme=parsedURL.scheme;let prefix='';if(scheme&&scheme!=='http'&&scheme!=='https'){prefix='^'+scheme+'://';if(scheme==='chrome-extension'){prefix+=parsedURL.host+'\\b';}
prefix+='.*';}
return prefix+name.escapeForRegExp()+(url.endsWith(name)?'$':'\\b');}}
const _blackboxedRanges=Symbol('blackboxedRanged');self.Bindings=self.Bindings||{};Bindings=Bindings||{};Bindings.BlackboxManager=BlackboxManager;Bindings.blackboxManager;import*as FileManager from'./FileManager.js';import*as UISourceCode from'./UISourceCode.js';import*as Workspace from'./WorkspaceImpl.js';export{FileManager,UISourceCode,Workspace,};export class ProjectSearchConfig{query(){}
ignoreCase(){}
isRegex(){}
queries(){}
filePathMatchesFileQuery(filePath){}}
export class Project{workspace(){}
id(){}
type(){}
isServiceProject(){}
displayName(){}
requestMetadata(uiSourceCode){}
requestFileContent(uiSourceCode){}
canSetFileContent(){}
setFileContent(uiSourceCode,newContent,isBase64){}
fullDisplayName(uiSourceCode){}
mimeType(uiSourceCode){}
canRename(){}
rename(uiSourceCode,newName,callback){}
excludeFolder(path){}
canExcludeFolder(path){}
createFile(path,name,content,isBase64){}
canCreateFile(){}
deleteFile(uiSourceCode){}
remove(){}
searchInFileContent(uiSourceCode,query,caseSensitive,isRegex){}
findFilesMatchingSearchRequest(searchConfig,filesMathingFileQuery,progress){}
indexContent(progress){}
uiSourceCodeForURL(url){}
uiSourceCodes(){}}
export const projectTypes={Debugger:'debugger',Formatter:'formatter',Network:'network',FileSystem:'filesystem',ContentScripts:'contentscripts',Service:'service'};export class ProjectStore{constructor(workspace,id,type,displayName){this._workspace=workspace;this._id=id;this._type=type;this._displayName=displayName;this._uiSourceCodesMap=new Map();this._uiSourceCodesList=[];this._project=(this);}
id(){return this._id;}
type(){return this._type;}
displayName(){return this._displayName;}
workspace(){return this._workspace;}
createUISourceCode(url,contentType){return new Workspace.UISourceCode(this._project,url,contentType);}
addUISourceCode(uiSourceCode){const url=uiSourceCode.url();if(this.uiSourceCodeForURL(url)){return false;}
this._uiSourceCodesMap.set(url,{uiSourceCode:uiSourceCode,index:this._uiSourceCodesList.length});this._uiSourceCodesList.push(uiSourceCode);this._workspace.dispatchEventToListeners(Events.UISourceCodeAdded,uiSourceCode);return true;}
removeUISourceCode(url){const uiSourceCode=this.uiSourceCodeForURL(url);if(!uiSourceCode){return;}
const entry=this._uiSourceCodesMap.get(url);const movedUISourceCode=this._uiSourceCodesList[this._uiSourceCodesList.length-1];this._uiSourceCodesList[entry.index]=movedUISourceCode;const movedEntry=this._uiSourceCodesMap.get(movedUISourceCode.url());movedEntry.index=entry.index;this._uiSourceCodesList.splice(this._uiSourceCodesList.length-1,1);this._uiSourceCodesMap.delete(url);this._workspace.dispatchEventToListeners(Events.UISourceCodeRemoved,entry.uiSourceCode);}
removeProject(){this._workspace._removeProject(this._project);this._uiSourceCodesMap=new Map();this._uiSourceCodesList=[];}
uiSourceCodeForURL(url){const entry=this._uiSourceCodesMap.get(url);return entry?entry.uiSourceCode:null;}
uiSourceCodes(){return this._uiSourceCodesList;}
renameUISourceCode(uiSourceCode,newName){const oldPath=uiSourceCode.url();const newPath=uiSourceCode.parentURL()?uiSourceCode.parentURL()+'/'+newName:newName;const value=(this._uiSourceCodesMap.get(oldPath));this._uiSourceCodesMap.set(newPath,value);this._uiSourceCodesMap.delete(oldPath);}}
export default class WorkspaceImpl extends Common.Object{constructor(){super();this._projects=new Map();this._hasResourceContentTrackingExtensions=false;}
uiSourceCode(projectId,url){const project=this._projects.get(projectId);return project?project.uiSourceCodeForURL(url):null;}
uiSourceCodeForURL(url){for(const project of this._projects.values()){const uiSourceCode=project.uiSourceCodeForURL(url);if(uiSourceCode){return uiSourceCode;}}
return null;}
uiSourceCodesForProjectType(type){let result=[];for(const project of this._projects.values()){if(project.type()===type){result=result.concat(project.uiSourceCodes());}}
return result;}
addProject(project){console.assert(!this._projects.has(project.id()),`A project with id ${project.id()} already exists!`);this._projects.set(project.id(),project);this.dispatchEventToListeners(Events.ProjectAdded,project);}
_removeProject(project){this._projects.delete(project.id());this.dispatchEventToListeners(Events.ProjectRemoved,project);}
project(projectId){return this._projects.get(projectId)||null;}
projects(){return this._projects.valuesArray();}
projectsForType(type){function filterByType(project){return project.type()===type;}
return this.projects().filter(filterByType);}
uiSourceCodes(){let result=[];for(const project of this._projects.values()){result=result.concat(project.uiSourceCodes());}
return result;}
setHasResourceContentTrackingExtensions(hasExtensions){this._hasResourceContentTrackingExtensions=hasExtensions;}
hasResourceContentTrackingExtensions(){return this._hasResourceContentTrackingExtensions;}}
export const Events={UISourceCodeAdded:Symbol('UISourceCodeAdded'),UISourceCodeRemoved:Symbol('UISourceCodeRemoved'),UISourceCodeRenamed:Symbol('UISourceCodeRenamed'),WorkingCopyChanged:Symbol('WorkingCopyChanged'),WorkingCopyCommitted:Symbol('WorkingCopyCommitted'),WorkingCopyCommittedByUser:Symbol('WorkingCopyCommittedByUser'),ProjectAdded:Symbol('ProjectAdded'),ProjectRemoved:Symbol('ProjectRemoved')};self.Workspace=self.Workspace||{};Workspace=Workspace||{};Workspace.Workspace=WorkspaceImpl;Workspace.Workspace.Events=Events;Workspace.ProjectSearchConfig=ProjectSearchConfig;Workspace.Project=Project;Workspace.projectTypes=projectTypes;Workspace.ProjectStore=ProjectStore;Workspace.workspace;export default class UISourceCode extends Common.Object{constructor(project,url,contentType){super();this._project=project;this._url=url;const parsedURL=url.asParsedURL();if(parsedURL){this._origin=parsedURL.securityOrigin();this._parentURL=this._origin+parsedURL.folderPathComponents;this._name=parsedURL.lastPathComponent;if(parsedURL.queryParams){this._name+='?'+parsedURL.queryParams;}}else{this._origin='';this._parentURL='';this._name=url;}
this._contentType=contentType;this._requestContentPromise=null;this._decorations=null;this._hasCommits=false;this._messages=null;this._contentLoaded=false;this._content=null;this._forceLoadOnCheckContent=false;this._checkingContent=false;this._lastAcceptedContent=null;this._workingCopy=null;this._workingCopyGetter=null;}
requestMetadata(){return this._project.requestMetadata(this);}
name(){return this._name;}
mimeType(){return this._project.mimeType(this);}
url(){return this._url;}
parentURL(){return this._parentURL;}
origin(){return this._origin;}
fullDisplayName(){return this._project.fullDisplayName(this);}
displayName(skipTrim){if(!this._name){return Common.UIString('(index)');}
let name=this._name;try{if(this.project().type()===Workspace.projectTypes.FileSystem){name=unescape(name);}else{name=decodeURI(name);}}catch(e){}
return skipTrim?name:name.trimEndWithMaxLength(100);}
canRename(){return this._project.canRename();}
rename(newName){let fulfill;const promise=new Promise(x=>fulfill=x);this._project.rename(this,newName,innerCallback.bind(this));return promise;function innerCallback(success,newName,newURL,newContentType){if(success){this._updateName((newName),(newURL),(newContentType));}
fulfill(success);}}
remove(){this._project.deleteFile(this);}
_updateName(name,url,contentType){const oldURL=this._url;this._url=this._url.substring(0,this._url.length-this._name.length)+name;this._name=name;if(url){this._url=url;}
if(contentType){this._contentType=contentType;}
this.dispatchEventToListeners(Events.TitleChanged,this);this.project().workspace().dispatchEventToListeners(Workspace.Workspace.Events.UISourceCodeRenamed,{oldURL:oldURL,uiSourceCode:this});}
contentURL(){return this.url();}
contentType(){return this._contentType;}
async contentEncoded(){await this.requestContent();return this._contentEncoded||false;}
project(){return this._project;}
requestContent(){if(this._requestContentPromise){return this._requestContentPromise;}
if(this._contentLoaded){return Promise.resolve((this._content));}
this._requestContentPromise=this._requestContentImpl();return this._requestContentPromise;}
async _requestContentImpl(){try{const content=await this._project.requestFileContent(this);if(!this._contentLoaded){this._contentLoaded=true;this._content=content;this._contentEncoded=content.isEncoded;}}catch(err){this._contentLoaded=true;this._content={error:err?String(err):'',isEncoded:false};}
return(this._content);}
async checkContentUpdated(){if(!this._contentLoaded&&!this._forceLoadOnCheckContent){return;}
if(!this._project.canSetFileContent()||this._checkingContent){return;}
this._checkingContent=true;const updatedContent=await this._project.requestFileContent(this);this._checkingContent=false;if(updatedContent.content===null){const workingCopy=this.workingCopy();this._contentCommitted('',false);this.setWorkingCopy(workingCopy);return;}
if(this._lastAcceptedContent===updatedContent.content){return;}
if(this._content&&this._content.content===updatedContent.content){this._lastAcceptedContent=null;return;}
if(!this.isDirty()||this._workingCopy===updatedContent.content){this._contentCommitted((updatedContent.content),false);return;}
await Common.Revealer.reveal(this);await new Promise(resolve=>setTimeout(resolve,0));const shouldUpdate=window.confirm(ls`This file was changed externally. Would you like to reload it?`);if(shouldUpdate){this._contentCommitted((updatedContent.content),false);}else{this._lastAcceptedContent=updatedContent.content;}}
forceLoadOnCheckContent(){this._forceLoadOnCheckContent=true;}
_commitContent(content){if(this._project.canSetFileContent()){this._project.setFileContent(this,content,false);}
this._contentCommitted(content,true);}
_contentCommitted(content,committedByUser){this._lastAcceptedContent=null;this._content={content,isEncoded:false};this._contentLoaded=true;this._requestContentPromise=null;this._hasCommits=true;this._innerResetWorkingCopy();const data={uiSourceCode:this,content,encoded:this._contentEncoded};this.dispatchEventToListeners(Events.WorkingCopyCommitted,data);this._project.workspace().dispatchEventToListeners(Workspace.Workspace.Events.WorkingCopyCommitted,data);if(committedByUser){this._project.workspace().dispatchEventToListeners(Workspace.Workspace.Events.WorkingCopyCommittedByUser,data);}}
addRevision(content){this._commitContent(content);}
hasCommits(){return this._hasCommits;}
workingCopy(){if(this._workingCopyGetter){this._workingCopy=this._workingCopyGetter();this._workingCopyGetter=null;}
if(this.isDirty()){return(this._workingCopy);}
return(this._content&&this._content.content)||'';}
resetWorkingCopy(){this._innerResetWorkingCopy();this._workingCopyChanged();}
_innerResetWorkingCopy(){this._workingCopy=null;this._workingCopyGetter=null;}
setWorkingCopy(newWorkingCopy){this._workingCopy=newWorkingCopy;this._workingCopyGetter=null;this._workingCopyChanged();}
setContent(content,isBase64){this._contentEncoded=isBase64;if(this._project.canSetFileContent()){this._project.setFileContent(this,content,isBase64);}
this._contentCommitted(content,true);}
setWorkingCopyGetter(workingCopyGetter){this._workingCopyGetter=workingCopyGetter;this._workingCopyChanged();}
_workingCopyChanged(){this._removeAllMessages();this.dispatchEventToListeners(Events.WorkingCopyChanged,this);this._project.workspace().dispatchEventToListeners(Workspace.Workspace.Events.WorkingCopyChanged,{uiSourceCode:this});}
removeWorkingCopyGetter(){if(!this._workingCopyGetter){return;}
this._workingCopy=this._workingCopyGetter();this._workingCopyGetter=null;}
commitWorkingCopy(){if(this.isDirty()){this._commitContent(this.workingCopy());}}
isDirty(){return this._workingCopy!==null||this._workingCopyGetter!==null;}
extension(){return Common.ParsedURL.extractExtension(this._name);}
content(){return(this._content&&this._content.content)||'';}
loadError(){return(this._content&&this._content.error);}
searchInContent(query,caseSensitive,isRegex){const content=this.content();if(!content){return this._project.searchInFileContent(this,query,caseSensitive,isRegex);}
return Promise.resolve(Common.ContentProvider.performSearchInContent(content,query,caseSensitive,isRegex));}
contentLoaded(){return this._contentLoaded;}
uiLocation(lineNumber,columnNumber){if(typeof columnNumber==='undefined'){columnNumber=0;}
return new UILocation(this,lineNumber,columnNumber);}
messages(){return this._messages?new Set(this._messages):new Set();}
addLineMessage(level,text,lineNumber,columnNumber){return this.addMessage(level,text,new TextUtils.TextRange(lineNumber,columnNumber||0,lineNumber,columnNumber||0));}
addMessage(level,text,range){const message=new Message(this,level,text,range);if(!this._messages){this._messages=new Set();}
this._messages.add(message);this.dispatchEventToListeners(Events.MessageAdded,message);return message;}
removeMessage(message){if(this._messages&&this._messages.delete(message)){this.dispatchEventToListeners(Events.MessageRemoved,message);}}
_removeAllMessages(){if(!this._messages){return;}
for(const message of this._messages){this.dispatchEventToListeners(Events.MessageRemoved,message);}
this._messages=null;}
addLineDecoration(lineNumber,type,data){this.addDecoration(TextUtils.TextRange.createFromLocation(lineNumber,0),type,data);}
addDecoration(range,type,data){const marker=new LineMarker(range,type,data);if(!this._decorations){this._decorations=new Platform.Multimap();}
this._decorations.set(type,marker);this.dispatchEventToListeners(Events.LineDecorationAdded,marker);}
removeDecorationsForType(type){if(!this._decorations){return;}
const markers=this._decorations.get(type);this._decorations.deleteAll(type);markers.forEach(marker=>{this.dispatchEventToListeners(Events.LineDecorationRemoved,marker);});}
allDecorations(){return this._decorations?this._decorations.valuesArray():[];}
removeAllDecorations(){if(!this._decorations){return;}
const decorationList=this._decorations.valuesArray();this._decorations.clear();decorationList.forEach(marker=>this.dispatchEventToListeners(Events.LineDecorationRemoved,marker));}
decorationsForType(type){return this._decorations?this._decorations.get(type):null;}}
export const Events={WorkingCopyChanged:Symbol('WorkingCopyChanged'),WorkingCopyCommitted:Symbol('WorkingCopyCommitted'),TitleChanged:Symbol('TitleChanged'),MessageAdded:Symbol('MessageAdded'),MessageRemoved:Symbol('MessageRemoved'),LineDecorationAdded:Symbol('LineDecorationAdded'),LineDecorationRemoved:Symbol('LineDecorationRemoved')};export class UILocation{constructor(uiSourceCode,lineNumber,columnNumber){this.uiSourceCode=uiSourceCode;this.lineNumber=lineNumber;this.columnNumber=columnNumber;}
linkText(skipTrim){let linkText=this.uiSourceCode.displayName(skipTrim);if(typeof this.lineNumber==='number'){linkText+=':'+(this.lineNumber+1);}
return linkText;}
id(){return this.uiSourceCode.project().id()+':'+this.uiSourceCode.url()+':'+this.lineNumber+':'+
this.columnNumber;}
toUIString(){return this.uiSourceCode.url()+':'+(this.lineNumber+1);}
static comparator(location1,location2){return location1.compareTo(location2);}
compareTo(other){if(this.uiSourceCode.url()!==other.uiSourceCode.url()){return this.uiSourceCode.url()>other.uiSourceCode.url()?1:-1;}
if(this.lineNumber!==other.lineNumber){return this.lineNumber-other.lineNumber;}
return this.columnNumber-other.columnNumber;}}
export class Message{constructor(uiSourceCode,level,text,range){this._uiSourceCode=uiSourceCode;this._level=level;this._text=text;this._range=range;}
uiSourceCode(){return this._uiSourceCode;}
level(){return this._level;}
text(){return this._text;}
range(){return this._range;}
lineNumber(){return this._range.startLine;}
columnNumber(){return this._range.startColumn;}
isEqual(another){return this._uiSourceCode===another._uiSourceCode&&this.text()===another.text()&&this.level()===another.level()&&this.range().equal(another.range());}
remove(){this._uiSourceCode.removeMessage(this);}}
Message.Level={Error:'Error',Warning:'Warning'};export class LineMarker{constructor(range,type,data){this._range=range;this._type=type;this._data=data;}
range(){return this._range;}
type(){return this._type;}
data(){return this._data;}}
export class UISourceCodeMetadata{constructor(modificationTime,contentSize){this.modificationTime=modificationTime;this.contentSize=contentSize;}}
self.Workspace=self.Workspace||{};Workspace=Workspace||{};Workspace.UISourceCode=UISourceCode;Workspace.UISourceCode.Events=Events;Workspace.UISourceCode.Message=Message;Workspace.UISourceCode.LineMarker=LineMarker;Workspace.UILocation=UILocation;Workspace.UISourceCodeMetadata=UISourceCodeMetadata;export default class FileManager extends Common.Object{constructor(){super();this._saveCallbacks=new Map();Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.SavedURL,this._savedURL,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.CanceledSaveURL,this._canceledSavedURL,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.AppendedToURL,this._appendedToURL,this);}
save(url,content,forceSaveAs){const result=new Promise(resolve=>this._saveCallbacks.set(url,resolve));Host.InspectorFrontendHost.save(url,content,forceSaveAs);return result;}
_savedURL(event){const url=(event.data.url);const callback=this._saveCallbacks.get(url);this._saveCallbacks.delete(url);if(callback){callback({fileSystemPath:(event.data.fileSystemPath)});}}
_canceledSavedURL(event){const url=(event.data);const callback=this._saveCallbacks.get(url);this._saveCallbacks.delete(url);if(callback){callback(null);}}
append(url,content){Host.InspectorFrontendHost.append(url,content);}
close(url){Host.InspectorFrontendHost.close(url);}
_appendedToURL(event){const url=(event.data);this.dispatchEventToListeners(Events.AppendedToURL,url);}}
export const Events={AppendedToURL:Symbol('AppendedToURL')};self.Workspace=self.Workspace||{};Workspace=Workspace||{};Workspace.FileManager=FileManager;Workspace.FileManager.Events=Events;Workspace.fileManager;import*as ServiceManager from'./ServiceManager.js';export{ServiceManager,};export default class ServiceManager{createRemoteService(serviceName){if(!this._remoteConnection){const url=Root.Runtime.queryParam('service-backend');if(!url){console.error('No endpoint address specified');return(Promise.resolve(null));}
this._remoteConnection=new Connection(new RemoteServicePort(url));}
return this._remoteConnection._createService(serviceName);}
createAppService(appName,serviceName){let url=appName+'.js';const remoteBase=Root.Runtime.queryParam('remoteBase');const debugFrontend=Root.Runtime.queryParam('debugFrontend');const isUnderTest=Host.isUnderTest();const queryParams=[];if(remoteBase){queryParams.push('remoteBase='+remoteBase);}
if(debugFrontend){queryParams.push('debugFrontend='+debugFrontend);}
if(isUnderTest){queryParams.push('isUnderTest=true');}
if(queryParams.length){url+=`?${queryParams.join('&')}`;}
const worker=new Worker(url);const connection=new Connection(new WorkerServicePort(worker));return connection._createService(serviceName);}}
class Connection{constructor(port){this._port=port;this._port.setHandlers(this._onMessage.bind(this),this._connectionClosed.bind(this));this._lastId=1;this._callbacks=new Map();this._services=new Map();}
_createService(serviceName){return this._sendCommand(serviceName+'.create').then(result=>{if(!result){console.error('Could not initialize service: '+serviceName);return null;}
const service=new Service(this,serviceName,result.id);this._services.set(serviceName+':'+result.id,service);return service;});}
_serviceDisposed(service){this._services.delete(service._serviceName+':'+service._objectId);if(!this._services.size){this._port.close();}}
_sendCommand(method,params){const id=this._lastId++;const message=JSON.stringify({id:id,method:method,params:params||{}});return this._port.send(message).then(success=>{if(!success){return Promise.resolve(null);}
return new Promise(fulfill=>this._callbacks.set(id,fulfill));});}
_onMessage(data){let object;try{object=JSON.parse(data);}catch(e){console.error(e);return;}
if(object.id){if(object.error){console.error('Service error: '+object.error);}
this._callbacks.get(object.id)(object.error?null:object.result);this._callbacks.delete(object.id);return;}
const tokens=object.method.split('.');const serviceName=tokens[0];const methodName=tokens[1];const service=this._services.get(serviceName+':'+object.params.id);if(!service){console.error('Unable to lookup stub for '+serviceName+':'+object.params.id);return;}
service._dispatchNotification(methodName,object.params);}
_connectionClosed(){for(const callback of this._callbacks.values()){callback(null);}
this._callbacks.clear();for(const service of this._services.values()){service._dispatchNotification('disposed');}
this._services.clear();}}
export class Service{constructor(connection,serviceName,objectId){this._connection=connection;this._serviceName=serviceName;this._objectId=objectId;this._notificationHandlers=new Map();}
dispose(){const params={id:this._objectId};return this._connection._sendCommand(this._serviceName+'.dispose',params).then(()=>{this._connection._serviceDisposed(this);});}
on(methodName,handler){this._notificationHandlers.set(methodName,handler);}
send(methodName,params){params=params||{};params.id=this._objectId;return this._connection._sendCommand(this._serviceName+'.'+methodName,params);}
_dispatchNotification(methodName,params){const handler=this._notificationHandlers.get(methodName);if(!handler){console.error('Could not report notification \''+methodName+'\' on \''+this._objectId+'\'');return;}
handler(params);}}
class RemoteServicePort{constructor(url){this._url=url;}
setHandlers(messageHandler,closeHandler){this._messageHandler=messageHandler;this._closeHandler=closeHandler;}
_open(){if(!this._connectionPromise){this._connectionPromise=new Promise(promiseBody.bind(this));}
return this._connectionPromise;function promiseBody(fulfill){let socket;try{socket=new WebSocket((this._url));socket.onmessage=onMessage.bind(this);socket.onclose=onClose.bind(this);socket.onopen=onConnect.bind(this);}catch(e){fulfill(false);}
function onConnect(){this._socket=socket;fulfill(true);}
function onMessage(event){this._messageHandler(event.data);}
function onClose(){if(!this._socket){fulfill(false);}
this._socketClosed(!!this._socket);}}}
send(message){return this._open().then(()=>{if(this._socket){this._socket.send(message);return true;}
return false;});}
close(){return this._open().then(()=>{if(this._socket){this._socket.close();this._socketClosed(true);}
return true;});}
_socketClosed(notifyClient){this._socket=null;delete this._connectionPromise;if(notifyClient){this._closeHandler();}}}
class WorkerServicePort{constructor(worker){this._worker=worker;let fulfill;this._workerPromise=new Promise(resolve=>fulfill=resolve);this._worker.onmessage=onMessage.bind(this);this._worker.onclose=this._closeHandler;function onMessage(event){if(event.data==='workerReady'){fulfill(true);return;}
this._messageHandler(event.data);}}
setHandlers(messageHandler,closeHandler){this._messageHandler=messageHandler;this._closeHandler=closeHandler;}
send(message){return this._workerPromise.then(()=>{try{this._worker.postMessage(message);return true;}catch(e){return false;}});}
close(){return this._workerPromise.then(()=>{if(this._worker){this._worker.terminate();}
return false;});}}
self.Services=self.Services||{};Services=Services||{};Services.ServiceManager=ServiceManager;Services.ServiceManager.Service=Service;Services.serviceManager=new ServiceManager();import'./SDKModel.js';import'./CSSMetadata.js';import'../SupportedCSSProperties.js';import'./Target.js';import'./TargetManager.js';import'./ProfileTreeModel.js';import'./NetworkRequest.js';import'./NetworkManager.js';import'./RuntimeModel.js';import'./wasm_source_map/pkg/wasm_source_map.js';import*as ChildTargetManager from'./ChildTargetManager.js';import*as CompilerSourceMappingContentProvider from'./CompilerSourceMappingContentProvider.js';import*as Connections from'./Connections.js';import*as ConsoleModel from'./ConsoleModel.js';import*as CookieModel from'./CookieModel.js';import*as CookieParser from'./CookieParser.js';import*as CPUProfileDataModel from'./CPUProfileDataModel.js';import*as CPUProfilerModel from'./CPUProfilerModel.js';import*as CSSMatchedStyles from'./CSSMatchedStyles.js';import*as CSSMedia from'./CSSMedia.js';import*as CSSMetadata from'./CSSMetadata.js';import*as CSSModel from'./CSSModel.js';import*as CSSProperty from'./CSSProperty.js';import*as CSSRule from'./CSSRule.js';import*as CSSStyleDeclaration from'./CSSStyleDeclaration.js';import*as CSSStyleSheetHeader from'./CSSStyleSheetHeader.js';import*as DebuggerModel from'./DebuggerModel.js';import*as DOMDebuggerModel from'./DOMDebuggerModel.js';import*as DOMModel from'./DOMModel.js';import*as EmulationModel from'./EmulationModel.js';import*as FilmStripModel from'./FilmStripModel.js';import*as HARLog from'./HARLog.js';import*as HeapProfilerModel from'./HeapProfilerModel.js';import*as IsolateManager from'./IsolateManager.js';import*as IssuesModel from'./IssuesModel.js';import*as LayerTreeBase from'./LayerTreeBase.js';import*as LogModel from'./LogModel.js';import*as NetworkLog from'./NetworkLog.js';import*as NetworkManager from'./NetworkManager.js';import*as NetworkRequest from'./NetworkRequest.js';import*as OverlayModel from'./OverlayModel.js';import*as PaintProfiler from'./PaintProfiler.js';import*as PerformanceMetricsModel from'./PerformanceMetricsModel.js';import*as ProfileTreeModel from'./ProfileTreeModel.js';import*as RemoteObject from'./RemoteObject.js';import*as Resource from'./Resource.js';import*as ResourceTreeModel from'./ResourceTreeModel.js';import*as RuntimeModel from'./RuntimeModel.js';import*as ScreenCaptureModel from'./ScreenCaptureModel.js';import*as Script from'./Script.js';import*as SecurityOriginManager from'./SecurityOriginManager.js';import*as ServerTiming from'./ServerTiming.js';import*as ServiceWorkerCacheModel from'./ServiceWorkerCacheModel.js';import*as ServiceWorkerManager from'./ServiceWorkerManager.js';import*as SourceMap from'./SourceMap.js';import*as SourceMapManager from'./SourceMapManager.js';import*as Target from'./Target.js';import*as TargetManager from'./TargetManager.js';import*as TracingManager from'./TracingManager.js';import*as TracingModel from'./TracingModel.js';export{ChildTargetManager,CompilerSourceMappingContentProvider,Connections,ConsoleModel,CookieModel,CookieParser,CPUProfileDataModel,CPUProfilerModel,CSSMatchedStyles,CSSMedia,CSSMetadata,CSSModel,CSSProperty,CSSRule,CSSStyleDeclaration,CSSStyleSheetHeader,DebuggerModel,DOMDebuggerModel,DOMModel,EmulationModel,FilmStripModel,HARLog,HeapProfilerModel,IsolateManager,IssuesModel,LayerTreeBase,LogModel,NetworkLog,NetworkManager,NetworkRequest,OverlayModel,PaintProfiler,PerformanceMetricsModel,ProfileTreeModel,RemoteObject,Resource,ResourceTreeModel,RuntimeModel,ScreenCaptureModel,Script,SecurityOriginManager,ServerTiming,ServiceWorkerCacheModel,ServiceWorkerManager,SourceMap,SourceMapManager,Target,TargetManager,TracingManager,TracingModel,};export default class TracingModel{constructor(backingStorage){this._backingStorage=backingStorage;this._firstWritePending=true;this._processById=new Map();this._processByName=new Map();this._minimumRecordTime=0;this._maximumRecordTime=0;this._devToolsMetadataEvents=[];this._asyncEvents=[];this._openAsyncEvents=new Map();this._openNestableAsyncEvents=new Map();this._profileGroups=new Map();this._parsedCategories=new Map();}
static isNestableAsyncPhase(phase){return phase==='b'||phase==='e'||phase==='n';}
static isAsyncBeginPhase(phase){return phase==='S'||phase==='b';}
static isAsyncPhase(phase){return TracingModel.isNestableAsyncPhase(phase)||phase==='S'||phase==='T'||phase==='F'||phase==='p';}
static isFlowPhase(phase){return phase==='s'||phase==='t'||phase==='f';}
static isTopLevelEvent(event){return event.hasCategory(DevToolsTimelineEventCategory)&&event.name==='RunTask'||event.hasCategory(LegacyTopLevelEventCategory)||event.hasCategory(DevToolsMetadataEventCategory)&&event.name==='Program';}
static _extractId(payload){const scope=payload.scope||'';if(typeof payload.id2==='undefined'){return scope&&payload.id?`${scope}@${payload.id}`:payload.id;}
const id2=payload.id2;if(typeof id2==='object'&&('global'in id2)!==('local'in id2)){return typeof id2['global']!=='undefined'?`:${scope}:${id2['global']}`:`:${scope}:${payload.pid}:${id2['local']}`;}
console.error(`Unexpected id2 field at ${payload.ts / 1000}, one and only one of 'local' and 'global' should be present.`);}
static browserMainThread(tracingModel){const processes=tracingModel.sortedProcesses();if(!processes.length){return null;}
const browserMainThreadName='CrBrowserMain';const browserProcesses=[];const browserMainThreads=[];for(const process of processes){if(process.name().toLowerCase().endsWith('browser')){browserProcesses.push(process);}
browserMainThreads.push(...process.sortedThreads().filter(t=>t.name()===browserMainThreadName));}
if(browserMainThreads.length===1){return browserMainThreads[0];}
if(browserProcesses.length===1){return browserProcesses[0].threadByName(browserMainThreadName);}
const tracingStartedInBrowser=tracingModel.devToolsMetadataEvents().filter(e=>e.name==='TracingStartedInBrowser');if(tracingStartedInBrowser.length===1){return tracingStartedInBrowser[0].thread;}
Common.console.error('Failed to find browser main thread in trace, some timeline features may be unavailable');return null;}
devToolsMetadataEvents(){return this._devToolsMetadataEvents;}
addEvents(events){for(let i=0;i<events.length;++i){this._addEvent(events[i]);}}
tracingComplete(){this._processPendingAsyncEvents();this._backingStorage.appendString(this._firstWritePending?'[]':']');this._backingStorage.finishWriting();this._firstWritePending=false;for(const process of this._processById.values()){for(const thread of process._threads.values()){thread.tracingComplete();}}}
dispose(){if(!this._firstWritePending){this._backingStorage.reset();}}
adjustTime(offset){this._minimumRecordTime+=offset;this._maximumRecordTime+=offset;for(const process of this._processById.values()){for(const thread of process._threads.values()){for(const event of thread.events()){event.startTime+=offset;if(typeof event.endTime==='number'){event.endTime+=offset;}}
for(const event of thread.asyncEvents()){event.startTime+=offset;if(typeof event.endTime==='number'){event.endTime+=offset;}}}}}
_addEvent(payload){let process=this._processById.get(payload.pid);if(!process){process=new Process(this,payload.pid);this._processById.set(payload.pid,process);}
const phase=Phase;const eventsDelimiter=',\n';this._backingStorage.appendString(this._firstWritePending?'[':eventsDelimiter);this._firstWritePending=false;const stringPayload=JSON.stringify(payload);const isAccessible=payload.ph===phase.SnapshotObject;let backingStorage=null;const keepStringsLessThan=10000;if(isAccessible&&stringPayload.length>keepStringsLessThan){backingStorage=this._backingStorage.appendAccessibleString(stringPayload);}else{this._backingStorage.appendString(stringPayload);}
const timestamp=payload.ts/1000;if(timestamp&&(!this._minimumRecordTime||timestamp<this._minimumRecordTime)&&(payload.ph===phase.Begin||payload.ph===phase.Complete||payload.ph===phase.Instant)){this._minimumRecordTime=timestamp;}
const endTimeStamp=(payload.ts+(payload.dur||0))/1000;this._maximumRecordTime=Math.max(this._maximumRecordTime,endTimeStamp);const event=process._addEvent(payload);if(!event){return;}
if(payload.ph===phase.Sample){this._addSampleEvent(event);return;}
if(TracingModel.isAsyncPhase(payload.ph)){this._asyncEvents.push(event);}
event._setBackingStorage(backingStorage);if(event.hasCategory(DevToolsMetadataEventCategory)){this._devToolsMetadataEvents.push(event);}
if(payload.ph!==phase.Metadata){return;}
switch(payload.name){case MetadataEvent.ProcessSortIndex:process._setSortIndex(payload.args['sort_index']);break;case MetadataEvent.ProcessName:const processName=payload.args['name'];process._setName(processName);this._processByName.set(processName,process);break;case MetadataEvent.ThreadSortIndex:process.threadById(payload.tid)._setSortIndex(payload.args['sort_index']);break;case MetadataEvent.ThreadName:process.threadById(payload.tid)._setName(payload.args['name']);break;}}
_addSampleEvent(event){const id=`${event.thread.process().id()}:${event.id}`;const group=this._profileGroups.get(id);if(group){group._addChild(event);}else{this._profileGroups.set(id,new ProfileEventsGroup(event));}}
profileGroup(event){return this._profileGroups.get(`${event.thread.process().id()}:${event.id}`)||null;}
minimumRecordTime(){return this._minimumRecordTime;}
maximumRecordTime(){return this._maximumRecordTime;}
sortedProcesses(){return NamedObject._sort(this._processById.valuesArray());}
processByName(name){return this._processByName.get(name);}
processById(pid){return this._processById.get(pid)||null;}
threadByName(processName,threadName){const process=this.processByName(processName);return process&&process.threadByName(threadName);}
_processPendingAsyncEvents(){this._asyncEvents.sort(Event.compareStartTime);for(let i=0;i<this._asyncEvents.length;++i){const event=this._asyncEvents[i];if(TracingModel.isNestableAsyncPhase(event.phase)){this._addNestableAsyncEvent(event);}else{this._addAsyncEvent(event);}}
this._asyncEvents=[];this._closeOpenAsyncEvents();}
_closeOpenAsyncEvents(){for(const event of this._openAsyncEvents.values()){event.setEndTime(this._maximumRecordTime);event.steps[0].setEndTime(this._maximumRecordTime);}
this._openAsyncEvents.clear();for(const eventStack of this._openNestableAsyncEvents.values()){while(eventStack.length){eventStack.pop().setEndTime(this._maximumRecordTime);}}
this._openNestableAsyncEvents.clear();}
_addNestableAsyncEvent(event){const phase=Phase;const key=event.categoriesString+'.'+event.id;let openEventsStack=this._openNestableAsyncEvents.get(key);switch(event.phase){case phase.NestableAsyncBegin:if(!openEventsStack){openEventsStack=[];this._openNestableAsyncEvents.set(key,openEventsStack);}
const asyncEvent=new AsyncEvent(event);openEventsStack.push(asyncEvent);event.thread._addAsyncEvent(asyncEvent);break;case phase.NestableAsyncInstant:if(openEventsStack&&openEventsStack.length){openEventsStack.peekLast()._addStep(event);}
break;case phase.NestableAsyncEnd:if(!openEventsStack||!openEventsStack.length){break;}
const top=openEventsStack.pop();if(top.name!==event.name){console.error(`Begin/end event mismatch for nestable async event, ${top.name} vs. ${event.name}, key: ${key}`);break;}
top._addStep(event);}}
_addAsyncEvent(event){const phase=Phase;const key=event.categoriesString+'.'+event.name+'.'+event.id;let asyncEvent=this._openAsyncEvents.get(key);if(event.phase===phase.AsyncBegin){if(asyncEvent){console.error(`Event ${event.name} has already been started`);return;}
asyncEvent=new AsyncEvent(event);this._openAsyncEvents.set(key,asyncEvent);event.thread._addAsyncEvent(asyncEvent);return;}
if(!asyncEvent){return;}
if(event.phase===phase.AsyncEnd){asyncEvent._addStep(event);this._openAsyncEvents.delete(key);return;}
if(event.phase===phase.AsyncStepInto||event.phase===phase.AsyncStepPast){const lastStep=asyncEvent.steps.peekLast();if(lastStep.phase!==phase.AsyncBegin&&lastStep.phase!==event.phase){console.assert(false,'Async event step phase mismatch: '+lastStep.phase+' at '+lastStep.startTime+' vs. '+
event.phase+' at '+event.startTime);return;}
asyncEvent._addStep(event);return;}
console.assert(false,'Invalid async event phase');}
backingStorage(){return this._backingStorage;}
_parsedCategoriesForString(str){let parsedCategories=this._parsedCategories.get(str);if(!parsedCategories){parsedCategories=new Set(str?str.split(','):[]);this._parsedCategories.set(str,parsedCategories);}
return parsedCategories;}}
export const Phase={Begin:'B',End:'E',Complete:'X',Instant:'I',AsyncBegin:'S',AsyncStepInto:'T',AsyncStepPast:'p',AsyncEnd:'F',NestableAsyncBegin:'b',NestableAsyncEnd:'e',NestableAsyncInstant:'n',FlowBegin:'s',FlowStep:'t',FlowEnd:'f',Metadata:'M',Counter:'C',Sample:'P',CreateObject:'N',SnapshotObject:'O',DeleteObject:'D'};export const MetadataEvent={ProcessSortIndex:'process_sort_index',ProcessName:'process_name',ThreadSortIndex:'thread_sort_index',ThreadName:'thread_name'};export const LegacyTopLevelEventCategory='toplevel';export const DevToolsMetadataEventCategory='disabled-by-default-devtools.timeline';export const DevToolsTimelineEventCategory='disabled-by-default-devtools.timeline';export class BackingStorage{appendString(string){}
appendAccessibleString(string){}
finishWriting(){}
reset(){}}
export class Event{constructor(categories,name,phase,startTime,thread){this.categoriesString=categories||'';this._parsedCategories=thread._model._parsedCategoriesForString(this.categoriesString);this.name=name;this.phase=phase;this.startTime=startTime;this.thread=thread;this.args={};this.selfTime=0;}
static fromPayload(payload,thread){const event=new Event(payload.cat,payload.name,(payload.ph),payload.ts/1000,thread);if(payload.args){event.addArgs(payload.args);}
if(typeof payload.dur==='number'){event.setEndTime((payload.ts+payload.dur)/1000);}
const id=TracingModel._extractId(payload);if(typeof id!=='undefined'){event.id=id;}
if(payload.bind_id){event.bind_id=payload.bind_id;}
return event;}
static compareStartTime(a,b){return a.startTime-b.startTime;}
static orderedCompareStartTime(a,b){return a.startTime-b.startTime||a.ordinal-b.ordinal||-1;}
hasCategory(categoryName){return this._parsedCategories.has(categoryName);}
setEndTime(endTime){if(endTime<this.startTime){console.assert(false,'Event out of order: '+this.name);return;}
this.endTime=endTime;this.duration=endTime-this.startTime;}
addArgs(args){for(const name in args){if(name in this.args){console.error('Same argument name ('+name+') is used for begin and end phases of '+this.name);}
this.args[name]=args[name];}}
_complete(endEvent){if(endEvent.args){this.addArgs(endEvent.args);}else{console.error('Missing mandatory event argument \'args\' at '+endEvent.startTime);}
this.setEndTime(endEvent.startTime);}
_setBackingStorage(backingStorage){}}
export class ObjectSnapshot extends Event{constructor(category,name,startTime,thread){super(category,name,Phase.SnapshotObject,startTime,thread);this._backingStorage=null;this.id;this._objectPromise=null;}
static fromPayload(payload,thread){const snapshot=new ObjectSnapshot(payload.cat,payload.name,payload.ts/1000,thread);const id=TracingModel._extractId(payload);if(typeof id!=='undefined'){snapshot.id=id;}
if(!payload.args||!payload.args['snapshot']){console.error('Missing mandatory \'snapshot\' argument at '+payload.ts/1000);return snapshot;}
if(payload.args){snapshot.addArgs(payload.args);}
return snapshot;}
requestObject(callback){const snapshot=this.args['snapshot'];if(snapshot){callback(snapshot);return;}
this._backingStorage().then(onRead,callback.bind(null,null));function onRead(result){if(!result){callback(null);return;}
try{const payload=JSON.parse(result);callback(payload['args']['snapshot']);}catch(e){Common.console.error('Malformed event data in backing storage');callback(null);}}}
objectPromise(){if(!this._objectPromise){this._objectPromise=new Promise(this.requestObject.bind(this));}
return this._objectPromise;}
_setBackingStorage(backingStorage){if(!backingStorage){return;}
this._backingStorage=backingStorage;this.args={};}}
export class AsyncEvent extends Event{constructor(startEvent){super(startEvent.categoriesString,startEvent.name,startEvent.phase,startEvent.startTime,startEvent.thread);this.addArgs(startEvent.args);this.steps=[startEvent];}
_addStep(event){this.steps.push(event);if(event.phase===Phase.AsyncEnd||event.phase===Phase.NestableAsyncEnd){this.setEndTime(event.startTime);this.steps[0].setEndTime(event.startTime);}}}
class ProfileEventsGroup{constructor(event){this.children=[event];}
_addChild(event){this.children.push(event);}}
class NamedObject{constructor(model,id){this._model=model;this._id=id;this._name='';this._sortIndex=0;}
static _sort(array){function comparator(a,b){return a._sortIndex!==b._sortIndex?a._sortIndex-b._sortIndex:a.name().localeCompare(b.name());}
return array.sort(comparator);}
_setName(name){this._name=name;}
name(){return this._name;}
_setSortIndex(sortIndex){this._sortIndex=sortIndex;}}
export class Process extends NamedObject{constructor(model,id){super(model,id);this._threads=new Map();this._threadByName=new Map();}
id(){return this._id;}
threadById(id){let thread=this._threads.get(id);if(!thread){thread=new Thread(this,id);this._threads.set(id,thread);}
return thread;}
threadByName(name){return this._threadByName.get(name)||null;}
_setThreadByName(name,thread){this._threadByName.set(name,thread);}
_addEvent(payload){return this.threadById(payload.tid)._addEvent(payload);}
sortedThreads(){return NamedObject._sort(this._threads.valuesArray());}}
export class Thread extends NamedObject{constructor(process,id){super(process._model,id);this._process=process;this._events=[];this._asyncEvents=[];this._lastTopLevelEvent=null;}
tracingComplete(){this._asyncEvents.sort(Event.compareStartTime);this._events.sort(Event.compareStartTime);const phases=Phase;const stack=[];for(let i=0;i<this._events.length;++i){const e=this._events[i];e.ordinal=i;switch(e.phase){case phases.End:this._events[i]=null;if(!stack.length){continue;}
const top=stack.pop();if(top.name!==e.name||top.categoriesString!==e.categoriesString){console.error('B/E events mismatch at '+top.startTime+' ('+top.name+') vs. '+e.startTime+' ('+e.name+')');}else{top._complete(e);}
break;case phases.Begin:stack.push(e);break;}}
while(stack.length){stack.pop().setEndTime(this._model.maximumRecordTime());}
this._events.remove(null,false);}
_addEvent(payload){const event=payload.ph===Phase.SnapshotObject?ObjectSnapshot.fromPayload(payload,this):Event.fromPayload(payload,this);if(TracingModel.isTopLevelEvent(event)){if(this._lastTopLevelEvent&&this._lastTopLevelEvent.endTime>event.startTime){return null;}
this._lastTopLevelEvent=event;}
this._events.push(event);return event;}
_addAsyncEvent(asyncEvent){this._asyncEvents.push(asyncEvent);}
_setName(name){super._setName(name);this._process._setThreadByName(name,this);}
id(){return this._id;}
process(){return this._process;}
events(){return this._events;}
asyncEvents(){return this._asyncEvents;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.TracingModel=TracingModel;SDK.TracingModel.Phase=Phase;SDK.TracingModel.MetadataEvent=MetadataEvent;SDK.TracingModel.LegacyTopLevelEventCategory=LegacyTopLevelEventCategory;SDK.TracingModel.DevToolsMetadataEventCategory=DevToolsMetadataEventCategory;SDK.TracingModel.DevToolsTimelineEventCategory=DevToolsTimelineEventCategory;SDK.TracingModel.Event=Event;SDK.TracingModel.ObjectSnapshot=ObjectSnapshot;SDK.TracingModel.AsyncEvent=AsyncEvent;SDK.TracingModel.Process=Process;SDK.TracingModel.Thread=Thread;SDK.BackingStorage=BackingStorage;export default class TracingManager extends SDK.SDKModel{constructor(target){super(target);this._tracingAgent=target.tracingAgent();target.registerTracingDispatcher(new TracingDispatcher(this));this._activeClient=null;this._eventBufferSize=0;this._eventsRetrieved=0;}
_bufferUsage(usage,eventCount,percentFull){this._eventBufferSize=eventCount;this._activeClient.tracingBufferUsage(usage||percentFull||0);}
_eventsCollected(events){this._activeClient.traceEventsCollected(events);this._eventsRetrieved+=events.length;if(!this._eventBufferSize){this._activeClient.eventsRetrievalProgress(0);return;}
if(this._eventsRetrieved>this._eventBufferSize){this._eventsRetrieved=this._eventBufferSize;}
this._activeClient.eventsRetrievalProgress(this._eventsRetrieved/this._eventBufferSize);}
_tracingComplete(){this._eventBufferSize=0;this._eventsRetrieved=0;this._activeClient.tracingComplete();this._activeClient=null;this._finishing=false;}
async start(client,categoryFilter,options){if(this._activeClient){throw new Error('Tracing is already started');}
const bufferUsageReportingIntervalMs=500;this._activeClient=client;const args={bufferUsageReportingInterval:bufferUsageReportingIntervalMs,categories:categoryFilter,options:options,transferMode:TransferMode.ReportEvents};const response=await this._tracingAgent.invoke_start(args);if(response[Protocol.Error]){this._activeClient=null;}
return response;}
stop(){if(!this._activeClient){throw new Error('Tracing is not started');}
if(this._finishing){throw new Error('Tracing is already being stopped');}
this._finishing=true;this._tracingAgent.end();}}
const TransferMode={ReportEvents:'ReportEvents',ReturnAsStream:'ReturnAsStream'};export class TracingManagerClient{traceEventsCollected(events){}
tracingComplete(){}
tracingBufferUsage(usage){}
eventsRetrievalProgress(progress){}}
class TracingDispatcher{constructor(tracingManager){this._tracingManager=tracingManager;}
bufferUsage(usage,eventCount,percentFull){this._tracingManager._bufferUsage(usage,eventCount,percentFull);}
dataCollected(data){this._tracingManager._eventsCollected(data);}
tracingComplete(){this._tracingManager._tracingComplete();}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.TracingManager=TracingManager;SDK.TracingManagerClient=TracingManagerClient;SDK.TracingManager.EventPayload;SDK.SDKModel.register(SDK.TracingManager,SDK.Target.Capability.Tracing,false);export default class TargetManager extends Common.Object{constructor(){super();this._targets=[];this._observers=[];this._modelListeners=new Platform.Multimap();this._modelObservers=new Platform.Multimap();this._isSuspended=false;}
suspendAllTargets(reason){if(this._isSuspended){return Promise.resolve();}
this._isSuspended=true;this.dispatchEventToListeners(Events.SuspendStateChanged);return Promise.all(this._targets.map(target=>target.suspend(reason)));}
resumeAllTargets(){if(!this._isSuspended){return Promise.resolve();}
this._isSuspended=false;this.dispatchEventToListeners(Events.SuspendStateChanged);return Promise.all(this._targets.map(target=>target.resume()));}
allTargetsSuspended(){return this._isSuspended;}
models(modelClass){const result=[];for(let i=0;i<this._targets.length;++i){const model=this._targets[i].model(modelClass);if(model){result.push(model);}}
return result;}
inspectedURL(){return this._targets[0]?this._targets[0].inspectedURL():'';}
observeModels(modelClass,observer){const models=this.models(modelClass);this._modelObservers.set(modelClass,observer);for(const model of models){observer.modelAdded(model);}}
unobserveModels(modelClass,observer){this._modelObservers.delete(modelClass,observer);}
modelAdded(target,modelClass,model){for(const observer of this._modelObservers.get(modelClass).valuesArray()){observer.modelAdded(model);}}
_modelRemoved(target,modelClass,model){for(const observer of this._modelObservers.get(modelClass).valuesArray()){observer.modelRemoved(model);}}
addModelListener(modelClass,eventType,listener,thisObject){for(let i=0;i<this._targets.length;++i){const model=this._targets[i].model(modelClass);if(model){model.addEventListener(eventType,listener,thisObject);}}
this._modelListeners.set(eventType,{modelClass:modelClass,thisObject:thisObject,listener:listener});}
removeModelListener(modelClass,eventType,listener,thisObject){if(!this._modelListeners.has(eventType)){return;}
for(let i=0;i<this._targets.length;++i){const model=this._targets[i].model(modelClass);if(model){model.removeEventListener(eventType,listener,thisObject);}}
for(const info of this._modelListeners.get(eventType)){if(info.modelClass===modelClass&&info.listener===listener&&info.thisObject===thisObject){this._modelListeners.delete(eventType,info);}}}
observeTargets(targetObserver){if(this._observers.indexOf(targetObserver)!==-1){throw new Error('Observer can only be registered once');}
for(const target of this._targets){targetObserver.targetAdded(target);}
this._observers.push(targetObserver);}
unobserveTargets(targetObserver){this._observers.remove(targetObserver);}
createTarget(id,name,type,parentTarget,sessionId,waitForDebuggerInPage,connection){const target=new SDK.Target(this,id,name,type,parentTarget,sessionId||'',this._isSuspended,connection||null);if(waitForDebuggerInPage){target.pageAgent().waitForDebugger();}
target.createModels(new Set(this._modelObservers.keysArray()));this._targets.push(target);const copy=this._observers.slice(0);for(const observer of copy){observer.targetAdded(target);}
for(const modelClass of target.models().keys()){this.modelAdded(target,modelClass,target.models().get(modelClass));}
for(const key of this._modelListeners.keysArray()){for(const info of this._modelListeners.get(key)){const model=target.model(info.modelClass);if(model){model.addEventListener(key,info.listener,info.thisObject);}}}
return target;}
removeTarget(target){if(!this._targets.includes(target)){return;}
this._targets.remove(target);for(const modelClass of target.models().keys()){this._modelRemoved(target,modelClass,target.models().get(modelClass));}
const copy=this._observers.slice(0);for(const observer of copy){observer.targetRemoved(target);}
for(const key of this._modelListeners.keysArray()){for(const info of this._modelListeners.get(key)){const model=target.model(info.modelClass);if(model){model.removeEventListener(key,info.listener,info.thisObject);}}}}
targets(){return this._targets.slice();}
targetById(id){for(let i=0;i<this._targets.length;++i){if(this._targets[i].id()===id){return this._targets[i];}}
return null;}
mainTarget(){return this._targets[0]||null;}}
export const Events={AvailableTargetsChanged:Symbol('AvailableTargetsChanged'),InspectedURLChanged:Symbol('InspectedURLChanged'),NameChanged:Symbol('NameChanged'),SuspendStateChanged:Symbol('SuspendStateChanged')};export class Observer{targetAdded(target){}
targetRemoved(target){}}
export class SDKModelObserver{modelAdded(model){}
modelRemoved(model){}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.TargetManager=TargetManager;SDK.TargetManager.Events=Events;SDK.TargetManager.Observer=Observer;SDK.SDKModelObserver=SDKModelObserver;SDK.targetManager=new TargetManager();export default class Target extends Protocol.TargetBase{constructor(targetManager,id,name,type,parentTarget,sessionId,suspended,connection){const needsNodeJSPatching=type===Type.Node;super(needsNodeJSPatching,parentTarget,sessionId,connection);this._targetManager=targetManager;this._name=name;this._inspectedURL='';this._inspectedURLName='';this._capabilitiesMask=0;switch(type){case Type.Frame:this._capabilitiesMask=Capability.Browser|Capability.Storage|Capability.DOM|Capability.JS|Capability.Log|Capability.Network|Capability.Target|Capability.Tracing|Capability.Emulation|Capability.Input|Capability.Inspector;if(!parentTarget){this._capabilitiesMask|=Capability.DeviceEmulation|Capability.ScreenCapture|Capability.Security|Capability.ServiceWorker;}
break;case Type.ServiceWorker:this._capabilitiesMask=Capability.JS|Capability.Log|Capability.Network|Capability.Target|Capability.Inspector;if(!parentTarget){this._capabilitiesMask|=Capability.Browser;}
break;case Type.Worker:this._capabilitiesMask=Capability.JS|Capability.Log|Capability.Network|Capability.Target;break;case Type.Node:this._capabilitiesMask=Capability.JS;break;case Type.Browser:this._capabilitiesMask=Capability.Target;break;}
this._type=type;this._parentTarget=parentTarget;this._id=id;this._modelByConstructor=new Map();this._isSuspended=suspended;}
createModels(required){this._creatingModels=true;this.model(SDK.ResourceTreeModel);const registered=Array.from(SDK.SDKModel.registeredModels.keys());for(const modelClass of registered){const info=SDK.SDKModel.registeredModels.get(modelClass);if(info.autostart||required.has(modelClass)){this.model(modelClass);}}
this._creatingModels=false;}
id(){return this._id;}
name(){return this._name||this._inspectedURLName;}
type(){return this._type;}
markAsNodeJSForTest(){super.markAsNodeJSForTest();this._type=Type.Node;}
targetManager(){return this._targetManager;}
hasAllCapabilities(capabilitiesMask){return(this._capabilitiesMask&capabilitiesMask)===capabilitiesMask;}
decorateLabel(label){return(this._type===Type.Worker||this._type===Type.ServiceWorker)?'\u2699 '+label:label;}
parentTarget(){return this._parentTarget;}
dispose(reason){super.dispose(reason);this._targetManager.removeTarget(this);for(const model of this._modelByConstructor.valuesArray()){model.dispose();}}
model(modelClass){if(!this._modelByConstructor.get(modelClass)){const info=SDK.SDKModel.registeredModels.get(modelClass);if(info===undefined){throw'Model class is not registered @'+new Error().stack;}
if((this._capabilitiesMask&info.capabilities)===info.capabilities){const model=new modelClass(this);this._modelByConstructor.set(modelClass,model);if(!this._creatingModels){this._targetManager.modelAdded(this,modelClass,model);}}}
return this._modelByConstructor.get(modelClass)||null;}
models(){return this._modelByConstructor;}
inspectedURL(){return this._inspectedURL;}
setInspectedURL(inspectedURL){this._inspectedURL=inspectedURL;const parsedURL=inspectedURL.asParsedURL();this._inspectedURLName=parsedURL?parsedURL.lastPathComponentWithFragment():'#'+this._id;if(!this.parentTarget()){Host.InspectorFrontendHost.inspectedURLChanged(inspectedURL||'');}
this._targetManager.dispatchEventToListeners(SDK.TargetManager.Events.InspectedURLChanged,this);if(!this._name){this._targetManager.dispatchEventToListeners(SDK.TargetManager.Events.NameChanged,this);}}
async suspend(reason){if(this._isSuspended){return Promise.resolve();}
this._isSuspended=true;await Promise.all(Array.from(this.models().values(),m=>m.preSuspendModel(reason)));await Promise.all(Array.from(this.models().values(),m=>m.suspendModel(reason)));}
async resume(){if(!this._isSuspended){return Promise.resolve();}
this._isSuspended=false;await Promise.all(Array.from(this.models().values(),m=>m.resumeModel()));await Promise.all(Array.from(this.models().values(),m=>m.postResumeModel()));}
suspended(){return this._isSuspended;}}
export const Capability={Browser:1<<0,DOM:1<<1,JS:1<<2,Log:1<<3,Network:1<<4,Target:1<<5,ScreenCapture:1<<6,Tracing:1<<7,Emulation:1<<8,Security:1<<9,Input:1<<10,Inspector:1<<11,DeviceEmulation:1<<12,Storage:1<<13,ServiceWorker:1<<14,None:0,};export const Type={Frame:'frame',ServiceWorker:'service-worker',Worker:'worker',Node:'node',Browser:'browser',};self.SDK=self.SDK||{};SDK=SDK||{};SDK.Target=Target;SDK.Target.Capability=Capability;SDK.Target.Type=Type;export default class SourceMapManager extends Common.Object{constructor(target){super();this._target=target;this._isEnabled=true;this._relativeSourceURL=new Map();this._relativeSourceMapURL=new Map();this._resolvedSourceMapId=new Map();this._sourceMapById=new Map();this._sourceMapIdToLoadingClients=new Platform.Multimap();this._sourceMapIdToClients=new Platform.Multimap();SDK.targetManager.addEventListener(SDK.TargetManager.Events.InspectedURLChanged,this._inspectedURLChanged,this);}
setEnabled(isEnabled){if(isEnabled===this._isEnabled){return;}
this._isEnabled=isEnabled;const clients=[...this._resolvedSourceMapId.keys()];for(const client of clients){const relativeSourceURL=this._relativeSourceURL.get(client);const relativeSourceMapURL=this._relativeSourceMapURL.get(client);this.detachSourceMap(client);this.attachSourceMap(client,relativeSourceURL,relativeSourceMapURL);}}
_inspectedURLChanged(event){if(event.data!==this._target){return;}
const prevSourceMapIds=new Map(this._resolvedSourceMapId);for(const[client,prevSourceMapId]of prevSourceMapIds){const relativeSourceURL=this._relativeSourceURL.get(client);const relativeSourceMapURL=this._relativeSourceMapURL.get(client);const{sourceMapId}=this._resolveRelativeURLs(relativeSourceURL,relativeSourceMapURL);if(prevSourceMapId!==sourceMapId){this.detachSourceMap(client);this.attachSourceMap(client,relativeSourceURL,relativeSourceMapURL);}}}
sourceMapForClient(client){const sourceMapId=this._resolvedSourceMapId.get(client);if(!sourceMapId){return null;}
return this._sourceMapById.get(sourceMapId)||null;}
clientsForSourceMap(sourceMap){const sourceMapId=this._getSourceMapId(sourceMap.compiledURL(),sourceMap.url());if(this._sourceMapIdToClients.has(sourceMapId)){return this._sourceMapIdToClients.get(sourceMapId).valuesArray();}
return this._sourceMapIdToLoadingClients.get(sourceMapId).valuesArray();}
_getSourceMapId(sourceURL,sourceMapURL){return`${sourceURL}:${sourceMapURL}`;}
_resolveRelativeURLs(sourceURL,sourceMapURL){const resolvedSourceURL=Common.ParsedURL.completeURL(this._target.inspectedURL(),sourceURL);if(!resolvedSourceURL){return null;}
const resolvedSourceMapURL=Common.ParsedURL.completeURL(resolvedSourceURL,sourceMapURL);if(!resolvedSourceMapURL){return null;}
return{sourceURL:resolvedSourceURL,sourceMapURL:resolvedSourceMapURL,sourceMapId:this._getSourceMapId(resolvedSourceURL,resolvedSourceMapURL)};}
attachSourceMap(client,relativeSourceURL,relativeSourceMapURL){if(!relativeSourceMapURL){return;}
console.assert(!this._resolvedSourceMapId.has(client),'SourceMap is already attached to client');const resolvedURLs=this._resolveRelativeURLs(relativeSourceURL,relativeSourceMapURL);if(!resolvedURLs){return;}
this._relativeSourceURL.set(client,relativeSourceURL);this._relativeSourceMapURL.set(client,relativeSourceMapURL);const{sourceURL,sourceMapURL,sourceMapId}=resolvedURLs;this._resolvedSourceMapId.set(client,sourceMapId);if(!this._isEnabled){return;}
this.dispatchEventToListeners(Events.SourceMapWillAttach,client);if(this._sourceMapById.has(sourceMapId)){attach.call(this,sourceMapId,client);return;}
if(!this._sourceMapIdToLoadingClients.has(sourceMapId)){const sourceMapPromise=sourceMapURL===SDK.WasmSourceMap.FAKE_URL?SDK.WasmSourceMap.load(client,sourceURL):SDK.TextSourceMap.load(sourceMapURL,sourceURL);sourceMapPromise.catch(e=>{Common.console.warn('DevTools failed to parse SourceMap: '+sourceMapURL);}).then(onSourceMap.bind(this,sourceMapId));}
this._sourceMapIdToLoadingClients.set(sourceMapId,client);function onSourceMap(sourceMapId,sourceMap){this._sourceMapLoadedForTest();const clients=this._sourceMapIdToLoadingClients.get(sourceMapId);this._sourceMapIdToLoadingClients.deleteAll(sourceMapId);if(!clients.size){return;}
if(!sourceMap){for(const client of clients){this.dispatchEventToListeners(Events.SourceMapFailedToAttach,client);}
return;}
this._sourceMapById.set(sourceMapId,sourceMap);for(const client of clients){attach.call(this,sourceMapId,client);}}
function attach(sourceMapId,client){this._sourceMapIdToClients.set(sourceMapId,client);const sourceMap=this._sourceMapById.get(sourceMapId);this.dispatchEventToListeners(Events.SourceMapAttached,{client:client,sourceMap:sourceMap});}}
detachSourceMap(client){const sourceMapId=this._resolvedSourceMapId.get(client);this._relativeSourceURL.delete(client);this._relativeSourceMapURL.delete(client);this._resolvedSourceMapId.delete(client);if(!sourceMapId){return;}
if(!this._sourceMapIdToClients.hasValue(sourceMapId,client)){if(this._sourceMapIdToLoadingClients.delete(sourceMapId,client)){this.dispatchEventToListeners(Events.SourceMapFailedToAttach,client);}
return;}
this._sourceMapIdToClients.delete(sourceMapId,client);const sourceMap=this._sourceMapById.get(sourceMapId);this.dispatchEventToListeners(Events.SourceMapDetached,{client:client,sourceMap:sourceMap});if(!this._sourceMapIdToClients.has(sourceMapId)){sourceMap.dispose();this._sourceMapById.delete(sourceMapId);}}
_sourceMapLoadedForTest(){}
dispose(){for(const sourceMap of this._sourceMapById.values()){sourceMap.dispose();}
SDK.targetManager.removeEventListener(SDK.TargetManager.Events.InspectedURLChanged,this._inspectedURLChanged,this);}}
export const Events={SourceMapWillAttach:Symbol('SourceMapWillAttach'),SourceMapFailedToAttach:Symbol('SourceMapFailedToAttach'),SourceMapAttached:Symbol('SourceMapAttached'),SourceMapDetached:Symbol('SourceMapDetached'),SourceMapChanged:Symbol('SourceMapChanged')};self.SDK=self.SDK||{};SDK=SDK||{};SDK.SourceMapManager=SourceMapManager;SDK.SourceMapManager.Events=Events;export default class SourceMap{compiledURL(){}
url(){}
sourceURLs(){}
sourceContentProvider(sourceURL,contentType){}
embeddedContentByURL(sourceURL){}
findEntry(lineNumber,columnNumber){}
sourceLineMapping(sourceURL,lineNumber,columnNumber){}
mappings(){}
dispose(){}}
class SourceMapV3{constructor(){this.version;this.file;this.sources;this.sections;this.mappings;this.sourceRoot;this.names;}}
SourceMapV3.Section=class{constructor(){this.map;this.offset;}};SourceMapV3.Offset=class{constructor(){this.line;this.column;}};export class SourceMapEntry{constructor(lineNumber,columnNumber,sourceURL,sourceLineNumber,sourceColumnNumber,name){this.lineNumber=lineNumber;this.columnNumber=columnNumber;this.sourceURL=sourceURL;this.sourceLineNumber=sourceLineNumber;this.sourceColumnNumber=sourceColumnNumber;this.name=name;}
static compare(entry1,entry2){if(entry1.lineNumber!==entry2.lineNumber){return entry1.lineNumber-entry2.lineNumber;}
return entry1.columnNumber-entry2.columnNumber;}}
export class EditResult{constructor(map,compiledEdits,newSources){this.map=map;this.compiledEdits=compiledEdits;this.newSources=newSources;}}
export class TextSourceMap{constructor(compiledURL,sourceMappingURL,payload){if(!TextSourceMap._base64Map){const base64Digits='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';TextSourceMap._base64Map={};for(let i=0;i<base64Digits.length;++i){TextSourceMap._base64Map[base64Digits.charAt(i)]=i;}}
this._json=payload;this._compiledURL=compiledURL;this._sourceMappingURL=sourceMappingURL;this._baseURL=sourceMappingURL.startsWith('data:')?compiledURL:sourceMappingURL;this._mappings=null;this._sourceInfos=new Map();if(this._json.sections){const sectionWithURL=!!this._json.sections.find(section=>!!section.url);if(sectionWithURL){Common.console.warn(`SourceMap "${sourceMappingURL}" contains unsupported "URL" field in one of its sections.`);}}
this._eachSection(this._parseSources.bind(this));}
static async load(sourceMapURL,compiledURL){let content=await new Promise((resolve,reject)=>{SDK.multitargetNetworkManager.loadResource(sourceMapURL,(statusCode,_headers,content)=>{if(!content||statusCode>=400){const error=new Error(ls`Could not load content for ${sourceMapURL} : HTTP status code: ${statusCode}`);reject(error);}else{resolve(content);}});});if(content.slice(0,3)===')]}'){content=content.substring(content.indexOf('\n'));}
const payload=(JSON.parse(content));return new TextSourceMap(compiledURL,sourceMapURL,payload);}
compiledURL(){return this._compiledURL;}
url(){return this._sourceMappingURL;}
sourceURLs(){return this._sourceInfos.keysArray();}
sourceContentProvider(sourceURL,contentType){const info=this._sourceInfos.get(sourceURL);if(info.content){return Common.StaticContentProvider.fromString(sourceURL,contentType,info.content);}
return new SDK.CompilerSourceMappingContentProvider(sourceURL,contentType);}
embeddedContentByURL(sourceURL){if(!this._sourceInfos.has(sourceURL)){return null;}
return this._sourceInfos.get(sourceURL).content;}
findEntry(lineNumber,columnNumber){const mappings=this.mappings();const index=mappings.upperBound(undefined,(unused,entry)=>lineNumber-entry.lineNumber||columnNumber-entry.columnNumber);return index?mappings[index-1]:null;}
sourceLineMapping(sourceURL,lineNumber,columnNumber){const mappings=this._reversedMappings(sourceURL);const first=mappings.lowerBound(lineNumber,lineComparator);const last=mappings.upperBound(lineNumber,lineComparator);if(first>=mappings.length||mappings[first].sourceLineNumber!==lineNumber){return null;}
const columnMappings=mappings.slice(first,last);if(!columnMappings.length){return null;}
const index=columnMappings.lowerBound(columnNumber,(columnNumber,mapping)=>columnNumber-mapping.sourceColumnNumber);return index>=columnMappings.length?columnMappings[columnMappings.length-1]:columnMappings[index];function lineComparator(lineNumber,mapping){return lineNumber-mapping.sourceLineNumber;}}
findReverseEntries(sourceURL,lineNumber,columnNumber){const mappings=this._reversedMappings(sourceURL);const endIndex=mappings.upperBound(undefined,(unused,entry)=>lineNumber-entry.sourceLineNumber||columnNumber-entry.sourceColumnNumber);let startIndex=endIndex;while(startIndex>0&&mappings[startIndex-1].sourceLineNumber===mappings[endIndex-1].sourceLineNumber&&mappings[startIndex-1].sourceColumnNumber===mappings[endIndex-1].sourceColumnNumber){--startIndex;}
return mappings.slice(startIndex,endIndex);}
mappings(){if(this._mappings===null){this._mappings=[];this._eachSection(this._parseMap.bind(this));this._json=null;}
return(this._mappings);}
_reversedMappings(sourceURL){if(!this._sourceInfos.has(sourceURL)){return[];}
const mappings=this.mappings();const info=this._sourceInfos.get(sourceURL);if(info.reverseMappings===null){info.reverseMappings=mappings.filter(mapping=>mapping.sourceURL===sourceURL).sort(sourceMappingComparator);}
return info.reverseMappings;function sourceMappingComparator(a,b){if(a.sourceLineNumber!==b.sourceLineNumber){return a.sourceLineNumber-b.sourceLineNumber;}
if(a.sourceColumnNumber!==b.sourceColumnNumber){return a.sourceColumnNumber-b.sourceColumnNumber;}
if(a.lineNumber!==b.lineNumber){return a.lineNumber-b.lineNumber;}
return a.columnNumber-b.columnNumber;}}
_eachSection(callback){if(!this._json.sections){callback(this._json,0,0);return;}
for(const section of this._json.sections){callback(section.map,section.offset.line,section.offset.column);}}
_parseSources(sourceMap){const sourcesList=[];let sourceRoot=sourceMap.sourceRoot||'';if(sourceRoot&&!sourceRoot.endsWith('/')){sourceRoot+='/';}
for(let i=0;i<sourceMap.sources.length;++i){const href=sourceRoot+sourceMap.sources[i];let url=Common.ParsedURL.completeURL(this._baseURL,href)||href;const source=sourceMap.sourcesContent&&sourceMap.sourcesContent[i];if(url===this._compiledURL&&source){url+=Common.UIString('? [sm]');}
this._sourceInfos.set(url,new TextSourceMap.SourceInfo(source,null));sourcesList.push(url);}
sourceMap[TextSourceMap._sourcesListSymbol]=sourcesList;}
_parseMap(map,lineNumber,columnNumber){let sourceIndex=0;let sourceLineNumber=0;let sourceColumnNumber=0;let nameIndex=0;const sources=map[TextSourceMap._sourcesListSymbol];const names=map.names||[];const stringCharIterator=new TextSourceMap.StringCharIterator(map.mappings);let sourceURL=sources[sourceIndex];while(true){if(stringCharIterator.peek()===','){stringCharIterator.next();}else{while(stringCharIterator.peek()===';'){lineNumber+=1;columnNumber=0;stringCharIterator.next();}
if(!stringCharIterator.hasNext()){break;}}
columnNumber+=this._decodeVLQ(stringCharIterator);if(!stringCharIterator.hasNext()||this._isSeparator(stringCharIterator.peek())){this._mappings.push(new SourceMapEntry(lineNumber,columnNumber));continue;}
const sourceIndexDelta=this._decodeVLQ(stringCharIterator);if(sourceIndexDelta){sourceIndex+=sourceIndexDelta;sourceURL=sources[sourceIndex];}
sourceLineNumber+=this._decodeVLQ(stringCharIterator);sourceColumnNumber+=this._decodeVLQ(stringCharIterator);if(!stringCharIterator.hasNext()||this._isSeparator(stringCharIterator.peek())){this._mappings.push(new SourceMapEntry(lineNumber,columnNumber,sourceURL,sourceLineNumber,sourceColumnNumber));continue;}
nameIndex+=this._decodeVLQ(stringCharIterator);this._mappings.push(new SourceMapEntry(lineNumber,columnNumber,sourceURL,sourceLineNumber,sourceColumnNumber,names[nameIndex]));}
this._mappings.sort(SourceMapEntry.compare);}
_isSeparator(char){return char===','||char===';';}
_decodeVLQ(stringCharIterator){let result=0;let shift=0;let digit;do{digit=TextSourceMap._base64Map[stringCharIterator.next()];result+=(digit&TextSourceMap._VLQ_BASE_MASK)<<shift;shift+=TextSourceMap._VLQ_BASE_SHIFT;}while(digit&TextSourceMap._VLQ_CONTINUATION_MASK);const negative=result&1;result>>=1;return negative?-result:result;}
reverseMapTextRange(url,textRange){function comparator(position,mapping){if(position.lineNumber!==mapping.sourceLineNumber){return position.lineNumber-mapping.sourceLineNumber;}
return position.columnNumber-mapping.sourceColumnNumber;}
const mappings=this._reversedMappings(url);const startIndex=mappings.lowerBound({lineNumber:textRange.startLine,columnNumber:textRange.startColumn},comparator);const endIndex=mappings.upperBound({lineNumber:textRange.endLine,columnNumber:textRange.endColumn},comparator);const startMapping=mappings[startIndex];const endMapping=mappings[endIndex];return new TextUtils.TextRange(startMapping.lineNumber,startMapping.columnNumber,endMapping.lineNumber,endMapping.columnNumber);}
dispose(){}}
TextSourceMap._VLQ_BASE_SHIFT=5;TextSourceMap._VLQ_BASE_MASK=(1<<5)-1;TextSourceMap._VLQ_CONTINUATION_MASK=1<<5;TextSourceMap.StringCharIterator=class{constructor(string){this._string=string;this._position=0;}
next(){return this._string.charAt(this._position++);}
peek(){return this._string.charAt(this._position);}
hasNext(){return this._position<this._string.length;}};TextSourceMap.SourceInfo=class{constructor(content,reverseMappings){this.content=content;this.reverseMappings=reverseMappings;}};TextSourceMap._sourcesListSymbol=Symbol('sourcesList');export class WasmSourceMap{constructor(wasmUrl,resolver){this._wasmUrl=wasmUrl;this._resolver=resolver;}
static async _loadBindings(){const arrayBuffer=await Root.Runtime.loadBinaryResourcePromise('./sdk/wasm_source_map/pkg/wasm_source_map_bg.wasm');await self.wasm_bindgen(arrayBuffer);return self.wasm_bindgen.Resolver;}
static _loadBindingsOnce(){return WasmSourceMap._asyncResolver=WasmSourceMap._asyncResolver||WasmSourceMap._loadBindings();}
static async load(script,wasmUrl){const[Resolver,wasm]=await Promise.all([WasmSourceMap._loadBindingsOnce(),script.getWasmBytecode()]);return new SDK.WasmSourceMap(wasmUrl,new Resolver(new Uint8Array(wasm)));}
compiledURL(){return this._wasmUrl;}
url(){return WasmSourceMap.FAKE_URL;}
sourceURLs(){return this._resolver.listFiles();}
sourceContentProvider(sourceURL,contentType){return new SDK.CompilerSourceMappingContentProvider(sourceURL,contentType);}
embeddedContentByURL(sourceURL){return null;}
findEntry(lineNumber,columnNumber){if(lineNumber!==0){console.warn(new Error(`Invalid non-zero line number.`));}
return this._resolver.resolve(columnNumber);}
sourceLineMapping(sourceURL,lineNumber,columnNumber){return this._resolver.resolveReverse(sourceURL,lineNumber,columnNumber);}
mappings(){return this._resolver.listMappings();}
dispose(){this._resolver.free();}}
WasmSourceMap.FAKE_URL='wasm://dwarf';self.SDK=self.SDK||{};SDK=SDK||{};SDK.SourceMap=SourceMap;SDK.SourceMapEntry=SourceMapEntry;SDK.TextSourceMap=TextSourceMap;SDK.WasmSourceMap=WasmSourceMap;SDK.SourceMap.EditResult=EditResult;export default class ServiceWorkerManager extends SDK.SDKModel{constructor(target){super(target);target.registerServiceWorkerDispatcher(new ServiceWorkerDispatcher(this));this._lastAnonymousTargetId=0;this._agent=target.serviceWorkerAgent();this._registrations=new Map();this.enable();this._forceUpdateSetting=Common.settings.createSetting('serviceWorkerUpdateOnReload',false);if(this._forceUpdateSetting.get()){this._forceUpdateSettingChanged();}
this._forceUpdateSetting.addChangeListener(this._forceUpdateSettingChanged,this);new ServiceWorkerContextNamer(target,this);}
enable(){if(this._enabled){return;}
this._enabled=true;this._agent.enable();}
disable(){if(!this._enabled){return;}
this._enabled=false;this._registrations.clear();this._agent.disable();}
registrations(){return this._registrations;}
hasRegistrationForURLs(urls){for(const registration of this._registrations.values()){if(urls.filter(url=>url&&url.startsWith(registration.scopeURL)).length===urls.length){return true;}}
return false;}
findVersion(versionId){for(const registration of this.registrations().values()){const version=registration.versions.get(versionId);if(version){return version;}}
return null;}
deleteRegistration(registrationId){const registration=this._registrations.get(registrationId);if(!registration){return;}
if(registration._isRedundant()){this._registrations.delete(registrationId);this.dispatchEventToListeners(Events.RegistrationDeleted,registration);return;}
registration._deleting=true;for(const version of registration.versions.values()){this.stopWorker(version.id);}
this._unregister(registration.scopeURL);}
updateRegistration(registrationId){const registration=this._registrations.get(registrationId);if(!registration){return;}
this._agent.updateRegistration(registration.scopeURL);}
deliverPushMessage(registrationId,data){const registration=this._registrations.get(registrationId);if(!registration){return;}
const origin=Common.ParsedURL.extractOrigin(registration.scopeURL);this._agent.deliverPushMessage(origin,registrationId,data);}
dispatchSyncEvent(registrationId,tag,lastChance){const registration=this._registrations.get(registrationId);if(!registration){return;}
const origin=Common.ParsedURL.extractOrigin(registration.scopeURL);this._agent.dispatchSyncEvent(origin,registrationId,tag,lastChance);}
dispatchPeriodicSyncEvent(registrationId,tag){const registration=this._registrations.get(registrationId);if(!registration){return;}
const origin=Common.ParsedURL.extractOrigin(registration.scopeURL);this._agent.dispatchPeriodicSyncEvent(origin,registrationId,tag);}
_unregister(scope){this._agent.unregister(scope);}
startWorker(scope){this._agent.startWorker(scope);}
skipWaiting(scope){this._agent.skipWaiting(scope);}
stopWorker(versionId){this._agent.stopWorker(versionId);}
inspectWorker(versionId){this._agent.inspectWorker(versionId);}
_workerRegistrationUpdated(registrations){for(const payload of registrations){let registration=this._registrations.get(payload.registrationId);if(!registration){registration=new ServiceWorkerRegistration(payload);this._registrations.set(payload.registrationId,registration);this.dispatchEventToListeners(Events.RegistrationUpdated,registration);continue;}
registration._update(payload);if(registration._shouldBeRemoved()){this._registrations.delete(registration.id);this.dispatchEventToListeners(Events.RegistrationDeleted,registration);}else{this.dispatchEventToListeners(Events.RegistrationUpdated,registration);}}}
_workerVersionUpdated(versions){const registrations=new Set();for(const payload of versions){const registration=this._registrations.get(payload.registrationId);if(!registration){continue;}
registration._updateVersion(payload);registrations.add(registration);}
for(const registration of registrations){if(registration._shouldBeRemoved()){this._registrations.delete(registration.id);this.dispatchEventToListeners(Events.RegistrationDeleted,registration);}else{this.dispatchEventToListeners(Events.RegistrationUpdated,registration);}}}
_workerErrorReported(payload){const registration=this._registrations.get(payload.registrationId);if(!registration){return;}
registration.errors.push(payload);this.dispatchEventToListeners(Events.RegistrationErrorAdded,{registration:registration,error:payload});}
forceUpdateOnReloadSetting(){return this._forceUpdateSetting;}
_forceUpdateSettingChanged(){this._agent.setForceUpdateOnPageLoad(this._forceUpdateSetting.get());}}
export const Events={RegistrationUpdated:Symbol('RegistrationUpdated'),RegistrationErrorAdded:Symbol('RegistrationErrorAdded'),RegistrationDeleted:Symbol('RegistrationDeleted')};class ServiceWorkerDispatcher{constructor(manager){this._manager=manager;}
workerRegistrationUpdated(registrations){this._manager._workerRegistrationUpdated(registrations);}
workerVersionUpdated(versions){this._manager._workerVersionUpdated(versions);}
workerErrorReported(errorMessage){this._manager._workerErrorReported(errorMessage);}}
export class ServiceWorkerVersion{constructor(registration,payload){this.registration=registration;this._update(payload);}
_update(payload){this.id=payload.versionId;this.scriptURL=payload.scriptURL;const parsedURL=new Common.ParsedURL(payload.scriptURL);this.securityOrigin=parsedURL.securityOrigin();this.runningStatus=payload.runningStatus;this.status=payload.status;this.scriptLastModified=payload.scriptLastModified;this.scriptResponseTime=payload.scriptResponseTime;this.controlledClients=[];for(let i=0;i<payload.controlledClients.length;++i){this.controlledClients.push(payload.controlledClients[i]);}
this.targetId=payload.targetId||null;}
isStartable(){return!this.registration.isDeleted&&this.isActivated()&&this.isStopped();}
isStoppedAndRedundant(){return this.runningStatus===Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Stopped&&this.status===Protocol.ServiceWorker.ServiceWorkerVersionStatus.Redundant;}
isStopped(){return this.runningStatus===Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Stopped;}
isStarting(){return this.runningStatus===Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Starting;}
isRunning(){return this.runningStatus===Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Running;}
isStopping(){return this.runningStatus===Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Stopping;}
isNew(){return this.status===Protocol.ServiceWorker.ServiceWorkerVersionStatus.New;}
isInstalling(){return this.status===Protocol.ServiceWorker.ServiceWorkerVersionStatus.Installing;}
isInstalled(){return this.status===Protocol.ServiceWorker.ServiceWorkerVersionStatus.Installed;}
isActivating(){return this.status===Protocol.ServiceWorker.ServiceWorkerVersionStatus.Activating;}
isActivated(){return this.status===Protocol.ServiceWorker.ServiceWorkerVersionStatus.Activated;}
isRedundant(){return this.status===Protocol.ServiceWorker.ServiceWorkerVersionStatus.Redundant;}
mode(){if(this.isNew()||this.isInstalling()){return ServiceWorkerVersion.Modes.Installing;}else if(this.isInstalled()){return ServiceWorkerVersion.Modes.Waiting;}else if(this.isActivating()||this.isActivated()){return ServiceWorkerVersion.Modes.Active;}
return ServiceWorkerVersion.Modes.Redundant;}}
ServiceWorkerVersion.RunningStatus={[Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Running]:ls`running`,[Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Starting]:ls`starting`,[Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Stopped]:ls`stopped`,[Protocol.ServiceWorker.ServiceWorkerVersionRunningStatus.Stopping]:ls`stopping`,};ServiceWorkerVersion.Status={[Protocol.ServiceWorker.ServiceWorkerVersionStatus.Activated]:ls`activated`,[Protocol.ServiceWorker.ServiceWorkerVersionStatus.Activating]:ls`activating`,[Protocol.ServiceWorker.ServiceWorkerVersionStatus.Installed]:ls`installed`,[Protocol.ServiceWorker.ServiceWorkerVersionStatus.Installing]:ls`installing`,[Protocol.ServiceWorker.ServiceWorkerVersionStatus.New]:ls`new`,[Protocol.ServiceWorker.ServiceWorkerVersionStatus.Redundant]:ls`redundant`,};ServiceWorkerVersion.Modes={Installing:'installing',Waiting:'waiting',Active:'active',Redundant:'redundant'};export class ServiceWorkerRegistration{constructor(payload){this._update(payload);this.versions=new Map();this._deleting=false;this.errors=[];}
_update(payload){this._fingerprint=Symbol('fingerprint');this.id=payload.registrationId;this.scopeURL=payload.scopeURL;const parsedURL=new Common.ParsedURL(payload.scopeURL);this.securityOrigin=parsedURL.securityOrigin();this.isDeleted=payload.isDeleted;this.forceUpdateOnPageLoad=payload.forceUpdateOnPageLoad;}
fingerprint(){return this._fingerprint;}
versionsByMode(){const result=new Map();for(const version of this.versions.values()){result.set(version.mode(),version);}
return result;}
_updateVersion(payload){this._fingerprint=Symbol('fingerprint');let version=this.versions.get(payload.versionId);if(!version){version=new ServiceWorkerVersion(this,payload);this.versions.set(payload.versionId,version);return version;}
version._update(payload);return version;}
_isRedundant(){for(const version of this.versions.values()){if(!version.isStoppedAndRedundant()){return false;}}
return true;}
_shouldBeRemoved(){return this._isRedundant()&&(!this.errors.length||this._deleting);}
canBeRemoved(){return this.isDeleted||this._deleting;}
clearErrors(){this._fingerprint=Symbol('fingerprint');this.errors=[];}}
class ServiceWorkerContextNamer{constructor(target,serviceWorkerManager){this._target=target;this._serviceWorkerManager=serviceWorkerManager;this._versionByTargetId=new Map();serviceWorkerManager.addEventListener(Events.RegistrationUpdated,this._registrationsUpdated,this);serviceWorkerManager.addEventListener(Events.RegistrationDeleted,this._registrationsUpdated,this);SDK.targetManager.addModelListener(SDK.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextCreated,this._executionContextCreated,this);}
_registrationsUpdated(event){this._versionByTargetId.clear();const registrations=this._serviceWorkerManager.registrations().valuesArray();for(const registration of registrations){const versions=registration.versions.valuesArray();for(const version of versions){if(version.targetId){this._versionByTargetId.set(version.targetId,version);}}}
this._updateAllContextLabels();}
_executionContextCreated(event){const executionContext=(event.data);const serviceWorkerTargetId=this._serviceWorkerTargetId(executionContext.target());if(!serviceWorkerTargetId){return;}
this._updateContextLabel(executionContext,this._versionByTargetId.get(serviceWorkerTargetId)||null);}
_serviceWorkerTargetId(target){if(target.parentTarget()!==this._target||target.type()!==SDK.Target.Type.ServiceWorker){return null;}
return target.id();}
_updateAllContextLabels(){for(const target of SDK.targetManager.targets()){const serviceWorkerTargetId=this._serviceWorkerTargetId(target);if(!serviceWorkerTargetId){continue;}
const version=this._versionByTargetId.get(serviceWorkerTargetId)||null;const runtimeModel=target.model(SDK.RuntimeModel);const executionContexts=runtimeModel?runtimeModel.executionContexts():[];for(const context of executionContexts){this._updateContextLabel(context,version);}}}
_updateContextLabel(context,version){if(!version){context.setLabel('');return;}
const parsedUrl=context.origin.asParsedURL();const label=parsedUrl?parsedUrl.lastPathComponentWithFragment():context.name;const localizedStatus=ServiceWorkerVersion.Status[version.status];context.setLabel(ls`${label} #${version.id} (${localizedStatus})`);}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.ServiceWorkerManager=ServiceWorkerManager;SDK.ServiceWorkerManager.Events=Events;SDK.ServiceWorkerVersion=ServiceWorkerVersion;SDK.ServiceWorkerRegistration=ServiceWorkerRegistration;SDK.SDKModel.register(ServiceWorkerManager,SDK.Target.Capability.ServiceWorker,true);export default class ServiceWorkerCacheModel extends SDK.SDKModel{constructor(target){super(target);target.registerStorageDispatcher(this);this._caches=new Map();this._cacheAgent=target.cacheStorageAgent();this._storageAgent=target.storageAgent();this._securityOriginManager=target.model(SDK.SecurityOriginManager);this._originsUpdated=new Set();this._throttler=new Common.Throttler(2000);this._enabled=false;}
enable(){if(this._enabled){return;}
this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.SecurityOriginAdded,this._securityOriginAdded,this);this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.SecurityOriginRemoved,this._securityOriginRemoved,this);for(const securityOrigin of this._securityOriginManager.securityOrigins()){this._addOrigin(securityOrigin);}
this._enabled=true;}
clearForOrigin(origin){this._removeOrigin(origin);this._addOrigin(origin);}
refreshCacheNames(){for(const cache of this._caches.values()){this._cacheRemoved(cache);}
this._caches.clear();const securityOrigins=this._securityOriginManager.securityOrigins();for(const securityOrigin of securityOrigins){this._loadCacheNames(securityOrigin);}}
async deleteCache(cache){const response=await this._cacheAgent.invoke_deleteCache({cacheId:cache.cacheId});if(response[Protocol.Error]){console.error(`ServiceWorkerCacheAgent error deleting cache ${cache.toString()}: ${response[Protocol.Error]}`);return;}
this._caches.delete(cache.cacheId);this._cacheRemoved(cache);}
async deleteCacheEntry(cache,request){const response=await this._cacheAgent.invoke_deleteEntry({cacheId:cache.cacheId,request});if(!response[Protocol.Error]){return;}
Common.console.error(Common.UIString('ServiceWorkerCacheAgent error deleting cache entry %s in cache: %s',cache.toString(),response[Protocol.Error]));}
loadCacheData(cache,skipCount,pageSize,pathFilter,callback){this._requestEntries(cache,skipCount,pageSize,pathFilter,callback);}
loadAllCacheData(cache,pathFilter,callback){this._requestAllEntries(cache,pathFilter,callback);}
caches(){const caches=new Array();for(const cache of this._caches.values()){caches.push(cache);}
return caches;}
dispose(){for(const cache of this._caches.values()){this._cacheRemoved(cache);}
this._caches.clear();if(this._enabled){this._securityOriginManager.removeEventListener(SDK.SecurityOriginManager.Events.SecurityOriginAdded,this._securityOriginAdded,this);this._securityOriginManager.removeEventListener(SDK.SecurityOriginManager.Events.SecurityOriginRemoved,this._securityOriginRemoved,this);}}
_addOrigin(securityOrigin){this._loadCacheNames(securityOrigin);if(this._isValidSecurityOrigin(securityOrigin)){this._storageAgent.trackCacheStorageForOrigin(securityOrigin);}}
_removeOrigin(securityOrigin){for(const opaqueId of this._caches.keys()){const cache=this._caches.get(opaqueId);if(cache.securityOrigin===securityOrigin){this._caches.delete(opaqueId);this._cacheRemoved(cache);}}
if(this._isValidSecurityOrigin(securityOrigin)){this._storageAgent.untrackCacheStorageForOrigin(securityOrigin);}}
_isValidSecurityOrigin(securityOrigin){const parsedURL=securityOrigin.asParsedURL();return!!parsedURL&&parsedURL.scheme.startsWith('http');}
async _loadCacheNames(securityOrigin){const caches=await this._cacheAgent.requestCacheNames(securityOrigin);if(!caches){return;}
this._updateCacheNames(securityOrigin,caches);}
_updateCacheNames(securityOrigin,cachesJson){function deleteAndSaveOldCaches(cache){if(cache.securityOrigin===securityOrigin&&!updatingCachesIds.has(cache.cacheId)){oldCaches.set(cache.cacheId,cache);this._caches.delete(cache.cacheId);}}
const updatingCachesIds=new Set();const newCaches=new Map();const oldCaches=new Map();for(const cacheJson of cachesJson){const cache=new Cache(this,cacheJson.securityOrigin,cacheJson.cacheName,cacheJson.cacheId);updatingCachesIds.add(cache.cacheId);if(this._caches.has(cache.cacheId)){continue;}
newCaches.set(cache.cacheId,cache);this._caches.set(cache.cacheId,cache);}
this._caches.forEach(deleteAndSaveOldCaches,this);newCaches.forEach(this._cacheAdded,this);oldCaches.forEach(this._cacheRemoved,this);}
_securityOriginAdded(event){const securityOrigin=(event.data);this._addOrigin(securityOrigin);}
_securityOriginRemoved(event){const securityOrigin=(event.data);this._removeOrigin(securityOrigin);}
_cacheAdded(cache){this.dispatchEventToListeners(Events.CacheAdded,{model:this,cache:cache});}
_cacheRemoved(cache){this.dispatchEventToListeners(Events.CacheRemoved,{model:this,cache:cache});}
async _requestEntries(cache,skipCount,pageSize,pathFilter,callback){const response=await this._cacheAgent.invoke_requestEntries({cacheId:cache.cacheId,skipCount,pageSize,pathFilter});if(response[Protocol.Error]){console.error('ServiceWorkerCacheAgent error while requesting entries: ',response[Protocol.Error]);return;}
callback(response.cacheDataEntries,response.returnCount);}
async _requestAllEntries(cache,pathFilter,callback){const response=await this._cacheAgent.invoke_requestEntries({cacheId:cache.cacheId,pathFilter});if(response[Protocol.Error]){console.error('ServiceWorkerCacheAgent error while requesting entries: ',response[Protocol.Error]);return;}
callback(response.cacheDataEntries,response.returnCount);}
cacheStorageListUpdated(origin){this._originsUpdated.add(origin);this._throttler.schedule(()=>{const promises=Array.from(this._originsUpdated,origin=>this._loadCacheNames(origin));this._originsUpdated.clear();return Promise.all(promises);});}
cacheStorageContentUpdated(origin,cacheName){this.dispatchEventToListeners(Events.CacheStorageContentUpdated,{origin:origin,cacheName:cacheName});}
indexedDBListUpdated(origin){}
indexedDBContentUpdated(origin,databaseName,objectStoreName){}}
export const Events={CacheAdded:Symbol('CacheAdded'),CacheRemoved:Symbol('CacheRemoved'),CacheStorageContentUpdated:Symbol('CacheStorageContentUpdated')};export class Cache{constructor(model,securityOrigin,cacheName,cacheId){this._model=model;this.securityOrigin=securityOrigin;this.cacheName=cacheName;this.cacheId=cacheId;}
equals(cache){return this.cacheId===cache.cacheId;}
toString(){return this.securityOrigin+this.cacheName;}
requestCachedResponse(url,requestHeaders){return this._model._cacheAgent.requestCachedResponse(this.cacheId,url,requestHeaders);}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.ServiceWorkerCacheModel=ServiceWorkerCacheModel;SDK.ServiceWorkerCacheModel.Events=Events;SDK.ServiceWorkerCacheModel.Cache=Cache;SDK.SDKModel.register(SDK.ServiceWorkerCacheModel,SDK.Target.Capability.Storage,false);export default class ServerTiming{constructor(metric,value,description){this.metric=metric;this.value=value;this.description=description;}
static parseHeaders(headers){const rawServerTimingHeaders=headers.filter(item=>item.name.toLowerCase()==='server-timing');if(!rawServerTimingHeaders.length){return null;}
const serverTimings=rawServerTimingHeaders.reduce((memo,header)=>{const timing=this.createFromHeaderValue(header.value);memo.pushAll(timing.map(function(entry){return new ServerTiming(entry.name,entry.hasOwnProperty('dur')?entry.dur:null,entry.hasOwnProperty('desc')?entry.desc:'');}));return memo;},[]);serverTimings.sort((a,b)=>a.metric.toLowerCase().compareTo(b.metric.toLowerCase()));return serverTimings;}
static createFromHeaderValue(valueString){function trimLeadingWhiteSpace(){valueString=valueString.replace(/^\s*/,'');}
function consumeDelimiter(char){console.assert(char.length===1);trimLeadingWhiteSpace();if(valueString.charAt(0)!==char){return false;}
valueString=valueString.substring(1);return true;}
function consumeToken(){const result=/^(?:\s*)([\w!#$%&'*+\-.^`|~]+)(?:\s*)(.*)/.exec(valueString);if(!result){return null;}
valueString=result[2];return result[1];}
function consumeTokenOrQuotedString(){trimLeadingWhiteSpace();if(valueString.charAt(0)==='"'){return consumeQuotedString();}
return consumeToken();}
function consumeQuotedString(){console.assert(valueString.charAt(0)==='"');valueString=valueString.substring(1);let value='';while(valueString.length){const result=/^([^"\\]*)(.*)/.exec(valueString);value+=result[1];if(result[2].charAt(0)==='"'){valueString=result[2].substring(1);return value;}
console.assert(result[2].charAt(0)==='\\');value+=result[2].charAt(1);valueString=result[2].substring(2);}
return null;}
function consumeExtraneous(){const result=/([,;].*)/.exec(valueString);if(result){valueString=result[1];}}
const result=[];let name;while((name=consumeToken())!==null){const entry={name};if(valueString.charAt(0)==='='){this.showWarning(ls`Deprecated syntax found. Please use: <name>;dur=<duration>;desc=<description>`);}
while(consumeDelimiter(';')){let paramName;if((paramName=consumeToken())===null){continue;}
paramName=paramName.toLowerCase();const parseParameter=this.getParserForParameter(paramName);let paramValue=null;if(consumeDelimiter('=')){paramValue=consumeTokenOrQuotedString();consumeExtraneous();}
if(parseParameter){if(entry.hasOwnProperty(paramName)){this.showWarning(ls`Duplicate parameter \"${paramName}\" ignored.`);continue;}
if(paramValue===null){this.showWarning(ls`No value found for parameter \"${paramName}\".`);}
parseParameter.call(this,entry,paramValue);}else{this.showWarning(ls`Unrecognized parameter \"${paramName}\".`);}}
result.push(entry);if(!consumeDelimiter(',')){break;}}
if(valueString.length){this.showWarning(ls`Extraneous trailing characters.`);}
return result;}
static getParserForParameter(paramName){switch(paramName){case'dur':return function(entry,paramValue){entry.dur=0;if(paramValue!==null){const duration=parseFloat(paramValue);if(isNaN(duration)){this.showWarning(ls`Unable to parse \"${paramName}\" value \"${paramValue}\".`);return;}
entry.dur=duration;}};case'desc':return function(entry,paramValue){entry.desc=paramValue||'';};default:return null;}}
static showWarning(msg){Common.console.warn(Common.UIString(`ServerTiming: ${msg}`));}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.ServerTiming=ServerTiming;export default class SecurityOriginManager extends SDK.SDKModel{constructor(target){super(target);this._mainSecurityOrigin='';this._unreachableMainSecurityOrigin='';this._securityOrigins=new Set();}
updateSecurityOrigins(securityOrigins){const oldOrigins=this._securityOrigins;this._securityOrigins=securityOrigins;for(const origin of oldOrigins){if(!this._securityOrigins.has(origin)){this.dispatchEventToListeners(Events.SecurityOriginRemoved,origin);}}
for(const origin of this._securityOrigins){if(!oldOrigins.has(origin)){this.dispatchEventToListeners(Events.SecurityOriginAdded,origin);}}}
securityOrigins(){return this._securityOrigins.valuesArray();}
mainSecurityOrigin(){return this._mainSecurityOrigin;}
unreachableMainSecurityOrigin(){return this._unreachableMainSecurityOrigin;}
setMainSecurityOrigin(securityOrigin,unreachableSecurityOrigin){this._mainSecurityOrigin=securityOrigin;this._unreachableMainSecurityOrigin=unreachableSecurityOrigin||null;this.dispatchEventToListeners(Events.MainSecurityOriginChanged,{mainSecurityOrigin:this._mainSecurityOrigin,unreachableMainSecurityOrigin:this._unreachableMainSecurityOrigin});}}
export const Events={SecurityOriginAdded:Symbol('SecurityOriginAdded'),SecurityOriginRemoved:Symbol('SecurityOriginRemoved'),MainSecurityOriginChanged:Symbol('MainSecurityOriginChanged')};self.SDK=self.SDK||{};SDK=SDK||{};SDK.SecurityOriginManager=SecurityOriginManager;SDK.SecurityOriginManager.Events=Events;SDK.SDKModel.register(SDK.SecurityOriginManager,SDK.Target.Capability.None,false);const _registeredModels=new Map();export default class SDKModel extends Common.Object{constructor(target){super();this._target=target;}
target(){return this._target;}
preSuspendModel(reason){return Promise.resolve();}
suspendModel(reason){return Promise.resolve();}
resumeModel(){return Promise.resolve();}
postResumeModel(){return Promise.resolve();}
dispose(){}
static register(modelClass,capabilities,autostart){_registeredModels.set(modelClass,{capabilities,autostart});}
static get registeredModels(){return _registeredModels;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.SDKModel=SDKModel;export default class Script{constructor(debuggerModel,scriptId,sourceURL,startLine,startColumn,endLine,endColumn,executionContextId,hash,isContentScript,isLiveEdit,sourceMapURL,hasSourceURL,length,originStackTrace){this.debuggerModel=debuggerModel;this.scriptId=scriptId;this.sourceURL=sourceURL;this.lineOffset=startLine;this.columnOffset=startColumn;this.endLine=endLine;this.endColumn=endColumn;this.executionContextId=executionContextId;this.hash=hash;this._isContentScript=isContentScript;this._isLiveEdit=isLiveEdit;this.sourceMapURL=sourceMapURL;this.hasSourceURL=hasSourceURL;this.contentLength=length;this._originalContentProvider=null;this._originalSource=null;this.originStackTrace=originStackTrace;}
static _trimSourceURLComment(source){let sourceURLIndex=source.lastIndexOf('//# sourceURL=');if(sourceURLIndex===-1){sourceURLIndex=source.lastIndexOf('//@ sourceURL=');if(sourceURLIndex===-1){return source;}}
const sourceURLLineIndex=source.lastIndexOf('\n',sourceURLIndex);if(sourceURLLineIndex===-1){return source;}
const sourceURLLine=source.substr(sourceURLLineIndex+1);if(!sourceURLLine.match(sourceURLRegex)){return source;}
return source.substr(0,sourceURLLineIndex);}
isContentScript(){return this._isContentScript;}
executionContext(){return this.debuggerModel.runtimeModel().executionContext(this.executionContextId);}
isLiveEdit(){return this._isLiveEdit;}
contentURL(){return this.sourceURL;}
contentType(){return Common.resourceTypes.Script;}
contentEncoded(){return Promise.resolve(false);}
async requestContent(){if(this._source){return{content:this._source,isEncoded:false};}
if(!this.scriptId){return{error:ls`Script removed or deleted.`,isEncoded:false};}
try{const source=await this.debuggerModel.target().debuggerAgent().getScriptSource(this.scriptId);if(source&&this.hasSourceURL){this._source=SDK.Script._trimSourceURLComment(source);}else{this._source=source||'';}
if(this._originalSource===null){this._originalSource=this._source;}
return{content:this._source,isEncoded:false};}catch(err){return{error:ls`Unable to fetch script source.`,isEncoded:false};}}
async getWasmBytecode(){const base64=await this.debuggerModel.target().debuggerAgent().getWasmBytecode(this.scriptId);const response=await fetch(`data:application/wasm;base64,${base64}`);return response.arrayBuffer();}
originalContentProvider(){if(!this._originalContentProvider){const lazyContent=()=>this.requestContent().then(()=>{return{content:this._originalSource,isEncoded:false,};});this._originalContentProvider=new Common.StaticContentProvider(this.contentURL(),this.contentType(),lazyContent);}
return this._originalContentProvider;}
async searchInContent(query,caseSensitive,isRegex){if(!this.scriptId){return[];}
const matches=await this.debuggerModel.target().debuggerAgent().searchInContent(this.scriptId,query,caseSensitive,isRegex);return(matches||[]).map(match=>new Common.ContentProvider.SearchMatch(match.lineNumber,match.lineContent));}
_appendSourceURLCommentIfNeeded(source){if(!this.hasSourceURL){return source;}
return source+'\n //# sourceURL='+this.sourceURL;}
async editSource(newSource,callback){newSource=Script._trimSourceURLComment(newSource);newSource=this._appendSourceURLCommentIfNeeded(newSource);if(!this.scriptId){callback('Script failed to parse');return;}
await this.requestContent();if(this._source===newSource){callback(null);return;}
const response=await this.debuggerModel.target().debuggerAgent().invoke_setScriptSource({scriptId:this.scriptId,scriptSource:newSource});if(!response[Protocol.Error]&&!response.exceptionDetails){this._source=newSource;}
const needsStepIn=!!response.stackChanged;callback(response[Protocol.Error],response.exceptionDetails,response.callFrames,response.asyncStackTrace,response.asyncStackTraceId,needsStepIn);}
rawLocation(lineNumber,columnNumber){if(this.containsLocation(lineNumber,columnNumber)){return new SDK.DebuggerModel.Location(this.debuggerModel,this.scriptId,lineNumber,columnNumber);}
return null;}
toRelativeLocation(location){console.assert(location.scriptId===this.scriptId,'`toRelativeLocation` must be used with location of the same script');const relativeLineNumber=location.lineNumber-this.lineOffset;const relativeColumnNumber=(location.columnNumber||0)-(relativeLineNumber===0?this.columnOffset:0);return[relativeLineNumber,relativeColumnNumber];}
isInlineScript(){const startsAtZero=!this.lineOffset&&!this.columnOffset;return!!this.sourceURL&&!startsAtZero;}
isAnonymousScript(){return!this.sourceURL;}
isInlineScriptWithSourceURL(){return!!this.hasSourceURL&&this.isInlineScript();}
async setBlackboxedRanges(positions){const response=await this.debuggerModel.target().debuggerAgent().invoke_setBlackboxedRanges({scriptId:this.scriptId,positions});return!response[Protocol.Error];}
containsLocation(lineNumber,columnNumber){const afterStart=(lineNumber===this.lineOffset&&columnNumber>=this.columnOffset)||lineNumber>this.lineOffset;const beforeEnd=lineNumber<this.endLine||(lineNumber===this.endLine&&columnNumber<=this.endColumn);return afterStart&&beforeEnd;}}
export const sourceURLRegex=/^[\040\t]*\/\/[@#] sourceURL=\s*(\S*?)\s*$/;self.SDK=self.SDK||{};SDK=SDK||{};SDK.Script=Script;SDK.Script.sourceURLRegex=sourceURLRegex;export default class ScreenCaptureModel extends SDK.SDKModel{constructor(target){super(target);this._agent=target.pageAgent();this._onScreencastFrame=null;this._onScreencastVisibilityChanged=null;target.registerPageDispatcher(this);}
startScreencast(format,quality,width,height,everyNthFrame,onFrame,onVisibilityChanged){this._onScreencastFrame=onFrame;this._onScreencastVisibilityChanged=onVisibilityChanged;this._agent.startScreencast(format,quality,width,height,everyNthFrame);}
stopScreencast(){this._onScreencastFrame=null;this._onScreencastVisibilityChanged=null;this._agent.stopScreencast();}
async captureScreenshot(format,quality,clip){await SDK.OverlayModel.muteHighlight();const result=await this._agent.captureScreenshot(format,quality,clip,true);await SDK.OverlayModel.unmuteHighlight();return result;}
async fetchLayoutMetrics(){const response=await this._agent.invoke_getLayoutMetrics({});if(response[Protocol.Error]){return null;}
return{viewportX:response.visualViewport.pageX,viewportY:response.visualViewport.pageY,viewportScale:response.visualViewport.scale,contentWidth:response.contentSize.width,contentHeight:response.contentSize.height};}
screencastFrame(data,metadata,sessionId){this._agent.screencastFrameAck(sessionId);if(this._onScreencastFrame){this._onScreencastFrame.call(null,data,metadata);}}
screencastVisibilityChanged(visible){if(this._onScreencastVisibilityChanged){this._onScreencastVisibilityChanged.call(null,visible);}}
domContentEventFired(time){}
loadEventFired(time){}
lifecycleEvent(frameId,loaderId,name,time){}
navigatedWithinDocument(frameId,url){}
frameAttached(frameId,parentFrameId){}
frameNavigated(frame){}
frameDetached(frameId){}
frameStartedLoading(frameId){}
frameStoppedLoading(frameId){}
frameRequestedNavigation(frameId){}
frameScheduledNavigation(frameId,delay){}
frameClearedScheduledNavigation(frameId){}
frameResized(){}
javascriptDialogOpening(url,message,dialogType,hasBrowserHandler,prompt){}
javascriptDialogClosed(result,userInput){}
interstitialShown(){}
interstitialHidden(){}
windowOpen(url,windowName,windowFeatures,userGesture){}
fileChooserOpened(mode){}
compilationCacheProduced(url,data){}
downloadWillBegin(frameId,url){}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.ScreenCaptureModel=ScreenCaptureModel;SDK.SDKModel.register(SDK.ScreenCaptureModel,SDK.Target.Capability.ScreenCapture,false);export default class RuntimeModel extends SDK.SDKModel{constructor(target){super(target);this._agent=target.runtimeAgent();this.target().registerRuntimeDispatcher(new RuntimeDispatcher(this));this._agent.enable();this._executionContextById=new Map();this._executionContextComparator=ExecutionContext.comparator;this._hasSideEffectSupport=null;if(Common.moduleSetting('customFormatters').get()){this._agent.setCustomObjectFormatterEnabled(true);}
Common.moduleSetting('customFormatters').addChangeListener(this._customFormattersStateChanged.bind(this));}
static isSideEffectFailure(response){const exceptionDetails=!response[Protocol.Error]&&response.exceptionDetails;return!!(exceptionDetails&&exceptionDetails.exception&&exceptionDetails.exception.description&&exceptionDetails.exception.description.startsWith('EvalError: Possible side-effect in debug-evaluate'));}
debuggerModel(){return(this.target().model(SDK.DebuggerModel));}
heapProfilerModel(){return(this.target().model(SDK.HeapProfilerModel));}
executionContexts(){return this._executionContextById.valuesArray().sort(this.executionContextComparator());}
setExecutionContextComparator(comparator){this._executionContextComparator=comparator;}
executionContextComparator(){return this._executionContextComparator;}
defaultExecutionContext(){for(const context of this.executionContexts()){if(context.isDefault){return context;}}
return null;}
executionContext(id){return this._executionContextById.get(id)||null;}
_executionContextCreated(context){const data=context.auxData||{isDefault:true};const executionContext=new ExecutionContext(this,context.id,context.name,context.origin,data['isDefault'],data['frameId']);this._executionContextById.set(executionContext.id,executionContext);this.dispatchEventToListeners(Events.ExecutionContextCreated,executionContext);}
_executionContextDestroyed(executionContextId){const executionContext=this._executionContextById.get(executionContextId);if(!executionContext){return;}
this.debuggerModel().executionContextDestroyed(executionContext);this._executionContextById.delete(executionContextId);this.dispatchEventToListeners(Events.ExecutionContextDestroyed,executionContext);}
fireExecutionContextOrderChanged(){this.dispatchEventToListeners(Events.ExecutionContextOrderChanged,this);}
_executionContextsCleared(){this.debuggerModel().globalObjectCleared();const contexts=this.executionContexts();this._executionContextById.clear();for(let i=0;i<contexts.length;++i){this.dispatchEventToListeners(Events.ExecutionContextDestroyed,contexts[i]);}}
createRemoteObject(payload){console.assert(typeof payload==='object','Remote object payload should only be an object');return new SDK.RemoteObjectImpl(this,payload.objectId,payload.type,payload.subtype,payload.value,payload.unserializableValue,payload.description,payload.preview,payload.customPreview,payload.className);}
createScopeRemoteObject(payload,scopeRef){return new SDK.ScopeRemoteObject(this,payload.objectId,scopeRef,payload.type,payload.subtype,payload.value,payload.unserializableValue,payload.description,payload.preview);}
createRemoteObjectFromPrimitiveValue(value){const type=typeof value;let unserializableValue=undefined;const unserializableDescription=SDK.RemoteObject.unserializableDescription(value);if(unserializableDescription!==null){unserializableValue=(unserializableDescription);}
if(typeof unserializableValue!=='undefined'){value=undefined;}
return new SDK.RemoteObjectImpl(this,undefined,type,undefined,value,unserializableValue);}
createRemotePropertyFromPrimitiveValue(name,value){return new SDK.RemoteObjectProperty(name,this.createRemoteObjectFromPrimitiveValue(value));}
discardConsoleEntries(){this._agent.discardConsoleEntries();}
releaseObjectGroup(objectGroupName){this._agent.releaseObjectGroup(objectGroupName);}
releaseEvaluationResult(result){if(result.object){result.object.release();}
if(result.exceptionDetails&&result.exceptionDetails.exception){const exception=result.exceptionDetails.exception;const exceptionObject=this.createRemoteObject({type:exception.type,objectId:exception.objectId});exceptionObject.release();}}
runIfWaitingForDebugger(){this._agent.runIfWaitingForDebugger();}
_customFormattersStateChanged(event){const enabled=(event.data);this._agent.setCustomObjectFormatterEnabled(enabled);}
async compileScript(expression,sourceURL,persistScript,executionContextId){const response=await this._agent.invoke_compileScript({expression:String.escapeInvalidUnicodeCharacters(expression),sourceURL:sourceURL,persistScript:persistScript,executionContextId:executionContextId});if(response[Protocol.Error]){console.error(response[Protocol.Error]);return null;}
return{scriptId:response.scriptId,exceptionDetails:response.exceptionDetails};}
async runScript(scriptId,executionContextId,objectGroup,silent,includeCommandLineAPI,returnByValue,generatePreview,awaitPromise){const response=await this._agent.invoke_runScript({scriptId,executionContextId,objectGroup,silent,includeCommandLineAPI,returnByValue,generatePreview,awaitPromise});const error=response[Protocol.Error];if(error){console.error(error);return{error:error};}
return{object:this.createRemoteObject(response.result),exceptionDetails:response.exceptionDetails};}
async queryObjects(prototype){if(!prototype.objectId){return{error:'Prototype should be an Object.'};}
const response=await this._agent.invoke_queryObjects({prototypeObjectId:(prototype.objectId),objectGroup:'console'});const error=response[Protocol.Error];if(error){console.error(error);return{error:error};}
return{objects:this.createRemoteObject(response.objects)};}
async isolateId(){return(await this._agent.getIsolateId())||this.target().id();}
async heapUsage(){const result=await this._agent.invoke_getHeapUsage({});return result[Protocol.Error]?null:result;}
_inspectRequested(payload,hints){const object=this.createRemoteObject(payload);if(hints.copyToClipboard){this._copyRequested(object);return;}
if(hints.queryObjects){this._queryObjectsRequested(object);return;}
if(object.isNode()){Common.Revealer.reveal(object).then(object.release.bind(object));return;}
if(object.type==='function'){SDK.RemoteFunction.objectAsFunction(object).targetFunctionDetails().then(didGetDetails);return;}
function didGetDetails(response){object.release();if(!response||!response.location){return;}
Common.Revealer.reveal(response.location);}
object.release();}
_copyRequested(object){if(!object.objectId){Host.InspectorFrontendHost.copyText(object.unserializableValue()||(object.value));return;}
object.callFunctionJSON(toStringForClipboard,[{value:object.subtype}]).then(Host.InspectorFrontendHost.copyText.bind(Host.InspectorFrontendHost));function toStringForClipboard(subtype){if(subtype==='node'){return this.outerHTML;}
if(subtype&&typeof this==='undefined'){return subtype+'';}
try{return JSON.stringify(this,null,'  ');}catch(e){return''+this;}}}
async _queryObjectsRequested(object){const result=await this.queryObjects(object);object.release();if(result.error){Common.console.error(result.error);return;}
this.dispatchEventToListeners(Events.QueryObjectRequested,{objects:result.objects});}
static simpleTextFromException(exceptionDetails){let text=exceptionDetails.text;if(exceptionDetails.exception&&exceptionDetails.exception.description){let description=exceptionDetails.exception.description;if(description.indexOf('\n')!==-1){description=description.substring(0,description.indexOf('\n'));}
text+=' '+description;}
return text;}
exceptionThrown(timestamp,exceptionDetails){const exceptionWithTimestamp={timestamp:timestamp,details:exceptionDetails};this.dispatchEventToListeners(Events.ExceptionThrown,exceptionWithTimestamp);}
_exceptionRevoked(exceptionId){this.dispatchEventToListeners(Events.ExceptionRevoked,exceptionId);}
_consoleAPICalled(type,args,executionContextId,timestamp,stackTrace,context){const consoleAPICall={type:type,args:args,executionContextId:executionContextId,timestamp:timestamp,stackTrace:stackTrace,context:context};this.dispatchEventToListeners(Events.ConsoleAPICalled,consoleAPICall);}
executionContextIdForScriptId(scriptId){const script=this.debuggerModel().scriptForId(scriptId);return script?script.executionContextId:0;}
executionContextForStackTrace(stackTrace){while(stackTrace&&!stackTrace.callFrames.length){stackTrace=stackTrace.parent;}
if(!stackTrace||!stackTrace.callFrames.length){return 0;}
return this.executionContextIdForScriptId(stackTrace.callFrames[0].scriptId);}
hasSideEffectSupport(){return this._hasSideEffectSupport;}
async checkSideEffectSupport(){const testContext=this.executionContexts().peekLast();if(!testContext){return false;}
const response=await this._agent.invoke_evaluate({expression:String.escapeInvalidUnicodeCharacters(_sideEffectTestExpression),contextId:testContext.id,throwOnSideEffect:true});this._hasSideEffectSupport=RuntimeModel.isSideEffectFailure(response);return this._hasSideEffectSupport;}
terminateExecution(){return this._agent.invoke_terminateExecution({});}}
const _sideEffectTestExpression='(async function(){ await 1; })()';export const Events={ExecutionContextCreated:Symbol('ExecutionContextCreated'),ExecutionContextDestroyed:Symbol('ExecutionContextDestroyed'),ExecutionContextChanged:Symbol('ExecutionContextChanged'),ExecutionContextOrderChanged:Symbol('ExecutionContextOrderChanged'),ExceptionThrown:Symbol('ExceptionThrown'),ExceptionRevoked:Symbol('ExceptionRevoked'),ConsoleAPICalled:Symbol('ConsoleAPICalled'),QueryObjectRequested:Symbol('QueryObjectRequested'),};class RuntimeDispatcher{constructor(runtimeModel){this._runtimeModel=runtimeModel;}
executionContextCreated(context){this._runtimeModel._executionContextCreated(context);}
executionContextDestroyed(executionContextId){this._runtimeModel._executionContextDestroyed(executionContextId);}
executionContextsCleared(){this._runtimeModel._executionContextsCleared();}
exceptionThrown(timestamp,exceptionDetails){this._runtimeModel.exceptionThrown(timestamp,exceptionDetails);}
exceptionRevoked(reason,exceptionId){this._runtimeModel._exceptionRevoked(exceptionId);}
consoleAPICalled(type,args,executionContextId,timestamp,stackTrace,context){this._runtimeModel._consoleAPICalled(type,args,executionContextId,timestamp,stackTrace,context);}
inspectRequested(payload,hints){this._runtimeModel._inspectRequested(payload,hints);}}
export class ExecutionContext{constructor(runtimeModel,id,name,origin,isDefault,frameId){this.id=id;this.name=name;this.origin=origin;this.isDefault=isDefault;this.runtimeModel=runtimeModel;this.debuggerModel=runtimeModel.debuggerModel();this.frameId=frameId;this._setLabel('');}
target(){return this.runtimeModel.target();}
static comparator(a,b){function targetWeight(target){if(!target.parentTarget()){return 5;}
if(target.type()===SDK.Target.Type.Frame){return 4;}
if(target.type()===SDK.Target.Type.ServiceWorker){return 3;}
if(target.type()===SDK.Target.Type.Worker){return 2;}
return 1;}
function targetPath(target){let currentTarget=target;const parents=[];while(currentTarget){parents.push(currentTarget);currentTarget=currentTarget.parentTarget();}
return parents.reverse();}
const tagetsA=targetPath(a.target());const targetsB=targetPath(b.target());let targetA;let targetB;for(let i=0;;i++){if(!tagetsA[i]||!targetsB[i]||(tagetsA[i]!==targetsB[i])){targetA=tagetsA[i];targetB=targetsB[i];break;}}
if(!targetA&&targetB){return-1;}
if(!targetB&&targetA){return 1;}
if(targetA&&targetB){const weightDiff=targetWeight(targetA)-targetWeight(targetB);if(weightDiff){return-weightDiff;}
return targetA.id().localeCompare(targetB.id());}
if(a.isDefault){return-1;}
if(b.isDefault){return+1;}
return a.name.localeCompare(b.name);}
evaluate(options,userGesture,awaitPromise){if(this.debuggerModel.selectedCallFrame()){return this.debuggerModel.evaluateOnSelectedCallFrame(options);}
const needsTerminationOptions=!!options.throwOnSideEffect||options.timeout!==undefined;if(!needsTerminationOptions||this.runtimeModel.hasSideEffectSupport()){return this._evaluateGlobal(options,userGesture,awaitPromise);}
const unsupportedError={error:'Side-effect checks not supported by backend.'};if(this.runtimeModel.hasSideEffectSupport()===false){return Promise.resolve(unsupportedError);}
return this.runtimeModel.checkSideEffectSupport().then(()=>{if(this.runtimeModel.hasSideEffectSupport()){return this._evaluateGlobal(options,userGesture,awaitPromise);}
return Promise.resolve(unsupportedError);});}
globalObject(objectGroup,generatePreview){return this._evaluateGlobal({expression:'this',objectGroup:objectGroup,includeCommandLineAPI:false,silent:true,returnByValue:false,generatePreview:generatePreview},false,false);}
async _evaluateGlobal(options,userGesture,awaitPromise){if(!options.expression){options.expression='this';}
const response=await this.runtimeModel._agent.invoke_evaluate({expression:String.escapeInvalidUnicodeCharacters(options.expression),objectGroup:options.objectGroup,includeCommandLineAPI:options.includeCommandLineAPI,silent:options.silent,contextId:this.id,returnByValue:options.returnByValue,generatePreview:options.generatePreview,userGesture:userGesture,awaitPromise:awaitPromise,throwOnSideEffect:options.throwOnSideEffect,timeout:options.timeout,disableBreaks:options.disableBreaks,replMode:options.replMode});const error=response[Protocol.Error];if(error){console.error(error);return{error:error};}
return{object:this.runtimeModel.createRemoteObject(response.result),exceptionDetails:response.exceptionDetails};}
async globalLexicalScopeNames(){const response=await this.runtimeModel._agent.invoke_globalLexicalScopeNames({executionContextId:this.id});return response[Protocol.Error]?[]:response.names;}
label(){return this._label;}
setLabel(label){this._setLabel(label);this.runtimeModel.dispatchEventToListeners(Events.ExecutionContextChanged,this);}
_setLabel(label){if(label){this._label=label;return;}
if(this.name){this._label=this.name;return;}
const parsedUrl=this.origin.asParsedURL();this._label=parsedUrl?parsedUrl.lastPathComponentWithFragment():'';}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.RuntimeModel=RuntimeModel;SDK.RuntimeModel.Events=Events;SDK.ExecutionContext=ExecutionContext;SDK.RuntimeModel.CompileScriptResult;SDK.RuntimeModel.EvaluationOptions;SDK.RuntimeModel.EvaluationResult;SDK.RuntimeModel.QueryObjectResult;SDK.RuntimeModel.ConsoleAPICall;SDK.RuntimeModel.ExceptionWithTimestamp;SDK.SDKModel.register(SDK.RuntimeModel,SDK.Target.Capability.JS,true);export default class ResourceTreeModel extends SDK.SDKModel{constructor(target){super(target);const networkManager=target.model(SDK.NetworkManager);if(networkManager){networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished,this._onRequestFinished,this);networkManager.addEventListener(SDK.NetworkManager.Events.RequestUpdateDropped,this._onRequestUpdateDropped,this);}
this._agent=target.pageAgent();this._agent.enable();this._securityOriginManager=target.model(SDK.SecurityOriginManager);target.registerPageDispatcher(new SDK.PageDispatcher(this));this._frames=new Map();this._cachedResourcesProcessed=false;this._pendingReloadOptions=null;this._reloadSuspensionCount=0;this._isInterstitialShowing=false;this.mainFrame=null;this._agent.getResourceTree().then(this._processCachedResources.bind(this));}
static frameForRequest(request){const networkManager=SDK.NetworkManager.forRequest(request);const resourceTreeModel=networkManager?networkManager.target().model(ResourceTreeModel):null;if(!resourceTreeModel){return null;}
return resourceTreeModel.frameForId(request.frameId);}
static frames(){let result=[];for(const resourceTreeModel of SDK.targetManager.models(ResourceTreeModel)){result=result.concat(resourceTreeModel._frames.valuesArray());}
return result;}
static resourceForURL(url){for(const resourceTreeModel of SDK.targetManager.models(ResourceTreeModel)){const mainFrame=resourceTreeModel.mainFrame;const result=mainFrame?mainFrame.resourceForURL(url):null;if(result){return result;}}
return null;}
static reloadAllPages(bypassCache,scriptToEvaluateOnLoad){for(const resourceTreeModel of SDK.targetManager.models(ResourceTreeModel)){if(!resourceTreeModel.target().parentTarget()){resourceTreeModel.reloadPage(bypassCache,scriptToEvaluateOnLoad);}}}
domModel(){return(this.target().model(SDK.DOMModel));}
_processCachedResources(mainFramePayload){if(mainFramePayload){this.dispatchEventToListeners(Events.WillLoadCachedResources);this._addFramesRecursively(null,mainFramePayload);this.target().setInspectedURL(mainFramePayload.frame.url);}
this._cachedResourcesProcessed=true;const runtimeModel=this.target().model(SDK.RuntimeModel);if(runtimeModel){runtimeModel.setExecutionContextComparator(this._executionContextComparator.bind(this));runtimeModel.fireExecutionContextOrderChanged();}
this.dispatchEventToListeners(Events.CachedResourcesLoaded,this);}
cachedResourcesLoaded(){return this._cachedResourcesProcessed;}
isInterstitialShowing(){return this._isInterstitialShowing;}
_addFrame(frame,aboutToNavigate){this._frames.set(frame.id,frame);if(frame.isMainFrame()){this.mainFrame=frame;}
this.dispatchEventToListeners(Events.FrameAdded,frame);this._updateSecurityOrigins();}
_frameAttached(frameId,parentFrameId,stackTrace){const parentFrame=parentFrameId?(this._frames.get(parentFrameId)||null):null;if(!this._cachedResourcesProcessed&&parentFrame){return null;}
if(this._frames.has(frameId)){return null;}
const frame=new ResourceTreeFrame(this,parentFrame,frameId,null,stackTrace||null);if(parentFrameId&&!parentFrame){frame._crossTargetParentFrameId=parentFrameId;}
if(frame.isMainFrame()&&this.mainFrame){this._frameDetached(this.mainFrame.id);}
this._addFrame(frame,true);return frame;}
_frameNavigated(framePayload){const parentFrame=framePayload.parentId?(this._frames.get(framePayload.parentId)||null):null;if(!this._cachedResourcesProcessed&&parentFrame){return;}
let frame=this._frames.get(framePayload.id);if(!frame){frame=this._frameAttached(framePayload.id,framePayload.parentId||'');console.assert(frame);}
this.dispatchEventToListeners(Events.FrameWillNavigate,frame);frame._navigate(framePayload);this.dispatchEventToListeners(Events.FrameNavigated,frame);if(frame.isMainFrame()){this.dispatchEventToListeners(Events.MainFrameNavigated,frame);}
const resources=frame.resources();for(let i=0;i<resources.length;++i){this.dispatchEventToListeners(Events.ResourceAdded,resources[i]);}
if(frame.isMainFrame()){this.target().setInspectedURL(frame.url);}
this._updateSecurityOrigins();}
_frameDetached(frameId){if(!this._cachedResourcesProcessed){return;}
const frame=this._frames.get(frameId);if(!frame){return;}
if(frame.parentFrame){frame.parentFrame._removeChildFrame(frame);}else{frame._remove();}
this._updateSecurityOrigins();}
_onRequestFinished(event){if(!this._cachedResourcesProcessed){return;}
const request=(event.data);if(request.failed||request.resourceType()===Common.resourceTypes.XHR){return;}
const frame=this._frames.get(request.frameId);if(frame){frame._addRequest(request);}}
_onRequestUpdateDropped(event){if(!this._cachedResourcesProcessed){return;}
const frameId=event.data.frameId;const frame=this._frames.get(frameId);if(!frame){return;}
const url=event.data.url;if(frame._resourcesMap[url]){return;}
const resource=new SDK.Resource(this,null,url,frame.url,frameId,event.data.loaderId,Common.resourceTypes[event.data.resourceType],event.data.mimeType,event.data.lastModified,null);frame.addResource(resource);}
frameForId(frameId){return this._frames.get(frameId);}
forAllResources(callback){if(this.mainFrame){return this.mainFrame._callForFrameResources(callback);}
return false;}
frames(){return this._frames.valuesArray();}
resourceForURL(url){return this.mainFrame?this.mainFrame.resourceForURL(url):null;}
_addFramesRecursively(parentFrame,frameTreePayload){const framePayload=frameTreePayload.frame;const frame=new ResourceTreeFrame(this,parentFrame,framePayload.id,framePayload,null);if(!parentFrame&&framePayload.parentId){frame._crossTargetParentFrameId=framePayload.parentId;}
this._addFrame(frame);for(let i=0;frameTreePayload.childFrames&&i<frameTreePayload.childFrames.length;++i){this._addFramesRecursively(frame,frameTreePayload.childFrames[i]);}
for(let i=0;i<frameTreePayload.resources.length;++i){const subresource=frameTreePayload.resources[i];const resource=this._createResourceFromFramePayload(framePayload,subresource.url,Common.resourceTypes[subresource.type],subresource.mimeType,subresource.lastModified||null,subresource.contentSize||null);frame.addResource(resource);}
if(!frame._resourcesMap[framePayload.url]){const frameResource=this._createResourceFromFramePayload(framePayload,framePayload.url,Common.resourceTypes.Document,framePayload.mimeType,null,null);frame.addResource(frameResource);}}
_createResourceFromFramePayload(frame,url,type,mimeType,lastModifiedTime,contentSize){const lastModified=typeof lastModifiedTime==='number'?new Date(lastModifiedTime*1000):null;return new SDK.Resource(this,null,url,frame.url,frame.id,frame.loaderId,type,mimeType,lastModified,contentSize);}
suspendReload(){this._reloadSuspensionCount++;}
resumeReload(){this._reloadSuspensionCount--;console.assert(this._reloadSuspensionCount>=0,'Unbalanced call to ResourceTreeModel.resumeReload()');if(!this._reloadSuspensionCount&&this._pendingReloadOptions){this.reloadPage.apply(this,this._pendingReloadOptions);}}
reloadPage(bypassCache,scriptToEvaluateOnLoad){if(!this._pendingReloadOptions){this.dispatchEventToListeners(Events.PageReloadRequested,this);}
if(this._reloadSuspensionCount){this._pendingReloadOptions=[bypassCache,scriptToEvaluateOnLoad];return;}
this._pendingReloadOptions=null;this.dispatchEventToListeners(Events.WillReloadPage);this._agent.reload(bypassCache,scriptToEvaluateOnLoad);}
navigate(url){return this._agent.navigate(url);}
async navigationHistory(){const response=await this._agent.invoke_getNavigationHistory({});if(response[Protocol.Error]){return null;}
return{currentIndex:response.currentIndex,entries:response.entries};}
navigateToHistoryEntry(entry){this._agent.navigateToHistoryEntry(entry.id);}
async fetchAppManifest(){const response=await this._agent.invoke_getAppManifest({});if(response[Protocol.Error]){return{url:response.url,data:null,errors:[]};}
return{url:response.url,data:response.data||null,errors:response.errors};}
async getInstallabilityErrors(){const response=await this._agent.invoke_getInstallabilityErrors({});return response.errors||[];}
_executionContextComparator(a,b){function framePath(frame){let currentFrame=frame;const parents=[];while(currentFrame){parents.push(currentFrame);currentFrame=currentFrame.parentFrame;}
return parents.reverse();}
if(a.target()!==b.target()){return SDK.ExecutionContext.comparator(a,b);}
const framesA=a.frameId?framePath(this.frameForId(a.frameId)):[];const framesB=b.frameId?framePath(this.frameForId(b.frameId)):[];let frameA;let frameB;for(let i=0;;i++){if(!framesA[i]||!framesB[i]||(framesA[i]!==framesB[i])){frameA=framesA[i];frameB=framesB[i];break;}}
if(!frameA&&frameB){return-1;}
if(!frameB&&frameA){return 1;}
if(frameA&&frameB){return frameA.id.localeCompare(frameB.id);}
return SDK.ExecutionContext.comparator(a,b);}
_getSecurityOriginData(){const securityOrigins=new Set();let mainSecurityOrigin=null;let unreachableMainSecurityOrigin=null;for(const frame of this._frames.values()){const origin=frame.securityOrigin;if(!origin){continue;}
securityOrigins.add(origin);if(frame.isMainFrame()){mainSecurityOrigin=origin;if(frame.unreachableUrl()){const unreachableParsed=new Common.ParsedURL(frame.unreachableUrl());unreachableMainSecurityOrigin=unreachableParsed.securityOrigin();}}}
return{securityOrigins:securityOrigins,mainSecurityOrigin:mainSecurityOrigin,unreachableMainSecurityOrigin:unreachableMainSecurityOrigin};}
_updateSecurityOrigins(){const data=this._getSecurityOriginData();this._securityOriginManager.setMainSecurityOrigin(data.mainSecurityOrigin||'',data.unreachableMainSecurityOrigin||'');this._securityOriginManager.updateSecurityOrigins(data.securityOrigins);}
getMainSecurityOrigin(){const data=this._getSecurityOriginData();return data.mainSecurityOrigin||data.unreachableMainSecurityOrigin;}}
export const Events={FrameAdded:Symbol('FrameAdded'),FrameNavigated:Symbol('FrameNavigated'),FrameDetached:Symbol('FrameDetached'),FrameResized:Symbol('FrameResized'),FrameWillNavigate:Symbol('FrameWillNavigate'),MainFrameNavigated:Symbol('MainFrameNavigated'),ResourceAdded:Symbol('ResourceAdded'),WillLoadCachedResources:Symbol('WillLoadCachedResources'),CachedResourcesLoaded:Symbol('CachedResourcesLoaded'),DOMContentLoaded:Symbol('DOMContentLoaded'),LifecycleEvent:Symbol('LifecycleEvent'),Load:Symbol('Load'),PageReloadRequested:Symbol('PageReloadRequested'),WillReloadPage:Symbol('WillReloadPage'),InterstitialShown:Symbol('InterstitialShown'),InterstitialHidden:Symbol('InterstitialHidden')};export class ResourceTreeFrame{constructor(model,parentFrame,frameId,payload,creationStackTrace){this._model=model;this._parentFrame=parentFrame;this._id=frameId;this._url='';this._crossTargetParentFrameId=null;if(payload){this._loaderId=payload.loaderId;this._name=payload.name;this._url=payload.url;this._securityOrigin=payload.securityOrigin;this._mimeType=payload.mimeType;this._unreachableUrl=payload.unreachableUrl||'';}
this._creationStackTrace=creationStackTrace;this._childFrames=[];this._resourcesMap={};if(this._parentFrame){this._parentFrame._childFrames.push(this);}}
_navigate(framePayload){this._loaderId=framePayload.loaderId;this._name=framePayload.name;this._url=framePayload.url;this._securityOrigin=framePayload.securityOrigin;this._mimeType=framePayload.mimeType;this._unreachableUrl=framePayload.unreachableUrl||'';const mainResource=this._resourcesMap[this._url];this._resourcesMap={};this._removeChildFrames();if(mainResource&&mainResource.loaderId===this._loaderId){this.addResource(mainResource);}}
resourceTreeModel(){return this._model;}
get id(){return this._id;}
get name(){return this._name||'';}
get url(){return this._url;}
get securityOrigin(){return this._securityOrigin;}
unreachableUrl(){return this._unreachableUrl;}
get loaderId(){return this._loaderId;}
get parentFrame(){return this._parentFrame;}
get childFrames(){return this._childFrames;}
crossTargetParentFrame(){if(!this._crossTargetParentFrameId){return null;}
if(!this._model.target().parentTarget()){return null;}
const parentModel=this._model.target().parentTarget().model(ResourceTreeModel);if(!parentModel){return null;}
return parentModel._frames.get(this._crossTargetParentFrameId)||null;}
findCreationCallFrame(searchFn){let stackTrace=this._creationStackTrace;while(stackTrace){const foundEntry=stackTrace.callFrames.find(searchFn);if(foundEntry){return foundEntry;}
stackTrace=this.parent;}
return null;}
isMainFrame(){return!this._parentFrame;}
isTopFrame(){return!this._parentFrame&&!this._crossTargetParentFrameId;}
get mainResource(){return this._resourcesMap[this._url];}
_removeChildFrame(frame){this._childFrames.remove(frame);frame._remove();}
_removeChildFrames(){const frames=this._childFrames;this._childFrames=[];for(let i=0;i<frames.length;++i){frames[i]._remove();}}
_remove(){this._removeChildFrames();this._model._frames.delete(this.id);this._model.dispatchEventToListeners(Events.FrameDetached,this);}
addResource(resource){if(this._resourcesMap[resource.url]===resource){return;}
this._resourcesMap[resource.url]=resource;this._model.dispatchEventToListeners(Events.ResourceAdded,resource);}
_addRequest(request){let resource=this._resourcesMap[request.url()];if(resource&&resource.request===request){return;}
resource=new SDK.Resource(this._model,request,request.url(),request.documentURL,request.frameId,request.loaderId,request.resourceType(),request.mimeType,null,null);this._resourcesMap[resource.url]=resource;this._model.dispatchEventToListeners(Events.ResourceAdded,resource);}
resources(){const result=[];for(const url in this._resourcesMap){result.push(this._resourcesMap[url]);}
return result;}
resourceForURL(url){let resource=this._resourcesMap[url]||null;if(resource){return resource;}
for(let i=0;!resource&&i<this._childFrames.length;++i){resource=this._childFrames[i].resourceForURL(url);}
return resource;}
_callForFrameResources(callback){for(const url in this._resourcesMap){if(callback(this._resourcesMap[url])){return true;}}
for(let i=0;i<this._childFrames.length;++i){if(this._childFrames[i]._callForFrameResources(callback)){return true;}}
return false;}
displayName(){if(this.isTopFrame()){return Common.UIString('top');}
const subtitle=new Common.ParsedURL(this._url).displayName;if(subtitle){if(!this._name){return subtitle;}
return this._name+' ('+subtitle+')';}
return Common.UIString('<iframe>');}}
export class PageDispatcher{constructor(resourceTreeModel){this._resourceTreeModel=resourceTreeModel;}
domContentEventFired(time){this._resourceTreeModel.dispatchEventToListeners(Events.DOMContentLoaded,time);}
loadEventFired(time){this._resourceTreeModel.dispatchEventToListeners(Events.Load,{resourceTreeModel:this._resourceTreeModel,loadTime:time});}
lifecycleEvent(frameId,loaderId,name,time){this._resourceTreeModel.dispatchEventToListeners(Events.LifecycleEvent,{frameId,name});}
frameAttached(frameId,parentFrameId,stackTrace){this._resourceTreeModel._frameAttached(frameId,parentFrameId,stackTrace);}
frameNavigated(frame){this._resourceTreeModel._frameNavigated(frame);}
frameDetached(frameId){this._resourceTreeModel._frameDetached(frameId);}
frameStartedLoading(frameId){}
frameStoppedLoading(frameId){}
frameRequestedNavigation(frameId){}
frameScheduledNavigation(frameId,delay){}
frameClearedScheduledNavigation(frameId){}
navigatedWithinDocument(frameId,url){}
frameResized(){this._resourceTreeModel.dispatchEventToListeners(Events.FrameResized,null);}
javascriptDialogOpening(url,message,dialogType,hasBrowserHandler,prompt){if(!hasBrowserHandler){this._resourceTreeModel._agent.handleJavaScriptDialog(false);}}
javascriptDialogClosed(result,userInput){}
screencastFrame(data,metadata,sessionId){}
screencastVisibilityChanged(visible){}
interstitialShown(){this._resourceTreeModel._isInterstitialShowing=true;this._resourceTreeModel.dispatchEventToListeners(Events.InterstitialShown);}
interstitialHidden(){this._resourceTreeModel._isInterstitialShowing=false;this._resourceTreeModel.dispatchEventToListeners(Events.InterstitialHidden);}
windowOpen(url,windowName,windowFeatures,userGesture){}
compilationCacheProduced(url,data){}
fileChooserOpened(mode){}
downloadWillBegin(frameId,url){}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.ResourceTreeModel=ResourceTreeModel;SDK.ResourceTreeModel.Events=Events;SDK.ResourceTreeFrame=ResourceTreeFrame;SDK.PageDispatcher=PageDispatcher;SDK.ResourceTreeModel.SecurityOriginData;SDK.SDKModel.register(ResourceTreeModel,SDK.Target.Capability.DOM,true);export default class Resource{constructor(resourceTreeModel,request,url,documentURL,frameId,loaderId,type,mimeType,lastModified,contentSize){this._resourceTreeModel=resourceTreeModel;this._request=request;this.url=url;this._documentURL=documentURL;this._frameId=frameId;this._loaderId=loaderId;this._type=type||Common.resourceTypes.Other;this._mimeType=mimeType;this._lastModified=lastModified&&lastModified.isValid()?lastModified:null;this._contentSize=contentSize;this._content;this._contentLoadError;this._contentEncoded;this._pendingContentCallbacks=[];if(this._request&&!this._request.finished){this._request.addEventListener(SDK.NetworkRequest.Events.FinishedLoading,this._requestFinished,this);}}
lastModified(){if(this._lastModified||!this._request){return this._lastModified;}
const lastModifiedHeader=this._request.responseLastModified();const date=lastModifiedHeader?new Date(lastModifiedHeader):null;this._lastModified=date&&date.isValid()?date:null;return this._lastModified;}
contentSize(){if(typeof this._contentSize==='number'||!this._request){return this._contentSize;}
return this._request.resourceSize;}
get request(){return this._request;}
get url(){return this._url;}
set url(x){this._url=x;this._parsedURL=new Common.ParsedURL(x);}
get parsedURL(){return this._parsedURL;}
get documentURL(){return this._documentURL;}
get frameId(){return this._frameId;}
get loaderId(){return this._loaderId;}
get displayName(){return this._parsedURL.displayName;}
resourceType(){return this._request?this._request.resourceType():this._type;}
get mimeType(){return this._request?this._request.mimeType:this._mimeType;}
get content(){return this._content;}
contentURL(){return this._url;}
contentType(){if(this.resourceType()===Common.resourceTypes.Document&&this.mimeType.indexOf('javascript')!==-1){return Common.resourceTypes.Script;}
return this.resourceType();}
async contentEncoded(){await this.requestContent();return this._contentEncoded;}
requestContent(){if(typeof this._content!=='undefined'){return Promise.resolve({content:(this._content),isEncoded:this._contentEncoded});}
let callback;const promise=new Promise(fulfill=>callback=fulfill);this._pendingContentCallbacks.push(callback);if(!this._request||this._request.finished){this._innerRequestContent();}
return promise;}
canonicalMimeType(){return this.contentType().canonicalMimeType()||this.mimeType;}
async searchInContent(query,caseSensitive,isRegex){if(!this.frameId){return[];}
if(this.request){return this.request.searchInContent(query,caseSensitive,isRegex);}
const result=await this._resourceTreeModel.target().pageAgent().searchInResource(this.frameId,this.url,query,caseSensitive,isRegex);return result||[];}
async populateImageSource(image){const{content}=await this.requestContent();const encoded=this._contentEncoded;image.src=Common.ContentProvider.contentAsDataURL(content,this._mimeType,encoded)||this._url;}
_requestFinished(){this._request.removeEventListener(SDK.NetworkRequest.Events.FinishedLoading,this._requestFinished,this);if(this._pendingContentCallbacks.length){this._innerRequestContent();}}
async _innerRequestContent(){if(this._contentRequested){return;}
this._contentRequested=true;let loadResult;if(this.request){const contentData=await this.request.contentData();this._content=contentData.content;this._contentEncoded=contentData.encoded;loadResult={content:(contentData.content),isEncoded:contentData.encoded};}else{const response=await this._resourceTreeModel.target().pageAgent().invoke_getResourceContent({frameId:this.frameId,url:this.url});if(response[Protocol.Error]){this._contentLoadError=response[Protocol.Error];this._content=null;loadResult={error:response[Protocol.Error],isEncoded:false};}else{this._content=response.content;this._contentLoadError=null;loadResult={content:response.content,isEncoded:response.base64Encoded};}
this._contentEncoded=response.base64Encoded;}
if(this._content===null){this._contentEncoded=false;}
for(const callback of this._pendingContentCallbacks.splice(0)){callback(loadResult);}
delete this._contentRequested;}
hasTextContent(){if(this._type.isTextType()){return true;}
if(this._type===Common.resourceTypes.Other){return!!this._content&&!this._contentEncoded;}
return false;}
frame(){return this._resourceTreeModel.frameForId(this._frameId);}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.Resource=Resource;export default class RemoteObject{static fromLocalObject(value){return new LocalJSONObject(value);}
static type(remoteObject){if(remoteObject===null){return'null';}
const type=typeof remoteObject;if(type!=='object'&&type!=='function'){return type;}
return remoteObject.type;}
static arrayNameFromDescription(description){return description.replace(_descriptionLengthParenRegex,'').replace(_descriptionLengthSquareRegex,'');}
static arrayLength(object){if(object.subtype!=='array'&&object.subtype!=='typedarray'){return 0;}
const parenMatches=object.description.match(_descriptionLengthParenRegex);const squareMatches=object.description.match(_descriptionLengthSquareRegex);return parenMatches?parseInt(parenMatches[1],10):(squareMatches?parseInt(squareMatches[1],10):0);}
static unserializableDescription(object){const type=typeof object;if(type==='number'){const description=String(object);if(object===0&&1/object<0){return UnserializableNumber.Negative0;}
if(description===UnserializableNumber.NaN||description===UnserializableNumber.Infinity||description===UnserializableNumber.NegativeInfinity){return description;}}
if(type==='bigint'){return object+'n';}
return null;}
static toCallArgument(object){const type=typeof object;if(type==='undefined'){return{};}
const unserializableDescription=RemoteObject.unserializableDescription(object);if(type==='number'){if(unserializableDescription!==null){return{unserializableValue:unserializableDescription};}
return{value:object};}
if(type==='bigint'){return{unserializableValue:(unserializableDescription)};}
if(type==='string'||type==='boolean'){return{value:object};}
if(!object){return{value:null};}
if(object instanceof RemoteObject){const unserializableValue=object.unserializableValue();if(unserializableValue!==undefined){return{unserializableValue:unserializableValue};}}else if(object.unserializableValue!==undefined){return{unserializableValue:object.unserializableValue};}
if(typeof object.objectId!=='undefined'){return{objectId:object.objectId};}
return{value:object.value};}
static async loadFromObjectPerProto(object,generatePreview){const result=await Promise.all([object.getAllProperties(true,generatePreview),object.getOwnProperties(generatePreview)]);const accessorProperties=result[0].properties;const ownProperties=result[1].properties;const internalProperties=result[1].internalProperties;if(!ownProperties||!accessorProperties){return({properties:null,internalProperties:null});}
const propertiesMap=new Map();const propertySymbols=[];for(let i=0;i<accessorProperties.length;i++){const property=accessorProperties[i];if(property.symbol){propertySymbols.push(property);}else{propertiesMap.set(property.name,property);}}
for(let i=0;i<ownProperties.length;i++){const property=ownProperties[i];if(property.isAccessorProperty()){continue;}
if(property.symbol){propertySymbols.push(property);}else{propertiesMap.set(property.name,property);}}
return{properties:propertiesMap.valuesArray().concat(propertySymbols),internalProperties:internalProperties?internalProperties:null};}
customPreview(){return null;}
get objectId(){return'Not implemented';}
get type(){throw'Not implemented';}
get subtype(){throw'Not implemented';}
get value(){throw'Not implemented';}
unserializableValue(){throw'Not implemented';}
get description(){throw'Not implemented';}
get hasChildren(){throw'Not implemented';}
get preview(){return undefined;}
get className(){return null;}
arrayLength(){throw'Not implemented';}
getOwnProperties(generatePreview){throw'Not implemented';}
getAllProperties(accessorPropertiesOnly,generatePreview){throw'Not implemented';}
async deleteProperty(name){throw'Not implemented';}
async setPropertyValue(name,value){throw'Not implemented';}
callFunction(functionDeclaration,args){throw'Not implemented';}
callFunctionJSON(functionDeclaration,args){throw'Not implemented';}
release(){}
debuggerModel(){throw new Error('DebuggerModel-less object');}
runtimeModel(){throw new Error('RuntimeModel-less object');}
isNode(){return false;}}
export class RemoteObjectImpl extends RemoteObject{constructor(runtimeModel,objectId,type,subtype,value,unserializableValue,description,preview,customPreview,className){super();this._runtimeModel=runtimeModel;this._runtimeAgent=runtimeModel.target().runtimeAgent();this._type=type;this._subtype=subtype;if(objectId){this._objectId=objectId;this._description=description;this._hasChildren=(type!=='symbol');this._preview=preview;}else{this._description=description;if(!this.description&&unserializableValue){this._description=unserializableValue;}
if(!this._description&&(typeof value!=='object'||value===null)){this._description=value+'';}
this._hasChildren=false;if(typeof unserializableValue==='string'){this._unserializableValue=unserializableValue;if(unserializableValue===UnserializableNumber.Infinity||unserializableValue===UnserializableNumber.NegativeInfinity||unserializableValue===UnserializableNumber.Negative0||unserializableValue===UnserializableNumber.NaN){this._value=Number(unserializableValue);}else if(type==='bigint'&&unserializableValue.endsWith('n')){this._value=BigInt(unserializableValue.substring(0,unserializableValue.length-1));}else{this._value=unserializableValue;}}else{this._value=value;}}
this._customPreview=customPreview||null;this._className=typeof className==='string'?className:null;}
customPreview(){return this._customPreview;}
get objectId(){return this._objectId;}
get type(){return this._type;}
get subtype(){return this._subtype;}
get value(){return this._value;}
unserializableValue(){return this._unserializableValue;}
get description(){return this._description;}
get hasChildren(){return this._hasChildren;}
get preview(){return this._preview;}
get className(){return this._className;}
getOwnProperties(generatePreview){return this.doGetProperties(true,false,generatePreview);}
getAllProperties(accessorPropertiesOnly,generatePreview){return this.doGetProperties(false,accessorPropertiesOnly,generatePreview);}
async doGetProperties(ownProperties,accessorPropertiesOnly,generatePreview){if(!this._objectId){return({properties:null,internalProperties:null});}
const response=await this._runtimeAgent.invoke_getProperties({objectId:this._objectId,ownProperties,accessorPropertiesOnly,generatePreview});if(response[Protocol.Error]){return({properties:null,internalProperties:null});}
if(response.exceptionDetails){this._runtimeModel.exceptionThrown(Date.now(),response.exceptionDetails);return({properties:null,internalProperties:null});}
const{result:properties=[],internalProperties=[],privateProperties=[]}=response;const result=[];for(const property of properties){const propertyValue=property.value?this._runtimeModel.createRemoteObject(property.value):null;const propertySymbol=property.symbol?this._runtimeModel.createRemoteObject(property.symbol):null;const remoteProperty=new RemoteObjectProperty(property.name,propertyValue,!!property.enumerable,!!property.writable,!!property.isOwn,!!property.wasThrown,propertySymbol);if(typeof property.value==='undefined'){if(property.get&&property.get.type!=='undefined'){remoteProperty.getter=this._runtimeModel.createRemoteObject(property.get);}
if(property.set&&property.set.type!=='undefined'){remoteProperty.setter=this._runtimeModel.createRemoteObject(property.set);}}
result.push(remoteProperty);}
for(const property of privateProperties){const propertyValue=this._runtimeModel.createRemoteObject(property.value);const remoteProperty=new RemoteObjectProperty(property.name,propertyValue,true,true,true,false,undefined,false,undefined,true);result.push(remoteProperty);}
const internalPropertiesResult=[];for(const property of internalProperties){if(!property.value){continue;}
if(property.name==='[[StableObjectId]]'){continue;}
const propertyValue=this._runtimeModel.createRemoteObject(property.value);internalPropertiesResult.push(new RemoteObjectProperty(property.name,propertyValue,true,false,undefined,undefined,undefined,true));}
return{properties:result,internalProperties:internalPropertiesResult};}
async setPropertyValue(name,value){if(!this._objectId){return`Can't set a property of non-object.`;}
const response=await this._runtimeAgent.invoke_evaluate({expression:value,silent:true});if(response[Protocol.Error]||response.exceptionDetails){return response[Protocol.Error]||(response.result.type!=='string'?response.result.description:(response.result.value));}
if(typeof name==='string'){name=RemoteObject.toCallArgument(name);}
const resultPromise=this.doSetObjectPropertyValue(response.result,name);if(response.result.objectId){this._runtimeAgent.releaseObject(response.result.objectId);}
return resultPromise;}
async doSetObjectPropertyValue(result,name){const setPropertyValueFunction='function(a, b) { this[a] = b; }';const argv=[name,RemoteObject.toCallArgument(result)];const response=await this._runtimeAgent.invoke_callFunctionOn({objectId:this._objectId,functionDeclaration:setPropertyValueFunction,arguments:argv,silent:true});const error=response[Protocol.Error];return error||response.exceptionDetails?error||response.result.description:undefined;}
async deleteProperty(name){if(!this._objectId){return`Can't delete a property of non-object.`;}
const deletePropertyFunction='function(a) { delete this[a]; return !(a in this); }';const response=await this._runtimeAgent.invoke_callFunctionOn({objectId:this._objectId,functionDeclaration:deletePropertyFunction,arguments:[name],silent:true});if(response[Protocol.Error]||response.exceptionDetails){return response[Protocol.Error]||response.result.description;}
if(!response.result.value){return'Failed to delete property.';}}
async callFunction(functionDeclaration,args){const response=await this._runtimeAgent.invoke_callFunctionOn({objectId:this._objectId,functionDeclaration:functionDeclaration.toString(),arguments:args,silent:true});if(response[Protocol.Error]){return{object:null,wasThrown:false};}
return{object:this._runtimeModel.createRemoteObject(response.result),wasThrown:!!response.exceptionDetails};}
async callFunctionJSON(functionDeclaration,args){const response=await this._runtimeAgent.invoke_callFunctionOn({objectId:this._objectId,functionDeclaration:functionDeclaration.toString(),arguments:args,silent:true,returnByValue:true});return response[Protocol.Error]||response.exceptionDetails?null:response.result.value;}
release(){if(!this._objectId){return;}
this._runtimeAgent.releaseObject(this._objectId);}
arrayLength(){return RemoteObject.arrayLength(this);}
debuggerModel(){return this._runtimeModel.debuggerModel();}
runtimeModel(){return this._runtimeModel;}
isNode(){return!!this._objectId&&this.type==='object'&&this.subtype==='node';}}
export class ScopeRemoteObject extends RemoteObjectImpl{constructor(runtimeModel,objectId,scopeRef,type,subtype,value,unserializableValue,description,preview){super(runtimeModel,objectId,type,subtype,value,unserializableValue,description,preview);this._scopeRef=scopeRef;this._savedScopeProperties=undefined;}
async doGetProperties(ownProperties,accessorPropertiesOnly,generatePreview){if(accessorPropertiesOnly){return({properties:[],internalProperties:[]});}
if(this._savedScopeProperties){return{properties:this._savedScopeProperties.slice(),internalProperties:null};}
const allProperties=await super.doGetProperties(ownProperties,accessorPropertiesOnly,true);if(this._scopeRef&&Array.isArray(allProperties.properties)){this._savedScopeProperties=allProperties.properties.slice();if(!this._scopeRef.callFrameId){for(const property of this._savedScopeProperties){property.writable=false;}}}
return allProperties;}
async doSetObjectPropertyValue(result,argumentName){const name=(argumentName.value);const error=await this.debuggerModel().setVariableValue(this._scopeRef.number,name,RemoteObject.toCallArgument(result),this._scopeRef.callFrameId);if(error){return error;}
if(this._savedScopeProperties){for(const property of this._savedScopeProperties){if(property.name===name){property.value=this._runtimeModel.createRemoteObject(result);}}}}}
export class ScopeRef{constructor(number,callFrameId){this.number=number;this.callFrameId=callFrameId;}}
export class RemoteObjectProperty{constructor(name,value,enumerable,writable,isOwn,wasThrown,symbol,synthetic,syntheticSetter,isPrivate){this.name=name;if(value!==null){this.value=value;}
this.enumerable=typeof enumerable!=='undefined'?enumerable:true;const isNonSyntheticOrSyntheticWritable=!synthetic||!!syntheticSetter;this.writable=typeof writable!=='undefined'?writable:isNonSyntheticOrSyntheticWritable;this.isOwn=!!isOwn;this.wasThrown=!!wasThrown;if(symbol){this.symbol=symbol;}
this.synthetic=!!synthetic;if(syntheticSetter){this.syntheticSetter=syntheticSetter;}
this.private=!!isPrivate;}
async setSyntheticValue(expression){if(!this.syntheticSetter){return false;}
const result=await this.syntheticSetter(expression);if(result){this.value=result;}
return!!result;}
isAccessorProperty(){return!!(this.getter||this.setter);}}
export class LocalJSONObject extends RemoteObject{constructor(value){super();this._value=value;this._cachedDescription;this._cachedChildren;}
get objectId(){return undefined;}
get value(){return this._value;}
unserializableValue(){const unserializableDescription=RemoteObject.unserializableDescription(this._value);return unserializableDescription||undefined;}
get description(){if(this._cachedDescription){return this._cachedDescription;}
function formatArrayItem(property){return this._formatValue(property.value);}
function formatObjectItem(property){let name=property.name;if(/^\s|\s$|^$|\n/.test(name)){name='"'+name.replace(/\n/g,'\u21B5')+'"';}
return name+': '+this._formatValue(property.value);}
if(this.type==='object'){switch(this.subtype){case'array':this._cachedDescription=this._concatenate('[',']',formatArrayItem.bind(this));break;case'date':this._cachedDescription=''+this._value;break;case'null':this._cachedDescription='null';break;default:this._cachedDescription=this._concatenate('{','}',formatObjectItem.bind(this));}}else{this._cachedDescription=String(this._value);}
return this._cachedDescription;}
_formatValue(value){if(!value){return'undefined';}
const description=value.description||'';if(value.type==='string'){return'"'+description.replace(/\n/g,'\u21B5')+'"';}
return description;}
_concatenate(prefix,suffix,formatProperty){const previewChars=100;let buffer=prefix;const children=this._children();for(let i=0;i<children.length;++i){const itemDescription=formatProperty(children[i]);if(buffer.length+itemDescription.length>previewChars){buffer+=',\u2026';break;}
if(i){buffer+=', ';}
buffer+=itemDescription;}
buffer+=suffix;return buffer;}
get type(){return typeof this._value;}
get subtype(){if(this._value===null){return'null';}
if(Array.isArray(this._value)){return'array';}
if(this._value instanceof Date){return'date';}
return undefined;}
get hasChildren(){if((typeof this._value!=='object')||(this._value===null)){return false;}
return!!Object.keys((this._value)).length;}
getOwnProperties(generatePreview){return Promise.resolve(({properties:this._children(),internalProperties:null}));}
getAllProperties(accessorPropertiesOnly,generatePreview){if(accessorPropertiesOnly){return Promise.resolve(({properties:[],internalProperties:null}));}else{return Promise.resolve(({properties:this._children(),internalProperties:null}));}}
_children(){if(!this.hasChildren){return[];}
const value=(this._value);function buildProperty(propName){let propValue=value[propName];if(!(propValue instanceof RemoteObject)){propValue=RemoteObject.fromLocalObject(propValue);}
return new RemoteObjectProperty(propName,propValue);}
if(!this._cachedChildren){this._cachedChildren=Object.keys(value).map(buildProperty);}
return this._cachedChildren;}
arrayLength(){return Array.isArray(this._value)?this._value.length:0;}
callFunction(functionDeclaration,args){const target=(this._value);const rawArgs=args?args.map(arg=>arg.value):[];let result;let wasThrown=false;try{result=functionDeclaration.apply(target,rawArgs);}catch(e){wasThrown=true;}
const object=RemoteObject.fromLocalObject(result);return Promise.resolve(({object,wasThrown}));}
callFunctionJSON(functionDeclaration,args){const target=(this._value);const rawArgs=args?args.map(arg=>arg.value):[];let result;try{result=functionDeclaration.apply(target,rawArgs);}catch(e){result=null;}
return Promise.resolve(result);}}
export class RemoteArray{constructor(object){this._object=object;}
static objectAsArray(object){if(!object||object.type!=='object'||(object.subtype!=='array'&&object.subtype!=='typedarray')){throw new Error('Object is empty or not an array');}
return new RemoteArray(object);}
static createFromRemoteObjects(objects){if(!objects.length){throw new Error('Input array is empty');}
const objectArguments=[];for(let i=0;i<objects.length;++i){objectArguments.push(RemoteObject.toCallArgument(objects[i]));}
return objects[0].callFunction(createArray,objectArguments).then(returnRemoteArray);function createArray(){if(arguments.length>1){return new Array(arguments);}
return[arguments[0]];}
function returnRemoteArray(result){if(result.wasThrown||!result.object){throw new Error('Call function throws exceptions or returns empty value');}
return RemoteArray.objectAsArray(result.object);}}
at(index){if(index<0||index>this._object.arrayLength()){throw new Error('Out of range');}
return this._object.callFunction(at,[RemoteObject.toCallArgument(index)]).then(assertCallFunctionResult);function at(index){return this[index];}
function assertCallFunctionResult(result){if(result.wasThrown||!result.object){throw new Error('Exception in callFunction or result value is empty');}
return result.object;}}
length(){return this._object.arrayLength();}
map(func){const promises=[];for(let i=0;i<this.length();++i){promises.push(this.at(i).then(func));}
return Promise.all(promises);}
object(){return this._object;}}
export class RemoteFunction{constructor(object){this._object=object;}
static objectAsFunction(object){if(!object||object.type!=='function'){throw new Error('Object is empty or not a function');}
return new RemoteFunction(object);}
targetFunction(){return this._object.getOwnProperties(false).then(targetFunction.bind(this));function targetFunction(ownProperties){if(!ownProperties.internalProperties){return this._object;}
const internalProperties=ownProperties.internalProperties;for(const property of internalProperties){if(property.name==='[[TargetFunction]]'){return property.value;}}
return this._object;}}
targetFunctionDetails(){return this.targetFunction().then(functionDetails.bind(this));function functionDetails(targetFunction){const boundReleaseFunctionDetails=releaseTargetFunction.bind(null,this._object!==targetFunction?targetFunction:null);return targetFunction.debuggerModel().functionDetailsPromise(targetFunction).then(boundReleaseFunctionDetails);}
function releaseTargetFunction(targetFunction,functionDetails){if(targetFunction){targetFunction.release();}
return functionDetails;}}
object(){return this._object;}}
const _descriptionLengthParenRegex=/\(([0-9]+)\)/;const _descriptionLengthSquareRegex=/\[([0-9]+)\]/;const UnserializableNumber={Negative0:('-0'),NaN:('NaN'),Infinity:('Infinity'),NegativeInfinity:('-Infinity')};self.SDK=self.SDK||{};SDK=SDK||{};SDK.RemoteObject=RemoteObject;SDK.RemoteObjectImpl=RemoteObjectImpl;SDK.ScopeRemoteObject=ScopeRemoteObject;SDK.ScopeRef=ScopeRef;SDK.RemoteObjectProperty=RemoteObjectProperty;SDK.LocalJSONObject=LocalJSONObject;SDK.RemoteArray=RemoteArray;SDK.RemoteFunction=RemoteFunction;SDK.CallFunctionResult;SDK.GetPropertiesResult;export class ProfileNode{constructor(callFrame){this.callFrame=callFrame;this.callUID=`${callFrame.functionName}@${callFrame.scriptId}:${callFrame.lineNumber}:${callFrame.columnNumber}`;this.self=0;this.total=0;this.id=0;this.parent=null;this.children=[];}
get functionName(){return this.callFrame.functionName;}
get scriptId(){return this.callFrame.scriptId;}
get url(){return this.callFrame.url;}
get lineNumber(){return this.callFrame.lineNumber;}
get columnNumber(){return this.callFrame.columnNumber;}}
export default class ProfileTreeModel{constructor(target){this._target=target||null;}
initialize(root){this.root=root;this._assignDepthsAndParents();this.total=this._calculateTotals(this.root);}
_assignDepthsAndParents(){const root=this.root;root.depth=-1;root.parent=null;this.maxDepth=0;const nodesToTraverse=[root];while(nodesToTraverse.length){const parent=nodesToTraverse.pop();const depth=parent.depth+1;if(depth>this.maxDepth){this.maxDepth=depth;}
const children=parent.children;const length=children.length;for(let i=0;i<length;++i){const child=children[i];child.depth=depth;child.parent=parent;if(child.children.length){nodesToTraverse.push(child);}}}}
_calculateTotals(root){const nodesToTraverse=[root];const dfsList=[];while(nodesToTraverse.length){const node=nodesToTraverse.pop();node.total=node.self;dfsList.push(node);nodesToTraverse.push(...node.children);}
while(dfsList.length>1){const node=dfsList.pop();node.parent.total+=node.total;}
return root.total;}
target(){return this._target;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.ProfileTreeModel=ProfileTreeModel;SDK.ProfileNode=ProfileNode;class Issue{constructor(category,name,data){this._category=category;this._name=name;this._data=data;}}
Issue.Categories={SameSite:Symbol('SameSite'),};const connectedIssuesSymbol=Symbol('issues');export default class IssuesModel extends SDK.SDKModel{constructor(target){super(target);const networkManager=target.model(SDK.NetworkManager);if(networkManager){networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished,this._handleRequestFinished,this);}
this._issues=[];}
static connectWithIssue(obj,issue){if(!obj){return;}
if(!obj[connectedIssuesSymbol]){obj[connectedIssuesSymbol]=[];}
obj[connectedIssuesSymbol].push(issue);}
static hasIssues(obj){if(!obj){return false;}
return obj[connectedIssuesSymbol]&&obj[connectedIssuesSymbol].length;}
_handleRequestFinished(event){const request=(event.data);const blockedResponseCookies=request.blockedResponseCookies();for(const blockedCookie of blockedResponseCookies){const reason=blockedCookie.blockedReasons[0];const cookie=blockedCookie.cookie;const issue=new Issue(Issue.Categories.SameSite,reason,{request,cookie});IssuesModel.connectWithIssue(request,issue);IssuesModel.connectWithIssue(cookie,issue);}}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.IssuesModel=IssuesModel;SDK.SDKModel.register(IssuesModel,SDK.Target.Capability.None,true);export default class PerformanceMetricsModel extends SDK.SDKModel{constructor(target){super(target);this._agent=target.performanceAgent();const mode=MetricMode;this._metricModes=new Map([['TaskDuration',mode.CumulativeTime],['ScriptDuration',mode.CumulativeTime],['LayoutDuration',mode.CumulativeTime],['RecalcStyleDuration',mode.CumulativeTime],['LayoutCount',mode.CumulativeCount],['RecalcStyleCount',mode.CumulativeCount]]);this._metricData=new Map();}
enable(){return this._agent.enable();}
disable(){return this._agent.disable();}
async requestMetrics(){const rawMetrics=await this._agent.getMetrics()||[];const metrics=new Map();const timestamp=performance.now();for(const metric of rawMetrics){let data=this._metricData.get(metric.name);if(!data){data={};this._metricData.set(metric.name,data);}
let value;switch(this._metricModes.get(metric.name)){case MetricMode.CumulativeTime:value=data.lastTimestamp?Number.constrain((metric.value-data.lastValue)*1000/(timestamp-data.lastTimestamp),0,1):0;data.lastValue=metric.value;data.lastTimestamp=timestamp;break;case MetricMode.CumulativeCount:value=data.lastTimestamp?Math.max(0,(metric.value-data.lastValue)*1000/(timestamp-data.lastTimestamp)):0;data.lastValue=metric.value;data.lastTimestamp=timestamp;break;default:value=metric.value;break;}
metrics.set(metric.name,value);}
return{metrics:metrics,timestamp:timestamp};}}
const MetricMode={CumulativeTime:Symbol('CumulativeTime'),CumulativeCount:Symbol('CumulativeCount'),};self.SDK=self.SDK||{};SDK=SDK||{};SDK.PerformanceMetricsModel=PerformanceMetricsModel;SDK.SDKModel.register(SDK.PerformanceMetricsModel,SDK.Target.Capability.DOM,false);export class PaintProfilerModel extends SDK.SDKModel{constructor(target){super(target);this._layerTreeAgent=target.layerTreeAgent();}
async loadSnapshotFromFragments(fragments){const snapshotId=await this._layerTreeAgent.loadSnapshot(fragments);return snapshotId&&new PaintProfilerSnapshot(this,snapshotId);}
loadSnapshot(encodedPicture){const fragment={x:0,y:0,picture:encodedPicture};return this.loadSnapshotFromFragments([fragment]);}
async makeSnapshot(layerId){const snapshotId=await this._layerTreeAgent.makeSnapshot(layerId);return snapshotId&&new PaintProfilerSnapshot(this,snapshotId);}}
export class PaintProfilerSnapshot{constructor(paintProfilerModel,snapshotId){this._paintProfilerModel=paintProfilerModel;this._id=snapshotId;this._refCount=1;}
release(){console.assert(this._refCount>0,'release is already called on the object');if(!--this._refCount){this._paintProfilerModel._layerTreeAgent.releaseSnapshot(this._id);}}
addReference(){++this._refCount;console.assert(this._refCount>0,'Referencing a dead object');}
replay(scale,firstStep,lastStep){return this._paintProfilerModel._layerTreeAgent.replaySnapshot(this._id,firstStep,lastStep,scale||1.0);}
profile(clipRect){return this._paintProfilerModel._layerTreeAgent.profileSnapshot(this._id,5,1,clipRect||undefined);}
async commandLog(){const log=await this._paintProfilerModel._layerTreeAgent.snapshotCommandLog(this._id);return log&&log.map((entry,index)=>new PaintProfilerLogItem((entry),index));}}
export class PaintProfilerLogItem{constructor(rawEntry,commandIndex){this.method=rawEntry.method;this.params=rawEntry.params;this.commandIndex=commandIndex;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.PaintProfilerModel=PaintProfilerModel;SDK.PaintProfilerSnapshot=PaintProfilerSnapshot;SDK.PaintProfilerLogItem=PaintProfilerLogItem;SDK.PictureFragment;SDK.RawPaintProfilerLogItem;SDK.SDKModel.register(PaintProfilerModel,SDK.Target.Capability.DOM,false);export default class OverlayModel extends SDK.SDKModel{constructor(target){super(target);this._domModel=(target.model(SDK.DOMModel));target.registerOverlayDispatcher(this);this._overlayAgent=target.overlayAgent();this._debuggerModel=target.model(SDK.DebuggerModel);if(this._debuggerModel){Common.moduleSetting('disablePausedStateOverlay').addChangeListener(this._updatePausedInDebuggerMessage,this);this._debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerPaused,this._updatePausedInDebuggerMessage,this);this._debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerResumed,this._updatePausedInDebuggerMessage,this);this._debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared,this._updatePausedInDebuggerMessage,this);}
this._inspectModeEnabled=false;this._hideHighlightTimeout=null;this._defaultHighlighter=new DefaultHighlighter(this);this._highlighter=this._defaultHighlighter;this._showPaintRectsSetting=Common.moduleSetting('showPaintRects');this._showLayoutShiftRegionsSetting=Common.moduleSetting('showLayoutShiftRegions');this._showAdHighlightsSetting=Common.moduleSetting('showAdHighlights');this._showDebugBordersSetting=Common.moduleSetting('showDebugBorders');this._showFPSCounterSetting=Common.moduleSetting('showFPSCounter');this._showScrollBottleneckRectsSetting=Common.moduleSetting('showScrollBottleneckRects');this._showHitTestBordersSetting=Common.moduleSetting('showHitTestBorders');this._registeredListeners=[];this._showViewportSizeOnResize=true;if(!target.suspended()){this._overlayAgent.enable();this._wireAgentToSettings();}}
static highlightObjectAsDOMNode(object){const domModel=object.runtimeModel().target().model(SDK.DOMModel);if(domModel){domModel.overlayModel().highlightInOverlay({object});}}
static hideDOMNodeHighlight(){for(const overlayModel of SDK.targetManager.models(OverlayModel)){overlayModel._delayedHideHighlight(0);}}
static async muteHighlight(){return Promise.all(SDK.targetManager.models(OverlayModel).map(model=>model.suspendModel()));}
static async unmuteHighlight(){return Promise.all(SDK.targetManager.models(OverlayModel).map(model=>model.resumeModel()));}
_wireAgentToSettings(){this._registeredListeners=[this._showPaintRectsSetting.addChangeListener(()=>this._overlayAgent.setShowPaintRects(this._showPaintRectsSetting.get())),this._showLayoutShiftRegionsSetting.addChangeListener(()=>this._overlayAgent.setShowLayoutShiftRegions(this._showLayoutShiftRegionsSetting.get())),this._showAdHighlightsSetting.addChangeListener(()=>this._overlayAgent.setShowAdHighlights(this._showAdHighlightsSetting.get())),this._showDebugBordersSetting.addChangeListener(()=>this._overlayAgent.setShowDebugBorders(this._showDebugBordersSetting.get())),this._showFPSCounterSetting.addChangeListener(()=>this._overlayAgent.setShowFPSCounter(this._showFPSCounterSetting.get())),this._showScrollBottleneckRectsSetting.addChangeListener(()=>this._overlayAgent.setShowScrollBottleneckRects(this._showScrollBottleneckRectsSetting.get())),this._showHitTestBordersSetting.addChangeListener(()=>this._overlayAgent.setShowHitTestBorders(this._showHitTestBordersSetting.get()))];if(this._showPaintRectsSetting.get()){this._overlayAgent.setShowPaintRects(true);}
if(this._showLayoutShiftRegionsSetting.get()){this._overlayAgent.setShowLayoutShiftRegions(true);}
if(this._showAdHighlightsSetting.get()){this._overlayAgent.setShowAdHighlights(true);}
if(this._showDebugBordersSetting.get()){this._overlayAgent.setShowDebugBorders(true);}
if(this._showFPSCounterSetting.get()){this._overlayAgent.setShowFPSCounter(true);}
if(this._showScrollBottleneckRectsSetting.get()){this._overlayAgent.setShowScrollBottleneckRects(true);}
if(this._showHitTestBordersSetting.get()){this._overlayAgent.setShowHitTestBorders(true);}
if(this._debuggerModel.isPaused()){this._updatePausedInDebuggerMessage();}
return this._overlayAgent.setShowViewportSizeOnResize(this._showViewportSizeOnResize);}
suspendModel(){Common.EventTarget.removeEventListeners(this._registeredListeners);return this._overlayAgent.disable();}
resumeModel(){this._overlayAgent.enable();return this._wireAgentToSettings();}
setShowViewportSizeOnResize(show){this._showViewportSizeOnResize=show;if(this.target().suspended()){return;}
this._overlayAgent.setShowViewportSizeOnResize(show);}
_updatePausedInDebuggerMessage(){if(this.target().suspended()){return Promise.resolve();}
const message=this._debuggerModel.isPaused()&&!Common.moduleSetting('disablePausedStateOverlay').get()?Common.UIString('Paused in debugger'):undefined;return this._overlayAgent.setPausedInDebuggerMessage(message);}
setHighlighter(highlighter){this._highlighter=highlighter||this._defaultHighlighter;}
async setInspectMode(mode,showStyles=true){await this._domModel.requestDocument();this._inspectModeEnabled=mode!==Protocol.Overlay.InspectMode.None;this.dispatchEventToListeners(Events.InspectModeWillBeToggled,this);this._highlighter.setInspectMode(mode,this._buildHighlightConfig('all',showStyles));}
inspectModeEnabled(){return this._inspectModeEnabled;}
highlightInOverlay(data,mode,showInfo){if(this._hideHighlightTimeout){clearTimeout(this._hideHighlightTimeout);this._hideHighlightTimeout=null;}
const highlightConfig=this._buildHighlightConfig(mode);if(typeof showInfo!=='undefined'){highlightConfig.showInfo=showInfo;}
this._highlighter.highlightInOverlay(data,highlightConfig);}
highlightInOverlayForTwoSeconds(data){this.highlightInOverlay(data);this._delayedHideHighlight(2000);}
_delayedHideHighlight(delay){if(this._hideHighlightTimeout===null){this._hideHighlightTimeout=setTimeout(()=>this.highlightInOverlay({}),delay);}}
highlightFrame(frameId){if(this._hideHighlightTimeout){clearTimeout(this._hideHighlightTimeout);this._hideHighlightTimeout=null;}
this._highlighter.highlightFrame(frameId);}
_buildHighlightConfig(mode='all',showStyles=false){const showRulers=Common.moduleSetting('showMetricsRulers').get();const highlightConfig={showInfo:mode==='all',showRulers:showRulers,showStyles,showExtensionLines:showRulers};if(mode==='all'||mode==='content'){highlightConfig.contentColor=Common.Color.PageHighlight.Content.toProtocolRGBA();}
if(mode==='all'||mode==='padding'){highlightConfig.paddingColor=Common.Color.PageHighlight.Padding.toProtocolRGBA();}
if(mode==='all'||mode==='border'){highlightConfig.borderColor=Common.Color.PageHighlight.Border.toProtocolRGBA();}
if(mode==='all'||mode==='margin'){highlightConfig.marginColor=Common.Color.PageHighlight.Margin.toProtocolRGBA();}
if(mode==='all'){highlightConfig.eventTargetColor=Common.Color.PageHighlight.EventTarget.toProtocolRGBA();highlightConfig.shapeColor=Common.Color.PageHighlight.Shape.toProtocolRGBA();highlightConfig.shapeMarginColor=Common.Color.PageHighlight.ShapeMargin.toProtocolRGBA();}
if(mode==='all'){highlightConfig.cssGridColor=Common.Color.PageHighlight.CssGrid.toProtocolRGBA();}
return highlightConfig;}
nodeHighlightRequested(nodeId){const node=this._domModel.nodeForId(nodeId);if(node){this.dispatchEventToListeners(Events.HighlightNodeRequested,node);}}
static setInspectNodeHandler(handler){OverlayModel._inspectNodeHandler=handler;}
inspectNodeRequested(backendNodeId){const deferredNode=new SDK.DeferredDOMNode(this.target(),backendNodeId);if(OverlayModel._inspectNodeHandler){deferredNode.resolvePromise().then(node=>{if(node){OverlayModel._inspectNodeHandler(node);}});}else{Common.Revealer.reveal(deferredNode);}
this.dispatchEventToListeners(Events.ExitedInspectMode);}
screenshotRequested(viewport){this.dispatchEventToListeners(Events.ScreenshotRequested,viewport);this.dispatchEventToListeners(Events.ExitedInspectMode);}
inspectModeCanceled(){this.dispatchEventToListeners(Events.ExitedInspectMode);}}
export const Events={InspectModeWillBeToggled:Symbol('InspectModeWillBeToggled'),ExitedInspectMode:Symbol('InspectModeExited'),HighlightNodeRequested:Symbol('HighlightNodeRequested'),ScreenshotRequested:Symbol('ScreenshotRequested'),};export class Highlighter{highlightInOverlay(data,config){}
setInspectMode(mode,config){}
highlightFrame(frameId){}}
class DefaultHighlighter{constructor(model){this._model=model;}
highlightInOverlay(data,config){const{node,deferredNode,object,selectorList}=data;const nodeId=node?node.id:undefined;const backendNodeId=deferredNode?deferredNode.backendNodeId():undefined;const objectId=object?object.objectId:undefined;if(nodeId||backendNodeId||objectId){this._model._overlayAgent.highlightNode(config,nodeId,backendNodeId,objectId,selectorList);}else{this._model._overlayAgent.hideHighlight();}}
setInspectMode(mode,config){return this._model._overlayAgent.setInspectMode(mode,config);}
highlightFrame(frameId){this._model._overlayAgent.highlightFrame(frameId,Common.Color.PageHighlight.Content.toProtocolRGBA(),Common.Color.PageHighlight.ContentOutline.toProtocolRGBA());}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.OverlayModel=OverlayModel;SDK.OverlayModel.Events=Events;SDK.OverlayModel.Highlighter=Highlighter;SDK.SDKModel.register(SDK.OverlayModel,SDK.Target.Capability.DOM,true);SDK.OverlayModel.HighlightData;export default class NetworkRequest extends Common.Object{constructor(requestId,url,documentURL,frameId,loaderId,initiator){super();this._requestId=requestId;this._backendRequestId=requestId;this.setUrl(url);this._documentURL=documentURL;this._frameId=frameId;this._loaderId=loaderId;this._initiator=initiator;this._redirectSource=null;this._redirectDestination=null;this._issueTime=-1;this._startTime=-1;this._endTime=-1;this._blockedReason=undefined;this.statusCode=0;this.statusText='';this.requestMethod='';this.requestTime=0;this.protocol='';this.mixedContentType=Protocol.Security.MixedContentType.None;this._initialPriority=null;this._currentPriority=null;this._signedExchangeInfo=null;this._resourceType=Common.resourceTypes.Other;this._contentData=null;this._frames=[];this._eventSourceMessages=[];this._responseHeaderValues={};this._responseHeadersText='';this._requestHeaders=[];this._requestHeaderValues={};this._remoteAddress='';this._referrerPolicy=null;this._securityState=Protocol.Security.SecurityState.Unknown;this._securityDetails=null;this.connectionId='0';this._formParametersPromise=null;this._requestFormDataPromise=(Promise.resolve(null));this._hasExtraRequestInfo=false;this._hasExtraResponseInfo=false;this._blockedRequestCookies=[];this._blockedResponseCookies=[];}
indentityCompare(other){const thisId=this.requestId();const thatId=other.requestId();if(thisId>thatId){return 1;}
if(thisId<thatId){return-1;}
return 0;}
requestId(){return this._requestId;}
backendRequestId(){return this._backendRequestId;}
url(){return this._url;}
isBlobRequest(){return this._url.startsWith('blob:');}
setUrl(x){if(this._url===x){return;}
this._url=x;this._parsedURL=new Common.ParsedURL(x);delete this._queryString;delete this._parsedQueryParameters;delete this._name;delete this._path;}
get documentURL(){return this._documentURL;}
get parsedURL(){return this._parsedURL;}
get frameId(){return this._frameId;}
get loaderId(){return this._loaderId;}
setRemoteAddress(ip,port){this._remoteAddress=ip+':'+port;this.dispatchEventToListeners(Events.RemoteAddressChanged,this);}
remoteAddress(){return this._remoteAddress;}
setReferrerPolicy(referrerPolicy){this._referrerPolicy=referrerPolicy;}
referrerPolicy(){return this._referrerPolicy;}
securityState(){return this._securityState;}
setSecurityState(securityState){this._securityState=securityState;}
securityDetails(){return this._securityDetails;}
setSecurityDetails(securityDetails){this._securityDetails=securityDetails;}
get startTime(){return this._startTime||-1;}
setIssueTime(monotonicTime,wallTime){this._issueTime=monotonicTime;this._wallIssueTime=wallTime;this._startTime=monotonicTime;}
issueTime(){return this._issueTime;}
pseudoWallTime(monotonicTime){return this._wallIssueTime?this._wallIssueTime-this._issueTime+monotonicTime:monotonicTime;}
get responseReceivedTime(){return this._responseReceivedTime||-1;}
set responseReceivedTime(x){this._responseReceivedTime=x;}
get endTime(){return this._endTime||-1;}
set endTime(x){if(this.timing&&this.timing.requestTime){this._endTime=Math.max(x,this.responseReceivedTime);}else{this._endTime=x;if(this._responseReceivedTime>x){this._responseReceivedTime=x;}}
this.dispatchEventToListeners(Events.TimingChanged,this);}
get duration(){if(this._endTime===-1||this._startTime===-1){return-1;}
return this._endTime-this._startTime;}
get latency(){if(this._responseReceivedTime===-1||this._startTime===-1){return-1;}
return this._responseReceivedTime-this._startTime;}
get resourceSize(){return this._resourceSize||0;}
set resourceSize(x){this._resourceSize=x;}
get transferSize(){return this._transferSize||0;}
increaseTransferSize(x){this._transferSize=(this._transferSize||0)+x;}
setTransferSize(x){this._transferSize=x;}
get finished(){return this._finished;}
set finished(x){if(this._finished===x){return;}
this._finished=x;if(x){this.dispatchEventToListeners(Events.FinishedLoading,this);}}
get failed(){return this._failed;}
set failed(x){this._failed=x;}
get canceled(){return this._canceled;}
set canceled(x){this._canceled=x;}
blockedReason(){return this._blockedReason;}
setBlockedReason(reason){this._blockedReason=reason;}
wasBlocked(){return!!this._blockedReason;}
cached(){return(!!this._fromMemoryCache||!!this._fromDiskCache)&&!this._transferSize;}
cachedInMemory(){return!!this._fromMemoryCache&&!this._transferSize;}
fromPrefetchCache(){return!!this._fromPrefetchCache;}
setFromMemoryCache(){this._fromMemoryCache=true;delete this._timing;}
setFromDiskCache(){this._fromDiskCache=true;}
setFromPrefetchCache(){this._fromPrefetchCache=true;}
get fetchedViaServiceWorker(){return!!this._fetchedViaServiceWorker;}
set fetchedViaServiceWorker(x){this._fetchedViaServiceWorker=x;}
initiatedByServiceWorker(){const networkManager=SDK.NetworkManager.forRequest(this);if(!networkManager){return false;}
return networkManager.target().type()===SDK.Target.Type.ServiceWorker;}
get timing(){return this._timing;}
set timing(timingInfo){if(!timingInfo||this._fromMemoryCache){return;}
this._startTime=timingInfo.requestTime;const headersReceivedTime=timingInfo.requestTime+timingInfo.receiveHeadersEnd/1000.0;if((this._responseReceivedTime||-1)<0||this._responseReceivedTime>headersReceivedTime){this._responseReceivedTime=headersReceivedTime;}
if(this._startTime>this._responseReceivedTime){this._responseReceivedTime=this._startTime;}
this._timing=timingInfo;this.dispatchEventToListeners(Events.TimingChanged,this);}
get mimeType(){return this._mimeType;}
set mimeType(x){this._mimeType=x;}
get displayName(){return this._parsedURL.displayName;}
name(){if(this._name){return this._name;}
this._parseNameAndPathFromURL();return this._name;}
path(){if(this._path){return this._path;}
this._parseNameAndPathFromURL();return this._path;}
_parseNameAndPathFromURL(){if(this._parsedURL.isDataURL()){this._name=this._parsedURL.dataURLDisplayName();this._path='';}else if(this._parsedURL.isBlobURL()){this._name=this._parsedURL.url;this._path='';}else if(this._parsedURL.isAboutBlank()){this._name=this._parsedURL.url;this._path='';}else{this._path=this._parsedURL.host+this._parsedURL.folderPathComponents;const networkManager=SDK.NetworkManager.forRequest(this);const inspectedURL=networkManager?networkManager.target().inspectedURL().asParsedURL():null;this._path=this._path.trimURL(inspectedURL?inspectedURL.host:'');if(this._parsedURL.lastPathComponent||this._parsedURL.queryParams){this._name=this._parsedURL.lastPathComponent+(this._parsedURL.queryParams?'?'+this._parsedURL.queryParams:'');}else if(this._parsedURL.folderPathComponents){this._name=this._parsedURL.folderPathComponents.substring(this._parsedURL.folderPathComponents.lastIndexOf('/')+1)+'/';this._path=this._path.substring(0,this._path.lastIndexOf('/'));}else{this._name=this._parsedURL.host;this._path='';}}}
get folder(){let path=this._parsedURL.path;const indexOfQuery=path.indexOf('?');if(indexOfQuery!==-1){path=path.substring(0,indexOfQuery);}
const lastSlashIndex=path.lastIndexOf('/');return lastSlashIndex!==-1?path.substring(0,lastSlashIndex):'';}
get pathname(){return this._parsedURL.path;}
resourceType(){return this._resourceType;}
setResourceType(resourceType){this._resourceType=resourceType;}
get domain(){return this._parsedURL.host;}
get scheme(){return this._parsedURL.scheme;}
redirectSource(){return this._redirectSource;}
setRedirectSource(originatingRequest){this._redirectSource=originatingRequest;}
redirectDestination(){return this._redirectDestination;}
setRedirectDestination(redirectDestination){this._redirectDestination=redirectDestination;}
requestHeaders(){return this._requestHeaders;}
setRequestHeaders(headers){this._requestHeaders=headers;delete this._requestCookies;this.dispatchEventToListeners(Events.RequestHeadersChanged);}
requestHeadersText(){return this._requestHeadersText;}
setRequestHeadersText(text){this._requestHeadersText=text;this.dispatchEventToListeners(Events.RequestHeadersChanged);}
requestHeaderValue(headerName){if(this._requestHeaderValues[headerName]){return this._requestHeaderValues[headerName];}
this._requestHeaderValues[headerName]=this._computeHeaderValue(this.requestHeaders(),headerName);return this._requestHeaderValues[headerName];}
get requestCookies(){if(!this._requestCookies){this._requestCookies=SDK.CookieParser.parseCookie(this.requestHeaderValue('Cookie'));}
return this._requestCookies;}
requestFormData(){if(!this._requestFormDataPromise){this._requestFormDataPromise=SDK.NetworkManager.requestPostData(this);}
return this._requestFormDataPromise;}
setRequestFormData(hasData,data){this._requestFormDataPromise=(hasData&&data===null)?null:Promise.resolve(data);this._formParametersPromise=null;}
_filteredProtocolName(){const protocol=this.protocol.toLowerCase();if(protocol==='h2'){return'http/2.0';}
return protocol.replace(/^http\/2(\.0)?\+/,'http/2.0+');}
requestHttpVersion(){const headersText=this.requestHeadersText();if(!headersText){const version=this.requestHeaderValue('version')||this.requestHeaderValue(':version');if(version){return version;}
return this._filteredProtocolName();}
const firstLine=headersText.split(/\r\n/)[0];const match=firstLine.match(/(HTTP\/\d+\.\d+)$/);return match?match[1]:'HTTP/0.9';}
get responseHeaders(){return this._responseHeaders||[];}
set responseHeaders(x){this._responseHeaders=x;delete this._sortedResponseHeaders;delete this._serverTimings;delete this._responseCookies;this._responseHeaderValues={};this.dispatchEventToListeners(Events.ResponseHeadersChanged);}
get responseHeadersText(){return this._responseHeadersText;}
set responseHeadersText(x){this._responseHeadersText=x;this.dispatchEventToListeners(Events.ResponseHeadersChanged);}
get sortedResponseHeaders(){if(this._sortedResponseHeaders!==undefined){return this._sortedResponseHeaders;}
this._sortedResponseHeaders=this.responseHeaders.slice();this._sortedResponseHeaders.sort(function(a,b){return a.name.toLowerCase().compareTo(b.name.toLowerCase());});return this._sortedResponseHeaders;}
responseHeaderValue(headerName){if(headerName in this._responseHeaderValues){return this._responseHeaderValues[headerName];}
this._responseHeaderValues[headerName]=this._computeHeaderValue(this.responseHeaders,headerName);return this._responseHeaderValues[headerName];}
get responseCookies(){if(!this._responseCookies){this._responseCookies=SDK.CookieParser.parseSetCookie(this.responseHeaderValue('Set-Cookie'));}
return this._responseCookies;}
responseLastModified(){return this.responseHeaderValue('last-modified');}
get serverTimings(){if(typeof this._serverTimings==='undefined'){this._serverTimings=SDK.ServerTiming.parseHeaders(this.responseHeaders);}
return this._serverTimings;}
queryString(){if(this._queryString!==undefined){return this._queryString;}
let queryString=null;const url=this.url();const questionMarkPosition=url.indexOf('?');if(questionMarkPosition!==-1){queryString=url.substring(questionMarkPosition+1);const hashSignPosition=queryString.indexOf('#');if(hashSignPosition!==-1){queryString=queryString.substring(0,hashSignPosition);}}
this._queryString=queryString;return this._queryString;}
get queryParameters(){if(this._parsedQueryParameters){return this._parsedQueryParameters;}
const queryString=this.queryString();if(!queryString){return null;}
this._parsedQueryParameters=this._parseParameters(queryString);return this._parsedQueryParameters;}
async _parseFormParameters(){const requestContentType=this.requestContentType();if(!requestContentType){return null;}
if(requestContentType.match(/^application\/x-www-form-urlencoded\s*(;.*)?$/i)){const formData=await this.requestFormData();if(!formData){return null;}
return this._parseParameters(formData);}
const multipartDetails=requestContentType.match(/^multipart\/form-data\s*;\s*boundary\s*=\s*(\S+)\s*$/);if(!multipartDetails){return null;}
const boundary=multipartDetails[1];if(!boundary){return null;}
const formData=await this.requestFormData();if(!formData){return null;}
return this._parseMultipartFormDataParameters(formData,boundary);}
formParameters(){if(!this._formParametersPromise){this._formParametersPromise=this._parseFormParameters();}
return this._formParametersPromise;}
responseHttpVersion(){const headersText=this._responseHeadersText;if(!headersText){const version=this.responseHeaderValue('version')||this.responseHeaderValue(':version');if(version){return version;}
return this._filteredProtocolName();}
const firstLine=headersText.split(/\r\n/)[0];const match=firstLine.match(/^(HTTP\/\d+\.\d+)/);return match?match[1]:'HTTP/0.9';}
_parseParameters(queryString){function parseNameValue(pair){const position=pair.indexOf('=');if(position===-1){return{name:pair,value:''};}else{return{name:pair.substring(0,position),value:pair.substring(position+1)};}}
return queryString.split('&').map(parseNameValue);}
_parseMultipartFormDataParameters(data,boundary){const sanitizedBoundary=boundary.escapeForRegExp();const keyValuePattern=new RegExp('^\\r\\ncontent-disposition\\s*:\\s*form-data\\s*;\\s*name="([^"]*)"(?:\\s*;\\s*filename="([^"]*)")?'+'(?:\\r\\ncontent-type\\s*:\\s*([^\\r\\n]*))?'+'\\r\\n\\r\\n'+'(.*)'+'\\r\\n$','is');const fields=data.split(new RegExp(`--${sanitizedBoundary}(?:--\s*$)?`,'g'));return fields.reduce(parseMultipartField,[]);function parseMultipartField(result,field){const[match,name,filename,contentType,value]=field.match(keyValuePattern)||[];if(!match){return result;}
const processedValue=(filename||contentType)?ls`(binary)`:value;result.push({name,value:processedValue});return result;}}
_computeHeaderValue(headers,headerName){headerName=headerName.toLowerCase();const values=[];for(let i=0;i<headers.length;++i){if(headers[i].name.toLowerCase()===headerName){values.push(headers[i].value);}}
if(!values.length){return undefined;}
if(headerName==='set-cookie'){return values.join('\n');}
return values.join(', ');}
contentData(){if(this._contentData){return this._contentData;}
if(this._contentDataProvider){this._contentData=this._contentDataProvider();}else{this._contentData=SDK.NetworkManager.requestContentData(this);}
return this._contentData;}
setContentDataProvider(dataProvider){console.assert(!this._contentData,'contentData can only be set once.');this._contentDataProvider=dataProvider;}
contentURL(){return this._url;}
contentType(){return this._resourceType;}
async contentEncoded(){return(await this.contentData()).encoded;}
async requestContent(){const{content,error,encoded}=await this.contentData();return({content,error,isEncoded:encoded,});}
async searchInContent(query,caseSensitive,isRegex){if(!this._contentDataProvider){return SDK.NetworkManager.searchInRequest(this,query,caseSensitive,isRegex);}
const contentData=await this.contentData();let content=contentData.content;if(!content){return[];}
if(contentData.encoded){content=window.atob(content);}
return Common.ContentProvider.performSearchInContent(content,query,caseSensitive,isRegex);}
isHttpFamily(){return!!this.url().match(/^https?:/i);}
requestContentType(){return this.requestHeaderValue('Content-Type');}
hasErrorStatusCode(){return this.statusCode>=400;}
setInitialPriority(priority){this._initialPriority=priority;}
initialPriority(){return this._initialPriority;}
setPriority(priority){this._currentPriority=priority;}
priority(){return this._currentPriority||this._initialPriority||null;}
setSignedExchangeInfo(info){this._signedExchangeInfo=info;}
signedExchangeInfo(){return this._signedExchangeInfo;}
async populateImageSource(image){const{content,encoded}=await this.contentData();let imageSrc=Common.ContentProvider.contentAsDataURL(content,this._mimeType,encoded);if(imageSrc===null&&!this._failed){const cacheControl=this.responseHeaderValue('cache-control')||'';if(!cacheControl.includes('no-cache')){imageSrc=this._url;}}
if(imageSrc!==null){image.src=imageSrc;}}
initiator(){return this._initiator;}
frames(){return this._frames;}
addProtocolFrameError(errorMessage,time){this.addFrame({type:WebSocketFrameType.Error,text:errorMessage,time:this.pseudoWallTime(time),opCode:-1,mask:false});}
addProtocolFrame(response,time,sent){const type=sent?WebSocketFrameType.Send:WebSocketFrameType.Receive;this.addFrame({type:type,text:response.payloadData,time:this.pseudoWallTime(time),opCode:response.opcode,mask:response.mask});}
addFrame(frame){this._frames.push(frame);this.dispatchEventToListeners(Events.WebsocketFrameAdded,frame);}
eventSourceMessages(){return this._eventSourceMessages;}
addEventSourceMessage(time,eventName,eventId,data){const message={time:this.pseudoWallTime(time),eventName:eventName,eventId:eventId,data:data};this._eventSourceMessages.push(message);this.dispatchEventToListeners(Events.EventSourceMessageAdded,message);}
markAsRedirect(redirectCount){this._requestId=`${this._backendRequestId}:redirected.${redirectCount}`;}
setRequestIdForTest(requestId){this._backendRequestId=requestId;this._requestId=requestId;}
charset(){const contentTypeHeader=this.responseHeaderValue('content-type');if(!contentTypeHeader){return null;}
const responseCharsets=contentTypeHeader.replace(/ /g,'').split(';').filter(parameter=>parameter.toLowerCase().startsWith('charset=')).map(parameter=>parameter.slice('charset='.length));if(responseCharsets.length){return responseCharsets[0];}
return null;}
addExtraRequestInfo(extraRequestInfo){this._blockedRequestCookies=extraRequestInfo.blockedRequestCookies;this.setRequestHeaders(extraRequestInfo.requestHeaders);this._hasExtraRequestInfo=true;this.setRequestHeadersText('');}
hasExtraRequestInfo(){return this._hasExtraRequestInfo;}
blockedRequestCookies(){return this._blockedRequestCookies;}
addExtraResponseInfo(extraResponseInfo){this._blockedResponseCookies=extraResponseInfo.blockedResponseCookies;this.responseHeaders=extraResponseInfo.responseHeaders;if(extraResponseInfo.responseHeadersText){this.responseHeadersText=extraResponseInfo.responseHeadersText;if(!this.requestHeadersText()){let requestHeadersText=`${this.requestMethod} ${this.parsedURL.path}`;if(this.parsedURL.queryParams){requestHeadersText+=`?${this.parsedURL.queryParams}`;}
requestHeadersText+=` HTTP/1.1\r\n`;for(const{name,value}of this.requestHeaders()){requestHeadersText+=`${name}: ${value}\r\n`;}
this.setRequestHeadersText(requestHeadersText);}}
this._hasExtraResponseInfo=true;}
hasExtraResponseInfo(){return this._hasExtraResponseInfo;}
blockedResponseCookies(){return this._blockedResponseCookies;}}
export const Events={FinishedLoading:Symbol('FinishedLoading'),TimingChanged:Symbol('TimingChanged'),RemoteAddressChanged:Symbol('RemoteAddressChanged'),RequestHeadersChanged:Symbol('RequestHeadersChanged'),ResponseHeadersChanged:Symbol('ResponseHeadersChanged'),WebsocketFrameAdded:Symbol('WebsocketFrameAdded'),EventSourceMessageAdded:Symbol('EventSourceMessageAdded')};export const InitiatorType={Other:'other',Parser:'parser',Redirect:'redirect',Script:'script',Preload:'preload',SignedExchange:'signedExchange'};export const WebSocketFrameType={Send:'send',Receive:'receive',Error:'error'};export const cookieBlockedReasonToUiString=function(blockedReason){switch(blockedReason){case Protocol.Network.CookieBlockedReason.SecureOnly:return ls`This cookie had the "Secure" attribute and the connection was not secure.`;case Protocol.Network.CookieBlockedReason.NotOnPath:return ls`This cookie's path was not within the request url's path.`;case Protocol.Network.CookieBlockedReason.DomainMismatch:return ls`This cookie's domain is not configured to match the request url's domain, even though they share a common TLD+1 (TLD+1 of foo.bar.example.com is example.com).`;case Protocol.Network.CookieBlockedReason.SameSiteStrict:return ls`This cookie had the "SameSite=Strict" attribute and the request was made on on a different site. This includes navigation requests initiated by other sites.`;case Protocol.Network.CookieBlockedReason.SameSiteLax:return ls`This cookie had the "SameSite=Lax" attribute and the request was made on a different site. This does not include navigation requests initiated by other sites.`;case Protocol.Network.CookieBlockedReason.SameSiteUnspecifiedTreatedAsLax:return ls`This cookie didn't specify a SameSite attribute when it was stored and was defaulted to "SameSite=Lax" and broke the same rules specified in the SameSiteLax value. The cookie had to have been set with "SameSite=None" to enable third-party usage.`;case Protocol.Network.CookieBlockedReason.SameSiteNoneInsecure:return ls`This cookie had the "SameSite=None" attribute but was not marked "Secure". Cookies without SameSite restrictions must be marked "Secure" and sent over a secure connection.`;case Protocol.Network.CookieBlockedReason.UserPreferences:return ls`This cookie was not sent due to user preferences.`;case Protocol.Network.CookieBlockedReason.UnknownError:return ls`An unknown error was encountered when trying to send this cookie.`;}
return'';};export const setCookieBlockedReasonToUiString=function(blockedReason){switch(blockedReason){case Protocol.Network.SetCookieBlockedReason.SecureOnly:return ls`This set-cookie had the "Secure" attribute but was not received over a secure connection.`;case Protocol.Network.SetCookieBlockedReason.SameSiteStrict:return ls`This set-cookie had the "SameSite=Strict" attribute but came from a cross-origin response. This includes navigation requests intitiated by other origins.`;case Protocol.Network.SetCookieBlockedReason.SameSiteLax:return ls`This set-cookie had the "SameSite=Lax" attribute but came from a cross-origin response.`;case Protocol.Network.SetCookieBlockedReason.SameSiteUnspecifiedTreatedAsLax:return ls`This set-cookie didn't specify a "SameSite" attribute and was defaulted to "SameSite=Lax" and broke the same rules specified in the SameSiteLax value.`;case Protocol.Network.SetCookieBlockedReason.SameSiteNoneInsecure:return ls`This set-cookie had the "SameSite=None" attribute but did not have the "Secure" attribute, which is required in order to use "SameSite=None".`;case Protocol.Network.SetCookieBlockedReason.UserPreferences:return ls`This set-cookie was not stored due to user preferences.`;case Protocol.Network.SetCookieBlockedReason.SyntaxError:return ls`This set-cookie had invalid syntax.`;case Protocol.Network.SetCookieBlockedReason.SchemeNotSupported:return ls`The scheme of this connection is not allowed to store cookies.`;case Protocol.Network.SetCookieBlockedReason.OverwriteSecure:return ls`This set-cookie was not sent over a secure connection and would have overwritten a cookie with the Secure attribute.`;case Protocol.Network.SetCookieBlockedReason.InvalidDomain:return ls`This set-cookie's Domain attribute was invalid with regards to the current host url.`;case Protocol.Network.SetCookieBlockedReason.InvalidPrefix:return ls`This set-cookie used the "__Secure-" or "__Host-" prefix in its name and broke the additional rules applied to cookies with these prefixes as defined in https://tools.ietf.org/html/draft-west-cookie-prefixes-05.`;case Protocol.Network.SetCookieBlockedReason.UnknownError:return ls`An unknown error was encountered when trying to store this cookie.`;}
return'';};export const cookieBlockedReasonToAttribute=function(blockedReason){switch(blockedReason){case Protocol.Network.CookieBlockedReason.SecureOnly:return SDK.Cookie.Attributes.Secure;case Protocol.Network.CookieBlockedReason.NotOnPath:return SDK.Cookie.Attributes.Path;case Protocol.Network.CookieBlockedReason.DomainMismatch:return SDK.Cookie.Attributes.Domain;case Protocol.Network.CookieBlockedReason.SameSiteStrict:case Protocol.Network.CookieBlockedReason.SameSiteLax:case Protocol.Network.CookieBlockedReason.SameSiteUnspecifiedTreatedAsLax:case Protocol.Network.CookieBlockedReason.SameSiteNoneInsecure:return SDK.Cookie.Attributes.SameSite;case Protocol.Network.CookieBlockedReason.UserPreferences:case Protocol.Network.CookieBlockedReason.UnknownError:return null;}
return null;};export const setCookieBlockedReasonToAttribute=function(blockedReason){switch(blockedReason){case Protocol.Network.SetCookieBlockedReason.SecureOnly:case Protocol.Network.SetCookieBlockedReason.OverwriteSecure:return SDK.Cookie.Attributes.Secure;case Protocol.Network.SetCookieBlockedReason.SameSiteStrict:case Protocol.Network.SetCookieBlockedReason.SameSiteLax:case Protocol.Network.SetCookieBlockedReason.SameSiteUnspecifiedTreatedAsLax:case Protocol.Network.SetCookieBlockedReason.SameSiteNoneInsecure:return SDK.Cookie.Attributes.SameSite;case Protocol.Network.SetCookieBlockedReason.InvalidDomain:return SDK.Cookie.Attributes.Domain;case Protocol.Network.SetCookieBlockedReason.InvalidPrefix:return SDK.Cookie.Attributes.Name;case Protocol.Network.SetCookieBlockedReason.UserPreferences:case Protocol.Network.SetCookieBlockedReason.SyntaxError:case Protocol.Network.SetCookieBlockedReason.SchemeNotSupported:case Protocol.Network.SetCookieBlockedReason.UnknownError:return null;}
return null;};self.SDK=self.SDK||{};SDK=SDK||{};SDK.NetworkRequest=NetworkRequest;SDK.NetworkRequest.Events=Events;SDK.NetworkRequest.InitiatorType=InitiatorType;SDK.NetworkRequest.WebSocketFrameType=WebSocketFrameType;SDK.NetworkRequest.cookieBlockedReasonToUiString=cookieBlockedReasonToUiString;SDK.NetworkRequest.setCookieBlockedReasonToUiString=setCookieBlockedReasonToUiString;SDK.NetworkRequest.cookieBlockedReasonToAttribute=cookieBlockedReasonToAttribute;SDK.NetworkRequest.setCookieBlockedReasonToAttribute=setCookieBlockedReasonToAttribute;SDK.NetworkRequest.NameValue;SDK.NetworkRequest.WebSocketFrame;SDK.NetworkRequest.EventSourceMessage;SDK.NetworkRequest.ContentData;SDK.NetworkRequest.BlockedCookieWithReason;SDK.NetworkRequest.ExtraRequestInfo;SDK.NetworkRequest.BlockedSetCookieWithReason;SDK.NetworkRequest.ExtraResponseInfo;export default class NetworkManager extends SDK.SDKModel{constructor(target){super(target);this._dispatcher=new NetworkDispatcher(this);this._networkAgent=target.networkAgent();target.registerNetworkDispatcher(this._dispatcher);if(Common.moduleSetting('cacheDisabled').get()){this._networkAgent.setCacheDisabled(true);}
this._networkAgent.enable(undefined,undefined,MAX_EAGER_POST_REQUEST_BODY_LENGTH);this._bypassServiceWorkerSetting=Common.settings.createSetting('bypassServiceWorker',false);if(this._bypassServiceWorkerSetting.get()){this._bypassServiceWorkerChanged();}
this._bypassServiceWorkerSetting.addChangeListener(this._bypassServiceWorkerChanged,this);Common.moduleSetting('cacheDisabled').addChangeListener(this._cacheDisabledSettingChanged,this);}
static forRequest(request){return request[_networkManagerForRequestSymbol];}
static canReplayRequest(request){return!!request[_networkManagerForRequestSymbol]&&request.resourceType()===Common.resourceTypes.XHR;}
static replayRequest(request){const manager=request[_networkManagerForRequestSymbol];if(!manager){return;}
manager._networkAgent.replayXHR(request.requestId());}
static async searchInRequest(request,query,caseSensitive,isRegex){const manager=NetworkManager.forRequest(request);if(!manager){return[];}
const response=await manager._networkAgent.invoke_searchInResponseBody({requestId:request.requestId(),query:query,caseSensitive:caseSensitive,isRegex:isRegex});return response.result||[];}
static async requestContentData(request){if(request.resourceType()===Common.resourceTypes.WebSocket){return{error:'Content for WebSockets is currently not supported',content:null,encoded:false};}
if(!request.finished){await request.once(SDK.NetworkRequest.Events.FinishedLoading);}
const manager=NetworkManager.forRequest(request);if(!manager){return{error:'No network manager for request',content:null,encoded:false};}
const response=await manager._networkAgent.invoke_getResponseBody({requestId:request.requestId()});const error=response[Protocol.Error]||null;return{error:error,content:error?null:response.body,encoded:response.base64Encoded};}
static requestPostData(request){const manager=NetworkManager.forRequest(request);if(manager){return manager._networkAgent.getRequestPostData(request.backendRequestId());}
console.error('No network manager for request');return(Promise.resolve(null));}
static _connectionType(conditions){if(!conditions.download&&!conditions.upload){return Protocol.Network.ConnectionType.None;}
let types=NetworkManager._connectionTypes;if(!types){NetworkManager._connectionTypes=[];types=NetworkManager._connectionTypes;types.push(['2g',Protocol.Network.ConnectionType.Cellular2g]);types.push(['3g',Protocol.Network.ConnectionType.Cellular3g]);types.push(['4g',Protocol.Network.ConnectionType.Cellular4g]);types.push(['bluetooth',Protocol.Network.ConnectionType.Bluetooth]);types.push(['wifi',Protocol.Network.ConnectionType.Wifi]);types.push(['wimax',Protocol.Network.ConnectionType.Wimax]);}
for(const type of types){if(conditions.title.toLowerCase().indexOf(type[0])!==-1){return type[1];}}
return Protocol.Network.ConnectionType.Other;}
static lowercaseHeaders(headers){const newHeaders={};for(const headerName in headers){newHeaders[headerName.toLowerCase()]=headers[headerName];}
return newHeaders;}
inflightRequestForURL(url){return this._dispatcher._inflightRequestsByURL[url];}
_cacheDisabledSettingChanged(event){const enabled=(event.data);this._networkAgent.setCacheDisabled(enabled);}
dispose(){Common.moduleSetting('cacheDisabled').removeChangeListener(this._cacheDisabledSettingChanged,this);}
_bypassServiceWorkerChanged(){this._networkAgent.setBypassServiceWorker(this._bypassServiceWorkerSetting.get());}}
export const Events={RequestStarted:Symbol('RequestStarted'),RequestUpdated:Symbol('RequestUpdated'),RequestFinished:Symbol('RequestFinished'),RequestUpdateDropped:Symbol('RequestUpdateDropped'),ResponseReceived:Symbol('ResponseReceived'),MessageGenerated:Symbol('MessageGenerated'),RequestRedirected:Symbol('RequestRedirected'),LoadingFinished:Symbol('LoadingFinished'),};const _MIMETypes={'text/html':{'document':true},'text/xml':{'document':true},'text/plain':{'document':true},'application/xhtml+xml':{'document':true},'image/svg+xml':{'document':true},'text/css':{'stylesheet':true},'text/xsl':{'stylesheet':true},'text/vtt':{'texttrack':true},'application/pdf':{'document':true},};export const NoThrottlingConditions={title:ls`Online`,download:-1,upload:-1,latency:0};export const OfflineConditions={title:Common.UIString('Offline'),download:0,upload:0,latency:0,};export const Slow3GConditions={title:Common.UIString('Slow 3G'),download:500*1024/8*.8,upload:500*1024/8*.8,latency:400*5,};export const Fast3GConditions={title:Common.UIString('Fast 3G'),download:1.6*1024*1024/8*.9,upload:750*1024/8*.9,latency:150*3.75,};const _networkManagerForRequestSymbol=Symbol('NetworkManager');const MAX_EAGER_POST_REQUEST_BODY_LENGTH=64*1024;export class NetworkDispatcher{constructor(manager){this._manager=manager;this._inflightRequestsById={};this._inflightRequestsByURL={};this._requestIdToRedirectExtraInfoBuilder=new Map();}
_headersMapToHeadersArray(headersMap){const result=[];for(const name in headersMap){const values=headersMap[name].split('\n');for(let i=0;i<values.length;++i){result.push({name:name,value:values[i]});}}
return result;}
_updateNetworkRequestWithRequest(networkRequest,request){networkRequest.requestMethod=request.method;networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers));networkRequest.setRequestFormData(!!request.hasPostData,request.postData||null);networkRequest.setInitialPriority(request.initialPriority);networkRequest.mixedContentType=request.mixedContentType||Protocol.Security.MixedContentType.None;networkRequest.setReferrerPolicy(request.referrerPolicy);}
_updateNetworkRequestWithResponse(networkRequest,response){if(response.url&&networkRequest.url()!==response.url){networkRequest.setUrl(response.url);}
networkRequest.mimeType=response.mimeType;networkRequest.statusCode=response.status;networkRequest.statusText=response.statusText;if(!networkRequest.hasExtraResponseInfo()){networkRequest.responseHeaders=this._headersMapToHeadersArray(response.headers);}
if(response.encodedDataLength>=0){networkRequest.setTransferSize(response.encodedDataLength);}
if(response.requestHeaders&&!networkRequest.hasExtraRequestInfo()){networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders));networkRequest.setRequestHeadersText(response.requestHeadersText||'');}
networkRequest.connectionReused=response.connectionReused;networkRequest.connectionId=String(response.connectionId);if(response.remoteIPAddress){networkRequest.setRemoteAddress(response.remoteIPAddress,response.remotePort||-1);}
if(response.fromServiceWorker){networkRequest.fetchedViaServiceWorker=true;}
if(response.fromDiskCache){networkRequest.setFromDiskCache();}
if(response.fromPrefetchCache){networkRequest.setFromPrefetchCache();}
networkRequest.timing=response.timing;networkRequest.protocol=response.protocol||'';networkRequest.setSecurityState(response.securityState);if(!this._mimeTypeIsConsistentWithType(networkRequest)){const message=Common.UIString('Resource interpreted as %s but transferred with MIME type %s: "%s".',networkRequest.resourceType().title(),networkRequest.mimeType,networkRequest.url());this._manager.dispatchEventToListeners(Events.MessageGenerated,{message:message,requestId:networkRequest.requestId(),warning:true});}
if(response.securityDetails){networkRequest.setSecurityDetails(response.securityDetails);}}
_mimeTypeIsConsistentWithType(networkRequest){if(networkRequest.hasErrorStatusCode()||networkRequest.statusCode===304||networkRequest.statusCode===204){return true;}
const resourceType=networkRequest.resourceType();if(resourceType!==Common.resourceTypes.Stylesheet&&resourceType!==Common.resourceTypes.Document&&resourceType!==Common.resourceTypes.TextTrack){return true;}
if(!networkRequest.mimeType){return true;}
if(networkRequest.mimeType in _MIMETypes){return resourceType.name()in _MIMETypes[networkRequest.mimeType];}
return false;}
resourceChangedPriority(requestId,newPriority,timestamp){const networkRequest=this._inflightRequestsById[requestId];if(networkRequest){networkRequest.setPriority(newPriority);}}
signedExchangeReceived(requestId,info){let networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){networkRequest=this._inflightRequestsByURL[info.outerResponse.url];if(!networkRequest){return;}}
networkRequest.setSignedExchangeInfo(info);networkRequest.setResourceType(Common.resourceTypes.SignedExchange);this._updateNetworkRequestWithResponse(networkRequest,info.outerResponse);this._updateNetworkRequest(networkRequest);this._manager.dispatchEventToListeners(Events.ResponseReceived,networkRequest);}
requestWillBeSent(requestId,loaderId,documentURL,request,time,wallTime,initiator,redirectResponse,resourceType,frameId){let networkRequest=this._inflightRequestsById[requestId];if(networkRequest){if(!redirectResponse){return;}
if(!networkRequest.signedExchangeInfo()){this.responseReceived(requestId,loaderId,time,Protocol.Network.ResourceType.Other,redirectResponse,frameId);}
networkRequest=this._appendRedirect(requestId,time,request.url);this._manager.dispatchEventToListeners(Events.RequestRedirected,networkRequest);}else{networkRequest=this._createNetworkRequest(requestId,frameId||'',loaderId,request.url,documentURL,initiator);}
networkRequest.hasNetworkData=true;this._updateNetworkRequestWithRequest(networkRequest,request);networkRequest.setIssueTime(time,wallTime);networkRequest.setResourceType(resourceType?Common.resourceTypes[resourceType]:Protocol.Network.ResourceType.Other);this._getExtraInfoBuilder(requestId).addRequest(networkRequest);this._startNetworkRequest(networkRequest);}
requestServedFromCache(requestId){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
networkRequest.setFromMemoryCache();}
responseReceived(requestId,loaderId,time,resourceType,response,frameId){const networkRequest=this._inflightRequestsById[requestId];const lowercaseHeaders=NetworkManager.lowercaseHeaders(response.headers);if(!networkRequest){const eventData={};eventData.url=response.url;eventData.frameId=frameId||'';eventData.loaderId=loaderId;eventData.resourceType=resourceType;eventData.mimeType=response.mimeType;const lastModifiedHeader=lowercaseHeaders['last-modified'];eventData.lastModified=lastModifiedHeader?new Date(lastModifiedHeader):null;this._manager.dispatchEventToListeners(Events.RequestUpdateDropped,eventData);return;}
networkRequest.responseReceivedTime=time;networkRequest.setResourceType(Common.resourceTypes[resourceType]);if('set-cookie'in lowercaseHeaders&&lowercaseHeaders['set-cookie'].length>4096){const values=lowercaseHeaders['set-cookie'].split('\n');for(let i=0;i<values.length;++i){if(values[i].length<=4096){continue;}
const message=Common.UIString('Set-Cookie header is ignored in response from url: %s. Cookie length should be less than or equal to 4096 characters.',response.url);this._manager.dispatchEventToListeners(Events.MessageGenerated,{message:message,requestId:requestId,warning:true});}}
this._updateNetworkRequestWithResponse(networkRequest,response);this._updateNetworkRequest(networkRequest);this._manager.dispatchEventToListeners(Events.ResponseReceived,networkRequest);}
dataReceived(requestId,time,dataLength,encodedDataLength){let networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){networkRequest=this._maybeAdoptMainResourceRequest(requestId);}
if(!networkRequest){return;}
networkRequest.resourceSize+=dataLength;if(encodedDataLength!==-1){networkRequest.increaseTransferSize(encodedDataLength);}
networkRequest.endTime=time;this._updateNetworkRequest(networkRequest);}
loadingFinished(requestId,finishTime,encodedDataLength,shouldReportCorbBlocking){let networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){networkRequest=this._maybeAdoptMainResourceRequest(requestId);}
if(!networkRequest){return;}
this._getExtraInfoBuilder(requestId).finished();this._finishNetworkRequest(networkRequest,finishTime,encodedDataLength,shouldReportCorbBlocking);this._manager.dispatchEventToListeners(Events.LoadingFinished,networkRequest);}
loadingFailed(requestId,time,resourceType,localizedDescription,canceled,blockedReason){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
networkRequest.failed=true;networkRequest.setResourceType(Common.resourceTypes[resourceType]);networkRequest.canceled=!!canceled;if(blockedReason){networkRequest.setBlockedReason(blockedReason);if(blockedReason===Protocol.Network.BlockedReason.Inspector){const message=Common.UIString('Request was blocked by DevTools: "%s".',networkRequest.url());this._manager.dispatchEventToListeners(Events.MessageGenerated,{message:message,requestId:requestId,warning:true});}}
networkRequest.localizedFailDescription=localizedDescription;this._getExtraInfoBuilder(requestId).finished();this._finishNetworkRequest(networkRequest,time,-1);}
webSocketCreated(requestId,requestURL,initiator){const networkRequest=new SDK.NetworkRequest(requestId,requestURL,'','','',initiator||null);networkRequest[_networkManagerForRequestSymbol]=this._manager;networkRequest.setResourceType(Common.resourceTypes.WebSocket);this._startNetworkRequest(networkRequest);}
webSocketWillSendHandshakeRequest(requestId,time,wallTime,request){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
networkRequest.requestMethod='GET';networkRequest.setRequestHeaders(this._headersMapToHeadersArray(request.headers));networkRequest.setIssueTime(time,wallTime);this._updateNetworkRequest(networkRequest);}
webSocketHandshakeResponseReceived(requestId,time,response){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
networkRequest.statusCode=response.status;networkRequest.statusText=response.statusText;networkRequest.responseHeaders=this._headersMapToHeadersArray(response.headers);networkRequest.responseHeadersText=response.headersText||'';if(response.requestHeaders){networkRequest.setRequestHeaders(this._headersMapToHeadersArray(response.requestHeaders));}
if(response.requestHeadersText){networkRequest.setRequestHeadersText(response.requestHeadersText);}
networkRequest.responseReceivedTime=time;networkRequest.protocol='websocket';this._updateNetworkRequest(networkRequest);}
webSocketFrameReceived(requestId,time,response){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
networkRequest.addProtocolFrame(response,time,false);networkRequest.responseReceivedTime=time;this._updateNetworkRequest(networkRequest);}
webSocketFrameSent(requestId,time,response){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
networkRequest.addProtocolFrame(response,time,true);networkRequest.responseReceivedTime=time;this._updateNetworkRequest(networkRequest);}
webSocketFrameError(requestId,time,errorMessage){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
networkRequest.addProtocolFrameError(errorMessage,time);networkRequest.responseReceivedTime=time;this._updateNetworkRequest(networkRequest);}
webSocketClosed(requestId,time){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
this._finishNetworkRequest(networkRequest,time,-1);}
eventSourceMessageReceived(requestId,time,eventName,eventId,data){const networkRequest=this._inflightRequestsById[requestId];if(!networkRequest){return;}
networkRequest.addEventSourceMessage(time,eventName,eventId,data);}
requestIntercepted(interceptionId,request,frameId,resourceType,isNavigationRequest,isDownload,redirectUrl,authChallenge,responseErrorReason,responseStatusCode,responseHeaders,requestId){SDK.multitargetNetworkManager._requestIntercepted(new InterceptedRequest(this._manager.target().networkAgent(),interceptionId,request,frameId,resourceType,isNavigationRequest,isDownload,redirectUrl,authChallenge,responseErrorReason,responseStatusCode,responseHeaders,requestId));}
requestWillBeSentExtraInfo(requestId,blockedCookies,headers){const extraRequestInfo={blockedRequestCookies:blockedCookies.map(blockedCookie=>{return{blockedReasons:blockedCookie.blockedReasons,cookie:SDK.Cookie.fromProtocolCookie(blockedCookie.cookie)};}),requestHeaders:this._headersMapToHeadersArray(headers)};this._getExtraInfoBuilder(requestId).addRequestExtraInfo(extraRequestInfo);}
responseReceivedExtraInfo(requestId,blockedCookies,headers,headersText){const extraResponseInfo={blockedResponseCookies:blockedCookies.map(blockedCookie=>{return{blockedReasons:blockedCookie.blockedReasons,cookieLine:blockedCookie.cookieLine,cookie:blockedCookie.cookie?SDK.Cookie.fromProtocolCookie(blockedCookie.cookie):null};}),responseHeaders:this._headersMapToHeadersArray(headers),responseHeadersText:headersText};this._getExtraInfoBuilder(requestId).addResponseExtraInfo(extraResponseInfo);}
_getExtraInfoBuilder(requestId){if(!this._requestIdToRedirectExtraInfoBuilder.get(requestId)){const deleteCallback=()=>{this._requestIdToRedirectExtraInfoBuilder.delete(requestId);};this._requestIdToRedirectExtraInfoBuilder.set(requestId,new RedirectExtraInfoBuilder(deleteCallback));}
return this._requestIdToRedirectExtraInfoBuilder.get(requestId);}
_appendRedirect(requestId,time,redirectURL){const originalNetworkRequest=this._inflightRequestsById[requestId];let redirectCount=0;for(let redirect=originalNetworkRequest.redirectSource();redirect;redirect=redirect.redirectSource()){redirectCount++;}
originalNetworkRequest.markAsRedirect(redirectCount);this._finishNetworkRequest(originalNetworkRequest,time,-1);const newNetworkRequest=this._createNetworkRequest(requestId,originalNetworkRequest.frameId,originalNetworkRequest.loaderId,redirectURL,originalNetworkRequest.documentURL,originalNetworkRequest.initiator());newNetworkRequest.setRedirectSource(originalNetworkRequest);originalNetworkRequest.setRedirectDestination(newNetworkRequest);return newNetworkRequest;}
_maybeAdoptMainResourceRequest(requestId){const request=SDK.multitargetNetworkManager._inflightMainResourceRequests.get(requestId);if(!request){return null;}
const oldDispatcher=NetworkManager.forRequest(request)._dispatcher;delete oldDispatcher._inflightRequestsById[requestId];delete oldDispatcher._inflightRequestsByURL[request.url()];this._inflightRequestsById[requestId]=request;this._inflightRequestsByURL[request.url()]=request;request[_networkManagerForRequestSymbol]=this._manager;return request;}
_startNetworkRequest(networkRequest){this._inflightRequestsById[networkRequest.requestId()]=networkRequest;this._inflightRequestsByURL[networkRequest.url()]=networkRequest;if(networkRequest.loaderId===networkRequest.requestId()){SDK.multitargetNetworkManager._inflightMainResourceRequests.set(networkRequest.requestId(),networkRequest);}
this._manager.dispatchEventToListeners(Events.RequestStarted,networkRequest);}
_updateNetworkRequest(networkRequest){this._manager.dispatchEventToListeners(Events.RequestUpdated,networkRequest);}
_finishNetworkRequest(networkRequest,finishTime,encodedDataLength,shouldReportCorbBlocking){networkRequest.endTime=finishTime;networkRequest.finished=true;if(encodedDataLength>=0){const redirectSource=networkRequest.redirectSource();if(redirectSource&&redirectSource.signedExchangeInfo()){networkRequest.setTransferSize(0);redirectSource.setTransferSize(encodedDataLength);this._updateNetworkRequest(redirectSource);}else{networkRequest.setTransferSize(encodedDataLength);}}
this._manager.dispatchEventToListeners(Events.RequestFinished,networkRequest);delete this._inflightRequestsById[networkRequest.requestId()];delete this._inflightRequestsByURL[networkRequest.url()];SDK.multitargetNetworkManager._inflightMainResourceRequests.delete(networkRequest.requestId());if(shouldReportCorbBlocking){const message=Common.UIString(`Cross-Origin Read Blocking (CORB) blocked cross-origin response %s with MIME type %s. See https://www.chromestatus.com/feature/5629709824032768 for more details.`,networkRequest.url(),networkRequest.mimeType);this._manager.dispatchEventToListeners(Events.MessageGenerated,{message:message,requestId:networkRequest.requestId(),warning:true});}
if(Common.moduleSetting('monitoringXHREnabled').get()&&networkRequest.resourceType().category()===Common.resourceCategories.XHR){let message;const failedToLoad=networkRequest.failed||networkRequest.hasErrorStatusCode();if(failedToLoad){message=Common.UIString('%s failed loading: %s "%s".',networkRequest.resourceType().title(),networkRequest.requestMethod,networkRequest.url());}else{message=Common.UIString('%s finished loading: %s "%s".',networkRequest.resourceType().title(),networkRequest.requestMethod,networkRequest.url());}
this._manager.dispatchEventToListeners(Events.MessageGenerated,{message:message,requestId:networkRequest.requestId(),warning:false});}}
_createNetworkRequest(requestId,frameId,loaderId,url,documentURL,initiator){const request=new SDK.NetworkRequest(requestId,url,documentURL,frameId,loaderId,initiator);request[_networkManagerForRequestSymbol]=this._manager;return request;}}
export class MultitargetNetworkManager extends Common.Object{constructor(){super();this._userAgentOverride='';this._agents=new Set();this._inflightMainResourceRequests=new Map();this._networkConditions=NoThrottlingConditions;this._updatingInterceptionPatternsPromise=null;this._blockingEnabledSetting=Common.moduleSetting('requestBlockingEnabled');this._blockedPatternsSetting=Common.settings.createSetting('networkBlockedPatterns',[]);this._effectiveBlockedURLs=[];this._updateBlockedPatterns();this._urlsForRequestInterceptor=new Platform.Multimap();SDK.targetManager.observeModels(NetworkManager,this);}
static patchUserAgentWithChromeVersion(uaString){const chromeRegex=new RegExp('(?:^|\\W)Chrome/(\\S+)');const chromeMatch=navigator.userAgent.match(chromeRegex);if(chromeMatch&&chromeMatch.length>1){const additionalAppVersion=chromeMatch[1].split('.',1)[0]+'.0.100.0';return String.sprintf(uaString,chromeMatch[1],additionalAppVersion);}
return uaString;}
modelAdded(networkManager){const networkAgent=networkManager.target().networkAgent();if(this._extraHeaders){networkAgent.setExtraHTTPHeaders(this._extraHeaders);}
if(this._currentUserAgent()){networkAgent.setUserAgentOverride(this._currentUserAgent());}
if(this._effectiveBlockedURLs.length){networkAgent.setBlockedURLs(this._effectiveBlockedURLs);}
if(this.isIntercepting()){networkAgent.setRequestInterception(this._urlsForRequestInterceptor.valuesArray());}
this._agents.add(networkAgent);if(this.isThrottling()){this._updateNetworkConditions(networkAgent);}}
modelRemoved(networkManager){for(const entry of this._inflightMainResourceRequests){const manager=NetworkManager.forRequest((entry[1]));if(manager!==networkManager){continue;}
this._inflightMainResourceRequests.delete((entry[0]));}
this._agents.delete(networkManager.target().networkAgent());}
isThrottling(){return this._networkConditions.download>=0||this._networkConditions.upload>=0||this._networkConditions.latency>0;}
isOffline(){return!this._networkConditions.download&&!this._networkConditions.upload;}
setNetworkConditions(conditions){this._networkConditions=conditions;for(const agent of this._agents){this._updateNetworkConditions(agent);}
this.dispatchEventToListeners(MultitargetNetworkManager.Events.ConditionsChanged);}
networkConditions(){return this._networkConditions;}
_updateNetworkConditions(networkAgent){const conditions=this._networkConditions;if(!this.isThrottling()){networkAgent.emulateNetworkConditions(false,0,0,0);}else{networkAgent.emulateNetworkConditions(this.isOffline(),conditions.latency,conditions.download<0?0:conditions.download,conditions.upload<0?0:conditions.upload,NetworkManager._connectionType(conditions));}}
setExtraHTTPHeaders(headers){this._extraHeaders=headers;for(const agent of this._agents){agent.setExtraHTTPHeaders(this._extraHeaders);}}
_currentUserAgent(){return this._customUserAgent?this._customUserAgent:this._userAgentOverride;}
_updateUserAgentOverride(){const userAgent=this._currentUserAgent();for(const agent of this._agents){agent.setUserAgentOverride(userAgent);}}
setUserAgentOverride(userAgent){if(this._userAgentOverride===userAgent){return;}
this._userAgentOverride=userAgent;if(!this._customUserAgent){this._updateUserAgentOverride();}
this.dispatchEventToListeners(MultitargetNetworkManager.Events.UserAgentChanged);}
userAgentOverride(){return this._userAgentOverride;}
setCustomUserAgentOverride(userAgent){this._customUserAgent=userAgent;this._updateUserAgentOverride();}
blockedPatterns(){return this._blockedPatternsSetting.get().slice();}
blockingEnabled(){return this._blockingEnabledSetting.get();}
isBlocking(){return!!this._effectiveBlockedURLs.length;}
setBlockedPatterns(patterns){this._blockedPatternsSetting.set(patterns);this._updateBlockedPatterns();this.dispatchEventToListeners(MultitargetNetworkManager.Events.BlockedPatternsChanged);}
setBlockingEnabled(enabled){if(this._blockingEnabledSetting.get()===enabled){return;}
this._blockingEnabledSetting.set(enabled);this._updateBlockedPatterns();this.dispatchEventToListeners(MultitargetNetworkManager.Events.BlockedPatternsChanged);}
_updateBlockedPatterns(){const urls=[];if(this._blockingEnabledSetting.get()){for(const pattern of this._blockedPatternsSetting.get()){if(pattern.enabled){urls.push(pattern.url);}}}
if(!urls.length&&!this._effectiveBlockedURLs.length){return;}
this._effectiveBlockedURLs=urls;for(const agent of this._agents){agent.setBlockedURLs(this._effectiveBlockedURLs);}}
isIntercepting(){return!!this._urlsForRequestInterceptor.size;}
setInterceptionHandlerForPatterns(patterns,requestInterceptor){this._urlsForRequestInterceptor.deleteAll(requestInterceptor);for(const newPattern of patterns){this._urlsForRequestInterceptor.set(requestInterceptor,newPattern);}
return this._updateInterceptionPatternsOnNextTick();}
_updateInterceptionPatternsOnNextTick(){if(!this._updatingInterceptionPatternsPromise){this._updatingInterceptionPatternsPromise=Promise.resolve().then(this._updateInterceptionPatterns.bind(this));}
return this._updatingInterceptionPatternsPromise;}
_updateInterceptionPatterns(){if(!Common.moduleSetting('cacheDisabled').get()){Common.moduleSetting('cacheDisabled').set(true);}
this._updatingInterceptionPatternsPromise=null;const promises=([]);for(const agent of this._agents){promises.push(agent.setRequestInterception(this._urlsForRequestInterceptor.valuesArray()));}
this.dispatchEventToListeners(MultitargetNetworkManager.Events.InterceptorsChanged);return Promise.all(promises);}
async _requestIntercepted(interceptedRequest){for(const requestInterceptor of this._urlsForRequestInterceptor.keysArray()){await requestInterceptor(interceptedRequest);if(interceptedRequest.hasResponded()){return;}}
if(!interceptedRequest.hasResponded()){interceptedRequest.continueRequestWithoutChange();}}
clearBrowserCache(){for(const agent of this._agents){agent.clearBrowserCache();}}
clearBrowserCookies(){for(const agent of this._agents){agent.clearBrowserCookies();}}
getCertificate(origin){const target=SDK.targetManager.mainTarget();return target.networkAgent().getCertificate(origin).then(certificate=>certificate||[]);}
loadResource(url,callback){const headers={};const currentUserAgent=this._currentUserAgent();if(currentUserAgent){headers['User-Agent']=currentUserAgent;}
if(Common.moduleSetting('cacheDisabled').get()){headers['Cache-Control']='no-cache';}
Host.ResourceLoader.load(url,headers,callback);}}
MultitargetNetworkManager.Events={BlockedPatternsChanged:Symbol('BlockedPatternsChanged'),ConditionsChanged:Symbol('ConditionsChanged'),UserAgentChanged:Symbol('UserAgentChanged'),InterceptorsChanged:Symbol('InterceptorsChanged')};export class InterceptedRequest{constructor(networkAgent,interceptionId,request,frameId,resourceType,isNavigationRequest,isDownload,redirectUrl,authChallenge,responseErrorReason,responseStatusCode,responseHeaders,requestId){this._networkAgent=networkAgent;this._interceptionId=interceptionId;this._hasResponded=false;this.request=request;this.frameId=frameId;this.resourceType=resourceType;this.isNavigationRequest=isNavigationRequest;this.isDownload=!!isDownload;this.redirectUrl=redirectUrl;this.authChallenge=authChallenge;this.responseErrorReason=responseErrorReason;this.responseStatusCode=responseStatusCode;this.responseHeaders=responseHeaders;this.requestId=requestId;}
hasResponded(){return this._hasResponded;}
async continueRequestWithContent(contentBlob){this._hasResponded=true;const headers=['HTTP/1.1 200 OK','Date: '+(new Date()).toUTCString(),'Server: Chrome Devtools Request Interceptor','Connection: closed','Content-Length: '+contentBlob.size,'Content-Type: '+contentBlob.type||'text/x-unknown',];const encodedResponse=await blobToBase64(new Blob([headers.join('\r\n'),'\r\n\r\n',contentBlob]));this._networkAgent.continueInterceptedRequest(this._interceptionId,undefined,encodedResponse);async function blobToBase64(blob){const reader=new FileReader();const fileContentsLoadedPromise=new Promise(resolve=>reader.onloadend=resolve);reader.readAsDataURL(blob);await fileContentsLoadedPromise;if(reader.error){console.error('Could not convert blob to base64.',reader.error);return'';}
const result=reader.result;if(result===undefined){console.error('Could not convert blob to base64.');return'';}
return result.substring(result.indexOf(',')+1);}}
continueRequestWithoutChange(){console.assert(!this._hasResponded);this._hasResponded=true;this._networkAgent.continueInterceptedRequest(this._interceptionId);}
continueRequestWithError(errorReason){console.assert(!this._hasResponded);this._hasResponded=true;this._networkAgent.continueInterceptedRequest(this._interceptionId,errorReason);}
async responseBody(){const response=await this._networkAgent.invoke_getResponseBodyForInterception({interceptionId:this._interceptionId});const error=response[Protocol.Error]||null;return{error:error,content:error?null:response.body,encoded:response.base64Encoded};}}
class RedirectExtraInfoBuilder{constructor(deleteCallback){this._requests=[];this._requestExtraInfos=[];this._responseExtraInfos=[];this._finished=false;this._hasExtraInfo=false;this._deleteCallback=deleteCallback;}
addRequest(req){this._requests.push(req);this._sync(this._requests.length-1);}
addRequestExtraInfo(info){this._hasExtraInfo=true;this._requestExtraInfos.push(info);this._sync(this._requestExtraInfos.length-1);}
addResponseExtraInfo(info){this._responseExtraInfos.push(info);this._sync(this._responseExtraInfos.length-1);}
finished(){this._finished=true;this._deleteIfComplete();}
_sync(index){const req=this._requests[index];if(!req){return;}
const requestExtraInfo=this._requestExtraInfos[index];if(requestExtraInfo){req.addExtraRequestInfo(requestExtraInfo);this._requestExtraInfos[index]=null;}
const responseExtraInfo=this._responseExtraInfos[index];if(responseExtraInfo){req.addExtraResponseInfo(responseExtraInfo);this._responseExtraInfos[index]=null;}
this._deleteIfComplete();}
_deleteIfComplete(){if(!this._finished){return;}
if(this._hasExtraInfo){if(!this._requests.peekLast().hasExtraResponseInfo()){return;}}
this._deleteCallback();}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.NetworkManager=NetworkManager;SDK.NetworkManager.Events=Events;SDK.NetworkManager.NoThrottlingConditions=NoThrottlingConditions;SDK.NetworkManager.OfflineConditions=OfflineConditions;SDK.NetworkManager.Slow3GConditions=Slow3GConditions;SDK.NetworkManager.Fast3GConditions=Fast3GConditions;SDK.NetworkDispatcher=NetworkDispatcher;SDK.MultitargetNetworkManager=MultitargetNetworkManager;SDK.MultitargetNetworkManager.InterceptedRequest=InterceptedRequest;SDK.NetworkManager.BlockedPattern;SDK.NetworkManager.Conditions;SDK.NetworkManager.Message;SDK.MultitargetNetworkManager.InterceptionPattern;SDK.MultitargetNetworkManager.RequestInterceptor;SDK.multitargetNetworkManager;SDK.SDKModel.register(SDK.NetworkManager,SDK.Target.Capability.Network,true);export default class NetworkLog extends Common.Object{constructor(){super();this._requests=[];this._requestsSet=new Set();this._pageLoadForManager=new Map();this._isRecording=true;SDK.targetManager.observeModels(SDK.NetworkManager,this);}
modelAdded(networkManager){const eventListeners=[];eventListeners.push(networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted,this._onRequestStarted,this));eventListeners.push(networkManager.addEventListener(SDK.NetworkManager.Events.RequestUpdated,this._onRequestUpdated,this));eventListeners.push(networkManager.addEventListener(SDK.NetworkManager.Events.RequestRedirected,this._onRequestRedirect,this));eventListeners.push(networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished,this._onRequestUpdated,this));eventListeners.push(networkManager.addEventListener(SDK.NetworkManager.Events.MessageGenerated,this._networkMessageGenerated.bind(this,networkManager)));const resourceTreeModel=networkManager.target().model(SDK.ResourceTreeModel);if(resourceTreeModel){eventListeners.push(resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.WillReloadPage,this._willReloadPage,this));eventListeners.push(resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._onMainFrameNavigated,this));eventListeners.push(resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load,this._onLoad,this));eventListeners.push(resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.DOMContentLoaded,this._onDOMContentLoaded.bind(this,resourceTreeModel)));}
networkManager[_events]=eventListeners;}
modelRemoved(networkManager){this._removeNetworkManagerListeners(networkManager);}
_removeNetworkManagerListeners(networkManager){Common.EventTarget.removeEventListeners(networkManager[_events]);}
setIsRecording(enabled){if(this._isRecording===enabled){return;}
this._isRecording=enabled;if(enabled){SDK.targetManager.observeModels(SDK.NetworkManager,this);}else{SDK.targetManager.unobserveModels(SDK.NetworkManager,this);SDK.targetManager.models(SDK.NetworkManager).forEach(this._removeNetworkManagerListeners.bind(this));}}
requestForURL(url){return this._requests.find(request=>request.url()===url)||null;}
requests(){return this._requests;}
requestByManagerAndId(networkManager,requestId){for(let i=this._requests.length-1;i>=0;i--){const request=this._requests[i];if(requestId===request.requestId()&&networkManager===SDK.NetworkManager.forRequest(request)){return request;}}
return null;}
_requestByManagerAndURL(networkManager,url){for(const request of this._requests){if(url===request.url()&&networkManager===SDK.NetworkManager.forRequest(request)){return request;}}
return null;}
_initializeInitiatorSymbolIfNeeded(request){if(!request[_initiatorDataSymbol]){request[_initiatorDataSymbol]={info:null,chain:null,request:undefined,};}}
initiatorInfoForRequest(request){this._initializeInitiatorSymbolIfNeeded(request);if(request[_initiatorDataSymbol].info){return request[_initiatorDataSymbol].info;}
let type=SDK.NetworkRequest.InitiatorType.Other;let url='';let lineNumber=-Infinity;let columnNumber=-Infinity;let scriptId=null;let initiatorStack=null;const initiator=request.initiator();const redirectSource=request.redirectSource();if(redirectSource){type=SDK.NetworkRequest.InitiatorType.Redirect;url=redirectSource.url();}else if(initiator){if(initiator.type===Protocol.Network.InitiatorType.Parser){type=SDK.NetworkRequest.InitiatorType.Parser;url=initiator.url?initiator.url:url;lineNumber=initiator.lineNumber?initiator.lineNumber:lineNumber;}else if(initiator.type===Protocol.Network.InitiatorType.Script){for(let stack=initiator.stack;stack;stack=stack.parent){const topFrame=stack.callFrames.length?stack.callFrames[0]:null;if(!topFrame){continue;}
type=SDK.NetworkRequest.InitiatorType.Script;url=topFrame.url||Common.UIString('<anonymous>');lineNumber=topFrame.lineNumber;columnNumber=topFrame.columnNumber;scriptId=topFrame.scriptId;break;}
if(!initiator.stack&&initiator.url){type=SDK.NetworkRequest.InitiatorType.Script;url=initiator.url;lineNumber=initiator.lineNumber||0;}
if(initiator.stack&&initiator.stack.callFrames&&initiator.stack.callFrames.length){initiatorStack=initiator.stack||null;}}else if(initiator.type===Protocol.Network.InitiatorType.Preload){type=SDK.NetworkRequest.InitiatorType.Preload;}else if(initiator.type===Protocol.Network.InitiatorType.SignedExchange){type=SDK.NetworkRequest.InitiatorType.SignedExchange;url=initiator.url;}}
request[_initiatorDataSymbol].info={type:type,url:url,lineNumber:lineNumber,columnNumber:columnNumber,scriptId:scriptId,stack:initiatorStack};return request[_initiatorDataSymbol].info;}
initiatorGraphForRequest(request){const initiated=new Map();const networkManager=SDK.NetworkManager.forRequest(request);for(const otherRequest of this._requests){const otherRequestManager=SDK.NetworkManager.forRequest(otherRequest);if(networkManager===otherRequestManager&&this._initiatorChain(otherRequest).has(request)){initiated.set(otherRequest,this._initiatorRequest(otherRequest));}}
return{initiators:this._initiatorChain(request),initiated:initiated};}
_initiatorChain(request){this._initializeInitiatorSymbolIfNeeded(request);let initiatorChainCache=(request[_initiatorDataSymbol].chain);if(initiatorChainCache){return initiatorChainCache;}
initiatorChainCache=new Set();let checkRequest=request;do{this._initializeInitiatorSymbolIfNeeded(checkRequest);if(checkRequest[_initiatorDataSymbol].chain){initiatorChainCache.addAll(checkRequest[_initiatorDataSymbol].chain);break;}
if(initiatorChainCache.has(checkRequest)){break;}
initiatorChainCache.add(checkRequest);checkRequest=this._initiatorRequest(checkRequest);}while(checkRequest);request[_initiatorDataSymbol].chain=initiatorChainCache;return initiatorChainCache;}
_initiatorRequest(request){this._initializeInitiatorSymbolIfNeeded(request);if(request[_initiatorDataSymbol].request!==undefined){return request[_initiatorDataSymbol].request;}
const url=this.initiatorInfoForRequest(request).url;const networkManager=SDK.NetworkManager.forRequest(request);request[_initiatorDataSymbol].request=networkManager?this._requestByManagerAndURL(networkManager,url):null;return request[_initiatorDataSymbol].request;}
_willReloadPage(){if(!Common.moduleSetting('network_log.preserve-log').get()){this.reset();}}
_onMainFrameNavigated(event){const mainFrame=(event.data);const manager=mainFrame.resourceTreeModel().target().model(SDK.NetworkManager);if(!manager||mainFrame.resourceTreeModel().target().parentTarget()){return;}
const oldRequests=this._requests;const oldManagerRequests=this._requests.filter(request=>SDK.NetworkManager.forRequest(request)===manager);const oldRequestsSet=this._requestsSet;this._requests=[];this._requestsSet=new Set();this.dispatchEventToListeners(Events.Reset);let currentPageLoad=null;const requestsToAdd=[];for(const request of oldManagerRequests){if(request.loaderId!==mainFrame.loaderId){continue;}
if(!currentPageLoad){currentPageLoad=new PageLoad(request);let redirectSource=request.redirectSource();while(redirectSource){requestsToAdd.push(redirectSource);redirectSource=redirectSource.redirectSource();}}
requestsToAdd.push(request);}
const serviceWorkerRequestsToAdd=[];for(const swRequest of oldRequests){if(!swRequest.initiatedByServiceWorker()){continue;}
const keepRequest=requestsToAdd.some(request=>request.url()===swRequest.url()&&request.issueTime()<=swRequest.issueTime());if(keepRequest){serviceWorkerRequestsToAdd.push(swRequest);}}
requestsToAdd.push(...serviceWorkerRequestsToAdd);for(const request of requestsToAdd){oldRequestsSet.delete(request);this._requests.push(request);this._requestsSet.add(request);currentPageLoad.bindRequest(request);this.dispatchEventToListeners(Events.RequestAdded,request);}
if(Common.moduleSetting('network_log.preserve-log').get()){for(const request of oldRequestsSet){this._requests.push(request);this._requestsSet.add(request);this.dispatchEventToListeners(Events.RequestAdded,request);}}
if(currentPageLoad){this._pageLoadForManager.set(manager,currentPageLoad);}}
importRequests(requests){this.reset();this._requests=[];this._requestsSet.clear();for(const request of requests){this._requests.push(request);this._requestsSet.add(request);this.dispatchEventToListeners(Events.RequestAdded,request);}}
_onRequestStarted(event){const request=(event.data);this._requests.push(request);this._requestsSet.add(request);const manager=SDK.NetworkManager.forRequest(request);const pageLoad=manager?this._pageLoadForManager.get(manager):null;if(pageLoad){pageLoad.bindRequest(request);}
this.dispatchEventToListeners(Events.RequestAdded,request);}
_onRequestUpdated(event){const request=(event.data);if(!this._requestsSet.has(request)){return;}
this.dispatchEventToListeners(Events.RequestUpdated,request);}
_onRequestRedirect(event){const request=(event.data);delete request[_initiatorDataSymbol];}
_onDOMContentLoaded(resourceTreeModel,event){const networkManager=resourceTreeModel.target().model(SDK.NetworkManager);const pageLoad=networkManager?this._pageLoadForManager.get(networkManager):null;if(pageLoad){pageLoad.contentLoadTime=(event.data);}}
_onLoad(event){const networkManager=event.data.resourceTreeModel.target().model(SDK.NetworkManager);const pageLoad=networkManager?this._pageLoadForManager.get(networkManager):null;if(pageLoad){pageLoad.loadTime=(event.data.loadTime);}}
reset(){this._requests=[];this._requestsSet.clear();const managers=new Set(SDK.targetManager.models(SDK.NetworkManager));for(const manager of this._pageLoadForManager.keys()){if(!managers.has(manager)){this._pageLoadForManager.delete(manager);}}
this.dispatchEventToListeners(Events.Reset);}
_networkMessageGenerated(networkManager,event){const message=(event.data);const consoleMessage=new SDK.ConsoleMessage(networkManager.target().model(SDK.RuntimeModel),SDK.ConsoleMessage.MessageSource.Network,message.warning?SDK.ConsoleMessage.MessageLevel.Warning:SDK.ConsoleMessage.MessageLevel.Info,message.message);this.associateConsoleMessageWithRequest(consoleMessage,message.requestId);SDK.consoleModel.addMessage(consoleMessage);}
associateConsoleMessageWithRequest(consoleMessage,requestId){const target=consoleMessage.target();const networkManager=target?target.model(SDK.NetworkManager):null;if(!networkManager){return;}
const request=this.requestByManagerAndId(networkManager,requestId);if(!request){return;}
consoleMessage[_requestSymbol]=request;const initiator=request.initiator();if(initiator){consoleMessage.stackTrace=initiator.stack||undefined;if(initiator.url){consoleMessage.url=initiator.url;consoleMessage.line=initiator.lineNumber||0;}}}
static requestForConsoleMessage(consoleMessage){return consoleMessage[_requestSymbol]||null;}}
export class PageLoad{constructor(mainRequest){this.id=++PageLoad._lastIdentifier;this.url=mainRequest.url();this.startTime=mainRequest.startTime;this.loadTime;this.contentLoadTime;this.mainRequest=mainRequest;this._showDataSaverWarningIfNeeded();}
async _showDataSaverWarningIfNeeded(){const manager=SDK.NetworkManager.forRequest(this.mainRequest);if(!manager){return;}
if(!this.mainRequest.finished){await this.mainRequest.once(SDK.NetworkRequest.Events.FinishedLoading);}
const saveDataHeader=this.mainRequest.requestHeaderValue('Save-Data');if(!PageLoad._dataSaverMessageWasShown&&saveDataHeader&&saveDataHeader==='on'){const message=Common.UIString('Consider disabling %s while debugging. For more info see: %s',Common.UIString('Chrome Data Saver'),'https://support.google.com/chrome/?p=datasaver');manager.dispatchEventToListeners(SDK.NetworkManager.Events.MessageGenerated,{message:message,requestId:this.mainRequest.requestId(),warning:true});PageLoad._dataSaverMessageWasShown=true;}}
static forRequest(request){return request[PageLoad._pageLoadForRequestSymbol]||null;}
bindRequest(request){request[PageLoad._pageLoadForRequestSymbol]=this;}}
PageLoad._lastIdentifier=0;PageLoad._pageLoadForRequestSymbol=Symbol('PageLoadForRequest');PageLoad._dataSaverMessageWasShown=false;const _requestSymbol=Symbol('_request');export const Events={Reset:Symbol('Reset'),RequestAdded:Symbol('RequestAdded'),RequestUpdated:Symbol('RequestUpdated')};const _initiatorDataSymbol=Symbol('InitiatorData');const _events=Symbol('SDK.NetworkLog.events');self.SDK=self.SDK||{};SDK=SDK||{};SDK.NetworkLog=NetworkLog;SDK.NetworkLog.PageLoad=PageLoad;SDK.NetworkLog.Events=Events;SDK.networkLog=new NetworkLog();SDK.NetworkLog.InitiatorGraph;SDK.NetworkLog._InitiatorInfo;export default class LogModel extends SDK.SDKModel{constructor(target){super(target);target.registerLogDispatcher(this);this._logAgent=target.logAgent();this._logAgent.enable();if(!Host.isUnderTest()){this._logAgent.startViolationsReport([{name:'longTask',threshold:200},{name:'longLayout',threshold:30},{name:'blockedEvent',threshold:100},{name:'blockedParser',threshold:-1},{name:'handler',threshold:150},{name:'recurringHandler',threshold:50},{name:'discouragedAPIUse',threshold:-1}]);}}
entryAdded(payload){this.dispatchEventToListeners(Events.EntryAdded,{logModel:this,entry:payload});}
requestClear(){this._logAgent.clear();}}
export const Events={EntryAdded:Symbol('EntryAdded')};self.SDK=self.SDK||{};SDK=SDK||{};SDK.LogModel=LogModel;SDK.LogModel.Events=Events;SDK.SDKModel.register(SDK.LogModel,SDK.Target.Capability.Log,true);export class Layer{id(){}
parentId(){}
parent(){}
isRoot(){}
children(){}
addChild(child){}
node(){}
nodeForSelfOrAncestor(){}
offsetX(){}
offsetY(){}
width(){}
height(){}
transform(){}
quad(){}
anchorPoint(){}
invisible(){}
paintCount(){}
lastPaintRect(){}
scrollRects(){}
stickyPositionConstraint(){}
gpuMemoryUsage(){}
requestCompositingReasons(){}
drawsContent(){}
snapshots(){}}
Layer.ScrollRectType={NonFastScrollable:'NonFastScrollable',TouchEventHandler:'TouchEventHandler',WheelEventHandler:'WheelEventHandler',RepaintsOnScroll:'RepaintsOnScroll',MainThreadScrollingReason:'MainThreadScrollingReason'};export class StickyPositionConstraint{constructor(layerTree,constraint){this._stickyBoxRect=constraint.stickyBoxRect;this._containingBlockRect=constraint.containingBlockRect;this._nearestLayerShiftingStickyBox=null;if(layerTree&&constraint.nearestLayerShiftingStickyBox){this._nearestLayerShiftingStickyBox=layerTree.layerById(constraint.nearestLayerShiftingStickyBox);}
this._nearestLayerShiftingContainingBlock=null;if(layerTree&&constraint.nearestLayerShiftingContainingBlock){this._nearestLayerShiftingContainingBlock=layerTree.layerById(constraint.nearestLayerShiftingContainingBlock);}}
stickyBoxRect(){return this._stickyBoxRect;}
containingBlockRect(){return this._containingBlockRect;}
nearestLayerShiftingStickyBox(){return this._nearestLayerShiftingStickyBox;}
nearestLayerShiftingContainingBlock(){return this._nearestLayerShiftingContainingBlock;}}
export default class LayerTreeBase{constructor(target){this._target=target;this._domModel=target?target.model(SDK.DOMModel):null;this._layersById={};this._root=null;this._contentRoot=null;this._backendNodeIdToNode=new Map();}
target(){return this._target;}
root(){return this._root;}
setRoot(root){this._root=root;}
contentRoot(){return this._contentRoot;}
setContentRoot(contentRoot){this._contentRoot=contentRoot;}
forEachLayer(callback,root){if(!root){root=this.root();if(!root){return false;}}
return callback(root)||root.children().some(this.forEachLayer.bind(this,callback));}
layerById(id){return this._layersById[id]||null;}
async resolveBackendNodeIds(requestedNodeIds){if(!requestedNodeIds.size||!this._domModel){return;}
const nodesMap=await this._domModel.pushNodesByBackendIdsToFrontend(requestedNodeIds);if(!nodesMap){return;}
for(const nodeId of nodesMap.keysArray()){this._backendNodeIdToNode.set(nodeId,nodesMap.get(nodeId)||null);}}
backendNodeIdToNode(){return this._backendNodeIdToNode;}
setViewportSize(viewportSize){this._viewportSize=viewportSize;}
viewportSize(){return this._viewportSize;}
_nodeForId(id){return this._domModel?this._domModel.nodeForId(id):null;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.Layer=Layer;SDK.LayerTreeBase=LayerTreeBase;SDK.Layer.StickyPositionConstraint=StickyPositionConstraint;SDK.SnapshotWithRect;export default class IsolateManager extends Common.Object{constructor(){super();console.assert(!SDK.isolateManager,'Use SDK.isolateManager singleton.');this._isolates=new Map();this._isolateIdByModel=new Map();this._observers=new Set();SDK.targetManager.observeModels(SDK.RuntimeModel,this);this._pollId=0;}
observeIsolates(observer){if(this._observers.has(observer)){throw new Error('Observer can only be registered once');}
if(!this._observers.size){this._poll();}
this._observers.add(observer);for(const isolate of this._isolates.values()){observer.isolateAdded(isolate);}}
unobserveIsolates(observer){this._observers.delete(observer);if(!this._observers.size){++this._pollId;}}
modelAdded(model){this._modelAdded(model);}
async _modelAdded(model){this._isolateIdByModel.set(model,null);const isolateId=await model.isolateId();if(!this._isolateIdByModel.has(model)){return;}
if(!isolateId){this._isolateIdByModel.delete(model);return;}
this._isolateIdByModel.set(model,isolateId);let isolate=this._isolates.get(isolateId);if(!isolate){isolate=new Isolate(isolateId);this._isolates.set(isolateId,isolate);}
isolate._models.add(model);if(isolate._models.size===1){for(const observer of this._observers){observer.isolateAdded(isolate);}}else{for(const observer of this._observers){observer.isolateChanged(isolate);}}}
modelRemoved(model){const isolateId=this._isolateIdByModel.get(model);this._isolateIdByModel.delete(model);if(!isolateId){return;}
const isolate=this._isolates.get(isolateId);isolate._models.delete(model);if(isolate._models.size){for(const observer of this._observers){observer.isolateChanged(isolate);}
return;}
for(const observer of this._observers){observer.isolateRemoved(isolate);}
this._isolates.delete(isolateId);}
isolateByModel(model){return this._isolates.get(this._isolateIdByModel.get(model)||'')||null;}
isolates(){return this._isolates.values();}
async _poll(){const pollId=this._pollId;while(pollId===this._pollId){await Promise.all(Array.from(this.isolates(),isolate=>isolate._update()));await new Promise(r=>setTimeout(r,PollIntervalMs));}}}
export class Observer{isolateAdded(isolate){}
isolateRemoved(isolate){}
isolateChanged(isolate){}}
export const Events={MemoryChanged:Symbol('MemoryChanged')};export const MemoryTrendWindowMs=120e3;const PollIntervalMs=2e3;export class Isolate{constructor(id){this._id=id;this._models=new Set();this._usedHeapSize=0;const count=MemoryTrendWindowMs/PollIntervalMs;this._memoryTrend=new MemoryTrend(count);}
id(){return this._id;}
models(){return this._models;}
runtimeModel(){return this._models.values().next().value||null;}
heapProfilerModel(){const runtimeModel=this.runtimeModel();return runtimeModel&&runtimeModel.heapProfilerModel();}
async _update(){const model=this.runtimeModel();const usage=model&&await model.heapUsage();if(!usage){return;}
this._usedHeapSize=usage.usedSize;this._memoryTrend.add(this._usedHeapSize);SDK.isolateManager.dispatchEventToListeners(Events.MemoryChanged,this);}
samplesCount(){return this._memoryTrend.count();}
usedHeapSize(){return this._usedHeapSize;}
usedHeapSizeGrowRate(){return this._memoryTrend.fitSlope();}}
export class MemoryTrend{constructor(maxCount){this._maxCount=maxCount|0;this.reset();}
reset(){this._base=Date.now();this._index=0;this._x=[];this._y=[];this._sx=0;this._sy=0;this._sxx=0;this._sxy=0;}
count(){return this._x.length;}
add(heapSize,timestamp){const x=typeof timestamp==='number'?timestamp:Date.now()-this._base;const y=heapSize;if(this._x.length===this._maxCount){const x0=this._x[this._index];const y0=this._y[this._index];this._sx-=x0;this._sy-=y0;this._sxx-=x0*x0;this._sxy-=x0*y0;}
this._sx+=x;this._sy+=y;this._sxx+=x*x;this._sxy+=x*y;this._x[this._index]=x;this._y[this._index]=y;this._index=(this._index+1)%this._maxCount;}
fitSlope(){const n=this.count();return n<2?0:(this._sxy-this._sx*this._sy/n)/(this._sxx-this._sx*this._sx/n);}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.IsolateManager=IsolateManager;SDK.IsolateManager.Observer=Observer;SDK.IsolateManager.Events=Events;SDK.IsolateManager.MemoryTrendWindowMs=MemoryTrendWindowMs;SDK.IsolateManager.Isolate=Isolate;SDK.IsolateManager.MemoryTrend=MemoryTrend;SDK.isolateManager=new IsolateManager();export default class HeapProfilerModel extends SDK.SDKModel{constructor(target){super(target);target.registerHeapProfilerDispatcher(new HeapProfilerDispatcher(this));this._enabled=false;this._heapProfilerAgent=target.heapProfilerAgent();this._memoryAgent=target.memoryAgent();this._runtimeModel=(target.model(SDK.RuntimeModel));this._samplingProfilerDepth=0;}
debuggerModel(){return this._runtimeModel.debuggerModel();}
runtimeModel(){return this._runtimeModel;}
enable(){if(this._enabled){return;}
this._enabled=true;this._heapProfilerAgent.enable();}
startSampling(samplingRateInBytes){if(this._samplingProfilerDepth++){return;}
const defaultSamplingIntervalInBytes=16384;this._heapProfilerAgent.startSampling(samplingRateInBytes||defaultSamplingIntervalInBytes);}
stopSampling(){if(!this._samplingProfilerDepth){throw new Error('Sampling profiler is not running.');}
if(--this._samplingProfilerDepth){return this.getSamplingProfile();}
return this._heapProfilerAgent.stopSampling();}
getSamplingProfile(){return this._heapProfilerAgent.getSamplingProfile();}
startNativeSampling(){const defaultSamplingIntervalInBytes=65536;this._memoryAgent.startSampling(defaultSamplingIntervalInBytes);}
async stopNativeSampling(){const rawProfile=(await this._memoryAgent.getSamplingProfile());this._memoryAgent.stopSampling();return this._convertNativeProfile(rawProfile);}
async takeNativeSnapshot(){const rawProfile=(await this._memoryAgent.getAllTimeSamplingProfile());return this._convertNativeProfile(rawProfile);}
async takeNativeBrowserSnapshot(){const rawProfile=(await this._memoryAgent.getBrowserSamplingProfile());return this._convertNativeProfile(rawProfile);}
_convertNativeProfile(rawProfile){const head=({children:new Map(),selfSize:0,callFrame:{functionName:'(root)',url:''}});for(const sample of rawProfile.samples){const node=sample.stack.reverse().reduce((node,name)=>{let child=node.children.get(name);if(child){return child;}
const namespace=/^([^:]*)::/.exec(name);child={children:new Map(),callFrame:{functionName:name,url:namespace&&namespace[1]||''},selfSize:0};node.children.set(name,child);return child;},head);node.selfSize+=sample.total;}
function convertChildren(node){node.children=Array.from(node.children.values());node.children.forEach(convertChildren);}
convertChildren(head);return new NativeHeapProfile(head,rawProfile.modules);}
collectGarbage(){return this._heapProfilerAgent.collectGarbage();}
snapshotObjectIdForObjectId(objectId){return this._heapProfilerAgent.getHeapObjectId(objectId);}
async objectForSnapshotObjectId(snapshotObjectId,objectGroupName){const result=await this._heapProfilerAgent.getObjectByHeapObjectId(snapshotObjectId,objectGroupName);return result&&result.type&&this._runtimeModel.createRemoteObject(result)||null;}
addInspectedHeapObject(snapshotObjectId){return this._heapProfilerAgent.addInspectedHeapObject(snapshotObjectId);}
takeHeapSnapshot(reportProgress){return this._heapProfilerAgent.takeHeapSnapshot(reportProgress);}
startTrackingHeapObjects(recordAllocationStacks){return this._heapProfilerAgent.startTrackingHeapObjects(recordAllocationStacks);}
stopTrackingHeapObjects(reportProgress){return this._heapProfilerAgent.stopTrackingHeapObjects(reportProgress);}
heapStatsUpdate(samples){this.dispatchEventToListeners(Events.HeapStatsUpdate,samples);}
lastSeenObjectId(lastSeenObjectId,timestamp){this.dispatchEventToListeners(Events.LastSeenObjectId,{lastSeenObjectId:lastSeenObjectId,timestamp:timestamp});}
addHeapSnapshotChunk(chunk){this.dispatchEventToListeners(Events.AddHeapSnapshotChunk,chunk);}
reportHeapSnapshotProgress(done,total,finished){this.dispatchEventToListeners(Events.ReportHeapSnapshotProgress,{done:done,total:total,finished:finished});}
resetProfiles(){this.dispatchEventToListeners(Events.ResetProfiles,this);}}
export const Events={HeapStatsUpdate:Symbol('HeapStatsUpdate'),LastSeenObjectId:Symbol('LastSeenObjectId'),AddHeapSnapshotChunk:Symbol('AddHeapSnapshotChunk'),ReportHeapSnapshotProgress:Symbol('ReportHeapSnapshotProgress'),ResetProfiles:Symbol('ResetProfiles')};class NativeHeapProfile{constructor(head,modules){this.head=head;this.modules=modules;}}
class HeapProfilerDispatcher{constructor(model){this._heapProfilerModel=model;}
heapStatsUpdate(samples){this._heapProfilerModel.heapStatsUpdate(samples);}
lastSeenObjectId(lastSeenObjectId,timestamp){this._heapProfilerModel.lastSeenObjectId(lastSeenObjectId,timestamp);}
addHeapSnapshotChunk(chunk){this._heapProfilerModel.addHeapSnapshotChunk(chunk);}
reportHeapSnapshotProgress(done,total,finished){this._heapProfilerModel.reportHeapSnapshotProgress(done,total,finished);}
resetProfiles(){this._heapProfilerModel.resetProfiles();}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.HeapProfilerModel=HeapProfilerModel;SDK.HeapProfilerModel.Events=Events;SDK.SDKModel.register(SDK.HeapProfilerModel,SDK.Target.Capability.JS,false);export default class HARLog{static pseudoWallTime(request,monotonicTime){return new Date(request.pseudoWallTime(monotonicTime)*1000);}
static async build(requests){const log=new HARLog();const entryPromises=[];for(const request of requests){entryPromises.push(Entry.build(request));}
const entries=await Promise.all(entryPromises);return{version:'1.2',creator:log._creator(),pages:log._buildPages(requests),entries:entries};}
_creator(){const webKitVersion=/AppleWebKit\/([^ ]+)/.exec(window.navigator.userAgent);return{name:'WebInspector',version:webKitVersion?webKitVersion[1]:'n/a'};}
_buildPages(requests){const seenIdentifiers={};const pages=[];for(let i=0;i<requests.length;++i){const request=requests[i];const page=SDK.NetworkLog.PageLoad.forRequest(request);if(!page||seenIdentifiers[page.id]){continue;}
seenIdentifiers[page.id]=true;pages.push(this._convertPage(page,request));}
return pages;}
_convertPage(page,request){return{startedDateTime:HARLog.pseudoWallTime(request,page.startTime).toJSON(),id:'page_'+page.id,title:page.url,pageTimings:{onContentLoad:this._pageEventTime(page,page.contentLoadTime),onLoad:this._pageEventTime(page,page.loadTime)}};}
_pageEventTime(page,time){const startTime=page.startTime;if(time===-1||startTime===-1){return-1;}
return Entry._toMilliseconds(time-startTime);}}
export class Entry{constructor(request){this._request=request;}
static _toMilliseconds(time){return time===-1?-1:time*1000;}
static async build(request){const harEntry=new Entry(request);let ipAddress=harEntry._request.remoteAddress();const portPositionInString=ipAddress.lastIndexOf(':');if(portPositionInString!==-1){ipAddress=ipAddress.substr(0,portPositionInString);}
const timings=harEntry._buildTimings();let time=0;for(const t of[timings.blocked,timings.dns,timings.connect,timings.send,timings.wait,timings.receive]){time+=Math.max(t,0);}
const initiator=harEntry._request.initiator();const exportedInitiator={};exportedInitiator.type=initiator.type;if(initiator.url!==undefined){exportedInitiator.url=initiator.url;}
if(initiator.lineNumber!==undefined){exportedInitiator.lineNumber=initiator.lineNumber;}
if(initiator.stack){exportedInitiator.stack=initiator.stack;}
const entry={startedDateTime:HARLog.pseudoWallTime(harEntry._request,harEntry._request.issueTime()).toJSON(),time:time,request:await harEntry._buildRequest(),response:harEntry._buildResponse(),cache:{},timings:timings,serverIPAddress:ipAddress.replace(/\[\]/g,''),_initiator:exportedInitiator,_priority:harEntry._request.priority(),_resourceType:harEntry._request.resourceType().name()};if(harEntry._request.cached()){entry._fromCache=harEntry._request.cachedInMemory()?'memory':'disk';}
if(harEntry._request.connectionId!=='0'){entry.connection=harEntry._request.connectionId;}
const page=SDK.NetworkLog.PageLoad.forRequest(harEntry._request);if(page){entry.pageref='page_'+page.id;}
if(harEntry._request.resourceType()===Common.resourceTypes.WebSocket){const messages=[];for(const message of harEntry._request.frames()){messages.push({type:message.type,time:message.time,opcode:message.opCode,data:message.text});}
entry._webSocketMessages=messages;}
return entry;}
async _buildRequest(){const headersText=this._request.requestHeadersText();const res={method:this._request.requestMethod,url:this._buildRequestURL(this._request.url()),httpVersion:this._request.requestHttpVersion(),headers:this._request.requestHeaders(),queryString:this._buildParameters(this._request.queryParameters||[]),cookies:this._buildCookies(this._request.requestCookies||[]),headersSize:headersText?headersText.length:-1,bodySize:await this._requestBodySize()};const postData=await this._buildPostData();if(postData){res.postData=postData;}
return res;}
_buildResponse(){const headersText=this._request.responseHeadersText;return{status:this._request.statusCode,statusText:this._request.statusText,httpVersion:this._request.responseHttpVersion(),headers:this._request.responseHeaders,cookies:this._buildCookies(this._request.responseCookies||[]),content:this._buildContent(),redirectURL:this._request.responseHeaderValue('Location')||'',headersSize:headersText?headersText.length:-1,bodySize:this.responseBodySize,_transferSize:this._request.transferSize,_error:this._request.localizedFailDescription};}
_buildContent(){const content={size:this._request.resourceSize,mimeType:this._request.mimeType||'x-unknown',};const compression=this.responseCompression;if(typeof compression==='number'){content.compression=compression;}
return content;}
_buildTimings(){const timing=this._request.timing;const issueTime=this._request.issueTime();const startTime=this._request.startTime;const result={blocked:-1,dns:-1,ssl:-1,connect:-1,send:0,wait:0,receive:0,_blocked_queueing:-1};const queuedTime=(issueTime<startTime)?startTime-issueTime:-1;result.blocked=Entry._toMilliseconds(queuedTime);result._blocked_queueing=Entry._toMilliseconds(queuedTime);let highestTime=0;if(timing){const blockedStart=leastNonNegative([timing.dnsStart,timing.connectStart,timing.sendStart]);if(blockedStart!==Infinity){result.blocked+=blockedStart;}
if(timing.proxyEnd!==-1){result._blocked_proxy=timing.proxyEnd-timing.proxyStart;}
if(result._blocked_proxy&&result._blocked_proxy>result.blocked){result.blocked=result._blocked_proxy;}
const dnsStart=timing.dnsEnd>=0?blockedStart:0;const dnsEnd=timing.dnsEnd>=0?timing.dnsEnd:-1;result.dns=dnsEnd-dnsStart;const sslStart=timing.sslEnd>0?timing.sslStart:0;const sslEnd=timing.sslEnd>0?timing.sslEnd:-1;result.ssl=sslEnd-sslStart;const connectStart=timing.connectEnd>=0?leastNonNegative([dnsEnd,blockedStart]):0;const connectEnd=timing.connectEnd>=0?timing.connectEnd:-1;result.connect=connectEnd-connectStart;const sendStart=timing.sendEnd>=0?Math.max(connectEnd,dnsEnd,blockedStart):0;const sendEnd=timing.sendEnd>=0?timing.sendEnd:0;result.send=sendEnd-sendStart;if(result.send<0){result.send=0;}
highestTime=Math.max(sendEnd,connectEnd,sslEnd,dnsEnd,blockedStart,0);}else if(this._request.responseReceivedTime===-1){result.blocked=this._request.endTime-issueTime;return result;}
const requestTime=timing?timing.requestTime:startTime;const waitStart=highestTime;const waitEnd=Entry._toMilliseconds(this._request.responseReceivedTime-requestTime);result.wait=waitEnd-waitStart;const receiveStart=waitEnd;const receiveEnd=Entry._toMilliseconds(this._request.endTime-requestTime);result.receive=Math.max(receiveEnd-receiveStart,0);return result;function leastNonNegative(values){return values.reduce((best,value)=>(value>=0&&value<best)?value:best,Infinity);}}
async _buildPostData(){const postData=await this._request.requestFormData();if(!postData){return null;}
const res={mimeType:this._request.requestContentType()||'',text:postData};const formParameters=await this._request.formParameters();if(formParameters){res.params=this._buildParameters(formParameters);}
return res;}
_buildParameters(parameters){return parameters.slice();}
_buildRequestURL(url){return url.split('#',2)[0];}
_buildCookies(cookies){return cookies.map(this._buildCookie.bind(this));}
_buildCookie(cookie){const c={name:cookie.name(),value:cookie.value(),path:cookie.path(),domain:cookie.domain(),expires:cookie.expiresDate(HARLog.pseudoWallTime(this._request,this._request.startTime)),httpOnly:cookie.httpOnly(),secure:cookie.secure()};if(cookie.sameSite()){c.sameSite=cookie.sameSite();}
return c;}
async _requestBodySize(){const postData=await this._request.requestFormData();if(!postData){return 0;}
return new TextEncoder('utf-8').encode(postData).length;}
get responseBodySize(){if(this._request.cached()||this._request.statusCode===304){return 0;}
if(!this._request.responseHeadersText){return-1;}
return this._request.transferSize-this._request.responseHeadersText.length;}
get responseCompression(){if(this._request.cached()||this._request.statusCode===304||this._request.statusCode===206){return;}
if(!this._request.responseHeadersText){return;}
return this._request.resourceSize-this.responseBodySize;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.HARLog=HARLog;SDK.HARLog.Entry=Entry;SDK.HARLog.Entry.Timing;export default class FilmStripModel{constructor(tracingModel,zeroTime){this.reset(tracingModel,zeroTime);}
reset(tracingModel,zeroTime){this._zeroTime=zeroTime||tracingModel.minimumRecordTime();this._spanTime=tracingModel.maximumRecordTime()-this._zeroTime;this._frames=[];const browserMain=SDK.TracingModel.browserMainThread(tracingModel);if(!browserMain){return;}
const events=browserMain.events();for(let i=0;i<events.length;++i){const event=events[i];if(event.startTime<this._zeroTime){continue;}
if(!event.hasCategory(_category)){continue;}
if(event.name===TraceEvents.CaptureFrame){const data=event.args['data'];if(data){this._frames.push(Frame._fromEvent(this,event,this._frames.length));}}else if(event.name===TraceEvents.Screenshot){this._frames.push(Frame._fromSnapshot(this,(event),this._frames.length));}}}
frames(){return this._frames;}
zeroTime(){return this._zeroTime;}
spanTime(){return this._spanTime;}
frameByTimestamp(timestamp){const index=this._frames.upperBound(timestamp,(timestamp,frame)=>timestamp-frame.timestamp)-1;return index>=0?this._frames[index]:null;}}
const _category='disabled-by-default-devtools.screenshot';const TraceEvents={CaptureFrame:'CaptureFrame',Screenshot:'Screenshot'};export class Frame{constructor(model,timestamp,index){this._model=model;this.timestamp=timestamp;this.index=index;this._imageData=null;this._snapshot=null;}
static _fromEvent(model,event,index){const frame=new Frame(model,event.startTime,index);frame._imageData=event.args['data'];return frame;}
static _fromSnapshot(model,snapshot,index){const frame=new Frame(model,snapshot.startTime,index);frame._snapshot=snapshot;return frame;}
model(){return this._model;}
imageDataPromise(){if(this._imageData||!this._snapshot){return Promise.resolve(this._imageData);}
return(this._snapshot.objectPromise());}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.FilmStripModel=FilmStripModel;SDK.FilmStripModel.Frame=Frame;export default class EmulationModel extends SDK.SDKModel{constructor(target){super(target);this._emulationAgent=target.emulationAgent();this._pageAgent=target.pageAgent();this._deviceOrientationAgent=target.deviceOrientationAgent();this._cssModel=target.model(SDK.CSSModel);this._overlayModel=target.model(SDK.OverlayModel);if(this._overlayModel){this._overlayModel.addEventListener(SDK.OverlayModel.Events.InspectModeWillBeToggled,this._updateTouch,this);}
const disableJavascriptSetting=Common.settings.moduleSetting('javaScriptDisabled');disableJavascriptSetting.addChangeListener(()=>this._emulationAgent.setScriptExecutionDisabled(disableJavascriptSetting.get()));if(disableJavascriptSetting.get()){this._emulationAgent.setScriptExecutionDisabled(true);}
const mediaTypeSetting=Common.moduleSetting('emulatedCSSMedia');const mediaFeaturePrefersColorSchemeSetting=Common.moduleSetting('emulatedCSSMediaFeaturePrefersColorScheme');const mediaFeaturePrefersReducedMotionSetting=Common.moduleSetting('emulatedCSSMediaFeaturePrefersReducedMotion');this._mediaConfiguration=new Map([['type',mediaTypeSetting.get()],['prefers-color-scheme',mediaFeaturePrefersColorSchemeSetting.get()],['prefers-reduced-motion',mediaFeaturePrefersReducedMotionSetting.get()],]);mediaTypeSetting.addChangeListener(()=>{this._mediaConfiguration.set('type',mediaTypeSetting.get());this._updateCssMedia();});mediaFeaturePrefersColorSchemeSetting.addChangeListener(()=>{this._mediaConfiguration.set('prefers-color-scheme',mediaFeaturePrefersColorSchemeSetting.get());this._updateCssMedia();});mediaFeaturePrefersReducedMotionSetting.addChangeListener(()=>{this._mediaConfiguration.set('prefers-reduced-motion',mediaFeaturePrefersReducedMotionSetting.get());this._updateCssMedia();});this._updateCssMedia();this._touchEnabled=false;this._touchMobile=false;this._customTouchEnabled=false;this._touchConfiguration={enabled:false,configuration:'mobile',scriptId:''};}
supportsDeviceEmulation(){return this.target().hasAllCapabilities(SDK.Target.Capability.DeviceEmulation);}
resetPageScaleFactor(){return this._emulationAgent.resetPageScaleFactor();}
emulateDevice(metrics){if(metrics){return this._emulationAgent.invoke_setDeviceMetricsOverride(metrics);}else{return this._emulationAgent.clearDeviceMetricsOverride();}}
overlayModel(){return this._overlayModel;}
async emulateGeolocation(geolocation){if(!geolocation){this._emulationAgent.clearGeolocationOverride();this._emulationAgent.setTimezoneOverride('');}
if(geolocation.error){this._emulationAgent.setGeolocationOverride();this._emulationAgent.setTimezoneOverride('');}else{return Promise.all([this._emulationAgent.setGeolocationOverride(geolocation.latitude,geolocation.longitude,Geolocation.DefaultMockAccuracy).catch(err=>Promise.reject({type:'emulation-set-geolocation',message:err.message})),this._emulationAgent.setTimezoneOverride(geolocation.timezoneId).catch(err=>Promise.reject({type:'emulation-set-timezone',message:err.message}))]);}}
emulateDeviceOrientation(deviceOrientation){if(deviceOrientation){this._deviceOrientationAgent.setDeviceOrientationOverride(deviceOrientation.alpha,deviceOrientation.beta,deviceOrientation.gamma);}else{this._deviceOrientationAgent.clearDeviceOrientationOverride();}}
_emulateCSSMedia(type,features){this._emulationAgent.setEmulatedMedia(type,features);if(this._cssModel){this._cssModel.mediaQueryResultChanged();}}
setCPUThrottlingRate(rate){this._emulationAgent.setCPUThrottlingRate(rate);}
emulateTouch(enabled,mobile){this._touchEnabled=enabled;this._touchMobile=mobile;this._updateTouch();}
overrideEmulateTouch(enabled){this._customTouchEnabled=enabled;this._updateTouch();}
_updateTouch(){let configuration={enabled:this._touchEnabled,configuration:this._touchMobile?'mobile':'desktop',};if(this._customTouchEnabled){configuration={enabled:true,configuration:'mobile'};}
if(this._overlayModel&&this._overlayModel.inspectModeEnabled()){configuration={enabled:false,configuration:'mobile'};}
if(!this._touchConfiguration.enabled&&!configuration.enabled){return;}
if(this._touchConfiguration.enabled&&configuration.enabled&&this._touchConfiguration.configuration===configuration.configuration){return;}
this._touchConfiguration=configuration;this._emulationAgent.setTouchEmulationEnabled(configuration.enabled,1);this._emulationAgent.setEmitTouchEventsForMouse(configuration.enabled,configuration.configuration);}
_updateCssMedia(){const type=this._mediaConfiguration.get('type');const features=[{name:'prefers-color-scheme',value:this._mediaConfiguration.get('prefers-color-scheme'),},{name:'prefers-reduced-motion',value:this._mediaConfiguration.get('prefers-reduced-motion'),},];this._emulateCSSMedia(type,features);}}
export class Geolocation{constructor(latitude,longitude,timezoneId,error){this.latitude=latitude;this.longitude=longitude;this.timezoneId=timezoneId;this.error=error;}
static parseSetting(value){if(value){const[position,timezoneId,error]=value.split(':');const[latitude,longitude]=position.split('@');return new Geolocation(parseFloat(latitude),parseFloat(longitude),timezoneId,Boolean(error));}
return new Geolocation(0,0,'',false);}
static parseUserInput(latitudeString,longitudeString,timezoneId){if(!latitudeString&&!longitudeString){return null;}
const{valid:isLatitudeValid}=Geolocation.latitudeValidator(latitudeString);const{valid:isLongitudeValid}=Geolocation.longitudeValidator(longitudeString);if(!isLatitudeValid&&!isLongitudeValid){return null;}
const latitude=isLatitudeValid?parseFloat(latitudeString):-1;const longitude=isLongitudeValid?parseFloat(longitudeString):-1;return new Geolocation(latitude,longitude,timezoneId,false);}
static latitudeValidator(value){const numValue=parseFloat(value);const valid=/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(value)&&numValue>=-90&&numValue<=90;return{valid};}
static longitudeValidator(value){const numValue=parseFloat(value);const valid=/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(value)&&numValue>=-180&&numValue<=180;return{valid};}
static timezoneIdValidator(value){const valid=value===''||/[a-zA-Z]/.test(value);return{valid};}
toSetting(){return`${this.latitude}@${this.longitude}:${this.timezoneId}:${this.error || ''}`;}}
Geolocation.DefaultMockAccuracy=150;export class DeviceOrientation{constructor(alpha,beta,gamma){this.alpha=alpha;this.beta=beta;this.gamma=gamma;}
static parseSetting(value){if(value){const jsonObject=JSON.parse(value);return new DeviceOrientation(jsonObject.alpha,jsonObject.beta,jsonObject.gamma);}
return new DeviceOrientation(0,0,0);}
static parseUserInput(alphaString,betaString,gammaString){if(!alphaString&&!betaString&&!gammaString){return null;}
const{valid:isAlphaValid}=DeviceOrientation.validator(alphaString);const{valid:isBetaValid}=DeviceOrientation.validator(betaString);const{valid:isGammaValid}=DeviceOrientation.validator(gammaString);if(!isAlphaValid&&!isBetaValid&&!isGammaValid){return null;}
const alpha=isAlphaValid?parseFloat(alphaString):-1;const beta=isBetaValid?parseFloat(betaString):-1;const gamma=isGammaValid?parseFloat(gammaString):-1;return new DeviceOrientation(alpha,beta,gamma);}
static validator(value){const valid=/^([+-]?[\d]+(\.\d+)?|[+-]?\.\d+)$/.test(value);return{valid};}
toSetting(){return JSON.stringify(this);}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.EmulationModel=EmulationModel;SDK.EmulationModel.Geolocation=Geolocation;SDK.EmulationModel.DeviceOrientation=DeviceOrientation;SDK.SDKModel.register(EmulationModel,SDK.Target.Capability.Emulation,true);export class DOMNode{constructor(domModel){this._domModel=domModel;}
static create(domModel,doc,isInShadowTree,payload){const node=new SDK.DOMNode(domModel);node._init(doc,isInShadowTree,payload);return node;}
_init(doc,isInShadowTree,payload){this._agent=this._domModel._agent;this.ownerDocument=doc;this._isInShadowTree=isInShadowTree;this.id=payload.nodeId;this._backendNodeId=payload.backendNodeId;this._domModel._idToDOMNode[this.id]=this;this._nodeType=payload.nodeType;this._nodeName=payload.nodeName;this._localName=payload.localName;this._nodeValue=payload.nodeValue;this._pseudoType=payload.pseudoType;this._shadowRootType=payload.shadowRootType;this._frameOwnerFrameId=payload.frameId||null;this._xmlVersion=payload.xmlVersion;this._isSVGNode=!!payload.isSVG;this._creationStackTrace=null;this._shadowRoots=[];this._attributes=[];this._attributesMap={};if(payload.attributes){this._setAttributesPayload(payload.attributes);}
this._markers=new Map();this._subtreeMarkerCount=0;this._childNodeCount=payload.childNodeCount||0;this._children=null;this.nextSibling=null;this.previousSibling=null;this.firstChild=null;this.lastChild=null;this.parentNode=null;if(payload.shadowRoots){for(let i=0;i<payload.shadowRoots.length;++i){const root=payload.shadowRoots[i];const node=SDK.DOMNode.create(this._domModel,this.ownerDocument,true,root);this._shadowRoots.push(node);node.parentNode=this;}}
if(payload.templateContent){this._templateContent=SDK.DOMNode.create(this._domModel,this.ownerDocument,true,payload.templateContent);this._templateContent.parentNode=this;this._children=[];}
if(payload.contentDocument){this._contentDocument=new DOMDocument(this._domModel,payload.contentDocument);this._contentDocument.parentNode=this;this._children=[];}else if((payload.nodeName==='IFRAME'||payload.nodeName==='PORTAL')&&payload.frameId){const childTarget=SDK.targetManager.targetById(payload.frameId);const childModel=childTarget?childTarget.model(DOMModel):null;if(childModel){this._childDocumentPromiseForTesting=childModel.requestDocument();}
this._children=[];}
if(payload.importedDocument){this._importedDocument=SDK.DOMNode.create(this._domModel,this.ownerDocument,true,payload.importedDocument);this._importedDocument.parentNode=this;this._children=[];}
if(payload.distributedNodes){this._setDistributedNodePayloads(payload.distributedNodes);}
if(payload.children){this._setChildrenPayload(payload.children);}
this._setPseudoElements(payload.pseudoElements);if(this._nodeType===Node.ELEMENT_NODE){if(this.ownerDocument&&!this.ownerDocument.documentElement&&this._nodeName==='HTML'){this.ownerDocument.documentElement=this;}
if(this.ownerDocument&&!this.ownerDocument.body&&this._nodeName==='BODY'){this.ownerDocument.body=this;}}else if(this._nodeType===Node.DOCUMENT_TYPE_NODE){this.publicId=payload.publicId;this.systemId=payload.systemId;this.internalSubset=payload.internalSubset;}else if(this._nodeType===Node.ATTRIBUTE_NODE){this.name=payload.name;this.value=payload.value;}}
isSVGNode(){return this._isSVGNode;}
creationStackTrace(){if(this._creationStackTrace){return this._creationStackTrace;}
const stackTracesPromise=this._agent.invoke_getNodeStackTraces({nodeId:this.id});this._creationStackTrace=stackTracesPromise.then(res=>res.creation);return this._creationStackTrace;}
domModel(){return this._domModel;}
backendNodeId(){return this._backendNodeId;}
children(){return this._children?this._children.slice():null;}
hasAttributes(){return this._attributes.length>0;}
childNodeCount(){return this._childNodeCount;}
hasShadowRoots(){return!!this._shadowRoots.length;}
shadowRoots(){return this._shadowRoots.slice();}
templateContent(){return this._templateContent||null;}
contentDocument(){return this._contentDocument||null;}
isIframe(){return this._nodeName==='IFRAME';}
isPortal(){return this._nodeName==='PORTAL';}
importedDocument(){return this._importedDocument||null;}
nodeType(){return this._nodeType;}
nodeName(){return this._nodeName;}
pseudoType(){return this._pseudoType;}
hasPseudoElements(){return this._pseudoElements.size>0;}
pseudoElements(){return this._pseudoElements;}
beforePseudoElement(){if(!this._pseudoElements){return null;}
return this._pseudoElements.get(SDK.DOMNode.PseudoElementNames.Before);}
afterPseudoElement(){if(!this._pseudoElements){return null;}
return this._pseudoElements.get(SDK.DOMNode.PseudoElementNames.After);}
markerPseudoElement(){if(!this._pseudoElements){return null;}
return this._pseudoElements.get(SDK.DOMNode.PseudoElementNames.Marker);}
isInsertionPoint(){return!this.isXMLNode()&&(this._nodeName==='SHADOW'||this._nodeName==='CONTENT'||this._nodeName==='SLOT');}
distributedNodes(){return this._distributedNodes||[];}
isInShadowTree(){return this._isInShadowTree;}
ancestorShadowHost(){const ancestorShadowRoot=this.ancestorShadowRoot();return ancestorShadowRoot?ancestorShadowRoot.parentNode:null;}
ancestorShadowRoot(){if(!this._isInShadowTree){return null;}
let current=this;while(current&&!current.isShadowRoot()){current=current.parentNode;}
return current;}
ancestorUserAgentShadowRoot(){const ancestorShadowRoot=this.ancestorShadowRoot();if(!ancestorShadowRoot){return null;}
return ancestorShadowRoot.shadowRootType()===SDK.DOMNode.ShadowRootTypes.UserAgent?ancestorShadowRoot:null;}
isShadowRoot(){return!!this._shadowRootType;}
shadowRootType(){return this._shadowRootType||null;}
nodeNameInCorrectCase(){const shadowRootType=this.shadowRootType();if(shadowRootType){return'#shadow-root ('+shadowRootType+')';}
if(!this.localName()){return this.nodeName();}
if(this.localName().length!==this.nodeName().length){return this.nodeName();}
return this.localName();}
setNodeName(name,callback){this._agent.invoke_setNodeName({nodeId:this.id,name}).then(response=>{if(!response[Protocol.Error]){this._domModel.markUndoableState();}
if(callback){callback(response[Protocol.Error]||null,this._domModel.nodeForId(response.nodeId));}});}
localName(){return this._localName;}
nodeValue(){return this._nodeValue;}
setNodeValue(value,callback){this._agent.invoke_setNodeValue({nodeId:this.id,value}).then(response=>{if(!response[Protocol.Error]){this._domModel.markUndoableState();}
if(callback){callback(response[Protocol.Error]||null);}});}
getAttribute(name){const attr=this._attributesMap[name];return attr?attr.value:undefined;}
setAttribute(name,text,callback){this._agent.invoke_setAttributesAsText({nodeId:this.id,text,name}).then(response=>{if(!response[Protocol.Error]){this._domModel.markUndoableState();}
if(callback){callback(response[Protocol.Error]||null);}});}
setAttributeValue(name,value,callback){this._agent.invoke_setAttributeValue({nodeId:this.id,name,value}).then(response=>{if(!response[Protocol.Error]){this._domModel.markUndoableState();}
if(callback){callback(response[Protocol.Error]||null);}});}
setAttributeValuePromise(name,value){return new Promise(fulfill=>this.setAttributeValue(name,value,fulfill));}
attributes(){return this._attributes;}
async removeAttribute(name){const response=await this._agent.invoke_removeAttribute({nodeId:this.id,name});if(response[Protocol.Error]){return;}
delete this._attributesMap[name];const index=this._attributes.findIndex(attr=>attr.name===name);if(index!==-1){this._attributes.splice(index,1);}
this._domModel.markUndoableState();}
getChildNodes(callback){if(this._children){callback(this.children());return;}
this._agent.invoke_requestChildNodes({nodeId:this.id}).then(response=>{callback(response[Protocol.Error]?null:this.children());});}
async getSubtree(depth,pierce){const response=await this._agent.invoke_requestChildNodes({nodeId:this.id,depth:depth,pierce:pierce});return response[Protocol.Error]?null:this._children;}
getOuterHTML(){return this._agent.getOuterHTML(this.id);}
setOuterHTML(html,callback){this._agent.invoke_setOuterHTML({nodeId:this.id,outerHTML:html}).then(response=>{if(!response[Protocol.Error]){this._domModel.markUndoableState();}
if(callback){callback(response[Protocol.Error]||null);}});}
removeNode(callback){this._agent.invoke_removeNode({nodeId:this.id}).then(response=>{if(!response[Protocol.Error]){this._domModel.markUndoableState();}
if(callback){callback(response[Protocol.Error]||null);}});}
async copyNode(){const text=await this._agent.getOuterHTML(this.id);if(text!==null){Host.InspectorFrontendHost.copyText(text);}
return text;}
path(){function canPush(node){return node&&('index'in node||(node.isShadowRoot()&&node.parentNode))&&node._nodeName.length;}
const path=[];let node=this;while(canPush(node)){const index=typeof node.index==='number'?node.index:(node.shadowRootType()===SDK.DOMNode.ShadowRootTypes.UserAgent?'u':'a');path.push([index,node._nodeName]);node=node.parentNode;}
path.reverse();return path.join(',');}
isAncestor(node){if(!node){return false;}
let currentNode=node.parentNode;while(currentNode){if(this===currentNode){return true;}
currentNode=currentNode.parentNode;}
return false;}
isDescendant(descendant){return descendant!==null&&descendant.isAncestor(this);}
frameId(){let node=this.parentNode||this;while(!node._frameOwnerFrameId&&node.parentNode){node=node.parentNode;}
return node._frameOwnerFrameId;}
_setAttributesPayload(attrs){let attributesChanged=!this._attributes||attrs.length!==this._attributes.length*2;const oldAttributesMap=this._attributesMap||{};this._attributes=[];this._attributesMap={};for(let i=0;i<attrs.length;i+=2){const name=attrs[i];const value=attrs[i+1];this._addAttribute(name,value);if(attributesChanged){continue;}
if(!oldAttributesMap[name]||oldAttributesMap[name].value!==value){attributesChanged=true;}}
return attributesChanged;}
_insertChild(prev,payload){const node=SDK.DOMNode.create(this._domModel,this.ownerDocument,this._isInShadowTree,payload);this._children.splice(this._children.indexOf(prev)+1,0,node);this._renumber();return node;}
_removeChild(node){if(node.pseudoType()){this._pseudoElements.delete(node.pseudoType());}else{const shadowRootIndex=this._shadowRoots.indexOf(node);if(shadowRootIndex!==-1){this._shadowRoots.splice(shadowRootIndex,1);}else{console.assert(this._children.indexOf(node)!==-1);this._children.splice(this._children.indexOf(node),1);}}
node.parentNode=null;this._subtreeMarkerCount-=node._subtreeMarkerCount;if(node._subtreeMarkerCount){this._domModel.dispatchEventToListeners(Events.MarkersChanged,this);}
this._renumber();}
_setChildrenPayload(payloads){this._children=[];for(let i=0;i<payloads.length;++i){const payload=payloads[i];const node=SDK.DOMNode.create(this._domModel,this.ownerDocument,this._isInShadowTree,payload);this._children.push(node);}
this._renumber();}
_setPseudoElements(payloads){this._pseudoElements=new Map();if(!payloads){return;}
for(let i=0;i<payloads.length;++i){const node=SDK.DOMNode.create(this._domModel,this.ownerDocument,this._isInShadowTree,payloads[i]);node.parentNode=this;this._pseudoElements.set(node.pseudoType(),node);}}
_setDistributedNodePayloads(payloads){this._distributedNodes=[];for(const payload of payloads){this._distributedNodes.push(new DOMNodeShortcut(this._domModel.target(),payload.backendNodeId,payload.nodeType,payload.nodeName));}}
_renumber(){this._childNodeCount=this._children.length;if(this._childNodeCount===0){this.firstChild=null;this.lastChild=null;return;}
this.firstChild=this._children[0];this.lastChild=this._children[this._childNodeCount-1];for(let i=0;i<this._childNodeCount;++i){const child=this._children[i];child.index=i;child.nextSibling=i+1<this._childNodeCount?this._children[i+1]:null;child.previousSibling=i-1>=0?this._children[i-1]:null;child.parentNode=this;}}
_addAttribute(name,value){const attr={name:name,value:value,_node:this};this._attributesMap[name]=attr;this._attributes.push(attr);}
_setAttribute(name,value){const attr=this._attributesMap[name];if(attr){attr.value=value;}else{this._addAttribute(name,value);}}
_removeAttribute(name){const attr=this._attributesMap[name];if(attr){this._attributes.remove(attr);delete this._attributesMap[name];}}
copyTo(targetNode,anchorNode,callback){this._agent.invoke_copyTo({nodeId:this.id,targetNodeId:targetNode.id,insertBeforeNodeId:anchorNode?anchorNode.id:undefined}).then(response=>{if(!response[Protocol.Error]){this._domModel.markUndoableState();}
if(callback){callback(response[Protocol.Error]||null,response.nodeId);}});}
moveTo(targetNode,anchorNode,callback){this._agent.invoke_moveTo({nodeId:this.id,targetNodeId:targetNode.id,insertBeforeNodeId:anchorNode?anchorNode.id:undefined}).then(response=>{if(!response[Protocol.Error]){this._domModel.markUndoableState();}
if(callback){callback(response[Protocol.Error]||null,this._domModel.nodeForId(response.nodeId));}});}
isXMLNode(){return!!this._xmlVersion;}
setMarker(name,value){if(value===null){if(!this._markers.has(name)){return;}
this._markers.delete(name);for(let node=this;node;node=node.parentNode){--node._subtreeMarkerCount;}
for(let node=this;node;node=node.parentNode){this._domModel.dispatchEventToListeners(Events.MarkersChanged,node);}
return;}
if(this.parentNode&&!this._markers.has(name)){for(let node=this;node;node=node.parentNode){++node._subtreeMarkerCount;}}
this._markers.set(name,value);for(let node=this;node;node=node.parentNode){this._domModel.dispatchEventToListeners(Events.MarkersChanged,node);}}
marker(name){return this._markers.get(name)||null;}
traverseMarkers(visitor){function traverse(node){if(!node._subtreeMarkerCount){return;}
for(const marker of node._markers.keys()){visitor(node,marker);}
if(!node._children){return;}
for(const child of node._children){traverse(child);}}
traverse(this);}
resolveURL(url){if(!url){return url;}
for(let frameOwnerCandidate=this;frameOwnerCandidate;frameOwnerCandidate=frameOwnerCandidate.parentNode){if(frameOwnerCandidate.baseURL){return Common.ParsedURL.completeURL(frameOwnerCandidate.baseURL,url);}}
return null;}
highlight(mode){this._domModel.overlayModel().highlightInOverlay({node:this},mode);}
highlightForTwoSeconds(){this._domModel.overlayModel().highlightInOverlayForTwoSeconds({node:this});}
async resolveToObject(objectGroup){const object=await this._agent.resolveNode(this.id,undefined,objectGroup);return object&&this._domModel._runtimeModel.createRemoteObject(object);}
boxModel(){return this._agent.getBoxModel(this.id);}
setAsInspectedNode(){let node=this;while(true){let ancestor=node.ancestorUserAgentShadowRoot();if(!ancestor){break;}
ancestor=node.ancestorShadowHost();if(!ancestor){break;}
node=ancestor;}
this._agent.setInspectedNode(node.id);}
enclosingElementOrSelf(){let node=this;if(node&&node.nodeType()===Node.TEXT_NODE&&node.parentNode){node=node.parentNode;}
if(node&&node.nodeType()!==Node.ELEMENT_NODE){node=null;}
return node;}
async scrollIntoView(){const node=this.enclosingElementOrSelf();if(!node){return;}
const object=await node.resolveToObject();if(!object){return;}
object.callFunction(scrollIntoView);object.release();node.highlightForTwoSeconds();function scrollIntoView(){this.scrollIntoViewIfNeeded(true);}}
async focus(){const node=this.enclosingElementOrSelf();const object=await node.resolveToObject();if(!object){return;}
await object.callFunction(focusInPage);object.release();node.highlightForTwoSeconds();this._domModel.target().pageAgent().bringToFront();function focusInPage(){this.focus();}}
simpleSelector(){const lowerCaseName=this.localName()||this.nodeName().toLowerCase();if(this.nodeType()!==Node.ELEMENT_NODE){return lowerCaseName;}
if(lowerCaseName==='input'&&this.getAttribute('type')&&!this.getAttribute('id')&&!this.getAttribute('class')){return lowerCaseName+'[type="'+this.getAttribute('type')+'"]';}
if(this.getAttribute('id')){return lowerCaseName+'#'+this.getAttribute('id');}
if(this.getAttribute('class')){return(lowerCaseName==='div'?'':lowerCaseName)+'.'+
this.getAttribute('class').trim().replace(/\s+/g,'.');}
return lowerCaseName;}}
DOMNode.PseudoElementNames={Before:'before',After:'after',Marker:'marker'};DOMNode.ShadowRootTypes={UserAgent:'user-agent',Open:'open',Closed:'closed'};export class DeferredDOMNode{constructor(target,backendNodeId){this._domModel=(target.model(DOMModel));this._backendNodeId=backendNodeId;}
resolve(callback){this.resolvePromise().then(callback);}
async resolvePromise(){const nodeIds=await this._domModel.pushNodesByBackendIdsToFrontend(new Set([this._backendNodeId]));return nodeIds&&nodeIds.get(this._backendNodeId)||null;}
backendNodeId(){return this._backendNodeId;}
domModel(){return this._domModel;}
highlight(){this._domModel.overlayModel().highlightInOverlay({deferredNode:this});}}
export class DOMNodeShortcut{constructor(target,backendNodeId,nodeType,nodeName){this.nodeType=nodeType;this.nodeName=nodeName;this.deferredNode=new SDK.DeferredDOMNode(target,backendNodeId);}}
export class DOMDocument extends DOMNode{constructor(domModel,payload){super(domModel);this._init(this,false,payload);this.documentURL=payload.documentURL||'';this.baseURL=payload.baseURL||'';}}
export default class DOMModel extends SDK.SDKModel{constructor(target){super(target);this._agent=target.domAgent();this._idToDOMNode={};this._document=null;this._attributeLoadNodeIds=new Set();target.registerDOMDispatcher(new DOMDispatcher(this));this._runtimeModel=(target.model(SDK.RuntimeModel));if(!target.suspended()){this._agent.enable();}
if(Root.Runtime.experiments.isEnabled('captureNodeCreationStacks')){this._agent.setNodeStackTracesEnabled(true);}}
runtimeModel(){return this._runtimeModel;}
cssModel(){return(this.target().model(SDK.CSSModel));}
overlayModel(){return(this.target().model(SDK.OverlayModel));}
static cancelSearch(){for(const domModel of SDK.targetManager.models(DOMModel)){domModel._cancelSearch();}}
_scheduleMutationEvent(node){if(!this.hasEventListeners(Events.DOMMutated)){return;}
this._lastMutationId=(this._lastMutationId||0)+1;Promise.resolve().then(callObserve.bind(this,node,this._lastMutationId));function callObserve(node,mutationId){if(!this.hasEventListeners(Events.DOMMutated)||this._lastMutationId!==mutationId){return;}
this.dispatchEventToListeners(Events.DOMMutated,node);}}
requestDocument(){if(this._document){return Promise.resolve(this._document);}
if(!this._pendingDocumentRequestPromise){this._pendingDocumentRequestPromise=this._requestDocument();}
return this._pendingDocumentRequestPromise;}
async _requestDocument(){const documentPayload=await this._agent.getDocument();delete this._pendingDocumentRequestPromise;if(documentPayload){this._setDocument(documentPayload);}
if(!this._document){console.error('No document');return null;}
const parentModel=this.parentModel();if(parentModel&&!this._frameOwnerNode){await parentModel.requestDocument();const response=await parentModel._agent.invoke_getFrameOwner({frameId:this.target().id()});if(!response[Protocol.Error]){this._frameOwnerNode=parentModel.nodeForId(response.nodeId);}}
if(this._frameOwnerNode){const oldDocument=this._frameOwnerNode._contentDocument;this._frameOwnerNode._contentDocument=this._document;this._frameOwnerNode._children=[];if(this._document){this._document.parentNode=this._frameOwnerNode;this.dispatchEventToListeners(Events.NodeInserted,this._document);}else if(oldDocument){this.dispatchEventToListeners(Events.NodeRemoved,{node:oldDocument,parent:this._frameOwnerNode});}}
return this._document;}
existingDocument(){return this._document;}
async pushNodeToFrontend(objectId){await this.requestDocument();const nodeId=await this._agent.requestNode(objectId);return nodeId?this.nodeForId(nodeId):null;}
pushNodeByPathToFrontend(path){return this.requestDocument().then(()=>this._agent.pushNodeByPathToFrontend(path));}
async pushNodesByBackendIdsToFrontend(backendNodeIds){await this.requestDocument();const backendNodeIdsArray=backendNodeIds.valuesArray();const nodeIds=await this._agent.pushNodesByBackendIdsToFrontend(backendNodeIdsArray);if(!nodeIds){return null;}
const map=new Map();for(let i=0;i<nodeIds.length;++i){if(nodeIds[i]){map.set(backendNodeIdsArray[i],this.nodeForId(nodeIds[i]));}}
return map;}
_wrapClientCallback(callback){function wrapper(error,result){callback(error?null:result||null);}
return wrapper;}
_attributeModified(nodeId,name,value){const node=this._idToDOMNode[nodeId];if(!node){return;}
node._setAttribute(name,value);this.dispatchEventToListeners(Events.AttrModified,{node:node,name:name});this._scheduleMutationEvent(node);}
_attributeRemoved(nodeId,name){const node=this._idToDOMNode[nodeId];if(!node){return;}
node._removeAttribute(name);this.dispatchEventToListeners(Events.AttrRemoved,{node:node,name:name});this._scheduleMutationEvent(node);}
_inlineStyleInvalidated(nodeIds){this._attributeLoadNodeIds.addAll(nodeIds);if(!this._loadNodeAttributesTimeout){this._loadNodeAttributesTimeout=setTimeout(this._loadNodeAttributes.bind(this),20);}}
_loadNodeAttributes(){delete this._loadNodeAttributesTimeout;for(const nodeId of this._attributeLoadNodeIds){this._agent.getAttributes(nodeId).then(attributes=>{if(!attributes){return;}
const node=this._idToDOMNode[nodeId];if(!node){return;}
if(node._setAttributesPayload(attributes)){this.dispatchEventToListeners(Events.AttrModified,{node:node,name:'style'});this._scheduleMutationEvent(node);}});}
this._attributeLoadNodeIds.clear();}
_characterDataModified(nodeId,newValue){const node=this._idToDOMNode[nodeId];node._nodeValue=newValue;this.dispatchEventToListeners(Events.CharacterDataModified,node);this._scheduleMutationEvent(node);}
nodeForId(nodeId){return this._idToDOMNode[nodeId]||null;}
_documentUpdated(){const documentWasRequested=this._document||this._pendingDocumentRequestPromise;this._setDocument(null);if(this.parentModel()&&documentWasRequested){this.requestDocument();}}
_setDocument(payload){this._idToDOMNode={};if(payload&&'nodeId'in payload){this._document=new DOMDocument(this,payload);}else{this._document=null;}
SDK.domModelUndoStack._dispose(this);if(!this.parentModel()){this.dispatchEventToListeners(Events.DocumentUpdated,this);}}
_setDetachedRoot(payload){if(payload.nodeName==='#document'){new DOMDocument(this,payload);}else{SDK.DOMNode.create(this,null,false,payload);}}
_setChildNodes(parentId,payloads){if(!parentId&&payloads.length){this._setDetachedRoot(payloads[0]);return;}
const parent=this._idToDOMNode[parentId];parent._setChildrenPayload(payloads);}
_childNodeCountUpdated(nodeId,newValue){const node=this._idToDOMNode[nodeId];node._childNodeCount=newValue;this.dispatchEventToListeners(Events.ChildNodeCountUpdated,node);this._scheduleMutationEvent(node);}
_childNodeInserted(parentId,prevId,payload){const parent=this._idToDOMNode[parentId];const prev=this._idToDOMNode[prevId];const node=parent._insertChild(prev,payload);this._idToDOMNode[node.id]=node;this.dispatchEventToListeners(Events.NodeInserted,node);this._scheduleMutationEvent(node);}
_childNodeRemoved(parentId,nodeId){const parent=this._idToDOMNode[parentId];const node=this._idToDOMNode[nodeId];parent._removeChild(node);this._unbind(node);this.dispatchEventToListeners(Events.NodeRemoved,{node:node,parent:parent});this._scheduleMutationEvent(node);}
_shadowRootPushed(hostId,root){const host=this._idToDOMNode[hostId];if(!host){return;}
const node=SDK.DOMNode.create(this,host.ownerDocument,true,root);node.parentNode=host;this._idToDOMNode[node.id]=node;host._shadowRoots.unshift(node);this.dispatchEventToListeners(Events.NodeInserted,node);this._scheduleMutationEvent(node);}
_shadowRootPopped(hostId,rootId){const host=this._idToDOMNode[hostId];if(!host){return;}
const root=this._idToDOMNode[rootId];if(!root){return;}
host._removeChild(root);this._unbind(root);this.dispatchEventToListeners(Events.NodeRemoved,{node:root,parent:host});this._scheduleMutationEvent(root);}
_pseudoElementAdded(parentId,pseudoElement){const parent=this._idToDOMNode[parentId];if(!parent){return;}
const node=SDK.DOMNode.create(this,parent.ownerDocument,false,pseudoElement);node.parentNode=parent;this._idToDOMNode[node.id]=node;console.assert(!parent._pseudoElements.get(node.pseudoType()));parent._pseudoElements.set(node.pseudoType(),node);this.dispatchEventToListeners(Events.NodeInserted,node);this._scheduleMutationEvent(node);}
_pseudoElementRemoved(parentId,pseudoElementId){const parent=this._idToDOMNode[parentId];if(!parent){return;}
const pseudoElement=this._idToDOMNode[pseudoElementId];if(!pseudoElement){return;}
parent._removeChild(pseudoElement);this._unbind(pseudoElement);this.dispatchEventToListeners(Events.NodeRemoved,{node:pseudoElement,parent:parent});this._scheduleMutationEvent(pseudoElement);}
_distributedNodesUpdated(insertionPointId,distributedNodes){const insertionPoint=this._idToDOMNode[insertionPointId];if(!insertionPoint){return;}
insertionPoint._setDistributedNodePayloads(distributedNodes);this.dispatchEventToListeners(Events.DistributedNodesChanged,insertionPoint);this._scheduleMutationEvent(insertionPoint);}
_unbind(node){delete this._idToDOMNode[node.id];for(let i=0;node._children&&i<node._children.length;++i){this._unbind(node._children[i]);}
for(let i=0;i<node._shadowRoots.length;++i){this._unbind(node._shadowRoots[i]);}
const pseudoElements=node.pseudoElements();for(const value of pseudoElements.values()){this._unbind(value);}
if(node._templateContent){this._unbind(node._templateContent);}}
async performSearch(query,includeUserAgentShadowDOM){const response=await this._agent.invoke_performSearch({query,includeUserAgentShadowDOM});if(!response[Protocol.Error]){this._searchId=response.searchId;}
return response[Protocol.Error]?0:response.resultCount;}
async searchResult(index){if(!this._searchId){return null;}
const nodeIds=await this._agent.getSearchResults(this._searchId,index,index+1);return nodeIds&&nodeIds.length===1?this.nodeForId(nodeIds[0]):null;}
_cancelSearch(){if(!this._searchId){return;}
this._agent.discardSearchResults(this._searchId);delete this._searchId;}
classNamesPromise(nodeId){return this._agent.collectClassNamesFromSubtree(nodeId).then(classNames=>classNames||[]);}
querySelector(nodeId,selectors){return this._agent.querySelector(nodeId,selectors);}
querySelectorAll(nodeId,selectors){return this._agent.querySelectorAll(nodeId,selectors);}
markUndoableState(minorChange){SDK.domModelUndoStack._markUndoableState(this,minorChange||false);}
async nodeForLocation(x,y,includeUserAgentShadowDOM){const response=await this._agent.invoke_getNodeForLocation({x,y,includeUserAgentShadowDOM});if(response[Protocol.Error]||!response.nodeId){return null;}
return this.nodeForId(response.nodeId);}
pushObjectAsNodeToFrontend(object){return object.isNode()?this.pushNodeToFrontend((object.objectId)):Promise.resolve(null);}
suspendModel(){return this._agent.disable().then(()=>this._setDocument(null));}
resumeModel(){return this._agent.enable();}
dispose(){SDK.domModelUndoStack._dispose(this);}
parentModel(){const parentTarget=this.target().parentTarget();return parentTarget?parentTarget.model(DOMModel):null;}}
export const Events={AttrModified:Symbol('AttrModified'),AttrRemoved:Symbol('AttrRemoved'),CharacterDataModified:Symbol('CharacterDataModified'),DOMMutated:Symbol('DOMMutated'),NodeInserted:Symbol('NodeInserted'),NodeRemoved:Symbol('NodeRemoved'),DocumentUpdated:Symbol('DocumentUpdated'),ChildNodeCountUpdated:Symbol('ChildNodeCountUpdated'),DistributedNodesChanged:Symbol('DistributedNodesChanged'),MarkersChanged:Symbol('MarkersChanged')};class DOMDispatcher{constructor(domModel){this._domModel=domModel;}
documentUpdated(){this._domModel._documentUpdated();}
attributeModified(nodeId,name,value){this._domModel._attributeModified(nodeId,name,value);}
attributeRemoved(nodeId,name){this._domModel._attributeRemoved(nodeId,name);}
inlineStyleInvalidated(nodeIds){this._domModel._inlineStyleInvalidated(nodeIds);}
characterDataModified(nodeId,characterData){this._domModel._characterDataModified(nodeId,characterData);}
setChildNodes(parentId,payloads){this._domModel._setChildNodes(parentId,payloads);}
childNodeCountUpdated(nodeId,childNodeCount){this._domModel._childNodeCountUpdated(nodeId,childNodeCount);}
childNodeInserted(parentNodeId,previousNodeId,payload){this._domModel._childNodeInserted(parentNodeId,previousNodeId,payload);}
childNodeRemoved(parentNodeId,nodeId){this._domModel._childNodeRemoved(parentNodeId,nodeId);}
shadowRootPushed(hostId,root){this._domModel._shadowRootPushed(hostId,root);}
shadowRootPopped(hostId,rootId){this._domModel._shadowRootPopped(hostId,rootId);}
pseudoElementAdded(parentId,pseudoElement){this._domModel._pseudoElementAdded(parentId,pseudoElement);}
pseudoElementRemoved(parentId,pseudoElementId){this._domModel._pseudoElementRemoved(parentId,pseudoElementId);}
distributedNodesUpdated(insertionPointId,distributedNodes){this._domModel._distributedNodesUpdated(insertionPointId,distributedNodes);}}
class DOMModelUndoStack{constructor(){this._stack=[];this._index=0;this._lastModelWithMinorChange=null;}
_markUndoableState(model,minorChange){if(this._lastModelWithMinorChange&&model!==this._lastModelWithMinorChange){this._lastModelWithMinorChange.markUndoableState();this._lastModelWithMinorChange=null;}
if(minorChange&&this._lastModelWithMinorChange===model){return;}
this._stack=this._stack.slice(0,this._index);this._stack.push(model);this._index=this._stack.length;if(minorChange){this._lastModelWithMinorChange=model;}else{model._agent.markUndoableState();this._lastModelWithMinorChange=null;}}
undo(){if(this._index===0){return Promise.resolve();}
--this._index;this._lastModelWithMinorChange=null;return this._stack[this._index]._agent.undo();}
redo(){if(this._index>=this._stack.length){return Promise.resolve();}
++this._index;this._lastModelWithMinorChange=null;return this._stack[this._index-1]._agent.redo();}
_dispose(model){let shift=0;for(let i=0;i<this._index;++i){if(this._stack[i]===model){++shift;}}
this._stack.remove(model);this._index-=shift;if(this._lastModelWithMinorChange===model){this._lastModelWithMinorChange=null;}}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.DOMModel=DOMModel;SDK.DOMModel.Events=Events;SDK.DeferredDOMNode=DeferredDOMNode;SDK.DOMNodeShortcut=DOMNodeShortcut;SDK.DOMDocument=DOMDocument;SDK.DOMNode=DOMNode;SDK.domModelUndoStack=new DOMModelUndoStack();SDK.DOMNode.Attribute;SDK.SDKModel.register(DOMModel,SDK.Target.Capability.DOM,true);export default class DOMDebuggerModel extends SDK.SDKModel{constructor(target){super(target);this._agent=target.domdebuggerAgent();this._runtimeModel=(target.model(SDK.RuntimeModel));this._domModel=(target.model(SDK.DOMModel));this._domModel.addEventListener(SDK.DOMModel.Events.DocumentUpdated,this._documentUpdated,this);this._domModel.addEventListener(SDK.DOMModel.Events.NodeRemoved,this._nodeRemoved,this);this._domBreakpoints=[];this._domBreakpointsSetting=Common.settings.createLocalSetting('domBreakpoints',[]);if(this._domModel.existingDocument()){this._documentUpdated();}}
runtimeModel(){return this._runtimeModel;}
async eventListeners(remoteObject){console.assert(remoteObject.runtimeModel()===this._runtimeModel);if(!remoteObject.objectId){return[];}
const payloads=await this._agent.getEventListeners((remoteObject.objectId));const eventListeners=[];for(const payload of payloads||[]){const location=this._runtimeModel.debuggerModel().createRawLocationByScriptId(payload.scriptId,payload.lineNumber,payload.columnNumber);if(!location){continue;}
eventListeners.push(new SDK.EventListener(this,remoteObject,payload.type,payload.useCapture,payload.passive,payload.once,payload.handler?this._runtimeModel.createRemoteObject(payload.handler):null,payload.originalHandler?this._runtimeModel.createRemoteObject(payload.originalHandler):null,location,null));}
return eventListeners;}
retrieveDOMBreakpoints(){this._domModel.requestDocument();}
domBreakpoints(){return this._domBreakpoints.slice();}
hasDOMBreakpoint(node,type){return this._domBreakpoints.some(breakpoint=>(breakpoint.node===node&&breakpoint.type===type));}
setDOMBreakpoint(node,type){for(const breakpoint of this._domBreakpoints){if(breakpoint.node===node&&breakpoint.type===type){this.toggleDOMBreakpoint(breakpoint,true);return breakpoint;}}
const breakpoint=new DOMBreakpoint(this,node,type,true);this._domBreakpoints.push(breakpoint);this._saveDOMBreakpoints();this._enableDOMBreakpoint(breakpoint);this.dispatchEventToListeners(Events.DOMBreakpointAdded,breakpoint);return breakpoint;}
removeDOMBreakpoint(node,type){this._removeDOMBreakpoints(breakpoint=>breakpoint.node===node&&breakpoint.type===type);}
removeAllDOMBreakpoints(){this._removeDOMBreakpoints(breakpoint=>true);}
toggleDOMBreakpoint(breakpoint,enabled){if(enabled===breakpoint.enabled){return;}
breakpoint.enabled=enabled;if(enabled){this._enableDOMBreakpoint(breakpoint);}else{this._disableDOMBreakpoint(breakpoint);}
this.dispatchEventToListeners(Events.DOMBreakpointToggled,breakpoint);}
_enableDOMBreakpoint(breakpoint){this._agent.setDOMBreakpoint(breakpoint.node.id,breakpoint.type);breakpoint.node.setMarker(Marker,true);}
_disableDOMBreakpoint(breakpoint){this._agent.removeDOMBreakpoint(breakpoint.node.id,breakpoint.type);breakpoint.node.setMarker(Marker,this._nodeHasBreakpoints(breakpoint.node)?true:null);}
_nodeHasBreakpoints(node){for(const breakpoint of this._domBreakpoints){if(breakpoint.node===node&&breakpoint.enabled){return true;}}
return false;}
resolveDOMBreakpointData(auxData){const type=auxData['type'];const node=this._domModel.nodeForId(auxData['nodeId']);if(!type||!node){return null;}
let targetNode=null;let insertion=false;if(type===SDK.DOMDebuggerModel.DOMBreakpoint.Type.SubtreeModified){insertion=auxData['insertion']||false;targetNode=this._domModel.nodeForId(auxData['targetNodeId']);}
return{type:type,node:node,targetNode:targetNode,insertion:insertion};}
_currentURL(){const domDocument=this._domModel.existingDocument();return domDocument?domDocument.documentURL:'';}
_documentUpdated(){const removed=this._domBreakpoints;this._domBreakpoints=[];this.dispatchEventToListeners(Events.DOMBreakpointsRemoved,removed);const currentURL=this._currentURL();for(const breakpoint of this._domBreakpointsSetting.get()){if(breakpoint.url===currentURL){this._domModel.pushNodeByPathToFrontend(breakpoint.path).then(appendBreakpoint.bind(this,breakpoint));}}
function appendBreakpoint(breakpoint,nodeId){const node=nodeId?this._domModel.nodeForId(nodeId):null;if(!node){return;}
const domBreakpoint=new DOMBreakpoint(this,node,breakpoint.type,breakpoint.enabled);this._domBreakpoints.push(domBreakpoint);if(breakpoint.enabled){this._enableDOMBreakpoint(domBreakpoint);}
this.dispatchEventToListeners(Events.DOMBreakpointAdded,domBreakpoint);}}
_removeDOMBreakpoints(filter){const removed=[];const left=[];for(const breakpoint of this._domBreakpoints){if(filter(breakpoint)){removed.push(breakpoint);if(breakpoint.enabled){breakpoint.enabled=false;this._disableDOMBreakpoint(breakpoint);}}else{left.push(breakpoint);}}
if(!removed.length){return;}
this._domBreakpoints=left;this._saveDOMBreakpoints();this.dispatchEventToListeners(Events.DOMBreakpointsRemoved,removed);}
_nodeRemoved(event){const node=(event.data.node);const children=node.children()||[];this._removeDOMBreakpoints(breakpoint=>breakpoint.node===node||children.indexOf(breakpoint.node)!==-1);}
_saveDOMBreakpoints(){const currentURL=this._currentURL();const breakpoints=this._domBreakpointsSetting.get().filter(breakpoint=>breakpoint.url!==currentURL);for(const breakpoint of this._domBreakpoints){breakpoints.push({url:currentURL,path:breakpoint.node.path(),type:breakpoint.type,enabled:breakpoint.enabled});}
this._domBreakpointsSetting.set(breakpoints);}}
export const Events={DOMBreakpointAdded:Symbol('DOMBreakpointAdded'),DOMBreakpointToggled:Symbol('DOMBreakpointToggled'),DOMBreakpointsRemoved:Symbol('DOMBreakpointsRemoved'),};const Marker='breakpoint-marker';export class DOMBreakpoint{constructor(domDebuggerModel,node,type,enabled){this.domDebuggerModel=domDebuggerModel;this.node=node;this.type=type;this.enabled=enabled;}}
export class EventListener{constructor(domDebuggerModel,eventTarget,type,useCapture,passive,once,handler,originalHandler,location,customRemoveFunction,origin){this._domDebuggerModel=domDebuggerModel;this._eventTarget=eventTarget;this._type=type;this._useCapture=useCapture;this._passive=passive;this._once=once;this._handler=handler;this._originalHandler=originalHandler||handler;this._location=location;const script=location.script();this._sourceURL=script?script.contentURL():'';this._customRemoveFunction=customRemoveFunction;this._origin=origin||EventListener.Origin.Raw;}
domDebuggerModel(){return this._domDebuggerModel;}
type(){return this._type;}
useCapture(){return this._useCapture;}
passive(){return this._passive;}
once(){return this._once;}
handler(){return this._handler;}
location(){return this._location;}
sourceURL(){return this._sourceURL;}
originalHandler(){return this._originalHandler;}
canRemove(){return!!this._customRemoveFunction||this._origin!==EventListener.Origin.FrameworkUser;}
remove(){if(!this.canRemove()){return Promise.resolve();}
if(this._origin!==EventListener.Origin.FrameworkUser){function removeListener(type,listener,useCapture){this.removeEventListener(type,listener,useCapture);if(this['on'+type]){this['on'+type]=undefined;}}
return(this._eventTarget.callFunction(removeListener,[SDK.RemoteObject.toCallArgument(this._type),SDK.RemoteObject.toCallArgument(this._originalHandler),SDK.RemoteObject.toCallArgument(this._useCapture)]));}
return this._customRemoveFunction.callFunction(callCustomRemove,[SDK.RemoteObject.toCallArgument(this._type),SDK.RemoteObject.toCallArgument(this._originalHandler),SDK.RemoteObject.toCallArgument(this._useCapture),SDK.RemoteObject.toCallArgument(this._passive),]).then(()=>undefined);function callCustomRemove(type,listener,useCapture,passive){this.call(null,type,listener,useCapture,passive);}}
canTogglePassive(){return this._origin!==EventListener.Origin.FrameworkUser;}
togglePassive(){return(this._eventTarget.callFunction(callTogglePassive,[SDK.RemoteObject.toCallArgument(this._type),SDK.RemoteObject.toCallArgument(this._originalHandler),SDK.RemoteObject.toCallArgument(this._useCapture),SDK.RemoteObject.toCallArgument(this._passive),]));function callTogglePassive(type,listener,useCapture,passive){this.removeEventListener(type,listener,{capture:useCapture});this.addEventListener(type,listener,{capture:useCapture,passive:!passive});}}
origin(){return this._origin;}
markAsFramework(){this._origin=EventListener.Origin.Framework;}
isScrollBlockingType(){return this._type==='touchstart'||this._type==='touchmove'||this._type==='mousewheel'||this._type==='wheel';}}
EventListener.Origin={Raw:'Raw',Framework:'Framework',FrameworkUser:'FrameworkUser'};export class EventListenerBreakpoint{constructor(instrumentationName,eventName,eventTargetNames,category,title){this._instrumentationName=instrumentationName;this._eventName=eventName;this._eventTargetNames=eventTargetNames;this._category=category;this._title=title;this._enabled=false;}
category(){return this._category;}
enabled(){return this._enabled;}
setEnabled(enabled){if(this._enabled===enabled){return;}
this._enabled=enabled;for(const model of SDK.targetManager.models(DOMDebuggerModel)){this._updateOnModel(model);}}
_updateOnModel(model){if(this._instrumentationName){if(this._enabled){model._agent.setInstrumentationBreakpoint(this._instrumentationName);}else{model._agent.removeInstrumentationBreakpoint(this._instrumentationName);}}else{for(const eventTargetName of this._eventTargetNames){if(this._enabled){model._agent.setEventListenerBreakpoint(this._eventName,eventTargetName);}else{model._agent.removeEventListenerBreakpoint(this._eventName,eventTargetName);}}}}
title(){return this._title;}}
EventListenerBreakpoint._listener='listener:';EventListenerBreakpoint._instrumentation='instrumentation:';export class DOMDebuggerManager{constructor(){this._xhrBreakpointsSetting=Common.settings.createLocalSetting('xhrBreakpoints',[]);this._xhrBreakpoints=new Map();for(const breakpoint of this._xhrBreakpointsSetting.get()){this._xhrBreakpoints.set(breakpoint.url,breakpoint.enabled);}
this._eventListenerBreakpoints=[];this._createInstrumentationBreakpoints(Common.UIString('Animation'),['requestAnimationFrame','cancelAnimationFrame','requestAnimationFrame.callback']);this._createInstrumentationBreakpoints(Common.UIString('Canvas'),['canvasContextCreated','webglErrorFired','webglWarningFired']);this._createInstrumentationBreakpoints(Common.UIString('Geolocation'),['Geolocation.getCurrentPosition','Geolocation.watchPosition']);this._createInstrumentationBreakpoints(Common.UIString('Notification'),['Notification.requestPermission']);this._createInstrumentationBreakpoints(Common.UIString('Parse'),['Element.setInnerHTML','Document.write']);this._createInstrumentationBreakpoints(Common.UIString('Script'),['scriptFirstStatement','scriptBlockedByCSP']);this._createInstrumentationBreakpoints(Common.UIString('Timer'),['setTimeout','clearTimeout','setInterval','clearInterval','setTimeout.callback','setInterval.callback']);this._createInstrumentationBreakpoints(Common.UIString('Window'),['DOMWindow.close']);this._createInstrumentationBreakpoints(Common.UIString('WebAudio'),['audioContextCreated','audioContextClosed','audioContextResumed','audioContextSuspended']);this._createEventListenerBreakpoints(Common.UIString('Media'),['play','pause','playing','canplay','canplaythrough','seeking','seeked','timeupdate','ended','ratechange','durationchange','volumechange','loadstart','progress','suspend','abort','error','emptied','stalled','loadedmetadata','loadeddata','waiting'],['audio','video']);this._createEventListenerBreakpoints(Common.UIString('Picture-in-Picture'),['enterpictureinpicture','leavepictureinpicture'],['video']);this._createEventListenerBreakpoints(Common.UIString('Picture-in-Picture'),['resize'],['PictureInPictureWindow']);this._createEventListenerBreakpoints(Common.UIString('Clipboard'),['copy','cut','paste','beforecopy','beforecut','beforepaste'],['*']);this._createEventListenerBreakpoints(Common.UIString('Control'),['resize','scroll','zoom','focus','blur','select','change','submit','reset'],['*']);this._createEventListenerBreakpoints(Common.UIString('Device'),['deviceorientation','devicemotion'],['*']);this._createEventListenerBreakpoints(Common.UIString('DOM Mutation'),['DOMActivate','DOMFocusIn','DOMFocusOut','DOMAttrModified','DOMCharacterDataModified','DOMNodeInserted','DOMNodeInsertedIntoDocument','DOMNodeRemoved','DOMNodeRemovedFromDocument','DOMSubtreeModified','DOMContentLoaded'],['*']);this._createEventListenerBreakpoints(Common.UIString('Drag / drop'),['drag','dragstart','dragend','dragenter','dragover','dragleave','drop'],['*']);this._createEventListenerBreakpoints(Common.UIString('Keyboard'),['keydown','keyup','keypress','input'],['*']);this._createEventListenerBreakpoints(Common.UIString('Load'),['load','beforeunload','unload','abort','error','hashchange','popstate'],['*']);this._createEventListenerBreakpoints(Common.UIString('Mouse'),['auxclick','click','dblclick','mousedown','mouseup','mouseover','mousemove','mouseout','mouseenter','mouseleave','mousewheel','wheel','contextmenu'],['*']);this._createEventListenerBreakpoints(Common.UIString('Pointer'),['pointerover','pointerout','pointerenter','pointerleave','pointerdown','pointerup','pointermove','pointercancel','gotpointercapture','lostpointercapture'],['*']);this._createEventListenerBreakpoints(Common.UIString('Touch'),['touchstart','touchmove','touchend','touchcancel'],['*']);this._createEventListenerBreakpoints(Common.UIString('Worker'),['message','messageerror'],['*']);this._createEventListenerBreakpoints(Common.UIString('XHR'),['readystatechange','load','loadstart','loadend','abort','error','progress','timeout'],['xmlhttprequest','xmlhttprequestupload']);this._resolveEventListenerBreakpoint('instrumentation:setTimeout.callback')._title=Common.UIString('setTimeout fired');this._resolveEventListenerBreakpoint('instrumentation:setInterval.callback')._title=Common.UIString('setInterval fired');this._resolveEventListenerBreakpoint('instrumentation:scriptFirstStatement')._title=Common.UIString('Script First Statement');this._resolveEventListenerBreakpoint('instrumentation:scriptBlockedByCSP')._title=Common.UIString('Script Blocked by Content Security Policy');this._resolveEventListenerBreakpoint('instrumentation:requestAnimationFrame')._title=Common.UIString('Request Animation Frame');this._resolveEventListenerBreakpoint('instrumentation:cancelAnimationFrame')._title=Common.UIString('Cancel Animation Frame');this._resolveEventListenerBreakpoint('instrumentation:requestAnimationFrame.callback')._title=Common.UIString('Animation Frame Fired');this._resolveEventListenerBreakpoint('instrumentation:webglErrorFired')._title=Common.UIString('WebGL Error Fired');this._resolveEventListenerBreakpoint('instrumentation:webglWarningFired')._title=Common.UIString('WebGL Warning Fired');this._resolveEventListenerBreakpoint('instrumentation:Element.setInnerHTML')._title=Common.UIString('Set innerHTML');this._resolveEventListenerBreakpoint('instrumentation:canvasContextCreated')._title=Common.UIString('Create canvas context');this._resolveEventListenerBreakpoint('instrumentation:Geolocation.getCurrentPosition')._title='getCurrentPosition';this._resolveEventListenerBreakpoint('instrumentation:Geolocation.watchPosition')._title='watchPosition';this._resolveEventListenerBreakpoint('instrumentation:Notification.requestPermission')._title='requestPermission';this._resolveEventListenerBreakpoint('instrumentation:DOMWindow.close')._title='window.close';this._resolveEventListenerBreakpoint('instrumentation:Document.write')._title='document.write';this._resolveEventListenerBreakpoint('instrumentation:audioContextCreated')._title=Common.UIString('Create AudioContext');this._resolveEventListenerBreakpoint('instrumentation:audioContextClosed')._title=Common.UIString('Close AudioContext');this._resolveEventListenerBreakpoint('instrumentation:audioContextResumed')._title=Common.UIString('Resume AudioContext');this._resolveEventListenerBreakpoint('instrumentation:audioContextSuspended')._title=Common.UIString('Suspend AudioContext');SDK.targetManager.observeModels(SDK.DOMDebuggerModel,this);}
_createInstrumentationBreakpoints(category,instrumentationNames){for(const instrumentationName of instrumentationNames){this._eventListenerBreakpoints.push(new EventListenerBreakpoint(instrumentationName,'',[],category,instrumentationName));}}
_createEventListenerBreakpoints(category,eventNames,eventTargetNames){for(const eventName of eventNames){this._eventListenerBreakpoints.push(new EventListenerBreakpoint('',eventName,eventTargetNames,category,eventName));}}
_resolveEventListenerBreakpoint(eventName,eventTargetName){const instrumentationPrefix='instrumentation:';const listenerPrefix='listener:';let instrumentationName='';if(eventName.startsWith(instrumentationPrefix)){instrumentationName=eventName.substring(instrumentationPrefix.length);eventName='';}else if(eventName.startsWith(listenerPrefix)){eventName=eventName.substring(listenerPrefix.length);}else{return null;}
eventTargetName=(eventTargetName||'*').toLowerCase();let result=null;for(const breakpoint of this._eventListenerBreakpoints){if(instrumentationName&&breakpoint._instrumentationName===instrumentationName){result=breakpoint;}
if(eventName&&breakpoint._eventName===eventName&&breakpoint._eventTargetNames.indexOf(eventTargetName)!==-1){result=breakpoint;}
if(!result&&eventName&&breakpoint._eventName===eventName&&breakpoint._eventTargetNames.indexOf('*')!==-1){result=breakpoint;}}
return result;}
eventListenerBreakpoints(){return this._eventListenerBreakpoints.slice();}
resolveEventListenerBreakpointTitle(auxData){const id=auxData['eventName'];if(id==='instrumentation:webglErrorFired'&&auxData['webglErrorName']){let errorName=auxData['webglErrorName'];errorName=errorName.replace(/^.*(0x[0-9a-f]+).*$/i,'$1');return Common.UIString('WebGL Error Fired (%s)',errorName);}
if(id==='instrumentation:scriptBlockedByCSP'&&auxData['directiveText']){return Common.UIString('Script blocked due to Content Security Policy directive: %s',auxData['directiveText']);}
const breakpoint=this._resolveEventListenerBreakpoint(id,auxData['targetName']);if(!breakpoint){return'';}
if(auxData['targetName']){return auxData['targetName']+'.'+breakpoint._title;}
return breakpoint._title;}
resolveEventListenerBreakpoint(auxData){return this._resolveEventListenerBreakpoint(auxData['eventName'],auxData['targetName']);}
xhrBreakpoints(){return this._xhrBreakpoints;}
_saveXHRBreakpoints(){const breakpoints=[];for(const url of this._xhrBreakpoints.keys()){breakpoints.push({url:url,enabled:this._xhrBreakpoints.get(url)});}
this._xhrBreakpointsSetting.set(breakpoints);}
addXHRBreakpoint(url,enabled){this._xhrBreakpoints.set(url,enabled);if(enabled){for(const model of SDK.targetManager.models(DOMDebuggerModel)){model._agent.setXHRBreakpoint(url);}}
this._saveXHRBreakpoints();}
removeXHRBreakpoint(url){const enabled=this._xhrBreakpoints.get(url);this._xhrBreakpoints.delete(url);if(enabled){for(const model of SDK.targetManager.models(DOMDebuggerModel)){model._agent.removeXHRBreakpoint(url);}}
this._saveXHRBreakpoints();}
toggleXHRBreakpoint(url,enabled){this._xhrBreakpoints.set(url,enabled);for(const model of SDK.targetManager.models(DOMDebuggerModel)){if(enabled){model._agent.setXHRBreakpoint(url);}else{model._agent.removeXHRBreakpoint(url);}}
this._saveXHRBreakpoints();}
modelAdded(domDebuggerModel){for(const url of this._xhrBreakpoints.keys()){if(this._xhrBreakpoints.get(url)){domDebuggerModel._agent.setXHRBreakpoint(url);}}
for(const breakpoint of this._eventListenerBreakpoints){if(breakpoint._enabled){breakpoint._updateOnModel(domDebuggerModel);}}}
modelRemoved(domDebuggerModel){}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.DOMDebuggerModel=DOMDebuggerModel;SDK.DOMDebuggerModel.Events=Events;SDK.DOMDebuggerModel.DOMBreakpoint=DOMBreakpoint;SDK.DOMDebuggerModel.EventListenerBreakpoint=EventListenerBreakpoint;SDK.EventListener=EventListener;SDK.DOMDebuggerManager=DOMDebuggerManager;SDK.SDKModel.register(SDK.DOMDebuggerModel,SDK.Target.Capability.DOM,false);SDK.DOMDebuggerModel.DOMBreakpoint.Type=Protocol.DOMDebugger.DOMBreakpointType;SDK.domDebuggerManager;export default class DebuggerModel extends SDK.SDKModel{constructor(target){super(target);target.registerDebuggerDispatcher(new DebuggerDispatcher(this));this._agent=target.debuggerAgent();this._runtimeModel=(target.model(SDK.RuntimeModel));this._sourceMapManager=new SDK.SourceMapManager(target);this._sourceMapIdToScript=new Map();this._debuggerPausedDetails=null;this._scripts=new Map();this._scriptsBySourceURL=new Map();this._discardableScripts=[];this._breakpointResolvedEventTarget=new Common.Object();this._autoStepOver=false;this._isPausing=false;Common.moduleSetting('pauseOnExceptionEnabled').addChangeListener(this._pauseOnExceptionStateChanged,this);Common.moduleSetting('pauseOnCaughtException').addChangeListener(this._pauseOnExceptionStateChanged,this);Common.moduleSetting('disableAsyncStackTraces').addChangeListener(this._asyncStackTracesStateChanged,this);Common.moduleSetting('breakpointsActive').addChangeListener(this._breakpointsActiveChanged,this);if(!target.suspended()){this._enableDebugger();}
this._stringMap=new Map();this._sourceMapManager.setEnabled(Common.moduleSetting('jsSourceMapsEnabled').get());Common.moduleSetting('jsSourceMapsEnabled').addChangeListener(event=>this._sourceMapManager.setEnabled((event.data)));}
static _sourceMapId(executionContextId,sourceURL,sourceMapURL){if(!sourceMapURL){return null;}
return executionContextId+':'+sourceURL+':'+sourceMapURL;}
sourceMapManager(){return this._sourceMapManager;}
runtimeModel(){return this._runtimeModel;}
debuggerEnabled(){return!!this._debuggerEnabled;}
_enableDebugger(){if(this._debuggerEnabled){return Promise.resolve();}
this._debuggerEnabled=true;const isRemoteFrontend=Root.Runtime.queryParam('remoteFrontend')||Root.Runtime.queryParam('ws');const maxScriptsCacheSize=isRemoteFrontend?10e6:100e6;const enablePromise=this._agent.enable(maxScriptsCacheSize);enablePromise.then(this._registerDebugger.bind(this));this._pauseOnExceptionStateChanged();this._asyncStackTracesStateChanged();if(!Common.moduleSetting('breakpointsActive').get()){this._breakpointsActiveChanged();}
if(SDK.DebuggerModel._scheduledPauseOnAsyncCall){this._pauseOnAsyncCall(SDK.DebuggerModel._scheduledPauseOnAsyncCall);}
this.dispatchEventToListeners(Events.DebuggerWasEnabled,this);return enablePromise;}
_registerDebugger(debuggerId){if(!debuggerId){return;}
SDK.DebuggerModel._debuggerIdToModel.set(debuggerId,this);this._debuggerId=debuggerId;this.dispatchEventToListeners(Events.DebuggerIsReadyToPause,this);}
isReadyToPause(){return!!this._debuggerId;}
static modelForDebuggerId(debuggerId){return SDK.DebuggerModel._debuggerIdToModel.get(debuggerId)||null;}
_disableDebugger(){if(!this._debuggerEnabled){return Promise.resolve();}
this._debuggerEnabled=false;const disablePromise=this._agent.disable();this._isPausing=false;this._asyncStackTracesStateChanged();this.globalObjectCleared();this.dispatchEventToListeners(Events.DebuggerWasDisabled);SDK.DebuggerModel._debuggerIdToModel.delete(this._debuggerId);return disablePromise;}
_skipAllPauses(skip){if(this._skipAllPausesTimeout){clearTimeout(this._skipAllPausesTimeout);delete this._skipAllPausesTimeout;}
this._agent.setSkipAllPauses(skip);}
skipAllPausesUntilReloadOrTimeout(timeout){if(this._skipAllPausesTimeout){clearTimeout(this._skipAllPausesTimeout);}
this._agent.setSkipAllPauses(true);this._skipAllPausesTimeout=setTimeout(this._skipAllPauses.bind(this,false),timeout);}
_pauseOnExceptionStateChanged(){let state;if(!Common.moduleSetting('pauseOnExceptionEnabled').get()){state=PauseOnExceptionsState.DontPauseOnExceptions;}else if(Common.moduleSetting('pauseOnCaughtException').get()){state=PauseOnExceptionsState.PauseOnAllExceptions;}else{state=PauseOnExceptionsState.PauseOnUncaughtExceptions;}
this._agent.setPauseOnExceptions(state);}
_asyncStackTracesStateChanged(){const maxAsyncStackChainDepth=32;const enabled=!Common.moduleSetting('disableAsyncStackTraces').get()&&this._debuggerEnabled;this._agent.setAsyncCallStackDepth(enabled?maxAsyncStackChainDepth:0);}
_breakpointsActiveChanged(){this._agent.setBreakpointsActive(Common.moduleSetting('breakpointsActive').get());}
stepInto(){this._agent.stepInto();}
stepOver(){this._autoStepOver=true;this._agent.stepOver();}
stepOut(){this._agent.stepOut();}
scheduleStepIntoAsync(){this._agent.invoke_stepInto({breakOnAsyncCall:true});}
resume(){this._agent.resume();this._isPausing=false;}
pause(){this._isPausing=true;this._skipAllPauses(false);this._agent.pause();}
_pauseOnAsyncCall(parentStackTraceId){return this._agent.invoke_pauseOnAsyncCall({parentStackTraceId:parentStackTraceId});}
async setBreakpointByURL(url,lineNumber,columnNumber,condition){let urlRegex;if(this.target().type()===SDK.Target.Type.Node){const platformPath=Common.ParsedURL.urlToPlatformPath(url,Host.isWin());urlRegex=`${platformPath.escapeForRegExp()}|${url.escapeForRegExp()}`;}
let minColumnNumber=0;const scripts=this._scriptsBySourceURL.get(url)||[];for(let i=0,l=scripts.length;i<l;++i){const script=scripts[i];if(lineNumber===script.lineOffset){minColumnNumber=minColumnNumber?Math.min(minColumnNumber,script.columnOffset):script.columnOffset;}}
columnNumber=Math.max(columnNumber,minColumnNumber);const response=await this._agent.invoke_setBreakpointByUrl({lineNumber:lineNumber,url:urlRegex?undefined:url,urlRegex:urlRegex,columnNumber:columnNumber,condition:condition});if(response[Protocol.Error]){return{locations:[],breakpointId:null};}
let locations=[];if(response.locations){locations=response.locations.map(payload=>Location.fromPayload(this,payload));}
return{locations:locations,breakpointId:response.breakpointId};}
async setBreakpointInAnonymousScript(scriptId,scriptHash,lineNumber,columnNumber,condition){const response=await this._agent.invoke_setBreakpointByUrl({lineNumber:lineNumber,scriptHash:scriptHash,columnNumber:columnNumber,condition:condition});const error=response[Protocol.Error];if(error){if(error!=='Either url or urlRegex must be specified.'){return{locations:[],breakpointId:null};}
return this._setBreakpointBySourceId(scriptId,lineNumber,columnNumber,condition);}
let locations=[];if(response.locations){locations=response.locations.map(payload=>Location.fromPayload(this,payload));}
return{locations:locations,breakpointId:response.breakpointId};}
async _setBreakpointBySourceId(scriptId,lineNumber,columnNumber,condition){const response=await this._agent.invoke_setBreakpoint({location:{scriptId:scriptId,lineNumber:lineNumber,columnNumber:columnNumber},condition:condition});if(response[Protocol.Error]){return{breakpointId:null,locations:[]};}
let actualLocation=[];if(response.actualLocation){actualLocation=[Location.fromPayload(this,response.actualLocation)];}
return{locations:actualLocation,breakpointId:response.breakpointId};}
async removeBreakpoint(breakpointId){const response=await this._agent.invoke_removeBreakpoint({breakpointId});if(response[Protocol.Error]){console.error('Failed to remove breakpoint: '+response[Protocol.Error]);}}
async getPossibleBreakpoints(startLocation,endLocation,restrictToFunction){const response=await this._agent.invoke_getPossibleBreakpoints({start:startLocation.payload(),end:endLocation?endLocation.payload():undefined,restrictToFunction:restrictToFunction});if(response[Protocol.Error]||!response.locations){return[];}
return response.locations.map(location=>BreakLocation.fromPayload(this,location));}
async fetchAsyncStackTrace(stackId){const response=await this._agent.invoke_getStackTrace({stackTraceId:stackId});return response[Protocol.Error]?null:response.stackTrace;}
_breakpointResolved(breakpointId,location){this._breakpointResolvedEventTarget.dispatchEventToListeners(breakpointId,Location.fromPayload(this,location));}
globalObjectCleared(){this._setDebuggerPausedDetails(null);this._reset();this.dispatchEventToListeners(Events.GlobalObjectCleared,this);}
_reset(){for(const scriptWithSourceMap of this._sourceMapIdToScript.values()){this._sourceMapManager.detachSourceMap(scriptWithSourceMap);}
this._sourceMapIdToScript.clear();this._scripts.clear();this._scriptsBySourceURL.clear();this._stringMap.clear();this._discardableScripts=[];this._autoStepOver=false;}
scripts(){return Array.from(this._scripts.values());}
scriptForId(scriptId){return this._scripts.get(scriptId)||null;}
scriptsForSourceURL(sourceURL){if(!sourceURL){return[];}
return this._scriptsBySourceURL.get(sourceURL)||[];}
scriptsForExecutionContext(executionContext){const result=[];for(const script of this._scripts.values()){if(script.executionContextId===executionContext.id){result.push(script);}}
return result;}
setScriptSource(scriptId,newSource,callback){this._scripts.get(scriptId).editSource(newSource,this._didEditScriptSource.bind(this,scriptId,newSource,callback));}
_didEditScriptSource(scriptId,newSource,callback,error,exceptionDetails,callFrames,asyncStackTrace,asyncStackTraceId,needsStepIn){callback(error,exceptionDetails);if(needsStepIn){this.stepInto();return;}
if(!error&&callFrames&&callFrames.length){this._pausedScript(callFrames,this._debuggerPausedDetails.reason,this._debuggerPausedDetails.auxData,this._debuggerPausedDetails.breakpointIds,asyncStackTrace,asyncStackTraceId);}}
get callFrames(){return this._debuggerPausedDetails?this._debuggerPausedDetails.callFrames:null;}
debuggerPausedDetails(){return this._debuggerPausedDetails;}
_setDebuggerPausedDetails(debuggerPausedDetails){this._isPausing=false;this._debuggerPausedDetails=debuggerPausedDetails;if(this._debuggerPausedDetails){if(this._beforePausedCallback){if(!this._beforePausedCallback.call(null,this._debuggerPausedDetails)){return false;}}
this._autoStepOver=false;this.dispatchEventToListeners(Events.DebuggerPaused,this);}
if(debuggerPausedDetails){this.setSelectedCallFrame(debuggerPausedDetails.callFrames[0]);}else{this.setSelectedCallFrame(null);}
return true;}
setBeforePausedCallback(callback){this._beforePausedCallback=callback;}
async _pausedScript(callFrames,reason,auxData,breakpointIds,asyncStackTrace,asyncStackTraceId,asyncCallStackTraceId){if(asyncCallStackTraceId){SDK.DebuggerModel._scheduledPauseOnAsyncCall=asyncCallStackTraceId;const promises=[];for(const model of SDK.DebuggerModel._debuggerIdToModel.values()){promises.push(model._pauseOnAsyncCall(asyncCallStackTraceId));}
await Promise.all(promises);this.resume();return;}
const pausedDetails=new DebuggerPausedDetails(this,callFrames,reason,auxData,breakpointIds,asyncStackTrace,asyncStackTraceId);if(pausedDetails&&this._continueToLocationCallback){const callback=this._continueToLocationCallback;delete this._continueToLocationCallback;if(callback(pausedDetails)){return;}}
if(!this._setDebuggerPausedDetails(pausedDetails)){if(this._autoStepOver){this._agent.stepOver();}else{this._agent.stepInto();}}
SDK.DebuggerModel._scheduledPauseOnAsyncCall=null;}
_resumedScript(){this._setDebuggerPausedDetails(null);this.dispatchEventToListeners(Events.DebuggerResumed,this);}
_parsedScriptSource(scriptId,sourceURL,startLine,startColumn,endLine,endColumn,executionContextId,hash,executionContextAuxData,isLiveEdit,sourceMapURL,hasSourceURLComment,hasSyntaxError,length,originStackTrace){if(this._scripts.has(scriptId)){return this._scripts.get(scriptId);}
let isContentScript=false;if(executionContextAuxData&&('isDefault'in executionContextAuxData)){isContentScript=!executionContextAuxData['isDefault'];}
sourceURL=this._internString(sourceURL);const script=new SDK.Script(this,scriptId,sourceURL,startLine,startColumn,endLine,endColumn,executionContextId,this._internString(hash),isContentScript,isLiveEdit,sourceMapURL,hasSourceURLComment,length,originStackTrace);this._registerScript(script);this.dispatchEventToListeners(Events.ParsedScriptSource,script);const sourceMapId=SDK.DebuggerModel._sourceMapId(script.executionContextId,script.sourceURL,script.sourceMapURL);if(sourceMapId&&!hasSyntaxError){const previousScript=this._sourceMapIdToScript.get(sourceMapId);if(previousScript){this._sourceMapManager.detachSourceMap(previousScript);}
this._sourceMapIdToScript.set(sourceMapId,script);this._sourceMapManager.attachSourceMap(script,script.sourceURL,script.sourceMapURL);}
const isDiscardable=hasSyntaxError&&script.isAnonymousScript();if(isDiscardable){this._discardableScripts.push(script);this._collectDiscardedScripts();}
return script;}
setSourceMapURL(script,newSourceMapURL){let sourceMapId=SDK.DebuggerModel._sourceMapId(script.executionContextId,script.sourceURL,script.sourceMapURL);if(sourceMapId&&this._sourceMapIdToScript.get(sourceMapId)===script){this._sourceMapIdToScript.delete(sourceMapId);}
this._sourceMapManager.detachSourceMap(script);script.sourceMapURL=newSourceMapURL;sourceMapId=SDK.DebuggerModel._sourceMapId(script.executionContextId,script.sourceURL,script.sourceMapURL);if(!sourceMapId){return;}
this._sourceMapIdToScript.set(sourceMapId,script);this._sourceMapManager.attachSourceMap(script,script.sourceURL,script.sourceMapURL);}
executionContextDestroyed(executionContext){const sourceMapIds=Array.from(this._sourceMapIdToScript.keys());for(const sourceMapId of sourceMapIds){const script=this._sourceMapIdToScript.get(sourceMapId);if(script.executionContextId===executionContext.id){this._sourceMapIdToScript.delete(sourceMapId);this._sourceMapManager.detachSourceMap(script);}}}
_registerScript(script){this._scripts.set(script.scriptId,script);if(script.isAnonymousScript()){return;}
let scripts=this._scriptsBySourceURL.get(script.sourceURL);if(!scripts){scripts=[];this._scriptsBySourceURL.set(script.sourceURL,scripts);}
scripts.push(script);}
_unregisterScript(script){console.assert(script.isAnonymousScript());this._scripts.delete(script.scriptId);}
_collectDiscardedScripts(){if(this._discardableScripts.length<1000){return;}
const scriptsToDiscard=this._discardableScripts.splice(0,100);for(const script of scriptsToDiscard){this._unregisterScript(script);this.dispatchEventToListeners(Events.DiscardedAnonymousScriptSource,script);}}
createRawLocation(script,lineNumber,columnNumber){return new Location(this,script.scriptId,lineNumber,columnNumber);}
createRawLocationByURL(sourceURL,lineNumber,columnNumber){let closestScript=null;const scripts=this._scriptsBySourceURL.get(sourceURL)||[];for(let i=0,l=scripts.length;i<l;++i){const script=scripts[i];if(!closestScript){closestScript=script;}
if(script.lineOffset>lineNumber||(script.lineOffset===lineNumber&&script.columnOffset>columnNumber)){continue;}
if(script.endLine<lineNumber||(script.endLine===lineNumber&&script.endColumn<=columnNumber)){continue;}
closestScript=script;break;}
return closestScript?new Location(this,closestScript.scriptId,lineNumber,columnNumber):null;}
createRawLocationByScriptId(scriptId,lineNumber,columnNumber){const script=this.scriptForId(scriptId);return script?this.createRawLocation(script,lineNumber,columnNumber):null;}
createRawLocationsByStackTrace(stackTrace){const frames=[];while(stackTrace){for(const frame of stackTrace.callFrames){frames.push(frame);}
stackTrace=stackTrace.parent;}
const rawLocations=[];for(const frame of frames){const rawLocation=this.createRawLocationByScriptId(frame.scriptId,frame.lineNumber,frame.columnNumber);if(rawLocation){rawLocations.push(rawLocation);}}
return rawLocations;}
isPaused(){return!!this.debuggerPausedDetails();}
isPausing(){return this._isPausing;}
setSelectedCallFrame(callFrame){if(this._selectedCallFrame===callFrame){return;}
this._selectedCallFrame=callFrame;this.dispatchEventToListeners(Events.CallFrameSelected,this);}
selectedCallFrame(){return this._selectedCallFrame;}
evaluateOnSelectedCallFrame(options){return this.selectedCallFrame().evaluate(options);}
functionDetailsPromise(remoteObject){return remoteObject.getAllProperties(false,false).then(buildDetails.bind(this));function buildDetails(response){if(!response){return null;}
let location=null;if(response.internalProperties){for(const prop of response.internalProperties){if(prop.name==='[[FunctionLocation]]'){location=prop.value;}}}
let functionName=null;if(response.properties){for(const prop of response.properties){if(prop.name==='name'&&prop.value&&prop.value.type==='string'){functionName=prop.value;}
if(prop.name==='displayName'&&prop.value&&prop.value.type==='string'){functionName=prop.value;break;}}}
let debuggerLocation=null;if(location){debuggerLocation=this.createRawLocationByScriptId(location.value.scriptId,location.value.lineNumber,location.value.columnNumber);}
return{location:debuggerLocation,functionName:functionName?functionName.value:''};}}
async setVariableValue(scopeNumber,variableName,newValue,callFrameId){const response=await this._agent.invoke_setVariableValue({scopeNumber,variableName,newValue,callFrameId});const error=response[Protocol.Error];if(error){console.error(error);}
return error;}
addBreakpointListener(breakpointId,listener,thisObject){this._breakpointResolvedEventTarget.addEventListener(breakpointId,listener,thisObject);}
removeBreakpointListener(breakpointId,listener,thisObject){this._breakpointResolvedEventTarget.removeEventListener(breakpointId,listener,thisObject);}
async setBlackboxPatterns(patterns){const response=await this._agent.invoke_setBlackboxPatterns({patterns});const error=response[Protocol.Error];if(error){console.error(error);}
return!error;}
dispose(){this._sourceMapManager.dispose();SDK.DebuggerModel._debuggerIdToModel.delete(this._debuggerId);Common.moduleSetting('pauseOnExceptionEnabled').removeChangeListener(this._pauseOnExceptionStateChanged,this);Common.moduleSetting('pauseOnCaughtException').removeChangeListener(this._pauseOnExceptionStateChanged,this);Common.moduleSetting('disableAsyncStackTraces').removeChangeListener(this._asyncStackTracesStateChanged,this);}
async suspendModel(){await this._disableDebugger();}
async resumeModel(){await this._enableDebugger();}
_internString(string){if(!this._stringMap.has(string)){this._stringMap.set(string,string);}
return this._stringMap.get(string);}}
export const _debuggerIdToModel=new Map();export const _scheduledPauseOnAsyncCall=null;export const PauseOnExceptionsState={DontPauseOnExceptions:'none',PauseOnAllExceptions:'all',PauseOnUncaughtExceptions:'uncaught'};export const Events={DebuggerWasEnabled:Symbol('DebuggerWasEnabled'),DebuggerWasDisabled:Symbol('DebuggerWasDisabled'),DebuggerPaused:Symbol('DebuggerPaused'),DebuggerResumed:Symbol('DebuggerResumed'),ParsedScriptSource:Symbol('ParsedScriptSource'),FailedToParseScriptSource:Symbol('FailedToParseScriptSource'),DiscardedAnonymousScriptSource:Symbol('DiscardedAnonymousScriptSource'),GlobalObjectCleared:Symbol('GlobalObjectCleared'),CallFrameSelected:Symbol('CallFrameSelected'),ConsoleCommandEvaluatedInSelectedCallFrame:Symbol('ConsoleCommandEvaluatedInSelectedCallFrame'),DebuggerIsReadyToPause:Symbol('DebuggerIsReadyToPause'),};export const BreakReason={DOM:'DOM',EventListener:'EventListener',XHR:'XHR',Exception:'exception',PromiseRejection:'promiseRejection',Assert:'assert',DebugCommand:'debugCommand',OOM:'OOM',Other:'other'};const ContinueToLocationTargetCallFrames={Any:'any',Current:'current'};class DebuggerDispatcher{constructor(debuggerModel){this._debuggerModel=debuggerModel;}
paused(callFrames,reason,auxData,breakpointIds,asyncStackTrace,asyncStackTraceId,asyncCallStackTraceId){this._debuggerModel._pausedScript(callFrames,reason,auxData,breakpointIds||[],asyncStackTrace,asyncStackTraceId,asyncCallStackTraceId);}
resumed(){this._debuggerModel._resumedScript();}
scriptParsed(scriptId,sourceURL,startLine,startColumn,endLine,endColumn,executionContextId,hash,executionContextAuxData,isLiveEdit,sourceMapURL,hasSourceURL,isModule,length,stackTrace){this._debuggerModel._parsedScriptSource(scriptId,sourceURL,startLine,startColumn,endLine,endColumn,executionContextId,hash,executionContextAuxData,!!isLiveEdit,sourceMapURL,!!hasSourceURL,false,length||0,stackTrace||null);}
scriptFailedToParse(scriptId,sourceURL,startLine,startColumn,endLine,endColumn,executionContextId,hash,executionContextAuxData,sourceMapURL,hasSourceURL,isModule,length,stackTrace){this._debuggerModel._parsedScriptSource(scriptId,sourceURL,startLine,startColumn,endLine,endColumn,executionContextId,hash,executionContextAuxData,false,sourceMapURL,!!hasSourceURL,true,length||0,stackTrace||null);}
breakpointResolved(breakpointId,location){this._debuggerModel._breakpointResolved(breakpointId,location);}}
export class Location{constructor(debuggerModel,scriptId,lineNumber,columnNumber){this.debuggerModel=debuggerModel;this.scriptId=scriptId;this.lineNumber=lineNumber;this.columnNumber=columnNumber||0;}
static fromPayload(debuggerModel,payload){return new Location(debuggerModel,payload.scriptId,payload.lineNumber,payload.columnNumber);}
payload(){return{scriptId:this.scriptId,lineNumber:this.lineNumber,columnNumber:this.columnNumber};}
script(){return this.debuggerModel.scriptForId(this.scriptId);}
continueToLocation(pausedCallback){if(pausedCallback){this.debuggerModel._continueToLocationCallback=this._paused.bind(this,pausedCallback);}
this.debuggerModel._agent.continueToLocation(this.payload(),ContinueToLocationTargetCallFrames.Current);}
_paused(pausedCallback,debuggerPausedDetails){const location=debuggerPausedDetails.callFrames[0].location();if(location.scriptId===this.scriptId&&location.lineNumber===this.lineNumber&&location.columnNumber===this.columnNumber){pausedCallback();return true;}
return false;}
id(){return this.debuggerModel.target().id()+':'+this.scriptId+':'+this.lineNumber+':'+this.columnNumber;}}
export class BreakLocation extends Location{constructor(debuggerModel,scriptId,lineNumber,columnNumber,type){super(debuggerModel,scriptId,lineNumber,columnNumber);if(type){this.type=type;}}
static fromPayload(debuggerModel,payload){return new BreakLocation(debuggerModel,payload.scriptId,payload.lineNumber,payload.columnNumber,payload.type);}}
export class CallFrame{constructor(debuggerModel,script,payload){this.debuggerModel=debuggerModel;this._script=script;this._payload=payload;this._location=Location.fromPayload(debuggerModel,payload.location);this._scopeChain=[];this._localScope=null;for(let i=0;i<payload.scopeChain.length;++i){const scope=new Scope(this,i);this._scopeChain.push(scope);if(scope.type()===Protocol.Debugger.ScopeType.Local){this._localScope=scope;}}
if(payload.functionLocation){this._functionLocation=Location.fromPayload(debuggerModel,payload.functionLocation);}
this._returnValue=payload.returnValue?this.debuggerModel._runtimeModel.createRemoteObject(payload.returnValue):null;}
static fromPayloadArray(debuggerModel,callFrames){const result=[];for(let i=0;i<callFrames.length;++i){const callFrame=callFrames[i];const script=debuggerModel.scriptForId(callFrame.location.scriptId);if(script){result.push(new CallFrame(debuggerModel,script,callFrame));}}
return result;}
get script(){return this._script;}
get id(){return this._payload.callFrameId;}
scopeChain(){return this._scopeChain;}
localScope(){return this._localScope;}
thisObject(){return this._payload.this?this.debuggerModel._runtimeModel.createRemoteObject(this._payload.this):null;}
returnValue(){return this._returnValue;}
async setReturnValue(expression){if(!this._returnValue){return null;}
const evaluateResponse=await this.debuggerModel._agent.invoke_evaluateOnCallFrame({callFrameId:this.id,expression:expression,silent:true,objectGroup:'backtrace'});if(evaluateResponse[Protocol.Error]||evaluateResponse.exceptionDetails){return null;}
const response=await this.debuggerModel._agent.invoke_setReturnValue({newValue:evaluateResponse.result});if(response[Protocol.Error]){return null;}
this._returnValue=this.debuggerModel._runtimeModel.createRemoteObject(evaluateResponse.result);return this._returnValue;}
get functionName(){return this._payload.functionName;}
location(){return this._location;}
functionLocation(){return this._functionLocation||null;}
async evaluate(options){const runtimeModel=this.debuggerModel.runtimeModel();const needsTerminationOptions=!!options.throwOnSideEffect||options.timeout!==undefined;if(needsTerminationOptions&&(runtimeModel.hasSideEffectSupport()===false||(runtimeModel.hasSideEffectSupport()===null&&!await runtimeModel.checkSideEffectSupport()))){return{error:'Side-effect checks not supported by backend.'};}
const response=await this.debuggerModel._agent.invoke_evaluateOnCallFrame({callFrameId:this.id,expression:options.expression,objectGroup:options.objectGroup,includeCommandLineAPI:options.includeCommandLineAPI,silent:options.silent,returnByValue:options.returnByValue,generatePreview:options.generatePreview,throwOnSideEffect:options.throwOnSideEffect,timeout:options.timeout});const error=response[Protocol.Error];if(error){console.error(error);return{error:error};}
return{object:runtimeModel.createRemoteObject(response.result),exceptionDetails:response.exceptionDetails};}
async restart(){const response=await this.debuggerModel._agent.invoke_restartFrame({callFrameId:this._payload.callFrameId});if(!response[Protocol.Error]){this.debuggerModel.stepInto();}}}
export class Scope{constructor(callFrame,ordinal){this._callFrame=callFrame;this._payload=callFrame._payload.scopeChain[ordinal];this._type=this._payload.type;this._name=this._payload.name;this._ordinal=ordinal;this._startLocation=this._payload.startLocation?Location.fromPayload(callFrame.debuggerModel,this._payload.startLocation):null;this._endLocation=this._payload.endLocation?Location.fromPayload(callFrame.debuggerModel,this._payload.endLocation):null;}
callFrame(){return this._callFrame;}
type(){return this._type;}
typeName(){switch(this._type){case Protocol.Debugger.ScopeType.Local:return Common.UIString('Local');case Protocol.Debugger.ScopeType.Closure:return Common.UIString('Closure');case Protocol.Debugger.ScopeType.Catch:return Common.UIString('Catch');case Protocol.Debugger.ScopeType.Block:return Common.UIString('Block');case Protocol.Debugger.ScopeType.Script:return Common.UIString('Script');case Protocol.Debugger.ScopeType.With:return Common.UIString('With Block');case Protocol.Debugger.ScopeType.Global:return Common.UIString('Global');case Protocol.Debugger.ScopeType.Module:return Common.UIString('Module');}
return'';}
name(){return this._name;}
startLocation(){return this._startLocation;}
endLocation(){return this._endLocation;}
object(){if(this._object){return this._object;}
const runtimeModel=this._callFrame.debuggerModel._runtimeModel;const declarativeScope=this._type!==Protocol.Debugger.ScopeType.With&&this._type!==Protocol.Debugger.ScopeType.Global;if(declarativeScope){this._object=runtimeModel.createScopeRemoteObject(this._payload.object,new SDK.ScopeRef(this._ordinal,this._callFrame.id));}else{this._object=runtimeModel.createRemoteObject(this._payload.object);}
return this._object;}
description(){const declarativeScope=this._type!==Protocol.Debugger.ScopeType.With&&this._type!==Protocol.Debugger.ScopeType.Global;return declarativeScope?'':(this._payload.object.description||'');}}
export class DebuggerPausedDetails{constructor(debuggerModel,callFrames,reason,auxData,breakpointIds,asyncStackTrace,asyncStackTraceId){this.debuggerModel=debuggerModel;this.callFrames=CallFrame.fromPayloadArray(debuggerModel,callFrames);this.reason=reason;this.auxData=auxData;this.breakpointIds=breakpointIds;if(asyncStackTrace){this.asyncStackTrace=this._cleanRedundantFrames(asyncStackTrace);}
this.asyncStackTraceId=asyncStackTraceId;}
exception(){if(this.reason!==BreakReason.Exception&&this.reason!==BreakReason.PromiseRejection){return null;}
return this.debuggerModel._runtimeModel.createRemoteObject((this.auxData));}
_cleanRedundantFrames(asyncStackTrace){let stack=asyncStackTrace;let previous=null;while(stack){if(stack.description==='async function'&&stack.callFrames.length){stack.callFrames.shift();}
if(previous&&!stack.callFrames.length){previous.parent=stack.parent;}else{previous=stack;}
stack=stack.parent;}
return asyncStackTrace;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.DebuggerModel=DebuggerModel;SDK.DebuggerModel.PauseOnExceptionsState=PauseOnExceptionsState;SDK.DebuggerModel.Events=Events;SDK.DebuggerModel.BreakReason=BreakReason;SDK.DebuggerModel.Location=Location;SDK.DebuggerModel.BreakLocation=BreakLocation;SDK.DebuggerModel.CallFrame=CallFrame;SDK.DebuggerModel.Scope=Scope;SDK.DebuggerPausedDetails=DebuggerPausedDetails;SDK.SDKModel.register(SDK.DebuggerModel,SDK.Target.Capability.JS,true);SDK.DebuggerModel.FunctionDetails;SDK.DebuggerModel.SetBreakpointResult;SDK.DebuggerModel._debuggerIdToModel=_debuggerIdToModel;SDK.DebuggerModel._scheduledPauseOnAsyncCall=_scheduledPauseOnAsyncCall;export default class CSSStyleSheetHeader{constructor(cssModel,payload){this._cssModel=cssModel;this.id=payload.styleSheetId;this.frameId=payload.frameId;this.sourceURL=payload.sourceURL;this.hasSourceURL=!!payload.hasSourceURL;this.origin=payload.origin;this.title=payload.title;this.disabled=payload.disabled;this.isInline=payload.isInline;this.startLine=payload.startLine;this.startColumn=payload.startColumn;this.endLine=payload.endLine;this.endColumn=payload.endColumn;this.contentLength=payload.length;if(payload.ownerNode){this.ownerNode=new SDK.DeferredDOMNode(cssModel.target(),payload.ownerNode);}
this.setSourceMapURL(payload.sourceMapURL);}
originalContentProvider(){if(!this._originalContentProvider){const lazyContent=(async()=>{const originalText=await this._cssModel.originalStyleSheetText(this);if(originalText===null){return{error:ls`Could not find the original style sheet.`,isEncoded:false};}
return{content:originalText,isEncoded:false};});this._originalContentProvider=new Common.StaticContentProvider(this.contentURL(),this.contentType(),lazyContent);}
return this._originalContentProvider;}
setSourceMapURL(sourceMapURL){this.sourceMapURL=sourceMapURL;}
cssModel(){return this._cssModel;}
isAnonymousInlineStyleSheet(){return!this.resourceURL()&&!this._cssModel.sourceMapManager().sourceMapForClient(this);}
resourceURL(){return this.isViaInspector()?this._viaInspectorResourceURL():this.sourceURL;}
_viaInspectorResourceURL(){const frame=this._cssModel.target().model(SDK.ResourceTreeModel).frameForId(this.frameId);console.assert(frame);const parsedURL=new Common.ParsedURL(frame.url);let fakeURL='inspector://'+parsedURL.host+parsedURL.folderPathComponents;if(!fakeURL.endsWith('/')){fakeURL+='/';}
fakeURL+='inspector-stylesheet';return fakeURL;}
lineNumberInSource(lineNumberInStyleSheet){return this.startLine+lineNumberInStyleSheet;}
columnNumberInSource(lineNumberInStyleSheet,columnNumberInStyleSheet){return(lineNumberInStyleSheet?0:this.startColumn)+columnNumberInStyleSheet;}
containsLocation(lineNumber,columnNumber){const afterStart=(lineNumber===this.startLine&&columnNumber>=this.startColumn)||lineNumber>this.startLine;const beforeEnd=lineNumber<this.endLine||(lineNumber===this.endLine&&columnNumber<=this.endColumn);return afterStart&&beforeEnd;}
contentURL(){return this.resourceURL();}
contentType(){return Common.resourceTypes.Stylesheet;}
contentEncoded(){return Promise.resolve(false);}
async requestContent(){try{const cssText=await this._cssModel.getStyleSheetText(this.id);return{content:(cssText),isEncoded:false};}catch(err){return{error:ls`There was an error retrieving the source styles.`,isEncoded:false,};}}
async searchInContent(query,caseSensitive,isRegex){const{content}=await this.requestContent();return Common.ContentProvider.performSearchInContent(content||'',query,caseSensitive,isRegex);}
isViaInspector(){return this.origin==='inspector';}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.CSSStyleSheetHeader=CSSStyleSheetHeader;export default class CSSStyleDeclaration{constructor(cssModel,parentRule,payload,type){this._cssModel=cssModel;this.parentRule=parentRule;this._allProperties;this.styleSheetId;this.range;this.cssText;this._shorthandValues;this._shorthandIsImportant;this._activePropertyMap;this._leadingProperties;this._reinitialize(payload);this.type=type;}
rebase(edit){if(this.styleSheetId!==edit.styleSheetId||!this.range){return;}
if(edit.oldRange.equal(this.range)){this._reinitialize((edit.payload));}else{this.range=this.range.rebaseAfterTextEdit(edit.oldRange,edit.newRange);for(let i=0;i<this._allProperties.length;++i){this._allProperties[i].rebase(edit);}}}
_reinitialize(payload){this.styleSheetId=payload.styleSheetId;this.range=payload.range?TextUtils.TextRange.fromObject(payload.range):null;const shorthandEntries=payload.shorthandEntries;this._shorthandValues=new Map();this._shorthandIsImportant=new Set();for(let i=0;i<shorthandEntries.length;++i){this._shorthandValues.set(shorthandEntries[i].name,shorthandEntries[i].value);if(shorthandEntries[i].important){this._shorthandIsImportant.add(shorthandEntries[i].name);}}
this._allProperties=[];if(payload.cssText&&this.range){const cssText=new TextUtils.Text(payload.cssText);let start={line:this.range.startLine,column:this.range.startColumn};for(const cssProperty of payload.cssProperties){const range=cssProperty.range;if(range){parseUnusedText.call(this,cssText,start.line,start.column,range.startLine,range.startColumn);start={line:range.endLine,column:range.endColumn};}
this._allProperties.push(SDK.CSSProperty.parsePayload(this,this._allProperties.length,cssProperty));}
parseUnusedText.call(this,cssText,start.line,start.column,this.range.endLine,this.range.endColumn);}else{for(const cssProperty of payload.cssProperties){this._allProperties.push(SDK.CSSProperty.parsePayload(this,this._allProperties.length,cssProperty));}}
this._generateSyntheticPropertiesIfNeeded();this._computeInactiveProperties();this._activePropertyMap=new Map();for(const property of this._allProperties){if(!property.activeInStyle()){continue;}
this._activePropertyMap.set(property.name,property);}
this.cssText=payload.cssText;this._leadingProperties=null;function parseUnusedText(cssText,startLine,startColumn,endLine,endColumn){const tr=new TextUtils.TextRange(startLine,startColumn,endLine,endColumn);const missingText=cssText.extract(tr.relativeTo(this.range.startLine,this.range.startColumn));const lines=missingText.split('\n');let lineNumber=0;let inComment=false;for(const line of lines){let column=0;for(const property of line.split(';')){const strippedProperty=stripComments(property,inComment);const trimmedProperty=strippedProperty.text.trim();inComment=strippedProperty.inComment;if(trimmedProperty){let name;let value;const colonIndex=trimmedProperty.indexOf(':');if(colonIndex===-1){name=trimmedProperty;value='';}else{name=trimmedProperty.substring(0,colonIndex).trim();value=trimmedProperty.substring(colonIndex+1).trim();}
const range=new TextUtils.TextRange(lineNumber,column,lineNumber,column+property.length);this._allProperties.push(new SDK.CSSProperty(this,this._allProperties.length,name,value,false,false,false,false,property,range.relativeFrom(startLine,startColumn)));}
column+=property.length+1;}
lineNumber++;}}
function stripComments(text,inComment){let output='';for(let i=0;i<text.length;i++){if(!inComment&&text.substring(i,i+2)==='/*'){inComment=true;i++;}else if(inComment&&text.substring(i,i+2)==='*/'){inComment=false;i++;}else if(!inComment){output+=text[i];}}
return{text:output,inComment};}}
_generateSyntheticPropertiesIfNeeded(){if(this.range){return;}
if(!this._shorthandValues.size){return;}
const propertiesSet=new Set();for(const property of this._allProperties){propertiesSet.add(property.name);}
const generatedProperties=[];for(const property of this._allProperties){const shorthands=SDK.cssMetadata().shorthands(property.name)||[];for(const shorthand of shorthands){if(propertiesSet.has(shorthand)){continue;}
const shorthandValue=this._shorthandValues.get(shorthand);if(!shorthandValue){continue;}
const shorthandImportance=!!this._shorthandIsImportant.has(shorthand);const shorthandProperty=new SDK.CSSProperty(this,this.allProperties().length,shorthand,shorthandValue,shorthandImportance,false,true,false);generatedProperties.push(shorthandProperty);propertiesSet.add(shorthand);}}
this._allProperties=this._allProperties.concat(generatedProperties);}
_computeLeadingProperties(){function propertyHasRange(property){return!!property.range;}
if(this.range){return this._allProperties.filter(propertyHasRange);}
const leadingProperties=[];for(const property of this._allProperties){const shorthands=SDK.cssMetadata().shorthands(property.name)||[];let belongToAnyShorthand=false;for(const shorthand of shorthands){if(this._shorthandValues.get(shorthand)){belongToAnyShorthand=true;break;}}
if(!belongToAnyShorthand){leadingProperties.push(property);}}
return leadingProperties;}
leadingProperties(){if(!this._leadingProperties){this._leadingProperties=this._computeLeadingProperties();}
return this._leadingProperties;}
target(){return this._cssModel.target();}
cssModel(){return this._cssModel;}
_computeInactiveProperties(){const activeProperties={};for(let i=0;i<this._allProperties.length;++i){const property=this._allProperties[i];if(property.disabled||!property.parsedOk){property.setActive(false);continue;}
const canonicalName=SDK.cssMetadata().canonicalPropertyName(property.name);const activeProperty=activeProperties[canonicalName];if(!activeProperty){activeProperties[canonicalName]=property;}else if(!activeProperty.important||property.important){activeProperty.setActive(false);activeProperties[canonicalName]=property;}else{property.setActive(false);}}}
allProperties(){return this._allProperties;}
getPropertyValue(name){const property=this._activePropertyMap.get(name);return property?property.value:'';}
isPropertyImplicit(name){const property=this._activePropertyMap.get(name);return property?property.implicit:false;}
longhandProperties(name){const longhands=SDK.cssMetadata().longhands(name);const result=[];for(let i=0;longhands&&i<longhands.length;++i){const property=this._activePropertyMap.get(longhands[i]);if(property){result.push(property);}}
return result;}
propertyAt(index){return(index<this.allProperties().length)?this.allProperties()[index]:null;}
pastLastSourcePropertyIndex(){for(let i=this.allProperties().length-1;i>=0;--i){if(this.allProperties()[i].range){return i+1;}}
return 0;}
_insertionRange(index){const property=this.propertyAt(index);return property&&property.range?property.range.collapseToStart():this.range.collapseToEnd();}
newBlankProperty(index){index=(typeof index==='undefined')?this.pastLastSourcePropertyIndex():index;const property=new SDK.CSSProperty(this,index,'','',false,false,true,false,'',this._insertionRange(index));return property;}
setText(text,majorChange){if(!this.range||!this.styleSheetId){return Promise.resolve(false);}
return this._cssModel.setStyleText(this.styleSheetId,this.range,text,majorChange);}
insertPropertyAt(index,name,value,userCallback){this.newBlankProperty(index).setText(name+': '+value+';',false,true).then(userCallback);}
appendProperty(name,value,userCallback){this.insertPropertyAt(this.allProperties().length,name,value,userCallback);}}
export const Type={Regular:'Regular',Inline:'Inline',Attributes:'Attributes'};self.SDK=self.SDK||{};SDK=SDK||{};SDK.CSSStyleDeclaration=CSSStyleDeclaration;SDK.CSSStyleDeclaration.Type=Type;export default class CSSRule{constructor(cssModel,payload){this._cssModel=cssModel;this.styleSheetId=payload.styleSheetId;if(this.styleSheetId){const styleSheetHeader=cssModel.styleSheetHeaderForId(this.styleSheetId);this.sourceURL=styleSheetHeader.sourceURL;}
this.origin=payload.origin;this.style=new SDK.CSSStyleDeclaration(this._cssModel,this,payload.style,SDK.CSSStyleDeclaration.Type.Regular);}
rebase(edit){if(this.styleSheetId!==edit.styleSheetId){return;}
this.style.rebase(edit);}
resourceURL(){if(!this.styleSheetId){return'';}
const styleSheetHeader=this._cssModel.styleSheetHeaderForId(this.styleSheetId);return styleSheetHeader.resourceURL();}
isUserAgent(){return this.origin===Protocol.CSS.StyleSheetOrigin.UserAgent;}
isInjected(){return this.origin===Protocol.CSS.StyleSheetOrigin.Injected;}
isViaInspector(){return this.origin===Protocol.CSS.StyleSheetOrigin.Inspector;}
isRegular(){return this.origin===Protocol.CSS.StyleSheetOrigin.Regular;}
cssModel(){return this._cssModel;}}
class CSSValue{constructor(payload){this.text=payload.text;if(payload.range){this.range=TextUtils.TextRange.fromObject(payload.range);}}
rebase(edit){if(!this.range){return;}
this.range=this.range.rebaseAfterTextEdit(edit.oldRange,edit.newRange);}}
export class CSSStyleRule extends CSSRule{constructor(cssModel,payload,wasUsed){super(cssModel,payload);this._reinitializeSelectors(payload.selectorList);this.media=payload.media?SDK.CSSMedia.parseMediaArrayPayload(cssModel,payload.media):[];this.wasUsed=wasUsed||false;}
static createDummyRule(cssModel,selectorText){const dummyPayload={selectorList:{selectors:[{text:selectorText}],},style:{styleSheetId:'0',range:new TextUtils.TextRange(0,0,0,0),shorthandEntries:[],cssProperties:[]}};return new CSSStyleRule(cssModel,(dummyPayload));}
_reinitializeSelectors(selectorList){this.selectors=[];for(let i=0;i<selectorList.selectors.length;++i){this.selectors.push(new CSSValue(selectorList.selectors[i]));}}
setSelectorText(newSelector){const styleSheetId=this.styleSheetId;if(!styleSheetId){throw'No rule stylesheet id';}
const range=this.selectorRange();if(!range){throw'Rule selector is not editable';}
return this._cssModel.setSelectorText(styleSheetId,range,newSelector);}
selectorText(){return this.selectors.select('text').join(', ');}
selectorRange(){const firstRange=this.selectors[0].range;if(!firstRange){return null;}
const lastRange=this.selectors.peekLast().range;return new TextUtils.TextRange(firstRange.startLine,firstRange.startColumn,lastRange.endLine,lastRange.endColumn);}
lineNumberInSource(selectorIndex){const selector=this.selectors[selectorIndex];if(!selector||!selector.range||!this.styleSheetId){return 0;}
const styleSheetHeader=this._cssModel.styleSheetHeaderForId(this.styleSheetId);return styleSheetHeader.lineNumberInSource(selector.range.startLine);}
columnNumberInSource(selectorIndex){const selector=this.selectors[selectorIndex];if(!selector||!selector.range||!this.styleSheetId){return undefined;}
const styleSheetHeader=this._cssModel.styleSheetHeaderForId(this.styleSheetId);console.assert(styleSheetHeader);return styleSheetHeader.columnNumberInSource(selector.range.startLine,selector.range.startColumn);}
rebase(edit){if(this.styleSheetId!==edit.styleSheetId){return;}
if(this.selectorRange().equal(edit.oldRange)){this._reinitializeSelectors((edit.payload));}else{for(let i=0;i<this.selectors.length;++i){this.selectors[i].rebase(edit);}}
for(const media of this.media){media.rebase(edit);}
super.rebase(edit);}}
export class CSSKeyframesRule{constructor(cssModel,payload){this._cssModel=cssModel;this._animationName=new CSSValue(payload.animationName);this._keyframes=payload.keyframes.map(keyframeRule=>new CSSKeyframeRule(cssModel,keyframeRule));}
name(){return this._animationName;}
keyframes(){return this._keyframes;}}
export class CSSKeyframeRule extends CSSRule{constructor(cssModel,payload){super(cssModel,payload);this._reinitializeKey(payload.keyText);}
key(){return this._keyText;}
_reinitializeKey(payload){this._keyText=new CSSValue(payload);}
rebase(edit){if(this.styleSheetId!==edit.styleSheetId||!this._keyText.range){return;}
if(edit.oldRange.equal(this._keyText.range)){this._reinitializeKey((edit.payload));}else{this._keyText.rebase(edit);}
super.rebase(edit);}
setKeyText(newKeyText){const styleSheetId=this.styleSheetId;if(!styleSheetId){throw'No rule stylesheet id';}
const range=this._keyText.range;if(!range){throw'Keyframe key is not editable';}
return this._cssModel.setKeyframeKey(styleSheetId,range,newKeyText);}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.CSSRule=CSSRule;SDK.CSSStyleRule=CSSStyleRule;SDK.CSSKeyframesRule=CSSKeyframesRule;SDK.CSSKeyframeRule=CSSKeyframeRule;export default class CSSProperty{constructor(ownerStyle,index,name,value,important,disabled,parsedOk,implicit,text,range){this.ownerStyle=ownerStyle;this.index=index;this.name=name;this.value=value;this.important=important;this.disabled=disabled;this.parsedOk=parsedOk;this.implicit=implicit;this.text=text;this.range=range?TextUtils.TextRange.fromObject(range):null;this._active=true;this._nameRange=null;this._valueRange=null;}
static parsePayload(ownerStyle,index,payload){const result=new CSSProperty(ownerStyle,index,payload.name,payload.value,payload.important||false,payload.disabled||false,('parsedOk'in payload)?!!payload.parsedOk:true,!!payload.implicit,payload.text,payload.range);return result;}
_ensureRanges(){if(this._nameRange&&this._valueRange){return;}
const range=this.range;const text=this.text?new TextUtils.Text(this.text):null;if(!range||!text){return;}
const nameIndex=text.value().indexOf(this.name);const valueIndex=text.value().lastIndexOf(this.value);if(nameIndex===-1||valueIndex===-1||nameIndex>valueIndex){return;}
const nameSourceRange=new TextUtils.SourceRange(nameIndex,this.name.length);const valueSourceRange=new TextUtils.SourceRange(valueIndex,this.value.length);this._nameRange=rebase(text.toTextRange(nameSourceRange),range.startLine,range.startColumn);this._valueRange=rebase(text.toTextRange(valueSourceRange),range.startLine,range.startColumn);function rebase(oneLineRange,lineOffset,columnOffset){if(oneLineRange.startLine===0){oneLineRange.startColumn+=columnOffset;oneLineRange.endColumn+=columnOffset;}
oneLineRange.startLine+=lineOffset;oneLineRange.endLine+=lineOffset;return oneLineRange;}}
nameRange(){this._ensureRanges();return this._nameRange;}
valueRange(){this._ensureRanges();return this._valueRange;}
rebase(edit){if(this.ownerStyle.styleSheetId!==edit.styleSheetId){return;}
if(this.range){this.range=this.range.rebaseAfterTextEdit(edit.oldRange,edit.newRange);}}
setActive(active){this._active=active;}
get propertyText(){if(this.text!==undefined){return this.text;}
if(this.name===''){return'';}
return this.name+': '+this.value+(this.important?' !important':'')+';';}
activeInStyle(){return this._active;}
async setText(propertyText,majorChange,overwrite){if(!this.ownerStyle){return Promise.reject(new Error('No ownerStyle for property'));}
if(!this.ownerStyle.styleSheetId){return Promise.reject(new Error('No owner style id'));}
if(!this.range||!this.ownerStyle.range){return Promise.reject(new Error('Style not editable'));}
if(majorChange){Host.userMetrics.actionTaken(Host.UserMetrics.Action.StyleRuleEdited);}
if(overwrite&&propertyText===this.propertyText){this.ownerStyle.cssModel().domModel().markUndoableState(!majorChange);return Promise.resolve(true);}
const range=this.range.relativeTo(this.ownerStyle.range.startLine,this.ownerStyle.range.startColumn);const indentation=this.ownerStyle.cssText?this._detectIndentation(this.ownerStyle.cssText):Common.moduleSetting('textEditorIndent').get();const endIndentation=this.ownerStyle.cssText?indentation.substring(0,this.ownerStyle.range.endColumn):'';const text=new TextUtils.Text(this.ownerStyle.cssText||'');const newStyleText=text.replaceRange(range,String.sprintf(';%s;',propertyText));const tokenizerFactory=await self.runtime.extension(TextUtils.TokenizerFactory).instance();const styleText=CSSProperty._formatStyle(newStyleText,indentation,endIndentation,tokenizerFactory);return this.ownerStyle.setText(styleText,majorChange);}
static _formatStyle(styleText,indentation,endIndentation,tokenizerFactory){const doubleIndent=indentation.substring(endIndentation.length)+indentation;if(indentation){indentation='\n'+indentation;}
let result='';let propertyName='';let propertyText;let insideProperty=false;let needsSemi=false;const tokenize=tokenizerFactory.createTokenizer('text/css');tokenize('*{'+styleText+'}',processToken);if(insideProperty){result+=propertyText;}
result=result.substring(2,result.length-1).trimRight();return result+(indentation?'\n'+endIndentation:'');function processToken(token,tokenType,column,newColumn){if(!insideProperty){const disabledProperty=tokenType&&tokenType.includes('css-comment')&&isDisabledProperty(token);const isPropertyStart=tokenType&&(tokenType.includes('css-string')||tokenType.includes('css-meta')||tokenType.includes('css-property')||tokenType.includes('css-variable-2'));if(disabledProperty){result=result.trimRight()+indentation+token;}else if(isPropertyStart){insideProperty=true;propertyText=token;}else if(token!==';'||needsSemi){result+=token;if(token.trim()&&!(tokenType&&tokenType.includes('css-comment'))){needsSemi=token!==';';}}
if(token==='{'&&!tokenType){needsSemi=false;}
return;}
if(token==='}'||token===';'){result=result.trimRight()+indentation+propertyText.trim()+';';needsSemi=false;insideProperty=false;propertyName='';if(token==='}'){result+='}';}}else{if(SDK.cssMetadata().isGridAreaDefiningProperty(propertyName)){const rowResult=SDK.CSSMetadata.GridAreaRowRegex.exec(token);if(rowResult&&rowResult.index===0&&!propertyText.trimRight().endsWith(']')){propertyText=propertyText.trimRight()+'\n'+doubleIndent;}}
if(!propertyName&&token===':'){propertyName=propertyText;}
propertyText+=token;}}
function isDisabledProperty(text){const colon=text.indexOf(':');if(colon===-1){return false;}
const propertyName=text.substring(2,colon).trim();return SDK.cssMetadata().isCSSPropertyName(propertyName);}}
_detectIndentation(text){const lines=text.split('\n');if(lines.length<2){return'';}
return TextUtils.TextUtils.lineIndent(lines[1]);}
setValue(newValue,majorChange,overwrite,userCallback){const text=this.name+': '+newValue+(this.important?' !important':'')+';';this.setText(text,majorChange,overwrite).then(userCallback);}
setDisabled(disabled){if(!this.ownerStyle){return Promise.resolve(false);}
if(disabled===this.disabled){return Promise.resolve(true);}
const propertyText=this.text.trim();const text=disabled?'/* '+propertyText+' */':this.text.substring(2,propertyText.length-2).trim();return this.setText(text,true,true);}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.CSSProperty=CSSProperty;export default class CSSModel extends SDK.SDKModel{constructor(target){super(target);this._domModel=(target.model(SDK.DOMModel));this._sourceMapManager=new SDK.SourceMapManager(target);this._agent=target.cssAgent();this._styleLoader=new ComputedStyleLoader(this);this._resourceTreeModel=target.model(SDK.ResourceTreeModel);if(this._resourceTreeModel){this._resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._resetStyleSheets,this);}
target.registerCSSDispatcher(new CSSDispatcher(this));if(!target.suspended()){this._enable();}
this._styleSheetIdToHeader=new Map();this._styleSheetIdsForURL=new Map();this._originalStyleSheetText=new Map();this._isRuleUsageTrackingEnabled=false;this._sourceMapManager.setEnabled(Common.moduleSetting('cssSourceMapsEnabled').get());Common.moduleSetting('cssSourceMapsEnabled').addChangeListener(event=>this._sourceMapManager.setEnabled((event.data)));}
headersForSourceURL(sourceURL){const headers=[];for(const headerId of this.styleSheetIdsForURL(sourceURL)){const header=this.styleSheetHeaderForId(headerId);if(header){headers.push(header);}}
return headers;}
createRawLocationsByURL(sourceURL,lineNumber,columnNumber){const headers=this.headersForSourceURL(sourceURL);headers.sort(stylesheetComparator);const compareToArgLocation=(_,header)=>lineNumber-header.startLine||columnNumber-header.startColumn;const endIndex=headers.upperBound(undefined,compareToArgLocation);if(!endIndex){return[];}
const locations=[];const last=headers[endIndex-1];for(let index=endIndex-1;index>=0&&headers[index].startLine===last.startLine&&headers[index].startColumn===last.startColumn;--index){if(headers[index].containsLocation(lineNumber,columnNumber)){locations.push(new SDK.CSSLocation(headers[index],lineNumber,columnNumber));}}
return locations;function stylesheetComparator(a,b){return a.startLine-b.startLine||a.startColumn-b.startColumn||a.id.localeCompare(b.id);}}
sourceMapManager(){return this._sourceMapManager;}
static trimSourceURL(text){let sourceURLIndex=text.lastIndexOf('/*# sourceURL=');if(sourceURLIndex===-1){sourceURLIndex=text.lastIndexOf('/*@ sourceURL=');if(sourceURLIndex===-1){return text;}}
const sourceURLLineIndex=text.lastIndexOf('\n',sourceURLIndex);if(sourceURLLineIndex===-1){return text;}
const sourceURLLine=text.substr(sourceURLLineIndex+1).split('\n',1)[0];const sourceURLRegex=/[\040\t]*\/\*[#@] sourceURL=[\040\t]*([^\s]*)[\040\t]*\*\/[\040\t]*$/;if(sourceURLLine.search(sourceURLRegex)===-1){return text;}
return text.substr(0,sourceURLLineIndex)+text.substr(sourceURLLineIndex+sourceURLLine.length+1);}
domModel(){return this._domModel;}
async setStyleText(styleSheetId,range,text,majorChange){try{await this._ensureOriginalStyleSheetText(styleSheetId);const stylePayloads=await this._agent.setStyleTexts([{styleSheetId:styleSheetId,range:range.serializeToObject(),text:text}]);if(!stylePayloads||stylePayloads.length!==1){return false;}
this._domModel.markUndoableState(!majorChange);const edit=new Edit(styleSheetId,range,text,stylePayloads[0]);this._fireStyleSheetChanged(styleSheetId,edit);return true;}catch(e){return false;}}
async setSelectorText(styleSheetId,range,text){Host.userMetrics.actionTaken(Host.UserMetrics.Action.StyleRuleEdited);try{await this._ensureOriginalStyleSheetText(styleSheetId);const selectorPayload=await this._agent.setRuleSelector(styleSheetId,range,text);if(!selectorPayload){return false;}
this._domModel.markUndoableState();const edit=new Edit(styleSheetId,range,text,selectorPayload);this._fireStyleSheetChanged(styleSheetId,edit);return true;}catch(e){return false;}}
async setKeyframeKey(styleSheetId,range,text){Host.userMetrics.actionTaken(Host.UserMetrics.Action.StyleRuleEdited);try{await this._ensureOriginalStyleSheetText(styleSheetId);const payload=await this._agent.setKeyframeKey(styleSheetId,range,text);if(!payload){return false;}
this._domModel.markUndoableState();const edit=new Edit(styleSheetId,range,text,payload);this._fireStyleSheetChanged(styleSheetId,edit);return true;}catch(e){return false;}}
startCoverage(){this._isRuleUsageTrackingEnabled=true;return this._agent.startRuleUsageTracking();}
takeCoverageDelta(){return this._agent.takeCoverageDelta().then(ruleUsage=>ruleUsage||[]);}
stopCoverage(){this._isRuleUsageTrackingEnabled=false;return this._agent.stopRuleUsageTracking();}
async mediaQueriesPromise(){const payload=await this._agent.getMediaQueries();return payload?SDK.CSSMedia.parseMediaArrayPayload(this,payload):[];}
isEnabled(){return this._isEnabled;}
async _enable(){await this._agent.enable();this._isEnabled=true;if(this._isRuleUsageTrackingEnabled){await this.startCoverage();}
this.dispatchEventToListeners(Events.ModelWasEnabled);}
async matchedStylesPromise(nodeId){const response=await this._agent.invoke_getMatchedStylesForNode({nodeId});if(response[Protocol.Error]){return null;}
const node=this._domModel.nodeForId(nodeId);if(!node){return null;}
return new SDK.CSSMatchedStyles(this,(node),response.inlineStyle||null,response.attributesStyle||null,response.matchedCSSRules||[],response.pseudoElements||[],response.inherited||[],response.cssKeyframesRules||[]);}
classNamesPromise(styleSheetId){return this._agent.collectClassNames(styleSheetId).then(classNames=>classNames||[]);}
computedStylePromise(nodeId){return this._styleLoader.computedStylePromise(nodeId);}
async backgroundColorsPromise(nodeId){const response=this._agent.invoke_getBackgroundColors({nodeId});if(response[Protocol.Error]){return null;}
return response;}
platformFontsPromise(nodeId){return this._agent.getPlatformFontsForNode(nodeId);}
allStyleSheets(){const values=this._styleSheetIdToHeader.valuesArray();function styleSheetComparator(a,b){if(a.sourceURL<b.sourceURL){return-1;}else if(a.sourceURL>b.sourceURL){return 1;}
return a.startLine-b.startLine||a.startColumn-b.startColumn;}
values.sort(styleSheetComparator);return values;}
async inlineStylesPromise(nodeId){const response=await this._agent.invoke_getInlineStylesForNode({nodeId});if(response[Protocol.Error]||!response.inlineStyle){return null;}
const inlineStyle=new SDK.CSSStyleDeclaration(this,null,response.inlineStyle,SDK.CSSStyleDeclaration.Type.Inline);const attributesStyle=response.attributesStyle?new SDK.CSSStyleDeclaration(this,null,response.attributesStyle,SDK.CSSStyleDeclaration.Type.Attributes):null;return new InlineStyleResult(inlineStyle,attributesStyle);}
forcePseudoState(node,pseudoClass,enable){const pseudoClasses=node.marker(PseudoStateMarker)||[];if(enable){if(pseudoClasses.indexOf(pseudoClass)>=0){return false;}
pseudoClasses.push(pseudoClass);node.setMarker(PseudoStateMarker,pseudoClasses);}else{if(pseudoClasses.indexOf(pseudoClass)<0){return false;}
pseudoClasses.remove(pseudoClass);if(pseudoClasses.length){node.setMarker(PseudoStateMarker,pseudoClasses);}else{node.setMarker(PseudoStateMarker,null);}}
this._agent.forcePseudoState(node.id,pseudoClasses);this.dispatchEventToListeners(Events.PseudoStateForced,{node:node,pseudoClass:pseudoClass,enable:enable});return true;}
pseudoState(node){return node.marker(PseudoStateMarker)||[];}
async setMediaText(styleSheetId,range,newMediaText){Host.userMetrics.actionTaken(Host.UserMetrics.Action.StyleRuleEdited);try{await this._ensureOriginalStyleSheetText(styleSheetId);const mediaPayload=await this._agent.setMediaText(styleSheetId,range,newMediaText);if(!mediaPayload){return false;}
this._domModel.markUndoableState();const edit=new Edit(styleSheetId,range,newMediaText,mediaPayload);this._fireStyleSheetChanged(styleSheetId,edit);return true;}catch(e){return false;}}
async addRule(styleSheetId,ruleText,ruleLocation){try{await this._ensureOriginalStyleSheetText(styleSheetId);const rulePayload=await this._agent.addRule(styleSheetId,ruleText,ruleLocation);if(!rulePayload){return null;}
this._domModel.markUndoableState();const edit=new Edit(styleSheetId,ruleLocation,ruleText,rulePayload);this._fireStyleSheetChanged(styleSheetId,edit);return new SDK.CSSStyleRule(this,rulePayload);}catch(e){return null;}}
async requestViaInspectorStylesheet(node){const frameId=node.frameId()||(this._resourceTreeModel?this._resourceTreeModel.mainFrame.id:'');const headers=this._styleSheetIdToHeader.valuesArray();const styleSheetHeader=headers.find(header=>header.frameId===frameId&&header.isViaInspector());if(styleSheetHeader){return styleSheetHeader;}
try{const styleSheetId=await this._agent.createStyleSheet(frameId);return styleSheetId&&this._styleSheetIdToHeader.get(styleSheetId)||null;}catch(e){return null;}}
mediaQueryResultChanged(){this.dispatchEventToListeners(Events.MediaQueryResultChanged);}
fontsUpdated(){this.dispatchEventToListeners(Events.FontsUpdated);}
styleSheetHeaderForId(id){return this._styleSheetIdToHeader.get(id)||null;}
styleSheetHeaders(){return this._styleSheetIdToHeader.valuesArray();}
_fireStyleSheetChanged(styleSheetId,edit){this.dispatchEventToListeners(Events.StyleSheetChanged,{styleSheetId:styleSheetId,edit:edit});}
_ensureOriginalStyleSheetText(styleSheetId){const header=this.styleSheetHeaderForId(styleSheetId);if(!header){return Promise.resolve((null));}
let promise=this._originalStyleSheetText.get(header);if(!promise){promise=this.getStyleSheetText(header.id);this._originalStyleSheetText.set(header,promise);this._originalContentRequestedForTest(header);}
return promise;}
_originalContentRequestedForTest(header){}
originalStyleSheetText(header){return this._ensureOriginalStyleSheetText(header.id);}
getAllStyleSheetHeaders(){return this._styleSheetIdToHeader.values();}
_styleSheetAdded(header){console.assert(!this._styleSheetIdToHeader.get(header.styleSheetId));const styleSheetHeader=new SDK.CSSStyleSheetHeader(this,header);this._styleSheetIdToHeader.set(header.styleSheetId,styleSheetHeader);const url=styleSheetHeader.resourceURL();if(!this._styleSheetIdsForURL.get(url)){this._styleSheetIdsForURL.set(url,{});}
const frameIdToStyleSheetIds=this._styleSheetIdsForURL.get(url);let styleSheetIds=frameIdToStyleSheetIds[styleSheetHeader.frameId];if(!styleSheetIds){styleSheetIds=[];frameIdToStyleSheetIds[styleSheetHeader.frameId]=styleSheetIds;}
styleSheetIds.push(styleSheetHeader.id);this._sourceMapManager.attachSourceMap(styleSheetHeader,styleSheetHeader.sourceURL,styleSheetHeader.sourceMapURL);this.dispatchEventToListeners(Events.StyleSheetAdded,styleSheetHeader);}
_styleSheetRemoved(id){const header=this._styleSheetIdToHeader.get(id);console.assert(header);if(!header){return;}
this._styleSheetIdToHeader.remove(id);const url=header.resourceURL();const frameIdToStyleSheetIds=(this._styleSheetIdsForURL.get(url));console.assert(frameIdToStyleSheetIds,'No frameId to styleSheetId map is available for given style sheet URL.');frameIdToStyleSheetIds[header.frameId].remove(id);if(!frameIdToStyleSheetIds[header.frameId].length){delete frameIdToStyleSheetIds[header.frameId];if(!Object.keys(frameIdToStyleSheetIds).length){this._styleSheetIdsForURL.remove(url);}}
this._originalStyleSheetText.remove(header);this._sourceMapManager.detachSourceMap(header);this.dispatchEventToListeners(Events.StyleSheetRemoved,header);}
styleSheetIdsForURL(url){const frameIdToStyleSheetIds=this._styleSheetIdsForURL.get(url);if(!frameIdToStyleSheetIds){return[];}
let result=[];for(const frameId in frameIdToStyleSheetIds){result=result.concat(frameIdToStyleSheetIds[frameId]);}
return result;}
async setStyleSheetText(styleSheetId,newText,majorChange){const header=(this._styleSheetIdToHeader.get(styleSheetId));console.assert(header);newText=CSSModel.trimSourceURL(newText);if(header.hasSourceURL){newText+='\n/*# sourceURL='+header.sourceURL+' */';}
await this._ensureOriginalStyleSheetText(styleSheetId);const response=await this._agent.invoke_setStyleSheetText({styleSheetId:header.id,text:newText});const sourceMapURL=response.sourceMapURL;this._sourceMapManager.detachSourceMap(header);header.setSourceMapURL(sourceMapURL);this._sourceMapManager.attachSourceMap(header,header.sourceURL,header.sourceMapURL);if(sourceMapURL===null){return'Error in CSS.setStyleSheetText';}
this._domModel.markUndoableState(!majorChange);this._fireStyleSheetChanged(styleSheetId);return null;}
async getStyleSheetText(styleSheetId){try{const text=await this._agent.getStyleSheetText(styleSheetId);return text&&CSSModel.trimSourceURL(text);}catch(e){return null;}}
_resetStyleSheets(){const headers=this._styleSheetIdToHeader.valuesArray();this._styleSheetIdsForURL.clear();this._styleSheetIdToHeader.clear();for(let i=0;i<headers.length;++i){this._sourceMapManager.detachSourceMap(headers[i]);this.dispatchEventToListeners(Events.StyleSheetRemoved,headers[i]);}}
suspendModel(){this._isEnabled=false;return this._agent.disable().then(this._resetStyleSheets.bind(this));}
async resumeModel(){return this._enable();}
setEffectivePropertyValueForNode(nodeId,name,value){this._agent.setEffectivePropertyValueForNode(nodeId,name,value);}
cachedMatchedCascadeForNode(node){if(this._cachedMatchedCascadeNode!==node){this.discardCachedMatchedCascade();}
this._cachedMatchedCascadeNode=node;if(!this._cachedMatchedCascadePromise){this._cachedMatchedCascadePromise=this.matchedStylesPromise(node.id);}
return this._cachedMatchedCascadePromise;}
discardCachedMatchedCascade(){delete this._cachedMatchedCascadeNode;delete this._cachedMatchedCascadePromise;}
dispose(){super.dispose();this._sourceMapManager.dispose();}}
export const Events={FontsUpdated:Symbol('FontsUpdated'),MediaQueryResultChanged:Symbol('MediaQueryResultChanged'),ModelWasEnabled:Symbol('ModelWasEnabled'),PseudoStateForced:Symbol('PseudoStateForced'),StyleSheetAdded:Symbol('StyleSheetAdded'),StyleSheetChanged:Symbol('StyleSheetChanged'),StyleSheetRemoved:Symbol('StyleSheetRemoved')};const PseudoStateMarker='pseudo-state-marker';export class Edit{constructor(styleSheetId,oldRange,newText,payload){this.styleSheetId=styleSheetId;this.oldRange=oldRange;this.newRange=TextUtils.TextRange.fromEdit(oldRange,newText);this.newText=newText;this.payload=payload;}}
export class CSSLocation{constructor(header,lineNumber,columnNumber){this._cssModel=header.cssModel();this.styleSheetId=header.id;this.url=header.resourceURL();this.lineNumber=lineNumber;this.columnNumber=columnNumber||0;}
cssModel(){return this._cssModel;}
header(){return this._cssModel.styleSheetHeaderForId(this.styleSheetId);}}
class CSSDispatcher{constructor(cssModel){this._cssModel=cssModel;}
mediaQueryResultChanged(){this._cssModel.mediaQueryResultChanged();}
fontsUpdated(){this._cssModel.fontsUpdated();}
styleSheetChanged(styleSheetId){this._cssModel._fireStyleSheetChanged(styleSheetId);}
styleSheetAdded(header){this._cssModel._styleSheetAdded(header);}
styleSheetRemoved(id){this._cssModel._styleSheetRemoved(id);}}
class ComputedStyleLoader{constructor(cssModel){this._cssModel=cssModel;this._nodeIdToPromise=new Map();}
computedStylePromise(nodeId){let promise=this._nodeIdToPromise.get(nodeId);if(promise){return promise;}
promise=this._cssModel._agent.getComputedStyleForNode(nodeId).then(parsePayload.bind(this));this._nodeIdToPromise.set(nodeId,promise);return promise;function parsePayload(computedPayload){this._nodeIdToPromise.delete(nodeId);if(!computedPayload||!computedPayload.length){return null;}
const result=new Map();for(const property of computedPayload){result.set(property.name,property.value);}
return result;}}}
export class InlineStyleResult{constructor(inlineStyle,attributesStyle){this.inlineStyle=inlineStyle;this.attributesStyle=attributesStyle;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.CSSModel=CSSModel;SDK.CSSModel.Events=Events;SDK.CSSModel.Edit=Edit;SDK.CSSModel.InlineStyleResult=InlineStyleResult;SDK.CSSLocation=CSSLocation;SDK.SDKModel.register(SDK.CSSModel,SDK.Target.Capability.DOM,true);SDK.CSSModel.RuleUsage;SDK.CSSModel.ContrastInfo;export default class CSSMetadata{constructor(properties){this._values=([]);this._longhands=new Map();this._shorthands=new Map();this._inherited=new Set();this._svgProperties=new Set();for(let i=0;i<properties.length;++i){const property=properties[i];const propertyName=property.name;if(!CSS.supports(propertyName,'initial')){continue;}
this._values.push(propertyName);if(property.inherited){this._inherited.add(propertyName);}
if(property.svg){this._svgProperties.add(propertyName);}
const longhands=properties[i].longhands;if(longhands){this._longhands.set(propertyName,longhands);for(let j=0;j<longhands.length;++j){const longhandName=longhands[j];let shorthands=this._shorthands.get(longhandName);if(!shorthands){shorthands=[];this._shorthands.set(longhandName,shorthands);}
shorthands.push(propertyName);}}}
this._values.sort(CSSMetadata._sortPrefixesToEnd);this._valuesSet=new Set(this._values);this._nameValuePresets=[];this._nameValuePresetsIncludingSVG=[];for(const name of this._valuesSet){const values=this._specificPropertyValues(name).filter(value=>CSS.supports(name,value)).sort(CSSMetadata._sortPrefixesToEnd);const presets=values.map(value=>`${name}: ${value}`);if(!this.isSVGProperty(name)){this._nameValuePresets.pushAll(presets);}
this._nameValuePresetsIncludingSVG.pushAll(presets);}}
static _sortPrefixesToEnd(a,b){const aIsPrefixed=a.startsWith('-webkit-');const bIsPrefixed=b.startsWith('-webkit-');if(aIsPrefixed&&!bIsPrefixed){return 1;}
if(!aIsPrefixed&&bIsPrefixed){return-1;}
return a<b?-1:(a>b?1:0);}
allProperties(){return this._values;}
nameValuePresets(includeSVG){return includeSVG?this._nameValuePresetsIncludingSVG:this._nameValuePresets;}
isSVGProperty(name){name=name.toLowerCase();return this._svgProperties.has(name);}
longhands(shorthand){return this._longhands.get(shorthand)||null;}
shorthands(longhand){return this._shorthands.get(longhand)||null;}
isColorAwareProperty(propertyName){return!!_colorAwareProperties.has(propertyName.toLowerCase())||this.isCustomProperty(propertyName.toLowerCase());}
isGridAreaDefiningProperty(propertyName){propertyName=propertyName.toLowerCase();return propertyName==='grid'||propertyName==='grid-template'||propertyName==='grid-template-areas';}
isLengthProperty(propertyName){propertyName=propertyName.toLowerCase();if(propertyName==='line-height'){return false;}
return _distanceProperties.has(propertyName)||propertyName.startsWith('margin')||propertyName.startsWith('padding')||propertyName.indexOf('width')!==-1||propertyName.indexOf('height')!==-1;}
isBezierAwareProperty(propertyName){propertyName=propertyName.toLowerCase();return!!_bezierAwareProperties.has(propertyName)||this.isCustomProperty(propertyName);}
isCustomProperty(propertyName){return propertyName.startsWith('--');}
canonicalPropertyName(name){if(this.isCustomProperty(name)){return name;}
name=name.toLowerCase();if(!name||name.length<9||name.charAt(0)!=='-'){return name;}
const match=name.match(/(?:-webkit-)(.+)/);if(!match||!this._valuesSet.has(match[1])){return name;}
return match[1];}
isCSSPropertyName(propertyName){propertyName=propertyName.toLowerCase();if(propertyName.startsWith('-moz-')||propertyName.startsWith('-o-')||propertyName.startsWith('-webkit-')||propertyName.startsWith('-ms-')){return true;}
return this._valuesSet.has(propertyName);}
isPropertyInherited(propertyName){propertyName=propertyName.toLowerCase();return propertyName.startsWith('--')||this._inherited.has(this.canonicalPropertyName(propertyName))||this._inherited.has(propertyName);}
_specificPropertyValues(propertyName){const unprefixedName=propertyName.replace(/^-webkit-/,'');const entry=_propertyDataMap[propertyName]||_propertyDataMap[unprefixedName];const keywords=entry&&entry.values?entry.values.slice():[];for(const commonKeyword of['auto','none']){if(CSS.supports(propertyName,commonKeyword)){keywords.push(commonKeyword);}}
return keywords;}
propertyValues(propertyName){const acceptedKeywords=['inherit','initial','unset'];propertyName=propertyName.toLowerCase();acceptedKeywords.pushAll(this._specificPropertyValues(propertyName));if(this.isColorAwareProperty(propertyName)){acceptedKeywords.push('currentColor');for(const color in Common.Color.Nicknames){acceptedKeywords.push(color);}}
return acceptedKeywords.sort(CSSMetadata._sortPrefixesToEnd);}
propertyUsageWeight(property){return Weight[property]||Weight[this.canonicalPropertyName(property)]||0;}
getValuePreset(key,value){const values=_valuePresets.get(key);let text=values?values.get(value):null;if(!text){return null;}
let startColumn=text.length;let endColumn=text.length;if(text){startColumn=text.indexOf('|');endColumn=text.lastIndexOf('|');endColumn=startColumn===endColumn?endColumn:endColumn-1;text=text.replace(/\|/g,'');}
return{text,startColumn,endColumn};}}
export const VariableRegex=/(var\(--.*?\))/g;export const URLRegex=/url\(\s*('.+?'|".+?"|[^)]+)\s*\)/g;export const GridAreaRowRegex=/((?:\[[\w\- ]+\]\s*)*(?:"[^"]+"|'[^']+'))[^'"\[]*\[?[^'"\[]*/;export function cssMetadata(){if(!CSSMetadata._instance){CSSMetadata._instance=new CSSMetadata(CSSMetadata._generatedProperties||[]);}
return CSSMetadata._instance;}
const _imageValuePresetMap=new Map([['linear-gradient','linear-gradient(|45deg, black, transparent|)'],['radial-gradient','radial-gradient(|black, transparent|)'],['repeating-linear-gradient','repeating-linear-gradient(|45deg, black, transparent 100px|)'],['repeating-radial-gradient','repeating-radial-gradient(|black, transparent 100px|)'],['url','url(||)'],]);const _valuePresets=new Map([['filter',new Map([['blur','blur(|1px|)'],['brightness','brightness(|0.5|)'],['contrast','contrast(|0.5|)'],['drop-shadow','drop-shadow(|2px 4px 6px black|)'],['grayscale','grayscale(|1|)'],['hue-rotate','hue-rotate(|45deg|)'],['invert','invert(|1|)'],['opacity','opacity(|0.5|)'],['saturate','saturate(|0.5|)'],['sepia','sepia(|1|)'],['url','url(||)'],])],['background',_imageValuePresetMap],['background-image',_imageValuePresetMap],['-webkit-mask-image',_imageValuePresetMap],['transform',new Map([['scale','scale(|1.5|)'],['scaleX','scaleX(|1.5|)'],['scaleY','scaleY(|1.5|)'],['scale3d','scale3d(|1.5, 1.5, 1.5|)'],['rotate','rotate(|45deg|)'],['rotateX','rotateX(|45deg|)'],['rotateY','rotateY(|45deg|)'],['rotateZ','rotateZ(|45deg|)'],['rotate3d','rotate3d(|1, 1, 1, 45deg|)'],['skew','skew(|10deg, 10deg|)'],['skewX','skewX(|10deg|)'],['skewY','skewY(|10deg|)'],['translate','translate(|10px, 10px|)'],['translateX','translateX(|10px|)'],['translateY','translateY(|10px|)'],['translateZ','translateZ(|10px|)'],['translate3d','translate3d(|10px, 10px, 10px|)'],['matrix','matrix(|1, 0, 0, 1, 0, 0|)'],['matrix3d','matrix3d(|1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1|)'],['perspective','perspective(|10px|)']])]]);const _distanceProperties=new Set(['background-position','border-spacing','bottom','font-size','height','left','letter-spacing','max-height','max-width','min-height','min-width','right','text-indent','top','width','word-spacing','grid-row-gap','grid-column-gap','row-gap']);const _bezierAwareProperties=new Set(['animation','animation-timing-function','transition','transition-timing-function','-webkit-animation','-webkit-animation-timing-function','-webkit-transition','-webkit-transition-timing-function']);const _colorAwareProperties=new Set(['backdrop-filter','background','background-color','background-image','border','border-color','border-image','border-image-source','border-bottom','border-bottom-color','border-left','border-left-color','border-right','border-right-color','border-top','border-top-color','box-shadow','caret-color','color','column-rule','column-rule-color','fill','list-style-image','outline','outline-color','stroke','text-decoration-color','text-shadow','-webkit-border-after','-webkit-border-after-color','-webkit-border-before','-webkit-border-before-color','-webkit-border-end','-webkit-border-end-color','-webkit-border-start','-webkit-border-start-color','-webkit-box-reflect','-webkit-box-shadow','-webkit-column-rule-color','-webkit-filter','-webkit-mask','-webkit-mask-box-image','-webkit-mask-box-image-source','-webkit-mask-image','-webkit-tap-highlight-color','-webkit-text-decoration-color','-webkit-text-emphasis','-webkit-text-emphasis-color','-webkit-text-fill-color','-webkit-text-stroke','-webkit-text-stroke-color']);const _propertyDataMap={'table-layout':{values:['fixed']},'visibility':{values:['hidden','visible','collapse']},'background-repeat':{values:['repeat','repeat-x','repeat-y','no-repeat','space','round']},'content':{values:['normal','close-quote','no-close-quote','no-open-quote','open-quote']},'clear':{values:['left','right','both']},'overflow-x':{values:['hidden','visible','overlay','scroll']},'stroke-linejoin':{values:['round','miter','bevel']},'baseline-shift':{values:['baseline','sub','super']},'border-bottom-width':{values:['medium','thick','thin']},'margin-top-collapse':{values:['collapse','separate','discard']},'max-height':{values:['min-content','max-content','-webkit-fill-available','fit-content']},'box-orient':{values:['horizontal','vertical','inline-axis','block-axis'],},'font-stretch':{values:['normal','ultra-condensed','extra-condensed','condensed','semi-condensed','semi-expanded','expanded','extra-expanded','ultra-expanded']},'border-left-width':{values:['medium','thick','thin']},'box-shadow':{values:['inset']},'-webkit-writing-mode':{values:['horizontal-tb','vertical-rl','vertical-lr']},'writing-mode':{values:['lr','rl','tb','lr-tb','rl-tb','tb-rl','horizontal-tb','vertical-rl','vertical-lr']},'border-collapse':{values:['collapse','separate']},'page-break-inside':{values:['avoid']},'border-top-width':{values:['medium','thick','thin']},'outline-style':{values:['inset','groove','ridge','outset','dotted','dashed','solid','double','hidden']},'cursor':{values:['copy','crosshair','default','grab','grabbing','pointer','move','vertical-text','cell','context-menu','alias','progress','no-drop','not-allowed','-webkit-zoom-in','-webkit-zoom-out','e-resize','ne-resize','nw-resize','n-resize','se-resize','sw-resize','s-resize','w-resize','ew-resize','ns-resize','nesw-resize','nwse-resize','col-resize','row-resize','text','wait','help','all-scroll','zoom-in','zoom-out','-webkit-grab','-webkit-grabbing']},'border-width':{values:['medium','thick','thin']},'border-style':{values:['hidden','inset','groove','ridge','outset','dotted','dashed','solid','double']},'size':{values:['a3','a4','a5','b4','b5','landscape','ledger','legal','letter','portrait']},'background-size':{values:['contain','cover']},'direction':{values:['ltr','rtl']},'enable-background':{values:['accumulate','new']},'float':{values:['left','right']},'overflow-y':{values:['hidden','visible','overlay','scroll']},'margin-bottom-collapse':{values:['collapse','separate','discard']},'box-reflect':{values:['left','right','above','below']},'overflow':{values:['hidden','visible','overlay','scroll']},'overscroll-behavior':{values:['contain']},'overscroll-behavior-x':{values:['contain']},'overscroll-behavior-y':{values:['contain']},'contain':{values:['strict','content','size','layout','style','paint']},'text-rendering':{values:['optimizeSpeed','optimizeLegibility','geometricPrecision']},'text-align':{values:['-webkit-auto','start','end','left','right','center','justify','-webkit-left','-webkit-right','-webkit-center','-webkit-match-parent']},'list-style-position':{values:['outside','inside']},'color-interpolation':{values:['sRGB','linearRGB']},'background-origin':{values:['border-box','content-box','padding-box']},'word-wrap':{values:['normal','break-word']},'font-weight':{values:['normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900']},'margin-before-collapse':{values:['collapse','separate','discard']},'text-transform':{values:['capitalize','uppercase','lowercase']},'border-right-style':{values:['hidden','inset','groove','ridge','outset','dotted','dashed','solid','double']},'border-left-style':{values:['hidden','inset','groove','ridge','outset','dotted','dashed','solid','double']},'-webkit-text-emphasis':{values:['circle','filled','open','dot','double-circle','triangle','sesame']},'font-style':{values:['italic','oblique','normal']},'speak':{values:['normal','spell-out','digits','literal-punctuation','no-punctuation']},'color-rendering':{values:['optimizeSpeed','optimizeQuality']},'list-style-type':{values:['disc','circle','square','decimal','decimal-leading-zero','arabic-indic','bengali','cambodian','khmer','devanagari','gujarati','gurmukhi','kannada','lao','malayalam','mongolian','myanmar','oriya','persian','urdu','telugu','tibetan','thai','lower-roman','upper-roman','lower-greek','lower-alpha','lower-latin','upper-alpha','upper-latin','ethiopic-halehame','ethiopic-halehame-am','ethiopic-halehame-ti-er','ethiopic-halehame-ti-et','cjk-earthly-branch','cjk-heavenly-stem','hangul-consonant','hangul','korean-hangul-formal','korean-hanja-formal','korean-hanja-informal','simp-chinese-formal','simp-chinese-informal','trad-chinese-formal','trad-chinese-informal','hebrew','armenian','lower-armenian','upper-armenian','georgian','cjk-ideographic','hiragana','katakana','hiragana-iroha','katakana-iroha']},'text-combine-upright':{values:['all']},'-webkit-text-combine':{values:['horizontal']},'text-orientation':{values:['mixed','upright','sideways','sideways-right']},'outline':{values:['inset','groove','ridge','outset','dotted','dashed','solid','double','medium','thick','thin']},'font':{values:['caption','icon','menu','message-box','small-caption','-webkit-mini-control','-webkit-small-control','-webkit-control','status-bar','italic','oblique','small-caps','normal','bold','bolder','lighter','100','200','300','400','500','600','700','800','900','xx-small','x-small','small','medium','large','x-large','xx-large','-webkit-xxx-large','smaller','larger','serif','sans-serif','cursive','fantasy','monospace','-webkit-body','-webkit-pictograph']},'dominant-baseline':{values:['middle','central','text-before-edge','text-after-edge','ideographic','alphabetic','hanging','mathematical','use-script','no-change','reset-size']},'display':{values:['inline','block','flow-root','list-item','inline-block','table','inline-table','table-row-group','table-header-group','table-footer-group','table-row','table-column-group','table-column','table-cell','table-caption','-webkit-box','-webkit-inline-box','flex','inline-flex','grid','inline-grid','contents']},'-webkit-text-emphasis-position':{values:['over','under']},'image-rendering':{values:['pixelated','-webkit-optimize-contrast','optimizeSpeed','optimizeQuality']},'alignment-baseline':{values:['baseline','middle','before-edge','after-edge','central','text-before-edge','text-after-edge','ideographic','alphabetic','hanging','mathematical']},'outline-width':{values:['medium','thick','thin']},'box-align':{values:['baseline','center','stretch','start','end']},'border-right-width':{values:['medium','thick','thin']},'border-top-style':{values:['hidden','inset','groove','ridge','outset','dotted','dashed','solid','double']},'line-height':{values:['normal']},'text-overflow':{values:['clip','ellipsis']},'overflow-wrap':{values:['normal','break-word']},'box-direction':{values:['normal','reverse']},'margin-after-collapse':{values:['collapse','separate','discard']},'page-break-before':{values:['left','right','always','avoid']},'border-image':{values:['repeat','stretch','space','round']},'text-decoration':{values:['blink','line-through','overline','underline','wavy','double','solid','dashed','dotted']},'position':{values:['absolute','fixed','relative','static','sticky']},'font-family':{values:['serif','sans-serif','cursive','fantasy','monospace','-webkit-body','-webkit-pictograph']},'border-bottom-style':{values:['hidden','inset','groove','ridge','outset','dotted','dashed','solid','double']},'unicode-bidi':{values:['normal','bidi-override','embed','isolate','isolate-override','plaintext']},'clip-rule':{values:['nonzero','evenodd']},'zoom':{values:['normal']},'max-width':{values:['min-content','max-content','-webkit-fill-available','fit-content']},'caption-side':{values:['top','bottom']},'empty-cells':{values:['hide','show']},'pointer-events':{values:['all','visible','visiblepainted','visiblefill','visiblestroke','painted','fill','stroke','bounding-box']},'letter-spacing':{values:['normal']},'background-clip':{values:['border-box','content-box','padding-box']},'-webkit-font-smoothing':{values:['antialiased','subpixel-antialiased']},'border':{values:['hidden','inset','groove','ridge','outset','dotted','dashed','solid','double','medium','thick','thin']},'font-size':{values:['xx-small','x-small','small','medium','large','x-large','xx-large','-webkit-xxx-large','smaller','larger']},'font-variant':{values:['small-caps','normal','common-ligatures','no-common-ligatures','discretionary-ligatures','no-discretionary-ligatures','historical-ligatures','no-historical-ligatures','contextual','no-contextual','all-small-caps','petite-caps','all-petite-caps','unicase','titling-caps','lining-nums','oldstyle-nums','proportional-nums','tabular-nums','diagonal-fractions','stacked-fractions','ordinal','slashed-zero','jis78','jis83','jis90','jis04','simplified','traditional','full-width','proportional-width','ruby']},'vertical-align':{values:['baseline','middle','sub','super','text-top','text-bottom','top','bottom','-webkit-baseline-middle']},'white-space':{values:['normal','nowrap','pre','pre-line','pre-wrap']},'page-break-after':{values:['left','right','always','avoid']},'word-break':{values:['normal','break-all','break-word','keep-all']},'word-spacing':{values:['normal']},'-webkit-text-emphasis-style':{values:['circle','filled','open','dot','double-circle','triangle','sesame']},'transform':{values:['scale','scaleX','scaleY','scale3d','rotate','rotateX','rotateY','rotateZ','rotate3d','skew','skewX','skewY','translate','translateX','translateY','translateZ','translate3d','matrix','matrix3d','perspective']},'box-sizing':{values:['content-box','border-box']},'resize':{values:['both','horizontal','vertical']},'align-content':{values:['normal','baseline','space-between','space-around','space-evenly','stretch','unsafe','safe','center','start','end','flex-start','flex-end','left','right']},'justify-content':{values:['normal','space-between','space-around','space-evenly','stretch','unsafe','safe','center','start','end','flex-start','flex-end','left','right','baseline']},'place-content':{values:['normal','space-between','space-around','space-evenly','stretch','unsafe','safe','center','start','end','flex-start','flex-end','left','right','baseline']},'align-items':{values:['normal','stretch','baseline','unsafe','safe','center','start','end','self-start','self-end','flex-start','flex-end','left','right']},'justify-items':{values:['normal','stretch','baseline','unsafe','safe','center','start','end','self-start','self-end','flex-start','flex-end','left','right','legacy']},'place-items':{values:['normal','stretch','baseline','unsafe','safe','center','start','end','self-start','self-end','flex-start','flex-end','left','right']},'align-self':{values:['normal','stretch','baseline','unsafe','safe','center','start','end','self-start','self-end','flex-start','flex-end','left','right']},'justify-self':{values:['normal','stretch','baseline','unsafe','safe','center','start','end','self-start','self-end','flex-start','flex-end','left','right']},'place-self':{values:['normal','stretch','baseline','unsafe','safe','center','start','end','self-start','self-end','flex-start','flex-end','left','right']},'flex-direction':{values:['row','row-reverse','column','column-reverse']},'flex-wrap':{values:['nowrap','wrap','wrap-reverse']},'perspective-origin':{values:['left','center','right','top','bottom']},'transform-origin':{values:['left','center','right','top','bottom']},'transform-style':{values:['flat','preserve-3d']},'transition-timing-function':{values:['ease','linear','ease-in','ease-out','ease-in-out','step-start','step-end','steps','frames','cubic-bezier','step-middle']},'animation-timing-function':{values:['ease','linear','ease-in','ease-out','ease-in-out','step-start','step-end','steps','frames','cubic-bezier','step-middle']},'animation-direction':{values:['normal','reverse','alternate','alternate-reverse']},'animation-play-state':{values:['running','paused']},'animation-fill-mode':{values:['forwards','backwards','both']},'-webkit-backface-visibility':{values:['visible','hidden']},'-webkit-box-decoration-break':{values:['slice','clone']},'-webkit-column-break-after':{values:['always','avoid','left','right','page','column','avoid-page','avoid-column']},'-webkit-column-break-before':{values:['always','avoid','left','right','page','column','avoid-page','avoid-column']},'-webkit-column-break-inside':{values:['avoid','avoid-page','avoid-column']},'-webkit-column-span':{values:['all']},'-webkit-column-gap':{values:['normal']},'filter':{values:['url','blur','brightness','contrast','drop-shadow','grayscale','hue-rotate','invert','opacity','saturate','sepia']},'line-break':{values:['loose','normal','strict','after-white-space']},'user-select':{values:['text','all']},'-webkit-user-modify':{values:['read-only','read-write','read-write-plaintext-only']},'text-align-last':{values:['start','end','left','right','center','justify']},'-webkit-text-decoration-line':{values:['underline','overline','line-through','blink']},'-webkit-text-decoration-style':{values:['solid','double','dotted','dashed','wavy']},'mix-blend-mode':{values:['normal','multiply','screen','overlay','darken','lighten','color-dodge','color-burn','hard-light','soft-light','difference','exclusion','hue','saturation','color','luminosity','unset']},'background-blend-mode':{values:['normal','multiply','screen','overlay','darken','lighten','color-dodge','color-burn','hard-light','soft-light','difference','exclusion','hue','saturation','color','luminosity','unset']},'grid-template-columns':{values:['min-content','max-content']},'grid-template-rows':{values:['min-content','max-content']},'grid-auto-columns':{values:['min-content','max-content']},'grid-auto-rows':{values:['min-content','max-content']},'grid-auto-flow':{values:['row','column','dense']},'row-gap':{values:['normal']},'animation-iteration-count':{values:['infinite']},'font-feature-settings':{values:['normal']},'font-kerning':{values:['normal']},'font-variant-caps':{values:['small-caps','all-small-caps','petite-caps','all-petite-caps','unicase','titling-caps','normal']},'font-variant-east-asian':{values:['jis78','jis83','jis90','jis04','simplified','traditional','full-width','proportional-width','ruby','normal']},'font-variant-ligatures':{values:['common-ligatures','no-common-ligatures','discretionary-ligatures','no-discretionary-ligatures','historical-ligatures','no-historical-ligatures','contextual','no-contextual','normal']},'font-variant-numeric':{values:['lining-nums','oldstyle-nums','proportional-nums','tabular-nums','diagonal-fractions','stacked-fractions','ordinal','slashed-zero','normal']},'font-variation-settings':{values:['normal']},'backface-visibility':{values:['hidden','visible']},'background':{values:['repeat','repeat-x','repeat-y','no-repeat','top','bottom','left','right','center','fixed','local','scroll','space','round','border-box','content-box','padding-box','linear-gradient','radial-gradient','repeating-linear-gradient','repeating-radial-gradient','url']},'background-attachment':{values:['fixed','local','scroll']},'background-image':{values:['linear-gradient','radial-gradient','repeating-linear-gradient','repeating-radial-gradient','url']},'background-position':{values:['top','bottom','left','right','center']},'background-position-x':{values:['left','right','center']},'background-position-y':{values:['top','bottom','center']},'background-repeat-x':{values:['repeat','no-repeat']},'background-repeat-y':{values:['repeat','no-repeat']},'border-bottom':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'border-image-repeat':{values:['repeat','stretch','space','round']},'border-left':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'border-right':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'border-top':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'break-after':{values:['left','right','avoid','column','avoid-page','page','recto','verso','avoid-column']},'break-before':{values:['left','right','avoid','column','avoid-page','page','recto','verso','avoid-column']},'break-inside':{values:['avoid','avoid-page','avoid-column']},'buffered-rendering':{values:['static','dynamic']},'color-interpolation-filters':{values:['srgb','linearrgb']},'column-fill':{values:['balance']},'column-gap':{values:['normal']},'column-rule':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'column-rule-style':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double']},'column-rule-width':{values:['medium','thick','thin']},'column-span':{values:['all']},'fill-rule':{values:['nonzero','evenodd']},'flex-flow':{values:['nowrap','row','row-reverse','column','column-reverse','wrap','wrap-reverse']},'height':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'hyphens':{values:['manual']},'inline-size':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'isolation':{values:['isolate']},'list-style':{values:['outside','inside','disc','circle','square','decimal','decimal-leading-zero','arabic-indic','bengali','cambodian','khmer','devanagari','gujarati','gurmukhi','kannada','lao','malayalam','mongolian','myanmar','oriya','persian','urdu','telugu','tibetan','thai','lower-roman','upper-roman','lower-greek','lower-alpha','lower-latin','upper-alpha','upper-latin','cjk-earthly-branch','cjk-heavenly-stem','ethiopic-halehame','ethiopic-halehame-am','ethiopic-halehame-ti-er','ethiopic-halehame-ti-et','hangul','hangul-consonant','korean-hangul-formal','korean-hanja-formal','korean-hanja-informal','hebrew','armenian','lower-armenian','upper-armenian','georgian','cjk-ideographic','simp-chinese-formal','simp-chinese-informal','trad-chinese-formal','trad-chinese-informal','hiragana','katakana','hiragana-iroha','katakana-iroha']},'mask-source-type':{values:['alpha','luminance']},'mask-type':{values:['alpha','luminance']},'max-block-size':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'max-inline-size':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'min-block-size':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'min-height':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'min-inline-size':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'min-width':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'object-fit':{values:['contain','cover','fill','scale-down']},'object-position':{values:['top','bottom','left','right','center']},'offset-anchor':{values:['top','bottom','left','right','center']},'offset-position':{values:['top','bottom','left','right','center']},'offset-rotate':{values:['reverse']},'overflow-anchor':{values:['visible']},'paint-order':{values:['normal','fill','stroke','markers']},'scroll-behavior':{values:['smooth']},'scroll-customization':{values:['pan-x','pan-y','pan-left','pan-right','pan-up','pan-down',]},'scroll-snap-align':{values:['start','end','center']},'scroll-snap-stop':{values:['normal','always']},'scroll-snap-type':{values:['x','y','block','inline','both','mandatory','proximity']},'shape-outside':{values:['border-box','content-box','padding-box','margin-box']},'shape-rendering':{values:['optimizespeed','geometricprecision','crispedges']},'stroke-linecap':{values:['square','round','butt']},'text-anchor':{values:['middle','start','end']},'text-decoration-line':{values:['blink','line-through','overline','underline']},'text-decoration-style':{values:['dotted','dashed','solid','double','wavy']},'text-justify':{values:['inter-word','distribute']},'text-underline-position':{values:['under']},'touch-action':{values:['pan-x','pan-y','pan-left','pan-right','pan-up','pan-down','manipulation','pinch-zoom']},'transform-box':{values:['border-box','fill-box','view-box']},'vector-effect':{values:['non-scaling-stroke']},'-webkit-app-region':{values:['drag','no-drag']},'-webkit-appearance':{values:['checkbox','radio','push-button','square-button','button','button-bevel','inner-spin-button','listbox','listitem','media-enter-fullscreen-button','media-exit-fullscreen-button','media-mute-button','media-play-button','media-overlay-play-button','media-toggle-closed-captions-button','media-slider','media-sliderthumb','media-volume-slider-container','media-volume-slider','media-volume-sliderthumb','media-controls-background','media-controls-fullscreen-background','media-current-time-display','media-time-remaining-display','menulist','menulist-button','menulist-text','menulist-textfield','meter','progress-bar','progress-bar-value','slider-horizontal','slider-vertical','sliderthumb-horizontal','sliderthumb-vertical','caret','searchfield','searchfield-cancel-button','textfield','textarea']},'-webkit-border-after':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'-webkit-border-after-style':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double']},'-webkit-border-after-width':{values:['medium','thick','thin']},'-webkit-border-before':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'-webkit-border-before-style':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double']},'-webkit-border-before-width':{values:['medium','thick','thin']},'-webkit-border-end':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'-webkit-border-end-style':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double']},'-webkit-border-end-width':{values:['medium','thick','thin']},'-webkit-border-start':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double','medium','thick','thin']},'-webkit-border-start-style':{values:['hidden','inset','groove','outset','ridge','dotted','dashed','solid','double']},'-webkit-border-start-width':{values:['medium','thick','thin']},'-webkit-box-pack':{values:['center','justify','start','end']},'-webkit-logical-height':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'-webkit-logical-width':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'-webkit-margin-collapse':{values:['collapse','separate','discard']},'-webkit-mask-box-image':{values:['repeat','stretch','space','round']},'-webkit-mask-box-image-repeat':{values:['repeat','stretch','space','round']},'-webkit-mask-clip':{values:['text','border','border-box','content','content-box','padding','padding-box']},'-webkit-mask-composite':{values:['clear','copy','source-over','source-in','source-out','source-atop','destination-over','destination-in','destination-out','destination-atop','xor','plus-lighter']},'-webkit-mask-image':{values:['linear-gradient','radial-gradient','repeating-linear-gradient','repeating-radial-gradient','url']},'-webkit-mask-origin':{values:['border','border-box','content','content-box','padding','padding-box']},'-webkit-mask-position':{values:['top','bottom','left','right','center']},'-webkit-mask-position-x':{values:['left','right','center']},'-webkit-mask-position-y':{values:['top','bottom','center']},'-webkit-mask-repeat':{values:['repeat','repeat-x','repeat-y','no-repeat','space','round']},'-webkit-mask-size':{values:['contain','cover']},'-webkit-max-logical-height':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'-webkit-max-logical-width':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'-webkit-min-logical-height':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'-webkit-min-logical-width':{values:['-webkit-fill-available','min-content','max-content','fit-content']},'-webkit-perspective-origin-x':{values:['left','right','center']},'-webkit-perspective-origin-y':{values:['top','bottom','center']},'-webkit-print-color-adjust':{values:['economy','exact']},'-webkit-rtl-ordering':{values:['logical','visual']},'-webkit-ruby-position':{values:['after','before']},'-webkit-text-decorations-in-effect':{values:['blink','line-through','overline','underline']},'-webkit-text-security':{values:['disc','circle','square']},'-webkit-text-stroke':{values:['medium','thick','thin']},'-webkit-text-stroke-width':{values:['medium','thick','thin']},'-webkit-transform-origin-x':{values:['left','right','center']},'-webkit-transform-origin-y':{values:['top','bottom','center']},'-webkit-user-drag':{values:['element']},'width':{values:['-webkit-fill-available','min-content','max-content','fit-content']},};const Weight={'align-content':57,'align-items':129,'align-self':55,'animation':175,'animation-delay':114,'animation-direction':113,'animation-duration':137,'animation-fill-mode':132,'animation-iteration-count':124,'animation-name':139,'animation-play-state':104,'animation-timing-function':141,'backface-visibility':123,'background':260,'background-attachment':119,'background-clip':165,'background-color':259,'background-image':246,'background-origin':107,'background-position':237,'background-position-x':108,'background-position-y':93,'background-repeat':234,'background-size':203,'border':263,'border-bottom':233,'border-bottom-color':190,'border-bottom-left-radius':186,'border-bottom-right-radius':185,'border-bottom-style':150,'border-bottom-width':179,'border-collapse':209,'border-color':226,'border-image':89,'border-image-outset':50,'border-image-repeat':49,'border-image-slice':58,'border-image-source':32,'border-image-width':52,'border-left':221,'border-left-color':174,'border-left-style':142,'border-left-width':172,'border-radius':224,'border-right':223,'border-right-color':182,'border-right-style':130,'border-right-width':178,'border-spacing':198,'border-style':206,'border-top':231,'border-top-color':192,'border-top-left-radius':187,'border-top-right-radius':189,'border-top-style':152,'border-top-width':180,'border-width':214,'bottom':227,'box-shadow':213,'box-sizing':216,'caption-side':96,'clear':229,'clip':173,'clip-rule':5,'color':256,'content':219,'counter-increment':111,'counter-reset':110,'cursor':250,'direction':176,'display':262,'empty-cells':99,'fill':140,'fill-opacity':82,'fill-rule':22,'filter':160,'flex':133,'flex-basis':66,'flex-direction':85,'flex-flow':94,'flex-grow':112,'flex-shrink':61,'flex-wrap':68,'float':252,'font':211,'font-family':254,'font-kerning':18,'font-size':264,'font-stretch':77,'font-style':220,'font-variant':161,'font-weight':257,'height':266,'image-rendering':90,'justify-content':127,'left':248,'letter-spacing':188,'line-height':244,'list-style':215,'list-style-image':145,'list-style-position':149,'list-style-type':199,'margin':267,'margin-bottom':241,'margin-left':243,'margin-right':238,'margin-top':253,'mask':20,'max-height':205,'max-width':225,'min-height':217,'min-width':218,'object-fit':33,'opacity':251,'order':117,'orphans':146,'outline':222,'outline-color':153,'outline-offset':147,'outline-style':151,'outline-width':148,'overflow':255,'overflow-wrap':105,'overflow-x':184,'overflow-y':196,'padding':265,'padding-bottom':230,'padding-left':235,'padding-right':232,'padding-top':240,'page':8,'page-break-after':120,'page-break-before':69,'page-break-inside':121,'perspective':92,'perspective-origin':103,'pointer-events':183,'position':261,'quotes':158,'resize':168,'right':245,'shape-rendering':38,'size':64,'speak':118,'src':170,'stop-color':42,'stop-opacity':31,'stroke':98,'stroke-dasharray':36,'stroke-dashoffset':3,'stroke-linecap':30,'stroke-linejoin':21,'stroke-miterlimit':12,'stroke-opacity':34,'stroke-width':87,'table-layout':171,'tab-size':46,'text-align':260,'text-anchor':35,'text-decoration':247,'text-indent':207,'text-overflow':204,'text-rendering':155,'text-shadow':208,'text-transform':202,'top':258,'touch-action':80,'transform':181,'transform-origin':162,'transform-style':86,'transition':193,'transition-delay':134,'transition-duration':135,'transition-property':131,'transition-timing-function':122,'unicode-bidi':156,'unicode-range':136,'vertical-align':236,'visibility':242,'-webkit-appearance':191,'-webkit-backface-visibility':154,'-webkit-background-clip':164,'-webkit-background-origin':40,'-webkit-background-size':163,'-webkit-border-end':9,'-webkit-border-horizontal-spacing':81,'-webkit-border-image':75,'-webkit-border-radius':212,'-webkit-border-start':10,'-webkit-border-start-color':16,'-webkit-border-start-width':13,'-webkit-border-vertical-spacing':43,'-webkit-box-align':101,'-webkit-box-direction':51,'-webkit-box-flex':128,'-webkit-box-ordinal-group':91,'-webkit-box-orient':144,'-webkit-box-pack':106,'-webkit-box-reflect':39,'-webkit-box-shadow':210,'-webkit-column-break-inside':60,'-webkit-column-count':84,'-webkit-column-gap':76,'-webkit-column-rule':25,'-webkit-column-rule-color':23,'-webkit-columns':44,'-webkit-column-span':29,'-webkit-column-width':47,'-webkit-filter':159,'-webkit-font-feature-settings':59,'-webkit-font-smoothing':177,'-webkit-highlight':1,'-webkit-line-break':45,'-webkit-line-clamp':126,'-webkit-margin-after':67,'-webkit-margin-before':70,'-webkit-margin-collapse':14,'-webkit-margin-end':65,'-webkit-margin-start':100,'-webkit-margin-top-collapse':78,'-webkit-mask':19,'-webkit-mask-box-image':72,'-webkit-mask-image':88,'-webkit-mask-position':54,'-webkit-mask-repeat':63,'-webkit-mask-size':79,'-webkit-padding-after':15,'-webkit-padding-before':28,'-webkit-padding-end':48,'-webkit-padding-start':73,'-webkit-print-color-adjust':83,'-webkit-rtl-ordering':7,'-webkit-tap-highlight-color':169,'-webkit-text-emphasis-color':11,'-webkit-text-fill-color':71,'-webkit-text-security':17,'-webkit-text-stroke':56,'-webkit-text-stroke-color':37,'-webkit-text-stroke-width':53,'-webkit-user-drag':95,'-webkit-user-modify':62,'-webkit-user-select':194,'-webkit-writing-mode':4,'white-space':228,'widows':115,'width':268,'will-change':74,'word-break':166,'word-spacing':157,'word-wrap':197,'writing-mode':41,'z-index':239,'zoom':200};self.SDK=self.SDK||{};SDK=SDK||{};SDK.CSSMetadata=CSSMetadata;SDK.CSSMetadata.VariableRegex=VariableRegex;SDK.CSSMetadata.URLRegex=URLRegex;SDK.CSSMetadata.GridAreaRowRegex=GridAreaRowRegex;SDK.cssMetadata=cssMetadata;export class CSSMediaQuery{constructor(payload){this._active=payload.active;this._expressions=[];for(let j=0;j<payload.expressions.length;++j){this._expressions.push(CSSMediaQueryExpression.parsePayload(payload.expressions[j]));}}
static parsePayload(payload){return new CSSMediaQuery(payload);}
active(){return this._active;}
expressions(){return this._expressions;}}
export class CSSMediaQueryExpression{constructor(payload){this._value=payload.value;this._unit=payload.unit;this._feature=payload.feature;this._valueRange=payload.valueRange?TextUtils.TextRange.fromObject(payload.valueRange):null;this._computedLength=payload.computedLength||null;}
static parsePayload(payload){return new CSSMediaQueryExpression(payload);}
value(){return this._value;}
unit(){return this._unit;}
feature(){return this._feature;}
valueRange(){return this._valueRange;}
computedLength(){return this._computedLength;}}
export default class CSSMedia{constructor(cssModel,payload){this._cssModel=cssModel;this._reinitialize(payload);}
static parsePayload(cssModel,payload){return new CSSMedia(cssModel,payload);}
static parseMediaArrayPayload(cssModel,payload){const result=[];for(let i=0;i<payload.length;++i){result.push(CSSMedia.parsePayload(cssModel,payload[i]));}
return result;}
_reinitialize(payload){this.text=payload.text;this.source=payload.source;this.sourceURL=payload.sourceURL||'';this.range=payload.range?TextUtils.TextRange.fromObject(payload.range):null;this.styleSheetId=payload.styleSheetId;this.mediaList=null;if(payload.mediaList){this.mediaList=[];for(let i=0;i<payload.mediaList.length;++i){this.mediaList.push(CSSMediaQuery.parsePayload(payload.mediaList[i]));}}}
rebase(edit){if(this.styleSheetId!==edit.styleSheetId||!this.range){return;}
if(edit.oldRange.equal(this.range)){this._reinitialize((edit.payload));}else{this.range=this.range.rebaseAfterTextEdit(edit.oldRange,edit.newRange);}}
equal(other){if(!this.styleSheetId||!this.range||!other.range){return false;}
return this.styleSheetId===other.styleSheetId&&this.range.equal(other.range);}
active(){if(!this.mediaList){return true;}
for(let i=0;i<this.mediaList.length;++i){if(this.mediaList[i].active()){return true;}}
return false;}
lineNumberInSource(){if(!this.range){return undefined;}
const header=this.header();if(!header){return undefined;}
return header.lineNumberInSource(this.range.startLine);}
columnNumberInSource(){if(!this.range){return undefined;}
const header=this.header();if(!header){return undefined;}
return header.columnNumberInSource(this.range.startLine,this.range.startColumn);}
header(){return this.styleSheetId?this._cssModel.styleSheetHeaderForId(this.styleSheetId):null;}
rawLocation(){const header=this.header();if(!header||this.lineNumberInSource()===undefined){return null;}
const lineNumber=Number(this.lineNumberInSource());return new SDK.CSSLocation(header,lineNumber,this.columnNumberInSource());}}
export const Source={LINKED_SHEET:'linkedSheet',INLINE_SHEET:'inlineSheet',MEDIA_RULE:'mediaRule',IMPORT_RULE:'importRule'};self.SDK=self.SDK||{};SDK=SDK||{};SDK.CSSMediaQuery=CSSMediaQuery;SDK.CSSMediaQueryExpression=CSSMediaQueryExpression;SDK.CSSMedia=CSSMedia;SDK.CSSMedia.Source=Source;export default class CSSMatchedStyles{constructor(cssModel,node,inlinePayload,attributesPayload,matchedPayload,pseudoPayload,inheritedPayload,animationsPayload){this._cssModel=cssModel;this._node=node;this._addedStyles=new Map();this._matchingSelectors=new Map();this._keyframes=[];if(animationsPayload){this._keyframes=animationsPayload.map(rule=>new SDK.CSSKeyframesRule(cssModel,rule));}
this._nodeForStyle=new Map();this._inheritedStyles=new Set();matchedPayload=cleanUserAgentPayload(matchedPayload);for(const inheritedResult of inheritedPayload){inheritedResult.matchedCSSRules=cleanUserAgentPayload(inheritedResult.matchedCSSRules);}
this._mainDOMCascade=this._buildMainCascade(inlinePayload,attributesPayload,matchedPayload,inheritedPayload);this._pseudoDOMCascades=this._buildPseudoCascades(pseudoPayload);this._styleToDOMCascade=new Map();for(const domCascade of Array.from(this._pseudoDOMCascades.values()).concat(this._mainDOMCascade)){for(const style of domCascade.styles()){this._styleToDOMCascade.set(style,domCascade);}}
function cleanUserAgentPayload(payload){for(const ruleMatch of payload){cleanUserAgentSelectors(ruleMatch);}
const cleanMatchedPayload=[];for(const ruleMatch of payload){const lastMatch=cleanMatchedPayload.peekLast();if(!lastMatch||ruleMatch.rule.origin!=='user-agent'||lastMatch.rule.origin!=='user-agent'||ruleMatch.rule.selectorList.text!==lastMatch.rule.selectorList.text||mediaText(ruleMatch)!==mediaText(lastMatch)){cleanMatchedPayload.push(ruleMatch);continue;}
mergeRule(ruleMatch,lastMatch);}
return cleanMatchedPayload;function mergeRule(from,to){const shorthands=(new Map());const properties=(new Map());for(const entry of to.rule.style.shorthandEntries){shorthands.set(entry.name,entry.value);}
for(const entry of to.rule.style.cssProperties){properties.set(entry.name,entry.value);}
for(const entry of from.rule.style.shorthandEntries){shorthands.set(entry.name,entry.value);}
for(const entry of from.rule.style.cssProperties){properties.set(entry.name,entry.value);}
to.rule.style.shorthandEntries=shorthands.keysArray().map(name=>({name,value:shorthands.get(name)}));to.rule.style.cssProperties=properties.keysArray().map(name=>({name,value:properties.get(name)}));}
function mediaText(ruleMatch){if(!ruleMatch.rule.media){return null;}
return ruleMatch.rule.media.map(media=>media.text).join(', ');}
function cleanUserAgentSelectors(ruleMatch){const{matchingSelectors,rule}=ruleMatch;if(rule.origin!=='user-agent'||!matchingSelectors.length){return;}
rule.selectorList.selectors=rule.selectorList.selectors.filter((item,i)=>matchingSelectors.includes(i));rule.selectorList.text=rule.selectorList.selectors.map(item=>item.text).join(', ');ruleMatch.matchingSelectors=matchingSelectors.map((item,i)=>i);}}}
_buildMainCascade(inlinePayload,attributesPayload,matchedPayload,inheritedPayload){const nodeCascades=[];const nodeStyles=[];function addAttributesStyle(){if(!attributesPayload){return;}
const style=new SDK.CSSStyleDeclaration(this._cssModel,null,attributesPayload,SDK.CSSStyleDeclaration.Type.Attributes);this._nodeForStyle.set(style,this._node);nodeStyles.push(style);}
if(inlinePayload&&this._node.nodeType()===Node.ELEMENT_NODE){const style=new SDK.CSSStyleDeclaration(this._cssModel,null,inlinePayload,SDK.CSSStyleDeclaration.Type.Inline);this._nodeForStyle.set(style,this._node);nodeStyles.push(style);}
let addedAttributesStyle;for(let i=matchedPayload.length-1;i>=0;--i){const rule=new SDK.CSSStyleRule(this._cssModel,matchedPayload[i].rule);if((rule.isInjected()||rule.isUserAgent())&&!addedAttributesStyle){addedAttributesStyle=true;addAttributesStyle.call(this);}
this._nodeForStyle.set(rule.style,this._node);nodeStyles.push(rule.style);this._addMatchingSelectors(this._node,rule,matchedPayload[i].matchingSelectors);}
if(!addedAttributesStyle){addAttributesStyle.call(this);}
nodeCascades.push(new NodeCascade(this,nodeStyles,false));let parentNode=this._node.parentNode;for(let i=0;parentNode&&inheritedPayload&&i<inheritedPayload.length;++i){const inheritedStyles=[];const entryPayload=inheritedPayload[i];const inheritedInlineStyle=entryPayload.inlineStyle?new SDK.CSSStyleDeclaration(this._cssModel,null,entryPayload.inlineStyle,SDK.CSSStyleDeclaration.Type.Inline):null;if(inheritedInlineStyle&&this._containsInherited(inheritedInlineStyle)){this._nodeForStyle.set(inheritedInlineStyle,parentNode);inheritedStyles.push(inheritedInlineStyle);this._inheritedStyles.add(inheritedInlineStyle);}
const inheritedMatchedCSSRules=entryPayload.matchedCSSRules||[];for(let j=inheritedMatchedCSSRules.length-1;j>=0;--j){const inheritedRule=new SDK.CSSStyleRule(this._cssModel,inheritedMatchedCSSRules[j].rule);this._addMatchingSelectors(parentNode,inheritedRule,inheritedMatchedCSSRules[j].matchingSelectors);if(!this._containsInherited(inheritedRule.style)){continue;}
if(containsStyle(nodeStyles,inheritedRule.style)||containsStyle(this._inheritedStyles,inheritedRule.style)){continue;}
this._nodeForStyle.set(inheritedRule.style,parentNode);inheritedStyles.push(inheritedRule.style);this._inheritedStyles.add(inheritedRule.style);}
parentNode=parentNode.parentNode;nodeCascades.push(new NodeCascade(this,inheritedStyles,true));}
return new DOMInheritanceCascade(nodeCascades);function containsStyle(styles,query){if(!query.styleSheetId||!query.range){return false;}
for(const style of styles){if(query.styleSheetId===style.styleSheetId&&style.range&&query.range.equal(style.range)){return true;}}
return false;}}
_buildPseudoCascades(pseudoPayload){const pseudoCascades=new Map();if(!pseudoPayload){return pseudoCascades;}
for(let i=0;i<pseudoPayload.length;++i){const entryPayload=pseudoPayload[i];const pseudoElement=this._node.pseudoElements().get(entryPayload.pseudoType)||null;const pseudoStyles=[];const rules=entryPayload.matches||[];for(let j=rules.length-1;j>=0;--j){const pseudoRule=new SDK.CSSStyleRule(this._cssModel,rules[j].rule);pseudoStyles.push(pseudoRule.style);this._nodeForStyle.set(pseudoRule.style,pseudoElement);if(pseudoElement){this._addMatchingSelectors(pseudoElement,pseudoRule,rules[j].matchingSelectors);}}
const nodeCascade=new NodeCascade(this,pseudoStyles,false);pseudoCascades.set(entryPayload.pseudoType,new DOMInheritanceCascade([nodeCascade]));}
return pseudoCascades;}
_addMatchingSelectors(node,rule,matchingSelectorIndices){for(const matchingSelectorIndex of matchingSelectorIndices){const selector=rule.selectors[matchingSelectorIndex];this._setSelectorMatches(node,selector.text,true);}}
node(){return this._node;}
cssModel(){return this._cssModel;}
hasMatchingSelectors(rule){const matchingSelectors=this.matchingSelectors(rule);return matchingSelectors.length>0&&this.mediaMatches(rule.style);}
matchingSelectors(rule){const node=this.nodeForStyle(rule.style);if(!node){return[];}
const map=this._matchingSelectors.get(node.id);if(!map){return[];}
const result=[];for(let i=0;i<rule.selectors.length;++i){if(map.get(rule.selectors[i].text)){result.push(i);}}
return result;}
recomputeMatchingSelectors(rule){const node=this.nodeForStyle(rule.style);if(!node){return Promise.resolve();}
const promises=[];for(const selector of rule.selectors){promises.push(querySelector.call(this,node,selector.text));}
return Promise.all(promises);async function querySelector(node,selectorText){const ownerDocument=node.ownerDocument||null;const map=this._matchingSelectors.get(node.id);if((map&&map.has(selectorText))||!ownerDocument){return;}
const matchingNodeIds=await this._node.domModel().querySelectorAll(ownerDocument.id,selectorText);if(matchingNodeIds){this._setSelectorMatches(node,selectorText,matchingNodeIds.indexOf(node.id)!==-1);}}}
addNewRule(rule,node){this._addedStyles.set(rule.style,node);return this.recomputeMatchingSelectors(rule);}
_setSelectorMatches(node,selectorText,value){let map=this._matchingSelectors.get(node.id);if(!map){map=new Map();this._matchingSelectors.set(node.id,map);}
map.set(selectorText,value);}
mediaMatches(style){const media=style.parentRule?style.parentRule.media:[];for(let i=0;media&&i<media.length;++i){if(!media[i].active()){return false;}}
return true;}
nodeStyles(){return this._mainDOMCascade.styles();}
keyframes(){return this._keyframes;}
pseudoStyles(pseudoType){const domCascade=this._pseudoDOMCascades.get(pseudoType);return domCascade?domCascade.styles():[];}
pseudoTypes(){return new Set(this._pseudoDOMCascades.keys());}
_containsInherited(style){const properties=style.allProperties();for(let i=0;i<properties.length;++i){const property=properties[i];if(property.activeInStyle()&&SDK.cssMetadata().isPropertyInherited(property.name)){return true;}}
return false;}
nodeForStyle(style){return this._addedStyles.get(style)||this._nodeForStyle.get(style)||null;}
availableCSSVariables(style){const domCascade=this._styleToDOMCascade.get(style)||null;return domCascade?domCascade.availableCSSVariables(style):[];}
computeCSSVariable(style,variableName){const domCascade=this._styleToDOMCascade.get(style)||null;return domCascade?domCascade.computeCSSVariable(style,variableName):null;}
computeValue(style,value){const domCascade=this._styleToDOMCascade.get(style)||null;return domCascade?domCascade.computeValue(style,value):null;}
isInherited(style){return this._inheritedStyles.has(style);}
propertyState(property){const domCascade=this._styleToDOMCascade.get(property.ownerStyle);return domCascade?domCascade.propertyState(property):null;}
resetActiveProperties(){this._mainDOMCascade.reset();for(const domCascade of this._pseudoDOMCascades.values()){domCascade.reset();}}}
class NodeCascade{constructor(matchedStyles,styles,isInherited){this._matchedStyles=matchedStyles;this._styles=styles;this._isInherited=isInherited;this._propertiesState=new Map();this._activeProperties=new Map();}
_computeActiveProperties(){this._propertiesState.clear();this._activeProperties.clear();for(const style of this._styles){const rule=style.parentRule;if(rule&&!(rule instanceof SDK.CSSStyleRule)){continue;}
if(rule&&!this._matchedStyles.hasMatchingSelectors(rule)){continue;}
for(const property of style.allProperties()){if(this._isInherited&&!SDK.cssMetadata().isPropertyInherited(property.name)){continue;}
if(!property.activeInStyle()){this._propertiesState.set(property,PropertyState.Overloaded);continue;}
const canonicalName=SDK.cssMetadata().canonicalPropertyName(property.name);const activeProperty=this._activeProperties.get(canonicalName);if(activeProperty&&(activeProperty.important||!property.important)){this._propertiesState.set(property,PropertyState.Overloaded);continue;}
if(activeProperty){this._propertiesState.set(activeProperty,PropertyState.Overloaded);}
this._propertiesState.set(property,PropertyState.Active);this._activeProperties.set(canonicalName,property);}}}}
class DOMInheritanceCascade{constructor(nodeCascades){this._nodeCascades=nodeCascades;this._propertiesState=new Map();this._availableCSSVariables=new Map();this._computedCSSVariables=new Map();this._initialized=false;this._styleToNodeCascade=new Map();for(const nodeCascade of nodeCascades){for(const style of nodeCascade._styles){this._styleToNodeCascade.set(style,nodeCascade);}}}
availableCSSVariables(style){const nodeCascade=this._styleToNodeCascade.get(style);if(!nodeCascade){return[];}
this._ensureInitialized();return Array.from(this._availableCSSVariables.get(nodeCascade).keys());}
computeCSSVariable(style,variableName){const nodeCascade=this._styleToNodeCascade.get(style);if(!nodeCascade){return null;}
this._ensureInitialized();const availableCSSVariables=this._availableCSSVariables.get(nodeCascade);const computedCSSVariables=this._computedCSSVariables.get(nodeCascade);return this._innerComputeCSSVariable(availableCSSVariables,computedCSSVariables,variableName);}
computeValue(style,value){const nodeCascade=this._styleToNodeCascade.get(style);if(!nodeCascade){return null;}
this._ensureInitialized();const availableCSSVariables=this._availableCSSVariables.get(nodeCascade);const computedCSSVariables=this._computedCSSVariables.get(nodeCascade);return this._innerComputeValue(availableCSSVariables,computedCSSVariables,value);}
_innerComputeCSSVariable(availableCSSVariables,computedCSSVariables,variableName){if(!availableCSSVariables.has(variableName)){return null;}
if(computedCSSVariables.has(variableName)){return computedCSSVariables.get(variableName);}
computedCSSVariables.set(variableName,null);const definedValue=availableCSSVariables.get(variableName);const computedValue=this._innerComputeValue(availableCSSVariables,computedCSSVariables,definedValue);computedCSSVariables.set(variableName,computedValue);return computedValue;}
_innerComputeValue(availableCSSVariables,computedCSSVariables,value){const results=TextUtils.TextUtils.splitStringByRegexes(value,[SDK.CSSMetadata.VariableRegex]);const tokens=[];for(const result of results){if(result.regexIndex===-1){tokens.push(result.value);continue;}
const regexMatch=result.value.match(/^var\((--[a-zA-Z0-9-_]+)[,]?\s*(.*)\)$/);if(!regexMatch){return null;}
const cssVariable=regexMatch[1];const computedValue=this._innerComputeCSSVariable(availableCSSVariables,computedCSSVariables,cssVariable);if(computedValue===null&&!regexMatch[2]){return null;}
if(computedValue===null){tokens.push(regexMatch[2]);}else{tokens.push(computedValue);}}
return tokens.map(token=>token.trim()).join(' ');}
styles(){return Array.from(this._styleToNodeCascade.keys());}
propertyState(property){this._ensureInitialized();return this._propertiesState.get(property)||null;}
reset(){this._initialized=false;this._propertiesState.clear();this._availableCSSVariables.clear();this._computedCSSVariables.clear();}
_ensureInitialized(){if(this._initialized){return;}
this._initialized=true;const activeProperties=new Map();for(const nodeCascade of this._nodeCascades){nodeCascade._computeActiveProperties();for(const entry of nodeCascade._propertiesState.entries()){const property=(entry[0]);const state=(entry[1]);if(state===PropertyState.Overloaded){this._propertiesState.set(property,PropertyState.Overloaded);continue;}
const canonicalName=SDK.cssMetadata().canonicalPropertyName(property.name);if(activeProperties.has(canonicalName)){this._propertiesState.set(property,PropertyState.Overloaded);continue;}
activeProperties.set(canonicalName,property);this._propertiesState.set(property,PropertyState.Active);}}
for(const entry of activeProperties.entries()){const canonicalName=(entry[0]);const shorthandProperty=(entry[1]);const shorthandStyle=shorthandProperty.ownerStyle;const longhands=shorthandStyle.longhandProperties(shorthandProperty.name);if(!longhands.length){continue;}
let hasActiveLonghands=false;for(const longhand of longhands){const longhandCanonicalName=SDK.cssMetadata().canonicalPropertyName(longhand.name);const longhandActiveProperty=activeProperties.get(longhandCanonicalName);if(!longhandActiveProperty){continue;}
if(longhandActiveProperty.ownerStyle===shorthandStyle){hasActiveLonghands=true;break;}}
if(hasActiveLonghands){continue;}
activeProperties.delete(canonicalName);this._propertiesState.set(shorthandProperty,PropertyState.Overloaded);}
const accumulatedCSSVariables=new Map();for(let i=this._nodeCascades.length-1;i>=0;--i){const nodeCascade=this._nodeCascades[i];for(const entry of nodeCascade._activeProperties.entries()){const propertyName=(entry[0]);const property=(entry[1]);if(propertyName.startsWith('--')){accumulatedCSSVariables.set(propertyName,property.value);}}
this._availableCSSVariables.set(nodeCascade,new Map(accumulatedCSSVariables));this._computedCSSVariables.set(nodeCascade,new Map());}}}
export const PropertyState={Active:'Active',Overloaded:'Overloaded'};self.SDK=self.SDK||{};SDK=SDK||{};SDK.CSSMatchedStyles=CSSMatchedStyles;SDK.CSSMatchedStyles.PropertyState=PropertyState;export default class CPUProfilerModel extends SDK.SDKModel{constructor(target){super(target);this._isRecording=false;this._nextAnonymousConsoleProfileNumber=1;this._anonymousConsoleProfileIdToTitle=new Map();this._profilerAgent=target.profilerAgent();target.registerProfilerDispatcher(this);this._profilerAgent.enable();this._debuggerModel=(target.model(SDK.DebuggerModel));}
runtimeModel(){return this._debuggerModel.runtimeModel();}
debuggerModel(){return this._debuggerModel;}
consoleProfileStarted(id,scriptLocation,title){if(!title){title=Common.UIString('Profile %d',this._nextAnonymousConsoleProfileNumber++);this._anonymousConsoleProfileIdToTitle.set(id,title);}
this._dispatchProfileEvent(Events.ConsoleProfileStarted,id,scriptLocation,title);}
consoleProfileFinished(id,scriptLocation,cpuProfile,title){if(!title){title=this._anonymousConsoleProfileIdToTitle.get(id);this._anonymousConsoleProfileIdToTitle.delete(id);}
self.runtime.loadModulePromise('profiler').then(()=>{this._dispatchProfileEvent(Events.ConsoleProfileFinished,id,scriptLocation,title,cpuProfile);});}
_dispatchProfileEvent(eventName,id,scriptLocation,title,cpuProfile){const debuggerLocation=SDK.DebuggerModel.Location.fromPayload(this._debuggerModel,scriptLocation);const globalId=this.target().id()+'.'+id;const data=({id:globalId,scriptLocation:debuggerLocation,cpuProfile:cpuProfile,title:title,cpuProfilerModel:this});this.dispatchEventToListeners(eventName,data);}
isRecordingProfile(){return this._isRecording;}
startRecording(){this._isRecording=true;const intervalUs=Common.moduleSetting('highResolutionCpuProfiling').get()?100:1000;this._profilerAgent.setSamplingInterval(intervalUs);return this._profilerAgent.start();}
stopRecording(){this._isRecording=false;return this._profilerAgent.stop();}
startPreciseCoverage(jsCoveragePerBlock){const callCount=false;return this._profilerAgent.startPreciseCoverage(callCount,jsCoveragePerBlock);}
takePreciseCoverage(){return this._profilerAgent.takePreciseCoverage().then(result=>result||[]);}
stopPreciseCoverage(){return this._profilerAgent.stopPreciseCoverage();}}
export const Events={ConsoleProfileStarted:Symbol('ConsoleProfileStarted'),ConsoleProfileFinished:Symbol('ConsoleProfileFinished')};self.SDK=self.SDK||{};SDK=SDK||{};SDK.CPUProfilerModel=CPUProfilerModel;SDK.CPUProfilerModel.Events=Events;SDK.SDKModel.register(SDK.CPUProfilerModel,SDK.Target.Capability.JS,true);SDK.CPUProfilerModel.EventData;export class CPUProfileNode extends SDK.ProfileNode{constructor(node,sampleTime){const callFrame=node.callFrame||({functionName:node['functionName'],scriptId:node['scriptId'],url:node['url'],lineNumber:node['lineNumber']-1,columnNumber:node['columnNumber']-1});super(callFrame);this.id=node.id;this.self=node.hitCount*sampleTime;this.positionTicks=node.positionTicks;this.deoptReason=node.deoptReason&&node.deoptReason!=='no reason'?node.deoptReason:null;}}
export default class CPUProfileDataModel extends SDK.ProfileTreeModel{constructor(profile,target){super(target);const isLegacyFormat=!!profile['head'];if(isLegacyFormat){this.profileStartTime=profile.startTime*1000;this.profileEndTime=profile.endTime*1000;this.timestamps=profile.timestamps;this._compatibilityConversionHeadToNodes(profile);}else{this.profileStartTime=profile.startTime/1000;this.profileEndTime=profile.endTime/1000;this.timestamps=this._convertTimeDeltas(profile);}
this.samples=profile.samples;this.lines=profile.lines;this.totalHitCount=0;this.profileHead=this._translateProfileTree(profile.nodes);this.initialize(this.profileHead);this._extractMetaNodes();if(this.samples){this._buildIdToNodeMap();this._sortSamples();this._normalizeTimestamps();this._fixMissingSamples();}}
_compatibilityConversionHeadToNodes(profile){if(!profile.head||profile.nodes){return;}
const nodes=[];convertNodesTree(profile.head);profile.nodes=nodes;delete profile.head;function convertNodesTree(node){nodes.push(node);node.children=((node.children)).map(convertNodesTree);return node.id;}}
_convertTimeDeltas(profile){if(!profile.timeDeltas){return null;}
let lastTimeUsec=profile.startTime;const timestamps=new Array(profile.timeDeltas.length);for(let i=0;i<profile.timeDeltas.length;++i){lastTimeUsec+=profile.timeDeltas[i];timestamps[i]=lastTimeUsec;}
return timestamps;}
_translateProfileTree(nodes){function isNativeNode(node){if(node.callFrame){return!!node.callFrame.url&&node.callFrame.url.startsWith('native ');}
return!!node['url']&&node['url'].startsWith('native ');}
function buildChildrenFromParents(nodes){if(nodes[0].children){return;}
nodes[0].children=[];for(let i=1;i<nodes.length;++i){const node=nodes[i];const parentNode=nodeByIdMap.get(node.parent);if(parentNode.children){parentNode.children.push(node.id);}else{parentNode.children=[node.id];}}}
function buildHitCountFromSamples(nodes,samples){if(typeof(nodes[0].hitCount)==='number'){return;}
console.assert(samples,'Error: Neither hitCount nor samples are present in profile.');for(let i=0;i<nodes.length;++i){nodes[i].hitCount=0;}
for(let i=0;i<samples.length;++i){++nodeByIdMap.get(samples[i]).hitCount;}}
const nodeByIdMap=new Map();for(let i=0;i<nodes.length;++i){const node=nodes[i];nodeByIdMap.set(node.id,node);}
buildHitCountFromSamples(nodes,this.samples);buildChildrenFromParents(nodes);this.totalHitCount=nodes.reduce((acc,node)=>acc+node.hitCount,0);const sampleTime=(this.profileEndTime-this.profileStartTime)/this.totalHitCount;const keepNatives=!!Common.moduleSetting('showNativeFunctionsInJSProfile').get();const root=nodes[0];const idMap=new Map([[root.id,root.id]]);const resultRoot=new CPUProfileNode(root,sampleTime);const parentNodeStack=root.children.map(()=>resultRoot);const sourceNodeStack=root.children.map(id=>nodeByIdMap.get(id));while(sourceNodeStack.length){let parentNode=parentNodeStack.pop();const sourceNode=sourceNodeStack.pop();if(!sourceNode.children){sourceNode.children=[];}
const targetNode=new CPUProfileNode(sourceNode,sampleTime);if(keepNatives||!isNativeNode(sourceNode)){parentNode.children.push(targetNode);parentNode=targetNode;}else{parentNode.self+=targetNode.self;}
idMap.set(sourceNode.id,parentNode.id);parentNodeStack.push.apply(parentNodeStack,sourceNode.children.map(()=>parentNode));sourceNodeStack.push.apply(sourceNodeStack,sourceNode.children.map(id=>nodeByIdMap.get(id)));}
if(this.samples){this.samples=this.samples.map(id=>idMap.get(id));}
return resultRoot;}
_sortSamples(){const timestamps=this.timestamps;if(!timestamps){return;}
const samples=this.samples;const indices=timestamps.map((x,index)=>index);indices.sort((a,b)=>timestamps[a]-timestamps[b]);for(let i=0;i<timestamps.length;++i){let index=indices[i];if(index===i){continue;}
const savedTimestamp=timestamps[i];const savedSample=samples[i];let currentIndex=i;while(index!==i){samples[currentIndex]=samples[index];timestamps[currentIndex]=timestamps[index];currentIndex=index;index=indices[index];indices[currentIndex]=currentIndex;}
samples[currentIndex]=savedSample;timestamps[currentIndex]=savedTimestamp;}}
_normalizeTimestamps(){let timestamps=this.timestamps;if(!timestamps){const profileStartTime=this.profileStartTime;const interval=(this.profileEndTime-profileStartTime)/this.samples.length;timestamps=new Float64Array(this.samples.length+1);for(let i=0;i<timestamps.length;++i){timestamps[i]=profileStartTime+i*interval;}
this.timestamps=timestamps;return;}
for(let i=0;i<timestamps.length;++i){timestamps[i]/=1000;}
if(this.samples.length===timestamps.length){const averageSample=(timestamps.peekLast()-timestamps[0])/(timestamps.length-1);this.timestamps.push(timestamps.peekLast()+averageSample);}
this.profileStartTime=timestamps[0];this.profileEndTime=timestamps.peekLast();}
_buildIdToNodeMap(){this._idToNode=new Map();const idToNode=this._idToNode;const stack=[this.profileHead];while(stack.length){const node=stack.pop();idToNode.set(node.id,node);stack.push.apply(stack,node.children);}}
_extractMetaNodes(){const topLevelNodes=this.profileHead.children;for(let i=0;i<topLevelNodes.length&&!(this.gcNode&&this.programNode&&this.idleNode);i++){const node=topLevelNodes[i];if(node.functionName==='(garbage collector)'){this.gcNode=node;}else if(node.functionName==='(program)'){this.programNode=node;}else if(node.functionName==='(idle)'){this.idleNode=node;}}}
_fixMissingSamples(){const samples=this.samples;const samplesCount=samples.length;if(!this.programNode||samplesCount<3){return;}
const idToNode=this._idToNode;const programNodeId=this.programNode.id;const gcNodeId=this.gcNode?this.gcNode.id:-1;const idleNodeId=this.idleNode?this.idleNode.id:-1;let prevNodeId=samples[0];let nodeId=samples[1];let count=0;for(let sampleIndex=1;sampleIndex<samplesCount-1;sampleIndex++){const nextNodeId=samples[sampleIndex+1];if(nodeId===programNodeId&&!isSystemNode(prevNodeId)&&!isSystemNode(nextNodeId)&&bottomNode(idToNode.get(prevNodeId))===bottomNode(idToNode.get(nextNodeId))){++count;samples[sampleIndex]=prevNodeId;}
prevNodeId=nodeId;nodeId=nextNodeId;}
if(count){Common.console.warn(ls`DevTools: CPU profile parser is fixing ${count} missing samples.`);}
function bottomNode(node){while(node.parent&&node.parent.parent){node=node.parent;}
return node;}
function isSystemNode(nodeId){return nodeId===programNodeId||nodeId===gcNodeId||nodeId===idleNodeId;}}
forEachFrame(openFrameCallback,closeFrameCallback,startTime,stopTime){if(!this.profileHead||!this.samples){return;}
startTime=startTime||0;stopTime=stopTime||Infinity;const samples=this.samples;const timestamps=this.timestamps;const idToNode=this._idToNode;const gcNode=this.gcNode;const samplesCount=samples.length;const startIndex=timestamps.lowerBound(startTime);let stackTop=0;const stackNodes=[];let prevId=this.profileHead.id;let sampleTime;let gcParentNode=null;const stackDepth=this.maxDepth+3;if(!this._stackStartTimes){this._stackStartTimes=new Float64Array(stackDepth);}
const stackStartTimes=this._stackStartTimes;if(!this._stackChildrenDuration){this._stackChildrenDuration=new Float64Array(stackDepth);}
const stackChildrenDuration=this._stackChildrenDuration;let node;let sampleIndex;for(sampleIndex=startIndex;sampleIndex<samplesCount;sampleIndex++){sampleTime=timestamps[sampleIndex];if(sampleTime>=stopTime){break;}
const id=samples[sampleIndex];if(id===prevId){continue;}
node=idToNode.get(id);let prevNode=idToNode.get(prevId);if(node===gcNode){gcParentNode=prevNode;openFrameCallback(gcParentNode.depth+1,gcNode,sampleTime);stackStartTimes[++stackTop]=sampleTime;stackChildrenDuration[stackTop]=0;prevId=id;continue;}
if(prevNode===gcNode){const start=stackStartTimes[stackTop];const duration=sampleTime-start;stackChildrenDuration[stackTop-1]+=duration;closeFrameCallback(gcParentNode.depth+1,gcNode,start,duration,duration-stackChildrenDuration[stackTop]);--stackTop;prevNode=gcParentNode;prevId=prevNode.id;gcParentNode=null;}
while(node.depth>prevNode.depth){stackNodes.push(node);node=node.parent;}
while(prevNode!==node){const start=stackStartTimes[stackTop];const duration=sampleTime-start;stackChildrenDuration[stackTop-1]+=duration;closeFrameCallback(prevNode.depth,(prevNode),start,duration,duration-stackChildrenDuration[stackTop]);--stackTop;if(node.depth===prevNode.depth){stackNodes.push(node);node=node.parent;}
prevNode=prevNode.parent;}
while(stackNodes.length){node=stackNodes.pop();openFrameCallback(node.depth,node,sampleTime);stackStartTimes[++stackTop]=sampleTime;stackChildrenDuration[stackTop]=0;}
prevId=id;}
sampleTime=timestamps[sampleIndex]||this.profileEndTime;if(idToNode.get(prevId)===gcNode){const start=stackStartTimes[stackTop];const duration=sampleTime-start;stackChildrenDuration[stackTop-1]+=duration;closeFrameCallback(gcParentNode.depth+1,node,start,duration,duration-stackChildrenDuration[stackTop]);--stackTop;prevId=gcParentNode.id;}
for(let node=idToNode.get(prevId);node.parent;node=node.parent){const start=stackStartTimes[stackTop];const duration=sampleTime-start;stackChildrenDuration[stackTop-1]+=duration;closeFrameCallback(node.depth,(node),start,duration,duration-stackChildrenDuration[stackTop]);--stackTop;}}
nodeByIndex(index){return this._idToNode.get(this.samples[index])||null;}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.CPUProfileDataModel=CPUProfileDataModel;SDK.CPUProfileNode=CPUProfileNode;export default class CookieParser{constructor(){}
static parseCookie(header){return(new CookieParser()).parseCookie(header);}
static parseSetCookie(header){return(new CookieParser()).parseSetCookie(header);}
cookies(){return this._cookies;}
parseCookie(cookieHeader){if(!this._initialize(cookieHeader)){return null;}
for(let kv=this._extractKeyValue();kv;kv=this._extractKeyValue()){if(kv.key.charAt(0)==='$'&&this._lastCookie){this._lastCookie.addAttribute(kv.key.slice(1),kv.value);}else if(kv.key.toLowerCase()!=='$version'&&typeof kv.value==='string'){this._addCookie(kv,Type.Request);}
this._advanceAndCheckCookieDelimiter();}
this._flushCookie();return this._cookies;}
parseSetCookie(setCookieHeader){if(!this._initialize(setCookieHeader)){return null;}
for(let kv=this._extractKeyValue();kv;kv=this._extractKeyValue()){if(this._lastCookie){this._lastCookie.addAttribute(kv.key,kv.value);}else{this._addCookie(kv,Type.Response);}
if(this._advanceAndCheckCookieDelimiter()){this._flushCookie();}}
this._flushCookie();return this._cookies;}
_initialize(headerValue){this._input=headerValue;if(typeof headerValue!=='string'){return false;}
this._cookies=[];this._lastCookie=null;this._lastCookieLine='';this._originalInputLength=this._input.length;return true;}
_flushCookie(){if(this._lastCookie){this._lastCookie.setSize(this._originalInputLength-this._input.length-this._lastCookiePosition);this._lastCookie._setCookieLine(this._lastCookieLine.replace('\n',''));}
this._lastCookie=null;this._lastCookieLine='';}
_extractKeyValue(){if(!this._input||!this._input.length){return null;}
const keyValueMatch=/^[ \t]*([^\s=;]+)[ \t]*(?:=[ \t]*([^;\n]*))?/.exec(this._input);if(!keyValueMatch){console.error('Failed parsing cookie header before: '+this._input);return null;}
const result=new KeyValue(keyValueMatch[1],keyValueMatch[2]&&keyValueMatch[2].trim(),this._originalInputLength-this._input.length);this._lastCookieLine+=keyValueMatch[0];this._input=this._input.slice(keyValueMatch[0].length);return result;}
_advanceAndCheckCookieDelimiter(){const match=/^\s*[\n;]\s*/.exec(this._input);if(!match){return false;}
this._lastCookieLine+=match[0];this._input=this._input.slice(match[0].length);return match[0].match('\n')!==null;}
_addCookie(keyValue,type){if(this._lastCookie){this._lastCookie.setSize(keyValue.position-this._lastCookiePosition);}
this._lastCookie=typeof keyValue.value==='string'?new SDK.Cookie(keyValue.key,keyValue.value,type):new SDK.Cookie('',keyValue.key,type);this._lastCookiePosition=keyValue.position;this._cookies.push(this._lastCookie);}}
class KeyValue{constructor(key,value,position){this.key=key;this.value=value;this.position=position;}}
export class Cookie{constructor(name,value,type){this._name=name;this._value=value;this._type=type;this._attributes={};this._size=0;this._cookieLine=null;}
static fromProtocolCookie(protocolCookie){const cookie=new SDK.Cookie(protocolCookie.name,protocolCookie.value,null);cookie.addAttribute('domain',protocolCookie['domain']);cookie.addAttribute('path',protocolCookie['path']);cookie.addAttribute('port',protocolCookie['port']);if(protocolCookie['expires']){cookie.addAttribute('expires',protocolCookie['expires']*1000);}
if(protocolCookie['httpOnly']){cookie.addAttribute('httpOnly');}
if(protocolCookie['secure']){cookie.addAttribute('secure');}
if(protocolCookie['sameSite']){cookie.addAttribute('sameSite',protocolCookie['sameSite']);}
cookie.setSize(protocolCookie['size']);return cookie;}
name(){return this._name;}
value(){return this._value;}
type(){return this._type;}
httpOnly(){return'httponly'in this._attributes;}
secure(){return'secure'in this._attributes;}
sameSite(){return(this._attributes['samesite']);}
session(){return!('expires'in this._attributes||'max-age'in this._attributes);}
path(){return this._attributes['path'];}
port(){return this._attributes['port'];}
domain(){return this._attributes['domain'];}
expires(){return this._attributes['expires'];}
maxAge(){return this._attributes['max-age'];}
size(){return this._size;}
url(){return(this.secure()?'https://':'http://')+this.domain()+this.path();}
setSize(size){this._size=size;}
expiresDate(requestDate){if(this.maxAge()){const targetDate=requestDate===null?new Date():requestDate;return new Date(targetDate.getTime()+1000*this.maxAge());}
if(this.expires()){return new Date(this.expires());}
return null;}
attributes(){return this._attributes;}
addAttribute(key,value){this._attributes[key.toLowerCase()]=value;}
_setCookieLine(cookieLine){this._cookieLine=cookieLine;}
getCookieLine(){return this._cookieLine;}}
export const Type={Request:0,Response:1};export const Attributes={Name:'name',Value:'value',Size:'size',Domain:'domain',Path:'path',Expires:'expires',HttpOnly:'httpOnly',Secure:'secure',SameSite:'sameSite',};self.SDK=self.SDK||{};SDK=SDK||{};SDK.CookieParser=CookieParser;SDK.Cookie=Cookie;SDK.Cookie.Type=Type;SDK.Cookie.Attributes=Attributes;export default class CookieModel extends SDK.SDKModel{constructor(target){super(target);}
static cookieMatchesResourceURL(cookie,resourceURL){const url=resourceURL.asParsedURL();if(!url||!CookieModel.cookieDomainMatchesResourceDomain(cookie.domain(),url.host)){return false;}
return(url.path.startsWith(cookie.path())&&(!cookie.port()||url.port===cookie.port())&&(!cookie.secure()||url.scheme==='https'));}
static cookieDomainMatchesResourceDomain(cookieDomain,resourceDomain){if(cookieDomain.charAt(0)!=='.'){return resourceDomain===cookieDomain;}
return!!resourceDomain.match(new RegExp('^([^\\.]+\\.)*'+cookieDomain.substring(1).escapeForRegExp()+'$','i'));}
getCookies(urls){return this.target().networkAgent().getCookies(urls).then(cookies=>(cookies||[]).map(cookie=>SDK.Cookie.fromProtocolCookie(cookie)));}
deleteCookie(cookie,callback){this._deleteAll([cookie],callback);}
clear(domain,callback){this.getCookiesForDomain(domain||null).then(cookies=>this._deleteAll(cookies,callback));}
saveCookie(cookie){let domain=cookie.domain();if(!domain.startsWith('.')){domain='';}
let expires=undefined;if(cookie.expires()){expires=Math.floor(Date.parse(cookie.expires())/1000);}
return this.target().networkAgent().setCookie(cookie.name(),cookie.value(),cookie.url(),domain,cookie.path(),cookie.secure(),cookie.httpOnly(),cookie.sameSite(),expires).then(success=>!!success);}
getCookiesForDomain(domain){const resourceURLs=[];function populateResourceURLs(resource){const documentURL=resource.documentURL.asParsedURL();if(documentURL&&(!domain||documentURL.securityOrigin()===domain)){resourceURLs.push(resource.url);}}
const resourceTreeModel=this.target().model(SDK.ResourceTreeModel);if(resourceTreeModel){resourceTreeModel.forAllResources(populateResourceURLs);}
return this.getCookies(resourceURLs);}
_deleteAll(cookies,callback){const networkAgent=this.target().networkAgent();Promise.all(cookies.map(cookie=>networkAgent.deleteCookies(cookie.name(),undefined,cookie.domain(),cookie.path()))).then(callback||function(){});}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.CookieModel=CookieModel;SDK.SDKModel.register(SDK.CookieModel,SDK.Target.Capability.Network,false);export class CompilerSourceMappingContentProvider{constructor(sourceURL,contentType){this._sourceURL=sourceURL;this._contentType=contentType;}
contentURL(){return this._sourceURL;}
contentType(){return this._contentType;}
contentEncoded(){return Promise.resolve(false);}
requestContent(){return new Promise(resolve=>{SDK.multitargetNetworkManager.loadResource(this._sourceURL,(statusCode,_headers,content)=>{if(statusCode>=400){const error=ls`Could not load content for ${this._sourceURL} : HTTP status code: ${statusCode}`;console.error(error);resolve({error,isEncoded:false});}else{resolve({content,isEncoded:false});}});});}
async searchInContent(query,caseSensitive,isRegex){const{content}=await this.requestContent();if(typeof content!=='string'){return[];}
return Common.ContentProvider.performSearchInContent(content,query,caseSensitive,isRegex);}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.CompilerSourceMappingContentProvider=CompilerSourceMappingContentProvider;const _events=Symbol('SDK.ConsoleModel.events');export default class ConsoleModel extends Common.Object{constructor(){super();this._messages=[];this._messageByExceptionId=new Map();this._warnings=0;this._errors=0;this._violations=0;this._pageLoadSequenceNumber=0;SDK.targetManager.observeTargets(this);}
targetAdded(target){const resourceTreeModel=target.model(SDK.ResourceTreeModel);if(!resourceTreeModel||resourceTreeModel.cachedResourcesLoaded()){this._initTarget(target);return;}
const eventListener=resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.CachedResourcesLoaded,()=>{Common.EventTarget.removeEventListeners([eventListener]);this._initTarget(target);});}
_initTarget(target){const eventListeners=[];const cpuProfilerModel=target.model(SDK.CPUProfilerModel);if(cpuProfilerModel){eventListeners.push(cpuProfilerModel.addEventListener(SDK.CPUProfilerModel.Events.ConsoleProfileStarted,this._consoleProfileStarted.bind(this,cpuProfilerModel)));eventListeners.push(cpuProfilerModel.addEventListener(SDK.CPUProfilerModel.Events.ConsoleProfileFinished,this._consoleProfileFinished.bind(this,cpuProfilerModel)));}
const resourceTreeModel=target.model(SDK.ResourceTreeModel);if(resourceTreeModel&&!target.parentTarget()){eventListeners.push(resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.MainFrameNavigated,this._mainFrameNavigated,this));}
const runtimeModel=target.model(SDK.RuntimeModel);if(runtimeModel){eventListeners.push(runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExceptionThrown,this._exceptionThrown.bind(this,runtimeModel)));eventListeners.push(runtimeModel.addEventListener(SDK.RuntimeModel.Events.ExceptionRevoked,this._exceptionRevoked.bind(this,runtimeModel)));eventListeners.push(runtimeModel.addEventListener(SDK.RuntimeModel.Events.ConsoleAPICalled,this._consoleAPICalled.bind(this,runtimeModel)));if(!target.parentTarget()){eventListeners.push(runtimeModel.debuggerModel().addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared,this._clearIfNecessary,this));}
eventListeners.push(runtimeModel.addEventListener(SDK.RuntimeModel.Events.QueryObjectRequested,this._queryObjectRequested.bind(this,runtimeModel)));}
target[_events]=eventListeners;}
targetRemoved(target){const runtimeModel=target.model(SDK.RuntimeModel);if(runtimeModel){this._messageByExceptionId.delete(runtimeModel);}
Common.EventTarget.removeEventListeners(target[_events]||[]);}
async evaluateCommandInConsole(executionContext,originatingMessage,expression,useCommandLineAPI,awaitPromise){const result=await executionContext.evaluate({expression:expression,objectGroup:'console',includeCommandLineAPI:useCommandLineAPI,silent:false,returnByValue:false,generatePreview:true,replMode:true},Common.settings.moduleSetting('consoleUserActivationEval').get(),awaitPromise);Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConsoleEvaluated);if(result.error){return;}
await Common.console.showPromise();this.dispatchEventToListeners(Events.CommandEvaluated,{result:result.object,commandMessage:originatingMessage,exceptionDetails:result.exceptionDetails});}
addCommandMessage(executionContext,text){const commandMessage=new ConsoleMessage(executionContext.runtimeModel,MessageSource.JS,null,text,MessageType.Command);commandMessage.setExecutionContextId(executionContext.id);this.addMessage(commandMessage);return commandMessage;}
addMessage(msg){msg._pageLoadSequenceNumber=this._pageLoadSequenceNumber;if(msg.source===MessageSource.ConsoleAPI&&msg.type===MessageType.Clear){this._clearIfNecessary();}
this._messages.push(msg);const runtimeModel=msg.runtimeModel();if(msg._exceptionId&&runtimeModel){let modelMap=this._messageByExceptionId.get(runtimeModel);if(!modelMap){modelMap=new Map();this._messageByExceptionId.set(runtimeModel,modelMap);}
modelMap.set(msg._exceptionId,msg);}
this._incrementErrorWarningCount(msg);this.dispatchEventToListeners(Events.MessageAdded,msg);}
_exceptionThrown(runtimeModel,event){const exceptionWithTimestamp=(event.data);const consoleMessage=ConsoleMessage.fromException(runtimeModel,exceptionWithTimestamp.details,undefined,exceptionWithTimestamp.timestamp,undefined);consoleMessage.setExceptionId(exceptionWithTimestamp.details.exceptionId);this.addMessage(consoleMessage);}
_exceptionRevoked(runtimeModel,event){const exceptionId=(event.data);const modelMap=this._messageByExceptionId.get(runtimeModel);const exceptionMessage=modelMap?modelMap.get(exceptionId):null;if(!exceptionMessage){return;}
this._errors--;exceptionMessage.level=MessageLevel.Verbose;this.dispatchEventToListeners(Events.MessageUpdated,exceptionMessage);}
_consoleAPICalled(runtimeModel,event){const call=(event.data);let level=MessageLevel.Info;if(call.type===MessageType.Debug){level=MessageLevel.Verbose;}else if(call.type===MessageType.Error||call.type===MessageType.Assert){level=MessageLevel.Error;}else if(call.type===MessageType.Warning){level=MessageLevel.Warning;}else if(call.type===MessageType.Info||call.type===MessageType.Log){level=MessageLevel.Info;}
let message='';if(call.args.length&&call.args[0].unserializableValue){message=call.args[0].unserializableValue;}else if(call.args.length&&(typeof call.args[0].value!=='object'||call.args[0].value===null)){message=call.args[0].value+'';}else if(call.args.length&&call.args[0].description){message=call.args[0].description;}
const callFrame=call.stackTrace&&call.stackTrace.callFrames.length?call.stackTrace.callFrames[0]:null;const consoleMessage=new ConsoleMessage(runtimeModel,MessageSource.ConsoleAPI,level,(message),call.type,callFrame?callFrame.url:undefined,callFrame?callFrame.lineNumber:undefined,callFrame?callFrame.columnNumber:undefined,call.args,call.stackTrace,call.timestamp,call.executionContextId,undefined,undefined,call.context);this.addMessage(consoleMessage);}
_queryObjectRequested(runtimeModel,event){const consoleMessage=new ConsoleMessage(runtimeModel,MessageSource.ConsoleAPI,MessageLevel.Info,'',MessageType.QueryObjectResult,undefined,undefined,undefined,[event.data.objects]);this.addMessage(consoleMessage);}
_clearIfNecessary(){if(!Common.moduleSetting('preserveConsoleLog').get()){this._clear();}
++this._pageLoadSequenceNumber;}
_mainFrameNavigated(event){if(Common.moduleSetting('preserveConsoleLog').get()){Common.console.log(Common.UIString('Navigated to %s',event.data.url));}}
_consoleProfileStarted(cpuProfilerModel,event){const data=(event.data);this._addConsoleProfileMessage(cpuProfilerModel,MessageType.Profile,data.scriptLocation,Common.UIString('Profile \'%s\' started.',data.title));}
_consoleProfileFinished(cpuProfilerModel,event){const data=(event.data);this._addConsoleProfileMessage(cpuProfilerModel,MessageType.ProfileEnd,data.scriptLocation,Common.UIString('Profile \'%s\' finished.',data.title));}
_addConsoleProfileMessage(cpuProfilerModel,type,scriptLocation,messageText){const stackTrace=[{functionName:'',scriptId:scriptLocation.scriptId,url:scriptLocation.script()?scriptLocation.script().contentURL():'',lineNumber:scriptLocation.lineNumber,columnNumber:scriptLocation.columnNumber||0}];this.addMessage(new ConsoleMessage(cpuProfilerModel.runtimeModel(),MessageSource.ConsoleAPI,MessageLevel.Info,messageText,type,undefined,undefined,undefined,stackTrace));}
_incrementErrorWarningCount(msg){if(msg.source===MessageSource.Violation){this._violations++;return;}
switch(msg.level){case MessageLevel.Warning:this._warnings++;break;case MessageLevel.Error:this._errors++;break;}}
messages(){return this._messages;}
requestClearMessages(){for(const logModel of SDK.targetManager.models(SDK.LogModel)){logModel.requestClear();}
for(const runtimeModel of SDK.targetManager.models(SDK.RuntimeModel)){runtimeModel.discardConsoleEntries();}
this._clear();}
_clear(){this._messages=[];this._messageByExceptionId.clear();this._errors=0;this._warnings=0;this._violations=0;this.dispatchEventToListeners(Events.ConsoleCleared);}
errors(){return this._errors;}
warnings(){return this._warnings;}
violations(){return this._violations;}
async saveToTempVariable(currentExecutionContext,remoteObject){if(!remoteObject||!currentExecutionContext){failedToSave(null);return;}
const executionContext=(currentExecutionContext);const result=await executionContext.globalObject('',false);if(!!result.exceptionDetails||!result.object){failedToSave(result.object||null);return;}
const globalObject=result.object;const callFunctionResult=await globalObject.callFunction(saveVariable,[SDK.RemoteObject.toCallArgument(remoteObject)]);globalObject.release();if(callFunctionResult.wasThrown||!callFunctionResult.object||callFunctionResult.object.type!=='string'){failedToSave(callFunctionResult.object||null);}else{const text=(callFunctionResult.object.value);const message=this.addCommandMessage(executionContext,text);this.evaluateCommandInConsole(executionContext,message,text,false,false);}
if(callFunctionResult.object){callFunctionResult.object.release();}
function saveVariable(value){const prefix='temp';let index=1;while((prefix+index)in this){++index;}
const name=prefix+index;this[name]=value;return name;}
function failedToSave(result){let message=Common.UIString('Failed to save to temp variable.');if(result){message+=' '+result.description;}
Common.console.error(message);}}}
export const Events={ConsoleCleared:Symbol('ConsoleCleared'),MessageAdded:Symbol('MessageAdded'),MessageUpdated:Symbol('MessageUpdated'),CommandEvaluated:Symbol('CommandEvaluated')};export class ConsoleMessage{constructor(runtimeModel,source,level,messageText,type,url,line,column,parameters,stackTrace,timestamp,executionContextId,scriptId,workerId,context){this._runtimeModel=runtimeModel;this.source=source;this.level=(level);this.messageText=messageText;this.type=type||MessageType.Log;this.url=url||undefined;this.line=line||0;this.column=column||0;this.parameters=parameters;this.stackTrace=stackTrace;this.timestamp=timestamp||Date.now();this.executionContextId=executionContextId||0;this.scriptId=scriptId||null;this.workerId=workerId||null;if(!this.executionContextId&&this._runtimeModel){if(this.scriptId){this.executionContextId=this._runtimeModel.executionContextIdForScriptId(this.scriptId);}else if(this.stackTrace){this.executionContextId=this._runtimeModel.executionContextForStackTrace(this.stackTrace);}}
if(context){this.context=context.match(/[^#]*/)[0];}}
static fromException(runtimeModel,exceptionDetails,messageType,timestamp,forceUrl){return new ConsoleMessage(runtimeModel,MessageSource.JS,MessageLevel.Error,SDK.RuntimeModel.simpleTextFromException(exceptionDetails),messageType,forceUrl||exceptionDetails.url,exceptionDetails.lineNumber,exceptionDetails.columnNumber,exceptionDetails.exception?[SDK.RemoteObject.fromLocalObject(exceptionDetails.text),exceptionDetails.exception]:undefined,exceptionDetails.stackTrace,timestamp,exceptionDetails.executionContextId,exceptionDetails.scriptId);}
runtimeModel(){return this._runtimeModel;}
target(){return this._runtimeModel?this._runtimeModel.target():null;}
setOriginatingMessage(originatingMessage){this._originatingConsoleMessage=originatingMessage;this.executionContextId=originatingMessage.executionContextId;}
setExecutionContextId(executionContextId){this.executionContextId=executionContextId;}
setExceptionId(exceptionId){this._exceptionId=exceptionId;}
originatingMessage(){return this._originatingConsoleMessage;}
isGroupMessage(){return this.type===MessageType.StartGroup||this.type===MessageType.StartGroupCollapsed||this.type===MessageType.EndGroup;}
isGroupStartMessage(){return this.type===MessageType.StartGroup||this.type===MessageType.StartGroupCollapsed;}
isErrorOrWarning(){return(this.level===MessageLevel.Warning||this.level===MessageLevel.Error);}
isGroupable(){const isUngroupableError=this.level===MessageLevel.Error&&(this.source===MessageSource.JS||this.source===MessageSource.Network);return(this.source!==MessageSource.ConsoleAPI&&this.type!==MessageType.Command&&this.type!==MessageType.Result&&this.type!==MessageType.System&&!isUngroupableError);}
groupCategoryKey(){return[this.source,this.level,this.type,this._pageLoadSequenceNumber].join(':');}
isEqual(msg){if(!msg){return false;}
if(!this._isEqualStackTraces(this.stackTrace,msg.stackTrace)){return false;}
if(this.parameters){if(!msg.parameters||this.parameters.length!==msg.parameters.length){return false;}
for(let i=0;i<msg.parameters.length;++i){if(msg.parameters[i].type==='object'&&msg.parameters[i].subtype!=='error'){return false;}
if(this.parameters[i].type!==msg.parameters[i].type||this.parameters[i].value!==msg.parameters[i].value||this.parameters[i].description!==msg.parameters[i].description){return false;}}}
return(this.runtimeModel()===msg.runtimeModel())&&(this.source===msg.source)&&(this.type===msg.type)&&(this.level===msg.level)&&(this.line===msg.line)&&(this.url===msg.url)&&(this.messageText===msg.messageText)&&(this.request===msg.request)&&(this.executionContextId===msg.executionContextId);}
_isEqualStackTraces(stackTrace1,stackTrace2){if(!stackTrace1!==!stackTrace2){return false;}
if(!stackTrace1){return true;}
const callFrames1=stackTrace1.callFrames;const callFrames2=stackTrace2.callFrames;if(callFrames1.length!==callFrames2.length){return false;}
for(let i=0,n=callFrames1.length;i<n;++i){if(callFrames1[i].url!==callFrames2[i].url||callFrames1[i].functionName!==callFrames2[i].functionName||callFrames1[i].lineNumber!==callFrames2[i].lineNumber||callFrames1[i].columnNumber!==callFrames2[i].columnNumber){return false;}}
return this._isEqualStackTraces(stackTrace1.parent,stackTrace2.parent);}}
export const MessageSource={XML:'xml',JS:'javascript',Network:'network',ConsoleAPI:'console-api',Storage:'storage',AppCache:'appcache',Rendering:'rendering',CSS:'css',Security:'security',Deprecation:'deprecation',Worker:'worker',Violation:'violation',Intervention:'intervention',Recommendation:'recommendation',Other:'other'};export const MessageType={Log:'log',Debug:'debug',Info:'info',Error:'error',Warning:'warning',Dir:'dir',DirXML:'dirxml',Table:'table',Trace:'trace',Clear:'clear',StartGroup:'startGroup',StartGroupCollapsed:'startGroupCollapsed',EndGroup:'endGroup',Assert:'assert',Result:'result',Profile:'profile',ProfileEnd:'profileEnd',Command:'command',System:'system',QueryObjectResult:'queryObjectResult'};export const MessageLevel={Verbose:'verbose',Info:'info',Warning:'warning',Error:'error'};export const MessageSourceDisplayName=new Map([[MessageSource.XML,'xml'],[MessageSource.JS,'javascript'],[MessageSource.Network,'network'],[MessageSource.ConsoleAPI,'console-api'],[MessageSource.Storage,'storage'],[MessageSource.AppCache,'appcache'],[MessageSource.Rendering,'rendering'],[MessageSource.CSS,'css'],[MessageSource.Security,'security'],[MessageSource.Deprecation,'deprecation'],[MessageSource.Worker,'worker'],[MessageSource.Violation,'violation'],[MessageSource.Intervention,'intervention'],[MessageSource.Recommendation,'recommendation'],[MessageSource.Other,'other']]);self.SDK=self.SDK||{};SDK=SDK||{};SDK.ConsoleModel=ConsoleModel;SDK.ConsoleMessage=ConsoleMessage;SDK.ConsoleModel.Events=Events;SDK.ConsoleMessage.MessageSource=MessageSource;SDK.ConsoleMessage.MessageType=MessageType;SDK.ConsoleMessage.MessageLevel=MessageLevel;SDK.ConsoleMessage.MessageSourceDisplayName=MessageSourceDisplayName;SDK.consoleModel;export class MainConnection{constructor(){this._onMessage=null;this._onDisconnect=null;this._messageBuffer='';this._messageSize=0;this._eventListeners=[Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.DispatchMessage,this._dispatchMessage,this),Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.DispatchMessageChunk,this._dispatchMessageChunk,this),];}
setOnMessage(onMessage){this._onMessage=onMessage;}
setOnDisconnect(onDisconnect){this._onDisconnect=onDisconnect;}
sendRawMessage(message){if(this._onMessage){Host.InspectorFrontendHost.sendMessageToBackend(message);}}
_dispatchMessage(event){if(this._onMessage){this._onMessage.call(null,(event.data));}}
_dispatchMessageChunk(event){const messageChunk=(event.data['messageChunk']);const messageSize=(event.data['messageSize']);if(messageSize){this._messageBuffer='';this._messageSize=messageSize;}
this._messageBuffer+=messageChunk;if(this._messageBuffer.length===this._messageSize){this._onMessage.call(null,this._messageBuffer);this._messageBuffer='';this._messageSize=0;}}
disconnect(){const onDisconnect=this._onDisconnect;Common.EventTarget.removeEventListeners(this._eventListeners);this._onDisconnect=null;this._onMessage=null;if(onDisconnect){onDisconnect.call(null,'force disconnect');}
return Promise.resolve();}}
export class WebSocketConnection{constructor(url,onWebSocketDisconnect){this._socket=new WebSocket(url);this._socket.onerror=this._onError.bind(this);this._socket.onopen=this._onOpen.bind(this);this._socket.onmessage=messageEvent=>{if(this._onMessage){this._onMessage.call(null,(messageEvent.data));}};this._socket.onclose=this._onClose.bind(this);this._onMessage=null;this._onDisconnect=null;this._onWebSocketDisconnect=onWebSocketDisconnect;this._connected=false;this._messages=[];}
setOnMessage(onMessage){this._onMessage=onMessage;}
setOnDisconnect(onDisconnect){this._onDisconnect=onDisconnect;}
_onError(){this._onWebSocketDisconnect.call(null);this._onDisconnect.call(null,'connection failed');this._close();}
_onOpen(){this._socket.onerror=console.error;this._connected=true;for(const message of this._messages){this._socket.send(message);}
this._messages=[];}
_onClose(){this._onWebSocketDisconnect.call(null);this._onDisconnect.call(null,'websocket closed');this._close();}
_close(callback){this._socket.onerror=null;this._socket.onopen=null;this._socket.onclose=callback||null;this._socket.onmessage=null;this._socket.close();this._socket=null;this._onWebSocketDisconnect=null;}
sendRawMessage(message){if(this._connected){this._socket.send(message);}else{this._messages.push(message);}}
disconnect(){let fulfill;const promise=new Promise(f=>fulfill=f);this._close(()=>{if(this._onDisconnect){this._onDisconnect.call(null,'force disconnect');}
fulfill();});return promise;}}
export class StubConnection{constructor(){this._onMessage=null;this._onDisconnect=null;}
setOnMessage(onMessage){this._onMessage=onMessage;}
setOnDisconnect(onDisconnect){this._onDisconnect=onDisconnect;}
sendRawMessage(message){setTimeout(this._respondWithError.bind(this,message),0);}
_respondWithError(message){const messageObject=JSON.parse(message);const error={message:'This is a stub connection, can\'t dispatch message.',code:Protocol.DevToolsStubErrorCode,data:messageObject};if(this._onMessage){this._onMessage.call(null,{id:messageObject.id,error:error});}}
disconnect(){if(this._onDisconnect){this._onDisconnect.call(null,'force disconnect');}
this._onDisconnect=null;this._onMessage=null;return Promise.resolve();}}
export class ParallelConnection{constructor(connection,sessionId){this._connection=connection;this._sessionId=sessionId;this._onMessage=null;this._onDisconnect=null;}
setOnMessage(onMessage){this._onMessage=onMessage;}
setOnDisconnect(onDisconnect){this._onDisconnect=onDisconnect;}
sendRawMessage(message){const messageObject=JSON.parse(message);if(!messageObject.sessionId){messageObject.sessionId=this._sessionId;}
this._connection.sendRawMessage(JSON.stringify(messageObject));}
disconnect(){if(this._onDisconnect){this._onDisconnect.call(null,'force disconnect');}
this._onDisconnect=null;this._onMessage=null;return Promise.resolve();}}
export async function initMainConnection(createMainTarget,websocketConnectionLost){Protocol.Connection.setFactory(_createMainConnection.bind(null,websocketConnectionLost));await createMainTarget();Host.InspectorFrontendHost.connectionReady();Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.ReattachMainTarget,()=>{SDK.targetManager.mainTarget().router().connection().disconnect();createMainTarget();});return Promise.resolve();}
export function _createMainConnection(websocketConnectionLost){const wsParam=Root.Runtime.queryParam('ws');const wssParam=Root.Runtime.queryParam('wss');if(wsParam||wssParam){const ws=wsParam?`ws://${wsParam}`:`wss://${wssParam}`;return new WebSocketConnection(ws,websocketConnectionLost);}else if(Host.InspectorFrontendHost.isHostedMode()){return new StubConnection();}
return new MainConnection();}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.MainConnection=MainConnection;SDK.WebSocketConnection=WebSocketConnection;SDK.StubConnection=StubConnection;SDK.ParallelConnection=ParallelConnection;SDK.initMainConnection=initMainConnection;SDK._createMainConnection=_createMainConnection;let _lastAnonymousTargetId=0;export default class ChildTargetManager extends SDK.SDKModel{constructor(parentTarget){super(parentTarget);this._targetManager=parentTarget.targetManager();this._parentTarget=parentTarget;this._targetAgent=parentTarget.targetAgent();this._targetInfos=new Map();this._childTargets=new Map();this._parallelConnections=new Map();this._parentTargetId=null;parentTarget.registerTargetDispatcher(this);this._targetAgent.invoke_setAutoAttach({autoAttach:true,waitForDebuggerOnStart:true,flatten:true});if(!parentTarget.parentTarget()&&!Host.isUnderTest()){this._targetAgent.setDiscoverTargets(true);this._targetAgent.setRemoteLocations([{host:'localhost',port:9229}]);}}
static install(attachCallback){SDK.ChildTargetManager._attachCallback=attachCallback;SDK.SDKModel.register(SDK.ChildTargetManager,SDK.Target.Capability.Target,true);}
suspendModel(){return this._targetAgent.invoke_setAutoAttach({autoAttach:true,waitForDebuggerOnStart:false,flatten:true});}
resumeModel(){return this._targetAgent.invoke_setAutoAttach({autoAttach:true,waitForDebuggerOnStart:true,flatten:true});}
dispose(){for(const sessionId of this._childTargets.keys()){this.detachedFromTarget(sessionId,undefined);}}
targetCreated(targetInfo){this._targetInfos.set(targetInfo.targetId,targetInfo);this._fireAvailableTargetsChanged();}
targetInfoChanged(targetInfo){this._targetInfos.set(targetInfo.targetId,targetInfo);this._fireAvailableTargetsChanged();}
targetDestroyed(targetId){this._targetInfos.delete(targetId);this._fireAvailableTargetsChanged();}
targetCrashed(targetId,status,errorCode){}
_fireAvailableTargetsChanged(){SDK.targetManager.dispatchEventToListeners(SDK.TargetManager.Events.AvailableTargetsChanged,this._targetInfos.valuesArray());}
async _getParentTargetId(){if(!this._parentTargetId){this._parentTargetId=(await this._parentTarget.targetAgent().getTargetInfo()).targetId;}
return this._parentTargetId;}
attachedToTarget(sessionId,targetInfo,waitingForDebugger){if(this._parentTargetId===targetInfo.targetId){return;}
let targetName='';if(targetInfo.type==='worker'&&targetInfo.title&&targetInfo.title!==targetInfo.url){targetName=targetInfo.title;}else if(targetInfo.type!=='iframe'){const parsedURL=targetInfo.url.asParsedURL();targetName=parsedURL?parsedURL.lastPathComponentWithFragment():'#'+(++_lastAnonymousTargetId);}
let type=SDK.Target.Type.Browser;if(targetInfo.type==='iframe'){type=SDK.Target.Type.Frame;}
else if(targetInfo.type==='page'){type=SDK.Target.Type.Frame;}else if(targetInfo.type==='worker'){type=SDK.Target.Type.Worker;}else if(targetInfo.type==='service_worker'){type=SDK.Target.Type.ServiceWorker;}
const target=this._targetManager.createTarget(targetInfo.targetId,targetName,type,this._parentTarget,sessionId);this._childTargets.set(sessionId,target);if(SDK.ChildTargetManager._attachCallback){SDK.ChildTargetManager._attachCallback({target,waitingForDebugger}).then(()=>{target.runtimeAgent().runIfWaitingForDebugger();});}else{target.runtimeAgent().runIfWaitingForDebugger();}}
detachedFromTarget(sessionId,childTargetId){if(this._parallelConnections.has(sessionId)){this._parallelConnections.delete(sessionId);}else{this._childTargets.get(sessionId).dispose('target terminated');this._childTargets.delete(sessionId);}}
receivedMessageFromTarget(sessionId,message,childTargetId){}
async createParallelConnection(onMessage){const targetId=await this._getParentTargetId();const{connection,sessionId}=await this._createParallelConnectionAndSessionForTarget(this._parentTarget,targetId);connection.setOnMessage(onMessage);this._parallelConnections.set(sessionId,connection);return connection;}
async _createParallelConnectionAndSessionForTarget(target,targetId){const targetAgent=target.targetAgent();const targetRouter=target.router();const sessionId=(await targetAgent.attachToTarget(targetId,true));const connection=new SDK.ParallelConnection(targetRouter.connection(),sessionId);targetRouter.registerSession(target,sessionId,connection);connection.setOnDisconnect(()=>{targetAgent.detachFromTarget(sessionId);targetRouter.unregisterSession(sessionId);});return{connection,sessionId};}}
self.SDK=self.SDK||{};SDK=SDK||{};SDK.ChildTargetManager=ChildTargetManager;SDK.ChildTargetManager._attachCallback;(function(){const __exports={};let wasm;let cachegetUint8Memory=null;function getUint8Memory(){if(cachegetUint8Memory===null||cachegetUint8Memory.buffer!==wasm.memory.buffer){cachegetUint8Memory=new Uint8Array(wasm.memory.buffer);}
return cachegetUint8Memory;}
let WASM_VECTOR_LEN=0;function passArray8ToWasm(arg){const ptr=wasm.__wbindgen_malloc(arg.length*1);getUint8Memory().set(arg,ptr/1);WASM_VECTOR_LEN=arg.length;return ptr;}
const heap=new Array(32);heap.fill(undefined);heap.push(undefined,null,true,false);function getObject(idx){return heap[idx];}
let heap_next=heap.length;function dropObject(idx){if(idx<36)return;heap[idx]=heap_next;heap_next=idx;}
function takeObject(idx){const ret=getObject(idx);dropObject(idx);return ret;}
let cachedTextEncoder=new TextEncoder('utf-8');const encodeString=(typeof cachedTextEncoder.encodeInto==='function'?function(arg,view){return cachedTextEncoder.encodeInto(arg,view);}:function(arg,view){const buf=cachedTextEncoder.encode(arg);view.set(buf);return{read:arg.length,written:buf.length};});function passStringToWasm(arg){let len=arg.length;let ptr=wasm.__wbindgen_malloc(len);const mem=getUint8Memory();let offset=0;for(;offset<len;offset++){const code=arg.charCodeAt(offset);if(code>0x7F)break;mem[ptr+offset]=code;}
if(offset!==len){if(offset!==0){arg=arg.slice(offset);}
ptr=wasm.__wbindgen_realloc(ptr,len,len=offset+arg.length*3);const view=getUint8Memory().subarray(ptr+offset,ptr+len);const ret=encodeString(arg,view);offset+=ret.written;}
WASM_VECTOR_LEN=offset;return ptr;}
function addHeapObject(obj){if(heap_next===heap.length)heap.push(heap.length+1);const idx=heap_next;heap_next=heap[idx];heap[idx]=obj;return idx;}
let cachedTextDecoder=new TextDecoder('utf-8',{ignoreBOM:true,fatal:true});function getStringFromWasm(ptr,len){return cachedTextDecoder.decode(getUint8Memory().subarray(ptr,ptr+len));}
class Resolver{static __wrap(ptr){const obj=Object.create(Resolver.prototype);obj.ptr=ptr;return obj;}
free(){const ptr=this.ptr;this.ptr=0;wasm.__wbg_resolver_free(ptr);}
constructor(src){const ret=wasm.resolver_from_slice(passArray8ToWasm(src),WASM_VECTOR_LEN);return Resolver.__wrap(ret);}
listFiles(){const ret=wasm.resolver_listFiles(this.ptr);return takeObject(ret);}
listMappings(){const ret=wasm.resolver_listMappings(this.ptr);return takeObject(ret);}
resolve(addr){const ret=wasm.resolver_resolve(this.ptr,addr);return takeObject(ret);}
resolveReverse(file,line,column){const ret=wasm.resolver_resolveReverse(this.ptr,passStringToWasm(file),WASM_VECTOR_LEN,line,column);return takeObject(ret);}}
__exports.Resolver=Resolver;function init(module){let result;const imports={};imports.wbg={};imports.wbg.__wbindgen_object_drop_ref=function(arg0){takeObject(arg0);};imports.wbg.__wbg_new_8e4c496df8c98a76=function(arg0,arg1,arg2,arg3,arg4){const ret=new SDK.SourceMapEntry(arg0>>>0,arg1>>>0,getObject(arg2),arg3>>>0,arg4>>>0);return addHeapObject(ret);};imports.wbg.__wbindgen_object_clone_ref=function(arg0){const ret=getObject(arg0);return addHeapObject(ret);};imports.wbg.__wbindgen_string_new=function(arg0,arg1){const ret=getStringFromWasm(arg0,arg1);return addHeapObject(ret);};imports.wbg.__wbg_new_951e889c56bc7e3c=function(){const ret=new Array();return addHeapObject(ret);};imports.wbg.__wbg_push_36cde80dfc256d1d=function(arg0,arg1){const ret=getObject(arg0).push(getObject(arg1));return ret;};imports.wbg.__wbg_new_4d5ae649984849e5=function(arg0,arg1){const ret=new Error(getStringFromWasm(arg0,arg1));return addHeapObject(ret);};imports.wbg.__wbindgen_throw=function(arg0,arg1){throw new Error(getStringFromWasm(arg0,arg1));};imports.wbg.__wbindgen_rethrow=function(arg0){throw takeObject(arg0);};if((typeof URL==='function'&&module instanceof URL)||typeof module==='string'||(typeof Request==='function'&&module instanceof Request)){const response=fetch(module);if(typeof WebAssembly.instantiateStreaming==='function'){result=WebAssembly.instantiateStreaming(response,imports).catch(e=>{return response.then(r=>{if(r.headers.get('Content-Type')!='application/wasm'){console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",e);return r.arrayBuffer();}else{throw e;}}).then(bytes=>WebAssembly.instantiate(bytes,imports));});}else{result=response.then(r=>r.arrayBuffer()).then(bytes=>WebAssembly.instantiate(bytes,imports));}}else{result=WebAssembly.instantiate(module,imports).then(result=>{if(result instanceof WebAssembly.Instance){return{instance:result,module};}else{return result;}});}
return result.then(({instance,module})=>{wasm=instance.exports;init.__wbindgen_wasm_module=module;return wasm;});}
self.wasm_bindgen=Object.assign(init,__exports);})();import'./InspectorBackend.js';import'./NodeURL.js';import'../InspectorBackendCommands.js';import*as InspectorBackend from'./InspectorBackend.js';import*as NodeURL from'./NodeURL.js';export{InspectorBackend,NodeURL,};export default class NodeURL{static patch(object){process(object,'');function process(object,path){if(object.url&&NodeURL._isPlatformPath(object.url,Host.isWin())){object.url=Common.ParsedURL.platformPathToURL(object.url);}
for(const entry of Object.entries(object)){const key=entry[0];const value=entry[1];const entryPath=path+'.'+key;if(entryPath!=='.result.result.value'&&value!==null&&typeof value==='object'){process(value,entryPath);}}}}
static _isPlatformPath(fileSystemPath,isWindows){if(isWindows){const re=/^([a-z]:[\/\\]|\\\\)/i;return re.test(fileSystemPath);}else{return fileSystemPath.length?fileSystemPath[0]==='/':false;}}}
self.Protocol=self.Protocol||{};Protocol=Protocol||{};Protocol.NodeURL=NodeURL;export const ProtocolError=Symbol('Protocol.Error');export const DevToolsStubErrorCode=-32015;const _GenericError=-32000;const _ConnectionClosedErrorCode=-32001;export default class InspectorBackend{constructor(){this._agentPrototypes=new Map();this._dispatcherPrototypes=new Map();this._initialized=false;}
static reportProtocolError(error,messageObject){console.error(error+': '+JSON.stringify(messageObject));}
isInitialized(){return this._initialized;}
_addAgentGetterMethodToProtocolTargetPrototype(domain){let upperCaseLength=0;while(upperCaseLength<domain.length&&domain[upperCaseLength].toLowerCase()!==domain[upperCaseLength]){++upperCaseLength;}
const methodName=domain.substr(0,upperCaseLength).toLowerCase()+domain.slice(upperCaseLength)+'Agent';function agentGetter(){return this._agents[domain];}
TargetBase.prototype[methodName]=agentGetter;function registerDispatcher(dispatcher){this.registerDispatcher(domain,dispatcher);}
TargetBase.prototype['register'+domain+'Dispatcher']=registerDispatcher;}
_agentPrototype(domain){if(!this._agentPrototypes.has(domain)){this._agentPrototypes.set(domain,new _AgentPrototype(domain));this._addAgentGetterMethodToProtocolTargetPrototype(domain);}
return this._agentPrototypes.get(domain);}
_dispatcherPrototype(domain){if(!this._dispatcherPrototypes.has(domain)){this._dispatcherPrototypes.set(domain,new _DispatcherPrototype());}
return this._dispatcherPrototypes.get(domain);}
registerCommand(method,signature,replyArgs,hasErrorData){const domainAndMethod=method.split('.');this._agentPrototype(domainAndMethod[0]).registerCommand(domainAndMethod[1],signature,replyArgs,hasErrorData);this._initialized=true;}
registerEnum(type,values){const domainAndName=type.split('.');const domain=domainAndName[0];if(!Protocol[domain]){Protocol[domain]={};}
Protocol[domain][domainAndName[1]]=values;this._initialized=true;}
registerEvent(eventName,params){const domain=eventName.split('.')[0];this._dispatcherPrototype(domain).registerEvent(eventName,params);this._initialized=true;}
wrapClientCallback(clientCallback,errorPrefix,constructor,defaultValue){function callbackWrapper(error,value){if(error){console.error(errorPrefix+error);clientCallback(defaultValue);return;}
if(constructor){clientCallback(new constructor(value));}else{clientCallback(value);}}
return callbackWrapper;}}
let _factory;export class Connection{constructor(){this._onMessage;}
setOnMessage(onMessage){}
setOnDisconnect(onDisconnect){}
sendRawMessage(message){}
disconnect(){}
static setFactory(factory){_factory=factory;}
static getFactory(){return _factory;}}
const test={dumpProtocol:null,deprecatedRunAfterPendingDispatches:null,sendRawMessage:null,suppressRequestErrors:false,onMessageSent:null,onMessageReceived:null,};class SessionRouter{constructor(connection){this._connection=connection;this._lastMessageId=1;this._pendingResponsesCount=0;this._domainToLogger=new Map();this._sessions=new Map();this._pendingScripts=[];test.deprecatedRunAfterPendingDispatches=this._deprecatedRunAfterPendingDispatches.bind(this);test.sendRawMessage=this._sendRawMessageForTesting.bind(this);this._connection.setOnMessage(this._onMessage.bind(this));this._connection.setOnDisconnect(reason=>{const session=this._sessions.get('');if(session){session.target.dispose(reason);}});}
registerSession(target,sessionId,proxyConnection){if(proxyConnection){for(const session of this._sessions.values()){if(session.proxyConnection){console.error('Multiple simultaneous proxy connections are currently unsupported');break;}}}
this._sessions.set(sessionId,{target,callbacks:new Map(),proxyConnection});}
unregisterSession(sessionId){const session=this._sessions.get(sessionId);for(const callback of session.callbacks.values()){SessionRouter.dispatchConnectionError(callback);}
this._sessions.delete(sessionId);}
_getTargetBySessionId(sessionId){const session=this._sessions.get(sessionId?sessionId:'');if(!session){return null;}
return session.target;}
_nextMessageId(){return this._lastMessageId++;}
connection(){return this._connection;}
sendMessage(sessionId,domain,method,params,callback){const messageObject={};const messageId=this._nextMessageId();messageObject.id=messageId;messageObject.method=method;if(params){messageObject.params=params;}
if(sessionId){messageObject.sessionId=sessionId;}
if(test.dumpProtocol){test.dumpProtocol('frontend: '+JSON.stringify(messageObject));}
if(test.onMessageSent){const paramsObject=JSON.parse(JSON.stringify(params||{}));test.onMessageSent({domain,method,params:(paramsObject),id:messageId},this._getTargetBySessionId(sessionId));}
++this._pendingResponsesCount;this._sessions.get(sessionId).callbacks.set(messageId,callback);this._connection.sendRawMessage(JSON.stringify(messageObject));}
_sendRawMessageForTesting(method,params,callback){const domain=method.split('.')[0];this.sendMessage('',domain,method,params,callback||(()=>{}));}
_onMessage(message){if(test.dumpProtocol){test.dumpProtocol('backend: '+((typeof message==='string')?message:JSON.stringify(message)));}
if(test.onMessageReceived){const messageObjectCopy=JSON.parse((typeof message==='string')?message:JSON.stringify(message));test.onMessageReceived((messageObjectCopy),this._getTargetBySessionId(messageObjectCopy.sessionId));}
const messageObject=((typeof message==='string')?JSON.parse(message):message);let suppressUnknownMessageErrors=false;for(const session of this._sessions.values()){if(!session.proxyConnection){continue;}
if(!session.proxyConnection._onMessage){Protocol.InspectorBackend.reportProtocolError('Protocol Error: the session has a proxyConnection with no _onMessage',messageObject);continue;}
session.proxyConnection._onMessage(messageObject);suppressUnknownMessageErrors=true;}
const sessionId=messageObject.sessionId||'';const session=this._sessions.get(sessionId);if(!session){if(!suppressUnknownMessageErrors){Protocol.InspectorBackend.reportProtocolError('Protocol Error: the message with wrong session id',messageObject);}
return;}
if(session.proxyConnection){return;}
if(session.target._needsNodeJSPatching){Protocol.NodeURL.patch(messageObject);}
if('id'in messageObject){const callback=session.callbacks.get(messageObject.id);session.callbacks.delete(messageObject.id);if(!callback){if(!suppressUnknownMessageErrors){Protocol.InspectorBackend.reportProtocolError('Protocol Error: the message with wrong id',messageObject);}
return;}
callback(messageObject.error,messageObject.result);--this._pendingResponsesCount;if(this._pendingScripts.length&&!this._pendingResponsesCount){this._deprecatedRunAfterPendingDispatches();}}else{if(!('method'in messageObject)){Protocol.InspectorBackend.reportProtocolError('Protocol Error: the message without method',messageObject);return;}
const method=messageObject.method.split('.');const domainName=method[0];if(!(domainName in session.target._dispatchers)){Protocol.InspectorBackend.reportProtocolError(`Protocol Error: the message ${messageObject.method} is for non-existing domain '${domainName}'`,messageObject);return;}
session.target._dispatchers[domainName].dispatch(method[1],messageObject);}}
_deprecatedRunAfterPendingDispatches(script){if(script){this._pendingScripts.push(script);}
setTimeout(()=>{if(!this._pendingResponsesCount){this._executeAfterPendingDispatches();}else{this._deprecatedRunAfterPendingDispatches();}},0);}
_executeAfterPendingDispatches(){if(!this._pendingResponsesCount){const scripts=this._pendingScripts;this._pendingScripts=[];for(let id=0;id<scripts.length;++id){scripts[id]();}}}
static dispatchConnectionError(callback){const error={message:'Connection is closed, can\'t dispatch pending call',code:_ConnectionClosedErrorCode,data:null};setTimeout(()=>callback(error,null),0);}}
export class TargetBase{constructor(needsNodeJSPatching,parentTarget,sessionId,connection){this._needsNodeJSPatching=needsNodeJSPatching;this._sessionId=sessionId;if((!parentTarget&&connection)||(!parentTarget&&sessionId)||(connection&&sessionId)){throw new Error('Either connection or sessionId (but not both) must be supplied for a child target');}
if(sessionId){this._router=parentTarget._router;}else if(connection){this._router=new SessionRouter(connection);}else{this._router=new SessionRouter(_factory());}
this._router.registerSession(this,this._sessionId);this._agents={};for(const[domain,agentPrototype]of Protocol.inspectorBackend._agentPrototypes){this._agents[domain]=Object.create((agentPrototype));this._agents[domain]._target=this;}
this._dispatchers={};for(const[domain,dispatcherPrototype]of Protocol.inspectorBackend._dispatcherPrototypes){this._dispatchers[domain]=Object.create((dispatcherPrototype));this._dispatchers[domain]._dispatchers=[];}}
registerDispatcher(domain,dispatcher){if(!this._dispatchers[domain]){return;}
this._dispatchers[domain].addDomainDispatcher(dispatcher);}
dispose(reason){this._router.unregisterSession(this._sessionId);this._router=null;}
isDisposed(){return!this._router;}
markAsNodeJSForTest(){this._needsNodeJSPatching=true;}
router(){return this._router;}}
class _AgentPrototype{constructor(domain){this._replyArgs={};this._hasErrorData={};this._domain=domain;}
registerCommand(methodName,signature,replyArgs,hasErrorData){const domainAndMethod=this._domain+'.'+methodName;function sendMessagePromise(vararg){const params=Array.prototype.slice.call(arguments);return _AgentPrototype.prototype._sendMessageToBackendPromise.call(this,domainAndMethod,signature,params);}
this[methodName]=sendMessagePromise;function invoke(request){return this._invoke(domainAndMethod,request);}
this['invoke_'+methodName]=invoke;this._replyArgs[domainAndMethod]=replyArgs;if(hasErrorData){this._hasErrorData[domainAndMethod]=true;}}
_prepareParameters(method,signature,args,errorCallback){const params={};let hasParams=false;for(const param of signature){const paramName=param['name'];const typeName=param['type'];const optionalFlag=param['optional'];if(!args.length&&!optionalFlag){errorCallback(`Protocol Error: Invalid number of arguments for method '${method}' call. `+`It must have the following arguments ${JSON.stringify(signature)}'.`);return null;}
const value=args.shift();if(optionalFlag&&typeof value==='undefined'){continue;}
if(typeof value!==typeName){errorCallback(`Protocol Error: Invalid type of argument '${paramName}' for method '${method}' call. `+`It must be '${typeName}' but it is '${typeof value}'.`);return null;}
params[paramName]=value;hasParams=true;}
if(args.length){errorCallback(`Protocol Error: Extra ${args.length} arguments in a call to method '${method}'.`);return null;}
return hasParams?params:null;}
_sendMessageToBackendPromise(method,signature,args){let errorMessage;function onError(message){console.error(message);errorMessage=message;}
const params=this._prepareParameters(method,signature,args,onError);if(errorMessage){return Promise.resolve(null);}
return new Promise((resolve,reject)=>{const callback=(error,result)=>{if(error){if(!test.suppressRequestErrors&&error.code!==Protocol.DevToolsStubErrorCode&&error.code!==_GenericError&&error.code!==_ConnectionClosedErrorCode){console.error('Request '+method+' failed. '+JSON.stringify(error));reject(error);}else{resolve(null);}
return;}
const args=this._replyArgs[method];resolve(result&&args.length?result[args[0]]:undefined);};if(!this._target._router){SessionRouter.dispatchConnectionError(callback);}else{this._target._router.sendMessage(this._target._sessionId,this._domain,method,params,callback);}});}
_invoke(method,request){return new Promise(fulfill=>{const callback=(error,result)=>{if(error&&!test.suppressRequestErrors&&error.code!==Protocol.DevToolsStubErrorCode&&error.code!==_GenericError&&error.code!==_ConnectionClosedErrorCode){console.error('Request '+method+' failed. '+JSON.stringify(error));}
if(!result){result={};}
if(error){result[Protocol.Error]=error.message;}
fulfill(result);};if(!this._target._router){SessionRouter.dispatchConnectionError(callback);}else{this._target._router.sendMessage(this._target._sessionId,this._domain,method,request,callback);}});}}
class _DispatcherPrototype{constructor(){this._eventArgs={};}
registerEvent(eventName,params){this._eventArgs[eventName]=params;}
addDomainDispatcher(dispatcher){this._dispatchers.push(dispatcher);}
dispatch(functionName,messageObject){if(!this._dispatchers.length){return;}
if(!this._eventArgs[messageObject.method]){Protocol.InspectorBackend.reportProtocolError(`Protocol Error: Attempted to dispatch an unspecified method '${messageObject.method}'`,messageObject);return;}
const params=[];if(messageObject.params){const paramNames=this._eventArgs[messageObject.method];for(let i=0;i<paramNames.length;++i){params.push(messageObject.params[paramNames[i]]);}}
for(let index=0;index<this._dispatchers.length;++index){const dispatcher=this._dispatchers[index];if(functionName in dispatcher){dispatcher[functionName].apply(dispatcher,params);}}}}
self.Protocol=self.Protocol||{};Protocol=Protocol||{};Protocol.DevToolsStubErrorCode=DevToolsStubErrorCode;Protocol.SessionRouter=SessionRouter;Protocol.InspectorBackend=InspectorBackend;Protocol.Connection=Connection;Protocol.inspectorBackend=new InspectorBackend();Protocol.test=test;Protocol.TargetBase=TargetBase;Protocol._Callback;Protocol.Error=ProtocolError;import'./InspectorFrontendHostAPI.js';import'./InspectorFrontendHost.js';import'./ResourceLoader.js';import'./UserMetrics.js';import'./Platform.js';import*as InspectorFrontendHost from'./InspectorFrontendHost.js';import*as Platform from'./Platform.js';import*as ResourceLoader from'./ResourceLoader.js';import*as UserMetrics from'./UserMetrics.js';export{InspectorFrontendHost,Platform,ResourceLoader,UserMetrics,};export default class UserMetrics{panelShown(panelName){const code=_PanelCodes[panelName]||0;const size=Object.keys(_PanelCodes).length+1;Host.InspectorFrontendHost.recordEnumeratedHistogram('DevTools.PanelShown',code,size);this._panelChangedSinceLaunch=true;}
drawerShown(drawerId){this.panelShown('drawer-'+drawerId);}
actionTaken(action){const size=Object.keys(Action).length+1;Host.InspectorFrontendHost.recordEnumeratedHistogram('DevTools.ActionTaken',action,size);}
panelLoaded(panelName,histogramName){if(this._firedLaunchHistogram||panelName!==this._launchPanelName){return;}
this._firedLaunchHistogram=true;requestAnimationFrame(()=>{setTimeout(()=>{performance.mark(histogramName);if(this._panelChangedSinceLaunch){return;}
Host.InspectorFrontendHost.recordPerformanceHistogram(histogramName,performance.now());},0);});}
setLaunchPanel(panelName){this._launchPanelName=panelName;}}
export const Action={WindowDocked:1,WindowUndocked:2,ScriptsBreakpointSet:3,TimelineStarted:4,ProfilesCPUProfileTaken:5,ProfilesHeapProfileTaken:6,'LegacyAuditsStarted-deprecated':7,ConsoleEvaluated:8,FileSavedInWorkspace:9,DeviceModeEnabled:10,AnimationsPlaybackRateChanged:11,RevisionApplied:12,FileSystemDirectoryContentReceived:13,StyleRuleEdited:14,CommandEvaluatedInConsolePanel:15,DOMPropertiesExpanded:16,ResizedViewInResponsiveMode:17,TimelinePageReloadStarted:18,ConnectToNodeJSFromFrontend:19,ConnectToNodeJSDirectly:20,CpuThrottlingEnabled:21,CpuProfileNodeFocused:22,CpuProfileNodeExcluded:23,SelectFileFromFilePicker:24,SelectCommandFromCommandMenu:25,ChangeInspectedNodeInElementsPanel:26,StyleRuleCopied:27,CoverageStarted:28,AuditsStarted:29,AuditsFinished:30,ShowedThirdPartyBadges:31,AuditsViewTrace:32,FilmStripStartedRecording:33,CoverageReportFiltered:34,CoverageStartedPerBlock:35,};export const _PanelCodes={elements:1,resources:2,network:3,sources:4,timeline:5,heap_profiler:6,'legacy-audits-deprecated':7,console:8,layers:9,'drawer-console-view':10,'drawer-animations':11,'drawer-network.config':12,'drawer-rendering':13,'drawer-sensors':14,'drawer-sources.search':15,security:16,js_profiler:17,audits:18,'drawer-coverage':19,'drawer-protocol-monitor':20,'drawer-remote-devices':21,'drawer-web-audio':22,'drawer-changes.changes':23,'drawer-performance.monitor':24,'drawer-release-note':25,'drawer-live_heap_profile':26,'drawer-sources.quick':27,'drawer-network.blocked-urls':28,};self.Host=self.Host||{};Host=Host||{};Host.UserMetrics=UserMetrics;Host.UserMetrics.Action=Action;Host.UserMetrics._PanelCodes=_PanelCodes;Host.userMetrics=new UserMetrics();const ResourceLoader={};export default ResourceLoader;let _lastStreamId=0;const _boundStreams={};const _bindOutputStream=function(stream){_boundStreams[++_lastStreamId]=stream;return _lastStreamId;};const _discardOutputStream=function(id){_boundStreams[id].close();delete _boundStreams[id];};export const streamWrite=function(id,chunk){_boundStreams[id].write(chunk);};export function load(url,headers,callback){const stream=new Common.StringOutputStream();loadAsStream(url,headers,stream,mycallback);function mycallback(statusCode,headers){callback(statusCode,headers,stream.data());}}
export const loadAsStream=function(url,headers,stream,callback){const streamId=_bindOutputStream(stream);const parsedURL=new Common.ParsedURL(url);if(parsedURL.isDataURL()){loadXHR(url).then(dataURLDecodeSuccessful).catch(dataURLDecodeFailed);return;}
const rawHeaders=[];if(headers){for(const key in headers){rawHeaders.push(key+': '+headers[key]);}}
Host.InspectorFrontendHost.loadNetworkResource(url,rawHeaders.join('\r\n'),streamId,finishedCallback);function finishedCallback(response){if(callback){callback(response.statusCode,response.headers||{});}
_discardOutputStream(streamId);}
function dataURLDecodeSuccessful(text){streamWrite(streamId,text);finishedCallback(({statusCode:200}));}
function dataURLDecodeFailed(){finishedCallback(({statusCode:404}));}};self.Host=self.Host||{};Host=Host||{};Host.ResourceLoader=ResourceLoader;Host.ResourceLoader.streamWrite=streamWrite;Host.ResourceLoader.load=load;Host.ResourceLoader.loadAsStream=loadAsStream;let _platform;export function platform(){if(!_platform){_platform=Host.InspectorFrontendHost.platform();}
return _platform;}
let _isMac;export function isMac(){if(typeof _isMac==='undefined'){_isMac=platform()==='mac';}
return _isMac;}
let _isWin;export function isWin(){if(typeof _isWin==='undefined'){_isWin=platform()==='windows';}
return _isWin;}
let _isCustomDevtoolsFrontend;export function isCustomDevtoolsFrontend(){if(typeof _isCustomDevtoolsFrontend==='undefined'){_isCustomDevtoolsFrontend=window.location.toString().startsWith('devtools://devtools/custom/');}
return _isCustomDevtoolsFrontend;}
let _fontFamily;export function fontFamily(){if(_fontFamily){return _fontFamily;}
switch(platform()){case'linux':_fontFamily='Roboto, Ubuntu, Arial, sans-serif';break;case'mac':_fontFamily='\'Lucida Grande\', sans-serif';break;case'windows':_fontFamily='\'Segoe UI\', Tahoma, sans-serif';break;}
return _fontFamily;}
self.Host=self.Host||{};Host=Host||{};Host.platform=platform;Host.isWin=isWin;Host.isMac=isMac;Host.isCustomDevtoolsFrontend=isCustomDevtoolsFrontend;Host.fontFamily=fontFamily;class InspectorFrontendHostStub{constructor(){function stopEventPropagation(event){const zoomModifier=this.platform()==='mac'?event.metaKey:event.ctrlKey;if(zoomModifier&&(event.keyCode===187||event.keyCode===189)){event.stopPropagation();}}
document.addEventListener('keydown',stopEventPropagation.bind(this),true);this._urlsBeingSaved=new Map();this.events;}
platform(){let match=navigator.userAgent.match(/Windows NT/);if(match){return'windows';}
match=navigator.userAgent.match(/Mac OS X/);if(match){return'mac';}
return'linux';}
loadCompleted(){}
bringToFront(){this._windowVisible=true;}
closeWindow(){this._windowVisible=false;}
setIsDocked(isDocked,callback){setTimeout(callback,0);}
setInspectedPageBounds(bounds){}
inspectElementCompleted(){}
setInjectedScriptForOrigin(origin,script){}
inspectedURLChanged(url){document.title=Common.UIString('DevTools - %s',url.replace(/^https?:\/\//,''));}
copyText(text){if(text===undefined||text===null){return;}
if(navigator.clipboard){navigator.clipboard.writeText(text);}else if(document.queryCommandSupported('copy')){const input=document.createElement('input');input.value=text;document.body.appendChild(input);input.select();document.execCommand('copy');document.body.removeChild(input);}else{Common.console.error('Clipboard is not enabled in hosted mode. Please inspect using chrome://inspect');}}
openInNewTab(url){window.open(url,'_blank');}
showItemInFolder(fileSystemPath){Common.console.error('Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect');}
save(url,content,forceSaveAs){let buffer=this._urlsBeingSaved.get(url);if(!buffer){buffer=[];this._urlsBeingSaved.set(url,buffer);}
buffer.push(content);this.events.dispatchEventToListeners(Host.InspectorFrontendHostAPI.Events.SavedURL,{url,fileSystemPath:url});}
append(url,content){const buffer=this._urlsBeingSaved.get(url);buffer.push(content);this.events.dispatchEventToListeners(Host.InspectorFrontendHostAPI.Events.AppendedToURL,url);}
close(url){const buffer=this._urlsBeingSaved.get(url);this._urlsBeingSaved.delete(url);const fileName=url?url.trimURL().removeURLFragment():'';const link=createElement('a');link.download=fileName;const blob=new Blob([buffer.join('')],{type:'text/plain'});link.href=URL.createObjectURL(blob);link.click();}
sendMessageToBackend(message){}
recordEnumeratedHistogram(actionName,actionCode,bucketSize){}
recordPerformanceHistogram(histogramName,duration){}
recordUserMetricsAction(umaName){}
requestFileSystems(){this.events.dispatchEventToListeners(Host.InspectorFrontendHostAPI.Events.FileSystemsLoaded,[]);}
addFileSystem(type){}
removeFileSystem(fileSystemPath){}
isolatedFileSystem(fileSystemId,registeredName){return null;}
loadNetworkResource(url,headers,streamId,callback){Root.Runtime.loadResourcePromise(url).then(function(text){Host.ResourceLoader.streamWrite(streamId,text);callback({statusCode:200});}).catch(function(){callback({statusCode:404});});}
getPreferences(callback){const prefs={};for(const name in window.localStorage){prefs[name]=window.localStorage[name];}
callback(prefs);}
setPreference(name,value){window.localStorage[name]=value;}
removePreference(name){delete window.localStorage[name];}
clearPreferences(){window.localStorage.clear();}
upgradeDraggedFileSystemPermissions(fileSystem){}
indexPath(requestId,fileSystemPath,excludedFolders){}
stopIndexing(requestId){}
searchInPath(requestId,fileSystemPath,query){}
zoomFactor(){return 1;}
zoomIn(){}
zoomOut(){}
resetZoom(){}
setWhitelistedShortcuts(shortcuts){}
setEyeDropperActive(active){}
showCertificateViewer(certChain){}
reattach(callback){}
readyForTest(){}
connectionReady(){}
setOpenNewWindowForPopups(value){}
setDevicesDiscoveryConfig(config){}
setDevicesUpdatesEnabled(enabled){}
performActionOnRemotePage(pageId,action){}
openRemotePage(browserId,url){}
openNodeFrontend(){}
showContextMenuAtPoint(x,y,items,document){throw'Soft context menu should be used';}
isHostedMode(){return true;}
setAddExtensionCallback(callback){}}
let _InspectorFrontendHost=window.InspectorFrontendHost;class InspectorFrontendAPIImpl{constructor(){this._debugFrontend=!!Root.Runtime.queryParam('debugFrontend')||(window['InspectorTest']&&window['InspectorTest']['debugTest']);const descriptors=Host.InspectorFrontendHostAPI.EventDescriptors;for(let i=0;i<descriptors.length;++i){this[descriptors[i][1]]=this._dispatch.bind(this,descriptors[i][0],descriptors[i][2],descriptors[i][3]);}}
_dispatch(name,signature,runOnceLoaded){const params=Array.prototype.slice.call(arguments,3);if(this._debugFrontend){setImmediate(innerDispatch);}else{innerDispatch();}
function innerDispatch(){if(signature.length<2){try{_InspectorFrontendHost.events.dispatchEventToListeners(name,params[0]);}catch(e){console.error(e+' '+e.stack);}
return;}
const data={};for(let i=0;i<signature.length;++i){data[signature[i]]=params[i];}
try{_InspectorFrontendHost.events.dispatchEventToListeners(name,data);}catch(e){console.error(e+' '+e.stack);}}}
streamWrite(id,chunk){Host.ResourceLoader.streamWrite(id,chunk);}}
(function(){function initializeInspectorFrontendHost(){let proto;if(!_InspectorFrontendHost){window.InspectorFrontendHost=_InspectorFrontendHost=new InspectorFrontendHostStub();}else{proto=InspectorFrontendHostStub.prototype;for(const name of Object.getOwnPropertyNames(proto)){const stub=proto[name];if(typeof stub!=='function'||_InspectorFrontendHost[name]){continue;}
console.error('Incompatible embedder: method Host.InspectorFrontendHost.'+name+' is missing. Using stub instead.');_InspectorFrontendHost[name]=stub;}}
_InspectorFrontendHost.events=new Common.Object();}
initializeInspectorFrontendHost();window.InspectorFrontendAPI=new InspectorFrontendAPIImpl();})();export function isUnderTest(prefs){if(Root.Runtime.queryParam('test')){return true;}
if(prefs){return prefs['isUnderTest']==='true';}
return Common.settings&&Common.settings.createSetting('isUnderTest',false).get();}
self.Host=self.Host||{};Host=Host||{};Host.InspectorFrontendHost=_InspectorFrontendHost;Host.isUnderTest=isUnderTest;export const Events={AppendedToURL:Symbol('appendedToURL'),CanceledSaveURL:Symbol('canceledSaveURL'),ContextMenuCleared:Symbol('contextMenuCleared'),ContextMenuItemSelected:Symbol('contextMenuItemSelected'),DeviceCountUpdated:Symbol('deviceCountUpdated'),DevicesDiscoveryConfigChanged:Symbol('devicesDiscoveryConfigChanged'),DevicesPortForwardingStatusChanged:Symbol('devicesPortForwardingStatusChanged'),DevicesUpdated:Symbol('devicesUpdated'),DispatchMessage:Symbol('dispatchMessage'),DispatchMessageChunk:Symbol('dispatchMessageChunk'),EnterInspectElementMode:Symbol('enterInspectElementMode'),EyeDropperPickedColor:Symbol('eyeDropperPickedColor'),FileSystemsLoaded:Symbol('fileSystemsLoaded'),FileSystemRemoved:Symbol('fileSystemRemoved'),FileSystemAdded:Symbol('fileSystemAdded'),FileSystemFilesChangedAddedRemoved:Symbol('FileSystemFilesChangedAddedRemoved'),IndexingTotalWorkCalculated:Symbol('indexingTotalWorkCalculated'),IndexingWorked:Symbol('indexingWorked'),IndexingDone:Symbol('indexingDone'),KeyEventUnhandled:Symbol('keyEventUnhandled'),ReattachMainTarget:Symbol('reattachMainTarget'),ReloadInspectedPage:Symbol('reloadInspectedPage'),RevealSourceLine:Symbol('revealSourceLine'),SavedURL:Symbol('savedURL'),SearchCompleted:Symbol('searchCompleted'),SetInspectedTabId:Symbol('setInspectedTabId'),SetUseSoftMenu:Symbol('setUseSoftMenu'),ShowPanel:Symbol('showPanel')};export const EventDescriptors=[[Events.AppendedToURL,'appendedToURL',['url']],[Events.CanceledSaveURL,'canceledSaveURL',['url']],[Events.ContextMenuCleared,'contextMenuCleared',[]],[Events.ContextMenuItemSelected,'contextMenuItemSelected',['id']],[Events.DeviceCountUpdated,'deviceCountUpdated',['count']],[Events.DevicesDiscoveryConfigChanged,'devicesDiscoveryConfigChanged',['config']],[Events.DevicesPortForwardingStatusChanged,'devicesPortForwardingStatusChanged',['status']],[Events.DevicesUpdated,'devicesUpdated',['devices']],[Events.DispatchMessage,'dispatchMessage',['messageObject']],[Events.DispatchMessageChunk,'dispatchMessageChunk',['messageChunk','messageSize']],[Events.EnterInspectElementMode,'enterInspectElementMode',[]],[Events.EyeDropperPickedColor,'eyeDropperPickedColor',['color']],[Events.FileSystemsLoaded,'fileSystemsLoaded',['fileSystems']],[Events.FileSystemRemoved,'fileSystemRemoved',['fileSystemPath']],[Events.FileSystemAdded,'fileSystemAdded',['errorMessage','fileSystem']],[Events.FileSystemFilesChangedAddedRemoved,'fileSystemFilesChangedAddedRemoved',['changed','added','removed']],[Events.IndexingTotalWorkCalculated,'indexingTotalWorkCalculated',['requestId','fileSystemPath','totalWork']],[Events.IndexingWorked,'indexingWorked',['requestId','fileSystemPath','worked']],[Events.IndexingDone,'indexingDone',['requestId','fileSystemPath']],[Events.KeyEventUnhandled,'keyEventUnhandled',['event']],[Events.ReattachMainTarget,'reattachMainTarget',[]],[Events.ReloadInspectedPage,'reloadInspectedPage',['hard']],[Events.RevealSourceLine,'revealSourceLine',['url','lineNumber','columnNumber']],[Events.SavedURL,'savedURL',['url','fileSystemPath']],[Events.SearchCompleted,'searchCompleted',['requestId','fileSystemPath','files']],[Events.SetInspectedTabId,'setInspectedTabId',['tabId']],[Events.SetUseSoftMenu,'setUseSoftMenu',['useSoftMenu']],[Events.ShowPanel,'showPanel',['panelName']]];self.Host=self.Host||{};Host=Host||{};Host.InspectorFrontendHostAPI={};Host.InspectorFrontendHostAPI.Events=Events;Host.InspectorFrontendHostAPI.EventDescriptors=EventDescriptors;Node.prototype.rangeOfWord=function(offset,stopCharacters,stayWithinNode,direction){let startNode;let startOffset=0;let endNode;let endOffset=0;if(!stayWithinNode){stayWithinNode=this;}
if(!direction||direction==='backward'||direction==='both'){let node=this;while(node){if(node===stayWithinNode){if(!startNode){startNode=stayWithinNode;}
break;}
if(node.nodeType===Node.TEXT_NODE){const start=(node===this?(offset-1):(node.nodeValue.length-1));for(let i=start;i>=0;--i){if(stopCharacters.indexOf(node.nodeValue[i])!==-1){startNode=node;startOffset=i+1;break;}}}
if(startNode){break;}
node=node.traversePreviousNode(stayWithinNode);}
if(!startNode){startNode=stayWithinNode;startOffset=0;}}else{startNode=this;startOffset=offset;}
if(!direction||direction==='forward'||direction==='both'){let node=this;while(node){if(node===stayWithinNode){if(!endNode){endNode=stayWithinNode;}
break;}
if(node.nodeType===Node.TEXT_NODE){const start=(node===this?offset:0);for(let i=start;i<node.nodeValue.length;++i){if(stopCharacters.indexOf(node.nodeValue[i])!==-1){endNode=node;endOffset=i;break;}}}
if(endNode){break;}
node=node.traverseNextNode(stayWithinNode);}
if(!endNode){endNode=stayWithinNode;endOffset=stayWithinNode.nodeType===Node.TEXT_NODE?stayWithinNode.nodeValue.length:stayWithinNode.childNodes.length;}}else{endNode=this;endOffset=offset;}
const result=this.ownerDocument.createRange();result.setStart(startNode,startOffset);result.setEnd(endNode,endOffset);return result;};Node.prototype.traverseNextTextNode=function(stayWithin){let node=this.traverseNextNode(stayWithin);if(!node){return null;}
const nonTextTags={'STYLE':1,'SCRIPT':1};while(node&&(node.nodeType!==Node.TEXT_NODE||nonTextTags[node.parentElement.nodeName])){node=node.traverseNextNode(stayWithin);}
return node;};Element.prototype.positionAt=function(x,y,relativeTo){let shift={x:0,y:0};if(relativeTo){shift=relativeTo.boxInWindow(this.ownerDocument.defaultView);}
if(typeof x==='number'){this.style.setProperty('left',(shift.x+x)+'px');}else{this.style.removeProperty('left');}
if(typeof y==='number'){this.style.setProperty('top',(shift.y+y)+'px');}else{this.style.removeProperty('top');}
if(typeof x==='number'||typeof y==='number'){this.style.setProperty('position','absolute');}else{this.style.removeProperty('position');}};Element.prototype.isScrolledToBottom=function(){return Math.abs(this.scrollTop+this.clientHeight-this.scrollHeight)<=2;};Node.prototype.enclosingNodeOrSelfWithNodeNameInArray=function(nameArray){for(let node=this;node&&node!==this.ownerDocument;node=node.parentNodeOrShadowHost()){for(let i=0;i<nameArray.length;++i){if(node.nodeName.toLowerCase()===nameArray[i].toLowerCase()){return node;}}}
return null;};Node.prototype.enclosingNodeOrSelfWithNodeName=function(nodeName){return this.enclosingNodeOrSelfWithNodeNameInArray([nodeName]);};Node.prototype.enclosingNodeOrSelfWithClass=function(className,stayWithin){return this.enclosingNodeOrSelfWithClassList([className],stayWithin);};Node.prototype.enclosingNodeOrSelfWithClassList=function(classNames,stayWithin){for(let node=this;node&&node!==stayWithin&&node!==this.ownerDocument;node=node.parentNodeOrShadowHost()){if(node.nodeType===Node.ELEMENT_NODE){let containsAll=true;for(let i=0;i<classNames.length&&containsAll;++i){if(!node.classList.contains(classNames[i])){containsAll=false;}}
if(containsAll){return(node);}}}
return null;};Node.prototype.enclosingShadowRoot=function(){let parentNode=this.parentNodeOrShadowHost();while(parentNode){if(parentNode instanceof ShadowRoot){return parentNode;}
parentNode=parentNode.parentNodeOrShadowHost();}
return null;};Node.prototype.hasSameShadowRoot=function(node){return this.enclosingShadowRoot()===node.enclosingShadowRoot();};Node.prototype.parentElementOrShadowHost=function(){if(this.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&this.host){return(this.host);}
const node=this.parentNode;if(!node){return null;}
if(node.nodeType===Node.ELEMENT_NODE){return(node);}
if(node.nodeType===Node.DOCUMENT_FRAGMENT_NODE){return(node.host);}
return null;};Node.prototype.parentNodeOrShadowHost=function(){if(this.parentNode){return this.parentNode;}
if(this.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&this.host){return this.host;}
return null;};Node.prototype.getComponentSelection=function(){let parent=this.parentNode;while(parent&&parent.nodeType!==Node.DOCUMENT_FRAGMENT_NODE){parent=parent.parentNode;}
return parent instanceof ShadowRoot?parent.getSelection():this.window().getSelection();};Node.prototype.hasSelection=function(){if(this instanceof Element){const slots=this.querySelectorAll('slot');for(const slot of slots){if(Array.prototype.some.call(slot.assignedNodes(),node=>node.hasSelection())){return true;}}}
const selection=this.getComponentSelection();if(selection.type!=='Range'){return false;}
return selection.containsNode(this,true)||selection.anchorNode.isSelfOrDescendant(this)||selection.focusNode.isSelfOrDescendant(this);};Node.prototype.window=function(){return(this.ownerDocument.defaultView);};Element.prototype.removeChildren=function(){if(this.firstChild){this.textContent='';}};self.createElement=function(tagName,customElementType){return document.createElement(tagName,{is:customElementType});};self.createTextNode=function(data){return document.createTextNode(data);};Document.prototype.createElementWithClass=function(elementName,className,customElementType){const element=this.createElement(elementName,{is:customElementType});if(className){element.className=className;}
return element;};self.createElementWithClass=function(elementName,className,customElementType){return document.createElementWithClass(elementName,className,customElementType);};Document.prototype.createSVGElement=function(childType,className){const element=this.createElementNS('http://www.w3.org/2000/svg',childType);if(className){element.setAttribute('class',className);}
return element;};self.createSVGElement=function(childType,className){return document.createSVGElement(childType,className);};self.createDocumentFragment=function(){return document.createDocumentFragment();};Element.prototype.createChild=function(elementName,className,customElementType){const element=this.ownerDocument.createElementWithClass(elementName,className,customElementType);this.appendChild(element);return element;};DocumentFragment.prototype.createChild=Element.prototype.createChild;Element.prototype.createTextChild=function(text){const element=this.ownerDocument.createTextNode(text);this.appendChild(element);return element;};DocumentFragment.prototype.createTextChild=Element.prototype.createTextChild;Element.prototype.createTextChildren=function(var_args){for(let i=0,n=arguments.length;i<n;++i){this.createTextChild(arguments[i]);}};DocumentFragment.prototype.createTextChildren=Element.prototype.createTextChildren;Element.prototype.totalOffsetLeft=function(){return this.totalOffset().left;};Element.prototype.totalOffsetTop=function(){return this.totalOffset().top;};Element.prototype.totalOffset=function(){const rect=this.getBoundingClientRect();return{left:rect.left,top:rect.top};};Element.prototype.createSVGChild=function(childType,className){const child=this.ownerDocument.createSVGElement(childType,className);this.appendChild(child);return child;};var AnchorBox=class{constructor(x,y,width,height){this.x=x||0;this.y=y||0;this.width=width||0;this.height=height||0;}
contains(x,y){return x>=this.x&&x<=this.x+this.width&&y>=this.y&&y<=this.y+this.height;}
relativeTo(box){return new AnchorBox(this.x-box.x,this.y-box.y,this.width,this.height);}
relativeToElement(element){return this.relativeTo(element.boxInWindow(element.ownerDocument.defaultView));}
equals(anchorBox){return!!anchorBox&&this.x===anchorBox.x&&this.y===anchorBox.y&&this.width===anchorBox.width&&this.height===anchorBox.height;}};self.AnchorBox=AnchorBox;Element.prototype.boxInWindow=function(targetWindow){targetWindow=targetWindow||this.ownerDocument.defaultView;const anchorBox=new AnchorBox();let curElement=this;let curWindow=this.ownerDocument.defaultView;while(curWindow&&curElement){anchorBox.x+=curElement.totalOffsetLeft();anchorBox.y+=curElement.totalOffsetTop();if(curWindow===targetWindow){break;}
curElement=curWindow.frameElement;curWindow=curWindow.parent;}
anchorBox.width=Math.min(this.offsetWidth,targetWindow.innerWidth-anchorBox.x);anchorBox.height=Math.min(this.offsetHeight,targetWindow.innerHeight-anchorBox.y);return anchorBox;};Event.prototype.consume=function(preventDefault){this.stopImmediatePropagation();if(preventDefault){this.preventDefault();}
this.handled=true;};Text.prototype.select=function(start,end){start=start||0;end=end||this.textContent.length;if(start<0){start=end+start;}
const selection=this.getComponentSelection();selection.removeAllRanges();const range=this.ownerDocument.createRange();range.setStart(this,start);range.setEnd(this,end);selection.addRange(range);return this;};Element.prototype.selectionLeftOffset=function(){const selection=this.getComponentSelection();if(!selection.containsNode(this,true)){return null;}
let leftOffset=selection.anchorOffset;let node=selection.anchorNode;while(node!==this){while(node.previousSibling){node=node.previousSibling;leftOffset+=node.textContent.length;}
node=node.parentNodeOrShadowHost();}
return leftOffset;};Node.prototype.appendChildren=function(var_args){for(let i=0,n=arguments.length;i<n;++i){this.appendChild(arguments[i]);}};Node.prototype.deepTextContent=function(){return this.childTextNodes().map(function(node){return node.textContent;}).join('');};Node.prototype.childTextNodes=function(){let node=this.traverseNextTextNode(this);const result=[];const nonTextTags={'STYLE':1,'SCRIPT':1};while(node){if(!nonTextTags[node.parentElement.nodeName]){result.push(node);}
node=node.traverseNextTextNode(this);}
return result;};Node.prototype.isAncestor=function(node){if(!node){return false;}
let currentNode=node.parentNodeOrShadowHost();while(currentNode){if(this===currentNode){return true;}
currentNode=currentNode.parentNodeOrShadowHost();}
return false;};Node.prototype.isDescendant=function(descendant){return!!descendant&&descendant.isAncestor(this);};Node.prototype.isSelfOrAncestor=function(node){return!!node&&(node===this||this.isAncestor(node));};Node.prototype.isSelfOrDescendant=function(node){return!!node&&(node===this||this.isDescendant(node));};Node.prototype.traverseNextNode=function(stayWithin){if(this.shadowRoot){return this.shadowRoot;}
const distributedNodes=this instanceof HTMLSlotElement?this.assignedNodes():[];if(distributedNodes.length){return distributedNodes[0];}
if(this.firstChild){return this.firstChild;}
let node=this;while(node){if(stayWithin&&node===stayWithin){return null;}
const sibling=nextSibling(node);if(sibling){return sibling;}
node=node.assignedSlot||node.parentNodeOrShadowHost();}
function nextSibling(node){if(!node.assignedSlot){return node.nextSibling;}
const distributedNodes=node.assignedSlot.assignedNodes();const position=Array.prototype.indexOf.call(distributedNodes,node);if(position+1<distributedNodes.length){return distributedNodes[position+1];}
return null;}
return null;};Node.prototype.traversePreviousNode=function(stayWithin){if(stayWithin&&this===stayWithin){return null;}
let node=this.previousSibling;while(node&&node.lastChild){node=node.lastChild;}
if(node){return node;}
return this.parentNodeOrShadowHost();};Node.prototype.setTextContentTruncatedIfNeeded=function(text,placeholder){const maxTextContentLength=10000;if(typeof text==='string'&&text.length>maxTextContentLength){this.textContent=typeof placeholder==='string'?placeholder:text.trimMiddle(maxTextContentLength);return true;}
this.textContent=text;return false;};Event.prototype.deepElementFromPoint=function(){if(!this.which&&!this.pageX&&!this.pageY&&!this.clientX&&!this.clientY&&!this.movementX&&!this.movementY){return null;}
const root=this.target&&this.target.getComponentRoot();return root?root.deepElementFromPoint(this.pageX,this.pageY):null;};Document.prototype.deepElementFromPoint=function(x,y){let container=this;let node=null;while(container){const innerNode=container.elementFromPoint(x,y);if(!innerNode||node===innerNode){break;}
node=innerNode;container=node.shadowRoot;}
return node;};DocumentFragment.prototype.deepElementFromPoint=Document.prototype.deepElementFromPoint;Document.prototype.deepActiveElement=function(){let activeElement=this.activeElement;while(activeElement&&activeElement.shadowRoot&&activeElement.shadowRoot.activeElement){activeElement=activeElement.shadowRoot.activeElement;}
return activeElement;};DocumentFragment.prototype.deepActiveElement=Document.prototype.deepActiveElement;Element.prototype.hasFocus=function(){const root=this.getComponentRoot();return!!root&&this.isSelfOrAncestor(root.activeElement);};Node.prototype.getComponentRoot=function(){let node=this;while(node&&node.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&node.nodeType!==Node.DOCUMENT_NODE){node=node.parentNode;}
return(node);};self.onInvokeElement=function(element,callback){element.addEventListener('keydown',event=>{if(self.isEnterOrSpaceKey(event)){callback(event);}});element.addEventListener('click',event=>callback(event));};self.isEnterKey=function(event){return event.keyCode!==229&&event.key==='Enter';};self.isEnterOrSpaceKey=function(event){return self.isEnterKey(event)||event.key===' ';};self.isEscKey=function(event){return event.keyCode===27;};(function(){const originalToggle=DOMTokenList.prototype.toggle;DOMTokenList.prototype['toggle']=function(token,force){if(arguments.length===1){force=!this.contains(token);}
return originalToggle.call(this,token,!!force);};})();import'./DOMExtension.js';import'./Runtime.js';import'./platform/platform.js';import'./dom_extension/dom_extension.js';import'./common/common-legacy.js';import'./host/host.js';import'./protocol/protocol.js';import'./sdk/sdk.js';import'./ui/ui.js';import'./services/services.js';import'./workspace/workspace.js';import'./bindings/bindings.js';import'./components/components.js';import'./persistence/persistence.js';import'./browser_sdk/browser_sdk.js';import'./extensions/extensions.js';import'./console_counters/console_counters.js';import'./text_utils/text_utils.js';const _loadedScripts={};(function(){const baseUrl=self.location?self.location.origin+self.location.pathname:'';self._importScriptPathPrefix=baseUrl.substring(0,baseUrl.lastIndexOf('/')+1);})();const REMOTE_MODULE_FALLBACK_REVISION='@010ddcfda246975d194964ccf20038ebbdec6084';class Runtime{constructor(descriptors){this._modules=[];this._modulesMap={};this._extensions=[];this._cachedTypeClasses={};this._descriptorsMap={};for(let i=0;i<descriptors.length;++i){this._registerModule(descriptors[i]);}}
static _loadResourcePromise(url,asBinary){return new Promise(load);function load(fulfill,reject){const xhr=new XMLHttpRequest();xhr.open('GET',url,true);if(asBinary){xhr.responseType='arraybuffer';}
xhr.onreadystatechange=onreadystatechange;function onreadystatechange(e){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
const{response}=e.target;const text=asBinary?new TextDecoder().decode(response):response;const status=/^HTTP\/1.1 404/.test(text)?404:xhr.status;if([0,200,304].indexOf(status)===-1)
{reject(new Error('While loading from url '+url+' server responded with a status of '+status));}else{fulfill(response);}}
xhr.send(null);}}
static loadResourcePromise(url){return Runtime._loadResourcePromise(url,false);}
static loadBinaryResourcePromise(url){return Runtime._loadResourcePromise(url,true);}
static loadResourcePromiseWithFallback(url){return Runtime.loadResourcePromise(url).catch(err=>{const urlWithFallbackVersion=url.replace(/@[0-9a-f]{40}/,REMOTE_MODULE_FALLBACK_REVISION);if(urlWithFallbackVersion===url||!url.includes('audits_worker_module')){throw err;}
return Runtime.loadResourcePromise(urlWithFallbackVersion);});}
static normalizePath(path){if(path.indexOf('..')===-1&&path.indexOf('.')===-1){return path;}
const normalizedSegments=[];const segments=path.split('/');for(let i=0;i<segments.length;i++){const segment=segments[i];if(segment==='.'){continue;}else if(segment==='..'){normalizedSegments.pop();}else if(segment){normalizedSegments.push(segment);}}
let normalizedPath=normalizedSegments.join('/');if(normalizedPath[normalizedPath.length-1]==='/'){return normalizedPath;}
if(path[0]==='/'&&normalizedPath){normalizedPath='/'+normalizedPath;}
if((path[path.length-1]==='/')||(segments[segments.length-1]==='.')||(segments[segments.length-1]==='..')){normalizedPath=normalizedPath+'/';}
return normalizedPath;}
static getResourceURL(scriptName,base){const sourceURL=(base||self._importScriptPathPrefix)+scriptName;const schemaIndex=sourceURL.indexOf('://')+3;let pathIndex=sourceURL.indexOf('/',schemaIndex);if(pathIndex===-1){pathIndex=sourceURL.length;}
return sourceURL.substring(0,pathIndex)+Runtime.normalizePath(sourceURL.substring(pathIndex));}
static _loadScriptsPromise(scriptNames,base){const promises=[];const urls=[];const sources=new Array(scriptNames.length);let scriptToEval=0;for(let i=0;i<scriptNames.length;++i){const scriptName=scriptNames[i];const sourceURL=Runtime.getResourceURL(scriptName,base);if(_loadedScripts[sourceURL]){continue;}
urls.push(sourceURL);const loadResourcePromise=base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);promises.push(loadResourcePromise.then(scriptSourceLoaded.bind(null,i),scriptSourceLoaded.bind(null,i,undefined)));}
return Promise.all(promises).then(undefined);function scriptSourceLoaded(scriptNumber,scriptSource){sources[scriptNumber]=scriptSource||'';while(typeof sources[scriptToEval]!=='undefined'){evaluateScript(urls[scriptToEval],sources[scriptToEval]);++scriptToEval;}}
function evaluateScript(sourceURL,scriptSource){_loadedScripts[sourceURL]=true;if(!scriptSource){console.error('Empty response arrived for script \''+sourceURL+'\'');return;}
self.eval(scriptSource+'\n//# sourceURL='+sourceURL);}}
static _loadResourceIntoCache(url,appendSourceURL){return Runtime.loadResourcePromise(url).then(cacheResource.bind(this,url),cacheResource.bind(this,url,undefined));function cacheResource(path,content){if(!content){console.error('Failed to load resource: '+path);return;}
const sourceURL=appendSourceURL?Runtime.resolveSourceURL(path):'';Runtime.cachedResources[path]=content+sourceURL;}}
static async appStarted(){return Runtime._appStartedPromise;}
static async startApplication(appName){console.timeStamp('Root.Runtime.startApplication');const allDescriptorsByName={};for(let i=0;i<Root.allDescriptors.length;++i){const d=Root.allDescriptors[i];allDescriptorsByName[d['name']]=d;}
if(!Root.applicationDescriptor){let data=await Runtime.loadResourcePromise(appName+'.json');Root.applicationDescriptor=JSON.parse(data);let descriptor=Root.applicationDescriptor;while(descriptor.extends){data=await Runtime.loadResourcePromise(descriptor.extends+'.json');descriptor=JSON.parse(data);Root.applicationDescriptor.modules=descriptor.modules.concat(Root.applicationDescriptor.modules);}}
const configuration=Root.applicationDescriptor.modules;const moduleJSONPromises=[];const coreModuleNames=[];for(let i=0;i<configuration.length;++i){const descriptor=configuration[i];const name=descriptor['name'];const moduleJSON=allDescriptorsByName[name];if(moduleJSON){moduleJSONPromises.push(Promise.resolve(moduleJSON));}else{moduleJSONPromises.push(Runtime.loadResourcePromise(name+'/module.json').then(JSON.parse.bind(JSON)));}
if(descriptor['type']==='autostart'){coreModuleNames.push(name);}}
const moduleDescriptors=await Promise.all(moduleJSONPromises);for(let i=0;i<moduleDescriptors.length;++i){moduleDescriptors[i].name=configuration[i]['name'];moduleDescriptors[i].condition=configuration[i]['condition'];moduleDescriptors[i].remote=configuration[i]['type']==='remote';}
self.runtime=new Runtime(moduleDescriptors);if(coreModuleNames){await self.runtime._loadAutoStartModules(coreModuleNames);}
Runtime._appStartedPromiseCallback();}
static startWorker(appName){return Root.Runtime.startApplication(appName).then(sendWorkerReady);function sendWorkerReady(){self.postMessage('workerReady');}}
static queryParam(name){return Runtime._queryParamsObject.get(name);}
static queryParamsString(){return location.search;}
static _experimentsSetting(){try{return(JSON.parse(self.localStorage&&self.localStorage['experiments']?self.localStorage['experiments']:'{}'));}catch(e){console.error('Failed to parse localStorage[\'experiments\']');return{};}}
static _assert(value,message){if(value){return;}
Runtime._originalAssert.call(Runtime._console,value,message+' '+new Error().stack);}
static setPlatform(platform){Runtime._platform=platform;}
static _isDescriptorEnabled(descriptor){const activatorExperiment=descriptor['experiment'];if(activatorExperiment==='*'){return Runtime.experiments.supportEnabled();}
if(activatorExperiment&&activatorExperiment.startsWith('!')&&Runtime.experiments.isEnabled(activatorExperiment.substring(1))){return false;}
if(activatorExperiment&&!activatorExperiment.startsWith('!')&&!Runtime.experiments.isEnabled(activatorExperiment)){return false;}
const condition=descriptor['condition'];if(condition&&!condition.startsWith('!')&&!Runtime.queryParam(condition)){return false;}
if(condition&&condition.startsWith('!')&&Runtime.queryParam(condition.substring(1))){return false;}
return true;}
static resolveSourceURL(path){let sourceURL=self.location.href;if(self.location.search){sourceURL=sourceURL.replace(self.location.search,'');}
sourceURL=sourceURL.substring(0,sourceURL.lastIndexOf('/')+1)+path;return'\n/*# sourceURL='+sourceURL+' */';}
static setL10nCallback(localizationFunction){Runtime._l10nCallback=localizationFunction;}
useTestBase(){Runtime._remoteBase='http://localhost:8000/inspector-sources/';if(Runtime.queryParam('debugFrontend')){Runtime._remoteBase+='debug/';}}
module(moduleName){return this._modulesMap[moduleName];}
_registerModule(descriptor){const module=new Runtime.Module(this,descriptor);this._modules.push(module);this._modulesMap[descriptor['name']]=module;}
loadModulePromise(moduleName){return this._modulesMap[moduleName]._loadPromise();}
_loadAutoStartModules(moduleNames){const promises=[];for(let i=0;i<moduleNames.length;++i){promises.push(this.loadModulePromise(moduleNames[i]));}
return Promise.all(promises);}
_checkExtensionApplicability(extension,predicate){if(!predicate){return false;}
const contextTypes=extension.descriptor().contextTypes;if(!contextTypes){return true;}
for(let i=0;i<contextTypes.length;++i){const contextType=this._resolve(contextTypes[i]);const isMatching=!!contextType&&predicate(contextType);if(isMatching){return true;}}
return false;}
isExtensionApplicableToContext(extension,context){if(!context){return true;}
return this._checkExtensionApplicability(extension,isInstanceOf);function isInstanceOf(targetType){return context instanceof targetType;}}
isExtensionApplicableToContextTypes(extension,currentContextTypes){if(!extension.descriptor().contextTypes){return true;}
return this._checkExtensionApplicability(extension,currentContextTypes?isContextTypeKnown:null);function isContextTypeKnown(targetType){return currentContextTypes.has(targetType);}}
extensions(type,context,sortByTitle){return this._extensions.filter(filter).sort(sortByTitle?titleComparator:orderComparator);function filter(extension){if(extension._type!==type&&extension._typeClass()!==type){return false;}
if(!extension.enabled()){return false;}
return!context||extension.isApplicable(context);}
function orderComparator(extension1,extension2){const order1=extension1.descriptor()['order']||0;const order2=extension2.descriptor()['order']||0;return order1-order2;}
function titleComparator(extension1,extension2){const title1=extension1.title()||'';const title2=extension2.title()||'';return title1.localeCompare(title2);}}
extension(type,context){return this.extensions(type,context)[0]||null;}
allInstances(type,context){return Promise.all(this.extensions(type,context).map(extension=>extension.instance()));}
_resolve(typeName){if(!this._cachedTypeClasses[typeName]){const path=typeName.split('.');let object=self;for(let i=0;object&&(i<path.length);++i){object=object[path[i]];}
if(object){this._cachedTypeClasses[typeName]=(object);}}
return this._cachedTypeClasses[typeName]||null;}
sharedInstance(constructorFunction){if(Runtime._instanceSymbol in constructorFunction&&Object.getOwnPropertySymbols(constructorFunction).includes(Runtime._instanceSymbol)){return constructorFunction[Runtime._instanceSymbol];}
const instance=new constructorFunction();constructorFunction[Runtime._instanceSymbol]=instance;return instance;}}
Runtime._queryParamsObject=new URLSearchParams(Runtime.queryParamsString());Runtime._instanceSymbol=Symbol('instance');Runtime.cachedResources={__proto__:null};Runtime._console=console;Runtime._originalAssert=console.assert;Runtime._platform='';class ModuleDescriptor{constructor(){this.name;this.extensions;this.dependencies;this.scripts;this.modules;this.condition;this.remote;}}
class RuntimeExtensionDescriptor{constructor(){this.type;this.className;this.factoryName;this.contextTypes;}}
const specialCases={'sdk':'SDK','js_sdk':'JSSDK','browser_sdk':'BrowserSDK','ui':'UI','object_ui':'ObjectUI','javascript_metadata':'JavaScriptMetadata','perf_ui':'PerfUI','har_importer':'HARImporter','sdk_test_runner':'SDKTestRunner','cpu_profiler_test_runner':'CPUProfilerTestRunner'};class Module{constructor(manager,descriptor){this._manager=manager;this._descriptor=descriptor;this._name=descriptor.name;this._extensions=[];this._extensionsByClassName=new Map();const extensions=(descriptor.extensions);for(let i=0;extensions&&i<extensions.length;++i){const extension=new Extension(this,extensions[i]);this._manager._extensions.push(extension);this._extensions.push(extension);}
this._loadedForTest=false;}
name(){return this._name;}
enabled(){return Runtime._isDescriptorEnabled(this._descriptor);}
resource(name){const fullName=this._name+'/'+name;const content=Runtime.cachedResources[fullName];if(!content){throw new Error(fullName+' not preloaded. Check module.json');}
return content;}
_loadPromise(){if(!this.enabled()){return Promise.reject(new Error('Module '+this._name+' is not enabled'));}
if(this._pendingLoadPromise){return this._pendingLoadPromise;}
const dependencies=this._descriptor.dependencies;const dependencyPromises=[];for(let i=0;dependencies&&i<dependencies.length;++i){dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());}
this._pendingLoadPromise=Promise.all(dependencyPromises).then(this._loadResources.bind(this)).then(this._loadModules.bind(this)).then(this._loadScripts.bind(this)).then(()=>this._loadedForTest=true);return this._pendingLoadPromise;}
_loadResources(){const resources=this._descriptor['resources'];if(!resources||!resources.length){return Promise.resolve();}
const promises=[];for(let i=0;i<resources.length;++i){const url=this._modularizeURL(resources[i]);const isHtml=url.endsWith('.html');promises.push(Runtime._loadResourceIntoCache(url,!isHtml));}
return Promise.all(promises).then(undefined);}
_loadModules(){if(!this._descriptor.modules||!this._descriptor.modules.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};if(typeof WorkerGlobalScope!=='undefined'&&self instanceof WorkerGlobalScope){return Promise.resolve();}
return eval(`import('./${this._name}/${this._name}.js')`);}
_loadScripts(){if(!this._descriptor.scripts||!this._descriptor.scripts.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};return Runtime._loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL,this),this._remoteBase());}
_computeNamespace(){return specialCases[this._name]||this._name.split('_').map(a=>a.substring(0,1).toUpperCase()+a.substring(1)).join('');}
_modularizeURL(resourceName){return Runtime.normalizePath(this._name+'/'+resourceName);}
_remoteBase(){return!Runtime.queryParam('debugFrontend')&&this._descriptor.remote&&Runtime._remoteBase||undefined;}
fetchResource(resourceName){const base=this._remoteBase();const sourceURL=Runtime.getResourceURL(this._modularizeURL(resourceName),base);return base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);}
substituteURL(value){const base=this._remoteBase()||'';return value.replace(/@url\(([^\)]*?)\)/g,convertURL.bind(this));function convertURL(match,url){return base+this._modularizeURL(url);}}}
class Extension{constructor(module,descriptor){this._module=module;this._descriptor=descriptor;this._type=descriptor.type;this._hasTypeClass=this._type.charAt(0)==='@';this._className=descriptor.className||null;this._factoryName=descriptor.factoryName||null;}
descriptor(){return this._descriptor;}
module(){return this._module;}
enabled(){return this._module.enabled()&&Runtime._isDescriptorEnabled(this.descriptor());}
_typeClass(){if(!this._hasTypeClass){return null;}
return this._module._manager._resolve(this._type.substring(1));}
isApplicable(context){return this._module._manager.isExtensionApplicableToContext(this,context);}
instance(){return this._module._loadPromise().then(this._createInstance.bind(this));}
canInstantiate(){return!!(this._className||this._factoryName);}
_createInstance(){const className=this._className||this._factoryName;if(!className){throw new Error('Could not instantiate extension with no class');}
const constructorFunction=self.eval((className));if(!(constructorFunction instanceof Function)){throw new Error('Could not instantiate: '+className);}
if(this._className){return this._module._manager.sharedInstance(constructorFunction);}
return new constructorFunction(this);}
title(){const title=this._descriptor['title-'+Runtime._platform]||this._descriptor['title'];if(title&&Runtime._l10nCallback){return Runtime._l10nCallback(title);}
return title;}
hasContextType(contextType){const contextTypes=this.descriptor().contextTypes;if(!contextTypes){return false;}
for(let i=0;i<contextTypes.length;++i){if(contextType===this._module._manager._resolve(contextTypes[i])){return true;}}
return false;}}
class ExperimentsSupport{constructor(){this._supportEnabled=Runtime.queryParam('experiments')!==null;this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled=new Set();}
allConfigurableExperiments(){const result=[];for(let i=0;i<this._experiments.length;i++){const experiment=this._experiments[i];if(!this._enabledTransiently[experiment.name]){result.push(experiment);}}
return result;}
supportEnabled(){return this._supportEnabled;}
_setExperimentsSetting(value){if(!self.localStorage){return;}
self.localStorage['experiments']=JSON.stringify(value);}
register(experimentName,experimentTitle,hidden){Runtime._assert(!this._experimentNames[experimentName],'Duplicate registration of experiment '+experimentName);this._experimentNames[experimentName]=true;this._experiments.push(new Runtime.Experiment(this,experimentName,experimentTitle,!!hidden));}
isEnabled(experimentName){this._checkExperiment(experimentName);if(Runtime._experimentsSetting()[experimentName]===false){return false;}
if(this._enabledTransiently[experimentName]){return true;}
if(this._serverEnabled.has(experimentName)){return true;}
if(!this.supportEnabled()){return false;}
return!!Runtime._experimentsSetting()[experimentName];}
setEnabled(experimentName,enabled){this._checkExperiment(experimentName);const experimentsSetting=Runtime._experimentsSetting();experimentsSetting[experimentName]=enabled;this._setExperimentsSetting(experimentsSetting);}
setDefaultExperiments(experimentNames){for(let i=0;i<experimentNames.length;++i){this._checkExperiment(experimentNames[i]);this._enabledTransiently[experimentNames[i]]=true;}}
setServerEnabledExperiments(experimentNames){for(const experiment of experimentNames){this._checkExperiment(experiment);this._serverEnabled.add(experiment);}}
enableForTest(experimentName){this._checkExperiment(experimentName);this._enabledTransiently[experimentName]=true;}
clearForTest(){this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled.clear();}
cleanUpStaleExperiments(){const experimentsSetting=Runtime._experimentsSetting();const cleanedUpExperimentSetting={};for(let i=0;i<this._experiments.length;++i){const experimentName=this._experiments[i].name;if(experimentsSetting[experimentName]){cleanedUpExperimentSetting[experimentName]=true;}}
this._setExperimentsSetting(cleanedUpExperimentSetting);}
_checkExperiment(experimentName){Runtime._assert(this._experimentNames[experimentName],'Unknown experiment '+experimentName);}}
class Experiment{constructor(experiments,name,title,hidden){this.name=name;this.title=title;this.hidden=hidden;this._experiments=experiments;}
isEnabled(){return this._experiments.isEnabled(this.name);}
setEnabled(enabled){this._experiments.setEnabled(this.name,enabled);}}
Runtime.experiments=new ExperimentsSupport();Runtime._appStartedPromiseCallback;Runtime._appStartedPromise=new Promise(fulfil=>Runtime._appStartedPromiseCallback=fulfil);Runtime._l10nCallback;Runtime._remoteBase;(function validateRemoteBase(){if(location.href.startsWith('devtools://devtools/bundled/')&&Runtime.queryParam('remoteBase')){const versionMatch=/\/serve_file\/(@[0-9a-zA-Z]+)\/?$/.exec(Runtime.queryParam('remoteBase'));if(versionMatch){Runtime._remoteBase=`${location.origin}/remote/serve_file/${versionMatch[1]}/`;}}})();self.Root=self.Root||{};Root=Root||{};Root.allDescriptors=[];Root.applicationDescriptor=undefined;Root.Runtime=Runtime;Root.runtime;Root.Runtime.ModuleDescriptor=ModuleDescriptor;Root.Runtime.ExtensionDescriptor=RuntimeExtensionDescriptor;Root.Runtime.Extension=Extension;Root.Runtime.Module=Module;Root.Runtime.ExperimentsSupport=ExperimentsSupport;Root.Runtime.Experiment=Experiment;self.mod=function(m,n){return((m%n)+n)%n;};String.prototype.findAll=function(string){const matches=[];let i=this.indexOf(string);while(i!==-1){matches.push(i);i=this.indexOf(string,i+string.length);}
return matches;};String.prototype.reverse=function(){return this.split('').reverse().join('');};String.prototype.replaceControlCharacters=function(){return this.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u0080-\u009f]/g,'�');};String.prototype.isWhitespace=function(){return/^\s*$/.test(this);};String.prototype.computeLineEndings=function(){const endings=this.findAll('\n');endings.push(this.length);return endings;};String.prototype.escapeCharacters=function(chars){let foundChar=false;for(let i=0;i<chars.length;++i){if(this.indexOf(chars.charAt(i))!==-1){foundChar=true;break;}}
if(!foundChar){return String(this);}
let result='';for(let i=0;i<this.length;++i){if(chars.indexOf(this.charAt(i))!==-1){result+='\\';}
result+=this.charAt(i);}
return result;};String.regexSpecialCharacters=function(){return'^[]{}()\\.^$*+?|-,';};String.prototype.escapeForRegExp=function(){return this.escapeCharacters(String.regexSpecialCharacters());};String.filterRegex=function(query){const toEscape=String.regexSpecialCharacters();let regexString='';for(let i=0;i<query.length;++i){let c=query.charAt(i);if(toEscape.indexOf(c)!==-1){c='\\'+c;}
if(i){regexString+='[^\\0'+c+']*';}
regexString+=c;}
return new RegExp(regexString,'i');};String.escapeInvalidUnicodeCharacters=function(text){if(!String._invalidCharactersRegExp){let invalidCharacters='';for(let i=0xfffe;i<=0x10ffff;i+=0x10000){invalidCharacters+=String.fromCodePoint(i,i+1);}
String._invalidCharactersRegExp=new RegExp(`[${invalidCharacters}\uD800-\uDFFF\uFDD0-\uFDEF]`,'gu');}
let result='';let lastPos=0;while(true){const match=String._invalidCharactersRegExp.exec(text);if(!match){break;}
result+=text.substring(lastPos,match.index)+'\\u'+text.charCodeAt(match.index).toString(16);if(match.index+1<String._invalidCharactersRegExp.lastIndex){result+='\\u'+text.charCodeAt(match.index+1).toString(16);}
lastPos=String._invalidCharactersRegExp.lastIndex;}
return result+text.substring(lastPos);};String.prototype.escapeHTML=function(){return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');};String.prototype.unescapeHTML=function(){return this.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&#58;/g,':').replace(/&quot;/g,'"').replace(/&#60;/g,'<').replace(/&#62;/g,'>').replace(/&amp;/g,'&');};String.prototype.collapseWhitespace=function(){return this.replace(/[\s\xA0]+/g,' ');};String.prototype.trimMiddle=function(maxLength){if(this.length<=maxLength){return String(this);}
let leftHalf=maxLength>>1;let rightHalf=maxLength-leftHalf-1;if(this.codePointAt(this.length-rightHalf-1)>=0x10000){--rightHalf;++leftHalf;}
if(leftHalf>0&&this.codePointAt(leftHalf-1)>=0x10000){--leftHalf;}
return this.substr(0,leftHalf)+'\u2026'+this.substr(this.length-rightHalf,rightHalf);};String.prototype.trimEndWithMaxLength=function(maxLength){if(this.length<=maxLength){return String(this);}
return this.substr(0,maxLength-1)+'\u2026';};String.prototype.trimURL=function(baseURLDomain){let result=this.replace(/^(https|http|file):\/\//i,'');if(baseURLDomain){if(result.toLowerCase().startsWith(baseURLDomain.toLowerCase())){result=result.substr(baseURLDomain.length);}}
return result;};String.prototype.toTitleCase=function(){return this.substring(0,1).toUpperCase()+this.substring(1);};String.prototype.compareTo=function(other){if(this>other){return 1;}
if(this<other){return-1;}
return 0;};String.prototype.removeURLFragment=function(){let fragmentIndex=this.indexOf('#');if(fragmentIndex===-1){fragmentIndex=this.length;}
return this.substring(0,fragmentIndex);};String.hashCode=function(string){if(!string){return 0;}
const p=((1<<30)*4-5);const z=0x5033d967;const z2=0x59d2f15d;let s=0;let zi=1;for(let i=0;i<string.length;i++){const xi=string.charCodeAt(i)*z2;s=(s+zi*xi)%p;zi=(zi*z)%p;}
s=(s+zi*(p-1))%p;return Math.abs(s|0);};String.isDigitAt=function(string,index){const c=string.charCodeAt(index);return(48<=c&&c<=57);};String.prototype.toBase64=function(){function encodeBits(b){return b<26?b+65:b<52?b+71:b<62?b-4:b===62?43:b===63?47:65;}
const encoder=new TextEncoder();const data=encoder.encode(this.toString());const n=data.length;let encoded='';if(n===0){return encoded;}
let shift;let v=0;for(let i=0;i<n;i++){shift=i%3;v|=data[i]<<(16>>>shift&24);if(shift===2){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),encodeBits(v>>>6&63),encodeBits(v&63));v=0;}}
if(shift===0){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),61,61);}else if(shift===1){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),encodeBits(v>>>6&63),61);}
return encoded;};String.naturalOrderComparator=function(a,b){const chunk=/^\d+|^\D+/;let chunka,chunkb,anum,bnum;while(1){if(a){if(!b){return 1;}}else{if(b){return-1;}else{return 0;}}
chunka=a.match(chunk)[0];chunkb=b.match(chunk)[0];anum=!isNaN(chunka);bnum=!isNaN(chunkb);if(anum&&!bnum){return-1;}
if(bnum&&!anum){return 1;}
if(anum&&bnum){const diff=chunka-chunkb;if(diff){return diff;}
if(chunka.length!==chunkb.length){if(!+chunka&&!+chunkb)
{return chunka.length-chunkb.length;}else{return chunkb.length-chunka.length;}}}else if(chunka!==chunkb){return(chunka<chunkb)?-1:1;}
a=a.substring(chunka.length);b=b.substring(chunkb.length);}};String.caseInsensetiveComparator=function(a,b){a=a.toUpperCase();b=b.toUpperCase();if(a===b){return 0;}
return a>b?1:-1;};Number.constrain=function(num,min,max){if(num<min){num=min;}else if(num>max){num=max;}
return num;};Number.gcd=function(a,b){if(b===0){return a;}else{return Number.gcd(b,a%b);}};Number.toFixedIfFloating=function(value){if(!value||isNaN(value)){return value;}
const number=Number(value);return number%1?number.toFixed(3):String(number);};Date.prototype.isValid=function(){return!isNaN(this.getTime());};Date.prototype.toISO8601Compact=function(){function leadZero(x){return(x>9?'':'0')+x;}
return this.getFullYear()+leadZero(this.getMonth()+1)+leadZero(this.getDate())+'T'+
leadZero(this.getHours())+leadZero(this.getMinutes())+leadZero(this.getSeconds());};Object.defineProperty(Array.prototype,'remove',{value:function(value,firstOnly){let index=this.indexOf(value);if(index===-1){return false;}
if(firstOnly){this.splice(index,1);return true;}
for(let i=index+1,n=this.length;i<n;++i){if(this[i]!==value){this[index++]=this[i];}}
this.length=index;return true;}});Object.defineProperty(Array.prototype,'pushAll',{value:function(array){for(let i=0;i<array.length;++i){this.push(array[i]);}}});Object.defineProperty(Array.prototype,'rotate',{value:function(index){const result=[];for(let i=index;i<index+this.length;++i){result.push(this[i%this.length]);}
return result;}});Object.defineProperty(Array.prototype,'sortNumbers',{value:function(){function numericComparator(a,b){return a-b;}
this.sort(numericComparator);}});(function(){const partition={value:function(comparator,left,right,pivotIndex){function swap(array,i1,i2){const temp=array[i1];array[i1]=array[i2];array[i2]=temp;}
const pivotValue=this[pivotIndex];swap(this,right,pivotIndex);let storeIndex=left;for(let i=left;i<right;++i){if(comparator(this[i],pivotValue)<0){swap(this,storeIndex,i);++storeIndex;}}
swap(this,right,storeIndex);return storeIndex;}};Object.defineProperty(Array.prototype,'partition',partition);Object.defineProperty(Uint32Array.prototype,'partition',partition);const sortRange={value:function(comparator,leftBound,rightBound,sortWindowLeft,sortWindowRight){function quickSortRange(array,comparator,left,right,sortWindowLeft,sortWindowRight){if(right<=left){return;}
const pivotIndex=Math.floor(Math.random()*(right-left))+left;const pivotNewIndex=array.partition(comparator,left,right,pivotIndex);if(sortWindowLeft<pivotNewIndex){quickSortRange(array,comparator,left,pivotNewIndex-1,sortWindowLeft,sortWindowRight);}
if(pivotNewIndex<sortWindowRight){quickSortRange(array,comparator,pivotNewIndex+1,right,sortWindowLeft,sortWindowRight);}}
if(leftBound===0&&rightBound===(this.length-1)&&sortWindowLeft===0&&sortWindowRight>=rightBound){this.sort(comparator);}else{quickSortRange(this,comparator,leftBound,rightBound,sortWindowLeft,sortWindowRight);}
return this;}};Object.defineProperty(Array.prototype,'sortRange',sortRange);Object.defineProperty(Uint32Array.prototype,'sortRange',sortRange);})();Object.defineProperty(Array.prototype,'lowerBound',{value:function(object,comparator,left,right){function defaultComparator(a,b){return a<b?-1:(a>b?1:0);}
comparator=comparator||defaultComparator;let l=left||0;let r=right!==undefined?right:this.length;while(l<r){const m=(l+r)>>1;if(comparator(object,this[m])>0){l=m+1;}else{r=m;}}
return r;}});Object.defineProperty(Array.prototype,'upperBound',{value:function(object,comparator,left,right){function defaultComparator(a,b){return a<b?-1:(a>b?1:0);}
comparator=comparator||defaultComparator;let l=left||0;let r=right!==undefined?right:this.length;while(l<r){const m=(l+r)>>1;if(comparator(object,this[m])>=0){l=m+1;}else{r=m;}}
return r;}});Object.defineProperty(Uint32Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Uint32Array.prototype,'upperBound',{value:Array.prototype.upperBound});Object.defineProperty(Int32Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Int32Array.prototype,'upperBound',{value:Array.prototype.upperBound});Object.defineProperty(Float64Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Array.prototype,'binaryIndexOf',{value:function(value,comparator){const index=this.lowerBound(value,comparator);return index<this.length&&comparator(value,this[index])===0?index:-1;}});Object.defineProperty(Array.prototype,'select',{value:function(field){const result=new Array(this.length);for(let i=0;i<this.length;++i){result[i]=this[i][field];}
return result;}});Object.defineProperty(Array.prototype,'peekLast',{value:function(){return this[this.length-1];}});(function(){function mergeOrIntersect(array1,array2,comparator,mergeNotIntersect){const result=[];let i=0;let j=0;while(i<array1.length&&j<array2.length){const compareValue=comparator(array1[i],array2[j]);if(mergeNotIntersect||!compareValue){result.push(compareValue<=0?array1[i]:array2[j]);}
if(compareValue<=0){i++;}
if(compareValue>=0){j++;}}
if(mergeNotIntersect){while(i<array1.length){result.push(array1[i++]);}
while(j<array2.length){result.push(array2[j++]);}}
return result;}
Object.defineProperty(Array.prototype,'intersectOrdered',{value:function(array,comparator){return mergeOrIntersect(this,array,comparator,false);}});Object.defineProperty(Array.prototype,'mergeOrdered',{value:function(array,comparator){return mergeOrIntersect(this,array,comparator,true);}});})();String.sprintf=function(format,var_arg){return String.vsprintf(format,Array.prototype.slice.call(arguments,1));};String.tokenizeFormatString=function(format,formatters){const tokens=[];function addStringToken(str){if(!str){return;}
if(tokens.length&&tokens[tokens.length-1].type==='string'){tokens[tokens.length-1].value+=str;}else{tokens.push({type:'string',value:str});}}
function addSpecifierToken(specifier,precision,substitutionIndex){tokens.push({type:'specifier',specifier:specifier,precision:precision,substitutionIndex:substitutionIndex});}
function addAnsiColor(code){const types={3:'color',9:'colorLight',4:'bgColor',10:'bgColorLight'};const colorCodes=['black','red','green','yellow','blue','magenta','cyan','lightGray','','default'];const colorCodesLight=['darkGray','lightRed','lightGreen','lightYellow','lightBlue','lightMagenta','lightCyan','white',''];const colors={color:colorCodes,colorLight:colorCodesLight,bgColor:colorCodes,bgColorLight:colorCodesLight};const type=types[Math.floor(code/10)];if(!type){return;}
const color=colors[type][code%10];if(!color){return;}
tokens.push({type:'specifier',specifier:'c',value:{description:(type.startsWith('bg')?'background : ':'color: ')+color}});}
let textStart=0;let substitutionIndex=0;const re=new RegExp(`%%|%(?:(\\d+)\\$)?(?:\\.(\\d*))?([${Object.keys(formatters).join('')}])|\\u001b\\[(\\d+)m`,'g');for(let match=re.exec(format);!!match;match=re.exec(format)){const matchStart=match.index;if(matchStart>textStart){addStringToken(format.substring(textStart,matchStart));}
if(match[0]==='%%'){addStringToken('%');}else if(match[0].startsWith('%')){const[_,substitionString,precisionString,specifierString]=match;if(substitionString&&Number(substitionString)>0){substitutionIndex=Number(substitionString)-1;}
const precision=precisionString?Number(precisionString):-1;addSpecifierToken(specifierString,precision,substitutionIndex);++substitutionIndex;}else{const code=Number(match[4]);addAnsiColor(code);}
textStart=matchStart+match[0].length;}
addStringToken(format.substring(textStart));return tokens;};String.standardFormatters={d:function(substitution){return!isNaN(substitution)?substitution:0;},f:function(substitution,token){if(substitution&&token.precision>-1){substitution=substitution.toFixed(token.precision);}
return!isNaN(substitution)?substitution:(token.precision>-1?Number(0).toFixed(token.precision):0);},s:function(substitution){return substitution;}};String.vsprintf=function(format,substitutions){return String.format(format,substitutions,String.standardFormatters,'',function(a,b){return a+b;}).formattedResult;};String.format=function(format,substitutions,formatters,initialValue,append,tokenizedFormat){if(!format||((!substitutions||!substitutions.length)&&format.search(/\u001b\[(\d+)m/)===-1)){return{formattedResult:append(initialValue,format),unusedSubstitutions:substitutions};}
function prettyFunctionName(){return'String.format("'+format+'", "'+Array.prototype.join.call(substitutions,'", "')+'")';}
function warn(msg){console.warn(prettyFunctionName()+': '+msg);}
function error(msg){console.error(prettyFunctionName()+': '+msg);}
let result=initialValue;const tokens=tokenizedFormat||String.tokenizeFormatString(format,formatters);const usedSubstitutionIndexes={};for(let i=0;i<tokens.length;++i){const token=tokens[i];if(token.type==='string'){result=append(result,token.value);continue;}
if(token.type!=='specifier'){error('Unknown token type "'+token.type+'" found.');continue;}
if(!token.value&&token.substitutionIndex>=substitutions.length){error('not enough substitution arguments. Had '+substitutions.length+' but needed '+
(token.substitutionIndex+1)+', so substitution was skipped.');result=append(result,'%'+(token.precision>-1?token.precision:'')+token.specifier);continue;}
if(!token.value){usedSubstitutionIndexes[token.substitutionIndex]=true;}
if(!(token.specifier in formatters)){warn('unsupported format character \u201C'+token.specifier+'\u201D. Treating as a string.');result=append(result,token.value?'':substitutions[token.substitutionIndex]);continue;}
result=append(result,formatters[token.specifier](token.value||substitutions[token.substitutionIndex],token));}
const unusedSubstitutions=[];for(let i=0;i<substitutions.length;++i){if(i in usedSubstitutionIndexes){continue;}
unusedSubstitutions.push(substitutions[i]);}
return{formattedResult:result,unusedSubstitutions:unusedSubstitutions};};self.createSearchRegex=function(query,caseSensitive,isRegex){const regexFlags=caseSensitive?'g':'gi';let regexObject;if(isRegex){try{regexObject=new RegExp(query,regexFlags);}catch(e){}}
if(!regexObject){regexObject=self.createPlainTextSearchRegex(query,regexFlags);}
return regexObject;};self.createPlainTextSearchRegex=function(query,flags){const regexSpecialCharacters=String.regexSpecialCharacters();let regex='';for(let i=0;i<query.length;++i){const c=query.charAt(i);if(regexSpecialCharacters.indexOf(c)!==-1){regex+='\\';}
regex+=c;}
return new RegExp(regex,flags||'');};self.countRegexMatches=function(regex,content){let text=content;let result=0;let match;while(text&&(match=regex.exec(text))){if(match[0].length>0){++result;}
text=text.substring(match.index+1);}
return result;};self.spacesPadding=function(spacesCount){return'\xA0'.repeat(spacesCount);};self.numberToStringWithSpacesPadding=function(value,symbolsCount){const numberString=value.toString();const paddingLength=Math.max(0,symbolsCount-numberString.length);return self.spacesPadding(paddingLength)+numberString;};Set.prototype.valuesArray=function(){return Array.from(this.values());};Set.prototype.firstValue=function(){if(!this.size){return null;}
return this.values().next().value;};Set.prototype.addAll=function(iterable){for(const e of iterable){this.add(e);}};Set.prototype.containsAll=function(iterable){for(const e of iterable){if(!this.has(e)){return false;}}
return true;};Map.prototype.remove=function(key){const value=this.get(key);this.delete(key);return value;};Map.prototype.valuesArray=function(){return Array.from(this.values());};Map.prototype.keysArray=function(){return Array.from(this.keys());};Map.prototype.inverse=function(){const result=new Platform.Multimap();for(const key of this.keys()){const value=this.get(key);result.set(value,key);}
return result;};const Multimap=class{constructor(){this._map=new Map();}
set(key,value){let set=this._map.get(key);if(!set){set=new Set();this._map.set(key,set);}
set.add(value);}
get(key){return this._map.get(key)||new Set();}
has(key){return this._map.has(key);}
hasValue(key,value){const set=this._map.get(key);if(!set){return false;}
return set.has(value);}
get size(){return this._map.size;}
delete(key,value){const values=this.get(key);if(!values){return false;}
const result=values.delete(value);if(!values.size){this._map.delete(key);}
return result;}
deleteAll(key){this._map.delete(key);}
keysArray(){return this._map.keysArray();}
valuesArray(){const result=[];const keys=this.keysArray();for(let i=0;i<keys.length;++i){result.pushAll(this.get(keys[i]).valuesArray());}
return result;}
clear(){this._map.clear();}};self.loadXHR=function(url){return new Promise(load);function load(successCallback,failureCallback){function onReadyStateChanged(){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
if(xhr.status!==200){xhr.onreadystatechange=null;failureCallback(new Error(xhr.status));return;}
xhr.onreadystatechange=null;successCallback(xhr.responseText);}
const xhr=new XMLHttpRequest();xhr.withCredentials=false;xhr.open('GET',url,true);xhr.onreadystatechange=onReadyStateChanged;xhr.send(null);}};self.suppressUnused=function(value){};self.setImmediate=function(callback){const args=[...arguments].slice(1);Promise.resolve().then(()=>callback(...args));return 0;};Promise.prototype.spread=function(callback){return this.then(spreadPromise);function spreadPromise(arg){return callback.apply(null,arg);}};Promise.prototype.catchException=function(defaultValue){return this.catch(function(error){console.error(error);return defaultValue;});};Map.prototype.diff=function(other,isEqual){const leftKeys=this.keysArray();const rightKeys=other.keysArray();leftKeys.sort((a,b)=>a-b);rightKeys.sort((a,b)=>a-b);const removed=[];const added=[];const equal=[];let leftIndex=0;let rightIndex=0;while(leftIndex<leftKeys.length&&rightIndex<rightKeys.length){const leftKey=leftKeys[leftIndex];const rightKey=rightKeys[rightIndex];if(leftKey===rightKey&&isEqual(this.get(leftKey),other.get(rightKey))){equal.push(this.get(leftKey));++leftIndex;++rightIndex;continue;}
if(leftKey<=rightKey){removed.push(this.get(leftKey));++leftIndex;continue;}
added.push(other.get(rightKey));++rightIndex;}
while(leftIndex<leftKeys.length){const leftKey=leftKeys[leftIndex++];removed.push(this.get(leftKey));}
while(rightIndex<rightKeys.length){const rightKey=rightKeys[rightIndex++];added.push(other.get(rightKey));}
return{added:added,removed:removed,equal:equal};};self.runOnWindowLoad=function(callback){function windowLoaded(){self.removeEventListener('DOMContentLoaded',windowLoaded,false);callback();}
if(document.readyState==='complete'||document.readyState==='interactive'){callback();}else{self.addEventListener('DOMContentLoaded',windowLoaded,false);}};const _singletonSymbol=Symbol('singleton');self.singleton=function(constructorFunction){if(_singletonSymbol in constructorFunction){return constructorFunction[_singletonSymbol];}
const instance=new constructorFunction();constructorFunction[_singletonSymbol]=instance;return instance;};self.base64ToSize=function(content){if(!content){return 0;}
let size=content.length*3/4;if(content[content.length-1]==='='){size--;}
if(content.length>1&&content[content.length-2]==='='){size--;}
return size;};self.Platform=self.Platform||{};Platform=Platform||{};Platform.Multimap=Multimap;import'./utilities.js';import'./Widget.js';import'./GlassPane.js';import*as Action from'./Action.js';import*as ActionDelegate from'./ActionDelegate.js';import*as ActionRegistry from'./ActionRegistry.js';import*as ARIAUtils from'./ARIAUtils.js';import*as Context from'./Context.js';import*as ContextFlavorListener from'./ContextFlavorListener.js';import*as ContextMenu from'./ContextMenu.js';import*as Dialog from'./Dialog.js';import*as DropTarget from'./DropTarget.js';import*as EmptyWidget from'./EmptyWidget.js';import*as FilterBar from'./FilterBar.js';import*as FilterSuggestionBuilder from'./FilterSuggestionBuilder.js';import*as ForwardedInputEventHandler from'./ForwardedInputEventHandler.js';import*as Fragment from'./Fragment.js';import*as Geometry from'./Geometry.js';import*as GlassPane from'./GlassPane.js';import*as HistoryInput from'./HistoryInput.js';import*as Icon from'./Icon.js';import*as Infobar from'./Infobar.js';import*as InplaceEditor from'./InplaceEditor.js';import*as InspectorView from'./InspectorView.js';import*as KeyboardShortcut from'./KeyboardShortcut.js';import*as ListControl from'./ListControl.js';import*as ListModel from'./ListModel.js';import*as ListWidget from'./ListWidget.js';import*as Panel from'./Panel.js';import*as PopoverHelper from'./PopoverHelper.js';import*as ProgressIndicator from'./ProgressIndicator.js';import*as RemoteDebuggingTerminatedScreen from'./RemoteDebuggingTerminatedScreen.js';import*as ReportView from'./ReportView.js';import*as ResizerWidget from'./ResizerWidget.js';import*as RootView from'./RootView.js';import*as SearchableView from'./SearchableView.js';import*as SegmentedButton from'./SegmentedButton.js';import*as SettingsUI from'./SettingsUI.js';import*as ShortcutRegistry from'./ShortcutRegistry.js';import*as ShortcutsScreen from'./ShortcutsScreen.js';import*as SoftContextMenu from'./SoftContextMenu.js';import*as SoftDropDown from'./SoftDropDown.js';import*as SplitWidget from'./SplitWidget.js';import*as SuggestBox from'./SuggestBox.js';import*as SyntaxHighlighter from'./SyntaxHighlighter.js';import*as TabbedPane from'./TabbedPane.js';import*as TargetCrashedScreen from'./TargetCrashedScreen.js';import*as TextEditor from'./TextEditor.js';import*as TextPrompt from'./TextPrompt.js';import*as ThrottledWidget from'./ThrottledWidget.js';import*as Toolbar from'./Toolbar.js';import*as Tooltip from'./Tooltip.js';import*as Treeoutline from'./Treeoutline.js';import*as UIUtils from'./UIUtils.js';import*as View from'./View.js';import*as ViewManager from'./ViewManager.js';import*as Widget from'./Widget.js';import*as XElement from'./XElement.js';import*as XLink from'./XLink.js';import*as XWidget from'./XWidget.js';import*as ZoomManager from'./ZoomManager.js';export{Action,ActionDelegate,ActionRegistry,ARIAUtils,Context,ContextFlavorListener,ContextMenu,Dialog,DropTarget,EmptyWidget,FilterBar,FilterSuggestionBuilder,ForwardedInputEventHandler,Fragment,Geometry,GlassPane,HistoryInput,Icon,Infobar,InplaceEditor,InspectorView,KeyboardShortcut,ListControl,ListModel,ListWidget,Panel,PopoverHelper,ProgressIndicator,RemoteDebuggingTerminatedScreen,ReportView,ResizerWidget,RootView,SearchableView,SegmentedButton,SettingsUI,ShortcutRegistry,ShortcutsScreen,SoftContextMenu,SoftDropDown,SplitWidget,SuggestBox,SyntaxHighlighter,TabbedPane,TargetCrashedScreen,TextEditor,TextPrompt,ThrottledWidget,Toolbar,Tooltip,Treeoutline,UIUtils,View,ViewManager,Widget,XElement,XLink,XWidget,ZoomManager,};export default class ZoomManager extends Common.Object{constructor(window,frontendHost){super();this._frontendHost=frontendHost;this._zoomFactor=this._frontendHost.zoomFactor();window.addEventListener('resize',this._onWindowResize.bind(this),true);}
zoomFactor(){return this._zoomFactor;}
cssToDIP(value){return value*this._zoomFactor;}
dipToCSS(valueDIP){return valueDIP/this._zoomFactor;}
_onWindowResize(){const oldZoomFactor=this._zoomFactor;this._zoomFactor=this._frontendHost.zoomFactor();if(oldZoomFactor!==this._zoomFactor){this.dispatchEventToListeners(Events.ZoomChanged,{from:oldZoomFactor,to:this._zoomFactor});}}}
export const Events={ZoomChanged:Symbol('ZoomChanged')};self.UI=self.UI||{};UI=UI||{};UI.ZoomManager=ZoomManager;UI.ZoomManager.Events=Events;UI.zoomManager;export default class XWidget extends UI.XElement{constructor(){super();this.style.setProperty('display','flex');this.style.setProperty('flex-direction','column');this.style.setProperty('align-items','stretch');this.style.setProperty('justify-content','flex-start');this.style.setProperty('contain','layout style');this._visible=false;this._shadowRoot;this._defaultFocusedElement=null;this._elementsToRestoreScrollPositionsFor=[];this._onShownCallback;this._onHiddenCallback;this._onResizedCallback;if(!XWidget._observer){XWidget._observer=new ResizeObserver(entries=>{for(const entry of entries){if(entry.target._visible&&entry.target._onResizedCallback){entry.target._onResizedCallback.call(null);}}});}
XWidget._observer.observe(this);this.setElementsToRestoreScrollPositionsFor([this]);}
static focusWidgetForNode(node){node=node&&node.parentNodeOrShadowHost();let widget=null;while(node){if(node instanceof XWidget){if(widget){node._defaultFocusedElement=widget;}
widget=node;}
node=node.parentNodeOrShadowHost();}}
isShowing(){return this._visible;}
registerRequiredCSS(cssFile){UI.appendStyle(this._shadowRoot||this,cssFile);}
setOnShown(callback){this._onShownCallback=callback;}
setOnHidden(callback){this._onHiddenCallback=callback;}
setOnResized(callback){this._onResizedCallback=callback;}
setElementsToRestoreScrollPositionsFor(elements){for(const element of this._elementsToRestoreScrollPositionsFor){element.removeEventListener('scroll',XWidget._storeScrollPosition,{passive:true,capture:false});}
this._elementsToRestoreScrollPositionsFor=elements;for(const element of this._elementsToRestoreScrollPositionsFor){element.addEventListener('scroll',XWidget._storeScrollPosition,{passive:true,capture:false});}}
restoreScrollPositions(){for(const element of this._elementsToRestoreScrollPositionsFor){if(element._scrollTop){element.scrollTop=element._scrollTop;}
if(element._scrollLeft){element.scrollLeft=element._scrollLeft;}}}
static _storeScrollPosition(event){const element=event.currentTarget;element._scrollTop=element.scrollTop;element._scrollLeft=element.scrollLeft;}
setDefaultFocusedElement(element){if(element&&!this.isSelfOrAncestor(element)){throw new Error('Default focus must be descendant');}
this._defaultFocusedElement=element;}
focus(){if(!this._visible){return;}
let element;if(this._defaultFocusedElement&&this.isSelfOrAncestor(this._defaultFocusedElement)){element=this._defaultFocusedElement;}else if(this.tabIndex!==-1){element=this;}else{let child=this.traverseNextNode(this);while(child){if((child instanceof XWidget)&&child._visible){element=child;break;}
child=child.traverseNextNode(this);}}
if(!element||element.hasFocus()){return;}
if(element===this){HTMLElement.prototype.focus.call(this);}else{element.focus();}}
connectedCallback(){this._visible=true;this.restoreScrollPositions();if(this._onShownCallback){this._onShownCallback.call(null);}}
disconnectedCallback(){this._visible=false;if(this._onHiddenCallback){this._onHiddenCallback.call(null);}}}
self.customElements.define('x-widget',XWidget);self.UI=self.UI||{};UI=UI||{};UI.XWidget=XWidget;export default class XLink extends UI.XElement{static create(url,linkText,className,preventClick){if(!linkText){linkText=url;}
className=className||'';return UI.html`
        <x-link href='${url}' class='${className} devtools-link' ${preventClick ? 'no-click' : ''}
        >${linkText.trimMiddle(UI.MaxLengthForDisplayedURLs)}</x-link>`;}
constructor(){super();this.style.setProperty('display','inline');UI.ARIAUtils.markAsLink(this);this.tabIndex=0;this.target='_blank';this.rel='noopener';this._href=null;this._clickable=true;this._onClick=event=>{event.consume(true);Host.InspectorFrontendHost.openInNewTab((this._href));};this._onKeyDown=event=>{if(isEnterOrSpaceKey(event)){event.consume(true);Host.InspectorFrontendHost.openInNewTab((this._href));}};}
static get observedAttributes(){return UI.XElement.observedAttributes.concat(['href','no-click']);}
attributeChangedCallback(attr,oldValue,newValue){if(attr==='no-click'){this._clickable=!newValue;this._updateClick();return;}
if(attr==='href'){if(!newValue){newValue='';}
let href=null;let url=null;try{url=new URL(newValue);href=url.toString();}catch(error){}
if(url&&url.protocol==='javascript:'){href=null;}
this._href=href;this.title=newValue;this._updateClick();return;}
super.attributeChangedCallback(attr,oldValue,newValue);}
_updateClick(){if(this._href!==null&&this._clickable){this.addEventListener('click',this._onClick,false);this.addEventListener('keydown',this._onKeyDown,false);this.style.setProperty('cursor','pointer');}else{this.removeEventListener('click',this._onClick,false);this.removeEventListener('keydown',this._onKeyDown,false);this.style.removeProperty('cursor');}}}
export class ContextMenuProvider{appendApplicableItems(event,contextMenu,target){let targetNode=(target);while(targetNode&&!(targetNode instanceof XLink)){targetNode=targetNode.parentNodeOrShadowHost();}
if(!targetNode||!targetNode._href){return;}
contextMenu.revealSection().appendItem(UI.openLinkExternallyLabel(),()=>Host.InspectorFrontendHost.openInNewTab(targetNode._href));contextMenu.revealSection().appendItem(UI.copyLinkAddressLabel(),()=>Host.InspectorFrontendHost.copyText(targetNode._href));}}
self.customElements.define('x-link',XLink);self.UI=self.UI||{};UI=UI||{};UI.XLink=XLink;UI.XLink.ContextMenuProvider=ContextMenuProvider;export default class XElement extends HTMLElement{static get observedAttributes(){return['flex','padding','padding-top','padding-bottom','padding-left','padding-right','margin','margin-top','margin-bottom','margin-left','margin-right','overflow','overflow-x','overflow-y','font-size','color','background','background-color','border','border-top','border-bottom','border-left','border-right','max-width','max-height'];}
attributeChangedCallback(attr,oldValue,newValue){if(attr==='flex'){if(newValue===null){this.style.removeProperty('flex');}else if(newValue==='initial'||newValue==='auto'||newValue==='none'||newValue.indexOf(' ')!==-1){this.style.setProperty('flex',newValue);}else{this.style.setProperty('flex','0 0 '+newValue);}
return;}
if(newValue===null){this.style.removeProperty(attr);if(attr.startsWith('padding-')||attr.startsWith('margin-')||attr.startsWith('border-')||attr.startsWith('background-')||attr.startsWith('overflow-')){const shorthand=attr.substring(0,attr.indexOf('-'));const shorthandValue=this.getAttribute(shorthand);if(shorthandValue!==null){this.style.setProperty(shorthand,shorthandValue);}}}else{this.style.setProperty(attr,newValue);}}}
class _XBox extends XElement{constructor(direction){super();this.style.setProperty('display','flex');this.style.setProperty('flex-direction',direction);this.style.setProperty('justify-content','flex-start');}
static get observedAttributes(){return super.observedAttributes.concat(['x-start','x-center','x-stretch','x-baseline','justify-content']);}
attributeChangedCallback(attr,oldValue,newValue){if(attr==='x-start'||attr==='x-center'||attr==='x-stretch'||attr==='x-baseline'){if(newValue===null){this.style.removeProperty('align-items');}else{this.style.setProperty('align-items',attr==='x-start'?'flex-start':attr.substr(2));}
return;}
super.attributeChangedCallback(attr,oldValue,newValue);}}
class XVBox extends _XBox{constructor(){super('column');}}
class XHBox extends _XBox{constructor(){super('row');}}
class XCBox extends XElement{constructor(){super();this.style.setProperty('display','flex');this.style.setProperty('flex-direction','column');this.style.setProperty('justify-content','center');this.style.setProperty('align-items','center');}}
class XDiv extends XElement{constructor(){super();this.style.setProperty('display','block');}}
class XSpan extends XElement{constructor(){super();this.style.setProperty('display','inline');}}
class XText extends XElement{constructor(){super();this.style.setProperty('display','inline');this.style.setProperty('white-space','pre');}}
self.customElements.define('x-vbox',XVBox);self.customElements.define('x-hbox',XHBox);self.customElements.define('x-cbox',XCBox);self.customElements.define('x-div',XDiv);self.customElements.define('x-span',XSpan);self.customElements.define('x-text',XText);self.UI=self.UI||{};UI=UI||{};UI.XElement=XElement;export default class Widget extends Common.Object{constructor(isWebComponent,delegatesFocus){super();this.contentElement=createElementWithClass('div','widget');if(isWebComponent){this.element=createElementWithClass('div','vbox flex-auto');this._shadowRoot=UI.createShadowRootWithCoreStyles(this.element,undefined,delegatesFocus);this._shadowRoot.appendChild(this.contentElement);}else{this.element=this.contentElement;}
this._isWebComponent=isWebComponent;this.element.__widget=this;this._visible=false;this._isRoot=false;this._isShowing=false;this._children=[];this._hideOnDetach=false;this._notificationDepth=0;this._invalidationsSuspended=0;this._defaultFocusedChild=null;}
static _incrementWidgetCounter(parentElement,childElement){const count=(childElement.__widgetCounter||0)+(childElement.__widget?1:0);if(!count){return;}
while(parentElement){parentElement.__widgetCounter=(parentElement.__widgetCounter||0)+count;parentElement=parentElement.parentElementOrShadowHost();}}
static _decrementWidgetCounter(parentElement,childElement){const count=(childElement.__widgetCounter||0)+(childElement.__widget?1:0);if(!count){return;}
while(parentElement){parentElement.__widgetCounter-=count;parentElement=parentElement.parentElementOrShadowHost();}}
static __assert(condition,message){if(!condition){throw new Error(message);}}
static focusWidgetForNode(node){while(node){if(node.__widget){break;}
node=node.parentNodeOrShadowHost();}
if(!node){return;}
let widget=node.__widget;while(widget._parentWidget){widget._parentWidget._defaultFocusedChild=widget;widget=widget._parentWidget;}}
markAsRoot(){Widget.__assert(!this.element.parentElement,'Attempt to mark as root attached node');this._isRoot=true;}
parentWidget(){return this._parentWidget;}
children(){return this._children;}
childWasDetached(widget){}
isShowing(){return this._isShowing;}
shouldHideOnDetach(){if(!this.element.parentElement){return false;}
if(this._hideOnDetach){return true;}
for(const child of this._children){if(child.shouldHideOnDetach()){return true;}}
return false;}
setHideOnDetach(){this._hideOnDetach=true;}
_inNotification(){return!!this._notificationDepth||(this._parentWidget&&this._parentWidget._inNotification());}
_parentIsShowing(){if(this._isRoot){return true;}
return!!this._parentWidget&&this._parentWidget.isShowing();}
_callOnVisibleChildren(method){const copy=this._children.slice();for(let i=0;i<copy.length;++i){if(copy[i]._parentWidget===this&&copy[i]._visible){method.call(copy[i]);}}}
_processWillShow(){this._callOnVisibleChildren(this._processWillShow);this._isShowing=true;}
_processWasShown(){if(this._inNotification()){return;}
this.restoreScrollPositions();this._notify(this.wasShown);this._callOnVisibleChildren(this._processWasShown);}
_processWillHide(){if(this._inNotification()){return;}
this.storeScrollPositions();this._callOnVisibleChildren(this._processWillHide);this._notify(this.willHide);this._isShowing=false;}
_processWasHidden(){this._callOnVisibleChildren(this._processWasHidden);}
_processOnResize(){if(this._inNotification()){return;}
if(!this.isShowing()){return;}
this._notify(this.onResize);this._callOnVisibleChildren(this._processOnResize);}
_notify(notification){++this._notificationDepth;try{notification.call(this);}finally{--this._notificationDepth;}}
wasShown(){}
willHide(){}
onResize(){}
onLayout(){}
ownerViewDisposed(){}
show(parentElement,insertBefore){Widget.__assert(parentElement,'Attempt to attach widget with no parent element');if(!this._isRoot){let currentParent=parentElement;while(currentParent&&!currentParent.__widget){currentParent=currentParent.parentElementOrShadowHost();}
Widget.__assert(currentParent,'Attempt to attach widget to orphan node');this._attach(currentParent.__widget);}
this._showWidget(parentElement,insertBefore);}
_attach(parentWidget){if(parentWidget===this._parentWidget){return;}
if(this._parentWidget){this.detach();}
this._parentWidget=parentWidget;this._parentWidget._children.push(this);this._isRoot=false;}
showWidget(){if(this._visible){return;}
Widget.__assert(this.element.parentElement,'Attempt to show widget that is not hidden using hideWidget().');this._showWidget((this.element.parentElement),this.element.nextSibling);}
_showWidget(parentElement,insertBefore){let currentParent=parentElement;while(currentParent&&!currentParent.__widget){currentParent=currentParent.parentElementOrShadowHost();}
if(this._isRoot){Widget.__assert(!currentParent,'Attempt to show root widget under another widget');}else{Widget.__assert(currentParent&&currentParent.__widget===this._parentWidget,'Attempt to show under node belonging to alien widget');}
const wasVisible=this._visible;if(wasVisible&&this.element.parentElement===parentElement){return;}
this._visible=true;if(!wasVisible&&this._parentIsShowing()){this._processWillShow();}
this.element.classList.remove('hidden');if(this.element.parentElement!==parentElement){if(!this._externallyManaged){Widget._incrementWidgetCounter(parentElement,this.element);}
if(insertBefore){Widget._originalInsertBefore.call(parentElement,this.element,insertBefore);}else{Widget._originalAppendChild.call(parentElement,this.element);}}
if(!wasVisible&&this._parentIsShowing()){this._processWasShown();}
if(this._parentWidget&&this._hasNonZeroConstraints()){this._parentWidget.invalidateConstraints();}else{this._processOnResize();}}
hideWidget(){if(!this._visible){return;}
this._hideWidget(false);}
_hideWidget(removeFromDOM){this._visible=false;const parentElement=this.element.parentElement;if(this._parentIsShowing()){this._processWillHide();}
if(removeFromDOM){Widget._decrementWidgetCounter(parentElement,this.element);Widget._originalRemoveChild.call(parentElement,this.element);}else{this.element.classList.add('hidden');}
if(this._parentIsShowing()){this._processWasHidden();}
if(this._parentWidget&&this._hasNonZeroConstraints()){this._parentWidget.invalidateConstraints();}}
detach(overrideHideOnDetach){if(!this._parentWidget&&!this._isRoot){return;}
const removeFromDOM=overrideHideOnDetach||!this.shouldHideOnDetach();if(this._visible){this._hideWidget(removeFromDOM);}else if(removeFromDOM&&this.element.parentElement){const parentElement=this.element.parentElement;Widget._decrementWidgetCounter(parentElement,this.element);Widget._originalRemoveChild.call(parentElement,this.element);}
if(this._parentWidget){const childIndex=this._parentWidget._children.indexOf(this);Widget.__assert(childIndex>=0,'Attempt to remove non-child widget');this._parentWidget._children.splice(childIndex,1);if(this._parentWidget._defaultFocusedChild===this){this._parentWidget._defaultFocusedChild=null;}
this._parentWidget.childWasDetached(this);this._parentWidget=null;}else{Widget.__assert(this._isRoot,'Removing non-root widget from DOM');}}
detachChildWidgets(){const children=this._children.slice();for(let i=0;i<children.length;++i){children[i].detach();}}
elementsToRestoreScrollPositionsFor(){return[this.element];}
storeScrollPositions(){const elements=this.elementsToRestoreScrollPositionsFor();for(let i=0;i<elements.length;++i){const container=elements[i];container._scrollTop=container.scrollTop;container._scrollLeft=container.scrollLeft;}}
restoreScrollPositions(){const elements=this.elementsToRestoreScrollPositionsFor();for(let i=0;i<elements.length;++i){const container=elements[i];if(container._scrollTop){container.scrollTop=container._scrollTop;}
if(container._scrollLeft){container.scrollLeft=container._scrollLeft;}}}
doResize(){if(!this.isShowing()){return;}
if(!this._inNotification()){this._callOnVisibleChildren(this._processOnResize);}}
doLayout(){if(!this.isShowing()){return;}
this._notify(this.onLayout);this.doResize();}
registerRequiredCSS(cssFile){UI.appendStyle(this._isWebComponent?this._shadowRoot:this.element,cssFile);}
printWidgetHierarchy(){const lines=[];this._collectWidgetHierarchy('',lines);console.log(lines.join('\n'));}
_collectWidgetHierarchy(prefix,lines){lines.push(prefix+'['+this.element.className+']'+(this._children.length?' {':''));for(let i=0;i<this._children.length;++i){this._children[i]._collectWidgetHierarchy(prefix+'    ',lines);}
if(this._children.length){lines.push(prefix+'}');}}
setDefaultFocusedElement(element){this._defaultFocusedElement=element;}
setDefaultFocusedChild(child){Widget.__assert(child._parentWidget===this,'Attempt to set non-child widget as default focused.');this._defaultFocusedChild=child;}
focus(){if(!this.isShowing()){return;}
const element=this._defaultFocusedElement;if(element){if(!element.hasFocus()){element.focus();}
return;}
if(this._defaultFocusedChild&&this._defaultFocusedChild._visible){this._defaultFocusedChild.focus();}else{for(const child of this._children){if(child._visible){child.focus();return;}}
let child=this.contentElement.traverseNextNode(this.contentElement);while(child){if(child instanceof UI.XWidget){child.focus();return;}
child=child.traverseNextNode(this.contentElement);}}}
hasFocus(){return this.element.hasFocus();}
calculateConstraints(){return new UI.Constraints();}
constraints(){if(typeof this._constraints!=='undefined'){return this._constraints;}
if(typeof this._cachedConstraints==='undefined'){this._cachedConstraints=this.calculateConstraints();}
return this._cachedConstraints;}
setMinimumAndPreferredSizes(width,height,preferredWidth,preferredHeight){this._constraints=new UI.Constraints(new UI.Size(width,height),new UI.Size(preferredWidth,preferredHeight));this.invalidateConstraints();}
setMinimumSize(width,height){this._constraints=new UI.Constraints(new UI.Size(width,height));this.invalidateConstraints();}
_hasNonZeroConstraints(){const constraints=this.constraints();return!!(constraints.minimum.width||constraints.minimum.height||constraints.preferred.width||constraints.preferred.height);}
suspendInvalidations(){++this._invalidationsSuspended;}
resumeInvalidations(){--this._invalidationsSuspended;if(!this._invalidationsSuspended&&this._invalidationsRequested){this.invalidateConstraints();}}
invalidateConstraints(){if(this._invalidationsSuspended){this._invalidationsRequested=true;return;}
this._invalidationsRequested=false;const cached=this._cachedConstraints;delete this._cachedConstraints;const actual=this.constraints();if(!actual.isEqual(cached)&&this._parentWidget){this._parentWidget.invalidateConstraints();}else{this.doLayout();}}
markAsExternallyManaged(){Widget.__assert(!this._parentWidget,'Attempt to mark widget as externally managed after insertion to the DOM');this._externallyManaged=true;}}
export const _originalAppendChild=Element.prototype.appendChild;export const _originalInsertBefore=Element.prototype.insertBefore;export const _originalRemoveChild=Element.prototype.removeChild;export const _originalRemoveChildren=Element.prototype.removeChildren;export class VBox extends Widget{constructor(isWebComponent,delegatesFocus){super(isWebComponent,delegatesFocus);this.contentElement.classList.add('vbox');}
calculateConstraints(){let constraints=new UI.Constraints();function updateForChild(){const child=this.constraints();constraints=constraints.widthToMax(child);constraints=constraints.addHeight(child);}
this._callOnVisibleChildren(updateForChild);return constraints;}}
export class HBox extends Widget{constructor(isWebComponent){super(isWebComponent);this.contentElement.classList.add('hbox');}
calculateConstraints(){let constraints=new UI.Constraints();function updateForChild(){const child=this.constraints();constraints=constraints.addWidth(child);constraints=constraints.heightToMax(child);}
this._callOnVisibleChildren(updateForChild);return constraints;}}
export class VBoxWithResizeCallback extends VBox{constructor(resizeCallback){super();this._resizeCallback=resizeCallback;}
onResize(){this._resizeCallback();}}
export class WidgetFocusRestorer{constructor(widget){this._widget=widget;this._previous=widget.element.ownerDocument.deepActiveElement();widget.focus();}
restore(){if(!this._widget){return;}
if(this._widget.hasFocus()&&this._previous){this._previous.focus();}
this._previous=null;this._widget=null;}}
Element.prototype.appendChild=function(child){Widget.__assert(!child.__widget||child.parentElement===this,'Attempt to add widget via regular DOM operation.');return Widget._originalAppendChild.call(this,child);};Element.prototype.insertBefore=function(child,anchor){Widget.__assert(!child.__widget||child.parentElement===this,'Attempt to add widget via regular DOM operation.');return Widget._originalInsertBefore.call(this,child,anchor);};Element.prototype.removeChild=function(child){Widget.__assert(!child.__widgetCounter&&!child.__widget,'Attempt to remove element containing widget via regular DOM operation');return Widget._originalRemoveChild.call(this,child);};Element.prototype.removeChildren=function(){Widget.__assert(!this.__widgetCounter,'Attempt to remove element containing widget via regular DOM operation');Widget._originalRemoveChildren.call(this);};self.UI=self.UI||{};UI=UI||{};UI.Widget=Widget;Widget._originalAppendChild=_originalAppendChild;Widget._originalInsertBefore=_originalInsertBefore;Widget._originalRemoveChild=_originalRemoveChild;Widget._originalRemoveChildren=_originalRemoveChildren;UI.HBox=HBox;UI.VBox=VBox;UI.WidgetFocusRestorer=WidgetFocusRestorer;UI.VBoxWithResizeCallback=VBoxWithResizeCallback;export default class View{viewId(){}
title(){}
isCloseable(){}
isTransient(){}
toolbarItems(){}
widget(){}
disposeView(){}}
export const _symbol=Symbol('view');export const _widgetSymbol=Symbol('widget');export class SimpleView extends UI.VBox{constructor(title,isWebComponent){super(isWebComponent);this._title=title;this._toolbarItems=[];this[_symbol]=this;}
viewId(){return this._title;}
title(){return this._title;}
isCloseable(){return false;}
isTransient(){return false;}
toolbarItems(){return Promise.resolve(this.syncToolbarItems());}
syncToolbarItems(){return this._toolbarItems;}
widget(){return(Promise.resolve(this));}
addToolbarItem(item){this._toolbarItems.push(item);}
revealView(){return UI.viewManager.revealView(this);}
disposeView(){}}
export class ProvidedView{constructor(extension){this._extension=extension;}
viewId(){return this._extension.descriptor()['id'];}
title(){return this._extension.title();}
isCloseable(){return this._extension.descriptor()['persistence']==='closeable';}
isTransient(){return this._extension.descriptor()['persistence']==='transient';}
toolbarItems(){const actionIds=this._extension.descriptor()['actionIds'];if(actionIds){const result=actionIds.split(',').map(id=>UI.Toolbar.createActionButtonForId(id.trim()));return Promise.resolve(result);}
if(this._extension.descriptor()['hasToolbar']){return this.widget().then(widget=>(widget).toolbarItems());}
return Promise.resolve([]);}
async widget(){this._widgetRequested=true;const widget=await this._extension.instance();if(!(widget instanceof UI.Widget)){throw new Error('view className should point to a UI.Widget');}
widget[_symbol]=this;return(widget);}
async disposeView(){if(!this._widgetRequested){return;}
const widget=await this.widget();widget.ownerViewDisposed();}}
export class ViewLocation{appendApplicableItems(locationName){}
appendView(view,insertBefore){}
showView(view,insertBefore,userGesture){}
removeView(view){}
widget(){}}
export class TabbedViewLocation extends ViewLocation{tabbedPane(){}
enableMoreTabsButton(){}}
export class ViewLocationResolver{resolveLocation(location){}}
self.UI=self.UI||{};UI=UI||{};UI.View=View;UI.View.widgetSymbol=_widgetSymbol;UI.SimpleView=SimpleView;UI.ProvidedView=ProvidedView;UI.ViewLocation=ViewLocation;UI.TabbedViewLocation=TabbedViewLocation;UI.ViewLocationResolver=ViewLocationResolver;export default class ViewManager{constructor(){this._views=new Map();this._locationNameByViewId=new Map();for(const extension of self.runtime.extensions('view')){const descriptor=extension.descriptor();this._views.set(descriptor['id'],new UI.ProvidedView(extension));this._locationNameByViewId.set(descriptor['id'],descriptor['location']);}}
static _createToolbar(toolbarItems){if(!toolbarItems.length){return null;}
const toolbar=new UI.Toolbar('');for(const item of toolbarItems){toolbar.appendToolbarItem(item);}
return toolbar.element;}
revealView(view){const location=(view[_Location.symbol]);if(!location){return Promise.resolve();}
location._reveal();return location.showView(view);}
view(viewId){return this._views.get(viewId);}
materializedWidget(viewId){const view=this.view(viewId);return view?view[UI.View.widgetSymbol]:null;}
showView(viewId,userGesture,omitFocus){const view=this._views.get(viewId);if(!view){console.error('Could not find view for id: \''+viewId+'\' '+new Error().stack);return Promise.resolve();}
const locationName=this._locationNameByViewId.get(viewId);const location=view[_Location.symbol];if(location){location._reveal();return location.showView(view,undefined,userGesture,omitFocus);}
return this.resolveLocation(locationName).then(location=>{if(!location){throw new Error('Could not resolve location for view: '+viewId);}
location._reveal();return location.showView(view,undefined,userGesture,omitFocus);});}
resolveLocation(location){if(!location){return(Promise.resolve(null));}
const resolverExtensions=self.runtime.extensions(UI.ViewLocationResolver).filter(extension=>extension.descriptor()['name']===location);if(!resolverExtensions.length){throw new Error('Unresolved location: '+location);}
const resolverExtension=resolverExtensions[0];return resolverExtension.instance().then(resolver=>(resolver.resolveLocation(location)));}
createTabbedLocation(revealCallback,location,restoreSelection,allowReorder,defaultTab){return new UI.ViewManager._TabbedLocation(this,revealCallback,location,restoreSelection,allowReorder,defaultTab);}
createStackLocation(revealCallback,location){return new _StackLocation(this,revealCallback,location);}
hasViewsForLocation(location){return!!this._viewsForLocation(location).length;}
_viewsForLocation(location){const result=[];for(const id of this._views.keys()){if(this._locationNameByViewId.get(id)===location){result.push(this._views.get(id));}}
return result;}}
export class _ContainerWidget extends UI.VBox{constructor(view){super();this.element.classList.add('flex-auto','view-container','overflow-auto');this._view=view;this.element.tabIndex=-1;UI.ARIAUtils.markAsTabpanel(this.element);UI.ARIAUtils.setAccessibleName(this.element,ls`${view.title()} panel`);this.setDefaultFocusedElement(this.element);}
_materialize(){if(this._materializePromise){return this._materializePromise;}
const promises=[];promises.push(this._view.toolbarItems().then(toolbarItems=>{const toolbarElement=UI.ViewManager._createToolbar(toolbarItems);if(toolbarElement){this.element.insertBefore(toolbarElement,this.element.firstChild);}}));promises.push(this._view.widget().then(widget=>{const shouldFocus=this.element.hasFocus();this.setDefaultFocusedElement(null);this._view[UI.View.widgetSymbol]=widget;widget.show(this.element);if(shouldFocus){widget.focus();}}));this._materializePromise=Promise.all(promises);return this._materializePromise;}
wasShown(){this._materialize().then(()=>{this._wasShownForTest();});}
_wasShownForTest(){}}
export class _ExpandableContainerWidget extends UI.VBox{constructor(view){super(true);this.element.classList.add('flex-none');this.registerRequiredCSS('ui/viewContainers.css');this._titleElement=createElementWithClass('div','expandable-view-title');UI.ARIAUtils.markAsButton(this._titleElement);this._titleExpandIcon=UI.Icon.create('smallicon-triangle-right','title-expand-icon');this._titleElement.appendChild(this._titleExpandIcon);const titleText=view.title();this._titleElement.createTextChild(titleText);UI.ARIAUtils.setAccessibleName(this._titleElement,titleText);this._titleElement.tabIndex=0;self.onInvokeElement(this._titleElement,this._toggleExpanded.bind(this));this._titleElement.addEventListener('keydown',this._onTitleKeyDown.bind(this),false);this.contentElement.insertBefore(this._titleElement,this.contentElement.firstChild);UI.ARIAUtils.setControls(this._titleElement,this.contentElement.createChild('slot'));this._view=view;view[UI.ViewManager._ExpandableContainerWidget._symbol]=this;}
_materialize(){if(this._materializePromise){return this._materializePromise;}
const promises=[];promises.push(this._view.toolbarItems().then(toolbarItems=>{const toolbarElement=UI.ViewManager._createToolbar(toolbarItems);if(toolbarElement){this._titleElement.appendChild(toolbarElement);}}));promises.push(this._view.widget().then(widget=>{this._widget=widget;this._view[UI.View.widgetSymbol]=widget;widget.show(this.element);}));this._materializePromise=Promise.all(promises);return this._materializePromise;}
_expand(){if(this._titleElement.classList.contains('expanded')){return this._materialize();}
this._titleElement.classList.add('expanded');UI.ARIAUtils.setExpanded(this._titleElement,true);this._titleExpandIcon.setIconType('smallicon-triangle-down');return this._materialize().then(()=>this._widget.show(this.element));}
_collapse(){if(!this._titleElement.classList.contains('expanded')){return;}
this._titleElement.classList.remove('expanded');UI.ARIAUtils.setExpanded(this._titleElement,false);this._titleExpandIcon.setIconType('smallicon-triangle-right');this._materialize().then(()=>this._widget.detach());}
_toggleExpanded(event){if(event.type==='keydown'&&event.target!==this._titleElement){return;}
if(this._titleElement.classList.contains('expanded')){this._collapse();}else{this._expand();}}
_onTitleKeyDown(event){if(event.target!==this._titleElement){return;}
if(event.key==='ArrowLeft'){this._collapse();}else if(event.key==='ArrowRight'){if(!this._titleElement.classList.contains('expanded')){this._expand();}else if(this._widget){this._widget.focus();}}}}
_ExpandableContainerWidget._symbol=Symbol('container');class _Location{constructor(manager,widget,revealCallback){this._manager=manager;this._revealCallback=revealCallback;this._widget=widget;}
widget(){return this._widget;}
_reveal(){if(this._revealCallback){this._revealCallback();}}}
_Location.symbol=Symbol('location');export class _TabbedLocation extends _Location{constructor(manager,revealCallback,location,restoreSelection,allowReorder,defaultTab){const tabbedPane=new UI.TabbedPane();if(allowReorder){tabbedPane.setAllowTabReorder(true);}
super(manager,tabbedPane,revealCallback);this._tabbedPane=tabbedPane;this._allowReorder=allowReorder;this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected,this._tabSelected,this);this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabClosed,this._tabClosed,this);this._closeableTabSetting=Common.settings.createSetting(location+'-closeableTabs',{});this._tabOrderSetting=Common.settings.createSetting(location+'-tabOrder',{});this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabOrderChanged,this._persistTabOrder,this);if(restoreSelection){this._lastSelectedTabSetting=Common.settings.createSetting(location+'-selectedTab','');}
this._defaultTab=defaultTab;this._views=new Map();if(location){this.appendApplicableItems(location);}}
widget(){return this._tabbedPane;}
tabbedPane(){return this._tabbedPane;}
enableMoreTabsButton(){const moreTabsButton=new UI.ToolbarMenuButton(this._appendTabsToMenu.bind(this));this._tabbedPane.leftToolbar().appendToolbarItem(moreTabsButton);this._tabbedPane.disableOverflowMenu();return moreTabsButton;}
appendApplicableItems(locationName){const views=this._manager._viewsForLocation(locationName);if(this._allowReorder){let i=0;const persistedOrders=this._tabOrderSetting.get();const orders=new Map();for(const view of views){orders.set(view.viewId(),persistedOrders[view.viewId()]||(++i)*UI.ViewManager._TabbedLocation.orderStep);}
views.sort((a,b)=>orders.get(a.viewId())-orders.get(b.viewId()));}
for(const view of views){const id=view.viewId();this._views.set(id,view);view[_Location.symbol]=this;if(view.isTransient()){continue;}
if(!view.isCloseable()){this._appendTab(view);}else if(this._closeableTabSetting.get()[id]){this._appendTab(view);}}
if(this._defaultTab&&this._tabbedPane.hasTab(this._defaultTab)){this._tabbedPane.selectTab(this._defaultTab);}else if(this._lastSelectedTabSetting&&this._tabbedPane.hasTab(this._lastSelectedTabSetting.get())){this._tabbedPane.selectTab(this._lastSelectedTabSetting.get());}}
_appendTabsToMenu(contextMenu){const views=Array.from(this._views.values());views.sort((viewa,viewb)=>viewa.title().localeCompare(viewb.title()));for(const view of views){const title=Common.UIString(view.title());contextMenu.defaultSection().appendItem(title,this.showView.bind(this,view,undefined,true));}}
_appendTab(view,index){this._tabbedPane.appendTab(view.viewId(),view.title(),new UI.ViewManager._ContainerWidget(view),undefined,false,view.isCloseable()||view.isTransient(),index);}
appendView(view,insertBefore){if(this._tabbedPane.hasTab(view.viewId())){return;}
const oldLocation=view[_Location.symbol];if(oldLocation&&oldLocation!==this){oldLocation.removeView(view);}
view[_Location.symbol]=this;this._manager._views.set(view.viewId(),view);this._views.set(view.viewId(),view);let index=undefined;const tabIds=this._tabbedPane.tabIds();if(this._allowReorder){const orderSetting=this._tabOrderSetting.get();const order=orderSetting[view.viewId()];for(let i=0;order&&i<tabIds.length;++i){if(orderSetting[tabIds[i]]&&orderSetting[tabIds[i]]>order){index=i;break;}}}else if(insertBefore){for(let i=0;i<tabIds.length;++i){if(tabIds[i]===insertBefore.viewId()){index=i;break;}}}
this._appendTab(view,index);if(view.isCloseable()){const tabs=this._closeableTabSetting.get();const tabId=view.viewId();if(!tabs[tabId]){tabs[tabId]=true;this._closeableTabSetting.set(tabs);}}
this._persistTabOrder();}
showView(view,insertBefore,userGesture,omitFocus){this.appendView(view,insertBefore);this._tabbedPane.selectTab(view.viewId(),userGesture);if(!omitFocus){this._tabbedPane.focus();}
const widget=(this._tabbedPane.tabView(view.viewId()));return widget._materialize();}
removeView(view){if(!this._tabbedPane.hasTab(view.viewId())){return;}
delete view[_Location.symbol];this._manager._views.delete(view.viewId());this._tabbedPane.closeTab(view.viewId());this._views.delete(view.viewId());}
_tabSelected(event){const tabId=(event.data.tabId);if(this._lastSelectedTabSetting&&event.data['isUserGesture']){this._lastSelectedTabSetting.set(tabId);}}
_tabClosed(event){const id=(event.data['tabId']);const tabs=this._closeableTabSetting.get();if(tabs[id]){delete tabs[id];this._closeableTabSetting.set(tabs);}
this._views.get(id).disposeView();}
_persistTabOrder(){const tabIds=this._tabbedPane.tabIds();const tabOrders={};for(let i=0;i<tabIds.length;i++){tabOrders[tabIds[i]]=(i+1)*UI.ViewManager._TabbedLocation.orderStep;}
const oldTabOrder=this._tabOrderSetting.get();const oldTabArray=Object.keys(oldTabOrder);oldTabArray.sort((a,b)=>oldTabOrder[a]-oldTabOrder[b]);let lastOrder=0;for(const key of oldTabArray){if(key in tabOrders){lastOrder=tabOrders[key];continue;}
tabOrders[key]=++lastOrder;}
this._tabOrderSetting.set(tabOrders);}}
_TabbedLocation.orderStep=10;class _StackLocation extends _Location{constructor(manager,revealCallback,location){const vbox=new UI.VBox();super(manager,vbox,revealCallback);this._vbox=vbox;this._expandableContainers=new Map();if(location){this.appendApplicableItems(location);}}
appendView(view,insertBefore){const oldLocation=view[_Location.symbol];if(oldLocation&&oldLocation!==this){oldLocation.removeView(view);}
let container=this._expandableContainers.get(view.viewId());if(!container){view[_Location.symbol]=this;this._manager._views.set(view.viewId(),view);container=new UI.ViewManager._ExpandableContainerWidget(view);let beforeElement=null;if(insertBefore){const beforeContainer=insertBefore[UI.ViewManager._ExpandableContainerWidget._symbol];beforeElement=beforeContainer?beforeContainer.element:null;}
container.show(this._vbox.contentElement,beforeElement);this._expandableContainers.set(view.viewId(),container);}}
showView(view,insertBefore){this.appendView(view,insertBefore);const container=this._expandableContainers.get(view.viewId());return container._expand();}
removeView(view){const container=this._expandableContainers.get(view.viewId());if(!container){return;}
container.detach();this._expandableContainers.delete(view.viewId());delete view[_Location.symbol];this._manager._views.delete(view.viewId());}
appendApplicableItems(locationName){for(const view of this._manager._viewsForLocation(locationName)){this.appendView(view);}}}
self.UI=self.UI||{};UI=UI||{};UI.viewManager;UI.ViewManager=ViewManager;UI.ViewManager._ContainerWidget=_ContainerWidget;UI.ViewManager._ExpandableContainerWidget=_ExpandableContainerWidget;UI.ViewManager._TabbedLocation=_TabbedLocation;export const highlightedSearchResultClassName='highlighted-search-result';export const highlightedCurrentSearchResultClassName='current-search-result';export function installDragHandle(element,elementDragStart,elementDrag,elementDragEnd,cursor,hoverCursor,startDelay){function onMouseDown(event){const dragHandler=new DragHandler();const dragStart=dragHandler.elementDragStart.bind(dragHandler,element,elementDragStart,elementDrag,elementDragEnd,cursor,event);if(startDelay){startTimer=setTimeout(dragStart,startDelay);}else{dragStart();}}
function onMouseUp(){if(startTimer){clearTimeout(startTimer);}
startTimer=null;}
let startTimer;element.addEventListener('mousedown',onMouseDown,false);if(startDelay){element.addEventListener('mouseup',onMouseUp,false);}
if(hoverCursor!==null){element.style.cursor=hoverCursor||cursor||'';}}
export function elementDragStart(targetElement,elementDragStart,elementDrag,elementDragEnd,cursor,event){const dragHandler=new DragHandler();dragHandler.elementDragStart(targetElement,elementDragStart,elementDrag,elementDragEnd,cursor,event);}
class DragHandler{constructor(){this._elementDragMove=this._elementDragMove.bind(this);this._elementDragEnd=this._elementDragEnd.bind(this);this._mouseOutWhileDragging=this._mouseOutWhileDragging.bind(this);}
_createGlassPane(){this._glassPaneInUse=true;if(!DragHandler._glassPaneUsageCount++){DragHandler._glassPane=new UI.GlassPane();DragHandler._glassPane.setPointerEventsBehavior(UI.GlassPane.PointerEventsBehavior.BlockedByGlassPane);DragHandler._glassPane.show(DragHandler._documentForMouseOut);}}
_disposeGlassPane(){if(!this._glassPaneInUse){return;}
this._glassPaneInUse=false;if(--DragHandler._glassPaneUsageCount){return;}
DragHandler._glassPane.hide();delete DragHandler._glassPane;delete DragHandler._documentForMouseOut;}
elementDragStart(targetElement,elementDragStart,elementDrag,elementDragEnd,cursor,event){if(event.button||(Host.isMac()&&event.ctrlKey)){return;}
if(this._elementDraggingEventListener){return;}
if(elementDragStart&&!elementDragStart((event))){return;}
const targetDocument=event.target.ownerDocument;this._elementDraggingEventListener=elementDrag;this._elementEndDraggingEventListener=elementDragEnd;console.assert((DragHandler._documentForMouseOut||targetDocument)===targetDocument,'Dragging on multiple documents.');DragHandler._documentForMouseOut=targetDocument;this._dragEventsTargetDocument=targetDocument;try{this._dragEventsTargetDocumentTop=targetDocument.defaultView.top.document;}catch(e){this._dragEventsTargetDocumentTop=this._dragEventsTargetDocument;}
targetDocument.addEventListener('mousemove',this._elementDragMove,true);targetDocument.addEventListener('mouseup',this._elementDragEnd,true);targetDocument.addEventListener('mouseout',this._mouseOutWhileDragging,true);if(targetDocument!==this._dragEventsTargetDocumentTop){this._dragEventsTargetDocumentTop.addEventListener('mouseup',this._elementDragEnd,true);}
if(typeof cursor==='string'){this._restoreCursorAfterDrag=restoreCursor.bind(this,targetElement.style.cursor);targetElement.style.cursor=cursor;targetDocument.body.style.cursor=cursor;}
function restoreCursor(oldCursor){targetDocument.body.style.removeProperty('cursor');targetElement.style.cursor=oldCursor;this._restoreCursorAfterDrag=null;}
event.preventDefault();}
_mouseOutWhileDragging(){this._unregisterMouseOutWhileDragging();this._createGlassPane();}
_unregisterMouseOutWhileDragging(){if(!DragHandler._documentForMouseOut){return;}
DragHandler._documentForMouseOut.removeEventListener('mouseout',this._mouseOutWhileDragging,true);}
_unregisterDragEvents(){if(!this._dragEventsTargetDocument){return;}
this._dragEventsTargetDocument.removeEventListener('mousemove',this._elementDragMove,true);this._dragEventsTargetDocument.removeEventListener('mouseup',this._elementDragEnd,true);if(this._dragEventsTargetDocument!==this._dragEventsTargetDocumentTop){this._dragEventsTargetDocumentTop.removeEventListener('mouseup',this._elementDragEnd,true);}
delete this._dragEventsTargetDocument;delete this._dragEventsTargetDocumentTop;}
_elementDragMove(event){if(event.buttons!==1){this._elementDragEnd(event);return;}
if(this._elementDraggingEventListener((event))){this._cancelDragEvents(event);}}
_cancelDragEvents(event){this._unregisterDragEvents();this._unregisterMouseOutWhileDragging();if(this._restoreCursorAfterDrag){this._restoreCursorAfterDrag();}
this._disposeGlassPane();delete this._elementDraggingEventListener;delete this._elementEndDraggingEventListener;}
_elementDragEnd(event){const elementDragEnd=this._elementEndDraggingEventListener;this._cancelDragEvents((event));event.preventDefault();if(elementDragEnd){elementDragEnd((event));}}}
DragHandler._glassPaneUsageCount=0;export function isBeingEdited(node){if(!node||node.nodeType!==Node.ELEMENT_NODE){return false;}
let element=(node);if(element.classList.contains('text-prompt')||element.nodeName==='INPUT'||element.nodeName==='TEXTAREA'){return true;}
if(!UI.__editingCount){return false;}
while(element){if(element.__editing){return true;}
element=element.parentElementOrShadowHost();}
return false;}
export function isEditing(){if(UI.__editingCount){return true;}
const focused=document.deepActiveElement();if(!focused){return false;}
return focused.classList.contains('text-prompt')||focused.nodeName==='INPUT'||focused.nodeName==='TEXTAREA';}
export function markBeingEdited(element,value){if(value){if(element.__editing){return false;}
element.classList.add('being-edited');element.__editing=true;UI.__editingCount=(UI.__editingCount||0)+1;}else{if(!element.__editing){return false;}
element.classList.remove('being-edited');delete element.__editing;--UI.__editingCount;}
return true;}
const _numberRegex=/^(-?(?:\d+(?:\.\d+)?|\.\d+))$/;export const StyleValueDelimiters=' \xA0\t\n"\':;,/()';function _valueModificationDirection(event){let direction=null;if(event.type==='mousewheel'){if(event.wheelDeltaY>0||event.wheelDeltaX>0){direction='Up';}else if(event.wheelDeltaY<0||event.wheelDeltaX<0){direction='Down';}}else{if(event.key==='ArrowUp'||event.key==='PageUp'){direction='Up';}else if(event.key==='ArrowDown'||event.key==='PageDown'){direction='Down';}}
return direction;}
function _modifiedHexValue(hexString,event){const direction=_valueModificationDirection(event);if(!direction){return null;}
const mouseEvent=(event);const number=parseInt(hexString,16);if(isNaN(number)||!isFinite(number)){return null;}
const hexStrLen=hexString.length;const channelLen=hexStrLen/3;if(channelLen!==1&&channelLen!==2){return null;}
let delta=0;if(UI.KeyboardShortcut.eventHasCtrlOrMeta(mouseEvent)){delta+=Math.pow(16,channelLen*2);}
if(mouseEvent.shiftKey){delta+=Math.pow(16,channelLen);}
if(mouseEvent.altKey){delta+=1;}
if(delta===0){delta=1;}
if(direction==='Down'){delta*=-1;}
const maxValue=Math.pow(16,hexStrLen)-1;const result=Number.constrain(number+delta,0,maxValue);let resultString=result.toString(16).toUpperCase();for(let i=0,lengthDelta=hexStrLen-resultString.length;i<lengthDelta;++i){resultString='0'+resultString;}
return resultString;}
function _modifiedFloatNumber(number,event,modifierMultiplier){const direction=_valueModificationDirection(event);if(!direction){return null;}
const mouseEvent=(event);let delta=1;if(UI.KeyboardShortcut.eventHasCtrlOrMeta(mouseEvent)){delta=100;}else if(mouseEvent.shiftKey){delta=10;}else if(mouseEvent.altKey){delta=0.1;}
if(direction==='Down'){delta*=-1;}
if(modifierMultiplier){delta*=modifierMultiplier;}
const result=Number((number+delta).toFixed(6));if(!String(result).match(_numberRegex)){return null;}
return result;}
export function createReplacementString(wordString,event,customNumberHandler){let prefix;let suffix;let number;let replacementString=null;let matches=/(.*#)([\da-fA-F]+)(.*)/.exec(wordString);if(matches&&matches.length){prefix=matches[1];suffix=matches[3];number=_modifiedHexValue(matches[2],event);if(number!==null){replacementString=prefix+number+suffix;}}else{matches=/(.*?)(-?(?:\d+(?:\.\d+)?|\.\d+))(.*)/.exec(wordString);if(matches&&matches.length){prefix=matches[1];suffix=matches[3];number=_modifiedFloatNumber(parseFloat(matches[2]),event);if(number!==null){replacementString=customNumberHandler?customNumberHandler(prefix,number,suffix):prefix+number+suffix;}}}
return replacementString;}
export function handleElementValueModifications(event,element,finishHandler,suggestionHandler,customNumberHandler){function createRange(){return document.createRange();}
const arrowKeyOrMouseWheelEvent=(event.key==='ArrowUp'||event.key==='ArrowDown'||event.type==='mousewheel');const pageKeyPressed=(event.key==='PageUp'||event.key==='PageDown');if(!arrowKeyOrMouseWheelEvent&&!pageKeyPressed){return false;}
const selection=element.getComponentSelection();if(!selection.rangeCount){return false;}
const selectionRange=selection.getRangeAt(0);if(!selectionRange.commonAncestorContainer.isSelfOrDescendant(element)){return false;}
const originalValue=element.textContent;const wordRange=selectionRange.startContainer.rangeOfWord(selectionRange.startOffset,StyleValueDelimiters,element);const wordString=wordRange.toString();if(suggestionHandler&&suggestionHandler(wordString)){return false;}
const replacementString=createReplacementString(wordString,event,customNumberHandler);if(replacementString){const replacementTextNode=createTextNode(replacementString);wordRange.deleteContents();wordRange.insertNode(replacementTextNode);const finalSelectionRange=createRange();finalSelectionRange.setStart(replacementTextNode,0);finalSelectionRange.setEnd(replacementTextNode,replacementString.length);selection.removeAllRanges();selection.addRange(finalSelectionRange);event.handled=true;event.preventDefault();if(finishHandler){finishHandler(originalValue,replacementString);}
return true;}
return false;}
Number.preciseMillisToString=function(ms,precision){precision=precision||0;const format='%.'+precision+'f\xa0ms';return Common.UIString(format,ms);};export const _microsFormat=new Common.UIStringFormat('%.0f\xa0\u03bcs');export const _subMillisFormat=new Common.UIStringFormat('%.2f\xa0ms');export const _millisFormat=new Common.UIStringFormat('%.0f\xa0ms');export const _secondsFormat=new Common.UIStringFormat('%.2f\xa0s');export const _minutesFormat=new Common.UIStringFormat('%.1f\xa0min');export const _hoursFormat=new Common.UIStringFormat('%.1f\xa0hrs');export const _daysFormat=new Common.UIStringFormat('%.1f\xa0days');Number.millisToString=function(ms,higherResolution){if(!isFinite(ms)){return'-';}
if(ms===0){return'0';}
if(higherResolution&&ms<0.1){return _microsFormat.format(ms*1000);}
if(higherResolution&&ms<1000){return _subMillisFormat.format(ms);}
if(ms<1000){return _millisFormat.format(ms);}
const seconds=ms/1000;if(seconds<60){return _secondsFormat.format(seconds);}
const minutes=seconds/60;if(minutes<60){return _minutesFormat.format(minutes);}
const hours=minutes/60;if(hours<24){return _hoursFormat.format(hours);}
const days=hours/24;return _daysFormat.format(days);};Number.secondsToString=function(seconds,higherResolution){if(!isFinite(seconds)){return'-';}
return Number.millisToString(seconds*1000,higherResolution);};Number.bytesToString=function(bytes){if(bytes<1024){return Common.UIString('%.0f\xa0B',bytes);}
const kilobytes=bytes/1024;if(kilobytes<100){return Common.UIString('%.1f\xa0KB',kilobytes);}
if(kilobytes<1024){return Common.UIString('%.0f\xa0KB',kilobytes);}
const megabytes=kilobytes/1024;if(megabytes<100){return Common.UIString('%.1f\xa0MB',megabytes);}else{return Common.UIString('%.0f\xa0MB',megabytes);}};Number.withThousandsSeparator=function(num){let str=num+'';const re=/(\d+)(\d{3})/;while(str.match(re)){str=str.replace(re,'$1\xa0$2');}
return str;};export function formatLocalized(format,substitutions){const formatters={s:substitution=>substitution};function append(a,b){a.appendChild(typeof b==='string'?createTextNode(b):b);return a;}
return String.format(Common.UIString(format),substitutions,formatters,createElement('span'),append).formattedResult;}
export function openLinkExternallyLabel(){return Common.UIString('Open in new tab');}
export function copyLinkAddressLabel(){return Common.UIString('Copy link address');}
export function anotherProfilerActiveLabel(){return Common.UIString('Another profiler is already active');}
export function asyncStackTraceLabel(description){if(description){if(description==='Promise.resolve'){return ls`Promise resolved (async)`;}else if(description==='Promise.reject'){return ls`Promise rejected (async)`;}
return ls`${description} (async)`;}
return Common.UIString('Async Call');}
export function installComponentRootStyles(element){_injectCoreStyles(element);element.classList.add('platform-'+Host.platform());if(!Host.isMac()&&measuredScrollbarWidth(element.ownerDocument)===0){element.classList.add('overlay-scrollbar-enabled');}}
let _measuredScrollbarWidth;export function measuredScrollbarWidth(document){if(typeof _measuredScrollbarWidth==='number'){return _measuredScrollbarWidth;}
if(!document){return 16;}
const scrollDiv=document.createElement('div');scrollDiv.setAttribute('style','width: 100px; height: 100px; overflow: scroll;');document.body.appendChild(scrollDiv);_measuredScrollbarWidth=scrollDiv.offsetWidth-scrollDiv.clientWidth;document.body.removeChild(scrollDiv);return _measuredScrollbarWidth;}
export function createShadowRootWithCoreStyles(element,cssFile,delegatesFocus){const shadowRoot=element.attachShadow({mode:'open',delegatesFocus});_injectCoreStyles(shadowRoot);if(cssFile){appendStyle(shadowRoot,cssFile);}
shadowRoot.addEventListener('focus',_focusChanged.bind(UI),true);return shadowRoot;}
function _injectCoreStyles(root){appendStyle(root,'ui/inspectorCommon.css');appendStyle(root,'ui/textButton.css');UI.themeSupport.injectHighlightStyleSheets(root);UI.themeSupport.injectCustomStyleSheets(root);}
function _windowFocused(document,event){if(event.target.document.nodeType===Node.DOCUMENT_NODE){document.body.classList.remove('inactive');}
UI._keyboardFocus=true;const listener=()=>{const activeElement=document.deepActiveElement();if(activeElement){activeElement.removeAttribute('data-keyboard-focus');}
UI._keyboardFocus=false;};document.defaultView.requestAnimationFrame(()=>{UI._keyboardFocus=false;document.removeEventListener('mousedown',listener,true);});document.addEventListener('mousedown',listener,true);}
function _windowBlurred(document,event){if(event.target.document.nodeType===Node.DOCUMENT_NODE){document.body.classList.add('inactive');}}
function _focusChanged(event){const document=event.target&&event.target.ownerDocument;const element=document?document.deepActiveElement():null;UI.Widget.focusWidgetForNode(element);UI.XWidget.focusWidgetForNode(element);if(!UI._keyboardFocus){return;}
UI.markAsFocusedByKeyboard(element);}
UI.markAsFocusedByKeyboard=function(element){element.setAttribute('data-keyboard-focus','true');element.addEventListener('blur',()=>element.removeAttribute('data-keyboard-focus'),{once:true,capture:true});};export class ElementFocusRestorer{constructor(element){this._element=element;this._previous=element.ownerDocument.deepActiveElement();element.focus();}
restore(){if(!this._element){return;}
if(this._element.hasFocus()&&this._previous){this._previous.focus();}
this._previous=null;this._element=null;}}
export function highlightSearchResult(element,offset,length,domChanges){const result=highlightSearchResults(element,[new TextUtils.SourceRange(offset,length)],domChanges);return result.length?result[0]:null;}
export function highlightSearchResults(element,resultRanges,changes){return highlightRangesWithStyleClass(element,resultRanges,highlightedSearchResultClassName,changes);}
export function runCSSAnimationOnce(element,className){function animationEndCallback(){element.classList.remove(className);element.removeEventListener('webkitAnimationEnd',animationEndCallback,false);}
if(element.classList.contains(className)){element.classList.remove(className);}
element.addEventListener('webkitAnimationEnd',animationEndCallback,false);element.classList.add(className);}
export function highlightRangesWithStyleClass(element,resultRanges,styleClass,changes){changes=changes||[];const highlightNodes=[];const textNodes=element.childTextNodes();const lineText=textNodes.map(function(node){return node.textContent;}).join('');const ownerDocument=element.ownerDocument;if(textNodes.length===0){return highlightNodes;}
const nodeRanges=[];let rangeEndOffset=0;for(let i=0;i<textNodes.length;++i){const range={};range.offset=rangeEndOffset;range.length=textNodes[i].textContent.length;rangeEndOffset=range.offset+range.length;nodeRanges.push(range);}
let startIndex=0;for(let i=0;i<resultRanges.length;++i){const startOffset=resultRanges[i].offset;const endOffset=startOffset+resultRanges[i].length;while(startIndex<textNodes.length&&nodeRanges[startIndex].offset+nodeRanges[startIndex].length<=startOffset){startIndex++;}
let endIndex=startIndex;while(endIndex<textNodes.length&&nodeRanges[endIndex].offset+nodeRanges[endIndex].length<endOffset){endIndex++;}
if(endIndex===textNodes.length){break;}
const highlightNode=ownerDocument.createElement('span');highlightNode.className=styleClass;highlightNode.textContent=lineText.substring(startOffset,endOffset);const lastTextNode=textNodes[endIndex];const lastText=lastTextNode.textContent;lastTextNode.textContent=lastText.substring(endOffset-nodeRanges[endIndex].offset);changes.push({node:lastTextNode,type:'changed',oldText:lastText,newText:lastTextNode.textContent});if(startIndex===endIndex){lastTextNode.parentElement.insertBefore(highlightNode,lastTextNode);changes.push({node:highlightNode,type:'added',nextSibling:lastTextNode,parent:lastTextNode.parentElement});highlightNodes.push(highlightNode);const prefixNode=ownerDocument.createTextNode(lastText.substring(0,startOffset-nodeRanges[startIndex].offset));lastTextNode.parentElement.insertBefore(prefixNode,highlightNode);changes.push({node:prefixNode,type:'added',nextSibling:highlightNode,parent:lastTextNode.parentElement});}else{const firstTextNode=textNodes[startIndex];const firstText=firstTextNode.textContent;const anchorElement=firstTextNode.nextSibling;firstTextNode.parentElement.insertBefore(highlightNode,anchorElement);changes.push({node:highlightNode,type:'added',nextSibling:anchorElement,parent:firstTextNode.parentElement});highlightNodes.push(highlightNode);firstTextNode.textContent=firstText.substring(0,startOffset-nodeRanges[startIndex].offset);changes.push({node:firstTextNode,type:'changed',oldText:firstText,newText:firstTextNode.textContent});for(let j=startIndex+1;j<endIndex;j++){const textNode=textNodes[j];const text=textNode.textContent;textNode.textContent='';changes.push({node:textNode,type:'changed',oldText:text,newText:textNode.textContent});}}
startIndex=endIndex;nodeRanges[startIndex].offset=endOffset;nodeRanges[startIndex].length=lastTextNode.textContent.length;}
return highlightNodes;}
export function applyDomChanges(domChanges){for(let i=0,size=domChanges.length;i<size;++i){const entry=domChanges[i];switch(entry.type){case'added':entry.parent.insertBefore(entry.node,entry.nextSibling);break;case'changed':entry.node.textContent=entry.newText;break;}}}
export function revertDomChanges(domChanges){for(let i=domChanges.length-1;i>=0;--i){const entry=domChanges[i];switch(entry.type){case'added':entry.node.remove();break;case'changed':entry.node.textContent=entry.oldText;break;}}}
export function measurePreferredSize(element,containerElement){const oldParent=element.parentElement;const oldNextSibling=element.nextSibling;containerElement=containerElement||element.ownerDocument.body;containerElement.appendChild(element);element.positionAt(0,0);const result=element.getBoundingClientRect();element.positionAt(undefined,undefined);if(oldParent){oldParent.insertBefore(element,oldNextSibling);}else{element.remove();}
return new UI.Size(result.width,result.height);}
class InvokeOnceHandlers{constructor(autoInvoke){this._handlers=null;this._autoInvoke=autoInvoke;}
add(object,method){if(!this._handlers){this._handlers=new Map();if(this._autoInvoke){this.scheduleInvoke();}}
let methods=this._handlers.get(object);if(!methods){methods=new Set();this._handlers.set(object,methods);}
methods.add(method);}
scheduleInvoke(){if(this._handlers){requestAnimationFrame(this._invoke.bind(this));}}
_invoke(){const handlers=this._handlers;this._handlers=null;const keys=handlers.keysArray();for(let i=0;i<keys.length;++i){const object=keys[i];const methods=handlers.get(object).valuesArray();for(let j=0;j<methods.length;++j){methods[j].call(object);}}}}
let _coalescingLevel=0;let _postUpdateHandlers=null;export function startBatchUpdate(){if(!_coalescingLevel++){_postUpdateHandlers=new InvokeOnceHandlers(false);}}
export function endBatchUpdate(){if(--_coalescingLevel){return;}
_postUpdateHandlers.scheduleInvoke();_postUpdateHandlers=null;}
export function invokeOnceAfterBatchUpdate(object,method){if(!_postUpdateHandlers){_postUpdateHandlers=new InvokeOnceHandlers(true);}
_postUpdateHandlers.add(object,method);}
export function animateFunction(window,func,params,duration,animationComplete){const start=window.performance.now();let raf=window.requestAnimationFrame(animationStep);function animationStep(timestamp){const progress=Number.constrain((timestamp-start)/duration,0,1);func(...params.map(p=>p.from+(p.to-p.from)*progress));if(progress<1){raf=window.requestAnimationFrame(animationStep);}else if(animationComplete){animationComplete();}}
return()=>window.cancelAnimationFrame(raf);}
export class LongClickController extends Common.Object{constructor(element,callback,isEditKeyFunc=event=>isEnterOrSpaceKey(event)){super();this._element=element;this._callback=callback;this._editKey=isEditKeyFunc;this._enable();}
reset(){if(this._longClickInterval){clearInterval(this._longClickInterval);delete this._longClickInterval;}}
_enable(){if(this._longClickData){return;}
const boundKeyDown=keyDown.bind(this);const boundKeyUp=keyUp.bind(this);const boundMouseDown=mouseDown.bind(this);const boundMouseUp=mouseUp.bind(this);const boundReset=this.reset.bind(this);this._element.addEventListener('keydown',boundKeyDown,false);this._element.addEventListener('keyup',boundKeyUp,false);this._element.addEventListener('mousedown',boundMouseDown,false);this._element.addEventListener('mouseout',boundReset,false);this._element.addEventListener('mouseup',boundMouseUp,false);this._element.addEventListener('click',boundReset,true);this._longClickData={mouseUp:boundMouseUp,mouseDown:boundMouseDown,reset:boundReset};function keyDown(e){if(this._editKey(e)){e.consume(true);const callback=this._callback;this._longClickInterval=setTimeout(callback.bind(null,e),LongClickController.TIME_MS);}}
function keyUp(e){if(this._editKey(e)){e.consume(true);this.reset();}}
function mouseDown(e){if(e.which!==1){return;}
const callback=this._callback;this._longClickInterval=setTimeout(callback.bind(null,e),LongClickController.TIME_MS);}
function mouseUp(e){if(e.which!==1){return;}
this.reset();}}
dispose(){if(!this._longClickData){return;}
this._element.removeEventListener('mousedown',this._longClickData.mouseDown,false);this._element.removeEventListener('mouseout',this._longClickData.reset,false);this._element.removeEventListener('mouseup',this._longClickData.mouseUp,false);this._element.addEventListener('click',this._longClickData.reset,true);delete this._longClickData;}}
LongClickController.TIME_MS=200;export function initializeUIUtils(document,themeSetting){document.body.classList.toggle('inactive',!document.hasFocus());document.defaultView.addEventListener('focus',_windowFocused.bind(UI,document),false);document.defaultView.addEventListener('blur',_windowBlurred.bind(UI,document),false);document.addEventListener('focus',_focusChanged.bind(UI),true);document.addEventListener('keydown',event=>{UI._keyboardFocus=true;document.defaultView.requestAnimationFrame(()=>void(UI._keyboardFocus=false));},true);if(!UI.themeSupport){UI.themeSupport=new ThemeSupport(themeSetting);}
UI.themeSupport.applyTheme(document);const body=(document.body);appendStyle(body,'ui/inspectorStyle.css');UI.GlassPane.setContainer((document.body));}
export function beautifyFunctionName(name){return name||Common.UIString('(anonymous)');}
export function registerCustomElement(localName,typeExtension,definition){self.customElements.define(typeExtension,class extends definition{constructor(){super();this.setAttribute('is',typeExtension);}},{extends:localName});return()=>createElement(localName,typeExtension);}
export function createTextButton(text,clickHandler,className,primary){const element=createElementWithClass('button',className||'');element.textContent=text;element.classList.add('text-button');if(primary){element.classList.add('primary-button');}
if(clickHandler){element.addEventListener('click',clickHandler,false);}
element.type='button';return element;}
export function createInput(className,type){const element=createElementWithClass('input',className||'');element.spellcheck=false;element.classList.add('harmony-input');if(type){element.type=type;}
return element;}
export function createLabel(title,className,associatedControl){const element=createElementWithClass('label',className||'');element.textContent=title;if(associatedControl){UI.ARIAUtils.bindLabelToControl(element,associatedControl);}
return element;}
export function createRadioLabel(name,title,checked){const element=createElement('span','dt-radio');element.radioElement.name=name;element.radioElement.checked=!!checked;element.labelElement.createTextChild(title);return element;}
export function createIconLabel(title,iconClass){const element=createElement('span','dt-icon-label');element.createChild('span').textContent=title;element.type=iconClass;return element;}
export function createSlider(min,max,tabIndex){const element=createElement('span','dt-slider');element.sliderElement.min=min;element.sliderElement.max=max;element.sliderElement.step=1;element.sliderElement.tabIndex=tabIndex;return element;}
export function appendStyle(node,cssFile){const content=Root.Runtime.cachedResources[cssFile]||'';if(!content){console.error(cssFile+' not preloaded. Check module.json');}
let styleElement=createElement('style');styleElement.textContent=content;node.appendChild(styleElement);const themeStyleSheet=UI.themeSupport.themeStyleSheet(cssFile,content);if(themeStyleSheet){styleElement=createElement('style');styleElement.textContent=themeStyleSheet+'\n'+Root.Runtime.resolveSourceURL(cssFile+'.theme');node.appendChild(styleElement);}}
export class CheckboxLabel extends HTMLSpanElement{constructor(){super();this._shadowRoot;this.checkboxElement;this.textElement;CheckboxLabel._lastId=(CheckboxLabel._lastId||0)+1;const id='ui-checkbox-label'+CheckboxLabel._lastId;this._shadowRoot=createShadowRootWithCoreStyles(this,'ui/checkboxTextLabel.css');this.checkboxElement=(this._shadowRoot.createChild('input'));this.checkboxElement.type='checkbox';this.checkboxElement.setAttribute('id',id);this.textElement=this._shadowRoot.createChild('label','dt-checkbox-text');this.textElement.setAttribute('for',id);this._shadowRoot.createChild('slot');}
static create(title,checked,subtitle){if(!CheckboxLabel._constructor){CheckboxLabel._constructor=registerCustomElement('span','dt-checkbox',CheckboxLabel);}
const element=(CheckboxLabel._constructor());element.checkboxElement.checked=!!checked;if(title!==undefined){element.textElement.textContent=title;if(subtitle!==undefined){element.textElement.createChild('div','dt-checkbox-subtitle').textContent=subtitle;}}
return element;}
set backgroundColor(color){this.checkboxElement.classList.add('dt-checkbox-themed');this.checkboxElement.style.backgroundColor=color;}
set checkColor(color){this.checkboxElement.classList.add('dt-checkbox-themed');const stylesheet=createElement('style');stylesheet.textContent='input.dt-checkbox-themed:checked:after { background-color: '+color+'}';this._shadowRoot.appendChild(stylesheet);}
set borderColor(color){this.checkboxElement.classList.add('dt-checkbox-themed');this.checkboxElement.style.borderColor=color;}}
(function(){let labelId=0;registerCustomElement('span','dt-radio',class extends HTMLSpanElement{constructor(){super();this.radioElement=this.createChild('input','dt-radio-button');this.labelElement=this.createChild('label');const id='dt-radio-button-id'+(++labelId);this.radioElement.id=id;this.radioElement.type='radio';this.labelElement.htmlFor=id;const root=createShadowRootWithCoreStyles(this,'ui/radioButton.css');root.createChild('slot');this.addEventListener('click',radioClickHandler,false);}});function radioClickHandler(event){if(this.radioElement.checked||this.radioElement.disabled){return;}
this.radioElement.checked=true;this.radioElement.dispatchEvent(new Event('change'));}
registerCustomElement('span','dt-icon-label',class extends HTMLSpanElement{constructor(){super();const root=createShadowRootWithCoreStyles(this);this._iconElement=UI.Icon.create();this._iconElement.style.setProperty('margin-right','4px');root.appendChild(this._iconElement);root.createChild('slot');}
set type(type){this._iconElement.setIconType(type);}});registerCustomElement('span','dt-slider',class extends HTMLSpanElement{constructor(){super();const root=createShadowRootWithCoreStyles(this,'ui/slider.css');this.sliderElement=createElementWithClass('input','dt-range-input');this.sliderElement.type='range';root.appendChild(this.sliderElement);}
set value(amount){this.sliderElement.value=amount;}
get value(){return this.sliderElement.value;}});registerCustomElement('span','dt-small-bubble',class extends HTMLSpanElement{constructor(){super();const root=createShadowRootWithCoreStyles(this,'ui/smallBubble.css');this._textElement=root.createChild('div');this._textElement.className='info';this._textElement.createChild('slot');}
set type(type){this._textElement.className=type;}});registerCustomElement('div','dt-close-button',class extends HTMLDivElement{constructor(){super();const root=createShadowRootWithCoreStyles(this,'ui/closeButton.css');this._buttonElement=root.createChild('div','close-button');UI.ARIAUtils.setAccessibleName(this._buttonElement,ls`Close`);UI.ARIAUtils.markAsButton(this._buttonElement);const regularIcon=UI.Icon.create('smallicon-cross','default-icon');this._hoverIcon=UI.Icon.create('mediumicon-red-cross-hover','hover-icon');this._activeIcon=UI.Icon.create('mediumicon-red-cross-active','active-icon');this._buttonElement.appendChild(regularIcon);this._buttonElement.appendChild(this._hoverIcon);this._buttonElement.appendChild(this._activeIcon);}
set gray(gray){if(gray){this._hoverIcon.setIconType('mediumicon-gray-cross-hover');this._activeIcon.setIconType('mediumicon-gray-cross-active');}else{this._hoverIcon.setIconType('mediumicon-red-cross-hover');this._activeIcon.setIconType('mediumicon-red-cross-active');}}
setAccessibleName(name){UI.ARIAUtils.setAccessibleName(this._buttonElement,name);}
setTabbable(tabbable){if(tabbable){this._buttonElement.tabIndex=0;}else{this._buttonElement.tabIndex=-1;}}});})();export function bindInput(input,apply,validate,numeric,modifierMultiplier){input.addEventListener('change',onChange,false);input.addEventListener('input',onInput,false);input.addEventListener('keydown',onKeyDown,false);input.addEventListener('focus',input.select.bind(input),false);function onInput(){input.classList.toggle('error-input',!validate(input.value));}
function onChange(){const{valid}=validate(input.value);input.classList.toggle('error-input',!valid);if(valid){apply(input.value);}}
function onKeyDown(event){if(isEnterKey(event)){const{valid}=validate(input.value);if(valid){apply(input.value);}
event.preventDefault();return;}
if(!numeric){return;}
const value=_modifiedFloatNumber(parseFloat(input.value),event,modifierMultiplier);const stringValue=value?String(value):'';const{valid}=validate(stringValue);if(!valid||!value){return;}
input.value=stringValue;apply(input.value);event.preventDefault();}
function setValue(value){if(value===input.value){return;}
const{valid}=validate(value);input.classList.toggle('error-input',!valid);input.value=value;}
return setValue;}
export function trimText(context,text,maxWidth,trimFunction){const maxLength=200;if(maxWidth<=10){return'';}
if(text.length>maxLength){text=trimFunction(text,maxLength);}
const textWidth=measureTextWidth(context,text);if(textWidth<=maxWidth){return text;}
let l=0;let r=text.length;let lv=0;let rv=textWidth;while(l<r&&lv!==rv&&lv!==maxWidth){const m=Math.ceil(l+(r-l)*(maxWidth-lv)/(rv-lv));const mv=measureTextWidth(context,trimFunction(text,m));if(mv<=maxWidth){l=m;lv=mv;}else{r=m-1;rv=mv;}}
text=trimFunction(text,l);return text!=='\u2026'?text:'';}
export function trimTextMiddle(context,text,maxWidth){return trimText(context,text,maxWidth,(text,width)=>text.trimMiddle(width));}
export function trimTextEnd(context,text,maxWidth){return trimText(context,text,maxWidth,(text,width)=>text.trimEndWithMaxLength(width));}
export function measureTextWidth(context,text){const maxCacheableLength=200;if(text.length>maxCacheableLength){return context.measureText(text).width;}
let widthCache=measureTextWidth._textWidthCache;if(!widthCache){widthCache=new Map();measureTextWidth._textWidthCache=widthCache;}
const font=context.font;let textWidths=widthCache.get(font);if(!textWidths){textWidths=new Map();widthCache.set(font,textWidths);}
let width=textWidths.get(text);if(!width){width=context.measureText(text).width;textWidths.set(text,width);}
return width;}
export class ThemeSupport{constructor(setting){const systemPreferredTheme=window.matchMedia('(prefers-color-scheme: dark)').matches?'dark':'default';this._themeName=setting.get()==='systemPreferred'?systemPreferredTheme:setting.get();this._themableProperties=new Set(['color','box-shadow','text-shadow','outline-color','background-image','background-color','border-left-color','border-right-color','border-top-color','border-bottom-color','-webkit-border-image','fill','stroke']);this._cachedThemePatches=new Map();this._setting=setting;this._customSheets=new Set();}
hasTheme(){return this._themeName!=='default';}
themeName(){return this._themeName;}
injectHighlightStyleSheets(element){this._injectingStyleSheet=true;appendStyle(element,'ui/inspectorSyntaxHighlight.css');if(this._themeName==='dark'){appendStyle(element,'ui/inspectorSyntaxHighlightDark.css');}
this._injectingStyleSheet=false;}
injectCustomStyleSheets(element){for(const sheet of this._customSheets){const styleElement=createElement('style');styleElement.textContent=sheet;element.appendChild(styleElement);}}
addCustomStylesheet(sheetText){this._customSheets.add(sheetText);}
applyTheme(document){if(!this.hasTheme()){return;}
if(this._themeName==='dark'){document.documentElement.classList.add('-theme-with-dark-background');}
const styleSheets=document.styleSheets;const result=[];for(let i=0;i<styleSheets.length;++i){result.push(this._patchForTheme(styleSheets[i].href,styleSheets[i]));}
result.push('/*# sourceURL=inspector.css.theme */');const styleElement=createElement('style');styleElement.textContent=result.join('\n');document.head.appendChild(styleElement);}
themeStyleSheet(id,text){if(!this.hasTheme()||this._injectingStyleSheet){return'';}
let patch=this._cachedThemePatches.get(id);if(!patch){const styleElement=createElement('style');styleElement.textContent=text;document.body.appendChild(styleElement);patch=this._patchForTheme(id,styleElement.sheet);document.body.removeChild(styleElement);}
return patch;}
_patchForTheme(id,styleSheet){const cached=this._cachedThemePatches.get(id);if(cached){return cached;}
try{const rules=styleSheet.cssRules;const result=[];for(let j=0;j<rules.length;++j){if(rules[j]instanceof CSSImportRule){result.push(this._patchForTheme(rules[j].styleSheet.href,rules[j].styleSheet));continue;}
const output=[];const style=rules[j].style;const selectorText=rules[j].selectorText;for(let i=0;style&&i<style.length;++i){this._patchProperty(selectorText,style,style[i],output);}
if(output.length){result.push(rules[j].selectorText+'{'+output.join('')+'}');}}
const fullText=result.join('\n');this._cachedThemePatches.set(id,fullText);return fullText;}catch(e){this._setting.set('default');return'';}}
_patchProperty(selectorText,style,name,output){if(!this._themableProperties.has(name)){return;}
const value=style.getPropertyValue(name);if(!value||value==='none'||value==='inherit'||value==='initial'||value==='transparent'){return;}
if(name==='background-image'&&value.indexOf('gradient')===-1){return;}
if(selectorText.indexOf('-theme-')!==-1){return;}
let colorUsage=ThemeSupport.ColorUsage.Unknown;if(name.indexOf('background')===0||name.indexOf('border')===0){colorUsage|=ThemeSupport.ColorUsage.Background;}
if(name.indexOf('background')===-1){colorUsage|=ThemeSupport.ColorUsage.Foreground;}
output.push(name);output.push(':');const items=value.replace(Common.Color.Regex,'\0$1\0').split('\0');for(let i=0;i<items.length;++i){output.push(this.patchColorText(items[i],(colorUsage)));}
if(style.getPropertyPriority(name)){output.push(' !important');}
output.push(';');}
patchColorText(text,colorUsage){const color=Common.Color.parse(text);if(!color){return text;}
const outColor=this.patchColor(color,colorUsage);let outText=outColor.asString(null);if(!outText){outText=outColor.asString(outColor.hasAlpha()?Common.Color.Format.RGBA:Common.Color.Format.RGB);}
return outText||text;}
patchColor(color,colorUsage){const hsla=color.hsla();this._patchHSLA(hsla,colorUsage);const rgba=[];Common.Color.hsl2rgb(hsla,rgba);return new Common.Color(rgba,color.format());}
_patchHSLA(hsla,colorUsage){const hue=hsla[0];const sat=hsla[1];let lit=hsla[2];const alpha=hsla[3];switch(this._themeName){case'dark':const minCap=colorUsage&ThemeSupport.ColorUsage.Background?0.14:0;const maxCap=colorUsage&ThemeSupport.ColorUsage.Foreground?0.9:1;lit=1-lit;if(lit<minCap*2){lit=minCap+lit/2;}else if(lit>2*maxCap-1){lit=maxCap-1/2+lit/2;}
break;}
hsla[0]=Number.constrain(hue,0,1);hsla[1]=Number.constrain(sat,0,1);hsla[2]=Number.constrain(lit,0,1);hsla[3]=Number.constrain(alpha,0,1);}}
ThemeSupport.ColorUsage={Unknown:0,Foreground:1<<0,Background:1<<1,};export function createDocumentationLink(article,title){return UI.XLink.create('https://developers.google.com/web/tools/chrome-devtools/'+article,title);}
export function loadImage(url){return new Promise(fulfill=>{const image=new Image();image.addEventListener('load',()=>fulfill(image));image.addEventListener('error',()=>fulfill(null));image.src=url;});}
export function loadImageFromData(data){return data?loadImage('data:image/jpg;base64,'+data):Promise.resolve(null);}
export function createFileSelectorElement(callback){const fileSelectorElement=createElement('input');fileSelectorElement.type='file';fileSelectorElement.style.display='none';fileSelectorElement.setAttribute('tabindex',-1);fileSelectorElement.onchange=onChange;function onChange(event){callback(fileSelectorElement.files[0]);}
return fileSelectorElement;}
export const MaxLengthForDisplayedURLs=150;export class MessageDialog{static async show(message,where){const dialog=new UI.Dialog();dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);dialog.setDimmed(true);const shadowRoot=createShadowRootWithCoreStyles(dialog.contentElement,'ui/confirmDialog.css');const content=shadowRoot.createChild('div','widget');await new Promise(resolve=>{const okButton=createTextButton(Common.UIString('OK'),resolve,'',true);content.createChild('div','message').createChild('span').textContent=message;content.createChild('div','button').appendChild(okButton);dialog.setOutsideClickCallback(event=>{event.consume();resolve();});dialog.show(where);okButton.focus();});dialog.hide();}}
export class ConfirmDialog{static async show(message,where){const dialog=new UI.Dialog();dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);dialog.setDimmed(true);const shadowRoot=createShadowRootWithCoreStyles(dialog.contentElement,'ui/confirmDialog.css');const content=shadowRoot.createChild('div','widget');content.createChild('div','message').createChild('span').textContent=message;const buttonsBar=content.createChild('div','button');const result=await new Promise(resolve=>{buttonsBar.appendChild(createTextButton(Common.UIString('OK'),()=>resolve(true),'',true));buttonsBar.appendChild(createTextButton(Common.UIString('Cancel'),()=>resolve(false)));dialog.setOutsideClickCallback(event=>{event.consume();resolve(false);});dialog.show(where);});dialog.hide();return result;}}
export function createInlineButton(toolbarButton){const element=createElement('span');const shadowRoot=createShadowRootWithCoreStyles(element,'ui/inlineButton.css');element.classList.add('inline-button');const toolbar=new UI.Toolbar('');toolbar.appendToolbarItem(toolbarButton);shadowRoot.appendChild(toolbar.element);return element;}
export function createExpandableText(text,maxLength){const clickHandler=()=>{if(expandElement.parentElement){expandElement.parentElement.insertBefore(createTextNode(text.slice(maxLength)),expandElement);}
expandElement.remove();};const fragment=createDocumentFragment();fragment.textContent=text.slice(0,maxLength);const expandElement=fragment.createChild('span');const totalBytes=Number.bytesToString(2*text.length);if(text.length<10000000){expandElement.setAttribute('data-text',ls`Show more (${totalBytes})`);expandElement.classList.add('expandable-inline-button');expandElement.addEventListener('click',clickHandler);expandElement.addEventListener('keydown',event=>{if(event.key==='Enter'||event.key===' '){clickHandler();}});UI.ARIAUtils.markAsButton(expandElement);}else{expandElement.setAttribute('data-text',ls`long text was truncated (${totalBytes})`);expandElement.classList.add('undisplayable-text');}
const copyButton=fragment.createChild('span','expandable-inline-button');copyButton.setAttribute('data-text',ls`Copy`);copyButton.addEventListener('click',()=>{Host.InspectorFrontendHost.copyText(text);});copyButton.addEventListener('keydown',event=>{if(event.key==='Enter'||event.key===' '){Host.InspectorFrontendHost.copyText(text);}});UI.ARIAUtils.markAsButton(copyButton);return fragment;}
export class Renderer{render(object,options){}}
Renderer.render=async function(object,options){if(!object){throw new Error('Can\'t render '+object);}
const renderer=await self.runtime.extension(Renderer,object).instance();return renderer?renderer.render(object,options||{}):null;};export function formatTimestamp(timestamp,full){const date=new Date(timestamp);const yymmdd=date.getFullYear()+'-'+leadZero(date.getMonth()+1,2)+'-'+leadZero(date.getDate(),2);const hhmmssfff=leadZero(date.getHours(),2)+':'+leadZero(date.getMinutes(),2)+':'+
leadZero(date.getSeconds(),2)+'.'+leadZero(date.getMilliseconds(),3);return full?(yymmdd+' '+hhmmssfff):hhmmssfff;function leadZero(value,length){const valueString=String(value);return valueString.padStart(length,'0');}}
self.UI=self.UI||{};UI=UI||{};UI.themeSupport;UI.highlightedSearchResultClassName=highlightedSearchResultClassName;UI.highlightedCurrentSearchResultClassName=highlightedCurrentSearchResultClassName;UI.StyleValueDelimiters=StyleValueDelimiters;UI.MaxLengthForDisplayedURLs=MaxLengthForDisplayedURLs;UI.ElementFocusRestorer=ElementFocusRestorer;UI.LongClickController=LongClickController;UI.ThemeSupport=ThemeSupport;UI.MessageDialog=MessageDialog;UI.ConfirmDialog=ConfirmDialog;UI.CheckboxLabel=CheckboxLabel;UI.Renderer=Renderer;UI.Renderer.Options;UI.installDragHandle=installDragHandle;UI.elementDragStart=elementDragStart;UI.isBeingEdited=isBeingEdited;UI.isEditing=isEditing;UI.markBeingEdited=markBeingEdited;UI.createReplacementString=createReplacementString;UI.handleElementValueModifications=handleElementValueModifications;UI.formatLocalized=formatLocalized;UI.openLinkExternallyLabel=openLinkExternallyLabel;UI.copyLinkAddressLabel=copyLinkAddressLabel;UI.anotherProfilerActiveLabel=anotherProfilerActiveLabel;UI.asyncStackTraceLabel=asyncStackTraceLabel;UI.installComponentRootStyles=installComponentRootStyles;UI.measuredScrollbarWidth=measuredScrollbarWidth;UI.createShadowRootWithCoreStyles=createShadowRootWithCoreStyles;UI.highlightSearchResult=highlightSearchResult;UI.highlightSearchResults=highlightSearchResults;UI.runCSSAnimationOnce=runCSSAnimationOnce;UI.highlightRangesWithStyleClass=highlightRangesWithStyleClass;UI.applyDomChanges=applyDomChanges;UI.revertDomChanges=revertDomChanges;UI.measurePreferredSize=measurePreferredSize;UI.startBatchUpdate=startBatchUpdate;UI.endBatchUpdate=endBatchUpdate;UI.invokeOnceAfterBatchUpdate=invokeOnceAfterBatchUpdate;UI.animateFunction=animateFunction;UI.initializeUIUtils=initializeUIUtils;UI.beautifyFunctionName=beautifyFunctionName;UI.registerCustomElement=registerCustomElement;UI.createTextButton=createTextButton;UI.createInput=createInput;UI.createLabel=createLabel;UI.createRadioLabel=createRadioLabel;UI.createIconLabel=createIconLabel;UI.createSlider=createSlider;UI.appendStyle=appendStyle;UI.bindInput=bindInput;UI.trimText=trimText;UI.trimTextMiddle=trimTextMiddle;UI.trimTextEnd=trimTextEnd;UI.measureTextWidth=measureTextWidth;UI.createDocumentationLink=createDocumentationLink;UI.loadImage=loadImage;UI.loadImageFromData=loadImageFromData;UI.createFileSelectorElement=createFileSelectorElement;UI.createInlineButton=createInlineButton;UI.createExpandableText=createExpandableText;UI.formatTimestamp=formatTimestamp;export class TreeOutline extends Common.Object{constructor(){super();this._createRootElement();this.selectedTreeElement=null;this.expandTreeElementsWhenArrowing=false;this._comparator=null;this.contentElement=this._rootElement._childrenListNode;this.contentElement.addEventListener('keydown',this._treeKeyDown.bind(this),false);this._preventTabOrder=false;this._showSelectionOnKeyboardFocus=false;this.setFocusable(true);this.element=this.contentElement;UI.ARIAUtils.markAsTree(this.element);}
setShowSelectionOnKeyboardFocus(show,preventTabOrder){this.contentElement.classList.toggle('hide-selection-when-blurred',show);this._preventTabOrder=!!preventTabOrder;if(this._focusable){this.contentElement.tabIndex=!!preventTabOrder?-1:0;}
this._showSelectionOnKeyboardFocus=show;}
_createRootElement(){this._rootElement=new TreeElement();this._rootElement.treeOutline=this;this._rootElement.root=true;this._rootElement.selectable=false;this._rootElement.expanded=true;this._rootElement._childrenListNode.classList.remove('children');}
rootElement(){return this._rootElement;}
firstChild(){return this._rootElement.firstChild();}
_lastDescendent(){let last=this._rootElement.lastChild();while(last.expanded&&last.childCount()){last=last.lastChild();}
return last;}
appendChild(child){this._rootElement.appendChild(child);}
insertChild(child,index){this._rootElement.insertChild(child,index);}
removeChild(child){this._rootElement.removeChild(child);}
removeChildren(){this._rootElement.removeChildren();}
treeElementFromPoint(x,y){const node=this.contentElement.ownerDocument.deepElementFromPoint(x,y);if(!node){return null;}
const listNode=node.enclosingNodeOrSelfWithNodeNameInArray(['ol','li']);if(listNode){return listNode.parentTreeElement||listNode.treeElement;}
return null;}
treeElementFromEvent(event){return event?this.treeElementFromPoint(event.pageX,event.pageY):null;}
setComparator(comparator){this._comparator=comparator;}
setFocusable(focusable){this._focusable=focusable;this.updateFocusable();}
updateFocusable(){if(this._focusable){this.contentElement.tabIndex=(this._preventTabOrder||!!this.selectedTreeElement)?-1:0;if(this.selectedTreeElement){this.selectedTreeElement._setFocusable(true);}}else{this.contentElement.removeAttribute('tabIndex');if(this.selectedTreeElement){this.selectedTreeElement._setFocusable(false);}}}
focus(){if(this.selectedTreeElement){this.selectedTreeElement.listItemElement.focus();}else{this.contentElement.focus();}}
useLightSelectionColor(){this._useLightSelectionColor=true;}
_bindTreeElement(element){if(element.treeOutline){console.error('Binding element for the second time: '+new Error().stack);}
element.treeOutline=this;element.onbind();}
_unbindTreeElement(element){if(!element.treeOutline){console.error('Unbinding element that was not bound: '+new Error().stack);}
element.deselect();element.onunbind();element.treeOutline=null;}
selectPrevious(){let nextSelectedElement=this.selectedTreeElement.traversePreviousTreeElement(true);while(nextSelectedElement&&!nextSelectedElement.selectable){nextSelectedElement=nextSelectedElement.traversePreviousTreeElement(!this.expandTreeElementsWhenArrowing);}
if(!nextSelectedElement){return false;}
nextSelectedElement.select(false,true);return true;}
selectNext(){let nextSelectedElement=this.selectedTreeElement.traverseNextTreeElement(true);while(nextSelectedElement&&!nextSelectedElement.selectable){nextSelectedElement=nextSelectedElement.traverseNextTreeElement(!this.expandTreeElementsWhenArrowing);}
if(!nextSelectedElement){return false;}
nextSelectedElement.select(false,true);return true;}
forceSelect(omitFocus=false,selectedByUser=true){if(this.selectedTreeElement){this.selectedTreeElement.deselect();}
this._selectFirst(omitFocus,selectedByUser);}
_selectFirst(omitFocus=false,selectedByUser=true){let first=this.firstChild();while(first&&!first.selectable){first=first.traverseNextTreeElement(true);}
if(!first){return false;}
first.select(omitFocus,selectedByUser);return true;}
_selectLast(){let last=this._lastDescendent();while(last&&!last.selectable){last=last.traversePreviousTreeElement(true);}
if(!last){return false;}
last.select(false,true);return true;}
_treeKeyDown(event){if(event.shiftKey||event.metaKey||event.ctrlKey||UI.isEditing()){return;}
let handled=false;if(!this.selectedTreeElement){if(event.key==='ArrowUp'&&!event.altKey){handled=this._selectLast();}else if(event.key==='ArrowDown'&&!event.altKey){handled=this._selectFirst();}}else if(event.key==='ArrowUp'&&!event.altKey){handled=this.selectPrevious();}else if(event.key==='ArrowDown'&&!event.altKey){handled=this.selectNext();}else if(event.key==='ArrowLeft'){handled=this.selectedTreeElement.collapseOrAscend(event.altKey);}else if(event.key==='ArrowRight'){if(!this.selectedTreeElement.revealed()){this.selectedTreeElement.reveal();handled=true;}else{handled=this.selectedTreeElement.descendOrExpand(event.altKey);}}else if(event.keyCode===8||event.keyCode===46){handled=this.selectedTreeElement.ondelete();}else if(isEnterKey(event)){handled=this.selectedTreeElement.onenter();}else if(event.keyCode===UI.KeyboardShortcut.Keys.Space.code){handled=this.selectedTreeElement.onspace();}else if(event.key==='Home'){handled=this._selectFirst();}else if(event.key==='End'){handled=this._selectLast();}
if(handled){event.consume(true);}}
_deferredScrollIntoView(treeElement,center){if(!this._treeElementToScrollIntoView){this.element.window().requestAnimationFrame(deferredScrollIntoView.bind(this));}
this._treeElementToScrollIntoView=treeElement;this._centerUponScrollIntoView=center;function deferredScrollIntoView(){this._treeElementToScrollIntoView.listItemElement.scrollIntoViewIfNeeded(this._centerUponScrollIntoView);delete this._treeElementToScrollIntoView;delete this._centerUponScrollIntoView;}}}
const Events={ElementAttached:Symbol('ElementAttached'),ElementsDetached:Symbol('ElementsDetached'),ElementExpanded:Symbol('ElementExpanded'),ElementCollapsed:Symbol('ElementCollapsed'),ElementSelected:Symbol('ElementSelected')};export class TreeOutlineInShadow extends TreeOutline{constructor(){super();this.contentElement.classList.add('tree-outline');this.element=createElement('div');this._shadowRoot=UI.createShadowRootWithCoreStyles(this.element,'ui/treeoutline.css');this._disclosureElement=this._shadowRoot.createChild('div','tree-outline-disclosure');this._disclosureElement.appendChild(this.contentElement);this._renderSelection=true;}
registerRequiredCSS(cssFile){UI.appendStyle(this._shadowRoot,cssFile);}
hideOverflow(){this._disclosureElement.classList.add('tree-outline-disclosure-hide-overflow');}
makeDense(){this.contentElement.classList.add('tree-outline-dense');}}
export class TreeElement{constructor(title,expandable){this.treeOutline=null;this.parent=null;this.previousSibling=null;this.nextSibling=null;this._boundOnFocus=this._onFocus.bind(this);this._boundOnBlur=this._onBlur.bind(this);this._listItemNode=createElement('li');this.titleElement=this._listItemNode.createChild('span','tree-element-title');this._listItemNode.treeElement=this;if(title){this.title=title;}
this._listItemNode.addEventListener('mousedown',this._handleMouseDown.bind(this),false);this._listItemNode.addEventListener('click',this._treeElementToggled.bind(this),false);this._listItemNode.addEventListener('dblclick',this._handleDoubleClick.bind(this),false);UI.ARIAUtils.markAsTreeitem(this._listItemNode);this._childrenListNode=createElement('ol');this._childrenListNode.parentTreeElement=this;this._childrenListNode.classList.add('children');UI.ARIAUtils.markAsGroup(this._childrenListNode);this._hidden=false;this._selectable=true;this.expanded=false;this.selected=false;this.setExpandable(expandable||false);this._collapsible=true;}
hasAncestor(ancestor){if(!ancestor){return false;}
let currentNode=this.parent;while(currentNode){if(ancestor===currentNode){return true;}
currentNode=currentNode.parent;}
return false;}
hasAncestorOrSelf(ancestor){return this===ancestor||this.hasAncestor(ancestor);}
isHidden(){if(this.hidden){return true;}
let currentNode=this.parent;while(currentNode){if(currentNode.hidden){return true;}
currentNode=currentNode.parent;}
return false;}
children(){return this._children||[];}
childCount(){return this._children?this._children.length:0;}
firstChild(){return this._children?this._children[0]:null;}
lastChild(){return this._children?this._children[this._children.length-1]:null;}
childAt(index){return this._children?this._children[index]:null;}
indexOfChild(child){return this._children?this._children.indexOf(child):-1;}
appendChild(child){if(!this._children){this._children=[];}
let insertionIndex;if(this.treeOutline&&this.treeOutline._comparator){insertionIndex=this._children.lowerBound(child,this.treeOutline._comparator);}else{insertionIndex=this._children.length;}
this.insertChild(child,insertionIndex);}
insertChild(child,index){if(!this._children){this._children=[];}
if(!child){throw'child can\'t be undefined or null';}
console.assert(!child.parent,'Attempting to insert a child that is already in the tree, reparenting is not supported.');const previousChild=(index>0?this._children[index-1]:null);if(previousChild){previousChild.nextSibling=child;child.previousSibling=previousChild;}else{child.previousSibling=null;}
const nextChild=this._children[index];if(nextChild){nextChild.previousSibling=child;child.nextSibling=nextChild;}else{child.nextSibling=null;}
this._children.splice(index,0,child);this.setExpandable(true);child.parent=this;if(this.treeOutline){this.treeOutline._bindTreeElement(child);}
for(let current=child.firstChild();this.treeOutline&&current;current=current.traverseNextTreeElement(false,child,true)){this.treeOutline._bindTreeElement(current);}
child.onattach();child._ensureSelection();if(this.treeOutline){this.treeOutline.dispatchEventToListeners(Events.ElementAttached,child);}
const nextSibling=child.nextSibling?child.nextSibling._listItemNode:null;this._childrenListNode.insertBefore(child._listItemNode,nextSibling);this._childrenListNode.insertBefore(child._childrenListNode,nextSibling);if(child.selected){child.select();}
if(child.expanded){child.expand();}}
removeChildAtIndex(childIndex){if(childIndex<0||childIndex>=this._children.length){throw'childIndex out of range';}
const child=this._children[childIndex];this._children.splice(childIndex,1);const parent=child.parent;if(this.treeOutline&&this.treeOutline.selectedTreeElement&&this.treeOutline.selectedTreeElement.hasAncestorOrSelf(child)){if(child.nextSibling){child.nextSibling.select(true);}else if(child.previousSibling){child.previousSibling.select(true);}else if(parent){parent.select(true);}}
if(child.previousSibling){child.previousSibling.nextSibling=child.nextSibling;}
if(child.nextSibling){child.nextSibling.previousSibling=child.previousSibling;}
child.parent=null;if(this.treeOutline){this.treeOutline._unbindTreeElement(child);}
for(let current=child.firstChild();this.treeOutline&&current;current=current.traverseNextTreeElement(false,child,true)){this.treeOutline._unbindTreeElement(current);}
child._detach();if(this.treeOutline){this.treeOutline.dispatchEventToListeners(Events.ElementsDetached);}}
removeChild(child){if(!child){throw'child can\'t be undefined or null';}
if(child.parent!==this){return;}
const childIndex=this._children.indexOf(child);if(childIndex===-1){throw'child not found in this node\'s children';}
this.removeChildAtIndex(childIndex);}
removeChildren(){if(!this.root&&this.treeOutline&&this.treeOutline.selectedTreeElement&&this.treeOutline.selectedTreeElement.hasAncestorOrSelf(this)){this.select(true);}
for(let i=0;this._children&&i<this._children.length;++i){const child=this._children[i];child.previousSibling=null;child.nextSibling=null;child.parent=null;if(this.treeOutline){this.treeOutline._unbindTreeElement(child);}
for(let current=child.firstChild();this.treeOutline&&current;current=current.traverseNextTreeElement(false,child,true)){this.treeOutline._unbindTreeElement(current);}
child._detach();}
this._children=[];if(this.treeOutline){this.treeOutline.dispatchEventToListeners(Events.ElementsDetached);}}
get selectable(){if(this.isHidden()){return false;}
return this._selectable;}
set selectable(x){this._selectable=x;}
get listItemElement(){return this._listItemNode;}
get childrenListElement(){return this._childrenListNode;}
get title(){return this._title;}
set title(x){if(this._title===x){return;}
this._title=x;if(typeof x==='string'){this.titleElement.textContent=x;this.tooltip=x;}else{this.titleElement=x;this.tooltip='';}
this._listItemNode.removeChildren();if(this._leadingIconsElement){this._listItemNode.appendChild(this._leadingIconsElement);}
this._listItemNode.appendChild(this.titleElement);if(this._trailingIconsElement){this._listItemNode.appendChild(this._trailingIconsElement);}
this._ensureSelection();}
titleAsText(){if(!this._title){return'';}
if(typeof this._title==='string'){return this._title;}
return this._title.textContent;}
startEditingTitle(editingConfig){UI.InplaceEditor.startEditing((this.titleElement),editingConfig);this.treeOutline._shadowRoot.getSelection().selectAllChildren(this.titleElement);}
setLeadingIcons(icons){if(!this._leadingIconsElement&&!icons.length){return;}
if(!this._leadingIconsElement){this._leadingIconsElement=createElementWithClass('div','leading-icons');this._leadingIconsElement.classList.add('icons-container');this._listItemNode.insertBefore(this._leadingIconsElement,this.titleElement);this._ensureSelection();}
this._leadingIconsElement.removeChildren();for(const icon of icons){this._leadingIconsElement.appendChild(icon);}}
setTrailingIcons(icons){if(!this._trailingIconsElement&&!icons.length){return;}
if(!this._trailingIconsElement){this._trailingIconsElement=createElementWithClass('div','trailing-icons');this._trailingIconsElement.classList.add('icons-container');this._listItemNode.appendChild(this._trailingIconsElement);this._ensureSelection();}
this._trailingIconsElement.removeChildren();for(const icon of icons){this._trailingIconsElement.appendChild(icon);}}
get tooltip(){return this._tooltip||'';}
set tooltip(x){if(this._tooltip===x){return;}
this._tooltip=x;this._listItemNode.title=x;}
isExpandable(){return this._expandable;}
setExpandable(expandable){if(this._expandable===expandable){return;}
this._expandable=expandable;this._listItemNode.classList.toggle('parent',expandable);if(!expandable){this.collapse();UI.ARIAUtils.unsetExpandable(this._listItemNode);}else{UI.ARIAUtils.setExpanded(this._listItemNode,false);}}
setCollapsible(collapsible){if(this._collapsible===collapsible){return;}
this._collapsible=collapsible;this._listItemNode.classList.toggle('always-parent',!collapsible);if(!collapsible){this.expand();}}
get hidden(){return this._hidden;}
set hidden(x){if(this._hidden===x){return;}
this._hidden=x;this._listItemNode.classList.toggle('hidden',x);this._childrenListNode.classList.toggle('hidden',x);if(x&&this.treeOutline&&this.treeOutline.selectedTreeElement&&this.treeOutline.selectedTreeElement.hasAncestorOrSelf(this)){const hadFocus=this.treeOutline.selectedTreeElement.listItemElement.hasFocus();this.treeOutline.forceSelect(!hadFocus,false);}}
invalidateChildren(){if(this._children){this.removeChildren();this._children=null;}}
_ensureSelection(){if(!this.treeOutline||!this.treeOutline._renderSelection){return;}
if(!this._selectionElement){this._selectionElement=createElementWithClass('div','selection fill');}
this._listItemNode.insertBefore(this._selectionElement,this.listItemElement.firstChild);}
_treeElementToggled(event){const element=event.currentTarget;if(element.treeElement!==this||element.hasSelection()){return;}
console.assert(!!this.treeOutline);const showSelectionOnKeyboardFocus=this.treeOutline?this.treeOutline._showSelectionOnKeyboardFocus:false;const toggleOnClick=this.toggleOnClick&&(showSelectionOnKeyboardFocus||!this.selectable);const isInTriangle=this.isEventWithinDisclosureTriangle(event);if(!toggleOnClick&&!isInTriangle){return;}
if(this.expanded){if(event.altKey){this.collapseRecursively();}else{this.collapse();}}else{if(event.altKey){this.expandRecursively();}else{this.expand();}}
event.consume();}
_handleMouseDown(event){const element=event.currentTarget;if(!element){return;}
if(!this.selectable){return;}
if(element.treeElement!==this){return;}
if(this.isEventWithinDisclosureTriangle(event)){return;}
this.selectOnMouseDown(event);}
_handleDoubleClick(event){const element=event.currentTarget;if(!element||element.treeElement!==this){return;}
const handled=this.ondblclick(event);if(handled){return;}
if(this._expandable&&!this.expanded){this.expand();}}
_detach(){this._listItemNode.remove();this._childrenListNode.remove();}
collapse(){if(!this.expanded||!this._collapsible){return;}
this._listItemNode.classList.remove('expanded');this._childrenListNode.classList.remove('expanded');UI.ARIAUtils.setExpanded(this._listItemNode,false);this.expanded=false;this.oncollapse();if(this.treeOutline){this.treeOutline.dispatchEventToListeners(Events.ElementCollapsed,this);}
const selectedTreeElement=this.treeOutline.selectedTreeElement;if(selectedTreeElement&&selectedTreeElement.hasAncestor(this)){this.select(true,true);}}
collapseRecursively(){let item=this;while(item){if(item.expanded){item.collapse();}
item=item.traverseNextTreeElement(false,this,true);}}
collapseChildren(){if(!this._children){return;}
for(const child of this._children){child.collapseRecursively();}}
expand(){if(!this._expandable||(this.expanded&&this._children)){return;}
this.expanded=true;this._populateIfNeeded();this._listItemNode.classList.add('expanded');this._childrenListNode.classList.add('expanded');UI.ARIAUtils.setExpanded(this._listItemNode,true);if(this.treeOutline){this.onexpand();this.treeOutline.dispatchEventToListeners(Events.ElementExpanded,this);}}
async expandRecursively(maxDepth){let item=this;const info={};let depth=0;if(isNaN(maxDepth)){maxDepth=3;}
while(item){await item._populateIfNeeded();if(depth<maxDepth){item.expand();}
item=item.traverseNextTreeElement(false,this,(depth>=maxDepth),info);depth+=info.depthChange;}}
collapseOrAscend(altKey){if(this.expanded&&this._collapsible){if(altKey){this.collapseRecursively();}else{this.collapse();}
return true;}
if(!this.parent||this.parent.root){return false;}
if(!this.parent.selectable){this.parent.collapse();return true;}
let nextSelectedElement=this.parent;while(nextSelectedElement&&!nextSelectedElement.selectable){nextSelectedElement=nextSelectedElement.parent;}
if(!nextSelectedElement){return false;}
nextSelectedElement.select(false,true);return true;}
descendOrExpand(altKey){if(!this._expandable){return false;}
if(!this.expanded){if(altKey){this.expandRecursively();}else{this.expand();}
return true;}
let nextSelectedElement=this.firstChild();while(nextSelectedElement&&!nextSelectedElement.selectable){nextSelectedElement=nextSelectedElement.nextSibling;}
if(!nextSelectedElement){return false;}
nextSelectedElement.select(false,true);return true;}
reveal(center){let currentAncestor=this.parent;while(currentAncestor&&!currentAncestor.root){if(!currentAncestor.expanded){currentAncestor.expand();}
currentAncestor=currentAncestor.parent;}
this.treeOutline._deferredScrollIntoView(this,!!center);}
revealed(){let currentAncestor=this.parent;while(currentAncestor&&!currentAncestor.root){if(!currentAncestor.expanded){return false;}
currentAncestor=currentAncestor.parent;}
return true;}
selectOnMouseDown(event){if(this.select(false,true)){event.consume(true);}
if(this._listItemNode.draggable&&this._selectionElement){const marginLeft=this.treeOutline.element.getBoundingClientRect().left-this._listItemNode.getBoundingClientRect().left;this._selectionElement.style.setProperty('margin-left',marginLeft+'px');}}
select(omitFocus,selectedByUser){if(!this.treeOutline||!this.selectable||this.selected){if(!omitFocus){this.listItemElement.focus();}
return false;}
const lastSelected=this.treeOutline.selectedTreeElement;this.treeOutline.selectedTreeElement=null;if(this.treeOutline._rootElement===this){if(lastSelected){lastSelected.deselect();}
if(!omitFocus){this.listItemElement.focus();}
return false;}
this.selected=true;this.treeOutline.selectedTreeElement=this;this.treeOutline.updateFocusable();if(!omitFocus||this.treeOutline.contentElement.hasFocus()){this.listItemElement.focus();}
this._listItemNode.classList.add('selected');this.treeOutline.dispatchEventToListeners(Events.ElementSelected,this);if(lastSelected){lastSelected.deselect();}
return this.onselect(selectedByUser);}
_setFocusable(focusable){if(focusable){this._listItemNode.setAttribute('tabIndex',this.treeOutline&&this.treeOutline._preventTabOrder?-1:0);this._listItemNode.addEventListener('focus',this._boundOnFocus,false);this._listItemNode.addEventListener('blur',this._boundOnBlur,false);}else{this._listItemNode.removeAttribute('tabIndex');this._listItemNode.removeEventListener('focus',this._boundOnFocus,false);this._listItemNode.removeEventListener('blur',this._boundOnBlur,false);}}
_onFocus(){if(this.treeOutline._useLightSelectionColor){return;}
if(!this.treeOutline.contentElement.classList.contains('hide-selection-when-blurred')){this._listItemNode.classList.add('force-white-icons');}}
_onBlur(){if(this.treeOutline._useLightSelectionColor){return;}
if(!this.treeOutline.contentElement.classList.contains('hide-selection-when-blurred')){this._listItemNode.classList.remove('force-white-icons');}}
revealAndSelect(omitFocus){this.reveal(true);this.select(omitFocus);}
deselect(){const hadFocus=this._listItemNode.hasFocus();this.selected=false;this._listItemNode.classList.remove('selected');this._setFocusable(false);if(this.treeOutline&&this.treeOutline.selectedTreeElement===this){this.treeOutline.selectedTreeElement=null;this.treeOutline.updateFocusable();if(hadFocus){this.treeOutline.focus();}}}
async _populateIfNeeded(){if(this.treeOutline&&this._expandable&&!this._children){this._children=[];await this.onpopulate();}}
async onpopulate(){}
onenter(){return false;}
ondelete(){return false;}
onspace(){return false;}
onbind(){}
onunbind(){}
onattach(){}
onexpand(){}
oncollapse(){}
ondblclick(e){return false;}
onselect(selectedByUser){return false;}
traverseNextTreeElement(skipUnrevealed,stayWithin,dontPopulate,info){if(!dontPopulate){this._populateIfNeeded();}
if(info){info.depthChange=0;}
let element=skipUnrevealed?(this.revealed()?this.firstChild():null):this.firstChild();if(element&&(!skipUnrevealed||(skipUnrevealed&&this.expanded))){if(info){info.depthChange=1;}
return element;}
if(this===stayWithin){return null;}
element=skipUnrevealed?(this.revealed()?this.nextSibling:null):this.nextSibling;if(element){return element;}
element=this;while(element&&!element.root&&!(skipUnrevealed?(element.revealed()?element.nextSibling:null):element.nextSibling)&&element.parent!==stayWithin){if(info){info.depthChange-=1;}
element=element.parent;}
if(!element||element.root){return null;}
return(skipUnrevealed?(element.revealed()?element.nextSibling:null):element.nextSibling);}
traversePreviousTreeElement(skipUnrevealed,dontPopulate){let element=skipUnrevealed?(this.revealed()?this.previousSibling:null):this.previousSibling;if(!dontPopulate&&element){element._populateIfNeeded();}
while(element&&(skipUnrevealed?(element.revealed()&&element.expanded?element.lastChild():null):element.lastChild())){if(!dontPopulate){element._populateIfNeeded();}
element=(skipUnrevealed?(element.revealed()&&element.expanded?element.lastChild():null):element.lastChild());}
if(element){return element;}
if(!this.parent||this.parent.root){return null;}
return this.parent;}
isEventWithinDisclosureTriangle(event){const paddingLeftValue=window.getComputedStyle(this._listItemNode).paddingLeft;console.assert(paddingLeftValue.endsWith('px'));const computedLeftPadding=parseFloat(paddingLeftValue);const left=this._listItemNode.totalOffsetLeft()+computedLeftPadding;return event.pageX>=left&&event.pageX<=left+TreeElement._ArrowToggleWidth&&this._expandable;}}
TreeElement._ArrowToggleWidth=10;(function(){const img=new Image();img.src='Images/treeoutlineTriangles.svg';TreeElement._imagePreload=img;})();self.UI=self.UI||{};UI=UI||{};UI.TreeOutline=TreeOutline;UI.TreeOutline.Events=Events;UI.TreeElement=TreeElement;UI.TreeOutlineInShadow=TreeOutlineInShadow;export default class Tooltip{constructor(doc){this.element=doc.body.createChild('div');this._shadowRoot=UI.createShadowRootWithCoreStyles(this.element,'ui/tooltip.css');this._tooltipElement=this._shadowRoot.createChild('div','tooltip');doc.addEventListener('mousemove',this._mouseMove.bind(this),true);doc.addEventListener('mousedown',this._hide.bind(this,true),true);doc.addEventListener('mouseleave',this._hide.bind(this,false),true);doc.addEventListener('keydown',this._hide.bind(this,true),true);UI.zoomManager.addEventListener(UI.ZoomManager.Events.ZoomChanged,this._reset,this);doc.defaultView.addEventListener('resize',this._reset.bind(this),false);}
static installHandler(doc){new Tooltip(doc);}
static install(element,tooltipContent,actionId,options){if(!tooltipContent){delete element[_symbol];return;}
element[_symbol]={content:tooltipContent,actionId:actionId,options:options||{}};}
static addNativeOverrideContainer(element){_nativeOverrideContainer.push(element);}
_mouseMove(event){const mouseEvent=(event);const path=mouseEvent.composedPath();if(!path||mouseEvent.buttons!==0||(mouseEvent.movementX===0&&mouseEvent.movementY===0)){return;}
if(this._anchorElement&&path.indexOf(this._anchorElement)===-1){this._hide(false);}
for(const element of path){if(element===this._anchorElement){return;}
if(!(element instanceof Element)||element.offsetParent===null){continue;}
if(element[_symbol]){this._show(element,mouseEvent);return;}}}
_show(anchorElement,event){const tooltip=anchorElement[_symbol];this._anchorElement=anchorElement;this._tooltipElement.removeChildren();for(const element of _nativeOverrideContainer){if(this._anchorElement.isSelfOrDescendant(element)){Object.defineProperty(this._anchorElement,'title',(_nativeTitle));this._anchorElement.title=tooltip.content;return;}}
if(typeof tooltip.content==='string'){this._tooltipElement.setTextContentTruncatedIfNeeded(tooltip.content);}else{this._tooltipElement.appendChild(tooltip.content);}
if(tooltip.actionId){const shortcuts=UI.shortcutRegistry.shortcutDescriptorsForAction(tooltip.actionId);for(const shortcut of shortcuts){const shortcutElement=this._tooltipElement.createChild('div','tooltip-shortcut');shortcutElement.textContent=shortcut.name;}}
this._tooltipElement.classList.add('shown');this._tooltipElement.positionAt(0,0);const now=Date.now();const instant=(this._tooltipLastClosed&&now-this._tooltipLastClosed<Timing.InstantThreshold);this._tooltipElement.classList.toggle('instant',instant);this._tooltipLastOpened=instant?now:now+Timing.OpeningDelay;const container=UI.GlassPane.container((anchorElement.ownerDocument));const containerBox=container.boxInWindow(this.element.window());const anchorBox=this._anchorElement.boxInWindow(this.element.window());const anchorOffset=2;const pageMargin=2;const cursorOffset=10;this._tooltipElement.classList.toggle('tooltip-breakword',!this._tooltipElement.textContent.match('\\s'));this._tooltipElement.style.maxWidth=(containerBox.width-pageMargin*2)+'px';this._tooltipElement.style.maxHeight='';const tooltipWidth=this._tooltipElement.offsetWidth;const tooltipHeight=this._tooltipElement.offsetHeight;const anchorTooltipAtElement=this._anchorElement.nodeName==='BUTTON'||this._anchorElement.nodeName==='LABEL';let tooltipX=anchorTooltipAtElement?anchorBox.x:event.x+cursorOffset;tooltipX=Number.constrain(tooltipX,containerBox.x+pageMargin,containerBox.x+containerBox.width-tooltipWidth-pageMargin);let tooltipY;if(!anchorTooltipAtElement){tooltipY=event.y+cursorOffset+tooltipHeight<containerBox.y+containerBox.height?event.y+cursorOffset:event.y-tooltipHeight-1;}else{const onBottom=anchorBox.y+anchorOffset+anchorBox.height+tooltipHeight<containerBox.y+containerBox.height;tooltipY=onBottom?anchorBox.y+anchorBox.height+anchorOffset:anchorBox.y-tooltipHeight-anchorOffset;}
this._tooltipElement.positionAt(tooltipX,tooltipY);}
_hide(removeInstant){delete this._anchorElement;this._tooltipElement.classList.remove('shown');if(Date.now()>this._tooltipLastOpened){this._tooltipLastClosed=Date.now();}
if(removeInstant){delete this._tooltipLastClosed;}}
_reset(){this._hide(true);this._tooltipElement.positionAt(0,0);this._tooltipElement.style.maxWidth='0';this._tooltipElement.style.maxHeight='0';}}
const Timing={'InstantThreshold':300,'OpeningDelay':600};const _symbol=Symbol('Tooltip');const _nativeOverrideContainer=[];const _nativeTitle=Object.getOwnPropertyDescriptor(HTMLElement.prototype,'title');Object.defineProperty(HTMLElement.prototype,'title',{get:function(){const tooltip=this[UI.Tooltip._symbol];return tooltip?tooltip.content:'';},set:function(x){Tooltip.install(this,x);}});self.UI=self.UI||{};UI=UI||{};UI.Tooltip=Tooltip;UI.Tooltip._symbol=_symbol;export default class Toolbar{constructor(className,parentElement){this._items=[];this.element=parentElement?parentElement.createChild('div'):createElement('div');this.element.className=className;this.element.classList.add('toolbar');this._enabled=true;this._shadowRoot=UI.createShadowRootWithCoreStyles(this.element,'ui/toolbar.css');this._contentElement=this._shadowRoot.createChild('div','toolbar-shadow');this._insertionPoint=this._contentElement.createChild('slot');}
static createLongPressActionButton(action,toggledOptions,untoggledOptions){const button=UI.Toolbar.createActionButton(action);const mainButtonClone=UI.Toolbar.createActionButton(action);let longClickController=null;let longClickButtons=null;let longClickGlyph=null;action.addEventListener(UI.Action.Events.Toggled,updateOptions);updateOptions();return button;function updateOptions(){const buttons=action.toggled()?(toggledOptions||null):(untoggledOptions||null);if(buttons&&buttons.length){if(!longClickController){longClickController=new UI.LongClickController(button.element,showOptions);longClickGlyph=UI.Icon.create('largeicon-longclick-triangle','long-click-glyph');button.element.appendChild(longClickGlyph);longClickButtons=buttons;}}else{if(longClickController){longClickController.dispose();longClickController=null;longClickGlyph.remove();longClickGlyph=null;longClickButtons=null;}}}
function showOptions(){let buttons=longClickButtons.slice();buttons.push(mainButtonClone);const document=button.element.ownerDocument;document.documentElement.addEventListener('mouseup',mouseUp,false);const optionsGlassPane=new UI.GlassPane();optionsGlassPane.setPointerEventsBehavior(UI.GlassPane.PointerEventsBehavior.BlockedByGlassPane);optionsGlassPane.show(document);const optionsBar=new UI.Toolbar('fill',optionsGlassPane.contentElement);optionsBar._contentElement.classList.add('floating');const buttonHeight=26;const hostButtonPosition=button.element.boxInWindow().relativeToElement(UI.GlassPane.container(document));const topNotBottom=hostButtonPosition.y+buttonHeight*buttons.length<document.documentElement.offsetHeight;if(topNotBottom){buttons=buttons.reverse();}
optionsBar.element.style.height=(buttonHeight*buttons.length)+'px';if(topNotBottom){optionsBar.element.style.top=(hostButtonPosition.y-5)+'px';}else{optionsBar.element.style.top=(hostButtonPosition.y-(buttonHeight*(buttons.length-1))-6)+'px';}
optionsBar.element.style.left=(hostButtonPosition.x-5)+'px';for(let i=0;i<buttons.length;++i){buttons[i].element.addEventListener('mousemove',mouseOver,false);buttons[i].element.addEventListener('mouseout',mouseOut,false);optionsBar.appendToolbarItem(buttons[i]);}
const hostButtonIndex=topNotBottom?0:buttons.length-1;buttons[hostButtonIndex].element.classList.add('emulate-active');function mouseOver(e){if(e.which!==1){return;}
const buttonElement=e.target.enclosingNodeOrSelfWithClass('toolbar-item');buttonElement.classList.add('emulate-active');}
function mouseOut(e){if(e.which!==1){return;}
const buttonElement=e.target.enclosingNodeOrSelfWithClass('toolbar-item');buttonElement.classList.remove('emulate-active');}
function mouseUp(e){if(e.which!==1){return;}
optionsGlassPane.hide();document.documentElement.removeEventListener('mouseup',mouseUp,false);for(let i=0;i<buttons.length;++i){if(buttons[i].element.classList.contains('emulate-active')){buttons[i].element.classList.remove('emulate-active');buttons[i]._clicked(e);break;}}}}}
static createActionButton(action,showLabel){const button=action.toggleable()?makeToggle():makeButton();if(showLabel){button.setText(action.title());}
button.addEventListener(ToolbarButton.Events.Click,action.execute,action);action.addEventListener(UI.Action.Events.Enabled,enabledChanged);button.setEnabled(action.enabled());return button;function makeButton(){const button=new ToolbarButton(action.title(),action.icon());if(action.title()){UI.Tooltip.install(button.element,action.title(),action.id());}
return button;}
function makeToggle(){const toggleButton=new ToolbarToggle(action.title(),action.icon(),action.toggledIcon());toggleButton.setToggleWithRedColor(action.toggleWithRedColor());action.addEventListener(UI.Action.Events.Toggled,toggled);toggled();return toggleButton;function toggled(){toggleButton.setToggled(action.toggled());if(action.title()){UI.Tooltip.install(toggleButton.element,action.title(),action.id());}}}
function enabledChanged(event){button.setEnabled((event.data));}}
static createActionButtonForId(actionId,showLabel){const action=UI.actionRegistry.action(actionId);return UI.Toolbar.createActionButton((action),showLabel);}
gripElementForResize(){return this._contentElement;}
makeWrappable(growVertically){this._contentElement.classList.add('wrappable');if(growVertically){this._contentElement.classList.add('toolbar-grow-vertical');}}
makeVertical(){this._contentElement.classList.add('vertical');}
makeBlueOnHover(){this._contentElement.classList.add('toolbar-blue-on-hover');}
makeToggledGray(){this._contentElement.classList.add('toolbar-toggled-gray');}
renderAsLinks(){this._contentElement.classList.add('toolbar-render-as-links');}
empty(){return!this._items.length;}
setEnabled(enabled){this._enabled=enabled;for(const item of this._items){item._applyEnabledState(this._enabled&&item._enabled);}}
appendToolbarItem(item){this._items.push(item);item._toolbar=this;if(!this._enabled){item._applyEnabledState(false);}
this._contentElement.insertBefore(item.element,this._insertionPoint);this._hideSeparatorDupes();}
appendSeparator(){this.appendToolbarItem(new ToolbarSeparator());}
appendSpacer(){this.appendToolbarItem(new ToolbarSeparator(true));}
appendText(text){this.appendToolbarItem(new ToolbarText(text));}
removeToolbarItems(){for(const item of this._items){delete item._toolbar;}
this._items=[];this._contentElement.removeChildren();this._insertionPoint=this._contentElement.createChild('slot');}
setColor(color){const style=createElement('style');style.textContent='.toolbar-glyph { background-color: '+color+' !important }';this._shadowRoot.appendChild(style);}
setToggledColor(color){const style=createElement('style');style.textContent='.toolbar-button.toolbar-state-on .toolbar-glyph { background-color: '+color+' !important }';this._shadowRoot.appendChild(style);}
_hideSeparatorDupes(){if(!this._items.length){return;}
let previousIsSeparator=false;let lastSeparator;let nonSeparatorVisible=false;for(let i=0;i<this._items.length;++i){if(this._items[i]instanceof ToolbarSeparator){this._items[i].setVisible(!previousIsSeparator);previousIsSeparator=true;lastSeparator=this._items[i];continue;}
if(this._items[i].visible()){previousIsSeparator=false;lastSeparator=null;nonSeparatorVisible=true;}}
if(lastSeparator&&lastSeparator!==this._items.peekLast()){lastSeparator.setVisible(false);}
this.element.classList.toggle('hidden',!!lastSeparator&&lastSeparator.visible()&&!nonSeparatorVisible);}
async appendItemsAtLocation(location){const extensions=self.runtime.extensions(Provider);const filtered=extensions.filter(e=>e.descriptor()['location']===location);const items=await Promise.all(filtered.map(extension=>{const descriptor=extension.descriptor();if(descriptor['separator']){return new ToolbarSeparator();}
if(descriptor['actionId']){return UI.Toolbar.createActionButtonForId(descriptor['actionId'],descriptor['showLabel']);}
return extension.instance().then(p=>p.item());}));items.filter(item=>item).forEach(item=>this.appendToolbarItem(item));}}
export class ToolbarItem extends Common.Object{constructor(element){super();this.element=element;this.element.classList.add('toolbar-item');this._visible=true;this._enabled=true;}
setTitle(title){if(this._title===title){return;}
this._title=title;UI.ARIAUtils.setAccessibleName(this.element,title);UI.Tooltip.install(this.element,title);}
setEnabled(value){if(this._enabled===value){return;}
this._enabled=value;this._applyEnabledState(this._enabled&&(!this._toolbar||this._toolbar._enabled));}
_applyEnabledState(enabled){this.element.disabled=!enabled;}
visible(){return this._visible;}
setVisible(x){if(this._visible===x){return;}
this.element.classList.toggle('hidden',!x);this._visible=x;if(this._toolbar&&!(this instanceof ToolbarSeparator)){this._toolbar._hideSeparatorDupes();}}
setRightAligned(alignRight){this.element.classList.toggle('toolbar-item-right-aligned',alignRight);}}
export class ToolbarText extends ToolbarItem{constructor(text){super(createElementWithClass('div','toolbar-text'));this.element.classList.add('toolbar-text');this.setText(text||'');}
text(){return this.element.textContent;}
setText(text){this.element.textContent=text;}}
export class ToolbarButton extends ToolbarItem{constructor(title,glyph,text){super(createElementWithClass('button','toolbar-button'));this.element.addEventListener('click',this._clicked.bind(this),false);this.element.addEventListener('mousedown',this._mouseDown.bind(this),false);this._glyphElement=UI.Icon.create('','toolbar-glyph hidden');this.element.appendChild(this._glyphElement);this._textElement=this.element.createChild('div','toolbar-text hidden');this.setTitle(title);if(glyph){this.setGlyph(glyph);}
this.setText(text||'');this._title='';}
setText(text){if(this._text===text){return;}
this._textElement.textContent=text;this._textElement.classList.toggle('hidden',!text);this._text=text;}
setGlyph(glyph){if(this._glyph===glyph){return;}
this._glyphElement.setIconType(glyph);this._glyphElement.classList.toggle('hidden',!glyph);this.element.classList.toggle('toolbar-has-glyph',!!glyph);this._glyph=glyph;}
setBackgroundImage(iconURL){this.element.style.backgroundImage='url('+iconURL+')';}
setDarkText(){this.element.classList.add('dark-text');}
turnIntoSelect(width){this.element.classList.add('toolbar-has-dropdown');const dropdownArrowIcon=UI.Icon.create('smallicon-triangle-down','toolbar-dropdown-arrow');this.element.appendChild(dropdownArrowIcon);if(width){this.element.style.width=width+'px';}}
_clicked(event){if(!this._enabled){return;}
this.dispatchEventToListeners(ToolbarButton.Events.Click,event);event.consume();}
_mouseDown(event){if(!this._enabled){return;}
this.dispatchEventToListeners(ToolbarButton.Events.MouseDown,event);}}
ToolbarButton.Events={Click:Symbol('Click'),MouseDown:Symbol('MouseDown')};export class ToolbarInput extends ToolbarItem{constructor(placeholder,accessiblePlaceholder,growFactor,shrinkFactor,tooltip,completions){super(createElementWithClass('div','toolbar-input'));const internalPromptElement=this.element.createChild('div','toolbar-input-prompt');internalPromptElement.addEventListener('focus',()=>this.element.classList.add('focused'));internalPromptElement.addEventListener('blur',()=>this.element.classList.remove('focused'));this._prompt=new UI.TextPrompt();this._proxyElement=this._prompt.attach(internalPromptElement);this._proxyElement.classList.add('toolbar-prompt-proxy');this._proxyElement.addEventListener('keydown',event=>this._onKeydownCallback(event));this._prompt.initialize(completions||(()=>Promise.resolve([])),' ');if(tooltip){this._prompt.setTitle(tooltip);}
this._prompt.setPlaceholder(placeholder,accessiblePlaceholder);this._prompt.addEventListener(UI.TextPrompt.Events.TextChanged,this._onChangeCallback.bind(this));if(growFactor){this.element.style.flexGrow=growFactor;}
if(shrinkFactor){this.element.style.flexShrink=shrinkFactor;}
const clearButton=this.element.createChild('div','toolbar-input-clear-button');clearButton.appendChild(UI.Icon.create('mediumicon-gray-cross-hover','search-cancel-button'));clearButton.addEventListener('click',()=>{this.setValue('',true);this._prompt.focus();});this._updateEmptyStyles();}
_applyEnabledState(enabled){this._prompt.setEnabled(enabled);}
setValue(value,notify){this._prompt.setText(value);if(notify){this._onChangeCallback();}
this._updateEmptyStyles();}
value(){return this._prompt.textWithCurrentSuggestion();}
_onKeydownCallback(event){if(!isEscKey(event)||!this._prompt.text()){return;}
this.setValue('',true);event.consume(true);}
_onChangeCallback(){this._updateEmptyStyles();this.dispatchEventToListeners(ToolbarInput.Event.TextChanged,this._prompt.text());}
_updateEmptyStyles(){this.element.classList.toggle('toolbar-input-empty',!this._prompt.text());}}
ToolbarInput.Event={TextChanged:Symbol('TextChanged')};export class ToolbarToggle extends ToolbarButton{constructor(title,glyph,toggledGlyph){super(title,glyph,'');this._toggled=false;this._untoggledGlyph=glyph;this._toggledGlyph=toggledGlyph;this.element.classList.add('toolbar-state-off');UI.ARIAUtils.setPressed(this.element,false);}
toggled(){return this._toggled;}
setToggled(toggled){if(this._toggled===toggled){return;}
this._toggled=toggled;this.element.classList.toggle('toolbar-state-on',toggled);this.element.classList.toggle('toolbar-state-off',!toggled);UI.ARIAUtils.setPressed(this.element,toggled);if(this._toggledGlyph&&this._untoggledGlyph){this.setGlyph(toggled?this._toggledGlyph:this._untoggledGlyph);}}
setDefaultWithRedColor(withRedColor){this.element.classList.toggle('toolbar-default-with-red-color',withRedColor);}
setToggleWithRedColor(toggleWithRedColor){this.element.classList.toggle('toolbar-toggle-with-red-color',toggleWithRedColor);}}
export class ToolbarMenuButton extends ToolbarButton{constructor(contextMenuHandler,useSoftMenu){super('','largeicon-menu');this._contextMenuHandler=contextMenuHandler;this._useSoftMenu=!!useSoftMenu;UI.ARIAUtils.markAsMenuButton(this.element);}
_mouseDown(event){if(event.buttons!==1){super._mouseDown(event);return;}
if(!this._triggerTimeout){this._triggerTimeout=setTimeout(this._trigger.bind(this,event),200);}}
_trigger(event){delete this._triggerTimeout;if(this._lastTriggerTime&&Date.now()-this._lastTriggerTime<300){return;}
const contextMenu=new UI.ContextMenu(event,this._useSoftMenu,this.element.totalOffsetLeft(),this.element.totalOffsetTop()+this.element.offsetHeight);this._contextMenuHandler(contextMenu);contextMenu.show();this._lastTriggerTime=Date.now();}
_clicked(event){if(this._triggerTimeout){clearTimeout(this._triggerTimeout);}
this._trigger(event);}}
export class ToolbarSettingToggle extends ToolbarToggle{constructor(setting,glyph,title){super(title,glyph);this._defaultTitle=title;this._setting=setting;this._settingChanged();this._setting.addChangeListener(this._settingChanged,this);}
_settingChanged(){const toggled=this._setting.get();this.setToggled(toggled);this.setTitle(this._defaultTitle);}
_clicked(event){this._setting.set(!this.toggled());super._clicked(event);}}
export class ToolbarSeparator extends ToolbarItem{constructor(spacer){super(createElementWithClass('div',spacer?'toolbar-spacer':'toolbar-divider'));}}
export class Provider{item(){}}
export class ItemsProvider{toolbarItems(){}}
export class ToolbarComboBox extends ToolbarItem{constructor(changeHandler,title,className){super(createElementWithClass('span','toolbar-select-container'));this._selectElement=this.element.createChild('select','toolbar-item');const dropdownArrowIcon=UI.Icon.create('smallicon-triangle-down','toolbar-dropdown-arrow');this.element.appendChild(dropdownArrowIcon);if(changeHandler){this._selectElement.addEventListener('change',changeHandler,false);}
UI.ARIAUtils.setAccessibleName(this._selectElement,title);super.setTitle(title);if(className){this._selectElement.classList.add(className);}}
selectElement(){return(this._selectElement);}
size(){return this._selectElement.childElementCount;}
options(){return Array.prototype.slice.call(this._selectElement.children,0);}
addOption(option){this._selectElement.appendChild(option);}
createOption(label,value){const option=this._selectElement.createChild('option');option.text=label;if(typeof value!=='undefined'){option.value=value;}
return option;}
_applyEnabledState(enabled){super._applyEnabledState(enabled);this._selectElement.disabled=!enabled;}
removeOption(option){this._selectElement.removeChild(option);}
removeOptions(){this._selectElement.removeChildren();}
selectedOption(){if(this._selectElement.selectedIndex>=0){return this._selectElement[this._selectElement.selectedIndex];}
return null;}
select(option){this._selectElement.selectedIndex=Array.prototype.indexOf.call((this._selectElement),option);}
setSelectedIndex(index){this._selectElement.selectedIndex=index;}
selectedIndex(){return this._selectElement.selectedIndex;}
setMaxWidth(width){this._selectElement.style.maxWidth=width+'px';}
setMinWidth(width){this._selectElement.style.minWidth=width+'px';}}
export class ToolbarSettingComboBox extends ToolbarComboBox{constructor(options,setting,accessibleName){super(null,accessibleName);this._options=options;this._setting=setting;this._selectElement.addEventListener('change',this._valueChanged.bind(this),false);this.setOptions(options);setting.addChangeListener(this._settingChanged,this);}
setOptions(options){this._options=options;this._selectElement.removeChildren();for(let i=0;i<options.length;++i){const dataOption=options[i];const option=this.createOption(dataOption.label,dataOption.value);this._selectElement.appendChild(option);if(this._setting.get()===dataOption.value){this.setSelectedIndex(i);}}}
value(){return this._options[this.selectedIndex()].value;}
_settingChanged(){if(this._muteSettingListener){return;}
const value=this._setting.get();for(let i=0;i<this._options.length;++i){if(value===this._options[i].value){this.setSelectedIndex(i);break;}}}
_valueChanged(event){const option=this._options[this.selectedIndex()];this._muteSettingListener=true;this._setting.set(option.value);this._muteSettingListener=false;}}
export class ToolbarCheckbox extends ToolbarItem{constructor(text,tooltip,listener){super(UI.CheckboxLabel.create(text));this.element.classList.add('checkbox');this.inputElement=this.element.checkboxElement;if(tooltip){this.element.title=tooltip;}
if(listener){this.inputElement.addEventListener('click',listener,false);}}
checked(){return this.inputElement.checked;}
setChecked(value){this.inputElement.checked=value;}
_applyEnabledState(enabled){super._applyEnabledState(enabled);this.inputElement.disabled=!enabled;}}
export class ToolbarSettingCheckbox extends ToolbarCheckbox{constructor(setting,tooltip,alternateTitle){super(alternateTitle||setting.title()||'',tooltip);UI.SettingsUI.bindCheckbox(this.inputElement,setting);}}
self.UI=self.UI||{};UI=UI||{};UI.Toolbar=Toolbar;UI.ToolbarItem=ToolbarItem;UI.ToolbarText=ToolbarText;UI.ToolbarButton=ToolbarButton;UI.ToolbarInput=ToolbarInput;UI.ToolbarToggle=ToolbarToggle;UI.ToolbarMenuButton=ToolbarMenuButton;UI.ToolbarSettingToggle=ToolbarSettingToggle;UI.ToolbarSeparator=ToolbarSeparator;UI.ToolbarItem.Provider=Provider;UI.ToolbarItem.ItemsProvider=ItemsProvider;UI.ToolbarComboBox=ToolbarComboBox;UI.ToolbarSettingComboBox=ToolbarSettingComboBox;UI.ToolbarCheckbox=ToolbarCheckbox;UI.ToolbarSettingCheckbox=ToolbarSettingCheckbox;export default class ThrottledWidget extends UI.VBox{constructor(isWebComponent,timeout){super(isWebComponent);this._updateThrottler=new Common.Throttler(timeout===undefined?100:timeout);this._updateWhenVisible=false;}
doUpdate(){return Promise.resolve();}
update(){this._updateWhenVisible=!this.isShowing();if(this._updateWhenVisible){return;}
this._updateThrottler.schedule(innerUpdate.bind(this));function innerUpdate(){if(this.isShowing()){return this.doUpdate();}
this._updateWhenVisible=true;return Promise.resolve();}}
wasShown(){super.wasShown();if(this._updateWhenVisible){this.update();}}}
self.UI=self.UI||{};UI=UI||{};UI.ThrottledWidget=ThrottledWidget;export default class TextPrompt extends Common.Object{constructor(){super();this._proxyElement;this._proxyElementDisplay='inline-block';this._autocompletionTimeout=DefaultAutocompletionTimeout;this._title='';this._queryRange=null;this._previousText='';this._currentSuggestion=null;this._completionRequestId=0;this._ghostTextElement=createElementWithClass('span','auto-complete-text');this._ghostTextElement.setAttribute('contenteditable','false');UI.ARIAUtils.markAsHidden(this._ghostTextElement);}
initialize(completions,stopCharacters){this._loadCompletions=completions;this._completionStopCharacters=stopCharacters||' =:[({;,!+-*/&|^<>.';}
setAutocompletionTimeout(timeout){this._autocompletionTimeout=timeout;}
renderAsBlock(){this._proxyElementDisplay='block';}
attach(element){return this._attachInternal(element);}
attachAndStartEditing(element,blurListener){const proxyElement=this._attachInternal(element);this._startEditing(blurListener);return proxyElement;}
_attachInternal(element){if(this._proxyElement){throw'Cannot attach an attached TextPrompt';}
this._element=element;this._boundOnKeyDown=this.onKeyDown.bind(this);this._boundOnInput=this.onInput.bind(this);this._boundOnMouseWheel=this.onMouseWheel.bind(this);this._boundClearAutocomplete=this.clearAutocomplete.bind(this);this._proxyElement=element.ownerDocument.createElement('span');UI.appendStyle(this._proxyElement,'ui/textPrompt.css');this._contentElement=this._proxyElement.createChild('div','text-prompt-root');this._proxyElement.style.display=this._proxyElementDisplay;element.parentElement.insertBefore(this._proxyElement,element);this._contentElement.appendChild(element);this._element.classList.add('text-prompt');UI.ARIAUtils.markAsTextBox(this._element);this._element.setAttribute('contenteditable','plaintext-only');this._element.addEventListener('keydown',this._boundOnKeyDown,false);this._element.addEventListener('input',this._boundOnInput,false);this._element.addEventListener('mousewheel',this._boundOnMouseWheel,false);this._element.addEventListener('selectstart',this._boundClearAutocomplete,false);this._element.addEventListener('blur',this._boundClearAutocomplete,false);this._suggestBox=new UI.SuggestBox(this,20);if(this._title){this._proxyElement.title=this._title;}
return this._proxyElement;}
detach(){this._removeFromElement();this._focusRestorer.restore();this._proxyElement.parentElement.insertBefore(this._element,this._proxyElement);this._proxyElement.remove();delete this._proxyElement;this._element.classList.remove('text-prompt');this._element.removeAttribute('contenteditable');this._element.removeAttribute('role');}
textWithCurrentSuggestion(){const text=this.text();if(!this._queryRange||!this._currentSuggestion){return text;}
const suggestion=this._currentSuggestion.text;return text.substring(0,this._queryRange.startColumn)+suggestion+text.substring(this._queryRange.endColumn);}
text(){let text=this._element.textContent;if(this._ghostTextElement.parentNode){const addition=this._ghostTextElement.textContent;text=text.substring(0,text.length-addition.length);}
return text;}
setText(text){this.clearAutocomplete();this._element.textContent=text;this._previousText=this.text();if(this._element.hasFocus()){this.moveCaretToEndOfPrompt();this._element.scrollIntoView();}}
focus(){this._element.focus();}
title(){return this._title;}
setTitle(title){this._title=title;if(this._proxyElement){this._proxyElement.title=title;}}
setPlaceholder(placeholder,ariaPlaceholder){if(placeholder){this._element.setAttribute('data-placeholder',placeholder);UI.ARIAUtils.setPlaceholder(this._element,ariaPlaceholder||placeholder);}else{this._element.removeAttribute('data-placeholder');UI.ARIAUtils.setPlaceholder(this._element,null);}}
setEnabled(enabled){if(enabled){this._element.setAttribute('contenteditable','plaintext-only');}else{this._element.removeAttribute('contenteditable');}
this._element.classList.toggle('disabled',!enabled);}
_removeFromElement(){this.clearAutocomplete();this._element.removeEventListener('keydown',this._boundOnKeyDown,false);this._element.removeEventListener('input',this._boundOnInput,false);this._element.removeEventListener('selectstart',this._boundClearAutocomplete,false);this._element.removeEventListener('blur',this._boundClearAutocomplete,false);if(this._isEditing){this._stopEditing();}
if(this._suggestBox){this._suggestBox.hide();}}
_startEditing(blurListener){this._isEditing=true;this._contentElement.classList.add('text-prompt-editing');if(blurListener){this._blurListener=blurListener;this._element.addEventListener('blur',this._blurListener,false);}
this._oldTabIndex=this._element.tabIndex;if(this._element.tabIndex<0){this._element.tabIndex=0;}
this._focusRestorer=new UI.ElementFocusRestorer(this._element);if(!this.text()){this.autoCompleteSoon();}}
_stopEditing(){this._element.tabIndex=this._oldTabIndex;if(this._blurListener){this._element.removeEventListener('blur',this._blurListener,false);}
this._contentElement.classList.remove('text-prompt-editing');delete this._isEditing;}
onMouseWheel(event){}
onKeyDown(event){let handled=false;if(this.isSuggestBoxVisible()&&this._suggestBox.keyPressed(event)){event.consume(true);return;}
switch(event.key){case'Tab':handled=this.tabKeyPressed(event);break;case'ArrowLeft':case'ArrowUp':case'PageUp':case'Home':this.clearAutocomplete();break;case'PageDown':case'ArrowRight':case'ArrowDown':case'End':if(this._isCaretAtEndOfPrompt()){handled=this.acceptAutoComplete();}else{this.clearAutocomplete();}
break;case'Escape':if(this.isSuggestBoxVisible()){this.clearAutocomplete();handled=true;}
break;case' ':if(event.ctrlKey&&!event.metaKey&&!event.altKey&&!event.shiftKey){this.autoCompleteSoon(true);handled=true;}
break;}
if(isEnterKey(event)){event.preventDefault();}
if(handled){event.consume(true);}}
_acceptSuggestionOnStopCharacters(key){if(!this._currentSuggestion||!this._queryRange||key.length!==1||!this._completionStopCharacters.includes(key)){return false;}
const query=this.text().substring(this._queryRange.startColumn,this._queryRange.endColumn);if(query&&this._currentSuggestion.text.startsWith(query+key)){this._queryRange.endColumn+=1;return this.acceptAutoComplete();}
return false;}
onInput(event){const text=this.text();if(event.data&&!this._acceptSuggestionOnStopCharacters(event.data)){const hasCommonPrefix=text.startsWith(this._previousText)||this._previousText.startsWith(text);if(this._queryRange&&hasCommonPrefix){this._queryRange.endColumn+=text.length-this._previousText.length;}}
this._refreshGhostText();this._previousText=text;this.dispatchEventToListeners(Events.TextChanged);this.autoCompleteSoon();}
acceptAutoComplete(){let result=false;if(this.isSuggestBoxVisible()){result=this._suggestBox.acceptSuggestion();}
if(!result){result=this._acceptSuggestionInternal();}
return result;}
clearAutocomplete(){const beforeText=this.textWithCurrentSuggestion();if(this.isSuggestBoxVisible()){this._suggestBox.hide();}
this._clearAutocompleteTimeout();this._queryRange=null;this._refreshGhostText();if(beforeText!==this.textWithCurrentSuggestion()){this.dispatchEventToListeners(Events.TextChanged);}}
_refreshGhostText(){if(this._currentSuggestion&&this._currentSuggestion.hideGhostText){this._ghostTextElement.remove();return;}
if(this._queryRange&&this._currentSuggestion&&this._isCaretAtEndOfPrompt()&&this._currentSuggestion.text.startsWith(this.text().substring(this._queryRange.startColumn))){this._ghostTextElement.textContent=this._currentSuggestion.text.substring(this._queryRange.endColumn-this._queryRange.startColumn);this._element.appendChild(this._ghostTextElement);}else{this._ghostTextElement.remove();}}
_clearAutocompleteTimeout(){if(this._completeTimeout){clearTimeout(this._completeTimeout);delete this._completeTimeout;}
this._completionRequestId++;}
autoCompleteSoon(force){const immediately=this.isSuggestBoxVisible()||force;if(!this._completeTimeout){this._completeTimeout=setTimeout(this.complete.bind(this,force),immediately?0:this._autocompletionTimeout);}}
async complete(force){this._clearAutocompleteTimeout();const selection=this._element.getComponentSelection();const selectionRange=selection&&selection.rangeCount?selection.getRangeAt(0):null;if(!selectionRange){return;}
let shouldExit;if(!force&&!this._isCaretAtEndOfPrompt()&&!this.isSuggestBoxVisible()){shouldExit=true;}else if(!selection.isCollapsed){shouldExit=true;}
if(shouldExit){this.clearAutocomplete();return;}
const wordQueryRange=selectionRange.startContainer.rangeOfWord(selectionRange.startOffset,this._completionStopCharacters,this._element,'backward');const expressionRange=wordQueryRange.cloneRange();expressionRange.collapse(true);expressionRange.setStartBefore(this._element);const completionRequestId=++this._completionRequestId;const completions=await this._loadCompletions(expressionRange.toString(),wordQueryRange.toString(),!!force);this._completionsReady(completionRequestId,selection,wordQueryRange,!!force,completions);}
disableDefaultSuggestionForEmptyInput(){this._disableDefaultSuggestionForEmptyInput=true;}
_boxForAnchorAtStart(selection,textRange){const rangeCopy=selection.getRangeAt(0).cloneRange();const anchorElement=createElement('span');anchorElement.textContent='\u200B';textRange.insertNode(anchorElement);const box=anchorElement.boxInWindow(window);anchorElement.remove();selection.removeAllRanges();selection.addRange(rangeCopy);return box;}
_createRange(){return document.createRange();}
additionalCompletions(query){return[];}
_completionsReady(completionRequestId,selection,originalWordQueryRange,force,completions){if(this._completionRequestId!==completionRequestId){return;}
const query=originalWordQueryRange.toString();const store=new Set();completions=completions.filter(item=>!store.has(item.text)&&!!store.add(item.text));if(query||force){if(query){completions=completions.concat(this.additionalCompletions(query));}else{completions=this.additionalCompletions(query).concat(completions);}}
if(!completions.length){this.clearAutocomplete();return;}
const selectionRange=selection.getRangeAt(0);const fullWordRange=this._createRange();fullWordRange.setStart(originalWordQueryRange.startContainer,originalWordQueryRange.startOffset);fullWordRange.setEnd(selectionRange.endContainer,selectionRange.endOffset);if(query+selectionRange.toString()!==fullWordRange.toString()){return;}
const beforeRange=this._createRange();beforeRange.setStart(this._element,0);beforeRange.setEnd(fullWordRange.startContainer,fullWordRange.startOffset);this._queryRange=new TextUtils.TextRange(0,beforeRange.toString().length,0,beforeRange.toString().length+fullWordRange.toString().length);const shouldSelect=!this._disableDefaultSuggestionForEmptyInput||!!this.text();if(this._suggestBox){this._suggestBox.updateSuggestions(this._boxForAnchorAtStart(selection,fullWordRange),completions,shouldSelect,!this._isCaretAtEndOfPrompt(),this.text());}}
applySuggestion(suggestion,isIntermediateSuggestion){this._currentSuggestion=suggestion;this._refreshGhostText();if(isIntermediateSuggestion){this.dispatchEventToListeners(Events.TextChanged);}}
acceptSuggestion(){this._acceptSuggestionInternal();}
_acceptSuggestionInternal(){if(!this._queryRange){return false;}
const suggestionLength=this._currentSuggestion?this._currentSuggestion.text.length:0;const selectionRange=this._currentSuggestion?this._currentSuggestion.selectionRange:null;const endColumn=selectionRange?selectionRange.endColumn:suggestionLength;const startColumn=selectionRange?selectionRange.startColumn:suggestionLength;this._element.textContent=this.textWithCurrentSuggestion();this.setDOMSelection(this._queryRange.startColumn+startColumn,this._queryRange.startColumn+endColumn);this.clearAutocomplete();this.dispatchEventToListeners(Events.TextChanged);return true;}
setDOMSelection(startColumn,endColumn){this._element.normalize();const node=this._element.childNodes[0];if(!node||node===this._ghostTextElement){return;}
const range=this._createRange();range.setStart(node,startColumn);range.setEnd(node,endColumn);const selection=this._element.getComponentSelection();selection.removeAllRanges();selection.addRange(range);}
isSuggestBoxVisible(){return this._suggestBox&&this._suggestBox.visible();}
isCaretInsidePrompt(){const selection=this._element.getComponentSelection();const selectionRange=selection&&selection.rangeCount?selection.getRangeAt(0):null;if(!selectionRange||!selection.isCollapsed){return false;}
return selectionRange.startContainer.isSelfOrDescendant(this._element);}
_isCaretAtEndOfPrompt(){const selection=this._element.getComponentSelection();const selectionRange=selection&&selection.rangeCount?selection.getRangeAt(0):null;if(!selectionRange||!selection.isCollapsed){return false;}
let node=selectionRange.startContainer;if(!node.isSelfOrDescendant(this._element)){return false;}
if(this._ghostTextElement.isAncestor(node)){return true;}
if(node.nodeType===Node.TEXT_NODE&&selectionRange.startOffset<node.nodeValue.length){return false;}
let foundNextText=false;while(node){if(node.nodeType===Node.TEXT_NODE&&node.nodeValue.length){if(foundNextText&&!this._ghostTextElement.isAncestor(node)){return false;}
foundNextText=true;}
node=node.traverseNextNode(this._element);}
return true;}
moveCaretToEndOfPrompt(){const selection=this._element.getComponentSelection();const selectionRange=this._createRange();let container=this._element;while(container.childNodes.length){container=container.lastChild;}
const offset=container.nodeType===Node.TEXT_NODE?container.textContent.length:0;selectionRange.setStart(container,offset);selectionRange.setEnd(container,offset);selection.removeAllRanges();selection.addRange(selectionRange);}
tabKeyPressed(event){return this.acceptAutoComplete();}
proxyElementForTests(){return this._proxyElement||null;}}
const DefaultAutocompletionTimeout=250;export const Events={TextChanged:Symbol('TextChanged')};self.UI=self.UI||{};UI=UI||{};UI.TextPrompt=TextPrompt;UI.TextPrompt.Events=Events;export class TextEditorFactory{createEditor(options){}}
export class TextEditor extends Common.EventTarget{widget(){}
fullRange(){}
selection(){}
setSelection(selection){}
text(textRange){}
textWithCurrentSuggestion(){}
setText(text){}
line(lineNumber){}
newlineAndIndent(){}
addKeyDownHandler(handler){}
configureAutocomplete(config){}
clearAutocomplete(){}
visualCoordinates(lineNumber,columnNumber){}
tokenAtTextPosition(lineNumber,columnNumber){}
setPlaceholder(placeholder){}}
export const Events={CursorChanged:Symbol('CursorChanged'),TextChanged:Symbol('TextChanged'),SuggestionChanged:Symbol('SuggestionChanged')};self.UI=self.UI||{};UI=UI||{};UI.TextEditor=TextEditor;UI.TextEditorFactory=TextEditorFactory;UI.TextEditor.Events=Events;UI.TextEditor.Options;UI.AutocompleteConfig;export default class TargetCrashedScreen extends UI.VBox{constructor(hideCallback){super(true);this.registerRequiredCSS('ui/targetCrashedScreen.css');this.contentElement.createChild('div','message').textContent=Common.UIString('DevTools was disconnected from the page.');this.contentElement.createChild('div','message').textContent=Common.UIString('Once page is reloaded, DevTools will automatically reconnect.');this._hideCallback=hideCallback;}
willHide(){this._hideCallback.call(null);}}
self.UI=self.UI||{};UI=UI||{};UI.TargetCrashedScreen=TargetCrashedScreen;export default class TabbedPane extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('ui/tabbedPane.css');this.element.classList.add('tabbed-pane');this.contentElement.classList.add('tabbed-pane-shadow');this.contentElement.tabIndex=-1;this.setDefaultFocusedElement(this.contentElement);this._headerElement=this.contentElement.createChild('div','tabbed-pane-header');this._headerContentsElement=this._headerElement.createChild('div','tabbed-pane-header-contents');this._tabSlider=createElementWithClass('div','tabbed-pane-tab-slider');this._tabsElement=this._headerContentsElement.createChild('div','tabbed-pane-header-tabs');this._tabsElement.setAttribute('role','tablist');this._tabsElement.addEventListener('keydown',this._keyDown.bind(this),false);this._contentElement=this.contentElement.createChild('div','tabbed-pane-content');this._contentElement.createChild('slot');this._tabs=[];this._tabsHistory=[];this._tabsById=new Map();this._currentTabLocked=false;this._autoSelectFirstItemOnShow=true;this._triggerDropDownTimeout=null;this._dropDownButton=this._createDropDownButton();UI.zoomManager.addEventListener(UI.ZoomManager.Events.ZoomChanged,this._zoomChanged,this);this.makeTabSlider();}
setAccessibleName(name){UI.ARIAUtils.setAccessibleName(this._tabsElement,name);}
setCurrentTabLocked(locked){this._currentTabLocked=locked;this._headerElement.classList.toggle('locked',this._currentTabLocked);}
setAutoSelectFirstItemOnShow(autoSelect){this._autoSelectFirstItemOnShow=autoSelect;}
get visibleView(){return this._currentTab?this._currentTab.view:null;}
tabIds(){return this._tabs.map(tab=>tab._id);}
tabIndex(tabId){return this._tabs.findIndex(tab=>tab.id===tabId);}
tabViews(){return this._tabs.map(tab=>tab.view);}
tabView(tabId){return this._tabsById.has(tabId)?this._tabsById.get(tabId).view:null;}
get selectedTabId(){return this._currentTab?this._currentTab.id:null;}
setShrinkableTabs(shrinkableTabs){this._shrinkableTabs=shrinkableTabs;}
makeVerticalTabLayout(){this._verticalTabLayout=true;this._setTabSlider(false);this.contentElement.classList.add('vertical-tab-layout');this.invalidateConstraints();}
setCloseableTabs(closeableTabs){this._closeableTabs=closeableTabs;}
focus(){if(this.visibleView){this.visibleView.focus();}else{this._defaultFocusedElement.focus();}}
headerElement(){return this._headerElement;}
isTabCloseable(id){const tab=this._tabsById.get(id);return tab?tab.isCloseable():false;}
setTabDelegate(delegate){const tabs=this._tabs.slice();for(let i=0;i<tabs.length;++i){tabs[i].setDelegate(delegate);}
this._delegate=delegate;}
appendTab(id,tabTitle,view,tabTooltip,userGesture,isCloseable,index){isCloseable=typeof isCloseable==='boolean'?isCloseable:this._closeableTabs;const tab=new TabbedPaneTab(this,id,tabTitle,isCloseable,view,tabTooltip);tab.setDelegate(this._delegate);console.assert(!this._tabsById.has(id),`Tabbed pane already contains a tab with id '${id}'`);this._tabsById.set(id,tab);if(index!==undefined){this._tabs.splice(index,0,tab);}else{this._tabs.push(tab);}
this._tabsHistory.push(tab);if(this._tabsHistory[0]===tab&&this.isShowing()){this.selectTab(tab.id,userGesture);}
this._updateTabElements();}
closeTab(id,userGesture){this.closeTabs([id],userGesture);}
closeTabs(ids,userGesture){const focused=this.hasFocus();for(let i=0;i<ids.length;++i){this._innerCloseTab(ids[i],userGesture);}
this._updateTabElements();if(this._tabsHistory.length){this.selectTab(this._tabsHistory[0].id,false);}
if(focused){this.focus();}}
_innerCloseTab(id,userGesture){if(!this._tabsById.has(id)){return;}
if(userGesture&&!this._tabsById.get(id)._closeable){return;}
if(this._currentTab&&this._currentTab.id===id){this._hideCurrentTab();}
const tab=this._tabsById.get(id);this._tabsById.delete(id);this._tabsHistory.splice(this._tabsHistory.indexOf(tab),1);this._tabs.splice(this._tabs.indexOf(tab),1);if(tab._shown){this._hideTabElement(tab);}
const eventData={tabId:id,view:tab.view,isUserGesture:userGesture};this.dispatchEventToListeners(Events.TabClosed,eventData);return true;}
hasTab(tabId){return this._tabsById.has(tabId);}
otherTabs(id){const result=[];for(let i=0;i<this._tabs.length;++i){if(this._tabs[i].id!==id){result.push(this._tabs[i].id);}}
return result;}
_tabsToTheRight(id){let index=-1;for(let i=0;i<this._tabs.length;++i){if(this._tabs[i].id===id){index=i;break;}}
if(index===-1){return[];}
return this._tabs.slice(index+1).map(function(tab){return tab.id;});}
_viewHasFocus(){if(this.visibleView&&this.visibleView.hasFocus()){return true;}
return this.contentElement===this.contentElement.getComponentRoot().activeElement;}
selectTab(id,userGesture,forceFocus){if(this._currentTabLocked){return false;}
const focused=this._viewHasFocus();const tab=this._tabsById.get(id);if(!tab){return false;}
if(this._currentTab&&this._currentTab.id===id){return true;}
this.suspendInvalidations();this._hideCurrentTab();this._showTab(tab);this.resumeInvalidations();this._currentTab=tab;this._tabsHistory.splice(this._tabsHistory.indexOf(tab),1);this._tabsHistory.splice(0,0,tab);this._updateTabElements();if(focused||forceFocus){this.focus();}
const eventData={tabId:id,view:tab.view,isUserGesture:userGesture};this.dispatchEventToListeners(Events.TabSelected,eventData);return true;}
selectNextTab(){const index=this._tabs.indexOf(this._currentTab);const nextIndex=mod(index+1,this._tabs.length);this.selectTab(this._tabs[nextIndex].id,true);}
selectPrevTab(){const index=this._tabs.indexOf(this._currentTab);const nextIndex=mod(index-1,this._tabs.length);this.selectTab(this._tabs[nextIndex].id,true);}
lastOpenedTabIds(tabsCount){function tabToTabId(tab){return tab.id;}
return this._tabsHistory.slice(0,tabsCount).map(tabToTabId);}
setTabIcon(id,icon){const tab=this._tabsById.get(id);tab._setIcon(icon);this._updateTabElements();}
setTabEnabled(id,enabled){const tab=this._tabsById.get(id);tab.tabElement.classList.toggle('disabled',!enabled);}
toggleTabClass(id,className,force){const tab=this._tabsById.get(id);if(tab._toggleClass(className,force)){this._updateTabElements();}}
_zoomChanged(event){for(let i=0;i<this._tabs.length;++i){delete this._tabs[i]._measuredWidth;}
if(this.isShowing()){this._updateTabElements();}}
changeTabTitle(id,tabTitle,tabTooltip){const tab=this._tabsById.get(id);if(tabTooltip!==undefined){tab.tooltip=tabTooltip;}
if(tab.title!==tabTitle){tab.title=tabTitle;UI.ARIAUtils.setAccessibleName(tab.tabElement,tabTitle);this._updateTabElements();}}
changeTabView(id,view){const tab=this._tabsById.get(id);if(tab.view===view){return;}
this.suspendInvalidations();const isSelected=this._currentTab&&this._currentTab.id===id;const shouldFocus=tab.view.hasFocus();if(isSelected){this._hideTab(tab);}
tab.view=view;if(isSelected){this._showTab(tab);}
if(shouldFocus){tab.view.focus();}
this.resumeInvalidations();}
onResize(){this._updateTabElements();}
headerResized(){this._updateTabElements();}
wasShown(){const effectiveTab=this._currentTab||this._tabsHistory[0];if(effectiveTab&&this._autoSelectFirstItemOnShow){this.selectTab(effectiveTab.id);}}
makeTabSlider(){if(this._verticalTabLayout){return;}
this._setTabSlider(true);}
_setTabSlider(enable){this._sliderEnabled=enable;this._tabSlider.classList.toggle('enabled',enable);}
calculateConstraints(){let constraints=super.calculateConstraints();const minContentConstraints=new UI.Constraints(new UI.Size(0,0),new UI.Size(50,50));constraints=constraints.widthToMax(minContentConstraints).heightToMax(minContentConstraints);if(this._verticalTabLayout){constraints=constraints.addWidth(new UI.Constraints(new UI.Size(120,0)));}else{constraints=constraints.addHeight(new UI.Constraints(new UI.Size(0,30)));}
return constraints;}
_updateTabElements(){UI.invokeOnceAfterBatchUpdate(this,this._innerUpdateTabElements);}
setPlaceholderElement(element,focusedElement){this._placeholderElement=element;if(focusedElement){this._focusedPlaceholderElement=focusedElement;}
if(this._placeholderContainerElement){this._placeholderContainerElement.removeChildren();this._placeholderContainerElement.appendChild(element);}}
_innerUpdateTabElements(){if(!this.isShowing()){return;}
if(!this._tabs.length){this._contentElement.classList.add('has-no-tabs');if(this._placeholderElement&&!this._placeholderContainerElement){this._placeholderContainerElement=this._contentElement.createChild('div','tabbed-pane-placeholder fill');this._placeholderContainerElement.appendChild(this._placeholderElement);if(this._focusedPlaceholderElement){this.setDefaultFocusedElement(this._focusedPlaceholderElement);this.focus();}}}else{this._contentElement.classList.remove('has-no-tabs');if(this._placeholderContainerElement){this._placeholderContainerElement.remove();this.setDefaultFocusedElement(this.contentElement);delete this._placeholderContainerElement;}}
this._measureDropDownButton();this._updateWidths();this._updateTabsDropDown();this._updateTabSlider();}
_showTabElement(index,tab){if(index>=this._tabsElement.children.length){this._tabsElement.appendChild(tab.tabElement);}else{this._tabsElement.insertBefore(tab.tabElement,this._tabsElement.children[index]);}
tab._shown=true;}
_hideTabElement(tab){this._tabsElement.removeChild(tab.tabElement);tab._shown=false;}
_createDropDownButton(){const dropDownContainer=createElementWithClass('div','tabbed-pane-header-tabs-drop-down-container');const chevronIcon=UI.Icon.create('largeicon-chevron','chevron-icon');UI.ARIAUtils.markAsMenuButton(dropDownContainer);UI.ARIAUtils.setAccessibleName(dropDownContainer,ls`More tabs`);dropDownContainer.tabIndex=0;dropDownContainer.appendChild(chevronIcon);dropDownContainer.addEventListener('click',this._dropDownClicked.bind(this));dropDownContainer.addEventListener('keydown',this._dropDownKeydown.bind(this));dropDownContainer.addEventListener('mousedown',event=>{if(event.which!==1||this._triggerDropDownTimeout){return;}
this._triggerDropDownTimeout=setTimeout(this._dropDownClicked.bind(this,event),200);});return dropDownContainer;}
_dropDownClicked(event){if(event.which!==1){return;}
if(this._triggerDropDownTimeout){clearTimeout(this._triggerDropDownTimeout);this._triggerDropDownTimeout=null;}
const rect=this._dropDownButton.getBoundingClientRect();const menu=new UI.ContextMenu(event,false,rect.left,rect.bottom);for(const tab of this._tabs){if(tab._shown){continue;}
if(this._numberOfTabsShown()===0&&this._tabsHistory[0]===tab){menu.defaultSection().appendCheckboxItem(tab.title,this._dropDownMenuItemSelected.bind(this,tab),true);}else{menu.defaultSection().appendItem(tab.title,this._dropDownMenuItemSelected.bind(this,tab));}}
menu.show();}
_dropDownKeydown(event){if(isEnterOrSpaceKey(event)){this._dropDownButton.click();event.consume(true);}}
_dropDownMenuItemSelected(tab){this._lastSelectedOverflowTab=tab;this.selectTab(tab.id,true,true);}
_totalWidth(){return this._headerContentsElement.getBoundingClientRect().width;}
_numberOfTabsShown(){let numTabsShown=0;for(const tab of this._tabs){if(tab._shown){numTabsShown++;}}
return numTabsShown;}
disableOverflowMenu(){this._overflowDisabled=true;}
_updateTabsDropDown(){const tabsToShowIndexes=this._tabsToShowIndexes(this._tabs,this._tabsHistory,this._totalWidth(),this._measuredDropDownButtonWidth||0);if(this._lastSelectedOverflowTab&&this._numberOfTabsShown()!==tabsToShowIndexes.length){delete this._lastSelectedOverflowTab;this._updateTabsDropDown();return;}
for(let i=0;i<this._tabs.length;++i){if(this._tabs[i]._shown&&tabsToShowIndexes.indexOf(i)===-1){this._hideTabElement(this._tabs[i]);}}
for(let i=0;i<tabsToShowIndexes.length;++i){const tab=this._tabs[tabsToShowIndexes[i]];if(!tab._shown){this._showTabElement(i,tab);}}
if(!this._overflowDisabled){this._maybeShowDropDown(tabsToShowIndexes.length!==this._tabs.length);}}
_maybeShowDropDown(hasMoreTabs){if(hasMoreTabs&&!this._dropDownButton.parentElement){this._headerContentsElement.appendChild(this._dropDownButton);}else if(!hasMoreTabs&&this._dropDownButton.parentElement){this._headerContentsElement.removeChild(this._dropDownButton);}}
_measureDropDownButton(){if(this._overflowDisabled||this._measuredDropDownButtonWidth){return;}
this._dropDownButton.classList.add('measuring');this._headerContentsElement.appendChild(this._dropDownButton);this._measuredDropDownButtonWidth=this._dropDownButton.getBoundingClientRect().width;this._headerContentsElement.removeChild(this._dropDownButton);this._dropDownButton.classList.remove('measuring');}
_updateWidths(){const measuredWidths=this._measureWidths();const maxWidth=this._shrinkableTabs?this._calculateMaxWidth(measuredWidths.slice(),this._totalWidth()):Number.MAX_VALUE;let i=0;for(const tab of this._tabs){tab.setWidth(this._verticalTabLayout?-1:Math.min(maxWidth,measuredWidths[i++]));}}
_measureWidths(){this._tabsElement.style.setProperty('width','2000px');const measuringTabElements=[];for(const tab of this._tabs){if(typeof tab._measuredWidth==='number'){continue;}
const measuringTabElement=tab._createTabElement(true);measuringTabElement.__tab=tab;measuringTabElements.push(measuringTabElement);this._tabsElement.appendChild(measuringTabElement);}
for(let i=0;i<measuringTabElements.length;++i){const width=measuringTabElements[i].getBoundingClientRect().width;measuringTabElements[i].__tab._measuredWidth=Math.ceil(width);}
for(let i=0;i<measuringTabElements.length;++i){measuringTabElements[i].remove();}
const measuredWidths=[];for(const tab of this._tabs){measuredWidths.push(tab._measuredWidth);}
this._tabsElement.style.removeProperty('width');return measuredWidths;}
_calculateMaxWidth(measuredWidths,totalWidth){if(!measuredWidths.length){return 0;}
measuredWidths.sort(function(x,y){return x-y;});let totalMeasuredWidth=0;for(let i=0;i<measuredWidths.length;++i){totalMeasuredWidth+=measuredWidths[i];}
if(totalWidth>=totalMeasuredWidth){return measuredWidths[measuredWidths.length-1];}
let totalExtraWidth=0;for(let i=measuredWidths.length-1;i>0;--i){const extraWidth=measuredWidths[i]-measuredWidths[i-1];totalExtraWidth+=(measuredWidths.length-i)*extraWidth;if(totalWidth+totalExtraWidth>=totalMeasuredWidth){return measuredWidths[i-1]+
(totalWidth+totalExtraWidth-totalMeasuredWidth)/(measuredWidths.length-i);}}
return totalWidth/measuredWidths.length;}
_tabsToShowIndexes(tabsOrdered,tabsHistory,totalWidth,measuredDropDownButtonWidth){const tabsToShowIndexes=[];let totalTabsWidth=0;const tabCount=tabsOrdered.length;const tabsToLookAt=tabsOrdered.slice(0);if(this._currentTab!==undefined){tabsToLookAt.unshift(tabsToLookAt.splice(tabsToLookAt.indexOf(this._currentTab),1)[0]);}
if(this._lastSelectedOverflowTab!==undefined){tabsToLookAt.unshift(tabsToLookAt.splice(tabsToLookAt.indexOf(this._lastSelectedOverflowTab),1)[0]);}
for(let i=0;i<tabCount;++i){const tab=this._automaticReorder?tabsHistory[i]:tabsToLookAt[i];totalTabsWidth+=tab.width();let minimalRequiredWidth=totalTabsWidth;if(i!==tabCount-1){minimalRequiredWidth+=measuredDropDownButtonWidth;}
if(!this._verticalTabLayout&&minimalRequiredWidth>totalWidth){break;}
tabsToShowIndexes.push(tabsOrdered.indexOf(tab));}
tabsToShowIndexes.sort(function(x,y){return x-y;});return tabsToShowIndexes;}
_hideCurrentTab(){if(!this._currentTab){return;}
this._hideTab(this._currentTab);delete this._currentTab;}
_showTab(tab){tab.tabElement.tabIndex=0;tab.tabElement.classList.add('selected');UI.ARIAUtils.setSelected(tab.tabElement,true);tab.view.show(this.element);this._updateTabSlider();}
_updateTabSlider(){if(!this._sliderEnabled){return;}
if(!this._currentTab){this._tabSlider.style.width=0;return;}
let left=0;for(let i=0;i<this._tabs.length&&this._currentTab!==this._tabs[i];i++){if(this._tabs[i]._shown){left+=this._tabs[i]._measuredWidth;}}
const sliderWidth=this._currentTab._shown?this._currentTab._measuredWidth:this._dropDownButton.offsetWidth;const scaleFactor=window.devicePixelRatio>=1.5?' scaleY(0.75)':'';this._tabSlider.style.transform='translateX('+left+'px)'+scaleFactor;this._tabSlider.style.width=sliderWidth+'px';if(this._tabSlider.parentElement!==this._headerContentsElement){this._headerContentsElement.appendChild(this._tabSlider);}}
_hideTab(tab){tab.tabElement.removeAttribute('tabIndex');tab.tabElement.classList.remove('selected');tab.tabElement.setAttribute('aria-selected','false');tab.view.detach();}
elementsToRestoreScrollPositionsFor(){return[this._contentElement];}
_insertBefore(tab,index){this._tabsElement.insertBefore(tab.tabElement,this._tabsElement.childNodes[index]);const oldIndex=this._tabs.indexOf(tab);this._tabs.splice(oldIndex,1);if(oldIndex<index){--index;}
this._tabs.splice(index,0,tab);this.dispatchEventToListeners(Events.TabOrderChanged,{tabId:tab.id});}
leftToolbar(){if(!this._leftToolbar){this._leftToolbar=new UI.Toolbar('tabbed-pane-left-toolbar');this._headerElement.insertBefore(this._leftToolbar.element,this._headerElement.firstChild);}
return this._leftToolbar;}
rightToolbar(){if(!this._rightToolbar){this._rightToolbar=new UI.Toolbar('tabbed-pane-right-toolbar');this._headerElement.appendChild(this._rightToolbar.element);}
return this._rightToolbar;}
setAllowTabReorder(allow,automatic){this._allowTabReorder=allow;this._automaticReorder=automatic;}
_keyDown(event){if(!this._currentTab){return;}
let nextTabElement=null;switch(event.key){case'ArrowUp':case'ArrowLeft':nextTabElement=this._currentTab.tabElement.previousElementSibling;if(!nextTabElement&&!this._dropDownButton.parentElement){nextTabElement=this._currentTab.tabElement.parentElement.lastElementChild;}
break;case'ArrowDown':case'ArrowRight':nextTabElement=this._currentTab.tabElement.nextElementSibling;if(!nextTabElement&&!this._dropDownButton.parentElement){nextTabElement=this._currentTab.tabElement.parentElement.firstElementChild;}
break;case'Enter':case' ':this._currentTab.view.focus();return;default:return;}
if(!nextTabElement){this._dropDownButton.click();return;}
const tab=this._tabs.find(tab=>tab.tabElement===nextTabElement);this.selectTab(tab.id,true);nextTabElement.focus();}}
export const Events={TabSelected:Symbol('TabSelected'),TabClosed:Symbol('TabClosed'),TabOrderChanged:Symbol('TabOrderChanged')};export class TabbedPaneTab{constructor(tabbedPane,id,title,closeable,view,tooltip){this._closeable=closeable;this._tabbedPane=tabbedPane;this._id=id;this._title=title;this._tooltip=tooltip;this._view=view;this._shown=false;this._measuredWidth;this._tabElement;this._iconContainer=null;}
get id(){return this._id;}
get title(){return this._title;}
set title(title){if(title===this._title){return;}
this._title=title;if(this._titleElement){this._titleElement.textContent=title;}
delete this._measuredWidth;}
isCloseable(){return this._closeable;}
_setIcon(icon){this._icon=icon;if(this._tabElement){this._createIconElement(this._tabElement,this._titleElement,false);}
delete this._measuredWidth;}
_toggleClass(className,force){const element=this.tabElement;const hasClass=element.classList.contains(className);if(hasClass===force){return false;}
element.classList.toggle(className,force);delete this._measuredWidth;return true;}
get view(){return this._view;}
set view(view){this._view=view;}
get tooltip(){return this._tooltip;}
set tooltip(tooltip){this._tooltip=tooltip;if(this._titleElement){this._titleElement.title=tooltip||'';}}
get tabElement(){if(!this._tabElement){this._tabElement=this._createTabElement(false);}
return this._tabElement;}
width(){return this._width;}
setWidth(width){this.tabElement.style.width=width===-1?'':(width+'px');this._width=width;}
setDelegate(delegate){this._delegate=delegate;}
_createIconElement(tabElement,titleElement,measuring){if(tabElement.__iconElement){tabElement.__iconElement.remove();tabElement.__iconElement=null;}
if(!this._icon){return;}
const iconContainer=createElementWithClass('span','tabbed-pane-header-tab-icon');const iconNode=measuring?this._icon.cloneNode(true):this._icon;iconContainer.appendChild(iconNode);tabElement.insertBefore(iconContainer,titleElement);tabElement.__iconElement=iconContainer;}
_createTabElement(measuring){const tabElement=createElementWithClass('div','tabbed-pane-header-tab');tabElement.id='tab-'+this._id;UI.ARIAUtils.markAsTab(tabElement);UI.ARIAUtils.setSelected(tabElement,false);UI.ARIAUtils.setAccessibleName(tabElement,this.title);const titleElement=tabElement.createChild('span','tabbed-pane-header-tab-title');titleElement.textContent=this.title;titleElement.title=this.tooltip||'';this._createIconElement(tabElement,titleElement,measuring);if(!measuring){this._titleElement=titleElement;}
if(this._closeable){const closeButton=tabElement.createChild('div','tabbed-pane-close-button','dt-close-button');closeButton.gray=true;closeButton.setAccessibleName(ls`Close ${this.title}`);tabElement.classList.add('closeable');}
if(measuring){tabElement.classList.add('measuring');}else{tabElement.addEventListener('click',this._tabClicked.bind(this),false);tabElement.addEventListener('auxclick',this._tabClicked.bind(this),false);tabElement.addEventListener('mousedown',this._tabMouseDown.bind(this),false);tabElement.addEventListener('mouseup',this._tabMouseUp.bind(this),false);tabElement.addEventListener('contextmenu',this._tabContextMenu.bind(this),false);if(this._tabbedPane._allowTabReorder){UI.installDragHandle(tabElement,this._startTabDragging.bind(this),this._tabDragging.bind(this),this._endTabDragging.bind(this),'-webkit-grabbing','pointer',200);}}
return tabElement;}
_tabClicked(event){const middleButton=event.button===1;const shouldClose=this._closeable&&(middleButton||event.target.classList.contains('tabbed-pane-close-button'));if(!shouldClose){this._tabbedPane.focus();return;}
this._closeTabs([this.id]);event.consume(true);}
_tabMouseDown(event){if(event.target.classList.contains('tabbed-pane-close-button')||event.button===1){return;}
this._tabbedPane.selectTab(this.id,true);}
_tabMouseUp(event){if(event.button===1){event.consume(true);}}
_closeTabs(ids){if(this._delegate){this._delegate.closeTabs(this._tabbedPane,ids);return;}
this._tabbedPane.closeTabs(ids,true);}
_tabContextMenu(event){function close(){this._closeTabs([this.id]);}
function closeOthers(){this._closeTabs(this._tabbedPane.otherTabs(this.id));}
function closeAll(){this._closeTabs(this._tabbedPane.tabIds());}
function closeToTheRight(){this._closeTabs(this._tabbedPane._tabsToTheRight(this.id));}
const contextMenu=new UI.ContextMenu(event);if(this._closeable){contextMenu.defaultSection().appendItem(Common.UIString('Close'),close.bind(this));contextMenu.defaultSection().appendItem(Common.UIString('Close others'),closeOthers.bind(this));contextMenu.defaultSection().appendItem(Common.UIString('Close tabs to the right'),closeToTheRight.bind(this));contextMenu.defaultSection().appendItem(Common.UIString('Close all'),closeAll.bind(this));}
if(this._delegate){this._delegate.onContextMenu(this.id,contextMenu);}
contextMenu.show();}
_startTabDragging(event){if(event.target.classList.contains('tabbed-pane-close-button')){return false;}
this._dragStartX=event.pageX;this._tabElement.classList.add('dragging');this._tabbedPane._tabSlider.remove();return true;}
_tabDragging(event){const tabElements=this._tabbedPane._tabsElement.childNodes;for(let i=0;i<tabElements.length;++i){let tabElement=tabElements[i];if(tabElement===this._tabElement){continue;}
const intersects=tabElement.offsetLeft+tabElement.clientWidth>this._tabElement.offsetLeft&&this._tabElement.offsetLeft+this._tabElement.clientWidth>tabElement.offsetLeft;if(!intersects){continue;}
if(Math.abs(event.pageX-this._dragStartX)<tabElement.clientWidth/2+5){break;}
if(event.pageX-this._dragStartX>0){tabElement=tabElement.nextSibling;++i;}
const oldOffsetLeft=this._tabElement.offsetLeft;this._tabbedPane._insertBefore(this,i);this._dragStartX+=this._tabElement.offsetLeft-oldOffsetLeft;break;}
if(!this._tabElement.previousSibling&&event.pageX-this._dragStartX<0){this._tabElement.style.setProperty('left','0px');return;}
if(!this._tabElement.nextSibling&&event.pageX-this._dragStartX>0){this._tabElement.style.setProperty('left','0px');return;}
this._tabElement.style.setProperty('left',(event.pageX-this._dragStartX)+'px');}
_endTabDragging(event){this._tabElement.classList.remove('dragging');this._tabElement.style.removeProperty('left');delete this._dragStartX;this._tabbedPane._updateTabSlider();}}
export class TabbedPaneTabDelegate{closeTabs(tabbedPane,ids){}
onContextMenu(tabId,contextMenu){}}
self.UI=self.UI||{};UI=UI||{};UI.TabbedPane=TabbedPane;UI.TabbedPane.Events=Events;UI.TabbedPaneTab=TabbedPaneTab;UI.TabbedPaneTabDelegate=TabbedPaneTabDelegate;export default class SyntaxHighlighter{constructor(mimeType,stripExtraWhitespace){this._mimeType=mimeType;this._stripExtraWhitespace=stripExtraWhitespace;}
createSpan(content,className){const span=createElement('span');span.className=className.replace(/\S+/g,'cm-$&');if(this._stripExtraWhitespace&&className!=='whitespace'){content=content.replace(/^[\n\r]*/,'').replace(/\s*$/,'');}
span.createTextChild(content);return span;}
syntaxHighlightNode(node){const lines=node.textContent.split('\n');let plainTextStart;let line;return self.runtime.extension(TextUtils.TokenizerFactory).instance().then(processTokens.bind(this));function processTokens(tokenizerFactory){node.removeChildren();const tokenize=tokenizerFactory.createTokenizer(this._mimeType);for(let i=0;i<lines.length;++i){line=lines[i];plainTextStart=0;tokenize(line,processToken.bind(this));if(plainTextStart<line.length){const plainText=line.substring(plainTextStart,line.length);node.createTextChild(plainText);}
if(i<lines.length-1){node.createTextChild('\n');}}}
function processToken(token,tokenType,column,newColumn){if(!tokenType){return;}
if(column>plainTextStart){const plainText=line.substring(plainTextStart,column);node.createTextChild(plainText);}
node.appendChild(this.createSpan(token,tokenType));plainTextStart=newColumn;}}}
self.UI=self.UI||{};UI=UI||{};UI.SyntaxHighlighter=SyntaxHighlighter;export class SuggestBoxDelegate{applySuggestion(suggestion,isIntermediateSuggestion){}
acceptSuggestion(){}}
export default class SuggestBox{constructor(suggestBoxDelegate,maxItemsHeight){this._suggestBoxDelegate=suggestBoxDelegate;this._maxItemsHeight=maxItemsHeight;this._rowHeight=17;this._userEnteredText='';this._defaultSelectionIsDimmed=false;this._onlyCompletion=null;this._items=new UI.ListModel();this._list=new UI.ListControl(this._items,this,UI.ListMode.EqualHeightItems);this._element=this._list.element;this._element.classList.add('suggest-box');this._element.addEventListener('mousedown',event=>event.preventDefault(),true);this._element.addEventListener('click',this._onClick.bind(this),false);this._glassPane=new UI.GlassPane();this._glassPane.setAnchorBehavior(UI.GlassPane.AnchorBehavior.PreferBottom);this._glassPane.setOutsideClickCallback(this.hide.bind(this));const shadowRoot=UI.createShadowRootWithCoreStyles(this._glassPane.contentElement,'ui/suggestBox.css');shadowRoot.appendChild(this._element);}
visible(){return this._glassPane.isShowing();}
setPosition(anchorBox){this._glassPane.setContentAnchorBox(anchorBox);}
setAnchorBehavior(behavior){this._glassPane.setAnchorBehavior(behavior);}
_updateMaxSize(items){const maxWidth=this._maxWidth(items);const length=this._maxItemsHeight?Math.min(this._maxItemsHeight,items.length):items.length;const maxHeight=length*this._rowHeight;this._glassPane.setMaxContentSize(new UI.Size(maxWidth,maxHeight));}
_maxWidth(items){const kMaxWidth=300;if(!items.length){return kMaxWidth;}
let maxItem;let maxLength=-Infinity;for(let i=0;i<items.length;i++){const length=(items[i].title||items[i].text).length+(items[i].subtitle||'').length;if(length>maxLength){maxLength=length;maxItem=items[i];}}
const element=this.createElementForItem((maxItem));const preferredWidth=UI.measurePreferredSize(element,this._element).width+UI.measuredScrollbarWidth(this._element.ownerDocument);return Math.min(kMaxWidth,preferredWidth);}
_show(){if(this.visible()){return;}
this._glassPane.show(document);this._rowHeight=UI.measurePreferredSize(this.createElementForItem({text:'1',subtitle:'12'}),this._element).height;}
hide(){if(!this.visible()){return;}
this._glassPane.hide();}
_applySuggestion(isIntermediateSuggestion){if(this._onlyCompletion){UI.ARIAUtils.alert(ls`${this._onlyCompletion.text}, suggestion`,this._element);this._suggestBoxDelegate.applySuggestion(this._onlyCompletion,isIntermediateSuggestion);return true;}
const suggestion=this._list.selectedItem();if(suggestion&&suggestion.text){UI.ARIAUtils.alert(ls`${suggestion.title || suggestion.text}, suggestion`,this._element);}
this._suggestBoxDelegate.applySuggestion(suggestion,isIntermediateSuggestion);return this.visible()&&!!suggestion;}
acceptSuggestion(){const result=this._applySuggestion();this.hide();if(!result){return false;}
this._suggestBoxDelegate.acceptSuggestion();return true;}
createElementForItem(item){const query=this._userEnteredText;const element=createElementWithClass('div','suggest-box-content-item source-code');if(item.iconType){const icon=UI.Icon.create(item.iconType,'suggestion-icon');element.appendChild(icon);}
if(item.isSecondary){element.classList.add('secondary');}
element.tabIndex=-1;const maxTextLength=50+query.length;const displayText=(item.title||item.text).trim().trimEndWithMaxLength(maxTextLength).replace(/\n/g,'\u21B5');const titleElement=element.createChild('span','suggestion-title');const index=displayText.toLowerCase().indexOf(query.toLowerCase());if(index>0){titleElement.createChild('span').textContent=displayText.substring(0,index);}
if(index>-1){titleElement.createChild('span','query').textContent=displayText.substring(index,index+query.length);}
titleElement.createChild('span').textContent=displayText.substring(index>-1?index+query.length:0);titleElement.createChild('span','spacer');if(item.subtitleRenderer){const subtitleElement=item.subtitleRenderer.call(null);subtitleElement.classList.add('suggestion-subtitle');element.appendChild(subtitleElement);}else if(item.subtitle){const subtitleElement=element.createChild('span','suggestion-subtitle');subtitleElement.textContent=item.subtitle.trimEndWithMaxLength(maxTextLength-displayText.length);}
return element;}
heightForItem(item){return this._rowHeight;}
isItemSelectable(item){return true;}
selectedItemChanged(from,to,fromElement,toElement){if(fromElement){fromElement.classList.remove('selected','force-white-icons');}
if(toElement){toElement.classList.add('selected');toElement.classList.add('force-white-icons');}
this._applySuggestion(true);}
_onClick(event){const item=this._list.itemForNode((event.target));if(!item){return;}
this._list.selectItem(item);this.acceptSuggestion();event.consume(true);}
_canShowBox(completions,highestPriorityItem,canShowForSingleItem,userEnteredText){if(!completions||!completions.length){return false;}
if(completions.length>1){return true;}
if(!highestPriorityItem||highestPriorityItem.isSecondary||!highestPriorityItem.text.startsWith(userEnteredText)){return true;}
return canShowForSingleItem&&highestPriorityItem.text!==userEnteredText;}
updateSuggestions(anchorBox,completions,selectHighestPriority,canShowForSingleItem,userEnteredText){this._onlyCompletion=null;const highestPriorityItem=selectHighestPriority?completions.reduce((a,b)=>(a.priority||0)>=(b.priority||0)?a:b):null;if(this._canShowBox(completions,highestPriorityItem,canShowForSingleItem,userEnteredText)){this._userEnteredText=userEnteredText;this._show();this._updateMaxSize(completions);this._glassPane.setContentAnchorBox(anchorBox);this._list.invalidateItemHeight();this._items.replaceAll(completions);if(highestPriorityItem&&!highestPriorityItem.isSecondary){this._list.selectItem(highestPriorityItem,true);}else{this._list.selectItem(null);}}else{if(completions.length===1){this._onlyCompletion=completions[0];this._applySuggestion(true);}
this.hide();}}
keyPressed(event){switch(event.key){case'Enter':return this.enterKeyPressed();case'ArrowUp':return this._list.selectPreviousItem(true,false);case'ArrowDown':return this._list.selectNextItem(true,false);case'PageUp':return this._list.selectItemPreviousPage(false);case'PageDown':return this._list.selectItemNextPage(false);}
return false;}
enterKeyPressed(){const hasSelectedItem=!!this._list.selectedItem()||!!this._onlyCompletion;this.acceptSuggestion();return hasSelectedItem;}}
self.UI=self.UI||{};UI=UI||{};UI.SuggestBox=SuggestBox;UI.SuggestBoxDelegate=SuggestBoxDelegate;UI.SuggestBox.Suggestion;UI.SuggestBox.Suggestions;export default class SplitWidget extends UI.Widget{constructor(isVertical,secondIsSidebar,settingName,defaultSidebarWidth,defaultSidebarHeight,constraintsInDip){super(true);this.element.classList.add('split-widget');this.registerRequiredCSS('ui/splitWidget.css');this.contentElement.classList.add('shadow-split-widget');this._sidebarElement=this.contentElement.createChild('div','shadow-split-widget-contents shadow-split-widget-sidebar vbox');this._mainElement=this.contentElement.createChild('div','shadow-split-widget-contents shadow-split-widget-main vbox');this._mainElement.createChild('slot').name='insertion-point-main';this._sidebarElement.createChild('slot').name='insertion-point-sidebar';this._resizerElement=this.contentElement.createChild('div','shadow-split-widget-resizer');this._resizerElementSize=null;this._resizerWidget=new UI.SimpleResizerWidget();this._resizerWidget.setEnabled(true);this._resizerWidget.addEventListener(UI.ResizerWidget.Events.ResizeStart,this._onResizeStart,this);this._resizerWidget.addEventListener(UI.ResizerWidget.Events.ResizeUpdate,this._onResizeUpdate,this);this._resizerWidget.addEventListener(UI.ResizerWidget.Events.ResizeEnd,this._onResizeEnd,this);this._defaultSidebarWidth=defaultSidebarWidth||200;this._defaultSidebarHeight=defaultSidebarHeight||this._defaultSidebarWidth;this._constraintsInDip=!!constraintsInDip;this._resizeStartSizeDIP=0;this._setting=settingName?Common.settings.createSetting(settingName,{}):null;this._totalSizeCSS=0;this._totalSizeOtherDimensionCSS=0;this._mainWidget=null;this._sidebarWidget=null;this._animationFrameHandle=0;this._animationCallback=null;this._showHideSidebarButtonTitle='';this._showHideSidebarButton=null;this._isVertical=false;this._sidebarMinimized=false;this._detaching=false;this._sidebarSizeDIP=-1;this._savedSidebarSizeDIP=this._sidebarSizeDIP;this._secondIsSidebar=false;this._shouldSaveShowMode=false;this._savedVerticalMainSize=null;this._savedHorizontalMainSize=null;this.setSecondIsSidebar(secondIsSidebar);this._innerSetVertical(isVertical);this._showMode=ShowMode.Both;this._savedShowMode=this._showMode;this.installResizer(this._resizerElement);}
isVertical(){return this._isVertical;}
setVertical(isVertical){if(this._isVertical===isVertical){return;}
this._innerSetVertical(isVertical);if(this.isShowing()){this._updateLayout();}}
_innerSetVertical(isVertical){this.contentElement.classList.toggle('vbox',!isVertical);this.contentElement.classList.toggle('hbox',isVertical);this._isVertical=isVertical;this._resizerElementSize=null;this._sidebarSizeDIP=-1;this._restoreSidebarSizeFromSettings();if(this._shouldSaveShowMode){this._restoreAndApplyShowModeFromSettings();}
this._updateShowHideSidebarButton();this._resizerWidget.setVertical(!isVertical);this.invalidateConstraints();}
_updateLayout(animate){this._totalSizeCSS=0;this._totalSizeOtherDimensionCSS=0;this._mainElement.style.removeProperty('width');this._mainElement.style.removeProperty('height');this._sidebarElement.style.removeProperty('width');this._sidebarElement.style.removeProperty('height');this._innerSetSidebarSizeDIP(this._preferredSidebarSizeDIP(),!!animate);}
setMainWidget(widget){if(this._mainWidget===widget){return;}
this.suspendInvalidations();if(this._mainWidget){this._mainWidget.detach();}
this._mainWidget=widget;if(widget){widget.element.slot='insertion-point-main';if(this._showMode===ShowMode.OnlyMain||this._showMode===ShowMode.Both){widget.show(this.element);}}
this.resumeInvalidations();}
setSidebarWidget(widget){if(this._sidebarWidget===widget){return;}
this.suspendInvalidations();if(this._sidebarWidget){this._sidebarWidget.detach();}
this._sidebarWidget=widget;if(widget){widget.element.slot='insertion-point-sidebar';if(this._showMode===ShowMode.OnlySidebar||this._showMode===ShowMode.Both){widget.show(this.element);}}
this.resumeInvalidations();}
mainWidget(){return this._mainWidget;}
sidebarWidget(){return this._sidebarWidget;}
childWasDetached(widget){if(this._detaching){return;}
if(this._mainWidget===widget){this._mainWidget=null;}
if(this._sidebarWidget===widget){this._sidebarWidget=null;}
this.invalidateConstraints();}
isSidebarSecond(){return this._secondIsSidebar;}
enableShowModeSaving(){this._shouldSaveShowMode=true;this._restoreAndApplyShowModeFromSettings();}
showMode(){return this._showMode;}
setSecondIsSidebar(secondIsSidebar){if(secondIsSidebar===this._secondIsSidebar){return;}
this._secondIsSidebar=secondIsSidebar;if(!this._mainWidget||!this._mainWidget.shouldHideOnDetach()){if(secondIsSidebar){this.contentElement.insertBefore(this._mainElement,this._sidebarElement);}else{this.contentElement.insertBefore(this._mainElement,this._resizerElement);}}else if(!this._sidebarWidget||!this._sidebarWidget.shouldHideOnDetach()){if(secondIsSidebar){this.contentElement.insertBefore(this._sidebarElement,this._resizerElement);}else{this.contentElement.insertBefore(this._sidebarElement,this._mainElement);}}else{console.error('Could not swap split widget side. Both children widgets contain iframes.');this._secondIsSidebar=!secondIsSidebar;}}
sidebarSide(){if(this._showMode!==ShowMode.Both){return null;}
return this._isVertical?(this._secondIsSidebar?'right':'left'):(this._secondIsSidebar?'bottom':'top');}
resizerElement(){return this._resizerElement;}
hideMain(animate){this._showOnly(this._sidebarWidget,this._mainWidget,this._sidebarElement,this._mainElement,animate);this._updateShowMode(ShowMode.OnlySidebar);}
hideSidebar(animate){this._showOnly(this._mainWidget,this._sidebarWidget,this._mainElement,this._sidebarElement,animate);this._updateShowMode(ShowMode.OnlyMain);}
setSidebarMinimized(minimized){this._sidebarMinimized=minimized;this.invalidateConstraints();}
isSidebarMinimized(){return this._sidebarMinimized;}
_showOnly(sideToShow,sideToHide,shadowToShow,shadowToHide,animate){this._cancelAnimation();function callback(){if(sideToShow){if(sideToShow===this._mainWidget){this._mainWidget.show(this.element,this._sidebarWidget?this._sidebarWidget.element:null);}else{this._sidebarWidget.show(this.element);}}
if(sideToHide){this._detaching=true;sideToHide.detach();this._detaching=false;}
this._resizerElement.classList.add('hidden');shadowToShow.classList.remove('hidden');shadowToShow.classList.add('maximized');shadowToHide.classList.add('hidden');shadowToHide.classList.remove('maximized');this._removeAllLayoutProperties();this.doResize();this._showFinishedForTest();}
if(animate){this._animate(true,callback.bind(this));}else{callback.call(this);}
this._sidebarSizeDIP=-1;this.setResizable(false);}
_showFinishedForTest(){}
_removeAllLayoutProperties(){this._sidebarElement.style.removeProperty('flexBasis');this._mainElement.style.removeProperty('width');this._mainElement.style.removeProperty('height');this._sidebarElement.style.removeProperty('width');this._sidebarElement.style.removeProperty('height');this._resizerElement.style.removeProperty('left');this._resizerElement.style.removeProperty('right');this._resizerElement.style.removeProperty('top');this._resizerElement.style.removeProperty('bottom');this._resizerElement.style.removeProperty('margin-left');this._resizerElement.style.removeProperty('margin-right');this._resizerElement.style.removeProperty('margin-top');this._resizerElement.style.removeProperty('margin-bottom');}
showBoth(animate){if(this._showMode===ShowMode.Both){animate=false;}
this._cancelAnimation();this._mainElement.classList.remove('maximized','hidden');this._sidebarElement.classList.remove('maximized','hidden');this._resizerElement.classList.remove('hidden');this.setResizable(true);this.suspendInvalidations();if(this._sidebarWidget){this._sidebarWidget.show(this.element);}
if(this._mainWidget){this._mainWidget.show(this.element,this._sidebarWidget?this._sidebarWidget.element:null);}
this.resumeInvalidations();this.setSecondIsSidebar(this._secondIsSidebar);this._sidebarSizeDIP=-1;this._updateShowMode(ShowMode.Both);this._updateLayout(animate);}
setResizable(resizable){this._resizerWidget.setEnabled(resizable);}
isResizable(){return this._resizerWidget.isEnabled();}
setSidebarSize(size){const sizeDIP=UI.zoomManager.cssToDIP(size);this._savedSidebarSizeDIP=sizeDIP;this._saveSetting();this._innerSetSidebarSizeDIP(sizeDIP,false,true);}
sidebarSize(){const sizeDIP=Math.max(0,this._sidebarSizeDIP);return UI.zoomManager.dipToCSS(sizeDIP);}
_totalSizeDIP(){if(!this._totalSizeCSS){this._totalSizeCSS=this._isVertical?this.contentElement.offsetWidth:this.contentElement.offsetHeight;this._totalSizeOtherDimensionCSS=this._isVertical?this.contentElement.offsetHeight:this.contentElement.offsetWidth;}
return UI.zoomManager.cssToDIP(this._totalSizeCSS);}
_updateShowMode(showMode){this._showMode=showMode;this._saveShowModeToSettings();this._updateShowHideSidebarButton();this.dispatchEventToListeners(SplitWidget.Events.ShowModeChanged,showMode);this.invalidateConstraints();}
_innerSetSidebarSizeDIP(sizeDIP,animate,userAction){if(this._showMode!==ShowMode.Both||!this.isShowing()){return;}
sizeDIP=this._applyConstraints(sizeDIP,userAction);if(this._sidebarSizeDIP===sizeDIP){return;}
if(!this._resizerElementSize){this._resizerElementSize=this._isVertical?this._resizerElement.offsetWidth:this._resizerElement.offsetHeight;}
this._removeAllLayoutProperties();const roundSizeCSS=Math.round(UI.zoomManager.dipToCSS(sizeDIP));const sidebarSizeValue=roundSizeCSS+'px';const mainSizeValue=(this._totalSizeCSS-roundSizeCSS)+'px';this._sidebarElement.style.flexBasis=sidebarSizeValue;if(this._isVertical){this._sidebarElement.style.width=sidebarSizeValue;this._mainElement.style.width=mainSizeValue;this._sidebarElement.style.height=this._totalSizeOtherDimensionCSS+'px';this._mainElement.style.height=this._totalSizeOtherDimensionCSS+'px';}else{this._sidebarElement.style.height=sidebarSizeValue;this._mainElement.style.height=mainSizeValue;this._sidebarElement.style.width=this._totalSizeOtherDimensionCSS+'px';this._mainElement.style.width=this._totalSizeOtherDimensionCSS+'px';}
if(this._isVertical){if(this._secondIsSidebar){this._resizerElement.style.right=sidebarSizeValue;this._resizerElement.style.marginRight=-this._resizerElementSize/2+'px';}else{this._resizerElement.style.left=sidebarSizeValue;this._resizerElement.style.marginLeft=-this._resizerElementSize/2+'px';}}else{if(this._secondIsSidebar){this._resizerElement.style.bottom=sidebarSizeValue;this._resizerElement.style.marginBottom=-this._resizerElementSize/2+'px';}else{this._resizerElement.style.top=sidebarSizeValue;this._resizerElement.style.marginTop=-this._resizerElementSize/2+'px';}}
this._sidebarSizeDIP=sizeDIP;if(animate){this._animate(false);}else{this.doResize();this.dispatchEventToListeners(SplitWidget.Events.SidebarSizeChanged,this.sidebarSize());}}
_animate(reverse,callback){const animationTime=50;this._animationCallback=callback||null;let animatedMarginPropertyName;if(this._isVertical){animatedMarginPropertyName=this._secondIsSidebar?'margin-right':'margin-left';}else{animatedMarginPropertyName=this._secondIsSidebar?'margin-bottom':'margin-top';}
const marginFrom=reverse?'0':'-'+UI.zoomManager.dipToCSS(this._sidebarSizeDIP)+'px';const marginTo=reverse?'-'+UI.zoomManager.dipToCSS(this._sidebarSizeDIP)+'px':'0';this.contentElement.style.setProperty(animatedMarginPropertyName,marginFrom);if(!reverse){suppressUnused(this._mainElement.offsetWidth);suppressUnused(this._sidebarElement.offsetWidth);}
if(!reverse){this._sidebarWidget.doResize();}
this.contentElement.style.setProperty('transition',animatedMarginPropertyName+' '+animationTime+'ms linear');const boundAnimationFrame=animationFrame.bind(this);let startTime;function animationFrame(){this._animationFrameHandle=0;if(!startTime){this.contentElement.style.setProperty(animatedMarginPropertyName,marginTo);startTime=window.performance.now();}else if(window.performance.now()<startTime+animationTime){if(this._mainWidget){this._mainWidget.doResize();}}else{this._cancelAnimation();if(this._mainWidget){this._mainWidget.doResize();}
this.dispatchEventToListeners(SplitWidget.Events.SidebarSizeChanged,this.sidebarSize());return;}
this._animationFrameHandle=this.contentElement.window().requestAnimationFrame(boundAnimationFrame);}
this._animationFrameHandle=this.contentElement.window().requestAnimationFrame(boundAnimationFrame);}
_cancelAnimation(){this.contentElement.style.removeProperty('margin-top');this.contentElement.style.removeProperty('margin-right');this.contentElement.style.removeProperty('margin-bottom');this.contentElement.style.removeProperty('margin-left');this.contentElement.style.removeProperty('transition');if(this._animationFrameHandle){this.contentElement.window().cancelAnimationFrame(this._animationFrameHandle);this._animationFrameHandle=0;}
if(this._animationCallback){this._animationCallback();this._animationCallback=null;}}
_applyConstraints(sidebarSize,userAction){const totalSize=this._totalSizeDIP();const zoomFactor=this._constraintsInDip?1:UI.zoomManager.zoomFactor();let constraints=this._sidebarWidget?this._sidebarWidget.constraints():new UI.Constraints();let minSidebarSize=this.isVertical()?constraints.minimum.width:constraints.minimum.height;if(!minSidebarSize){minSidebarSize=MinPadding;}
minSidebarSize*=zoomFactor;if(this._sidebarMinimized){sidebarSize=minSidebarSize;}
let preferredSidebarSize=this.isVertical()?constraints.preferred.width:constraints.preferred.height;if(!preferredSidebarSize){preferredSidebarSize=MinPadding;}
preferredSidebarSize*=zoomFactor;if(sidebarSize<preferredSidebarSize){preferredSidebarSize=Math.max(sidebarSize,minSidebarSize);}
preferredSidebarSize+=zoomFactor;constraints=this._mainWidget?this._mainWidget.constraints():new UI.Constraints();let minMainSize=this.isVertical()?constraints.minimum.width:constraints.minimum.height;if(!minMainSize){minMainSize=MinPadding;}
minMainSize*=zoomFactor;let preferredMainSize=this.isVertical()?constraints.preferred.width:constraints.preferred.height;if(!preferredMainSize){preferredMainSize=MinPadding;}
preferredMainSize*=zoomFactor;const savedMainSize=this.isVertical()?this._savedVerticalMainSize:this._savedHorizontalMainSize;if(savedMainSize!==null){preferredMainSize=Math.min(preferredMainSize,savedMainSize*zoomFactor);}
if(userAction){preferredMainSize=minMainSize;}
const totalPreferred=preferredMainSize+preferredSidebarSize;if(totalPreferred<=totalSize){return Number.constrain(sidebarSize,preferredSidebarSize,totalSize-preferredMainSize);}
if(minMainSize+minSidebarSize<=totalSize){const delta=totalPreferred-totalSize;const sidebarDelta=delta*preferredSidebarSize/totalPreferred;sidebarSize=preferredSidebarSize-sidebarDelta;return Number.constrain(sidebarSize,minSidebarSize,totalSize-minMainSize);}
return Math.max(0,totalSize-minMainSize);}
wasShown(){this._forceUpdateLayout();UI.zoomManager.addEventListener(UI.ZoomManager.Events.ZoomChanged,this._onZoomChanged,this);}
willHide(){UI.zoomManager.removeEventListener(UI.ZoomManager.Events.ZoomChanged,this._onZoomChanged,this);}
onResize(){this._updateLayout();}
onLayout(){this._updateLayout();}
calculateConstraints(){if(this._showMode===ShowMode.OnlyMain){return this._mainWidget?this._mainWidget.constraints():new UI.Constraints();}
if(this._showMode===ShowMode.OnlySidebar){return this._sidebarWidget?this._sidebarWidget.constraints():new UI.Constraints();}
let mainConstraints=this._mainWidget?this._mainWidget.constraints():new UI.Constraints();let sidebarConstraints=this._sidebarWidget?this._sidebarWidget.constraints():new UI.Constraints();const min=MinPadding;if(this._isVertical){mainConstraints=mainConstraints.widthToMax(min).addWidth(1);sidebarConstraints=sidebarConstraints.widthToMax(min);return mainConstraints.addWidth(sidebarConstraints).heightToMax(sidebarConstraints);}else{mainConstraints=mainConstraints.heightToMax(min).addHeight(1);sidebarConstraints=sidebarConstraints.heightToMax(min);return mainConstraints.widthToMax(sidebarConstraints).addHeight(sidebarConstraints);}}
_onResizeStart(event){this._resizeStartSizeDIP=this._sidebarSizeDIP;}
_onResizeUpdate(event){const offset=event.data.currentPosition-event.data.startPosition;const offsetDIP=UI.zoomManager.cssToDIP(offset);const newSizeDIP=this._secondIsSidebar?this._resizeStartSizeDIP-offsetDIP:this._resizeStartSizeDIP+offsetDIP;const constrainedSizeDIP=this._applyConstraints(newSizeDIP,true);this._savedSidebarSizeDIP=constrainedSizeDIP;this._saveSetting();this._innerSetSidebarSizeDIP(constrainedSizeDIP,false,true);if(this.isVertical()){this._savedVerticalMainSize=this._totalSizeDIP()-this._sidebarSizeDIP;}else{this._savedHorizontalMainSize=this._totalSizeDIP()-this._sidebarSizeDIP;}}
_onResizeEnd(event){this._resizeStartSizeDIP=0;}
hideDefaultResizer(noSplitter){this.uninstallResizer(this._resizerElement);this._sidebarElement.classList.toggle('no-default-splitter',!!noSplitter);}
installResizer(resizerElement){this._resizerWidget.addElement(resizerElement);}
uninstallResizer(resizerElement){this._resizerWidget.removeElement(resizerElement);}
hasCustomResizer(){const elements=this._resizerWidget.elements();return elements.length>1||(elements.length===1&&elements[0]!==this._resizerElement);}
toggleResizer(resizer,on){if(on){this.installResizer(resizer);}else{this.uninstallResizer(resizer);}}
_settingForOrientation(){const state=this._setting?this._setting.get():{};return this._isVertical?state.vertical:state.horizontal;}
_preferredSidebarSizeDIP(){let size=this._savedSidebarSizeDIP;if(!size){size=this._isVertical?this._defaultSidebarWidth:this._defaultSidebarHeight;if(0<size&&size<1){size*=this._totalSizeDIP();}}
return size;}
_restoreSidebarSizeFromSettings(){const settingForOrientation=this._settingForOrientation();this._savedSidebarSizeDIP=settingForOrientation?settingForOrientation.size:0;}
_restoreAndApplyShowModeFromSettings(){const orientationState=this._settingForOrientation();this._savedShowMode=orientationState&&orientationState.showMode?orientationState.showMode:this._showMode;this._showMode=this._savedShowMode;switch(this._savedShowMode){case ShowMode.Both:this.showBoth();break;case ShowMode.OnlyMain:this.hideSidebar();break;case ShowMode.OnlySidebar:this.hideMain();break;}}
_saveShowModeToSettings(){this._savedShowMode=this._showMode;this._saveSetting();}
_saveSetting(){if(!this._setting){return;}
const state=this._setting.get();const orientationState=(this._isVertical?state.vertical:state.horizontal)||{};orientationState.size=this._savedSidebarSizeDIP;if(this._shouldSaveShowMode){orientationState.showMode=this._savedShowMode;}
if(this._isVertical){state.vertical=orientationState;}else{state.horizontal=orientationState;}
this._setting.set(state);}
_forceUpdateLayout(){this._sidebarSizeDIP=-1;this._updateLayout();}
_onZoomChanged(event){this._forceUpdateLayout();}
createShowHideSidebarButton(title){this._showHideSidebarButtonTitle=title;this._showHideSidebarButton=new UI.ToolbarButton('','');this._showHideSidebarButton.addEventListener(UI.ToolbarButton.Events.Click,buttonClicked,this);this._updateShowHideSidebarButton();function buttonClicked(event){if(this._showMode!==ShowMode.Both){this.showBoth(true);}else{this.hideSidebar(true);}}
return this._showHideSidebarButton;}
_updateShowHideSidebarButton(){if(!this._showHideSidebarButton){return;}
const sidebarHidden=this._showMode===ShowMode.OnlyMain;let glyph='';if(sidebarHidden){glyph=this.isVertical()?(this.isSidebarSecond()?'largeicon-show-right-sidebar':'largeicon-show-left-sidebar'):(this.isSidebarSecond()?'largeicon-show-bottom-sidebar':'largeicon-show-top-sidebar');}else{glyph=this.isVertical()?(this.isSidebarSecond()?'largeicon-hide-right-sidebar':'largeicon-hide-left-sidebar'):(this.isSidebarSecond()?'largeicon-hide-bottom-sidebar':'largeicon-hide-top-sidebar');}
this._showHideSidebarButton.setGlyph(glyph);this._showHideSidebarButton.setTitle(sidebarHidden?Common.UIString('Show %s',this._showHideSidebarButtonTitle):Common.UIString('Hide %s',this._showHideSidebarButtonTitle));}}
export const ShowMode={Both:'Both',OnlyMain:'OnlyMain',OnlySidebar:'OnlySidebar'};export const Events={SidebarSizeChanged:Symbol('SidebarSizeChanged'),ShowModeChanged:Symbol('ShowModeChanged')};const MinPadding=20;self.UI=self.UI||{};UI=UI||{};UI.SplitWidget=SplitWidget;UI.SplitWidget.ShowMode=ShowMode;UI.SplitWidget.Events=Events;UI.SplitWidget.SettingForOrientation;export default class SoftDropDown{constructor(model,delegate){this._delegate=delegate;this._selectedItem=null;this._model=model;this._placeholderText=ls`(no item selected)`;this.element=createElementWithClass('button','soft-dropdown');UI.appendStyle(this.element,'ui/softDropDownButton.css');this._titleElement=this.element.createChild('span','title');const dropdownArrowIcon=UI.Icon.create('smallicon-triangle-down');this.element.appendChild(dropdownArrowIcon);UI.ARIAUtils.setExpanded(this.element,false);this._glassPane=new UI.GlassPane();this._glassPane.setMarginBehavior(UI.GlassPane.MarginBehavior.NoMargin);this._glassPane.setAnchorBehavior(UI.GlassPane.AnchorBehavior.PreferBottom);this._glassPane.setOutsideClickCallback(this._hide.bind(this));this._glassPane.setPointerEventsBehavior(UI.GlassPane.PointerEventsBehavior.BlockedByGlassPane);this._list=new UI.ListControl(model,this,UI.ListMode.EqualHeightItems);this._list.element.classList.add('item-list');this._rowHeight=36;this._width=315;UI.createShadowRootWithCoreStyles(this._glassPane.contentElement,'ui/softDropDown.css').createChild('div','list-container').appendChild(this._list.element);UI.ARIAUtils.markAsMenu(this._list.element);this._listWasShowing200msAgo=false;this.element.addEventListener('mousedown',event=>{if(this._listWasShowing200msAgo){this._hide(event);}else if(!this.element.disabled){this._show(event);}},false);this.element.addEventListener('keydown',this._onKeyDownButton.bind(this),false);this._list.element.addEventListener('keydown',this._onKeyDownList.bind(this),false);this._list.element.addEventListener('focusout',this._hide.bind(this),false);this._list.element.addEventListener('mousedown',event=>event.consume(true),false);this._list.element.addEventListener('mouseup',event=>{if(event.target===this._list.element){return;}
if(!this._listWasShowing200msAgo){return;}
this._selectHighlightedItem();this._hide(event);},false);model.addEventListener(UI.ListModel.Events.ItemsReplaced,this._itemsReplaced,this);}
_show(event){if(this._glassPane.isShowing()){return;}
this._glassPane.setContentAnchorBox(this.element.boxInWindow());this._glassPane.show((this.element.ownerDocument));this._list.element.focus();UI.ARIAUtils.setExpanded(this.element,true);this._updateGlasspaneSize();if(this._selectedItem){this._list.selectItem(this._selectedItem);}
event.consume(true);setTimeout(()=>this._listWasShowing200msAgo=true,200);}
_updateGlasspaneSize(){const maxHeight=this._rowHeight*(Math.min(this._model.length,9));this._glassPane.setMaxContentSize(new UI.Size(this._width,maxHeight));this._list.viewportResized();}
_hide(event){setTimeout(()=>this._listWasShowing200msAgo=false,200);this._glassPane.hide();this._list.selectItem(null);UI.ARIAUtils.setExpanded(this.element,false);this.element.focus();event.consume(true);}
_onKeyDownButton(event){let handled=false;switch(event.key){case'ArrowUp':this._show(event);this._list.selectItemNextPage();handled=true;break;case'ArrowDown':this._show(event);this._list.selectItemPreviousPage();handled=true;break;case'Enter':case' ':this._show(event);handled=true;break;default:break;}
if(handled){event.consume(true);}}
_onKeyDownList(event){let handled=false;switch(event.key){case'ArrowLeft':handled=this._list.selectPreviousItem(false,false);break;case'ArrowRight':handled=this._list.selectNextItem(false,false);break;case'Home':for(let i=0;i<this._model.length;i++){if(this.isItemSelectable(this._model.at(i))){this._list.selectItem(this._model.at(i));handled=true;break;}}
break;case'End':for(let i=this._model.length-1;i>=0;i--){if(this.isItemSelectable(this._model.at(i))){this._list.selectItem(this._model.at(i));handled=true;break;}}
break;case'Escape':this._hide(event);handled=true;break;case'Tab':case'Enter':case' ':this._selectHighlightedItem();this._hide(event);handled=true;break;default:if(event.key.length===1){const selectedIndex=this._list.selectedIndex();const letter=event.key.toUpperCase();for(let i=0;i<this._model.length;i++){const item=this._model.at((selectedIndex+i+1)%this._model.length);if(this._delegate.titleFor(item).toUpperCase().startsWith(letter)){this._list.selectItem(item);break;}}
handled=true;}
break;}
if(handled){event.consume(true);}}
setWidth(width){this._width=width;this._updateGlasspaneSize();}
setRowHeight(rowHeight){this._rowHeight=rowHeight;}
setPlaceholderText(text){this._placeholderText=text;if(!this._selectedItem){this._titleElement.textContent=this._placeholderText;}}
_itemsReplaced(event){const removed=(event.data.removed);if(removed.indexOf(this._selectedItem)!==-1){this._selectedItem=null;this._selectHighlightedItem();}
this._updateGlasspaneSize();}
selectItem(item){this._selectedItem=item;if(this._selectedItem){this._titleElement.textContent=this._delegate.titleFor(this._selectedItem);}else{this._titleElement.textContent=this._placeholderText;}
this._delegate.itemSelected(this._selectedItem);}
createElementForItem(item){const element=createElementWithClass('div','item');element.addEventListener('mousemove',e=>{if((e.movementX||e.movementY)&&this._delegate.isItemSelectable(item)){this._list.selectItem(item,false,true);}});element.classList.toggle('disabled',!this._delegate.isItemSelectable(item));element.classList.toggle('highlighted',this._list.selectedItem()===item);UI.ARIAUtils.markAsMenuItem(element);element.appendChild(this._delegate.createElementForItem(item));return element;}
heightForItem(item){return this._rowHeight;}
isItemSelectable(item){return this._delegate.isItemSelectable(item);}
selectedItemChanged(from,to,fromElement,toElement){if(fromElement){fromElement.classList.remove('highlighted');}
if(toElement){toElement.classList.add('highlighted');}
UI.ARIAUtils.setActiveDescendant(this._list.element,toElement);this._delegate.highlightedItemChanged(from,to,fromElement&&fromElement.firstElementChild,toElement&&toElement.firstElementChild);}
_selectHighlightedItem(){this.selectItem(this._list.selectedItem());}
refreshItem(item){this._list.refreshItem(item);}}
export class Delegate{titleFor(item){}
createElementForItem(item){}
isItemSelectable(item){}
itemSelected(item){}
highlightedItemChanged(from,to,fromElement,toElement){}}
self.UI=self.UI||{};UI=UI||{};UI.SoftDropDown=SoftDropDown;UI.SoftDropDown.Delegate=Delegate;export default class SoftContextMenu{constructor(items,itemSelectedCallback,parentMenu){this._items=items;this._itemSelectedCallback=itemSelectedCallback;this._parentMenu=parentMenu;this._highlightedMenuItemElement=null;}
show(document,anchorBox){if(!this._items.length){return;}
this._document=document;this._glassPane=new UI.GlassPane();this._glassPane.setPointerEventsBehavior(this._parentMenu?UI.GlassPane.PointerEventsBehavior.PierceGlassPane:UI.GlassPane.PointerEventsBehavior.BlockedByGlassPane);this._glassPane.registerRequiredCSS('ui/softContextMenu.css');this._glassPane.setContentAnchorBox(anchorBox);this._glassPane.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);this._glassPane.setMarginBehavior(UI.GlassPane.MarginBehavior.NoMargin);this._glassPane.setAnchorBehavior(this._parentMenu?UI.GlassPane.AnchorBehavior.PreferRight:UI.GlassPane.AnchorBehavior.PreferBottom);this._contextMenuElement=this._glassPane.contentElement.createChild('div','soft-context-menu');this._contextMenuElement.tabIndex=-1;UI.ARIAUtils.markAsMenu(this._contextMenuElement);this._contextMenuElement.addEventListener('mouseup',e=>e.consume(),false);this._contextMenuElement.addEventListener('keydown',this._menuKeyDown.bind(this),false);for(let i=0;i<this._items.length;++i){this._contextMenuElement.appendChild(this._createMenuItem(this._items[i]));}
this._glassPane.show(document);this._focusRestorer=new UI.ElementFocusRestorer(this._contextMenuElement);if(!this._parentMenu){this._hideOnUserGesture=event=>{let subMenu=this._subMenu;while(subMenu){if(subMenu._contextMenuElement===event.path[0]){return;}
subMenu=subMenu._subMenu;}
this.discard();event.consume(true);};this._document.body.addEventListener('mousedown',this._hideOnUserGesture,false);this._document.defaultView.addEventListener('resize',this._hideOnUserGesture,false);}}
discard(){if(this._subMenu){this._subMenu.discard();}
if(this._focusRestorer){this._focusRestorer.restore();}
if(this._glassPane){this._glassPane.hide();delete this._glassPane;if(this._hideOnUserGesture){this._document.body.removeEventListener('mousedown',this._hideOnUserGesture,false);this._document.defaultView.removeEventListener('resize',this._hideOnUserGesture,false);delete this._hideOnUserGesture;}}
if(this._parentMenu){delete this._parentMenu._subMenu;}}
_createMenuItem(item){if(item.type==='separator'){return this._createSeparator();}
if(item.type==='subMenu'){return this._createSubMenu(item);}
const menuItemElement=createElementWithClass('div','soft-context-menu-item');menuItemElement.tabIndex=-1;UI.ARIAUtils.markAsMenuItem(menuItemElement);const checkMarkElement=UI.Icon.create('smallicon-checkmark','checkmark');menuItemElement.appendChild(checkMarkElement);if(!item.checked){checkMarkElement.style.opacity='0';}
if(item.element){const wrapper=menuItemElement.createChild('div','soft-context-menu-custom-item');wrapper.appendChild(item.element);menuItemElement._customElement=item.element;return menuItemElement;}
if(!item.enabled){menuItemElement.classList.add('soft-context-menu-disabled');}
menuItemElement.createTextChild(item.label);menuItemElement.createChild('span','soft-context-menu-shortcut').textContent=item.shortcut;menuItemElement.addEventListener('mousedown',this._menuItemMouseDown.bind(this),false);menuItemElement.addEventListener('mouseup',this._menuItemMouseUp.bind(this),false);menuItemElement.addEventListener('mouseover',this._menuItemMouseOver.bind(this),false);menuItemElement.addEventListener('mouseleave',this._menuItemMouseLeave.bind(this),false);menuItemElement._actionId=item.id;let accessibleName=item.label;if(item.type==='checkbox'){const checkedState=item.checked?ls`checked`:ls`unchecked`;if(item.shortcut){accessibleName=ls`${item.label}, ${item.shortcut}, ${checkedState}`;}else{accessibleName=ls`${item.label}, ${checkedState}`;}}else if(item.shortcut){accessibleName=ls`${item.label}, ${item.shortcut}`;}
UI.ARIAUtils.setAccessibleName(menuItemElement,accessibleName);return menuItemElement;}
_createSubMenu(item){const menuItemElement=createElementWithClass('div','soft-context-menu-item');menuItemElement._subItems=item.subItems;menuItemElement.tabIndex=-1;UI.ARIAUtils.markAsMenuItemSubMenu(menuItemElement);const checkMarkElement=UI.Icon.create('smallicon-checkmark','soft-context-menu-item-checkmark');checkMarkElement.classList.add('checkmark');menuItemElement.appendChild(checkMarkElement);checkMarkElement.style.opacity='0';menuItemElement.createTextChild(item.label);if(Host.isMac()&&!UI.themeSupport.hasTheme()){const subMenuArrowElement=menuItemElement.createChild('span','soft-context-menu-item-submenu-arrow');subMenuArrowElement.textContent='\u25B6';}else{const subMenuArrowElement=UI.Icon.create('smallicon-triangle-right','soft-context-menu-item-submenu-arrow');menuItemElement.appendChild(subMenuArrowElement);}
menuItemElement.addEventListener('mousedown',this._menuItemMouseDown.bind(this),false);menuItemElement.addEventListener('mouseup',this._menuItemMouseUp.bind(this),false);menuItemElement.addEventListener('mouseover',this._menuItemMouseOver.bind(this),false);menuItemElement.addEventListener('mouseleave',this._menuItemMouseLeave.bind(this),false);return menuItemElement;}
_createSeparator(){const separatorElement=createElementWithClass('div','soft-context-menu-separator');separatorElement._isSeparator=true;separatorElement.createChild('div','separator-line');return separatorElement;}
_menuItemMouseDown(event){event.consume(true);}
_menuItemMouseUp(event){this._triggerAction(event.target,event);event.consume();}
_root(){let root=this;while(root._parentMenu){root=root._parentMenu;}
return root;}
_triggerAction(menuItemElement,event){if(!menuItemElement._subItems){this._root().discard();event.consume(true);if(typeof menuItemElement._actionId!=='undefined'){this._itemSelectedCallback(menuItemElement._actionId);delete menuItemElement._actionId;}
return;}
this._showSubMenu(menuItemElement);event.consume();}
_showSubMenu(menuItemElement){if(menuItemElement._subMenuTimer){clearTimeout(menuItemElement._subMenuTimer);delete menuItemElement._subMenuTimer;}
if(this._subMenu){return;}
this._subMenu=new SoftContextMenu(menuItemElement._subItems,this._itemSelectedCallback,this);const anchorBox=menuItemElement.boxInWindow();anchorBox.y-=5;anchorBox.x+=3;anchorBox.width-=6;anchorBox.height+=10;this._subMenu.show(this._document,anchorBox);}
_menuItemMouseOver(event){this._highlightMenuItem(event.target,true);}
_menuItemMouseLeave(event){if(!this._subMenu||!event.relatedTarget){this._highlightMenuItem(null,true);return;}
const relatedTarget=event.relatedTarget;if(relatedTarget===this._contextMenuElement){this._highlightMenuItem(null,true);}}
_highlightMenuItem(menuItemElement,scheduleSubMenu){if(this._highlightedMenuItemElement===menuItemElement){return;}
if(this._subMenu){this._subMenu.discard();}
if(this._highlightedMenuItemElement){this._highlightedMenuItemElement.classList.remove('force-white-icons');this._highlightedMenuItemElement.classList.remove('soft-context-menu-item-mouse-over');if(this._highlightedMenuItemElement._subItems&&this._highlightedMenuItemElement._subMenuTimer){clearTimeout(this._highlightedMenuItemElement._subMenuTimer);delete this._highlightedMenuItemElement._subMenuTimer;}}
this._highlightedMenuItemElement=menuItemElement;if(this._highlightedMenuItemElement){if(UI.themeSupport.hasTheme()||Host.isMac()){this._highlightedMenuItemElement.classList.add('force-white-icons');}
this._highlightedMenuItemElement.classList.add('soft-context-menu-item-mouse-over');if(this._highlightedMenuItemElement._customElement){this._highlightedMenuItemElement._customElement.focus();}else{this._highlightedMenuItemElement.focus();}
if(scheduleSubMenu&&this._highlightedMenuItemElement._subItems&&!this._highlightedMenuItemElement._subMenuTimer){this._highlightedMenuItemElement._subMenuTimer=setTimeout(this._showSubMenu.bind(this,this._highlightedMenuItemElement),150);}}}
_highlightPrevious(){let menuItemElement=this._highlightedMenuItemElement?this._highlightedMenuItemElement.previousSibling:this._contextMenuElement.lastChild;while(menuItemElement&&(menuItemElement._isSeparator||menuItemElement.classList.contains('soft-context-menu-disabled'))){menuItemElement=menuItemElement.previousSibling;}
if(menuItemElement){this._highlightMenuItem(menuItemElement,false);}}
_highlightNext(){let menuItemElement=this._highlightedMenuItemElement?this._highlightedMenuItemElement.nextSibling:this._contextMenuElement.firstChild;while(menuItemElement&&(menuItemElement._isSeparator||menuItemElement.classList.contains('soft-context-menu-disabled'))){menuItemElement=menuItemElement.nextSibling;}
if(menuItemElement){this._highlightMenuItem(menuItemElement,false);}}
_menuKeyDown(event){switch(event.key){case'ArrowUp':this._highlightPrevious();break;case'ArrowDown':this._highlightNext();break;case'ArrowLeft':if(this._parentMenu){this._highlightMenuItem(null,false);this.discard();}
break;case'ArrowRight':if(!this._highlightedMenuItemElement){break;}
if(this._highlightedMenuItemElement._subItems){this._showSubMenu(this._highlightedMenuItemElement);this._subMenu._highlightNext();}
break;case'Escape':this.discard();break;case'Enter':if(!isEnterKey(event)){return;}
case' ':if(!this._highlightedMenuItemElement||this._highlightedMenuItemElement._customElement){return;}
this._triggerAction(this._highlightedMenuItemElement,event);if(this._highlightedMenuItemElement._subItems){this._subMenu._highlightNext();}
break;}
event.consume(true);}}
self.UI=self.UI||{};UI=UI||{};UI.SoftContextMenu=SoftContextMenu;export default class ShortcutsScreen{constructor(){this._sections={};}
static registerShortcuts(){const elementsSection=UI.shortcutsScreen.section(Common.UIString('Elements Panel'));const navigate=ElementsPanelShortcuts.NavigateUp.concat(ElementsPanelShortcuts.NavigateDown);elementsSection.addRelatedKeys(navigate,Common.UIString('Navigate elements'));const expandCollapse=ElementsPanelShortcuts.Expand.concat(ElementsPanelShortcuts.Collapse);elementsSection.addRelatedKeys(expandCollapse,Common.UIString('Expand/collapse'));elementsSection.addAlternateKeys(ElementsPanelShortcuts.EditAttribute,Common.UIString('Edit attribute'));elementsSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('elements.hide-element'),Common.UIString('Hide element'));elementsSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('elements.edit-as-html'),Common.UIString('Toggle edit as HTML'));const stylesPaneSection=UI.shortcutsScreen.section(Common.UIString('Styles Pane'));const nextPreviousProperty=ElementsPanelShortcuts.NextProperty.concat(ElementsPanelShortcuts.PreviousProperty);stylesPaneSection.addRelatedKeys(nextPreviousProperty,Common.UIString('Next/previous property'));stylesPaneSection.addRelatedKeys(ElementsPanelShortcuts.IncrementValue,Common.UIString('Increment value'));stylesPaneSection.addRelatedKeys(ElementsPanelShortcuts.DecrementValue,Common.UIString('Decrement value'));stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.IncrementBy10,Common.UIString('Increment by %f',10));stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.DecrementBy10,Common.UIString('Decrement by %f',10));stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.IncrementBy100,Common.UIString('Increment by %f',100));stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.DecrementBy100,Common.UIString('Decrement by %f',100));stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.IncrementBy01,Common.UIString('Increment by %f',0.1));stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.DecrementBy01,Common.UIString('Decrement by %f',0.1));const consoleSection=UI.shortcutsScreen.section(Common.UIString('Console'));consoleSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('console.clear'),Common.UIString('Clear console'));consoleSection.addRelatedKeys(ConsolePanelShortcuts.AcceptSuggestion,Common.UIString('Accept suggestion'));consoleSection.addAlternateKeys(ConsolePanelShortcuts.ClearConsolePrompt,Common.UIString('Clear console prompt'));consoleSection.addRelatedKeys(ConsolePanelShortcuts.NextPreviousLine,Common.UIString('Next/previous line'));if(Host.isMac()){consoleSection.addRelatedKeys(ConsolePanelShortcuts.NextPreviousCommand,Common.UIString('Next/previous command'));}
consoleSection.addKey(ConsolePanelShortcuts.ExecuteCommand,Common.UIString('Execute command'));const debuggerSection=UI.shortcutsScreen.section(Common.UIString('Debugger'));debuggerSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.toggle-pause'),Common.UIString('Pause/ Continue'));debuggerSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.step-over'),Common.UIString('Step over'));debuggerSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.step-into'),Common.UIString('Step into'));debuggerSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.step-out'),Common.UIString('Step out'));const nextAndPrevFrameKeys=UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.next-call-frame').concat(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.previous-call-frame'));debuggerSection.addRelatedKeys(nextAndPrevFrameKeys,Common.UIString('Next/previous call frame'));debuggerSection.addAlternateKeys(SourcesPanelShortcuts.EvaluateSelectionInConsole,Common.UIString('Evaluate selection in console'));debuggerSection.addAlternateKeys(SourcesPanelShortcuts.AddSelectionToWatch,Common.UIString('Add selection to watch'));debuggerSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.toggle-breakpoint'),Common.UIString('Toggle breakpoint'));debuggerSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.toggle-breakpoint-enabled'),Common.UIString('Toggle breakpoint enabled'));debuggerSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.toggle-breakpoints-active'),Common.UIString('Toggle all breakpoints'));debuggerSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.breakpoint-input-window'),ls`Open breakpoint editor`);const editingSection=UI.shortcutsScreen.section(Common.UIString('Text Editor'));editingSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('sources.go-to-member'),Common.UIString('Go to member'));editingSection.addAlternateKeys(SourcesPanelShortcuts.ToggleAutocompletion,Common.UIString('Autocompletion'));editingSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('sources.go-to-line'),Common.UIString('Go to line'));editingSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('sources.jump-to-previous-location'),Common.UIString('Jump to previous editing location'));editingSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('sources.jump-to-next-location'),Common.UIString('Jump to next editing location'));editingSection.addAlternateKeys(SourcesPanelShortcuts.ToggleComment,Common.UIString('Toggle comment'));editingSection.addAlternateKeys(SourcesPanelShortcuts.IncreaseCSSUnitByOne,Common.UIString('Increment CSS unit by 1'));editingSection.addAlternateKeys(SourcesPanelShortcuts.DecreaseCSSUnitByOne,Common.UIString('Decrement CSS unit by 1'));editingSection.addAlternateKeys(SourcesPanelShortcuts.IncreaseCSSUnitByTen,Common.UIString('Increment CSS unit by 10'));editingSection.addAlternateKeys(SourcesPanelShortcuts.DecreaseCSSUnitByTen,Common.UIString('Decrement CSS unit by 10'));editingSection.addAlternateKeys(SourcesPanelShortcuts.SelectNextOccurrence,Common.UIString('Select next occurrence'));editingSection.addAlternateKeys(SourcesPanelShortcuts.SoftUndo,Common.UIString('Soft undo'));editingSection.addAlternateKeys(SourcesPanelShortcuts.GotoMatchingBracket,Common.UIString('Go to matching bracket'));editingSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('sources.close-editor-tab'),Common.UIString('Close editor tab'));editingSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('sources.switch-file'),Common.UIString('Switch between files with the same name and different extensions.'));const performanceSection=UI.shortcutsScreen.section(Common.UIString('Performance Panel'));performanceSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.toggle-recording'),Common.UIString('Start/stop recording'));performanceSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.record-reload'),Common.UIString('Record page reload'));performanceSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.save-to-file'),Common.UIString('Save profile'));performanceSection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.load-from-file'),Common.UIString('Load profile'));performanceSection.addRelatedKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.jump-to-previous-frame').concat(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.jump-to-next-frame')),Common.UIString('Jump to previous/next frame'));performanceSection.addRelatedKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.show-history'),Common.UIString('Pick a recording from history'));performanceSection.addRelatedKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.previous-recording').concat(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.next-recording')),Common.UIString('Show previous/next recording'));const memorySection=UI.shortcutsScreen.section(Common.UIString('Memory Panel'));memorySection.addAlternateKeys(UI.shortcutRegistry.shortcutDescriptorsForAction('profiler.heap-toggle-recording'),Common.UIString('Start/stop recording'));const layersSection=UI.shortcutsScreen.section(Common.UIString('Layers Panel'));layersSection.addAlternateKeys(LayersPanelShortcuts.ResetView,Common.UIString('Reset view'));layersSection.addAlternateKeys(LayersPanelShortcuts.PanMode,Common.UIString('Switch to pan mode'));layersSection.addAlternateKeys(LayersPanelShortcuts.RotateMode,Common.UIString('Switch to rotate mode'));layersSection.addAlternateKeys(LayersPanelShortcuts.TogglePanRotate,Common.UIString('Temporarily toggle pan/rotate mode while held'));layersSection.addAlternateKeys(LayersPanelShortcuts.ZoomIn,Common.UIString('Zoom in'));layersSection.addAlternateKeys(LayersPanelShortcuts.ZoomOut,Common.UIString('Zoom out'));layersSection.addRelatedKeys(LayersPanelShortcuts.Up.concat(LayersPanelShortcuts.Down),Common.UIString('Pan or rotate up/down'));layersSection.addRelatedKeys(LayersPanelShortcuts.Left.concat(LayersPanelShortcuts.Right),Common.UIString('Pan or rotate left/right'));}
section(name){let section=this._sections[name];if(!section){this._sections[name]=section=new ShortcutsSection(name);}
return section;}
createShortcutsTabView(){const orderedSections=[];for(const section in this._sections){orderedSections.push(this._sections[section]);}
function compareSections(a,b){return a.order-b.order;}
orderedSections.sort(compareSections);const widget=new UI.Widget();widget.element.className='settings-tab-container';widget.element.createChild('header').createChild('h1').createTextChild(ls`Shortcuts`);const scrollPane=widget.element.createChild('div','settings-container-wrapper');const container=scrollPane.createChild('div');container.className='settings-content settings-container';for(let i=0;i<orderedSections.length;++i){orderedSections[i].renderSection(container);}
const note=scrollPane.createChild('p','settings-footnote');note.appendChild(UI.createDocumentationLink('iterate/inspect-styles/shortcuts',Common.UIString('Full list of DevTools keyboard shortcuts and gestures')));return widget;}}
UI.shortcutsScreen;class ShortcutsSection{constructor(name){this.name=name;this._lines=([]);this.order=++ShortcutsSection._sequenceNumber;}
addKey(key,description){this._addLine(this._renderKey(key),description);}
addRelatedKeys(keys,description){this._addLine(this._renderSequence(keys,'/'),description);}
addAlternateKeys(keys,description){this._addLine(this._renderSequence(keys,Common.UIString('or')),description);}
_addLine(keyElement,description){this._lines.push({key:keyElement,text:description});}
renderSection(container){const parent=container.createChild('div','settings-block');const headLine=parent.createChild('div','settings-line');headLine.createChild('div','settings-key-cell');headLine.createChild('div','settings-section-title settings-cell').textContent=this.name;UI.ARIAUtils.markAsHeading(headLine,2);for(let i=0;i<this._lines.length;++i){const line=parent.createChild('div','settings-line');const keyCell=line.createChild('div','settings-key-cell');keyCell.appendChild(this._lines[i].key);keyCell.appendChild(this._createSpan('settings-key-delimiter',':'));line.createChild('div','settings-cell').textContent=this._lines[i].text;}}
_renderSequence(sequence,delimiter){const delimiterSpan=this._createSpan('settings-key-delimiter',delimiter);return this._joinNodes(sequence.map(this._renderKey.bind(this)),delimiterSpan);}
_renderKey(key){const keyName=key.name;const plus=this._createSpan('settings-combine-keys','+');return this._joinNodes(keyName.split(' + ').map(this._createSpan.bind(this,'settings-key')),plus);}
_createSpan(className,textContent){const node=createElement('span');node.className=className;node.textContent=textContent;return node;}
_joinNodes(nodes,delimiter){const result=createDocumentFragment();for(let i=0;i<nodes.length;++i){if(i>0){result.appendChild(delimiter.cloneNode(true));}
result.appendChild(nodes[i]);}
return result;}}
ShortcutsSection._sequenceNumber=0;const ElementsPanelShortcuts={NavigateUp:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up)],NavigateDown:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down)],Expand:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Right)],Collapse:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Left)],EditAttribute:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Enter)],NextProperty:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Tab)],PreviousProperty:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Tab,UI.KeyboardShortcut.Modifiers.Shift)],IncrementValue:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up)],DecrementValue:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down)],IncrementBy10:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageUp),UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up,UI.KeyboardShortcut.Modifiers.Shift)],DecrementBy10:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageDown),UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down,UI.KeyboardShortcut.Modifiers.Shift)],IncrementBy100:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageUp,UI.KeyboardShortcut.Modifiers.Shift)],DecrementBy100:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageDown,UI.KeyboardShortcut.Modifiers.Shift)],IncrementBy01:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up,UI.KeyboardShortcut.Modifiers.Alt)],DecrementBy01:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down,UI.KeyboardShortcut.Modifiers.Alt)]};const ConsolePanelShortcuts={AcceptSuggestion:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Tab),UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Right)],ClearConsolePrompt:[UI.KeyboardShortcut.makeDescriptor('u',UI.KeyboardShortcut.Modifiers.Ctrl)],ExecuteCommand:UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Enter),NextPreviousLine:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down),UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up)],NextPreviousCommand:[UI.KeyboardShortcut.makeDescriptor('N',UI.KeyboardShortcut.Modifiers.Alt),UI.KeyboardShortcut.makeDescriptor('P',UI.KeyboardShortcut.Modifiers.Alt)],};export const SourcesPanelShortcuts={SelectNextOccurrence:[UI.KeyboardShortcut.makeDescriptor('d',UI.KeyboardShortcut.Modifiers.CtrlOrMeta)],SoftUndo:[UI.KeyboardShortcut.makeDescriptor('u',UI.KeyboardShortcut.Modifiers.CtrlOrMeta)],GotoMatchingBracket:[UI.KeyboardShortcut.makeDescriptor('m',UI.KeyboardShortcut.Modifiers.Ctrl)],ToggleAutocompletion:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Space,UI.KeyboardShortcut.Modifiers.Ctrl)],IncreaseCSSUnitByOne:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up,UI.KeyboardShortcut.Modifiers.Alt)],DecreaseCSSUnitByOne:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down,UI.KeyboardShortcut.Modifiers.Alt)],IncreaseCSSUnitByTen:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageUp,UI.KeyboardShortcut.Modifiers.Alt)],DecreaseCSSUnitByTen:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageDown,UI.KeyboardShortcut.Modifiers.Alt)],EvaluateSelectionInConsole:[UI.KeyboardShortcut.makeDescriptor('e',UI.KeyboardShortcut.Modifiers.Shift|UI.KeyboardShortcut.Modifiers.Ctrl)],AddSelectionToWatch:[UI.KeyboardShortcut.makeDescriptor('a',UI.KeyboardShortcut.Modifiers.Shift|UI.KeyboardShortcut.Modifiers.Ctrl)],ToggleComment:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Slash,UI.KeyboardShortcut.Modifiers.CtrlOrMeta)],};export const LayersPanelShortcuts={ResetView:[UI.KeyboardShortcut.makeDescriptor('0')],PanMode:[UI.KeyboardShortcut.makeDescriptor('x')],RotateMode:[UI.KeyboardShortcut.makeDescriptor('v')],TogglePanRotate:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Shift)],ZoomIn:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Plus,UI.KeyboardShortcut.Modifiers.Shift),UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.NumpadPlus)],ZoomOut:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Minus,UI.KeyboardShortcut.Modifiers.Shift),UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.NumpadMinus)],Up:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up),UI.KeyboardShortcut.makeDescriptor('w')],Down:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down),UI.KeyboardShortcut.makeDescriptor('s')],Left:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Left),UI.KeyboardShortcut.makeDescriptor('a')],Right:[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Right),UI.KeyboardShortcut.makeDescriptor('d')]};self.UI=self.UI||{};UI=UI||{};UI.ShortcutsScreen=ShortcutsScreen;UI.ShortcutsScreen.SourcesPanelShortcuts=SourcesPanelShortcuts;UI.ShortcutsScreen.LayersPanelShortcuts=LayersPanelShortcuts;export default class ShortcutRegistry{constructor(actionRegistry,document){this._actionRegistry=actionRegistry;this._defaultKeyToActions=new Platform.Multimap();this._defaultActionToShortcut=new Platform.Multimap();this._registerBindings(document);}
_applicableActions(key){return this._actionRegistry.applicableActions(this._defaultActionsForKey(key).valuesArray(),UI.context);}
_defaultActionsForKey(key){return this._defaultKeyToActions.get(String(key));}
globalShortcutKeys(){const keys=[];for(const key of this._defaultKeyToActions.keysArray()){const actions=this._defaultKeyToActions.get(key).valuesArray();const applicableActions=this._actionRegistry.applicableActions(actions,new UI.Context());if(applicableActions.length){keys.push(Number(key));}}
return keys;}
shortcutDescriptorsForAction(actionId){return this._defaultActionToShortcut.get(actionId).valuesArray();}
keysForActions(actionIds){const result=[];for(let i=0;i<actionIds.length;++i){const descriptors=this.shortcutDescriptorsForAction(actionIds[i]);for(let j=0;j<descriptors.length;++j){result.push(descriptors[j].key);}}
return result;}
shortcutTitleForAction(actionId){const descriptors=this.shortcutDescriptorsForAction(actionId);if(descriptors.length){return descriptors[0].name;}}
handleShortcut(event){this.handleKey(UI.KeyboardShortcut.makeKeyFromEvent(event),event.key,event);}
eventMatchesAction(event,actionId){console.assert(this._defaultActionToShortcut.has(actionId),'Unknown action '+actionId);const key=UI.KeyboardShortcut.makeKeyFromEvent(event);return this._defaultActionToShortcut.get(actionId).valuesArray().some(descriptor=>descriptor.key===key);}
addShortcutListener(element,actionId,listener,capture){console.assert(this._defaultActionToShortcut.has(actionId),'Unknown action '+actionId);element.addEventListener('keydown',event=>{if(!this.eventMatchesAction((event),actionId)||!listener.call(null)){return;}
event.consume(true);},capture);}
async handleKey(key,domKey,event){const keyModifiers=key>>8;const actions=this._applicableActions(key);if(!actions.length||isPossiblyInputKey()){return;}
if(event){event.consume(true);}
if(UI.Dialog.hasInstance()){return;}
for(const action of actions){if(await action.execute()){return;}}
function isPossiblyInputKey(){if(!event||!UI.isEditing()||/^F\d+|Control|Shift|Alt|Meta|Escape|Win|U\+001B$/.test(domKey)){return false;}
if(!keyModifiers){return true;}
const modifiers=UI.KeyboardShortcut.Modifiers;if(Host.isMac()){if(UI.KeyboardShortcut.makeKey('z',modifiers.Meta)===key){return true;}
if(UI.KeyboardShortcut.makeKey('z',modifiers.Meta|modifiers.Shift)===key){return true;}}else{if(UI.KeyboardShortcut.makeKey('z',modifiers.Ctrl)===key){return true;}
if(UI.KeyboardShortcut.makeKey('y',modifiers.Ctrl)===key){return true;}
if(!Host.isWin()&&UI.KeyboardShortcut.makeKey('z',modifiers.Ctrl|modifiers.Shift)===key){return true;}}
if((keyModifiers&(modifiers.Ctrl|modifiers.Alt))===(modifiers.Ctrl|modifiers.Alt)){return Host.isWin();}
return!hasModifier(modifiers.Ctrl)&&!hasModifier(modifiers.Alt)&&!hasModifier(modifiers.Meta);}
function hasModifier(mod){return!!(keyModifiers&mod);}}
registerShortcut(actionId,shortcut){const descriptor=UI.KeyboardShortcut.makeDescriptorFromBindingShortcut(shortcut);if(!descriptor){return;}
this._defaultActionToShortcut.set(actionId,descriptor);this._defaultKeyToActions.set(String(descriptor.key),actionId);}
_registerBindings(document){const extensions=self.runtime.extensions('action');extensions.forEach(registerExtension,this);function registerExtension(extension){const descriptor=extension.descriptor();const bindings=descriptor['bindings'];for(let i=0;bindings&&i<bindings.length;++i){if(!platformMatches(bindings[i].platform)){continue;}
const shortcuts=bindings[i]['shortcut'].split(/\s+/);shortcuts.forEach(this.registerShortcut.bind(this,descriptor['actionId']));}}
function platformMatches(platformsString){if(!platformsString){return true;}
const platforms=platformsString.split(',');let isMatch=false;const currentPlatform=Host.platform();for(let i=0;!isMatch&&i<platforms.length;++i){isMatch=platforms[i]===currentPlatform;}
return isMatch;}}}
export class ForwardedShortcut{}
ForwardedShortcut.instance=new ForwardedShortcut();UI.shortcutRegistry;self.UI=self.UI||{};UI=UI||{};UI.ShortcutRegistry=ShortcutRegistry;UI.ShortcutRegistry.ForwardedShortcut=ForwardedShortcut;const SettingsUI={};export default SettingsUI;export const createSettingCheckbox=function(name,setting,omitParagraphElement,tooltip){const label=UI.CheckboxLabel.create(name);if(tooltip){label.title=tooltip;}
const input=label.checkboxElement;input.name=name;bindCheckbox(input,setting);if(omitParagraphElement){return label;}
const p=createElement('p');p.appendChild(label);return p;};const createSettingSelect=function(name,options,setting,subtitle){const settingSelectElement=createElement('p');const label=settingSelectElement.createChild('label');const select=settingSelectElement.createChild('select','chrome-select');label.textContent=name;if(subtitle){settingSelectElement.classList.add('chrome-select-label');label.createChild('p').textContent=subtitle;}
UI.ARIAUtils.bindLabelToControl(label,select);for(let i=0;i<options.length;++i){const option=options[i];const optionName=option.raw?option.text:Common.UIString(option.text);select.add(new Option(optionName,option.value));}
setting.addChangeListener(settingChanged);settingChanged();select.addEventListener('change',selectChanged,false);return settingSelectElement;function settingChanged(){const newValue=setting.get();for(let i=0;i<options.length;i++){if(options[i].value===newValue){select.selectedIndex=i;}}}
function selectChanged(){setting.set(options[select.selectedIndex].value);}};export const bindCheckbox=function(input,setting){function settingChanged(){if(input.checked!==setting.get()){input.checked=setting.get();}}
setting.addChangeListener(settingChanged);settingChanged();function inputChanged(){if(setting.get()!==input.checked){setting.set(input.checked);}}
input.addEventListener('change',inputChanged,false);};export const createCustomSetting=function(name,element){const p=createElement('p');const fieldsetElement=p.createChild('fieldset');const label=fieldsetElement.createChild('label');label.textContent=name;UI.ARIAUtils.bindLabelToControl(label,element);fieldsetElement.appendChild(element);return p;};export const createControlForSetting=function(setting,subtitle){if(!setting.extension()){return null;}
const descriptor=setting.extension().descriptor();const uiTitle=Common.UIString(setting.title()||'');switch(descriptor['settingType']){case'boolean':return createSettingCheckbox(uiTitle,setting);case'enum':if(Array.isArray(descriptor['options'])){return createSettingSelect(uiTitle,descriptor['options'],setting,subtitle);}
console.error('Enum setting defined without options');return null;default:console.error('Invalid setting type: '+descriptor['settingType']);return null;}};export class SettingUI{settingElement(){}}
self.UI=self.UI||{};UI=UI||{};UI.SettingsUI=SettingsUI;UI.SettingUI=SettingUI;UI.SettingsUI.createSettingCheckbox=createSettingCheckbox;UI.SettingsUI.bindCheckbox=bindCheckbox;UI.SettingsUI.createCustomSetting=createCustomSetting;UI.SettingsUI.createControlForSetting=createControlForSetting;export default class SegmentedButton extends UI.HBox{constructor(){super(true);this._buttons=new Map();this._selected=null;this.registerRequiredCSS('ui/segmentedButton.css');this.contentElement.classList.add('segmented-button');}
addSegment(label,value,tooltip){const button=this.contentElement.createChild('button','segmented-button-segment');button.textContent=label;button.title=tooltip;this._buttons.set(value,button);button.addEventListener('click',()=>this.select(value));}
select(value){if(this._selected===value){return;}
this._selected=value;for(const key of this._buttons.keys()){this._buttons.get(key).classList.toggle('segmented-button-segment-selected',key===this._selected);}}
selected(){return this._selected;}}
self.UI=self.UI||{};UI=UI||{};export default class SearchableView extends UI.VBox{constructor(searchable,settingName){super(true);this.registerRequiredCSS('ui/searchableView.css');this.element[_symbol]=this;this._searchProvider=searchable;this._setting=settingName?Common.settings.createSetting(settingName,{}):null;this._replaceable=false;this.contentElement.createChild('slot');this._footerElementContainer=this.contentElement.createChild('div','search-bar hidden');this._footerElementContainer.style.order=100;this._footerElement=this._footerElementContainer.createChild('div','toolbar-search');const replaceToggleToolbar=new UI.Toolbar('replace-toggle-toolbar',this._footerElement);this._replaceToggleButton=new UI.ToolbarToggle(Common.UIString('Replace'),'mediumicon-replace');this._replaceToggleButton.addEventListener(UI.ToolbarButton.Events.Click,this._toggleReplace,this);replaceToggleToolbar.appendToolbarItem(this._replaceToggleButton);const searchInputElements=this._footerElement.createChild('div','toolbar-search-inputs');const searchControlElement=searchInputElements.createChild('div','toolbar-search-control');this._searchInputElement=UI.HistoryInput.create();this._searchInputElement.classList.add('search-replace');this._searchInputElement.id='search-input-field';this._searchInputElement.placeholder=Common.UIString('Find');searchControlElement.appendChild(this._searchInputElement);this._matchesElement=searchControlElement.createChild('label','search-results-matches');this._matchesElement.setAttribute('for','search-input-field');const searchNavigationElement=searchControlElement.createChild('div','toolbar-search-navigation-controls');this._searchNavigationPrevElement=searchNavigationElement.createChild('div','toolbar-search-navigation toolbar-search-navigation-prev');this._searchNavigationPrevElement.addEventListener('click',this._onPrevButtonSearch.bind(this),false);this._searchNavigationPrevElement.title=Common.UIString('Search previous');this._searchNavigationNextElement=searchNavigationElement.createChild('div','toolbar-search-navigation toolbar-search-navigation-next');this._searchNavigationNextElement.addEventListener('click',this._onNextButtonSearch.bind(this),false);this._searchNavigationNextElement.title=Common.UIString('Search next');this._searchInputElement.addEventListener('keydown',this._onSearchKeyDown.bind(this),true);this._searchInputElement.addEventListener('input',this._onInput.bind(this),false);this._replaceInputElement=searchInputElements.createChild('input','search-replace toolbar-replace-control hidden');this._replaceInputElement.addEventListener('keydown',this._onReplaceKeyDown.bind(this),true);this._replaceInputElement.placeholder=Common.UIString('Replace');this._buttonsContainer=this._footerElement.createChild('div','toolbar-search-buttons');const firstRowButtons=this._buttonsContainer.createChild('div','first-row-buttons');const toolbar=new UI.Toolbar('toolbar-search-options',firstRowButtons);if(this._searchProvider.supportsCaseSensitiveSearch()){this._caseSensitiveButton=new UI.ToolbarToggle(Common.UIString('Match Case'));this._caseSensitiveButton.setText('Aa');this._caseSensitiveButton.addEventListener(UI.ToolbarButton.Events.Click,this._toggleCaseSensitiveSearch,this);toolbar.appendToolbarItem(this._caseSensitiveButton);}
if(this._searchProvider.supportsRegexSearch()){this._regexButton=new UI.ToolbarToggle(Common.UIString('Use Regular Expression'));this._regexButton.setText('.*');this._regexButton.addEventListener(UI.ToolbarButton.Events.Click,this._toggleRegexSearch,this);toolbar.appendToolbarItem(this._regexButton);}
const cancelButtonElement=UI.createTextButton(Common.UIString('Cancel'),this.closeSearch.bind(this),'search-action-button');firstRowButtons.appendChild(cancelButtonElement);this._secondRowButtons=this._buttonsContainer.createChild('div','second-row-buttons hidden');this._replaceButtonElement=UI.createTextButton(Common.UIString('Replace'),this._replace.bind(this),'search-action-button');this._replaceButtonElement.disabled=true;this._secondRowButtons.appendChild(this._replaceButtonElement);this._replaceAllButtonElement=UI.createTextButton(Common.UIString('Replace all'),this._replaceAll.bind(this),'search-action-button');this._secondRowButtons.appendChild(this._replaceAllButtonElement);this._replaceAllButtonElement.disabled=true;this._minimalSearchQuerySize=3;this._loadSetting();}
static fromElement(element){let view=null;while(element&&!view){view=element[_symbol];element=element.parentElementOrShadowHost();}
return view;}
_toggleCaseSensitiveSearch(){this._caseSensitiveButton.setToggled(!this._caseSensitiveButton.toggled());this._saveSetting();this._performSearch(false,true);}
_toggleRegexSearch(){this._regexButton.setToggled(!this._regexButton.toggled());this._saveSetting();this._performSearch(false,true);}
_toggleReplace(){this._replaceToggleButton.setToggled(!this._replaceToggleButton.toggled());this._updateSecondRowVisibility();}
_saveSetting(){if(!this._setting){return;}
const settingValue=this._setting.get()||{};settingValue.caseSensitive=this._caseSensitiveButton.toggled();settingValue.isRegex=this._regexButton.toggled();this._setting.set(settingValue);}
_loadSetting(){const settingValue=this._setting?(this._setting.get()||{}):{};if(this._searchProvider.supportsCaseSensitiveSearch()){this._caseSensitiveButton.setToggled(!!settingValue.caseSensitive);}
if(this._searchProvider.supportsRegexSearch()){this._regexButton.setToggled(!!settingValue.isRegex);}}
setMinimalSearchQuerySize(minimalSearchQuerySize){this._minimalSearchQuerySize=minimalSearchQuerySize;}
setPlaceholder(placeholder){this._searchInputElement.placeholder=placeholder;}
setReplaceable(replaceable){this._replaceable=replaceable;}
updateSearchMatchesCount(matches){if(this._searchProvider.currentSearchMatches===matches){return;}
this._searchProvider.currentSearchMatches=matches;this._updateSearchMatchesCountAndCurrentMatchIndex(this._searchProvider.currentQuery?matches:0,-1);}
updateCurrentMatchIndex(currentMatchIndex){this._updateSearchMatchesCountAndCurrentMatchIndex(this._searchProvider.currentSearchMatches,currentMatchIndex);}
isSearchVisible(){return this._searchIsVisible;}
closeSearch(){this.cancelSearch();if(this._footerElementContainer.hasFocus()){this.focus();}}
_toggleSearchBar(toggled){this._footerElementContainer.classList.toggle('hidden',!toggled);this.doResize();}
cancelSearch(){if(!this._searchIsVisible){return;}
this.resetSearch();delete this._searchIsVisible;this._toggleSearchBar(false);}
resetSearch(){this._clearSearch();this._updateReplaceVisibility();this._matchesElement.textContent='';}
refreshSearch(){if(!this._searchIsVisible){return;}
this.resetSearch();this._performSearch(false,false);}
handleFindNextShortcut(){if(!this._searchIsVisible){return false;}
this._searchProvider.jumpToNextSearchResult();return true;}
handleFindPreviousShortcut(){if(!this._searchIsVisible){return false;}
this._searchProvider.jumpToPreviousSearchResult();return true;}
handleFindShortcut(){this.showSearchField();return true;}
handleCancelSearchShortcut(){if(!this._searchIsVisible){return false;}
this.closeSearch();return true;}
_updateSearchNavigationButtonState(enabled){this._replaceButtonElement.disabled=!enabled;this._replaceAllButtonElement.disabled=!enabled;this._searchNavigationPrevElement.classList.toggle('enabled',enabled);this._searchNavigationNextElement.classList.toggle('enabled',enabled);}
_updateSearchMatchesCountAndCurrentMatchIndex(matches,currentMatchIndex){if(!this._currentQuery){this._matchesElement.textContent='';}else if(matches===0||currentMatchIndex>=0){this._matchesElement.textContent=Common.UIString('%d of %d',currentMatchIndex+1,matches);}else if(matches===1){this._matchesElement.textContent=Common.UIString('1 match');}else{this._matchesElement.textContent=Common.UIString('%d matches',matches);}
this._updateSearchNavigationButtonState(matches>0);}
showSearchField(){if(this._searchIsVisible){this.cancelSearch();}
let queryCandidate;if(!this._searchInputElement.hasFocus()){const selection=UI.inspectorView.element.window().getSelection();if(selection.rangeCount){queryCandidate=selection.toString().replace(/\r?\n.*/,'');}}
this._toggleSearchBar(true);this._updateReplaceVisibility();if(queryCandidate){this._searchInputElement.value=queryCandidate;}
this._performSearch(false,false);this._searchInputElement.focus();this._searchInputElement.select();this._searchIsVisible=true;}
_updateReplaceVisibility(){this._replaceToggleButton.setVisible(this._replaceable);if(!this._replaceable){this._replaceToggleButton.setToggled(false);this._updateSecondRowVisibility();}}
_onSearchKeyDown(event){if(isEscKey(event)){this.closeSearch();event.consume(true);return;}
if(!isEnterKey(event)){return;}
if(!this._currentQuery){this._performSearch(true,true,event.shiftKey);}else{this._jumpToNextSearchResult(event.shiftKey);}}
_onReplaceKeyDown(event){if(isEnterKey(event)){this._replace();}}
_jumpToNextSearchResult(isBackwardSearch){if(!this._currentQuery){return;}
if(isBackwardSearch){this._searchProvider.jumpToPreviousSearchResult();}else{this._searchProvider.jumpToNextSearchResult();}}
_onNextButtonSearch(event){if(!this._searchNavigationNextElement.classList.contains('enabled')){return;}
this._jumpToNextSearchResult();this._searchInputElement.focus();}
_onPrevButtonSearch(event){if(!this._searchNavigationPrevElement.classList.contains('enabled')){return;}
this._jumpToNextSearchResult(true);this._searchInputElement.focus();}
_onFindClick(event){if(!this._currentQuery){this._performSearch(true,true);}else{this._jumpToNextSearchResult();}
this._searchInputElement.focus();}
_onPreviousClick(event){if(!this._currentQuery){this._performSearch(true,true,true);}else{this._jumpToNextSearchResult(true);}
this._searchInputElement.focus();}
_clearSearch(){delete this._currentQuery;if(!!this._searchProvider.currentQuery){delete this._searchProvider.currentQuery;this._searchProvider.searchCanceled();}
this._updateSearchMatchesCountAndCurrentMatchIndex(0,-1);}
_performSearch(forceSearch,shouldJump,jumpBackwards){const query=this._searchInputElement.value;if(!query||(!forceSearch&&query.length<this._minimalSearchQuerySize&&!this._currentQuery)){this._clearSearch();return;}
this._currentQuery=query;this._searchProvider.currentQuery=query;const searchConfig=this._currentSearchConfig();this._searchProvider.performSearch(searchConfig,shouldJump,jumpBackwards);}
_currentSearchConfig(){const query=this._searchInputElement.value;const caseSensitive=this._caseSensitiveButton?this._caseSensitiveButton.toggled():false;const isRegex=this._regexButton?this._regexButton.toggled():false;return new SearchConfig(query,caseSensitive,isRegex);}
_updateSecondRowVisibility(){const secondRowVisible=this._replaceToggleButton.toggled();this._footerElementContainer.classList.toggle('replaceable',secondRowVisible);this._secondRowButtons.classList.toggle('hidden',!secondRowVisible);this._replaceInputElement.classList.toggle('hidden',!secondRowVisible);if(secondRowVisible){this._replaceInputElement.focus();}else{this._searchInputElement.focus();}
this.doResize();}
_replace(){const searchConfig=this._currentSearchConfig();(this._searchProvider).replaceSelectionWith(searchConfig,this._replaceInputElement.value);delete this._currentQuery;this._performSearch(true,true);}
_replaceAll(){const searchConfig=this._currentSearchConfig();(this._searchProvider).replaceAllWith(searchConfig,this._replaceInputElement.value);}
_onInput(event){if(this._valueChangedTimeoutId){clearTimeout(this._valueChangedTimeoutId);}
const timeout=this._searchInputElement.value.length<3?200:0;this._valueChangedTimeoutId=setTimeout(this._onValueChanged.bind(this),timeout);}
_onValueChanged(){if(!this._searchIsVisible){return;}
delete this._valueChangedTimeoutId;this._performSearch(false,true);}}
export const _symbol=Symbol('searchableView');export class Searchable{searchCanceled(){}
performSearch(searchConfig,shouldJump,jumpBackwards){}
jumpToNextSearchResult(){}
jumpToPreviousSearchResult(){}
supportsCaseSensitiveSearch(){}
supportsRegexSearch(){}}
export class Replaceable{replaceSelectionWith(searchConfig,replacement){}
replaceAllWith(searchConfig,replacement){}}
export class SearchConfig{constructor(query,caseSensitive,isRegex){this.query=query;this.caseSensitive=caseSensitive;this.isRegex=isRegex;}
toSearchRegex(global){let modifiers=this.caseSensitive?'':'i';if(global){modifiers+='g';}
const query=this.isRegex?'/'+this.query+'/':this.query;let regex;try{if(/^\/.+\/$/.test(query)){regex=new RegExp(query.substring(1,query.length-1),modifiers);regex.__fromRegExpQuery=true;}}catch(e){}
if(!regex){regex=createPlainTextSearchRegex(query,modifiers);}
return regex;}}
self.UI=self.UI||{};UI=UI||{};UI.SearchableView=SearchableView;UI.SearchableView.SearchConfig=SearchConfig;UI.Searchable=Searchable;UI.Replaceable=Replaceable;export default class RootView extends UI.VBox{constructor(){super();this.markAsRoot();this.element.classList.add('root-view');this.registerRequiredCSS('ui/rootView.css');this.element.setAttribute('spellcheck',false);}
attachToDocument(document){document.defaultView.addEventListener('resize',this.doResize.bind(this),false);this._window=document.defaultView;this.doResize();this.show((document.body));}
doResize(){if(this._window){const size=this.constraints().minimum;const zoom=UI.zoomManager.zoomFactor();const right=Math.min(0,this._window.innerWidth-size.width/zoom);this.element.style.marginRight=right+'px';const bottom=Math.min(0,this._window.innerHeight-size.height/zoom);this.element.style.marginBottom=bottom+'px';}
super.doResize();}}
self.UI=self.UI||{};UI=UI||{};UI.RootView=RootView;export default class ResizerWidget extends Common.Object{constructor(){super();this._isEnabled=true;this._elements=[];this._installDragOnMouseDownBound=this._installDragOnMouseDown.bind(this);this._cursor='nwse-resize';}
isEnabled(){return this._isEnabled;}
setEnabled(enabled){this._isEnabled=enabled;this.updateElementCursors();}
elements(){return this._elements.slice();}
addElement(element){if(this._elements.indexOf(element)!==-1){return;}
this._elements.push(element);element.addEventListener('mousedown',this._installDragOnMouseDownBound,false);this._updateElementCursor(element);}
removeElement(element){if(this._elements.indexOf(element)===-1){return;}
this._elements.remove(element);element.removeEventListener('mousedown',this._installDragOnMouseDownBound,false);element.style.removeProperty('cursor');}
updateElementCursors(){this._elements.forEach(this._updateElementCursor.bind(this));}
_updateElementCursor(element){if(this._isEnabled){element.style.setProperty('cursor',this.cursor());}else{element.style.removeProperty('cursor');}}
cursor(){return this._cursor;}
setCursor(cursor){this._cursor=cursor;this.updateElementCursors();}
_installDragOnMouseDown(event){if(this._elements.indexOf(event.target)===-1){return false;}
UI.elementDragStart((event.target),this._dragStart.bind(this),this._drag.bind(this),this._dragEnd.bind(this),this.cursor(),event);}
_dragStart(event){if(!this._isEnabled){return false;}
this._startX=event.pageX;this._startY=event.pageY;this.sendDragStart(this._startX,this._startY);return true;}
sendDragStart(x,y){this.dispatchEventToListeners(Events.ResizeStart,{startX:x,currentX:x,startY:y,currentY:y});}
_drag(event){if(!this._isEnabled){this._dragEnd(event);return true;}
this.sendDragMove(this._startX,event.pageX,this._startY,event.pageY,event.shiftKey);event.preventDefault();return false;}
sendDragMove(startX,currentX,startY,currentY,shiftKey){this.dispatchEventToListeners(Events.ResizeUpdate,{startX:startX,currentX:currentX,startY:startY,currentY:currentY,shiftKey:shiftKey});}
_dragEnd(event){this.dispatchEventToListeners(Events.ResizeEnd);delete this._startX;delete this._startY;}}
export const Events={ResizeStart:Symbol('ResizeStart'),ResizeUpdate:Symbol('ResizeUpdate'),ResizeEnd:Symbol('ResizeEnd')};export class SimpleResizerWidget extends ResizerWidget{constructor(){super();this._isVertical=true;}
isVertical(){return this._isVertical;}
setVertical(vertical){this._isVertical=vertical;this.updateElementCursors();}
cursor(){return this._isVertical?'ns-resize':'ew-resize';}
sendDragStart(x,y){const position=this._isVertical?y:x;this.dispatchEventToListeners(Events.ResizeStart,{startPosition:position,currentPosition:position});}
sendDragMove(startX,currentX,startY,currentY,shiftKey){if(this._isVertical){this.dispatchEventToListeners(Events.ResizeUpdate,{startPosition:startY,currentPosition:currentY,shiftKey:shiftKey});}else{this.dispatchEventToListeners(Events.ResizeUpdate,{startPosition:startX,currentPosition:currentX,shiftKey:shiftKey});}}}
self.UI=self.UI||{};UI=UI||{};UI.ResizerWidget=ResizerWidget;UI.ResizerWidget.Events=Events;UI.SimpleResizerWidget=SimpleResizerWidget;export default class ReportView extends UI.VBox{constructor(title){super(true);this.registerRequiredCSS('ui/reportView.css');this._contentBox=this.contentElement.createChild('div','report-content-box');this._headerElement=this._contentBox.createChild('div','report-header vbox');this._titleElement=this._headerElement.createChild('div','report-title');this._titleElement.textContent=title;UI.ARIAUtils.markAsHeading(this._titleElement,1);this._sectionList=this._contentBox.createChild('div','vbox');}
setTitle(title){if(this._titleElement.textContent===title){return;}
this._titleElement.textContent=title;}
setSubtitle(subtitle){if(this._subtitleElement&&this._subtitleElement.textContent===subtitle){return;}
if(!this._subtitleElement){this._subtitleElement=this._headerElement.createChild('div','report-subtitle');}
this._subtitleElement.textContent=subtitle;}
setURL(link){if(!this._urlElement){this._urlElement=this._headerElement.createChild('div','report-url link');}
this._urlElement.removeChildren();if(link){this._urlElement.appendChild(link);}}
createToolbar(){const toolbar=new UI.Toolbar('');this._headerElement.appendChild(toolbar.element);return toolbar;}
appendSection(title,className){const section=new Section(title,className);section.show(this._sectionList);return section;}
sortSections(comparator){const sections=(this.children().slice());const sorted=sections.every((e,i,a)=>!i||comparator(a[i-1],a[i])<=0);if(sorted){return;}
this.detachChildWidgets();sections.sort(comparator);for(const section of sections){section.show(this._sectionList);}}
setHeaderVisible(visible){this._headerElement.classList.toggle('hidden',!visible);}
setBodyScrollable(scrollable){this._contentBox.classList.toggle('no-scroll',!scrollable);}}
export class Section extends UI.VBox{constructor(title,className){super();this.element.classList.add('report-section');if(className){this.element.classList.add(className);}
this._headerElement=this.element.createChild('div','report-section-header');this._titleElement=this._headerElement.createChild('div','report-section-title');this.setTitle(title);UI.ARIAUtils.markAsHeading(this._titleElement,2);this._fieldList=this.element.createChild('div','vbox');this._fieldMap=new Map();}
title(){return this._titleElement.textContent;}
setTitle(title){if(this._titleElement.textContent!==title){this._titleElement.textContent=title;}
this._titleElement.classList.toggle('hidden',!this._titleElement.textContent);}
setUiGroupTitle(groupTitle){UI.ARIAUtils.markAsGroup(this.element);UI.ARIAUtils.setAccessibleName(this.element,groupTitle);}
createToolbar(){const toolbar=new UI.Toolbar('');this._headerElement.appendChild(toolbar.element);return toolbar;}
appendField(title,textValue){let row=this._fieldMap.get(title);if(!row){row=this._fieldList.createChild('div','report-field');row.createChild('div','report-field-name').textContent=title;this._fieldMap.set(title,row);row.createChild('div','report-field-value');}
if(textValue){row.lastElementChild.textContent=textValue;}
return(row.lastElementChild);}
appendFlexedField(title,textValue){const field=this.appendField(title,textValue);field.classList.add('report-field-value-is-flexed');return field;}
removeField(title){const row=this._fieldMap.get(title);if(row){row.remove();}
this._fieldMap.delete(title);}
setFieldVisible(title,visible){const row=this._fieldMap.get(title);if(row){row.classList.toggle('hidden',!visible);}}
fieldValue(title){const row=this._fieldMap.get(title);return row?row.lastElementChild:null;}
appendRow(){return this._fieldList.createChild('div','report-row');}
appendSelectableRow(){return this._fieldList.createChild('div','report-row report-row-selectable');}
clearContent(){this._fieldList.removeChildren();this._fieldMap.clear();}
markFieldListAsGroup(){UI.ARIAUtils.markAsGroup(this._fieldList);UI.ARIAUtils.setAccessibleName(this._fieldList,this.title());}}
self.UI=self.UI||{};UI=UI||{};UI.ReportView=ReportView;UI.ReportView.Section=Section;export default class RemoteDebuggingTerminatedScreen extends UI.VBox{constructor(reason){super(true);this.registerRequiredCSS('ui/remoteDebuggingTerminatedScreen.css');const message=this.contentElement.createChild('div','message');const reasonElement=message.createChild('span','reason');reasonElement.textContent=reason;message.appendChild(UI.formatLocalized('Debugging connection was closed. Reason: %s',[reasonElement]));this.contentElement.createChild('div','message').textContent=Common.UIString('Reconnect when ready by reopening DevTools.');const button=UI.createTextButton(Common.UIString('Reconnect DevTools'),()=>window.location.reload());this.contentElement.createChild('div','button').appendChild(button);}
static show(reason){const dialog=new UI.Dialog();dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);dialog.addCloseButton();dialog.setDimmed(true);new RemoteDebuggingTerminatedScreen(reason).show(dialog.contentElement);dialog.show();}}
self.UI=self.UI||{};UI=UI||{};UI.RemoteDebuggingTerminatedScreen=RemoteDebuggingTerminatedScreen;export default class ProgressIndicator{constructor(){this.element=createElementWithClass('div','progress-indicator');this._shadowRoot=UI.createShadowRootWithCoreStyles(this.element,'ui/progressIndicator.css');this._contentElement=this._shadowRoot.createChild('div','progress-indicator-shadow-container');this._labelElement=this._contentElement.createChild('div','title');this._progressElement=this._contentElement.createChild('progress');this._progressElement.value=0;this._stopButton=this._contentElement.createChild('button','progress-indicator-shadow-stop-button');this._stopButton.addEventListener('click',this.cancel.bind(this));this._isCanceled=false;this._worked=0;}
show(parent){parent.appendChild(this.element);}
done(){if(this._isDone){return;}
this._isDone=true;this.element.remove();}
cancel(){this._isCanceled=true;}
isCanceled(){return this._isCanceled;}
setTitle(title){this._labelElement.textContent=title;}
setTotalWork(totalWork){this._progressElement.max=totalWork;}
setWorked(worked,title){this._worked=worked;this._progressElement.value=worked;if(title){this.setTitle(title);}}
worked(worked){this.setWorked(this._worked+(worked||1));}}
self.UI=self.UI||{};UI=UI||{};UI.ProgressIndicator=ProgressIndicator;export default class PopoverHelper{constructor(container,getRequest){this._disableOnClick=false;this._hasPadding=false;this._getRequest=getRequest;this._scheduledRequest=null;this._hidePopoverCallback=null;this._container=container;this._showTimeout=0;this._hideTimeout=0;this._hidePopoverTimer=null;this._showPopoverTimer=null;this._boundMouseDown=this._mouseDown.bind(this);this._boundMouseMove=this._mouseMove.bind(this);this._boundMouseOut=this._mouseOut.bind(this);this._container.addEventListener('mousedown',this._boundMouseDown,false);this._container.addEventListener('mousemove',this._boundMouseMove,false);this._container.addEventListener('mouseout',this._boundMouseOut,false);this.setTimeout(1000);}
setTimeout(showTimeout,hideTimeout){this._showTimeout=showTimeout;this._hideTimeout=typeof hideTimeout==='number'?hideTimeout:showTimeout/2;}
setHasPadding(hasPadding){this._hasPadding=hasPadding;}
setDisableOnClick(disableOnClick){this._disableOnClick=disableOnClick;}
_eventInScheduledContent(event){return this._scheduledRequest?this._scheduledRequest.box.contains(event.clientX,event.clientY):false;}
_mouseDown(event){if(this._disableOnClick){this.hidePopover();return;}
if(this._eventInScheduledContent(event)){return;}
this._startHidePopoverTimer(0);this._stopShowPopoverTimer();this._startShowPopoverTimer((event),0);}
_mouseMove(event){if(this._eventInScheduledContent(event)){return;}
this._startHidePopoverTimer(this._hideTimeout);this._stopShowPopoverTimer();if(event.which&&this._disableOnClick){return;}
this._startShowPopoverTimer((event),this.isPopoverVisible()?this._showTimeout*0.6:this._showTimeout);}
_popoverMouseMove(event){this._stopHidePopoverTimer();}
_popoverMouseOut(popover,event){if(!popover.isShowing()){return;}
if(event.relatedTarget&&!event.relatedTarget.isSelfOrDescendant(popover.contentElement)){this._startHidePopoverTimer(this._hideTimeout);}}
_mouseOut(event){if(!this.isPopoverVisible()){return;}
if(!this._eventInScheduledContent(event)){this._startHidePopoverTimer(this._hideTimeout);}}
_startHidePopoverTimer(timeout){if(!this._hidePopoverCallback||this._hidePopoverTimer){return;}
this._hidePopoverTimer=setTimeout(()=>{this._hidePopover();this._hidePopoverTimer=null;},timeout);}
_startShowPopoverTimer(event,timeout){this._scheduledRequest=this._getRequest.call(null,event);if(!this._scheduledRequest){return;}
this._showPopoverTimer=setTimeout(()=>{this._showPopoverTimer=null;this._stopHidePopoverTimer();this._hidePopover();this._showPopover(event.target.ownerDocument);},timeout);}
_stopShowPopoverTimer(){if(!this._showPopoverTimer){return;}
clearTimeout(this._showPopoverTimer);this._showPopoverTimer=null;}
isPopoverVisible(){return!!this._hidePopoverCallback;}
hidePopover(){this._stopShowPopoverTimer();this._hidePopover();}
_hidePopover(){if(!this._hidePopoverCallback){return;}
this._hidePopoverCallback.call(null);this._hidePopoverCallback=null;}
_showPopover(document){const popover=new UI.GlassPane();popover.registerRequiredCSS('ui/popover.css');popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);popover.setMarginBehavior(UI.GlassPane.MarginBehavior.Arrow);const request=this._scheduledRequest;request.show.call(null,popover).then(success=>{if(!success){return;}
if(this._scheduledRequest!==request){if(request.hide){request.hide.call(null);}
return;}
if(PopoverHelper._popoverHelper){console.error('One popover is already visible');PopoverHelper._popoverHelper.hidePopover();}
PopoverHelper._popoverHelper=this;popover.contentElement.classList.toggle('has-padding',this._hasPadding);popover.contentElement.addEventListener('mousemove',this._popoverMouseMove.bind(this),true);popover.contentElement.addEventListener('mouseout',this._popoverMouseOut.bind(this,popover),true);popover.setContentAnchorBox(request.box);popover.show(document);this._hidePopoverCallback=()=>{if(request.hide){request.hide.call(null);}
popover.hide();delete PopoverHelper._popoverHelper;};});}
_stopHidePopoverTimer(){if(!this._hidePopoverTimer){return;}
clearTimeout(this._hidePopoverTimer);this._hidePopoverTimer=null;this._stopShowPopoverTimer();}
dispose(){this._container.removeEventListener('mousedown',this._boundMouseDown,false);this._container.removeEventListener('mousemove',this._boundMouseMove,false);this._container.removeEventListener('mouseout',this._boundMouseOut,false);}}
UI.PopoverRequest;self.UI=self.UI||{};UI=UI||{};UI.PopoverHelper=PopoverHelper;export default class Panel extends UI.VBox{constructor(name){super();this.element.classList.add('panel');this.element.setAttribute('aria-label',name);this.element.classList.add(name);this._panelName=name;UI.panels[name]=this;}
get name(){return this._panelName;}
searchableView(){return null;}
elementsToRestoreScrollPositionsFor(){return[];}}
export class PanelWithSidebar extends Panel{constructor(name,defaultWidth){super(name);this._panelSplitWidget=new UI.SplitWidget(true,false,this._panelName+'PanelSplitViewState',defaultWidth||200);this._panelSplitWidget.show(this.element);this._mainWidget=new UI.VBox();this._panelSplitWidget.setMainWidget(this._mainWidget);this._sidebarWidget=new UI.VBox();this._sidebarWidget.setMinimumSize(100,25);this._panelSplitWidget.setSidebarWidget(this._sidebarWidget);this._sidebarWidget.element.classList.add('panel-sidebar');}
panelSidebarElement(){return this._sidebarWidget.element;}
mainElement(){return this._mainWidget.element;}
splitWidget(){return this._panelSplitWidget;}}
self.UI=self.UI||{};UI=UI||{};UI.Panel=Panel;UI.PanelWithSidebar=PanelWithSidebar;UI.panels={};export default class ListWidget extends UI.VBox{constructor(delegate){super(true,true);this.registerRequiredCSS('ui/listWidget.css');this._delegate=delegate;this._list=this.contentElement.createChild('div','list');this._lastSeparator=false;this._focusRestorer=null;this._items=[];this._editable=[];this._elements=[];this._editor=null;this._editItem=null;this._editElement=null;this._emptyPlaceholder=null;this._updatePlaceholder();}
clear(){this._items=[];this._editable=[];this._elements=[];this._lastSeparator=false;this._list.removeChildren();this._updatePlaceholder();this._stopEditing();}
appendItem(item,editable){if(this._lastSeparator&&this._items.length){this._list.appendChild(createElementWithClass('div','list-separator'));}
this._lastSeparator=false;this._items.push(item);this._editable.push(editable);const element=this._list.createChild('div','list-item');element.appendChild(this._delegate.renderItem(item,editable));if(editable){element.classList.add('editable');element.appendChild(this._createControls(item,element));}
this._elements.push(element);this._updatePlaceholder();}
appendSeparator(){this._lastSeparator=true;}
removeItem(index){if(this._editItem===this._items[index]){this._stopEditing();}
const element=this._elements[index];const previous=element.previousElementSibling;const previousIsSeparator=previous&&previous.classList.contains('list-separator');const next=element.nextElementSibling;const nextIsSeparator=next&&next.classList.contains('list-separator');if(previousIsSeparator&&(nextIsSeparator||!next)){previous.remove();}
if(nextIsSeparator&&!previous){next.remove();}
element.remove();this._elements.splice(index,1);this._items.splice(index,1);this._editable.splice(index,1);this._updatePlaceholder();}
addNewItem(index,item){this._startEditing(item,null,this._elements[index]||null);}
setEmptyPlaceholder(element){this._emptyPlaceholder=element;this._updatePlaceholder();}
_createControls(item,element){const controls=createElementWithClass('div','controls-container fill');controls.createChild('div','controls-gradient');const buttons=controls.createChild('div','controls-buttons');const toolbar=new UI.Toolbar('',buttons);const editButton=new UI.ToolbarButton(Common.UIString('Edit'),'largeicon-edit');editButton.addEventListener(UI.ToolbarButton.Events.Click,onEditClicked.bind(this));toolbar.appendToolbarItem(editButton);const removeButton=new UI.ToolbarButton(Common.UIString('Remove'),'largeicon-trash-bin');removeButton.addEventListener(UI.ToolbarButton.Events.Click,onRemoveClicked.bind(this));toolbar.appendToolbarItem(removeButton);return controls;function onEditClicked(){const index=this._elements.indexOf(element);const insertionPoint=this._elements[index+1]||null;this._startEditing(item,element,insertionPoint);}
function onRemoveClicked(){const index=this._elements.indexOf(element);this.element.focus();this._delegate.removeItemRequested(this._items[index],index);}}
wasShown(){super.wasShown();this._stopEditing();}
_updatePlaceholder(){if(!this._emptyPlaceholder){return;}
if(!this._elements.length&&!this._editor){this._list.appendChild(this._emptyPlaceholder);}else{this._emptyPlaceholder.remove();}}
_startEditing(item,element,insertionPoint){if(element&&this._editElement===element){return;}
this._stopEditing();this._focusRestorer=new UI.ElementFocusRestorer(this.element);this._list.classList.add('list-editing');this._editItem=item;this._editElement=element;if(element){element.classList.add('hidden');}
const index=element?this._elements.indexOf(element):-1;this._editor=this._delegate.beginEdit(item);this._updatePlaceholder();this._list.insertBefore(this._editor.element,insertionPoint);this._editor.beginEdit(item,index,element?Common.UIString('Save'):Common.UIString('Add'),this._commitEditing.bind(this),this._stopEditing.bind(this));}
_commitEditing(){const editItem=this._editItem;const isNew=!this._editElement;const editor=(this._editor);this._stopEditing();this._delegate.commitEdit(editItem,editor,isNew);}
_stopEditing(){this._list.classList.remove('list-editing');if(this._focusRestorer){this._focusRestorer.restore();}
if(this._editElement){this._editElement.classList.remove('hidden');}
if(this._editor&&this._editor.element.parentElement){this._editor.element.remove();}
this._editor=null;this._editItem=null;this._editElement=null;this._updatePlaceholder();}}
export class Delegate{renderItem(item,editable){}
removeItemRequested(item,index){}
beginEdit(item){}
commitEdit(item,editor,isNew){}}
export class Editor{constructor(){this.element=createElementWithClass('div','editor-container');this.element.addEventListener('keydown',onKeyDown.bind(null,isEscKey,this._cancelClicked.bind(this)),false);this.element.addEventListener('keydown',onKeyDown.bind(null,isEnterKey,this._commitClicked.bind(this)),false);this._contentElement=this.element.createChild('div','editor-content');const buttonsRow=this.element.createChild('div','editor-buttons');this._commitButton=UI.createTextButton('',this._commitClicked.bind(this),'',true);buttonsRow.appendChild(this._commitButton);this._cancelButton=UI.createTextButton(Common.UIString('Cancel'),this._cancelClicked.bind(this));this._cancelButton.addEventListener('keydown',onKeyDown.bind(null,isEnterKey,this._cancelClicked.bind(this)),false);buttonsRow.appendChild(this._cancelButton);this._errorMessageContainer=this.element.createChild('div','list-widget-input-validation-error');UI.ARIAUtils.markAsAlert(this._errorMessageContainer);function onKeyDown(predicate,callback,event){if(predicate(event)){event.consume(true);callback();}}
this._controls=[];this._controlByName=new Map();this._validators=[];this._commit=null;this._cancel=null;this._item=null;this._index=-1;}
contentElement(){return this._contentElement;}
createInput(name,type,title,validator){const input=(UI.createInput('',type));input.placeholder=title;input.addEventListener('input',this._validateControls.bind(this,false),false);input.addEventListener('blur',this._validateControls.bind(this,false),false);UI.ARIAUtils.setAccessibleName(input,title);this._controlByName.set(name,input);this._controls.push(input);this._validators.push(validator);return input;}
createSelect(name,options,validator,title){const select=(createElementWithClass('select','chrome-select'));for(let index=0;index<options.length;++index){const option=select.createChild('option');option.value=options[index];option.textContent=options[index];}
if(title){select.title=title;UI.ARIAUtils.setAccessibleName(select,title);}
select.addEventListener('input',this._validateControls.bind(this,false),false);select.addEventListener('blur',this._validateControls.bind(this,false),false);this._controlByName.set(name,select);this._controls.push(select);this._validators.push(validator);return select;}
control(name){return(this._controlByName.get(name));}
_validateControls(forceValid){let allValid=true;this._errorMessageContainer.textContent='';for(let index=0;index<this._controls.length;++index){const input=this._controls[index];const{valid,errorMessage}=this._validators[index].call(null,this._item,this._index,input);input.classList.toggle('error-input',!valid&&!forceValid);if(valid||forceValid){UI.ARIAUtils.setInvalid(input,false);}else{UI.ARIAUtils.setInvalid(input,true);}
if(!forceValid&&errorMessage&&!this._errorMessageContainer.textContent){this._errorMessageContainer.textContent=errorMessage;}
allValid&=valid;}
this._commitButton.disabled=!allValid;}
beginEdit(item,index,commitButtonTitle,commit,cancel){this._commit=commit;this._cancel=cancel;this._item=item;this._index=index;this._commitButton.textContent=commitButtonTitle;this.element.scrollIntoViewIfNeeded(false);if(this._controls.length){this._controls[0].focus();}
this._validateControls(true);}
_commitClicked(){if(this._commitButton.disabled){return;}
const commit=this._commit;this._commit=null;this._cancel=null;this._item=null;this._index=-1;commit();}
_cancelClicked(){const cancel=this._cancel;this._commit=null;this._cancel=null;this._item=null;this._index=-1;cancel();}}
self.UI=self.UI||{};UI=UI||{};UI.ListWidget=ListWidget;UI.ListWidget.Delegate=Delegate;UI.ListWidget.Editor=Editor;UI.ListWidget.ValidatorResult;export default class ListModel extends Common.Object{constructor(items){super();this._items=items||[];}
[Symbol.iterator](){return this._items[Symbol.iterator]();}
get length(){return this._items.length;}
at(index){return this._items[index];}
every(callback){return this._items.every(callback);}
filter(callback){return this._items.filter(callback);}
find(callback){return this._items.find(callback);}
findIndex(callback){return this._items.findIndex(callback);}
indexOf(value,fromIndex){return this._items.indexOf(value,fromIndex);}
insert(index,value){this._items.splice(index,0,value);this._replaced(index,[],1);}
insertWithComparator(value,comparator){this.insert(this._items.lowerBound(value,comparator),value);}
join(separator){return this._items.join(separator);}
remove(index){const result=this._items[index];this._items.splice(index,1);this._replaced(index,[result],0);return result;}
replace(index,value){const oldValue=this._items[index];this._items[index]=value;this._replaced(index,[oldValue],1);return oldValue;}
replaceRange(from,to,items){let removed;if(items.length<10000){removed=this._items.splice(from,to-from,...items);}else{removed=this._items.slice(from,to);const before=this._items.slice(0,from);const after=this._items.slice(to);this._items=[].concat(before,items,after);}
this._replaced(from,removed,items.length);return removed;}
replaceAll(items){const oldItems=this._items.slice();this._items=items;this._replaced(0,oldItems,items.length);return oldItems;}
slice(from,to){return this._items.slice(from,to);}
some(callback){return this._items.some(callback);}
_replaced(index,removed,inserted){this.dispatchEventToListeners(Events.ItemsReplaced,{index:index,removed:removed,inserted:inserted});}}
export const Events={ItemsReplaced:Symbol('ItemsReplaced'),};self.UI=self.UI||{};UI=UI||{};UI.ListModel=ListModel;UI.ListModel.Events=Events;export class ListDelegate{createElementForItem(item){}
heightForItem(item){}
isItemSelectable(item){}
selectedItemChanged(from,to,fromElement,toElement){}}
export const ListMode={NonViewport:Symbol('UI.ListMode.NonViewport'),EqualHeightItems:Symbol('UI.ListMode.EqualHeightItems'),VariousHeightItems:Symbol('UI.ListMode.VariousHeightItems')};export default class ListControl{constructor(model,delegate,mode){this.element=createElement('div');this.element.style.overflowY='auto';this._topElement=this.element.createChild('div');this._bottomElement=this.element.createChild('div');this._firstIndex=0;this._lastIndex=0;this._renderedHeight=0;this._topHeight=0;this._bottomHeight=0;this._model=model;this._model.addEventListener(UI.ListModel.Events.ItemsReplaced,this._replacedItemsInRange,this);this._itemToElement=new Map();this._selectedIndex=-1;this._selectedItem=null;this.element.tabIndex=-1;this.element.addEventListener('click',this._onClick.bind(this),false);this.element.addEventListener('keydown',this._onKeyDown.bind(this),false);this._delegate=delegate;this._mode=mode||UI.ListMode.EqualHeightItems;this._fixedHeight=0;this._variableOffsets=new Int32Array(0);this._clearContents();if(this._mode!==UI.ListMode.NonViewport){this.element.addEventListener('scroll',()=>{this._updateViewport(this.element.scrollTop,this.element.offsetHeight);},false);}}
setModel(model){this._itemToElement.clear();const length=this._model.length;this._model.removeEventListener(UI.ListModel.Events.ItemsReplaced,this._replacedItemsInRange,this);this._model=model;this._model.addEventListener(UI.ListModel.Events.ItemsReplaced,this._replacedItemsInRange,this);this.invalidateRange(0,length);}
_replacedItemsInRange(event){const data=(event.data);const from=data.index;const to=from+data.removed.length;const oldSelectedItem=this._selectedItem;const oldSelectedElement=oldSelectedItem?(this._itemToElement.get(oldSelectedItem)||null):null;for(let i=0;i<data.removed.length;i++){this._itemToElement.delete(data.removed[i]);}
this._invalidate(from,to,data.inserted);if(this._selectedIndex>=to){this._selectedIndex+=data.inserted-(to-from);this._selectedItem=this._model.at(this._selectedIndex);}else if(this._selectedIndex>=from){let index=this._findFirstSelectable(from+data.inserted,+1,false);if(index===-1){index=this._findFirstSelectable(from-1,-1,false);}
this._select(index,oldSelectedItem,oldSelectedElement);}}
refreshItem(item){const index=this._model.indexOf(item);if(index===-1){console.error('Item to refresh is not present');return;}
this.refreshItemByIndex(index);}
refreshItemByIndex(index){const item=this._model.at(index);this._itemToElement.delete(item);this.invalidateRange(index,index+1);if(this._selectedIndex!==-1){this._select(this._selectedIndex,null,null);}}
invalidateRange(from,to){this._invalidate(from,to,to-from);}
viewportResized(){if(this._mode===UI.ListMode.NonViewport){return;}
const scrollTop=this.element.scrollTop;const viewportHeight=this.element.offsetHeight;this._clearViewport();this._updateViewport(Number.constrain(scrollTop,0,this._totalHeight()-viewportHeight),viewportHeight);}
invalidateItemHeight(){if(this._mode!==UI.ListMode.EqualHeightItems){console.error('Only supported in equal height items mode');return;}
this._fixedHeight=0;if(this._model.length){this._itemToElement.clear();this._invalidate(0,this._model.length,this._model.length);}}
itemForNode(node){while(node&&node.parentNodeOrShadowHost()!==this.element){node=node.parentNodeOrShadowHost();}
if(!node){return null;}
const element=(node);const index=this._model.findIndex(item=>this._itemToElement.get(item)===element);return index!==-1?this._model.at(index):null;}
scrollItemIntoView(item,center){const index=this._model.indexOf(item);if(index===-1){console.error('Attempt to scroll onto missing item');return;}
this._scrollIntoView(index,center);}
selectedItem(){return this._selectedItem;}
selectedIndex(){return this._selectedIndex;}
selectItem(item,center,dontScroll){let index=-1;if(item!==null){index=this._model.indexOf(item);if(index===-1){console.error('Attempt to select missing item');return;}
if(!this._delegate.isItemSelectable(item)){console.error('Attempt to select non-selectable item');return;}}
if(index!==-1&&!dontScroll){this._scrollIntoView(index,center);}
if(this._selectedIndex!==index){this._select(index);}}
selectPreviousItem(canWrap,center){if(this._selectedIndex===-1&&!canWrap){return false;}
let index=this._selectedIndex===-1?this._model.length-1:this._selectedIndex-1;index=this._findFirstSelectable(index,-1,!!canWrap);if(index!==-1){this._scrollIntoView(index,center);this._select(index);return true;}
return false;}
selectNextItem(canWrap,center){if(this._selectedIndex===-1&&!canWrap){return false;}
let index=this._selectedIndex===-1?0:this._selectedIndex+1;index=this._findFirstSelectable(index,+1,!!canWrap);if(index!==-1){this._scrollIntoView(index,center);this._select(index);return true;}
return false;}
selectItemPreviousPage(center){if(this._mode===UI.ListMode.NonViewport){return false;}
let index=this._selectedIndex===-1?this._model.length-1:this._selectedIndex;index=this._findPageSelectable(index,-1);if(index!==-1){this._scrollIntoView(index,center);this._select(index);return true;}
return false;}
selectItemNextPage(center){if(this._mode===UI.ListMode.NonViewport){return false;}
let index=this._selectedIndex===-1?0:this._selectedIndex;index=this._findPageSelectable(index,+1);if(index!==-1){this._scrollIntoView(index,center);this._select(index);return true;}
return false;}
_scrollIntoView(index,center){if(this._mode===UI.ListMode.NonViewport){this._elementAtIndex(index).scrollIntoViewIfNeeded(!!center);return;}
const top=this._offsetAtIndex(index);const bottom=this._offsetAtIndex(index+1);const viewportHeight=this.element.offsetHeight;if(center){const scrollTo=(top+bottom)/2-viewportHeight/2;this._updateViewport(Number.constrain(scrollTo,0,this._totalHeight()-viewportHeight),viewportHeight);return;}
const scrollTop=this.element.scrollTop;if(top<scrollTop){this._updateViewport(top,viewportHeight);}else if(bottom>scrollTop+viewportHeight){this._updateViewport(bottom-viewportHeight,viewportHeight);}}
_onClick(event){const item=this.itemForNode((event.target));if(item&&this._delegate.isItemSelectable(item)){this.selectItem(item);}}
_onKeyDown(event){let selected=false;switch(event.key){case'ArrowUp':selected=this.selectPreviousItem(true,false);break;case'ArrowDown':selected=this.selectNextItem(true,false);break;case'PageUp':selected=this.selectItemPreviousPage(false);break;case'PageDown':selected=this.selectItemNextPage(false);break;}
if(selected){event.consume();}}
_totalHeight(){return this._offsetAtIndex(this._model.length);}
_indexAtOffset(offset){if(this._mode===UI.ListMode.NonViewport){throw'There should be no offset conversions in non-viewport mode';}
if(!this._model.length||offset<0){return 0;}
if(this._mode===UI.ListMode.VariousHeightItems){return Math.min(this._model.length-1,this._variableOffsets.lowerBound(offset,undefined,0,this._model.length));}
if(!this._fixedHeight){this._measureHeight();}
return Math.min(this._model.length-1,Math.floor(offset/this._fixedHeight));}
_elementAtIndex(index){const item=this._model.at(index);let element=this._itemToElement.get(item);if(!element){element=this._delegate.createElementForItem(item);this._itemToElement.set(item,element);}
return element;}
_offsetAtIndex(index){if(this._mode===UI.ListMode.NonViewport){throw'There should be no offset conversions in non-viewport mode';}
if(!this._model.length){return 0;}
if(this._mode===UI.ListMode.VariousHeightItems){return this._variableOffsets[index];}
if(!this._fixedHeight){this._measureHeight();}
return index*this._fixedHeight;}
_measureHeight(){this._fixedHeight=this._delegate.heightForItem(this._model.at(0));if(!this._fixedHeight){this._fixedHeight=UI.measurePreferredSize(this._elementAtIndex(0),this.element).height;}}
_select(index,oldItem,oldElement){if(oldItem===undefined){oldItem=this._selectedItem;}
if(oldElement===undefined){oldElement=this._itemToElement.get(oldItem)||null;}
this._selectedIndex=index;this._selectedItem=index===-1?null:this._model.at(index);const newItem=this._selectedItem;const newElement=this._selectedIndex!==-1?this._elementAtIndex(index):null;if(oldElement){UI.ARIAUtils.setSelected(oldElement,false);}
if(newElement){UI.ARIAUtils.setSelected(newElement,true);}
UI.ARIAUtils.setActiveDescendant(this.element,newElement);this._delegate.selectedItemChanged(oldItem,newItem,(oldElement),newElement);}
_findFirstSelectable(index,direction,canWrap){const length=this._model.length;if(!length){return-1;}
for(let step=0;step<=length;step++){if(index<0||index>=length){if(!canWrap){return-1;}
index=(index+length)%length;}
if(this._delegate.isItemSelectable(this._model.at(index))){return index;}
index+=direction;}
return-1;}
_findPageSelectable(index,direction){let lastSelectable=-1;const startOffset=this._offsetAtIndex(index);const viewportHeight=this.element.offsetHeight-1;while(index>=0&&index<this._model.length){if(this._delegate.isItemSelectable(this._model.at(index))){if(Math.abs(this._offsetAtIndex(index)-startOffset)>=viewportHeight){return index;}
lastSelectable=index;}
index+=direction;}
return lastSelectable;}
_reallocateVariableOffsets(length,copyTo){if(this._variableOffsets.length<length){const variableOffsets=new Int32Array(Math.max(length,this._variableOffsets.length*2));variableOffsets.set(this._variableOffsets.slice(0,copyTo),0);this._variableOffsets=variableOffsets;}else if(this._variableOffsets.length>=2*length){const variableOffsets=new Int32Array(length);variableOffsets.set(this._variableOffsets.slice(0,copyTo),0);this._variableOffsets=variableOffsets;}}
_invalidate(from,to,inserted){if(this._mode===UI.ListMode.NonViewport){this._invalidateNonViewportMode(from,to-from,inserted);return;}
if(this._mode===UI.ListMode.VariousHeightItems){this._reallocateVariableOffsets(this._model.length+1,from+1);for(let i=from+1;i<=this._model.length;i++){this._variableOffsets[i]=this._variableOffsets[i-1]+this._delegate.heightForItem(this._model.at(i-1));}}
const viewportHeight=this.element.offsetHeight;const totalHeight=this._totalHeight();const scrollTop=this.element.scrollTop;if(this._renderedHeight<viewportHeight||totalHeight<viewportHeight){this._clearViewport();this._updateViewport(Number.constrain(scrollTop,0,totalHeight-viewportHeight),viewportHeight);return;}
const heightDelta=totalHeight-this._renderedHeight;if(to<=this._firstIndex){const topHeight=this._topHeight+heightDelta;this._topElement.style.height=topHeight+'px';this.element.scrollTop=scrollTop+heightDelta;this._topHeight=topHeight;this._renderedHeight=totalHeight;const indexDelta=inserted-(to-from);this._firstIndex+=indexDelta;this._lastIndex+=indexDelta;return;}
if(from>=this._lastIndex){const bottomHeight=this._bottomHeight+heightDelta;this._bottomElement.style.height=bottomHeight+'px';this._bottomHeight=bottomHeight;this._renderedHeight=totalHeight;return;}
this._clearViewport();this._updateViewport(Number.constrain(scrollTop,0,totalHeight-viewportHeight),viewportHeight);}
_invalidateNonViewportMode(start,remove,add){let startElement=this._topElement;for(let index=0;index<start;index++){startElement=startElement.nextElementSibling;}
while(remove--){startElement.nextElementSibling.remove();}
while(add--){this.element.insertBefore(this._elementAtIndex(start+add),startElement.nextElementSibling);}}
_clearViewport(){if(this._mode===UI.ListMode.NonViewport){console.error('There should be no viewport updates in non-viewport mode');return;}
this._firstIndex=0;this._lastIndex=0;this._renderedHeight=0;this._topHeight=0;this._bottomHeight=0;this._clearContents();}
_clearContents(){this._topElement.style.height='0';this._bottomElement.style.height='0';this.element.removeChildren();this.element.appendChild(this._topElement);this.element.appendChild(this._bottomElement);}
_updateViewport(scrollTop,viewportHeight){if(this._mode===UI.ListMode.NonViewport){console.error('There should be no viewport updates in non-viewport mode');return;}
const totalHeight=this._totalHeight();if(!totalHeight){this._firstIndex=0;this._lastIndex=0;this._topHeight=0;this._bottomHeight=0;this._renderedHeight=0;this._topElement.style.height='0';this._bottomElement.style.height='0';return;}
const firstIndex=this._indexAtOffset(scrollTop-viewportHeight);const lastIndex=this._indexAtOffset(scrollTop+2*viewportHeight)+1;while(this._firstIndex<Math.min(firstIndex,this._lastIndex)){this._elementAtIndex(this._firstIndex).remove();this._firstIndex++;}
while(this._lastIndex>Math.max(lastIndex,this._firstIndex)){this._elementAtIndex(this._lastIndex-1).remove();this._lastIndex--;}
this._firstIndex=Math.min(this._firstIndex,lastIndex);this._lastIndex=Math.max(this._lastIndex,firstIndex);for(let index=this._firstIndex-1;index>=firstIndex;index--){const element=this._elementAtIndex(index);this.element.insertBefore(element,this._topElement.nextSibling);}
for(let index=this._lastIndex;index<lastIndex;index++){const element=this._elementAtIndex(index);this.element.insertBefore(element,this._bottomElement);}
this._firstIndex=firstIndex;this._lastIndex=lastIndex;this._topHeight=this._offsetAtIndex(firstIndex);this._topElement.style.height=this._topHeight+'px';this._bottomHeight=totalHeight-this._offsetAtIndex(lastIndex);this._bottomElement.style.height=this._bottomHeight+'px';this._renderedHeight=totalHeight;this.element.scrollTop=scrollTop;}}
self.UI=self.UI||{};UI=UI||{};UI.ListControl=ListControl;UI.ListDelegate=ListDelegate;UI.ListMode=ListMode;export default class KeyboardShortcut{static makeKey(keyCode,modifiers){if(typeof keyCode==='string'){keyCode=keyCode.charCodeAt(0)-(/^[a-z]/.test(keyCode)?32:0);}
modifiers=modifiers||Modifiers.None;return KeyboardShortcut._makeKeyFromCodeAndModifiers(keyCode,modifiers);}
static makeKeyFromEvent(keyboardEvent){let modifiers=Modifiers.None;if(keyboardEvent.shiftKey){modifiers|=Modifiers.Shift;}
if(keyboardEvent.ctrlKey){modifiers|=Modifiers.Ctrl;}
if(keyboardEvent.altKey){modifiers|=Modifiers.Alt;}
if(keyboardEvent.metaKey){modifiers|=Modifiers.Meta;}
const keyCode=keyboardEvent.keyCode||keyboardEvent['__keyCode'];return KeyboardShortcut._makeKeyFromCodeAndModifiers(keyCode,modifiers);}
static makeKeyFromEventIgnoringModifiers(keyboardEvent){const keyCode=keyboardEvent.keyCode||keyboardEvent['__keyCode'];return KeyboardShortcut._makeKeyFromCodeAndModifiers(keyCode,Modifiers.None);}
static eventHasCtrlOrMeta(event){return Host.isMac()?event.metaKey&&!event.ctrlKey:event.ctrlKey&&!event.metaKey;}
static hasNoModifiers(event){return!event.ctrlKey&&!event.shiftKey&&!event.altKey&&!event.metaKey;}
static makeDescriptor(key,modifiers){return{key:KeyboardShortcut.makeKey(typeof key==='string'?key:key.code,modifiers),name:KeyboardShortcut.shortcutToString(key,modifiers)};}
static makeDescriptorFromBindingShortcut(shortcut){const parts=shortcut.split(/\+(?!$)/);let modifiers=0;let keyString;for(let i=0;i<parts.length;++i){if(typeof Modifiers[parts[i]]!=='undefined'){modifiers|=Modifiers[parts[i]];continue;}
console.assert(i===parts.length-1,'Only one key other than modifier is allowed in shortcut <'+shortcut+'>');keyString=parts[i];break;}
console.assert(keyString,'Modifiers-only shortcuts are not allowed (encountered <'+shortcut+'>)');if(!keyString){return null;}
const key=Keys[keyString]||KeyBindings[keyString];if(key&&key.shiftKey){modifiers|=Modifiers.Shift;}
return KeyboardShortcut.makeDescriptor(key?key:keyString,modifiers);}
static shortcutToString(key,modifiers){return KeyboardShortcut._modifiersToString(modifiers)+KeyboardShortcut._keyName(key);}
static _keyName(key){if(typeof key==='string'){return key.toUpperCase();}
if(typeof key.name==='string'){return key.name;}
return key.name[Host.platform()]||key.name.other||'';}
static _makeKeyFromCodeAndModifiers(keyCode,modifiers){return(keyCode&255)|(modifiers<<8);}
static keyCodeAndModifiersFromKey(key){return{keyCode:key&255,modifiers:key>>8};}
static _modifiersToString(modifiers){const isMac=Host.isMac();const m=Modifiers;const modifierNames=new Map([[m.Ctrl,isMac?'Ctrl\u2004':'Ctrl\u200A+\u200A'],[m.Alt,isMac?'\u2325\u2004':'Alt\u200A+\u200A'],[m.Shift,isMac?'\u21e7\u2004':'Shift\u200A+\u200A'],[m.Meta,isMac?'\u2318\u2004':'Win\u200A+\u200A']]);return[m.Meta,m.Ctrl,m.Alt,m.Shift].map(mapModifiers).join('');function mapModifiers(m){return modifiers&m?(modifierNames.get(m)):'';}}}
export const Modifiers={None:0,Shift:1,Ctrl:2,Alt:4,Meta:8,get CtrlOrMeta(){return Host.isMac()?this.Meta:this.Ctrl;},get ShiftOrOption(){return Host.isMac()?this.Alt:this.Shift;}};export const Keys={Backspace:{code:8,name:'\u21a4'},Tab:{code:9,name:{mac:'\u21e5',other:'Tab'}},Enter:{code:13,name:{mac:'\u21a9',other:'Enter'}},Shift:{code:16,name:{mac:'\u21e7',other:'Shift'}},Ctrl:{code:17,name:'Ctrl'},Esc:{code:27,name:'Esc'},Space:{code:32,name:'Space'},PageUp:{code:33,name:{mac:'\u21de',other:'PageUp'}},PageDown:{code:34,name:{mac:'\u21df',other:'PageDown'}},End:{code:35,name:{mac:'\u2197',other:'End'}},Home:{code:36,name:{mac:'\u2196',other:'Home'}},Left:{code:37,name:'\u2190'},Up:{code:38,name:'\u2191'},Right:{code:39,name:'\u2192'},Down:{code:40,name:'\u2193'},Delete:{code:46,name:'Del'},Zero:{code:48,name:'0'},H:{code:72,name:'H'},N:{code:78,name:'N'},P:{code:80,name:'P'},Meta:{code:91,name:'Meta'},F1:{code:112,name:'F1'},F2:{code:113,name:'F2'},F3:{code:114,name:'F3'},F4:{code:115,name:'F4'},F5:{code:116,name:'F5'},F6:{code:117,name:'F6'},F7:{code:118,name:'F7'},F8:{code:119,name:'F8'},F9:{code:120,name:'F9'},F10:{code:121,name:'F10'},F11:{code:122,name:'F11'},F12:{code:123,name:'F12'},Semicolon:{code:186,name:';'},NumpadPlus:{code:107,name:'Numpad +'},NumpadMinus:{code:109,name:'Numpad -'},Numpad0:{code:96,name:'Numpad 0'},Plus:{code:187,name:'+'},Comma:{code:188,name:','},Minus:{code:189,name:'-'},Period:{code:190,name:'.'},Slash:{code:191,name:'/'},QuestionMark:{code:191,name:'?'},Apostrophe:{code:192,name:'`'},Tilde:{code:192,name:'Tilde'},LeftSquareBracket:{code:219,name:'['},RightSquareBracket:{code:221,name:']'},Backslash:{code:220,name:'\\'},SingleQuote:{code:222,name:'\''},get CtrlOrMeta(){return Host.isMac()?this.Meta:this.Ctrl;},};export const KeyBindings={};(function(){for(const key in Keys){const descriptor=Keys[key];if(typeof descriptor==='object'&&descriptor['code']){const name=typeof descriptor['name']==='string'?descriptor['name']:key;KeyBindings[name]=descriptor;}}})();self.UI=self.UI||{};UI=UI||{};UI.KeyboardShortcut=KeyboardShortcut;UI.KeyboardShortcut.Modifiers=Modifiers;UI.KeyboardShortcut.Keys=Keys;UI.KeyboardShortcut.Key;UI.KeyboardShortcut.Descriptor;export default class InspectorView extends UI.VBox{constructor(){super();UI.GlassPane.setContainer(this.element);this.setMinimumSize(240,72);this._drawerSplitWidget=new UI.SplitWidget(false,true,'Inspector.drawerSplitViewState',200,200);this._drawerSplitWidget.hideSidebar();this._drawerSplitWidget.hideDefaultResizer();this._drawerSplitWidget.enableShowModeSaving();this._drawerSplitWidget.show(this.element);this._drawerTabbedLocation=UI.viewManager.createTabbedLocation(this._showDrawer.bind(this,false),'drawer-view',true,true);const moreTabsButton=this._drawerTabbedLocation.enableMoreTabsButton();moreTabsButton.setTitle(ls`More Tools`);this._drawerTabbedPane=this._drawerTabbedLocation.tabbedPane();this._drawerTabbedPane.setMinimumSize(0,27);const closeDrawerButton=new UI.ToolbarButton(Common.UIString('Close drawer'),'largeicon-delete');closeDrawerButton.addEventListener(UI.ToolbarButton.Events.Click,this._closeDrawer,this);this._drawerSplitWidget.installResizer(this._drawerTabbedPane.headerElement());this._drawerTabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected,this._drawerTabSelected,this);this._drawerSplitWidget.setSidebarWidget(this._drawerTabbedPane);this._drawerTabbedPane.rightToolbar().appendToolbarItem(closeDrawerButton);this._tabbedLocation=UI.viewManager.createTabbedLocation(Host.InspectorFrontendHost.bringToFront.bind(Host.InspectorFrontendHost),'panel',true,true,Root.Runtime.queryParam('panel'));this._tabbedPane=this._tabbedLocation.tabbedPane();this._tabbedPane.registerRequiredCSS('ui/inspectorViewTabbedPane.css');this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected,this._tabSelected,this);this._tabbedPane.setAccessibleName(Common.UIString('Panels'));Host.userMetrics.setLaunchPanel(this._tabbedPane.selectedTabId);if(Host.isUnderTest()){this._tabbedPane.setAutoSelectFirstItemOnShow(false);}
this._drawerSplitWidget.setMainWidget(this._tabbedPane);this._keyDownBound=this._keyDown.bind(this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.ShowPanel,showPanel.bind(this));function showPanel(event){const panelName=(event.data);this.showPanel(panelName);}}
static instance(){return(self.runtime.sharedInstance(InspectorView));}
wasShown(){this.element.ownerDocument.addEventListener('keydown',this._keyDownBound,false);}
willHide(){this.element.ownerDocument.removeEventListener('keydown',this._keyDownBound,false);}
resolveLocation(locationName){if(locationName==='drawer-view'){return this._drawerTabbedLocation;}
if(locationName==='panel'){return this._tabbedLocation;}
return null;}
createToolbars(){this._tabbedPane.leftToolbar().appendItemsAtLocation('main-toolbar-left');this._tabbedPane.rightToolbar().appendItemsAtLocation('main-toolbar-right');}
addPanel(view){this._tabbedLocation.appendView(view);}
hasPanel(panelName){return this._tabbedPane.hasTab(panelName);}
panel(panelName){return(UI.viewManager.view(panelName).widget());}
onSuspendStateChanged(allTargetsSuspended){this._currentPanelLocked=allTargetsSuspended;this._tabbedPane.setCurrentTabLocked(this._currentPanelLocked);this._tabbedPane.leftToolbar().setEnabled(!this._currentPanelLocked);this._tabbedPane.rightToolbar().setEnabled(!this._currentPanelLocked);}
canSelectPanel(panelName){return!this._currentPanelLocked||this._tabbedPane.selectedTabId===panelName;}
showPanel(panelName){return UI.viewManager.showView(panelName);}
setPanelIcon(panelName,icon){this._tabbedPane.setTabIcon(panelName,icon);}
currentPanelDeprecated(){return(UI.viewManager.materializedWidget(this._tabbedPane.selectedTabId||''));}
_showDrawer(focus){if(this._drawerTabbedPane.isShowing()){return;}
this._drawerSplitWidget.showBoth();if(focus){this._focusRestorer=new UI.WidgetFocusRestorer(this._drawerTabbedPane);}else{this._focusRestorer=null;}}
drawerVisible(){return this._drawerTabbedPane.isShowing();}
_closeDrawer(){if(!this._drawerTabbedPane.isShowing()){return;}
if(this._focusRestorer){this._focusRestorer.restore();}
this._drawerSplitWidget.hideSidebar(true);}
setDrawerMinimized(minimized){this._drawerSplitWidget.setSidebarMinimized(minimized);this._drawerSplitWidget.setResizable(!minimized);}
isDrawerMinimized(){return this._drawerSplitWidget.isSidebarMinimized();}
closeDrawerTab(id,userGesture){this._drawerTabbedPane.closeTab(id,userGesture);}
_keyDown(event){const keyboardEvent=(event);if(!UI.KeyboardShortcut.eventHasCtrlOrMeta(keyboardEvent)||event.altKey||event.shiftKey){return;}
const panelShortcutEnabled=Common.moduleSetting('shortcutPanelSwitch').get();if(panelShortcutEnabled){let panelIndex=-1;if(event.keyCode>0x30&&event.keyCode<0x3A){panelIndex=event.keyCode-0x31;}else if(event.keyCode>0x60&&event.keyCode<0x6A&&keyboardEvent.location===KeyboardEvent.DOM_KEY_LOCATION_NUMPAD){panelIndex=event.keyCode-0x61;}
if(panelIndex!==-1){const panelName=this._tabbedPane.tabIds()[panelIndex];if(panelName){if(!UI.Dialog.hasInstance()&&!this._currentPanelLocked){this.showPanel(panelName);}
event.consume(true);}}}}
onResize(){UI.GlassPane.containerMoved(this.element);}
topResizerElement(){return this._tabbedPane.headerElement();}
toolbarItemResized(){this._tabbedPane.headerResized();}
_tabSelected(event){const tabId=(event.data['tabId']);Host.userMetrics.panelShown(tabId);}
_drawerTabSelected(event){const tabId=(event.data['tabId']);Host.userMetrics.drawerShown(tabId);}
setOwnerSplit(splitWidget){this._ownerSplitWidget=splitWidget;}
ownerSplit(){return this._ownerSplitWidget;}
minimize(){if(this._ownerSplitWidget){this._ownerSplitWidget.setSidebarMinimized(true);}}
restore(){if(this._ownerSplitWidget){this._ownerSplitWidget.setSidebarMinimized(false);}}}
export class ActionDelegate{handleAction(context,actionId){switch(actionId){case'main.toggle-drawer':if(UI.inspectorView.drawerVisible()){UI.inspectorView._closeDrawer();}else{UI.inspectorView._showDrawer(true);}
return true;case'main.next-tab':UI.inspectorView._tabbedPane.selectNextTab();UI.inspectorView._tabbedPane.focus();return true;case'main.previous-tab':UI.inspectorView._tabbedPane.selectPrevTab();UI.inspectorView._tabbedPane.focus();return true;}
return false;}}
self.UI=self.UI||{};UI=UI||{};UI.InspectorView=InspectorView;UI.InspectorView.ActionDelegate=ActionDelegate;UI.inspectorView;export default class InplaceEditor{static startEditing(element,config){if(!InplaceEditor._defaultInstance){InplaceEditor._defaultInstance=new InplaceEditor();}
return InplaceEditor._defaultInstance.startEditing(element,config);}
editorContent(editingContext){const element=editingContext.element;if(element.tagName==='INPUT'&&element.type==='text'){return element.value;}
return element.textContent;}
setUpEditor(editingContext){const element=editingContext.element;element.classList.add('editing');element.setAttribute('contenteditable','plaintext-only');const oldRole=element.getAttribute('role');UI.ARIAUtils.markAsTextBox(element);editingContext.oldRole=oldRole;const oldTabIndex=element.getAttribute('tabIndex');if(typeof oldTabIndex!=='number'||oldTabIndex<0){element.tabIndex=0;}
this._focusRestorer=new UI.ElementFocusRestorer(element);editingContext.oldTabIndex=oldTabIndex;}
closeEditor(editingContext){const element=editingContext.element;element.classList.remove('editing');element.removeAttribute('contenteditable');if(typeof editingContext.oldRole!=='string'){element.removeAttribute('role');}else{element.role=editingContext.oldRole;}
if(typeof editingContext.oldTabIndex!=='number'){element.removeAttribute('tabIndex');}else{element.tabIndex=editingContext.oldTabIndex;}
element.scrollTop=0;element.scrollLeft=0;}
cancelEditing(editingContext){const element=editingContext.element;if(element.tagName==='INPUT'&&element.type==='text'){element.value=editingContext.oldText;}else{element.textContent=editingContext.oldText;}}
augmentEditingHandle(editingContext,handle){}
startEditing(element,config){if(!UI.markBeingEdited(element,true)){return null;}
config=config||new InplaceEditor.Config(function(){},function(){});const editingContext={element:element,config:config};const committedCallback=config.commitHandler;const cancelledCallback=config.cancelHandler;const pasteCallback=config.pasteHandler;const context=config.context;let moveDirection='';const self=this;this.setUpEditor(editingContext);editingContext.oldText=this.editorContent(editingContext);function blurEventListener(e){if(config.blurHandler&&!config.blurHandler(element,e)){return;}
editingCommitted.call(element);}
function cleanUpAfterEditing(){UI.markBeingEdited(element,false);element.removeEventListener('blur',blurEventListener,false);element.removeEventListener('keydown',keyDownEventListener,true);if(pasteCallback){element.removeEventListener('paste',pasteEventListener,true);}
if(self._focusRestorer){self._focusRestorer.restore();}
self.closeEditor(editingContext);}
function editingCancelled(){self.cancelEditing(editingContext);cleanUpAfterEditing();cancelledCallback(this,context);}
function editingCommitted(){cleanUpAfterEditing();committedCallback(this,self.editorContent(editingContext),editingContext.oldText,context,moveDirection);}
function defaultFinishHandler(event){if(isEnterKey(event)){return'commit';}else if(event.keyCode===UI.KeyboardShortcut.Keys.Esc.code||event.key==='Escape'){return'cancel';}else if(event.key==='Tab'){return'move-'+(event.shiftKey?'backward':'forward');}
return'';}
function handleEditingResult(result,event){if(result==='commit'){editingCommitted.call(element);event.consume(true);}else if(result==='cancel'){editingCancelled.call(element);event.consume(true);}else if(result&&result.startsWith('move-')){moveDirection=result.substring(5);if(event.key==='Tab'){event.consume(true);}
blurEventListener();}}
function pasteEventListener(event){const result=pasteCallback(event);handleEditingResult(result,event);}
function keyDownEventListener(event){let result=defaultFinishHandler(event);if(!result&&config.postKeydownFinishHandler){result=config.postKeydownFinishHandler(event);}
handleEditingResult(result,event);}
element.addEventListener('blur',blurEventListener,false);element.addEventListener('keydown',keyDownEventListener,true);if(pasteCallback){element.addEventListener('paste',pasteEventListener,true);}
const handle={cancel:editingCancelled.bind(element),commit:editingCommitted.bind(element)};this.augmentEditingHandle(editingContext,handle);return handle;}}
export class Config{constructor(commitHandler,cancelHandler,context,blurHandler){this.commitHandler=commitHandler;this.cancelHandler=cancelHandler;this.context=context;this.blurHandler=blurHandler;this.pasteHandler;this.postKeydownFinishHandler;}
setPasteHandler(pasteHandler){this.pasteHandler=pasteHandler;}
setPostKeydownFinishHandler(postKeydownFinishHandler){this.postKeydownFinishHandler=postKeydownFinishHandler;}}
self.UI=self.UI||{};UI=UI||{};UI.InplaceEditor=InplaceEditor;UI.InplaceEditor.Config=Config;UI.InplaceEditor.Controller;export default class Infobar{constructor(type,text,disableSetting){this.element=createElementWithClass('div','flex-none');this._shadowRoot=UI.createShadowRootWithCoreStyles(this.element,'ui/infobar.css');this._contentElement=this._shadowRoot.createChild('div','infobar infobar-'+type);this._mainRow=this._contentElement.createChild('div','infobar-main-row');this._mainRow.createChild('div',type+'-icon icon');this._mainRowText=this._mainRow.createChild('div','infobar-main-title');this._mainRowText.textContent=text;this._detailsRows=this._contentElement.createChild('div','infobar-details-rows hidden');this._toggleElement=UI.createTextButton(ls`more`,this._onToggleDetails.bind(this),'infobar-toggle link-style hidden');this._mainRow.appendChild(this._toggleElement);this._disableSetting=disableSetting||null;if(disableSetting){const disableButton=UI.createTextButton(ls`never show`,this._onDisable.bind(this),'infobar-toggle link-style');this._mainRow.appendChild(disableButton);}
this._closeButton=this._contentElement.createChild('div','close-button','dt-close-button');this._closeButton.setTabbable(true);self.onInvokeElement(this._closeButton,this.dispose.bind(this));this._closeCallback=null;}
static create(type,text,disableSetting){if(disableSetting&&disableSetting.get()){return null;}
return new Infobar(type,text,disableSetting);}
dispose(){this.element.remove();this._onResize();if(this._closeCallback){this._closeCallback.call(null);}}
setText(text){this._mainRowText.textContent=text;this._onResize();}
setCloseCallback(callback){this._closeCallback=callback;}
setParentView(parentView){this._parentView=parentView;}
_onResize(){if(this._parentView){this._parentView.doResize();}}
_onDisable(){this._disableSetting.set(true);this.dispose();}
_onToggleDetails(){this._detailsRows.classList.remove('hidden');this._toggleElement.remove();this._onResize();}
createDetailsRowMessage(message){this._toggleElement.classList.remove('hidden');const infobarDetailsRow=this._detailsRows.createChild('div','infobar-details-row');const detailsRowMessage=infobarDetailsRow.createChild('span','infobar-row-message');detailsRowMessage.textContent=message||'';return detailsRowMessage;}}
export const Type={Warning:'warning',Info:'info'};self.UI=self.UI||{};UI=UI||{};UI.Infobar=Infobar;UI.Infobar.Type=Type;export default class Icon extends HTMLSpanElement{constructor(){super();this._descriptor=null;this._spriteSheet=null;this._iconType='';}
static create(iconType,className){if(!Icon._constructor){Icon._constructor=UI.registerCustomElement('span','ui-icon',Icon);}
const icon=(Icon._constructor());if(className){icon.className=className;}
if(iconType){icon.setIconType(iconType);}
return icon;}
setIconType(iconType){if(this._descriptor){this.style.removeProperty('--spritesheet-position');this.style.removeProperty('width');this.style.removeProperty('height');this._toggleClasses(false);this._iconType='';this._descriptor=null;this._spriteSheet=null;}
const descriptor=Icon.Descriptors[iconType]||null;if(descriptor){this._iconType=iconType;this._descriptor=descriptor;this._spriteSheet=SpriteSheets[this._descriptor.spritesheet];console.assert(this._spriteSheet,`ERROR: icon ${this._iconType} has unknown spritesheet: ${this._descriptor.spritesheet}`);this.style.setProperty('--spritesheet-position',this._propertyValue());this.style.setProperty('width',this._spriteSheet.cellWidth+'px');this.style.setProperty('height',this._spriteSheet.cellHeight+'px');this._toggleClasses(true);}else if(iconType){throw new Error(`ERROR: failed to find icon descriptor for type: ${iconType}`);}}
_toggleClasses(value){this.classList.toggle('spritesheet-'+this._descriptor.spritesheet,value);this.classList.toggle(this._iconType,value);this.classList.toggle('icon-mask',value&&!!this._descriptor.isMask);this.classList.toggle('icon-invert',value&&!!this._descriptor.invert);}
_propertyValue(){if(!this._descriptor.coordinates){if(!this._descriptor.position||!_positionRegex.test(this._descriptor.position)){throw new Error(`ERROR: icon '${this._iconType}' has malformed position: '${this._descriptor.position}'`);}
const column=this._descriptor.position[0].toLowerCase().charCodeAt(0)-97;const row=parseInt(this._descriptor.position.substring(1),10)-1;this._descriptor.coordinates={x:-(this._spriteSheet.cellWidth+this._spriteSheet.padding)*column,y:(this._spriteSheet.cellHeight+this._spriteSheet.padding)*(row+1)-this._spriteSheet.padding};}
return`${this._descriptor.coordinates.x}px ${this._descriptor.coordinates.y}px`;}}
const _positionRegex=/^[a-z][1-9][0-9]*$/;const SpriteSheets={'smallicons':{cellWidth:10,cellHeight:10,padding:10},'mediumicons':{cellWidth:16,cellHeight:16,padding:0},'largeicons':{cellWidth:28,cellHeight:24,padding:0},'arrowicons':{cellWidth:19,cellHeight:19,padding:0}};export const Descriptors={'smallicon-bezier':{position:'a5',spritesheet:'smallicons',isMask:true},'smallicon-checkmark':{position:'b5',spritesheet:'smallicons'},'smallicon-checkmark-square':{position:'b6',spritesheet:'smallicons',isMask:true},'smallicon-checkmark-behind':{position:'d6',spritesheet:'smallicons',isMask:true},'smallicon-command-result':{position:'a4',spritesheet:'smallicons'},'smallicon-contrast-ratio':{position:'a6',spritesheet:'smallicons',isMask:true},'smallicon-cross':{position:'b4',spritesheet:'smallicons'},'smallicon-device':{position:'c5',spritesheet:'smallicons'},'smallicon-error':{position:'c4',spritesheet:'smallicons'},'smallicon-expand-less':{position:'f5',spritesheet:'smallicons',isMask:true},'smallicon-expand-more':{position:'e6',spritesheet:'smallicons',isMask:true},'smallicon-green-arrow':{position:'a3',spritesheet:'smallicons'},'smallicon-green-ball':{position:'b3',spritesheet:'smallicons'},'smallicon-info':{position:'c3',spritesheet:'smallicons'},'smallicon-inline-breakpoint-conditional':{position:'d4',spritesheet:'smallicons'},'smallicon-inline-breakpoint':{position:'d5',spritesheet:'smallicons'},'smallicon-no':{position:'c6',spritesheet:'smallicons',isMask:true},'smallicon-orange-ball':{position:'d3',spritesheet:'smallicons'},'smallicon-red-ball':{position:'a2',spritesheet:'smallicons'},'smallicon-shadow':{position:'b2',spritesheet:'smallicons',isMask:true},'smallicon-step-in':{position:'c2',spritesheet:'smallicons'},'smallicon-step-out':{position:'d2',spritesheet:'smallicons'},'smallicon-text-prompt':{position:'e5',spritesheet:'smallicons'},'smallicon-thick-left-arrow':{position:'e4',spritesheet:'smallicons'},'smallicon-thick-right-arrow':{position:'e3',spritesheet:'smallicons'},'smallicon-triangle-down':{position:'e2',spritesheet:'smallicons',isMask:true},'smallicon-triangle-right':{position:'a1',spritesheet:'smallicons',isMask:true},'smallicon-triangle-up':{position:'b1',spritesheet:'smallicons',isMask:true},'smallicon-user-command':{position:'c1',spritesheet:'smallicons'},'smallicon-warning':{position:'d1',spritesheet:'smallicons'},'smallicon-network-product':{position:'e1',spritesheet:'smallicons'},'smallicon-clear-warning':{position:'f1',spritesheet:'smallicons',isMask:true},'smallicon-clear-info':{position:'f2',spritesheet:'smallicons'},'smallicon-clear-error':{position:'f3',spritesheet:'smallicons'},'smallicon-account-circle':{position:'f4',spritesheet:'smallicons'},'smallicon-videoplayer-paused':{position:'f6',spritesheet:'smallicons',isMask:true},'smallicon-videoplayer-playing':{position:'g6',spritesheet:'smallicons',isMask:true},'smallicon-videoplayer-destroyed':{position:'g5',spritesheet:'smallicons',isMask:true},'mediumicon-clear-storage':{position:'a4',spritesheet:'mediumicons',isMask:true},'mediumicon-cookie':{position:'b4',spritesheet:'mediumicons',isMask:true},'mediumicon-database':{position:'c4',spritesheet:'mediumicons',isMask:true},'mediumicon-info':{position:'c1',spritesheet:'mediumicons',isMask:true},'mediumicon-manifest':{position:'d4',spritesheet:'mediumicons',isMask:true},'mediumicon-service-worker':{position:'a3',spritesheet:'mediumicons',isMask:true},'mediumicon-table':{position:'b3',spritesheet:'mediumicons',isMask:true},'mediumicon-arrow-in-circle':{position:'c3',spritesheet:'mediumicons',isMask:true},'mediumicon-file-sync':{position:'d3',spritesheet:'mediumicons',invert:true},'mediumicon-file':{position:'a2',spritesheet:'mediumicons',invert:true},'mediumicon-gray-cross-active':{position:'b2',spritesheet:'mediumicons'},'mediumicon-gray-cross-hover':{position:'c2',spritesheet:'mediumicons'},'mediumicon-red-cross-active':{position:'d2',spritesheet:'mediumicons'},'mediumicon-red-cross-hover':{position:'a1',spritesheet:'mediumicons'},'mediumicon-search':{position:'b1',spritesheet:'mediumicons'},'mediumicon-replace':{position:'c5',spritesheet:'mediumicons',isMask:true},'mediumicon-account-circle':{position:'e4',spritesheet:'mediumicons',isMask:true},'mediumicon-warning-triangle':{position:'e1',spritesheet:'mediumicons'},'mediumicon-error-circle':{position:'e3',spritesheet:'mediumicons'},'mediumicon-info-circle':{position:'e2',spritesheet:'mediumicons'},'mediumicon-bug':{position:'d1',spritesheet:'mediumicons',isMask:true},'mediumicon-list':{position:'e5',spritesheet:'mediumicons',isMask:true},'mediumicon-warning':{position:'d5',spritesheet:'mediumicons',isMask:true},'mediumicon-sync':{position:'a5',spritesheet:'mediumicons',isMask:true},'mediumicon-fetch':{position:'b5',spritesheet:'mediumicons',isMask:true},'mediumicon-cloud':{position:'a6',spritesheet:'mediumicons',isMask:true},'mediumicon-bell':{position:'b6',spritesheet:'mediumicons',isMask:true},'mediumicon-payment':{position:'c6',spritesheet:'mediumicons',isMask:true},'mediumicon-schedule':{position:'d6',spritesheet:'mediumicons',isMask:true},'badge-navigator-file-sync':{position:'a9',spritesheet:'largeicons'},'largeicon-activate-breakpoints':{position:'b9',spritesheet:'largeicons',isMask:true},'largeicon-add':{position:'a8',spritesheet:'largeicons',isMask:true},'largeicon-background-color':{position:'b8',spritesheet:'largeicons',isMask:true},'largeicon-box-shadow':{position:'a7',spritesheet:'largeicons',isMask:true},'largeicon-camera':{position:'b7',spritesheet:'largeicons',isMask:true},'largeicon-center':{position:'c9',spritesheet:'largeicons',isMask:true},'largeicon-checkmark':{position:'c8',spritesheet:'largeicons',isMask:true},'largeicon-chevron':{position:'c7',spritesheet:'largeicons',isMask:true},'largeicon-clear':{position:'a6',spritesheet:'largeicons',isMask:true},'largeicon-copy':{position:'b6',spritesheet:'largeicons',isMask:true},'largeicon-deactivate-breakpoints':{position:'c6',spritesheet:'largeicons',isMask:true},'largeicon-delete':{position:'d9',spritesheet:'largeicons',isMask:true},'largeicon-dock-to-bottom':{position:'d8',spritesheet:'largeicons',isMask:true},'largeicon-dock-to-left':{position:'d7',spritesheet:'largeicons',isMask:true},'largeicon-dock-to-right':{position:'d6',spritesheet:'largeicons',isMask:true},'largeicon-download':{position:'h6',spritesheet:'largeicons',isMask:true},'largeicon-edit':{position:'a5',spritesheet:'largeicons',isMask:true},'largeicon-eyedropper':{position:'b5',spritesheet:'largeicons',isMask:true},'largeicon-filter':{position:'c5',spritesheet:'largeicons',isMask:true},'largeicon-foreground-color':{position:'d5',spritesheet:'largeicons',isMask:true},'largeicon-hide-bottom-sidebar':{position:'e9',spritesheet:'largeicons',isMask:true},'largeicon-hide-left-sidebar':{position:'e8',spritesheet:'largeicons',isMask:true},'largeicon-hide-right-sidebar':{position:'e7',spritesheet:'largeicons',isMask:true},'largeicon-hide-top-sidebar':{position:'e6',spritesheet:'largeicons',isMask:true},'largeicon-large-list':{position:'e5',spritesheet:'largeicons',isMask:true},'largeicon-layout-editor':{position:'a4',spritesheet:'largeicons',isMask:true},'largeicon-load':{position:'h5',spritesheet:'largeicons',isMask:true},'largeicon-longclick-triangle':{position:'b4',spritesheet:'largeicons',isMask:true},'largeicon-menu':{position:'c4',spritesheet:'largeicons',isMask:true},'largeicon-navigator-domain':{position:'d4',spritesheet:'largeicons',isMask:true},'largeicon-navigator-file':{position:'e4',spritesheet:'largeicons',isMask:true},'largeicon-navigator-file-sync':{position:'f9',spritesheet:'largeicons',isMask:true},'largeicon-navigator-folder':{position:'f8',spritesheet:'largeicons',isMask:true},'largeicon-navigator-frame':{position:'f7',spritesheet:'largeicons',isMask:true},'largeicon-navigator-snippet':{position:'f6',spritesheet:'largeicons',isMask:true},'largeicon-navigator-worker':{position:'f5',spritesheet:'largeicons',isMask:true},'largeicon-node-search':{position:'f4',spritesheet:'largeicons',isMask:true},'largeicon-pan':{position:'a3',spritesheet:'largeicons',isMask:true},'largeicon-pause-animation':{position:'b3',spritesheet:'largeicons',isMask:true},'largeicon-pause':{position:'c3',spritesheet:'largeicons',isMask:true},'largeicon-pause-on-exceptions':{position:'d3',spritesheet:'largeicons',isMask:true},'largeicon-phone':{position:'e3',spritesheet:'largeicons',isMask:true},'largeicon-play-animation':{position:'f3',spritesheet:'largeicons',isMask:true},'largeicon-play-back':{position:'a2',spritesheet:'largeicons',isMask:true},'largeicon-play':{position:'b2',spritesheet:'largeicons',isMask:true},'largeicon-pretty-print':{position:'c2',spritesheet:'largeicons',isMask:true},'largeicon-refresh':{position:'d2',spritesheet:'largeicons',isMask:true},'largeicon-replay-animation':{position:'e2',spritesheet:'largeicons',isMask:true},'largeicon-resume':{position:'f2',spritesheet:'largeicons',isMask:true},'largeicon-rotate':{position:'g9',spritesheet:'largeicons',isMask:true},'largeicon-rotate-screen':{position:'g8',spritesheet:'largeicons',isMask:true},'largeicon-search':{position:'h4',spritesheet:'largeicons',isMask:true},'largeicon-settings-gear':{position:'g7',spritesheet:'largeicons',isMask:true},'largeicon-show-bottom-sidebar':{position:'g6',spritesheet:'largeicons',isMask:true},'largeicon-show-left-sidebar':{position:'g5',spritesheet:'largeicons',isMask:true},'largeicon-show-right-sidebar':{position:'g4',spritesheet:'largeicons',isMask:true},'largeicon-show-top-sidebar':{position:'g3',spritesheet:'largeicons',isMask:true},'largeicon-start-recording':{position:'g2',spritesheet:'largeicons',isMask:true},'largeicon-step-into':{position:'a1',spritesheet:'largeicons',isMask:true},'largeicon-step-out':{position:'b1',spritesheet:'largeicons',isMask:true},'largeicon-step-over':{position:'c1',spritesheet:'largeicons',isMask:true},'largeicon-step':{position:'h1',spritesheet:'largeicons',isMask:true},'largeicon-stop-recording':{position:'d1',spritesheet:'largeicons',isMask:true},'largeicon-terminate-execution':{position:'h2',spritesheet:'largeicons',isMask:true},'largeicon-text-shadow':{position:'e1',spritesheet:'largeicons',isMask:true},'largeicon-trash-bin':{position:'f1',spritesheet:'largeicons',isMask:true},'largeicon-undo':{position:'h7',spritesheet:'largeicons',isMask:true},'largeicon-undock':{position:'g1',spritesheet:'largeicons',isMask:true},'largeicon-visibility':{position:'h9',spritesheet:'largeicons',isMask:true},'largeicon-waterfall':{position:'h8',spritesheet:'largeicons',isMask:true},'mediumicon-arrow-top':{position:'a4',spritesheet:'arrowicons'},'mediumicon-arrow-bottom':{position:'a3',spritesheet:'arrowicons'},'mediumicon-arrow-left':{position:'a2',spritesheet:'arrowicons'},'mediumicon-arrow-right':{position:'a1',spritesheet:'arrowicons'}};self.UI=self.UI||{};UI=UI||{};UI.Icon=Icon;UI.Icon.Descriptors=Descriptors;UI.Icon.Descriptor;UI.Icon.SpriteSheet;export default class HistoryInput extends HTMLInputElement{constructor(){super();this._history=[''];this._historyPosition=0;this.addEventListener('keydown',this._onKeyDown.bind(this),false);this.addEventListener('input',this._onInput.bind(this),false);}
static create(){if(!HistoryInput._constructor){HistoryInput._constructor=UI.registerCustomElement('input','history-input',HistoryInput);}
return(HistoryInput._constructor());}
_onInput(event){if(this._history.length===this._historyPosition+1){this._history[this._history.length-1]=this.value;}}
_onKeyDown(event){if(event.keyCode===UI.KeyboardShortcut.Keys.Up.code){this._historyPosition=Math.max(this._historyPosition-1,0);this.value=this._history[this._historyPosition];this.dispatchEvent(new Event('input',{'bubbles':true,'cancelable':true}));event.consume(true);}else if(event.keyCode===UI.KeyboardShortcut.Keys.Down.code){this._historyPosition=Math.min(this._historyPosition+1,this._history.length-1);this.value=this._history[this._historyPosition];this.dispatchEvent(new Event('input',{'bubbles':true,'cancelable':true}));event.consume(true);}else if(event.keyCode===UI.KeyboardShortcut.Keys.Enter.code){this._saveToHistory();}}
_saveToHistory(){if(this._history.length>1&&this._history[this._history.length-2]===this.value){return;}
this._history[this._history.length-1]=this.value;this._historyPosition=this._history.length-1;this._history.push('');}}
self.UI=self.UI||{};UI=UI||{};UI.HistoryInput=HistoryInput;export default class GlassPane{constructor(){this._widget=new UI.Widget(true);this._widget.markAsRoot();this.element=this._widget.element;this.contentElement=this._widget.contentElement;this._arrowElement=UI.Icon.create('','arrow hidden');this.element.shadowRoot.appendChild(this._arrowElement);this.registerRequiredCSS('ui/glassPane.css');this.setPointerEventsBehavior(GlassPane.PointerEventsBehavior.PierceGlassPane);this._onMouseDownBound=this._onMouseDown.bind(this);this._onClickOutsideCallback=null;this._maxSize=null;this._positionX=null;this._positionY=null;this._anchorBox=null;this._anchorBehavior=GlassPane.AnchorBehavior.PreferTop;this._sizeBehavior=GlassPane.SizeBehavior.SetExactSize;this._marginBehavior=GlassPane.MarginBehavior.DefaultMargin;}
isShowing(){return this._widget.isShowing();}
registerRequiredCSS(cssFile){this._widget.registerRequiredCSS(cssFile);}
setDefaultFocusedElement(element){this._widget.setDefaultFocusedElement(element);}
setDimmed(dimmed){this.element.classList.toggle('dimmed-pane',dimmed);}
setPointerEventsBehavior(pointerEventsBehavior){this.element.classList.toggle('no-pointer-events',pointerEventsBehavior!==GlassPane.PointerEventsBehavior.BlockedByGlassPane);this.contentElement.classList.toggle('no-pointer-events',pointerEventsBehavior===GlassPane.PointerEventsBehavior.PierceContents);}
setOutsideClickCallback(callback){this._onClickOutsideCallback=callback;}
setMaxContentSize(size){this._maxSize=size;this._positionContent();}
setSizeBehavior(sizeBehavior){this._sizeBehavior=sizeBehavior;this._positionContent();}
setContentPosition(x,y){this._positionX=x;this._positionY=y;this._positionContent();}
setContentAnchorBox(anchorBox){this._anchorBox=anchorBox;this._positionContent();}
setAnchorBehavior(behavior){this._anchorBehavior=behavior;}
setMarginBehavior(behavior){this._marginBehavior=behavior;this._arrowElement.classList.toggle('hidden',behavior!==GlassPane.MarginBehavior.Arrow);}
show(document){if(this.isShowing()){return;}
this.element.style.zIndex=3000+1000*_panes.size;document.body.addEventListener('mousedown',this._onMouseDownBound,true);this._widget.show(document.body);_panes.add(this);this._positionContent();}
hide(){if(!this.isShowing()){return;}
_panes.delete(this);this.element.ownerDocument.body.removeEventListener('mousedown',this._onMouseDownBound,true);this._widget.detach();}
_onMouseDown(event){if(!this._onClickOutsideCallback){return;}
const node=event.deepElementFromPoint();if(!node||this.contentElement.isSelfOrAncestor(node)){return;}
this._onClickOutsideCallback.call(null,event);}
_positionContent(){if(!this.isShowing()){return;}
const showArrow=this._marginBehavior===GlassPane.MarginBehavior.Arrow;const gutterSize=showArrow?8:(this._marginBehavior===GlassPane.MarginBehavior.NoMargin?0:3);const scrollbarSize=UI.measuredScrollbarWidth(this.element.ownerDocument);const arrowSize=10;const container=_containers.get((this.element.ownerDocument));if(this._sizeBehavior===GlassPane.SizeBehavior.MeasureContent){this.contentElement.positionAt(0,0);this.contentElement.style.width='';this.contentElement.style.maxWidth='';this.contentElement.style.height='';this.contentElement.style.maxHeight='';}
const containerWidth=container.offsetWidth;const containerHeight=container.offsetHeight;let width=containerWidth-gutterSize*2;let height=containerHeight-gutterSize*2;let positionX=gutterSize;let positionY=gutterSize;if(this._maxSize){width=Math.min(width,this._maxSize.width);height=Math.min(height,this._maxSize.height);}
if(this._sizeBehavior===GlassPane.SizeBehavior.MeasureContent){const measuredRect=this.contentElement.getBoundingClientRect();const widthOverflow=height<measuredRect.height?scrollbarSize:0;const heightOverflow=width<measuredRect.width?scrollbarSize:0;width=Math.min(width,measuredRect.width+widthOverflow);height=Math.min(height,measuredRect.height+heightOverflow);}
if(this._anchorBox){const anchorBox=this._anchorBox.relativeToElement(container);let behavior=this._anchorBehavior;this._arrowElement.classList.remove('arrow-none','arrow-top','arrow-bottom','arrow-left','arrow-right');if(behavior===GlassPane.AnchorBehavior.PreferTop||behavior===GlassPane.AnchorBehavior.PreferBottom){const top=anchorBox.y-2*gutterSize;const bottom=containerHeight-anchorBox.y-anchorBox.height-2*gutterSize;if(behavior===GlassPane.AnchorBehavior.PreferTop&&top<height&&bottom>top){behavior=GlassPane.AnchorBehavior.PreferBottom;}
if(behavior===GlassPane.AnchorBehavior.PreferBottom&&bottom<height&&top>bottom){behavior=GlassPane.AnchorBehavior.PreferTop;}
let arrowY;let enoughHeight=true;if(behavior===GlassPane.AnchorBehavior.PreferTop){positionY=Math.max(gutterSize,anchorBox.y-height-gutterSize);const spaceTop=anchorBox.y-positionY-gutterSize;if(this._sizeBehavior===GlassPane.SizeBehavior.MeasureContent){if(height>spaceTop){this._arrowElement.classList.add('arrow-none');enoughHeight=false;}}else{height=Math.min(height,spaceTop);}
this._arrowElement.setIconType('mediumicon-arrow-bottom');this._arrowElement.classList.add('arrow-bottom');arrowY=anchorBox.y-gutterSize;}else{positionY=anchorBox.y+anchorBox.height+gutterSize;const spaceBottom=containerHeight-positionY-gutterSize;if(this._sizeBehavior===GlassPane.SizeBehavior.MeasureContent){if(height>spaceBottom){this._arrowElement.classList.add('arrow-none');positionY=containerHeight-gutterSize-height;enoughHeight=false;}}else{height=Math.min(height,spaceBottom);}
this._arrowElement.setIconType('mediumicon-arrow-top');this._arrowElement.classList.add('arrow-top');arrowY=anchorBox.y+anchorBox.height+gutterSize;}
positionX=Math.max(gutterSize,Math.min(anchorBox.x,containerWidth-width-gutterSize));if(!enoughHeight){positionX=Math.min(positionX+arrowSize,containerWidth-width-gutterSize);}else if(showArrow&&positionX-arrowSize>=gutterSize){positionX-=arrowSize;}
width=Math.min(width,containerWidth-positionX-gutterSize);if(2*arrowSize>=width){this._arrowElement.classList.add('arrow-none');}else{let arrowX=anchorBox.x+Math.min(50,Math.floor(anchorBox.width/2));arrowX=Number.constrain(arrowX,positionX+arrowSize,positionX+width-arrowSize);this._arrowElement.positionAt(arrowX,arrowY,container);}}else{const left=anchorBox.x-2*gutterSize;const right=containerWidth-anchorBox.x-anchorBox.width-2*gutterSize;if(behavior===GlassPane.AnchorBehavior.PreferLeft&&left<width&&right>left){behavior=GlassPane.AnchorBehavior.PreferRight;}
if(behavior===GlassPane.AnchorBehavior.PreferRight&&right<width&&left>right){behavior=GlassPane.AnchorBehavior.PreferLeft;}
let arrowX;let enoughWidth=true;if(behavior===GlassPane.AnchorBehavior.PreferLeft){positionX=Math.max(gutterSize,anchorBox.x-width-gutterSize);const spaceLeft=anchorBox.x-positionX-gutterSize;if(this._sizeBehavior===GlassPane.SizeBehavior.MeasureContent){if(width>spaceLeft){this._arrowElement.classList.add('arrow-none');enoughWidth=false;}}else{width=Math.min(width,spaceLeft);}
this._arrowElement.setIconType('mediumicon-arrow-right');this._arrowElement.classList.add('arrow-right');arrowX=anchorBox.x-gutterSize;}else{positionX=anchorBox.x+anchorBox.width+gutterSize;const spaceRight=containerWidth-positionX-gutterSize;if(this._sizeBehavior===GlassPane.SizeBehavior.MeasureContent){if(width>spaceRight){this._arrowElement.classList.add('arrow-none');positionX=containerWidth-gutterSize-width;enoughWidth=false;}}else{width=Math.min(width,spaceRight);}
this._arrowElement.setIconType('mediumicon-arrow-left');this._arrowElement.classList.add('arrow-left');arrowX=anchorBox.x+anchorBox.width+gutterSize;}
positionY=Math.max(gutterSize,Math.min(anchorBox.y,containerHeight-height-gutterSize));if(!enoughWidth){positionY=Math.min(positionY+arrowSize,containerHeight-height-gutterSize);}else if(showArrow&&positionY-arrowSize>=gutterSize){positionY-=arrowSize;}
height=Math.min(height,containerHeight-positionY-gutterSize);if(2*arrowSize>=height){this._arrowElement.classList.add('arrow-none');}else{let arrowY=anchorBox.y+Math.min(50,Math.floor(anchorBox.height/2));arrowY=Number.constrain(arrowY,positionY+arrowSize,positionY+height-arrowSize);this._arrowElement.positionAt(arrowX,arrowY,container);}}}else{positionX=this._positionX!==null?this._positionX:(containerWidth-width)/2;positionY=this._positionY!==null?this._positionY:(containerHeight-height)/2;width=Math.min(width,containerWidth-positionX-gutterSize);height=Math.min(height,containerHeight-positionY-gutterSize);this._arrowElement.classList.add('arrow-none');}
this.contentElement.style.width=width+'px';if(this._sizeBehavior===GlassPane.SizeBehavior.SetExactWidthMaxHeight){this.contentElement.style.maxHeight=height+'px';}else{this.contentElement.style.height=height+'px';}
this.contentElement.positionAt(positionX,positionY,container);this._widget.doResize();}
widget(){return this._widget;}
static setContainer(element){_containers.set((element.ownerDocument),element);GlassPane.containerMoved(element);}
static container(document){return _containers.get(document);}
static containerMoved(element){for(const pane of _panes){if(pane.isShowing()&&pane.element.ownerDocument===element.ownerDocument){pane._positionContent();}}}}
export const PointerEventsBehavior={BlockedByGlassPane:Symbol('BlockedByGlassPane'),PierceGlassPane:Symbol('PierceGlassPane'),PierceContents:Symbol('PierceContents')};export const AnchorBehavior={PreferTop:Symbol('PreferTop'),PreferBottom:Symbol('PreferBottom'),PreferLeft:Symbol('PreferLeft'),PreferRight:Symbol('PreferRight'),};export const SizeBehavior={SetExactSize:Symbol('SetExactSize'),SetExactWidthMaxHeight:Symbol('SetExactWidthMaxHeight'),MeasureContent:Symbol('MeasureContent')};export const MarginBehavior={Arrow:Symbol('Arrow'),DefaultMargin:Symbol('DefaultMargin'),NoMargin:Symbol('NoMargin')};const _containers=new Map();const _panes=new Set();self.UI=self.UI||{};UI=UI||{};UI.GlassPane=GlassPane;UI.GlassPane.PointerEventsBehavior=PointerEventsBehavior;UI.GlassPane.AnchorBehavior=AnchorBehavior;UI.GlassPane.SizeBehavior=SizeBehavior;UI.GlassPane.MarginBehavior=MarginBehavior;UI.GlassPane._panes=_panes;const Geometry={};export default Geometry;export const _Eps=1e-5;export class Vector{constructor(x,y,z){this.x=x;this.y=y;this.z=z;}
length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z);}
normalize(){const length=this.length();if(length<=UI.Geometry._Eps){return;}
this.x/=length;this.y/=length;this.z/=length;}}
export class Point{constructor(x,y){this.x=x;this.y=y;}
distanceTo(p){return Math.sqrt(Math.pow(p.x-this.x,2)+Math.pow(p.y-this.y,2));}
projectOn(line){if(line.x===0&&line.y===0){return new Point(0,0);}
return line.scale((this.x*line.x+this.y*line.y)/(Math.pow(line.x,2)+Math.pow(line.y,2)));}
scale(scalar){return new Point(this.x*scalar,this.y*scalar);}
toString(){return Math.round(this.x*100)/100+', '+Math.round(this.y*100)/100;}}
export class CubicBezier{constructor(point1,point2){this.controlPoints=[point1,point2];}
static parse(text){const keywordValues=CubicBezier.KeywordValues;const value=text.toLowerCase().replace(/\s+/g,'');if(Object.keys(keywordValues).indexOf(value)!==-1){return CubicBezier.parse(keywordValues[value]);}
const bezierRegex=/^cubic-bezier\(([^,]+),([^,]+),([^,]+),([^,]+)\)$/;const match=value.match(bezierRegex);if(match){const control1=new Point(parseFloat(match[1]),parseFloat(match[2]));const control2=new Point(parseFloat(match[3]),parseFloat(match[4]));return new CubicBezier(control1,control2);}
return null;}
evaluateAt(t){function evaluate(v1,v2,t){return 3*(1-t)*(1-t)*t*v1+3*(1-t)*t*t*v2+Math.pow(t,3);}
const x=evaluate(this.controlPoints[0].x,this.controlPoints[1].x,t);const y=evaluate(this.controlPoints[0].y,this.controlPoints[1].y,t);return new Point(x,y);}
asCSSText(){const raw='cubic-bezier('+this.controlPoints.join(', ')+')';const keywordValues=CubicBezier.KeywordValues;for(const keyword in keywordValues){if(raw===keywordValues[keyword]){return keyword;}}
return raw;}}
CubicBezier.Regex=/((cubic-bezier\([^)]+\))|\b(linear|ease-in-out|ease-in|ease-out|ease)\b)/g;CubicBezier.KeywordValues={'linear':'cubic-bezier(0, 0, 1, 1)','ease':'cubic-bezier(0.25, 0.1, 0.25, 1)','ease-in':'cubic-bezier(0.42, 0, 1, 1)','ease-in-out':'cubic-bezier(0.42, 0, 0.58, 1)','ease-out':'cubic-bezier(0, 0, 0.58, 1)'};export class EulerAngles{constructor(alpha,beta,gamma){this.alpha=alpha;this.beta=beta;this.gamma=gamma;}
static fromRotationMatrix(rotationMatrix){const beta=Math.atan2(rotationMatrix.m23,rotationMatrix.m33);const gamma=Math.atan2(-rotationMatrix.m13,Math.sqrt(rotationMatrix.m11*rotationMatrix.m11+rotationMatrix.m12*rotationMatrix.m12));const alpha=Math.atan2(rotationMatrix.m12,rotationMatrix.m11);return new EulerAngles(radiansToDegrees(alpha),radiansToDegrees(beta),radiansToDegrees(gamma));}
toRotate3DString(){const gammaAxisY=-Math.sin(degreesToRadians(this.beta));const gammaAxisZ=Math.cos(degreesToRadians(this.beta));const axis={alpha:[0,1,0],beta:[-1,0,0],gamma:[0,gammaAxisY,gammaAxisZ]};return'rotate3d('+axis.alpha.join(',')+','+this.alpha+'deg) '+'rotate3d('+axis.beta.join(',')+','+this.beta+'deg) '+'rotate3d('+axis.gamma.join(',')+','+this.gamma+'deg)';}}
export const scalarProduct=function(u,v){return u.x*v.x+u.y*v.y+u.z*v.z;};export const crossProduct=function(u,v){const x=u.y*v.z-u.z*v.y;const y=u.z*v.x-u.x*v.z;const z=u.x*v.y-u.y*v.x;return new Vector(x,y,z);};export const subtract=function(u,v){const x=u.x-v.x;const y=u.y-v.y;const z=u.z-v.z;return new Vector(x,y,z);};export const multiplyVectorByMatrixAndNormalize=function(v,m){const t=v.x*m.m14+v.y*m.m24+v.z*m.m34+m.m44;const x=(v.x*m.m11+v.y*m.m21+v.z*m.m31+m.m41)/t;const y=(v.x*m.m12+v.y*m.m22+v.z*m.m32+m.m42)/t;const z=(v.x*m.m13+v.y*m.m23+v.z*m.m33+m.m43)/t;return new Vector(x,y,z);};export const calculateAngle=function(u,v){const uLength=u.length();const vLength=v.length();if(uLength<=_Eps||vLength<=_Eps){return 0;}
const cos=scalarProduct(u,v)/uLength/vLength;if(Math.abs(cos)>1){return 0;}
return radiansToDegrees(Math.acos(cos));};export const degreesToRadians=function(deg){return deg*Math.PI/180;};export const radiansToDegrees=function(rad){return rad*180/Math.PI;};export const boundsForTransformedPoints=function(matrix,points,aggregateBounds){if(!aggregateBounds){aggregateBounds={minX:Infinity,maxX:-Infinity,minY:Infinity,maxY:-Infinity};}
if(points.length%3){console.assert('Invalid size of points array');}
for(let p=0;p<points.length;p+=3){let vector=new Vector(points[p],points[p+1],points[p+2]);vector=UI.Geometry.multiplyVectorByMatrixAndNormalize(vector,matrix);aggregateBounds.minX=Math.min(aggregateBounds.minX,vector.x);aggregateBounds.maxX=Math.max(aggregateBounds.maxX,vector.x);aggregateBounds.minY=Math.min(aggregateBounds.minY,vector.y);aggregateBounds.maxY=Math.max(aggregateBounds.maxY,vector.y);}
return aggregateBounds;};export class Size{constructor(width,height){this.width=width;this.height=height;}
clipTo(size){if(!size){return this;}
return new Size(Math.min(this.width,size.width),Math.min(this.height,size.height));}
scale(scale){return new Size(this.width*scale,this.height*scale);}
isEqual(size){return!!size&&this.width===size.width&&this.height===size.height;}
widthToMax(size){return new Size(Math.max(this.width,(typeof size==='number'?size:size.width)),this.height);}
addWidth(size){return new Size(this.width+(typeof size==='number'?size:size.width),this.height);}
heightToMax(size){return new Size(this.width,Math.max(this.height,(typeof size==='number'?size:size.height)));}
addHeight(size){return new Size(this.width,this.height+(typeof size==='number'?size:size.height));}}
export class Insets{constructor(left,top,right,bottom){this.left=left;this.top=top;this.right=right;this.bottom=bottom;}
isEqual(insets){return!!insets&&this.left===insets.left&&this.top===insets.top&&this.right===insets.right&&this.bottom===insets.bottom;}}
export class Rect{constructor(left,top,width,height){this.left=left;this.top=top;this.width=width;this.height=height;}
isEqual(rect){return!!rect&&this.left===rect.left&&this.top===rect.top&&this.width===rect.width&&this.height===rect.height;}
scale(scale){return new Rect(this.left*scale,this.top*scale,this.width*scale,this.height*scale);}
size(){return new Size(this.width,this.height);}
relativeTo(origin){return new Rect(this.left-origin.left,this.top-origin.top,this.width,this.height);}
rebaseTo(origin){return new Rect(this.left+origin.left,this.top+origin.top,this.width,this.height);}}
export class Constraints{constructor(minimum,preferred){this.minimum=minimum||new Size(0,0);this.preferred=preferred||this.minimum;if(this.minimum.width>this.preferred.width||this.minimum.height>this.preferred.height){throw new Error('Minimum size is greater than preferred.');}}
isEqual(constraints){return!!constraints&&this.minimum.isEqual(constraints.minimum)&&this.preferred.isEqual(constraints.preferred);}
widthToMax(value){if(typeof value==='number'){return new Constraints(this.minimum.widthToMax(value),this.preferred.widthToMax(value));}
return new Constraints(this.minimum.widthToMax(value.minimum),this.preferred.widthToMax(value.preferred));}
addWidth(value){if(typeof value==='number'){return new Constraints(this.minimum.addWidth(value),this.preferred.addWidth(value));}
return new Constraints(this.minimum.addWidth(value.minimum),this.preferred.addWidth(value.preferred));}
heightToMax(value){if(typeof value==='number'){return new Constraints(this.minimum.heightToMax(value),this.preferred.heightToMax(value));}
return new Constraints(this.minimum.heightToMax(value.minimum),this.preferred.heightToMax(value.preferred));}
addHeight(value){if(typeof value==='number'){return new Constraints(this.minimum.addHeight(value),this.preferred.addHeight(value));}
return new Constraints(this.minimum.addHeight(value.minimum),this.preferred.addHeight(value.preferred));}}
self.UI=self.UI||{};UI=UI||{};UI.Geometry=Geometry;UI.Geometry._Eps=_Eps;UI.Geometry.Vector=Vector;UI.Geometry.Point=Point;UI.Geometry.CubicBezier=CubicBezier;UI.Geometry.EulerAngles=EulerAngles;UI.Geometry.scalarProduct=scalarProduct;UI.Geometry.crossProduct=crossProduct;UI.Geometry.subtract=subtract;UI.Geometry.multiplyVectorByMatrixAndNormalize=multiplyVectorByMatrixAndNormalize;UI.Geometry.calculateAngle=calculateAngle;UI.Geometry.degreesToRadians=degreesToRadians;UI.Geometry.radiansToDegrees=radiansToDegrees;UI.Size=Size;UI.Insets=Insets;UI.Rect=Rect;UI.Constraints=Constraints;UI.Geometry.boundsForTransformedPoints=boundsForTransformedPoints;export default class Fragment{constructor(element){this._element=element;this._elementsById=new Map();}
element(){return this._element;}
$(elementId){return this._elementsById.get(elementId);}
static build(strings,...values){return Fragment._render(Fragment._template(strings),values);}
static cached(strings,...values){let template=_templateCache.get(strings);if(!template){template=Fragment._template(strings);_templateCache.set(strings,template);}
return Fragment._render(template,values);}
static _template(strings){let html='';let insideText=true;for(let i=0;i<strings.length-1;i++){html+=strings[i];const close=strings[i].lastIndexOf('>');const open=strings[i].indexOf('<',close+1);if(close!==-1&&open===-1){insideText=true;}else if(open!==-1){insideText=false;}
html+=insideText?Fragment._textMarker:Fragment._attributeMarker(i);}
html+=strings[strings.length-1];const template=window.document.createElement('template');template.innerHTML=html;const walker=template.ownerDocument.createTreeWalker(template.content,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,null,false);let valueIndex=0;const emptyTextNodes=[];const binds=[];const nodesToMark=[];while(walker.nextNode()){const node=walker.currentNode;if(node.nodeType===Node.ELEMENT_NODE&&node.hasAttributes()){if(node.hasAttribute('$')){nodesToMark.push(node);binds.push({elementId:node.getAttribute('$')});node.removeAttribute('$');}
const attributesToRemove=[];for(let i=0;i<node.attributes.length;i++){const name=node.attributes[i].name;if(!_attributeMarkerRegex.test(name)&&!_attributeMarkerRegex.test(node.attributes[i].value)){continue;}
attributesToRemove.push(name);nodesToMark.push(node);const bind={attr:{index:valueIndex}};bind.attr.names=name.split(_attributeMarkerRegex);valueIndex+=bind.attr.names.length-1;bind.attr.values=node.attributes[i].value.split(_attributeMarkerRegex);valueIndex+=bind.attr.values.length-1;binds.push(bind);}
for(let i=0;i<attributesToRemove.length;i++){node.removeAttribute(attributesToRemove[i]);}}
if(node.nodeType===Node.TEXT_NODE&&node.data.indexOf(Fragment._textMarker)!==-1){const texts=node.data.split(_textMarkerRegex);node.data=texts[texts.length-1];for(let i=0;i<texts.length-1;i++){if(texts[i]){node.parentNode.insertBefore(createTextNode(texts[i]),node);}
const nodeToReplace=createElement('span');nodesToMark.push(nodeToReplace);binds.push({replaceNodeIndex:valueIndex++});node.parentNode.insertBefore(nodeToReplace,node);}}
if(node.nodeType===Node.TEXT_NODE&&(!node.previousSibling||node.previousSibling.nodeType===Node.ELEMENT_NODE)&&(!node.nextSibling||node.nextSibling.nodeType===Node.ELEMENT_NODE)&&/^\s*$/.test(node.data)){emptyTextNodes.push(node);}}
for(let i=0;i<nodesToMark.length;i++){nodesToMark[i].classList.add(_class(i));}
for(const emptyTextNode of emptyTextNodes){emptyTextNode.remove();}
return{template:template,binds:binds};}
static _render(template,values){const content=template.template.ownerDocument.importNode(template.template.content,true);const resultElement=(content.firstChild===content.lastChild?content.firstChild:content);const result=new Fragment(resultElement);const boundElements=[];for(let i=0;i<template.binds.length;i++){const className=_class(i);const element=(content.querySelector('.'+className));element.classList.remove(className);boundElements.push(element);}
for(let bindIndex=0;bindIndex<template.binds.length;bindIndex++){const bind=template.binds[bindIndex];const element=boundElements[bindIndex];if('elementId'in bind){result._elementsById.set((bind.elementId),element);}else if('replaceNodeIndex'in bind){const value=values[(bind.replaceNodeIndex)];element.parentNode.replaceChild(this._nodeForValue(value),element);}else if('attr'in bind){if(bind.attr.names.length===2&&bind.attr.values.length===1&&typeof values[bind.attr.index]==='function'){values[bind.attr.index].call(null,element);}else{let name=bind.attr.names[0];for(let i=1;i<bind.attr.names.length;i++){name+=values[bind.attr.index+i-1];name+=bind.attr.names[i];}
if(name){let value=bind.attr.values[0];for(let i=1;i<bind.attr.values.length;i++){value+=values[bind.attr.index+bind.attr.names.length-1+i-1];value+=bind.attr.values[i];}
element.setAttribute(name,value);}}}else{throw new Error('Unexpected bind');}}
return result;}
static _nodeForValue(value){if(value instanceof Node){return value;}
if(value instanceof Fragment){return value._element;}
if(Array.isArray(value)){const node=createDocumentFragment();for(const v of value){node.appendChild(this._nodeForValue(v));}
return node;}
return createTextNode(''+value);}}
export const _textMarker='{{template-text}}';const _textMarkerRegex=/{{template-text}}/;export const _attributeMarker=index=>'template-attribute'+index;const _attributeMarkerRegex=/template-attribute\d+/;const _class=index=>'template-class-'+index;const _templateCache=new Map();export const html=(strings,...vararg)=>{return Fragment.cached(strings,...vararg).element();};self.UI=self.UI||{};UI=UI||{};UI.Fragment=Fragment;UI.Fragment._textMarker=_textMarker;UI.Fragment._attributeMarker=_attributeMarker;UI.html=html;UI.Fragment._Template;UI.Fragment._Bind;export default class ForwardedInputEventHandler{constructor(){Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.KeyEventUnhandled,this._onKeyEventUnhandled,this);}
_onKeyEventUnhandled(event){const data=event.data;const type=(data.type);const key=(data.key);const keyCode=(data.keyCode);const modifiers=(data.modifiers);if(type!=='keydown'){return;}
UI.context.setFlavor(UI.ShortcutRegistry.ForwardedShortcut,UI.ShortcutRegistry.ForwardedShortcut.instance);UI.shortcutRegistry.handleKey(UI.KeyboardShortcut.makeKey(keyCode,modifiers),key);UI.context.setFlavor(UI.ShortcutRegistry.ForwardedShortcut,null);}}
self.UI=self.UI||{};UI=UI||{};UI.ForwardedInputEventHandler=ForwardedInputEventHandler;export default class FilterSuggestionBuilder{constructor(keys,valueSorter){this._keys=keys;this._valueSorter=valueSorter||((key,result)=>result.sort());this._valuesMap=new Map();}
completions(expression,prefix,force){if(!prefix&&!force){return Promise.resolve([]);}
const negative=prefix.startsWith('-');if(negative){prefix=prefix.substring(1);}
const modifier=negative?'-':'';const valueDelimiterIndex=prefix.indexOf(':');const suggestions=[];if(valueDelimiterIndex===-1){const matcher=new RegExp('^'+prefix.escapeForRegExp(),'i');for(const key of this._keys){if(matcher.test(key)){suggestions.push({text:modifier+key+':'});}}}else{const key=prefix.substring(0,valueDelimiterIndex).toLowerCase();const value=prefix.substring(valueDelimiterIndex+1);const matcher=new RegExp('^'+value.escapeForRegExp(),'i');const values=Array.from(this._valuesMap.get(key)||new Set());this._valueSorter(key,values);for(const item of values){if(matcher.test(item)&&(item!==value)){suggestions.push({text:modifier+key+':'+item});}}}
return Promise.resolve(suggestions);}
addItem(key,value){if(!value){return;}
if(!this._valuesMap.get(key)){this._valuesMap.set(key,(new Set()));}
this._valuesMap.get(key).add(value);}
clear(){this._valuesMap.clear();}}
self.UI=self.UI||{};UI=UI||{};UI.FilterSuggestionBuilder=FilterSuggestionBuilder;export default class FilterBar extends UI.HBox{constructor(name,visibleByDefault){super();this.registerRequiredCSS('ui/filter.css');this._enabled=true;this.element.classList.add('filter-bar');this._stateSetting=Common.settings.createSetting('filterBar-'+name+'-toggled',!!visibleByDefault);this._filterButton=new UI.ToolbarSettingToggle(this._stateSetting,'largeicon-filter',Common.UIString('Filter'));this._filters=[];this._updateFilterBar();this._stateSetting.addChangeListener(this._updateFilterBar.bind(this));}
filterButton(){return this._filterButton;}
addFilter(filter){this._filters.push(filter);this.element.appendChild(filter.element());filter.addEventListener(FilterUI.Events.FilterChanged,this._filterChanged,this);this._updateFilterButton();}
setEnabled(enabled){this._enabled=enabled;this._filterButton.setEnabled(enabled);this._updateFilterBar();}
forceShowFilterBar(){this._alwaysShowFilters=true;this._updateFilterBar();}
showOnce(){this._stateSetting.set(true);}
_filterChanged(event){this._updateFilterButton();}
wasShown(){super.wasShown();this._updateFilterBar();}
_updateFilterBar(){if(!this.parentWidget()||this._showingWidget){return;}
if(this.visible()){this._showingWidget=true;this.showWidget();this._showingWidget=false;}else{this.hideWidget();}}
focus(){for(let i=0;i<this._filters.length;++i){if(this._filters[i]instanceof TextFilterUI){const textFilterUI=(this._filters[i]);textFilterUI.focus();break;}}}
_updateFilterButton(){let isActive=false;for(const filter of this._filters){isActive=isActive||filter.isActive();}
this._filterButton.setDefaultWithRedColor(isActive);this._filterButton.setToggleWithRedColor(isActive);}
clear(){this.element.removeChildren();this._filters=[];this._updateFilterButton();}
setting(){return this._stateSetting;}
visible(){return this._alwaysShowFilters||(this._stateSetting.get()&&this._enabled);}}
export class FilterUI extends Common.EventTarget{isActive(){}
element(){}}
FilterUI.Events={FilterChanged:Symbol('FilterChanged')};export class TextFilterUI extends Common.Object{constructor(){super();this._filterElement=createElement('div');this._filterElement.className='filter-text-filter';this._filterInputElement=this._filterElement.createChild('span','filter-input-field');this._prompt=new UI.TextPrompt();this._prompt.initialize(this._completions.bind(this),' ');this._proxyElement=this._prompt.attach(this._filterInputElement);this._proxyElement.title=Common.UIString('e.g. /small[\\d]+/ url:a.com/b');this._prompt.setPlaceholder(Common.UIString('Filter'));this._prompt.addEventListener(UI.TextPrompt.Events.TextChanged,this._valueChanged.bind(this));this._suggestionProvider=null;}
_completions(expression,prefix,force){if(this._suggestionProvider){return this._suggestionProvider(expression,prefix,force);}
return Promise.resolve([]);}
isActive(){return!!this._prompt.text();}
element(){return this._filterElement;}
value(){return this._prompt.textWithCurrentSuggestion();}
setValue(value){this._prompt.setText(value);this._valueChanged();}
focus(){this._filterInputElement.focus();}
setSuggestionProvider(suggestionProvider){this._prompt.clearAutocomplete();this._suggestionProvider=suggestionProvider;}
_valueChanged(){this.dispatchEventToListeners(FilterUI.Events.FilterChanged,null);}}
export class NamedBitSetFilterUI extends Common.Object{constructor(items,setting){super();this._filtersElement=createElementWithClass('div','filter-bitset-filter');UI.ARIAUtils.markAsListBox(this._filtersElement);UI.ARIAUtils.markAsMultiSelectable(this._filtersElement);this._filtersElement.title=Common.UIString('%sClick to select multiple types',UI.KeyboardShortcut.shortcutToString('',UI.KeyboardShortcut.Modifiers.CtrlOrMeta));this._allowedTypes={};this._typeFilterElements=[];this._addBit(NamedBitSetFilterUI.ALL_TYPES,Common.UIString('All'));this._typeFilterElements[0].tabIndex=0;this._filtersElement.createChild('div','filter-bitset-filter-divider');for(let i=0;i<items.length;++i){this._addBit(items[i].name,items[i].label,items[i].title);}
if(setting){this._setting=setting;setting.addChangeListener(this._settingChanged.bind(this));this._settingChanged();}else{this._toggleTypeFilter(NamedBitSetFilterUI.ALL_TYPES,false);}}
reset(){this._toggleTypeFilter(NamedBitSetFilterUI.ALL_TYPES,false);}
isActive(){return!this._allowedTypes[NamedBitSetFilterUI.ALL_TYPES];}
element(){return this._filtersElement;}
accept(typeName){return!!this._allowedTypes[NamedBitSetFilterUI.ALL_TYPES]||!!this._allowedTypes[typeName];}
_settingChanged(){const allowedTypes=this._setting.get();this._allowedTypes={};for(const element of this._typeFilterElements){if(allowedTypes[element.typeName]){this._allowedTypes[element.typeName]=true;}}
this._update();}
_update(){if((Object.keys(this._allowedTypes).length===0)||this._allowedTypes[NamedBitSetFilterUI.ALL_TYPES]){this._allowedTypes={};this._allowedTypes[NamedBitSetFilterUI.ALL_TYPES]=true;}
for(const element of this._typeFilterElements){const typeName=element.typeName;const active=!!this._allowedTypes[typeName];element.classList.toggle('selected',active);UI.ARIAUtils.setSelected(element,active);}
this.dispatchEventToListeners(FilterUI.Events.FilterChanged,null);}
_addBit(name,label,title){const typeFilterElement=this._filtersElement.createChild('span',name);typeFilterElement.tabIndex=-1;typeFilterElement.typeName=name;typeFilterElement.createTextChild(label);UI.ARIAUtils.markAsOption(typeFilterElement);if(title){typeFilterElement.title=title;}
typeFilterElement.addEventListener('click',this._onTypeFilterClicked.bind(this),false);typeFilterElement.addEventListener('keydown',this._onTypeFilterKeydown.bind(this),false);this._typeFilterElements.push(typeFilterElement);}
_onTypeFilterClicked(e){let toggle;if(Host.isMac()){toggle=e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey;}else{toggle=e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey;}
this._toggleTypeFilter(e.target.typeName,toggle);}
_onTypeFilterKeydown(event){const element=(event.target);if(!element){return;}
if(event.key==='ArrowLeft'||event.key==='ArrowUp'){if(this._keyFocusNextBit(element,true)){event.consume(true);}}else if(event.key==='ArrowRight'||event.key==='ArrowDown'){if(this._keyFocusNextBit(element,false)){event.consume(true);}}else if(isEnterOrSpaceKey(event)){this._onTypeFilterClicked(event);}}
_keyFocusNextBit(target,selectPrevious){const index=this._typeFilterElements.indexOf(target);if(index===-1){return false;}
const nextIndex=selectPrevious?index-1:index+1;if(nextIndex<0||nextIndex>=this._typeFilterElements.length){return false;}
const nextElement=this._typeFilterElements[nextIndex];nextElement.tabIndex=0;target.tabIndex=-1;nextElement.focus();return true;}
_toggleTypeFilter(typeName,allowMultiSelect){if(allowMultiSelect&&typeName!==NamedBitSetFilterUI.ALL_TYPES){this._allowedTypes[NamedBitSetFilterUI.ALL_TYPES]=false;}else{this._allowedTypes={};}
this._allowedTypes[typeName]=!this._allowedTypes[typeName];if(this._setting){this._setting.set(this._allowedTypes);}else{this._update();}}}
NamedBitSetFilterUI.ALL_TYPES='all';export class CheckboxFilterUI extends Common.Object{constructor(className,title,activeWhenChecked,setting){super();this._filterElement=createElementWithClass('div','filter-checkbox-filter');this._activeWhenChecked=!!activeWhenChecked;this._label=UI.CheckboxLabel.create(title);this._filterElement.appendChild(this._label);this._checkboxElement=this._label.checkboxElement;if(setting){UI.SettingsUI.bindCheckbox(this._checkboxElement,setting);}else{this._checkboxElement.checked=true;}
this._checkboxElement.addEventListener('change',this._fireUpdated.bind(this),false);}
isActive(){return this._activeWhenChecked===this._checkboxElement.checked;}
checked(){return this._checkboxElement.checked;}
setChecked(checked){this._checkboxElement.checked=checked;}
element(){return this._filterElement;}
labelElement(){return this._label;}
_fireUpdated(){this.dispatchEventToListeners(FilterUI.Events.FilterChanged,null);}
setColor(backgroundColor,borderColor){this._label.backgroundColor=backgroundColor;this._label.borderColor=borderColor;}}
self.UI=self.UI||{};UI=UI||{};UI.FilterBar=FilterBar;UI.FilterUI=FilterUI;UI.TextFilterUI=TextFilterUI;UI.NamedBitSetFilterUI=NamedBitSetFilterUI;UI.CheckboxFilterUI=CheckboxFilterUI;UI.NamedBitSetFilterUI.Item;export default class EmptyWidget extends UI.VBox{constructor(text){super();this.registerRequiredCSS('ui/emptyWidget.css');this.element.classList.add('empty-view-scroller');this._contentElement=this.element.createChild('div','empty-view');this._textElement=this._contentElement.createChild('div','empty-bold-text');this._textElement.textContent=text;}
appendParagraph(){return this._contentElement.createChild('p');}
appendLink(link){return this._contentElement.appendChild(UI.XLink.create(link,'Learn more'));}
set text(text){this._textElement.textContent=text;}}
self.UI=self.UI||{};UI=UI||{};UI.EmptyWidget=EmptyWidget;export default class DropTarget{constructor(element,transferTypes,messageText,handleDrop){element.addEventListener('dragenter',this._onDragEnter.bind(this),true);element.addEventListener('dragover',this._onDragOver.bind(this),true);this._element=element;this._transferTypes=transferTypes;this._messageText=messageText;this._handleDrop=handleDrop;this._enabled=true;}
setEnabled(enabled){this._enabled=enabled;}
_onDragEnter(event){if(this._enabled&&this._hasMatchingType(event)){event.consume(true);}}
_hasMatchingType(event){for(const transferType of this._transferTypes){const found=Array.from(event.dataTransfer.items).find(item=>{return transferType.kind===item.kind&&!!transferType.type.exec(item.type);});if(found){return true;}}
return false;}
_onDragOver(event){if(!this._enabled||!this._hasMatchingType(event)){return;}
event.dataTransfer.dropEffect='copy';event.consume(true);if(this._dragMaskElement){return;}
this._dragMaskElement=this._element.createChild('div','');const shadowRoot=UI.createShadowRootWithCoreStyles(this._dragMaskElement,'ui/dropTarget.css');shadowRoot.createChild('div','drop-target-message').textContent=this._messageText;this._dragMaskElement.addEventListener('drop',this._onDrop.bind(this),true);this._dragMaskElement.addEventListener('dragleave',this._onDragLeave.bind(this),true);}
_onDrop(event){event.consume(true);this._removeMask();if(this._enabled){this._handleDrop(event.dataTransfer);}}
_onDragLeave(event){event.consume(true);this._removeMask();}
_removeMask(){this._dragMaskElement.remove();delete this._dragMaskElement;}}
export const Type={URI:{kind:'string',type:/text\/uri-list/},Folder:{kind:'file',type:/$^/},File:{kind:'file',type:/.*/},WebFile:{kind:'file',type:/[\w]+/},ImageFile:{kind:'file',type:/image\/.*/},};self.UI=self.UI||{};UI=UI||{};UI.DropTarget=DropTarget;UI.DropTarget.Type=Type;export default class Dialog extends UI.GlassPane{constructor(){super();this.registerRequiredCSS('ui/dialog.css');this.contentElement.tabIndex=0;this.contentElement.addEventListener('focus',()=>this.widget().focus(),false);this.widget().setDefaultFocusedElement(this.contentElement);this.setPointerEventsBehavior(UI.GlassPane.PointerEventsBehavior.BlockedByGlassPane);this.setOutsideClickCallback(event=>{this.hide();event.consume(true);});UI.ARIAUtils.markAsModalDialog(this.contentElement);this._tabIndexBehavior=OutsideTabIndexBehavior.DisableAllOutsideTabIndex;this._tabIndexMap=new Map();this._focusRestorer=null;this._closeOnEscape=true;this._targetDocument;this._targetDocumentKeyDownHandler=this._onKeyDown.bind(this);}
static hasInstance(){return!!UI.Dialog._instance;}
show(where){const document=(where instanceof Document?where:(where||UI.inspectorView.element).ownerDocument);this._targetDocument=document;this._targetDocument.addEventListener('keydown',this._targetDocumentKeyDownHandler,true);if(UI.Dialog._instance){UI.Dialog._instance.hide();}
UI.Dialog._instance=this;this._disableTabIndexOnElements(document);super.show(document);this._focusRestorer=new UI.WidgetFocusRestorer(this.widget());}
hide(){this._focusRestorer.restore();super.hide();if(this._targetDocument){this._targetDocument.removeEventListener('keydown',this._targetDocumentKeyDownHandler,true);}
this._restoreTabIndexOnElements();delete UI.Dialog._instance;}
setCloseOnEscape(close){this._closeOnEscape=close;}
addCloseButton(){const closeButton=this.contentElement.createChild('div','dialog-close-button','dt-close-button');closeButton.gray=true;closeButton.addEventListener('click',()=>this.hide(),false);}
setOutsideTabIndexBehavior(tabIndexBehavior){this._tabIndexBehavior=tabIndexBehavior;}
_disableTabIndexOnElements(document){if(this._tabIndexBehavior===OutsideTabIndexBehavior.PreserveTabIndex){return;}
let exclusionSet=(null);if(this._tabIndexBehavior===OutsideTabIndexBehavior.PreserveMainViewTabIndex){exclusionSet=this._getMainWidgetTabIndexElements(UI.inspectorView.ownerSplit());}
this._tabIndexMap.clear();for(let node=document;node;node=node.traverseNextNode(document)){if(node instanceof HTMLElement){const element=(node);const tabIndex=element.tabIndex;if(tabIndex>=0&&(!exclusionSet||!exclusionSet.has(element))){this._tabIndexMap.set(element,tabIndex);element.tabIndex=-1;}}}}
_getMainWidgetTabIndexElements(splitWidget){const elementSet=(new Set());if(!splitWidget){return elementSet;}
const mainWidget=splitWidget.mainWidget();if(!mainWidget||!mainWidget.element){return elementSet;}
for(let node=mainWidget.element;node;node=node.traverseNextNode(mainWidget.element)){if(!(node instanceof HTMLElement)){continue;}
const element=(node);const tabIndex=element.tabIndex;if(tabIndex<0){continue;}
elementSet.add(element);}
return elementSet;}
_restoreTabIndexOnElements(){for(const element of this._tabIndexMap.keys()){element.tabIndex=(this._tabIndexMap.get(element));}
this._tabIndexMap.clear();}
_onKeyDown(event){if(this._closeOnEscape&&event.keyCode===UI.KeyboardShortcut.Keys.Esc.code&&UI.KeyboardShortcut.hasNoModifiers(event)){event.consume(true);this.hide();}}}
export const OutsideTabIndexBehavior={DisableAllOutsideTabIndex:Symbol('DisableAllTabIndex'),PreserveMainViewTabIndex:Symbol('PreserveMainViewTabIndex'),PreserveTabIndex:Symbol('PreserveTabIndex')};self.UI=self.UI||{};UI=UI||{};UI.Dialog=Dialog;UI.Dialog.OutsideTabIndexBehavior=OutsideTabIndexBehavior;export class Item{constructor(contextMenu,type,label,disabled,checked){this._type=type;this._label=label;this._disabled=disabled;this._checked=checked;this._contextMenu=contextMenu;if(type==='item'||type==='checkbox'){this._id=contextMenu?contextMenu._nextId():0;}}
id(){return this._id;}
type(){return this._type;}
isEnabled(){return!this._disabled;}
setEnabled(enabled){this._disabled=!enabled;}
_buildDescriptor(){switch(this._type){case'item':const result={type:'item',id:this._id,label:this._label,enabled:!this._disabled};if(this._customElement){result.element=this._customElement;}
if(this._shortcut){result.shortcut=this._shortcut;}
return result;case'separator':return{type:'separator'};case'checkbox':return{type:'checkbox',id:this._id,label:this._label,checked:!!this._checked,enabled:!this._disabled};}
throw new Error('Invalid item type:'+this._type);}
setShortcut(shortcut){this._shortcut=shortcut;}}
export class Section{constructor(contextMenu){this._contextMenu=contextMenu;this._items=[];}
appendItem(label,handler,disabled){const item=new Item(this._contextMenu,'item',label,disabled);this._items.push(item);this._contextMenu._setHandler(item.id(),handler);return item;}
appendCustomItem(element){const item=new Item(this._contextMenu,'item','<custom>');item._customElement=element;this._items.push(item);return item;}
appendSeparator(){const item=new UI.ContextMenuItem(this._contextMenu,'separator');this._items.push(item);return item;}
appendAction(actionId,label,optional){const action=UI.actionRegistry.action(actionId);if(!action){if(!optional){console.error(`Action ${actionId} was not defined`);}
return;}
if(!label){label=action.title();}
const result=this.appendItem(label,action.execute.bind(action));const shortcut=UI.shortcutRegistry.shortcutTitleForAction(actionId);if(shortcut){result.setShortcut(shortcut);}}
appendSubMenuItem(label,disabled){const item=new SubMenu(this._contextMenu,label,disabled);item._init();this._items.push(item);return item;}
appendCheckboxItem(label,handler,checked,disabled){const item=new Item(this._contextMenu,'checkbox',label,disabled,checked);this._items.push(item);this._contextMenu._setHandler(item.id(),handler);return item;}}
class SubMenu extends Item{constructor(contextMenu,label,disabled){super(contextMenu,'subMenu',label,disabled);this._sections=new Map();this._sectionList=[];}
_init(){_groupWeights.forEach(name=>this.section(name));}
section(name){let section=name?this._sections.get(name):null;if(!section){section=new Section(this._contextMenu);if(name){this._sections.set(name,section);this._sectionList.push(section);}else{this._sectionList.splice(ContextMenu._groupWeights.indexOf('default'),0,section);}}
return section;}
headerSection(){return this.section('header');}
newSection(){return this.section('new');}
revealSection(){return this.section('reveal');}
clipboardSection(){return this.section('clipboard');}
editSection(){return this.section('edit');}
debugSection(){return this.section('debug');}
viewSection(){return this.section('view');}
defaultSection(){return this.section('default');}
saveSection(){return this.section('save');}
footerSection(){return this.section('footer');}
_buildDescriptor(){const result={type:'subMenu',label:this._label,enabled:!this._disabled,subItems:[]};const nonEmptySections=this._sectionList.filter(section=>!!section._items.length);for(const section of nonEmptySections){for(const item of section._items){result.subItems.push(item._buildDescriptor());}
if(section!==nonEmptySections.peekLast()){result.subItems.push({type:'separator'});}}
return result;}
appendItemsAtLocation(location){for(const extension of self.runtime.extensions('context-menu-item')){const itemLocation=extension.descriptor()['location']||'';if(!itemLocation.startsWith(location+'/')){continue;}
const section=itemLocation.substr(location.length+1);if(!section||section.includes('/')){continue;}
this.section(section).appendAction(extension.descriptor()['actionId']);}}}
Item._uniqueSectionName=0;export default class ContextMenu extends SubMenu{constructor(event,useSoftMenu,x,y){super(null);this._contextMenu=this;super._init();this._defaultSection=this.defaultSection();this._pendingPromises=[];this._pendingTargets=[];this._event=event;this._useSoftMenu=!!useSoftMenu;this._x=x===undefined?event.x:x;this._y=y===undefined?event.y:y;this._handlers={};this._id=0;const target=event.deepElementFromPoint();if(target){this.appendApplicableItems((target));}}
static initialize(){Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.SetUseSoftMenu,setUseSoftMenu);function setUseSoftMenu(event){ContextMenu._useSoftMenu=(event.data);}}
static installHandler(doc){doc.body.addEventListener('contextmenu',handler,false);function handler(event){const contextMenu=new ContextMenu(event);contextMenu.show();}}
_nextId(){return this._id++;}
show(){Promise.all(this._pendingPromises).then(populate.bind(this)).then(this._innerShow.bind(this));ContextMenu._pendingMenu=this;function populate(appendCallResults){if(ContextMenu._pendingMenu!==this){return;}
delete ContextMenu._pendingMenu;for(let i=0;i<appendCallResults.length;++i){const providers=appendCallResults[i];const target=this._pendingTargets[i];for(let j=0;j<providers.length;++j){const provider=(providers[j]);provider.appendApplicableItems(this._event,this,target);}}
this._pendingPromises=[];this._pendingTargets=[];}
this._event.consume(true);}
discard(){if(this._softMenu){this._softMenu.discard();}}
_innerShow(){const menuObject=this._buildMenuDescriptors();if(this._useSoftMenu||ContextMenu._useSoftMenu||Host.InspectorFrontendHost.isHostedMode()){this._softMenu=new UI.SoftContextMenu(menuObject,this._itemSelected.bind(this));this._softMenu.show(this._event.target.ownerDocument,new AnchorBox(this._x,this._y,0,0));}else{Host.InspectorFrontendHost.showContextMenuAtPoint(this._x,this._y,menuObject,this._event.target.ownerDocument);function listenToEvents(){Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.ContextMenuCleared,this._menuCleared,this);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.ContextMenuItemSelected,this._onItemSelected,this);}
setImmediate(listenToEvents.bind(this));}}
setX(x){this._x=x;}
setY(y){this._y=y;}
_setHandler(id,handler){if(handler){this._handlers[id]=handler;}}
_buildMenuDescriptors(){return(super._buildDescriptor().subItems);}
_onItemSelected(event){this._itemSelected((event.data));}
_itemSelected(id){if(this._handlers[id]){this._handlers[id].call(this);}
this._menuCleared();}
_menuCleared(){Host.InspectorFrontendHost.events.removeEventListener(Host.InspectorFrontendHostAPI.Events.ContextMenuCleared,this._menuCleared,this);Host.InspectorFrontendHost.events.removeEventListener(Host.InspectorFrontendHostAPI.Events.ContextMenuItemSelected,this._onItemSelected,this);}
containsTarget(target){return this._pendingTargets.indexOf(target)>=0;}
appendApplicableItems(target){this._pendingPromises.push(self.runtime.allInstances(Provider,target));this._pendingTargets.push(target);}}
export const _groupWeights=['header','new','reveal','edit','clipboard','debug','view','default','save','footer'];export class Provider{appendApplicableItems(event,contextMenu,target){}}
self.UI=self.UI||{};UI=UI||{};UI.ContextMenu=ContextMenu;ContextMenu._groupWeights=_groupWeights;UI.ContextMenuItem=Item;UI.ContextMenuSection=Section;UI.ContextMenu.Provider=Provider;export default class Context{constructor(){this._flavors=new Map();this._eventDispatchers=new Map();}
setFlavor(flavorType,flavorValue){const value=this._flavors.get(flavorType)||null;if(value===flavorValue){return;}
if(flavorValue){this._flavors.set(flavorType,flavorValue);}else{this._flavors.remove(flavorType);}
this._dispatchFlavorChange(flavorType,flavorValue);}
_dispatchFlavorChange(flavorType,flavorValue){for(const extension of self.runtime.extensions(UI.ContextFlavorListener)){if(extension.hasContextType(flavorType)){extension.instance().then(instance=>(instance).flavorChanged(flavorValue));}}
const dispatcher=this._eventDispatchers.get(flavorType);if(!dispatcher){return;}
dispatcher.dispatchEventToListeners(Events.FlavorChanged,flavorValue);}
addFlavorChangeListener(flavorType,listener,thisObject){let dispatcher=this._eventDispatchers.get(flavorType);if(!dispatcher){dispatcher=new Common.Object();this._eventDispatchers.set(flavorType,dispatcher);}
dispatcher.addEventListener(Events.FlavorChanged,listener,thisObject);}
removeFlavorChangeListener(flavorType,listener,thisObject){const dispatcher=this._eventDispatchers.get(flavorType);if(!dispatcher){return;}
dispatcher.removeEventListener(Events.FlavorChanged,listener,thisObject);if(!dispatcher.hasEventListeners(Events.FlavorChanged)){this._eventDispatchers.remove(flavorType);}}
flavor(flavorType){return this._flavors.get(flavorType)||null;}
flavors(){return new Set(this._flavors.keys());}
applicableExtensions(extensions){const targetExtensionSet=new Set();const availableFlavors=this.flavors();extensions.forEach(function(extension){if(self.runtime.isExtensionApplicableToContextTypes(extension,availableFlavors)){targetExtensionSet.add(extension);}});return targetExtensionSet;}}
const Events={FlavorChanged:Symbol('FlavorChanged')};self.UI=self.UI||{};UI=UI||{};UI.Context=Context;UI.context=new Context();let _id=0;export function nextId(prefix){return(prefix||'')+ ++_id;}
export function bindLabelToControl(label,control){const controlId=nextId('labelledControl');control.id=controlId;label.setAttribute('for',controlId);}
export function markAsAlert(element){element.setAttribute('role','alert');element.setAttribute('aria-live','polite');}
export function markAsButton(element){element.setAttribute('role','button');}
export function markAsCheckbox(element){element.setAttribute('role','checkbox');}
export function markAsCombobox(element){element.setAttribute('role','combobox');}
export function markAsModalDialog(element){element.setAttribute('role','dialog');element.setAttribute('aria-modal','true');}
export function markAsGroup(element){element.setAttribute('role','group');}
export function markAsLink(element){element.setAttribute('role','link');}
export function markAsMenuButton(element){markAsButton(element);element.setAttribute('aria-haspopup',true);}
export function markAsProgressBar(element,min=0,max=100){element.setAttribute('role','progressbar');element.setAttribute('aria-valuemin',min);element.setAttribute('aria-valuemax',max);}
export function markAsTab(element){element.setAttribute('role','tab');}
export function markAsTabpanel(element){element.setAttribute('role','tabpanel');}
export function markAsTree(element){element.setAttribute('role','tree');}
export function markAsTreeitem(element){element.setAttribute('role','treeitem');}
export function markAsTextBox(element){element.setAttribute('role','textbox');}
export function markAsMenu(element){element.setAttribute('role','menu');}
export function markAsMenuItem(element){element.setAttribute('role','menuitem');}
export function markAsMenuItemSubMenu(element){markAsMenuItem(element);element.setAttribute('aria-haspopup',true);}
export function markAsList(element){element.setAttribute('role','list');}
export function markAsListitem(element){element.setAttribute('role','listitem');}
export function markAsListBox(element){element.setAttribute('role','listbox');}
export function markAsMultiSelectable(element){element.setAttribute('aria-multiselectable','true');}
export function markAsOption(element){element.setAttribute('role','option');}
export function markAsRadioGroup(element){element.setAttribute('role','radiogroup');}
export function markAsHidden(element){element.setAttribute('aria-hidden','true');}
export function markAsSlider(element,min=0,max=100){element.setAttribute('role','slider');element.setAttribute('aria-valuemin',String(min));element.setAttribute('aria-valuemax',String(max));}
export function markAsHeading(element,level){element.setAttribute('role','heading');element.setAttribute('aria-level',level);}
export function markAsPoliteLiveRegion(element){element.setAttribute('aria-live','polite');}
export function setPlaceholder(element,placeholder){if(placeholder){element.setAttribute('aria-placeholder',placeholder);}else{element.removeAttribute('aria-placeholder');}}
export function markAsPresentation(element){element.setAttribute('role','presentation');}
export function markAsStatus(element){element.setAttribute('role','status');}
export function ensureId(element){if(!element.id){element.id=nextId('ariaElement');}}
export function setAriaValueText(element,valueText){element.setAttribute('aria-valuetext',valueText);}
export function setAriaValueNow(element,value){element.setAttribute('aria-valuenow',value);}
export function setAriaValueMinMax(element,min,max){element.setAttribute('aria-valuemin',min);element.setAttribute('aria-valuemax',max);}
export function setControls(element,controlledElement){if(!controlledElement){element.removeAttribute('aria-controls');return;}
ensureId(controlledElement);element.setAttribute('aria-controls',controlledElement.id);}
export function setChecked(element,value){element.setAttribute('aria-checked',!!value);}
export function setCheckboxAsIndeterminate(element){element.setAttribute('aria-checked','mixed');}
export function setExpanded(element,value){element.setAttribute('aria-expanded',!!value);}
export function unsetExpandable(element){element.removeAttribute('aria-expanded');}
export function setHidden(element,value){element.setAttribute('aria-hidden',!!value);}
export const AutocompleteInteractionModel={inline:'inline',list:'list',both:'both',none:'none',};export function setAutocomplete(element,interactionModel=AutocompleteInteractionModel.none){element.setAttribute('aria-autocomplete',interactionModel);}
export function setSelected(element,value){element.setAttribute('aria-selected',!!value);}
export function setInvalid(element,value){if(value){element.setAttribute('aria-invalid',value);}else{element.removeAttribute('aria-invalid');}}
export function setPressed(element,value){element.setAttribute('aria-pressed',!!value);}
export function setValueNow(element,value){element.setAttribute('aria-valuenow',value);}
export function setValueText(element,value){element.setAttribute('aria-valuetext',value);}
export function setProgressBarValue(element,valueNow,valueText){element.setAttribute('aria-valuenow',valueNow);if(valueText){element.setAttribute('aria-valuetext',valueText);}}
export function setAccessibleName(element,name){element.setAttribute('aria-label',name);}
const _descriptionMap=new WeakMap();export function setDescription(element,description){if(_descriptionMap.has(element)){_descriptionMap.get(element).remove();}
element.removeAttribute('data-aria-utils-animation-hack');if(!description){_descriptionMap.delete(element);element.removeAttribute('aria-describedby');return;}
const descriptionElement=createElement('span');descriptionElement.textContent=description;descriptionElement.style.display='none';ensureId(descriptionElement);element.setAttribute('aria-describedby',descriptionElement.id);_descriptionMap.set(element,descriptionElement);const contentfulVoidTags=new Set(['INPUT','IMG']);if(!contentfulVoidTags.has(element.tagName)){element.appendChild(descriptionElement);return;}
const inserted=element.insertAdjacentElement('afterend',descriptionElement);if(inserted){return;}
element.setAttribute('data-aria-utils-animation-hack','sorry');element.addEventListener('animationend',()=>{if(_descriptionMap.get(element)!==descriptionElement){return;}
element.removeAttribute('data-aria-utils-animation-hack');element.insertAdjacentElement('afterend',descriptionElement);},{once:true});}
export function setActiveDescendant(element,activedescendant){if(!activedescendant){element.removeAttribute('aria-activedescendant');return;}
console.assert(element.hasSameShadowRoot(activedescendant),'elements are not in the same shadow dom');ensureId(activedescendant);element.setAttribute('aria-activedescendant',activedescendant.id);}
const AlertElementSymbol=Symbol('AlertElementSybmol');export function alert(message,element){const document=element.ownerDocument;if(!document[AlertElementSymbol]){const alertElement=document.body.createChild('div');alertElement.style.position='absolute';alertElement.style.left='-999em';alertElement.style.width='100em';alertElement.style.overflow='hidden';alertElement.setAttribute('role','alert');alertElement.setAttribute('aria-atomic','true');document[AlertElementSymbol]=alertElement;}
document[AlertElementSymbol].textContent=message.trimEndWithMaxLength(10000);}
self.UI=self.UI||{};UI=UI||{};self.UI.ARIAUtils={nextId,bindLabelToControl,markAsAlert,markAsButton,markAsCheckbox,markAsCombobox,markAsModalDialog,markAsGroup,markAsLink,markAsMenuButton,markAsProgressBar,markAsTab,markAsTabpanel,markAsTree,markAsTreeitem,markAsTextBox,markAsMenu,markAsMenuItem,markAsMenuItemSubMenu,markAsList,markAsListitem,markAsListBox,markAsMultiSelectable,markAsOption,markAsRadioGroup,markAsHidden,markAsSlider,markAsHeading,markAsPoliteLiveRegion,setPlaceholder,markAsPresentation,markAsStatus,ensureId,setAriaValueText,setAriaValueNow,setAriaValueMinMax,setControls,setChecked,setCheckboxAsIndeterminate,setExpanded,unsetExpandable,setHidden,AutocompleteInteractionModel,setAutocomplete,setSelected,setInvalid,setPressed,setProgressBarValue,setValueNow,setValueText,setAccessibleName,setDescription,setActiveDescendant,alert,};export default class ActionRegistry{constructor(){this._actionsById=new Map();this._registerActions();}
_registerActions(){self.runtime.extensions('action').forEach(registerExtension,this);function registerExtension(extension){if(!extension.canInstantiate()){return;}
const actionId=extension.descriptor()['actionId'];console.assert(actionId);console.assert(!this._actionsById.get(actionId));const action=new UI.Action(extension);if(!action.category()||action.title()){this._actionsById.set(actionId,action);}else{console.error(`Category actions require a title for command menu: ${actionId}`);}}}
availableActions(){return this.applicableActions(this._actionsById.keysArray(),UI.context);}
applicableActions(actionIds,context){const extensions=[];actionIds.forEach(function(actionId){const action=this._actionsById.get(actionId);if(action){extensions.push(action.extension());}},this);return context.applicableExtensions(extensions).valuesArray().map(extensionToAction.bind(this));function extensionToAction(extension){return(this.action(extension.descriptor()['actionId']));}}
action(actionId){return this._actionsById.get(actionId)||null;}}
self.UI=self.UI||{};UI=UI||{};UI.ActionRegistry=ActionRegistry;UI.actionRegistry;export default class Action extends Common.Object{constructor(extension){super();this._extension=extension;this._enabled=true;this._toggled=false;}
id(){return this._extension.descriptor()['actionId'];}
extension(){return this._extension;}
execute(){return this._extension.instance().then(handleAction.bind(this));function handleAction(actionDelegate){const actionId=this._extension.descriptor()['actionId'];const delegate=(actionDelegate);return delegate.handleAction(UI.context,actionId);}}
icon(){return this._extension.descriptor()['iconClass']||'';}
toggledIcon(){return this._extension.descriptor()['toggledIconClass']||'';}
toggleWithRedColor(){return!!this._extension.descriptor()['toggleWithRedColor'];}
setEnabled(enabled){if(this._enabled===enabled){return;}
this._enabled=enabled;this.dispatchEventToListeners(Events.Enabled,enabled);}
enabled(){return this._enabled;}
category(){return ls(this._extension.descriptor()['category']||'');}
tags(){return this._extension.descriptor()['tags']||'';}
toggleable(){return!!this._extension.descriptor()['toggleable'];}
title(){let title=this._extension.title()||'';const options=this._extension.descriptor()['options'];if(options){for(const pair of options){if(pair['value']!==this._toggled){title=ls(pair['title']);}}}
return title;}
toggled(){return this._toggled;}
setToggled(toggled){console.assert(this.toggleable(),'Shouldn\'t be toggling an untoggleable action',this.id());if(this._toggled===toggled){return;}
this._toggled=toggled;this.dispatchEventToListeners(Events.Toggled,toggled);}}
const Events={Enabled:Symbol('Enabled'),Toggled:Symbol('Toggled')};self.UI=self.UI||{};UI=UI||{};UI.Action=Action;UI.Action.Events=Events;export default class ActionDelegate{handleAction(context,actionId){}}
self.UI=self.UI||{};UI=UI||{};UI.ActionDelegate=ActionDelegate;export default class ContextFlavorListener{flavorChanged(object){}}
self.UI=self.UI||{};UI=UI||{};UI.ContextFlavorListener=ContextFlavorListener;import'../platform/platform.js';import*as App from'./App.js';import*as AppProvider from'./AppProvider.js';import*as CharacterIdMap from'./CharacterIdMap.js';import*as Color from'./Color.js';import*as Console from'./Console.js';import*as ContentProvider from'./ContentProvider.js';import*as EventTarget from'./EventTarget.js';import*as JavaScriptMetaData from'./JavaScriptMetaData.js';import*as Linkifier from'./Linkifier.js';import*as ObjectWrapper from'./Object.js';import*as ParsedURL from'./ParsedURL.js';import*as Progress from'./Progress.js';import*as QueryParamHandler from'./QueryParamHandler.js';import*as ResourceType from'./ResourceType.js';import*as Revealer from'./Revealer.js';import*as Runnable from'./Runnable.js';import*as SegmentedRange from'./SegmentedRange.js';import*as Settings from'./Settings.js';import*as StaticContentProvider from'./StaticContentProvider.js';import*as StringOutputStream from'./StringOutputStream.js';import*as TextDictionary from'./TextDictionary.js';import*as Throttler from'./Throttler.js';import*as Trie from'./Trie.js';import*as UIString from'./UIString.js';import*as Worker from'./Worker.js';export{App,AppProvider,CharacterIdMap,Color,Console,ContentProvider,EventTarget,JavaScriptMetaData,Linkifier,ObjectWrapper,ParsedURL,Progress,QueryParamHandler,ResourceType,Revealer,Runnable,SegmentedRange,Settings,StaticContentProvider,StringOutputStream,TextDictionary,Throttler,Trie,UIString,Worker,};import'../platform/platform.js';import*as AppModule from'./App.js';import*as AppProviderModule from'./AppProvider.js';import*as CharacterIdMapModule from'./CharacterIdMap.js';import*as ColorModule from'./Color.js';import*as ConsoleModule from'./Console.js';import*as ContentProviderModule from'./ContentProvider.js';import*as EventTargetModule from'./EventTarget.js';import*as JavaScriptMetaDataModule from'./JavaScriptMetaData.js';import*as LinkifierModule from'./Linkifier.js';import*as ObjectModule from'./Object.js';import*as ParsedURLModule from'./ParsedURL.js';import*as ProgressModule from'./Progress.js';import*as QueryParamHandlerModule from'./QueryParamHandler.js';import*as ResourceTypeModule from'./ResourceType.js';import*as RevealerModule from'./Revealer.js';import*as RunnableModule from'./Runnable.js';import*as SegmentedRangeModule from'./SegmentedRange.js';import*as SettingsModule from'./Settings.js';import*as StaticContentProviderModule from'./StaticContentProvider.js';import*as StringOutputStreamModule from'./StringOutputStream.js';import*as TextDictionaryModule from'./TextDictionary.js';import*as ThrottlerModule from'./Throttler.js';import*as TrieModule from'./Trie.js';import*as UIStringModule from'./UIString.js';import*as WorkerModule from'./Worker.js';const App=Object.assign(AppModule.App,AppModule);const AppProvider=Object.assign(AppProviderModule.AppProvider,AppProviderModule);const CharacterIdMap=Object.assign(CharacterIdMapModule.CharacterIdMap,CharacterIdMapModule);const Color=Object.assign(ColorModule.Color,ColorModule);const Console=Object.assign(ConsoleModule.Console,ConsoleModule);const ContentProvider=Object.assign(ContentProviderModule.ContentProvider,ContentProviderModule);const EventTarget=Object.assign(EventTargetModule.EventTarget,EventTargetModule);const JavaScriptMetaData=Object.assign(JavaScriptMetaDataModule.JavaScriptMetaData,JavaScriptMetaDataModule);const Linkifier=Object.assign(LinkifierModule.Linkifier,LinkifierModule);const ObjectWrapper=Object.assign(ObjectModule.ObjectWrapper,ObjectModule);const ParsedURL=Object.assign(ParsedURLModule.ParsedURL,ParsedURLModule);const Progress=Object.assign(ProgressModule.Progress,ProgressModule);const QueryParamHandler=Object.assign(QueryParamHandlerModule.QueryParamHandler,QueryParamHandlerModule);const ResourceType=Object.assign(ResourceTypeModule.ResourceType,ResourceTypeModule);const Revealer=Object.assign(RevealerModule.Revealer,RevealerModule);const Runnable=Object.assign(RunnableModule.Runnable,RunnableModule);const SegmentedRange=Object.assign(SegmentedRangeModule.SegmentedRange,SegmentedRangeModule);const Settings=Object.assign(SettingsModule.Settings,SettingsModule);const StaticContentProvider=Object.assign(StaticContentProviderModule.StaticContentProvider,StaticContentProviderModule);const StringOutputStream=Object.assign(StringOutputStreamModule.StringOutputStream,StringOutputStreamModule);const TextDictionary=Object.assign(TextDictionaryModule.TextDictionary,TextDictionaryModule);const Throttler=Object.assign(ThrottlerModule.Throttler,ThrottlerModule);const Trie=Object.assign(TrieModule.Trie,TrieModule);const UIString=Object.assign(UIStringModule.UIString,UIStringModule);const Worker=Object.assign(WorkerModule.WorkerWrapper,WorkerModule);export{App,AppProvider,CharacterIdMap,Color,Console,ContentProvider,EventTarget,JavaScriptMetaData,Linkifier,ObjectWrapper,ParsedURL,Progress,QueryParamHandler,ResourceType,Revealer,Runnable,SegmentedRange,Settings,StaticContentProvider,StringOutputStream,TextDictionary,Throttler,Trie,UIString,Worker,};export class App{presentUI(document){}}
self.Common=self.Common||{};Common=Common||{};Common.App=App;import{App}from'./App.js';export class AppProvider{createApp(){}}
self.Common=self.Common||{};Common=Common||{};Common.AppProvider=AppProvider;export class CharacterIdMap{constructor(){this._elementToCharacter=new Map();this._characterToElement=new Map();this._charCode=33;}
toChar(object){let character=this._elementToCharacter.get(object);if(!character){if(this._charCode>=0xFFFF){throw new Error('CharacterIdMap ran out of capacity!');}
character=String.fromCharCode(this._charCode++);this._elementToCharacter.set(object,character);this._characterToElement.set(character,object);}
return character;}
fromChar(character){const object=this._characterToElement.get(character);if(object===undefined){return null;}
return object;}}
self.Common=self.Common||{};Common=Common||{};Common.CharacterIdMap=CharacterIdMap;export class Color{constructor(rgba,format,originalText){this._rgba=rgba;this._originalText=originalText||null;this._originalTextIsValid=!!this._originalText;this._format=format;if(typeof this._rgba[3]==='undefined'){this._rgba[3]=1;}
for(let i=0;i<4;++i){if(this._rgba[i]<0){this._rgba[i]=0;this._originalTextIsValid=false;}
if(this._rgba[i]>1){this._rgba[i]=1;this._originalTextIsValid=false;}}}
static parse(text){const value=text.toLowerCase().replace(/\s+/g,'');const simple=/^(?:#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(\w+))$/i;let match=value.match(simple);if(match){if(match[1]){let hex=match[1].toLowerCase();let format;if(hex.length===3){format=Format.ShortHEX;hex=hex.charAt(0)+hex.charAt(0)+hex.charAt(1)+hex.charAt(1)+hex.charAt(2)+hex.charAt(2);}else if(hex.length===4){format=Format.ShortHEXA;hex=hex.charAt(0)+hex.charAt(0)+hex.charAt(1)+hex.charAt(1)+hex.charAt(2)+hex.charAt(2)+
hex.charAt(3)+hex.charAt(3);}else if(hex.length===6){format=Format.HEX;}else{format=Format.HEXA;}
const r=parseInt(hex.substring(0,2),16);const g=parseInt(hex.substring(2,4),16);const b=parseInt(hex.substring(4,6),16);let a=1;if(hex.length===8){a=parseInt(hex.substring(6,8),16)/255;}
return new Color([r/255,g/255,b/255,a],format,text);}
if(match[2]){const nickname=match[2].toLowerCase();if(nickname in Nicknames){const rgba=Nicknames[nickname];const color=Color.fromRGBA(rgba);color._format=Format.Nickname;color._originalText=text;return color;}
return null;}
return null;}
match=text.toLowerCase().match(/^\s*(?:(rgba?)|(hsla?))\((.*)\)\s*$/);if(match){const components=match[3].trim();let values=components.split(/\s*,\s*/);if(values.length===1){values=components.split(/\s+/);if(values[3]==='/'){values.splice(3,1);if(values.length!==4){return null;}}else if((values.length>2&&values[2].indexOf('/')!==-1)||(values.length>3&&values[3].indexOf('/')!==-1)){const alpha=values.slice(2,4).join('');values=values.slice(0,2).concat(alpha.split(/\//)).concat(values.slice(4));}else if(values.length>=4){return null;}}
if(values.length!==3&&values.length!==4||values.indexOf('')>-1){return null;}
const hasAlpha=(values[3]!==undefined);if(match[1]){const rgba=[Color._parseRgbNumeric(values[0]),Color._parseRgbNumeric(values[1]),Color._parseRgbNumeric(values[2]),hasAlpha?Color._parseAlphaNumeric(values[3]):1];if(rgba.indexOf(null)>-1){return null;}
return new Color(rgba,hasAlpha?Format.RGBA:Format.RGB,text);}
if(match[2]){const hsla=[Color._parseHueNumeric(values[0]),Color._parseSatLightNumeric(values[1]),Color._parseSatLightNumeric(values[2]),hasAlpha?Color._parseAlphaNumeric(values[3]):1];if(hsla.indexOf(null)>-1){return null;}
const rgba=[];Color.hsl2rgb(hsla,rgba);return new Color(rgba,hasAlpha?Format.HSLA:Format.HSL,text);}}
return null;}
static fromRGBA(rgba){return new Color([rgba[0]/255,rgba[1]/255,rgba[2]/255,rgba[3]],Format.RGBA);}
static fromHSVA(hsva){const rgba=[];Color.hsva2rgba(hsva,rgba);return new Color(rgba,Format.HSLA);}
static _parsePercentOrNumber(value){if(isNaN(value.replace('%',''))){return null;}
const parsed=parseFloat(value);if(value.indexOf('%')!==-1){if(value.indexOf('%')!==value.length-1){return null;}
return parsed/100;}
return parsed;}
static _parseRgbNumeric(value){const parsed=Color._parsePercentOrNumber(value);if(parsed===null){return null;}
if(value.indexOf('%')!==-1){return parsed;}
return parsed/255;}
static _parseHueNumeric(value){const angle=value.replace(/(deg|g?rad|turn)$/,'');if(isNaN(angle)||value.match(/\s+(deg|g?rad|turn)/)){return null;}
const number=parseFloat(angle);if(value.indexOf('turn')!==-1){return number%1;}else if(value.indexOf('grad')!==-1){return(number/400)%1;}else if(value.indexOf('rad')!==-1){return(number/(2*Math.PI))%1;}
return(number/360)%1;}
static _parseSatLightNumeric(value){if(value.indexOf('%')!==value.length-1||isNaN(value.replace('%',''))){return null;}
const parsed=parseFloat(value);return Math.min(1,parsed/100);}
static _parseAlphaNumeric(value){return Color._parsePercentOrNumber(value);}
static _hsva2hsla(hsva,out_hsla){const h=hsva[0];let s=hsva[1];const v=hsva[2];const t=(2-s)*v;if(v===0||s===0){s=0;}else{s*=v/(t<1?t:2-t);}
out_hsla[0]=h;out_hsla[1]=s;out_hsla[2]=t/2;out_hsla[3]=hsva[3];}
static hsl2rgb(hsl,out_rgb){const h=hsl[0];let s=hsl[1];const l=hsl[2];function hue2rgb(p,q,h){if(h<0){h+=1;}else if(h>1){h-=1;}
if((h*6)<1){return p+(q-p)*h*6;}else if((h*2)<1){return q;}else if((h*3)<2){return p+(q-p)*((2/3)-h)*6;}else{return p;}}
if(s<0){s=0;}
let q;if(l<=0.5){q=l*(1+s);}else{q=l+s-(l*s);}
const p=2*l-q;const tr=h+(1/3);const tg=h;const tb=h-(1/3);out_rgb[0]=hue2rgb(p,q,tr);out_rgb[1]=hue2rgb(p,q,tg);out_rgb[2]=hue2rgb(p,q,tb);out_rgb[3]=hsl[3];}
static hsva2rgba(hsva,out_rgba){Color._hsva2hsla(hsva,Color.hsva2rgba._tmpHSLA);Color.hsl2rgb(Color.hsva2rgba._tmpHSLA,out_rgba);for(let i=0;i<Color.hsva2rgba._tmpHSLA.length;i++){Color.hsva2rgba._tmpHSLA[i]=0;}}
static luminance(rgba){const rSRGB=rgba[0];const gSRGB=rgba[1];const bSRGB=rgba[2];const r=rSRGB<=0.03928?rSRGB/12.92:Math.pow(((rSRGB+0.055)/1.055),2.4);const g=gSRGB<=0.03928?gSRGB/12.92:Math.pow(((gSRGB+0.055)/1.055),2.4);const b=bSRGB<=0.03928?bSRGB/12.92:Math.pow(((bSRGB+0.055)/1.055),2.4);return 0.2126*r+0.7152*g+0.0722*b;}
static blendColors(fgRGBA,bgRGBA,out_blended){const alpha=fgRGBA[3];out_blended[0]=((1-alpha)*bgRGBA[0])+(alpha*fgRGBA[0]);out_blended[1]=((1-alpha)*bgRGBA[1])+(alpha*fgRGBA[1]);out_blended[2]=((1-alpha)*bgRGBA[2])+(alpha*fgRGBA[2]);out_blended[3]=alpha+(bgRGBA[3]*(1-alpha));}
static calculateContrastRatio(fgRGBA,bgRGBA){Color.blendColors(fgRGBA,bgRGBA,Color.calculateContrastRatio._blendedFg);const fgLuminance=Color.luminance(Color.calculateContrastRatio._blendedFg);const bgLuminance=Color.luminance(bgRGBA);const contrastRatio=(Math.max(fgLuminance,bgLuminance)+0.05)/(Math.min(fgLuminance,bgLuminance)+0.05);for(let i=0;i<Color.calculateContrastRatio._blendedFg.length;i++){Color.calculateContrastRatio._blendedFg[i]=0;}
return contrastRatio;}
static desiredLuminance(luminance,contrast,lighter){function computeLuminance(){if(lighter){return(luminance+0.05)*contrast-0.05;}else{return(luminance+0.05)/contrast-0.05;}}
let desiredLuminance=computeLuminance();if(desiredLuminance<0||desiredLuminance>1){lighter=!lighter;desiredLuminance=computeLuminance();}
return desiredLuminance;}
static detectColorFormat(color){const cf=Format;let format;const formatSetting=Common.moduleSetting('colorFormat').get();if(formatSetting===cf.Original){format=cf.Original;}else if(formatSetting===cf.RGB){format=(color.hasAlpha()?cf.RGBA:cf.RGB);}else if(formatSetting===cf.HSL){format=(color.hasAlpha()?cf.HSLA:cf.HSL);}else if(formatSetting===cf.HEX){format=color.detectHEXFormat();}else{format=cf.RGBA;}
return format;}
format(){return this._format;}
hsla(){if(this._hsla){return this._hsla;}
const r=this._rgba[0];const g=this._rgba[1];const b=this._rgba[2];const max=Math.max(r,g,b);const min=Math.min(r,g,b);const diff=max-min;const add=max+min;let h;if(min===max){h=0;}else if(r===max){h=((1/6*(g-b)/diff)+1)%1;}else if(g===max){h=(1/6*(b-r)/diff)+1/3;}else{h=(1/6*(r-g)/diff)+2/3;}
const l=0.5*add;let s;if(l===0){s=0;}else if(l===1){s=0;}else if(l<=0.5){s=diff/add;}else{s=diff/(2-add);}
this._hsla=[h,s,l,this._rgba[3]];return this._hsla;}
canonicalHSLA(){const hsla=this.hsla();return[Math.round(hsla[0]*360),Math.round(hsla[1]*100),Math.round(hsla[2]*100),hsla[3]];}
hsva(){const hsla=this.hsla();const h=hsla[0];let s=hsla[1];const l=hsla[2];s*=l<0.5?l:1-l;return[h,s!==0?2*s/(l+s):0,(l+s),hsla[3]];}
hasAlpha(){return this._rgba[3]!==1;}
detectHEXFormat(){let canBeShort=true;for(let i=0;i<4;++i){const c=Math.round(this._rgba[i]*255);if(c%17){canBeShort=false;break;}}
const hasAlpha=this.hasAlpha();const cf=Format;if(canBeShort){return hasAlpha?cf.ShortHEXA:cf.ShortHEX;}
return hasAlpha?cf.HEXA:cf.HEX;}
asString(format){if(format===this._format&&this._originalTextIsValid){return this._originalText;}
if(!format){format=this._format;}
function toRgbValue(value){return Math.round(value*255);}
function toHexValue(value){const hex=Math.round(value*255).toString(16);return hex.length===1?'0'+hex:hex;}
function toShortHexValue(value){return(Math.round(value*255)/17).toString(16);}
switch(format){case Format.Original:return this._originalText;case Format.RGB:if(this.hasAlpha()){return null;}
return String.sprintf('rgb(%d, %d, %d)',toRgbValue(this._rgba[0]),toRgbValue(this._rgba[1]),toRgbValue(this._rgba[2]));case Format.RGBA:return String.sprintf('rgba(%d, %d, %d, %f)',toRgbValue(this._rgba[0]),toRgbValue(this._rgba[1]),toRgbValue(this._rgba[2]),this._rgba[3]);case Format.HSL:if(this.hasAlpha()){return null;}
const hsl=this.hsla();return String.sprintf('hsl(%d, %d%, %d%)',Math.round(hsl[0]*360),Math.round(hsl[1]*100),Math.round(hsl[2]*100));case Format.HSLA:const hsla=this.hsla();return String.sprintf('hsla(%d, %d%, %d%, %f)',Math.round(hsla[0]*360),Math.round(hsla[1]*100),Math.round(hsla[2]*100),hsla[3]);case Format.HEXA:return String.sprintf('#%s%s%s%s',toHexValue(this._rgba[0]),toHexValue(this._rgba[1]),toHexValue(this._rgba[2]),toHexValue(this._rgba[3])).toLowerCase();case Format.HEX:if(this.hasAlpha()){return null;}
return String.sprintf('#%s%s%s',toHexValue(this._rgba[0]),toHexValue(this._rgba[1]),toHexValue(this._rgba[2])).toLowerCase();case Format.ShortHEXA:const hexFormat=this.detectHEXFormat();if(hexFormat!==Format.ShortHEXA&&hexFormat!==Format.ShortHEX){return null;}
return String.sprintf('#%s%s%s%s',toShortHexValue(this._rgba[0]),toShortHexValue(this._rgba[1]),toShortHexValue(this._rgba[2]),toShortHexValue(this._rgba[3])).toLowerCase();case Format.ShortHEX:if(this.hasAlpha()){return null;}
if(this.detectHEXFormat()!==Format.ShortHEX){return null;}
return String.sprintf('#%s%s%s',toShortHexValue(this._rgba[0]),toShortHexValue(this._rgba[1]),toShortHexValue(this._rgba[2])).toLowerCase();case Format.Nickname:return this.nickname();}
return this._originalText;}
rgba(){return this._rgba.slice();}
canonicalRGBA(){const rgba=new Array(4);for(let i=0;i<3;++i){rgba[i]=Math.round(this._rgba[i]*255);}
rgba[3]=this._rgba[3];return rgba;}
nickname(){if(!Color._rgbaToNickname){Color._rgbaToNickname={};for(const nickname in Nicknames){let rgba=Nicknames[nickname];if(rgba.length!==4){rgba=rgba.concat(1);}
Color._rgbaToNickname[rgba]=nickname;}}
return Color._rgbaToNickname[this.canonicalRGBA()]||null;}
toProtocolRGBA(){const rgba=this.canonicalRGBA();const result={r:rgba[0],g:rgba[1],b:rgba[2]};if(rgba[3]!==1){result.a=rgba[3];}
return result;}
invert(){const rgba=[];rgba[0]=1-this._rgba[0];rgba[1]=1-this._rgba[1];rgba[2]=1-this._rgba[2];rgba[3]=this._rgba[3];return new Color(rgba,Format.RGBA);}
setAlpha(alpha){const rgba=this._rgba.slice();rgba[3]=alpha;return new Color(rgba,Format.RGBA);}
blendWith(fgColor){const rgba=[];Color.blendColors(fgColor._rgba,this._rgba,rgba);return new Color(rgba,Format.RGBA);}}
export const Regex=/((?:rgb|hsl)a?\([^)]+\)|#[0-9a-fA-F]{8}|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3,4}|\b[a-zA-Z]+\b(?!-))/g;export const Format={Original:'original',Nickname:'nickname',HEX:'hex',ShortHEX:'shorthex',HEXA:'hexa',ShortHEXA:'shorthexa',RGB:'rgb',RGBA:'rgba',HSL:'hsl',HSLA:'hsla'};export const Nicknames={'aliceblue':[240,248,255],'antiquewhite':[250,235,215],'aqua':[0,255,255],'aquamarine':[127,255,212],'azure':[240,255,255],'beige':[245,245,220],'bisque':[255,228,196],'black':[0,0,0],'blanchedalmond':[255,235,205],'blue':[0,0,255],'blueviolet':[138,43,226],'brown':[165,42,42],'burlywood':[222,184,135],'cadetblue':[95,158,160],'chartreuse':[127,255,0],'chocolate':[210,105,30],'coral':[255,127,80],'cornflowerblue':[100,149,237],'cornsilk':[255,248,220],'crimson':[237,20,61],'cyan':[0,255,255],'darkblue':[0,0,139],'darkcyan':[0,139,139],'darkgoldenrod':[184,134,11],'darkgray':[169,169,169],'darkgrey':[169,169,169],'darkgreen':[0,100,0],'darkkhaki':[189,183,107],'darkmagenta':[139,0,139],'darkolivegreen':[85,107,47],'darkorange':[255,140,0],'darkorchid':[153,50,204],'darkred':[139,0,0],'darksalmon':[233,150,122],'darkseagreen':[143,188,143],'darkslateblue':[72,61,139],'darkslategray':[47,79,79],'darkslategrey':[47,79,79],'darkturquoise':[0,206,209],'darkviolet':[148,0,211],'deeppink':[255,20,147],'deepskyblue':[0,191,255],'dimgray':[105,105,105],'dimgrey':[105,105,105],'dodgerblue':[30,144,255],'firebrick':[178,34,34],'floralwhite':[255,250,240],'forestgreen':[34,139,34],'fuchsia':[255,0,255],'gainsboro':[220,220,220],'ghostwhite':[248,248,255],'gold':[255,215,0],'goldenrod':[218,165,32],'gray':[128,128,128],'grey':[128,128,128],'green':[0,128,0],'greenyellow':[173,255,47],'honeydew':[240,255,240],'hotpink':[255,105,180],'indianred':[205,92,92],'indigo':[75,0,130],'ivory':[255,255,240],'khaki':[240,230,140],'lavender':[230,230,250],'lavenderblush':[255,240,245],'lawngreen':[124,252,0],'lemonchiffon':[255,250,205],'lightblue':[173,216,230],'lightcoral':[240,128,128],'lightcyan':[224,255,255],'lightgoldenrodyellow':[250,250,210],'lightgreen':[144,238,144],'lightgray':[211,211,211],'lightgrey':[211,211,211],'lightpink':[255,182,193],'lightsalmon':[255,160,122],'lightseagreen':[32,178,170],'lightskyblue':[135,206,250],'lightslategray':[119,136,153],'lightslategrey':[119,136,153],'lightsteelblue':[176,196,222],'lightyellow':[255,255,224],'lime':[0,255,0],'limegreen':[50,205,50],'linen':[250,240,230],'magenta':[255,0,255],'maroon':[128,0,0],'mediumaquamarine':[102,205,170],'mediumblue':[0,0,205],'mediumorchid':[186,85,211],'mediumpurple':[147,112,219],'mediumseagreen':[60,179,113],'mediumslateblue':[123,104,238],'mediumspringgreen':[0,250,154],'mediumturquoise':[72,209,204],'mediumvioletred':[199,21,133],'midnightblue':[25,25,112],'mintcream':[245,255,250],'mistyrose':[255,228,225],'moccasin':[255,228,181],'navajowhite':[255,222,173],'navy':[0,0,128],'oldlace':[253,245,230],'olive':[128,128,0],'olivedrab':[107,142,35],'orange':[255,165,0],'orangered':[255,69,0],'orchid':[218,112,214],'palegoldenrod':[238,232,170],'palegreen':[152,251,152],'paleturquoise':[175,238,238],'palevioletred':[219,112,147],'papayawhip':[255,239,213],'peachpuff':[255,218,185],'peru':[205,133,63],'pink':[255,192,203],'plum':[221,160,221],'powderblue':[176,224,230],'purple':[128,0,128],'rebeccapurple':[102,51,153],'red':[255,0,0],'rosybrown':[188,143,143],'royalblue':[65,105,225],'saddlebrown':[139,69,19],'salmon':[250,128,114],'sandybrown':[244,164,96],'seagreen':[46,139,87],'seashell':[255,245,238],'sienna':[160,82,45],'silver':[192,192,192],'skyblue':[135,206,235],'slateblue':[106,90,205],'slategray':[112,128,144],'slategrey':[112,128,144],'snow':[255,250,250],'springgreen':[0,255,127],'steelblue':[70,130,180],'tan':[210,180,140],'teal':[0,128,128],'thistle':[216,191,216],'tomato':[255,99,71],'turquoise':[64,224,208],'violet':[238,130,238],'wheat':[245,222,179],'white':[255,255,255],'whitesmoke':[245,245,245],'yellow':[255,255,0],'yellowgreen':[154,205,50],'transparent':[0,0,0,0],};export const PageHighlight={Content:Color.fromRGBA([111,168,220,.66]),ContentLight:Color.fromRGBA([111,168,220,.5]),ContentOutline:Color.fromRGBA([9,83,148]),Padding:Color.fromRGBA([147,196,125,.55]),PaddingLight:Color.fromRGBA([147,196,125,.4]),Border:Color.fromRGBA([255,229,153,.66]),BorderLight:Color.fromRGBA([255,229,153,.5]),Margin:Color.fromRGBA([246,178,107,.66]),MarginLight:Color.fromRGBA([246,178,107,.5]),EventTarget:Color.fromRGBA([255,196,196,.66]),Shape:Color.fromRGBA([96,82,177,0.8]),ShapeMargin:Color.fromRGBA([96,82,127,.6]),CssGrid:Color.fromRGBA([0x4b,0,0x82,1])};export class Generator{constructor(hueSpace,satSpace,lightnessSpace,alphaSpace){this._hueSpace=hueSpace||{min:0,max:360};this._satSpace=satSpace||67;this._lightnessSpace=lightnessSpace||80;this._alphaSpace=alphaSpace||1;this._colors=new Map();}
setColorForID(id,color){this._colors.set(id,color);}
colorForID(id){let color=this._colors.get(id);if(!color){color=this._generateColorForID(id);this._colors.set(id,color);}
return color;}
_generateColorForID(id){const hash=String.hashCode(id);const h=this._indexToValueInSpace(hash,this._hueSpace);const s=this._indexToValueInSpace(hash>>8,this._satSpace);const l=this._indexToValueInSpace(hash>>16,this._lightnessSpace);const a=this._indexToValueInSpace(hash>>24,this._alphaSpace);return`hsla(${h}, ${s}%, ${l}%, ${a})`;}
_indexToValueInSpace(index,space){if(typeof space==='number'){return space;}
const count=space.count||space.max-space.min;index%=count;return space.min+Math.floor(index/(count-1)*(space.max-space.min));}}
Color.hsva2rgba._tmpHSLA=[0,0,0,0];Color.calculateContrastRatio._blendedFg=[0,0,0,0];self.Common=self.Common||{};Common=Common||{};Common.Color=Color;Common.Color.Regex=Regex;Common.Color.Format=Format;Common.Color.Nicknames=Nicknames;Common.Color.PageHighlight=PageHighlight;Common.Color.Generator=Generator;import{ResourceType}from'./ResourceType.js';export class ContentProvider{contentURL(){}
contentType(){}
contentEncoded(){}
requestContent(){}
searchInContent(query,caseSensitive,isRegex){}}
export class SearchMatch{constructor(lineNumber,lineContent){this.lineNumber=lineNumber;this.lineContent=lineContent;}}
export const performSearchInContent=function(content,query,caseSensitive,isRegex){const regex=createSearchRegex(query,caseSensitive,isRegex);const text=new TextUtils.Text(content);const result=[];for(let i=0;i<text.lineCount();++i){const lineContent=text.lineAt(i);regex.lastIndex=0;if(regex.exec(lineContent)){result.push(new SearchMatch(i,lineContent));}}
return result;};export const contentAsDataURL=function(content,mimeType,contentEncoded,charset){const maxDataUrlSize=1024*1024;if(content===null||content.length>maxDataUrlSize){return null;}
return'data:'+mimeType+(charset?';charset='+charset:'')+(contentEncoded?';base64':'')+','+
content;};self.Common=self.Common||{};Common=Common||{};Common.ContentProvider=ContentProvider;Common.ContentProvider.SearchMatch=SearchMatch;Common.ContentProvider.performSearchInContent=performSearchInContent;Common.ContentProvider.contentAsDataURL=contentAsDataURL;Common.DeferredContent;export function removeEventListeners(eventList){for(const eventInfo of eventList){eventInfo.eventTarget.removeEventListener(eventInfo.eventType,eventInfo.listener,eventInfo.thisObject);}
eventList.splice(0);}
export class EventTarget{addEventListener(eventType,listener,thisObject){}
once(eventType){}
removeEventListener(eventType,listener,thisObject){}
hasEventListeners(eventType){}
dispatchEventToListeners(eventType,eventData){}}
self.Common=self.Common||{};Common=Common||{};Common.EventTarget=EventTarget;EventTarget.removeEventListeners=removeEventListeners;Common.EventTarget.EventDescriptor;Common.Event;export class JavaScriptMetaData{signaturesForNativeFunction(name){}
signaturesForInstanceMethod(name,receiverClassName){}
signaturesForStaticMethod(name,receiverConstructorName){}}
self.Common=self.Common||{};Common=Common||{};Common.JavaScriptMetadata=JavaScriptMetaData;export class Linkifier{linkify(object,options){}
static linkify(object,options){if(!object){return Promise.reject(new Error('Can\'t linkify '+object));}
return self.runtime.extension(Linkifier,object).instance().then(linkifier=>linkifier.linkify(object,options));}}
self.Common=self.Common||{};Common=Common||{};Common.Linkifier=Linkifier;Common.Linkifier.Options;import{EventTarget}from'./EventTarget.js';export class ObjectWrapper{constructor(){this._listeners;}
addEventListener(eventType,listener,thisObject){if(!listener){console.assert(false);}
if(!this._listeners){this._listeners=new Map();}
if(!this._listeners.has(eventType)){this._listeners.set(eventType,[]);}
this._listeners.get(eventType).push({thisObject:thisObject,listener:listener});return{eventTarget:this,eventType:eventType,thisObject:thisObject,listener:listener};}
once(eventType){return new Promise(resolve=>{const descriptor=this.addEventListener(eventType,event=>{this.removeEventListener(eventType,descriptor.listener);resolve(event.data);});});}
removeEventListener(eventType,listener,thisObject){console.assert(listener);if(!this._listeners||!this._listeners.has(eventType)){return;}
const listeners=this._listeners.get(eventType);for(let i=0;i<listeners.length;++i){if(listeners[i].listener===listener&&listeners[i].thisObject===thisObject){listeners[i].disposed=true;listeners.splice(i--,1);}}
if(!listeners.length){this._listeners.delete(eventType);}}
hasEventListeners(eventType){return!!(this._listeners&&this._listeners.has(eventType));}
dispatchEventToListeners(eventType,eventData){if(!this._listeners||!this._listeners.has(eventType)){return;}
const event=({data:eventData});const listeners=this._listeners.get(eventType).slice(0);for(let i=0;i<listeners.length;++i){if(!listeners[i].disposed){listeners[i].listener.call(listeners[i].thisObject,event);}}}}
self.Common=self.Common||{};Common=Common||{};Common.Object=ObjectWrapper;Common.Object._listenerCallbackTuple;import{ObjectWrapper}from'./Object.js';export class Console extends ObjectWrapper{constructor(){super();this._messages=[];}
addMessage(text,level,show){const message=new Message(text,level||MessageLevel.Info,Date.now(),show||false);this._messages.push(message);this.dispatchEventToListeners(Events.MessageAdded,message);}
log(text){this.addMessage(text,MessageLevel.Info);}
warn(text){this.addMessage(text,MessageLevel.Warning);}
error(text){this.addMessage(text,MessageLevel.Error,true);}
messages(){return this._messages;}
show(){this.showPromise();}
showPromise(){return Common.Revealer.reveal(this);}}
export const Events={MessageAdded:Symbol('messageAdded')};export const MessageLevel={Info:'info',Warning:'warning',Error:'error'};export class Message{constructor(text,level,timestamp,show){this.text=text;this.level=level;this.timestamp=(typeof timestamp==='number')?timestamp:Date.now();this.show=show;}}
self.Common=self.Common||{};Common=Common||{};Common.console=new Console();Common.Console=Console;Common.Console.Events=Events;Common.Console.MessageLevel=MessageLevel;Common.Console.Message=Message;export class ParsedURL{constructor(url){this.isValid=false;this.url=url;this.scheme='';this.user='';this.host='';this.port='';this.path='';this.queryParams='';this.fragment='';this.folderPathComponents='';this.lastPathComponent='';const isBlobUrl=this.url.startsWith('blob:');const urlToMatch=isBlobUrl?url.substring(5):url;const match=urlToMatch.match(ParsedURL._urlRegex());if(match){this.isValid=true;if(isBlobUrl){this._blobInnerScheme=match[2].toLowerCase();this.scheme='blob';}else{this.scheme=match[2].toLowerCase();}
this.user=match[3];this.host=match[4];this.port=match[5];this.path=match[6]||'/';this.queryParams=match[7]||'';this.fragment=match[8];}else{if(this.url.startsWith('data:')){this.scheme='data';return;}
if(this.url.startsWith('blob:')){this.scheme='blob';return;}
if(this.url==='about:blank'){this.scheme='about';return;}
this.path=this.url;}
const lastSlashIndex=this.path.lastIndexOf('/');if(lastSlashIndex!==-1){this.folderPathComponents=this.path.substring(0,lastSlashIndex);this.lastPathComponent=this.path.substring(lastSlashIndex+1);}else{this.lastPathComponent=this.path;}}
static platformPathToURL(fileSystemPath){fileSystemPath=fileSystemPath.replace(/\\/g,'/');if(!fileSystemPath.startsWith('file://')){if(fileSystemPath.startsWith('/')){fileSystemPath='file://'+fileSystemPath;}else{fileSystemPath='file:///'+fileSystemPath;}}
return fileSystemPath;}
static urlToPlatformPath(fileURL,isWindows){console.assert(fileURL.startsWith('file://'),'This must be a file URL.');if(isWindows){return fileURL.substr('file:///'.length).replace(/\//g,'\\');}
return fileURL.substr('file://'.length);}
static urlWithoutHash(url){const hashIndex=url.indexOf('#');if(hashIndex!==-1){return url.substr(0,hashIndex);}
return url;}
static _urlRegex(){if(ParsedURL._urlRegexInstance){return ParsedURL._urlRegexInstance;}
const schemeRegex=/([A-Za-z][A-Za-z0-9+.-]*):\/\//;const userRegex=/(?:([A-Za-z0-9\-._~%!$&'()*+,;=:]*)@)?/;const hostRegex=/((?:\[::\d?\])|(?:[^\s\/:]*))/;const portRegex=/(?::([\d]+))?/;const pathRegex=/(\/[^#?]*)?/;const queryRegex=/(?:\?([^#]*))?/;const fragmentRegex=/(?:#(.*))?/;ParsedURL._urlRegexInstance=new RegExp('^('+schemeRegex.source+userRegex.source+hostRegex.source+portRegex.source+')'+pathRegex.source+
queryRegex.source+fragmentRegex.source+'$');return ParsedURL._urlRegexInstance;}
static extractPath(url){const parsedURL=url.asParsedURL();return parsedURL?parsedURL.path:'';}
static extractOrigin(url){const parsedURL=url.asParsedURL();return parsedURL?parsedURL.securityOrigin():'';}
static extractExtension(url){url=ParsedURL.urlWithoutHash(url);const indexOfQuestionMark=url.indexOf('?');if(indexOfQuestionMark!==-1){url=url.substr(0,indexOfQuestionMark);}
const lastIndexOfSlash=url.lastIndexOf('/');if(lastIndexOfSlash!==-1){url=url.substr(lastIndexOfSlash+1);}
const lastIndexOfDot=url.lastIndexOf('.');if(lastIndexOfDot!==-1){url=url.substr(lastIndexOfDot+1);const lastIndexOfPercent=url.indexOf('%');if(lastIndexOfPercent!==-1){return url.substr(0,lastIndexOfPercent);}
return url;}
return'';}
static extractName(url){let index=url.lastIndexOf('/');const pathAndQuery=index!==-1?url.substr(index+1):url;index=pathAndQuery.indexOf('?');return index<0?pathAndQuery:pathAndQuery.substr(0,index);}
static completeURL(baseURL,href){const trimmedHref=href.trim();if(trimmedHref.startsWith('data:')||trimmedHref.startsWith('blob:')||trimmedHref.startsWith('javascript:')||trimmedHref.startsWith('mailto:')){return href;}
const parsedHref=trimmedHref.asParsedURL();if(parsedHref&&parsedHref.scheme){return trimmedHref;}
const parsedURL=baseURL.asParsedURL();if(!parsedURL){return null;}
if(parsedURL.isDataURL()){return href;}
if(href.length>1&&href.charAt(0)==='/'&&href.charAt(1)==='/'){return parsedURL.scheme+':'+href;}
const securityOrigin=parsedURL.securityOrigin();const pathText=parsedURL.path;const queryText=parsedURL.queryParams?'?'+parsedURL.queryParams:'';if(!href.length){return securityOrigin+pathText+queryText;}
if(href.charAt(0)==='#'){return securityOrigin+pathText+queryText+href;}
if(href.charAt(0)==='?'){return securityOrigin+pathText+href;}
let hrefPath=href.match(/^[^#?]*/)[0];const hrefSuffix=href.substring(hrefPath.length);if(hrefPath.charAt(0)!=='/'){hrefPath=parsedURL.folderPathComponents+'/'+hrefPath;}
return securityOrigin+Root.Runtime.normalizePath(hrefPath)+hrefSuffix;}
static splitLineAndColumn(string){const beforePathMatch=string.match(ParsedURL._urlRegex());let beforePath='';let pathAndAfter=string;if(beforePathMatch){beforePath=beforePathMatch[1];pathAndAfter=string.substring(beforePathMatch[1].length);}
const lineColumnRegEx=/(?::(\d+))?(?::(\d+))?$/;const lineColumnMatch=lineColumnRegEx.exec(pathAndAfter);let lineNumber;let columnNumber;console.assert(lineColumnMatch);if(typeof(lineColumnMatch[1])==='string'){lineNumber=parseInt(lineColumnMatch[1],10);lineNumber=isNaN(lineNumber)?undefined:lineNumber-1;}
if(typeof(lineColumnMatch[2])==='string'){columnNumber=parseInt(lineColumnMatch[2],10);columnNumber=isNaN(columnNumber)?undefined:columnNumber-1;}
return{url:beforePath+pathAndAfter.substring(0,pathAndAfter.length-lineColumnMatch[0].length),lineNumber:lineNumber,columnNumber:columnNumber};}
static isRelativeURL(url){return!(/^[A-Za-z][A-Za-z0-9+.-]*:/.test(url));}
get displayName(){if(this._displayName){return this._displayName;}
if(this.isDataURL()){return this.dataURLDisplayName();}
if(this.isBlobURL()){return this.url;}
if(this.isAboutBlank()){return this.url;}
this._displayName=this.lastPathComponent;if(!this._displayName){this._displayName=(this.host||'')+'/';}
if(this._displayName==='/'){this._displayName=this.url;}
return this._displayName;}
dataURLDisplayName(){if(this._dataURLDisplayName){return this._dataURLDisplayName;}
if(!this.isDataURL()){return'';}
this._dataURLDisplayName=this.url.trimEndWithMaxLength(20);return this._dataURLDisplayName;}
isAboutBlank(){return this.url==='about:blank';}
isDataURL(){return this.scheme==='data';}
isBlobURL(){return this.url.startsWith('blob:');}
lastPathComponentWithFragment(){return this.lastPathComponent+(this.fragment?'#'+this.fragment:'');}
domain(){if(this.isDataURL()){return'data:';}
return this.host+(this.port?':'+this.port:'');}
securityOrigin(){if(this.isDataURL()){return'data:';}
const scheme=this.isBlobURL()?this._blobInnerScheme:this.scheme;return scheme+'://'+this.domain();}
urlWithoutScheme(){if(this.scheme&&this.url.startsWith(this.scheme+'://')){return this.url.substring(this.scheme.length+3);}
return this.url;}}
String.prototype.asParsedURL=function(){const parsedURL=new ParsedURL(this.toString());if(parsedURL.isValid){return parsedURL;}
return null;};self.Common=self.Common||{};Common=Common||{};Common.ParsedURL=ParsedURL;export class Progress{setTotalWork(totalWork){}
setTitle(title){}
setWorked(worked,title){}
worked(worked){}
done(){}
isCanceled(){return false;}}
export class CompositeProgress{constructor(parent){this._parent=parent;this._children=[];this._childrenDone=0;this._parent.setTotalWork(1);this._parent.setWorked(0);}
_childDone(){if(++this._childrenDone!==this._children.length){return;}
this._parent.done();}
createSubProgress(weight){const child=new SubProgress(this,weight);this._children.push(child);return child;}
_update(){let totalWeights=0;let done=0;for(let i=0;i<this._children.length;++i){const child=this._children[i];if(child._totalWork){done+=child._weight*child._worked/child._totalWork;}
totalWeights+=child._weight;}
this._parent.setWorked(done/totalWeights);}}
export class SubProgress{constructor(composite,weight){this._composite=composite;this._weight=weight||1;this._worked=0;}
isCanceled(){return this._composite._parent.isCanceled();}
setTitle(title){this._composite._parent.setTitle(title);}
done(){this.setWorked(this._totalWork);this._composite._childDone();}
setTotalWork(totalWork){this._totalWork=totalWork;this._composite._update();}
setWorked(worked,title){this._worked=worked;if(typeof title!=='undefined'){this.setTitle(title);}
this._composite._update();}
worked(worked){this.setWorked(this._worked+(worked||1));}}
export class ProgressProxy{constructor(delegate,doneCallback){this._delegate=delegate;this._doneCallback=doneCallback;}
isCanceled(){return this._delegate?this._delegate.isCanceled():false;}
setTitle(title){if(this._delegate){this._delegate.setTitle(title);}}
done(){if(this._delegate){this._delegate.done();}
if(this._doneCallback){this._doneCallback();}}
setTotalWork(totalWork){if(this._delegate){this._delegate.setTotalWork(totalWork);}}
setWorked(worked,title){if(this._delegate){this._delegate.setWorked(worked,title);}}
worked(worked){if(this._delegate){this._delegate.worked(worked);}}}
self.Common=self.Common||{};Common=Common||{};Common.Progress=Progress;Common.CompositeProgress=CompositeProgress;Common.SubProgress=SubProgress;Common.ProgressProxy=ProgressProxy;export class QueryParamHandler{handleQueryParam(value){}}
self.Common=self.Common||{};Common=Common||{};Common.QueryParamHandler=QueryParamHandler;import{ParsedURL}from'./ParsedURL.js';import{ls}from'./UIString.js';export class ResourceType{constructor(name,title,category,isTextType){this._name=name;this._title=title;this._category=category;this._isTextType=isTextType;}
static fromMimeType(mimeType){if(!mimeType){return resourceTypes.Other;}
if(mimeType.startsWith('text/html')){return resourceTypes.Document;}
if(mimeType.startsWith('text/css')){return resourceTypes.Stylesheet;}
if(mimeType.startsWith('image/')){return resourceTypes.Image;}
if(mimeType.startsWith('text/')){return resourceTypes.Script;}
if(mimeType.includes('font')){return resourceTypes.Font;}
if(mimeType.includes('script')){return resourceTypes.Script;}
if(mimeType.includes('octet')){return resourceTypes.Other;}
if(mimeType.includes('application')){return resourceTypes.Script;}
return resourceTypes.Other;}
static fromURL(url){return ResourceType._resourceTypeByExtension.get(ParsedURL.extractExtension(url))||null;}
static fromName(name){for(const resourceTypeId in resourceTypes){const resourceType=resourceTypes[resourceTypeId];if(resourceType.name()===name){return resourceType;}}
return null;}
static mimeFromURL(url){const name=ParsedURL.extractName(url);if(ResourceType._mimeTypeByName.has(name)){return ResourceType._mimeTypeByName.get(name);}
const ext=ParsedURL.extractExtension(url).toLowerCase();return ResourceType._mimeTypeByExtension.get(ext);}
static mimeFromExtension(ext){return ResourceType._mimeTypeByExtension.get(ext);}
name(){return this._name;}
title(){return this._title;}
category(){return this._category;}
isTextType(){return this._isTextType;}
isScript(){return this._name==='script'||this._name==='sm-script';}
hasScripts(){return this.isScript()||this.isDocument();}
isStyleSheet(){return this._name==='stylesheet'||this._name==='sm-stylesheet';}
isDocument(){return this._name==='document';}
isDocumentOrScriptOrStyleSheet(){return this.isDocument()||this.isScript()||this.isStyleSheet();}
isFromSourceMap(){return this._name.startsWith('sm-');}
toString(){return this._name;}
canonicalMimeType(){if(this.isDocument()){return'text/html';}
if(this.isScript()){return'text/javascript';}
if(this.isStyleSheet()){return'text/css';}
return'';}}
export class ResourceCategory{constructor(title,shortTitle){this.title=title;this.shortTitle=shortTitle;}}
export const resourceCategories={XHR:new ResourceCategory(ls`XHR and Fetch`,ls`XHR`),Script:new ResourceCategory(ls`Scripts`,ls`JS`),Stylesheet:new ResourceCategory(ls`Stylesheets`,ls`CSS`),Image:new ResourceCategory(ls`Images`,ls`Img`),Media:new ResourceCategory(ls`Media`,ls`Media`),Font:new ResourceCategory(ls`Fonts`,ls`Font`),Document:new ResourceCategory(ls`Documents`,ls`Doc`),WebSocket:new ResourceCategory(ls`WebSockets`,ls`WS`),Manifest:new ResourceCategory(ls`Manifest`,ls`Manifest`),Other:new ResourceCategory(ls`Other`,ls`Other`)};export const resourceTypes={XHR:new ResourceType('xhr',ls`XHR`,resourceCategories.XHR,true),Fetch:new ResourceType('fetch',ls`Fetch`,resourceCategories.XHR,true),EventSource:new ResourceType('eventsource',ls`EventSource`,resourceCategories.XHR,true),Script:new ResourceType('script',ls`Script`,resourceCategories.Script,true),Stylesheet:new ResourceType('stylesheet',ls`Stylesheet`,resourceCategories.Stylesheet,true),Image:new ResourceType('image',ls`Image`,resourceCategories.Image,false),Media:new ResourceType('media',ls`Media`,resourceCategories.Media,false),Font:new ResourceType('font',ls`Font`,resourceCategories.Font,false),Document:new ResourceType('document',ls`Document`,resourceCategories.Document,true),TextTrack:new ResourceType('texttrack',ls`TextTrack`,resourceCategories.Other,true),WebSocket:new ResourceType('websocket',ls`WebSocket`,resourceCategories.WebSocket,false),Other:new ResourceType('other',ls`Other`,resourceCategories.Other,false),SourceMapScript:new ResourceType('sm-script',ls`Script`,resourceCategories.Script,true),SourceMapStyleSheet:new ResourceType('sm-stylesheet',ls`Stylesheet`,resourceCategories.Stylesheet,true),Manifest:new ResourceType('manifest',ls`Manifest`,resourceCategories.Manifest,true),SignedExchange:new ResourceType('signed-exchange',ls`SignedExchange`,resourceCategories.Other,false)};export const _mimeTypeByName=new Map([['Cakefile','text/x-coffeescript']]);export const _resourceTypeByExtension=new Map([['js',resourceTypes.Script],['mjs',resourceTypes.Script],['css',resourceTypes.Stylesheet],['xsl',resourceTypes.Stylesheet],['jpeg',resourceTypes.Image],['jpg',resourceTypes.Image],['svg',resourceTypes.Image],['gif',resourceTypes.Image],['png',resourceTypes.Image],['ico',resourceTypes.Image],['tiff',resourceTypes.Image],['tif',resourceTypes.Image],['bmp',resourceTypes.Image],['webp',resourceTypes.Media],['ttf',resourceTypes.Font],['otf',resourceTypes.Font],['ttc',resourceTypes.Font],['woff',resourceTypes.Font]]);export const _mimeTypeByExtension=new Map([['js','text/javascript'],['mjs','text/javascript'],['css','text/css'],['html','text/html'],['htm','text/html'],['xml','application/xml'],['xsl','application/xml'],['asp','application/x-aspx'],['aspx','application/x-aspx'],['jsp','application/x-jsp'],['c','text/x-c++src'],['cc','text/x-c++src'],['cpp','text/x-c++src'],['h','text/x-c++src'],['m','text/x-c++src'],['mm','text/x-c++src'],['coffee','text/x-coffeescript'],['dart','text/javascript'],['ts','text/typescript'],['tsx','text/typescript-jsx'],['json','application/json'],['gyp','application/json'],['gypi','application/json'],['cs','text/x-csharp'],['java','text/x-java'],['less','text/x-less'],['php','text/x-php'],['phtml','application/x-httpd-php'],['py','text/x-python'],['sh','text/x-sh'],['scss','text/x-scss'],['vtt','text/vtt'],['ls','text/x-livescript'],['md','text/markdown'],['cljs','text/x-clojure'],['cljc','text/x-clojure'],['cljx','text/x-clojure'],['styl','text/x-styl'],['jsx','text/jsx'],['jpeg','image/jpeg'],['jpg','image/jpeg'],['svg','image/svg+xml'],['gif','image/gif'],['webp','image/webp'],['png','image/png'],['ico','image/ico'],['tiff','image/tiff'],['tif','image/tif'],['bmp','image/bmp'],['ttf','font/opentype'],['otf','font/opentype'],['ttc','font/opentype'],['woff','application/font-woff']]);self.Common=self.Common||{};Common=Common||{};Common.resourceTypes=resourceTypes;Common.resourceCategories=resourceCategories;Common.ResourceCategory=ResourceCategory;Common.ResourceType=ResourceType;Common.ResourceType._mimeTypeByName=_mimeTypeByName;Common.ResourceType._resourceTypeByExtension=_resourceTypeByExtension;Common.ResourceType._mimeTypeByExtension=_mimeTypeByExtension;export class Revealer{reveal(object,omitFocus){}}
export const reveal=function(revealable,omitFocus){if(!revealable){return Promise.reject(new Error('Can\'t reveal '+revealable));}
return self.runtime.allInstances(Revealer,revealable).then(reveal);function reveal(revealers){const promises=[];for(let i=0;i<revealers.length;++i){promises.push(revealers[i].reveal((revealable),omitFocus));}
return Promise.race(promises);}};export const revealDestination=function(revealable){const extension=self.runtime.extension(Revealer,revealable);if(!extension){return null;}
return extension.descriptor()['destination'];};self.Common=self.Common||{};Common=Common||{};Common.Revealer=Revealer;Common.Revealer.reveal=reveal;Common.Revealer.revealDestination=revealDestination;export class Runnable{run(){}}
self.Common=self.Common||{};Common=Common||{};Common.Runnable=Runnable;export class Segment{constructor(begin,end,data){if(begin>end){throw new Error('Invalid segment');}
this.begin=begin;this.end=end;this.data=data;}
intersects(that){return this.begin<that.end&&that.begin<this.end;}}
export class SegmentedRange{constructor(mergeCallback){this._segments=[];this._mergeCallback=mergeCallback;}
append(newSegment){let startIndex=this._segments.lowerBound(newSegment,(a,b)=>a.begin-b.begin);let endIndex=startIndex;let merged=null;if(startIndex>0){const precedingSegment=this._segments[startIndex-1];merged=this._tryMerge(precedingSegment,newSegment);if(merged){--startIndex;newSegment=merged;}else if(this._segments[startIndex-1].end>=newSegment.begin){if(newSegment.end<precedingSegment.end){this._segments.splice(startIndex,0,new Segment(newSegment.end,precedingSegment.end,precedingSegment.data));}
precedingSegment.end=newSegment.begin;}}
while(endIndex<this._segments.length&&this._segments[endIndex].end<=newSegment.end){++endIndex;}
if(endIndex<this._segments.length){merged=this._tryMerge(newSegment,this._segments[endIndex]);if(merged){endIndex++;newSegment=merged;}else if(newSegment.intersects(this._segments[endIndex])){this._segments[endIndex].begin=newSegment.end;}}
this._segments.splice(startIndex,endIndex-startIndex,newSegment);}
appendRange(that){that.segments().forEach(segment=>this.append(segment));}
segments(){return this._segments;}
_tryMerge(first,second){const merged=this._mergeCallback&&this._mergeCallback(first,second);if(!merged){return null;}
merged.begin=first.begin;merged.end=Math.max(first.end,second.end);return merged;}}
self.Common=self.Common||{};Common=Common||{};Common.Segment=Segment;Common.SegmentedRange=SegmentedRange;import{ObjectWrapper}from'./Object.js';export class Settings{constructor(globalStorage,localStorage){this._globalStorage=globalStorage;this._localStorage=localStorage;this._sessionStorage=new SettingsStorage({});this._eventSupport=new ObjectWrapper();this._registry=new Map();this._moduleSettings=new Map();self.runtime.extensions('setting').forEach(this._registerModuleSetting.bind(this));}
_registerModuleSetting(extension){const descriptor=extension.descriptor();const settingName=descriptor['settingName'];const isRegex=descriptor['settingType']==='regex';const defaultValue=descriptor['defaultValue'];let storageType;switch(descriptor['storageType']){case('local'):storageType=SettingStorageType.Local;break;case('session'):storageType=SettingStorageType.Session;break;case('global'):storageType=SettingStorageType.Global;break;default:storageType=SettingStorageType.Global;}
const setting=isRegex?this.createRegExpSetting(settingName,defaultValue,undefined,storageType):this.createSetting(settingName,defaultValue,storageType);if(extension.title()){setting.setTitle(extension.title());}
if(descriptor['userActionCondition']){setting.setRequiresUserAction(!!Root.Runtime.queryParam(descriptor['userActionCondition']));}
setting._extension=extension;this._moduleSettings.set(settingName,setting);}
moduleSetting(settingName){const setting=this._moduleSettings.get(settingName);if(!setting){throw new Error('No setting registered: '+settingName);}
return setting;}
settingForTest(settingName){const setting=this._registry.get(settingName);if(!setting){throw new Error('No setting registered: '+settingName);}
return setting;}
createSetting(key,defaultValue,storageType){const storage=this._storageFromType(storageType);if(!this._registry.get(key)){this._registry.set(key,new Setting(this,key,defaultValue,this._eventSupport,storage));}
return(this._registry.get(key));}
createLocalSetting(key,defaultValue){return this.createSetting(key,defaultValue,SettingStorageType.Local);}
createRegExpSetting(key,defaultValue,regexFlags,storageType){if(!this._registry.get(key)){this._registry.set(key,new RegExpSetting(this,key,defaultValue,this._eventSupport,this._storageFromType(storageType),regexFlags));}
return(this._registry.get(key));}
clearAll(){this._globalStorage.removeAll();this._localStorage.removeAll();const versionSetting=Common.settings.createSetting(VersionController._currentVersionName,0);versionSetting.set(VersionController.currentVersion);}
_storageFromType(storageType){switch(storageType){case(SettingStorageType.Local):return this._localStorage;case(SettingStorageType.Session):return this._sessionStorage;case(SettingStorageType.Global):return this._globalStorage;}
return this._globalStorage;}}
export class SettingsStorage{constructor(object,setCallback,removeCallback,removeAllCallback,storagePrefix){this._object=object;this._setCallback=setCallback||function(){};this._removeCallback=removeCallback||function(){};this._removeAllCallback=removeAllCallback||function(){};this._storagePrefix=storagePrefix||'';}
set(name,value){name=this._storagePrefix+name;this._object[name]=value;this._setCallback(name,value);}
has(name){name=this._storagePrefix+name;return name in this._object;}
get(name){name=this._storagePrefix+name;return this._object[name];}
remove(name){name=this._storagePrefix+name;delete this._object[name];this._removeCallback(name);}
removeAll(){this._object={};this._removeAllCallback();}
_dumpSizes(){Common.console.log('Ten largest settings: ');const sizes={__proto__:null};for(const key in this._object){sizes[key]=this._object[key].length;}
const keys=Object.keys(sizes);function comparator(key1,key2){return sizes[key2]-sizes[key1];}
keys.sort(comparator);for(let i=0;i<10&&i<keys.length;++i){Common.console.log('Setting: \''+keys[i]+'\', size: '+sizes[keys[i]]);}}}
export class Setting{constructor(settings,name,defaultValue,eventSupport,storage){this._settings=settings;this._name=name;this._defaultValue=defaultValue;this._eventSupport=eventSupport;this._storage=storage;this._title='';this._extension=null;}
addChangeListener(listener,thisObject){return this._eventSupport.addEventListener(this._name,listener,thisObject);}
removeChangeListener(listener,thisObject){this._eventSupport.removeEventListener(this._name,listener,thisObject);}
get name(){return this._name;}
title(){return this._title;}
setTitle(title){this._title=title;}
setRequiresUserAction(requiresUserAction){this._requiresUserAction=requiresUserAction;}
get(){if(this._requiresUserAction&&!this._hadUserAction){return this._defaultValue;}
if(typeof this._value!=='undefined'){return this._value;}
this._value=this._defaultValue;if(this._storage.has(this._name)){try{this._value=JSON.parse(this._storage.get(this._name));}catch(e){this._storage.remove(this._name);}}
return this._value;}
set(value){this._hadUserAction=true;this._value=value;try{const settingString=JSON.stringify(value);try{this._storage.set(this._name,settingString);}catch(e){this._printSettingsSavingError(e.message,this._name,settingString);}}catch(e){Common.console.error('Cannot stringify setting with name: '+this._name+', error: '+e.message);}
this._eventSupport.dispatchEventToListeners(this._name,value);}
remove(){this._settings._registry.delete(this._name);this._settings._moduleSettings.delete(this._name);this._storage.remove(this._name);}
extension(){return this._extension;}
_printSettingsSavingError(message,name,value){const errorMessage='Error saving setting with name: '+this._name+', value length: '+value.length+'. Error: '+message;console.error(errorMessage);Common.console.error(errorMessage);this._storage._dumpSizes();}}
export class RegExpSetting extends Setting{constructor(settings,name,defaultValue,eventSupport,storage,regexFlags){super(settings,name,defaultValue?[{pattern:defaultValue}]:[],eventSupport,storage);this._regexFlags=regexFlags;}
get(){const result=[];const items=this.getAsArray();for(let i=0;i<items.length;++i){const item=items[i];if(item.pattern&&!item.disabled){result.push(item.pattern);}}
return result.join('|');}
getAsArray(){return super.get();}
set(value){this.setAsArray([{pattern:value}]);}
setAsArray(value){delete this._regex;super.set(value);}
asRegExp(){if(typeof this._regex!=='undefined'){return this._regex;}
this._regex=null;try{const pattern=this.get();if(pattern){this._regex=new RegExp(pattern,this._regexFlags||'');}}catch(e){}
return this._regex;}}
export class VersionController{static get _currentVersionName(){return'inspectorVersion';}
static get currentVersion(){return 28;}
updateVersion(){const localStorageVersion=window.localStorage?window.localStorage[VersionController._currentVersionName]:0;const versionSetting=Common.settings.createSetting(VersionController._currentVersionName,0);const currentVersion=VersionController.currentVersion;const oldVersion=versionSetting.get()||parseInt(localStorageVersion||'0',10);if(oldVersion===0){versionSetting.set(currentVersion);return;}
const methodsToRun=this._methodsToRunToUpdateVersion(oldVersion,currentVersion);for(let i=0;i<methodsToRun.length;++i){this[methodsToRun[i]].call(this);}
versionSetting.set(currentVersion);}
_methodsToRunToUpdateVersion(oldVersion,currentVersion){const result=[];for(let i=oldVersion;i<currentVersion;++i){result.push('_updateVersionFrom'+i+'To'+(i+1));}
return result;}
_updateVersionFrom0To1(){this._clearBreakpointsWhenTooMany(Common.settings.createLocalSetting('breakpoints',[]),500000);}
_updateVersionFrom1To2(){Common.settings.createSetting('previouslyViewedFiles',[]).set([]);}
_updateVersionFrom2To3(){Common.settings.createSetting('fileSystemMapping',{}).set({});Common.settings.createSetting('fileMappingEntries',[]).remove();}
_updateVersionFrom3To4(){const advancedMode=Common.settings.createSetting('showHeaSnapshotObjectsHiddenProperties',false);Common.moduleSetting('showAdvancedHeapSnapshotProperties').set(advancedMode.get());advancedMode.remove();}
_updateVersionFrom4To5(){const settingNames={'FileSystemViewSidebarWidth':'fileSystemViewSplitViewState','elementsSidebarWidth':'elementsPanelSplitViewState','StylesPaneSplitRatio':'stylesPaneSplitViewState','heapSnapshotRetainersViewSize':'heapSnapshotSplitViewState','InspectorView.splitView':'InspectorView.splitViewState','InspectorView.screencastSplitView':'InspectorView.screencastSplitViewState','Inspector.drawerSplitView':'Inspector.drawerSplitViewState','layerDetailsSplitView':'layerDetailsSplitViewState','networkSidebarWidth':'networkPanelSplitViewState','sourcesSidebarWidth':'sourcesPanelSplitViewState','scriptsPanelNavigatorSidebarWidth':'sourcesPanelNavigatorSplitViewState','sourcesPanelSplitSidebarRatio':'sourcesPanelDebuggerSidebarSplitViewState','timeline-details':'timelinePanelDetailsSplitViewState','timeline-split':'timelinePanelRecorsSplitViewState','timeline-view':'timelinePanelTimelineStackSplitViewState','auditsSidebarWidth':'auditsPanelSplitViewState','layersSidebarWidth':'layersPanelSplitViewState','profilesSidebarWidth':'profilesPanelSplitViewState','resourcesSidebarWidth':'resourcesPanelSplitViewState'};const empty={};for(const oldName in settingNames){const newName=settingNames[oldName];const oldNameH=oldName+'H';let newValue=null;const oldSetting=Common.settings.createSetting(oldName,empty);if(oldSetting.get()!==empty){newValue=newValue||{};newValue.vertical={};newValue.vertical.size=oldSetting.get();oldSetting.remove();}
const oldSettingH=Common.settings.createSetting(oldNameH,empty);if(oldSettingH.get()!==empty){newValue=newValue||{};newValue.horizontal={};newValue.horizontal.size=oldSettingH.get();oldSettingH.remove();}
if(newValue){Common.settings.createSetting(newName,{}).set(newValue);}}}
_updateVersionFrom5To6(){const settingNames={'debuggerSidebarHidden':'sourcesPanelSplitViewState','navigatorHidden':'sourcesPanelNavigatorSplitViewState','WebInspector.Drawer.showOnLoad':'Inspector.drawerSplitViewState'};for(const oldName in settingNames){const oldSetting=Common.settings.createSetting(oldName,null);if(oldSetting.get()===null){oldSetting.remove();continue;}
const newName=settingNames[oldName];const invert=oldName==='WebInspector.Drawer.showOnLoad';const hidden=oldSetting.get()!==invert;oldSetting.remove();const showMode=hidden?'OnlyMain':'Both';const newSetting=Common.settings.createSetting(newName,{});const newValue=newSetting.get()||{};newValue.vertical=newValue.vertical||{};newValue.vertical.showMode=showMode;newValue.horizontal=newValue.horizontal||{};newValue.horizontal.showMode=showMode;newSetting.set(newValue);}}
_updateVersionFrom6To7(){const settingNames={'sourcesPanelNavigatorSplitViewState':'sourcesPanelNavigatorSplitViewState','elementsPanelSplitViewState':'elementsPanelSplitViewState','stylesPaneSplitViewState':'stylesPaneSplitViewState','sourcesPanelDebuggerSidebarSplitViewState':'sourcesPanelDebuggerSidebarSplitViewState'};const empty={};for(const name in settingNames){const setting=Common.settings.createSetting(name,empty);const value=setting.get();if(value===empty){continue;}
if(value.vertical&&value.vertical.size&&value.vertical.size<1){value.vertical.size=0;}
if(value.horizontal&&value.horizontal.size&&value.horizontal.size<1){value.horizontal.size=0;}
setting.set(value);}}
_updateVersionFrom7To8(){}
_updateVersionFrom8To9(){const settingNames=['skipStackFramesPattern','workspaceFolderExcludePattern'];for(let i=0;i<settingNames.length;++i){const setting=Common.settings.createSetting(settingNames[i],'');let value=setting.get();if(!value){return;}
if(typeof value==='string'){value=[value];}
for(let j=0;j<value.length;++j){if(typeof value[j]==='string'){value[j]={pattern:value[j]};}}
setting.set(value);}}
_updateVersionFrom9To10(){if(!window.localStorage){return;}
for(const key in window.localStorage){if(key.startsWith('revision-history')){window.localStorage.removeItem(key);}}}
_updateVersionFrom10To11(){const oldSettingName='customDevicePresets';const newSettingName='customEmulatedDeviceList';const oldSetting=Common.settings.createSetting(oldSettingName,undefined);const list=oldSetting.get();if(!Array.isArray(list)){return;}
const newList=[];for(let i=0;i<list.length;++i){const value=list[i];const device={};device['title']=value['title'];device['type']='unknown';device['user-agent']=value['userAgent'];device['capabilities']=[];if(value['touch']){device['capabilities'].push('touch');}
if(value['mobile']){device['capabilities'].push('mobile');}
device['screen']={};device['screen']['vertical']={width:value['width'],height:value['height']};device['screen']['horizontal']={width:value['height'],height:value['width']};device['screen']['device-pixel-ratio']=value['deviceScaleFactor'];device['modes']=[];device['show-by-default']=true;device['show']='Default';newList.push(device);}
if(newList.length){Common.settings.createSetting(newSettingName,[]).set(newList);}
oldSetting.remove();}
_updateVersionFrom11To12(){this._migrateSettingsFromLocalStorage();}
_updateVersionFrom12To13(){this._migrateSettingsFromLocalStorage();Common.settings.createSetting('timelineOverviewMode','').remove();}
_updateVersionFrom13To14(){const defaultValue={'throughput':-1,'latency':0};Common.settings.createSetting('networkConditions',defaultValue).set(defaultValue);}
_updateVersionFrom14To15(){const setting=Common.settings.createLocalSetting('workspaceExcludedFolders',{});const oldValue=setting.get();const newValue={};for(const fileSystemPath in oldValue){newValue[fileSystemPath]=[];for(const entry of oldValue[fileSystemPath]){newValue[fileSystemPath].push(entry.path);}}
setting.set(newValue);}
_updateVersionFrom15To16(){const setting=Common.settings.createSetting('InspectorView.panelOrder',{});const tabOrders=setting.get();for(const key of Object.keys(tabOrders)){tabOrders[key]=(tabOrders[key]+1)*10;}
setting.set(tabOrders);}
_updateVersionFrom16To17(){const setting=Common.settings.createSetting('networkConditionsCustomProfiles',[]);const oldValue=setting.get();const newValue=[];if(Array.isArray(oldValue)){for(const preset of oldValue){if(typeof preset.title==='string'&&typeof preset.value==='object'&&typeof preset.value.throughput==='number'&&typeof preset.value.latency==='number'){newValue.push({title:preset.title,value:{download:preset.value.throughput,upload:preset.value.throughput,latency:preset.value.latency}});}}}
setting.set(newValue);}
_updateVersionFrom17To18(){const setting=Common.settings.createLocalSetting('workspaceExcludedFolders',{});const oldValue=setting.get();const newValue={};for(const oldKey in oldValue){let newKey=oldKey.replace(/\\/g,'/');if(!newKey.startsWith('file://')){if(newKey.startsWith('/')){newKey='file://'+newKey;}else{newKey='file:///'+newKey;}}
newValue[newKey]=oldValue[oldKey];}
setting.set(newValue);}
_updateVersionFrom18To19(){const defaultColumns={status:true,type:true,initiator:true,size:true,time:true};const visibleColumnSettings=Common.settings.createSetting('networkLogColumnsVisibility',defaultColumns);const visibleColumns=visibleColumnSettings.get();visibleColumns.name=true;visibleColumns.timeline=true;const configs={};for(const columnId in visibleColumns){if(!visibleColumns.hasOwnProperty(columnId)){continue;}
configs[columnId.toLowerCase()]={visible:visibleColumns[columnId]};}
const newSetting=Common.settings.createSetting('networkLogColumns',{});newSetting.set(configs);visibleColumnSettings.remove();}
_updateVersionFrom19To20(){const oldSetting=Common.settings.createSetting('InspectorView.panelOrder',{});const newSetting=Common.settings.createSetting('panel-tabOrder',{});newSetting.set(oldSetting.get());oldSetting.remove();}
_updateVersionFrom20To21(){const networkColumns=Common.settings.createSetting('networkLogColumns',{});const columns=(networkColumns.get());delete columns['timeline'];delete columns['waterfall'];networkColumns.set(columns);}
_updateVersionFrom21To22(){const breakpointsSetting=Common.settings.createLocalSetting('breakpoints',[]);const breakpoints=breakpointsSetting.get();for(const breakpoint of breakpoints){breakpoint['url']=breakpoint['sourceFileId'];delete breakpoint['sourceFileId'];}
breakpointsSetting.set(breakpoints);}
_updateVersionFrom22To23(){}
_updateVersionFrom23To24(){const oldSetting=Common.settings.createSetting('searchInContentScripts',false);const newSetting=Common.settings.createSetting('searchInAnonymousAndContentScripts',false);newSetting.set(oldSetting.get());oldSetting.remove();}
_updateVersionFrom24To25(){const defaultColumns={status:true,type:true,initiator:true,size:true,time:true};const networkLogColumnsSetting=Common.settings.createSetting('networkLogColumns',defaultColumns);const columns=networkLogColumnsSetting.get();delete columns.product;networkLogColumnsSetting.set(columns);}
_updateVersionFrom25To26(){const oldSetting=Common.settings.createSetting('messageURLFilters',{});const urls=Object.keys(oldSetting.get());const textFilter=urls.map(url=>`-url:${url}`).join(' ');if(textFilter){const textFilterSetting=Common.settings.createSetting('console.textFilter','');const suffix=textFilterSetting.get()?` ${textFilterSetting.get()}`:'';textFilterSetting.set(`${textFilter}${suffix}`);}
oldSetting.remove();}
_updateVersionFrom26To27(){function renameKeyInObjectSetting(settingName,from,to){const setting=Common.settings.createSetting(settingName,{});const value=setting.get();if(from in value){value[to]=value[from];delete value[from];setting.set(value);}}
function renameInStringSetting(settingName,from,to){const setting=Common.settings.createSetting(settingName,'');const value=setting.get();if(value===from){setting.set(to);}}
renameKeyInObjectSetting('panel-tabOrder','audits2','audits');renameKeyInObjectSetting('panel-closeableTabs','audits2','audits');renameInStringSetting('panel-selectedTab','audits2','audits');}
_updateVersionFrom27To28(){const setting=Common.settings.createSetting('uiTheme','systemPreferred');if(setting.get()==='default'){setting.set('systemPreferred');}}
_migrateSettingsFromLocalStorage(){const localSettings=new Set(['advancedSearchConfig','breakpoints','consoleHistory','domBreakpoints','eventListenerBreakpoints','fileSystemMapping','lastSelectedSourcesSidebarPaneTab','previouslyViewedFiles','savedURLs','watchExpressions','workspaceExcludedFolders','xhrBreakpoints']);if(!window.localStorage){return;}
for(const key in window.localStorage){if(localSettings.has(key)){continue;}
const value=window.localStorage[key];window.localStorage.removeItem(key);Common.settings._globalStorage[key]=value;}}
_clearBreakpointsWhenTooMany(breakpointsSetting,maxBreakpointsCount){if(breakpointsSetting.get().length>maxBreakpointsCount){breakpointsSetting.set([]);}}}
export const SettingStorageType={Global:Symbol('Global'),Local:Symbol('Local'),Session:Symbol('Session')};export function moduleSetting(settingName){return Common.settings.moduleSetting(settingName);}
export function settingForTest(settingName){return Common.settings.settingForTest(settingName);}
self.Common=self.Common||{};Common=Common||{};Common.Settings=Settings;Common.SettingsStorage=SettingsStorage;Common.Setting=Setting;Common.RegExpSetting=RegExpSetting;Common.settingForTest=settingForTest;Common.VersionController=VersionController;Common.moduleSetting=moduleSetting;Common.SettingStorageType=SettingStorageType;Common.settings;import{ContentProvider,SearchMatch}from'./ContentProvider.js';import{ResourceType}from'./ResourceType.js';export class StaticContentProvider{constructor(contentURL,contentType,lazyContent){this._contentURL=contentURL;this._contentType=contentType;this._lazyContent=lazyContent;}
static fromString(contentURL,contentType,content){const lazyContent=()=>Promise.resolve({content,isEncoded:false});return new StaticContentProvider(contentURL,contentType,lazyContent);}
contentURL(){return this._contentURL;}
contentType(){return this._contentType;}
contentEncoded(){return Promise.resolve(false);}
requestContent(){return this._lazyContent();}
async searchInContent(query,caseSensitive,isRegex){const{content}=(await this._lazyContent());return content?ContentProvider.performSearchInContent(content,query,caseSensitive,isRegex):[];}}
self.Common=self.Common||{};Common=Common||{};Common.StaticContentProvider=StaticContentProvider;export class OutputStream{async write(data){}
async close(){}}
export class StringOutputStream{constructor(){this._data='';}
async write(chunk){this._data+=chunk;}
async close(){}
data(){return this._data;}}
self.Common=self.Common||{};Common=Common||{};Common.OutputStream=OutputStream;Common.StringOutputStream=StringOutputStream;import{Trie}from'./Trie.js';export class TextDictionary{constructor(){this._words=new Map();this._index=new Trie();}
addWord(word){let count=this._words.get(word)||0;++count;this._words.set(word,count);this._index.add(word);}
removeWord(word){let count=this._words.get(word)||0;if(!count){return;}
if(count===1){this._words.delete(word);this._index.remove(word);return;}
--count;this._words.set(word,count);}
wordsWithPrefix(prefix){return this._index.words(prefix);}
hasWord(word){return this._words.has(word);}
wordCount(word){return this._words.get(word)||0;}
reset(){this._words.clear();this._index.clear();}}
self.Common=self.Common||{};Common=Common||{};Common.TextDictionary=TextDictionary;export class Throttler{constructor(timeout){this._timeout=timeout;this._isRunningProcess=false;this._asSoonAsPossible=false;this._process=null;this._lastCompleteTime=0;this._schedulePromise=new Promise(fulfill=>{this._scheduleResolve=fulfill;});}
_processCompleted(){this._lastCompleteTime=this._getTime();this._isRunningProcess=false;if(this._process){this._innerSchedule(false);}
this._processCompletedForTests();}
_processCompletedForTests(){}
_onTimeout(){delete this._processTimeout;this._asSoonAsPossible=false;this._isRunningProcess=true;Promise.resolve().then(this._process).catch(console.error.bind(console)).then(this._processCompleted.bind(this)).then(this._scheduleResolve);this._schedulePromise=new Promise(fulfill=>{this._scheduleResolve=fulfill;});this._process=null;}
schedule(process,asSoonAsPossible){this._process=process;const hasScheduledTasks=!!this._processTimeout||this._isRunningProcess;const okToFire=this._getTime()-this._lastCompleteTime>this._timeout;asSoonAsPossible=!!asSoonAsPossible||(!hasScheduledTasks&&okToFire);const forceTimerUpdate=asSoonAsPossible&&!this._asSoonAsPossible;this._asSoonAsPossible=this._asSoonAsPossible||asSoonAsPossible;this._innerSchedule(forceTimerUpdate);return this._schedulePromise;}
_innerSchedule(forceTimerUpdate){if(this._isRunningProcess){return;}
if(this._processTimeout&&!forceTimerUpdate){return;}
if(this._processTimeout){this._clearTimeout(this._processTimeout);}
const timeout=this._asSoonAsPossible?0:this._timeout;this._processTimeout=this._setTimeout(this._onTimeout.bind(this),timeout);}
_clearTimeout(timeoutId){clearTimeout(timeoutId);}
_setTimeout(operation,timeout){return setTimeout(operation,timeout);}
_getTime(){return window.performance.now();}}
self.Common=self.Common||{};Common=Common||{};Common.Throttler=Throttler;Common.Throttler.FinishCallback;export class Trie{constructor(){this.clear();}
add(word){let node=this._root;++this._wordsInSubtree[this._root];for(let i=0;i<word.length;++i){const edge=word[i];let next=this._edges[node][edge];if(!next){if(this._freeNodes.length){next=this._freeNodes.pop();}else{next=this._size++;this._isWord.push(false);this._wordsInSubtree.push(0);this._edges.push({__proto__:null});}
this._edges[node][edge]=next;}
++this._wordsInSubtree[next];node=next;}
this._isWord[node]=true;}
remove(word){if(!this.has(word)){return false;}
let node=this._root;--this._wordsInSubtree[this._root];for(let i=0;i<word.length;++i){const edge=word[i];const next=this._edges[node][edge];if(!--this._wordsInSubtree[next]){delete this._edges[node][edge];this._freeNodes.push(next);}
node=next;}
this._isWord[node]=false;return true;}
has(word){let node=this._root;for(let i=0;i<word.length;++i){node=this._edges[node][word[i]];if(!node){return false;}}
return this._isWord[node];}
words(prefix){prefix=prefix||'';let node=this._root;for(let i=0;i<prefix.length;++i){node=this._edges[node][prefix[i]];if(!node){return[];}}
const results=[];this._dfs(node,prefix,results);return results;}
_dfs(node,prefix,results){if(this._isWord[node]){results.push(prefix);}
const edges=this._edges[node];for(const edge in edges){this._dfs(edges[edge],prefix+edge,results);}}
longestPrefix(word,fullWordOnly){let node=this._root;let wordIndex=0;for(let i=0;i<word.length;++i){node=this._edges[node][word[i]];if(!node){break;}
if(!fullWordOnly||this._isWord[node]){wordIndex=i+1;}}
return word.substring(0,wordIndex);}
clear(){this._size=1;this._root=0;this._edges=[{__proto__:null}];this._isWord=[false];this._wordsInSubtree=[0];this._freeNodes=[];}}
self.Common=self.Common||{};Common=Common||{};Common.Trie=Trie;export function UIString(string,vararg){return String.vsprintf(Common.localize(string),Array.prototype.slice.call(arguments,1));}
export function serializeUIString(string,values=[]){const messageParts=[string];const serializedMessage={messageParts,values};return JSON.stringify(serializedMessage);}
export function deserializeUIString(serializedMessage){if(!serializedMessage){return{};}
return JSON.parse(serializedMessage);}
export function localize(string){return string;}
export class UIStringFormat{constructor(format){this._localizedFormat=localize(format);this._tokenizedFormat=String.tokenizeFormatString(this._localizedFormat,String.standardFormatters);}
static _append(a,b){return a+b;}
format(vararg){return String.format(this._localizedFormat,arguments,String.standardFormatters,'',UIStringFormat._append,this._tokenizedFormat).formattedResult;}}
const _substitutionStrings=new WeakMap();export function ls(strings,vararg){if(typeof strings==='string'){return strings;}
let substitutionString=_substitutionStrings.get(strings);if(!substitutionString){substitutionString=strings.join('%s');_substitutionStrings.set(strings,substitutionString);}
return UIString(substitutionString,...Array.prototype.slice.call(arguments,1));}
self.ls=ls;self.Common=self.Common||{};Common=Common||{};Common.UIStringFormat=UIStringFormat;Common.UIString=UIString;Common.serializeUIString=serializeUIString;Common.deserializeUIString=deserializeUIString;Common.localize=localize;export class WorkerWrapper{constructor(appName){let url=appName+'.js';url+=Root.Runtime.queryParamsString();this._workerPromise=new Promise(fulfill=>{this._worker=new Worker(url);this._worker.onmessage=onMessage.bind(this);function onMessage(event){console.assert(event.data==='workerReady');this._worker.onmessage=null;fulfill(this._worker);this._worker=null;}});}
postMessage(message){this._workerPromise.then(worker=>{if(!this._disposed){worker.postMessage(message);}});}
dispose(){this._disposed=true;this._workerPromise.then(worker=>worker.terminate());}
terminate(){this.dispose();}
set onmessage(listener){this._workerPromise.then(worker=>worker.onmessage=listener);}
set onerror(listener){this._workerPromise.then(worker=>worker.onerror=listener);}}
self.Common=self.Common||{};Common=Common||{};Common.Worker=WorkerWrapper;const _loadedScripts={};(function(){const baseUrl=self.location?self.location.origin+self.location.pathname:'';self._importScriptPathPrefix=baseUrl.substring(0,baseUrl.lastIndexOf('/')+1);})();const REMOTE_MODULE_FALLBACK_REVISION='@010ddcfda246975d194964ccf20038ebbdec6084';class Runtime{constructor(descriptors){this._modules=[];this._modulesMap={};this._extensions=[];this._cachedTypeClasses={};this._descriptorsMap={};for(let i=0;i<descriptors.length;++i){this._registerModule(descriptors[i]);}}
static _loadResourcePromise(url,asBinary){return new Promise(load);function load(fulfill,reject){const xhr=new XMLHttpRequest();xhr.open('GET',url,true);if(asBinary){xhr.responseType='arraybuffer';}
xhr.onreadystatechange=onreadystatechange;function onreadystatechange(e){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
const{response}=e.target;const text=asBinary?new TextDecoder().decode(response):response;const status=/^HTTP\/1.1 404/.test(text)?404:xhr.status;if([0,200,304].indexOf(status)===-1)
{reject(new Error('While loading from url '+url+' server responded with a status of '+status));}else{fulfill(response);}}
xhr.send(null);}}
static loadResourcePromise(url){return Runtime._loadResourcePromise(url,false);}
static loadBinaryResourcePromise(url){return Runtime._loadResourcePromise(url,true);}
static loadResourcePromiseWithFallback(url){return Runtime.loadResourcePromise(url).catch(err=>{const urlWithFallbackVersion=url.replace(/@[0-9a-f]{40}/,REMOTE_MODULE_FALLBACK_REVISION);if(urlWithFallbackVersion===url||!url.includes('audits_worker_module')){throw err;}
return Runtime.loadResourcePromise(urlWithFallbackVersion);});}
static normalizePath(path){if(path.indexOf('..')===-1&&path.indexOf('.')===-1){return path;}
const normalizedSegments=[];const segments=path.split('/');for(let i=0;i<segments.length;i++){const segment=segments[i];if(segment==='.'){continue;}else if(segment==='..'){normalizedSegments.pop();}else if(segment){normalizedSegments.push(segment);}}
let normalizedPath=normalizedSegments.join('/');if(normalizedPath[normalizedPath.length-1]==='/'){return normalizedPath;}
if(path[0]==='/'&&normalizedPath){normalizedPath='/'+normalizedPath;}
if((path[path.length-1]==='/')||(segments[segments.length-1]==='.')||(segments[segments.length-1]==='..')){normalizedPath=normalizedPath+'/';}
return normalizedPath;}
static getResourceURL(scriptName,base){const sourceURL=(base||self._importScriptPathPrefix)+scriptName;const schemaIndex=sourceURL.indexOf('://')+3;let pathIndex=sourceURL.indexOf('/',schemaIndex);if(pathIndex===-1){pathIndex=sourceURL.length;}
return sourceURL.substring(0,pathIndex)+Runtime.normalizePath(sourceURL.substring(pathIndex));}
static _loadScriptsPromise(scriptNames,base){const promises=[];const urls=[];const sources=new Array(scriptNames.length);let scriptToEval=0;for(let i=0;i<scriptNames.length;++i){const scriptName=scriptNames[i];const sourceURL=Runtime.getResourceURL(scriptName,base);if(_loadedScripts[sourceURL]){continue;}
urls.push(sourceURL);const loadResourcePromise=base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);promises.push(loadResourcePromise.then(scriptSourceLoaded.bind(null,i),scriptSourceLoaded.bind(null,i,undefined)));}
return Promise.all(promises).then(undefined);function scriptSourceLoaded(scriptNumber,scriptSource){sources[scriptNumber]=scriptSource||'';while(typeof sources[scriptToEval]!=='undefined'){evaluateScript(urls[scriptToEval],sources[scriptToEval]);++scriptToEval;}}
function evaluateScript(sourceURL,scriptSource){_loadedScripts[sourceURL]=true;if(!scriptSource){console.error('Empty response arrived for script \''+sourceURL+'\'');return;}
self.eval(scriptSource+'\n//# sourceURL='+sourceURL);}}
static _loadResourceIntoCache(url,appendSourceURL){return Runtime.loadResourcePromise(url).then(cacheResource.bind(this,url),cacheResource.bind(this,url,undefined));function cacheResource(path,content){if(!content){console.error('Failed to load resource: '+path);return;}
const sourceURL=appendSourceURL?Runtime.resolveSourceURL(path):'';Runtime.cachedResources[path]=content+sourceURL;}}
static async appStarted(){return Runtime._appStartedPromise;}
static async startApplication(appName){console.timeStamp('Root.Runtime.startApplication');const allDescriptorsByName={};for(let i=0;i<Root.allDescriptors.length;++i){const d=Root.allDescriptors[i];allDescriptorsByName[d['name']]=d;}
if(!Root.applicationDescriptor){let data=await Runtime.loadResourcePromise(appName+'.json');Root.applicationDescriptor=JSON.parse(data);let descriptor=Root.applicationDescriptor;while(descriptor.extends){data=await Runtime.loadResourcePromise(descriptor.extends+'.json');descriptor=JSON.parse(data);Root.applicationDescriptor.modules=descriptor.modules.concat(Root.applicationDescriptor.modules);}}
const configuration=Root.applicationDescriptor.modules;const moduleJSONPromises=[];const coreModuleNames=[];for(let i=0;i<configuration.length;++i){const descriptor=configuration[i];const name=descriptor['name'];const moduleJSON=allDescriptorsByName[name];if(moduleJSON){moduleJSONPromises.push(Promise.resolve(moduleJSON));}else{moduleJSONPromises.push(Runtime.loadResourcePromise(name+'/module.json').then(JSON.parse.bind(JSON)));}
if(descriptor['type']==='autostart'){coreModuleNames.push(name);}}
const moduleDescriptors=await Promise.all(moduleJSONPromises);for(let i=0;i<moduleDescriptors.length;++i){moduleDescriptors[i].name=configuration[i]['name'];moduleDescriptors[i].condition=configuration[i]['condition'];moduleDescriptors[i].remote=configuration[i]['type']==='remote';}
self.runtime=new Runtime(moduleDescriptors);if(coreModuleNames){await self.runtime._loadAutoStartModules(coreModuleNames);}
Runtime._appStartedPromiseCallback();}
static startWorker(appName){return Root.Runtime.startApplication(appName).then(sendWorkerReady);function sendWorkerReady(){self.postMessage('workerReady');}}
static queryParam(name){return Runtime._queryParamsObject.get(name);}
static queryParamsString(){return location.search;}
static _experimentsSetting(){try{return(JSON.parse(self.localStorage&&self.localStorage['experiments']?self.localStorage['experiments']:'{}'));}catch(e){console.error('Failed to parse localStorage[\'experiments\']');return{};}}
static _assert(value,message){if(value){return;}
Runtime._originalAssert.call(Runtime._console,value,message+' '+new Error().stack);}
static setPlatform(platform){Runtime._platform=platform;}
static _isDescriptorEnabled(descriptor){const activatorExperiment=descriptor['experiment'];if(activatorExperiment==='*'){return Runtime.experiments.supportEnabled();}
if(activatorExperiment&&activatorExperiment.startsWith('!')&&Runtime.experiments.isEnabled(activatorExperiment.substring(1))){return false;}
if(activatorExperiment&&!activatorExperiment.startsWith('!')&&!Runtime.experiments.isEnabled(activatorExperiment)){return false;}
const condition=descriptor['condition'];if(condition&&!condition.startsWith('!')&&!Runtime.queryParam(condition)){return false;}
if(condition&&condition.startsWith('!')&&Runtime.queryParam(condition.substring(1))){return false;}
return true;}
static resolveSourceURL(path){let sourceURL=self.location.href;if(self.location.search){sourceURL=sourceURL.replace(self.location.search,'');}
sourceURL=sourceURL.substring(0,sourceURL.lastIndexOf('/')+1)+path;return'\n/*# sourceURL='+sourceURL+' */';}
static setL10nCallback(localizationFunction){Runtime._l10nCallback=localizationFunction;}
useTestBase(){Runtime._remoteBase='http://localhost:8000/inspector-sources/';if(Runtime.queryParam('debugFrontend')){Runtime._remoteBase+='debug/';}}
module(moduleName){return this._modulesMap[moduleName];}
_registerModule(descriptor){const module=new Runtime.Module(this,descriptor);this._modules.push(module);this._modulesMap[descriptor['name']]=module;}
loadModulePromise(moduleName){return this._modulesMap[moduleName]._loadPromise();}
_loadAutoStartModules(moduleNames){const promises=[];for(let i=0;i<moduleNames.length;++i){promises.push(this.loadModulePromise(moduleNames[i]));}
return Promise.all(promises);}
_checkExtensionApplicability(extension,predicate){if(!predicate){return false;}
const contextTypes=extension.descriptor().contextTypes;if(!contextTypes){return true;}
for(let i=0;i<contextTypes.length;++i){const contextType=this._resolve(contextTypes[i]);const isMatching=!!contextType&&predicate(contextType);if(isMatching){return true;}}
return false;}
isExtensionApplicableToContext(extension,context){if(!context){return true;}
return this._checkExtensionApplicability(extension,isInstanceOf);function isInstanceOf(targetType){return context instanceof targetType;}}
isExtensionApplicableToContextTypes(extension,currentContextTypes){if(!extension.descriptor().contextTypes){return true;}
return this._checkExtensionApplicability(extension,currentContextTypes?isContextTypeKnown:null);function isContextTypeKnown(targetType){return currentContextTypes.has(targetType);}}
extensions(type,context,sortByTitle){return this._extensions.filter(filter).sort(sortByTitle?titleComparator:orderComparator);function filter(extension){if(extension._type!==type&&extension._typeClass()!==type){return false;}
if(!extension.enabled()){return false;}
return!context||extension.isApplicable(context);}
function orderComparator(extension1,extension2){const order1=extension1.descriptor()['order']||0;const order2=extension2.descriptor()['order']||0;return order1-order2;}
function titleComparator(extension1,extension2){const title1=extension1.title()||'';const title2=extension2.title()||'';return title1.localeCompare(title2);}}
extension(type,context){return this.extensions(type,context)[0]||null;}
allInstances(type,context){return Promise.all(this.extensions(type,context).map(extension=>extension.instance()));}
_resolve(typeName){if(!this._cachedTypeClasses[typeName]){const path=typeName.split('.');let object=self;for(let i=0;object&&(i<path.length);++i){object=object[path[i]];}
if(object){this._cachedTypeClasses[typeName]=(object);}}
return this._cachedTypeClasses[typeName]||null;}
sharedInstance(constructorFunction){if(Runtime._instanceSymbol in constructorFunction&&Object.getOwnPropertySymbols(constructorFunction).includes(Runtime._instanceSymbol)){return constructorFunction[Runtime._instanceSymbol];}
const instance=new constructorFunction();constructorFunction[Runtime._instanceSymbol]=instance;return instance;}}
Runtime._queryParamsObject=new URLSearchParams(Runtime.queryParamsString());Runtime._instanceSymbol=Symbol('instance');Runtime.cachedResources={__proto__:null};Runtime._console=console;Runtime._originalAssert=console.assert;Runtime._platform='';class ModuleDescriptor{constructor(){this.name;this.extensions;this.dependencies;this.scripts;this.modules;this.condition;this.remote;}}
class RuntimeExtensionDescriptor{constructor(){this.type;this.className;this.factoryName;this.contextTypes;}}
const specialCases={'sdk':'SDK','js_sdk':'JSSDK','browser_sdk':'BrowserSDK','ui':'UI','object_ui':'ObjectUI','javascript_metadata':'JavaScriptMetadata','perf_ui':'PerfUI','har_importer':'HARImporter','sdk_test_runner':'SDKTestRunner','cpu_profiler_test_runner':'CPUProfilerTestRunner'};class Module{constructor(manager,descriptor){this._manager=manager;this._descriptor=descriptor;this._name=descriptor.name;this._extensions=[];this._extensionsByClassName=new Map();const extensions=(descriptor.extensions);for(let i=0;extensions&&i<extensions.length;++i){const extension=new Extension(this,extensions[i]);this._manager._extensions.push(extension);this._extensions.push(extension);}
this._loadedForTest=false;}
name(){return this._name;}
enabled(){return Runtime._isDescriptorEnabled(this._descriptor);}
resource(name){const fullName=this._name+'/'+name;const content=Runtime.cachedResources[fullName];if(!content){throw new Error(fullName+' not preloaded. Check module.json');}
return content;}
_loadPromise(){if(!this.enabled()){return Promise.reject(new Error('Module '+this._name+' is not enabled'));}
if(this._pendingLoadPromise){return this._pendingLoadPromise;}
const dependencies=this._descriptor.dependencies;const dependencyPromises=[];for(let i=0;dependencies&&i<dependencies.length;++i){dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());}
this._pendingLoadPromise=Promise.all(dependencyPromises).then(this._loadResources.bind(this)).then(this._loadModules.bind(this)).then(this._loadScripts.bind(this)).then(()=>this._loadedForTest=true);return this._pendingLoadPromise;}
_loadResources(){const resources=this._descriptor['resources'];if(!resources||!resources.length){return Promise.resolve();}
const promises=[];for(let i=0;i<resources.length;++i){const url=this._modularizeURL(resources[i]);const isHtml=url.endsWith('.html');promises.push(Runtime._loadResourceIntoCache(url,!isHtml));}
return Promise.all(promises).then(undefined);}
_loadModules(){if(!this._descriptor.modules||!this._descriptor.modules.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};if(typeof WorkerGlobalScope!=='undefined'&&self instanceof WorkerGlobalScope){return Promise.resolve();}
return eval(`import('./${this._name}/${this._name}.js')`);}
_loadScripts(){if(!this._descriptor.scripts||!this._descriptor.scripts.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};return Runtime._loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL,this),this._remoteBase());}
_computeNamespace(){return specialCases[this._name]||this._name.split('_').map(a=>a.substring(0,1).toUpperCase()+a.substring(1)).join('');}
_modularizeURL(resourceName){return Runtime.normalizePath(this._name+'/'+resourceName);}
_remoteBase(){return!Runtime.queryParam('debugFrontend')&&this._descriptor.remote&&Runtime._remoteBase||undefined;}
fetchResource(resourceName){const base=this._remoteBase();const sourceURL=Runtime.getResourceURL(this._modularizeURL(resourceName),base);return base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);}
substituteURL(value){const base=this._remoteBase()||'';return value.replace(/@url\(([^\)]*?)\)/g,convertURL.bind(this));function convertURL(match,url){return base+this._modularizeURL(url);}}}
class Extension{constructor(module,descriptor){this._module=module;this._descriptor=descriptor;this._type=descriptor.type;this._hasTypeClass=this._type.charAt(0)==='@';this._className=descriptor.className||null;this._factoryName=descriptor.factoryName||null;}
descriptor(){return this._descriptor;}
module(){return this._module;}
enabled(){return this._module.enabled()&&Runtime._isDescriptorEnabled(this.descriptor());}
_typeClass(){if(!this._hasTypeClass){return null;}
return this._module._manager._resolve(this._type.substring(1));}
isApplicable(context){return this._module._manager.isExtensionApplicableToContext(this,context);}
instance(){return this._module._loadPromise().then(this._createInstance.bind(this));}
canInstantiate(){return!!(this._className||this._factoryName);}
_createInstance(){const className=this._className||this._factoryName;if(!className){throw new Error('Could not instantiate extension with no class');}
const constructorFunction=self.eval((className));if(!(constructorFunction instanceof Function)){throw new Error('Could not instantiate: '+className);}
if(this._className){return this._module._manager.sharedInstance(constructorFunction);}
return new constructorFunction(this);}
title(){const title=this._descriptor['title-'+Runtime._platform]||this._descriptor['title'];if(title&&Runtime._l10nCallback){return Runtime._l10nCallback(title);}
return title;}
hasContextType(contextType){const contextTypes=this.descriptor().contextTypes;if(!contextTypes){return false;}
for(let i=0;i<contextTypes.length;++i){if(contextType===this._module._manager._resolve(contextTypes[i])){return true;}}
return false;}}
class ExperimentsSupport{constructor(){this._supportEnabled=Runtime.queryParam('experiments')!==null;this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled=new Set();}
allConfigurableExperiments(){const result=[];for(let i=0;i<this._experiments.length;i++){const experiment=this._experiments[i];if(!this._enabledTransiently[experiment.name]){result.push(experiment);}}
return result;}
supportEnabled(){return this._supportEnabled;}
_setExperimentsSetting(value){if(!self.localStorage){return;}
self.localStorage['experiments']=JSON.stringify(value);}
register(experimentName,experimentTitle,hidden){Runtime._assert(!this._experimentNames[experimentName],'Duplicate registration of experiment '+experimentName);this._experimentNames[experimentName]=true;this._experiments.push(new Runtime.Experiment(this,experimentName,experimentTitle,!!hidden));}
isEnabled(experimentName){this._checkExperiment(experimentName);if(Runtime._experimentsSetting()[experimentName]===false){return false;}
if(this._enabledTransiently[experimentName]){return true;}
if(this._serverEnabled.has(experimentName)){return true;}
if(!this.supportEnabled()){return false;}
return!!Runtime._experimentsSetting()[experimentName];}
setEnabled(experimentName,enabled){this._checkExperiment(experimentName);const experimentsSetting=Runtime._experimentsSetting();experimentsSetting[experimentName]=enabled;this._setExperimentsSetting(experimentsSetting);}
setDefaultExperiments(experimentNames){for(let i=0;i<experimentNames.length;++i){this._checkExperiment(experimentNames[i]);this._enabledTransiently[experimentNames[i]]=true;}}
setServerEnabledExperiments(experimentNames){for(const experiment of experimentNames){this._checkExperiment(experiment);this._serverEnabled.add(experiment);}}
enableForTest(experimentName){this._checkExperiment(experimentName);this._enabledTransiently[experimentName]=true;}
clearForTest(){this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled.clear();}
cleanUpStaleExperiments(){const experimentsSetting=Runtime._experimentsSetting();const cleanedUpExperimentSetting={};for(let i=0;i<this._experiments.length;++i){const experimentName=this._experiments[i].name;if(experimentsSetting[experimentName]){cleanedUpExperimentSetting[experimentName]=true;}}
this._setExperimentsSetting(cleanedUpExperimentSetting);}
_checkExperiment(experimentName){Runtime._assert(this._experimentNames[experimentName],'Unknown experiment '+experimentName);}}
class Experiment{constructor(experiments,name,title,hidden){this.name=name;this.title=title;this.hidden=hidden;this._experiments=experiments;}
isEnabled(){return this._experiments.isEnabled(this.name);}
setEnabled(enabled){this._experiments.setEnabled(this.name,enabled);}}
Runtime.experiments=new ExperimentsSupport();Runtime._appStartedPromiseCallback;Runtime._appStartedPromise=new Promise(fulfil=>Runtime._appStartedPromiseCallback=fulfil);Runtime._l10nCallback;Runtime._remoteBase;(function validateRemoteBase(){if(location.href.startsWith('devtools://devtools/bundled/')&&Runtime.queryParam('remoteBase')){const versionMatch=/\/serve_file\/(@[0-9a-zA-Z]+)\/?$/.exec(Runtime.queryParam('remoteBase'));if(versionMatch){Runtime._remoteBase=`${location.origin}/remote/serve_file/${versionMatch[1]}/`;}}})();self.Root=self.Root||{};Root=Root||{};Root.allDescriptors=[];Root.applicationDescriptor=undefined;Root.Runtime=Runtime;Root.runtime;Root.Runtime.ModuleDescriptor=ModuleDescriptor;Root.Runtime.ExtensionDescriptor=RuntimeExtensionDescriptor;Root.Runtime.Extension=Extension;Root.Runtime.Module=Module;Root.Runtime.ExperimentsSupport=ExperimentsSupport;Root.Runtime.Experiment=Experiment;Root.allDescriptors.push(...[{"name":"worker_service"},{"name":"audits_worker","skip_compilation":["lighthouse/lighthouse-dt-bundle.js"],"modules":[],"dependencies":["worker_service"],"extensions":[{"factoryName":"AuditsService","type":"@Service","name":"AuditsService"}],"scripts":["audits_worker_module.js"]}]);Root.applicationDescriptor={"has_html":false,"modules":[{"type":"remote","name":"audits_worker"},{"type":"autostart","name":"worker_service"}]};self['WorkerService']=self['WorkerService']||{};function Service(){}
Service.prototype={dispose(){},setNotify(notify){}};ServiceDispatcher=class{constructor(port){this._objects=new Map();this._lastObjectId=1;this._port=port;this._port.setHandlers(this._dispatchMessageWrapped.bind(this),this._connectionClosed.bind(this));}
_dispatchMessageWrapped(data){let message;try{message=JSON.parse(data);if(!(message instanceof Object)){this._sendErrorResponse(message['id'],'Malformed message');return;}
this._dispatchMessage(message);}catch(e){this._sendErrorResponse(message?message['id']:'',e.toString()+' '+e.stack);}}
_dispatchMessage(message){const domainAndMethod=message['method'].split('.');const serviceName=domainAndMethod[0];const method=domainAndMethod[1];if(method==='create'){const extensions=self.runtime.extensions(Service).filter(extension=>extension.descriptor()['name']===serviceName);if(!extensions.length){this._sendErrorResponse(message['id'],'Could not resolve service \''+serviceName+'\'');return;}
extensions[0].instance().then(object=>{const id=String(this._lastObjectId++);object.setNotify(this._notify.bind(this,id,serviceName));this._objects.set(id,object);this._sendResponse(message['id'],{id:id});});}else if(method==='dispose'){const object=this._objects.get(message['params']['id']);if(!object){console.error('Could not look up object with id for '+JSON.stringify(message));return;}
this._objects.delete(message['params']['id']);object.dispose().then(()=>this._sendResponse(message['id'],{}));}else{if(!message['params']){console.error('No params in the message: '+JSON.stringify(message));return;}
const object=this._objects.get(message['params']['id']);if(!object){console.error('Could not look up object with id for '+JSON.stringify(message));return;}
const handler=object[method];if(!(handler instanceof Function)){console.error('Handler for \''+method+'\' is missing.');return;}
object[method](message['params']).then(result=>this._sendResponse(message['id'],result));}}
_connectionClosed(){for(const object of this._objects.values()){object.dispose();}
this._objects.clear();}
_notify(objectId,serviceName,method,params){params['id']=objectId;const message={method:serviceName+'.'+method,params:params};this._port.send(JSON.stringify(message));}
_sendResponse(messageId,result){const message={id:messageId,result:result};this._port.send(JSON.stringify(message));}
_sendErrorResponse(messageId,error){const message={id:messageId,error:error};this._port.send(JSON.stringify(message));}};WorkerServicePort=class{constructor(port){this._port=port;this._port.onmessage=this._onMessage.bind(this);this._port.onerror=console.error;}
setHandlers(messageHandler,closeHandler){this._messageHandler=messageHandler;this._closeHandler=closeHandler;}
send(data){this._port.postMessage(data);return Promise.resolve();}
close(){return Promise.resolve();}
_onMessage(event){this._messageHandler(event.data);}};const dispatchers=[];const worker=(self);const servicePort=new WorkerServicePort((worker));dispatchers.push(new ServiceDispatcher(servicePort));;;;self.importScripts('platform/utilities.js');if(!self.Root||!self.Root.Runtime){self.importScripts('Runtime.js');}
Root.Runtime.startWorker('audits_worker');<!--
 * Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com">
    <meta name="referrer" content="no-referrer">
    <script type="module" src="root.js"></script>
    <script defer src="shell.js"></script>
    <script defer src="devtools_app.js"></script>
    <script type="module">Root.Runtime.startApplication('devtools_app');</script>
</head>
<body class="undocked" id="-blink-dev-tools"></body>
</html>
Root.allDescriptors.push(...[{"dependencies":["ui","host"],"extensions":[{"title":"What's New","id":"release-note","className":"Help.ReleaseNoteView","location":"drawer-view","type":"view","order":1,"persistence":"closeable"},{"category":"Appearance","title":"Show What's New after each update","defaultValue":true,"settingName":"help.show-release-note","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show What's New after each update"},{"value":false,"title":"Do not show What's New after each update"}]},{"category":"Help","className":"Help.ReleaseNotesActionDelegate","type":"action","actionId":"help.release-notes","title":"Release notes"},{"order":10,"type":"context-menu-item","location":"mainMenuHelp/default","actionId":"help.release-notes"},{"category":"Help","tags":"bug","title":"Report a DevTools issue","className":"Help.ReportIssueActionDelegate","actionId":"help.report-issue","type":"action"},{"order":11,"type":"context-menu-item","location":"mainMenuHelp/default","actionId":"help.report-issue"},{"className":"Help.HelpLateInitialization","type":"late-initialization"}],"name":"help","scripts":["help_module.js"],"modules":["help.js","HelpImpl.js","ReleaseNoteView.js","ReleaseNoteText.js"]},{"dependencies":["elements"],"extensions":[{"title":"Accessibility","id":"accessibility.view","className":"Accessibility.AccessibilitySidebarView","location":"elements-sidebar","type":"view","order":10,"persistence":"permanent"}],"name":"accessibility","scripts":["accessibility_module.js"],"skip_compilation":["ARIAProperties.js"],"modules":["accessibility.js","AccessibilityModel.js","AccessibilitySidebarView.js","AccessibilityNodeView.js","AccessibilityStrings.js","ARIAAttributesView.js","ARIAMetadata.js","AXBreadcrumbsPane.js"]},{"dependencies":["components","sdk","timeline_model","ui","perf_ui"],"modules":["LayerDetailsView.js","LayerTreeOutline.js","LayerViewHost.js","Layers3DView.js","PaintProfilerView.js","TransformController.js"],"name":"layer_viewer","scripts":["layer_viewer_module.js"]},{"dependencies":["ui","sdk","data_grid"],"modules":["cookie_table.js","CookiesTable.js"],"name":"cookie_table","scripts":[]},{"dependencies":["emulation"],"extensions":[{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"iPhone 4","screen":{"horizontal":{"width":480,"height":320},"device-pixel-ratio":2,"vertical":{"width":320,"height":480}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"iPhone 5/SE","screen":{"horizontal":{"width":568,"outline":{"insets":{"top":25,"right":115,"bottom":28,"left":115},"image":"@url(iPhone5-landscape.svg)"},"height":320},"device-pixel-ratio":2,"vertical":{"width":320,"outline":{"insets":{"top":105,"right":25,"bottom":111,"left":29},"image":"@url(iPhone5-portrait.svg)"},"height":568}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1","type":"phone"},"type":"emulated-device","order":30},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"iPhone 6/7/8","screen":{"horizontal":{"width":667,"outline":{"insets":{"top":28,"right":106,"bottom":28,"left":106},"image":"@url(iPhone6-landscape.svg)"},"height":375},"device-pixel-ratio":2,"vertical":{"width":375,"outline":{"insets":{"top":105,"right":28,"bottom":105,"left":28},"image":"@url(iPhone6-portrait.svg)"},"height":667}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1","type":"phone"},"type":"emulated-device","order":31},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"iPhone 6/7/8 Plus","screen":{"horizontal":{"width":736,"outline":{"insets":{"top":29,"right":109,"bottom":27,"left":109},"image":"@url(iPhone6Plus-landscape.svg)"},"height":414},"device-pixel-ratio":3,"vertical":{"width":414,"outline":{"insets":{"top":107,"right":30,"bottom":111,"left":26},"image":"@url(iPhone6Plus-portrait.svg)"},"height":736}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1","type":"phone"},"type":"emulated-device","order":32},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"iPhone X","screen":{"horizontal":{"width":812,"height":375},"device-pixel-ratio":3,"vertical":{"width":375,"height":812}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1","type":"phone"},"type":"emulated-device","order":33},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"BlackBerry Z30","screen":{"horizontal":{"width":640,"height":360},"device-pixel-ratio":2,"vertical":{"width":360,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Nexus 4","screen":{"horizontal":{"width":640,"height":384},"device-pixel-ratio":2,"vertical":{"width":384,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":25,"right":0,"bottom":48,"left":0},"image":"@url(google-nexus-5-vertical-default-1x.png) 1x, @url(google-nexus-5-vertical-default-2x.png) 2x","orientation":"vertical","title":"default"},{"insets":{"top":80,"right":0,"bottom":48,"left":0},"image":"@url(google-nexus-5-vertical-navigation-1x.png) 1x, @url(google-nexus-5-vertical-navigation-2x.png) 2x","orientation":"vertical","title":"navigation bar"},{"insets":{"top":80,"right":0,"bottom":312,"left":0},"image":"@url(google-nexus-5-vertical-keyboard-1x.png) 1x, @url(google-nexus-5-vertical-keyboard-2x.png) 2x","orientation":"vertical","title":"keyboard"},{"insets":{"top":25,"right":42,"bottom":0,"left":0},"image":"@url(google-nexus-5-horizontal-default-1x.png) 1x, @url(google-nexus-5-horizontal-default-2x.png) 2x","orientation":"horizontal","title":"default"},{"insets":{"top":80,"right":42,"bottom":0,"left":0},"image":"@url(google-nexus-5-horizontal-navigation-1x.png) 1x, @url(google-nexus-5-horizontal-navigation-2x.png) 2x","orientation":"horizontal","title":"navigation bar"},{"insets":{"top":80,"right":42,"bottom":202,"left":0},"image":"@url(google-nexus-5-horizontal-keyboard-1x.png) 1x, @url(google-nexus-5-horizontal-keyboard-2x.png) 2x","orientation":"horizontal","title":"keyboard"}],"title":"Nexus 5","screen":{"horizontal":{"width":640,"height":360},"device-pixel-ratio":3,"vertical":{"width":360,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":24,"right":0,"bottom":48,"left":0},"image":"@url(google-nexus-5x-vertical-default-1x.png) 1x, @url(google-nexus-5x-vertical-default-2x.png) 2x","orientation":"vertical","title":"default"},{"insets":{"top":80,"right":0,"bottom":48,"left":0},"image":"@url(google-nexus-5x-vertical-navigation-1x.png) 1x, @url(google-nexus-5x-vertical-navigation-2x.png) 2x","orientation":"vertical","title":"navigation bar"},{"insets":{"top":80,"right":0,"bottom":342,"left":0},"image":"@url(google-nexus-5x-vertical-keyboard-1x.png) 1x, @url(google-nexus-5x-vertical-keyboard-2x.png) 2x","orientation":"vertical","title":"keyboard"},{"insets":{"top":24,"right":48,"bottom":0,"left":0},"image":"@url(google-nexus-5x-horizontal-default-1x.png) 1x, @url(google-nexus-5x-horizontal-default-2x.png) 2x","orientation":"horizontal","title":"default"},{"insets":{"top":80,"right":48,"bottom":0,"left":0},"image":"@url(google-nexus-5x-horizontal-navigation-1x.png) 1x, @url(google-nexus-5x-horizontal-navigation-2x.png) 2x","orientation":"horizontal","title":"navigation bar"},{"insets":{"top":80,"right":48,"bottom":222,"left":0},"image":"@url(google-nexus-5x-horizontal-keyboard-1x.png) 1x, @url(google-nexus-5x-horizontal-keyboard-2x.png) 2x","orientation":"horizontal","title":"keyboard"}],"title":"Nexus 5X","screen":{"horizontal":{"width":732,"outline":{"insets":{"top":21,"right":98,"bottom":19,"left":88},"image":"@url(Nexus5X-landscape.svg)"},"height":412},"device-pixel-ratio":2.625,"vertical":{"width":412,"outline":{"insets":{"top":88,"right":22,"bottom":98,"left":18},"image":"@url(Nexus5X-portrait.svg)"},"height":732}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 5X Build/OPR4.170623.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Nexus 6","screen":{"horizontal":{"width":732,"height":412},"device-pixel-ratio":3.5,"vertical":{"width":412,"height":732}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 7.1.1; Nexus 6 Build/N6F26U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Nexus 6P","screen":{"horizontal":{"width":732,"outline":{"insets":{"top":17,"right":88,"bottom":17,"left":94},"image":"@url(Nexus6P-landscape.svg)"},"height":412},"device-pixel-ratio":3.5,"vertical":{"width":412,"outline":{"insets":{"top":94,"right":16,"bottom":88,"left":16},"image":"@url(Nexus6P-portrait.svg)"},"height":732}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; Nexus 6P Build/OPP3.170518.006) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Pixel 2","screen":{"horizontal":{"width":731,"height":411},"device-pixel-ratio":2.625,"vertical":{"width":411,"height":731}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device","order":20},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Pixel 2 XL","screen":{"horizontal":{"width":823,"height":411},"device-pixel-ratio":3.5,"vertical":{"width":411,"height":823}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device","order":21},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"LG Optimus L70","screen":{"horizontal":{"width":640,"height":384},"device-pixel-ratio":1.25,"vertical":{"width":384,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Nokia N9","screen":{"horizontal":{"width":854,"height":480},"device-pixel-ratio":1,"vertical":{"width":480,"height":854}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (MeeGo; NokiaN9) AppleWebKit/534.13 (KHTML, like Gecko) NokiaBrowser/8.5.0 Mobile Safari/534.13","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Nokia Lumia 520","screen":{"horizontal":{"width":533,"height":320},"device-pixel-ratio":1.5,"vertical":{"width":320,"height":533}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 520)","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Microsoft Lumia 550","screen":{"horizontal":{"width":640,"height":360},"device-pixel-ratio":2,"vertical":{"width":640,"height":360}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Microsoft Lumia 950","screen":{"horizontal":{"width":640,"height":360},"device-pixel-ratio":4,"vertical":{"width":360,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Galaxy S III","screen":{"horizontal":{"width":640,"height":360},"device-pixel-ratio":2,"vertical":{"width":360,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; Android 4.0; en-us; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Galaxy S5","screen":{"horizontal":{"width":640,"height":360},"device-pixel-ratio":3,"vertical":{"width":360,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36","type":"phone"},"type":"emulated-device","order":10},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"JioPhone 2","screen":{"horizontal":{"width":320,"height":240},"device-pixel-ratio":1,"vertical":{"width":240,"height":320}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Mobile; LYF/F300B/LYF-F300B-001-01-15-130718-i;Android; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.5","type":"phone"},"type":"emulated-device","order":1},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Kindle Fire HDX","screen":{"horizontal":{"width":1280,"height":800},"device-pixel-ratio":2,"vertical":{"width":800,"height":1280}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true","type":"tablet"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"iPad Mini","screen":{"horizontal":{"width":1024,"height":768},"device-pixel-ratio":2,"vertical":{"width":768,"height":1024}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1","type":"tablet"},"type":"emulated-device"},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"iPad","screen":{"horizontal":{"width":1024,"outline":{"insets":{"top":56,"right":116,"bottom":52,"left":112},"image":"@url(iPad-landscape.svg)"},"height":768},"device-pixel-ratio":2,"vertical":{"width":768,"outline":{"insets":{"top":114,"right":55,"bottom":114,"left":52},"image":"@url(iPad-portrait.svg)"},"height":1024}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1","type":"tablet"},"type":"emulated-device","order":40},{"device":{"show-by-default":true,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"iPad Pro","screen":{"horizontal":{"width":1366,"height":1024},"device-pixel-ratio":2,"vertical":{"width":1024,"height":1366}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1","type":"tablet"},"type":"emulated-device","order":41},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Blackberry PlayBook","screen":{"horizontal":{"width":1024,"height":600},"device-pixel-ratio":1,"vertical":{"width":600,"height":1024}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML like Gecko) Version/7.2.1.0 Safari/536.2+","type":"tablet"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Nexus 10","screen":{"horizontal":{"width":1280,"height":800},"device-pixel-ratio":2,"vertical":{"width":800,"height":1280}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 10 Build/MOB31T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36","type":"tablet"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Nexus 7","screen":{"horizontal":{"width":960,"height":600},"device-pixel-ratio":2,"vertical":{"width":600,"height":960}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36","type":"tablet"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Galaxy Note 3","screen":{"horizontal":{"width":640,"height":360},"device-pixel-ratio":3,"vertical":{"width":360,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; Android 4.3; en-us; SM-N900T Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"vertical","title":"default"},{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Galaxy Note II","screen":{"horizontal":{"width":640,"height":360},"device-pixel-ratio":2,"vertical":{"width":360,"height":640}},"capabilities":["touch","mobile"],"user-agent":"Mozilla/5.0 (Linux; U; Android 4.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30","type":"phone"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Laptop with touch","screen":{"horizontal":{"width":1280,"height":950},"device-pixel-ratio":1,"vertical":{"width":950,"height":1280}},"capabilities":["touch"],"user-agent":"","type":"notebook"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Laptop with HiDPI screen","screen":{"horizontal":{"width":1440,"height":900},"device-pixel-ratio":2,"vertical":{"width":900,"height":1440}},"capabilities":[],"user-agent":"","type":"notebook"},"type":"emulated-device"},{"device":{"show-by-default":false,"modes":[{"insets":{"top":0,"right":0,"bottom":0,"left":0},"orientation":"horizontal","title":"default"}],"title":"Laptop with MDPI screen","screen":{"horizontal":{"width":1280,"height":800},"device-pixel-ratio":1,"vertical":{"width":800,"height":1280}},"capabilities":[],"user-agent":"","type":"notebook"},"type":"emulated-device"}],"name":"emulated_devices","scripts":[]},{"dependencies":["components","emulation","timeline","inspector_main","sdk","services","ui"],"extensions":[{"title":"Audits","tags":"lighthouse, pwa","id":"audits","className":"Audits.AuditsPanel","location":"panel","type":"view","order":90}],"name":"audits","scripts":["audits_module.js"],"skip_compilation":["lighthouse/report.js","lighthouse/report-generator.js"],"modules":["audits.js","lighthouse/report.js","lighthouse/report-generator.js","RadioSetting.js","AuditsPanel.js","AuditsController.js","AuditsReportSelector.js","AuditsReportRenderer.js","AuditsStartView.js","AuditsStatusView.js","AuditsProtocolService.js"]},{"extensions":[{"title":"Layers","id":"layers","className":"Layers.LayersPanel","location":"panel","type":"view","order":100,"persistence":"closeable"}],"dependencies":["layer_viewer"],"modules":["LayerPaintProfilerView.js","LayerTreeModel.js","LayersPanel.js"],"name":"layers","scripts":[]},{"dependencies":["common","browser_sdk"],"modules":["har_importer.js","HARFormat.js","HARImporter.js"],"name":"har_importer"},{"name":"network","modules":[],"dependencies":["search","source_frame","components","perf_ui","cookie_table","data_grid","browser_sdk","mobile_throttling","har_importer","persistence"],"extensions":[{"title":"Network","id":"network","className":"Network.NetworkPanel","location":"panel","type":"view","order":40},{"className":"Network.NetworkPanel.ContextMenuProvider","contextTypes":["SDK.NetworkRequest","SDK.Resource","Workspace.UISourceCode"],"type":"@UI.ContextMenu.Provider"},{"className":"Network.NetworkPanel.RequestRevealer","contextTypes":["SDK.NetworkRequest"],"destination":"Network panel","type":"@Common.Revealer"},{"className":"Network.NetworkPanel.RequestLocationRevealer","contextTypes":["Network.UIRequestLocation"],"type":"@Common.Revealer"},{"category":"Network","title":"Color-code resource types","defaultValue":false,"tags":"color code, resource type","settingName":"networkColorCodeResourceTypes","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Color code by resource type"},{"value":false,"title":"Use default colors"}]},{"category":"Network","title":"Group network log by frame","defaultValue":false,"tags":"network, frame, group","settingName":"network.group-by-frame","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Group network log items by frame"},{"value":false,"title":"Don't group network log items by frame"}]},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Network.NetworkPanel.ActionDelegate","toggleWithRedColor":true,"actionId":"network.toggle-recording","toggleable":true,"contextTypes":["Network.NetworkPanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+E"},{"platform":"mac","shortcut":"Meta+E"}],"type":"action","options":[{"value":true,"title":"Record network log"},{"value":false,"title":"Stop recording network log"}]},{"className":"Network.NetworkPanel.ActionDelegate","contextTypes":["Network.NetworkPanel"],"bindings":[{"shortcut":"Esc"}],"type":"action","actionId":"network.hide-request-details"},{"title":"Request blocking","id":"network.blocked-urls","className":"Network.BlockedURLsPane","location":"drawer-view","type":"view","order":60,"persistence":"closeable"},{"title":"Network conditions","tags":"disk cache, network throttling, useragent, user agent, user-agent","id":"network.config","className":"Network.NetworkConfigView","location":"drawer-view","type":"view","order":40,"persistence":"closeable"},{"category":"Network","className":"Network.NetworkPanel","type":"@UI.ViewLocationResolver","name":"network-sidebar"},{"title":"Search","className":"Network.SearchNetworkView","location":"network-sidebar","type":"view","id":"network.search-network-tab","persistence":"permanent"},{"category":"DevTools","title":"Search","className":"Network.NetworkPanel.ActionDelegate","contextTypes":["Network.NetworkPanel"],"actionId":"network.search","bindings":[{"platform":"mac","shortcut":"Meta+F"},{"platform":"windows,linux","shortcut":"Ctrl+F"}],"type":"action"}],"scripts":["network_module.js"]},{"skip_compilation":["dagre.js"],"modules":[],"name":"dagre_layout","scripts":["dagre_layout_module.js"]},{"name":"media","modules":[],"dependencies":["components","sdk","ui","data_grid"],"extensions":[{"title":"Media","tags":"media, video","id":"media","className":"Media.MainView","experiment":"mediaInspector","location":"panel","type":"view","order":100,"persistence":"closeable"}],"scripts":["media_module.js"]},{"dependencies":["elements"],"extensions":[{"title":"Animations","id":"animations","className":"Animation.AnimationTimeline","location":"drawer-view","type":"view","order":0,"persistence":"closeable"}],"name":"animation","scripts":["animation_module.js"],"modules":["animation.js","AnimationModel.js","AnimationGroupPreviewUI.js","AnimationScreenshotPopover.js","AnimationTimeline.js","AnimationUI.js"]},{"name":"resources","modules":[],"dependencies":["source_frame","cookie_table","inline_editor","data_grid","components","object_ui","perf_ui","mobile_throttling","network","sources"],"extensions":[{"title":"Application","tags":"pwa","id":"resources","className":"Resources.ResourcesPanel","location":"panel","type":"view","order":70},{"className":"Resources.ResourcesPanel.ResourceRevealer","contextTypes":["SDK.Resource"],"destination":"Application panel","type":"@Common.Revealer"},{"category":"Resources","className":"Resources.ClearStorageView.ActionDelegate","type":"action","actionId":"resources.clear","title":"Clear site data"},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Resources.BackgroundServiceView.ActionDelegate","toggleWithRedColor":true,"actionId":"background-service.toggle-recording","toggleable":true,"contextTypes":["Resources.BackgroundServiceView"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+E"},{"platform":"mac","shortcut":"Meta+E"}],"category":"Background Services","type":"action","options":[{"value":true,"title":"Start recording events"},{"value":false,"title":"Stop recording events"}]}],"scripts":["resources_module.js"]},{"dependencies":["components","extensions","inline_editor","color_picker","event_listeners"],"extensions":[{"title":"Elements","id":"elements","className":"Elements.ElementsPanel","location":"panel","type":"view","order":10},{"className":"Elements.ElementsPanel.ContextMenuProvider","contextTypes":["SDK.RemoteObject","SDK.DOMNode","SDK.DeferredDOMNode"],"type":"@UI.ContextMenu.Provider"},{"className":"Elements.ElementsTreeOutline.Renderer","contextTypes":["SDK.DOMNode","SDK.DeferredDOMNode"],"type":"@UI.Renderer"},{"className":"Elements.ElementsPanel.DOMNodeRevealer","contextTypes":["SDK.DOMNode","SDK.DeferredDOMNode","SDK.RemoteObject"],"destination":"Elements panel","type":"@Common.Revealer"},{"className":"Elements.DOMLinkifier.Linkifier","contextTypes":["SDK.DOMNode","SDK.DeferredDOMNode"],"type":"@Common.Linkifier"},{"className":"Elements.ElementsPanel.CSSPropertyRevealer","contextTypes":["SDK.CSSProperty"],"destination":"styles sidebar","type":"@Common.Revealer"},{"category":"Elements","title":"Show user agent shadow DOM","defaultValue":false,"settingName":"showUAShadowDOM","settingType":"boolean","type":"setting","order":1},{"category":"Elements","title":"Word wrap","defaultValue":true,"options":[{"value":true,"title":"Enable DOM word wrap"},{"value":false,"title":"Disable DOM word wrap"}],"settingName":"domWordWrap","settingType":"boolean","type":"setting","order":2},{"category":"Elements","title":"Show HTML comments","defaultValue":true,"options":[{"value":true,"title":"Show HTML comments"},{"value":false,"title":"Hide HTML comments"}],"settingName":"showHTMLComments","settingType":"boolean","type":"setting","order":3},{"category":"Elements","title":"Reveal DOM node on hover","defaultValue":true,"settingName":"highlightNodeOnHoverInOverlay","settingType":"boolean","type":"setting","order":4},{"category":"Elements","title":"Show detailed inspect tooltip","defaultValue":true,"settingName":"showDetailedInspectTooltip","settingType":"boolean","type":"setting","order":5},{"defaultValue":true,"type":"setting","settingName":"showEventListenersForAncestors","settingType":"boolean"},{"className":"Elements.ElementStatePaneWidget.ButtonProvider","type":"@UI.ToolbarItem.Provider","order":1,"location":"styles-sidebarpane-toolbar"},{"className":"Elements.ClassesPaneWidget.ButtonProvider","type":"@UI.ToolbarItem.Provider","order":2,"location":"styles-sidebarpane-toolbar"},{"className":"Elements.StylesSidebarPane.ButtonProvider","type":"@UI.ToolbarItem.Provider","order":100,"location":"styles-sidebarpane-toolbar"},{"className":"Elements.ElementsActionDelegate","contextTypes":["Elements.ElementsPanel"],"bindings":[{"shortcut":"H"}],"type":"action","actionId":"elements.hide-element"},{"className":"Elements.ElementsActionDelegate","contextTypes":["Elements.ElementsPanel"],"bindings":[{"shortcut":"F2"}],"type":"action","actionId":"elements.edit-as-html"},{"className":"Elements.ElementsActionDelegate","contextTypes":["Elements.ElementsPanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Z"},{"platform":"mac","shortcut":"Meta+Z"}],"type":"action","actionId":"elements.undo"},{"className":"Elements.ElementsActionDelegate","contextTypes":["Elements.ElementsPanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Y"},{"platform":"mac","shortcut":"Meta+Shift+Z"}],"type":"action","actionId":"elements.redo"},{"className":"Elements.ElementsPanel.PseudoStateMarkerDecorator","marker":"pseudo-state-marker","type":"@Elements.MarkerDecorator"},{"marker":"hidden-marker","factoryName":"Elements.GenericDecorator","type":"@Elements.MarkerDecorator","color":"#555","title":"Element is hidden"},{"iconClass":"largeicon-node-search","title":"Select an element in the page to inspect it","className":"Elements.InspectElementModeController.ToggleSearchActionDelegate","actionId":"elements.toggle-element-search","toggleable":true,"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+C"},{"platform":"mac","shortcut":"Meta+Shift+C"}],"type":"action"},{"className":"Elements.InspectElementModeController.ToggleSearchActionDelegate","category":"Screenshot","type":"action","actionId":"elements.capture-area-screenshot","title":"Capture area screenshot"},{"order":0,"type":"@UI.ToolbarItem.Provider","actionId":"elements.toggle-element-search","location":"main-toolbar-left"},{"category":"Elements","className":"Elements.ElementsPanel","type":"@UI.ViewLocationResolver","name":"elements-sidebar"},{"title":"Event Listeners","id":"elements.eventListeners","className":"Elements.EventListenersWidget","location":"elements-sidebar","hasToolbar":true,"type":"view","order":5,"persistence":"permanent"},{"title":"Properties","id":"elements.domProperties","className":"Elements.PropertiesWidget","location":"elements-sidebar","type":"view","order":7,"persistence":"permanent"},{"title":"Stack Trace","id":"elements.domCreation","className":"Elements.NodeStackTraceWidget","experiment":"captureNodeCreationStacks","location":"elements-sidebar","type":"view","order":10,"persistence":"permanent"}],"name":"elements","scripts":["elements_module.js"],"modules":["elements.js","InspectElementModeController.js","ColorSwatchPopoverIcon.js","ComputedStyleModel.js","DOMLinkifier.js","DOMPath.js","ElementsBreadcrumbs.js","ElementsSidebarPane.js","ElementsTreeElement.js","ElementsTreeOutline.js","EventListenersWidget.js","MarkerDecorator.js","MetricsSidebarPane.js","PlatformFontsWidget.js","PropertiesWidget.js","NodeStackTraceWidget.js","StylePropertyHighlighter.js","StylesSidebarPane.js","StylePropertyTreeElement.js","ComputedStyleWidget.js","ElementsPanel.js","ClassesPaneWidget.js","ElementStatePaneWidget.js","ElementsTreeElementHighlighter.js"]},{"dependencies":["elements","ui","sdk","data_grid","extensions"],"extensions":[{"title":"CSS Overview","id":"cssoverview","className":"CssOverview.CSSOverviewPanel","experiment":"cssOverview","location":"panel","type":"view","order":95}],"name":"css_overview","scripts":["css_overview_module.js"],"modules":["CSSOverviewController.js","CSSOverviewUnusedDeclarations.js","CSSOverviewModel.js","CSSOverviewStartView.js","CSSOverviewProcessingView.js","CSSOverviewCompletedView.js","CSSOverviewSidebarPanel.js","CSSOverviewPanel.js"]},{"name":"timeline","modules":[],"dependencies":["components","coverage","layer_viewer","timeline_model","perf_ui","extensions","data_grid","profiler","mobile_throttling"],"extensions":[{"title":"Performance","id":"timeline","className":"Timeline.TimelinePanel","location":"panel","type":"view","order":50},{"category":"Performance","title":"Hide chrome frame in Layers view","defaultValue":false,"settingName":"frameViewerHideChromeWindow","settingType":"boolean","type":"setting"},{"className":"Timeline.LoadTimelineHandler","type":"@Common.QueryParamHandler","name":"loadTimelineFromURL"},{"order":10,"type":"context-menu-item","location":"timelineMenu/open","actionId":"timeline.load-from-file"},{"order":15,"type":"context-menu-item","location":"timelineMenu/open","actionId":"timeline.save-to-file"},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Timeline.TimelinePanel.ActionDelegate","toggleWithRedColor":true,"actionId":"timeline.toggle-recording","toggleable":true,"contextTypes":["Timeline.TimelinePanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+E"},{"platform":"mac","shortcut":"Meta+E"}],"type":"action","options":[{"value":true,"title":"Record"},{"value":false,"title":"Stop"}]},{"iconClass":"largeicon-refresh","category":"Performance","title":"Start profiling and reload page","className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"actionId":"timeline.record-reload","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+E"},{"platform":"mac","shortcut":"Meta+Shift+E"}],"type":"action"},{"category":"Timeline","title":"Save profile\u2026","className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"actionId":"timeline.save-to-file","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+S"},{"platform":"mac","shortcut":"Meta+S"}],"type":"action"},{"category":"Timeline","title":"Load profile\u2026","className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"actionId":"timeline.load-from-file","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+O"},{"platform":"mac","shortcut":"Meta+O"}],"type":"action"},{"className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"bindings":[{"shortcut":"["}],"type":"action","actionId":"timeline.jump-to-previous-frame"},{"className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"bindings":[{"shortcut":"]"}],"type":"action","actionId":"timeline.jump-to-next-frame"},{"category":"Performance","title":"Show recent timeline sessions","className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"actionId":"timeline.show-history","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+H"},{"platform":"mac","shortcut":"Meta+Y"}],"type":"action"},{"title":"JavaScript Profiler","id":"js_profiler","className":"Profiler.JSProfilerPanel","location":"panel","type":"view","order":65,"persistence":"closeable"},{"className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"bindings":[{"platform":"windows,linux","shortcut":"Alt+Left"},{"platform":"mac","shortcut":"Meta+Left"}],"type":"action","actionId":"timeline.previous-recording"},{"className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"bindings":[{"platform":"windows,linux","shortcut":"Alt+Right"},{"platform":"mac","shortcut":"Meta+Right"}],"type":"action","actionId":"timeline.next-recording"}],"scripts":["timeline_module.js"]},{"name":"browser_debugger","modules":["browser_debugger.js","DOMBreakpointsSidebarPane.js","EventListenerBreakpointsSidebarPane.js","ObjectEventListenersSidebarPane.js","XHRBreakpointsSidebarPane.js"],"dependencies":["elements","sources","console"],"extensions":[{"title":"Event Listener Breakpoints","id":"sources.eventListenerBreakpoints","className":"BrowserDebugger.EventListenerBreakpointsSidebarPane","location":"sources.sidebar-bottom","type":"view","order":9,"persistence":"permanent"},{"className":"BrowserDebugger.XHRBreakpointsSidebarPane","contextTypes":["SDK.DebuggerPausedDetails"],"type":"@UI.ContextFlavorListener"},{"title":"XHR/fetch Breakpoints","id":"sources.xhrBreakpoints","className":"BrowserDebugger.XHRBreakpointsSidebarPane","location":"sources.sidebar-bottom","hasToolbar":true,"type":"view","order":5,"persistence":"permanent"},{"title":"DOM Breakpoints","id":"sources.domBreakpoints","factoryName":"BrowserDebugger.DOMBreakpointsSidebarPane","location":"sources.sidebar-bottom","type":"view","order":7,"persistence":"permanent"},{"title":"DOM Breakpoints","id":"elements.domBreakpoints","factoryName":"BrowserDebugger.DOMBreakpointsSidebarPane","location":"elements-sidebar","type":"view","order":6,"persistence":"permanent"},{"marker":"breakpoint-marker","factoryName":"Elements.GenericDecorator","type":"@Elements.MarkerDecorator","color":"rgb(105, 140, 254)","title":"DOM Breakpoint"},{"className":"BrowserDebugger.DOMBreakpointsSidebarPane.ContextMenuProvider","contextTypes":["SDK.DOMNode"],"type":"@UI.ContextMenu.Provider"},{"className":"BrowserDebugger.DOMBreakpointsSidebarPane","contextTypes":["SDK.DebuggerPausedDetails"],"type":"@UI.ContextFlavorListener"},{"title":"Global Listeners","id":"sources.globalListeners","className":"BrowserDebugger.ObjectEventListenersSidebarPane","location":"sources.sidebar-bottom","hasToolbar":true,"type":"view","order":8,"persistence":"permanent"},{"title":"Page","id":"navigator-network","className":"Sources.NetworkNavigatorView","location":"navigator-view","type":"view","order":2,"persistence":"permanent"},{"title":"Overrides","id":"navigator-overrides","className":"Sources.OverridesNavigatorView","location":"navigator-view","type":"view","order":4,"persistence":"permanent"},{"title":"Content scripts","id":"navigator-contentScripts","className":"Sources.ContentScriptsNavigatorView","location":"navigator-view","type":"view","order":5,"persistence":"permanent"},{"className":"Sources.OverridesNavigatorView","viewId":"navigator-overrides","type":"@Sources.NavigatorView"},{"className":"Sources.ContentScriptsNavigatorView","viewId":"navigator-contentScripts","type":"@Sources.NavigatorView"}],"scripts":["browser_debugger_module.js"]},{"dependencies":["bindings","components","platform","ui","mobile_throttling"],"extensions":[{"className":"Emulation.AdvancedAppProvider","type":"@Common.AppProvider","order":0,"condition":"can_dock"},{"category":"Mobile","iconClass":"largeicon-phone","title":"Toggle device toolbar","className":"Emulation.DeviceModeWrapper.ActionDelegate","actionId":"emulation.toggle-device-mode","toggleable":true,"bindings":[{"platform":"windows,linux","shortcut":"Shift+Ctrl+M"},{"platform":"mac","shortcut":"Shift+Meta+M"}],"type":"action","condition":"can_dock"},{"category":"Screenshot","className":"Emulation.DeviceModeWrapper.ActionDelegate","type":"action","actionId":"emulation.capture-screenshot","title":"Capture screenshot"},{"actionId":"emulation.capture-screenshot","type":"context-menu-item","location":"deviceModeMenu/save","order":12},{"order":1,"type":"@UI.ToolbarItem.Provider","actionId":"emulation.toggle-device-mode","condition":"can_dock","location":"main-toolbar-left"},{"category":"Screenshot","className":"Emulation.DeviceModeWrapper.ActionDelegate","type":"action","actionId":"emulation.capture-full-height-screenshot","title":"Capture full size screenshot"},{"category":"Screenshot","className":"Emulation.DeviceModeWrapper.ActionDelegate","type":"action","actionId":"emulation.capture-node-screenshot","title":"Capture node screenshot"},{"actionId":"emulation.capture-full-height-screenshot","type":"context-menu-item","location":"deviceModeMenu/save","order":13},{"category":"Mobile","tags":"device","defaultValue":false,"settingName":"showMediaQueryInspector","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show media queries"},{"value":false,"title":"Hide media queries"}]},{"category":"Mobile","tags":"device","defaultValue":false,"settingName":"emulation.showRulers","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show rulers"},{"value":false,"title":"Hide rulers"}]},{"category":"Mobile","tags":"device","defaultValue":false,"settingName":"emulation.showDeviceOutline","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show device frame"},{"value":false,"title":"Hide device frame"}]},{"title":"Devices","settings":["standardEmulatedDeviceList","customEmulatedDeviceList"],"id":"devices","className":"Emulation.DevicesSettingsTab","location":"settings-view","type":"view","order":30},{"className":"Emulation.SensorsView.ShowActionDelegate","type":"action","actionId":"emulation.show-sensors","title":"Sensors"},{"title":"Sensors","tags":"geolocation, timezones, accelerometer, device orientation","id":"sensors","className":"Emulation.SensorsView","location":"drawer-view","type":"view","order":100,"persistence":"closeable"},{"defaultValue":[{"lat":52.520007,"timezoneId":"Europe/Berlin","long":13.404954,"title":"Berlin"},{"lat":51.507351,"timezoneId":"Europe/London","long":-0.127758,"title":"London"},{"lat":55.755826,"timezoneId":"Europe/Moscow","long":37.6173,"title":"Moscow"},{"lat":37.386052,"timezoneId":"US/Pacific","long":-122.083851,"title":"Mountain View"},{"lat":19.075984,"timezoneId":"Asia/Kolkata","long":72.877656,"title":"Mumbai"},{"lat":37.774929,"timezoneId":"US/Pacific","long":-122.419416,"title":"San Francisco"},{"lat":31.230416,"timezoneId":"Asia/Shanghai","long":121.473701,"title":"Shanghai"},{"lat":-23.55052,"timezoneId":"America/Sao_Paulo","long":-46.633309,"title":"S\u00e3o Paulo"},{"lat":35.689487,"timezoneId":"Asia/Tokyo","long":139.691706,"title":"Tokyo"}],"type":"setting","settingName":"emulation.geolocations","settingType":"array"},{"title":"Geolocations","settings":["emulation.geolocations"],"id":"emulation-geolocations","className":"Emulation.GeolocationsSettingsTab","location":"settings-view","type":"view","order":40}],"name":"emulation"},{"dependencies":["network","platform","ui","sdk"],"extensions":[{"title":"Security","id":"security","className":"Security.SecurityPanel","location":"panel","type":"view","order":80}],"name":"security","scripts":["security_module.js"],"modules":["security.js","SecurityModel.js","SecurityPanel.js"]},{"dependencies":["common","sdk","ui","protocol"],"extensions":[{"defaultValue":[],"type":"setting","settingName":"customNetworkConditions","settingType":"array"},{"category":"Network","tags":"device, throttling","title":"Go offline","className":"MobileThrottling.ThrottlingManager.ActionDelegate","actionId":"network-conditions.network-offline","type":"action"},{"category":"Network","tags":"device, throttling","title":"Enable slow 3G throttling","className":"MobileThrottling.ThrottlingManager.ActionDelegate","actionId":"network-conditions.network-low-end-mobile","type":"action"},{"category":"Network","tags":"device, throttling","title":"Enable fast 3G throttling","className":"MobileThrottling.ThrottlingManager.ActionDelegate","actionId":"network-conditions.network-mid-tier-mobile","type":"action"},{"category":"Network","tags":"device, throttling","title":"Go online","className":"MobileThrottling.ThrottlingManager.ActionDelegate","actionId":"network-conditions.network-online","type":"action"},{"title":"Throttling","settings":["customNetworkConditions"],"id":"throttling-conditions","className":"MobileThrottling.ThrottlingSettingsTab","location":"settings-view","type":"view","order":35}],"name":"mobile_throttling","modules":["mobile_throttling.js","ThrottlingPresets.js","MobileThrottlingSelector.js","NetworkPanelIndicator.js","NetworkThrottlingSelector.js","ThrottlingSettingsTab.js","ThrottlingManager.js"]},{"modules":[],"dependencies":["platform","ui","host","components"],"extensions":[{"title":"Remote devices","tags":"usb, android, mobile","id":"remote-devices","className":"Devices.DevicesView","location":"drawer-view","type":"view","order":50,"persistence":"closeable"}],"name":"devices","scripts":["devices_module.js"]},{"dependencies":["components","sdk","ui"],"extensions":[{"title":"WebAudio","tags":"audio","id":"web-audio","className":"WebAudio.WebAudioView","location":"drawer-view","type":"view","order":100,"persistence":"closeable"}],"name":"web_audio","scripts":["web_audio_module.js"],"modules":["web_audio.js","graph_visualizer/Types.js","graph_visualizer/GraphStyle.js","graph_visualizer/GraphManager.js","graph_visualizer/NodeRendererUtility.js","graph_visualizer/NodeView.js","graph_visualizer/EdgeView.js","graph_visualizer/GraphView.js","WebAudioModel.js","AudioContextSelector.js","AudioContextContentBuilder.js","WebAudioView.js"]},{"dependencies":["sdk"],"modules":["timeline_model.js","TimelineModelFilter.js","TracingLayerTree.js","TimelineModel.js","TimelineIRModel.js","TimelineJSProfile.js","TimelineFrameModel.js","TimelineProfileTree.js"],"name":"timeline_model","scripts":[]},{"dependencies":["components","mobile_throttling"],"extensions":[{"className":"InspectorMain.InspectorMain","type":"early-initialization"},{"category":"Navigation","iconClass":"largeicon-refresh","title":"Reload page","className":"InspectorMain.ReloadActionDelegate","actionId":"inspector_main.reload","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+R F5"},{"platform":"mac","shortcut":"Meta+R"}],"type":"action"},{"category":"Navigation","title":"Hard reload page","className":"InspectorMain.ReloadActionDelegate","actionId":"inspector_main.hard-reload","bindings":[{"platform":"windows,linux","shortcut":"Shift+Ctrl+R Shift+F5 Ctrl+F5 Ctrl+Shift+F5"},{"platform":"mac","shortcut":"Shift+Meta+R"}],"type":"action"},{"className":"InspectorMain.NodeIndicator","type":"@UI.ToolbarItem.Provider","order":2,"location":"main-toolbar-left"},{"category":"Network","title":"Force ad blocking on this site","storageType":"session","defaultValue":false,"settingName":"network.adBlockingEnabled","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Block ads on this site"},{"value":false,"title":"Show ads on this site, if allowed"}]},{"category":"DevTools","title":"Auto-open DevTools for popups","defaultValue":false,"options":[{"value":true,"title":"Auto-open DevTools for popups"},{"value":false,"title":"Do not auto-open DevTools for popups"}],"settingName":"autoAttachToCreatedPages","settingType":"boolean","type":"setting","order":2},{"category":"DevTools","title":"Emulate a focused page","storageType":"session","defaultValue":false,"options":[{"value":true,"title":"Emulate a focused page"},{"value":false,"title":"Do not emulate a focused page"}],"settingName":"emulatePageFocus","settingType":"boolean","type":"setting","order":2},{"category":"Appearance","title":"Don't show Chrome Data Saver warning","defaultValue":false,"settingName":"disableDataSaverInfobar","settingType":"boolean","type":"setting"},{"category":"Appearance","title":"Disable paused state overlay","defaultValue":false,"settingName":"disablePausedStateOverlay","settingType":"boolean","type":"setting"},{"title":"Rendering","id":"rendering","className":"InspectorMain.RenderingOptionsView","location":"drawer-view","type":"view","order":50,"persistence":"closeable"}],"name":"inspector_main","modules":["inspector_main.js","RenderingOptions.js","InspectorMain.js"]},{"dependencies":["sdk","ui"],"extensions":[{"title":"Performance monitor","tags":"performance, system monitor, monitor, activity, metrics","id":"performance.monitor","className":"PerformanceMonitor.PerformanceMonitor","location":"drawer-view","type":"view","order":100,"persistence":"closeable"}],"name":"performance_monitor","scripts":["performance_monitor_module.js"],"modules":["performance_monitor.js","PerformanceMonitor.js"]}]);Root.applicationDescriptor.modules.push(...[{"name":"help"},{"type":"remote","name":"accessibility"},{"name":"layer_viewer"},{"name":"cookie_table"},{"type":"remote","name":"emulated_devices"},{"name":"audits"},{"name":"layers"},{"name":"har_importer"},{"name":"network"},{"type":"remote","name":"dagre_layout"},{"name":"media"},{"name":"animation"},{"name":"resources"},{"name":"elements"},{"name":"css_overview"},{"name":"timeline"},{"name":"browser_debugger"},{"type":"autostart","name":"emulation"},{"name":"performance_monitor"},{"type":"autostart","name":"mobile_throttling"},{"name":"devices"},{"name":"web_audio"},{"name":"timeline_model"},{"type":"autostart","name":"inspector_main"},{"name":"security"}]);self['MobileThrottling']=self['MobileThrottling']||{};self['Emulation']=self['Emulation']||{};Emulation.AdvancedApp=class{constructor(){Components.dockController.addEventListener(Components.DockController.Events.BeforeDockSideChanged,this._openToolboxWindow,this);}
static _instance(){if(!Emulation.AdvancedApp._appInstance){Emulation.AdvancedApp._appInstance=new Emulation.AdvancedApp();}
return Emulation.AdvancedApp._appInstance;}
presentUI(document){const rootView=new UI.RootView();this._rootSplitWidget=new UI.SplitWidget(false,true,'InspectorView.splitViewState',555,300,true);this._rootSplitWidget.show(rootView.element);this._rootSplitWidget.setSidebarWidget(UI.inspectorView);this._rootSplitWidget.setDefaultFocusedChild(UI.inspectorView);UI.inspectorView.setOwnerSplit(this._rootSplitWidget);this._inspectedPagePlaceholder=Emulation.InspectedPagePlaceholder.instance();this._inspectedPagePlaceholder.addEventListener(Emulation.InspectedPagePlaceholder.Events.Update,this._onSetInspectedPageBounds.bind(this),this);this._deviceModeView=new Emulation.DeviceModeWrapper(this._inspectedPagePlaceholder);Components.dockController.addEventListener(Components.DockController.Events.BeforeDockSideChanged,this._onBeforeDockSideChange,this);Components.dockController.addEventListener(Components.DockController.Events.DockSideChanged,this._onDockSideChange,this);Components.dockController.addEventListener(Components.DockController.Events.AfterDockSideChanged,this._onAfterDockSideChange,this);this._onDockSideChange();console.timeStamp('AdvancedApp.attachToBody');rootView.attachToDocument(document);rootView.focus();this._inspectedPagePlaceholder.update();}
_openToolboxWindow(event){if((event.data.to)!==Components.DockController.State.Undocked){return;}
if(this._toolboxWindow){return;}
const url=window.location.href.replace('devtools_app.html','toolbox.html');this._toolboxWindow=window.open(url,undefined);}
toolboxLoaded(toolboxDocument){UI.initializeUIUtils(toolboxDocument,Common.settings.createSetting('uiTheme','default'));UI.installComponentRootStyles((toolboxDocument.body));UI.ContextMenu.installHandler(toolboxDocument);UI.Tooltip.installHandler(toolboxDocument);this._toolboxRootView=new UI.RootView();this._toolboxRootView.attachToDocument(toolboxDocument);this._updateDeviceModeView();}
_updateDeviceModeView(){if(this._isDocked()){this._rootSplitWidget.setMainWidget(this._deviceModeView);}else if(this._toolboxRootView){this._deviceModeView.show(this._toolboxRootView.element);}}
_onBeforeDockSideChange(event){if((event.data.to)===Components.DockController.State.Undocked&&this._toolboxRootView){this._rootSplitWidget.hideSidebar();this._inspectedPagePlaceholder.update();}
this._changingDockSide=true;}
_onDockSideChange(event){this._updateDeviceModeView();const toDockSide=event?(event.data.to):Components.dockController.dockSide();if(toDockSide===Components.DockController.State.Undocked){this._updateForUndocked();}else if(this._toolboxRootView&&event&&(event.data.from)===Components.DockController.State.Undocked){this._rootSplitWidget.hideSidebar();}else{this._updateForDocked(toDockSide);}}
_onAfterDockSideChange(event){if(!this._changingDockSide){return;}
if((event.data.from)===Components.DockController.State.Undocked){this._updateForDocked((event.data.to));}
this._changingDockSide=false;this._inspectedPagePlaceholder.update();}
_updateForDocked(dockSide){this._rootSplitWidget.resizerElement().style.transform=dockSide===Components.DockController.State.DockedToRight?'translateX(2px)':dockSide===Components.DockController.State.DockedToLeft?'translateX(-2px)':'';this._rootSplitWidget.setVertical(dockSide===Components.DockController.State.DockedToRight||dockSide===Components.DockController.State.DockedToLeft);this._rootSplitWidget.setSecondIsSidebar(dockSide===Components.DockController.State.DockedToRight||dockSide===Components.DockController.State.DockedToBottom);this._rootSplitWidget.toggleResizer(this._rootSplitWidget.resizerElement(),true);this._rootSplitWidget.toggleResizer(UI.inspectorView.topResizerElement(),dockSide===Components.DockController.State.DockedToBottom);this._rootSplitWidget.showBoth();}
_updateForUndocked(){this._rootSplitWidget.toggleResizer(this._rootSplitWidget.resizerElement(),false);this._rootSplitWidget.toggleResizer(UI.inspectorView.topResizerElement(),false);this._rootSplitWidget.hideMain();}
_isDocked(){return Components.dockController.dockSide()!==Components.DockController.State.Undocked;}
_onSetInspectedPageBounds(event){if(this._changingDockSide){return;}
const window=this._inspectedPagePlaceholder.element.window();if(!window.innerWidth||!window.innerHeight){return;}
if(!this._inspectedPagePlaceholder.isShowing()){return;}
const bounds=(event.data);console.timeStamp('AdvancedApp.setInspectedPageBounds');Host.InspectorFrontendHost.setInspectedPageBounds(bounds);}};Emulation.AdvancedApp._appInstance;Emulation.AdvancedAppProvider=class{createApp(){return Emulation.AdvancedApp._instance();}};;Emulation.EmulatedDevice=class{constructor(){this.title='';this.type=Emulation.EmulatedDevice.Type.Unknown;this.vertical={width:0,height:0,outlineInsets:null,outlineImage:null};this.horizontal={width:0,height:0,outlineInsets:null,outlineImage:null};this.deviceScaleFactor=1;this.capabilities=[Emulation.EmulatedDevice.Capability.Touch,Emulation.EmulatedDevice.Capability.Mobile];this.userAgent='';this.modes=[];this._show=Emulation.EmulatedDevice._Show.Default;this._showByDefault=true;this._extension=null;}
static fromJSONV1(json){try{function parseValue(object,key,type,defaultValue){if(typeof object!=='object'||object===null||!object.hasOwnProperty(key)){if(typeof defaultValue!=='undefined'){return defaultValue;}
throw new Error('Emulated device is missing required property \''+key+'\'');}
const value=object[key];if(typeof value!==type||value===null){throw new Error('Emulated device property \''+key+'\' has wrong type \''+typeof value+'\'');}
return value;}
function parseIntValue(object,key){const value=(parseValue(object,key,'number'));if(value!==Math.abs(value)){throw new Error('Emulated device value \''+key+'\' must be integer');}
return value;}
function parseInsets(json){return new UI.Insets(parseIntValue(json,'left'),parseIntValue(json,'top'),parseIntValue(json,'right'),parseIntValue(json,'bottom'));}
function parseOrientation(json){const result={};result.width=parseIntValue(json,'width');if(result.width<0||result.width>Emulation.DeviceModeModel.MaxDeviceSize||result.width<Emulation.DeviceModeModel.MinDeviceSize){throw new Error('Emulated device has wrong width: '+result.width);}
result.height=parseIntValue(json,'height');if(result.height<0||result.height>Emulation.DeviceModeModel.MaxDeviceSize||result.height<Emulation.DeviceModeModel.MinDeviceSize){throw new Error('Emulated device has wrong height: '+result.height);}
const outlineInsets=parseValue(json['outline'],'insets','object',null);if(outlineInsets){result.outlineInsets=parseInsets(outlineInsets);if(result.outlineInsets.left<0||result.outlineInsets.top<0){throw new Error('Emulated device has wrong outline insets');}
result.outlineImage=(parseValue(json['outline'],'image','string'));}
return(result);}
const result=new Emulation.EmulatedDevice();result.title=(parseValue(json,'title','string'));result.type=(parseValue(json,'type','string'));const rawUserAgent=(parseValue(json,'user-agent','string'));result.userAgent=SDK.MultitargetNetworkManager.patchUserAgentWithChromeVersion(rawUserAgent);const capabilities=parseValue(json,'capabilities','object',[]);if(!Array.isArray(capabilities)){throw new Error('Emulated device capabilities must be an array');}
result.capabilities=[];for(let i=0;i<capabilities.length;++i){if(typeof capabilities[i]!=='string'){throw new Error('Emulated device capability must be a string');}
result.capabilities.push(capabilities[i]);}
result.deviceScaleFactor=(parseValue(json['screen'],'device-pixel-ratio','number'));if(result.deviceScaleFactor<0||result.deviceScaleFactor>100){throw new Error('Emulated device has wrong deviceScaleFactor: '+result.deviceScaleFactor);}
result.vertical=parseOrientation(parseValue(json['screen'],'vertical','object'));result.horizontal=parseOrientation(parseValue(json['screen'],'horizontal','object'));const modes=parseValue(json,'modes','object',[]);if(!Array.isArray(modes)){throw new Error('Emulated device modes must be an array');}
result.modes=[];for(let i=0;i<modes.length;++i){const mode={};mode.title=(parseValue(modes[i],'title','string'));mode.orientation=(parseValue(modes[i],'orientation','string'));if(mode.orientation!==Emulation.EmulatedDevice.Vertical&&mode.orientation!==Emulation.EmulatedDevice.Horizontal){throw new Error('Emulated device mode has wrong orientation \''+mode.orientation+'\'');}
const orientation=result.orientationByName(mode.orientation);mode.insets=parseInsets(parseValue(modes[i],'insets','object'));if(mode.insets.top<0||mode.insets.left<0||mode.insets.right<0||mode.insets.bottom<0||mode.insets.top+mode.insets.bottom>orientation.height||mode.insets.left+mode.insets.right>orientation.width){throw new Error('Emulated device mode \''+mode.title+'\'has wrong mode insets');}
mode.image=(parseValue(modes[i],'image','string',null));result.modes.push(mode);}
result._showByDefault=(parseValue(json,'show-by-default','boolean',undefined));result._show=(parseValue(json,'show','string',Emulation.EmulatedDevice._Show.Default));return result;}catch(e){return null;}}
static deviceComparator(device1,device2){const order1=(device1._extension&&device1._extension.descriptor()['order'])||-1;const order2=(device2._extension&&device2._extension.descriptor()['order'])||-1;if(order1>order2){return 1;}
if(order2>order1){return-1;}
return device1.title<device2.title?-1:(device1.title>device2.title?1:0);}
extension(){return this._extension;}
setExtension(extension){this._extension=extension;}
modesForOrientation(orientation){const result=[];for(let index=0;index<this.modes.length;index++){if(this.modes[index].orientation===orientation){result.push(this.modes[index]);}}
return result;}
_toJSON(){const json={};json['title']=this.title;json['type']=this.type;json['user-agent']=this.userAgent;json['capabilities']=this.capabilities;json['screen']={};json['screen']['device-pixel-ratio']=this.deviceScaleFactor;json['screen']['vertical']=this._orientationToJSON(this.vertical);json['screen']['horizontal']=this._orientationToJSON(this.horizontal);json['modes']=[];for(let i=0;i<this.modes.length;++i){const mode={};mode['title']=this.modes[i].title;mode['orientation']=this.modes[i].orientation;mode['insets']={};mode['insets']['left']=this.modes[i].insets.left;mode['insets']['top']=this.modes[i].insets.top;mode['insets']['right']=this.modes[i].insets.right;mode['insets']['bottom']=this.modes[i].insets.bottom;if(this.modes[i].image){mode['image']=this.modes[i].image;}
json['modes'].push(mode);}
json['show-by-default']=this._showByDefault;json['show']=this._show;return json;}
_orientationToJSON(orientation){const json={};json['width']=orientation.width;json['height']=orientation.height;if(orientation.outlineInsets){json['outline']={};json['outline']['insets']={};json['outline']['insets']['left']=orientation.outlineInsets.left;json['outline']['insets']['top']=orientation.outlineInsets.top;json['outline']['insets']['right']=orientation.outlineInsets.right;json['outline']['insets']['bottom']=orientation.outlineInsets.bottom;json['outline']['image']=orientation.outlineImage;}
return json;}
modeImage(mode){if(!mode.image){return'';}
if(!this._extension){return mode.image;}
return this._extension.module().substituteURL(mode.image);}
outlineImage(mode){const orientation=this.orientationByName(mode.orientation);if(!orientation.outlineImage){return'';}
if(!this._extension){return orientation.outlineImage;}
return this._extension.module().substituteURL(orientation.outlineImage);}
orientationByName(name){return name===Emulation.EmulatedDevice.Vertical?this.vertical:this.horizontal;}
show(){if(this._show===Emulation.EmulatedDevice._Show.Default){return this._showByDefault;}
return this._show===Emulation.EmulatedDevice._Show.Always;}
setShow(show){this._show=show?Emulation.EmulatedDevice._Show.Always:Emulation.EmulatedDevice._Show.Never;}
copyShowFrom(other){this._show=other._show;}
touch(){return this.capabilities.indexOf(Emulation.EmulatedDevice.Capability.Touch)!==-1;}
mobile(){return this.capabilities.indexOf(Emulation.EmulatedDevice.Capability.Mobile)!==-1;}};Emulation.EmulatedDevice.Mode;Emulation.EmulatedDevice.Orientation;Emulation.EmulatedDevice.Horizontal='horizontal';Emulation.EmulatedDevice.Vertical='vertical';Emulation.EmulatedDevice.Type={Phone:'phone',Tablet:'tablet',Notebook:'notebook',Desktop:'desktop',Unknown:'unknown'};Emulation.EmulatedDevice.Capability={Touch:'touch',Mobile:'mobile'};Emulation.EmulatedDevice._Show={Always:'Always',Default:'Default',Never:'Never'};Emulation.EmulatedDevicesList=class extends Common.Object{constructor(){super();this._standardSetting=Common.settings.createSetting('standardEmulatedDeviceList',[]);this._standard=[];this._listFromJSONV1(this._standardSetting.get(),this._standard);this._updateStandardDevices();this._customSetting=Common.settings.createSetting('customEmulatedDeviceList',[]);this._custom=[];if(!this._listFromJSONV1(this._customSetting.get(),this._custom)){this.saveCustomDevices();}}
static instance(){if(!Emulation.EmulatedDevicesList._instance){Emulation.EmulatedDevicesList._instance=new Emulation.EmulatedDevicesList();}
return(Emulation.EmulatedDevicesList._instance);}
_updateStandardDevices(){const devices=[];const extensions=self.runtime.extensions('emulated-device');for(let i=0;i<extensions.length;++i){const device=Emulation.EmulatedDevice.fromJSONV1(extensions[i].descriptor()['device']);device.setExtension(extensions[i]);devices.push(device);}
this._copyShowValues(this._standard,devices);this._standard=devices;this.saveStandardDevices();}
_listFromJSONV1(jsonArray,result){if(!Array.isArray(jsonArray)){return false;}
let success=true;for(let i=0;i<jsonArray.length;++i){const device=Emulation.EmulatedDevice.fromJSONV1(jsonArray[i]);if(device){result.push(device);if(!device.modes.length){device.modes.push({title:'',orientation:Emulation.EmulatedDevice.Horizontal,insets:new UI.Insets(0,0,0,0),image:null});device.modes.push({title:'',orientation:Emulation.EmulatedDevice.Vertical,insets:new UI.Insets(0,0,0,0),image:null});}}else{success=false;}}
return success;}
standard(){return this._standard;}
custom(){return this._custom;}
revealCustomSetting(){Common.Revealer.reveal(this._customSetting);}
addCustomDevice(device){this._custom.push(device);this.saveCustomDevices();}
removeCustomDevice(device){this._custom.remove(device);this.saveCustomDevices();}
saveCustomDevices(){const json=this._custom.map(function(device){return device._toJSON();});this._customSetting.set(json);this.dispatchEventToListeners(Emulation.EmulatedDevicesList.Events.CustomDevicesUpdated);}
saveStandardDevices(){const json=this._standard.map(function(device){return device._toJSON();});this._standardSetting.set(json);this.dispatchEventToListeners(Emulation.EmulatedDevicesList.Events.StandardDevicesUpdated);}
_copyShowValues(from,to){const deviceById=new Map();for(let i=0;i<from.length;++i){deviceById.set(from[i].title,from[i]);}
for(let i=0;i<to.length;++i){const title=to[i].title;if(deviceById.has(title)){to[i].copyShowFrom((deviceById.get(title)));}}}};Emulation.EmulatedDevicesList.Events={CustomDevicesUpdated:Symbol('CustomDevicesUpdated'),StandardDevicesUpdated:Symbol('StandardDevicesUpdated')};Emulation.EmulatedDevicesList._instance;;Emulation.DevicesSettingsTab=class extends UI.VBox{constructor(){super();this.element.classList.add('settings-tab-container');this.element.classList.add('devices-settings-tab');this.registerRequiredCSS('emulation/devicesSettingsTab.css');const header=this.element.createChild('header');header.createChild('h1').createTextChild(ls`Emulated Devices`);this.containerElement=this.element.createChild('div','settings-container-wrapper').createChild('div','settings-tab settings-content settings-container');const buttonsRow=this.containerElement.createChild('div','devices-button-row');this._addCustomButton=UI.createTextButton(Common.UIString('Add custom device...'),this._addCustomDevice.bind(this));buttonsRow.appendChild(this._addCustomButton);this._list=new UI.ListWidget(this);this._list.registerRequiredCSS('emulation/devicesSettingsTab.css');this._list.element.classList.add('devices-list');this._list.show(this.containerElement);this._muteUpdate=false;this._emulatedDevicesList=Emulation.EmulatedDevicesList.instance();this._emulatedDevicesList.addEventListener(Emulation.EmulatedDevicesList.Events.CustomDevicesUpdated,this._devicesUpdated,this);this._emulatedDevicesList.addEventListener(Emulation.EmulatedDevicesList.Events.StandardDevicesUpdated,this._devicesUpdated,this);this.setDefaultFocusedElement(this._addCustomButton);}
wasShown(){super.wasShown();this._devicesUpdated();}
_devicesUpdated(){if(this._muteUpdate){return;}
this._list.clear();let devices=this._emulatedDevicesList.custom().slice();for(let i=0;i<devices.length;++i){this._list.appendItem(devices[i],true);}
this._list.appendSeparator();devices=this._emulatedDevicesList.standard().slice();devices.sort(Emulation.EmulatedDevice.deviceComparator);for(let i=0;i<devices.length;++i){this._list.appendItem(devices[i],false);}}
_muteAndSaveDeviceList(custom){this._muteUpdate=true;if(custom){this._emulatedDevicesList.saveCustomDevices();}else{this._emulatedDevicesList.saveStandardDevices();}
this._muteUpdate=false;}
_addCustomDevice(){const device=new Emulation.EmulatedDevice();device.deviceScaleFactor=0;device.horizontal.width=700;device.horizontal.height=400;device.vertical.width=400;device.vertical.height=700;this._list.addNewItem(this._emulatedDevicesList.custom().length,device);}
_toNumericInputValue(value){return value?String(value):'';}
renderItem(item,editable){const device=(item);const element=createElementWithClass('div','devices-list-item');const checkbox=element.createChild('input','devices-list-checkbox');checkbox.type='checkbox';checkbox.checked=device.show();checkbox.addEventListener('click',event=>event.consume(),false);element.createChild('div','devices-list-title').textContent=device.title;element.addEventListener('click',onItemClicked.bind(this),false);return element;function onItemClicked(event){const show=!checkbox.checked;device.setShow(show);this._muteAndSaveDeviceList(editable);checkbox.checked=show;event.consume();}}
removeItemRequested(item,index){this._emulatedDevicesList.removeCustomDevice((item));}
commitEdit(item,editor,isNew){const device=(item);device.title=editor.control('title').value.trim();device.vertical.width=editor.control('width').value?parseInt(editor.control('width').value,10):0;device.vertical.height=editor.control('height').value?parseInt(editor.control('height').value,10):0;device.horizontal.width=device.vertical.height;device.horizontal.height=device.vertical.width;device.deviceScaleFactor=editor.control('scale').value?parseFloat(editor.control('scale').value):0;device.userAgent=editor.control('user-agent').value;device.modes=[];device.modes.push({title:'',orientation:Emulation.EmulatedDevice.Vertical,insets:new UI.Insets(0,0,0,0),image:null});device.modes.push({title:'',orientation:Emulation.EmulatedDevice.Horizontal,insets:new UI.Insets(0,0,0,0),image:null});device.capabilities=[];const uaType=editor.control('ua-type').value;if(uaType===Emulation.DeviceModeModel.UA.Mobile||uaType===Emulation.DeviceModeModel.UA.MobileNoTouch){device.capabilities.push(Emulation.EmulatedDevice.Capability.Mobile);}
if(uaType===Emulation.DeviceModeModel.UA.Mobile||uaType===Emulation.DeviceModeModel.UA.DesktopTouch){device.capabilities.push(Emulation.EmulatedDevice.Capability.Touch);}
if(isNew){this._emulatedDevicesList.addCustomDevice(device);}else{this._emulatedDevicesList.saveCustomDevices();}
this._addCustomButton.scrollIntoViewIfNeeded();this._addCustomButton.focus();}
beginEdit(item){const device=(item);const editor=this._createEditor();editor.control('title').value=device.title;editor.control('width').value=this._toNumericInputValue(device.vertical.width);editor.control('height').value=this._toNumericInputValue(device.vertical.height);editor.control('scale').value=this._toNumericInputValue(device.deviceScaleFactor);editor.control('user-agent').value=device.userAgent;let uaType;if(device.mobile()){uaType=device.touch()?Emulation.DeviceModeModel.UA.Mobile:Emulation.DeviceModeModel.UA.MobileNoTouch;}else{uaType=device.touch()?Emulation.DeviceModeModel.UA.DesktopTouch:Emulation.DeviceModeModel.UA.Desktop;}
editor.control('ua-type').value=uaType;return editor;}
_createEditor(){if(this._editor){return this._editor;}
const editor=new UI.ListWidget.Editor();this._editor=editor;const content=editor.contentElement();const fields=content.createChild('div','devices-edit-fields');fields.createChild('div','hbox').appendChild(editor.createInput('title','text',ls`Device Name`,titleValidator));const screen=fields.createChild('div','hbox');screen.appendChild(editor.createInput('width','text',ls`Width`,widthValidator));screen.appendChild(editor.createInput('height','text',ls`Height`,heightValidator));const dpr=editor.createInput('scale','text',ls`Device pixel ratio`,scaleValidator);dpr.classList.add('device-edit-fixed');screen.appendChild(dpr);const ua=fields.createChild('div','hbox');ua.appendChild(editor.createInput('user-agent','text',ls`User agent string`,()=>{return{valid:true};}));const uaTypeOptions=[Emulation.DeviceModeModel.UA.Mobile,Emulation.DeviceModeModel.UA.MobileNoTouch,Emulation.DeviceModeModel.UA.Desktop,Emulation.DeviceModeModel.UA.DesktopTouch];const uaType=editor.createSelect('ua-type',uaTypeOptions,()=>{return{valid:true};},ls`User agent type`);uaType.classList.add('device-edit-fixed');ua.appendChild(uaType);return editor;function titleValidator(item,index,input){let valid=false;let errorMessage;const value=input.value.trim();if(value.length>=Emulation.DeviceModeModel.MaxDeviceNameLength){errorMessage=ls`Device name must be less than ${Emulation.DeviceModeModel.MaxDeviceNameLength} characters.`;}else if(value.length===0){errorMessage=ls`Device name cannot be empty.`;}else{valid=true;}
return{valid,errorMessage};}
function widthValidator(item,index,input){return Emulation.DeviceModeModel.widthValidator(input.value);}
function heightValidator(item,index,input){return Emulation.DeviceModeModel.heightValidator(input.value);}
function scaleValidator(item,index,input){return Emulation.DeviceModeModel.scaleValidator(input.value);}}};;Emulation.InspectedPagePlaceholder=class extends UI.Widget{constructor(){super(true);this.registerRequiredCSS('emulation/inspectedPagePlaceholder.css');UI.zoomManager.addEventListener(UI.ZoomManager.Events.ZoomChanged,this.onResize,this);this.restoreMinimumSize();}
onResize(){if(this._updateId){this.element.window().cancelAnimationFrame(this._updateId);}
this._updateId=this.element.window().requestAnimationFrame(this.update.bind(this,false));}
restoreMinimumSize(){this.setMinimumSize(150,150);}
clearMinimumSize(){this.setMinimumSize(1,1);}
_dipPageRect(){const zoomFactor=UI.zoomManager.zoomFactor();const rect=this.element.getBoundingClientRect();const bodyRect=this.element.ownerDocument.body.getBoundingClientRect();const left=Math.max(rect.left*zoomFactor,bodyRect.left*zoomFactor);const top=Math.max(rect.top*zoomFactor,bodyRect.top*zoomFactor);const bottom=Math.min(rect.bottom*zoomFactor,bodyRect.bottom*zoomFactor);const right=Math.min(rect.right*zoomFactor,bodyRect.right*zoomFactor);return{x:left,y:top,width:right-left,height:bottom-top};}
update(force){delete this._updateId;const rect=this._dipPageRect();const bounds={x:Math.round(rect.x),y:Math.round(rect.y),height:Math.max(1,Math.round(rect.height)),width:Math.max(1,Math.round(rect.width)),};if(force){--bounds.height;this.dispatchEventToListeners(Emulation.InspectedPagePlaceholder.Events.Update,bounds);++bounds.height;}
this.dispatchEventToListeners(Emulation.InspectedPagePlaceholder.Events.Update,bounds);}};Emulation.InspectedPagePlaceholder.instance=function(){return self.singleton(Emulation.InspectedPagePlaceholder);};Emulation.InspectedPagePlaceholder.Events={Update:Symbol('Update')};;Emulation.MediaQueryInspector=class extends UI.Widget{constructor(getWidthCallback,setWidthCallback){super(true);this.registerRequiredCSS('emulation/mediaQueryInspector.css');this.contentElement.classList.add('media-inspector-view');this.contentElement.addEventListener('click',this._onMediaQueryClicked.bind(this),false);this.contentElement.addEventListener('contextmenu',this._onContextMenu.bind(this),false);this._mediaThrottler=new Common.Throttler(0);this._getWidthCallback=getWidthCallback;this._setWidthCallback=setWidthCallback;this._scale=1;SDK.targetManager.observeModels(SDK.CSSModel,this);UI.zoomManager.addEventListener(UI.ZoomManager.Events.ZoomChanged,this._renderMediaQueries.bind(this),this);}
modelAdded(cssModel){if(this._cssModel){return;}
this._cssModel=cssModel;this._cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetAdded,this._scheduleMediaQueriesUpdate,this);this._cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetRemoved,this._scheduleMediaQueriesUpdate,this);this._cssModel.addEventListener(SDK.CSSModel.Events.StyleSheetChanged,this._scheduleMediaQueriesUpdate,this);this._cssModel.addEventListener(SDK.CSSModel.Events.MediaQueryResultChanged,this._scheduleMediaQueriesUpdate,this);}
modelRemoved(cssModel){if(cssModel!==this._cssModel){return;}
this._cssModel.removeEventListener(SDK.CSSModel.Events.StyleSheetAdded,this._scheduleMediaQueriesUpdate,this);this._cssModel.removeEventListener(SDK.CSSModel.Events.StyleSheetRemoved,this._scheduleMediaQueriesUpdate,this);this._cssModel.removeEventListener(SDK.CSSModel.Events.StyleSheetChanged,this._scheduleMediaQueriesUpdate,this);this._cssModel.removeEventListener(SDK.CSSModel.Events.MediaQueryResultChanged,this._scheduleMediaQueriesUpdate,this);delete this._cssModel;}
setAxisTransform(scale){if(Math.abs(this._scale-scale)<1e-8){return;}
this._scale=scale;this._renderMediaQueries();}
_onMediaQueryClicked(event){const mediaQueryMarker=event.target.enclosingNodeOrSelfWithClass('media-inspector-bar');if(!mediaQueryMarker){return;}
const model=mediaQueryMarker._model;if(model.section()===Emulation.MediaQueryInspector.Section.Max){this._setWidthCallback(model.maxWidthExpression().computedLength());return;}
if(model.section()===Emulation.MediaQueryInspector.Section.Min){this._setWidthCallback(model.minWidthExpression().computedLength());return;}
const currentWidth=this._getWidthCallback();if(currentWidth!==model.minWidthExpression().computedLength()){this._setWidthCallback(model.minWidthExpression().computedLength());}else{this._setWidthCallback(model.maxWidthExpression().computedLength());}}
_onContextMenu(event){if(!this._cssModel||!this._cssModel.isEnabled()){return;}
const mediaQueryMarker=event.target.enclosingNodeOrSelfWithClass('media-inspector-bar');if(!mediaQueryMarker){return;}
const locations=mediaQueryMarker._locations;const uiLocations=new Map();for(let i=0;i<locations.length;++i){const uiLocation=Bindings.cssWorkspaceBinding.rawLocationToUILocation(locations[i]);if(!uiLocation){continue;}
const descriptor=String.sprintf('%s:%d:%d',uiLocation.uiSourceCode.url(),uiLocation.lineNumber+1,uiLocation.columnNumber+1);uiLocations.set(descriptor,uiLocation);}
const contextMenuItems=uiLocations.keysArray().sort();const contextMenu=new UI.ContextMenu(event);const subMenuItem=contextMenu.defaultSection().appendSubMenuItem(Common.UIString('Reveal in source code'));for(let i=0;i<contextMenuItems.length;++i){const title=contextMenuItems[i];subMenuItem.defaultSection().appendItem(title,this._revealSourceLocation.bind(this,(uiLocations.get(title))));}
contextMenu.show();}
_revealSourceLocation(location){Common.Revealer.reveal(location);}
_scheduleMediaQueriesUpdate(){if(!this.isShowing()){return;}
this._mediaThrottler.schedule(this._refetchMediaQueries.bind(this));}
_refetchMediaQueries(){if(!this.isShowing()||!this._cssModel){return Promise.resolve();}
return this._cssModel.mediaQueriesPromise().then(this._rebuildMediaQueries.bind(this));}
_squashAdjacentEqual(models){const filtered=[];for(let i=0;i<models.length;++i){const last=filtered.peekLast();if(!last||!last.equals(models[i])){filtered.push(models[i]);}}
return filtered;}
_rebuildMediaQueries(cssMedias){let queryModels=[];for(let i=0;i<cssMedias.length;++i){const cssMedia=cssMedias[i];if(!cssMedia.mediaList){continue;}
for(let j=0;j<cssMedia.mediaList.length;++j){const mediaQuery=cssMedia.mediaList[j];const queryModel=Emulation.MediaQueryInspector.MediaQueryUIModel.createFromMediaQuery(cssMedia,mediaQuery);if(queryModel&&queryModel.rawLocation()){queryModels.push(queryModel);}}}
queryModels.sort(compareModels);queryModels=this._squashAdjacentEqual(queryModels);let allEqual=this._cachedQueryModels&&this._cachedQueryModels.length===queryModels.length;for(let i=0;allEqual&&i<queryModels.length;++i){allEqual=allEqual&&this._cachedQueryModels[i].equals(queryModels[i]);}
if(allEqual){return;}
this._cachedQueryModels=queryModels;this._renderMediaQueries();function compareModels(model1,model2){return model1.compareTo(model2);}}
_renderMediaQueries(){if(!this._cachedQueryModels||!this.isShowing()){return;}
const markers=[];let lastMarker=null;for(let i=0;i<this._cachedQueryModels.length;++i){const model=this._cachedQueryModels[i];if(lastMarker&&lastMarker.model.dimensionsEqual(model)){lastMarker.locations.push(model.rawLocation());lastMarker.active=lastMarker.active||model.active();}else{lastMarker={active:model.active(),model:model,locations:[model.rawLocation()]};markers.push(lastMarker);}}
this.contentElement.removeChildren();let container=null;for(let i=0;i<markers.length;++i){if(!i||markers[i].model.section()!==markers[i-1].model.section()){container=this.contentElement.createChild('div','media-inspector-marker-container');}
const marker=markers[i];const bar=this._createElementFromMediaQueryModel(marker.model);bar._model=marker.model;bar._locations=marker.locations;bar.classList.toggle('media-inspector-marker-inactive',!marker.active);container.appendChild(bar);}}
_zoomFactor(){return UI.zoomManager.zoomFactor()/this._scale;}
wasShown(){this._scheduleMediaQueriesUpdate();}
_createElementFromMediaQueryModel(model){const zoomFactor=this._zoomFactor();const minWidthValue=model.minWidthExpression()?model.minWidthExpression().computedLength()/zoomFactor:0;const maxWidthValue=model.maxWidthExpression()?model.maxWidthExpression().computedLength()/zoomFactor:0;const result=createElementWithClass('div','media-inspector-bar');if(model.section()===Emulation.MediaQueryInspector.Section.Max){result.createChild('div','media-inspector-marker-spacer');const markerElement=result.createChild('div','media-inspector-marker media-inspector-marker-max-width');markerElement.style.width=maxWidthValue+'px';markerElement.title=model.mediaText();appendLabel(markerElement,model.maxWidthExpression(),false,false);appendLabel(markerElement,model.maxWidthExpression(),true,true);result.createChild('div','media-inspector-marker-spacer');}
if(model.section()===Emulation.MediaQueryInspector.Section.MinMax){result.createChild('div','media-inspector-marker-spacer');const leftElement=result.createChild('div','media-inspector-marker media-inspector-marker-min-max-width');leftElement.style.width=(maxWidthValue-minWidthValue)*0.5+'px';leftElement.title=model.mediaText();appendLabel(leftElement,model.minWidthExpression(),true,false);appendLabel(leftElement,model.maxWidthExpression(),false,true);result.createChild('div','media-inspector-marker-spacer').style.flex='0 0 '+minWidthValue+'px';const rightElement=result.createChild('div','media-inspector-marker media-inspector-marker-min-max-width');rightElement.style.width=(maxWidthValue-minWidthValue)*0.5+'px';rightElement.title=model.mediaText();appendLabel(rightElement,model.minWidthExpression(),true,false);appendLabel(rightElement,model.maxWidthExpression(),false,true);result.createChild('div','media-inspector-marker-spacer');}
if(model.section()===Emulation.MediaQueryInspector.Section.Min){const leftElement=result.createChild('div','media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-left');leftElement.title=model.mediaText();appendLabel(leftElement,model.minWidthExpression(),false,false);result.createChild('div','media-inspector-marker-spacer').style.flex='0 0 '+minWidthValue+'px';const rightElement=result.createChild('div','media-inspector-marker media-inspector-marker-min-width media-inspector-marker-min-width-right');rightElement.title=model.mediaText();appendLabel(rightElement,model.minWidthExpression(),true,true);}
function appendLabel(marker,expression,atLeft,leftAlign){marker.createChild('div','media-inspector-marker-label-container '+(atLeft?'media-inspector-marker-label-container-left':'media-inspector-marker-label-container-right')).createChild('span','media-inspector-marker-label '+
(leftAlign?'media-inspector-label-left':'media-inspector-label-right')).textContent=expression.value()+expression.unit();}
return result;}};Emulation.MediaQueryInspector.Section={Max:0,MinMax:1,Min:2};Emulation.MediaQueryInspector.MediaQueryUIModel=class{constructor(cssMedia,minWidthExpression,maxWidthExpression,active){this._cssMedia=cssMedia;this._minWidthExpression=minWidthExpression;this._maxWidthExpression=maxWidthExpression;this._active=active;if(maxWidthExpression&&!minWidthExpression){this._section=Emulation.MediaQueryInspector.Section.Max;}else if(minWidthExpression&&maxWidthExpression){this._section=Emulation.MediaQueryInspector.Section.MinMax;}else{this._section=Emulation.MediaQueryInspector.Section.Min;}}
static createFromMediaQuery(cssMedia,mediaQuery){let maxWidthExpression=null;let maxWidthPixels=Number.MAX_VALUE;let minWidthExpression=null;let minWidthPixels=Number.MIN_VALUE;const expressions=mediaQuery.expressions();for(let i=0;i<expressions.length;++i){const expression=expressions[i];const feature=expression.feature();if(feature.indexOf('width')===-1){continue;}
const pixels=expression.computedLength();if(feature.startsWith('max-')&&pixels<maxWidthPixels){maxWidthExpression=expression;maxWidthPixels=pixels;}else if(feature.startsWith('min-')&&pixels>minWidthPixels){minWidthExpression=expression;minWidthPixels=pixels;}}
if(minWidthPixels>maxWidthPixels||(!maxWidthExpression&&!minWidthExpression)){return null;}
return new Emulation.MediaQueryInspector.MediaQueryUIModel(cssMedia,minWidthExpression,maxWidthExpression,mediaQuery.active());}
equals(other){return this.compareTo(other)===0;}
dimensionsEqual(other){return this.section()===other.section()&&(!this.minWidthExpression()||(this.minWidthExpression().computedLength()===other.minWidthExpression().computedLength()))&&(!this.maxWidthExpression()||(this.maxWidthExpression().computedLength()===other.maxWidthExpression().computedLength()));}
compareTo(other){if(this.section()!==other.section()){return this.section()-other.section();}
if(this.dimensionsEqual(other)){const myLocation=this.rawLocation();const otherLocation=other.rawLocation();if(!myLocation&&!otherLocation){return this.mediaText().compareTo(other.mediaText());}
if(myLocation&&!otherLocation){return 1;}
if(!myLocation&&otherLocation){return-1;}
if(this.active()!==other.active()){return this.active()?-1:1;}
return myLocation.url.compareTo(otherLocation.url)||myLocation.lineNumber-otherLocation.lineNumber||myLocation.columnNumber-otherLocation.columnNumber;}
if(this.section()===Emulation.MediaQueryInspector.Section.Max){return other.maxWidthExpression().computedLength()-this.maxWidthExpression().computedLength();}
if(this.section()===Emulation.MediaQueryInspector.Section.Min){return this.minWidthExpression().computedLength()-other.minWidthExpression().computedLength();}
return this.minWidthExpression().computedLength()-other.minWidthExpression().computedLength()||other.maxWidthExpression().computedLength()-this.maxWidthExpression().computedLength();}
section(){return this._section;}
mediaText(){return this._cssMedia.text;}
rawLocation(){if(!this._rawLocation){this._rawLocation=this._cssMedia.rawLocation();}
return this._rawLocation;}
minWidthExpression(){return this._minWidthExpression;}
maxWidthExpression(){return this._maxWidthExpression;}
active(){return this._active;}};;Emulation.SensorsView=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('emulation/sensors.css');this.contentElement.classList.add('sensors-view');this._geolocationSetting=Common.settings.createSetting('emulation.geolocationOverride','');this._geolocation=SDK.EmulationModel.Geolocation.parseSetting(this._geolocationSetting.get());this._geolocationOverrideEnabled=false;this._createGeolocationSection(this._geolocation);this.contentElement.createChild('div').classList.add('panel-section-separator');this._deviceOrientationSetting=Common.settings.createSetting('emulation.deviceOrientationOverride','');this._deviceOrientation=SDK.EmulationModel.DeviceOrientation.parseSetting(this._deviceOrientationSetting.get());this._deviceOrientationOverrideEnabled=false;this._createDeviceOrientationSection();this.contentElement.createChild('div').classList.add('panel-section-separator');this._appendTouchControl();}
static instance(){if(!Emulation.SensorsView._instanceObject){Emulation.SensorsView._instanceObject=new Emulation.SensorsView();}
return Emulation.SensorsView._instanceObject;}
_createGeolocationSection(geolocation){const geogroup=this.contentElement.createChild('section','sensors-group');const geogroupTitle=UI.createLabel(ls`Geolocation`,'sensors-group-title');geogroup.appendChild(geogroupTitle);const fields=geogroup.createChild('div','geo-fields');const noOverrideOption={title:Common.UIString('No override'),location:Emulation.SensorsView.NonPresetOptions.NoOverride};this._locationSelectElement=fields.createChild('select','chrome-select');UI.ARIAUtils.bindLabelToControl(geogroupTitle,this._locationSelectElement);this._locationSelectElement.appendChild(new Option(noOverrideOption.title,noOverrideOption.location));this._customLocationsGroup=this._locationSelectElement.createChild('optgroup');this._customLocationsGroup.label=ls`Overrides`;const customGeolocations=Common.moduleSetting('emulation.geolocations');const manageButton=UI.createTextButton(ls`Manage`,()=>Common.Revealer.reveal(customGeolocations));UI.ARIAUtils.setAccessibleName(manageButton,ls`Manage the list of geolocations`);fields.appendChild(manageButton);const fillCustomSettings=()=>{this._customLocationsGroup.removeChildren();for(const geolocation of customGeolocations.get()){this._customLocationsGroup.appendChild(new Option(geolocation.title,JSON.stringify(geolocation)));}};customGeolocations.addChangeListener(fillCustomSettings);fillCustomSettings();const customLocationOption={title:Common.UIString('Other\u2026'),location:Emulation.SensorsView.NonPresetOptions.Custom};this._locationSelectElement.appendChild(new Option(customLocationOption.title,customLocationOption.location));const group=this._locationSelectElement.createChild('optgroup');group.label=ls`Error`;group.appendChild(new Option(ls`Location unavailable`,Emulation.SensorsView.NonPresetOptions.Unavailable));this._locationSelectElement.selectedIndex=0;this._locationSelectElement.addEventListener('change',this._geolocationSelectChanged.bind(this));this._fieldsetElement=fields.createChild('fieldset');this._fieldsetElement.disabled=!this._geolocationOverrideEnabled;this._fieldsetElement.id='geolocation-override-section';const latitudeGroup=this._fieldsetElement.createChild('div','latlong-group');const longitudeGroup=this._fieldsetElement.createChild('div','latlong-group');const timezoneGroup=this._fieldsetElement.createChild('div','latlong-group');const cmdOrCtrl=Host.isMac()?'\u2318':'Ctrl';const modifierKeyMessage=ls`Adjust with mousewheel or up/down keys. ${cmdOrCtrl}: ±10, Shift: ±1, Alt: ±0.01`;this._latitudeInput=UI.createInput('','number');latitudeGroup.appendChild(this._latitudeInput);this._latitudeInput.setAttribute('step','any');this._latitudeInput.value=0;this._latitudeSetter=UI.bindInput(this._latitudeInput,this._applyGeolocationUserInput.bind(this),SDK.EmulationModel.Geolocation.latitudeValidator,true,0.1);this._latitudeSetter(String(geolocation.latitude));this._latitudeInput.title=modifierKeyMessage;latitudeGroup.appendChild(UI.createLabel(ls`Latitude`,'latlong-title',this._latitudeInput));this._longitudeInput=UI.createInput('','number');longitudeGroup.appendChild(this._longitudeInput);this._longitudeInput.setAttribute('step','any');this._longitudeInput.value=0;this._longitudeSetter=UI.bindInput(this._longitudeInput,this._applyGeolocationUserInput.bind(this),SDK.EmulationModel.Geolocation.longitudeValidator,true,0.1);this._longitudeSetter(String(geolocation.longitude));this._longitudeInput.title=modifierKeyMessage;longitudeGroup.appendChild(UI.createLabel(ls`Longitude`,'latlong-title',this._longitudeInput));this._timezoneInput=UI.createInput('','text');timezoneGroup.appendChild(this._timezoneInput);this._timezoneInput.value='Europe/Berlin';this._timezoneSetter=UI.bindInput(this._timezoneInput,this._applyGeolocationUserInput.bind(this),SDK.EmulationModel.Geolocation.timezoneIdValidator,false);this._timezoneSetter(String(geolocation.timezoneId));timezoneGroup.appendChild(UI.createLabel(ls`Timezone ID`,'timezone-title',this._timezoneInput));this._timezoneError=timezoneGroup.createChild('div','timezone-error');}
_geolocationSelectChanged(){this._fieldsetElement.disabled=false;this._timezoneError.textContent='';const value=this._locationSelectElement.options[this._locationSelectElement.selectedIndex].value;if(value===Emulation.SensorsView.NonPresetOptions.NoOverride){this._geolocationOverrideEnabled=false;this._fieldsetElement.disabled=true;}else if(value===Emulation.SensorsView.NonPresetOptions.Custom){this._geolocationOverrideEnabled=true;const geolocation=SDK.EmulationModel.Geolocation.parseUserInput(this._latitudeInput.value.trim(),this._longitudeInput.value.trim(),this._timezoneInput.value.trim());if(!geolocation){return;}
this._geolocation=geolocation;}else if(value===Emulation.SensorsView.NonPresetOptions.Unavailable){this._geolocationOverrideEnabled=true;this._geolocation=new SDK.EmulationModel.Geolocation(0,0,'',true);}else{this._geolocationOverrideEnabled=true;const coordinates=JSON.parse(value);this._geolocation=new SDK.EmulationModel.Geolocation(coordinates.lat,coordinates.long,coordinates.timezoneId,false);this._latitudeSetter(coordinates.lat);this._longitudeSetter(coordinates.long);this._timezoneSetter(coordinates.timezoneId);}
this._applyGeolocation();if(value===Emulation.SensorsView.NonPresetOptions.Custom){this._latitudeInput.focus();}}
_applyGeolocationUserInput(){const geolocation=SDK.EmulationModel.Geolocation.parseUserInput(this._latitudeInput.value.trim(),this._longitudeInput.value.trim(),this._timezoneInput.value.trim());if(!geolocation){return;}
this._timezoneError.textContent='';this._setSelectElementLabel(this._locationSelectElement,Emulation.SensorsView.NonPresetOptions.Custom);this._geolocation=geolocation;this._applyGeolocation();}
_applyGeolocation(){if(this._geolocationOverrideEnabled){this._geolocationSetting.set(this._geolocation.toSetting());}
for(const emulationModel of SDK.targetManager.models(SDK.EmulationModel)){emulationModel.emulateGeolocation(this._geolocationOverrideEnabled?this._geolocation:null).catch(err=>{switch(err.type){case'emulation-set-timezone':this._timezoneError.textContent=err.message;break;}});}}
_createDeviceOrientationSection(){const orientationGroup=this.contentElement.createChild('section','sensors-group');const orientationTitle=UI.createLabel(ls`Orientation`,'sensors-group-title');orientationGroup.appendChild(orientationTitle);const orientationContent=orientationGroup.createChild('div','orientation-content');const fields=orientationContent.createChild('div','orientation-fields');const orientationOffOption={title:Common.UIString('Off'),orientation:Emulation.SensorsView.NonPresetOptions.NoOverride};const customOrientationOption={title:Common.UIString('Custom orientation...'),orientation:Emulation.SensorsView.NonPresetOptions.Custom};this._orientationSelectElement=this.contentElement.createChild('select','chrome-select');UI.ARIAUtils.bindLabelToControl(orientationTitle,this._orientationSelectElement);this._orientationSelectElement.appendChild(new Option(orientationOffOption.title,orientationOffOption.orientation));this._orientationSelectElement.appendChild(new Option(customOrientationOption.title,customOrientationOption.orientation));const orientationGroups=Emulation.SensorsView.PresetOrientations;for(let i=0;i<orientationGroups.length;++i){const groupElement=this._orientationSelectElement.createChild('optgroup');groupElement.label=orientationGroups[i].title;const group=orientationGroups[i].value;for(let j=0;j<group.length;++j){groupElement.appendChild(new Option(group[j].title,group[j].orientation));}}
this._orientationSelectElement.selectedIndex=0;fields.appendChild(this._orientationSelectElement);this._orientationSelectElement.addEventListener('change',this._orientationSelectChanged.bind(this));this._deviceOrientationFieldset=this._createDeviceOrientationOverrideElement(this._deviceOrientation);this._stageElement=orientationContent.createChild('div','orientation-stage');this._orientationLayer=this._stageElement.createChild('div','orientation-layer');this._boxElement=this._orientationLayer.createChild('section','orientation-box orientation-element');this._boxElement.createChild('section','orientation-front orientation-element');this._boxElement.createChild('section','orientation-top orientation-element');this._boxElement.createChild('section','orientation-back orientation-element');this._boxElement.createChild('section','orientation-left orientation-element');this._boxElement.createChild('section','orientation-right orientation-element');this._boxElement.createChild('section','orientation-bottom orientation-element');UI.installDragHandle(this._stageElement,this._onBoxDragStart.bind(this),this._onBoxDrag.bind(this),null,'-webkit-grabbing','-webkit-grab');fields.appendChild(this._deviceOrientationFieldset);this._enableOrientationFields(true);this._setBoxOrientation(this._deviceOrientation,false);}
_enableOrientationFields(disable){if(disable){this._deviceOrientationFieldset.disabled=true;this._stageElement.classList.add('disabled');this._stageElement.title=ls`Enable orientation to rotate`;}else{this._deviceOrientationFieldset.disabled=false;this._stageElement.classList.remove('disabled');this._stageElement.title=ls`Shift+drag horizontally to rotate around the y-axis`;}}
_orientationSelectChanged(){const value=this._orientationSelectElement.options[this._orientationSelectElement.selectedIndex].value;this._enableOrientationFields(false);if(value===Emulation.SensorsView.NonPresetOptions.NoOverride){this._deviceOrientationOverrideEnabled=false;this._enableOrientationFields(true);}else if(value===Emulation.SensorsView.NonPresetOptions.Custom){this._deviceOrientationOverrideEnabled=true;this._alphaElement.focus();}else{const parsedValue=JSON.parse(value);this._deviceOrientationOverrideEnabled=true;this._deviceOrientation=new SDK.EmulationModel.DeviceOrientation(parsedValue[0],parsedValue[1],parsedValue[2]);this._setDeviceOrientation(this._deviceOrientation,Emulation.SensorsView.DeviceOrientationModificationSource.SelectPreset);}}
_applyDeviceOrientation(){if(this._deviceOrientationOverrideEnabled){this._deviceOrientationSetting.set(this._deviceOrientation.toSetting());}
for(const emulationModel of SDK.targetManager.models(SDK.EmulationModel)){emulationModel.emulateDeviceOrientation(this._deviceOrientationOverrideEnabled?this._deviceOrientation:null);}}
_setSelectElementLabel(selectElement,labelValue){const optionValues=Array.prototype.map.call(selectElement.options,x=>x.value);selectElement.selectedIndex=optionValues.indexOf(labelValue);}
_applyDeviceOrientationUserInput(){this._setDeviceOrientation(SDK.EmulationModel.DeviceOrientation.parseUserInput(this._alphaElement.value.trim(),this._betaElement.value.trim(),this._gammaElement.value.trim()),Emulation.SensorsView.DeviceOrientationModificationSource.UserInput);this._setSelectElementLabel(this._orientationSelectElement,Emulation.SensorsView.NonPresetOptions.Custom);}
_resetDeviceOrientation(){this._setDeviceOrientation(new SDK.EmulationModel.DeviceOrientation(0,90,0),Emulation.SensorsView.DeviceOrientationModificationSource.ResetButton);this._setSelectElementLabel(this._orientationSelectElement,'[0, 90, 0]');}
_setDeviceOrientation(deviceOrientation,modificationSource){if(!deviceOrientation){return;}
function roundAngle(angle){return Math.round(angle*10000)/10000;}
if(modificationSource!==Emulation.SensorsView.DeviceOrientationModificationSource.UserInput){this._alphaSetter(roundAngle(deviceOrientation.alpha));this._betaSetter(roundAngle(deviceOrientation.beta));this._gammaSetter(roundAngle(deviceOrientation.gamma));}
const animate=modificationSource!==Emulation.SensorsView.DeviceOrientationModificationSource.UserDrag;this._setBoxOrientation(deviceOrientation,animate);this._deviceOrientation=deviceOrientation;this._applyDeviceOrientation();UI.ARIAUtils.alert(ls`Device orientation set to alpha: ${deviceOrientation.alpha}, beta: ${deviceOrientation.beta}, gamma: ${
            deviceOrientation.gamma}`,this._orientationSelectElement);}
_createAxisInput(parentElement,input,label){const div=parentElement.createChild('div','orientation-axis-input-container');div.appendChild(input);div.appendChild(UI.createLabel(label,'',input));input.type='number';return UI.bindInput(input,this._applyDeviceOrientationUserInput.bind(this),SDK.EmulationModel.DeviceOrientation.validator,true);}
_createDeviceOrientationOverrideElement(deviceOrientation){const fieldsetElement=createElement('fieldset');fieldsetElement.classList.add('device-orientation-override-section');const cellElement=fieldsetElement.createChild('td','orientation-inputs-cell');this._alphaElement=UI.createInput();this._alphaElement.setAttribute('step','any');this._alphaSetter=this._createAxisInput(cellElement,this._alphaElement,Common.UIString('\u03B1 (alpha)'));this._alphaSetter(String(deviceOrientation.alpha));this._betaElement=UI.createInput();this._betaElement.setAttribute('step','any');this._betaSetter=this._createAxisInput(cellElement,this._betaElement,Common.UIString('\u03B2 (beta)'));this._betaSetter(String(deviceOrientation.beta));this._gammaElement=UI.createInput();this._gammaElement.setAttribute('step','any');this._gammaSetter=this._createAxisInput(cellElement,this._gammaElement,Common.UIString('\u03B3 (gamma)'));this._gammaSetter(String(deviceOrientation.gamma));const resetButton=UI.createTextButton(Common.UIString('Reset'),this._resetDeviceOrientation.bind(this),'orientation-reset-button');UI.ARIAUtils.setAccessibleName(resetButton,ls`Reset device orientation`);resetButton.setAttribute('type','reset');cellElement.appendChild(resetButton);return fieldsetElement;}
_setBoxOrientation(deviceOrientation,animate){if(animate){this._stageElement.classList.add('is-animating');}else{this._stageElement.classList.remove('is-animating');}
const matrix=new WebKitCSSMatrix();this._boxMatrix=matrix.rotate(-deviceOrientation.beta,deviceOrientation.gamma,-deviceOrientation.alpha);const eulerAngles=new UI.Geometry.EulerAngles(deviceOrientation.alpha,deviceOrientation.beta,deviceOrientation.gamma);this._orientationLayer.style.transform=eulerAngles.toRotate3DString();}
_onBoxDrag(event){const mouseMoveVector=this._calculateRadiusVector(event.x,event.y);if(!mouseMoveVector){return true;}
event.consume(true);let axis,angle;if(event.shiftKey){axis=new UI.Geometry.Vector(0,0,-1);angle=(this._mouseDownVector.x-mouseMoveVector.x)*Emulation.SensorsView.ShiftDragOrientationSpeed;}else{axis=UI.Geometry.crossProduct(this._mouseDownVector,mouseMoveVector);angle=UI.Geometry.calculateAngle(this._mouseDownVector,mouseMoveVector);}
let currentMatrix=new WebKitCSSMatrix();currentMatrix=currentMatrix.rotate(-90,0,0).rotateAxisAngle(axis.x,axis.y,axis.z,angle).rotate(90,0,0).multiply(this._originalBoxMatrix);const eulerAngles=UI.Geometry.EulerAngles.fromRotationMatrix(currentMatrix);const newOrientation=new SDK.EmulationModel.DeviceOrientation(-eulerAngles.alpha,-eulerAngles.beta,eulerAngles.gamma);this._setDeviceOrientation(newOrientation,Emulation.SensorsView.DeviceOrientationModificationSource.UserDrag);this._setSelectElementLabel(this._orientationSelectElement,Emulation.SensorsView.NonPresetOptions.Custom);return false;}
_onBoxDragStart(event){if(!this._deviceOrientationOverrideEnabled){return false;}
this._mouseDownVector=this._calculateRadiusVector(event.x,event.y);this._originalBoxMatrix=this._boxMatrix;if(!this._mouseDownVector){return false;}
event.consume(true);return true;}
_calculateRadiusVector(x,y){const rect=this._stageElement.getBoundingClientRect();const radius=Math.max(rect.width,rect.height)/2;const sphereX=(x-rect.left-rect.width/2)/radius;const sphereY=(y-rect.top-rect.height/2)/radius;const sqrSum=sphereX*sphereX+sphereY*sphereY;if(sqrSum>0.5){return new UI.Geometry.Vector(sphereX,sphereY,0.5/Math.sqrt(sqrSum));}
return new UI.Geometry.Vector(sphereX,sphereY,Math.sqrt(1-sqrSum));}
_appendTouchControl(){const groupElement=this.contentElement.createChild('div','sensors-group');const title=UI.createLabel(ls`Touch`,'sensors-group-title');groupElement.appendChild(title);const fieldsElement=groupElement.createChild('div','sensors-group-fields');const select=fieldsElement.createChild('select','chrome-select');UI.ARIAUtils.bindLabelToControl(title,select);select.appendChild(new Option(Common.UIString('Device-based'),'auto'));select.appendChild(new Option(Common.UIString('Force enabled'),'enabled'));select.addEventListener('change',applyTouch,false);const reloadWarning=groupElement.createChild('div','reload-warning hidden');reloadWarning.textContent=Common.UIString('*Requires reload');UI.ARIAUtils.markAsAlert(reloadWarning);function applyTouch(){for(const emulationModel of SDK.targetManager.models(SDK.EmulationModel)){emulationModel.overrideEmulateTouch(select.value==='enabled');}
reloadWarning.classList.remove('hidden');const resourceTreeModel=SDK.targetManager.models(SDK.ResourceTreeModel)[0];if(resourceTreeModel){resourceTreeModel.once(SDK.ResourceTreeModel.Events.MainFrameNavigated).then(()=>reloadWarning.classList.add('hidden'));}}}};Emulation.SensorsView.DeviceOrientationModificationSource={UserInput:'userInput',UserDrag:'userDrag',ResetButton:'resetButton',SelectPreset:'selectPreset'};Emulation.SensorsView.NonPresetOptions={NoOverride:'noOverride',Custom:'custom',Unavailable:'unavailable'};Emulation.SensorsView.PresetOrientations=[{title:ls`Presets`,value:[{title:Common.UIString('Portrait'),orientation:'[0, 90, 0]'},{title:Common.UIString('Portrait upside down'),orientation:'[180, -90, 0]'},{title:Common.UIString('Landscape left'),orientation:'[0, 90, -90]'},{title:Common.UIString('Landscape right'),orientation:'[0, 90, 90]'},{title:Common.UIString('Display up'),orientation:'[0, 0, 0]'},{title:Common.UIString('Display down'),orientation:'[0, 180, 0]'}]}];Emulation.SensorsView.ShowActionDelegate=class{handleAction(context,actionId){UI.viewManager.showView('sensors');return true;}};Emulation.SensorsView.ShiftDragOrientationSpeed=16;;Emulation.DeviceModeModel=class extends Common.Object{constructor(){super();this._screenRect=new UI.Rect(0,0,1,1);this._visiblePageRect=new UI.Rect(0,0,1,1);this._availableSize=new UI.Size(1,1);this._preferredSize=new UI.Size(1,1);this._initialized=false;this._appliedDeviceSize=new UI.Size(1,1);this._appliedDeviceScaleFactor=window.devicePixelRatio;this._appliedUserAgentType=Emulation.DeviceModeModel.UA.Desktop;this._scaleSetting=Common.settings.createSetting('emulation.deviceScale',1);if(!this._scaleSetting.get()){this._scaleSetting.set(1);}
this._scaleSetting.addChangeListener(this._scaleSettingChanged,this);this._widthSetting=Common.settings.createSetting('emulation.deviceWidth',400);if(this._widthSetting.get()<Emulation.DeviceModeModel.MinDeviceSize){this._widthSetting.set(Emulation.DeviceModeModel.MinDeviceSize);}
if(this._widthSetting.get()>Emulation.DeviceModeModel.MaxDeviceSize){this._widthSetting.set(Emulation.DeviceModeModel.MaxDeviceSize);}
this._widthSetting.addChangeListener(this._widthSettingChanged,this);this._heightSetting=Common.settings.createSetting('emulation.deviceHeight',0);if(this._heightSetting.get()&&this._heightSetting.get()<Emulation.DeviceModeModel.MinDeviceSize){this._heightSetting.set(Emulation.DeviceModeModel.MinDeviceSize);}
if(this._heightSetting.get()>Emulation.DeviceModeModel.MaxDeviceSize){this._heightSetting.set(Emulation.DeviceModeModel.MaxDeviceSize);}
this._heightSetting.addChangeListener(this._heightSettingChanged,this);this._uaSetting=Common.settings.createSetting('emulation.deviceUA',Emulation.DeviceModeModel.UA.Mobile);this._uaSetting.addChangeListener(this._uaSettingChanged,this);this._deviceScaleFactorSetting=Common.settings.createSetting('emulation.deviceScaleFactor',0);this._deviceScaleFactorSetting.addChangeListener(this._deviceScaleFactorSettingChanged,this);this._deviceOutlineSetting=Common.settings.moduleSetting('emulation.showDeviceOutline');this._deviceOutlineSetting.addChangeListener(this._deviceOutlineSettingChanged,this);this._toolbarControlsEnabledSetting=Common.settings.createSetting('emulation.toolbarControlsEnabled',true,Common.SettingStorageType.Session);this._type=Emulation.DeviceModeModel.Type.None;this._device=null;this._mode=null;this._fitScale=1;this._touchEnabled=false;this._touchMobile=false;this._emulationModel=null;this._onModelAvailable=null;SDK.targetManager.observeModels(SDK.EmulationModel,this);}
static widthValidator(value){let valid=false;let errorMessage;if(!/^[\d]+$/.test(value)){errorMessage=ls`Width must be a number.`;}else if(value>Emulation.DeviceModeModel.MaxDeviceSize){errorMessage=ls`Width must be less than or equal to ${Emulation.DeviceModeModel.MaxDeviceSize}.`;}else if(value<Emulation.DeviceModeModel.MinDeviceSize){errorMessage=ls`Width must be greater than or equal to ${Emulation.DeviceModeModel.MinDeviceSize}.`;}else{valid=true;}
return{valid,errorMessage};}
static heightValidator(value){let valid=false;let errorMessage;if(!/^[\d]+$/.test(value)){errorMessage=ls`Height must be a number.`;}else if(value>Emulation.DeviceModeModel.MaxDeviceSize){errorMessage=ls`Height must be less than or equal to ${Emulation.DeviceModeModel.MaxDeviceSize}.`;}else if(value<Emulation.DeviceModeModel.MinDeviceSize){errorMessage=ls`Height must be greater than or equal to ${Emulation.DeviceModeModel.MinDeviceSize}.`;}else{valid=true;}
return{valid,errorMessage};}
static scaleValidator(value){let valid=false;let errorMessage;const parsedValue=Number(value.trim());if(!value){valid=true;}else if(Number.isNaN(parsedValue)){errorMessage=ls`Device pixel ratio must be a number or blank.`;}else if(value>Emulation.DeviceModeModel.MaxDeviceScaleFactor){errorMessage=ls`Device pixel ratio must be less than or equal to ${Emulation.DeviceModeModel.MaxDeviceScaleFactor}.`;}else if(value<Emulation.DeviceModeModel.MinDeviceScaleFactor){errorMessage=ls`Device pixel ratio must be greater than or equal to ${Emulation.DeviceModeModel.MinDeviceScaleFactor}.`;}else{valid=true;}
return{valid,errorMessage};}
setAvailableSize(availableSize,preferredSize){this._availableSize=availableSize;this._preferredSize=preferredSize;this._initialized=true;this._calculateAndEmulate(false);}
emulate(type,device,mode,scale){const resetPageScaleFactor=this._type!==type||this._device!==device||this._mode!==mode;this._type=type;if(type===Emulation.DeviceModeModel.Type.Device){console.assert(device&&mode,'Must pass device and mode for device emulation');this._mode=mode;this._device=device;if(this._initialized){const orientation=device.orientationByName(mode.orientation);this._scaleSetting.set(scale||this._calculateFitScale(orientation.width,orientation.height,this._currentOutline(),this._currentInsets()));}}else{this._device=null;this._mode=null;}
if(type!==Emulation.DeviceModeModel.Type.None){Host.userMetrics.actionTaken(Host.UserMetrics.Action.DeviceModeEnabled);}
this._calculateAndEmulate(resetPageScaleFactor);}
setWidth(width){const max=Math.min(Emulation.DeviceModeModel.MaxDeviceSize,this._preferredScaledWidth());width=Math.max(Math.min(width,max),1);this._widthSetting.set(width);}
setWidthAndScaleToFit(width){width=Math.max(Math.min(width,Emulation.DeviceModeModel.MaxDeviceSize),1);this._scaleSetting.set(this._calculateFitScale(width,this._heightSetting.get()));this._widthSetting.set(width);}
setHeight(height){const max=Math.min(Emulation.DeviceModeModel.MaxDeviceSize,this._preferredScaledHeight());height=Math.max(Math.min(height,max),0);if(height===this._preferredScaledHeight()){height=0;}
this._heightSetting.set(height);}
setHeightAndScaleToFit(height){height=Math.max(Math.min(height,Emulation.DeviceModeModel.MaxDeviceSize),0);this._scaleSetting.set(this._calculateFitScale(this._widthSetting.get(),height));this._heightSetting.set(height);}
setScale(scale){this._scaleSetting.set(scale);}
device(){return this._device;}
mode(){return this._mode;}
type(){return this._type;}
screenImage(){return(this._device&&this._mode)?this._device.modeImage(this._mode):'';}
outlineImage(){return(this._device&&this._mode&&this._deviceOutlineSetting.get())?this._device.outlineImage(this._mode):'';}
outlineRect(){return this._outlineRect;}
screenRect(){return this._screenRect;}
visiblePageRect(){return this._visiblePageRect;}
scale(){return this._scale;}
fitScale(){return this._fitScale;}
appliedDeviceSize(){return this._appliedDeviceSize;}
appliedDeviceScaleFactor(){return this._appliedDeviceScaleFactor;}
appliedUserAgentType(){return this._appliedUserAgentType;}
isFullHeight(){return!this._heightSetting.get();}
_isMobile(){switch(this._type){case Emulation.DeviceModeModel.Type.Device:return this._device.mobile();case Emulation.DeviceModeModel.Type.None:return false;case Emulation.DeviceModeModel.Type.Responsive:return this._uaSetting.get()===Emulation.DeviceModeModel.UA.Mobile||this._uaSetting.get()===Emulation.DeviceModeModel.UA.MobileNoTouch;}
return false;}
enabledSetting(){return Common.settings.createSetting('emulation.showDeviceMode',false);}
scaleSetting(){return this._scaleSetting;}
uaSetting(){return this._uaSetting;}
deviceScaleFactorSetting(){return this._deviceScaleFactorSetting;}
deviceOutlineSetting(){return this._deviceOutlineSetting;}
toolbarControlsEnabledSetting(){return this._toolbarControlsEnabledSetting;}
reset(){this._deviceScaleFactorSetting.set(0);this._scaleSetting.set(1);this.setWidth(400);this.setHeight(0);this._uaSetting.set(Emulation.DeviceModeModel.UA.Mobile);}
modelAdded(emulationModel){if(!this._emulationModel&&emulationModel.supportsDeviceEmulation()){this._emulationModel=emulationModel;if(this._onModelAvailable){const callback=this._onModelAvailable;this._onModelAvailable=null;callback();}}else{emulationModel.emulateTouch(this._touchEnabled,this._touchMobile);}}
modelRemoved(emulationModel){if(this._emulationModel===emulationModel){this._emulationModel=null;}}
inspectedURL(){return this._emulationModel?this._emulationModel.target().inspectedURL():null;}
_scaleSettingChanged(){this._calculateAndEmulate(false);}
_widthSettingChanged(){this._calculateAndEmulate(false);}
_heightSettingChanged(){this._calculateAndEmulate(false);}
_uaSettingChanged(){this._calculateAndEmulate(true);}
_deviceScaleFactorSettingChanged(){this._calculateAndEmulate(false);}
_deviceOutlineSettingChanged(){this._calculateAndEmulate(false);}
_preferredScaledWidth(){return Math.floor(this._preferredSize.width/(this._scaleSetting.get()||1));}
_preferredScaledHeight(){return Math.floor(this._preferredSize.height/(this._scaleSetting.get()||1));}
_currentOutline(){let outline=new UI.Insets(0,0,0,0);if(this._type!==Emulation.DeviceModeModel.Type.Device){return outline;}
const orientation=this._device.orientationByName(this._mode.orientation);if(this._deviceOutlineSetting.get()){outline=orientation.outlineInsets||outline;}
return outline;}
_currentInsets(){if(this._type!==Emulation.DeviceModeModel.Type.Device){return new UI.Insets(0,0,0,0);}
return this._mode.insets;}
_calculateAndEmulate(resetPageScaleFactor){if(!this._emulationModel){this._onModelAvailable=this._calculateAndEmulate.bind(this,resetPageScaleFactor);}
const mobile=this._isMobile();if(this._type===Emulation.DeviceModeModel.Type.Device){const orientation=this._device.orientationByName(this._mode.orientation);const outline=this._currentOutline();const insets=this._currentInsets();this._fitScale=this._calculateFitScale(orientation.width,orientation.height,outline,insets);if(mobile){this._appliedUserAgentType=this._device.touch()?Emulation.DeviceModeModel.UA.Mobile:Emulation.DeviceModeModel.UA.MobileNoTouch;}else{this._appliedUserAgentType=this._device.touch()?Emulation.DeviceModeModel.UA.DesktopTouch:Emulation.DeviceModeModel.UA.Desktop;}
this._applyDeviceMetrics(new UI.Size(orientation.width,orientation.height),insets,outline,this._scaleSetting.get(),this._device.deviceScaleFactor,mobile,this._mode.orientation===Emulation.EmulatedDevice.Horizontal?Protocol.Emulation.ScreenOrientationType.LandscapePrimary:Protocol.Emulation.ScreenOrientationType.PortraitPrimary,resetPageScaleFactor);this._applyUserAgent(this._device.userAgent);this._applyTouch(this._device.touch(),mobile);}else if(this._type===Emulation.DeviceModeModel.Type.None){this._fitScale=this._calculateFitScale(this._availableSize.width,this._availableSize.height);this._appliedUserAgentType=Emulation.DeviceModeModel.UA.Desktop;this._applyDeviceMetrics(this._availableSize,new UI.Insets(0,0,0,0),new UI.Insets(0,0,0,0),1,0,mobile,null,resetPageScaleFactor);this._applyUserAgent('');this._applyTouch(false,false);}else if(this._type===Emulation.DeviceModeModel.Type.Responsive){let screenWidth=this._widthSetting.get();if(!screenWidth||screenWidth>this._preferredScaledWidth()){screenWidth=this._preferredScaledWidth();}
let screenHeight=this._heightSetting.get();if(!screenHeight||screenHeight>this._preferredScaledHeight()){screenHeight=this._preferredScaledHeight();}
const defaultDeviceScaleFactor=mobile?Emulation.DeviceModeModel.defaultMobileScaleFactor:0;this._fitScale=this._calculateFitScale(this._widthSetting.get(),this._heightSetting.get());this._appliedUserAgentType=this._uaSetting.get();this._applyDeviceMetrics(new UI.Size(screenWidth,screenHeight),new UI.Insets(0,0,0,0),new UI.Insets(0,0,0,0),this._scaleSetting.get(),this._deviceScaleFactorSetting.get()||defaultDeviceScaleFactor,mobile,screenHeight>=screenWidth?Protocol.Emulation.ScreenOrientationType.PortraitPrimary:Protocol.Emulation.ScreenOrientationType.LandscapePrimary,resetPageScaleFactor);this._applyUserAgent(mobile?Emulation.DeviceModeModel._defaultMobileUserAgent:'');this._applyTouch(this._uaSetting.get()===Emulation.DeviceModeModel.UA.DesktopTouch||this._uaSetting.get()===Emulation.DeviceModeModel.UA.Mobile,this._uaSetting.get()===Emulation.DeviceModeModel.UA.Mobile);}
const overlayModel=this._emulationModel?this._emulationModel.overlayModel():null;if(overlayModel){overlayModel.setShowViewportSizeOnResize(this._type===Emulation.DeviceModeModel.Type.None);}
this.dispatchEventToListeners(Emulation.DeviceModeModel.Events.Updated);}
_calculateFitScale(screenWidth,screenHeight,outline,insets){const outlineWidth=outline?outline.left+outline.right:0;const outlineHeight=outline?outline.top+outline.bottom:0;const insetsWidth=insets?insets.left+insets.right:0;const insetsHeight=insets?insets.top+insets.bottom:0;let scale=Math.min(screenWidth?this._preferredSize.width/(screenWidth+outlineWidth):1,screenHeight?this._preferredSize.height/(screenHeight+outlineHeight):1);scale=Math.min(Math.floor(scale*100),100);let sharpScale=scale;while(sharpScale>scale*0.7){let sharp=true;if(screenWidth){sharp=sharp&&Number.isInteger((screenWidth-insetsWidth)*sharpScale/100);}
if(screenHeight){sharp=sharp&&Number.isInteger((screenHeight-insetsHeight)*sharpScale/100);}
if(sharp){return sharpScale/100;}
sharpScale-=1;}
return scale/100;}
setSizeAndScaleToFit(width,height){this._scaleSetting.set(this._calculateFitScale(width,height));this.setWidth(width);this.setHeight(height);}
_applyUserAgent(userAgent){SDK.multitargetNetworkManager.setUserAgentOverride(userAgent);}
_applyDeviceMetrics(screenSize,insets,outline,scale,deviceScaleFactor,mobile,screenOrientation,resetPageScaleFactor){screenSize.width=Math.max(1,Math.floor(screenSize.width));screenSize.height=Math.max(1,Math.floor(screenSize.height));let pageWidth=screenSize.width-insets.left-insets.right;let pageHeight=screenSize.height-insets.top-insets.bottom;this._emulatedPageSize=new UI.Size(pageWidth,pageHeight);const positionX=insets.left;const positionY=insets.top;const screenOrientationAngle=screenOrientation===Protocol.Emulation.ScreenOrientationType.LandscapePrimary?90:0;this._appliedDeviceSize=screenSize;this._appliedDeviceScaleFactor=deviceScaleFactor||window.devicePixelRatio;this._screenRect=new UI.Rect(Math.max(0,(this._availableSize.width-screenSize.width*scale)/2),outline.top*scale,screenSize.width*scale,screenSize.height*scale);this._outlineRect=new UI.Rect(this._screenRect.left-outline.left*scale,0,(outline.left+screenSize.width+outline.right)*scale,(outline.top+screenSize.height+outline.bottom)*scale);this._visiblePageRect=new UI.Rect(positionX*scale,positionY*scale,Math.min(pageWidth*scale,this._availableSize.width-this._screenRect.left-positionX*scale),Math.min(pageHeight*scale,this._availableSize.height-this._screenRect.top-positionY*scale));this._scale=scale;if(scale===1&&this._availableSize.width>=screenSize.width&&this._availableSize.height>=screenSize.height){pageWidth=0;pageHeight=0;}
if(this._visiblePageRect.width===pageWidth*scale&&this._visiblePageRect.height===pageHeight*scale&&Number.isInteger(pageWidth*scale)&&Number.isInteger(pageHeight*scale)){pageWidth=0;pageHeight=0;}
if(!this._emulationModel){return;}
if(resetPageScaleFactor){this._emulationModel.resetPageScaleFactor();}
if(pageWidth||pageHeight||mobile||deviceScaleFactor||scale!==1||screenOrientation){const metrics={width:pageWidth,height:pageHeight,deviceScaleFactor:deviceScaleFactor,mobile:mobile,scale:scale,screenWidth:screenSize.width,screenHeight:screenSize.height,positionX:positionX,positionY:positionY,dontSetVisibleSize:true};if(screenOrientation){metrics.screenOrientation={type:screenOrientation,angle:screenOrientationAngle};}
this._emulationModel.emulateDevice(metrics);}else{this._emulationModel.emulateDevice(null);}}
async captureScreenshot(fullSize,clip){const screenCaptureModel=this._emulationModel?this._emulationModel.target().model(SDK.ScreenCaptureModel):null;if(!screenCaptureModel){return null;}
const overlayModel=this._emulationModel?this._emulationModel.overlayModel():null;if(overlayModel){overlayModel.setShowViewportSizeOnResize(false);}
let deviceMetrics;if(fullSize){const metrics=await screenCaptureModel.fetchLayoutMetrics();if(!metrics){return null;}
const contentHeight=Math.min((1<<14)/this._appliedDeviceScaleFactor,metrics.contentHeight);deviceMetrics={width:Math.floor(metrics.contentWidth),height:Math.floor(contentHeight),deviceScaleFactor:this._appliedDeviceScaleFactor,mobile:this._isMobile(),};clip={x:0,y:0,width:deviceMetrics.width,height:deviceMetrics.height,scale:1};if(this._device){const screenOrientation=this._mode.orientation===Emulation.EmulatedDevice.Horizontal?Protocol.Emulation.ScreenOrientationType.LandscapePrimary:Protocol.Emulation.ScreenOrientationType.PortraitPrimary;const screenOrientationAngle=screenOrientation===Protocol.Emulation.ScreenOrientationType.LandscapePrimary?90:0;deviceMetrics.screenOrientation={type:screenOrientation,angle:screenOrientationAngle};}
await this._emulationModel.resetPageScaleFactor();await this._emulationModel.emulateDevice(deviceMetrics);}
const screenshot=await screenCaptureModel.captureScreenshot('png',100,clip);if(fullSize){if(this._device){const orientation=this._device.orientationByName(this._mode.orientation);deviceMetrics.width=orientation.width;deviceMetrics.height=orientation.height;}else{deviceMetrics.width=0;deviceMetrics.height=0;}
await this._emulationModel.emulateDevice(deviceMetrics);}
this._calculateAndEmulate(false);return screenshot;}
_applyTouch(touchEnabled,mobile){this._touchEnabled=touchEnabled;this._touchMobile=mobile;for(const emulationModel of SDK.targetManager.models(SDK.EmulationModel)){emulationModel.emulateTouch(touchEnabled,mobile);}}};Emulation.DeviceModeModel.Events={Updated:'Updated'};Emulation.DeviceModeModel.Type={None:'None',Responsive:'Responsive',Device:'Device'};Emulation.DeviceModeModel.UA={Mobile:Common.UIString('Mobile'),MobileNoTouch:Common.UIString('Mobile (no touch)'),Desktop:Common.UIString('Desktop'),DesktopTouch:Common.UIString('Desktop (touch)')};Emulation.DeviceModeModel.MinDeviceSize=50;Emulation.DeviceModeModel.MaxDeviceSize=9999;Emulation.DeviceModeModel.MinDeviceScaleFactor=0;Emulation.DeviceModeModel.MaxDeviceScaleFactor=10;Emulation.DeviceModeModel.MaxDeviceNameLength=50;Emulation.DeviceModeModel._defaultMobileUserAgent='Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36';Emulation.DeviceModeModel._defaultMobileUserAgent=SDK.MultitargetNetworkManager.patchUserAgentWithChromeVersion(Emulation.DeviceModeModel._defaultMobileUserAgent);Emulation.DeviceModeModel.defaultMobileScaleFactor=2;;Emulation.DeviceModeToolbar=class{constructor(model,showMediaInspectorSetting,showRulersSetting){this._model=model;this._showMediaInspectorSetting=showMediaInspectorSetting;this._showRulersSetting=showRulersSetting;this._deviceOutlineSetting=this._model.deviceOutlineSetting();this._showDeviceScaleFactorSetting=Common.settings.createSetting('emulation.showDeviceScaleFactor',false);this._showDeviceScaleFactorSetting.addChangeListener(this._updateDeviceScaleFactorVisibility,this);this._showUserAgentTypeSetting=Common.settings.createSetting('emulation.showUserAgentType',false);this._showUserAgentTypeSetting.addChangeListener(this._updateUserAgentTypeVisibility,this);this._autoAdjustScaleSetting=Common.settings.createSetting('emulation.autoAdjustScale',true);this._lastMode=new Map();this._element=createElementWithClass('div','device-mode-toolbar');const leftContainer=this._element.createChild('div','device-mode-toolbar-spacer');leftContainer.createChild('div','device-mode-toolbar-spacer');const leftToolbar=new UI.Toolbar('',leftContainer);leftToolbar.makeWrappable();this._fillLeftToolbar(leftToolbar);const mainToolbar=new UI.Toolbar('',this._element);mainToolbar.makeWrappable();this._fillMainToolbar(mainToolbar);const rightContainer=this._element.createChild('div','device-mode-toolbar-spacer');const rightToolbar=new UI.Toolbar('device-mode-toolbar-fixed-size',rightContainer);rightToolbar.makeWrappable();this._fillRightToolbar(rightToolbar);const modeToolbar=new UI.Toolbar('device-mode-toolbar-fixed-size',rightContainer);modeToolbar.makeWrappable();this._fillModeToolbar(modeToolbar);rightContainer.createChild('div','device-mode-toolbar-spacer');const optionsToolbar=new UI.Toolbar('device-mode-toolbar-options',rightContainer);optionsToolbar.makeWrappable();this._fillOptionsToolbar(optionsToolbar);this._emulatedDevicesList=Emulation.EmulatedDevicesList.instance();this._emulatedDevicesList.addEventListener(Emulation.EmulatedDevicesList.Events.CustomDevicesUpdated,this._deviceListChanged,this);this._emulatedDevicesList.addEventListener(Emulation.EmulatedDevicesList.Events.StandardDevicesUpdated,this._deviceListChanged,this);this._persistenceSetting=Common.settings.createSetting('emulation.deviceModeValue',{device:'',orientation:'',mode:''});this._model.toolbarControlsEnabledSetting().addChangeListener(updateToolbarsEnabled);updateToolbarsEnabled();function updateToolbarsEnabled(){const enabled=model.toolbarControlsEnabledSetting().get();leftToolbar.setEnabled(enabled);mainToolbar.setEnabled(enabled);rightToolbar.setEnabled(enabled);modeToolbar.setEnabled(enabled);optionsToolbar.setEnabled(enabled);}}
_fillLeftToolbar(toolbar){toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass('div','device-mode-empty-toolbar-element')));this._deviceSelectItem=new UI.ToolbarMenuButton(this._appendDeviceMenuItems.bind(this));this._deviceSelectItem.setGlyph('');this._deviceSelectItem.turnIntoSelect(95);this._deviceSelectItem.setDarkText();toolbar.appendToolbarItem(this._deviceSelectItem);}
_fillMainToolbar(toolbar){const widthInput=UI.createInput('device-mode-size-input','text');widthInput.maxLength=4;widthInput.title=Common.UIString('Width');this._updateWidthInput=UI.bindInput(widthInput,this._applyWidth.bind(this),Emulation.DeviceModeModel.widthValidator,true);this._widthInput=widthInput;this._widthItem=this._wrapToolbarItem(widthInput);toolbar.appendToolbarItem(this._widthItem);const xElement=createElementWithClass('div','device-mode-x');xElement.textContent='\u00D7';this._xItem=this._wrapToolbarItem(xElement);toolbar.appendToolbarItem(this._xItem);const heightInput=UI.createInput('device-mode-size-input','text');heightInput.maxLength=4;heightInput.title=Common.UIString('Height (leave empty for full)');this._updateHeightInput=UI.bindInput(heightInput,this._applyHeight.bind(this),validateHeight,true);this._heightInput=heightInput;this._heightItem=this._wrapToolbarItem(heightInput);toolbar.appendToolbarItem(this._heightItem);function validateHeight(value){if(!value){return{valid:true};}
return Emulation.DeviceModeModel.heightValidator(value);}}
_applyWidth(value){const width=value?Number(value):0;this._model.setWidthAndScaleToFit(width);}
_applyHeight(value){const height=value?Number(value):0;this._model.setHeightAndScaleToFit(height);}
_fillRightToolbar(toolbar){toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass('div','device-mode-empty-toolbar-element')));this._scaleItem=new UI.ToolbarMenuButton(this._appendScaleMenuItems.bind(this));this._scaleItem.setTitle(Common.UIString('Zoom'));this._scaleItem.setGlyph('');this._scaleItem.turnIntoSelect();this._scaleItem.setDarkText();toolbar.appendToolbarItem(this._scaleItem);toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass('div','device-mode-empty-toolbar-element')));this._deviceScaleItem=new UI.ToolbarMenuButton(this._appendDeviceScaleMenuItems.bind(this));this._deviceScaleItem.setVisible(this._showDeviceScaleFactorSetting.get());this._deviceScaleItem.setTitle(Common.UIString('Device pixel ratio'));this._deviceScaleItem.setGlyph('');this._deviceScaleItem.turnIntoSelect();this._deviceScaleItem.setDarkText();toolbar.appendToolbarItem(this._deviceScaleItem);toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass('div','device-mode-empty-toolbar-element')));this._uaItem=new UI.ToolbarMenuButton(this._appendUserAgentMenuItems.bind(this));this._uaItem.setVisible(this._showUserAgentTypeSetting.get());this._uaItem.setTitle(Common.UIString('Device type'));this._uaItem.setGlyph('');this._uaItem.turnIntoSelect();this._uaItem.setDarkText();toolbar.appendToolbarItem(this._uaItem);this._throttlingConditionsItem=MobileThrottling.throttlingManager().createMobileThrottlingButton();toolbar.appendToolbarItem(this._throttlingConditionsItem);}
_fillModeToolbar(toolbar){toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass('div','device-mode-empty-toolbar-element')));this._modeButton=new UI.ToolbarButton('','largeicon-rotate-screen');this._modeButton.addEventListener(UI.ToolbarButton.Events.Click,this._modeMenuClicked,this);toolbar.appendToolbarItem(this._modeButton);}
_fillOptionsToolbar(toolbar){toolbar.appendToolbarItem(this._wrapToolbarItem(createElementWithClass('div','device-mode-empty-toolbar-element')));const moreOptionsButton=new UI.ToolbarMenuButton(this._appendOptionsMenuItems.bind(this));moreOptionsButton.setTitle(Common.UIString('More options'));toolbar.appendToolbarItem(moreOptionsButton);}
_appendScaleMenuItems(contextMenu){if(this._model.type()===Emulation.DeviceModeModel.Type.Device){contextMenu.footerSection().appendItem(Common.UIString('Fit to window (%.0f%%)',this._model.fitScale()*100),this._onScaleMenuChanged.bind(this,this._model.fitScale()),false);}
contextMenu.footerSection().appendCheckboxItem(ls`Auto-adjust zoom`,this._onAutoAdjustScaleChanged.bind(this),this._autoAdjustScaleSetting.get());const boundAppendScaleItem=appendScaleItem.bind(this);boundAppendScaleItem(Common.UIString('50%'),0.5);boundAppendScaleItem(Common.UIString('75%'),0.75);boundAppendScaleItem(Common.UIString('100%'),1);boundAppendScaleItem(Common.UIString('125%'),1.25);boundAppendScaleItem(Common.UIString('150%'),1.5);function appendScaleItem(title,value){contextMenu.defaultSection().appendCheckboxItem(title,this._onScaleMenuChanged.bind(this,value),this._model.scaleSetting().get()===value,false);}}
_onScaleMenuChanged(value){this._model.scaleSetting().set(value);}
_onAutoAdjustScaleChanged(){this._autoAdjustScaleSetting.set(!this._autoAdjustScaleSetting.get());}
_appendDeviceScaleMenuItems(contextMenu){const deviceScaleFactorSetting=this._model.deviceScaleFactorSetting();const defaultValue=this._model.uaSetting().get()===Emulation.DeviceModeModel.UA.Mobile||this._model.uaSetting().get()===Emulation.DeviceModeModel.UA.MobileNoTouch?Emulation.DeviceModeModel.defaultMobileScaleFactor:window.devicePixelRatio;appendDeviceScaleFactorItem(contextMenu.headerSection(),Common.UIString('Default: %.1f',defaultValue),0);appendDeviceScaleFactorItem(contextMenu.defaultSection(),Common.UIString('1'),1);appendDeviceScaleFactorItem(contextMenu.defaultSection(),Common.UIString('2'),2);appendDeviceScaleFactorItem(contextMenu.defaultSection(),Common.UIString('3'),3);function appendDeviceScaleFactorItem(section,title,value){section.appendCheckboxItem(title,deviceScaleFactorSetting.set.bind(deviceScaleFactorSetting,value),deviceScaleFactorSetting.get()===value);}}
_appendUserAgentMenuItems(contextMenu){const uaSetting=this._model.uaSetting();appendUAItem(Emulation.DeviceModeModel.UA.Mobile,Emulation.DeviceModeModel.UA.Mobile);appendUAItem(Emulation.DeviceModeModel.UA.MobileNoTouch,Emulation.DeviceModeModel.UA.MobileNoTouch);appendUAItem(Emulation.DeviceModeModel.UA.Desktop,Emulation.DeviceModeModel.UA.Desktop);appendUAItem(Emulation.DeviceModeModel.UA.DesktopTouch,Emulation.DeviceModeModel.UA.DesktopTouch);function appendUAItem(title,value){contextMenu.defaultSection().appendCheckboxItem(title,uaSetting.set.bind(uaSetting,value),uaSetting.get()===value);}}
_appendOptionsMenuItems(contextMenu){const model=this._model;appendToggleItem(contextMenu.headerSection(),this._deviceOutlineSetting,Common.UIString('Hide device frame'),Common.UIString('Show device frame'),model.type()!==Emulation.DeviceModeModel.Type.Device);appendToggleItem(contextMenu.headerSection(),this._showMediaInspectorSetting,Common.UIString('Hide media queries'),Common.UIString('Show media queries'));appendToggleItem(contextMenu.headerSection(),this._showRulersSetting,Common.UIString('Hide rulers'),Common.UIString('Show rulers'));appendToggleItem(contextMenu.defaultSection(),this._showDeviceScaleFactorSetting,Common.UIString('Remove device pixel ratio'),Common.UIString('Add device pixel ratio'));appendToggleItem(contextMenu.defaultSection(),this._showUserAgentTypeSetting,Common.UIString('Remove device type'),Common.UIString('Add device type'));contextMenu.appendItemsAtLocation('deviceModeMenu');contextMenu.footerSection().appendItem(Common.UIString('Reset to defaults'),this._reset.bind(this));contextMenu.footerSection().appendItem(ls`Close DevTools`,Host.InspectorFrontendHost.closeWindow.bind(Host.InspectorFrontendHost));function appendToggleItem(section,setting,title1,title2,disabled){if(typeof disabled==='undefined'){disabled=model.type()===Emulation.DeviceModeModel.Type.None;}
section.appendItem(setting.get()?title1:title2,setting.set.bind(setting,!setting.get()),disabled);}}
_reset(){this._deviceOutlineSetting.set(false);this._showDeviceScaleFactorSetting.set(false);this._showUserAgentTypeSetting.set(false);this._showMediaInspectorSetting.set(false);this._showRulersSetting.set(false);this._model.reset();}
_wrapToolbarItem(element){const container=createElement('div');const shadowRoot=UI.createShadowRootWithCoreStyles(container,'emulation/deviceModeToolbar.css');shadowRoot.appendChild(element);return new UI.ToolbarItem(container);}
_emulateDevice(device){const scale=this._autoAdjustScaleSetting.get()?undefined:this._model.scaleSetting().get();this._model.emulate(Emulation.DeviceModeModel.Type.Device,device,this._lastMode.get(device)||device.modes[0],scale);}
_switchToResponsive(){this._model.emulate(Emulation.DeviceModeModel.Type.Responsive,null,null);}
_filterDevices(devices){devices=devices.filter(function(d){return d.show();});devices.sort(Emulation.EmulatedDevice.deviceComparator);return devices;}
_standardDevices(){return this._filterDevices(this._emulatedDevicesList.standard());}
_customDevices(){return this._filterDevices(this._emulatedDevicesList.custom());}
_allDevices(){return this._standardDevices().concat(this._customDevices());}
_appendDeviceMenuItems(contextMenu){contextMenu.headerSection().appendCheckboxItem(Common.UIString('Responsive'),this._switchToResponsive.bind(this),this._model.type()===Emulation.DeviceModeModel.Type.Responsive,false);appendGroup.call(this,this._standardDevices());appendGroup.call(this,this._customDevices());contextMenu.footerSection().appendItem(Common.UIString('Edit\u2026'),this._emulatedDevicesList.revealCustomSetting.bind(this._emulatedDevicesList),false);function appendGroup(devices){if(!devices.length){return;}
const section=contextMenu.section();for(const device of devices){section.appendCheckboxItem(device.title,this._emulateDevice.bind(this,device),this._model.device()===device,false);}}}
_deviceListChanged(){const device=this._model.device();if(!device){return;}
const devices=this._allDevices();if(devices.indexOf(device)===-1){if(devices.length){this._emulateDevice(devices[0]);}else{this._model.emulate(Emulation.DeviceModeModel.Type.Responsive,null,null);}}}
_updateDeviceScaleFactorVisibility(){this._deviceScaleItem.setVisible(this._showDeviceScaleFactorSetting.get());}
_updateUserAgentTypeVisibility(){this._uaItem.setVisible(this._showUserAgentTypeSetting.get());}
_modeMenuClicked(event){const device=this._model.device();const model=this._model;const autoAdjustScaleSetting=this._autoAdjustScaleSetting;if(model.type()===Emulation.DeviceModeModel.Type.Responsive){const appliedSize=model.appliedDeviceSize();if(autoAdjustScaleSetting.get()){model.setSizeAndScaleToFit(appliedSize.height,appliedSize.width);}else{model.setWidth(appliedSize.height);model.setHeight(appliedSize.width);}
return;}
if(device.modes.length===2&&device.modes[0].orientation!==device.modes[1].orientation){const scale=autoAdjustScaleSetting.get()?undefined:model.scaleSetting().get();model.emulate(model.type(),model.device(),model.mode()===device.modes[0]?device.modes[1]:device.modes[0],scale);return;}
const contextMenu=new UI.ContextMenu((event.data),false,this._modeButton.element.totalOffsetLeft(),this._modeButton.element.totalOffsetTop()+this._modeButton.element.offsetHeight);addOrientation(Emulation.EmulatedDevice.Vertical,Common.UIString('Portrait'));addOrientation(Emulation.EmulatedDevice.Horizontal,Common.UIString('Landscape'));contextMenu.show();function addOrientation(orientation,title){const modes=device.modesForOrientation(orientation);if(!modes.length){return;}
if(modes.length===1){addMode(modes[0],title);}else{for(let index=0;index<modes.length;index++){addMode(modes[index],title+' \u2013 '+modes[index].title);}}}
function addMode(mode,title){contextMenu.defaultSection().appendCheckboxItem(title,applyMode.bind(null,mode),model.mode()===mode,false);}
function applyMode(mode){const scale=autoAdjustScaleSetting.get()?undefined:model.scaleSetting().get();model.emulate(model.type(),model.device(),mode,scale);}}
element(){return this._element;}
update(){if(this._model.type()!==this._cachedModelType){this._cachedModelType=this._model.type();this._widthInput.disabled=this._model.type()!==Emulation.DeviceModeModel.Type.Responsive;this._heightInput.disabled=this._model.type()!==Emulation.DeviceModeModel.Type.Responsive;this._deviceScaleItem.setEnabled(this._model.type()===Emulation.DeviceModeModel.Type.Responsive);this._uaItem.setEnabled(this._model.type()===Emulation.DeviceModeModel.Type.Responsive);if(this._model.type()===Emulation.DeviceModeModel.Type.Responsive){this._modeButton.setEnabled(true);this._modeButton.setTitle(ls`Rotate`);}else{this._modeButton.setEnabled(false);}}
const size=this._model.appliedDeviceSize();this._updateHeightInput(this._model.type()===Emulation.DeviceModeModel.Type.Responsive&&this._model.isFullHeight()?'':String(size.height));this._updateWidthInput(String(size.width));this._heightInput.placeholder=size.height;if(this._model.scale()!==this._cachedScale){this._scaleItem.setText(Common.UIString('%.0f%%',this._model.scale()*100));this._cachedScale=this._model.scale();}
const deviceScale=this._model.appliedDeviceScaleFactor();if(deviceScale!==this._cachedDeviceScale){this._deviceScaleItem.setText(Common.UIString('DPR: %.1f',deviceScale));this._cachedDeviceScale=deviceScale;}
const uaType=this._model.appliedUserAgentType();if(uaType!==this._cachedUaType){this._uaItem.setText(uaType);this._cachedUaType=uaType;}
let deviceItemTitle=Common.UIString('None');if(this._model.type()===Emulation.DeviceModeModel.Type.Responsive){deviceItemTitle=Common.UIString('Responsive');}
if(this._model.type()===Emulation.DeviceModeModel.Type.Device){deviceItemTitle=this._model.device().title;}
this._deviceSelectItem.setText(deviceItemTitle);if(this._model.device()!==this._cachedModelDevice){const device=this._model.device();if(device){const modeCount=device?device.modes.length:0;this._modeButton.setEnabled(modeCount>=2);this._modeButton.setTitle(modeCount===2?Common.UIString('Rotate'):Common.UIString('Screen options'));}
this._cachedModelDevice=device;}
if(this._model.type()===Emulation.DeviceModeModel.Type.Device){this._lastMode.set((this._model.device()),(this._model.mode()));}
if(this._model.mode()!==this._cachedModelMode&&this._model.type()!==Emulation.DeviceModeModel.Type.None){this._cachedModelMode=this._model.mode();const value=this._persistenceSetting.get();if(this._model.device()){value.device=this._model.device().title;value.orientation=this._model.mode()?this._model.mode().orientation:'';value.mode=this._model.mode()?this._model.mode().title:'';}else{value.device='';value.orientation='';value.mode='';}
this._persistenceSetting.set(value);}}
restore(){for(const device of this._allDevices()){if(device.title===this._persistenceSetting.get().device){for(const mode of device.modes){if(mode.orientation===this._persistenceSetting.get().orientation&&mode.title===this._persistenceSetting.get().mode){this._lastMode.set(device,mode);this._emulateDevice(device);return;}}}}
this._model.emulate(Emulation.DeviceModeModel.Type.Responsive,null,null);}};;Emulation.DeviceModeView=class extends UI.VBox{constructor(){super(true);this.setMinimumSize(150,150);this.element.classList.add('device-mode-view');this.registerRequiredCSS('emulation/deviceModeView.css');UI.Tooltip.addNativeOverrideContainer(this.contentElement);this._model=self.singleton(Emulation.DeviceModeModel);this._model.addEventListener(Emulation.DeviceModeModel.Events.Updated,this._updateUI,this);this._mediaInspector=new Emulation.MediaQueryInspector(()=>this._model.appliedDeviceSize().width,this._model.setWidth.bind(this._model));this._showMediaInspectorSetting=Common.settings.moduleSetting('showMediaQueryInspector');this._showMediaInspectorSetting.addChangeListener(this._updateUI,this);this._showRulersSetting=Common.settings.moduleSetting('emulation.showRulers');this._showRulersSetting.addChangeListener(this._updateUI,this);this._topRuler=new Emulation.DeviceModeView.Ruler(true,this._model.setWidthAndScaleToFit.bind(this._model));this._topRuler.element.classList.add('device-mode-ruler-top');this._leftRuler=new Emulation.DeviceModeView.Ruler(false,this._model.setHeightAndScaleToFit.bind(this._model));this._leftRuler.element.classList.add('device-mode-ruler-left');this._createUI();UI.zoomManager.addEventListener(UI.ZoomManager.Events.ZoomChanged,this._zoomChanged,this);}
_createUI(){this._toolbar=new Emulation.DeviceModeToolbar(this._model,this._showMediaInspectorSetting,this._showRulersSetting);this.contentElement.appendChild(this._toolbar.element());this._contentClip=this.contentElement.createChild('div','device-mode-content-clip vbox');this._responsivePresetsContainer=this._contentClip.createChild('div','device-mode-presets-container');this._populatePresetsContainer();this._mediaInspectorContainer=this._contentClip.createChild('div','device-mode-media-container');this._contentArea=this._contentClip.createChild('div','device-mode-content-area');this._outlineImage=this._contentArea.createChild('img','device-mode-outline-image hidden fill');this._outlineImage.addEventListener('load',this._onImageLoaded.bind(this,this._outlineImage,true),false);this._outlineImage.addEventListener('error',this._onImageLoaded.bind(this,this._outlineImage,false),false);this._screenArea=this._contentArea.createChild('div','device-mode-screen-area');this._screenImage=this._screenArea.createChild('img','device-mode-screen-image hidden');this._screenImage.addEventListener('load',this._onImageLoaded.bind(this,this._screenImage,true),false);this._screenImage.addEventListener('error',this._onImageLoaded.bind(this,this._screenImage,false),false);this._bottomRightResizerElement=this._screenArea.createChild('div','device-mode-resizer device-mode-bottom-right-resizer');this._bottomRightResizerElement.createChild('div','');this._createResizer(this._bottomRightResizerElement,2,1);this._bottomLeftResizerElement=this._screenArea.createChild('div','device-mode-resizer device-mode-bottom-left-resizer');this._bottomLeftResizerElement.createChild('div','');this._createResizer(this._bottomLeftResizerElement,-2,1);this._rightResizerElement=this._screenArea.createChild('div','device-mode-resizer device-mode-right-resizer');this._rightResizerElement.createChild('div','');this._createResizer(this._rightResizerElement,2,0);this._leftResizerElement=this._screenArea.createChild('div','device-mode-resizer device-mode-left-resizer');this._leftResizerElement.createChild('div','');this._createResizer(this._leftResizerElement,-2,0);this._bottomResizerElement=this._screenArea.createChild('div','device-mode-resizer device-mode-bottom-resizer');this._bottomResizerElement.createChild('div','');this._createResizer(this._bottomResizerElement,0,1);this._bottomResizerElement.addEventListener('dblclick',this._model.setHeight.bind(this._model,0),false);this._bottomResizerElement.title=Common.UIString('Double-click for full height');this._pageArea=this._screenArea.createChild('div','device-mode-page-area');this._pageArea.createChild('slot');}
_populatePresetsContainer(){const sizes=[320,375,425,768,1024,1440,2560];const titles=[Common.UIString('Mobile S'),Common.UIString('Mobile M'),Common.UIString('Mobile L'),Common.UIString('Tablet'),Common.UIString('Laptop'),Common.UIString('Laptop L'),Common.UIString('4K')];this._presetBlocks=[];const inner=this._responsivePresetsContainer.createChild('div','device-mode-presets-container-inner');for(let i=sizes.length-1;i>=0;--i){const outer=inner.createChild('div','fill device-mode-preset-bar-outer');const block=outer.createChild('div','device-mode-preset-bar');block.createChild('span').textContent=titles[i]+' \u2013 '+sizes[i]+'px';block.addEventListener('click',applySize.bind(this,sizes[i]),false);block.__width=sizes[i];this._presetBlocks.push(block);}
function applySize(width,e){this._model.emulate(Emulation.DeviceModeModel.Type.Responsive,null,null);this._model.setWidthAndScaleToFit(width);e.consume();}}
_createResizer(element,widthFactor,heightFactor){const resizer=new UI.ResizerWidget();resizer.addElement(element);let cursor=widthFactor?'ew-resize':'ns-resize';if(widthFactor*heightFactor>0){cursor='nwse-resize';}
if(widthFactor*heightFactor<0){cursor='nesw-resize';}
resizer.setCursor(cursor);resizer.addEventListener(UI.ResizerWidget.Events.ResizeStart,this._onResizeStart,this);resizer.addEventListener(UI.ResizerWidget.Events.ResizeUpdate,this._onResizeUpdate.bind(this,widthFactor,heightFactor));resizer.addEventListener(UI.ResizerWidget.Events.ResizeEnd,this._onResizeEnd,this);return resizer;}
_onResizeStart(event){this._slowPositionStart=null;this._resizeStart=this._model.screenRect().size();}
_onResizeUpdate(widthFactor,heightFactor,event){if(event.data.shiftKey!==!!this._slowPositionStart){this._slowPositionStart=event.data.shiftKey?{x:event.data.currentX,y:event.data.currentY}:null;}
let cssOffsetX=event.data.currentX-event.data.startX;let cssOffsetY=event.data.currentY-event.data.startY;if(this._slowPositionStart){cssOffsetX=(event.data.currentX-this._slowPositionStart.x)/10+this._slowPositionStart.x-event.data.startX;cssOffsetY=(event.data.currentY-this._slowPositionStart.y)/10+this._slowPositionStart.y-event.data.startY;}
if(widthFactor){const dipOffsetX=cssOffsetX*UI.zoomManager.zoomFactor();let newWidth=this._resizeStart.width+dipOffsetX*widthFactor;newWidth=Math.round(newWidth/this._model.scale());if(newWidth>=Emulation.DeviceModeModel.MinDeviceSize&&newWidth<=Emulation.DeviceModeModel.MaxDeviceSize){this._model.setWidth(newWidth);}}
if(heightFactor){const dipOffsetY=cssOffsetY*UI.zoomManager.zoomFactor();let newHeight=this._resizeStart.height+dipOffsetY*heightFactor;newHeight=Math.round(newHeight/this._model.scale());if(newHeight>=Emulation.DeviceModeModel.MinDeviceSize&&newHeight<=Emulation.DeviceModeModel.MaxDeviceSize){this._model.setHeight(newHeight);}}}
_onResizeEnd(event){delete this._resizeStart;Host.userMetrics.actionTaken(Host.UserMetrics.Action.ResizedViewInResponsiveMode);}
_updateUI(){function applyRect(element,rect){element.style.left=rect.left+'px';element.style.top=rect.top+'px';element.style.width=rect.width+'px';element.style.height=rect.height+'px';}
if(!this.isShowing()){return;}
const zoomFactor=UI.zoomManager.zoomFactor();let callDoResize=false;const showRulers=this._showRulersSetting.get()&&this._model.type()!==Emulation.DeviceModeModel.Type.None;let contentAreaResized=false;let updateRulers=false;const cssScreenRect=this._model.screenRect().scale(1/zoomFactor);if(!cssScreenRect.isEqual(this._cachedCssScreenRect)){applyRect(this._screenArea,cssScreenRect);updateRulers=true;callDoResize=true;this._cachedCssScreenRect=cssScreenRect;}
const cssVisiblePageRect=this._model.visiblePageRect().scale(1/zoomFactor);if(!cssVisiblePageRect.isEqual(this._cachedCssVisiblePageRect)){applyRect(this._pageArea,cssVisiblePageRect);callDoResize=true;this._cachedCssVisiblePageRect=cssVisiblePageRect;}
const outlineRect=this._model.outlineRect().scale(1/zoomFactor);if(!outlineRect.isEqual(this._cachedOutlineRect)){applyRect(this._outlineImage,outlineRect);callDoResize=true;this._cachedOutlineRect=outlineRect;}
this._contentClip.classList.toggle('device-mode-outline-visible',!!this._model.outlineImage());const resizable=this._model.type()===Emulation.DeviceModeModel.Type.Responsive;if(resizable!==this._cachedResizable){this._rightResizerElement.classList.toggle('hidden',!resizable);this._leftResizerElement.classList.toggle('hidden',!resizable);this._bottomResizerElement.classList.toggle('hidden',!resizable);this._bottomRightResizerElement.classList.toggle('hidden',!resizable);this._bottomLeftResizerElement.classList.toggle('hidden',!resizable);this._cachedResizable=resizable;}
const mediaInspectorVisible=this._showMediaInspectorSetting.get()&&this._model.type()!==Emulation.DeviceModeModel.Type.None;if(mediaInspectorVisible!==this._cachedMediaInspectorVisible){if(mediaInspectorVisible){this._mediaInspector.show(this._mediaInspectorContainer);}else{this._mediaInspector.detach();}
contentAreaResized=true;callDoResize=true;this._cachedMediaInspectorVisible=mediaInspectorVisible;}
if(showRulers!==this._cachedShowRulers){this._contentClip.classList.toggle('device-mode-rulers-visible',showRulers);if(showRulers){this._topRuler.show(this._contentArea);this._leftRuler.show(this._contentArea);}else{this._topRuler.detach();this._leftRuler.detach();}
contentAreaResized=true;callDoResize=true;this._cachedShowRulers=showRulers;}
if(this._model.scale()!==this._cachedScale){updateRulers=true;callDoResize=true;for(const block of this._presetBlocks){block.style.width=block.__width*this._model.scale()+'px';}
this._cachedScale=this._model.scale();}
this._toolbar.update();this._loadImage(this._screenImage,this._model.screenImage());this._loadImage(this._outlineImage,this._model.outlineImage());this._mediaInspector.setAxisTransform(this._model.scale());if(callDoResize){this.doResize();}
if(updateRulers){this._topRuler.render(this._model.scale());this._leftRuler.render(this._model.scale());this._topRuler.element.positionAt(this._cachedCssScreenRect?this._cachedCssScreenRect.left:0,this._cachedCssScreenRect?this._cachedCssScreenRect.top:0);this._leftRuler.element.positionAt(this._cachedCssScreenRect?this._cachedCssScreenRect.left:0,this._cachedCssScreenRect?this._cachedCssScreenRect.top:0);}
if(contentAreaResized){this._contentAreaResized();}}
_loadImage(element,srcset){if(element.getAttribute('srcset')===srcset){return;}
element.setAttribute('srcset',srcset);if(!srcset){element.classList.toggle('hidden',true);}}
_onImageLoaded(element,success){element.classList.toggle('hidden',!success);}
setNonEmulatedAvailableSize(element){if(this._model.type()!==Emulation.DeviceModeModel.Type.None){return;}
const zoomFactor=UI.zoomManager.zoomFactor();const rect=element.getBoundingClientRect();const availableSize=new UI.Size(Math.max(rect.width*zoomFactor,1),Math.max(rect.height*zoomFactor,1));this._model.setAvailableSize(availableSize,availableSize);}
_contentAreaResized(){const zoomFactor=UI.zoomManager.zoomFactor();const rect=this._contentArea.getBoundingClientRect();const availableSize=new UI.Size(Math.max(rect.width*zoomFactor,1),Math.max(rect.height*zoomFactor,1));const preferredSize=new UI.Size(Math.max((rect.width-2*this._handleWidth)*zoomFactor,1),Math.max((rect.height-this._handleHeight)*zoomFactor,1));this._model.setAvailableSize(availableSize,preferredSize);}
_measureHandles(){const hidden=this._rightResizerElement.classList.contains('hidden');this._rightResizerElement.classList.toggle('hidden',false);this._bottomResizerElement.classList.toggle('hidden',false);this._handleWidth=this._rightResizerElement.offsetWidth;this._handleHeight=this._bottomResizerElement.offsetHeight;this._rightResizerElement.classList.toggle('hidden',hidden);this._bottomResizerElement.classList.toggle('hidden',hidden);}
_zoomChanged(){delete this._handleWidth;delete this._handleHeight;if(this.isShowing()){this._measureHandles();this._contentAreaResized();}}
onResize(){if(this.isShowing()){this._contentAreaResized();}}
wasShown(){this._measureHandles();this._toolbar.restore();}
willHide(){this._model.emulate(Emulation.DeviceModeModel.Type.None,null,null);}
async captureScreenshot(){const screenshot=await this._model.captureScreenshot(false);if(screenshot===null){return;}
const pageImage=new Image();pageImage.src='data:image/png;base64,'+screenshot;pageImage.onload=async()=>{const scale=pageImage.naturalWidth/this._model.screenRect().width;const outlineRect=this._model.outlineRect().scale(scale);const screenRect=this._model.screenRect().scale(scale);const visiblePageRect=this._model.visiblePageRect().scale(scale);const contentLeft=screenRect.left+visiblePageRect.left-outlineRect.left;const contentTop=screenRect.top+visiblePageRect.top-outlineRect.top;const canvas=createElement('canvas');canvas.width=Math.floor(outlineRect.width);canvas.height=Math.floor(outlineRect.height);const ctx=canvas.getContext('2d');ctx.imageSmoothingEnabled=false;if(this._model.outlineImage()){await this._paintImage(ctx,this._model.outlineImage(),outlineRect.relativeTo(outlineRect));}
if(this._model.screenImage()){await this._paintImage(ctx,this._model.screenImage(),screenRect.relativeTo(outlineRect));}
ctx.drawImage(pageImage,Math.floor(contentLeft),Math.floor(contentTop));this._saveScreenshot(canvas);};}
async captureFullSizeScreenshot(){const screenshot=await this._model.captureScreenshot(true);if(screenshot===null){return;}
return this._saveScreenshotBase64(screenshot);}
async captureAreaScreenshot(clip){const screenshot=await this._model.captureScreenshot(false,clip);if(screenshot===null){return;}
return this._saveScreenshotBase64(screenshot);}
_saveScreenshotBase64(screenshot){const pageImage=new Image();pageImage.src='data:image/png;base64,'+screenshot;pageImage.onload=()=>{const canvas=createElement('canvas');canvas.width=pageImage.naturalWidth;canvas.height=pageImage.naturalHeight;const ctx=canvas.getContext('2d');ctx.imageSmoothingEnabled=false;ctx.drawImage(pageImage,0,0);this._saveScreenshot(canvas);};}
_paintImage(ctx,src,rect){return new Promise(fulfill=>{const image=new Image();image.crossOrigin='Anonymous';image.srcset=src;image.onerror=fulfill;image.onload=()=>{ctx.drawImage(image,rect.left,rect.top,rect.width,rect.height);fulfill();};});}
_saveScreenshot(canvas){const url=this._model.inspectedURL();let fileName=url?url.trimURL().removeURLFragment():'';if(this._model.type()===Emulation.DeviceModeModel.Type.Device){fileName+=Common.UIString('(%s)',this._model.device().title);}
const link=createElement('a');link.download=fileName+'.png';canvas.toBlob(blob=>{link.href=URL.createObjectURL(blob);link.click();});}};Emulation.DeviceModeView.Ruler=class extends UI.VBox{constructor(horizontal,applyCallback){super();this.element.classList.add('device-mode-ruler');this._contentElement=this.element.createChild('div','device-mode-ruler-content').createChild('div','device-mode-ruler-inner');this._horizontal=horizontal;this._scale=1;this._count=0;this._throttler=new Common.Throttler(0);this._applyCallback=applyCallback;}
render(scale){this._scale=scale;this._throttler.schedule(this._update.bind(this));}
onResize(){this._throttler.schedule(this._update.bind(this));}
_update(){const zoomFactor=UI.zoomManager.zoomFactor();const size=this._horizontal?this._contentElement.offsetWidth:this._contentElement.offsetHeight;if(this._scale!==this._renderedScale||zoomFactor!==this._renderedZoomFactor){this._contentElement.removeChildren();this._count=0;this._renderedScale=this._scale;this._renderedZoomFactor=zoomFactor;}
const dipSize=size*zoomFactor/this._scale;const count=Math.ceil(dipSize/5);let step=1;if(this._scale<0.8){step=2;}
if(this._scale<0.6){step=4;}
if(this._scale<0.4){step=8;}
if(this._scale<0.2){step=16;}
if(this._scale<0.1){step=32;}
for(let i=count;i<this._count;i++){if(!(i%step)){this._contentElement.lastChild.remove();}}
for(let i=this._count;i<count;i++){if(i%step){continue;}
const marker=this._contentElement.createChild('div','device-mode-ruler-marker');if(i){if(this._horizontal){marker.style.left=(5*i)*this._scale/zoomFactor+'px';}else{marker.style.top=(5*i)*this._scale/zoomFactor+'px';}
if(!(i%20)){const text=marker.createChild('div','device-mode-ruler-text');text.textContent=i*5;text.addEventListener('click',this._onMarkerClick.bind(this,i*5),false);}}
if(!(i%10)){marker.classList.add('device-mode-ruler-marker-large');}else if(!(i%5)){marker.classList.add('device-mode-ruler-marker-medium');}}
this._count=count;return Promise.resolve();}
_onMarkerClick(size){this._applyCallback.call(null,size);}};;Emulation.DeviceModeWrapper=class extends UI.VBox{constructor(inspectedPagePlaceholder){super();Emulation.DeviceModeView._wrapperInstance=this;this._inspectedPagePlaceholder=inspectedPagePlaceholder;this._deviceModeView=null;this._toggleDeviceModeAction=UI.actionRegistry.action('emulation.toggle-device-mode');const model=self.singleton(Emulation.DeviceModeModel);this._showDeviceModeSetting=model.enabledSetting();this._showDeviceModeSetting.setRequiresUserAction(!!Root.Runtime.queryParam('hasOtherClients'));this._showDeviceModeSetting.addChangeListener(this._update.bind(this,false));SDK.targetManager.addModelListener(SDK.OverlayModel,SDK.OverlayModel.Events.ScreenshotRequested,this._screenshotRequestedFromOverlay,this);this._update(true);}
_toggleDeviceMode(){this._showDeviceModeSetting.set(!this._showDeviceModeSetting.get());}
_captureScreenshot(fullSize,clip){if(!this._deviceModeView){this._deviceModeView=new Emulation.DeviceModeView();}
this._deviceModeView.setNonEmulatedAvailableSize(this._inspectedPagePlaceholder.element);if(fullSize){this._deviceModeView.captureFullSizeScreenshot();}else if(clip){this._deviceModeView.captureAreaScreenshot(clip);}else{this._deviceModeView.captureScreenshot();}
return true;}
_screenshotRequestedFromOverlay(event){const clip=(event.data);this._captureScreenshot(false,clip);}
_update(force){this._toggleDeviceModeAction.setToggled(this._showDeviceModeSetting.get());if(!force){const showing=this._deviceModeView&&this._deviceModeView.isShowing();if(this._showDeviceModeSetting.get()===showing){return;}}
if(this._showDeviceModeSetting.get()){if(!this._deviceModeView){this._deviceModeView=new Emulation.DeviceModeView();}
this._deviceModeView.show(this.element);this._inspectedPagePlaceholder.clearMinimumSize();this._inspectedPagePlaceholder.show(this._deviceModeView.element);}else{if(this._deviceModeView){this._deviceModeView.detach();}
this._inspectedPagePlaceholder.restoreMinimumSize();this._inspectedPagePlaceholder.show(this.element);}}};Emulation.DeviceModeView._wrapperInstance;Emulation.DeviceModeWrapper.ActionDelegate=class{handleAction(context,actionId){if(Emulation.DeviceModeView._wrapperInstance){switch(actionId){case'emulation.capture-screenshot':return Emulation.DeviceModeView._wrapperInstance._captureScreenshot();case'emulation.capture-node-screenshot':{const node=UI.context.flavor(SDK.DOMNode);if(!node){return true;}
async function captureClip(){const object=await node.resolveToObject();const result=await object.callFunction(function(){const rect=this.getBoundingClientRect();const docRect=this.ownerDocument.documentElement.getBoundingClientRect();return JSON.stringify({x:rect.left-docRect.left,y:rect.top-docRect.top,width:rect.width,height:rect.height,scale:1});});const clip=(JSON.parse((result.object.value)));const response=await node.domModel().target().pageAgent().invoke_getLayoutMetrics({});const page_zoom=!response[Protocol.Error]&&response.visualViewport.zoom||1;clip.x*=page_zoom;clip.y*=page_zoom;clip.width*=page_zoom;clip.height*=page_zoom;Emulation.DeviceModeView._wrapperInstance._captureScreenshot(false,clip);}
captureClip();return true;}
case'emulation.capture-full-height-screenshot':return Emulation.DeviceModeView._wrapperInstance._captureScreenshot(true);case'emulation.toggle-device-mode':Emulation.DeviceModeView._wrapperInstance._toggleDeviceMode();return true;}}
return false;}};;Emulation.GeolocationsSettingsTab=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('emulation/geolocationsSettingsTab.css');this.contentElement.createChild('div','header').textContent=Common.UIString('Custom Geolocations');const addButton=UI.createTextButton(Common.UIString('Add location...'),this._addButtonClicked.bind(this),'add-geolocations-button');this.contentElement.appendChild(addButton);this._list=new UI.ListWidget(this);this._list.element.classList.add('geolocations-list');this._list.registerRequiredCSS('emulation/geolocationsSettingsTab.css');this._list.show(this.contentElement);this._customSetting=Common.moduleSetting('emulation.geolocations');this._customSetting.addChangeListener(this._geolocationsUpdated,this);this.setDefaultFocusedElement(addButton);}
wasShown(){super.wasShown();this._geolocationsUpdated();}
_geolocationsUpdated(){this._list.clear();const conditions=this._customSetting.get();for(let i=0;i<conditions.length;++i){this._list.appendItem(conditions[i],true);}
this._list.appendSeparator();}
_addButtonClicked(){this._list.addNewItem(this._customSetting.get().length,{title:'',lat:0,long:0,timezoneId:''});}
renderItem(item,editable){const geolocation=(item);const element=createElementWithClass('div','geolocations-list-item');const title=element.createChild('div','geolocations-list-text geolocations-list-title');const titleText=title.createChild('div','geolocations-list-title-text');titleText.textContent=geolocation.title;titleText.title=geolocation.title;element.createChild('div','geolocations-list-separator');element.createChild('div','geolocations-list-text').textContent=geolocation.lat;element.createChild('div','geolocations-list-separator');element.createChild('div','geolocations-list-text').textContent=geolocation.long;element.createChild('div','geolocations-list-separator');element.createChild('div','geolocations-list-text').textContent=geolocation.timezoneId;return element;}
removeItemRequested(item,index){const list=this._customSetting.get();list.splice(index,1);this._customSetting.set(list);}
commitEdit(item,editor,isNew){const geolocation=(item);geolocation.title=editor.control('title').value.trim();const lat=editor.control('lat').value.trim();geolocation.lat=lat?parseFloat(lat):0;const long=editor.control('long').value.trim();geolocation.long=long?parseFloat(long):0;const timezoneId=editor.control('timezoneId').value.trim();geolocation.timezoneId=timezoneId;const list=this._customSetting.get();if(isNew){list.push(geolocation);}
this._customSetting.set(list);}
beginEdit(item){const geolocation=(item);const editor=this._createEditor();editor.control('title').value=geolocation.title;editor.control('lat').value=String(geolocation.lat);editor.control('long').value=String(geolocation.long);editor.control('timezoneId').value=String(geolocation.timezoneId);return editor;}
_createEditor(){if(this._editor){return this._editor;}
const editor=new UI.ListWidget.Editor();this._editor=editor;const content=editor.contentElement();const titles=content.createChild('div','geolocations-edit-row');titles.createChild('div','geolocations-list-text geolocations-list-title').textContent=Common.UIString('Location name');titles.createChild('div','geolocations-list-separator geolocations-list-separator-invisible');titles.createChild('div','geolocations-list-text').textContent=Common.UIString('Lat');titles.createChild('div','geolocations-list-separator geolocations-list-separator-invisible');titles.createChild('div','geolocations-list-text').textContent=Common.UIString('Long');titles.createChild('div','geolocations-list-separator geolocations-list-separator-invisible');titles.createChild('div','geolocations-list-text').textContent=Common.UIString('Timezone ID');const fields=content.createChild('div','geolocations-edit-row');fields.createChild('div','geolocations-list-text geolocations-list-title').appendChild(editor.createInput('title','text',ls`Location name`,titleValidator));fields.createChild('div','geolocations-list-separator geolocations-list-separator-invisible');let cell=fields.createChild('div','geolocations-list-text');cell.appendChild(editor.createInput('lat','text',ls`Latitude`,latValidator));fields.createChild('div','geolocations-list-separator geolocations-list-separator-invisible');cell=fields.createChild('div','geolocations-list-text');cell.appendChild(editor.createInput('long','text',ls`Longitude`,longValidator));cell=fields.createChild('div','geolocations-list-text');cell.appendChild(editor.createInput('timezoneId','text',ls`Timezone ID`,timezoneIdValidator));return editor;function titleValidator(item,index,input){const maxLength=50;const value=input.value.trim();let errorMessage;if(!value.length){errorMessage=ls`Location name cannot be empty`;}else if(value.length>maxLength){errorMessage=ls`Location name must be less than ${maxLength} characters`;}
if(errorMessage){return{valid:false,errorMessage};}
return{valid:true};}
function latValidator(item,index,input){const minLat=-90;const maxLat=90;const value=input.value.trim();const parsedValue=Number(value);if(!value){return{valid:true};}
let errorMessage;if(Number.isNaN(parsedValue)){errorMessage=ls`Latitude must be a number`;}else if(parseFloat(value)<minLat){errorMessage=ls`Latitude must be greater than or equal to ${minLat}`;}else if(parseFloat(value)>maxLat){errorMessage=ls`Latitude must be less than or equal to ${maxLat}`;}
if(errorMessage){return{valid:false,errorMessage};}
return{valid:true};}
function longValidator(item,index,input){const minLong=-180;const maxLong=180;const value=input.value.trim();const parsedValue=Number(value);if(!value){return{valid:true};}
let errorMessage;if(Number.isNaN(parsedValue)){errorMessage=ls`Longitude must be a number`;}else if(parseFloat(value)<minLong){errorMessage=ls`Longitude must be greater than or equal to ${minLong}`;}else if(parseFloat(value)>maxLong){errorMessage=ls`Longitude must be less than or equal to ${maxLong}`;}
if(errorMessage){return{valid:false,errorMessage};}
return{valid:true};}
function timezoneIdValidator(item,index,input){const value=input.value.trim();if(value===''||/[a-zA-Z]/.test(value)){return{valid:true};}
const errorMessage=ls`Timezone ID must contain alphabet letters`;return{valid:false,errorMessage};}}};Emulation.GeolocationsSettingsTab.Item;;self['InspectorMain']=self['InspectorMain']||{};;Root.Runtime.cachedResources["mobile_throttling/throttlingSettingsTab.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    overflow:hidden;\n}\n\n.header {\n    padding: 0 0 6px;\n    border-bottom: 1px solid #EEEEEE;\n    font-size: 18px;\n    font-weight: normal;\n    flex: none;\n}\n\n.add-conditions-button {\n    flex: none;\n    margin: 10px 2px;\n    min-width: 140px;\n    align-self: flex-start;\n}\n\n.conditions-list {\n    max-width: 500px;\n    min-width: 340px;\n    flex: auto;\n}\n\n.conditions-list-item {\n    padding: 3px 5px 3px 5px;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    position: relative;\n    flex: auto 1 1;\n}\n\n.conditions-list-text {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    flex: 0 0 70px;\n    -webkit-user-select: none;\n    color: #222;\n    text-align: end;\n    position: relative;\n}\n\n.conditions-list-title {\n    text-align: start;\n    flex: auto;\n    display: flex;\n    align-items: flex-start;\n}\n\n.conditions-list-title-text {\n    overflow: hidden;\n    flex: auto;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n.conditions-list-separator {\n    flex: 0 0 1px;\n    background-color: rgb(231, 231, 231);\n    height: 30px;\n    margin: 0 4px;\n}\n\n.conditions-list-separator-invisible {\n    visibility: hidden;\n    height: 100% !important;\n}\n\n.conditions-edit-row {\n    flex: none;\n    display: flex;\n    flex-direction: row;\n    margin: 6px 5px;\n}\n\n.conditions-edit-row input {\n    width: 100%;\n    text-align: inherit;\n}\n\n.conditions-edit-optional {\n    position: absolute;\n    bottom: -20px;\n    right: 0;\n    color: rgb(128, 128, 128);\n}\n\n/*# sourceURL=mobile_throttling/throttlingSettingsTab.css */";Root.Runtime.cachedResources["emulation/devicesSettingsTab.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.devices-settings-tab .settings-tab.settings-content {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    height: 100%;\n    margin: 0;\n}\n\n.devices-settings-tab .devices-button-row {\n    flex: none;\n    display: flex;\n}\n\n.devices-settings-tab .devices-button-row button {\n    margin-right: 10px;\n    min-width: 120px;\n    flex: none;\n}\n\n.devices-settings-tab .devices-list {\n    width: 350px;\n    margin-top: 10px;\n}\n\n.devices-list-item {\n    padding: 3px 5px 3px 5px;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    flex: auto 1 1;\n    cursor: pointer;\n}\n\n.devices-list-checkbox {\n    height: 12px;\n    width: 12px;\n    margin: 3px 5px 2px 2px;\n    flex: none;\n    pointer-events: none;\n}\n\n.devices-list-checkbox:focus {\n    outline: auto 5px -webkit-focus-ring-color;\n}\n\n.devices-list-title {\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    flex: auto;\n    -webkit-user-select: none;\n    color: #222;\n}\n\n.devices-edit-fields {\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    align-items: stretch;\n    margin-bottom: 5px;\n}\n\n.devices-edit-fields input {\n    flex: auto;\n    margin: 8px 5px 0 5px;\n}\n\n.devices-edit-fields .device-edit-fixed {\n    flex: 0 0 140px;\n}\n\n.devices-edit-fields select {\n    margin: 8px 5px 0 5px;\n}\n\n/*# sourceURL=emulation/devicesSettingsTab.css */";Root.Runtime.cachedResources["emulation/deviceModeToolbar.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.device-mode-size-input {\n    width: 41px;\n    max-height: 18px;\n    margin: 0 2px;\n    text-align: center;\n}\n\n.device-mode-size-input:focus::-webkit-input-placeholder {\n    color: transparent;\n}\n\n.device-mode-size-input:disabled {\n    background: transparent;\n    -webkit-user-select: none;\n    opacity: 0.6;\n}\n\n.device-mode-x {\n    margin: 0 1px;\n    font-size: 16px;\n}\n\n.device-mode-empty-toolbar-element {\n    width: 0;\n}\n\n/*# sourceURL=emulation/deviceModeToolbar.css */";Root.Runtime.cachedResources["emulation/deviceModeView.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    overflow: hidden;\n    align-items: stretch;\n    flex: auto;\n    background-color: hsl(0, 0%, 98%);\n}\n\n.device-mode-toolbar {\n    flex: none;\n    background-color: hsl(0, 0%, 98%);\n    border-bottom: 1px solid #ccc;\n    display: flex;\n    flex-direction: row;\n    align-items: stretch;\n}\n\n.device-mode-toolbar .toolbar {\n    overflow: hidden;\n    flex: 0 100000 auto;\n    padding: 0 5px;\n}\n\n.device-mode-toolbar .toolbar.device-mode-toolbar-fixed-size {\n    flex: 0 1 auto;\n}\n\n.device-mode-toolbar-options.toolbar {\n    position: sticky;\n    right: 0;\n    flex: none;\n}\n\n.device-mode-toolbar-spacer {\n    flex: 1 1 0;\n    display: flex;\n    flex-direction: row;\n    overflow: hidden;\n}\n\n.device-mode-content-clip {\n    overflow: hidden;\n    flex: auto;\n}\n\n.device-mode-media-container {\n    flex: none;\n    overflow: hidden;\n    box-shadow: inset 0 -1px #ccc;\n}\n\n.device-mode-content-clip:not(.device-mode-outline-visible) .device-mode-media-container {\n    margin-bottom: 20px;\n}\n\n.device-mode-presets-container {\n    flex: 0 0 20px;\n    display: flex;\n}\n\n.device-mode-presets-container-inner {\n    flex: auto;\n    justify-content: center;\n    position: relative;\n    background-color: hsl(0, 0%, 90%);\n    border: 2px solid hsl(0, 0%, 98%);\n    border-bottom: 2px solid hsl(0, 0%, 98%);\n }\n\n.device-mode-presets-container:hover {\n    transition: opacity 0.1s;\n    transition-delay: 50ms;\n    opacity: 1;\n}\n\n.device-mode-preset-bar-outer {\n    pointer-events: none;\n    display: flex;\n    justify-content: center;\n}\n\n.device-mode-preset-bar {\n    border-left: 2px solid hsl(0, 0%, 98%);\n    border-right: 2px solid hsl(0, 0%, 98%);\n    pointer-events: auto;\n    text-align: center;\n    flex: none;\n    cursor: pointer;\n    color: #5A5A5A;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    white-space: nowrap;\n    margin-bottom: 1px;\n}\n\n.device-mode-preset-bar:hover {\n    transition: background-color 0.1s;\n    transition-delay: 50ms;\n    background-color: #d6d6d6;\n}\n\n.device-mode-preset-bar > span {\n    visibility: hidden;\n}\n\n.device-mode-preset-bar:hover > span {\n    transition: visibility 0.1s;\n    transition-delay: 50ms;\n    visibility: visible;\n}\n\n.device-mode-content-area {\n    flex: auto;\n    position: relative;\n    margin: 0;\n}\n\n.device-mode-screen-area {\n    position: absolute;\n    left: 0;\n    right: 0;\n    width: 0;\n    height: 0;\n    background-color: #171717;\n}\n\n.device-mode-content-clip:not(.device-mode-outline-visible) .device-mode-screen-area {\n    box-shadow: hsl(240, 3%, 84%) 0 0 0 0.5px, hsla(0, 0%, 80%, 0.4) 0 0 20px;\n}\n\n.device-mode-screen-image {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.device-mode-resizer {\n    position: absolute;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    overflow: hidden;\n    transition: background-color 0.1s ease, opacity 0.1s ease;\n}\n\n.device-mode-resizer:hover {\n    background-color: hsla(0, 0%, 0%, 0.1);\n    opacity: 1;\n}\n\n.device-mode-resizer > div {\n    pointer-events: none;\n}\n\n.device-mode-right-resizer {\n    top: 0;\n    bottom: -1px;\n    right: -20px;\n    width: 20px;\n}\n\n.device-mode-left-resizer {\n    top: 0;\n    bottom: -1px;\n    left: -20px;\n    width: 20px;\n    opacity: 0;\n}\n\n.device-mode-bottom-resizer {\n    left: 0;\n    right: -1px;\n    bottom: -20px;\n    height: 20px;\n}\n\n.device-mode-bottom-right-resizer {\n    left: 0;\n    top: 0;\n    right: -20px;\n    bottom: -20px;\n    background-color: hsla(0, 0%, 0%, 0.02);\n}\n\n.device-mode-bottom-left-resizer {\n    left: -20px;\n    top: 0;\n    right: 0;\n    bottom: -20px;\n    opacity: 0;\n}\n\n.device-mode-right-resizer > div {\n    content: url(Images/resizeHorizontal.png);\n    width: 6px;\n    height: 26px;\n}\n\n.device-mode-left-resizer > div {\n    content: url(Images/resizeHorizontal.png);\n    width: 6px;\n    height: 26px;\n}\n\n.device-mode-bottom-resizer > div {\n    content: url(Images/resizeVertical.png);\n    margin-bottom: -2px;\n    width: 26px;\n    height: 6px;\n}\n\n.device-mode-bottom-right-resizer > div {\n    position: absolute;\n    bottom: 3px;\n    right: 3px;\n    width: 13px;\n    height: 13px;\n    content: url(Images/resizeDiagonal.png);\n}\n\n.device-mode-bottom-left-resizer > div {\n    position: absolute;\n    bottom: 3px;\n    left: 3px;\n    width: 13px;\n    height: 13px;\n    content: url(Images/resizeDiagonal.png);\n    transform: rotate(90deg);\n}\n\n@media (-webkit-min-device-pixel-ratio: 1.1) {\n    .device-mode-right-resizer > div {\n        content: url(Images/resizeHorizontal_2x.png);\n    }\n\n    .device-mode-left-resizer > div {\n        content: url(Images/resizeHorizontal_2x.png);\n    }\n\n    .device-mode-bottom-resizer > div {\n        content: url(Images/resizeVertical_2x.png);\n    }\n\n    .device-mode-bottom-right-resizer > div {\n        content: url(Images/resizeDiagonal_2x.png);\n    }\n\n    .device-mode-bottom-left-resizer > div {\n        content: url(Images/resizeDiagonal_2x.png);\n    }\n} /* media */\n\n.device-mode-page-area {\n    position: absolute;\n    left: 0;\n    right: 0;\n    width: 0;\n    height: 0;\n    display: flex;\n    background-color: #fcfcfc;\n}\n\n.device-mode-ruler {\n    position: absolute;\n    overflow: visible;\n}\n\n.device-mode-ruler-top {\n    height: 20px;\n    right: 0;\n}\n\n.device-mode-ruler-left {\n    width: 20px;\n    bottom: 0;\n}\n\n.device-mode-ruler-content {\n    pointer-events: none;\n    position: absolute;\n    left: -20px;\n    top: -20px;\n}\n\n.device-mode-ruler-top .device-mode-ruler-content {\n    border-top: 1px solid transparent;\n    right: 0;\n    bottom: 20px;\n    background-color: hsla(0, 0%, 98%, 0.9);\n}\n\n.device-mode-content-clip.device-mode-outline-visible .device-mode-ruler-top .device-mode-ruler-content {\n    border-top: 1px solid hsl(0, 0%, 50%);\n}\n\n.device-mode-ruler-left .device-mode-ruler-content {\n    border-left: 1px solid transparent;\n    border-top: 1px solid transparent;\n    right: 20px;\n    bottom: 0;\n}\n\n.device-mode-content-clip.device-mode-outline-visible .device-mode-ruler-left .device-mode-ruler-content {\n    border-left: 1px solid hsl(0, 0%, 50%);\n    border-top: 1px solid hsl(0, 0%, 50%);\n}\n\n.device-mode-ruler-inner {\n    position: absolute;\n}\n\n.device-mode-ruler-top .device-mode-ruler-inner {\n    top: 0;\n    bottom: 0;\n    left: 20px;\n    right: 0;\n    border-bottom: 1px solid hsl(0, 0%, 50%);\n}\n\n.device-mode-ruler-left .device-mode-ruler-inner {\n    left: 0;\n    right: 0;\n    top: 19px;\n    bottom: 0;\n    border-right: 1px solid hsl(0, 0%, 50%);\n    background-color: hsla(0, 0%, 98%, 0.9);\n}\n\n.device-mode-ruler-marker {\n    position: absolute;\n}\n\n.device-mode-ruler-top .device-mode-ruler-marker {\n    width: 0;\n    height: 5px;\n    bottom: 0;\n    border-right: 1px solid hsl(0, 0%, 50%);\n    margin-right: -1px;\n}\n\n.device-mode-ruler-top .device-mode-ruler-marker.device-mode-ruler-marker-medium {\n    height: 10px;\n}\n\n.device-mode-ruler-top .device-mode-ruler-marker.device-mode-ruler-marker-large {\n    height: 15px;\n}\n\n.device-mode-ruler-left .device-mode-ruler-marker {\n    height: 0;\n    width: 5px;\n    right: 0;\n    border-bottom: 1px solid hsl(0, 0%, 50%);\n    margin-bottom: -1px;\n}\n\n.device-mode-ruler-left .device-mode-ruler-marker.device-mode-ruler-marker-medium {\n    width: 10px;\n}\n\n.device-mode-ruler-left .device-mode-ruler-marker.device-mode-ruler-marker-large {\n    width: 15px;\n}\n\n.device-mode-ruler-text {\n    color: hsl(0, 0%, 50%);\n    position: relative;\n    pointer-events: auto;\n}\n\n.device-mode-ruler-text:hover {\n    color: hsl(0, 0%, 10%);\n}\n\n.device-mode-ruler-top .device-mode-ruler-text {\n    left: 2px;\n    top: -2px;\n}\n\n.device-mode-ruler-left .device-mode-ruler-text {\n    left: -4px;\n    top: -15px;\n    transform: rotate(270deg);\n}\n\n/*# sourceURL=emulation/deviceModeView.css */";Root.Runtime.cachedResources["emulation/geolocationsSettingsTab.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n  overflow: hidden;\n}\n\n.header {\n  padding: 0 0 6px;\n  border-bottom: 1px solid #EEEEEE;\n  font-size: 18px;\n  font-weight: normal;\n  flex: none;\n}\n\n.add-geolocations-button {\n  flex: none;\n  margin: 10px 2px;\n  min-width: 140px;\n  align-self: flex-start;\n}\n\n.geolocations-list {\n  max-width: 600px;\n  min-width: 340px;\n  flex: auto;\n}\n\n.geolocations-list-item {\n  padding: 3px 5px 3px 5px;\n  height: 30px;\n  display: flex;\n  align-items: center;\n  position: relative;\n  flex: auto 1 1;\n}\n\n.geolocations-list-text {\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  flex: 0 0 70px;\n  -webkit-user-select: none;\n  color: #222;\n  text-align: end;\n  position: relative;\n}\n\n.geolocations-list-text:last-child {\n  flex: 0 0 170px;\n}\n\n.geolocations-list-title {\n  text-align: start;\n  flex: auto;\n  display: flex;\n  align-items: flex-start;\n}\n\n.geolocations-list-title-text {\n  overflow: hidden;\n  flex: auto;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n\n.geolocations-list-separator {\n  flex: 0 0 1px;\n  background-color: rgb(231, 231, 231);\n  height: 30px;\n  margin: 0 4px;\n}\n\n.geolocations-list-separator-invisible {\n  visibility: hidden;\n  height: 100% !important;\n}\n\n.geolocations-edit-row {\n  flex: none;\n  display: flex;\n  flex-direction: row;\n  margin: 6px 5px;\n}\n\n.geolocations-edit-row input {\n  width: 100%;\n  text-align: inherit;\n}\n\n/*# sourceURL=emulation/geolocationsSettingsTab.css */";Root.Runtime.cachedResources["emulation/inspectedPagePlaceholder.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    background-color: white;\n}\n\n/*# sourceURL=emulation/inspectedPagePlaceholder.css */";Root.Runtime.cachedResources["emulation/mediaQueryInspector.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n/* Media query bars */\n\n.media-inspector-view {\n    height: 50px;\n}\n\n.media-inspector-marker-container {\n    height: 14px;\n    margin: 2px 0;\n    position: relative;\n}\n\n.media-inspector-bar {\n    display: flex;\n    flex-direction: row;\n    align-items: stretch;\n    pointer-events: none;\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n}\n\n.media-inspector-marker {\n    flex: none;\n    pointer-events: auto;\n    margin: 1px 0;\n    white-space: nowrap;\n    z-index: auto;\n    position: relative;\n}\n\n.media-inspector-marker-spacer {\n    flex: auto;\n}\n\n.media-inspector-marker:hover {\n    margin: -1px 0;\n    opacity: 1;\n}\n\n.media-inspector-marker-max-width {\n    background-color: hsl(207, 90%, 77%);\n    border-right: 2px solid hsl(207, 90%, 61%);\n    border-left: 2px solid hsl(207, 90%, 61%);\n}\n\n.media-inspector-marker-inactive .media-inspector-marker-max-width:not(:hover) {\n    background-color: hsl(199, 94%, 94%);\n}\n\n.media-inspector-marker-min-max-width {\n    background-color: hsl(88, 50%, 76%);\n    border-left: 2px solid #689F38;\n    border-right: 2px solid hsl(92, 48%, 42%);\n}\n\n.media-inspector-marker-inactive .media-inspector-marker-min-max-width:not(:hover) {\n    background-color: hsl(125, 39%, 94%);\n}\n\n.media-inspector-marker-min-max-width:hover {\n    z-index: 1;\n}\n\n.media-inspector-marker-min-width {\n    background-color: hsl(36, 100%, 75%);\n    flex: auto;\n}\n\n.media-inspector-marker-inactive .media-inspector-marker-min-width:not(:hover) {\n    background-color: hsl(37, 100%, 94%);\n}\n\n.media-inspector-marker-min-width-right {\n    border-left: 2px solid hsl(30, 100%, 48%);\n}\n\n.media-inspector-marker-min-width-left {\n    border-right: 2px solid hsl(30, 100%, 48%);\n}\n\n/* Media query labels */\n\n.media-inspector-marker:not(:hover) .media-inspector-marker-label-container {\n    display: none;\n}\n\n.media-inspector-marker-label-container {\n    position: absolute;\n    z-index: 1;\n}\n\n.media-inspector-marker-label-container-left {\n    left: -2px;\n}\n\n.media-inspector-marker-label-container-right {\n    right: -2px;\n}\n\n.media-inspector-marker-label {\n    color: #222;\n    position: absolute;\n    top: 1px;\n    bottom: 0;\n    font-size: 12px;\n    pointer-events: none;\n}\n\n.media-inspector-label-right {\n    right: 4px;\n}\n\n.media-inspector-label-left {\n    left: 4px;\n}\n\n/*# sourceURL=emulation/mediaQueryInspector.css */";Root.Runtime.cachedResources["emulation/sensors.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.sensors-view {\n  padding: 12px;\n  display: block;\n}\n\n.sensors-view input {\n  width: 100%;\n  max-width: 120px;\n  margin: -5px 10px 0px 0px;\n  text-align: end;\n}\n\n.sensors-view input[readonly] {\n  background-color: rgb(235, 235, 228);\n}\n\n.sensors-view fieldset {\n  border: none;\n  padding: 10px 0px;\n  margin-left: 0;\n  flex: 0 0 auto;\n  margin: 0;\n}\n\n.sensors-view fieldset[disabled] {\n  opacity: 0.5;\n}\n\n.sensors-view input:focus::-webkit-input-placeholder {\n  color: transparent !important;\n}\n\n.sensors-view .chrome-select {\n  width: 200px;\n}\n\n.sensors-group-title {\n  width: 80px;\n  line-height: 24px;\n}\n\n.sensors-group {\n  display: flex;\n  flex-wrap: wrap;\n  margin-bottom: 10px;\n}\n\n.geo-fields {\n  flex: 2 0 200px;\n}\n\n.latlong-group {\n  display: flex;\n  margin-bottom: 10px;\n}\n\n.latlong-title {\n  width: 70px;\n}\n\n.timezone-error {\n  margin-left: 10px;\n  color: var(--input-validation-error);\n}\n\n/* Device Orientation */\n\n.orientation-content {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.orientation-fields {\n  margin-right: 10px;\n}\n\n.orientation-stage {\n  -webkit-perspective: 700px;\n  -webkit-perspective-origin: 50% 50%;\n  width: 160px;\n  height: 150px;\n  background: linear-gradient(#E1F5FE 0%, #E1F5FE 64%, #b0Ebf3 64%, #DEF6F9 100%);\n  transition: 0.2s ease opacity, 0.2s ease -webkit-filter;\n  overflow: hidden;\n  margin-bottom: 10px;\n}\n\n.orientation-stage.disabled {\n  -webkit-filter: grayscale();\n  opacity: 0.5;\n  cursor: default !important;\n}\n\n.orientation-element,\n.orientation-element::before,\n.orientation-element::after{\n  position: absolute;\n  box-sizing: border-box;\n  transform-style: preserve-3d;\n  background: no-repeat;\n  background-size: cover;\n  backface-visibility: hidden;\n}\n\n.orientation-box {\n  width: 62px;\n  height: 122px;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  margin: auto;\n  transform: rotate3d(1, 0, 0, 90deg);\n}\n\n.orientation-box.is-animating, .is-animating .orientation-layer {\n  transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;\n}\n\n.orientation-layer {\n  width: 100%;\n  height: 100%;\n  transform-style: preserve-3d;\n}\n\n.orientation-front,\n.orientation-back\n{\n  width: 62px;\n  height: 122px;\n  border-radius: 8px;\n}\n\n.orientation-front {\n  background-image: url(Images/accelerometer-front.svg);\n}\n\n.orientation-back {\n  transform: rotateY(180deg) translateZ(8px);\n  background-image: url(Images/accelerometer-back.svg);\n}\n\n\n.orientation-left,\n.orientation-right {\n  width: 8px;\n  height: 106px;\n  top: 8px;\n  background-position: center center;\n}\n\n.orientation-left {\n  left: -8px;\n  transform-origin: right center;\n  transform: rotateY(-90deg);\n  background-image: url(Images/accelerometer-left.png);\n}\n\n\n.orientation-right {\n  right: -8px;\n  transform-origin: left center;\n  transform: rotateY(90deg);\n  background-image: url(Images/accelerometer-right.png);\n}\n\n.orientation-left::before,\n.orientation-left::after,\n.orientation-right::before,\n.orientation-right::after\n{\n  content: '';\n  width: 8px;\n  height: 6px;\n}\n\n.orientation-left::before,\n.orientation-left::after\n{\n  background-image: url(Images/accelerometer-left.png);\n}\n\n.orientation-right::before,\n.orientation-right::after\n{\n  background-image: url(Images/accelerometer-right.png);\n}\n\n.orientation-left::before,\n.orientation-right::before {\n  top: -6px;\n  transform-origin: center bottom;\n  transform: rotateX(26deg);\n  background-position: center top;\n}\n\n.orientation-left::after,\n.orientation-right::after {\n  bottom: -6px;\n  transform-origin: center top;\n  transform: rotateX(-25deg);\n  background-position: center bottom;\n}\n\n.orientation-top,\n.orientation-bottom {\n  width: 50px;\n  height: 8px;\n  left: 8px;\n  background-position: center center;\n}\n\n.orientation-top {\n  top: -8px;\n  transform-origin: center bottom;\n  transform: rotateX(90deg);\n  background-image: url(Images/accelerometer-top.png);\n}\n\n\n.orientation-bottom {\n  bottom: -8px;\n  transform-origin: center top;\n  transform: rotateX(-90deg);\n  background-image: url(Images/accelerometer-bottom.png);\n}\n\n\n.orientation-top::before,\n.orientation-top::after,\n.orientation-bottom::before,\n.orientation-bottom::after\n{\n  content: '';\n  width: 8px;\n  height: 8px;\n}\n\n.orientation-top::before,\n.orientation-top::after\n{\n  background-image: url(Images/accelerometer-top.png);\n}\n\n.orientation-bottom::before,\n.orientation-bottom::after\n{\n  background-image: url(Images/accelerometer-bottom.png);\n}\n\n.orientation-top::before,\n.orientation-bottom::before {\n  left: -6px;\n  transform-origin: right center;\n  transform: rotateY(-26deg);\n  background-position: left center;\n}\n\n.orientation-top::after,\n.orientation-bottom::after {\n  right: -6px;\n  transform-origin: left center;\n  transform: rotateY(26deg);\n  background-position: right center;\n}\n\n.orientation-axis-input-container {\n  margin-bottom: 10px;\n}\n\n.orientation-axis-input-container input {\n  max-width: 120px;\n}\n\n.orientation-reset-button {\n  min-width: 80px;\n}\n\nfieldset.device-orientation-override-section {\n  margin: 0;\n  display: flex;\n}\n\n.panel-section-separator {\n  height: 2px;\n  margin-bottom: 8px;\n  background: #f1f1f1;\n}\n\n.reload-warning {\n  align-self: center;\n  margin-left: 10px;\n}\n\nbutton.text-button {\n  margin: 0 10px;\n}\n\n/*# sourceURL=emulation/sensors.css */";Root.Runtime.cachedResources["inspector_main/nodeIcon.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.node-icon {\n    width: 28px;\n    height: 26px;\n    background-image: url(Images/nodeIcon.png);\n    background-size: 17px 17px;\n    background-repeat: no-repeat;\n    background-position: center;\n    opacity: 0.8;\n    cursor: auto;\n}\n\n.node-icon:hover {\n    opacity: 1.0;\n}\n\n.node-icon.inactive {\n    filter: grayscale(100%);\n}\n\n/*# sourceURL=inspector_main/nodeIcon.css */";Root.Runtime.cachedResources["inspector_main/renderingOptions.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n  padding: 12px;\n }\n\n[is=dt-checkbox] {\n  margin: 0 0 10px 0;\n  flex: none;\n}\n\n.panel-section-separator {\n  height: 1px;\n  margin-bottom: 10px;\n  background: #f0f0f0;\n  flex: none;\n}\n\n.chrome-select-label {\n  margin-bottom: 16px;\n}\n\n/*# sourceURL=inspector_main/renderingOptions.css */";<!--
 * Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com">
    <meta name="referrer" content="no-referrer">
    <script type="module" src="root.js"></script>
    <script defer src="shell.js"></script>
    <script defer src="devtools_app.js"></script>
    <script defer src="inspector.js"></script>
    <script type="module">Root.Runtime.startApplication('inspector');</script>
</head>
<body class="undocked" id="-blink-dev-tools"></body>
</html>
Root.allDescriptors.push(...[{"dependencies":["components","emulation"],"extensions":[{"className":"Screencast.ScreencastAppProvider","type":"@Common.AppProvider","order":1},{"className":"Screencast.ScreencastApp.ToolbarButtonProvider","type":"@UI.ToolbarItem.Provider","order":1,"location":"main-toolbar-left"},{"actionId":"components.request-app-banner","type":"context-menu-item","location":"mainMenu","order":10}],"name":"screencast","modules":["screencast.js","InputModel.js","ScreencastApp.js","ScreencastView.js"]}]);Root.applicationDescriptor.modules.push(...[{"type":"autostart","name":"screencast"}]);self['Screencast']=self['Screencast']||{};;Root.Runtime.cachedResources["screencast/screencastView.css"]="/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.screencast {\n    overflow: hidden;\n}\n\n.screencast-navigation {\n    flex-direction: row;\n    display: flex;\n    flex: 24px 0 0;\n    position: relative;\n    padding-left: 1px;\n    border-bottom: 1px solid rgb(64%, 64%, 64%);\n    background-origin: padding-box;\n    background-clip: padding-box;\n}\n\n.screencast-navigation button {\n    border-radius: 2px;\n    background-color: transparent;\n    background-image: -webkit-image-set(\n        url(Images/navigationControls.png) 1x,\n        url(Images/navigationControls_2x.png) 2x);\n    background-clip: content-box;\n    background-origin: content-box;\n    background-repeat: no-repeat;\n    border: 1px solid transparent;\n    height: 23px;\n    padding: 2px;\n    width: 23px;\n}\n\n.screencast-navigation button:hover {\n    border-color: #ccc;\n}\n\n.screencast-navigation button:active {\n    border-color: #aaa;\n}\n\n.screencast-navigation button[disabled] {\n    opacity: 0.5;\n}\n\n.screencast-navigation button.back {\n    background-position-x: -1px;\n}\n\n.screencast-navigation button.forward {\n    background-position-x: -18px;\n}\n\n.screencast-navigation button.reload {\n    background-position-x: -37px;\n}\n\n.screencast-navigation input {\n    -webkit-flex: 1;\n    margin: 2px;\n    max-height: 19px;\n}\n\n.screencast-navigation .progress {\n    background-color: rgb(66, 129, 235);\n    height: 3px;\n    left: 0;\n    position: absolute;\n    top: 100%;  /* Align with the bottom edge of the parent. */\n    width: 0;\n    z-index: 2;  /* Above .screencast-glasspane. */\n}\n\n.screencast-viewport {\n    display: flex;\n    border: 1px solid #999;\n    border-radius: 20px;\n    flex: none;\n    padding: 20px;\n    margin: 10px;\n    background-color: #eee;\n}\n\n.screencast-canvas-container {\n    flex: auto;\n    display: flex;\n    border: 1px solid #999;\n    position: relative;\n    cursor: -webkit-image-set(url(Images/touchCursor.png) 1x, url(Images/touchCursor_2x.png) 2x), default;\n}\n\n.screencast canvas {\n    flex: auto;\n    position: relative;\n}\n\n.screencast-px {\n    color: rgb(128, 128, 128);\n}\n\n.screencast-element-title {\n    position: absolute;\n    z-index: 10;\n}\n\n.screencast-tag-name {\n    /* Keep this in sync with view-source.css (.webkit-html-tag) */\n    color: rgb(136, 18, 128);\n}\n\n.screencast-node-id {\n    /* Keep this in sync with view-source.css (.webkit-html-attribute-value) */\n    color: rgb(26, 26, 166);\n}\n\n.screencast-class-name {\n    /* Keep this in sync with view-source.css (.webkit-html-attribute-name) */\n    color: rgb(153, 69, 0);\n}\n\n.screencast-glasspane {\n    background-color: rgba(255, 255, 255, 0.8);\n    font-size: 30px;\n    z-index: 100;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n/*# sourceURL=screencast/screencastView.css */";<!--
 * Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com">
    <meta name="referrer" content="no-referrer">
    <script type="module" src="root.js"></script>
    <script defer src="shell.js"></script>
    <script defer src="js_app.js"></script>
    <script type="module">Root.Runtime.startApplication('js_app');</script>
</head>
<body class="undocked" id="-blink-dev-tools"></body>
</html>
Root.allDescriptors.push(...[{"extensions":[{"className":"JsMain.JsMain","type":"early-initialization"}],"dependencies":["components"],"modules":["js_main.js","JsMain.js"],"name":"js_main","scripts":[]},{"dependencies":["profiler"],"extensions":[{"title":"Profiler","id":"js_profiler","className":"Profiler.JSProfilerPanel","location":"panel","type":"view","order":65}],"name":"js_profiler"}]);Root.applicationDescriptor.modules.push(...[{"type":"autostart","name":"js_main"},{"name":"js_profiler"}]);self['JsMain']=self['JsMain']||{};;<!--
 * Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com">
    <meta name="referrer" content="no-referrer">
    <script type="module" src="root.js"></script>
    <script defer src="shell.js"></script>
    <script defer src="node_app.js"></script>
    <script type="module">Root.Runtime.startApplication('node_app');</script>
</head>
<body class="undocked" id="-blink-dev-tools"></body>
</html>
Root.allDescriptors.push(...[{"dependencies":["sources"],"extensions":[{"title":"Node","id":"navigator-network","className":"Sources.NetworkNavigatorView","location":"navigator-view","type":"view","order":2,"persistence":"permanent"}],"name":"node_debugger"},{"dependencies":["profiler"],"extensions":[{"title":"Profiler","id":"js_profiler","className":"Profiler.JSProfilerPanel","location":"panel","type":"view","order":65}],"name":"js_profiler"},{"dependencies":["platform","ui","host","components"],"extensions":[{"className":"NodeMain.NodeMain","type":"early-initialization"},{"title":"Connection","tags":"node","id":"node-connection","className":"NodeMain.NodeConnectionsPanel","location":"panel","type":"view","order":0}],"name":"node_main"}]);Root.applicationDescriptor.modules.push(...[{"name":"node_debugger"},{"name":"js_profiler"},{"type":"autostart","name":"node_main"}]);self['NodeMain']=self['NodeMain']||{};NodeMain.NodeConnectionsPanel=class extends UI.Panel{constructor(){super('node-connection');this.registerRequiredCSS('node_main/nodeConnectionsPanel.css');this.contentElement.classList.add('node-panel');const container=this.contentElement.createChild('div','node-panel-center');const image=container.createChild('img','node-panel-logo');image.src='https://nodejs.org/static/images/logos/nodejs-new-pantone-black.png';Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this._devicesDiscoveryConfigChanged,this);this._config;this.contentElement.tabIndex=0;this.setDefaultFocusedElement(this.contentElement);Host.InspectorFrontendHost.setDevicesUpdatesEnabled(false);Host.InspectorFrontendHost.setDevicesUpdatesEnabled(true);this._networkDiscoveryView=new NodeMain.NodeConnectionsView(config=>{this._config.networkDiscoveryConfig=config;Host.InspectorFrontendHost.setDevicesDiscoveryConfig(this._config);});this._networkDiscoveryView.show(container);}
_devicesDiscoveryConfigChanged(event){this._config=(event.data);this._networkDiscoveryView.discoveryConfigChanged(this._config.networkDiscoveryConfig);}};NodeMain.NodeConnectionsView=class extends UI.VBox{constructor(callback){super();this._callback=callback;this.element.classList.add('network-discovery-view');const networkDiscoveryFooter=this.element.createChild('div','network-discovery-footer');const documentationLink=UI.XLink.create('https://nodejs.org/en/docs/inspector/',ls`Node.js debugging guide`);networkDiscoveryFooter.appendChild(UI.formatLocalized('Specify network endpoint and DevTools will connect to it automatically. Read %s to learn more.',[documentationLink]));this._list=new UI.ListWidget(this);this._list.registerRequiredCSS('node_main/nodeConnectionsPanel.css');this._list.element.classList.add('network-discovery-list');const placeholder=createElementWithClass('div','network-discovery-list-empty');placeholder.textContent=Common.UIString('No connections specified');this._list.setEmptyPlaceholder(placeholder);this._list.show(this.element);this._editor=null;const addButton=UI.createTextButton(Common.UIString('Add connection'),this._addNetworkTargetButtonClicked.bind(this),'add-network-target-button',true);this.element.appendChild(addButton);this._networkDiscoveryConfig=[];this.element.classList.add('node-frontend');}
_update(){const config=this._networkDiscoveryConfig.map(item=>item.address);this._callback.call(null,config);}
_addNetworkTargetButtonClicked(){this._list.addNewItem(this._networkDiscoveryConfig.length,{address:'',port:''});}
discoveryConfigChanged(networkDiscoveryConfig){this._networkDiscoveryConfig=[];this._list.clear();for(const address of networkDiscoveryConfig){const item={address:address,port:''};this._networkDiscoveryConfig.push(item);this._list.appendItem(item,true);}}
renderItem(rule,editable){const element=createElementWithClass('div','network-discovery-list-item');element.createChild('div','network-discovery-value network-discovery-address').textContent=rule.address;return element;}
removeItemRequested(rule,index){this._networkDiscoveryConfig.splice(index,1);this._list.removeItem(index);this._update();}
commitEdit(rule,editor,isNew){rule.address=editor.control('address').value.trim();if(isNew){this._networkDiscoveryConfig.push(rule);}
this._update();}
beginEdit(rule){const editor=this._createEditor();editor.control('address').value=rule.address;return editor;}
_createEditor(){if(this._editor){return this._editor;}
const editor=new UI.ListWidget.Editor();this._editor=editor;const content=editor.contentElement();const fields=content.createChild('div','network-discovery-edit-row');const input=editor.createInput('address','text',ls`Network address (e.g. localhost:9229)`,addressValidator);fields.createChild('div','network-discovery-value network-discovery-address').appendChild(input);return editor;function addressValidator(rule,index,input){const match=input.value.trim().match(/^([a-zA-Z0-9\.\-_]+):(\d+)$/);if(!match){return{valid:false};}
const port=parseInt(match[2],10);return{valid:port<=65535};}}};;NodeMain.NodeMain=class extends Common.Object{run(){Host.userMetrics.actionTaken(Host.UserMetrics.Action.ConnectToNodeJSFromFrontend);SDK.initMainConnection(()=>{const target=SDK.targetManager.createTarget('main',Common.UIString('Main'),SDK.Target.Type.Browser,null);target.setInspectedURL('Node.js');},Components.TargetDetachedDialog.webSocketConnectionLost);}};NodeMain.NodeChildTargetManager=class extends SDK.SDKModel{constructor(parentTarget){super(parentTarget);this._targetManager=parentTarget.targetManager();this._parentTarget=parentTarget;this._targetAgent=parentTarget.targetAgent();this._childTargets=new Map();this._childConnections=new Map();parentTarget.registerTargetDispatcher(this);this._targetAgent.setDiscoverTargets(true);Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this._devicesDiscoveryConfigChanged,this);Host.InspectorFrontendHost.setDevicesUpdatesEnabled(false);Host.InspectorFrontendHost.setDevicesUpdatesEnabled(true);}
_devicesDiscoveryConfigChanged(event){const config=(event.data);const locations=[];for(const address of config.networkDiscoveryConfig){const parts=address.split(':');const port=parseInt(parts[1],10);if(parts[0]&&port){locations.push({host:parts[0],port:port});}}
this._targetAgent.setRemoteLocations(locations);}
dispose(){Host.InspectorFrontendHost.events.removeEventListener(Host.InspectorFrontendHostAPI.Events.DevicesDiscoveryConfigChanged,this._devicesDiscoveryConfigChanged,this);for(const sessionId of this._childTargets.keys()){this.detachedFromTarget(sessionId,undefined);}}
targetCreated(targetInfo){if(targetInfo.type==='node'&&!targetInfo.attached){this._targetAgent.attachToTarget(targetInfo.targetId,false);}}
targetInfoChanged(targetInfo){}
targetDestroyed(targetId){}
attachedToTarget(sessionId,targetInfo,waitingForDebugger){const name=ls`Node.js: ${targetInfo.url}`;const connection=new NodeMain.NodeConnection(this._targetAgent,sessionId);this._childConnections.set(sessionId,connection);const target=this._targetManager.createTarget(targetInfo.targetId,name,SDK.Target.Type.Node,this._parentTarget,undefined,undefined,connection);this._childTargets.set(sessionId,target);target.runtimeAgent().runIfWaitingForDebugger();}
detachedFromTarget(sessionId,childTargetId){this._childTargets.get(sessionId).dispose('target terminated');this._childTargets.delete(sessionId);this._childConnections.delete(sessionId);}
receivedMessageFromTarget(sessionId,message,childTargetId){const connection=this._childConnections.get(sessionId);const onMessage=connection?connection._onMessage:null;if(onMessage){onMessage.call(null,message);}}};NodeMain.NodeConnection=class{constructor(targetAgent,sessionId){this._targetAgent=targetAgent;this._sessionId=sessionId;this._onMessage=null;this._onDisconnect=null;}
setOnMessage(onMessage){this._onMessage=onMessage;}
setOnDisconnect(onDisconnect){this._onDisconnect=onDisconnect;}
sendRawMessage(message){this._targetAgent.sendMessageToTarget(message,this._sessionId);}
disconnect(){if(this._onDisconnect){this._onDisconnect.call(null,'force disconnect');}
this._onDisconnect=null;this._onMessage=null;return this._targetAgent.detachFromTarget(this._sessionId);}};SDK.SDKModel.register(NodeMain.NodeChildTargetManager,SDK.Target.Capability.Target,true);;;Root.Runtime.cachedResources["node_main/nodeConnectionsPanel.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.add-network-target-button {\n    margin: 10px 25px;\n    align-self: flex-start;\n}\n\n.network-discovery-list {\n    margin: 10px 0 0 25px;\n    max-width: 500px;\n    flex: none;\n}\n\n.network-discovery-list-empty {\n    flex: auto;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.network-discovery-list-item {\n    padding: 3px 5px 3px 5px;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    position: relative;\n    flex: auto 1 1;\n}\n\n.list-item .network-discovery-value {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    -webkit-user-select: none;\n    color: #222;\n    overflow: hidden;\n}\n\n.network-discovery-value {\n    flex: 3 1 0;\n}\n\n.network-discovery-edit-row {\n    flex: none;\n    display: flex;\n    flex-direction: row;\n    margin: 6px 5px;\n    align-items: center;\n}\n\n.network-discovery-edit-row input {\n    width: 100%;\n    text-align: inherit;\n}\n\n.network-discovery-footer {\n    overflow: hidden;\n    margin: 15px 0 0 25px;\n    max-width: 500px;\n}\n\n.network-discovery-footer > * {\n    white-space: pre-wrap;\n}\n\n.node-panel {\n    align-items: center;\n    justify-content: flex-start;\n}\n\n.network-discovery-view {\n    min-width: 400px;\n    flex: auto;\n}\n\n.add-network-target-button {\n    align-self: center;\n}\n\n:host-context(.node-frontend) .network-discovery-list-empty {\n    height: 40px;\n}\n\n:host-context(.node-frontend) .network-discovery-list-item {\n    padding: 3px 15px;\n    height: 40px;\n}\n\n.network-discovery-list {\n    margin: 20px 0 5px 0;\n    max-width: 600px;\n    max-height: 202px;\n}\n\n.network-discovery-footer {\n    margin: 0;\n}\n\n.node-panel-center {\n    display: flex;\n    align-items: stretch;\n    justify-content: center;\n    max-width: 600px;\n    flex-direction: column;\n    padding-top: 50px;\n}\n\n.node-panel-logo {\n    align-self: center;\n    width: 400px;\n    margin-bottom: 50px;\n    flex: none;\n}\n\n:host-context(.node-frontend) .network-discovery-edit-row input {\n    height: 30px;\n    padding-left: 5px;\n}\n\n:host-context(.node-frontend) .network-discovery-edit-row {\n    margin: 6px 9px;\n}\n\n/*# sourceURL=node_main/nodeConnectionsPanel.css */";const _loadedScripts={};(function(){const baseUrl=self.location?self.location.origin+self.location.pathname:'';self._importScriptPathPrefix=baseUrl.substring(0,baseUrl.lastIndexOf('/')+1);})();const REMOTE_MODULE_FALLBACK_REVISION='@010ddcfda246975d194964ccf20038ebbdec6084';class Runtime{constructor(descriptors){this._modules=[];this._modulesMap={};this._extensions=[];this._cachedTypeClasses={};this._descriptorsMap={};for(let i=0;i<descriptors.length;++i){this._registerModule(descriptors[i]);}}
static _loadResourcePromise(url,asBinary){return new Promise(load);function load(fulfill,reject){const xhr=new XMLHttpRequest();xhr.open('GET',url,true);if(asBinary){xhr.responseType='arraybuffer';}
xhr.onreadystatechange=onreadystatechange;function onreadystatechange(e){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
const{response}=e.target;const text=asBinary?new TextDecoder().decode(response):response;const status=/^HTTP\/1.1 404/.test(text)?404:xhr.status;if([0,200,304].indexOf(status)===-1)
{reject(new Error('While loading from url '+url+' server responded with a status of '+status));}else{fulfill(response);}}
xhr.send(null);}}
static loadResourcePromise(url){return Runtime._loadResourcePromise(url,false);}
static loadBinaryResourcePromise(url){return Runtime._loadResourcePromise(url,true);}
static loadResourcePromiseWithFallback(url){return Runtime.loadResourcePromise(url).catch(err=>{const urlWithFallbackVersion=url.replace(/@[0-9a-f]{40}/,REMOTE_MODULE_FALLBACK_REVISION);if(urlWithFallbackVersion===url||!url.includes('audits_worker_module')){throw err;}
return Runtime.loadResourcePromise(urlWithFallbackVersion);});}
static normalizePath(path){if(path.indexOf('..')===-1&&path.indexOf('.')===-1){return path;}
const normalizedSegments=[];const segments=path.split('/');for(let i=0;i<segments.length;i++){const segment=segments[i];if(segment==='.'){continue;}else if(segment==='..'){normalizedSegments.pop();}else if(segment){normalizedSegments.push(segment);}}
let normalizedPath=normalizedSegments.join('/');if(normalizedPath[normalizedPath.length-1]==='/'){return normalizedPath;}
if(path[0]==='/'&&normalizedPath){normalizedPath='/'+normalizedPath;}
if((path[path.length-1]==='/')||(segments[segments.length-1]==='.')||(segments[segments.length-1]==='..')){normalizedPath=normalizedPath+'/';}
return normalizedPath;}
static getResourceURL(scriptName,base){const sourceURL=(base||self._importScriptPathPrefix)+scriptName;const schemaIndex=sourceURL.indexOf('://')+3;let pathIndex=sourceURL.indexOf('/',schemaIndex);if(pathIndex===-1){pathIndex=sourceURL.length;}
return sourceURL.substring(0,pathIndex)+Runtime.normalizePath(sourceURL.substring(pathIndex));}
static _loadScriptsPromise(scriptNames,base){const promises=[];const urls=[];const sources=new Array(scriptNames.length);let scriptToEval=0;for(let i=0;i<scriptNames.length;++i){const scriptName=scriptNames[i];const sourceURL=Runtime.getResourceURL(scriptName,base);if(_loadedScripts[sourceURL]){continue;}
urls.push(sourceURL);const loadResourcePromise=base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);promises.push(loadResourcePromise.then(scriptSourceLoaded.bind(null,i),scriptSourceLoaded.bind(null,i,undefined)));}
return Promise.all(promises).then(undefined);function scriptSourceLoaded(scriptNumber,scriptSource){sources[scriptNumber]=scriptSource||'';while(typeof sources[scriptToEval]!=='undefined'){evaluateScript(urls[scriptToEval],sources[scriptToEval]);++scriptToEval;}}
function evaluateScript(sourceURL,scriptSource){_loadedScripts[sourceURL]=true;if(!scriptSource){console.error('Empty response arrived for script \''+sourceURL+'\'');return;}
self.eval(scriptSource+'\n//# sourceURL='+sourceURL);}}
static _loadResourceIntoCache(url,appendSourceURL){return Runtime.loadResourcePromise(url).then(cacheResource.bind(this,url),cacheResource.bind(this,url,undefined));function cacheResource(path,content){if(!content){console.error('Failed to load resource: '+path);return;}
const sourceURL=appendSourceURL?Runtime.resolveSourceURL(path):'';Runtime.cachedResources[path]=content+sourceURL;}}
static async appStarted(){return Runtime._appStartedPromise;}
static async startApplication(appName){console.timeStamp('Root.Runtime.startApplication');const allDescriptorsByName={};for(let i=0;i<Root.allDescriptors.length;++i){const d=Root.allDescriptors[i];allDescriptorsByName[d['name']]=d;}
if(!Root.applicationDescriptor){let data=await Runtime.loadResourcePromise(appName+'.json');Root.applicationDescriptor=JSON.parse(data);let descriptor=Root.applicationDescriptor;while(descriptor.extends){data=await Runtime.loadResourcePromise(descriptor.extends+'.json');descriptor=JSON.parse(data);Root.applicationDescriptor.modules=descriptor.modules.concat(Root.applicationDescriptor.modules);}}
const configuration=Root.applicationDescriptor.modules;const moduleJSONPromises=[];const coreModuleNames=[];for(let i=0;i<configuration.length;++i){const descriptor=configuration[i];const name=descriptor['name'];const moduleJSON=allDescriptorsByName[name];if(moduleJSON){moduleJSONPromises.push(Promise.resolve(moduleJSON));}else{moduleJSONPromises.push(Runtime.loadResourcePromise(name+'/module.json').then(JSON.parse.bind(JSON)));}
if(descriptor['type']==='autostart'){coreModuleNames.push(name);}}
const moduleDescriptors=await Promise.all(moduleJSONPromises);for(let i=0;i<moduleDescriptors.length;++i){moduleDescriptors[i].name=configuration[i]['name'];moduleDescriptors[i].condition=configuration[i]['condition'];moduleDescriptors[i].remote=configuration[i]['type']==='remote';}
self.runtime=new Runtime(moduleDescriptors);if(coreModuleNames){await self.runtime._loadAutoStartModules(coreModuleNames);}
Runtime._appStartedPromiseCallback();}
static startWorker(appName){return Root.Runtime.startApplication(appName).then(sendWorkerReady);function sendWorkerReady(){self.postMessage('workerReady');}}
static queryParam(name){return Runtime._queryParamsObject.get(name);}
static queryParamsString(){return location.search;}
static _experimentsSetting(){try{return(JSON.parse(self.localStorage&&self.localStorage['experiments']?self.localStorage['experiments']:'{}'));}catch(e){console.error('Failed to parse localStorage[\'experiments\']');return{};}}
static _assert(value,message){if(value){return;}
Runtime._originalAssert.call(Runtime._console,value,message+' '+new Error().stack);}
static setPlatform(platform){Runtime._platform=platform;}
static _isDescriptorEnabled(descriptor){const activatorExperiment=descriptor['experiment'];if(activatorExperiment==='*'){return Runtime.experiments.supportEnabled();}
if(activatorExperiment&&activatorExperiment.startsWith('!')&&Runtime.experiments.isEnabled(activatorExperiment.substring(1))){return false;}
if(activatorExperiment&&!activatorExperiment.startsWith('!')&&!Runtime.experiments.isEnabled(activatorExperiment)){return false;}
const condition=descriptor['condition'];if(condition&&!condition.startsWith('!')&&!Runtime.queryParam(condition)){return false;}
if(condition&&condition.startsWith('!')&&Runtime.queryParam(condition.substring(1))){return false;}
return true;}
static resolveSourceURL(path){let sourceURL=self.location.href;if(self.location.search){sourceURL=sourceURL.replace(self.location.search,'');}
sourceURL=sourceURL.substring(0,sourceURL.lastIndexOf('/')+1)+path;return'\n/*# sourceURL='+sourceURL+' */';}
static setL10nCallback(localizationFunction){Runtime._l10nCallback=localizationFunction;}
useTestBase(){Runtime._remoteBase='http://localhost:8000/inspector-sources/';if(Runtime.queryParam('debugFrontend')){Runtime._remoteBase+='debug/';}}
module(moduleName){return this._modulesMap[moduleName];}
_registerModule(descriptor){const module=new Runtime.Module(this,descriptor);this._modules.push(module);this._modulesMap[descriptor['name']]=module;}
loadModulePromise(moduleName){return this._modulesMap[moduleName]._loadPromise();}
_loadAutoStartModules(moduleNames){const promises=[];for(let i=0;i<moduleNames.length;++i){promises.push(this.loadModulePromise(moduleNames[i]));}
return Promise.all(promises);}
_checkExtensionApplicability(extension,predicate){if(!predicate){return false;}
const contextTypes=extension.descriptor().contextTypes;if(!contextTypes){return true;}
for(let i=0;i<contextTypes.length;++i){const contextType=this._resolve(contextTypes[i]);const isMatching=!!contextType&&predicate(contextType);if(isMatching){return true;}}
return false;}
isExtensionApplicableToContext(extension,context){if(!context){return true;}
return this._checkExtensionApplicability(extension,isInstanceOf);function isInstanceOf(targetType){return context instanceof targetType;}}
isExtensionApplicableToContextTypes(extension,currentContextTypes){if(!extension.descriptor().contextTypes){return true;}
return this._checkExtensionApplicability(extension,currentContextTypes?isContextTypeKnown:null);function isContextTypeKnown(targetType){return currentContextTypes.has(targetType);}}
extensions(type,context,sortByTitle){return this._extensions.filter(filter).sort(sortByTitle?titleComparator:orderComparator);function filter(extension){if(extension._type!==type&&extension._typeClass()!==type){return false;}
if(!extension.enabled()){return false;}
return!context||extension.isApplicable(context);}
function orderComparator(extension1,extension2){const order1=extension1.descriptor()['order']||0;const order2=extension2.descriptor()['order']||0;return order1-order2;}
function titleComparator(extension1,extension2){const title1=extension1.title()||'';const title2=extension2.title()||'';return title1.localeCompare(title2);}}
extension(type,context){return this.extensions(type,context)[0]||null;}
allInstances(type,context){return Promise.all(this.extensions(type,context).map(extension=>extension.instance()));}
_resolve(typeName){if(!this._cachedTypeClasses[typeName]){const path=typeName.split('.');let object=self;for(let i=0;object&&(i<path.length);++i){object=object[path[i]];}
if(object){this._cachedTypeClasses[typeName]=(object);}}
return this._cachedTypeClasses[typeName]||null;}
sharedInstance(constructorFunction){if(Runtime._instanceSymbol in constructorFunction&&Object.getOwnPropertySymbols(constructorFunction).includes(Runtime._instanceSymbol)){return constructorFunction[Runtime._instanceSymbol];}
const instance=new constructorFunction();constructorFunction[Runtime._instanceSymbol]=instance;return instance;}}
Runtime._queryParamsObject=new URLSearchParams(Runtime.queryParamsString());Runtime._instanceSymbol=Symbol('instance');Runtime.cachedResources={__proto__:null};Runtime._console=console;Runtime._originalAssert=console.assert;Runtime._platform='';class ModuleDescriptor{constructor(){this.name;this.extensions;this.dependencies;this.scripts;this.modules;this.condition;this.remote;}}
class RuntimeExtensionDescriptor{constructor(){this.type;this.className;this.factoryName;this.contextTypes;}}
const specialCases={'sdk':'SDK','js_sdk':'JSSDK','browser_sdk':'BrowserSDK','ui':'UI','object_ui':'ObjectUI','javascript_metadata':'JavaScriptMetadata','perf_ui':'PerfUI','har_importer':'HARImporter','sdk_test_runner':'SDKTestRunner','cpu_profiler_test_runner':'CPUProfilerTestRunner'};class Module{constructor(manager,descriptor){this._manager=manager;this._descriptor=descriptor;this._name=descriptor.name;this._extensions=[];this._extensionsByClassName=new Map();const extensions=(descriptor.extensions);for(let i=0;extensions&&i<extensions.length;++i){const extension=new Extension(this,extensions[i]);this._manager._extensions.push(extension);this._extensions.push(extension);}
this._loadedForTest=false;}
name(){return this._name;}
enabled(){return Runtime._isDescriptorEnabled(this._descriptor);}
resource(name){const fullName=this._name+'/'+name;const content=Runtime.cachedResources[fullName];if(!content){throw new Error(fullName+' not preloaded. Check module.json');}
return content;}
_loadPromise(){if(!this.enabled()){return Promise.reject(new Error('Module '+this._name+' is not enabled'));}
if(this._pendingLoadPromise){return this._pendingLoadPromise;}
const dependencies=this._descriptor.dependencies;const dependencyPromises=[];for(let i=0;dependencies&&i<dependencies.length;++i){dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());}
this._pendingLoadPromise=Promise.all(dependencyPromises).then(this._loadResources.bind(this)).then(this._loadModules.bind(this)).then(this._loadScripts.bind(this)).then(()=>this._loadedForTest=true);return this._pendingLoadPromise;}
_loadResources(){const resources=this._descriptor['resources'];if(!resources||!resources.length){return Promise.resolve();}
const promises=[];for(let i=0;i<resources.length;++i){const url=this._modularizeURL(resources[i]);const isHtml=url.endsWith('.html');promises.push(Runtime._loadResourceIntoCache(url,!isHtml));}
return Promise.all(promises).then(undefined);}
_loadModules(){if(!this._descriptor.modules||!this._descriptor.modules.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};if(typeof WorkerGlobalScope!=='undefined'&&self instanceof WorkerGlobalScope){return Promise.resolve();}
return eval(`import('./${this._name}/${this._name}.js')`);}
_loadScripts(){if(!this._descriptor.scripts||!this._descriptor.scripts.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};return Runtime._loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL,this),this._remoteBase());}
_computeNamespace(){return specialCases[this._name]||this._name.split('_').map(a=>a.substring(0,1).toUpperCase()+a.substring(1)).join('');}
_modularizeURL(resourceName){return Runtime.normalizePath(this._name+'/'+resourceName);}
_remoteBase(){return!Runtime.queryParam('debugFrontend')&&this._descriptor.remote&&Runtime._remoteBase||undefined;}
fetchResource(resourceName){const base=this._remoteBase();const sourceURL=Runtime.getResourceURL(this._modularizeURL(resourceName),base);return base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);}
substituteURL(value){const base=this._remoteBase()||'';return value.replace(/@url\(([^\)]*?)\)/g,convertURL.bind(this));function convertURL(match,url){return base+this._modularizeURL(url);}}}
class Extension{constructor(module,descriptor){this._module=module;this._descriptor=descriptor;this._type=descriptor.type;this._hasTypeClass=this._type.charAt(0)==='@';this._className=descriptor.className||null;this._factoryName=descriptor.factoryName||null;}
descriptor(){return this._descriptor;}
module(){return this._module;}
enabled(){return this._module.enabled()&&Runtime._isDescriptorEnabled(this.descriptor());}
_typeClass(){if(!this._hasTypeClass){return null;}
return this._module._manager._resolve(this._type.substring(1));}
isApplicable(context){return this._module._manager.isExtensionApplicableToContext(this,context);}
instance(){return this._module._loadPromise().then(this._createInstance.bind(this));}
canInstantiate(){return!!(this._className||this._factoryName);}
_createInstance(){const className=this._className||this._factoryName;if(!className){throw new Error('Could not instantiate extension with no class');}
const constructorFunction=self.eval((className));if(!(constructorFunction instanceof Function)){throw new Error('Could not instantiate: '+className);}
if(this._className){return this._module._manager.sharedInstance(constructorFunction);}
return new constructorFunction(this);}
title(){const title=this._descriptor['title-'+Runtime._platform]||this._descriptor['title'];if(title&&Runtime._l10nCallback){return Runtime._l10nCallback(title);}
return title;}
hasContextType(contextType){const contextTypes=this.descriptor().contextTypes;if(!contextTypes){return false;}
for(let i=0;i<contextTypes.length;++i){if(contextType===this._module._manager._resolve(contextTypes[i])){return true;}}
return false;}}
class ExperimentsSupport{constructor(){this._supportEnabled=Runtime.queryParam('experiments')!==null;this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled=new Set();}
allConfigurableExperiments(){const result=[];for(let i=0;i<this._experiments.length;i++){const experiment=this._experiments[i];if(!this._enabledTransiently[experiment.name]){result.push(experiment);}}
return result;}
supportEnabled(){return this._supportEnabled;}
_setExperimentsSetting(value){if(!self.localStorage){return;}
self.localStorage['experiments']=JSON.stringify(value);}
register(experimentName,experimentTitle,hidden){Runtime._assert(!this._experimentNames[experimentName],'Duplicate registration of experiment '+experimentName);this._experimentNames[experimentName]=true;this._experiments.push(new Runtime.Experiment(this,experimentName,experimentTitle,!!hidden));}
isEnabled(experimentName){this._checkExperiment(experimentName);if(Runtime._experimentsSetting()[experimentName]===false){return false;}
if(this._enabledTransiently[experimentName]){return true;}
if(this._serverEnabled.has(experimentName)){return true;}
if(!this.supportEnabled()){return false;}
return!!Runtime._experimentsSetting()[experimentName];}
setEnabled(experimentName,enabled){this._checkExperiment(experimentName);const experimentsSetting=Runtime._experimentsSetting();experimentsSetting[experimentName]=enabled;this._setExperimentsSetting(experimentsSetting);}
setDefaultExperiments(experimentNames){for(let i=0;i<experimentNames.length;++i){this._checkExperiment(experimentNames[i]);this._enabledTransiently[experimentNames[i]]=true;}}
setServerEnabledExperiments(experimentNames){for(const experiment of experimentNames){this._checkExperiment(experiment);this._serverEnabled.add(experiment);}}
enableForTest(experimentName){this._checkExperiment(experimentName);this._enabledTransiently[experimentName]=true;}
clearForTest(){this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled.clear();}
cleanUpStaleExperiments(){const experimentsSetting=Runtime._experimentsSetting();const cleanedUpExperimentSetting={};for(let i=0;i<this._experiments.length;++i){const experimentName=this._experiments[i].name;if(experimentsSetting[experimentName]){cleanedUpExperimentSetting[experimentName]=true;}}
this._setExperimentsSetting(cleanedUpExperimentSetting);}
_checkExperiment(experimentName){Runtime._assert(this._experimentNames[experimentName],'Unknown experiment '+experimentName);}}
class Experiment{constructor(experiments,name,title,hidden){this.name=name;this.title=title;this.hidden=hidden;this._experiments=experiments;}
isEnabled(){return this._experiments.isEnabled(this.name);}
setEnabled(enabled){this._experiments.setEnabled(this.name,enabled);}}
Runtime.experiments=new ExperimentsSupport();Runtime._appStartedPromiseCallback;Runtime._appStartedPromise=new Promise(fulfil=>Runtime._appStartedPromiseCallback=fulfil);Runtime._l10nCallback;Runtime._remoteBase;(function validateRemoteBase(){if(location.href.startsWith('devtools://devtools/bundled/')&&Runtime.queryParam('remoteBase')){const versionMatch=/\/serve_file\/(@[0-9a-zA-Z]+)\/?$/.exec(Runtime.queryParam('remoteBase'));if(versionMatch){Runtime._remoteBase=`${location.origin}/remote/serve_file/${versionMatch[1]}/`;}}})();self.Root=self.Root||{};Root=Root||{};Root.allDescriptors=[];Root.applicationDescriptor=undefined;Root.Runtime=Runtime;Root.runtime;Root.Runtime.ModuleDescriptor=ModuleDescriptor;Root.Runtime.ExtensionDescriptor=RuntimeExtensionDescriptor;Root.Runtime.Extension=Extension;Root.Runtime.Module=Module;Root.Runtime.ExperimentsSupport=ExperimentsSupport;Root.Runtime.Experiment=Experiment;Root.allDescriptors.push(...[{"dependencies":["ui","platform","common","cm","cm_web_modes"],"extensions":[{"className":"TextEditor.CodeMirrorUtils.TokenizerFactory","type":"@TextUtils.TokenizerFactory"},{"className":"TextEditor.CodeMirrorTextEditorFactory","type":"@UI.TextEditorFactory"}],"name":"text_editor","scripts":["text_editor_module.js"],"modules":["text_editor.js","CodeMirrorUtils.js","TextEditorAutocompleteController.js","CodeMirrorTextEditor.js"]},{"skip_compilation":["../InspectorBackendCommands.js"],"dependencies":["common","host"],"modules":["protocol.js","NodeURL.js","InspectorBackend.js","../InspectorBackendCommands.js"],"name":"protocol","scripts":[]},{"skip_compilation":["codemirror.js","multiplex.js","matchbrackets.js","closebrackets.js","mark-selection.js","comment.js","overlay.js","active-line.js","foldcode.js","foldgutter.js","brace-fold.js"],"modules":["cm.js","codemirror.js","multiplex.js","matchbrackets.js","closebrackets.js","mark-selection.js","comment.js","overlay.js","active-line.js","foldcode.js","foldgutter.js","brace-fold.js"],"name":"cm","scripts":["cm_module.js"]},{"extensions":[{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["text/x-csrc","text/x-c","text/x-chdr","text/x-c++src","text/x-c++hdr","text/x-java","text/x-csharp","text/x-scala","x-shader/x-vertex","x-shader/x-fragment"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"clike.js"},{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["text/x-coffeescript"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"coffeescript.js"},{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["text/markdown","text/x-markdown"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"markdown.js"},{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["application/x-httpd-php","application/x-httpd-php-open","text/x-php"],"dependencies":["clike.js"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"php.js"},{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["text/x-python","text/x-cython"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"python.js"},{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["text/x-sh"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"shell.js"},{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["text/x-livescript"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"livescript.js"},{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["text/x-clojure"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"clojure.js"},{"className":"CmModes.DefaultCodeMirrorMimeMode","mimeTypes":["text/jsx","text/typescript-jsx"],"type":"@TextEditor.CodeMirrorMimeMode","fileName":"jsx.js"}],"dependencies":["text_editor"],"modules":["cm_modes.js","DefaultCodeMirrorMimeMode.js","clike.js","coffeescript.js","php.js","python.js","shell.js","livescript.js","markdown.js","clojure.js","jsx.js"],"name":"cm_modes","skip_compilation":["clike.js","coffeescript.js","php.js","python.js","shell.js","livescript.js","markdown.js","clojure.js","jsx.js"]},{"name":"sources","modules":[],"dependencies":["components","search","source_frame","snippets","extensions","persistence","quick_open","inline_editor","color_picker","event_listeners","object_ui","formatter"],"extensions":[{"title":"Sources","id":"sources","className":"Sources.SourcesPanel","location":"panel","type":"view","order":30},{"className":"Sources.SourcesPanel","contextTypes":["Workspace.UISourceCode","Workspace.UILocation","SDK.RemoteObject","SDK.NetworkRequest","Sources.UISourceCodeFrame"],"type":"@UI.ContextMenu.Provider"},{"category":"Debugger","iconClass":"largeicon-pause","toggledIconClass":"largeicon-resume","className":"Sources.SourcesPanel.RevealingActionDelegate","contextTypes":["Sources.SourcesView","UI.ShortcutRegistry.ForwardedShortcut"],"actionId":"debugger.toggle-pause","toggleable":true,"bindings":[{"platform":"windows,linux","shortcut":"F8 Ctrl+\\"},{"platform":"mac","shortcut":"F8 Meta+\\"}],"type":"action","options":[{"value":true,"title":"Pause script execution"},{"value":false,"title":"Resume script execution"}]},{"category":"Debugger","iconClass":"largeicon-step-over","title":"Step over next function call","className":"Sources.SourcesPanel.DebuggingActionDelegate","contextTypes":["SDK.DebuggerPausedDetails"],"actionId":"debugger.step-over","bindings":[{"platform":"windows,linux","shortcut":"F10 Ctrl+'"},{"platform":"mac","shortcut":"F10 Meta+'"}],"type":"action"},{"category":"Debugger","iconClass":"largeicon-step-into","title":"Step into next function call","className":"Sources.SourcesPanel.DebuggingActionDelegate","contextTypes":["SDK.DebuggerPausedDetails"],"actionId":"debugger.step-into","bindings":[{"platform":"windows,linux","shortcut":"F11 Ctrl+;"},{"platform":"mac","shortcut":"F11 Meta+;"}],"type":"action"},{"category":"Debugger","iconClass":"largeicon-step","title":"Step","className":"Sources.SourcesPanel.DebuggingActionDelegate","contextTypes":["SDK.DebuggerPausedDetails"],"actionId":"debugger.step","bindings":[{"shortcut":"F9"}],"type":"action"},{"category":"Debugger","iconClass":"largeicon-step-out","title":"Step out of current function","className":"Sources.SourcesPanel.DebuggingActionDelegate","contextTypes":["SDK.DebuggerPausedDetails"],"actionId":"debugger.step-out","bindings":[{"platform":"windows,linux","shortcut":"Shift+F11 Shift+Ctrl+;"},{"platform":"mac","shortcut":"Shift+F11 Shift+Meta+;"}],"type":"action"},{"iconClass":"largeicon-play","title":"Run snippet","className":"Sources.SourcesPanel.DebuggingActionDelegate","contextTypes":["Sources.SourcesView"],"actionId":"debugger.run-snippet","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Enter"},{"platform":"mac","shortcut":"Meta+Enter"}],"type":"action"},{"category":"Debugger","iconClass":"largeicon-deactivate-breakpoints","toggledIconClass":"largeicon-activate-breakpoints","className":"Sources.SourcesPanel.DebuggingActionDelegate","contextTypes":["Sources.SourcesView"],"actionId":"debugger.toggle-breakpoints-active","toggleable":true,"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+F8"},{"platform":"mac","shortcut":"Meta+F8"}],"type":"action","options":[{"value":true,"title":"Deactivate breakpoints"},{"value":false,"title":"Activate breakpoints"}]},{"title":"Add selected text to watches","className":"Sources.WatchExpressionsSidebarPane","contextTypes":["Sources.UISourceCodeFrame"],"actionId":"sources.add-to-watch","bindings":[{"shortcut":"Ctrl+Shift+A"}],"type":"action"},{"className":"Sources.WatchExpressionsSidebarPane","contextTypes":["ObjectUI.ObjectPropertyTreeElement"],"type":"@UI.ContextMenu.Provider","actionId":"sources.add-to-watch","title":"Add to watch"},{"className":"Sources.WatchExpressionsSidebarPane","contextTypes":["TextEditor.CodeMirrorTextEditor"],"type":"@UI.ContextMenu.Provider"},{"className":"Sources.GutterDiffPlugin.ContextMenuProvider","contextTypes":["Workspace.UISourceCode"],"type":"@UI.ContextMenu.Provider"},{"title":"Evaluate selected text in console","className":"Sources.SourcesPanel.DebuggingActionDelegate","contextTypes":["Sources.UISourceCodeFrame"],"actionId":"debugger.evaluate-selection","bindings":[{"shortcut":"Ctrl+Shift+E"}],"type":"action"},{"className":"Sources.OpenFileQuickOpen","prefix":"","type":"@QuickOpen.FilteredListWidget.Provider","title":"Open file"},{"className":"Sources.GoToLineQuickOpen","prefix":":","type":"@QuickOpen.FilteredListWidget.Provider","title":"Go to line"},{"className":"Sources.OutlineQuickOpen","prefix":"@","type":"@QuickOpen.FilteredListWidget.Provider","title":"Go to symbol"},{"type":"context-menu-item","location":"navigatorMenu/default","actionId":"quickOpen.show"},{"className":"Sources.SourcesPanel.UILocationRevealer","contextTypes":["Workspace.UILocation"],"destination":"Sources panel","type":"@Common.Revealer"},{"className":"Sources.SourcesPanel.DebuggerLocationRevealer","contextTypes":["SDK.DebuggerModel.Location"],"destination":"Sources panel","type":"@Common.Revealer"},{"className":"Sources.SourcesPanel.UISourceCodeRevealer","contextTypes":["Workspace.UISourceCode"],"destination":"Sources panel","type":"@Common.Revealer"},{"className":"Sources.SourcesPanel.DebuggerPausedDetailsRevealer","contextTypes":["SDK.DebuggerPausedDetails"],"destination":"Sources panel","type":"@Common.Revealer"},{"className":"Sources.InplaceFormatterEditorAction","type":"@Sources.SourcesView.EditorAction"},{"className":"Sources.ScriptFormatterEditorAction","type":"@Sources.SourcesView.EditorAction"},{"title":"Filesystem","id":"navigator-files","className":"Sources.FilesNavigatorView","location":"navigator-view","type":"view","order":3,"persistence":"permanent"},{"title":"Snippets","id":"navigator-snippets","className":"Sources.SnippetsNavigatorView","location":"navigator-view","type":"view","order":6,"persistence":"permanent"},{"title":"Search","id":"sources.search-sources-tab","className":"Sources.SearchSourcesView","location":"drawer-view","type":"view","order":7,"persistence":"closeable"},{"className":"Sources.NetworkNavigatorView","viewId":"navigator-network","type":"@Sources.NavigatorView"},{"className":"Sources.FilesNavigatorView","viewId":"navigator-files","type":"@Sources.NavigatorView"},{"className":"Sources.SnippetsNavigatorView","viewId":"navigator-snippets","type":"@Sources.NavigatorView"},{"className":"Sources.SourcesView.SwitchFileActionDelegate","contextTypes":["Sources.SourcesView"],"bindings":[{"shortcut":"Alt+O"}],"type":"action","actionId":"sources.switch-file"},{"bindings":[{"platform":"windows,linux","shortcut":"F2"},{"platform":"mac","shortcut":"Enter"}],"type":"action","actionId":"sources.rename"},{"defaultValue":"true","type":"setting","settingName":"navigatorGroupByFolder","settingType":"boolean"},{"category":"Sources","title":"Search in anonymous and content scripts","defaultValue":false,"settingName":"searchInAnonymousAndContentScripts","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Search in anonymous and content scripts"},{"value":false,"title":"Do not search in anonymous and content scripts"}]},{"category":"Sources","title":"Automatically reveal files in sidebar","defaultValue":false,"settingName":"autoRevealInNavigator","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Automatically reveal files in sidebar"},{"value":false,"title":"Do not automatically reveal files in sidebar"}]},{"category":"Sources","title":"Enable JavaScript source maps","defaultValue":true,"settingName":"jsSourceMapsEnabled","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Enable JavaScript source maps"},{"value":false,"title":"Disable JavaScript source maps"}]},{"category":"Sources","title":"Enable tab moves focus","defaultValue":false,"settingName":"textEditorTabMovesFocus","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Enable tab moves focus"},{"value":false,"title":"Disable tab moves focus"}]},{"category":"Sources","title":"Detect indentation","defaultValue":true,"settingName":"textEditorAutoDetectIndent","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Detect indentation"},{"value":false,"title":"Do not detect indentation"}]},{"category":"Sources","title":"Autocompletion","defaultValue":true,"settingName":"textEditorAutocompletion","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Enable autocompletion"},{"value":false,"title":"Disable autocompletion"}]},{"category":"Sources","title":"Bracket matching","defaultValue":true,"settingName":"textEditorBracketMatching","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Enable bracket matching"},{"value":false,"title":"Disable bracket matching"}]},{"category":"Sources","title":"Code folding","defaultValue":false,"settingName":"textEditorCodeFolding","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Enable code folding"},{"value":false,"title":"Disable code folding"}]},{"category":"Sources","title":"Show whitespace characters:","defaultValue":"original","settingName":"showWhitespacesInEditor","settingType":"enum","type":"setting","options":[{"text":"None","value":"none","title":"Do not show whitespace characters"},{"text":"All","value":"all","title":"Show all whitespace characters"},{"text":"Trailing","value":"trailing","title":"Show trailing whitespace characters"}]},{"category":"Sources","title":"Display variable values inline while debugging","defaultValue":true,"settingName":"inlineVariableValues","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Display variable values inline while debugging"},{"value":false,"title":"Do not display variable values inline while debugging"}]},{"category":"Sources","title":"Enable CSS source maps","defaultValue":true,"settingName":"cssSourceMapsEnabled","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Enable CSS source maps"},{"value":false,"title":"Disable CSS source maps"}]},{"title":"Quick source","id":"sources.quick","className":"Sources.SourcesPanel.WrapperView","location":"drawer-view","type":"view","order":1000,"persistence":"closeable"},{"category":"Sources","className":"Sources.SourcesView.ActionDelegate","type":"action","actionId":"sources.close-all","title":"Close All"},{"className":"Sources.SourcesView.ActionDelegate","contextTypes":["Sources.SourcesView"],"bindings":[{"shortcut":"Alt+Minus"}],"type":"action","actionId":"sources.jump-to-previous-location"},{"className":"Sources.SourcesView.ActionDelegate","contextTypes":["Sources.SourcesView"],"bindings":[{"shortcut":"Alt+Plus"}],"type":"action","actionId":"sources.jump-to-next-location"},{"className":"Sources.SourcesView.ActionDelegate","contextTypes":["Sources.SourcesView"],"bindings":[{"shortcut":"Alt+w"}],"type":"action","actionId":"sources.close-editor-tab"},{"className":"Sources.SourcesView.ActionDelegate","contextTypes":["Sources.SourcesView"],"bindings":[{"shortcut":"Ctrl+g"}],"type":"action","actionId":"sources.go-to-line"},{"className":"Sources.SourcesView.ActionDelegate","contextTypes":["Sources.SourcesView"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+o"},{"platform":"mac","shortcut":"Meta+Shift+o"}],"type":"action","actionId":"sources.go-to-member"},{"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+b"},{"platform":"mac","shortcut":"Meta+b"}],"type":"action","actionId":"debugger.toggle-breakpoint"},{"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+b"},{"platform":"mac","shortcut":"Meta+Shift+b"}],"type":"action","actionId":"debugger.toggle-breakpoint-enabled"},{"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Alt+b"},{"platform":"mac","shortcut":"Meta+Alt+b"}],"type":"action","actionId":"debugger.breakpoint-input-window"},{"className":"Sources.SourcesView.ActionDelegate","contextTypes":["Sources.SourcesView"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+s"},{"platform":"mac","shortcut":"Meta+s"}],"type":"action","actionId":"sources.save"},{"className":"Sources.SourcesView.ActionDelegate","contextTypes":["Sources.SourcesView"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+s"},{"platform":"mac","shortcut":"Meta+Alt+s"}],"type":"action","actionId":"sources.save-all"},{"category":"Sources","className":"Sources.ActionDelegate","type":"action","actionId":"sources.create-snippet","title":"Create new snippet"},{"category":"Sources","iconClass":"largeicon-add","title":"Add folder to workspace","className":"Sources.ActionDelegate","actionId":"sources.add-folder-to-workspace","type":"action","condition":"!sources.hide_add_folder"},{"showLabel":true,"type":"@UI.ToolbarItem.Provider","actionId":"sources.add-folder-to-workspace","condition":"!sources.hide_add_folder","location":"files-navigator-toolbar"},{"category":"Sources","className":"Sources.SourcesPanel","type":"@UI.ViewLocationResolver","name":"navigator-view"},{"category":"Sources","className":"Sources.SourcesPanel","type":"@UI.ViewLocationResolver","name":"sources.sidebar-top"},{"category":"Sources","className":"Sources.SourcesPanel","type":"@UI.ViewLocationResolver","name":"sources.sidebar-bottom"},{"category":"Sources","className":"Sources.SourcesPanel","type":"@UI.ViewLocationResolver","name":"sources.sidebar-tabs"},{"title":"Threads","className":"Sources.ThreadsSidebarPane","persistence":"permanent","type":"view","id":"sources.threads","condition":"!sources.hide_thread_sidebar"},{"className":"Sources.ScopeChainSidebarPane","type":"view","id":"sources.scopeChain","persistence":"permanent","title":"Scope"},{"title":"Watch","className":"Sources.WatchExpressionsSidebarPane","hasToolbar":true,"type":"view","id":"sources.watch","persistence":"permanent"},{"className":"Sources.JavaScriptBreakpointsSidebarPane","type":"view","id":"sources.jsBreakpoints","persistence":"permanent","title":"Breakpoints"},{"className":"Sources.JavaScriptBreakpointsSidebarPane","contextTypes":["SDK.DebuggerPausedDetails"],"type":"@UI.ContextFlavorListener"},{"className":"Sources.CallStackSidebarPane","contextTypes":["SDK.DebuggerPausedDetails"],"type":"@UI.ContextFlavorListener"},{"className":"Sources.ScopeChainSidebarPane","contextTypes":["SDK.DebuggerModel.CallFrame"],"type":"@UI.ContextFlavorListener"},{"category":"Debugger","title":"Previous call frame","className":"Sources.CallStackSidebarPane.ActionDelegate","contextTypes":["SDK.DebuggerPausedDetails"],"actionId":"debugger.previous-call-frame","bindings":[{"shortcut":"Ctrl+,"}],"type":"action"},{"category":"Debugger","title":"Next call frame","className":"Sources.CallStackSidebarPane.ActionDelegate","contextTypes":["SDK.DebuggerPausedDetails"],"actionId":"debugger.next-call-frame","bindings":[{"shortcut":"Ctrl+."}],"type":"action"},{"category":"DevTools","title":"Search","className":"Sources.SearchSourcesView.ActionDelegate","actionId":"sources.search","bindings":[{"platform":"mac","shortcut":"Meta+Alt+F"},{"platform":"windows,linux","shortcut":"Ctrl+Shift+F"}],"type":"action"},{"type":"context-menu-item","location":"mainMenu/default","actionId":"sources.search"}],"scripts":["sources_module.js"]},{"extensions":[{"category":"Network","title":"Preserve log","defaultValue":false,"tags":"preserve, clear, reset","settingName":"network_log.preserve-log","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Do not preserve log on page reload / navigation"},{"value":false,"title":"Preserve log on page reload / navigation"}]}],"dependencies":["sdk"],"modules":["browser_sdk.js","LogManager.js"],"name":"browser_sdk","scripts":[]},{"dependencies":["common","platform"],"modules":["host.js","InspectorFrontendHostAPI.js","InspectorFrontendHost.js","Platform.js","ResourceLoader.js","UserMetrics.js"],"name":"host","scripts":[]},{"skip_compilation":["diff_match_patch.js"],"dependencies":["common"],"modules":["diff.js","DiffWrapper.js","diff_match_patch.js"],"name":"diff","scripts":[]},{"dependencies":["sdk","platform","services","workspace"],"modules":["bindings.js","LiveLocation.js","ResourceMapping.js","CompilerScriptMapping.js","ResourceScriptMapping.js","SASSSourceMapping.js","StylesSourceMapping.js","CSSWorkspaceBinding.js","DebuggerWorkspaceBinding.js","BreakpointManager.js","ContentProviderBasedProject.js","DefaultScriptMapping.js","FileUtils.js","BlackboxManager.js","NetworkProject.js","PresentationConsoleMessageHelper.js","ResourceUtils.js","TempFile.js"],"name":"bindings","scripts":[]},{"extensions":[{"className":"Snippets.SnippetsQuickOpen","prefix":"!","type":"@QuickOpen.FilteredListWidget.Provider","title":"Run snippet"}],"dependencies":["bindings","quick_open","persistence"],"modules":["snippets.js","ScriptSnippetFileSystem.js","SnippetsQuickOpen.js"],"name":"snippets","scripts":[]},{"dependencies":[],"modules":["heap_snapshot_model.js","HeapSnapshotModel.js"],"name":"heap_snapshot_model","scripts":[]},{"dependencies":["components","data_grid","object_ui","sdk","formatter"],"extensions":[{"title":"Console","id":"console","className":"Console.ConsolePanel","location":"panel","type":"view","order":20},{"title":"Console","id":"console-view","className":"Console.ConsolePanel.WrapperView","location":"drawer-view","type":"view","order":0,"persistence":"permanent"},{"className":"Console.ConsolePanel.ConsoleRevealer","contextTypes":["Common.Console"],"type":"@Common.Revealer"},{"className":"Console.ConsoleView.ActionDelegate","bindings":[{"shortcut":"Ctrl+`"}],"type":"action","actionId":"console.show"},{"category":"Console","iconClass":"largeicon-clear","title":"Clear console","className":"Console.ConsoleView.ActionDelegate","contextTypes":["Console.ConsoleView"],"actionId":"console.clear","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+L"},{"platform":"mac","shortcut":"Ctrl+L Meta+K"}],"type":"action"},{"category":"Console","className":"Console.ConsoleView.ActionDelegate","type":"action","actionId":"console.clear.history","title":"Clear console history"},{"category":"Console","iconClass":"largeicon-visibility","title":"Create live expression","className":"Console.ConsoleView.ActionDelegate","actionId":"console.create-pin","type":"action"},{"category":"Console","title":"Hide network messages","defaultValue":false,"settingName":"hideNetworkMessages","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Hide network messages"},{"value":false,"title":"Show network messages"}]},{"category":"Console","title":"Selected context only","storageType":"session","defaultValue":false,"settingName":"selectedContextFilterEnabled","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Only show messages from the current context (top, iframe, worker, extension)"},{"value":false,"title":"Show messages from all contexts"}]},{"category":"Console","title":"Log XMLHttpRequests","defaultValue":false,"settingName":"monitoringXHREnabled","settingType":"boolean","type":"setting"},{"category":"Console","title":"Show timestamps","defaultValue":false,"settingName":"consoleTimestampsEnabled","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show timestamps"},{"value":false,"title":"Hide timestamps"}]},{"category":"Console","title":"Autocomplete from history","defaultValue":true,"settingName":"consoleHistoryAutocomplete","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Autocomplete from history"},{"value":false,"title":"Do not autocomplete from history"}]},{"category":"Console","title":"Group similar","defaultValue":true,"settingName":"consoleGroupSimilar","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Group similar messages in console"},{"value":false,"title":"Do not group similar messages in console"}]},{"category":"Console","title":"Eager evaluation","defaultValue":true,"settingName":"consoleEagerEval","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Eagerly evaluate console prompt text"},{"value":false,"title":"Do not eagerly evaluate console prompt text"}]},{"category":"Console","title":"Evaluate triggers user activation","defaultValue":true,"settingName":"consoleUserActivationEval","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Treat evaluation as user activation"},{"value":false,"title":"Do not treat evaluation as user activation"}]}],"name":"console","scripts":["console_module.js"],"modules":["ConsoleContextSelector.js","ConsoleFilter.js","ConsolePinPane.js","ConsoleSidebar.js","ConsoleViewport.js","ConsoleViewMessage.js","ConsolePrompt.js","ConsoleView.js","ConsolePanel.js"]},{"dependencies":["platform","ui","host","components","data_grid","source_frame"],"extensions":[{"title":"Protocol monitor","id":"protocol-monitor","className":"ProtocolMonitor.ProtocolMonitor","experiment":"protocolMonitor","location":"drawer-view","type":"view","order":100,"persistence":"closeable"}],"name":"protocol_monitor","scripts":["protocol_monitor_module.js"],"modules":["protocol_monitor.js","ProtocolMonitor.js"]},{"dependencies":["workspace","diff","persistence"],"modules":["workspace_diff.js","WorkspaceDiff.js"],"name":"workspace_diff","scripts":[]},{"name":"perf_ui","modules":[],"dependencies":["ui","sdk","bindings","source_frame","text_editor"],"extensions":[{"className":"PerfUI.LiveHeapProfile","experiment":"liveHeapProfile","type":"late-initialization","setting":"memoryLiveHeapProfile"},{"className":"PerfUI.LineLevelProfile.LineDecorator","decoratorType":"performance","type":"@SourceFrame.LineDecorator"},{"className":"PerfUI.LineLevelProfile.LineDecorator","decoratorType":"memory","type":"@SourceFrame.LineDecorator"},{"category":"Performance","title":"Flamechart mouse wheel action:","defaultValue":"zoom","settingName":"flamechartMouseWheelAction","settingType":"enum","type":"setting","options":[{"text":"Scroll","value":"scroll","title":"Scroll"},{"text":"Zoom","value":"zoom","title":"Zoom"}]},{"category":"Memory","title":"Live memory allocation annotations","defaultValue":false,"experiment":"liveHeapProfile","settingName":"memoryLiveHeapProfile","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show live memory allocation annotations"},{"value":false,"title":"Hide live memory allocation annotations"}]},{"iconClass":"largeicon-trash-bin","className":"PerfUI.GCActionDelegate","type":"action","actionId":"components.collect-garbage","title":"Collect garbage"}],"scripts":["perf_ui_module.js"]},{"dependencies":[],"modules":["platform.js","utilities.js"],"name":"platform","scripts":[]},{"dependencies":["text_editor","ui","platform","persistence","formatter","object_ui","workspace_diff"],"extensions":[{"category":"Sources","title":"Default indentation:","defaultValue":"    ","settingName":"textEditorIndent","settingType":"enum","type":"setting","options":[{"text":"2 spaces","value":"  ","title":"Set indentation to 2 spaces"},{"text":"4 spaces","value":"    ","title":"Set indentation to 4 spaces"},{"text":"8 spaces","value":"        ","title":"Set indentation to 8 spaces"},{"text":"Tab character","value":"\t","title":"Set indentation to tab character"}]}],"name":"source_frame","scripts":["source_frame_module.js"],"modules":["source_frame.js","BinaryResourceViewFactory.js","SourcesTextEditor.js","FontView.js","ImageView.js","SourceFrame.js","ResourceSourceFrame.js","JSONView.js","XMLView.js","PreviewFactory.js","SourceCodeDiff.js"]},{"dependencies":["extensions","host","platform","sdk","persistence"],"extensions":[{"className":"Main.SimpleAppProvider","type":"@Common.AppProvider","order":10},{"className":"Components.Linkifier.ContentProviderContextMenuProvider","contextTypes":["Workspace.UISourceCode","SDK.Resource","SDK.NetworkRequest"],"type":"@UI.ContextMenu.Provider"},{"className":"UI.XLink.ContextMenuProvider","contextTypes":["Node"],"type":"@UI.ContextMenu.Provider"},{"className":"Components.Linkifier.LinkContextMenuProvider","contextTypes":["Node"],"type":"@UI.ContextMenu.Provider"},{"category":"Drawer","title":"Focus debuggee","className":"InspectorMain.FocusDebuggeeActionDelegate","actionId":"inspector_main.focus-debuggee","type":"action","order":100},{"category":"Drawer","title":"Toggle drawer","className":"UI.InspectorView.ActionDelegate","actionId":"main.toggle-drawer","bindings":[{"shortcut":"Esc"}],"type":"action","order":101},{"className":"UI.InspectorView.ActionDelegate","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+]"},{"platform":"mac","shortcut":"Meta+]"}],"type":"action","actionId":"main.next-tab"},{"className":"UI.InspectorView.ActionDelegate","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+["},{"platform":"mac","shortcut":"Meta+["}],"type":"action","actionId":"main.previous-tab"},{"className":"Main.ReloadActionDelegate","bindings":[{"shortcut":"Alt+R"}],"type":"action","actionId":"main.debug-reload"},{"category":"DevTools","title":"Restore last dock position","className":"Components.DockController.ToggleDockActionDelegate","actionId":"main.toggle-dock","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+D"},{"platform":"mac","shortcut":"Meta+Shift+D"}],"type":"action"},{"className":"Main.Main.ZoomActionDelegate","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Plus Ctrl+Shift+Plus Ctrl+NumpadPlus Ctrl+Shift+NumpadPlus"},{"platform":"mac","shortcut":"Meta+Plus Meta+Shift+Plus Meta+NumpadPlus Meta+Shift+NumpadPlus"}],"type":"action","actionId":"main.zoom-in"},{"className":"Main.Main.ZoomActionDelegate","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Minus Ctrl+Shift+Minus Ctrl+NumpadMinus Ctrl+Shift+NumpadMinus"},{"platform":"mac","shortcut":"Meta+Minus Meta+Shift+Minus Meta+NumpadMinus Meta+Shift+NumpadMinus"}],"type":"action","actionId":"main.zoom-out"},{"className":"Main.Main.ZoomActionDelegate","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+0 Ctrl+Numpad0"},{"platform":"mac","shortcut":"Meta+0 Meta+Numpad0"}],"type":"action","actionId":"main.zoom-reset"},{"className":"Main.Main.SearchActionDelegate","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+F"},{"platform":"mac","shortcut":"Meta+F F3"}],"type":"action","actionId":"main.search-in-panel.find"},{"className":"Main.Main.SearchActionDelegate","bindings":[{"shortcut":"Esc"}],"type":"action","actionId":"main.search-in-panel.cancel","order":10},{"className":"Main.Main.SearchActionDelegate","bindings":[{"platform":"mac","shortcut":"Meta+G"},{"platform":"windows,linux","shortcut":"Ctrl+G"},{"platform":"windows,linux","shortcut":"F3"}],"type":"action","actionId":"main.search-in-panel.find-next"},{"className":"Main.Main.SearchActionDelegate","bindings":[{"platform":"mac","shortcut":"Meta+Shift+G"},{"platform":"windows,linux","shortcut":"Ctrl+Shift+G"},{"platform":"windows,linux","shortcut":"Shift+F3"}],"type":"action","actionId":"main.search-in-panel.find-previous"},{"separator":true,"type":"@UI.ToolbarItem.Provider","location":"main-toolbar-left","order":100},{"separator":true,"type":"@UI.ToolbarItem.Provider","order":98,"location":"main-toolbar-right"},{"className":"Main.Main.MainMenuItem","type":"@UI.ToolbarItem.Provider","order":99,"location":"main-toolbar-right"},{"className":"Components.DockController.CloseButtonProvider","type":"@UI.ToolbarItem.Provider","order":100,"location":"main-toolbar-right"},{"category":"Appearance","title":"Theme:","defaultValue":"systemPreferred","tags":"dark, light","settingName":"uiTheme","settingType":"enum","type":"setting","options":[{"text":"System preference","value":"systemPreferred","title":"Switch to system preferred color theme"},{"text":"Light","value":"default","title":"Switch to light theme"},{"text":"Dark","value":"dark","title":"Switch to dark theme"}]},{"category":"Appearance","title":"Panel layout:","defaultValue":"auto","settingName":"sidebarPosition","settingType":"enum","type":"setting","options":[{"text":"horizontal","value":"bottom","title":"Use horizontal panel layout"},{"text":"vertical","value":"right","title":"Use vertical panel layout"},{"text":"auto","value":"auto","title":"Use automatic panel layout"}]},{"category":"Appearance","title":"Color format:","defaultValue":"original","settingName":"colorFormat","settingType":"enum","type":"setting","options":[{"text":"As authored","value":"original","title":"Set color format as authored"},{"raw":true,"text":"HEX: #dac0de","value":"hex","title":"Set color format to HEX"},{"raw":true,"text":"RGB: rgb(128, 255, 255)","value":"rgb","title":"Set color format to RGB"},{"raw":true,"text":"HSL: hsl(300, 80%, 90%)","value":"hsl","title":"Set color format to HSL"}]},{"category":"Appearance","title-mac":"Enable \u2318 + 1-9 shortcut to switch panels","title":"Enable Ctrl + 1-9 shortcut to switch panels","defaultValue":false,"settingName":"shortcutPanelSwitch","settingType":"boolean","type":"setting"},{"category":"Extensions","className":"Components.Linkifier.LinkHandlerSettingUI","type":"@UI.SettingUI"},{"category":"DevTools","defaultValue":"right","settingName":"currentDockState","settingType":"enum","type":"setting","options":[{"text":"Right","value":"right","title":"Dock to right"},{"text":"Bottom","value":"bottom","title":"Dock to bottom"},{"text":"Undocked","value":"undocked","title":"Undock into separate window"}]},{"category":"Drawer","className":"UI.InspectorView","type":"@UI.ViewLocationResolver","name":"drawer-view"},{"category":"Drawer sidebar","className":"UI.InspectorView","type":"@UI.ViewLocationResolver","name":"drawer-sidebar"},{"category":"Panel","className":"UI.InspectorView","type":"@UI.ViewLocationResolver","name":"panel"}],"name":"main"},{"dependencies":["bindings","workspace","components","sdk"],"extensions":[{"title":"Workspace","id":"workspace","className":"Persistence.WorkspaceSettingsTab","location":"settings-view","type":"view","order":1},{"category":"Persistence","title":"Enable Local Overrides","defaultValue":false,"tags":"interception, override, network, rewrite, request","settingName":"persistenceNetworkOverridesEnabled","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Enable override network requests"},{"value":false,"title":"Disable override network requests"}]},{"className":"Persistence.PersistenceActions.ContextMenuProvider","contextTypes":["Workspace.UISourceCode","SDK.Resource","SDK.NetworkRequest"],"type":"@UI.ContextMenu.Provider"}],"name":"persistence","modules":["persistence.js","PlatformFileSystem.js","IsolatedFileSystem.js","IsolatedFileSystemManager.js","FileSystemWorkspaceBinding.js","Automapping.js","NetworkPersistenceManager.js","PersistenceImpl.js","PersistenceActions.js","PersistenceUtils.js","EditFileSystemView.js","WorkspaceSettingsTab.js"]},{"dependencies":["ui"],"modules":["inline_editor.js","BezierEditor.js","BezierUI.js","ColorSwatch.js","CSSShadowEditor.js","SwatchPopoverHelper.js","CSSShadowModel.js"],"name":"inline_editor","scripts":["inline_editor_module.js"]},{"dependencies":["common","ui","sdk"],"extensions":[{"className":"ConsoleCounters.WarningErrorCounter","type":"@UI.ToolbarItem.Provider","order":1,"location":"main-toolbar-right"}],"name":"console_counters","modules":["console_counters.js","WarningErrorCounter.js"]},{"dependencies":["common","host","platform"],"modules":["workspace.js","FileManager.js","UISourceCode.js","WorkspaceImpl.js"],"name":"workspace","scripts":[]},{"dependencies":["ui","diff"],"extensions":[{"className":"QuickOpen.CommandMenuProvider","prefix":">","type":"@QuickOpen.FilteredListWidget.Provider","title":"Run command"},{"className":"QuickOpen.HelpQuickOpen","prefix":"?","type":"@QuickOpen.FilteredListWidget.Provider"},{"className":"QuickOpen.CommandMenu.ShowActionDelegate","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+P"},{"platform":"mac","shortcut":"Meta+Shift+P"}],"type":"action","actionId":"commandMenu.show","title":"Run command"},{"type":"context-menu-item","location":"mainMenu/default","actionId":"commandMenu.show"},{"title":"Open file","className":"QuickOpen.QuickOpen.ShowActionDelegate","actionId":"quickOpen.show","bindings":[{"platform":"mac","shortcut":"Meta+P Meta+O"},{"platform":"windows,linux","shortcut":"Ctrl+P Ctrl+O"}],"type":"action","order":100},{"type":"context-menu-item","location":"mainMenu/default","actionId":"quickOpen.show"}],"name":"quick_open","scripts":["quick_open_module.js"],"modules":["quick_open.js","FilteredListWidget.js","QuickOpen.js","CommandMenu.js","HelpQuickOpen.js"]},{"skip_compilation":["css.js","javascript.js","xml.js","htmlmixed.js","htmlembedded.js"],"dependencies":[],"modules":["cm_web_modes.js","cm_web_modes_cm.js","cm_web_modes_headless.js","css.js","javascript.js","xml.js","htmlmixed.js","htmlembedded.js"],"name":"cm_web_modes","scripts":[]},{"dependencies":["ui"],"modules":["data_grid.js","DataGrid.js","ViewportDataGrid.js","SortableDataGrid.js","ShowMoreDataGridNode.js"],"name":"data_grid","scripts":["data_grid_module.js"]},{"dependencies":["components","browser_sdk","common"],"modules":["extensions.js","ExtensionAPI.js","ExtensionTraceProvider.js","ExtensionServer.js","ExtensionPanel.js","ExtensionView.js"],"name":"extensions","scripts":[]},{"dependencies":["sdk","ui","source_frame","sources","data_grid"],"extensions":[{"title":"Coverage","order":100,"className":"Coverage.CoverageView","location":"drawer-view","type":"view","id":"coverage","persistence":"closeable"},{"className":"Coverage.CoverageView.LineDecorator","decoratorType":"coverage","type":"@SourceFrame.LineDecorator"},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Coverage.CoverageView.ActionDelegate","toggleWithRedColor":true,"actionId":"coverage.toggle-recording","toggleable":true,"category":"Performance","type":"action","options":[{"value":true,"title":"Instrument coverage"},{"value":false,"title":"Stop instrumenting coverage and show results"}]},{"iconClass":"largeicon-refresh","category":"Performance","title":"Start instrumenting coverage and reload page","className":"Coverage.CoverageView.ActionDelegate","actionId":"coverage.start-with-reload","type":"action"}],"name":"coverage","scripts":["coverage_module.js"],"modules":["CoverageModel.js","CoverageListView.js","CoverageView.js","CoverageDecorationManager.js"]},{"dependencies":["common","host"],"modules":["services.js","ServiceManager.js"],"name":"services","scripts":[]},{"dependencies":["ui","common","components","sdk","object_ui"],"modules":["event_listeners.js","EventListenersView.js","EventListenersUtils.js"],"name":"event_listeners","scripts":["event_listeners_module.js"]},{"dependencies":["platform"],"modules":["dom_extension.js","DOMExtension.js"],"name":"dom_extension","scripts":[]},{"dependencies":["common","host","platform","protocol"],"extensions":[{"defaultValue":"","type":"setting","settingName":"skipStackFramesPattern","settingType":"regex"},{"defaultValue":false,"type":"setting","settingName":"skipContentScripts","settingType":"boolean"},{"category":"Console","title":"Preserve log upon navigation","defaultValue":false,"settingName":"preserveConsoleLog","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Preserve log upon navigation"},{"value":false,"title":"Do not preserve log upon navigation"}]},{"category":"Debugger","defaultValue":false,"settingName":"pauseOnExceptionEnabled","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Pause on exceptions"},{"value":false,"title":"Do not pause on exceptions"}]},{"defaultValue":false,"type":"setting","settingName":"pauseOnCaughtException","settingType":"boolean"},{"category":"Debugger","title":"Disable JavaScript","storageType":"session","defaultValue":false,"options":[{"value":true,"title":"Disable JavaScript"},{"value":false,"title":"Enable JavaScript"}],"settingName":"javaScriptDisabled","settingType":"boolean","type":"setting","order":1},{"category":"Debugger","title":"Disable async stack traces","defaultValue":false,"options":[{"value":true,"title":"Do not capture async stack traces"},{"value":false,"title":"Capture async stack traces"}],"settingName":"disableAsyncStackTraces","settingType":"boolean","type":"setting","order":2},{"category":"Debugger","storageType":"session","defaultValue":true,"settingName":"breakpointsActive","settingType":"boolean","type":"setting"},{"category":"Elements","title":"Show rulers","defaultValue":false,"settingName":"showMetricsRulers","settingType":"boolean","type":"setting"},{"category":"Rendering","storageType":"session","defaultValue":false,"settingName":"showPaintRects","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show paint flashing rectangles"},{"value":false,"title":"Hide paint flashing rectangles"}]},{"category":"Rendering","storageType":"session","defaultValue":false,"settingName":"showLayoutShiftRegions","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show layout shift regions"},{"value":false,"title":"Hide layout shift regions"}]},{"category":"Rendering","storageType":"session","defaultValue":false,"settingName":"showAdHighlights","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Highlight ad frames"},{"value":false,"title":"Do not highlight ad frames"}]},{"category":"Rendering","storageType":"session","defaultValue":false,"settingName":"showDebugBorders","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show layer borders"},{"value":false,"title":"Hide layer borders"}]},{"category":"Rendering","storageType":"session","defaultValue":false,"settingName":"showFPSCounter","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show frames per second (FPS) meter"},{"value":false,"title":"Hide frames per second (FPS) meter"}]},{"category":"Rendering","storageType":"session","defaultValue":false,"settingName":"showScrollBottleneckRects","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show scroll performance bottlenecks"},{"value":false,"title":"Hide scroll performance bottlenecks"}]},{"category":"Rendering","storageType":"session","defaultValue":false,"settingName":"showHitTestBorders","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show hit-test borders"},{"value":false,"title":"Hide hit-test borders"}]},{"category":"Rendering","tags":"query","storageType":"session","defaultValue":"","title":"Emulate CSS media type","settingName":"emulatedCSSMedia","settingType":"enum","type":"setting","options":[{"text":"No emulation","value":"","title":"Do not emulate CSS media type"},{"text":"print","value":"print","title":"Emulate CSS print media type"},{"text":"screen","value":"screen","title":"Emulate CSS screen media type"}]},{"category":"Rendering","tags":"query","storageType":"session","defaultValue":"","title":"Emulate CSS media feature prefers-color-scheme","settingName":"emulatedCSSMediaFeaturePrefersColorScheme","settingType":"enum","type":"setting","options":[{"text":"No emulation","value":"","title":"Do not emulate CSS prefers-color-scheme"},{"text":"prefers-color-scheme: light","value":"light","title":"Emulate CSS prefers-color-scheme: light"},{"text":"prefers-color-scheme: dark","value":"dark","title":"Emulate CSS prefers-color-scheme: dark"}]},{"category":"Rendering","tags":"query","storageType":"session","defaultValue":"","title":"Emulate CSS media feature prefers-reduced-motion","settingName":"emulatedCSSMediaFeaturePrefersReducedMotion","settingType":"enum","type":"setting","options":[{"text":"No emulation","value":"","title":"Do not emulate CSS prefers-reduced-motion"},{"text":"prefers-reduced-motion: reduce","value":"reduce","title":"Emulate CSS prefers-reduced-motion: reduce"}]},{"category":"Console","title":"Enable custom formatters","defaultValue":false,"settingName":"customFormatters","settingType":"boolean","type":"setting"},{"category":"Network","title":"Enable request blocking","storageType":"session","defaultValue":false,"settingName":"requestBlockingEnabled","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Enable request blocking"},{"value":false,"title":"Disable request blocking"}]},{"category":"Network","title":"Disable cache (while DevTools is open)","defaultValue":false,"options":[{"value":true,"title":"Disable cache (while DevTools is open)"},{"value":false,"title":"Enable cache"}],"userActionCondition":"hasOtherClients","settingName":"cacheDisabled","settingType":"boolean","type":"setting","order":0}],"name":"sdk","scripts":[],"skip_compilation":["../SupportedCSSProperties.js","wasm_source_map/pkg/wasm_source_map.js"],"modules":["sdk.js","SDKModel.js","Target.js","TargetManager.js","Connections.js","CompilerSourceMappingContentProvider.js","CookieModel.js","CookieParser.js","ProfileTreeModel.js","IssuesModel.js","ServerTiming.js","CPUProfileDataModel.js","CPUProfilerModel.js","CSSMatchedStyles.js","CSSMedia.js","CSSMetadata.js","CSSModel.js","CSSProperty.js","CSSRule.js","CSSStyleDeclaration.js","CSSStyleSheetHeader.js","ChildTargetManager.js","DOMDebuggerModel.js","DOMModel.js","DebuggerModel.js","EmulationModel.js","HARLog.js","LayerTreeBase.js","LogModel.js","ServiceWorkerManager.js","TracingManager.js","TracingModel.js","OverlayModel.js","RuntimeModel.js","IsolateManager.js","ScreenCaptureModel.js","Script.js","ServiceWorkerCacheModel.js","RemoteObject.js","Resource.js","ResourceTreeModel.js","SecurityOriginManager.js","SourceMap.js","SourceMapManager.js","NetworkManager.js","NetworkLog.js","NetworkRequest.js","PaintProfiler.js","HeapProfilerModel.js","PerformanceMetricsModel.js","../SupportedCSSProperties.js","FilmStripModel.js","ConsoleModel.js","wasm_source_map/pkg/wasm_source_map.js","wasm_source_map/types.js"]},{"dependencies":["components"],"modules":["search.js","SearchView.js","SearchConfig.js","SearchResultsPane.js"],"name":"search","scripts":["search_module.js"]},{"dependencies":["common"],"modules":["formatter.js","FormatterWorkerPool.js","ScriptFormatter.js"],"name":"formatter","scripts":[]},{"dependencies":["components"],"extensions":[{"category":"Settings","title":"Settings","className":"Settings.SettingsScreen.ActionDelegate","actionId":"settings.show","bindings":[{"shortcut":"F1 Shift+?"}],"type":"action"},{"category":"Settings","className":"Settings.SettingsScreen.ActionDelegate","type":"action","actionId":"settings.documentation","title":"Documentation"},{"category":"Settings","className":"Settings.SettingsScreen.ActionDelegate","type":"action","actionId":"settings.shortcuts","title":"Shortcuts"},{"className":"Settings.SettingsScreen.Revealer","contextTypes":["Common.Setting"],"type":"@Common.Revealer"},{"type":"context-menu-item","location":"mainMenu/footer","actionId":"settings.shortcuts"},{"type":"context-menu-item","location":"mainMenuHelp/default","actionId":"settings.documentation"},{"type":"context-menu-item","location":"mainMenu/footer","actionId":"settings.show"},{"title":"Preferences","id":"preferences","className":"Settings.GenericSettingsTab","location":"settings-view","type":"view","order":0},{"title":"Experiments","id":"experiments","className":"Settings.ExperimentsSettingsTab","experiment":"*","location":"settings-view","type":"view","order":3},{"title":"Blackboxing","id":"blackbox","className":"Settings.FrameworkBlackboxSettingsTab","location":"settings-view","type":"view","order":4},{"category":"Settings","className":"Settings.SettingsScreen","type":"@UI.ViewLocationResolver","name":"settings-view"}],"name":"settings","scripts":["settings_module.js"],"modules":["settings.js","SettingsScreen.js","FrameworkBlackboxSettingsTab.js"]},{"dependencies":["ui","sdk"],"modules":["color_picker.js","ContrastInfo.js","ContrastOverlay.js","ContrastDetails.js","Spectrum.js"],"name":"color_picker","scripts":["color_picker_module.js"]},{"name":"profiler","modules":[],"dependencies":["components","perf_ui","data_grid","heap_snapshot_model","object_ui"],"extensions":[{"title":"Memory","id":"heap_profiler","className":"Profiler.HeapProfilerPanel","location":"panel","type":"view","order":60},{"title":"Live Heap Profile","order":100,"className":"Profiler.LiveHeapProfileView","experiment":"liveHeapProfile","location":"drawer-view","type":"view","id":"live_heap_profile","persistence":"closeable"},{"className":"Profiler.HeapProfilerPanel","contextTypes":["SDK.RemoteObject"],"type":"@UI.ContextMenu.Provider"},{"category":"Performance","title":"High resolution CPU profiling","defaultValue":true,"settingName":"highResolutionCpuProfiling","settingType":"boolean","type":"setting"},{"category":"Performance","title":"Show native functions in JS Profile","defaultValue":true,"settingName":"showNativeFunctionsInJSProfile","settingType":"boolean","type":"setting"},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Profiler.LiveHeapProfileView.ActionDelegate","toggleWithRedColor":true,"actionId":"live-heap-profile.toggle-recording","toggleable":true,"category":"Performance","type":"action","options":[{"value":true,"title":"Start recording heap allocations"},{"value":false,"title":"Stop recording heap allocations"}]},{"iconClass":"largeicon-refresh","category":"Performance","title":"Start recording heap allocations and reload the page","className":"Profiler.LiveHeapProfileView.ActionDelegate","actionId":"live-heap-profile.start-with-reload","type":"action"},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Profiler.HeapProfilerPanel","toggleWithRedColor":true,"actionId":"profiler.heap-toggle-recording","toggleable":true,"contextTypes":["Profiler.HeapProfilerPanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+E"},{"platform":"mac","shortcut":"Meta+E"}],"type":"action"},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Profiler.JSProfilerPanel","toggleWithRedColor":true,"actionId":"profiler.js-toggle-recording","toggleable":true,"contextTypes":["Profiler.JSProfilerPanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+E"},{"platform":"mac","shortcut":"Meta+E"}],"type":"action"}],"scripts":["profiler_module.js"]},{"dependencies":["platform","dom_extension","common","host"],"modules":["Action.js","ActionDelegate.js","ARIAUtils.js","ContextFlavorListener.js","ui.js","XElement.js","Widget.js","View.js","ViewManager.js","Treeoutline.js","InspectorView.js","ActionRegistry.js","ShortcutRegistry.js","Context.js","ContextMenu.js","GlassPane.js","Dialog.js","SyntaxHighlighter.js","DropTarget.js","EmptyWidget.js","FilterBar.js","FilterSuggestionBuilder.js","ForwardedInputEventHandler.js","Fragment.js","HistoryInput.js","Icon.js","Infobar.js","InplaceEditor.js","TextEditor.js","KeyboardShortcut.js","ListControl.js","ListModel.js","ListWidget.js","Panel.js","PopoverHelper.js","ProgressIndicator.js","ResizerWidget.js","RemoteDebuggingTerminatedScreen.js","ReportView.js","RootView.js","SearchableView.js","SegmentedButton.js","SettingsUI.js","SoftContextMenu.js","SoftDropDown.js","SplitWidget.js","TargetCrashedScreen.js","TextPrompt.js","ThrottledWidget.js","Toolbar.js","Tooltip.js","SuggestBox.js","TabbedPane.js","UIUtils.js","ZoomManager.js","ShortcutsScreen.js","Geometry.js","XLink.js","XWidget.js"],"name":"ui"},{"dependencies":["text_utils","platform"],"modules":["common.js","common-legacy.js","EventTarget.js","Object.js","Worker.js","TextDictionary.js","Color.js","Console.js","ContentProvider.js","ParsedURL.js","Progress.js","UIString.js","ResourceType.js","Settings.js","StaticContentProvider.js","SegmentedRange.js","Throttler.js","Trie.js","Revealer.js","App.js","AppProvider.js","JavaScriptMetaData.js","Linkifier.js","QueryParamHandler.js","Revealer.js","Runnable.js","StringOutputStream.js","CharacterIdMap.js"],"name":"common","scripts":[]},{"dependencies":["bindings","platform","ui"],"modules":["components.js","JSPresentationUtils.js","DockController.js","ImagePreview.js","Linkifier.js","Reload.js","TargetDetachedDialog.js"],"name":"components"},{"dependencies":["ui","sdk","components","formatter"],"extensions":[{"className":"ObjectUI.ObjectPropertiesSection.Renderer","contextTypes":["SDK.RemoteObject"],"type":"@UI.Renderer"}],"name":"object_ui","scripts":["object_ui_module.js"],"modules":["object_ui.js","CustomPreviewComponent.js","ObjectPopoverHelper.js","ObjectPropertiesSection.js","JavaScriptAutocomplete.js","JavaScriptREPL.js","RemoteObjectPreviewFormatter.js"]},{"extensions":[{"className":"JavaScriptMetadata.JavaScriptMetadata","type":"@Common.JavaScriptMetadata"}],"dependencies":["common"],"modules":["javascript_metadata.js","NativeFunctions.js","JavaScriptMetadata.js"],"name":"javascript_metadata","scripts":[]},{"dependencies":["workspace_diff","text_editor","workspace","diff","bindings","persistence","snippets","ui"],"extensions":[{"title":"Changes","className":"Changes.ChangesView","location":"drawer-view","type":"view","id":"changes.changes","persistence":"closeable"},{"className":"Changes.ChangesView.DiffUILocationRevealer","contextTypes":["WorkspaceDiff.DiffUILocation"],"destination":"Changes drawer","type":"@Common.Revealer"}],"name":"changes","scripts":["changes_module.js"],"modules":["ChangesHighlighter.js","ChangesView.js","ChangesSidebar.js"]},{"dependencies":["platform"],"modules":["text_utils.js","Text.js","TextUtils.js","TextRange.js"],"name":"text_utils","scripts":[]}]);Root.applicationDescriptor={"has_html":false,"modules":[{"name":"text_editor"},{"type":"autostart","name":"protocol"},{"name":"cm"},{"name":"data_grid"},{"name":"perf_ui"},{"name":"sources"},{"type":"autostart","name":"browser_sdk"},{"name":"diff"},{"type":"autostart","name":"bindings"},{"name":"snippets"},{"name":"heap_snapshot_model"},{"type":"autostart","name":"dom_extension"},{"name":"console"},{"name":"protocol_monitor"},{"name":"workspace_diff"},{"name":"cm_modes"},{"type":"autostart","name":"platform"},{"type":"autostart","name":"ui"},{"type":"autostart","name":"main"},{"type":"autostart","name":"persistence"},{"name":"inline_editor"},{"type":"autostart","name":"console_counters"},{"type":"autostart","name":"components"},{"name":"quick_open"},{"name":"search"},{"name":"color_picker"},{"name":"coverage"},{"name":"source_frame"},{"type":"autostart","name":"services"},{"name":"event_listeners"},{"type":"autostart","name":"sdk"},{"name":"cm_web_modes"},{"name":"formatter"},{"name":"settings"},{"type":"autostart","name":"host"},{"name":"profiler"},{"type":"autostart","name":"extensions"},{"type":"autostart","name":"common"},{"type":"autostart","name":"workspace"},{"name":"object_ui"},{"name":"javascript_metadata"},{"name":"changes"},{"type":"autostart","name":"text_utils"}]};self['Platform']=self['Platform']||{};self['DomExtension']=self['DomExtension']||{};self['TextUtils']=self['TextUtils']||{};self['Common']=self['Common']||{};self['Host']=self['Host']||{};self['UI']=self['UI']||{};self['Protocol']=self['Protocol']||{};self['SDK']=self['SDK']||{};self['Services']=self['Services']||{};self['Workspace']=self['Workspace']||{};self['Bindings']=self['Bindings']||{};self['Components']=self['Components']||{};self['Persistence']=self['Persistence']||{};self['BrowserSDK']=self['BrowserSDK']||{};self['Extensions']=self['Extensions']||{};self['Main']=self['Main']||{};Main.SimpleApp=class{presentUI(document){const rootView=new UI.RootView();UI.inspectorView.show(rootView.element);rootView.attachToDocument(document);rootView.focus();}};Main.SimpleAppProvider=class{createApp(){return new Main.SimpleApp();}};;Main.ExecutionContextSelector=class{constructor(targetManager,context){context.addFlavorChangeListener(SDK.ExecutionContext,this._executionContextChanged,this);context.addFlavorChangeListener(SDK.Target,this._targetChanged,this);targetManager.addModelListener(SDK.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextCreated,this._onExecutionContextCreated,this);targetManager.addModelListener(SDK.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextDestroyed,this._onExecutionContextDestroyed,this);targetManager.addModelListener(SDK.RuntimeModel,SDK.RuntimeModel.Events.ExecutionContextOrderChanged,this._onExecutionContextOrderChanged,this);this._targetManager=targetManager;this._context=context;targetManager.observeModels(SDK.RuntimeModel,this);}
modelAdded(runtimeModel){setImmediate(deferred.bind(this));function deferred(){if(!this._context.flavor(SDK.Target)){this._context.setFlavor(SDK.Target,runtimeModel.target());}}}
modelRemoved(runtimeModel){const currentExecutionContext=this._context.flavor(SDK.ExecutionContext);if(currentExecutionContext&&currentExecutionContext.runtimeModel===runtimeModel){this._currentExecutionContextGone();}
const models=this._targetManager.models(SDK.RuntimeModel);if(this._context.flavor(SDK.Target)===runtimeModel.target()&&models.length){this._context.setFlavor(SDK.Target,models[0].target());}}
_executionContextChanged(event){const newContext=(event.data);if(newContext){this._context.setFlavor(SDK.Target,newContext.target());if(!this._ignoreContextChanged){this._lastSelectedContextId=this._contextPersistentId(newContext);}}}
_contextPersistentId(executionContext){return executionContext.isDefault?executionContext.target().name()+':'+executionContext.frameId:'';}
_targetChanged(event){const newTarget=(event.data);const currentContext=this._context.flavor(SDK.ExecutionContext);if(!newTarget||(currentContext&&currentContext.target()===newTarget)){return;}
const runtimeModel=newTarget.model(SDK.RuntimeModel);const executionContexts=runtimeModel?runtimeModel.executionContexts():[];if(!executionContexts.length){return;}
let newContext=null;for(let i=0;i<executionContexts.length&&!newContext;++i){if(this._shouldSwitchToContext(executionContexts[i])){newContext=executionContexts[i];}}
for(let i=0;i<executionContexts.length&&!newContext;++i){if(this._isDefaultContext(executionContexts[i])){newContext=executionContexts[i];}}
this._ignoreContextChanged=true;this._context.setFlavor(SDK.ExecutionContext,newContext||executionContexts[0]);this._ignoreContextChanged=false;}
_shouldSwitchToContext(executionContext){if(this._lastSelectedContextId&&this._lastSelectedContextId===this._contextPersistentId(executionContext)){return true;}
if(!this._lastSelectedContextId&&this._isDefaultContext(executionContext)){return true;}
return false;}
_isDefaultContext(executionContext){if(!executionContext.isDefault||!executionContext.frameId){return false;}
if(executionContext.target().parentTarget()){return false;}
const resourceTreeModel=executionContext.target().model(SDK.ResourceTreeModel);const frame=resourceTreeModel&&resourceTreeModel.frameForId(executionContext.frameId);if(frame&&frame.isTopFrame()){return true;}
return false;}
_onExecutionContextCreated(event){this._switchContextIfNecessary((event.data));}
_onExecutionContextDestroyed(event){const executionContext=(event.data);if(this._context.flavor(SDK.ExecutionContext)===executionContext){this._currentExecutionContextGone();}}
_onExecutionContextOrderChanged(event){const runtimeModel=(event.data);const executionContexts=runtimeModel.executionContexts();for(let i=0;i<executionContexts.length;i++){if(this._switchContextIfNecessary(executionContexts[i])){break;}}}
_switchContextIfNecessary(executionContext){if(!this._context.flavor(SDK.ExecutionContext)||this._shouldSwitchToContext(executionContext)){this._ignoreContextChanged=true;this._context.setFlavor(SDK.ExecutionContext,executionContext);this._ignoreContextChanged=false;return true;}
return false;}
_currentExecutionContextGone(){const runtimeModels=this._targetManager.models(SDK.RuntimeModel);let newContext=null;for(let i=0;i<runtimeModels.length&&!newContext;++i){const executionContexts=runtimeModels[i].executionContexts();for(const executionContext of executionContexts){if(this._isDefaultContext(executionContext)){newContext=executionContext;break;}}}
if(!newContext){for(let i=0;i<runtimeModels.length&&!newContext;++i){const executionContexts=runtimeModels[i].executionContexts();if(executionContexts.length){newContext=executionContexts[0];break;}}}
this._ignoreContextChanged=true;this._context.setFlavor(SDK.ExecutionContext,newContext);this._ignoreContextChanged=false;}};;Main.Main=class{constructor(){Main.Main._instanceForTest=this;runOnWindowLoad(this._loaded.bind(this));}
static time(label){if(Host.isUnderTest()){return;}
console.time(label);}
static timeEnd(label){if(Host.isUnderTest()){return;}
console.timeEnd(label);}
async _loaded(){console.timeStamp('Main._loaded');await Root.Runtime.appStarted();Root.Runtime.setPlatform(Host.platform());Root.Runtime.setL10nCallback(ls);Host.InspectorFrontendHost.getPreferences(this._gotPreferences.bind(this));}
_gotPreferences(prefs){console.timeStamp('Main._gotPreferences');if(Host.isUnderTest(prefs)){self.runtime.useTestBase();}
this._createSettings(prefs);this._createAppUI();}
_createSettings(prefs){this._initializeExperiments();let storagePrefix='';if(Host.isCustomDevtoolsFrontend()){storagePrefix='__custom__';}else if(!Root.Runtime.queryParam('can_dock')&&!!Root.Runtime.queryParam('debugFrontend')&&!Host.isUnderTest()){storagePrefix='__bundled__';}
let localStorage;if(!Host.isUnderTest()&&window.localStorage){localStorage=new Common.SettingsStorage(window.localStorage,undefined,undefined,()=>window.localStorage.clear(),storagePrefix);}else{localStorage=new Common.SettingsStorage({},undefined,undefined,undefined,storagePrefix);}
const globalStorage=new Common.SettingsStorage(prefs,Host.InspectorFrontendHost.setPreference,Host.InspectorFrontendHost.removePreference,Host.InspectorFrontendHost.clearPreferences,storagePrefix);Common.settings=new Common.Settings(globalStorage,localStorage);if(!Host.isUnderTest()){new Common.VersionController().updateVersion();}}
_initializeExperiments(){Root.Runtime.experiments.register('applyCustomStylesheet','Allow custom UI themes');Root.Runtime.experiments.register('captureNodeCreationStacks','Capture node creation stacks');Root.Runtime.experiments.register('sourcesPrettyPrint','Automatically pretty print in the Sources Panel');Root.Runtime.experiments.register('backgroundServices','Background web platform feature events',true);Root.Runtime.experiments.register('backgroundServicesNotifications','Background services section for Notifications');Root.Runtime.experiments.register('backgroundServicesPaymentHandler','Background services section for Payment Handler');Root.Runtime.experiments.register('backgroundServicesPushMessaging','Background services section for Push Messaging');Root.Runtime.experiments.register('backgroundServicesPeriodicBackgroundSync','Background services section for Periodic Background Sync');Root.Runtime.experiments.register('blackboxJSFramesOnTimeline','Blackbox JavaScript frames on Timeline',true);Root.Runtime.experiments.register('cssOverview','CSS Overview');Root.Runtime.experiments.register('emptySourceMapAutoStepping','Empty sourcemap auto-stepping');Root.Runtime.experiments.register('handleVisibleSecurityStateChanged','Handle visibleSecurityStateChanged');Root.Runtime.experiments.register('inputEventsOnTimelineOverview','Input events on Timeline overview',true);Root.Runtime.experiments.register('liveHeapProfile','Live heap profile',true);Root.Runtime.experiments.register('mediaInspector','Media Element Inspection');Root.Runtime.experiments.register('nativeHeapProfiler','Native memory sampling heap profiler',true);Root.Runtime.experiments.register('protocolMonitor','Protocol Monitor');Root.Runtime.experiments.register('recordCoverageWithPerformanceTracing','Record coverage while performance tracing');Root.Runtime.experiments.register('samplingHeapProfilerTimeline','Sampling heap profiler timeline',true);Root.Runtime.experiments.register('sourceDiff','Source diff');Root.Runtime.experiments.register('spotlight','Spotlight',true);Root.Runtime.experiments.register('timelineEventInitiators','Timeline: event initiators');Root.Runtime.experiments.register('timelineFlowEvents','Timeline: flow events',true);Root.Runtime.experiments.register('timelineInvalidationTracking','Timeline: invalidation tracking',true);Root.Runtime.experiments.register('timelineShowAllEvents','Timeline: show all events',true);Root.Runtime.experiments.register('timelineV8RuntimeCallStats','Timeline: V8 Runtime Call Stats on Timeline',true);Root.Runtime.experiments.register('timelineWebGL','Timeline: WebGL-based flamechart');Root.Runtime.experiments.cleanUpStaleExperiments();const enabledExperiments=Root.Runtime.queryParam('enabledExperiments');if(enabledExperiments){Root.Runtime.experiments.setServerEnabledExperiments(enabledExperiments.split(';'));}
Root.Runtime.experiments.setDefaultExperiments(['backgroundServices','backgroundServicesNotifications','backgroundServicesPushMessaging','backgroundServicesPaymentHandler',]);if(Host.isUnderTest()&&Root.Runtime.queryParam('test').includes('live-line-level-heap-profile.js')){Root.Runtime.experiments.enableForTest('liveHeapProfile');}}
async _createAppUI(){Main.Main.time('Main._createAppUI');UI.viewManager=new UI.ViewManager();Persistence.isolatedFileSystemManager=new Persistence.IsolatedFileSystemManager();const themeSetting=Common.settings.createSetting('uiTheme','systemPreferred');UI.initializeUIUtils(document,themeSetting);themeSetting.addChangeListener(Components.reload.bind(Components));UI.installComponentRootStyles((document.body));this._addMainEventListeners(document);const canDock=!!Root.Runtime.queryParam('can_dock');UI.zoomManager=new UI.ZoomManager(window,Host.InspectorFrontendHost);UI.inspectorView=UI.InspectorView.instance();UI.ContextMenu.initialize();UI.ContextMenu.installHandler(document);UI.Tooltip.installHandler(document);Components.dockController=new Components.DockController(canDock);SDK.consoleModel=new SDK.ConsoleModel();SDK.multitargetNetworkManager=new SDK.MultitargetNetworkManager();SDK.domDebuggerManager=new SDK.DOMDebuggerManager();SDK.targetManager.addEventListener(SDK.TargetManager.Events.SuspendStateChanged,this._onSuspendStateChanged.bind(this));UI.shortcutsScreen=new UI.ShortcutsScreen();UI.shortcutsScreen.section(Common.UIString('Elements Panel'));UI.shortcutsScreen.section(Common.UIString('Styles Pane'));UI.shortcutsScreen.section(Common.UIString('Debugger'));UI.shortcutsScreen.section(Common.UIString('Console'));Workspace.fileManager=new Workspace.FileManager();Workspace.workspace=new Workspace.Workspace();Bindings.networkProjectManager=new Bindings.NetworkProjectManager();Bindings.resourceMapping=new Bindings.ResourceMapping(SDK.targetManager,Workspace.workspace);new Bindings.PresentationConsoleMessageManager();Bindings.cssWorkspaceBinding=new Bindings.CSSWorkspaceBinding(SDK.targetManager,Workspace.workspace);Bindings.debuggerWorkspaceBinding=new Bindings.DebuggerWorkspaceBinding(SDK.targetManager,Workspace.workspace);Bindings.breakpointManager=new Bindings.BreakpointManager(Workspace.workspace,SDK.targetManager,Bindings.debuggerWorkspaceBinding);Extensions.extensionServer=new Extensions.ExtensionServer();new Persistence.FileSystemWorkspaceBinding(Persistence.isolatedFileSystemManager,Workspace.workspace);Persistence.persistence=new Persistence.Persistence(Workspace.workspace,Bindings.breakpointManager);Persistence.networkPersistenceManager=new Persistence.NetworkPersistenceManager(Workspace.workspace);new Main.ExecutionContextSelector(SDK.targetManager,UI.context);Bindings.blackboxManager=new Bindings.BlackboxManager(Bindings.debuggerWorkspaceBinding);new Main.Main.PauseListener();UI.actionRegistry=new UI.ActionRegistry();UI.shortcutRegistry=new UI.ShortcutRegistry(UI.actionRegistry,document);UI.ShortcutsScreen.registerShortcuts();this._registerForwardedShortcuts();this._registerMessageSinkListener();Main.Main.timeEnd('Main._createAppUI');this._showAppUI(await self.runtime.extension(Common.AppProvider).instance());}
_showAppUI(appProvider){Main.Main.time('Main._showAppUI');const app=(appProvider).createApp();Components.dockController.initialize();app.presentUI(document);const toggleSearchNodeAction=UI.actionRegistry.action('elements.toggle-element-search');if(toggleSearchNodeAction){Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.EnterInspectElementMode,toggleSearchNodeAction.execute.bind(toggleSearchNodeAction),this);}
Host.InspectorFrontendHost.events.addEventListener(Host.InspectorFrontendHostAPI.Events.RevealSourceLine,this._revealSourceLine,this);UI.inspectorView.createToolbars();Host.InspectorFrontendHost.loadCompleted();const extensions=self.runtime.extensions(Common.QueryParamHandler);for(const extension of extensions){const value=Root.Runtime.queryParam(extension.descriptor()['name']);if(value!==null){extension.instance().then(handleQueryParam.bind(null,value));}}
function handleQueryParam(value,handler){handler.handleQueryParam(value);}
setTimeout(this._initializeTarget.bind(this),0);Main.Main.timeEnd('Main._showAppUI');}
async _initializeTarget(){Main.Main.time('Main._initializeTarget');const instances=await Promise.all(self.runtime.extensions('early-initialization').map(extension=>extension.instance()));for(const instance of instances){await(instance).run();}
Host.InspectorFrontendHost.readyForTest();setTimeout(this._lateInitialization.bind(this),100);Main.Main.timeEnd('Main._initializeTarget');}
_lateInitialization(){Main.Main.time('Main._lateInitialization');this._registerShortcuts();Extensions.extensionServer.initializeExtensions();const extensions=self.runtime.extensions('late-initialization');const promises=[];for(const extension of extensions){const setting=extension.descriptor()['setting'];if(!setting||Common.settings.moduleSetting(setting).get()){promises.push(extension.instance().then(instance=>((instance)).run()));continue;}
async function changeListener(event){if(!event.data){return;}
Common.settings.moduleSetting(setting).removeChangeListener(changeListener);((await extension.instance())).run();}
Common.settings.moduleSetting(setting).addChangeListener(changeListener);}
this._lateInitDonePromise=Promise.all(promises);Main.Main.timeEnd('Main._lateInitialization');}
lateInitDonePromiseForTest(){return this._lateInitDonePromise;}
_registerForwardedShortcuts(){const forwardedActions=['main.toggle-dock','debugger.toggle-breakpoints-active','debugger.toggle-pause','commandMenu.show','console.show'];const actionKeys=UI.shortcutRegistry.keysForActions(forwardedActions).map(UI.KeyboardShortcut.keyCodeAndModifiersFromKey);Host.InspectorFrontendHost.setWhitelistedShortcuts(JSON.stringify(actionKeys));}
_registerMessageSinkListener(){Common.console.addEventListener(Common.Console.Events.MessageAdded,messageAdded);function messageAdded(event){const message=(event.data);if(message.show){Common.console.show();}}}
_revealSourceLine(event){const url=(event.data['url']);const lineNumber=(event.data['lineNumber']);const columnNumber=(event.data['columnNumber']);const uiSourceCode=Workspace.workspace.uiSourceCodeForURL(url);if(uiSourceCode){Common.Revealer.reveal(uiSourceCode.uiLocation(lineNumber,columnNumber));return;}
function listener(event){const uiSourceCode=(event.data);if(uiSourceCode.url()===url){Common.Revealer.reveal(uiSourceCode.uiLocation(lineNumber,columnNumber));Workspace.workspace.removeEventListener(Workspace.Workspace.Events.UISourceCodeAdded,listener);}}
Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,listener);}
_registerShortcuts(){const shortcut=UI.KeyboardShortcut;const section=UI.shortcutsScreen.section(Common.UIString('All Panels'));let keys=[shortcut.makeDescriptor('[',shortcut.Modifiers.CtrlOrMeta),shortcut.makeDescriptor(']',shortcut.Modifiers.CtrlOrMeta)];section.addRelatedKeys(keys,Common.UIString('Go to the panel to the left/right'));const toggleConsoleLabel=Common.UIString('Show console');section.addKey(shortcut.makeDescriptor(shortcut.Keys.Tilde,shortcut.Modifiers.Ctrl),toggleConsoleLabel);section.addKey(shortcut.makeDescriptor(shortcut.Keys.Esc),Common.UIString('Toggle drawer'));if(Components.dockController.canDock()){section.addKey(shortcut.makeDescriptor('M',shortcut.Modifiers.CtrlOrMeta|shortcut.Modifiers.Shift),Common.UIString('Toggle device mode'));section.addKey(shortcut.makeDescriptor('D',shortcut.Modifiers.CtrlOrMeta|shortcut.Modifiers.Shift),Common.UIString('Toggle dock side'));}
section.addKey(shortcut.makeDescriptor('f',shortcut.Modifiers.CtrlOrMeta),Common.UIString('Search'));const advancedSearchShortcutModifier=Host.isMac()?UI.KeyboardShortcut.Modifiers.Meta|UI.KeyboardShortcut.Modifiers.Alt:UI.KeyboardShortcut.Modifiers.Ctrl|UI.KeyboardShortcut.Modifiers.Shift;const advancedSearchShortcut=shortcut.makeDescriptor('f',advancedSearchShortcutModifier);section.addKey(advancedSearchShortcut,Common.UIString('Search across all sources'));const inspectElementModeShortcuts=UI.shortcutRegistry.shortcutDescriptorsForAction('elements.toggle-element-search');if(inspectElementModeShortcuts.length){section.addKey(inspectElementModeShortcuts[0],Common.UIString('Select node to inspect'));}
const openResourceShortcut=UI.KeyboardShortcut.makeDescriptor('p',UI.KeyboardShortcut.Modifiers.CtrlOrMeta);section.addKey(openResourceShortcut,Common.UIString('Go to source'));if(Host.isMac()){keys=[shortcut.makeDescriptor('g',shortcut.Modifiers.Meta),shortcut.makeDescriptor('g',shortcut.Modifiers.Meta|shortcut.Modifiers.Shift)];section.addRelatedKeys(keys,Common.UIString('Find next/previous'));}}
_postDocumentKeyDown(event){if(!event.handled){UI.shortcutRegistry.handleShortcut(event);}}
_redispatchClipboardEvent(event){const eventCopy=new CustomEvent('clipboard-'+event.type,{bubbles:true});eventCopy['original']=event;const document=event.target&&event.target.ownerDocument;const target=document?document.deepActiveElement():null;if(target){target.dispatchEvent(eventCopy);}
if(eventCopy.handled){event.preventDefault();}}
_contextMenuEventFired(event){if(event.handled||event.target.classList.contains('popup-glasspane')){event.preventDefault();}}
_addMainEventListeners(document){document.addEventListener('keydown',this._postDocumentKeyDown.bind(this),false);document.addEventListener('beforecopy',this._redispatchClipboardEvent.bind(this),true);document.addEventListener('copy',this._redispatchClipboardEvent.bind(this),false);document.addEventListener('cut',this._redispatchClipboardEvent.bind(this),false);document.addEventListener('paste',this._redispatchClipboardEvent.bind(this),false);document.addEventListener('contextmenu',this._contextMenuEventFired.bind(this),true);}
_onSuspendStateChanged(){const suspended=SDK.targetManager.allTargetsSuspended();UI.inspectorView.onSuspendStateChanged(suspended);}};Main.Main.ZoomActionDelegate=class{handleAction(context,actionId){if(Host.InspectorFrontendHost.isHostedMode()){return false;}
switch(actionId){case'main.zoom-in':Host.InspectorFrontendHost.zoomIn();return true;case'main.zoom-out':Host.InspectorFrontendHost.zoomOut();return true;case'main.zoom-reset':Host.InspectorFrontendHost.resetZoom();return true;}
return false;}};Main.Main.SearchActionDelegate=class{handleAction(context,actionId){const searchableView=UI.SearchableView.fromElement(document.deepActiveElement())||UI.inspectorView.currentPanelDeprecated().searchableView();if(!searchableView){return false;}
switch(actionId){case'main.search-in-panel.find':return searchableView.handleFindShortcut();case'main.search-in-panel.cancel':return searchableView.handleCancelSearchShortcut();case'main.search-in-panel.find-next':return searchableView.handleFindNextShortcut();case'main.search-in-panel.find-previous':return searchableView.handleFindPreviousShortcut();}
return false;}};Main.Main.MainMenuItem=class{constructor(){this._item=new UI.ToolbarMenuButton(this._handleContextMenu.bind(this),true);this._item.setTitle(Common.UIString('Customize and control DevTools'));}
item(){return this._item;}
_handleContextMenu(contextMenu){if(Components.dockController.canDock()){const dockItemElement=createElementWithClass('div','flex-centered flex-auto');dockItemElement.tabIndex=-1;const titleElement=dockItemElement.createChild('span','flex-auto');titleElement.textContent=Common.UIString('Dock side');const toggleDockSideShorcuts=UI.shortcutRegistry.shortcutDescriptorsForAction('main.toggle-dock');titleElement.title=Common.UIString('Placement of DevTools relative to the page. (%s to restore last position)',toggleDockSideShorcuts[0].name);dockItemElement.appendChild(titleElement);const dockItemToolbar=new UI.Toolbar('',dockItemElement);if(Host.isMac()&&!UI.themeSupport.hasTheme()){dockItemToolbar.makeBlueOnHover();}
const undock=new UI.ToolbarToggle(Common.UIString('Undock into separate window'),'largeicon-undock');const bottom=new UI.ToolbarToggle(Common.UIString('Dock to bottom'),'largeicon-dock-to-bottom');const right=new UI.ToolbarToggle(Common.UIString('Dock to right'),'largeicon-dock-to-right');const left=new UI.ToolbarToggle(Common.UIString('Dock to left'),'largeicon-dock-to-left');undock.addEventListener(UI.ToolbarButton.Events.MouseDown,event=>event.data.consume());bottom.addEventListener(UI.ToolbarButton.Events.MouseDown,event=>event.data.consume());right.addEventListener(UI.ToolbarButton.Events.MouseDown,event=>event.data.consume());left.addEventListener(UI.ToolbarButton.Events.MouseDown,event=>event.data.consume());undock.addEventListener(UI.ToolbarButton.Events.Click,setDockSide.bind(null,Components.DockController.State.Undocked));bottom.addEventListener(UI.ToolbarButton.Events.Click,setDockSide.bind(null,Components.DockController.State.DockedToBottom));right.addEventListener(UI.ToolbarButton.Events.Click,setDockSide.bind(null,Components.DockController.State.DockedToRight));left.addEventListener(UI.ToolbarButton.Events.Click,setDockSide.bind(null,Components.DockController.State.DockedToLeft));undock.setToggled(Components.dockController.dockSide()===Components.DockController.State.Undocked);bottom.setToggled(Components.dockController.dockSide()===Components.DockController.State.DockedToBottom);right.setToggled(Components.dockController.dockSide()===Components.DockController.State.DockedToRight);left.setToggled(Components.dockController.dockSide()===Components.DockController.State.DockedToLeft);dockItemToolbar.appendToolbarItem(undock);dockItemToolbar.appendToolbarItem(left);dockItemToolbar.appendToolbarItem(bottom);dockItemToolbar.appendToolbarItem(right);dockItemElement.addEventListener('keydown',event=>{let dir=0;if(event.key==='ArrowLeft'){dir=-1;}else if(event.key==='ArrowRight'){dir=1;}else{return;}
const buttons=[undock,left,bottom,right];let index=buttons.findIndex(button=>button.element.hasFocus());index=Number.constrain(index+dir,0,buttons.length-1);buttons[index].element.focus();event.consume(true);});contextMenu.headerSection().appendCustomItem(dockItemElement);}
const button=this._item.element;function setDockSide(side){const hadKeyboardFocus=document.deepActiveElement().hasAttribute('data-keyboard-focus');Components.dockController.once(Components.DockController.Events.AfterDockSideChanged).then(()=>{button.focus();if(hadKeyboardFocus){UI.markAsFocusedByKeyboard(button);}});Components.dockController.setDockSide(side);contextMenu.discard();}
if(Components.dockController.dockSide()===Components.DockController.State.Undocked&&SDK.targetManager.mainTarget()&&SDK.targetManager.mainTarget().type()===SDK.Target.Type.Frame){contextMenu.defaultSection().appendAction('inspector_main.focus-debuggee',Common.UIString('Focus debuggee'));}
contextMenu.defaultSection().appendAction('main.toggle-drawer',UI.inspectorView.drawerVisible()?Common.UIString('Hide console drawer'):Common.UIString('Show console drawer'));contextMenu.appendItemsAtLocation('mainMenu');const moreTools=contextMenu.defaultSection().appendSubMenuItem(Common.UIString('More tools'));const extensions=self.runtime.extensions('view',undefined,true);for(const extension of extensions){const descriptor=extension.descriptor();if(descriptor['persistence']!=='closeable'){continue;}
if(descriptor['location']!=='drawer-view'&&descriptor['location']!=='panel'){continue;}
moreTools.defaultSection().appendItem(extension.title(),UI.viewManager.showView.bind(UI.viewManager,descriptor['id']));}
const helpSubMenu=contextMenu.footerSection().appendSubMenuItem(Common.UIString('Help'));helpSubMenu.appendItemsAtLocation('mainMenuHelp');}};Main.Main.PauseListener=class{constructor(){SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerPaused,this._debuggerPaused,this);}
_debuggerPaused(event){SDK.targetManager.removeModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerPaused,this._debuggerPaused,this);const debuggerModel=(event.data);const debuggerPausedDetails=debuggerModel.debuggerPausedDetails();UI.context.setFlavor(SDK.Target,debuggerModel.target());Common.Revealer.reveal(debuggerPausedDetails);}};Main.sendOverProtocol=function(method,params){return new Promise((resolve,reject)=>{Protocol.test.sendRawMessage(method,params,(err,...results)=>{if(err){return reject(err);}
return resolve(results);});});};Main.ReloadActionDelegate=class{handleAction(context,actionId){switch(actionId){case'main.debug-reload':Components.reload();return true;}
return false;}};new Main.Main();;self['ConsoleCounters']=self['ConsoleCounters']||{};;Root.Runtime.cachedResources["ui/checkboxTextLabel.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    padding: 0;\n    margin: 0;\n    display: inline-flex;\n    flex-shrink: 0;\n    align-items: center !important;\n}\n\ninput {\n    height: 12px;\n    width: 12px;\n    flex-shrink: 0;\n}\n\ninput:focus {\n    outline: auto 5px -webkit-focus-ring-color;\n}\n\ninput.dt-checkbox-themed {\n    -webkit-appearance: none;\n    margin: auto 5px auto 2px;\n    border: 1px solid rgb(45, 45, 45);\n    border-radius: 3px;\n    background-color: rgb(102, 102, 102);\n}\n\ninput.dt-checkbox-themed:after {\n    content: '';\n    line-height: 10px;\n    position: absolute;\n    cursor: pointer;\n    width: 12px;\n    height: 12px;\n    background: none;\n}\n\ninput.dt-checkbox-themed:checked:after {\n    background-color: #333;\n}\n\ninput.dt-checkbox-themed:after {\n    -webkit-mask-image: url(Images/checkboxCheckmark.svg);\n    -webkit-mask-size: 11px 11px;\n    -webkit-mask-position: 0 0;\n}\n\n:host-context(.-theme-with-dark-background) input:not(.dt-checkbox-themed) {\n    filter: invert(80%);\n}\n\n.dt-checkbox-text {\n    margin-left: 3px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.dt-checkbox-subtitle {\n    color: gray;\n}\n\n/*# sourceURL=ui/checkboxTextLabel.css */";Root.Runtime.cachedResources["ui/closeButton.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.close-button {\n    width: 14px;\n    height: 14px;\n    cursor: default;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.hover-icon, .active-icon {\n    display: none;\n}\n\n.close-button:hover .default-icon, .close-button:active .default-icon {\n    display: none;\n}\n\n.close-button:hover .hover-icon {\n    display: block;\n}\n\n.close-button[data-keyboard-focus=\"true\"]:focus .default-icon, .close-button:active .default-icon {\n    display: none;\n}\n\n.close-button[data-keyboard-focus=\"true\"]:focus .hover-icon {\n    display: block;\n}\n\n.close-button:active .hover-icon {\n    display: none !important;\n}\n\n.close-button:active .active-icon {\n    display: block;\n}\n\n/*# sourceURL=ui/closeButton.css */";Root.Runtime.cachedResources["ui/confirmDialog.css"]="/*\n * Copyright (c) 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.widget {\n    padding: 20px;\n}\n\n.message, .button {\n    font-size: larger;\n    white-space: pre;\n    margin: 5px;\n}\n\n.button {\n    text-align: center;\n    margin-top: 10px;\n}\n\n.button button {\n    min-width: 80px;\n}\n\n.reason {\n    color: #8b0000;\n}\n\n/*# sourceURL=ui/confirmDialog.css */";Root.Runtime.cachedResources["ui/dialog.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.widget {\n    box-shadow: var(--drop-shadow);\n    background: white;\n    justify-content: flex-start;\n    align-items: stretch;\n    display: flex;\n}\n\n.dialog-close-button {\n    position: absolute;\n    right: 9px;\n    top: 9px;\n    z-index: 1;\n}\n/*# sourceURL=ui/dialog.css */";Root.Runtime.cachedResources["ui/dropTarget.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    display: flex;\n    background-color: rgba(255,255,255,0.8);\n    z-index: 1000;\n}\n\n.drop-target-message {\n    flex: auto;\n    font-size: 30px;\n    color: #999;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    margin: 20px;\n    border: 4px dashed #ddd;\n    pointer-events: none;\n}\n\n/*# sourceURL=ui/dropTarget.css */";Root.Runtime.cachedResources["ui/emptyWidget.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n .empty-bold-text {\n    display: block;\n    font-size: 1.5em;\n    margin: .83em 0 .83em;\n    font-weight: bold;\n }\n\n.empty-view {\n    color: hsla(0, 0%, 43%, 1);\n    padding: 30px;\n    display: flex;\n    align-items: center;\n    flex-direction: column;\n    min-width: 70px;\n}\n\n.empty-view-scroller {\n    justify-content: center;\n    overflow: auto;\n}\n\n.empty-view p {\n    white-space: initial;\n    line-height: 18px;\n    max-width: 300px;\n    flex-shrink: 0;\n}\n\n/*# sourceURL=ui/emptyWidget.css */";Root.Runtime.cachedResources["ui/filter.css"]="/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.filter-bar {\n    background-color: var(--toolbar-bg-color);\n    flex: none;\n    flex-wrap: wrap;\n    align-items: center;\n    border-bottom: var(--divider-border);\n}\n\n.filter-text-filter {\n    display: inline-flex;\n    margin-left: 1px;\n    margin-right: 2px;\n    min-width: 40px;\n    max-width: 200px;\n    height: 24px;\n    align-items: center;\n}\n\n.filter-bitset-filter {\n    padding: 2px;\n    display: inline-flex;\n    overflow: hidden;\n    height: 24px;\n    position: relative;\n    margin: 0;\n}\n\n.filter-bitset-filter span {\n    display: inline-block;\n    flex: none;\n    margin: auto 2px;\n    padding: 3px;\n    background: transparent;\n    text-shadow: rgba(255, 255, 255, 0.5) 0 1px 0;\n    border-radius: 6px;\n    overflow: hidden;\n}\n\n.filter-bitset-filter span[data-keyboard-focus=\"true\"] {\n    outline: -webkit-focus-ring-color auto 5px;\n}\n\n.filter-bitset-filter-divider {\n    background-color: #ccc;\n    height: 16px;\n    width: 1px;\n    margin: auto 2px;\n    display: inline-block;\n}\n\n.filter-bitset-filter span.selected,\n.filter-bitset-filter span:hover,\n.filter-bitset-filter span:active {\n    color: white;\n    text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0;\n}\n\n.filter-bitset-filter span:hover {\n    background: rgba(0, 0, 0, 0.2);\n}\n\n.filter-bitset-filter span.selected {\n    background: rgba(0, 0, 0, 0.3);\n}\n\n.filter-bitset-filter span:active {\n    background: rgba(0, 0, 0, 0.5);\n}\n\n.filter-checkbox-filter {\n    padding-left: 4px;\n    padding-right: 2px;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    display: inline-flex;\n    vertical-align: middle;\n    height: 24px;\n    position: relative;\n}\n\n.filter-checkbox-filter > [is=dt-checkbox] {\n    display: flex;\n    margin: auto 0;\n}\n\n.filter-input-field {\n    margin: 0 3px;\n    padding-left: 3px;\n    width: 163px;\n    height: 18px;\n    line-height: 20px;\n    display: inline-block;\n    background: #FFF;\n    overflow: hidden;\n    white-space: nowrap;\n    cursor: auto;\n}\n\n.filter-input-field:hover {\n    box-shadow: var(--focus-ring-inactive-shadow);\n}\n\n.filter-input-field:focus,\n.filter-input-field:not(:empty) {\n    box-shadow: var(--focus-ring-active-shadow);\n}\n\n/*# sourceURL=ui/filter.css */";Root.Runtime.cachedResources["ui/glassPane.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    position: absolute !important;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    overflow: hidden;\n    contain: strict;\n    background-color: transparent;\n}\n\n:host-context(.dimmed-pane) {\n    background-color: rgba(255, 255, 255, 0.5);\n}\n\n:host-context(.no-pointer-events) {\n    pointer-events: none;\n}\n\n.widget {\n    display: flex;\n    background-color: transparent;\n    pointer-events: auto;\n    flex: none;\n}\n\n.no-pointer-events {\n    pointer-events: none;\n}\n\n.arrow-top {\n    margin-top: -19px;\n    margin-left: -9px;\n}\n\n.arrow-bottom {\n    margin-left: -9px;\n}\n\n.arrow-left {\n    margin-left: -19px;\n    margin-top: -9px;\n}\n\n.arrow-right {\n    margin-top: -9px;\n}\n\n.arrow-none {\n    display: none;\n}\n\n:host-context(.-theme-with-dark-background) .arrow {\n    -webkit-filter: invert(80%);\n}\n\n/*# sourceURL=ui/glassPane.css */";Root.Runtime.cachedResources["ui/infobar.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.infobar {\n    color: rgb(34, 34, 34);\n    display: flex;\n    flex: auto;\n    border-bottom: 1px solid rgb(171, 171, 171);\n    flex-direction: column;\n    align-items: stretch;\n    position: relative;\n}\n\n.infobar-warning {\n    background-color: rgb(253, 242, 192);\n}\n\n.infobar-info {\n    background-color: rgb(255, 255, 255);\n}\n\n.infobar-main-row {\n    display: flex;\n    flex-direction: row;\n    flex: auto;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    justify-content: space-between;\n    margin-right: 20px;\n    min-height: 25px;\n    align-items: center;\n    padding-left: 4px;\n}\n\n.infobar-main-row > * {\n    flex: none;\n    padding: 0 3px;\n}\n\n.infobar-main-title {\n    flex: auto;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.infobar-details-rows {\n    padding: 5px 5px 0 5px;\n}\n\n.infobar-details-row {\n    display: flex;\n    flex-direction: column;\n    line-height: 18px;\n    padding-bottom: 6px;\n}\n\n.close-button {\n    position: absolute;\n    top: 5px;\n    right: 6px;\n}\n\n.infobar-toggle {\n    color: hsl(214, 92%, 50%);\n    cursor: pointer;\n    margin-top: 5px;\n    margin-bottom: 5px;\n}\n\n.infobar-toggle:hover {\n    color: hsl(214, 92%, 30%);\n}\n\n.info-icon {\n    -webkit-mask-image: url(Images/ic_info_black_18dp.svg);\n    background-color: hsl(214, 92%, 50%);\n}\n\n.warning-icon {\n    -webkit-mask-image: url(Images/ic_warning_black_18dp.svg);\n    background-color: hsl(44, 92%, 50%);\n}\n\n.icon {\n    -webkit-mask-size: 18px 18px;\n    width: 18px;\n    height: 19px;\n}\n\n/*# sourceURL=ui/infobar.css */";Root.Runtime.cachedResources["ui/inlineButton.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n  display: inline-block;\n  border: 1px solid #ddd;\n  position: relative;\n  top: 7px;\n  margin: 2px;\n  background-color: var(--toolbar-bg-color);\n}\n\n:host > * {\n  position: relative;\n  left: -2px;\n  width: 28px;\n  height: 26px;\n}\n/*# sourceURL=ui/inlineButton.css */";Root.Runtime.cachedResources["ui/inspectorCommon.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n* {\n    /* This is required for correct sizing of flex items because we rely\n     * on an old version of the flexbox spec.\n     * Longer-term we should remove this, see crbug.com/473625 */\n    min-width: 0;\n    min-height: 0;\n}\n\n:host-context(.platform-mac) .monospace,\n:host-context(.platform-mac) .source-code,\n.platform-mac .monospace,\n.platform-mac .source-code {\n    font-size: 11px !important;\n    font-family: Menlo, monospace;\n}\n\n:host-context(.platform-windows) .monospace,\n:host-context(.platform-windows) .source-code,\n.platform-windows .monospace,\n.platform-windows .source-code {\n    font-size: 12px !important;\n    font-family: Consolas, Lucida Console, Courier New, monospace;\n}\n\n:host-context(.platform-linux) .monospace,\n:host-context(.platform-linux) .source-code,\n.platform-linux .monospace,\n.platform-linux .source-code {\n    font-size: 11px !important;\n    font-family: dejavu sans mono, monospace;\n}\n\n.source-code {\n    font-family: monospace;\n    font-size: 11px !important;\n    white-space: pre-wrap;\n}\n\n* {\n    box-sizing: border-box;\n}\n\n:focus {\n    outline-width: 0;\n}\n\ninput[type=radio]:focus {\n    outline: auto 5px -webkit-focus-ring-color;\n}\n\nimg {\n    -webkit-user-drag: none;\n}\n\niframe,\na img {\n    border: none;\n}\n\n.fill {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n}\n\niframe.fill {\n    width: 100%;\n    height: 100%;\n}\n\n.widget {\n    position: relative;\n    flex: auto;\n    contain: style;\n}\n\n.hbox {\n    display: flex;\n    flex-direction: row !important;\n    position: relative;\n}\n\n.vbox {\n    display: flex;\n    flex-direction: column !important;\n    position: relative;\n}\n\n.view-container > .toolbar {\n    border-bottom: 1px solid #eee;\n}\n\n.flex-auto {\n    flex: auto;\n}\n\n.flex-none {\n    flex: none;\n}\n\n.flex-centered {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.overflow-auto {\n    overflow: auto;\n}\n\niframe.widget {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n}\n\n.hidden {\n    display: none !important;\n}\n\n.monospace {\n    font-size: 10px !important;\n    font-family: monospace;\n}\n\n.highlighted-search-result {\n    border-radius: 1px;\n    background-color: rgba(255, 255, 0, 0.8);\n    outline: 1px solid rgba(255, 255, 0, 0.8);\n}\n\n.-theme-with-dark-background .highlighted-search-result,\n:host-context(.-theme-with-dark-background) .highlighted-search-result {\n    background-color: hsl(133, 100%, 30%);\n    color: #333;\n}\n\n.link {\n    cursor: pointer;\n    text-decoration: underline;\n    color: rgb(17, 85, 204);\n}\n\nbutton,\ninput,\nselect {\n    /* Form elements do not automatically inherit font style from ancestors. */\n    font-family: inherit;\n    font-size: inherit;\n}\n\ninput {\n    background-color: white;\n    color: inherit;\n}\n\ninput::placeholder {\n    color: rgba(0, 0, 0, 0.54);\n}\n\n:host-context(.-theme-with-dark-background) input[type=\"checkbox\"]:not(.-theme-preserve) {\n    -webkit-filter: invert(80%);\n}\n\n.harmony-input:not([type]),\n.harmony-input[type=number],\n.harmony-input[type=text] {\n    padding: 3px 6px;\n    height: 24px;\n    border: none;\n}\n\n.harmony-input:not([type]):not(.error-input):not(:invalid):hover,\n.harmony-input[type=number]:not(.error-input):not(:invalid):hover,\n.harmony-input[type=text]:not(.error-input):not(:invalid):hover {\n    box-shadow: var(--focus-ring-inactive-shadow);\n}\n\n.harmony-input:not([type]):not(.error-input):not(:invalid):focus,\n.harmony-input[type=number]:not(.error-input):not(:invalid):focus,\n.harmony-input[type=text]:not(.error-input):not(:invalid):focus {\n    box-shadow: var(--focus-ring-active-shadow);\n}\n\n.highlighted-search-result.current-search-result {\n    border-radius: 1px;\n    padding: 1px;\n    margin: -1px;\n    background-color: rgba(255, 127, 0, 0.8);\n}\n\n.dimmed {\n    opacity: 0.6;\n}\n\n.editing {\n    box-shadow: var(--drop-shadow);\n    background-color: white;\n    text-overflow: clip !important;\n    padding-left: 2px;\n    margin-left: -2px;\n    padding-right: 2px;\n    margin-right: -2px;\n    margin-bottom: -1px;\n    padding-bottom: 1px;\n    opacity: 1.0 !important;\n}\n\n.editing,\n.editing * {\n    color: #222 !important;\n    text-decoration: none !important;\n}\n\n.harmony-input:not([type]).error-input,\n.harmony-input[type=number].error-input,\n.harmony-input[type=text].error-input,\n.harmony-input:not([type]):invalid,\n.harmony-input[type=number]:invalid,\n.harmony-input[type=text]:invalid {\n    box-shadow: 0 0 0 1px #ff1a00;\n}\n\n.chrome-select {\n    -webkit-appearance: none;\n    -webkit-user-select: none;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    border-radius: 2px;\n    color: #333;\n    font: inherit;\n    margin: 0;\n    outline: none;\n    padding-right: 20px;\n    padding-left: 6px;\n    background-image: -webkit-image-set(url(Images/chromeSelect.png) 1x, url(Images/chromeSelect_2x.png) 2x);\n    background-color: hsl(0, 0%, 98%);\n    background-position: right center;\n    background-repeat: no-repeat;\n    min-height: 24px;\n    min-width: 80px;\n    background-size: 15px;\n}\n\n.chrome-select:enabled:active,\n.chrome-select:enabled:focus,\n.chrome-select:enabled:hover {\n    background-color: hsl(0, 0%, 96%);\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.chrome-select:enabled:active {\n    background-color: #f2f2f2;\n}\n\n.chrome-select:enabled:focus {\n    border-color: transparent;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(66, 133, 244, 0.4);\n}\n\n.chrome-select:disabled {\n    opacity: 0.38;\n}\n\n.chrome-select-label {\n  margin: 0px 22px;\n  flex: none;\n}\n\n.chrome-select-label p {\n  margin-top: 0;\n  color: gray;\n}\n\n.chrome-select optgroup,\n.chrome-select option {\n    background-color: #EEEEEE;\n    color: #222;\n}\n\n:not(.platform-mac).-theme-with-dark-background ::-webkit-scrollbar,\n:host-context(:not(.platform-mac).-theme-with-dark-background) ::-webkit-scrollbar {\n    width: 14px;\n    height: 14px;\n}\n\n:not(.platform-mac).-theme-with-dark-background ::-webkit-scrollbar-track,\n:host-context(:not(.platform-mac).-theme-with-dark-background) ::-webkit-scrollbar-track {\n    -webkit-box-shadow: inset 0 0 1px rgba(255,255,255,0.3);\n}\n\n:not(.platform-mac).-theme-with-dark-background ::-webkit-scrollbar-thumb,\n:host-context(:not(.platform-mac).-theme-with-dark-background) ::-webkit-scrollbar-thumb {\n    border-radius: 2px;\n    background-color: #333;\n    -webkit-box-shadow: inset 0 0 1px rgba(255,255,255,0.5);\n}\n\n:not(.platform-mac).-theme-with-dark-background ::-webkit-scrollbar-corner,\n:host-context(:not(.platform-mac).-theme-with-dark-background) ::-webkit-scrollbar-corner {\n    background-color: #242424;\n}\n\n.gray-info-message {\n    text-align: center;\n    font-style: italic;\n    padding: 6px;\n    color: #888;\n    white-space: nowrap;\n}\n\nspan[is=dt-icon-label] {\n    flex: none;\n}\n\n.full-widget-dimmed-banner a {\n    color: inherit;\n}\n\n.full-widget-dimmed-banner {\n    color: #777;\n    background-color: white;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    text-align: center;\n    padding: 20px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    font-size: 13px;\n    overflow: auto;\n    z-index: 500;\n}\n\n[is=ui-icon] {\n    display: inline-block;\n    flex-shrink: 0;\n}\n\n.-theme-with-dark-background [is=ui-icon].icon-invert,\n:host-context(.-theme-with-dark-background) [is=ui-icon].icon-invert {\n    filter: invert(80%) hue-rotate(180deg);\n}\n\n[is=ui-icon].icon-mask {\n    background-color: rgb(110, 110, 110);\n    -webkit-mask-position: var(--spritesheet-position);\n}\n\n[is=ui-icon]:not(.icon-mask) {\n    background-position: var(--spritesheet-position);\n}\n\n.spritesheet-smallicons:not(.icon-mask) {\n    background-image: url(Images/smallIcons.svg);\n}\n\n.spritesheet-smallicons.icon-mask {\n    -webkit-mask-image: url(Images/smallIcons.svg);\n}\n\n.spritesheet-largeicons:not(.icon-mask) {\n    background-image: url(Images/largeIcons.svg);\n}\n\n.spritesheet-largeicons.icon-mask {\n    -webkit-mask-image: url(Images/largeIcons.svg);\n}\n\n.spritesheet-mediumicons:not(.icon-mask) {\n    background-image: url(Images/mediumIcons.svg);\n}\n\n.spritesheet-mediumicons.icon-mask {\n    -webkit-mask-image: url(Images/mediumIcons.svg);\n}\n\n.spritesheet-arrowicons {\n    background-image: url(Images/popoverArrows.png);\n}\n\n:host-context(.force-white-icons) [is=ui-icon].spritesheet-smallicons, .force-white-icons [is=ui-icon].spritesheet-smallicons, [is=ui-icon].force-white-icons.spritesheet-smallicons, -theme-preserve {\n    -webkit-mask-image: url(Images/smallIcons.svg);\n    -webkit-mask-position: var(--spritesheet-position);\n    background: #fafafa !important;\n}\n\n:host-context(.force-white-icons) [is=ui-icon].spritesheet-largeicons, .force-white-icons [is=ui-icon].spritesheet-largeicons, [is=ui-icon].force-white-icons.spritesheet-largeicons, -theme-preserve {\n    -webkit-mask-image: url(Images/largeIcons.svg);\n    -webkit-mask-position: var(--spritesheet-position);\n    background: #fafafa !important;\n}\n\n:host-context(.force-white-icons) [is=ui-icon].spritesheet-mediumicon, .force-white-icons [is=ui-icon].spritesheet-mediumicons, [is=ui-icon].force-white-icons.spritesheet-mediumicons, -theme-preserve {\n    -webkit-mask-image: url(Images/mediumIcons.svg);\n    -webkit-mask-position: var(--spritesheet-position);\n    background: #fafafa !important;\n}\n\n.expandable-inline-button {\n    background-color: #dedede;\n    color: #333;\n    cursor: pointer;\n    border-radius: 3px;\n}\n\n.undisplayable-text,\n.expandable-inline-button {\n    padding: 2px 4px;\n    margin: 0 2px;\n    font-size: 12px;\n    font-family: sans-serif;\n    white-space: nowrap;\n    display: inline-block;\n}\n\n.undisplayable-text::after,\n.expandable-inline-button::after {\n    content: attr(data-text);\n}\n\n.undisplayable-text {\n    color: rgb(128, 128, 128);\n    font-style: italic;\n}\n\n.expandable-inline-button:hover {\n    background-color: #d5d5d5;\n}\n\n.expandable-inline-button[data-keyboard-focus=\"true\"] {\n    background-color: #bbbbbb;\n}\n\n::selection {\n    background-color: #bbdefb;\n}\n\n.-theme-with-dark-background *::selection,\n:host-context(.-theme-with-dark-background) *::selection {\n    background-color: #9e9e9e;\n}\n\nbutton.link {\n    border: none;\n    background: none;\n    padding: 3px;\n}\n\nbutton.link[data-keyboard-focus=\"true\"]:focus {\n    background-color: rgba(0, 0, 0, 0.08);\n    border-radius: 2px;\n}\n\n/* See ARIAUtils.js */\n[data-aria-utils-animation-hack] {\n    animation: ANIMATION-HACK 0s;\n}\n@keyframes ANIMATION-HACK {\n}\n\n/*# sourceURL=ui/inspectorCommon.css */";Root.Runtime.cachedResources["ui/inspectorStyle.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n:root {\n    height: 100%;\n    overflow: hidden;\n}\n\n:root {\n    --accent-color: #1a73e8;\n    --accent-fg-color: #1a73e8;\n    --accent-color-hover: #3b86e8;\n    --active-control-bg-color: #5a5a5a;\n    --focus-bg-color: hsl(214, 40%, 92%);\n    --input-validation-error: #db1600;\n    --toolbar-bg-color: #f3f3f3;\n    --toolbar-hover-bg-color: #eaeaea;\n    --selection-fg-color: white;\n    --selection-inactive-fg-color: #5a5a5a;\n    --selection-inactive-bg-color: #dadada;\n    --tab-selected-fg-color: #333;\n    --tab-selected-bg-color: var(--toolbar-bg-color);\n    --drop-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05),\n                   0 2px 4px rgba(0, 0, 0, 0.2),\n                   0 2px 6px rgba(0, 0, 0, 0.1);\n    --divider-color: #d0d0d0;\n    --focus-ring-inactive-shadow: 0 0 0 1px #e0e0e0;\n    --item-selection-bg-color: #cfe8fc;\n    --item-selection-inactive-bg-color: #e0e0e0;\n}\n\n.-theme-with-dark-background {\n    --accent-color: #0e639c;\n    --accent-fg-color: #cccccc;\n    --accent-color-hover: rgb(17, 119, 187);\n    --active-control-bg-color: #cdcdcd;\n    --focus-bg-color: hsl(214, 19%, 27%);\n    --toolbar-bg-color: #333333;\n    --toolbar-hover-bg-color: #202020;\n    --selection-fg-color: #cdcdcd;\n    --selection-inactive-fg-color: #cdcdcd;\n    --selection-inactive-bg-color: hsl(0, 0%, 28%);\n    --tab-selected-fg-color: #eaeaea;\n    --tab-selected-bg-color: black;\n    --drop-shadow: 0 0 0 1px rgba(255, 255, 255, 0.2),\n                   0 2px 4px 2px rgba(0, 0, 0, 0.2),\n                   0 2px 6px 2px rgba(0, 0, 0, 0.1);\n    --divider-color: #525252;\n    --focus-ring-inactive-shadow: 0 0 0 1px #5a5a5a;\n    --item-selection-bg-color: hsl(207, 88%, 22%);\n    --item-selection-inactive-bg-color: #454545;\n}\n\n:root {\n    --focus-ring-active-shadow: 0 0 0 1px var(--accent-color);\n    --selection-bg-color: var(--accent-color);\n    --divider-border: 1px solid var(--divider-color);\n    --item-hover-color: rgba(56, 121, 217, 0.1);\n}\n\nbody {\n    height: 100%;\n    width: 100%;\n    position: relative;\n    overflow: hidden;\n    margin: 0;\n    cursor: default;\n    font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;\n    font-size: 12px;\n    tab-size: 4;\n    -webkit-user-select: none;\n    color: #222;\n    background: white;\n}\n\n.platform-linux {\n    color: rgb(48, 57, 66);\n    font-family: Roboto, Ubuntu, Arial, sans-serif;\n}\n\n.platform-mac {\n    color: rgb(48, 57, 66);\n    font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;\n}\n\n.platform-windows {\n    font-family: 'Segoe UI', Tahoma, sans-serif;\n}\n\n.panel {\n    display: flex;\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    z-index: 0;\n    background-color: white;\n}\n\n.panel-sidebar {\n    overflow-x: hidden;\n    background-color: var(--toolbar-bg-color);\n}\n\niframe.extension {\n    flex: auto;\n    width: 100%;\n    height: 100%;\n}\n\niframe.panel.extension {\n    display: block;\n    height: 100%;\n}\n\n/*# sourceURL=ui/inspectorStyle.css */";Root.Runtime.cachedResources["ui/inspectorSyntaxHighlight.css"]="/*\n * Copyright (C) 2009 Apple Inc.  All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n.cm-js-keyword {color: hsl(310, 86%, 36%);}\n.cm-js-number {color: hsl(248, 100%, 41%);}\n.cm-js-comment {color: hsl(120, 100%, 23%); font-style: italic;}\n.cm-js-string {color: hsl(1, 80%, 43%);}\n.cm-js-string-2 {color: hsl(1, 99%, 39%);}\n.cm-js-atom {color: hsl(310, 86%, 36%);}\n.cm-js-def {color: hsl(240, 73%, 38%);}\n.cm-js-operator {color: hsl(27, 100%, 30%);}\n.cm-js-meta {color: hsl(27, 100%, 30%);}\n.cm-js-variable-2 {color: hsl(240, 73%, 38%);}\n\n.cm-css-keyword { color: rgb(7, 144, 154);}\n.cm-css-number {color: rgb(50, 0, 255);}\n.cm-css-comment {color: rgb(0, 116, 0);}\n.cm-css-def {color: rgb(200, 0, 0);}\n.cm-css-meta {color: rgb(200, 0, 0);}\n.cm-css-atom {color: rgb(7, 144, 154);}\n.cm-css-string {color: rgb(7, 144, 154);}\n.cm-css-string-2 {color: rgb(7, 144, 154);}\n.cm-css-link {color: rgb(7, 144, 154);}\n.cm-css-variable {color: rgb(200, 0, 0);}\n.cm-css-variable-2 {color: rgb(0, 0, 128);}\n.cm-css-property, .webkit-css-property {color: rgb(200, 0, 0);}\n\n.cm-xml-meta {color: rgb(192, 192, 192);}\n.cm-xml-comment {color: rgb(35, 110, 37);}\n.cm-xml-string {color: rgb(26, 26, 166);}\n.cm-xml-tag {color: var(--dom-tag-name-color);}\n.cm-xml-attribute {color: rgb(153, 69, 0);}\n.cm-xml-link {color: #00e;}\n\n:root {\n    --dom-tag-name-color: rgb(136, 18, 128);\n    --dom-attribute-name-color: rgb(153, 69, 0);\n}\n\n.webkit-html-comment {\n    /* Keep this in sync with view-source.css (.webkit-html-comment) */\n    color: rgb(35, 110, 37);\n}\n\n.webkit-html-tag {\n    color: rgb(168, 148, 166);\n}\n\n.webkit-html-tag-name, .webkit-html-close-tag-name {\n    /* Keep this in sync with view-source.css (.webkit-html-tag) */\n    color: var(--dom-tag-name-color);\n}\n\n.webkit-html-pseudo-element {\n    /* This one is non-standard. */\n    color: brown;\n}\n\n.webkit-html-js-node,\n.webkit-html-css-node {\n    white-space: pre-wrap;\n}\n\n.webkit-html-text-node {\n    unicode-bidi: -webkit-isolate;\n}\n\n.webkit-html-entity-value {\n    /* This one is non-standard. */\n    background-color: rgba(0, 0, 0, 0.15);\n    unicode-bidi: -webkit-isolate;\n}\n\n.webkit-html-doctype {\n    /* Keep this in sync with view-source.css (.webkit-html-doctype) */\n    color: rgb(192, 192, 192);\n}\n\n.webkit-html-attribute-name {\n    /* Keep this in sync with view-source.css (.webkit-html-attribute-name) */\n    color: var(--dom-attribute-name-color);\n    unicode-bidi: -webkit-isolate;\n}\n\n.webkit-html-attribute-value {\n    /* Keep this in sync with view-source.css (.webkit-html-attribute-value) */\n    color: rgb(26, 26, 166);\n    unicode-bidi: -webkit-isolate;\n}\n\n.devtools-link {\n    color: rgb(17, 85, 204);\n    text-decoration: underline;\n}\n\n.devtools-link [is=ui-icon] {\n    vertical-align: middle;\n}\n\n.devtools-link[data-keyboard-focus=\"true\"]:focus {\n    outline-width: unset;\n}\n\n.devtools-link:not(.devtools-link-prevent-click) {\n    cursor: pointer;\n}\n\n.-theme-with-dark-background .devtools-link,\n:host-context(.-theme-with-dark-background) .devtools-link {\n    color: hsl(0, 0%, 67%);\n}\n\n/* Default CodeMirror Theme */\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-invalidchar {color: #f00;}\n\n.cm-header {color: blue;}\n.cm-quote {color: #090;}\n\n.cm-keyword {color: #708;}\n.cm-atom {color: #219;}\n.cm-number {color: #164;}\n.cm-def {color: #00f;}\n.cm-variable-2 {color: #05a;}\n.cm-variable-3, .cm-type {color: #085;}\n.cm-comment {color: #a50;}\n.cm-string {color: #a11;}\n.cm-string-2 {color: #f50;}\n.cm-meta {color: #555;}\n.cm-qualifier {color: #555;}\n.cm-builtin {color: #30a;}\n.cm-bracket {color: #997;}\n.cm-tag {color: #170;}\n.cm-attribute {color: #00c;}\n.cm-hr {color: #999;}\n.cm-link {color: #00c;}\n\n.cm-error {color: #f00;}\n\n/*# sourceURL=ui/inspectorSyntaxHighlight.css */";Root.Runtime.cachedResources["ui/inspectorSyntaxHighlightDark.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.cm-js-atom{color:rgb(161, 247, 181);}\n.cm-js-attribute{color:rgb(97, 148, 198);}\n.cm-js-builtin{color:rgb(159, 180, 214);}\n.cm-js-comment{color:rgb(116, 116, 116);}\n.cm-js-def{color:var(--dom-tag-name-color);}\n.cm-js-keyword{color:rgb(154, 127, 213);}\n.cm-js-link{color:rgb(159, 180, 214);}\n.cm-js-meta{color:rgb(221, 251, 85);}\n.cm-js-number{color:rgb(161, 247, 181);}\n.cm-js-operator{color:rgb(210, 192, 87);}\n.cm-js-property{color:rgb(210, 192, 87);}\n.cm-js-string{color:rgb(242, 139, 84);}\n.cm-js-string-2{color:rgb(242, 139, 84);}\n.cm-js-tag{color:var(--dom-tag-name-color);}\n.cm-js-variable{color:rgb(217, 217, 217);}\n.cm-js-variable-2{color:rgb(217, 217, 217);}\n.cm-atom{color:rgb(161, 247, 181);}\n.cm-comment{color:rgb(116, 116, 116);}\n.cm-variable{color:rgb(217, 217, 217);}\n.cm-string{color:rgb(242, 139, 84);}\n.cm-keyword{color:rgb(154, 127, 213);}\n.cm-number{color:rgb(161, 247, 181);}\n.cm-operator{color:rgb(210, 192, 87);}\n.cm-css-atom{color:rgb(217, 217, 217);}\n.cm-css-builtin{color:rgb(255, 163, 79);}\n.cm-css-def{color:rgb(255, 163, 79);}\n.cm-css-comment{color:rgb(116, 116, 116);}\n.cm-css-meta{color:rgb(132, 240, 255);}\n.cm-css-number{color:rgb(217, 217, 217);}\n.cm-css-operator{color:rgb(217, 217, 217);}\n.cm-css-property{color:rgb(132, 240, 255);}\n.cm-css-qualifier{color:rgb(255, 163, 79);}\n.cm-css-string{color:rgb(231, 194, 111);}\n.cm-css-string-2{color:rgb(217, 217, 217);}\n.cm-css-tag{color:rgb(255, 163, 79);}\n.cm-css-variable{color:rgb(255, 163, 79);}\n.cm-css-variable-2{color:rgb(255, 163, 79);}\n.cm-xml-comment{color:rgb(137, 137, 137);}\n.cm-xml-error{color:rgb(198, 95, 95);}\n.cm-xml-string{color:rgb(242, 151, 102);}\n.cm-xml-tag{color:var(--dom-tag-name-color);}\n.cm-xml-attribute{color:var(--dom-attribute-name-color);}\n.cm-xml-link{color:rgb(231, 194, 111);}\n\n.webkit-html-attribute-name{color:var(--dom-attribute-name-color);}\n.webkit-html-attribute-value{color:rgb(242, 151, 102);}\n.webkit-html-comment{color:rgb(137, 137, 137);}\n.devtools-link{color:rgb(231, 194, 111);}\n.webkit-html-tag{color:var(--dom-tag-name-color);}\n.webkit-html-tag-name{color:var(--dom-tag-name-color);}\n.webkit-html-close-tag-name{color:var(--dom-tag-name-color);}\n.webkit-html-text-node{color:rgb(207, 208, 208);}\n.webkit-html-css-node{color:rgb(207, 208, 208);}\n.webkit-html-js-node{color:rgb(207, 208, 208);}\n.webkit-html-pseudo-element{color:rgb(93, 175, 215);}\n.webkit-css-property{color: rgb(53, 212, 199);}\n\n.cm-def{color:var(--dom-tag-name-color);}\n.cm-header{color:var(--dom-tag-name-color);}\n.cm-variable-2{color:rgb(217, 217, 217);}\n\n.cm-variable-2 {color: #05a;}\n.cm-variable-3, .cm-type {color: rgb(93, 176, 215);}\n.cm-string {color: rgb(242, 139, 84);}\n.cm-meta {color: #555;}\n.cm-meta {color:rgb(221, 251, 85);}\n.cm-qualifier{color:rgb(255, 163, 79);}\n.cm-builtin{color:rgb(159, 180, 214);}\n.cm-bracket {color: #997;}\n.cm-tag{color:var(--dom-tag-name-color);}\n.cm-attribute{color:rgb(97, 148, 198);}\n.cm-hr {color: #999;}\n.cm-link{color:rgb(159, 180, 214);}\n\n:root {\n    --dom-tag-name-color: rgb(93, 176, 215);\n    --dom-attribute-name-color: rgb(155, 187, 220);\n}\n\n/*# sourceURL=ui/inspectorSyntaxHighlightDark.css */";Root.Runtime.cachedResources["ui/inspectorViewTabbedPane.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tabbed-pane-header-tab,\n.tabbed-pane-header-tab.selected {\n    height: 26px;\n    margin: 0;\n    border: none;\n    border-left: 2px solid transparent;\n    border-right: 2px solid transparent;\n}\n\n.tabbed-pane-header-tab.selected {\n    border-width: 0 2px 0 2px;\n}\n\n.tabbed-pane-header-contents {\n    margin-left: 0;\n}\n\n.tabbed-pane-left-toolbar {\n    margin-right: 0 !important;\n}\n\n/*# sourceURL=ui/inspectorViewTabbedPane.css */";Root.Runtime.cachedResources["ui/listWidget.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.list {\n    flex: auto 0 1;\n    overflow-y: auto;\n    border: 1px solid rgb(231, 231, 231);\n    flex-direction: column;\n}\n\n.list-separator {\n    background: rgb(231, 231, 231);\n    height: 1px;\n}\n\n.list-item {\n    flex: none;\n    min-height: 30px;\n    display: flex;\n    align-items: center;\n    position: relative;\n    overflow: hidden;\n}\n\n.list-item:hover {\n    background: hsl(0, 0%, 96%);\n}\n\n.list-widget-input-validation-error {\n    color: var(--input-validation-error);\n    margin: 0 5px;\n}\n\n.controls-container {\n    display: flex;\n    flex-direction: row;\n    justify-content: flex-end;\n    align-items: stretch;\n    pointer-events: none;\n}\n\n.controls-gradient {\n    flex: 0 1 50px;\n}\n\n.list-item:hover .controls-gradient {\n    background-image: linear-gradient(90deg, transparent, hsl(0, 0%, 96%));\n}\n\n.controls-buttons {\n    flex: none;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    pointer-events: auto;\n    visibility: hidden;\n}\n\n.list-item:hover .controls-buttons {\n    background-color: hsl(0, 0%, 96%);\n    visibility: visible;\n}\n\n.editor-container {\n    display: flex;\n    flex-direction: column;\n    align-items: stretch;\n    flex: none;\n    background: hsl(0, 0%, 96%);\n    overflow: hidden;\n}\n\n.editor-content {\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    align-items: stretch;\n}\n\n.editor-buttons {\n    flex: none;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    justify-content: flex-start;\n    padding: 5px;\n}\n\n.editor-buttons > button {\n    flex: none;\n    margin-right: 10px;\n}\n\n.editor-content input {\n    margin-right: 10px;\n}\n\n.editor-content input.error-input {\n    background-color: white;\n}\n\n/*# sourceURL=ui/listWidget.css */";Root.Runtime.cachedResources["ui/popover.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.widget {\n    display: flex;\n    background: white;\n    box-shadow: var(--drop-shadow);\n    border-radius: 2px;\n    overflow: auto;\n    -webkit-user-select: text;\n    line-height: 11px;\n}\n\n.widget.has-padding {\n    padding: 6px;\n}\n\n/*# sourceURL=ui/popover.css */";Root.Runtime.cachedResources["ui/progressIndicator.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.progress-indicator-shadow-stop-button {\n    background-color: rgb(216, 0, 0) !important;\n    border: 0;\n    width: 10px;\n    height: 12px;\n    border-radius: 2px;\n}\n\n.progress-indicator-shadow-container {\n    display: flex;\n    flex: 1 0 auto;\n    align-items: center;\n}\n\n.progress-indicator-shadow-container .title {\n    text-overflow: ellipsis;\n    overflow: hidden;\n    max-width: 150px;\n    margin-right: 2px;\n    color: #777;\n}\n\n.progress-indicator-shadow-container progress {\n    flex: auto;\n    margin: 0 2px;\n    width: 100px\n}\n\n/*# sourceURL=ui/progressIndicator.css */";Root.Runtime.cachedResources["ui/radioButton.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n::slotted(input.dt-radio-button) {\n    height: 17px;\n    width: 17px;\n    min-width: 17px;\n    border: 1px solid rgb(165, 165, 165);\n    background-image: linear-gradient(to bottom, rgb(252, 252, 252), rgb(223, 223, 223));\n    border-radius: 8px;\n    -webkit-appearance: none;\n    vertical-align: middle;\n    margin: 0 5px 5px 0;\n}\n\n::slotted(input.dt-radio-button:active:not(:disabled)) {\n    background-image: linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));\n}\n\n::slotted(input.dt-radio-button:checked) {\n    background: url(Images/radioDot.png) center no-repeat,\n                linear-gradient(to bottom, rgb(252, 252, 252), rgb(223, 223, 223));\n}\n\n::slotted(input.dt-radio-button:checked:active) {\n    background: url(Images/radioDot.png) center no-repeat,\n                linear-gradient(to bottom, rgb(194, 194, 194), rgb(239, 239, 239));\n}\n\n/*# sourceURL=ui/radioButton.css */";Root.Runtime.cachedResources["ui/remoteDebuggingTerminatedScreen.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.widget {\n    padding: 20px;\n}\n\n.message, .button {\n    font-size: larger;\n    white-space: pre;\n    margin: 5px;\n}\n\n.button {\n    text-align: center;\n    margin-top: 10px;\n}\n\n.reason {\n    color: #8b0000;\n}\n\n/*# sourceURL=ui/remoteDebuggingTerminatedScreen.css */";Root.Runtime.cachedResources["ui/reportView.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    background-color: #f9f9f9;\n}\n\n.report-content-box {\n    background-color: white;\n    white-space: nowrap;\n    overflow: auto;\n}\n\n.report-content-box.no-scroll {\n    overflow: visible;\n}\n\n.report-header {\n    border-bottom: 1px solid rgb(230, 230, 230);\n    padding: 12px 24px;\n}\n\n.report-header .toolbar {\n    margin-bottom: -8px;\n}\n\n.report-header .toolbar {\n    margin-top: 5px;\n    margin-left: -8px;\n}\n\n.report-title {\n    font-size: 15px;\n}\n\n.report-url, .report-subtitle {\n    font-size: 12px;\n    margin-top: 10px;\n}\n\n.report-section {\n    display: flex;\n    padding: 12px;\n    border-bottom: 1px solid rgb(230, 230, 230);\n    flex-direction: column;\n}\n\n.report-section-header {\n    margin-left: 18px;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n}\n\n.report-section-title {\n    flex: auto;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    font-weight: bold;\n    color: #555;\n}\n\n.report-field {\n    margin-top: 8px;\n    display: flex;\n    line-height: 28px;\n}\n\n.report-row {\n    margin: 10px 0 2px 18px;\n}\n\n.report-field-name {\n    color: #888;\n    flex: 0 0 128px;\n    text-align: right;\n    padding: 0 6px;\n    white-space: pre;\n}\n\n.report-field-value {\n    flex: auto;\n    padding: 0 6px;\n    white-space: pre;\n}\n\n.report-field-value-is-flexed {\n    display: flex;\n}\n\n.report-field-value-subtitle {\n    color: #888;\n    line-height: 14px;\n}\n\n.report-row-selectable {\n    user-select: text;\n}\n\n/*# sourceURL=ui/reportView.css */";Root.Runtime.cachedResources["ui/rootView.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.root-view {\n    background-color: white;\n    overflow: hidden;\n    position: absolute !important;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n}\n\n/*# sourceURL=ui/rootView.css */";Root.Runtime.cachedResources["ui/searchableView.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.search-bar {\n    flex: 0 0 31px;\n    background-color: #eee;\n    border-top: 1px solid #ccc;\n    display: flex;\n    overflow: hidden;\n    z-index: 0;\n}\n\n.search-bar.replaceable {\n    flex: 0 0 57px;\n}\n\n.search-replace {\n    -webkit-appearance: none;\n    border: 0;\n    padding: 0 3px;\n    margin: 0;\n    flex: 1;\n}\n\n.search-replace:focus {\n    outline: none;\n}\n\n.toolbar-search {\n    display: flex;\n    width: 100%;\n}\n\n.toolbar-search > div {\n    margin: 2px 2px;\n    flex-shrink: 0;\n}\n\n.toolbar-search-inputs {\n    flex-grow: 1;\n    min-width: 150px;\n}\n\n.toolbar-search-navigation-controls {\n    align-self: stretch;\n}\n\n.toolbar-search-navigation {\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    background-repeat: no-repeat;\n    background-position: 4px 7px;\n    border-left: 1px solid rgb(170, 170, 170);\n    opacity: 0.3;\n}\n\n.toolbar-search-navigation.enabled {\n    opacity: 1.0;\n}\n\n.toolbar-search button.search-action-button {\n    font-weight: 400;\n    height: 22px;\n    width: 87px;\n}\n\n.toolbar-search-control {\n    display: -webkit-flex;\n    position: relative;\n    background-color: white;\n}\n\n.toolbar-search-buttons {\n    display: flex;\n    flex-direction: column;\n}\n\n.toolbar-replace-control,\n#search-input-field {\n    margin-top: 1px;\n    line-height: 17px;\n}\n\n.toolbar-search-control, .toolbar-replace-control {\n    border: 1px solid rgb(163, 163, 163);\n    height: 22px;\n    border-radius: 2px;\n    width: 100%;\n    margin-top: 2px;\n    margin-bottom: 2px;\n}\n\n.toolbar-search-navigation.enabled:active {\n    background-position: 4px 7px, 0 0;\n}\n\n.toolbar-search-navigation.toolbar-search-navigation-prev {\n    background-image: url(Images/searchPrev.png);\n    border-left: 1px solid rgb(163, 163, 163);\n}\n\n:host-context(.-theme-with-dark-background) .toolbar-search-navigation {\n    -webkit-filter: invert(90%);\n}\n\n.toolbar-search-navigation.toolbar-search-navigation-prev.enabled:active {\n    background-image: url(Images/searchPrev.png), #f2f2f2;\n}\n\n.toolbar-search-navigation.toolbar-search-navigation-next {\n    background-image: url(Images/searchNext.png);\n    border-left: 1px solid rgb(230, 230, 230);\n}\n\n.toolbar-search-navigation.toolbar-search-navigation-next.enabled:active {\n    background-image: url(Images/searchNext.png), #f2f2f2;\n}\n\n.search-results-matches {\n    display: inline-block;\n    text-align: right;\n    padding: 0 4px;\n    color: rgb(165, 165, 165);\n    align-self: center;\n}\n\n.first-row-buttons {\n    display: flex;\n    justify-content: space-between;\n}\n\n.toolbar-search > .replace-toggle-toolbar {\n    margin: 2px -2px 0 0;\n}\n\n.toolbar-search-options {\n    margin: 0 auto;\n}\n\n/*# sourceURL=ui/searchableView.css */";Root.Runtime.cachedResources["ui/slider.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.dt-range-input {\n    -webkit-appearance: none;\n    margin: 0;\n    padding: 0;\n    height: 10px;\n    width: 88px;\n    outline: none;\n    background: none;\n}\n\n.dt-range-input::-webkit-slider-thumb, -theme-preserve {\n    -webkit-appearance: none;\n    margin: 0;\n    padding: 0;\n    border: 0;\n    width: 12px;\n    height: 12px;\n    margin-top: -5px;\n    border-radius: 50%;\n    background-color: #4285F4;\n}\n\n.dt-range-input::-webkit-slider-runnable-track {\n    -webkit-appearance: none;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    height: 2px;\n    background-color: rgba(0, 0, 0, 0.26);\n}\n\n.dt-range-input:focus::-webkit-slider-thumb, -theme-preserve {\n    box-shadow: 0 0 0 2px rgba(66, 133, 244, 0.4);\n}\n\n.dt-range-input:disabled::-webkit-slider-thumb {\n    background-color: #bdbdbd;\n}\n\n/*# sourceURL=ui/slider.css */";Root.Runtime.cachedResources["ui/smallBubble.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\ndiv {\n    display: inline-block;\n    height: 14px;\n    vertical-align: middle;\n    white-space: nowrap;\n    padding: 1px 4px;\n    text-align: left;\n    font-size: 11px;\n    line-height: normal;\n    font-weight: bold;\n    text-shadow: none;\n    color: white;\n    margin-top: -1px;\n    border-radius: 7px;\n}\n\ndiv.verbose {\n    background-color: rgb(0, 0, 255);\n}\n\ndiv.info {\n    background-color: rgb(128, 151, 189);\n}\n\ndiv.warning {\n    background-color: rgb(232, 164, 0);\n}\n\ndiv.error {\n    background-color: rgb(216, 35, 35);\n}\n\n/*# sourceURL=ui/smallBubble.css */";Root.Runtime.cachedResources["ui/segmentedButton.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.segmented-button {\n  align-items: center;\n  align-content: center;\n  display: flex;\n}\n\n.segmented-button-segment {\n  background-color: white;\n  border: var(--divider-border);\n  border-right-style: none;\n  color: #5a5a5a;\n  flex: 1 1 0;\n  font-weight: 700;\n  margin-left: -1px;\n  padding: 4px 16px;\n}\n\n.segmented-button-segment:hover {\n  background-color: #F4F4F4;\n  color: #333;\n}\n\n.segmented-button-segment:first-child {\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 4px;\n}\n\n.segmented-button-segment:last-child {\n  border-bottom-right-radius: 4px;\n  border-right-style: solid;\n  border-top-right-radius: 4px;\n}\n\n.segmented-button-segment.segmented-button-segment-selected {\n  background-color: hsl(218, 81%, 59%);\n  border-color: transparent;\n  color: #FAFAFA;\n}\n\n.segmented-button-segment.segmented-button-segment-selected:hover {\n  background-color: hsl(218, 81%, 62%);\n  color: #FFF;\n}\n\n/* Remove a border between the selected button and its siblin */\n.segmented-button-segment-selected + .segmented-button-segment {\n  border-left-color: transparent;\n}\n\n/*# sourceURL=ui/segmentedButton.css */";Root.Runtime.cachedResources["ui/softContextMenu.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.soft-context-menu {\n    overflow-y: auto;\n    min-width: 160px !important;\n    /* NOTE: Keep padding in sync with padding adjustment in SoftContextMenu.js */\n    padding: 4px 0 4px 0;\n    border: 1px solid #b9b9b9;\n    background-color: #FFF;\n    box-shadow: var(--drop-shadow);\n    --context-menu-hover-bg: #ebebeb;\n    --context-menu-hover-color: #222;\n    --context-menu-seperator-color: var(--divider-color);\n}\n\n:host:host-context(.platform-mac):host-context(html:not(.-theme-with-dark-background)) .soft-context-menu {\n    border: 1px solid rgba(196, 196, 196, 0.9);\n    border-top: 1px solid rgba(196, 196, 196, 0.5);\n    border-radius: 4px;\n    background-color: rgb(240, 240, 240);\n    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.25);\n    --context-menu-hover-color: #FFF;\n    --context-menu-seperator-color: rgb(222, 222, 222);\n}\n\n:host-context(.-theme-with-dark-background) .soft-context-menu {\n    --context-menu-hover-bg: var(--selection-bg-color);\n    --context-menu-hover-color: var(--selection-fg-color);\n    border: none;\n}\n\n.soft-context-menu-item {\n    display: flex;\n    width: 100%;\n    line-height: 14px;\n    font-size: 12px;\n    border-top: 1px solid transparent;\n    border-bottom: 1px solid transparent;\n    padding: 2px 7px 2px 8px;\n    margin: 0 13px 0 0;\n    white-space: nowrap;\n}\n\n.soft-context-menu-disabled {\n    color: #999;\n    pointer-events: none;\n}\n\n.soft-context-menu-separator {\n    height: 10px;\n    margin: 0 1px;\n}\n\n.soft-context-menu-separator > .separator-line {\n    margin: 0;\n    height: 5px;\n    border-bottom: 1px solid var(--context-menu-seperator-color);\n    pointer-events: none;\n}\n\n.soft-context-menu-item-mouse-over {\n    border-top: 1px solid var(--context-menu-hover-bg);\n    border-bottom: 1px solid var(--context-menu-hover-bg);\n    background-color: var(--context-menu-hover-bg);\n    color: var(--context-menu-hover-color);\n}\n\n:host:host-context(.platform-mac):host-context(html:not(.-theme-with-dark-background)) .soft-context-menu-item-mouse-over {\n    border-top: 1px solid transparent;\n    border-bottom: 1px solid transparent;\n    background-image: linear-gradient(to right, hsl(214, 81%, 60%), hsl(214, 100%, 56%));\n}\n\n:host:host-context(.platform-mac):host-context(html:not(.-theme-with-dark-background)) .separator-line {\n    border-width: 2px;\n}\n\n.soft-context-menu-item-submenu-arrow {\n    pointer-events: none;\n    font-size: 11px;\n    text-align: right;\n    align-self: center;\n    margin-left: auto;\n}\n\n.soft-context-menu-item-mouse-over .soft-context-menu-item-checkmark {\n    color: var(--selection-fg-color);\n}\n\n.soft-context-menu-custom-item {\n    display: inline-flex;\n    justify-content: center;\n    align-items: center;\n    flex: auto;\n}\n\n.soft-context-menu-shortcut {\n    color: gray;\n    pointer-events: none;\n    flex: 1 1 auto;\n    text-align: right;\n    padding-left: 10px;\n}\n\n.soft-context-menu-item-mouse-over .soft-context-menu-shortcut {\n    color: inherit;\n}\n\n.checkmark {\n    opacity: 0.7;\n    pointer-events: none;\n    margin: auto 5px auto 0px;\n}\n\n:host-context(.-theme-with-dark-background) .checkmark {\n    filter: invert(80%);\n}\n\n.soft-context-menu-item-mouse-over .checkmark {\n    opacity: 1;\n    filter: none;\n}\n\n/*# sourceURL=ui/softContextMenu.css */";Root.Runtime.cachedResources["ui/softDropDown.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.item.disabled {\n    opacity: 0.5;\n}\n\n.item-list {\n    background-color: white;\n    box-shadow: var(--drop-shadow);\n    overflow-x: hidden;\n    overflow-y: auto;\n    width: 100%;\n}\n\n.item.highlighted {\n    color: var(--selection-fg-color);\n    background-color: var(--selection-bg-color);\n}\n\n.list-container {\n    width: 100%;\n}\n\n/*# sourceURL=ui/softDropDown.css */";Root.Runtime.cachedResources["ui/softDropDownButton.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\nbutton.soft-dropdown {\n    height: 26px;\n    text-align: left;\n    position: relative;\n    border: none;\n    background: none;\n}\n\nbutton.soft-dropdown[disabled] {\n    opacity: .5;\n}\n\nbutton.soft-dropdown > .title {\n    padding-right: 5px;\n    width: 120px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\nbutton.soft-dropdown[data-keyboard-focus=\"true\"]:focus::before {\n    content: \"\";\n    position: absolute;\n    top: 2px;\n    left: 2px;\n    right: 2px;\n    bottom: 2px;\n    border-radius: 2px;\n    background: rgba(0, 0, 0, 0.08);\n}\n\n/*# sourceURL=ui/softDropDownButton.css */";Root.Runtime.cachedResources["ui/splitWidget.css"]="/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.\n * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n:host {\n    overflow: hidden;\n}\n\n.shadow-split-widget {\n    display: flex;\n    overflow: hidden;\n}\n\n.shadow-split-widget-contents {\n    display: flex;\n    position: relative;\n    flex-direction: column;\n    contain: layout size style;\n}\n\n.shadow-split-widget-sidebar {\n    flex: none;\n}\n\n.shadow-split-widget-main, .shadow-split-widget-sidebar.maximized {\n    flex: auto;\n}\n\n.shadow-split-widget.hbox > .shadow-split-widget-resizer {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    width: 6px;\n    z-index: 500;\n}\n\n.shadow-split-widget.vbox > .shadow-split-widget-resizer {\n    position: absolute;\n    left: 0;\n    right: 0;\n    height: 6px;\n    z-index: 500;\n}\n\n.shadow-split-widget.vbox > .shadow-split-widget-sidebar.no-default-splitter {\n    border: 0 !important;\n}\n\n.shadow-split-widget.vbox > .shadow-split-widget-sidebar:not(.maximized) {\n    border: 0;\n    border-top: 1px solid var(--divider-color);\n}\n\n.shadow-split-widget.vbox > .shadow-split-widget-sidebar:first-child:not(.maximized) {\n    border: 0;\n    border-bottom: 1px solid var(--divider-color);\n}\n\n.shadow-split-widget.hbox > .shadow-split-widget-sidebar:not(.maximized) {\n    border: 0;\n    border-left: 1px solid var(--divider-color);\n}\n\n.shadow-split-widget.hbox > .shadow-split-widget-sidebar:first-child:not(.maximized) {\n    border: 0;\n    border-right: 1px solid var(--divider-color);\n}\n\n:host-context(.disable-resizer-for-elements-hack) .shadow-split-widget-resizer {\n    pointer-events: none;\n}\n\n/*# sourceURL=ui/splitWidget.css */";Root.Runtime.cachedResources["ui/toolbar.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    flex: none;\n    padding: 0 2px;\n}\n\n.toolbar-shadow {\n    position: relative;\n    white-space: nowrap;\n    height: 26px;\n    overflow: hidden;\n    z-index: 12;\n    display: flex;\n    flex: none;\n    align-items: center;\n}\n\n.toolbar-shadow.wrappable {\n    flex-wrap: wrap;\n    overflow: visible;\n}\n\n.toolbar-shadow.toolbar-grow-vertical {\n    height: initial;\n}\n\n.toolbar-shadow.vertical {\n    flex-direction: column;\n    height: auto;\n    align-items: flex-start;\n}\n\n.toolbar-item {\n    position: relative;\n    display: flex;\n    background-color: transparent;\n    flex: none;\n    align-items: center;\n    justify-content: center;\n    padding: 0;\n    height: 26px;\n    border: none;\n    white-space: pre;\n}\n\n.toolbar-item,\n.toolbar-item .devtools-link {\n    color: #5a5a5a;\n}\n\nselect.toolbar-item:disabled {\n    opacity: 0.5;\n}\n\n.toolbar-dropdown-arrow {\n    background-color: #6D6D6D;\n    pointer-events: none;\n    flex: none;\n}\n\nselect.toolbar-item:disabled + .toolbar-dropdown-arrow {\n    opacity: 0.5;\n}\n\n/* Toolbar item */\n\n.toolbar-button {\n    white-space: nowrap;\n    overflow: hidden;\n    min-width: 28px;\n    background: transparent;\n    border-radius: 0;\n}\n\n.toolbar-text {\n    margin: 0 5px;\n    flex: none;\n    color: #5a5a5a;\n}\n\n.toolbar-text:empty {\n    margin: 0;\n}\n\n.toolbar-has-dropdown {\n    justify-content: space-between;\n    padding: 0 3px 0 5px;\n}\n\n.toolbar-has-dropdown .toolbar-text {\n    margin: 0 4px 0 0;\n    text-overflow: ellipsis;\n    flex: auto;\n    overflow: hidden;\n    text-align: right;\n}\n\n.toolbar-button.dark-text .toolbar-dropdown-arrow {\n    background-color: #333;\n}\n\n.toolbar-has-glyph .toolbar-text {\n    margin-left: -4px;\n}\n\n.toolbar-button:not(.toolbar-has-glyph):not(.toolbar-has-dropdown):not(.largeicon-menu) {\n    font-weight: bold;\n}\n\n.toolbar-render-as-links * {\n    font-weight: initial;\n    color: rgb(17, 85, 204);\n    text-decoration: underline;\n    cursor: pointer;\n}\n\n.toolbar-toggled-gray:not(.toolbar-render-as-links) .toolbar-button:not(.toolbar-has-glyph):not(.toolbar-has-dropdown):not(.largeicon-menu):hover {\n    background-color: var(--toolbar-bg-color);\n}\n\n.toolbar-glyph {\n    background-color: #5a5a5a;\n    flex: none;\n}\n\n/* Button */\n\n.toolbar-button:disabled {\n    opacity: 0.5;\n}\n\n.toolbar-button.dark-text .toolbar-text{\n    color: #333 !important;\n}\n\n:not(.toolbar-render-as-links) .toolbar-button:enabled:hover:not(:active) .toolbar-glyph {\n    background-color: #333;\n}\n\n:not(.toolbar-render-as-links) .toolbar-button:enabled:hover:not(:active) .toolbar-text {\n    color: #333;\n}\n\n.toolbar-button.toolbar-state-on .toolbar-glyph,\n.toolbar-blue-on-hover .toolbar-button:not(.toolbar-state-on):enabled:hover:not(:active) {\n    background-color: var(--accent-color);\n}\n\n.toolbar-button.toolbar-state-on .toolbar-text {\n    color: var(--accent-color);\n}\n\n.toolbar-blue-on-hover .toolbar-button:not(.toolbar-state-on):enabled:hover .toolbar-glyph {\n    background-color: white;\n}\n\n.toolbar-blue-on-hover .toolbar-button:not(.toolbar-state-on):enabled:hover .toolbar-text {\n    color: white;\n}\n\n.toolbar-button.toolbar-state-on:enabled:hover:not(:active) .toolbar-glyph,\n.toolbar-blue-on-hover .toolbar-button:not(.toolbar-state-on):enabled:active:hover {\n    background-color: var(--accent-color);\n}\n\n.toolbar-button.toolbar-state-on:enabled:hover:not(:active) .toolbar-text {\n    color: var(--accent-color);\n}\n\n.toolbar-toggled-gray .toolbar-button.toolbar-state-on {\n    background-color: var(--toolbar-bg-color) !important;\n}\n\n.toolbar-button.toolbar-state-on.toolbar-toggle-with-red-color .toolbar-glyph,\n.toolbar-button.toolbar-state-off.toolbar-default-with-red-color .toolbar-glyph {\n    background-color: rgb(216, 0, 0) !important;\n}\n\n:host-context(.-theme-with-dark-background) .toolbar-button.toolbar-state-on.toolbar-toggle-with-red-color .toolbar-glyph,\n:host-context(.-theme-with-dark-background) .toolbar-button.toolbar-state-off.toolbar-default-with-red-color .toolbar-glyph {\n    background-color: hsl(0, 100%, 65%) !important;\n}\n\n\n/* Checkbox */\n\n.toolbar-item.checkbox {\n    padding: 0 5px 0 2px;\n}\n\n.toolbar-item.checkbox:hover {\n    color: #333;\n}\n\n/* Select */\n\n.toolbar-select-container {\n    display: inline-flex;\n    flex-shrink: 0;\n    margin-right: 6px;\n}\n\nselect.toolbar-item {\n    min-width: 38px;\n    -webkit-appearance: none;\n    border: 0;\n    border-radius: 0;\n    padding: 0 13px 0 5px;\n    margin-right: -10px;\n    position: relative;\n    height: 22px;\n    margin-top: 2px;\n    margin-bottom: 2px;\n}\n\nselect.toolbar-item[data-keyboard-focus=\"true\"]:focus {\n    background: rgba(0, 0, 0, 0.08);\n    border-radius: 2px;\n}\n\nselect.toolbar-item[data-keyboard-focus=\"true\"]:focus > * {\n    background: white;\n}\n\n/* Input */\n\n.toolbar-input {\n    width: 120px;\n    height: 19px;\n    padding: 4px 3px 3px 3px;\n    margin: 1px 3px;\n    background-color: white;\n    border: 1px solid transparent ;\n    min-width: 35px;\n}\n\n.toolbar-input:hover {\n    box-shadow: var(--focus-ring-inactive-shadow);\n}\n\n.toolbar-input.focused,\n.toolbar-input:not(.toolbar-input-empty) {\n    box-shadow: var(--focus-ring-active-shadow);\n}\n\n.toolbar-input > input {\n    border: none;\n    flex-grow: 1;\n}\n\n.toolbar-input-clear-button {\n    opacity: 0.7;\n    flex-basis: 13px;\n    flex-shrink: 0;\n    height: 16px;\n}\n\n.toolbar-input-clear-button:hover {\n    opacity: .99;\n}\n\n.toolbar-input-empty .toolbar-input-clear-button {\n    display: none;\n}\n\n.toolbar-prompt-proxy {\n    flex: 1;\n}\n\n.toolbar-input-prompt {\n    flex: 1;\n    overflow: hidden;\n    white-space: nowrap;\n    cursor: auto;\n}\n\n/* Separator */\n\n.toolbar-divider {\n    background-color: #ccc;\n    width: 1px;\n    margin: 5px 4px;\n    height: 16px;\n}\n\n.toolbar-spacer {\n    flex: auto;\n}\n\n/* Long click */\n\n.long-click-glyph {\n    position: absolute;\n    background-color: #5a5a5a;\n    top: 0;\n    left:  0;\n}\n\n.toolbar-button.emulate-active {\n    background-color: rgb(163, 163, 163);\n}\n\n.toolbar-button[data-keyboard-focus=\"true\"]:focus::after {\n    position: absolute;\n    top: 2px;\n    bottom: 2px;\n    left: 2px;\n    right: 2px;\n    background-color: rgba(0, 0, 0, 0.08);\n    border-radius: 2px;\n    content: \"\";\n}\n\n.toolbar-shadow.floating {\n    flex-direction: column;\n    height: auto;\n    background-color: white;\n    border: 1px solid #ccc;\n    margin-top: -1px;\n    width: 28px;\n    left: -2px;\n}\n\ninput[is=history-input] {\n    border: none;\n    line-height: 16px;\n    padding: 1px;\n}\n\ninput[is=history-input]:hover {\n    box-shadow: var(--focus-ring-inactive-shadow);\n}\n\ninput[is=history-input]:focus,\ninput[is=history-input]:not(:placeholder-shown) {\n    box-shadow: var(--focus-ring-active-shadow);\n}\n\n.toolbar-item.warning {\n    background: hsl(0, 100%, 95%);\n}\n\n/*# sourceURL=ui/toolbar.css */";Root.Runtime.cachedResources["ui/suggestBox.css"]="/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n:host {\n    display: flex;\n    flex: auto;\n}\n\n.suggest-box {\n    flex: auto;\n    background-color: #FFFFFF;\n    pointer-events: auto;\n    margin-left: -3px;\n    box-shadow: var(--drop-shadow);\n    overflow-x: hidden;\n}\n\n.suggest-box-content-item {\n    padding: 1px 0 1px 1px;\n    margin: 0;\n    border: 1px solid transparent;\n    white-space: nowrap;\n    display: flex;\n}\n\n.suggest-box-content-item.secondary {\n    background-color: #f9f9f9;\n}\n\n.suggestion-title {\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.suggestion-title span {\n    white-space: pre;\n}\n\n.suggestion-subtitle {\n    flex: auto;\n    text-align: right;\n    color: #999;\n    margin-right: 3px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.suggestion-icon {\n    user-select: none;\n    align-self: center;\n    flex-shrink: 0;\n}\n\n.suggest-box-content-item .query {\n    font-weight: bold;\n}\n\n.suggest-box-content-item .spacer {\n    display: inline-block;\n    width: 20px;\n}\n\n.suggest-box-content-item.selected {\n    background-color: var(--selection-bg-color);\n}\n\n.suggest-box-content-item.selected > span {\n    color: var(--selection-fg-color);\n}\n\n.suggest-box-content-item:hover:not(.selected) {\n    background-color: var(--item-hover-color);\n}\n\n/*# sourceURL=ui/suggestBox.css */";Root.Runtime.cachedResources["ui/tabbedPane.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC.\n * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.tabbed-pane {\n    flex: auto;\n    overflow: hidden;\n}\n\n.tabbed-pane-content {\n    position: relative;\n    overflow: auto;\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n}\n\n.tabbed-pane-content.has-no-tabs {\n    background-color: lightgray;\n}\n\n.tabbed-pane-placeholder {\n    font-size: 14px;\n    text-align: center;\n    width: fit-content;\n    margin: 20px auto 0px;\n    text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0;\n    line-height: 28px;\n    overflow: hidden;\n}\n\n.tabbed-pane-placeholder-row {\n    display: flex;\n    white-space: nowrap;\n}\n\n.tabbed-pane-placeholder-row[data-keyboard-focus=\"true\"]:focus {\n  outline-width: unset;\n}\n\n.tabbed-pane-placeholder-key {\n    flex: 1;\n    text-align: right;\n    padding-right: 14px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.tabbed-pane-no-shortcut {\n  flex: 1;\n  text-align: center;\n}\n\n.tabbed-pane-placeholder-value {\n    flex: 1;\n    text-align: left;\n    padding-left: 14px;\n}\n\n.tabbed-pane-header {\n    display: flex;\n    flex: 0 0 27px;\n    border-bottom: 1px solid #ccc;\n    overflow: visible;\n    width: 100%;\n    background-color: var(--toolbar-bg-color);\n}\n\n.tabbed-pane-header-contents {\n    flex: auto;\n    pointer-events: none;\n    margin-left: 0;\n    position: relative;\n}\n\n.tabbed-pane-header-contents > * {\n    pointer-events: initial;\n}\n\n.tabbed-pane-header-tab-icon {\n    min-width: 14px;\n    display: flex;\n    align-items: center;\n    margin-right: 2px;\n}\n\n.tabbed-pane-header-tab {\n    float: left;\n    padding: 2px 0.8em;\n    height: 26px;\n    line-height: 15px;\n    white-space: nowrap;\n    cursor: default;\n    display: flex;\n    align-items: center;\n    color: #5a5a5a;\n}\n\n.tabbed-pane-header-tab.closeable {\n    padding-right: 4px;\n}\n\n.tabbed-pane-header-tab:hover,\n.tabbed-pane-shadow .tabbed-pane-header-tab[data-keyboard-focus=\"true\"]:focus {\n    color: #333;\n    background-color: var(--toolbar-hover-bg-color);\n}\n\n.tabbed-pane-header-tab-title {\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.tabbed-pane-header-tab.measuring {\n    visibility: hidden;\n}\n\n.tabbed-pane-header-tab.selected {\n    border-bottom: none;\n}\n\n.tabbed-pane-header-tab.selected {\n    background-color: var(--tab-selected-bg-color);\n    color: var(--tab-selected-fg-color);\n}\n\n.tabbed-pane-header-tab.dragging {\n    position: relative;\n    box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);\n    background-color: #e5e5e5;\n}\n\n.tabbed-pane-header-tab .tabbed-pane-close-button {\n    margin: 0 -3px 0 4px;\n    visibility: hidden;\n}\n\n.tabbed-pane-header-tab:hover .tabbed-pane-close-button,\n.tabbed-pane-header-tab.selected .tabbed-pane-close-button {\n    visibility: visible;\n}\n\n.tabbed-pane-header-tabs-drop-down-container {\n    float: left;\n    opacity: 0.8;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    height: 100%;\n}\n\n.tabbed-pane-header-tabs-drop-down-container > .chevron-icon {\n    background-color: hsla(0,0%,20%,1);\n    display: block;\n}\n\n.tabbed-pane-header-tabs-drop-down-container:hover,\n.tabbed-pane-header-tabs-drop-down-container[data-keyboard-focus=\"true\"]:focus {\n    background-color: rgba(0, 0, 0, 0.08);\n}\n\n.tabbed-pane-header-tabs-drop-down-container.measuring {\n    visibility: hidden;\n}\n\n.tabbed-pane-header-tabs-drop-down-container:active {\n    opacity: 0.8;\n}\n\n/* Web page style */\n\n.tabbed-pane-shadow.vertical-tab-layout {\n    flex-direction: row !important;\n}\n\n.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header {\n    background-color: transparent;\n    border: none transparent !important;\n    width: auto;\n    flex: 0 0 auto;\n    flex-direction: column;\n    padding-top: 10px;\n    overflow: hidden;\n}\n\n.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-content {\n    padding: 10px 10px 10px 0;\n    overflow-x: hidden;\n}\n\n.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-contents {\n    margin: 0;\n    flex: none;\n}\n\n.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-tabs {\n    display: flex;\n    flex-direction: column;\n    width: 120px;\n}\n\n.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-tab {\n    background-color: transparent;\n    border: none transparent;\n    font-weight: normal;\n    text-shadow: none;\n    color: #777;\n    height: 26px;\n    padding-left: 10px;\n    border-left: 6px solid transparent;\n    margin: 0;\n    display: flex;\n    align-items: center;\n}\n\n.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-tab:not(.selected) {\n    cursor: pointer !important;\n}\n\n.tabbed-pane-shadow.vertical-tab-layout .tabbed-pane-header-tab.selected {\n    color: inherit;\n    border: none transparent;\n    border-left: 6px solid #666;\n}\n\n.tabbed-pane-tab-slider {\n    height: 2px;\n    position: absolute;\n    bottom: -1px;\n    background-color: var(--accent-color);\n    left: 0;\n    z-index: 50;\n    transform-origin: 0 100%;\n    transition: transform 150ms cubic-bezier(0, 0, 0.2, 1);\n    visibility: hidden;\n}\n\n:host-context(.-theme-with-dark-background) .tabbed-pane-tab-slider {\n    display: none;\n}\n\n@media (-webkit-min-device-pixel-ratio: 1.1) {\n    .tabbed-pane-tab-slider {\n        border-top: none;\n    }\n}\n\n.tabbed-pane-tab-slider.enabled {\n    visibility: visible;\n}\n\n.tabbed-pane-header-tab.disabled {\n    opacity: 0.5;\n    pointer-events: none;\n}\n\n.tabbed-pane-left-toolbar {\n    margin-right: -4px;\n    flex: none;\n}\n\n.tabbed-pane-right-toolbar {\n    margin-left: -4px;\n    flex: none;\n}\n\n/*# sourceURL=ui/tabbedPane.css */";Root.Runtime.cachedResources["ui/targetCrashedScreen.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.widget {\n    padding: 25px;\n}\n\n.message {\n    font-size: larger;\n    white-space: pre;\n    margin: 5px;\n}\n\n/*# sourceURL=ui/targetCrashedScreen.css */";Root.Runtime.cachedResources["ui/textButton.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.text-button {\n    margin: 2px;\n    height: 24px;\n    font-size: 12px;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    border-radius: 4px;\n    padding: 0px 12px;\n    font-weight: 500;\n    color: var(--accent-fg-color);\n    background-color: #fff;\n    flex: none;\n    white-space: nowrap;\n}\n\n.text-button:not(:disabled):focus,\n.text-button:not(:disabled):hover,\n.text-button:not(:disabled):active {\n    background-color: var(--toolbar-bg-color);\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n    cursor: pointer;\n}\n\n.text-button:not(:disabled):active {\n    background-color: #f2f2f2;\n}\n\n.text-button:not(:disabled):focus {\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(66, 133, 244, 0.4);\n}\n\n.text-button:disabled {\n    opacity: 0.38;\n}\n\n.text-button.primary-button, -theme-preserve {\n    background-color: var(--accent-color);\n    border: none;\n    color: #fff;\n}\n\n.text-button.link-style {\n  background: none;\n  border: none;\n  padding: 0!important;\n  font: inherit;\n  cursor: pointer;\n  height: 18px;\n}\n\n.text-button.primary-button:not(:disabled):focus,\n.text-button.primary-button:not(:disabled):hover,\n.text-button.primary-button:not(:disabled):active, -theme-preserve {\n    background-color: var(--accent-color-hover);\n}\n\n.-theme-with-dark-background .text-button:not(.primary-button):not(:disabled):focus,\n.-theme-with-dark-background .text-button:not(.primary-button):not(:disabled):hover,\n.-theme-with-dark-background .text-button:not(.primary-button):not(:disabled):active {\n    background-color: #313131;\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n.-theme-with-dark-background .text-button:not(.primary-button):not(:disabled):focus {\n    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(94, 151, 246, 0.6);\n}\n\n.-theme-with-dark-background .text-button:not(.primary-button):not(:disabled):active {\n    background-color: #3e3e3e;\n}\n\n/*# sourceURL=ui/textButton.css */";Root.Runtime.cachedResources["ui/textPrompt.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n .text-prompt-root {\n    display: flex;\n    align-items: center;\n}\n\n.text-prompt-editing {\n    box-shadow: var(--drop-shadow);\n    background-color: white;\n    text-overflow: clip !important;\n    padding-left: 2px;\n    margin-left: -2px;\n    padding-right: 2px;\n    margin-right: -2px;\n    margin-bottom: -1px;\n    padding-bottom: 1px;\n    opacity: 1.0 !important;\n}\n\n.text-prompt-editing > .text-prompt {\n    color: #222 !important;\n    text-decoration: none !important;\n    white-space: pre;\n}\n\n.text-prompt > .auto-complete-text {\n    color: rgb(128, 128, 128) !important;\n}\n\n.text-prompt[data-placeholder]:empty::before {\n    content: attr(data-placeholder);\n    color: rgb(128, 128, 128);\n}\n\n.text-prompt:not([data-placeholder]):empty::after {\n    content: '\\00A0';\n    width: 0;\n    display: block;\n}\n\n.text-prompt {\n    cursor: text;\n    overflow-x: visible;\n}\n\n.text-prompt::-webkit-scrollbar {\n    display: none;\n}\n\n.text-prompt.disabled {\n    opacity: 0.5;\n    cursor: default;\n}\n\n.text-prompt-editing br {\n    display: none;\n}\n\n.text-prompt-root:not(:focus-within) ::selection {\n    background: transparent;\n}\n\n/*# sourceURL=ui/textPrompt.css */";Root.Runtime.cachedResources["ui/tooltip.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tooltip {\n    background: hsl(0, 0%, 95%);\n    border-radius: 2px;\n    color: hsl(0, 0%, 20%);\n    padding: 5px 8px;\n    line-height: 14px;\n    display: flex;\n    align-items: center;\n    -webkit-filter: drop-shadow(0 1px 2px hsla(0, 0%, 0%, 0.3));\n    border: 1px solid hsla(0, 0%, 0%, 0.1);\n    background-clip: padding-box;\n    box-sizing: border-box;\n    position: absolute;\n    visibility: hidden;\n    transition: visibility 0s 100ms, opacity 150ms cubic-bezier(0, 0, .2, 1);\n    z-index: 20001;\n    top: 0;\n    left: 0;\n    opacity: 0;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    pointer-events: none;\n}\n\n.tooltip-breakword {\n    word-break: break-word;\n}\n\n.tooltip.shown {\n    visibility: visible;\n    transition-delay: 600ms;\n    opacity: 1;\n}\n\n.tooltip.shown.instant {\n    transition-delay: 0s;\n}\n\n.tooltip-shortcut {\n    color: hsl(0, 0%, 45%);\n    display: inline-block;\n    margin-left: 8px;\n    flex: 0 0 auto;\n}\n\n/*# sourceURL=ui/tooltip.css */";Root.Runtime.cachedResources["ui/treeoutline.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    flex: 1 1 auto;\n    padding: 2px 0 0 0;\n}\n\n.tree-outline-disclosure:not(.tree-outline-disclosure-hide-overflow) {\n    min-width: 100%;\n    display: inline-block;\n}\n\n.tree-outline {\n    padding: 0 0 4px 4px;\n    margin: 0;\n    z-index: 0;\n    position: relative;\n}\n\n.tree-outline[data-keyboard-focus=\"true\"] {\n    box-shadow: 0px 0px 0px 2px var(--accent-color) inset;\n}\n\n.tree-outline:not(.hide-selection-when-blurred) li.hovered:not(.selected) .selection {\n    display: block;\n    left: 3px;\n    right: 3px;\n    background-color: var(--item-hover-color);\n    border-radius: 5px;\n}\n\n.tree-outline li .selection {\n    display: none;\n    z-index: -1;\n    margin-left: -10000px;\n}\n\n.tree-outline:not(.hide-selection-when-blurred) li.selected {\n    color: var(--selection-inactive-fg-color);\n}\n\n.tree-outline:not(.hide-selection-when-blurred) li.selected .selection {\n    display: block;\n    background-color: var(--selection-inactive-bg-color);\n}\n\n.tree-outline:not(.hide-selection-when-blurred) li.in-clipboard .highlight {\n    outline: 1px dotted darkgrey;\n}\n\n.tree-outline:not(.hide-selection-when-blurred) li.elements-drag-over .selection {\n    display: block;\n    margin-top: -2px;\n    border-top: 2px solid;\n    border-top-color: var(--selection-bg-color);\n}\n\nol.tree-outline:not(.hide-selection-when-blurred) li.selected:focus .selection {\n    background-color: var(--selection-bg-color);\n}\n\nol.tree-outline:not(.hide-selection-when-blurred) li.parent.selected:focus::before {\n    background-color: var(--selection-fg-color);\n}\n\nol.tree-outline,\n.tree-outline ol {\n    list-style-type: none;\n}\n\n.tree-outline ol {\n    padding-left: 12px;\n}\n\n.tree-outline li {\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    position: relative;\n    display: flex;\n    align-items: center;\n    min-height: 16px;\n}\n\nol.tree-outline:not(.hide-selection-when-blurred) li.selected:focus {\n    color: var(--selection-fg-color);\n}\n\nol.tree-outline:not(.hide-selection-when-blurred) li.selected:focus * {\n    color: inherit;\n}\n\n.tree-outline li .icons-container {\n    align-self: center;\n    display: flex;\n    align-items: center;\n}\n\n.tree-outline li .leading-icons {\n    margin-right: 4px;\n}\n\n.tree-outline li .trailing-icons {\n    margin-left: 4px;\n}\n\n.tree-outline li::before {\n    -webkit-user-select: none;\n    -webkit-mask-image: url(Images/treeoutlineTriangles.svg);\n    -webkit-mask-size: 32px 24px;\n    content: \"\\00a0\\00a0\";\n    text-shadow: none;\n    margin-right: -2px;\n    height: 12px;\n    width: 13px;\n}\n\n.tree-outline li:not(.parent)::before {\n    background-color: transparent;\n}\n\n.tree-outline li::before {\n    -webkit-mask-position: 0 0;\n    background-color: #727272;\n}\n\n.tree-outline li.parent.expanded::before {\n    -webkit-mask-position: -16px 0;\n}\n\n.tree-outline ol.children {\n    display: none;\n}\n\n.tree-outline ol.children.expanded {\n    display: block;\n}\n\n.tree-outline.tree-outline-dense li {\n    margin-top: 1px;\n    min-height: 12px;\n}\n\n.tree-outline.tree-outline-dense li.parent {\n    margin-top: 0;\n}\n\n.tree-outline.tree-outline-dense li.parent::before {\n    top: 0;\n}\n\n.tree-outline.tree-outline-dense ol {\n    padding-left: 10px;\n}\n\n.tree-outline.hide-selection-when-blurred .selected:focus[data-keyboard-focus=\"true\"] {\n    background: var(--focus-bg-color);\n    border-radius: 2px;\n}\n\n.tree-outline-disclosure:not(.tree-outline-disclosure-hide-overflow) .tree-outline.hide-selection-when-blurred .selected:focus[data-keyboard-focus=\"true\"] {\n    width: fit-content;\n    padding-right: 3px;\n}\n\n/*# sourceURL=ui/treeoutline.css */";Root.Runtime.cachedResources["ui/viewContainers.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.expandable-view-title {\n    display: flex;\n    align-items: center;\n    background-color: var(--toolbar-bg-color);\n    height: 22px;\n    padding: 0 5px;\n    border-top: var(--divider-border);\n    white-space: nowrap;\n    overflow: hidden;\n    position: relative;\n    border-bottom: 1px solid transparent;\n}\n\n.expandable-view-title.expanded,\n.expandable-view-title:last-child {\n    border-bottom: 1px solid #ddd;\n}\n\n.expandable-view-title .toolbar {\n    margin-top: -3px;\n}\n\n.expandable-view-title:not(.expanded) .toolbar {\n    display: none;\n}\n\n.title-expand-icon {\n    margin-right: 2px;\n    margin-bottom: -2px;\n}\n\n.expandable-view-title[data-keyboard-focus=\"true\"]:focus {\n    background-color: #e0e0e0;\n}\n\n.expandable-view-title > .toolbar {\n    position: absolute;\n    right: 0;\n    top: 0;\n}\n\n\n/*# sourceURL=ui/viewContainers.css */";Root.Runtime.cachedResources["components/imagePreview.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.image-preview-container {\n    background: transparent;\n    text-align: center;\n    border-spacing: 0;\n}\n\n.image-preview-container img {\n    margin: 2px auto;\n    max-width: 100px;\n    max-height: 100px;\n    background-image: url(Images/checker.png);\n    -webkit-user-select: text;\n    -webkit-user-drag: auto;\n}\n\n.image-container {\n    padding: 0;\n}\n\n/*# sourceURL=components/imagePreview.css */";Root.Runtime.cachedResources["components/jsUtils.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n  display: inline;\n}\n\n.stack-preview-async-description {\n    padding: 3px 0 1px;\n    font-style: italic;\n}\n\n.stack-preview-container .webkit-html-blackbox-link {\n    opacity: 0.6;\n}\n\n.stack-preview-container > tr {\n    height: 16px;\n    line-height: 16px;\n}\n\n.stack-preview-container td {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.stack-preview-container .function-name {\n    max-width: 80em;\n}\n\n.stack-preview-container:not(.show-blackboxed) > tr.blackboxed {\n    display: none;\n}\n\n.stack-preview-container.show-blackboxed > tr.show-blackboxed-link {\n    display: none;\n}\n\n.stack-preview-container > tr.show-blackboxed-link {\n    font-style: italic;\n}\n\n/*# sourceURL=components/jsUtils.css */";Root.Runtime.cachedResources["persistence/editFileSystemView.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.file-system-header {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    flex: auto;\n    margin: 10px 0;\n}\n\n.file-system-header-text {\n    flex: 1 0 auto;\n}\n\n.add-button {\n    margin-left: 10px;\n    align-self: flex-start;\n}\n\n.file-system-list {\n    flex: auto;\n}\n\n.file-system-list-empty {\n    flex: auto;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n}\n\n.file-system-list-item {\n    padding: 3px 5px 3px 5px;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    flex: auto 1 1;\n}\n\n.list-item .file-system-value {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    -webkit-user-select: none;\n    overflow: hidden;\n}\n\n.file-system-value {\n    flex: 1 1 0px;\n}\n\n.file-system-edit-row {\n    flex: none;\n    display: flex;\n    flex-direction: row;\n    margin: 6px 5px;\n    align-items: center;\n}\n\n.file-system-edit-row input {\n    width: 100%;\n    text-align: inherit;\n}\n\n/*# sourceURL=persistence/editFileSystemView.css */";Root.Runtime.cachedResources["persistence/workspaceSettingsTab.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\nheader {\n    padding: 0 0 6px;\n    border-bottom: 1px solid #EEEEEE;\n}\n\nheader > h1 {\n    font-size: 18px;\n    font-weight: normal;\n    margin: 0;\n    padding-bottom: 3px;\n}\n\n.settings-content {\n    overflow-y: auto;\n    overflow-x: hidden;\n    margin: 8px 8px 8px 0;\n    padding: 0 4px;\n    flex: auto;\n}\n\n.settings-container {\n    width: 100%;\n    -webkit-column-width: 288px;\n}\n\n\n.settings-tab.settings-container {\n    -webkit-column-width: 308px;\n}\n\n.settings-tab label {\n    padding-right: 4px;\n    display: inline-flex;\n}\n\n.settings-container-wrapper {\n    position: absolute;\n    top: 31px;\n    left: 0px;\n    right: 0;\n    bottom: 0;\n    overflow: auto;\n    padding-top: 9px;\n}\n\n.settings-tab.settings-content {\n    margin: 0;\n    padding: 0;\n}\n\n.settings-tab p {\n    margin: 12px 0;\n}\n\np.folder-exclude-pattern {\n    display: flex;\n    align-items: center;\n}\n\np.folder-exclude-pattern > input {\n    flex: auto;\n}\n\n.settings-tab .file-system-container {\n    border-top: 1px solid #aaa;\n    padding: 19px 0 10px;\n    margin: 20px 0;\n}\n\n.settings-tab .file-system-header {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n}\n\n.settings-tab .file-system-name {\n    font-weight: bold;\n    flex: none;\n    margin-right: 10px;\n    font-size: 15px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    max-width: 70%;\n}\n\n.settings-tab .file-system-path {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    flex: auto;\n}\n\n.settings-info-message {\n    background-color: #eee;\n    padding: 10px;\n    margin: 20px 0;\n}\n\n.settings-tab.settings-content.settings-container {\n    -webkit-column-width: initial;\n    overflow: hidden;\n    padding-right: 10px;\n}\n\n/*# sourceURL=persistence/workspaceSettingsTab.css */";Root.Runtime.cachedResources["console_counters/errorWarningCounter.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    cursor: pointer;\n    padding: 0 2px;\n    min-width: 26px;\n}\n\n:host:hover {\n    color: #333;\n}\n\n.counter-item {\n    margin-left: 6px;\n}\n\n.counter-item.counter-item-first {\n    margin-left: 0;\n}\n\n/*# sourceURL=console_counters/errorWarningCounter.css */";<!--
 * Copyright 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' ">
    <script type="module" src="root.js"></script>
    <script defer src="toolbox.js"></script>
    <script type="module">Root.Runtime.startApplication('toolbox');</script>
</head>
<body class="undocked" id="-blink-dev-tools"></body>
</html>
const _loadedScripts={};(function(){const baseUrl=self.location?self.location.origin+self.location.pathname:'';self._importScriptPathPrefix=baseUrl.substring(0,baseUrl.lastIndexOf('/')+1);})();const REMOTE_MODULE_FALLBACK_REVISION='@010ddcfda246975d194964ccf20038ebbdec6084';class Runtime{constructor(descriptors){this._modules=[];this._modulesMap={};this._extensions=[];this._cachedTypeClasses={};this._descriptorsMap={};for(let i=0;i<descriptors.length;++i){this._registerModule(descriptors[i]);}}
static _loadResourcePromise(url,asBinary){return new Promise(load);function load(fulfill,reject){const xhr=new XMLHttpRequest();xhr.open('GET',url,true);if(asBinary){xhr.responseType='arraybuffer';}
xhr.onreadystatechange=onreadystatechange;function onreadystatechange(e){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
const{response}=e.target;const text=asBinary?new TextDecoder().decode(response):response;const status=/^HTTP\/1.1 404/.test(text)?404:xhr.status;if([0,200,304].indexOf(status)===-1)
{reject(new Error('While loading from url '+url+' server responded with a status of '+status));}else{fulfill(response);}}
xhr.send(null);}}
static loadResourcePromise(url){return Runtime._loadResourcePromise(url,false);}
static loadBinaryResourcePromise(url){return Runtime._loadResourcePromise(url,true);}
static loadResourcePromiseWithFallback(url){return Runtime.loadResourcePromise(url).catch(err=>{const urlWithFallbackVersion=url.replace(/@[0-9a-f]{40}/,REMOTE_MODULE_FALLBACK_REVISION);if(urlWithFallbackVersion===url||!url.includes('audits_worker_module')){throw err;}
return Runtime.loadResourcePromise(urlWithFallbackVersion);});}
static normalizePath(path){if(path.indexOf('..')===-1&&path.indexOf('.')===-1){return path;}
const normalizedSegments=[];const segments=path.split('/');for(let i=0;i<segments.length;i++){const segment=segments[i];if(segment==='.'){continue;}else if(segment==='..'){normalizedSegments.pop();}else if(segment){normalizedSegments.push(segment);}}
let normalizedPath=normalizedSegments.join('/');if(normalizedPath[normalizedPath.length-1]==='/'){return normalizedPath;}
if(path[0]==='/'&&normalizedPath){normalizedPath='/'+normalizedPath;}
if((path[path.length-1]==='/')||(segments[segments.length-1]==='.')||(segments[segments.length-1]==='..')){normalizedPath=normalizedPath+'/';}
return normalizedPath;}
static getResourceURL(scriptName,base){const sourceURL=(base||self._importScriptPathPrefix)+scriptName;const schemaIndex=sourceURL.indexOf('://')+3;let pathIndex=sourceURL.indexOf('/',schemaIndex);if(pathIndex===-1){pathIndex=sourceURL.length;}
return sourceURL.substring(0,pathIndex)+Runtime.normalizePath(sourceURL.substring(pathIndex));}
static _loadScriptsPromise(scriptNames,base){const promises=[];const urls=[];const sources=new Array(scriptNames.length);let scriptToEval=0;for(let i=0;i<scriptNames.length;++i){const scriptName=scriptNames[i];const sourceURL=Runtime.getResourceURL(scriptName,base);if(_loadedScripts[sourceURL]){continue;}
urls.push(sourceURL);const loadResourcePromise=base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);promises.push(loadResourcePromise.then(scriptSourceLoaded.bind(null,i),scriptSourceLoaded.bind(null,i,undefined)));}
return Promise.all(promises).then(undefined);function scriptSourceLoaded(scriptNumber,scriptSource){sources[scriptNumber]=scriptSource||'';while(typeof sources[scriptToEval]!=='undefined'){evaluateScript(urls[scriptToEval],sources[scriptToEval]);++scriptToEval;}}
function evaluateScript(sourceURL,scriptSource){_loadedScripts[sourceURL]=true;if(!scriptSource){console.error('Empty response arrived for script \''+sourceURL+'\'');return;}
self.eval(scriptSource+'\n//# sourceURL='+sourceURL);}}
static _loadResourceIntoCache(url,appendSourceURL){return Runtime.loadResourcePromise(url).then(cacheResource.bind(this,url),cacheResource.bind(this,url,undefined));function cacheResource(path,content){if(!content){console.error('Failed to load resource: '+path);return;}
const sourceURL=appendSourceURL?Runtime.resolveSourceURL(path):'';Runtime.cachedResources[path]=content+sourceURL;}}
static async appStarted(){return Runtime._appStartedPromise;}
static async startApplication(appName){console.timeStamp('Root.Runtime.startApplication');const allDescriptorsByName={};for(let i=0;i<Root.allDescriptors.length;++i){const d=Root.allDescriptors[i];allDescriptorsByName[d['name']]=d;}
if(!Root.applicationDescriptor){let data=await Runtime.loadResourcePromise(appName+'.json');Root.applicationDescriptor=JSON.parse(data);let descriptor=Root.applicationDescriptor;while(descriptor.extends){data=await Runtime.loadResourcePromise(descriptor.extends+'.json');descriptor=JSON.parse(data);Root.applicationDescriptor.modules=descriptor.modules.concat(Root.applicationDescriptor.modules);}}
const configuration=Root.applicationDescriptor.modules;const moduleJSONPromises=[];const coreModuleNames=[];for(let i=0;i<configuration.length;++i){const descriptor=configuration[i];const name=descriptor['name'];const moduleJSON=allDescriptorsByName[name];if(moduleJSON){moduleJSONPromises.push(Promise.resolve(moduleJSON));}else{moduleJSONPromises.push(Runtime.loadResourcePromise(name+'/module.json').then(JSON.parse.bind(JSON)));}
if(descriptor['type']==='autostart'){coreModuleNames.push(name);}}
const moduleDescriptors=await Promise.all(moduleJSONPromises);for(let i=0;i<moduleDescriptors.length;++i){moduleDescriptors[i].name=configuration[i]['name'];moduleDescriptors[i].condition=configuration[i]['condition'];moduleDescriptors[i].remote=configuration[i]['type']==='remote';}
self.runtime=new Runtime(moduleDescriptors);if(coreModuleNames){await self.runtime._loadAutoStartModules(coreModuleNames);}
Runtime._appStartedPromiseCallback();}
static startWorker(appName){return Root.Runtime.startApplication(appName).then(sendWorkerReady);function sendWorkerReady(){self.postMessage('workerReady');}}
static queryParam(name){return Runtime._queryParamsObject.get(name);}
static queryParamsString(){return location.search;}
static _experimentsSetting(){try{return(JSON.parse(self.localStorage&&self.localStorage['experiments']?self.localStorage['experiments']:'{}'));}catch(e){console.error('Failed to parse localStorage[\'experiments\']');return{};}}
static _assert(value,message){if(value){return;}
Runtime._originalAssert.call(Runtime._console,value,message+' '+new Error().stack);}
static setPlatform(platform){Runtime._platform=platform;}
static _isDescriptorEnabled(descriptor){const activatorExperiment=descriptor['experiment'];if(activatorExperiment==='*'){return Runtime.experiments.supportEnabled();}
if(activatorExperiment&&activatorExperiment.startsWith('!')&&Runtime.experiments.isEnabled(activatorExperiment.substring(1))){return false;}
if(activatorExperiment&&!activatorExperiment.startsWith('!')&&!Runtime.experiments.isEnabled(activatorExperiment)){return false;}
const condition=descriptor['condition'];if(condition&&!condition.startsWith('!')&&!Runtime.queryParam(condition)){return false;}
if(condition&&condition.startsWith('!')&&Runtime.queryParam(condition.substring(1))){return false;}
return true;}
static resolveSourceURL(path){let sourceURL=self.location.href;if(self.location.search){sourceURL=sourceURL.replace(self.location.search,'');}
sourceURL=sourceURL.substring(0,sourceURL.lastIndexOf('/')+1)+path;return'\n/*# sourceURL='+sourceURL+' */';}
static setL10nCallback(localizationFunction){Runtime._l10nCallback=localizationFunction;}
useTestBase(){Runtime._remoteBase='http://localhost:8000/inspector-sources/';if(Runtime.queryParam('debugFrontend')){Runtime._remoteBase+='debug/';}}
module(moduleName){return this._modulesMap[moduleName];}
_registerModule(descriptor){const module=new Runtime.Module(this,descriptor);this._modules.push(module);this._modulesMap[descriptor['name']]=module;}
loadModulePromise(moduleName){return this._modulesMap[moduleName]._loadPromise();}
_loadAutoStartModules(moduleNames){const promises=[];for(let i=0;i<moduleNames.length;++i){promises.push(this.loadModulePromise(moduleNames[i]));}
return Promise.all(promises);}
_checkExtensionApplicability(extension,predicate){if(!predicate){return false;}
const contextTypes=extension.descriptor().contextTypes;if(!contextTypes){return true;}
for(let i=0;i<contextTypes.length;++i){const contextType=this._resolve(contextTypes[i]);const isMatching=!!contextType&&predicate(contextType);if(isMatching){return true;}}
return false;}
isExtensionApplicableToContext(extension,context){if(!context){return true;}
return this._checkExtensionApplicability(extension,isInstanceOf);function isInstanceOf(targetType){return context instanceof targetType;}}
isExtensionApplicableToContextTypes(extension,currentContextTypes){if(!extension.descriptor().contextTypes){return true;}
return this._checkExtensionApplicability(extension,currentContextTypes?isContextTypeKnown:null);function isContextTypeKnown(targetType){return currentContextTypes.has(targetType);}}
extensions(type,context,sortByTitle){return this._extensions.filter(filter).sort(sortByTitle?titleComparator:orderComparator);function filter(extension){if(extension._type!==type&&extension._typeClass()!==type){return false;}
if(!extension.enabled()){return false;}
return!context||extension.isApplicable(context);}
function orderComparator(extension1,extension2){const order1=extension1.descriptor()['order']||0;const order2=extension2.descriptor()['order']||0;return order1-order2;}
function titleComparator(extension1,extension2){const title1=extension1.title()||'';const title2=extension2.title()||'';return title1.localeCompare(title2);}}
extension(type,context){return this.extensions(type,context)[0]||null;}
allInstances(type,context){return Promise.all(this.extensions(type,context).map(extension=>extension.instance()));}
_resolve(typeName){if(!this._cachedTypeClasses[typeName]){const path=typeName.split('.');let object=self;for(let i=0;object&&(i<path.length);++i){object=object[path[i]];}
if(object){this._cachedTypeClasses[typeName]=(object);}}
return this._cachedTypeClasses[typeName]||null;}
sharedInstance(constructorFunction){if(Runtime._instanceSymbol in constructorFunction&&Object.getOwnPropertySymbols(constructorFunction).includes(Runtime._instanceSymbol)){return constructorFunction[Runtime._instanceSymbol];}
const instance=new constructorFunction();constructorFunction[Runtime._instanceSymbol]=instance;return instance;}}
Runtime._queryParamsObject=new URLSearchParams(Runtime.queryParamsString());Runtime._instanceSymbol=Symbol('instance');Runtime.cachedResources={__proto__:null};Runtime._console=console;Runtime._originalAssert=console.assert;Runtime._platform='';class ModuleDescriptor{constructor(){this.name;this.extensions;this.dependencies;this.scripts;this.modules;this.condition;this.remote;}}
class RuntimeExtensionDescriptor{constructor(){this.type;this.className;this.factoryName;this.contextTypes;}}
const specialCases={'sdk':'SDK','js_sdk':'JSSDK','browser_sdk':'BrowserSDK','ui':'UI','object_ui':'ObjectUI','javascript_metadata':'JavaScriptMetadata','perf_ui':'PerfUI','har_importer':'HARImporter','sdk_test_runner':'SDKTestRunner','cpu_profiler_test_runner':'CPUProfilerTestRunner'};class Module{constructor(manager,descriptor){this._manager=manager;this._descriptor=descriptor;this._name=descriptor.name;this._extensions=[];this._extensionsByClassName=new Map();const extensions=(descriptor.extensions);for(let i=0;extensions&&i<extensions.length;++i){const extension=new Extension(this,extensions[i]);this._manager._extensions.push(extension);this._extensions.push(extension);}
this._loadedForTest=false;}
name(){return this._name;}
enabled(){return Runtime._isDescriptorEnabled(this._descriptor);}
resource(name){const fullName=this._name+'/'+name;const content=Runtime.cachedResources[fullName];if(!content){throw new Error(fullName+' not preloaded. Check module.json');}
return content;}
_loadPromise(){if(!this.enabled()){return Promise.reject(new Error('Module '+this._name+' is not enabled'));}
if(this._pendingLoadPromise){return this._pendingLoadPromise;}
const dependencies=this._descriptor.dependencies;const dependencyPromises=[];for(let i=0;dependencies&&i<dependencies.length;++i){dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());}
this._pendingLoadPromise=Promise.all(dependencyPromises).then(this._loadResources.bind(this)).then(this._loadModules.bind(this)).then(this._loadScripts.bind(this)).then(()=>this._loadedForTest=true);return this._pendingLoadPromise;}
_loadResources(){const resources=this._descriptor['resources'];if(!resources||!resources.length){return Promise.resolve();}
const promises=[];for(let i=0;i<resources.length;++i){const url=this._modularizeURL(resources[i]);const isHtml=url.endsWith('.html');promises.push(Runtime._loadResourceIntoCache(url,!isHtml));}
return Promise.all(promises).then(undefined);}
_loadModules(){if(!this._descriptor.modules||!this._descriptor.modules.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};if(typeof WorkerGlobalScope!=='undefined'&&self instanceof WorkerGlobalScope){return Promise.resolve();}
return eval(`import('./${this._name}/${this._name}.js')`);}
_loadScripts(){if(!this._descriptor.scripts||!this._descriptor.scripts.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};return Runtime._loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL,this),this._remoteBase());}
_computeNamespace(){return specialCases[this._name]||this._name.split('_').map(a=>a.substring(0,1).toUpperCase()+a.substring(1)).join('');}
_modularizeURL(resourceName){return Runtime.normalizePath(this._name+'/'+resourceName);}
_remoteBase(){return!Runtime.queryParam('debugFrontend')&&this._descriptor.remote&&Runtime._remoteBase||undefined;}
fetchResource(resourceName){const base=this._remoteBase();const sourceURL=Runtime.getResourceURL(this._modularizeURL(resourceName),base);return base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);}
substituteURL(value){const base=this._remoteBase()||'';return value.replace(/@url\(([^\)]*?)\)/g,convertURL.bind(this));function convertURL(match,url){return base+this._modularizeURL(url);}}}
class Extension{constructor(module,descriptor){this._module=module;this._descriptor=descriptor;this._type=descriptor.type;this._hasTypeClass=this._type.charAt(0)==='@';this._className=descriptor.className||null;this._factoryName=descriptor.factoryName||null;}
descriptor(){return this._descriptor;}
module(){return this._module;}
enabled(){return this._module.enabled()&&Runtime._isDescriptorEnabled(this.descriptor());}
_typeClass(){if(!this._hasTypeClass){return null;}
return this._module._manager._resolve(this._type.substring(1));}
isApplicable(context){return this._module._manager.isExtensionApplicableToContext(this,context);}
instance(){return this._module._loadPromise().then(this._createInstance.bind(this));}
canInstantiate(){return!!(this._className||this._factoryName);}
_createInstance(){const className=this._className||this._factoryName;if(!className){throw new Error('Could not instantiate extension with no class');}
const constructorFunction=self.eval((className));if(!(constructorFunction instanceof Function)){throw new Error('Could not instantiate: '+className);}
if(this._className){return this._module._manager.sharedInstance(constructorFunction);}
return new constructorFunction(this);}
title(){const title=this._descriptor['title-'+Runtime._platform]||this._descriptor['title'];if(title&&Runtime._l10nCallback){return Runtime._l10nCallback(title);}
return title;}
hasContextType(contextType){const contextTypes=this.descriptor().contextTypes;if(!contextTypes){return false;}
for(let i=0;i<contextTypes.length;++i){if(contextType===this._module._manager._resolve(contextTypes[i])){return true;}}
return false;}}
class ExperimentsSupport{constructor(){this._supportEnabled=Runtime.queryParam('experiments')!==null;this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled=new Set();}
allConfigurableExperiments(){const result=[];for(let i=0;i<this._experiments.length;i++){const experiment=this._experiments[i];if(!this._enabledTransiently[experiment.name]){result.push(experiment);}}
return result;}
supportEnabled(){return this._supportEnabled;}
_setExperimentsSetting(value){if(!self.localStorage){return;}
self.localStorage['experiments']=JSON.stringify(value);}
register(experimentName,experimentTitle,hidden){Runtime._assert(!this._experimentNames[experimentName],'Duplicate registration of experiment '+experimentName);this._experimentNames[experimentName]=true;this._experiments.push(new Runtime.Experiment(this,experimentName,experimentTitle,!!hidden));}
isEnabled(experimentName){this._checkExperiment(experimentName);if(Runtime._experimentsSetting()[experimentName]===false){return false;}
if(this._enabledTransiently[experimentName]){return true;}
if(this._serverEnabled.has(experimentName)){return true;}
if(!this.supportEnabled()){return false;}
return!!Runtime._experimentsSetting()[experimentName];}
setEnabled(experimentName,enabled){this._checkExperiment(experimentName);const experimentsSetting=Runtime._experimentsSetting();experimentsSetting[experimentName]=enabled;this._setExperimentsSetting(experimentsSetting);}
setDefaultExperiments(experimentNames){for(let i=0;i<experimentNames.length;++i){this._checkExperiment(experimentNames[i]);this._enabledTransiently[experimentNames[i]]=true;}}
setServerEnabledExperiments(experimentNames){for(const experiment of experimentNames){this._checkExperiment(experiment);this._serverEnabled.add(experiment);}}
enableForTest(experimentName){this._checkExperiment(experimentName);this._enabledTransiently[experimentName]=true;}
clearForTest(){this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled.clear();}
cleanUpStaleExperiments(){const experimentsSetting=Runtime._experimentsSetting();const cleanedUpExperimentSetting={};for(let i=0;i<this._experiments.length;++i){const experimentName=this._experiments[i].name;if(experimentsSetting[experimentName]){cleanedUpExperimentSetting[experimentName]=true;}}
this._setExperimentsSetting(cleanedUpExperimentSetting);}
_checkExperiment(experimentName){Runtime._assert(this._experimentNames[experimentName],'Unknown experiment '+experimentName);}}
class Experiment{constructor(experiments,name,title,hidden){this.name=name;this.title=title;this.hidden=hidden;this._experiments=experiments;}
isEnabled(){return this._experiments.isEnabled(this.name);}
setEnabled(enabled){this._experiments.setEnabled(this.name,enabled);}}
Runtime.experiments=new ExperimentsSupport();Runtime._appStartedPromiseCallback;Runtime._appStartedPromise=new Promise(fulfil=>Runtime._appStartedPromiseCallback=fulfil);Runtime._l10nCallback;Runtime._remoteBase;(function validateRemoteBase(){if(location.href.startsWith('devtools://devtools/bundled/')&&Runtime.queryParam('remoteBase')){const versionMatch=/\/serve_file\/(@[0-9a-zA-Z]+)\/?$/.exec(Runtime.queryParam('remoteBase'));if(versionMatch){Runtime._remoteBase=`${location.origin}/remote/serve_file/${versionMatch[1]}/`;}}})();self.Root=self.Root||{};Root=Root||{};Root.allDescriptors=[];Root.applicationDescriptor=undefined;Root.Runtime=Runtime;Root.runtime;Root.Runtime.ModuleDescriptor=ModuleDescriptor;Root.Runtime.ExtensionDescriptor=RuntimeExtensionDescriptor;Root.Runtime.Extension=Extension;Root.Runtime.Module=Module;Root.Runtime.ExperimentsSupport=ExperimentsSupport;Root.Runtime.Experiment=Experiment;Root.allDescriptors.push(...[{"dependencies":[],"modules":["platform.js","utilities.js"],"name":"platform","scripts":[]},{"dependencies":["platform","dom_extension"],"name":"toolbox_bootstrap"},{"dependencies":["platform"],"modules":["dom_extension.js","DOMExtension.js"],"name":"dom_extension","scripts":[]}]);Root.applicationDescriptor={"has_html":true,"modules":[{"type":"autostart","name":"platform"},{"type":"autostart","name":"toolbox_bootstrap"},{"type":"autostart","name":"dom_extension"}]};self['Platform']=self['Platform']||{};self['DomExtension']=self['DomExtension']||{};self['ToolboxBootstrap']=self['ToolboxBootstrap']||{};(function(){function toolboxLoaded(){if(!window.opener){return;}
const app=window.opener['Emulation']['AdvancedApp']['_instance']();app['toolboxLoaded'](document);}
runOnWindowLoad(toolboxLoaded);})();;;<!--
 * Copyright 2018 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
-->
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Security-Policy" content="object-src 'none'; script-src 'self' 'unsafe-eval' 'unsafe-inline' https://chrome-devtools-frontend.appspot.com">
    <meta name="referrer" content="no-referrer">
    <script type="module" src="root.js"></script>
    <script defer src="shell.js"></script>
    <script defer src="worker_app.js"></script>
    <script type="module">Root.Runtime.startApplication('worker_app');</script>
</head>
<body class="undocked" id="-blink-dev-tools"></body>
</html>
Root.allDescriptors.push(...[{"dependencies":["common","sdk","ui","protocol"],"extensions":[{"defaultValue":[],"type":"setting","settingName":"customNetworkConditions","settingType":"array"},{"category":"Network","tags":"device, throttling","title":"Go offline","className":"MobileThrottling.ThrottlingManager.ActionDelegate","actionId":"network-conditions.network-offline","type":"action"},{"category":"Network","tags":"device, throttling","title":"Enable slow 3G throttling","className":"MobileThrottling.ThrottlingManager.ActionDelegate","actionId":"network-conditions.network-low-end-mobile","type":"action"},{"category":"Network","tags":"device, throttling","title":"Enable fast 3G throttling","className":"MobileThrottling.ThrottlingManager.ActionDelegate","actionId":"network-conditions.network-mid-tier-mobile","type":"action"},{"category":"Network","tags":"device, throttling","title":"Go online","className":"MobileThrottling.ThrottlingManager.ActionDelegate","actionId":"network-conditions.network-online","type":"action"},{"title":"Throttling","settings":["customNetworkConditions"],"id":"throttling-conditions","className":"MobileThrottling.ThrottlingSettingsTab","location":"settings-view","type":"view","order":35}],"name":"mobile_throttling","modules":["mobile_throttling.js","ThrottlingPresets.js","MobileThrottlingSelector.js","NetworkPanelIndicator.js","NetworkThrottlingSelector.js","ThrottlingSettingsTab.js","ThrottlingManager.js"]},{"dependencies":["common","browser_sdk"],"modules":["har_importer.js","HARFormat.js","HARImporter.js"],"name":"har_importer"},{"dependencies":["components","extensions","inline_editor","color_picker","event_listeners"],"extensions":[{"title":"Elements","id":"elements","className":"Elements.ElementsPanel","location":"panel","type":"view","order":10},{"className":"Elements.ElementsPanel.ContextMenuProvider","contextTypes":["SDK.RemoteObject","SDK.DOMNode","SDK.DeferredDOMNode"],"type":"@UI.ContextMenu.Provider"},{"className":"Elements.ElementsTreeOutline.Renderer","contextTypes":["SDK.DOMNode","SDK.DeferredDOMNode"],"type":"@UI.Renderer"},{"className":"Elements.ElementsPanel.DOMNodeRevealer","contextTypes":["SDK.DOMNode","SDK.DeferredDOMNode","SDK.RemoteObject"],"destination":"Elements panel","type":"@Common.Revealer"},{"className":"Elements.DOMLinkifier.Linkifier","contextTypes":["SDK.DOMNode","SDK.DeferredDOMNode"],"type":"@Common.Linkifier"},{"className":"Elements.ElementsPanel.CSSPropertyRevealer","contextTypes":["SDK.CSSProperty"],"destination":"styles sidebar","type":"@Common.Revealer"},{"category":"Elements","title":"Show user agent shadow DOM","defaultValue":false,"settingName":"showUAShadowDOM","settingType":"boolean","type":"setting","order":1},{"category":"Elements","title":"Word wrap","defaultValue":true,"options":[{"value":true,"title":"Enable DOM word wrap"},{"value":false,"title":"Disable DOM word wrap"}],"settingName":"domWordWrap","settingType":"boolean","type":"setting","order":2},{"category":"Elements","title":"Show HTML comments","defaultValue":true,"options":[{"value":true,"title":"Show HTML comments"},{"value":false,"title":"Hide HTML comments"}],"settingName":"showHTMLComments","settingType":"boolean","type":"setting","order":3},{"category":"Elements","title":"Reveal DOM node on hover","defaultValue":true,"settingName":"highlightNodeOnHoverInOverlay","settingType":"boolean","type":"setting","order":4},{"category":"Elements","title":"Show detailed inspect tooltip","defaultValue":true,"settingName":"showDetailedInspectTooltip","settingType":"boolean","type":"setting","order":5},{"defaultValue":true,"type":"setting","settingName":"showEventListenersForAncestors","settingType":"boolean"},{"className":"Elements.ElementStatePaneWidget.ButtonProvider","type":"@UI.ToolbarItem.Provider","order":1,"location":"styles-sidebarpane-toolbar"},{"className":"Elements.ClassesPaneWidget.ButtonProvider","type":"@UI.ToolbarItem.Provider","order":2,"location":"styles-sidebarpane-toolbar"},{"className":"Elements.StylesSidebarPane.ButtonProvider","type":"@UI.ToolbarItem.Provider","order":100,"location":"styles-sidebarpane-toolbar"},{"className":"Elements.ElementsActionDelegate","contextTypes":["Elements.ElementsPanel"],"bindings":[{"shortcut":"H"}],"type":"action","actionId":"elements.hide-element"},{"className":"Elements.ElementsActionDelegate","contextTypes":["Elements.ElementsPanel"],"bindings":[{"shortcut":"F2"}],"type":"action","actionId":"elements.edit-as-html"},{"className":"Elements.ElementsActionDelegate","contextTypes":["Elements.ElementsPanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Z"},{"platform":"mac","shortcut":"Meta+Z"}],"type":"action","actionId":"elements.undo"},{"className":"Elements.ElementsActionDelegate","contextTypes":["Elements.ElementsPanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Y"},{"platform":"mac","shortcut":"Meta+Shift+Z"}],"type":"action","actionId":"elements.redo"},{"className":"Elements.ElementsPanel.PseudoStateMarkerDecorator","marker":"pseudo-state-marker","type":"@Elements.MarkerDecorator"},{"marker":"hidden-marker","factoryName":"Elements.GenericDecorator","type":"@Elements.MarkerDecorator","color":"#555","title":"Element is hidden"},{"iconClass":"largeicon-node-search","title":"Select an element in the page to inspect it","className":"Elements.InspectElementModeController.ToggleSearchActionDelegate","actionId":"elements.toggle-element-search","toggleable":true,"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+C"},{"platform":"mac","shortcut":"Meta+Shift+C"}],"type":"action"},{"className":"Elements.InspectElementModeController.ToggleSearchActionDelegate","category":"Screenshot","type":"action","actionId":"elements.capture-area-screenshot","title":"Capture area screenshot"},{"order":0,"type":"@UI.ToolbarItem.Provider","actionId":"elements.toggle-element-search","location":"main-toolbar-left"},{"category":"Elements","className":"Elements.ElementsPanel","type":"@UI.ViewLocationResolver","name":"elements-sidebar"},{"title":"Event Listeners","id":"elements.eventListeners","className":"Elements.EventListenersWidget","location":"elements-sidebar","hasToolbar":true,"type":"view","order":5,"persistence":"permanent"},{"title":"Properties","id":"elements.domProperties","className":"Elements.PropertiesWidget","location":"elements-sidebar","type":"view","order":7,"persistence":"permanent"},{"title":"Stack Trace","id":"elements.domCreation","className":"Elements.NodeStackTraceWidget","experiment":"captureNodeCreationStacks","location":"elements-sidebar","type":"view","order":10,"persistence":"permanent"}],"name":"elements","scripts":["elements_module.js"],"modules":["elements.js","InspectElementModeController.js","ColorSwatchPopoverIcon.js","ComputedStyleModel.js","DOMLinkifier.js","DOMPath.js","ElementsBreadcrumbs.js","ElementsSidebarPane.js","ElementsTreeElement.js","ElementsTreeOutline.js","EventListenersWidget.js","MarkerDecorator.js","MetricsSidebarPane.js","PlatformFontsWidget.js","PropertiesWidget.js","NodeStackTraceWidget.js","StylePropertyHighlighter.js","StylesSidebarPane.js","StylePropertyTreeElement.js","ComputedStyleWidget.js","ElementsPanel.js","ClassesPaneWidget.js","ElementStatePaneWidget.js","ElementsTreeElementHighlighter.js"]},{"dependencies":["ui","host"],"extensions":[{"title":"What's New","id":"release-note","className":"Help.ReleaseNoteView","location":"drawer-view","type":"view","order":1,"persistence":"closeable"},{"category":"Appearance","title":"Show What's New after each update","defaultValue":true,"settingName":"help.show-release-note","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Show What's New after each update"},{"value":false,"title":"Do not show What's New after each update"}]},{"category":"Help","className":"Help.ReleaseNotesActionDelegate","type":"action","actionId":"help.release-notes","title":"Release notes"},{"order":10,"type":"context-menu-item","location":"mainMenuHelp/default","actionId":"help.release-notes"},{"category":"Help","tags":"bug","title":"Report a DevTools issue","className":"Help.ReportIssueActionDelegate","actionId":"help.report-issue","type":"action"},{"order":11,"type":"context-menu-item","location":"mainMenuHelp/default","actionId":"help.report-issue"},{"className":"Help.HelpLateInitialization","type":"late-initialization"}],"name":"help","scripts":["help_module.js"],"modules":["help.js","HelpImpl.js","ReleaseNoteView.js","ReleaseNoteText.js"]},{"name":"timeline","modules":[],"dependencies":["components","coverage","layer_viewer","timeline_model","perf_ui","extensions","data_grid","profiler","mobile_throttling"],"extensions":[{"title":"Performance","id":"timeline","className":"Timeline.TimelinePanel","location":"panel","type":"view","order":50},{"category":"Performance","title":"Hide chrome frame in Layers view","defaultValue":false,"settingName":"frameViewerHideChromeWindow","settingType":"boolean","type":"setting"},{"className":"Timeline.LoadTimelineHandler","type":"@Common.QueryParamHandler","name":"loadTimelineFromURL"},{"order":10,"type":"context-menu-item","location":"timelineMenu/open","actionId":"timeline.load-from-file"},{"order":15,"type":"context-menu-item","location":"timelineMenu/open","actionId":"timeline.save-to-file"},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Timeline.TimelinePanel.ActionDelegate","toggleWithRedColor":true,"actionId":"timeline.toggle-recording","toggleable":true,"contextTypes":["Timeline.TimelinePanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+E"},{"platform":"mac","shortcut":"Meta+E"}],"type":"action","options":[{"value":true,"title":"Record"},{"value":false,"title":"Stop"}]},{"iconClass":"largeicon-refresh","category":"Performance","title":"Start profiling and reload page","className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"actionId":"timeline.record-reload","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+Shift+E"},{"platform":"mac","shortcut":"Meta+Shift+E"}],"type":"action"},{"category":"Timeline","title":"Save profile\u2026","className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"actionId":"timeline.save-to-file","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+S"},{"platform":"mac","shortcut":"Meta+S"}],"type":"action"},{"category":"Timeline","title":"Load profile\u2026","className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"actionId":"timeline.load-from-file","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+O"},{"platform":"mac","shortcut":"Meta+O"}],"type":"action"},{"className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"bindings":[{"shortcut":"["}],"type":"action","actionId":"timeline.jump-to-previous-frame"},{"className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"bindings":[{"shortcut":"]"}],"type":"action","actionId":"timeline.jump-to-next-frame"},{"category":"Performance","title":"Show recent timeline sessions","className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"actionId":"timeline.show-history","bindings":[{"platform":"windows,linux","shortcut":"Ctrl+H"},{"platform":"mac","shortcut":"Meta+Y"}],"type":"action"},{"title":"JavaScript Profiler","id":"js_profiler","className":"Profiler.JSProfilerPanel","location":"panel","type":"view","order":65,"persistence":"closeable"},{"className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"bindings":[{"platform":"windows,linux","shortcut":"Alt+Left"},{"platform":"mac","shortcut":"Meta+Left"}],"type":"action","actionId":"timeline.previous-recording"},{"className":"Timeline.TimelinePanel.ActionDelegate","contextTypes":["Timeline.TimelinePanel"],"bindings":[{"platform":"windows,linux","shortcut":"Alt+Right"},{"platform":"mac","shortcut":"Meta+Right"}],"type":"action","actionId":"timeline.next-recording"}],"scripts":["timeline_module.js"]},{"name":"browser_debugger","modules":["browser_debugger.js","DOMBreakpointsSidebarPane.js","EventListenerBreakpointsSidebarPane.js","ObjectEventListenersSidebarPane.js","XHRBreakpointsSidebarPane.js"],"dependencies":["elements","sources","console"],"extensions":[{"title":"Event Listener Breakpoints","id":"sources.eventListenerBreakpoints","className":"BrowserDebugger.EventListenerBreakpointsSidebarPane","location":"sources.sidebar-bottom","type":"view","order":9,"persistence":"permanent"},{"className":"BrowserDebugger.XHRBreakpointsSidebarPane","contextTypes":["SDK.DebuggerPausedDetails"],"type":"@UI.ContextFlavorListener"},{"title":"XHR/fetch Breakpoints","id":"sources.xhrBreakpoints","className":"BrowserDebugger.XHRBreakpointsSidebarPane","location":"sources.sidebar-bottom","hasToolbar":true,"type":"view","order":5,"persistence":"permanent"},{"title":"DOM Breakpoints","id":"sources.domBreakpoints","factoryName":"BrowserDebugger.DOMBreakpointsSidebarPane","location":"sources.sidebar-bottom","type":"view","order":7,"persistence":"permanent"},{"title":"DOM Breakpoints","id":"elements.domBreakpoints","factoryName":"BrowserDebugger.DOMBreakpointsSidebarPane","location":"elements-sidebar","type":"view","order":6,"persistence":"permanent"},{"marker":"breakpoint-marker","factoryName":"Elements.GenericDecorator","type":"@Elements.MarkerDecorator","color":"rgb(105, 140, 254)","title":"DOM Breakpoint"},{"className":"BrowserDebugger.DOMBreakpointsSidebarPane.ContextMenuProvider","contextTypes":["SDK.DOMNode"],"type":"@UI.ContextMenu.Provider"},{"className":"BrowserDebugger.DOMBreakpointsSidebarPane","contextTypes":["SDK.DebuggerPausedDetails"],"type":"@UI.ContextFlavorListener"},{"title":"Global Listeners","id":"sources.globalListeners","className":"BrowserDebugger.ObjectEventListenersSidebarPane","location":"sources.sidebar-bottom","hasToolbar":true,"type":"view","order":8,"persistence":"permanent"},{"title":"Page","id":"navigator-network","className":"Sources.NetworkNavigatorView","location":"navigator-view","type":"view","order":2,"persistence":"permanent"},{"title":"Overrides","id":"navigator-overrides","className":"Sources.OverridesNavigatorView","location":"navigator-view","type":"view","order":4,"persistence":"permanent"},{"title":"Content scripts","id":"navigator-contentScripts","className":"Sources.ContentScriptsNavigatorView","location":"navigator-view","type":"view","order":5,"persistence":"permanent"},{"className":"Sources.OverridesNavigatorView","viewId":"navigator-overrides","type":"@Sources.NavigatorView"},{"className":"Sources.ContentScriptsNavigatorView","viewId":"navigator-contentScripts","type":"@Sources.NavigatorView"}],"scripts":["browser_debugger_module.js"]},{"dependencies":["components","sdk","timeline_model","ui","perf_ui"],"modules":["LayerDetailsView.js","LayerTreeOutline.js","LayerViewHost.js","Layers3DView.js","PaintProfilerView.js","TransformController.js"],"name":"layer_viewer","scripts":["layer_viewer_module.js"]},{"dependencies":["ui","sdk","data_grid"],"modules":["cookie_table.js","CookiesTable.js"],"name":"cookie_table","scripts":[]},{"dependencies":["sdk"],"modules":["timeline_model.js","TimelineModelFilter.js","TracingLayerTree.js","TimelineModel.js","TimelineIRModel.js","TimelineJSProfile.js","TimelineFrameModel.js","TimelineProfileTree.js"],"name":"timeline_model","scripts":[]},{"dependencies":["components","mobile_throttling"],"extensions":[{"className":"WorkerMain.WorkerMain","type":"early-initialization"}],"name":"worker_main"},{"name":"resources","modules":[],"dependencies":["source_frame","cookie_table","inline_editor","data_grid","components","object_ui","perf_ui","mobile_throttling","network","sources"],"extensions":[{"title":"Application","tags":"pwa","id":"resources","className":"Resources.ResourcesPanel","location":"panel","type":"view","order":70},{"className":"Resources.ResourcesPanel.ResourceRevealer","contextTypes":["SDK.Resource"],"destination":"Application panel","type":"@Common.Revealer"},{"category":"Resources","className":"Resources.ClearStorageView.ActionDelegate","type":"action","actionId":"resources.clear","title":"Clear site data"},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Resources.BackgroundServiceView.ActionDelegate","toggleWithRedColor":true,"actionId":"background-service.toggle-recording","toggleable":true,"contextTypes":["Resources.BackgroundServiceView"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+E"},{"platform":"mac","shortcut":"Meta+E"}],"category":"Background Services","type":"action","options":[{"value":true,"title":"Start recording events"},{"value":false,"title":"Stop recording events"}]}],"scripts":["resources_module.js"]},{"name":"network","modules":[],"dependencies":["search","source_frame","components","perf_ui","cookie_table","data_grid","browser_sdk","mobile_throttling","har_importer","persistence"],"extensions":[{"title":"Network","id":"network","className":"Network.NetworkPanel","location":"panel","type":"view","order":40},{"className":"Network.NetworkPanel.ContextMenuProvider","contextTypes":["SDK.NetworkRequest","SDK.Resource","Workspace.UISourceCode"],"type":"@UI.ContextMenu.Provider"},{"className":"Network.NetworkPanel.RequestRevealer","contextTypes":["SDK.NetworkRequest"],"destination":"Network panel","type":"@Common.Revealer"},{"className":"Network.NetworkPanel.RequestLocationRevealer","contextTypes":["Network.UIRequestLocation"],"type":"@Common.Revealer"},{"category":"Network","title":"Color-code resource types","defaultValue":false,"tags":"color code, resource type","settingName":"networkColorCodeResourceTypes","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Color code by resource type"},{"value":false,"title":"Use default colors"}]},{"category":"Network","title":"Group network log by frame","defaultValue":false,"tags":"network, frame, group","settingName":"network.group-by-frame","settingType":"boolean","type":"setting","options":[{"value":true,"title":"Group network log items by frame"},{"value":false,"title":"Don't group network log items by frame"}]},{"iconClass":"largeicon-start-recording","toggledIconClass":"largeicon-stop-recording","className":"Network.NetworkPanel.ActionDelegate","toggleWithRedColor":true,"actionId":"network.toggle-recording","toggleable":true,"contextTypes":["Network.NetworkPanel"],"bindings":[{"platform":"windows,linux","shortcut":"Ctrl+E"},{"platform":"mac","shortcut":"Meta+E"}],"type":"action","options":[{"value":true,"title":"Record network log"},{"value":false,"title":"Stop recording network log"}]},{"className":"Network.NetworkPanel.ActionDelegate","contextTypes":["Network.NetworkPanel"],"bindings":[{"shortcut":"Esc"}],"type":"action","actionId":"network.hide-request-details"},{"title":"Request blocking","id":"network.blocked-urls","className":"Network.BlockedURLsPane","location":"drawer-view","type":"view","order":60,"persistence":"closeable"},{"title":"Network conditions","tags":"disk cache, network throttling, useragent, user agent, user-agent","id":"network.config","className":"Network.NetworkConfigView","location":"drawer-view","type":"view","order":40,"persistence":"closeable"},{"category":"Network","className":"Network.NetworkPanel","type":"@UI.ViewLocationResolver","name":"network-sidebar"},{"title":"Search","className":"Network.SearchNetworkView","location":"network-sidebar","type":"view","id":"network.search-network-tab","persistence":"permanent"},{"category":"DevTools","title":"Search","className":"Network.NetworkPanel.ActionDelegate","contextTypes":["Network.NetworkPanel"],"actionId":"network.search","bindings":[{"platform":"mac","shortcut":"Meta+F"},{"platform":"windows,linux","shortcut":"Ctrl+F"}],"type":"action"}],"scripts":["network_module.js"]}]);Root.applicationDescriptor.modules.push(...[{"type":"autostart","name":"mobile_throttling"},{"name":"har_importer"},{"name":"elements"},{"name":"help"},{"name":"timeline"},{"name":"browser_debugger"},{"name":"layer_viewer"},{"name":"cookie_table"},{"name":"timeline_model"},{"type":"autostart","name":"worker_main"},{"name":"resources"},{"name":"network"}]);self['MobileThrottling']=self['MobileThrottling']||{};self['WorkerMain']=self['WorkerMain']||{};WorkerMain.WorkerMain=class extends Common.Object{run(){SDK.initMainConnection(()=>{SDK.targetManager.createTarget('main',ls`Main`,SDK.Target.Type.ServiceWorker,null);},Components.TargetDetachedDialog.webSocketConnectionLost);new MobileThrottling.NetworkPanelIndicator();}};SDK.ChildTargetManager.install(async({target,waitingForDebugger})=>{if(target.parentTarget()||target.type()!==SDK.Target.Type.ServiceWorker||!waitingForDebugger){return;}
const debuggerModel=target.model(SDK.DebuggerModel);if(!debuggerModel){return;}
if(!debuggerModel.isReadyToPause()){await debuggerModel.once(SDK.DebuggerModel.Events.DebuggerIsReadyToPause);}
debuggerModel.pause();});;;Root.Runtime.cachedResources["mobile_throttling/throttlingSettingsTab.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    overflow:hidden;\n}\n\n.header {\n    padding: 0 0 6px;\n    border-bottom: 1px solid #EEEEEE;\n    font-size: 18px;\n    font-weight: normal;\n    flex: none;\n}\n\n.add-conditions-button {\n    flex: none;\n    margin: 10px 2px;\n    min-width: 140px;\n    align-self: flex-start;\n}\n\n.conditions-list {\n    max-width: 500px;\n    min-width: 340px;\n    flex: auto;\n}\n\n.conditions-list-item {\n    padding: 3px 5px 3px 5px;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    position: relative;\n    flex: auto 1 1;\n}\n\n.conditions-list-text {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    flex: 0 0 70px;\n    -webkit-user-select: none;\n    color: #222;\n    text-align: end;\n    position: relative;\n}\n\n.conditions-list-title {\n    text-align: start;\n    flex: auto;\n    display: flex;\n    align-items: flex-start;\n}\n\n.conditions-list-title-text {\n    overflow: hidden;\n    flex: auto;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n.conditions-list-separator {\n    flex: 0 0 1px;\n    background-color: rgb(231, 231, 231);\n    height: 30px;\n    margin: 0 4px;\n}\n\n.conditions-list-separator-invisible {\n    visibility: hidden;\n    height: 100% !important;\n}\n\n.conditions-edit-row {\n    flex: none;\n    display: flex;\n    flex-direction: row;\n    margin: 6px 5px;\n}\n\n.conditions-edit-row input {\n    width: 100%;\n    text-align: inherit;\n}\n\n.conditions-edit-optional {\n    position: absolute;\n    bottom: -20px;\n    right: 0;\n    color: rgb(128, 128, 128);\n}\n\n/*# sourceURL=mobile_throttling/throttlingSettingsTab.css */";Root.Runtime.cachedResources["animation/animationScreenshotPopover.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\nimg {\n    max-height: 300px;\n    border-radius: 2px;\n}\n\n.animation-progress {\n    position: absolute;\n    height: 2px;\n    bottom: 0;\n    left: 0;\n    background: var(--selection-bg-color);\n}\n\n/*# sourceURL=animation/animationScreenshotPopover.css */";Root.Runtime.cachedResources["animation/animationTimeline.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    overflow: hidden;\n}\n\n.animation-node-row {\n    width: 100%;\n    display: flex;\n    border-bottom: 1px dashed hsla(0,0%,94%,1);\n}\n\n.animation-node-description {\n    width: 150px;\n    padding-left: 8px;\n    overflow: hidden;\n    position: relative;\n    transform-style: preserve-3d;\n    border-bottom: 1px solid hsl(0, 0%, 90%);\n    margin-bottom: -1px;\n    background-color: hsl(0, 0%, 98%);\n    display: flex;\n    align-items: center;\n    flex: 0 0 150px;\n}\n\n.animation-node-description > * {\n    flex: 0 0 auto;\n}\n\n.animation-timeline-row {\n    height: 32px;\n    position: relative;\n}\n\npath.animation-keyframe {\n    fill-opacity: 0.2;\n}\n\nsvg.animation-ui g:first-child:hover path.animation-keyframe {\n    fill-opacity: 0.4;\n}\n\n.animation-node-selected path.animation-keyframe {\n    fill-opacity: 0.4;\n}\n\nline.animation-line {\n    stroke-width: 2px;\n    stroke-linecap: round;\n    fill: none;\n}\n\nline.animation-delay-line {\n    stroke-width: 2px;\n    stroke-dasharray: 6, 4;\n}\n\nline.animation-delay-line.animation-fill {\n    stroke-dasharray: none;\n}\n\ncircle.animation-endpoint, circle.animation-keyframe-point {\n    stroke-width: 2px;\n    transition: transform 100ms cubic-bezier(0, 0, 0.2, 1);\n    transform: scale(1);\n    transform-box: fill-box;\n    transform-origin: 50% 50%;\n}\n\n.animation-ui circle.animation-endpoint:hover, .animation-ui circle.animation-keyframe-point:hover {\n    transform: scale(1.2);\n}\n\ncircle.animation-endpoint:active, circle.animation-keyframe-point:active {\n    transform: scale(1);\n}\n\ncircle.animation-keyframe-point {\n    fill: white;\n}\n\n.animation-name {\n    position: absolute;\n    top: 8px;\n    color: #333;\n    text-align: center;\n    margin-left: -8px;\n    white-space: nowrap;\n}\n\n.animation-timeline-toolbar-container {\n    display: flex;\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n    flex: 0 0 auto;\n}\n\n.animation-timeline-toolbar {\n    display: inline-block;\n}\n\n.animation-timeline-header {\n    height: 28px;\n    border-bottom: 1px solid #ccc;\n    flex-shrink: 0;\n    display: flex;\n}\n\n.animation-timeline-header:after {\n    content: \"\";\n    height: calc(100% - 48px - 28px);\n    position: absolute;\n    width: 150px;\n    left: 0;\n    margin-top: 28px;\n    background-color: hsl(0, 0%, 98%);\n    z-index: 0;\n    border-right: 1px solid hsl(0, 0%, 90%);\n}\n\n.animation-controls {\n    flex: 0 0 150px;\n    position: relative;\n    display: flex;\n    justify-content: flex-end;\n    padding-right: 8px;\n}\n\n.animation-timeline-current-time {flex: 0 0 auto;line-height: 28px;margin-right: 5px;}\n.animation-grid-header {\n    flex: 1 0 auto;\n    z-index: 1;\n    cursor: text;\n}\n\n.animation-timeline-buffer, .animation-timeline-buffer-hint {\n    height: 48px;\n    flex: 0 0 auto;\n    border-bottom: 1px solid #ccc;\n    display: flex;\n    padding: 0 2px;\n}\n\n.animation-timeline-buffer:empty, .animation-timeline-buffer-hint {\n    display: none;\n}\n\n.animation-timeline-buffer:empty ~ .animation-timeline-buffer-hint {\n    align-items: center;\n    justify-content: center;\n    font-size: 14px;\n    z-index: 101;\n    display: flex;\n}\n\n.animation-time-overlay {\n    background-color: black;\n    opacity: 0.05;\n    position: absolute;\n    height: 100%;\n    width: 100%;\n    z-index: -1;\n}\n\n.animation-timeline-end > .animation-time-overlay {\n    visibility: hidden;\n}\n\n.animation-scrubber {\n    opacity: 1;\n    position: absolute;\n    left: 150px;\n    height: calc(100% - 103px);\n    width: calc(100% - 150px);\n    top: 103px;\n    border-left: 1px solid hsla(4,90%,58%,1);\n    z-index: 1;\n}\n\n.animation-scrubber-line {\n    width: 11px;\n    background: linear-gradient(to right, transparent 5px, hsla(4,90%,58%,1) 5px, hsla(4,90%,58%,1) 6px, transparent 6px);\n    position: absolute;\n    top: -28px;\n    height: 28px;\n    left: -6px;\n    padding: 0 5px;\n    z-index: 2;\n}\n\n.animation-scrubber-head {\n    width: 7px;\n    height: 7px;\n    transform: rotate(45deg);\n    background: red;\n    position: absolute;\n    left: 2px;\n    top: 1px;\n}\n\nsvg.animation-timeline-grid {\n    position: absolute;\n    left: 140px;\n    top: 76px;\n    z-index: 0;\n}\n\nrect.animation-timeline-grid-line {\n    fill: hsla(0,0%,93%,1);\n}\n\n.animation-timeline-row > svg.animation-ui {\n    position: absolute;\n}\n\n.animation-node-timeline {\n    flex-grow: 1;\n}\n\n.animation-node-description > div {\n    position: absolute;\n    top: 50%;\n    transform: translateY(-50%);\n    max-height: 100%;\n}\n\n.animation-node-removed {\n    -webkit-filter: saturate(0);\n    cursor: not-allowed;\n}\n\nsvg.animation-ui g:first-child {\n    opacity: 1;\n}\n\n.animation-tail-iterations {\n    opacity: 0.5;\n}\n\n.animation-keyframe-step line {\n    stroke-width: 2;\n    stroke-opacity: 0.3;\n}\n\ntext.animation-timeline-grid-label {\n    font-size: 10px;\n    fill: #5a5a5a;\n    text-anchor: middle;\n}\n\n.animation-timeline-rows, .animation-timeline-rows-hint {\n    flex-grow: 1;\n    overflow-y: auto;\n    z-index: 1;\n    overflow-x: hidden;\n}\n\n.animation-timeline-rows-hint {\n    display: none;\n}\n\n.animation-timeline-buffer:not(:empty) ~ .animation-timeline-rows:empty {\n    flex-grow: 0;\n}\n\n.animation-timeline-buffer:not(:empty) ~ .animation-timeline-rows:empty ~ .animation-timeline-rows-hint {\n    font-size: 14px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin-left: 150px;\n    padding: 10px;\n}\n\n.toolbar.animation-controls-toolbar {\n    flex: 0 0 auto;\n}\n\n.animation-node-row.animation-node-selected {\n    background-color: hsla(216, 71%, 53%, 0.08);\n}\n\n.animation-node-selected > .animation-node-description {\n    background-color: #EFF4FD;\n}\n\n.animation-buffer-preview {\n    height: 40px;\n    margin: 4px 2px;\n    background-color: var(--toolbar-bg-color);\n    border-radius: 2px;\n    flex: 1 1;\n    padding: 4px;\n    max-width: 100px;\n    animation: newGroupAnim 200ms;\n    position: relative;\n}\n\n.animation-buffer-preview-animation {\n    width: 100%;\n    height: 100%;\n    border-radius: 2px 0 0 2px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    background: hsla(219, 100%, 66%, 0.27);\n    opacity: 0;\n    border-right: 1px solid #A7A7A7;\n    cursor: pointer;\n}\n\n.animation-buffer-preview:not(.selected):hover {\n    background-color: hsla(217,90%,92%,1);\n}\n\n.animation-buffer-preview.selected {\n    background-color: var(--selection-bg-color);\n}\n\n.animation-paused {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background-color: hsla(0,0%,70%,0.5);\n    display: none;\n}\n\n.animation-paused:before, .animation-paused:after {\n    content: \"\";\n    background: hsl(0, 100%, 100%);\n    width: 7px;\n    height: 20px;\n    border-radius: 2px;\n    margin: 2px;\n    border: 1px solid #ccc;\n}\n\n.animation-buffer-preview.paused .animation-paused {\n    display: flex;\n}\n\n.animation-buffer-preview.selected > svg > line {\n    stroke: white !important;\n}\n\n.animation-buffer-preview > svg > line {\n    stroke-width: 1px;\n}\n\n@keyframes newGroupAnim {\n    from {\n        -webkit-clip-path: polygon(0% 0%, 0% 100%, 0% 100%, 0% 0%);\n    }\n    to {\n        -webkit-clip-path: polygon(0% 0%, 0% 100%, 100% 100%, 100% 0%);\n    }\n}\n\n.animation-playback-rate-control {\n    margin: 4px 0 4px 2px;\n    display: flex;\n    width: 120px;\n}\n\n.animation-playback-rate-button:first-child {\n    border-radius: 4px 0 0 4px;\n}\n\n.animation-playback-rate-button:last-child {\n    border-radius: 0 4px 4px 0;\n}\n\n.animation-playback-rate-button {\n    border: 1px solid #ccc;\n    display: inline-block;\n    margin-right: -1px;\n    padding: 1px 4px;\n    background: white;\n    flex: 1 0 auto;\n    text-align: center;\n    cursor: pointer;\n}\n\n.animation-playback-rate-button:not(.selected):hover {\n    background: hsl(211, 100%, 95%);\n}\n\n.animation-playback-rate-button.selected {\n    color: hsl(0, 100%, 100%);\n    background-color: var(--selection-bg-color);\n    border-color: var(--selection-bg-color);\n    z-index: 1;\n}\n\n.animation-playback-rate-button.selected:first-child {\n    color: var(--selection-bg-color);\n    background-color: hsl(217, 89%, 100%);\n}\n\n.animation-remove-button, -theme-preserve {\n    position: absolute;\n    top: -3px;\n    right: -3px;\n    background: #7B7B7B;\n    border-radius: 12px;\n    height: 16px;\n    width: 16px;\n    align-items: center;\n    font-size: 10px;\n    justify-content: center;\n    box-shadow: 0 1px 4px 0 rgb(185, 185, 185);\n    z-index: 100;\n    display: none;\n    cursor: pointer;\n    font-weight: 700;\n    color: white;\n}\n\n.animation-remove-button:hover {\n    background: #585858;\n}\n\n.animation-buffer-preview:hover .animation-remove-button {\n    display: flex;\n}\n\n/*# sourceURL=animation/animationTimeline.css */";Root.Runtime.cachedResources["audits/auditsDialog.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.audits-view {\n    --view-horizontal-margin: 20px;\n    margin: 7px var(--view-horizontal-margin);\n    flex: auto;\n    align-items: center;\n    width: 100%;\n    max-width: 500px;\n}\n\n.audits-view h2 {\n    color: #666;\n    font-weight: bold;\n    font-size: 14px;\n    flex: none;\n    width: 100%;\n    text-align: left;\n}\n\n.audits-view button {\n    z-index: 10;\n    margin-left: auto;\n    margin-right: 0px;\n}\n\n.audits-status {\n    width: 100%;\n    flex: auto;\n    align-items: center;\n    color: #666;\n}\n\n.audits-status-text {\n    text-align: center;\n    min-height: 50px;\n    margin-bottom: 10px;\n    display: flex;\n    justify-content: center;\n    flex-direction: column;\n    max-width: 100%;\n}\n\n.audits-status-text code {\n    user-select: text;\n    text-align: left;\n    white-space: pre-wrap;\n    overflow: auto;\n}\n\n.audits-progress-wrapper {\n    width: calc(100% + 2 * var(--view-horizontal-margin));\n    height: 2px;\n    background-color: #E1F5FE;\n    position: relative;\n    margin: 10px;\n}\n\n.audits-progress-bar {\n    width: 0%;\n    height: 100%;\n    background: #039BE5;\n    position: absolute;\n    transform-origin: left;\n    animation-fill-mode: forwards;\n    animation-timing-function: ease-out;\n    --progress-bar-loading-duration: 45s;\n    --progress-bar-gathering-duration: 12s;\n    --progress-bar-gathering-percent: 70%;\n    --progress-bar-auditing-duration: 5s;\n    --progress-bar-auditing-percent: 95%;\n}\n\n.audits-progress-bar.errored {\n    width: 100%;\n    background: #E50303;\n}\n\n.audits-progress-bar.loading {\n    animation-duration: var(--progress-bar-loading-duration);\n    animation-name: progressBarLoading;\n}\n\n@keyframes progressBarLoading {\n  0% { width: 0%; }\n  100% { width: var(--progress-bar-gathering-percent); }\n}\n\n.audits-progress-bar.gathering {\n    animation-duration: var(--progress-bar-gathering-duration);\n    animation-name: progressBarGathering;\n}\n\n@keyframes progressBarGathering {\n  0% { width: var(--progress-bar-gathering-percent); }\n  100% { width: var(--progress-bar-auditing-percent); }\n}\n\n.audits-progress-bar.auditing {\n    animation-duration: var(--progress-bar-auditing-duration);\n    animation-name: progressBarAuditing;\n}\n\n@keyframes progressBarAuditing {\n  0% { width: var(--progress-bar-auditing-percent); }\n  100% { width: 99%; }\n}\n\n.audits-report-error {\n    display: block;\n    margin-top: 5px;\n}\n\n/*# sourceURL=audits/auditsDialog.css */";Root.Runtime.cachedResources["audits/auditsPanel.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n.lh-root {\n  --report-menu-width: 0;\n  user-select: text;\n}\n\n/* for View Trace button */\n.lh-audit-group {\n  position: relative;\n}\nbutton.view-trace {\n  margin: 10px;\n}\n\n.audits-results-container {\n    position: relative;\n}\n\n/** `window.opener` is null for windows opened from DevTools. This breaks\n    the LH viewer app, so disable this feature. */\n.lh-tools--viewer {\n  display: none !important;\n}\n\n.audits-settings-pane {\n  flex: none;\n}\n\n.audits-settings-pane .toolbar {\n  flex: 1 1;\n}\n\n.audits-toolbar-container {\n  display: flex;\n  flex: none;\n}\n\n.audits-toolbar-container > :first-child {\n  flex: 1 1 auto;\n}\n\n/*# sourceURL=audits/auditsPanel.css */";Root.Runtime.cachedResources["audits/auditsStartView.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.audits-start-view {\n  font-family: Roboto, sans-serif;\n  font-size: var(--font-size);\n  line-height: 18px;\n\n  --color-blue: #0535C1;\n  /* for buttons */\n  --accent-color: var(--color-blue);\n  --color-bg: white;\n  --font-size: 14px;\n  --report-font-family: Roboto, Helvetica, Arial, sans-serif;\n}\n\n.audits-start-view header {\n  flex: 2 1;\n  padding: 16px;\n  display: grid;\n  justify-items: center;\n}\n\n.audits-logo {\n    width: 75px;\n    height: 75px;\n    flex-shrink: 0;\n    background-repeat: no-repeat;\n    background-size: contain;\n    background-image: url(Images/audits_logo.svg);\n}\n\n.audits-start-view-text {\n  margin: 0 40px;\n  text-align: center;\n}\n\n.audits-start-view form {\n  display: contents;\n}\n\n.audits-form-section {\n  padding: 8px;\n  flex: 1 1;\n}\n\n.audits-start-view.vbox .audits-form-categories {\n  border-top: 1px solid #ebebeb;\n  border-bottom: 1px solid #ebebeb;\n}\n\n.audits-form-section-label {\n  margin: 7px 0 7px;\n  font-weight: 500;\n}\n\n.audits-form-section input {\n  margin-top: 0;\n  margin-bottom: 0;\n  margin-left: 0;\n}\n\n.audits-form-section-label i span {\n  position: relative;\n  top: -2px;\n}\n\n.audits-form-section-label span.largeicon-checkmark {\n  top: -4px;\n}\n\n.audits-radio {\n  display: flex;\n  align-items: center;\n}\n\n.audits-start-button-container {\n  align-items: center;\n}\n\n.audits-start-button-container button {\n  margin: 8px auto;\n  font-family: var(--report-font-family);\n  font-weight: 500;\n  font-size: var(--font-size);\n}\n.audits-start-button-container button:disabled {\n  cursor: not-allowed;\n}\n\n.audits-start-view .toolbar-dropdown-arrow {\n  display: none;\n}\n\n.audits-launcher-row,\n.audits-radio {\n  margin-bottom: 6px;\n}\n\n.audits-launcher-row:last-of-type,\n.audits-radio:last-of-type {\n  margin-bottom: 0;\n}\n\n.audits-launcher-row .dimmed {\n  padding-left: 22px;\n}\n\n.audits-help-text {\n  text-align: center;\n  color: red;\n  font-weight: bold;\n  padding-left: 10px;\n}\n\n/*# sourceURL=audits/auditsStartView.css */";Root.Runtime.cachedResources["audits/lighthouse/template.html"]="<!--\n@license\nCopyright 2018 Google Inc. All Rights Reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS-IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, minimum-scale=1\">\n  <link rel=\"icon\" href=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEhklEQVR4AWJxL/BhIAesev1U5tcflpncgNrKIsqNIwzC9feMpDUzs70kOczMzMzJJcxwCTMzncPMnOwtzBwzMzPb0vRfeZPp0VhPS5I39V5fdiXV1/VD+9QC7OVn9BsyH1XIoEI1PfmJvLFowVV564+34DFUHudbmfDh4kVXh//7XwE+WjS/YfXZe3yr4j2rqj1AIhSB7hZ8ZtPZu/zw8cK523U4wE1/rvPfWrz4zs0m9ZdC9yUJAlASdBAgocRegfF/f3/h/PuaFsxMdwjAR0vm1+06eMMfIrhLqTWqdH4EumU2SPfMhigJAlRQbZrgrRsl9U+Y2DYDFCz3ILC9kiAiqSrMwbWT0nceEnR+9Kggc2zjOJCASDENkg0a5HfZZgDP81CM3CrQs2Z1+o7DJ6ePr8sK0AOCHv5Jjdt3evyYSaZ351VIStIxPRAUtrBYbxC6w+BZ0ivVSBKkIhJhemSyZpfB00EiPO2VjzYkxhcqXQqCWCShGplvi3y0QxqbuBurMjyJeWnkHZuAEgIQGsUBqwrfjZ+IlBgKyRJzVVYF8O6qFWdh86YzQzMrZigYmxAyfvHgLZQ/LC1CbeniW2Hkqr/PH16SgvGuf2/uzNMBwJA/njxizGPtSyAf7EziJCMGRDRdhoAC4PL1A/SrKQMAAQkEfpJAcRQdrBJ7gNwjSpJsdwK+CANBkqa1LgQB4IicV9nYUct7gaxuDJUErQIiEAiMxLVOFlKzIktPpT0ggpdpC/8YAHnxbgkUY4tAAFSR7AAXNyAAWHJrA/kHGjzg5nleuwFO7Nd/IoDw4Pm58+4jNLmYG0wRA5bErc2Mr3Y+dXTDW1VvwqbJkzMCHQ4S1GTCBOIgUHJrGdEwqzR+jAp/o2qAZelUDoQnruEEdDclJI6576AlNVfc+22XN/+Y1vnJD0Yind6UpEEvn/Hqq15EYjCW7jZCJEpnNvDgkyelDjs106kuux2AAXCSobULOWP8mLhYlpoDMK4qAFXJGk+grtH8YXVz5KJblqaG1+VUdTc0I290bmUQAriGITRbdQnom0aoFj8kx1+wMD2ifncAXUQE4SkDqN1hE0jEophs1SUwZAOhUAiMCLwRtamtTZtbbmZErSAUHbSysaoEmnrsakiMiUAURi283gN6wans9oX8rOCrj7/JP35DFD+iQ7Au/K2KE1jzx6ujjUnXFH9KjEq6ZlhsTBICrNLJf47Pv/pkHzvup1w4dmUbEei0+bcXRqJuh5kVARQ8byyYxOwNGr7A87xh1tp8sGT+uMInrwi++Xj7TQz2d27NvwEkrOflAFQGIDA5khASBCGdO2/Z/MnLPwYfv5TFhjW7QhVKAB6afwe2LpFlFsCnlQEosgQgDsdOG1/LKeNqJS4JCSPJ/i+TakwEARor7gER1Iva5JmPOJK0RUqmoPnnlzFCtmIAhAAQEIQRgDaiYPIauNXcnDlRIrWNFY3hm7PG9YRqr7IV7HrCgAC17befjEvRq2nGhAHtBqDpOuI/I1diUUAMYIxEdyejBJqLnNoszGZtfiX/CztGv2mq+sdaAAAAAElFTkSuQmCC\">\n  <title>Lighthouse Report</title>\n  <style>/*%%LIGHTHOUSE_CSS%%*/</style>\n</head>\n<body class=\"lh-root lh-vars\">\n  <noscript>Lighthouse report requires JavaScript. Please enable.</noscript>\n  <div hidden>%%LIGHTHOUSE_TEMPLATES%%</div>\n\n  <main><!-- report populated here --></main>\n\n  <div id=\"lh-log\"></div>\n\n  <script>%%LIGHTHOUSE_JAVASCRIPT%%\n  //# sourceURL=compiled-reportrenderer.js\n  </script>\n  <script>window.__LIGHTHOUSE_JSON__ = %%LIGHTHOUSE_JSON%%;</script>\n  <script>\n    function __initLighthouseReport__() {\n      const dom = new DOM(document);\n      const renderer = new ReportRenderer(dom);\n\n      const container = document.querySelector('main');\n      renderer.renderReport(window.__LIGHTHOUSE_JSON__, container);\n\n      // Hook in JS features and page-level event listeners after the report\n      // is in the document.\n      const features = new ReportUIFeatures(dom);\n      features.initFeatures(window.__LIGHTHOUSE_JSON__);\n    }\n    window.addEventListener('DOMContentLoaded', __initLighthouseReport__);\n\n    document.addEventListener('lh-analytics', e => {\n      if (window.ga) {\n        ga(e.detail.cmd, e.detail.fields);\n      }\n    });\n\n    document.addEventListener('lh-log', e => {\n      const logger = new Logger(document.querySelector('#lh-log'));\n\n      switch (e.detail.cmd) {\n        case 'log':\n          logger.log(e.detail.msg);\n          break;\n        case 'warn':\n          logger.warn(e.detail.msg);\n          break;\n        case 'error':\n          logger.error(e.detail.msg);\n          break;\n        case 'hide':\n          logger.hide();\n          break;\n      }\n    });\n  </script>\n</body>\n</html>\n\n/*# sourceURL=audits/lighthouse/template.html */";Root.Runtime.cachedResources["audits/lighthouse/templates.html"]="<!--\n@license\nCopyright 2018 Google Inc. All Rights Reserved.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS-IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n-->\n\n<!-- Lighthouse run warnings -->\n<template id=\"tmpl-lh-warnings--toplevel\">\n  <div class=\"lh-warnings lh-warnings--toplevel\">\n    <strong class=\"lh-warnings__msg\"></strong>\n    <ul></ul>\n  </div>\n</template>\n\n<!-- Lighthouse score scale -->\n<template id=\"tmpl-lh-scorescale\">\n  <div class=\"lh-scorescale\">\n      <span class=\"lh-scorescale-range lh-scorescale-range--fail\">0&ndash;49</span>\n      <span class=\"lh-scorescale-range lh-scorescale-range--average\">50&ndash;89</span>\n      <span class=\"lh-scorescale-range lh-scorescale-range--pass\">90&ndash;100</span>\n  </div>\n</template>\n\n<!-- Toggle arrow chevron -->\n<template id=\"tmpl-lh-chevron\">\n  <svg class=\"lh-chevron\" title=\"See audits\" xmlns=\"http://www.w3.org/2000/svg\" viewbox=\"0 0 100 100\">\n    <g class=\"lh-chevron__lines\">\n      <path class=\"lh-chevron__line lh-chevron__line-left\" d=\"M10 50h40\"></path>\n      <path class=\"lh-chevron__line lh-chevron__line-right\" d=\"M90 50H50\"></path>\n    </g>\n  </svg>\n</template>\n\n<!-- Lighthouse category header -->\n<template id=\"tmpl-lh-category-header\">\n  <div class=\"lh-category-header\">\n    <div class=\"lh-score__gauge\" role=\"heading\" aria-level=\"2\"></div>\n    <div class=\"lh-category-header__description\"></div>\n  </div>\n</template>\n\n<!-- Lighthouse clump -->\n<template id=\"tmpl-lh-clump\">\n  <!-- TODO: group classes shouldn't be reused for clumps. -->\n  <details class=\"lh-clump lh-audit-group\">\n    <summary>\n      <div class=\"lh-audit-group__summary\">\n        <div class=\"lh-audit-group__header\">\n          <span class=\"lh-audit-group__title\"></span>\n          <span class=\"lh-audit-group__itemcount\"></span>\n          <!-- .lh-audit-group__description will be added here -->\n          <!-- .lh-metrics-toggle will be added here -->\n        </div>\n        <div class=\"\"></div>\n      </div>\n    </summary>\n  </details>\n</template>\n\n<!-- Lighthouse metrics toggle -->\n<template id=\"tmpl-lh-metrics-toggle\">\n  <div class=\"lh-metrics-toggle\">\n    <input class=\"lh-metrics-toggle__input\" type=\"checkbox\" id=\"toggle-metric-descriptions\" aria-label=\"Toggle the display of metric descriptions\">\n    <label class=\"lh-metrics-toggle__label\" for=\"toggle-metric-descriptions\">\n      <div class=\"lh-metrics-toggle__icon lh-metrics-toggle__icon--less\" aria-hidden=\"true\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n          <path class=\"lh-metrics-toggle__lines\" d=\"M4 9h16v2H4zm0 4h10v2H4z\" />\n        </svg>\n      </div>\n      <div class=\"lh-metrics-toggle__icon lh-metrics-toggle__icon--more\" aria-hidden=\"true\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n          <path class=\"lh-metrics-toggle__lines\" d=\"M3 18h12v-2H3v2zM3 6v2h18V6H3zm0 7h18v-2H3v2z\" />\n        </svg>\n      </div>\n    </label>\n  </div>\n</template>\n\n<!-- Lighthouse audit -->\n<template id=\"tmpl-lh-audit\">\n  <div class=\"lh-audit\">\n    <details class=\"lh-expandable-details\">\n      <summary>\n        <div class=\"lh-audit__header lh-expandable-details__summary\">\n          <span class=\"lh-audit__score-icon\"></span>\n          <span class=\"lh-audit__title-and-text\">\n            <span class=\"lh-audit__title\"></span>\n            <span class=\"lh-audit__display-text\"></span>\n          </span>\n          <div class=\"lh-chevron-container\"></div>\n        </div>\n      </summary>\n      <div class=\"lh-audit__description\"></div>\n      <div class=\"lh-audit__stackpacks\"></div>\n    </details>\n  </div>\n</template>\n\n<!-- Lighthouse perf metric -->\n<template id=\"tmpl-lh-metric\">\n  <div class=\"lh-metric\">\n    <div class=\"lh-metric__innerwrap\">\n      <span class=\"lh-metric__title\"></span>\n      <div class=\"lh-metric__value\"></div>\n      <div class=\"lh-metric__description\"></div>\n    </div>\n  </div>\n</template>\n\n<!-- Lighthouse perf opportunity -->\n<template id=\"tmpl-lh-opportunity\">\n  <div class=\"lh-audit lh-audit--load-opportunity\">\n    <details class=\"lh-expandable-details\">\n        <summary>\n          <div class=\"lh-audit__header lh-expandable-details__summary\">\n            <div class=\"lh-load-opportunity__cols\">\n              <div class=\"lh-load-opportunity__col lh-load-opportunity__col--one\">\n                <span class=\"lh-audit__score-icon\"></span>\n                <div class=\"lh-audit__title\"></div>\n              </div>\n              <div class=\"lh-load-opportunity__col lh-load-opportunity__col--two\">\n                <div class=\"lh-load-opportunity__sparkline\">\n                  <div class=\"lh-sparkline\"><div class=\"lh-sparkline__bar\"></div></div>\n                </div>\n                <div class=\"lh-audit__display-text\"></div>\n                <div class=\"lh-chevron-container\" title=\"See resources\"></div>\n              </div>\n            </div>\n          </div>\n        </summary>\n      <div class=\"lh-audit__description\"></div>\n      <div class=\"lh-audit__stackpacks\"></div>\n    </details>\n  </div>\n</template>\n\n<!-- Lighthouse perf opportunity header -->\n<template id=\"tmpl-lh-opportunity-header\">\n  <div class=\"lh-load-opportunity__header lh-load-opportunity__cols\">\n    <div class=\"lh-load-opportunity__col lh-load-opportunity__col--one\"></div>\n    <div class=\"lh-load-opportunity__col lh-load-opportunity__col--two\"></div>\n  </div>\n</template>\n\n<!-- Lighthouse score container -->\n<template id=\"tmpl-lh-scores-wrapper\">\n  <style>\n    .lh-scores-container {\n      display: flex;\n      flex-direction: column;\n      padding: var(--scores-container-padding);\n      position: relative;\n      width: 100%;\n    }\n\n    .lh-sticky-header {\n      --gauge-circle-size: 36px;\n      --plugin-badge-size: 18px;\n      --plugin-icon-size: 75%;\n      --gauge-wrapper-width: 60px;\n      --gauge-percentage-font-size: 13px;\n      position: sticky;\n      left: 0;\n      right: 0;\n      top: var(--topbar-height);\n      font-weight: 700;\n      display: none;\n      justify-content: center;\n      background-color: var(--sticky-header-background-color);\n      border-bottom: 1px solid var(--color-gray-200);\n      padding-top: var(--score-container-padding);\n      padding-bottom: 4px;\n      z-index: 1;\n      pointer-events: none;\n    }\n\n    .lh-sticky-header--visible {\n      display: grid;\n      grid-auto-flow: column;\n      pointer-events: auto;\n    }\n\n    /* Disable the gauge arc animation for the sticky header, so toggling display: none\n       does not play the animation. */\n    .lh-sticky-header .lh-gauge-arc {\n      animation: none;\n    }\n\n    .lh-sticky-header .lh-gauge__label {\n      display: none;\n    }\n\n    .lh-highlighter {\n      width: var(--gauge-wrapper-width);\n      height: 1px;\n      background-color: var(--highlighter-background-color);\n      /* Position at bottom of first gauge in sticky header. */\n      position: absolute;\n      grid-column: 1;\n      bottom: -1px;\n    }\n\n    .lh-gauge__wrapper:first-of-type {\n      contain: none;\n    }\n  </style>\n  <div class=\"lh-scores-wrapper\">\n    <div class=\"lh-scores-container\">\n      <div class=\"pyro\">\n        <div class=\"before\"></div>\n        <div class=\"after\"></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<!-- Lighthouse topbar -->\n<template id=\"tmpl-lh-topbar\">\n  <style>\n    .lh-topbar {\n      position: sticky;\n      top: 0;\n      left: 0;\n      right: 0;\n      z-index: 1000;\n      display: flex;\n      align-items: center;\n      height: var(--topbar-height);\n      background-color: var(--topbar-background-color);\n      padding: var(--topbar-padding);\n    }\n\n    .lh-topbar__logo {\n      width: var(--topbar-logo-size);\n      height: var(--topbar-logo-size);\n      user-select: none;\n      flex: none;\n    }\n    .lh-topbar__logo .shape {\n      fill: var(--report-text-color);\n    }\n\n    .lh-topbar__url {\n      margin: var(--topbar-padding);\n      text-decoration: none;\n      color: var(--report-text-color);\n      text-overflow: ellipsis;\n      overflow: hidden;\n      white-space: nowrap;\n    }\n\n    .lh-tools {\n      margin-left: auto;\n      will-change: transform;\n    }\n    .lh-tools__button {\n      width: var(--tools-icon-size);\n      height: var(--tools-icon-size);\n      cursor: pointer;\n      margin-right: 5px;\n      /* This is actually a button element, but we want to style it like a transparent div. */\n      display: flex;\n      background: none;\n      color: inherit;\n      border: none;\n      padding: 0;\n      font: inherit;\n      outline: inherit;\n    }\n    .lh-tools__button svg {\n      fill: var(--tools-icon-color);\n    }\n    .dark .lh-tools__button svg {\n      filter: invert(1);\n    }\n    .lh-tools__button.active + .lh-tools__dropdown {\n      opacity: 1;\n      clip: rect(-1px, 187px, 242px, -3px);\n      visibility: visible;\n    }\n    .lh-tools__dropdown {\n      position: absolute;\n      background-color: var(--report-background-color);\n      border: 1px solid var(--report-border-color);\n      border-radius: 3px;\n      padding: calc(var(--default-padding) / 2) 0;\n      cursor: pointer;\n      top: 36px;\n      right: 0;\n      box-shadow: 1px 1px 3px #ccc;\n      min-width: 125px;\n      clip: rect(0, 164px, 0, 0);\n      visibility: hidden;\n      opacity: 0;\n      transition: all 200ms cubic-bezier(0,0,0.2,1);\n    }\n    .lh-tools__dropdown a {\n      display: block;\n      color: currentColor;\n      text-decoration: none;\n      white-space: nowrap;\n      padding: 0 12px;\n      line-height: 2;\n    }\n    .lh-tools__dropdown a:hover,\n    .lh-tools__dropdown a:focus {\n      background-color: var(--color-gray-200);\n      outline: none;\n    }\n    .lh-tools__dropdown .report-icon {\n      cursor: pointer;\n      background-repeat: no-repeat;\n      background-position: 8px 50%;\n      background-size: 18px;\n      background-color: transparent;\n      text-indent: 18px;\n    }\n    .dark .report-icon {\n      color: var(--color-gray-900);\n      filter: invert(1);\n    }\n    .dark .lh-tools__dropdown a:hover,\n    .dark .lh-tools__dropdown a:focus {\n      background-color: #BDBDBD;\n    }\n    /* copy icon needs slight adjustments to look great */\n    .lh-tools__dropdown .report-icon--copy {\n      background-size: 16px;\n      background-position: 9px 50%;\n    }\n    /* save-as-gist option hidden in report */\n    .lh-tools__dropdown .lh-tools--gist {\n      display: none;\n    }\n\n    @media screen and (max-width: 964px) {\n      .lh-tools__dropdown {\n        right: 0;\n        left: initial;\n      }\n    }\n    @media print {\n      .lh-topbar {\n        position: static;\n        margin-left: 0;\n      }\n    }\n  </style>\n\n  <div class=\"lh-topbar\">\n    <!-- Lighthouse logo.  -->\n    <svg class=\"lh-topbar__logo\" viewBox=\"0 0 24 24\">\n      <defs>\n        <linearGradient x1=\"57.456%\" y1=\"13.086%\" x2=\"18.259%\" y2=\"72.322%\" id=\"lh-topbar__logo--a\">\n          <stop stop-color=\"#262626\" stop-opacity=\".1\" offset=\"0%\"/>\n          <stop stop-color=\"#262626\" stop-opacity=\"0\" offset=\"100%\"/>\n        </linearGradient>\n        <linearGradient x1=\"100%\" y1=\"50%\" x2=\"0%\" y2=\"50%\" id=\"lh-topbar__logo--b\">\n          <stop stop-color=\"#262626\" stop-opacity=\".1\" offset=\"0%\"/>\n          <stop stop-color=\"#262626\" stop-opacity=\"0\" offset=\"100%\"/>\n        </linearGradient>\n        <linearGradient x1=\"58.764%\" y1=\"65.756%\" x2=\"36.939%\" y2=\"50.14%\" id=\"lh-topbar__logo--c\">\n          <stop stop-color=\"#262626\" stop-opacity=\".1\" offset=\"0%\"/>\n          <stop stop-color=\"#262626\" stop-opacity=\"0\" offset=\"100%\"/>\n        </linearGradient>\n        <linearGradient x1=\"41.635%\" y1=\"20.358%\" x2=\"72.863%\" y2=\"85.424%\" id=\"lh-topbar__logo--d\">\n          <stop stop-color=\"#FFF\" stop-opacity=\".1\" offset=\"0%\"/>\n          <stop stop-color=\"#FFF\" stop-opacity=\"0\" offset=\"100%\"/>\n        </linearGradient>\n      </defs>\n      <g fill=\"none\" fill-rule=\"evenodd\">\n        <path d=\"M12 3l4.125 2.625v3.75H18v2.25h-1.688l1.5 9.375H6.188l1.5-9.375H6v-2.25h1.875V5.648L12 3zm2.201 9.938L9.54 14.633 9 18.028l5.625-2.062-.424-3.028zM12.005 5.67l-1.88 1.207v2.498h3.75V6.86l-1.87-1.19z\" fill=\"#F44B21\"/>\n        <path fill=\"#FFF\" d=\"M14.201 12.938L9.54 14.633 9 18.028l5.625-2.062z\"/>\n        <path d=\"M6 18c-2.042 0-3.95-.01-5.813 0l1.5-9.375h4.326L6 18z\" fill=\"url(#lh-topbar__logo--a)\" fill-rule=\"nonzero\" transform=\"translate(6 3)\"/>\n        <path fill=\"#FFF176\" fill-rule=\"nonzero\" d=\"M13.875 9.375v-2.56l-1.87-1.19-1.88 1.207v2.543z\"/>\n        <path fill=\"url(#lh-topbar__logo--b)\" fill-rule=\"nonzero\" d=\"M0 6.375h6v2.25H0z\" transform=\"translate(6 3)\"/>\n        <path fill=\"url(#lh-topbar__logo--c)\" fill-rule=\"nonzero\" d=\"M6 6.375H1.875v-3.75L6 0z\" transform=\"translate(6 3)\"/>\n        <path fill=\"url(#lh-topbar__logo--d)\" fill-rule=\"nonzero\" d=\"M6 0l4.125 2.625v3.75H12v2.25h-1.688l1.5 9.375H.188l1.5-9.375H0v-2.25h1.875V2.648z\" transform=\"translate(6 3)\"/>\n      </g>\n    </svg>\n\n    <a href=\"\" class=\"lh-topbar__url\" target=\"_blank\" rel=\"noopener\"></a>\n\n    <div class=\"lh-tools\">\n      <button id=\"lh-tools-button\" class=\"report-icon report-icon--share lh-tools__button\" title=\"Tools menu\" aria-label=\"Toggle report tools menu\" aria-haspopup=\"menu\" aria-expanded=\"false\" aria-controls=\"lh-tools-dropdown\">\n        <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 24 24\">\n            <path d=\"M0 0h24v24H0z\" fill=\"none\"/>\n            <path d=\"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"/>\n        </svg>\n      </button>\n      <div id=\"lh-tools-dropdown\" role=\"menu\" class=\"lh-tools__dropdown\" aria-labelledby=\"lh-tools-button\">\n         <!-- TODO(i18n): localize tools dropdown -->\n        <a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"report-icon report-icon--print\" data-action=\"print-summary\">Print Summary</a>\n        <a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"report-icon report-icon--print\" data-action=\"print-expanded\">Print Expanded</a>\n        <a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"report-icon report-icon--copy\" data-action=\"copy\">Copy JSON</a>\n        <a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"report-icon report-icon--download\" data-action=\"save-html\">Save as HTML</a>\n        <a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"report-icon report-icon--download\" data-action=\"save-json\">Save as JSON</a>\n        <a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"report-icon report-icon--open lh-tools--viewer\" data-action=\"open-viewer\">Open in Viewer</a>\n        <a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"report-icon report-icon--open lh-tools--gist\" data-action=\"save-gist\">Save as Gist</a>\n        <a role=\"menuitem\" tabindex=\"-1\" href=\"#\" class=\"report-icon report-icon--dark\" data-action=\"toggle-dark\">Toggle Dark Theme</a>\n      </div>\n    </div>\n  </div>\n</template>\n\n<!-- Lighthouse header -->\n<template id=\"tmpl-lh-heading\">\n  <style>\n    /* CSS Fireworks. Originally by Eddie Lin\n       https://codepen.io/paulirish/pen/yEVMbP\n    */\n    .pyro {\n      display: none;\n      z-index: 1;\n      pointer-events: none;\n    }\n    .score100 .pyro {\n      display: block;\n    }\n    .score100 .lh-lighthouse stop:first-child {\n      stop-color: hsla(200, 12%, 95%, 0);\n    }\n    .score100 .lh-lighthouse stop:last-child {\n      stop-color: hsla(65, 81%, 76%, 1);\n    }\n\n    .pyro > .before, .pyro > .after {\n      position: absolute;\n      width: 5px;\n      height: 5px;\n      border-radius: 2.5px;\n      box-shadow: 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff, 0 0 #fff;\n      animation: 1s bang ease-out infinite backwards,  1s gravity ease-in infinite backwards,  5s position linear infinite backwards;\n      animation-delay: 1s, 1s, 1s;\n    }\n\n    .pyro > .after {\n      animation-delay: 2.25s, 2.25s, 2.25s;\n      animation-duration: 1.25s, 1.25s, 6.25s;\n    }\n    .fireworks-paused .pyro > div {\n      animation-play-state: paused;\n    }\n\n    @keyframes bang {\n      to {\n        box-shadow: -70px -115.67px #47ebbc, -28px -99.67px #eb47a4, 58px -31.67px #7eeb47, 13px -141.67px #eb47c5, -19px 6.33px #7347eb, -2px -74.67px #ebd247, 24px -151.67px #eb47e0, 57px -138.67px #b4eb47, -51px -104.67px #479eeb, 62px 8.33px #ebcf47, -93px 0.33px #d547eb, -16px -118.67px #47bfeb, 53px -84.67px #47eb83, 66px -57.67px #eb47bf, -93px -65.67px #91eb47, 30px -13.67px #86eb47, -2px -59.67px #83eb47, -44px 1.33px #eb47eb, 61px -58.67px #47eb73, 5px -22.67px #47e8eb, -66px -28.67px #ebe247, 42px -123.67px #eb5547, -75px 26.33px #7beb47, 15px -52.67px #a147eb, 36px -51.67px #eb8347, -38px -12.67px #eb5547, -46px -59.67px #47eb81, 78px -114.67px #eb47ba, 15px -156.67px #eb47bf, -36px 1.33px #eb4783, -72px -86.67px #eba147, 31px -46.67px #ebe247, -68px 29.33px #47e2eb, -55px 19.33px #ebe047, -56px 27.33px #4776eb, -13px -91.67px #eb5547, -47px -138.67px #47ebc7, -18px -96.67px #eb47ac, 11px -88.67px #4783eb, -67px -28.67px #47baeb, 53px 10.33px #ba47eb, 11px 19.33px #5247eb, -5px -11.67px #eb4791, -68px -4.67px #47eba7, 95px -37.67px #eb478b, -67px -162.67px #eb5d47, -54px -120.67px #eb6847, 49px -12.67px #ebe047, 88px 8.33px #47ebda, 97px 33.33px #eb8147, 6px -71.67px #ebbc47;\n      }\n    }\n    @keyframes gravity {\n      to {\n        transform: translateY(80px);\n        opacity: 0;\n      }\n    }\n    @keyframes position {\n      0%, 19.9% {\n        margin-top: 4%;\n        margin-left: 47%;\n      }\n      20%, 39.9% {\n        margin-top: 7%;\n        margin-left: 30%;\n      }\n      40%, 59.9% {\n        margin-top: 6%;\n        margin-left: 70%;\n      }\n      60%, 79.9% {\n        margin-top: 3%;\n        margin-left: 20%;\n      }\n      80%, 99.9% {\n        margin-top: 3%;\n        margin-left: 80%;\n      }\n    }\n  </style>\n\n  <div class=\"lh-header-container\">\n    <div class=\"lh-scores-wrapper-placeholder\"></div>\n  </div>\n</template>\n\n\n<!-- Lighthouse footer -->\n<template id=\"tmpl-lh-footer\">\n  <style>\n    .lh-footer {\n      padding: var(--footer-padding-vertical) calc(var(--default-padding) * 2);\n      max-width: var(--report-width);\n      margin: 0 auto;\n    }\n    .lh-footer .lh-generated {\n      text-align: center;\n    }\n    .lh-env__title {\n      font-size: var(--env-item-font-size-big);\n      line-height: var(--env-item-line-height-big);\n      text-align: center;\n      padding: var(--score-container-padding);\n    }\n    .lh-env {\n      padding: var(--default-padding) 0;\n    }\n    .lh-env__items {\n      padding-left: 16px;\n      margin: 0 0 var(--audits-margin-bottom);\n      padding: 0;\n    }\n    .lh-env__items .lh-env__item:nth-child(2n) {\n      background-color: var(--env-item-background-color);\n    }\n    .lh-env__item {\n      display: flex;\n      padding: var(--env-item-padding);\n      position: relative;\n    }\n    span.lh-env__name {\n      font-weight: bold;\n      min-width: var(--env-name-min-width);\n      flex: 0.5;\n      padding: 0 8px;\n    }\n    span.lh-env__description {\n      text-align: left;\n      flex: 1;\n    }\n  </style>\n  <footer class=\"lh-footer\">\n    <!-- TODO(i18n): localize runtime settings -->\n    <div class=\"lh-env\">\n      <div class=\"lh-env__title\">Runtime Settings</div>\n      <ul class=\"lh-env__items\">\n        <template id=\"tmpl-lh-env__items\">\n          <li class=\"lh-env__item\">\n            <span class=\"lh-env__name\"></span>\n            <span class=\"lh-env__description\"></span>\n          </li>\n        </template>\n      </ul>\n    </div>\n\n    <div class=\"lh-generated\">\n      Generated by <b>Lighthouse</b> <span class=\"lh-footer__version\"></span> |\n      <a href=\"https://github.com/GoogleChrome/Lighthouse/issues\" target=\"_blank\" rel=\"noopener\">File an issue</a>\n    </div>\n  </footer>\n</template>\n\n<!-- Lighthouse score gauge -->\n<template id=\"tmpl-lh-gauge\">\n  <a href=\"#\" class=\"lh-gauge__wrapper\">\n    <!-- Wrapper exists for the ::before plugin icon. Cannot create pseudo-elements on svgs. -->\n    <div class=\"lh-gauge__svg-wrapper\">\n      <svg viewBox=\"0 0 120 120\" class=\"lh-gauge\">\n        <circle class=\"lh-gauge-base\" r=\"56\" cx=\"60\" cy=\"60\"></circle>\n        <circle class=\"lh-gauge-arc\" transform=\"rotate(-90 60 60)\" r=\"56\" cx=\"60\" cy=\"60\"></circle>\n      </svg>\n    </div>\n    <div class=\"lh-gauge__percentage\"></div>\n    <!-- TODO: should likely be an h2  -->\n    <div class=\"lh-gauge__label\"></div>\n  </a>\n</template>\n\n\n<!-- Lighthouse PWA badge gauge -->\n<template id=\"tmpl-lh-gauge--pwa\">\n  <style>\n    .lh-gauge--pwa .lh-gauge--pwa__component {\n      display: none;\n    }\n    .lh-gauge--pwa__wrapper:not(.lh-badged--all) .lh-gauge--pwa__logo > path {\n      /* Gray logo unless everything is passing. */\n      fill: #B0B0B0;\n    }\n\n    .lh-gauge--pwa__disc {\n      fill: var(--color-gray-200);\n    }\n\n    .lh-gauge--pwa__logo--primary-color {\n      fill: #304FFE;\n    }\n\n    .lh-gauge--pwa__logo--secondary-color {\n      fill: #3D3D3D;\n    }\n    .dark .lh-gauge--pwa__logo--secondary-color {\n      fill: #D8B6B6;\n    }\n\n    /* No passing groups. */\n    .lh-gauge--pwa__wrapper:not([class*='lh-badged--']) .lh-gauge--pwa__na-line {\n      display: inline;\n    }\n    /* Just optimized. Same n/a line as no passing groups. */\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-optimized:not(.lh-badged--pwa-installable):not(.lh-badged--pwa-fast-reliable) .lh-gauge--pwa__na-line {\n      display: inline;\n    }\n\n    /* Just fast and reliable. */\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-fast-reliable:not(.lh-badged--pwa-installable) .lh-gauge--pwa__fast-reliable-badge {\n      display: inline;\n    }\n\n    /* Just installable. */\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-installable:not(.lh-badged--pwa-fast-reliable) .lh-gauge--pwa__installable-badge {\n      display: inline;\n    }\n\n    /* Fast and reliable and installable. */\n    .lh-gauge--pwa__wrapper.lh-badged--pwa-fast-reliable.lh-badged--pwa-installable .lh-gauge--pwa__fast-reliable-installable-badges {\n      display: inline;\n    }\n\n    /* All passing groups. */\n    .lh-gauge--pwa__wrapper.lh-badged--all .lh-gauge--pwa__check-circle {\n      display: inline;\n    }\n  </style>\n\n  <a href=\"#\" class=\"lh-gauge__wrapper lh-gauge--pwa__wrapper\">\n    <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 60\" class=\"lh-gauge lh-gauge--pwa\">\n      <defs>\n        <linearGradient id=\"lh-gauge--pwa__check-circle__gradient\" x1=\"50%\" y1=\"0%\" x2=\"50%\" y2=\"100%\">\n          <stop stop-color=\"#00C852\" offset=\"0%\"></stop>\n          <stop stop-color=\"#009688\" offset=\"100%\"></stop>\n        </linearGradient>\n        <linearGradient id=\"lh-gauge--pwa__installable__shadow-gradient\" x1=\"76.056%\" x2=\"24.111%\" y1=\"82.995%\" y2=\"24.735%\">\n          <stop stop-color=\"#A5D6A7\" offset=\"0%\"></stop>\n          <stop stop-color=\"#80CBC4\" offset=\"100%\"></stop>\n        </linearGradient>\n        <linearGradient id=\"lh-gauge--pwa__fast-reliable__shadow-gradient\" x1=\"76.056%\" y1=\"82.995%\" x2=\"25.678%\" y2=\"26.493%\">\n          <stop stop-color=\"#64B5F6\" offset=\"0%\"></stop>\n          <stop stop-color=\"#2979FF\" offset=\"100%\"></stop>\n        </linearGradient>\n\n        <g id=\"lh-gauge--pwa__fast-reliable-badge\">\n          <circle fill=\"#FFFFFF\" cx=\"10\" cy=\"10\" r=\"10\"></circle>\n          <path fill=\"#304FFE\" d=\"M10 3.58l5.25 2.34v3.5c0 3.23-2.24 6.26-5.25 7-3.01-.74-5.25-3.77-5.25-7v-3.5L10 3.58zm-.47 10.74l2.76-4.83.03-.07c.04-.08 0-.24-.22-.24h-1.64l.47-3.26h-.47l-2.7 4.77c-.02.01.05-.1-.04.05-.09.16-.1.31.18.31h1.63l-.47 3.27h.47z\"/>\n        </g>\n        <g id=\"lh-gauge--pwa__installable-badge\">\n          <circle fill=\"#FFFFFF\" cx=\"10\" cy=\"10\" r=\"10\"></circle>\n          <path fill=\"#009688\" d=\"M10 4.167A5.835 5.835 0 0 0 4.167 10 5.835 5.835 0 0 0 10 15.833 5.835 5.835 0 0 0 15.833 10 5.835 5.835 0 0 0 10 4.167zm2.917 6.416h-2.334v2.334H9.417v-2.334H7.083V9.417h2.334V7.083h1.166v2.334h2.334v1.166z\"/>\n        </g>\n      </defs>\n\n      <g stroke=\"none\" fill-rule=\"nonzero\">\n        <!-- Background and PWA logo (color by default) -->\n        <circle class=\"lh-gauge--pwa__disc\" cx=\"30\" cy=\"30\" r=\"30\"></circle>\n        <g class=\"lh-gauge--pwa__logo\">\n          <path class=\"lh-gauge--pwa__logo--secondary-color\" d=\"M35.66 19.39l.7-1.75h2L37.4 15 38.6 12l3.4 9h-2.51l-.58-1.61z\"/>\n          <path class=\"lh-gauge--pwa__logo--primary-color\" d=\"M33.52 21l3.65-9h-2.42l-2.5 5.82L30.5 12h-1.86l-1.9 5.82-1.35-2.65-1.21 3.72L25.4 21h2.38l1.72-5.2 1.64 5.2z\"/>\n          <path class=\"lh-gauge--pwa__logo--secondary-color\" fill-rule=\"nonzero\" d=\"M20.3 17.91h1.48c.45 0 .85-.05 1.2-.15l.39-1.18 1.07-3.3a2.64 2.64 0 0 0-.28-.37c-.55-.6-1.36-.91-2.42-.91H18v9h2.3V17.9zm1.96-3.84c.22.22.33.5.33.87 0 .36-.1.65-.29.87-.2.23-.59.35-1.15.35h-.86v-2.41h.87c.52 0 .89.1 1.1.32z\"/>\n        </g>\n\n        <!-- No badges. -->\n        <rect class=\"lh-gauge--pwa__component lh-gauge--pwa__na-line\" fill=\"#FFFFFF\" x=\"20\" y=\"32\" width=\"20\" height=\"4\" rx=\"2\"></rect>\n\n        <!-- Just fast and reliable. -->\n        <g class=\"lh-gauge--pwa__component lh-gauge--pwa__fast-reliable-badge\" transform=\"translate(20, 29)\">\n          <path fill=\"url(#lh-gauge--pwa__fast-reliable__shadow-gradient)\" d=\"M33.63 19.49A30 30 0 0 1 16.2 30.36L3 17.14 17.14 3l16.49 16.49z\"/>\n          <use href=\"#lh-gauge--pwa__fast-reliable-badge\" />\n        </g>\n\n        <!-- Just installable. -->\n        <g class=\"lh-gauge--pwa__component lh-gauge--pwa__installable-badge\" transform=\"translate(20, 29)\">\n          <path fill=\"url(#lh-gauge--pwa__installable__shadow-gradient)\" d=\"M33.629 19.487c-4.272 5.453-10.391 9.39-17.415 10.869L3 17.142 17.142 3 33.63 19.487z\"/>\n          <use href=\"#lh-gauge--pwa__installable-badge\" />\n        </g>\n\n        <!-- Fast and reliable and installable. -->\n        <g class=\"lh-gauge--pwa__component lh-gauge--pwa__fast-reliable-installable-badges\">\n          <g transform=\"translate(8, 29)\"> <!-- fast and reliable -->\n            <path fill=\"url(#lh-gauge--pwa__fast-reliable__shadow-gradient)\" d=\"M16.321 30.463L3 17.143 17.142 3l22.365 22.365A29.864 29.864 0 0 1 22 31c-1.942 0-3.84-.184-5.679-.537z\"/>\n            <use href=\"#lh-gauge--pwa__fast-reliable-badge\" />\n          </g>\n          <g transform=\"translate(32, 29)\"> <!-- installable -->\n            <path fill=\"url(#lh-gauge--pwa__installable__shadow-gradient)\" d=\"M25.982 11.84a30.107 30.107 0 0 1-13.08 15.203L3 17.143 17.142 3l8.84 8.84z\"/>\n            <use href=\"#lh-gauge--pwa__installable-badge\" />\n          </g>\n        </g>\n\n        <!-- Full PWA. -->\n        <g class=\"lh-gauge--pwa__component lh-gauge--pwa__check-circle\" transform=\"translate(18, 28)\">\n          <circle fill=\"#FFFFFF\" cx=\"12\" cy=\"12\" r=\"12\"></circle>\n          <path fill=\"url(#lh-gauge--pwa__check-circle__gradient)\" d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"></path>\n        </g>\n      </g>\n    </svg>\n\n    <div class=\"lh-gauge__label\"></div>\n  </a>\n</template>\n\n<!-- Lighthouse crtiical request chains component -->\n<template id=\"tmpl-lh-crc\">\n  <div class=\"lh-crc-container\">\n    <style>\n      .lh-crc .tree-marker {\n        width: 12px;\n        height: 26px;\n        display: block;\n        float: left;\n        background-position: top left;\n      }\n      .lh-crc .horiz-down {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"%23D8D8D8\" fill-rule=\"evenodd\"><path d=\"M16 12v2H-2v-2z\"/><path d=\"M9 12v14H7V12z\"/></g></svg>');\n      }\n      .lh-crc .right {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M16 12v2H0v-2z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n      }\n      .lh-crc .up-right {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v14H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n      }\n      .lh-crc .vert-right {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v27H7zm2 12h7v2H9z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n      }\n      .lh-crc .vert {\n        background: url('data:image/svg+xml;utf8,<svg width=\"16\" height=\"26\" viewBox=\"0 0 16 26\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 0h2v26H7z\" fill=\"%23D8D8D8\" fill-rule=\"evenodd\"/></svg>');\n      }\n      .lh-crc .crc-tree {\n        font-size: 14px;\n        width: 100%;\n        overflow-x: auto;\n      }\n      .lh-crc .crc-node {\n        height: 26px;\n        line-height: 26px;\n        white-space: nowrap;\n      }\n      .lh-crc .crc-node__tree-value {\n        margin-left: 10px;\n      }\n      .lh-crc .crc-node__tree-value div {\n        display: inline;\n      }\n      .lh-crc .crc-node__chain-duration {\n        font-weight: 700;\n      }\n      .lh-crc .crc-initial-nav {\n        color: #595959;\n        font-style: italic;\n      }\n      .lh-crc__summary-value {\n        margin-bottom: 10px;\n      }\n    </style>\n    <div>\n      <div class=\"lh-crc__summary-value\">\n        <span class=\"lh-crc__longest_duration_label\"></span> <b class=\"lh-crc__longest_duration\"></b>\n      </div>\n    </div>\n    <div class=\"lh-crc\">\n      <div class=\"crc-initial-nav\"></div>\n      <!-- stamp for each chain -->\n      <template id=\"tmpl-lh-crc__chains\">\n        <div class=\"crc-node\">\n          <span class=\"crc-node__tree-marker\">\n\n          </span>\n          <span class=\"crc-node__tree-value\">\n\n          </span>\n        </div>\n      </template>\n    </div>\n  </div>\n</template>\n\n<template id=\"tmpl-lh-3p-filter\">\n  <style>\n    .lh-3p-filter {\n      background-color: var(--table-higlight-background-color);\n      color: var(--color-gray-600);\n      float: right;\n      padding: 6px;\n    }\n    .lh-3p-filter-label, .lh-3p-filter-input {\n      vertical-align: middle;\n      user-select: none;\n    }\n    .lh-3p-filter-input:disabled + .lh-3p-ui-string {\n      text-decoration: line-through;\n    }\n  </style>\n  <div class=\"lh-3p-filter\">\n    <label class=\"lh-3p-filter-label\">\n      <input type=\"checkbox\" class=\"lh-3p-filter-input\" checked />\n      <span class=\"lh-3p-ui-string\">Show 3rd party resources</span> (<span class=\"lh-3p-filter-count\"></span>)\n    </label>\n  </div>\n</template>\n\n<!-- Lighthouse snippet component -->\n<template id=\"tmpl-lh-snippet\">\n    <div class=\"lh-snippet\">\n      <style>\n          :root {\n            --snippet-highlight-light: #fbf1f2;\n            --snippet-highlight-dark: #ffd6d8;\n          }\n\n         .lh-snippet__header {\n          position: relative;\n          overflow: hidden;\n          padding: 10px;\n          border-bottom: none;\n          color: var(--snippet-color);\n          background-color: var(--snippet-background-color);\n          border: 1px solid var(--report-border-color-secondary);\n        }\n        .lh-snippet__title {\n          font-weight: bold;\n          float: left;\n        }\n        .lh-snippet__node {\n          float: left;\n          margin-left: 4px;\n        }\n        .lh-snippet__toggle-expand {\n          padding: 1px 7px;\n          margin-top: -1px;\n          margin-right: -7px;\n          float: right;\n          background: transparent;\n          border: none;\n          cursor: pointer;\n          font-size: 14px;\n          color: #0c50c7;\n        }\n\n        .lh-snippet__snippet {\n          overflow: auto;\n          border: 1px solid var(--report-border-color-secondary);\n        }\n        /* Container needed so that all children grow to the width of the scroll container */\n        .lh-snippet__snippet-inner {\n          display: inline-block;\n          min-width: 100%;\n        }\n\n        .lh-snippet:not(.lh-snippet--expanded) .lh-snippet__show-if-expanded {\n          display: none;\n        }\n        .lh-snippet.lh-snippet--expanded .lh-snippet__show-if-collapsed {\n          display: none;\n        }\n\n        .lh-snippet__line {\n          background: white;\n          white-space: pre;\n          display: flex;\n        }\n        .lh-snippet__line:not(.lh-snippet__line--message):first-child {\n          padding-top: 4px;\n        }\n        .lh-snippet__line:not(.lh-snippet__line--message):last-child {\n          padding-bottom: 4px;\n        }\n        .lh-snippet__line--content-highlighted {\n          background: var(--snippet-highlight-dark);\n        }\n        .lh-snippet__line--message {\n          background: var(--snippet-highlight-light);\n        }\n        .lh-snippet__line--message .lh-snippet__line-number {\n          padding-top: 10px;\n          padding-bottom: 10px;\n        }\n        .lh-snippet__line--message code {\n          padding: 10px;\n          padding-left: 5px;\n          color: var(--color-fail);\n          font-family: var(--report-font-family);\n        }\n        .lh-snippet__line--message code {\n          white-space: normal;\n        }\n        .lh-snippet__line-icon {\n          padding-top: 10px;\n          display: none;\n        }\n        .lh-snippet__line--message .lh-snippet__line-icon {\n          display: block;\n        }\n        .lh-snippet__line-icon:before {\n          content: \"\";\n          display: inline-block;\n          vertical-align: middle;\n          margin-right: 4px;\n          width: var(--score-icon-size);\n          height: var(--score-icon-size);\n          background-image: var(--fail-icon-url);\n        }\n        .lh-snippet__line-number {\n          flex-shrink: 0;\n          width: 40px;\n          text-align: right;\n          font-family: monospace;\n          padding-right: 5px;\n          margin-right: 5px;\n          color: var(--color-gray-600);\n          user-select: none;\n        }\n      </style>\n      <template id=\"tmpl-lh-snippet__header\">\n        <div class=\"lh-snippet__header\">\n          <div class=\"lh-snippet__title\"></div>\n          <div class=\"lh-snippet__node\"></div>\n          <button class=\"lh-snippet__toggle-expand\">\n            <span class=\"lh-snippet__btn-label-collapse lh-snippet__show-if-expanded\"></span>\n            <span class=\"lh-snippet__btn-label-expand lh-snippet__show-if-collapsed\"></span>\n          </button>\n        </div>\n      </template>\n      <template id=\"tmpl-lh-snippet__content\">\n        <div class=\"lh-snippet__snippet\">\n          <div class=\"lh-snippet__snippet-inner\"></div>\n        </div>\n      </template>\n      <template id=\"tmpl-lh-snippet__line\">\n          <div class=\"lh-snippet__line\">\n            <div class=\"lh-snippet__line-number\"></div>\n            <div class=\"lh-snippet__line-icon\"></div>\n            <code></code>\n          </div>\n        </template>\n    </div>\n  </template>\n\n\n/*# sourceURL=audits/lighthouse/templates.html */";Root.Runtime.cachedResources["audits/lighthouse/report.css"]="/**\n * @license\n * Copyright 2017 Google Inc. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS-IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n  Naming convention:\n\n  If a variable is used for a specific component: --{component}-{property name}-{modifier}\n\n  Both {component} and {property name} should be kebab-case. If the target is the entire page,\n  use 'report' for the component. The property name should not be abbreviated. Use the\n  property name the variable is intended for - if it's used for multiple, a common descriptor\n  is fine (ex: 'size' for a variable applied to 'width' and 'height'). If a variable is shared\n  across multiple components, either create more variables or just drop the \"{component}-\"\n  part of the name. Append any modifiers at the end (ex: 'big', 'dark').\n\n  For colors: --color-{hue}-{intensity}\n\n  {intensity} is the Material Design tag - 700, A700, etc.\n*/\n.lh-vars {\n  /* Palette using Material Design Colors\n   * https://www.materialui.co/colors */\n  --color-amber-50: #FFF8E1;\n  --color-blue-200: #90CAF9;\n  --color-blue-900: #0D47A1;\n  --color-blue-A700: #2962FF;\n  --color-cyan-500: #00BCD4;\n  --color-gray-100: #F5F5F5;\n  --color-gray-200: #E0E0E0;\n  --color-gray-400: #BDBDBD;\n  --color-gray-50: #FAFAFA;\n  --color-gray-500: #9E9E9E;\n  --color-gray-600: #757575;\n  --color-gray-700: #616161;\n  --color-gray-800: #424242;\n  --color-gray-900: #212121;\n  --color-gray: #000000;\n  --color-green-700: #018642;\n  --color-green: #0CCE6B;\n  --color-orange-700: #D04900;\n  --color-orange: #FFA400;\n  --color-red-700: #EB0F00;\n  --color-red: #FF4E42;\n  --color-teal-600: #00897B;\n  --color-white: #FFFFFF;\n\n  /* Context-specific colors */\n  --color-average-secondary: var(--color-orange-700);\n  --color-average: var(--color-orange);\n  --color-fail-secondary: var(--color-red-700);\n  --color-fail: var(--color-red);\n  --color-informative: var(--color-blue-900);\n  --color-pass-secondary: var(--color-green-700);\n  --color-pass: var(--color-green);\n  --color-hover: var(--color-gray-50);\n\n  /* Component variables */\n  --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right));\n  --audit-explanation-line-height: 16px;\n  --audit-group-margin-bottom: 40px;\n  --audit-group-padding-vertical: 8px;\n  --audit-margin-horizontal: 5px;\n  --audit-padding-vertical: 8px;\n  --category-header-font-size: 20px;\n  --category-padding: 40px;\n  --chevron-line-stroke: var(--color-gray-600);\n  --chevron-size: 12px;\n  --default-padding: 12px;\n  --env-item-background-color: var(--color-gray-100);\n  --env-item-font-size: 28px;\n  --env-item-line-height: 36px;\n  --env-item-padding: 10px 0px;\n  --env-name-min-width: 220px;\n  --footer-padding-vertical: 16px;\n  --gauge-circle-size-big: 112px;\n  --gauge-circle-size: 80px;\n  --gauge-label-font-size-big: 28px;\n  --gauge-label-font-size: 20px;\n  --gauge-label-line-height-big: 36px;\n  --gauge-label-line-height: 26px;\n  --gauge-percentage-font-size-big: 38px;\n  --gauge-percentage-font-size: 28px;\n  --gauge-wrapper-width: 148px;\n  --header-line-height: 24px;\n  --highlighter-background-color: var(--report-text-color);\n  --icon-square-size: calc(var(--score-icon-size) * 0.88);\n  --image-preview-size: 48px;\n  --metric-toggle-lines-fill: #7F7F7F;\n  --metrics-toggle-background-color: var(--color-gray-200);\n  --plugin-badge-background-color: var(--color-white);\n  --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7);\n  --plugin-badge-size: calc(var(--gauge-circle-size) / 2.7);\n  --plugin-icon-size: 65%;\n  --pwa-icon-margin: 0 6px 0 -2px;\n  --pwa-icon-size: var(--topbar-logo-size);\n  --report-background-color: #fff;\n  --report-border-color-secondary: #ebebeb;\n  --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;\n  --report-font-family: Roboto, Helvetica, Arial, sans-serif;\n  --report-font-size: 16px;\n  --report-line-height: 24px;\n  --report-min-width: 400px;\n  --report-text-color-secondary: var(--color-gray-800);\n  --report-text-color: var(--color-gray-900);\n  --report-width: calc(60 * var(--report-font-size));\n  --score-container-padding: 8px;\n  --score-icon-background-size: 24px;\n  --score-icon-margin-left: 4px;\n  --score-icon-margin-right: 12px;\n  --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left);\n  --score-icon-size: 12px;\n  --scores-container-padding: 20px 0 20px 0;\n  --scorescale-height: 6px;\n  --scorescale-width: 18px;\n  --section-padding-vertical: 12px;\n  --snippet-background-color: var(--color-gray-50);\n  --snippet-color: var(--color-gray-800);\n  --sparkline-height: 5px;\n  --stackpack-padding-horizontal: 10px;\n  --sticky-header-background-color: var(--report-background-color);\n  --table-higlight-background-color: hsla(0, 0%, 75%, 0.1);\n  --tools-icon-color: var(--color-gray-600);\n  --tools-icon-size: var(--score-icon-background-size);\n  --topbar-background-color: var(--color-gray-100);\n  --topbar-height: 32px;\n  --topbar-logo-size: 24px;\n  --topbar-padding: 0 8px;\n  --toplevel-warning-padding: 22px;\n\n  /* SVGs */\n  --plugin-icon-url-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23FFFFFF\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>');\n  --plugin-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24px\" height=\"24px\" viewBox=\"0 0 24 24\" fill=\"%23757575\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z\"/></svg>');\n\n  --pass-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>check</title><path fill=\"%23178239\" d=\"M24 4C12.95 4 4 12.95 4 24c0 11.04 8.95 20 20 20 11.04 0 20-8.96 20-20 0-11.05-8.96-20-20-20zm-4 30L10 24l2.83-2.83L20 28.34l15.17-15.17L38 16 20 34z\"/></svg>');\n  --average-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>info</title><path fill=\"%23E67700\" d=\"M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z\"/></svg>');\n  --fail-icon-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\"><title>warn</title><path fill=\"%23C7221F\" d=\"M2 42h44L24 4 2 42zm24-6h-4v-4h4v4zm0-8h-4v-8h4v8z\"/></svg>');\n\n  --pwa-fast-reliable-gray-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"nonzero\"><circle fill=\"%23DAE0E3\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12.3 4l6.3 2.8V11c0 3.88-2.69 7.52-6.3 8.4C8.69 18.52 6 14.89 6 11V6.8L12.3 4zm-.56 12.88l3.3-5.79.04-.08c.05-.1.01-.29-.26-.29h-1.96l.56-3.92h-.56L9.6 12.52c0 .03.07-.12-.03.07-.11.2-.12.37.2.37h1.97l-.56 3.92h.56z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-installable-gray-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"nonzero\"><circle fill=\"%23DAE0E3\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-optimized-gray-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%23DAE0E3\" width=\"24\" height=\"24\" rx=\"12\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/><path d=\"M5 5h14v14H5z\"/></g></svg>');\n\n  --pwa-fast-reliable-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"nonzero\"><circle fill=\"%23424242\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12.3 4l6.3 2.8V11c0 3.88-2.69 7.52-6.3 8.4C8.69 18.52 6 14.89 6 11V6.8L12.3 4zm-.56 12.88l3.3-5.79.04-.08c.05-.1.01-.29-.26-.29h-1.96l.56-3.92h-.56L9.6 12.52c0 .03.07-.12-.03.07-.11.2-.12.37.2.37h1.97l-.56 3.92h.56z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-installable-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"nonzero\"><circle fill=\"%23424242\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-optimized-gray-url-dark: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%23424242\" width=\"24\" height=\"24\" rx=\"12\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/><path d=\"M5 5h14v14H5z\"/></g></svg>');\n\n  --pwa-fast-reliable-color-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-rule=\"nonzero\" fill=\"none\"><circle fill=\"%230CCE6B\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 4.3l6.3 2.8v4.2c0 3.88-2.69 7.52-6.3 8.4-3.61-.88-6.3-4.51-6.3-8.4V7.1L12 4.3zm-.56 12.88l3.3-5.79.04-.08c.05-.1.01-.29-.26-.29h-1.96l.56-3.92h-.56L9.3 12.82c0 .03.07-.12-.03.07-.11.2-.12.37.2.37h1.97l-.56 3.92h.56z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-installable-color-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-rule=\"nonzero\" fill=\"none\"><circle fill=\"%230CCE6B\" cx=\"12\" cy=\"12\" r=\"12\"/><path d=\"M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm3.5 7.7h-2.8v2.8h-1.4v-2.8H8.5v-1.4h2.8V8.5h1.4v2.8h2.8v1.4z\" fill=\"%23FFF\"/></g></svg>');\n  --pwa-optimized-color-url: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill=\"none\" fill-rule=\"evenodd\"><rect fill=\"%230CCE6B\" width=\"24\" height=\"24\" rx=\"12\"/><path d=\"M5 5h14v14H5z\"/><path fill=\"%23FFF\" d=\"M12 15.07l3.6 2.18-.95-4.1 3.18-2.76-4.2-.36L12 6.17l-1.64 3.86-4.2.36 3.2 2.76-.96 4.1z\"/></g></svg>');\n}\n\n@media not print {\n  .lh-vars.dark {\n    /* Pallete */\n    --color-gray-200: var(--color-gray-800);\n    --color-gray-400: var(--color-gray-600);\n    --color-gray-50: #757575;\n    --color-gray-600: var(--color-gray-500);\n    --color-green-700: var(--color-green);\n    --color-orange-700: var(--color-orange);\n    --color-red-700: var(--color-red);\n    --color-teal-600: var(--color-cyan-500);\n\n    /* Context-specific colors */\n    --color-hover: rgba(0, 0, 0, 0.2);\n    --color-informative: var(--color-blue-200);\n\n    /* Component variables */\n    --env-item-background-color: var(--color-gray);\n    --plugin-badge-background-color: var(--color-gray-800);\n    --report-background-color: var(--color-gray-900);\n    --report-border-color-secondary: var(--color-gray-200);\n    --report-text-color-secondary: var(--color-gray-400);\n    --report-text-color: var(--color-gray-100);\n    --topbar-background-color: var(--color-gray);\n\n    /* SVGs */\n    --plugin-icon-url: var(--plugin-icon-url-dark);\n    --pwa-fast-reliable-gray-url: var(--pwa-fast-reliable-gray-url-dark);\n    --pwa-installable-gray-url: var(--pwa-installable-gray-url-dark);\n    --pwa-optimized-gray-url: var(--pwa-optimized-gray-url-dark);\n  }\n}\n\n@media only screen and (max-width: 480px) {\n  .lh-vars {\n    --audit-group-margin-bottom: 20px;\n    --category-padding: 24px;\n    --env-name-min-width: 120px;\n    --gauge-circle-size-big: 96px;\n    --gauge-circle-size: 72px;\n    --gauge-label-font-size-big: 22px;\n    --gauge-label-font-size: 14px;\n    --gauge-label-line-height-big: 26px;\n    --gauge-label-line-height: 20px;\n    --gauge-percentage-font-size-big: 34px;\n    --gauge-percentage-font-size: 26px;\n    --gauge-wrapper-width: 112px;\n    --header-padding: 16px 0 16px 0;\n    --image-preview-size: 24px;\n    --plugin-icon-size: 75%;\n    --pwa-icon-margin: 0 7px 0 -3px;\n    --report-font-size: 14px;\n    --report-line-height: 20px;\n    --score-icon-margin-left: 2px;\n    --score-icon-size: 10px;\n    --topbar-height: 28px;\n    --topbar-logo-size: 20px;\n  }\n\n  /* Not enough space to adequately show the relative savings bars. */\n  .lh-sparkline {\n    display: none;\n  }\n}\n\n.lh-vars.lh-devtools {\n  --audit-explanation-line-height: 14px;\n  --audit-group-margin-bottom: 20px;\n  --audit-group-padding-vertical: 12px;\n  --audit-padding-vertical: 4px;\n  --category-header-font-size: 16px;\n  --category-padding: 12px;\n  --default-padding: 12px;\n  --env-name-min-width: 120px;\n  --footer-padding-vertical: 8px;\n  --gauge-circle-size-big: 72px;\n  --gauge-circle-size: 64px;\n  --gauge-label-font-size-big: 22px;\n  --gauge-label-font-size: 14px;\n  --gauge-label-line-height-big: 26px;\n  --gauge-label-line-height: 20px;\n  --gauge-percentage-font-size-big: 34px;\n  --gauge-percentage-font-size: 26px;\n  --gauge-wrapper-width: 97px;\n  --header-line-height: 20px;\n  --header-padding: 16px 0 16px 0;\n  --plugin-icon-size: 75%;\n  --pwa-icon-margin: 0 7px 0 -3px;\n  --report-font-family-monospace: 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace;\n  --report-font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif;\n  --report-font-size: 12px;\n  --report-line-height: 20px;\n  --score-icon-margin-left: 2px;\n  --score-icon-size: 10px;\n  --section-padding-vertical: 8px;\n}\n\n.lh-devtools.lh-root {\n  height: 100%;\n}\n.lh-devtools.lh-root img {\n  /* Override devtools default 'min-width: 0' so svg without size in a flexbox isn't collapsed. */\n  min-width: auto;\n}\n.lh-devtools .lh-container {\n  overflow-y: scroll;\n  height: calc(100% - var(--topbar-height));\n}\n@media print {\n  .lh-devtools .lh-container {\n    overflow: unset;\n  }\n}\n.lh-devtools .lh-sticky-header {\n  /* This is normally the height of the topbar, but we want it to stick to the top of our scroll container .lh-container` */\n  top: 0;\n}\n\n@keyframes fadeIn {\n  0% { opacity: 0;}\n  100% { opacity: 0.6;}\n}\n\n.lh-root *, .lh-root *::before, .lh-root *::after {\n  box-sizing: border-box;\n  -webkit-font-smoothing: antialiased;\n}\n\n.lh-root {\n  font-family: var(--report-font-family);\n  font-size: var(--report-font-size);\n  margin: 0;\n  line-height: var(--report-line-height);\n  background: var(--report-background-color);\n  scroll-behavior: smooth;\n  color: var(--report-text-color);\n}\n\n.lh-root :focus {\n    outline: -webkit-focus-ring-color auto 3px;\n}\n.lh-root summary:focus {\n    outline: none;\n    box-shadow: 0 0 0 1px hsl(217, 89%, 61%);\n}\n\n.lh-root [hidden] {\n  display: none !important;\n}\n\n.lh-root details > summary {\n  cursor: pointer;\n}\n\n.lh-container {\n  /*\n  Text wrapping in the report is so much FUN!\n  We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely\n  long non-breakable text (usually URLs) found in:\n    1. The footer\n    2. .lh-node (outerHTML)\n    3. .lh-code\n\n  With that sorted, the next challenge is appropriate column sizing and text wrapping inside our\n  .lh-details tables. Even more fun.\n    * We don't want table headers (\"Potential Savings (ms)\") to wrap or their column values, but\n    we'd be happy for the URL column to wrap if the URLs are particularly long.\n    * We want the narrow columns to remain narrow, providing the most column width for URL\n    * We don't want the table to extend past 100% width.\n    * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters,\n      but they do not get any overflow:ellipsis treatment.\n  */\n  word-break: break-word;\n}\n\n.lh-audit-group a,\n.lh-category-header__description a,\n.lh-audit__description a,\n.lh-footer a {\n  color: var(--color-informative);\n}\n\n.lh-audit__description, .lh-audit__stackpack {\n  --inner-audit-padding-right: var(--stackpack-padding-horizontal);\n  padding-left: var(--audit-description-padding-left);\n  padding-right: var(--inner-audit-padding-right);\n  padding-top: 8px;\n  padding-bottom: 8px;\n}\n\n.lh-details {\n  font-size: var(--report-font-size);\n  margin-top: var(--default-padding);\n  margin-bottom: var(--default-padding);\n  margin-left: var(--audit-description-padding-left);\n  /* whatever the .lh-details side margins are */\n  width: 100%;\n}\n\n.lh-details.flex .lh-code {\n  max-width: 70%;\n}\n\n.lh-audit__stackpack {\n  display: flex;\n  align-items: center;\n}\n\n.lh-audit__stackpack__img {\n  max-width: 50px;\n  margin-right: var(--default-padding)\n}\n\n/* Report header */\n\n.report-icon {\n  opacity: 0.7;\n}\n.report-icon:hover {\n  opacity: 1;\n}\n.report-icon[disabled] {\n  opacity: 0.3;\n  pointer-events: none;\n}\n\n.report-icon--print {\n  background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path d=\"M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z\"/><path fill=\"none\" d=\"M0 0h24v24H0z\"/></svg>');\n}\n.report-icon--copy {\n  background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z\"/></svg>');\n}\n.report-icon--open {\n  background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z\"/></svg>');\n}\n.report-icon--download {\n  background-image: url('data:image/svg+xml;utf8,<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\"/><path d=\"M0 0h24v24H0z\" fill=\"none\"/></svg>');\n}\n.report-icon--dark {\n  background-image:url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 0 100 125\"><path d=\"M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z\"/></svg>');\n}\n\n/* Node */\n.lh-node__snippet {\n  font-family: var(--report-font-family-monospace);\n  color: var(--color-teal-600);\n  font-size: 12px;\n  line-height: 1.5em;\n}\n\n/* Score */\n\n.lh-audit__score-icon {\n  width: var(--score-icon-size);\n  height: var(--score-icon-size);\n  margin: var(--score-icon-margin);\n}\n\n.lh-audit--pass .lh-audit__display-text {\n  color: var(--color-pass-secondary);\n}\n.lh-audit--pass .lh-audit__score-icon {\n  border-radius: 100%;\n  background: var(--color-pass);\n}\n\n.lh-audit--average .lh-audit__display-text {\n  color: var(--color-average-secondary);\n}\n.lh-audit--average .lh-audit__score-icon {\n  background: var(--color-average);\n  width: var(--icon-square-size);\n  height: var(--icon-square-size);\n}\n\n.lh-audit--fail .lh-audit__display-text {\n  color: var(--color-fail-secondary);\n}\n.lh-audit--fail .lh-audit__score-icon,\n.lh-audit--error .lh-audit__score-icon {\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\n}\n\n.lh-audit--manual .lh-audit__display-text,\n.lh-audit--notapplicable .lh-audit__display-text {\n  color: var(--color-gray-600);\n}\n.lh-audit--manual .lh-audit__score-icon,\n.lh-audit--notapplicable .lh-audit__score-icon {\n  border-radius: 100%;\n  background: var(--color-gray-400);\n}\n\n.lh-audit--informative .lh-audit__display-text {\n  color: var(--color-gray-600);\n}\n\n.lh-audit--informative .lh-audit__score-icon {\n  border: none;\n  border-radius: 100%;\n  background: var(--color-gray-400);\n}\n\n.lh-audit__description,\n.lh-audit__stackpack {\n  color: var(--report-text-color-secondary);\n}\n.lh-category-header__description  {\n  font-size: var(--report-font-size);\n  text-align: center;\n  margin: 0px auto;\n  max-width: 400px;\n}\n\n\n.lh-audit__display-text,\n.lh-load-opportunity__sparkline,\n.lh-chevron-container {\n  margin: 0 var(--audit-margin-horizontal);\n}\n.lh-chevron-container {\n  margin-right: 0;\n}\n\n.lh-audit__title-and-text {\n  flex: 1;\n}\n\n/* Prepend display text with em dash separator. But not in Opportunities. */\n.lh-audit__display-text:not(:empty):before {\n  content: '—';\n  margin-right: var(--audit-margin-horizontal);\n}\n.lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before {\n  display: none;\n}\n\n/* Expandable Details (Audit Groups, Audits) */\n.lh-audit__header {\n  display: flex;\n  align-items: center;\n  font-weight: 500;\n  padding: var(--audit-padding-vertical) 0;\n}\n\n.lh-audit--load-opportunity .lh-audit__header {\n  display: block;\n}\n\n.lh-audit__header:hover {\n  background-color: var(--color-hover);\n}\n\n/* Hide the expandable arrow icon, three ways: via the CSS Counter Styles spec, for webkit/blink browsers, hiding the polyfilled icon */\n/* https://github.com/javan/details-element-polyfill/blob/master/src/details-element-polyfill/polyfill.sass */\n.lh-audit-group > summary,\n.lh-expandable-details > summary {\n  list-style-type: none;\n}\n.lh-audit-group > summary::-webkit-details-marker,\n.lh-expandable-details > summary::-webkit-details-marker {\n  display: none;\n}\n.lh-audit-group > summary:before,\n.lh-expandable-details > summary:before {\n  display: none;\n}\n\n\n/* Perf Metric */\n\n.lh-columns {\n  display: flex;\n  width: 100%;\n}\n@media screen and (max-width: 640px) {\n  .lh-columns {\n    flex-wrap: wrap;\n\n  }\n}\n\n.lh-column {\n  flex: 1;\n}\n.lh-column:first-of-type {\n  margin-right: 24px;\n}\n\n@media screen and (max-width: 800px) {\n  .lh-column:first-of-type {\n    margin-right: 8px;\n  }\n}\n@media screen and (max-width: 640px) {\n  .lh-column {\n    flex-basis: 100%;\n  }\n  .lh-column:first-of-type {\n    margin-right: 0px;\n  }\n  .lh-column:first-of-type .lh-metric:last-of-type {\n    border-bottom: 0;\n  }\n}\n\n\n.lh-metric {\n  border-bottom: 1px solid var(--report-border-color-secondary);\n}\n.lh-metric:first-of-type {\n  border-top: 1px solid var(--report-border-color-secondary);\n}\n\n.lh-metric__innerwrap {\n  display: grid;\n  grid-template-columns: var(--audit-description-padding-left) 10fr 3fr;\n  align-items: center;\n  padding: 10px 0;\n}\n\n.lh-metric__details {\n  order: -1;\n}\n\n.lh-metric__title {\n  flex: 1;\n  font-weight: 500;\n}\n\n.lh-metrics__disclaimer {\n  color: var(--color-gray-600);\n  margin: var(--section-padding-vertical) 0;\n}\n.lh-metrics__disclaimer a {\n  color: var(--color-gray-700);\n}\n\n.lh-metric__description {\n  display: none;\n  grid-column-start: 2;\n  grid-column-end: 3;\n  color: var(--report-text-color-secondary);\n}\n\n.lh-metric__value {\n  white-space: nowrap; /* No wrapping between metric value and the icon */\n  font-weight: 500;\n  justify-self: end;\n}\n\n/* No-JS toggle switch */\n/* Keep this selector sync'd w/ `magicSelector` in report-ui-features-test.js */\n .lh-metrics-toggle__input:checked ~ .lh-columns .lh-metric__description {\n  display: block;\n}\n\n.lh-metrics-toggle__input {\n  cursor: pointer;\n  opacity: 0;\n  position: absolute;\n  right: 0;\n  width: 74px;\n  height: 28px;\n  top: -3px;\n}\n.lh-metrics-toggle__label {\n  display: flex;\n  background-color: #eee;\n  border-radius: 20px;\n  overflow: hidden;\n  position: absolute;\n  right: 0;\n  top: -3px;\n  pointer-events: none;\n}\n.lh-metrics-toggle__input:focus + label {\n  outline: -webkit-focus-ring-color auto 3px;\n}\n.lh-metrics-toggle__icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 2px 5px;\n  width: 50%;\n  height: 28px;\n}\n.lh-metrics-toggle__input:not(:checked) + label .lh-metrics-toggle__icon--less,\n.lh-metrics-toggle__input:checked + label .lh-metrics-toggle__icon--more {\n  background-color: var(--color-blue-A700);\n  --metric-toggle-lines-fill: var(--color-white);\n}\n.lh-metrics-toggle__lines {\n  fill: var(--metric-toggle-lines-fill);\n}\n\n.lh-metrics-toggle__label  {\n  background-color: var(--metrics-toggle-background-color);\n}\n\n.lh-metrics-toggle__label .lh-metrics-toggle__icon--less {\n  padding-left: 8px;\n}\n.lh-metrics-toggle__label .lh-metrics-toggle__icon--more {\n  padding-right: 8px;\n}\n\n/* Pushes the metric description toggle button to the right. */\n.lh-audit-group--metrics .lh-audit-group__header {\n  display: flex;\n}\n.lh-audit-group--metrics .lh-audit-group__header span.lh-audit-group__title {\n  flex: 1;\n}\n\n.lh-metric .lh-metric__innerwrap::before {\n  content: '';\n  width: var(--score-icon-size);\n  height: var(--score-icon-size);\n  display: inline-block;\n  margin: var(--score-icon-margin);\n}\n\n.lh-metric--pass .lh-metric__value {\n  color: var(--color-pass-secondary);\n}\n.lh-metric--pass .lh-metric__innerwrap::before {\n  border-radius: 100%;\n  background: var(--color-pass);\n}\n\n.lh-metric--average .lh-metric__value {\n  color: var(--color-average-secondary);\n}\n.lh-metric--average .lh-metric__innerwrap::before {\n  background: var(--color-average);\n  width: var(--icon-square-size);\n  height: var(--icon-square-size);\n}\n\n.lh-metric--fail .lh-metric__value {\n  color: var(--color-fail-secondary);\n}\n.lh-metric--fail .lh-metric__innerwrap::before,\n.lh-metric--error .lh-metric__innerwrap::before {\n  border-left: calc(var(--score-icon-size) / 2) solid transparent;\n  border-right: calc(var(--score-icon-size) / 2) solid transparent;\n  border-bottom: var(--score-icon-size) solid var(--color-fail);\n}\n\n.lh-metric--error .lh-metric__value,\n.lh-metric--error .lh-metric__description {\n  color: var(--color-fail-secondary);\n}\n\n/* Perf load opportunity */\n\n.lh-load-opportunity__cols {\n  display: flex;\n  align-items: flex-start;\n}\n\n.lh-load-opportunity__header .lh-load-opportunity__col {\n  color: var(--color-gray-600);\n  display: unset;\n  line-height: calc(2.3 * var(--report-font-size));\n}\n\n.lh-load-opportunity__col {\n  display: flex;\n}\n\n.lh-load-opportunity__col--one {\n  flex: 5;\n  align-items: center;\n  margin-right: 2px;\n}\n.lh-load-opportunity__col--two {\n  flex: 4;\n  text-align: right;\n}\n\n.lh-audit--load-opportunity .lh-audit__display-text {\n  text-align: right;\n  flex: 0 0 calc(3 * var(--report-font-size));\n}\n\n\n/* Sparkline */\n\n.lh-load-opportunity__sparkline {\n  flex: 1;\n  margin-top: calc((var(--report-line-height) - var(--sparkline-height)) / 2);\n}\n\n.lh-sparkline {\n  height: var(--sparkline-height);\n  width: 100%;\n}\n\n.lh-sparkline__bar {\n  height: 100%;\n  float: right;\n}\n\n.lh-audit--pass .lh-sparkline__bar {\n  background: var(--color-pass);\n}\n\n.lh-audit--average .lh-sparkline__bar {\n  background: var(--color-average);\n}\n\n.lh-audit--fail .lh-sparkline__bar {\n  background: var(--color-fail);\n}\n\n\n\n/* Filmstrip */\n\n.lh-filmstrip-container {\n  /* smaller gap between metrics and filmstrip */\n  margin: -8px auto 0 auto;\n}\n\n.lh-filmstrip {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  padding-bottom: var(--default-padding);\n}\n\n.lh-filmstrip__frame {\n  text-align: right;\n  position: relative;\n}\n\n.lh-filmstrip__thumbnail {\n  border: 1px solid var(--report-border-color-secondary);\n  max-height: 100px;\n  max-width: 60px;\n}\n\n@media screen and (max-width: 750px) {\n  .lh-filmstrip {\n    flex-wrap: wrap;\n  }\n  .lh-filmstrip__frame {\n    width: 20%;\n    margin-bottom: 5px;\n  }\n  .lh-filmstrip__thumbnail {\n    display: block;\n    margin: auto;\n  }\n}\n\n/* Audit */\n\n.lh-audit {\n  border-bottom: 1px solid var(--report-border-color-secondary);\n}\n\n/* Apply border-top to just the first audit. */\n.lh-audit {\n  border-top: 1px solid var(--report-border-color-secondary);\n}\n.lh-audit ~ .lh-audit {\n  border-top: none;\n}\n\n\n.lh-audit--error .lh-audit__display-text {\n  color: var(--color-fail);\n}\n\n/* Audit Group */\n\n.lh-audit-group {\n  margin-bottom: var(--audit-group-margin-bottom);\n  position: relative;\n}\n\n.lh-audit-group__header::before {\n  /* By default, groups don't get an icon */\n  content: none;\n  width: var(--pwa-icon-size);\n  height: var(--pwa-icon-size);\n  margin: var(--pwa-icon-margin);\n  display: inline-block;\n  vertical-align: middle;\n}\n\n/* Style the \"over budget\" columns red. */\n.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4),\n.lh-audit-group--budgets .lh-table tbody tr td:nth-child(5){\n  color: var(--color-red-700);\n}\n\n/* Align the \"over budget request count\" text to be close to the \"over budget bytes\" column. */\n.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){\n  text-align: right;\n}\n\n.lh-audit-group--budgets .lh-table {\n  width: 100%;\n}\n\n.lh-audit-group--pwa-fast-reliable .lh-audit-group__header::before {\n  content: '';\n  background-image: var(--pwa-fast-reliable-gray-url);\n}\n.lh-audit-group--pwa-installable .lh-audit-group__header::before {\n  content: '';\n  background-image: var(--pwa-installable-gray-url);\n}\n.lh-audit-group--pwa-optimized .lh-audit-group__header::before {\n  content: '';\n  background-image: var(--pwa-optimized-gray-url);\n}\n.lh-audit-group--pwa-fast-reliable.lh-badged .lh-audit-group__header::before {\n  background-image: var(--pwa-fast-reliable-color-url);\n}\n.lh-audit-group--pwa-installable.lh-badged .lh-audit-group__header::before {\n  background-image: var(--pwa-installable-color-url);\n}\n.lh-audit-group--pwa-optimized.lh-badged .lh-audit-group__header::before {\n  background-image: var(--pwa-optimized-color-url);\n}\n\n.lh-audit-group--metrics .lh-audit-group__summary {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.lh-audit-group__summary {\n  display: flex;\n  justify-content: space-between;\n  margin-top: calc(var(--category-padding) * 1.5);\n  margin-bottom: var(--category-padding);\n}\n\n.lh-audit-group__itemcount {\n  color: var(--color-gray-600);\n  font-weight: bold;\n}\n.lh-audit-group__header .lh-chevron {\n  margin-top: calc((var(--report-line-height) - 5px) / 2);\n}\n\n.lh-audit-group__header {\n  font-size: var(--report-font-size);\n  margin: 0 0 var(--audit-group-padding-vertical);\n  /* When the header takes 100% width, the chevron becomes small. */\n  max-width: calc(100% - var(--chevron-size));\n}\n/* max-width makes the metric toggle not flush. metrics doesn't have a chevron so unset. */\n.lh-audit-group--metrics .lh-audit-group__header {\n  max-width: unset;\n}\n\n.lh-audit-group__header span.lh-audit-group__title {\n  font-weight: bold;\n}\n\n.lh-audit-group__header span.lh-audit-group__itemcount {\n  font-weight: bold;\n  color: var(--color-gray-600);\n}\n\n.lh-audit-group__header span.lh-audit-group__description {\n  font-weight: 500;\n  color: var(--color-gray-600);\n}\n.lh-audit-group__header span.lh-audit-group__description::before {\n  content: '—';\n  margin: 0px var(--audit-margin-horizontal);\n}\n\n.lh-clump > .lh-audit-group__header,\n.lh-audit-group--diagnostics .lh-audit-group__header,\n.lh-audit-group--load-opportunities .lh-audit-group__header,\n.lh-audit-group--metrics .lh-audit-group__header,\n.lh-audit-group--pwa-fast-reliable .lh-audit-group__header,\n.lh-audit-group--pwa-installable .lh-audit-group__header,\n.lh-audit-group--pwa-optimized .lh-audit-group__header {\n  margin-top: var(--audit-group-padding-vertical);\n}\n\n.lh-audit-explanation {\n  margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal);\n  line-height: var(--audit-explanation-line-height);\n  display: inline-block;\n}\n\n.lh-audit--fail .lh-audit-explanation {\n  color: var(--color-fail);\n}\n\n/* Report */\n.lh-list > div:not(:last-child) {\n  padding-bottom: 20px;\n}\n\n.lh-header-container {\n  display: block;\n  margin: 0 auto;\n  position: relative;\n  word-wrap: break-word;\n}\n\n.lh-report {\n  min-width: var(--report-min-width);\n}\n\n.lh-exception {\n  font-size: large;\n}\n\n.lh-code {\n  white-space: normal;\n  margin-top: 0;\n  font-size: 85%;\n}\n\n.lh-warnings {\n  --item-margin: calc(var(--report-line-height) / 6);\n  color: var(--color-average);\n  margin: var(--audit-padding-vertical) 0;\n  padding: calc(var(--audit-padding-vertical) / 2) var(--audit-padding-vertical);\n}\n.lh-warnings span {\n  font-weight: bold;\n}\n\n.lh-warnings--toplevel {\n  --item-margin: calc(var(--header-line-height) / 4);\n  color: var(--report-text-color-secondary);\n  margin-left: auto;\n  margin-right: auto;\n  max-width: calc(var(--report-width) - var(--category-padding) * 2);\n  background-color: var(--color-amber-50);\n  padding: var(--toplevel-warning-padding);\n}\n\n.lh-warnings ul {\n  padding-left: calc(var(--category-padding) * 2);\n  margin: 0;\n}\n.lh-warnings li {\n  margin: var(--item-margin) 0;\n}\n.lh-warnings li:last-of-type {\n  margin-bottom: 0;\n}\n\n.lh-scores-header {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: center;\n}\n.lh-scores-header__solo {\n  padding: 0;\n  border: 0;\n}\n\n/* Gauge */\n\n.lh-gauge__wrapper--pass {\n  color: var(--color-pass);\n  fill: var(--color-pass);\n  stroke: var(--color-pass);\n}\n\n.lh-gauge__wrapper--average {\n  color: var(--color-average);\n  fill: var(--color-average);\n  stroke: var(--color-average);\n}\n\n.lh-gauge__wrapper--fail {\n  color: var(--color-fail);\n  fill: var(--color-fail);\n  stroke: var(--color-fail);\n}\n\n.lh-gauge {\n  stroke-linecap: round;\n  width: var(--gauge-circle-size);\n  height: var(--gauge-circle-size);\n}\n\n.lh-category .lh-gauge {\n  --gauge-circle-size: var(--gauge-circle-size-big);\n}\n\n.lh-gauge-base {\n    opacity: 0.1;\n    stroke: var(--circle-background);\n    stroke-width: var(--circle-border-width);\n}\n\n.lh-gauge-arc {\n    fill: none;\n    stroke: var(--circle-color);\n    stroke-width: var(--circle-border-width);\n    animation: load-gauge var(--transition-length) ease forwards;\n    animation-delay: 250ms;\n}\n\n.lh-gauge__svg-wrapper {\n  position: relative;\n  height: var(--gauge-circle-size);\n}\n.lh-category .lh-gauge__svg-wrapper {\n  --gauge-circle-size: var(--gauge-circle-size-big);\n}\n\n/* The plugin badge overlay */\n.lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\n  width: var(--plugin-badge-size);\n  height: var(--plugin-badge-size);\n  background-color: var(--plugin-badge-background-color);\n  background-image: var(--plugin-icon-url);\n  background-repeat: no-repeat;\n  background-size: var(--plugin-icon-size);\n  background-position: 58% 50%;\n  content: \"\";\n  position: absolute;\n  right: -6px;\n  bottom: 0px;\n  display: block;\n  z-index: 100;\n  box-shadow: 0 0 4px rgba(0,0,0,.2);\n  border-radius: 25%;\n}\n.lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before {\n  width: var(--plugin-badge-size-big);\n  height: var(--plugin-badge-size-big);\n}\n\n@keyframes load-gauge {\n  from { stroke-dasharray: 0 352; }\n}\n\n.lh-gauge__percentage {\n  width: 100%;\n  height: var(--gauge-circle-size);\n  position: absolute;\n  font-family: var(--report-font-family-monospace);\n  font-size: calc(var(--gauge-circle-size) * 0.34 + 1.3px);\n  line-height: 0;\n  text-align: center;\n  top: calc(var(--score-container-padding) + var(--gauge-circle-size) / 2);\n}\n\n.lh-category .lh-gauge__percentage {\n  --gauge-circle-size: var(--gauge-circle-size-big);\n  --gauge-percentage-font-size: var(--gauge-percentage-font-size-big);\n}\n\n.lh-gauge__wrapper {\n  position: relative;\n  display: flex;\n  align-items: center;\n  flex-direction: column;\n  text-decoration: none;\n  padding: var(--score-container-padding);\n\n  --circle-border-width: 8;\n  --transition-length: 1s;\n\n  /* Contain the layout style paint & layers during animation*/\n  contain: content;\n  will-change: opacity; /* Only using for layer promotion */\n}\n\n.lh-gauge__label {\n  font-size: var(--gauge-label-font-size);\n  line-height: var(--gauge-label-line-height);\n  margin-top: 10px;\n  text-align: center;\n  color: var(--report-text-color);\n}\n\n/* TODO(#8185) use more BEM (.lh-gauge__label--big) instead of relying on descendant selector */\n.lh-category .lh-gauge__label {\n  --gauge-label-font-size: var(--gauge-label-font-size-big);\n  --gauge-label-line-height: var(--gauge-label-line-height-big);\n  margin-top: 14px;\n}\n\n\n.lh-scores-header .lh-gauge__wrapper,\n.lh-scores-header .lh-gauge--pwa__wrapper,\n.lh-sticky-header .lh-gauge__wrapper,\n.lh-sticky-header .lh-gauge--pwa__wrapper {\n  width: var(--gauge-wrapper-width);\n}\n\n.lh-scorescale {\n  display: inline-flex;\n  margin: 12px auto 0 auto;\n  border: 1px solid var(--color-gray-200);\n  border-radius: 20px;\n  padding: 8px 8px;\n}\n\n.lh-scorescale-range {\n  display: flex;\n  align-items: center;\n  margin: 0 12px;\n  font-family: var(--report-font-family-monospace);\n  white-space: nowrap;\n}\n\n.lh-scorescale-range::before {\n  content: '';\n  width: var(--scorescale-width);\n  height: var(--scorescale-height);\n  border-radius: 10px;\n  display: block;\n  margin-right: 10px;\n}\n\n.lh-scorescale-range--pass::before {\n  background-color: var(--color-pass);\n}\n\n.lh-scorescale-range--average::before {\n  background-color: var(--color-average);\n}\n\n.lh-scorescale-range--fail::before {\n  background-color: var(--color-fail);\n}\n\n/* Hide category score gauages if it's a single category report */\n.lh-header--solo-category .lh-scores-wrapper {\n  display: none;\n}\n\n\n.lh-categories {\n  width: 100%;\n  overflow: hidden;\n}\n\n.lh-category {\n  padding: var(--category-padding);\n  max-width: var(--report-width);\n  margin: 0 auto;\n}\n\n.lh-category-wrapper {\n  border-bottom: 1px solid var(--color-gray-200);\n}\n\n.lh-category-wrapper:first-of-type {\n  border-top: 1px solid var(--color-gray-200);\n}\n\n/* section hash link jump should preserve fixed header\n   https://css-tricks.com/hash-tag-links-padding/\n*/\n.lh-category > .lh-permalink {\n  --sticky-header-height: calc(var(--gauge-circle-size) + var(--score-container-padding) * 2);\n  --topbar-plus-header: calc(var(--topbar-height) + var(--sticky-header-height));\n  margin-top: calc(var(--topbar-plus-header) * -1);\n  padding-bottom: var(--topbar-plus-header);\n  display: block;\n  visibility: hidden;\n}\n\n.lh-category-header {\n  font-size: var(--category-header-font-size);\n  min-height: var(--gauge-circle-size);\n  margin-bottom: var(--section-padding-vertical);\n}\n\n.lh-category-header .lh-score__gauge {\n  max-width: 400px;\n  width: auto;\n  margin: 0px auto;\n}\n\n.lh-category-header .lh-audit__title {\n  font-size: var(--category-header-font-size);\n  line-height: var(--header-line-height);\n}\n\n#lh-log {\n  position: fixed;\n  background-color: #323232;\n  color: #fff;\n  min-height: 48px;\n  min-width: 288px;\n  padding: 16px 24px;\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);\n  border-radius: 2px;\n  margin: 12px;\n  font-size: 14px;\n  cursor: default;\n  transition: transform 0.3s, opacity 0.3s;\n  transform: translateY(100px);\n  opacity: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 3;\n}\n\n#lh-log.show {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n/* 964 fits the min-width of the filmstrip */\n@media screen and (max-width: 964px) {\n  .lh-report {\n    margin-left: 0;\n    width: 100%;\n  }\n}\n\n@media print {\n  body {\n    -webkit-print-color-adjust: exact; /* print background colors */\n  }\n  .lh-container {\n    display: block;\n  }\n  .lh-report {\n    margin-left: 0;\n    padding-top: 0;\n  }\n  .lh-categories {\n    margin-top: 0;\n  }\n}\n\n.lh-table {\n  border-collapse: collapse;\n  /* Can't assign padding to table, so shorten the width instead. */\n  width: calc(100% - var(--audit-description-padding-left));\n}\n\n.lh-table thead th {\n  font-weight: normal;\n  color: var(--color-gray-600);\n  /* See text-wrapping comment on .lh-container. */\n  word-break: normal;\n}\n\n.lh-table tbody tr:nth-child(odd) {\n  background-color: var(--table-higlight-background-color);\n}\n\n.lh-table th,\n.lh-table td {\n  padding: 8px 6px;\n}\n.lh-table th:first-child {\n  padding-left: 0;\n}\n.lh-table th:last-child {\n  padding-right: 0;\n}\n\n/* Looks unnecessary, but mostly for keeping the <th>s left-aligned */\n.lh-table-column--text,\n.lh-table-column--url,\n/* .lh-table-column--thumbnail, */\n/* .lh-table-column--empty,*/\n.lh-table-column--code,\n.lh-table-column--node {\n  text-align: left;\n}\n\n.lh-table-column--bytes,\n.lh-table-column--timespanMs,\n.lh-table-column--ms,\n.lh-table-column--numeric {\n  text-align: right;\n  word-break: normal;\n}\n\n\n\n.lh-table .lh-table-column--thumbnail {\n  width: var(--image-preview-size);\n  padding: 0;\n}\n\n.lh-table-column--url {\n  min-width: 250px;\n}\n\n/* Keep columns narrow if they follow the URL column */\n/* 12% was determined to be a decent narrow width, but wide enough for column headings */\n.lh-table-column--url + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--ms,\n.lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes,\n.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs {\n  width: 12%;\n}\n\n\n.lh-text__url-host {\n  display: inline;\n}\n\n.lh-text__url-host {\n  margin-left: calc(var(--report-font-size) / 2);\n  opacity: 0.6;\n  font-size: 90%\n}\n\n.lh-thumbnail {\n  object-fit: cover;\n  width: var(--image-preview-size);\n  height: var(--image-preview-size);\n  display: block;\n}\n\n.lh-unknown pre {\n  overflow: scroll;\n  border: solid 1px var(--color-gray-200);\n}\n\n.lh-text__url > a {\n  color: inherit;\n  text-decoration: none;\n}\n\n.lh-text__url > a:hover {\n  text-decoration: underline dotted #999;\n}\n\n/* Chevron\n   https://codepen.io/paulirish/pen/LmzEmK\n */\n.lh-chevron {\n  --chevron-angle: 42deg;\n  /* Edge doesn't support transform: rotate(calc(...)), so we define it here */\n  --chevron-angle-right: -42deg;\n  width: var(--chevron-size);\n  height: var(--chevron-size);\n  margin-top: calc((var(--report-line-height) - 12px) / 2);\n}\n\n.lh-chevron__lines {\n  transition: transform 0.4s;\n  transform: translateY(var(--report-line-height));\n}\n.lh-chevron__line {\n stroke: var(--chevron-line-stroke);\n stroke-width: var(--chevron-size);\n stroke-linecap: square;\n transform-origin: 50%;\n transform: rotate(var(--chevron-angle));\n transition: transform 300ms, stroke 300ms;\n}\n\n.lh-audit-group > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right,\n.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-left,\n.lh-audit > .lh-expandable-details .lh-chevron__line-right,\n.lh-audit > .lh-expandable-details[open] .lh-chevron__line-left {\n transform: rotate(var(--chevron-angle-right));\n}\n\n.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right,\n.lh-audit > .lh-expandable-details[open] .lh-chevron__line-right {\n  transform: rotate(var(--chevron-angle));\n}\n\n.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__lines,\n.lh-audit > .lh-expandable-details[open] .lh-chevron__lines {\n transform: translateY(calc(var(--chevron-size) * -1));\n}\n\n\n\n/* Tooltip */\n.tooltip-boundary {\n  position: relative;\n}\n\n.tooltip {\n  position: absolute;\n  display: none; /* Don't retain these layers when not needed */\n  opacity: 0;\n  background: #ffffff;\n  min-width: 246px;\n  max-width: 275px;\n  padding: 15px;\n  border-radius: 5px;\n  text-align: initial;\n}\n/* shrink tooltips to not be cutoff on left edge of narrow viewports\n   45vw is chosen to be ~= width of the left column of metrics\n*/\n@media screen and (max-width: 535px) {\n  .tooltip {\n    min-width: 45vw;\n    padding: 3vw;\n  }\n}\n\n.tooltip-boundary:hover {\n  background-color: var(--color-hover);\n}\n\n.tooltip-boundary:hover .tooltip {\n  display: block;\n  animation: fadeInTooltip 250ms;\n  animation-fill-mode: forwards;\n  animation-delay: 850ms;\n  bottom: 100%;\n  z-index: 1;\n  will-change: opacity;\n  right: 0;\n  pointer-events: none;\n}\n\n.tooltip::before {\n  content: \"\";\n  border: solid transparent;\n  border-bottom-color: #fff;\n  border-width: 10px;\n  position: absolute;\n  bottom: -20px;\n  right: 6px;\n  transform: rotate(180deg);\n  pointer-events: none;\n}\n\n@keyframes fadeInTooltip {\n  0% { opacity: 0; }\n  75% { opacity: 1; }\n  100% { opacity: 1;  filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; }\n}\n\n/*# sourceURL=audits/lighthouse/report.css */";Root.Runtime.cachedResources["browser_debugger/domBreakpointsSidebarPane.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.breakpoint-list {\n    padding-bottom: 3px;\n}\n\n.breakpoint-list .dom-breakpoint > div {\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.breakpoint-entry {\n    display: flex;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    padding: 2px 0;\n}\n\n.breakpoint-list .breakpoint-entry:hover {\n    background-color: #eee;\n}\n\n.breakpoint-hit {\n    background-color: rgb(255, 255, 194);\n    border-right: 3px solid rgb(107, 97, 48);\n}\n\n:host-context(.-theme-with-dark-background) .breakpoint-hit {\n    background-color: hsl(46, 98%, 22%);\n    color: #ccc;\n}\n\n/*# sourceURL=browser_debugger/domBreakpointsSidebarPane.css */";Root.Runtime.cachedResources["browser_debugger/eventListenerBreakpoints.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    margin: 0;\n    padding: 2px 4px;\n    min-height: 18px;\n}\n\n.tree-outline {\n    padding: 0;\n}\n\n.tree-outline li {\n    margin-left: 14px;\n    -webkit-user-select: text;\n    cursor: default;\n}\n\n.tree-outline li.parent {\n    margin-left: 1px;\n}\n\n.tree-outline li:not(.parent)::before {\n    display: none;\n}\n\n.breakpoint-hit {\n    background-color: rgb(255, 255, 194);\n}\n\n:host-context(.-theme-with-dark-background) .breakpoint-hit {\n    background-color: hsl(46, 98%, 22%);\n    color: #ccc;\n}\n\n.breakpoint-hit .breakpoint-hit-marker {\n    background-color: rgb(255, 255, 194);\n    border-right: 3px solid rgb(107, 97, 48);\n    height: 18px;\n    left: 0;\n    margin-left: -30px;\n    position: absolute;\n    right: -4px;\n    z-index: -1;\n}\n\n:host-context(.-theme-with-dark-background) .breakpoint-hit .breakpoint-hit-marker {\n    background-color: hsl(46, 98%, 22%);\n}\n\n\n/*# sourceURL=browser_debugger/eventListenerBreakpoints.css */";Root.Runtime.cachedResources["browser_debugger/xhrBreakpointsSidebarPane.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.breakpoint-list {\n    padding-bottom: 3px;\n}\n\n.breakpoint-list .editing.being-edited {\n    overflow: hidden;\n    white-space: nowrap;\n}\n\n.breakpoint-condition {\n    display: block;\n    margin-top: 4px;\n    margin-bottom: 4px;\n    margin-left: 23px;\n    margin-right: 8px;\n}\n\n.breakpoint-condition-input {\n    display: block;\n    margin-left: 0;\n    margin-right: 0;\n    outline: none !important;\n    border: 1px solid rgb(66%, 66%, 66%);\n}\n\n.breakpoint-entry {\n    white-space: nowrap;\n    padding: 2px 0;\n}\n\n.breakpoint-list .breakpoint-entry:hover {\n    background-color: #eee;\n}\n\n.breakpoint-entry [is=dt-checkbox] {\n    max-width: 100%;\n}\n\n.breakpoint-hit {\n    background-color: rgb(255, 255, 194);\n    border-right: 3px solid rgb(107, 97, 48);\n}\n\n:host-context(.-theme-with-dark-background) .breakpoint-hit {\n    background-color: hsl(46, 98%, 22%);\n    color: #ccc;\n}\n\n/*# sourceURL=browser_debugger/xhrBreakpointsSidebarPane.css */";Root.Runtime.cachedResources["changes/changesView.css"]="/*\n * Copyright (c) 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n[slot=insertion-point-main]{\n    flex-direction: column;\n    display: flex;\n}\n\n[slot=insertion-point-sidebar] {\n    overflow: auto;\n}\n\n.editor-container{\n    flex: 1;\n}\n\n:focus.selected {\n    background-color: var(--selection-bg-color);\n    color: #FFF;\n}\n\n.CodeMirror-lines:not(:active) {\n    cursor: default !important;\n}\n\n.CodeMirror-line:hover {\n    cursor: default !important;\n    background-color: rgba(0,0,255,0.05);\n}\n\n.CodeMirror .CodeMirror-linebackground.spacer {\n    text-align: center;\n    color: rgba(0, 0, 0, 0.5);\n    background-color: rgba(0, 0, 255, 0.1);\n}\n\n.CodeMirror .equal > span > span {\n    opacity: .5;\n}\n\n.CodeMirror .CodeMirror-selectedtext:not(.CodeMirror-persist-highlight) {\n    opacity: 1.0;\n}\n\n.CodeMirror .CodeMirror-linebackground.addition, -theme-preserve {\n    background-color: hsla(144, 55%, 49%, .2);\n}\n\n.CodeMirror .CodeMirror-linebackground.deletion, -theme-preserve {\n    background-color: rgba(255, 0, 0, .2);\n}\n\n.CodeMirror .addition .cm-inner-diff:not(.CodeMirror-selectedtext), -theme-preserve {\n    background-color: hsla(144, 55%, 49%, .3);\n}\n\n.CodeMirror .deletion .cm-inner-diff:not(.CodeMirror-selectedtext), -theme-preserve {\n    background-color: rgba(255, 0, 0, .3);\n}\n\n.changes-toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-top: var(--divider-border);\n}\n\n/*# sourceURL=changes/changesView.css */";Root.Runtime.cachedResources["changes/changesSidebar.css"]="li .icon {\n  margin: -3px -5px -3px -5px;\n  background: linear-gradient(45deg, hsl(0, 0%, 50%), hsl(0, 0%, 70%));\n}\n\n.tree-outline li {\n  min-height: 20px;\n}\n\n.tree-outline li:hover:not(.selected) .selection {\n  display: block;\n  background-color: var(--item-hover-color);\n}\n\n.navigator-fs-tree-item .icon{\n  background: linear-gradient(45deg, hsl(28, 75%, 50%), hsl(28, 75%, 70%));\n}\n\n.navigator-sm-script-tree-item .icon,\n.navigator-script-tree-item .icon,\n.navigator-snippet-tree-item .icon {\n  background: linear-gradient(45deg, hsl(48, 70%, 50%), hsl(48, 70%, 70%));\n}\n\n.navigator-sm-stylesheet-tree-item .icon,\n.navigator-stylesheet-tree-item .icon {\n  background: linear-gradient(45deg, hsl(256, 50%, 50%), hsl(256, 50%, 70%));\n}\n\n.navigator-image-tree-item .icon,\n.navigator-font-tree-item .icon {\n  background: linear-gradient(45deg, hsl(109, 33%, 50%), hsl(109, 33%, 70%));\n}\n/*# sourceURL=changes/changesSidebar.css */";Root.Runtime.cachedResources["protocol_monitor/protocolMonitor.css"]=".data-grid {\n    border: none;\n}\n.data-grid {\n    flex: auto;\n    border: none;\n}\n\n.data-grid .data {\n    background-image: none;\n}\n\n.data-grid td {\n    /* border-bottom: 1px solid #ccc; */\n    border-left-color: #ccc;\n}\n\n.data-grid tr.selected {\n    background-color: #def;\n}\n\n.data-grid th {\n    border-left-color: #ccc;\n}\n\n.protocol-message-sent {\n    background-color: hsl(281, 64%, 95%);\n}\n\n.protocol-monitor-toolbar {\n    border-bottom:var(--divider-border);\n}\n\n.error {\n    background-color: hsl(0, 100%, 97%);\n    color: red;\n}\n/*# sourceURL=protocol_monitor/protocolMonitor.css */";Root.Runtime.cachedResources["css_overview/cssOverview.css"]="/**\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.css-overview-panel {\n  overflow: hidden;\n}\n\n/*# sourceURL=css_overview/cssOverview.css */";Root.Runtime.cachedResources["css_overview/cssOverviewStartView.css"]="/**\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.overview-start-view {\n  overflow: hidden;\n  padding: 16px;\n  justify-content: center;\n  align-items: center;\n  height: 100%;\n}\n\n.overview-start-view h1 {\n  font-size: 16px;\n  text-align: center;\n  font-weight: normal;\n  margin: 0;\n  padding: 8px;\n}\n\n.overview-start-view div {\n  font-size: 12px;\n  text-align: center;\n  font-weight: normal;\n  margin: 0;\n  padding-bottom: 44px;\n}\n\n/*# sourceURL=css_overview/cssOverviewStartView.css */";Root.Runtime.cachedResources["css_overview/cssOverviewProcessingView.css"]="/**\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.overview-processing-view {\n  overflow: hidden;\n}\n\n.overview-processing-view {\n  overflow: hidden;\n  padding: 16px;\n  justify-content: center;\n  align-items: center;\n  height: 100%;\n}\n\n.overview-processing-view h1 {\n  font-size: 16px;\n  text-align: center;\n  font-weight: normal;\n  margin: 0;\n  padding: 8px;\n}\n\n.overview-processing-view h2 {\n  font-size: 12px;\n  text-align: center;\n  font-weight: normal;\n  margin: 0;\n  padding-top: 32px;\n}\n\n/*# sourceURL=css_overview/cssOverviewProcessingView.css */";Root.Runtime.cachedResources["css_overview/cssOverviewCompletedView.css"]="/**\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.overview-completed-view {\n  overflow: auto;\n  --overview-default-padding: 28px;\n  --overview-icon-padding: 32px;\n}\n\n.overview-completed-view .summary ul,\n.overview-completed-view .colors ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.overview-completed-view .summary ul {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, 140px);\n  grid-gap: 16px;\n}\n\n.overview-completed-view .colors ul li {\n  display: inline-block;\n  padding: 0;\n  margin: 0 0 16px 0;\n}\n\n.overview-completed-view .summary ul li {\n  display: flex;\n  flex-direction: column;\n  grid-column-start: auto;\n}\n\n.overview-completed-view li .label {\n  font-size: 12px;\n  padding-bottom: 2px;\n}\n\n.overview-completed-view li .value {\n  font-size: 17px;\n}\n\n.overview-completed-view ul li span {\n  font-weight: bold;\n}\n\n.unused-rules-grid .header-container,\n.unused-rules-grid .data-container,\n.unused-rules-grid table.data {\n  position: relative;\n}\n\n.unused-rules-grid .data-container {\n  top: 0;\n  max-height: 350px;\n}\n\n.unused-rules-grid {\n  border-left: none;\n  border-right: none;\n}\n\n/** Ensure links are rendered at the correct height */\n.unused-rules-grid .monospace {\n  display: block;\n  height: 18px;\n}\n\n.element-grid {\n  flex: 1;\n  border-left: none;\n  border-right: none;\n  overflow: auto;\n}\n\n.block {\n  width: 65px;\n  height: 25px;\n  border-radius: 3px;\n  margin-right: 16px;\n  cursor: pointer;\n}\n\n.block-title {\n  padding-top: 4px;\n  font-size: 12px;\n  color: #303942;\n  text-transform: uppercase;\n  letter-spacing: 0;\n}\n\n.results-section {\n  flex-shrink: 0;\n  border-bottom: 1px solid #E6E6E6;\n  padding: var(--overview-default-padding) 0 var(--overview-default-padding) 0;\n}\n\n.horizontally-padded {\n  padding-left: var(--overview-default-padding);\n  padding-right: var(--overview-default-padding);\n}\n\n.results-section h1 {\n  font-size: 15px;\n  font-weight: normal;\n  padding: 0;\n  margin: 0 0 20px 0;\n  padding-left: calc(var(--overview-default-padding) + var(--overview-icon-padding));\n  position: relative;\n  height: 26px;\n  line-height: 26px;\n}\n\n.results-section h1::before {\n  content: '';\n  display: block;\n  position: absolute;\n  left: var(--overview-default-padding);\n  top: 0;\n  width: 26px;\n  height: 26px;\n  background-image: url(Images/cssoverview_icons_2x.png);\n  background-size: 104px 26px;\n}\n\n.results-section.horizontally-padded h1 {\n  padding-left: var(--overview-icon-padding);\n}\n\n.results-section.horizontally-padded h1::before {\n  left: 0;\n}\n\n.results-section.summary h1 {\n  padding-left: 0;\n}\n\n.results-section.summary h1::before {\n  display: none;\n}\n\n.results-section.colors h1::before {\n  background-position: 0 0;\n}\n\n.results-section.font-info h1::before {\n  background-position: -26px 0;\n}\n\n.results-section.unused-declarations h1::before {\n  background-position: -52px 0;\n}\n\n.results-section.media-queries h1::before {\n  background-position: -78px 0;\n}\n\n.results-section.colors h2 {\n  margin-top: 20px;\n  font-size: 13px;\n  font-weight: normal;\n}\n\n.overview-completed-view .font-info ul,\n.overview-completed-view .media-queries ul,\n.overview-completed-view .unused-declarations ul {\n  width: 100%;\n  list-style: none;\n  margin: 0;\n  padding: 0 var(--overview-default-padding);\n}\n\n.overview-completed-view .font-info ul li,\n.overview-completed-view .media-queries ul li,\n.overview-completed-view .unused-declarations ul li {\n  display: grid;\n  grid-template-columns: 2fr 3fr;\n  grid-gap: 12px;\n  margin-bottom: 4px;\n  align-items: center;\n}\n\n.overview-completed-view .font-info button,\n.overview-completed-view .media-queries button,\n.overview-completed-view .unused-declarations button {\n  border: none;\n  padding: 0;\n  margin: 0;\n  display: flex;\n  align-items: center;\n  border-radius: 2px;\n  cursor: pointer;\n  height: 28px;\n  background: none;\n}\n\n.overview-completed-view .font-info button .details,\n.overview-completed-view .media-queries button .details,\n.overview-completed-view .unused-declarations button .details {\n  min-width: 100px;\n  text-align: right;\n  margin-right: 8px;\n  color: var(--accent-color);\n  pointer-events: none;\n}\n\n.overview-completed-view .font-info button .bar-container,\n.overview-completed-view .media-queries button .bar-container,\n.overview-completed-view .unused-declarations button .bar-container {\n  flex: 1;\n  pointer-events: none;\n}\n\n.overview-completed-view .font-info button .bar,\n.overview-completed-view .media-queries button .bar,\n.overview-completed-view .unused-declarations button .bar {\n  height: 8px;\n  background: var(--accent-color);\n  border-radius: 2px;\n  min-width: 2px;\n}\n\n.overview-completed-view .font-info button:hover .details,\n.overview-completed-view .font-info button:focus .details,\n.overview-completed-view .media-queries button:hover .details,\n.overview-completed-view .media-queries button:focus .details,\n.overview-completed-view .unused-declarations button:hover .details,\n.overview-completed-view .unused-declarations button:focus .details {\n  color: var(--accent-color-hover);\n}\n\n.overview-completed-view .font-info button:hover .bar,\n.overview-completed-view .font-info button:focus .bar,\n.overview-completed-view .media-queries button:hover .bar,\n.overview-completed-view .media-queries button:focus .bar,\n.overview-completed-view .unused-declarations button:hover .bar,\n.overview-completed-view .unused-declarations button:focus .bar {\n  background-color: var(--accent-color-hover);\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 0 0 2px rgba(66, 133, 244, 0.4);\n  color: #FFF;\n}\n\n.overview-completed-view .font-info .font-metric {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  grid-gap: 12px;\n}\n\n.overview-completed-view .font-info ul {\n  padding: 0;\n}\n\n.overview-completed-view .font-info ul li {\n  grid-template-columns: 1fr 4fr;\n}\n\n.overview-completed-view .font-info h2 {\n  font-size: 14px;\n  font-weight: bold;\n  margin: 0 0 1em 0;\n}\n\n.overview-completed-view .font-info h3 {\n  font-size: 13px;\n  font-weight: normal;\n  font-style: italic;\n  margin: 0 0 0.5em 0;\n}\n\n.overview-completed-view .font-info {\n  padding-bottom: 0;\n}\n\n.overview-completed-view .font-family {\n  padding: var(--overview-default-padding);\n}\n\n.overview-completed-view .font-family:nth-child(2n+1) {\n  background: #FAFAFA;\n}\n\n.overview-completed-view .font-family:first-of-type {\n  padding-top: 0;\n}\n\n/*# sourceURL=css_overview/cssOverviewCompletedView.css */";Root.Runtime.cachedResources["css_overview/cssOverviewSidebarPanel.css"]="/**\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.overview-sidebar-panel {\n  overflow: auto;\n  display: flex;\n  background: #F3F3F3;\n}\n\n.overview-sidebar-panel-item {\n  height: 30px;\n  padding-left: 30px;\n  display: flex;\n  align-items: center;\n  cursor: pointer;\n}\n\n.overview-sidebar-panel-item:hover,\n.overview-sidebar-panel-item:focus {\n  background: rgb(234, 234, 234);\n}\n\n.overview-sidebar-panel-item.selected {\n  background: #1A73E8;\n  color: #FFFFFF;\n}\n\n.overview-toolbar {\n  border-bottom: 1px solid rgb(204, 204, 204);\n}\n\n/*# sourceURL=css_overview/cssOverviewSidebarPanel.css */";Root.Runtime.cachedResources["cm/codemirror.css"]="\n/* The rest of this file contains styles related to the mechanics of\n   the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n  position: relative;\n  overflow: hidden;\n  background: white;\n}\n\n.CodeMirror-scroll {\n  overflow: scroll !important; /* Things will break if this is overridden */\n  /* 30px is the magic margin used to hide the element's real scrollbars */\n  /* See overflow: hidden in .CodeMirror */\n  margin-bottom: -30px; margin-right: -30px;\n  padding-bottom: 30px;\n  height: 100%;\n  outline: none; /* Prevent dragging from highlighting the element */\n  position: relative;\n}\n.CodeMirror-sizer {\n  position: relative;\n  border-right: 30px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n   before actual scrolling happens, thus preventing shaking and\n   flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  position: absolute;\n  z-index: 6;\n  display: none;\n}\n.CodeMirror-vscrollbar {\n  right: 0; top: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n  bottom: 0; left: 0;\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n  right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n  left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n  position: absolute; left: 0; top: 0;\n  min-height: 100%;\n  z-index: 3;\n}\n.CodeMirror-gutter {\n  white-space: normal;\n  height: 100%;\n  display: inline-block;\n  vertical-align: top;\n  margin-bottom: -30px;\n}\n.CodeMirror-gutter-wrapper {\n  position: absolute;\n  z-index: 4;\n  background: none !important;\n  border: none !important;\n}\n.CodeMirror-gutter-background {\n  position: absolute;\n  top: 0; bottom: 0;\n  z-index: 4;\n}\n.CodeMirror-gutter-elt {\n  position: absolute;\n  cursor: default;\n  z-index: 4;\n}\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n  cursor: text;\n  min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre {\n  /* Reset some styles that the rest of the page might have set */\n  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n  border-width: 0;\n  background: transparent;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  white-space: pre;\n  word-wrap: normal;\n  line-height: inherit;\n  color: inherit;\n  z-index: 2;\n  position: relative;\n  overflow: visible;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-font-variant-ligatures: contextual;\n  font-variant-ligatures: contextual;\n}\n.CodeMirror-wrap pre {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n.CodeMirror-linebackground {\n  position: absolute;\n  left: 0; right: 0; top: 0; bottom: 0;\n  z-index: 0;\n}\n\n.CodeMirror-linewidget {\n  position: relative;\n  z-index: 2;\n  padding: 0.1px; /* Force widget margins to stay inside of the container */\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n  outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.CodeMirror-cursor {\n  position: absolute;\n  pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n  visibility: hidden;\n  position: relative;\n  z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n  visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n  background-color: #ffa;\n  background-color: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursors {\n    visibility: hidden;\n  }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n\n/*# sourceURL=cm/codemirror.css */";Root.Runtime.cachedResources["color_picker/spectrum.css"]="/* https://github.com/bgrins/spectrum */\n:host {\n    width: 232px;\n    height: 319px;\n    -webkit-user-select: none;\n    overflow: hidden;\n}\n\n:selection {\n    background-color: blue;\n    color: white;\n}\n\n.spectrum-color {\n    position: relative;\n    width: 232px;\n    height: 124px;\n    border-radius: 2px 2px 0 0;\n    overflow: hidden;\n    flex: none;\n}\n\n.spectrum-tools {\n    position: relative;\n    height: 111px;\n    width: 100%;\n    flex: none;\n}\n\n.spectrum-hue {\n    top: 16px;\n}\n\n.spectrum-alpha {\n    top: 35px;\n    background-image: url(Images/checker.png);\n    background-size: 12px 11px;\n}\n\n.spectrum-alpha-background {\n    height: 100%;\n    border-radius: 2px;\n}\n\n.spectrum-hue, .spectrum-alpha {\n    position: absolute;\n    left: 86px;\n    width: 130px;\n    height: 11px;\n    border-radius: 2px;\n}\n\n.spectrum-hue[data-keyboard-focus=\"true\"] .spectrum-slider,\n.spectrum-alpha[data-keyboard-focus=\"true\"] .spectrum-slider {\n  border: 1px solid var(--accent-color-hover);\n  width: 14px;\n  height: 14px;\n  border-radius: 14px;\n}\n\n.spectrum-dragger,\n.spectrum-slider {\n    -webkit-user-select: none;\n}\n\n.spectrum-sat,\n.-theme-preserve {\n    background-image: linear-gradient(to right, white, rgba(204, 154, 129, 0));\n}\n\n.spectrum-val,\n.-theme-preserve {\n    background-image: linear-gradient(to top, black, rgba(204, 154, 129, 0));\n}\n\n.spectrum-hue {\n    background: linear-gradient(to left, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%);\n}\n\n.spectrum-dragger {\n    border-radius: 12px;\n    height: 12px;\n    width: 12px;\n    border: 1px solid white;\n    cursor: pointer;\n    position: absolute;\n    top: 0;\n    left: 0;\n    background: black;\n    box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.24);\n}\n\n.spectrum-slider {\n    position: absolute;\n    top: -1px;\n    cursor: pointer;\n    width: 13px;\n    height: 13px;\n    border-radius: 13px;\n    background-color: rgb(248, 248, 248);\n    box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);\n}\n\n.spectrum-contrast-details {\n    position: relative;\n    background-color: white;\n    width: 100%;\n    height: 111px;\n    top: 0;\n    font-size: 13px;\n    color: #333;\n    border-top: var(--divider-border);\n    line-height: initial;\n    overflow: hidden;\n    flex: none;\n}\n\n.spectrum-contrast-details {\n    height: 78px;\n    flex: none;\n}\n\n.spectrum-contrast-details.collapsed {\n    height: 36px;\n    flex: none;\n}\n\n.spectrum-contrast-details div.toolbar.expand {\n    position: absolute;\n    right: 6px;\n    top: 6px;\n    margin: 0;\n}\n\n.spectrum-contrast-details .toolbar-state-on [is=ui-icon] {\n    background-color: rgb(110, 110, 110);\n}\n\n.spectrum-contrast-details.visible {\n    display: initial;\n}\n\n.spectrum-contrast-details div.container {\n    margin: 10px;\n}\n\n.spectrum-contrast-details.collapsed .expanded-details {\n    display: none;\n}\n\n.spectrum-contrast-details .expanded-details {\n    display: flex;\n    margin: 12px 12px 0 4px;\n}\n\n.contrast-pass-fail {\n    margin-left: 0.5em;\n}\n\n.spectrum-contrast-details .contrast-choose-bg-color,\n.spectrum-contrast-details .contrast-thresholds {\n    width: 145px;\n}\n\n.contrast-choose-bg-color {\n    margin: 8px 0 0 5px;\n    font-style: italic;\n}\n\n.contrast-link-label {\n    cursor: pointer;\n}\n\n.contrast-link-label:hover {\n    text-decoration: underline;\n}\n\n.spectrum-contrast-details .background-color {\n    position: absolute;\n    flex: none;\n    right: 12px;\n}\n\n.spectrum-contrast-details .spectrum-eye-dropper {\n    top: 2px;\n    right: 34px;\n    position: absolute;\n    left: auto;\n}\n\n.contrast-details-value {\n    color: #333;\n    margin: 1px 5px;\n    user-select: text;\n}\n\n.contrast-details-value [is=ui-icon] {\n    display: none;\n    margin-left: 5px;\n    background-color: #333;\n}\n\n[is=ui-icon].smallicon-no {\n    background-color: red;\n}\n\n.contrast-pass-fail span[is=ui-icon] {\n    margin-left: 5px;\n}\n\n[is=ui-icon].smallicon-checkmark-square,\n[is=ui-icon].smallicon-checkmark-behind {\n    background-color: #00b06f;\n}\n\n.spectrum-contrast-details .contrast-details-value.contrast-unknown {\n    background-color: white;\n    color: #333;\n    width: 3em;\n    text-align: center;\n}\n\n.contrast-details-value .smallicon-checkmark-behind {\n    margin-left: -6px;\n}\n\n.spectrum-contrast-details.contrast-fail .contrast-details-value .smallicon-no,\n.contrast-details-value.contrast-aa .smallicon-checkmark-square,\n.contrast-details-value.contrast-aaa .smallicon-checkmark-behind {\n    display: inline-block;\n}\n\n\n.contrast-details-value .smallicon-no,\n.contrast-details-value .smallicon-checkmark-square,\n.contrast-details-value .smallicon-checkmark-behind {\n    cursor: pointer;\n}\n\n.swatch {\n    width: 32px;\n    height: 32px;\n    margin: 0;\n    position: absolute;\n    top: 15px;\n    left: 44px;\n    background-image: url(Images/checker.png);\n    border-radius: 16px;\n}\n\n.swatch-inner,\n.swatch-overlay {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    display: inline-block;\n    border-radius: 16px;\n}\n\n.swatch-inner-white {\n    border: 1px solid #ddd;\n}\n\n.swatch-overlay {\n    cursor: pointer;\n    opacity: 0;\n    padding: 4px;\n}\n\n.swatch-overlay:hover,\n.swatch-overlay[data-keyboard-focus=\"true\"]:focus {\n    background-color: rgba(0, 0, 0, .3);\n    opacity: 1;\n}\n\n.swatch-overlay:active {\n    background-color: rgba(0, 0, 0, .5);\n}\n\n[is=ui-icon].icon-mask.copy-color-icon {\n    background-color: white;\n}\n\n.spectrum-text {\n    position: absolute;\n    top: 60px;\n    left: 16px;\n}\n\n.spectrum-text-value {\n    display: inline-block;\n    width: 40px;\n    overflow: hidden;\n    text-align: center;\n    margin-right: 6px;\n    line-height: 20px;\n    padding: 0;\n    color: #333;\n    white-space: nowrap;\n    box-shadow: var(--focus-ring-inactive-shadow);\n}\n\n.spectrum-text-label {\n    letter-spacing: 39.5px;\n    margin-top: 8px;\n    display: block;\n    color: #969696;\n    margin-left: 16px;\n    width: 174px;\n}\n\n.spectrum-text-hex > .spectrum-text-value {\n    width: 178px;\n}\n\n.spectrum-text-hex > .spectrum-text-label {\n    letter-spacing: normal;\n    margin-left: 0px;\n    text-align: center;\n}\n\n.spectrum-switcher {\n    border-radius: 2px;\n    height: 20px;\n    width: 20px;\n    padding: 2px;\n}\n\n:host-context(.-theme-with-dark-background) .spectrum-switcher {\n    -webkit-filter: invert(60%);\n}\n\n.spectrum-display-switcher {\n    top: 72px;\n    position: absolute;\n    right: 10px;\n}\n\n.spectrum-switcher:hover {\n    background-color: #EEEEEE;\n}\n\n.spectrum-switcher[data-keyboard-focus=\"true\"]:focus {\n  background-color: var(--focus-bg-color);\n}\n\n.spectrum-eye-dropper {\n    width: 32px;\n    height: 24px;\n    position: relative;\n    left: 8px;\n    top: 17px;\n    cursor: pointer;\n}\n\n.spectrum-palette-container {\n    border-top: var(--divider-border);\n    position: relative;\n    width: 100%;\n    padding: 6px 24px 6px 6px;\n    display: flex;\n    flex-wrap: wrap;\n}\n\n.spectrum-palette {\n    display: flex;\n    flex-wrap: wrap;\n    width: 198px;\n}\n\n.spectrum-palette-color {\n    width: 12px;\n    height: 12px;\n    flex: 0 0 12px;\n    border-radius: 2px;\n    margin: 6px;\n    cursor: pointer;\n    position: relative;\n    border: 1px solid rgba(0, 0, 0, 0.1);\n    background-position: -1px !important;\n    z-index: 14;\n}\n\n.spectrum-palette-color:hover:not(.spectrum-shades-shown) > .spectrum-palette-color-shadow,\n.spectrum-palette-color:focus:not(.spectrum-shades-shown) > .spectrum-palette-color-shadow {\n    opacity: 0.2;\n}\n\n.spectrum-palette-color:hover:not(.spectrum-shades-shown) > .spectrum-palette-color-shadow:first-child,\n.spectrum-palette-color:focus:not(.spectrum-shades-shown) > .spectrum-palette-color-shadow:first-child {\n    opacity: 0.6;\n    top: -3px;\n    left: 1px;\n}\n\n.spectrum-palette-color-shadow {\n    position: absolute;\n    opacity: 0;\n    margin: 0;\n    top: -5px;\n    left: 3px;\n}\n\n.palette-color-shades {\n    position: absolute;\n    background-color: white;\n    height: 228px;\n    width: 28px;\n    box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.4);\n    z-index: 14;\n    border-radius: 2px;\n    transform-origin: 0px 228px;\n    margin-top: 16px;\n    margin-left: -8px;\n}\n\n.spectrum-palette > .spectrum-palette-color.spectrum-shades-shown {\n    z-index: 15;\n}\n\n.palette-color-shades > .spectrum-palette-color {\n    margin: 8px 0 0 0;\n    margin-left: 8px;\n    width: 12px;\n}\n\n.spectrum-palette > .spectrum-palette-color {\n    transition: transform 100ms cubic-bezier(0, 0, 0.2, 1);\n    will-change: transform;\n    z-index: 13;\n}\n\n.spectrum-palette > .spectrum-palette-color.empty-color {\n    border-color: transparent;\n}\n\n.spectrum-palette > .spectrum-palette-color:not(.empty-color):not(.has-material-shades):hover,\n.palette-color-shades > .spectrum-palette-color:not(.empty-color):hover {\n    transform: scale(1.15);\n}\n\n.spectrum-palette-color:not(.has-material-shades):focus {\n  border: 1px solid var(--accent-color-hover);\n  transform: scale(1.4);\n}\n\n.add-color-toolbar {\n    margin-left: -3px;\n    margin-top: -1px;\n}\n\n.spectrum-palette-switcher {\n    right: 10px;\n    top: 0;\n    margin-top: 9px;\n    position: absolute;\n}\n\n.palette-panel {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 100%;\n    display: flex;\n    flex-direction: column;\n    background-color: white;\n    z-index: 14;\n    transition: transform 200ms cubic-bezier(0, 0, 0.2, 1), visibility 0s 200ms;\n    border-top: var(--divider-border);\n    visibility: hidden;\n}\n\n.palette-panel-showing > .palette-panel {\n    transform: translateY(calc(-100% + 104px));\n    transition-delay: 0s;\n    visibility: visible;\n}\n\n.palette-panel > div.toolbar {\n    position: absolute;\n    right: 6px;\n    top: 6px;\n}\n\n.palette-panel > div:not(.toolbar) {\n    flex: 0 0 38px;\n    border-bottom: var(--divider-border);\n    padding: 12px;\n    line-height: 14px;\n    color: #333;\n}\n\n.palette-panel > div.palette-title {\n    font-size: 14px;\n    line-height: 16px;\n    color: #333;\n    flex-basis: 40px;\n}\n\ndiv.palette-preview {\n    display: flex;\n    cursor: pointer;\n}\n\n.palette-preview-title {\n    flex: 0 0 84px;\n}\n\n.palette-preview > .spectrum-palette-color {\n    margin-top: 1px;\n}\n\n.palette-preview[data-keyboard-focus=\"true\"]:focus,\n.palette-preview:hover {\n    background-color: #eee;\n}\n\n.spectrum-overlay {\n    z-index: 13;\n    visibility: hidden;\n    background-color: hsla(0, 0%, 0%, 0.5);\n    opacity: 0;\n    transition: opacity 100ms cubic-bezier(0, 0, 0.2, 1), visibility 0s 100ms;\n}\n\n.palette-panel-showing > .spectrum-overlay {\n    transition-delay: 0s;\n    visibility: visible;\n    opacity: 1;\n}\n\n.spectrum-contrast-container {\n    width: 100%;\n    height: 100%;\n}\n\n.spectrum-contrast-line,\n:host-context(.-theme-with-dark-background) .spectrum-contrast-line {\n    fill: none;\n    stroke: white;\n    opacity: 0.7;\n    stroke-width: 1.5px;\n}\n\n.delete-color-toolbar {\n    position: absolute;\n    right: 0;\n    top: 0;\n    background-color: #EFEFEF;\n    visibility: hidden;\n    z-index: 3;\n    width: 36px;\n    display: flex;\n    align-items: center;\n    padding-left: 4px;\n    bottom: 2px;\n    border-bottom-right-radius: 2px;\n}\n\n@keyframes showDeleteToolbar {\n    from {\n        opacity: 0;\n    }\n    to {\n        opacity: 1;\n    }\n}\n\n.delete-color-toolbar.dragging {\n    visibility: visible;\n    animation: showDeleteToolbar 100ms 150ms cubic-bezier(0, 0, 0.2, 1) backwards;\n}\n\n.delete-color-toolbar-active {\n    background-color: #ddd;\n    color: white;\n}\n\n.swatch.contrast {\n    width: 30px;\n    height: 30px;\n    position: absolute;\n    top: 0px;\n    right: 0;\n    left: auto;\n    background-image: url(Images/checker.png);\n    border-radius: 15px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.swatch.contrast .swatch-overlay {\n    padding: 0;\n}\n\n.background-color .text-preview {\n    color: black;\n    font-size: 16px;\n    position: relative;\n    padding-bottom: 2px;\n}\n\n.swatch.contrast [is=ui-icon] {\n    margin: -2px;\n}\n\n/*# sourceURL=color_picker/spectrum.css */";Root.Runtime.cachedResources["console/consoleContextSelector.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    padding: 2px 1px 2px 2px;\n    white-space: nowrap;\n    display: flex;\n    flex-direction: column;\n    height: 36px;\n    justify-content: center;\n}\n\n.title {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    flex-grow: 0;\n}\n\n.badge {\n    pointer-events: none;\n    margin-right: 4px;\n    display: inline-block;\n    height: 15px;\n}\n\n.subtitle {\n    color: #999;\n    margin-right: 3px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    flex-grow: 0;\n}\n\n:host(.highlighted) .subtitle {\n    color: inherit;\n}\n\n/*# sourceURL=console/consoleContextSelector.css */";Root.Runtime.cachedResources["console/consolePinPane.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.console-pins {\n  max-height: 200px;\n  overflow-y: auto;\n  background: var(--toolbar-bg-color);\n  --error-background-color: hsl(0, 100%, 97%);\n  --error-border-color: hsl(0, 100%, 92%);\n  --error-text-color: red;\n}\n\n:host-context(.-theme-with-dark-background) .console-pins {\n  --error-background-color: hsl(0, 100%, 8%);\n  --error-border-color: rgb(92, 0, 0);\n  --error-text-color: hsl(0, 100%, 75%);\n}\n\n.console-pins:not(:empty) {\n  border-bottom: 1px solid var(--divider-color);\n}\n\n.console-pin {\n  position: relative;\n  user-select: text;\n  flex: none;\n  padding: 2px 0 6px 24px;\n}\n\n.console-pin:not(:last-child) {\n  border-bottom: 1px solid #e4e4e4;\n}\n\n.console-pin:not(:last-child).error-level:not(:focus-within) {\n  border-top: 1px solid var(--error-border-color);\n  border-bottom: 1px solid var(--error-border-color);\n  margin-top: -1px;\n}\n\n.console-pin.error-level:not(:focus-within) {\n  background-color: var(--error-background-color);\n  color: var(--error-text-color);\n}\n\n.console-pin-name {\n  margin-left: -4px;\n  margin-bottom: 1px;\n  height: auto;\n}\n\n.console-pin-name,\n.console-pin-preview {\n  width: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  min-height: 13px;\n}\n\n:host-context(.-theme-with-dark-background) .console-delete-pin {\n  filter: brightness(2);\n}\n\n.console-delete-pin {\n  position: absolute;\n  top: 8px;\n  left: 8px;\n  opacity: 0.7;\n  cursor: pointer;\n}\n\n.console-delete-pin:hover,\n.console-delete-pin[data-keyboard-focus=\"true\"]:focus {\n  opacity: 1;\n}\n\n.console-pin-name:focus-within {\n  background: #fff;\n  box-shadow: var(--focus-ring-active-shadow) inset;\n}\n\n.console-pin:focus-within .console-pin-preview,\n.console-pin-name:not(:focus-within):not(:hover) {\n  opacity: 0.6;\n}\n\n/*# sourceURL=console/consolePinPane.css */";Root.Runtime.cachedResources["console/consolePrompt.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n#console-prompt .CodeMirror {\n  padding: 3px 0 1px 0;\n}\n\n#console-prompt .CodeMirror-line {\n  padding-top: 0;\n}\n\n#console-prompt .CodeMirror-lines {\n  padding-top: 0;\n}\n\n#console-prompt .console-prompt-icon {\n  position: absolute;\n  left: -13px;\n  top: 5px;\n  -webkit-user-select: none;\n}\n\n.console-eager-preview {\n  padding-bottom: 2px;\n  opacity: 0.6;\n  position: relative;\n  height: 15px;\n}\n\n.console-eager-inner-preview {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  margin-left: 4px;\n  height: 100%;\n}\n\n.console-eager-inner-preview {\n  white-space: nowrap;\n}\n\n.console-eager-inner-preview:empty,\n.console-eager-inner-preview:empty + .preview-result-icon {\n  opacity: 0;\n}\n\n.preview-result-icon {\n  position: absolute;\n  left: -13px;\n  top: 1px;\n}\n\n.console-prompt-icon.console-prompt-incomplete {\n  opacity: 0.65;\n}\n\n/*# sourceURL=console/consolePrompt.css */";Root.Runtime.cachedResources["console/consoleSidebar.css"]="/*\n * Copyright (c) 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    overflow: auto;\n    background-color: var(--toolbar-bg-color);\n}\n\n.tree-outline-disclosure {\n    max-width: 100%;\n    padding-left: 6px;\n}\n\n.count {\n    flex: none;\n    margin: 0 8px;\n}\n\n[is=ui-icon] {\n    margin: 0 5px;\n}\n\n[is=ui-icon].icon-mask {\n    background-color: #555;\n}\n\nli {\n    height: 24px;\n}\n\nli .largeicon-navigator-file {\n    background: linear-gradient(45deg, hsl(48, 70%, 50%), hsl(48, 70%, 70%));\n    margin: 0;\n}\n\nli .largeicon-navigator-folder {\n    background: linear-gradient(45deg, hsl(210, 82%, 65%), hsl(210, 82%, 80%));\n    margin: -3px -3px 0 -5px;\n}\n\n.tree-element-title {\n    flex-shrink: 100;\n    flex-grow: 1;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.tree-outline li:hover:not(.selected) .selection {\n    display: block;\n    background-color: var(--item-hover-color);\n}\n\n/*# sourceURL=console/consoleSidebar.css */";Root.Runtime.cachedResources["console/consoleView.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.console-view {\n    background-color: white;\n    overflow: hidden;\n    --message-border-color: rgb(240, 240, 240);\n    --warning-border-color: hsl(50, 100%, 88%);\n    --error-border-color: hsl(0, 100%, 92%);\n    --error-text-color: red;\n}\n\n.-theme-with-dark-background .console-view {\n    --message-border-color: rgb(58, 58, 58);\n    --warning-border-color: rgb(102, 85, 0);\n    --error-border-color: rgb(92, 0, 0);\n    --error-text-color: hsl(0, 100%, 75%);\n}\n\n.console-toolbar-container {\n    display: flex;\n    flex: none;\n}\n\n.console-main-toolbar {\n    flex: 1 1 auto;\n}\n\n.console-toolbar-container > .toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n.console-view-wrapper {\n    background-color: #eee;\n}\n\n.console-view-fix-select-all {\n    height: 0;\n    overflow: hidden;\n}\n\n.console-settings-pane {\n    flex: none;\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n.console-settings-pane .toolbar {\n    flex: 1 1;\n}\n\n#console-messages {\n    flex: 1 1;\n    overflow-y: auto;\n    word-wrap: break-word;\n    -webkit-user-select: text;\n    transform: translateZ(0);\n    overflow-anchor: none;  /* Chrome-specific scroll-anchoring opt-out */\n}\n\n#console-prompt {\n    clear: right;\n    position: relative;\n    margin: 0 22px 0 20px;\n}\n\n.console-prompt-editor-container {\n    min-height: 21px;\n}\n\n.console-message,\n.console-user-command {\n    clear: right;\n    position: relative;\n    padding: 3px 22px 1px 0;\n    margin-left: 24px;\n    min-height: 17px;  /* Sync with ConsoleViewMessage.js */\n    flex: auto;\n    display: flex;\n}\n\n.console-message > * {\n    flex: auto;\n}\n\n.console-timestamp {\n    color: gray;\n    -webkit-user-select: none;\n    flex: none;\n    margin-right: 5px;\n}\n\n.message-level-icon, .command-result-icon {\n    position: absolute;\n    left: -17px;\n    top: 4px;\n    -webkit-user-select: none;\n}\n\n.console-message-repeat-count {\n    margin: 2px 0 0 10px;\n    flex: none;\n}\n\n.repeated-message {\n    margin-left: 4px;\n}\n\n.repeated-message .message-level-icon {\n    display: none;\n}\n\n.repeated-message .console-message-stack-trace-toggle,\n.repeated-message > .console-message-text {\n    flex: 1;\n}\n\n.console-error-level .repeated-message,\n.console-warning-level .repeated-message,\n.console-verbose-level .repeated-message,\n.console-info-level .repeated-message {\n    display: flex;\n}\n\n.console-info {\n    color: rgb(128, 128, 128);\n    font-style: italic;\n    padding-bottom: 2px;\n}\n\n.console-group .console-group > .console-group-messages {\n    margin-left: 16px;\n}\n\n.console-group-title.console-from-api {\n    font-weight: bold;\n}\n\n.console-group-title .console-message {\n    margin-left: 12px;\n}\n\n.expand-group-icon {\n    -webkit-user-select: none;\n    flex: none;\n    background-color: rgb(110, 110, 110);\n    position: relative;\n    left: 10px;\n    top: 5px;\n    margin-right: 2px;\n}\n\n.console-group-title .message-level-icon {\n    display: none;\n}\n\n.console-message-repeat-count .expand-group-icon {\n    left: 2px;\n    top: 2px;\n    background-color: #fff;\n    margin-right: 4px;\n}\n\n.console-group {\n    position: relative;\n}\n\n.console-message-wrapper {\n    display: flex;\n    border-top: 1px solid var(--message-border-color);\n    border-bottom: 1px solid transparent;\n}\n\n.console-message-wrapper:first-of-type {\n    border-top-color: transparent;\n}\n\n.console-message-wrapper.console-adjacent-user-command-result:not(.console-error-level):not(.console-warning-level) {\n    border-top-width: 0px;\n}\n\n.console-message-wrapper.console-error-level,\n.console-message-wrapper.console-error-level:not(:focus) + .console-message-wrapper:not(.console-warning-level):not(:focus) {\n    border-top-color: var(--error-border-color);\n}\n\n.console-message-wrapper.console-warning-level,\n.console-message-wrapper.console-warning-level:not(:focus) + .console-message-wrapper:not(.console-error-level):not(:focus) {\n    border-top-color: var(--warning-border-color);\n}\n\n.console-message-wrapper:last-of-type {\n    border-bottom-color: var(--message-border-color);\n}\n\n.console-message-wrapper.console-error-level:last-of-type {\n    border-bottom-color: var(--error-border-color);\n}\n\n.console-message-wrapper.console-warning-level:last-of-type {\n    border-bottom-color: var(--warning-border-color);\n}\n\n.console-message-wrapper.console-adjacent-user-command-result:not(.console-error-level):not(.console-warning-level):focus {\n    border-top-width: 1px;\n}\n\n.console-message-wrapper.console-adjacent-user-command-result:not(.console-error-level):not(.console-warning-level):focus .console-message {\n    padding-top: 2px;\n    min-height: 16px;\n}\n\n.console-message-wrapper.console-adjacent-user-command-result:not(.console-error-level):not(.console-warning-level):focus .command-result-icon {\n    top: 3px;\n}\n\n.console-message-wrapper:focus,\n.console-message-wrapper:focus:last-of-type {\n    border-top-color: hsl(214, 67%, 88%);\n    border-bottom-color: hsl(214, 67%, 88%);\n    background-color: hsl(214, 48%, 95%);\n}\n\n.console-message-wrapper.console-error-level:focus,\n.console-message-wrapper.console-error-level:focus:last-of-type {\n    --error-text-color: rgb(200, 0, 0);\n}\n\n.-theme-with-dark-background .console-message-wrapper.console-error-level:focus,\n.-theme-with-dark-background .console-message-wrapper.console-error-level:focus:last-of-type {\n    --error-text-color: hsl(0, 100%, 75%);\n}\n\n.-theme-with-dark-background .console-message-wrapper:focus,\n.-theme-with-dark-background .console-message-wrapper:focus:last-of-type {\n    border-top-color: hsl(214, 47%, 48%);\n    border-bottom-color: hsl(214, 47%, 48%);\n    background-color: hsl(214, 19%, 20%);\n}\n\n.console-message-wrapper:focus + .console-message-wrapper {\n    border-top-color: transparent;\n}\n\n.console-message-wrapper .nesting-level-marker {\n    width: 14px;\n    flex: 0 0 auto;\n    border-right: 1px solid #a5a5a5;\n    position: relative;\n    margin-bottom: -1px;\n    margin-top: -1px;\n}\n\n.console-message-wrapper:last-child .nesting-level-marker::before,\n.console-message-wrapper .nesting-level-marker.group-closed::before {\n    content: \"\";\n}\n\n.console-message-wrapper .nesting-level-marker::before {\n    border-bottom: 1px solid #a5a5a5;\n    position: absolute;\n    top: 0;\n    left: 0;\n    margin-left: 100%;\n    width: 3px;\n    height: 100%;\n    box-sizing: border-box;\n}\n\n.console-error-level {\n    background-color: hsl(0, 100%, 97%);\n}\n\n.-theme-with-dark-background .console-error-level {\n    background-color: hsl(0, 100%, 8%);\n}\n\n.console-warning-level {\n    background-color: hsl(50, 100%, 95%);\n}\n\n.-theme-with-dark-background .console-warning-level {\n    background-color: hsl(50, 100%, 10%);\n}\n\n.console-warning-level .console-message-text {\n    color: hsl(39, 100%, 18%);\n}\n\n.console-error-level .console-message-text,\n.console-error-level .console-view-object-properties-section {\n    color: var(--error-text-color) !important;\n}\n\n.console-system-type.console-info-level {\n    color: blue;\n}\n\n.-theme-with-dark-background .console-verbose-level:not(.console-warning-level) .console-message-text,\n.-theme-with-dark-background .console-system-type.console-info-level {\n    color: hsl(220, 100%, 65%) !important;\n}\n\n.console-message.console-warning-level {\n    background-color: rgb(255, 250, 224);\n}\n\n#console-messages .link {\n    text-decoration: underline;\n}\n\n#console-messages .link,\n#console-messages .devtools-link {\n    color: rgb(33%, 33%, 33%);\n    cursor: pointer;\n    word-break: break-all;\n}\n\n#console-messages .link:hover,\n#console-messages .devtools-link:hover {\n    color: rgb(15%, 15%, 15%);\n}\n\n.console-group-messages .section {\n    margin: 0 0 0 12px !important;\n}\n\n.console-group-messages .section > .header {\n    padding: 0 8px 0 0;\n    background-image: none;\n    border: none;\n    min-height: 0;\n}\n\n.console-group-messages .section > .header::before {\n    margin-left: -12px;\n}\n\n.console-group-messages .section > .header .title {\n    color: #222;\n    font-weight: normal;\n    line-height: 13px;\n}\n\n.console-group-messages .section .properties li .info {\n    padding-top: 0;\n    padding-bottom: 0;\n    color: rgb(60%, 60%, 60%);\n}\n\n.console-object-preview {\n    white-space: normal;\n    word-wrap: break-word;\n    font-style: italic;\n}\n\n.console-object-preview .name {\n    /* Follows .section .properties .name, .event-properties .name */\n    color: rgb(136, 19, 145);\n    flex-shrink: 0;\n}\n\n.console-message-text .object-value-string,\n.console-message-text .object-value-regexp,\n.console-message-text .object-value-symbol {\n    white-space: pre-wrap;\n    word-break: break-all;\n}\n\n.console-message-formatted-table {\n    clear: both;\n}\n\n.console-message .source-code {\n    line-height: 1.2;\n}\n\n.console-message-anchor {\n    float: right;\n    text-align: right;\n    max-width: 100%;\n    margin-left: 4px;\n}\n\n.console-message-badge {\n    float: right;\n    margin-left: 4px;\n}\n\n.console-message-nowrap-below,\n.console-message-nowrap-below div,\n.console-message-nowrap-below span {\n    white-space: nowrap !important;\n}\n\n.object-state-note {\n    display: inline-block;\n    width: 11px;\n    height: 11px;\n    color: white;\n    text-align: center;\n    border-radius: 3px;\n    line-height: 13px;\n    margin: 0 6px;\n    font-size: 9px;\n}\n\n.-theme-with-dark-background .object-state-note {\n    background-color: hsl(230, 100%, 80%);\n}\n\n.info-note {\n    background-color: rgb(179, 203, 247);\n}\n\n.info-note::before {\n    content: \"i\";\n}\n\n.console-view-object-properties-section:not(.expanded) .info-note {\n    display: none;\n}\n\n.console-view-object-properties-section {\n    padding: 0px;\n    position: relative;\n    vertical-align: baseline;\n    color: inherit;\n    display: inline-block;\n    overflow-wrap: break-word;\n    max-width: 100%;\n}\n\n.console-object {\n    white-space: pre-wrap;\n    word-break: break-all;\n}\n\n.console-message-stack-trace-toggle {\n    display: flex;\n    flex-direction: row;\n    align-items: flex-start;\n}\n\n.console-message-stack-trace-wrapper {\n    flex: 1 1 auto;\n    display: flex;\n    flex-direction: column;\n    align-items: stretch;\n}\n\n.console-message-stack-trace-wrapper > * {\n    flex: none;\n}\n\n.console-message-expand-icon {\n    margin-bottom: -2px;\n}\n\n.console-searchable-view {\n    max-height: 100%;\n}\n\n.console-view-pinpane {\n    flex: none;\n    max-height: 50%;\n}\n\n/*# sourceURL=console/consoleView.css */";Root.Runtime.cachedResources["coverage/coverageListView.css"]=".data-grid {\n  border: none;\n}\n\n.data-grid td .url-outer {\n  width: 100%;\n  display: inline-flex;\n  justify-content: flex-start;\n}\n\n.data-grid td .url-outer .filter-highlight {\n  font-weight: bold;\n}\n\n.data-grid td .url-prefix {\n  overflow-x: hidden;\n  text-overflow: ellipsis;\n}\n\n.data-grid td .url-suffix {\n  flex: none;\n}\n\n.data-grid td .bar {\n  display: inline-block;\n  height: 8px;\n}\n\n.data-grid .selected td .bar {\n  border-top: 1px white solid;\n  border-bottom: 1px white solid;\n}\n\n.data-grid .selected td .bar:last-child {\n  border-right: 1px white solid;\n}\n\n.data-grid .selected td .bar:first-child {\n  border-left: 1px white solid;\n}\n\n.data-grid td .bar-container {\n}\n\n.data-grid td .bar-unused-size {\n  background-color: #EE442F;\n}\n\n.data-grid td .bar-used-size {\n  background-color: #63ACBE;\n}\n\n.data-grid td .percent-value {\n  color: #888;\n  width: 45px;\n  display: inline-block;\n}\n\n.data-grid:focus tr.selected span.percent-value {\n  color: #eee;\n}\n\n/*# sourceURL=coverage/coverageListView.css */";Root.Runtime.cachedResources["coverage/coverageView.css"]="/*\n * Copyright (c) 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    overflow: hidden;\n}\n\n.coverage-toolbar-container {\n    display: flex;\n    border-bottom: 1px solid #ccc;\n    flex: 0 0 auto;\n}\n\n.coverage-toolbar {\n    display: inline-block;\n}\n\n.coverage-toolbar-summary {\n    background-color: #eee;\n    border-top: 1px solid #ccc;\n    padding-left: 5px;\n    flex: 0 0 19px;\n    display: flex;\n    padding-right: 5px;\n}\n\n.coverage-toolbar-summary .coverage-message {\n    padding-top: 2px;\n    padding-left: 1ex;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden;\n}\n\n.coverage-results {\n    overflow-y: auto;\n    display: flex;\n    flex: auto;\n}\n\n.landing-page {\n    justify-content: center;\n    align-items:  center;\n    padding: 20px;\n}\n\n.landing-page .message {\n    white-space: pre-line;\n}\n\n/*# sourceURL=coverage/coverageView.css */";Root.Runtime.cachedResources["data_grid/dataGrid.css"]=".data-grid {\n    position: relative;\n    border: 1px solid rgb(204, 204, 204) !important;\n    line-height: 120%;\n}\n\n.data-grid table {\n    table-layout: fixed;\n    border-spacing: 0;\n    border-collapse: separate;\n    height: 100%;\n    width: 100%;\n}\n\n.data-grid .header-container,\n.data-grid .data-container {\n    position: absolute;\n    left: 0;\n    right: 0;\n    overflow-x: hidden;\n}\n\n.data-grid .header-container {\n    top: 0;\n    height: 21px;\n}\n\n.data-grid .data-container {\n    top: 21px;\n    bottom: 0;\n    overflow-y: overlay;\n    transform: translateZ(0);\n}\n\n.data-grid.inline .header-container,\n.data-grid.inline .data-container {\n    position: static;\n}\n\n.data-grid.inline .corner {\n    display: none;\n}\n\n.platform-mac .data-grid .corner,\n.data-grid.data-grid-fits-viewport .corner {\n    display: none;\n}\n\n.data-grid .corner {\n    width: 14px;\n    padding-right: 0;\n    padding-left: 0;\n    border-left: 0 none transparent !important;\n}\n\n.data-grid .top-filler-td,\n.data-grid .bottom-filler-td {\n    height: auto !important;\n    padding: 0 !important;\n}\n\n.data-grid table.data {\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    border-top: 0 none transparent;\n    table-layout: fixed;\n}\n\n.data-grid.inline table.data {\n    position: static;\n}\n\n.data-grid table.data tr {\n    display: none;\n    height: 20px;\n}\n\n.data-grid table.data tr.revealed {\n    display: table-row;\n}\n\n.striped-data-grid .revealed.data-grid-data-grid-node:nth-child(odd),\n.striped-data-grid-starts-with-odd .revealed.data-grid-data-grid-node:nth-child(even) {\n    background-color: hsl(214, 70%, 97%);\n}\n\n.data-grid td,\n.data-grid th {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    line-height: 18px;\n    height: 18px;\n    border-left: 1px solid #aaa;\n    padding: 1px 4px;\n}\n\n.data-grid th:first-child,\n.data-grid td:first-child {\n    border-left: none !important;\n}\n\n.data-grid td {\n    vertical-align: top;\n    -webkit-user-select: text;\n}\n\n.data-grid th {\n    text-align: left;\n    background-color: var(--toolbar-bg-color);\n    border-bottom: 1px solid #aaa;\n    font-weight: normal;\n    vertical-align: middle;\n}\n\n.data-grid td > div,\n.data-grid th > div {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.data-grid td.editing > div {\n    text-overflow: clip;\n}\n\n.data-grid .center {\n    text-align: center;\n}\n\n.data-grid .right {\n    text-align: right;\n}\n\n.data-grid th.sortable {\n    position: relative;\n}\n\n.data-grid th.sortable:active::after {\n    content: \"\";\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    background-color: rgba(0, 0, 0, 0.15);\n}\n\n.data-grid th .sort-order-icon-container {\n    position: absolute;\n    top: 1px;\n    right: 0;\n    bottom: 1px;\n    display: flex;\n    align-items: center;\n}\n\n.data-grid th .sort-order-icon {\n    margin-right: 4px;\n    margin-bottom: -2px;\n    display: none;\n}\n\n.data-grid th.sort-ascending .sort-order-icon,\n.data-grid th.sort-descending .sort-order-icon {\n    display: block;\n}\n\n.data-grid th.sortable:hover {\n    background-color: hsla(0, 0%, 90%, 1);\n}\n\n.data-grid .top-filler-td {\n    border-bottom: 0 none transparent;\n    line-height: 0;\n}\n\n.data-grid button {\n    line-height: 18px;\n    color: inherit;\n}\n\n.data-grid td.disclosure::before {\n    -webkit-user-select: none;\n    -webkit-mask-image: url(Images/treeoutlineTriangles.svg);\n    -webkit-mask-position: 0 0;\n    -webkit-mask-size: 32px 24px;\n    float: left;\n    width: 8px;\n    height: 12px;\n    margin-right: 2px;\n    content: \"\";\n    position: relative;\n    top: 3px;\n    background-color: rgb(110, 110, 110);\n}\n\n.data-grid tr:not(.parent) td.disclosure::before {\n    background-color: transparent;\n}\n\n\n.data-grid tr.expanded td.disclosure::before {\n    -webkit-mask-position: -16px 0;\n}\n\n.data-grid table.data tr.revealed.selected {\n    background-color: rgb(212, 212, 212);\n    color: inherit;\n}\n\n.data-grid.no-selection[data-keyboard-focus=\"true\"]:focus {\n    border: 1px solid var(--accent-color) !important;\n}\n\n.data-grid:focus table.data tr.selected {\n    background-color: var(--selection-bg-color);\n    color: var(--selection-fg-color);\n}\n\n.data-grid:focus tr.selected .devtools-link {\n    color: var(--selection-fg-color);\n}\n\n.data-grid:focus tr.parent.selected td.disclosure::before {\n    background-color: var(--selection-fg-color);\n    -webkit-mask-position: 0 0;\n}\n\n.data-grid:focus tr.expanded.selected td.disclosure::before {\n    background-color: var(--selection-fg-color);\n    -webkit-mask-position: -16px 0;\n}\n\n.data-grid tr.inactive {\n    color: rgb(128, 128, 128);\n    font-style: italic;\n}\n\n.data-grid tr.dirty {\n    background-color: hsl(0, 100%, 92%);\n    color: red;\n    font-style: normal;\n}\n\n.data-grid:focus tr.selected.dirty {\n    background-color: hsl(0, 100%, 70%);\n}\n\n.data-grid-resizer {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    width: 5px;\n    z-index: 500;\n}\n\n/*# sourceURL=data_grid/dataGrid.css */";Devices.DevicesView=class extends UI.VBox{constructor(){super(true);const deprecationMessage=this.contentElement.createChild('span');const documentationLink=UI.html`<a class="devtools-link" role="link" tabindex="0" href="#" style="display: inline; cursor: pointer;">chrome://inspect/#devices</a>`;self.onInvokeElement(documentationLink,event=>{SDK.targetManager.mainTarget().pageAgent().navigate('chrome://inspect/#devices');event.consume(true);});deprecationMessage.style.padding='5px';deprecationMessage.appendChild(UI.formatLocalized('This panel has been deprecated in favor of the %s interface, which has equivalent functionality.',[documentationLink]));this.setDefaultFocusedElement(documentationLink);}};;Root.Runtime.cachedResources["elements/breadcrumbs.css"]="/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.crumbs {\n    display: inline-block;\n    pointer-events: auto;\n    cursor: default;\n    white-space: nowrap;\n}\n\n.crumbs .crumb {\n    display: inline-block;\n    padding: 0 7px;\n    line-height: 23px;\n    white-space: nowrap;\n}\n\n.crumbs .crumb.collapsed > * {\n    display: none;\n}\n\n.crumbs .crumb.collapsed::before {\n    content: \"\\2026\";\n    font-weight: bold;\n}\n\n.crumbs .crumb.compact .extra {\n    display: none;\n}\n\n.crumb.selected, .crumb:hover {\n    background-color: var(--toolbar-bg-color);\n}\n\n.crumb:not(.selected) .node-label-name {\n    color: var(--dom-tag-name-color);\n}\n\n.crumb:not(.selected) .node-label-class {\n    color: var(--dom-attribute-name-color);\n}\n\n/*# sourceURL=elements/breadcrumbs.css */";Root.Runtime.cachedResources["elements/classesPaneWidget.css"]="/**\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.styles-element-classes-pane {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: 1px solid rgb(189, 189, 189);\n    padding: 6px 2px 2px;\n}\n\n.styles-element-classes-container {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: flex-start;\n}\n\n.styles-element-classes-pane [is=dt-checkbox] {\n    margin-right: 15px;\n}\n\n.styles-element-classes-pane .title-container {\n    padding-bottom: 2px;\n}\n\n.styles-element-classes-pane .new-class-input {\n    padding-left: 3px;\n    padding-right: 3px;\n    overflow: hidden;\n    border: 1px solid #ddd;\n    line-height: 15px;\n    margin-left: 3px;\n    width: calc(100% - 7px);\n    background-color: #fff;\n    cursor: text;\n}\n\n/*# sourceURL=elements/classesPaneWidget.css */";Root.Runtime.cachedResources["elements/computedStyleSidebarPane.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.computed-properties {\n    -webkit-user-select: text;\n    flex-shrink: 0;\n}\n\n.styles-sidebar-pane-toolbar {\n    border-bottom: 1px solid #eee;\n    flex-shrink: 0;\n}\n\n.styles-sidebar-pane-filter-box {\n    flex: auto;\n    display: flex;\n}\n\n.styles-sidebar-pane-filter-box > input {\n    outline: none !important;\n    border: none;\n    width: 100%;\n    background: white;\n    padding-left: 4px;\n    margin: 3px;\n}\n\n.styles-sidebar-pane-filter-box > input:focus,\n.styles-sidebar-pane-filter-box > input:not(:placeholder-shown) {\n    box-shadow: var(--focus-ring-active-shadow);\n}\n\n.styles-sidebar-pane-filter-box > input::placeholder {\n    color: rgba(0, 0, 0, 0.54);\n}\n\n/*# sourceURL=elements/computedStyleSidebarPane.css */";Root.Runtime.cachedResources["elements/computedStyleWidgetTree.css"]="/*\n * Copyright (c) 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.computed-style-property {\n    overflow: hidden;\n    flex: auto;\n    text-overflow: ellipsis;\n}\n\n.computed-style-property .property-name {\n    width: 16em;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    max-width: 52%;\n    display: inline-block;\n    vertical-align: text-top;\n}\n\n.computed-style-property .property-value {\n    margin-left: 2em;\n    position: relative;\n}\n\n.computed-style-property .property-value-text {\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.tree-outline li:hover .goto-source-icon {\n    display: block;\n    margin-top: -2px;\n}\n\n.goto-source-icon {\n    background-color: #5a5a5a;\n    display: none;\n    position: absolute;\n    left: -16px;\n    top: 0;\n}\n\n.goto-source-icon:hover {\n    background-color: #333;\n}\n\n.computed-style-property-inherited {\n    opacity: 0.5;\n}\n\n.trace-link {\n    user-select: none;\n    float: right;\n    padding-left: 1em;\n    position: relative;\n    z-index: 1;\n}\n\n.property-trace {\n    text-overflow: ellipsis;\n    overflow: hidden;\n    flex-grow: 1;\n}\n\n.property-trace-selector {\n    color: gray;\n    padding-left: 2em;\n}\n\n.property-trace-value {\n    position: relative;\n    display: inline-block;\n    margin-left: 16px;\n}\n\n.property-trace-inactive .property-trace-value::before {\n    position: absolute;\n    content: \".\";\n    border-bottom: 1px solid rgba(0, 0, 0, 0.35);\n    top: 0;\n    bottom: 5px;\n    left: 0;\n    right: 0;\n}\n\n.tree-outline li.odd-row {\n    position: relative;\n    background-color: #F5F5F5;\n}\n\n.tree-outline, .tree-outline ol {\n    padding-left: 0;\n}\n\n.tree-outline li:hover {\n    background-color: rgb(235, 242, 252);\n    cursor: pointer;\n}\n\n.tree-outline li::before {\n    margin-left: 4px;\n}\n\n.delimeter {\n    color: transparent;\n}\n\n.delimeter::selection {\n    color: transparent;\n}\n\n.computed-narrow .computed-style-property .property-name,\n.computed-narrow .computed-style-property .property-value {\n    display: inline-block;\n    width: 100%;\n    max-width: 100%;\n    margin-left: 0;\n    white-space: nowrap;\n}\n\n.computed-narrow .computed-style-property {\n    padding: 2px 0;\n    display: block;\n    white-space: normal;\n}\n\n.computed-narrow.tree-outline li::before {\n    margin-top: -14px;\n}\n\n/*# sourceURL=elements/computedStyleWidgetTree.css */";Root.Runtime.cachedResources["elements/domLinkifier.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n  display: inline;\n}\n\n.node-link {\n    cursor: pointer;\n    display: inline;\n    pointer-events: auto;\n}\n\n.node-link[data-keyboard-focus=\"true\"]:focus {\n    outline-width: unset;\n}\n\n.node-label-name {\n    color: rgb(136, 18, 128);\n}\n\n.node-label-class, .node-label-pseudo {\n    color: rgb(153, 69, 0);\n}\n\n/*# sourceURL=elements/domLinkifier.css */";Root.Runtime.cachedResources["elements/elementsPanel.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#elements-content {\n    flex: 1 1;\n    overflow: auto;\n    padding: 2px 0 0 0;\n}\n\n#elements-content:not(.elements-wrap) > div {\n    display: inline-block;\n    min-width: 100%;\n}\n\n#elements-content.elements-wrap {\n    overflow-x: hidden;\n}\n\n#elements-crumbs {\n    flex: 0 0 23px;\n    background-color: white;\n    border-top: 1px solid var(--divider-color);\n    overflow: hidden;\n    width: 100%;\n}\n\n.style-panes-wrapper {\n    overflow: hidden auto;\n}\n\n.style-panes-wrapper > div:not(:first-child) {\n    border-top: 1px solid var(--divider-color);\n}\n\n.elements-tree-header {\n    height: 24px;\n    border-top: 1px solid var(--divider-color);\n    border-bottom: 1px solid var(--divider-color);\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n}\n\n.elements-tree-header-frame {\n    margin-left: 6px;\n    margin-right: 6px;\n    flex: none;\n}\n\n/*# sourceURL=elements/elementsPanel.css */";Root.Runtime.cachedResources["elements/elementStatePaneWidget.css"]="/**\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.styles-element-state-pane {\n    overflow: hidden;\n    padding-left: 2px;\n    background-color: var(--toolbar-bg-color);\n    border-bottom: 1px solid rgb(189, 189, 189);\n    margin-top: 0;\n    padding-bottom: 2px;\n}\n\n.styles-element-state-pane > div {\n    margin: 8px 4px 6px;\n}\n\n.styles-element-state-pane > table {\n    width: 100%;\n    border-spacing: 0;\n}\n\n.styles-element-state-pane td {\n    padding: 0;\n}\n\n/*# sourceURL=elements/elementStatePaneWidget.css */";Root.Runtime.cachedResources["elements/elementsTreeOutline.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.elements-disclosure {\n    width: 100%;\n    display: inline-block;\n    line-height: normal;\n}\n\n.elements-disclosure li {\n    /** Keep margin-left & padding-left in sync with ElementsTreeElements.updateDecorators **/\n    padding: 0 0 0 14px;\n    border-top: 1px solid transparent;\n    margin-left: -2px;\n    word-wrap: break-word;\n    position: relative;\n    min-height: 15px;\n    line-height: 1.36;\n}\n\n.elements-disclosure li.parent {\n    /** Keep it in sync with ElementsTreeElements.updateDecorators **/\n    margin-left: -13px;\n}\n\n.elements-disclosure li .selected-hint:before {\n    font-style: italic;\n    content: \" == $0\";\n    opacity: 0;\n    position: absolute;\n    white-space: pre;\n}\n\n.elements-disclosure .elements-tree-outline:not(.hide-selection-when-blurred) li.selected .selected-hint:before {\n    opacity: 0.6;\n}\n\n.elements-disclosure li.parent::before {\n    box-sizing: border-box;\n}\n\n.elements-disclosure li.parent::before {\n    -webkit-user-select: none;\n    -webkit-mask-image: url(Images/treeoutlineTriangles.svg);\n    -webkit-mask-size: 32px 24px;\n    content: '\\00a0\\00a0';\n    color: transparent;\n    text-shadow: none;\n    margin-right: -3px;\n}\n\n.elements-disclosure li.always-parent::before {\n    visibility: hidden;\n}\n\n.elements-disclosure li.parent::before {\n    -webkit-mask-position: 0 0;\n    background-color: #727272;\n}\n\n.elements-disclosure li .selection {\n    display: none;\n    z-index: -1;\n}\n\n.elements-disclosure li.hovered:not(.selected) .selection {\n    display: block;\n    left: 3px;\n    right: 3px;\n    background-color: var(--item-hover-color);\n    border-radius: 5px;\n}\n\n.elements-disclosure li.parent.expanded::before {\n    -webkit-mask-position: -16px 0;\n}\n\n.elements-disclosure li.selected .selection {\n    display: block;\n}\n\n.elements-disclosure .elements-tree-outline:not(.hide-selection-when-blurred) .selection {\n    background-color: var(--item-selection-inactive-bg-color);\n}\n\n.elements-disclosure .elements-tree-outline.hide-selection-when-blurred .selected:focus[data-keyboard-focus=\"true\"] .highlight > * {\n    background: var(--focus-bg-color);\n    border-radius: 2px;\n    box-shadow: 0px 0px 0px 2px var(--focus-bg-color);\n}\n\n.elements-disclosure ol {\n    list-style-type: none;\n    /** Keep it in sync with ElementsTreeElements.updateDecorators **/\n    padding-inline-start: 12px;\n    margin: 0;\n}\n\n.elements-disclosure ol.children {\n    display: none;\n}\n\n.elements-disclosure ol.children.expanded {\n    display: block;\n}\n\n.elements-disclosure li .webkit-html-tag.close {\n    margin-left: -12px;\n}\n\n.elements-disclosure > ol {\n    position: relative;\n    margin: 0;\n    cursor: default;\n    min-width: 100%;\n    min-height: 100%;\n    padding-left: 2px;\n}\n\n.elements-disclosure .elements-tree-outline:not(.hide-selection-when-blurred) li.selected:focus .selection {\n    background-color: var(--item-selection-bg-color);\n}\n\n.elements-tree-outline ol.shadow-root-depth-4 {\n    background-color: rgba(0, 0, 0, 0.04);\n}\n\n.elements-tree-outline ol.shadow-root-depth-3 {\n    background-color: rgba(0, 0, 0, 0.03);\n}\n\n.elements-tree-outline ol.shadow-root-depth-2 {\n    background-color: rgba(0, 0, 0, 0.02);\n}\n\n.elements-tree-outline ol.shadow-root-depth-1 {\n    background-color: rgba(0, 0, 0, 0.01);\n}\n\n.elements-tree-outline ol.shadow-root-deep {\n    background-color: transparent;\n}\n\n.elements-tree-editor {\n    box-shadow: var(--drop-shadow);\n    margin-right: 4px;\n}\n\n.elements-disclosure li.elements-drag-over .selection {\n    display: block;\n    margin-top: -2px;\n    border-top: 2px solid var(--selection-bg-color);\n}\n\n.elements-disclosure li.in-clipboard .highlight {\n    outline: 1px dotted darkgrey;\n}\n\n.CodeMirror {\n    background-color: white;\n    height: 300px !important;\n}\n\n.CodeMirror-lines {\n    padding: 0;\n}\n\n.CodeMirror pre {\n    padding: 0;\n}\n\nbutton, input, select {\n  font-family: inherit;\n  font-size: inherit;\n}\n\n.editing {\n    box-shadow: var(--drop-shadow);\n    background-color: white;\n    text-overflow: clip !important;\n    padding-left: 2px;\n    margin-left: -2px;\n    padding-right: 2px;\n    margin-right: -2px;\n    margin-bottom: -1px;\n    padding-bottom: 1px;\n    opacity: 1.0 !important;\n}\n\n.editing,\n.editing * {\n    color: #222 !important;\n    text-decoration: none !important;\n}\n\n.editing br {\n    display: none;\n}\n\n.elements-gutter-decoration {\n    position: absolute;\n    top: 3px;\n    left: 2px;\n    height: 9px;\n    width: 9px;\n    border-radius: 5px;\n    border: 1px solid orange;\n    background-color: orange;\n    cursor: pointer;\n}\n\n.elements-gutter-decoration.elements-has-decorated-children {\n    opacity: 0.5;\n}\n\n.add-attribute {\n    margin-left: 1px;\n    margin-right: 1px;\n    white-space: nowrap;\n}\n\n.elements-tree-nowrap, .elements-tree-nowrap .li {\n    white-space: pre !important;\n}\n\n.elements-disclosure .elements-tree-nowrap li {\n    word-wrap: normal;\n}\n\n/* DOM update highlight */\n@-webkit-keyframes dom-update-highlight-animation {\n    from {\n        background-color: rgb(158, 54, 153);\n        color: white;\n    }\n    80% {\n        background-color: rgb(245, 219, 244);\n        color: inherit;\n    }\n    to {\n        background-color: inherit;\n    }\n}\n\n@-webkit-keyframes dom-update-highlight-animation-dark {\n    from {\n        background-color: rgb(158, 54, 153);\n        color: white;\n    }\n    80% {\n        background-color: #333;\n        color: inherit;\n    }\n    to {\n        background-color: inherit;\n    }\n}\n\n.dom-update-highlight {\n    -webkit-animation: dom-update-highlight-animation 1.4s 1 cubic-bezier(0, 0, 0.2, 1);\n    border-radius: 2px;\n}\n\n:host-context(.-theme-with-dark-background) .dom-update-highlight {\n    -webkit-animation: dom-update-highlight-animation-dark 1.4s 1 cubic-bezier(0, 0, 0.2, 1);\n}\n\n.elements-disclosure.single-node li {\n    padding-left: 2px;\n}\n\n.elements-tree-shortcut-title, .elements-tree-shortcut-link {\n    color: rgb(87, 87, 87);\n}\n\n.elements-disclosure .gutter-container {\n    position: absolute;\n    top: 0;\n    left: 0;\n    cursor: pointer;\n    width: 15px;\n    height: 15px;\n}\n\n.elements-hide-gutter .gutter-container {\n    display: none;\n}\n\n.gutter-menu-icon {\n    display: block;\n    visibility: hidden;\n    transform: rotate(-90deg) scale(0.8);\n    background-color: white;\n    position: relative;\n    left: -7px;\n    top: -3px;\n}\n\n.elements-disclosure li.selected .gutter-container:not(.has-decorations) .gutter-menu-icon {\n    visibility: visible;\n}\n\n/** Guide line */\nli.selected {\n    z-index: 0;\n}\n\nli.hovered:not(.always-parent) + ol.children, .elements-tree-outline ol.shadow-root, li.selected:not(.always-parent) + ol.children {\n    margin-left: 5px;\n    padding-inline-start: 6px;\n    border-width: 1px;\n    border-left-style: solid;\n}\n\nli.hovered:not(.always-parent) + ol.children:not(.shadow-root) {\n    border-color: hsla(0,0%,0%,0.1);\n}\n\n.elements-tree-outline ol.shadow-root {\n    border-color: hsla(0,0%,80%,1);\n}\n\nli.selected:not(.always-parent) + ol.children {\n    border-color: hsla(216,68%,80%,1) !important;\n}\n\n/*# sourceURL=elements/elementsTreeOutline.css */";Root.Runtime.cachedResources["elements/metricsSidebarPane.css"]="/**\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.metrics {\n    padding: 8px;\n    font-size: 10px;\n    text-align: center;\n    white-space: nowrap;\n    min-height: var(--metrics-height);\n    display: flex;\n    flex-direction: column;\n    -webkit-align-items: center;\n    -webkit-justify-content: center;\n}\n\n:host {\n    --metrics-height: 190px;\n    height: var(--metrics-height);\n    contain: strict;\n}\n\n:host-context(.-theme-with-dark-background) .metrics {\n    color: #222;\n}\n\n:host-context(.-theme-with-dark-background) .metrics > div:hover {\n    color: #ccc;\n}\n\n.metrics .label {\n    position: absolute;\n    font-size: 10px;\n    margin-left: 3px;\n    padding-left: 2px;\n    padding-right: 2px;\n}\n\n.metrics .position {\n    border: 1px rgb(66%, 66%, 66%) dotted;\n    background-color: white;\n    display: inline-block;\n    text-align: center;\n    padding: 3px;\n    margin: 3px;\n}\n\n.metrics .margin {\n    border: 1px dashed;\n    background-color: white;\n    display: inline-block;\n    text-align: center;\n    vertical-align: middle;\n    padding: 3px 6px;\n    margin: 3px;\n}\n\n.metrics .border {\n    border: 1px black solid;\n    background-color: white;\n    display: inline-block;\n    text-align: center;\n    vertical-align: middle;\n    padding: 3px 6px;\n    margin: 3px;\n}\n\n.metrics .padding {\n    border: 1px grey dashed;\n    background-color: white;\n    display: inline-block;\n    text-align: center;\n    vertical-align: middle;\n    padding: 3px 6px;\n    margin: 3px;\n}\n\n.metrics .content {\n    position: static;\n    border: 1px gray solid;\n    background-color: white;\n    display: inline-block;\n    text-align: center;\n    vertical-align: middle;\n    padding: 3px;\n    margin: 3px;\n    min-width: 80px;\n    overflow: visible;\n}\n\n.metrics .content span {\n    display: inline-block;\n}\n\n.metrics .editing {\n    position: relative;\n    z-index: 100;\n    cursor: text;\n}\n\n.metrics .left {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.metrics .right {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.metrics .top {\n    display: inline-block;\n}\n\n.metrics .bottom {\n    display: inline-block;\n}\n\n/*# sourceURL=elements/metricsSidebarPane.css */";Root.Runtime.cachedResources["elements/platformFontsWidget.css"]="/**\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    -webkit-user-select: text;\n}\n\n.platform-fonts {\n    flex-shrink: 0;\n}\n\n.font-name {\n    font-weight: bold;\n}\n\n.font-usage {\n    color: #888;\n    padding-left: 3px;\n}\n\n.title {\n    padding: 0 5px;\n    border-top: 1px solid;\n    border-bottom: 1px solid;\n    border-color: #ddd;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    height: 24px;\n    background-color: #f1f1f1;\n    display: flex;\n    align-items: center;\n}\n\n.stats-section {\n    margin: 5px 0;\n}\n\n.font-stats-item {\n    padding-left: 1em;\n}\n\n.font-stats-item .font-delimeter {\n    margin: 0 1ex 0 1ex;\n}\n\n\n/*# sourceURL=elements/platformFontsWidget.css */";Root.Runtime.cachedResources["elements/propertiesWidget.css"]="/*\n * Copyright (c) 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.properties-widget-section {\n    padding: 2px 0px 2px 5px;\n    flex: none;\n}\n\n/*# sourceURL=elements/propertiesWidget.css */";Root.Runtime.cachedResources["elements/nodeStackTraceWidget.css"]="/*\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.stack-trace {\n  font-size: 11px !important;\n  font-family: Menlo, monospace;\n}\n\n/*# sourceURL=elements/nodeStackTraceWidget.css */";Root.Runtime.cachedResources["elements/stylesSectionTree.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tree-outline {\n    padding: 0;\n}\n\n.tree-outline li.not-parsed-ok {\n    margin-left: 0;\n}\n\n.tree-outline li.filter-match {\n    background-color: rgba(255, 255, 0, 0.5);\n}\n\n:host-context(.-theme-with-dark-background) .tree-outline li.filter-match {\n    background-color: hsla(133, 100%, 30%, 0.5);\n}\n\n.tree-outline li.overloaded.filter-match {\n    background-color: rgba(255, 255, 0, 0.25);\n}\n\n:host-context(.-theme-with-dark-background) .tree-outline li.overloaded.filter-match {\n    background-color: hsla(133, 100%, 30%, 0.25);\n}\n\n.tree-outline li.not-parsed-ok .exclamation-mark {\n    display: inline-block;\n    position: relative;\n    width: 11px;\n    height: 10px;\n    margin: 0 7px 0 0;\n    top: 1px;\n    left: -36px; /* outdent to compensate for the top-level property indent */\n    -webkit-user-select: none;\n    cursor: default;\n    z-index: 1;\n}\n\n.tree-outline li {\n    margin-left: 12px;\n    padding-left: 22px;\n    white-space: normal;\n    text-overflow: ellipsis;\n    cursor: auto;\n    display: block;\n}\n\n.tree-outline li::before {\n    display: none;\n}\n\n.tree-outline li .webkit-css-property {\n    margin-left: -22px; /* outdent the first line of longhand properties (in an expanded shorthand) to compensate for the \"padding-left\" shift in .tree-outline li */\n}\n\n.tree-outline > li {\n    padding-left: 38px;\n    clear: both;\n    min-height: 14px;\n}\n\n.tree-outline > li .webkit-css-property {\n    margin-left: -38px; /* outdent the first line of the top-level properties to compensate for the \"padding-left\" shift in .tree-outline > li */\n}\n\n.tree-outline > li.child-editing {\n    padding-left: 8px;\n}\n\n.tree-outline > li.child-editing .text-prompt {\n    white-space: pre-wrap;\n}\n\n.tree-outline > li.child-editing .webkit-css-property {\n    margin-left: 0;\n}\n\n.tree-outline li.child-editing {\n    word-wrap: break-word !important;\n    white-space: normal !important;\n    padding-left: 0;\n}\n\nol:not(.tree-outline) {\n    display: none;\n    margin: 0;\n    padding-inline-start: 12px;\n    list-style: none;\n}\n\nol.expanded {\n    display: block;\n}\n\n.tree-outline li .info {\n    padding-top: 4px;\n    padding-bottom: 3px;\n}\n\n.enabled-button {\n    visibility: hidden;\n    float: left;\n    font-size: 10px;\n    margin: 0;\n    vertical-align: top;\n    position: relative;\n    z-index: 1;\n    width: 18px;\n    left: -40px; /* original -2px + (-38px) to compensate for the first line outdent */\n    top: 1px;\n    height: 13px;\n}\n\n.tree-outline li.editing .enabled-button {\n    display: none !important;\n}\n\n.overloaded:not(.has-ignorable-error),\n.inactive,\n.disabled,\n.not-parsed-ok:not(.has-ignorable-error) {\n    text-decoration: line-through;\n}\n\n.has-ignorable-error .webkit-css-property {\n    color: inherit;\n}\n\n.implicit,\n.inherited {\n    opacity: 0.5;\n}\n\n.has-ignorable-error {\n    color: gray;\n}\n\n.tree-outline li.editing {\n    margin-left: 10px;\n    text-overflow: clip;\n}\n\n.tree-outline li.editing-sub-part {\n    padding: 3px 6px 8px 18px;\n    margin: -1px -6px -8px -6px;\n    text-overflow: clip;\n}\n\n:host-context(.no-affect) .tree-outline li {\n    opacity: 0.5;\n}\n\n:host-context(.no-affect) .tree-outline li.editing {\n    opacity: 1.0;\n}\n\n:host-context(.styles-panel-hovered:not(.read-only)) .webkit-css-property:hover,\n:host-context(.styles-panel-hovered:not(.read-only)) .value:hover {\n    text-decoration: underline;\n    cursor: default;\n}\n\n.styles-name-value-separator {\n    display: inline-block;\n    width: 14px;\n    text-decoration: inherit;\n    white-space: pre;\n}\n\n.styles-clipboard-only {\n    display: inline-block;\n    width: 0;\n    opacity: 0;\n    pointer-events: none;\n    white-space: pre;\n}\n\n.tree-outline li.child-editing .styles-clipboard-only {\n    display: none;\n}\n\n/* Matched styles */\n\n:host-context(.matched-styles) .tree-outline li {\n    margin-left: 0 !important;\n}\n\n.expand-icon {\n    -webkit-user-select: none;\n    margin-left: -6px;\n    margin-right: 2px;\n    margin-bottom: -2px;\n}\n\n.tree-outline li:not(.parent) .expand-icon {\n    display: none;\n}\n\n:host-context(.matched-styles:not(.read-only):hover) .enabled-button {\n    visibility: visible;\n}\n\n:host-context(.matched-styles:not(.read-only)) .tree-outline li.disabled .enabled-button {\n    visibility: visible;\n}\n\n:host-context(.matched-styles) ol.expanded {\n    margin-left: 16px;\n}\n\n/*# sourceURL=elements/stylesSectionTree.css */";Root.Runtime.cachedResources["elements/stylesSidebarPane.css"]="/**\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.styles-section {\n    min-height: 18px;\n    white-space: nowrap;\n    -webkit-user-select: text;\n    border-bottom: 1px solid var(--divider-color);\n    position: relative;\n    overflow: hidden;\n}\n\n.styles-section > div {\n    padding: 2px 2px 4px 4px;\n}\n\n.styles-section:last-child {\n    border-bottom: none;\n}\n\n.styles-section.read-only {\n    background-color: #fafafa;\n    font-style: italic;\n}\n\n.styles-section[data-keyboard-focus=\"true\"]:focus {\n    background-color: hsl(214, 48%, 95%);\n}\n\n.styles-section.read-only[data-keyboard-focus=\"true\"]:focus {\n    background-color: hsl(215, 25%, 87%);\n}\n\n.styles-section .simple-selector.filter-match {\n    background-color: rgba(255, 255, 0, 0.5);\n}\n\n:host-context(.-theme-with-dark-background) .styles-section .simple-selector.filter-match {\n    background-color: hsla(133, 100%, 30%, 0.5);\n}\n\n.sidebar-pane-closing-brace {\n    clear: both;\n}\n\n.styles-section-title {\n    background-origin: padding;\n    background-clip: padding;\n    word-wrap: break-word;\n    white-space: normal;\n}\n\n.styles-section-title .media-list {\n    color: hsl(0, 0%, 46%);\n}\n\n.styles-section-title .media-list.media-matches .media.editable-media {\n    color: #222;\n}\n\n.styles-section-title .media:not(.editing-media),\n.styles-section-title .media:not(.editing-media) .subtitle {\n    overflow: hidden;\n}\n\n.styles-section-title .media .subtitle {\n    float: right;\n    color: hsl(0, 0%, 34%);\n}\n\n.styles-section-subtitle {\n    color: hsl(0, 0%, 44%);\n    float: right;\n    padding-left: 15px;\n    max-width: 100%;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n    height: 15px;\n    margin-bottom: -1px;\n}\n\n.sidebar-pane-open-brace,\n.sidebar-pane-closing-brace {\n    color: hsl(0, 0%, 46%);\n}\n\n.styles-section .styles-section-subtitle .devtools-link {\n    color: hsl(0, 0%, 44%);\n    text-decoration-color: hsl(0, 0%, 60%);\n}\n\n.styles-section .selector {\n    color: hsl(0, 0%, 46%);\n}\n\n.styles-section .simple-selector.selector-matches, .styles-section.keyframe-key {\n    color: #222;\n}\n\n.styles-section .devtools-link {\n    user-select: none;\n}\n\n.styles-section .style-properties {\n    margin: 0;\n    padding: 2px 4px 0 0;\n    list-style: none;\n    clear: both;\n    display: flex;\n}\n\n.styles-section.matched-styles .style-properties {\n    padding-left: 0;\n}\n\n@keyframes styles-element-state-pane-slidein {\n    from {\n        margin-top: -60px;\n    }\n    to {\n        margin-top: 0px;\n    }\n}\n\n@keyframes styles-element-state-pane-slideout {\n    from {\n        margin-top: 0px;\n    }\n    to {\n        margin-top: -60px;\n    }\n}\n\n.styles-sidebar-toolbar-pane {\n    position: relative;\n    animation-duration: 0.1s;\n    animation-direction: normal;\n}\n\n.styles-sidebar-toolbar-pane-container {\n    position: relative;\n    overflow: hidden;\n    flex-shrink: 0;\n}\n\n.styles-selector {\n    cursor: text;\n}\n\n.styles-sidebar-pane-toolbar-container {\n    flex-shrink: 0;\n    overflow: hidden;\n    position: sticky;\n    top: 0;\n    background-color: var(--toolbar-bg-color);\n    z-index: 1;\n}\n\n.styles-sidebar-pane-toolbar {\n    border-bottom: 1px solid #eee;\n    flex-shrink: 0;\n}\n\n.styles-sidebar-pane-filter-box {\n    flex: auto;\n    display: flex;\n}\n\n.styles-sidebar-pane-filter-box > input {\n    outline: none !important;\n    border: none;\n    width: 100%;\n    background: white;\n    padding-left: 4px;\n    margin: 3px;\n}\n\n.styles-sidebar-pane-filter-box > input:hover {\n    box-shadow: var(--focus-ring-inactive-shadow);\n}\n\n.styles-sidebar-pane-filter-box > input:focus,\n.styles-sidebar-pane-filter-box > input:not(:placeholder-shown) {\n    box-shadow: var(--focus-ring-active-shadow);\n}\n\n.styles-sidebar-pane-filter-box > input::placeholder {\n    color: rgba(0, 0, 0, 0.54);\n}\n\n.styles-section.styles-panel-hovered:not(.read-only) span.simple-selector:hover,\n.styles-section.styles-panel-hovered:not(.read-only) .media-text :hover{\n    text-decoration: underline;\n    cursor: default;\n}\n\n.sidebar-separator {\n    background-color: var(--toolbar-bg-color);\n    padding: 0 5px;\n    border-bottom: 1px solid var(--divider-color);\n    color: hsla(0, 0%, 32%, 1);\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    line-height: 22px;\n}\n\n.sidebar-separator > span.monospace {\n    max-width: 90px;\n    display: inline-block;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    vertical-align: middle;\n    margin-left: 2px;\n}\n\n.sidebar-pane-section-toolbar {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    visibility: hidden;\n    background-color: rgba(255, 255, 255, 0.9);\n    z-index: 0;\n}\n\n.styles-section[data-keyboard-focus=\"true\"]:focus .sidebar-pane-section-toolbar {\n    background-color: hsla(214, 67%, 95%, 0.9);\n}\n\n.styles-pane:not(.is-editing-style) .styles-section.matched-styles:not(.read-only):hover .sidebar-pane-section-toolbar {\n    visibility: visible;\n}\n\n.styles-show-all {\n    margin-left: 16px;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    max-width: -webkit-fill-available;\n}\n\n/*# sourceURL=elements/stylesSidebarPane.css */";Root.Runtime.cachedResources["event_listeners/eventListenersView.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tree-outline-disclosure li {\n    padding: 2px 0 0 5px;\n    overflow: hidden;\n    display: flex;\n    min-height: 17px;\n    align-items: baseline;\n}\n\n.tree-outline-disclosure > li {\n    border-top: 1px solid #f0f0f0;\n}\n\n.tree-outline-disclosure > li:first-of-type {\n    border-top: none;\n}\n\n.tree-outline-disclosure {\n    padding-left: 0 !important;\n    padding-right: 3px;\n}\n\n.tree-outline-disclosure li.parent::before {\n    top: 0 !important;\n}\n\n.tree-outline-disclosure .name {\n    color: rgb(136, 19, 145);\n}\n\n.tree-outline-disclosure .object-value-node {\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.event-listener-details {\n    display: flex;\n}\n\n.event-listener-tree-subtitle {\n    float: right;\n    margin-left: 5px;\n    flex-shrink: 0;\n}\n\n.event-listener-button {\n    padding: 0 3px;\n    background-color: #f2f2f2;\n    border-radius: 3px;\n    border: 1px solid #c3c3c3;\n    margin-left: 10px;\n    display: block;\n    cursor: pointer;\n    opacity: 0.8;\n    flex-shrink: 0;\n}\n\n.event-listener-button:hover {\n    background-color: #e0e0e0;\n    opacity: 1;\n}\n\n.tree-outline-disclosure li:hover .event-listener-button {\n    display: inline;\n}\n\n/*# sourceURL=event_listeners/eventListenersView.css */";Root.Runtime.cachedResources["help/releaseNote.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n}\n\n.hbox {\n    overflow-y: auto;\n    overflow-x: hidden;\n}\n\n.release-note-top-section {\n    height: 27px;\n    line-height: 27px;\n    padding: 0 15px;\n    flex: none;\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n}\n\n:host-context(.-theme-with-dark-background) .release-note-top-section {\n    color: white;\n}\n\n.release-note-container {\n    display: flex;\n    flex-direction: column;\n}\n\n.release-note-container ul {\n    display: flex;\n    padding: 10px 16px;\n    flex-direction: column;\n    flex: none;\n    margin: 4px 12px 0 2px;\n    max-width: 600px;\n}\n\n.release-note-container li {\n    display: flex;\n    flex-direction:column;\n    flex: none;\n    line-height: 24px;\n    font-size: 14px;\n}\n\n\n.release-note-container li:hover {\n    color: #039be5;\n}\n\n.release-note-title,\n.release-note-subtitle {\n    color: inherit;\n    text-decoration: none;\n}\n\n.release-note-subtitle {\n    font-size: 13px;\n    line-height: 13px;\n    padding-bottom: 8px;\n}\n\n.release-note-container li:not(:hover) .release-note-subtitle {\n    color: #999;\n}\n\n.release-note-action-container > button {\n    margin: 10px 0 20px 20px;\n    color: #757575;\n}\n\n.release-note-action-container {\n    flex: none;\n}\n\n.release-note-image {\n    flex-shrink: 2;\n}\n\nimg {\n    margin: 20px;\n    width: 260px;\n    height: 200px;\n    flex: none;\n    box-shadow: 0 2px 4px rgba(0, 0, 0, .3);\n}\n\nimg:hover {\n    box-shadow: 0 2px 4px rgba(0, 0, 0, .5);\n}\n\n/*# sourceURL=help/releaseNote.css */";Root.Runtime.cachedResources["inline_editor/bezierEditor.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    width: 270px;\n    height: 350px;\n    -webkit-user-select: none;\n    padding: 16px;\n    overflow: hidden;\n}\n\n.bezier-preset-selected > svg {\n    background-color: var(--selection-bg-color);\n}\n\n.bezier-preset {\n    width: 50px;\n    height: 50px;\n    padding: 5px;\n    margin: auto;\n    background-color: #f5f5f5;\n    border-radius: 3px;\n}\n\n.bezier-preset line.bezier-control-line {\n    stroke: #666;\n    stroke-width: 1;\n    stroke-linecap: round;\n    fill: none;\n}\n\n.bezier-preset circle.bezier-control-circle {\n    fill: #666;\n}\n\n.bezier-preset path.bezier-path {\n    stroke: black;\n    stroke-width: 2;\n    stroke-linecap: round;\n    fill: none;\n}\n\n.bezier-preset-selected path.bezier-path, .bezier-preset-selected line.bezier-control-line {\n    stroke: white;\n}\n\n.bezier-preset-selected circle.bezier-control-circle {\n    fill: white;\n}\n\n.bezier-curve line.linear-line {\n    stroke: rgb(238, 238, 238);\n    stroke-width: 2;\n    stroke-linecap: round;\n    fill: none;\n}\n\n:host-context(.-theme-with-dark-background) .bezier-curve line.linear-line {\n    stroke: rgb(138, 138, 138);\n}\n\n.bezier-curve line.bezier-control-line {\n    stroke: #9C27B0;\n    stroke-width: 2;\n    stroke-linecap: round;\n    fill: none;\n    opacity: 0.6;\n}\n\n.bezier-curve circle.bezier-control-circle {\n    fill: #9C27B0;\n    cursor: pointer;\n}\n\n.bezier-curve path.bezier-path {\n    stroke: black;\n    stroke-width: 3;\n    stroke-linecap: round;\n    fill: none;\n}\n\n.bezier-preview-container {\n    position: relative;\n    background-color: white;\n    overflow: hidden;\n    border-radius: 20px;\n    width: 200%;\n    height: 20px;\n    z-index: 2;\n    flex-shrink: 0;\n    opacity: 0;\n}\n\n.bezier-preview-animation {\n    background-color: #9C27B0;\n    width: 20px;\n    height: 20px;\n    border-radius: 20px;\n    position: absolute;\n}\n\n.bezier-preview-onion {\n    margin-top: -20px;\n    position: relative;\n    z-index: 1;\n}\n\n.bezier-preview-onion > .bezier-preview-animation {\n    opacity: 0.1;\n}\n\nsvg.bezier-preset-modify {\n    background-color: #f5f5f5;\n    border-radius: 35px;\n    display: inline-block;\n    visibility: hidden;\n    transition: transform 100ms cubic-bezier(0.4, 0, 0.2, 1);\n    cursor: pointer;\n    position: absolute;\n}\n\nsvg.bezier-preset-modify:hover, .bezier-preset:hover {\n    background-color: #999;\n}\n\n.bezier-preset-selected .bezier-preset:hover {\n    background-color: var(--selection-bg-color);\n}\n\n.bezier-preset-modify path {\n    stroke-width: 2;\n    stroke: black;\n    fill: none;\n}\n\n.bezier-preset-selected .bezier-preset-modify {\n    opacity: 1;\n}\n\n.bezier-preset-category {\n    width: 50px;\n    margin: 20px 0;\n    cursor: pointer;\n    transition: transform 100ms cubic-bezier(0.4, 0, 0.2, 1);\n}\n\nspan.bezier-display-value {\n    width: 100%;\n    -webkit-user-select: text;\n    display: block;\n    text-align: center;\n    line-height: 20px;\n    height: 20px;\n    cursor: text;\n    white-space: nowrap !important;\n}\n\n.bezier-container {\n    display: flex;\n    margin-top: 38px;\n}\n\nsvg.bezier-curve {\n    margin-left: 32px;\n    margin-top: -8px;\n}\n\nsvg.bezier-preset-modify.bezier-preset-plus {\n    right: 0;\n}\n\n.bezier-header {\n    margin-top: 16px;\n}\n\nsvg.bezier-preset-modify:active {\n    transform: scale(1.1);\n    background-color: var(--selection-bg-color);\n}\n\n.bezier-preset-category:active {\n    transform: scale(1.05);\n}\n\n.bezier-header-active > svg.bezier-preset-modify {\n    visibility: visible;\n}\n\n.bezier-preset-modify:active path {\n    stroke: white;\n}\n\n/*# sourceURL=inline_editor/bezierEditor.css */";Root.Runtime.cachedResources["inline_editor/colorSwatch.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    white-space: nowrap;\n}\n\n.color-swatch {\n    position: relative;\n    margin-left: 1px;\n    margin-right: 2px;\n    width: 10px;\n    height: 10px;\n    top: 1px;\n    display: inline-block;\n    -webkit-user-select: none;\n    background-image: url(Images/checker.png);\n    line-height: 10px;\n}\n\n.color-swatch-inner {\n    width: 100%;\n    height: 100%;\n    display: inline-block;\n    border: 1px solid rgba(128, 128, 128, 0.6);\n    cursor: default;\n}\n\n.color-swatch-inner:hover {\n    border: 1px solid rgba(64, 64, 64, 0.8);\n}\n\n/*# sourceURL=inline_editor/colorSwatch.css */";Root.Runtime.cachedResources["inline_editor/bezierSwatch.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    white-space: nowrap;\n}\n\n.bezier-swatch-icon {\n    position: relative;\n    margin-left: 1px;\n    margin-right: 2px;\n    top: 1px;\n    -webkit-user-select: none;\n    line-height: 10px;\n    background-color: #9C27B0;\n    cursor: default;\n}\n\n.bezier-swatch-icon:hover {\n    background-color: #800080;\n}\n\n/*# sourceURL=inline_editor/bezierSwatch.css */";Root.Runtime.cachedResources["inline_editor/cssShadowSwatch.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    white-space: nowrap;\n}\n\n.shadow-swatch-icon {\n    position: relative;\n    margin-left: 1px;\n    margin-right: 2px;\n    top: 1px;\n    -webkit-user-select: none;\n    line-height: 10px;\n    background-color: #9C27B0;\n}\n\n.shadow-swatch-icon:hover {\n    background-color: #800080;\n}\n\n/*# sourceURL=inline_editor/cssShadowSwatch.css */";Root.Runtime.cachedResources["inline_editor/cssShadowEditor.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    -webkit-user-select: none;\n    padding: 4px 12px 12px 12px;\n}\n\n.shadow-editor-field:last-of-type {\n    margin-bottom: 8px;\n}\n\n.shadow-editor-field {\n    height: 24px;\n    margin-top: 8px;\n    font-size: 12px;\n    flex-shrink: 0;\n}\n\n.shadow-editor-flex-field {\n    display: flex;\n    align-items: center;\n    flex-direction: row;\n}\n\n.shadow-editor-field.shadow-editor-blur-field {\n    margin-top: 40px;\n}\n\n.shadow-editor-2D-slider {\n    position: absolute;\n    height: 88px;\n    width: 88px;\n    border: 1px solid rgba(0, 0, 0, 0.14);\n    border-radius: 2px;\n}\n\n.shadow-editor-label {\n    display: inline-block;\n    width: 52px;\n    height: 24px;\n    line-height: 24px;\n    margin-right: 8px;\n    text-align: right;\n}\n\n.shadow-editor-button-left, .shadow-editor-button-right {\n    width: 74px;\n    height: 24px;\n    padding: 3px 7px;\n    line-height: 16px;\n    border: 1px solid rgba(0, 0, 0, 0.14);\n    background-color: #ffffff;\n    text-align: center;\n    font-weight: 500;\n}\n\n.shadow-editor-button-left {\n    border-radius: 2px 0 0 2px;\n}\n\n.shadow-editor-button-right {\n    border-radius: 0 2px 2px 0;\n    border-left-width: 0;\n}\n\n.shadow-editor-button-left:hover, .shadow-editor-button-right:hover {\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n.shadow-editor-button-left:focus, .shadow-editor-button-right:focus {\n    background-color: #eeeeee;\n}\n\n.shadow-editor-button-left.enabled, .shadow-editor-button-right.enabled, -theme-preserve {\n    background-color: #4285F4;\n    color: #ffffff;\n}\n\n.shadow-editor-button-left.enabled:focus, .shadow-editor-button-right.enabled:focus, -theme-preserve  {\n    background-color: #3B78E7;\n}\n\n.shadow-editor-text-input {\n    width: 52px;\n    margin-right: 8px;\n    text-align: right;\n    box-shadow: var(--focus-ring-inactive-shadow);\n}\n\n/*# sourceURL=inline_editor/cssShadowEditor.css */";Root.Runtime.cachedResources["inline_editor/swatchPopover.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.widget {\n    display: flex;\n    background: white;\n    box-shadow: var(--drop-shadow);\n    border-radius: 2px;\n    overflow: auto;\n    -webkit-user-select: text;\n    line-height: 11px;\n}\n\n/*# sourceURL=inline_editor/swatchPopover.css */";Root.Runtime.cachedResources["layer_viewer/layers3DView.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.layers-3d-view {\n    overflow: hidden;\n    -webkit-user-select: none;\n}\n\n.toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\ncanvas {\n    flex: 1 1;\n}\n\n.layers-3d-view > canvas[data-keyboard-focus=\"true\"]:focus {\n  outline: auto 5px -webkit-focus-ring-color;\n}\n\n/*# sourceURL=layer_viewer/layers3DView.css */";Root.Runtime.cachedResources["layer_viewer/paintProfiler.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.paint-profiler-overview {\n    background-color: #eee;\n}\n\n.paint-profiler-canvas-container {\n    flex: auto;\n    position: relative;\n}\n\n.paint-profiler-pie-chart {\n    width: 60px !important;\n    height: 60px !important;\n    padding: 2px;\n    overflow: hidden;\n    font-size: 10px;\n}\n\n.paint-profiler-canvas-container canvas {\n    z-index: 200;\n    background-color: white;\n    opacity: 0.95;\n    height: 100%;\n    width: 100%;\n}\n\n.paint-profiler-canvas-container .overview-grid-window-resizer {\n    z-index: 2000;\n}\n\n/*# sourceURL=layer_viewer/paintProfiler.css */";Root.Runtime.cachedResources["layer_viewer/layerDetailsView.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\ntable td {\n    padding-left: 8px;\n}\n\ntable td:first-child {\n    font-weight: bold;\n}\n\n.scroll-rect.active {\n    background-color: rgba(100, 100, 100, 0.2);\n}\n\nul {\n    list-style: none;\n    padding-inline-start: 0;\n    margin-block-start: 0;\n    margin-block-end: 0;\n}\n\n.devtools-link.link-margin {\n    margin: 8px;\n    display: inline-block;\n}\n\n/*# sourceURL=layer_viewer/layerDetailsView.css */";Media.EventDisplayColumnConfig;Media.Event;Media.EventNode=class extends DataGrid.SortableDataGridNode{constructor(event){super(event,false);}
createCell(columnId){const cell=this.createTD(columnId);const cellData=(this.data[columnId]);cell.createTextChild(cellData);return cell;}
nodeSelfHeight(){return 20;}};Media.EventDisplayTable=class extends UI.VBox{constructor(headerDescriptors,uniqueColumn,defaultSortingColumnId){super();this.registerRequiredCSS('media/eventDisplayTable.css');this.contentElement.classList.add('event-display-table-contents-table-container');this._uniqueColumnEntryKey=uniqueColumn;this._uniqueColumnMap=new Map();this._dataGrid=this._createDataGrid(headerDescriptors,defaultSortingColumnId);this._dataGrid.setStriped(true);this._dataGrid.asWidget().show(this.contentElement);}
_createDataGrid(headers,default_sort){const gridColumnDescs=[];const sortFunctionMap=new Map();for(const headerDesc of headers){gridColumnDescs.push(Media.EventDisplayTable._convertToGridDescriptor(headerDesc));if(headerDesc.sortable){sortFunctionMap.set(headerDesc.id,headerDesc.sortingFunction);if(!default_sort){default_sort=headerDesc.id;}}}
const datagrid=new DataGrid.SortableDataGrid(gridColumnDescs);if(default_sort){datagrid.sortNodes(sortFunctionMap.get(default_sort),!datagrid.isSortOrderAscending());function sortGrid(){const comparator=sortFunctionMap.get(datagrid.sortColumnId());datagrid.sortNodes(comparator,!datagrid.isSortOrderAscending());}
datagrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,sortGrid);}
datagrid.asWidget().contentElement.classList.add('no-border-top-datagrid');return datagrid;}
addEvents(events){for(const event of events){this.addEvent(event);}}
addEvent(event){if(this._uniqueColumnEntryKey){const eventValue=event[this._uniqueColumnEntryKey];if(this._uniqueColumnMap.has(eventValue)){this._uniqueColumnMap.get(eventValue).data=event;return;}}
const node=new Media.EventNode(event);this._dataGrid.rootNode().insertChildOrdered(node);if(this._uniqueColumnEntryKey){this._uniqueColumnMap.set(event[this._uniqueColumnEntryKey],node);}}
static _convertToGridDescriptor(columnConfig){return({id:columnConfig.id,title:columnConfig.title,sortable:columnConfig.sortable,weight:columnConfig.weight||0,sort:DataGrid.DataGrid.Order.Ascending});}};;Media.MainView=class extends UI.PanelWithSidebar{constructor(){super('Media');this.registerRequiredCSS('media/mediaView.css');this._detailPanels=new Map();this._deletedPlayers=new Set();this._sidebar=new Media.PlayerListView(this);this._sidebar.show(this.panelSidebarElement());SDK.targetManager.observeModels(Media.MediaModel,this);}
renderChanges(playerID,changes,changeType){if(this._deletedPlayers.has(playerID)){return;}
if(!this._detailPanels.has(playerID)){return;}
this._sidebar.renderChanges(playerID,changes,changeType);this._detailPanels.get(playerID).renderChanges(playerID,changes,changeType);}
renderMainPanel(playerID){if(!this._detailPanels.has(playerID)){return;}
this.splitWidget().mainWidget().detachChildWidgets();this._detailPanels.get(playerID).show(this.mainElement());}
_onPlayerCreated(playerID){this._sidebar.addMediaElementItem(playerID);this._detailPanels.set(playerID,new Media.PlayerDetailView());}
wasShown(){super.wasShown();for(const model of SDK.targetManager.models(Media.MediaModel)){this._addEventListeners(model);}}
willHide(){for(const model of SDK.targetManager.models(Media.MediaModel)){this._removeEventListeners(model);}}
modelAdded(mediaModel){if(this.isShowing()){this._addEventListeners(mediaModel);}}
modelRemoved(mediaModel){this._removeEventListeners(mediaModel);}
_addEventListeners(mediaModel){mediaModel.ensureEnabled();mediaModel.addEventListener(Media.MediaModel.Events.PlayerPropertiesChanged,this._propertiesChanged,this);mediaModel.addEventListener(Media.MediaModel.Events.PlayerEventsAdded,this._eventsAdded,this);mediaModel.addEventListener(Media.MediaModel.Events.PlayersCreated,this._playersCreated,this);}
_removeEventListeners(mediaModel){mediaModel.removeEventListener(Media.MediaModel.Events.PlayerPropertiesChanged,this._propertiesChanged,this);mediaModel.removeEventListener(Media.MediaModel.Events.PlayerEventsAdded,this._eventsAdded,this);mediaModel.removeEventListener(Media.MediaModel.Events.PlayersCreated,this._playersCreated,this);}
_propertiesChanged(event){this.renderChanges(event.data.playerId,event.data.properties,Media.MediaModel.MediaChangeTypeKeys.Property);}
_eventsAdded(event){this.renderChanges(event.data.playerId,event.data.events,Media.MediaModel.MediaChangeTypeKeys.Event);}
_playersCreated(event){const playerlist=(event.data);for(const playerID of playerlist){this._onPlayerCreated(playerID);}}};;Media.MediaPlayerPropertiesRenderer=class extends Media.EventDisplayTable{constructor(){super([{id:'name',title:'Property Name',sortable:true,weight:2,sortingFunction:DataGrid.SortableDataGrid.StringComparator.bind(null,'name')},{id:'value',title:'Value',sortable:false,weight:7}],'name');}
renderChanges(playerID,changes,change_type){this.addEvents(changes);}};Media.MediaPlayerEventTableRenderer=class extends Media.EventDisplayTable{constructor(){super([{id:'timestamp',title:'Timestamp',weight:1,sortable:true,sortingFunction:DataGrid.SortableDataGrid.NumericComparator.bind(null,'timestamp')},{id:'name',title:'Event Name',weight:2,sortable:false},{id:'value',title:'Value',weight:7,sortable:false}]);this._firstEventTime=0;}
renderChanges(playerID,changes,change_type){if(this._firstEventTime===0&&changes.length>0){this._firstEventTime=changes[0].timestamp;}
this.addEvents(changes.map(this._subtractFirstEventTime.bind(this,this._firstEventTime)));}
_subtractFirstEventTime(first_event_time,event){event.timestamp=(event.timestamp-first_event_time).toFixed(3);return event;}};;Media.PlayerDetailView=class extends UI.TabbedPane{constructor(){super();const propertyTable=new Media.MediaPlayerPropertiesRenderer();const eventTable=new Media.MediaPlayerEventTableRenderer();this._panels=new Map([[Media.MediaModel.MediaChangeTypeKeys.Property,[propertyTable]],[Media.MediaModel.MediaChangeTypeKeys.Event,[eventTable]]]);this.appendTab(Media.PlayerDetailView.Tabs.Properties,Common.UIString('Properties'),propertyTable,Common.UIString('Player properties'));this.appendTab(Media.PlayerDetailView.Tabs.Events,Common.UIString('Events'),eventTable,Common.UIString('Player events'));}
renderChanges(playerID,changes,changeType){for(const panel of this._panels.get(changeType)){panel.renderChanges(playerID,changes,changeType);}}};Media.PlayerDetailView.Tabs={Events:'events',Properties:'properties',};;Media.PlayerStatus;Media.PlayerStatusMapElement;Media.PlayerEntryTreeElement=class extends UI.TreeElement{constructor(playerStatus,displayContainer){super(playerStatus.playerTitle,false);this.titleFromUrl=true;this._playerStatus=playerStatus;this._displayContainer=displayContainer;this.setLeadingIcons([UI.Icon.create('smallicon-videoplayer-playing','media-player')]);}
onselect(selectedByUser){this._displayContainer.renderMainPanel(this._playerStatus.playerID);return true;}};Media.PlayerListView=class extends UI.VBox{constructor(mainContainer){super(true);this._playerStatuses=new Map();this._mainContainer=mainContainer;this._sidebarTree=new UI.TreeOutlineInShadow();this.contentElement.appendChild(this._sidebarTree.element);this._sidebarTree.registerRequiredCSS('media/playerListView.css');this._audioDevices=this._addListSection(Common.UIString('Audio I/O'));this._videoDevices=this._addListSection(Common.UIString('Video Capture Devices'));this._playerList=this._addListSection(Common.UIString('Players'));}
_addListSection(title){const treeElement=new UI.TreeElement(title,true);treeElement.listItemElement.classList.add('storage-group-list-item');treeElement.setCollapsible(false);treeElement.selectable=false;this._sidebarTree.appendChild(treeElement);return treeElement;}
addMediaElementItem(playerID){const playerStatus={playerTitle:playerID,playerID:playerID,exists:true,playing:false,titleEdited:false};const playerElement=new Media.PlayerEntryTreeElement(playerStatus,this._mainContainer);this._playerStatuses.set(playerID,playerElement);this._playerList.appendChild(playerElement);}
setMediaElementPlayerTitle(playerID,newTitle,isTitleExtractedFromUrl){if(this._playerStatuses.has(playerID)){const sidebarEntry=this._playerStatuses.get(playerID);if(!isTitleExtractedFromUrl||sidebarEntry.titleFromUrl){sidebarEntry.title=newTitle;sidebarEntry.titleFromUrl=isTitleExtractedFromUrl;}}}
setMediaElementPlayerIcon(playerID,iconName){if(this._playerStatuses.has(playerID)){const sidebarEntry=this._playerStatuses.get(playerID);sidebarEntry.setLeadingIcons([UI.Icon.create('smallicon-videoplayer-'+iconName,'media-player')]);}}
renderChanges(playerID,changes,changeType){if(changeType===Media.MediaModel.MediaChangeTypeKeys.Property){for(const change of changes){if(change.name==='frame_title'&&change.value){this.setMediaElementPlayerTitle(playerID,change.value,false);}
if(change.name==='frame_url'){const url_path_component=change.value.substring(change.value.lastIndexOf('/')+1);this.setMediaElementPlayerTitle(playerID,url_path_component,true);}}}
if(changeType===Media.MediaModel.MediaChangeTypeKeys.Event){let change_to=null;for(const change of changes){if(change.name==='Event'){if(change.value==='PLAY'){change_to='playing';}else if(change.value==='PAUSE'){change_to='paused';}else if(change.value==='WEBMEDIAPLAYER_DESTROYED'){change_to='destroyed';}}}
if(change_to){this.setMediaElementPlayerIcon(playerID,change_to);}}}};;Media.MediaModel=class extends SDK.SDKModel{constructor(target){super(target);this._enabled=false;this._agent=target.mediaAgent();target.registerMediaDispatcher(this);}
resumeModel(){if(!this._enabled){return Promise.resolve();}
return this._agent.enable();}
ensureEnabled(){this._agent.enable();this._enabled=true;}
playerPropertiesChanged(playerId,properties){this.dispatchEventToListeners(Media.MediaModel.Events.PlayerPropertiesChanged,{playerId:playerId,properties:properties});}
playerEventsAdded(playerId,events){this.dispatchEventToListeners(Media.MediaModel.Events.PlayerEventsAdded,{playerId:playerId,events:events});}
playersCreated(playerIds){this.dispatchEventToListeners(Media.MediaModel.Events.PlayersCreated,playerIds);}};SDK.SDKModel.register(Media.MediaModel,SDK.Target.Capability.DOM,false);Media.MediaModel.Events={PlayerPropertiesChanged:Symbol('PlayerPropertiesChanged'),PlayerEventsAdded:Symbol('PlayerEventsAdded'),PlayersCreated:Symbol('PlayersCreated')};Media.MediaModel.MediaChangeTypeKeys={Event:'Events',Property:'Properties'};;Root.Runtime.cachedResources["media/eventDisplayTable.css"]="/*\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.no-border-top-datagrid>.data-grid {\n  /* make sure there is no top border, it ruins the menu view */\n  border-top: 0px;\n}\n\n.event-display-table-contents-table-container>.widget>.data-grid {\n  height: 100%;\n}\n/*# sourceURL=media/eventDisplayTable.css */";Root.Runtime.cachedResources["media/mediaView.css"]="/*\n * Copyright (c) 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n\n.playerlist-sidebar {\n  display: flex;\n  flex-direction: column;\n  align-items: stretch;\n}\n\n.playerlist-sidebar-header {\n  font-size: 22px;\n  padding: 8px 20px;\n  border-bottom:1px solid var(--divider-color);\n}\n\n.playerlist-entry-title>pre {\n  margin: 0px;\n}\n\n.playerlist-entry-title {\n  float: left;\n}\n/*# sourceURL=media/mediaView.css */";Root.Runtime.cachedResources["media/playerListView.css"]="/*\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tree-outline {\n    padding-left: 0;\n    color: rgb(90, 90, 90);\n}\n\nli.storage-group-list-item {\n    padding: 10px 8px 6px 8px;\n}\n\nli.storage-group-list-item:not(:first-child) {\n    border-top: 1px solid rgb(230, 230, 230);\n}\n\nli.storage-group-list-item::before {\n    display: none;\n}\n/*# sourceURL=media/playerListView.css */";Network.BinaryResourceView=class extends UI.VBox{constructor(base64content,contentUrl,resourceType){super();this.registerRequiredCSS('network/binaryResourceView.css');this._empty=!base64content.length;if(this._empty){new UI.EmptyWidget('No data present in selected item').show(this.element);return;}
this._binaryResourceViewFactory=new SourceFrame.BinaryResourceViewFactory(base64content,contentUrl,resourceType);this._toolbar=new UI.Toolbar('binary-view-toolbar',this.element);this._binaryViewObjects=[new Network.BinaryResourceView.BinaryViewObject('base64',ls`Base64`,ls`Copied as Base64`,this._binaryResourceViewFactory.createBase64View.bind(this._binaryResourceViewFactory),this._binaryResourceViewFactory.base64.bind(this._binaryResourceViewFactory)),new Network.BinaryResourceView.BinaryViewObject('hex',ls`Hex Viewer`,ls`Copied as Hex`,this._binaryResourceViewFactory.createHexView.bind(this._binaryResourceViewFactory),this._binaryResourceViewFactory.hex.bind(this._binaryResourceViewFactory)),new Network.BinaryResourceView.BinaryViewObject('utf8',ls`UTF-8`,ls`Copied as UTF-8`,this._binaryResourceViewFactory.createUtf8View.bind(this._binaryResourceViewFactory),this._binaryResourceViewFactory.utf8.bind(this._binaryResourceViewFactory)),];this._binaryViewTypeSetting=Common.settings.createSetting('binaryViewType','hex');this._binaryViewTypeCombobox=new UI.ToolbarComboBox(this._binaryViewTypeChanged.bind(this),ls`Binary view type`);for(const viewObject of this._binaryViewObjects){this._binaryViewTypeCombobox.addOption(this._binaryViewTypeCombobox.createOption(viewObject.label,viewObject.type));}
this._toolbar.appendToolbarItem(this._binaryViewTypeCombobox);const copyButton=new UI.ToolbarButton(ls`Copy to clipboard`,'largeicon-copy');copyButton.addEventListener(UI.ToolbarButton.Events.Click,this._copySelectedViewToClipboard.bind(this),this);this._toolbar.appendToolbarItem(copyButton);this._copiedText=new UI.ToolbarText();this._copiedText.element.classList.add('binary-view-copied-text');this._toolbar.element.appendChild(this._copiedText.element);this._addFadeoutSettimeoutId=null;this._lastView=null;this._updateView();}
_getCurrentViewObject(){const filter=obj=>obj.type===this._binaryViewTypeSetting.get();const binaryViewObject=this._binaryViewObjects.find(filter);console.assert(binaryViewObject,`No binary view found for binary view type found in setting 'binaryViewType': ${
            this._binaryViewTypeSetting.get()}`);return binaryViewObject||null;}
async _copySelectedViewToClipboard(){const viewObject=this._getCurrentViewObject();Host.InspectorFrontendHost.copyText((await viewObject.content()).content);this._copiedText.setText(viewObject.copiedMessage);this._copiedText.element.classList.remove('fadeout');function addFadeoutClass(){this._copiedText.element.classList.add('fadeout');}
if(this._addFadeoutSettimeoutId){clearTimeout(this._addFadeoutSettimeoutId);this._addFadeoutSettimeoutId=null;}
this._addFadeoutSettimeoutId=setTimeout(addFadeoutClass.bind(this),2000);}
wasShown(){if(!this._empty){this._updateView();}}
_updateView(){const newViewObject=this._getCurrentViewObject();if(!newViewObject){return;}
const newView=newViewObject.getView();if(newView===this._lastView){return;}
if(this._lastView){this._lastView.detach();}
this._lastView=newView;newView.show(this.element,this._toolbar.element);this._binaryViewTypeCombobox.selectElement().value=this._binaryViewTypeSetting.get();}
_binaryViewTypeChanged(){const newViewType=this._binaryViewTypeCombobox.selectedOption().value;if(this._binaryViewTypeSetting.get()===newViewType){return;}
this._binaryViewTypeSetting.set(newViewType);this._updateView();}
addCopyToContextMenu(contextMenu,submenuItemText){if(this._empty){return;}
const copyMenu=contextMenu.clipboardSection().appendSubMenuItem(submenuItemText);const footerSection=copyMenu.footerSection();footerSection.appendItem(ls`Copy as Base64`,async()=>{const content=await this._binaryResourceViewFactory.base64();Host.InspectorFrontendHost.copyText(content.content);});footerSection.appendItem(ls`Copy as Hex`,async()=>{const content=await this._binaryResourceViewFactory.hex();Host.InspectorFrontendHost.copyText(content.content);});footerSection.appendItem(ls`Copy as UTF-8`,async()=>{const content=await this._binaryResourceViewFactory.utf8();Host.InspectorFrontendHost.copyText(content.content);});}};Network.BinaryResourceView.BinaryViewObject=class{constructor(type,label,copiedMessage,createViewFn,deferredContent){this.type=type;this.label=label;this.copiedMessage=copiedMessage;this.content=deferredContent;this._createViewFn=createViewFn;this._view=null;}
getView(){if(!this._view){this._view=this._createViewFn();}
return this._view;}};;Network.BlockedURLsPane=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('network/blockedURLsPane.css');Network.BlockedURLsPane._instance=this;this._manager=SDK.multitargetNetworkManager;this._manager.addEventListener(SDK.MultitargetNetworkManager.Events.BlockedPatternsChanged,this._update,this);this._toolbar=new UI.Toolbar('',this.contentElement);this._enabledCheckbox=new UI.ToolbarCheckbox(Common.UIString('Enable request blocking'),undefined,this._toggleEnabled.bind(this));this._toolbar.appendToolbarItem(this._enabledCheckbox);this._toolbar.appendSeparator();const addButton=new UI.ToolbarButton(Common.UIString('Add pattern'),'largeicon-add');addButton.addEventListener(UI.ToolbarButton.Events.Click,this._addButtonClicked,this);this._toolbar.appendToolbarItem(addButton);const clearButton=new UI.ToolbarButton(Common.UIString('Remove all patterns'),'largeicon-clear');clearButton.addEventListener(UI.ToolbarButton.Events.Click,this._removeAll,this);this._toolbar.appendToolbarItem(clearButton);this._list=new UI.ListWidget(this);this._list.element.classList.add('blocked-urls');this._list.registerRequiredCSS('network/blockedURLsPane.css');this._list.setEmptyPlaceholder(this._createEmptyPlaceholder());this._list.show(this.contentElement);this._editor=null;this._blockedCountForUrl=new Map();SDK.targetManager.addModelListener(SDK.NetworkManager,SDK.NetworkManager.Events.RequestFinished,this._onRequestFinished,this);this._updateThrottler=new Common.Throttler(200);this._update();}
_createEmptyPlaceholder(){const element=this.contentElement.createChild('div','no-blocked-urls');const addButton=UI.createTextButton(ls`Add pattern`,this._addButtonClicked.bind(this),'add-button');UI.ARIAUtils.setAccessibleName(addButton,ls`Add request blocking pattern`);element.appendChild(UI.formatLocalized('Requests are not blocked. %s',[addButton]));return element;}
static reset(){if(Network.BlockedURLsPane._instance){Network.BlockedURLsPane._instance.reset();}}
_addButtonClicked(){this._manager.setBlockingEnabled(true);this._list.addNewItem(0,{url:'',enabled:true});}
renderItem(pattern,editable){const count=this._blockedRequestsCount(pattern.url);const element=createElementWithClass('div','blocked-url');const checkbox=element.createChild('input','blocked-url-checkbox');checkbox.type='checkbox';checkbox.checked=pattern.enabled;checkbox.disabled=!this._manager.blockingEnabled();element.createChild('div','blocked-url-label').textContent=pattern.url;element.createChild('div','blocked-url-count').textContent=Common.UIString('%d blocked',count);element.addEventListener('click',event=>this._togglePattern(pattern,event),false);checkbox.addEventListener('click',event=>this._togglePattern(pattern,event),false);return element;}
_togglePattern(pattern,event){event.consume(true);const patterns=this._manager.blockedPatterns();patterns.splice(patterns.indexOf(pattern),1,{enabled:!pattern.enabled,url:pattern.url});this._manager.setBlockedPatterns(patterns);}
_toggleEnabled(){this._manager.setBlockingEnabled(!this._manager.blockingEnabled());this._update();}
removeItemRequested(pattern,index){const patterns=this._manager.blockedPatterns();patterns.splice(index,1);this._manager.setBlockedPatterns(patterns);}
beginEdit(pattern){this._editor=this._createEditor();this._editor.control('url').value=pattern.url;return this._editor;}
commitEdit(item,editor,isNew){const url=editor.control('url').value;const patterns=this._manager.blockedPatterns();if(isNew){patterns.push({enabled:true,url:url});}else{patterns.splice(patterns.indexOf(item),1,{enabled:true,url:url});}
this._manager.setBlockedPatterns(patterns);}
_createEditor(){if(this._editor){return this._editor;}
const editor=new UI.ListWidget.Editor();const content=editor.contentElement();const titles=content.createChild('div','blocked-url-edit-row');titles.createChild('div').textContent=Common.UIString('Text pattern to block matching requests; use * for wildcard');const fields=content.createChild('div','blocked-url-edit-row');const validator=(item,index,input)=>{const valid=!!input.value&&!this._manager.blockedPatterns().find(pattern=>pattern.url===input.value);return{valid};};const urlInput=editor.createInput('url','text','',validator);fields.createChild('div','blocked-url-edit-value').appendChild(urlInput);return editor;}
_removeAll(){this._manager.setBlockedPatterns([]);}
_update(){const enabled=this._manager.blockingEnabled();this._list.element.classList.toggle('blocking-disabled',!enabled&&!!this._manager.blockedPatterns().length);this._enabledCheckbox.setChecked(enabled);this._list.clear();for(const pattern of this._manager.blockedPatterns()){this._list.appendItem(pattern,true);}
return Promise.resolve();}
_blockedRequestsCount(url){if(!url){return 0;}
let result=0;for(const blockedUrl of this._blockedCountForUrl.keys()){if(this._matches(url,blockedUrl)){result+=this._blockedCountForUrl.get(blockedUrl);}}
return result;}
_matches(pattern,url){let pos=0;const parts=pattern.split('*');for(let index=0;index<parts.length;index++){const part=parts[index];if(!part.length){continue;}
pos=url.indexOf(part,pos);if(pos===-1){return false;}
pos+=part.length;}
return true;}
reset(){this._blockedCountForUrl.clear();this._updateThrottler.schedule(this._update.bind(this));}
_onRequestFinished(event){const request=(event.data);if(request.wasBlocked()){const count=this._blockedCountForUrl.get(request.url())||0;this._blockedCountForUrl.set(request.url(),count+1);this._updateThrottler.schedule(this._update.bind(this));}}};Network.BlockedURLsPane._instance=null;;Network.EventSourceMessagesView=class extends UI.VBox{constructor(request){super();this.registerRequiredCSS('network/eventSourceMessagesView.css');this.element.classList.add('event-source-messages-view');this._request=request;const columns=([{id:'id',title:Common.UIString('Id'),sortable:true,weight:8},{id:'type',title:Common.UIString('Type'),sortable:true,weight:8},{id:'data',title:Common.UIString('Data'),sortable:false,weight:88},{id:'time',title:Common.UIString('Time'),sortable:true,weight:8}]);this._dataGrid=new DataGrid.SortableDataGrid(columns);this._dataGrid.setStriped(true);this._dataGrid.setStickToBottom(true);this._dataGrid.markColumnAsSortedBy('time',DataGrid.DataGrid.Order.Ascending);this._sortItems();this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortItems,this);this._dataGrid.setName('EventSourceMessagesView');this._dataGrid.asWidget().show(this.element);}
wasShown(){this._dataGrid.rootNode().removeChildren();const messages=this._request.eventSourceMessages();for(let i=0;i<messages.length;++i){this._dataGrid.insertChild(new Network.EventSourceMessageNode(messages[i]));}
this._request.addEventListener(SDK.NetworkRequest.Events.EventSourceMessageAdded,this._messageAdded,this);}
willHide(){this._request.removeEventListener(SDK.NetworkRequest.Events.EventSourceMessageAdded,this._messageAdded,this);}
_messageAdded(event){const message=(event.data);this._dataGrid.insertChild(new Network.EventSourceMessageNode(message));}
_sortItems(){const sortColumnId=this._dataGrid.sortColumnId();if(!sortColumnId){return;}
const comparator=Network.EventSourceMessageNode.Comparators[sortColumnId];if(!comparator){return;}
this._dataGrid.sortNodes(comparator,!this._dataGrid.isSortOrderAscending());}};Network.EventSourceMessageNode=class extends DataGrid.SortableDataGridNode{constructor(message){const time=new Date(message.time*1000);const timeText=('0'+time.getHours()).substr(-2)+':'+('0'+time.getMinutes()).substr(-2)+':'+
('0'+time.getSeconds()).substr(-2)+'.'+('00'+time.getMilliseconds()).substr(-3);const timeNode=createElement('div');timeNode.createTextChild(timeText);timeNode.title=time.toLocaleString();super({id:message.eventId,type:message.eventName,data:message.data,time:timeNode});this._message=message;}};Network.EventSourceMessageNodeComparator=function(field,a,b){const aValue=a._message[field];const bValue=b._message[field];return aValue<bValue?-1:aValue>bValue?1:0;};Network.EventSourceMessageNode.Comparators={'id':Network.EventSourceMessageNodeComparator.bind(null,'eventId'),'type':Network.EventSourceMessageNodeComparator.bind(null,'eventName'),'time':Network.EventSourceMessageNodeComparator.bind(null,'time')};;Network.HARWriter=class{static async write(stream,requests,progress){const compositeProgress=new Common.CompositeProgress(progress);const content=await Network.HARWriter._harStringForRequests(requests,compositeProgress);if(progress.isCanceled()){return Promise.resolve();}
return Network.HARWriter._writeToStream(stream,compositeProgress,content);}
static async _harStringForRequests(requests,compositeProgress){const progress=compositeProgress.createSubProgress();progress.setTitle(Common.UIString('Collecting content\u2026'));progress.setTotalWork(requests.length);const harLog=await SDK.HARLog.build(requests);const promises=[];for(let i=0;i<requests.length;i++){const promise=requests[i].contentData();promises.push(promise.then(contentLoaded.bind(null,harLog.entries[i])));}
await Promise.all(promises);progress.done();if(progress.isCanceled()){return'';}
return JSON.stringify({log:harLog},null,Network.HARWriter._jsonIndent);function isValidCharacter(code_point){return code_point<0xD800||(code_point>=0xE000&&code_point<0xFDD0)||(code_point>0xFDEF&&code_point<=0x10FFFF&&(code_point&0xFFFE)!==0xFFFE);}
function needsEncoding(content){for(let i=0;i<content.length;i++){if(!isValidCharacter(content.charCodeAt(i))){return true;}}
return false;}
function contentLoaded(entry,contentData){progress.worked();let encoded=contentData.encoded;if(contentData.content!==null){let content=contentData.content;if(content&&!encoded&&needsEncoding(content)){content=content.toBase64();encoded=true;}
entry.response.content.text=content;}
if(encoded){entry.response.content.encoding='base64';}}}
static async _writeToStream(stream,compositeProgress,fileContent){const progress=compositeProgress.createSubProgress();progress.setTitle(Common.UIString('Writing file\u2026'));progress.setTotalWork(fileContent.length);for(let i=0;i<fileContent.length&&!progress.isCanceled();i+=Network.HARWriter._chunkSize){const chunk=fileContent.substr(i,Network.HARWriter._chunkSize);await stream.write(chunk);progress.worked(chunk.length);}
progress.done();}};Network.HARWriter._jsonIndent=2;Network.HARWriter._chunkSize=100000;;Network.NetworkConfigView=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('network/networkConfigView.css');this.contentElement.classList.add('network-config');this._createCacheSection();this.contentElement.createChild('div').classList.add('panel-section-separator');this._createNetworkThrottlingSection();this.contentElement.createChild('div').classList.add('panel-section-separator');this._createUserAgentSection();}
static createUserAgentSelectAndInput(title){const userAgentSetting=Common.settings.createSetting('customUserAgent','');const userAgentSelectElement=createElement('select');UI.ARIAUtils.setAccessibleName(userAgentSelectElement,title);const customOverride={title:Common.UIString('Custom...'),value:'custom'};userAgentSelectElement.appendChild(new Option(customOverride.title,customOverride.value));const groups=Network.NetworkConfigView._userAgentGroups;for(const userAgentDescriptor of groups){const groupElement=userAgentSelectElement.createChild('optgroup');groupElement.label=userAgentDescriptor.title;for(const userAgentVersion of userAgentDescriptor.values){const userAgentValue=SDK.MultitargetNetworkManager.patchUserAgentWithChromeVersion(userAgentVersion.value);groupElement.appendChild(new Option(userAgentVersion.title,userAgentValue));}}
userAgentSelectElement.selectedIndex=0;const otherUserAgentElement=UI.createInput('','text');otherUserAgentElement.value=userAgentSetting.get();otherUserAgentElement.title=userAgentSetting.get();otherUserAgentElement.placeholder=Common.UIString('Enter a custom user agent');otherUserAgentElement.required=true;UI.ARIAUtils.setAccessibleName(otherUserAgentElement,otherUserAgentElement.placeholder);const errorElement=createElementWithClass('div','network-config-input-validation-error');UI.ARIAUtils.markAsAlert(errorElement);if(!otherUserAgentElement.value){errorElement.textContent=ls`Custom user agent field is required`;}
settingChanged();userAgentSelectElement.addEventListener('change',userAgentSelected,false);otherUserAgentElement.addEventListener('input',applyOtherUserAgent,false);function userAgentSelected(){const value=userAgentSelectElement.options[userAgentSelectElement.selectedIndex].value;if(value!==customOverride.value){userAgentSetting.set(value);otherUserAgentElement.value=value;otherUserAgentElement.title=value;}else{otherUserAgentElement.select();}
errorElement.textContent='';}
function settingChanged(){const value=userAgentSetting.get();const options=userAgentSelectElement.options;let selectionRestored=false;for(let i=0;i<options.length;++i){if(options[i].value===value){userAgentSelectElement.selectedIndex=i;selectionRestored=true;break;}}
if(!selectionRestored){userAgentSelectElement.selectedIndex=0;}}
function applyOtherUserAgent(){if(userAgentSetting.get()!==otherUserAgentElement.value){if(!otherUserAgentElement.value){errorElement.textContent=ls`Custom user agent field is required`;}else{errorElement.textContent='';}
userAgentSetting.set(otherUserAgentElement.value);otherUserAgentElement.title=otherUserAgentElement.value;settingChanged();}}
return{select:userAgentSelectElement,input:otherUserAgentElement,error:errorElement};}
_createSection(title,className){const section=this.contentElement.createChild('section','network-config-group');if(className){section.classList.add(className);}
section.createChild('div','network-config-title').textContent=title;return section.createChild('div','network-config-fields');}
_createCacheSection(){const section=this._createSection(Common.UIString('Caching'),'network-config-disable-cache');section.appendChild(UI.SettingsUI.createSettingCheckbox(Common.UIString('Disable cache'),Common.moduleSetting('cacheDisabled'),true));}
_createNetworkThrottlingSection(){const title=ls`Network throttling`;const section=this._createSection(title,'network-config-throttling');const networkThrottlingSelect=(section.createChild('select','chrome-select'));MobileThrottling.throttlingManager().decorateSelectWithNetworkThrottling(networkThrottlingSelect);UI.ARIAUtils.setAccessibleName(networkThrottlingSelect,title);}
_createUserAgentSection(){const title=ls`User agent`;const section=this._createSection(title,'network-config-ua');const checkboxLabel=UI.CheckboxLabel.create(Common.UIString('Select automatically'),true);section.appendChild(checkboxLabel);const autoCheckbox=checkboxLabel.checkboxElement;const customUserAgentSetting=Common.settings.createSetting('customUserAgent','');customUserAgentSetting.addChangeListener(()=>{if(autoCheckbox.checked){return;}
SDK.multitargetNetworkManager.setCustomUserAgentOverride(customUserAgentSetting.get());});const customUserAgentSelectBox=section.createChild('div','network-config-ua-custom');autoCheckbox.addEventListener('change',userAgentSelectBoxChanged);const customSelectAndInput=Network.NetworkConfigView.createUserAgentSelectAndInput(title);customSelectAndInput.select.classList.add('chrome-select');customUserAgentSelectBox.appendChild(customSelectAndInput.select);customUserAgentSelectBox.appendChild(customSelectAndInput.input);customUserAgentSelectBox.appendChild(customSelectAndInput.error);userAgentSelectBoxChanged();function userAgentSelectBoxChanged(){const useCustomUA=!autoCheckbox.checked;customUserAgentSelectBox.classList.toggle('checked',useCustomUA);customSelectAndInput.select.disabled=!useCustomUA;customSelectAndInput.input.disabled=!useCustomUA;customSelectAndInput.error.hidden=!useCustomUA;const customUA=useCustomUA?customUserAgentSetting.get():'';SDK.multitargetNetworkManager.setCustomUserAgentOverride(customUA);}}};Network.NetworkConfigView._userAgentGroups=[{title:ls`Android`,values:[{title:ls`Android (4.0.2) Browser \u2014 Galaxy Nexus`,value:'Mozilla/5.0 (Linux; U; Android 4.0.2; en-us; Galaxy Nexus Build/ICL53F) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'},{title:ls`Android (2.3) Browser \u2014 Nexus S`,value:'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'}]},{title:ls`BlackBerry`,values:[{title:ls`BlackBerry \u2014 BB10`,value:'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.1+ (KHTML, like Gecko) Version/10.0.0.1337 Mobile Safari/537.1+'},{title:ls`BlackBerry \u2014 PlayBook 2.1`,value:'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML, like Gecko) Version/7.2.1.0 Safari/536.2+'},{title:ls`BlackBerry \u2014 9900`,value:'Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.187 Mobile Safari/534.11+'}]},{title:ls`Chrome`,values:[{title:ls`Chrome \u2014 Android Mobile`,value:'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36'},{title:ls`Chrome \u2014 Android Mobile (high-end)`,value:'Mozilla/5.0 (Linux; Android 10; Pixel 4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36'},{title:ls`Chrome \u2014 Android Tablet`,value:'Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36'},{title:ls`Chrome \u2014 iPhone`,value:'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/%s Mobile/15E148 Safari/604.1'},{title:ls`Chrome \u2014 iPad`,value:'Mozilla/5.0 (iPad; CPU OS 13_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/%s Mobile/15E148 Safari/604.1'},{title:ls`Chrome \u2014 Chrome OS`,value:'Mozilla/5.0 (X11; CrOS x86_64 10066.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36'},{title:ls`Chrome \u2014 Mac`,value:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36'},{title:ls`Chrome \u2014 Windows`,value:'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36'}]},{title:ls`Firefox`,values:[{title:ls`Firefox \u2014 Android Mobile`,value:'Mozilla/5.0 (Android 4.4; Mobile; rv:70.0) Gecko/70.0 Firefox/70.0'},{title:ls`Firefox \u2014 Android Tablet`,value:'Mozilla/5.0 (Android 4.4; Tablet; rv:70.0) Gecko/70.0 Firefox/70.0'},{title:ls`Firefox \u2014 iPhone`,value:'Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4'},{title:ls`Firefox \u2014 iPad`,value:'Mozilla/5.0 (iPad; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4'},{title:ls`Firefox \u2014 Mac`,value:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:70.0) Gecko/20100101 Firefox/70.0'},{title:ls`Firefox \u2014 Windows`,value:'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0'}]},{title:ls`Googlebot`,values:[{title:ls`Googlebot`,value:'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'},{title:ls`Googlebot Desktop`,value:'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/%s Safari/537.36'},{title:ls`Googlebot Smartphone`,value:'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'}]},{title:ls`Internet Explorer`,values:[{title:ls`Internet Explorer 11`,value:'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'},{title:ls`Internet Explorer 10`,value:'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)'},{title:ls`Internet Explorer 9`,value:'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'},{title:ls`Internet Explorer 8`,value:'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'},{title:ls`Internet Explorer 7`,value:'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}]},{title:ls`Microsoft Edge`,values:[{title:ls`Microsoft Edge (Chromium) \u2014 Windows`,value:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36 Edg/%s'},{title:ls`Microsoft Edge (Chromium) \u2014 Mac`,value:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Chrome/%s Safari/604.1 Edg/%s'},{title:ls`Microsoft Edge \u2014 iPhone`,value:'Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 EdgiOS/44.5.0.10 Mobile/15E148 Safari/604.1'},{title:ls`Microsoft Edge \u2014 iPad`,value:'Mozilla/5.0 (iPad; CPU OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 EdgiOS/44.5.2 Mobile/15E148 Safari/605.1.15'},{title:ls`Microsoft Edge \u2014 Android Mobile`,value:'Mozilla/5.0 (Linux; Android 8.1.0; Pixel Build/OPM4.171019.021.D1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Mobile Safari/537.36 EdgA/42.0.0.2057'},{title:ls`Microsoft Edge \u2014 Android Tablet`,value:'Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.109 Safari/537.36 EdgA/42.0.0.2057'},{title:ls`Microsoft Edge (EdgeHTML) \u2014 Windows`,value:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362'},{title:ls`Microsoft Edge (EdgeHTML) \u2014 XBox`,value:'Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox One) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362'}]},{title:ls`Opera`,values:[{title:ls`Opera \u2014 Mac`,value:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36 OPR/65.0.3467.48'},{title:ls`Opera \u2014 Windows`,value:'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36 OPR/65.0.3467.48'},{title:ls`Opera (Presto) \u2014 Mac`,value:'Opera/9.80 (Macintosh; Intel Mac OS X 10.9.1) Presto/2.12.388 Version/12.16'},{title:ls`Opera (Presto) \u2014 Windows`,value:'Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.16'},{title:ls`Opera Mobile \u2014 Android Mobile`,value:'Opera/12.02 (Android 4.1; Linux; Opera Mobi/ADR-1111101157; U; en-US) Presto/2.9.201 Version/12.02'},{title:ls`Opera Mini \u2014 iOS`,value:'Opera/9.80 (iPhone; Opera Mini/8.0.0/34.2336; U; en) Presto/2.8.119 Version/11.10'}]},{title:ls`Safari`,values:[{title:ls`Safari \u2014 iPad iOS 13.2`,value:'Mozilla/5.0 (iPad; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'},{title:ls`Safari \u2014 iPhone iOS 13.2`,value:'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'},{title:ls`Safari \u2014 Mac`,value:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Safari/605.1.15'}]},{title:ls`UC Browser`,values:[{title:ls`UC Browser \u2014 Android Mobile`,value:'Mozilla/5.0 (Linux; U; Android 8.1.0; en-US; Nexus 6P Build/OPM7.181205.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.11.1.1197 Mobile Safari/537.36'},{title:ls`UC Browser \u2014 iOS`,value:'Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/16B92 UCBrowser/12.1.7.1109 Mobile AliApp(TUnionSDK/0.1.20.3)'},{title:ls`UC Browser \u2014 Windows Phone`,value:'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile'}]}];;Network.NetworkNode=class extends DataGrid.SortableDataGridNode{constructor(parentView){super({});this._parentView=parentView;this._isHovered=false;this._showingInitiatorChain=false;this._requestOrFirstKnownChildRequest=null;}
displayName(){return'';}
createCell(columnId){const cell=this.createTD(columnId);this.renderCell(cell,columnId);return cell;}
renderCell(cell,columnId){}
backgroundColor(){const bgColors=Network.NetworkNode._backgroundColors;const hasFocus=document.hasFocus();const isSelected=this.dataGrid.element===document.activeElement;const isFailed=this._isFailed();if(this.selected&&hasFocus&&isSelected&&isFailed){return bgColors.FocusSelectedHasError;}else if(this.selected&&hasFocus&&isSelected){return bgColors.FocusSelected;}else if(this.selected){return bgColors.Selected;}else if(this.hovered()){return bgColors.Hovered;}else if(this.isOnInitiatorPath()){return bgColors.InitiatorPath;}else if(this.isOnInitiatedPath()){return bgColors.InitiatedPath;}else if(this.isStriped()){return bgColors.Stripe;}else{return bgColors.Default;}}
updateBackgroundColor(){const element=this.existingElement();if(!element){return;}
element.style.backgroundColor=`var(${this.backgroundColor()})`;this._parentView.stylesChanged();}
setStriped(isStriped){super.setStriped(isStriped);this.updateBackgroundColor();}
select(supressSelectedEvent){super.select(supressSelectedEvent);this.updateBackgroundColor();this._parentView.updateNodeSelectedClass(true);}
deselect(supressSelectedEvent){super.deselect(supressSelectedEvent);this.updateBackgroundColor();this._parentView.updateNodeSelectedClass(false);}
parentView(){return this._parentView;}
hovered(){return this._isHovered;}
showingInitiatorChain(){return this._showingInitiatorChain;}
nodeSelfHeight(){return this._parentView.rowHeight();}
setHovered(hovered,showInitiatorChain){if(this._isHovered===hovered&&this._showingInitiatorChain===showInitiatorChain){return;}
if(this._isHovered!==hovered){this._isHovered=hovered;if(this.attached()){this.element().classList.toggle('hover',hovered);}}
if(this._showingInitiatorChain!==showInitiatorChain){this._showingInitiatorChain=showInitiatorChain;this.showingInitiatorChainChanged();}
this._parentView.stylesChanged();this.updateBackgroundColor();}
showingInitiatorChainChanged(){}
isOnInitiatorPath(){return false;}
isOnInitiatedPath(){return false;}
request(){return null;}
isNavigationRequest(){return false;}
clearFlatNodes(){super.clearFlatNodes();this._requestOrFirstKnownChildRequest=null;}
requestOrFirstKnownChildRequest(){if(this._requestOrFirstKnownChildRequest){return this._requestOrFirstKnownChildRequest;}
let request=this.request();if(request||!this.hasChildren()){this._requestOrFirstKnownChildRequest=request;return this._requestOrFirstKnownChildRequest;}
let firstChildRequest=null;const flatChildren=this.flatChildren();for(let i=0;i<flatChildren.length;i++){request=flatChildren[i].request();if(!firstChildRequest||(request&&request.issueTime()<firstChildRequest.issueTime())){firstChildRequest=request;}}
this._requestOrFirstKnownChildRequest=firstChildRequest;return this._requestOrFirstKnownChildRequest;}};Network.NetworkNode._backgroundColors={Default:'--network-grid-default-color',Stripe:'--network-grid-stripe-color',Navigation:'--network-grid-navigation-color',Hovered:'--network-grid-hovered-color',InitiatorPath:'--network-grid-initiator-path-color',InitiatedPath:'--network-grid-initiated-path-color',Selected:'--network-grid-selected-color',FocusSelected:'--network-grid-focus-selected-color',FocusSelectedHasError:'--network-grid-focus-selected-color-has-error',FromFrame:'--network-grid-from-frame-color',};Network.NetworkNode._SupportedBackgroundColors;Network.NetworkRequestNode=class extends Network.NetworkNode{constructor(parentView,request){super(parentView);this._nameCell=null;this._initiatorCell=null;this._request=request;this._isNavigationRequest=false;this.selectable=true;this._isOnInitiatorPath=false;this._isOnInitiatedPath=false;}
static NameComparator(a,b){const aName=a.displayName().toLowerCase();const bName=b.displayName().toLowerCase();if(aName===bName){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(aRequest&&bRequest){return aRequest.indentityCompare(bRequest);}
return aRequest?-1:1;}
return aName<bName?-1:1;}
static RemoteAddressComparator(a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aRemoteAddress=aRequest.remoteAddress();const bRemoteAddress=bRequest.remoteAddress();if(aRemoteAddress>bRemoteAddress){return 1;}
if(bRemoteAddress>aRemoteAddress){return-1;}
return aRequest.indentityCompare(bRequest);}
static SizeComparator(a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
if(bRequest.cached()&&!aRequest.cached()){return 1;}
if(aRequest.cached()&&!bRequest.cached()){return-1;}
return(aRequest.transferSize-bRequest.transferSize)||(aRequest.resourceSize-bRequest.resourceSize)||aRequest.indentityCompare(bRequest);}
static TypeComparator(a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aSimpleType=a.displayType();const bSimpleType=b.displayType();if(aSimpleType>bSimpleType){return 1;}
if(bSimpleType>aSimpleType){return-1;}
return aRequest.indentityCompare(bRequest);}
static InitiatorComparator(a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
if(!a._initiatorCell||!b._initiatorCell){return!a._initiatorCell?-1:1;}
const aText=a._linkifiedInitiatorAnchor?a._linkifiedInitiatorAnchor.textContent:a._initiatorCell.title;const bText=b._linkifiedInitiatorAnchor?b._linkifiedInitiatorAnchor.textContent:b._initiatorCell.title;return aText.localeCompare(bText);}
static RequestCookiesCountComparator(a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aScore=aRequest.requestCookies?aRequest.requestCookies.length:0;const bScore=bRequest.requestCookies?bRequest.requestCookies.length:0;return(aScore-bScore)||aRequest.indentityCompare(bRequest);}
static ResponseCookiesCountComparator(a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aScore=aRequest.responseCookies?aRequest.responseCookies.length:0;const bScore=bRequest.responseCookies?bRequest.responseCookies.length:0;return(aScore-bScore)||aRequest.indentityCompare(bRequest);}
static PriorityComparator(a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aPriority=aRequest.priority();let aScore=aPriority?PerfUI.networkPriorityWeight(aPriority):0;aScore=aScore||0;const bPriority=bRequest.priority();let bScore=bPriority?PerfUI.networkPriorityWeight(bPriority):0;bScore=bScore||0;return aScore-bScore||aRequest.indentityCompare(bRequest);}
static RequestPropertyComparator(propertyName,a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aValue=aRequest[propertyName];const bValue=bRequest[propertyName];if(aValue===bValue){return aRequest.indentityCompare(bRequest);}
return aValue>bValue?1:-1;}
static ResponseHeaderStringComparator(propertyName,a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aValue=String(aRequest.responseHeaderValue(propertyName)||'');const bValue=String(bRequest.responseHeaderValue(propertyName)||'');return aValue.localeCompare(bValue)||aRequest.indentityCompare(bRequest);}
static ResponseHeaderNumberComparator(propertyName,a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aValue=(aRequest.responseHeaderValue(propertyName)!==undefined)?parseFloat(aRequest.responseHeaderValue(propertyName)):-Infinity;const bValue=(bRequest.responseHeaderValue(propertyName)!==undefined)?parseFloat(bRequest.responseHeaderValue(propertyName)):-Infinity;if(aValue===bValue){return aRequest.indentityCompare(bRequest);}
return aValue>bValue?1:-1;}
static ResponseHeaderDateComparator(propertyName,a,b){const aRequest=a.requestOrFirstKnownChildRequest();const bRequest=b.requestOrFirstKnownChildRequest();if(!aRequest||!bRequest){return!aRequest?-1:1;}
const aHeader=aRequest.responseHeaderValue(propertyName);const bHeader=bRequest.responseHeaderValue(propertyName);const aValue=aHeader?new Date(aHeader).getTime():-Infinity;const bValue=bHeader?new Date(bHeader).getTime():-Infinity;if(aValue===bValue){return aRequest.indentityCompare(bRequest);}
return aValue>bValue?1:-1;}
showingInitiatorChainChanged(){const showInitiatorChain=this.showingInitiatorChain();const initiatorGraph=SDK.networkLog.initiatorGraphForRequest(this._request);for(const request of initiatorGraph.initiators){if(request===this._request){continue;}
const node=this.parentView().nodeForRequest(request);if(!node){continue;}
node._setIsOnInitiatorPath(showInitiatorChain);}
for(const request of initiatorGraph.initiated.keys()){if(request===this._request){continue;}
const node=this.parentView().nodeForRequest(request);if(!node){continue;}
node._setIsOnInitiatedPath(showInitiatorChain);}}
_setIsOnInitiatorPath(isOnInitiatorPath){if(this._isOnInitiatorPath===isOnInitiatorPath||!this.attached()){return;}
this._isOnInitiatorPath=isOnInitiatorPath;this.updateBackgroundColor();}
isOnInitiatorPath(){return this._isOnInitiatorPath;}
_setIsOnInitiatedPath(isOnInitiatedPath){if(this._isOnInitiatedPath===isOnInitiatedPath||!this.attached()){return;}
this._isOnInitiatedPath=isOnInitiatedPath;this.updateBackgroundColor();}
isOnInitiatedPath(){return this._isOnInitiatedPath;}
displayType(){const mimeType=this._request.mimeType||this._request.requestContentType()||'';const resourceType=this._request.resourceType();let simpleType=resourceType.name();if(resourceType===Common.resourceTypes.Other||resourceType===Common.resourceTypes.Image){simpleType=mimeType.replace(/^(application|image)\//,'');}
return simpleType;}
displayName(){return this._request.name();}
request(){return this._request;}
isNavigationRequest(){const pageLoad=SDK.NetworkLog.PageLoad.forRequest(this._request);return pageLoad?pageLoad.mainRequest===this._request:false;}
nodeSelfHeight(){return this.parentView().rowHeight();}
createCells(element){this._nameCell=null;this._initiatorCell=null;element.classList.toggle('network-error-row',this._isFailed());element.classList.toggle('network-navigation-row',this._isNavigationRequest);super.createCells(element);this.updateBackgroundColor();}
_setTextAndTitle(element,text){element.createTextChild(text);element.title=text;}
renderCell(cell,columnId){switch(columnId){case'name':this._renderPrimaryCell(cell,columnId);break;case'path':this._renderPrimaryCell(cell,columnId,this._request.pathname);break;case'url':this._renderPrimaryCell(cell,columnId,this._request.url());break;case'method':this._setTextAndTitle(cell,this._request.requestMethod);break;case'status':this._renderStatusCell(cell);break;case'protocol':this._setTextAndTitle(cell,this._request.protocol);break;case'scheme':this._setTextAndTitle(cell,this._request.scheme);break;case'domain':this._setTextAndTitle(cell,this._request.domain);break;case'remoteaddress':this._setTextAndTitle(cell,this._request.remoteAddress());break;case'cookies':this._setTextAndTitle(cell,this._arrayLength(this._request.requestCookies));break;case'setcookies':this._setTextAndTitle(cell,this._arrayLength(this._request.responseCookies));break;case'priority':const priority=this._request.priority();this._setTextAndTitle(cell,priority?PerfUI.uiLabelForNetworkPriority(priority):'');break;case'connectionid':this._setTextAndTitle(cell,this._request.connectionId);break;case'type':this._setTextAndTitle(cell,this.displayType());break;case'initiator':this._renderInitiatorCell(cell);break;case'size':this._renderSizeCell(cell);break;case'time':this._renderTimeCell(cell);break;case'timeline':this._setTextAndTitle(cell,'');break;default:this._setTextAndTitle(cell,this._request.responseHeaderValue(columnId)||'');break;}}
_arrayLength(array){return array?''+array.length:'';}
select(supressSelectedEvent){super.select(supressSelectedEvent);this.parentView().dispatchEventToListeners(Network.NetworkLogView.Events.RequestSelected,this._request);}
highlightMatchedSubstring(regexp){if(!regexp){return[];}
this.element();const domChanges=[];const matchInfo=this._nameCell.textContent.match(regexp);if(matchInfo){UI.highlightSearchResult(this._nameCell,matchInfo.index,matchInfo[0].length,domChanges);}
return domChanges;}
_openInNewTab(){Host.InspectorFrontendHost.openInNewTab(this._request.url());}
_isFailed(){return(this._request.failed&&!this._request.statusCode)||(this._request.statusCode>=400)||(!!this._request.signedExchangeInfo()&&!!this._request.signedExchangeInfo().errors);}
_renderPrimaryCell(cell,columnId,text){const columnIndex=this.dataGrid.indexOfVisibleColumn(columnId);if(columnIndex===0){const leftPadding=this.leftPadding?this.leftPadding+'px':'';cell.style.setProperty('padding-left',leftPadding);this._nameCell=cell;cell.addEventListener('dblclick',this._openInNewTab.bind(this),false);cell.addEventListener('click',()=>{this.parentView().dispatchEventToListeners(Network.NetworkLogView.Events.RequestActivated,true);});let iconElement;if(this._request.resourceType()===Common.resourceTypes.Image){const previewImage=createElementWithClass('img','image-network-icon-preview');previewImage.alt=this._request.resourceType().title();this._request.populateImageSource(previewImage);iconElement=createElementWithClass('div','icon');iconElement.appendChild(previewImage);}else{iconElement=createElementWithClass('img','icon');iconElement.alt=this._request.resourceType().title();}
iconElement.classList.add(this._request.resourceType().name());cell.appendChild(iconElement);}
if(columnId==='name'){const name=this._request.name().trimMiddle(100);const networkManager=SDK.NetworkManager.forRequest(this._request);cell.createTextChild(networkManager?networkManager.target().decorateLabel(name):name);this._appendSubtitle(cell,this._request.path());cell.title=this._request.url();}else if(text){cell.createTextChild(text);cell.title=text;}}
_renderStatusCell(cell){cell.classList.toggle('network-dim-cell',!this._isFailed()&&(this._request.cached()||!this._request.statusCode));if(this._request.failed&&!this._request.canceled&&!this._request.wasBlocked()){const failText=Common.UIString('(failed)');if(this._request.localizedFailDescription){cell.createTextChild(failText);this._appendSubtitle(cell,this._request.localizedFailDescription);cell.title=failText+' '+this._request.localizedFailDescription;}else{this._setTextAndTitle(cell,failText);}}else if(this._request.statusCode){cell.createTextChild(''+this._request.statusCode);this._appendSubtitle(cell,this._request.statusText);cell.title=this._request.statusCode+' '+this._request.statusText;}else if(this._request.parsedURL.isDataURL()){this._setTextAndTitle(cell,Common.UIString('(data)'));}else if(this._request.canceled){this._setTextAndTitle(cell,Common.UIString('(canceled)'));}else if(this._request.wasBlocked()){let reason=Common.UIString('other');switch(this._request.blockedReason()){case Protocol.Network.BlockedReason.Other:reason=Common.UIString('other');break;case Protocol.Network.BlockedReason.Csp:reason=Common.UIString('csp');break;case Protocol.Network.BlockedReason.MixedContent:reason=Common.UIString('mixed-content');break;case Protocol.Network.BlockedReason.Origin:reason=Common.UIString('origin');break;case Protocol.Network.BlockedReason.Inspector:reason=Common.UIString('devtools');break;case Protocol.Network.BlockedReason.SubresourceFilter:reason=Common.UIString('subresource-filter');break;case Protocol.Network.BlockedReason.ContentType:reason=Common.UIString('content-type');break;case Protocol.Network.BlockedReason.CollapsedByClient:reason=Common.UIString('extension');break;}
this._setTextAndTitle(cell,Common.UIString('(blocked:%s)',reason));}else if(this._request.finished){this._setTextAndTitle(cell,Common.UIString('Finished'));}else{this._setTextAndTitle(cell,Common.UIString('(pending)'));}}
_renderInitiatorCell(cell){this._initiatorCell=cell;const request=this._request;const initiator=SDK.networkLog.initiatorInfoForRequest(request);const timing=request.timing;if(timing&&timing.pushStart){cell.appendChild(createTextNode(Common.UIString('Push / ')));}
switch(initiator.type){case SDK.NetworkRequest.InitiatorType.Parser:cell.title=initiator.url+':'+(initiator.lineNumber+1);const uiSourceCode=Workspace.workspace.uiSourceCodeForURL(initiator.url);cell.appendChild(Components.Linkifier.linkifyURL(initiator.url,{text:uiSourceCode?uiSourceCode.displayName():undefined,lineNumber:initiator.lineNumber,columnNumber:initiator.columnNumber}));this._appendSubtitle(cell,Common.UIString('Parser'));break;case SDK.NetworkRequest.InitiatorType.Redirect:cell.title=initiator.url;const redirectSource=(request.redirectSource());console.assert(redirectSource);if(this.parentView().nodeForRequest(redirectSource)){cell.appendChild(Components.Linkifier.linkifyRevealable(redirectSource,Bindings.displayNameForURL(redirectSource.url())));}else{cell.appendChild(Components.Linkifier.linkifyURL(redirectSource.url()));}
this._appendSubtitle(cell,Common.UIString('Redirect'));break;case SDK.NetworkRequest.InitiatorType.Script:const networkManager=SDK.NetworkManager.forRequest(request);if(initiator.stack){this._linkifiedInitiatorAnchor=this.parentView().linkifier.linkifyStackTraceTopFrame(networkManager?networkManager.target():null,initiator.stack);}else{this._linkifiedInitiatorAnchor=this.parentView().linkifier.linkifyScriptLocation(networkManager?networkManager.target():null,initiator.scriptId,initiator.url,initiator.lineNumber,initiator.columnNumber);}
this._linkifiedInitiatorAnchor.title='';cell.appendChild(this._linkifiedInitiatorAnchor);this._appendSubtitle(cell,Common.UIString('Script'));cell.classList.add('network-script-initiated');cell.request=request;break;case SDK.NetworkRequest.InitiatorType.Preload:cell.title=Common.UIString('Preload');cell.classList.add('network-dim-cell');cell.appendChild(createTextNode(Common.UIString('Preload')));break;case SDK.NetworkRequest.InitiatorType.SignedExchange:cell.appendChild(Components.Linkifier.linkifyURL(initiator.url));this._appendSubtitle(cell,Common.UIString('signed-exchange'));break;default:cell.title=Common.UIString('Other');cell.classList.add('network-dim-cell');cell.appendChild(createTextNode(Common.UIString('Other')));}}
_renderSizeCell(cell){const resourceSize=Number.bytesToString(this._request.resourceSize);if(this._request.cachedInMemory()){cell.createTextChild(ls`(memory cache)`);cell.title=ls`Served from memory cache, resource size: ${resourceSize}`;cell.classList.add('network-dim-cell');}else if(this._request.fetchedViaServiceWorker){cell.createTextChild(ls`(ServiceWorker)`);cell.title=ls`Served from ServiceWorker, resource size: ${resourceSize}`;cell.classList.add('network-dim-cell');}else if(this._request.redirectSource()&&this._request.redirectSource().signedExchangeInfo()&&!this._request.redirectSource().signedExchangeInfo().errors){cell.createTextChild(ls`(signed-exchange)`);cell.title=ls`Served from Signed HTTP Exchange, resource size: ${resourceSize}`;cell.classList.add('network-dim-cell');}else if(this._request.fromPrefetchCache()){cell.createTextChild(ls`(prefetch cache)`);cell.title=ls`Served from prefetch cache, resource size: ${resourceSize}`;cell.classList.add('network-dim-cell');}else if(this._request.cached()){cell.createTextChild(ls`(disk cache)`);cell.title=ls`Served from disk cache, resource size: ${resourceSize}`;cell.classList.add('network-dim-cell');}else{const transferSize=Number.bytesToString(this._request.transferSize);cell.createTextChild(transferSize);cell.title=`${transferSize} transferred over network, resource size: ${resourceSize}`;}
this._appendSubtitle(cell,resourceSize);}
_renderTimeCell(cell){if(this._request.duration>0){this._setTextAndTitle(cell,Number.secondsToString(this._request.duration));this._appendSubtitle(cell,Number.secondsToString(this._request.latency));}else{cell.classList.add('network-dim-cell');this._setTextAndTitle(cell,Common.UIString('Pending'));}}
_appendSubtitle(cellElement,subtitleText){const subtitleElement=createElement('div');subtitleElement.className='network-cell-subtitle';subtitleElement.textContent=subtitleText;cellElement.appendChild(subtitleElement);}};Network.NetworkGroupNode=class extends Network.NetworkNode{renderCell(cell,columnId){const columnIndex=this.dataGrid.indexOfVisibleColumn(columnId);if(columnIndex===0){const leftPadding=this.leftPadding?this.leftPadding+'px':'';cell.style.setProperty('padding-left',leftPadding);cell.classList.add('disclosure');}}
select(supressSelectedEvent){super.select(supressSelectedEvent);const firstChildNode=this.traverseNextNode(false,true);if(firstChildNode&&firstChildNode.request()){this.parentView().dispatchEventToListeners(Network.NetworkLogView.Events.RequestSelected,firstChildNode.request());}}};;Network.NetworkItemView=class extends UI.TabbedPane{constructor(request,calculator){super();this._request=request;this.element.classList.add('network-item-view');this._resourceViewTabSetting=Common.settings.createSetting('resourceViewTab','preview');this._headersView=new Network.RequestHeadersView(request);this.appendTab(Network.NetworkItemView.Tabs.Headers,Common.UIString('Headers'),this._headersView,Common.UIString('Headers and request body'));this.addEventListener(UI.TabbedPane.Events.TabSelected,this._tabSelected,this);if(request.resourceType()===Common.resourceTypes.WebSocket){const frameView=new Network.ResourceWebSocketFrameView(request);this.appendTab(Network.NetworkItemView.Tabs.WsFrames,Common.UIString('Messages'),frameView,Common.UIString('WebSocket messages'));}else if(request.mimeType==='text/event-stream'){this.appendTab(Network.NetworkItemView.Tabs.EventSource,Common.UIString('EventStream'),new Network.EventSourceMessagesView(request));}else{this._responseView=new Network.RequestResponseView(request);const previewView=new Network.RequestPreviewView(request);this.appendTab(Network.NetworkItemView.Tabs.Preview,Common.UIString('Preview'),previewView,Common.UIString('Response preview'));if(request.signedExchangeInfo()&&request.signedExchangeInfo().errors&&request.signedExchangeInfo().errors.length){const icon=UI.Icon.create('smallicon-error');icon.title=Common.UIString('SignedExchange error');this.setTabIcon(Network.NetworkItemView.Tabs.Preview,icon);}
this.appendTab(Network.NetworkItemView.Tabs.Response,Common.UIString('Response'),this._responseView,Common.UIString('Raw response data'));}
this.appendTab(Network.NetworkItemView.Tabs.Initiator,ls`Initiator`,new Network.RequestInitiatorView(request),ls`Request initiator call stack`);this.appendTab(Network.NetworkItemView.Tabs.Timing,Common.UIString('Timing'),new Network.RequestTimingView(request,calculator),Common.UIString('Request and response timeline'));this._cookiesView=null;}
wasShown(){super.wasShown();this._request.addEventListener(SDK.NetworkRequest.Events.RequestHeadersChanged,this._maybeAppendCookiesPanel,this);this._request.addEventListener(SDK.NetworkRequest.Events.ResponseHeadersChanged,this._maybeAppendCookiesPanel,this);this._maybeAppendCookiesPanel();this._selectTab();}
willHide(){this._request.removeEventListener(SDK.NetworkRequest.Events.RequestHeadersChanged,this._maybeAppendCookiesPanel,this);this._request.removeEventListener(SDK.NetworkRequest.Events.ResponseHeadersChanged,this._maybeAppendCookiesPanel,this);}
_maybeAppendCookiesPanel(){const cookiesPresent=this._request.requestCookies||this._request.responseCookies;console.assert(cookiesPresent||!this._cookiesView,'Cookies were introduced in headers and then removed!');if(cookiesPresent&&!this._cookiesView){this._cookiesView=new Network.RequestCookiesView(this._request);this.appendTab(Network.NetworkItemView.Tabs.Cookies,Common.UIString('Cookies'),this._cookiesView,Common.UIString('Request and response cookies'));}}
_selectTab(tabId){if(!tabId){tabId=this._resourceViewTabSetting.get();}
if(!this.selectTab(tabId)){this.selectTab('headers');}}
_tabSelected(event){if(!event.data.isUserGesture){return;}
this._resourceViewTabSetting.set(event.data.tabId);}
request(){return this._request;}
async revealResponseBody(line){this._selectTab(Network.NetworkItemView.Tabs.Response);if(this._responseView&&typeof line==='number'){await this._responseView.revealLine((line));}}
revealRequestHeader(header){this._selectTab(Network.NetworkItemView.Tabs.Headers);this._headersView.revealRequestHeader(header);}
revealResponseHeader(header){this._selectTab(Network.NetworkItemView.Tabs.Headers);this._headersView.revealResponseHeader(header);}};Network.NetworkItemView.Tabs={Cookies:'cookies',EventSource:'eventSource',Headers:'headers',Initiator:'initiator',Preview:'preview',Response:'response',Timing:'timing',WsFrames:'webSocketFrames'};;Network.NetworkTimeBoundary=class{constructor(minimum,maximum){this.minimum=minimum;this.maximum=maximum;}
equals(other){return(this.minimum===other.minimum)&&(this.maximum===other.maximum);}};Network.NetworkTimeCalculator=class extends Common.Object{constructor(startAtZero){super();this.startAtZero=startAtZero;this._minimumBoundary=-1;this._maximumBoundary=-1;this._boundryChangedEventThrottler=new Common.Throttler(0);this._window=null;}
setWindow(window){this._window=window;this._boundaryChanged();}
setInitialUserFriendlyBoundaries(){this._minimumBoundary=0;this._maximumBoundary=1;}
computePosition(time){return(time-this.minimumBoundary())/this.boundarySpan()*this._workingArea;}
formatValue(value,precision){return Number.secondsToString(value,!!precision);}
minimumBoundary(){return this._window?this._window.minimum:this._minimumBoundary;}
zeroTime(){return this._minimumBoundary;}
maximumBoundary(){return this._window?this._window.maximum:this._maximumBoundary;}
boundary(){return new Network.NetworkTimeBoundary(this.minimumBoundary(),this.maximumBoundary());}
boundarySpan(){return this.maximumBoundary()-this.minimumBoundary();}
reset(){this._minimumBoundary=-1;this._maximumBoundary=-1;this._boundaryChanged();}
_value(item){return 0;}
setDisplayWidth(clientWidth){this._workingArea=clientWidth;}
computeBarGraphPercentages(request){let start;let middle;let end;if(request.startTime!==-1){start=((request.startTime-this.minimumBoundary())/this.boundarySpan())*100;}else{start=0;}
if(request.responseReceivedTime!==-1){middle=((request.responseReceivedTime-this.minimumBoundary())/this.boundarySpan())*100;}else{middle=(this.startAtZero?start:100);}
if(request.endTime!==-1){end=((request.endTime-this.minimumBoundary())/this.boundarySpan())*100;}else{end=(this.startAtZero?middle:100);}
if(this.startAtZero){end-=start;middle-=start;start=0;}
return{start:start,middle:middle,end:end};}
computePercentageFromEventTime(eventTime){if(eventTime!==-1&&!this.startAtZero){return((eventTime-this.minimumBoundary())/this.boundarySpan())*100;}
return 0;}
percentageToTime(percentage){return percentage*this.boundarySpan()/100+this.minimumBoundary();}
_boundaryChanged(){this._boundryChangedEventThrottler.schedule(dispatchEvent.bind(this));function dispatchEvent(){this.dispatchEventToListeners(Network.NetworkTimeCalculator.Events.BoundariesChanged);return Promise.resolve();}}
updateBoundariesForEventTime(eventTime){if(eventTime===-1||this.startAtZero){return;}
if(this._maximumBoundary===undefined||eventTime>this._maximumBoundary){this._maximumBoundary=eventTime;this._boundaryChanged();}}
computeBarGraphLabels(request){let rightLabel='';if(request.responseReceivedTime!==-1&&request.endTime!==-1){rightLabel=Number.secondsToString(request.endTime-request.responseReceivedTime);}
const hasLatency=request.latency>0;const leftLabel=hasLatency?Number.secondsToString(request.latency):rightLabel;if(request.timing){return{left:leftLabel,right:rightLabel};}
let tooltip;if(hasLatency&&rightLabel){const total=Number.secondsToString(request.duration);tooltip=Network.NetworkTimeCalculator._latencyDownloadTotalFormat.format(leftLabel,rightLabel,total);}else if(hasLatency){tooltip=Network.NetworkTimeCalculator._latencyFormat.format(leftLabel);}else if(rightLabel){tooltip=Network.NetworkTimeCalculator._downloadFormat.format(rightLabel);}
if(request.fetchedViaServiceWorker){tooltip=Network.NetworkTimeCalculator._fromServiceWorkerFormat.format(tooltip);}else if(request.cached()){tooltip=Network.NetworkTimeCalculator._fromCacheFormat.format(tooltip);}
return{left:leftLabel,right:rightLabel,tooltip:tooltip};}
updateBoundaries(request){const lowerBound=this._lowerBound(request);const upperBound=this._upperBound(request);let changed=false;if(lowerBound!==-1||this.startAtZero){changed=this._extendBoundariesToIncludeTimestamp(this.startAtZero?0:lowerBound);}
if(upperBound!==-1){changed=this._extendBoundariesToIncludeTimestamp(upperBound)||changed;}
if(changed){this._boundaryChanged();}}
_extendBoundariesToIncludeTimestamp(timestamp){const previousMinimumBoundary=this._minimumBoundary;const previousMaximumBoundary=this._maximumBoundary;const minOffset=Network.NetworkTimeCalculator._minimumSpread;if(this._minimumBoundary===-1||this._maximumBoundary===-1){this._minimumBoundary=timestamp;this._maximumBoundary=timestamp+minOffset;}else{this._minimumBoundary=Math.min(timestamp,this._minimumBoundary);this._maximumBoundary=Math.max(timestamp,this._minimumBoundary+minOffset,this._maximumBoundary);}
return previousMinimumBoundary!==this._minimumBoundary||previousMaximumBoundary!==this._maximumBoundary;}
_lowerBound(request){return 0;}
_upperBound(request){return 0;}};Network.NetworkTimeCalculator._minimumSpread=0.1;Network.NetworkTimeCalculator.Events={BoundariesChanged:Symbol('BoundariesChanged')};Network.NetworkTimeCalculator._latencyDownloadTotalFormat=new Common.UIStringFormat('%s latency, %s download (%s total)');Network.NetworkTimeCalculator._latencyFormat=new Common.UIStringFormat('%s latency');Network.NetworkTimeCalculator._downloadFormat=new Common.UIStringFormat('%s download');Network.NetworkTimeCalculator._fromServiceWorkerFormat=new Common.UIStringFormat('%s (from ServiceWorker)');Network.NetworkTimeCalculator._fromCacheFormat=new Common.UIStringFormat('%s (from cache)');Network.NetworkTransferTimeCalculator=class extends Network.NetworkTimeCalculator{constructor(){super(false);}
formatValue(value,precision){return Number.secondsToString(value-this.zeroTime(),!!precision);}
_lowerBound(request){return request.issueTime();}
_upperBound(request){return request.endTime;}};Network.NetworkTransferDurationCalculator=class extends Network.NetworkTimeCalculator{constructor(){super(true);}
formatValue(value,precision){return Number.secondsToString(value,!!precision);}
_upperBound(request){return request.duration;}};;Network.NetworkLogView=class extends UI.VBox{constructor(filterBar,progressBarContainer,networkLogLargeRowsSetting){super();this.setMinimumSize(50,64);this.registerRequiredCSS('network/networkLogView.css');this.element.id='network-container';this.element.classList.add('no-node-selected');this._networkHideDataURLSetting=Common.settings.createSetting('networkHideDataURL',false);this._networkShowIssuesOnlySetting=Common.settings.createSetting('networkShowIssuesOnly',false);this._networkResourceTypeFiltersSetting=Common.settings.createSetting('networkResourceTypeFilters',{});this._rawRowHeight=0;this._progressBarContainer=progressBarContainer;this._networkLogLargeRowsSetting=networkLogLargeRowsSetting;this._networkLogLargeRowsSetting.addChangeListener(updateRowHeight.bind(this),this);function updateRowHeight(){this._rawRowHeight=!!this._networkLogLargeRowsSetting.get()?41:21;this._rowHeight=this._computeRowHeight();}
this._rawRowHeight=0;this._rowHeight=0;updateRowHeight.call(this);this._timeCalculator=new Network.NetworkTransferTimeCalculator();this._durationCalculator=new Network.NetworkTransferDurationCalculator();this._calculator=this._timeCalculator;this._columns=new Network.NetworkLogViewColumns(this,this._timeCalculator,this._durationCalculator,networkLogLargeRowsSetting);this._columns.show(this.element);this._staleRequests=new Set();this._mainRequestLoadTime=-1;this._mainRequestDOMContentLoadedTime=-1;this._highlightedSubstringChanges=[];this._filters=[];this._timeFilter=null;this._hoveredNode=null;this._recordingHint=null;this._refreshRequestId=null;this._highlightedNode=null;this.linkifier=new Components.Linkifier();this._recording=false;this._needsRefresh=false;this._headerHeight=0;this._groupLookups=new Map();this._groupLookups.set('Frame',new Network.NetworkFrameGrouper(this));this._activeGroupLookup=null;this._textFilterUI=new UI.TextFilterUI();this._textFilterUI.addEventListener(UI.FilterUI.Events.FilterChanged,this._filterChanged,this);filterBar.addFilter(this._textFilterUI);this._dataURLFilterUI=new UI.CheckboxFilterUI('hide-data-url',Common.UIString('Hide data URLs'),true,this._networkHideDataURLSetting);this._dataURLFilterUI.addEventListener(UI.FilterUI.Events.FilterChanged,this._filterChanged.bind(this),this);this._dataURLFilterUI.element().title=ls`Hides data: and blob: URLs`;filterBar.addFilter(this._dataURLFilterUI);const filterItems=Object.values(Common.resourceCategories).map(category=>({name:category.title,label:category.shortTitle,title:category.title}));this._resourceCategoryFilterUI=new UI.NamedBitSetFilterUI(filterItems,this._networkResourceTypeFiltersSetting);UI.ARIAUtils.setAccessibleName(this._resourceCategoryFilterUI.element(),ls`Resource types to include`);this._resourceCategoryFilterUI.addEventListener(UI.FilterUI.Events.FilterChanged,this._filterChanged.bind(this),this);filterBar.addFilter(this._resourceCategoryFilterUI);this._onlyIssuesFilterUI=new UI.CheckboxFilterUI('only-show-issues',ls`Only show requests with SameSite issues`,true,this._networkShowIssuesOnlySetting);this._onlyIssuesFilterUI.addEventListener(UI.FilterUI.Events.FilterChanged,this._filterChanged.bind(this),this);this._onlyIssuesFilterUI.element().title=ls`Only show requests with SameSite issues`;filterBar.addFilter(this._onlyIssuesFilterUI);this._filterParser=new TextUtils.FilterParser(Network.NetworkLogView._searchKeys);this._suggestionBuilder=new UI.FilterSuggestionBuilder(Network.NetworkLogView._searchKeys,Network.NetworkLogView._sortSearchValues);this._resetSuggestionBuilder();this._dataGrid=this._columns.dataGrid();this._setupDataGrid();this._columns.sortByCurrentColumn();filterBar.filterButton().addEventListener(UI.ToolbarButton.Events.Click,this._dataGrid.scheduleUpdate.bind(this._dataGrid,true));this._summaryToolbar=new UI.Toolbar('network-summary-bar',this.element);new UI.DropTarget(this.element,[UI.DropTarget.Type.File],Common.UIString('Drop HAR files here'),this._handleDrop.bind(this));Common.moduleSetting('networkColorCodeResourceTypes').addChangeListener(this._invalidateAllItems.bind(this,false),this);SDK.targetManager.observeModels(SDK.NetworkManager,this);SDK.networkLog.addEventListener(SDK.NetworkLog.Events.RequestAdded,this._onRequestUpdated,this);SDK.networkLog.addEventListener(SDK.NetworkLog.Events.RequestUpdated,this._onRequestUpdated,this);SDK.networkLog.addEventListener(SDK.NetworkLog.Events.Reset,this._reset,this);this._updateGroupByFrame();Common.moduleSetting('network.group-by-frame').addChangeListener(()=>this._updateGroupByFrame());this._filterBar=filterBar;}
_updateGroupByFrame(){const value=Common.moduleSetting('network.group-by-frame').get();this._setGrouping(value?'Frame':null);}
static _sortSearchValues(key,values){if(key===Network.NetworkLogView.FilterType.Priority){values.sort((a,b)=>{const aPriority=(PerfUI.uiLabelToNetworkPriority(a));const bPriority=(PerfUI.uiLabelToNetworkPriority(b));return PerfUI.networkPriorityWeight(aPriority)-PerfUI.networkPriorityWeight(bPriority);});}else{values.sort();}}
static _negativeFilter(filter,request){return!filter(request);}
static _requestPathFilter(regex,request){if(!regex){return false;}
return regex.test(request.path()+'/'+request.name());}
static _subdomains(domain){const result=[domain];let indexOfPeriod=domain.indexOf('.');while(indexOfPeriod!==-1){result.push('*'+domain.substring(indexOfPeriod));indexOfPeriod=domain.indexOf('.',indexOfPeriod+1);}
return result;}
static _createRequestDomainFilter(value){function escapeForRegExp(string){return string.escapeForRegExp();}
const escapedPattern=value.split('*').map(escapeForRegExp).join('.*');return Network.NetworkLogView._requestDomainFilter.bind(null,new RegExp('^'+escapedPattern+'$','i'));}
static _requestDomainFilter(regex,request){return regex.test(request.domain);}
static _runningRequestFilter(request){return!request.finished;}
static _fromCacheRequestFilter(request){return request.cached();}
static _interceptedByServiceWorkerFilter(request){return request.fetchedViaServiceWorker;}
static _initiatedByServiceWorkerFilter(request){return request.initiatedByServiceWorker();}
static _requestResponseHeaderFilter(value,request){return request.responseHeaderValue(value)!==undefined;}
static _requestMethodFilter(value,request){return request.requestMethod===value;}
static _requestPriorityFilter(value,request){return request.priority()===value;}
static _requestMimeTypeFilter(value,request){return request.mimeType===value;}
static _requestMixedContentFilter(value,request){if(value===Network.NetworkLogView.MixedContentFilterValues.Displayed){return request.mixedContentType===Protocol.Security.MixedContentType.OptionallyBlockable;}else if(value===Network.NetworkLogView.MixedContentFilterValues.Blocked){return request.mixedContentType===Protocol.Security.MixedContentType.Blockable&&request.wasBlocked();}else if(value===Network.NetworkLogView.MixedContentFilterValues.BlockOverridden){return request.mixedContentType===Protocol.Security.MixedContentType.Blockable&&!request.wasBlocked();}else if(value===Network.NetworkLogView.MixedContentFilterValues.All){return request.mixedContentType!==Protocol.Security.MixedContentType.None;}
return false;}
static _requestSchemeFilter(value,request){return request.scheme===value;}
static _requestSetCookieDomainFilter(value,request){const cookies=request.responseCookies;for(let i=0,l=cookies?cookies.length:0;i<l;++i){if(cookies[i].domain()===value){return true;}}
return false;}
static _requestSetCookieNameFilter(value,request){const cookies=request.responseCookies;for(let i=0,l=cookies?cookies.length:0;i<l;++i){if(cookies[i].name()===value){return true;}}
return false;}
static _requestSetCookieValueFilter(value,request){const cookies=request.responseCookies;for(let i=0,l=cookies?cookies.length:0;i<l;++i){if(cookies[i].value()===value){return true;}}
return false;}
static _requestSizeLargerThanFilter(value,request){return request.transferSize>=value;}
static _statusCodeFilter(value,request){return(''+request.statusCode)===value;}
static HTTPRequestsFilter(request){return request.parsedURL.isValid&&(request.scheme in Network.NetworkLogView.HTTPSchemas);}
static _requestTimeFilter(windowStart,windowEnd,request){if(request.issueTime()>windowEnd){return false;}
if(request.endTime!==-1&&request.endTime<windowStart){return false;}
return true;}
static _copyRequestHeaders(request){Host.InspectorFrontendHost.copyText(request.requestHeadersText());}
static _copyResponseHeaders(request){Host.InspectorFrontendHost.copyText(request.responseHeadersText);}
static async _copyResponse(request){const contentData=await request.contentData();let content=contentData.content||'';if(!request.contentType().isTextType()){content=Common.ContentProvider.contentAsDataURL(content,request.mimeType,contentData.encoded);}else if(contentData.encoded){content=window.atob(content);}
Host.InspectorFrontendHost.copyText(content);}
_handleDrop(dataTransfer){const items=dataTransfer.items;if(!items.length){return;}
const entry=items[0].webkitGetAsEntry();if(entry.isDirectory){return;}
entry.file(this.onLoadFromFile.bind(this));}
async onLoadFromFile(file){const outputStream=new Common.StringOutputStream();const reader=new Bindings.ChunkedFileReader(file,10000000);const success=await reader.read(outputStream);if(!success){this._harLoadFailed(reader.error().message);return;}
let harRoot;try{harRoot=new HARImporter.HARRoot(JSON.parse(outputStream.data()));}catch(e){this._harLoadFailed(e);return;}
SDK.networkLog.importRequests(HARImporter.Importer.requestsFromHARLog(harRoot.log));}
_harLoadFailed(message){Common.console.error('Failed to load HAR file with following error: '+message);}
_setGrouping(groupKey){if(this._activeGroupLookup){this._activeGroupLookup.reset();}
const groupLookup=groupKey?this._groupLookups.get(groupKey)||null:null;this._activeGroupLookup=groupLookup;this._invalidateAllItems();}
_computeRowHeight(){return Math.round(this._rawRowHeight*window.devicePixelRatio)/window.devicePixelRatio;}
nodeForRequest(request){return request[Network.NetworkLogView._networkNodeSymbol]||null;}
headerHeight(){return this._headerHeight;}
setRecording(recording){this._recording=recording;this._updateSummaryBar();}
modelAdded(networkManager){if(networkManager.target().parentTarget()){return;}
const resourceTreeModel=networkManager.target().model(SDK.ResourceTreeModel);if(resourceTreeModel){resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load,this._loadEventFired,this);resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.DOMContentLoaded,this._domContentLoadedEventFired,this);}}
modelRemoved(networkManager){if(!networkManager.target().parentTarget()){const resourceTreeModel=networkManager.target().model(SDK.ResourceTreeModel);if(resourceTreeModel){resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load,this._loadEventFired,this);resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.DOMContentLoaded,this._domContentLoadedEventFired,this);}}}
setWindow(start,end){if(!start&&!end){this._timeFilter=null;this._timeCalculator.setWindow(null);}else{this._timeFilter=Network.NetworkLogView._requestTimeFilter.bind(null,start,end);this._timeCalculator.setWindow(new Network.NetworkTimeBoundary(start,end));}
this._filterRequests();}
resetFocus(){this._dataGrid.element.focus();}
_resetSuggestionBuilder(){this._suggestionBuilder.clear();this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Is,Network.NetworkLogView.IsFilterType.Running);this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Is,Network.NetworkLogView.IsFilterType.FromCache);this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Is,Network.NetworkLogView.IsFilterType.ServiceWorkerIntercepted);this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Is,Network.NetworkLogView.IsFilterType.ServiceWorkerInitiated);this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.LargerThan,'100');this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.LargerThan,'10k');this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.LargerThan,'1M');this._textFilterUI.setSuggestionProvider(this._suggestionBuilder.completions.bind(this._suggestionBuilder));}
_filterChanged(event){this.removeAllNodeHighlights();this._parseFilterQuery(this._textFilterUI.value());this._filterRequests();}
_showRecordingHint(){this._hideRecordingHint();this._recordingHint=this.element.createChild('div','network-status-pane fill');const hintText=this._recordingHint.createChild('div','recording-hint');let reloadShortcutNode=null;const reloadShortcutDescriptor=UI.shortcutRegistry.shortcutDescriptorsForAction('inspector_main.reload')[0];if(reloadShortcutDescriptor){reloadShortcutNode=this._recordingHint.createChild('b');reloadShortcutNode.textContent=reloadShortcutDescriptor.name;}
if(this._recording){const recordingText=hintText.createChild('span');recordingText.textContent=Common.UIString('Recording network activity\u2026');if(reloadShortcutNode){hintText.createChild('br');hintText.appendChild(UI.formatLocalized('Perform a request or hit %s to record the reload.',[reloadShortcutNode]));}}else{const recordNode=hintText.createChild('b');recordNode.textContent=UI.shortcutRegistry.shortcutTitleForAction('network.toggle-recording');if(reloadShortcutNode){hintText.appendChild(UI.formatLocalized('Record (%s) or reload (%s) to display network activity.',[recordNode,reloadShortcutNode]));}else{hintText.appendChild(UI.formatLocalized('Record (%s) to display network activity.',[recordNode]));}}
hintText.createChild('br');hintText.appendChild(UI.XLink.create('https://developers.google.com/web/tools/chrome-devtools/network/?utm_source=devtools&utm_campaign=2019Q1','Learn more'));this._setHidden(true);}
_hideRecordingHint(){this._setHidden(false);if(this._recordingHint){this._recordingHint.remove();}
this._recordingHint=null;}
_setHidden(value){this._columns.setHidden(value);UI.ARIAUtils.setHidden(this._summaryToolbar.element,value);}
elementsToRestoreScrollPositionsFor(){if(!this._dataGrid)
{return[];}
return[this._dataGrid.scrollContainer];}
columnExtensionResolved(){this._invalidateAllItems(true);}
_setupDataGrid(){this._dataGrid.setRowContextMenuCallback((contextMenu,node)=>{const request=node.request();if(request){this.handleContextMenuForRequest(contextMenu,request);}});this._dataGrid.setStickToBottom(true);this._dataGrid.setName('networkLog');this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last);this._dataGrid.element.classList.add('network-log-grid');this._dataGrid.element.addEventListener('mousedown',this._dataGridMouseDown.bind(this),true);this._dataGrid.element.addEventListener('mousemove',this._dataGridMouseMove.bind(this),true);this._dataGrid.element.addEventListener('mouseleave',()=>this._setHoveredNode(null),true);this._dataGrid.element.addEventListener('keydown',event=>{if(isEnterOrSpaceKey(event)){this.dispatchEventToListeners(Network.NetworkLogView.Events.RequestActivated,true);event.consume(true);}});this._dataGrid.element.addEventListener('focus',this.updateNodeBackground.bind(this),true);this._dataGrid.element.addEventListener('blur',this.updateNodeBackground.bind(this),true);return this._dataGrid;}
_dataGridMouseMove(event){const node=(this._dataGrid.dataGridNodeFromNode((event.target)));const highlightInitiatorChain=event.shiftKey;this._setHoveredNode(node,highlightInitiatorChain);}
hoveredNode(){return this._hoveredNode;}
_setHoveredNode(node,highlightInitiatorChain){if(this._hoveredNode){this._hoveredNode.setHovered(false,false);}
this._hoveredNode=node;if(this._hoveredNode){this._hoveredNode.setHovered(true,!!highlightInitiatorChain);}}
_dataGridMouseDown(event){if(!this._dataGrid.selectedNode&&event.button){event.consume();}}
_updateSummaryBar(){this._hideRecordingHint();let transferSize=0;let resourceSize=0;let selectedNodeNumber=0;let selectedTransferSize=0;let selectedResourceSize=0;let baseTime=-1;let maxTime=-1;let nodeCount=0;for(const request of SDK.networkLog.requests()){const node=request[Network.NetworkLogView._networkNodeSymbol];if(!node){continue;}
nodeCount++;const requestTransferSize=request.transferSize;transferSize+=requestTransferSize;const requestResourceSize=request.resourceSize;resourceSize+=requestResourceSize;if(!node[Network.NetworkLogView._isFilteredOutSymbol]){selectedNodeNumber++;selectedTransferSize+=requestTransferSize;selectedResourceSize+=requestResourceSize;}
const networkManager=SDK.NetworkManager.forRequest(request);if(networkManager&&request.url()===networkManager.target().inspectedURL()&&request.resourceType()===Common.resourceTypes.Document&&!networkManager.target().parentTarget()){baseTime=request.startTime;}
if(request.endTime>maxTime){maxTime=request.endTime;}}
if(!nodeCount){this._showRecordingHint();return;}
this._summaryToolbar.removeToolbarItems();const appendChunk=(chunk,title)=>{const toolbarText=new UI.ToolbarText(chunk);toolbarText.setTitle(title?title:chunk);this._summaryToolbar.appendToolbarItem(toolbarText);return toolbarText.element;};if(selectedNodeNumber!==nodeCount){appendChunk(ls`${selectedNodeNumber} / ${nodeCount} requests`);this._summaryToolbar.appendSeparator();appendChunk(ls`${Number.bytesToString(selectedTransferSize)} / ${Number.bytesToString(transferSize)} transferred`,ls`${selectedTransferSize} B / ${transferSize} B transferred over network`);this._summaryToolbar.appendSeparator();appendChunk(ls`${Number.bytesToString(selectedResourceSize)} / ${Number.bytesToString(resourceSize)} resources`,ls`${selectedResourceSize} B / ${resourceSize} B resources loaded by the page`);}else{appendChunk(ls`${nodeCount} requests`);this._summaryToolbar.appendSeparator();appendChunk(ls`${Number.bytesToString(transferSize)} transferred`,ls`${transferSize} B transferred over network`);this._summaryToolbar.appendSeparator();appendChunk(ls`${Number.bytesToString(resourceSize)} resources`,ls`${resourceSize} B resources loaded by the page`);}
if(baseTime!==-1&&maxTime!==-1){this._summaryToolbar.appendSeparator();appendChunk(ls`Finish: ${Number.secondsToString(maxTime - baseTime)}`);if(this._mainRequestDOMContentLoadedTime!==-1&&this._mainRequestDOMContentLoadedTime>baseTime){this._summaryToolbar.appendSeparator();const domContentLoadedText=ls`DOMContentLoaded: ${Number.secondsToString(this._mainRequestDOMContentLoadedTime - baseTime)}`;appendChunk(domContentLoadedText).style.color=Network.NetworkLogView.getDCLEventColor();}
if(this._mainRequestLoadTime!==-1){this._summaryToolbar.appendSeparator();const loadText=ls`Load: ${Number.secondsToString(this._mainRequestLoadTime - baseTime)}`;appendChunk(loadText).style.color=Network.NetworkLogView.getLoadEventColor();}}}
scheduleRefresh(){if(this._needsRefresh){return;}
this._needsRefresh=true;if(this.isShowing()&&!this._refreshRequestId){this._refreshRequestId=this.element.window().requestAnimationFrame(this._refresh.bind(this));}}
addFilmStripFrames(times){this._columns.addEventDividers(times,'network-frame-divider');}
selectFilmStripFrame(time){this._columns.selectFilmStripFrame(time);}
clearFilmStripFrame(){this._columns.clearFilmStripFrame();}
_refreshIfNeeded(){if(this._needsRefresh){this._refresh();}}
_invalidateAllItems(deferUpdate){this._staleRequests=new Set(SDK.networkLog.requests());if(deferUpdate){this.scheduleRefresh();}else{this._refresh();}}
timeCalculator(){return this._timeCalculator;}
calculator(){return this._calculator;}
setCalculator(x){if(!x||this._calculator===x){return;}
if(this._calculator!==x){this._calculator=x;this._columns.setCalculator(this._calculator);}
this._calculator.reset();if(this._calculator.startAtZero){this._columns.hideEventDividers();}else{this._columns.showEventDividers();}
this._invalidateAllItems();}
_loadEventFired(event){if(!this._recording){return;}
const time=(event.data.loadTime);if(time){this._mainRequestLoadTime=time;this._columns.addEventDividers([time],'network-load-divider');}}
_domContentLoadedEventFired(event){if(!this._recording){return;}
const data=(event.data);if(data){this._mainRequestDOMContentLoadedTime=data;this._columns.addEventDividers([data],'network-dcl-divider');}}
wasShown(){this._refreshIfNeeded();this._columns.wasShown();}
willHide(){this._columns.willHide();}
onResize(){this._rowHeight=this._computeRowHeight();}
flatNodesList(){return this._dataGrid.rootNode().flatChildren();}
updateNodeBackground(){if(this._dataGrid.selectedNode){this._dataGrid.selectedNode.updateBackgroundColor();}}
updateNodeSelectedClass(isSelected){if(isSelected){this.element.classList.remove('no-node-selected');}else{this.element.classList.add('no-node-selected');}}
stylesChanged(){this._columns.scheduleRefresh();}
_refresh(){this._needsRefresh=false;if(this._refreshRequestId){this.element.window().cancelAnimationFrame(this._refreshRequestId);this._refreshRequestId=null;}
this.removeAllNodeHighlights();this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime);this._durationCalculator.updateBoundariesForEventTime(this._mainRequestLoadTime);this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMContentLoadedTime);this._durationCalculator.updateBoundariesForEventTime(this._mainRequestDOMContentLoadedTime);const nodesToInsert=new Map();const nodesToRefresh=[];const staleNodes=new Set();while(this._staleRequests.size){const request=this._staleRequests.firstValue();this._staleRequests.delete(request);let node=request[Network.NetworkLogView._networkNodeSymbol];if(!node){node=this._createNodeForRequest(request);}
staleNodes.add(node);}
for(const node of staleNodes){const isFilteredOut=!this._applyFilter(node);if(isFilteredOut&&node===this._hoveredNode){this._setHoveredNode(null);}
if(!isFilteredOut){nodesToRefresh.push(node);}
const request=node.request();this._timeCalculator.updateBoundaries(request);this._durationCalculator.updateBoundaries(request);const newParent=this._parentNodeForInsert(node);if(node[Network.NetworkLogView._isFilteredOutSymbol]===isFilteredOut&&node.parent===newParent){continue;}
node[Network.NetworkLogView._isFilteredOutSymbol]=isFilteredOut;const removeFromParent=node.parent&&(isFilteredOut||node.parent!==newParent);if(removeFromParent){let parent=node.parent;parent.removeChild(node);while(parent&&!parent.hasChildren()&&parent.dataGrid&&parent.dataGrid.rootNode()!==parent){const grandparent=parent.parent;grandparent.removeChild(parent);parent=grandparent;}}
if(!newParent||isFilteredOut){continue;}
if(!newParent.dataGrid&&!nodesToInsert.has(newParent)){nodesToInsert.set(newParent,this._dataGrid.rootNode());nodesToRefresh.push(newParent);}
nodesToInsert.set(node,newParent);}
for(const node of nodesToInsert.keys()){nodesToInsert.get(node).appendChild(node);}
for(const node of nodesToRefresh){node.refresh();}
this._updateSummaryBar();if(nodesToInsert.size){this._columns.sortByCurrentColumn();}
this._dataGrid.updateInstantly();this._didRefreshForTest();}
_didRefreshForTest(){}
_parentNodeForInsert(node){if(!this._activeGroupLookup){return this._dataGrid.rootNode();}
const groupNode=this._activeGroupLookup.groupNodeForRequest(node.request());if(!groupNode){return this._dataGrid.rootNode();}
return groupNode;}
_reset(){this.dispatchEventToListeners(Network.NetworkLogView.Events.RequestActivated,false);this._setHoveredNode(null);this._columns.reset();this._timeFilter=null;this._calculator.reset();this._timeCalculator.setWindow(null);this.linkifier.reset();if(this._activeGroupLookup){this._activeGroupLookup.reset();}
this._staleRequests.clear();this._resetSuggestionBuilder();this._mainRequestLoadTime=-1;this._mainRequestDOMContentLoadedTime=-1;this._dataGrid.rootNode().removeChildren();this._updateSummaryBar();this._dataGrid.setStickToBottom(true);this.scheduleRefresh();}
setTextFilterValue(filterString){this._textFilterUI.setValue(filterString);this._dataURLFilterUI.setChecked(false);this._onlyIssuesFilterUI.setChecked(false);this._resourceCategoryFilterUI.reset();}
_createNodeForRequest(request){const node=new Network.NetworkRequestNode(this,request);request[Network.NetworkLogView._networkNodeSymbol]=node;node[Network.NetworkLogView._isFilteredOutSymbol]=true;for(let redirect=request.redirectSource();redirect;redirect=redirect.redirectSource()){this._refreshRequest(redirect);}
return node;}
_onRequestUpdated(event){const request=(event.data);this._refreshRequest(request);}
_refreshRequest(request){Network.NetworkLogView._subdomains(request.domain).forEach(this._suggestionBuilder.addItem.bind(this._suggestionBuilder,Network.NetworkLogView.FilterType.Domain));this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Method,request.requestMethod);this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.MimeType,request.mimeType);this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Scheme,''+request.scheme);this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.StatusCode,''+request.statusCode);const priority=request.priority();if(priority){this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.Priority,PerfUI.uiLabelForNetworkPriority(priority));}
if(request.mixedContentType!==Protocol.Security.MixedContentType.None){this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.MixedContent,Network.NetworkLogView.MixedContentFilterValues.All);}
if(request.mixedContentType===Protocol.Security.MixedContentType.OptionallyBlockable){this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.MixedContent,Network.NetworkLogView.MixedContentFilterValues.Displayed);}
if(request.mixedContentType===Protocol.Security.MixedContentType.Blockable){const suggestion=request.wasBlocked()?Network.NetworkLogView.MixedContentFilterValues.Blocked:Network.NetworkLogView.MixedContentFilterValues.BlockOverridden;this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.MixedContent,suggestion);}
const responseHeaders=request.responseHeaders;for(let i=0,l=responseHeaders.length;i<l;++i){this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.HasResponseHeader,responseHeaders[i].name);}
const cookies=request.responseCookies;for(let i=0,l=cookies?cookies.length:0;i<l;++i){const cookie=cookies[i];this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCookieDomain,cookie.domain());this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCookieName,cookie.name());this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCookieValue,cookie.value());}
this._staleRequests.add(request);this.scheduleRefresh();}
rowHeight(){return this._rowHeight;}
switchViewMode(gridMode){this._columns.switchViewMode(gridMode);}
handleContextMenuForRequest(contextMenu,request){contextMenu.appendApplicableItems(request);let copyMenu=contextMenu.clipboardSection().appendSubMenuItem(Common.UIString('Copy'));const footerSection=copyMenu.footerSection();if(request){copyMenu.defaultSection().appendItem(UI.copyLinkAddressLabel(),Host.InspectorFrontendHost.copyText.bind(Host.InspectorFrontendHost,request.contentURL()));if(request.requestHeadersText()){copyMenu.defaultSection().appendItem(Common.UIString('Copy request headers'),Network.NetworkLogView._copyRequestHeaders.bind(null,request));}
if(request.responseHeadersText){copyMenu.defaultSection().appendItem(Common.UIString('Copy response headers'),Network.NetworkLogView._copyResponseHeaders.bind(null,request));}
if(request.finished){copyMenu.defaultSection().appendItem(Common.UIString('Copy response'),Network.NetworkLogView._copyResponse.bind(null,request));}
const disableIfBlob=request.isBlobRequest();if(Host.isWin()){footerSection.appendItem(Common.UIString('Copy as PowerShell'),this._copyPowerShellCommand.bind(this,request),disableIfBlob);footerSection.appendItem(Common.UIString('Copy as fetch'),this._copyFetchCall.bind(this,request),disableIfBlob);footerSection.appendItem(Common.UIString('Copy as cURL (cmd)'),this._copyCurlCommand.bind(this,request,'win'),disableIfBlob);footerSection.appendItem(Common.UIString('Copy as cURL (bash)'),this._copyCurlCommand.bind(this,request,'unix'),disableIfBlob);footerSection.appendItem(Common.UIString('Copy all as PowerShell'),this._copyAllPowerShellCommand.bind(this));footerSection.appendItem(Common.UIString('Copy all as fetch'),this._copyAllFetchCall.bind(this));footerSection.appendItem(Common.UIString('Copy all as cURL (cmd)'),this._copyAllCurlCommand.bind(this,'win'));footerSection.appendItem(Common.UIString('Copy all as cURL (bash)'),this._copyAllCurlCommand.bind(this,'unix'));}else{footerSection.appendItem(Common.UIString('Copy as fetch'),this._copyFetchCall.bind(this,request),disableIfBlob);footerSection.appendItem(Common.UIString('Copy as cURL'),this._copyCurlCommand.bind(this,request,'unix'),disableIfBlob);footerSection.appendItem(Common.UIString('Copy all as fetch'),this._copyAllFetchCall.bind(this));footerSection.appendItem(Common.UIString('Copy all as cURL'),this._copyAllCurlCommand.bind(this,'unix'));}}else{copyMenu=contextMenu.clipboardSection().appendSubMenuItem(Common.UIString('Copy'));}
footerSection.appendItem(Common.UIString('Copy all as HAR'),this._copyAll.bind(this));contextMenu.saveSection().appendItem(ls`Save all as HAR with content`,this.exportAll.bind(this));contextMenu.editSection().appendItem(Common.UIString('Clear browser cache'),this._clearBrowserCache.bind(this));contextMenu.editSection().appendItem(Common.UIString('Clear browser cookies'),this._clearBrowserCookies.bind(this));if(request){const maxBlockedURLLength=20;const manager=SDK.multitargetNetworkManager;let patterns=manager.blockedPatterns();function addBlockedURL(url){patterns.push({enabled:true,url:url});manager.setBlockedPatterns(patterns);manager.setBlockingEnabled(true);UI.viewManager.showView('network.blocked-urls');}
function removeBlockedURL(url){patterns=patterns.filter(pattern=>pattern.url!==url);manager.setBlockedPatterns(patterns);UI.viewManager.showView('network.blocked-urls');}
const urlWithoutScheme=request.parsedURL.urlWithoutScheme();if(urlWithoutScheme&&!patterns.find(pattern=>pattern.url===urlWithoutScheme)){contextMenu.debugSection().appendItem(Common.UIString('Block request URL'),addBlockedURL.bind(null,urlWithoutScheme));}else if(urlWithoutScheme){const croppedURL=urlWithoutScheme.trimMiddle(maxBlockedURLLength);contextMenu.debugSection().appendItem(Common.UIString('Unblock %s',croppedURL),removeBlockedURL.bind(null,urlWithoutScheme));}
const domain=request.parsedURL.domain();if(domain&&!patterns.find(pattern=>pattern.url===domain)){contextMenu.debugSection().appendItem(Common.UIString('Block request domain'),addBlockedURL.bind(null,domain));}else if(domain){const croppedDomain=domain.trimMiddle(maxBlockedURLLength);contextMenu.debugSection().appendItem(Common.UIString('Unblock %s',croppedDomain),removeBlockedURL.bind(null,domain));}
if(SDK.NetworkManager.canReplayRequest(request)){contextMenu.debugSection().appendItem(Common.UIString('Replay XHR'),SDK.NetworkManager.replayRequest.bind(null,request));}}}
_harRequests(){return SDK.networkLog.requests().filter(Network.NetworkLogView.HTTPRequestsFilter).filter(request=>{return request.finished||(request.resourceType()===Common.resourceTypes.WebSocket&&request.responseReceivedTime);});}
async _copyAll(){const harArchive={log:await SDK.HARLog.build(this._harRequests())};Host.InspectorFrontendHost.copyText(JSON.stringify(harArchive,null,2));}
async _copyCurlCommand(request,platform){const command=await this._generateCurlCommand(request,platform);Host.InspectorFrontendHost.copyText(command);}
async _copyAllCurlCommand(platform){const commands=await this._generateAllCurlCommand(SDK.networkLog.requests(),platform);Host.InspectorFrontendHost.copyText(commands);}
async _copyFetchCall(request,platform){const command=await this._generateFetchCall(request);Host.InspectorFrontendHost.copyText(command);}
async _copyAllFetchCall(){const commands=await this._generateAllFetchCall(SDK.networkLog.requests());Host.InspectorFrontendHost.copyText(commands);}
async _copyPowerShellCommand(request){const command=await this._generatePowerShellCommand(request);Host.InspectorFrontendHost.copyText(command);}
async _copyAllPowerShellCommand(){const commands=await this._generateAllPowerShellCommand(SDK.networkLog.requests());Host.InspectorFrontendHost.copyText(commands);}
async exportAll(){const url=SDK.targetManager.mainTarget().inspectedURL();const parsedURL=url.asParsedURL();const filename=parsedURL?parsedURL.host:'network-log';const stream=new Bindings.FileOutputStream();if(!await stream.open(filename+'.har')){return;}
const progressIndicator=new UI.ProgressIndicator();this._progressBarContainer.appendChild(progressIndicator.element);await Network.HARWriter.write(stream,this._harRequests(),progressIndicator);progressIndicator.done();stream.close();}
_clearBrowserCache(){if(confirm(Common.UIString('Are you sure you want to clear browser cache?'))){SDK.multitargetNetworkManager.clearBrowserCache();}}
_clearBrowserCookies(){if(confirm(Common.UIString('Are you sure you want to clear browser cookies?'))){SDK.multitargetNetworkManager.clearBrowserCookies();}}
_removeAllHighlights(){this.removeAllNodeHighlights();for(let i=0;i<this._highlightedSubstringChanges.length;++i){UI.revertDomChanges(this._highlightedSubstringChanges[i]);}
this._highlightedSubstringChanges=[];}
_applyFilter(node){const request=node.request();if(this._timeFilter&&!this._timeFilter(request)){return false;}
const categoryName=request.resourceType().category().title;if(!this._resourceCategoryFilterUI.accept(categoryName)){return false;}
if(this._dataURLFilterUI.checked()&&(request.parsedURL.isDataURL()||request.parsedURL.isBlobURL())){return false;}
if(this._onlyIssuesFilterUI.checked()&&!SDK.IssuesModel.hasIssues(request)){return false;}
if(request.statusText==='Service Worker Fallback Required'){return false;}
for(let i=0;i<this._filters.length;++i){if(!this._filters[i](request)){return false;}}
return true;}
_parseFilterQuery(query){const descriptors=this._filterParser.parse(query);this._filters=descriptors.map(descriptor=>{const key=descriptor.key;const text=descriptor.text||'';const regex=descriptor.regex;let filter;if(key){const defaultText=(key+':'+text).escapeForRegExp();filter=this._createSpecialFilter((key),text)||Network.NetworkLogView._requestPathFilter.bind(null,new RegExp(defaultText,'i'));}else if(descriptor.regex){filter=Network.NetworkLogView._requestPathFilter.bind(null,(regex));}else{filter=Network.NetworkLogView._requestPathFilter.bind(null,new RegExp(text.escapeForRegExp(),'i'));}
return descriptor.negative?Network.NetworkLogView._negativeFilter.bind(null,filter):filter;});}
_createSpecialFilter(type,value){switch(type){case Network.NetworkLogView.FilterType.Domain:return Network.NetworkLogView._createRequestDomainFilter(value);case Network.NetworkLogView.FilterType.HasResponseHeader:return Network.NetworkLogView._requestResponseHeaderFilter.bind(null,value);case Network.NetworkLogView.FilterType.Is:if(value.toLowerCase()===Network.NetworkLogView.IsFilterType.Running){return Network.NetworkLogView._runningRequestFilter;}
if(value.toLowerCase()===Network.NetworkLogView.IsFilterType.FromCache){return Network.NetworkLogView._fromCacheRequestFilter;}
if(value.toLowerCase()===Network.NetworkLogView.IsFilterType.ServiceWorkerIntercepted){return Network.NetworkLogView._interceptedByServiceWorkerFilter;}
if(value.toLowerCase()===Network.NetworkLogView.IsFilterType.ServiceWorkerInitiated){return Network.NetworkLogView._initiatedByServiceWorkerFilter;}
break;case Network.NetworkLogView.FilterType.LargerThan:return this._createSizeFilter(value.toLowerCase());case Network.NetworkLogView.FilterType.Method:return Network.NetworkLogView._requestMethodFilter.bind(null,value);case Network.NetworkLogView.FilterType.MimeType:return Network.NetworkLogView._requestMimeTypeFilter.bind(null,value);case Network.NetworkLogView.FilterType.MixedContent:return Network.NetworkLogView._requestMixedContentFilter.bind(null,(value));case Network.NetworkLogView.FilterType.Scheme:return Network.NetworkLogView._requestSchemeFilter.bind(null,value);case Network.NetworkLogView.FilterType.SetCookieDomain:return Network.NetworkLogView._requestSetCookieDomainFilter.bind(null,value);case Network.NetworkLogView.FilterType.SetCookieName:return Network.NetworkLogView._requestSetCookieNameFilter.bind(null,value);case Network.NetworkLogView.FilterType.SetCookieValue:return Network.NetworkLogView._requestSetCookieValueFilter.bind(null,value);case Network.NetworkLogView.FilterType.Priority:return Network.NetworkLogView._requestPriorityFilter.bind(null,PerfUI.uiLabelToNetworkPriority(value));case Network.NetworkLogView.FilterType.StatusCode:return Network.NetworkLogView._statusCodeFilter.bind(null,value);}
return null;}
_createSizeFilter(value){let multiplier=1;if(value.endsWith('k')){multiplier=1024;value=value.substring(0,value.length-1);}else if(value.endsWith('m')){multiplier=1024*1024;value=value.substring(0,value.length-1);}
const quantity=Number(value);if(isNaN(quantity)){return null;}
return Network.NetworkLogView._requestSizeLargerThanFilter.bind(null,quantity*multiplier);}
_filterRequests(){this._removeAllHighlights();this._invalidateAllItems();}
_reveal(request){this.removeAllNodeHighlights();const node=request[Network.NetworkLogView._networkNodeSymbol];if(!node||!node.dataGrid){return null;}
node.reveal();return node;}
revealAndHighlightRequest(request){const node=this._reveal(request);if(node){this._highlightNode(node);}}
selectRequest(request){this.setTextFilterValue('');const node=this._reveal(request);if(node){node.select();}}
removeAllNodeHighlights(){if(this._highlightedNode){this._highlightedNode.element().classList.remove('highlighted-row');this._highlightedNode=null;}}
_highlightNode(node){UI.runCSSAnimationOnce(node.element(),'highlighted-row');this._highlightedNode=node;}
_filterOutBlobRequests(requests){return requests.filter(request=>!request.isBlobRequest());}
async _generateFetchCall(request){const ignoredHeaders={'method':1,'path':1,'scheme':1,'version':1,'accept-charset':1,'accept-encoding':1,'access-control-request-headers':1,'access-control-request-method':1,'connection':1,'content-length':1,'cookie':1,'cookie2':1,'date':1,'dnt':1,'expect':1,'host':1,'keep-alive':1,'origin':1,'referer':1,'te':1,'trailer':1,'transfer-encoding':1,'upgrade':1,'via':1,'user-agent':1};const credentialHeaders={'cookie':1,'authorization':1};const url=JSON.stringify(request.url());const requestHeaders=request.requestHeaders();const headerData=requestHeaders.reduce((result,header)=>{const name=header.name;if(!ignoredHeaders[name.toLowerCase()]&&!name.includes(':')){result.append(name,header.value);}
return result;},new Headers());const headers={};for(const headerArray of headerData){headers[headerArray[0]]=headerArray[1];}
const credentials=request.requestCookies||requestHeaders.some(({name})=>credentialHeaders[name.toLowerCase()])?'include':'omit';const referrerHeader=requestHeaders.find(({name})=>name.toLowerCase()==='referer');const referrer=referrerHeader?referrerHeader.value:void 0;const referrerPolicy=request.referrerPolicy()||void 0;const requestBody=await request.requestFormData();const fetchOptions={credentials,headers:Object.keys(headers).length?headers:void 0,referrer,referrerPolicy,body:requestBody,method:request.requestMethod,mode:'cors'};const options=JSON.stringify(fetchOptions);return`fetch(${url}, ${options});`;}
async _generateAllFetchCall(requests){const nonBlobRequests=this._filterOutBlobRequests(requests);const commands=await Promise.all(nonBlobRequests.map(request=>this._generateFetchCall(request)));return commands.join(' ;\n');}
async _generateCurlCommand(request,platform){let command=['curl'];const ignoredHeaders={'accept-encoding':1,'host':1,'method':1,'path':1,'scheme':1,'version':1};function escapeStringWin(str){const encapsChars=/[\r\n]/.test(str)?'^"':'"';return encapsChars+
str.replace(/\\/g,'\\\\').replace(/"/g,'\\"').replace(/[^a-zA-Z0-9\s_\-:=+~'\/.',?;()*`]/g,'^$&').replace(/%(?=[a-zA-Z0-9_])/g,'%^').replace(/\r\n|[\n\r]/g,'^\n\n')+
encapsChars;}
function escapeStringPosix(str){function escapeCharacter(x){const code=x.charCodeAt(0);let hexString=code.toString(16);while(hexString.length<4){hexString='0'+hexString;}
return'\\u'+hexString;}
if(/[\u0000-\u001f\u007f-\u009f!]|\'/.test(str)){return'$\''+
str.replace(/\\/g,'\\\\').replace(/\'/g,'\\\'').replace(/\n/g,'\\n').replace(/\r/g,'\\r').replace(/[\u0000-\u001f\u007f-\u009f!]/g,escapeCharacter)+'\'';}else{return'\''+str+'\'';}}
const escapeString=platform==='win'?escapeStringWin:escapeStringPosix;command.push(escapeString(request.url()).replace(/[[{}\]]/g,'\\$&'));let inferredMethod='GET';const data=[];const requestContentType=request.requestContentType();const formData=await request.requestFormData();if(requestContentType&&requestContentType.startsWith('application/x-www-form-urlencoded')&&formData){data.push('--data');data.push(escapeString(formData));ignoredHeaders['content-length']=true;inferredMethod='POST';}else if(formData){data.push('--data-binary');data.push(escapeString(formData));ignoredHeaders['content-length']=true;inferredMethod='POST';}
if(request.requestMethod!==inferredMethod){command.push('-X');command.push(request.requestMethod);}
const requestHeaders=request.requestHeaders();for(let i=0;i<requestHeaders.length;i++){const header=requestHeaders[i];const name=header.name.replace(/^:/,'');if(name.toLowerCase()in ignoredHeaders){continue;}
command.push('-H');command.push(escapeString(name+': '+header.value));}
command=command.concat(data);command.push('--compressed');if(request.securityState()===Protocol.Security.SecurityState.Insecure){command.push('--insecure');}
return command.join(' ');}
async _generateAllCurlCommand(requests,platform){const nonBlobRequests=this._filterOutBlobRequests(requests);const commands=await Promise.all(nonBlobRequests.map(request=>this._generateCurlCommand(request,platform)));if(platform==='win'){return commands.join(' &\r\n');}else{return commands.join(' ;\n');}}
async _generatePowerShellCommand(request){const command=['Invoke-WebRequest'];const ignoredHeaders=new Set(['host','connection','proxy-connection','content-length','expect','range','content-type']);function escapeString(str){return'"'+
str.replace(/[`\$"]/g,'`$&').replace(/[^\x20-\x7E]/g,char=>'$([char]'+char.charCodeAt(0)+')')+'"';}
command.push('-Uri');command.push(escapeString(request.url()));if(request.requestMethod!=='GET'){command.push('-Method');command.push(escapeString(request.requestMethod));}
const requestHeaders=request.requestHeaders();const headerNameValuePairs=[];for(const header of requestHeaders){const name=header.name.replace(/^:/,'');if(ignoredHeaders.has(name.toLowerCase())){continue;}
headerNameValuePairs.push(escapeString(name)+'='+escapeString(header.value));}
if(headerNameValuePairs.length){command.push('-Headers');command.push('@{'+headerNameValuePairs.join('; ')+'}');}
const contentTypeHeader=requestHeaders.find(({name})=>name.toLowerCase()==='content-type');if(contentTypeHeader){command.push('-ContentType');command.push(escapeString(contentTypeHeader.value));}
const formData=await request.requestFormData();if(formData){command.push('-Body');const body=escapeString(formData);if(/[^\x20-\x7E]/.test(formData)){command.push('([System.Text.Encoding]::UTF8.GetBytes('+body+'))');}else{command.push(body);}}
return command.join(' ');}
async _generateAllPowerShellCommand(requests){const nonBlobRequests=this._filterOutBlobRequests(requests);const commands=await Promise.all(nonBlobRequests.map(request=>this._generatePowerShellCommand(request)));return commands.join(';\r\n');}
static getDCLEventColor(){if(UI.themeSupport.themeName()==='dark'){return'#03A9F4';}
return'#0867CB';}
static getLoadEventColor(){return UI.themeSupport.patchColorText('#B31412',UI.ThemeSupport.ColorUsage.Foreground);}};Network.NetworkLogView._isFilteredOutSymbol=Symbol('isFilteredOut');Network.NetworkLogView._networkNodeSymbol=Symbol('NetworkNode');Network.NetworkLogView.HTTPSchemas={'http':true,'https':true,'ws':true,'wss':true};Network.NetworkLogView.Events={RequestSelected:Symbol('RequestSelected'),RequestActivated:Symbol('RequestActivated')};Network.NetworkLogView.FilterType={Domain:'domain',HasResponseHeader:'has-response-header',Is:'is',LargerThan:'larger-than',Method:'method',MimeType:'mime-type',MixedContent:'mixed-content',Priority:'priority',Scheme:'scheme',SetCookieDomain:'set-cookie-domain',SetCookieName:'set-cookie-name',SetCookieValue:'set-cookie-value',StatusCode:'status-code'};Network.NetworkLogView.MixedContentFilterValues={All:'all',Displayed:'displayed',Blocked:'blocked',BlockOverridden:'block-overridden'};Network.NetworkLogView.IsFilterType={Running:'running',FromCache:'from-cache',ServiceWorkerIntercepted:'service-worker-intercepted',ServiceWorkerInitiated:'service-worker-initiated'};Network.NetworkLogView._searchKeys=Object.keys(Network.NetworkLogView.FilterType).map(key=>Network.NetworkLogView.FilterType[key]);Network.NetworkLogView.Filter;Network.GroupLookupInterface=function(){};Network.GroupLookupInterface.prototype={groupNodeForRequest:function(request){},reset:function(){}};;Network.NetworkLogViewColumns=class{constructor(networkLogView,timeCalculator,durationCalculator,networkLogLargeRowsSetting){this._networkLogView=networkLogView;this._persistantSettings=Common.settings.createSetting('networkLogColumns',{});this._networkLogLargeRowsSetting=networkLogLargeRowsSetting;this._networkLogLargeRowsSetting.addChangeListener(this._updateRowsSize,this);this._eventDividers=new Map();this._eventDividersShown=false;this._gridMode=true;this._columns=[];this._waterfallRequestsAreStale=false;this._waterfallScrollerWidthIsStale=true;this._popupLinkifier=new Components.Linkifier();this._calculatorsMap=new Map();this._calculatorsMap.set(Network.NetworkLogViewColumns._calculatorTypes.Time,timeCalculator);this._calculatorsMap.set(Network.NetworkLogViewColumns._calculatorTypes.Duration,durationCalculator);this._lastWheelTime=0;this._setupDataGrid();this._setupWaterfall();}
static _convertToDataGridDescriptor(columnConfig){return({id:columnConfig.id,title:columnConfig.title,sortable:columnConfig.sortable,align:columnConfig.align,nonSelectable:columnConfig.nonSelectable,weight:columnConfig.weight,allowInSortByEvenWhenHidden:columnConfig.allowInSortByEvenWhenHidden,});}
wasShown(){this._updateRowsSize();}
willHide(){this._popoverHelper.hidePopover();}
reset(){if(this._popoverHelper){this._popoverHelper.hidePopover();}
this._eventDividers.clear();}
_setupDataGrid(){const defaultColumns=Network.NetworkLogViewColumns._defaultColumns;const defaultColumnConfig=Network.NetworkLogViewColumns._defaultColumnConfig;this._columns=([]);for(const currentConfigColumn of defaultColumns){const columnConfig=(Object.assign({},defaultColumnConfig,currentConfigColumn));columnConfig.id=columnConfig.id;if(columnConfig.subtitle){columnConfig.titleDOMFragment=this._makeHeaderFragment(columnConfig.title,columnConfig.subtitle);}
this._columns.push(columnConfig);}
this._loadCustomColumnsAndSettings();this._popoverHelper=new UI.PopoverHelper(this._networkLogView.element,this._getPopoverRequest.bind(this));this._popoverHelper.setHasPadding(true);this._popoverHelper.setTimeout(300,300);this._dataGrid=new DataGrid.SortableDataGrid(this._columns.map(Network.NetworkLogViewColumns._convertToDataGridDescriptor));this._dataGrid.element.addEventListener('mousedown',event=>{if(!this._dataGrid.selectedNode&&event.button){event.consume();}},true);this._dataGridScroller=this._dataGrid.scrollContainer;this._updateColumns();this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortHandler,this);this._dataGrid.setHeaderContextMenuCallback(this._innerHeaderContextMenu.bind(this));this._activeWaterfallSortId=Network.NetworkLogViewColumns.WaterfallSortIds.StartTime;this._dataGrid.markColumnAsSortedBy(Network.NetworkLogViewColumns._initialSortColumn,DataGrid.DataGrid.Order.Ascending);this._splitWidget=new UI.SplitWidget(true,true,'networkPanelSplitViewWaterfall',200);const widget=this._dataGrid.asWidget();widget.setMinimumSize(150,0);this._splitWidget.setMainWidget(widget);}
_setupWaterfall(){this._waterfallColumn=new Network.NetworkWaterfallColumn(this._networkLogView.calculator());this._waterfallColumn.element.addEventListener('contextmenu',handleContextMenu.bind(this));this._waterfallColumn.element.addEventListener('mousewheel',this._onMouseWheel.bind(this,false),{passive:true});this._dataGridScroller.addEventListener('mousewheel',this._onMouseWheel.bind(this,true),true);this._waterfallScroller=this._waterfallColumn.contentElement.createChild('div','network-waterfall-v-scroll');this._waterfallScrollerContent=this._waterfallScroller.createChild('div','network-waterfall-v-scroll-content');this._dataGrid.addEventListener(DataGrid.DataGrid.Events.PaddingChanged,()=>{this._waterfallScrollerWidthIsStale=true;this._syncScrollers();});this._dataGrid.addEventListener(DataGrid.ViewportDataGrid.Events.ViewportCalculated,this._redrawWaterfallColumn.bind(this));this._createWaterfallHeader();this._waterfallColumn.contentElement.classList.add('network-waterfall-view');this._waterfallColumn.setMinimumSize(100,0);this._splitWidget.setSidebarWidget(this._waterfallColumn);this.switchViewMode(false);function handleContextMenu(event){const node=this._waterfallColumn.getNodeFromPoint(event.offsetX,event.offsetY);if(!node){return;}
const request=node.request();if(!request){return;}
const contextMenu=new UI.ContextMenu(event);this._networkLogView.handleContextMenuForRequest(contextMenu,request);contextMenu.show();}}
_onMouseWheel(shouldConsume,event){if(shouldConsume){event.consume(true);}
const hasRecentWheel=Date.now()-this._lastWheelTime<80;this._activeScroller.scrollBy({top:-event.wheelDeltaY,behavior:hasRecentWheel?'instant':'smooth'});this._syncScrollers();this._lastWheelTime=Date.now();}
_syncScrollers(){if(!this._waterfallColumn.isShowing()){return;}
this._waterfallScrollerContent.style.height=this._dataGridScroller.scrollHeight+'px';this._updateScrollerWidthIfNeeded();this._dataGridScroller.scrollTop=this._waterfallScroller.scrollTop;}
_updateScrollerWidthIfNeeded(){if(this._waterfallScrollerWidthIsStale){this._waterfallScrollerWidthIsStale=false;this._waterfallColumn.setRightPadding(this._waterfallScroller.offsetWidth-this._waterfallScrollerContent.offsetWidth);}}
_redrawWaterfallColumn(){if(!this._waterfallRequestsAreStale){this._updateScrollerWidthIfNeeded();this._waterfallColumn.update(this._activeScroller.scrollTop,this._eventDividersShown?this._eventDividers:undefined);return;}
this._syncScrollers();const nodes=this._networkLogView.flatNodesList();this._waterfallColumn.update(this._activeScroller.scrollTop,this._eventDividers,nodes);}
_createWaterfallHeader(){this._waterfallHeaderElement=this._waterfallColumn.contentElement.createChild('div','network-waterfall-header');this._waterfallHeaderElement.addEventListener('click',waterfallHeaderClicked.bind(this));this._waterfallHeaderElement.addEventListener('contextmenu',event=>this._innerHeaderContextMenu(new UI.ContextMenu(event)));const innerElement=this._waterfallHeaderElement.createChild('div');innerElement.textContent=Common.UIString('Waterfall');this._waterfallColumnSortIcon=UI.Icon.create('','sort-order-icon');this._waterfallHeaderElement.createChild('div','sort-order-icon-container').appendChild(this._waterfallColumnSortIcon);function waterfallHeaderClicked(){const sortOrders=DataGrid.DataGrid.Order;const wasSortedByWaterfall=this._dataGrid.sortColumnId()==='waterfall';const wasSortedAscending=this._dataGrid.isSortOrderAscending();const sortOrder=wasSortedByWaterfall&&wasSortedAscending?sortOrders.Descending:sortOrders.Ascending;this._dataGrid.markColumnAsSortedBy('waterfall',sortOrder);this._sortHandler();}}
setCalculator(x){this._waterfallColumn.setCalculator(x);}
scheduleRefresh(){this._waterfallColumn.scheduleDraw();}
_updateRowsSize(){const largeRows=!!this._networkLogLargeRowsSetting.get();this._dataGrid.element.classList.toggle('small',!largeRows);this._dataGrid.scheduleUpdate();this._waterfallScrollerWidthIsStale=true;this._waterfallColumn.setRowHeight(largeRows?41:21);this._waterfallScroller.classList.toggle('small',!largeRows);this._waterfallHeaderElement.classList.toggle('small',!largeRows);this._waterfallColumn.setHeaderHeight(this._waterfallScroller.offsetTop);}
show(element){this._splitWidget.show(element);}
setHidden(value){UI.ARIAUtils.setHidden(this._splitWidget.element,value);}
dataGrid(){return this._dataGrid;}
sortByCurrentColumn(){this._sortHandler();}
_sortHandler(){const columnId=this._dataGrid.sortColumnId();this._networkLogView.removeAllNodeHighlights();this._waterfallRequestsAreStale=true;if(columnId==='waterfall'){if(this._dataGrid.sortOrder()===DataGrid.DataGrid.Order.Ascending){this._waterfallColumnSortIcon.setIconType('smallicon-triangle-up');}else{this._waterfallColumnSortIcon.setIconType('smallicon-triangle-down');}
const sortFunction=Network.NetworkRequestNode.RequestPropertyComparator.bind(null,this._activeWaterfallSortId);this._dataGrid.sortNodes(sortFunction,!this._dataGrid.isSortOrderAscending());this._dataGridSortedForTest();return;}
this._waterfallColumnSortIcon.setIconType('');const columnConfig=this._columns.find(columnConfig=>columnConfig.id===columnId);if(!columnConfig||!columnConfig.sortingFunction){return;}
this._dataGrid.sortNodes(columnConfig.sortingFunction,!this._dataGrid.isSortOrderAscending());this._dataGridSortedForTest();}
_dataGridSortedForTest(){}
_updateColumns(){if(!this._dataGrid){return;}
const visibleColumns=({});if(this._gridMode){for(const columnConfig of this._columns){visibleColumns[columnConfig.id]=columnConfig.visible;}}else{const visibleColumn=this._columns.find(c=>c.hideableGroup==='path'&&c.visible);if(visibleColumn){visibleColumns[visibleColumn.id]=true;}else{visibleColumns.name=true;}}
this._dataGrid.setColumnsVisiblity(visibleColumns);}
switchViewMode(gridMode){if(this._gridMode===gridMode){return;}
this._gridMode=gridMode;if(gridMode){this._splitWidget.showBoth();this._activeScroller=this._waterfallScroller;this._waterfallScroller.scrollTop=this._dataGridScroller.scrollTop;this._dataGrid.setScrollContainer(this._waterfallScroller);}else{this._networkLogView.removeAllNodeHighlights();this._splitWidget.hideSidebar();this._activeScroller=this._dataGridScroller;this._dataGrid.setScrollContainer(this._dataGridScroller);}
this._networkLogView.element.classList.toggle('brief-mode',!gridMode);this._updateColumns();this._updateRowsSize();}
_toggleColumnVisibility(columnConfig){this._loadCustomColumnsAndSettings();columnConfig.visible=!columnConfig.visible;this._saveColumnsSettings();this._updateColumns();}
_saveColumnsSettings(){const saveableSettings={};for(const columnConfig of this._columns){saveableSettings[columnConfig.id]={visible:columnConfig.visible,title:columnConfig.title};}
this._persistantSettings.set(saveableSettings);}
_loadCustomColumnsAndSettings(){const savedSettings=this._persistantSettings.get();const columnIds=Object.keys(savedSettings);for(const columnId of columnIds){const setting=savedSettings[columnId];let columnConfig=this._columns.find(columnConfig=>columnConfig.id===columnId);if(!columnConfig){columnConfig=this._addCustomHeader(setting.title,columnId);}
if(columnConfig.hideable&&typeof setting.visible==='boolean'){columnConfig.visible=!!setting.visible;}
if(typeof setting.title==='string'){columnConfig.title=setting.title;}}}
_makeHeaderFragment(title,subtitle){const fragment=createDocumentFragment();fragment.createTextChild(title);const subtitleDiv=fragment.createChild('div','network-header-subtitle');subtitleDiv.createTextChild(subtitle);return fragment;}
_innerHeaderContextMenu(contextMenu){const columnConfigs=this._columns.filter(columnConfig=>columnConfig.hideable);const nonResponseHeaders=columnConfigs.filter(columnConfig=>!columnConfig.isResponseHeader);const hideableGroups=new Map();const nonResponseHeadersWithoutGroup=[];for(const columnConfig of nonResponseHeaders){if(!columnConfig.hideableGroup){nonResponseHeadersWithoutGroup.push(columnConfig);}else{const name=columnConfig.hideableGroup;if(!hideableGroups.has(name)){hideableGroups.set(name,[]);}
hideableGroups.get(name).push(columnConfig);}}
for(const group of hideableGroups.values()){const visibleColumns=group.filter(columnConfig=>columnConfig.visible);for(const columnConfig of group){const isDisabled=visibleColumns.length===1&&visibleColumns[0]===columnConfig;contextMenu.headerSection().appendCheckboxItem(columnConfig.title,this._toggleColumnVisibility.bind(this,columnConfig),columnConfig.visible,isDisabled);}
contextMenu.headerSection().appendSeparator();}
for(const columnConfig of nonResponseHeadersWithoutGroup){contextMenu.headerSection().appendCheckboxItem(columnConfig.title,this._toggleColumnVisibility.bind(this,columnConfig),columnConfig.visible);}
const responseSubMenu=contextMenu.footerSection().appendSubMenuItem(Common.UIString('Response Headers'));const responseHeaders=columnConfigs.filter(columnConfig=>columnConfig.isResponseHeader);for(const columnConfig of responseHeaders){responseSubMenu.defaultSection().appendCheckboxItem(columnConfig.title,this._toggleColumnVisibility.bind(this,columnConfig),columnConfig.visible);}
responseSubMenu.footerSection().appendItem(Common.UIString('Manage Header Columns\u2026'),this._manageCustomHeaderDialog.bind(this));const waterfallSortIds=Network.NetworkLogViewColumns.WaterfallSortIds;const waterfallSubMenu=contextMenu.footerSection().appendSubMenuItem(Common.UIString('Waterfall'));waterfallSubMenu.defaultSection().appendCheckboxItem(Common.UIString('Start Time'),setWaterfallMode.bind(this,waterfallSortIds.StartTime),this._activeWaterfallSortId===waterfallSortIds.StartTime);waterfallSubMenu.defaultSection().appendCheckboxItem(Common.UIString('Response Time'),setWaterfallMode.bind(this,waterfallSortIds.ResponseTime),this._activeWaterfallSortId===waterfallSortIds.ResponseTime);waterfallSubMenu.defaultSection().appendCheckboxItem(Common.UIString('End Time'),setWaterfallMode.bind(this,waterfallSortIds.EndTime),this._activeWaterfallSortId===waterfallSortIds.EndTime);waterfallSubMenu.defaultSection().appendCheckboxItem(Common.UIString('Total Duration'),setWaterfallMode.bind(this,waterfallSortIds.Duration),this._activeWaterfallSortId===waterfallSortIds.Duration);waterfallSubMenu.defaultSection().appendCheckboxItem(Common.UIString('Latency'),setWaterfallMode.bind(this,waterfallSortIds.Latency),this._activeWaterfallSortId===waterfallSortIds.Latency);contextMenu.show();function setWaterfallMode(sortId){let calculator=this._calculatorsMap.get(Network.NetworkLogViewColumns._calculatorTypes.Time);const waterfallSortIds=Network.NetworkLogViewColumns.WaterfallSortIds;if(sortId===waterfallSortIds.Duration||sortId===waterfallSortIds.Latency){calculator=this._calculatorsMap.get(Network.NetworkLogViewColumns._calculatorTypes.Duration);}
this._networkLogView.setCalculator(calculator);this._activeWaterfallSortId=sortId;this._dataGrid.markColumnAsSortedBy('waterfall',DataGrid.DataGrid.Order.Ascending);this._sortHandler();}}
_manageCustomHeaderDialog(){const customHeaders=[];for(const columnConfig of this._columns){if(columnConfig.isResponseHeader){customHeaders.push({title:columnConfig.title,editable:columnConfig.isCustomHeader});}}
const manageCustomHeaders=new Network.NetworkManageCustomHeadersView(customHeaders,headerTitle=>!!this._addCustomHeader(headerTitle),this._changeCustomHeader.bind(this),this._removeCustomHeader.bind(this));const dialog=new UI.Dialog();manageCustomHeaders.show(dialog.contentElement);dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);dialog.show(this._networkLogView.element);}
_removeCustomHeader(headerId){headerId=headerId.toLowerCase();const index=this._columns.findIndex(columnConfig=>columnConfig.id===headerId);if(index===-1){return false;}
this._columns.splice(index,1);this._dataGrid.removeColumn(headerId);this._saveColumnsSettings();this._updateColumns();return true;}
_addCustomHeader(headerTitle,headerId,index){if(!headerId){headerId=headerTitle.toLowerCase();}
if(index===undefined){index=this._columns.length-1;}
const currentColumnConfig=this._columns.find(columnConfig=>columnConfig.id===headerId);if(currentColumnConfig){return null;}
const columnConfig=(Object.assign({},Network.NetworkLogViewColumns._defaultColumnConfig,{id:headerId,title:headerTitle,isResponseHeader:true,isCustomHeader:true,visible:true,sortingFunction:Network.NetworkRequestNode.ResponseHeaderStringComparator.bind(null,headerId)}));this._columns.splice(index,0,columnConfig);if(this._dataGrid){this._dataGrid.addColumn(Network.NetworkLogViewColumns._convertToDataGridDescriptor(columnConfig),index);}
this._saveColumnsSettings();this._updateColumns();return columnConfig;}
_changeCustomHeader(oldHeaderId,newHeaderTitle,newHeaderId){if(!newHeaderId){newHeaderId=newHeaderTitle.toLowerCase();}
oldHeaderId=oldHeaderId.toLowerCase();const oldIndex=this._columns.findIndex(columnConfig=>columnConfig.id===oldHeaderId);const oldColumnConfig=this._columns[oldIndex];const currentColumnConfig=this._columns.find(columnConfig=>columnConfig.id===newHeaderId);if(!oldColumnConfig||(currentColumnConfig&&oldHeaderId!==newHeaderId)){return false;}
this._removeCustomHeader(oldHeaderId);this._addCustomHeader(newHeaderTitle,newHeaderId,oldIndex);return true;}
_getPopoverRequest(event){if(!this._gridMode){return null;}
const hoveredNode=this._networkLogView.hoveredNode();if(!hoveredNode){return null;}
const anchor=event.target.enclosingNodeOrSelfWithClass('network-script-initiated');if(!anchor){return null;}
const request=hoveredNode.request();if(!request){return null;}
return{box:anchor.boxInWindow(),show:popover=>{const content=Network.RequestInitiatorView.createStackTracePreview((request),this._popupLinkifier,false,()=>popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent));popover.contentElement.appendChild(content.element);return Promise.resolve(true);},hide:this._popupLinkifier.reset.bind(this._popupLinkifier)};}
addEventDividers(times,className){let color='transparent';switch(className){case'network-dcl-divider':color='#0867CB';break;case'network-load-divider':color='#B31412';break;default:return;}
const currentTimes=this._eventDividers.get(color)||[];this._eventDividers.set(color,currentTimes.concat(times));this._networkLogView.scheduleRefresh();}
hideEventDividers(){this._eventDividersShown=true;this._redrawWaterfallColumn();}
showEventDividers(){this._eventDividersShown=false;this._redrawWaterfallColumn();}
selectFilmStripFrame(time){this._eventDividers.set(Network.NetworkLogViewColumns._filmStripDividerColor,[time]);this._redrawWaterfallColumn();}
clearFilmStripFrame(){this._eventDividers.delete(Network.NetworkLogViewColumns._filmStripDividerColor);this._redrawWaterfallColumn();}};Network.NetworkLogViewColumns._initialSortColumn='waterfall';Network.NetworkLogViewColumns.Descriptor;Network.NetworkLogViewColumns._calculatorTypes={Duration:'Duration',Time:'Time'};Network.NetworkLogViewColumns._defaultColumnConfig={subtitle:null,visible:false,weight:6,sortable:true,hideable:true,hideableGroup:null,nonSelectable:false,isResponseHeader:false,isCustomHeader:false,allowInSortByEvenWhenHidden:false};Network.NetworkLogViewColumns._defaultColumns=[{id:'name',title:Common.UIString('Name'),subtitle:Common.UIString('Path'),visible:true,weight:20,hideable:true,hideableGroup:'path',sortingFunction:Network.NetworkRequestNode.NameComparator},{id:'path',title:ls`Path`,hideable:true,hideableGroup:'path',sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'path')},{id:'url',title:ls`Url`,hideable:true,hideableGroup:'path',sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'url')},{id:'method',title:Common.UIString('Method'),sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'requestMethod')},{id:'status',title:Common.UIString('Status'),visible:true,subtitle:Common.UIString('Text'),sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'statusCode')},{id:'protocol',title:Common.UIString('Protocol'),sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'protocol')},{id:'scheme',title:Common.UIString('Scheme'),sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'scheme')},{id:'domain',title:Common.UIString('Domain'),sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'domain')},{id:'remoteaddress',title:Common.UIString('Remote Address'),weight:10,align:DataGrid.DataGrid.Align.Right,sortingFunction:Network.NetworkRequestNode.RemoteAddressComparator},{id:'type',title:Common.UIString('Type'),visible:true,sortingFunction:Network.NetworkRequestNode.TypeComparator},{id:'initiator',title:Common.UIString('Initiator'),visible:true,weight:10,sortingFunction:Network.NetworkRequestNode.InitiatorComparator},{id:'cookies',title:Common.UIString('Cookies'),align:DataGrid.DataGrid.Align.Right,sortingFunction:Network.NetworkRequestNode.RequestCookiesCountComparator},{id:'setcookies',title:Common.UIString('Set Cookies'),align:DataGrid.DataGrid.Align.Right,sortingFunction:Network.NetworkRequestNode.ResponseCookiesCountComparator},{id:'size',title:Common.UIString('Size'),visible:true,subtitle:Common.UIString('Content'),align:DataGrid.DataGrid.Align.Right,sortingFunction:Network.NetworkRequestNode.SizeComparator},{id:'time',title:Common.UIString('Time'),visible:true,subtitle:Common.UIString('Latency'),align:DataGrid.DataGrid.Align.Right,sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'duration')},{id:'priority',title:Common.UIString('Priority'),sortingFunction:Network.NetworkRequestNode.PriorityComparator},{id:'connectionid',title:Common.UIString('Connection ID'),sortingFunction:Network.NetworkRequestNode.RequestPropertyComparator.bind(null,'connectionId')},{id:'cache-control',isResponseHeader:true,title:Common.UIString('Cache-Control'),sortingFunction:Network.NetworkRequestNode.ResponseHeaderStringComparator.bind(null,'cache-control')},{id:'connection',isResponseHeader:true,title:ls`${'Connection'}`,sortingFunction:Network.NetworkRequestNode.ResponseHeaderStringComparator.bind(null,'connection')},{id:'content-encoding',isResponseHeader:true,title:Common.UIString('Content-Encoding'),sortingFunction:Network.NetworkRequestNode.ResponseHeaderStringComparator.bind(null,'content-encoding')},{id:'content-length',isResponseHeader:true,title:Common.UIString('Content-Length'),align:DataGrid.DataGrid.Align.Right,sortingFunction:Network.NetworkRequestNode.ResponseHeaderNumberComparator.bind(null,'content-length')},{id:'etag',isResponseHeader:true,title:Common.UIString('ETag'),sortingFunction:Network.NetworkRequestNode.ResponseHeaderStringComparator.bind(null,'etag')},{id:'keep-alive',isResponseHeader:true,title:Common.UIString('Keep-Alive'),sortingFunction:Network.NetworkRequestNode.ResponseHeaderStringComparator.bind(null,'keep-alive')},{id:'last-modified',isResponseHeader:true,title:Common.UIString('Last-Modified'),sortingFunction:Network.NetworkRequestNode.ResponseHeaderDateComparator.bind(null,'last-modified')},{id:'server',isResponseHeader:true,title:Common.UIString('Server'),sortingFunction:Network.NetworkRequestNode.ResponseHeaderStringComparator.bind(null,'server')},{id:'vary',isResponseHeader:true,title:Common.UIString('Vary'),sortingFunction:Network.NetworkRequestNode.ResponseHeaderStringComparator.bind(null,'vary')},{id:'waterfall',title:ls`Waterfall`,visible:false,hideable:false,allowInSortByEvenWhenHidden:true}];Network.NetworkLogViewColumns._filmStripDividerColor='#fccc49';Network.NetworkLogViewColumns.WaterfallSortIds={StartTime:'startTime',ResponseTime:'responseReceivedTime',EndTime:'endTime',Duration:'duration',Latency:'latency'};;Network.NetworkFrameGrouper=class{constructor(parentView){this._parentView=parentView;this._activeGroups=new Map();}
groupNodeForRequest(request){const frame=SDK.ResourceTreeModel.frameForRequest(request);if(!frame||frame.isTopFrame()){return null;}
let groupNode=this._activeGroups.get(frame);if(groupNode){return groupNode;}
groupNode=new Network.FrameGroupNode(this._parentView,frame);this._activeGroups.set(frame,groupNode);return groupNode;}
reset(){this._activeGroups.clear();}};Network.FrameGroupNode=class extends Network.NetworkGroupNode{constructor(parentView,frame){super(parentView);this._frame=frame;}
displayName(){return new Common.ParsedURL(this._frame.url).domain()||this._frame.name||'<iframe>';}
renderCell(cell,columnId){super.renderCell(cell,columnId);const columnIndex=this.dataGrid.indexOfVisibleColumn(columnId);if(columnIndex===0){const name=this.displayName();cell.appendChild(UI.Icon.create('largeicon-navigator-frame','network-frame-group-icon'));cell.createTextChild(name);cell.title=name;}}};;Network.NetworkManageCustomHeadersView=class extends UI.VBox{constructor(columnData,addHeaderColumnCallback,changeHeaderColumnCallback,removeHeaderColumnCallback){super(true);this.registerRequiredCSS('network/networkManageCustomHeadersView.css');this.contentElement.classList.add('custom-headers-wrapper');this.contentElement.createChild('div','header').textContent=Common.UIString('Manage Header Columns');this._list=new UI.ListWidget(this);this._list.element.classList.add('custom-headers-list');this._list.registerRequiredCSS('network/networkManageCustomHeadersView.css');const placeholder=createElementWithClass('div','custom-headers-list-list-empty');placeholder.textContent=Common.UIString('No custom headers');this._list.setEmptyPlaceholder(placeholder);this._list.show(this.contentElement);this.contentElement.appendChild(UI.createTextButton(Common.UIString('Add custom header\u2026'),this._addButtonClicked.bind(this),'add-button'));this._columnConfigs=new Map();columnData.forEach(columnData=>this._columnConfigs.set(columnData.title.toLowerCase(),columnData));this._addHeaderColumnCallback=addHeaderColumnCallback;this._changeHeaderColumnCallback=changeHeaderColumnCallback;this._removeHeaderColumnCallback=removeHeaderColumnCallback;this.contentElement.tabIndex=0;}
wasShown(){this._headersUpdated();}
_headersUpdated(){this._list.clear();this._columnConfigs.forEach(headerData=>this._list.appendItem({header:headerData.title},headerData.editable));}
_addButtonClicked(){this._list.addNewItem(this._columnConfigs.size,{header:''});}
renderItem(item,editable){const element=createElementWithClass('div','custom-headers-list-item');const header=element.createChild('div','custom-header-name');header.textContent=item.header;header.title=item.header;return element;}
removeItemRequested(item,index){this._removeHeaderColumnCallback(item.header);this._columnConfigs.delete(item.header.toLowerCase());this._headersUpdated();}
commitEdit(item,editor,isNew){const headerId=editor.control('header').value.trim();let success;if(isNew){success=this._addHeaderColumnCallback(headerId);}else{success=this._changeHeaderColumnCallback(item.header,headerId);}
if(success&&!isNew){this._columnConfigs.delete(item.header.toLowerCase());}
if(success){this._columnConfigs.set(headerId.toLowerCase(),{title:headerId,editable:true});}
this._headersUpdated();}
beginEdit(item){const editor=this._createEditor();editor.control('header').value=item.header;return editor;}
_createEditor(){if(this._editor){return this._editor;}
const editor=new UI.ListWidget.Editor();this._editor=editor;const content=editor.contentElement();const titles=content.createChild('div','custom-headers-edit-row');titles.createChild('div','custom-headers-header').textContent=Common.UIString('Header Name');const fields=content.createChild('div','custom-headers-edit-row');fields.createChild('div','custom-headers-header').appendChild(editor.createInput('header','text','x-custom-header',validateHeader.bind(this)));return editor;function validateHeader(item,index,input){let valid=true;const headerId=editor.control('header').value.trim().toLowerCase();if(this._columnConfigs.has(headerId)&&item.header!==headerId){valid=false;}
return{valid};}}};;Network.NetworkSearchScope=class{performIndexing(progress){setImmediate(progress.done.bind(progress));}
async performSearch(searchConfig,progress,searchResultCallback,searchFinishedCallback){const promises=[];const requests=SDK.networkLog.requests().filter(request=>searchConfig.filePathMatchesFileQuery(request.url()));progress.setTotalWork(requests.length);for(const request of requests){const promise=this._searchRequest(searchConfig,request,progress);promises.push(promise);}
const results=await Promise.all(promises);if(progress.isCanceled()){searchFinishedCallback(false);return;}
for(const result of results.sort((r1,r2)=>r1.label().localeCompare(r2.label()))){if(result.matchesCount()>0){searchResultCallback(result);}}
progress.done();searchFinishedCallback(true);}
async _searchRequest(searchConfig,request,progress){let bodyMatches=[];if(request.contentType().isTextType()){bodyMatches=await request.searchInContent(searchConfig.query(),!searchConfig.ignoreCase(),searchConfig.isRegex());}
if(progress.isCanceled()){return null;}
const locations=[];if(stringMatchesQuery(request.url())){locations.push(Network.UIRequestLocation.urlMatch(request));}
for(const header of request.requestHeaders()){if(headerMatchesQuery(header)){locations.push(Network.UIRequestLocation.requestHeaderMatch(request,header));}}
for(const header of request.responseHeaders){if(headerMatchesQuery(header)){locations.push(Network.UIRequestLocation.responseHeaderMatch(request,header));}}
for(const match of bodyMatches){locations.push(Network.UIRequestLocation.bodyMatch(request,match));}
progress.worked();return new Network.NetworkSearchResult(request,locations);function headerMatchesQuery(header){return stringMatchesQuery(`${header.name}: ${header.value}`);}
function stringMatchesQuery(string){const flags=searchConfig.ignoreCase()?'i':'';const regExps=searchConfig.queries().map(query=>new RegExp(query,flags));let pos=0;for(const regExp of regExps){const match=string.substr(pos).match(regExp);if(!match){return false;}
pos+=match.index+match[0].length;}
return true;}}
stopSearch(){}};Network.UIRequestLocation=class{constructor(request,requestHeader,responseHeader,searchMatch,urlMatch){this.request=request;this.requestHeader=requestHeader;this.responseHeader=responseHeader;this.searchMatch=searchMatch;this.isUrlMatch=urlMatch;}
static requestHeaderMatch(request,header){return new Network.UIRequestLocation(request,header,null,null,false);}
static responseHeaderMatch(request,header){return new Network.UIRequestLocation(request,null,header,null,false);}
static bodyMatch(request,searchMatch){return new Network.UIRequestLocation(request,null,null,searchMatch,false);}
static urlMatch(request){return new Network.UIRequestLocation(request,null,null,null,true);}};Network.NetworkSearchResult=class{constructor(request,locations){this._request=request;this._locations=locations;}
matchesCount(){return this._locations.length;}
label(){return this._request.displayName;}
description(){const parsedUrl=this._request.parsedURL;if(!parsedUrl){return this._request.url();}
return parsedUrl.urlWithoutScheme();}
matchLineContent(index){const location=this._locations[index];if(location.isUrlMatch){return this._request.url();}
const header=location.requestHeader||location.responseHeader;if(header){return header.value;}
return location.searchMatch.lineContent;}
matchRevealable(index){return this._locations[index];}
matchLabel(index){const location=this._locations[index];if(location.isUrlMatch){return Common.UIString('URL');}
const header=location.requestHeader||location.responseHeader;if(header){return`${header.name}:`;}
return location.searchMatch.lineNumber+1;}};;Network.NetworkWaterfallColumn=class extends UI.VBox{constructor(calculator){super(false);this.registerRequiredCSS('network/networkWaterfallColumn.css');this._canvas=this.contentElement.createChild('canvas');this._canvas.tabIndex=-1;this.setDefaultFocusedElement(this._canvas);this._canvasPosition=this._canvas.getBoundingClientRect();this._leftPadding=5;this._fontSize=10;this._rightPadding=0;this._scrollTop=0;this._headerHeight=0;this._calculator=calculator;this._rawRowHeight=0;this._rowHeight=0;this._offsetWidth=0;this._offsetHeight=0;this._startTime=this._calculator.minimumBoundary();this._endTime=this._calculator.maximumBoundary();this._popoverHelper=new UI.PopoverHelper(this.element,this._getPopoverRequest.bind(this));this._popoverHelper.setHasPadding(true);this._popoverHelper.setTimeout(300,300);this._nodes=[];this._hoveredNode=null;this._eventDividers=new Map();this._updateRequestID;this.element.addEventListener('mousemove',this._onMouseMove.bind(this),true);this.element.addEventListener('mouseleave',event=>this._setHoveredNode(null,false),true);this.element.addEventListener('click',this._onClick.bind(this),true);this._styleForTimeRangeName=Network.NetworkWaterfallColumn._buildRequestTimeRangeStyle();const resourceStyleTuple=Network.NetworkWaterfallColumn._buildResourceTypeStyle();this._styleForWaitingResourceType=resourceStyleTuple[0];this._styleForDownloadingResourceType=resourceStyleTuple[1];const baseLineColor=UI.themeSupport.patchColorText('#a5a5a5',UI.ThemeSupport.ColorUsage.Foreground);this._wiskerStyle={borderColor:baseLineColor,lineWidth:1};this._hoverDetailsStyle={fillStyle:baseLineColor,lineWidth:1,borderColor:baseLineColor};this._pathForStyle=new Map();this._textLayers=[];this._computedDatagridStyle=null;}
static _buildRequestTimeRangeStyle(){const types=Network.RequestTimeRangeNames;const styleMap=new Map();styleMap.set(types.Connecting,{fillStyle:'#FF9800'});styleMap.set(types.SSL,{fillStyle:'#9C27B0'});styleMap.set(types.DNS,{fillStyle:'#009688'});styleMap.set(types.Proxy,{fillStyle:'#A1887F'});styleMap.set(types.Blocking,{fillStyle:'#AAAAAA'});styleMap.set(types.Push,{fillStyle:'#8CDBff'});styleMap.set(types.Queueing,{fillStyle:'white',lineWidth:2,borderColor:'lightgrey'});styleMap.set(types.Receiving,{fillStyle:'#03A9F4',lineWidth:2,borderColor:'#03A9F4'});styleMap.set(types.Waiting,{fillStyle:'#00C853'});styleMap.set(types.ReceivingPush,{fillStyle:'#03A9F4'});styleMap.set(types.ServiceWorker,{fillStyle:'orange'});styleMap.set(types.ServiceWorkerPreparation,{fillStyle:'orange'});return styleMap;}
static _buildResourceTypeStyle(){const baseResourceTypeColors=new Map([['document','hsl(215, 100%, 80%)'],['font','hsl(8, 100%, 80%)'],['media','hsl(90, 50%, 80%)'],['image','hsl(90, 50%, 80%)'],['script','hsl(31, 100%, 80%)'],['stylesheet','hsl(272, 64%, 80%)'],['texttrack','hsl(8, 100%, 80%)'],['websocket','hsl(0, 0%, 95%)'],['xhr','hsl(53, 100%, 80%)'],['fetch','hsl(53, 100%, 80%)'],['other','hsl(0, 0%, 95%)'],]);const waitingStyleMap=new Map();const downloadingStyleMap=new Map();for(const resourceType of Object.values(Common.resourceTypes)){let color=baseResourceTypeColors.get(resourceType.name());if(!color){color=baseResourceTypeColors.get('other');}
const borderColor=toBorderColor(color);waitingStyleMap.set(resourceType,{fillStyle:toWaitingColor(color),lineWidth:1,borderColor:borderColor});downloadingStyleMap.set(resourceType,{fillStyle:color,lineWidth:1,borderColor:borderColor});}
return[waitingStyleMap,downloadingStyleMap];function toBorderColor(color){const parsedColor=Common.Color.parse(color);const hsla=parsedColor.hsla();hsla[1]/=2;hsla[2]-=Math.min(hsla[2],0.2);return parsedColor.asString(null);}
function toWaitingColor(color){const parsedColor=Common.Color.parse(color);const hsla=parsedColor.hsla();hsla[2]*=1.1;return parsedColor.asString(null);}}
_resetPaths(){this._pathForStyle.clear();this._pathForStyle.set(this._wiskerStyle,new Path2D());this._styleForTimeRangeName.forEach(style=>this._pathForStyle.set(style,new Path2D()));this._styleForWaitingResourceType.forEach(style=>this._pathForStyle.set(style,new Path2D()));this._styleForDownloadingResourceType.forEach(style=>this._pathForStyle.set(style,new Path2D()));this._pathForStyle.set(this._hoverDetailsStyle,new Path2D());}
willHide(){this._popoverHelper.hidePopover();}
wasShown(){this.update();}
_onMouseMove(event){this._setHoveredNode(this.getNodeFromPoint(event.offsetX,event.offsetY),event.shiftKey);}
_onClick(event){const handled=this._setSelectedNode(this.getNodeFromPoint(event.offsetX,event.offsetY));if(handled){event.consume(true);}}
_getPopoverRequest(event){if(!this._hoveredNode){return null;}
const request=this._hoveredNode.request();if(!request){return null;}
const useTimingBars=!Common.moduleSetting('networkColorCodeResourceTypes').get()&&!this._calculator.startAtZero;let range;let start;let end;if(useTimingBars){range=Network.RequestTimingView.calculateRequestTimeRanges(request,0).find(data=>data.name===Network.RequestTimeRangeNames.Total);start=this._timeToPosition(range.start);end=this._timeToPosition(range.end);}else{range=this._getSimplifiedBarRange(request,0);start=range.start;end=range.end;}
if(end-start<50){const halfWidth=(end-start)/2;start=start+halfWidth-25;end=end-halfWidth+25;}
if(event.clientX<this._canvasPosition.left+start||event.clientX>this._canvasPosition.left+end){return null;}
const rowIndex=this._nodes.findIndex(node=>node.hovered());const barHeight=this._getBarHeight(range.name);const y=this._headerHeight+(this._rowHeight*rowIndex-this._scrollTop)+((this._rowHeight-barHeight)/2);if(event.clientY<this._canvasPosition.top+y||event.clientY>this._canvasPosition.top+y+barHeight){return null;}
const anchorBox=this.element.boxInWindow();anchorBox.x+=start;anchorBox.y+=y;anchorBox.width=end-start;anchorBox.height=barHeight;return{box:anchorBox,show:popover=>{const content=Network.RequestTimingView.createTimingTable((request),this._calculator);popover.contentElement.appendChild(content);return Promise.resolve(true);}};}
_setHoveredNode(node,highlightInitiatorChain){if(this._hoveredNode){this._hoveredNode.setHovered(false,false);}
this._hoveredNode=node;if(this._hoveredNode){this._hoveredNode.setHovered(true,highlightInitiatorChain);}}
_setSelectedNode(node){if(node&&node.dataGrid){node.select();node.dataGrid.element.focus();return true;}
return false;}
setRowHeight(height){this._rawRowHeight=height;this._updateRowHeight();}
_updateRowHeight(){this._rowHeight=Math.round(this._rawRowHeight*window.devicePixelRatio)/window.devicePixelRatio;}
setHeaderHeight(height){this._headerHeight=height;}
setRightPadding(padding){this._rightPadding=padding;this._calculateCanvasSize();}
setCalculator(calculator){this._calculator=calculator;}
getNodeFromPoint(x,y){if(y<=this._headerHeight){return null;}
return this._nodes[Math.floor((this._scrollTop+y-this._headerHeight)/this._rowHeight)];}
scheduleDraw(){if(this._updateRequestID){return;}
this._updateRequestID=this.element.window().requestAnimationFrame(()=>this.update());}
update(scrollTop,eventDividers,nodes){if(scrollTop!==undefined&&this._scrollTop!==scrollTop){this._popoverHelper.hidePopover();this._scrollTop=scrollTop;}
if(nodes){this._nodes=nodes;this._calculateCanvasSize();}
if(eventDividers!==undefined){this._eventDividers=eventDividers;}
if(this._updateRequestID){this.element.window().cancelAnimationFrame(this._updateRequestID);delete this._updateRequestID;}
this._startTime=this._calculator.minimumBoundary();this._endTime=this._calculator.maximumBoundary();this._resetCanvas();this._resetPaths();this._textLayers=[];this._draw();}
_resetCanvas(){const ratio=window.devicePixelRatio;this._canvas.width=this._offsetWidth*ratio;this._canvas.height=this._offsetHeight*ratio;this._canvas.style.width=this._offsetWidth+'px';this._canvas.style.height=this._offsetHeight+'px';}
onResize(){super.onResize();this._updateRowHeight();this._calculateCanvasSize();this.scheduleDraw();}
_calculateCanvasSize(){this._offsetWidth=this.contentElement.offsetWidth-this._rightPadding;this._offsetHeight=this.contentElement.offsetHeight;this._calculator.setDisplayWidth(this._offsetWidth);this._canvasPosition=this._canvas.getBoundingClientRect();}
_timeToPosition(time){const availableWidth=this._offsetWidth-this._leftPadding;const timeToPixel=availableWidth/(this._endTime-this._startTime);return Math.floor(this._leftPadding+(time-this._startTime)*timeToPixel);}
_didDrawForTest(){}
_draw(){const useTimingBars=!Common.moduleSetting('networkColorCodeResourceTypes').get()&&!this._calculator.startAtZero;const nodes=this._nodes;const context=this._canvas.getContext('2d');context.save();context.scale(window.devicePixelRatio,window.devicePixelRatio);context.translate(0,this._headerHeight);context.rect(0,0,this._offsetWidth,this._offsetHeight);context.clip();const firstRequestIndex=Math.floor(this._scrollTop/this._rowHeight);const lastRequestIndex=Math.min(nodes.length,firstRequestIndex+Math.ceil(this._offsetHeight/this._rowHeight));for(let i=firstRequestIndex;i<lastRequestIndex;i++){const rowOffset=this._rowHeight*i;const node=nodes[i];this._decorateRow(context,node,rowOffset-this._scrollTop);let drawNodes=[];if(node.hasChildren()&&!node.expanded){drawNodes=(node.flatChildren());}
drawNodes.push(node);for(const drawNode of drawNodes){if(useTimingBars){this._buildTimingBarLayers(drawNode,rowOffset-this._scrollTop);}else{this._buildSimplifiedBarLayers(context,drawNode,rowOffset-this._scrollTop);}}}
this._drawLayers(context);context.save();context.fillStyle=UI.themeSupport.patchColorText('#888',UI.ThemeSupport.ColorUsage.Foreground);for(const textData of this._textLayers){context.fillText(textData.text,textData.x,textData.y);}
context.restore();this._drawEventDividers(context);context.restore();const freeZoneAtLeft=75;const freeZoneAtRight=18;const dividersData=PerfUI.TimelineGrid.calculateGridOffsets(this._calculator);PerfUI.TimelineGrid.drawCanvasGrid(context,dividersData);PerfUI.TimelineGrid.drawCanvasHeaders(context,dividersData,time=>this._calculator.formatValue(time,dividersData.precision),this._fontSize,this._headerHeight,freeZoneAtLeft);context.clearRect(this._offsetWidth-freeZoneAtRight,0,freeZoneAtRight,this._headerHeight);this._didDrawForTest();}
_drawLayers(context){for(const entry of this._pathForStyle){const style=(entry[0]);const path=(entry[1]);context.save();context.beginPath();if(style.lineWidth){context.lineWidth=style.lineWidth;context.strokeStyle=style.borderColor;context.stroke(path);}
if(style.fillStyle){context.fillStyle=style.fillStyle;context.fill(path);}
context.restore();}}
_drawEventDividers(context){context.save();context.lineWidth=1;for(const color of this._eventDividers.keys()){context.strokeStyle=color;for(const time of this._eventDividers.get(color)){context.beginPath();const x=this._timeToPosition(time);context.moveTo(x,0);context.lineTo(x,this._offsetHeight);}
context.stroke();}
context.restore();}
_getBarHeight(type){const types=Network.RequestTimeRangeNames;switch(type){case types.Connecting:case types.SSL:case types.DNS:case types.Proxy:case types.Blocking:case types.Push:case types.Queueing:return 7;default:return 13;}}
_getSimplifiedBarRange(request,borderOffset){const drawWidth=this._offsetWidth-this._leftPadding;const percentages=this._calculator.computeBarGraphPercentages(request);return{start:this._leftPadding+Math.floor((percentages.start/100)*drawWidth)+borderOffset,mid:this._leftPadding+Math.floor((percentages.middle/100)*drawWidth)+borderOffset,end:this._leftPadding+Math.floor((percentages.end/100)*drawWidth)+borderOffset};}
_buildSimplifiedBarLayers(context,node,y){const request=node.request();if(!request){return;}
const borderWidth=1;const borderOffset=borderWidth%2===0?0:0.5;const ranges=this._getSimplifiedBarRange(request,borderOffset);const height=this._getBarHeight();y+=Math.floor(this._rowHeight/2-height/2+borderWidth)-borderWidth/2;const waitingStyle=this._styleForWaitingResourceType.get(request.resourceType());const waitingPath=this._pathForStyle.get(waitingStyle);waitingPath.rect(ranges.start,y,ranges.mid-ranges.start,height-borderWidth);const barWidth=Math.max(2,ranges.end-ranges.mid);const downloadingStyle=this._styleForDownloadingResourceType.get(request.resourceType());const downloadingPath=this._pathForStyle.get(downloadingStyle);downloadingPath.rect(ranges.mid,y,barWidth,height-borderWidth);let labels=null;if(node.hovered()){labels=this._calculator.computeBarGraphLabels(request);const barDotLineLength=10;const leftLabelWidth=context.measureText(labels.left).width;const rightLabelWidth=context.measureText(labels.right).width;const hoverLinePath=this._pathForStyle.get(this._hoverDetailsStyle);if(leftLabelWidth<ranges.mid-ranges.start){const midBarX=ranges.start+(ranges.mid-ranges.start-leftLabelWidth)/2;this._textLayers.push({text:labels.left,x:midBarX,y:y+this._fontSize});}else if(barDotLineLength+leftLabelWidth+this._leftPadding<ranges.start){this._textLayers.push({text:labels.left,x:ranges.start-leftLabelWidth-barDotLineLength-1,y:y+this._fontSize});hoverLinePath.moveTo(ranges.start-barDotLineLength,y+Math.floor(height/2));hoverLinePath.arc(ranges.start,y+Math.floor(height/2),2,0,2*Math.PI);hoverLinePath.moveTo(ranges.start-barDotLineLength,y+Math.floor(height/2));hoverLinePath.lineTo(ranges.start,y+Math.floor(height/2));}
const endX=ranges.mid+barWidth+borderOffset;if(rightLabelWidth<endX-ranges.mid){const midBarX=ranges.mid+(endX-ranges.mid-rightLabelWidth)/2;this._textLayers.push({text:labels.right,x:midBarX,y:y+this._fontSize});}else if(endX+barDotLineLength+rightLabelWidth<this._offsetWidth-this._leftPadding){this._textLayers.push({text:labels.right,x:endX+barDotLineLength+1,y:y+this._fontSize});hoverLinePath.moveTo(endX,y+Math.floor(height/2));hoverLinePath.arc(endX,y+Math.floor(height/2),2,0,2*Math.PI);hoverLinePath.moveTo(endX,y+Math.floor(height/2));hoverLinePath.lineTo(endX+barDotLineLength,y+Math.floor(height/2));}}
if(!this._calculator.startAtZero){const queueingRange=Network.RequestTimingView.calculateRequestTimeRanges(request,0).find(data=>data.name===Network.RequestTimeRangeNames.Total);const leftLabelWidth=labels?context.measureText(labels.left).width:0;const leftTextPlacedInBar=leftLabelWidth<ranges.mid-ranges.start;const wiskerTextPadding=13;const textOffset=(labels&&!leftTextPlacedInBar)?leftLabelWidth+wiskerTextPadding:0;const queueingStart=this._timeToPosition(queueingRange.start);if(ranges.start-textOffset>queueingStart){const wiskerPath=this._pathForStyle.get(this._wiskerStyle);wiskerPath.moveTo(queueingStart,y+Math.floor(height/2));wiskerPath.lineTo(ranges.start-textOffset,y+Math.floor(height/2));const wiskerHeight=height/2;wiskerPath.moveTo(queueingStart+borderOffset,y+wiskerHeight/2);wiskerPath.lineTo(queueingStart+borderOffset,y+height-wiskerHeight/2-1);}}}
_buildTimingBarLayers(node,y){const request=node.request();if(!request){return;}
const ranges=Network.RequestTimingView.calculateRequestTimeRanges(request,0);for(const range of ranges){if(range.name===Network.RequestTimeRangeNames.Total||range.name===Network.RequestTimeRangeNames.Sending||range.end-range.start===0){continue;}
const style=this._styleForTimeRangeName.get(range.name);const path=this._pathForStyle.get(style);const lineWidth=style.lineWidth||0;const height=this._getBarHeight(range.name);const middleBarY=y+Math.floor(this._rowHeight/2-height/2)+lineWidth/2;const start=this._timeToPosition(range.start);const end=this._timeToPosition(range.end);path.rect(start,middleBarY,end-start,height-lineWidth);}}
_decorateRow(context,node,y){if(!this._computedDatagridStyle&&node.dataGrid){this._computedDatagridStyle=window.getComputedStyle(node.dataGrid.element);}
if(!this._computedDatagridStyle){context.restore();return;}
const nodeBgColor=node.backgroundColor();context.save();context.beginPath();context.fillStyle=this._computedDatagridStyle.getPropertyValue(nodeBgColor);context.rect(0,y,this._offsetWidth,this._rowHeight);context.fill();context.restore();}};Network.NetworkWaterfallColumn._LayerStyle;Network.NetworkWaterfallColumn._TextLayer;;Network.RequestCookiesView=class extends UI.Widget{constructor(request){super();this.registerRequiredCSS('network/requestCookiesView.css');this.element.classList.add('request-cookies-view');this._request=request;this._detailedRequestCookies=null;this._showFilteredOutCookiesSetting=Common.settings.createSetting('show-filtered-out-request-cookies',false);this._emptyWidget=new UI.EmptyWidget(Common.UIString('This request has no cookies.'));this._emptyWidget.show(this.element);this._requestCookiesTitle=this.element.createChild('div');const titleText=this._requestCookiesTitle.createChild('span','request-cookies-title');titleText.textContent=ls`Request Cookies`;titleText.title=ls`Cookies that were sent to the server in the 'cookie' header of the request`;const requestCookiesCheckbox=UI.SettingsUI.createSettingCheckbox(ls`show filtered out request cookies`,this._showFilteredOutCookiesSetting,true);requestCookiesCheckbox.checkboxElement.addEventListener('change',()=>{this._refreshRequestCookiesView();});this._requestCookiesTitle.appendChild(requestCookiesCheckbox);this._requestCookiesEmpty=this.element.createChild('div','cookies-panel-item');this._requestCookiesEmpty.textContent=ls`No request cookies were sent.`;this._requestCookiesTable=new CookieTable.CookiesTable(true);this._requestCookiesTable.contentElement.classList.add('cookie-table','cookies-panel-item');this._requestCookiesTable.show(this.element);this._responseCookiesTitle=this.element.createChild('div','request-cookies-title');this._responseCookiesTitle.textContent=ls`Response Cookies`;this._responseCookiesTitle.title=ls`Cookies that were received from the server in the 'set-cookie' header of the response`;this._responseCookiesTable=new CookieTable.CookiesTable(true);this._responseCookiesTable.contentElement.classList.add('cookie-table','cookies-panel-item');this._responseCookiesTable.show(this.element);this._malformedResponseCookiesTitle=this.element.createChild('div','request-cookies-title');this._malformedResponseCookiesTitle.textContent=ls`Malformed Response Cookies`;this._malformedResponseCookiesTitle.title=ls`Cookies that were received from the server in the 'set-cookie' header of the response but were malformed`;this._malformedResponseCookiesList=this.element.createChild('div');}
_getRequestCookies(){let requestCookies=[];const requestCookieToBlockedReasons=new Map();if(this._request.requestCookies){requestCookies=this._request.requestCookies.slice();if(this._detailedRequestCookies){requestCookies=requestCookies.map(cookie=>{for(const detailedCookie of(this._detailedRequestCookies||[])){if(detailedCookie.name()===cookie.name()&&detailedCookie.value()===cookie.value()){return detailedCookie;}}
return cookie;});}else{const networkManager=SDK.NetworkManager.forRequest(this._request);if(networkManager){const cookieModel=networkManager.target().model(SDK.CookieModel);if(cookieModel){cookieModel.getCookies([this._request.url()]).then(cookies=>{this._detailedRequestCookies=cookies;this._refreshRequestCookiesView();});}}}}
if(this._showFilteredOutCookiesSetting.get()){for(const blockedCookie of this._request.blockedRequestCookies()){requestCookieToBlockedReasons.set(blockedCookie.cookie,blockedCookie.blockedReasons.map(blockedReason=>{return{attribute:SDK.NetworkRequest.cookieBlockedReasonToAttribute(blockedReason),uiString:SDK.NetworkRequest.cookieBlockedReasonToUiString(blockedReason)};}));requestCookies.push(blockedCookie.cookie);}}
return{requestCookies,requestCookieToBlockedReasons};}
_getResponseCookies(){let responseCookies=[];const responseCookieToBlockedReasons=new Map();const malformedResponseCookies=[];if(this._request.responseCookies){const blockedCookieLines=this._request.blockedResponseCookies().map(blockedCookie=>blockedCookie.cookieLine);responseCookies=this._request.responseCookies.filter(cookie=>{if(blockedCookieLines.includes(cookie.getCookieLine())){blockedCookieLines.remove(cookie.getCookieLine(),true);return false;}
return true;});for(const blockedCookie of this._request.blockedResponseCookies()){const parsedCookies=SDK.CookieParser.parseSetCookie(blockedCookie.cookieLine);if(!parsedCookies.length||blockedCookie.blockedReasons.includes(Protocol.Network.SetCookieBlockedReason.SyntaxError)){malformedResponseCookies.push(blockedCookie);continue;}
const cookie=parsedCookies[0];responseCookieToBlockedReasons.set(cookie,blockedCookie.blockedReasons.map(blockedReason=>{return{attribute:SDK.NetworkRequest.setCookieBlockedReasonToAttribute(blockedReason),uiString:SDK.NetworkRequest.setCookieBlockedReasonToUiString(blockedReason)};}));responseCookies.push(cookie);}}
return{responseCookies,responseCookieToBlockedReasons,malformedResponseCookies};}
_refreshRequestCookiesView(){if(!this.isShowing()){return;}
const{requestCookies,requestCookieToBlockedReasons}=this._getRequestCookies();const{responseCookies,responseCookieToBlockedReasons,malformedResponseCookies}=this._getResponseCookies();if(requestCookies.length){this._requestCookiesTitle.classList.remove('hidden');this._requestCookiesEmpty.classList.add('hidden');this._requestCookiesTable.showWidget();this._requestCookiesTable.setCookies(requestCookies,requestCookieToBlockedReasons);}else if(this._request.blockedRequestCookies().length){this._requestCookiesTitle.classList.remove('hidden');this._requestCookiesEmpty.classList.remove('hidden');this._requestCookiesTable.hideWidget();}else{this._requestCookiesTitle.classList.add('hidden');this._requestCookiesEmpty.classList.add('hidden');this._requestCookiesTable.hideWidget();}
if(responseCookies.length){this._responseCookiesTitle.classList.remove('hidden');this._responseCookiesTable.showWidget();this._responseCookiesTable.setCookies(responseCookies,responseCookieToBlockedReasons);}else{this._responseCookiesTitle.classList.add('hidden');this._responseCookiesTable.hideWidget();}
if(malformedResponseCookies.length){this._malformedResponseCookiesTitle.classList.remove('hidden');this._malformedResponseCookiesList.classList.remove('hidden');this._malformedResponseCookiesList.removeChildren();for(const malformedCookie of malformedResponseCookies){const listItem=this._malformedResponseCookiesList.createChild('span','cookie-line source-code');const icon=UI.Icon.create('smallicon-error','cookie-warning-icon');listItem.appendChild(icon);listItem.createTextChild(malformedCookie.cookieLine);listItem.title=SDK.NetworkRequest.setCookieBlockedReasonToUiString(Protocol.Network.SetCookieBlockedReason.SyntaxError);}}else{this._malformedResponseCookiesTitle.classList.add('hidden');this._malformedResponseCookiesList.classList.add('hidden');}}
wasShown(){this._request.addEventListener(SDK.NetworkRequest.Events.RequestHeadersChanged,this._cookiesUpdated,this);this._request.addEventListener(SDK.NetworkRequest.Events.ResponseHeadersChanged,this._cookiesUpdated,this);if(this._gotCookies()){this._refreshRequestCookiesView();this._emptyWidget.hideWidget();}else{this._emptyWidget.showWidget();}}
willHide(){this._request.removeEventListener(SDK.NetworkRequest.Events.RequestHeadersChanged,this._cookiesUpdated,this);this._request.removeEventListener(SDK.NetworkRequest.Events.ResponseHeadersChanged,this._cookiesUpdated,this);}
_gotCookies(){return!!(this._request.requestCookies&&this._request.requestCookies.length)||!!(this._request.responseCookies&&this._request.responseCookies.length);}
_cookiesUpdated(){if(!this.isShowing()){return;}
if(this._gotCookies()){this._refreshRequestCookiesView();this._emptyWidget.hideWidget();}else{this._emptyWidget.showWidget();}}};;Network.RequestHeadersView=class extends UI.VBox{constructor(request){super();this.registerRequiredCSS('network/requestHeadersView.css');this.element.classList.add('request-headers-view');this._request=request;this._decodeRequestParameters=true;this._showRequestHeadersText=false;this._showResponseHeadersText=false;this._highlightedElement=null;const root=new UI.TreeOutlineInShadow();root.registerRequiredCSS('object_ui/objectValue.css');root.registerRequiredCSS('object_ui/objectPropertiesSection.css');root.registerRequiredCSS('network/requestHeadersTree.css');root.element.classList.add('request-headers-tree');root.makeDense();this.element.appendChild(root.element);const generalCategory=new Network.RequestHeadersView.Category(root,'general',Common.UIString('General'));generalCategory.hidden=false;this._root=generalCategory;this._urlItem=generalCategory.createLeaf();this._requestMethodItem=generalCategory.createLeaf();this._statusCodeItem=generalCategory.createLeaf();this._remoteAddressItem=generalCategory.createLeaf();this._remoteAddressItem.hidden=true;this._referrerPolicyItem=generalCategory.createLeaf();this._referrerPolicyItem.hidden=true;this._responseHeadersCategory=new Network.RequestHeadersView.Category(root,'responseHeaders','');this._requestHeadersCategory=new Network.RequestHeadersView.Category(root,'requestHeaders','');this._queryStringCategory=new Network.RequestHeadersView.Category(root,'queryString','');this._formDataCategory=new Network.RequestHeadersView.Category(root,'formData','');this._requestPayloadCategory=new Network.RequestHeadersView.Category(root,'requestPayload',Common.UIString('Request Payload'));}
wasShown(){this._clearHighlight();this._request.addEventListener(SDK.NetworkRequest.Events.RemoteAddressChanged,this._refreshRemoteAddress,this);this._request.addEventListener(SDK.NetworkRequest.Events.RequestHeadersChanged,this._refreshRequestHeaders,this);this._request.addEventListener(SDK.NetworkRequest.Events.ResponseHeadersChanged,this._refreshResponseHeaders,this);this._request.addEventListener(SDK.NetworkRequest.Events.FinishedLoading,this._refreshHTTPInformation,this);this._refreshURL();this._refreshQueryString();this._refreshRequestHeaders();this._refreshResponseHeaders();this._refreshHTTPInformation();this._refreshRemoteAddress();this._refreshReferrerPolicy();this._root.select(true,false);}
willHide(){this._request.removeEventListener(SDK.NetworkRequest.Events.RemoteAddressChanged,this._refreshRemoteAddress,this);this._request.removeEventListener(SDK.NetworkRequest.Events.RequestHeadersChanged,this._refreshRequestHeaders,this);this._request.removeEventListener(SDK.NetworkRequest.Events.ResponseHeadersChanged,this._refreshResponseHeaders,this);this._request.removeEventListener(SDK.NetworkRequest.Events.FinishedLoading,this._refreshHTTPInformation,this);}
_formatHeader(name,value){const fragment=createDocumentFragment();fragment.createChild('div','header-name').textContent=name+': ';fragment.createChild('span','header-separator');fragment.createChild('div','header-value source-code').textContent=value;return fragment;}
_formatParameter(value,className,decodeParameters){let errorDecoding=false;if(decodeParameters){value=value.replace(/\+/g,' ');if(value.indexOf('%')>=0){try{value=decodeURIComponent(value);}catch(e){errorDecoding=true;}}}
const div=createElementWithClass('div',className);if(value===''){div.classList.add('empty-value');}
if(errorDecoding){div.createChild('span','header-decode-error').textContent=Common.UIString('(unable to decode value)');}else{div.textContent=value;}
return div;}
_refreshURL(){this._urlItem.title=this._formatHeader(Common.UIString('Request URL'),this._request.url());}
_refreshQueryString(){const queryString=this._request.queryString();const queryParameters=this._request.queryParameters;this._queryStringCategory.hidden=!queryParameters;if(queryParameters){this._refreshParams(Common.UIString('Query String Parameters'),queryParameters,queryString,this._queryStringCategory);}}
async _refreshFormData(){this._formDataCategory.hidden=true;this._requestPayloadCategory.hidden=true;const formData=await this._request.requestFormData();if(!formData){return;}
const formParameters=await this._request.formParameters();if(formParameters){this._formDataCategory.hidden=false;this._refreshParams(Common.UIString('Form Data'),formParameters,formData,this._formDataCategory);}else{this._requestPayloadCategory.hidden=false;try{const json=JSON.parse(formData);this._refreshRequestJSONPayload(json,formData);}catch(e){this._populateTreeElementWithSourceText(this._requestPayloadCategory,formData);}}}
_populateTreeElementWithSourceText(treeElement,sourceText){const max_len=3000;const text=(sourceText||'').trim();const trim=text.length>max_len;const sourceTextElement=createElementWithClass('span','header-value source-code');sourceTextElement.textContent=trim?text.substr(0,max_len):text;const sourceTreeElement=new UI.TreeElement(sourceTextElement);treeElement.removeChildren();treeElement.appendChild(sourceTreeElement);if(!trim){return;}
const showMoreButton=createElementWithClass('button','request-headers-show-more-button');showMoreButton.textContent=Common.UIString('Show more');function showMore(){showMoreButton.remove();sourceTextElement.textContent=text;sourceTreeElement.listItemElement.removeEventListener('contextmenu',onContextMenuShowMore);}
showMoreButton.addEventListener('click',showMore);function onContextMenuShowMore(event){const contextMenu=new UI.ContextMenu(event);const section=contextMenu.newSection();section.appendItem(ls`Show more`,showMore);contextMenu.show();}
sourceTreeElement.listItemElement.addEventListener('contextmenu',onContextMenuShowMore);sourceTextElement.appendChild(showMoreButton);}
_refreshParams(title,params,sourceText,paramsTreeElement){paramsTreeElement.removeChildren();paramsTreeElement.listItemElement.removeChildren();paramsTreeElement.listItemElement.createChild('div','selection fill');paramsTreeElement.listItemElement.createTextChild(title);const headerCount=createElementWithClass('span','header-count');headerCount.textContent=Common.UIString('\xA0(%d)',params.length);paramsTreeElement.listItemElement.appendChild(headerCount);const shouldViewSource=paramsTreeElement[Network.RequestHeadersView._viewSourceSymbol];if(shouldViewSource){this._appendParamsSource(title,params,sourceText,paramsTreeElement);}else{this._appendParamsParsed(title,params,sourceText,paramsTreeElement);}}
_appendParamsSource(title,params,sourceText,paramsTreeElement){this._populateTreeElementWithSourceText(paramsTreeElement,sourceText);const listItemElement=paramsTreeElement.listItemElement;const viewParsed=function(event){listItemElement.removeEventListener('contextmenu',viewParsedContextMenu);paramsTreeElement[Network.RequestHeadersView._viewSourceSymbol]=false;this._refreshParams(title,params,sourceText,paramsTreeElement);event.consume();};const viewParsedContextMenu=function(event){if(!paramsTreeElement.expanded){return;}
const contextMenu=new UI.ContextMenu(event);contextMenu.newSection().appendItem(ls`View parsed`,viewParsed.bind(this,event));contextMenu.show();}.bind(this);const viewParsedButton=this._createViewSourceToggle(true,viewParsed.bind(this));listItemElement.appendChild(viewParsedButton);listItemElement.addEventListener('contextmenu',viewParsedContextMenu);}
_appendParamsParsed(title,params,sourceText,paramsTreeElement){for(let i=0;i<params.length;++i){const paramNameValue=createDocumentFragment();if(params[i].name!==''){const name=this._formatParameter(params[i].name+': ','header-name',this._decodeRequestParameters);const value=this._formatParameter(params[i].value,'header-value source-code',this._decodeRequestParameters);paramNameValue.appendChild(name);paramNameValue.createChild('span','header-separator');paramNameValue.appendChild(value);}else{paramNameValue.appendChild(this._formatParameter(Common.UIString('(empty)'),'empty-request-header',this._decodeRequestParameters));}
const paramTreeElement=new UI.TreeElement(paramNameValue);paramsTreeElement.appendChild(paramTreeElement);}
const listItemElement=paramsTreeElement.listItemElement;const viewSource=function(event){listItemElement.removeEventListener('contextmenu',viewSourceContextMenu);paramsTreeElement[Network.RequestHeadersView._viewSourceSymbol]=true;this._refreshParams(title,params,sourceText,paramsTreeElement);event.consume();};const toggleURLDecoding=function(event){listItemElement.removeEventListener('contextmenu',viewSourceContextMenu);this._toggleURLDecoding(event);};const viewSourceContextMenu=function(event){if(!paramsTreeElement.expanded){return;}
const contextMenu=new UI.ContextMenu(event);const section=contextMenu.newSection();section.appendItem(ls`View source`,viewSource.bind(this,event));const viewURLEncodedText=this._decodeRequestParameters?ls`View URL encoded`:ls`View decoded`;section.appendItem(viewURLEncodedText,toggleURLDecoding.bind(this,event));contextMenu.show();}.bind(this);const viewSourceButton=this._createViewSourceToggle(false,viewSource.bind(this));listItemElement.appendChild(viewSourceButton);const toggleTitle=this._decodeRequestParameters?ls`view URL encoded`:ls`view decoded`;const toggleButton=this._createToggleButton(toggleTitle);toggleButton.addEventListener('click',toggleURLDecoding.bind(this),false);listItemElement.appendChild(toggleButton);listItemElement.addEventListener('contextmenu',viewSourceContextMenu);}
_refreshRequestJSONPayload(parsedObject,sourceText){const rootListItem=this._requestPayloadCategory;rootListItem.removeChildren();const rootListItemElement=rootListItem.listItemElement;rootListItemElement.removeChildren();rootListItemElement.createChild('div','selection fill');rootListItemElement.createTextChild(this._requestPayloadCategory.title);const shouldViewSource=rootListItem[Network.RequestHeadersView._viewSourceSymbol];if(shouldViewSource){this._appendJSONPayloadSource(rootListItem,parsedObject,sourceText);}else{this._appendJSONPayloadParsed(rootListItem,parsedObject,sourceText);}}
_appendJSONPayloadSource(rootListItem,parsedObject,sourceText){const rootListItemElement=rootListItem.listItemElement;this._populateTreeElementWithSourceText(rootListItem,sourceText);const viewParsed=function(event){rootListItemElement.removeEventListener('contextmenu',viewParsedContextMenu);rootListItem[Network.RequestHeadersView._viewSourceSymbol]=false;this._refreshRequestJSONPayload(parsedObject,sourceText);event.consume();};const viewParsedButton=this._createViewSourceToggle(true,viewParsed.bind(this));rootListItemElement.appendChild(viewParsedButton);const viewParsedContextMenu=function(event){if(!rootListItem.expanded){return;}
const contextMenu=new UI.ContextMenu(event);contextMenu.newSection().appendItem(ls`View parsed`,viewParsed.bind(this,event));contextMenu.show();}.bind(this);rootListItemElement.addEventListener('contextmenu',viewParsedContextMenu);}
_appendJSONPayloadParsed(rootListItem,parsedObject,sourceText){const object=(SDK.RemoteObject.fromLocalObject(parsedObject));const section=new ObjectUI.ObjectPropertiesSection.RootElement(object);section.title=object.description;section.expand();section.editable=false;rootListItem.childrenListElement.classList.add('source-code','object-properties-section');rootListItem.appendChild(section);const rootListItemElement=rootListItem.listItemElement;const viewSource=function(event){rootListItemElement.removeEventListener('contextmenu',viewSourceContextMenu);rootListItem[Network.RequestHeadersView._viewSourceSymbol]=true;this._refreshRequestJSONPayload(parsedObject,sourceText);event.consume();};const viewSourceContextMenu=function(event){if(!rootListItem.expanded){return;}
const contextMenu=new UI.ContextMenu(event);contextMenu.newSection().appendItem(ls`View source`,viewSource.bind(this,event));contextMenu.show();}.bind(this);const viewSourceButton=this._createViewSourceToggle(false,viewSource.bind(this));rootListItemElement.appendChild(viewSourceButton);rootListItemElement.addEventListener('contextmenu',viewSourceContextMenu);}
_createViewSourceToggle(viewSource,handler){const viewSourceToggleTitle=viewSource?Common.UIString('view parsed'):Common.UIString('view source');const viewSourceToggleButton=this._createToggleButton(viewSourceToggleTitle);viewSourceToggleButton.addEventListener('click',handler,false);return viewSourceToggleButton;}
_toggleURLDecoding(event){this._decodeRequestParameters=!this._decodeRequestParameters;this._refreshQueryString();this._refreshFormData();event.consume();}
_refreshRequestHeaders(){const treeElement=this._requestHeadersCategory;const headers=this._request.requestHeaders().slice();headers.sort(function(a,b){return a.name.toLowerCase().compareTo(b.name.toLowerCase());});const headersText=this._request.requestHeadersText();if(this._showRequestHeadersText&&headersText){this._refreshHeadersText(Common.UIString('Request Headers'),headers.length,headersText,treeElement);}else{this._refreshHeaders(Common.UIString('Request Headers'),headers,treeElement,headersText===undefined);}
if(headersText){const toggleButton=this._createHeadersToggleButton(this._showRequestHeadersText);toggleButton.addEventListener('click',this._toggleRequestHeadersText.bind(this),false);treeElement.listItemElement.appendChild(toggleButton);}
this._refreshFormData();}
_refreshResponseHeaders(){const treeElement=this._responseHeadersCategory;const headers=this._request.sortedResponseHeaders.slice();const headersText=this._request.responseHeadersText;if(this._showResponseHeadersText){this._refreshHeadersText(Common.UIString('Response Headers'),headers.length,headersText,treeElement);}else{this._refreshHeaders(Common.UIString('Response Headers'),headers,treeElement,false,this._request.blockedResponseCookies());}
if(headersText){const toggleButton=this._createHeadersToggleButton(this._showResponseHeadersText);toggleButton.addEventListener('click',this._toggleResponseHeadersText.bind(this),false);treeElement.listItemElement.appendChild(toggleButton);}}
_refreshHTTPInformation(){const requestMethodElement=this._requestMethodItem;requestMethodElement.hidden=!this._request.statusCode;const statusCodeElement=this._statusCodeItem;statusCodeElement.hidden=!this._request.statusCode;if(this._request.statusCode){const statusCodeFragment=createDocumentFragment();statusCodeFragment.createChild('div','header-name').textContent=ls`Status Code`+': ';statusCodeFragment.createChild('span','header-separator');const statusCodeImage=statusCodeFragment.createChild('span','resource-status-image','dt-icon-label');statusCodeImage.title=this._request.statusCode+' '+this._request.statusText;if(this._request.statusCode<300||this._request.statusCode===304){statusCodeImage.type='smallicon-green-ball';}else if(this._request.statusCode<400){statusCodeImage.type='smallicon-orange-ball';}else{statusCodeImage.type='smallicon-red-ball';}
requestMethodElement.title=this._formatHeader(ls`Request Method`,this._request.requestMethod);const statusTextElement=statusCodeFragment.createChild('div','header-value source-code');let statusText=this._request.statusCode+' '+this._request.statusText;if(this._request.cachedInMemory()){statusText+=' '+ls`(from memory cache)`;statusTextElement.classList.add('status-from-cache');}else if(this._request.fetchedViaServiceWorker){statusText+=' '+ls`(from ServiceWorker)`;statusTextElement.classList.add('status-from-cache');}else if(this._request.redirectSource()&&this._request.redirectSource().signedExchangeInfo()&&!this._request.redirectSource().signedExchangeInfo().errors){statusText+=' '+ls`(from signed-exchange)`;statusTextElement.classList.add('status-from-cache');}else if(this._request.fromPrefetchCache()){statusText+=' '+ls`(from prefetch cache)`;statusTextElement.classList.add('status-from-cache');}else if(this._request.cached()){statusText+=' '+ls`(from disk cache)`;statusTextElement.classList.add('status-from-cache');}
statusTextElement.textContent=statusText;statusCodeElement.title=statusCodeFragment;}}
_refreshHeadersTitle(title,headersTreeElement,headersLength){headersTreeElement.listItemElement.removeChildren();headersTreeElement.listItemElement.createChild('div','selection fill');headersTreeElement.listItemElement.createTextChild(title);const headerCount=Common.UIString('\xA0(%d)',headersLength);headersTreeElement.listItemElement.createChild('span','header-count').textContent=headerCount;}
_refreshHeaders(title,headers,headersTreeElement,provisionalHeaders,blockedResponseCookies){headersTreeElement.removeChildren();const length=headers.length;this._refreshHeadersTitle(title,headersTreeElement,length);if(provisionalHeaders){const cautionText=Common.UIString('Provisional headers are shown');const cautionFragment=createDocumentFragment();cautionFragment.createChild('span','','dt-icon-label').type='smallicon-warning';cautionFragment.createChild('div','caution').textContent=cautionText;const cautionTreeElement=new UI.TreeElement(cautionFragment);headersTreeElement.appendChild(cautionTreeElement);}
const blockedCookieLineToReasons=new Map();if(blockedResponseCookies){blockedResponseCookies.forEach(blockedCookie=>{blockedCookieLineToReasons.set(blockedCookie.cookieLine,blockedCookie.blockedReasons);});}
headersTreeElement.hidden=!length&&!provisionalHeaders;for(let i=0;i<length;++i){const headerTreeElement=new UI.TreeElement(this._formatHeader(headers[i].name,headers[i].value));headerTreeElement[Network.RequestHeadersView._headerNameSymbol]=headers[i].name;if(headers[i].name.toLowerCase()==='set-cookie'){const matchingBlockedReasons=blockedCookieLineToReasons.get(headers[i].value);if(matchingBlockedReasons){const icon=UI.Icon.create('smallicon-warning','');headerTreeElement.listItemElement.appendChild(icon);let titleText='';for(const blockedReason of matchingBlockedReasons){if(titleText){titleText+='\n';}
titleText+=SDK.NetworkRequest.setCookieBlockedReasonToUiString(blockedReason);}
icon.title=titleText;}}
headersTreeElement.appendChild(headerTreeElement);}}
_refreshHeadersText(title,count,headersText,headersTreeElement){this._populateTreeElementWithSourceText(headersTreeElement,headersText);this._refreshHeadersTitle(title,headersTreeElement,count);}
_refreshRemoteAddress(){const remoteAddress=this._request.remoteAddress();const treeElement=this._remoteAddressItem;treeElement.hidden=!remoteAddress;if(remoteAddress){treeElement.title=this._formatHeader(Common.UIString('Remote Address'),remoteAddress);}}
_refreshReferrerPolicy(){const referrerPolicy=this._request.referrerPolicy();const treeElement=this._referrerPolicyItem;treeElement.hidden=!referrerPolicy;if(referrerPolicy){treeElement.title=this._formatHeader(Common.UIString('Referrer Policy'),referrerPolicy);}}
_toggleRequestHeadersText(event){this._showRequestHeadersText=!this._showRequestHeadersText;this._refreshRequestHeaders();event.consume();}
_toggleResponseHeadersText(event){this._showResponseHeadersText=!this._showResponseHeadersText;this._refreshResponseHeaders();event.consume();}
_createToggleButton(title){const button=createElementWithClass('span','header-toggle');button.textContent=title;return button;}
_createHeadersToggleButton(isHeadersTextShown){const toggleTitle=isHeadersTextShown?Common.UIString('view parsed'):Common.UIString('view source');return this._createToggleButton(toggleTitle);}
_clearHighlight(){if(this._highlightedElement){this._highlightedElement.listItemElement.classList.remove('header-highlight');}
this._highlightedElement=null;}
_revealAndHighlight(category,name){this._clearHighlight();for(const element of category.children()){if(element[Network.RequestHeadersView._headerNameSymbol]!==name){continue;}
this._highlightedElement=element;element.reveal();element.listItemElement.classList.add('header-highlight');return;}}
revealRequestHeader(header){this._revealAndHighlight(this._requestHeadersCategory,header);}
revealResponseHeader(header){this._revealAndHighlight(this._responseHeadersCategory,header);}};Network.RequestHeadersView._headerNameSymbol=Symbol('HeaderName');Network.RequestHeadersView._viewSourceSymbol=Symbol('ViewSource');Network.RequestHeadersView.Category=class extends UI.TreeElement{constructor(root,name,title){super(title||'',true);this.toggleOnClick=true;this.hidden=true;this._expandedSetting=Common.settings.createSetting('request-info-'+name+'-category-expanded',true);this.expanded=this._expandedSetting.get();root.appendChild(this);}
createLeaf(){const leaf=new UI.TreeElement();this.appendChild(leaf);return leaf;}
onexpand(){this._expandedSetting.set(true);}
oncollapse(){this._expandedSetting.set(false);}};;Network.RequestHTMLView=class extends UI.VBox{constructor(dataURL){super(true);this.registerRequiredCSS('network/requestHTMLView.css');this._dataURL=encodeURI(dataURL).replace(/#/g,'%23');this.contentElement.classList.add('html','request-view');}
wasShown(){this._createIFrame();}
willHide(){this.contentElement.removeChildren();}
_createIFrame(){this.contentElement.removeChildren();const iframe=createElement('iframe');iframe.className='html-preview-frame';iframe.setAttribute('sandbox','');iframe.setAttribute('src',this._dataURL);iframe.setAttribute('tabIndex',-1);UI.ARIAUtils.markAsPresentation(iframe);this.contentElement.appendChild(iframe);}};;Network.RequestInitiatorView=class extends UI.VBox{constructor(request){super();this.registerRequiredCSS('network/requestInitiatorView.css');this.element.classList.add('request-initiator-view');this._linkifier=new Components.Linkifier();this._request=request;this._emptyWidget=new UI.EmptyWidget(Common.UIString('This request has no initiator data.'));this._emptyWidget.show(this.element);this._hasShown=false;}
static createStackTracePreview(request,linkifier,focusableLink,callback){const initiator=request.initiator();if(!initiator||!initiator.stack){return null;}
const networkManager=SDK.NetworkManager.forRequest(request);const target=networkManager?networkManager.target():null;const stackTrace=Components.JSPresentationUtils.buildStackTracePreviewContents(target,linkifier,initiator.stack,callback);if(focusableLink){for(const link of stackTrace.links){link.tabIndex=0;}}
return stackTrace;}
_appendExpandableSection(sectionContent,title,expanded){const section=createElementWithClass('div','request-initiator-view-section');const icon=UI.Icon.create('smallicon-triangle-right');const clickableElement=section.createChild('div','request-initiator-view-section-title');clickableElement.appendChild(icon);clickableElement.createTextChild(title);clickableElement.tabIndex=0;sectionContent.classList.add('hidden','request-initiator-view-section-content');section.appendChild(sectionContent);const expand=expanded=>{icon.setIconType(expanded?'smallicon-triangle-down':'smallicon-triangle-right');sectionContent.classList.toggle('hidden',!expanded);};self.onInvokeElement(clickableElement,event=>{expand(sectionContent.classList.contains('hidden'));event.consume();});expand(expanded);this.element.appendChild(section);}
_buildRequestChainTree(initiatorGraph){const root=new UI.TreeOutlineInShadow();const initiators=initiatorGraph.initiators;let parent=root;for(const request of Array.from(initiators).reverse()){const treeElement=new UI.TreeElement(request.url());parent.appendChild(treeElement);if(parent!==root){parent.expand();}
parent=treeElement;}
parent.select();parent.titleElement.style.fontWeight='bold';const initiated=initiatorGraph.initiated;this._depthFirstSearchTreeBuilder(initiated,(parent),this._request);return root;}
_depthFirstSearchTreeBuilder(initiated,parentElement,parentRequest){const visited=new Set();visited.add(this._request);for(const request of initiated.keys()){if(initiated.get(request)===parentRequest){const treeElement=new UI.TreeElement(request.url());parentElement.appendChild(treeElement);parentElement.expand();if(!visited.has(request)){visited.add(request);this._depthFirstSearchTreeBuilder(initiated,treeElement,request);}}}}
wasShown(){if(this._hasShown){return;}
let initiatorDataPresent=false;const stackTracePreview=Network.RequestInitiatorView.createStackTracePreview(this._request,this._linkifier,true);if(stackTracePreview){initiatorDataPresent=true;this._appendExpandableSection(stackTracePreview.element,ls`Request call stack`,true);}
const initiatorGraph=SDK.networkLog.initiatorGraphForRequest(this._request);if(initiatorGraph.initiators.size>1||initiatorGraph.initiated.size>1){initiatorDataPresent=true;this._appendExpandableSection(this._buildRequestChainTree(initiatorGraph).element,ls`Request initiator chain`,true);}
if(initiatorDataPresent){this._emptyWidget.hideWidget();}
this._hasShown=true;}};;Network.RequestResponseView=class extends UI.VBox{constructor(request){super();this.element.classList.add('request-view');this.request=request;this._contentViewPromise=null;}
static _hasTextContent(request,contentData){const mimeType=request.mimeType||'';let resourceType=Common.ResourceType.fromMimeType(mimeType);if(resourceType===Common.resourceTypes.Other){resourceType=request.contentType();}
if(resourceType===Common.resourceTypes.Image){return mimeType.startsWith('image/svg');}
if(resourceType.isTextType()){return true;}
if(contentData.error){return false;}
if(resourceType===Common.resourceTypes.Other){return!!contentData.content&&!contentData.encoded;}
return false;}
static async sourceViewForRequest(request){let sourceView=request[Network.RequestResponseView._sourceViewSymbol];if(sourceView!==undefined){return sourceView;}
const contentData=await request.contentData();if(!Network.RequestResponseView._hasTextContent(request,contentData)){request[Network.RequestResponseView._sourceViewSymbol]=null;return null;}
const highlighterType=request.resourceType().canonicalMimeType()||request.mimeType;sourceView=SourceFrame.ResourceSourceFrame.createSearchableView(request,highlighterType);request[Network.RequestResponseView._sourceViewSymbol]=sourceView;return sourceView;}
wasShown(){this._doShowPreview();}
_doShowPreview(){if(!this._contentViewPromise){this._contentViewPromise=this.showPreview();}
return this._contentViewPromise;}
async showPreview(){const responseView=await this.createPreview();responseView.show(this.element);return responseView;}
async createPreview(){const contentData=await this.request.contentData();const sourceView=await Network.RequestResponseView.sourceViewForRequest(this.request);if((!contentData.content||!sourceView)&&!contentData.error){return new UI.EmptyWidget(Common.UIString('This request has no response data available.'));}
if(contentData.content&&sourceView){return sourceView;}
return new UI.EmptyWidget(Common.UIString('Failed to load response data'));}
async revealLine(line){const view=await this._doShowPreview();if(view instanceof SourceFrame.ResourceSourceFrame.SearchableContainer){view.revealPosition(line);}}};Network.RequestResponseView._sourceViewSymbol=Symbol('RequestResponseSourceView');;Network.RequestPreviewView=class extends Network.RequestResponseView{constructor(request){super(request);}
async showPreview(){const view=await super.showPreview();if(!(view instanceof UI.SimpleView)){return view;}
const toolbar=new UI.Toolbar('network-item-preview-toolbar',this.element);for(const item of view.syncToolbarItems()){toolbar.appendToolbarItem(item);}
return view;}
async _htmlPreview(){const contentData=await this.request.contentData();if(contentData.error){return new UI.EmptyWidget(Common.UIString('Failed to load response data'));}
const whitelist=new Set(['text/html','text/plain','application/xhtml+xml']);if(!whitelist.has(this.request.mimeType)){return null;}
const content=contentData.encoded?window.atob((contentData.content)):(contentData.content);const jsonView=await SourceFrame.JSONView.createView(content);if(jsonView){return jsonView;}
const dataURL=Common.ContentProvider.contentAsDataURL(contentData.content,this.request.mimeType,contentData.encoded,this.request.charset());return dataURL?new Network.RequestHTMLView(dataURL):null;}
async createPreview(){if(this.request.signedExchangeInfo()){return new Network.SignedExchangeInfoView(this.request);}
const htmlErrorPreview=await this._htmlPreview();if(htmlErrorPreview){return htmlErrorPreview;}
const provided=await SourceFrame.PreviewFactory.createPreview(this.request,this.request.mimeType);if(provided){return provided;}
return new UI.EmptyWidget(Common.UIString('Preview not available'));}};;Network.RequestTimingView=class extends UI.VBox{constructor(request,calculator){super();this.element.classList.add('resource-timing-view');this._request=request;this._calculator=calculator;}
static _timeRangeTitle(name){switch(name){case Network.RequestTimeRangeNames.Push:return Common.UIString('Receiving Push');case Network.RequestTimeRangeNames.Queueing:return Common.UIString('Queueing');case Network.RequestTimeRangeNames.Blocking:return Common.UIString('Stalled');case Network.RequestTimeRangeNames.Connecting:return Common.UIString('Initial connection');case Network.RequestTimeRangeNames.DNS:return Common.UIString('DNS Lookup');case Network.RequestTimeRangeNames.Proxy:return Common.UIString('Proxy negotiation');case Network.RequestTimeRangeNames.ReceivingPush:return Common.UIString('Reading Push');case Network.RequestTimeRangeNames.Receiving:return Common.UIString('Content Download');case Network.RequestTimeRangeNames.Sending:return Common.UIString('Request sent');case Network.RequestTimeRangeNames.ServiceWorker:return Common.UIString('Request to ServiceWorker');case Network.RequestTimeRangeNames.ServiceWorkerPreparation:return Common.UIString('ServiceWorker Preparation');case Network.RequestTimeRangeNames.SSL:return Common.UIString('SSL');case Network.RequestTimeRangeNames.Total:return Common.UIString('Total');case Network.RequestTimeRangeNames.Waiting:return Common.UIString('Waiting (TTFB)');default:return Common.UIString(name);}}
static calculateRequestTimeRanges(request,navigationStart){const result=[];function addRange(name,start,end){if(start<Number.MAX_VALUE&&start<=end){result.push({name:name,start:start,end:end});}}
function firstPositive(numbers){for(let i=0;i<numbers.length;++i){if(numbers[i]>0){return numbers[i];}}
return undefined;}
function addOffsetRange(name,start,end){if(start>=0&&end>=0){addRange(name,startTime+(start/1000),startTime+(end/1000));}}
const timing=request.timing;if(!timing){const start=request.issueTime()!==-1?request.issueTime():request.startTime!==-1?request.startTime:0;const middle=(request.responseReceivedTime===-1)?Number.MAX_VALUE:request.responseReceivedTime;const end=(request.endTime===-1)?Number.MAX_VALUE:request.endTime;addRange(Network.RequestTimeRangeNames.Total,start,end);addRange(Network.RequestTimeRangeNames.Blocking,start,middle);addRange(Network.RequestTimeRangeNames.Receiving,middle,end);return result;}
const issueTime=request.issueTime();const startTime=timing.requestTime;const endTime=firstPositive([request.endTime,request.responseReceivedTime])||startTime;addRange(Network.RequestTimeRangeNames.Total,issueTime<startTime?issueTime:startTime,endTime);if(timing.pushStart){const pushEnd=timing.pushEnd||endTime;if(pushEnd>navigationStart){addRange(Network.RequestTimeRangeNames.Push,Math.max(timing.pushStart,navigationStart),pushEnd);}}
if(issueTime<startTime){addRange(Network.RequestTimeRangeNames.Queueing,issueTime,startTime);}
const responseReceived=(request.responseReceivedTime-startTime)*1000;if(request.fetchedViaServiceWorker){addOffsetRange(Network.RequestTimeRangeNames.Blocking,0,timing.workerStart);addOffsetRange(Network.RequestTimeRangeNames.ServiceWorkerPreparation,timing.workerStart,timing.workerReady);addOffsetRange(Network.RequestTimeRangeNames.ServiceWorker,timing.workerReady,timing.sendEnd);addOffsetRange(Network.RequestTimeRangeNames.Waiting,timing.sendEnd,responseReceived);}else if(!timing.pushStart){const blockingEnd=firstPositive([timing.dnsStart,timing.connectStart,timing.sendStart,responseReceived])||0;addOffsetRange(Network.RequestTimeRangeNames.Blocking,0,blockingEnd);addOffsetRange(Network.RequestTimeRangeNames.Proxy,timing.proxyStart,timing.proxyEnd);addOffsetRange(Network.RequestTimeRangeNames.DNS,timing.dnsStart,timing.dnsEnd);addOffsetRange(Network.RequestTimeRangeNames.Connecting,timing.connectStart,timing.connectEnd);addOffsetRange(Network.RequestTimeRangeNames.SSL,timing.sslStart,timing.sslEnd);addOffsetRange(Network.RequestTimeRangeNames.Sending,timing.sendStart,timing.sendEnd);addOffsetRange(Network.RequestTimeRangeNames.Waiting,Math.max(timing.sendEnd,timing.connectEnd,timing.dnsEnd,timing.proxyEnd,blockingEnd),responseReceived);}
if(request.endTime!==-1){addRange(timing.pushStart?Network.RequestTimeRangeNames.ReceivingPush:Network.RequestTimeRangeNames.Receiving,request.responseReceivedTime,endTime);}
return result;}
static createTimingTable(request,calculator){const tableElement=createElementWithClass('table','network-timing-table');UI.appendStyle(tableElement,'network/networkTimingTable.css');const colgroup=tableElement.createChild('colgroup');colgroup.createChild('col','labels');colgroup.createChild('col','bars');colgroup.createChild('col','duration');const timeRanges=Network.RequestTimingView.calculateRequestTimeRanges(request,calculator.minimumBoundary());const startTime=timeRanges.map(r=>r.start).reduce((a,b)=>Math.min(a,b));const endTime=timeRanges.map(r=>r.end).reduce((a,b)=>Math.max(a,b));const scale=100/(endTime-startTime);let connectionHeader;let dataHeader;let queueingHeader;let totalDuration=0;const startTimeHeader=tableElement.createChild('thead','network-timing-start');const tableHeaderRow=startTimeHeader.createChild('tr');const activityHeaderCell=tableHeaderRow.createChild('th');activityHeaderCell.createChild('span','network-timing-hidden-header').textContent=ls`Label`;activityHeaderCell.scope='col';const waterfallHeaderCell=tableHeaderRow.createChild('th');waterfallHeaderCell.createChild('span','network-timing-hidden-header').textContent=ls`Waterfall`;waterfallHeaderCell.scope='col';const durationHeaderCell=tableHeaderRow.createChild('th');durationHeaderCell.createChild('span','network-timing-hidden-header').textContent=ls`Duration`;durationHeaderCell.scope='col';const queuedCell=startTimeHeader.createChild('tr').createChild('td');const startedCell=startTimeHeader.createChild('tr').createChild('td');queuedCell.colSpan=startedCell.colSpan=3;queuedCell.createTextChild(Common.UIString('Queued at %s',calculator.formatValue(request.issueTime(),2)));startedCell.createTextChild(Common.UIString('Started at %s',calculator.formatValue(request.startTime,2)));let right;for(let i=0;i<timeRanges.length;++i){const range=timeRanges[i];const rangeName=range.name;if(rangeName===Network.RequestTimeRangeNames.Total){totalDuration=range.end-range.start;continue;}
if(rangeName===Network.RequestTimeRangeNames.Push){createHeader(Common.UIString('Server Push'));}else if(rangeName===Network.RequestTimeRangeNames.Queueing){if(!queueingHeader){queueingHeader=createHeader(ls`Resource Scheduling`);}}else if(Network.RequestTimingView.ConnectionSetupRangeNames.has(rangeName)){if(!connectionHeader){connectionHeader=createHeader(Common.UIString('Connection Start'));}}else{if(!dataHeader){dataHeader=createHeader(Common.UIString('Request/Response'));}}
const left=(scale*(range.start-startTime));right=(scale*(endTime-range.end));const duration=range.end-range.start;const tr=tableElement.createChild('tr');tr.createChild('td').createTextChild(Network.RequestTimingView._timeRangeTitle(rangeName));const row=tr.createChild('td').createChild('div','network-timing-row');const bar=row.createChild('span','network-timing-bar '+rangeName);bar.style.left=left+'%';bar.style.right=right+'%';bar.textContent='\u200B';UI.ARIAUtils.setAccessibleName(row,ls`Started at ${calculator.formatValue(range.start, 2)}`);const label=tr.createChild('td').createChild('div','network-timing-bar-title');label.textContent=Number.secondsToString(duration,true);}
if(!request.finished){const cell=tableElement.createChild('tr').createChild('td','caution');cell.colSpan=3;cell.createTextChild(Common.UIString('CAUTION: request is not finished yet!'));}
const footer=tableElement.createChild('tr','network-timing-footer');const note=footer.createChild('td');note.colSpan=1;note.appendChild(UI.createDocumentationLink('network-performance/reference#timing-explanation',Common.UIString('Explanation')));footer.createChild('td');footer.createChild('td').createTextChild(Number.secondsToString(totalDuration,true));const serverTimings=request.serverTimings;if(!serverTimings){return tableElement;}
const lastTimingRightEdge=right===undefined?100:right;const breakElement=tableElement.createChild('tr','network-timing-table-header').createChild('td');breakElement.colSpan=3;breakElement.createChild('hr','break');const serverHeader=tableElement.createChild('tr','network-timing-table-header');serverHeader.createChild('td').createTextChild(Common.UIString('Server Timing'));serverHeader.createChild('td');serverHeader.createChild('td').createTextChild(Common.UIString('TIME'));serverTimings.filter(item=>item.metric.toLowerCase()!=='total').forEach(item=>addTiming(item,lastTimingRightEdge));serverTimings.filter(item=>item.metric.toLowerCase()==='total').forEach(item=>addTiming(item,lastTimingRightEdge));return tableElement;function addTiming(serverTiming,right){const colorGenerator=new Common.Color.Generator({min:0,max:360,count:36},{min:50,max:80},80);const isTotal=serverTiming.metric.toLowerCase()==='total';const tr=tableElement.createChild('tr',isTotal?'network-timing-footer':'');const metric=tr.createChild('td','network-timing-metric');const description=serverTiming.description||serverTiming.metric;metric.createTextChild(description);metric.title=description;const row=tr.createChild('td').createChild('div','network-timing-row');if(serverTiming.value===null){return;}
const left=scale*(endTime-startTime-(serverTiming.value/1000));if(left>=0){const bar=row.createChild('span','network-timing-bar server-timing');bar.style.left=left+'%';bar.style.right=right+'%';bar.textContent='\u200B';if(!isTotal){bar.style.backgroundColor=colorGenerator.colorForID(serverTiming.metric);}}
const label=tr.createChild('td').createChild('div','network-timing-bar-title');label.textContent=Number.millisToString(serverTiming.value,true);}
function createHeader(title){const dataHeader=tableElement.createChild('tr','network-timing-table-header');const headerCell=dataHeader.createChild('td');headerCell.createTextChild(title);UI.ARIAUtils.markAsHeading(headerCell,2);dataHeader.createChild('td').createTextChild('');dataHeader.createChild('td').createTextChild(ls`DURATION`);return dataHeader;}}
wasShown(){this._request.addEventListener(SDK.NetworkRequest.Events.TimingChanged,this._refresh,this);this._request.addEventListener(SDK.NetworkRequest.Events.FinishedLoading,this._refresh,this);this._calculator.addEventListener(Network.NetworkTimeCalculator.Events.BoundariesChanged,this._refresh,this);this._refresh();}
willHide(){this._request.removeEventListener(SDK.NetworkRequest.Events.TimingChanged,this._refresh,this);this._request.removeEventListener(SDK.NetworkRequest.Events.FinishedLoading,this._refresh,this);this._calculator.removeEventListener(Network.NetworkTimeCalculator.Events.BoundariesChanged,this._refresh,this);}
_refresh(){if(this._tableElement){this._tableElement.remove();}
this._tableElement=Network.RequestTimingView.createTimingTable(this._request,this._calculator);this._tableElement.classList.add('resource-timing-table');this.element.appendChild(this._tableElement);}};Network.RequestTimeRangeNames={Push:'push',Queueing:'queueing',Blocking:'blocking',Connecting:'connecting',DNS:'dns',Proxy:'proxy',Receiving:'receiving',ReceivingPush:'receiving-push',Sending:'sending',ServiceWorker:'serviceworker',ServiceWorkerPreparation:'serviceworker-preparation',SSL:'ssl',Total:'total',Waiting:'waiting'};Network.RequestTimingView.ConnectionSetupRangeNames=new Set([Network.RequestTimeRangeNames.Queueing,Network.RequestTimeRangeNames.Blocking,Network.RequestTimeRangeNames.Connecting,Network.RequestTimeRangeNames.DNS,Network.RequestTimeRangeNames.Proxy,Network.RequestTimeRangeNames.SSL]);Network.RequestTimeRange;;Network.ResourceWebSocketFrameView=class extends UI.VBox{constructor(request){super();this.registerRequiredCSS('network/webSocketFrameView.css');this.element.classList.add('websocket-frame-view');this._request=request;this._splitWidget=new UI.SplitWidget(false,true,'resourceWebSocketFrameSplitViewState');this._splitWidget.show(this.element);const columns=([{id:'data',title:Common.UIString('Data'),sortable:false,weight:88},{id:'length',title:Common.UIString('Length'),sortable:false,align:DataGrid.DataGrid.Align.Right,weight:5},{id:'time',title:Common.UIString('Time'),sortable:true,weight:7}]);this._dataGrid=new DataGrid.SortableDataGrid(columns);this._dataGrid.setRowContextMenuCallback(onRowContextMenu.bind(this));this._dataGrid.setStickToBottom(true);this._dataGrid.setCellClass('websocket-frame-view-td');this._timeComparator=(Network.ResourceWebSocketFrameNodeTimeComparator);this._dataGrid.sortNodes(this._timeComparator,false);this._dataGrid.markColumnAsSortedBy('time',DataGrid.DataGrid.Order.Ascending);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortItems,this);this._dataGrid.setName('ResourceWebSocketFrameView');this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._onFrameSelected,this);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.DeselectedNode,this._onFrameDeselected,this);this._mainToolbar=new UI.Toolbar('');this._clearAllButton=new UI.ToolbarButton(Common.UIString('Clear All'),'largeicon-clear');this._clearAllButton.addEventListener(UI.ToolbarButton.Events.Click,this._clearFrames,this);this._mainToolbar.appendToolbarItem(this._clearAllButton);this._filterTypeCombobox=new UI.ToolbarComboBox(this._updateFilterSetting.bind(this),ls`Filter`);for(const filterItem of Network.ResourceWebSocketFrameView._filterTypes){const option=this._filterTypeCombobox.createOption(filterItem.label,filterItem.name);this._filterTypeCombobox.addOption(option);}
this._mainToolbar.appendToolbarItem(this._filterTypeCombobox);this._filterType=null;const placeholder='Enter regex, for example: (web)?socket';this._filterTextInput=new UI.ToolbarInput(Common.UIString(placeholder),'',0.4);this._filterTextInput.addEventListener(UI.ToolbarInput.Event.TextChanged,this._updateFilterSetting,this);this._mainToolbar.appendToolbarItem(this._filterTextInput);this._filterRegex=null;const mainContainer=new UI.VBox();mainContainer.element.appendChild(this._mainToolbar.element);this._dataGrid.asWidget().show(mainContainer.element);mainContainer.setMinimumSize(0,72);this._splitWidget.setMainWidget(mainContainer);this._frameEmptyWidget=new UI.EmptyWidget(Common.UIString('Select message to browse its content.'));this._splitWidget.setSidebarWidget(this._frameEmptyWidget);this._selectedNode=null;function onRowContextMenu(contextMenu,genericNode){const node=(genericNode);const binaryView=node.binaryView();if(binaryView){binaryView.addCopyToContextMenu(contextMenu,ls`Copy message...`);}else{contextMenu.clipboardSection().appendItem(Common.UIString('Copy message'),Host.InspectorFrontendHost.copyText.bind(Host.InspectorFrontendHost,node.data.data));}
contextMenu.footerSection().appendItem(Common.UIString('Clear all'),this._clearFrames.bind(this));}}
static opCodeDescription(opCode,mask){const localizedDescription=Network.ResourceWebSocketFrameView.opCodeDescriptions[opCode]||'';if(mask){return ls`${localizedDescription} (Opcode ${opCode}, mask)`;}
return ls`${localizedDescription} (Opcode ${opCode})`;}
wasShown(){this.refresh();this._request.addEventListener(SDK.NetworkRequest.Events.WebsocketFrameAdded,this._frameAdded,this);}
willHide(){this._request.removeEventListener(SDK.NetworkRequest.Events.WebsocketFrameAdded,this._frameAdded,this);}
_frameAdded(event){const frame=(event.data);if(!this._frameFilter(frame)){return;}
this._dataGrid.insertChild(new Network.ResourceWebSocketFrameNode(this._request.url(),frame));}
_frameFilter(frame){if(this._filterType&&frame.type!==this._filterType){return false;}
return!this._filterRegex||this._filterRegex.test(frame.text);}
_clearFrames(){this._request[Network.ResourceWebSocketFrameView._clearFrameOffsetSymbol]=this._request.frames().length;this.refresh();}
_updateFilterSetting(){const text=this._filterTextInput.value();const type=this._filterTypeCombobox.selectedOption().value;this._filterRegex=text?new RegExp(text,'i'):null;this._filterType=type==='all'?null:type;this.refresh();}
async _onFrameSelected(event){this._currentSelectedNode=(event.data);const content=this._currentSelectedNode.dataText();const binaryView=this._currentSelectedNode.binaryView();if(binaryView){this._splitWidget.setSidebarWidget(binaryView);return;}
const jsonView=await SourceFrame.JSONView.createView(content);if(jsonView){this._splitWidget.setSidebarWidget(jsonView);return;}
this._splitWidget.setSidebarWidget(new SourceFrame.ResourceSourceFrame(Common.StaticContentProvider.fromString(this._request.url(),Common.resourceTypes.WebSocket,content)));}
_onFrameDeselected(event){this._currentSelectedNode=null;this._splitWidget.setSidebarWidget(this._frameEmptyWidget);}
refresh(){this._dataGrid.rootNode().removeChildren();const url=this._request.url();let frames=this._request.frames();const offset=this._request[Network.ResourceWebSocketFrameView._clearFrameOffsetSymbol]||0;frames=frames.slice(offset);frames=frames.filter(this._frameFilter.bind(this));frames.forEach(frame=>this._dataGrid.insertChild(new Network.ResourceWebSocketFrameNode(url,frame)));}
_sortItems(){this._dataGrid.sortNodes(this._timeComparator,!this._dataGrid.isSortOrderAscending());}};Network.ResourceWebSocketFrameView.OpCodes={ContinuationFrame:0,TextFrame:1,BinaryFrame:2,ConnectionCloseFrame:8,PingFrame:9,PongFrame:10};Network.ResourceWebSocketFrameView.opCodeDescriptions=(function(){const opCodes=Network.ResourceWebSocketFrameView.OpCodes;const map=[];map[opCodes.ContinuationFrame]=ls`Continuation Frame`;map[opCodes.TextFrame]=ls`Text Message`;map[opCodes.BinaryFrame]=ls`Binary Message`;map[opCodes.ContinuationFrame]=ls`Connection Close Message`;map[opCodes.PingFrame]=ls`Ping Message`;map[opCodes.PongFrame]=ls`Pong Message`;return map;})();Network.ResourceWebSocketFrameView._filterTypes=[{name:'all',label:Common.UIString('All')},{name:'send',label:Common.UIString('Send')},{name:'receive',label:Common.UIString('Receive')},];Network.ResourceWebSocketFrameNode=class extends DataGrid.SortableDataGridNode{constructor(url,frame){let length=frame.text.length;const time=new Date(frame.time*1000);const timeText=('0'+time.getHours()).substr(-2)+':'+('0'+time.getMinutes()).substr(-2)+':'+
('0'+time.getSeconds()).substr(-2)+'.'+('00'+time.getMilliseconds()).substr(-3);const timeNode=createElement('div');timeNode.createTextChild(timeText);timeNode.title=time.toLocaleString();let dataText=frame.text;let description=Network.ResourceWebSocketFrameView.opCodeDescription(frame.opCode,frame.mask);const isTextFrame=frame.opCode===Network.ResourceWebSocketFrameView.OpCodes.TextFrame;if(frame.type===SDK.NetworkRequest.WebSocketFrameType.Error){description=dataText;length=ls`N/A`;}else if(isTextFrame){description=dataText;}else if(frame.opCode===Network.ResourceWebSocketFrameView.OpCodes.BinaryFrame){length=Number.bytesToString(base64ToSize(frame.text));description=Network.ResourceWebSocketFrameView.opCodeDescriptions[frame.opCode];}else{dataText=description;}
super({data:description,length:length,time:timeNode});this._url=url;this._frame=frame;this._isTextFrame=isTextFrame;this._dataText=dataText;}
createCells(element){element.classList.toggle('websocket-frame-view-row-error',this._frame.type===SDK.NetworkRequest.WebSocketFrameType.Error);element.classList.toggle('websocket-frame-view-row-send',this._frame.type===SDK.NetworkRequest.WebSocketFrameType.Send);element.classList.toggle('websocket-frame-view-row-receive',this._frame.type===SDK.NetworkRequest.WebSocketFrameType.Receive);super.createCells(element);}
nodeSelfHeight(){return 21;}
dataText(){return this._dataText;}
opCode(){return(this._frame.opCode);}
binaryView(){if(this._isTextFrame||this._frame.type===SDK.NetworkRequest.WebSocketFrameType.Error){return null;}
if(!this._binaryView){this._binaryView=new Network.BinaryResourceView(this._dataText,'',Common.resourceTypes.WebSocket);}
return this._binaryView;}};Network.ResourceWebSocketFrameNodeTimeComparator=function(a,b){return a._frame.time-b._frame.time;};Network.ResourceWebSocketFrameView._clearFrameOffsetSymbol=Symbol('ClearFrameOffset');;Network.SignedExchangeInfoView=class extends UI.VBox{constructor(request){super();const signedExchangeInfo=request.signedExchangeInfo();console.assert(signedExchangeInfo);this.registerRequiredCSS('network/signedExchangeInfoView.css');this.element.classList.add('signed-exchange-info-view');const root=new UI.TreeOutlineInShadow();root.registerRequiredCSS('network/signedExchangeInfoTree.css');root.element.classList.add('signed-exchange-info-tree');root.setFocusable(false);root.makeDense();root.expandTreeElementsWhenArrowing=true;this.element.appendChild(root.element);const errorFieldSetMap=new Map();if(signedExchangeInfo.errors&&signedExchangeInfo.errors.length){const errorMessagesCategory=new Network.SignedExchangeInfoView.Category(root,Common.UIString('Errors'));for(const error of signedExchangeInfo.errors){const fragment=createDocumentFragment();fragment.appendChild(UI.Icon.create('smallicon-error','prompt-icon'));fragment.createChild('div','error-log').textContent=error.message;errorMessagesCategory.createLeaf(fragment);if(error.errorField){let errorFieldSet=errorFieldSetMap.get(error.signatureIndex);if(!errorFieldSet){errorFieldSet=new Set();errorFieldSetMap.set(error.signatureIndex,errorFieldSet);}
errorFieldSet.add(error.errorField);}}}
const titleElement=createDocumentFragment();titleElement.createChild('div','header-name').textContent=Common.UIString('Signed HTTP exchange');const learnMoreNode=UI.XLink.create('https://github.com/WICG/webpackage',Common.UIString('Learn\xa0more'),'header-toggle');titleElement.appendChild(learnMoreNode);const headerCategory=new Network.SignedExchangeInfoView.Category(root,titleElement);if(signedExchangeInfo.header){const header=signedExchangeInfo.header;const redirectDestination=request.redirectDestination();const requestURLElement=this._formatHeader(Common.UIString('Request URL'),header.requestUrl);if(redirectDestination){const viewRequestLink=Components.Linkifier.linkifyRevealable(redirectDestination,'View request');viewRequestLink.classList.add('header-toggle');requestURLElement.appendChild(viewRequestLink);}
headerCategory.createLeaf(requestURLElement);headerCategory.createLeaf(this._formatHeader(Common.UIString('Response code'),header.responseCode+''));headerCategory.createLeaf(this._formatHeader(Common.UIString('Header integrity hash'),header.headerIntegrity));this._responseHeadersItem=headerCategory.createLeaf(this._formatHeader(Common.UIString('Response headers'),''));const responseHeaders=header.responseHeaders;for(const name in responseHeaders){const headerTreeElement=new UI.TreeElement(this._formatHeader(name,responseHeaders[name]));headerTreeElement.selectable=false;this._responseHeadersItem.appendChild(headerTreeElement);}
this._responseHeadersItem.expand();for(let i=0;i<header.signatures.length;++i){const errorFieldSet=errorFieldSetMap.get(i)||new Set();const signature=header.signatures[i];const signatureCategory=new Network.SignedExchangeInfoView.Category(root,Common.UIString('Signature'));signatureCategory.createLeaf(this._formatHeader(Common.UIString('Label'),signature.label));signatureCategory.createLeaf(this._formatHeaderForHexData(Common.UIString('Signature'),signature.signature,errorFieldSet.has(Protocol.Network.SignedExchangeErrorField.SignatureSig)));if(signature.certUrl){const certURLElement=this._formatHeader(Common.UIString('Certificate URL'),signature.certUrl,errorFieldSet.has(Protocol.Network.SignedExchangeErrorField.SignatureCertUrl));if(signature.certificates){const viewCertLink=certURLElement.createChild('span','devtools-link header-toggle');viewCertLink.textContent=Common.UIString('View certificate');viewCertLink.addEventListener('click',Host.InspectorFrontendHost.showCertificateViewer.bind(null,signature.certificates),false);}
signatureCategory.createLeaf(certURLElement);}
signatureCategory.createLeaf(this._formatHeader(Common.UIString('Integrity'),signature.integrity,errorFieldSet.has(Protocol.Network.SignedExchangeErrorField.SignatureIntegrity)));if(signature.certSha256){signatureCategory.createLeaf(this._formatHeaderForHexData(Common.UIString('Certificate SHA256'),signature.certSha256,errorFieldSet.has(Protocol.Network.SignedExchangeErrorField.SignatureCertSha256)));}
signatureCategory.createLeaf(this._formatHeader(Common.UIString('Validity URL'),signature.validityUrl,errorFieldSet.has(Protocol.Network.SignedExchangeErrorField.SignatureValidityUrl)));signatureCategory.createLeaf().title=this._formatHeader(Common.UIString('Date'),new Date(1000*signature.date).toUTCString(),errorFieldSet.has(Protocol.Network.SignedExchangeErrorField.SignatureTimestamps));signatureCategory.createLeaf().title=this._formatHeader(Common.UIString('Expires'),new Date(1000*signature.expires).toUTCString(),errorFieldSet.has(Protocol.Network.SignedExchangeErrorField.SignatureTimestamps));}}
if(signedExchangeInfo.securityDetails){const securityDetails=signedExchangeInfo.securityDetails;const securityCategory=new Network.SignedExchangeInfoView.Category(root,Common.UIString('Certificate'));securityCategory.createLeaf(this._formatHeader(Common.UIString('Subject'),securityDetails.subjectName));securityCategory.createLeaf(this._formatHeader(Common.UIString('Valid from'),new Date(1000*securityDetails.validFrom).toUTCString()));securityCategory.createLeaf(this._formatHeader(Common.UIString('Valid until'),new Date(1000*securityDetails.validTo).toUTCString()));securityCategory.createLeaf(this._formatHeader(Common.UIString('Issuer'),securityDetails.issuer));}}
_formatHeader(name,value,highlighted){const fragment=createDocumentFragment();const nameElement=fragment.createChild('div','header-name');nameElement.textContent=name+': ';fragment.createChild('span','header-separator');const valueElement=fragment.createChild('div','header-value source-code');valueElement.textContent=value;if(highlighted){nameElement.classList.add('error-field');valueElement.classList.add('error-field');}
return fragment;}
_formatHeaderForHexData(name,value,highlighted){const fragment=createDocumentFragment();const nameElement=fragment.createChild('div','header-name');nameElement.textContent=name+': ';fragment.createChild('span','header-separator');const valueElement=fragment.createChild('div','header-value source-code hex-data');valueElement.textContent=value.replace(/(.{2})/g,'$1 ');if(highlighted){nameElement.classList.add('error-field');valueElement.classList.add('error-field');}
return fragment;}};Network.SignedExchangeInfoView.Category=class extends UI.TreeElement{constructor(root,title){super(title,true);this.selectable=false;this.toggleOnClick=true;this.expanded=true;root.appendChild(this);}
createLeaf(title){const leaf=new UI.TreeElement(title);leaf.selectable=false;this.appendChild(leaf);return leaf;}};;Network.NetworkOverview=class extends PerfUI.TimelineOverviewBase{constructor(){super();this._selectedFilmStripTime=-1;this.element.classList.add('network-overview');this._numBands=1;this._updateScheduled=false;this._highlightedRequest=null;SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.Load,this._loadEventFired,this);SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.DOMContentLoaded,this._domContentLoadedEventFired,this);this.reset();}
setHighlightedRequest(request){this._highlightedRequest=request;this.scheduleUpdate();}
setFilmStripModel(filmStripModel){this._filmStripModel=filmStripModel;this.scheduleUpdate();}
selectFilmStripFrame(time){this._selectedFilmStripTime=time;this.scheduleUpdate();}
clearFilmStripFrame(){this._selectedFilmStripTime=-1;this.scheduleUpdate();}
_loadEventFired(event){const time=(event.data.loadTime);if(time){this._loadEvents.push(time*1000);}
this.scheduleUpdate();}
_domContentLoadedEventFired(event){const data=(event.data);if(data){this._domContentLoadedEvents.push(data*1000);}
this.scheduleUpdate();}
_bandId(connectionId){if(!connectionId||connectionId==='0'){return-1;}
if(this._bandMap.has(connectionId)){return(this._bandMap.get(connectionId));}
const result=this._nextBand++;this._bandMap.set(connectionId,result);return result;}
updateRequest(request){if(!this._requestsSet.has(request)){this._requestsSet.add(request);this._requestsList.push(request);}
this.scheduleUpdate();}
wasShown(){this.onResize();}
onResize(){const width=this.element.offsetWidth;const height=this.element.offsetHeight;this.calculator().setDisplayWidth(width);this.resetCanvas();const numBands=(((height-Network.NetworkOverview._padding-1)/Network.NetworkOverview._bandHeight)-1)|0;this._numBands=(numBands>0)?numBands:1;this.scheduleUpdate();}
reset(){this._filmStripModel=null;this._span=1;this._lastBoundary=null;this._nextBand=0;this._bandMap=new Map();this._requestsList=[];this._requestsSet=new Set();this._loadEvents=[];this._domContentLoadedEvents=[];this.resetCanvas();}
scheduleUpdate(){if(this._updateScheduled||!this.isShowing()){return;}
this._updateScheduled=true;this.element.window().requestAnimationFrame(this.update.bind(this));}
update(){this._updateScheduled=false;const calculator=this.calculator();const newBoundary=new Network.NetworkTimeBoundary(calculator.minimumBoundary(),calculator.maximumBoundary());if(!this._lastBoundary||!newBoundary.equals(this._lastBoundary)){const span=calculator.boundarySpan();while(this._span<span){this._span*=1.25;}
calculator.setBounds(calculator.minimumBoundary(),calculator.minimumBoundary()+this._span);this._lastBoundary=new Network.NetworkTimeBoundary(calculator.minimumBoundary(),calculator.maximumBoundary());}
const context=this.context();const linesByType={};const paddingTop=Network.NetworkOverview._padding;function drawLines(type){const lines=linesByType[type];if(!lines){return;}
const n=lines.length;context.beginPath();context.strokeStyle=Network.NetworkOverview.RequestTimeRangeNameToColor[type];for(let i=0;i<n;){const y=lines[i++]*Network.NetworkOverview._bandHeight+paddingTop;const startTime=lines[i++];let endTime=lines[i++];if(endTime===Number.MAX_VALUE){endTime=calculator.maximumBoundary();}
context.moveTo(calculator.computePosition(startTime),y);context.lineTo(calculator.computePosition(endTime)+1,y);}
context.stroke();}
function addLine(type,y,start,end){let lines=linesByType[type];if(!lines){lines=[];linesByType[type]=lines;}
lines.push(y,start,end);}
const requests=this._requestsList;const n=requests.length;for(let i=0;i<n;++i){const request=requests[i];const band=this._bandId(request.connectionId);const y=(band===-1)?0:(band%this._numBands+1);const timeRanges=Network.RequestTimingView.calculateRequestTimeRanges(request,this.calculator().minimumBoundary());for(let j=0;j<timeRanges.length;++j){const type=timeRanges[j].name;if(band!==-1||type===Network.RequestTimeRangeNames.Total){addLine(type,y,timeRanges[j].start*1000,timeRanges[j].end*1000);}}}
context.clearRect(0,0,this.width(),this.height());context.save();context.scale(window.devicePixelRatio,window.devicePixelRatio);context.lineWidth=2;drawLines(Network.RequestTimeRangeNames.Total);drawLines(Network.RequestTimeRangeNames.Blocking);drawLines(Network.RequestTimeRangeNames.Connecting);drawLines(Network.RequestTimeRangeNames.ServiceWorker);drawLines(Network.RequestTimeRangeNames.ServiceWorkerPreparation);drawLines(Network.RequestTimeRangeNames.Push);drawLines(Network.RequestTimeRangeNames.Proxy);drawLines(Network.RequestTimeRangeNames.DNS);drawLines(Network.RequestTimeRangeNames.SSL);drawLines(Network.RequestTimeRangeNames.Sending);drawLines(Network.RequestTimeRangeNames.Waiting);drawLines(Network.RequestTimeRangeNames.Receiving);if(this._highlightedRequest){const size=5;const borderSize=2;const request=this._highlightedRequest;const band=this._bandId(request.connectionId);const y=((band===-1)?0:(band%this._numBands+1))*Network.NetworkOverview._bandHeight+paddingTop;const timeRanges=Network.RequestTimingView.calculateRequestTimeRanges(request,this.calculator().minimumBoundary());context.fillStyle='#1a73e8';const start=timeRanges[0].start*1000;const end=timeRanges[0].end*1000;context.fillRect(calculator.computePosition(start)-borderSize,y-size/2-borderSize,calculator.computePosition(end)-calculator.computePosition(start)+1+2*borderSize,size*borderSize);for(let j=0;j<timeRanges.length;++j){const type=timeRanges[j].name;if(band!==-1||type===Network.RequestTimeRangeNames.Total){context.beginPath();context.strokeStyle=Network.NetworkOverview.RequestTimeRangeNameToColor[type];context.lineWidth=size;const start=timeRanges[j].start*1000;const end=timeRanges[j].end*1000;context.moveTo(calculator.computePosition(start)-0,y);context.lineTo(calculator.computePosition(end)+1,y);context.stroke();}}}
const height=this.element.offsetHeight;context.lineWidth=1;context.beginPath();context.strokeStyle=Network.NetworkLogView.getDCLEventColor();for(let i=this._domContentLoadedEvents.length-1;i>=0;--i){const x=Math.round(calculator.computePosition(this._domContentLoadedEvents[i]))+0.5;context.moveTo(x,0);context.lineTo(x,height);}
context.stroke();context.beginPath();context.strokeStyle=Network.NetworkLogView.getLoadEventColor();for(let i=this._loadEvents.length-1;i>=0;--i){const x=Math.round(calculator.computePosition(this._loadEvents[i]))+0.5;context.moveTo(x,0);context.lineTo(x,height);}
context.stroke();if(this._selectedFilmStripTime!==-1){context.lineWidth=2;context.beginPath();context.strokeStyle='#FCCC49';const x=Math.round(calculator.computePosition(this._selectedFilmStripTime));context.moveTo(x,0);context.lineTo(x,height);context.stroke();}
context.restore();}};Network.NetworkOverview.RequestTimeRangeNameToColor={[Network.RequestTimeRangeNames.Total]:'#CCCCCC',[Network.RequestTimeRangeNames.Blocking]:'#AAAAAA',[Network.RequestTimeRangeNames.Connecting]:'#FF9800',[Network.RequestTimeRangeNames.ServiceWorker]:'#FF9800',[Network.RequestTimeRangeNames.ServiceWorkerPreparation]:'#FF9800',[Network.RequestTimeRangeNames.Push]:'#8CDBff',[Network.RequestTimeRangeNames.Proxy]:'#A1887F',[Network.RequestTimeRangeNames.DNS]:'#009688',[Network.RequestTimeRangeNames.SSL]:'#9C27B0',[Network.RequestTimeRangeNames.Sending]:'#B0BEC5',[Network.RequestTimeRangeNames.Waiting]:'#00C853',[Network.RequestTimeRangeNames.Receiving]:'#03A9F4',};Network.NetworkOverview._bandHeight=3;Network.NetworkOverview._padding=5;Network.NetworkOverview.Window;;Network.NetworkPanel=class extends UI.Panel{constructor(){super('network');this.registerRequiredCSS('network/networkPanel.css');this._networkLogShowOverviewSetting=Common.settings.createSetting('networkLogShowOverview',true);this._networkLogLargeRowsSetting=Common.settings.createSetting('networkLogLargeRows',false);this._networkRecordFilmStripSetting=Common.settings.createSetting('networkRecordFilmStripSetting',false);this._toggleRecordAction=(UI.actionRegistry.action('network.toggle-recording'));this._pendingStopTimer;this._networkItemView=null;this._filmStripView=null;this._filmStripRecorder=null;this._currentRequest=null;const panel=new UI.VBox();const networkToolbarContainer=panel.contentElement.createChild('div','network-toolbar-container');this._panelToolbar=new UI.Toolbar('',networkToolbarContainer);this._rightToolbar=new UI.Toolbar('',networkToolbarContainer);this._filterBar=new UI.FilterBar('networkPanel',true);this._filterBar.show(panel.contentElement);this._settingsPane=new UI.HBox();this._settingsPane.element.classList.add('network-settings-pane');this._settingsPane.show(panel.contentElement);this._showSettingsPaneSetting=Common.settings.createSetting('networkShowSettingsToolbar',false);this._showSettingsPaneSetting.addChangeListener(this._updateSettingsPaneVisibility.bind(this));this._updateSettingsPaneVisibility();this._filmStripPlaceholderElement=panel.contentElement.createChild('div','network-film-strip-placeholder');this._overviewPane=new PerfUI.TimelineOverviewPane('network');this._overviewPane.addEventListener(PerfUI.TimelineOverviewPane.Events.WindowChanged,this._onWindowChanged.bind(this));this._overviewPane.element.id='network-overview-panel';this._networkOverview=new Network.NetworkOverview();this._overviewPane.setOverviewControls([this._networkOverview]);this._overviewPlaceholderElement=panel.contentElement.createChild('div');this._calculator=new Network.NetworkTransferTimeCalculator();this._splitWidget=new UI.SplitWidget(true,false,'networkPanelSplitViewState');this._splitWidget.hideMain();this._splitWidget.show(panel.contentElement);panel.setDefaultFocusedChild(this._filterBar);const initialSidebarWidth=225;const splitWidget=new UI.SplitWidget(true,false,'networkPanelSidebarState',initialSidebarWidth);splitWidget.hideSidebar();splitWidget.enableShowModeSaving();splitWidget.show(this.element);this._sidebarLocation=UI.viewManager.createTabbedLocation(async()=>{UI.viewManager.showView('network');splitWidget.showBoth();},'network-sidebar',true);const tabbedPane=this._sidebarLocation.tabbedPane();tabbedPane.setMinimumSize(100,25);tabbedPane.element.classList.add('network-tabbed-pane');tabbedPane.element.addEventListener('keydown',event=>{if(event.key!=='Escape'){return;}
splitWidget.hideSidebar();event.consume();});const closeSidebar=new UI.ToolbarButton(Common.UIString('Close'),'largeicon-delete');closeSidebar.addEventListener(UI.ToolbarButton.Events.Click,()=>splitWidget.hideSidebar());tabbedPane.rightToolbar().appendToolbarItem(closeSidebar);splitWidget.setSidebarWidget(tabbedPane);splitWidget.setMainWidget(panel);splitWidget.setDefaultFocusedChild(panel);this.setDefaultFocusedChild(splitWidget);this._progressBarContainer=createElement('div');this._networkLogView=new Network.NetworkLogView(this._filterBar,this._progressBarContainer,this._networkLogLargeRowsSetting);this._splitWidget.setSidebarWidget(this._networkLogView);this._fileSelectorElement=UI.createFileSelectorElement(this._networkLogView.onLoadFromFile.bind(this._networkLogView));panel.element.appendChild(this._fileSelectorElement);this._detailsWidget=new UI.VBox();this._detailsWidget.element.classList.add('network-details-view');this._splitWidget.setMainWidget(this._detailsWidget);this._closeButtonElement=createElement('div','dt-close-button');this._closeButtonElement.addEventListener('click',async()=>await UI.actionRegistry.action('network.hide-request-details').execute(),false);this._closeButtonElement.style.margin='0 5px';this._networkLogShowOverviewSetting.addChangeListener(this._toggleShowOverview,this);this._networkLogLargeRowsSetting.addChangeListener(this._toggleLargerRequests,this);this._networkRecordFilmStripSetting.addChangeListener(this._toggleRecordFilmStrip,this);this._preserveLogSetting=Common.moduleSetting('network_log.preserve-log');this._throttlingSelect=this._createThrottlingConditionsSelect();this._setupToolbarButtons(splitWidget);this._toggleRecord(true);this._toggleShowOverview();this._toggleLargerRequests();this._toggleRecordFilmStrip();this._updateUI();SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.WillReloadPage,this._willReloadPage,this);SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.Load,this._load,this);this._networkLogView.addEventListener(Network.NetworkLogView.Events.RequestSelected,this._onRequestSelected,this);this._networkLogView.addEventListener(Network.NetworkLogView.Events.RequestActivated,this._onRequestActivated,this);SDK.networkLog.addEventListener(SDK.NetworkLog.Events.RequestAdded,this._onUpdateRequest,this);SDK.networkLog.addEventListener(SDK.NetworkLog.Events.RequestUpdated,this._onUpdateRequest,this);SDK.networkLog.addEventListener(SDK.NetworkLog.Events.Reset,this._onNetworkLogReset,this);}
static revealAndFilter(filters){const panel=Network.NetworkPanel._instance();let filterString='';for(const filter of filters){filterString+=`${filter.filterType}:${filter.filterValue} `;}
panel._networkLogView.setTextFilterValue(filterString);UI.viewManager.showView('network');}
static _instance(){return(self.runtime.sharedInstance(Network.NetworkPanel));}
throttlingSelectForTest(){return this._throttlingSelect;}
_onWindowChanged(event){const startTime=Math.max(this._calculator.minimumBoundary(),event.data.startTime/1000);const endTime=Math.min(this._calculator.maximumBoundary(),event.data.endTime/1000);this._networkLogView.setWindow(startTime,endTime);}
_setupToolbarButtons(splitWidget){const searchToggle=new UI.ToolbarToggle(ls`Search`,'largeicon-search');function updateSidebarToggle(){const isSidebarShowing=splitWidget.showMode()!==UI.SplitWidget.ShowMode.OnlyMain;searchToggle.setToggled(isSidebarShowing);if(!isSidebarShowing){searchToggle.element.focus();}}
this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._toggleRecordAction));const clearButton=new UI.ToolbarButton(Common.UIString('Clear'),'largeicon-clear');clearButton.addEventListener(UI.ToolbarButton.Events.Click,()=>SDK.networkLog.reset(),this);this._panelToolbar.appendToolbarItem(clearButton);this._panelToolbar.appendSeparator();this._panelToolbar.appendToolbarItem(this._filterBar.filterButton());updateSidebarToggle();splitWidget.addEventListener(UI.SplitWidget.Events.ShowModeChanged,updateSidebarToggle);searchToggle.addEventListener(UI.ToolbarButton.Events.Click,()=>{if(splitWidget.showMode()===UI.SplitWidget.ShowMode.OnlyMain){splitWidget.showBoth();}else{splitWidget.hideSidebar();}});this._panelToolbar.appendToolbarItem(searchToggle);this._panelToolbar.appendSeparator();this._panelToolbar.appendToolbarItem(new UI.ToolbarSettingCheckbox(this._preserveLogSetting,Common.UIString('Do not clear log on page reload / navigation'),Common.UIString('Preserve log')));const disableCacheCheckbox=new UI.ToolbarSettingCheckbox(Common.moduleSetting('cacheDisabled'),Common.UIString('Disable cache (while DevTools is open)'),Common.UIString('Disable cache'));this._panelToolbar.appendToolbarItem(disableCacheCheckbox);this._panelToolbar.appendSeparator();this._panelToolbar.appendToolbarItem(this._throttlingSelect);this._rightToolbar.appendToolbarItem(new UI.ToolbarItem(this._progressBarContainer));this._rightToolbar.appendSeparator();this._rightToolbar.appendToolbarItem(new UI.ToolbarSettingToggle(this._showSettingsPaneSetting,'largeicon-settings-gear',ls`Network settings`));const settingsToolbarLeft=new UI.Toolbar('',this._settingsPane.element);settingsToolbarLeft.makeVertical();settingsToolbarLeft.appendToolbarItem(new UI.ToolbarSettingCheckbox(this._networkLogLargeRowsSetting,'',ls`Use large request rows`));settingsToolbarLeft.appendToolbarItem(new UI.ToolbarSettingCheckbox(this._networkLogShowOverviewSetting,'',ls`Show overview`));const settingsToolbarRight=new UI.Toolbar('',this._settingsPane.element);settingsToolbarRight.makeVertical();settingsToolbarRight.appendToolbarItem(new UI.ToolbarSettingCheckbox(Common.moduleSetting('network.group-by-frame'),'',ls`Group by frame`));settingsToolbarRight.appendToolbarItem(new UI.ToolbarSettingCheckbox(this._networkRecordFilmStripSetting,'',ls`Capture screenshots`));this._panelToolbar.appendSeparator();const importHarButton=new UI.ToolbarButton(ls`Import HAR file...`,'largeicon-load');importHarButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._fileSelectorElement.click(),this);this._panelToolbar.appendToolbarItem(importHarButton);const exportHarButton=new UI.ToolbarButton(ls`Export HAR...`,'largeicon-download');exportHarButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._networkLogView.exportAll(),this);this._panelToolbar.appendToolbarItem(exportHarButton);}
_updateSettingsPaneVisibility(){this._settingsPane.element.classList.toggle('hidden',!this._showSettingsPaneSetting.get());}
_createThrottlingConditionsSelect(){const toolbarItem=new UI.ToolbarComboBox(null,ls`Throttling`);toolbarItem.setMaxWidth(160);MobileThrottling.throttlingManager().decorateSelectWithNetworkThrottling(toolbarItem.selectElement());return toolbarItem;}
_toggleRecording(){if(!this._preserveLogSetting.get()&&!this._toggleRecordAction.toggled()){SDK.networkLog.reset();}
this._toggleRecord(!this._toggleRecordAction.toggled());}
_toggleRecord(toggled){this._toggleRecordAction.setToggled(toggled);this._networkLogView.setRecording(toggled);if(!toggled&&this._filmStripRecorder){this._filmStripRecorder.stopRecording(this._filmStripAvailable.bind(this));}
SDK.networkLog.setIsRecording(toggled);}
_filmStripAvailable(filmStripModel){if(!filmStripModel){return;}
const calculator=this._networkLogView.timeCalculator();this._filmStripView.setModel(filmStripModel,calculator.minimumBoundary()*1000,calculator.boundarySpan()*1000);this._networkOverview.setFilmStripModel(filmStripModel);const timestamps=filmStripModel.frames().map(mapTimestamp);function mapTimestamp(frame){return frame.timestamp/1000;}
this._networkLogView.addFilmStripFrames(timestamps);}
_onNetworkLogReset(){Network.BlockedURLsPane.reset();if(!this._preserveLogSetting.get()){this._calculator.reset();this._overviewPane.reset();}
if(this._filmStripView){this._resetFilmStripView();}}
_willReloadPage(event){this._toggleRecord(true);if(this._pendingStopTimer){clearTimeout(this._pendingStopTimer);delete this._pendingStopTimer;}
if(this.isShowing()&&this._filmStripRecorder){this._filmStripRecorder.startRecording();}}
_load(event){if(this._filmStripRecorder&&this._filmStripRecorder.isRecording()){this._pendingStopTimer=setTimeout(this._stopFilmStripRecording.bind(this),Network.NetworkPanel.displayScreenshotDelay);}}
_stopFilmStripRecording(){this._filmStripRecorder.stopRecording(this._filmStripAvailable.bind(this));delete this._pendingStopTimer;}
_toggleLargerRequests(){this._updateUI();}
_toggleShowOverview(){const toggled=this._networkLogShowOverviewSetting.get();if(toggled){this._overviewPane.show(this._overviewPlaceholderElement);}else{this._overviewPane.detach();}
this.doResize();}
_toggleRecordFilmStrip(){const toggled=this._networkRecordFilmStripSetting.get();if(toggled&&!this._filmStripRecorder){this._filmStripView=new PerfUI.FilmStripView();this._filmStripView.setMode(PerfUI.FilmStripView.Modes.FrameBased);this._filmStripView.element.classList.add('network-film-strip');this._filmStripRecorder=new Network.NetworkPanel.FilmStripRecorder(this._networkLogView.timeCalculator(),this._filmStripView);this._filmStripView.show(this._filmStripPlaceholderElement);this._filmStripView.addEventListener(PerfUI.FilmStripView.Events.FrameSelected,this._onFilmFrameSelected,this);this._filmStripView.addEventListener(PerfUI.FilmStripView.Events.FrameEnter,this._onFilmFrameEnter,this);this._filmStripView.addEventListener(PerfUI.FilmStripView.Events.FrameExit,this._onFilmFrameExit,this);this._resetFilmStripView();}
if(!toggled&&this._filmStripRecorder){this._filmStripView.detach();this._filmStripView=null;this._filmStripRecorder=null;}}
_resetFilmStripView(){const reloadShortcutDescriptor=UI.shortcutRegistry.shortcutDescriptorsForAction('inspector_main.reload')[0];this._filmStripView.reset();if(reloadShortcutDescriptor){this._filmStripView.setStatusText(Common.UIString('Hit %s to reload and capture filmstrip.',reloadShortcutDescriptor.name));}}
elementsToRestoreScrollPositionsFor(){return this._networkLogView.elementsToRestoreScrollPositionsFor();}
wasShown(){UI.context.setFlavor(Network.NetworkPanel,this);Host.userMetrics.panelLoaded('network','DevTools.Launch.Network');}
willHide(){UI.context.setFlavor(Network.NetworkPanel,null);}
revealAndHighlightRequest(request){this._hideRequestPanel();if(request){this._networkLogView.revealAndHighlightRequest(request);}}
async selectRequest(request){await UI.viewManager.showView('network');this._networkLogView.selectRequest(request);return this._networkItemView;}
_onRowSizeChanged(event){this._updateUI();}
_onRequestSelected(event){const request=(event.data);this._currentRequest=request;this._networkOverview.setHighlightedRequest(request);this._updateNetworkItemView();}
_onRequestActivated(event){const showPanel=(event.data);if(showPanel){this._showRequestPanel();}else{this._hideRequestPanel();}}
_showRequestPanel(){this._clearNetworkItemView();if(this._currentRequest){this._createNetworkItemView();}
this._updateUI();}
_hideRequestPanel(){this._clearNetworkItemView();this._splitWidget.hideMain();this._updateUI();}
_updateNetworkItemView(){if(this._splitWidget.showMode()===UI.SplitWidget.ShowMode.Both){this._clearNetworkItemView();this._createNetworkItemView();this._updateUI();}}
_clearNetworkItemView(){if(this._networkItemView){this._networkItemView.detach();this._networkItemView=null;}}
_createNetworkItemView(){if(!this._currentRequest){return;}
this._networkItemView=new Network.NetworkItemView(this._currentRequest,this._networkLogView.timeCalculator());this._networkItemView.leftToolbar().appendToolbarItem(new UI.ToolbarItem(this._closeButtonElement));this._networkItemView.show(this._detailsWidget.element);this._splitWidget.showBoth();}
_updateUI(){this._detailsWidget.element.classList.toggle('network-details-view-tall-header',this._networkLogLargeRowsSetting.get());this._networkLogView.switchViewMode(!this._splitWidget.isResizable());}
appendApplicableItems(event,contextMenu,target){function reveal(request){UI.viewManager.showView('network').then(this.revealAndHighlightRequest.bind(this,request));}
function appendRevealItem(request){contextMenu.revealSection().appendItem(Common.UIString('Reveal in Network panel'),reveal.bind(this,request));}
if(event.target.isSelfOrDescendant(this.element)){return;}
if(target instanceof SDK.Resource){const resource=(target);if(resource.request){appendRevealItem.call(this,resource.request);}
return;}
if(target instanceof Workspace.UISourceCode){const uiSourceCode=(target);const resource=Bindings.resourceForURL(uiSourceCode.url());if(resource&&resource.request){appendRevealItem.call(this,resource.request);}
return;}
if(!(target instanceof SDK.NetworkRequest)){return;}
const request=(target);if(this._networkItemView&&this._networkItemView.isShowing()&&this._networkItemView.request()===request){return;}
appendRevealItem.call(this,request);}
_onFilmFrameSelected(event){const timestamp=(event.data);this._overviewPane.setWindowTimes(0,timestamp);}
_onFilmFrameEnter(event){const timestamp=(event.data);this._networkOverview.selectFilmStripFrame(timestamp);this._networkLogView.selectFilmStripFrame(timestamp/1000);}
_onFilmFrameExit(event){this._networkOverview.clearFilmStripFrame();this._networkLogView.clearFilmStripFrame();}
_onUpdateRequest(event){const request=(event.data);this._calculator.updateBoundaries(request);this._overviewPane.setBounds(this._calculator.minimumBoundary()*1000,this._calculator.maximumBoundary()*1000);this._networkOverview.updateRequest(request);this._overviewPane.scheduleUpdate();}
resolveLocation(locationName){if(locationName==='network-sidebar'){return this._sidebarLocation;}
return null;}};Network.NetworkPanel.displayScreenshotDelay=1000;Network.NetworkPanel.ContextMenuProvider=class{appendApplicableItems(event,contextMenu,target){Network.NetworkPanel._instance().appendApplicableItems(event,contextMenu,target);}};Network.NetworkPanel.RequestRevealer=class{reveal(request){if(!(request instanceof SDK.NetworkRequest)){return Promise.reject(new Error('Internal error: not a network request'));}
const panel=Network.NetworkPanel._instance();return UI.viewManager.showView('network').then(panel.revealAndHighlightRequest.bind(panel,request));}};Network.NetworkPanel.FilmStripRecorder=class{constructor(timeCalculator,filmStripView){this._tracingManager=null;this._resourceTreeModel=null;this._timeCalculator=timeCalculator;this._filmStripView=filmStripView;this._tracingModel=null;this._callback=null;}
traceEventsCollected(events){if(this._tracingModel){this._tracingModel.addEvents(events);}}
tracingComplete(){if(!this._tracingModel||!this._tracingManager){return;}
this._tracingModel.tracingComplete();this._tracingManager=null;this._callback(new SDK.FilmStripModel(this._tracingModel,this._timeCalculator.minimumBoundary()*1000));this._callback=null;if(this._resourceTreeModel){this._resourceTreeModel.resumeReload();}
this._resourceTreeModel=null;}
tracingBufferUsage(){}
eventsRetrievalProgress(progress){}
startRecording(){this._filmStripView.reset();this._filmStripView.setStatusText(Common.UIString('Recording frames...'));const tracingManagers=SDK.targetManager.models(SDK.TracingManager);if(this._tracingManager||!tracingManagers.length){return;}
this._tracingManager=tracingManagers[0];this._resourceTreeModel=this._tracingManager.target().model(SDK.ResourceTreeModel);if(this._tracingModel){this._tracingModel.dispose();}
this._tracingModel=new SDK.TracingModel(new Bindings.TempFileBackingStorage());this._tracingManager.start(this,'-*,disabled-by-default-devtools.screenshot','');Host.userMetrics.actionTaken(Host.UserMetrics.Action.FilmStripStartedRecording);}
isRecording(){return!!this._tracingManager;}
stopRecording(callback){if(!this._tracingManager){return;}
this._tracingManager.stop();if(this._resourceTreeModel){this._resourceTreeModel.suspendReload();}
this._callback=callback;this._filmStripView.setStatusText(Common.UIString('Fetching frames...'));}};Network.NetworkPanel.ActionDelegate=class{handleAction(context,actionId){const panel=UI.context.flavor(Network.NetworkPanel);console.assert(panel&&panel instanceof Network.NetworkPanel);switch(actionId){case'network.toggle-recording':panel._toggleRecording();return true;case'network.hide-request-details':if(!panel._networkItemView){return false;}
panel._hideRequestPanel();panel._networkLogView.resetFocus();return true;case'network.search':const selection=UI.inspectorView.element.window().getSelection();let queryCandidate='';if(selection.rangeCount){queryCandidate=selection.toString().replace(/\r?\n.*/,'');}
Network.SearchNetworkView.openSearch(queryCandidate);return true;}
return false;}};Network.NetworkPanel.RequestLocationRevealer=class{async reveal(match){const location=(match);const view=await Network.NetworkPanel._instance().selectRequest(location.request);if(!view){return;}
if(location.searchMatch){await view.revealResponseBody(location.searchMatch.lineNumber);}
if(location.requestHeader){view.revealRequestHeader(location.requestHeader.name);}
if(location.responseHeader){view.revealResponseHeader(location.responseHeader.name);}}};Network.SearchNetworkView=class extends Search.SearchView{constructor(){super('network');}
static async openSearch(query,searchImmediately){await UI.viewManager.showView('network.search-network-tab');const searchView=(self.runtime.sharedInstance(Network.SearchNetworkView));searchView.toggle(query,!!searchImmediately);return searchView;}
createScope(){return new Network.NetworkSearchScope();}};;Root.Runtime.cachedResources["network/binaryResourceView.css"]="/*\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.panel.network .toolbar.binary-view-toolbar {\n  border-top: 1px solid #ccc;\n  border-bottom: 0px;\n  padding-left: 5px;\n}\n\n.binary-view-copied-text {\n  opacity: 1;\n}\n\n.binary-view-copied-text.fadeout {\n  opacity: 0;\n  transition: opacity 1s;\n}\n\n/*# sourceURL=network/binaryResourceView.css */";Root.Runtime.cachedResources["network/blockedURLsPane.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.list {\n    border: none !important;\n    border-top: var(--divider-border) !important;\n}\n\n.blocking-disabled {\n    pointer-events: none;\n    opacity: 0.8;\n}\n\n.editor-container {\n    padding: 0 4px;\n}\n\n.no-blocked-urls, .blocked-urls {\n    overflow-x: hidden;\n    overflow-y: auto;\n}\n\n.no-blocked-urls {\n    display: flex;\n    justify-content: center;\n    padding: 10px;\n}\n\n.no-blocked-urls > span {\n    white-space: pre;\n}\n\n.blocked-url {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    flex: auto;\n}\n\n.blocked-url-count {\n    flex: none;\n    padding-right: 9px;\n}\n\n.blocked-url-checkbox {\n    margin-left: 8px;\n    flex: none;\n}\n\n.blocked-url-label {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    flex: auto;\n    padding: 0 3px;\n}\n\n.blocked-url-edit-row {\n    flex: none;\n    display: flex;\n    flex-direction: row;\n    margin: 7px 5px 0 5px;\n    align-items: center;\n}\n\n.blocked-url-edit-value {\n    -webkit-user-select: none;\n    flex: 1 1 0px;\n}\n\n.blocked-url-edit-row input {\n    width: 100%;\n    text-align: inherit;\n    height: 22px;\n}\n\n/*# sourceURL=network/blockedURLsPane.css */";Root.Runtime.cachedResources["network/eventSourceMessagesView.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.event-source-messages-view .data-grid {\n    flex: auto;\n    border: none;\n}\n\n/*# sourceURL=network/eventSourceMessagesView.css */";Root.Runtime.cachedResources["network/networkConfigView.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.network-config {\n    padding: 12px;\n    display: block;\n}\n\n.network-config-group {\n    display: flex;\n    margin-bottom: 10px;\n    flex-wrap: wrap;\n    flex: 0 0 auto;\n    min-height: 30px;\n}\n\n.network-config-title {\n    margin-right: 16px;\n    width: 130px;\n}\n\n.network-config-fields {\n    flex: 2 0 200px;\n}\n\n.panel-section-separator {\n    height: 1px;\n    margin-bottom: 10px;\n    background: #f0f0f0;\n}\n\n/* Disable cache */\n\n.network-config-disable-cache {\n    line-height: 28px;\n    border-top: none;\n    padding-top: 0;\n}\n\n.network-config-input-validation-error {\n  color: var(--input-validation-error);\n  margin: 5px 0;\n}\n\n/* Network throttling */\n\n.network-config-throttling .chrome-select {\n    width: 100%;\n    max-width: 250px;\n}\n\n.network-config-throttling > .network-config-title {\n    line-height: 24px;\n}\n\n/* User agent */\n\n.network-config-ua > .network-config-title {\n    line-height: 20px;\n}\n\n.network-config-ua span[is=\"dt-radio\"].checked > * {\n    display: none\n}\n\n.network-config-ua input {\n    display: block;\n    width: calc(100% - 20px);\n}\n\n.network-config-ua input[readonly] {\n    background-color: rgb(235, 235, 228);\n}\n\n.network-config-ua input[type=text], .network-config-ua .chrome-select {\n    margin-top: 8px;\n}\n\n.network-config-ua .chrome-select {\n    width: calc(100% - 20px);\n    max-width: 250px;\n}\n\n.network-config-ua span[is=\"dt-radio\"] {\n    display: block;\n}\n\n.network-config-ua-custom {\n    opacity: 0.5;\n}\n\n.network-config-ua-custom.checked {\n    opacity: 1;\n}\n\n/*# sourceURL=network/networkConfigView.css */";Root.Runtime.cachedResources["network/networkLogView.css"]="/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.network-log-grid.data-grid {\n    border: none !important;\n    flex: auto;\n}\n\n.network-log-grid.data-grid.no-selection[data-keyboard-focus=\"true\"]:focus {\n    border: none !important;\n}\n\n#network-container {\n    border: 1px solid rgb(204, 204, 204);\n}\n\n#network-container.no-node-selected:focus-within {\n    border: 1px solid var(--accent-color);\n}\n\n.network-log-grid {\n    --network-grid-default-color: rgba(255, 255, 255, 1.0);\n    --network-grid-stripe-color: rgba(245, 245, 245, 1.0);\n    --network-grid-navigation-color: rgba(221, 238, 255, 1.0);\n    --network-grid-hovered-color: rgba(235, 242, 252, 0.7);\n    --network-grid-initiator-path-color: rgba(58, 217, 58, 0.4);\n    --network-grid-initiated-path-color: rgba(217, 58, 58, 0.4);\n    --network-grid-selected-color: rgba(219, 219, 219, .6);\n    --network-grid-focus-selected-color: var(--selection-bg-color);\n    --network-grid-focus-selected-color-has-error: rgb(255, 240, 240, 1.0);\n    --network-grid-from-frame-color: rgba(224, 247, 250, .4);\n    --network-grid-is-product-color: rgba(255, 252, 225, .6);\n}\n\n.-theme-with-dark-background .network-log-grid {\n    --network-grid-default-color: rgba(36, 36, 36, 1.0);\n    --network-grid-stripe-color: rgba(41, 41, 41, 1.0);\n    --network-grid-navigation-color: rgba(221, 238, 255, 1.0);\n    --network-grid-hovered-color: rgba(20, 37, 63, 0.7);\n    --network-grid-initiator-path-color: rgba(58, 217, 58, 0.4);\n    --network-grid-initiated-path-color: rgba(217, 58, 58, 0.4);\n    --network-grid-selected-color: rgba(57, 57, 57, .6);\n    --network-grid-focus-selected-color: var(--selection-bg-color);\n    --network-grid-focus-selected-color-has-error: rgba(217, 58, 58, 0.15);\n    --network-grid-from-frame-color: rgba(224, 247, 250, .4);\n    --network-grid-is-product-color: rgba(255, 252, 225, .6);\n}\n\n.network-summary-bar {\n    flex: 0 0 27px;\n    line-height: 27px;\n    padding-left: 5px;\n    background-color: #eee;\n    border-top: 1px solid #ccc;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    user-select: text;\n}\n\n.panel.network .toolbar.network-summary-bar {\n    border-bottom: 0px;\n}\n\n.network-summary-bar span[is=dt-icon-label] {\n    margin-right: 6px;\n}\n\n.network-summary-bar > * {\n    flex: none;\n}\n\n.network-log-grid.data-grid table.data {\n    background: transparent;\n}\n\n.network-log-grid.data-grid td {\n    height: 41px;\n    border-left: 1px solid #e1e1e1;\n    vertical-align: middle;\n}\n\n.network-log-grid.data-grid .corner {\n    display: none;\n}\n\n.network-log-grid.data-grid.small td {\n    height: 21px;\n}\n\n.network-waterfall-header, .network-log-grid.data-grid th {\n    border-bottom: 1px solid rgb(205, 205, 205);\n    border-left: 1px solid rgb(205, 205, 205);\n}\n\n.network-log-grid.data-grid table.data th {\n    border-bottom: none;\n}\n\n.network-waterfall-header, .network-log-grid.data-grid .header-container {\n    height: 31px;\n    background-color: var(--toolbar-bg-color);\n}\n\n.network-log-grid.data-grid .data-container {\n    top: 31px;\n}\n\n.network-waterfall-header.small, .network-log-grid.data-grid.small .header-container {\n    height: 27px;\n}\n\n.network-log-grid.data-grid.small .data-container {\n    top: 27px;\n}\n\n.network-log-grid.data-grid select {\n    -webkit-appearance: none;\n    border: none;\n    width: 100%;\n    color: inherit;\n}\n\n.network-log-grid.data-grid .name-column {\n    cursor: pointer;\n}\n\n.network-log-grid.data-grid .waterfall-column {\n    padding: 1px 0;\n}\n\n.network-log-grid.data-grid .waterfall-column .sort-order-icon-container {\n    right: 15px;\n    pointer-events: none;\n}\n\n.network-log-grid.data-grid th.sortable:active {\n    background-image: none !important;\n}\n\n.network-cell-subtitle {\n    font-weight: normal;\n    color: gray;\n}\n\n.network-badge {\n    margin-right: 4px;\n}\n\n.network-error-row,\n.network-error-row .network-cell-subtitle ,\n.network-log-grid.data-grid tr.selected.network-error-row,\n.network-log-grid.data-grid tr.selected.network-error-row .network-cell-subtitle,\n.network-log-grid.data-grid tr.selected.network-error-row .network-dim-cell {\n    color: rgb(230, 0, 0) !important;\n}\n\n.network-log-grid.data-grid:focus tr.selected.network-error-row,\n.network-log-grid.data-grid:focus tr.selected.network-error-row .network-cell-subtitle,\n.network-log-grid.data-grid:focus tr.selected.network-error-row .network-dim-cell {\n    color: rgb(230, 0, 0) !important;\n}\n.initiator-column .devtools-link {\n    color: inherit;\n}\n\n.network-log-grid.data-grid tr.selected,\n.network-log-grid.data-grid tr.selected .network-cell-subtitle,\n.network-log-grid.data-grid tr.selected .network-dim-cell {\n    color: inherit;\n}\n\n.network-log-grid.data-grid:focus tr.selected,\n.network-log-grid.data-grid:focus tr.selected .network-cell-subtitle,\n.network-log-grid.data-grid:focus tr.selected .network-dim-cell {\n    color: var(--selection-fg-color);\n}\n\n.network-log-grid tr.highlighted-row {\n    -webkit-animation: network-row-highlight-fadeout 2s 0s;\n}\n\n@-webkit-keyframes network-row-highlight-fadeout {\n    from {background-color: rgba(255, 255, 120, 1); }\n    to { background-color: rgba(255, 255, 120, 0); }\n}\n\n.network-header-subtitle {\n    color: gray;\n}\n\n.network-log-grid.data-grid.small .network-cell-subtitle,\n.network-log-grid.data-grid.small .network-header-subtitle {\n    display: none;\n}\n\n/* Resource preview icons */\n\n.network-log-grid.data-grid .icon {\n    content: url(Images/resourcePlainIcon.png);\n}\n\n.network-log-grid.data-grid.small .icon {\n    content: url(Images/resourcePlainIconSmall.png);\n}\n\n.network-log-grid.data-grid .icon.script {\n    content: url(Images/resourceJSIcon.png);\n}\n\n.network-log-grid.data-grid.small .icon.script {\n    content: url(Images/resourceDocumentIconSmall.png);\n}\n\n.network-log-grid.data-grid .icon.document {\n    content: url(Images/resourceDocumentIcon.png);\n}\n\n.network-log-grid.data-grid.small .icon.document {\n    content: url(Images/resourceDocumentIconSmall.png);\n}\n\n.network-log-grid.data-grid .icon.stylesheet {\n    content: url(Images/resourceCSSIcon.png);\n}\n\n.network-log-grid.data-grid.small .icon.stylesheet {\n    content: url(Images/resourceDocumentIconSmall.png);\n}\n\n.network-log-grid.data-grid .icon.media {\n    content: url(Images/resourcePlainIcon.png); /* FIXME: media icon */\n}\n\n.network-log-grid.data-grid.small .icon.media {\n    content: url(Images/resourcePlainIconSmall.png); /* FIXME: media icon */\n}\n.network-log-grid.data-grid .icon.texttrack {\n    content: url(Images/resourcePlainIcon.png); /* FIXME: vtt icon */\n}\n\n.network-log-grid.data-grid.small .icon.texttrack {\n    content: url(Images/resourcePlainIconSmall.png); /* FIXME: vtt icon */\n}\n\n.network-log-grid.data-grid .icon.image {\n    position: relative;\n    background-image: url(Images/resourcePlainIcon.png);\n    background-repeat: no-repeat;\n    content: \"\";\n}\n\n.network-log-grid.data-grid.small .icon.image {\n    background-image: url(Images/resourcePlainIconSmall.png);\n    content: \"\";\n}\n\n.network-log-grid.data-grid .icon {\n    float: left;\n    width: 32px;\n    height: 32px;\n    margin-top: 1px;\n    margin-right: 3px;\n}\n\n.network-log-grid.data-grid.small .icon {\n    width: 16px;\n    height: 16px;\n}\n\n.network-log-grid.data-grid .image-network-icon-preview {\n    position: absolute;\n    margin: auto;\n    top: 3px;\n    bottom: 4px;\n    left: 5px;\n    right: 5px;\n    max-width: 18px;\n    max-height: 21px;\n    min-width: 1px;\n    min-height: 1px;\n}\n\n.network-log-grid.data-grid.small .image-network-icon-preview {\n    top: 2px;\n    bottom: 1px;\n    left: 3px;\n    right: 3px;\n    max-width: 8px;\n    max-height: 11px;\n}\n\n.network-dim-cell {\n    color: grey;\n}\n\n.network-frame-divider {\n    width: 2px;\n    background-color: #FCCC49;\n    z-index: 10;\n    visibility: hidden;\n}\n\n#network-container:not(.brief-mode) .data-container {\n    overflow: hidden;\n}\n\n.network-log-grid.data-grid .resources-dividers {\n    z-index: 0;\n}\n\n.network-log-grid.data-grid .resources-dividers-label-bar {\n    background-color: transparent;\n    border: none;\n    height: 30px;\n    pointer-events: none;\n}\n\n#network-container {\n    overflow: hidden;\n}\n\n.network-status-pane {\n    color: #777;\n    background-color: white;\n    z-index: 500;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n    text-align: center;\n    padding: 0 20px;\n    overflow: auto;\n}\n\n.network-status-pane > .recording-hint {\n    font-size: 14px;\n    text-align: center;\n    line-height: 28px;\n}\n\n.network-waterfall-header {\n    position: absolute;\n    border-left: 0px;\n    width: 100%;\n    display: table;\n    z-index: 200;\n}\n\n.network-waterfall-header:hover {\n    background-color: hsla(0, 0%, 10%, 0.1);\n}\n\n.network-waterfall-header div {\n    display: table-cell;\n    line-height: 14px;\n    margin: auto 0px;\n    vertical-align: middle;\n    text-align: left;\n    font-weight: normal;\n    padding: 0px 4px;\n}\n\n.network-waterfall-header .sort-order-icon-container {\n    position: absolute;\n    top: 1px;\n    right: 0;\n    bottom: 1px;\n    display: flex;\n    align-items: center;\n}\n\n.network-waterfall-header .sort-order-icon {\n    align-items: center;\n    margin-right: 4px;\n    margin-bottom: -2px;\n}\n\n.network-frame-group-icon {\n    display: inline-block;\n    margin: -8px -2px;\n}\n\n.network-frame-group-badge {\n    margin-right: 4px;\n}\n\n/*# sourceURL=network/networkLogView.css */";Root.Runtime.cachedResources["network/networkManageCustomHeadersView.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n.custom-headers-list {\n    height: 272px;\n    width: 250px;\n}\n\n.custom-headers-wrapper{\n    margin: 10px;\n}\n\n.header {\n    padding: 0 0 6px;\n    font-size: 18px;\n    font-weight: normal;\n    flex: none;\n}\n\n.custom-headers-header {\n    padding:2px;\n}\n\n.custom-headers-list-item {\n    padding-left: 5px;\n}\n\n.editor-container {\n    padding: 5px 0px 0px 5px;\n}\n\n.add-button {\n    width: 150px;\n    margin: auto;\n    margin-top: 5px;\n}\n\n/*# sourceURL=network/networkManageCustomHeadersView.css */";Root.Runtime.cachedResources["network/networkPanel.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n .panel.network .toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n.network-details-view {\n    background: rgb(203, 203, 203);\n}\n\n.network-details-view-tall-header {\n    border-top: 4px solid var(--toolbar-bg-color);\n}\n\n.network-item-view {\n    display: flex;\n    background: white;\n}\n\n.network-item-preview-toolbar {\n    border-top: 1px solid #ccc;\n    background-color: #eee;\n}\n\n.resource-timing-view {\n    display: block;\n    margin: 6px;\n    color: rgb(30%, 30%, 30%);\n}\n\n.resource-timing-table {\n    width: 100% !important;\n}\n\n#network-overview-panel {\n    flex: none;\n    position: relative;\n}\n\n#network-overview-container {\n    overflow: hidden;\n    flex: auto;\n    display: flex;\n    flex-direction: column;\n    position: relative;\n    border-bottom: 1px solid #CDCDCD;\n}\n\n#network-overview-container canvas {\n    width: 100%;\n    height: 100%;\n}\n\n#network-overview-grid .resources-dividers-label-bar {\n    pointer-events: auto;\n}\n\n.network .network-overview {\n    flex: 0 0 60px;\n}\n\n.network-overview .resources-dividers-label-bar {\n    background-color: rgba(255, 255, 255, 0.95);\n}\n\n.network-overview .resources-dividers-label-bar .resources-divider {\n    background-color: transparent;\n}\n\n.network-overview .resources-dividers {\n    z-index: 250;\n}\n\n.request-view.html iframe {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n}\n\n.network-film-strip {\n    border-bottom: solid 1px #cdcdcd;\n    flex: none !important;\n}\n\n.network-film-strip-placeholder {\n    flex-shrink: 0;\n}\n\n.network-tabbed-pane {\n    background-color: var(--toolbar-bg-color);\n}\n\n.network-settings-pane {\n    flex: none;\n    background-color: var(--toolbar-bg-color);\n}\n\n.network-settings-pane .toolbar {\n    flex: 1 1;\n}\n\n.network-toolbar-container {\n    display: flex;\n    flex: none;\n}\n\n.network-toolbar-container > :first-child {\n    flex: 1 1 auto;\n}\n\n/*# sourceURL=network/networkPanel.css */";Root.Runtime.cachedResources["network/networkTimingTable.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.network-timing-table {\n    width: 380px;\n    border-spacing: 0;\n    padding-left: 10px;\n    padding-right: 10px;\n    line-height: initial;\n}\n\n.network-timing-start {\n    border-top: 5px solid transparent;\n}\n\n.network-timing-start th span.network-timing-hidden-header {\n    height: 1px;\n    width: 1px;\n    position: absolute;\n    overflow: hidden;\n}\n\n.network-timing-table-header td, .network-timing-footer td {\n    border-top: 10px solid transparent;\n}\n\n.network-timing-table-header td {\n    color: #737373;\n}\n\n.network-timing-table-header td:last-child {\n    text-align: right;\n}\n\ntable.network-timing-table > tr:not(.network-timing-table-header):not(.network-timing-footer) > td:first-child {\n    padding-left: 12px;\n}\n\n.network-timing-table col.labels {\n    width: 156px;\n}\n\n.network-timing-table col.duration {\n    width: 80px;\n}\n\n.network-timing-table td {\n    padding: 4px 0;\n}\n\n.network-timing-table td.caution {\n    font-weight: bold;\n    color: rgb(255, 128, 0);\n    padding: 2px 0;\n}\n\n.network-timing-table hr.break {\n    border: 0;\n    height: 1px;\n    background-image: linear-gradient(to right, #eee, #bbb, #eee);\n}\n\n.network-timing-footer td:last-child {\n    font-weight: bold;\n    text-align: right;\n}\n\n.network-timing-row {\n    position: relative;\n    height: 15px;\n}\n\n.network-timing-bar {\n    position: absolute;\n    min-width: 1px;\n    top: 0;\n    bottom: 0;\n}\n\n.network-timing-bar-title {\n    color: #222;\n    white-space: nowrap;\n    text-align: right;\n}\n\n.network-timing-bar.queueing,\n.network-timing-bar.total {\n    border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.network-timing-bar.blocking, -theme-preserve {\n    background-color: #AAAAAA;\n}\n\n.network-timing-bar.proxy, -theme-preserve {\n    background-color: #A1887F;\n}\n\n.network-timing-bar.dns, -theme-preserve {\n    background-color: #009688;\n}\n\n.network-timing-bar.connecting,\n.network-timing-bar.serviceworker,\n.network-timing-bar.serviceworker-preparation, -theme-preserve {\n    background-color: #FF9800;\n}\n\n.network-timing-bar.ssl, -theme-preserve {\n    background-color: #9C27B0;\n}\n\n.network-timing-bar.sending, -theme-preserve {\n    background-color: #B0BEC5;\n}\n\n.network-timing-bar.waiting, -theme-preserve {\n    background-color: #00C853;\n}\n\n.network-timing-bar.receiving, -theme-preserve,\n.network-timing-bar.receiving-push, -theme-preserve {\n    background-color: #03A9F4;\n}\n\n.network-timing-bar.push, -theme-preserve {\n    background-color: #8CDBff;\n}\n\n.network-timing-bar.server-timing, -theme-preserve {\n    background-color: #ddd;\n}\n\n.network-timing-table td.network-timing-metric {\n    white-space: nowrap;\n    max-width: 150px;\n    overflow-x: hidden;\n    text-overflow: ellipsis;\n}\n\n.network-timing-bar.proxy,\n.network-timing-bar.dns,\n.network-timing-bar.ssl,\n.network-timing-bar.connecting,\n.network-timing-bar.blocking {\n    height: 10px;\n    margin: auto;\n}\n\n/*# sourceURL=network/networkTimingTable.css */";Root.Runtime.cachedResources["network/networkWaterfallColumn.css"]="/* Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n.network-waterfall-v-scroll {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    overflow-x: hidden;\n    margin-top: 31px;\n    z-index: 200;\n}\n\n.network-waterfall-v-scroll.small {\n    margin-top: 27px;\n}\n\n.network-waterfall-v-scroll-content {\n    width: 15px;\n    pointer-events: none;\n}\n\n/*# sourceURL=network/networkWaterfallColumn.css */";Root.Runtime.cachedResources["network/requestCookiesView.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.request-cookies-view {\n    overflow: auto;\n    padding: 12px;\n    height: 100%;\n}\n\n.request-cookies-view .request-cookies-title {\n    font-size: 12px;\n    font-weight: bold;\n    margin-right: 30px;\n    color: rgb(97, 97, 97);\n}\n\n.request-cookies-view .cookie-line {\n    margin-top: 6px;\n    display: inline-block;\n}\n\n.request-cookies-view .cookies-panel-item {\n    margin-top: 6px;\n    margin-bottom: 16px;\n    flex: none;\n}\n\n.request-cookies-view .cookie-table .flagged-cookie-row {\n    background-color: yellow;\n}\n\n.cookie-warning-icon {\n    margin-right: 4px;\n}\n\ntd.flagged-cookie-attribute-cell .cookie-warning-icon {\n    filter: grayscale();\n}\n\n.request-cookies-view tr.revealed.data-grid-data-grid-node.flagged-cookie-attribute-row:not(.selected):nth-child(odd) {\n    background-color: hsl(51, 85%, 80%);\n}\n\n.request-cookies-view tr.revealed.data-grid-data-grid-node.flagged-cookie-attribute-row:not(.selected):nth-child(even) {\n    background-color: rgb(255, 240, 155);\n}\n\n/*# sourceURL=network/requestCookiesView.css */";Root.Runtime.cachedResources["network/requestHeadersTree.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tree-outline {\n    padding-left: 0;\n}\n\n.tree-outline > ol {\n    padding-bottom: 5px;\n    border-bottom: solid 1px #e0e0e0;\n}\n\n.tree-outline > .parent {\n    -webkit-user-select: none;\n    font-weight: bold;\n    color: #616161;\n    margin-top: -1px;\n    height: 20px;\n    display: flex;\n    align-items: center;\n    height: 26px;\n}\n\n.tree-outline li {\n    display: block;\n    padding-left: 5px;\n    line-height: 20px;\n}\n\n.tree-outline li:not(.parent) {\n    margin-left: 10px;\n}\n\n.tree-outline li:not(.parent)::before {\n    display: none;\n}\n\n.tree-outline .caution {\n    margin-left: 4px;\n    display: inline-block;\n    font-weight: bold;\n}\n\n.tree-outline li.expanded .header-count {\n    display: none;\n}\n\n.tree-outline li .header-toggle {\n    display: none;\n}\n\n.tree-outline li .status-from-cache {\n    color: gray;\n}\n\n.tree-outline li.expanded .header-toggle {\n    display: inline;\n    margin-left: 30px;\n    font-weight: normal;\n    color: rgb(45%, 45%, 45%);\n}\n\n.tree-outline li .header-toggle:hover {\n    color: rgb(20%, 20%, 45%);\n    cursor: pointer;\n}\n\n.tree-outline .header-name {\n    color: rgb(33%, 33%, 33%);\n    display: inline-block;\n    margin-right: 0.25em;\n    font-weight: bold;\n    vertical-align: top;\n    white-space: pre-wrap;\n}\n\n.tree-outline .header-separator {\n    user-select: none;\n}\n\n.tree-outline .header-value {\n    display: inline;\n    margin-right: 1em;\n    white-space: pre-wrap;\n    word-break: break-all;\n    margin-top: 1px;\n}\n\n.tree-outline .empty-request-header {\n    color: rgba(33%, 33%, 33%, 0.5);\n}\n\n.request-headers-show-more-button {\n    border: none;\n    border-radius: 3px;\n    display: inline-block;\n    font-size: 12px;\n    font-family: sans-serif;\n    cursor: pointer;\n    margin: 0 4px;\n    padding: 2px 4px;\n}\n\n.header-highlight {\n    background-color: #FFFF78\n}\n\n/*# sourceURL=network/requestHeadersTree.css */";Root.Runtime.cachedResources["network/requestHeadersView.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.request-headers-view {\n    -webkit-user-select: text;\n    overflow: auto;\n}\n\n.resource-status-image {\n    margin-top: -2px;\n    margin-right: 3px;\n}\n\n.request-headers-tree {\n    flex-grow: 1;\n    overflow-y: auto;\n    margin: 0;\n}\n\n.header-decode-error {\n    color: red;\n}\n\n.-theme-with-dark-background .header-decode-error {\n    color: hsl(0, 100%, 65%);\n}\n\n/*# sourceURL=network/requestHeadersView.css */";Root.Runtime.cachedResources["network/requestHTMLView.css"]="/*\n * Copyright (c) 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n-theme-preserve, .html-preview-frame {\n  box-shadow: var(--drop-shadow);\n  background: white;\n  flex-grow: 1;\n  margin: 20px;\n}\n\n/*# sourceURL=network/requestHTMLView.css */";Root.Runtime.cachedResources["network/requestInitiatorView.css"]="/*\n * Copyright (c) 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.request-initiator-view {\n    display: block;\n    margin: 6px;\n}\n\n.request-initiator-view-section-title {\n    font-weight: bold;\n    padding: 4px;\n}\n\n.request-initiator-view-section-title[data-keyboard-focus=\"true\"]:focus {\n    background-color: rgba(0, 0, 0, 0.08);\n}\n\n.request-initiator-view-section-content {\n    margin-left: 6px;\n}\n\n/*# sourceURL=network/requestInitiatorView.css */";Root.Runtime.cachedResources["network/signedExchangeInfoTree.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tree-outline {\n    padding-left: 0;\n}\n\n.tree-outline > ol {\n    padding-bottom: 5px;\n    border-bottom: solid 1px #e0e0e0;\n}\n\n.tree-outline > .parent {\n    -webkit-user-select: none;\n    font-weight: bold;\n    color: #616161;\n    margin-top: -1px;\n    height: 20px;\n    display: flex;\n    align-items: center;\n    height: 26px;\n}\n\n.tree-outline li {\n    padding-left: 5px;\n    line-height: 20px;\n}\n\n.tree-outline li:not(.parent) {\n    display: block;\n    margin-left: 10px;\n}\n\n.tree-outline li:not(.parent)::before {\n    display: none;\n}\n\n.tree-outline .header-name {\n    color: rgb(33%, 33%, 33%);\n    display: inline-block;\n    margin-right: 0.25em;\n    font-weight: bold;\n    vertical-align: top;\n    white-space: pre-wrap;\n}\n\n.tree-outline .header-separator {\n    user-select: none;\n}\n\n.tree-outline .header-value {\n    display: inline;\n    margin-right: 1em;\n    white-space: pre-wrap;\n    word-break: break-all;\n    margin-top: 1px;\n}\n\n.tree-outline .header-toggle {\n    display: inline;\n    margin-left: 30px;\n    font-weight: normal;\n    color: rgb(45%, 45%, 45%);\n}\n\n.tree-outline .header-toggle:hover {\n    color: rgb(20%, 20%, 45%);\n    cursor: pointer;\n}\n\n.tree-outline .error-log {\n    color: red;\n    display: inline-block;\n    margin-right: 0.25em;\n    margin-left: 0.25em;\n    font-weight: bold;\n    vertical-align: top;\n    white-space: pre-wrap;\n}\n\n.tree-outline .hex-data {\n    display: block;\n    word-break: break-word;\n    margin-left: 20px;\n}\n\n.tree-outline .error-field {\n    color: red;\n}\n\n/*# sourceURL=network/signedExchangeInfoTree.css */";Root.Runtime.cachedResources["network/signedExchangeInfoView.css"]="/*\n * Copyright (c) 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.signed-exchange-info-view {\n    -webkit-user-select: text;\n    overflow: auto;\n}\n\n.signed-exchange-info-tree {\n    flex-grow: 1;\n    overflow-y: auto;\n    margin: 0;\n}\n\n/*# sourceURL=network/signedExchangeInfoView.css */";Root.Runtime.cachedResources["network/webSocketFrameView.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.websocket-frame-view {\n    -webkit-user-select: text;\n}\n\n.websocket-frame-view .data-grid {\n    flex: auto;\n    border: none;\n}\n\n.websocket-frame-view .data-grid .data {\n    background-image: none;\n}\n\n.websocket-frame-view-td {\n    border-bottom: 1px solid #ccc;\n}\n\n.websocket-frame-view .data-grid tr.selected {\n    background-color: #def;\n}\n\n.websocket-frame-view .data-grid td,\n.websocket-frame-view .data-grid th {\n    border-left-color: #ccc;\n}\n\n.websocket-frame-view-row-send td:first-child::before {\n    content: \"\\2B06\";\n    color: #080;\n    padding-right: 4px;\n}\n\n.websocket-frame-view-row-receive td:first-child::before {\n    content: \"\\2B07\";\n    color: #E65100;\n    padding-right: 4px;\n}\n\n.data-grid:focus .websocket-frame-view-row-send.selected td:first-child::before,\n.data-grid:focus .websocket-frame-view-row-receive.selected td:first-child::before {\n    color: white;\n}\n\n.websocket-frame-view-row-send {\n    background-color: rgb(226, 247, 218);\n}\n\n.websocket-frame-view-row-error {\n    background-color: rgb(255, 237, 237);\n    color: rgb(182, 0, 0);\n}\n\n.websocket-frame-view .toolbar {\n    border-bottom: var(--divider-border);\n}\n\n/*# sourceURL=network/webSocketFrameView.css */";Root.Runtime.cachedResources["object_ui/customPreviewComponent.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.custom-expandable-section {\n    display: inline-flex;\n    flex-direction: column;\n}\n\n.custom-expand-icon {\n    -webkit-user-select: none;\n    opacity: 0.5;\n    margin-right: 4px;\n    margin-bottom: -2px;\n    background: black;\n}\n\n.custom-expandable-section-standard-section {\n    display: inline-flex;\n}\n/*# sourceURL=object_ui/customPreviewComponent.css */";Root.Runtime.cachedResources["object_ui/objectPopover.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.object-popover-content {\n    display: block;\n    position: relative;\n    overflow: hidden;\n    flex: 1 1 auto;\n}\n\n.object-popover-title {\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n    font-weight: bold;\n    padding-left: 18px;\n    padding-bottom: 2px;\n}\n\n.object-popover-tree {\n    border-top: 1px solid rgb(184, 184, 184);\n    overflow: auto;\n    width: 100%;\n    height: calc(100% - 13px);\n}\n\n.object-popover-container {\n    display: inline-block;\n}\n\n.function-popover-title {\n    border-bottom: 1px solid #AAA;\n    margin-bottom: 3px;\n    padding-bottom: 2px;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n}\n\n.function-popover-title .function-name {\n    font-weight: bold;\n}\n\n.function-title-link-container {\n    display: flex;\n    align-items: center;\n    position: relative;\n    margin-left: 10px;\n}\n\n.function-title-link-container .devtools-link {\n    white-space: nowrap;\n    overflow: hidden;\n}\n\n/*# sourceURL=object_ui/objectPopover.css */";Root.Runtime.cachedResources["object_ui/objectPropertiesSection.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.object-properties-section-dimmed {\n    opacity: 0.6;\n}\n\n.object-properties-section {\n    padding: 0 0 0px 0px;\n    color: rgb(33,33,33) !important;\n    display: flex;\n    flex-direction: column;\n}\n\n.object-properties-section li {\n    -webkit-user-select: text;\n}\n\n.object-properties-section li::before {\n    top: -1px;\n}\n\n.object-properties-section li.editing-sub-part {\n    padding: 3px 12px 8px 6px;\n    margin: -1px -6px -8px -6px;\n    text-overflow: clip;\n}\n\n.object-properties-section li.editing {\n    margin-left: 10px;\n    text-overflow: clip;\n}\n\n.tree-outline ol.title-less-mode {\n    padding-left: 0px;\n}\n\n.object-properties-section .synthetic-property {\n    font-style: italic;\n}\n\n.object-properties-section .private-property-hash {\n    color: #222;\n}\n\n.object-properties-section-root-element {\n    display: flex;\n    flex-direction: row;\n}\n\n.object-properties-section .editable-div {\n    overflow: hidden;\n}\n\n.name-and-value {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    line-height: 16px;\n}\n\n.editing-sub-part .name-and-value {\n    overflow: visible;\n    display: inline-flex;\n}\n\n.property-prompt {\n    margin-left: 4px;\n}\n\n.tree-outline.hide-selection-when-blurred .selected:focus[data-keyboard-focus=\"true\"] {\n    background: none;\n}\n\n.tree-outline.hide-selection-when-blurred .selected:focus[data-keyboard-focus=\"true\"] ::slotted(*),\n.tree-outline.hide-selection-when-blurred .selected:focus[data-keyboard-focus=\"true\"] .tree-element-title,\n.tree-outline.hide-selection-when-blurred .selected:focus[data-keyboard-focus=\"true\"] .name-and-value {\n    background: var(--focus-bg-color);\n    border-radius: 2px;\n    box-shadow: 0px 0px 0px 2px var(--focus-bg-color);\n}\n\n/*# sourceURL=object_ui/objectPropertiesSection.css */";Root.Runtime.cachedResources["object_ui/objectValue.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.object-value-scientific-notation-exponent {\n    flex-shrink: 0;\n}\n\n.object-value-scientific-notation-mantissa {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    flex-shrink: 1;\n    min-width: 1ex;\n}\n\n.object-value-scientific-notation-number {\n    display: flex !important;\n}\n\n.value.object-value-node:hover {\n    background-color: var(--item-hover-color);\n}\n\n.object-value-function-prefix,\n.object-value-boolean {\n    color: rgb(13, 34, 170);\n}\n\n.object-value-function {\n    font-style: italic;\n}\n\n.object-value-function.linkified:hover {\n    background-color: rgba(0, 0, 0, 0.1);\n    cursor: pointer;\n}\n\n.object-value-number {\n    color: rgb(28, 0, 207);\n}\n\n.object-value-bigint {\n    color: rgb(0, 93, 0);\n}\n\n.object-value-string,\n.object-value-regexp,\n.object-value-symbol {\n    white-space: pre !important;\n    unicode-bidi: -webkit-isolate;\n    color: rgb(196, 26, 22);\n}\n\n.object-value-string-quote {\n    color: #222;\n}\n\n.object-value-node {\n    position: relative;\n    vertical-align: baseline;\n    color: rgb(48, 57, 66);\n    display: inline-block;\n}\n\n.object-value-null,\n.object-value-undefined {\n    color: rgb(128, 128, 128);\n}\n\n.object-value-calculate-value-button:hover {\n    text-decoration: underline;\n}\n\n.object-properties-section-custom-section {\n    display: inline-flex;\n    flex-direction: column;\n}\n\n.-theme-with-dark-background .object-value-number,\n:host-context(.-theme-with-dark-background) .object-value-number,\n.-theme-with-dark-background .object-value-boolean,\n:host-context(.-theme-with-dark-background) .object-value-boolean {\n    color: hsl(252, 100%, 75%);\n}\n\n.object-properties-section .object-description {\n    color: gray;\n}\n\n.value .object-properties-preview {\n    white-space: nowrap;\n}\n\n.name {\n    color: rgb(136, 19, 145);\n    flex-shrink: 0;\n}\n\n.object-properties-preview .name {\n    color: #565656;\n}\n\n/*# sourceURL=object_ui/objectValue.css */";PerfUI.ChartViewportDelegate=function(){};PerfUI.ChartViewportDelegate.prototype={windowChanged(startTime,endTime,animate){},updateRangeSelection(startTime,endTime){},setSize(width,height){},update(){}};PerfUI.ChartViewport=class extends UI.VBox{constructor(delegate){super();this.registerRequiredCSS('perf_ui/chartViewport.css');this._delegate=delegate;this.viewportElement=this.contentElement.createChild('div','fill');this.viewportElement.addEventListener('mousemove',this._updateCursorPosition.bind(this),false);this.viewportElement.addEventListener('mouseout',this._onMouseOut.bind(this),false);this.viewportElement.addEventListener('mousewheel',this._onMouseWheel.bind(this),false);this.viewportElement.addEventListener('keydown',this._onChartKeyDown.bind(this),false);this.viewportElement.addEventListener('keyup',this._onChartKeyUp.bind(this),false);UI.installDragHandle(this.viewportElement,this._startDragging.bind(this),this._dragging.bind(this),this._endDragging.bind(this),'-webkit-grabbing',null);UI.installDragHandle(this.viewportElement,this._startRangeSelection.bind(this),this._rangeSelectionDragging.bind(this),this._endRangeSelection.bind(this),'text',null);this._alwaysShowVerticalScroll=false;this._rangeSelectionEnabled=true;this._vScrollElement=this.contentElement.createChild('div','chart-viewport-v-scroll');this._vScrollContent=this._vScrollElement.createChild('div');this._vScrollElement.addEventListener('scroll',this._onScroll.bind(this),false);this._selectionOverlay=this.contentElement.createChild('div','chart-viewport-selection-overlay hidden');this._selectedTimeSpanLabel=this._selectionOverlay.createChild('div','time-span');this._cursorElement=this.contentElement.createChild('div','chart-cursor-element hidden');this.reset();}
alwaysShowVerticalScroll(){this._alwaysShowVerticalScroll=true;this._vScrollElement.classList.add('always-show-scrollbar');}
disableRangeSelection(){this._rangeSelectionEnabled=false;this._rangeSelectionStart=null;this._rangeSelectionEnd=null;this._updateRangeSelectionOverlay();}
isDragging(){return this._isDragging;}
elementsToRestoreScrollPositionsFor(){return[this._vScrollElement];}
_updateScrollBar(){const showScroll=this._alwaysShowVerticalScroll||this._totalHeight>this._offsetHeight;if(this._vScrollElement.classList.contains('hidden')!==showScroll){return;}
this._vScrollElement.classList.toggle('hidden',!showScroll);this._updateContentElementSize();}
onResize(){this._updateScrollBar();this._updateContentElementSize();this.scheduleUpdate();}
reset(){this._vScrollElement.scrollTop=0;this._scrollTop=0;this._rangeSelectionStart=null;this._rangeSelectionEnd=null;this._isDragging=false;this._dragStartPointX=0;this._dragStartPointY=0;this._dragStartScrollTop=0;this._visibleLeftTime=0;this._visibleRightTime=0;this._offsetWidth=0;this._offsetHeight=0;this._totalHeight=0;this._targetLeftTime=0;this._targetRightTime=0;this._updateContentElementSize();}
_updateContentElementSize(){let offsetWidth=this._vScrollElement.offsetLeft;if(!offsetWidth){offsetWidth=this.contentElement.offsetWidth;}
this._offsetWidth=offsetWidth;this._offsetHeight=this.contentElement.offsetHeight;this._delegate.setSize(this._offsetWidth,this._offsetHeight);}
setContentHeight(totalHeight){this._totalHeight=totalHeight;this._vScrollContent.style.height=totalHeight+'px';this._updateScrollBar();if(this._scrollTop+this._offsetHeight<=totalHeight){return;}
this._scrollTop=Math.max(0,totalHeight-this._offsetHeight);this._vScrollElement.scrollTop=this._scrollTop;}
setScrollOffset(offset,height){height=height||0;if(this._vScrollElement.scrollTop>offset){this._vScrollElement.scrollTop=offset;}else if(this._vScrollElement.scrollTop<offset-this._offsetHeight+height){this._vScrollElement.scrollTop=offset-this._offsetHeight+height;}}
scrollOffset(){return this._vScrollElement.scrollTop;}
setBoundaries(zeroTime,totalTime){this._minimumBoundary=zeroTime;this._totalTime=totalTime;}
_onMouseWheel(e){const doZoomInstead=e.shiftKey^(Common.moduleSetting('flamechartMouseWheelAction').get()==='zoom');const panVertically=!doZoomInstead&&(e.wheelDeltaY||Math.abs(e.wheelDeltaX)===120);const panHorizontally=doZoomInstead&&Math.abs(e.wheelDeltaX)>Math.abs(e.wheelDeltaY);if(panVertically){this._vScrollElement.scrollTop-=(e.wheelDeltaY||e.wheelDeltaX)/120*this._offsetHeight/8;}else if(panHorizontally){this._handlePanGesture(-e.wheelDeltaX,true);}else{const mouseWheelZoomSpeed=1/120;this._handleZoomGesture(Math.pow(1.2,-(e.wheelDeltaY||e.wheelDeltaX)*mouseWheelZoomSpeed)-1);}
e.consume(true);}
_startDragging(event){if(event.shiftKey){return false;}
this._isDragging=true;this._dragStartPointX=event.pageX;this._dragStartPointY=event.pageY;this._dragStartScrollTop=this._vScrollElement.scrollTop;this.viewportElement.style.cursor='';return true;}
_dragging(event){const pixelShift=this._dragStartPointX-event.pageX;this._dragStartPointX=event.pageX;this._handlePanGesture(pixelShift);const pixelScroll=this._dragStartPointY-event.pageY;this._vScrollElement.scrollTop=this._dragStartScrollTop+pixelScroll;}
_endDragging(){this._isDragging=false;}
_startRangeSelection(event){if(!event.shiftKey||!this._rangeSelectionEnabled){return false;}
this._isDragging=true;this._selectionOffsetShiftX=event.offsetX-event.pageX;this._selectionOffsetShiftY=event.offsetY-event.pageY;this._selectionStartX=event.offsetX;const style=this._selectionOverlay.style;style.left=this._selectionStartX+'px';style.width='1px';this._selectedTimeSpanLabel.textContent='';this._selectionOverlay.classList.remove('hidden');return true;}
_endRangeSelection(){this._isDragging=false;this._selectionStartX=null;}
hideRangeSelection(){this._selectionOverlay.classList.add('hidden');this._rangeSelectionStart=null;this._rangeSelectionEnd=null;}
setRangeSelection(startTime,endTime){if(!this._rangeSelectionEnabled){return;}
this._rangeSelectionStart=Math.min(startTime,endTime);this._rangeSelectionEnd=Math.max(startTime,endTime);this._updateRangeSelectionOverlay();this._delegate.updateRangeSelection(this._rangeSelectionStart,this._rangeSelectionEnd);}
onClick(event){const time=this.pixelToTime(event.offsetX);if(this._rangeSelectionStart!==null&&time>=this._rangeSelectionStart&&time<=this._rangeSelectionEnd){return;}
this.hideRangeSelection();}
_rangeSelectionDragging(event){const x=Number.constrain(event.pageX+this._selectionOffsetShiftX,0,this._offsetWidth);const start=this.pixelToTime(this._selectionStartX);const end=this.pixelToTime(x);this.setRangeSelection(start,end);}
_updateRangeSelectionOverlay(){const margin=100;const left=Number.constrain(this.timeToPosition(this._rangeSelectionStart),-margin,this._offsetWidth+margin);const right=Number.constrain(this.timeToPosition(this._rangeSelectionEnd),-margin,this._offsetWidth+margin);const style=this._selectionOverlay.style;style.left=left+'px';style.width=(right-left)+'px';const timeSpan=this._rangeSelectionEnd-this._rangeSelectionStart;this._selectedTimeSpanLabel.textContent=Number.preciseMillisToString(timeSpan,2);}
_onScroll(){this._scrollTop=this._vScrollElement.scrollTop;this.scheduleUpdate();}
_onMouseOut(){this._lastMouseOffsetX=-1;this._showCursor(false);}
_updateCursorPosition(e){this._showCursor(e.shiftKey);this._cursorElement.style.left=e.offsetX+'px';this._lastMouseOffsetX=e.offsetX;}
pixelToTime(x){return this.pixelToTimeOffset(x)+this._visibleLeftTime;}
pixelToTimeOffset(x){return x*(this._visibleRightTime-this._visibleLeftTime)/this._offsetWidth;}
timeToPosition(time){return Math.floor((time-this._visibleLeftTime)/(this._visibleRightTime-this._visibleLeftTime)*this._offsetWidth);}
timeToPixel(){return this._offsetWidth/(this._visibleRightTime-this._visibleLeftTime);}
_showCursor(visible){this._cursorElement.classList.toggle('hidden',!visible||this._isDragging);}
_onChartKeyDown(e){this._showCursor(e.shiftKey);this._handleZoomPanKeys(e);}
_onChartKeyUp(e){this._showCursor(e.shiftKey);}
_handleZoomPanKeys(e){if(!UI.KeyboardShortcut.hasNoModifiers(e)){return;}
const zoomFactor=e.shiftKey?0.8:0.3;const panOffset=e.shiftKey?320:160;switch(e.code){case'KeyA':this._handlePanGesture(-panOffset,true);break;case'KeyD':this._handlePanGesture(panOffset,true);break;case'KeyW':this._handleZoomGesture(-zoomFactor);break;case'KeyS':this._handleZoomGesture(zoomFactor);break;default:return;}
e.consume(true);}
_handleZoomGesture(zoom){const bounds={left:this._targetLeftTime,right:this._targetRightTime};const cursorTime=this.pixelToTime(this._lastMouseOffsetX);bounds.left+=(bounds.left-cursorTime)*zoom;bounds.right+=(bounds.right-cursorTime)*zoom;this._requestWindowTimes(bounds,true);}
_handlePanGesture(offset,animate){const bounds={left:this._targetLeftTime,right:this._targetRightTime};const timeOffset=Number.constrain(this.pixelToTimeOffset(offset),this._minimumBoundary-bounds.left,this._totalTime+this._minimumBoundary-bounds.right);bounds.left+=timeOffset;bounds.right+=timeOffset;this._requestWindowTimes(bounds,!!animate);}
_requestWindowTimes(bounds,animate){const maxBound=this._minimumBoundary+this._totalTime;if(bounds.left<this._minimumBoundary){bounds.right=Math.min(bounds.right+this._minimumBoundary-bounds.left,maxBound);bounds.left=this._minimumBoundary;}else if(bounds.right>maxBound){bounds.left=Math.max(bounds.left-bounds.right+maxBound,this._minimumBoundary);bounds.right=maxBound;}
if(bounds.right-bounds.left<PerfUI.FlameChart.MinimalTimeWindowMs){return;}
this._delegate.windowChanged(bounds.left,bounds.right,animate);}
scheduleUpdate(){if(this._updateTimerId||this._cancelWindowTimesAnimation){return;}
this._updateTimerId=this.element.window().requestAnimationFrame(()=>{this._updateTimerId=0;this._update();});}
_update(){this._updateRangeSelectionOverlay();this._delegate.update();}
setWindowTimes(startTime,endTime,animate){if(startTime===this._targetLeftTime&&endTime===this._targetRightTime){return;}
if(!animate||this._visibleLeftTime===0||this._visibleRightTime===Infinity||(startTime===0&&endTime===Infinity)||(startTime===Infinity&&endTime===Infinity)){this._targetLeftTime=startTime;this._targetRightTime=endTime;this._visibleLeftTime=startTime;this._visibleRightTime=endTime;this.scheduleUpdate();return;}
if(this._cancelWindowTimesAnimation){this._cancelWindowTimesAnimation();this._visibleLeftTime=this._targetLeftTime;this._visibleRightTime=this._targetRightTime;}
this._targetLeftTime=startTime;this._targetRightTime=endTime;this._cancelWindowTimesAnimation=UI.animateFunction(this.element.window(),animateWindowTimes.bind(this),[{from:this._visibleLeftTime,to:startTime},{from:this._visibleRightTime,to:endTime}],100,()=>this._cancelWindowTimesAnimation=null);function animateWindowTimes(startTime,endTime){this._visibleLeftTime=startTime;this._visibleRightTime=endTime;this._update();}}
windowLeftTime(){return this._visibleLeftTime;}
windowRightTime(){return this._visibleRightTime;}};;PerfUI.FilmStripView=class extends UI.HBox{constructor(){super(true);this.registerRequiredCSS('perf_ui/filmStripView.css');this.contentElement.classList.add('film-strip-view');this._statusLabel=this.contentElement.createChild('div','label');this.reset();this.setMode(PerfUI.FilmStripView.Modes.TimeBased);}
static _setImageData(imageElement,data){if(data){imageElement.src='data:image/jpg;base64,'+data;}}
setMode(mode){this._mode=mode;this.contentElement.classList.toggle('time-based',mode===PerfUI.FilmStripView.Modes.TimeBased);this.update();}
setModel(filmStripModel,zeroTime,spanTime){this._model=filmStripModel;this._zeroTime=zeroTime;this._spanTime=spanTime;const frames=filmStripModel.frames();if(!frames.length){this.reset();return;}
this.update();}
createFrameElement(frame){const time=frame.timestamp;const element=createElementWithClass('div','frame');element.title=Common.UIString('Doubleclick to zoom image. Click to view preceding requests.');element.createChild('div','time').textContent=Number.millisToString(time-this._zeroTime);const imageElement=element.createChild('div','thumbnail').createChild('img');imageElement.alt=ls`Screenshot`;element.addEventListener('mousedown',this._onMouseEvent.bind(this,PerfUI.FilmStripView.Events.FrameSelected,time),false);element.addEventListener('mouseenter',this._onMouseEvent.bind(this,PerfUI.FilmStripView.Events.FrameEnter,time),false);element.addEventListener('mouseout',this._onMouseEvent.bind(this,PerfUI.FilmStripView.Events.FrameExit,time),false);element.addEventListener('dblclick',this._onDoubleClick.bind(this,frame),false);return frame.imageDataPromise().then(PerfUI.FilmStripView._setImageData.bind(null,imageElement)).then(returnElement);function returnElement(){return element;}}
frameByTime(time){function comparator(time,frame){return time-frame.timestamp;}
const frames=this._model.frames();const index=Math.max(frames.upperBound(time,comparator)-1,0);return frames[index];}
update(){if(!this._model){return;}
const frames=this._model.frames();if(!frames.length){return;}
if(this._mode===PerfUI.FilmStripView.Modes.FrameBased){Promise.all(frames.map(this.createFrameElement.bind(this))).then(appendElements.bind(this));return;}
const width=this.contentElement.clientWidth;const scale=this._spanTime/width;this.createFrameElement(frames[0]).then(continueWhenFrameImageLoaded.bind(this));function continueWhenFrameImageLoaded(element0){const frameWidth=Math.ceil(UI.measurePreferredSize(element0,this.contentElement).width);if(!frameWidth){return;}
const promises=[];for(let pos=frameWidth;pos<width;pos+=frameWidth){const time=pos*scale+this._zeroTime;promises.push(this.createFrameElement(this.frameByTime(time)).then(fixWidth));}
Promise.all(promises).then(appendElements.bind(this));function fixWidth(element){element.style.width=frameWidth+'px';return element;}}
function appendElements(elements){this.contentElement.removeChildren();for(let i=0;i<elements.length;++i){this.contentElement.appendChild(elements[i]);}}}
onResize(){if(this._mode===PerfUI.FilmStripView.Modes.FrameBased){return;}
this.update();}
_onMouseEvent(eventName,timestamp){this.dispatchEventToListeners(eventName,timestamp);}
_onDoubleClick(filmStripFrame){new PerfUI.FilmStripView.Dialog(filmStripFrame,this._zeroTime);}
reset(){this._zeroTime=0;this.contentElement.removeChildren();this.contentElement.appendChild(this._statusLabel);}
setStatusText(text){this._statusLabel.textContent=text;}};PerfUI.FilmStripView.Events={FrameSelected:Symbol('FrameSelected'),FrameEnter:Symbol('FrameEnter'),FrameExit:Symbol('FrameExit'),};PerfUI.FilmStripView.Modes={TimeBased:'TimeBased',FrameBased:'FrameBased'};PerfUI.FilmStripView.Dialog=class{constructor(filmStripFrame,zeroTime){const prevButton=UI.createTextButton('\u25C0',this._onPrevFrame.bind(this));prevButton.title=Common.UIString('Previous frame');const nextButton=UI.createTextButton('\u25B6',this._onNextFrame.bind(this));nextButton.title=Common.UIString('Next frame');this._fragment=UI.Fragment.build`
      <x-widget flex=none margin=12px>
        <x-hbox overflow=auto border='1px solid #ddd' max-height=80vh max-width=80vw>
          <img $=image></img>
        </x-hbox>
        <x-hbox x-center justify-content=center margin-top=10px>
          ${prevButton}
          <x-hbox $=time margin=8px></x-hbox>
          ${nextButton}
        </x-hbox>
      </x-widget>
    `;this._widget=(this._fragment.element());this._widget.tabIndex=0;this._widget.addEventListener('keydown',this._keyDown.bind(this),false);this._frames=filmStripFrame.model().frames();this._index=filmStripFrame.index;this._zeroTime=zeroTime||filmStripFrame.model().zeroTime();this._dialog=null;this._render();}
_resize(){if(!this._dialog){this._dialog=new UI.Dialog();this._dialog.contentElement.appendChild(this._widget);this._dialog.setDefaultFocusedElement(this._widget);this._dialog.show();}
this._dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);}
_keyDown(event){switch(event.key){case'ArrowLeft':if(Host.isMac()&&event.metaKey){this._onFirstFrame();}else{this._onPrevFrame();}
break;case'ArrowRight':if(Host.isMac()&&event.metaKey){this._onLastFrame();}else{this._onNextFrame();}
break;case'Home':this._onFirstFrame();break;case'End':this._onLastFrame();break;}}
_onPrevFrame(){if(this._index>0){--this._index;}
this._render();}
_onNextFrame(){if(this._index<this._frames.length-1){++this._index;}
this._render();}
_onFirstFrame(){this._index=0;this._render();}
_onLastFrame(){this._index=this._frames.length-1;this._render();}
_render(){const frame=this._frames[this._index];this._fragment.$('time').textContent=Number.millisToString(frame.timestamp-this._zeroTime);return frame.imageDataPromise().then(PerfUI.FilmStripView._setImageData.bind(null,this._fragment.$('image'))).then(this._resize.bind(this));}};;PerfUI.FlameChartDelegate=function(){};PerfUI.FlameChartDelegate.prototype={windowChanged(startTime,endTime,animate){},updateRangeSelection(startTime,endTime){},updateSelectedGroup(flameChart,group){},};PerfUI.FlameChart=class extends UI.VBox{constructor(dataProvider,flameChartDelegate,groupExpansionSetting){super(true);this.registerRequiredCSS('perf_ui/flameChart.css');this.contentElement.classList.add('flame-chart-main-pane');this._groupExpansionSetting=groupExpansionSetting;this._groupExpansionState=groupExpansionSetting&&groupExpansionSetting.get()||{};this._flameChartDelegate=flameChartDelegate;this._useWebGL=Root.Runtime.experiments.isEnabled('timelineWebGL');this._chartViewport=new PerfUI.ChartViewport(this);this._chartViewport.show(this.contentElement);this._dataProvider=dataProvider;this._viewportElement=this._chartViewport.viewportElement;if(this._useWebGL){this._canvasGL=(this._viewportElement.createChild('canvas','fill'));this._initWebGL();}
this._canvas=(this._viewportElement.createChild('canvas','fill'));this._canvas.tabIndex=0;UI.ARIAUtils.setAccessibleName(this._canvas,ls`Flame Chart`);UI.ARIAUtils.markAsTree(this._canvas);this.setDefaultFocusedElement(this._canvas);this._canvas.classList.add('flame-chart-canvas');this._canvas.addEventListener('mousemove',this._onMouseMove.bind(this),false);this._canvas.addEventListener('mouseout',this._onMouseOut.bind(this),false);this._canvas.addEventListener('click',this._onClick.bind(this),false);this._canvas.addEventListener('keydown',this._onKeyDown.bind(this),false);this._entryInfo=this._viewportElement.createChild('div','flame-chart-entry-info');this._markerHighlighElement=this._viewportElement.createChild('div','flame-chart-marker-highlight-element');this._highlightElement=this._viewportElement.createChild('div','flame-chart-highlight-element');this._selectedElement=this._viewportElement.createChild('div','flame-chart-selected-element');this._canvas.addEventListener('focus',()=>{this._selectedElement.classList.remove('flame-chart-unfocused-selected-element');this.dispatchEventToListeners(PerfUI.FlameChart.Events.CanvasFocused);},false);this._canvas.addEventListener('blur',()=>{this._selectedElement.classList.add('flame-chart-unfocused-selected-element');},false);UI.installDragHandle(this._viewportElement,this._startDragging.bind(this),this._dragging.bind(this),this._endDragging.bind(this),null);this._rulerEnabled=true;this._rangeSelectionStart=0;this._rangeSelectionEnd=0;this._barHeight=17;this._textBaseline=5;this._textPadding=5;this._markerRadius=6;this._chartViewport.setWindowTimes(dataProvider.minimumBoundary(),dataProvider.minimumBoundary()+dataProvider.totalTime());this._headerLeftPadding=6;this._arrowSide=8;this._expansionArrowIndent=this._headerLeftPadding+this._arrowSide/2;this._headerLabelXPadding=3;this._headerLabelYPadding=2;this._highlightedMarkerIndex=-1;this._highlightedEntryIndex=-1;this._selectedEntryIndex=-1;this._rawTimelineDataLength=0;this._textWidth=new Map();this._markerPositions=new Map();this._lastMouseOffsetX=0;this._selectedGroup=-1;this._keyboardFocusedGroup=-1;this._selectedGroupBackroundColor=UI.themeSupport.patchColorText(PerfUI.FlameChart.Colors.SelectedGroupBackground,UI.ThemeSupport.ColorUsage.Background);this._selectedGroupBorderColor=UI.themeSupport.patchColorText(PerfUI.FlameChart.Colors.SelectedGroupBorder,UI.ThemeSupport.ColorUsage.Background);}
willHide(){this.hideHighlight();}
setBarHeight(value){this._barHeight=value;}
setTextBaseline(value){this._textBaseline=value;}
setTextPadding(value){this._textPadding=value;}
enableRuler(enable){this._rulerEnabled=enable;}
alwaysShowVerticalScroll(){this._chartViewport.alwaysShowVerticalScroll();}
disableRangeSelection(){this._chartViewport.disableRangeSelection();}
highlightEntry(entryIndex){if(this._highlightedEntryIndex===entryIndex){return;}
if(!this._dataProvider.entryColor(entryIndex)){return;}
this._highlightedEntryIndex=entryIndex;this._updateElementPosition(this._highlightElement,this._highlightedEntryIndex);this.dispatchEventToListeners(PerfUI.FlameChart.Events.EntryHighlighted,entryIndex);}
hideHighlight(){this._entryInfo.removeChildren();this._highlightedEntryIndex=-1;this._updateElementPosition(this._highlightElement,this._highlightedEntryIndex);this.dispatchEventToListeners(PerfUI.FlameChart.Events.EntryHighlighted,-1);}
_resetCanvas(){const ratio=window.devicePixelRatio;const width=Math.round(this._offsetWidth*ratio);const height=Math.round(this._offsetHeight*ratio);this._canvas.width=width;this._canvas.height=height;this._canvas.style.width=`${width / ratio}px`;this._canvas.style.height=`${height / ratio}px`;if(this._useWebGL){this._canvasGL.width=width;this._canvasGL.height=height;this._canvasGL.style.width=`${width / ratio}px`;this._canvasGL.style.height=`${height / ratio}px`;}}
windowChanged(startTime,endTime,animate){this._flameChartDelegate.windowChanged(startTime,endTime,animate);}
updateRangeSelection(startTime,endTime){this._flameChartDelegate.updateRangeSelection(startTime,endTime);}
setSize(width,height){this._offsetWidth=width;this._offsetHeight=height;}
_startDragging(event){this.hideHighlight();this._maxDragOffset=0;this._dragStartX=event.pageX;this._dragStartY=event.pageY;return true;}
_dragging(event){const dx=event.pageX-this._dragStartX;const dy=event.pageY-this._dragStartY;this._maxDragOffset=Math.max(this._maxDragOffset,Math.sqrt(dx*dx+dy*dy));}
_endDragging(event){this._updateHighlight();}
_timelineData(){if(!this._dataProvider){return null;}
const timelineData=this._dataProvider.timelineData();if(timelineData!==this._rawTimelineData||timelineData.entryStartTimes.length!==this._rawTimelineDataLength){this._processTimelineData(timelineData);}
return this._rawTimelineData;}
_revealEntry(entryIndex){const timelineData=this._timelineData();if(!timelineData){return;}
const timeLeft=this._chartViewport.windowLeftTime();const timeRight=this._chartViewport.windowRightTime();const entryStartTime=timelineData.entryStartTimes[entryIndex];const entryTotalTime=timelineData.entryTotalTimes[entryIndex];const entryEndTime=entryStartTime+entryTotalTime;let minEntryTimeWindow=Math.min(entryTotalTime,timeRight-timeLeft);const level=timelineData.entryLevels[entryIndex];this._chartViewport.setScrollOffset(this._levelToOffset(level),this._levelHeight(level));const minVisibleWidthPx=30;const futurePixelToTime=(timeRight-timeLeft)/this._offsetWidth;minEntryTimeWindow=Math.max(minEntryTimeWindow,futurePixelToTime*minVisibleWidthPx);if(timeLeft>entryEndTime){const delta=timeLeft-entryEndTime+minEntryTimeWindow;this.windowChanged(timeLeft-delta,timeRight-delta,true);}else if(timeRight<entryStartTime){const delta=entryStartTime-timeRight+minEntryTimeWindow;this.windowChanged(timeLeft+delta,timeRight+delta,true);}}
setWindowTimes(startTime,endTime,animate){this._chartViewport.setWindowTimes(startTime,endTime,animate);this._updateHighlight();}
_onMouseMove(event){this._lastMouseOffsetX=event.offsetX;this._lastMouseOffsetY=event.offsetY;if(!this._enabled()){return;}
if(this._chartViewport.isDragging()){return;}
if(this._coordinatesToGroupIndex(event.offsetX,event.offsetY,true)>=0){this.hideHighlight();this._viewportElement.style.cursor='pointer';return;}
this._updateHighlight();}
_updateHighlight(){const entryIndex=this._coordinatesToEntryIndex(this._lastMouseOffsetX,this._lastMouseOffsetY);if(entryIndex===-1){this.hideHighlight();const group=this._coordinatesToGroupIndex(this._lastMouseOffsetX,this._lastMouseOffsetY,false);if(group>=0&&this._rawTimelineData.groups[group].selectable){this._viewportElement.style.cursor='pointer';}else{this._viewportElement.style.cursor='default';}
return;}
if(this._chartViewport.isDragging()){return;}
this._updatePopover(entryIndex);this._viewportElement.style.cursor=this._dataProvider.canJumpToEntry(entryIndex)?'pointer':'default';this.highlightEntry(entryIndex);}
_onMouseOut(){this._lastMouseOffsetX=-1;this._lastMouseOffsetY=-1;this.hideHighlight();}
_updatePopover(entryIndex){if(entryIndex===this._highlightedEntryIndex){this._updatePopoverOffset();return;}
this._entryInfo.removeChildren();const popoverElement=this._dataProvider.prepareHighlightedEntryInfo(entryIndex);if(popoverElement){this._entryInfo.appendChild(popoverElement);this._updatePopoverOffset();}}
_updatePopoverOffset(){const mouseX=this._lastMouseOffsetX;const mouseY=this._lastMouseOffsetY;const parentWidth=this._entryInfo.parentElement.clientWidth;const parentHeight=this._entryInfo.parentElement.clientHeight;const infoWidth=this._entryInfo.clientWidth;const infoHeight=this._entryInfo.clientHeight;const offsetX=10;const offsetY=6;let x;let y;for(let quadrant=0;quadrant<4;++quadrant){const dx=quadrant&2?-offsetX-infoWidth:offsetX;const dy=quadrant&1?-offsetY-infoHeight:offsetY;x=Number.constrain(mouseX+dx,0,parentWidth-infoWidth);y=Number.constrain(mouseY+dy,0,parentHeight-infoHeight);if(x>=mouseX||mouseX>=x+infoWidth||y>=mouseY||mouseY>=y+infoHeight){break;}}
this._entryInfo.style.left=x+'px';this._entryInfo.style.top=y+'px';}
_onClick(event){this.focus();const clickThreshold=5;if(this._maxDragOffset>clickThreshold){return;}
this._selectGroup(this._coordinatesToGroupIndex(event.offsetX,event.offsetY,false));this._toggleGroupExpand(this._coordinatesToGroupIndex(event.offsetX,event.offsetY,true));const timelineData=this._timelineData();if(event.shiftKey&&this._highlightedEntryIndex!==-1&&timelineData){const start=timelineData.entryStartTimes[this._highlightedEntryIndex];const end=start+timelineData.entryTotalTimes[this._highlightedEntryIndex];this._chartViewport.setRangeSelection(start,end);}else{this._chartViewport.onClick(event);this.dispatchEventToListeners(PerfUI.FlameChart.Events.EntryInvoked,this._highlightedEntryIndex);}}
_selectGroup(groupIndex){if(groupIndex<0||this._selectedGroup===groupIndex){return;}
const groups=this._rawTimelineData.groups;this._keyboardFocusedGroup=groupIndex;if(!groups[groupIndex].selectable){this._deselectAllGroups();}else{this._selectedGroup=groupIndex;this._flameChartDelegate.updateSelectedGroup(this,groups[groupIndex]);this._resetCanvas();this._draw();const groupName=groups[groupIndex].name;UI.ARIAUtils.alert(ls`${groupName} selected`,this._canvas);}}
_deselectAllGroups(){this._selectedGroup=-1;this._flameChartDelegate.updateSelectedGroup(this,null);this._resetCanvas();this._draw();}
_deselectAllEntries(){this._selectedEntryIndex=-1;this._resetCanvas();this._draw();}
_isGroupFocused(index){return index===this._selectedGroup||index===this._keyboardFocusedGroup;}
_toggleGroupExpand(groupIndex){if(groupIndex<0||!this._isGroupCollapsible(groupIndex)){return;}
this._expandGroup(groupIndex,!this._rawTimelineData.groups[groupIndex].expanded);}
_expandGroup(groupIndex,setExpanded=true,propagatedExpand=false){if(groupIndex<0||!this._isGroupCollapsible(groupIndex)){return;}
const groups=this._rawTimelineData.groups;const group=groups[groupIndex];group.expanded=setExpanded;this._groupExpansionState[group.name]=group.expanded;if(this._groupExpansionSetting){this._groupExpansionSetting.set(this._groupExpansionState);}
this._updateLevelPositions();this._updateHighlight();if(!group.expanded){const timelineData=this._timelineData();const level=timelineData.entryLevels[this._selectedEntryIndex];if(this._selectedEntryIndex>=0&&level>=group.startLevel&&(groupIndex>=groups.length-1||groups[groupIndex+1].startLevel>level)){this._selectedEntryIndex=-1;}}
this._updateHeight();this._resetCanvas();this._draw();if(!propagatedExpand){const groupName=groups[groupIndex].name;const content=group.expanded?ls`${groupName} expanded`:ls`${groupName} collapsed`;UI.ARIAUtils.alert(content,this._canvas);}}
_onKeyDown(e){if(!UI.KeyboardShortcut.hasNoModifiers(e)||!this._timelineData()){return;}
const eventHandled=this._handleSelectionNavigation(e);if(!eventHandled&&this._rawTimelineData&&this._rawTimelineData.groups){this._handleKeyboardGroupNavigation(e);}}
_handleKeyboardGroupNavigation(e){let handled=false;let entrySelected=false;if(e.code==='ArrowUp'){handled=this._selectPreviousGroup();}else if(e.code==='ArrowDown'){handled=this._selectNextGroup();}else if(e.code==='ArrowLeft'){if(this._keyboardFocusedGroup>=0){this._expandGroup(this._keyboardFocusedGroup,false);handled=true;}}else if(e.code==='ArrowRight'){if(this._keyboardFocusedGroup>=0){this._expandGroup(this._keyboardFocusedGroup,true);this._selectFirstChild();handled=true;}}else if(isEnterKey(e)){entrySelected=this._selectFirstEntryInCurrentGroup();handled=entrySelected;}
if(handled&&!entrySelected){this._deselectAllEntries();}
if(handled){e.consume(true);}}
_selectFirstEntryInCurrentGroup(){const allGroups=this._rawTimelineData.groups;if(this._keyboardFocusedGroup<0){return false;}
const group=allGroups[this._keyboardFocusedGroup];const startLevelInGroup=group.startLevel;if(startLevelInGroup<0){return false;}
if(this._keyboardFocusedGroup<allGroups.length-1&&allGroups[this._keyboardFocusedGroup+1].startLevel===startLevelInGroup){return false;}
const firstEntryIndex=this._timelineLevels[startLevelInGroup][0];this._expandGroup(this._keyboardFocusedGroup,true);this.setSelectedEntry(firstEntryIndex);return true;}
_selectPreviousGroup(){if(this._keyboardFocusedGroup<=0){return false;}
const groupIndexToSelect=this._getGroupIndexToSelect(-1);this._selectGroup(groupIndexToSelect);return true;}
_selectNextGroup(){if(this._keyboardFocusedGroup>=this._rawTimelineData.groups.length-1){return false;}
const groupIndexToSelect=this._getGroupIndexToSelect(1);this._selectGroup(groupIndexToSelect);return true;}
_getGroupIndexToSelect(offset){const allGroups=this._rawTimelineData.groups;let groupIndexToSelect=this._keyboardFocusedGroup;let groupName,groupWithSubNestingLevel;do{groupIndexToSelect+=offset;groupName=this._rawTimelineData.groups[groupIndexToSelect].name;groupWithSubNestingLevel=this._keyboardFocusedGroup!==-1&&allGroups[groupIndexToSelect].style.nestingLevel>allGroups[this._keyboardFocusedGroup].style.nestingLevel;}while(groupIndexToSelect>0&&groupIndexToSelect<allGroups.length-1&&(!groupName||groupWithSubNestingLevel));return groupIndexToSelect;}
_selectFirstChild(){const allGroups=this._rawTimelineData.groups;if(this._keyboardFocusedGroup<0||this._keyboardFocusedGroup>=allGroups.length-1){return;}
const groupIndexToSelect=this._keyboardFocusedGroup+1;if(allGroups[groupIndexToSelect].style.nestingLevel>allGroups[this._keyboardFocusedGroup].style.nestingLevel){this._selectGroup(groupIndexToSelect);this._expandGroup(groupIndexToSelect,true,true);}}
_handleSelectionNavigation(e){if(this._selectedEntryIndex===-1){return false;}
const timelineData=this._timelineData();if(!timelineData){return false;}
function timeComparator(time,entryIndex){return time-timelineData.entryStartTimes[entryIndex];}
function entriesIntersect(entry1,entry2){const start1=timelineData.entryStartTimes[entry1];const start2=timelineData.entryStartTimes[entry2];const end1=start1+timelineData.entryTotalTimes[entry1];const end2=start2+timelineData.entryTotalTimes[entry2];return start1<end2&&start2<end1;}
const keys=UI.KeyboardShortcut.Keys;if(e.keyCode===keys.Left.code||e.keyCode===keys.Right.code){const level=timelineData.entryLevels[this._selectedEntryIndex];const levelIndexes=this._timelineLevels[level];let indexOnLevel=levelIndexes.lowerBound(this._selectedEntryIndex);indexOnLevel+=e.keyCode===keys.Left.code?-1:1;e.consume(true);if(indexOnLevel>=0&&indexOnLevel<levelIndexes.length){this.dispatchEventToListeners(PerfUI.FlameChart.Events.EntrySelected,levelIndexes[indexOnLevel]);}
return true;}
if(e.keyCode===keys.Up.code||e.keyCode===keys.Down.code){let level=timelineData.entryLevels[this._selectedEntryIndex];level+=e.keyCode===keys.Up.code?-1:1;if(level<0||level>=this._timelineLevels.length){this._deselectAllEntries();e.consume(true);return true;}
const entryTime=timelineData.entryStartTimes[this._selectedEntryIndex]+
timelineData.entryTotalTimes[this._selectedEntryIndex]/2;const levelIndexes=this._timelineLevels[level];let indexOnLevel=levelIndexes.upperBound(entryTime,timeComparator)-1;if(!entriesIntersect(this._selectedEntryIndex,levelIndexes[indexOnLevel])){++indexOnLevel;if(indexOnLevel>=levelIndexes.length||!entriesIntersect(this._selectedEntryIndex,levelIndexes[indexOnLevel])){if(e.code==='ArrowDown'){return false;}
this._deselectAllEntries();e.consume(true);return true;}}
e.consume(true);this.dispatchEventToListeners(PerfUI.FlameChart.Events.EntrySelected,levelIndexes[indexOnLevel]);return true;}
if(isEnterKey(e)){e.consume(true);this.dispatchEventToListeners(PerfUI.FlameChart.Events.EntryInvoked,this._selectedEntryIndex);return true;}
return false;}
_coordinatesToEntryIndex(x,y){if(x<0||y<0){return-1;}
const timelineData=this._timelineData();if(!timelineData){return-1;}
y+=this._chartViewport.scrollOffset();const cursorLevel=this._visibleLevelOffsets.upperBound(y)-1;if(cursorLevel<0||!this._visibleLevels[cursorLevel]){return-1;}
const offsetFromLevel=y-this._visibleLevelOffsets[cursorLevel];if(offsetFromLevel>this._levelHeight(cursorLevel)){return-1;}
for(const[index,pos]of this._markerPositions){if(timelineData.entryLevels[index]!==cursorLevel){continue;}
if(pos.x<=x&&x<pos.x+pos.width){return(index);}}
const entryStartTimes=timelineData.entryStartTimes;const entriesOnLevel=this._timelineLevels[cursorLevel];if(!entriesOnLevel||!entriesOnLevel.length){return-1;}
const cursorTime=this._chartViewport.pixelToTime(x);const indexOnLevel=Math.max(entriesOnLevel.upperBound(cursorTime,(time,entryIndex)=>time-entryStartTimes[entryIndex])-1,0);function checkEntryHit(entryIndex){if(entryIndex===undefined){return false;}
const startTime=entryStartTimes[entryIndex];const duration=timelineData.entryTotalTimes[entryIndex];const startX=this._chartViewport.timeToPosition(startTime);const endX=this._chartViewport.timeToPosition(startTime+duration);const barThresholdPx=3;return startX-barThresholdPx<x&&x<endX+barThresholdPx;}
let entryIndex=entriesOnLevel[indexOnLevel];if(checkEntryHit.call(this,entryIndex)){return entryIndex;}
entryIndex=entriesOnLevel[indexOnLevel+1];if(checkEntryHit.call(this,entryIndex)){return entryIndex;}
return-1;}
_coordinatesToGroupIndex(x,y,headerOnly){if(x<0||y<0){return-1;}
y+=this._chartViewport.scrollOffset();const groups=this._rawTimelineData.groups||[];const group=this._groupOffsets.upperBound(y)-1;if(group<0||group>=groups.length){return-1;}
const height=headerOnly?groups[group].style.height:this._groupOffsets[group+1]-this._groupOffsets[group];if(y-this._groupOffsets[group]>=height){return-1;}
if(!headerOnly){return group;}
const context=(this._canvas.getContext('2d'));context.save();context.font=groups[group].style.font;const right=this._headerLeftPadding+this._labelWidthForGroup(context,groups[group]);context.restore();if(x>right){return-1;}
return group;}
_markerIndexAtPosition(x){const markers=this._timelineData().markers;if(!markers){return-1;}
const accurracyOffsetPx=4;const time=this._chartViewport.pixelToTime(x);const leftTime=this._chartViewport.pixelToTime(x-accurracyOffsetPx);const rightTime=this._chartViewport.pixelToTime(x+accurracyOffsetPx);const left=this._markerIndexBeforeTime(leftTime);let markerIndex=-1;let distance=Infinity;for(let i=left;i<markers.length&&markers[i].startTime()<rightTime;i++){const nextDistance=Math.abs(markers[i].startTime()-time);if(nextDistance<distance){markerIndex=i;distance=nextDistance;}}
return markerIndex;}
_markerIndexBeforeTime(time){return this._timelineData().markers.lowerBound(time,(markerTimestamp,marker)=>markerTimestamp-marker.startTime());}
_draw(){const timelineData=this._timelineData();if(!timelineData){return;}
const width=this._offsetWidth;const height=this._offsetHeight;const context=(this._canvas.getContext('2d'));context.save();const ratio=window.devicePixelRatio;const top=this._chartViewport.scrollOffset();context.scale(ratio,ratio);context.fillStyle='rgba(0, 0, 0, 0)';context.fillRect(0,0,width,height);context.translate(0,-top);const defaultFont='11px '+Host.fontFamily();context.font=defaultFont;const entryTotalTimes=timelineData.entryTotalTimes;const entryStartTimes=timelineData.entryStartTimes;const entryLevels=timelineData.entryLevels;const timeToPixel=this._chartViewport.timeToPixel();const titleIndices=[];const markerIndices=[];const textPadding=this._textPadding;const minTextWidth=2*textPadding+UI.measureTextWidth(context,'\u2026');const minTextWidthDuration=this._chartViewport.pixelToTimeOffset(minTextWidth);const minVisibleBarLevel=Math.max(this._visibleLevelOffsets.upperBound(top)-1,0);this._markerPositions.clear();const colorBuckets=new Map();for(let level=minVisibleBarLevel;level<this._dataProvider.maxStackDepth();++level){if(this._levelToOffset(level)>top+height){break;}
if(!this._visibleLevels[level]){continue;}
const levelIndexes=this._timelineLevels[level];const rightIndexOnLevel=levelIndexes.lowerBound(this._chartViewport.windowRightTime(),(time,entryIndex)=>time-entryStartTimes[entryIndex])-
1;let lastDrawOffset=Infinity;for(let entryIndexOnLevel=rightIndexOnLevel;entryIndexOnLevel>=0;--entryIndexOnLevel){const entryIndex=levelIndexes[entryIndexOnLevel];const duration=entryTotalTimes[entryIndex];if(isNaN(duration)){markerIndices.push(entryIndex);continue;}
if(duration>=minTextWidthDuration||this._forceDecorationCache[entryIndex]){titleIndices.push(entryIndex);}
const entryStartTime=entryStartTimes[entryIndex];const entryOffsetRight=entryStartTime+duration;if(entryOffsetRight<=this._chartViewport.windowLeftTime()){break;}
if(this._useWebGL){continue;}
const barX=this._timeToPositionClipped(entryStartTime);if(barX>=lastDrawOffset){continue;}
lastDrawOffset=barX;const color=this._entryColorsCache[entryIndex];let bucket=colorBuckets.get(color);if(!bucket){bucket=[];colorBuckets.set(color,bucket);}
bucket.push(entryIndex);}}
if(this._useWebGL){this._drawGL();}else{context.save();this._forEachGroupInViewport((offset,index,group,isFirst,groupHeight)=>{if(this._isGroupFocused(index)){context.fillStyle=this._selectedGroupBackroundColor;context.fillRect(0,offset,width,groupHeight-group.style.padding);}});context.restore();for(const[color,indexes]of colorBuckets){context.beginPath();for(let i=0;i<indexes.length;++i){const entryIndex=indexes[i];const duration=entryTotalTimes[entryIndex];if(isNaN(duration)){continue;}
const entryStartTime=entryStartTimes[entryIndex];const barX=this._timeToPositionClipped(entryStartTime);const barLevel=entryLevels[entryIndex];const barHeight=this._levelHeight(barLevel);const barY=this._levelToOffset(barLevel);const barRight=this._timeToPositionClipped(entryStartTime+duration);const barWidth=Math.max(barRight-barX,1);context.rect(barX,barY,barWidth-0.4,barHeight-1);}
context.fillStyle=color;context.fill();}}
context.textBaseline='alphabetic';context.beginPath();let lastMarkerLevel=-1;let lastMarkerX=-Infinity;for(let m=markerIndices.length-1;m>=0;--m){const entryIndex=markerIndices[m];const title=this._dataProvider.entryTitle(entryIndex);if(!title){continue;}
const entryStartTime=entryStartTimes[entryIndex];const level=entryLevels[entryIndex];if(lastMarkerLevel!==level){lastMarkerX=-Infinity;}
const x=Math.max(this._chartViewport.timeToPosition(entryStartTime),lastMarkerX);const y=this._levelToOffset(level);const h=this._levelHeight(level);const padding=4;const width=Math.ceil(UI.measureTextWidth(context,title))+2*padding;lastMarkerX=x+width+1;lastMarkerLevel=level;this._markerPositions.set(entryIndex,{x,width});context.fillStyle=this._dataProvider.entryColor(entryIndex);context.fillRect(x,y,width,h-1);context.fillStyle='white';context.fillText(title,x+padding,y+h-this._textBaseline);}
context.strokeStyle='rgba(0, 0, 0, 0.2)';context.stroke();for(let i=0;i<titleIndices.length;++i){const entryIndex=titleIndices[i];const entryStartTime=entryStartTimes[entryIndex];const barX=this._timeToPositionClipped(entryStartTime);const barRight=Math.min(this._timeToPositionClipped(entryStartTime+entryTotalTimes[entryIndex]),width)+1;const barWidth=barRight-barX;const barLevel=entryLevels[entryIndex];const barY=this._levelToOffset(barLevel);let text=this._dataProvider.entryTitle(entryIndex);if(text&&text.length){context.font=this._dataProvider.entryFont(entryIndex)||defaultFont;text=UI.trimTextMiddle(context,text,barWidth-2*textPadding);}
const unclippedBarX=this._chartViewport.timeToPosition(entryStartTime);const barHeight=this._levelHeight(barLevel);if(this._dataProvider.decorateEntry(entryIndex,context,text,barX,barY,barWidth,barHeight,unclippedBarX,timeToPixel)){continue;}
if(!text||!text.length){continue;}
context.fillStyle=this._dataProvider.textColor(entryIndex);context.fillText(text,barX+textPadding,barY+barHeight-this._textBaseline);}
context.restore();this._drawGroupHeaders(width,height);this._drawFlowEvents(context,width,height);this._drawMarkers();const dividersData=PerfUI.TimelineGrid.calculateGridOffsets(this);PerfUI.TimelineGrid.drawCanvasGrid(context,dividersData);if(this._rulerEnabled){PerfUI.TimelineGrid.drawCanvasHeaders(context,dividersData,time=>this.formatValue(time,dividersData.precision),3,PerfUI.FlameChart.HeaderHeight);}
this._updateElementPosition(this._highlightElement,this._highlightedEntryIndex);this._updateElementPosition(this._selectedElement,this._selectedEntryIndex);this._updateMarkerHighlight();}
_initWebGL(){const gl=(this._canvasGL.getContext('webgl'));if(!gl){console.error('Failed to obtain WebGL context.');this._useWebGL=false;return;}
const vertexShaderSource=`
      attribute vec2 aVertexPosition;
      attribute float aVertexColor;

      uniform vec2 uScalingFactor;
      uniform vec2 uShiftVector;

      varying mediump vec2 vPalettePosition;

      void main() {
        vec2 shiftedPosition = aVertexPosition - uShiftVector;
        gl_Position = vec4(shiftedPosition * uScalingFactor + vec2(-1.0, 1.0), 0.0, 1.0);
        vPalettePosition = vec2(aVertexColor, 0.5);
      }`;const fragmentShaderSource=`
      varying mediump vec2 vPalettePosition;
      uniform sampler2D uSampler;

      void main() {
        gl_FragColor = texture2D(uSampler, vPalettePosition);
      }`;function loadShader(gl,type,source){const shader=gl.createShader(type);gl.shaderSource(shader,source);gl.compileShader(shader);if(gl.getShaderParameter(shader,gl.COMPILE_STATUS)){return shader;}
console.error('Shader compile error: '+gl.getShaderInfoLog(shader));gl.deleteShader(shader);return null;}
const vertexShader=loadShader(gl,gl.VERTEX_SHADER,vertexShaderSource);const fragmentShader=loadShader(gl,gl.FRAGMENT_SHADER,fragmentShaderSource);const shaderProgram=gl.createProgram();gl.attachShader(shaderProgram,vertexShader);gl.attachShader(shaderProgram,fragmentShader);gl.linkProgram(shaderProgram);if(gl.getProgramParameter(shaderProgram,gl.LINK_STATUS)){this._shaderProgram=shaderProgram;gl.useProgram(shaderProgram);}else{console.error('Unable to initialize the shader program: '+gl.getProgramInfoLog(shaderProgram));this._shaderProgram=null;}
this._vertexBuffer=gl.createBuffer();this._colorBuffer=gl.createBuffer();this._uScalingFactor=gl.getUniformLocation(shaderProgram,'uScalingFactor');this._uShiftVector=gl.getUniformLocation(shaderProgram,'uShiftVector');const uSampler=gl.getUniformLocation(shaderProgram,'uSampler');gl.uniform1i(uSampler,0);this._aVertexPosition=gl.getAttribLocation(this._shaderProgram,'aVertexPosition');this._aVertexColor=gl.getAttribLocation(this._shaderProgram,'aVertexColor');gl.enableVertexAttribArray(this._aVertexPosition);gl.enableVertexAttribArray(this._aVertexColor);}
_setupGLGeometry(){const gl=(this._canvasGL.getContext('webgl'));if(!gl){return;}
const timelineData=this._timelineData();if(!timelineData){return;}
const entryTotalTimes=timelineData.entryTotalTimes;const entryStartTimes=timelineData.entryStartTimes;const entryLevels=timelineData.entryLevels;const verticesPerBar=6;const vertexArray=new Float32Array(entryTotalTimes.length*verticesPerBar*2);let colorArray=new Uint8Array(entryTotalTimes.length*verticesPerBar);let vertex=0;const parsedColorCache=new Map();const colors=[];const collapsedOverviewLevels=new Array(this._visibleLevels.length);const groups=this._rawTimelineData.groups||[];this._forEachGroup((offset,index,group)=>{if(group.style.useFirstLineForOverview||!this._isGroupCollapsible(index)||group.expanded){return;}
let nextGroup=index+1;while(nextGroup<groups.length&&groups[nextGroup].style.nestingLevel>group.style.nestingLevel){++nextGroup;}
const endLevel=nextGroup<groups.length?groups[nextGroup].startLevel:this._dataProvider.maxStackDepth();for(let i=group.startLevel;i<endLevel;++i){collapsedOverviewLevels[i]=offset;}});for(let i=0;i<entryTotalTimes.length;++i){const level=entryLevels[i];const collapsedGroupOffset=collapsedOverviewLevels[level];if(!this._visibleLevels[level]&&!collapsedGroupOffset){continue;}
const color=this._entryColorsCache[i];if(!color){continue;}
let colorIndex=parsedColorCache.get(color);if(colorIndex===undefined){const rgba=Common.Color.parse(color).canonicalRGBA();rgba[3]=Math.round(rgba[3]*255);colorIndex=colors.length/4;colors.push(...rgba);if(colorIndex===256){colorArray=new Uint16Array(colorArray);}
parsedColorCache.set(color,colorIndex);}
for(let j=0;j<verticesPerBar;++j){colorArray[vertex+j]=colorIndex;}
const vpos=vertex*2;const x0=entryStartTimes[i]-this._minimumBoundary;const x1=x0+entryTotalTimes[i];const y0=collapsedGroupOffset||this._levelToOffset(level);const y1=y0+this._levelHeight(level)-1;vertexArray[vpos+0]=x0;vertexArray[vpos+1]=y0;vertexArray[vpos+2]=x1;vertexArray[vpos+3]=y0;vertexArray[vpos+4]=x0;vertexArray[vpos+5]=y1;vertexArray[vpos+6]=x0;vertexArray[vpos+7]=y1;vertexArray[vpos+8]=x1;vertexArray[vpos+9]=y0;vertexArray[vpos+10]=x1;vertexArray[vpos+11]=y1;vertex+=verticesPerBar;}
this._vertexCount=vertex;const paletteTexture=gl.createTexture();gl.bindTexture(gl.TEXTURE_2D,paletteTexture);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.NEAREST);gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.NEAREST);gl.activeTexture(gl.TEXTURE0);const numColors=colors.length/4;const useShortForColors=numColors>=256;const width=!useShortForColors?256:Math.min(1<<16,gl.getParameter(gl.MAX_TEXTURE_SIZE));console.assert(numColors<=width,'Too many colors');const height=1;const colorIndexType=useShortForColors?gl.UNSIGNED_SHORT:gl.UNSIGNED_BYTE;if(useShortForColors){const factor=(1<<16)/width;for(let i=0;i<vertex;++i){colorArray[i]*=factor;}}
const pixels=new Uint8Array(width*4);pixels.set(colors);gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,width,height,0,gl.RGBA,gl.UNSIGNED_BYTE,pixels);gl.bindBuffer(gl.ARRAY_BUFFER,this._vertexBuffer);gl.bufferData(gl.ARRAY_BUFFER,vertexArray,gl.STATIC_DRAW);gl.vertexAttribPointer(this._aVertexPosition,2,gl.FLOAT,false,0,0);gl.bindBuffer(gl.ARRAY_BUFFER,this._colorBuffer);gl.bufferData(gl.ARRAY_BUFFER,colorArray,gl.STATIC_DRAW);gl.vertexAttribPointer(this._aVertexColor,1,colorIndexType,true,0,0);}
_drawGL(){const gl=(this._canvasGL.getContext('webgl'));if(!gl){return;}
const timelineData=this._timelineData();if(!timelineData){return;}
if(!this._prevTimelineData||timelineData.entryTotalTimes!==this._prevTimelineData.entryTotalTimes){this._prevTimelineData=timelineData;this._setupGLGeometry();}
gl.viewport(0,0,this._canvasGL.width,this._canvasGL.height);if(!this._vertexCount){return;}
const viewportScale=[2.0/this.boundarySpan(),-2.0*window.devicePixelRatio/this._canvasGL.height];const viewportShift=[this.minimumBoundary()-this.zeroTime(),this._chartViewport.scrollOffset()];gl.uniform2fv(this._uScalingFactor,viewportScale);gl.uniform2fv(this._uShiftVector,viewportShift);gl.drawArrays(gl.TRIANGLES,0,this._vertexCount);}
_drawGroupHeaders(width,height){const context=(this._canvas.getContext('2d'));const top=this._chartViewport.scrollOffset();const ratio=window.devicePixelRatio;const groups=this._rawTimelineData.groups||[];if(!groups.length){return;}
const groupOffsets=this._groupOffsets;const lastGroupOffset=Array.prototype.peekLast.call(groupOffsets);const colorUsage=UI.ThemeSupport.ColorUsage;context.save();context.scale(ratio,ratio);context.translate(0,-top);const defaultFont='11px '+Host.fontFamily();context.font=defaultFont;context.fillStyle=UI.themeSupport.patchColorText('#fff',colorUsage.Background);this._forEachGroupInViewport((offset,index,group)=>{const paddingHeight=group.style.padding;if(paddingHeight<5){return;}
context.fillRect(0,offset-paddingHeight+2,width,paddingHeight-4);});if(groups.length&&lastGroupOffset<top+height){context.fillRect(0,lastGroupOffset+2,width,top+height-lastGroupOffset);}
context.strokeStyle=UI.themeSupport.patchColorText('#eee',colorUsage.Background);context.beginPath();this._forEachGroupInViewport((offset,index,group,isFirst)=>{if(isFirst||group.style.padding<4){return;}
hLine(offset-2.5);});hLine(lastGroupOffset+1.5);context.stroke();this._forEachGroupInViewport((offset,index,group)=>{if(group.style.useFirstLineForOverview){return;}
if(!this._isGroupCollapsible(index)||group.expanded){if(!group.style.shareHeaderLine&&this._isGroupFocused(index)){context.fillStyle=group.style.backgroundColor;context.fillRect(0,offset,width,group.style.height);}
return;}
if(this._useWebGL){return;}
let nextGroup=index+1;while(nextGroup<groups.length&&groups[nextGroup].style.nestingLevel>group.style.nestingLevel){nextGroup++;}
const endLevel=nextGroup<groups.length?groups[nextGroup].startLevel:this._dataProvider.maxStackDepth();this._drawCollapsedOverviewForGroup(group,offset,endLevel);});context.save();this._forEachGroupInViewport((offset,index,group)=>{context.font=group.style.font;if(this._isGroupCollapsible(index)&&!group.expanded||group.style.shareHeaderLine){const width=this._labelWidthForGroup(context,group)+2;if(this._isGroupFocused(index)){context.fillStyle=this._selectedGroupBackroundColor;}else{context.fillStyle=Common.Color.parse(group.style.backgroundColor).setAlpha(0.8).asString(null);}
context.fillRect(this._headerLeftPadding-this._headerLabelXPadding,offset+this._headerLabelYPadding,width,group.style.height-2*this._headerLabelYPadding);}
context.fillStyle=group.style.color;context.fillText(group.name,Math.floor(this._expansionArrowIndent*(group.style.nestingLevel+1)+this._arrowSide),offset+group.style.height-this._textBaseline);});context.restore();context.fillStyle=UI.themeSupport.patchColorText('#6e6e6e',colorUsage.Foreground);context.beginPath();this._forEachGroupInViewport((offset,index,group)=>{if(this._isGroupCollapsible(index)){drawExpansionArrow.call(this,this._expansionArrowIndent*(group.style.nestingLevel+1),offset+group.style.height-this._textBaseline-this._arrowSide/2,!!group.expanded);}});context.fill();context.strokeStyle=UI.themeSupport.patchColorText('#ddd',colorUsage.Background);context.beginPath();context.stroke();this._forEachGroupInViewport((offset,index,group,isFirst,groupHeight)=>{if(this._isGroupFocused(index)){const lineWidth=2;const bracketLength=10;context.fillStyle=this._selectedGroupBorderColor;context.fillRect(0,offset-lineWidth,lineWidth,groupHeight-group.style.padding+2*lineWidth);context.fillRect(0,offset-lineWidth,bracketLength,lineWidth);context.fillRect(0,offset+groupHeight-group.style.padding,bracketLength,lineWidth);}});context.restore();function hLine(y){context.moveTo(0,y);context.lineTo(width,y);}
function drawExpansionArrow(x,y,expanded){const arrowHeight=this._arrowSide*Math.sqrt(3)/2;const arrowCenterOffset=Math.round(arrowHeight/2);context.save();context.translate(x,y);context.rotate(expanded?Math.PI/2:0);context.moveTo(-arrowCenterOffset,-this._arrowSide/2);context.lineTo(-arrowCenterOffset,this._arrowSide/2);context.lineTo(arrowHeight-arrowCenterOffset,0);context.restore();}}
_forEachGroup(callback){const groups=this._rawTimelineData.groups||[];if(!groups.length){return;}
const groupOffsets=this._groupOffsets;const groupStack=[{nestingLevel:-1,visible:true}];for(let i=0;i<groups.length;++i){const groupTop=groupOffsets[i];const group=groups[i];let firstGroup=true;while(groupStack.peekLast().nestingLevel>=group.style.nestingLevel){groupStack.pop();firstGroup=false;}
const parentGroupVisible=groupStack.peekLast().visible;const thisGroupVisible=parentGroupVisible&&(!this._isGroupCollapsible(i)||group.expanded);groupStack.push({nestingLevel:group.style.nestingLevel,visible:thisGroupVisible});const nextOffset=i===groups.length-1?groupOffsets[i+1]+group.style.padding:groupOffsets[i+1];if(!parentGroupVisible){continue;}
callback(groupTop,i,group,firstGroup,nextOffset-groupTop);}}
_forEachGroupInViewport(callback){const top=this._chartViewport.scrollOffset();this._forEachGroup((groupTop,index,group,firstGroup,height)=>{if(groupTop-group.style.padding>top+this._offsetHeight){return;}
if(groupTop+height<top){return;}
callback(groupTop,index,group,firstGroup,height);});}
_labelWidthForGroup(context,group){return UI.measureTextWidth(context,group.name)+this._expansionArrowIndent*(group.style.nestingLevel+1)+
2*this._headerLabelXPadding;}
_drawCollapsedOverviewForGroup(group,y,endLevel){const range=new Common.SegmentedRange(mergeCallback);const timeWindowLeft=this._chartViewport.windowLeftTime();const timeWindowRight=this._chartViewport.windowRightTime();const context=(this._canvas.getContext('2d'));const barHeight=group.style.height;const entryStartTimes=this._rawTimelineData.entryStartTimes;const entryTotalTimes=this._rawTimelineData.entryTotalTimes;const timeToPixel=this._chartViewport.timeToPixel();for(let level=group.startLevel;level<endLevel;++level){const levelIndexes=this._timelineLevels[level];const rightIndexOnLevel=levelIndexes.lowerBound(timeWindowRight,(time,entryIndex)=>time-entryStartTimes[entryIndex])-1;let lastDrawOffset=Infinity;for(let entryIndexOnLevel=rightIndexOnLevel;entryIndexOnLevel>=0;--entryIndexOnLevel){const entryIndex=levelIndexes[entryIndexOnLevel];const entryStartTime=entryStartTimes[entryIndex];const barX=this._timeToPositionClipped(entryStartTime);const entryEndTime=entryStartTime+entryTotalTimes[entryIndex];if(isNaN(entryEndTime)||barX>=lastDrawOffset){continue;}
if(entryEndTime<=timeWindowLeft){break;}
lastDrawOffset=barX;const color=this._entryColorsCache[entryIndex];const endBarX=this._timeToPositionClipped(entryEndTime);if(group.style.useDecoratorsForOverview&&this._dataProvider.forceDecoration(entryIndex)){const unclippedBarX=this._chartViewport.timeToPosition(entryStartTime);const barWidth=endBarX-barX;context.beginPath();context.fillStyle=color;context.fillRect(barX,y,barWidth,barHeight-1);this._dataProvider.decorateEntry(entryIndex,context,'',barX,y,barWidth,barHeight,unclippedBarX,timeToPixel);continue;}
range.append(new Common.Segment(barX,endBarX,color));}}
const segments=range.segments().slice().sort((a,b)=>a.data.localeCompare(b.data));let lastColor;context.beginPath();for(let i=0;i<segments.length;++i){const segment=segments[i];if(lastColor!==segments[i].data){context.fill();context.beginPath();lastColor=segments[i].data;context.fillStyle=lastColor;}
context.rect(segment.begin,y,segment.end-segment.begin,barHeight);}
context.fill();function mergeCallback(a,b){return a.data===b.data&&a.end+0.4>b.end?a:null;}}
_drawFlowEvents(context,width,height){context.save();const ratio=window.devicePixelRatio;const top=this._chartViewport.scrollOffset();const arrowWidth=6;context.scale(ratio,ratio);context.translate(0,-top);context.fillStyle='#7f5050';context.strokeStyle='#7f5050';const td=this._timelineData();const endIndex=td.flowStartTimes.lowerBound(this._chartViewport.windowRightTime());context.lineWidth=0.5;for(let i=0;i<endIndex;++i){if(!td.flowEndTimes[i]||td.flowEndTimes[i]<this._chartViewport.windowLeftTime()){continue;}
const startX=this._chartViewport.timeToPosition(td.flowStartTimes[i]);const endX=this._chartViewport.timeToPosition(td.flowEndTimes[i]);const startLevel=td.flowStartLevels[i];const endLevel=td.flowEndLevels[i];const startY=this._levelToOffset(startLevel)+this._levelHeight(startLevel)/2;const endY=this._levelToOffset(endLevel)+this._levelHeight(endLevel)/2;const segment=Math.min((endX-startX)/4,40);const distanceTime=td.flowEndTimes[i]-td.flowStartTimes[i];const distanceY=(endY-startY)/10;const spread=30;const lineY=distanceTime<1?startY:spread+Math.max(0,startY+distanceY*(i%spread));const p=[];p.push({x:startX,y:startY});p.push({x:startX+arrowWidth,y:startY});p.push({x:startX+segment+2*arrowWidth,y:startY});p.push({x:startX+segment,y:lineY});p.push({x:startX+segment*2,y:lineY});p.push({x:endX-segment*2,y:lineY});p.push({x:endX-segment,y:lineY});p.push({x:endX-segment-2*arrowWidth,y:endY});p.push({x:endX-arrowWidth,y:endY});context.beginPath();context.moveTo(p[0].x,p[0].y);context.lineTo(p[1].x,p[1].y);context.bezierCurveTo(p[2].x,p[2].y,p[3].x,p[3].y,p[4].x,p[4].y);context.lineTo(p[5].x,p[5].y);context.bezierCurveTo(p[6].x,p[6].y,p[7].x,p[7].y,p[8].x,p[8].y);context.stroke();context.beginPath();context.arc(startX,startY,2,-Math.PI/2,Math.PI/2,false);context.fill();context.beginPath();context.moveTo(endX,endY);context.lineTo(endX-arrowWidth,endY-3);context.lineTo(endX-arrowWidth,endY+3);context.fill();}
context.restore();}
_drawMarkers(){const markers=this._timelineData().markers;const left=this._markerIndexBeforeTime(this.minimumBoundary());const rightBoundary=this.maximumBoundary();const timeToPixel=this._chartViewport.timeToPixel();const context=(this._canvas.getContext('2d'));context.save();const ratio=window.devicePixelRatio;context.scale(ratio,ratio);context.translate(0,3);const height=PerfUI.FlameChart.HeaderHeight-1;for(let i=left;i<markers.length;i++){const timestamp=markers[i].startTime();if(timestamp>rightBoundary){break;}
markers[i].draw(context,this._chartViewport.timeToPosition(timestamp),height,timeToPixel);}
context.restore();}
_updateMarkerHighlight(){const element=this._markerHighlighElement;if(element.parentElement){element.remove();}
const markerIndex=this._highlightedMarkerIndex;if(markerIndex===-1){return;}
const marker=this._timelineData().markers[markerIndex];const barX=this._timeToPositionClipped(marker.startTime());element.title=marker.title();const style=element.style;style.left=barX+'px';style.backgroundColor=marker.color();this._viewportElement.appendChild(element);}
_processTimelineData(timelineData){if(!timelineData){this._timelineLevels=null;this._visibleLevelOffsets=null;this._visibleLevels=null;this._groupOffsets=null;this._rawTimelineData=null;this._forceDecorationCache=null;this._entryColorsCache=null;this._rawTimelineDataLength=0;this._selectedGroup=-1;this._keyboardFocusedGroup=-1;this._flameChartDelegate.updateSelectedGroup(this,null);return;}
this._rawTimelineData=timelineData;this._rawTimelineDataLength=timelineData.entryStartTimes.length;this._forceDecorationCache=new Int8Array(this._rawTimelineDataLength);this._entryColorsCache=new Array(this._rawTimelineDataLength);for(let i=0;i<this._rawTimelineDataLength;++i){this._forceDecorationCache[i]=this._dataProvider.forceDecoration(i)?1:0;this._entryColorsCache[i]=this._dataProvider.entryColor(i);}
const entryCounters=new Uint32Array(this._dataProvider.maxStackDepth()+1);for(let i=0;i<timelineData.entryLevels.length;++i){++entryCounters[timelineData.entryLevels[i]];}
const levelIndexes=new Array(entryCounters.length);for(let i=0;i<levelIndexes.length;++i){levelIndexes[i]=new Uint32Array(entryCounters[i]);entryCounters[i]=0;}
for(let i=0;i<timelineData.entryLevels.length;++i){const level=timelineData.entryLevels[i];levelIndexes[level][entryCounters[level]++]=i;}
this._timelineLevels=levelIndexes;const groups=this._rawTimelineData.groups||[];for(let i=0;i<groups.length;++i){const expanded=this._groupExpansionState[groups[i].name];if(expanded!==undefined){groups[i].expanded=expanded;}}
this._updateLevelPositions();this._updateHeight();this._selectedGroup=timelineData.selectedGroup?groups.indexOf(timelineData.selectedGroup):-1;this._keyboardFocusedGroup=this._selectedGroup;this._flameChartDelegate.updateSelectedGroup(this,timelineData.selectedGroup);}
_updateLevelPositions(){const levelCount=this._dataProvider.maxStackDepth();const groups=this._rawTimelineData.groups||[];this._visibleLevelOffsets=new Uint32Array(levelCount+1);this._visibleLevelHeights=new Uint32Array(levelCount);this._visibleLevels=new Uint16Array(levelCount);this._groupOffsets=new Uint32Array(groups.length+1);let groupIndex=-1;let currentOffset=this._rulerEnabled?PerfUI.FlameChart.HeaderHeight+2:2;let visible=true;const groupStack=[{nestingLevel:-1,visible:true}];const lastGroupLevel=Math.max(levelCount,groups.length?groups.peekLast().startLevel+1:0);let level;for(level=0;level<lastGroupLevel;++level){let parentGroupIsVisible=true;let style;while(groupIndex<groups.length-1&&level===groups[groupIndex+1].startLevel){++groupIndex;style=groups[groupIndex].style;let nextLevel=true;while(groupStack.peekLast().nestingLevel>=style.nestingLevel){groupStack.pop();nextLevel=false;}
const thisGroupIsVisible=groupIndex>=0&&this._isGroupCollapsible(groupIndex)?groups[groupIndex].expanded:true;parentGroupIsVisible=groupStack.peekLast().visible;visible=thisGroupIsVisible&&parentGroupIsVisible;groupStack.push({nestingLevel:style.nestingLevel,visible:visible});if(parentGroupIsVisible){currentOffset+=nextLevel?0:style.padding;}
this._groupOffsets[groupIndex]=currentOffset;if(parentGroupIsVisible&&!style.shareHeaderLine){currentOffset+=style.height;}}
if(level>=levelCount){continue;}
const isFirstOnLevel=groupIndex>=0&&level===groups[groupIndex].startLevel;const thisLevelIsVisible=parentGroupIsVisible&&(visible||isFirstOnLevel&&groups[groupIndex].style.useFirstLineForOverview);let height;if(groupIndex>=0){const group=groups[groupIndex];const styleB=group.style;height=isFirstOnLevel&&!styleB.shareHeaderLine||(styleB.collapsible&&!group.expanded)?styleB.height:(styleB.itemsHeight||this._barHeight);}else{height=this._barHeight;}
this._visibleLevels[level]=thisLevelIsVisible;this._visibleLevelOffsets[level]=currentOffset;this._visibleLevelHeights[level]=height;if(thisLevelIsVisible||(parentGroupIsVisible&&style&&style.shareHeaderLine&&isFirstOnLevel)){currentOffset+=this._visibleLevelHeights[level];}}
if(groupIndex>=0){this._groupOffsets[groupIndex+1]=currentOffset;}
this._visibleLevelOffsets[level]=currentOffset;if(this._useWebGL){this._setupGLGeometry();}}
_isGroupCollapsible(index){const groups=this._rawTimelineData.groups||[];const style=groups[index].style;if(!style.shareHeaderLine||!style.collapsible){return!!style.collapsible;}
const isLastGroup=index+1>=groups.length;if(!isLastGroup&&groups[index+1].style.nestingLevel>style.nestingLevel){return true;}
const nextGroupLevel=isLastGroup?this._dataProvider.maxStackDepth():groups[index+1].startLevel;if(nextGroupLevel!==groups[index].startLevel+1){return true;}
return style.height!==style.itemsHeight;}
setSelectedEntry(entryIndex){if(this._selectedEntryIndex===entryIndex){return;}
if(entryIndex!==-1){this._chartViewport.hideRangeSelection();}
this._selectedEntryIndex=entryIndex;this._revealEntry(entryIndex);this._updateElementPosition(this._selectedElement,this._selectedEntryIndex);}
_updateElementPosition(element,entryIndex){const elementMinWidthPx=2;element.classList.add('hidden');if(entryIndex===-1){return;}
const timelineData=this._timelineData();const startTime=timelineData.entryStartTimes[entryIndex];const duration=timelineData.entryTotalTimes[entryIndex];let barX=0;let barWidth=0;let visible=true;if(Number.isNaN(duration)){const position=this._markerPositions.get(entryIndex);if(position){barX=position.x;barWidth=position.width;}else{visible=false;}}else{barX=this._chartViewport.timeToPosition(startTime);barWidth=duration*this._chartViewport.timeToPixel();}
if(barX+barWidth<=0||barX>=this._offsetWidth){return;}
const barCenter=barX+barWidth/2;barWidth=Math.max(barWidth,elementMinWidthPx);barX=barCenter-barWidth/2;const entryLevel=timelineData.entryLevels[entryIndex];const barY=this._levelToOffset(entryLevel)-this._chartViewport.scrollOffset();const barHeight=this._levelHeight(entryLevel);const style=element.style;style.left=barX+'px';style.top=barY+'px';style.width=barWidth+'px';style.height=barHeight-1+'px';element.classList.toggle('hidden',!visible);this._viewportElement.appendChild(element);}
_timeToPositionClipped(time){return Number.constrain(this._chartViewport.timeToPosition(time),0,this._offsetWidth);}
_levelToOffset(level){return this._visibleLevelOffsets[level];}
_levelHeight(level){return this._visibleLevelHeights[level];}
_updateBoundaries(){this._totalTime=this._dataProvider.totalTime();this._minimumBoundary=this._dataProvider.minimumBoundary();this._chartViewport.setBoundaries(this._minimumBoundary,this._totalTime);}
_updateHeight(){const height=this._levelToOffset(this._dataProvider.maxStackDepth())+2;this._chartViewport.setContentHeight(height);}
onResize(){this.scheduleUpdate();}
update(){if(!this._timelineData()){return;}
this._resetCanvas();this._updateHeight();this._updateBoundaries();this._draw();if(!this._chartViewport.isDragging()){this._updateHighlight();}}
reset(){this._chartViewport.reset();this._rawTimelineData=null;this._rawTimelineDataLength=0;this._highlightedMarkerIndex=-1;this._highlightedEntryIndex=-1;this._selectedEntryIndex=-1;this._textWidth=new Map();this._chartViewport.scheduleUpdate();}
scheduleUpdate(){this._chartViewport.scheduleUpdate();}
_enabled(){return this._rawTimelineDataLength!==0;}
computePosition(time){return this._chartViewport.timeToPosition(time);}
formatValue(value,precision){return this._dataProvider.formatValue(value-this.zeroTime(),precision);}
maximumBoundary(){return this._chartViewport.windowRightTime();}
minimumBoundary(){return this._chartViewport.windowLeftTime();}
zeroTime(){return this._dataProvider.minimumBoundary();}
boundarySpan(){return this.maximumBoundary()-this.minimumBoundary();}};PerfUI.FlameChart.HeaderHeight=15;PerfUI.FlameChart.MinimalTimeWindowMs=0.5;PerfUI.FlameChartDataProvider=function(){};PerfUI.FlameChart.Group;PerfUI.FlameChart.GroupStyle;PerfUI.FlameChart.TimelineData=class{constructor(entryLevels,entryTotalTimes,entryStartTimes,groups){this.entryLevels=entryLevels;this.entryTotalTimes=entryTotalTimes;this.entryStartTimes=entryStartTimes;this.groups=groups;this.markers=[];this.flowStartTimes=[];this.flowStartLevels=[];this.flowEndTimes=[];this.flowEndLevels=[];this.selectedGroup=null;}};PerfUI.FlameChartDataProvider.prototype={minimumBoundary(){},totalTime(){},formatValue(value,precision){},maxStackDepth(){},timelineData(){},prepareHighlightedEntryInfo(entryIndex){},canJumpToEntry(entryIndex){},entryTitle(entryIndex){},entryFont(entryIndex){},entryColor(entryIndex){},decorateEntry(entryIndex,context,text,barX,barY,barWidth,barHeight,unclippedBarX,timeToPixelRatio){},forceDecoration(entryIndex){},textColor(entryIndex){},};PerfUI.FlameChartMarker=function(){};PerfUI.FlameChartMarker.prototype={startTime(){},color(){},title(){},draw(context,x,height,pixelsPerMillisecond){},};PerfUI.FlameChart.Events={CanvasFocused:Symbol('CanvasFocused'),EntryInvoked:Symbol('EntryInvoked'),EntrySelected:Symbol('EntrySelected'),EntryHighlighted:Symbol('EntryHighlighted')};PerfUI.FlameChart.Colors={SelectedGroupBackground:'hsl(215, 85%, 98%)',SelectedGroupBorder:'hsl(216, 68%, 54%)',};;PerfUI.GCActionDelegate=class{handleAction(context,actionId){for(const heapProfilerModel of SDK.targetManager.models(SDK.HeapProfilerModel)){heapProfilerModel.collectGarbage();}
return true;}};;PerfUI.LineLevelProfile={};PerfUI.LineLevelProfile.Performance=class{constructor(){this._helper=new PerfUI.LineLevelProfile._Helper('performance');}
reset(){this._helper.reset();}
_appendLegacyCPUProfile(profile){const target=profile.target();const nodesToGo=[profile.profileHead];const sampleDuration=(profile.profileEndTime-profile.profileStartTime)/profile.totalHitCount;while(nodesToGo.length){const nodes=nodesToGo.pop().children;for(let i=0;i<nodes.length;++i){const node=nodes[i];nodesToGo.push(node);if(!node.url||!node.positionTicks){continue;}
for(let j=0;j<node.positionTicks.length;++j){const lineInfo=node.positionTicks[j];const line=lineInfo.line;const time=lineInfo.ticks*sampleDuration;this._helper.addLineData(target,node.url,line,time);}}}}
appendCPUProfile(profile){if(!profile.lines){this._appendLegacyCPUProfile(profile);this._helper.scheduleUpdate();return;}
const target=profile.target();for(let i=1;i<profile.samples.length;++i){const line=profile.lines[i];if(!line){continue;}
const node=profile.nodeByIndex(i);const scriptIdOrUrl=node.scriptId||node.url;if(!scriptIdOrUrl){continue;}
const time=profile.timestamps[i]-profile.timestamps[i-1];this._helper.addLineData(target,scriptIdOrUrl,line,time);}
this._helper.scheduleUpdate();}};PerfUI.LineLevelProfile.Memory=class{constructor(){this._helper=new PerfUI.LineLevelProfile._Helper('memory');}
reset(){this._helper.reset();}
appendHeapProfile(profile,target){const helper=this._helper;processNode(profile.head);helper.scheduleUpdate();function processNode(node){node.children.forEach(processNode);if(!node.selfSize){return;}
const script=Number(node.callFrame.scriptId)||node.callFrame.url;if(!script){return;}
const line=node.callFrame.lineNumber+1;helper.addLineData(target,script,line,node.selfSize);}}};PerfUI.LineLevelProfile._Helper=class{constructor(type){this._type=type;this._locationPool=new Bindings.LiveLocationPool();this._updateTimer=null;this.reset();}
reset(){this._lineData=new Map();this.scheduleUpdate();}
addLineData(target,scriptIdOrUrl,line,data){let targetData=this._lineData.get(target);if(!targetData){targetData=new Map();this._lineData.set(target,targetData);}
let scriptData=targetData.get(scriptIdOrUrl);if(!scriptData){scriptData=new Map();targetData.set(scriptIdOrUrl,scriptData);}
scriptData.set(line,(scriptData.get(line)||0)+data);}
scheduleUpdate(){if(this._updateTimer){return;}
this._updateTimer=setTimeout(()=>{this._updateTimer=null;this._doUpdate();},0);}
_doUpdate(){this._locationPool.disposeAll();Workspace.workspace.uiSourceCodes().forEach(uiSourceCode=>uiSourceCode.removeDecorationsForType(this._type));for(const targetToScript of this._lineData){const target=(targetToScript[0]);const debuggerModel=target?target.model(SDK.DebuggerModel):null;const scriptToLineMap=(targetToScript[1]);for(const scriptToLine of scriptToLineMap){const scriptIdOrUrl=(scriptToLine[0]);const lineToDataMap=(scriptToLine[1]);const uiSourceCode=!debuggerModel&&typeof scriptIdOrUrl==='string'?Workspace.workspace.uiSourceCodeForURL(scriptIdOrUrl):null;if(!debuggerModel&&!uiSourceCode){continue;}
for(const lineToData of lineToDataMap){const line=(lineToData[0])-1;const data=(lineToData[1]);if(uiSourceCode){uiSourceCode.addLineDecoration(line,this._type,data);continue;}
const rawLocation=typeof scriptIdOrUrl==='string'?debuggerModel.createRawLocationByURL(scriptIdOrUrl,line,0):debuggerModel.createRawLocationByScriptId(String(scriptIdOrUrl),line,0);if(rawLocation){new PerfUI.LineLevelProfile.Presentation(rawLocation,this._type,data,this._locationPool);}}}}}};PerfUI.LineLevelProfile.Presentation=class{constructor(rawLocation,type,time,locationPool){this._type=type;this._time=time;this._uiLocation=null;Bindings.debuggerWorkspaceBinding.createLiveLocation(rawLocation,this.updateLocation.bind(this),locationPool);}
updateLocation(liveLocation){if(this._uiLocation){this._uiLocation.uiSourceCode.removeDecorationsForType(this._type);}
this._uiLocation=liveLocation.uiLocation();if(this._uiLocation){this._uiLocation.uiSourceCode.addLineDecoration(this._uiLocation.lineNumber,this._type,this._time);}}};PerfUI.LineLevelProfile.LineDecorator=class{decorate(uiSourceCode,textEditor,type){const gutterType=`CodeMirror-gutter-${type}`;const decorations=uiSourceCode.decorationsForType(type);textEditor.uninstallGutter(gutterType);if(!decorations||!decorations.size){return;}
textEditor.installGutter(gutterType,false);for(const decoration of decorations){const value=(decoration.data());const element=this._createElement(type,value);textEditor.setGutterDecoration(decoration.range().startLine,gutterType,element);}}
_createElement(type,value){const element=createElementWithClass('div','text-editor-line-marker-text');if(type==='performance'){const intensity=Number.constrain(Math.log10(1+10*value)/5,0.02,1);element.textContent=Common.UIString('%.1f',value);element.style.backgroundColor=`hsla(44, 100%, 50%, ${intensity.toFixed(3)})`;element.createChild('span','line-marker-units').textContent=ls`ms`;}else{const intensity=Number.constrain(Math.log10(1+2e-3*value)/5,0.02,1);element.style.backgroundColor=`hsla(217, 100%, 70%, ${intensity.toFixed(3)})`;value/=1e3;let units;let fractionDigits;if(value>=1e3){units=ls`MB`;value/=1e3;fractionDigits=value>=20?0:1;}else{units=ls`KB`;fractionDigits=0;}
element.textContent=Common.UIString(`%.${fractionDigits}f`,value);element.createChild('span','line-marker-units').textContent=units;}
return element;}};;PerfUI.LiveHeapProfile=class{constructor(){this._running=false;this._sessionId=0;this._loadEventCallback=()=>{};this._setting=Common.settings.moduleSetting('memoryLiveHeapProfile');this._setting.addChangeListener(event=>event.data?this._startProfiling():this._stopProfiling());if(this._setting.get()){this._startProfiling();}}
run(){}
modelAdded(model){model.startSampling(1e4);}
modelRemoved(model){}
async _startProfiling(){if(this._running){return;}
this._running=true;const sessionId=this._sessionId;SDK.targetManager.observeModels(SDK.HeapProfilerModel,this);SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.Load,this._loadEventFired,this);do{const models=SDK.targetManager.models(SDK.HeapProfilerModel);const profiles=await Promise.all(models.map(model=>model.getSamplingProfile()));if(sessionId!==this._sessionId){break;}
const lineLevelProfile=self.runtime.sharedInstance(PerfUI.LineLevelProfile.Memory);lineLevelProfile.reset();for(let i=0;i<profiles.length;++i){if(profiles[i]){lineLevelProfile.appendHeapProfile(profiles[i],models[i].target());}}
await Promise.race([new Promise(r=>setTimeout(r,Host.isUnderTest()?10:5000)),new Promise(r=>this._loadEventCallback=r)]);}while(sessionId===this._sessionId);SDK.targetManager.unobserveModels(SDK.HeapProfilerModel,this);SDK.targetManager.removeModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.Load,this._loadEventFired,this);for(const model of SDK.targetManager.models(SDK.HeapProfilerModel)){model.stopSampling();}
self.runtime.sharedInstance(PerfUI.LineLevelProfile.Memory).reset();}
_stopProfiling(){if(!this._running){return;}
this._running=0;this._sessionId++;}
_loadEventFired(){this._loadEventCallback();}};;PerfUI.uiLabelForNetworkPriority=function(priority){return PerfUI._priorityUILabelMap().get(priority)||'';};PerfUI.uiLabelToNetworkPriority=function(priorityLabel){if(!PerfUI._uiLabelToPriorityMapInstance){PerfUI._uiLabelToPriorityMapInstance=new Map();PerfUI._priorityUILabelMap().forEach((value,key)=>PerfUI._uiLabelToPriorityMapInstance.set(value,key));}
return PerfUI._uiLabelToPriorityMapInstance.get(priorityLabel)||'';};PerfUI._priorityUILabelMap=function(){if(PerfUI._priorityUILabelMapInstance){return PerfUI._priorityUILabelMapInstance;}
const map=new Map();map.set(Protocol.Network.ResourcePriority.VeryLow,Common.UIString('Lowest'));map.set(Protocol.Network.ResourcePriority.Low,Common.UIString('Low'));map.set(Protocol.Network.ResourcePriority.Medium,Common.UIString('Medium'));map.set(Protocol.Network.ResourcePriority.High,Common.UIString('High'));map.set(Protocol.Network.ResourcePriority.VeryHigh,Common.UIString('Highest'));PerfUI._priorityUILabelMapInstance=map;return map;};PerfUI.networkPriorityWeight=function(priority){if(!PerfUI._networkPriorityWeights){const priorityMap=new Map();priorityMap.set(Protocol.Network.ResourcePriority.VeryLow,1);priorityMap.set(Protocol.Network.ResourcePriority.Low,2);priorityMap.set(Protocol.Network.ResourcePriority.Medium,3);priorityMap.set(Protocol.Network.ResourcePriority.High,4);priorityMap.set(Protocol.Network.ResourcePriority.VeryHigh,5);PerfUI._networkPriorityWeights=priorityMap;}
return PerfUI._networkPriorityWeights.get(priority)||0;};;PerfUI.OverviewGrid=class{constructor(prefix,calculator){this.element=createElement('div');this.element.id=prefix+'-overview-container';this._grid=new PerfUI.TimelineGrid();this._grid.element.id=prefix+'-overview-grid';this._grid.setScrollTop(0);this.element.appendChild(this._grid.element);this._window=new PerfUI.OverviewGrid.Window(this.element,this._grid.dividersLabelBarElement,calculator);}
clientWidth(){return this.element.clientWidth;}
updateDividers(calculator){this._grid.updateDividers(calculator);}
addEventDividers(dividers){this._grid.addEventDividers(dividers);}
removeEventDividers(){this._grid.removeEventDividers();}
reset(){this._window.reset();}
windowLeft(){return this._window.windowLeft;}
windowRight(){return this._window.windowRight;}
setWindow(left,right){this._window._setWindow(left,right);}
addEventListener(eventType,listener,thisObject){return this._window.addEventListener(eventType,listener,thisObject);}
setClickHandler(clickHandler){this._window.setClickHandler(clickHandler);}
zoom(zoomFactor,referencePoint){this._window._zoom(zoomFactor,referencePoint);}
setResizeEnabled(enabled){this._window.setEnabled(enabled);}};PerfUI.OverviewGrid.MinSelectableSize=14;PerfUI.OverviewGrid.WindowScrollSpeedFactor=.3;PerfUI.OverviewGrid.ResizerOffset=3.5;PerfUI.OverviewGrid.OffsetFromWindowEnds=10;PerfUI.OverviewGrid.Window=class extends Common.Object{constructor(parentElement,dividersLabelBarElement,calculator){super();this._parentElement=parentElement;UI.ARIAUtils.markAsGroup(this._parentElement);this._calculator=calculator;UI.ARIAUtils.setAccessibleName(this._parentElement,ls`Overview grid window`);UI.installDragHandle(this._parentElement,this._startWindowSelectorDragging.bind(this),this._windowSelectorDragging.bind(this),this._endWindowSelectorDragging.bind(this),'text',null);if(dividersLabelBarElement){UI.installDragHandle(dividersLabelBarElement,this._startWindowDragging.bind(this),this._windowDragging.bind(this),null,'-webkit-grabbing','-webkit-grab');}
this._parentElement.addEventListener('mousewheel',this._onMouseWheel.bind(this),true);this._parentElement.addEventListener('dblclick',this._resizeWindowMaximum.bind(this),true);UI.appendStyle(this._parentElement,'perf_ui/overviewGrid.css');this._leftResizeElement=parentElement.createChild('div','overview-grid-window-resizer');UI.installDragHandle(this._leftResizeElement,this._resizerElementStartDragging.bind(this),this._leftResizeElementDragging.bind(this),null,'ew-resize');this._rightResizeElement=parentElement.createChild('div','overview-grid-window-resizer');UI.installDragHandle(this._rightResizeElement,this._resizerElementStartDragging.bind(this),this._rightResizeElementDragging.bind(this),null,'ew-resize');UI.ARIAUtils.setAccessibleName(this._leftResizeElement,ls`Left Resizer`);UI.ARIAUtils.markAsSlider(this._leftResizeElement);this._leftResizeElement.tabIndex=0;this._leftResizeElement.addEventListener('keydown',event=>this._handleKeyboardResizing(event,false));UI.ARIAUtils.setAccessibleName(this._rightResizeElement,ls`Right Resizer`);UI.ARIAUtils.markAsSlider(this._rightResizeElement);this._rightResizeElement.tabIndex=0;this._rightResizeElement.addEventListener('keydown',event=>this._handleKeyboardResizing(event,true));this._rightResizeElement.addEventListener('focus',this._onRightResizeElementFocused.bind(this));this._leftCurtainElement=parentElement.createChild('div','window-curtain-left');this._rightCurtainElement=parentElement.createChild('div','window-curtain-right');this.reset();}
_onRightResizeElementFocused(){this._parentElement.scrollLeft=0;}
reset(){this.windowLeft=0.0;this.windowRight=1.0;this.setEnabled(true);this._updateCurtains();}
setEnabled(enabled){this._enabled=enabled;}
setClickHandler(clickHandler){this._clickHandler=clickHandler;}
_resizerElementStartDragging(event){if(!this._enabled){return false;}
this._resizerParentOffsetLeft=event.pageX-event.offsetX-event.target.offsetLeft;event.stopPropagation();return true;}
_leftResizeElementDragging(event){this._resizeWindowLeft(event.pageX-this._resizerParentOffsetLeft);event.preventDefault();}
_rightResizeElementDragging(event){this._resizeWindowRight(event.pageX-this._resizerParentOffsetLeft);event.preventDefault();}
_handleKeyboardResizing(event,moveRightResizer){let increment=false;if(event.key==='ArrowLeft'||event.key==='ArrowRight'){if(event.key==='ArrowRight'){increment=true;}
const newPos=this._getNewResizerPosition(event.target.offsetLeft,increment,event.ctrlKey);if(moveRightResizer){this._resizeWindowRight(newPos);}else{this._resizeWindowLeft(newPos);}
event.consume(true);}}
_getNewResizerPosition(offset,increment,ctrlPressed){let newPos;let pixelsToShift=ctrlPressed?10:2;pixelsToShift=increment?pixelsToShift:-Math.abs(pixelsToShift);const offsetLeft=offset+PerfUI.OverviewGrid.ResizerOffset;newPos=offsetLeft+pixelsToShift;if(increment&&newPos<PerfUI.OverviewGrid.OffsetFromWindowEnds){newPos=PerfUI.OverviewGrid.OffsetFromWindowEnds;}else if(!increment&&newPos>this._parentElement.clientWidth-PerfUI.OverviewGrid.OffsetFromWindowEnds){newPos=this._parentElement.clientWidth-PerfUI.OverviewGrid.OffsetFromWindowEnds;}
return newPos;}
_startWindowSelectorDragging(event){if(!this._enabled){return false;}
this._offsetLeft=this._parentElement.totalOffsetLeft();const position=event.x-this._offsetLeft;this._overviewWindowSelector=new PerfUI.OverviewGrid.WindowSelector(this._parentElement,position);return true;}
_windowSelectorDragging(event){this._overviewWindowSelector._updatePosition(event.x-this._offsetLeft);event.preventDefault();}
_endWindowSelectorDragging(event){const window=this._overviewWindowSelector._close(event.x-this._offsetLeft);delete this._overviewWindowSelector;const clickThreshold=3;if(window.end-window.start<clickThreshold){if(this._clickHandler&&this._clickHandler.call(null,event)){return;}
const middle=window.end;window.start=Math.max(0,middle-PerfUI.OverviewGrid.MinSelectableSize/2);window.end=Math.min(this._parentElement.clientWidth,middle+PerfUI.OverviewGrid.MinSelectableSize/2);}else if(window.end-window.start<PerfUI.OverviewGrid.MinSelectableSize){if(this._parentElement.clientWidth-window.end>PerfUI.OverviewGrid.MinSelectableSize){window.end=window.start+PerfUI.OverviewGrid.MinSelectableSize;}else{window.start=window.end-PerfUI.OverviewGrid.MinSelectableSize;}}
this._setWindowPosition(window.start,window.end);}
_startWindowDragging(event){this._dragStartPoint=event.pageX;this._dragStartLeft=this.windowLeft;this._dragStartRight=this.windowRight;event.stopPropagation();return true;}
_windowDragging(event){event.preventDefault();let delta=(event.pageX-this._dragStartPoint)/this._parentElement.clientWidth;if(this._dragStartLeft+delta<0){delta=-this._dragStartLeft;}
if(this._dragStartRight+delta>1){delta=1-this._dragStartRight;}
this._setWindow(this._dragStartLeft+delta,this._dragStartRight+delta);}
_resizeWindowLeft(start){if(start<PerfUI.OverviewGrid.OffsetFromWindowEnds){start=0;}else if(start>this._rightResizeElement.offsetLeft-4){start=this._rightResizeElement.offsetLeft-4;}
this._setWindowPosition(start,null);}
_resizeWindowRight(end){if(end>this._parentElement.clientWidth-PerfUI.OverviewGrid.OffsetFromWindowEnds){end=this._parentElement.clientWidth;}else if(end<this._leftResizeElement.offsetLeft+PerfUI.OverviewGrid.MinSelectableSize){end=this._leftResizeElement.offsetLeft+PerfUI.OverviewGrid.MinSelectableSize;}
this._setWindowPosition(null,end);}
_resizeWindowMaximum(){this._setWindowPosition(0,this._parentElement.clientWidth);}
_getRawSliderValue(leftSlider){const minimumValue=this._calculator.minimumBoundary();const valueSpan=this._calculator.maximumBoundary()-minimumValue;if(leftSlider){return minimumValue+valueSpan*this.windowLeft;}else{return minimumValue+valueSpan*this.windowRight;}}
_updateResizeElementPositionValue(leftValue,rightValue){const roundedLeftValue=leftValue.toFixed(2);const roundedRightValue=rightValue.toFixed(2);UI.ARIAUtils.setAriaValueNow(this._leftResizeElement,roundedLeftValue);UI.ARIAUtils.setAriaValueNow(this._rightResizeElement,roundedRightValue);const leftResizeCeiling=roundedRightValue-0.5;const rightResizeFloor=Number(roundedLeftValue)+0.5;UI.ARIAUtils.setAriaValueMinMax(this._leftResizeElement,'0',leftResizeCeiling.toString());UI.ARIAUtils.setAriaValueMinMax(this._rightResizeElement,rightResizeFloor.toString(),'100');}
_updateResizeElementPositionLabels(){const startValue=this._calculator.formatValue(this._getRawSliderValue(true));const endValue=this._calculator.formatValue(this._getRawSliderValue(false));UI.ARIAUtils.setAriaValueText(this._leftResizeElement,String(startValue));UI.ARIAUtils.setAriaValueText(this._rightResizeElement,String(endValue));}
_updateResizeElementPercentageLabels(leftValue,rightValue){UI.ARIAUtils.setAriaValueText(this._leftResizeElement,leftValue);UI.ARIAUtils.setAriaValueText(this._rightResizeElement,rightValue);}
_calculateWindowPosition(){return{rawStartValue:Number(this._getRawSliderValue(true)),rawEndValue:Number(this._getRawSliderValue(false))};}
_setWindow(windowLeft,windowRight){this.windowLeft=windowLeft;this.windowRight=windowRight;this._updateCurtains();let windowPosition;if(this._calculator){windowPosition=this._calculateWindowPosition();}
this.dispatchEventToListeners(PerfUI.OverviewGrid.Events.WindowChanged,windowPosition);}
_updateCurtains(){let left=this.windowLeft;let right=this.windowRight;const width=right-left;if(this._parentElement.clientWidth!==0){const widthInPixels=width*this._parentElement.clientWidth;const minWidthInPixels=PerfUI.OverviewGrid.MinSelectableSize/2;if(widthInPixels<minWidthInPixels){const factor=minWidthInPixels/widthInPixels;left=((this.windowRight+this.windowLeft)-width*factor)/2;right=((this.windowRight+this.windowLeft)+width*factor)/2;}}
const leftResizerPercLeftOffset=(100*left);const rightResizerPercLeftOffset=(100*right);const rightResizerPercRightOffset=(100-(100*right));const leftResizerPercLeftOffsetString=leftResizerPercLeftOffset+'%';const rightResizerPercLeftOffsetString=rightResizerPercLeftOffset+'%';this._leftResizeElement.style.left=leftResizerPercLeftOffsetString;this._rightResizeElement.style.left=rightResizerPercLeftOffsetString;this._leftCurtainElement.style.width=leftResizerPercLeftOffsetString;this._rightCurtainElement.style.width=rightResizerPercRightOffset+'%';this._updateResizeElementPositionValue(leftResizerPercLeftOffset,rightResizerPercLeftOffset);if(this._calculator){this._updateResizeElementPositionLabels();}else{this._updateResizeElementPercentageLabels(leftResizerPercLeftOffsetString,rightResizerPercLeftOffsetString);}}
_setWindowPosition(start,end){const clientWidth=this._parentElement.clientWidth;const windowLeft=typeof start==='number'?start/clientWidth:this.windowLeft;const windowRight=typeof end==='number'?end/clientWidth:this.windowRight;this._setWindow(windowLeft,windowRight);}
_onMouseWheel(event){if(!this._enabled){return;}
if(typeof event.wheelDeltaY==='number'&&event.wheelDeltaY){const zoomFactor=1.1;const mouseWheelZoomSpeed=1/120;const reference=event.offsetX/event.target.clientWidth;this._zoom(Math.pow(zoomFactor,-event.wheelDeltaY*mouseWheelZoomSpeed),reference);}
if(typeof event.wheelDeltaX==='number'&&event.wheelDeltaX){let offset=Math.round(event.wheelDeltaX*PerfUI.OverviewGrid.WindowScrollSpeedFactor);const windowLeft=this._leftResizeElement.offsetLeft+PerfUI.OverviewGrid.ResizerOffset;const windowRight=this._rightResizeElement.offsetLeft+PerfUI.OverviewGrid.ResizerOffset;if(windowLeft-offset<0){offset=windowLeft;}
if(windowRight-offset>this._parentElement.clientWidth){offset=windowRight-this._parentElement.clientWidth;}
this._setWindowPosition(windowLeft-offset,windowRight-offset);event.preventDefault();}}
_zoom(factor,reference){let left=this.windowLeft;let right=this.windowRight;const windowSize=right-left;let newWindowSize=factor*windowSize;if(newWindowSize>1){newWindowSize=1;factor=newWindowSize/windowSize;}
left=reference+(left-reference)*factor;left=Number.constrain(left,0,1-newWindowSize);right=reference+(right-reference)*factor;right=Number.constrain(right,newWindowSize,1);this._setWindow(left,right);}};PerfUI.OverviewGrid.Events={WindowChanged:Symbol('WindowChanged')};PerfUI.OverviewGrid.WindowSelector=class{constructor(parent,position){this._startPosition=position;this._width=parent.offsetWidth;this._windowSelector=createElement('div');this._windowSelector.className='overview-grid-window-selector';this._windowSelector.style.left=this._startPosition+'px';this._windowSelector.style.right=this._width-this._startPosition+'px';parent.appendChild(this._windowSelector);}
_close(position){position=Math.max(0,Math.min(position,this._width));this._windowSelector.remove();return this._startPosition<position?{start:this._startPosition,end:position}:{start:position,end:this._startPosition};}
_updatePosition(position){position=Math.max(0,Math.min(position,this._width));if(position<this._startPosition){this._windowSelector.style.left=position+'px';this._windowSelector.style.right=this._width-this._startPosition+'px';}else{this._windowSelector.style.left=this._startPosition+'px';this._windowSelector.style.right=this._width-position+'px';}}};;PerfUI.PieChartOptions;PerfUI.PieChart=class{constructor(options){const{size,formatter,showLegend,chartName}=options;this.element=createElement('div');this._shadowRoot=UI.createShadowRootWithCoreStyles(this.element,'perf_ui/pieChart.css');const root=this._shadowRoot.createChild('div','root');UI.ARIAUtils.markAsGroup(root);UI.ARIAUtils.setAccessibleName(root,chartName);this._chartRoot=root.createChild('div','chart-root');const svg=this._createSVGChild(this._chartRoot,'svg');this._group=this._createSVGChild(svg,'g');this._innerR=0.618;const strokeWidth=1/size;let circle=this._createSVGChild(this._group,'circle');circle.setAttribute('r',1);circle.setAttribute('stroke','hsl(0, 0%, 80%)');circle.setAttribute('fill','transparent');circle.setAttribute('stroke-width',strokeWidth);circle=this._createSVGChild(this._group,'circle');circle.setAttribute('r',this._innerR);circle.setAttribute('stroke','hsl(0, 0%, 80%)');circle.setAttribute('fill','transparent');circle.setAttribute('stroke-width',strokeWidth);this._foregroundElement=this._chartRoot.createChild('div','pie-chart-foreground');this._totalElement=this._foregroundElement.createChild('div','pie-chart-total');this._formatter=formatter;this._slices=[];this._lastAngle=-Math.PI/2;if(showLegend){this._legend=root.createChild('div','pie-chart-legend');}
this._setSize(size);}
setTotal(totalValue){for(let i=0;i<this._slices.length;++i){this._slices[i].remove();}
this._slices=[];this._totalValue=totalValue;this._lastAngle=-Math.PI/2;let totalString;if(totalValue){totalString=this._formatter?this._formatter(totalValue):totalValue;}else{totalString='';}
this._totalElement.textContent=totalString;if(this._legend){this._legend.removeChildren();this._addLegendItem(this._totalElement,totalValue,ls`Total`);}}
_setSize(value){this._group.setAttribute('transform','scale('+(value/2)+') translate(1, 1) scale(0.99, 0.99)');const size=value+'px';this._chartRoot.style.width=size;this._chartRoot.style.height=size;}
addSlice(value,color,name){let sliceAngle=value/this._totalValue*2*Math.PI;if(!isFinite(sliceAngle)){return;}
sliceAngle=Math.min(sliceAngle,2*Math.PI*0.9999);const path=this._createSVGChild(this._group,'path');const x1=Math.cos(this._lastAngle);const y1=Math.sin(this._lastAngle);this._lastAngle+=sliceAngle;const x2=Math.cos(this._lastAngle);const y2=Math.sin(this._lastAngle);const r2=this._innerR;const x3=x2*r2;const y3=y2*r2;const x4=x1*r2;const y4=y1*r2;const largeArc=sliceAngle>Math.PI?1:0;path.setAttribute('d',`M${x1},${y1} A1,1,0,${largeArc},1,${x2},${y2} L${x3},${y3} A${r2},${r2},0,${largeArc},0,${x4},${y4} Z`);path.setAttribute('fill',color);this._slices.push(path);if(this._legend){this._addLegendItem(path,value,name,color);}}
_createSVGChild(parent,childType){const child=parent.ownerDocument.createElementNS('http://www.w3.org/2000/svg',childType);parent.appendChild(child);return child;}
_addLegendItem(figureElement,value,name,color){const node=this._legend.ownerDocument.createElement('div');node.className='pie-chart-legend-row';if(this._legend.childElementCount){this._legend.insertBefore(node,this._legend.lastElementChild);}else{this._legend.appendChild(node);}
const sizeDiv=node.createChild('div','pie-chart-size');const swatchDiv=node.createChild('div','pie-chart-swatch');const nameDiv=node.createChild('div','pie-chart-name');if(color){swatchDiv.style.backgroundColor=color;}else{swatchDiv.classList.add('pie-chart-empty-swatch');}
nameDiv.textContent=name;const size=this._formatter?this._formatter(value):value;sizeDiv.textContent=size;UI.ARIAUtils.setAccessibleName(figureElement,name+' '+size);return node;}};;PerfUI.TimelineGrid=class{constructor(){this.element=createElement('div');UI.appendStyle(this.element,'perf_ui/timelineGrid.css');this._dividersElement=this.element.createChild('div','resources-dividers');this._gridHeaderElement=createElement('div');this._gridHeaderElement.classList.add('timeline-grid-header');this._eventDividersElement=this._gridHeaderElement.createChild('div','resources-event-dividers');this._dividersLabelBarElement=this._gridHeaderElement.createChild('div','resources-dividers-label-bar');this.element.appendChild(this._gridHeaderElement);}
static calculateGridOffsets(calculator,freeZoneAtLeft){const minGridSlicePx=64;const clientWidth=calculator.computePosition(calculator.maximumBoundary());let dividersCount=clientWidth/minGridSlicePx;let gridSliceTime=calculator.boundarySpan()/dividersCount;const pixelsPerTime=clientWidth/calculator.boundarySpan();const logGridSliceTime=Math.ceil(Math.log(gridSliceTime)/Math.LN10);gridSliceTime=Math.pow(10,logGridSliceTime);if(gridSliceTime*pixelsPerTime>=5*minGridSlicePx){gridSliceTime=gridSliceTime/5;}
if(gridSliceTime*pixelsPerTime>=2*minGridSlicePx){gridSliceTime=gridSliceTime/2;}
const firstDividerTime=Math.ceil((calculator.minimumBoundary()-calculator.zeroTime())/gridSliceTime)*gridSliceTime+
calculator.zeroTime();let lastDividerTime=calculator.maximumBoundary();lastDividerTime+=minGridSlicePx/pixelsPerTime;dividersCount=Math.ceil((lastDividerTime-firstDividerTime)/gridSliceTime);if(!gridSliceTime){dividersCount=0;}
const offsets=[];for(let i=0;i<dividersCount;++i){const time=firstDividerTime+gridSliceTime*i;if(calculator.computePosition(time)<freeZoneAtLeft){continue;}
offsets.push({position:Math.floor(calculator.computePosition(time)),time:time});}
return{offsets:offsets,precision:Math.max(0,-Math.floor(Math.log(gridSliceTime*1.01)/Math.LN10))};}
static drawCanvasGrid(context,dividersData){context.save();context.scale(window.devicePixelRatio,window.devicePixelRatio);const height=Math.floor(context.canvas.height/window.devicePixelRatio);context.strokeStyle=UI.themeSupport.patchColorText('rgba(0, 0, 0, 0.1)',UI.ThemeSupport.ColorUsage.Foreground);context.lineWidth=1;context.translate(0.5,0.5);context.beginPath();for(const offsetInfo of dividersData.offsets){context.moveTo(offsetInfo.position,0);context.lineTo(offsetInfo.position,height);}
context.stroke();context.restore();}
static drawCanvasHeaders(context,dividersData,formatTimeFunction,paddingTop,headerHeight,freeZoneAtLeft){context.save();context.scale(window.devicePixelRatio,window.devicePixelRatio);const width=Math.ceil(context.canvas.width/window.devicePixelRatio);context.beginPath();context.fillStyle=UI.themeSupport.patchColorText('rgba(255, 255, 255, 0.5)',UI.ThemeSupport.ColorUsage.Background);context.fillRect(0,0,width,headerHeight);context.fillStyle=UI.themeSupport.patchColorText('#333',UI.ThemeSupport.ColorUsage.Foreground);context.textBaseline='hanging';context.font='11px '+Host.fontFamily();const paddingRight=4;for(const offsetInfo of dividersData.offsets){const text=formatTimeFunction(offsetInfo.time);const textWidth=context.measureText(text).width;const textPosition=offsetInfo.position-textWidth-paddingRight;if(!freeZoneAtLeft||freeZoneAtLeft<textPosition){context.fillText(text,textPosition,paddingTop);}}
context.restore();}
get dividersElement(){return this._dividersElement;}
get dividersLabelBarElement(){return this._dividersLabelBarElement;}
removeDividers(){this._dividersElement.removeChildren();this._dividersLabelBarElement.removeChildren();}
updateDividers(calculator,freeZoneAtLeft){const dividersData=PerfUI.TimelineGrid.calculateGridOffsets(calculator,freeZoneAtLeft);const dividerOffsets=dividersData.offsets;const precision=dividersData.precision;const dividersElementClientWidth=this._dividersElement.clientWidth;let divider=(this._dividersElement.firstChild);let dividerLabelBar=(this._dividersLabelBarElement.firstChild);for(let i=0;i<dividerOffsets.length;++i){if(!divider){divider=createElement('div');divider.className='resources-divider';this._dividersElement.appendChild(divider);dividerLabelBar=createElement('div');dividerLabelBar.className='resources-divider';const label=createElement('div');label.className='resources-divider-label';dividerLabelBar._labelElement=label;dividerLabelBar.appendChild(label);this._dividersLabelBarElement.appendChild(dividerLabelBar);}
const time=dividerOffsets[i].time;const position=dividerOffsets[i].position;dividerLabelBar._labelElement.textContent=calculator.formatValue(time,precision);const percentLeft=100*position/dividersElementClientWidth;divider.style.left=percentLeft+'%';dividerLabelBar.style.left=percentLeft+'%';divider=(divider.nextSibling);dividerLabelBar=(dividerLabelBar.nextSibling);}
while(divider){const nextDivider=divider.nextSibling;this._dividersElement.removeChild(divider);divider=nextDivider;}
while(dividerLabelBar){const nextDivider=dividerLabelBar.nextSibling;this._dividersLabelBarElement.removeChild(dividerLabelBar);dividerLabelBar=nextDivider;}
return true;}
addEventDivider(divider){this._eventDividersElement.appendChild(divider);}
addEventDividers(dividers){this._gridHeaderElement.removeChild(this._eventDividersElement);for(const divider of dividers){this._eventDividersElement.appendChild(divider);}
this._gridHeaderElement.appendChild(this._eventDividersElement);}
removeEventDividers(){this._eventDividersElement.removeChildren();}
hideEventDividers(){this._eventDividersElement.classList.add('hidden');}
showEventDividers(){this._eventDividersElement.classList.remove('hidden');}
hideDividers(){this._dividersElement.classList.add('hidden');}
showDividers(){this._dividersElement.classList.remove('hidden');}
setScrollTop(scrollTop){this._dividersLabelBarElement.style.top=scrollTop+'px';this._eventDividersElement.style.top=scrollTop+'px';}};PerfUI.TimelineGrid.DividersData;PerfUI.TimelineGrid.Calculator=function(){};PerfUI.TimelineGrid.Calculator.prototype={computePosition(time){},formatValue(time,precision){},minimumBoundary(){},zeroTime(){},maximumBoundary(){},boundarySpan(){}};;PerfUI.TimelineOverviewPane=class extends UI.VBox{constructor(prefix){super();this.element.id=prefix+'-overview-pane';this._overviewCalculator=new PerfUI.TimelineOverviewCalculator();this._overviewGrid=new PerfUI.OverviewGrid(prefix,this._overviewCalculator);this.element.appendChild(this._overviewGrid.element);this._cursorArea=this._overviewGrid.element.createChild('div','overview-grid-cursor-area');this._cursorElement=this._overviewGrid.element.createChild('div','overview-grid-cursor-position');this._cursorArea.addEventListener('mousemove',this._onMouseMove.bind(this),true);this._cursorArea.addEventListener('mouseleave',this._hideCursor.bind(this),true);this._overviewGrid.setResizeEnabled(false);this._overviewGrid.addEventListener(PerfUI.OverviewGrid.Events.WindowChanged,this._onWindowChanged,this);this._overviewGrid.setClickHandler(this._onClick.bind(this));this._overviewControls=[];this._markers=new Map();this._overviewInfo=new PerfUI.TimelineOverviewPane.OverviewInfo(this._cursorElement);this._updateThrottler=new Common.Throttler(100);this._cursorEnabled=false;this._cursorPosition=0;this._lastWidth=0;}
_onMouseMove(event){if(!this._cursorEnabled){return;}
this._cursorPosition=event.offsetX+event.target.offsetLeft;this._cursorElement.style.left=this._cursorPosition+'px';this._cursorElement.style.visibility='visible';this._overviewInfo.setContent(this._buildOverviewInfo());}
async _buildOverviewInfo(){const document=this.element.ownerDocument;const x=this._cursorPosition;const elements=await Promise.all(this._overviewControls.map(control=>control.overviewInfoPromise(x)));const fragment=document.createDocumentFragment();elements.remove(null);fragment.appendChildren.apply(fragment,elements);return fragment;}
_hideCursor(){this._cursorElement.style.visibility='hidden';this._overviewInfo.hide();}
wasShown(){this._update();}
willHide(){this._overviewInfo.hide();}
onResize(){const width=this.element.offsetWidth;if(width===this._lastWidth){return;}
this._lastWidth=width;this.scheduleUpdate();}
setOverviewControls(overviewControls){for(let i=0;i<this._overviewControls.length;++i){this._overviewControls[i].dispose();}
for(let i=0;i<overviewControls.length;++i){overviewControls[i].setCalculator(this._overviewCalculator);overviewControls[i].show(this._overviewGrid.element);}
this._overviewControls=overviewControls;this._update();}
setBounds(minimumBoundary,maximumBoundary){this._overviewCalculator.setBounds(minimumBoundary,maximumBoundary);this._overviewGrid.setResizeEnabled(true);this._cursorEnabled=true;}
scheduleUpdate(){this._updateThrottler.schedule(process.bind(this));function process(){this._update();return Promise.resolve();}}
_update(){if(!this.isShowing()){return;}
this._overviewCalculator.setDisplayWidth(this._overviewGrid.clientWidth());for(let i=0;i<this._overviewControls.length;++i){this._overviewControls[i].update();}
this._overviewGrid.updateDividers(this._overviewCalculator);this._updateMarkers();this._updateWindow();}
setMarkers(markers){this._markers=markers;}
_updateMarkers(){const filteredMarkers=new Map();for(const time of this._markers.keys()){const marker=this._markers.get(time);const position=Math.round(this._overviewCalculator.computePosition(time));if(filteredMarkers.has(position)){continue;}
filteredMarkers.set(position,marker);marker.style.left=position+'px';}
this._overviewGrid.removeEventDividers();this._overviewGrid.addEventDividers(filteredMarkers.valuesArray());}
reset(){this._windowStartTime=0;this._windowEndTime=Infinity;this._overviewCalculator.reset();this._overviewGrid.reset();this._overviewGrid.setResizeEnabled(false);this._cursorEnabled=false;this._hideCursor();this._markers=new Map();for(const control of this._overviewControls){control.reset();}
this._overviewInfo.hide();this.scheduleUpdate();}
_onClick(event){return this._overviewControls.some(control=>control.onClick(event));}
_onWindowChanged(event){if(this._muteOnWindowChanged){return;}
if(!this._overviewControls.length){return;}
this._windowStartTime=event.data.rawStartValue;this._windowEndTime=event.data.rawEndValue;const windowTimes={startTime:this._windowStartTime,endTime:this._windowEndTime};this.dispatchEventToListeners(PerfUI.TimelineOverviewPane.Events.WindowChanged,windowTimes);}
setWindowTimes(startTime,endTime){if(startTime===this._windowStartTime&&endTime===this._windowEndTime){return;}
this._windowStartTime=startTime;this._windowEndTime=endTime;this._updateWindow();this.dispatchEventToListeners(PerfUI.TimelineOverviewPane.Events.WindowChanged,{startTime:startTime,endTime:endTime});}
_updateWindow(){if(!this._overviewControls.length){return;}
const absoluteMin=this._overviewCalculator.minimumBoundary();const timeSpan=this._overviewCalculator.maximumBoundary()-absoluteMin;const haveRecords=absoluteMin>0;const left=haveRecords&&this._windowStartTime?Math.min((this._windowStartTime-absoluteMin)/timeSpan,1):0;const right=haveRecords&&this._windowEndTime<Infinity?(this._windowEndTime-absoluteMin)/timeSpan:1;this._muteOnWindowChanged=true;this._overviewGrid.setWindow(left,right);this._muteOnWindowChanged=false;}};PerfUI.TimelineOverviewPane.Events={WindowChanged:Symbol('WindowChanged')};PerfUI.TimelineOverviewCalculator=class{constructor(){this.reset();}
computePosition(time){return(time-this._minimumBoundary)/this.boundarySpan()*this._workingArea;}
positionToTime(position){return position/this._workingArea*this.boundarySpan()+this._minimumBoundary;}
setBounds(minimumBoundary,maximumBoundary){this._minimumBoundary=minimumBoundary;this._maximumBoundary=maximumBoundary;}
setDisplayWidth(clientWidth){this._workingArea=clientWidth;}
reset(){this.setBounds(0,100);}
formatValue(value,precision){return Number.preciseMillisToString(value-this.zeroTime(),precision);}
maximumBoundary(){return this._maximumBoundary;}
minimumBoundary(){return this._minimumBoundary;}
zeroTime(){return this._minimumBoundary;}
boundarySpan(){return this._maximumBoundary-this._minimumBoundary;}};PerfUI.TimelineOverview=function(){};PerfUI.TimelineOverview.prototype={show(parentElement,insertBefore){},update(){},dispose(){},reset(){},overviewInfoPromise(x){},onClick(event){},};PerfUI.TimelineOverviewBase=class extends UI.VBox{constructor(){super();this._calculator=null;this._canvas=this.element.createChild('canvas','fill');this._context=this._canvas.getContext('2d');}
width(){return this._canvas.width;}
height(){return this._canvas.height;}
context(){return this._context;}
calculator(){return this._calculator;}
update(){this.resetCanvas();}
dispose(){this.detach();}
reset(){}
overviewInfoPromise(x){return Promise.resolve((null));}
setCalculator(calculator){this._calculator=calculator;}
onClick(event){return false;}
resetCanvas(){if(this.element.clientWidth){this.setCanvasSize(this.element.clientWidth,this.element.clientHeight);}}
setCanvasSize(width,height){this._canvas.width=width*window.devicePixelRatio;this._canvas.height=height*window.devicePixelRatio;}};PerfUI.TimelineOverviewPane.OverviewInfo=class{constructor(anchor){this._anchorElement=anchor;this._glassPane=new UI.GlassPane();this._glassPane.setPointerEventsBehavior(UI.GlassPane.PointerEventsBehavior.PierceContents);this._glassPane.setMarginBehavior(UI.GlassPane.MarginBehavior.Arrow);this._glassPane.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);this._visible=false;this._element=UI.createShadowRootWithCoreStyles(this._glassPane.contentElement,'perf_ui/timelineOverviewInfo.css').createChild('div','overview-info');}
async setContent(contentPromise){this._visible=true;const content=await contentPromise;if(!this._visible){return;}
this._element.removeChildren();this._element.appendChild(content);this._glassPane.setContentAnchorBox(this._anchorElement.boxInWindow());if(!this._glassPane.isShowing()){this._glassPane.show((this._anchorElement.ownerDocument));}}
hide(){this._visible=false;this._glassPane.hide();}};;Root.Runtime.cachedResources["perf_ui/chartViewport.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.chart-viewport-v-scroll {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    overflow-x: hidden;\n    z-index: 200;\n    padding-left: 1px;\n}\n\n.chart-viewport-v-scroll.always-show-scrollbar {\n    overflow-y: scroll;\n}\n\n/* force non overlay scrollbars for Mac */\n:host-context(.platform-mac) .chart-viewport-v-scroll {\n    right: 2px;\n    top: 3px;\n    bottom: 3px;\n}\n\n:host-context(.platform-mac) ::-webkit-scrollbar {\n    width: 8px;\n}\n\n:host-context(.platform-mac) ::-webkit-scrollbar-thumb {\n    background-color: hsla(0, 0%, 56%, 0.6);\n    border-radius: 50px;\n}\n\n:host-context(.platform-mac) .chart-viewport-v-scroll:hover::-webkit-scrollbar-thumb {\n    background-color: hsla(0, 0%, 25%, 0.6);\n}\n\n/* force non overlay scrollbars for Aura Overlay Scrollbar enabled */\n:host-context(.overlay-scrollbar-enabled) ::-webkit-scrollbar {\n    width: 10px;\n}\n\n:host-context(.overlay-scrollbar-enabled) ::-webkit-scrollbar-thumb {\n    background-color: hsla(0, 0%, 0%, 0.5);\n}\n\n:host-context(.overlay-scrollbar-enabled) .chart-viewport-v-scroll:hover::-webkit-scrollbar-thumb {\n    background-color: hsla(0, 0%, 0%, 0.7);\n}\n\n.chart-viewport-selection-overlay {\n    position: absolute;\n    z-index: 100;\n    background-color: rgba(56, 121, 217, 0.3);\n    border-color: rgb(16, 81, 177);\n    border-width: 0 1px;\n    border-style: solid;\n    pointer-events: none;\n    top: 0;\n    bottom: 0;\n    text-align: center;\n}\n\n.chart-viewport-selection-overlay .time-span {\n    white-space: nowrap;\n    position: absolute;\n    left: 0;\n    right: 0;\n    bottom: 0;\n}\n\n/*# sourceURL=perf_ui/chartViewport.css */";Root.Runtime.cachedResources["perf_ui/filmStripView.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.film-strip-view {\n    overflow-x: auto;\n    overflow-y: hidden;\n    align-content: flex-start;\n    min-height: 81px;\n}\n\n.film-strip-view.time-based .frame .time {\n    display: none;\n}\n\n.film-strip-view .label {\n    margin: auto;\n    font-size: 18px;\n    color: #999;\n}\n\n.film-strip-view .frame {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    padding: 4px;\n    flex: none;\n    cursor: pointer;\n}\n\n.film-strip-view .frame .thumbnail {\n    min-width: 24px;\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    pointer-events: none;\n    margin: 4px 0 2px;\n    border: 2px solid transparent;\n}\n\n.film-strip-view .frame:hover .thumbnail {\n    border-color: #FBCA46;\n}\n\n.film-strip-view .frame .thumbnail img {\n    height: auto;\n    width: auto;\n    max-width: 80px;\n    max-height: 50px;\n    pointer-events: none;\n    box-shadow: 0 0 3px #bbb;\n    flex: 0 0 auto;\n}\n\n.film-strip-view .frame:hover .thumbnail img {\n    box-shadow: none;\n}\n\n.film-strip-view .frame .time {\n    font-size: 10px;\n    margin-top: 2px;\n}\n\n/*# sourceURL=perf_ui/filmStripView.css */";Root.Runtime.cachedResources["perf_ui/flameChart.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.flame-chart-main-pane {\n    overflow: hidden;\n}\n\n.flame-chart-marker-highlight-element {\n    position: absolute;\n    top: 1px;\n    height: 18px;\n    width: 6px;\n    margin: 0 -3px;\n    content: \"\";\n    display: block;\n}\n\n.flame-chart-canvas[data-keyboard-focus=\"true\"]:focus {\n    border-top: 1px solid var(--accent-color);\n    border-bottom: 1px solid var(--accent-color);\n}\n\n.flame-chart-highlight-element {\n    position: absolute;\n    pointer-events: none;\n    background-color: rgba(56, 121, 217, 0.1);\n}\n\n.flame-chart-selected-element {\n    position: absolute;\n    pointer-events: none;\n    outline: 2px solid var(--selection-bg-color);\n    background-color: rgba(56, 121, 217, 0.1);\n}\n\n.flame-chart-unfocused-selected-element {\n    outline: 2px solid rgba(123, 123, 123, 1);\n}\n\n.chart-cursor-element {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    z-index: 100;\n    width: 2px;\n    background-color: var(--selection-bg-color);\n    pointer-events: none;\n}\n\n.flame-chart-entry-info:not(:empty) {\n    z-index: 2000;\n    position: absolute;\n    background-color: white;\n    pointer-events: none;\n    padding: 4px 8px;\n    white-space: nowrap;\n    max-width: 80%;\n    box-shadow: var(--drop-shadow);\n}\n\n.flame-chart-entry-info table tr td:empty {\n    padding: 0;\n}\n\n.flame-chart-entry-info table tr td:not(:empty) {\n    padding: 0 5px;\n    white-space: nowrap;\n}\n\n.flame-chart-entry-info table tr td:first-child {\n    font-weight: bold;\n}\n\n.flame-chart-entry-info table tr td span {\n    margin-right: 5px;\n}\n\n/*# sourceURL=perf_ui/flameChart.css */";Root.Runtime.cachedResources["perf_ui/overviewGrid.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.overview-grid-window-selector {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    background-color: rgba(125, 173, 217, 0.5);\n    z-index: 250;\n    pointer-events: none;\n}\n\n.overview-grid-window-resizer {\n    position: absolute;\n    top: -1px;\n    height: 20px;\n    width: 6px;\n    margin-left: -3px;\n    background-color: rgb(153, 153, 153);\n    border: 1px solid white;\n    z-index: 500;\n}\n\n.overview-grid-window-resizer[data-keyboard-focus=\"true\"]:focus {\n    background-color: var(--active-control-bg-color);\n}\n\n.overview-grid-cursor-area {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 20px;\n    bottom: 0;\n    z-index: 500;\n    cursor: text;\n}\n\n.overview-grid-cursor-position {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    width: 2px;\n    background-color: hsla(220, 95%, 50%, 0.7);\n    z-index: 500;\n    pointer-events: none;\n    visibility: hidden;\n    overflow: hidden;\n}\n\n.window-curtain-left, .window-curtain-right {\n    background-color: hsla(0, 0%, 80%, 0.5);\n    position: absolute;\n    top: 0;\n    height: 100%;\n    z-index: 300;\n    pointer-events: none;\n    border: 1px none hsla(0, 0%, 70%, 0.5);\n}\n\n.window-curtain-left {\n    left: 0;\n    border-right-style: solid;\n}\n\n.window-curtain-right {\n    right: 0;\n    border-left-style: solid;\n}\n\n/*# sourceURL=perf_ui/overviewGrid.css */";Root.Runtime.cachedResources["perf_ui/pieChart.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.root {\n    align-items: center;\n    display: flex;\n    min-width: fit-content;\n    white-space: nowrap;\n}\n\n.chart-root {\n    position: relative;\n    overflow: hidden;\n}\n\n.pie-chart-foreground {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    z-index: 10;\n    top: 0;\n    display: flex;\n    pointer-events: none;\n}\n\n.pie-chart-total {\n    margin: auto;\n    padding: 2px 5px;\n    background-color: rgba(255, 255, 255, 0.6);\n    pointer-events: auto;\n}\n\n.pie-chart-legend {\n    margin-left: 30px;\n}\n\n.pie-chart-legend-row {\n    margin: 5px auto;\n    padding-right: 25px;\n}\n\n.pie-chart-swatch {\n    display: inline-block;\n    width: 11px;\n    height: 11px;\n    margin: 0 6px;\n    top: 1px;\n    position: relative;\n    border: 1px solid rgba(100, 100, 100, 0.2);\n}\n\n.pie-chart-swatch.pie-chart-empty-swatch {\n    border: none;\n}\n\n.pie-chart-name {\n    display: inline-block;\n}\n\n.pie-chart-size {\n    display: inline-block;\n    text-align: right;\n    width: 70px;\n}\n\n/*# sourceURL=perf_ui/pieChart.css */";Root.Runtime.cachedResources["perf_ui/timelineGrid.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.resources-dividers {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    z-index: -100;\n    bottom: 0;\n}\n\n.resources-event-dividers {\n    position: absolute;\n    left: 0;\n    right: 0;\n    height: 100%;\n    top: 0;\n    z-index: 300;\n    pointer-events: none;\n}\n\n.resources-dividers-label-bar {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    background-color: rgba(255, 255, 255, 0.85);\n    background-clip: padding-box;\n    height: 20px;\n    z-index: 200;\n    pointer-events: none;\n    overflow: hidden;\n}\n\n.resources-divider {\n    position: absolute;\n    width: 1px;\n    top: 0;\n    bottom: 0;\n    background-color: rgba(0, 0, 0, 0.1);\n}\n\n.resources-event-divider {\n    position: absolute;\n    width: 1px;\n    top: 0;\n    bottom: 0;\n    z-index: 300;\n}\n\n.resources-divider-label {\n    position: absolute;\n    top: 4px;\n    right: 3px;\n    font-size: 80%;\n    white-space: nowrap;\n    pointer-events: none;\n}\n\n.timeline-grid-header {\n    height: 20px;\n    pointer-events: none;\n}\n\n/*# sourceURL=perf_ui/timelineGrid.css */";Root.Runtime.cachedResources["perf_ui/timelineOverviewInfo.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.overview-info:not(:empty) {\n    display: flex;\n    background: white;\n    box-shadow: var(--drop-shadow);\n    padding: 3px;\n}\n\n.overview-info .frame .time {\n    display: none;\n}\n\n.overview-info .frame .thumbnail img {\n    max-width: 50vw;\n    max-height: 50vh;\n}\n\n/*# sourceURL=perf_ui/timelineOverviewInfo.css */";Root.Runtime.cachedResources["performance_monitor/performanceMonitor.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.perfmon-pane {\n  overflow: hidden;\n}\n\n.perfmon-pane.suspended {\n  opacity: 0.4;\n  pointer-events: none;\n}\n\n.perfmon-pane .perfmon-chart-suspend-overlay {\n  display: none;\n  font-size: 26px;\n  align-items: center;\n  justify-content: center;\n}\n\n.perfmon-pane.suspended .perfmon-chart-suspend-overlay {\n  display: flex;\n}\n\n.perfmon-control-pane {\n  display: flex;\n  flex-direction: column;\n  padding: 6px 0;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.perfmon-chart-container {\n  display: flex;\n  flex: 1 1;\n  border-left: 1px solid #ccc;\n  overflow-y: auto;\n}\n\n.perfmon-chart-container canvas {\n  width: 100%;\n}\n\n.perfmon-indicator {\n  padding: 6px 12px;\n  margin: -1px 0;\n  display: flex;\n  flex-shrink: 0;\n  width: 210px;\n}\n\n.perfmon-indicator:hover {\n  background-color: #f8f8f8;\n}\n\n.perfmon-indicator[data-keyboard-focus=\"true\"]:focus {\n  background-color: #f8f8f8;\n}\n\n.perfmon-indicator-swatch {\n  margin-right: 6px;\n}\n\n.perfmon-indicator:not(.active) .perfmon-indicator-swatch {\n  background-color: #eee !important;\n}\n\n.perfmon-indicator-title {\n  flex: 0 0 115px;\n}\n\n.perfmon-indicator:not(.active) .perfmon-indicator-title {\n  color: #aaa;\n}\n\n.perfmon-indicator-value {\n  flex: 0 0 55px;\n  text-align: right;\n  overflow: visible;\n}\n\n.perfmon-indicator:not(.active) .perfmon-indicator-value {\n  opacity: 0;\n}\n\n/*# sourceURL=performance_monitor/performanceMonitor.css */";Profiler.ProfileType=class extends Common.Object{constructor(id,name){super();this._id=id;this._name=name;this._profiles=[];this._profileBeingRecorded=null;this._nextProfileUid=1;if(!window.opener){window.addEventListener('unload',this._clearTempStorage.bind(this),false);}}
typeName(){return'';}
nextProfileUid(){return this._nextProfileUid;}
incrementProfileUid(){return this._nextProfileUid++;}
hasTemporaryView(){return false;}
fileExtension(){return null;}
get buttonTooltip(){return'';}
get id(){return this._id;}
get treeItemTitle(){return this._name;}
get name(){return this._name;}
buttonClicked(){return false;}
get description(){return'';}
isInstantProfile(){return false;}
isEnabled(){return true;}
getProfiles(){function isFinished(profile){return this._profileBeingRecorded!==profile;}
return this._profiles.filter(isFinished.bind(this));}
customContent(){return null;}
setCustomContentEnabled(enable){}
getProfile(uid){for(let i=0;i<this._profiles.length;++i){if(this._profiles[i].uid===uid){return this._profiles[i];}}
return null;}
loadFromFile(file){let name=file.name;const fileExtension=this.fileExtension();if(fileExtension&&name.endsWith(fileExtension)){name=name.substr(0,name.length-fileExtension.length);}
const profile=this.createProfileLoadedFromFile(name);profile.setFromFile();this.setProfileBeingRecorded(profile);this.addProfile(profile);return profile.loadFromFile(file);}
createProfileLoadedFromFile(title){throw new Error('Needs implemented.');}
addProfile(profile){this._profiles.push(profile);this.dispatchEventToListeners(Profiler.ProfileType.Events.AddProfileHeader,profile);}
removeProfile(profile){const index=this._profiles.indexOf(profile);if(index===-1){return;}
this._profiles.splice(index,1);this._disposeProfile(profile);}
_clearTempStorage(){for(let i=0;i<this._profiles.length;++i){this._profiles[i].removeTempFile();}}
profileBeingRecorded(){return this._profileBeingRecorded;}
setProfileBeingRecorded(profile){this._profileBeingRecorded=profile;}
profileBeingRecordedRemoved(){}
reset(){for(const profile of this._profiles.slice()){this._disposeProfile(profile);}
this._profiles=[];this._nextProfileUid=1;}
_disposeProfile(profile){this.dispatchEventToListeners(Profiler.ProfileType.Events.RemoveProfileHeader,profile);profile.dispose();if(this._profileBeingRecorded===profile){this.profileBeingRecordedRemoved();this.setProfileBeingRecorded(null);}}};Profiler.ProfileType.Events={AddProfileHeader:Symbol('add-profile-header'),ProfileComplete:Symbol('profile-complete'),RemoveProfileHeader:Symbol('remove-profile-header'),ViewUpdated:Symbol('view-updated')};Profiler.ProfileType.DataDisplayDelegate=function(){};Profiler.ProfileType.DataDisplayDelegate.prototype={showProfile(profile){},showObject(snapshotObjectId,perspectiveName){},async linkifyObject(nodeIndex){}};;Profiler.ProfileHeader=class extends Common.Object{constructor(profileType,title){super();this._profileType=profileType;this.title=title;this.uid=profileType.incrementProfileUid();this._fromFile=false;}
setTitle(title){this.title=title;this.dispatchEventToListeners(Profiler.ProfileHeader.Events.ProfileTitleChanged,this);}
profileType(){return this._profileType;}
updateStatus(subtitle,wait){this.dispatchEventToListeners(Profiler.ProfileHeader.Events.UpdateStatus,new Profiler.ProfileHeader.StatusUpdate(subtitle,wait));}
createSidebarTreeElement(dataDisplayDelegate){throw new Error('Not implemented.');}
createView(dataDisplayDelegate){throw new Error('Not implemented.');}
removeTempFile(){if(this._tempFile){this._tempFile.remove();}}
dispose(){}
canSaveToFile(){return false;}
saveToFile(){throw new Error('Not implemented');}
loadFromFile(file){throw new Error('Not implemented');}
fromFile(){return this._fromFile;}
setFromFile(){this._fromFile=true;}
setProfile(profile){}};Profiler.ProfileHeader.StatusUpdate=class{constructor(subtitle,wait){this.subtitle=subtitle;this.wait=wait;}};Profiler.ProfileHeader.Events={UpdateStatus:Symbol('UpdateStatus'),ProfileReceived:Symbol('ProfileReceived'),ProfileTitleChanged:Symbol('ProfileTitleChanged')};;Profiler.ProfilesPanel=class extends UI.PanelWithSidebar{constructor(name,profileTypes,recordingActionId){super(name);this._profileTypes=profileTypes;this.registerRequiredCSS('profiler/heapProfiler.css');this.registerRequiredCSS('profiler/profilesPanel.css');this.registerRequiredCSS('object_ui/objectValue.css');const mainContainer=new UI.VBox();this.splitWidget().setMainWidget(mainContainer);this.profilesItemTreeElement=new Profiler.ProfilesSidebarTreeElement(this);this._sidebarTree=new UI.TreeOutlineInShadow();this._sidebarTree.registerRequiredCSS('profiler/profilesSidebarTree.css');this._sidebarTree.element.classList.add('profiles-sidebar-tree-box');this.panelSidebarElement().appendChild(this._sidebarTree.element);this._sidebarTree.appendChild(this.profilesItemTreeElement);this._sidebarTree.element.addEventListener('keydown',this._onKeyDown.bind(this),false);this.profileViews=createElement('div');this.profileViews.id='profile-views';this.profileViews.classList.add('vbox');mainContainer.element.appendChild(this.profileViews);this._toolbarElement=createElementWithClass('div','profiles-toolbar');mainContainer.element.insertBefore(this._toolbarElement,mainContainer.element.firstChild);this.panelSidebarElement().classList.add('profiles-tree-sidebar');const toolbarContainerLeft=createElementWithClass('div','profiles-toolbar');this.panelSidebarElement().insertBefore(toolbarContainerLeft,this.panelSidebarElement().firstChild);const toolbar=new UI.Toolbar('',toolbarContainerLeft);this._toggleRecordAction=(UI.actionRegistry.action(recordingActionId));this._toggleRecordButton=UI.Toolbar.createActionButton(this._toggleRecordAction);toolbar.appendToolbarItem(this._toggleRecordButton);this.clearResultsButton=new UI.ToolbarButton(Common.UIString('Clear all profiles'),'largeicon-clear');this.clearResultsButton.addEventListener(UI.ToolbarButton.Events.Click,this._reset,this);toolbar.appendToolbarItem(this.clearResultsButton);toolbar.appendSeparator();toolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('components.collect-garbage'));this._profileViewToolbar=new UI.Toolbar('',this._toolbarElement);this._profileGroups={};this._launcherView=new Profiler.ProfileLauncherView(this);this._launcherView.addEventListener(Profiler.ProfileLauncherView.Events.ProfileTypeSelected,this._onProfileTypeSelected,this);this._profileToView=[];this._typeIdToSidebarSection={};const types=this._profileTypes;for(let i=0;i<types.length;i++){this._registerProfileType(types[i]);}
this._launcherView.restoreSelectedProfileType();this.profilesItemTreeElement.select();this._showLauncherView();this._createFileSelectorElement();this.element.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),false);SDK.targetManager.addEventListener(SDK.TargetManager.Events.SuspendStateChanged,this._onSuspendStateChanged,this);UI.context.addFlavorChangeListener(SDK.CPUProfilerModel,this._updateProfileTypeSpecificUI,this);UI.context.addFlavorChangeListener(SDK.HeapProfilerModel,this._updateProfileTypeSpecificUI,this);}
_onKeyDown(event){let handled=false;if(event.key==='ArrowDown'&&!event.altKey){handled=this._sidebarTree.selectNext();}else if(event.key==='ArrowUp'&&!event.altKey){handled=this._sidebarTree.selectPrevious();}
if(handled){event.consume(true);}}
searchableView(){return this.visibleView&&this.visibleView.searchableView?this.visibleView.searchableView():null;}
_createFileSelectorElement(){if(this._fileSelectorElement){this.element.removeChild(this._fileSelectorElement);}
this._fileSelectorElement=UI.createFileSelectorElement(this._loadFromFile.bind(this));Profiler.ProfilesPanel._fileSelectorElement=this._fileSelectorElement;this.element.appendChild(this._fileSelectorElement);}
_findProfileTypeByExtension(fileName){return this._profileTypes.find(type=>!!type.fileExtension()&&fileName.endsWith(type.fileExtension()||''))||null;}
async _loadFromFile(file){this._createFileSelectorElement();const profileType=this._findProfileTypeByExtension(file.name);if(!profileType){const extensions=new Set(this._profileTypes.map(type=>type.fileExtension()).filter(ext=>ext));Common.console.error(Common.UIString(`Can't load file. Supported file extensions: '%s'.`,Array.from(extensions).join(`', '`)));return;}
if(!!profileType.profileBeingRecorded()){Common.console.error(Common.UIString(`Can't load profile while another profile is being recorded.`));return;}
const error=await profileType.loadFromFile(file);if(error){UI.MessageDialog.show(Common.UIString('Profile loading failed: %s.',error.message));}}
toggleRecord(){if(!this._toggleRecordAction.enabled()){return true;}
const type=this._selectedProfileType;const isProfiling=type.buttonClicked();this._updateToggleRecordAction(isProfiling);if(isProfiling){this._launcherView.profileStarted();if(type.hasTemporaryView()){this.showProfile(type.profileBeingRecorded());}}else{this._launcherView.profileFinished();}
return true;}
_onSuspendStateChanged(){this._updateToggleRecordAction(this._toggleRecordAction.toggled());}
_updateToggleRecordAction(toggled){const hasSelectedTarget=!!(UI.context.flavor(SDK.CPUProfilerModel)||UI.context.flavor(SDK.HeapProfilerModel));const enable=toggled||(!SDK.targetManager.allTargetsSuspended()&&hasSelectedTarget);this._toggleRecordAction.setEnabled(enable);this._toggleRecordAction.setToggled(toggled);if(enable){this._toggleRecordButton.setTitle(this._selectedProfileType?this._selectedProfileType.buttonTooltip:'');}else{this._toggleRecordButton.setTitle(UI.anotherProfilerActiveLabel());}
if(this._selectedProfileType){this._launcherView.updateProfileType(this._selectedProfileType,enable);}}
_profileBeingRecordedRemoved(){this._updateToggleRecordAction(false);this._launcherView.profileFinished();}
_onProfileTypeSelected(event){this._selectedProfileType=(event.data);this._updateProfileTypeSpecificUI();}
_updateProfileTypeSpecificUI(){this._updateToggleRecordAction(this._toggleRecordAction.toggled());}
_reset(){this._profileTypes.forEach(type=>type.reset());delete this.visibleView;this._profileGroups={};this._updateToggleRecordAction(false);this._launcherView.profileFinished();this._sidebarTree.element.classList.remove('some-expandable');this._launcherView.detach();this.profileViews.removeChildren();this._profileViewToolbar.removeToolbarItems();this.clearResultsButton.element.classList.remove('hidden');this.profilesItemTreeElement.select();this._showLauncherView();}
_showLauncherView(){this.closeVisibleView();this._profileViewToolbar.removeToolbarItems();this._launcherView.show(this.profileViews);this.visibleView=this._launcherView;this._toolbarElement.classList.add('hidden');}
_registerProfileType(profileType){this._launcherView.addProfileType(profileType);const profileTypeSection=new Profiler.ProfileTypeSidebarSection(this,profileType);this._typeIdToSidebarSection[profileType.id]=profileTypeSection;this._sidebarTree.appendChild(profileTypeSection);profileTypeSection.childrenListElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),false);function onAddProfileHeader(event){this._addProfileHeader((event.data));}
function onRemoveProfileHeader(event){this._removeProfileHeader((event.data));}
function profileComplete(event){this.showProfile((event.data));}
profileType.addEventListener(Profiler.ProfileType.Events.ViewUpdated,this._updateProfileTypeSpecificUI,this);profileType.addEventListener(Profiler.ProfileType.Events.AddProfileHeader,onAddProfileHeader,this);profileType.addEventListener(Profiler.ProfileType.Events.RemoveProfileHeader,onRemoveProfileHeader,this);profileType.addEventListener(Profiler.ProfileType.Events.ProfileComplete,profileComplete,this);const profiles=profileType.getProfiles();for(let i=0;i<profiles.length;i++){this._addProfileHeader(profiles[i]);}}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);if(this.panelSidebarElement().isSelfOrAncestor(event.srcElement)){contextMenu.defaultSection().appendItem(Common.UIString('Load\u2026'),this._fileSelectorElement.click.bind(this._fileSelectorElement));}
contextMenu.show();}
showLoadFromFileDialog(){this._fileSelectorElement.click();}
_addProfileHeader(profile){const profileType=profile.profileType();const typeId=profileType.id;this._typeIdToSidebarSection[typeId].addProfileHeader(profile);if(!this.visibleView||this.visibleView===this._launcherView){this.showProfile(profile);}}
_removeProfileHeader(profile){if(profile.profileType().profileBeingRecorded()===profile){this._profileBeingRecordedRemoved();}
const i=this._indexOfViewForProfile(profile);if(i!==-1){this._profileToView.splice(i,1);}
const typeId=profile.profileType().id;const sectionIsEmpty=this._typeIdToSidebarSection[typeId].removeProfileHeader(profile);if(sectionIsEmpty){this.profilesItemTreeElement.select();this._showLauncherView();}}
showProfile(profile){if(!profile||(profile.profileType().profileBeingRecorded()===profile)&&!profile.profileType().hasTemporaryView()){return null;}
const view=this.viewForProfile(profile);if(view===this.visibleView){return view;}
this.closeVisibleView();view.show(this.profileViews);this._toolbarElement.classList.remove('hidden');this.visibleView=view;const profileTypeSection=this._typeIdToSidebarSection[profile.profileType().id];const sidebarElement=profileTypeSection.sidebarElementForProfile(profile);sidebarElement.revealAndSelect();this._profileViewToolbar.removeToolbarItems();const toolbarItems=view.syncToolbarItems();for(let i=0;i<toolbarItems.length;++i){this._profileViewToolbar.appendToolbarItem(toolbarItems[i]);}
return view;}
showObject(snapshotObjectId,perspectiveName){}
async linkifyObject(nodeIndex){return null;}
viewForProfile(profile){const index=this._indexOfViewForProfile(profile);if(index!==-1){return this._profileToView[index].view;}
const view=profile.createView(this);view.element.classList.add('profile-view');this._profileToView.push({profile:profile,view:view});return view;}
_indexOfViewForProfile(profile){return this._profileToView.findIndex(item=>item.profile===profile);}
closeVisibleView(){if(this.visibleView){this.visibleView.detach();}
delete this.visibleView;}
focus(){this._sidebarTree.focus();}};Profiler.ProfileTypeSidebarSection=class extends UI.TreeElement{constructor(dataDisplayDelegate,profileType){super(profileType.treeItemTitle.escapeHTML(),true);this.selectable=false;this._dataDisplayDelegate=dataDisplayDelegate;this._profileTreeElements=[];this._profileGroups={};this.expand();this.hidden=true;this.setCollapsible(false);}
addProfileHeader(profile){this.hidden=false;const profileType=profile.profileType();let sidebarParent=this;const profileTreeElement=profile.createSidebarTreeElement(this._dataDisplayDelegate);this._profileTreeElements.push(profileTreeElement);if(!profile.fromFile()&&profileType.profileBeingRecorded()!==profile){const profileTitle=profile.title;let group=this._profileGroups[profileTitle];if(!group){group=new Profiler.ProfileTypeSidebarSection.ProfileGroup();this._profileGroups[profileTitle]=group;}
group.profileSidebarTreeElements.push(profileTreeElement);const groupSize=group.profileSidebarTreeElements.length;if(groupSize===2){group.sidebarTreeElement=new Profiler.ProfileGroupSidebarTreeElement(this._dataDisplayDelegate,profile.title);const firstProfileTreeElement=group.profileSidebarTreeElements[0];const index=this.children().indexOf(firstProfileTreeElement);this.insertChild(group.sidebarTreeElement,index);const selected=firstProfileTreeElement.selected;this.removeChild(firstProfileTreeElement);group.sidebarTreeElement.appendChild(firstProfileTreeElement);if(selected){firstProfileTreeElement.revealAndSelect();}
firstProfileTreeElement.setSmall(true);firstProfileTreeElement.setMainTitle(Common.UIString('Run %d',1));this.treeOutline.element.classList.add('some-expandable');}
if(groupSize>=2){sidebarParent=group.sidebarTreeElement;profileTreeElement.setSmall(true);profileTreeElement.setMainTitle(Common.UIString('Run %d',groupSize));}}
sidebarParent.appendChild(profileTreeElement);}
removeProfileHeader(profile){const index=this._sidebarElementIndex(profile);if(index===-1){return false;}
const profileTreeElement=this._profileTreeElements[index];this._profileTreeElements.splice(index,1);let sidebarParent=this;const group=this._profileGroups[profile.title];if(group){const groupElements=group.profileSidebarTreeElements;groupElements.splice(groupElements.indexOf(profileTreeElement),1);if(groupElements.length===1){const pos=sidebarParent.children().indexOf((group.sidebarTreeElement));group.sidebarTreeElement.removeChild(groupElements[0]);this.insertChild(groupElements[0],pos);groupElements[0].setSmall(false);groupElements[0].setMainTitle(profile.title);this.removeChild(group.sidebarTreeElement);}
if(groupElements.length!==0){sidebarParent=group.sidebarTreeElement;}}
sidebarParent.removeChild(profileTreeElement);profileTreeElement.dispose();if(this.childCount()){return false;}
this.hidden=true;return true;}
sidebarElementForProfile(profile){const index=this._sidebarElementIndex(profile);return index===-1?null:this._profileTreeElements[index];}
_sidebarElementIndex(profile){const elements=this._profileTreeElements;for(let i=0;i<elements.length;i++){if(elements[i].profile===profile){return i;}}
return-1;}
onattach(){this.listItemElement.classList.add('profiles-tree-section');}};Profiler.ProfileTypeSidebarSection.ProfileGroup=class{constructor(){this.profileSidebarTreeElements=[];this.sidebarTreeElement=null;}};Profiler.ProfileSidebarTreeElement=class extends UI.TreeElement{constructor(dataDisplayDelegate,profile,className){super('',false);this._iconElement=createElementWithClass('div','icon');this._titlesElement=createElementWithClass('div','titles no-subtitle');this._titleContainer=this._titlesElement.createChild('span','title-container');this.titleElement=this._titleContainer.createChild('span','title');this._subtitleElement=this._titlesElement.createChild('span','subtitle');this.titleElement.textContent=profile.title;this._className=className;this._small=false;this._dataDisplayDelegate=dataDisplayDelegate;this.profile=profile;profile.addEventListener(Profiler.ProfileHeader.Events.UpdateStatus,this._updateStatus,this);if(profile.canSaveToFile()){this._createSaveLink();}else{profile.addEventListener(Profiler.ProfileHeader.Events.ProfileReceived,this._onProfileReceived,this);}}
_createSaveLink(){this._saveLinkElement=this._titleContainer.createChild('span','save-link');this._saveLinkElement.textContent=Common.UIString('Save');this._saveLinkElement.addEventListener('click',this._saveProfile.bind(this),false);}
_onProfileReceived(event){this._createSaveLink();}
_updateStatus(event){const statusUpdate=event.data;if(statusUpdate.subtitle!==null){this._subtitleElement.textContent=statusUpdate.subtitle||'';this._titlesElement.classList.toggle('no-subtitle',!statusUpdate.subtitle);}
if(typeof statusUpdate.wait==='boolean'&&this.listItemElement){this.listItemElement.classList.toggle('wait',statusUpdate.wait);}}
ondblclick(event){if(!this._editing){this._startEditing((event.target));}
return false;}
_startEditing(eventTarget){const container=eventTarget.enclosingNodeOrSelfWithClass('title');if(!container){return;}
const config=new UI.InplaceEditor.Config(this._editingCommitted.bind(this),this._editingCancelled.bind(this));this._editing=UI.InplaceEditor.startEditing(container,config);}
_editingCommitted(container,newTitle){delete this._editing;this.profile.setTitle(newTitle);}
_editingCancelled(){delete this._editing;}
dispose(){this.profile.removeEventListener(Profiler.ProfileHeader.Events.UpdateStatus,this._updateStatus,this);this.profile.removeEventListener(Profiler.ProfileHeader.Events.ProfileReceived,this._onProfileReceived,this);}
onselect(){this._dataDisplayDelegate.showProfile(this.profile);return true;}
ondelete(){this.profile.profileType().removeProfile(this.profile);return true;}
onattach(){if(this._className){this.listItemElement.classList.add(this._className);}
if(this._small){this.listItemElement.classList.add('small');}
this.listItemElement.appendChildren(this._iconElement,this._titlesElement);this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);UI.ARIAUtils.setDescription(this.listItemElement,ls`${this.profile.profileType().name}`);}
_handleContextMenuEvent(event){const profile=this.profile;const contextMenu=new UI.ContextMenu(event);contextMenu.headerSection().appendItem(Common.UIString('Load\u2026'),Profiler.ProfilesPanel._fileSelectorElement.click.bind(Profiler.ProfilesPanel._fileSelectorElement));if(profile.canSaveToFile()){contextMenu.saveSection().appendItem(Common.UIString('Save\u2026'),profile.saveToFile.bind(profile));}
contextMenu.footerSection().appendItem(Common.UIString('Delete'),this.ondelete.bind(this));contextMenu.show();}
_saveProfile(event){this.profile.saveToFile();}
setSmall(small){this._small=small;if(this.listItemElement){this.listItemElement.classList.toggle('small',this._small);}}
setMainTitle(title){this.titleElement.textContent=title;}};Profiler.ProfileGroupSidebarTreeElement=class extends UI.TreeElement{constructor(dataDisplayDelegate,title){super('',true);this.selectable=false;this._dataDisplayDelegate=dataDisplayDelegate;this._title=title;this.expand();this.toggleOnClick=true;}
onselect(){const hasChildren=this.childCount()>0;if(hasChildren){this._dataDisplayDelegate.showProfile(this.lastChild().profile);}
return hasChildren;}
onattach(){this.listItemElement.classList.add('profile-group-sidebar-tree-item');this.listItemElement.createChild('div','icon');this.listItemElement.createChild('div','titles no-subtitle').createChild('span','title-container').createChild('span','title').textContent=this._title;}};Profiler.ProfilesSidebarTreeElement=class extends UI.TreeElement{constructor(panel){super('',false);this.selectable=true;this._panel=panel;}
onselect(){this._panel._showLauncherView();return true;}
onattach(){this.listItemElement.classList.add('profile-launcher-view-tree-item');this.listItemElement.createChild('div','icon');this.listItemElement.createChild('div','titles no-subtitle').createChild('span','title-container').createChild('span','title').textContent=Common.UIString('Profiles');}};Profiler.JSProfilerPanel=class extends Profiler.ProfilesPanel{constructor(){const registry=Profiler.ProfileTypeRegistry.instance;super('js_profiler',[registry.cpuProfileType],'profiler.js-toggle-recording');}
wasShown(){UI.context.setFlavor(Profiler.JSProfilerPanel,this);}
willHide(){UI.context.setFlavor(Profiler.JSProfilerPanel,null);}
handleAction(context,actionId){const panel=UI.context.flavor(Profiler.JSProfilerPanel);console.assert(panel&&panel instanceof Profiler.JSProfilerPanel);panel.toggleRecord();return true;}};;Profiler.ProfileView=class extends UI.SimpleView{constructor(){super(Common.UIString('Profile'));this._profile=null;this._searchableView=new UI.SearchableView(this);this._searchableView.setPlaceholder(Common.UIString('Find by cost (>50ms), name or file'));this._searchableView.show(this.element);const columns=([]);columns.push({id:'self',title:this.columnHeader('self'),width:'120px',fixedWidth:true,sortable:true,sort:DataGrid.DataGrid.Order.Descending});columns.push({id:'total',title:this.columnHeader('total'),width:'120px',fixedWidth:true,sortable:true});columns.push({id:'function',title:Common.UIString('Function'),disclosure:true,sortable:true});this.dataGrid=new DataGrid.DataGrid(columns);this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortProfile,this);this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._nodeSelected.bind(this,true));this.dataGrid.addEventListener(DataGrid.DataGrid.Events.DeselectedNode,this._nodeSelected.bind(this,false));this.dataGrid.setRowContextMenuCallback(this._populateContextMenu.bind(this));this.viewSelectComboBox=new UI.ToolbarComboBox(this._changeView.bind(this),ls`Profile view mode`);this.focusButton=new UI.ToolbarButton(Common.UIString('Focus selected function'),'largeicon-visibility');this.focusButton.setEnabled(false);this.focusButton.addEventListener(UI.ToolbarButton.Events.Click,this._focusClicked,this);this.excludeButton=new UI.ToolbarButton(Common.UIString('Exclude selected function'),'largeicon-delete');this.excludeButton.setEnabled(false);this.excludeButton.addEventListener(UI.ToolbarButton.Events.Click,this._excludeClicked,this);this.resetButton=new UI.ToolbarButton(Common.UIString('Restore all functions'),'largeicon-refresh');this.resetButton.setEnabled(false);this.resetButton.addEventListener(UI.ToolbarButton.Events.Click,this._resetClicked,this);this._linkifier=new Components.Linkifier(Profiler.ProfileView._maxLinkLength);}
static buildPopoverTable(entryInfo){const table=createElement('table');for(const entry of entryInfo){const row=table.createChild('tr');row.createChild('td').textContent=entry.title;row.createChild('td').textContent=entry.value;}
return table;}
setProfile(profile){this._profile=profile;this._bottomUpProfileDataGridTree=null;this._topDownProfileDataGridTree=null;this._changeView();this.refresh();}
profile(){return this._profile;}
initialize(nodeFormatter,viewTypes){this._nodeFormatter=nodeFormatter;this._viewType=Common.settings.createSetting('profileView',Profiler.ProfileView.ViewTypes.Heavy);viewTypes=viewTypes||[Profiler.ProfileView.ViewTypes.Flame,Profiler.ProfileView.ViewTypes.Heavy,Profiler.ProfileView.ViewTypes.Tree];const optionNames=new Map([[Profiler.ProfileView.ViewTypes.Flame,ls`Chart`],[Profiler.ProfileView.ViewTypes.Heavy,ls`Heavy (Bottom Up)`],[Profiler.ProfileView.ViewTypes.Tree,ls`Tree (Top Down)`],[Profiler.ProfileView.ViewTypes.Text,ls`Text (Top Down)`],]);const options=new Map(viewTypes.map(type=>[type,this.viewSelectComboBox.createOption(optionNames.get(type),type)]));const optionName=this._viewType.get()||viewTypes[0];const option=options.get(optionName)||options.get(viewTypes[0]);this.viewSelectComboBox.select(option);this._changeView();if(this._flameChart){this._flameChart.update();}}
focus(){if(this._flameChart){this._flameChart.focus();}else{super.focus();}}
columnHeader(columnId){throw'Not implemented';}
selectRange(timeLeft,timeRight){if(!this._flameChart){return;}
this._flameChart.selectRange(timeLeft,timeRight);}
syncToolbarItems(){return[this.viewSelectComboBox,this.focusButton,this.excludeButton,this.resetButton];}
_getBottomUpProfileDataGridTree(){if(!this._bottomUpProfileDataGridTree){this._bottomUpProfileDataGridTree=new Profiler.BottomUpProfileDataGridTree(this._nodeFormatter,this._searchableView,this._profile.root,this.adjustedTotal);}
return this._bottomUpProfileDataGridTree;}
_getTopDownProfileDataGridTree(){if(!this._topDownProfileDataGridTree){this._topDownProfileDataGridTree=new Profiler.TopDownProfileDataGridTree(this._nodeFormatter,this._searchableView,this._profile.root,this.adjustedTotal);}
return this._topDownProfileDataGridTree;}
_populateContextMenu(contextMenu,gridNode){const node=(gridNode);if(node.linkElement&&!contextMenu.containsTarget(node.linkElement)){contextMenu.appendApplicableItems(node.linkElement);}}
willHide(){this._currentSearchResultIndex=-1;}
refresh(){if(!this.profileDataGridTree){return;}
const selectedProfileNode=this.dataGrid.selectedNode?this.dataGrid.selectedNode.profileNode:null;this.dataGrid.rootNode().removeChildren();const children=this.profileDataGridTree.children;const count=children.length;for(let index=0;index<count;++index){this.dataGrid.rootNode().appendChild(children[index]);}
if(selectedProfileNode){selectedProfileNode.selected=true;}}
refreshVisibleData(){let child=this.dataGrid.rootNode().children[0];while(child){child.refresh();child=child.traverseNextNode(false,null,true);}}
searchableView(){return this._searchableView;}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return false;}
searchCanceled(){this._searchableElement.searchCanceled();}
performSearch(searchConfig,shouldJump,jumpBackwards){this._searchableElement.performSearch(searchConfig,shouldJump,jumpBackwards);}
jumpToNextSearchResult(){this._searchableElement.jumpToNextSearchResult();}
jumpToPreviousSearchResult(){this._searchableElement.jumpToPreviousSearchResult();}
linkifier(){return this._linkifier;}
_ensureTextViewCreated(){if(this._textView){return;}
this._textView=new UI.SimpleView(ls`Call tree`);this._textView.registerRequiredCSS('profiler/profilesPanel.css');this.populateTextView(this._textView);}
populateTextView(view){}
createFlameChartDataProvider(){throw'Not implemented';}
_ensureFlameChartCreated(){if(this._flameChart){return;}
this._dataProvider=this.createFlameChartDataProvider();this._flameChart=new Profiler.CPUProfileFlameChart(this._searchableView,this._dataProvider);this._flameChart.addEventListener(PerfUI.FlameChart.Events.EntryInvoked,this._onEntryInvoked.bind(this));}
_onEntryInvoked(event){const entryIndex=event.data;const node=this._dataProvider._entryNodes[entryIndex];const debuggerModel=this._profileHeader._debuggerModel;if(!node||!node.scriptId||!debuggerModel){return;}
const script=debuggerModel.scriptForId(node.scriptId);if(!script){return;}
const location=(debuggerModel.createRawLocation(script,node.lineNumber,node.columnNumber));Common.Revealer.reveal(Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(location));}
_changeView(){if(!this._profile){return;}
this._searchableView.closeSearch();if(this._visibleView){this._visibleView.detach();}
this._viewType.set(this.viewSelectComboBox.selectedOption().value);switch(this._viewType.get()){case Profiler.ProfileView.ViewTypes.Flame:this._ensureFlameChartCreated();this._visibleView=this._flameChart;this._searchableElement=this._flameChart;break;case Profiler.ProfileView.ViewTypes.Tree:this.profileDataGridTree=this._getTopDownProfileDataGridTree();this._sortProfile();this._visibleView=this.dataGrid.asWidget();this._searchableElement=this.profileDataGridTree;break;case Profiler.ProfileView.ViewTypes.Heavy:this.profileDataGridTree=this._getBottomUpProfileDataGridTree();this._sortProfile();this._visibleView=this.dataGrid.asWidget();this._searchableElement=this.profileDataGridTree;break;case Profiler.ProfileView.ViewTypes.Text:this._ensureTextViewCreated();this._visibleView=this._textView;this._searchableElement=this._textView;break;}
const isFlame=this._viewType.get()===Profiler.ProfileView.ViewTypes.Flame;this.focusButton.setVisible(!isFlame);this.excludeButton.setVisible(!isFlame);this.resetButton.setVisible(!isFlame);this._visibleView.show(this._searchableView.element);}
_nodeSelected(selected){this.focusButton.setEnabled(selected);this.excludeButton.setEnabled(selected);}
_focusClicked(event){if(!this.dataGrid.selectedNode){return;}
this.resetButton.setEnabled(true);this.profileDataGridTree.focus(this.dataGrid.selectedNode);this.refresh();this.refreshVisibleData();Host.userMetrics.actionTaken(Host.UserMetrics.Action.CpuProfileNodeFocused);}
_excludeClicked(event){const selectedNode=this.dataGrid.selectedNode;if(!selectedNode){return;}
selectedNode.deselect();this.resetButton.setEnabled(true);this.profileDataGridTree.exclude(selectedNode);this.refresh();this.refreshVisibleData();Host.userMetrics.actionTaken(Host.UserMetrics.Action.CpuProfileNodeExcluded);}
_resetClicked(event){this.resetButton.setEnabled(false);this.profileDataGridTree.restore();this._linkifier.reset();this.refresh();this.refreshVisibleData();}
_sortProfile(){const sortAscending=this.dataGrid.isSortOrderAscending();const sortColumnId=this.dataGrid.sortColumnId();const sortProperty=sortColumnId==='function'?'functionName':sortColumnId||'';this.profileDataGridTree.sort(Profiler.ProfileDataGridTree.propertyComparator(sortProperty,sortAscending));this.refresh();}};Profiler.ProfileView._maxLinkLength=30;Profiler.ProfileView.ViewTypes={Flame:'Flame',Tree:'Tree',Heavy:'Heavy',Text:'Text'};Profiler.WritableProfileHeader=class extends Profiler.ProfileHeader{constructor(debuggerModel,type,title){super(type,title||Common.UIString('Profile %d',type.nextProfileUid()));this._debuggerModel=debuggerModel;this._tempFile=null;}
_onChunkTransferred(reader){this.updateStatus(Common.UIString('Loading\u2026 %d%%',Number.bytesToString(this._jsonifiedProfile.length)));}
_onError(reader){this.updateStatus(Common.UIString(`File '%s' read error: %s`,reader.fileName(),reader.error().message));}
async write(text){this._jsonifiedProfile+=text;}
close(){}
dispose(){this.removeTempFile();}
createSidebarTreeElement(panel){return new Profiler.ProfileSidebarTreeElement(panel,this,'profile-sidebar-tree-item');}
canSaveToFile(){return!this.fromFile()&&this._protocolProfile;}
async saveToFile(){const fileOutputStream=new Bindings.FileOutputStream();this._fileName=this._fileName||`${this.profileType().typeName()}-${new Date().toISO8601Compact()}${this.profileType().fileExtension()}`;const accepted=await fileOutputStream.open(this._fileName);if(!accepted||!this._tempFile){return;}
const data=await this._tempFile.read();if(data){await fileOutputStream.write(data);}
fileOutputStream.close();}
async loadFromFile(file){this.updateStatus(Common.UIString('Loading\u2026'),true);const fileReader=new Bindings.ChunkedFileReader(file,10000000,this._onChunkTransferred.bind(this));this._jsonifiedProfile='';const success=await fileReader.read(this);if(!success){this._onError(fileReader);return new Error(Common.UIString('Failed to read file'));}
this.updateStatus(Common.UIString('Parsing\u2026'),true);let error=null;try{this._profile=(JSON.parse(this._jsonifiedProfile));this.setProfile(this._profile);this.updateStatus(Common.UIString('Loaded'),false);}catch(e){error=e;this.profileType().removeProfile(this);}
this._jsonifiedProfile=null;if(this.profileType().profileBeingRecorded()===this){this.profileType().setProfileBeingRecorded(null);}
return error;}
setProtocolProfile(profile){this.setProfile(profile);this._protocolProfile=profile;this._tempFile=new Bindings.TempFile();this._tempFile.write([JSON.stringify(profile)]);if(this.canSaveToFile()){this.dispatchEventToListeners(Profiler.ProfileHeader.Events.ProfileReceived);}}};;Profiler.ProfileDataGridNode=class extends DataGrid.DataGridNode{constructor(profileNode,owningTree,hasChildren){super(null,hasChildren);this._searchMatchedSelfColumn=false;this._searchMatchedTotalColumn=false;this._searchMatchedFunctionColumn=false;this.profileNode=profileNode;this.tree=owningTree;this.childrenByCallUID=new Map();this.lastComparator=null;this.callUID=profileNode.callUID;this.self=profileNode.self;this.total=profileNode.total;this.functionName=UI.beautifyFunctionName(profileNode.functionName);this._deoptReason=profileNode.deoptReason||'';this.url=profileNode.url;this.linkElement=null;}
static sort(gridNodeGroups,comparator,force){for(let gridNodeGroupIndex=0;gridNodeGroupIndex<gridNodeGroups.length;++gridNodeGroupIndex){const gridNodes=gridNodeGroups[gridNodeGroupIndex];const count=gridNodes.length;for(let index=0;index<count;++index){const gridNode=gridNodes[index];if(!force&&(!gridNode.expanded||gridNode.lastComparator===comparator)){if(gridNode.children.length){gridNode.shouldRefreshChildren=true;}
continue;}
gridNode.lastComparator=comparator;const children=gridNode.children;const childCount=children.length;if(childCount){children.sort(comparator);for(let childIndex=0;childIndex<childCount;++childIndex){children[childIndex].recalculateSiblings(childIndex);}
gridNodeGroups.push(children);}}}}
static merge(container,child,shouldAbsorb){container.self+=child.self;if(!shouldAbsorb){container.total+=child.total;}
let children=container.children.slice();container.removeChildren();let count=children.length;for(let index=0;index<count;++index){if(!shouldAbsorb||children[index]!==child){container.appendChild(children[index]);}}
children=child.children.slice();count=children.length;for(let index=0;index<count;++index){const orphanedChild=children[index];const existingChild=container.childrenByCallUID.get(orphanedChild.callUID);if(existingChild){existingChild.merge((orphanedChild),false);}else{container.appendChild(orphanedChild);}}}
static populate(container){if(container._populated){return;}
container._populated=true;container.populateChildren();const currentComparator=container.tree.lastComparator;if(currentComparator){container.sort(currentComparator,true);}}
createCell(columnId){let cell;switch(columnId){case'self':cell=this._createValueCell(this.self,this.selfPercent);cell.classList.toggle('highlight',this._searchMatchedSelfColumn);break;case'total':cell=this._createValueCell(this.total,this.totalPercent);cell.classList.toggle('highlight',this._searchMatchedTotalColumn);break;case'function':cell=this.createTD(columnId);cell.classList.toggle('highlight',this._searchMatchedFunctionColumn);if(this._deoptReason){cell.classList.add('not-optimized');const warningIcon=UI.Icon.create('smallicon-warning','profile-warn-marker');warningIcon.title=Common.UIString('Not optimized: %s',this._deoptReason);cell.appendChild(warningIcon);}
cell.createTextChild(this.functionName);if(this.profileNode.scriptId==='0'){break;}
const urlElement=this.tree._formatter.linkifyNode(this);if(!urlElement){break;}
urlElement.style.maxWidth='75%';cell.appendChild(urlElement);this.linkElement=urlElement;break;default:cell=super.createCell(columnId);break;}
return cell;}
_createValueCell(value,percent){const cell=createElementWithClass('td','numeric-column');const div=cell.createChild('div','profile-multiple-values');const valueSpan=div.createChild('span');const valueText=this.tree._formatter.formatValue(value,this);valueSpan.textContent=valueText;const percentSpan=div.createChild('span','percent-column');const percentText=this.tree._formatter.formatPercent(percent,this);percentSpan.textContent=percentText;UI.ARIAUtils.markAsHidden(valueSpan);UI.ARIAUtils.markAsHidden(percentSpan);const valueAccessibleText=this.tree._formatter.formatValueAccessibleText(value,this);UI.ARIAUtils.setAccessibleName(div,ls`${valueAccessibleText}, ${percentText}`);return cell;}
sort(comparator,force){return Profiler.ProfileDataGridNode.sort([[this]],comparator,force);}
insertChild(profileDataGridNode,index){super.insertChild(profileDataGridNode,index);this.childrenByCallUID.set(profileDataGridNode.callUID,(profileDataGridNode));}
removeChild(profileDataGridNode){super.removeChild(profileDataGridNode);this.childrenByCallUID.delete(((profileDataGridNode)).callUID);}
removeChildren(){super.removeChildren();this.childrenByCallUID.clear();}
findChild(node){if(!node){return null;}
return this.childrenByCallUID.get(node.callUID);}
get selfPercent(){return this.self/this.tree.total*100.0;}
get totalPercent(){return this.total/this.tree.total*100.0;}
populate(){Profiler.ProfileDataGridNode.populate(this);}
populateChildren(){}
save(){if(this._savedChildren){return;}
this._savedSelf=this.self;this._savedTotal=this.total;this._savedChildren=this.children.slice();}
restore(){if(!this._savedChildren){return;}
this.self=this._savedSelf;this.total=this._savedTotal;this.removeChildren();const children=this._savedChildren;const count=children.length;for(let index=0;index<count;++index){children[index].restore();this.appendChild(children[index]);}}
merge(child,shouldAbsorb){Profiler.ProfileDataGridNode.merge(this,child,shouldAbsorb);}};Profiler.ProfileDataGridTree=class{constructor(formatter,searchableView,total){this.tree=this;this.children=[];this._formatter=formatter;this._searchableView=searchableView;this.total=total;this.lastComparator=null;this.childrenByCallUID=new Map();this.deepSearch=true;}
static propertyComparator(property,isAscending){let comparator=Profiler.ProfileDataGridTree.propertyComparators[(isAscending?1:0)][property];if(!comparator){if(isAscending){comparator=function(lhs,rhs){if(lhs[property]<rhs[property]){return-1;}
if(lhs[property]>rhs[property]){return 1;}
return 0;};}else{comparator=function(lhs,rhs){if(lhs[property]>rhs[property]){return-1;}
if(lhs[property]<rhs[property]){return 1;}
return 0;};}
Profiler.ProfileDataGridTree.propertyComparators[(isAscending?1:0)][property]=comparator;}
return comparator;}
get expanded(){return true;}
appendChild(child){this.insertChild(child,this.children.length);}
insertChild(child,index){this.children.splice(index,0,child);this.childrenByCallUID.set(child.callUID,child);}
removeChildren(){this.children=[];this.childrenByCallUID.clear();}
populateChildren(){}
findChild(node){if(!node){return null;}
return this.childrenByCallUID.get(node.callUID);}
sort(comparator,force){return Profiler.ProfileDataGridNode.sort([[this]],comparator,force);}
save(){if(this._savedChildren){return;}
this._savedTotal=this.total;this._savedChildren=this.children.slice();}
restore(){if(!this._savedChildren){return;}
this.children=this._savedChildren;this.total=this._savedTotal;const children=this.children;const count=children.length;for(let index=0;index<count;++index){children[index].restore();}
this._savedChildren=null;}
_matchFunction(searchConfig){const query=searchConfig.query.trim();if(!query.length){return null;}
const greaterThan=(query.startsWith('>'));const lessThan=(query.startsWith('<'));let equalTo=(query.startsWith('=')||((greaterThan||lessThan)&&query.indexOf('=')===1));const percentUnits=(query.endsWith('%'));const millisecondsUnits=(query.length>2&&query.endsWith('ms'));const secondsUnits=(!millisecondsUnits&&query.endsWith('s'));let queryNumber=parseFloat(query);if(greaterThan||lessThan||equalTo){if(equalTo&&(greaterThan||lessThan)){queryNumber=parseFloat(query.substring(2));}else{queryNumber=parseFloat(query.substring(1));}}
const queryNumberMilliseconds=(secondsUnits?(queryNumber*1000):queryNumber);if(!isNaN(queryNumber)&&!(greaterThan||lessThan)){equalTo=true;}
const matcher=createPlainTextSearchRegex(query,'i');function matchesQuery(profileDataGridNode){profileDataGridNode._searchMatchedSelfColumn=false;profileDataGridNode._searchMatchedTotalColumn=false;profileDataGridNode._searchMatchedFunctionColumn=false;if(percentUnits){if(lessThan){if(profileDataGridNode.selfPercent<queryNumber){profileDataGridNode._searchMatchedSelfColumn=true;}
if(profileDataGridNode.totalPercent<queryNumber){profileDataGridNode._searchMatchedTotalColumn=true;}}else if(greaterThan){if(profileDataGridNode.selfPercent>queryNumber){profileDataGridNode._searchMatchedSelfColumn=true;}
if(profileDataGridNode.totalPercent>queryNumber){profileDataGridNode._searchMatchedTotalColumn=true;}}
if(equalTo){if(profileDataGridNode.selfPercent===queryNumber){profileDataGridNode._searchMatchedSelfColumn=true;}
if(profileDataGridNode.totalPercent===queryNumber){profileDataGridNode._searchMatchedTotalColumn=true;}}}else if(millisecondsUnits||secondsUnits){if(lessThan){if(profileDataGridNode.self<queryNumberMilliseconds){profileDataGridNode._searchMatchedSelfColumn=true;}
if(profileDataGridNode.total<queryNumberMilliseconds){profileDataGridNode._searchMatchedTotalColumn=true;}}else if(greaterThan){if(profileDataGridNode.self>queryNumberMilliseconds){profileDataGridNode._searchMatchedSelfColumn=true;}
if(profileDataGridNode.total>queryNumberMilliseconds){profileDataGridNode._searchMatchedTotalColumn=true;}}
if(equalTo){if(profileDataGridNode.self===queryNumberMilliseconds){profileDataGridNode._searchMatchedSelfColumn=true;}
if(profileDataGridNode.total===queryNumberMilliseconds){profileDataGridNode._searchMatchedTotalColumn=true;}}}
if(profileDataGridNode.functionName.match(matcher)||(profileDataGridNode.url&&profileDataGridNode.url.match(matcher))){profileDataGridNode._searchMatchedFunctionColumn=true;}
if(profileDataGridNode._searchMatchedSelfColumn||profileDataGridNode._searchMatchedTotalColumn||profileDataGridNode._searchMatchedFunctionColumn){profileDataGridNode.refresh();return true;}
return false;}
return matchesQuery;}
performSearch(searchConfig,shouldJump,jumpBackwards){this.searchCanceled();const matchesQuery=this._matchFunction(searchConfig);if(!matchesQuery){return;}
this._searchResults=[];const deepSearch=this.deepSearch;for(let current=this.children[0];current;current=current.traverseNextNode(!deepSearch,null,!deepSearch)){if(matchesQuery(current)){this._searchResults.push({profileNode:current});}}
this._searchResultIndex=jumpBackwards?0:this._searchResults.length-1;this._searchableView.updateSearchMatchesCount(this._searchResults.length);this._searchableView.updateCurrentMatchIndex(this._searchResultIndex);}
searchCanceled(){if(this._searchResults){for(let i=0;i<this._searchResults.length;++i){const profileNode=this._searchResults[i].profileNode;profileNode._searchMatchedSelfColumn=false;profileNode._searchMatchedTotalColumn=false;profileNode._searchMatchedFunctionColumn=false;profileNode.refresh();}}
this._searchResults=[];this._searchResultIndex=-1;}
jumpToNextSearchResult(){if(!this._searchResults||!this._searchResults.length){return;}
this._searchResultIndex=(this._searchResultIndex+1)%this._searchResults.length;this._jumpToSearchResult(this._searchResultIndex);}
jumpToPreviousSearchResult(){if(!this._searchResults||!this._searchResults.length){return;}
this._searchResultIndex=(this._searchResultIndex-1+this._searchResults.length)%this._searchResults.length;this._jumpToSearchResult(this._searchResultIndex);}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return false;}
_jumpToSearchResult(index){const searchResult=this._searchResults[index];if(!searchResult){return;}
const profileNode=searchResult.profileNode;profileNode.revealAndSelect();this._searchableView.updateCurrentMatchIndex(index);}};Profiler.ProfileDataGridTree.propertyComparators=[{},{}];Profiler.ProfileDataGridNode.Formatter=function(){};Profiler.ProfileDataGridNode.Formatter.prototype={formatValue(value,node){},formatValueAccessibleText(value){},formatPercent(value,node){},linkifyNode(node){}};;Profiler.BottomUpProfileDataGridNode=class extends Profiler.ProfileDataGridNode{constructor(profileNode,owningTree){super(profileNode,owningTree,!!profileNode.parent&&!!profileNode.parent.parent);this._remainingNodeInfos=[];}
static _sharedPopulate(container){const remainingNodeInfos=container._remainingNodeInfos;const count=remainingNodeInfos.length;for(let index=0;index<count;++index){const nodeInfo=remainingNodeInfos[index];const ancestor=nodeInfo.ancestor;const focusNode=nodeInfo.focusNode;let child=container.findChild(ancestor);if(child){const totalAccountedFor=nodeInfo.totalAccountedFor;child.self+=focusNode.self;if(!totalAccountedFor){child.total+=focusNode.total;}}else{child=new Profiler.BottomUpProfileDataGridNode(ancestor,(container.tree));if(ancestor!==focusNode){child.self=focusNode.self;child.total=focusNode.total;}
container.appendChild(child);}
const parent=ancestor.parent;if(parent&&parent.parent){nodeInfo.ancestor=parent;child._remainingNodeInfos.push(nodeInfo);}}
delete container._remainingNodeInfos;}
_takePropertiesFromProfileDataGridNode(profileDataGridNode){this.save();this.self=profileDataGridNode.self;this.total=profileDataGridNode.total;}
_keepOnlyChild(child){this.save();this.removeChildren();this.appendChild(child);}
_exclude(aCallUID){if(this._remainingNodeInfos){this.populate();}
this.save();const children=this.children;let index=this.children.length;while(index--){children[index]._exclude(aCallUID);}
const child=this.childrenByCallUID.get(aCallUID);if(child){this.merge(child,true);}}
restore(){super.restore();if(!this.children.length){this.setHasChildren(this._willHaveChildren(this.profileNode));}}
merge(child,shouldAbsorb){this.self-=child.self;super.merge(child,shouldAbsorb);}
populateChildren(){Profiler.BottomUpProfileDataGridNode._sharedPopulate(this);}
_willHaveChildren(profileNode){return!!(profileNode.parent&&profileNode.parent.parent);}};Profiler.BottomUpProfileDataGridTree=class extends Profiler.ProfileDataGridTree{constructor(formatter,searchableView,rootProfileNode,total){super(formatter,searchableView,total);this.deepSearch=false;let profileNodeUIDs=0;const profileNodeGroups=[[],[rootProfileNode]];const visitedProfileNodesForCallUID=new Map();this._remainingNodeInfos=[];for(let profileNodeGroupIndex=0;profileNodeGroupIndex<profileNodeGroups.length;++profileNodeGroupIndex){const parentProfileNodes=profileNodeGroups[profileNodeGroupIndex];const profileNodes=profileNodeGroups[++profileNodeGroupIndex];const count=profileNodes.length;for(let index=0;index<count;++index){const profileNode=profileNodes[index];if(!profileNode.UID){profileNode.UID=++profileNodeUIDs;}
if(profileNode.parent){let visitedNodes=visitedProfileNodesForCallUID.get(profileNode.callUID);let totalAccountedFor=false;if(!visitedNodes){visitedNodes=new Set();visitedProfileNodesForCallUID.set(profileNode.callUID,visitedNodes);}else{const parentCount=parentProfileNodes.length;for(let parentIndex=0;parentIndex<parentCount;++parentIndex){if(visitedNodes.has(parentProfileNodes[parentIndex].UID)){totalAccountedFor=true;break;}}}
visitedNodes.add(profileNode.UID);this._remainingNodeInfos.push({ancestor:profileNode,focusNode:profileNode,totalAccountedFor:totalAccountedFor});}
const children=profileNode.children;if(children.length){profileNodeGroups.push(parentProfileNodes.concat([profileNode]));profileNodeGroups.push(children);}}}
Profiler.ProfileDataGridNode.populate(this);return this;}
focus(profileDataGridNode){if(!profileDataGridNode){return;}
this.save();let currentNode=profileDataGridNode;let focusNode=profileDataGridNode;while(currentNode.parent&&(currentNode instanceof Profiler.ProfileDataGridNode)){currentNode._takePropertiesFromProfileDataGridNode(profileDataGridNode);focusNode=currentNode;currentNode=currentNode.parent;if(currentNode instanceof Profiler.ProfileDataGridNode){currentNode._keepOnlyChild(focusNode);}}
this.children=[focusNode];this.total=profileDataGridNode.total;}
exclude(profileDataGridNode){if(!profileDataGridNode){return;}
this.save();const excludedCallUID=profileDataGridNode.callUID;const excludedTopLevelChild=this.childrenByCallUID.get(excludedCallUID);if(excludedTopLevelChild){this.children.remove(excludedTopLevelChild);}
const children=this.children;const count=children.length;for(let index=0;index<count;++index){children[index]._exclude(excludedCallUID);}
if(this.lastComparator){this.sort(this.lastComparator,true);}}
populateChildren(){Profiler.BottomUpProfileDataGridNode._sharedPopulate(this);}};;Profiler.TopDownProfileDataGridNode=class extends Profiler.ProfileDataGridNode{constructor(profileNode,owningTree){const hasChildren=!!(profileNode.children&&profileNode.children.length);super(profileNode,owningTree,hasChildren);this._remainingChildren=profileNode.children;}
static _sharedPopulate(container){const children=container._remainingChildren;const childrenLength=children.length;for(let i=0;i<childrenLength;++i){container.appendChild(new Profiler.TopDownProfileDataGridNode(children[i],(container.tree)));}
container._remainingChildren=null;}
static _excludeRecursively(container,aCallUID){if(container._remainingChildren){container.populate();}
container.save();const children=container.children;let index=container.children.length;while(index--){Profiler.TopDownProfileDataGridNode._excludeRecursively(children[index],aCallUID);}
const child=container.childrenByCallUID.get(aCallUID);if(child){Profiler.ProfileDataGridNode.merge(container,child,true);}}
populateChildren(){Profiler.TopDownProfileDataGridNode._sharedPopulate(this);}};Profiler.TopDownProfileDataGridTree=class extends Profiler.ProfileDataGridTree{constructor(formatter,searchableView,rootProfileNode,total){super(formatter,searchableView,total);this._remainingChildren=rootProfileNode.children;Profiler.ProfileDataGridNode.populate(this);}
focus(profileDataGridNode){if(!profileDataGridNode){return;}
this.save();profileDataGridNode.savePosition();this.children=[profileDataGridNode];this.total=profileDataGridNode.total;}
exclude(profileDataGridNode){if(!profileDataGridNode){return;}
this.save();Profiler.TopDownProfileDataGridNode._excludeRecursively(this,profileDataGridNode.callUID);if(this.lastComparator){this.sort(this.lastComparator,true);}}
restore(){if(!this._savedChildren){return;}
this.children[0].restorePosition();super.restore();}
populateChildren(){Profiler.TopDownProfileDataGridNode._sharedPopulate(this);}};;Profiler.ProfileFlameChartDataProvider=class{constructor(){PerfUI.FlameChartDataProvider.call(this);this._colorGenerator=Profiler.ProfileFlameChartDataProvider.colorGenerator();}
static colorGenerator(){if(!Profiler.ProfileFlameChartDataProvider._colorGenerator){const colorGenerator=new Common.Color.Generator({min:30,max:330},{min:50,max:80,count:5},{min:80,max:90,count:3});colorGenerator.setColorForID('(idle)','hsl(0, 0%, 94%)');colorGenerator.setColorForID('(program)','hsl(0, 0%, 80%)');colorGenerator.setColorForID('(garbage collector)','hsl(0, 0%, 80%)');Profiler.ProfileFlameChartDataProvider._colorGenerator=colorGenerator;}
return Profiler.ProfileFlameChartDataProvider._colorGenerator;}
minimumBoundary(){return this._cpuProfile.profileStartTime;}
totalTime(){return this._cpuProfile.profileHead.total;}
formatValue(value,precision){return Number.preciseMillisToString(value,precision);}
maxStackDepth(){return this._maxStackDepth;}
timelineData(){return this._timelineData||this._calculateTimelineData();}
_calculateTimelineData(){throw'Not implemented.';}
prepareHighlightedEntryInfo(entryIndex){throw'Not implemented.';}
canJumpToEntry(entryIndex){return this._entryNodes[entryIndex].scriptId!=='0';}
entryTitle(entryIndex){const node=this._entryNodes[entryIndex];return UI.beautifyFunctionName(node.functionName);}
entryFont(entryIndex){if(!this._font){this._font='11px '+Host.fontFamily();this._boldFont='bold '+this._font;}
const node=this._entryNodes[entryIndex];return node.deoptReason?this._boldFont:this._font;}
entryColor(entryIndex){const node=this._entryNodes[entryIndex];return this._colorGenerator.colorForID(node.url||(node.scriptId!=='0'?node.scriptId:node.functionName));}
decorateEntry(entryIndex,context,text,barX,barY,barWidth,barHeight){return false;}
forceDecoration(entryIndex){return false;}
textColor(entryIndex){return'#333';}};Profiler.CPUProfileFlameChart=class extends UI.VBox{constructor(searchableView,dataProvider){super();this.element.id='cpu-flame-chart';this._searchableView=searchableView;this._overviewPane=new Profiler.CPUProfileFlameChart.OverviewPane(dataProvider);this._overviewPane.show(this.element);this._mainPane=new PerfUI.FlameChart(dataProvider,this._overviewPane);this._mainPane.setBarHeight(15);this._mainPane.setTextBaseline(4);this._mainPane.setTextPadding(2);this._mainPane.show(this.element);this._mainPane.addEventListener(PerfUI.FlameChart.Events.EntrySelected,this._onEntrySelected,this);this._mainPane.addEventListener(PerfUI.FlameChart.Events.EntryInvoked,this._onEntryInvoked,this);this._entrySelected=false;this._mainPane.addEventListener(PerfUI.FlameChart.Events.CanvasFocused,this._onEntrySelected,this);this._overviewPane.addEventListener(PerfUI.OverviewGrid.Events.WindowChanged,this._onWindowChanged,this);this._dataProvider=dataProvider;this._searchResults=[];}
focus(){this._mainPane.focus();}
_onWindowChanged(event){const windowLeft=event.data.windowTimeLeft;const windowRight=event.data.windowTimeRight;this._mainPane.setWindowTimes(windowLeft,windowRight,true);}
selectRange(timeLeft,timeRight){this._overviewPane._selectRange(timeLeft,timeRight);}
_onEntrySelected(event){if(event.data){const eventIndex=Number(event.data);this._mainPane.setSelectedEntry(eventIndex);if(eventIndex===-1){this._entrySelected=false;}else{this._entrySelected=true;}}else if(!this._entrySelected){this._mainPane.setSelectedEntry(0);this._entrySelected=true;}}
_onEntryInvoked(event){this._onEntrySelected(event);this.dispatchEventToListeners(PerfUI.FlameChart.Events.EntryInvoked,event.data);}
update(){this._overviewPane.update();this._mainPane.update();}
performSearch(searchConfig,shouldJump,jumpBackwards){const matcher=createPlainTextSearchRegex(searchConfig.query,searchConfig.caseSensitive?'':'i');const selectedEntryIndex=this._searchResultIndex!==-1?this._searchResults[this._searchResultIndex]:-1;this._searchResults=[];const entriesCount=this._dataProvider._entryNodes.length;for(let index=0;index<entriesCount;++index){if(this._dataProvider.entryTitle(index).match(matcher)){this._searchResults.push(index);}}
if(this._searchResults.length){this._searchResultIndex=this._searchResults.indexOf(selectedEntryIndex);if(this._searchResultIndex===-1){this._searchResultIndex=jumpBackwards?this._searchResults.length-1:0;}
this._mainPane.setSelectedEntry(this._searchResults[this._searchResultIndex]);}else{this.searchCanceled();}
this._searchableView.updateSearchMatchesCount(this._searchResults.length);this._searchableView.updateCurrentMatchIndex(this._searchResultIndex);}
searchCanceled(){this._mainPane.setSelectedEntry(-1);this._searchResults=[];this._searchResultIndex=-1;}
jumpToNextSearchResult(){this._searchResultIndex=(this._searchResultIndex+1)%this._searchResults.length;this._mainPane.setSelectedEntry(this._searchResults[this._searchResultIndex]);this._searchableView.updateCurrentMatchIndex(this._searchResultIndex);}
jumpToPreviousSearchResult(){this._searchResultIndex=(this._searchResultIndex-1+this._searchResults.length)%this._searchResults.length;this._mainPane.setSelectedEntry(this._searchResults[this._searchResultIndex]);this._searchableView.updateCurrentMatchIndex(this._searchResultIndex);}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return false;}};Profiler.CPUProfileFlameChart.OverviewCalculator=class{constructor(dataProvider){this._dataProvider=dataProvider;}
_updateBoundaries(overviewPane){this._minimumBoundaries=overviewPane._dataProvider.minimumBoundary();const totalTime=overviewPane._dataProvider.totalTime();this._maximumBoundaries=this._minimumBoundaries+totalTime;this._xScaleFactor=overviewPane._overviewContainer.clientWidth/totalTime;}
computePosition(time){return(time-this._minimumBoundaries)*this._xScaleFactor;}
formatValue(value,precision){return this._dataProvider.formatValue(value-this._minimumBoundaries,precision);}
maximumBoundary(){return this._maximumBoundaries;}
minimumBoundary(){return this._minimumBoundaries;}
zeroTime(){return this._minimumBoundaries;}
boundarySpan(){return this._maximumBoundaries-this._minimumBoundaries;}};Profiler.CPUProfileFlameChart.OverviewPane=class extends UI.VBox{constructor(dataProvider){super();this.element.classList.add('cpu-profile-flame-chart-overview-pane');this._overviewContainer=this.element.createChild('div','cpu-profile-flame-chart-overview-container');this._overviewCalculator=new Profiler.CPUProfileFlameChart.OverviewCalculator(dataProvider);this._overviewGrid=new PerfUI.OverviewGrid('cpu-profile-flame-chart',this._overviewCalculator);this._overviewGrid.element.classList.add('fill');this._overviewCanvas=this._overviewContainer.createChild('canvas','cpu-profile-flame-chart-overview-canvas');this._overviewContainer.appendChild(this._overviewGrid.element);this._dataProvider=dataProvider;this._overviewGrid.addEventListener(PerfUI.OverviewGrid.Events.WindowChanged,this._onWindowChanged,this);}
windowChanged(windowStartTime,windowEndTime){this._selectRange(windowStartTime,windowEndTime);}
updateRangeSelection(startTime,endTime){}
updateSelectedGroup(flameChart,group){}
_selectRange(timeLeft,timeRight){const startTime=this._dataProvider.minimumBoundary();const totalTime=this._dataProvider.totalTime();this._overviewGrid.setWindow((timeLeft-startTime)/totalTime,(timeRight-startTime)/totalTime);}
_onWindowChanged(event){const windowPosition={windowTimeLeft:event.data.rawStartValue,windowTimeRight:event.data.rawEndValue};this._windowTimeLeft=windowPosition.windowTimeLeft;this._windowTimeRight=windowPosition.windowTimeRight;this.dispatchEventToListeners(PerfUI.OverviewGrid.Events.WindowChanged,windowPosition);}
_timelineData(){return this._dataProvider.timelineData();}
onResize(){this._scheduleUpdate();}
_scheduleUpdate(){if(this._updateTimerId){return;}
this._updateTimerId=this.element.window().requestAnimationFrame(this.update.bind(this));}
update(){this._updateTimerId=0;const timelineData=this._timelineData();if(!timelineData){return;}
this._resetCanvas(this._overviewContainer.clientWidth,this._overviewContainer.clientHeight-PerfUI.FlameChart.HeaderHeight);this._overviewCalculator._updateBoundaries(this);this._overviewGrid.updateDividers(this._overviewCalculator);this._drawOverviewCanvas();}
_drawOverviewCanvas(){const canvasWidth=this._overviewCanvas.width;const canvasHeight=this._overviewCanvas.height;const drawData=this._calculateDrawData(canvasWidth);const context=this._overviewCanvas.getContext('2d');const ratio=window.devicePixelRatio;const offsetFromBottom=ratio;const lineWidth=1;const yScaleFactor=canvasHeight/(this._dataProvider.maxStackDepth()*1.1);context.lineWidth=lineWidth;context.translate(0.5,0.5);context.strokeStyle='rgba(20,0,0,0.4)';context.fillStyle='rgba(214,225,254,0.8)';context.moveTo(-lineWidth,canvasHeight+lineWidth);context.lineTo(-lineWidth,Math.round(canvasHeight-drawData[0]*yScaleFactor-offsetFromBottom));let value;for(let x=0;x<canvasWidth;++x){value=Math.round(canvasHeight-drawData[x]*yScaleFactor-offsetFromBottom);context.lineTo(x,value);}
context.lineTo(canvasWidth+lineWidth,value);context.lineTo(canvasWidth+lineWidth,canvasHeight+lineWidth);context.fill();context.stroke();context.closePath();}
_calculateDrawData(width){const dataProvider=this._dataProvider;const timelineData=this._timelineData();const entryStartTimes=timelineData.entryStartTimes;const entryTotalTimes=timelineData.entryTotalTimes;const entryLevels=timelineData.entryLevels;const length=entryStartTimes.length;const minimumBoundary=this._dataProvider.minimumBoundary();const drawData=new Uint8Array(width);const scaleFactor=width/dataProvider.totalTime();for(let entryIndex=0;entryIndex<length;++entryIndex){const start=Math.floor((entryStartTimes[entryIndex]-minimumBoundary)*scaleFactor);const finish=Math.floor((entryStartTimes[entryIndex]-minimumBoundary+entryTotalTimes[entryIndex])*scaleFactor);for(let x=start;x<=finish;++x){drawData[x]=Math.max(drawData[x],entryLevels[entryIndex]+1);}}
return drawData;}
_resetCanvas(width,height){const ratio=window.devicePixelRatio;this._overviewCanvas.width=width*ratio;this._overviewCanvas.height=height*ratio;this._overviewCanvas.style.width=width+'px';this._overviewCanvas.style.height=height+'px';}};;Profiler.CPUProfileView=class extends Profiler.ProfileView{constructor(profileHeader){super();this._profileHeader=profileHeader;this.initialize(new Profiler.CPUProfileView.NodeFormatter(this));const profile=profileHeader.profileModel();this.adjustedTotal=profile.profileHead.total;this.adjustedTotal-=profile.idleNode?profile.idleNode.total:0;this.setProfile(profile);}
wasShown(){super.wasShown();const lineLevelProfile=self.runtime.sharedInstance(PerfUI.LineLevelProfile.Performance);lineLevelProfile.reset();lineLevelProfile.appendCPUProfile(this._profileHeader.profileModel());}
columnHeader(columnId){switch(columnId){case'self':return Common.UIString('Self Time');case'total':return Common.UIString('Total Time');}
return'';}
createFlameChartDataProvider(){return new Profiler.CPUFlameChartDataProvider(this._profileHeader.profileModel(),this._profileHeader._cpuProfilerModel);}};Profiler.CPUProfileType=class extends Profiler.ProfileType{constructor(){super(Profiler.CPUProfileType.TypeId,Common.UIString('Record JavaScript CPU Profile'));this._recording=false;Profiler.CPUProfileType.instance=this;SDK.targetManager.addModelListener(SDK.CPUProfilerModel,SDK.CPUProfilerModel.Events.ConsoleProfileFinished,this._consoleProfileFinished,this);}
profileBeingRecorded(){return(super.profileBeingRecorded());}
typeName(){return'CPU';}
fileExtension(){return'.cpuprofile';}
get buttonTooltip(){return this._recording?Common.UIString('Stop CPU profiling'):Common.UIString('Start CPU profiling');}
buttonClicked(){if(this._recording){this._stopRecordingProfile();return false;}else{this._startRecordingProfile();return true;}}
get treeItemTitle(){return Common.UIString('CPU PROFILES');}
get description(){return Common.UIString('CPU profiles show where the execution time is spent in your page\'s JavaScript functions.');}
_consoleProfileFinished(event){const data=(event.data);const cpuProfile=(data.cpuProfile);const profile=new Profiler.CPUProfileHeader(data.cpuProfilerModel,this,data.title);profile.setProtocolProfile(cpuProfile);this.addProfile(profile);}
_startRecordingProfile(){const cpuProfilerModel=UI.context.flavor(SDK.CPUProfilerModel);if(this.profileBeingRecorded()||!cpuProfilerModel){return;}
const profile=new Profiler.CPUProfileHeader(cpuProfilerModel,this);this.setProfileBeingRecorded(profile);SDK.targetManager.suspendAllTargets();this.addProfile(profile);profile.updateStatus(Common.UIString('Recording\u2026'));this._recording=true;cpuProfilerModel.startRecording();Host.userMetrics.actionTaken(Host.UserMetrics.Action.ProfilesCPUProfileTaken);}
async _stopRecordingProfile(){this._recording=false;if(!this.profileBeingRecorded()||!this.profileBeingRecorded()._cpuProfilerModel){return;}
const profile=await this.profileBeingRecorded()._cpuProfilerModel.stopRecording();const recordedProfile=this.profileBeingRecorded();if(recordedProfile){console.assert(profile);recordedProfile.setProtocolProfile(profile);recordedProfile.updateStatus('');this.setProfileBeingRecorded(null);}
await SDK.targetManager.resumeAllTargets();this.dispatchEventToListeners(Profiler.ProfileType.Events.ProfileComplete,recordedProfile);}
createProfileLoadedFromFile(title){return new Profiler.CPUProfileHeader(null,this,title);}
profileBeingRecordedRemoved(){this._stopRecordingProfile();}};Profiler.CPUProfileType.TypeId='CPU';Profiler.CPUProfileHeader=class extends Profiler.WritableProfileHeader{constructor(cpuProfilerModel,type,title){super(cpuProfilerModel&&cpuProfilerModel.debuggerModel(),type,title);this._cpuProfilerModel=cpuProfilerModel;}
createView(){return new Profiler.CPUProfileView(this);}
protocolProfile(){return this._protocolProfile;}
profileModel(){return this._profileModel;}
setProfile(profile){const target=this._cpuProfilerModel&&this._cpuProfilerModel.target()||null;this._profileModel=new SDK.CPUProfileDataModel(profile,target);}};Profiler.CPUProfileView.NodeFormatter=class{constructor(profileView){this._profileView=profileView;}
formatValue(value){return Common.UIString('%.1f\xa0ms',value);}
formatValueAccessibleText(value){return this.formatValue(value);}
formatPercent(value,node){return node.profileNode===this._profileView.profile().idleNode?'':Common.UIString('%.2f\xa0%%',value);}
linkifyNode(node){const cpuProfilerModel=this._profileView._profileHeader._cpuProfilerModel;return this._profileView.linkifier().maybeLinkifyConsoleCallFrame(cpuProfilerModel?cpuProfilerModel.target():null,node.profileNode.callFrame,'profile-node-file');}};Profiler.CPUFlameChartDataProvider=class extends Profiler.ProfileFlameChartDataProvider{constructor(cpuProfile,cpuProfilerModel){super();this._cpuProfile=cpuProfile;this._cpuProfilerModel=cpuProfilerModel;}
_calculateTimelineData(){const entries=[];const stack=[];let maxDepth=5;function onOpenFrame(){stack.push(entries.length);entries.push(null);}
function onCloseFrame(depth,node,startTime,totalTime,selfTime){const index=stack.pop();entries[index]=new Profiler.CPUFlameChartDataProvider.ChartEntry(depth,totalTime,startTime,selfTime,node);maxDepth=Math.max(maxDepth,depth);}
this._cpuProfile.forEachFrame(onOpenFrame,onCloseFrame);const entryNodes=new Array(entries.length);const entryLevels=new Uint16Array(entries.length);const entryTotalTimes=new Float32Array(entries.length);const entrySelfTimes=new Float32Array(entries.length);const entryStartTimes=new Float64Array(entries.length);for(let i=0;i<entries.length;++i){const entry=entries[i];entryNodes[i]=entry.node;entryLevels[i]=entry.depth;entryTotalTimes[i]=entry.duration;entryStartTimes[i]=entry.startTime;entrySelfTimes[i]=entry.selfTime;}
this._maxStackDepth=maxDepth+1;this._timelineData=new PerfUI.FlameChart.TimelineData(entryLevels,entryTotalTimes,entryStartTimes,null);this._entryNodes=entryNodes;this._entrySelfTimes=entrySelfTimes;return this._timelineData;}
prepareHighlightedEntryInfo(entryIndex){const timelineData=this._timelineData;const node=this._entryNodes[entryIndex];if(!node){return null;}
const entryInfo=[];function pushEntryInfoRow(title,value){entryInfo.push({title:title,value:value});}
function millisecondsToString(ms){if(ms===0){return'0';}
if(ms<1000){return Common.UIString('%.1f\xa0ms',ms);}
return Number.secondsToString(ms/1000,true);}
const name=UI.beautifyFunctionName(node.functionName);pushEntryInfoRow(ls`Name`,name);const selfTime=millisecondsToString(this._entrySelfTimes[entryIndex]);const totalTime=millisecondsToString(timelineData.entryTotalTimes[entryIndex]);pushEntryInfoRow(ls`Self time`,selfTime);pushEntryInfoRow(ls`Total time`,totalTime);const linkifier=new Components.Linkifier();const link=linkifier.maybeLinkifyConsoleCallFrame(this._cpuProfilerModel&&this._cpuProfilerModel.target(),node.callFrame);if(link){pushEntryInfoRow(ls`URL`,link.textContent);}
linkifier.dispose();pushEntryInfoRow(ls`Aggregated self time`,Number.secondsToString(node.self/1000,true));pushEntryInfoRow(ls`Aggregated total time`,Number.secondsToString(node.total/1000,true));if(node.deoptReason){pushEntryInfoRow(ls`Not optimized`,node.deoptReason);}
return Profiler.ProfileView.buildPopoverTable(entryInfo);}};Profiler.CPUFlameChartDataProvider.ChartEntry=class{constructor(depth,duration,startTime,selfTime,node){this.depth=depth;this.duration=duration;this.startTime=startTime;this.selfTime=selfTime;this.node=node;}};;Profiler.HeapProfileView=class extends Profiler.ProfileView{constructor(profileHeader){super();this._profileHeader=profileHeader;this._profileType=profileHeader.profileType();const views=[Profiler.ProfileView.ViewTypes.Flame,Profiler.ProfileView.ViewTypes.Heavy,Profiler.ProfileView.ViewTypes.Tree];const isNativeProfile=this._profileType.id===Profiler.SamplingNativeHeapProfileType.TypeId||this._profileType.id===Profiler.SamplingNativeHeapSnapshotType.TypeId;if(isNativeProfile){views.push(Profiler.ProfileView.ViewTypes.Text);}
this.initialize(new Profiler.HeapProfileView.NodeFormatter(this),views);const profile=new Profiler.SamplingHeapProfileModel(profileHeader._profile||profileHeader.protocolProfile());this.adjustedTotal=profile.total;this.setProfile(profile);this._selectedSizeText=new UI.ToolbarText();if(Root.Runtime.experiments.isEnabled('samplingHeapProfilerTimeline')){this._timelineOverview=new Profiler.HeapTimelineOverview();this._timelineOverview.addEventListener(Profiler.HeapTimelineOverview.IdsRangeChanged,this._onIdsRangeChanged.bind(this));this._timelineOverview.show(this.element,this.element.firstChild);this._timelineOverview.start();this._profileType.addEventListener(Profiler.SamplingHeapProfileType.Events.StatsUpdate,this._onStatsUpdate,this);this._profileType.once(Profiler.ProfileType.Events.ProfileComplete).then(()=>{this._profileType.removeEventListener(Profiler.SamplingHeapProfileType.Events.StatsUpdate,this._onStatsUpdate,this);this._timelineOverview.stop();this._timelineOverview.updateGrid();});}}
syncToolbarItems(){return[...super.syncToolbarItems(),this._selectedSizeText];}
_onIdsRangeChanged(event){const minId=(event.data.minId);const maxId=(event.data.maxId);this._selectedSizeText.setText(ls`Selected size: ${Number.bytesToString(event.data.size)}`);this._setSelectionRange(minId,maxId);}
_setSelectionRange(minId,maxId){const profile=new Profiler.SamplingHeapProfileModel(this._profileHeader._profile||this._profileHeader.protocolProfile(),minId,maxId);this.adjustedTotal=profile.total;this.setProfile(profile);}
_onStatsUpdate(event){const profile=event.data;if(!this._totalTime){this._timestamps=[];this._sizes=[];this._max=[];this._ordinals=[];this._totalTime=30000;this._lastOrdinal=0;}
this._sizes.fill(0);this._sizes.push(0);this._timestamps.push(Date.now());this._ordinals.push(this._lastOrdinal+1);this._lastOrdinal=profile.samples.reduce((res,sample)=>Math.max(res,sample.ordinal),this._lastOrdinal);for(const sample of profile.samples){const bucket=this._ordinals.upperBound(sample.ordinal)-1;this._sizes[bucket]+=sample.size;}
this._max.push(this._sizes.peekLast());if(this._timestamps.peekLast()-this._timestamps[0]>this._totalTime){this._totalTime*=2;}
const samples=({sizes:this._sizes,max:this._max,ids:this._ordinals,timestamps:this._timestamps,totalTime:this._totalTime});this._timelineOverview.setSamples(samples);}
columnHeader(columnId){switch(columnId){case'self':return Common.UIString('Self Size (bytes)');case'total':return Common.UIString('Total Size (bytes)');}
return'';}
createFlameChartDataProvider(){return new Profiler.HeapFlameChartDataProvider((this.profile()),this._profileHeader.heapProfilerModel());}
populateTextView(view){const guides='+!:|';let text=`Sampling memory profile.\n\nDate/Time:       ${new Date()}\n`+`Report Version:  7\n`+`App Version:     ${/Chrom\S*/.exec(navigator.appVersion)[0] || 'Unknown'}\n`+`Node Weight:     1 KiB\n`+`Total Size:      ${Math.round(this.profile().root.total / 1024)} KiB\n`+`----\n\nCall graph:\n`;const sortedChildren=this.profile().root.children.sort((a,b)=>b.total-a.total);const modules=this.profile().modules.map(m=>Object.assign({address:BigInt(m.baseAddress),endAddress:BigInt(m.baseAddress)+BigInt(m.size)},m));modules.sort((m1,m2)=>m1.address>m2.address?1:m1.address<m2.address?-1:0);for(const child of sortedChildren){printTree('    ',child!==sortedChildren.peekLast(),child);}
text+='\nBinary Images:\n';for(const module of modules){const fileName=/[^/\\]*$/.exec(module.name)[0];const version='1.0';const formattedUuid=module.uuid.includes('-')?module.uuid:module.uuid.replace(/(.{8})(.{4})(.{4})(.{4})(.{12}).*/,'$1-$2-$3-$4-$5');text+=`${('0x' + module.address.toString(16)).padStart(18)} - `;text+=`${('0x' + (module.endAddress - BigInt(1)).toString(16)).padStart(18)}`;text+=`  ${fileName} (${version}) <${formattedUuid}> ${module.name}\n`;}
view.contentElement.createChild('pre','profile-text-view monospace').textContent=text;function printTree(padding,drawGuide,node){const addressText=/0x[0-9a-f]*|[0-9]*/.exec(node.functionName)[0]||'';let module;if(addressText){const address=BigInt(addressText);const pos=modules.upperBound(address,(address,module)=>address-module.address);if(pos>0&&address<modules[pos-1].endAddress){module=modules[pos-1];}}
const functionName=(addressText?node.functionName.substr(addressText.length+1):node.functionName)||'???';text+=`${padding}${Math.round(node.total / 1024)}  ${functionName}  `;if(module){const fileName=/[^/\\]*$/.exec(module.name);if(fileName){text+=`(in ${fileName})  `;}
const offset=BigInt(addressText)-module.address;text+=`load address ${module.baseAddress} + 0x${offset.toString(16)}  `;}
if(addressText){text+=`[${addressText}]`;}
text+='\n';const guideChar=drawGuide?guides[padding.length/2%guides.length]:' ';const nextPadding=padding+guideChar+' ';const sortedChildren=node.children.sort((a,b)=>b.total-a.total);for(const child of sortedChildren){printTree(nextPadding,child!==sortedChildren.peekLast(),child);}}}};Profiler.SamplingHeapProfileTypeBase=class extends Profiler.ProfileType{constructor(typeId,description){super(typeId,description);this._recording=false;}
profileBeingRecorded(){return(super.profileBeingRecorded());}
typeName(){return'Heap';}
fileExtension(){return'.heapprofile';}
get buttonTooltip(){return this._recording?ls`Stop heap profiling`:ls`Start heap profiling`;}
buttonClicked(){if(this._recording){this._stopRecordingProfile();}else{this._startRecordingProfile();}
return this._recording;}
_startRecordingProfile(){const heapProfilerModel=UI.context.flavor(SDK.HeapProfilerModel);if(this.profileBeingRecorded()||!heapProfilerModel){return;}
const profileHeader=new Profiler.SamplingHeapProfileHeader(heapProfilerModel,this);this.setProfileBeingRecorded(profileHeader);this.addProfile(profileHeader);profileHeader.updateStatus(ls`Recording\u2026`);const icon=UI.Icon.create('smallicon-warning');icon.title=ls`Heap profiler is recording`;UI.inspectorView.setPanelIcon('heap_profiler',icon);this._recording=true;this._startSampling();}
async _stopRecordingProfile(){this._recording=false;if(!this.profileBeingRecorded()||!this.profileBeingRecorded().heapProfilerModel()){return;}
this.profileBeingRecorded().updateStatus(ls`Stopping\u2026`);const profile=await this._stopSampling();const recordedProfile=this.profileBeingRecorded();if(recordedProfile){console.assert(profile);recordedProfile.setProtocolProfile(profile);recordedProfile.updateStatus('');this.setProfileBeingRecorded(null);}
UI.inspectorView.setPanelIcon('heap_profiler',null);this.dispatchEventToListeners(Profiler.ProfileType.Events.ProfileComplete,recordedProfile);}
createProfileLoadedFromFile(title){return new Profiler.SamplingHeapProfileHeader(null,this,title);}
profileBeingRecordedRemoved(){this._stopRecordingProfile();}
_startSampling(){throw'Not implemented';}
_stopSampling(){throw'Not implemented';}};Profiler.SamplingHeapProfileType=class extends Profiler.SamplingHeapProfileTypeBase{constructor(){super(Profiler.SamplingHeapProfileType.TypeId,ls`Allocation sampling`);Profiler.SamplingHeapProfileType.instance=this;this._updateTimer=null;this._updateIntervalMs=200;}
get treeItemTitle(){return ls`SAMPLING PROFILES`;}
get description(){return ls`Record memory allocations using sampling method.
              This profile type has minimal performance overhead and can be used for long running operations.
              It provides good approximation of allocations broken down by JavaScript execution stack.`;}
hasTemporaryView(){return Root.Runtime.experiments.isEnabled('samplingHeapProfilerTimeline');}
_startSampling(){this.profileBeingRecorded().heapProfilerModel().startSampling();if(Root.Runtime.experiments.isEnabled('samplingHeapProfilerTimeline')){this._updateTimer=setTimeout(this._updateStats.bind(this),this._updateIntervalMs);}}
_stopSampling(){clearTimeout(this._updateTimer);this._updateTimer=null;this.dispatchEventToListeners(Profiler.SamplingHeapProfileType.Events.RecordingStopped);return this.profileBeingRecorded().heapProfilerModel().stopSampling();}
async _updateStats(){const profile=await this.profileBeingRecorded().heapProfilerModel().getSamplingProfile();if(!this._updateTimer){return;}
this.dispatchEventToListeners(Profiler.SamplingHeapProfileType.Events.StatsUpdate,profile);this._updateTimer=setTimeout(this._updateStats.bind(this),this._updateIntervalMs);}};Profiler.SamplingHeapProfileType.TypeId='SamplingHeap';Profiler.SamplingHeapProfileType.Events={RecordingStopped:Symbol('RecordingStopped'),StatsUpdate:Symbol('StatsUpdate')};Profiler.SamplingNativeHeapProfileType=class extends Profiler.SamplingHeapProfileTypeBase{constructor(){super(Profiler.SamplingNativeHeapProfileType.TypeId,ls`Native memory allocation sampling`);Profiler.SamplingNativeHeapProfileType.instance=this;}
get treeItemTitle(){return ls`NATIVE SAMPLING PROFILES`;}
get description(){return ls`Allocation profiles show sampled native memory allocations from the renderer process.`;}
_startSampling(){this.profileBeingRecorded().heapProfilerModel().startNativeSampling();}
_stopSampling(){return this.profileBeingRecorded().heapProfilerModel().stopNativeSampling();}};Profiler.SamplingNativeHeapProfileType.TypeId='SamplingNativeHeapRecording';Profiler.SamplingNativeHeapSnapshotType=class extends Profiler.SamplingHeapProfileTypeBase{constructor(processType){super(Profiler.SamplingNativeHeapSnapshotType.TypeId,ls`Native memory allocation snapshot (${processType})`);}
isInstantProfile(){return true;}
get treeItemTitle(){return ls`NATIVE SNAPSHOTS`;}
get description(){return ls`Native memory snapshots show sampled native allocations in the renderer process since start up.
              Chrome has to be started with --memlog=all flag. Check flags at chrome://flags`;}
buttonClicked(){this._takeSnapshot();return false;}
async _takeSnapshot(){if(this.profileBeingRecorded()){return;}
const heapProfilerModel=UI.context.flavor(SDK.HeapProfilerModel);if(!heapProfilerModel){return;}
const profile=new Profiler.SamplingHeapProfileHeader(heapProfilerModel,this,ls`Snapshot ${this.nextProfileUid()}`);this.setProfileBeingRecorded(profile);this.addProfile(profile);profile.updateStatus(ls`Snapshotting\u2026`);const protocolProfile=await this._takeNativeSnapshot((heapProfilerModel));const recordedProfile=this.profileBeingRecorded();if(recordedProfile){console.assert(protocolProfile);recordedProfile.setProtocolProfile((protocolProfile));recordedProfile.updateStatus('');this.setProfileBeingRecorded(null);}
this.dispatchEventToListeners(Profiler.ProfileType.Events.ProfileComplete,recordedProfile);}
_takeNativeSnapshot(heapProfilerModel){throw'Not implemented';}};Profiler.SamplingNativeHeapSnapshotType.TypeId='SamplingNativeHeapSnapshot';Profiler.SamplingNativeHeapSnapshotBrowserType=class extends Profiler.SamplingNativeHeapSnapshotType{constructor(){super(ls`Browser`);Profiler.SamplingNativeHeapSnapshotBrowserType.instance=this;}
async _takeNativeSnapshot(heapProfilerModel){return await heapProfilerModel.takeNativeBrowserSnapshot();}};Profiler.SamplingNativeHeapSnapshotRendererType=class extends Profiler.SamplingNativeHeapSnapshotType{constructor(){super(ls`Renderer`);Profiler.SamplingNativeHeapSnapshotRendererType.instance=this;}
async _takeNativeSnapshot(heapProfilerModel){return await heapProfilerModel.takeNativeSnapshot();}};Profiler.SamplingHeapProfileHeader=class extends Profiler.WritableProfileHeader{constructor(heapProfilerModel,type,title){super(heapProfilerModel&&heapProfilerModel.debuggerModel(),type,title||Common.UIString('Profile %d',type.nextProfileUid()));this._heapProfilerModel=heapProfilerModel;this._protocolProfile=({head:{callFrame:{},children:[]}});}
createView(){return new Profiler.HeapProfileView(this);}
protocolProfile(){return this._protocolProfile;}
heapProfilerModel(){return this._heapProfilerModel;}};Profiler.SamplingHeapProfileNode=class extends SDK.ProfileNode{constructor(node){const callFrame=node.callFrame||({functionName:node['functionName'],scriptId:node['scriptId'],url:node['url'],lineNumber:node['lineNumber']-1,columnNumber:node['columnNumber']-1});super(callFrame);this.self=node.selfSize;}};Profiler.SamplingHeapProfileModel=class extends SDK.ProfileTreeModel{constructor(profile,minOrdinal,maxOrdinal){super();this.modules=profile.modules||[];let nodeIdToSizeMap=null;if(minOrdinal||maxOrdinal){nodeIdToSizeMap=new Map();minOrdinal=minOrdinal||0;maxOrdinal=maxOrdinal||Infinity;for(const sample of profile.samples){if(sample.ordinal<minOrdinal||sample.ordinal>maxOrdinal){continue;}
const size=nodeIdToSizeMap.get(sample.nodeId)||0;nodeIdToSizeMap.set(sample.nodeId,size+sample.size);}}
this.initialize(translateProfileTree(profile.head));function translateProfileTree(root){const resultRoot=new Profiler.SamplingHeapProfileNode(root);const sourceNodeStack=[root];const targetNodeStack=[resultRoot];while(sourceNodeStack.length){const sourceNode=sourceNodeStack.pop();const targetNode=targetNodeStack.pop();targetNode.children=sourceNode.children.map(child=>{const targetChild=new Profiler.SamplingHeapProfileNode(child);if(nodeIdToSizeMap){targetChild.self=nodeIdToSizeMap.get(child.id)||0;}
return targetChild;});sourceNodeStack.pushAll(sourceNode.children);targetNodeStack.pushAll(targetNode.children);}
pruneEmptyBranches(resultRoot);return resultRoot;}
function pruneEmptyBranches(node){node.children=node.children.filter(pruneEmptyBranches);return!!(node.children.length||node.self);}}};Profiler.HeapProfileView.NodeFormatter=class{constructor(profileView){this._profileView=profileView;}
formatValue(value){return Number.withThousandsSeparator(value);}
formatValueAccessibleText(value){return ls`${value} bytes`;}
formatPercent(value,node){return Common.UIString('%.2f\xa0%%',value);}
linkifyNode(node){const heapProfilerModel=this._profileView._profileHeader.heapProfilerModel();return this._profileView.linkifier().maybeLinkifyConsoleCallFrame(heapProfilerModel?heapProfilerModel.target():null,node.profileNode.callFrame,'profile-node-file');}};Profiler.HeapFlameChartDataProvider=class extends Profiler.ProfileFlameChartDataProvider{constructor(profile,heapProfilerModel){super();this._profile=profile;this._heapProfilerModel=heapProfilerModel;}
minimumBoundary(){return 0;}
totalTime(){return this._profile.root.total;}
formatValue(value,precision){return Common.UIString('%s\xa0KB',Number.withThousandsSeparator(value/1e3));}
_calculateTimelineData(){function nodesCount(node){return node.children.reduce((count,node)=>count+nodesCount(node),1);}
const count=nodesCount(this._profile.root);const entryNodes=new Array(count);const entryLevels=new Uint16Array(count);const entryTotalTimes=new Float32Array(count);const entryStartTimes=new Float64Array(count);let depth=0;let maxDepth=0;let position=0;let index=0;function addNode(node){const start=position;entryNodes[index]=node;entryLevels[index]=depth;entryTotalTimes[index]=node.total;entryStartTimes[index]=position;++index;++depth;node.children.forEach(addNode);--depth;maxDepth=Math.max(maxDepth,depth);position=start+node.total;}
addNode(this._profile.root);this._maxStackDepth=maxDepth+1;this._entryNodes=entryNodes;this._timelineData=new PerfUI.FlameChart.TimelineData(entryLevels,entryTotalTimes,entryStartTimes,null);return this._timelineData;}
prepareHighlightedEntryInfo(entryIndex){const node=this._entryNodes[entryIndex];if(!node){return null;}
const entryInfo=[];function pushEntryInfoRow(title,value){entryInfo.push({title:title,value:value});}
pushEntryInfoRow(ls`Name`,UI.beautifyFunctionName(node.functionName));pushEntryInfoRow(ls`Self size`,Number.bytesToString(node.self));pushEntryInfoRow(ls`Total size`,Number.bytesToString(node.total));const linkifier=new Components.Linkifier();const link=linkifier.maybeLinkifyConsoleCallFrame(this._heapProfilerModel?this._heapProfilerModel.target():null,node.callFrame);if(link){pushEntryInfoRow(ls`URL`,link.textContent);}
linkifier.dispose();return Profiler.ProfileView.buildPopoverTable(entryInfo);}};;Profiler.HeapProfilerPanel=class extends Profiler.ProfilesPanel{constructor(){const registry=Profiler.ProfileTypeRegistry.instance;const profileTypes=[registry.heapSnapshotProfileType,registry.trackingHeapSnapshotProfileType,registry.samplingHeapProfileType];if(Root.Runtime.experiments.isEnabled('nativeHeapProfiler')){profileTypes.push(registry.samplingNativeHeapProfileType);profileTypes.push(registry.samplingNativeHeapSnapshotRendererType);profileTypes.push(registry.samplingNativeHeapSnapshotBrowserType);}
super('heap_profiler',profileTypes,'profiler.heap-toggle-recording');}
appendApplicableItems(event,contextMenu,target){if(!(target instanceof SDK.RemoteObject)){return;}
if(!this.isShowing()){return;}
const object=(target);if(!object.objectId){return;}
const objectId=(object.objectId);const heapProfiles=Profiler.ProfileTypeRegistry.instance.heapSnapshotProfileType.getProfiles();if(!heapProfiles.length){return;}
const heapProfilerModel=object.runtimeModel().heapProfilerModel();if(!heapProfilerModel){return;}
function revealInView(viewName){heapProfilerModel.snapshotObjectIdForObjectId(objectId).then(result=>{if(this.isShowing()&&result){this.showObject(result,viewName);}});}
contextMenu.revealSection().appendItem(Common.UIString('Reveal in Summary view'),revealInView.bind(this,'Summary'));}
handleAction(context,actionId){const panel=UI.context.flavor(Profiler.HeapProfilerPanel);console.assert(panel&&panel instanceof Profiler.HeapProfilerPanel);panel.toggleRecord();return true;}
wasShown(){UI.context.setFlavor(Profiler.HeapProfilerPanel,this);}
willHide(){UI.context.setFlavor(Profiler.HeapProfilerPanel,null);}
showObject(snapshotObjectId,perspectiveName){const registry=Profiler.ProfileTypeRegistry.instance;const heapProfiles=registry.heapSnapshotProfileType.getProfiles();for(let i=0;i<heapProfiles.length;i++){const profile=heapProfiles[i];if(profile.maxJSObjectId>=snapshotObjectId){this.showProfile(profile);const view=this.viewForProfile(profile);view.selectLiveObject(perspectiveName,snapshotObjectId);break;}}}};;Profiler.HeapSnapshotWorkerProxy=class extends Common.Object{constructor(eventHandler){super();this._eventHandler=eventHandler;this._nextObjectId=1;this._nextCallId=1;this._callbacks=new Map();this._previousCallbacks=new Set();this._worker=new Common.Worker('heap_snapshot_worker');this._worker.onmessage=this._messageReceived.bind(this);}
createLoader(profileUid,snapshotReceivedCallback){const objectId=this._nextObjectId++;const proxy=new Profiler.HeapSnapshotLoaderProxy(this,objectId,profileUid,snapshotReceivedCallback);this._postMessage({callId:this._nextCallId++,disposition:'create',objectId:objectId,methodName:'HeapSnapshotWorker.HeapSnapshotLoader'});return proxy;}
dispose(){this._worker.terminate();if(this._interval){clearInterval(this._interval);}}
disposeObject(objectId){this._postMessage({callId:this._nextCallId++,disposition:'dispose',objectId:objectId});}
evaluateForTest(script,callback){const callId=this._nextCallId++;this._callbacks.set(callId,callback);this._postMessage({callId:callId,disposition:'evaluateForTest',source:script});}
callFactoryMethod(callback,objectId,methodName,proxyConstructor){const callId=this._nextCallId++;const methodArguments=Array.prototype.slice.call(arguments,4);const newObjectId=this._nextObjectId++;function wrapCallback(remoteResult){callback(remoteResult?new proxyConstructor(this,newObjectId):null);}
if(callback){this._callbacks.set(callId,wrapCallback.bind(this));this._postMessage({callId:callId,disposition:'factory',objectId:objectId,methodName:methodName,methodArguments:methodArguments,newObjectId:newObjectId});return null;}else{this._postMessage({callId:callId,disposition:'factory',objectId:objectId,methodName:methodName,methodArguments:methodArguments,newObjectId:newObjectId});return new proxyConstructor(this,newObjectId);}}
callMethod(callback,objectId,methodName){const callId=this._nextCallId++;const methodArguments=Array.prototype.slice.call(arguments,3);if(callback){this._callbacks.set(callId,callback);}
this._postMessage({callId:callId,disposition:'method',objectId:objectId,methodName:methodName,methodArguments:methodArguments});}
startCheckingForLongRunningCalls(){if(this._interval){return;}
this._checkLongRunningCalls();this._interval=setInterval(this._checkLongRunningCalls.bind(this),300);}
_checkLongRunningCalls(){for(const callId of this._previousCallbacks){if(!this._callbacks.has(callId)){this._previousCallbacks.delete(callId);}}
const hasLongRunningCalls=!!this._previousCallbacks.size;this.dispatchEventToListeners(Profiler.HeapSnapshotWorkerProxy.Events.Wait,hasLongRunningCalls);for(const callId of this._callbacks.keysArray()){this._previousCallbacks.add(callId);}}
_messageReceived(event){const data=event.data;if(data.eventName){if(this._eventHandler){this._eventHandler(data.eventName,data.data);}
return;}
if(data.error){if(data.errorMethodName){Common.console.error(Common.UIString('An error occurred when a call to method \'%s\' was requested',data.errorMethodName));}
Common.console.error(data['errorCallStack']);this._callbacks.delete(data.callId);return;}
if(!this._callbacks.has(data.callId)){return;}
const callback=this._callbacks.get(data.callId);this._callbacks.delete(data.callId);callback(data.result);}
_postMessage(message){this._worker.postMessage(message);}};Profiler.HeapSnapshotWorkerProxy.Events={Wait:Symbol('Wait')};Profiler.HeapSnapshotProxyObject=class{constructor(worker,objectId){this._worker=worker;this._objectId=objectId;}
_callWorker(workerMethodName,args){args.splice(1,0,this._objectId);return this._worker[workerMethodName].apply(this._worker,args);}
dispose(){this._worker.disposeObject(this._objectId);}
disposeWorker(){this._worker.dispose();}
callFactoryMethod(callback,methodName,proxyConstructor,var_args){return this._callWorker('callFactoryMethod',Array.prototype.slice.call(arguments,0));}
_callMethodPromise(methodName,var_args){const args=Array.prototype.slice.call(arguments);return new Promise(resolve=>this._callWorker('callMethod',[resolve,...args]));}};Profiler.HeapSnapshotLoaderProxy=class extends Profiler.HeapSnapshotProxyObject{constructor(worker,objectId,profileUid,snapshotReceivedCallback){super(worker,objectId);this._profileUid=profileUid;this._snapshotReceivedCallback=snapshotReceivedCallback;}
write(chunk){return this._callMethodPromise('write',chunk);}
async close(){await this._callMethodPromise('close');const snapshotProxy=await new Promise(resolve=>this.callFactoryMethod(resolve,'buildSnapshot',Profiler.HeapSnapshotProxy));this.dispose();snapshotProxy.setProfileUid(this._profileUid);await snapshotProxy.updateStaticData();this._snapshotReceivedCallback(snapshotProxy);}};Profiler.HeapSnapshotProxy=class extends Profiler.HeapSnapshotProxyObject{constructor(worker,objectId){super(worker,objectId);this._staticData=null;}
search(searchConfig,filter){return this._callMethodPromise('search',searchConfig,filter);}
aggregatesWithFilter(filter){return this._callMethodPromise('aggregatesWithFilter',filter);}
aggregatesForDiff(){return this._callMethodPromise('aggregatesForDiff');}
calculateSnapshotDiff(baseSnapshotId,baseSnapshotAggregates){return this._callMethodPromise('calculateSnapshotDiff',baseSnapshotId,baseSnapshotAggregates);}
nodeClassName(snapshotObjectId){return this._callMethodPromise('nodeClassName',snapshotObjectId);}
createEdgesProvider(nodeIndex){return this.callFactoryMethod(null,'createEdgesProvider',Profiler.HeapSnapshotProviderProxy,nodeIndex);}
createRetainingEdgesProvider(nodeIndex){return this.callFactoryMethod(null,'createRetainingEdgesProvider',Profiler.HeapSnapshotProviderProxy,nodeIndex);}
createAddedNodesProvider(baseSnapshotId,className){return this.callFactoryMethod(null,'createAddedNodesProvider',Profiler.HeapSnapshotProviderProxy,baseSnapshotId,className);}
createDeletedNodesProvider(nodeIndexes){return this.callFactoryMethod(null,'createDeletedNodesProvider',Profiler.HeapSnapshotProviderProxy,nodeIndexes);}
createNodesProvider(filter){return this.callFactoryMethod(null,'createNodesProvider',Profiler.HeapSnapshotProviderProxy,filter);}
createNodesProviderForClass(className,nodeFilter){return this.callFactoryMethod(null,'createNodesProviderForClass',Profiler.HeapSnapshotProviderProxy,className,nodeFilter);}
allocationTracesTops(){return this._callMethodPromise('allocationTracesTops');}
allocationNodeCallers(nodeId){return this._callMethodPromise('allocationNodeCallers',nodeId);}
allocationStack(nodeIndex){return this._callMethodPromise('allocationStack',nodeIndex);}
dispose(){throw new Error('Should never be called');}
get nodeCount(){return this._staticData.nodeCount;}
get rootNodeIndex(){return this._staticData.rootNodeIndex;}
async updateStaticData(){this._staticData=await this._callMethodPromise('updateStaticData');}
getStatistics(){return this._callMethodPromise('getStatistics');}
getLocation(nodeIndex){return this._callMethodPromise('getLocation',nodeIndex);}
getSamples(){return this._callMethodPromise('getSamples');}
get totalSize(){return this._staticData.totalSize;}
get uid(){return this._profileUid;}
setProfileUid(profileUid){this._profileUid=profileUid;}
maxJSObjectId(){return this._staticData.maxJSObjectId;}};Profiler.HeapSnapshotProviderProxy=class extends Profiler.HeapSnapshotProxyObject{constructor(worker,objectId){super(worker,objectId);}
nodePosition(snapshotObjectId){return this._callMethodPromise('nodePosition',snapshotObjectId);}
isEmpty(){return this._callMethodPromise('isEmpty');}
serializeItemsRange(startPosition,endPosition){return this._callMethodPromise('serializeItemsRange',startPosition,endPosition);}
sortAndRewind(comparator){return this._callMethodPromise('sortAndRewind',comparator);}};;Profiler.HeapSnapshotSortableDataGrid=class extends DataGrid.DataGrid{constructor(heapProfilerModel,dataDisplayDelegate,columns){super(columns);this._heapProfilerModel=heapProfilerModel;this._dataDisplayDelegate=dataDisplayDelegate;const tooltips=[['distance',ls`Distance from window object`],['shallowSize',ls`Size of the object itself in bytes`],['retainedSize',ls`Size of the object plus the graph it retains in bytes`]];for(const info of tooltips){const headerCell=this.headerTableHeader(info[0]);if(headerCell){headerCell.setAttribute('title',info[1]);}}
this._recursiveSortingDepth=0;this._highlightedNode=null;this._populatedAndSorted=false;this._nameFilter=null;this._nodeFilter=new HeapSnapshotModel.NodeFilter();this.addEventListener(Profiler.HeapSnapshotSortableDataGrid.Events.SortingComplete,this._sortingComplete,this);this.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this.sortingChanged,this);this.setRowContextMenuCallback(this._populateContextMenu.bind(this));}
heapProfilerModel(){return this._heapProfilerModel;}
dataDisplayDelegate(){return this._dataDisplayDelegate;}
nodeFilter(){return this._nodeFilter;}
setNameFilter(nameFilter){this._nameFilter=nameFilter;}
defaultPopulateCount(){return 100;}
_disposeAllNodes(){const children=this.topLevelNodes();for(let i=0,l=children.length;i<l;++i){children[i].dispose();}}
wasShown(){if(this._nameFilter){this._nameFilter.addEventListener(UI.ToolbarInput.Event.TextChanged,this._onNameFilterChanged,this);this.updateVisibleNodes(true);}
if(this._populatedAndSorted){this.dispatchEventToListeners(Profiler.HeapSnapshotSortableDataGrid.Events.ContentShown,this);}}
_sortingComplete(){this.removeEventListener(Profiler.HeapSnapshotSortableDataGrid.Events.SortingComplete,this._sortingComplete,this);this._populatedAndSorted=true;this.dispatchEventToListeners(Profiler.HeapSnapshotSortableDataGrid.Events.ContentShown,this);}
willHide(){if(this._nameFilter){this._nameFilter.removeEventListener(UI.ToolbarInput.Event.TextChanged,this._onNameFilterChanged,this);}
this._clearCurrentHighlight();}
_populateContextMenu(contextMenu,gridNode){const node=(gridNode);node.populateContextMenu(contextMenu,this._dataDisplayDelegate,this.heapProfilerModel());if(gridNode.linkElement&&!contextMenu.containsTarget(gridNode.linkElement)){contextMenu.appendApplicableItems(gridNode.linkElement);}}
resetSortingCache(){delete this._lastSortColumnId;delete this._lastSortAscending;}
topLevelNodes(){return this.rootNode().children;}
revealObjectByHeapSnapshotId(heapSnapshotObjectId){return Promise.resolve((null));}
highlightNode(node){this._clearCurrentHighlight();this._highlightedNode=node;UI.runCSSAnimationOnce(this._highlightedNode.element(),'highlighted-row');}
_clearCurrentHighlight(){if(!this._highlightedNode){return;}
this._highlightedNode.element().classList.remove('highlighted-row');this._highlightedNode=null;}
resetNameFilter(){this._nameFilter.setValue('');}
_onNameFilterChanged(){this.updateVisibleNodes(true);this._deselectFilteredNodes();}
_deselectFilteredNodes(){let currentNode=this.selectedNode;while(currentNode){if(this._isFilteredOut(currentNode)){this.selectedNode.deselect();this.selectedNode=null;return;}
currentNode=currentNode.parent;}}
sortingChanged(){const sortAscending=this.isSortOrderAscending();const sortColumnId=this.sortColumnId();if(this._lastSortColumnId===sortColumnId&&this._lastSortAscending===sortAscending){return;}
this._lastSortColumnId=sortColumnId;this._lastSortAscending=sortAscending;const sortFields=this._sortFields(sortColumnId,sortAscending);function SortByTwoFields(nodeA,nodeB){let field1=nodeA[sortFields[0]];let field2=nodeB[sortFields[0]];let result=field1<field2?-1:(field1>field2?1:0);if(!sortFields[1]){result=-result;}
if(result!==0){return result;}
field1=nodeA[sortFields[2]];field2=nodeB[sortFields[2]];result=field1<field2?-1:(field1>field2?1:0);if(!sortFields[3]){result=-result;}
return result;}
this._performSorting(SortByTwoFields);}
_performSorting(sortFunction){this.recursiveSortingEnter();const children=this.allChildren(this.rootNode());this.rootNode().removeChildren();children.sort(sortFunction);for(let i=0,l=children.length;i<l;++i){const child=children[i];this.appendChildAfterSorting(child);if(child.expanded){child.sort();}}
this.recursiveSortingLeave();}
appendChildAfterSorting(child){const revealed=child.revealed;this.rootNode().appendChild(child);child.revealed=revealed;}
recursiveSortingEnter(){++this._recursiveSortingDepth;}
recursiveSortingLeave(){if(!this._recursiveSortingDepth){return;}
if(--this._recursiveSortingDepth){return;}
this.updateVisibleNodes(true);this.dispatchEventToListeners(Profiler.HeapSnapshotSortableDataGrid.Events.SortingComplete);}
updateVisibleNodes(force){}
allChildren(parent){return parent.children;}
insertChild(parent,node,index){parent.insertChild(node,index);}
removeChildByIndex(parent,index){parent.removeChild(parent.children[index]);}
removeAllChildren(parent){parent.removeChildren();}};Profiler.HeapSnapshotSortableDataGrid.Events={ContentShown:Symbol('ContentShown'),SortingComplete:Symbol('SortingComplete')};Profiler.HeapSnapshotViewportDataGrid=class extends Profiler.HeapSnapshotSortableDataGrid{constructor(heapProfilerModel,dataDisplayDelegate,columns){super(heapProfilerModel,dataDisplayDelegate,columns);this.scrollContainer.addEventListener('scroll',this._onScroll.bind(this),true);this._topPaddingHeight=0;this._bottomPaddingHeight=0;}
topLevelNodes(){return this.allChildren(this.rootNode());}
appendChildAfterSorting(child){}
updateVisibleNodes(force){const guardZoneHeight=40;const scrollHeight=this.scrollContainer.scrollHeight;let scrollTop=this.scrollContainer.scrollTop;let scrollBottom=scrollHeight-scrollTop-this.scrollContainer.offsetHeight;scrollTop=Math.max(0,scrollTop-guardZoneHeight);scrollBottom=Math.max(0,scrollBottom-guardZoneHeight);let viewPortHeight=scrollHeight-scrollTop-scrollBottom;if(!force&&scrollTop>=this._topPaddingHeight&&scrollBottom>=this._bottomPaddingHeight){return;}
const hysteresisHeight=500;scrollTop-=hysteresisHeight;viewPortHeight+=2*hysteresisHeight;const selectedNode=this.selectedNode;this.rootNode().removeChildren();this._topPaddingHeight=0;this._bottomPaddingHeight=0;this._addVisibleNodes(this.rootNode(),scrollTop,scrollTop+viewPortHeight);this.setVerticalPadding(this._topPaddingHeight,this._bottomPaddingHeight);if(selectedNode){if(selectedNode.parent){selectedNode.select(true);}else{this.selectedNode=selectedNode;}}}
_addVisibleNodes(parentNode,topBound,bottomBound){if(!parentNode.expanded){return 0;}
const children=this.allChildren(parentNode);let topPadding=0;let i=0;for(;i<children.length;++i){const child=children[i];if(this._isFilteredOut(child)){continue;}
const newTop=topPadding+this._nodeHeight(child);if(newTop>topBound){break;}
topPadding=newTop;}
let position=topPadding;for(;i<children.length&&position<bottomBound;++i){const child=children[i];if(this._isFilteredOut(child)){continue;}
const hasChildren=child.hasChildren();child.removeChildren();child.setHasChildren(hasChildren);parentNode.appendChild(child);position+=child.nodeSelfHeight();position+=this._addVisibleNodes(child,topBound-position,bottomBound-position);}
let bottomPadding=0;for(;i<children.length;++i){const child=children[i];if(this._isFilteredOut(child)){continue;}
bottomPadding+=this._nodeHeight(child);}
this._topPaddingHeight+=topPadding;this._bottomPaddingHeight+=bottomPadding;return position+bottomPadding;}
_isFilteredOut(node){const nameFilterValue=this._nameFilter?this._nameFilter.value().toLowerCase():'';if(nameFilterValue&&node.filteredOut&&node.filteredOut(nameFilterValue)){return true;}else{return false;}}
_nodeHeight(node){let result=node.nodeSelfHeight();if(!node.expanded){return result;}
const children=this.allChildren(node);for(let i=0;i<children.length;i++){result+=this._nodeHeight(children[i]);}
return result;}
revealTreeNode(pathToReveal){const height=this._calculateOffset(pathToReveal);const node=(pathToReveal.peekLast());const scrollTop=this.scrollContainer.scrollTop;const scrollBottom=scrollTop+this.scrollContainer.offsetHeight;if(height>=scrollTop&&height<scrollBottom){return Promise.resolve(node);}
const scrollGap=40;this.scrollContainer.scrollTop=Math.max(0,height-scrollGap);return new Promise(resolve=>{console.assert(!this._scrollToResolveCallback);this._scrollToResolveCallback=resolve.bind(null,node);this.scrollContainer.window().requestAnimationFrame(()=>{if(!this._scrollToResolveCallback){return;}
this._scrollToResolveCallback();this._scrollToResolveCallback=null;});});}
_calculateOffset(pathToReveal){let parentNode=this.rootNode();let height=0;for(let i=0;i<pathToReveal.length;++i){const node=pathToReveal[i];const children=this.allChildren(parentNode);for(let j=0;j<children.length;++j){const child=children[j];if(node===child){height+=node.nodeSelfHeight();break;}
height+=this._nodeHeight(child);}
parentNode=node;}
return height-pathToReveal.peekLast().nodeSelfHeight();}
allChildren(parent){return parent._allChildren||(parent._allChildren=[]);}
appendNode(parent,node){this.allChildren(parent).push(node);}
insertChild(parent,node,index){this.allChildren(parent).splice(index,0,(node));}
removeChildByIndex(parent,index){this.allChildren(parent).splice(index,1);}
removeAllChildren(parent){parent._allChildren=[];}
removeTopLevelNodes(){this._disposeAllNodes();this.rootNode().removeChildren();this.rootNode()._allChildren=[];}
_isScrolledIntoView(element){const viewportTop=this.scrollContainer.scrollTop;const viewportBottom=viewportTop+this.scrollContainer.clientHeight;const elemTop=element.offsetTop;const elemBottom=elemTop+element.offsetHeight;return elemBottom<=viewportBottom&&elemTop>=viewportTop;}
onResize(){super.onResize();this.updateVisibleNodes(false);}
_onScroll(event){this.updateVisibleNodes(false);if(this._scrollToResolveCallback){this._scrollToResolveCallback();this._scrollToResolveCallback=null;}}};Profiler.HeapSnapshotContainmentDataGrid=class extends Profiler.HeapSnapshotSortableDataGrid{constructor(heapProfilerModel,dataDisplayDelegate,columns){columns=columns||(([{id:'object',title:ls`Object`,disclosure:true,sortable:true},{id:'distance',title:ls`Distance`,width:'70px',sortable:true,fixedWidth:true},{id:'shallowSize',title:ls`Shallow Size`,width:'110px',sortable:true,fixedWidth:true},{id:'retainedSize',title:ls`Retained Size`,width:'110px',sortable:true,fixedWidth:true,sort:DataGrid.DataGrid.Order.Descending}]));super(heapProfilerModel,dataDisplayDelegate,columns);}
setDataSource(snapshot,nodeIndex){this.snapshot=snapshot;const node={nodeIndex:nodeIndex||snapshot.rootNodeIndex};const fakeEdge={node:node};this.setRootNode(this._createRootNode(snapshot,fakeEdge));this.rootNode().sort();}
_createRootNode(snapshot,fakeEdge){return new Profiler.HeapSnapshotObjectNode(this,snapshot,fakeEdge,null);}
sortingChanged(){const rootNode=this.rootNode();if(rootNode.hasChildren()){rootNode.sort();}}};Profiler.HeapSnapshotRetainmentDataGrid=class extends Profiler.HeapSnapshotContainmentDataGrid{constructor(heapProfilerModel,dataDisplayDelegate){const columns=([{id:'object',title:ls`Object`,disclosure:true,sortable:true},{id:'distance',title:ls`Distance`,width:'70px',sortable:true,fixedWidth:true,sort:DataGrid.DataGrid.Order.Ascending},{id:'shallowSize',title:ls`Shallow Size`,width:'110px',sortable:true,fixedWidth:true},{id:'retainedSize',title:ls`Retained Size`,width:'110px',sortable:true,fixedWidth:true}]);super(heapProfilerModel,dataDisplayDelegate,columns);}
_createRootNode(snapshot,fakeEdge){return new Profiler.HeapSnapshotRetainingObjectNode(this,snapshot,fakeEdge,null);}
_sortFields(sortColumn,sortAscending){return{object:['_name',sortAscending,'_count',false],count:['_count',sortAscending,'_name',true],shallowSize:['_shallowSize',sortAscending,'_name',true],retainedSize:['_retainedSize',sortAscending,'_name',true],distance:['_distance',sortAscending,'_name',true]}[sortColumn];}
reset(){this.rootNode().removeChildren();this.resetSortingCache();}
setDataSource(snapshot,nodeIndex){super.setDataSource(snapshot,nodeIndex);this.rootNode().expand();}};Profiler.HeapSnapshotRetainmentDataGrid.Events={ExpandRetainersComplete:Symbol('ExpandRetainersComplete')};Profiler.HeapSnapshotConstructorsDataGrid=class extends Profiler.HeapSnapshotViewportDataGrid{constructor(heapProfilerModel,dataDisplayDelegate){const columns=([{id:'object',title:ls`Constructor`,disclosure:true,sortable:true},{id:'distance',title:ls`Distance`,width:'70px',sortable:true,fixedWidth:true},{id:'shallowSize',title:ls`Shallow Size`,width:'110px',sortable:true,fixedWidth:true},{id:'retainedSize',title:ls`Retained Size`,width:'110px',sort:DataGrid.DataGrid.Order.Descending,sortable:true,fixedWidth:true}]);super(heapProfilerModel,dataDisplayDelegate,columns);this._profileIndex=-1;this._objectIdToSelect=null;}
_sortFields(sortColumn,sortAscending){return{object:['_name',sortAscending,'_retainedSize',false],distance:['_distance',sortAscending,'_retainedSize',false],shallowSize:['_shallowSize',sortAscending,'_name',true],retainedSize:['_retainedSize',sortAscending,'_name',true]}[sortColumn];}
async revealObjectByHeapSnapshotId(id){if(!this.snapshot){this._objectIdToSelect=id;return null;}
const className=await this.snapshot.nodeClassName(parseInt(id,10));if(!className){return null;}
const parent=this.topLevelNodes().find(classNode=>classNode._name===className);if(!parent){return null;}
const nodes=await parent.populateNodeBySnapshotObjectId(parseInt(id,10));return nodes.length?this.revealTreeNode(nodes):null;}
clear(){this._nextRequestedFilter=null;this._lastFilter=null;this.removeTopLevelNodes();}
setDataSource(snapshot){this.snapshot=snapshot;if(this._profileIndex===-1){this._populateChildren();}
if(this._objectIdToSelect){this.revealObjectByHeapSnapshotId(this._objectIdToSelect);this._objectIdToSelect=null;}}
setSelectionRange(minNodeId,maxNodeId){this._nodeFilter=new HeapSnapshotModel.NodeFilter(minNodeId,maxNodeId);this._populateChildren(this._nodeFilter);}
setAllocationNodeId(allocationNodeId){this._nodeFilter=new HeapSnapshotModel.NodeFilter();this._nodeFilter.allocationNodeId=allocationNodeId;this._populateChildren(this._nodeFilter);}
_aggregatesReceived(nodeFilter,aggregates){this._filterInProgress=null;if(this._nextRequestedFilter){this.snapshot.aggregatesWithFilter(this._nextRequestedFilter).then(this._aggregatesReceived.bind(this,this._nextRequestedFilter));this._filterInProgress=this._nextRequestedFilter;this._nextRequestedFilter=null;}
this.removeTopLevelNodes();this.resetSortingCache();for(const constructor in aggregates){this.appendNode(this.rootNode(),new Profiler.HeapSnapshotConstructorNode(this,constructor,aggregates[constructor],nodeFilter));}
this.sortingChanged();this._lastFilter=nodeFilter;}
async _populateChildren(maybeNodeFilter){const nodeFilter=maybeNodeFilter||new HeapSnapshotModel.NodeFilter();if(this._filterInProgress){this._nextRequestedFilter=this._filterInProgress.equals(nodeFilter)?null:nodeFilter;return;}
if(this._lastFilter&&this._lastFilter.equals(nodeFilter)){return;}
this._filterInProgress=nodeFilter;const aggregates=await this.snapshot.aggregatesWithFilter(nodeFilter);this._aggregatesReceived(nodeFilter,aggregates);}
filterSelectIndexChanged(profiles,profileIndex){this._profileIndex=profileIndex;this._nodeFilter=undefined;if(profileIndex!==-1){const minNodeId=profileIndex>0?profiles[profileIndex-1].maxJSObjectId:0;const maxNodeId=profiles[profileIndex].maxJSObjectId;this._nodeFilter=new HeapSnapshotModel.NodeFilter(minNodeId,maxNodeId);}
this._populateChildren(this._nodeFilter);}};Profiler.HeapSnapshotDiffDataGrid=class extends Profiler.HeapSnapshotViewportDataGrid{constructor(heapProfilerModel,dataDisplayDelegate){const columns=([{id:'object',title:ls`Constructor`,disclosure:true,sortable:true},{id:'addedCount',title:ls`# New`,width:'75px',sortable:true,fixedWidth:true},{id:'removedCount',title:ls`# Deleted`,width:'75px',sortable:true,fixedWidth:true},{id:'countDelta',title:ls`# Delta`,width:'65px',sortable:true,fixedWidth:true},{id:'addedSize',title:ls`Alloc. Size`,width:'75px',sortable:true,fixedWidth:true,sort:DataGrid.DataGrid.Order.Descending},{id:'removedSize',title:ls`Freed Size`,width:'75px',sortable:true,fixedWidth:true},{id:'sizeDelta',title:ls`Size Delta`,width:'75px',sortable:true,fixedWidth:true}]);super(heapProfilerModel,dataDisplayDelegate,columns);}
defaultPopulateCount(){return 50;}
_sortFields(sortColumn,sortAscending){return{object:['_name',sortAscending,'_count',false],addedCount:['_addedCount',sortAscending,'_name',true],removedCount:['_removedCount',sortAscending,'_name',true],countDelta:['_countDelta',sortAscending,'_name',true],addedSize:['_addedSize',sortAscending,'_name',true],removedSize:['_removedSize',sortAscending,'_name',true],sizeDelta:['_sizeDelta',sortAscending,'_name',true]}[sortColumn];}
setDataSource(snapshot){this.snapshot=snapshot;}
setBaseDataSource(baseSnapshot){this.baseSnapshot=baseSnapshot;this.removeTopLevelNodes();this.resetSortingCache();if(this.baseSnapshot===this.snapshot){this.dispatchEventToListeners(Profiler.HeapSnapshotSortableDataGrid.Events.SortingComplete);return;}
this._populateChildren();}
async _populateChildren(){const aggregatesForDiff=await this.baseSnapshot.aggregatesForDiff();const diffByClassName=await this.snapshot.calculateSnapshotDiff(this.baseSnapshot.uid,aggregatesForDiff);for(const className in diffByClassName){const diff=diffByClassName[className];this.appendNode(this.rootNode(),new Profiler.HeapSnapshotDiffNode(this,className,diff));}
this.sortingChanged();}};Profiler.AllocationDataGrid=class extends Profiler.HeapSnapshotViewportDataGrid{constructor(heapProfilerModel,dataDisplayDelegate){const columns=([{id:'liveCount',title:ls`Live Count`,width:'75px',sortable:true,fixedWidth:true},{id:'count',title:ls`Count`,width:'65px',sortable:true,fixedWidth:true},{id:'liveSize',title:ls`Live Size`,width:'75px',sortable:true,fixedWidth:true},{id:'size',title:ls`Size`,width:'75px',sortable:true,fixedWidth:true,sort:DataGrid.DataGrid.Order.Descending},{id:'name',title:ls`Function`,disclosure:true,sortable:true},]);super(heapProfilerModel,dataDisplayDelegate,columns);this._linkifier=new Components.Linkifier();}
dispose(){this._linkifier.reset();}
async setDataSource(snapshot){this.snapshot=snapshot;this._topNodes=await this.snapshot.allocationTracesTops();this._populateChildren();}
_populateChildren(){this.removeTopLevelNodes();const root=this.rootNode();const tops=this._topNodes;for(const top of tops){this.appendNode(root,new Profiler.AllocationGridNode(this,top));}
this.updateVisibleNodes(true);}
sortingChanged(){this._topNodes.sort(this._createComparator());this.rootNode().removeChildren();this._populateChildren();}
_createComparator(){const fieldName=this.sortColumnId();const compareResult=(this.sortOrder()===DataGrid.DataGrid.Order.Ascending)?+1:-1;function compare(a,b){if(a[fieldName]>b[fieldName]){return compareResult;}
if(a[fieldName]<b[fieldName]){return-compareResult;}
return 0;}
return compare;}};;Profiler.HeapSnapshotGridNode=class extends DataGrid.DataGridNode{constructor(tree,hasChildren){super(null,hasChildren);this._dataGrid=tree;this._instanceCount=0;this._savedChildren=null;this._retrievedChildrenRanges=[];this._providerObject=null;this._reachableFromWindow=false;}
static createComparator(fieldNames){return({fieldName1:fieldNames[0],ascending1:fieldNames[1],fieldName2:fieldNames[2],ascending2:fieldNames[3]});}
heapSnapshotDataGrid(){return this._dataGrid;}
createProvider(){throw new Error('Not implemented.');}
retainersDataSource(){return null;}
_provider(){if(!this._providerObject){this._providerObject=this.createProvider();}
return this._providerObject;}
createCell(columnId){const cell=super.createCell(columnId);if(this._searchMatched){cell.classList.add('highlight');}
return cell;}
collapse(){super.collapse();this._dataGrid.updateVisibleNodes(true);}
expand(){super.expand();this._dataGrid.updateVisibleNodes(true);}
dispose(){if(this._providerObject){this._providerObject.dispose();}
for(let node=this.children[0];node;node=node.traverseNextNode(true,this,true)){if(node.dispose){node.dispose();}}}
queryObjectContent(heapProfilerModel,objectGroupName){}
tryQueryObjectContent(heapProfilerModel,objectGroupName){}
populateContextMenu(contextMenu,dataDisplayDelegate,heapProfilerModel){}
_toPercentString(num){return num.toFixed(0)+'\xa0%';}
_toUIDistance(distance){const baseSystemDistance=HeapSnapshotModel.baseSystemDistance;return distance>=0&&distance<baseSystemDistance?Common.UIString('%d',distance):Common.UIString('\u2212');}
allChildren(){return this._dataGrid.allChildren(this);}
removeChildByIndex(index){this._dataGrid.removeChildByIndex(this,index);}
childForPosition(nodePosition){let indexOfFirstChildInRange=0;for(let i=0;i<this._retrievedChildrenRanges.length;i++){const range=this._retrievedChildrenRanges[i];if(range.from<=nodePosition&&nodePosition<range.to){const childIndex=indexOfFirstChildInRange+nodePosition-range.from;return this.allChildren()[childIndex];}
indexOfFirstChildInRange+=range.to-range.from+1;}
return null;}
_createValueCell(columnId){const cell=UI.html`<td class="numeric-column" />`;if(this.dataGrid.snapshot.totalSize!==0){const div=createElement('div');const valueSpan=UI.html`<span>${this.data[columnId]}</span>`;div.appendChild(valueSpan);const percentColumn=columnId+'-percent';if(percentColumn in this.data){const percentSpan=UI.html`<span class="percent-column">${this.data[percentColumn]}</span>`;div.appendChild(percentSpan);div.classList.add('profile-multiple-values');UI.ARIAUtils.markAsHidden(valueSpan);UI.ARIAUtils.markAsHidden(percentSpan);UI.ARIAUtils.setAccessibleName(div,ls`${this.data[columnId]}, ${this.data[percentColumn]}`);}
cell.appendChild(div);}
return cell;}
populate(){if(this._populated){return;}
this._populated=true;this._provider().sortAndRewind(this.comparator()).then(()=>this._populateChildren());}
expandWithoutPopulate(){this._populated=true;this.expand();return this._provider().sortAndRewind(this.comparator());}
_populateChildren(fromPosition,toPosition){let afterPopulate;const promise=new Promise(resolve=>afterPopulate=resolve);fromPosition=fromPosition||0;toPosition=toPosition||fromPosition+this._dataGrid.defaultPopulateCount();let firstNotSerializedPosition=fromPosition;serializeNextChunk.call(this);return promise;function serializeNextChunk(){if(firstNotSerializedPosition>=toPosition){return;}
const end=Math.min(firstNotSerializedPosition+this._dataGrid.defaultPopulateCount(),toPosition);this._provider().serializeItemsRange(firstNotSerializedPosition,end).then(childrenRetrieved.bind(this));firstNotSerializedPosition=end;}
function insertRetrievedChild(item,insertionIndex){if(this._savedChildren){const hash=this._childHashForEntity(item);if(hash in this._savedChildren){this._dataGrid.insertChild(this,this._savedChildren[hash],insertionIndex);return;}}
this._dataGrid.insertChild(this,this._createChildNode(item),insertionIndex);}
function insertShowMoreButton(from,to,insertionIndex){const button=new DataGrid.ShowMoreDataGridNode(this._populateChildren.bind(this),from,to,this._dataGrid.defaultPopulateCount());this._dataGrid.insertChild(this,button,insertionIndex);}
function childrenRetrieved(itemsRange){let itemIndex=0;let itemPosition=itemsRange.startPosition;const items=itemsRange.items;let insertionIndex=0;if(!this._retrievedChildrenRanges.length){if(itemsRange.startPosition>0){this._retrievedChildrenRanges.push({from:0,to:0});insertShowMoreButton.call(this,0,itemsRange.startPosition,insertionIndex++);}
this._retrievedChildrenRanges.push({from:itemsRange.startPosition,to:itemsRange.endPosition});for(let i=0,l=items.length;i<l;++i){insertRetrievedChild.call(this,items[i],insertionIndex++);}
if(itemsRange.endPosition<itemsRange.totalLength){insertShowMoreButton.call(this,itemsRange.endPosition,itemsRange.totalLength,insertionIndex++);}}else{let rangeIndex=0;let found=false;let range;while(rangeIndex<this._retrievedChildrenRanges.length){range=this._retrievedChildrenRanges[rangeIndex];if(range.to>=itemPosition){found=true;break;}
insertionIndex+=range.to-range.from;if(range.to<itemsRange.totalLength){insertionIndex+=1;}
++rangeIndex;}
if(!found||itemsRange.startPosition<range.from){this.allChildren()[insertionIndex-1].setEndPosition(itemsRange.startPosition);insertShowMoreButton.call(this,itemsRange.startPosition,found?range.from:itemsRange.totalLength,insertionIndex);range={from:itemsRange.startPosition,to:itemsRange.startPosition};if(!found){rangeIndex=this._retrievedChildrenRanges.length;}
this._retrievedChildrenRanges.splice(rangeIndex,0,range);}else{insertionIndex+=itemPosition-range.from;}
while(range.to<itemsRange.endPosition){const skipCount=range.to-itemPosition;insertionIndex+=skipCount;itemIndex+=skipCount;itemPosition=range.to;const nextRange=this._retrievedChildrenRanges[rangeIndex+1];let newEndOfRange=nextRange?nextRange.from:itemsRange.totalLength;if(newEndOfRange>itemsRange.endPosition){newEndOfRange=itemsRange.endPosition;}
while(itemPosition<newEndOfRange){insertRetrievedChild.call(this,items[itemIndex++],insertionIndex++);++itemPosition;}
if(nextRange&&newEndOfRange===nextRange.from){range.to=nextRange.to;this.removeChildByIndex(insertionIndex);this._retrievedChildrenRanges.splice(rangeIndex+1,1);}else{range.to=newEndOfRange;if(newEndOfRange===itemsRange.totalLength){this.removeChildByIndex(insertionIndex);}else{this.allChildren()[insertionIndex].setStartPosition(itemsRange.endPosition);}}}}
this._instanceCount+=items.length;if(firstNotSerializedPosition<toPosition){serializeNextChunk.call(this);return;}
if(this.expanded){this._dataGrid.updateVisibleNodes(true);}
afterPopulate();this.dispatchEventToListeners(Profiler.HeapSnapshotGridNode.Events.PopulateComplete);}}
_saveChildren(){this._savedChildren=null;const children=this.allChildren();for(let i=0,l=children.length;i<l;++i){const child=children[i];if(!child.expanded){continue;}
if(!this._savedChildren){this._savedChildren={};}
this._savedChildren[this._childHashForNode(child)]=child;}}
async sort(){this._dataGrid.recursiveSortingEnter();await this._provider().sortAndRewind(this.comparator());this._saveChildren();this._dataGrid.removeAllChildren(this);this._retrievedChildrenRanges=[];const instanceCount=this._instanceCount;this._instanceCount=0;await this._populateChildren(0,instanceCount);for(const child of this.allChildren()){if(child.expanded){child.sort();}}
this._dataGrid.recursiveSortingLeave();}};Profiler.HeapSnapshotGridNode.Events={PopulateComplete:Symbol('PopulateComplete')};Profiler.HeapSnapshotGridNode.ChildrenProvider=function(){};Profiler.HeapSnapshotGridNode.ChildrenProvider.prototype={dispose(){},nodePosition(snapshotObjectId){},isEmpty(){},serializeItemsRange(startPosition,endPosition){},sortAndRewind(comparator){}};Profiler.HeapSnapshotGenericObjectNode=class extends Profiler.HeapSnapshotGridNode{constructor(dataGrid,node){super(dataGrid,false);if(!node){return;}
this._name=node.name;this._type=node.type;this._distance=node.distance;this._shallowSize=node.selfSize;this._retainedSize=node.retainedSize;this.snapshotNodeId=node.id;this.snapshotNodeIndex=node.nodeIndex;if(this._type==='string'){this._reachableFromWindow=true;}else if(this._type==='object'&&this._name.startsWith('Window')){this._name=this.shortenWindowURL(this._name,false);this._reachableFromWindow=true;}else if(node.canBeQueried){this._reachableFromWindow=true;}
if(node.detachedDOMTreeNode){this.detachedDOMTreeNode=true;}
const snapshot=dataGrid.snapshot;const shallowSizePercent=this._shallowSize/snapshot.totalSize*100.0;const retainedSizePercent=this._retainedSize/snapshot.totalSize*100.0;this.data={'distance':this._toUIDistance(this._distance),'shallowSize':Number.withThousandsSeparator(this._shallowSize),'retainedSize':Number.withThousandsSeparator(this._retainedSize),'shallowSize-percent':this._toPercentString(shallowSizePercent),'retainedSize-percent':this._toPercentString(retainedSizePercent)};}
retainersDataSource(){return{snapshot:this._dataGrid.snapshot,snapshotNodeIndex:this.snapshotNodeIndex};}
createCell(columnId){const cell=columnId!=='object'?this._createValueCell(columnId):this._createObjectCell();if(this._searchMatched){cell.classList.add('highlight');}
return cell;}
_createObjectCell(){let value=this._name;let valueStyle='object';switch(this._type){case'concatenated string':case'string':value=`"${value}"`;valueStyle='string';break;case'regexp':value=`/${value}/`;valueStyle='string';break;case'closure':value=`${value}()`;valueStyle='function';break;case'bigint':valueStyle='bigint';break;case'number':valueStyle='number';break;case'hidden':valueStyle='null';break;case'array':value=value?`${value}[]`:ls`(internal array)[]`;break;}
return this._createObjectCellWithValue(valueStyle,value);}
_createObjectCellWithValue(valueStyle,value){const fragment=UI.Fragment.build`
        <td class="object-column disclosure">
          <div class="source-code event-properties" style="overflow: visible" $="container">
            <span class="value object-value-${valueStyle}">${value}</span>
            <span class="object-value-id">@${this.snapshotNodeId}</span>
          </div>
        </td>`;const div=fragment.$('container');this._prefixObjectCell(div);if(this._reachableFromWindow){div.appendChild(UI.html`<span class="heap-object-tag" title="${ls`User object reachable from window`}">🗖</span>`);}
if(this.detachedDOMTreeNode){div.appendChild(UI.html`<span class="heap-object-tag" title="${ls`Detached from DOM tree`}">✀</span>`);}
this._appendSourceLocation(div);const cell=fragment.element();if(this.depth){cell.style.setProperty('padding-left',(this.depth*this.dataGrid.indentWidth)+'px');}
cell.heapSnapshotNode=this;return cell;}
_prefixObjectCell(div){}
async _appendSourceLocation(div){const linkContainer=UI.html`<span class="heap-object-source-link" />`;div.appendChild(linkContainer);const link=await this._dataGrid.dataDisplayDelegate().linkifyObject(this.snapshotNodeIndex);if(link){linkContainer.appendChild(link);this.linkElement=link;}else{linkContainer.remove();}}
async queryObjectContent(heapProfilerModel,objectGroupName){const remoteObject=await this.tryQueryObjectContent(heapProfilerModel,objectGroupName);return remoteObject||heapProfilerModel.runtimeModel().createRemoteObjectFromPrimitiveValue(ls`Preview is not available`);}
async tryQueryObjectContent(heapProfilerModel,objectGroupName){if(this._type==='string'){return heapProfilerModel.runtimeModel().createRemoteObjectFromPrimitiveValue(this._name);}
return await heapProfilerModel.objectForSnapshotObjectId(String(this.snapshotNodeId),objectGroupName);}
async updateHasChildren(){const isEmpty=await this._provider().isEmpty();this.setHasChildren(!isEmpty);}
shortenWindowURL(fullName,hasObjectId){const startPos=fullName.indexOf('/');const endPos=hasObjectId?fullName.indexOf('@'):fullName.length;if(startPos===-1||endPos===-1){return fullName;}
const fullURL=fullName.substring(startPos+1,endPos).trimLeft();let url=fullURL.trimURL();if(url.length>40){url=url.trimMiddle(40);}
return fullName.substr(0,startPos+2)+url+fullName.substr(endPos);}
populateContextMenu(contextMenu,dataDisplayDelegate,heapProfilerModel){contextMenu.revealSection().appendItem(ls`Reveal in Summary view`,()=>{dataDisplayDelegate.showObject(String(this.snapshotNodeId),ls`Summary`);});if(this._referenceName){for(const match of this._referenceName.matchAll(/\((?<objectName>[^@)]*) @(?<snapshotNodeId>\d+)\)/g)){const{objectName,snapshotNodeId}=(match.groups);contextMenu.revealSection().appendItem(ls`Reveal object '${objectName}' with id @${snapshotNodeId} in Summary view`,()=>{dataDisplayDelegate.showObject(snapshotNodeId,ls`Summary`);});}}
if(heapProfilerModel){contextMenu.revealSection().appendItem(ls`Store as global variable`,async()=>{const remoteObject=await this.tryQueryObjectContent((heapProfilerModel),'');if(!remoteObject){Common.console.error(ls`Preview is not available`);}else{await SDK.consoleModel.saveToTempVariable(UI.context.flavor(SDK.ExecutionContext),remoteObject);}});}}};Profiler.HeapSnapshotObjectNode=class extends Profiler.HeapSnapshotGenericObjectNode{constructor(dataGrid,snapshot,edge,parentObjectNode){super(dataGrid,edge.node);this._referenceName=edge.name;this._referenceType=edge.type;this._edgeIndex=edge.edgeIndex;this._snapshot=snapshot;this._parentObjectNode=parentObjectNode;this._cycledWithAncestorGridNode=this._findAncestorWithSameSnapshotNodeId();if(!this._cycledWithAncestorGridNode){this.updateHasChildren();}
const data=this.data;data['count']='';data['addedCount']='';data['removedCount']='';data['countDelta']='';data['addedSize']='';data['removedSize']='';data['sizeDelta']='';}
retainersDataSource(){return{snapshot:this._snapshot,snapshotNodeIndex:this.snapshotNodeIndex};}
createProvider(){return this._snapshot.createEdgesProvider(this.snapshotNodeIndex);}
_findAncestorWithSameSnapshotNodeId(){let ancestor=this._parentObjectNode;while(ancestor){if(ancestor.snapshotNodeId===this.snapshotNodeId){return ancestor;}
ancestor=ancestor._parentObjectNode;}
return null;}
_createChildNode(item){return new Profiler.HeapSnapshotObjectNode(this._dataGrid,this._snapshot,item,this);}
_childHashForEntity(edge){return edge.edgeIndex;}
_childHashForNode(childNode){return childNode._edgeIndex;}
comparator(){const sortAscending=this._dataGrid.isSortOrderAscending();const sortColumnId=this._dataGrid.sortColumnId();const sortFields={object:['!edgeName',sortAscending,'retainedSize',false],count:['!edgeName',true,'retainedSize',false],shallowSize:['selfSize',sortAscending,'!edgeName',true],retainedSize:['retainedSize',sortAscending,'!edgeName',true],distance:['distance',sortAscending,'_name',true]}[sortColumnId]||['!edgeName',true,'retainedSize',false];return Profiler.HeapSnapshotGridNode.createComparator(sortFields);}
_prefixObjectCell(div){let name=this._referenceName||'(empty)';let nameClass='name';switch(this._referenceType){case'context':nameClass='object-value-number';break;case'internal':case'hidden':case'weak':nameClass='object-value-null';break;case'element':name=`[${name}]`;break;}
if(this._cycledWithAncestorGridNode){div.classList.add('cycled-ancessor-node');}
div.prepend(UI.html`<span class="${nameClass}">${name}</span>
                        <span class="grayed">${this._edgeNodeSeparator()}</span>`);}
_edgeNodeSeparator(){return'::';}};Profiler.HeapSnapshotRetainingObjectNode=class extends Profiler.HeapSnapshotObjectNode{constructor(dataGrid,snapshot,edge,parentRetainingObjectNode){super(dataGrid,snapshot,edge,parentRetainingObjectNode);}
createProvider(){return this._snapshot.createRetainingEdgesProvider(this.snapshotNodeIndex);}
_createChildNode(item){return new Profiler.HeapSnapshotRetainingObjectNode(this._dataGrid,this._snapshot,item,this);}
_edgeNodeSeparator(){return ls`in`;}
expand(){this._expandRetainersChain(20);}
_expandRetainersChain(maxExpandLevels){if(!this._populated){this.once(Profiler.HeapSnapshotGridNode.Events.PopulateComplete).then(()=>this._expandRetainersChain(maxExpandLevels));this.populate();return;}
super.expand();if(--maxExpandLevels>0&&this.children.length>0){const retainer=this.children[0];if(retainer._distance>1){retainer._expandRetainersChain(maxExpandLevels);return;}}
this._dataGrid.dispatchEventToListeners(Profiler.HeapSnapshotRetainmentDataGrid.Events.ExpandRetainersComplete);}};Profiler.HeapSnapshotInstanceNode=class extends Profiler.HeapSnapshotGenericObjectNode{constructor(dataGrid,snapshot,node,isDeletedNode){super(dataGrid,node);this._baseSnapshotOrSnapshot=snapshot;this._isDeletedNode=isDeletedNode;this.updateHasChildren();const data=this.data;data['count']='';data['countDelta']='';data['sizeDelta']='';if(this._isDeletedNode){data['addedCount']='';data['addedSize']='';data['removedCount']='\u2022';data['removedSize']=Number.withThousandsSeparator(this._shallowSize);}else{data['addedCount']='\u2022';data['addedSize']=Number.withThousandsSeparator(this._shallowSize);data['removedCount']='';data['removedSize']='';}}
retainersDataSource(){return{snapshot:this._baseSnapshotOrSnapshot,snapshotNodeIndex:this.snapshotNodeIndex};}
createProvider(){return this._baseSnapshotOrSnapshot.createEdgesProvider(this.snapshotNodeIndex);}
_createChildNode(item){return new Profiler.HeapSnapshotObjectNode(this._dataGrid,this._baseSnapshotOrSnapshot,item,null);}
_childHashForEntity(edge){return edge.edgeIndex;}
_childHashForNode(childNode){return childNode._edgeIndex;}
comparator(){const sortAscending=this._dataGrid.isSortOrderAscending();const sortColumnId=this._dataGrid.sortColumnId();const sortFields={object:['!edgeName',sortAscending,'retainedSize',false],distance:['distance',sortAscending,'retainedSize',false],count:['!edgeName',true,'retainedSize',false],addedSize:['selfSize',sortAscending,'!edgeName',true],removedSize:['selfSize',sortAscending,'!edgeName',true],shallowSize:['selfSize',sortAscending,'!edgeName',true],retainedSize:['retainedSize',sortAscending,'!edgeName',true]}[sortColumnId]||['!edgeName',true,'retainedSize',false];return Profiler.HeapSnapshotGridNode.createComparator(sortFields);}};Profiler.HeapSnapshotConstructorNode=class extends Profiler.HeapSnapshotGridNode{constructor(dataGrid,className,aggregate,nodeFilter){super(dataGrid,aggregate.count>0);this._name=className;this._nodeFilter=nodeFilter;this._distance=aggregate.distance;this._count=aggregate.count;this._shallowSize=aggregate.self;this._retainedSize=aggregate.maxRet;const snapshot=dataGrid.snapshot;const retainedSizePercent=this._retainedSize/snapshot.totalSize*100.0;const shallowSizePercent=this._shallowSize/snapshot.totalSize*100.0;this.data={'object':className,'count':Number.withThousandsSeparator(this._count),'distance':this._toUIDistance(this._distance),'shallowSize':Number.withThousandsSeparator(this._shallowSize),'retainedSize':Number.withThousandsSeparator(this._retainedSize),'shallowSize-percent':this._toPercentString(shallowSizePercent),'retainedSize-percent':this._toPercentString(retainedSizePercent)};}
createProvider(){return this._dataGrid.snapshot.createNodesProviderForClass(this._name,this._nodeFilter);}
async populateNodeBySnapshotObjectId(snapshotObjectId){this._dataGrid.resetNameFilter();await this.expandWithoutPopulate();const nodePosition=await this._provider().nodePosition(snapshotObjectId);if(nodePosition===-1){this.collapse();return[];}
await this._populateChildren(nodePosition,null);const node=(this.childForPosition(nodePosition));return node?[this,node]:[];}
filteredOut(filterValue){return this._name.toLowerCase().indexOf(filterValue)===-1;}
createCell(columnId){const cell=columnId==='object'?super.createCell(columnId):this._createValueCell(columnId);if(columnId==='object'&&this._count>1){cell.appendChild(UI.html`<span class="objects-count">×${this._count}</span>`);}
if(this._searchMatched){cell.classList.add('highlight');}
return cell;}
_createChildNode(item){return new Profiler.HeapSnapshotInstanceNode(this._dataGrid,this._dataGrid.snapshot,item,false);}
comparator(){const sortAscending=this._dataGrid.isSortOrderAscending();const sortColumnId=this._dataGrid.sortColumnId();const sortFields={object:['name',sortAscending,'id',true],distance:['distance',sortAscending,'retainedSize',false],shallowSize:['selfSize',sortAscending,'id',true],retainedSize:['retainedSize',sortAscending,'id',true]}[sortColumnId];return Profiler.HeapSnapshotGridNode.createComparator(sortFields);}
_childHashForEntity(node){return node.id;}
_childHashForNode(childNode){return childNode.snapshotNodeId;}};Profiler.HeapSnapshotDiffNodesProvider=class{constructor(addedNodesProvider,deletedNodesProvider,addedCount,removedCount){this._addedNodesProvider=addedNodesProvider;this._deletedNodesProvider=deletedNodesProvider;this._addedCount=addedCount;this._removedCount=removedCount;}
dispose(){this._addedNodesProvider.dispose();this._deletedNodesProvider.dispose();}
nodePosition(snapshotObjectId){throw new Error('Unreachable');}
isEmpty(){return Promise.resolve(false);}
async serializeItemsRange(beginPosition,endPosition){let itemsRange;let addedItems;if(beginPosition<this._addedCount){itemsRange=await this._addedNodesProvider.serializeItemsRange(beginPosition,endPosition);for(const item of itemsRange.items){item.isAddedNotRemoved=true;}
if(itemsRange.endPosition>=endPosition){itemsRange.totalLength=this._addedCount+this._removedCount;return itemsRange;}
addedItems=itemsRange;itemsRange=await this._deletedNodesProvider.serializeItemsRange(0,endPosition-itemsRange.endPosition);}else{addedItems=new HeapSnapshotModel.ItemsRange(0,0,0,[]);itemsRange=await this._deletedNodesProvider.serializeItemsRange(beginPosition-this._addedCount,endPosition-this._addedCount);}
if(!addedItems.items.length){addedItems.startPosition=this._addedCount+itemsRange.startPosition;}
for(const item of itemsRange.items){item.isAddedNotRemoved=false;}
addedItems.items.pushAll(itemsRange.items);addedItems.endPosition=this._addedCount+itemsRange.endPosition;addedItems.totalLength=this._addedCount+this._removedCount;return addedItems;}
async sortAndRewind(comparator){await this._addedNodesProvider.sortAndRewind(comparator);await this._deletedNodesProvider.sortAndRewind(comparator);}};Profiler.HeapSnapshotDiffNode=class extends Profiler.HeapSnapshotGridNode{constructor(dataGrid,className,diffForClass){super(dataGrid,true);this._name=className;this._addedCount=diffForClass.addedCount;this._removedCount=diffForClass.removedCount;this._countDelta=diffForClass.countDelta;this._addedSize=diffForClass.addedSize;this._removedSize=diffForClass.removedSize;this._sizeDelta=diffForClass.sizeDelta;this._deletedIndexes=diffForClass.deletedIndexes;this.data={'object':className,'addedCount':Number.withThousandsSeparator(this._addedCount),'removedCount':Number.withThousandsSeparator(this._removedCount),'countDelta':this._signForDelta(this._countDelta)+Number.withThousandsSeparator(Math.abs(this._countDelta)),'addedSize':Number.withThousandsSeparator(this._addedSize),'removedSize':Number.withThousandsSeparator(this._removedSize),'sizeDelta':this._signForDelta(this._sizeDelta)+Number.withThousandsSeparator(Math.abs(this._sizeDelta))};}
createProvider(){const tree=this._dataGrid;return new Profiler.HeapSnapshotDiffNodesProvider(tree.snapshot.createAddedNodesProvider(tree.baseSnapshot.uid,this._name),tree.baseSnapshot.createDeletedNodesProvider(this._deletedIndexes),this._addedCount,this._removedCount);}
createCell(columnId){const cell=super.createCell(columnId);if(columnId!=='object'){cell.classList.add('numeric-column');}
return cell;}
_createChildNode(item){if(item.isAddedNotRemoved){return new Profiler.HeapSnapshotInstanceNode(this._dataGrid,this._dataGrid.snapshot,item,false);}else{return new Profiler.HeapSnapshotInstanceNode(this._dataGrid,this._dataGrid.baseSnapshot,item,true);}}
_childHashForEntity(node){return node.id;}
_childHashForNode(childNode){return childNode.snapshotNodeId;}
comparator(){const sortAscending=this._dataGrid.isSortOrderAscending();const sortColumnId=this._dataGrid.sortColumnId();const sortFields={object:['name',sortAscending,'id',true],addedCount:['name',true,'id',true],removedCount:['name',true,'id',true],countDelta:['name',true,'id',true],addedSize:['selfSize',sortAscending,'id',true],removedSize:['selfSize',sortAscending,'id',true],sizeDelta:['selfSize',sortAscending,'id',true]}[sortColumnId];return Profiler.HeapSnapshotGridNode.createComparator(sortFields);}
filteredOut(filterValue){return this._name.toLowerCase().indexOf(filterValue)===-1;}
_signForDelta(delta){if(delta===0){return'';}
if(delta>0){return'+';}else{return'\u2212';}}};Profiler.AllocationGridNode=class extends Profiler.HeapSnapshotGridNode{constructor(dataGrid,data){super(dataGrid,data.hasChildren);this._populated=false;this._allocationNode=data;this.data={'liveCount':Number.withThousandsSeparator(data.liveCount),'count':Number.withThousandsSeparator(data.count),'liveSize':Number.withThousandsSeparator(data.liveSize),'size':Number.withThousandsSeparator(data.size),'name':data.name};}
populate(){if(this._populated){return;}
this._doPopulate();}
async _doPopulate(){this._populated=true;const callers=await this._dataGrid.snapshot.allocationNodeCallers(this._allocationNode.id);const callersChain=callers.nodesWithSingleCaller;let parentNode=this;const dataGrid=(this._dataGrid);for(const caller of callersChain){const child=new Profiler.AllocationGridNode(dataGrid,caller);dataGrid.appendNode(parentNode,child);parentNode=child;parentNode._populated=true;if(this.expanded){parentNode.expand();}}
const callersBranch=callers.branchingCallers;callersBranch.sort(this._dataGrid._createComparator());for(const caller of callersBranch){dataGrid.appendNode(parentNode,new Profiler.AllocationGridNode(dataGrid,caller));}
dataGrid.updateVisibleNodes(true);}
expand(){super.expand();if(this.children.length===1){this.children[0].expand();}}
createCell(columnId){if(columnId!=='name'){return this._createValueCell(columnId);}
const cell=super.createCell(columnId);const allocationNode=this._allocationNode;const heapProfilerModel=this._dataGrid.heapProfilerModel();if(allocationNode.scriptId){const linkifier=this._dataGrid._linkifier;const urlElement=linkifier.linkifyScriptLocation(heapProfilerModel?heapProfilerModel.target():null,String(allocationNode.scriptId),allocationNode.scriptName,allocationNode.line-1,allocationNode.column-1,'profile-node-file');urlElement.style.maxWidth='75%';cell.insertBefore(urlElement,cell.firstChild);}
return cell;}
allocationNodeId(){return this._allocationNode.id;}};;Profiler.HeapSnapshotView=class extends UI.SimpleView{constructor(dataDisplayDelegate,profile){super(Common.UIString('Heap Snapshot'));this.element.classList.add('heap-snapshot-view');this._profile=profile;this._linkifier=new Components.Linkifier();const profileType=profile.profileType();profileType.addEventListener(Profiler.HeapSnapshotProfileType.SnapshotReceived,this._onReceiveSnapshot,this);profileType.addEventListener(Profiler.ProfileType.Events.RemoveProfileHeader,this._onProfileHeaderRemoved,this);const isHeapTimeline=profileType.id===Profiler.TrackingHeapSnapshotProfileType.TypeId;if(isHeapTimeline){this._createOverview();}
this._parentDataDisplayDelegate=dataDisplayDelegate;this._searchableView=new UI.SearchableView(this);this._searchableView.show(this.element);this._splitWidget=new UI.SplitWidget(false,true,'heapSnapshotSplitViewState',200,200);this._splitWidget.show(this._searchableView.element);const heapProfilerModel=profile.heapProfilerModel();this._containmentDataGrid=new Profiler.HeapSnapshotContainmentDataGrid(heapProfilerModel,this);this._containmentDataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._selectionChanged,this);this._containmentWidget=this._containmentDataGrid.asWidget();this._containmentWidget.setMinimumSize(50,25);this._statisticsView=new Profiler.HeapSnapshotStatisticsView();this._constructorsDataGrid=new Profiler.HeapSnapshotConstructorsDataGrid(heapProfilerModel,this);this._constructorsDataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._selectionChanged,this);this._constructorsWidget=this._constructorsDataGrid.asWidget();this._constructorsWidget.setMinimumSize(50,25);this._diffDataGrid=new Profiler.HeapSnapshotDiffDataGrid(heapProfilerModel,this);this._diffDataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._selectionChanged,this);this._diffWidget=this._diffDataGrid.asWidget();this._diffWidget.setMinimumSize(50,25);if(isHeapTimeline){this._allocationDataGrid=new Profiler.AllocationDataGrid(heapProfilerModel,this);this._allocationDataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._onSelectAllocationNode,this);this._allocationWidget=this._allocationDataGrid.asWidget();this._allocationWidget.setMinimumSize(50,25);this._allocationStackView=new Profiler.HeapAllocationStackView(heapProfilerModel);this._allocationStackView.setMinimumSize(50,25);this._tabbedPane=new UI.TabbedPane();}
this._retainmentDataGrid=new Profiler.HeapSnapshotRetainmentDataGrid(heapProfilerModel,this);this._retainmentWidget=this._retainmentDataGrid.asWidget();this._retainmentWidget.setMinimumSize(50,21);this._retainmentWidget.element.classList.add('retaining-paths-view');let splitWidgetResizer;if(this._allocationStackView){this._tabbedPane=new UI.TabbedPane();this._tabbedPane.appendTab('retainers',Common.UIString('Retainers'),this._retainmentWidget);this._tabbedPane.appendTab('allocation-stack',Common.UIString('Allocation stack'),this._allocationStackView);splitWidgetResizer=this._tabbedPane.headerElement();this._objectDetailsView=this._tabbedPane;}else{const retainmentViewHeader=createElementWithClass('div','heap-snapshot-view-resizer');const retainingPathsTitleDiv=retainmentViewHeader.createChild('div','title');const retainingPathsTitle=retainingPathsTitleDiv.createChild('span');retainingPathsTitle.textContent=Common.UIString('Retainers');splitWidgetResizer=retainmentViewHeader;this._objectDetailsView=new UI.VBox();this._objectDetailsView.element.appendChild(retainmentViewHeader);this._retainmentWidget.show(this._objectDetailsView.element);}
this._splitWidget.hideDefaultResizer();this._splitWidget.installResizer(splitWidgetResizer);this._retainmentDataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._inspectedObjectChanged,this);this._retainmentDataGrid.reset();this._perspectives=[];this._comparisonPerspective=new Profiler.HeapSnapshotView.ComparisonPerspective();this._perspectives.push(new Profiler.HeapSnapshotView.SummaryPerspective());if(profile.profileType()!==Profiler.ProfileTypeRegistry.instance.trackingHeapSnapshotProfileType){this._perspectives.push(this._comparisonPerspective);}
this._perspectives.push(new Profiler.HeapSnapshotView.ContainmentPerspective());if(this._allocationWidget){this._perspectives.push(new Profiler.HeapSnapshotView.AllocationPerspective());}
this._perspectives.push(new Profiler.HeapSnapshotView.StatisticsPerspective());this._perspectiveSelect=new UI.ToolbarComboBox(this._onSelectedPerspectiveChanged.bind(this),ls`Perspective`);this._updatePerspectiveOptions();this._baseSelect=new UI.ToolbarComboBox(this._changeBase.bind(this),ls`Base snapshot`);this._baseSelect.setVisible(false);this._updateBaseOptions();this._filterSelect=new UI.ToolbarComboBox(this._changeFilter.bind(this),ls`Filter`);this._filterSelect.setVisible(false);this._updateFilterOptions();this._classNameFilter=new UI.ToolbarInput(ls`Class filter`);this._classNameFilter.setVisible(false);this._constructorsDataGrid.setNameFilter(this._classNameFilter);this._diffDataGrid.setNameFilter(this._classNameFilter);this._selectedSizeText=new UI.ToolbarText();this._popoverHelper=new UI.PopoverHelper(this.element,this._getPopoverRequest.bind(this));this._popoverHelper.setDisableOnClick(true);this._popoverHelper.setHasPadding(true);this.element.addEventListener('scroll',this._popoverHelper.hidePopover.bind(this._popoverHelper),true);this._currentPerspectiveIndex=0;this._currentPerspective=this._perspectives[0];this._currentPerspective.activate(this);this._dataGrid=this._currentPerspective.masterGrid(this);this._populate();this._searchThrottler=new Common.Throttler(0);for(const existingProfile of this._profiles()){existingProfile.addEventListener(Profiler.ProfileHeader.Events.ProfileTitleChanged,this._updateControls,this);}}
_createOverview(){const profileType=this._profile.profileType();this._trackingOverviewGrid=new Profiler.HeapTimelineOverview();this._trackingOverviewGrid.addEventListener(Profiler.HeapTimelineOverview.IdsRangeChanged,this._onIdsRangeChanged.bind(this));if(!this._profile.fromFile()&&profileType.profileBeingRecorded()===this._profile){profileType.addEventListener(Profiler.TrackingHeapSnapshotProfileType.HeapStatsUpdate,this._onHeapStatsUpdate,this);profileType.addEventListener(Profiler.TrackingHeapSnapshotProfileType.TrackingStopped,this._onStopTracking,this);this._trackingOverviewGrid.start();}}
_onStopTracking(){this._profile.profileType().removeEventListener(Profiler.TrackingHeapSnapshotProfileType.HeapStatsUpdate,this._onHeapStatsUpdate,this);this._profile.profileType().removeEventListener(Profiler.TrackingHeapSnapshotProfileType.TrackingStopped,this._onStopTracking,this);if(this._trackingOverviewGrid){this._trackingOverviewGrid.stop();}}
_onHeapStatsUpdate(event){const samples=event.data;if(samples){this._trackingOverviewGrid.setSamples(event.data);}}
searchableView(){return this._searchableView;}
showProfile(profile){return this._parentDataDisplayDelegate.showProfile(profile);}
showObject(snapshotObjectId,perspectiveName){if(snapshotObjectId<=this._profile.maxJSObjectId){this.selectLiveObject(perspectiveName,snapshotObjectId);}else{this._parentDataDisplayDelegate.showObject(snapshotObjectId,perspectiveName);}}
async linkifyObject(nodeIndex){const heapProfilerModel=this._profile.heapProfilerModel();if(!heapProfilerModel){return null;}
const location=await this._profile.getLocation(nodeIndex);if(!location){return null;}
const debuggerModel=heapProfilerModel.runtimeModel().debuggerModel();const rawLocation=debuggerModel.createRawLocationByScriptId(String(location.scriptId),location.lineNumber,location.columnNumber);if(!rawLocation){return null;}
const sourceURL=rawLocation.script()&&rawLocation.script().sourceURL;return sourceURL&&this._linkifier?this._linkifier.linkifyRawLocation(rawLocation,sourceURL):null;}
async _populate(){const heapSnapshotProxy=await this._profile._loadPromise;this._retrieveStatistics(heapSnapshotProxy);this._dataGrid.setDataSource(heapSnapshotProxy);if(this._profile.profileType().id===Profiler.TrackingHeapSnapshotProfileType.TypeId&&this._profile.fromFile()){const samples=await heapSnapshotProxy.getSamples();if(samples){console.assert(samples.timestamps.length);const profileSamples=new Profiler.HeapTimelineOverview.Samples();profileSamples.sizes=samples.sizes;profileSamples.ids=samples.lastAssignedIds;profileSamples.timestamps=samples.timestamps;profileSamples.max=samples.sizes;profileSamples.totalTime=Math.max(samples.timestamps.peekLast(),10000);this._trackingOverviewGrid.setSamples(profileSamples);}}
const list=this._profiles();const profileIndex=list.indexOf(this._profile);this._baseSelect.setSelectedIndex(Math.max(0,profileIndex-1));if(this._trackingOverviewGrid){this._trackingOverviewGrid.updateGrid();}}
async _retrieveStatistics(heapSnapshotProxy){const statistics=await heapSnapshotProxy.getStatistics();this._statisticsView.setTotal(statistics.total);this._statisticsView.addRecord(statistics.code,Common.UIString('Code'),'#f77');this._statisticsView.addRecord(statistics.strings,Common.UIString('Strings'),'#5e5');this._statisticsView.addRecord(statistics.jsArrays,Common.UIString('JS Arrays'),'#7af');this._statisticsView.addRecord(statistics.native,Common.UIString('Typed Arrays'),'#fc5');this._statisticsView.addRecord(statistics.system,Common.UIString('System Objects'),'#98f');return statistics;}
_onIdsRangeChanged(event){const minId=event.data.minId;const maxId=event.data.maxId;this._selectedSizeText.setText(Common.UIString('Selected size: %s',Number.bytesToString(event.data.size)));if(this._constructorsDataGrid.snapshot){this._constructorsDataGrid.setSelectionRange(minId,maxId);}}
syncToolbarItems(){const result=[this._perspectiveSelect,this._classNameFilter];if(this._profile.profileType()!==Profiler.ProfileTypeRegistry.instance.trackingHeapSnapshotProfileType){result.push(this._baseSelect,this._filterSelect);}
result.push(this._selectedSizeText);return result;}
willHide(){this._currentSearchResultIndex=-1;this._popoverHelper.hidePopover();}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return false;}
searchCanceled(){this._currentSearchResultIndex=-1;this._searchResults=[];}
_selectRevealedNode(node){if(node){node.select();}}
performSearch(searchConfig,shouldJump,jumpBackwards){const nextQuery=new HeapSnapshotModel.SearchConfig(searchConfig.query.trim(),searchConfig.caseSensitive,searchConfig.isRegex,shouldJump,jumpBackwards||false);this._searchThrottler.schedule(this._performSearch.bind(this,nextQuery));}
async _performSearch(nextQuery){this.searchCanceled();if(!this._currentPerspective.supportsSearch()){return;}
this.currentQuery=nextQuery;const query=nextQuery.query.trim();if(!query){return;}
if(query.charAt(0)==='@'){const snapshotNodeId=parseInt(query.substring(1),10);if(isNaN(snapshotNodeId)){return;}
const node=await this._dataGrid.revealObjectByHeapSnapshotId(String(snapshotNodeId));this._selectRevealedNode(node);return;}
this._searchResults=await this._profile._snapshotProxy.search(this.currentQuery,this._dataGrid.nodeFilter());this._searchableView.updateSearchMatchesCount(this._searchResults.length);if(this._searchResults.length){this._currentSearchResultIndex=nextQuery.jumpBackwards?this._searchResults.length-1:0;}
await this._jumpToSearchResult(this._currentSearchResultIndex);}
jumpToNextSearchResult(){if(!this._searchResults.length){return;}
this._currentSearchResultIndex=(this._currentSearchResultIndex+1)%this._searchResults.length;this._searchThrottler.schedule(this._jumpToSearchResult.bind(this,this._currentSearchResultIndex));}
jumpToPreviousSearchResult(){if(!this._searchResults.length){return;}
this._currentSearchResultIndex=(this._currentSearchResultIndex+this._searchResults.length-1)%this._searchResults.length;this._searchThrottler.schedule(this._jumpToSearchResult.bind(this,this._currentSearchResultIndex));}
async _jumpToSearchResult(searchResultIndex){this._searchableView.updateCurrentMatchIndex(searchResultIndex);if(searchResultIndex===-1){return;}
const node=await this._dataGrid.revealObjectByHeapSnapshotId(String(this._searchResults[searchResultIndex]));this._selectRevealedNode(node);}
refreshVisibleData(){if(!this._dataGrid){return;}
let child=this._dataGrid.rootNode().children[0];while(child){child.refresh();child=child.traverseNextNode(false,null,true);}}
_changeBase(){if(this._baseProfile===this._profiles()[this._baseSelect.selectedIndex()]){return;}
this._baseProfile=this._profiles()[this._baseSelect.selectedIndex()];const dataGrid=(this._dataGrid);if(dataGrid.snapshot){this._baseProfile._loadPromise.then(dataGrid.setBaseDataSource.bind(dataGrid));}
if(!this.currentQuery||!this._searchResults){return;}
this.performSearch(this.currentQuery,false);}
_changeFilter(){const profileIndex=this._filterSelect.selectedIndex()-1;this._dataGrid.filterSelectIndexChanged(this._profiles(),profileIndex);if(!this.currentQuery||!this._searchResults){return;}
this.performSearch(this.currentQuery,false);}
_profiles(){return this._profile.profileType().getProfiles();}
_selectionChanged(event){const selectedNode=(event.data);this._setSelectedNodeForDetailsView(selectedNode);this._inspectedObjectChanged(event);}
_onSelectAllocationNode(event){const selectedNode=(event.data);this._constructorsDataGrid.setAllocationNodeId(selectedNode.allocationNodeId());this._setSelectedNodeForDetailsView(null);}
_inspectedObjectChanged(event){const selectedNode=(event.data);const heapProfilerModel=this._profile.heapProfilerModel();if(heapProfilerModel&&selectedNode instanceof Profiler.HeapSnapshotGenericObjectNode){heapProfilerModel.addInspectedHeapObject(String(selectedNode.snapshotNodeId));}}
_setSelectedNodeForDetailsView(nodeItem){const dataSource=nodeItem&&nodeItem.retainersDataSource();if(dataSource){this._retainmentDataGrid.setDataSource(dataSource.snapshot,dataSource.snapshotNodeIndex);if(this._allocationStackView){this._allocationStackView.setAllocatedObject(dataSource.snapshot,dataSource.snapshotNodeIndex);}}else{if(this._allocationStackView){this._allocationStackView.clear();}
this._retainmentDataGrid.reset();}}
_changePerspectiveAndWait(perspectiveTitle){const perspectiveIndex=this._perspectives.findIndex(perspective=>perspective.title()===perspectiveTitle);if(perspectiveIndex===-1||this._currentPerspectiveIndex===perspectiveIndex){return Promise.resolve();}
const promise=this._perspectives[perspectiveIndex].masterGrid(this).once(Profiler.HeapSnapshotSortableDataGrid.Events.ContentShown);const option=this._perspectiveSelect.options().find(option=>option.value===String(perspectiveIndex));this._perspectiveSelect.select((option));this._changePerspective(perspectiveIndex);return promise;}
async _updateDataSourceAndView(){const dataGrid=this._dataGrid;if(!dataGrid||dataGrid.snapshot){return;}
const snapshotProxy=await this._profile._loadPromise;if(this._dataGrid!==dataGrid){return;}
if(dataGrid.snapshot!==snapshotProxy){dataGrid.setDataSource(snapshotProxy);}
if(dataGrid!==this._diffDataGrid){return;}
if(!this._baseProfile){this._baseProfile=this._profiles()[this._baseSelect.selectedIndex()];}
const baseSnapshotProxy=await this._baseProfile._loadPromise;if(this._diffDataGrid.baseSnapshot!==baseSnapshotProxy){this._diffDataGrid.setBaseDataSource(baseSnapshotProxy);}}
_onSelectedPerspectiveChanged(event){this._changePerspective(event.target.selectedOptions[0].value);}
_changePerspective(selectedIndex){if(selectedIndex===this._currentPerspectiveIndex){return;}
this._currentPerspectiveIndex=selectedIndex;this._currentPerspective.deactivate(this);const perspective=this._perspectives[selectedIndex];this._currentPerspective=perspective;this._dataGrid=perspective.masterGrid(this);perspective.activate(this);this.refreshVisibleData();if(this._dataGrid){this._dataGrid.updateWidths();}
this._updateDataSourceAndView();if(!this.currentQuery||!this._searchResults){return;}
this.performSearch(this.currentQuery,false);}
async selectLiveObject(perspectiveName,snapshotObjectId){await this._changePerspectiveAndWait(perspectiveName);const node=await this._dataGrid.revealObjectByHeapSnapshotId(snapshotObjectId);if(node){node.select();}else{Common.console.error('Cannot find corresponding heap snapshot node');}}
_getPopoverRequest(event){const span=event.target.enclosingNodeOrSelfWithNodeName('span');const row=event.target.enclosingNodeOrSelfWithNodeName('tr');const heapProfilerModel=this._profile.heapProfilerModel();if(!row||!span||!heapProfilerModel){return null;}
const node=row._dataGridNode;let objectPopoverHelper;return{box:span.boxInWindow(),show:async popover=>{const remoteObject=await node.queryObjectContent(heapProfilerModel,'popover');if(!remoteObject){return false;}
objectPopoverHelper=await ObjectUI.ObjectPopoverHelper.buildObjectPopover(remoteObject,popover);if(!objectPopoverHelper){heapProfilerModel.runtimeModel().releaseObjectGroup('popover');return false;}
return true;},hide:()=>{heapProfilerModel.runtimeModel().releaseObjectGroup('popover');objectPopoverHelper.dispose();}};}
_updatePerspectiveOptions(){const multipleSnapshots=this._profiles().length>1;this._perspectiveSelect.removeOptions();this._perspectives.forEach((perspective,index)=>{if(multipleSnapshots||perspective!==this._comparisonPerspective){this._perspectiveSelect.createOption(perspective.title(),String(index));}});}
_updateBaseOptions(){const list=this._profiles();const selectedIndex=this._baseSelect.selectedIndex();this._baseSelect.removeOptions();for(const item of list){this._baseSelect.createOption(item.title);}
if(selectedIndex>-1){this._baseSelect.setSelectedIndex(selectedIndex);}}
_updateFilterOptions(){const list=this._profiles();const selectedIndex=this._filterSelect.selectedIndex();this._filterSelect.removeOptions();this._filterSelect.createOption(Common.UIString('All objects'));for(let i=0;i<list.length;++i){let title;if(!i){title=Common.UIString('Objects allocated before %s',list[i].title);}else{title=Common.UIString('Objects allocated between %s and %s',list[i-1].title,list[i].title);}
this._filterSelect.createOption(title);}
if(selectedIndex>-1){this._filterSelect.setSelectedIndex(selectedIndex);}}
_updateControls(){this._updatePerspectiveOptions();this._updateBaseOptions();this._updateFilterOptions();}
_onReceiveSnapshot(event){this._updateControls();const profile=event.data;profile.addEventListener(Profiler.ProfileHeader.Events.ProfileTitleChanged,this._updateControls,this);}
_onProfileHeaderRemoved(event){const profile=event.data;profile.removeEventListener(Profiler.ProfileHeader.Events.ProfileTitleChanged,this._updateControls,this);if(this._profile===profile){this.detach();this._profile.profileType().removeEventListener(Profiler.HeapSnapshotProfileType.SnapshotReceived,this._onReceiveSnapshot,this);this._profile.profileType().removeEventListener(Profiler.ProfileType.Events.RemoveProfileHeader,this._onProfileHeaderRemoved,this);this.dispose();}else{this._updateControls();}}
dispose(){this._linkifier.dispose();this._popoverHelper.dispose();if(this._allocationStackView){this._allocationStackView.clear();this._allocationDataGrid.dispose();}
this._onStopTracking();if(this._trackingOverviewGrid){this._trackingOverviewGrid.removeEventListener(Profiler.HeapTimelineOverview.IdsRangeChanged,this._onIdsRangeChanged.bind(this));}}};Profiler.HeapSnapshotView.Perspective=class{constructor(title){this._title=title;}
activate(heapSnapshotView){}
deactivate(heapSnapshotView){heapSnapshotView._baseSelect.setVisible(false);heapSnapshotView._filterSelect.setVisible(false);heapSnapshotView._classNameFilter.setVisible(false);if(heapSnapshotView._trackingOverviewGrid){heapSnapshotView._trackingOverviewGrid.detach();}
if(heapSnapshotView._allocationWidget){heapSnapshotView._allocationWidget.detach();}
if(heapSnapshotView._statisticsView){heapSnapshotView._statisticsView.detach();}
heapSnapshotView._splitWidget.detach();heapSnapshotView._splitWidget.detachChildWidgets();}
masterGrid(heapSnapshotView){return null;}
title(){return this._title;}
supportsSearch(){return false;}};Profiler.HeapSnapshotView.SummaryPerspective=class extends Profiler.HeapSnapshotView.Perspective{constructor(){super(Common.UIString('Summary'));}
activate(heapSnapshotView){heapSnapshotView._splitWidget.setMainWidget(heapSnapshotView._constructorsWidget);heapSnapshotView._splitWidget.setSidebarWidget(heapSnapshotView._objectDetailsView);heapSnapshotView._splitWidget.show(heapSnapshotView._searchableView.element);heapSnapshotView._filterSelect.setVisible(true);heapSnapshotView._classNameFilter.setVisible(true);if(!heapSnapshotView._trackingOverviewGrid){return;}
heapSnapshotView._trackingOverviewGrid.show(heapSnapshotView._searchableView.element,heapSnapshotView._splitWidget.element);heapSnapshotView._trackingOverviewGrid.update();heapSnapshotView._trackingOverviewGrid.updateGrid();}
masterGrid(heapSnapshotView){return heapSnapshotView._constructorsDataGrid;}
supportsSearch(){return true;}};Profiler.HeapSnapshotView.ComparisonPerspective=class extends Profiler.HeapSnapshotView.Perspective{constructor(){super(Common.UIString('Comparison'));}
activate(heapSnapshotView){heapSnapshotView._splitWidget.setMainWidget(heapSnapshotView._diffWidget);heapSnapshotView._splitWidget.setSidebarWidget(heapSnapshotView._objectDetailsView);heapSnapshotView._splitWidget.show(heapSnapshotView._searchableView.element);heapSnapshotView._baseSelect.setVisible(true);heapSnapshotView._classNameFilter.setVisible(true);}
masterGrid(heapSnapshotView){return heapSnapshotView._diffDataGrid;}
supportsSearch(){return true;}};Profiler.HeapSnapshotView.ContainmentPerspective=class extends Profiler.HeapSnapshotView.Perspective{constructor(){super(Common.UIString('Containment'));}
activate(heapSnapshotView){heapSnapshotView._splitWidget.setMainWidget(heapSnapshotView._containmentWidget);heapSnapshotView._splitWidget.setSidebarWidget(heapSnapshotView._objectDetailsView);heapSnapshotView._splitWidget.show(heapSnapshotView._searchableView.element);}
masterGrid(heapSnapshotView){return heapSnapshotView._containmentDataGrid;}};Profiler.HeapSnapshotView.AllocationPerspective=class extends Profiler.HeapSnapshotView.Perspective{constructor(){super(Common.UIString('Allocation'));this._allocationSplitWidget=new UI.SplitWidget(false,true,'heapSnapshotAllocationSplitViewState',200,200);this._allocationSplitWidget.setSidebarWidget(new UI.VBox());}
activate(heapSnapshotView){this._allocationSplitWidget.setMainWidget(heapSnapshotView._allocationWidget);heapSnapshotView._splitWidget.setMainWidget(heapSnapshotView._constructorsWidget);heapSnapshotView._splitWidget.setSidebarWidget(heapSnapshotView._objectDetailsView);const allocatedObjectsView=new UI.VBox();const resizer=createElementWithClass('div','heap-snapshot-view-resizer');const title=resizer.createChild('div','title').createChild('span');title.textContent=Common.UIString('Live objects');this._allocationSplitWidget.hideDefaultResizer();this._allocationSplitWidget.installResizer(resizer);allocatedObjectsView.element.appendChild(resizer);heapSnapshotView._splitWidget.show(allocatedObjectsView.element);this._allocationSplitWidget.setSidebarWidget(allocatedObjectsView);this._allocationSplitWidget.show(heapSnapshotView._searchableView.element);heapSnapshotView._constructorsDataGrid.clear();const selectedNode=heapSnapshotView._allocationDataGrid.selectedNode;if(selectedNode){heapSnapshotView._constructorsDataGrid.setAllocationNodeId(selectedNode.allocationNodeId());}}
deactivate(heapSnapshotView){this._allocationSplitWidget.detach();super.deactivate(heapSnapshotView);}
masterGrid(heapSnapshotView){return heapSnapshotView._allocationDataGrid;}};Profiler.HeapSnapshotView.StatisticsPerspective=class extends Profiler.HeapSnapshotView.Perspective{constructor(){super(Common.UIString('Statistics'));}
activate(heapSnapshotView){heapSnapshotView._statisticsView.show(heapSnapshotView._searchableView.element);}
masterGrid(heapSnapshotView){return null;}};Profiler.HeapSnapshotProfileType=class extends Profiler.ProfileType{constructor(id,title){super(id||Profiler.HeapSnapshotProfileType.TypeId,title||ls`Heap snapshot`);SDK.targetManager.observeModels(SDK.HeapProfilerModel,this);SDK.targetManager.addModelListener(SDK.HeapProfilerModel,SDK.HeapProfilerModel.Events.ResetProfiles,this._resetProfiles,this);SDK.targetManager.addModelListener(SDK.HeapProfilerModel,SDK.HeapProfilerModel.Events.AddHeapSnapshotChunk,this._addHeapSnapshotChunk,this);SDK.targetManager.addModelListener(SDK.HeapProfilerModel,SDK.HeapProfilerModel.Events.ReportHeapSnapshotProgress,this._reportHeapSnapshotProgress,this);}
modelAdded(heapProfilerModel){heapProfilerModel.enable();}
modelRemoved(heapProfilerModel){}
getProfiles(){return(super.getProfiles());}
fileExtension(){return'.heapsnapshot';}
get buttonTooltip(){return Common.UIString('Take heap snapshot');}
isInstantProfile(){return true;}
buttonClicked(){this._takeHeapSnapshot();Host.userMetrics.actionTaken(Host.UserMetrics.Action.ProfilesHeapProfileTaken);return false;}
get treeItemTitle(){return Common.UIString('HEAP SNAPSHOTS');}
get description(){return Common.UIString('Heap snapshot profiles show memory distribution among your page\'s JavaScript objects and related DOM nodes.');}
createProfileLoadedFromFile(title){return new Profiler.HeapProfileHeader(null,this,title);}
async _takeHeapSnapshot(){if(this.profileBeingRecorded()){return;}
const heapProfilerModel=UI.context.flavor(SDK.HeapProfilerModel);if(!heapProfilerModel){return;}
let profile=new Profiler.HeapProfileHeader(heapProfilerModel,this);this.setProfileBeingRecorded(profile);this.addProfile(profile);profile.updateStatus(Common.UIString('Snapshotting\u2026'));await heapProfilerModel.takeHeapSnapshot(true);profile=this.profileBeingRecorded();profile.title=Common.UIString('Snapshot %d',profile.uid);profile._finishLoad();this.setProfileBeingRecorded(null);this.dispatchEventToListeners(Profiler.ProfileType.Events.ProfileComplete,profile);}
_addHeapSnapshotChunk(event){if(!this.profileBeingRecorded()){return;}
const chunk=(event.data);this.profileBeingRecorded().transferChunk(chunk);}
_reportHeapSnapshotProgress(event){const profile=this.profileBeingRecorded();if(!profile){return;}
const data=(event.data);profile.updateStatus(Common.UIString('%.0f%%',(data.done/data.total)*100),true);if(data.finished){profile._prepareToLoad();}}
_resetProfiles(event){const heapProfilerModel=(event.data);for(const profile of this.getProfiles()){if(profile.heapProfilerModel()===heapProfilerModel){this.removeProfile(profile);}}}
_snapshotReceived(profile){if(this.profileBeingRecorded()===profile){this.setProfileBeingRecorded(null);}
this.dispatchEventToListeners(Profiler.HeapSnapshotProfileType.SnapshotReceived,profile);}};Profiler.HeapSnapshotProfileType.TypeId='HEAP';Profiler.HeapSnapshotProfileType.SnapshotReceived='SnapshotReceived';Profiler.TrackingHeapSnapshotProfileType=class extends Profiler.HeapSnapshotProfileType{constructor(){super(Profiler.TrackingHeapSnapshotProfileType.TypeId,ls`Allocation instrumentation on timeline`);this._recordAllocationStacksSetting=Common.settings.createSetting('recordAllocationStacks',false);this._customContent=null;}
modelAdded(heapProfilerModel){super.modelAdded(heapProfilerModel);heapProfilerModel.addEventListener(SDK.HeapProfilerModel.Events.HeapStatsUpdate,this._heapStatsUpdate,this);heapProfilerModel.addEventListener(SDK.HeapProfilerModel.Events.LastSeenObjectId,this._lastSeenObjectId,this);}
modelRemoved(heapProfilerModel){super.modelRemoved(heapProfilerModel);heapProfilerModel.removeEventListener(SDK.HeapProfilerModel.Events.HeapStatsUpdate,this._heapStatsUpdate,this);heapProfilerModel.removeEventListener(SDK.HeapProfilerModel.Events.LastSeenObjectId,this._lastSeenObjectId,this);}
_heapStatsUpdate(event){if(!this._profileSamples){return;}
const samples=(event.data);let index;for(let i=0;i<samples.length;i+=3){index=samples[i];const size=samples[i+2];this._profileSamples.sizes[index]=size;if(!this._profileSamples.max[index]){this._profileSamples.max[index]=size;}}}
_lastSeenObjectId(event){const profileSamples=this._profileSamples;if(!profileSamples){return;}
const data=(event.data);const currentIndex=Math.max(profileSamples.ids.length,profileSamples.max.length-1);profileSamples.ids[currentIndex]=data.lastSeenObjectId;if(!profileSamples.max[currentIndex]){profileSamples.max[currentIndex]=0;profileSamples.sizes[currentIndex]=0;}
profileSamples.timestamps[currentIndex]=data.timestamp;if(profileSamples.totalTime<data.timestamp-profileSamples.timestamps[0]){profileSamples.totalTime*=2;}
this.dispatchEventToListeners(Profiler.TrackingHeapSnapshotProfileType.HeapStatsUpdate,this._profileSamples);this.profileBeingRecorded().updateStatus(null,true);}
hasTemporaryView(){return true;}
get buttonTooltip(){return this._recording?ls`Stop recording heap profile`:ls`Start recording heap profile`;}
isInstantProfile(){return false;}
buttonClicked(){return this._toggleRecording();}
_startRecordingProfile(){if(this.profileBeingRecorded()){return;}
const heapProfilerModel=this._addNewProfile();if(!heapProfilerModel){return;}
heapProfilerModel.startTrackingHeapObjects(this._recordAllocationStacksSetting.get());}
customContent(){const checkboxSetting=UI.SettingsUI.createSettingCheckbox(ls`Record allocation stacks (extra performance overhead)`,this._recordAllocationStacksSetting,true);this._customContent=(checkboxSetting);return checkboxSetting;}
setCustomContentEnabled(enable){this._customContent.checkboxElement.disabled=!enable;}
_addNewProfile(){const heapProfilerModel=UI.context.flavor(SDK.HeapProfilerModel);if(!heapProfilerModel){return null;}
this.setProfileBeingRecorded(new Profiler.HeapProfileHeader(heapProfilerModel,this,undefined));this._profileSamples=new Profiler.HeapTimelineOverview.Samples();this.profileBeingRecorded()._profileSamples=this._profileSamples;this._recording=true;this.addProfile((this.profileBeingRecorded()));this.profileBeingRecorded().updateStatus(Common.UIString('Recording\u2026'));this.dispatchEventToListeners(Profiler.TrackingHeapSnapshotProfileType.TrackingStarted);return heapProfilerModel;}
async _stopRecordingProfile(){this.profileBeingRecorded().updateStatus(Common.UIString('Snapshotting\u2026'));const stopPromise=this.profileBeingRecorded().heapProfilerModel().stopTrackingHeapObjects(true);this._recording=false;this.dispatchEventToListeners(Profiler.TrackingHeapSnapshotProfileType.TrackingStopped);await stopPromise;const profile=this.profileBeingRecorded();if(!profile){return;}
profile._finishLoad();this._profileSamples=null;this.setProfileBeingRecorded(null);this.dispatchEventToListeners(Profiler.ProfileType.Events.ProfileComplete,profile);}
_toggleRecording(){if(this._recording){this._stopRecordingProfile();}else{this._startRecordingProfile();}
return this._recording;}
fileExtension(){return'.heaptimeline';}
get treeItemTitle(){return ls`ALLOCATION TIMELINES`;}
get description(){return ls`
        Allocation timelines show instrumented JavaScript memory allocations over time.
        Once profile is recorded you can select a time interval to see objects that
        were allocated within it and still alive by the end of recording.
        Use this profile type to isolate memory leaks.`;}
_resetProfiles(event){const wasRecording=this._recording;this.setProfileBeingRecorded(null);super._resetProfiles(event);this._profileSamples=null;if(wasRecording){this._addNewProfile();}}
profileBeingRecordedRemoved(){this._stopRecordingProfile();this._profileSamples=null;}};Profiler.TrackingHeapSnapshotProfileType.TypeId='HEAP-RECORD';Profiler.TrackingHeapSnapshotProfileType.HeapStatsUpdate='HeapStatsUpdate';Profiler.TrackingHeapSnapshotProfileType.TrackingStarted='TrackingStarted';Profiler.TrackingHeapSnapshotProfileType.TrackingStopped='TrackingStopped';Profiler.HeapProfileHeader=class extends Profiler.ProfileHeader{constructor(heapProfilerModel,type,title){super(type,title||Common.UIString('Snapshot %d',type.nextProfileUid()));this._heapProfilerModel=heapProfilerModel;this.maxJSObjectId=-1;this._workerProxy=null;this._receiver=null;this._snapshotProxy=null;this._loadPromise=new Promise(resolve=>this._fulfillLoad=resolve);this._totalNumberOfChunks=0;this._bufferedWriter=null;this._tempFile=null;}
heapProfilerModel(){return this._heapProfilerModel;}
getLocation(nodeIndex){return this._snapshotProxy.getLocation(nodeIndex);}
createSidebarTreeElement(dataDisplayDelegate){return new Profiler.ProfileSidebarTreeElement(dataDisplayDelegate,this,'heap-snapshot-sidebar-tree-item');}
createView(dataDisplayDelegate){return new Profiler.HeapSnapshotView(dataDisplayDelegate,this);}
_prepareToLoad(){console.assert(!this._receiver,'Already loading');this._setupWorker();this.updateStatus(Common.UIString('Loading\u2026'),true);}
_finishLoad(){if(!this._wasDisposed){this._receiver.close();}
if(!this._bufferedWriter){return;}
this._didWriteToTempFile(this._bufferedWriter);}
_didWriteToTempFile(tempFile){if(this._wasDisposed){if(tempFile){tempFile.remove();}
return;}
this._tempFile=tempFile;if(!tempFile){this._failedToCreateTempFile=true;}
if(this._onTempFileReady){this._onTempFileReady();this._onTempFileReady=null;}}
_setupWorker(){function setProfileWait(event){this.updateStatus(null,event.data);}
console.assert(!this._workerProxy,'HeapSnapshotWorkerProxy already exists');this._workerProxy=new Profiler.HeapSnapshotWorkerProxy(this._handleWorkerEvent.bind(this));this._workerProxy.addEventListener(Profiler.HeapSnapshotWorkerProxy.Events.Wait,setProfileWait,this);this._receiver=this._workerProxy.createLoader(this.uid,this._snapshotReceived.bind(this));}
_handleWorkerEvent(eventName,data){if(HeapSnapshotModel.HeapSnapshotProgressEvent.BrokenSnapshot===eventName){const error=(data);Common.console.error(error);return;}
if(HeapSnapshotModel.HeapSnapshotProgressEvent.Update!==eventName){return;}
const serializedMessage=(data);const messageObject=Common.deserializeUIString(serializedMessage);this.updateStatus(ls(messageObject.messageParts,messageObject.values));}
dispose(){if(this._workerProxy){this._workerProxy.dispose();}
this.removeTempFile();this._wasDisposed=true;}
_didCompleteSnapshotTransfer(){if(!this._snapshotProxy){return;}
this.updateStatus(Number.bytesToString(this._snapshotProxy.totalSize),false);}
transferChunk(chunk){if(!this._bufferedWriter){this._bufferedWriter=new Bindings.TempFile();}
this._bufferedWriter.write([chunk]);++this._totalNumberOfChunks;this._receiver.write(chunk);}
_snapshotReceived(snapshotProxy){if(this._wasDisposed){return;}
this._receiver=null;this._snapshotProxy=snapshotProxy;this.maxJSObjectId=snapshotProxy.maxJSObjectId();this._didCompleteSnapshotTransfer();this._workerProxy.startCheckingForLongRunningCalls();this.notifySnapshotReceived();}
notifySnapshotReceived(){this._fulfillLoad(this._snapshotProxy);this.profileType()._snapshotReceived(this);if(this.canSaveToFile()){this.dispatchEventToListeners(Profiler.ProfileHeader.Events.ProfileReceived);}}
canSaveToFile(){return!this.fromFile()&&!!this._snapshotProxy;}
saveToFile(){const fileOutputStream=new Bindings.FileOutputStream();this._fileName=this._fileName||'Heap-'+new Date().toISO8601Compact()+this.profileType().fileExtension();fileOutputStream.open(this._fileName).then(onOpen.bind(this));async function onOpen(accepted){if(!accepted){return;}
if(this._failedToCreateTempFile){Common.console.error('Failed to open temp file with heap snapshot');fileOutputStream.close();return;}
if(this._tempFile){const error=await this._tempFile.copyToOutputStream(fileOutputStream,this._onChunkTransferred.bind(this));if(error){Common.console.error('Failed to read heap snapshot from temp file: '+error.message);}
this._didCompleteSnapshotTransfer();return;}
this._onTempFileReady=onOpen.bind(this,accepted);this._updateSaveProgress(0,1);}}
_onChunkTransferred(reader){this._updateSaveProgress(reader.loadedSize(),reader.fileSize());}
_updateSaveProgress(value,total){const percentValue=((total&&value/total)*100).toFixed(0);this.updateStatus(Common.UIString('Saving\u2026 %d%%',percentValue));}
async loadFromFile(file){this.updateStatus(Common.UIString('Loading\u2026'),true);this._setupWorker();const reader=new Bindings.ChunkedFileReader(file,10000000);const success=await reader.read((this._receiver));if(!success){this.updateStatus(reader.error().message);}
return success?null:reader.error();}};Profiler.HeapSnapshotStatisticsView=class extends UI.VBox{constructor(){super();this.element.classList.add('heap-snapshot-statistics-view');this._pieChart=new PerfUI.PieChart({chartName:ls`Heap memory usage`,size:150,formatter:Profiler.HeapSnapshotStatisticsView._valueFormatter,showLegend:true});this._pieChart.element.classList.add('heap-snapshot-stats-pie-chart');this.element.appendChild(this._pieChart.element);}
static _valueFormatter(value){return Common.UIString('%s KB',Number.withThousandsSeparator(Math.round(value/1024)));}
setTotal(value){this._pieChart.setTotal(value);}
addRecord(value,name,color){this._pieChart.addSlice(value,color,name);}};Profiler.HeapAllocationStackView=class extends UI.Widget{constructor(heapProfilerModel){super();this._heapProfilerModel=heapProfilerModel;this._linkifier=new Components.Linkifier();this._frameElements=[];}
_onContextMenu(link,event){const contextMenu=new UI.ContextMenu(event);if(!contextMenu.containsTarget(link)){contextMenu.appendApplicableItems(link);}
contextMenu.show();event.consume(true);}
_onStackViewKeydown(event){const target=(event.target);if(!target){return;}
if(isEnterKey(event)){const link=target._linkElement;if(!link){return;}
if(Components.Linkifier.invokeFirstAction(link)){event.consume(true);}
return;}
let navDown;if(event.key==='ArrowUp'){navDown=false;}else if(event.key==='ArrowDown'){navDown=true;}else{return;}
const index=this._frameElements.indexOf(target);if(index===-1){return;}
const nextIndex=navDown?index+1:index-1;if(nextIndex<0||nextIndex>=this._frameElements.length){return;}
const nextFrame=this._frameElements[nextIndex];nextFrame.tabIndex=0;target.tabIndex=-1;nextFrame.focus();event.consume(true);}
async setAllocatedObject(snapshot,snapshotNodeIndex){this.clear();const frames=await snapshot.allocationStack(snapshotNodeIndex);if(!frames){const stackDiv=this.element.createChild('div','no-heap-allocation-stack');stackDiv.createTextChild(Common.UIString('Stack was not recorded for this object because it had been allocated before this profile recording started.'));return;}
const stackDiv=this.element.createChild('div','heap-allocation-stack');stackDiv.addEventListener('keydown',this._onStackViewKeydown.bind(this),false);for(const frame of frames){const frameDiv=stackDiv.createChild('div','stack-frame');this._frameElements.push(frameDiv);frameDiv.tabIndex=-1;const name=frameDiv.createChild('div');name.textContent=UI.beautifyFunctionName(frame.functionName);if(!frame.scriptId){continue;}
const urlElement=this._linkifier.linkifyScriptLocation(this._heapProfilerModel?this._heapProfilerModel.target():null,String(frame.scriptId),frame.scriptName,frame.line-1,frame.column-1);frameDiv.appendChild(urlElement);frameDiv._linkElement=urlElement;frameDiv.addEventListener('contextmenu',this._onContextMenu.bind(this,urlElement));}
this._frameElements[0].tabIndex=0;}
clear(){this.element.removeChildren();this._frameElements=[];this._linkifier.reset();}};;Profiler.HeapTimelineOverview=class extends UI.VBox{constructor(){super();this.element.id='heap-recording-view';this.element.classList.add('heap-tracking-overview');this._overviewCalculator=new Profiler.HeapTimelineOverview.OverviewCalculator();this._overviewContainer=this.element.createChild('div','heap-overview-container');this._overviewGrid=new PerfUI.OverviewGrid('heap-recording',this._overviewCalculator);this._overviewGrid.element.classList.add('fill');this._overviewCanvas=this._overviewContainer.createChild('canvas','heap-recording-overview-canvas');this._overviewContainer.appendChild(this._overviewGrid.element);this._overviewGrid.addEventListener(PerfUI.OverviewGrid.Events.WindowChanged,this._onWindowChanged,this);this._windowLeft=0.0;this._windowRight=1.0;this._overviewGrid.setWindow(this._windowLeft,this._windowRight);this._yScale=new Profiler.HeapTimelineOverview.SmoothScale();this._xScale=new Profiler.HeapTimelineOverview.SmoothScale();this._profileSamples=new Profiler.HeapTimelineOverview.Samples();}
start(){this._running=true;const drawFrame=()=>{this.update();if(this._running){this.element.window().requestAnimationFrame(drawFrame);}};drawFrame();}
stop(){this._running=false;}
setSamples(samples){this._profileSamples=samples;if(!this._running){this.update();}}
_drawOverviewCanvas(width,height){if(!this._profileSamples){return;}
const profileSamples=this._profileSamples;const sizes=profileSamples.sizes;const topSizes=profileSamples.max;const timestamps=profileSamples.timestamps;const startTime=timestamps[0];const scaleFactor=this._xScale.nextScale(width/profileSamples.totalTime);let maxSize=0;function aggregateAndCall(sizes,callback){let size=0;let currentX=0;for(let i=1;i<timestamps.length;++i){const x=Math.floor((timestamps[i]-startTime)*scaleFactor);if(x!==currentX){if(size){callback(currentX,size);}
size=0;currentX=x;}
size+=sizes[i];}
callback(currentX,size);}
function maxSizeCallback(x,size){maxSize=Math.max(maxSize,size);}
aggregateAndCall(sizes,maxSizeCallback);const yScaleFactor=this._yScale.nextScale(maxSize?height/(maxSize*1.1):0.0);this._overviewCanvas.width=width*window.devicePixelRatio;this._overviewCanvas.height=height*window.devicePixelRatio;this._overviewCanvas.style.width=width+'px';this._overviewCanvas.style.height=height+'px';const context=this._overviewCanvas.getContext('2d');context.scale(window.devicePixelRatio,window.devicePixelRatio);if(this._running){context.beginPath();context.lineWidth=2;context.strokeStyle='rgba(192, 192, 192, 0.6)';const currentX=(Date.now()-startTime)*scaleFactor;context.moveTo(currentX,height-1);context.lineTo(currentX,0);context.stroke();context.closePath();}
let gridY;let gridValue;const gridLabelHeight=14;if(yScaleFactor){const maxGridValue=(height-gridLabelHeight)/yScaleFactor;gridValue=Math.pow(1024,Math.floor(Math.log(maxGridValue)/Math.log(1024)));gridValue*=Math.pow(10,Math.floor(Math.log(maxGridValue/gridValue)/Math.LN10));if(gridValue*5<=maxGridValue){gridValue*=5;}
gridY=Math.round(height-gridValue*yScaleFactor-0.5)+0.5;context.beginPath();context.lineWidth=1;context.strokeStyle='rgba(0, 0, 0, 0.2)';context.moveTo(0,gridY);context.lineTo(width,gridY);context.stroke();context.closePath();}
function drawBarCallback(x,size){context.moveTo(x,height-1);context.lineTo(x,Math.round(height-size*yScaleFactor-1));}
context.beginPath();context.lineWidth=2;context.strokeStyle='rgba(192, 192, 192, 0.6)';aggregateAndCall(topSizes,drawBarCallback);context.stroke();context.closePath();context.beginPath();context.lineWidth=2;context.strokeStyle='rgba(0, 0, 192, 0.8)';aggregateAndCall(sizes,drawBarCallback);context.stroke();context.closePath();if(gridValue){const label=Number.bytesToString(gridValue);const labelPadding=4;const labelX=0;const labelY=gridY-0.5;const labelWidth=2*labelPadding+context.measureText(label).width;context.beginPath();context.textBaseline='bottom';context.font='10px '+window.getComputedStyle(this.element,null).getPropertyValue('font-family');context.fillStyle='rgba(255, 255, 255, 0.75)';context.fillRect(labelX,labelY-gridLabelHeight,labelWidth,gridLabelHeight);context.fillStyle='rgb(64, 64, 64)';context.fillText(label,labelX+labelPadding,labelY);context.fill();context.closePath();}}
onResize(){this._updateOverviewCanvas=true;this._scheduleUpdate();}
_onWindowChanged(){if(!this._updateGridTimerId){this._updateGridTimerId=setTimeout(this.updateGrid.bind(this),10);}}
_scheduleUpdate(){if(this._updateTimerId){return;}
this._updateTimerId=setTimeout(this.update.bind(this),10);}
_updateBoundaries(){this._windowLeft=this._overviewGrid.windowLeft();this._windowRight=this._overviewGrid.windowRight();this._windowWidth=this._windowRight-this._windowLeft;}
update(){this._updateTimerId=null;if(!this.isShowing()){return;}
this._updateBoundaries();this._overviewCalculator._updateBoundaries(this);this._overviewGrid.updateDividers(this._overviewCalculator);this._drawOverviewCanvas(this._overviewContainer.clientWidth,this._overviewContainer.clientHeight-20);}
updateGrid(){this._updateGridTimerId=0;this._updateBoundaries();const ids=this._profileSamples.ids;if(!ids.length){return;}
const timestamps=this._profileSamples.timestamps;const sizes=this._profileSamples.sizes;const startTime=timestamps[0];const totalTime=this._profileSamples.totalTime;const timeLeft=startTime+totalTime*this._windowLeft;const timeRight=startTime+totalTime*this._windowRight;const minIndex=timestamps.lowerBound(timeLeft);const maxIndex=timestamps.upperBound(timeRight);let size=0;for(let i=minIndex;i<=maxIndex;++i){size+=sizes[i];}
const minId=minIndex>0?ids[minIndex-1]:0;const maxId=maxIndex<ids.length?ids[maxIndex]:Infinity;this.dispatchEventToListeners(Profiler.HeapTimelineOverview.IdsRangeChanged,{minId,maxId,size});}};Profiler.HeapTimelineOverview.IdsRangeChanged=Symbol('IdsRangeChanged');Profiler.HeapTimelineOverview.SmoothScale=class{constructor(){this._lastUpdate=0;this._currentScale=0.0;}
nextScale(target){target=target||this._currentScale;if(this._currentScale){const now=Date.now();const timeDeltaMs=now-this._lastUpdate;this._lastUpdate=now;const maxChangePerSec=20;const maxChangePerDelta=Math.pow(maxChangePerSec,timeDeltaMs/1000);const scaleChange=target/this._currentScale;this._currentScale*=Number.constrain(scaleChange,1/maxChangePerDelta,maxChangePerDelta);}else{this._currentScale=target;}
return this._currentScale;}};Profiler.HeapTimelineOverview.Samples=class{constructor(){this.sizes=[];this.ids=[];this.timestamps=[];this.max=[];this.totalTime=30000;}};Profiler.HeapTimelineOverview.OverviewCalculator=class{_updateBoundaries(chart){this._minimumBoundaries=0;this._maximumBoundaries=chart._profileSamples.totalTime;this._xScaleFactor=chart._overviewContainer.clientWidth/this._maximumBoundaries;}
computePosition(time){return(time-this._minimumBoundaries)*this._xScaleFactor;}
formatValue(value,precision){return Number.secondsToString(value/1000,!!precision);}
maximumBoundary(){return this._maximumBoundaries;}
minimumBoundary(){return this._minimumBoundaries;}
zeroTime(){return this._minimumBoundaries;}
boundarySpan(){return this._maximumBoundaries-this._minimumBoundaries;}};;Profiler.IsolateSelector=class extends UI.VBox{constructor(){super(false);this._items=new UI.ListModel();this._list=new UI.ListControl(this._items,this,UI.ListMode.NonViewport);UI.ARIAUtils.markAsListBox(this._list.element);this._list.element.tabIndex=0;this._list.element.classList.add('javascript-vm-instances-list');UI.ARIAUtils.setAccessibleName(this._list.element,ls`JavaScript VM instances`);this.contentElement.appendChild(this._list.element);this._itemByIsolate=new Map();this._totalElement=createElementWithClass('div','profile-memory-usage-item hbox');this._totalValueDiv=this._totalElement.createChild('div','profile-memory-usage-item-size');this._totalTrendDiv=this._totalElement.createChild('div','profile-memory-usage-item-trend');this._totalElement.createChild('div').textContent=ls`Total JS heap size`;const trendIntervalMinutes=Math.round(SDK.IsolateManager.MemoryTrendWindowMs/60e3);this._totalTrendDiv.title=ls`Total page JS heap size change trend over the last ${trendIntervalMinutes} minutes.`;this._totalValueDiv.title=ls`Total page JS heap size across all VM instances.`;SDK.isolateManager.observeIsolates(this);SDK.targetManager.addEventListener(SDK.TargetManager.Events.NameChanged,this._targetChanged,this);SDK.targetManager.addEventListener(SDK.TargetManager.Events.InspectedURLChanged,this._targetChanged,this);}
wasShown(){SDK.isolateManager.addEventListener(SDK.IsolateManager.Events.MemoryChanged,this._heapStatsChanged,this);}
willHide(){SDK.isolateManager.removeEventListener(SDK.IsolateManager.Events.MemoryChanged,this._heapStatsChanged,this);}
isolateAdded(isolate){const item=new Profiler.IsolateSelector.ListItem(isolate);const index=item.model().target()===SDK.targetManager.mainTarget()?0:this._items.length;this._items.insert(index,item);this._itemByIsolate.set(isolate,item);if(this._items.length===1){this._list.selectItem(item);}
this._update();}
isolateChanged(isolate){const item=this._itemByIsolate.get(isolate);item.updateTitle();this._update();}
isolateRemoved(isolate){const item=this._itemByIsolate.get(isolate);this._items.remove(this._items.indexOf(item));this._itemByIsolate.delete(isolate);this._update();}
_targetChanged(event){const target=(event.data);const model=target.model(SDK.RuntimeModel);if(!model){return;}
const isolate=SDK.isolateManager.isolateByModel(model);const item=isolate&&this._itemByIsolate.get(isolate);if(item){item.updateTitle();}}
_heapStatsChanged(event){const isolate=(event.data);const listItem=this._itemByIsolate.get(isolate);if(listItem){listItem.updateStats();}
this._updateTotal();}
_updateTotal(){let total=0;let trend=0;for(const isolate of SDK.isolateManager.isolates()){total+=isolate.usedHeapSize();trend+=isolate.usedHeapSizeGrowRate();}
this._totalValueDiv.textContent=Number.bytesToString(total);Profiler.IsolateSelector._formatTrendElement(trend,this._totalTrendDiv);}
static _formatTrendElement(trendValueMs,element){const changeRateBytesPerSecond=trendValueMs*1e3;const changeRateThresholdBytesPerSecond=1024;if(Math.abs(changeRateBytesPerSecond)<changeRateThresholdBytesPerSecond){return;}
const changeRateText=Number.bytesToString(Math.abs(changeRateBytesPerSecond));const changeText=changeRateBytesPerSecond>0?ls`\u2B06${changeRateText}/s`:ls`\u2B07${changeRateText}/s`;element.classList.toggle('increasing',changeRateBytesPerSecond>0);element.textContent=changeText;}
totalMemoryElement(){return this._totalElement;}
createElementForItem(item){return item.element;}
heightForItem(item){}
isItemSelectable(item){return true;}
selectedItemChanged(from,to,fromElement,toElement){if(fromElement){fromElement.classList.remove('selected');}
if(toElement){toElement.classList.add('selected');}
const model=to&&to.model();UI.context.setFlavor(SDK.HeapProfilerModel,model&&model.heapProfilerModel());UI.context.setFlavor(SDK.CPUProfilerModel,model&&model.target().model(SDK.CPUProfilerModel));}
_update(){this._updateTotal();this._list.invalidateRange(0,this._items.length);}};Profiler.IsolateSelector.ListItem=class{constructor(isolate){this._isolate=isolate;const trendIntervalMinutes=Math.round(SDK.IsolateManager.MemoryTrendWindowMs/60e3);this.element=createElementWithClass('div','profile-memory-usage-item hbox');UI.ARIAUtils.markAsOption(this.element);this._heapDiv=this.element.createChild('div','profile-memory-usage-item-size');this._heapDiv.title=ls`Heap size in use by live JS objects.`;this._trendDiv=this.element.createChild('div','profile-memory-usage-item-trend');this._trendDiv.title=ls`Heap size change trend over the last ${trendIntervalMinutes} minutes.`;this._nameDiv=this.element.createChild('div','profile-memory-usage-item-name');this.updateTitle();}
model(){return this._isolate.runtimeModel();}
updateStats(){this._heapDiv.textContent=Number.bytesToString(this._isolate.usedHeapSize());Profiler.IsolateSelector._formatTrendElement(this._isolate.usedHeapSizeGrowRate(),this._trendDiv);}
updateTitle(){const modelCountByName=new Map();for(const model of this._isolate.models()){const target=model.target();const name=SDK.targetManager.mainTarget()!==target?target.name():'';const parsedURL=new Common.ParsedURL(target.inspectedURL());const domain=parsedURL.isValid?parsedURL.domain():'';const title=target.decorateLabel(domain&&name?`${domain}: ${name}`:name||domain||ls`(empty)`);modelCountByName.set(title,(modelCountByName.get(title)||0)+1);}
this._nameDiv.removeChildren();const titles=[];for(const[name,count]of modelCountByName){const title=count>1?`${name} (${count})`:name;titles.push(title);const titleDiv=this._nameDiv.createChild('div');titleDiv.textContent=title;titleDiv.title=title;}
UI.ARIAUtils.setAccessibleName(this.element,titles.join(' '));}};;Profiler.LiveHeapProfileView=class extends UI.VBox{constructor(){super(true);this._gridNodeByUrl=new Map();this.registerRequiredCSS('profiler/liveHeapProfile.css');this._setting=Common.settings.moduleSetting('memoryLiveHeapProfile');const toolbar=new UI.Toolbar('live-heap-profile-toolbar',this.contentElement);this._toggleRecordAction=(UI.actionRegistry.action('live-heap-profile.toggle-recording'));this._toggleRecordButton=UI.Toolbar.createActionButton(this._toggleRecordAction);this._toggleRecordButton.setToggled(this._setting.get());toolbar.appendToolbarItem(this._toggleRecordButton);const mainTarget=SDK.targetManager.mainTarget();if(mainTarget&&mainTarget.model(SDK.ResourceTreeModel)){const startWithReloadAction=(UI.actionRegistry.action('live-heap-profile.start-with-reload'));this._startWithReloadButton=UI.Toolbar.createActionButton(startWithReloadAction);toolbar.appendToolbarItem(this._startWithReloadButton);}
this._dataGrid=this._createDataGrid();this._dataGrid.asWidget().show(this.contentElement);this._currentPollId=0;}
_createDataGrid(){const columns=[{id:'size',title:ls`JS Heap`,width:'72px',fixedWidth:true,sortable:true,align:DataGrid.DataGrid.Align.Right,sort:DataGrid.DataGrid.Order.Descending,tooltip:ls`Allocated JS heap size currently in use`,},{id:'isolates',title:ls`VMs`,width:'40px',fixedWidth:true,align:DataGrid.DataGrid.Align.Right,tooltip:ls`Number of VMs sharing the same script source`},{id:'url',title:ls`Script URL`,fixedWidth:false,sortable:true,tooltip:ls`URL of the script source`}];const dataGrid=new DataGrid.SortableDataGrid(columns);dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last);dataGrid.element.classList.add('flex-auto');dataGrid.element.addEventListener('keydown',this._onKeyDown.bind(this),false);dataGrid.addEventListener(DataGrid.DataGrid.Events.OpenedNode,this._revealSourceForSelectedNode,this);dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortingChanged,this);for(const info of columns){const headerCell=dataGrid.headerTableHeader(info.id);if(headerCell){headerCell.setAttribute('title',info.tooltip);}}
return dataGrid;}
wasShown(){this._poll();this._setting.addChangeListener(this._settingChanged,this);}
willHide(){++this._currentPollId;this._setting.removeChangeListener(this._settingChanged,this);}
_settingChanged(value){this._toggleRecordButton.setToggled((value.data));}
async _poll(){const pollId=this._currentPollId;do{const isolates=Array.from(SDK.isolateManager.isolates());const profiles=await Promise.all(isolates.map(isolate=>isolate.heapProfilerModel()&&isolate.heapProfilerModel().getSamplingProfile()));if(this._currentPollId!==pollId){return;}
this._update(isolates,profiles);await new Promise(r=>setTimeout(r,3000));}while(this._currentPollId===pollId);}
_update(isolates,profiles){const dataByUrl=new Map();profiles.forEach((profile,index)=>{if(profile){processNodeTree(isolates[index],'',profile.head);}});const rootNode=this._dataGrid.rootNode();const exisitingNodes=new Set();for(const pair of dataByUrl){const url=(pair[0]);const size=(pair[1].size);const isolateCount=(pair[1].isolates.size);if(!url){console.info(`Node with empty URL: ${size} bytes`);continue;}
let node=this._gridNodeByUrl.get(url);if(node){node.updateNode(size,isolateCount);}else{node=new Profiler.LiveHeapProfileView.GridNode(url,size,isolateCount);this._gridNodeByUrl.set(url,node);rootNode.appendChild(node);}
exisitingNodes.add(node);}
for(const node of rootNode.children.slice()){if(!exisitingNodes.has(node)){node.remove();}
this._gridNodeByUrl.delete(node);}
this._sortingChanged();function processNodeTree(isolate,parentUrl,node){const url=node.callFrame.url||parentUrl||systemNodeName(node)||anonymousScriptName(node);node.children.forEach(processNodeTree.bind(null,isolate,url));if(!node.selfSize){return;}
let data=dataByUrl.get(url);if(!data){data={size:0,isolates:new Set()};dataByUrl.set(url,data);}
data.size+=node.selfSize;data.isolates.add(isolate);}
function systemNodeName(node){const name=node.callFrame.functionName;return name.startsWith('(')&&name!=='(root)'?name:'';}
function anonymousScriptName(node){return Number(node.callFrame.scriptId)?Common.UIString('(Anonymous Script %s)',node.callFrame.scriptId):'';}}
_onKeyDown(event){if(!isEnterKey(event)){return;}
event.consume(true);this._revealSourceForSelectedNode();}
_revealSourceForSelectedNode(){const node=this._dataGrid.selectedNode;if(!node||!node._url){return;}
const sourceCode=Workspace.workspace.uiSourceCodeForURL(node._url);if(sourceCode){Common.Revealer.reveal(sourceCode);}}
_sortingChanged(){const columnId=this._dataGrid.sortColumnId();if(!columnId){return;}
const sortByUrl=(a,b)=>b._url.localeCompare(a._url);const sortBySize=(a,b)=>b._size-a._size;const sortFunction=columnId==='url'?sortByUrl:sortBySize;this._dataGrid.sortNodes(sortFunction,this._dataGrid.isSortOrderAscending());}
_toggleRecording(){const enable=!this._setting.get();if(enable){this._startRecording(false);}else{this._stopRecording();}}
_startRecording(reload){this._setting.set(true);if(!reload){return;}
const mainTarget=SDK.targetManager.mainTarget();if(!mainTarget){return;}
const resourceTreeModel=(mainTarget.model(SDK.ResourceTreeModel));if(resourceTreeModel){resourceTreeModel.reloadPage();}}
async _stopRecording(){this._setting.set(false);}};Profiler.LiveHeapProfileView.GridNode=class extends DataGrid.SortableDataGridNode{constructor(url,size,isolateCount){super();this._url=url;this._size=size;this._isolateCount=isolateCount;}
updateNode(size,isolateCount){if(this._size===size&&this._isolateCount===isolateCount){return;}
this._size=size;this._isolateCount=isolateCount;this.refresh();}
createCell(columnId){const cell=this.createTD(columnId);switch(columnId){case'url':cell.textContent=this._url;break;case'size':cell.textContent=Number.withThousandsSeparator(Math.round(this._size/1e3));cell.createChild('span','size-units').textContent=ls`KB`;break;case'isolates':cell.textContent=this._isolateCount;break;}
return cell;}};Profiler.LiveHeapProfileView.ActionDelegate=class{handleAction(context,actionId){(async()=>{const profileViewId='live_heap_profile';await UI.viewManager.showView(profileViewId);const widget=await UI.viewManager.view(profileViewId).widget();this._innerHandleAction((widget),actionId);})();return true;}
_innerHandleAction(profilerView,actionId){switch(actionId){case'live-heap-profile.toggle-recording':profilerView._toggleRecording();break;case'live-heap-profile.start-with-reload':profilerView._startRecording(true);break;default:console.assert(false,`Unknown action: ${actionId}`);}}};;Profiler.ProfileLauncherView=class extends UI.VBox{constructor(profilesPanel){super();this.registerRequiredCSS('profiler/profileLauncherView.css');this._panel=profilesPanel;this.element.classList.add('profile-launcher-view');this._contentElement=this.element.createChild('div','profile-launcher-view-content vbox');const profileTypeSelectorElement=this._contentElement.createChild('div','vbox');this._selectedProfileTypeSetting=Common.settings.createSetting('selectedProfileType','CPU');this._profileTypeHeaderElement=profileTypeSelectorElement.createChild('h1');this._profileTypeSelectorForm=profileTypeSelectorElement.createChild('form');UI.ARIAUtils.markAsRadioGroup(this._profileTypeSelectorForm);const isolateSelectorElement=this._contentElement.createChild('div','vbox profile-isolate-selector-block');isolateSelectorElement.createChild('h1').textContent=ls`Select JavaScript VM instance`;const isolateSelector=new Profiler.IsolateSelector();isolateSelector.show(isolateSelectorElement.createChild('div','vbox profile-launcher-target-list'));isolateSelectorElement.appendChild(isolateSelector.totalMemoryElement());const buttonsDiv=this._contentElement.createChild('div','hbox profile-launcher-buttons');this._controlButton=UI.createTextButton('',this._controlButtonClicked.bind(this),'',true);this._loadButton=UI.createTextButton(ls`Load`,this._loadButtonClicked.bind(this),'');buttonsDiv.appendChild(this._controlButton);buttonsDiv.appendChild(this._loadButton);this._recordButtonEnabled=true;this._typeIdToOptionElement=new Map();}
_loadButtonClicked(){this._panel.showLoadFromFileDialog();}
_updateControls(){if(this._isEnabled&&this._recordButtonEnabled){this._controlButton.removeAttribute('disabled');}else{this._controlButton.setAttribute('disabled','');}
this._controlButton.title=this._recordButtonEnabled?'':UI.anotherProfilerActiveLabel();if(this._isInstantProfile){this._controlButton.classList.remove('running');this._controlButton.classList.add('primary-button');this._controlButton.textContent=Common.UIString('Take snapshot');}else if(this._isProfiling){this._controlButton.classList.add('running');this._controlButton.classList.remove('primary-button');this._controlButton.textContent=Common.UIString('Stop');}else{this._controlButton.classList.remove('running');this._controlButton.classList.add('primary-button');this._controlButton.textContent=Common.UIString('Start');}
for(const item of this._typeIdToOptionElement.values()){item.disabled=!!this._isProfiling;}}
profileStarted(){this._isProfiling=true;this._updateControls();}
profileFinished(){this._isProfiling=false;this._updateControls();}
updateProfileType(profileType,recordButtonEnabled){this._isInstantProfile=profileType.isInstantProfile();this._recordButtonEnabled=recordButtonEnabled;this._isEnabled=profileType.isEnabled();this._updateControls();}
addProfileType(profileType){const labelElement=UI.createRadioLabel('profile-type',profileType.name);this._profileTypeSelectorForm.appendChild(labelElement);const optionElement=labelElement.radioElement;this._typeIdToOptionElement.set(profileType.id,optionElement);optionElement._profileType=profileType;optionElement.style.hidden=true;optionElement.addEventListener('change',this._profileTypeChanged.bind(this,profileType),false);const descriptionElement=this._profileTypeSelectorForm.createChild('p');descriptionElement.textContent=profileType.description;UI.ARIAUtils.setDescription(optionElement,profileType.description);const customContent=profileType.customContent();if(customContent){this._profileTypeSelectorForm.createChild('p').appendChild(customContent);profileType.setCustomContentEnabled(false);}
const headerText=this._typeIdToOptionElement.size>1?ls`Select profiling type`:profileType.name;this._profileTypeHeaderElement.textContent=headerText;UI.ARIAUtils.setAccessibleName(this._profileTypeSelectorForm,headerText);}
restoreSelectedProfileType(){let typeId=this._selectedProfileTypeSetting.get();if(!this._typeIdToOptionElement.has(typeId)){typeId=this._typeIdToOptionElement.keys().next().value;this._selectedProfileTypeSetting.set(typeId);}
this._typeIdToOptionElement.get(typeId).checked=true;const type=this._typeIdToOptionElement.get(typeId)._profileType;for(const[id,element]of this._typeIdToOptionElement){const enabled=(id===typeId);element._profileType.setCustomContentEnabled(enabled);}
this.dispatchEventToListeners(Profiler.ProfileLauncherView.Events.ProfileTypeSelected,type);}
_controlButtonClicked(){this._panel.toggleRecord();}
_profileTypeChanged(profileType){const typeId=this._selectedProfileTypeSetting.get();const type=this._typeIdToOptionElement.get(typeId)._profileType;type.setCustomContentEnabled(false);profileType.setCustomContentEnabled(true);this.dispatchEventToListeners(Profiler.ProfileLauncherView.Events.ProfileTypeSelected,profileType);this._isInstantProfile=profileType.isInstantProfile();this._isEnabled=profileType.isEnabled();this._updateControls();this._selectedProfileTypeSetting.set(profileType.id);}};Profiler.ProfileLauncherView.Events={ProfileTypeSelected:Symbol('ProfileTypeSelected')};;Profiler.ProfileTypeRegistry=class{constructor(){this.cpuProfileType=new Profiler.CPUProfileType();this.heapSnapshotProfileType=new Profiler.HeapSnapshotProfileType();this.samplingHeapProfileType=new Profiler.SamplingHeapProfileType();this.samplingNativeHeapProfileType=new Profiler.SamplingNativeHeapProfileType();this.samplingNativeHeapSnapshotBrowserType=new Profiler.SamplingNativeHeapSnapshotBrowserType();this.samplingNativeHeapSnapshotRendererType=new Profiler.SamplingNativeHeapSnapshotRendererType();this.trackingHeapSnapshotProfileType=new Profiler.TrackingHeapSnapshotProfileType();}};Profiler.ProfileTypeRegistry.instance=new Profiler.ProfileTypeRegistry();;Root.Runtime.cachedResources["profiler/heapProfiler.css"]="/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n * Copyright (C) 2010 Apple Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.heap-snapshot-view {\n    overflow: hidden;\n}\n\n.heap-snapshot-view .data-grid {\n    border: none;\n}\n\n.heap-snapshot-view .data-grid tr:empty {\n    height: 16px;\n    visibility: hidden;\n}\n\n.heap-snapshot-view .data-grid span.percent-column {\n    width: 35px !important;\n}\n\n.heap-snapshot-view .object-value-object,\n.object-value-node {\n    display: inline;\n    position: static;\n}\n\n.heap-snapshot-view .object-value-string {\n    white-space: nowrap;\n}\n\n.heap-snapshot-view td.object-column .objects-count {\n    margin-left: 10px;\n    font-size: 11px;\n    color: grey;\n}\n\n.heap-snapshot-view tr:not(.selected) .object-value-id {\n    color: grey;\n}\n\n.heap-snapshot-view .data-grid {\n    flex: auto;\n}\n\n.profile-view .heap-tracking-overview {\n    flex: 0 0 80px;\n    height: 80px;\n}\n\n.heap-snapshot-view .retaining-paths-view {\n    overflow: hidden;\n}\n\n.heap-snapshot-view .heap-snapshot-view-resizer {\n    background-image: url(Images/toolbarResizerVertical.png);\n    background-color: #eee;\n    border-bottom: 1px solid rgb(179, 179, 179);\n    background-repeat: no-repeat;\n    background-position: right center, center;\n    flex: 0 0 21px;\n}\n\n.heap-snapshot-view .heap-snapshot-view-resizer .title > span {\n    display: inline-block;\n    padding-top: 3px;\n    vertical-align: middle;\n    margin-left: 4px;\n    margin-right: 8px;\n}\n\n.heap-snapshot-view .heap-snapshot-view-resizer * {\n    pointer-events: none;\n}\n\n.heap-snapshot-view tr:not(.selected) td.object-column span.highlight {\n    background-color: inherit;\n}\n\n.heap-snapshot-view td.object-column > div > span {\n    margin-right: 6px;\n}\n\n.heap-snapshot-view td.object-column span.heap-object-source-link {\n    float: right;\n}\n\n.heap-snapshot-view td.object-column span.heap-object-source-link:empty {\n    animation: fadeInOut 2s infinite;\n}\n\n.heap-snapshot-view td.object-column span.heap-object-source-link:empty:before {\n    content: \"\\b7\\b7\";\n    font-weight: bold;\n}\n\n@keyframes fadeInOut {\n    0% {\n        transform: rotate(0);\n    }\n    50% {\n        transform: rotate(0.5turn);\n    }\n    100% {\n        transform: rotate(1turn);\n    }\n}\n\n.heap-snapshot-view tr:not(.selected) td.object-column span.heap-object-tag {\n    color: #888;\n}\n\n.heap-snapshot-view td.object-column span.grayed {\n    color: gray;\n}\n\n.cycled-ancessor-node {\n    opacity: 0.6;\n}\n\n#heap-recording-view .profile-view {\n    top: 80px;\n}\n\n.heap-overview-container {\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    width: 100%;\n    height: 80px;\n}\n\n#heap-recording-overview-grid .resources-dividers-label-bar {\n    pointer-events: auto;\n}\n\n#heap-recording-overview-container {\n    border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n}\n\n.heap-recording-overview-canvas {\n    position: absolute;\n    top: 20px;\n    left: 0;\n    right: 0;\n    bottom: 0;\n}\n\n.heap-snapshot-statistics-view {\n    overflow: auto;\n}\n\n.heap-snapshot-stats-pie-chart {\n    margin: 12px 30px;\n    flex-shrink: 0;\n}\n\n.heap-allocation-stack .stack-frame {\n    display: flex;\n    justify-content: space-between;\n    border-bottom: 1px solid rgb(240, 240, 240);\n    padding: 2px;\n}\n\n.heap-allocation-stack .stack-frame:hover:not(:focus) {\n    background-color: rgba(0, 0, 0, 0.1);\n}\n\n.heap-allocation-stack .stack-frame:focus {\n    background-color: var(--selection-bg-color);\n    color: var(--selection-fg-color);\n}\n\n.heap-allocation-stack .stack-frame:focus:hover {\n    background-color: var(--accent-color-hover);\n}\n\n.heap-allocation-stack .stack-frame .devtools-link {\n    color: rgb(33%, 33%, 33%);\n}\n\n.heap-allocation-stack .stack-frame:focus .devtools-link {\n    color: var(--selection-fg-color);\n}\n\n.no-heap-allocation-stack {\n    padding: 5px;\n}\n\n/*# sourceURL=profiler/heapProfiler.css */";Root.Runtime.cachedResources["profiler/liveHeapProfile.css"]="/*\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.data-grid {\n    border: none;\n}\n\n.data-grid td .size-units {\n    margin-left: 4px;\n    font-size: 75%;\n}\n\n.data-grid tr:not(.selected) td .size-units {\n    color: #999;\n}\n\n.toolbar {\n    border-bottom: 1px solid #ccc;\n}\n/*# sourceURL=profiler/liveHeapProfile.css */";Root.Runtime.cachedResources["profiler/profileLauncherView.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.profile-launcher-view {\n    overflow: auto;\n}\n\n.profile-launcher-view-content {\n    margin: 10px 16px;\n    flex: auto 1 0;\n}\n\n.profile-launcher-view-content h1 {\n    font-size: 15px;\n    font-weight: normal;\n    margin: 6px 0 10px 0;\n}\n\n.profile-launcher-view-content [is=dt-radio] {\n    font-size: 13px;\n}\n\n.profile-launcher-view-content p {\n    color: hsl(0, 0%, 45%);\n    margin-top: 1px;\n    margin-left: 22px;\n}\n\n.profile-launcher-view-content p [is=dt-checkbox] {\n    display: flex;\n}\n\n.profile-launcher-view-content button.running {\n    color: hsl(0, 100%, 58%);\n}\n\n.profile-launcher-view-content button.running:hover {\n    color: hsl(0, 100%, 42%);\n}\n\nbody.inactive .profile-launcher-view-content button.running:not(.toolbar-item) {\n    color: rgb(220, 130, 130);\n}\n\n.profile-launcher-view-content > div {\n    flex: auto 0 0;\n}\n\n.profile-launcher-view-content > .profile-isolate-selector-block {\n    flex: auto 1 0;\n}\n\n.profile-isolate-selector-block button {\n    min-width: 110px;\n}\n\n.profile-launcher-target-list {\n    margin-bottom: 6px;\n    border: 1px solid #ddd;\n    flex: 150px 1 0;\n}\n\n.profile-memory-usage-item {\n    padding: 4px;\n    line-height: 16px;\n    border-left: 3px solid transparent;\n    overflow-x: hidden;\n}\n\n.profile-launcher-target-list .profile-memory-usage-item:hover:not(.selected) {\n    background-color: var(--item-hover-color);\n}\n\n.javascript-vm-instances-list:focus .profile-memory-usage-item.selected {\n    border-color: var(--selection-bg-color);\n    background-color: var(--item-selection-bg-color);\n}\n\n.profile-memory-usage-item.selected {\n    background-color: var(--item-selection-inactive-bg-color);\n}\n\n.profile-memory-usage-item > div {\n    flex-shrink: 0;\n    margin-right: 12px;\n}\n\n.profile-memory-usage-item-size {\n    width: 60px;\n    text-align: right;\n}\n\n.profile-memory-usage-item-trend {\n    width: 80px;\n    color: green;\n}\n\n.profile-memory-usage-item-trend.increasing {\n    color: red;\n}\n\n.profile-isolate-selector-block > .profile-memory-usage-item {\n    margin-left: 1px;\n    margin-bottom: 4px;\n    font-weight: bolder;\n}\n\n.profile-launcher-buttons {\n    flex-wrap: wrap;\n}\n\n.profile-launcher-buttons button {\n    min-width: 120px;\n    height: 28px;\n    margin: 4px 16px 4px 0;\n}\n\n/*# sourceURL=profiler/profileLauncherView.css */";Root.Runtime.cachedResources["profiler/profilesPanel.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/* Profiler Style */\n\n#profile-views {\n    flex: auto;\n    position: relative;\n}\n\n.profile-view .data-grid table.data {\n    background: white;\n}\n\n.profile-view .data-grid tr:not(.selected) .highlight {\n    background-color: rgb(255, 230, 179);\n}\n\n.profile-view .data-grid tr:hover td:not(.bottom-filler-td) {\n    background-color: rgba(0, 0, 0, 0.1);\n}\n\n.profile-view .data-grid td.numeric-column {\n    text-align: right;\n}\n\n.profile-view .data-grid div.profile-multiple-values {\n    float: right;\n}\n\n.profile-view .data-grid span.percent-column {\n    color: #999;\n    width: 50px;\n    display: inline-block;\n}\n\n.profile-view .data-grid tr.selected span {\n    color: inherit;\n}\n\n.profiles-toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: 1px solid #ccc;\n    flex-shrink: 0;\n}\n\n.profiles-tree-sidebar {\n    flex: auto;\n    overflow: hidden;\n}\n\n.profiles-sidebar-tree-box {\n    overflow-y: auto;\n}\n\n.profile-view {\n    display: flex;\n    overflow: hidden;\n}\n\n.profile-view .data-grid {\n    border: none;\n    flex: auto;\n}\n\n.profile-view .data-grid th.self-column,\n.profile-view .data-grid th.total-column {\n    text-align: center;\n}\n\n.profile-node-file {\n    float: right;\n    color: gray;\n}\n\n.profile-warn-marker {\n    vertical-align: -1px;\n    margin-right: 2px;\n}\n\n.data-grid tr.selected .profile-node-file {\n    color: rgb(33%, 33%, 33%);\n}\n\n.data-grid:focus tr.selected .profile-node-file {\n    color: white;\n}\n\n.highlighted-row {\n    -webkit-animation: row_highlight 2s 0s;\n}\n\n@-webkit-keyframes row_highlight {\n    from {background-color: rgba(255, 255, 120, 1); }\n    to { background-color: rgba(255, 255, 120, 0); }\n}\n\n.cpu-profile-flame-chart-overview-container {\n    overflow: hidden;\n    position: absolute;\n    top: 0;\n    width: 100%;\n    height: 80px;\n}\n\n#cpu-profile-flame-chart-overview-container {\n    border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n}\n\n.cpu-profile-flame-chart-overview-canvas {\n    position: absolute;\n    top: 20px;\n    left: 0;\n    right: 0;\n    bottom: 0;\n}\n\n#cpu-profile-flame-chart-overview-grid .resources-dividers-label-bar {\n    pointer-events: auto;\n}\n\n.cpu-profile-flame-chart-overview-pane {\n    flex: 0 0 80px !important;\n}\n\n.profile-text-view {\n    padding: 10px;\n    overflow: auto;\n    margin: 0;\n    user-select: text;\n    cursor: text;\n}\n\n/*# sourceURL=profiler/profilesPanel.css */";Root.Runtime.cachedResources["profiler/profilesSidebarTree.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n/* Tree outline overrides */\n\n:host {\n    padding: 0;\n}\n\nol.tree-outline {\n    overflow: auto;\n    flex: auto;\n    padding: 0;\n    margin: 0;\n}\n\n.tree-outline li {\n    height: 36px;\n    padding-right: 5px;\n    margin-top: 1px;\n    line-height: 34px;\n    border-top: 1px solid transparent;\n}\n\n.tree-outline li:not(.parent)::before {\n    display: none;\n}\n\n:host-context(.some-expandable) .tree-outline li:not(.parent) {\n    margin-left: 10px;\n}\n\n.tree-outline li.profiles-tree-section {\n    height: 18px;\n    padding: 0 10px;\n    white-space: nowrap;\n    margin-top: 1px;\n    color: rgb(92, 110, 129);\n    text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0;\n    line-height: 18px;\n}\n\n.tree-outline li.profiles-tree-section::before {\n    display: none;\n}\n\n.tree-outline ol {\n    overflow: hidden;\n}\n\n/* Generic items styling */\n\n.title-container > .save-link {\n    text-decoration: underline;\n    margin-left: auto;\n    display: none;\n}\n\nli.selected .title-container > .save-link {\n    display: block;\n    cursor: pointer;\n}\n\n.tree-outline > .icon {\n    margin-left: 16px;\n}\n\nli .icon {\n    width: 32px;\n    height: 32px;\n    margin-top: 1px;\n    margin-right: 3px;\n    flex: none;\n}\n\nli.wait .icon {\n    content: none;\n}\n\nli.wait .icon::before {\n    display: block;\n    width: 24px;\n    height: 24px;\n    margin: 4px;\n    border: 3px solid grey;\n    border-radius: 12px;\n    clip: rect(0, 15px, 15px, 0);\n    content: \"\";\n    position: absolute;\n    -webkit-animation: spinner-animation 1s linear infinite;\n    box-sizing: border-box;\n}\n\nli.wait.small .icon::before {\n    width: 14px;\n    height: 14px;\n    margin: 1px;\n    clip: rect(0, 9px, 9px, 0);\n    border-width: 2px;\n}\n\nli.wait.selected .icon::before {\n    border-color: white;\n}\n\n@-webkit-keyframes spinner-animation {\n    from { transform: rotate(0); }\n    to { transform: rotate(360deg); }\n}\n\nli.small {\n    height: 20px;\n}\n\nli.small .icon {\n    width: 16px;\n    height: 16px;\n}\n\nli .titles {\n    display: flex;\n    flex-direction: column;\n    top: 5px;\n    line-height: 12px;\n    padding-bottom: 1px;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n    flex: auto;\n}\n\nli .titles > .title-container {\n    display: flex;\n}\n\nli.small .titles {\n    top: 2px;\n    line-height: normal;\n}\n\nli:not(.small) .title::after {\n    content: \"\\A\";\n    white-space: pre;\n}\n\nli .subtitle {\n    font-size: 80%;\n}\n\nli.small .subtitle {\n    display: none;\n}\n\n/* Heap profiles */\n\n.heap-snapshot-sidebar-tree-item .icon {\n    content: url(Images/profileIcon.png);\n}\n\n.heap-snapshot-sidebar-tree-item.small .icon {\n    content: url(Images/profileSmallIcon.png);\n}\n\n/* Launcher */\n\n.profile-launcher-view-tree-item {\n    margin-left: 0 !important;\n}\n\n.profile-launcher-view-tree-item > .icon {\n    width: 8px !important;\n    visibility: hidden;\n}\n\n/* CPU profiles */\n\n.profile-sidebar-tree-item .icon {\n    content: url(Images/profileIcon.png);\n}\n\n.profile-sidebar-tree-item.small .icon {\n    content: url(Images/profileSmallIcon.png);\n}\n\n.profile-group-sidebar-tree-item .icon {\n    content: url(Images/profileGroupIcon.png);\n}\n\n/*# sourceURL=profiler/profilesSidebarTree.css */";Root.Runtime.cachedResources["quick_open/filteredListWidget.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.filtered-list-widget {\n    display: flex;\n    flex-direction: column;\n    flex: auto;\n}\n\n.filtered-list-widget-prompt-element {\n    flex: 0 0 34px;\n    border: 0;\n    margin: 0;\n    padding: 0 6px;\n    z-index: 1;\n    font-size: inherit;\n}\n\n.filtered-list-widget-input {\n    white-space: pre;\n    height: 18px;\n    margin-top: 12px;\n    overflow: hidden;\n    flex: auto;\n}\n\n.filtered-list-widget-progress {\n    flex: none;\n    background: rgba(0, 0, 0, 0.2);\n    height: 2px;\n}\n\n.filtered-list-widget-progress-bar {\n    background-color: #2196F3;\n    height: 2px;\n    width: 100%;\n    transform: scaleX(0);\n    transform-origin: top left;\n    opacity: 1;\n    transition: none;\n}\n\n.filtered-widget-progress-fade {\n    opacity: 0;\n    transition: opacity 500ms;\n}\n\n.filtered-list-widget > div.container {\n    flex: auto;\n    overflow-y: auto;\n    background: #fbfbfb;\n}\n\n.filtered-list-widget-item {\n    padding: 4px 6px;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    color: rgb(95, 95, 95);\n}\n\n.filtered-list-widget-item.selected {\n    background-color: #f0f0f0;\n}\n\n:host-context(.-theme-with-dark-background) .filtered-list-widget-item.selected {\n    background-color: #333333;\n}\n\n.filtered-list-widget-item span.highlight {\n    color: #222;\n    font-weight: bold;\n}\n\n.filtered-list-widget-item .filtered-list-widget-title {\n    flex: auto;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.filtered-list-widget-item .filtered-list-widget-subtitle {\n    flex: none;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    color: rgb(155, 155, 155);\n    display: flex;\n}\n\n.filtered-list-widget-item .filtered-list-widget-subtitle .first-part {\n    flex-shrink: 1000;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.filtered-list-widget-item.one-row {\n    display: flex;\n}\n\n.filtered-list-widget-item.two-rows {\n    border-bottom: 1px solid rgb(235, 235, 235);\n}\n\n.tag {\n    color: white;\n    padding: 1px 3px;\n    margin-right: 5px;\n    border-radius: 2px;\n    line-height: 18px;\n}\n\n.filtered-list-widget-item .tag .highlight {\n    color: white;\n}\n\n.not-found-text {\n    height: 34px;\n    line-height: 34px;\n    padding-left: 4px;\n    font-style: italic;\n    color: #888;\n    background: #fbfbfb;\n}\n\n/*# sourceURL=quick_open/filteredListWidget.css */";Resources.ApplicationCacheModel=class extends SDK.SDKModel{constructor(target){super(target);target.registerApplicationCacheDispatcher(new Resources.ApplicationCacheDispatcher(this));this._agent=target.applicationCacheAgent();this._agent.enable();const resourceTreeModel=target.model(SDK.ResourceTreeModel);resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameNavigated,this._frameNavigated,this);resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameDetached,this._frameDetached,this);this._statuses={};this._manifestURLsByFrame={};this._mainFrameNavigated();this._onLine=true;}
async _frameNavigated(event){const frame=(event.data);if(frame.isMainFrame()){this._mainFrameNavigated();return;}
const frameId=frame.id;const manifestURL=await this._agent.getManifestForFrame(frameId);if(manifestURL!==null&&!manifestURL){this._frameManifestRemoved(frameId);}}
_frameDetached(event){const frame=(event.data);this._frameManifestRemoved(frame.id);}
reset(){this._statuses={};this._manifestURLsByFrame={};this.dispatchEventToListeners(Resources.ApplicationCacheModel.Events.FrameManifestsReset);}
async _mainFrameNavigated(){const framesWithManifests=await this._agent.getFramesWithManifests();for(const frame of framesWithManifests||[]){this._frameManifestUpdated(frame.frameId,frame.manifestURL,frame.status);}}
_frameManifestUpdated(frameId,manifestURL,status){if(status===Resources.ApplicationCacheModel.UNCACHED){this._frameManifestRemoved(frameId);return;}
if(!manifestURL){return;}
if(this._manifestURLsByFrame[frameId]&&manifestURL!==this._manifestURLsByFrame[frameId]){this._frameManifestRemoved(frameId);}
const statusChanged=this._statuses[frameId]!==status;this._statuses[frameId]=status;if(!this._manifestURLsByFrame[frameId]){this._manifestURLsByFrame[frameId]=manifestURL;this.dispatchEventToListeners(Resources.ApplicationCacheModel.Events.FrameManifestAdded,frameId);}
if(statusChanged){this.dispatchEventToListeners(Resources.ApplicationCacheModel.Events.FrameManifestStatusUpdated,frameId);}}
_frameManifestRemoved(frameId){if(!this._manifestURLsByFrame[frameId]){return;}
delete this._manifestURLsByFrame[frameId];delete this._statuses[frameId];this.dispatchEventToListeners(Resources.ApplicationCacheModel.Events.FrameManifestRemoved,frameId);}
frameManifestURL(frameId){return this._manifestURLsByFrame[frameId]||'';}
frameManifestStatus(frameId){return this._statuses[frameId]||Resources.ApplicationCacheModel.UNCACHED;}
get onLine(){return this._onLine;}
_statusUpdated(frameId,manifestURL,status){this._frameManifestUpdated(frameId,manifestURL,status);}
requestApplicationCache(frameId){return this._agent.getApplicationCacheForFrame(frameId);}
_networkStateUpdated(isNowOnline){this._onLine=isNowOnline;this.dispatchEventToListeners(Resources.ApplicationCacheModel.Events.NetworkStateChanged,isNowOnline);}};SDK.SDKModel.register(Resources.ApplicationCacheModel,SDK.Target.Capability.DOM,false);Resources.ApplicationCacheModel.Events={FrameManifestStatusUpdated:Symbol('FrameManifestStatusUpdated'),FrameManifestAdded:Symbol('FrameManifestAdded'),FrameManifestRemoved:Symbol('FrameManifestRemoved'),FrameManifestsReset:Symbol('FrameManifestsReset'),NetworkStateChanged:Symbol('NetworkStateChanged')};Resources.ApplicationCacheDispatcher=class{constructor(applicationCacheModel){this._applicationCacheModel=applicationCacheModel;}
applicationCacheStatusUpdated(frameId,manifestURL,status){this._applicationCacheModel._statusUpdated(frameId,manifestURL,status);}
networkStateUpdated(isNowOnline){this._applicationCacheModel._networkStateUpdated(isNowOnline);}};Resources.ApplicationCacheModel.UNCACHED=0;Resources.ApplicationCacheModel.IDLE=1;Resources.ApplicationCacheModel.CHECKING=2;Resources.ApplicationCacheModel.DOWNLOADING=3;Resources.ApplicationCacheModel.UPDATEREADY=4;Resources.ApplicationCacheModel.OBSOLETE=5;;Resources.AppManifestView=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('resources/appManifestView.css');Common.moduleSetting('colorFormat').addChangeListener(this._updateManifest.bind(this,true));this._emptyView=new UI.EmptyWidget(Common.UIString('No manifest detected'));this._emptyView.appendLink('https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/?utm_source=devtools');this._emptyView.show(this.contentElement);this._emptyView.hideWidget();this._reportView=new UI.ReportView(Common.UIString('App Manifest'));this._reportView.show(this.contentElement);this._reportView.hideWidget();this._errorsSection=this._reportView.appendSection(Common.UIString('Errors and warnings'));this._installabilitySection=this._reportView.appendSection(Common.UIString('Installability'));this._identitySection=this._reportView.appendSection(Common.UIString('Identity'));this._presentationSection=this._reportView.appendSection(Common.UIString('Presentation'));this._iconsSection=this._reportView.appendSection(Common.UIString('Icons'));this._nameField=this._identitySection.appendField(Common.UIString('Name'));this._shortNameField=this._identitySection.appendField(Common.UIString('Short name'));this._startURLField=this._presentationSection.appendField(Common.UIString('Start URL'));const themeColorField=this._presentationSection.appendField(Common.UIString('Theme color'));this._themeColorSwatch=InlineEditor.ColorSwatch.create();themeColorField.appendChild(this._themeColorSwatch);const backgroundColorField=this._presentationSection.appendField(Common.UIString('Background color'));this._backgroundColorSwatch=InlineEditor.ColorSwatch.create();backgroundColorField.appendChild(this._backgroundColorSwatch);this._orientationField=this._presentationSection.appendField(Common.UIString('Orientation'));this._displayField=this._presentationSection.appendField(Common.UIString('Display'));this._throttler=new Common.Throttler(1000);SDK.targetManager.observeTargets(this);}
targetAdded(target){if(this._target){return;}
this._target=target;this._resourceTreeModel=target.model(SDK.ResourceTreeModel);this._serviceWorkerManager=target.model(SDK.ServiceWorkerManager);if(!this._resourceTreeModel||!this._serviceWorkerManager){return;}
this._updateManifest(true);this._registeredListeners=[this._resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.DOMContentLoaded,this._updateManifest.bind(this,true)),this._serviceWorkerManager.addEventListener(SDK.ServiceWorkerManager.Events.RegistrationUpdated,this._updateManifest.bind(this,false))];}
targetRemoved(target){if(this._target!==target){return;}
if(!this._resourceTreeModel||!this._serviceWorkerManager){return;}
delete this._resourceTreeModel;delete this._serviceWorkerManager;Common.EventTarget.removeEventListeners(this._registeredListeners);}
async _updateManifest(immediately){const{url,data,errors}=await this._resourceTreeModel.fetchAppManifest();const installabilityErrors=await this._resourceTreeModel.getInstallabilityErrors();this._throttler.schedule(()=>this._renderManifest(url,data,errors,installabilityErrors),immediately);}
async _renderManifest(url,data,errors,installabilityErrors){if(!data&&!errors.length){this._emptyView.showWidget();this._reportView.hideWidget();return;}
this._emptyView.hideWidget();this._reportView.showWidget();const link=Components.Linkifier.linkifyURL(url);link.tabIndex=0;this._reportView.setURL(link);this._errorsSection.clearContent();this._errorsSection.element.classList.toggle('hidden',!errors.length);for(const error of errors){this._errorsSection.appendRow().appendChild(UI.createIconLabel(error.message,error.critical?'smallicon-error':'smallicon-warning'));}
if(!data){return;}
if(data.charCodeAt(0)===0xFEFF){data=data.slice(1);}
const parsedManifest=JSON.parse(data);this._nameField.textContent=stringProperty('name');this._shortNameField.textContent=stringProperty('short_name');this._startURLField.removeChildren();const startURL=stringProperty('start_url');if(startURL){const completeURL=(Common.ParsedURL.completeURL(url,startURL));const link=Components.Linkifier.linkifyURL(completeURL,{text:startURL});link.tabIndex=0;this._startURLField.appendChild(link);}
this._themeColorSwatch.classList.toggle('hidden',!stringProperty('theme_color'));const themeColor=Common.Color.parse(stringProperty('theme_color')||'white')||Common.Color.parse('white');this._themeColorSwatch.setColor((themeColor));this._themeColorSwatch.setFormat(Common.Color.detectColorFormat(this._themeColorSwatch.color()));this._backgroundColorSwatch.classList.toggle('hidden',!stringProperty('background_color'));const backgroundColor=Common.Color.parse(stringProperty('background_color')||'white')||Common.Color.parse('white');this._backgroundColorSwatch.setColor((backgroundColor));this._backgroundColorSwatch.setFormat(Common.Color.detectColorFormat(this._backgroundColorSwatch.color()));this._orientationField.textContent=stringProperty('orientation');const displayType=stringProperty('display');this._displayField.textContent=displayType;const icons=parsedManifest['icons']||[];this._iconsSection.clearContent();const imageErrors=[];for(const icon of icons){const iconUrl=Common.ParsedURL.completeURL(url,icon['src']);const image=await this._loadImage(iconUrl);if(!image){imageErrors.push(ls`Icon ${iconUrl} failed to load`);continue;}
const title=(icon['sizes']||'')+'\n'+(icon['type']||'');const field=this._iconsSection.appendFlexedField(title);if(!icon.sizes){imageErrors.push(ls`Icon ${iconUrl} does not specify it's size in the manifest`);}else if(!icon.sizes.match(/^\d+x\d+$/)){imageErrors.push(ls`Icon ${iconUrl} should specify it's size as {width}x{height}`);}else{const[width,height]=icon.sizes.split('x').map(x=>parseInt(x,10));if(image.naturalWidth!==width&&image.naturalHeight!==height){imageErrors.push(ls`Actual size (${image.naturalWidth}x${image.naturalHeight}) of icon ${
              iconUrl} does not match specified size (${width}x${height})`);}else if(image.naturalWidth!==width){imageErrors.push(ls`Actual width (${image.naturalWidth}px) of icon ${iconUrl} does not match specified width (${width}px)`);}else if(image.naturalHeight!==height){imageErrors.push(ls`Actual height (${image.naturalHeight}px) of icon ${
              iconUrl} does not match specified height (${height}px)`);}}
field.appendChild(image);}
this._installabilitySection.clearContent();this._installabilitySection.element.classList.toggle('hidden',!installabilityErrors.length);for(const error of installabilityErrors){this._installabilitySection.appendRow().appendChild(UI.createIconLabel(error,'smallicon-warning'));}
this._errorsSection.element.classList.toggle('hidden',!errors.length&&!imageErrors.length);for(const error of imageErrors){this._errorsSection.appendRow().appendChild(UI.createIconLabel(error,'smallicon-warning'));}
function stringProperty(name){const value=parsedManifest[name];if(typeof value!=='string'){return'';}
return value;}}
async _loadImage(url){const image=createElement('img');image.style.maxWidth='200px';image.style.maxHeight='200px';const result=new Promise((f,r)=>{image.onload=f;image.onerror=r;});image.src=url;image.alt=ls`Image from ${url}`;try{await result;return image;}catch(e){}
return null;}};;Resources.ApplicationCacheItemsView=class extends UI.SimpleView{constructor(model,frameId){super(Common.UIString('AppCache'));this._model=model;this.element.classList.add('storage-view','table');this._deleteButton=new UI.ToolbarButton(Common.UIString('Delete'),'largeicon-delete');this._deleteButton.setVisible(false);this._deleteButton.addEventListener(UI.ToolbarButton.Events.Click,this._deleteButtonClicked,this);this._connectivityIcon=createElement('span','dt-icon-label');this._connectivityIcon.style.margin='0 2px 0 5px';this._statusIcon=createElement('span','dt-icon-label');this._statusIcon.style.margin='0 2px 0 5px';this._frameId=frameId;this._emptyWidget=new UI.EmptyWidget(Common.UIString('No Application Cache information available.'));this._emptyWidget.show(this.element);this._markDirty();const status=this._model.frameManifestStatus(frameId);this.updateStatus(status);this.updateNetworkState(this._model.onLine);this._deleteButton.element.style.display='none';}
syncToolbarItems(){return[this._deleteButton,new UI.ToolbarItem(this._connectivityIcon),new UI.ToolbarSeparator(),new UI.ToolbarItem(this._statusIcon)];}
wasShown(){this._maybeUpdate();}
willHide(){this._deleteButton.setVisible(false);}
_maybeUpdate(){if(!this.isShowing()||!this._viewDirty){return;}
this._update();this._viewDirty=false;}
_markDirty(){this._viewDirty=true;}
updateStatus(status){const oldStatus=this._status;this._status=status;const statusInformation={};statusInformation[Resources.ApplicationCacheModel.UNCACHED]={type:'smallicon-red-ball',text:'UNCACHED'};statusInformation[Resources.ApplicationCacheModel.IDLE]={type:'smallicon-green-ball',text:'IDLE'};statusInformation[Resources.ApplicationCacheModel.CHECKING]={type:'smallicon-orange-ball',text:'CHECKING'};statusInformation[Resources.ApplicationCacheModel.DOWNLOADING]={type:'smallicon-orange-ball',text:'DOWNLOADING'};statusInformation[Resources.ApplicationCacheModel.UPDATEREADY]={type:'smallicon-green-ball',text:'UPDATEREADY'};statusInformation[Resources.ApplicationCacheModel.OBSOLETE]={type:'smallicon-red-ball',text:'OBSOLETE'};const info=statusInformation[status]||statusInformation[Resources.ApplicationCacheModel.UNCACHED];this._statusIcon.type=info.type;this._statusIcon.textContent=info.text;if(this.isShowing()&&this._status===Resources.ApplicationCacheModel.IDLE&&(oldStatus===Resources.ApplicationCacheModel.UPDATEREADY||!this._resources)){this._markDirty();}
this._maybeUpdate();}
updateNetworkState(isNowOnline){if(isNowOnline){this._connectivityIcon.type='smallicon-green-ball';this._connectivityIcon.textContent=Common.UIString('Online');}else{this._connectivityIcon.type='smallicon-red-ball';this._connectivityIcon.textContent=Common.UIString('Offline');}}
async _update(){const applicationCache=await this._model.requestApplicationCache(this._frameId);if(!applicationCache||!applicationCache.manifestURL){delete this._manifest;delete this._creationTime;delete this._updateTime;delete this._size;delete this._resources;this._emptyWidget.show(this.element);this._deleteButton.setVisible(false);if(this._dataGrid){this._dataGrid.element.classList.add('hidden');}
return;}
this._manifest=applicationCache.manifestURL;this._creationTime=applicationCache.creationTime;this._updateTime=applicationCache.updateTime;this._size=applicationCache.size;this._resources=applicationCache.resources;if(!this._dataGrid){this._createDataGrid();}
this._populateDataGrid();this._dataGrid.autoSizeColumns(20,80);this._dataGrid.element.classList.remove('hidden');this._emptyWidget.detach();this._deleteButton.setVisible(true);}
_createDataGrid(){const columns=([{id:'resource',title:Common.UIString('Resource'),sort:DataGrid.DataGrid.Order.Ascending,sortable:true},{id:'type',title:Common.UIString('Type'),sortable:true},{id:'size',title:Common.UIString('Size'),align:DataGrid.DataGrid.Align.Right,sortable:true}]);this._dataGrid=new DataGrid.DataGrid(columns);this._dataGrid.setStriped(true);this._dataGrid.asWidget().show(this.element);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._populateDataGrid,this);}
_populateDataGrid(){const selectedResource=this._dataGrid.selectedNode?this._dataGrid.selectedNode.resource:null;const sortDirection=this._dataGrid.isSortOrderAscending()?1:-1;function numberCompare(field,resource1,resource2){return sortDirection*(resource1[field]-resource2[field]);}
function localeCompare(field,resource1,resource2){return sortDirection*(resource1[field]+'').localeCompare(resource2[field]+'');}
let comparator;switch(this._dataGrid.sortColumnId()){case'resource':comparator=localeCompare.bind(null,'url');break;case'type':comparator=localeCompare.bind(null,'type');break;case'size':comparator=numberCompare.bind(null,'size');break;default:localeCompare.bind(null,'resource');}
this._resources.sort(comparator);this._dataGrid.rootNode().removeChildren();let nodeToSelect;for(let i=0;i<this._resources.length;++i){const data={};const resource=this._resources[i];data.resource=resource.url;data.type=resource.type;data.size=Number.bytesToString(resource.size);const node=new DataGrid.DataGridNode(data);node.resource=resource;node.selectable=true;this._dataGrid.rootNode().appendChild(node);if(resource===selectedResource){nodeToSelect=node;nodeToSelect.selected=true;}}
if(!nodeToSelect&&this._dataGrid.rootNode().children.length){this._dataGrid.rootNode().children[0].selected=true;}}
_deleteButtonClicked(event){if(!this._dataGrid||!this._dataGrid.selectedNode){return;}
this._deleteCallback(this._dataGrid.selectedNode);}
_deleteCallback(node){}};;Resources.BackgroundServiceModel=class extends SDK.SDKModel{constructor(target){super(target);this._backgroundServiceAgent=target.backgroundServiceAgent();target.registerBackgroundServiceDispatcher(this);this._events=new Map();}
enable(serviceName){this._events.set(serviceName,[]);this._backgroundServiceAgent.startObserving(serviceName);}
setRecording(shouldRecord,serviceName){this._backgroundServiceAgent.setRecording(shouldRecord,serviceName);}
clearEvents(serviceName){this._events.set(serviceName,[]);this._backgroundServiceAgent.clearEvents(serviceName);}
getEvents(serviceName){return this._events.get(serviceName)||[];}
recordingStateChanged(isRecording,serviceName){this.dispatchEventToListeners(Resources.BackgroundServiceModel.Events.RecordingStateChanged,{isRecording,serviceName});}
backgroundServiceEventReceived(backgroundServiceEvent){this._events.get(backgroundServiceEvent.service).push(backgroundServiceEvent);this.dispatchEventToListeners(Resources.BackgroundServiceModel.Events.BackgroundServiceEventReceived,backgroundServiceEvent);}};SDK.SDKModel.register(Resources.BackgroundServiceModel,SDK.Target.Capability.Browser,false);Resources.BackgroundServiceModel.Events={RecordingStateChanged:Symbol('RecordingStateChanged'),BackgroundServiceEventReceived:Symbol('BackgroundServiceEventReceived'),};Resources.BackgroundServiceModel.RecordingState;;Resources.BackgroundServiceView=class extends UI.VBox{static getUIString(serviceName){switch(serviceName){case Protocol.BackgroundService.ServiceName.BackgroundFetch:return ls`Background Fetch`;case Protocol.BackgroundService.ServiceName.BackgroundSync:return ls`Background Sync`;case Protocol.BackgroundService.ServiceName.PushMessaging:return ls`Push Messaging`;case Protocol.BackgroundService.ServiceName.Notifications:return ls`Notifications`;case Protocol.BackgroundService.ServiceName.PaymentHandler:return ls`Payment Handler`;case Protocol.BackgroundService.ServiceName.PeriodicBackgroundSync:return ls`Periodic Background Sync`;default:return'';}}
constructor(serviceName,model){super(true);this.registerRequiredCSS('resources/backgroundServiceView.css');this.registerRequiredCSS('ui/emptyWidget.css');this._serviceName=serviceName;this._model=model;this._model.addEventListener(Resources.BackgroundServiceModel.Events.RecordingStateChanged,this._onRecordingStateChanged,this);this._model.addEventListener(Resources.BackgroundServiceModel.Events.BackgroundServiceEventReceived,this._onEventReceived,this);this._model.enable(this._serviceName);this._serviceWorkerManager=this._model.target().model(SDK.ServiceWorkerManager);this._securityOriginManager=this._model.target().model(SDK.SecurityOriginManager);this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.MainSecurityOriginChanged,()=>this._onOriginChanged());this._recordAction=(UI.actionRegistry.action('background-service.toggle-recording'));this._recordButton=null;this._originCheckbox=null;this._saveButton=null;this._toolbar=new UI.Toolbar('background-service-toolbar',this.contentElement);this._setupToolbar();this._splitWidget=new UI.SplitWidget(false,true);this._splitWidget.show(this.contentElement);this._dataGrid=this._createDataGrid();this._previewPanel=new UI.VBox();this._selectedEventNode=null;this._preview=null;this._splitWidget.setMainWidget(this._dataGrid.asWidget());this._splitWidget.setSidebarWidget(this._previewPanel);this._showPreview(null);}
async _setupToolbar(){this._recordButton=UI.Toolbar.createActionButton(this._recordAction);this._toolbar.appendToolbarItem(this._recordButton);const clearButton=new UI.ToolbarButton(ls`Clear`,'largeicon-clear');clearButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._clearEvents());this._toolbar.appendToolbarItem(clearButton);this._toolbar.appendSeparator();this._saveButton=new UI.ToolbarButton(ls`Save events`,'largeicon-download');this._saveButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._saveToFile());this._saveButton.setEnabled(false);this._toolbar.appendToolbarItem(this._saveButton);this._toolbar.appendSeparator();this._originCheckbox=new UI.ToolbarCheckbox(ls`Show events from other domains`,undefined,()=>this._refreshView());this._toolbar.appendToolbarItem(this._originCheckbox);}
_refreshView(){this._clearView();const events=this._model.getEvents(this._serviceName).filter(event=>this._acceptEvent(event));for(const event of events){this._addEvent(event);}}
_clearView(){this._selectedEventNode=null;this._dataGrid.rootNode().removeChildren();this._saveButton.setEnabled(false);this._showPreview(null);}
_toggleRecording(){this._model.setRecording(!this._recordButton.toggled(),this._serviceName);}
_clearEvents(){this._model.clearEvents(this._serviceName);this._clearView();}
_onRecordingStateChanged(event){const state=(event.data);if(state.serviceName!==this._serviceName){return;}
if(state.isRecording===this._recordButton.toggled()){return;}
this._recordButton.setToggled(state.isRecording);this._showPreview(this._selectedEventNode);}
_onEventReceived(event){const serviceEvent=(event.data);if(!this._acceptEvent(serviceEvent)){return;}
this._addEvent(serviceEvent);}
_onOriginChanged(){if(this._originCheckbox.checked()){return;}
this._refreshView();}
_addEvent(serviceEvent){const data=this._createEventData(serviceEvent);const dataNode=new Resources.BackgroundServiceView.EventDataNode(data,serviceEvent.eventMetadata);this._dataGrid.rootNode().appendChild(dataNode);if(this._dataGrid.rootNode().children.length===1){this._saveButton.setEnabled(true);this._showPreview(this._selectedEventNode);}}
_createDataGrid(){const columns=([{id:'id',title:ls`#`,weight:1},{id:'timestamp',title:ls`Timestamp`,weight:8},{id:'eventName',title:ls`Event`,weight:10},{id:'origin',title:ls`Origin`,weight:10},{id:'swScope',title:ls`SW Scope`,weight:2},{id:'instanceId',title:ls`Instance ID`,weight:10},]);const dataGrid=new DataGrid.DataGrid(columns);dataGrid.setStriped(true);dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,event=>this._showPreview((event.data)));return dataGrid;}
_createEventData(serviceEvent){let swScope='';const registration=this._serviceWorkerManager.registrations().get(serviceEvent.serviceWorkerRegistrationId);if(registration){swScope=registration.scopeURL.substr(registration.securityOrigin.length);}
return{id:this._dataGrid.rootNode().children.length+1,timestamp:UI.formatTimestamp(serviceEvent.timestamp*1000,true),origin:serviceEvent.origin,swScope,eventName:serviceEvent.eventName,instanceId:serviceEvent.instanceId,};}
_acceptEvent(event){if(event.service!==this._serviceName){return false;}
if(this._originCheckbox.checked()){return true;}
const origin=event.origin.substr(0,event.origin.length-1);return this._securityOriginManager.securityOrigins().includes(origin);}
_createLearnMoreLink(){let url='https://developers.google.com/web/tools/chrome-devtools/javascript/background-services?utm_source=devtools';switch(this._serviceName){case Protocol.BackgroundService.ServiceName.BackgroundFetch:url+='#fetch';break;case Protocol.BackgroundService.ServiceName.BackgroundSync:url+='#sync';break;case Protocol.BackgroundService.ServiceName.PushMessaging:url+='#push';break;case Protocol.BackgroundService.ServiceName.Notifications:url+='#notifications';break;default:break;}
return UI.XLink.create(url,ls`Learn more`);}
_showPreview(dataNode){if(this._selectedEventNode&&this._selectedEventNode===dataNode){return;}
this._selectedEventNode=dataNode;if(this._preview){this._preview.detach();}
if(this._selectedEventNode){this._preview=this._selectedEventNode.createPreview();this._preview.show(this._previewPanel.contentElement);return;}
this._preview=new UI.VBox();this._preview.contentElement.classList.add('background-service-preview','fill');const centered=this._preview.contentElement.createChild('div');if(this._dataGrid.rootNode().children.length){centered.createChild('p').textContent=ls`Select an entry to view metadata`;}else if(this._recordButton.toggled()){const featureName=Resources.BackgroundServiceView.getUIString(this._serviceName);centered.createChild('p').textContent=ls`Recording ${featureName} activity...`;centered.createChild('p').textContent=ls`DevTools will record all ${featureName} activity for up to 3 days, even when closed.`;}else{const landingRecordButton=UI.Toolbar.createActionButton(this._recordAction);const recordKey=createElementWithClass('b','background-service-shortcut');recordKey.textContent=UI.shortcutRegistry.shortcutDescriptorsForAction('background-service.toggle-recording')[0].name;const inlineButton=UI.createInlineButton(landingRecordButton);inlineButton.classList.add('background-service-record-inline-button');centered.createChild('p').appendChild(UI.formatLocalized('Click the record button %s or hit %s to start recording.',[inlineButton,recordKey]));centered.appendChild(this._createLearnMoreLink());}
this._preview.show(this._previewPanel.contentElement);}
async _saveToFile(){const fileName=`${this._serviceName}-${new Date().toISO8601Compact()}.json`;const stream=new Bindings.FileOutputStream();const accepted=await stream.open(fileName);if(!accepted){return;}
const events=this._model.getEvents(this._serviceName).filter(event=>this._acceptEvent(event));await stream.write(JSON.stringify(events,undefined,2));stream.close();}};Resources.BackgroundServiceView.EventData;Resources.BackgroundServiceView.EventDataNode=class extends DataGrid.DataGridNode{constructor(data,eventMetadata){super(data);this._eventMetadata=eventMetadata.sort((m1,m2)=>m1.key.compareTo(m2.key));}
createPreview(){const preview=new UI.VBox();preview.element.classList.add('background-service-metadata');for(const entry of this._eventMetadata){const div=createElementWithClass('div','background-service-metadata-entry');div.createChild('div','background-service-metadata-name').textContent=entry.key+': ';if(entry.value){div.createChild('div','background-service-metadata-value source-code').textContent=entry.value;}else{div.createChild('div','background-service-metadata-value background-service-empty-value').textContent=ls`empty`;}
preview.element.appendChild(div);}
if(!preview.element.children.length){const div=createElementWithClass('div','background-service-metadata-entry');div.createChild('div','background-service-metadata-name').textContent=ls`No metadata for this event`;preview.element.appendChild(div);}
return preview;}};Resources.BackgroundServiceView.ActionDelegate=class{handleAction(context,actionId){const view=context.flavor(Resources.BackgroundServiceView);switch(actionId){case'background-service.toggle-recording':view._toggleRecording();return true;}
return false;}};;Resources.ClearStorageView=class extends UI.ThrottledWidget{constructor(){super(true,1000);const types=Protocol.Storage.StorageType;this._pieColors=new Map([[types.Appcache,'rgb(110, 161, 226)'],[types.Cache_storage,'rgb(229, 113, 113)'],[types.Cookies,'rgb(239, 196, 87)'],[types.Indexeddb,'rgb(155, 127, 230)'],[types.Local_storage,'rgb(116, 178, 102)'],[types.Service_workers,'rgb(255, 167, 36)'],[types.Websql,'rgb(203, 220, 56)'],]);this._reportView=new UI.ReportView(Common.UIString('Clear storage'));this._reportView.registerRequiredCSS('resources/clearStorageView.css');this._reportView.element.classList.add('clear-storage-header');this._reportView.show(this.contentElement);this._target=null;this._securityOrigin=null;this._settings=new Map();for(const type of Resources.ClearStorageView.AllStorageTypes){this._settings.set(type,Common.settings.createSetting('clear-storage-'+type,true));}
const quota=this._reportView.appendSection(Common.UIString('Usage'));this._quotaRow=quota.appendSelectableRow();const learnMoreRow=quota.appendRow();const learnMore=UI.XLink.create('https://developers.google.com/web/tools/chrome-devtools/progressive-web-apps#opaque-responses',ls`Learn more`);learnMoreRow.appendChild(learnMore);this._quotaUsage=null;this._pieChart=new PerfUI.PieChart({chartName:ls`Storage Usage`,size:110,formatter:Number.bytesToString,showLegend:true});const usageBreakdownRow=quota.appendRow();usageBreakdownRow.classList.add('usage-breakdown-row');usageBreakdownRow.appendChild(this._pieChart.element);const clearButtonSection=this._reportView.appendSection('','clear-storage-button').appendRow();this._clearButton=UI.createTextButton(ls`Clear site data`,this._clear.bind(this));clearButtonSection.appendChild(this._clearButton);const application=this._reportView.appendSection(Common.UIString('Application'));this._appendItem(application,Common.UIString('Unregister service workers'),'service_workers');application.markFieldListAsGroup();const storage=this._reportView.appendSection(Common.UIString('Storage'));this._appendItem(storage,Common.UIString('Local and session storage'),'local_storage');this._appendItem(storage,Common.UIString('IndexedDB'),'indexeddb');this._appendItem(storage,Common.UIString('Web SQL'),'websql');this._appendItem(storage,Common.UIString('Cookies'),'cookies');storage.markFieldListAsGroup();const caches=this._reportView.appendSection(Common.UIString('Cache'));this._appendItem(caches,Common.UIString('Cache storage'),'cache_storage');this._appendItem(caches,Common.UIString('Application cache'),'appcache');caches.markFieldListAsGroup();SDK.targetManager.observeTargets(this);}
_appendItem(section,title,settingName){const row=section.appendRow();row.appendChild(UI.SettingsUI.createSettingCheckbox(title,this._settings.get(settingName),true));}
targetAdded(target){if(this._target){return;}
this._target=target;const securityOriginManager=target.model(SDK.SecurityOriginManager);this._updateOrigin(securityOriginManager.mainSecurityOrigin(),securityOriginManager.unreachableMainSecurityOrigin());securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.MainSecurityOriginChanged,this._originChanged,this);}
targetRemoved(target){if(this._target!==target){return;}
const securityOriginManager=target.model(SDK.SecurityOriginManager);securityOriginManager.removeEventListener(SDK.SecurityOriginManager.Events.MainSecurityOriginChanged,this._originChanged,this);}
_originChanged(event){const mainOrigin=(event.data.mainSecurityOrigin);const unreachableMainOrigin=(event.data.unreachableMainSecurityOrigin);this._updateOrigin(mainOrigin,unreachableMainOrigin);}
_updateOrigin(mainOrigin,unreachableMainOrigin){if(unreachableMainOrigin){this._securityOrigin=unreachableMainOrigin;this._reportView.setSubtitle(ls`${unreachableMainOrigin} (failed to load)`);}else{this._securityOrigin=mainOrigin;this._reportView.setSubtitle(mainOrigin);}
this.doUpdate();}
_clear(){if(!this._securityOrigin){return;}
const selectedStorageTypes=[];for(const type of this._settings.keys()){if(this._settings.get(type).get()){selectedStorageTypes.push(type);}}
if(this._target){Resources.ClearStorageView.clear(this._target,this._securityOrigin,selectedStorageTypes);}
this._clearButton.disabled=true;const label=this._clearButton.textContent;this._clearButton.textContent=Common.UIString('Clearing...');setTimeout(()=>{this._clearButton.disabled=false;this._clearButton.textContent=label;},500);}
static clear(target,securityOrigin,selectedStorageTypes){target.storageAgent().clearDataForOrigin(securityOrigin,selectedStorageTypes.join(','));const set=new Set(selectedStorageTypes);const hasAll=set.has(Protocol.Storage.StorageType.All);if(set.has(Protocol.Storage.StorageType.Cookies)||hasAll){const cookieModel=target.model(SDK.CookieModel);if(cookieModel){cookieModel.clear();}}
if(set.has(Protocol.Storage.StorageType.Indexeddb)||hasAll){for(const target of SDK.targetManager.targets()){const indexedDBModel=target.model(Resources.IndexedDBModel);if(indexedDBModel){indexedDBModel.clearForOrigin(securityOrigin);}}}
if(set.has(Protocol.Storage.StorageType.Local_storage)||hasAll){const storageModel=target.model(Resources.DOMStorageModel);if(storageModel){storageModel.clearForOrigin(securityOrigin);}}
if(set.has(Protocol.Storage.StorageType.Websql)||hasAll){const databaseModel=target.model(Resources.DatabaseModel);if(databaseModel){databaseModel.disable();databaseModel.enable();}}
if(set.has(Protocol.Storage.StorageType.Cache_storage)||hasAll){const target=SDK.targetManager.mainTarget();const model=target&&target.model(SDK.ServiceWorkerCacheModel);if(model){model.clearForOrigin(securityOrigin);}}
if(set.has(Protocol.Storage.StorageType.Appcache)||hasAll){const appcacheModel=target.model(Resources.ApplicationCacheModel);if(appcacheModel){appcacheModel.reset();}}}
async doUpdate(){if(!this._securityOrigin){return;}
const securityOrigin=(this._securityOrigin);const response=await this._target.storageAgent().invoke_getUsageAndQuota({origin:securityOrigin});if(response[Protocol.Error]){this._quotaRow.textContent='';this._resetPieChart(0);return;}
this._quotaRow.textContent=Common.UIString('%s used out of %s storage quota.\xA0',Number.bytesToString(response.usage),Number.bytesToString(response.quota));if(response.quota<125829120){this._quotaRow.title=ls`Storage quota is limited in Incognito mode`;this._quotaRow.appendChild(UI.Icon.create('smallicon-info'));}
if(!this._quotaUsage||this._quotaUsage!==response.usage){this._quotaUsage=response.usage;this._resetPieChart(response.usage);for(const usageForType of response.usageBreakdown.sort((a,b)=>b.usage-a.usage)){const value=usageForType.usage;if(!value){continue;}
const title=this._getStorageTypeName(usageForType.storageType);const color=this._pieColors.get(usageForType.storageType)||'#ccc';this._pieChart.addSlice(value,color,title);}}
this._usageUpdatedForTest(response.usage,response.quota,response.usageBreakdown);this.update();}
_resetPieChart(total){this._pieChart.setTotal(total);}
_getStorageTypeName(type){switch(type){case Protocol.Storage.StorageType.File_systems:return Common.UIString('File System');case Protocol.Storage.StorageType.Websql:return Common.UIString('Web SQL');case Protocol.Storage.StorageType.Appcache:return Common.UIString('Application Cache');case Protocol.Storage.StorageType.Indexeddb:return Common.UIString('IndexedDB');case Protocol.Storage.StorageType.Cache_storage:return Common.UIString('Cache Storage');case Protocol.Storage.StorageType.Service_workers:return Common.UIString('Service Workers');default:return Common.UIString('Other');}}
_usageUpdatedForTest(usage,quota,usageBreakdown){}};Resources.ClearStorageView.AllStorageTypes=[Protocol.Storage.StorageType.Appcache,Protocol.Storage.StorageType.Cache_storage,Protocol.Storage.StorageType.Cookies,Protocol.Storage.StorageType.Indexeddb,Protocol.Storage.StorageType.Local_storage,Protocol.Storage.StorageType.Service_workers,Protocol.Storage.StorageType.Websql];Resources.ClearStorageView.ActionDelegate=class{handleAction(context,actionId){switch(actionId){case'resources.clear':return this._handleClear();}
return false;}
_handleClear(){const target=SDK.targetManager.mainTarget();if(!target){return false;}
const resourceTreeModel=target.model(SDK.ResourceTreeModel);if(!resourceTreeModel){return false;}
const securityOrigin=resourceTreeModel.getMainSecurityOrigin();if(!securityOrigin){return false;}
Resources.ClearStorageView.clear(target,securityOrigin,Resources.ClearStorageView.AllStorageTypes);return true;}};;Resources.StorageItemsView=class extends UI.VBox{constructor(title,filterName){super(false);this._filterRegex=null;this._refreshButton=this._addButton(Common.UIString('Refresh'),'largeicon-refresh',this.refreshItems);this._mainToolbar=new UI.Toolbar('top-resources-toolbar',this.element);this._filterItem=new UI.ToolbarInput(Common.UIString('Filter'),'',0.4);this._filterItem.addEventListener(UI.ToolbarInput.Event.TextChanged,this._filterChanged,this);const toolbarSeparator=new UI.ToolbarSeparator();this._deleteAllButton=this._addButton(Common.UIString('Clear All'),'largeicon-clear',this.deleteAllItems);this._deleteSelectedButton=this._addButton(Common.UIString('Delete Selected'),'largeicon-delete',this.deleteSelectedItem);const toolbarItems=[this._refreshButton,this._filterItem,toolbarSeparator,this._deleteAllButton,this._deleteSelectedButton];for(const item of toolbarItems){this._mainToolbar.appendToolbarItem(item);}}
_addButton(label,glyph,callback){const button=new UI.ToolbarButton(label,glyph);button.addEventListener(UI.ToolbarButton.Events.Click,callback,this);return button;}
_filterChanged(event){const text=(event.data);this._filterRegex=text?new RegExp(text.escapeForRegExp(),'i'):null;this.refreshItems();}
filter(items,keyFunction){if(!this._filterRegex){return items;}
return items.filter(item=>this._filterRegex.test(keyFunction(item)));}
wasShown(){this.refreshItems();}
setCanDeleteAll(enabled){this._deleteAllButton.setEnabled(enabled);}
setCanDeleteSelected(enabled){this._deleteSelectedButton.setEnabled(enabled);}
setCanRefresh(enabled){this._refreshButton.setEnabled(enabled);}
setCanFilter(enabled){this._filterItem.setEnabled(enabled);}
deleteAllItems(){}
deleteSelectedItem(){}
refreshItems(){}};;Resources.CookieItemsView=class extends Resources.StorageItemsView{constructor(model,cookieDomain){super(Common.UIString('Cookies'),'cookiesPanel');this.registerRequiredCSS('resources/cookieItemsView.css');this.element.classList.add('storage-view');this._model=model;this._cookieDomain=cookieDomain;this._totalSize=0;this._cookiesTable=this._cookiesTable=new CookieTable.CookiesTable(false,this._saveCookie.bind(this),this.refreshItems.bind(this),this._handleCookieSelected.bind(this),this._deleteCookie.bind(this));this._cookiesTable.setMinimumSize(0,50);this._splitWidget=new UI.SplitWidget(false,false);this._splitWidget.show(this.element);this._splitWidget.setSecondIsSidebar(true);this._previewPanel=new UI.VBox();const resizer=this._previewPanel.element.createChild('div','preview-panel-resizer');this._splitWidget.setMainWidget(this._cookiesTable);this._splitWidget.setSidebarWidget(this._previewPanel);this._splitWidget.installResizer(resizer);this._refreshThrottler=new Common.Throttler(300);this._eventDescriptors=[];this._preview=null;this._previewValue=null;this.setCookiesDomain(model,cookieDomain);}
setCookiesDomain(model,domain){this._model=model;this._cookieDomain=domain;this.refreshItems();Common.EventTarget.removeEventListeners(this._eventDescriptors);const networkManager=model.target().model(SDK.NetworkManager);this._eventDescriptors=[networkManager.addEventListener(SDK.NetworkManager.Events.ResponseReceived,this._onResponseReceived,this),networkManager.addEventListener(SDK.NetworkManager.Events.LoadingFinished,this._onLoadingFinished,this),];this._showPreview(null,null);}
_showPreview(preview,value){if(this._preview&&this._previewValue===value){return;}
if(this._preview){this._preview.detach();}
if(!preview){preview=new UI.EmptyWidget(ls`Select a cookie to preview its value`);}
this._previewValue=value;this._preview=preview;preview.show(this._previewPanel.contentElement);}
_handleCookieSelected(){const cookie=this._cookiesTable.selectedCookie();this.setCanDeleteSelected(!!cookie);if(!cookie){this._showPreview(null,null);return;}
const value=createElementWithClass('div','cookie-value');value.textContent=cookie.value();value.addEventListener('dblclick',handleDblClickOnCookieValue);const preview=new UI.VBox();preview.contentElement.appendChild(value);this._showPreview(preview,cookie);function handleDblClickOnCookieValue(){const range=document.createRange();range.selectNode(value);window.getSelection().removeAllRanges();window.getSelection().addRange(range);}}
_saveCookie(newCookie,oldCookie){if(!this._model){return Promise.resolve(false);}
if(oldCookie&&(newCookie.name()!==oldCookie.name()||newCookie.url()!==oldCookie.url())){this._model.deleteCookie(oldCookie);}
return this._model.saveCookie(newCookie);}
_deleteCookie(cookie,callback){this._model.deleteCookie(cookie,callback);}
_updateWithCookies(allCookies){this._totalSize=allCookies.reduce((size,cookie)=>size+cookie.size(),0);const parsedURL=this._cookieDomain.asParsedURL();const host=parsedURL?parsedURL.host:'';this._cookiesTable.setCookieDomain(host);const shownCookies=this.filter(allCookies,cookie=>`${cookie.name()} ${cookie.value()} ${cookie.domain()}`);this._cookiesTable.setCookies(shownCookies);this.setCanFilter(true);this.setCanDeleteAll(true);this.setCanDeleteSelected(!!this._cookiesTable.selectedCookie());}
deleteAllItems(){this._model.clear(this._cookieDomain,()=>this.refreshItems());}
deleteSelectedItem(){const selectedCookie=this._cookiesTable.selectedCookie();if(selectedCookie){this._model.deleteCookie(selectedCookie,()=>this.refreshItems());}}
refreshItems(){this._model.getCookiesForDomain(this._cookieDomain).then(this._updateWithCookies.bind(this));}
refreshItemsThrottled(){this._refreshThrottler.schedule(()=>Promise.resolve(this.refreshItems()));}
_onResponseReceived(){this.refreshItemsThrottled();}
_onLoadingFinished(){this.refreshItemsThrottled();}};;Resources.Database=class{constructor(model,id,domain,name,version){this._model=model;this._id=id;this._domain=domain;this._name=name;this._version=version;}
get id(){return this._id;}
get name(){return this._name;}
set name(x){this._name=x;}
get version(){return this._version;}
set version(x){this._version=x;}
get domain(){return this._domain;}
set domain(x){this._domain=x;}
async tableNames(){const names=await this._model._agent.getDatabaseTableNames(this._id)||[];return names.sort();}
async executeSql(query,onSuccess,onError){const response=await this._model._agent.invoke_executeSQL({'databaseId':this._id,'query':query});const error=response[Protocol.Error];if(error){onError(error);return;}
const sqlError=response.sqlError;if(!sqlError){onSuccess(response.columnNames,response.values);return;}
let message;if(sqlError.message){message=sqlError.message;}else if(sqlError.code===2){message=Common.UIString('Database no longer has expected version.');}else{message=Common.UIString('An unexpected error %s occurred.',sqlError.code);}
onError(message);}};Resources.DatabaseModel=class extends SDK.SDKModel{constructor(target){super(target);this._databases=[];this._agent=target.databaseAgent();this.target().registerDatabaseDispatcher(new Resources.DatabaseDispatcher(this));}
enable(){if(this._enabled){return;}
this._agent.enable();this._enabled=true;}
disable(){if(!this._enabled){return;}
this._enabled=false;this._databases=[];this._agent.disable();this.dispatchEventToListeners(Resources.DatabaseModel.Events.DatabasesRemoved);}
databases(){const result=[];for(const database of this._databases){result.push(database);}
return result;}
_addDatabase(database){this._databases.push(database);this.dispatchEventToListeners(Resources.DatabaseModel.Events.DatabaseAdded,database);}};SDK.SDKModel.register(Resources.DatabaseModel,SDK.Target.Capability.DOM,false);Resources.DatabaseModel.Events={DatabaseAdded:Symbol('DatabaseAdded'),DatabasesRemoved:Symbol('DatabasesRemoved'),};Resources.DatabaseDispatcher=class{constructor(model){this._model=model;}
addDatabase(payload){this._model._addDatabase(new Resources.Database(this._model,payload.id,payload.domain,payload.name,payload.version));}};;Resources.DOMStorage=class extends Common.Object{constructor(model,securityOrigin,isLocalStorage){super();this._model=model;this._securityOrigin=securityOrigin;this._isLocalStorage=isLocalStorage;}
static storageId(securityOrigin,isLocalStorage){return{securityOrigin:securityOrigin,isLocalStorage:isLocalStorage};}
get id(){return Resources.DOMStorage.storageId(this._securityOrigin,this._isLocalStorage);}
get securityOrigin(){return this._securityOrigin;}
get isLocalStorage(){return this._isLocalStorage;}
getItems(){return this._model._agent.getDOMStorageItems(this.id);}
setItem(key,value){this._model._agent.setDOMStorageItem(this.id,key,value);}
removeItem(key){this._model._agent.removeDOMStorageItem(this.id,key);}
clear(){this._model._agent.clear(this.id);}};Resources.DOMStorage.Events={DOMStorageItemsCleared:Symbol('DOMStorageItemsCleared'),DOMStorageItemRemoved:Symbol('DOMStorageItemRemoved'),DOMStorageItemAdded:Symbol('DOMStorageItemAdded'),DOMStorageItemUpdated:Symbol('DOMStorageItemUpdated')};Resources.DOMStorageModel=class extends SDK.SDKModel{constructor(target){super(target);this._securityOriginManager=target.model(SDK.SecurityOriginManager);this._storages={};this._agent=target.domstorageAgent();}
enable(){if(this._enabled){return;}
this.target().registerDOMStorageDispatcher(new Resources.DOMStorageDispatcher(this));this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.SecurityOriginAdded,this._securityOriginAdded,this);this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.SecurityOriginRemoved,this._securityOriginRemoved,this);for(const securityOrigin of this._securityOriginManager.securityOrigins()){this._addOrigin(securityOrigin);}
this._agent.enable();this._enabled=true;}
clearForOrigin(origin){if(!this._enabled){return;}
for(const isLocal of[true,false]){const key=this._storageKey(origin,isLocal);const storage=this._storages[key];storage.clear();}
this._removeOrigin(origin);this._addOrigin(origin);}
_securityOriginAdded(event){this._addOrigin((event.data));}
_addOrigin(securityOrigin){const parsed=new Common.ParsedURL(securityOrigin);if(!parsed.isValid||parsed.scheme==='data'||parsed.scheme==='about'||parsed.scheme==='javascript'){return;}
for(const isLocal of[true,false]){const key=this._storageKey(securityOrigin,isLocal);console.assert(!this._storages[key]);const storage=new Resources.DOMStorage(this,securityOrigin,isLocal);this._storages[key]=storage;this.dispatchEventToListeners(Resources.DOMStorageModel.Events.DOMStorageAdded,storage);}}
_securityOriginRemoved(event){this._removeOrigin((event.data));}
_removeOrigin(securityOrigin){for(const isLocal of[true,false]){const key=this._storageKey(securityOrigin,isLocal);const storage=this._storages[key];if(!storage){continue;}
delete this._storages[key];this.dispatchEventToListeners(Resources.DOMStorageModel.Events.DOMStorageRemoved,storage);}}
_storageKey(securityOrigin,isLocalStorage){return JSON.stringify(Resources.DOMStorage.storageId(securityOrigin,isLocalStorage));}
_domStorageItemsCleared(storageId){const domStorage=this.storageForId(storageId);if(!domStorage){return;}
const eventData={};domStorage.dispatchEventToListeners(Resources.DOMStorage.Events.DOMStorageItemsCleared,eventData);}
_domStorageItemRemoved(storageId,key){const domStorage=this.storageForId(storageId);if(!domStorage){return;}
const eventData={key:key};domStorage.dispatchEventToListeners(Resources.DOMStorage.Events.DOMStorageItemRemoved,eventData);}
_domStorageItemAdded(storageId,key,value){const domStorage=this.storageForId(storageId);if(!domStorage){return;}
const eventData={key:key,value:value};domStorage.dispatchEventToListeners(Resources.DOMStorage.Events.DOMStorageItemAdded,eventData);}
_domStorageItemUpdated(storageId,key,oldValue,value){const domStorage=this.storageForId(storageId);if(!domStorage){return;}
const eventData={key:key,oldValue:oldValue,value:value};domStorage.dispatchEventToListeners(Resources.DOMStorage.Events.DOMStorageItemUpdated,eventData);}
storageForId(storageId){return this._storages[JSON.stringify(storageId)];}
storages(){const result=[];for(const id in this._storages){result.push(this._storages[id]);}
return result;}};SDK.SDKModel.register(Resources.DOMStorageModel,SDK.Target.Capability.DOM,false);Resources.DOMStorageModel.Events={DOMStorageAdded:Symbol('DOMStorageAdded'),DOMStorageRemoved:Symbol('DOMStorageRemoved')};Resources.DOMStorageDispatcher=class{constructor(model){this._model=model;}
domStorageItemsCleared(storageId){this._model._domStorageItemsCleared(storageId);}
domStorageItemRemoved(storageId,key){this._model._domStorageItemRemoved(storageId,key);}
domStorageItemAdded(storageId,key,value){this._model._domStorageItemAdded(storageId,key,value);}
domStorageItemUpdated(storageId,key,oldValue,value){this._model._domStorageItemUpdated(storageId,key,oldValue,value);}};;Resources.DOMStorageItemsView=class extends Resources.StorageItemsView{constructor(domStorage){super(Common.UIString('DOM Storage'),'domStoragePanel');this._domStorage=domStorage;this.element.classList.add('storage-view','table');const columns=([{id:'key',title:Common.UIString('Key'),sortable:false,editable:true,longText:true,weight:50},{id:'value',title:Common.UIString('Value'),sortable:false,editable:true,longText:true,weight:50}]);this._dataGrid=new DataGrid.DataGrid(columns,this._editingCallback.bind(this),this._deleteCallback.bind(this),this.refreshItems.bind(this));this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,event=>this._previewEntry((event.data)));this._dataGrid.addEventListener(DataGrid.DataGrid.Events.DeselectedNode,event=>this._previewEntry(null));this._dataGrid.setStriped(true);this._dataGrid.setName('DOMStorageItemsView');this._splitWidget=new UI.SplitWidget(false,false);this._splitWidget.show(this.element);this._splitWidget.setSecondIsSidebar(true);this._previewPanel=new UI.VBox();const resizer=this._previewPanel.element.createChild('div','preview-panel-resizer');const dataGridWidget=this._dataGrid.asWidget();dataGridWidget.setMinimumSize(0,50);this._splitWidget.setMainWidget(dataGridWidget);this._splitWidget.setSidebarWidget(this._previewPanel);this._splitWidget.installResizer(resizer);this._preview=null;this._previewValue=null;this._showPreview(null,null);this._eventListeners=[];this.setStorage(domStorage);}
setStorage(domStorage){Common.EventTarget.removeEventListeners(this._eventListeners);this._domStorage=domStorage;this._eventListeners=[this._domStorage.addEventListener(Resources.DOMStorage.Events.DOMStorageItemsCleared,this._domStorageItemsCleared,this),this._domStorage.addEventListener(Resources.DOMStorage.Events.DOMStorageItemRemoved,this._domStorageItemRemoved,this),this._domStorage.addEventListener(Resources.DOMStorage.Events.DOMStorageItemAdded,this._domStorageItemAdded,this),this._domStorage.addEventListener(Resources.DOMStorage.Events.DOMStorageItemUpdated,this._domStorageItemUpdated,this),];this.refreshItems();}
_domStorageItemsCleared(){if(!this.isShowing()||!this._dataGrid){return;}
this._dataGrid.rootNode().removeChildren();this._dataGrid.addCreationNode(false);this.setCanDeleteSelected(false);}
_domStorageItemRemoved(event){if(!this.isShowing()||!this._dataGrid){return;}
const storageData=event.data;const rootNode=this._dataGrid.rootNode();const children=rootNode.children;for(let i=0;i<children.length;++i){const childNode=children[i];if(childNode.data.key===storageData.key){rootNode.removeChild(childNode);this.setCanDeleteSelected(children.length>1);return;}}}
_domStorageItemAdded(event){if(!this.isShowing()||!this._dataGrid){return;}
const storageData=event.data;const rootNode=this._dataGrid.rootNode();const children=rootNode.children;for(let i=0;i<children.length;++i){if(children[i].data.key===storageData.key){return;}}
const childNode=new DataGrid.DataGridNode({key:storageData.key,value:storageData.value},false);rootNode.insertChild(childNode,children.length-1);}
_domStorageItemUpdated(event){if(!this.isShowing()||!this._dataGrid){return;}
const storageData=event.data;const childNode=this._dataGrid.rootNode().children.find(child=>child.data.key===storageData.key);if(!childNode||childNode.data.value===storageData.value){return;}
childNode.data.value=storageData.value;childNode.refresh();if(!childNode.selected){return;}
this._previewEntry(childNode);this.setCanDeleteSelected(true);}
_showDOMStorageItems(items){const rootNode=this._dataGrid.rootNode();let selectedKey=null;for(const node of rootNode.children){if(!node.selected){continue;}
selectedKey=node.data.key;break;}
rootNode.removeChildren();let selectedNode=null;const filteredItems=item=>`${item[0]} ${item[1]}`;for(const item of this.filter(items,filteredItems)){const key=item[0];const value=item[1];const node=new DataGrid.DataGridNode({key:key,value:value},false);node.selectable=true;rootNode.appendChild(node);if(!selectedNode||key===selectedKey){selectedNode=node;}}
if(selectedNode){selectedNode.selected=true;}
this._dataGrid.addCreationNode(false);this.setCanDeleteSelected(!!selectedNode);}
deleteSelectedItem(){if(!this._dataGrid||!this._dataGrid.selectedNode){return;}
this._deleteCallback(this._dataGrid.selectedNode);}
refreshItems(){this._domStorage.getItems().then(items=>items&&this._showDOMStorageItems(items));}
deleteAllItems(){this._domStorage.clear();this._domStorageItemsCleared();}
_editingCallback(editingNode,columnIdentifier,oldText,newText){const domStorage=this._domStorage;if(columnIdentifier==='key'){if(typeof oldText==='string'){domStorage.removeItem(oldText);}
domStorage.setItem(newText,editingNode.data.value||'');this._removeDupes(editingNode);}else{domStorage.setItem(editingNode.data.key||'',newText);}}
_removeDupes(masterNode){const rootNode=this._dataGrid.rootNode();const children=rootNode.children;for(let i=children.length-1;i>=0;--i){const childNode=children[i];if((childNode.data.key===masterNode.data.key)&&(masterNode!==childNode)){rootNode.removeChild(childNode);}}}
_deleteCallback(node){if(!node||node.isCreationNode){return;}
if(this._domStorage){this._domStorage.removeItem(node.data.key);}}
_showPreview(preview,value){if(this._preview&&this._previewValue===value){return;}
if(this._preview){this._preview.detach();}
if(!preview){preview=new UI.EmptyWidget(Common.UIString('Select a value to preview'));}
this._previewValue=value;this._preview=preview;preview.show(this._previewPanel.contentElement);}
async _previewEntry(entry){const value=entry&&entry.data&&entry.data.value;if(!value){this._showPreview(null,value);return;}
const protocol=this._domStorage.isLocalStorage?'localstorage':'sessionstorage';const url=`${protocol}://${entry.key}`;const provider=Common.StaticContentProvider.fromString(url,Common.resourceTypes.XHR,(value));const preview=await SourceFrame.PreviewFactory.createPreview(provider,'text/plain');if(!entry.selected){return;}
this._showPreview(preview,value);}};;Resources.DatabaseQueryView=class extends UI.VBox{constructor(database){super();this.database=database;this.element.classList.add('storage-view','query','monospace');this.element.addEventListener('selectstart',this._selectStart.bind(this),false);this._promptContainer=this.element.createChild('div','database-query-prompt-container');this._promptContainer.appendChild(UI.Icon.create('smallicon-text-prompt','prompt-icon'));this._promptElement=this._promptContainer.createChild('div');this._promptElement.className='database-query-prompt';this._promptElement.addEventListener('keydown',this._promptKeyDown.bind(this));this._prompt=new UI.TextPrompt();this._prompt.initialize(this.completions.bind(this),' ');this._proxyElement=this._prompt.attach(this._promptElement);this.element.addEventListener('click',this._messagesClicked.bind(this),true);this.element.tabIndex=0;this.element.addEventListener('focus',this._prompt.focus.bind(this._prompt));}
_messagesClicked(){if(!this._prompt.isCaretInsidePrompt()&&!this.element.hasSelection()){this._prompt.moveCaretToEndOfPrompt();}}
async completions(expression,prefix,force){if(!prefix){return[];}
prefix=prefix.toLowerCase();const tableNames=await this.database.tableNames();return tableNames.map(name=>name+' ').concat(Resources.DatabaseQueryView._SQL_BUILT_INS).filter(proposal=>proposal.toLowerCase().startsWith(prefix)).map(completion=>({text:completion}));}
_selectStart(event){if(this._selectionTimeout){clearTimeout(this._selectionTimeout);}
this._prompt.clearAutocomplete();function moveBackIfOutside(){delete this._selectionTimeout;if(!this._prompt.isCaretInsidePrompt()&&!this.element.hasSelection()){this._prompt.moveCaretToEndOfPrompt();}
this._prompt.autoCompleteSoon();}
this._selectionTimeout=setTimeout(moveBackIfOutside.bind(this),100);}
_promptKeyDown(event){if(isEnterKey(event)){this._enterKeyPressed(event);return;}}
async _enterKeyPressed(event){event.consume(true);const query=this._prompt.textWithCurrentSuggestion();this._prompt.clearAutocomplete();if(!query.length){return;}
this._prompt.setEnabled(false);try{const result=await new Promise((resolve,reject)=>{this.database.executeSql(query,(columnNames,values)=>resolve({columnNames,values}),errorText=>reject(errorText));});this._queryFinished(query,result.columnNames,result.values);}catch(e){this._appendErrorQueryResult(query,e);}
this._prompt.setEnabled(true);this._prompt.setText('');this._prompt.focus();}
_queryFinished(query,columnNames,values){const dataGrid=DataGrid.SortableDataGrid.create(columnNames,values);const trimmedQuery=query.trim();let view=null;if(dataGrid){dataGrid.setStriped(true);dataGrid.renderInline();dataGrid.autoSizeColumns(5);view=dataGrid.asWidget();}
this._appendViewQueryResult(trimmedQuery,view);if(trimmedQuery.match(/^create /i)||trimmedQuery.match(/^drop table /i)){this.dispatchEventToListeners(Resources.DatabaseQueryView.Events.SchemaUpdated,this.database);}}
_appendViewQueryResult(query,view){const resultElement=this._appendQueryResult(query);if(view){view.show(resultElement);}else{resultElement.remove();}
this._promptElement.scrollIntoView(false);}
_appendErrorQueryResult(query,errorText){const resultElement=this._appendQueryResult(query);resultElement.classList.add('error');resultElement.appendChild(UI.Icon.create('smallicon-error','prompt-icon'));resultElement.createTextChild(errorText);this._promptElement.scrollIntoView(false);}
_appendQueryResult(query){const element=createElement('div');element.className='database-user-query';element.appendChild(UI.Icon.create('smallicon-user-command','prompt-icon'));this.element.insertBefore(element,this._promptContainer);const commandTextElement=createElement('span');commandTextElement.className='database-query-text';commandTextElement.textContent=query;element.appendChild(commandTextElement);const resultElement=createElement('div');resultElement.className='database-query-result';element.appendChild(resultElement);return resultElement;}};Resources.DatabaseQueryView.Events={SchemaUpdated:Symbol('SchemaUpdated')};Resources.DatabaseQueryView._SQL_BUILT_INS=['SELECT ','FROM ','WHERE ','LIMIT ','DELETE FROM ','CREATE ','DROP ','TABLE ','INDEX ','UPDATE ','INSERT INTO ','VALUES ('];;Resources.DatabaseTableView=class extends UI.SimpleView{constructor(database,tableName){super(Common.UIString('Database'));this.database=database;this.tableName=tableName;this.element.classList.add('storage-view','table');this._visibleColumnsSetting=Common.settings.createSetting('databaseTableViewVisibleColumns',{});this.refreshButton=new UI.ToolbarButton(Common.UIString('Refresh'),'largeicon-refresh');this.refreshButton.addEventListener(UI.ToolbarButton.Events.Click,this._refreshButtonClicked,this);this._visibleColumnsInput=new UI.ToolbarInput(Common.UIString('Visible columns'),'',1);this._visibleColumnsInput.addEventListener(UI.ToolbarInput.Event.TextChanged,this._onVisibleColumnsChanged,this);}
wasShown(){this.update();}
syncToolbarItems(){return[this.refreshButton,this._visibleColumnsInput];}
_escapeTableName(tableName){return tableName.replace(/\"/g,'""');}
update(){this.database.executeSql('SELECT rowid, * FROM "'+this._escapeTableName(this.tableName)+'"',this._queryFinished.bind(this),this._queryError.bind(this));}
_queryFinished(columnNames,values){this.detachChildWidgets();this.element.removeChildren();this._dataGrid=DataGrid.SortableDataGrid.create(columnNames,values);this._visibleColumnsInput.setVisible(!!this._dataGrid);if(!this._dataGrid){this._emptyWidget=new UI.EmptyWidget(ls`The "${this.tableName}"\ntable is empty.`);this._emptyWidget.show(this.element);return;}
this._dataGrid.setStriped(true);this._dataGrid.asWidget().show(this.element);this._dataGrid.autoSizeColumns(5);this._columnsMap=new Map();for(let i=1;i<columnNames.length;++i){this._columnsMap.set(columnNames[i],String(i));}
this._lastVisibleColumns='';const visibleColumnsText=this._visibleColumnsSetting.get()[this.tableName]||'';this._visibleColumnsInput.setValue(visibleColumnsText);this._onVisibleColumnsChanged();}
_onVisibleColumnsChanged(){if(!this._dataGrid){return;}
const text=this._visibleColumnsInput.value();const parts=text.split(/[\s,]+/);const matches=new Set();const columnsVisibility={};columnsVisibility['0']=true;for(let i=0;i<parts.length;++i){const part=parts[i];if(this._columnsMap.has(part)){matches.add(part);columnsVisibility[this._columnsMap.get(part)]=true;}}
const newVisibleColumns=matches.valuesArray().sort().join(', ');if(newVisibleColumns.length===0){for(const v of this._columnsMap.values()){columnsVisibility[v]=true;}}
if(newVisibleColumns===this._lastVisibleColumns){return;}
const visibleColumnsRegistry=this._visibleColumnsSetting.get();visibleColumnsRegistry[this.tableName]=text;this._visibleColumnsSetting.set(visibleColumnsRegistry);this._dataGrid.setColumnsVisiblity(columnsVisibility);this._lastVisibleColumns=newVisibleColumns;}
_queryError(error){this.detachChildWidgets();this.element.removeChildren();const errorMsgElement=createElement('div');errorMsgElement.className='storage-table-error';errorMsgElement.textContent=ls`An error occurred trying to\nread the "${this.tableName}" table.`;this.element.appendChild(errorMsgElement);}
_refreshButtonClicked(event){this.update();}};;Resources.IndexedDBModel=class extends SDK.SDKModel{constructor(target){super(target);target.registerStorageDispatcher(this);this._securityOriginManager=target.model(SDK.SecurityOriginManager);this._indexedDBAgent=target.indexedDBAgent();this._storageAgent=target.storageAgent();this._databases=new Map();this._databaseNamesBySecurityOrigin={};this._originsUpdated=new Set();this._throttler=new Common.Throttler(1000);}
static keyFromIDBKey(idbKey){if(typeof(idbKey)==='undefined'||idbKey===null){return undefined;}
let type;const key={};switch(typeof(idbKey)){case'number':key.number=idbKey;type=Resources.IndexedDBModel.KeyTypes.NumberType;break;case'string':key.string=idbKey;type=Resources.IndexedDBModel.KeyTypes.StringType;break;case'object':if(idbKey instanceof Date){key.date=idbKey.getTime();type=Resources.IndexedDBModel.KeyTypes.DateType;}else if(Array.isArray(idbKey)){key.array=[];for(let i=0;i<idbKey.length;++i){key.array.push(Resources.IndexedDBModel.keyFromIDBKey(idbKey[i]));}
type=Resources.IndexedDBModel.KeyTypes.ArrayType;}
break;default:return undefined;}
key.type=(type);return key;}
static _keyRangeFromIDBKeyRange(idbKeyRange){const keyRange={};keyRange.lower=Resources.IndexedDBModel.keyFromIDBKey(idbKeyRange.lower);keyRange.upper=Resources.IndexedDBModel.keyFromIDBKey(idbKeyRange.upper);keyRange.lowerOpen=!!idbKeyRange.lowerOpen;keyRange.upperOpen=!!idbKeyRange.upperOpen;return keyRange;}
static idbKeyPathFromKeyPath(keyPath){let idbKeyPath;switch(keyPath.type){case Resources.IndexedDBModel.KeyPathTypes.NullType:idbKeyPath=null;break;case Resources.IndexedDBModel.KeyPathTypes.StringType:idbKeyPath=keyPath.string;break;case Resources.IndexedDBModel.KeyPathTypes.ArrayType:idbKeyPath=keyPath.array;break;}
return idbKeyPath;}
static keyPathStringFromIDBKeyPath(idbKeyPath){if(typeof idbKeyPath==='string'){return'"'+idbKeyPath+'"';}
if(idbKeyPath instanceof Array){return'["'+idbKeyPath.join('", "')+'"]';}
return null;}
enable(){if(this._enabled){return;}
this._indexedDBAgent.enable();this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.SecurityOriginAdded,this._securityOriginAdded,this);this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.SecurityOriginRemoved,this._securityOriginRemoved,this);for(const securityOrigin of this._securityOriginManager.securityOrigins()){this._addOrigin(securityOrigin);}
this._enabled=true;}
clearForOrigin(origin){if(!this._enabled||!this._databaseNamesBySecurityOrigin[origin]){return;}
this._removeOrigin(origin);this._addOrigin(origin);}
async deleteDatabase(databaseId){if(!this._enabled){return;}
await this._indexedDBAgent.deleteDatabase(databaseId.securityOrigin,databaseId.name);this._loadDatabaseNames(databaseId.securityOrigin);}
async refreshDatabaseNames(){for(const securityOrigin in this._databaseNamesBySecurityOrigin){await this._loadDatabaseNames(securityOrigin);}
this.dispatchEventToListeners(Resources.IndexedDBModel.Events.DatabaseNamesRefreshed);}
refreshDatabase(databaseId){this._loadDatabase(databaseId,true);}
clearObjectStore(databaseId,objectStoreName){return this._indexedDBAgent.clearObjectStore(databaseId.securityOrigin,databaseId.name,objectStoreName);}
deleteEntries(databaseId,objectStoreName,idbKeyRange){const keyRange=Resources.IndexedDBModel._keyRangeFromIDBKeyRange(idbKeyRange);return this._indexedDBAgent.deleteObjectStoreEntries(databaseId.securityOrigin,databaseId.name,objectStoreName,keyRange);}
_securityOriginAdded(event){const securityOrigin=(event.data);this._addOrigin(securityOrigin);}
_securityOriginRemoved(event){const securityOrigin=(event.data);this._removeOrigin(securityOrigin);}
_addOrigin(securityOrigin){console.assert(!this._databaseNamesBySecurityOrigin[securityOrigin]);this._databaseNamesBySecurityOrigin[securityOrigin]=[];this._loadDatabaseNames(securityOrigin);if(this._isValidSecurityOrigin(securityOrigin)){this._storageAgent.trackIndexedDBForOrigin(securityOrigin);}}
_removeOrigin(securityOrigin){console.assert(this._databaseNamesBySecurityOrigin[securityOrigin]);for(let i=0;i<this._databaseNamesBySecurityOrigin[securityOrigin].length;++i){this._databaseRemoved(securityOrigin,this._databaseNamesBySecurityOrigin[securityOrigin][i]);}
delete this._databaseNamesBySecurityOrigin[securityOrigin];if(this._isValidSecurityOrigin(securityOrigin)){this._storageAgent.untrackIndexedDBForOrigin(securityOrigin);}}
_isValidSecurityOrigin(securityOrigin){const parsedURL=securityOrigin.asParsedURL();return!!parsedURL&&parsedURL.scheme.startsWith('http');}
_updateOriginDatabaseNames(securityOrigin,databaseNames){const newDatabaseNames=new Set(databaseNames);const oldDatabaseNames=new Set(this._databaseNamesBySecurityOrigin[securityOrigin]);this._databaseNamesBySecurityOrigin[securityOrigin]=databaseNames;for(const databaseName of oldDatabaseNames){if(!newDatabaseNames.has(databaseName)){this._databaseRemoved(securityOrigin,databaseName);}}
for(const databaseName of newDatabaseNames){if(!oldDatabaseNames.has(databaseName)){this._databaseAdded(securityOrigin,databaseName);}}}
databases(){const result=[];for(const securityOrigin in this._databaseNamesBySecurityOrigin){const databaseNames=this._databaseNamesBySecurityOrigin[securityOrigin];for(let i=0;i<databaseNames.length;++i){result.push(new Resources.IndexedDBModel.DatabaseId(securityOrigin,databaseNames[i]));}}
return result;}
_databaseAdded(securityOrigin,databaseName){const databaseId=new Resources.IndexedDBModel.DatabaseId(securityOrigin,databaseName);this.dispatchEventToListeners(Resources.IndexedDBModel.Events.DatabaseAdded,{model:this,databaseId:databaseId});}
_databaseRemoved(securityOrigin,databaseName){const databaseId=new Resources.IndexedDBModel.DatabaseId(securityOrigin,databaseName);this.dispatchEventToListeners(Resources.IndexedDBModel.Events.DatabaseRemoved,{model:this,databaseId:databaseId});}
async _loadDatabaseNames(securityOrigin){const databaseNames=await this._indexedDBAgent.requestDatabaseNames(securityOrigin);if(!databaseNames){return[];}
if(!this._databaseNamesBySecurityOrigin[securityOrigin]){return[];}
this._updateOriginDatabaseNames(securityOrigin,databaseNames);return databaseNames;}
async _loadDatabase(databaseId,entriesUpdated){const databaseWithObjectStores=await this._indexedDBAgent.requestDatabase(databaseId.securityOrigin,databaseId.name);if(!databaseWithObjectStores){return;}
if(!this._databaseNamesBySecurityOrigin[databaseId.securityOrigin]){return;}
const databaseModel=new Resources.IndexedDBModel.Database(databaseId,databaseWithObjectStores.version);this._databases.set(databaseId,databaseModel);for(const objectStore of databaseWithObjectStores.objectStores){const objectStoreIDBKeyPath=Resources.IndexedDBModel.idbKeyPathFromKeyPath(objectStore.keyPath);const objectStoreModel=new Resources.IndexedDBModel.ObjectStore(objectStore.name,objectStoreIDBKeyPath,objectStore.autoIncrement);for(let j=0;j<objectStore.indexes.length;++j){const index=objectStore.indexes[j];const indexIDBKeyPath=Resources.IndexedDBModel.idbKeyPathFromKeyPath(index.keyPath);const indexModel=new Resources.IndexedDBModel.Index(index.name,indexIDBKeyPath,index.unique,index.multiEntry);objectStoreModel.indexes[indexModel.name]=indexModel;}
databaseModel.objectStores[objectStoreModel.name]=objectStoreModel;}
this.dispatchEventToListeners(Resources.IndexedDBModel.Events.DatabaseLoaded,{model:this,database:databaseModel,entriesUpdated:entriesUpdated});}
loadObjectStoreData(databaseId,objectStoreName,idbKeyRange,skipCount,pageSize,callback){this._requestData(databaseId,databaseId.name,objectStoreName,'',idbKeyRange,skipCount,pageSize,callback);}
loadIndexData(databaseId,objectStoreName,indexName,idbKeyRange,skipCount,pageSize,callback){this._requestData(databaseId,databaseId.name,objectStoreName,indexName,idbKeyRange,skipCount,pageSize,callback);}
async _requestData(databaseId,databaseName,objectStoreName,indexName,idbKeyRange,skipCount,pageSize,callback){const keyRange=idbKeyRange?Resources.IndexedDBModel._keyRangeFromIDBKeyRange(idbKeyRange):undefined;const response=await this._indexedDBAgent.invoke_requestData({securityOrigin:databaseId.securityOrigin,databaseName,objectStoreName,indexName,skipCount,pageSize,keyRange});if(response[Protocol.Error]){console.error('IndexedDBAgent error: '+response[Protocol.Error]);return;}
const runtimeModel=this.target().model(SDK.RuntimeModel);if(!runtimeModel||!this._databaseNamesBySecurityOrigin[databaseId.securityOrigin]){return;}
const dataEntries=response.objectStoreDataEntries;const entries=[];for(const dataEntry of dataEntries){const key=runtimeModel.createRemoteObject(dataEntry.key);const primaryKey=runtimeModel.createRemoteObject(dataEntry.primaryKey);const value=runtimeModel.createRemoteObject(dataEntry.value);entries.push(new Resources.IndexedDBModel.Entry(key,primaryKey,value));}
callback(entries,response.hasMore);}
async getMetadata(databaseId,objectStore){const databaseOrigin=databaseId.securityOrigin;const databaseName=databaseId.name;const objectStoreName=objectStore.name;const response=await this._indexedDBAgent.invoke_getMetadata({securityOrigin:databaseOrigin,databaseName,objectStoreName});if(response[Protocol.Error]){console.error('IndexedDBAgent error: '+response[Protocol.Error]);return null;}
return{entriesCount:response.entriesCount,keyGeneratorValue:response.keyGeneratorValue};}
async _refreshDatabaseList(securityOrigin){const databaseNames=await this._loadDatabaseNames(securityOrigin);for(const databaseName of databaseNames){this._loadDatabase(new Resources.IndexedDBModel.DatabaseId(securityOrigin,databaseName),false);}}
indexedDBListUpdated(securityOrigin){this._originsUpdated.add(securityOrigin);this._throttler.schedule(()=>{const promises=Array.from(this._originsUpdated,securityOrigin=>{this._refreshDatabaseList(securityOrigin);});this._originsUpdated.clear();return Promise.all(promises);});}
indexedDBContentUpdated(securityOrigin,databaseName,objectStoreName){const databaseId=new Resources.IndexedDBModel.DatabaseId(securityOrigin,databaseName);this.dispatchEventToListeners(Resources.IndexedDBModel.Events.IndexedDBContentUpdated,{databaseId:databaseId,objectStoreName:objectStoreName,model:this});}
cacheStorageListUpdated(securityOrigin){}
cacheStorageContentUpdated(securityOrigin){}};SDK.SDKModel.register(Resources.IndexedDBModel,SDK.Target.Capability.Storage,false);Resources.IndexedDBModel.KeyTypes={NumberType:'number',StringType:'string',DateType:'date',ArrayType:'array'};Resources.IndexedDBModel.KeyPathTypes={NullType:'null',StringType:'string',ArrayType:'array'};Resources.IndexedDBModel.Events={DatabaseAdded:Symbol('DatabaseAdded'),DatabaseRemoved:Symbol('DatabaseRemoved'),DatabaseLoaded:Symbol('DatabaseLoaded'),DatabaseNamesRefreshed:Symbol('DatabaseNamesRefreshed'),IndexedDBContentUpdated:Symbol('IndexedDBContentUpdated')};Resources.IndexedDBModel.Entry=class{constructor(key,primaryKey,value){this.key=key;this.primaryKey=primaryKey;this.value=value;}};Resources.IndexedDBModel.DatabaseId=class{constructor(securityOrigin,name){this.securityOrigin=securityOrigin;this.name=name;}
equals(databaseId){return this.name===databaseId.name&&this.securityOrigin===databaseId.securityOrigin;}};Resources.IndexedDBModel.Database=class{constructor(databaseId,version){this.databaseId=databaseId;this.version=version;this.objectStores={};}};Resources.IndexedDBModel.ObjectStore=class{constructor(name,keyPath,autoIncrement){this.name=name;this.keyPath=keyPath;this.autoIncrement=autoIncrement;this.indexes={};}
get keyPathString(){return(Resources.IndexedDBModel.keyPathStringFromIDBKeyPath((this.keyPath)));}};Resources.IndexedDBModel.ObjectStoreMetadata;Resources.IndexedDBModel.Index=class{constructor(name,keyPath,unique,multiEntry){this.name=name;this.keyPath=keyPath;this.unique=unique;this.multiEntry=multiEntry;}
get keyPathString(){return(Resources.IndexedDBModel.keyPathStringFromIDBKeyPath((this.keyPath)));}};;Resources.IDBDatabaseView=class extends UI.VBox{constructor(model,database){super();this._model=model;const databaseName=database?database.databaseId.name:ls`Loading\u2026`;this._reportView=new UI.ReportView(databaseName);this._reportView.show(this.contentElement);const bodySection=this._reportView.appendSection('');this._securityOriginElement=bodySection.appendField(ls`Security origin`);this._versionElement=bodySection.appendField(ls`Version`);this._objectStoreCountElement=bodySection.appendField(ls`Object stores`);const footer=this._reportView.appendSection('').appendRow();this._clearButton=UI.createTextButton(ls`Delete database`,()=>this._deleteDatabase(),ls`Delete database`);footer.appendChild(this._clearButton);this._refreshButton=UI.createTextButton(ls`Refresh database`,()=>this._refreshDatabaseButtonClicked(),ls`Refresh database`);footer.appendChild(this._refreshButton);if(database){this.update(database);}}
_refreshDatabase(){this._securityOriginElement.textContent=this._database.databaseId.securityOrigin;this._versionElement.textContent=this._database.version;this._objectStoreCountElement.textContent=Object.keys(this._database.objectStores).length;}
_refreshDatabaseButtonClicked(){this._model.refreshDatabase(this._database.databaseId);}
update(database){this._database=database;this._reportView.setTitle(this._database.databaseId.name);this._refreshDatabase();this._updatedForTests();}
_updatedForTests(){}
async _deleteDatabase(){const ok=await UI.ConfirmDialog.show(Common.UIString('Please confirm delete of "%s" database.',this._database.databaseId.name),this.element);if(ok){this._model.deleteDatabase(this._database.databaseId);}}};Resources.IDBDataView=class extends UI.SimpleView{constructor(model,databaseId,objectStore,index,refreshObjectStoreCallback){super(Common.UIString('IDB'));this.registerRequiredCSS('resources/indexedDBViews.css');this._model=model;this._databaseId=databaseId;this._isIndex=!!index;this._refreshObjectStoreCallback=refreshObjectStoreCallback;this.element.classList.add('indexed-db-data-view','storage-view');this._refreshButton=new UI.ToolbarButton(Common.UIString('Refresh'),'largeicon-refresh');this._refreshButton.addEventListener(UI.ToolbarButton.Events.Click,this._refreshButtonClicked,this);this._deleteSelectedButton=new UI.ToolbarButton(Common.UIString('Delete selected'),'largeicon-delete');this._deleteSelectedButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._deleteButtonClicked(null));this._clearButton=new UI.ToolbarButton(Common.UIString('Clear object store'),'largeicon-clear');this._clearButton.addEventListener(UI.ToolbarButton.Events.Click,this._clearButtonClicked,this);this._needsRefresh=new UI.ToolbarItem(UI.createIconLabel(Common.UIString('Data may be stale'),'smallicon-warning'));this._needsRefresh.setVisible(false);this._needsRefresh.setTitle(Common.UIString('Some entries may have been modified'));this._createEditorToolbar();this._pageSize=50;this._skipCount=0;this.update(objectStore,index);this._entries=[];}
_createDataGrid(){const keyPath=this._isIndex?this._index.keyPath:this._objectStore.keyPath;const columns=([]);columns.push({id:'number',title:Common.UIString('#'),sortable:false,width:'50px'});columns.push({id:'key',titleDOMFragment:this._keyColumnHeaderFragment(Common.UIString('Key'),keyPath),sortable:false});if(this._isIndex){columns.push({id:'primaryKey',titleDOMFragment:this._keyColumnHeaderFragment(Common.UIString('Primary key'),this._objectStore.keyPath),sortable:false});}
columns.push({id:'value',title:Common.UIString('Value'),sortable:false});const dataGrid=new DataGrid.DataGrid(columns,undefined,this._deleteButtonClicked.bind(this),this._updateData.bind(this,true));dataGrid.setStriped(true);dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,event=>this._updateToolbarEnablement(),this);return dataGrid;}
_keyColumnHeaderFragment(prefix,keyPath){const keyColumnHeaderFragment=createDocumentFragment();keyColumnHeaderFragment.createTextChild(prefix);if(keyPath===null){return keyColumnHeaderFragment;}
keyColumnHeaderFragment.createTextChild(' ('+Common.UIString('Key path: '));if(Array.isArray(keyPath)){keyColumnHeaderFragment.createTextChild('[');for(let i=0;i<keyPath.length;++i){if(i!==0){keyColumnHeaderFragment.createTextChild(', ');}
keyColumnHeaderFragment.appendChild(this._keyPathStringFragment(keyPath[i]));}
keyColumnHeaderFragment.createTextChild(']');}else{const keyPathString=(keyPath);keyColumnHeaderFragment.appendChild(this._keyPathStringFragment(keyPathString));}
keyColumnHeaderFragment.createTextChild(')');return keyColumnHeaderFragment;}
_keyPathStringFragment(keyPathString){const keyPathStringFragment=createDocumentFragment();keyPathStringFragment.createTextChild('"');const keyPathSpan=keyPathStringFragment.createChild('span','source-code indexed-db-key-path');keyPathSpan.textContent=keyPathString;keyPathStringFragment.createTextChild('"');return keyPathStringFragment;}
_createEditorToolbar(){const editorToolbar=new UI.Toolbar('data-view-toolbar',this.element);editorToolbar.appendToolbarItem(this._refreshButton);editorToolbar.appendToolbarItem(new UI.ToolbarSeparator());this._pageBackButton=new UI.ToolbarButton(Common.UIString('Show previous page'),'largeicon-play-back');this._pageBackButton.addEventListener(UI.ToolbarButton.Events.Click,this._pageBackButtonClicked,this);editorToolbar.appendToolbarItem(this._pageBackButton);this._pageForwardButton=new UI.ToolbarButton(Common.UIString('Show next page'),'largeicon-play');this._pageForwardButton.setEnabled(false);this._pageForwardButton.addEventListener(UI.ToolbarButton.Events.Click,this._pageForwardButtonClicked,this);editorToolbar.appendToolbarItem(this._pageForwardButton);this._keyInput=new UI.ToolbarInput(ls`Start from key`,'',0.5);this._keyInput.addEventListener(UI.ToolbarInput.Event.TextChanged,this._updateData.bind(this,false));editorToolbar.appendToolbarItem(this._keyInput);editorToolbar.appendToolbarItem(new UI.ToolbarSeparator());editorToolbar.appendToolbarItem(this._clearButton);editorToolbar.appendToolbarItem(this._deleteSelectedButton);editorToolbar.appendToolbarItem(this._needsRefresh);}
_pageBackButtonClicked(event){this._skipCount=Math.max(0,this._skipCount-this._pageSize);this._updateData(false);}
_pageForwardButtonClicked(event){this._skipCount=this._skipCount+this._pageSize;this._updateData(false);}
_populateContextMenu(contextMenu,gridNode){const node=(gridNode);if(node.valueObjectPresentation){contextMenu.revealSection().appendItem(ls`Expand Recursively`,()=>{node.valueObjectPresentation.objectTreeElement().expandRecursively();});contextMenu.revealSection().appendItem(ls`Collapse`,()=>{node.valueObjectPresentation.objectTreeElement().collapse();});}}
refreshData(){this._updateData(true);}
update(objectStore,index){this._objectStore=objectStore;this._index=index;if(this._dataGrid){this._dataGrid.asWidget().detach();}
this._dataGrid=this._createDataGrid();this._dataGrid.setRowContextMenuCallback(this._populateContextMenu.bind(this));this._dataGrid.asWidget().show(this.element);this._skipCount=0;this._updateData(true);}
_parseKey(keyString){let result;try{result=JSON.parse(keyString);}catch(e){result=keyString;}
return result;}
_updateData(force){const key=this._parseKey(this._keyInput.value());const pageSize=this._pageSize;let skipCount=this._skipCount;let selected=this._dataGrid.selectedNode?this._dataGrid.selectedNode.data['number']:0;selected=Math.max(selected,this._skipCount);this._refreshButton.setEnabled(false);this._clearButton.setEnabled(!this._isIndex);if(!force&&this._lastKey===key&&this._lastPageSize===pageSize&&this._lastSkipCount===skipCount){return;}
if(this._lastKey!==key||this._lastPageSize!==pageSize){skipCount=0;this._skipCount=0;}
this._lastKey=key;this._lastPageSize=pageSize;this._lastSkipCount=skipCount;function callback(entries,hasMore){this._refreshButton.setEnabled(true);this.clear();this._entries=entries;let selectedNode=null;for(let i=0;i<entries.length;++i){const data={};data['number']=i+skipCount;data['key']=entries[i].key;data['primaryKey']=entries[i].primaryKey;data['value']=entries[i].value;const node=new Resources.IDBDataGridNode(data);this._dataGrid.rootNode().appendChild(node);if(data['number']<=selected){selectedNode=node;}}
if(selectedNode){selectedNode.select();}
this._pageBackButton.setEnabled(!!skipCount);this._pageForwardButton.setEnabled(hasMore);this._needsRefresh.setVisible(false);this._updateToolbarEnablement();this._updatedDataForTests();}
const idbKeyRange=key?window.IDBKeyRange.lowerBound(key):null;if(this._isIndex){this._model.loadIndexData(this._databaseId,this._objectStore.name,this._index.name,idbKeyRange,skipCount,pageSize,callback.bind(this));}else{this._model.loadObjectStoreData(this._databaseId,this._objectStore.name,idbKeyRange,skipCount,pageSize,callback.bind(this));}
this._model.getMetadata(this._databaseId,this._objectStore).then(this._updateSummaryBar.bind(this));}
_updateSummaryBar(metadata){if(!this._summaryBarElement){this._summaryBarElement=this.element.createChild('div','object-store-summary-bar');}
this._summaryBarElement.removeChildren();if(!metadata){return;}
const separator='\u2002\u2758\u2002';const span=this._summaryBarElement.createChild('span');span.textContent=ls`Total entries: ${String(metadata.entriesCount)}`;if(this._objectStore.autoIncrement){span.textContent+=separator;span.textContent+=ls`Key generator value: ${String(metadata.keyGeneratorValue)}`;}}
_updatedDataForTests(){}
_refreshButtonClicked(event){this._updateData(true);}
async _clearButtonClicked(event){this._clearButton.setEnabled(false);await this._model.clearObjectStore(this._databaseId,this._objectStore.name);this._clearButton.setEnabled(true);this._updateData(true);}
markNeedsRefresh(){this._needsRefresh.setVisible(true);}
async _deleteButtonClicked(node){if(!node){node=this._dataGrid.selectedNode;if(!node){return;}}
const key=(this._isIndex?node.data.primaryKey:node.data.key);const keyValue=(key.value);await this._model.deleteEntries(this._databaseId,this._objectStore.name,window.IDBKeyRange.only(keyValue));this._refreshObjectStoreCallback();}
clear(){this._dataGrid.rootNode().removeChildren();this._entries=[];}
_updateToolbarEnablement(){const empty=!this._dataGrid||this._dataGrid.rootNode().children.length===0;this._clearButton.setEnabled(!empty);this._deleteSelectedButton.setEnabled(!empty&&this._dataGrid.selectedNode!==null);}};Resources.IDBDataGridNode=class extends DataGrid.DataGridNode{constructor(data){super(data,false);this.selectable=true;this.valueObjectPresentation=null;}
createCell(columnIdentifier){const cell=super.createCell(columnIdentifier);const value=(this.data[columnIdentifier]);switch(columnIdentifier){case'value':cell.removeChildren();const objectPropSection=ObjectUI.ObjectPropertiesSection.defaultObjectPropertiesSection(value,undefined,true,true);cell.appendChild(objectPropSection.element);this.valueObjectPresentation=objectPropSection;break;case'key':case'primaryKey':cell.removeChildren();const objectElement=ObjectUI.ObjectPropertiesSection.defaultObjectPresentation(value,undefined,true,true);cell.appendChild(objectElement);break;default:}
return cell;}};;Resources.ResourcesPanel=class extends UI.PanelWithSidebar{constructor(){super('resources');this.registerRequiredCSS('resources/resourcesPanel.css');this._resourcesLastSelectedItemSetting=Common.settings.createSetting('resourcesLastSelectedElementPath',[]);this.visibleView=null;this._pendingViewPromise=null;this._categoryView=null;const mainContainer=new UI.VBox();this.storageViews=mainContainer.element.createChild('div','vbox flex-auto');this._storageViewToolbar=new UI.Toolbar('resources-toolbar',mainContainer.element);this.splitWidget().setMainWidget(mainContainer);this._domStorageView=null;this._cookieView=null;this._emptyWidget=null;this._sidebar=new Resources.ApplicationPanelSidebar(this);this._sidebar.show(this.panelSidebarElement());}
static _instance(){return(self.runtime.sharedInstance(Resources.ResourcesPanel));}
static _shouldCloseOnReset(view){const viewClassesToClose=[SourceFrame.ResourceSourceFrame,SourceFrame.ImageView,SourceFrame.FontView,Resources.StorageItemsView,Resources.DatabaseQueryView,Resources.DatabaseTableView];return viewClassesToClose.some(type=>view instanceof type);}
focus(){this._sidebar.focus();}
lastSelectedItemPath(){return this._resourcesLastSelectedItemSetting.get();}
setLastSelectedItemPath(path){this._resourcesLastSelectedItemSetting.set(path);}
resetView(){if(this.visibleView&&Resources.ResourcesPanel._shouldCloseOnReset(this.visibleView)){this.showView(null);}}
showView(view){this._pendingViewPromise=null;if(this.visibleView===view){return;}
if(this.visibleView){this.visibleView.detach();}
if(view){view.show(this.storageViews);}
this.visibleView=view;this._storageViewToolbar.removeToolbarItems();const toolbarItems=(view instanceof UI.SimpleView&&view.syncToolbarItems())||[];for(let i=0;i<toolbarItems.length;++i){this._storageViewToolbar.appendToolbarItem(toolbarItems[i]);}
this._storageViewToolbar.element.classList.toggle('hidden',!toolbarItems.length);}
async scheduleShowView(viewPromise){this._pendingViewPromise=viewPromise;const view=await viewPromise;if(this._pendingViewPromise!==viewPromise){return null;}
this.showView(view);return view;}
showCategoryView(categoryName,categoryLink){if(!this._categoryView){this._categoryView=new Resources.StorageCategoryView();}
this._categoryView.setText(categoryName);this._categoryView.setLink(categoryLink);this.showView(this._categoryView);}
showDOMStorage(domStorage){if(!domStorage){return;}
if(!this._domStorageView){this._domStorageView=new Resources.DOMStorageItemsView(domStorage);}else{this._domStorageView.setStorage(domStorage);}
this.showView(this._domStorageView);}
showCookies(cookieFrameTarget,cookieDomain){const model=cookieFrameTarget.model(SDK.CookieModel);if(!model){return;}
if(!this._cookieView){this._cookieView=new Resources.CookieItemsView(model,cookieDomain);}else{this._cookieView.setCookiesDomain(model,cookieDomain);}
this.showView(this._cookieView);}
clearCookies(target,cookieDomain){const model=target.model(SDK.CookieModel);if(!model){return;}
model.clear(cookieDomain,()=>{if(this._cookieView){this._cookieView.refreshItems();}});}};Resources.ResourcesPanel.ResourceRevealer=class{async reveal(resource){if(!(resource instanceof SDK.Resource)){return Promise.reject(new Error('Internal error: not a resource'));}
const sidebar=Resources.ResourcesPanel._instance()._sidebar;await UI.viewManager.showView('resources');await sidebar.showResource(resource);}};;Resources.ApplicationPanelSidebar=class extends UI.VBox{constructor(panel){super();this._panel=panel;this._sidebarTree=new UI.TreeOutlineInShadow();this._sidebarTree.element.classList.add('resources-sidebar');this._sidebarTree.registerRequiredCSS('resources/resourcesSidebar.css');this._sidebarTree.element.classList.add('filter-all');this._sidebarTree.addEventListener(UI.TreeOutline.Events.ElementAttached,this._treeElementAdded,this);this.contentElement.appendChild(this._sidebarTree.element);this._applicationTreeElement=this._addSidebarSection(Common.UIString('Application'));const manifestTreeElement=new Resources.AppManifestTreeElement(panel);this._applicationTreeElement.appendChild(manifestTreeElement);this.serviceWorkersTreeElement=new Resources.ServiceWorkersTreeElement(panel);this._applicationTreeElement.appendChild(this.serviceWorkersTreeElement);const clearStorageTreeElement=new Resources.ClearStorageTreeElement(panel);this._applicationTreeElement.appendChild(clearStorageTreeElement);const storageTreeElement=this._addSidebarSection(Common.UIString('Storage'));this.localStorageListTreeElement=new Resources.StorageCategoryTreeElement(panel,Common.UIString('Local Storage'),'LocalStorage');this.localStorageListTreeElement.setLink('https://developers.google.com/web/tools/chrome-devtools/storage/localstorage?utm_source=devtools');const localStorageIcon=UI.Icon.create('mediumicon-table','resource-tree-item');this.localStorageListTreeElement.setLeadingIcons([localStorageIcon]);storageTreeElement.appendChild(this.localStorageListTreeElement);this.sessionStorageListTreeElement=new Resources.StorageCategoryTreeElement(panel,Common.UIString('Session Storage'),'SessionStorage');this.sessionStorageListTreeElement.setLink('https://developers.google.com/web/tools/chrome-devtools/storage/sessionstorage?utm_source=devtools');const sessionStorageIcon=UI.Icon.create('mediumicon-table','resource-tree-item');this.sessionStorageListTreeElement.setLeadingIcons([sessionStorageIcon]);storageTreeElement.appendChild(this.sessionStorageListTreeElement);this.indexedDBListTreeElement=new Resources.IndexedDBTreeElement(panel);this.indexedDBListTreeElement.setLink('https://developers.google.com/web/tools/chrome-devtools/storage/indexeddb?utm_source=devtools');storageTreeElement.appendChild(this.indexedDBListTreeElement);this.databasesListTreeElement=new Resources.StorageCategoryTreeElement(panel,Common.UIString('Web SQL'),'Databases');this.databasesListTreeElement.setLink('https://developers.google.com/web/tools/chrome-devtools/storage/websql?utm_source=devtools');const databaseIcon=UI.Icon.create('mediumicon-database','resource-tree-item');this.databasesListTreeElement.setLeadingIcons([databaseIcon]);storageTreeElement.appendChild(this.databasesListTreeElement);this.cookieListTreeElement=new Resources.StorageCategoryTreeElement(panel,Common.UIString('Cookies'),'Cookies');this.cookieListTreeElement.setLink('https://developers.google.com/web/tools/chrome-devtools/storage/cookies?utm_source=devtools');const cookieIcon=UI.Icon.create('mediumicon-cookie','resource-tree-item');this.cookieListTreeElement.setLeadingIcons([cookieIcon]);storageTreeElement.appendChild(this.cookieListTreeElement);const cacheTreeElement=this._addSidebarSection(Common.UIString('Cache'));this.cacheStorageListTreeElement=new Resources.ServiceWorkerCacheTreeElement(panel);cacheTreeElement.appendChild(this.cacheStorageListTreeElement);this.applicationCacheListTreeElement=new Resources.StorageCategoryTreeElement(panel,Common.UIString('Application Cache'),'ApplicationCache');this.applicationCacheListTreeElement.setLink('https://developers.google.com/web/tools/chrome-devtools/storage/applicationcache?utm_source=devtools');const applicationCacheIcon=UI.Icon.create('mediumicon-table','resource-tree-item');this.applicationCacheListTreeElement.setLeadingIcons([applicationCacheIcon]);cacheTreeElement.appendChild(this.applicationCacheListTreeElement);if(Root.Runtime.experiments.isEnabled('backgroundServices')){const backgroundServiceTreeElement=this._addSidebarSection(ls`Background Services`);this.backgroundFetchTreeElement=new Resources.BackgroundServiceTreeElement(panel,Protocol.BackgroundService.ServiceName.BackgroundFetch);backgroundServiceTreeElement.appendChild(this.backgroundFetchTreeElement);this.backgroundSyncTreeElement=new Resources.BackgroundServiceTreeElement(panel,Protocol.BackgroundService.ServiceName.BackgroundSync);backgroundServiceTreeElement.appendChild(this.backgroundSyncTreeElement);if(Root.Runtime.experiments.isEnabled('backgroundServicesNotifications')){this.notificationsTreeElement=new Resources.BackgroundServiceTreeElement(panel,Protocol.BackgroundService.ServiceName.Notifications);backgroundServiceTreeElement.appendChild(this.notificationsTreeElement);}
if(Root.Runtime.experiments.isEnabled('backgroundServicesPaymentHandler')){this.paymentHandlerTreeElement=new Resources.BackgroundServiceTreeElement(panel,Protocol.BackgroundService.ServiceName.PaymentHandler);backgroundServiceTreeElement.appendChild(this.paymentHandlerTreeElement);}
if(Root.Runtime.experiments.isEnabled('backgroundServicesPeriodicBackgroundSync')){this.periodicBackgroundSyncTreeElement=new Resources.BackgroundServiceTreeElement(panel,Protocol.BackgroundService.ServiceName.PeriodicBackgroundSync);backgroundServiceTreeElement.appendChild(this.periodicBackgroundSyncTreeElement);}
if(Root.Runtime.experiments.isEnabled('backgroundServicesPushMessaging')){this.pushMessagingTreeElement=new Resources.BackgroundServiceTreeElement(panel,Protocol.BackgroundService.ServiceName.PushMessaging);backgroundServiceTreeElement.appendChild(this.pushMessagingTreeElement);}}
this._resourcesSection=new Resources.ResourcesSection(panel,this._addSidebarSection(Common.UIString('Frames')));this._databaseTableViews=new Map();this._databaseQueryViews=new Map();this._databaseTreeElements=new Map();this._domStorageTreeElements=new Map();this._domains={};this._sidebarTree.contentElement.addEventListener('mousemove',this._onmousemove.bind(this),false);this._sidebarTree.contentElement.addEventListener('mouseleave',this._onmouseleave.bind(this),false);SDK.targetManager.observeTargets(this);SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.FrameNavigated,this._frameNavigated,this);const selection=this._panel.lastSelectedItemPath();if(!selection.length){manifestTreeElement.select();}}
_addSidebarSection(title){const treeElement=new UI.TreeElement(title,true);treeElement.listItemElement.classList.add('storage-group-list-item');treeElement.setCollapsible(false);treeElement.selectable=false;this._sidebarTree.appendChild(treeElement);return treeElement;}
targetAdded(target){if(this._target){return;}
this._target=target;this._databaseModel=target.model(Resources.DatabaseModel);if(this._databaseModel){this._databaseModel.addEventListener(Resources.DatabaseModel.Events.DatabaseAdded,this._databaseAdded,this);this._databaseModel.addEventListener(Resources.DatabaseModel.Events.DatabasesRemoved,this._resetWebSQL,this);}
const resourceTreeModel=target.model(SDK.ResourceTreeModel);if(!resourceTreeModel){return;}
if(resourceTreeModel.cachedResourcesLoaded()){this._initialize();}
resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.CachedResourcesLoaded,this._initialize,this);resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.WillLoadCachedResources,this._resetWithFrames,this);}
targetRemoved(target){if(target!==this._target){return;}
delete this._target;const resourceTreeModel=target.model(SDK.ResourceTreeModel);if(resourceTreeModel){resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.CachedResourcesLoaded,this._initialize,this);resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.WillLoadCachedResources,this._resetWithFrames,this);}
if(this._databaseModel){this._databaseModel.removeEventListener(Resources.DatabaseModel.Events.DatabaseAdded,this._databaseAdded,this);this._databaseModel.removeEventListener(Resources.DatabaseModel.Events.DatabasesRemoved,this._resetWebSQL,this);this._databaseModel=null;}
this._resetWithFrames();}
focus(){this._sidebarTree.focus();}
_initialize(){for(const frame of SDK.ResourceTreeModel.frames()){this._addCookieDocument(frame);}
if(this._databaseModel){this._databaseModel.enable();}
const cacheStorageModel=this._target.model(SDK.ServiceWorkerCacheModel);if(cacheStorageModel){cacheStorageModel.enable();}
const resourceTreeModel=this._target.model(SDK.ResourceTreeModel);if(resourceTreeModel){this._populateApplicationCacheTree(resourceTreeModel);}
SDK.targetManager.observeModels(Resources.DOMStorageModel,({modelAdded:model=>this._domStorageModelAdded(model),modelRemoved:model=>this._domStorageModelRemoved(model)}));this.indexedDBListTreeElement._initialize();SDK.targetManager.observeModels(Resources.IndexedDBModel,({modelAdded:model=>model.enable(),modelRemoved:model=>this.indexedDBListTreeElement.removeIndexedDBForModel(model)}));const serviceWorkerCacheModel=this._target.model(SDK.ServiceWorkerCacheModel);this.cacheStorageListTreeElement._initialize(serviceWorkerCacheModel);const backgroundServiceModel=this._target.model(Resources.BackgroundServiceModel);if(Root.Runtime.experiments.isEnabled('backgroundServices')){this.backgroundFetchTreeElement._initialize(backgroundServiceModel);this.backgroundSyncTreeElement._initialize(backgroundServiceModel);if(Root.Runtime.experiments.isEnabled('backgroundServicesNotifications')){this.notificationsTreeElement._initialize(backgroundServiceModel);}
if(Root.Runtime.experiments.isEnabled('backgroundServicesPaymentHandler')){this.paymentHandlerTreeElement._initialize(backgroundServiceModel);}
if(Root.Runtime.experiments.isEnabled('backgroundServicesPeriodicBackgroundSync')){this.periodicBackgroundSyncTreeElement._initialize(backgroundServiceModel);}
if(Root.Runtime.experiments.isEnabled('backgroundServicesPushMessaging')){this.pushMessagingTreeElement._initialize(backgroundServiceModel);}}}
_domStorageModelAdded(model){model.enable();model.storages().forEach(this._addDOMStorage.bind(this));model.addEventListener(Resources.DOMStorageModel.Events.DOMStorageAdded,this._domStorageAdded,this);model.addEventListener(Resources.DOMStorageModel.Events.DOMStorageRemoved,this._domStorageRemoved,this);}
_domStorageModelRemoved(model){model.storages().forEach(this._removeDOMStorage.bind(this));model.removeEventListener(Resources.DOMStorageModel.Events.DOMStorageAdded,this._domStorageAdded,this);model.removeEventListener(Resources.DOMStorageModel.Events.DOMStorageRemoved,this._domStorageRemoved,this);}
_resetWithFrames(){this._resourcesSection.reset();this._reset();}
_resetWebSQL(){const queryViews=this._databaseQueryViews.valuesArray();for(let i=0;i<queryViews.length;++i){queryViews[i].removeEventListener(Resources.DatabaseQueryView.Events.SchemaUpdated,this._updateDatabaseTables,this);}
this._databaseTableViews.clear();this._databaseQueryViews.clear();this._databaseTreeElements.clear();this.databasesListTreeElement.removeChildren();this.databasesListTreeElement.setExpandable(false);}
_resetAppCache(){for(const frameId of Object.keys(this._applicationCacheFrameElements)){this._applicationCacheFrameManifestRemoved({data:frameId});}
this.applicationCacheListTreeElement.setExpandable(false);}
_treeElementAdded(event){const selection=this._panel.lastSelectedItemPath();if(!selection.length){return;}
const element=event.data;const index=selection.indexOf(element.itemURL);if(index<0){return;}
for(let parent=element.parent;parent;parent=parent.parent){parent.expand();}
if(index>0){element.expand();}
element.select();}
_reset(){this._domains={};this._resetWebSQL();this.cookieListTreeElement.removeChildren();}
_frameNavigated(event){const frame=(event.data);if(frame.isTopFrame()){this._reset();}
const applicationCacheFrameTreeElement=this._applicationCacheFrameElements[frame.id];if(applicationCacheFrameTreeElement){applicationCacheFrameTreeElement.frameNavigated(frame);}
this._addCookieDocument(frame);}
_databaseAdded(event){const database=(event.data);const databaseTreeElement=new Resources.DatabaseTreeElement(this,database);this._databaseTreeElements.set(database,databaseTreeElement);this.databasesListTreeElement.appendChild(databaseTreeElement);}
_addCookieDocument(frame){const parsedURL=frame.url.asParsedURL();if(!parsedURL||(parsedURL.scheme!=='http'&&parsedURL.scheme!=='https'&&parsedURL.scheme!=='file')){return;}
const domain=parsedURL.securityOrigin();if(!this._domains[domain]){this._domains[domain]=true;const cookieDomainTreeElement=new Resources.CookieTreeElement(this._panel,frame,domain);this.cookieListTreeElement.appendChild(cookieDomainTreeElement);}}
_domStorageAdded(event){const domStorage=(event.data);this._addDOMStorage(domStorage);}
_addDOMStorage(domStorage){console.assert(!this._domStorageTreeElements.get(domStorage));const domStorageTreeElement=new Resources.DOMStorageTreeElement(this._panel,domStorage);this._domStorageTreeElements.set(domStorage,domStorageTreeElement);if(domStorage.isLocalStorage){this.localStorageListTreeElement.appendChild(domStorageTreeElement);}else{this.sessionStorageListTreeElement.appendChild(domStorageTreeElement);}}
_domStorageRemoved(event){const domStorage=(event.data);this._removeDOMStorage(domStorage);}
_removeDOMStorage(domStorage){const treeElement=this._domStorageTreeElements.get(domStorage);if(!treeElement){return;}
const wasSelected=treeElement.selected;const parentListTreeElement=treeElement.parent;parentListTreeElement.removeChild(treeElement);if(wasSelected){parentListTreeElement.select();}
this._domStorageTreeElements.remove(domStorage);}
selectDatabase(database){if(database){this._showDatabase(database);this._databaseTreeElements.get(database).select();}}
async showResource(resource,line,column){await this._resourcesSection.revealResource(resource,line,column);}
_showDatabase(database,tableName){if(!database){return;}
let view;if(tableName){let tableViews=this._databaseTableViews.get(database);if(!tableViews){tableViews=({});this._databaseTableViews.set(database,tableViews);}
view=tableViews[tableName];if(!view){view=new Resources.DatabaseTableView(database,tableName);tableViews[tableName]=view;}}else{view=this._databaseQueryViews.get(database);if(!view){view=new Resources.DatabaseQueryView(database);this._databaseQueryViews.set(database,view);view.addEventListener(Resources.DatabaseQueryView.Events.SchemaUpdated,this._updateDatabaseTables,this);}}
this._innerShowView(view);}
_showApplicationCache(frameId){if(!this._applicationCacheViews[frameId]){this._applicationCacheViews[frameId]=new Resources.ApplicationCacheItemsView(this._applicationCacheModel,frameId);}
this._innerShowView(this._applicationCacheViews[frameId]);}
showFileSystem(view){this._innerShowView(view);}
_innerShowView(view){this._panel.showView(view);}
async _updateDatabaseTables(event){const database=(event.data);if(!database){return;}
const databasesTreeElement=this._databaseTreeElements.get(database);if(!databasesTreeElement){return;}
databasesTreeElement.invalidateChildren();const tableViews=this._databaseTableViews.get(database);if(!tableViews){return;}
const tableNamesHash={};const panel=this._panel;const tableNames=await database.tableNames();const tableNamesLength=tableNames.length;for(let i=0;i<tableNamesLength;++i){tableNamesHash[tableNames[i]]=true;}
for(const tableName in tableViews){if(!(tableName in tableNamesHash)){if(panel.visibleView===tableViews[tableName]){panel.showView(null);}
delete tableViews[tableName];}}
await databasesTreeElement.updateChildren();}
_populateApplicationCacheTree(resourceTreeModel){this._applicationCacheModel=this._target.model(Resources.ApplicationCacheModel);this._applicationCacheViews={};this._applicationCacheFrameElements={};this._applicationCacheManifestElements={};this._applicationCacheModel.addEventListener(Resources.ApplicationCacheModel.Events.FrameManifestAdded,this._applicationCacheFrameManifestAdded,this);this._applicationCacheModel.addEventListener(Resources.ApplicationCacheModel.Events.FrameManifestRemoved,this._applicationCacheFrameManifestRemoved,this);this._applicationCacheModel.addEventListener(Resources.ApplicationCacheModel.Events.FrameManifestsReset,this._resetAppCache,this);this._applicationCacheModel.addEventListener(Resources.ApplicationCacheModel.Events.FrameManifestStatusUpdated,this._applicationCacheFrameManifestStatusChanged,this);this._applicationCacheModel.addEventListener(Resources.ApplicationCacheModel.Events.NetworkStateChanged,this._applicationCacheNetworkStateChanged,this);}
_applicationCacheFrameManifestAdded(event){const frameId=event.data;const manifestURL=this._applicationCacheModel.frameManifestURL(frameId);let manifestTreeElement=this._applicationCacheManifestElements[manifestURL];if(!manifestTreeElement){manifestTreeElement=new Resources.ApplicationCacheManifestTreeElement(this._panel,manifestURL);this.applicationCacheListTreeElement.appendChild(manifestTreeElement);this._applicationCacheManifestElements[manifestURL]=manifestTreeElement;}
const model=this._target.model(SDK.ResourceTreeModel);const frameTreeElement=new Resources.ApplicationCacheFrameTreeElement(this,model.frameForId(frameId),manifestURL);manifestTreeElement.appendChild(frameTreeElement);manifestTreeElement.expand();this._applicationCacheFrameElements[frameId]=frameTreeElement;}
_applicationCacheFrameManifestRemoved(event){const frameId=event.data;const frameTreeElement=this._applicationCacheFrameElements[frameId];if(!frameTreeElement){return;}
const manifestURL=frameTreeElement.manifestURL;delete this._applicationCacheFrameElements[frameId];delete this._applicationCacheViews[frameId];frameTreeElement.parent.removeChild(frameTreeElement);const manifestTreeElement=this._applicationCacheManifestElements[manifestURL];if(manifestTreeElement.childCount()){return;}
delete this._applicationCacheManifestElements[manifestURL];manifestTreeElement.parent.removeChild(manifestTreeElement);}
_applicationCacheFrameManifestStatusChanged(event){const frameId=event.data;const status=this._applicationCacheModel.frameManifestStatus(frameId);if(this._applicationCacheViews[frameId]){this._applicationCacheViews[frameId].updateStatus(status);}}
_applicationCacheNetworkStateChanged(event){const isNowOnline=event.data;for(const manifestURL in this._applicationCacheViews){this._applicationCacheViews[manifestURL].updateNetworkState(isNowOnline);}}
showView(view){if(view){this.showResource(view.resource);}}
_onmousemove(event){const nodeUnderMouse=event.target;if(!nodeUnderMouse){return;}
const listNode=nodeUnderMouse.enclosingNodeOrSelfWithNodeName('li');if(!listNode){return;}
const element=listNode.treeElement;if(this._previousHoveredElement===element){return;}
if(this._previousHoveredElement){this._previousHoveredElement.hovered=false;delete this._previousHoveredElement;}
if(element instanceof Resources.FrameTreeElement){this._previousHoveredElement=element;element.hovered=true;}}
_onmouseleave(event){if(this._previousHoveredElement){this._previousHoveredElement.hovered=false;delete this._previousHoveredElement;}}};Resources.BaseStorageTreeElement=class extends UI.TreeElement{constructor(storagePanel,title,expandable){super(title,expandable);this._storagePanel=storagePanel;}
onselect(selectedByUser){if(!selectedByUser){return false;}
const path=[];for(let el=this;el;el=el.parent){const url=el.itemURL;if(!url){break;}
path.push(url);}
this._storagePanel.setLastSelectedItemPath(path);return false;}
showView(view){this._storagePanel.showView(view);}};Resources.StorageCategoryTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,categoryName,settingsKey){super(storagePanel,categoryName,false);this._expandedSetting=Common.settings.createSetting('resources'+settingsKey+'Expanded',settingsKey==='Frames');this._categoryName=categoryName;this._categoryLink=null;}
get itemURL(){return'category://'+this._categoryName;}
setLink(link){this._categoryLink=link;}
onselect(selectedByUser){super.onselect(selectedByUser);this._storagePanel.showCategoryView(this._categoryName,this._categoryLink);return false;}
onattach(){super.onattach();if(this._expandedSetting.get()){this.expand();}}
onexpand(){this._expandedSetting.set(true);}
oncollapse(){this._expandedSetting.set(false);}};Resources.BackgroundServiceTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,serviceName){super(storagePanel,Resources.BackgroundServiceView.getUIString(serviceName),false);this._serviceName=serviceName;this._selected=false;this._view=null;this._model=null;const backgroundServiceIcon=UI.Icon.create(this._getIconType(),'resource-tree-item');this.setLeadingIcons([backgroundServiceIcon]);}
_getIconType(){switch(this._serviceName){case Protocol.BackgroundService.ServiceName.BackgroundFetch:return'mediumicon-fetch';case Protocol.BackgroundService.ServiceName.BackgroundSync:return'mediumicon-sync';case Protocol.BackgroundService.ServiceName.PushMessaging:return'mediumicon-cloud';case Protocol.BackgroundService.ServiceName.Notifications:return'mediumicon-bell';case Protocol.BackgroundService.ServiceName.PaymentHandler:return'mediumicon-payment';case Protocol.BackgroundService.ServiceName.PeriodicBackgroundSync:return'mediumicon-schedule';default:console.error(`Service ${this._serviceName} does not have a dedicated icon`);return'mediumicon-table';}}
_initialize(model){this._model=model;if(this._selected&&!this._view){this.onselect(false);}}
get itemURL(){return`background-service://${this._serviceName}`;}
onselect(selectedByUser){super.onselect(selectedByUser);this._selected=true;if(!this._model){return false;}
if(!this._view){this._view=new Resources.BackgroundServiceView(this._serviceName,this._model);}
this.showView(this._view);UI.context.setFlavor(Resources.BackgroundServiceView,this._view);return false;}};Resources.DatabaseTreeElement=class extends Resources.BaseStorageTreeElement{constructor(sidebar,database){super(sidebar._panel,database.name,true);this._sidebar=sidebar;this._database=database;const icon=UI.Icon.create('mediumicon-database','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'database://'+encodeURI(this._database.name);}
onselect(selectedByUser){super.onselect(selectedByUser);this._sidebar._showDatabase(this._database);return false;}
onexpand(){this.updateChildren();}
async updateChildren(){this.removeChildren();const tableNames=await this._database.tableNames();for(const tableName of tableNames){this.appendChild(new Resources.DatabaseTableTreeElement(this._sidebar,this._database,tableName));}}};Resources.DatabaseTableTreeElement=class extends Resources.BaseStorageTreeElement{constructor(sidebar,database,tableName){super(sidebar._panel,tableName,false);this._sidebar=sidebar;this._database=database;this._tableName=tableName;const icon=UI.Icon.create('mediumicon-table','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'database://'+encodeURI(this._database.name)+'/'+encodeURI(this._tableName);}
onselect(selectedByUser){super.onselect(selectedByUser);this._sidebar._showDatabase(this._database,this._tableName);return false;}};Resources.ServiceWorkerCacheTreeElement=class extends Resources.StorageCategoryTreeElement{constructor(storagePanel){super(storagePanel,Common.UIString('Cache Storage'),'CacheStorage');const icon=UI.Icon.create('mediumicon-database','resource-tree-item');this.setLeadingIcons([icon]);this._swCacheModel=null;}
_initialize(model){this._swCacheTreeElements=[];this._swCacheModel=model;if(model){for(const cache of model.caches()){this._addCache(model,cache);}}
SDK.targetManager.addModelListener(SDK.ServiceWorkerCacheModel,SDK.ServiceWorkerCacheModel.Events.CacheAdded,this._cacheAdded,this);SDK.targetManager.addModelListener(SDK.ServiceWorkerCacheModel,SDK.ServiceWorkerCacheModel.Events.CacheRemoved,this._cacheRemoved,this);}
onattach(){super.onattach();this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Refresh Caches'),this._refreshCaches.bind(this));contextMenu.show();}
_refreshCaches(){if(this._swCacheModel){this._swCacheModel.refreshCacheNames();}}
_cacheAdded(event){const cache=(event.data.cache);const model=(event.data.model);this._addCache(model,cache);}
_addCache(model,cache){const swCacheTreeElement=new Resources.SWCacheTreeElement(this._storagePanel,model,cache);this._swCacheTreeElements.push(swCacheTreeElement);this.appendChild(swCacheTreeElement);}
_cacheRemoved(event){const cache=(event.data.cache);const model=(event.data.model);const swCacheTreeElement=this._cacheTreeElement(model,cache);if(!swCacheTreeElement){return;}
this.removeChild(swCacheTreeElement);this._swCacheTreeElements.remove(swCacheTreeElement);this.setExpandable(this.childCount()>0);}
_cacheTreeElement(model,cache){let index=-1;let i;for(i=0;i<this._swCacheTreeElements.length;++i){if(this._swCacheTreeElements[i]._cache.equals(cache)&&this._swCacheTreeElements[i]._model===model){index=i;break;}}
if(index!==-1){return this._swCacheTreeElements[i];}
return null;}};Resources.SWCacheTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,model,cache){super(storagePanel,cache.cacheName+' - '+cache.securityOrigin,false);this._model=model;this._cache=cache;this._view=null;const icon=UI.Icon.create('mediumicon-table','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'cache://'+this._cache.cacheId;}
onattach(){super.onattach();this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Delete'),this._clearCache.bind(this));contextMenu.show();}
_clearCache(){this._model.deleteCache(this._cache);}
update(cache){this._cache=cache;if(this._view){this._view.update(cache);}}
onselect(selectedByUser){super.onselect(selectedByUser);if(!this._view){this._view=new Resources.ServiceWorkerCacheView(this._model,this._cache);}
this.showView(this._view);return false;}};Resources.ServiceWorkersTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel){super(storagePanel,Common.UIString('Service Workers'),false);const icon=UI.Icon.create('mediumicon-service-worker','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'service-workers://';}
onselect(selectedByUser){super.onselect(selectedByUser);if(!this._view){this._view=new Resources.ServiceWorkersView();}
this.showView(this._view);return false;}};Resources.AppManifestTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel){super(storagePanel,Common.UIString('Manifest'),false);const icon=UI.Icon.create('mediumicon-manifest','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'manifest://';}
onselect(selectedByUser){super.onselect(selectedByUser);if(!this._view){this._view=new Resources.AppManifestView();}
this.showView(this._view);return false;}};Resources.ClearStorageTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel){super(storagePanel,Common.UIString('Clear storage'),false);const icon=UI.Icon.create('mediumicon-clear-storage','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'clear-storage://';}
onselect(selectedByUser){super.onselect(selectedByUser);if(!this._view){this._view=new Resources.ClearStorageView();}
this.showView(this._view);return false;}};Resources.IndexedDBTreeElement=class extends Resources.StorageCategoryTreeElement{constructor(storagePanel){super(storagePanel,Common.UIString('IndexedDB'),'IndexedDB');const icon=UI.Icon.create('mediumicon-database','resource-tree-item');this.setLeadingIcons([icon]);}
_initialize(){SDK.targetManager.addModelListener(Resources.IndexedDBModel,Resources.IndexedDBModel.Events.DatabaseAdded,this._indexedDBAdded,this);SDK.targetManager.addModelListener(Resources.IndexedDBModel,Resources.IndexedDBModel.Events.DatabaseRemoved,this._indexedDBRemoved,this);SDK.targetManager.addModelListener(Resources.IndexedDBModel,Resources.IndexedDBModel.Events.DatabaseLoaded,this._indexedDBLoaded,this);SDK.targetManager.addModelListener(Resources.IndexedDBModel,Resources.IndexedDBModel.Events.IndexedDBContentUpdated,this._indexedDBContentUpdated,this);this._idbDatabaseTreeElements=[];for(const indexedDBModel of SDK.targetManager.models(Resources.IndexedDBModel)){const databases=indexedDBModel.databases();for(let j=0;j<databases.length;++j){this._addIndexedDB(indexedDBModel,databases[j]);}}}
removeIndexedDBForModel(model){const idbDatabaseTreeElements=this._idbDatabaseTreeElements.filter(element=>element._model===model);for(const idbDatabaseTreeElement of idbDatabaseTreeElements){this._removeIDBDatabaseTreeElement(idbDatabaseTreeElement);}}
onattach(){super.onattach();this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Refresh IndexedDB'),this.refreshIndexedDB.bind(this));contextMenu.show();}
refreshIndexedDB(){for(const indexedDBModel of SDK.targetManager.models(Resources.IndexedDBModel)){indexedDBModel.refreshDatabaseNames();}}
_indexedDBAdded(event){const databaseId=(event.data.databaseId);const model=(event.data.model);this._addIndexedDB(model,databaseId);}
_addIndexedDB(model,databaseId){const idbDatabaseTreeElement=new Resources.IDBDatabaseTreeElement(this._storagePanel,model,databaseId);this._idbDatabaseTreeElements.push(idbDatabaseTreeElement);this.appendChild(idbDatabaseTreeElement);model.refreshDatabase(databaseId);}
_indexedDBRemoved(event){const databaseId=(event.data.databaseId);const model=(event.data.model);const idbDatabaseTreeElement=this._idbDatabaseTreeElement(model,databaseId);if(!idbDatabaseTreeElement){return;}
this._removeIDBDatabaseTreeElement(idbDatabaseTreeElement);}
_removeIDBDatabaseTreeElement(idbDatabaseTreeElement){idbDatabaseTreeElement.clear();this.removeChild(idbDatabaseTreeElement);this._idbDatabaseTreeElements.remove(idbDatabaseTreeElement);this.setExpandable(this.childCount()>0);}
_indexedDBLoaded(event){const database=(event.data.database);const model=(event.data.model);const entriesUpdated=(event.data.entriesUpdated);const idbDatabaseTreeElement=this._idbDatabaseTreeElement(model,database.databaseId);if(!idbDatabaseTreeElement){return;}
idbDatabaseTreeElement.update(database,entriesUpdated);this._indexedDBLoadedForTest();}
_indexedDBLoadedForTest(){}
_indexedDBContentUpdated(event){const databaseId=(event.data.databaseId);const objectStoreName=(event.data.objectStoreName);const model=(event.data.model);const idbDatabaseTreeElement=this._idbDatabaseTreeElement(model,databaseId);if(!idbDatabaseTreeElement){return;}
idbDatabaseTreeElement.indexedDBContentUpdated(objectStoreName);}
_idbDatabaseTreeElement(model,databaseId){return this._idbDatabaseTreeElements.find(x=>x._databaseId.equals(databaseId)&&x._model===model)||null;}};Resources.IDBDatabaseTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,model,databaseId){super(storagePanel,databaseId.name+' - '+databaseId.securityOrigin,false);this._model=model;this._databaseId=databaseId;this._idbObjectStoreTreeElements={};const icon=UI.Icon.create('mediumicon-database','resource-tree-item');this.setLeadingIcons([icon]);this._model.addEventListener(Resources.IndexedDBModel.Events.DatabaseNamesRefreshed,this._refreshIndexedDB,this);}
get itemURL(){return'indexedDB://'+this._databaseId.securityOrigin+'/'+this._databaseId.name;}
onattach(){super.onattach();this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Refresh IndexedDB'),this._refreshIndexedDB.bind(this));contextMenu.show();}
_refreshIndexedDB(){this._model.refreshDatabase(this._databaseId);}
indexedDBContentUpdated(objectStoreName){if(this._idbObjectStoreTreeElements[objectStoreName]){this._idbObjectStoreTreeElements[objectStoreName].markNeedsRefresh();}}
update(database,entriesUpdated){this._database=database;const objectStoreNames={};const objectStoreNamesSorted=Object.keys(this._database.objectStores).sort();for(const objectStoreName of objectStoreNamesSorted){const objectStore=this._database.objectStores[objectStoreName];objectStoreNames[objectStore.name]=true;if(!this._idbObjectStoreTreeElements[objectStore.name]){const idbObjectStoreTreeElement=new Resources.IDBObjectStoreTreeElement(this._storagePanel,this._model,this._databaseId,objectStore);this._idbObjectStoreTreeElements[objectStore.name]=idbObjectStoreTreeElement;this.appendChild(idbObjectStoreTreeElement);}
this._idbObjectStoreTreeElements[objectStore.name].update(objectStore,entriesUpdated);}
for(const objectStoreName in this._idbObjectStoreTreeElements){if(!objectStoreNames[objectStoreName]){this._objectStoreRemoved(objectStoreName);}}
if(this._view){this._view.update(database);}
this._updateTooltip();}
_updateTooltip(){if(Object.keys(this._idbObjectStoreTreeElements).length===0){this.tooltip=ls`Version: ${this._database.version} (empty)`;}else{this.tooltip=ls`Version: ${this._database.version}`;}}
onselect(selectedByUser){super.onselect(selectedByUser);if(!this._view){this._view=new Resources.IDBDatabaseView(this._model,this._database);}
this.showView(this._view);return false;}
_objectStoreRemoved(objectStoreName){const objectStoreTreeElement=this._idbObjectStoreTreeElements[objectStoreName];objectStoreTreeElement.clear();this.removeChild(objectStoreTreeElement);delete this._idbObjectStoreTreeElements[objectStoreName];this._updateTooltip();}
clear(){for(const objectStoreName in this._idbObjectStoreTreeElements){this._objectStoreRemoved(objectStoreName);}}};Resources.IDBObjectStoreTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,model,databaseId,objectStore){super(storagePanel,objectStore.name,false);this._model=model;this._databaseId=databaseId;this._idbIndexTreeElements={};this._objectStore=objectStore;this._view=null;const icon=UI.Icon.create('mediumicon-table','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'indexedDB://'+this._databaseId.securityOrigin+'/'+this._databaseId.name+'/'+
this._objectStore.name;}
onattach(){super.onattach();this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);}
markNeedsRefresh(){if(this._view){this._view.markNeedsRefresh();}
for(const indexName in this._idbIndexTreeElements){this._idbIndexTreeElements[indexName].markNeedsRefresh();}}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Clear'),this._clearObjectStore.bind(this));contextMenu.show();}
_refreshObjectStore(){if(this._view){this._view.refreshData();}
for(const indexName in this._idbIndexTreeElements){this._idbIndexTreeElements[indexName].refreshIndex();}}
async _clearObjectStore(){await this._model.clearObjectStore(this._databaseId,this._objectStore.name);this.update(this._objectStore,true);}
update(objectStore,entriesUpdated){this._objectStore=objectStore;const indexNames={};for(const indexName in this._objectStore.indexes){const index=this._objectStore.indexes[indexName];indexNames[index.name]=true;if(!this._idbIndexTreeElements[index.name]){const idbIndexTreeElement=new Resources.IDBIndexTreeElement(this._storagePanel,this._model,this._databaseId,this._objectStore,index,this._refreshObjectStore.bind(this));this._idbIndexTreeElements[index.name]=idbIndexTreeElement;this.appendChild(idbIndexTreeElement);}
this._idbIndexTreeElements[index.name].update(this._objectStore,index,entriesUpdated);}
for(const indexName in this._idbIndexTreeElements){if(!indexNames[indexName]){this._indexRemoved(indexName);}}
for(const indexName in this._idbIndexTreeElements){if(!indexNames[indexName]){this.removeChild(this._idbIndexTreeElements[indexName]);delete this._idbIndexTreeElements[indexName];}}
if(this.childCount()){this.expand();}
if(this._view&&entriesUpdated){this._view.update(this._objectStore,null);}
this._updateTooltip();}
_updateTooltip(){const keyPathString=this._objectStore.keyPathString;let tooltipString=keyPathString!==null?ls`Key path: ${keyPathString}`:'';if(this._objectStore.autoIncrement){tooltipString+='\n'+Common.UIString('autoIncrement');}
this.tooltip=tooltipString;}
onselect(selectedByUser){super.onselect(selectedByUser);if(!this._view){this._view=new Resources.IDBDataView(this._model,this._databaseId,this._objectStore,null,this._refreshObjectStore.bind(this));}
this.showView(this._view);return false;}
_indexRemoved(indexName){const indexTreeElement=this._idbIndexTreeElements[indexName];indexTreeElement.clear();this.removeChild(indexTreeElement);delete this._idbIndexTreeElements[indexName];}
clear(){for(const indexName in this._idbIndexTreeElements){this._indexRemoved(indexName);}
if(this._view){this._view.clear();}}};Resources.IDBIndexTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,model,databaseId,objectStore,index,refreshObjectStore){super(storagePanel,index.name,false);this._model=model;this._databaseId=databaseId;this._objectStore=objectStore;this._index=index;this._refreshObjectStore=refreshObjectStore;}
get itemURL(){return'indexedDB://'+this._databaseId.securityOrigin+'/'+this._databaseId.name+'/'+
this._objectStore.name+'/'+this._index.name;}
markNeedsRefresh(){if(this._view){this._view.markNeedsRefresh();}}
refreshIndex(){if(this._view){this._view.refreshData();}}
update(objectStore,index,entriesUpdated){this._objectStore=objectStore;this._index=index;if(this._view&&entriesUpdated){this._view.update(this._objectStore,this._index);}
this._updateTooltip();}
_updateTooltip(){const tooltipLines=[];const keyPathString=this._index.keyPathString;tooltipLines.push(ls`Key path: ${keyPathString}`);if(this._index.unique){tooltipLines.push(Common.UIString('unique'));}
if(this._index.multiEntry){tooltipLines.push(Common.UIString('multiEntry'));}
this.tooltip=tooltipLines.join('\n');}
onselect(selectedByUser){super.onselect(selectedByUser);if(!this._view){this._view=new Resources.IDBDataView(this._model,this._databaseId,this._objectStore,this._index,this._refreshObjectStore);}
this.showView(this._view);return false;}
clear(){if(this._view){this._view.clear();}}};Resources.DOMStorageTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,domStorage){super(storagePanel,domStorage.securityOrigin?domStorage.securityOrigin:Common.UIString('Local Files'),false);this._domStorage=domStorage;const icon=UI.Icon.create('mediumicon-table','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'storage://'+this._domStorage.securityOrigin+'/'+
(this._domStorage.isLocalStorage?'local':'session');}
onselect(selectedByUser){super.onselect(selectedByUser);this._storagePanel.showDOMStorage(this._domStorage);return false;}
onattach(){super.onattach();this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Clear'),()=>this._domStorage.clear());contextMenu.show();}};Resources.CookieTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,frame,cookieDomain){super(storagePanel,cookieDomain?cookieDomain:Common.UIString('Local Files'),false);this._target=frame.resourceTreeModel().target();this._cookieDomain=cookieDomain;this.tooltip=ls`cookies used by frames from ${cookieDomain}`;const icon=UI.Icon.create('mediumicon-cookie','resource-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'cookies://'+this._cookieDomain;}
onattach(){super.onattach();this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendItem(Common.UIString('Clear'),()=>this._storagePanel.clearCookies(this._target,this._cookieDomain));contextMenu.show();}
onselect(selectedByUser){super.onselect(selectedByUser);this._storagePanel.showCookies(this._target,this._cookieDomain);return false;}};Resources.ApplicationCacheManifestTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,manifestURL){const title=new Common.ParsedURL(manifestURL).displayName;super(storagePanel,title,false);this.tooltip=manifestURL;this._manifestURL=manifestURL;}
get itemURL(){return'appcache://'+this._manifestURL;}
get manifestURL(){return this._manifestURL;}
onselect(selectedByUser){super.onselect(selectedByUser);this._storagePanel.showCategoryView(this._manifestURL,null);return false;}};Resources.ApplicationCacheFrameTreeElement=class extends Resources.BaseStorageTreeElement{constructor(sidebar,frame,manifestURL){super(sidebar._panel,'',false);this._sidebar=sidebar;this._frameId=frame.id;this._manifestURL=manifestURL;this._refreshTitles(frame);const icon=UI.Icon.create('largeicon-navigator-folder','navigator-tree-item');icon.classList.add('navigator-folder-tree-item');this.setLeadingIcons([icon]);}
get itemURL(){return'appcache://'+this._manifestURL+'/'+encodeURI(this.titleAsText());}
get frameId(){return this._frameId;}
get manifestURL(){return this._manifestURL;}
_refreshTitles(frame){this.title=frame.displayName();}
frameNavigated(frame){this._refreshTitles(frame);}
onselect(selectedByUser){super.onselect(selectedByUser);this._sidebar._showApplicationCache(this._frameId);return false;}};Resources.StorageCategoryView=class extends UI.VBox{constructor(){super();this.element.classList.add('storage-view');this._emptyWidget=new UI.EmptyWidget('');this._linkElement=null;this._emptyWidget.show(this.element);}
setText(text){this._emptyWidget.text=text;}
setLink(link){if(link&&!this._linkElement){this._linkElement=this._emptyWidget.appendLink(link);}
if(!link&&this._linkElement){this._linkElement.classList.add('hidden');}
if(link&&this._linkElement){this._linkElement.setAttribute('href',link);this._linkElement.classList.remove('hidden');}}};;Resources.ResourcesSection=class{constructor(storagePanel,treeElement){this._panel=storagePanel;this._treeElement=treeElement;this._treeElementForFrameId=new Map();function addListener(eventType,handler,target){SDK.targetManager.addModelListener(SDK.ResourceTreeModel,eventType,event=>handler.call(target,event.data));}
addListener(SDK.ResourceTreeModel.Events.FrameAdded,this._frameAdded,this);addListener(SDK.ResourceTreeModel.Events.FrameNavigated,this._frameNavigated,this);addListener(SDK.ResourceTreeModel.Events.FrameDetached,this._frameDetached,this);addListener(SDK.ResourceTreeModel.Events.ResourceAdded,this._resourceAdded,this);const mainTarget=SDK.targetManager.mainTarget();const resourceTreeModel=mainTarget&&mainTarget.model(SDK.ResourceTreeModel);const mainFrame=resourceTreeModel&&resourceTreeModel.mainFrame;if(mainFrame){this._frameAdded(mainFrame);}}
static _getParentFrame(frame){const parentFrame=frame.parentFrame;if(parentFrame){return parentFrame;}
const parentTarget=frame.resourceTreeModel().target().parentTarget();if(!parentTarget){return null;}
return parentTarget.model(SDK.ResourceTreeModel).mainFrame;}
_expandFrame(frame){if(!frame){return false;}
let treeElement=this._treeElementForFrameId.get(frame.id);if(!treeElement&&!this._expandFrame(Resources.ResourcesSection._getParentFrame(frame))){return false;}
treeElement=this._treeElementForFrameId.get(frame.id);if(!treeElement){return false;}
treeElement.expand();return true;}
async revealResource(resource,line,column){if(!this._expandFrame(resource.frame())){return;}
const resourceTreeElement=Resources.FrameResourceTreeElement.forResource(resource);if(resourceTreeElement){await resourceTreeElement.revealResource(line,column);}}
_frameAdded(frame){const parentFrame=Resources.ResourcesSection._getParentFrame(frame);const parentTreeElement=parentFrame?this._treeElementForFrameId.get(parentFrame.id):this._treeElement;if(!parentTreeElement){return;}
const frameTreeElement=new Resources.FrameTreeElement(this,frame);this._treeElementForFrameId.set(frame.id,frameTreeElement);parentTreeElement.appendChild(frameTreeElement);}
_frameDetached(frame){const frameTreeElement=this._treeElementForFrameId.get(frame.id);if(!frameTreeElement){return;}
this._treeElementForFrameId.remove(frame.id);if(frameTreeElement.parent){frameTreeElement.parent.removeChild(frameTreeElement);}}
_frameNavigated(frame){const frameTreeElement=this._treeElementForFrameId.get(frame.id);if(frameTreeElement){frameTreeElement.frameNavigated(frame);}}
_resourceAdded(resource){const frameTreeElement=this._treeElementForFrameId.get(resource.frameId);if(!frameTreeElement){return;}
frameTreeElement.appendResource(resource);}
reset(){this._treeElement.removeChildren();this._treeElementForFrameId.clear();}};Resources.FrameTreeElement=class extends Resources.BaseStorageTreeElement{constructor(section,frame){super(section._panel,'',false);this._populated=false;this._section=section;this._frame=frame;this._frameId=frame.id;this._categoryElements={};this._treeElementForResource={};this.setExpandable(true);this.frameNavigated(frame);const icon=UI.Icon.create('largeicon-navigator-frame','navigator-tree-item');icon.classList.add('navigator-frame-tree-item');this.setLeadingIcons([icon]);}
frameNavigated(frame){this.invalidateChildren();this._frameId=frame.id;this.title=frame.displayName();this._categoryElements={};this._treeElementForResource={};}
get itemURL(){return'frame://'+encodeURI(this.titleAsText());}
onselect(selectedByUser){super.onselect(selectedByUser);this._section._panel.showCategoryView(this.titleAsText(),null);this.listItemElement.classList.remove('hovered');SDK.OverlayModel.hideDOMNodeHighlight();return false;}
set hovered(hovered){if(hovered){this.listItemElement.classList.add('hovered');this._frame.resourceTreeModel().domModel().overlayModel().highlightFrame(this._frameId);}else{this.listItemElement.classList.remove('hovered');SDK.OverlayModel.hideDOMNodeHighlight();}}
appendResource(resource){if(!this._populated){return;}
const statusCode=resource['statusCode'];if(statusCode>=301&&statusCode<=303){return;}
const resourceType=resource.resourceType();const categoryName=resourceType.name();let categoryElement=resourceType===Common.resourceTypes.Document?this:this._categoryElements[categoryName];if(!categoryElement){categoryElement=new Resources.StorageCategoryTreeElement(this._section._panel,resource.resourceType().category().title,categoryName);this._categoryElements[resourceType.name()]=categoryElement;this._insertInPresentationOrder(this,categoryElement);}
const resourceTreeElement=new Resources.FrameResourceTreeElement(this._section._panel,resource);this._insertInPresentationOrder(categoryElement,resourceTreeElement);this._treeElementForResource[resource.url]=resourceTreeElement;}
resourceByURL(url){const treeElement=this._treeElementForResource[url];return treeElement?treeElement._resource:null;}
appendChild(treeElement){if(!this._populated){return;}
this._insertInPresentationOrder(this,treeElement);}
_insertInPresentationOrder(parentTreeElement,childTreeElement){function typeWeight(treeElement){if(treeElement instanceof Resources.StorageCategoryTreeElement){return 2;}
if(treeElement instanceof Resources.FrameTreeElement){return 1;}
return 3;}
function compare(treeElement1,treeElement2){const typeWeight1=typeWeight(treeElement1);const typeWeight2=typeWeight(treeElement2);let result;if(typeWeight1>typeWeight2){result=1;}else if(typeWeight1<typeWeight2){result=-1;}else{result=treeElement1.titleAsText().localeCompare(treeElement2.titleAsText());}
return result;}
const childCount=parentTreeElement.childCount();let i;for(i=0;i<childCount;++i){if(compare(childTreeElement,parentTreeElement.childAt(i))<0){break;}}
parentTreeElement.insertChild(childTreeElement,i);}
async onpopulate(){this._populated=true;for(const child of this._frame.childFrames){this._section._frameAdded(child);}
for(const resource of this._frame.resources()){this.appendResource(resource);}}};Resources.FrameResourceTreeElement=class extends Resources.BaseStorageTreeElement{constructor(storagePanel,resource){super(storagePanel,resource.displayName,false);this._panel=storagePanel;this._resource=resource;this._previewPromise=null;this.tooltip=resource.url;this._resource[Resources.FrameResourceTreeElement._symbol]=this;const icon=UI.Icon.create('largeicon-navigator-file','navigator-tree-item');icon.classList.add('navigator-file-tree-item');icon.classList.add('navigator-'+resource.resourceType().name()+'-tree-item');this.setLeadingIcons([icon]);}
static forResource(resource){return resource[Resources.FrameResourceTreeElement._symbol];}
get itemURL(){return this._resource.url;}
_preparePreview(){if(this._previewPromise){return this._previewPromise;}
const viewPromise=SourceFrame.PreviewFactory.createPreview(this._resource,this._resource.mimeType);this._previewPromise=viewPromise.then(view=>{if(view){return view;}
return new UI.EmptyWidget(this._resource.url);});return this._previewPromise;}
onselect(selectedByUser){super.onselect(selectedByUser);this._panel.scheduleShowView(this._preparePreview());return false;}
ondblclick(event){Host.InspectorFrontendHost.openInNewTab(this._resource.url);return false;}
onattach(){super.onattach();this.listItemElement.draggable=true;this.listItemElement.addEventListener('dragstart',this._ondragstart.bind(this),false);this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),true);}
_ondragstart(event){event.dataTransfer.setData('text/plain',this._resource.content||'');event.dataTransfer.effectAllowed='copy';return true;}
_handleContextMenuEvent(event){const contextMenu=new UI.ContextMenu(event);contextMenu.appendApplicableItems(this._resource);contextMenu.show();}
async revealResource(line,column){this.revealAndSelect(true);const view=await this._panel.scheduleShowView(this._preparePreview());if(!(view instanceof SourceFrame.ResourceSourceFrame)||typeof line!=='number'){return;}
view.revealPosition(line,column,true);}};Resources.FrameResourceTreeElement._symbol=Symbol('treeElement');;Resources.ServiceWorkerCacheView=class extends UI.SimpleView{constructor(model,cache){super(Common.UIString('Cache'));this.registerRequiredCSS('resources/serviceWorkerCacheViews.css');this._model=model;this._entriesForTest=null;this.element.classList.add('service-worker-cache-data-view');this.element.classList.add('storage-view');const editorToolbar=new UI.Toolbar('data-view-toolbar',this.element);this._splitWidget=new UI.SplitWidget(false,false);this._splitWidget.show(this.element);this._previewPanel=new UI.VBox();const resizer=this._previewPanel.element.createChild('div','cache-preview-panel-resizer');this._splitWidget.setMainWidget(this._previewPanel);this._splitWidget.installResizer(resizer);this._preview=null;this._cache=cache;this._dataGrid=null;this._refreshThrottler=new Common.Throttler(300);this._refreshButton=new UI.ToolbarButton(Common.UIString('Refresh'),'largeicon-refresh');this._refreshButton.addEventListener(UI.ToolbarButton.Events.Click,this._refreshButtonClicked,this);editorToolbar.appendToolbarItem(this._refreshButton);this._deleteSelectedButton=new UI.ToolbarButton(Common.UIString('Delete Selected'),'largeicon-delete');this._deleteSelectedButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._deleteButtonClicked(null));editorToolbar.appendToolbarItem(this._deleteSelectedButton);const entryPathFilterBox=new UI.ToolbarInput(ls`Filter by Path`,'',1);editorToolbar.appendToolbarItem(entryPathFilterBox);const entryPathFilterThrottler=new Common.Throttler(300);this._entryPathFilter='';entryPathFilterBox.addEventListener(UI.ToolbarInput.Event.TextChanged,()=>{entryPathFilterThrottler.schedule(()=>{this._entryPathFilter=entryPathFilterBox.value();return this._updateData(true);});});this._returnCount=(null);this._summaryBarElement=(null);this._loadingPromise=(null);this.update(cache);}
_resetDataGrid(){if(this._dataGrid){this._dataGrid.asWidget().detach();}
this._dataGrid=this._createDataGrid();const dataGridWidget=this._dataGrid.asWidget();this._splitWidget.setSidebarWidget(dataGridWidget);dataGridWidget.setMinimumSize(0,250);}
wasShown(){this._model.addEventListener(SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated,this._cacheContentUpdated,this);this._updateData(true);}
willHide(){this._model.removeEventListener(SDK.ServiceWorkerCacheModel.Events.CacheStorageContentUpdated,this._cacheContentUpdated,this);}
_showPreview(preview){if(preview&&this._preview===preview){return;}
if(this._preview){this._preview.detach();}
if(!preview){preview=new UI.EmptyWidget(Common.UIString('Select a cache entry above to preview'));}
this._preview=preview;this._preview.show(this._previewPanel.element);}
_createDataGrid(){const columns=([{id:'number',title:'#',sortable:false,width:'3px'},{id:'name',title:Common.UIString('Name'),weight:4,sortable:true},{id:'responseType',title:ls`Response-Type`,weight:1,align:DataGrid.DataGrid.Align.Right,sortable:true},{id:'contentType',title:Common.UIString('Content-Type'),weight:1,sortable:true},{id:'contentLength',title:Common.UIString('Content-Length'),weight:1,align:DataGrid.DataGrid.Align.Right,sortable:true},{id:'responseTime',title:Common.UIString('Time Cached'),width:'12em',weight:1,align:DataGrid.DataGrid.Align.Right,sortable:true}]);const dataGrid=new DataGrid.DataGrid(columns,undefined,this._deleteButtonClicked.bind(this),this._updateData.bind(this,true));dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortingChanged,this);dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,event=>this._previewCachedResponse(event.data.data),this);dataGrid.setStriped(true);return dataGrid;}
_sortingChanged(){if(!this._dataGrid){return;}
const accending=this._dataGrid.isSortOrderAscending();const columnId=this._dataGrid.sortColumnId();let comparator;if(columnId==='name'){comparator=(a,b)=>a._name.localeCompare(b._name);}else if(columnId==='contentType'){comparator=(a,b)=>a.data.mimeType.localeCompare(b.data.mimeType);}else if(columnId==='contentLength'){comparator=(a,b)=>a.data.resourceSize-b.data.resourceSize;}else if(columnId==='responseTime'){comparator=(a,b)=>a.data.endTime-b.data.endTime;}else if(columnId==='responseType'){comparator=(a,b)=>a._responseType.localeCompare(b._responseType);}
const children=this._dataGrid.rootNode().children.slice();this._dataGrid.rootNode().removeChildren();children.sort((a,b)=>{const result=comparator(a,b);return accending?result:-result;});children.forEach(child=>this._dataGrid.rootNode().appendChild(child));}
async _deleteButtonClicked(node){if(!node){node=this._dataGrid&&this._dataGrid.selectedNode;if(!node){return;}}
await this._model.deleteCacheEntry(this._cache,(node.data.url()));node.remove();}
update(cache){this._cache=cache;this._resetDataGrid();this._updateData(true);}
_updateSummaryBar(){if(!this._summaryBarElement){this._summaryBarElement=this.element.createChild('div','cache-storage-summary-bar');}
this._summaryBarElement.removeChildren();const span=this._summaryBarElement.createChild('span');if(this._entryPathFilter){span.textContent=ls`Matching entries: ${this._returnCount}`;}else{span.textContent=ls`Total entries: ${this._returnCount}`;}}
_updateDataCallback(skipCount,entries,returnCount){const selected=this._dataGrid.selectedNode&&this._dataGrid.selectedNode.data.url();this._refreshButton.setEnabled(true);this._entriesForTest=entries;this._returnCount=returnCount;this._updateSummaryBar();const oldEntries=new Map();const rootNode=this._dataGrid.rootNode();for(const node of rootNode.children){oldEntries.set(node.data.url,node);}
rootNode.removeChildren();let selectedNode=null;for(let i=0;i<entries.length;++i){const entry=entries[i];let node=oldEntries.get(entry.requestURL);if(!node||node.data.responseTime!==entry.responseTime){node=new Resources.ServiceWorkerCacheView.DataGridNode(i,this._createRequest(entry),entry.responseType);node.selectable=true;}else{node.data.number=i;}
rootNode.appendChild(node);if(entry.requestURL===selected){selectedNode=node;}}
if(!selectedNode){this._showPreview(null);}else{selectedNode.revealAndSelect();}
this._updatedForTest();}
async _updateData(force){if(!force&&this._loadingPromise){return this._loadingPromise;}
this._refreshButton.setEnabled(false);if(this._loadingPromise){return this._loadingPromise;}
this._loadingPromise=new Promise(resolve=>{this._model.loadAllCacheData(this._cache,this._entryPathFilter,(entries,returnCount)=>{resolve([entries,returnCount]);});});const[entries,returnCount]=await this._loadingPromise;this._updateDataCallback(0,entries,returnCount);this._loadingPromise=null;}
_refreshButtonClicked(event){this._updateData(true);}
_cacheContentUpdated(event){const nameAndOrigin=event.data;if(this._cache.securityOrigin!==nameAndOrigin.origin||this._cache.cacheName!==nameAndOrigin.cacheName){return;}
this._refreshThrottler.schedule(()=>Promise.resolve(this._updateData(true)),true);}
async _previewCachedResponse(request){let preview=request[Resources.ServiceWorkerCacheView._previewSymbol];if(!preview){preview=new Resources.ServiceWorkerCacheView.RequestView(request);request[Resources.ServiceWorkerCacheView._previewSymbol]=preview;}
if(request===this._dataGrid.selectedNode.data){this._showPreview(preview);}}
_createRequest(entry){const request=new SDK.NetworkRequest('cache-storage-'+entry.requestURL,entry.requestURL,'','','',null);request.requestMethod=entry.requestMethod;request.setRequestHeaders(entry.requestHeaders);request.statusCode=entry.responseStatus;request.statusText=entry.responseStatusText;request.protocol=new Common.ParsedURL(entry.requestURL).scheme;request.responseHeaders=entry.responseHeaders;request.setRequestHeadersText('');request.endTime=entry.responseTime;let header=entry.responseHeaders.find(header=>header.name.toLowerCase()==='content-type');const contentType=header?header.value:'text/plain';request.mimeType=contentType;header=entry.responseHeaders.find(header=>header.name.toLowerCase()==='content-length');request.resourceSize=(header&&header.value)|0;let resourceType=Common.ResourceType.fromMimeType(contentType);if(!resourceType){resourceType=Common.ResourceType.fromURL(entry.requestURL)||Common.resourceTypes.Other;}
request.setResourceType(resourceType);request.setContentDataProvider(this._requestContent.bind(this,request));return request;}
async _requestContent(request){const isText=request.resourceType().isTextType();const contentData={error:null,content:null,encoded:!isText};const response=await this._cache.requestCachedResponse(request.url(),request.requestHeaders());if(response){contentData.content=isText?window.atob(response.body):response.body;}
return contentData;}
_updatedForTest(){}};Resources.ServiceWorkerCacheView._previewSymbol=Symbol('preview');Resources.ServiceWorkerCacheView.DataGridNode=class extends DataGrid.DataGridNode{constructor(number,request,responseType){super(request);this._number=number;const parsed=new Common.ParsedURL(request.url());if(parsed.isValid){this._name=request.url().trimURL(parsed.domain());}else{this._name=request.url();}
this._request=request;this._responseType=responseType;}
createCell(columnId){const cell=this.createTD(columnId);let value;if(columnId==='number'){value=String(this._number);}else if(columnId==='name'){value=this._name;}else if(columnId==='responseType'){if(this._responseType==='opaqueResponse'){value='opaque';}else if(this._responseType==='opaqueRedirect'){value='opaqueredirect';}else{value=this._responseType;}}else if(columnId==='contentType'){value=this._request.mimeType;}else if(columnId==='contentLength'){value=(this._request.resourceSize|0).toLocaleString('en-US');}else if(columnId==='responseTime'){value=new Date(this._request.endTime*1000).toLocaleString();}
DataGrid.DataGrid.setElementText(cell,value||'',true);cell.title=this._request.url();return cell;}};Resources.ServiceWorkerCacheView.RequestView=class extends UI.VBox{constructor(request){super();this._tabbedPane=new UI.TabbedPane();this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected,this._tabSelected,this);this._resourceViewTabSetting=Common.settings.createSetting('cacheStorageViewTab','preview');this._tabbedPane.appendTab('headers',Common.UIString('Headers'),new Network.RequestHeadersView(request));this._tabbedPane.appendTab('preview',Common.UIString('Preview'),new Network.RequestPreviewView(request));this._tabbedPane.show(this.element);}
wasShown(){super.wasShown();this._selectTab();}
_selectTab(tabId){if(!tabId){tabId=this._resourceViewTabSetting.get();}
if(!this._tabbedPane.selectTab(tabId)){this._tabbedPane.selectTab('headers');}}
_tabSelected(event){if(!event.data.isUserGesture){return;}
this._resourceViewTabSetting.set(event.data.tabId);}};;Resources.ServiceWorkersView=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('resources/serviceWorkersView.css');this._currentWorkersView=new UI.ReportView(Common.UIString('Service Workers'));this._currentWorkersView.setBodyScrollable(false);this.contentElement.classList.add('service-worker-list');this._currentWorkersView.show(this.contentElement);this._currentWorkersView.element.classList.add('service-workers-this-origin');this._toolbar=this._currentWorkersView.createToolbar();this._toolbar.makeWrappable(true);this._sections=new Map();this._registrationSymbol=Symbol('Resources.ServiceWorkersView');this._manager=null;this._securityOriginManager=null;this._filterThrottler=new Common.Throttler(300);this._otherWorkers=this.contentElement.createChild('div','service-workers-other-origin');this._otherSWFilter=this._otherWorkers.createChild('div','service-worker-filter');this._otherSWFilter.setAttribute('tabindex',0);this._otherSWFilter.setAttribute('role','switch');this._otherSWFilter.setAttribute('aria-checked',false);const filterLabel=this._otherSWFilter.createChild('label','service-worker-filter-label');filterLabel.textContent=Common.UIString('Service workers from other origins');self.onInvokeElement(this._otherSWFilter,event=>{if(event.target===this._otherSWFilter||event.target===filterLabel){this._toggleFilter();}});const toolbar=new UI.Toolbar('service-worker-filter-toolbar',this._otherSWFilter);this._filter=new UI.ToolbarInput(ls`Filter service worker`,'',1);this._filter.addEventListener(UI.ToolbarInput.Event.TextChanged,()=>this._filterChanged());toolbar.appendToolbarItem(this._filter);this._otherWorkersView=new UI.ReportView();this._otherWorkersView.setBodyScrollable(false);this._otherWorkersView.show(this._otherWorkers);this._otherWorkersView.element.classList.add('service-workers-for-other-origins');this._updateCollapsedStyle();this._toolbar.appendToolbarItem(MobileThrottling.throttlingManager().createOfflineToolbarCheckbox());const updateOnReloadSetting=Common.settings.createSetting('serviceWorkerUpdateOnReload',false);updateOnReloadSetting.setTitle(Common.UIString('Update on reload'));const forceUpdate=new UI.ToolbarSettingCheckbox(updateOnReloadSetting,ls`On page reload, force the service worker to update, and activate it`);this._toolbar.appendToolbarItem(forceUpdate);const bypassServiceWorkerSetting=Common.settings.createSetting('bypassServiceWorker',false);bypassServiceWorkerSetting.setTitle(Common.UIString('Bypass for network'));const fallbackToNetwork=new UI.ToolbarSettingCheckbox(bypassServiceWorkerSetting,ls`Bypass the service worker and load resources from the network`);this._toolbar.appendToolbarItem(fallbackToNetwork);this._eventListeners=new Map();SDK.targetManager.observeModels(SDK.ServiceWorkerManager,this);this._updateListVisibility();}
modelAdded(serviceWorkerManager){if(this._manager){return;}
this._manager=serviceWorkerManager;this._securityOriginManager=serviceWorkerManager.target().model(SDK.SecurityOriginManager);for(const registration of this._manager.registrations().values()){this._updateRegistration(registration);}
this._eventListeners.set(serviceWorkerManager,[this._manager.addEventListener(SDK.ServiceWorkerManager.Events.RegistrationUpdated,this._registrationUpdated,this),this._manager.addEventListener(SDK.ServiceWorkerManager.Events.RegistrationDeleted,this._registrationDeleted,this),this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.SecurityOriginAdded,this._updateSectionVisibility,this),this._securityOriginManager.addEventListener(SDK.SecurityOriginManager.Events.SecurityOriginRemoved,this._updateSectionVisibility,this),]);}
modelRemoved(serviceWorkerManager){if(!this._manager||this._manager!==serviceWorkerManager){return;}
Common.EventTarget.removeEventListeners(this._eventListeners.get(serviceWorkerManager));this._eventListeners.delete(serviceWorkerManager);this._manager=null;this._securityOriginManager=null;}
_getTimeStamp(registration){const versions=registration.versionsByMode();let timestamp=0;const active=versions.get(SDK.ServiceWorkerVersion.Modes.Active);const installing=versions.get(SDK.ServiceWorkerVersion.Modes.Installing);const waiting=versions.get(SDK.ServiceWorkerVersion.Modes.Waiting);const redundant=versions.get(SDK.ServiceWorkerVersion.Modes.Redundant);if(active){timestamp=active.scriptResponseTime;}else if(waiting){timestamp=waiting.scriptResponseTime;}else if(installing){timestamp=installing.scriptResponseTime;}else if(redundant){timestamp=redundant.scriptResponseTime;}
return timestamp;}
_updateSectionVisibility(){let hasOthers=false;let hasThis=false;const movedSections=[];for(const section of this._sections.values()){const expectedView=this._getReportViewForOrigin(section._registration.securityOrigin);hasOthers|=expectedView===this._otherWorkersView;hasThis|=expectedView===this._currentWorkersView;if(section._section.parentWidget()!==expectedView){movedSections.push(section);}}
for(const section of movedSections){const registration=section._registration;this._removeRegistrationFromList(registration);this._updateRegistration(registration,true);}
this._currentWorkersView.sortSections((a,b)=>{const aTimestamp=this._getTimeStamp(a[this._registrationSymbol]);const bTimestamp=this._getTimeStamp(b[this._registrationSymbol]);return bTimestamp-aTimestamp;});const scorer=new Sources.FilePathScoreFunction(this._filter.value());this._otherWorkersView.sortSections((a,b)=>{const cmp=scorer.score(b.title(),null)-scorer.score(a.title(),null);return cmp===0?a.title().localeCompare(b.title()):cmp;});for(const section of this._sections.values()){if(section._section.parentWidget()===this._currentWorkersView||this._isRegistrationVisible(section._registration)){section._section.showWidget();}else{section._section.hideWidget();}}
this.contentElement.classList.toggle('service-worker-has-current',!!hasThis);this._otherWorkers.classList.toggle('hidden',!hasOthers);this._updateListVisibility();}
_registrationUpdated(event){const registration=(event.data);this._updateRegistration(registration);this._gcRegistrations();}
_gcRegistrations(){let hasNonDeletedRegistrations=false;const securityOrigins=new Set(this._securityOriginManager.securityOrigins());for(const registration of this._manager.registrations().values()){if(!securityOrigins.has(registration.securityOrigin)&&!this._isRegistrationVisible(registration)){continue;}
if(!registration.canBeRemoved()){hasNonDeletedRegistrations=true;break;}}
if(!hasNonDeletedRegistrations){return;}
for(const registration of this._manager.registrations().values()){const visible=securityOrigins.has(registration.securityOrigin)||this._isRegistrationVisible(registration);if(!visible&&registration.canBeRemoved()){this._removeRegistrationFromList(registration);}}}
_getReportViewForOrigin(origin){if(this._securityOriginManager.securityOrigins().includes(origin)||this._securityOriginManager.unreachableMainSecurityOrigin()===origin){return this._currentWorkersView;}else{return this._otherWorkersView;}}
_updateRegistration(registration,skipUpdate){let section=this._sections.get(registration);if(!section){const title=registration.scopeURL;const uiSection=this._getReportViewForOrigin(registration.securityOrigin).appendSection(title);uiSection.setUiGroupTitle(ls`Service worker for ${title}`);uiSection[this._registrationSymbol]=registration;section=new Resources.ServiceWorkersView.Section((this._manager),uiSection,registration);this._sections.set(registration,section);}
if(skipUpdate){return;}
this._updateSectionVisibility();section._scheduleUpdate();}
_registrationDeleted(event){const registration=(event.data);this._removeRegistrationFromList(registration);}
_removeRegistrationFromList(registration){const section=this._sections.get(registration);if(section){section._section.detach();}
this._sections.delete(registration);this._updateSectionVisibility();}
_isRegistrationVisible(registration){const filterString=this._filter.value();if(!filterString||!registration.scopeURL){return true;}
const regex=String.filterRegex(filterString);return registration.scopeURL.match(regex);}
_filterChanged(){this._updateCollapsedStyle();this._filterThrottler.schedule(()=>Promise.resolve(this._updateSectionVisibility()));}
_updateCollapsedStyle(){const expanded=this._otherSWFilter.getAttribute('aria-checked')==='true';this._otherWorkers.classList.toggle('service-worker-filter-collapsed',!expanded);if(expanded){this._otherWorkersView.showWidget();}else{this._otherWorkersView.hideWidget();}
this._otherWorkersView.setHeaderVisible(false);}
_updateListVisibility(){this.contentElement.classList.toggle('service-worker-list-empty',this._sections.size===0);}
_toggleFilter(){const expanded=this._otherSWFilter.getAttribute('aria-checked')==='true';this._otherSWFilter.setAttribute('aria-checked',!expanded);this._filterChanged();}};Resources.ServiceWorkersView.Section=class{constructor(manager,section,registration){this._manager=manager;this._section=section;this._registration=registration;this._fingerprint=null;this._pushNotificationDataSetting=Common.settings.createLocalSetting('pushData',Common.UIString('Test push message from DevTools.'));this._syncTagNameSetting=Common.settings.createLocalSetting('syncTagName','test-tag-from-devtools');this._periodicSyncTagNameSetting=Common.settings.createLocalSetting('periodicSyncTagName','test-tag-from-devtools');this._toolbar=section.createToolbar();this._toolbar.renderAsLinks();this._updateButton=new UI.ToolbarButton(Common.UIString('Update'),undefined,Common.UIString('Update'));this._updateButton.addEventListener(UI.ToolbarButton.Events.Click,this._updateButtonClicked,this);this._toolbar.appendToolbarItem(this._updateButton);this._deleteButton=new UI.ToolbarButton(Common.UIString('Unregister service worker'),undefined,Common.UIString('Unregister'));this._deleteButton.addEventListener(UI.ToolbarButton.Events.Click,this._unregisterButtonClicked,this);this._toolbar.appendToolbarItem(this._deleteButton);this._sourceField=this._wrapWidget(this._section.appendField(Common.UIString('Source')));this._statusField=this._wrapWidget(this._section.appendField(Common.UIString('Status')));this._clientsField=this._wrapWidget(this._section.appendField(Common.UIString('Clients')));this._createSyncNotificationField(Common.UIString('Push'),this._pushNotificationDataSetting.get(),Common.UIString('Push data'),this._push.bind(this));this._createSyncNotificationField(Common.UIString('Sync'),this._syncTagNameSetting.get(),Common.UIString('Sync tag'),this._sync.bind(this));if(Root.Runtime.experiments.isEnabled('backgroundServicesPeriodicBackgroundSync')){this._createSyncNotificationField(ls`Periodic Sync`,this._periodicSyncTagNameSetting.get(),ls`Periodic Sync tag`,tag=>this._periodicSync(tag));}
this._linkifier=new Components.Linkifier();this._clientInfoCache=new Map();this._throttler=new Common.Throttler(500);}
_createSyncNotificationField(label,initialValue,placeholder,callback){const form=this._wrapWidget(this._section.appendField(label)).createChild('form','service-worker-editor-with-button');const editor=form.createChild('input','source-code service-worker-notification-editor');const button=UI.createTextButton(label);button.type='submit';form.appendChild(button);editor.value=initialValue;editor.placeholder=placeholder;UI.ARIAUtils.setAccessibleName(editor,label);form.addEventListener('submit',e=>{callback(editor.value||'');e.consume(true);});}
_scheduleUpdate(){if(Resources.ServiceWorkersView._noThrottle){this._update();return;}
this._throttler.schedule(this._update.bind(this));}
_targetForVersionId(versionId){const version=this._manager.findVersion(versionId);if(!version||!version.targetId){return null;}
return SDK.targetManager.targetById(version.targetId);}
_addVersion(versionsStack,icon,label){const installingEntry=versionsStack.createChild('div','service-worker-version');installingEntry.createChild('div',icon);installingEntry.createChild('span').textContent=label;return installingEntry;}
_updateClientsField(version){this._clientsField.removeChildren();this._section.setFieldVisible(Common.UIString('Clients'),version.controlledClients.length);for(const client of version.controlledClients){const clientLabelText=this._clientsField.createChild('div','service-worker-client');if(this._clientInfoCache.has(client)){this._updateClientInfo(clientLabelText,(this._clientInfoCache.get(client)));}
this._manager.target().targetAgent().getTargetInfo(client).then(this._onClientInfo.bind(this,clientLabelText));}}
_updateSourceField(version){this._sourceField.removeChildren();const fileName=Common.ParsedURL.extractName(version.scriptURL);const name=this._sourceField.createChild('div','report-field-value-filename');const link=Components.Linkifier.linkifyURL(version.scriptURL,{text:fileName});link.tabIndex=0;name.appendChild(link);if(this._registration.errors.length){const errorsLabel=UI.createIconLabel(String(this._registration.errors.length),'smallicon-error');errorsLabel.classList.add('link');errorsLabel.tabIndex=0;UI.ARIAUtils.setAccessibleName(errorsLabel,ls`${this._registration.errors.length} registration errors`);self.onInvokeElement(errorsLabel,()=>Common.console.show());name.appendChild(errorsLabel);}
this._sourceField.createChild('div','report-field-value-subtitle').textContent=Common.UIString('Received %s',new Date(version.scriptResponseTime*1000).toLocaleString());}
_update(){const fingerprint=this._registration.fingerprint();if(fingerprint===this._fingerprint){return Promise.resolve();}
this._fingerprint=fingerprint;this._toolbar.setEnabled(!this._registration.isDeleted);const versions=this._registration.versionsByMode();const scopeURL=this._registration.scopeURL;const title=this._registration.isDeleted?Common.UIString('%s - deleted',scopeURL):scopeURL;this._section.setTitle(title);const active=versions.get(SDK.ServiceWorkerVersion.Modes.Active);const waiting=versions.get(SDK.ServiceWorkerVersion.Modes.Waiting);const installing=versions.get(SDK.ServiceWorkerVersion.Modes.Installing);const redundant=versions.get(SDK.ServiceWorkerVersion.Modes.Redundant);this._statusField.removeChildren();const versionsStack=this._statusField.createChild('div','service-worker-version-stack');versionsStack.createChild('div','service-worker-version-stack-bar');if(active){this._updateSourceField(active);const localizedRunningStatus=SDK.ServiceWorkerVersion.RunningStatus[active.runningStatus];const activeEntry=this._addVersion(versionsStack,'service-worker-active-circle',ls`#${active.id} activated and is ${localizedRunningStatus}`);if(active.isRunning()||active.isStarting()){this._createLink(activeEntry,Common.UIString('stop'),this._stopButtonClicked.bind(this,active.id));if(!this._targetForVersionId(active.id)){this._createLink(activeEntry,Common.UIString('inspect'),this._inspectButtonClicked.bind(this,active.id));}}else if(active.isStartable()){this._createLink(activeEntry,Common.UIString('start'),this._startButtonClicked.bind(this));}
this._updateClientsField(active);}else if(redundant){this._updateSourceField(redundant);this._addVersion(versionsStack,'service-worker-redundant-circle',Common.UIString('#%s is redundant',redundant.id));this._updateClientsField(redundant);}
if(waiting){const waitingEntry=this._addVersion(versionsStack,'service-worker-waiting-circle',Common.UIString('#%s waiting to activate',waiting.id));this._createLink(waitingEntry,Common.UIString('skipWaiting'),this._skipButtonClicked.bind(this));waitingEntry.createChild('div','service-worker-subtitle').textContent=Common.UIString('Received %s',new Date(waiting.scriptResponseTime*1000).toLocaleString());if(!this._targetForVersionId(waiting.id)&&(waiting.isRunning()||waiting.isStarting())){this._createLink(waitingEntry,Common.UIString('inspect'),this._inspectButtonClicked.bind(this,waiting.id));}}
if(installing){const installingEntry=this._addVersion(versionsStack,'service-worker-installing-circle',Common.UIString('#%s trying to install',installing.id));installingEntry.createChild('div','service-worker-subtitle').textContent=Common.UIString('Received %s',new Date(installing.scriptResponseTime*1000).toLocaleString());if(!this._targetForVersionId(installing.id)&&(installing.isRunning()||installing.isStarting())){this._createLink(installingEntry,Common.UIString('inspect'),this._inspectButtonClicked.bind(this,installing.id));}}
return Promise.resolve();}
_createLink(parent,title,listener,className,useCapture){const button=parent.createChild('button',className);button.classList.add('link');button.textContent=title;button.tabIndex=0;button.addEventListener('click',listener,useCapture);return button;}
_unregisterButtonClicked(event){this._manager.deleteRegistration(this._registration.id);}
_updateButtonClicked(event){this._manager.updateRegistration(this._registration.id);}
_push(data){this._pushNotificationDataSetting.set(data);this._manager.deliverPushMessage(this._registration.id,data);}
_sync(tag){this._syncTagNameSetting.set(tag);this._manager.dispatchSyncEvent(this._registration.id,tag,true);}
_periodicSync(tag){this._periodicSyncTagNameSetting.set(tag);this._manager.dispatchPeriodicSyncEvent(this._registration.id,tag);}
_onClientInfo(element,targetInfo){if(!targetInfo){return;}
this._clientInfoCache.set(targetInfo.targetId,targetInfo);this._updateClientInfo(element,targetInfo);}
_updateClientInfo(element,targetInfo){if(targetInfo.type!=='page'&&targetInfo.type==='iframe'){const clientString=element.createChild('span','service-worker-client-string');clientString.createTextChild(ls`Worker: ${targetInfo.url}`);return;}
element.removeChildren();const clientString=element.createChild('span','service-worker-client-string');clientString.createTextChild(targetInfo.url);this._createLink(element,ls`focus`,this._activateTarget.bind(this,targetInfo.targetId),'service-worker-client-focus-link');}
_activateTarget(targetId){this._manager.target().targetAgent().activateTarget(targetId);}
_startButtonClicked(){this._manager.startWorker(this._registration.scopeURL);}
_skipButtonClicked(){this._manager.skipWaiting(this._registration.scopeURL);}
_stopButtonClicked(versionId){this._manager.stopWorker(versionId);}
_inspectButtonClicked(versionId){this._manager.inspectWorker(versionId);}
_wrapWidget(container){const shadowRoot=UI.createShadowRootWithCoreStyles(container);UI.appendStyle(shadowRoot,'resources/serviceWorkersView.css');const contentElement=createElement('div');shadowRoot.appendChild(contentElement);return contentElement;}};;Root.Runtime.cachedResources["resources/appManifestView.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n/*# sourceURL=resources/appManifestView.css */";Root.Runtime.cachedResources["resources/backgroundServiceView.css"]=".background-service-toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n.data-grid {\n    flex: auto;\n    border: none;\n}\n\n.background-service-preview {\n    position: absolute;\n    background-color: white;\n    justify-content: center;\n    align-items: center;\n    overflow: auto;\n    font-size: 13px;\n    color: #777;\n}\n\n.background-service-preview > div {\n    max-width: 450px;\n    margin: 10px;\n    text-align: center;\n}\n\n.background-service-preview > div > p {\n    flex: none;\n    white-space: pre-line;\n}\n\n.background-service-shortcut {\n    color: hsla(0, 0%, 50%, 1);\n}\n\n.background-service-metadata {\n    padding-left: 5px;\n    padding-top: 10px;\n}\n\n.background-service-metadata-entry {\n    padding-left: 10px;\n    padding-bottom: 5px;\n}\n\n.background-service-metadata-name {\n    color: rgb(33%, 33%, 33%);\n    display: inline-block;\n    margin-right: 0.25em;\n    font-weight: bold;\n}\n\n.background-service-metadata-value {\n    display: inline;\n    margin-right: 1em;\n    white-space: pre-wrap;\n    word-break: break-all;\n    user-select: text;\n}\n\n.background-service-empty-value {\n    color: #888;\n    font-style: italic;\n}\n\n.background-service-record-inline-button {\n    margin-bottom: 6px;\n}\n\n/*# sourceURL=resources/backgroundServiceView.css */";Root.Runtime.cachedResources["resources/clearStorageView.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.report-row {\n    display: flex;\n    align-items: center;\n}\n\n.clear-storage-button .report-row {\n    margin: 0 0 0 17px;\n    display: flex;\n}\n\n.link {\n    margin-left: 10px;\n    display: none;\n}\n\n.report-row:hover .link {\n    display: inline;\n}\n\n.usage-breakdown-row {\n    min-width: fit-content;\n}\n\n/*# sourceURL=resources/clearStorageView.css */";Root.Runtime.cachedResources["resources/indexedDBViews.css"]="/*\n * Copyright (C) 2012 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.indexed-db-data-view .data-view-toolbar {\n    position: relative;\n    background-color: #eee;\n    border-bottom: 1px solid #ccc;\n}\n\n.indexed-db-data-view .data-grid {\n    flex: auto;\n}\n\n.indexed-db-data-view .data-grid .data-container tr:nth-last-child(1) {\n    background-color: white;\n}\n\n.indexed-db-data-view .data-grid .data-container tr:nth-last-child(1) td {\n    border: 0;\n}\n\n.indexed-db-data-view .data-grid .data-container tr:nth-last-child(2) td {\n    border-bottom: 1px solid #aaa;\n}\n\n.indexed-db-data-view .data-grid:focus .data-container tr.selected {\n    background-color: #cdddf5;\n    color: inherit;\n}\n\n.indexed-db-data-view .section,\n.indexed-db-data-view .section > .header,\n.indexed-db-data-view .section > .header .title {\n    margin: 0;\n    min-height: inherit;\n    line-height: inherit;\n}\n\n.indexed-db-data-view .data-grid .data-container td .section .header .title {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.indexed-db-key-path {\n    color: rgb(196, 26, 22);\n    white-space: pre-wrap;\n    unicode-bidi: -webkit-isolate;\n}\n\n.source-code.indexed-db-key-path {\n    font-size: unset !important;\n}\n\n.resources-toolbar {\n    padding-right: 10px;\n}\n\n.object-store-summary-bar {\n    flex: 0 0 27px;\n    line-height: 27px;\n    padding-left: 5px;\n    background-color: #eee;\n    border-top: 1px solid #ccc;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n/*# sourceURL=resources/indexedDBViews.css */";Root.Runtime.cachedResources["resources/resourcesPanel.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.resources-toolbar {\n    border-top: 1px solid #ccc;\n    background-color: var(--toolbar-bg-color);\n}\n\n.top-resources-toolbar {\n    border-bottom: 1px solid #ccc;\n    background-color: var(--toolbar-bg-color);\n}\n\n.resources.panel .status {\n    float: right;\n    height: 16px;\n    margin-top: 1px;\n    margin-left: 4px;\n    line-height: 1em;\n}\n\n.storage-view {\n    display: flex;\n    overflow: hidden;\n}\n\n.storage-view {\n    overflow: hidden;\n}\n\n.storage-view .data-grid:not(.inline) {\n    border: none;\n    flex: auto;\n}\n\n.storage-view .storage-table-error {\n    color: rgb(66%, 33%, 33%);\n    font-size: 24px;\n    font-weight: bold;\n    padding: 10px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.storage-view.query {\n    padding: 2px 0;\n    overflow-y: overlay;\n    overflow-x: hidden;\n}\n\n.storage-view .filter-bar {\n    border-top: none;\n    border-bottom: var(--divider-border);\n}\n\n.database-query-prompt-container {\n    position: relative;\n    padding: 1px 22px 1px 24px;\n}\n\n.database-query-prompt {\n    min-height: 16px;\n    white-space: pre-wrap;\n}\n\n.prompt-icon {\n    position: absolute;\n    display: block;\n    left: 7px;\n    top: 9px;\n    margin-top: -7px;\n    -webkit-user-select: none;\n}\n\n.database-query-prompt-container .prompt-icon {\n    top: 10px;\n}\n\n.database-user-query {\n    position: relative;\n    border-bottom: 1px solid rgb(245, 245, 245);\n    padding: 1px 22px 1px 24px;\n    min-height: 16px;\n    flex-shrink: 0;\n}\n\n.database-query-text {\n    color: rgb(0, 128, 255);\n    -webkit-user-select: text;\n}\n\n.database-query-result {\n    position: relative;\n    padding: 1px 22px 1px 24px;\n    min-height: 16px;\n    margin-left: -24px;\n    padding-right: 0;\n}\n\n.database-query-result.error {\n    color: red;\n    -webkit-user-select: text;\n}\n\n.resources-sidebar {\n    padding: 0;\n}\n\n/*# sourceURL=resources/resourcesPanel.css */";Root.Runtime.cachedResources["resources/resourcesSidebar.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tree-outline {\n    padding-left: 0;\n    color: rgb(90, 90, 90);\n}\n\n.tree-outline > ol {\n    padding-bottom: 10px;\n}\n\n.tree-outline li {\n    min-height: 20px;\n}\n\nli.storage-group-list-item {\n    padding: 10px 8px 6px 8px;\n}\n\nli.storage-group-list-item:not(:first-child) {\n    border-top: 1px solid rgb(230, 230, 230);\n}\n\nli.storage-group-list-item::before {\n    display: none;\n}\n\n.navigator-tree-item {\n    margin: -3px -7px -3px -7px;\n}\n\n.navigator-file-tree-item {\n    background: linear-gradient(45deg, hsl(0, 0%, 50%), hsl(0, 0%, 70%));\n}\n\n.navigator-folder-tree-item {\n    background: linear-gradient(45deg, hsl(210, 82%, 65%), hsl(210, 82%, 80%));\n}\n\n.navigator-frame-tree-item {\n    background-color: #5a5a5a;\n}\n\n.navigator-script-tree-item {\n    background: linear-gradient(45deg, hsl(48, 70%, 50%), hsl(48, 70%, 70%));\n}\n\n.navigator-stylesheet-tree-item {\n    background: linear-gradient(45deg, hsl(256, 50%, 50%), hsl(256, 50%, 70%));\n}\n\n.navigator-image-tree-item,\n.navigator-font-tree-item {\n    background: linear-gradient(45deg, hsl(109, 33%, 50%), hsl(109, 33%, 70%));\n}\n\n.resource-tree-item {\n    background: rgba(90, 90, 90, .7);\n}\n\n/*# sourceURL=resources/resourcesSidebar.css */";Root.Runtime.cachedResources["resources/serviceWorkerCacheViews.css"]="/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.service-worker-cache-data-view .data-view-toolbar {\n    position: relative;\n    background-color: #eee;\n    border-bottom: 1px solid #ccc;\n    padding-right: 10px;\n}\n\n.service-worker-cache-data-view .data-grid {\n    flex: auto;\n}\n\n.service-worker-cache-data-view .data-grid .data-container tr:nth-last-child(1) td {\n    border: 0;\n}\n\n.service-worker-cache-data-view .data-grid .data-container tr:nth-last-child(2) td {\n    border-bottom: 1px solid #aaa;\n}\n\n.service-worker-cache-data-view .data-grid .data-container tr.selected {\n    background-color: rgb(212, 212, 212);\n    color: inherit;\n}\n\n.service-worker-cache-data-view .data-grid:focus .data-container tr.selected {\n    background-color: var(--selection-bg-color);\n    color: white;\n}\n\n.service-worker-cache-data-view .section,\n.service-worker-cache-data-view .section > .header,\n.service-worker-cache-data-view .section > .header .title {\n    margin: 0;\n    min-height: inherit;\n    line-height: inherit;\n}\n\n.service-worker-cache-data-view .data-grid .data-container td .section .header .title {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.cache-preview-panel-resizer {\n    background-color: #eee;\n    height: 4px;\n    border-bottom: 1px solid rgb(64%, 64%, 64%);\n}\n\n.cache-storage-summary-bar {\n    flex: 0 0 27px;\n    line-height: 27px;\n    padding-left: 5px;\n    background-color: #eee;\n    border-top: 1px solid #ccc;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n/*# sourceURL=resources/serviceWorkerCacheViews.css */";Root.Runtime.cachedResources["resources/serviceWorkersView.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.service-worker-version-stack {\n    position: relative;\n}\n\n.service-worker-version-stack-bar {\n    position: absolute;\n    top: 10px;\n    bottom: 20px;\n    left: 4px;\n    content: \"\";\n    border-left: 1px solid #888;\n    z-index: 0;\n}\n\n.service-worker-version:not(:last-child) {\n    margin-bottom: 7px;\n}\n\n.service-worker-active-circle,\n.service-worker-redundant-circle,\n.service-worker-waiting-circle,\n.service-worker-installing-circle {\n    position: relative;\n    display: inline-block;\n    width: 10px;\n    height: 10px;\n    z-index: 10;\n    margin-right: 5px;\n    border-radius: 50%;\n    border: 1px solid #555;\n}\n\n.service-worker-active-circle {\n    background-color: #50B04F;\n}\n.service-worker-waiting-circle {\n    background-color: #F38E24;\n\n}\n.service-worker-installing-circle {\n    background-color: white;\n}\n\n.service-worker-redundant-circle {\n    background-color: gray;\n}\n\n.service-worker-subtitle {\n    padding-left: 14px;\n    line-height: 14px;\n    color: #888;\n}\n\n.link {\n    margin-left: 7px;\n}\n\n.service-worker-editor-with-button {\n    align-items: baseline;\n    display: flex;\n}\n\n.service-worker-notification-editor {\n    border: solid 1px #d8d8d8;\n    display: flex;\n    flex: auto;\n    margin-right: 4px;\n    max-width: 400px;\n    min-width: 80px;\n}\n\n.report-field-value-filename,\n.service-worker-client-string {\n    max-width: 400px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.service-worker-client {\n    display: flex;\n}\n\n.service-worker-client-focus-link {\n    flex: none;\n    margin-right: 2px;\n    align-self: center;\n}\n\n.service-worker-notification-editor.source-code {\n    /** Simulate CodeMirror that is shown above */\n    padding: 4px;\n}\n\n.service-worker-list {\n    background-color: #f9f9f9;\n    overflow: auto;\n}\n\n.service-workers-this-origin {\n    flex-shrink: 0;\n    flex-grow: 0;\n}\n\n.service-worker-has-current .service-workers-other-origin {\n    margin-top: 16px;\n    border-top: 1px solid rgb(230, 230, 230)\n}\n\n.service-worker-list-empty .service-workers-other-origin {\n    display: none;\n}\n\n.service-workers-this-origin,\n.service-worker-filter,\n.service-workers-other-origin {\n    min-width: 400px;\n}\n\n.service-worker-filter {\n    padding: 16px 20px 12px 12px;\n    flex-grow: 0;\n    flex-shrink: 0;\n    background-color: white;\n    border-bottom: solid 1px rgb(230, 230, 230);\n}\n\n.service-worker-filter-label {\n    cursor: pointer;\n    margin-left: 4px;\n}\n\n.service-worker-filter[data-keyboard-focus=\"true\"]:focus {\n    background-color: var(--toolbar-bg-color);\n}\n\n.service-worker-filter-label::before {\n    -webkit-user-select: none;\n    -webkit-mask-image: url(Images/treeoutlineTriangles.svg);\n    -webkit-mask-size: 32px 24px;\n    content: '';\n    color: transparent;\n    background-color: rgb(110, 110, 110);\n    text-shadow: none;\n    height: 12px;\n    width: 10px;\n    display: inline-block;\n}\n\n.service-worker-filter[aria-checked=\"true\"] .service-worker-filter-label::before {\n    -webkit-mask-position: -16px 0;\n}\n\n.service-worker-filter-toolbar {\n    margin: 8px 10px 0 12px;\n    max-width: 530px;\n}\n\n.service-worker-filter-collapsed .service-worker-filter-toolbar {\n    display: none;\n}\n\n/*# sourceURL=resources/serviceWorkersView.css */";Root.Runtime.cachedResources["resources/cookieItemsView.css"]="/*\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.cookie-value {\n    padding: 2px 6px;\n    overflow: auto;\n    user-select: text;\n    min-height: 100%;\n}\n/*# sourceURL=resources/cookieItemsView.css */";Root.Runtime.cachedResources["search/searchResultsPane.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    padding: 0;\n    margin: 0;\n    overflow-y: auto;\n}\n\n.tree-outline {\n    padding: 0;\n}\n\n.tree-outline ol {\n    padding: 0;\n}\n\n.tree-outline li {\n    height: 16px;\n}\n\nli.search-result {\n    cursor: pointer;\n    font-size: 12px;\n    margin-top: 8px;\n    padding: 2px 0 2px 4px;\n    word-wrap: normal;\n    white-space: pre;\n}\n\nli.search-result:hover {\n    background-color: rgba(121, 121, 121, 0.1);\n}\n\nli.search-result .search-result-file-name {\n    color: #222;\n    flex: 1 1;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\nli.search-result .search-result-matches-count {\n    color: #888;\n    margin: 0 8px;\n}\n\nli.search-result.expanded .search-result-matches-count {\n    display: none;\n}\n\nli.show-more-matches {\n    color: #222;\n    cursor: pointer;\n    margin: 8px 0 0 -4px;\n}\n\nli.show-more-matches:hover {\n    text-decoration: underline;\n}\n\nli.search-match {\n    margin: 2px 0;\n    word-wrap: normal;\n    white-space: pre;\n}\n\nli.search-match::before {\n    display: none;\n}\n\nli.search-match .search-match-line-number {\n    color: rgb(128, 128, 128);\n    text-align: right;\n    vertical-align: top;\n    word-break: normal;\n    padding: 2px 4px 2px 6px;\n    margin-right: 5px;\n}\n\nli.search-match:hover {\n    background-color: var(--item-hover-color);\n}\n\nli.search-match .highlighted-match {\n    background-color: #F1EA00;\n}\n\n:host-context(.-theme-with-dark-background) li.search-match .highlighted-match {\n    background-color: hsl(133, 100%, 30%) !important;\n}\n\n.tree-outline .devtools-link {\n    text-decoration: none;\n    display: block;\n    flex: auto;\n}\n\nli.search-match .search-match-content {\n    color: #000;\n}\n\nol.children.expanded {\n    padding-bottom: 4px;\n}\n\n.search-match-link {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    margin-left: 9px;\n}\n\n.search-result-qualifier {\n    color: #AAA;\n}\n\n.search-result-dash {\n    color: #AAA;\n    margin: 0 4px;\n}\n\n/*# sourceURL=search/searchResultsPane.css */";Root.Runtime.cachedResources["search/searchView.css"]="/*\n * Copyright 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.search-drawer-header {\n    align-items: center;\n    flex-shrink: 0;\n    overflow: hidden;\n}\n\n.search-toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n.search-toolbar-summary {\n    background-color: #eee;\n    border-top: 1px solid #ccc;\n    padding-left: 5px;\n    flex: 0 0 19px;\n    display: flex;\n    padding-right: 5px;\n}\n\n.search-toolbar-summary .search-message {\n    padding-top: 2px;\n    padding-left: 1ex;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden;\n}\n\n.search-view .search-results {\n    overflow-y: auto;\n    display: flex;\n    flex: auto;\n}\n\n.search-view .search-results > div {\n    flex: auto;\n}\n\n/*# sourceURL=search/searchView.css */";Root.Runtime.cachedResources["security/lockIcon.css"]="/* Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.lock-icon,\n.security-property {\n    height: 16px;\n    width: 16px;\n\n    -webkit-mask-image: url(Images/securityIcons.svg);\n    -webkit-mask-size: 80px 32px;\n\n    background-color: #888;\n}\n\n.lock-icon-secure {\n    -webkit-mask-position: 0px 0px;\n    background-color: #0B8043;\n}\n\n.lock-icon-unknown,\n.lock-icon-neutral {\n    -webkit-mask-position: -16px 0px;\n    background-color: #000000; /* Black for clarity on lower DPI screens */\n}\n\n@media (-webkit-min-device-pixel-ratio: 1.1) {\n    .lock-icon-unknown,\n    .lock-icon-neutral {\n        background-color: #5A5A5A; /* Gray for hiDPI screens */\n    }\n}\n\n.lock-icon-insecure {\n    -webkit-mask-position: -32px 0px;\n    background-color: #5A5A5A;\n}\n\n.lock-icon-insecure-broken {\n    -webkit-mask-position: -32px 0px;\n    background-color: #C63626;\n}\n\n.security-property-secure {\n    -webkit-mask-position: 0px -16px;\n    background-color: #0B8043;\n}\n\n.security-property-neutral {\n    -webkit-mask-position: -16px -16px;\n    background-color: #C63626;\n}\n\n.security-property-insecure {\n    -webkit-mask-position: -32px -16px;\n    background-color: #C63626;\n}\n\n.security-property-insecure-broken {\n    -webkit-mask-position: -32px -16px;\n    background-color: #C63626;\n}\n\n.security-property-info {\n    -webkit-mask-position: -48px -16px;\n    background-color: rgba(0, 0, 0, 0.5);\n}\n\n.security-property-unknown {\n    -webkit-mask-position: -64px -16px;\n    background-color: rgba(0, 0, 0, 0.5);\n}\n\n.url-scheme-secure {\n    color: #0b8043;\n}\n\n.url-scheme-neutral,\n.url-scheme-insecure,\n.url-scheme-insecure-broken {\n    color: #cb3626;\n}\n\n.url-scheme-separator {\n    color: #8a8a8a;\n}\n\n/*# sourceURL=security/lockIcon.css */";Root.Runtime.cachedResources["security/mainView.css"]="/* Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.devtools-link {\n  display: inline-block;\n}\n\n.security-main-view {\n    -webkit-user-select: text;\n    overflow-x: hidden;\n    overflow-y: auto;\n    background-color: var(--toolbar-bg-color);\n}\n\n.security-main-view > div {\n    flex-shrink: 0;\n}\n\n.security-summary-section-title {\n    font-size: 15px;\n    margin: 12px 16px;\n}\n\n.lock-spectrum {\n    margin: 8px 16px;\n    display: flex;\n    align-items: flex-start;\n}\n\n.security-summary .lock-icon {\n    flex: none;\n    width: 16px;\n    height: 16px;\n    margin: 0 0;\n}\n\n/* Separate the middle icon from the other two. */\n.security-summary .lock-icon-neutral {\n    margin: 0 16px;\n}\n\n.security-summary:not(.security-summary-secure) .lock-icon-secure,\n.security-summary:not(.security-summary-neutral) .lock-icon-neutral,\n.security-summary:not(.security-summary-insecure) .lock-icon-insecure,\n.security-summary:not(.security-summary-insecure-broken) .lock-icon-insecure-broken {\n    background-color: rgba(90, 90, 90, 0.25);\n}\n\n.triangle-pointer-container {\n    margin: 8px 24px 0;\n    padding: 0 0;\n}\n\n.triangle-pointer-wrapper {\n    /* Defaults for dynamic properties. */\n    transform: translateX(0);\n    transition: transform 0.3s;\n}\n\n.triangle-pointer {\n    width: 12px;\n    height: 12px;\n    margin-bottom: -6px;\n    margin-left: -6px;\n    transform: rotate(-45deg);\n    border-style: solid;\n    border-width: 1px 1px 0 0;\n\n    background: #fff;\n    border-color: rgb(217, 217, 217);\n}\n\n.security-summary-secure .triangle-pointer-wrapper {\n    transform: translateX(0px);\n}\n\n.security-summary-neutral .triangle-pointer-wrapper {\n    transform: translateX(32px);\n}\n\n.security-summary-insecure .triangle-pointer-wrapper {\n    transform: translateX(64px);\n}\n\n.security-summary-insecure-broken .triangle-pointer-wrapper {\n    transform: translateX(64px);\n}\n\n.security-summary-text {\n    padding: 16px 24px;\n    border-style: solid;\n    border-width: 1px 0;\n    font-size: 15px;\n\n    background: #fff;\n    border-color: rgb(217, 217, 217);\n}\n\n.security-summary-secure .triangle-pointer,\n.security-summary-secure .security-summary-text,\n.security-explanation-title-secure {\n    color: #0b8043;\n}\n\n.security-summary-insecure-broken .triangle-pointer,\n.security-summary-insecure-broken .security-summary-text,\n.security-explanation-title-neutral,\n.security-explanation-title-insecure,\n.security-explanation-title-insecure-broken {\n    color: #cb3626;\n}\n\n.security-explanation-list {\n    padding-bottom: 16px;\n}\n\n.security-explanation-list:empty {\n    border-bottom: none;\n    padding: 0px;\n}\n\n.security-explanations-main {\n    margin-top: -5px;\n    background-color: #fff;\n    border-bottom: 1px solid rgb(230, 230, 230);\n}\n\n.security-explanations-extra {\n    background-color: transparent;\n}\n\n.security-explanation {\n    padding: 11px;\n    display: flex;\n    white-space: nowrap;\n    border: none;\n    color: rgb(90, 90, 90);\n}\n\n.security-explanation-text {\n    flex: auto;\n    white-space: normal;\n    max-width: 400px;\n}\n\n.security-certificate-button {\n    margin-top: 8px;\n    margin-left: 0;\n}\n\n.security-explanation .security-property {\n    flex: none;\n    width: 16px;\n    height: 16px;\n    margin-right: 16px;\n}\n\n.security-explanation-title {\n    color: rgb(48, 57, 66);\n    margin-top: 1px;\n    margin-bottom: 8px;\n}\n\n.security-mixed-content {\n    margin-top: 8px;\n}\n\n.security-explanation-recommendations {\n    padding-inline-start: 16px;\n}\n\n.security-explanation-recommendations > li {\n    margin-bottom: 4px;\n}\n\n/*# sourceURL=security/mainView.css */";Root.Runtime.cachedResources["security/originView.css"]="/* Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.title-section {\n    padding: 16px 0 24px 0;\n    border-bottom: 1px solid rgb(230, 230, 230);\n}\n\n.title-section-header {\n    padding-left: 16px;\n    padding-bottom: 10px;\n    font-size: 14px;\n}\n\n.security-origin-view {\n    overflow-x: hidden;\n    overflow-y: scroll;\n    display: block;\n    -webkit-user-select: text;\n}\n\n.security-origin-view .origin-view-section {\n    border-bottom: 1px solid rgb(230, 230, 230);\n    padding: 12px 6px 12px  24px;\n    font-size:12px;\n}\n\n.origin-view-notes {\n    margin-top: 2px;\n    color: #8c8c8c;\n}\n\n.origin-view-section-notes {\n    margin-top: 6px;\n    color: #8c8c8c;\n}\n\n.security-origin-view .origin-display {\n    font-size: 12px;\n    padding-left: 32px;\n    display: flex;\n    align-items: center;\n}\n\n.title-section > .view-network-button {\n    padding: 6px 0 0 16px\n}\n\n.security-origin-view .origin-display .security-property {\n    display: inline-block;\n    vertical-align: middle;\n    position: absolute;\n    left: 13px;\n}\n\n.security-origin-view .origin-view-section-title {\n    margin-top: 4px;\n    margin-bottom: 4px;\n    font-weight: bold;\n}\n\n.security-origin-view .details-table-row {\n    display: flex;\n    white-space: nowrap;\n    overflow: hidden;\n    line-height: 22px;\n}\n\n.security-origin-view .details-table-row > div {\n    align-items: flex-start;\n}\n\n.security-origin-view .details-table-row > div:first-child {\n    color: rgb(140, 140, 140);\n    width: 110px;\n    margin-right: 1em;\n    flex: none;\n    display: flex;\n    justify-content: flex-end;\n}\n.security-origin-view .details-table-row > div:nth-child(2) {\n    flex: auto;\n    white-space: normal;\n}\n\n.security-origin-view .sct-details .details-table .details-table-row:last-child div:last-child {\n    border-bottom: 1px solid rgb(230, 230, 230);\n    padding-bottom: 10px;\n}\n\n.security-origin-view .sct-details .details-table:last-child .details-table-row:last-child div:last-child {\n    border-bottom: none;\n    padding-bottom: 0;\n}\n\n.security-origin-view .details-toggle {\n  margin-left: 126px;\n}\n\n.security-origin-view .sct-toggle {\n    margin-left: 145px;\n    padding-top: 5px;\n}\n\n.security-origin-view .details-table .empty-san {\n    color: rgb(140, 140, 140);\n}\n\n.security-origin-view .details-table .san-entry {\n    display: block;\n}\n\n.security-origin-view .truncated-san .truncated-entry {\n    display: none;\n}\n\n.origin-button {\n    margin-top: 4px;\n    margin-left: 0;\n}\n\n.origin-view-section:last-child  {\n    border-bottom:none;\n}\n\n.devtools-link {\n    display: inline-flex;\n}\n\n/*# sourceURL=security/originView.css */";Root.Runtime.cachedResources["security/sidebar.css"]="/* Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tree-outline {\n    padding: 0;\n}\n\n.tree-outline li {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    padding: 2px 5px;\n    overflow: hidden;\n    margin: 2px 0;\n    border-top: 1px solid transparent;\n    white-space: nowrap;\n}\n\n.tree-outline li.selected:focus .lock-icon,\n.tree-outline .security-sidebar-tree-item.selected:focus .icon\n{\n    background-color: var(--selection-fg-color);\n}\n\n.tree-outline .security-main-view-sidebar-tree-item {\n    border-bottom: 1px solid rgb(230, 230, 230);\n    padding: 16px 0;\n}\n\n.tree-outline li.security-sidebar-origins {\n    padding: 1px 8px 1px 13px;\n    margin-top: 1em;\n    margin-bottom: 0.5em;\n    color: rgb(90, 90, 90);\n    border-top: none;\n    line-height: 16px;\n    text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0;\n}\n\n.tree-outline ol {\n    padding-left: 0;\n}\n\n.tree-outline li::before {\n    content: none;\n}\n\n.tree-outline .security-main-view-sidebar-tree-item,\n.tree-outline .security-sidebar-origins,\n.tree-outline li.security-sidebar-origins + .children > li {\n    padding-left: 16px;\n}\n\n.tree-outline .lock-icon,\n.tree-outline .security-property {\n    margin-right: 4px;\n    flex: none;\n}\n\n.security-sidebar-tree-item {\n    padding: 2px 0;\n}\n\n.security-sidebar-tree-item .title {\n    overflow: hidden;\n    margin-right: 5px;\n}\n\n.security-main-view-reload-message .tree-element-title {\n    color: rgba(0, 0, 0, 0.5);\n    padding-left: 8px;\n}\n\n/*# sourceURL=security/sidebar.css */";Root.Runtime.cachedResources["settings/frameworkBlackboxSettingsTab.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    overflow:hidden;\n}\n\n.header {\n    padding: 0 0 6px;\n    border-bottom: 1px solid #EEEEEE;\n    font-size: 18px;\n    font-weight: normal;\n    flex: none;\n}\n\n.intro {\n    margin-top: 10px;\n}\n\n.blackbox-content-scripts {\n    margin-top: 10px;\n    flex: none;\n}\n\n.add-button {\n    margin: 10px 2px;\n    align-self: flex-start;\n    flex: none;\n}\n\n.blackbox-list {\n    margin-top: 10px;\n    max-width: 500px;\n    flex: 0 1 auto;\n    min-height: 30px;\n}\n\n.blackbox-list-empty {\n    flex: auto;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.blackbox-list-item {\n    padding: 3px 5px 3px 5px;\n    height: 30px;\n    display: flex;\n    align-items: center;\n    position: relative;\n    flex: auto 1 1;\n}\n\n .blackbox-list-item .blackbox-pattern {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    -webkit-user-select: none;\n    color: #222;\n    overflow: hidden;\n}\n\n.blackbox-pattern {\n    flex: auto;\n    min-width: 100px;\n}\n\n.blackbox-list-item.blackbox-disabled .blackbox-pattern {\n    text-decoration: line-through;\n}\n\n.blackbox-behavior {\n    flex: 0 0 100px;\n    padding-left: 10px;\n}\n\n.blackbox-behavior > select {\n    margin-left: -10px;\n}\n\n.blackbox-separator {\n    flex: 0 0 1px;\n    background-color: rgb(231, 231, 231);\n    height: 30px;\n    margin: 0 4px;\n}\n\n.blackbox-separator-invisible {\n    visibility: hidden;\n    height: 100% !important;\n}\n\n.blackbox-edit-row {\n    flex: none;\n    display: flex;\n    flex-direction: row;\n    margin: 6px 5px;\n    align-items: center;\n}\n\n.blackbox-edit-row input,\n.blackbox-edit-row select {\n    width: 100%;\n    text-align: inherit;\n}\n\n/*# sourceURL=settings/frameworkBlackboxSettingsTab.css */";Root.Runtime.cachedResources["settings/settingsScreen.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.settings-window-main {\n    color: rgb(48, 57, 66);\n    background-color: white;\n    padding: 11px 0 0 0;\n}\n\n.settings-content {\n    overflow-y: auto;\n    overflow-x: hidden;\n    margin: 8px 8px 8px 0;\n    padding: 0 4px;\n    flex: auto;\n}\n\n.settings-footnote {\n    border-top: 1px solid #EEEEEE;\n    margin: 0;\n    padding: 12px;\n}\n\n.settings-container {\n    width: 100%;\n    -webkit-column-width: 288px;\n}\n\n.settings-block {\n    display: block;\n    padding-bottom: 9px;\n    width: 288px;\n    -webkit-column-break-inside: avoid;\n}\n\n.settings-tab.settings-container {\n    -webkit-column-width: 308px;\n}\n\n.settings-tab .settings-block {\n    margin-left: 20px;\n}\n\n.settings-line {\n    padding-bottom: 5px;\n    margin-bottom: 5px;\n}\n\n.settings-key-cell {\n    display: inline-block;\n    width: 153px;\n    white-space: nowrap;\n    text-align: right;\n    vertical-align: middle;\n    padding-right: 6px;\n}\n\n.settings-cell {\n    display: inline-block;\n    width: 135px;\n    vertical-align: middle;\n}\n\n.settings-section-title {\n    font-size: 120%;\n    text-align: left;\n}\n\n.settings-key {\n    padding: 0.1em 0.6em;\n    border: 1px solid #ccc;\n    font-size: 11px;\n    background-color: #f7f7f7;\n    color: #333;\n    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px #ffffff inset;\n    border-radius: 3px;\n    display: inline-block;\n    margin: 0 0.1em;\n    text-shadow: 0 1px 0 #fff;\n    line-height: 1.5;\n    white-space: nowrap;\n}\n\n.settings-combine-keys,\n.settings-key-delimiter {\n    font-size: 9px;\n}\n\n.settings-combine-keys {\n    margin: 0 0.3em;\n}\n\n.settings-key-delimiter {\n    margin: 0 0.5em;\n    display: none;\n}\n\nfieldset {\n    margin: 0;\n    padding: 0;\n    border: none;\n}\n\n.settings-tab label {\n    padding-right: 4px;\n    display: inline-flex;\n    flex-shrink: 0;\n}\n\n.settings-block p p {\n    padding-left: 30px;\n}\n\n.settings-experiments-warning-subsection-warning {\n    color: rgb(200, 0, 0);\n}\n\n.settings-experiments-warning-subsection-message {\n    color: inherit;\n}\n\n.settings-content input[type=checkbox] {\n    margin: 1px 7px 1px 2px;\n}\n\n.settings-window-title {\n    font-size: 18px;\n    color: rgb(48, 57, 66);\n    padding: 0 0 5px 13px;\n}\n\n.settings-container-wrapper {\n    position: absolute;\n    top: 31px;\n    left: 0px;\n    right: 0;\n    bottom: 0;\n    overflow: auto;\n    padding-top: 9px;\n}\n\n.settings-tab.settings-content {\n    margin: 0;\n    padding: 0;\n}\n\n.settings-tab-container {\n    flex: auto;\n    overflow: hidden;\n}\n\n.settings-tab-container header {\n    padding: 0 0 6px;\n    border-bottom: 1px solid #EEEEEE;\n}\n\n#experiments-tab-content .settings-container {\n    -webkit-column-width: 470px;\n}\n\n#experiments-tab-content .settings-block {\n    width: 470px;\n    margin-left: 0;\n}\n\n.settings-tab-container header > h1 {\n    font-size: 18px;\n    font-weight: normal;\n    margin: 0;\n    padding-bottom: 3px;\n}\n\n.settings-tab .settings-section-title {\n    margin-left: -20px;\n    color: #222;\n}\n\n.settings-tab .settings-block fieldset:disabled label:hover {\n    color: inherit;\n}\n\n.settings-tab .settings-block label:hover {\n    color: #222;\n}\n\n.settings-tab p {\n    margin: 12px 0;\n}\n\n.settings-tab select {\n    margin-left: 10px;\n}\n\n.settings-experiment-hidden {\n    display: none;\n}\n\n.settings-experiment-hidden [is=dt-checkbox] {\n    background-color: #ddd;\n}\n\n.settings-developer-mode .settings-experiment-hidden {\n    display: block;\n}\n\n/*# sourceURL=settings/settingsScreen.css */";Root.Runtime.cachedResources["source_frame/fontView.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.font-view {\n    font-size: 60px;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n    text-align: center;\n    padding: 15px;\n}\n\n/*# sourceURL=source_frame/fontView.css */";Root.Runtime.cachedResources["source_frame/imageView.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.image-view {\n    overflow: auto;\n}\n\n.image-view > .image {\n    padding: 20px 20px 10px 20px;\n    text-align: center;\n}\n\n.image-view img.resource-image-view {\n    max-width: 100%;\n    max-height: 1000px;\n    background-image: url(Images/checker.png);\n    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.5);\n    -webkit-user-select: text;\n    -webkit-user-drag: auto;\n}\n\n/*# sourceURL=source_frame/imageView.css */";Root.Runtime.cachedResources["source_frame/jsonView.css"]=".json-view {\n    padding: 2px 6px;\n    overflow: auto;\n}\n\n/*# sourceURL=source_frame/jsonView.css */";Root.Runtime.cachedResources["source_frame/messagesPopover.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.text-editor-messages-description-container {\n    display: inline-block;\n}\n\n.text-editor-row-message:first-child {\n    border-top-width: 0;\n}\n\n.text-editor-row-message {\n    line-height: 1.2;\n    white-space: nowrap;\n    display: flex;\n    align-items: center;\n    justify-content: flex-start;\n    margin-top: 2px;\n}\n\n.text-editor-row-message-repeat-count {\n    margin-right: 0.5em;\n}\n\n/*# sourceURL=source_frame/messagesPopover.css */";Root.Runtime.cachedResources["source_frame/xmlTree.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.tree-outline ol {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n    padding-inline-start: 16px;\n}\n\nol.tree-outline {\n    padding-inline-start: 0;\n}\n\n.tree-outline li {\n    min-height: 12px;\n}\n\n.tree-outline li.shadow-xml-view-close-tag {\n    margin-left: -16px;\n}\n\n.shadow-xml-view-tag {\n    color: rgb(136, 18, 128);\n}\n\n.shadow-xml-view-comment {\n    color: rgb(35, 110, 37);\n}\n\n.shadow-xml-view-processing-instruction {\n    color: rgb(35, 110, 37);\n}\n\n.shadow-xml-view-attribute-name {\n    color: rgb(153, 69, 0);\n}\n\n.shadow-xml-view-attribute-value {\n    color: rgb(26, 26, 166);\n}\n\n.shadow-xml-view-text {\n    color: rgb(0, 0, 0);\n    white-space: pre;\n}\n\n.shadow-xml-view-cdata {\n    color: rgb(0, 0, 0);\n}\n\n/*# sourceURL=source_frame/xmlTree.css */";Root.Runtime.cachedResources["source_frame/xmlView.css"]="/*\n * Copyright (c) 2014 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.shadow-xml-view {\n    -webkit-user-select: text;\n    overflow: auto;\n    padding: 2px 4px;\n}\n\n/*# sourceURL=source_frame/xmlView.css */";Root.Runtime.cachedResources["source_frame/resourceSourceFrame.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n.searchable-view {\n  flex: 1;\n}\n\n.toolbar {\n  background-color: #eee;\n  border-top: 1px solid #ccc;\n}\n\n/*# sourceURL=source_frame/resourceSourceFrame.css */";Sources.AddSourceMapURLDialog=class extends UI.HBox{constructor(callback){super(true);this.registerRequiredCSS('sources/dialog.css');this.contentElement.createChild('label').textContent=Common.UIString('Source map URL: ');this._input=UI.createInput('add-source-map','text');this._input.addEventListener('keydown',this._onKeyDown.bind(this),false);this.contentElement.appendChild(this._input);const addButton=UI.createTextButton(ls`Add`,this._apply.bind(this));this.contentElement.appendChild(addButton);this._dialog=new UI.Dialog();this._dialog.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);this._dialog.setDefaultFocusedElement(this._input);this._done=function(value){this._dialog.hide();callback(value);};}
show(){super.show(this._dialog.contentElement);this._dialog.show();}
_apply(){this._done(this._input.value);}
_onKeyDown(event){if(isEnterKey(event)){event.consume(true);this._apply();}}};;Sources.BreakpointEditDialog=class extends UI.Widget{constructor(editorLineNumber,oldCondition,preferLogpoint,onFinish){super(true);this.registerRequiredCSS('sources/breakpointEditDialog.css');this._onFinish=onFinish;this._finished=false;this._editor=null;this.element.tabIndex=-1;const logpointPrefix=Sources.BreakpointEditDialog.LogpointPrefix;const logpointSuffix=Sources.BreakpointEditDialog._LogpointSuffix;this._isLogpoint=oldCondition.startsWith(logpointPrefix)&&oldCondition.endsWith(logpointSuffix);if(this._isLogpoint){oldCondition=oldCondition.substring(logpointPrefix.length,oldCondition.length-logpointSuffix.length);}
this._isLogpoint=this._isLogpoint||preferLogpoint;this.element.classList.add('sources-edit-breakpoint-dialog');const toolbar=new UI.Toolbar('source-frame-breakpoint-toolbar',this.contentElement);toolbar.appendText(`Line ${editorLineNumber + 1}:`);this._typeSelector=new UI.ToolbarComboBox(this._onTypeChanged.bind(this),ls`Breakpoint type`);this._typeSelector.createOption(ls`Breakpoint`,Sources.BreakpointEditDialog.BreakpointType.Breakpoint);const conditionalOption=this._typeSelector.createOption(ls`Conditional breakpoint`,Sources.BreakpointEditDialog.BreakpointType.Conditional);const logpointOption=this._typeSelector.createOption(ls`Logpoint`,Sources.BreakpointEditDialog.BreakpointType.Logpoint);this._typeSelector.select(this._isLogpoint?logpointOption:conditionalOption);toolbar.appendToolbarItem(this._typeSelector);self.runtime.extension(UI.TextEditorFactory).instance().then(factory=>{const editorOptions={lineNumbers:false,lineWrapping:true,mimeType:'javascript',autoHeight:true};this._editor=factory.createEditor(editorOptions);this._updatePlaceholder();this._editor.widget().element.classList.add('condition-editor');this._editor.configureAutocomplete(ObjectUI.JavaScriptAutocompleteConfig.createConfigForEditor(this._editor));if(oldCondition){this._editor.setText(oldCondition);}
this._editor.widget().markAsExternallyManaged();this._editor.widget().show(this.contentElement);this._editor.setSelection(this._editor.fullRange());this._editor.widget().focus();this._editor.widget().element.addEventListener('keydown',this._onKeyDown.bind(this),true);this.contentElement.addEventListener('blur',event=>{if(event.relatedTarget&&!event.relatedTarget.isSelfOrDescendant(this.element)){this._finishEditing(true);}},true);});}
static _conditionForLogpoint(condition){return`${Sources.BreakpointEditDialog.LogpointPrefix}${condition}${Sources.BreakpointEditDialog._LogpointSuffix}`;}
_onTypeChanged(){const value=this._typeSelector.selectedOption().value;this._isLogpoint=value===Sources.BreakpointEditDialog.BreakpointType.Logpoint;this._updatePlaceholder();if(value===Sources.BreakpointEditDialog.BreakpointType.Breakpoint){this._editor.setText('');this._finishEditing(true);}}
_updatePlaceholder(){const selectedValue=this._typeSelector.selectedOption().value;if(selectedValue===Sources.BreakpointEditDialog.BreakpointType.Conditional){this._editor.setPlaceholder(ls`Expression to check before pausing, e.g. x > 5`);this._typeSelector.element.title=ls`Pause only when the condition is true`;}else if(selectedValue===Sources.BreakpointEditDialog.BreakpointType.Logpoint){this._editor.setPlaceholder(ls`Log message, e.g. 'x is', x`);this._typeSelector.element.title=ls`Log a message to Console, do not break`;}}
_finishEditing(committed){if(this._finished){return;}
this._finished=true;this._editor.widget().detach();let condition=this._editor.text();if(this._isLogpoint){condition=Sources.BreakpointEditDialog._conditionForLogpoint(condition);}
this._onFinish({committed,condition});}
async _onKeyDown(event){if(isEnterKey(event)&&!event.shiftKey){event.consume(true);const expression=this._editor.text();if(event.ctrlKey||await ObjectUI.JavaScriptAutocomplete.isExpressionComplete(expression)){this._finishEditing(true);}else{this._editor.newlineAndIndent();}}
if(isEscKey(event)){this._finishEditing(false);}}};Sources.BreakpointEditDialog.LogpointPrefix='/** DEVTOOLS_LOGPOINT */ console.log(';Sources.BreakpointEditDialog._LogpointSuffix=')';Sources.BreakpointEditDialog.BreakpointType={Breakpoint:'Breakpoint',Conditional:'Conditional',Logpoint:'Logpoint',};;Sources.CallStackSidebarPane=class extends UI.SimpleView{constructor(){super(Common.UIString('Call Stack'),true);this.registerRequiredCSS('sources/callStackSidebarPane.css');this._blackboxedMessageElement=this._createBlackboxedMessageElement();this.contentElement.appendChild(this._blackboxedMessageElement);this._notPausedMessageElement=this.contentElement.createChild('div','gray-info-message');this._notPausedMessageElement.textContent=Common.UIString('Not paused');this._items=new UI.ListModel();this._list=new UI.ListControl(this._items,this,UI.ListMode.NonViewport);this.contentElement.appendChild(this._list.element);this._list.element.addEventListener('contextmenu',this._onContextMenu.bind(this),false);this._list.element.addEventListener('click',this._onClick.bind(this),false);this._showMoreMessageElement=this._createShowMoreMessageElement();this._showMoreMessageElement.classList.add('hidden');this.contentElement.appendChild(this._showMoreMessageElement);this._showBlackboxed=false;this._locationPool=new Bindings.LiveLocationPool();this._updateThrottler=new Common.Throttler(100);this._maxAsyncStackChainDepth=Sources.CallStackSidebarPane._defaultMaxAsyncStackChainDepth;this._update();this._updateItemThrottler=new Common.Throttler(100);this._scheduledForUpdateItems=new Set();}
flavorChanged(object){this._showBlackboxed=false;this._maxAsyncStackChainDepth=Sources.CallStackSidebarPane._defaultMaxAsyncStackChainDepth;this._update();}
_update(){this._updateThrottler.schedule(()=>this._doUpdate());}
async _doUpdate(){this._locationPool.disposeAll();const details=UI.context.flavor(SDK.DebuggerPausedDetails);if(!details){this._notPausedMessageElement.classList.remove('hidden');this._blackboxedMessageElement.classList.add('hidden');this._showMoreMessageElement.classList.add('hidden');this._items.replaceAll([]);UI.context.setFlavor(SDK.DebuggerModel.CallFrame,null);return;}
let debuggerModel=details.debuggerModel;this._notPausedMessageElement.classList.add('hidden');const items=details.callFrames.map(frame=>{const item=Sources.CallStackSidebarPane.Item.createForDebuggerCallFrame(frame,this._locationPool,this._refreshItem.bind(this));item[Sources.CallStackSidebarPane._debuggerCallFrameSymbol]=frame;return item;});let asyncStackTrace=details.asyncStackTrace;if(!asyncStackTrace&&details.asyncStackTraceId){if(details.asyncStackTraceId.debuggerId){debuggerModel=SDK.DebuggerModel.modelForDebuggerId(details.asyncStackTraceId.debuggerId);}
asyncStackTrace=debuggerModel?await debuggerModel.fetchAsyncStackTrace(details.asyncStackTraceId):null;}
let peviousStackTrace=details.callFrames;let maxAsyncStackChainDepth=this._maxAsyncStackChainDepth;while(asyncStackTrace&&maxAsyncStackChainDepth>0){let title='';const isAwait=asyncStackTrace.description==='async function';if(isAwait&&peviousStackTrace.length&&asyncStackTrace.callFrames.length){const lastPreviousFrame=peviousStackTrace[peviousStackTrace.length-1];const lastPreviousFrameName=UI.beautifyFunctionName(lastPreviousFrame.functionName);title=UI.asyncStackTraceLabel('await in '+lastPreviousFrameName);}else{title=UI.asyncStackTraceLabel(asyncStackTrace.description);}
items.push(...Sources.CallStackSidebarPane.Item.createItemsForAsyncStack(title,debuggerModel,asyncStackTrace.callFrames,this._locationPool,this._refreshItem.bind(this)));--maxAsyncStackChainDepth;peviousStackTrace=asyncStackTrace.callFrames;if(asyncStackTrace.parent){asyncStackTrace=asyncStackTrace.parent;}else if(asyncStackTrace.parentId){if(asyncStackTrace.parentId.debuggerId){debuggerModel=SDK.DebuggerModel.modelForDebuggerId(asyncStackTrace.parentId.debuggerId);}
asyncStackTrace=debuggerModel?await debuggerModel.fetchAsyncStackTrace(asyncStackTrace.parentId):null;}else{asyncStackTrace=null;}}
this._showMoreMessageElement.classList.toggle('hidden',!asyncStackTrace);this._items.replaceAll(items);if(this._maxAsyncStackChainDepth===Sources.CallStackSidebarPane._defaultMaxAsyncStackChainDepth){this._list.selectNextItem(true,false);}
this._updatedForTest();}
_updatedForTest(){}
_refreshItem(item){this._scheduledForUpdateItems.add(item);this._updateItemThrottler.schedule(innerUpdate.bind(this));function innerUpdate(){const items=Array.from(this._scheduledForUpdateItems);this._scheduledForUpdateItems.clear();this._muteActivateItem=true;if(!this._showBlackboxed&&this._items.every(item=>item.isBlackboxed)){this._showBlackboxed=true;for(let i=0;i<this._items.length;++i){this._list.refreshItemByIndex(i);}
this._blackboxedMessageElement.classList.toggle('hidden',true);}else{const itemsSet=new Set(items);let hasBlackboxed=false;for(let i=0;i<this._items.length;++i){const item=this._items.at(i);if(itemsSet.has(item)){this._list.refreshItemByIndex(i);}
hasBlackboxed=hasBlackboxed||item.isBlackboxed;}
this._blackboxedMessageElement.classList.toggle('hidden',this._showBlackboxed||!hasBlackboxed);}
delete this._muteActivateItem;return Promise.resolve();}}
createElementForItem(item){const element=createElementWithClass('div','call-frame-item');const title=element.createChild('div','call-frame-item-title');title.createChild('div','call-frame-title-text').textContent=item.title;if(item.isAsyncHeader){element.classList.add('async-header');}else{const linkElement=element.createChild('div','call-frame-location');linkElement.textContent=item.linkText.trimMiddle(30);linkElement.title=item.linkText;element.classList.toggle('blackboxed-call-frame',item.isBlackboxed);}
element.classList.toggle('hidden',!this._showBlackboxed&&item.isBlackboxed);element.appendChild(UI.Icon.create('smallicon-thick-right-arrow','selected-call-frame-icon'));return element;}
heightForItem(item){console.assert(false);return 0;}
isItemSelectable(item){return!!item[Sources.CallStackSidebarPane._debuggerCallFrameSymbol];}
selectedItemChanged(from,to,fromElement,toElement){if(fromElement){fromElement.classList.remove('selected');}
if(toElement){toElement.classList.add('selected');}
if(to){this._activateItem(to);}}
_createBlackboxedMessageElement(){const element=createElementWithClass('div','blackboxed-message');element.createChild('span');const showAllLink=element.createChild('span','link');showAllLink.textContent=Common.UIString('Show blackboxed frames');showAllLink.addEventListener('click',()=>{this._showBlackboxed=true;for(const item of this._items){this._refreshItem(item);}
this._blackboxedMessageElement.classList.toggle('hidden',true);});return element;}
_createShowMoreMessageElement(){const element=createElementWithClass('div','show-more-message');element.createChild('span');const showAllLink=element.createChild('span','link');showAllLink.textContent=Common.UIString('Show more');showAllLink.addEventListener('click',()=>{this._maxAsyncStackChainDepth+=Sources.CallStackSidebarPane._defaultMaxAsyncStackChainDepth;this._update();},false);return element;}
_onContextMenu(event){const item=this._list.itemForNode((event.target));if(!item){return;}
const contextMenu=new UI.ContextMenu(event);const debuggerCallFrame=item[Sources.CallStackSidebarPane._debuggerCallFrameSymbol];if(debuggerCallFrame){contextMenu.defaultSection().appendItem(Common.UIString('Restart frame'),()=>debuggerCallFrame.restart());}
contextMenu.defaultSection().appendItem(Common.UIString('Copy stack trace'),this._copyStackTrace.bind(this));if(item.uiLocation){this.appendBlackboxURLContextMenuItems(contextMenu,item.uiLocation.uiSourceCode);}
contextMenu.show();}
_onClick(event){const item=this._list.itemForNode((event.target));if(item){this._activateItem(item);}}
_activateItem(item){const uiLocation=item.uiLocation;if(this._muteActivateItem||!uiLocation){return;}
const debuggerCallFrame=item[Sources.CallStackSidebarPane._debuggerCallFrameSymbol];if(debuggerCallFrame&&UI.context.flavor(SDK.DebuggerModel.CallFrame)!==debuggerCallFrame){debuggerCallFrame.debuggerModel.setSelectedCallFrame(debuggerCallFrame);UI.context.setFlavor(SDK.DebuggerModel.CallFrame,debuggerCallFrame);}else{Common.Revealer.reveal(uiLocation);}}
appendBlackboxURLContextMenuItems(contextMenu,uiSourceCode){const binding=Persistence.persistence.binding(uiSourceCode);if(binding){uiSourceCode=binding.network;}
if(uiSourceCode.project().type()===Workspace.projectTypes.FileSystem){return;}
const canBlackbox=Bindings.blackboxManager.canBlackboxUISourceCode(uiSourceCode);const isBlackboxed=Bindings.blackboxManager.isBlackboxedUISourceCode(uiSourceCode);const isContentScript=uiSourceCode.project().type()===Workspace.projectTypes.ContentScripts;const manager=Bindings.blackboxManager;if(canBlackbox){if(isBlackboxed){contextMenu.defaultSection().appendItem(Common.UIString('Stop blackboxing'),manager.unblackboxUISourceCode.bind(manager,uiSourceCode));}else{contextMenu.defaultSection().appendItem(Common.UIString('Blackbox script'),manager.blackboxUISourceCode.bind(manager,uiSourceCode));}}
if(isContentScript){if(isBlackboxed){contextMenu.defaultSection().appendItem(Common.UIString('Stop blackboxing all content scripts'),manager.blackboxContentScripts.bind(manager));}else{contextMenu.defaultSection().appendItem(Common.UIString('Blackbox all content scripts'),manager.unblackboxContentScripts.bind(manager));}}}
_selectNextCallFrameOnStack(){return this._list.selectNextItem(false,false);}
_selectPreviousCallFrameOnStack(){return this._list.selectPreviousItem(false,false);}
_copyStackTrace(){const text=[];for(const item of this._items){let itemText=item.title;if(item.uiLocation){itemText+=' ('+item.uiLocation.linkText(true)+')';}
text.push(itemText);}
Host.InspectorFrontendHost.copyText(text.join('\n'));}};Sources.CallStackSidebarPane._debuggerCallFrameSymbol=Symbol('debuggerCallFrame');Sources.CallStackSidebarPane._elementSymbol=Symbol('element');Sources.CallStackSidebarPane._defaultMaxAsyncStackChainDepth=32;Sources.CallStackSidebarPane.ActionDelegate=class{handleAction(context,actionId){const callStackSidebarPane=self.runtime.sharedInstance(Sources.CallStackSidebarPane);switch(actionId){case'debugger.next-call-frame':callStackSidebarPane._selectNextCallFrameOnStack();return true;case'debugger.previous-call-frame':callStackSidebarPane._selectPreviousCallFrameOnStack();return true;}
return false;}};Sources.CallStackSidebarPane.Item=class{static createForDebuggerCallFrame(frame,locationPool,updateDelegate){const item=new Sources.CallStackSidebarPane.Item(UI.beautifyFunctionName(frame.functionName),updateDelegate);Bindings.debuggerWorkspaceBinding.createCallFrameLiveLocation(frame.location(),item._update.bind(item),locationPool);return item;}
static createItemsForAsyncStack(title,debuggerModel,frames,locationPool,updateDelegate){const whiteboxedItemsSymbol=Symbol('whiteboxedItems');const asyncHeaderItem=new Sources.CallStackSidebarPane.Item(title,updateDelegate);asyncHeaderItem[whiteboxedItemsSymbol]=new Set();asyncHeaderItem.isAsyncHeader=true;const asyncFrameItems=frames.map(frame=>{const item=new Sources.CallStackSidebarPane.Item(UI.beautifyFunctionName(frame.functionName),update);const rawLocation=debuggerModel?debuggerModel.createRawLocationByScriptId(frame.scriptId,frame.lineNumber,frame.columnNumber):null;if(!rawLocation){item.linkText=(frame.url||'<unknown>')+':'+(frame.lineNumber+1);item.updateDelegate(item);}else{Bindings.debuggerWorkspaceBinding.createCallFrameLiveLocation(rawLocation,item._update.bind(item),locationPool);}
return item;});updateDelegate(asyncHeaderItem);return[asyncHeaderItem,...asyncFrameItems];function update(item){updateDelegate(item);let shouldUpdate=false;const items=asyncHeaderItem[whiteboxedItemsSymbol];if(item.isBlackboxed){items.delete(item);shouldUpdate=items.size===0;}else{shouldUpdate=items.size===0;items.add(item);}
asyncHeaderItem.isBlackboxed=asyncHeaderItem[whiteboxedItemsSymbol].size===0;if(shouldUpdate){updateDelegate(asyncHeaderItem);}}}
constructor(title,updateDelegate){this.isBlackboxed=false;this.title=title;this.linkText='';this.uiLocation=null;this.isAsyncHeader=false;this.updateDelegate=updateDelegate;}
_update(liveLocation){const uiLocation=liveLocation.uiLocation();this.isBlackboxed=uiLocation?Bindings.blackboxManager.isBlackboxedUISourceCode(uiLocation.uiSourceCode):false;this.linkText=uiLocation?uiLocation.linkText():'';this.uiLocation=uiLocation;this.updateDelegate(this);}};;Sources.DebuggerPausedMessage=class{constructor(){this._element=createElementWithClass('div','paused-message flex-none');const root=UI.createShadowRootWithCoreStyles(this._element,'sources/debuggerPausedMessage.css');this._contentElement=root.createChild('div');UI.ARIAUtils.markAsPoliteLiveRegion(this._element);}
element(){return this._element;}
static _descriptionWithoutStack(description){const firstCallFrame=/^\s+at\s/m.exec(description);return firstCallFrame?description.substring(0,firstCallFrame.index-1):description.substring(0,description.lastIndexOf('\n'));}
static async _createDOMBreakpointHitMessage(details){const messageWrapper=createElement('span');const domDebuggerModel=details.debuggerModel.target().model(SDK.DOMDebuggerModel);if(!details.auxData||!domDebuggerModel){return messageWrapper;}
const data=domDebuggerModel.resolveDOMBreakpointData((details.auxData));if(!data){return messageWrapper;}
const mainElement=messageWrapper.createChild('div','status-main');mainElement.appendChild(UI.Icon.create('smallicon-info','status-icon'));const breakpointType=Sources.DebuggerPausedMessage.BreakpointTypeNouns.get(data.type);mainElement.appendChild(createTextNode(ls`Paused on ${breakpointType}`));const subElement=messageWrapper.createChild('div','status-sub monospace');const linkifiedNode=await Common.Linkifier.linkify(data.node);subElement.appendChild(linkifiedNode);if(data.targetNode){const targetNodeLink=await Common.Linkifier.linkify(data.targetNode);let messageElement;if(data.insertion){if(data.targetNode===data.node){messageElement=UI.formatLocalized('Child %s added',[targetNodeLink]);}else{messageElement=UI.formatLocalized('Descendant %s added',[targetNodeLink]);}}else{messageElement=UI.formatLocalized('Descendant %s removed',[targetNodeLink]);}
subElement.appendChild(createElement('br'));subElement.appendChild(messageElement);}
return messageWrapper;}
async render(details,debuggerWorkspaceBinding,breakpointManager){this._contentElement.removeChildren();this._contentElement.hidden=!details;if(!details){return;}
const status=this._contentElement.createChild('div','paused-status');const errorLike=details.reason===SDK.DebuggerModel.BreakReason.Exception||details.reason===SDK.DebuggerModel.BreakReason.PromiseRejection||details.reason===SDK.DebuggerModel.BreakReason.Assert||details.reason===SDK.DebuggerModel.BreakReason.OOM;let messageWrapper;if(details.reason===SDK.DebuggerModel.BreakReason.DOM){messageWrapper=await Sources.DebuggerPausedMessage._createDOMBreakpointHitMessage(details);}else if(details.reason===SDK.DebuggerModel.BreakReason.EventListener){let eventNameForUI='';if(details.auxData){eventNameForUI=SDK.domDebuggerManager.resolveEventListenerBreakpointTitle((details.auxData));}
messageWrapper=buildWrapper(Common.UIString('Paused on event listener'),eventNameForUI);}else if(details.reason===SDK.DebuggerModel.BreakReason.XHR){messageWrapper=buildWrapper(Common.UIString('Paused on XHR or fetch'),details.auxData['url']||'');}else if(details.reason===SDK.DebuggerModel.BreakReason.Exception){const description=details.auxData['description']||details.auxData['value']||'';const descriptionWithoutStack=Sources.DebuggerPausedMessage._descriptionWithoutStack(description);messageWrapper=buildWrapper(Common.UIString('Paused on exception'),descriptionWithoutStack,description);}else if(details.reason===SDK.DebuggerModel.BreakReason.PromiseRejection){const description=details.auxData['description']||details.auxData['value']||'';const descriptionWithoutStack=Sources.DebuggerPausedMessage._descriptionWithoutStack(description);messageWrapper=buildWrapper(Common.UIString('Paused on promise rejection'),descriptionWithoutStack,description);}else if(details.reason===SDK.DebuggerModel.BreakReason.Assert){messageWrapper=buildWrapper(Common.UIString('Paused on assertion'));}else if(details.reason===SDK.DebuggerModel.BreakReason.DebugCommand){messageWrapper=buildWrapper(Common.UIString('Paused on debugged function'));}else if(details.reason===SDK.DebuggerModel.BreakReason.OOM){messageWrapper=buildWrapper(Common.UIString('Paused before potential out-of-memory crash'));}else if(details.callFrames.length){const uiLocation=debuggerWorkspaceBinding.rawLocationToUILocation(details.callFrames[0].location());const breakpoint=uiLocation?breakpointManager.findBreakpoint(uiLocation):null;const defaultText=breakpoint?Common.UIString('Paused on breakpoint'):Common.UIString('Debugger paused');messageWrapper=buildWrapper(defaultText);}else{console.warn('ScriptsPanel paused, but callFrames.length is zero.');}
status.classList.toggle('error-reason',errorLike);if(messageWrapper){status.appendChild(messageWrapper);}
function buildWrapper(mainText,subText,title){const messageWrapper=createElement('span');const mainElement=messageWrapper.createChild('div','status-main');const icon=UI.Icon.create(errorLike?'smallicon-error':'smallicon-info','status-icon');mainElement.appendChild(icon);mainElement.appendChild(createTextNode(mainText));if(subText){const subElement=messageWrapper.createChild('div','status-sub monospace');subElement.textContent=subText;subElement.title=title||subText;}
return messageWrapper;}}};Sources.DebuggerPausedMessage.BreakpointTypeNouns=new Map([[SDK.DOMDebuggerModel.DOMBreakpoint.Type.SubtreeModified,Common.UIString('subtree modifications')],[SDK.DOMDebuggerModel.DOMBreakpoint.Type.AttributeModified,Common.UIString('attribute modifications')],[SDK.DOMDebuggerModel.DOMBreakpoint.Type.NodeRemoved,Common.UIString('node removal')],]);;Sources.HistoryEntry=function(){};Sources.HistoryEntry.prototype={valid(){},reveal(){}};Sources.SimpleHistoryManager=class{constructor(historyDepth){this._entries=[];this._activeEntryIndex=-1;this._coalescingReadonly=0;this._historyDepth=historyDepth;}
readOnlyLock(){++this._coalescingReadonly;}
releaseReadOnlyLock(){--this._coalescingReadonly;}
readOnly(){return!!this._coalescingReadonly;}
filterOut(filterOutCallback){if(this.readOnly()){return;}
const filteredEntries=[];let removedBeforeActiveEntry=0;for(let i=0;i<this._entries.length;++i){if(!filterOutCallback(this._entries[i])){filteredEntries.push(this._entries[i]);}else if(i<=this._activeEntryIndex){++removedBeforeActiveEntry;}}
this._entries=filteredEntries;this._activeEntryIndex=Math.max(0,this._activeEntryIndex-removedBeforeActiveEntry);}
empty(){return!this._entries.length;}
active(){return this.empty()?null:this._entries[this._activeEntryIndex];}
push(entry){if(this.readOnly()){return;}
if(!this.empty()){this._entries.splice(this._activeEntryIndex+1);}
this._entries.push(entry);if(this._entries.length>this._historyDepth){this._entries.shift();}
this._activeEntryIndex=this._entries.length-1;}
rollback(){if(this.empty()){return false;}
let revealIndex=this._activeEntryIndex-1;while(revealIndex>=0&&!this._entries[revealIndex].valid()){--revealIndex;}
if(revealIndex<0){return false;}
this.readOnlyLock();this._entries[revealIndex].reveal();this.releaseReadOnlyLock();this._activeEntryIndex=revealIndex;return true;}
rollover(){let revealIndex=this._activeEntryIndex+1;while(revealIndex<this._entries.length&&!this._entries[revealIndex].valid()){++revealIndex;}
if(revealIndex>=this._entries.length){return false;}
this.readOnlyLock();this._entries[revealIndex].reveal();this.releaseReadOnlyLock();this._activeEntryIndex=revealIndex;return true;}};;Sources.EditingLocationHistoryManager=class{constructor(sourcesView,currentSourceFrameCallback){this._sourcesView=sourcesView;this._historyManager=new Sources.SimpleHistoryManager(Sources.EditingLocationHistoryManager.HistoryDepth);this._currentSourceFrameCallback=currentSourceFrameCallback;}
trackSourceFrameCursorJumps(sourceFrame){sourceFrame.textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.JumpHappened,this._onJumpHappened.bind(this));}
_onJumpHappened(event){if(event.data.from){this._updateActiveState(event.data.from);}
if(event.data.to){this._pushActiveState(event.data.to);}}
rollback(){this._historyManager.rollback();}
rollover(){this._historyManager.rollover();}
updateCurrentState(){const sourceFrame=this._currentSourceFrameCallback();if(!sourceFrame){return;}
this._updateActiveState(sourceFrame.textEditor.selection());}
pushNewState(){const sourceFrame=this._currentSourceFrameCallback();if(!sourceFrame){return;}
this._pushActiveState(sourceFrame.textEditor.selection());}
_updateActiveState(selection){const active=this._historyManager.active();if(!active){return;}
const sourceFrame=this._currentSourceFrameCallback();if(!sourceFrame){return;}
const entry=new Sources.EditingLocationHistoryEntry(this._sourcesView,this,sourceFrame,selection);active.merge(entry);}
_pushActiveState(selection){const sourceFrame=this._currentSourceFrameCallback();if(!sourceFrame){return;}
const entry=new Sources.EditingLocationHistoryEntry(this._sourcesView,this,sourceFrame,selection);this._historyManager.push(entry);}
removeHistoryForSourceCode(uiSourceCode){function filterOut(entry){return entry._projectId===uiSourceCode.project().id()&&entry._url===uiSourceCode.url();}
this._historyManager.filterOut(filterOut);}};Sources.EditingLocationHistoryManager.HistoryDepth=20;Sources.EditingLocationHistoryEntry=class{constructor(sourcesView,editingLocationManager,sourceFrame,selection){this._sourcesView=sourcesView;this._editingLocationManager=editingLocationManager;const uiSourceCode=sourceFrame.uiSourceCode();this._projectId=uiSourceCode.project().id();this._url=uiSourceCode.url();const position=this._positionFromSelection(selection);this._positionHandle=sourceFrame.textEditor.textEditorPositionHandle(position.lineNumber,position.columnNumber);}
merge(entry){if(this._projectId!==entry._projectId||this._url!==entry._url){return;}
this._positionHandle=entry._positionHandle;}
_positionFromSelection(selection){return{lineNumber:selection.endLine,columnNumber:selection.endColumn};}
valid(){const position=this._positionHandle.resolve();const uiSourceCode=Workspace.workspace.uiSourceCode(this._projectId,this._url);return!!(position&&uiSourceCode);}
reveal(){const position=this._positionHandle.resolve();const uiSourceCode=Workspace.workspace.uiSourceCode(this._projectId,this._url);if(!position||!uiSourceCode){return;}
this._editingLocationManager.updateCurrentState();this._sourcesView.showSourceLocation(uiSourceCode,position.lineNumber,position.columnNumber);}};;Sources.FilePathScoreFunction=class{constructor(query){this._query=query;this._queryUpperCase=query.toUpperCase();this._score=new Int32Array(20*100);this._sequence=new Int32Array(20*100);this._dataUpperCase='';this._fileNameIndex=0;}
score(data,matchIndexes){if(!data||!this._query){return 0;}
const n=this._query.length;const m=data.length;if(!this._score||this._score.length<n*m){this._score=new Int32Array(n*m*2);this._sequence=new Int32Array(n*m*2);}
const score=this._score;const sequence=(this._sequence);this._dataUpperCase=data.toUpperCase();this._fileNameIndex=data.lastIndexOf('/');for(let i=0;i<n;++i){for(let j=0;j<m;++j){const skipCharScore=j===0?0:score[i*m+j-1];const prevCharScore=i===0||j===0?0:score[(i-1)*m+j-1];const consecutiveMatch=i===0||j===0?0:sequence[(i-1)*m+j-1];const pickCharScore=this._match(this._query,data,i,j,consecutiveMatch);if(pickCharScore&&prevCharScore+pickCharScore>=skipCharScore){sequence[i*m+j]=consecutiveMatch+1;score[i*m+j]=(prevCharScore+pickCharScore);}else{sequence[i*m+j]=0;score[i*m+j]=skipCharScore;}}}
if(matchIndexes){this._restoreMatchIndexes(sequence,n,m,matchIndexes);}
const maxDataLength=256;return score[n*m-1]*maxDataLength+(maxDataLength-data.length);}
_testWordStart(data,j){if(j===0){return true;}
const prevChar=data.charAt(j-1);return prevChar==='_'||prevChar==='-'||prevChar==='/'||(data[j-1]!==this._dataUpperCase[j-1]&&data[j]===this._dataUpperCase[j]);}
_restoreMatchIndexes(sequence,n,m,out){let i=n-1,j=m-1;while(i>=0&&j>=0){switch(sequence[i*m+j]){case 0:--j;break;default:out.push(j);--i;--j;break;}}
out.reverse();}
_singleCharScore(query,data,i,j){const isWordStart=this._testWordStart(data,j);const isFileName=j>this._fileNameIndex;const isPathTokenStart=j===0||data[j-1]==='/';const isCapsMatch=query[i]===data[j]&&query[i]===this._queryUpperCase[i];let score=10;if(isPathTokenStart){score+=4;}
if(isWordStart){score+=2;}
if(isCapsMatch){score+=6;}
if(isFileName){score+=4;}
if(j===this._fileNameIndex+1&&i===0){score+=5;}
if(isFileName&&isWordStart){score+=3;}
return score;}
_sequenceCharScore(query,data,i,j,sequenceLength){const isFileName=j>this._fileNameIndex;const isPathTokenStart=j===0||data[j-1]==='/';let score=10;if(isFileName){score+=4;}
if(isPathTokenStart){score+=5;}
score+=sequenceLength*4;return score;}
_match(query,data,i,j,consecutiveMatch){if(this._queryUpperCase[i]!==this._dataUpperCase[j]){return 0;}
if(!consecutiveMatch){return this._singleCharScore(query,data,i,j);}else{return this._sequenceCharScore(query,data,i,j-consecutiveMatch,consecutiveMatch);}}};;Sources.FilteredUISourceCodeListProvider=class extends QuickOpen.FilteredListWidget.Provider{constructor(){super();this._queryLineNumberAndColumnNumber='';this._defaultScores=null;this._scorer=new Sources.FilePathScoreFunction('');}
_projectRemoved(event){const project=(event.data);this._populate(project);this.refresh();}
_populate(skipProject){this._uiSourceCodes=[];const projects=Workspace.workspace.projects().filter(this.filterProject.bind(this));for(let i=0;i<projects.length;++i){if(skipProject&&projects[i]===skipProject){continue;}
const uiSourceCodes=projects[i].uiSourceCodes().filter(this._filterUISourceCode.bind(this));this._uiSourceCodes=this._uiSourceCodes.concat(uiSourceCodes);}}
_filterUISourceCode(uiSourceCode){const binding=Persistence.persistence.binding(uiSourceCode);return!binding||binding.fileSystem===uiSourceCode;}
uiSourceCodeSelected(uiSourceCode,lineNumber,columnNumber){}
filterProject(project){return true;}
itemCount(){return this._uiSourceCodes.length;}
itemKeyAt(itemIndex){return this._uiSourceCodes[itemIndex].url();}
setDefaultScores(defaultScores){this._defaultScores=defaultScores;}
itemScoreAt(itemIndex,query){const uiSourceCode=this._uiSourceCodes[itemIndex];const score=this._defaultScores?(this._defaultScores.get(uiSourceCode)||0):0;if(!query||query.length<2){return score;}
if(this._query!==query){this._query=query;this._scorer=new Sources.FilePathScoreFunction(query);}
let multiplier=10;if(uiSourceCode.project().type()===Workspace.projectTypes.FileSystem&&!Persistence.persistence.binding(uiSourceCode)){multiplier=5;}
const fullDisplayName=uiSourceCode.fullDisplayName();return score+multiplier*this._scorer.score(fullDisplayName,null);}
renderItem(itemIndex,query,titleElement,subtitleElement){query=this.rewriteQuery(query);const uiSourceCode=this._uiSourceCodes[itemIndex];const fullDisplayName=uiSourceCode.fullDisplayName();const indexes=[];new Sources.FilePathScoreFunction(query).score(fullDisplayName,indexes);const fileNameIndex=fullDisplayName.lastIndexOf('/');titleElement.classList.add('monospace');subtitleElement.classList.add('monospace');titleElement.textContent=uiSourceCode.displayName()+(this._queryLineNumberAndColumnNumber||'');this._renderSubtitleElement(subtitleElement,fullDisplayName);subtitleElement.title=fullDisplayName;const ranges=[];for(let i=0;i<indexes.length;++i){ranges.push({offset:indexes[i],length:1});}
if(indexes[0]>fileNameIndex){for(let i=0;i<ranges.length;++i){ranges[i].offset-=fileNameIndex+1;}
UI.highlightRangesWithStyleClass(titleElement,ranges,'highlight');}else{UI.highlightRangesWithStyleClass(subtitleElement,ranges,'highlight');}}
_renderSubtitleElement(element,text){element.removeChildren();let splitPosition=text.lastIndexOf('/');if(text.length>55){splitPosition=text.length-55;}
const first=element.createChild('div','first-part');first.textContent=text.substring(0,splitPosition);const second=element.createChild('div','second-part');second.textContent=text.substring(splitPosition);element.title=text;}
selectItem(itemIndex,promptValue){const parsedExpression=promptValue.trim().match(/^([^:]*)(:\d+)?(:\d+)?$/);if(!parsedExpression){return;}
let lineNumber;let columnNumber;if(parsedExpression[2]){lineNumber=parseInt(parsedExpression[2].substr(1),10)-1;}
if(parsedExpression[3]){columnNumber=parseInt(parsedExpression[3].substr(1),10)-1;}
const uiSourceCode=itemIndex!==null?this._uiSourceCodes[itemIndex]:null;this.uiSourceCodeSelected(uiSourceCode,lineNumber,columnNumber);}
rewriteQuery(query){query=query?query.trim():'';if(!query||query===':'){return'';}
const lineNumberMatch=query.match(/^([^:]+)((?::[^:]*){0,2})$/);this._queryLineNumberAndColumnNumber=lineNumberMatch?lineNumberMatch[2]:'';return lineNumberMatch?lineNumberMatch[1]:query;}
_uiSourceCodeAdded(event){const uiSourceCode=(event.data);if(!this._filterUISourceCode(uiSourceCode)||!this.filterProject(uiSourceCode.project())){return;}
this._uiSourceCodes.push(uiSourceCode);this.refresh();}
notFoundText(){return Common.UIString('No files found');}
attach(){Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this._uiSourceCodeAdded,this);Workspace.workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved,this._projectRemoved,this);this._populate();}
detach(){Workspace.workspace.removeEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this._uiSourceCodeAdded,this);Workspace.workspace.removeEventListener(Workspace.Workspace.Events.ProjectRemoved,this._projectRemoved,this);this._queryLineNumberAndColumnNumber='';this._defaultScores=null;}};;Sources.GoToLineQuickOpen=class extends QuickOpen.FilteredListWidget.Provider{selectItem(itemIndex,promptValue){const uiSourceCode=this._currentUISourceCode();if(!uiSourceCode){return;}
const position=this._parsePosition(promptValue);if(!position){return;}
Common.Revealer.reveal(uiSourceCode.uiLocation(position.line-1,position.column-1));}
notFoundText(query){if(!this._currentUISourceCode()){return Common.UIString('No file selected.');}
const position=this._parsePosition(query);if(!position){const sourceFrame=this._currentSourceFrame();if(!sourceFrame){return ls`Type a number to go to that line.`;}
const currentLineNumber=sourceFrame.textEditor.currentLineNumber()+1;const linesCount=sourceFrame.textEditor.linesCount;return ls`Current line: ${currentLineNumber}. Type a line number between 1 and ${linesCount} to navigate to.`;}
if(position.column&&position.column>1){return ls`Go to line ${position.line} and column ${position.column}.`;}
return ls`Go to line ${position.line}.`;}
_parsePosition(query){const parts=query.match(/([0-9]+)(\:[0-9]*)?/);if(!parts||!parts[0]||parts[0].length!==query.length){return null;}
const line=parseInt(parts[1],10);let column;if(parts[2]){column=parseInt(parts[2].substring(1),10);}
return{line:Math.max(line|0,1),column:Math.max(column|0,1)};}
_currentUISourceCode(){const sourcesView=UI.context.flavor(Sources.SourcesView);if(!sourcesView){return null;}
return sourcesView.currentUISourceCode();}
_currentSourceFrame(){const sourcesView=UI.context.flavor(Sources.SourcesView);if(!sourcesView){return null;}
return sourcesView.currentSourceFrame();}};;Sources.SourceMapNamesResolver={};Sources.SourceMapNamesResolver._cachedMapSymbol=Symbol('cache');Sources.SourceMapNamesResolver._cachedIdentifiersSymbol=Symbol('cachedIdentifiers');Sources.SourceMapNamesResolver.Identifier=class{constructor(name,lineNumber,columnNumber){this.name=name;this.lineNumber=lineNumber;this.columnNumber=columnNumber;}};Sources.SourceMapNamesResolver._scopeIdentifiers=function(scope){const startLocation=scope.startLocation();const endLocation=scope.endLocation();if(scope.type()===Protocol.Debugger.ScopeType.Global||!startLocation||!endLocation||!startLocation.script()||!startLocation.script().sourceMapURL||(startLocation.script()!==endLocation.script())){return Promise.resolve(([]));}
const script=startLocation.script();return script.requestContent().then(onContent);function onContent(deferredContent){if(!deferredContent.content){return Promise.resolve(([]));}
const content=deferredContent.content;const text=new TextUtils.Text(content);const scopeRange=new TextUtils.TextRange(startLocation.lineNumber,startLocation.columnNumber,endLocation.lineNumber,endLocation.columnNumber);const scopeText=text.extract(scopeRange);const scopeStart=text.toSourceRange(scopeRange).offset;const prefix='function fui';return Formatter.formatterWorkerPool().javaScriptIdentifiers(prefix+scopeText).then(onIdentifiers.bind(null,text,scopeStart,prefix));}
function onIdentifiers(text,scopeStart,prefix,identifiers){const result=[];const cursor=new TextUtils.TextCursor(text.lineEndings());for(let i=0;i<identifiers.length;++i){const id=identifiers[i];if(id.offset<prefix.length){continue;}
const start=scopeStart+id.offset-prefix.length;cursor.resetTo(start);result.push(new Sources.SourceMapNamesResolver.Identifier(id.name,cursor.lineNumber(),cursor.columnNumber()));}
return result;}};Sources.SourceMapNamesResolver._resolveScope=function(scope){let identifiersPromise=scope[Sources.SourceMapNamesResolver._cachedIdentifiersSymbol];if(identifiersPromise){return identifiersPromise;}
const script=scope.callFrame().script;const sourceMap=Bindings.debuggerWorkspaceBinding.sourceMapForScript(script);if(!sourceMap){return Promise.resolve(new Map());}
const textCache=new Map();identifiersPromise=Sources.SourceMapNamesResolver._scopeIdentifiers(scope).then(onIdentifiers);scope[Sources.SourceMapNamesResolver._cachedIdentifiersSymbol]=identifiersPromise;return identifiersPromise;function onIdentifiers(identifiers){const namesMapping=new Map();for(let i=0;i<identifiers.length;++i){const id=identifiers[i];const entry=sourceMap.findEntry(id.lineNumber,id.columnNumber);if(entry&&entry.name){namesMapping.set(id.name,entry.name);}}
const promises=[];for(let i=0;i<identifiers.length;++i){const id=identifiers[i];if(namesMapping.has(id.name)){continue;}
const promise=resolveSourceName(id).then(onSourceNameResolved.bind(null,namesMapping,id));promises.push(promise);}
return Promise.all(promises).then(()=>Sources.SourceMapNamesResolver._scopeResolvedForTest()).then(()=>namesMapping);}
function onSourceNameResolved(namesMapping,id,sourceName){if(!sourceName){return;}
namesMapping.set(id.name,sourceName);}
function resolveSourceName(id){const startEntry=sourceMap.findEntry(id.lineNumber,id.columnNumber);const endEntry=sourceMap.findEntry(id.lineNumber,id.columnNumber+id.name.length);if(!startEntry||!endEntry||!startEntry.sourceURL||startEntry.sourceURL!==endEntry.sourceURL||!startEntry.sourceLineNumber||!startEntry.sourceColumnNumber||!endEntry.sourceLineNumber||!endEntry.sourceColumnNumber){return Promise.resolve((null));}
const sourceTextRange=new TextUtils.TextRange(startEntry.sourceLineNumber,startEntry.sourceColumnNumber,endEntry.sourceLineNumber,endEntry.sourceColumnNumber);const uiSourceCode=Bindings.debuggerWorkspaceBinding.uiSourceCodeForSourceMapSourceURL(script.debuggerModel,startEntry.sourceURL,script.isContentScript());if(!uiSourceCode){return Promise.resolve((null));}
return uiSourceCode.requestContent().then(deferredContent=>{const content=deferredContent.content;return onSourceContent(sourceTextRange,content);});}
function onSourceContent(sourceTextRange,content){if(!content){return null;}
let text=textCache.get(content);if(!text){text=new TextUtils.Text(content);textCache.set(content,text);}
const originalIdentifier=text.extract(sourceTextRange).trim();return/[a-zA-Z0-9_$]+/.test(originalIdentifier)?originalIdentifier:null;}};Sources.SourceMapNamesResolver._scopeResolvedForTest=function(){};Sources.SourceMapNamesResolver._allVariablesInCallFrame=function(callFrame){const cached=callFrame[Sources.SourceMapNamesResolver._cachedMapSymbol];if(cached){return Promise.resolve(cached);}
const promises=[];const scopeChain=callFrame.scopeChain();for(let i=0;i<scopeChain.length;++i){promises.push(Sources.SourceMapNamesResolver._resolveScope(scopeChain[i]));}
return Promise.all(promises).then(mergeVariables);function mergeVariables(nameMappings){const reverseMapping=new Map();for(const map of nameMappings){for(const compiledName of map.keys()){const originalName=map.get(compiledName);if(!reverseMapping.has(originalName)){reverseMapping.set(originalName,compiledName);}}}
callFrame[Sources.SourceMapNamesResolver._cachedMapSymbol]=reverseMapping;return reverseMapping;}};Sources.SourceMapNamesResolver.resolveExpression=function(callFrame,originalText,uiSourceCode,lineNumber,startColumnNumber,endColumnNumber){if(!uiSourceCode.contentType().isFromSourceMap()){return Promise.resolve('');}
return Sources.SourceMapNamesResolver._allVariablesInCallFrame(callFrame).then(reverseMapping=>findCompiledName(callFrame.debuggerModel,reverseMapping));function findCompiledName(debuggerModel,reverseMapping){if(reverseMapping.has(originalText)){return Promise.resolve(reverseMapping.get(originalText)||'');}
return Sources.SourceMapNamesResolver._resolveExpression(debuggerModel,uiSourceCode,lineNumber,startColumnNumber,endColumnNumber);}};Sources.SourceMapNamesResolver._resolveExpression=function(debuggerModel,uiSourceCode,lineNumber,startColumnNumber,endColumnNumber){const rawLocations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(uiSourceCode,lineNumber,startColumnNumber);const rawLocation=rawLocations.find(location=>location.debuggerModel===debuggerModel);if(!rawLocation){return Promise.resolve('');}
const script=rawLocation.script();if(!script){return Promise.resolve('');}
const sourceMap=(Bindings.debuggerWorkspaceBinding.sourceMapForScript(script));if(!sourceMap){return Promise.resolve('');}
return script.requestContent().then(onContent);function onContent(deferredContent){const content=deferredContent.content;if(!content){return Promise.resolve('');}
const text=new TextUtils.Text(content);const textRange=sourceMap.reverseMapTextRange(uiSourceCode.url(),new TextUtils.TextRange(lineNumber,startColumnNumber,lineNumber,endColumnNumber));const originalText=text.extract(textRange);if(!originalText){return Promise.resolve('');}
return Formatter.formatterWorkerPool().evaluatableJavaScriptSubstring(originalText);}};Sources.SourceMapNamesResolver.resolveThisObject=function(callFrame){if(!callFrame){return Promise.resolve((null));}
if(!callFrame.scopeChain().length){return Promise.resolve(callFrame.thisObject());}
return Sources.SourceMapNamesResolver._resolveScope(callFrame.scopeChain()[0]).then(onScopeResolved);function onScopeResolved(namesMapping){const thisMappings=namesMapping.inverse().get('this');if(!thisMappings||thisMappings.size!==1){return Promise.resolve(callFrame.thisObject());}
const thisMapping=thisMappings.valuesArray()[0];return callFrame.evaluate({expression:thisMapping,objectGroup:'backtrace',includeCommandLineAPI:false,silent:true,returnByValue:false,generatePreview:true}).then(onEvaluated);}
function onEvaluated(result){return!result.exceptionDetails&&result.object?result.object:callFrame.thisObject();}};Sources.SourceMapNamesResolver.resolveScopeInObject=function(scope){const startLocation=scope.startLocation();const endLocation=scope.endLocation();if(scope.type()===Protocol.Debugger.ScopeType.Global||!startLocation||!endLocation||!startLocation.script()||!startLocation.script().sourceMapURL||startLocation.script()!==endLocation.script()){return scope.object();}
return new Sources.SourceMapNamesResolver.RemoteObject(scope);};Sources.SourceMapNamesResolver.RemoteObject=class extends SDK.RemoteObject{constructor(scope){super();this._scope=scope;this._object=scope.object();}
customPreview(){return this._object.customPreview();}
get objectId(){return this._object.objectId;}
get type(){return this._object.type;}
get subtype(){return this._object.subtype;}
get value(){return this._object.value;}
get description(){return this._object.description;}
get hasChildren(){return this._object.hasChildren;}
get preview(){return this._object.preview;}
arrayLength(){return this._object.arrayLength();}
getOwnProperties(generatePreview){return this._object.getOwnProperties(generatePreview);}
async getAllProperties(accessorPropertiesOnly,generatePreview){const allProperties=await this._object.getAllProperties(accessorPropertiesOnly,generatePreview);const namesMapping=await Sources.SourceMapNamesResolver._resolveScope(this._scope);const properties=allProperties.properties;const internalProperties=allProperties.internalProperties;const newProperties=[];if(properties){for(let i=0;i<properties.length;++i){const property=properties[i];const name=namesMapping.get(property.name)||properties[i].name;newProperties.push(new SDK.RemoteObjectProperty(name,property.value,property.enumerable,property.writable,property.isOwn,property.wasThrown,property.symbol,property.synthetic));}}
return{properties:newProperties,internalProperties:internalProperties};}
async setPropertyValue(argumentName,value){const namesMapping=await Sources.SourceMapNamesResolver._resolveScope(this._scope);let name;if(typeof argumentName==='string'){name=argumentName;}else{name=(argumentName.value);}
let actualName=name;for(const compiledName of namesMapping.keys()){if(namesMapping.get(compiledName)===name){actualName=compiledName;break;}}
return this._object.setPropertyValue(actualName,value);}
async deleteProperty(name){return this._object.deleteProperty(name);}
callFunction(functionDeclaration,args){return this._object.callFunction(functionDeclaration,args);}
callFunctionJSON(functionDeclaration,args){return this._object.callFunctionJSON(functionDeclaration,args);}
release(){this._object.release();}
debuggerModel(){return this._object.debuggerModel();}
runtimeModel(){return this._object.runtimeModel();}
isNode(){return this._object.isNode();}};;Sources.JavaScriptBreakpointsSidebarPane=class extends UI.ThrottledWidget{constructor(){super(true);this.registerRequiredCSS('sources/javaScriptBreakpointsSidebarPane.css');this._breakpointManager=Bindings.breakpointManager;this._breakpointManager.addEventListener(Bindings.BreakpointManager.Events.BreakpointAdded,this.update,this);this._breakpointManager.addEventListener(Bindings.BreakpointManager.Events.BreakpointRemoved,this.update,this);Common.moduleSetting('breakpointsActive').addChangeListener(this.update,this);this._listElement=null;this.update();}
doUpdate(){const breakpointLocations=this._breakpointManager.allBreakpointLocations().filter(breakpointLocation=>breakpointLocation.uiLocation.uiSourceCode.project().type()!==Workspace.projectTypes.Debugger);if(!breakpointLocations.length){this._listElement=null;this.contentElement.removeChildren();const emptyElement=this.contentElement.createChild('div','gray-info-message');emptyElement.textContent=Common.UIString('No breakpoints');this.contentElement.appendChild(emptyElement);this._didUpdateForTest();return Promise.resolve();}
if(!this._listElement){this.contentElement.removeChildren();this._listElement=this.contentElement.createChild('div');this.contentElement.appendChild(this._listElement);}
breakpointLocations.sort((item1,item2)=>item1.uiLocation.compareTo(item2.uiLocation));const breakpointEntriesForLine=new Platform.Multimap();const locationForEntry=new Platform.Multimap();for(const breakpointLocation of breakpointLocations){const uiLocation=breakpointLocation.uiLocation;const entryDescriptor=`${uiLocation.uiSourceCode.url()}:${uiLocation.lineNumber}:${uiLocation.columnNumber}`;locationForEntry.set(entryDescriptor,breakpointLocation);const lineDescriptor=`${uiLocation.uiSourceCode.url()}:${uiLocation.lineNumber}`;breakpointEntriesForLine.set(lineDescriptor,entryDescriptor);}
const details=UI.context.flavor(SDK.DebuggerPausedDetails);const selectedUILocation=details&&details.callFrames.length?Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(details.callFrames[0].location()):null;let shouldShowView=false;let entry=this._listElement.firstChild;const promises=[];for(const descriptor of locationForEntry.keysArray()){if(!entry){entry=this._listElement.createChild('div','breakpoint-entry');entry.addEventListener('contextmenu',this._breakpointContextMenu.bind(this),true);entry.addEventListener('click',this._revealLocation.bind(this),false);const checkboxLabel=UI.CheckboxLabel.create('');checkboxLabel.addEventListener('click',this._breakpointCheckboxClicked.bind(this),false);entry.appendChild(checkboxLabel);entry[Sources.JavaScriptBreakpointsSidebarPane._checkboxLabelSymbol]=checkboxLabel;const snippetElement=entry.createChild('div','source-text monospace');entry[Sources.JavaScriptBreakpointsSidebarPane._snippetElementSymbol]=snippetElement;}
const locations=Array.from(locationForEntry.get(descriptor));const uiLocation=locations[0].uiLocation;const isSelected=!!selectedUILocation&&locations.some(location=>location.uiLocation.id()===selectedUILocation.id());const hasEnabled=locations.some(location=>location.breakpoint.enabled());const hasDisabled=locations.some(location=>!location.breakpoint.enabled());const showCoumn=breakpointEntriesForLine.get(`${uiLocation.uiSourceCode.url()}:${uiLocation.lineNumber}`).size>1;promises.push(this._resetEntry((entry),uiLocation,isSelected,hasEnabled,hasDisabled,showCoumn));entry[Sources.JavaScriptBreakpointsSidebarPane._breakpointLocationsSymbol]=locations;if(isSelected){shouldShowView=true;}
entry=entry.nextSibling;}
while(entry){const next=entry.nextSibling;entry.remove();entry=next;}
if(shouldShowView){UI.viewManager.showView('sources.jsBreakpoints');}
this._listElement.classList.toggle('breakpoints-list-deactivated',!Common.moduleSetting('breakpointsActive').get());return Promise.all(promises).then(()=>this._didUpdateForTest());}
async _resetEntry(element,uiLocation,isSelected,hasEnabled,hasDisabled,showColumn){element[Sources.JavaScriptBreakpointsSidebarPane._locationSymbol]=uiLocation;element.classList.toggle('breakpoint-hit',isSelected);const checkboxLabel=element[Sources.JavaScriptBreakpointsSidebarPane._checkboxLabelSymbol];checkboxLabel.textElement.textContent=uiLocation.linkText()+(showColumn?':'+(uiLocation.columnNumber+1):'');checkboxLabel.checkboxElement.checked=hasEnabled;checkboxLabel.checkboxElement.indeterminate=hasEnabled&&hasDisabled;const snippetElement=element[Sources.JavaScriptBreakpointsSidebarPane._snippetElementSymbol];const{content}=await uiLocation.uiSourceCode.requestContent();const lineNumber=uiLocation.lineNumber;const text=new TextUtils.Text(content||'');if(lineNumber<text.lineCount()){const lineText=text.lineAt(lineNumber);const maxSnippetLength=200;snippetElement.textContent=lineText.substring(showColumn?uiLocation.columnNumber:0).trimEndWithMaxLength(maxSnippetLength);}}
_breakpointLocations(event){const node=event.target.enclosingNodeOrSelfWithClass('breakpoint-entry');if(!node){return[];}
return node[Sources.JavaScriptBreakpointsSidebarPane._breakpointLocationsSymbol]||[];}
_breakpointCheckboxClicked(event){const breakpoints=this._breakpointLocations(event).map(breakpointLocation=>breakpointLocation.breakpoint);const newState=event.target.checkboxElement.checked;for(const breakpoint of breakpoints){breakpoint.setEnabled(newState);}
event.consume();}
_revealLocation(event){const uiLocations=this._breakpointLocations(event).map(breakpointLocation=>breakpointLocation.uiLocation);let uiLocation=null;for(const uiLocationCandidate of uiLocations){if(!uiLocation||uiLocationCandidate.columnNumber<uiLocation.columnNumber){uiLocation=uiLocationCandidate;}}
if(uiLocation){Common.Revealer.reveal(uiLocation);}}
_breakpointContextMenu(event){const breakpoints=this._breakpointLocations(event).map(breakpointLocation=>breakpointLocation.breakpoint);const contextMenu=new UI.ContextMenu(event);const removeEntryTitle=breakpoints.length>1?Common.UIString('Remove all breakpoints in line'):Common.UIString('Remove breakpoint');contextMenu.defaultSection().appendItem(removeEntryTitle,()=>breakpoints.map(breakpoint=>breakpoint.remove(false)));const breakpointActive=Common.moduleSetting('breakpointsActive').get();const breakpointActiveTitle=breakpointActive?Common.UIString('Deactivate breakpoints'):Common.UIString('Activate breakpoints');contextMenu.defaultSection().appendItem(breakpointActiveTitle,()=>Common.moduleSetting('breakpointsActive').set(!breakpointActive));if(breakpoints.some(breakpoint=>!breakpoint.enabled())){const enableTitle=Common.UIString('Enable all breakpoints');contextMenu.defaultSection().appendItem(enableTitle,this._toggleAllBreakpoints.bind(this,true));}
if(breakpoints.some(breakpoint=>breakpoint.enabled())){const disableTitle=Common.UIString('Disable all breakpoints');contextMenu.defaultSection().appendItem(disableTitle,this._toggleAllBreakpoints.bind(this,false));}
const removeAllTitle=Common.UIString('Remove all breakpoints');contextMenu.defaultSection().appendItem(removeAllTitle,this._removeAllBreakpoints.bind(this));const removeOtherTitle=Common.UIString('Remove other breakpoints');contextMenu.defaultSection().appendItem(removeOtherTitle,this._removeOtherBreakpoints.bind(this,new Set(breakpoints)));contextMenu.show();}
_toggleAllBreakpoints(toggleState){for(const breakpointLocation of this._breakpointManager.allBreakpointLocations()){breakpointLocation.breakpoint.setEnabled(toggleState);}}
_removeAllBreakpoints(){for(const breakpointLocation of this._breakpointManager.allBreakpointLocations()){breakpointLocation.breakpoint.remove(false);}}
_removeOtherBreakpoints(selectedBreakpoints){for(const breakpointLocation of this._breakpointManager.allBreakpointLocations()){if(!selectedBreakpoints.has(breakpointLocation.breakpoint)){breakpointLocation.breakpoint.remove(false);}}}
flavorChanged(object){this.update();}
_didUpdateForTest(){}};Sources.JavaScriptBreakpointsSidebarPane._locationSymbol=Symbol('location');Sources.JavaScriptBreakpointsSidebarPane._checkboxLabelSymbol=Symbol('checkbox-label');Sources.JavaScriptBreakpointsSidebarPane._snippetElementSymbol=Symbol('snippet-element');Sources.JavaScriptBreakpointsSidebarPane._breakpointLocationsSymbol=Symbol('locations');;Sources.UISourceCodeFrame=class extends SourceFrame.SourceFrame{constructor(uiSourceCode){super(workingCopy);this._uiSourceCode=uiSourceCode;if(Root.Runtime.experiments.isEnabled('sourceDiff')){this._diff=new SourceFrame.SourceCodeDiff(this.textEditor);}
this._muteSourceCodeEvents=false;this._isSettingContent=false;this._persistenceBinding=Persistence.persistence.binding(uiSourceCode);this._rowMessageBuckets=new Map();this._typeDecorationsPending=new Set();this._uiSourceCodeEventListeners=[];this._messageAndDecorationListeners=[];this._boundOnBindingChanged=this._onBindingChanged.bind(this);this.textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.EditorBlurred,()=>UI.context.setFlavor(Sources.UISourceCodeFrame,null));this.textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.EditorFocused,()=>UI.context.setFlavor(Sources.UISourceCodeFrame,this));Common.settings.moduleSetting('persistenceNetworkOverridesEnabled').addChangeListener(this._onNetworkPersistenceChanged,this);this._errorPopoverHelper=new UI.PopoverHelper(this.element,this._getErrorPopoverContent.bind(this));this._errorPopoverHelper.setHasPadding(true);this._errorPopoverHelper.setTimeout(100,100);this._plugins=[];this._initializeUISourceCode();function workingCopy(){if(uiSourceCode.isDirty()){return Promise.resolve({content:uiSourceCode.workingCopy(),isEncoded:false});}
return uiSourceCode.requestContent();}}
_installMessageAndDecorationListeners(){if(this._persistenceBinding){const networkSourceCode=this._persistenceBinding.network;const fileSystemSourceCode=this._persistenceBinding.fileSystem;this._messageAndDecorationListeners=[networkSourceCode.addEventListener(Workspace.UISourceCode.Events.MessageAdded,this._onMessageAdded,this),networkSourceCode.addEventListener(Workspace.UISourceCode.Events.MessageRemoved,this._onMessageRemoved,this),networkSourceCode.addEventListener(Workspace.UISourceCode.Events.LineDecorationAdded,this._onLineDecorationAdded,this),networkSourceCode.addEventListener(Workspace.UISourceCode.Events.LineDecorationRemoved,this._onLineDecorationRemoved,this),fileSystemSourceCode.addEventListener(Workspace.UISourceCode.Events.MessageAdded,this._onMessageAdded,this),fileSystemSourceCode.addEventListener(Workspace.UISourceCode.Events.MessageRemoved,this._onMessageRemoved,this),];}else{this._messageAndDecorationListeners=[this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.MessageAdded,this._onMessageAdded,this),this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.MessageRemoved,this._onMessageRemoved,this),this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.LineDecorationAdded,this._onLineDecorationAdded,this),this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.LineDecorationRemoved,this._onLineDecorationRemoved,this)];}}
uiSourceCode(){return this._uiSourceCode;}
setUISourceCode(uiSourceCode){this._unloadUISourceCode();this._uiSourceCode=uiSourceCode;if(uiSourceCode.contentLoaded()){if(uiSourceCode.workingCopy()!==this.textEditor.text()){this._innerSetContent(uiSourceCode.workingCopy());}}else{uiSourceCode.requestContent().then(()=>{if(this._uiSourceCode!==uiSourceCode){return;}
if(uiSourceCode.workingCopy()!==this.textEditor.text()){this._innerSetContent(uiSourceCode.workingCopy());}});}
this._initializeUISourceCode();}
_unloadUISourceCode(){this._disposePlugins();for(const message of this._allMessages()){this._removeMessageFromSource(message);}
Common.EventTarget.removeEventListeners(this._messageAndDecorationListeners);Common.EventTarget.removeEventListeners(this._uiSourceCodeEventListeners);this._uiSourceCode.removeWorkingCopyGetter();Persistence.persistence.unsubscribeFromBindingEvent(this._uiSourceCode,this._boundOnBindingChanged);}
_initializeUISourceCode(){this._uiSourceCodeEventListeners=[this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._onWorkingCopyChanged,this),this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._onWorkingCopyCommitted,this),this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.TitleChanged,this._refreshHighlighterType,this)];Persistence.persistence.subscribeForBindingEvent(this._uiSourceCode,this._boundOnBindingChanged);for(const message of this._allMessages()){this._addMessageToSource(message);}
this._installMessageAndDecorationListeners();this._updateStyle();this._decorateAllTypes();this._refreshHighlighterType();if(Root.Runtime.experiments.isEnabled('sourcesPrettyPrint')){const supportedPrettyTypes=new Set(['text/html','text/css','text/javascript']);this.setCanPrettyPrint(supportedPrettyTypes.has(this.highlighterType()),true);}
this._ensurePluginsLoaded();}
wasShown(){super.wasShown();setImmediate(this._updateBucketDecorations.bind(this));this.setEditable(this._canEditSource());for(const plugin of this._plugins){plugin.wasShown();}}
willHide(){for(const plugin of this._plugins){plugin.willHide();}
super.willHide();UI.context.setFlavor(Sources.UISourceCodeFrame,null);this._uiSourceCode.removeWorkingCopyGetter();}
_refreshHighlighterType(){const binding=Persistence.persistence.binding(this._uiSourceCode);const highlighterType=binding?binding.network.mimeType():this._uiSourceCode.mimeType();if(this.highlighterType()===highlighterType){return;}
this._disposePlugins();this.setHighlighterType(highlighterType);this._ensurePluginsLoaded();}
_canEditSource(){if(this.hasLoadError()){return false;}
if(Persistence.persistence.binding(this._uiSourceCode)){return true;}
if(this._uiSourceCode.project().canSetFileContent()){return true;}
if(this._uiSourceCode.project().isServiceProject()){return false;}
if(this._uiSourceCode.project().type()===Workspace.projectTypes.Network&&Persistence.networkPersistenceManager.active()){return true;}
if(this.pretty&&this._uiSourceCode.contentType().hasScripts()){return false;}
return this._uiSourceCode.contentType()!==Common.resourceTypes.Document;}
_onNetworkPersistenceChanged(){this.setEditable(this._canEditSource());}
commitEditing(){if(!this._uiSourceCode.isDirty()){return;}
this._muteSourceCodeEvents=true;this._uiSourceCode.commitWorkingCopy();this._muteSourceCodeEvents=false;}
setContent(content,loadError){this._disposePlugins();this._rowMessageBuckets.clear();super.setContent(content,loadError);for(const message of this._allMessages()){this._addMessageToSource(message);}
this._decorateAllTypes();this._ensurePluginsLoaded();}
_allMessages(){if(this._persistenceBinding){const combinedSet=this._persistenceBinding.network.messages();combinedSet.addAll(this._persistenceBinding.fileSystem.messages());return combinedSet;}
return this._uiSourceCode.messages();}
onTextChanged(oldRange,newRange){const wasPretty=this.pretty;super.onTextChanged(oldRange,newRange);this._errorPopoverHelper.hidePopover();if(this._isSettingContent){return;}
Sources.SourcesPanel.instance().updateLastModificationTime();this._muteSourceCodeEvents=true;if(this.isClean()){this._uiSourceCode.resetWorkingCopy();}else{this._uiSourceCode.setWorkingCopyGetter(this.textEditor.text.bind(this.textEditor));}
this._muteSourceCodeEvents=false;if(wasPretty!==this.pretty){this._updateStyle();this._disposePlugins();this._ensurePluginsLoaded();}}
_onWorkingCopyChanged(event){if(this._muteSourceCodeEvents){return;}
this._innerSetContent(this._uiSourceCode.workingCopy());}
_onWorkingCopyCommitted(event){if(!this._muteSourceCodeEvents){this._innerSetContent(this._uiSourceCode.workingCopy());}
this.contentCommitted();this._updateStyle();}
_ensurePluginsLoaded(){if(!this.loaded||this._plugins.length){return;}
const binding=Persistence.persistence.binding(this._uiSourceCode);const pluginUISourceCode=binding?binding.network:this._uiSourceCode;if(Sources.DebuggerPlugin.accepts(pluginUISourceCode)){this._plugins.push(new Sources.DebuggerPlugin(this.textEditor,pluginUISourceCode,this.transformer()));}
if(Sources.CSSPlugin.accepts(pluginUISourceCode)){this._plugins.push(new Sources.CSSPlugin(this.textEditor));}
if(!this.pretty&&Sources.JavaScriptCompilerPlugin.accepts(pluginUISourceCode)){this._plugins.push(new Sources.JavaScriptCompilerPlugin(this.textEditor,pluginUISourceCode));}
if(Sources.SnippetsPlugin.accepts(pluginUISourceCode)){this._plugins.push(new Sources.SnippetsPlugin(this.textEditor,pluginUISourceCode));}
if(Sources.ScriptOriginPlugin.accepts(pluginUISourceCode)){this._plugins.push(new Sources.ScriptOriginPlugin(this.textEditor,pluginUISourceCode));}
if(!this.pretty&&Root.Runtime.experiments.isEnabled('sourceDiff')&&Sources.GutterDiffPlugin.accepts(pluginUISourceCode)){this._plugins.push(new Sources.GutterDiffPlugin(this.textEditor,pluginUISourceCode));}
this.dispatchEventToListeners(Sources.UISourceCodeFrame.Events.ToolbarItemsChanged);for(const plugin of this._plugins){plugin.wasShown();}}
_disposePlugins(){this.textEditor.operation(()=>{for(const plugin of this._plugins){plugin.dispose();}});this._plugins=[];}
_onBindingChanged(){const binding=Persistence.persistence.binding(this._uiSourceCode);if(binding===this._persistenceBinding){return;}
this._unloadUISourceCode();this._persistenceBinding=binding;this._initializeUISourceCode();}
_updateStyle(){this.setEditable(this._canEditSource());}
_innerSetContent(content){this._isSettingContent=true;const oldContent=this.textEditor.text();if(this._diff){this._diff.highlightModifiedLines(oldContent,content);}
if(oldContent!==content){this.setContent(content,null);}
this._isSettingContent=false;}
async populateTextAreaContextMenu(contextMenu,editorLineNumber,editorColumnNumber){await super.populateTextAreaContextMenu(contextMenu,editorLineNumber,editorColumnNumber);contextMenu.appendApplicableItems(this._uiSourceCode);const location=this.transformer().editorToRawLocation(editorLineNumber,editorColumnNumber);contextMenu.appendApplicableItems(new Workspace.UILocation(this._uiSourceCode,location[0],location[1]));contextMenu.appendApplicableItems(this);for(const plugin of this._plugins){await plugin.populateTextAreaContextMenu(contextMenu,editorLineNumber,editorColumnNumber);}}
dispose(){this._errorPopoverHelper.dispose();this._unloadUISourceCode();this.textEditor.dispose();this.detach();Common.settings.moduleSetting('persistenceNetworkOverridesEnabled').removeChangeListener(this._onNetworkPersistenceChanged,this);}
_onMessageAdded(event){const message=(event.data);this._addMessageToSource(message);}
_addMessageToSource(message){if(!this.loaded){return;}
const editorLocation=this.transformer().rawToEditorLocation(message.lineNumber(),message.columnNumber());let editorLineNumber=editorLocation[0];if(editorLineNumber>=this.textEditor.linesCount){editorLineNumber=this.textEditor.linesCount-1;}
if(editorLineNumber<0){editorLineNumber=0;}
let messageBucket=this._rowMessageBuckets.get(editorLineNumber);if(!messageBucket){messageBucket=new Sources.UISourceCodeFrame.RowMessageBucket(this,this.textEditor,editorLineNumber);this._rowMessageBuckets.set(editorLineNumber,messageBucket);}
messageBucket.addMessage(message);}
_onMessageRemoved(event){const message=(event.data);this._removeMessageFromSource(message);}
_removeMessageFromSource(message){if(!this.loaded){return;}
const editorLocation=this.transformer().rawToEditorLocation(message.lineNumber(),message.columnNumber());let editorLineNumber=editorLocation[0];if(editorLineNumber>=this.textEditor.linesCount){editorLineNumber=this.textEditor.linesCount-1;}
if(editorLineNumber<0){editorLineNumber=0;}
const messageBucket=this._rowMessageBuckets.get(editorLineNumber);if(!messageBucket){return;}
messageBucket.removeMessage(message);if(!messageBucket.uniqueMessagesCount()){messageBucket.detachFromEditor();this._rowMessageBuckets.delete(editorLineNumber);}}
_getErrorPopoverContent(event){const element=event.target.enclosingNodeOrSelfWithClass('text-editor-line-decoration-icon')||event.target.enclosingNodeOrSelfWithClass('text-editor-line-decoration-wave');if(!element){return null;}
const anchor=element.enclosingNodeOrSelfWithClass('text-editor-line-decoration-icon')?element.boxInWindow():new AnchorBox(event.clientX,event.clientY,1,1);return{box:anchor,show:popover=>{const messageBucket=element.enclosingNodeOrSelfWithClass('text-editor-line-decoration')._messageBucket;const messagesOutline=messageBucket.messagesDescription();popover.contentElement.appendChild(messagesOutline);return Promise.resolve(true);}};}
_updateBucketDecorations(){for(const bucket of this._rowMessageBuckets.values()){bucket._updateDecoration();}}
_onLineDecorationAdded(event){const marker=(event.data);this._decorateTypeThrottled(marker.type());}
_onLineDecorationRemoved(event){const marker=(event.data);this._decorateTypeThrottled(marker.type());}
async _decorateTypeThrottled(type){if(this._typeDecorationsPending.has(type)){return;}
this._typeDecorationsPending.add(type);const decorator=await self.runtime.extensions(SourceFrame.LineDecorator).find(extension=>extension.descriptor()['decoratorType']===type).instance();this._typeDecorationsPending.delete(type);this.textEditor.codeMirror().operation(()=>{decorator.decorate(this._persistenceBinding?this._persistenceBinding.network:this.uiSourceCode(),this.textEditor,type);});}
_decorateAllTypes(){if(!this.loaded){return;}
for(const extension of self.runtime.extensions(SourceFrame.LineDecorator)){const type=extension.descriptor()['decoratorType'];if(this._uiSourceCode.decorationsForType(type)){this._decorateTypeThrottled(type);}}}
syncToolbarItems(){const leftToolbarItems=super.syncToolbarItems();const rightToolbarItems=[];for(const plugin of this._plugins){leftToolbarItems.pushAll(plugin.leftToolbarItems());rightToolbarItems.pushAll(plugin.rightToolbarItems());}
if(!rightToolbarItems.length){return leftToolbarItems;}
return[...leftToolbarItems,new UI.ToolbarSeparator(true),...rightToolbarItems];}
async populateLineGutterContextMenu(contextMenu,lineNumber){await super.populateLineGutterContextMenu(contextMenu,lineNumber);for(const plugin of this._plugins){await plugin.populateLineGutterContextMenu(contextMenu,lineNumber);}}};Sources.UISourceCodeFrame._iconClassPerLevel={};Sources.UISourceCodeFrame._iconClassPerLevel[Workspace.UISourceCode.Message.Level.Error]='smallicon-error';Sources.UISourceCodeFrame._iconClassPerLevel[Workspace.UISourceCode.Message.Level.Warning]='smallicon-warning';Sources.UISourceCodeFrame._bubbleTypePerLevel={};Sources.UISourceCodeFrame._bubbleTypePerLevel[Workspace.UISourceCode.Message.Level.Error]='error';Sources.UISourceCodeFrame._bubbleTypePerLevel[Workspace.UISourceCode.Message.Level.Warning]='warning';Sources.UISourceCodeFrame._lineClassPerLevel={};Sources.UISourceCodeFrame._lineClassPerLevel[Workspace.UISourceCode.Message.Level.Error]='text-editor-line-with-error';Sources.UISourceCodeFrame._lineClassPerLevel[Workspace.UISourceCode.Message.Level.Warning]='text-editor-line-with-warning';Sources.UISourceCodeFrame.RowMessage=class{constructor(message){this._message=message;this._repeatCount=1;this.element=createElementWithClass('div','text-editor-row-message');this._icon=this.element.createChild('label','','dt-icon-label');this._icon.type=Sources.UISourceCodeFrame._iconClassPerLevel[message.level()];this._repeatCountElement=this.element.createChild('span','text-editor-row-message-repeat-count hidden','dt-small-bubble');this._repeatCountElement.type=Sources.UISourceCodeFrame._bubbleTypePerLevel[message.level()];const linesContainer=this.element.createChild('div');const lines=this._message.text().split('\n');for(let i=0;i<lines.length;++i){const messageLine=linesContainer.createChild('div');messageLine.textContent=lines[i];}}
message(){return this._message;}
repeatCount(){return this._repeatCount;}
setRepeatCount(repeatCount){if(this._repeatCount===repeatCount){return;}
this._repeatCount=repeatCount;this._updateMessageRepeatCount();}
_updateMessageRepeatCount(){this._repeatCountElement.textContent=this._repeatCount;const showRepeatCount=this._repeatCount>1;this._repeatCountElement.classList.toggle('hidden',!showRepeatCount);this._icon.classList.toggle('hidden',showRepeatCount);}};Sources.UISourceCodeFrame.RowMessageBucket=class{constructor(sourceFrame,textEditor,editorLineNumber){this._sourceFrame=sourceFrame;this.textEditor=textEditor;this._lineHandle=textEditor.textEditorPositionHandle(editorLineNumber,0);this._decoration=createElementWithClass('div','text-editor-line-decoration');this._decoration._messageBucket=this;this._wave=this._decoration.createChild('div','text-editor-line-decoration-wave');this._icon=this._wave.createChild('span','text-editor-line-decoration-icon','dt-icon-label');this._decorationStartColumn=null;this._messagesDescriptionElement=createElementWithClass('div','text-editor-messages-description-container');this._messages=[];this._level=null;}
_updateWavePosition(editorLineNumber,columnNumber){editorLineNumber=Math.min(editorLineNumber,this.textEditor.linesCount-1);const lineText=this.textEditor.line(editorLineNumber);columnNumber=Math.min(columnNumber,lineText.length);const lineIndent=TextUtils.TextUtils.lineIndent(lineText).length;const startColumn=Math.max(columnNumber-1,lineIndent);if(this._decorationStartColumn===startColumn){return;}
if(this._decorationStartColumn!==null){this.textEditor.removeDecoration(this._decoration,editorLineNumber);}
this.textEditor.addDecoration(this._decoration,editorLineNumber,startColumn);this._decorationStartColumn=startColumn;}
messagesDescription(){this._messagesDescriptionElement.removeChildren();UI.appendStyle(this._messagesDescriptionElement,'source_frame/messagesPopover.css');for(let i=0;i<this._messages.length;++i){this._messagesDescriptionElement.appendChild(this._messages[i].element);}
return this._messagesDescriptionElement;}
detachFromEditor(){const position=this._lineHandle.resolve();if(!position){return;}
const editorLineNumber=position.lineNumber;if(this._level){this.textEditor.toggleLineClass(editorLineNumber,Sources.UISourceCodeFrame._lineClassPerLevel[this._level],false);}
if(this._decorationStartColumn!==null){this.textEditor.removeDecoration(this._decoration,editorLineNumber);this._decorationStartColumn=null;}}
uniqueMessagesCount(){return this._messages.length;}
addMessage(message){for(let i=0;i<this._messages.length;++i){const rowMessage=this._messages[i];if(rowMessage.message().isEqual(message)){rowMessage.setRepeatCount(rowMessage.repeatCount()+1);return;}}
const rowMessage=new Sources.UISourceCodeFrame.RowMessage(message);this._messages.push(rowMessage);this._updateDecoration();}
removeMessage(message){for(let i=0;i<this._messages.length;++i){const rowMessage=this._messages[i];if(!rowMessage.message().isEqual(message)){continue;}
rowMessage.setRepeatCount(rowMessage.repeatCount()-1);if(!rowMessage.repeatCount()){this._messages.splice(i,1);}
this._updateDecoration();return;}}
_updateDecoration(){if(!this._sourceFrame.isShowing()){return;}
if(!this._messages.length){return;}
const position=this._lineHandle.resolve();if(!position){return;}
const editorLineNumber=position.lineNumber;let columnNumber=Number.MAX_VALUE;let maxMessage=null;for(let i=0;i<this._messages.length;++i){const message=this._messages[i].message();const editorLocation=this._sourceFrame.transformer().rawToEditorLocation(editorLineNumber,message.columnNumber());columnNumber=Math.min(columnNumber,editorLocation[1]);if(!maxMessage||Workspace.UISourceCode.Message.messageLevelComparator(maxMessage,message)<0){maxMessage=message;}}
this._updateWavePosition(editorLineNumber,columnNumber);if(this._level===maxMessage.level()){return;}
if(this._level){this.textEditor.toggleLineClass(editorLineNumber,Sources.UISourceCodeFrame._lineClassPerLevel[this._level],false);this._icon.type='';}
this._level=maxMessage.level();if(!this._level){return;}
this.textEditor.toggleLineClass(editorLineNumber,Sources.UISourceCodeFrame._lineClassPerLevel[this._level],true);this._icon.type=Sources.UISourceCodeFrame._iconClassPerLevel[this._level];}};Workspace.UISourceCode.Message._messageLevelPriority={'Warning':3,'Error':4};Workspace.UISourceCode.Message.messageLevelComparator=function(a,b){return Workspace.UISourceCode.Message._messageLevelPriority[a.level()]-
Workspace.UISourceCode.Message._messageLevelPriority[b.level()];};Sources.UISourceCodeFrame.Plugin=class{static accepts(uiSourceCode){return false;}
wasShown(){}
willHide(){}
rightToolbarItems(){return[];}
leftToolbarItems(){return[];}
populateLineGutterContextMenu(contextMenu,lineNumber){return Promise.resolve();}
populateTextAreaContextMenu(contextMenu,lineNumber,columnNumber){return Promise.resolve();}
dispose(){}};Sources.UISourceCodeFrame.Events={ToolbarItemsChanged:Symbol('ToolbarItemsChanged')};;Sources.DebuggerPlugin=class extends Sources.UISourceCodeFrame.Plugin{constructor(textEditor,uiSourceCode,transformer){super();this._textEditor=textEditor;this._uiSourceCode=uiSourceCode;this._transformer=transformer;this._executionLocation=null;this._controlDown=false;this._asyncStepInHoveredLine=0;this._asyncStepInHovered=false;this._clearValueWidgetsTimer=null;this._sourceMapInfobar=null;this._controlTimeout=null;this._scriptsPanel=Sources.SourcesPanel.instance();this._breakpointManager=Bindings.breakpointManager;if(uiSourceCode.project().type()===Workspace.projectTypes.Debugger){this._textEditor.element.classList.add('source-frame-debugger-script');}
this._popoverHelper=new UI.PopoverHelper(this._scriptsPanel.element,this._getPopoverRequest.bind(this));this._popoverHelper.setDisableOnClick(true);this._popoverHelper.setTimeout(250,250);this._popoverHelper.setHasPadding(true);this._boundPopoverHelperHide=this._popoverHelper.hidePopover.bind(this._popoverHelper);this._scriptsPanel.element.addEventListener('scroll',this._boundPopoverHelperHide,true);this._boundKeyDown=(this._onKeyDown.bind(this));this._textEditor.element.addEventListener('keydown',this._boundKeyDown,true);this._boundKeyUp=(this._onKeyUp.bind(this));this._textEditor.element.addEventListener('keyup',this._boundKeyUp,true);this._boundMouseMove=(this._onMouseMove.bind(this));this._textEditor.element.addEventListener('mousemove',this._boundMouseMove,false);this._boundMouseDown=(this._onMouseDown.bind(this));this._textEditor.element.addEventListener('mousedown',this._boundMouseDown,true);this._boundBlur=this._onBlur.bind(this);this._textEditor.element.addEventListener('focusout',this._boundBlur,false);this._boundWheel=event=>{if(this._executionLocation&&UI.KeyboardShortcut.eventHasCtrlOrMeta(event)){event.preventDefault();}};this._textEditor.element.addEventListener('wheel',this._boundWheel,true);this._textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.GutterClick,this._handleGutterClick,this);this._breakpointManager.addEventListener(Bindings.BreakpointManager.Events.BreakpointAdded,this._breakpointAdded,this);this._breakpointManager.addEventListener(Bindings.BreakpointManager.Events.BreakpointRemoved,this._breakpointRemoved,this);this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._workingCopyChanged,this);this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._workingCopyCommitted,this);this._breakpointDecorations=new Set();this._decorationByBreakpoint=new Map();this._possibleBreakpointsRequested=new Set();this._scriptFileForDebuggerModel=new Map();Common.moduleSetting('skipStackFramesPattern').addChangeListener(this._showBlackboxInfobarIfNeeded,this);Common.moduleSetting('skipContentScripts').addChangeListener(this._showBlackboxInfobarIfNeeded,this);this._valueWidgets=new Map();this._continueToLocationDecorations=null;UI.context.addFlavorChangeListener(SDK.DebuggerModel.CallFrame,this._callFrameChanged,this);this._liveLocationPool=new Bindings.LiveLocationPool();this._callFrameChanged();this._updateScriptFiles();if(this._uiSourceCode.isDirty()){this._muted=true;this._mutedFromStart=true;}else{this._muted=false;this._mutedFromStart=false;this._initializeBreakpoints();}
this._blackboxInfobar=null;this._showBlackboxInfobarIfNeeded();const scriptFiles=this._scriptFileForDebuggerModel.valuesArray();for(let i=0;i<scriptFiles.length;++i){scriptFiles[i].checkMapping();}
this._hasLineWithoutMapping=false;this._updateLinesWithoutMappingHighlight();if(!Root.Runtime.experiments.isEnabled('sourcesPrettyPrint')){this._prettyPrintInfobar=null;this._detectMinified();}}
static accepts(uiSourceCode){return uiSourceCode.contentType().hasScripts();}
_showBlackboxInfobarIfNeeded(){const uiSourceCode=this._uiSourceCode;if(!uiSourceCode.contentType().hasScripts()){return;}
const projectType=uiSourceCode.project().type();if(!Bindings.blackboxManager.isBlackboxedUISourceCode(uiSourceCode)){this._hideBlackboxInfobar();return;}
if(this._blackboxInfobar){this._blackboxInfobar.dispose();}
const infobar=new UI.Infobar(UI.Infobar.Type.Warning,Common.UIString('This script is blackboxed in debugger'));this._blackboxInfobar=infobar;infobar.createDetailsRowMessage(Common.UIString('Debugger will skip stepping through this script, and will not stop on exceptions'));const scriptFile=this._scriptFileForDebuggerModel.size?this._scriptFileForDebuggerModel.valuesArray()[0]:null;if(scriptFile&&scriptFile.hasSourceMapURL()){infobar.createDetailsRowMessage(Common.UIString('Source map found, but ignored for blackboxed file.'));}
infobar.createDetailsRowMessage();infobar.createDetailsRowMessage(Common.UIString('Possible ways to cancel this behavior are:'));infobar.createDetailsRowMessage(' - ').createTextChild(Common.UIString('Go to "%s" tab in settings',Common.UIString('Blackboxing')));const unblackboxLink=infobar.createDetailsRowMessage(' - ').createChild('span','link');unblackboxLink.textContent=Common.UIString('Unblackbox this script');unblackboxLink.addEventListener('click',unblackbox,false);function unblackbox(){Bindings.blackboxManager.unblackboxUISourceCode(uiSourceCode);if(projectType===Workspace.projectTypes.ContentScripts){Bindings.blackboxManager.unblackboxContentScripts();}}
this._textEditor.attachInfobar(this._blackboxInfobar);}
_hideBlackboxInfobar(){if(!this._blackboxInfobar){return;}
this._blackboxInfobar.dispose();this._blackboxInfobar=null;}
wasShown(){if(this._executionLocation){setImmediate(()=>{this._generateValuesInSource();});}}
willHide(){this._popoverHelper.hidePopover();}
populateLineGutterContextMenu(contextMenu,editorLineNumber){function populate(resolve,reject){const uiLocation=new Workspace.UILocation(this._uiSourceCode,editorLineNumber,0);this._scriptsPanel.appendUILocationItems(contextMenu,uiLocation);const breakpoints=this._lineBreakpointDecorations(editorLineNumber).map(decoration=>decoration.breakpoint).filter(breakpoint=>!!breakpoint);if(!breakpoints.length){contextMenu.debugSection().appendItem(Common.UIString('Add breakpoint'),this._createNewBreakpoint.bind(this,editorLineNumber,'',true));contextMenu.debugSection().appendItem(Common.UIString('Add conditional breakpoint\u2026'),this._editBreakpointCondition.bind(this,editorLineNumber,null,null));contextMenu.debugSection().appendItem(ls`Add logpoint\u2026`,this._editBreakpointCondition.bind(this,editorLineNumber,null,null,true));contextMenu.debugSection().appendItem(Common.UIString('Never pause here'),this._createNewBreakpoint.bind(this,editorLineNumber,'false',true));}else{const hasOneBreakpoint=breakpoints.length===1;const removeTitle=hasOneBreakpoint?Common.UIString('Remove breakpoint'):Common.UIString('Remove all breakpoints in line');contextMenu.debugSection().appendItem(removeTitle,()=>breakpoints.map(breakpoint=>breakpoint.remove()));if(hasOneBreakpoint){contextMenu.debugSection().appendItem(Common.UIString('Edit breakpoint\u2026'),this._editBreakpointCondition.bind(this,editorLineNumber,breakpoints[0],null));}
const hasEnabled=breakpoints.some(breakpoint=>breakpoint.enabled());if(hasEnabled){const title=hasOneBreakpoint?Common.UIString('Disable breakpoint'):Common.UIString('Disable all breakpoints in line');contextMenu.debugSection().appendItem(title,()=>breakpoints.map(breakpoint=>breakpoint.setEnabled(false)));}
const hasDisabled=breakpoints.some(breakpoint=>!breakpoint.enabled());if(hasDisabled){const title=hasOneBreakpoint?Common.UIString('Enable breakpoint'):Common.UIString('Enabled all breakpoints in line');contextMenu.debugSection().appendItem(title,()=>breakpoints.map(breakpoint=>breakpoint.setEnabled(true)));}}
resolve();}
return new Promise(populate.bind(this));}
populateTextAreaContextMenu(contextMenu,editorLineNumber,editorColumnNumber){function addSourceMapURL(scriptFile){const dialog=new Sources.AddSourceMapURLDialog(addSourceMapURLDialogCallback.bind(null,scriptFile));dialog.show();}
function addSourceMapURLDialogCallback(scriptFile,url){if(!url){return;}
scriptFile.addSourceMapURL(url);}
function populateSourceMapMembers(){if(this._uiSourceCode.project().type()===Workspace.projectTypes.Network&&Common.moduleSetting('jsSourceMapsEnabled').get()&&!Bindings.blackboxManager.isBlackboxedUISourceCode(this._uiSourceCode)){if(this._scriptFileForDebuggerModel.size){const scriptFile=this._scriptFileForDebuggerModel.valuesArray()[0];const addSourceMapURLLabel=Common.UIString('Add source map\u2026');contextMenu.debugSection().appendItem(addSourceMapURLLabel,addSourceMapURL.bind(null,scriptFile));}}}
return super.populateTextAreaContextMenu(contextMenu,editorLineNumber,editorColumnNumber).then(populateSourceMapMembers.bind(this));}
_workingCopyChanged(){if(this._scriptFileForDebuggerModel.size){return;}
if(this._uiSourceCode.isDirty()){this._muteBreakpointsWhileEditing();}else{this._restoreBreakpointsAfterEditing();}}
_workingCopyCommitted(event){this._scriptsPanel.updateLastModificationTime();if(!this._scriptFileForDebuggerModel.size){this._restoreBreakpointsAfterEditing();}}
_didMergeToVM(){this._restoreBreakpointsIfConsistentScripts();}
_didDivergeFromVM(){this._muteBreakpointsWhileEditing();}
_muteBreakpointsWhileEditing(){if(this._muted){return;}
for(const decoration of this._breakpointDecorations){this._updateBreakpointDecoration(decoration);}
this._muted=true;}
_restoreBreakpointsIfConsistentScripts(){const scriptFiles=this._scriptFileForDebuggerModel.valuesArray();for(let i=0;i<scriptFiles.length;++i){if(scriptFiles[i].hasDivergedFromVM()||scriptFiles[i].isMergingToVM()){return;}}
this._restoreBreakpointsAfterEditing();}
_restoreBreakpointsAfterEditing(){this._muted=false;if(this._mutedFromStart){this._mutedFromStart=false;this._initializeBreakpoints();return;}
const decorations=Array.from(this._breakpointDecorations);this._breakpointDecorations.clear();this._textEditor.operation(()=>decorations.map(decoration=>decoration.hide()));for(const decoration of decorations){if(!decoration.breakpoint){continue;}
const enabled=decoration.enabled;decoration.breakpoint.remove();const location=decoration.handle.resolve();if(location){this._setBreakpoint(location.lineNumber,location.columnNumber,decoration.condition,enabled);}}}
_isIdentifier(tokenType){return tokenType.startsWith('js-variable')||tokenType.startsWith('js-property')||tokenType==='js-def';}
_getPopoverRequest(event){if(UI.KeyboardShortcut.eventHasCtrlOrMeta(event)){return null;}
const target=UI.context.flavor(SDK.Target);const debuggerModel=target?target.model(SDK.DebuggerModel):null;if(!debuggerModel||!debuggerModel.isPaused()){return null;}
const textPosition=this._textEditor.coordinatesToCursorPosition(event.x,event.y);if(!textPosition){return null;}
const mouseLine=textPosition.startLine;const mouseColumn=textPosition.startColumn;const textSelection=this._textEditor.selection().normalize();let anchorBox;let editorLineNumber;let startHighlight;let endHighlight;const selectedCallFrame=(UI.context.flavor(SDK.DebuggerModel.CallFrame));if(!selectedCallFrame){return null;}
if(textSelection&&!textSelection.isEmpty()){if(textSelection.startLine!==textSelection.endLine||textSelection.startLine!==mouseLine||mouseColumn<textSelection.startColumn||mouseColumn>textSelection.endColumn){return null;}
const leftCorner=this._textEditor.cursorPositionToCoordinates(textSelection.startLine,textSelection.startColumn);const rightCorner=this._textEditor.cursorPositionToCoordinates(textSelection.endLine,textSelection.endColumn);anchorBox=new AnchorBox(leftCorner.x,leftCorner.y,rightCorner.x-leftCorner.x,leftCorner.height);editorLineNumber=textSelection.startLine;startHighlight=textSelection.startColumn;endHighlight=textSelection.endColumn-1;}else{const token=this._textEditor.tokenAtTextPosition(textPosition.startLine,textPosition.startColumn);if(!token||!token.type){return null;}
editorLineNumber=textPosition.startLine;const line=this._textEditor.line(editorLineNumber);const tokenContent=line.substring(token.startColumn,token.endColumn);const isIdentifier=this._isIdentifier(token.type);if(!isIdentifier&&(token.type!=='js-keyword'||tokenContent!=='this')){return null;}
const leftCorner=this._textEditor.cursorPositionToCoordinates(editorLineNumber,token.startColumn);const rightCorner=this._textEditor.cursorPositionToCoordinates(editorLineNumber,token.endColumn-1);anchorBox=new AnchorBox(leftCorner.x,leftCorner.y,rightCorner.x-leftCorner.x,leftCorner.height);startHighlight=token.startColumn;endHighlight=token.endColumn-1;while(startHighlight>1&&line.charAt(startHighlight-1)==='.'){const tokenBefore=this._textEditor.tokenAtTextPosition(editorLineNumber,startHighlight-2);if(!tokenBefore||!tokenBefore.type){return null;}
if(tokenBefore.type==='js-meta'){break;}
if(tokenBefore.type==='js-string-2'){if(tokenBefore.endColumn<2){return null;}
startHighlight=line.lastIndexOf('`',tokenBefore.endColumn-2);if(startHighlight<0){return null;}
break;}
startHighlight=tokenBefore.startColumn;}}
const[scope]=selectedCallFrame.scopeChain();const scopeStartLocation=scope&&scope.startLocation();const scopeEndLocation=scope&&scope.endLocation();if(scopeStartLocation&&scopeEndLocation){let{lineNumber:scopeStartLineNumber,columnNumber:scopeStartColNumber}=scopeStartLocation;let{lineNumber:scopeEndLineNumber,columnNumber:scopeEndColNumber}=scopeEndLocation;const scopeUIStartLocation=Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(scopeStartLocation);const scopeUIEndLocation=Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(scopeEndLocation);if(scopeUIStartLocation&&scopeUIEndLocation){({lineNumber:scopeStartLineNumber,columnNumber:scopeStartColNumber}=scopeUIStartLocation);({lineNumber:scopeEndLineNumber,columnNumber:scopeEndColNumber}=scopeUIEndLocation);}
if(editorLineNumber<scopeStartLineNumber){return null;}
if(editorLineNumber===scopeStartLineNumber&&startHighlight<scopeStartColNumber){return null;}
if(editorLineNumber>scopeEndLineNumber){return null;}
if(editorLineNumber===scopeEndLineNumber&&endHighlight>scopeEndColNumber){return null;}}
let objectPopoverHelper;let highlightDescriptor;return{box:anchorBox,show:async popover=>{const evaluationText=this._textEditor.line(editorLineNumber).substring(startHighlight,endHighlight+1);const resolvedText=await Sources.SourceMapNamesResolver.resolveExpression(selectedCallFrame,evaluationText,this._uiSourceCode,editorLineNumber,startHighlight,endHighlight);const result=await selectedCallFrame.evaluate({expression:resolvedText||evaluationText,objectGroup:'popover',includeCommandLineAPI:false,silent:true,returnByValue:false,generatePreview:false});if(!result.object||(result.object.type==='object'&&result.object.subtype==='error')){return false;}
objectPopoverHelper=await ObjectUI.ObjectPopoverHelper.buildObjectPopover(result.object,popover);const potentiallyUpdatedCallFrame=UI.context.flavor(SDK.DebuggerModel.CallFrame);if(!objectPopoverHelper||selectedCallFrame!==potentiallyUpdatedCallFrame){debuggerModel.runtimeModel().releaseObjectGroup('popover');if(objectPopoverHelper){objectPopoverHelper.dispose();}
return false;}
const highlightRange=new TextUtils.TextRange(editorLineNumber,startHighlight,editorLineNumber,endHighlight);highlightDescriptor=this._textEditor.highlightRange(highlightRange,'source-frame-eval-expression');return true;},hide:()=>{objectPopoverHelper.dispose();debuggerModel.runtimeModel().releaseObjectGroup('popover');this._textEditor.removeHighlight(highlightDescriptor);}};}
_onKeyDown(event){this._clearControlDown();if(event.key==='Escape'){if(this._popoverHelper.isPopoverVisible()){this._popoverHelper.hidePopover();event.consume();}
return;}
if(UI.shortcutRegistry.eventMatchesAction(event,'debugger.toggle-breakpoint')){const selection=this._textEditor.selection();if(!selection){return;}
this._toggleBreakpoint(selection.startLine,false);event.consume(true);return;}
if(UI.shortcutRegistry.eventMatchesAction(event,'debugger.toggle-breakpoint-enabled')){const selection=this._textEditor.selection();if(!selection){return;}
this._toggleBreakpoint(selection.startLine,true);event.consume(true);return;}
if(UI.shortcutRegistry.eventMatchesAction(event,'debugger.breakpoint-input-window')){const selection=this._textEditor.selection();if(!selection){return;}
const breakpoints=this._lineBreakpointDecorations(selection.startLine).map(decoration=>decoration.breakpoint).filter(breakpoint=>!!breakpoint);let breakpoint;if(breakpoints.length){breakpoint=breakpoints[0];}
const isLogpoint=breakpoint?breakpoint.condition().includes(Sources.BreakpointEditDialog.LogpointPrefix):false;this._editBreakpointCondition(selection.startLine,breakpoint,null,isLogpoint);event.consume(true);return;}
if(UI.KeyboardShortcut.eventHasCtrlOrMeta(event)&&this._executionLocation){this._controlDown=true;if(event.key===(Host.isMac()?'Meta':'Control')){this._controlTimeout=setTimeout(()=>{if(this._executionLocation&&this._controlDown){this._showContinueToLocations();}},150);}}}
_onMouseMove(event){if(this._executionLocation&&this._controlDown&&UI.KeyboardShortcut.eventHasCtrlOrMeta(event)){if(!this._continueToLocationDecorations){this._showContinueToLocations();}}
if(this._continueToLocationDecorations){const textPosition=this._textEditor.coordinatesToCursorPosition(event.x,event.y);const hovering=!!event.target.enclosingNodeOrSelfWithClass('source-frame-async-step-in');this._setAsyncStepInHoveredLine(textPosition?textPosition.startLine:null,hovering);}}
_setAsyncStepInHoveredLine(editorLineNumber,hovered){if(this._asyncStepInHoveredLine===editorLineNumber&&this._asyncStepInHovered===hovered){return;}
if(this._asyncStepInHovered&&this._asyncStepInHoveredLine){this._textEditor.toggleLineClass(this._asyncStepInHoveredLine,'source-frame-async-step-in-hovered',false);}
this._asyncStepInHoveredLine=editorLineNumber;this._asyncStepInHovered=hovered;if(this._asyncStepInHovered&&this._asyncStepInHoveredLine){this._textEditor.toggleLineClass(this._asyncStepInHoveredLine,'source-frame-async-step-in-hovered',true);}}
_onMouseDown(event){if(!this._executionLocation||!UI.KeyboardShortcut.eventHasCtrlOrMeta(event)){return;}
if(!this._continueToLocationDecorations){return;}
event.consume();const textPosition=this._textEditor.coordinatesToCursorPosition(event.x,event.y);if(!textPosition){return;}
for(const decoration of this._continueToLocationDecorations.keys()){const range=decoration.find();if(range.from.line!==textPosition.startLine||range.to.line!==textPosition.startLine){continue;}
if(range.from.ch<=textPosition.startColumn&&textPosition.startColumn<=range.to.ch){this._continueToLocationDecorations.get(decoration)();break;}}}
_onBlur(event){if(this._textEditor.element.isAncestor((event.target))){return;}
this._clearControlDown();}
_onKeyUp(event){this._clearControlDown();}
_clearControlDown(){this._controlDown=false;this._clearContinueToLocations();clearTimeout(this._controlTimeout);}
async _editBreakpointCondition(editorLineNumber,breakpoint,location,preferLogpoint){const oldCondition=breakpoint?breakpoint.condition():'';const decorationElement=createElement('div');const dialog=new Sources.BreakpointEditDialog(editorLineNumber,oldCondition,!!preferLogpoint,result=>{dialog.detach();this._textEditor.removeDecoration(decorationElement,editorLineNumber);if(!result.committed){return;}
if(breakpoint){breakpoint.setCondition(result.condition);}else if(location){this._setBreakpoint(location.lineNumber,location.columnNumber,result.condition,true);}else{this._createNewBreakpoint(editorLineNumber,result.condition,true);}});this._textEditor.addDecoration(decorationElement,editorLineNumber);dialog.markAsExternallyManaged();dialog.show(decorationElement);}
_executionLineChanged(liveLocation){this._clearExecutionLine();const uiLocation=liveLocation.uiLocation();if(!uiLocation||uiLocation.uiSourceCode!==this._uiSourceCode){this._executionLocation=null;return;}
this._executionLocation=uiLocation;const editorLocation=this._transformer.rawToEditorLocation(uiLocation.lineNumber,uiLocation.columnNumber);this._textEditor.setExecutionLocation(editorLocation[0],editorLocation[1]);if(this._textEditor.isShowing()){setImmediate(()=>{if(this._controlDown){this._showContinueToLocations();}else{this._generateValuesInSource();}});}}
_generateValuesInSource(){if(!Common.moduleSetting('inlineVariableValues').get()){return;}
const executionContext=UI.context.flavor(SDK.ExecutionContext);if(!executionContext){return;}
const callFrame=UI.context.flavor(SDK.DebuggerModel.CallFrame);if(!callFrame){return;}
const localScope=callFrame.localScope();const functionLocation=callFrame.functionLocation();if(localScope&&functionLocation){Sources.SourceMapNamesResolver.resolveScopeInObject(localScope).getAllProperties(false,false).then(this._prepareScopeVariables.bind(this,callFrame));}}
_showContinueToLocations(){this._popoverHelper.hidePopover();const executionContext=UI.context.flavor(SDK.ExecutionContext);if(!executionContext){return;}
const callFrame=UI.context.flavor(SDK.DebuggerModel.CallFrame);if(!callFrame){return;}
const start=callFrame.functionLocation()||callFrame.location();const debuggerModel=callFrame.debuggerModel;debuggerModel.getPossibleBreakpoints(start,null,true).then(locations=>this._textEditor.operation(renderLocations.bind(this,locations)));function renderLocations(locations){this._clearContinueToLocationsNoRestore();this._textEditor.hideExecutionLineBackground();this._clearValueWidgets();this._continueToLocationDecorations=new Map();locations=locations.reverse();let previousCallLine=-1;for(const location of locations){const editorLocation=this._transformer.rawToEditorLocation(location.lineNumber,location.columnNumber);let token=this._textEditor.tokenAtTextPosition(editorLocation[0],editorLocation[1]);if(!token){continue;}
const line=this._textEditor.line(editorLocation[0]);let tokenContent=line.substring(token.startColumn,token.endColumn);if(!token.type&&tokenContent==='.'){token=this._textEditor.tokenAtTextPosition(editorLocation[0],token.endColumn+1);tokenContent=line.substring(token.startColumn,token.endColumn);}
if(!token.type){continue;}
const validKeyword=token.type==='js-keyword'&&(tokenContent==='this'||tokenContent==='return'||tokenContent==='new'||tokenContent==='continue'||tokenContent==='break');if(!validKeyword&&!this._isIdentifier(token.type)){continue;}
if(previousCallLine===editorLocation[0]&&location.type!==Protocol.Debugger.BreakLocationType.Call){continue;}
let highlightRange=new TextUtils.TextRange(editorLocation[0],token.startColumn,editorLocation[0],token.endColumn-1);let decoration=this._textEditor.highlightRange(highlightRange,'source-frame-continue-to-location');this._continueToLocationDecorations.set(decoration,location.continueToLocation.bind(location));if(location.type===Protocol.Debugger.BreakLocationType.Call){previousCallLine=editorLocation[0];}
let isAsyncCall=(line[token.startColumn-1]==='.'&&tokenContent==='then')||tokenContent==='setTimeout'||tokenContent==='setInterval'||tokenContent==='postMessage';if(tokenContent==='new'){token=this._textEditor.tokenAtTextPosition(editorLocation[0],token.endColumn+1);tokenContent=line.substring(token.startColumn,token.endColumn);isAsyncCall=tokenContent==='Worker';}
const isCurrentPosition=this._executionLocation&&location.lineNumber===this._executionLocation.lineNumber&&location.columnNumber===this._executionLocation.columnNumber;if(location.type===Protocol.Debugger.BreakLocationType.Call&&isAsyncCall){const asyncStepInRange=this._findAsyncStepInRange(this._textEditor,editorLocation[0],line,token.endColumn);if(asyncStepInRange){highlightRange=new TextUtils.TextRange(editorLocation[0],asyncStepInRange.from,editorLocation[0],asyncStepInRange.to-1);decoration=this._textEditor.highlightRange(highlightRange,'source-frame-async-step-in');this._continueToLocationDecorations.set(decoration,this._asyncStepIn.bind(this,location,!!isCurrentPosition));}}}
this._continueToLocationRenderedForTest();}}
_continueToLocationRenderedForTest(){}
_findAsyncStepInRange(textEditor,editorLineNumber,line,column){let token;let tokenText;let from=column;let to=line.length;let position=line.indexOf('(',column);const argumentsStart=position;if(position===-1){return null;}
position++;skipWhitespace();if(position>=line.length){return null;}
nextToken();if(!token){return null;}
from=token.startColumn;if(token.type==='js-keyword'&&tokenText==='async'){skipWhitespace();if(position>=line.length){return{from:from,to:to};}
nextToken();if(!token){return{from:from,to:to};}}
if(token.type==='js-keyword'&&tokenText==='function'){return{from:from,to:to};}
if(token.type==='js-string'){return{from:argumentsStart,to:to};}
if(token.type&&this._isIdentifier(token.type)){return{from:from,to:to};}
if(tokenText!=='('){return null;}
const closeParen=line.indexOf(')',position);if(closeParen===-1||line.substring(position,closeParen).indexOf('(')!==-1){return{from:from,to:to};}
return{from:from,to:closeParen+1};function nextToken(){token=textEditor.tokenAtTextPosition(editorLineNumber,position);if(token){position=token.endColumn;to=token.endColumn;tokenText=line.substring(token.startColumn,token.endColumn);}}
function skipWhitespace(){while(position<line.length){if(line[position]===' '){position++;continue;}
const token=textEditor.tokenAtTextPosition(editorLineNumber,position);if(token.type==='js-comment'){position=token.endColumn;continue;}
break;}}}
_asyncStepIn(location,isCurrentPosition){if(!isCurrentPosition){location.continueToLocation(asyncStepIn);}else{asyncStepIn();}
function asyncStepIn(){location.debuggerModel.scheduleStepIntoAsync();}}
_prepareScopeVariables(callFrame,allProperties){const properties=allProperties.properties;this._clearValueWidgets();if(!properties||!properties.length||properties.length>500||!this._textEditor.isShowing()){return;}
const functionUILocation=Bindings.debuggerWorkspaceBinding.rawLocationToUILocation((callFrame.functionLocation()));const executionUILocation=Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(callFrame.location());if(!functionUILocation||!executionUILocation||functionUILocation.uiSourceCode!==this._uiSourceCode||executionUILocation.uiSourceCode!==this._uiSourceCode){return;}
const functionEditorLocation=this._transformer.rawToEditorLocation(functionUILocation.lineNumber,functionUILocation.columnNumber);const executionEditorLocation=this._transformer.rawToEditorLocation(executionUILocation.lineNumber,executionUILocation.columnNumber);const fromLine=functionEditorLocation[0];const fromColumn=functionEditorLocation[1];const toLine=executionEditorLocation[0];if(fromLine>=toLine||toLine-fromLine>500||fromLine<0||toLine>=this._textEditor.linesCount){return;}
const valuesMap=new Map();for(const property of properties){valuesMap.set(property.name,property.value);}
const namesPerLine=new Map();let skipObjectProperty=false;const tokenizer=new TextEditor.CodeMirrorUtils.TokenizerFactory().createTokenizer('text/javascript');tokenizer(this._textEditor.line(fromLine).substring(fromColumn),processToken.bind(this,fromLine));for(let i=fromLine+1;i<toLine;++i){tokenizer(this._textEditor.line(i),processToken.bind(this,i));}
function processToken(editorLineNumber,tokenValue,tokenType,column,newColumn){if(!skipObjectProperty&&tokenType&&this._isIdentifier(tokenType)&&valuesMap.get(tokenValue)){let names=namesPerLine.get(editorLineNumber);if(!names){names=new Set();namesPerLine.set(editorLineNumber,names);}
names.add(tokenValue);}
skipObjectProperty=tokenValue==='.';}
this._textEditor.operation(this._renderDecorations.bind(this,valuesMap,namesPerLine,fromLine,toLine));}
_renderDecorations(valuesMap,namesPerLine,fromLine,toLine){const formatter=new ObjectUI.RemoteObjectPreviewFormatter();for(let i=fromLine;i<toLine;++i){const names=namesPerLine.get(i);const oldWidget=this._valueWidgets.get(i);if(!names){if(oldWidget){this._valueWidgets.delete(i);this._textEditor.removeDecoration(oldWidget,i);}
continue;}
const widget=createElementWithClass('div','text-editor-value-decoration');const base=this._textEditor.cursorPositionToCoordinates(i,0);const offset=this._textEditor.cursorPositionToCoordinates(i,this._textEditor.line(i).length);const codeMirrorLinesLeftPadding=4;const left=offset.x-base.x+codeMirrorLinesLeftPadding;widget.style.left=left+'px';widget.__nameToToken=new Map();let renderedNameCount=0;for(const name of names){if(renderedNameCount>10){break;}
if(namesPerLine.get(i-1)&&namesPerLine.get(i-1).has(name)){continue;}
if(renderedNameCount){widget.createTextChild(', ');}
const nameValuePair=widget.createChild('span');widget.__nameToToken.set(name,nameValuePair);nameValuePair.createTextChild(name+' = ');const value=valuesMap.get(name);const propertyCount=value.preview?value.preview.properties.length:0;const entryCount=value.preview&&value.preview.entries?value.preview.entries.length:0;if(value.preview&&propertyCount+entryCount<10){formatter.appendObjectPreview(nameValuePair,value.preview,false);}else{nameValuePair.appendChild(ObjectUI.ObjectPropertiesSection.createValueElement(value,false,false));}
++renderedNameCount;}
let widgetChanged=true;if(oldWidget){widgetChanged=false;for(const name of widget.__nameToToken.keys()){const oldText=oldWidget.__nameToToken.get(name)?oldWidget.__nameToToken.get(name).textContent:'';const newText=widget.__nameToToken.get(name)?widget.__nameToToken.get(name).textContent:'';if(newText!==oldText){widgetChanged=true;UI.runCSSAnimationOnce((widget.__nameToToken.get(name)),'source-frame-value-update-highlight');}}
if(widgetChanged){this._valueWidgets.delete(i);this._textEditor.removeDecoration(oldWidget,i);}}
if(widgetChanged){this._valueWidgets.set(i,widget);this._textEditor.addDecoration(widget,i);}}}
_clearExecutionLine(){this._textEditor.operation(()=>{if(this._executionLocation){this._textEditor.clearExecutionLine();}
this._executionLocation=null;if(this._clearValueWidgetsTimer){clearTimeout(this._clearValueWidgetsTimer);this._clearValueWidgetsTimer=null;}
this._clearValueWidgetsTimer=setTimeout(this._clearValueWidgets.bind(this),1000);this._clearContinueToLocationsNoRestore();});}
_clearValueWidgets(){clearTimeout(this._clearValueWidgetsTimer);this._clearValueWidgetsTimer=null;this._textEditor.operation(()=>{for(const line of this._valueWidgets.keys()){this._textEditor.removeDecoration(this._valueWidgets.get(line),line);}
this._valueWidgets.clear();});}
_clearContinueToLocationsNoRestore(){if(!this._continueToLocationDecorations){return;}
this._textEditor.operation(()=>{for(const decoration of this._continueToLocationDecorations.keys()){this._textEditor.removeHighlight(decoration);}
this._continueToLocationDecorations=null;this._setAsyncStepInHoveredLine(null,false);});}
_clearContinueToLocations(){if(!this._continueToLocationDecorations){return;}
this._textEditor.operation(()=>{this._textEditor.showExecutionLineBackground();this._generateValuesInSource();this._clearContinueToLocationsNoRestore();});}
_lineBreakpointDecorations(lineNumber){return Array.from(this._breakpointDecorations).filter(decoration=>(decoration.handle.resolve()||{}).lineNumber===lineNumber);}
_breakpointDecoration(editorLineNumber,editorColumnNumber){for(const decoration of this._breakpointDecorations){const location=decoration.handle.resolve();if(!location){continue;}
if(location.lineNumber===editorLineNumber&&location.columnNumber===editorColumnNumber){return decoration;}}
return null;}
_updateBreakpointDecoration(decoration){if(!this._scheduledBreakpointDecorationUpdates){this._scheduledBreakpointDecorationUpdates=new Set();setImmediate(()=>this._textEditor.operation(update.bind(this)));}
this._scheduledBreakpointDecorationUpdates.add(decoration);function update(){if(!this._scheduledBreakpointDecorationUpdates){return;}
const editorLineNumbers=new Set();for(const decoration of this._scheduledBreakpointDecorationUpdates){const location=decoration.handle.resolve();if(!location){continue;}
editorLineNumbers.add(location.lineNumber);}
this._scheduledBreakpointDecorationUpdates=null;let waitingForInlineDecorations=false;for(const lineNumber of editorLineNumbers){const decorations=this._lineBreakpointDecorations(lineNumber);updateGutter.call(this,lineNumber,decorations);if(this._possibleBreakpointsRequested.has(lineNumber)){waitingForInlineDecorations=true;continue;}
updateInlineDecorations.call(this,lineNumber,decorations);}
if(!waitingForInlineDecorations){this._breakpointDecorationsUpdatedForTest();}}
function updateGutter(editorLineNumber,decorations){this._textEditor.toggleLineClass(editorLineNumber,'cm-breakpoint',false);this._textEditor.toggleLineClass(editorLineNumber,'cm-breakpoint-disabled',false);this._textEditor.toggleLineClass(editorLineNumber,'cm-breakpoint-conditional',false);if(decorations.length){decorations.sort(Sources.DebuggerPlugin.BreakpointDecoration.mostSpecificFirst);this._textEditor.toggleLineClass(editorLineNumber,'cm-breakpoint',true);this._textEditor.toggleLineClass(editorLineNumber,'cm-breakpoint-disabled',!decorations[0].enabled||this._muted);this._textEditor.toggleLineClass(editorLineNumber,'cm-breakpoint-conditional',!!decorations[0].condition);}}
function updateInlineDecorations(editorLineNumber,decorations){const actualBookmarks=new Set(decorations.map(decoration=>decoration.bookmark).filter(bookmark=>!!bookmark));const lineEnd=this._textEditor.line(editorLineNumber).length;const bookmarks=this._textEditor.bookmarks(new TextUtils.TextRange(editorLineNumber,0,editorLineNumber,lineEnd),Sources.DebuggerPlugin.BreakpointDecoration.bookmarkSymbol);for(const bookmark of bookmarks){if(!actualBookmarks.has(bookmark)){bookmark.clear();}}
if(!decorations.length){return;}
if(decorations.length>1){for(const decoration of decorations){decoration.update();if(!this._muted){decoration.show();}else{decoration.hide();}}}else{decorations[0].update();decorations[0].hide();}}}
_breakpointDecorationsUpdatedForTest(){}
_inlineBreakpointClick(decoration,event){event.consume(true);if(decoration.breakpoint){if(event.shiftKey){decoration.breakpoint.setEnabled(!decoration.breakpoint.enabled());}else{decoration.breakpoint.remove();}}else{const editorLocation=decoration.handle.resolve();if(!editorLocation){return;}
const location=this._transformer.editorToRawLocation(editorLocation.lineNumber,editorLocation.columnNumber);this._setBreakpoint(location[0],location[1],decoration.condition,true);}}
_inlineBreakpointContextMenu(decoration,event){event.consume(true);const editorLocation=decoration.handle.resolve();if(!editorLocation){return;}
const location=this._transformer.editorToRawLocation(editorLocation[0],editorLocation[1]);const contextMenu=new UI.ContextMenu(event);if(decoration.breakpoint){contextMenu.debugSection().appendItem(Common.UIString('Edit breakpoint\u2026'),this._editBreakpointCondition.bind(this,editorLocation.lineNumber,decoration.breakpoint,null));}else{contextMenu.debugSection().appendItem(Common.UIString('Add conditional breakpoint\u2026'),this._editBreakpointCondition.bind(this,editorLocation.lineNumber,null,editorLocation));contextMenu.debugSection().appendItem(ls`Add logpoint\u2026`,this._editBreakpointCondition.bind(this,editorLocation.lineNumber,null,editorLocation,true));contextMenu.debugSection().appendItem(Common.UIString('Never pause here'),this._setBreakpoint.bind(this,location[0],location[1],'false',true));}
contextMenu.show();}
_shouldIgnoreExternalBreakpointEvents(event){const uiLocation=(event.data.uiLocation);if(uiLocation.uiSourceCode!==this._uiSourceCode){return true;}
if(this._muted){return true;}
const scriptFiles=this._scriptFileForDebuggerModel.valuesArray();for(let i=0;i<scriptFiles.length;++i){if(scriptFiles[i].isDivergingFromVM()||scriptFiles[i].isMergingToVM()){return true;}}
return false;}
_breakpointAdded(event){if(this._shouldIgnoreExternalBreakpointEvents(event)){return;}
const uiLocation=(event.data.uiLocation);const breakpoint=(event.data.breakpoint);this._addBreakpoint(uiLocation,breakpoint);}
_addBreakpoint(uiLocation,breakpoint){const editorLocation=this._transformer.rawToEditorLocation(uiLocation.lineNumber,uiLocation.columnNumber);const lineDecorations=this._lineBreakpointDecorations(uiLocation.lineNumber);let decoration=this._breakpointDecoration(editorLocation[0],editorLocation[1]);if(decoration){decoration.breakpoint=breakpoint;decoration.condition=breakpoint.condition();decoration.enabled=breakpoint.enabled();}else{const handle=this._textEditor.textEditorPositionHandle(editorLocation[0],editorLocation[1]);decoration=new Sources.DebuggerPlugin.BreakpointDecoration(this._textEditor,handle,breakpoint.condition(),breakpoint.enabled(),breakpoint);decoration.element.addEventListener('click',this._inlineBreakpointClick.bind(this,decoration),true);decoration.element.addEventListener('contextmenu',this._inlineBreakpointContextMenu.bind(this,decoration),true);this._breakpointDecorations.add(decoration);}
this._decorationByBreakpoint.set(breakpoint,decoration);this._updateBreakpointDecoration(decoration);if(breakpoint.enabled()&&!lineDecorations.length){this._possibleBreakpointsRequested.add(editorLocation[0]);const start=this._transformer.editorToRawLocation(editorLocation[0],0);const end=this._transformer.editorToRawLocation(editorLocation[0]+1,0);this._breakpointManager.possibleBreakpoints(this._uiSourceCode,new TextUtils.TextRange(start[0],start[1],end[0],end[1])).then(addInlineDecorations.bind(this,editorLocation[0]));}
function addInlineDecorations(editorLineNumber,possibleLocations){this._possibleBreakpointsRequested.delete(editorLineNumber);const decorations=this._lineBreakpointDecorations(editorLineNumber);for(const decoration of decorations){this._updateBreakpointDecoration(decoration);}
if(!decorations.some(decoration=>!!decoration.breakpoint)){return;}
const columns=new Set();for(const decoration of decorations){const editorLocation=decoration.handle.resolve();if(!editorLocation){continue;}
columns.add(editorLocation.columnNumber);}
for(const location of possibleLocations){const editorLocation=this._transformer.rawToEditorLocation(location.lineNumber,location.columnNumber);if(columns.has(editorLocation[1])){continue;}
const handle=this._textEditor.textEditorPositionHandle(editorLocation[0],editorLocation[1]);const decoration=new Sources.DebuggerPlugin.BreakpointDecoration(this._textEditor,handle,'',false,null);decoration.element.addEventListener('click',this._inlineBreakpointClick.bind(this,decoration),true);decoration.element.addEventListener('contextmenu',this._inlineBreakpointContextMenu.bind(this,decoration),true);this._breakpointDecorations.add(decoration);this._updateBreakpointDecoration(decoration);}}}
_breakpointRemoved(event){if(this._shouldIgnoreExternalBreakpointEvents(event)){return;}
const uiLocation=(event.data.uiLocation);const breakpoint=(event.data.breakpoint);const decoration=this._decorationByBreakpoint.get(breakpoint);if(!decoration){return;}
this._decorationByBreakpoint.delete(breakpoint);const editorLocation=this._transformer.rawToEditorLocation(uiLocation.lineNumber,uiLocation.columnNumber);decoration.breakpoint=null;decoration.enabled=false;const lineDecorations=this._lineBreakpointDecorations(editorLocation[0]);if(!lineDecorations.some(decoration=>!!decoration.breakpoint)){for(const lineDecoration of lineDecorations){this._breakpointDecorations.delete(lineDecoration);this._updateBreakpointDecoration(lineDecoration);}}else{this._updateBreakpointDecoration(decoration);}}
_initializeBreakpoints(){const breakpointLocations=this._breakpointManager.breakpointLocationsForUISourceCode(this._uiSourceCode);for(const breakpointLocation of breakpointLocations){this._addBreakpoint(breakpointLocation.uiLocation,breakpointLocation.breakpoint);}}
_updateLinesWithoutMappingHighlight(){const isSourceMapSource=!!Bindings.CompilerScriptMapping.uiSourceCodeOrigin(this._uiSourceCode);if(!isSourceMapSource){return;}
const linesCount=this._textEditor.linesCount;for(let i=0;i<linesCount;++i){const lineHasMapping=Bindings.CompilerScriptMapping.uiLineHasMapping(this._uiSourceCode,i);if(!lineHasMapping){this._hasLineWithoutMapping=true;}
if(this._hasLineWithoutMapping){this._textEditor.toggleLineClass(i,'cm-line-without-source-mapping',!lineHasMapping);}}}
_updateScriptFiles(){for(const debuggerModel of SDK.targetManager.models(SDK.DebuggerModel)){const scriptFile=Bindings.debuggerWorkspaceBinding.scriptFile(this._uiSourceCode,debuggerModel);if(scriptFile){this._updateScriptFile(debuggerModel);}}}
_updateScriptFile(debuggerModel){const oldScriptFile=this._scriptFileForDebuggerModel.get(debuggerModel);const newScriptFile=Bindings.debuggerWorkspaceBinding.scriptFile(this._uiSourceCode,debuggerModel);this._scriptFileForDebuggerModel.delete(debuggerModel);if(oldScriptFile){oldScriptFile.removeEventListener(Bindings.ResourceScriptFile.Events.DidMergeToVM,this._didMergeToVM,this);oldScriptFile.removeEventListener(Bindings.ResourceScriptFile.Events.DidDivergeFromVM,this._didDivergeFromVM,this);if(this._muted&&!this._uiSourceCode.isDirty()){this._restoreBreakpointsIfConsistentScripts();}}
if(!newScriptFile){return;}
this._scriptFileForDebuggerModel.set(debuggerModel,newScriptFile);newScriptFile.addEventListener(Bindings.ResourceScriptFile.Events.DidMergeToVM,this._didMergeToVM,this);newScriptFile.addEventListener(Bindings.ResourceScriptFile.Events.DidDivergeFromVM,this._didDivergeFromVM,this);newScriptFile.checkMapping();if(newScriptFile.hasSourceMapURL()){this._showSourceMapInfobar();}}
_showSourceMapInfobar(){if(this._sourceMapInfobar){return;}
this._sourceMapInfobar=UI.Infobar.create(UI.Infobar.Type.Info,Common.UIString('Source Map detected.'),Common.settings.createSetting('sourceMapInfobarDisabled',false));if(!this._sourceMapInfobar){return;}
this._sourceMapInfobar.createDetailsRowMessage(Common.UIString('Associated files should be added to the file tree. You can debug these resolved source files as regular JavaScript files.'));this._sourceMapInfobar.createDetailsRowMessage(Common.UIString('Associated files are available via file tree or %s.',UI.shortcutRegistry.shortcutTitleForAction('quickOpen.show')));this._sourceMapInfobar.setCloseCallback(()=>this._sourceMapInfobar=null);this._textEditor.attachInfobar(this._sourceMapInfobar);}
_detectMinified(){const content=this._uiSourceCode.content();if(!content||!TextUtils.isMinified(content)){return;}
this._prettyPrintInfobar=UI.Infobar.create(UI.Infobar.Type.Info,Common.UIString('Pretty-print this minified file?'),Common.settings.createSetting('prettyPrintInfobarDisabled',false));if(!this._prettyPrintInfobar){return;}
this._prettyPrintInfobar.setCloseCallback(()=>this._prettyPrintInfobar=null);const toolbar=new UI.Toolbar('');const button=new UI.ToolbarButton('','largeicon-pretty-print');toolbar.appendToolbarItem(button);toolbar.element.style.display='inline-block';toolbar.element.style.verticalAlign='middle';toolbar.element.style.marginBottom='3px';toolbar.element.style.pointerEvents='none';toolbar.element.tabIndex=-1;const element=this._prettyPrintInfobar.createDetailsRowMessage();element.appendChild(UI.formatLocalized('You can click the %s button on the bottom status bar, and continue debugging with the new formatted source.',[toolbar.element]));this._textEditor.attachInfobar(this._prettyPrintInfobar);}
_handleGutterClick(event){if(this._muted){return;}
const eventData=(event.data);if(eventData.gutterType!==SourceFrame.SourcesTextEditor.lineNumbersGutterType){return;}
const editorLineNumber=eventData.lineNumber;const eventObject=eventData.event;if(eventObject.button!==0||eventObject.altKey||eventObject.ctrlKey||eventObject.metaKey){return;}
this._toggleBreakpoint(editorLineNumber,eventObject.shiftKey);eventObject.consume(true);}
_toggleBreakpoint(editorLineNumber,onlyDisable){const decorations=this._lineBreakpointDecorations(editorLineNumber);if(!decorations.length){this._createNewBreakpoint(editorLineNumber,'',true);return;}
const hasDisabled=this._textEditor.hasLineClass(editorLineNumber,'cm-breakpoint-disabled');const breakpoints=decorations.map(decoration=>decoration.breakpoint).filter(breakpoint=>!!breakpoint);for(const breakpoint of breakpoints){if(onlyDisable){breakpoint.setEnabled(hasDisabled);}else{breakpoint.remove();}}}
async _createNewBreakpoint(editorLineNumber,condition,enabled){Host.userMetrics.actionTaken(Host.UserMetrics.Action.ScriptsBreakpointSet);if(editorLineNumber<this._textEditor.linesCount){const lineLength=Math.min(this._textEditor.line(editorLineNumber).length,1024);const start=this._transformer.editorToRawLocation(editorLineNumber,0);const end=this._transformer.editorToRawLocation(editorLineNumber,lineLength);const locations=await this._breakpointManager.possibleBreakpoints(this._uiSourceCode,new TextUtils.TextRange(start[0],start[1],end[0],end[1]));if(locations&&locations.length){this._setBreakpoint(locations[0].lineNumber,locations[0].columnNumber,condition,enabled);return;}}
const origin=this._transformer.editorToRawLocation(editorLineNumber,0);await this._setBreakpoint(origin[0],origin[1],condition,enabled);}
toggleBreakpointOnCurrentLine(onlyDisable){if(this._muted){return;}
const selection=this._textEditor.selection();if(!selection){return;}
this._toggleBreakpoint(selection.startLine,onlyDisable);}
_setBreakpoint(lineNumber,columnNumber,condition,enabled){if(!Bindings.CompilerScriptMapping.uiLineHasMapping(this._uiSourceCode,lineNumber)){return;}
Common.moduleSetting('breakpointsActive').set(true);this._breakpointManager.setBreakpoint(this._uiSourceCode,lineNumber,columnNumber,condition,enabled);this._breakpointWasSetForTest(lineNumber,columnNumber,condition,enabled);}
_breakpointWasSetForTest(lineNumber,columnNumber,condition,enabled){}
_callFrameChanged(){this._liveLocationPool.disposeAll();const callFrame=UI.context.flavor(SDK.DebuggerModel.CallFrame);if(!callFrame){this._clearExecutionLine();return;}
Bindings.debuggerWorkspaceBinding.createCallFrameLiveLocation(callFrame.location(),this._executionLineChanged.bind(this),this._liveLocationPool);}
dispose(){for(const decoration of this._breakpointDecorations){decoration.dispose();}
this._breakpointDecorations.clear();if(this._scheduledBreakpointDecorationUpdates){for(const decoration of this._scheduledBreakpointDecorationUpdates){decoration.dispose();}
this._scheduledBreakpointDecorationUpdates.clear();}
this._hideBlackboxInfobar();if(this._sourceMapInfobar){this._sourceMapInfobar.dispose();}
if(this._prettyPrintInfobar){this._prettyPrintInfobar.dispose();}
this._scriptsPanel.element.removeEventListener('scroll',this._boundPopoverHelperHide,true);for(const script of this._scriptFileForDebuggerModel.values()){script.removeEventListener(Bindings.ResourceScriptFile.Events.DidMergeToVM,this._didMergeToVM,this);script.removeEventListener(Bindings.ResourceScriptFile.Events.DidDivergeFromVM,this._didDivergeFromVM,this);}
this._scriptFileForDebuggerModel.clear();this._textEditor.element.removeEventListener('keydown',this._boundKeyDown,true);this._textEditor.element.removeEventListener('keyup',this._boundKeyUp,true);this._textEditor.element.removeEventListener('mousemove',this._boundMouseMove,false);this._textEditor.element.removeEventListener('mousedown',this._boundMouseDown,true);this._textEditor.element.removeEventListener('focusout',this._boundBlur,false);this._textEditor.element.removeEventListener('wheel',this._boundWheel,true);this._textEditor.removeEventListener(SourceFrame.SourcesTextEditor.Events.GutterClick,this._handleGutterClick,this);this._popoverHelper.hidePopover();this._popoverHelper.dispose();this._breakpointManager.removeEventListener(Bindings.BreakpointManager.Events.BreakpointAdded,this._breakpointAdded,this);this._breakpointManager.removeEventListener(Bindings.BreakpointManager.Events.BreakpointRemoved,this._breakpointRemoved,this);this._uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._workingCopyChanged,this);this._uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._workingCopyCommitted,this);Common.moduleSetting('skipStackFramesPattern').removeChangeListener(this._showBlackboxInfobarIfNeeded,this);Common.moduleSetting('skipContentScripts').removeChangeListener(this._showBlackboxInfobarIfNeeded,this);super.dispose();this._clearExecutionLine();UI.context.removeFlavorChangeListener(SDK.DebuggerModel.CallFrame,this._callFrameChanged,this);this._liveLocationPool.disposeAll();}};Sources.DebuggerPlugin.BreakpointDecoration=class{constructor(textEditor,handle,condition,enabled,breakpoint){this._textEditor=textEditor;this.handle=handle;this.condition=condition;this.enabled=enabled;this.breakpoint=breakpoint;this.element=UI.Icon.create('smallicon-inline-breakpoint');this.element.classList.toggle('cm-inline-breakpoint',true);this.bookmark=null;}
static mostSpecificFirst(decoration1,decoration2){if(decoration1.enabled!==decoration2.enabled){return decoration1.enabled?-1:1;}
if(!!decoration1.condition!==!!decoration2.condition){return!!decoration1.condition?-1:1;}
return 0;}
update(){if(!this.condition){this.element.setIconType('smallicon-inline-breakpoint');}else{this.element.setIconType('smallicon-inline-breakpoint-conditional');}
this.element.classList.toggle('cm-inline-disabled',!this.enabled);}
show(){if(this.bookmark){return;}
const editorLocation=this.handle.resolve();if(!editorLocation){return;}
this.bookmark=this._textEditor.addBookmark(editorLocation.lineNumber,editorLocation.columnNumber,this.element,Sources.DebuggerPlugin.BreakpointDecoration.bookmarkSymbol);this.bookmark[Sources.DebuggerPlugin.BreakpointDecoration._elementSymbolForTest]=this.element;}
hide(){if(!this.bookmark){return;}
this.bookmark.clear();this.bookmark=null;}
dispose(){const location=this.handle.resolve();if(location){this._textEditor.toggleLineClass(location.lineNumber,'cm-breakpoint',false);this._textEditor.toggleLineClass(location.lineNumber,'cm-breakpoint-disabled',false);this._textEditor.toggleLineClass(location.lineNumber,'cm-breakpoint-conditional',false);}
this.hide();}};Sources.DebuggerPlugin.BreakpointDecoration.bookmarkSymbol=Symbol('bookmark');Sources.DebuggerPlugin.BreakpointDecoration._elementSymbolForTest=Symbol('element');Sources.DebuggerPlugin.continueToLocationDecorationSymbol=Symbol('bookmark');;Sources.CSSPlugin=class extends Sources.UISourceCodeFrame.Plugin{constructor(textEditor){super();this._textEditor=textEditor;this._swatchPopoverHelper=new InlineEditor.SwatchPopoverHelper();this._muteSwatchProcessing=false;this._hadSwatchChange=false;this._bezierEditor=null;this._editedSwatchTextRange=null;this._spectrum=null;this._currentSwatch=null;this._textEditor.configureAutocomplete({suggestionsCallback:this._cssSuggestions.bind(this),isWordChar:this._isWordChar.bind(this)});this._textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.ScrollChanged,this._textEditorScrolled,this);this._textEditor.addEventListener(UI.TextEditor.Events.TextChanged,this._onTextChanged,this);this._updateSwatches(0,this._textEditor.linesCount-1);this._shortcuts={};this._registerShortcuts();this._boundHandleKeyDown=this._handleKeyDown.bind(this);this._textEditor.element.addEventListener('keydown',this._boundHandleKeyDown,false);}
static accepts(uiSourceCode){return uiSourceCode.contentType().isStyleSheet();}
_registerShortcuts(){const shortcutKeys=UI.ShortcutsScreen.SourcesPanelShortcuts;for(const descriptor of shortcutKeys.IncreaseCSSUnitByOne){this._shortcuts[descriptor.key]=this._handleUnitModification.bind(this,1);}
for(const descriptor of shortcutKeys.DecreaseCSSUnitByOne){this._shortcuts[descriptor.key]=this._handleUnitModification.bind(this,-1);}
for(const descriptor of shortcutKeys.IncreaseCSSUnitByTen){this._shortcuts[descriptor.key]=this._handleUnitModification.bind(this,10);}
for(const descriptor of shortcutKeys.DecreaseCSSUnitByTen){this._shortcuts[descriptor.key]=this._handleUnitModification.bind(this,-10);}}
_handleKeyDown(event){const shortcutKey=UI.KeyboardShortcut.makeKeyFromEvent((event));const handler=this._shortcuts[shortcutKey];if(handler&&handler()){event.consume(true);}}
_textEditorScrolled(){if(this._swatchPopoverHelper.isShowing()){this._swatchPopoverHelper.hide(true);}}
_modifyUnit(unit,change){const unitValue=parseInt(unit,10);if(isNaN(unitValue)){return null;}
const tail=unit.substring((unitValue).toString().length);return String.sprintf('%d%s',unitValue+change,tail);}
_handleUnitModification(change){const selection=this._textEditor.selection().normalize();let token=this._textEditor.tokenAtTextPosition(selection.startLine,selection.startColumn);if(!token){if(selection.startColumn>0){token=this._textEditor.tokenAtTextPosition(selection.startLine,selection.startColumn-1);}
if(!token){return false;}}
if(token.type!=='css-number'){return false;}
const cssUnitRange=new TextUtils.TextRange(selection.startLine,token.startColumn,selection.startLine,token.endColumn);const cssUnitText=this._textEditor.text(cssUnitRange);const newUnitText=this._modifyUnit(cssUnitText,change);if(!newUnitText){return false;}
this._textEditor.editRange(cssUnitRange,newUnitText);selection.startColumn=token.startColumn;selection.endColumn=selection.startColumn+newUnitText.length;this._textEditor.setSelection(selection);return true;}
_updateSwatches(startLine,endLine){const swatches=[];const swatchPositions=[];const regexes=[SDK.CSSMetadata.VariableRegex,SDK.CSSMetadata.URLRegex,UI.Geometry.CubicBezier.Regex,Common.Color.Regex];const handlers=new Map();handlers.set(Common.Color.Regex,this._createColorSwatch.bind(this));handlers.set(UI.Geometry.CubicBezier.Regex,this._createBezierSwatch.bind(this));for(let lineNumber=startLine;lineNumber<=endLine;lineNumber++){const line=this._textEditor.line(lineNumber).substring(0,Sources.CSSPlugin.maxSwatchProcessingLength);const results=TextUtils.TextUtils.splitStringByRegexes(line,regexes);for(let i=0;i<results.length;i++){const result=results[i];if(result.regexIndex===-1||!handlers.has(regexes[result.regexIndex])){continue;}
const delimiters=/[\s:;,(){}]/;const positionBefore=result.position-1;const positionAfter=result.position+result.value.length;if(positionBefore>=0&&!delimiters.test(line.charAt(positionBefore))||positionAfter<line.length&&!delimiters.test(line.charAt(positionAfter))){continue;}
const swatch=handlers.get(regexes[result.regexIndex])(result.value);if(!swatch){continue;}
swatches.push(swatch);swatchPositions.push(TextUtils.TextRange.createFromLocation(lineNumber,result.position));}}
this._textEditor.operation(putSwatchesInline.bind(this));function putSwatchesInline(){const clearRange=new TextUtils.TextRange(startLine,0,endLine,this._textEditor.line(endLine).length);this._textEditor.bookmarks(clearRange,Sources.CSSPlugin.SwatchBookmark).forEach(marker=>marker.clear());for(let i=0;i<swatches.length;i++){const swatch=swatches[i];const swatchPosition=swatchPositions[i];const bookmark=this._textEditor.addBookmark(swatchPosition.startLine,swatchPosition.startColumn,swatch,Sources.CSSPlugin.SwatchBookmark);swatch[Sources.CSSPlugin.SwatchBookmark]=bookmark;}}}
_createColorSwatch(text){const color=Common.Color.parse(text);if(!color){return null;}
const swatch=InlineEditor.ColorSwatch.create();swatch.setColor(color);swatch.iconElement().title=Common.UIString('Open color picker.');swatch.iconElement().addEventListener('click',this._swatchIconClicked.bind(this,swatch),false);swatch.hideText(true);return swatch;}
_createBezierSwatch(text){if(!UI.Geometry.CubicBezier.parse(text)){return null;}
const swatch=InlineEditor.BezierSwatch.create();swatch.setBezierText(text);swatch.iconElement().title=Common.UIString('Open cubic bezier editor.');swatch.iconElement().addEventListener('click',this._swatchIconClicked.bind(this,swatch),false);swatch.hideText(true);return swatch;}
_swatchIconClicked(swatch,event){event.consume(true);this._hadSwatchChange=false;this._muteSwatchProcessing=true;const swatchPosition=swatch[Sources.CSSPlugin.SwatchBookmark].position();this._textEditor.setSelection(swatchPosition);this._editedSwatchTextRange=swatchPosition.clone();this._editedSwatchTextRange.endColumn+=swatch.textContent.length;this._currentSwatch=swatch;if(swatch instanceof InlineEditor.ColorSwatch){this._showSpectrum(swatch);}else if(swatch instanceof InlineEditor.BezierSwatch){this._showBezierEditor(swatch);}}
_showSpectrum(swatch){if(!this._spectrum){this._spectrum=new ColorPicker.Spectrum();this._spectrum.addEventListener(ColorPicker.Spectrum.Events.SizeChanged,this._spectrumResized,this);this._spectrum.addEventListener(ColorPicker.Spectrum.Events.ColorChanged,this._spectrumChanged,this);}
this._spectrum.setColor(swatch.color(),swatch.format());this._swatchPopoverHelper.show(this._spectrum,swatch.iconElement(),this._swatchPopoverHidden.bind(this));}
_spectrumResized(event){this._swatchPopoverHelper.reposition();}
_spectrumChanged(event){const colorString=(event.data);const color=Common.Color.parse(colorString);if(!color){return;}
this._currentSwatch.setColor(color);this._changeSwatchText(colorString);}
_showBezierEditor(swatch){if(!this._bezierEditor){this._bezierEditor=new InlineEditor.BezierEditor();this._bezierEditor.addEventListener(InlineEditor.BezierEditor.Events.BezierChanged,this._bezierChanged,this);}
let cubicBezier=UI.Geometry.CubicBezier.parse(swatch.bezierText());if(!cubicBezier){cubicBezier=(UI.Geometry.CubicBezier.parse('linear'));}
this._bezierEditor.setBezier(cubicBezier);this._swatchPopoverHelper.show(this._bezierEditor,swatch.iconElement(),this._swatchPopoverHidden.bind(this));}
_bezierChanged(event){const bezierString=(event.data);this._currentSwatch.setBezierText(bezierString);this._changeSwatchText(bezierString);}
_changeSwatchText(text){this._hadSwatchChange=true;this._textEditor.editRange((this._editedSwatchTextRange),text,'*swatch-text-changed');this._editedSwatchTextRange.endColumn=this._editedSwatchTextRange.startColumn+text.length;}
_swatchPopoverHidden(commitEdit){this._muteSwatchProcessing=false;if(!commitEdit&&this._hadSwatchChange){this._textEditor.undo();}}
_onTextChanged(event){if(!this._muteSwatchProcessing){this._updateSwatches(event.data.newRange.startLine,event.data.newRange.endLine);}}
_isWordChar(char){return TextUtils.TextUtils.isWordChar(char)||char==='.'||char==='-'||char==='$';}
_cssSuggestions(prefixRange,substituteRange){const prefix=this._textEditor.text(prefixRange);if(prefix.startsWith('$')){return null;}
const propertyToken=this._backtrackPropertyToken(prefixRange.startLine,prefixRange.startColumn-1);if(!propertyToken){return null;}
const line=this._textEditor.line(prefixRange.startLine);const tokenContent=line.substring(propertyToken.startColumn,propertyToken.endColumn);const propertyValues=SDK.cssMetadata().propertyValues(tokenContent);return Promise.resolve(propertyValues.filter(value=>value.startsWith(prefix)).map(value=>({text:value})));}
_backtrackPropertyToken(lineNumber,columnNumber){const backtrackDepth=10;let tokenPosition=columnNumber;const line=this._textEditor.line(lineNumber);let seenColon=false;for(let i=0;i<backtrackDepth&&tokenPosition>=0;++i){const token=this._textEditor.tokenAtTextPosition(lineNumber,tokenPosition);if(!token){return null;}
if(token.type==='css-property'){return seenColon?token:null;}
if(token.type&&!(token.type.indexOf('whitespace')!==-1||token.type.startsWith('css-comment'))){return null;}
if(!token.type&&line.substring(token.startColumn,token.endColumn)===':'){if(!seenColon){seenColon=true;}else{return null;}}
tokenPosition=token.startColumn-1;}
return null;}
dispose(){if(this._swatchPopoverHelper.isShowing()){this._swatchPopoverHelper.hide(true);}
this._textEditor.removeEventListener(SourceFrame.SourcesTextEditor.Events.ScrollChanged,this._textEditorScrolled,this);this._textEditor.removeEventListener(UI.TextEditor.Events.TextChanged,this._onTextChanged,this);this._textEditor.bookmarks(this._textEditor.fullRange(),Sources.CSSPlugin.SwatchBookmark).forEach(marker=>marker.clear());this._textEditor.element.removeEventListener('keydown',this._boundHandleKeyDown,false);}};Sources.CSSPlugin.maxSwatchProcessingLength=300;Sources.CSSPlugin.SwatchBookmark=Symbol('swatch');;Sources.GutterDiffPlugin=class extends Sources.UISourceCodeFrame.Plugin{constructor(textEditor,uiSourceCode){super();this._textEditor=textEditor;this._uiSourceCode=uiSourceCode;this._decorations=[];this._textEditor.installGutter(Sources.GutterDiffPlugin.DiffGutterType,true);this._workspaceDiff=WorkspaceDiff.workspaceDiff();this._workspaceDiff.subscribeToDiffChange(this._uiSourceCode,this._update,this);this._update();}
static accepts(uiSourceCode){return uiSourceCode.project().type()===Workspace.projectTypes.Network;}
_updateDecorations(removed,added){this._textEditor.operation(operation);function operation(){for(const decoration of removed){decoration.remove();}
for(const decoration of added){decoration.install();}}}
_update(){if(this._uiSourceCode){this._workspaceDiff.requestDiff(this._uiSourceCode).then(this._innerUpdate.bind(this));}else{this._innerUpdate(null);}}
_innerUpdate(lineDiff){if(!lineDiff){this._updateDecorations(this._decorations,[]);this._decorations=[];return;}
const oldDecorations=new Map();for(let i=0;i<this._decorations.length;++i){const decoration=this._decorations[i];const lineNumber=decoration.lineNumber();if(lineNumber===-1){continue;}
oldDecorations.set(lineNumber,decoration);}
const diff=SourceFrame.SourceCodeDiff.computeDiff(lineDiff);const newDecorations=new Map();for(let i=0;i<diff.length;++i){const diffEntry=diff[i];for(let lineNumber=diffEntry.from;lineNumber<diffEntry.to;++lineNumber){newDecorations.set(lineNumber,{lineNumber:lineNumber,type:diffEntry.type});}}
const decorationDiff=oldDecorations.diff(newDecorations,(e1,e2)=>e1.type===e2.type);const addedDecorations=decorationDiff.added.map(entry=>new Sources.GutterDiffPlugin.GutterDecoration(this._textEditor,entry.lineNumber,entry.type));this._decorations=decorationDiff.equal.concat(addedDecorations);this._updateDecorations(decorationDiff.removed,addedDecorations);this._decorationsSetForTest(newDecorations);}
_decorationsSetForTest(decorations){}
async populateLineGutterContextMenu(contextMenu,lineNumber){Sources.GutterDiffPlugin._appendRevealDiffContextMenu(contextMenu,this._uiSourceCode);}
async populateTextAreaContextMenu(contextMenu,lineNumber,columnNumber){Sources.GutterDiffPlugin._appendRevealDiffContextMenu(contextMenu,this._uiSourceCode);}
static _appendRevealDiffContextMenu(contextMenu,uiSourceCode){if(!WorkspaceDiff.workspaceDiff().isUISourceCodeModified(uiSourceCode)){return;}
contextMenu.revealSection().appendItem(ls`Local Modifications...`,()=>{Common.Revealer.reveal(new WorkspaceDiff.DiffUILocation(uiSourceCode));});}
dispose(){for(const decoration of this._decorations){decoration.remove();}
WorkspaceDiff.workspaceDiff().unsubscribeFromDiffChange(this._uiSourceCode,this._update,this);}};Sources.GutterDiffPlugin.GutterDecoration=class{constructor(textEditor,lineNumber,type){this._textEditor=textEditor;this._position=this._textEditor.textEditorPositionHandle(lineNumber,0);this._className='';if(type===SourceFrame.SourceCodeDiff.EditType.Insert){this._className='diff-entry-insert';}else if(type===SourceFrame.SourceCodeDiff.EditType.Delete){this._className='diff-entry-delete';}else if(type===SourceFrame.SourceCodeDiff.EditType.Modify){this._className='diff-entry-modify';}
this.type=type;}
lineNumber(){const location=this._position.resolve();if(!location){return-1;}
return location.lineNumber;}
install(){const location=this._position.resolve();if(!location){return;}
const element=createElementWithClass('div','diff-marker');element.textContent='\xA0';this._textEditor.setGutterDecoration(location.lineNumber,Sources.GutterDiffPlugin.DiffGutterType,element);this._textEditor.toggleLineClass(location.lineNumber,this._className,true);}
remove(){const location=this._position.resolve();if(!location){return;}
this._textEditor.setGutterDecoration(location.lineNumber,Sources.GutterDiffPlugin.DiffGutterType,null);this._textEditor.toggleLineClass(location.lineNumber,this._className,false);}};Sources.GutterDiffPlugin.DiffGutterType='CodeMirror-gutter-diff';Sources.GutterDiffPlugin.ContextMenuProvider=class{appendApplicableItems(event,contextMenu,target){let uiSourceCode=(target);const binding=Persistence.persistence.binding(uiSourceCode);if(binding){uiSourceCode=binding.network;}
Sources.GutterDiffPlugin._appendRevealDiffContextMenu(contextMenu,uiSourceCode);}};;Sources.SearchSourcesView=class extends Search.SearchView{constructor(){super('sources');}
static async openSearch(query,searchImmediately){const view=UI.viewManager.view('sources.search-sources-tab');const location=await UI.viewManager.resolveLocation('drawer-view');location.appendView(view);await UI.viewManager.revealView((view));const widget=(await view.widget());widget.toggle(query,!!searchImmediately);return widget;}
createScope(){return new Sources.SourcesSearchScope();}};Sources.SearchSourcesView.ActionDelegate=class{handleAction(context,actionId){this._showSearch();return true;}
_showSearch(){const selection=UI.inspectorView.element.window().getSelection();let queryCandidate='';if(selection.rangeCount){queryCandidate=selection.toString().replace(/\r?\n.*/,'');}
return Sources.SearchSourcesView.openSearch(queryCandidate);}};;Sources.NavigatorView=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('sources/navigatorView.css');this._placeholder=null;this._scriptsTree=new UI.TreeOutlineInShadow();this._scriptsTree.registerRequiredCSS('sources/navigatorTree.css');this._scriptsTree.setComparator(Sources.NavigatorView._treeElementsCompare);this.contentElement.appendChild(this._scriptsTree.element);this.setDefaultFocusedElement(this._scriptsTree.element);this._uiSourceCodeNodes=new Platform.Multimap();this._subfolderNodes=new Map();this._rootNode=new Sources.NavigatorRootTreeNode(this);this._rootNode.populate();this._frameNodes=new Map();this.contentElement.addEventListener('contextmenu',this.handleContextMenu.bind(this),false);UI.shortcutRegistry.addShortcutListener(this.contentElement,'sources.rename',this._renameShortcut.bind(this),true);this._navigatorGroupByFolderSetting=Common.moduleSetting('navigatorGroupByFolder');this._navigatorGroupByFolderSetting.addChangeListener(this._groupingChanged.bind(this));this._initGrouping();Persistence.persistence.addEventListener(Persistence.Persistence.Events.BindingCreated,this._onBindingChanged,this);Persistence.persistence.addEventListener(Persistence.Persistence.Events.BindingRemoved,this._onBindingChanged,this);SDK.targetManager.addEventListener(SDK.TargetManager.Events.NameChanged,this._targetNameChanged,this);SDK.targetManager.observeTargets(this);this._resetWorkspace(Workspace.workspace);this._workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this));Bindings.networkProjectManager.addEventListener(Bindings.NetworkProjectManager.Events.FrameAttributionAdded,this._frameAttributionAdded,this);Bindings.networkProjectManager.addEventListener(Bindings.NetworkProjectManager.Events.FrameAttributionRemoved,this._frameAttributionRemoved,this);}
static _treeElementOrder(treeElement){if(treeElement._boostOrder){return 0;}
if(!Sources.NavigatorView._typeOrders){const weights={};const types=Sources.NavigatorView.Types;weights[types.Root]=1;weights[types.Domain]=10;weights[types.FileSystemFolder]=1;weights[types.NetworkFolder]=1;weights[types.SourceMapFolder]=2;weights[types.File]=10;weights[types.Frame]=70;weights[types.Worker]=90;weights[types.FileSystem]=100;Sources.NavigatorView._typeOrders=weights;}
let order=Sources.NavigatorView._typeOrders[treeElement._nodeType];if(treeElement._uiSourceCode){const contentType=treeElement._uiSourceCode.contentType();if(contentType.isDocument()){order+=3;}else if(contentType.isScript()){order+=5;}else if(contentType.isStyleSheet()){order+=10;}else{order+=15;}}
return order;}
static appendSearchItem(contextMenu,path){function searchPath(){Sources.SearchSourcesView.openSearch(`file:${path.trim()}`);}
let searchLabel=Common.UIString('Search in folder');if(!path||!path.trim()){path='*';searchLabel=Common.UIString('Search in all files');}
contextMenu.viewSection().appendItem(searchLabel,searchPath);}
static _treeElementsCompare(treeElement1,treeElement2){const typeWeight1=Sources.NavigatorView._treeElementOrder(treeElement1);const typeWeight2=Sources.NavigatorView._treeElementOrder(treeElement2);if(typeWeight1>typeWeight2){return 1;}
if(typeWeight1<typeWeight2){return-1;}
return treeElement1.titleAsText().compareTo(treeElement2.titleAsText());}
setPlaceholder(placeholder){console.assert(!this._placeholder,'A placeholder widget was already set');this._placeholder=placeholder;placeholder.show(this.contentElement,this.contentElement.firstChild);updateVisibility.call(this);this._scriptsTree.addEventListener(UI.TreeOutline.Events.ElementAttached,updateVisibility.bind(this));this._scriptsTree.addEventListener(UI.TreeOutline.Events.ElementsDetached,updateVisibility.bind(this));function updateVisibility(){const showTree=this._scriptsTree.firstChild();if(showTree){placeholder.hideWidget();}else{placeholder.showWidget();}
this._scriptsTree.element.classList.toggle('hidden',!showTree);}}
_onBindingChanged(event){const binding=(event.data);const networkNodes=this._uiSourceCodeNodes.get(binding.network);for(const networkNode of networkNodes){networkNode.updateTitle();}
const fileSystemNodes=this._uiSourceCodeNodes.get(binding.fileSystem);for(const fileSystemNode of fileSystemNodes){fileSystemNode.updateTitle();}
const pathTokens=Persistence.FileSystemWorkspaceBinding.relativePath(binding.fileSystem);let folderPath='';for(let i=0;i<pathTokens.length-1;++i){folderPath+=pathTokens[i];const folderId=this._folderNodeId(binding.fileSystem.project(),null,null,binding.fileSystem.origin(),folderPath);const folderNode=this._subfolderNodes.get(folderId);if(folderNode){folderNode.updateTitle();}
folderPath+='/';}
const fileSystemRoot=this._rootNode.child(binding.fileSystem.project().id());if(fileSystemRoot){fileSystemRoot.updateTitle();}}
focus(){this._scriptsTree.focus();}
_resetWorkspace(workspace){this._workspace=workspace;this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this._uiSourceCodeAdded,this);this._workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved,this._uiSourceCodeRemoved,this);this._workspace.addEventListener(Workspace.Workspace.Events.ProjectAdded,event=>{const project=(event.data);this._projectAdded(project);if(project.type()===Workspace.projectTypes.FileSystem){this._computeUniqueFileSystemProjectNames();}});this._workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved,event=>{const project=(event.data);this._removeProject(project);if(project.type()===Workspace.projectTypes.FileSystem){this._computeUniqueFileSystemProjectNames();}});this._workspace.projects().forEach(this._projectAdded.bind(this));this._computeUniqueFileSystemProjectNames();}
workspace(){return this._workspace;}
acceptProject(project){return!project.isServiceProject();}
_frameAttributionAdded(event){const uiSourceCode=(event.data.uiSourceCode);if(!this._acceptsUISourceCode(uiSourceCode)){return;}
const addedFrame=(event.data.frame);this._addUISourceCodeNode(uiSourceCode,addedFrame);}
_frameAttributionRemoved(event){const uiSourceCode=(event.data.uiSourceCode);if(!this._acceptsUISourceCode(uiSourceCode)){return;}
const removedFrame=(event.data.frame);const node=Array.from(this._uiSourceCodeNodes.get(uiSourceCode)).find(node=>node.frame()===removedFrame);this._removeUISourceCodeNode(node);}
_acceptsUISourceCode(uiSourceCode){return this.acceptProject(uiSourceCode.project());}
_addUISourceCode(uiSourceCode){if(!this._acceptsUISourceCode(uiSourceCode)){return;}
const frames=Bindings.NetworkProject.framesForUISourceCode(uiSourceCode);if(frames.length){for(const frame of frames){this._addUISourceCodeNode(uiSourceCode,frame);}}else{this._addUISourceCodeNode(uiSourceCode,null);}
this.uiSourceCodeAdded(uiSourceCode);}
_addUISourceCodeNode(uiSourceCode,frame){const isFromSourceMap=uiSourceCode.contentType().isFromSourceMap();let path;if(uiSourceCode.project().type()===Workspace.projectTypes.FileSystem){path=Persistence.FileSystemWorkspaceBinding.relativePath(uiSourceCode).slice(0,-1);}else{path=Common.ParsedURL.extractPath(uiSourceCode.url()).split('/').slice(1,-1);}
const project=uiSourceCode.project();const target=Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);const folderNode=this._folderNode(uiSourceCode,project,target,frame,uiSourceCode.origin(),path,isFromSourceMap);const uiSourceCodeNode=new Sources.NavigatorUISourceCodeTreeNode(this,uiSourceCode,frame);folderNode.appendChild(uiSourceCodeNode);this._uiSourceCodeNodes.set(uiSourceCode,uiSourceCodeNode);this._selectDefaultTreeNode();}
uiSourceCodeAdded(uiSourceCode){}
_uiSourceCodeAdded(event){const uiSourceCode=(event.data);this._addUISourceCode(uiSourceCode);}
_uiSourceCodeRemoved(event){const uiSourceCode=(event.data);this._removeUISourceCode(uiSourceCode);}
tryAddProject(project){this._projectAdded(project);project.uiSourceCodes().forEach(this._addUISourceCode.bind(this));}
_projectAdded(project){if(!this.acceptProject(project)||project.type()!==Workspace.projectTypes.FileSystem||Snippets.isSnippetsProject(project)||this._rootNode.child(project.id())){return;}
this._rootNode.appendChild(new Sources.NavigatorGroupTreeNode(this,project,project.id(),Sources.NavigatorView.Types.FileSystem,project.displayName()));this._selectDefaultTreeNode();}
_selectDefaultTreeNode(){const children=this._rootNode.children();if(children.length&&!this._scriptsTree.selectedTreeElement){children[0].treeNode().select(true,false);}}
_computeUniqueFileSystemProjectNames(){const fileSystemProjects=this._workspace.projectsForType(Workspace.projectTypes.FileSystem);if(!fileSystemProjects.length){return;}
const encoder=new Persistence.PathEncoder();const reversedPaths=fileSystemProjects.map(project=>{const fileSystem=(project);return encoder.encode(fileSystem.fileSystemPath()).reverse();});const reversedIndex=new Common.Trie();for(const reversedPath of reversedPaths){reversedIndex.add(reversedPath);}
for(let i=0;i<fileSystemProjects.length;++i){const reversedPath=reversedPaths[i];const project=fileSystemProjects[i];reversedIndex.remove(reversedPath);const commonPrefix=reversedIndex.longestPrefix(reversedPath,false);reversedIndex.add(reversedPath);const path=encoder.decode(reversedPath.substring(0,commonPrefix.length+1).reverse());const fileSystemNode=this._rootNode.child(project.id());if(fileSystemNode){fileSystemNode.setTitle(path);}}}
_removeProject(project){const uiSourceCodes=project.uiSourceCodes();for(let i=0;i<uiSourceCodes.length;++i){this._removeUISourceCode(uiSourceCodes[i]);}
if(project.type()!==Workspace.projectTypes.FileSystem){return;}
const fileSystemNode=this._rootNode.child(project.id());if(!fileSystemNode){return;}
this._rootNode.removeChild(fileSystemNode);}
_folderNodeId(project,target,frame,projectOrigin,path){const targetId=target?target.id():'';const projectId=project.type()===Workspace.projectTypes.FileSystem?project.id():'';const frameId=this._groupByFrame&&frame?frame.id:'';return targetId+':'+projectId+':'+frameId+':'+projectOrigin+':'+path;}
_folderNode(uiSourceCode,project,target,frame,projectOrigin,path,fromSourceMap){if(Snippets.isSnippetsUISourceCode(uiSourceCode)){return this._rootNode;}
if(target&&!this._groupByFolder&&!fromSourceMap){return this._domainNode(uiSourceCode,project,target,frame,projectOrigin);}
const folderPath=path.join('/');const folderId=this._folderNodeId(project,target,frame,projectOrigin,folderPath);let folderNode=this._subfolderNodes.get(folderId);if(folderNode){return folderNode;}
if(!path.length){if(target){return this._domainNode(uiSourceCode,project,target,frame,projectOrigin);}
return(this._rootNode.child(project.id()));}
const parentNode=this._folderNode(uiSourceCode,project,target,frame,projectOrigin,path.slice(0,-1),fromSourceMap);let type=fromSourceMap?Sources.NavigatorView.Types.SourceMapFolder:Sources.NavigatorView.Types.NetworkFolder;if(project.type()===Workspace.projectTypes.FileSystem){type=Sources.NavigatorView.Types.FileSystemFolder;}
const name=path[path.length-1];folderNode=new Sources.NavigatorFolderTreeNode(this,project,folderId,type,folderPath,name);this._subfolderNodes.set(folderId,folderNode);parentNode.appendChild(folderNode);return folderNode;}
_domainNode(uiSourceCode,project,target,frame,projectOrigin){const frameNode=this._frameNode(project,target,frame);if(!this._groupByDomain){return frameNode;}
let domainNode=frameNode.child(projectOrigin);if(domainNode){return domainNode;}
domainNode=new Sources.NavigatorGroupTreeNode(this,project,projectOrigin,Sources.NavigatorView.Types.Domain,this._computeProjectDisplayName(target,projectOrigin));if(frame&&projectOrigin===Common.ParsedURL.extractOrigin(frame.url)){domainNode.treeNode()._boostOrder=true;}
frameNode.appendChild(domainNode);return domainNode;}
_frameNode(project,target,frame){if(!this._groupByFrame||!frame){return this._targetNode(project,target);}
let frameNode=this._frameNodes.get(frame);if(frameNode){return frameNode;}
frameNode=new Sources.NavigatorGroupTreeNode(this,project,target.id()+':'+frame.id,Sources.NavigatorView.Types.Frame,frame.displayName());frameNode.setHoverCallback(hoverCallback);this._frameNodes.set(frame,frameNode);const parentFrame=frame.parentFrame||frame.crossTargetParentFrame();this._frameNode(project,parentFrame?parentFrame.resourceTreeModel().target():target,parentFrame).appendChild(frameNode);if(!parentFrame){frameNode.treeNode()._boostOrder=true;frameNode.treeNode().expand();}
function hoverCallback(hovered){if(hovered){const overlayModel=target.model(SDK.OverlayModel);if(overlayModel){overlayModel.highlightFrame(frame.id);}}else{SDK.OverlayModel.hideDOMNodeHighlight();}}
return frameNode;}
_targetNode(project,target){if(target===SDK.targetManager.mainTarget()){return this._rootNode;}
let targetNode=this._rootNode.child('target:'+target.id());if(!targetNode){targetNode=new Sources.NavigatorGroupTreeNode(this,project,'target:'+target.id(),target.type()===SDK.Target.Type.Frame?Sources.NavigatorView.Types.Frame:Sources.NavigatorView.Types.Worker,target.name());this._rootNode.appendChild(targetNode);}
return targetNode;}
_computeProjectDisplayName(target,projectOrigin){const runtimeModel=target.model(SDK.RuntimeModel);const executionContexts=runtimeModel?runtimeModel.executionContexts():[];for(const context of executionContexts){if(context.name&&context.origin&&projectOrigin.startsWith(context.origin)){return context.name;}}
if(!projectOrigin){return Common.UIString('(no domain)');}
const parsedURL=new Common.ParsedURL(projectOrigin);const prettyURL=parsedURL.isValid?parsedURL.host+(parsedURL.port?(':'+parsedURL.port):''):'';return(prettyURL||projectOrigin);}
revealUISourceCode(uiSourceCode,select){const nodes=this._uiSourceCodeNodes.get(uiSourceCode);const node=nodes.firstValue();if(!node){return null;}
if(this._scriptsTree.selectedTreeElement){this._scriptsTree.selectedTreeElement.deselect();}
this._lastSelectedUISourceCode=uiSourceCode;node.reveal(select);return node;}
_sourceSelected(uiSourceCode,focusSource){this._lastSelectedUISourceCode=uiSourceCode;Common.Revealer.reveal(uiSourceCode,!focusSource);}
_removeUISourceCode(uiSourceCode){const nodes=this._uiSourceCodeNodes.get(uiSourceCode);for(const node of nodes){this._removeUISourceCodeNode(node);}}
_removeUISourceCodeNode(node){const uiSourceCode=node.uiSourceCode();this._uiSourceCodeNodes.delete(uiSourceCode,node);const project=uiSourceCode.project();const target=Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);const frame=node.frame();let parentNode=node.parent;parentNode.removeChild(node);node=parentNode;while(node){parentNode=node.parent;if(!parentNode||!node.isEmpty()){break;}
if(parentNode===this._rootNode&&project.type()===Workspace.projectTypes.FileSystem){break;}
if(!(node instanceof Sources.NavigatorGroupTreeNode||node instanceof Sources.NavigatorFolderTreeNode)){break;}
if(node._type===Sources.NavigatorView.Types.Frame){this._discardFrame((frame));break;}
const folderId=this._folderNodeId(project,target,frame,uiSourceCode.origin(),node._folderPath);this._subfolderNodes.delete(folderId);parentNode.removeChild(node);node=parentNode;}}
reset(){for(const node of this._uiSourceCodeNodes.valuesArray()){node.dispose();}
this._scriptsTree.removeChildren();this._uiSourceCodeNodes.clear();this._subfolderNodes.clear();this._frameNodes.clear();this._rootNode.reset();}
handleContextMenu(event){}
_renameShortcut(){const node=this._scriptsTree.selectedTreeElement&&this._scriptsTree.selectedTreeElement._node;if(!node||!node._uiSourceCode||!node._uiSourceCode.canRename()){return false;}
this.rename(node,false);return true;}
_handleContextMenuCreate(project,path,uiSourceCode){if(uiSourceCode){const relativePath=Persistence.FileSystemWorkspaceBinding.relativePath(uiSourceCode);relativePath.pop();path=relativePath.join('/');}
this.create(project,path,uiSourceCode);}
_handleContextMenuRename(node){this.rename(node,false);}
_handleContextMenuExclude(project,path){const shouldExclude=window.confirm(Common.UIString('Are you sure you want to exclude this folder?'));if(shouldExclude){UI.startBatchUpdate();project.excludeFolder(Persistence.FileSystemWorkspaceBinding.completeURL(project,path));UI.endBatchUpdate();}}
_handleContextMenuDelete(uiSourceCode){const shouldDelete=window.confirm(Common.UIString('Are you sure you want to delete this file?'));if(shouldDelete){uiSourceCode.project().deleteFile(uiSourceCode);}}
handleFileContextMenu(event,node){const uiSourceCode=node.uiSourceCode();const contextMenu=new UI.ContextMenu(event);contextMenu.appendApplicableItems(uiSourceCode);const project=uiSourceCode.project();if(project.type()===Workspace.projectTypes.FileSystem){contextMenu.editSection().appendItem(Common.UIString('Rename\u2026'),this._handleContextMenuRename.bind(this,node));contextMenu.editSection().appendItem(Common.UIString('Make a copy\u2026'),this._handleContextMenuCreate.bind(this,project,'',uiSourceCode));contextMenu.editSection().appendItem(Common.UIString('Delete'),this._handleContextMenuDelete.bind(this,uiSourceCode));}
contextMenu.show();}
handleFolderContextMenu(event,node){const path=node._folderPath||'';const project=node._project;const contextMenu=new UI.ContextMenu(event);if(project.type()===Workspace.projectTypes.FileSystem){Sources.NavigatorView.appendSearchItem(contextMenu,path);const folderPath=Common.ParsedURL.urlToPlatformPath(Persistence.FileSystemWorkspaceBinding.completeURL(project,path),Host.isWin());contextMenu.revealSection().appendItem(Common.UIString('Open folder'),()=>Host.InspectorFrontendHost.showItemInFolder(folderPath));if(project.canCreateFile()){contextMenu.defaultSection().appendItem(Common.UIString('New file'),this._handleContextMenuCreate.bind(this,project,path));}}
if(project.canExcludeFolder(path)){contextMenu.defaultSection().appendItem(Common.UIString('Exclude folder'),this._handleContextMenuExclude.bind(this,project,path));}
function removeFolder(){const shouldRemove=window.confirm(Common.UIString('Are you sure you want to remove this folder?'));if(shouldRemove){project.remove();}}
if(project.type()===Workspace.projectTypes.FileSystem){contextMenu.defaultSection().appendAction('sources.add-folder-to-workspace',undefined,true);if(node instanceof Sources.NavigatorGroupTreeNode){contextMenu.defaultSection().appendItem(Common.UIString('Remove folder from workspace'),removeFolder);}}
contextMenu.show();}
rename(node,creatingNewUISourceCode){const uiSourceCode=node.uiSourceCode();node.rename(callback.bind(this));function callback(committed){if(!creatingNewUISourceCode){return;}
if(!committed){uiSourceCode.remove();}else if(node._treeElement.listItemElement.hasFocus()){this._sourceSelected(uiSourceCode,true);}}}
async create(project,path,uiSourceCodeToCopy){let content='';if(uiSourceCodeToCopy){content=(await uiSourceCodeToCopy.requestContent()).content||'';}
const uiSourceCode=await project.createFile(path,null,content);if(!uiSourceCode){return;}
this._sourceSelected(uiSourceCode,false);const node=this.revealUISourceCode(uiSourceCode,true);if(node){this.rename(node,true);}}
_groupingChanged(){this.reset();this._initGrouping();this._workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this));}
_initGrouping(){this._groupByFrame=true;this._groupByDomain=this._navigatorGroupByFolderSetting.get();this._groupByFolder=this._groupByDomain;}
_resetForTest(){this.reset();this._workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this));}
_discardFrame(frame){const node=this._frameNodes.get(frame);if(!node){return;}
if(node.parent){node.parent.removeChild(node);}
this._frameNodes.delete(frame);for(const child of frame.childFrames){this._discardFrame(child);}}
targetAdded(target){}
targetRemoved(target){const targetNode=this._rootNode.child('target:'+target.id());if(targetNode){this._rootNode.removeChild(targetNode);}}
_targetNameChanged(event){const target=(event.data);const targetNode=this._rootNode.child('target:'+target.id());if(targetNode){targetNode.setTitle(target.name());}}};Sources.NavigatorView.Types={Domain:'domain',File:'file',FileSystem:'fs',FileSystemFolder:'fs-folder',Frame:'frame',NetworkFolder:'nw-folder',Root:'root',SourceMapFolder:'sm-folder',Worker:'worker'};Sources.NavigatorFolderTreeElement=class extends UI.TreeElement{constructor(navigatorView,type,title,hoverCallback){super('',true);this.listItemElement.classList.add('navigator-'+type+'-tree-item','navigator-folder-tree-item');this._nodeType=type;this.title=title;this.tooltip=title;this._navigatorView=navigatorView;this._hoverCallback=hoverCallback;let iconType='largeicon-navigator-folder';if(type===Sources.NavigatorView.Types.Domain){iconType='largeicon-navigator-domain';}else if(type===Sources.NavigatorView.Types.Frame){iconType='largeicon-navigator-frame';}else if(type===Sources.NavigatorView.Types.Worker){iconType='largeicon-navigator-worker';}
this.setLeadingIcons([UI.Icon.create(iconType,'icon')]);}
async onpopulate(){this._node.populate();}
onattach(){this.collapse();this._node.onattach();this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),false);this.listItemElement.addEventListener('mousemove',this._mouseMove.bind(this),false);this.listItemElement.addEventListener('mouseleave',this._mouseLeave.bind(this),false);}
setNode(node){this._node=node;const paths=[];while(node&&!node.isRoot()){paths.push(node._title);node=node.parent;}
paths.reverse();this.tooltip=paths.join('/');}
_handleContextMenuEvent(event){if(!this._node){return;}
this.select();this._navigatorView.handleFolderContextMenu(event,this._node);}
_mouseMove(event){if(this._hovered||!this._hoverCallback){return;}
this._hovered=true;this._hoverCallback(true);}
_mouseLeave(event){if(!this._hoverCallback){return;}
this._hovered=false;this._hoverCallback(false);}};Sources.NavigatorSourceTreeElement=class extends UI.TreeElement{constructor(navigatorView,uiSourceCode,title,node){super('',false);this._nodeType=Sources.NavigatorView.Types.File;this._node=node;this.title=title;this.listItemElement.classList.add('navigator-'+uiSourceCode.contentType().name()+'-tree-item','navigator-file-tree-item');this.tooltip=uiSourceCode.url();this._navigatorView=navigatorView;this._uiSourceCode=uiSourceCode;this.updateIcon();}
updateIcon(){const binding=Persistence.persistence.binding(this._uiSourceCode);if(binding){const container=createElementWithClass('span','icon-stack');let iconType='largeicon-navigator-file-sync';if(Snippets.isSnippetsUISourceCode(binding.fileSystem)){iconType='largeicon-navigator-snippet';}
const icon=UI.Icon.create(iconType,'icon');const badge=UI.Icon.create('badge-navigator-file-sync','icon-badge');if(Persistence.networkPersistenceManager.project()===binding.fileSystem.project()){badge.style.filter='hue-rotate(160deg)';}
container.appendChild(icon);container.appendChild(badge);container.title=Persistence.PersistenceUtils.tooltipForUISourceCode(this._uiSourceCode);this.setLeadingIcons([container]);}else{let iconType='largeicon-navigator-file';if(Snippets.isSnippetsUISourceCode(this._uiSourceCode)){iconType='largeicon-navigator-snippet';}
const defaultIcon=UI.Icon.create(iconType,'icon');this.setLeadingIcons([defaultIcon]);}}
get uiSourceCode(){return this._uiSourceCode;}
onattach(){this.listItemElement.draggable=true;this.listItemElement.addEventListener('click',this._onclick.bind(this),false);this.listItemElement.addEventListener('contextmenu',this._handleContextMenuEvent.bind(this),false);this.listItemElement.addEventListener('dragstart',this._ondragstart.bind(this),false);}
_shouldRenameOnMouseDown(){if(!this._uiSourceCode.canRename()){return false;}
const isSelected=this===this.treeOutline.selectedTreeElement;return isSelected&&this.treeOutline.element.hasFocus()&&!UI.isBeingEdited(this.treeOutline.element);}
selectOnMouseDown(event){if(event.which!==1||!this._shouldRenameOnMouseDown()){super.selectOnMouseDown(event);return;}
setTimeout(rename.bind(this),300);function rename(){if(this._shouldRenameOnMouseDown()){this._navigatorView.rename(this._node,false);}}}
_ondragstart(event){event.dataTransfer.setData('text/plain',this._uiSourceCode.url());event.dataTransfer.effectAllowed='copy';}
onspace(){this._navigatorView._sourceSelected(this.uiSourceCode,true);return true;}
_onclick(event){this._navigatorView._sourceSelected(this.uiSourceCode,false);}
ondblclick(event){const middleClick=event.button===1;this._navigatorView._sourceSelected(this.uiSourceCode,!middleClick);return false;}
onenter(){this._navigatorView._sourceSelected(this.uiSourceCode,true);return true;}
ondelete(){return true;}
_handleContextMenuEvent(event){this.select();this._navigatorView.handleFileContextMenu(event,this._node);}};Sources.NavigatorTreeNode=class{constructor(id,type){this.id=id;this._type=type;this._children=new Map();}
treeNode(){throw'Not implemented';}
dispose(){}
isRoot(){return false;}
hasChildren(){return true;}
onattach(){}
setTitle(title){throw'Not implemented';}
populate(){if(this.isPopulated()){return;}
if(this.parent){this.parent.populate();}
this._populated=true;this.wasPopulated();}
wasPopulated(){const children=this.children();for(let i=0;i<children.length;++i){this.treeNode().appendChild((children[i].treeNode()));}}
didAddChild(node){if(this.isPopulated()){this.treeNode().appendChild((node.treeNode()));}}
willRemoveChild(node){if(this.isPopulated()){this.treeNode().removeChild((node.treeNode()));}}
isPopulated(){return this._populated;}
isEmpty(){return!this._children.size;}
children(){return this._children.valuesArray();}
child(id){return this._children.get(id)||null;}
appendChild(node){this._children.set(node.id,node);node.parent=this;this.didAddChild(node);}
removeChild(node){this.willRemoveChild(node);this._children.remove(node.id);delete node.parent;node.dispose();}
reset(){this._children.clear();}};Sources.NavigatorRootTreeNode=class extends Sources.NavigatorTreeNode{constructor(navigatorView){super('',Sources.NavigatorView.Types.Root);this._navigatorView=navigatorView;}
isRoot(){return true;}
treeNode(){return this._navigatorView._scriptsTree.rootElement();}};Sources.NavigatorUISourceCodeTreeNode=class extends Sources.NavigatorTreeNode{constructor(navigatorView,uiSourceCode,frame){super(uiSourceCode.project().id()+':'+uiSourceCode.url(),Sources.NavigatorView.Types.File);this._navigatorView=navigatorView;this._uiSourceCode=uiSourceCode;this._treeElement=null;this._eventListeners=[];this._frame=frame;}
frame(){return this._frame;}
uiSourceCode(){return this._uiSourceCode;}
treeNode(){if(this._treeElement){return this._treeElement;}
this._treeElement=new Sources.NavigatorSourceTreeElement(this._navigatorView,this._uiSourceCode,'',this);this.updateTitle();const updateTitleBound=this.updateTitle.bind(this,undefined);this._eventListeners=[this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.TitleChanged,updateTitleBound),this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,updateTitleBound),this._uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,updateTitleBound)];return this._treeElement;}
updateTitle(ignoreIsDirty){if(!this._treeElement){return;}
let titleText=this._uiSourceCode.displayName();if(!ignoreIsDirty&&this._uiSourceCode.isDirty()){titleText='*'+titleText;}
this._treeElement.title=titleText;this._treeElement.updateIcon();let tooltip=this._uiSourceCode.url();if(this._uiSourceCode.contentType().isFromSourceMap()){tooltip=Common.UIString('%s (from source map)',this._uiSourceCode.displayName());}
this._treeElement.tooltip=tooltip;}
hasChildren(){return false;}
dispose(){Common.EventTarget.removeEventListeners(this._eventListeners);}
reveal(select){this.parent.populate();this.parent.treeNode().expand();this._treeElement.reveal(true);if(select){this._treeElement.select(true);}}
rename(callback){if(!this._treeElement){return;}
this._treeElement.listItemElement.focus();const treeOutlineElement=this._treeElement.treeOutline.element;UI.markBeingEdited(treeOutlineElement,true);function commitHandler(element,newTitle,oldTitle){if(newTitle!==oldTitle){this._treeElement.title=newTitle;this._uiSourceCode.rename(newTitle).then(renameCallback.bind(this));return;}
afterEditing.call(this,true);}
function renameCallback(success){if(!success){UI.markBeingEdited(treeOutlineElement,false);this.updateTitle();this.rename(callback);return;}
afterEditing.call(this,true);}
function afterEditing(committed){UI.markBeingEdited(treeOutlineElement,false);this.updateTitle();if(callback){callback(committed);}}
this.updateTitle(true);this._treeElement.startEditingTitle(new UI.InplaceEditor.Config(commitHandler.bind(this),afterEditing.bind(this,false)));}};Sources.NavigatorFolderTreeNode=class extends Sources.NavigatorTreeNode{constructor(navigatorView,project,id,type,folderPath,title){super(id,type);this._navigatorView=navigatorView;this._project=project;this._folderPath=folderPath;this._title=title;}
treeNode(){if(this._treeElement){return this._treeElement;}
this._treeElement=this._createTreeElement(this._title,this);this.updateTitle();return this._treeElement;}
updateTitle(){if(!this._treeElement||this._project.type()!==Workspace.projectTypes.FileSystem){return;}
const absoluteFileSystemPath=Persistence.FileSystemWorkspaceBinding.fileSystemPath(this._project.id())+'/'+this._folderPath;const hasMappedFiles=Persistence.persistence.filePathHasBindings(absoluteFileSystemPath);this._treeElement.listItemElement.classList.toggle('has-mapped-files',hasMappedFiles);}
_createTreeElement(title,node){if(this._project.type()!==Workspace.projectTypes.FileSystem){try{title=decodeURI(title);}catch(e){}}
const treeElement=new Sources.NavigatorFolderTreeElement(this._navigatorView,this._type,title);treeElement.setNode(node);return treeElement;}
wasPopulated(){if(!this._treeElement||this._treeElement._node!==this){return;}
this._addChildrenRecursive();}
_addChildrenRecursive(){const children=this.children();for(let i=0;i<children.length;++i){const child=children[i];this.didAddChild(child);if(child instanceof Sources.NavigatorFolderTreeNode){child._addChildrenRecursive();}}}
_shouldMerge(node){return this._type!==Sources.NavigatorView.Types.Domain&&node instanceof Sources.NavigatorFolderTreeNode;}
didAddChild(node){function titleForNode(node){return node._title;}
if(!this._treeElement){return;}
let children=this.children();if(children.length===1&&this._shouldMerge(node)){node._isMerged=true;this._treeElement.title=this._treeElement.title+'/'+node._title;node._treeElement=this._treeElement;this._treeElement.setNode(node);return;}
let oldNode;if(children.length===2){oldNode=children[0]!==node?children[0]:children[1];}
if(oldNode&&oldNode._isMerged){delete oldNode._isMerged;const mergedToNodes=[];mergedToNodes.push(this);let treeNode=this;while(treeNode._isMerged){treeNode=treeNode.parent;mergedToNodes.push(treeNode);}
mergedToNodes.reverse();const titleText=mergedToNodes.map(titleForNode).join('/');const nodes=[];treeNode=oldNode;do{nodes.push(treeNode);children=treeNode.children();treeNode=children.length===1?children[0]:null;}while(treeNode&&treeNode._isMerged);if(!this.isPopulated()){this._treeElement.title=titleText;this._treeElement.setNode(this);for(let i=0;i<nodes.length;++i){delete nodes[i]._treeElement;delete nodes[i]._isMerged;}
return;}
const oldTreeElement=this._treeElement;const treeElement=this._createTreeElement(titleText,this);for(let i=0;i<mergedToNodes.length;++i){mergedToNodes[i]._treeElement=treeElement;}
oldTreeElement.parent.appendChild(treeElement);oldTreeElement.setNode(nodes[nodes.length-1]);oldTreeElement.title=nodes.map(titleForNode).join('/');oldTreeElement.parent.removeChild(oldTreeElement);this._treeElement.appendChild(oldTreeElement);if(oldTreeElement.expanded){treeElement.expand();}}
if(this.isPopulated()){this._treeElement.appendChild(node.treeNode());}}
willRemoveChild(node){if(node._isMerged||!this.isPopulated()){return;}
this._treeElement.removeChild(node._treeElement);}};Sources.NavigatorGroupTreeNode=class extends Sources.NavigatorTreeNode{constructor(navigatorView,project,id,type,title){super(id,type);this._project=project;this._navigatorView=navigatorView;this._title=title;this.populate();}
setHoverCallback(hoverCallback){this._hoverCallback=hoverCallback;}
treeNode(){if(this._treeElement){return this._treeElement;}
this._treeElement=new Sources.NavigatorFolderTreeElement(this._navigatorView,this._type,this._title,this._hoverCallback);this._treeElement.setNode(this);return this._treeElement;}
onattach(){this.updateTitle();}
updateTitle(){if(!this._treeElement||this._project.type()!==Workspace.projectTypes.FileSystem){return;}
const fileSystemPath=Persistence.FileSystemWorkspaceBinding.fileSystemPath(this._project.id());const wasActive=this._treeElement.listItemElement.classList.contains('has-mapped-files');const isActive=Persistence.persistence.filePathHasBindings(fileSystemPath);if(wasActive===isActive){return;}
this._treeElement.listItemElement.classList.toggle('has-mapped-files',isActive);if(this._treeElement.childrenListElement.hasFocus()){return;}
if(isActive){this._treeElement.expand();}else{this._treeElement.collapse();}}
setTitle(title){this._title=title;if(this._treeElement){this._treeElement.title=this._title;}}};;Sources.ScopeChainSidebarPane=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('sources/scopeChainSidebarPane.css');this._treeOutline=new ObjectUI.ObjectPropertiesSectionsTreeOutline();this._treeOutline.registerRequiredCSS('sources/scopeChainSidebarPane.css');this._treeOutline.setShowSelectionOnKeyboardFocus(true);this._expandController=new ObjectUI.ObjectPropertiesSectionsTreeExpandController(this._treeOutline);this._linkifier=new Components.Linkifier();this._infoElement=createElement('div');this._infoElement.className='gray-info-message';this._infoElement.textContent=ls`Not paused`;this._infoElement.tabIndex=-1;this._update();}
flavorChanged(object){this._update();}
focus(){if(this.hasFocus()){return;}
if(UI.context.flavor(SDK.DebuggerPausedDetails)){this._treeOutline.forceSelect();}}
_update(){const callFrame=UI.context.flavor(SDK.DebuggerModel.CallFrame);const details=UI.context.flavor(SDK.DebuggerPausedDetails);this._linkifier.reset();Sources.SourceMapNamesResolver.resolveThisObject(callFrame).then(this._innerUpdate.bind(this,details,callFrame));}
_innerUpdate(details,callFrame,thisObject){this._treeOutline.removeChildren();this.contentElement.removeChildren();if(!details||!callFrame){this.contentElement.appendChild(this._infoElement);return;}
this.contentElement.appendChild(this._treeOutline.element);let foundLocalScope=false;const scopeChain=callFrame.scopeChain();for(let i=0;i<scopeChain.length;++i){const scope=scopeChain[i];const extraProperties=this._extraPropertiesForScope(scope,details,callFrame,thisObject,i===0);if(scope.type()===Protocol.Debugger.ScopeType.Local){foundLocalScope=true;}
const section=this._createScopeSectionTreeElement(scope,extraProperties);if(scope.type()===Protocol.Debugger.ScopeType.Global){section.collapse();}else if(!foundLocalScope||scope.type()===Protocol.Debugger.ScopeType.Local){section.expand();}
this._treeOutline.appendChild(section);if(i===0){section.select(true);}}
this._sidebarPaneUpdatedForTest();}
_createScopeSectionTreeElement(scope,extraProperties){let emptyPlaceholder=null;if(scope.type()===Protocol.Debugger.ScopeType.Local||Protocol.Debugger.ScopeType.Closure){emptyPlaceholder=ls`No variables`;}
let title=scope.typeName();if(scope.type()===Protocol.Debugger.ScopeType.Closure){const scopeName=scope.name();if(scopeName){title=ls`Closure (${UI.beautifyFunctionName(scopeName)})`;}else{title=ls`Closure`;}}
let subtitle=scope.description();if(!title||title===subtitle){subtitle=undefined;}
const titleElement=createElementWithClass('div','scope-chain-sidebar-pane-section-header tree-element-title');titleElement.createChild('div','scope-chain-sidebar-pane-section-subtitle').textContent=subtitle;titleElement.createChild('div','scope-chain-sidebar-pane-section-title').textContent=title;const section=new ObjectUI.ObjectPropertiesSection.RootElement(Sources.SourceMapNamesResolver.resolveScopeInObject(scope),this._linkifier,emptyPlaceholder,true,extraProperties);section.title=titleElement;section.listItemElement.classList.add('scope-chain-sidebar-pane-section');this._expandController.watchSection(title+(subtitle?':'+subtitle:''),section);return section;}
_extraPropertiesForScope(scope,details,callFrame,thisObject,isFirstScope){if(scope.type()!==Protocol.Debugger.ScopeType.Local){return[];}
const extraProperties=[];if(thisObject){extraProperties.push(new SDK.RemoteObjectProperty('this',thisObject));}
if(isFirstScope){const exception=details.exception();if(exception){extraProperties.push(new SDK.RemoteObjectProperty(Common.UIString('Exception'),exception,undefined,undefined,undefined,undefined,undefined,true));}
const returnValue=callFrame.returnValue();if(returnValue){extraProperties.push(new SDK.RemoteObjectProperty(Common.UIString('Return value'),returnValue,undefined,undefined,undefined,undefined,undefined,true,callFrame.setReturnValue.bind(callFrame)));}}
return extraProperties;}
_sidebarPaneUpdatedForTest(){}};Sources.ScopeChainSidebarPane._pathSymbol=Symbol('path');;Sources.NetworkNavigatorView=class extends Sources.NavigatorView{constructor(){super();SDK.targetManager.addEventListener(SDK.TargetManager.Events.InspectedURLChanged,this._inspectedURLChanged,this);Host.userMetrics.panelLoaded('sources','DevTools.Launch.Sources');}
acceptProject(project){return project.type()===Workspace.projectTypes.Network;}
_inspectedURLChanged(event){const mainTarget=SDK.targetManager.mainTarget();if(event.data!==mainTarget){return;}
const inspectedURL=mainTarget&&mainTarget.inspectedURL();if(!inspectedURL){return;}
for(const uiSourceCode of this.workspace().uiSourceCodes()){if(this.acceptProject(uiSourceCode.project())&&uiSourceCode.url()===inspectedURL){this.revealUISourceCode(uiSourceCode,true);}}}
uiSourceCodeAdded(uiSourceCode){const mainTarget=SDK.targetManager.mainTarget();const inspectedURL=mainTarget&&mainTarget.inspectedURL();if(!inspectedURL){return;}
if(uiSourceCode.url()===inspectedURL){this.revealUISourceCode(uiSourceCode,true);}}};Sources.FilesNavigatorView=class extends Sources.NavigatorView{constructor(){super();const placeholder=new UI.EmptyWidget('');this.setPlaceholder(placeholder);placeholder.appendParagraph().appendChild(UI.html`
      <div>${ls`Sync changes in DevTools with the local filesystem`}</div><br />
      ${UI.XLink.create('https://developers.google.com/web/tools/chrome-devtools/workspaces/', ls`Learn more`)}
    `);const toolbar=new UI.Toolbar('navigator-toolbar');toolbar.appendItemsAtLocation('files-navigator-toolbar').then(()=>{if(!toolbar.empty()){this.contentElement.insertBefore(toolbar.element,this.contentElement.firstChild);}});}
acceptProject(project){return project.type()===Workspace.projectTypes.FileSystem&&Persistence.FileSystemWorkspaceBinding.fileSystemType(project)!=='overrides'&&!Snippets.isSnippetsProject(project);}
handleContextMenu(event){const contextMenu=new UI.ContextMenu(event);contextMenu.defaultSection().appendAction('sources.add-folder-to-workspace',undefined,true);contextMenu.show();}};Sources.OverridesNavigatorView=class extends Sources.NavigatorView{constructor(){super();const placeholder=new UI.EmptyWidget('');this.setPlaceholder(placeholder);placeholder.appendParagraph().appendChild(UI.html`
      <div>${ls`Override page assets with files from a local folder`}</div><br />
      ${UI.XLink.create('https://developers.google.com/web/updates/2018/01/devtools#overrides', ls`Learn more`)}
    `);this._toolbar=new UI.Toolbar('navigator-toolbar');this.contentElement.insertBefore(this._toolbar.element,this.contentElement.firstChild);Persistence.networkPersistenceManager.addEventListener(Persistence.NetworkPersistenceManager.Events.ProjectChanged,this._updateProjectAndUI,this);this.workspace().addEventListener(Workspace.Workspace.Events.ProjectAdded,this._onProjectAddOrRemoved,this);this.workspace().addEventListener(Workspace.Workspace.Events.ProjectRemoved,this._onProjectAddOrRemoved,this);this._updateProjectAndUI();}
_onProjectAddOrRemoved(event){const project=(event.data);if(project&&project.type()===Workspace.projectTypes.FileSystem&&Persistence.FileSystemWorkspaceBinding.fileSystemType(project)!=='overrides'){return;}
this._updateUI();}
_updateProjectAndUI(){this.reset();const project=Persistence.networkPersistenceManager.project();if(project){this.tryAddProject(project);}
this._updateUI();}
_updateUI(){this._toolbar.removeToolbarItems();const project=Persistence.networkPersistenceManager.project();if(project){const enableCheckbox=new UI.ToolbarSettingCheckbox(Common.settings.moduleSetting('persistenceNetworkOverridesEnabled'));this._toolbar.appendToolbarItem(enableCheckbox);this._toolbar.appendToolbarItem(new UI.ToolbarSeparator(true));const clearButton=new UI.ToolbarButton(Common.UIString('Clear configuration'),'largeicon-clear');clearButton.addEventListener(UI.ToolbarButton.Events.Click,()=>{project.remove();});this._toolbar.appendToolbarItem(clearButton);return;}
const title=Common.UIString('Select folder for overrides');const setupButton=new UI.ToolbarButton(title,'largeicon-add',title);setupButton.addEventListener(UI.ToolbarButton.Events.Click,this._setupNewWorkspace,this);this._toolbar.appendToolbarItem(setupButton);}
async _setupNewWorkspace(){const fileSystem=await Persistence.isolatedFileSystemManager.addFileSystem('overrides');if(!fileSystem){return;}
Common.settings.moduleSetting('persistenceNetworkOverridesEnabled').set(true);}
acceptProject(project){return project===Persistence.networkPersistenceManager.project();}};Sources.ContentScriptsNavigatorView=class extends Sources.NavigatorView{constructor(){super();const placeholder=new UI.EmptyWidget('');this.setPlaceholder(placeholder);placeholder.appendParagraph().appendChild(UI.html`
      <div>${ls`Content scripts served by extensions appear here`}</div><br />
      ${UI.XLink.create('https://developer.chrome.com/extensions/content_scripts', ls`Learn more`)}
    `);}
acceptProject(project){return project.type()===Workspace.projectTypes.ContentScripts;}};Sources.SnippetsNavigatorView=class extends Sources.NavigatorView{constructor(){super();const placeholder=new UI.EmptyWidget('');this.setPlaceholder(placeholder);placeholder.appendParagraph().appendChild(UI.html`
      <div>${ls`Create and save code snippets for later reuse`}</div><br />
      ${UI.XLink.create('https://developers.google.com/web/tools/chrome-devtools/javascript/snippets', ls`Learn more`)}
    `);const toolbar=new UI.Toolbar('navigator-toolbar');const newButton=new UI.ToolbarButton('','largeicon-add',Common.UIString('New snippet'));newButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this.create(Snippets.project,''));toolbar.appendToolbarItem(newButton);this.contentElement.insertBefore(toolbar.element,this.contentElement.firstChild);}
acceptProject(project){return Snippets.isSnippetsProject(project);}
handleContextMenu(event){const contextMenu=new UI.ContextMenu(event);contextMenu.headerSection().appendItem(ls`Create new snippet`,()=>this.create(Snippets.project,''));contextMenu.show();}
handleFileContextMenu(event,node){const uiSourceCode=node.uiSourceCode();const contextMenu=new UI.ContextMenu(event);contextMenu.headerSection().appendItem(Common.UIString('Run'),()=>Snippets.evaluateScriptSnippet(uiSourceCode));contextMenu.editSection().appendItem(Common.UIString('Rename\u2026'),()=>this.rename(node,false));contextMenu.editSection().appendItem(Common.UIString('Remove'),()=>uiSourceCode.project().deleteFile(uiSourceCode));contextMenu.saveSection().appendItem(Common.UIString('Save as...'),this._handleSaveAs.bind(this,uiSourceCode));contextMenu.show();}
async _handleSaveAs(uiSourceCode){uiSourceCode.commitWorkingCopy();const{content}=await uiSourceCode.requestContent();Workspace.fileManager.save(uiSourceCode.url(),content||'',true);Workspace.fileManager.close(uiSourceCode.url());}};Sources.ActionDelegate=class{handleAction(context,actionId){switch(actionId){case'sources.create-snippet':Snippets.project.createFile('',null,'').then(uiSourceCode=>Common.Revealer.reveal(uiSourceCode));return true;case'sources.add-folder-to-workspace':Persistence.isolatedFileSystemManager.addFileSystem();return true;}
return false;}};;Sources.OutlineQuickOpen=class extends QuickOpen.FilteredListWidget.Provider{constructor(){super();this._items=[];this._active=false;}
attach(){this._items=[];this._active=false;const uiSourceCode=this._currentUISourceCode();if(uiSourceCode){this._active=Formatter.formatterWorkerPool().outlineForMimetype(uiSourceCode.workingCopy(),uiSourceCode.contentType().canonicalMimeType(),this._didBuildOutlineChunk.bind(this));}}
_didBuildOutlineChunk(isLastChunk,items){this._items.push(...items);this.refresh();}
itemCount(){return this._items.length;}
itemKeyAt(itemIndex){const item=this._items[itemIndex];return item.title+(item.subtitle?item.subtitle:'');}
itemScoreAt(itemIndex,query){const item=this._items[itemIndex];const methodName=query.split('(')[0];if(methodName.toLowerCase()===item.title.toLowerCase()){return 1/(1+item.line);}
return-item.line-1;}
renderItem(itemIndex,query,titleElement,subtitleElement){const item=this._items[itemIndex];titleElement.textContent=item.title+(item.subtitle?item.subtitle:'');QuickOpen.FilteredListWidget.highlightRanges(titleElement,query);subtitleElement.textContent=':'+(item.line+1);}
selectItem(itemIndex,promptValue){if(itemIndex===null){return;}
const uiSourceCode=this._currentUISourceCode();if(!uiSourceCode){return;}
const lineNumber=this._items[itemIndex].line;if(!isNaN(lineNumber)&&lineNumber>=0){Common.Revealer.reveal(uiSourceCode.uiLocation(lineNumber,this._items[itemIndex].column));}}
_currentUISourceCode(){const sourcesView=UI.context.flavor(Sources.SourcesView);if(!sourcesView){return null;}
return sourcesView.currentUISourceCode();}
notFoundText(){if(!this._currentUISourceCode()){return Common.UIString('No file selected.');}
if(!this._active){return Common.UIString('Open a JavaScript or CSS file to see symbols');}
return Common.UIString('No results found');}};;Sources.TabbedEditorContainerDelegate=function(){};Sources.TabbedEditorContainerDelegate.prototype={viewForFile(uiSourceCode){},recycleUISourceCodeFrame(sourceFrame,uiSourceCode){},};Sources.TabbedEditorContainer=class extends Common.Object{constructor(delegate,setting,placeholderElement,focusedPlaceholderElement){super();this._delegate=delegate;this._tabbedPane=new UI.TabbedPane();this._tabbedPane.setPlaceholderElement(placeholderElement,focusedPlaceholderElement);this._tabbedPane.setTabDelegate(new Sources.EditorContainerTabDelegate(this));this._tabbedPane.setCloseableTabs(true);this._tabbedPane.setAllowTabReorder(true,true);this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabClosed,this._tabClosed,this);this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected,this._tabSelected,this);Persistence.persistence.addEventListener(Persistence.Persistence.Events.BindingCreated,this._onBindingCreated,this);Persistence.persistence.addEventListener(Persistence.Persistence.Events.BindingRemoved,this._onBindingRemoved,this);this._tabIds=new Map();this._files={};this._previouslyViewedFilesSetting=setting;this._history=Sources.TabbedEditorContainer.History.fromObject(this._previouslyViewedFilesSetting.get());}
_onBindingCreated(event){const binding=(event.data);this._updateFileTitle(binding.fileSystem);const networkTabId=this._tabIds.get(binding.network);let fileSystemTabId=this._tabIds.get(binding.fileSystem);const wasSelectedInNetwork=this._currentFile===binding.network;const currentSelectionRange=this._history.selectionRange(binding.network.url());const currentScrollLineNumber=this._history.scrollLineNumber(binding.network.url());this._history.remove(binding.network.url());if(!networkTabId){return;}
if(!fileSystemTabId){const networkView=this._tabbedPane.tabView(networkTabId);const tabIndex=this._tabbedPane.tabIndex(networkTabId);if(networkView instanceof Sources.UISourceCodeFrame){this._delegate.recycleUISourceCodeFrame(networkView,binding.fileSystem);fileSystemTabId=this._appendFileTab(binding.fileSystem,false,tabIndex,networkView);}else{fileSystemTabId=this._appendFileTab(binding.fileSystem,false,tabIndex);const fileSystemTabView=(this._tabbedPane.tabView(fileSystemTabId));this._restoreEditorProperties(fileSystemTabView,currentSelectionRange,currentScrollLineNumber);}}
this._closeTabs([networkTabId],true);if(wasSelectedInNetwork){this._tabbedPane.selectTab(fileSystemTabId,false);}
this._updateHistory();}
_onBindingRemoved(event){const binding=(event.data);this._updateFileTitle(binding.fileSystem);}
get view(){return this._tabbedPane;}
get visibleView(){return this._tabbedPane.visibleView;}
fileViews(){return(this._tabbedPane.tabViews());}
leftToolbar(){return this._tabbedPane.leftToolbar();}
rightToolbar(){return this._tabbedPane.rightToolbar();}
show(parentElement){this._tabbedPane.show(parentElement);}
showFile(uiSourceCode){this._innerShowFile(uiSourceCode,true);}
closeFile(uiSourceCode){const tabId=this._tabIds.get(uiSourceCode);if(!tabId){return;}
this._closeTabs([tabId]);}
closeAllFiles(){this._closeTabs(this._tabbedPane.tabIds());}
historyUISourceCodes(){const uriToUISourceCode={};for(const id in this._files){const uiSourceCode=this._files[id];uriToUISourceCode[uiSourceCode.url()]=uiSourceCode;}
const result=[];const uris=this._history._urls();for(let i=0;i<uris.length;++i){const uiSourceCode=uriToUISourceCode[uris[i]];if(uiSourceCode){result.push(uiSourceCode);}}
return result;}
_addViewListeners(){if(!this._currentView||!this._currentView.textEditor){return;}
this._currentView.textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.ScrollChanged,this._scrollChanged,this);this._currentView.textEditor.addEventListener(SourceFrame.SourcesTextEditor.Events.SelectionChanged,this._selectionChanged,this);}
_removeViewListeners(){if(!this._currentView||!this._currentView.textEditor){return;}
this._currentView.textEditor.removeEventListener(SourceFrame.SourcesTextEditor.Events.ScrollChanged,this._scrollChanged,this);this._currentView.textEditor.removeEventListener(SourceFrame.SourcesTextEditor.Events.SelectionChanged,this._selectionChanged,this);}
_scrollChanged(event){if(this._scrollTimer){clearTimeout(this._scrollTimer);}
const lineNumber=(event.data);this._scrollTimer=setTimeout(saveHistory.bind(this),100);this._history.updateScrollLineNumber(this._currentFile.url(),lineNumber);function saveHistory(){this._history.save(this._previouslyViewedFilesSetting);}}
_selectionChanged(event){const range=(event.data);this._history.updateSelectionRange(this._currentFile.url(),range);this._history.save(this._previouslyViewedFilesSetting);Extensions.extensionServer.sourceSelectionChanged(this._currentFile.url(),range);}
_innerShowFile(uiSourceCode,userGesture){const binding=Persistence.persistence.binding(uiSourceCode);uiSourceCode=binding?binding.fileSystem:uiSourceCode;if(this._currentFile===uiSourceCode){return;}
this._removeViewListeners();this._currentFile=uiSourceCode;const tabId=this._tabIds.get(uiSourceCode)||this._appendFileTab(uiSourceCode,userGesture);this._tabbedPane.selectTab(tabId,userGesture);if(userGesture){this._editorSelectedByUserAction();}
const previousView=this._currentView;this._currentView=this.visibleView;this._addViewListeners();const eventData={currentFile:this._currentFile,currentView:this._currentView,previousView:previousView,userGesture:userGesture};this.dispatchEventToListeners(Sources.TabbedEditorContainer.Events.EditorSelected,eventData);}
_titleForFile(uiSourceCode){const maxDisplayNameLength=30;let title=uiSourceCode.displayName(true).trimMiddle(maxDisplayNameLength);if(uiSourceCode.isDirty()){title+='*';}
return title;}
_maybeCloseTab(id,nextTabId){const uiSourceCode=this._files[id];const shouldPrompt=uiSourceCode.isDirty()&&uiSourceCode.project().canSetFileContent();if(!shouldPrompt||confirm(Common.UIString('Are you sure you want to close unsaved file: %s?',uiSourceCode.name()))){uiSourceCode.resetWorkingCopy();if(nextTabId){this._tabbedPane.selectTab(nextTabId,true);}
this._tabbedPane.closeTab(id,true);return true;}
return false;}
_closeTabs(ids,forceCloseDirtyTabs){const dirtyTabs=[];const cleanTabs=[];for(let i=0;i<ids.length;++i){const id=ids[i];const uiSourceCode=this._files[id];if(!forceCloseDirtyTabs&&uiSourceCode.isDirty()){dirtyTabs.push(id);}else{cleanTabs.push(id);}}
if(dirtyTabs.length){this._tabbedPane.selectTab(dirtyTabs[0],true);}
this._tabbedPane.closeTabs(cleanTabs,true);for(let i=0;i<dirtyTabs.length;++i){const nextTabId=i+1<dirtyTabs.length?dirtyTabs[i+1]:null;if(!this._maybeCloseTab(dirtyTabs[i],nextTabId)){break;}}}
_onContextMenu(tabId,contextMenu){const uiSourceCode=this._files[tabId];if(uiSourceCode){contextMenu.appendApplicableItems(uiSourceCode);}}
addUISourceCode(uiSourceCode){const binding=Persistence.persistence.binding(uiSourceCode);uiSourceCode=binding?binding.fileSystem:uiSourceCode;if(this._currentFile===uiSourceCode){return;}
const uri=uiSourceCode.url();const index=this._history.index(uri);if(index===-1){return;}
if(!this._tabIds.has(uiSourceCode)){this._appendFileTab(uiSourceCode,false);}
if(!index){this._innerShowFile(uiSourceCode,false);return;}
if(!this._currentFile){return;}
const currentProjectIsSnippets=Snippets.isSnippetsUISourceCode(this._currentFile);const addedProjectIsSnippets=Snippets.isSnippetsUISourceCode(uiSourceCode);if(this._history.index(this._currentFile.url())&&currentProjectIsSnippets&&!addedProjectIsSnippets){this._innerShowFile(uiSourceCode,false);}}
removeUISourceCode(uiSourceCode){this.removeUISourceCodes([uiSourceCode]);}
removeUISourceCodes(uiSourceCodes){const tabIds=[];for(let i=0;i<uiSourceCodes.length;++i){const uiSourceCode=uiSourceCodes[i];const tabId=this._tabIds.get(uiSourceCode);if(tabId){tabIds.push(tabId);}}
this._tabbedPane.closeTabs(tabIds);}
_editorClosedByUserAction(uiSourceCode){this._history.remove(uiSourceCode.url());this._updateHistory();}
_editorSelectedByUserAction(){this._updateHistory();}
_updateHistory(){const tabIds=this._tabbedPane.lastOpenedTabIds(Sources.TabbedEditorContainer.maximalPreviouslyViewedFilesCount);function tabIdToURI(tabId){return this._files[tabId].url();}
this._history.update(tabIds.map(tabIdToURI.bind(this)));this._history.save(this._previouslyViewedFilesSetting);}
_tooltipForFile(uiSourceCode){uiSourceCode=Persistence.persistence.network(uiSourceCode)||uiSourceCode;return uiSourceCode.url();}
_appendFileTab(uiSourceCode,userGesture,index,replaceView){const view=replaceView||this._delegate.viewForFile(uiSourceCode);const title=this._titleForFile(uiSourceCode);const tooltip=this._tooltipForFile(uiSourceCode);const tabId=this._generateTabId();this._tabIds.set(uiSourceCode,tabId);this._files[tabId]=uiSourceCode;if(!replaceView){const savedSelectionRange=this._history.selectionRange(uiSourceCode.url());const savedScrollLineNumber=this._history.scrollLineNumber(uiSourceCode.url());this._restoreEditorProperties(view,savedSelectionRange,savedScrollLineNumber);}
this._tabbedPane.appendTab(tabId,title,view,tooltip,userGesture,undefined,index);this._updateFileTitle(uiSourceCode);this._addUISourceCodeListeners(uiSourceCode);if(uiSourceCode.loadError()){this._addLoadErrorIcon(tabId);}else if(!uiSourceCode.contentLoaded()){uiSourceCode.requestContent().then(content=>{if(uiSourceCode.loadError()){this._addLoadErrorIcon(tabId);}});}
return tabId;}
_addLoadErrorIcon(tabId){const icon=UI.Icon.create('smallicon-error');icon.title=ls`Unable to load this content.`;if(this._tabbedPane.tabView(tabId)){this._tabbedPane.setTabIcon(tabId,icon);}}
_restoreEditorProperties(editorView,selection,firstLineNumber){const sourceFrame=editorView instanceof SourceFrame.SourceFrame?(editorView):null;if(!sourceFrame){return;}
if(selection){sourceFrame.setSelection(selection);}
if(typeof firstLineNumber==='number'){sourceFrame.scrollToLine(firstLineNumber);}}
_tabClosed(event){const tabId=(event.data.tabId);const userGesture=(event.data.isUserGesture);const uiSourceCode=this._files[tabId];if(this._currentFile===uiSourceCode){this._removeViewListeners();delete this._currentView;delete this._currentFile;}
this._tabIds.remove(uiSourceCode);delete this._files[tabId];this._removeUISourceCodeListeners(uiSourceCode);this.dispatchEventToListeners(Sources.TabbedEditorContainer.Events.EditorClosed,uiSourceCode);if(userGesture){this._editorClosedByUserAction(uiSourceCode);}}
_tabSelected(event){const tabId=(event.data.tabId);const userGesture=(event.data.isUserGesture);const uiSourceCode=this._files[tabId];this._innerShowFile(uiSourceCode,userGesture);}
_addUISourceCodeListeners(uiSourceCode){uiSourceCode.addEventListener(Workspace.UISourceCode.Events.TitleChanged,this._uiSourceCodeTitleChanged,this);uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._uiSourceCodeWorkingCopyChanged,this);uiSourceCode.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._uiSourceCodeWorkingCopyCommitted,this);}
_removeUISourceCodeListeners(uiSourceCode){uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.TitleChanged,this._uiSourceCodeTitleChanged,this);uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this._uiSourceCodeWorkingCopyChanged,this);uiSourceCode.removeEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this._uiSourceCodeWorkingCopyCommitted,this);}
_updateFileTitle(uiSourceCode){const tabId=this._tabIds.get(uiSourceCode);if(tabId){const title=this._titleForFile(uiSourceCode);const tooltip=this._tooltipForFile(uiSourceCode);this._tabbedPane.changeTabTitle(tabId,title,tooltip);let icon=null;if(uiSourceCode.loadError()){icon=UI.Icon.create('smallicon-error');icon.title=ls`Unable to load this content.`;}else if(Persistence.persistence.hasUnsavedCommittedChanges(uiSourceCode)){icon=UI.Icon.create('smallicon-warning');icon.title=Common.UIString('Changes to this file were not saved to file system.');}else{icon=Persistence.PersistenceUtils.iconForUISourceCode(uiSourceCode);}
this._tabbedPane.setTabIcon(tabId,icon);}}
_uiSourceCodeTitleChanged(event){const uiSourceCode=(event.data);this._updateFileTitle(uiSourceCode);this._updateHistory();}
_uiSourceCodeWorkingCopyChanged(event){const uiSourceCode=(event.data);this._updateFileTitle(uiSourceCode);}
_uiSourceCodeWorkingCopyCommitted(event){const uiSourceCode=(event.data.uiSourceCode);this._updateFileTitle(uiSourceCode);}
_generateTabId(){return'tab_'+(Sources.TabbedEditorContainer._tabId++);}
currentFile(){return this._currentFile||null;}};Sources.TabbedEditorContainer.Events={EditorSelected:Symbol('EditorSelected'),EditorClosed:Symbol('EditorClosed')};Sources.TabbedEditorContainer._tabId=0;Sources.TabbedEditorContainer.maximalPreviouslyViewedFilesCount=30;Sources.TabbedEditorContainer.HistoryItem=class{constructor(url,selectionRange,scrollLineNumber){this.url=url;this._isSerializable=url.length<Sources.TabbedEditorContainer.HistoryItem.serializableUrlLengthLimit;this.selectionRange=selectionRange;this.scrollLineNumber=scrollLineNumber;}
static fromObject(serializedHistoryItem){const selectionRange=serializedHistoryItem.selectionRange?TextUtils.TextRange.fromObject(serializedHistoryItem.selectionRange):undefined;return new Sources.TabbedEditorContainer.HistoryItem(serializedHistoryItem.url,selectionRange,serializedHistoryItem.scrollLineNumber);}
serializeToObject(){if(!this._isSerializable){return null;}
const serializedHistoryItem={};serializedHistoryItem.url=this.url;serializedHistoryItem.selectionRange=this.selectionRange;serializedHistoryItem.scrollLineNumber=this.scrollLineNumber;return serializedHistoryItem;}};Sources.TabbedEditorContainer.HistoryItem.serializableUrlLengthLimit=4096;Sources.TabbedEditorContainer.History=class{constructor(items){this._items=items;this._rebuildItemIndex();}
static fromObject(serializedHistory){const items=[];for(let i=0;i<serializedHistory.length;++i){items.push(Sources.TabbedEditorContainer.HistoryItem.fromObject(serializedHistory[i]));}
return new Sources.TabbedEditorContainer.History(items);}
index(url){return this._itemsIndex.has(url)?(this._itemsIndex.get(url)):-1;}
_rebuildItemIndex(){this._itemsIndex=new Map();for(let i=0;i<this._items.length;++i){console.assert(!this._itemsIndex.has(this._items[i].url));this._itemsIndex.set(this._items[i].url,i);}}
selectionRange(url){const index=this.index(url);return index!==-1?this._items[index].selectionRange:undefined;}
updateSelectionRange(url,selectionRange){if(!selectionRange){return;}
const index=this.index(url);if(index===-1){return;}
this._items[index].selectionRange=selectionRange;}
scrollLineNumber(url){const index=this.index(url);return index!==-1?this._items[index].scrollLineNumber:undefined;}
updateScrollLineNumber(url,scrollLineNumber){const index=this.index(url);if(index===-1){return;}
this._items[index].scrollLineNumber=scrollLineNumber;}
update(urls){for(let i=urls.length-1;i>=0;--i){const index=this.index(urls[i]);let item;if(index!==-1){item=this._items[index];this._items.splice(index,1);}else{item=new Sources.TabbedEditorContainer.HistoryItem(urls[i]);}
this._items.unshift(item);this._rebuildItemIndex();}}
remove(url){const index=this.index(url);if(index!==-1){this._items.splice(index,1);this._rebuildItemIndex();}}
save(setting){setting.set(this._serializeToObject());}
_serializeToObject(){const serializedHistory=[];for(let i=0;i<this._items.length;++i){const serializedItem=this._items[i].serializeToObject();if(serializedItem){serializedHistory.push(serializedItem);}
if(serializedHistory.length===Sources.TabbedEditorContainer.maximalPreviouslyViewedFilesCount){break;}}
return serializedHistory;}
_urls(){const result=[];for(let i=0;i<this._items.length;++i){result.push(this._items[i].url);}
return result;}};Sources.EditorContainerTabDelegate=class{constructor(editorContainer){this._editorContainer=editorContainer;}
closeTabs(tabbedPane,ids){this._editorContainer._closeTabs(ids);}
onContextMenu(tabId,contextMenu){this._editorContainer._onContextMenu(tabId,contextMenu);}};;Sources.WatchExpressionsSidebarPane=class extends UI.ThrottledWidget{constructor(){super(true);this.registerRequiredCSS('object_ui/objectValue.css');this.registerRequiredCSS('sources/watchExpressionsSidebarPane.css');this._watchExpressions=[];this._watchExpressionsSetting=Common.settings.createLocalSetting('watchExpressions',[]);this._addButton=new UI.ToolbarButton(ls`Add watch expression`,'largeicon-add');this._addButton.addEventListener(UI.ToolbarButton.Events.Click,this._addButtonClicked.bind(this));this._refreshButton=new UI.ToolbarButton(ls`Refresh watch expressions`,'largeicon-refresh');this._refreshButton.addEventListener(UI.ToolbarButton.Events.Click,this.update,this);this.contentElement.classList.add('watch-expressions');this.contentElement.addEventListener('contextmenu',this._contextMenu.bind(this),false);this._treeOutline=new ObjectUI.ObjectPropertiesSectionsTreeOutline();this._treeOutline.registerRequiredCSS('sources/watchExpressionsSidebarPane.css');this._treeOutline.setShowSelectionOnKeyboardFocus(true);this._expandController=new ObjectUI.ObjectPropertiesSectionsTreeExpandController(this._treeOutline);UI.context.addFlavorChangeListener(SDK.ExecutionContext,this.update,this);UI.context.addFlavorChangeListener(SDK.DebuggerModel.CallFrame,this.update,this);this._linkifier=new Components.Linkifier();this.update();}
toolbarItems(){return[this._addButton,this._refreshButton];}
focus(){if(this.hasFocus()){return;}
if(this._watchExpressions.length>0){this._treeOutline.forceSelect();}}
hasExpressions(){return!!this._watchExpressionsSetting.get().length;}
_saveExpressions(){const toSave=[];for(let i=0;i<this._watchExpressions.length;i++){if(this._watchExpressions[i].expression()){toSave.push(this._watchExpressions[i].expression());}}
this._watchExpressionsSetting.set(toSave);}
async _addButtonClicked(){await UI.viewManager.showView('sources.watch');this._createWatchExpression(null).startEditing();}
doUpdate(){this._linkifier.reset();this.contentElement.removeChildren();this._treeOutline.removeChildren();this._watchExpressions=[];this._emptyElement=this.contentElement.createChild('div','gray-info-message');this._emptyElement.textContent=Common.UIString('No watch expressions');this._emptyElement.tabIndex=-1;const watchExpressionStrings=this._watchExpressionsSetting.get();for(let i=0;i<watchExpressionStrings.length;++i){const expression=watchExpressionStrings[i];if(!expression){continue;}
this._createWatchExpression(expression);}
return Promise.resolve();}
_createWatchExpression(expression){this._emptyElement.classList.add('hidden');this.contentElement.appendChild(this._treeOutline.element);const watchExpression=new Sources.WatchExpression(expression,this._expandController,this._linkifier);watchExpression.addEventListener(Sources.WatchExpression.Events.ExpressionUpdated,this._watchExpressionUpdated,this);this._treeOutline.appendChild(watchExpression.treeElement());this._watchExpressions.push(watchExpression);return watchExpression;}
_watchExpressionUpdated(event){const watchExpression=(event.data);if(!watchExpression.expression()){this._watchExpressions.remove(watchExpression);this._treeOutline.removeChild(watchExpression.treeElement());this._emptyElement.classList.toggle('hidden',!!this._watchExpressions.length);if(this._watchExpressions.length===0){this._treeOutline.element.remove();}}
this._saveExpressions();}
_contextMenu(event){const contextMenu=new UI.ContextMenu(event);this._populateContextMenu(contextMenu,event);contextMenu.show();}
_populateContextMenu(contextMenu,event){let isEditing=false;for(const watchExpression of this._watchExpressions){isEditing|=watchExpression.isEditing();}
if(!isEditing){contextMenu.debugSection().appendItem(Common.UIString('Add watch expression'),this._addButtonClicked.bind(this));}
if(this._watchExpressions.length>1){contextMenu.debugSection().appendItem(Common.UIString('Delete all watch expressions'),this._deleteAllButtonClicked.bind(this));}
const treeElement=this._treeOutline.treeElementFromEvent(event);if(!treeElement){return;}
const currentWatchExpression=this._watchExpressions.find(watchExpression=>treeElement.hasAncestorOrSelf(watchExpression.treeElement()));currentWatchExpression._populateContextMenu(contextMenu,event);}
_deleteAllButtonClicked(){this._watchExpressions=[];this._saveExpressions();this.update();}
_focusAndAddExpressionToWatch(expression){UI.viewManager.showView('sources.watch');this.doUpdate();this._addExpressionToWatch(expression);}
_addExpressionToWatch(expression){this._createWatchExpression(expression);this._saveExpressions();}
handleAction(context,actionId){const frame=UI.context.flavor(Sources.UISourceCodeFrame);if(!frame){return false;}
const text=frame.textEditor.text(frame.textEditor.selection());this._focusAndAddExpressionToWatch(text);return true;}
_addPropertyPathToWatch(target){this._addExpressionToWatch(target.path());}
appendApplicableItems(event,contextMenu,target){if(target instanceof ObjectUI.ObjectPropertyTreeElement&&!target.property.synthetic){contextMenu.debugSection().appendItem(ls`Add property path to watch`,this._addPropertyPathToWatch.bind(this,target));}
const frame=UI.context.flavor(Sources.UISourceCodeFrame);if(!frame||frame.textEditor.selection().isEmpty()){return;}
contextMenu.debugSection().appendAction('sources.add-to-watch');}};Sources.WatchExpression=class extends Common.Object{constructor(expression,expandController,linkifier){super();this._expression=expression;this._expandController=expandController;this._element=createElementWithClass('div','watch-expression monospace');this._editing=false;this._linkifier=linkifier;this._createWatchExpression();this.update();}
treeElement(){return this._treeElement;}
expression(){return this._expression;}
update(){const currentExecutionContext=UI.context.flavor(SDK.ExecutionContext);if(currentExecutionContext&&this._expression){currentExecutionContext.evaluate({expression:this._expression,objectGroup:Sources.WatchExpression._watchObjectGroupId,includeCommandLineAPI:false,silent:true,returnByValue:false,generatePreview:false},false,false).then(result=>this._createWatchExpression(result.object,result.exceptionDetails));}}
startEditing(){this._editing=true;this._element.removeChildren();const newDiv=this._element.createChild('div');newDiv.textContent=this._nameElement.textContent;this._textPrompt=new ObjectUI.ObjectPropertyPrompt();this._textPrompt.renderAsBlock();const proxyElement=this._textPrompt.attachAndStartEditing(newDiv,this._finishEditing.bind(this));this._treeElement.listItemElement.classList.add('watch-expression-editing');proxyElement.classList.add('watch-expression-text-prompt-proxy');proxyElement.addEventListener('keydown',this._promptKeyDown.bind(this),false);this._element.getComponentSelection().selectAllChildren(newDiv);}
isEditing(){return!!this._editing;}
_finishEditing(event,canceled){if(event){event.consume(canceled);}
this._editing=false;this._treeElement.listItemElement.classList.remove('watch-expression-editing');this._textPrompt.detach();const newExpression=canceled?this._expression:this._textPrompt.text();delete this._textPrompt;this._element.removeChildren();this._updateExpression(newExpression);}
_dblClickOnWatchExpression(event){event.consume();if(!this.isEditing()){this.startEditing();}}
_updateExpression(newExpression){if(this._expression){this._expandController.stopWatchSectionsWithId(this._expression);}
this._expression=newExpression;this.update();this.dispatchEventToListeners(Sources.WatchExpression.Events.ExpressionUpdated,this);}
_deleteWatchExpression(event){event.consume(true);this._updateExpression(null);}
_createWatchExpression(result,exceptionDetails){this._result=result||null;this._element.removeChildren();const oldTreeElement=this._treeElement;this._createWatchExpressionTreeElement(result,exceptionDetails);if(oldTreeElement&&oldTreeElement.parent){const root=oldTreeElement.parent;const index=root.indexOfChild(oldTreeElement);root.removeChild(oldTreeElement);root.insertChild(this._treeElement,index);}
this._treeElement.select();}
_createWatchExpressionHeader(expressionValue,exceptionDetails){const headerElement=this._element.createChild('div','watch-expression-header');const deleteButton=UI.Icon.create('smallicon-cross','watch-expression-delete-button');deleteButton.title=ls`Delete watch expression`;deleteButton.addEventListener('click',this._deleteWatchExpression.bind(this),false);headerElement.appendChild(deleteButton);const titleElement=headerElement.createChild('div','watch-expression-title tree-element-title');this._nameElement=ObjectUI.ObjectPropertiesSection.createNameElement(this._expression);if(!!exceptionDetails||!expressionValue){this._valueElement=createElementWithClass('span','watch-expression-error value');titleElement.classList.add('dimmed');this._valueElement.textContent=Common.UIString('<not available>');}else{this._valueElement=ObjectUI.ObjectPropertiesSection.createValueElementWithCustomSupport(expressionValue,!!exceptionDetails,false,titleElement,this._linkifier);}
const separatorElement=createElementWithClass('span','watch-expressions-separator');separatorElement.textContent=': ';titleElement.appendChildren(this._nameElement,separatorElement,this._valueElement);return headerElement;}
_createWatchExpressionTreeElement(expressionValue,exceptionDetails){const headerElement=this._createWatchExpressionHeader(expressionValue,exceptionDetails);if(!exceptionDetails&&expressionValue&&expressionValue.hasChildren&&!expressionValue.customPreview()){headerElement.classList.add('watch-expression-object-header');this._treeElement=new ObjectUI.ObjectPropertiesSection.RootElement(expressionValue,this._linkifier);this._expandController.watchSection((this._expression),this._treeElement);this._treeElement.toggleOnClick=false;this._treeElement.listItemElement.addEventListener('click',this._onSectionClick.bind(this),false);this._treeElement.listItemElement.addEventListener('dblclick',this._dblClickOnWatchExpression.bind(this));}else{headerElement.addEventListener('dblclick',this._dblClickOnWatchExpression.bind(this));this._treeElement=new UI.TreeElement();}
this._treeElement.title=this._element;this._treeElement.listItemElement.classList.add('watch-expression-tree-item');this._treeElement.listItemElement.addEventListener('keydown',event=>{if(isEnterKey(event)&&!this.isEditing()){this.startEditing();event.consume(true);}});}
_onSectionClick(event){event.consume(true);if(event.detail===1){this._preventClickTimeout=setTimeout(handleClick.bind(this),333);}else{clearTimeout(this._preventClickTimeout);delete this._preventClickTimeout;}
function handleClick(){if(!this._treeElement){return;}
if(this._treeElement.expanded){this._treeElement.collapse();}else{this._treeElement.expand();}}}
_promptKeyDown(event){if(isEnterKey(event)||isEscKey(event)){this._finishEditing(event,isEscKey(event));}}
_populateContextMenu(contextMenu,event){if(!this.isEditing()){contextMenu.editSection().appendItem(Common.UIString('Delete watch expression'),this._updateExpression.bind(this,null));}
if(!this.isEditing()&&this._result&&(this._result.type==='number'||this._result.type==='string')){contextMenu.clipboardSection().appendItem(Common.UIString('Copy value'),this._copyValueButtonClicked.bind(this));}
const target=event.deepElementFromPoint();if(target&&this._valueElement.isSelfOrAncestor(target)){contextMenu.appendApplicableItems(this._result);}}
_copyValueButtonClicked(){Host.InspectorFrontendHost.copyText(this._valueElement.textContent);}};Sources.WatchExpression._watchObjectGroupId='watch-group';Sources.WatchExpression.Events={ExpressionUpdated:Symbol('ExpressionUpdated')};;Sources.ThreadsSidebarPane=class extends UI.VBox{constructor(){super(true);this.registerRequiredCSS('sources/threadsSidebarPane.css');this._items=new UI.ListModel();this._list=new UI.ListControl(this._items,this,UI.ListMode.NonViewport);this.contentElement.appendChild(this._list.element);UI.context.addFlavorChangeListener(SDK.Target,this._targetFlavorChanged,this);SDK.targetManager.observeModels(SDK.DebuggerModel,this);}
static shouldBeShown(){return SDK.targetManager.models(SDK.DebuggerModel).length>=2;}
createElementForItem(debuggerModel){const element=createElementWithClass('div','thread-item');const title=element.createChild('div','thread-item-title');const pausedState=element.createChild('div','thread-item-paused-state');element.appendChild(UI.Icon.create('smallicon-thick-right-arrow','selected-thread-icon'));function updateTitle(){const executionContext=debuggerModel.runtimeModel().defaultExecutionContext();title.textContent=executionContext&&executionContext.label()?executionContext.label():debuggerModel.target().name();}
function updatePausedState(){pausedState.textContent=debuggerModel.isPaused()?ls`paused`:'';}
function targetNameChanged(event){const target=(event.data);if(target===debuggerModel.target()){updateTitle();}}
debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerPaused,updatePausedState);debuggerModel.addEventListener(SDK.DebuggerModel.Events.DebuggerResumed,updatePausedState);debuggerModel.runtimeModel().addEventListener(SDK.RuntimeModel.Events.ExecutionContextChanged,updateTitle);SDK.targetManager.addEventListener(SDK.TargetManager.Events.NameChanged,targetNameChanged);updatePausedState();updateTitle();return element;}
heightForItem(debuggerModel){console.assert(false);return 0;}
isItemSelectable(debuggerModel){return true;}
selectedItemChanged(from,to,fromElement,toElement){if(fromElement){fromElement.classList.remove('selected');}
if(toElement){toElement.classList.add('selected');}
if(to){UI.context.setFlavor(SDK.Target,to.target());}}
modelAdded(debuggerModel){this._items.insert(this._items.length,debuggerModel);const currentTarget=UI.context.flavor(SDK.Target);if(currentTarget===debuggerModel.target()){this._list.selectItem(debuggerModel);}}
modelRemoved(debuggerModel){this._items.remove(this._items.indexOf(debuggerModel));}
_targetFlavorChanged(event){const target=(event.data);const debuggerModel=target.model(SDK.DebuggerModel);if(debuggerModel){this._list.selectItem(debuggerModel);}}};;Sources.ScriptFormatterEditorAction=class{constructor(){this._pathsToFormatOnLoad=new Set();}
_editorSelected(event){const uiSourceCode=(event.data);this._updateButton(uiSourceCode);if(this._isFormatableScript(uiSourceCode)&&this._pathsToFormatOnLoad.has(uiSourceCode.url())&&!Sources.sourceFormatter.hasFormatted(uiSourceCode)){this._showFormatted(uiSourceCode);}}
_editorClosed(event){const uiSourceCode=(event.data.uiSourceCode);const wasSelected=(event.data.wasSelected);if(wasSelected){this._updateButton(null);}
const original=Sources.sourceFormatter.discardFormattedUISourceCode(uiSourceCode);if(original){this._pathsToFormatOnLoad.delete(original.url());}}
_updateButton(uiSourceCode){this._button.element.classList.toggle('hidden',!this._isFormatableScript(uiSourceCode));}
button(sourcesView){if(this._button){return this._button;}
this._sourcesView=sourcesView;this._sourcesView.addEventListener(Sources.SourcesView.Events.EditorSelected,this._editorSelected.bind(this));this._sourcesView.addEventListener(Sources.SourcesView.Events.EditorClosed,this._editorClosed.bind(this));this._button=new UI.ToolbarButton(Common.UIString('Pretty print'),'largeicon-pretty-print');this._button.addEventListener(UI.ToolbarButton.Events.Click,this._toggleFormatScriptSource,this);this._updateButton(sourcesView.currentUISourceCode());return this._button;}
_isFormatableScript(uiSourceCode){if(!uiSourceCode){return false;}
if(uiSourceCode.project().canSetFileContent()){return false;}
if(uiSourceCode.project().type()===Workspace.projectTypes.Formatter){return false;}
if(Persistence.persistence.binding(uiSourceCode)){return false;}
return uiSourceCode.contentType().hasScripts();}
_toggleFormatScriptSource(event){const uiSourceCode=this._sourcesView.currentUISourceCode();if(!this._isFormatableScript(uiSourceCode)){return;}
this._pathsToFormatOnLoad.add(uiSourceCode.url());this._showFormatted(uiSourceCode);}
async _showFormatted(uiSourceCode){const formatData=await Sources.sourceFormatter.format(uiSourceCode);if(uiSourceCode!==this._sourcesView.currentUISourceCode()){return;}
const sourceFrame=this._sourcesView.viewForFile(uiSourceCode);let start=[0,0];if(sourceFrame){const selection=sourceFrame.selection();start=formatData.mapping.originalToFormatted(selection.startLine,selection.startColumn);}
this._sourcesView.showSourceLocation(formatData.formattedSourceCode,start[0],start[1]);}};;Sources.InplaceFormatterEditorAction=class{_editorSelected(event){const uiSourceCode=(event.data);this._updateButton(uiSourceCode);}
_editorClosed(event){const wasSelected=(event.data.wasSelected);if(wasSelected){this._updateButton(null);}}
_updateButton(uiSourceCode){this._button.element.classList.toggle('hidden',!this._isFormattable(uiSourceCode));}
button(sourcesView){if(this._button){return this._button;}
this._sourcesView=sourcesView;this._sourcesView.addEventListener(Sources.SourcesView.Events.EditorSelected,this._editorSelected.bind(this));this._sourcesView.addEventListener(Sources.SourcesView.Events.EditorClosed,this._editorClosed.bind(this));this._button=new UI.ToolbarButton(Common.UIString('Format'),'largeicon-pretty-print');this._button.addEventListener(UI.ToolbarButton.Events.Click,this._formatSourceInPlace,this);this._updateButton(sourcesView.currentUISourceCode());return this._button;}
_isFormattable(uiSourceCode){if(!uiSourceCode){return false;}
if(uiSourceCode.project().canSetFileContent()){return true;}
if(Persistence.persistence.binding(uiSourceCode)){return true;}
return uiSourceCode.contentType().isStyleSheet();}
_formatSourceInPlace(event){const uiSourceCode=this._sourcesView.currentUISourceCode();if(!this._isFormattable(uiSourceCode)){return;}
if(uiSourceCode.isDirty()){this._contentLoaded(uiSourceCode,uiSourceCode.workingCopy());}else{uiSourceCode.requestContent().then(deferredContent=>{this._contentLoaded(uiSourceCode,deferredContent.content);});}}
_contentLoaded(uiSourceCode,content){const highlighterType=uiSourceCode.mimeType();Formatter.Formatter.format(uiSourceCode.contentType(),highlighterType,content,(formattedContent,formatterMapping)=>{this._formattingComplete(uiSourceCode,formattedContent,formatterMapping);});}
_formattingComplete(uiSourceCode,formattedContent,formatterMapping){if(uiSourceCode.workingCopy()===formattedContent){return;}
const sourceFrame=this._sourcesView.viewForFile(uiSourceCode);let start=[0,0];if(sourceFrame){const selection=sourceFrame.selection();start=formatterMapping.originalToFormatted(selection.startLine,selection.startColumn);}
uiSourceCode.setWorkingCopy(formattedContent);this._sourcesView.showSourceLocation(uiSourceCode,start[0],start[1]);}};;Sources.SourceFormatData=class{constructor(originalSourceCode,formattedSourceCode,mapping){this.originalSourceCode=originalSourceCode;this.formattedSourceCode=formattedSourceCode;this.mapping=mapping;}
originalPath(){return this.originalSourceCode.project().id()+':'+this.originalSourceCode.url();}
static _for(object){return object[Sources.SourceFormatData._formatDataSymbol];}};Sources.SourceFormatData._formatDataSymbol=Symbol('formatData');Sources.SourceFormatter=class{constructor(){this._projectId='formatter:';this._project=new Bindings.ContentProviderBasedProject(Workspace.workspace,this._projectId,Workspace.projectTypes.Formatter,'formatter',true);this._formattedSourceCodes=new Map();this._scriptMapping=new Sources.SourceFormatter.ScriptMapping();this._styleMapping=new Sources.SourceFormatter.StyleMapping();Workspace.workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved,this._onUISourceCodeRemoved,this);}
_onUISourceCodeRemoved(event){const uiSourceCode=(event.data);const cacheEntry=this._formattedSourceCodes.get(uiSourceCode);if(cacheEntry&&cacheEntry.formatData){this._discardFormatData(cacheEntry.formatData);}
this._formattedSourceCodes.remove(uiSourceCode);}
discardFormattedUISourceCode(formattedUISourceCode){const formatData=Sources.SourceFormatData._for(formattedUISourceCode);if(!formatData){return null;}
this._discardFormatData(formatData);this._formattedSourceCodes.remove(formatData.originalSourceCode);return formatData.originalSourceCode;}
_discardFormatData(formatData){delete formatData.formattedSourceCode[Sources.SourceFormatData._formatDataSymbol];this._scriptMapping._setSourceMappingEnabled(formatData,false);this._styleMapping._setSourceMappingEnabled(formatData,false);this._project.removeFile(formatData.formattedSourceCode.url());}
hasFormatted(uiSourceCode){return this._formattedSourceCodes.has(uiSourceCode);}
async format(uiSourceCode){const cacheEntry=this._formattedSourceCodes.get(uiSourceCode);if(cacheEntry){return cacheEntry.promise;}
let fulfillFormatPromise;const resultPromise=new Promise(fulfill=>{fulfillFormatPromise=fulfill;});this._formattedSourceCodes.set(uiSourceCode,{promise:resultPromise,formatData:null});const{content}=await uiSourceCode.requestContent();Formatter.Formatter.format(uiSourceCode.contentType(),uiSourceCode.mimeType(),content||'',formatDone.bind(this));return resultPromise;function formatDone(formattedContent,formatterMapping){const cacheEntry=this._formattedSourceCodes.get(uiSourceCode);if(!cacheEntry||cacheEntry.promise!==resultPromise){return;}
let formattedURL;let count=0;let suffix='';do{formattedURL=`${uiSourceCode.url()}:formatted${suffix}`;suffix=`:${count++}`;}while(this._project.uiSourceCodeForURL(formattedURL));const contentProvider=Common.StaticContentProvider.fromString(formattedURL,uiSourceCode.contentType(),formattedContent);const formattedUISourceCode=this._project.addContentProvider(formattedURL,contentProvider,uiSourceCode.mimeType());const formatData=new Sources.SourceFormatData(uiSourceCode,formattedUISourceCode,formatterMapping);formattedUISourceCode[Sources.SourceFormatData._formatDataSymbol]=formatData;this._scriptMapping._setSourceMappingEnabled(formatData,true);this._styleMapping._setSourceMappingEnabled(formatData,true);cacheEntry.formatData=formatData;for(const decoration of uiSourceCode.allDecorations()){const range=decoration.range();const startLocation=formatterMapping.originalToFormatted(range.startLine,range.startColumn);const endLocation=formatterMapping.originalToFormatted(range.endLine,range.endColumn);formattedUISourceCode.addDecoration(new TextUtils.TextRange(startLocation[0],startLocation[1],endLocation[0],endLocation[1]),(decoration.type()),decoration.data());}
fulfillFormatPromise(formatData);}}};Sources.SourceFormatter.ScriptMapping=class{constructor(){Bindings.debuggerWorkspaceBinding.addSourceMapping(this);}
rawLocationToUILocation(rawLocation){const script=rawLocation.script();const formatData=script&&Sources.SourceFormatData._for(script);if(!formatData){return null;}
if(script.isInlineScriptWithSourceURL()){const[relativeLineNumber,relativeColumnNumber]=script.toRelativeLocation(rawLocation);const[formattedLineNumber,formattedColumnNumber]=formatData.mapping.originalToFormatted(relativeLineNumber,relativeColumnNumber);return formatData.formattedSourceCode.uiLocation(formattedLineNumber,formattedColumnNumber);}
const[lineNumber,columnNumber]=formatData.mapping.originalToFormatted(rawLocation.lineNumber,rawLocation.columnNumber||0);return formatData.formattedSourceCode.uiLocation(lineNumber,columnNumber);}
uiLocationToRawLocations(uiSourceCode,lineNumber,columnNumber){const formatData=Sources.SourceFormatData._for(uiSourceCode);if(!formatData){return[];}
const[originalLine,originalColumn]=formatData.mapping.formattedToOriginal(lineNumber,columnNumber);if(formatData.originalSourceCode.contentType().isScript()){const rawLocations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(formatData.originalSourceCode,originalLine,originalColumn);console.assert(rawLocations.every(l=>l&&!!l.script()));return rawLocations;}
if(formatData.originalSourceCode.contentType()===Common.resourceTypes.Document){const target=Bindings.NetworkProject.targetForUISourceCode(formatData.originalSourceCode);const debuggerModel=target&&target.model(SDK.DebuggerModel);if(debuggerModel){const scripts=debuggerModel.scriptsForSourceURL(formatData.originalSourceCode.url()).filter(script=>script.isInlineScript()&&!script.hasSourceURL);const locations=scripts.map(script=>script.rawLocation(originalLine,originalColumn)).filter(l=>!!l);console.assert(locations.every(l=>l&&!!l.script()));return locations;}}
return[];}
_setSourceMappingEnabled(formatData,enabled){const scripts=this._scriptsForUISourceCode(formatData.originalSourceCode);if(!scripts.length){return;}
if(enabled){for(const script of scripts){script[Sources.SourceFormatData._formatDataSymbol]=formatData;}}else{for(const script of scripts){delete script[Sources.SourceFormatData._formatDataSymbol];}}
for(const script of scripts){Bindings.debuggerWorkspaceBinding.updateLocations(script);}}
_scriptsForUISourceCode(uiSourceCode){if(uiSourceCode.contentType()===Common.resourceTypes.Document){const target=Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);const debuggerModel=target&&target.model(SDK.DebuggerModel);if(debuggerModel){const scripts=debuggerModel.scriptsForSourceURL(uiSourceCode.url()).filter(script=>script.isInlineScript()&&!script.hasSourceURL);return scripts;}}
if(uiSourceCode.contentType().isScript()){const rawLocations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(uiSourceCode,0,0);return rawLocations.map(location=>location.script()).filter(script=>!!script);}
return[];}};Sources.SourceFormatter.StyleMapping=class{constructor(){Bindings.cssWorkspaceBinding.addSourceMapping(this);this._headersSymbol=Symbol('Sources.SourceFormatter.StyleMapping._headersSymbol');}
rawLocationToUILocation(rawLocation){const styleHeader=rawLocation.header();const formatData=styleHeader&&Sources.SourceFormatData._for(styleHeader);if(!formatData){return null;}
const formattedLocation=formatData.mapping.originalToFormatted(rawLocation.lineNumber,rawLocation.columnNumber||0);return formatData.formattedSourceCode.uiLocation(formattedLocation[0],formattedLocation[1]);}
uiLocationToRawLocations(uiLocation){const formatData=Sources.SourceFormatData._for(uiLocation.uiSourceCode);if(!formatData){return[];}
const[originalLine,originalColumn]=formatData.mapping.formattedToOriginal(uiLocation.lineNumber,uiLocation.columnNumber);const headers=formatData.originalSourceCode[this._headersSymbol].filter(header=>header.containsLocation(originalLine,originalColumn));return headers.map(header=>new SDK.CSSLocation(header,originalLine,originalColumn));}
_setSourceMappingEnabled(formatData,enable){const original=formatData.originalSourceCode;const headers=this._headersForUISourceCode(original);if(enable){original[this._headersSymbol]=headers;headers.forEach(header=>header[Sources.SourceFormatData._formatDataSymbol]=formatData);}else{original[this._headersSymbol]=null;headers.forEach(header=>delete header[Sources.SourceFormatData._formatDataSymbol]);}
headers.forEach(header=>Bindings.cssWorkspaceBinding.updateLocations(header));}
_headersForUISourceCode(uiSourceCode){if(uiSourceCode.contentType()===Common.resourceTypes.Document){const target=Bindings.NetworkProject.targetForUISourceCode(uiSourceCode);const cssModel=target&&target.model(SDK.CSSModel);if(cssModel){return cssModel.headersForSourceURL(uiSourceCode.url()).filter(header=>header.isInline&&!header.hasSourceURL);}}else if(uiSourceCode.contentType().isStyleSheet()){const rawLocations=Bindings.cssWorkspaceBinding.uiLocationToRawLocations(uiSourceCode.uiLocation(0,0));return rawLocations.map(rawLocation=>rawLocation.header()).filter(header=>!!header);}
return[];}};Sources.sourceFormatter=new Sources.SourceFormatter();;Sources.OpenFileQuickOpen=class extends Sources.FilteredUISourceCodeListProvider{attach(){this.setDefaultScores(Sources.SourcesView.defaultUISourceCodeScores());super.attach();}
uiSourceCodeSelected(uiSourceCode,lineNumber,columnNumber){Host.userMetrics.actionTaken(Host.UserMetrics.Action.SelectFileFromFilePicker);if(!uiSourceCode){return;}
if(typeof lineNumber==='number'){Common.Revealer.reveal(uiSourceCode.uiLocation(lineNumber,columnNumber));}else{Common.Revealer.reveal(uiSourceCode);}}
filterProject(project){return!project.isServiceProject();}
renderAsTwoRows(){return true;}};;Sources.SourcesView=class extends UI.VBox{constructor(){super();this.registerRequiredCSS('sources/sourcesView.css');this.element.id='sources-panel-sources-view';this.setMinimumAndPreferredSizes(88,52,150,100);const workspace=Workspace.workspace;this._searchableView=new UI.SearchableView(this,'sourcesViewSearchConfig');this._searchableView.setMinimalSearchQuerySize(0);this._searchableView.show(this.element);this._sourceViewByUISourceCode=new Map();this._editorContainer=new Sources.TabbedEditorContainer(this,Common.settings.createLocalSetting('previouslyViewedFiles',[]),this._placeholderElement(),this._focusedPlaceholderElement);this._editorContainer.show(this._searchableView.element);this._editorContainer.addEventListener(Sources.TabbedEditorContainer.Events.EditorSelected,this._editorSelected,this);this._editorContainer.addEventListener(Sources.TabbedEditorContainer.Events.EditorClosed,this._editorClosed,this);this._historyManager=new Sources.EditingLocationHistoryManager(this,this.currentSourceFrame.bind(this));this._toolbarContainerElement=this.element.createChild('div','sources-toolbar');if(!Root.Runtime.experiments.isEnabled('sourcesPrettyPrint')){this._toolbarEditorActions=new UI.Toolbar('',this._toolbarContainerElement);self.runtime.allInstances(Sources.SourcesView.EditorAction).then(appendButtonsForExtensions.bind(this));}
function appendButtonsForExtensions(actions){for(let i=0;i<actions.length;++i){this._toolbarEditorActions.appendToolbarItem(actions[i].button(this));}}
this._scriptViewToolbar=new UI.Toolbar('',this._toolbarContainerElement);this._scriptViewToolbar.element.style.flex='auto';this._bottomToolbar=new UI.Toolbar('',this._toolbarContainerElement);this._toolbarChangedListener=null;UI.startBatchUpdate();workspace.uiSourceCodes().forEach(this._addUISourceCode.bind(this));UI.endBatchUpdate();workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this._uiSourceCodeAdded,this);workspace.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved,this._uiSourceCodeRemoved,this);workspace.addEventListener(Workspace.Workspace.Events.ProjectRemoved,this._projectRemoved.bind(this),this);function handleBeforeUnload(event){if(event.returnValue){return;}
let unsavedSourceCodes=[];const projects=Workspace.workspace.projectsForType(Workspace.projectTypes.FileSystem);for(let i=0;i<projects.length;++i){unsavedSourceCodes=unsavedSourceCodes.concat(projects[i].uiSourceCodes().filter(sourceCode=>sourceCode.isDirty()));}
if(!unsavedSourceCodes.length){return;}
event.returnValue=Common.UIString('DevTools have unsaved changes that will be permanently lost.');UI.viewManager.showView('sources');for(let i=0;i<unsavedSourceCodes.length;++i){Common.Revealer.reveal(unsavedSourceCodes[i]);}}
if(!window.opener){window.addEventListener('beforeunload',handleBeforeUnload,true);}
this._shortcuts={};this.element.addEventListener('keydown',this._handleKeyDown.bind(this),false);}
_placeholderElement(){this._placeholderOptionArray=[];const shortcuts=[{actionId:'quickOpen.show',description:ls`Open file`},{actionId:'commandMenu.show',description:ls`Run command`},{actionId:'sources.add-folder-to-workspace',description:ls`Drop in a folder to add to workspace`}];const element=createElementWithClass('div');const list=element.createChild('div','tabbed-pane-placeholder');list.addEventListener('keydown',this._placeholderOnKeyDown.bind(this),false);UI.ARIAUtils.markAsList(list);UI.ARIAUtils.setAccessibleName(list,ls`Source View Actions`);for(let i=0;i<shortcuts.length;i++){const shortcut=shortcuts[i];const shortcutKeyText=UI.shortcutRegistry.shortcutTitleForAction(shortcut.actionId);const listItemElement=list.createChild('div');UI.ARIAUtils.markAsListitem(listItemElement);const row=listItemElement.createChild('div','tabbed-pane-placeholder-row');row.tabIndex=-1;UI.ARIAUtils.markAsButton(row);if(shortcutKeyText){row.createChild('div','tabbed-pane-placeholder-key').textContent=shortcutKeyText;row.createChild('div','tabbed-pane-placeholder-value').textContent=shortcut.description;}else{row.createChild('div','tabbed-pane-no-shortcut').textContent=shortcut.description;}
const action=UI.actionRegistry.action(shortcut.actionId);const actionHandler=action.execute.bind(action);this._placeholderOptionArray.push({element:row,handler:actionHandler});}
const firstElement=this._placeholderOptionArray[0].element;firstElement.tabIndex=0;this._focusedPlaceholderElement=firstElement;this._selectedIndex=0;element.appendChild(UI.XLink.create('https://developers.google.com/web/tools/chrome-devtools/sources?utm_source=devtools&utm_campaign=2018Q1','Learn more'));return element;}
_placeholderOnKeyDown(event){if(isEnterOrSpaceKey(event)){this._placeholderOptionArray[this._selectedIndex].handler.call();return;}
let offset=0;if(event.key==='ArrowDown'){offset=1;}else if(event.key==='ArrowUp'){offset=-1;}
const newIndex=Math.max(Math.min(this._placeholderOptionArray.length-1,this._selectedIndex+offset),0);const newElement=this._placeholderOptionArray[newIndex].element;const oldElement=this._placeholderOptionArray[this._selectedIndex].element;if(newElement!==oldElement){oldElement.tabIndex=-1;newElement.tabIndex=0;UI.ARIAUtils.setSelected(oldElement,false);UI.ARIAUtils.setSelected(newElement,true);this._selectedIndex=newIndex;newElement.focus();}}
_resetPlaceholderState(){this._placeholderOptionArray[this._selectedIndex].element.tabIndex=-1;this._placeholderOptionArray[0].element.tabIndex=0;this._selectedIndex=0;}
static defaultUISourceCodeScores(){const defaultScores=new Map();const sourcesView=UI.context.flavor(Sources.SourcesView);if(sourcesView){const uiSourceCodes=sourcesView._editorContainer.historyUISourceCodes();for(let i=1;i<uiSourceCodes.length;++i)
{defaultScores.set(uiSourceCodes[i],uiSourceCodes.length-i);}}
return defaultScores;}
leftToolbar(){return this._editorContainer.leftToolbar();}
rightToolbar(){return this._editorContainer.rightToolbar();}
bottomToolbar(){return this._bottomToolbar;}
_registerShortcuts(keys,handler){for(let i=0;i<keys.length;++i){this._shortcuts[keys[i].key]=handler;}}
_handleKeyDown(event){const shortcutKey=UI.KeyboardShortcut.makeKeyFromEvent(event);const handler=this._shortcuts[shortcutKey];if(handler&&handler()){event.consume(true);}}
wasShown(){super.wasShown();UI.context.setFlavor(Sources.SourcesView,this);}
willHide(){UI.context.setFlavor(Sources.SourcesView,null);this._resetPlaceholderState();super.willHide();}
toolbarContainerElement(){return this._toolbarContainerElement;}
searchableView(){return this._searchableView;}
visibleView(){return this._editorContainer.visibleView;}
currentSourceFrame(){const view=this.visibleView();if(!(view instanceof Sources.UISourceCodeFrame)){return null;}
return(view);}
currentUISourceCode(){return this._editorContainer.currentFile();}
_onCloseEditorTab(){const uiSourceCode=this._editorContainer.currentFile();if(!uiSourceCode){return false;}
this._editorContainer.closeFile(uiSourceCode);return true;}
_onJumpToPreviousLocation(){this._historyManager.rollback();}
_onJumpToNextLocation(){this._historyManager.rollover();}
_uiSourceCodeAdded(event){const uiSourceCode=(event.data);this._addUISourceCode(uiSourceCode);}
_addUISourceCode(uiSourceCode){if(uiSourceCode.project().isServiceProject()){return;}
if(uiSourceCode.project().type()===Workspace.projectTypes.FileSystem&&Persistence.FileSystemWorkspaceBinding.fileSystemType(uiSourceCode.project())==='overrides'){return;}
this._editorContainer.addUISourceCode(uiSourceCode);}
_uiSourceCodeRemoved(event){const uiSourceCode=(event.data);this._removeUISourceCodes([uiSourceCode]);}
_removeUISourceCodes(uiSourceCodes){this._editorContainer.removeUISourceCodes(uiSourceCodes);for(let i=0;i<uiSourceCodes.length;++i){this._removeSourceFrame(uiSourceCodes[i]);this._historyManager.removeHistoryForSourceCode(uiSourceCodes[i]);}}
_projectRemoved(event){const project=event.data;const uiSourceCodes=project.uiSourceCodes();this._removeUISourceCodes(uiSourceCodes);}
_updateScriptViewToolbarItems(){this._scriptViewToolbar.removeToolbarItems();const view=this.visibleView();if(view instanceof UI.SimpleView){for(const item of((view)).syncToolbarItems()){this._scriptViewToolbar.appendToolbarItem(item);}}}
showSourceLocation(uiSourceCode,lineNumber,columnNumber,omitFocus,omitHighlight){this._historyManager.updateCurrentState();this._editorContainer.showFile(uiSourceCode);const currentSourceFrame=this.currentSourceFrame();if(currentSourceFrame&&typeof lineNumber==='number'){currentSourceFrame.revealPosition(lineNumber,columnNumber,!omitHighlight);}
this._historyManager.pushNewState();if(!omitFocus){this.visibleView().focus();}}
_createSourceView(uiSourceCode){let sourceFrame;let sourceView;const contentType=uiSourceCode.contentType();if(contentType===Common.resourceTypes.Image){sourceView=new SourceFrame.ImageView(uiSourceCode.mimeType(),uiSourceCode);}else if(contentType===Common.resourceTypes.Font){sourceView=new SourceFrame.FontView(uiSourceCode.mimeType(),uiSourceCode);}else{sourceFrame=new Sources.UISourceCodeFrame(uiSourceCode);}
if(sourceFrame){this._historyManager.trackSourceFrameCursorJumps(sourceFrame);}
const widget=(sourceFrame||sourceView);this._sourceViewByUISourceCode.set(uiSourceCode,widget);return widget;}
_getOrCreateSourceView(uiSourceCode){return this._sourceViewByUISourceCode.get(uiSourceCode)||this._createSourceView(uiSourceCode);}
recycleUISourceCodeFrame(sourceFrame,uiSourceCode){this._sourceViewByUISourceCode.delete(sourceFrame.uiSourceCode());sourceFrame.setUISourceCode(uiSourceCode);this._sourceViewByUISourceCode.set(uiSourceCode,sourceFrame);}
viewForFile(uiSourceCode){return this._getOrCreateSourceView(uiSourceCode);}
_removeSourceFrame(uiSourceCode){const sourceView=this._sourceViewByUISourceCode.get(uiSourceCode);this._sourceViewByUISourceCode.remove(uiSourceCode);if(sourceView&&sourceView instanceof Sources.UISourceCodeFrame){(sourceView).dispose();}}
_editorClosed(event){const uiSourceCode=(event.data);this._historyManager.removeHistoryForSourceCode(uiSourceCode);let wasSelected=false;if(!this._editorContainer.currentFile()){wasSelected=true;}
this._removeToolbarChangedListener();this._updateScriptViewToolbarItems();this._searchableView.resetSearch();const data={};data.uiSourceCode=uiSourceCode;data.wasSelected=wasSelected;this.dispatchEventToListeners(Sources.SourcesView.Events.EditorClosed,data);}
_editorSelected(event){const previousSourceFrame=event.data.previousView instanceof Sources.UISourceCodeFrame?event.data.previousView:null;if(previousSourceFrame){previousSourceFrame.setSearchableView(null);}
const currentSourceFrame=event.data.currentView instanceof Sources.UISourceCodeFrame?event.data.currentView:null;if(currentSourceFrame){currentSourceFrame.setSearchableView(this._searchableView);}
this._searchableView.setReplaceable(!!currentSourceFrame&&currentSourceFrame.canEditSource());this._searchableView.refreshSearch();this._updateToolbarChangedListener();this._updateScriptViewToolbarItems();this.dispatchEventToListeners(Sources.SourcesView.Events.EditorSelected,this._editorContainer.currentFile());}
_removeToolbarChangedListener(){if(this._toolbarChangedListener){Common.EventTarget.removeEventListeners([this._toolbarChangedListener]);}
this._toolbarChangedListener=null;}
_updateToolbarChangedListener(){this._removeToolbarChangedListener();const sourceFrame=this.currentSourceFrame();if(!sourceFrame){return;}
this._toolbarChangedListener=sourceFrame.addEventListener(Sources.UISourceCodeFrame.Events.ToolbarItemsChanged,this._updateScriptViewToolbarItems,this);}
searchCanceled(){if(this._searchView){this._searchView.searchCanceled();}
delete this._searchView;delete this._searchConfig;}
performSearch(searchConfig,shouldJump,jumpBackwards){const sourceFrame=this.currentSourceFrame();if(!sourceFrame){return;}
this._searchView=sourceFrame;this._searchConfig=searchConfig;this._searchView.performSearch(this._searchConfig,shouldJump,jumpBackwards);}
jumpToNextSearchResult(){if(!this._searchView){return;}
if(this._searchView!==this.currentSourceFrame()){this.performSearch(this._searchConfig,true);return;}
this._searchView.jumpToNextSearchResult();}
jumpToPreviousSearchResult(){if(!this._searchView){return;}
if(this._searchView!==this.currentSourceFrame()){this.performSearch(this._searchConfig,true);if(this._searchView){this._searchView.jumpToLastSearchResult();}
return;}
this._searchView.jumpToPreviousSearchResult();}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return true;}
replaceSelectionWith(searchConfig,replacement){const sourceFrame=this.currentSourceFrame();if(!sourceFrame){console.assert(sourceFrame);return;}
sourceFrame.replaceSelectionWith(searchConfig,replacement);}
replaceAllWith(searchConfig,replacement){const sourceFrame=this.currentSourceFrame();if(!sourceFrame){console.assert(sourceFrame);return;}
sourceFrame.replaceAllWith(searchConfig,replacement);}
_showOutlineQuickOpen(){QuickOpen.QuickOpen.show('@');}
_showGoToLineQuickOpen(){if(this._editorContainer.currentFile()){QuickOpen.QuickOpen.show(':');}}
_save(){this._saveSourceFrame(this.currentSourceFrame());}
_saveAll(){const sourceFrames=this._editorContainer.fileViews();sourceFrames.forEach(this._saveSourceFrame.bind(this));}
_saveSourceFrame(sourceFrame){if(!(sourceFrame instanceof Sources.UISourceCodeFrame)){return;}
const uiSourceCodeFrame=(sourceFrame);uiSourceCodeFrame.commitEditing();}
toggleBreakpointsActiveState(active){this._editorContainer.view.element.classList.toggle('breakpoints-deactivated',!active);}};Sources.SourcesView.Events={EditorClosed:Symbol('EditorClosed'),EditorSelected:Symbol('EditorSelected'),};Sources.SourcesView.EditorAction=function(){};Sources.SourcesView.EditorAction.prototype={button(sourcesView){}};Sources.SourcesView.SwitchFileActionDelegate=class{static _nextFile(currentUISourceCode){function fileNamePrefix(name){const lastDotIndex=name.lastIndexOf('.');const namePrefix=name.substr(0,lastDotIndex!==-1?lastDotIndex:name.length);return namePrefix.toLowerCase();}
const uiSourceCodes=currentUISourceCode.project().uiSourceCodes();const candidates=[];const url=currentUISourceCode.parentURL();const name=currentUISourceCode.name();const namePrefix=fileNamePrefix(name);for(let i=0;i<uiSourceCodes.length;++i){const uiSourceCode=uiSourceCodes[i];if(url!==uiSourceCode.parentURL()){continue;}
if(fileNamePrefix(uiSourceCode.name())===namePrefix){candidates.push(uiSourceCode.name());}}
candidates.sort(String.naturalOrderComparator);const index=mod(candidates.indexOf(name)+1,candidates.length);const fullURL=(url?url+'/':'')+candidates[index];const nextUISourceCode=currentUISourceCode.project().uiSourceCodeForURL(fullURL);return nextUISourceCode!==currentUISourceCode?nextUISourceCode:null;}
handleAction(context,actionId){const sourcesView=UI.context.flavor(Sources.SourcesView);const currentUISourceCode=sourcesView.currentUISourceCode();if(!currentUISourceCode){return false;}
const nextUISourceCode=Sources.SourcesView.SwitchFileActionDelegate._nextFile(currentUISourceCode);if(!nextUISourceCode){return false;}
sourcesView.showSourceLocation(nextUISourceCode);return true;}};Sources.SourcesView.ActionDelegate=class{handleAction(context,actionId){const sourcesView=UI.context.flavor(Sources.SourcesView);if(!sourcesView){return false;}
switch(actionId){case'sources.close-all':sourcesView._editorContainer.closeAllFiles();return true;case'sources.jump-to-previous-location':sourcesView._onJumpToPreviousLocation();return true;case'sources.jump-to-next-location':sourcesView._onJumpToNextLocation();return true;case'sources.close-editor-tab':return sourcesView._onCloseEditorTab();case'sources.go-to-line':sourcesView._showGoToLineQuickOpen();return true;case'sources.go-to-member':sourcesView._showOutlineQuickOpen();return true;case'sources.save':sourcesView._save();return true;case'sources.save-all':sourcesView._saveAll();return true;}
return false;}};;Sources.SourcesSearchScope=class{constructor(){this._searchId=0;this._searchResultCandidates=[];this._searchResultCallback=null;this._searchFinishedCallback=null;this._searchConfig=null;}
static _filesComparator(uiSourceCode1,uiSourceCode2){if(uiSourceCode1.isDirty()&&!uiSourceCode2.isDirty()){return-1;}
if(!uiSourceCode1.isDirty()&&uiSourceCode2.isDirty()){return 1;}
const isFileSystem1=uiSourceCode1.project().type()===Workspace.projectTypes.FileSystem&&!Persistence.persistence.binding(uiSourceCode1);const isFileSystem2=uiSourceCode2.project().type()===Workspace.projectTypes.FileSystem&&!Persistence.persistence.binding(uiSourceCode2);if(isFileSystem1!==isFileSystem2){return isFileSystem1?1:-1;}
const url1=uiSourceCode1.url();const url2=uiSourceCode2.url();if(url1&&!url2){return-1;}
if(!url1&&url2){return 1;}
return String.naturalOrderComparator(uiSourceCode1.fullDisplayName(),uiSourceCode2.fullDisplayName());}
performIndexing(progress){this.stopSearch();const projects=this._projects();const compositeProgress=new Common.CompositeProgress(progress);for(let i=0;i<projects.length;++i){const project=projects[i];const projectProgress=compositeProgress.createSubProgress(project.uiSourceCodes().length);project.indexContent(projectProgress);}}
_projects(){const searchInAnonymousAndContentScripts=Common.moduleSetting('searchInAnonymousAndContentScripts').get();return Workspace.workspace.projects().filter(project=>{if(project.type()===Workspace.projectTypes.Service){return false;}
if(!searchInAnonymousAndContentScripts&&project.isServiceProject()){return false;}
if(!searchInAnonymousAndContentScripts&&project.type()===Workspace.projectTypes.ContentScripts){return false;}
return true;});}
performSearch(searchConfig,progress,searchResultCallback,searchFinishedCallback){this.stopSearch();this._searchResultCandidates=[];this._searchResultCallback=searchResultCallback;this._searchFinishedCallback=searchFinishedCallback;this._searchConfig=searchConfig;const promises=[];const compositeProgress=new Common.CompositeProgress(progress);const searchContentProgress=compositeProgress.createSubProgress();const findMatchingFilesProgress=new Common.CompositeProgress(compositeProgress.createSubProgress());for(const project of this._projects()){const weight=project.uiSourceCodes().length;const findMatchingFilesInProjectProgress=findMatchingFilesProgress.createSubProgress(weight);const filesMathingFileQuery=this._projectFilesMatchingFileQuery(project,searchConfig);const promise=project.findFilesMatchingSearchRequest(searchConfig,filesMathingFileQuery,findMatchingFilesInProjectProgress).then(this._processMatchingFilesForProject.bind(this,this._searchId,project,searchConfig,filesMathingFileQuery));promises.push(promise);}
Promise.all(promises).then(this._processMatchingFiles.bind(this,this._searchId,searchContentProgress,this._searchFinishedCallback.bind(this,true)));}
_projectFilesMatchingFileQuery(project,searchConfig,dirtyOnly){const result=[];const uiSourceCodes=project.uiSourceCodes();for(let i=0;i<uiSourceCodes.length;++i){const uiSourceCode=uiSourceCodes[i];if(!uiSourceCode.contentType().isTextType()){continue;}
const binding=Persistence.persistence.binding(uiSourceCode);if(binding&&binding.network===uiSourceCode){continue;}
if(dirtyOnly&&!uiSourceCode.isDirty()){continue;}
if(searchConfig.filePathMatchesFileQuery(uiSourceCode.fullDisplayName())){result.push(uiSourceCode.url());}}
result.sort(String.naturalOrderComparator);return result;}
_processMatchingFilesForProject(searchId,project,searchConfig,filesMathingFileQuery,files){if(searchId!==this._searchId){this._searchFinishedCallback(false);return;}
files.sort(String.naturalOrderComparator);files=files.intersectOrdered(filesMathingFileQuery,String.naturalOrderComparator);const dirtyFiles=this._projectFilesMatchingFileQuery(project,searchConfig,true);files=files.mergeOrdered(dirtyFiles,String.naturalOrderComparator);const uiSourceCodes=[];for(const file of files){const uiSourceCode=project.uiSourceCodeForURL(file);if(!uiSourceCode){continue;}
const script=Bindings.DefaultScriptMapping.scriptForUISourceCode(uiSourceCode);if(script&&!script.isAnonymousScript()){continue;}
uiSourceCodes.push(uiSourceCode);}
uiSourceCodes.sort(Sources.SourcesSearchScope._filesComparator);this._searchResultCandidates=this._searchResultCandidates.mergeOrdered(uiSourceCodes,Sources.SourcesSearchScope._filesComparator);}
_processMatchingFiles(searchId,progress,callback){if(searchId!==this._searchId){this._searchFinishedCallback(false);return;}
const files=this._searchResultCandidates;if(!files.length){progress.done();callback();return;}
progress.setTotalWork(files.length);let fileIndex=0;const maxFileContentRequests=20;let callbacksLeft=0;for(let i=0;i<maxFileContentRequests&&i<files.length;++i){scheduleSearchInNextFileOrFinish.call(this);}
function searchInNextFile(uiSourceCode){if(uiSourceCode.isDirty()){contentLoaded.call(this,uiSourceCode,uiSourceCode.workingCopy());}else{uiSourceCode.requestContent().then(deferredContent=>{contentLoaded.call(this,uiSourceCode,deferredContent.content||'');});}}
function scheduleSearchInNextFileOrFinish(){if(fileIndex>=files.length){if(!callbacksLeft){progress.done();callback();return;}
return;}
++callbacksLeft;const uiSourceCode=files[fileIndex++];setTimeout(searchInNextFile.bind(this,uiSourceCode),0);}
function contentLoaded(uiSourceCode,content){function matchesComparator(a,b){return a.lineNumber-b.lineNumber;}
progress.worked(1);let matches=[];const queries=this._searchConfig.queries();if(content!==null){for(let i=0;i<queries.length;++i){const nextMatches=Common.ContentProvider.performSearchInContent(content,queries[i],!this._searchConfig.ignoreCase(),this._searchConfig.isRegex());matches=matches.mergeOrdered(nextMatches,matchesComparator);}}
if(matches){const searchResult=new Sources.FileBasedSearchResult(uiSourceCode,matches);this._searchResultCallback(searchResult);}
--callbacksLeft;scheduleSearchInNextFileOrFinish.call(this);}}
stopSearch(){++this._searchId;}};Sources.FileBasedSearchResult=class{constructor(uiSourceCode,searchMatches){this._uiSourceCode=uiSourceCode;this._searchMatches=searchMatches;}
label(){return this._uiSourceCode.displayName();}
description(){return this._uiSourceCode.fullDisplayName();}
matchesCount(){return this._searchMatches.length;}
matchLineContent(index){return this._searchMatches[index].lineContent;}
matchRevealable(index){const match=this._searchMatches[index];return this._uiSourceCode.uiLocation(match.lineNumber,undefined);}
matchLabel(index){return this._searchMatches[index].lineNumber+1;}};;Sources.SourcesPanel=class extends UI.Panel{constructor(){super('sources');Sources.SourcesPanel._instance=this;this.registerRequiredCSS('sources/sourcesPanel.css');new UI.DropTarget(this.element,[UI.DropTarget.Type.Folder],Common.UIString('Drop workspace folder here'),this._handleDrop.bind(this));this._workspace=Workspace.workspace;this._togglePauseAction=(UI.actionRegistry.action('debugger.toggle-pause'));this._stepOverAction=(UI.actionRegistry.action('debugger.step-over'));this._stepIntoAction=(UI.actionRegistry.action('debugger.step-into'));this._stepOutAction=(UI.actionRegistry.action('debugger.step-out'));this._stepAction=(UI.actionRegistry.action('debugger.step'));this._toggleBreakpointsActiveAction=(UI.actionRegistry.action('debugger.toggle-breakpoints-active'));this._debugToolbar=this._createDebugToolbar();this._debugToolbarDrawer=this._createDebugToolbarDrawer();this._debuggerPausedMessage=new Sources.DebuggerPausedMessage();const initialDebugSidebarWidth=225;this._splitWidget=new UI.SplitWidget(true,true,'sourcesPanelSplitViewState',initialDebugSidebarWidth);this._splitWidget.enableShowModeSaving();this._splitWidget.show(this.element);const initialNavigatorWidth=225;this.editorView=new UI.SplitWidget(true,false,'sourcesPanelNavigatorSplitViewState',initialNavigatorWidth);this.editorView.enableShowModeSaving();this._splitWidget.setMainWidget(this.editorView);this._navigatorTabbedLocation=UI.viewManager.createTabbedLocation(this._revealNavigatorSidebar.bind(this),'navigator-view',true);const tabbedPane=this._navigatorTabbedLocation.tabbedPane();tabbedPane.setMinimumSize(100,25);tabbedPane.element.classList.add('navigator-tabbed-pane');const navigatorMenuButton=new UI.ToolbarMenuButton(this._populateNavigatorMenu.bind(this),true);navigatorMenuButton.setTitle(Common.UIString('More options'));tabbedPane.rightToolbar().appendToolbarItem(navigatorMenuButton);if(UI.viewManager.hasViewsForLocation('run-view-sidebar')){const navigatorSplitWidget=new UI.SplitWidget(false,true,'sourcePanelNavigatorSidebarSplitViewState');navigatorSplitWidget.setMainWidget(tabbedPane);const runViewTabbedPane=UI.viewManager.createTabbedLocation(this._revealNavigatorSidebar.bind(this),'run-view-sidebar').tabbedPane();navigatorSplitWidget.setSidebarWidget(runViewTabbedPane);navigatorSplitWidget.installResizer(runViewTabbedPane.headerElement());this.editorView.setSidebarWidget(navigatorSplitWidget);}else{this.editorView.setSidebarWidget(tabbedPane);}
this._sourcesView=new Sources.SourcesView();this._sourcesView.addEventListener(Sources.SourcesView.Events.EditorSelected,this._editorSelected.bind(this));this._toggleNavigatorSidebarButton=this.editorView.createShowHideSidebarButton(ls`navigator`);this._toggleDebuggerSidebarButton=this._splitWidget.createShowHideSidebarButton(ls`debugger`);this.editorView.setMainWidget(this._sourcesView);this._threadsSidebarPane=null;this._watchSidebarPane=(UI.viewManager.view('sources.watch'));this._callstackPane=self.runtime.sharedInstance(Sources.CallStackSidebarPane);Common.moduleSetting('sidebarPosition').addChangeListener(this._updateSidebarPosition.bind(this));this._updateSidebarPosition();this._updateDebuggerButtonsAndStatus();this._pauseOnExceptionEnabledChanged();Common.moduleSetting('pauseOnExceptionEnabled').addChangeListener(this._pauseOnExceptionEnabledChanged,this);this._liveLocationPool=new Bindings.LiveLocationPool();this._setTarget(UI.context.flavor(SDK.Target));Common.moduleSetting('breakpointsActive').addChangeListener(this._breakpointsActiveStateChanged,this);UI.context.addFlavorChangeListener(SDK.Target,this._onCurrentTargetChanged,this);UI.context.addFlavorChangeListener(SDK.DebuggerModel.CallFrame,this._callFrameChanged,this);SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerWasEnabled,this._debuggerWasEnabled,this);SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerPaused,this._debuggerPaused,this);SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.DebuggerResumed,event=>this._debuggerResumed((event.data)));SDK.targetManager.addModelListener(SDK.DebuggerModel,SDK.DebuggerModel.Events.GlobalObjectCleared,event=>this._debuggerResumed((event.data)));Extensions.extensionServer.addEventListener(Extensions.ExtensionServer.Events.SidebarPaneAdded,this._extensionSidebarPaneAdded,this);SDK.targetManager.observeTargets(this);}
static instance(){if(Sources.SourcesPanel._instance){return Sources.SourcesPanel._instance;}
return(self.runtime.sharedInstance(Sources.SourcesPanel));}
static updateResizerAndSidebarButtons(panel){panel._sourcesView.leftToolbar().removeToolbarItems();panel._sourcesView.rightToolbar().removeToolbarItems();panel._sourcesView.bottomToolbar().removeToolbarItems();const isInWrapper=Sources.SourcesPanel.WrapperView.isShowing()&&!UI.inspectorView.isDrawerMinimized();if(panel._splitWidget.isVertical()||isInWrapper){panel._splitWidget.uninstallResizer(panel._sourcesView.toolbarContainerElement());}else{panel._splitWidget.installResizer(panel._sourcesView.toolbarContainerElement());}
if(!isInWrapper){panel._sourcesView.leftToolbar().appendToolbarItem(panel._toggleNavigatorSidebarButton);if(panel._splitWidget.isVertical()){panel._sourcesView.rightToolbar().appendToolbarItem(panel._toggleDebuggerSidebarButton);}else{panel._sourcesView.bottomToolbar().appendToolbarItem(panel._toggleDebuggerSidebarButton);}}}
targetAdded(target){this._showThreadsIfNeeded();}
targetRemoved(target){}
_showThreadsIfNeeded(){if(Sources.ThreadsSidebarPane.shouldBeShown()&&!this._threadsSidebarPane){this._threadsSidebarPane=(UI.viewManager.view('sources.threads'));if(this._sidebarPaneStack&&this._threadsSidebarPane){this._sidebarPaneStack.showView(this._threadsSidebarPane,this._splitWidget.isVertical()?this._watchSidebarPane:this._callstackPane);}}}
_setTarget(target){if(!target){return;}
const debuggerModel=target.model(SDK.DebuggerModel);if(!debuggerModel){return;}
if(debuggerModel.isPaused()){this._showDebuggerPausedDetails((debuggerModel.debuggerPausedDetails()));}else{this._paused=false;this._clearInterface();this._toggleDebuggerSidebarButton.setEnabled(true);}}
_onCurrentTargetChanged(event){const target=(event.data);this._setTarget(target);}
paused(){return this._paused;}
wasShown(){UI.context.setFlavor(Sources.SourcesPanel,this);super.wasShown();const wrapper=Sources.SourcesPanel.WrapperView._instance;if(wrapper&&wrapper.isShowing()){UI.inspectorView.setDrawerMinimized(true);Sources.SourcesPanel.updateResizerAndSidebarButtons(this);}
this.editorView.setMainWidget(this._sourcesView);}
willHide(){super.willHide();UI.context.setFlavor(Sources.SourcesPanel,null);if(Sources.SourcesPanel.WrapperView.isShowing()){Sources.SourcesPanel.WrapperView._instance._showViewInWrapper();UI.inspectorView.setDrawerMinimized(false);Sources.SourcesPanel.updateResizerAndSidebarButtons(this);}}
resolveLocation(locationName){if(locationName==='sources.sidebar-top'||locationName==='sources.sidebar-bottom'||locationName==='sources.sidebar-tabs'){return this._sidebarPaneStack;}else{return this._navigatorTabbedLocation;}}
_ensureSourcesViewVisible(){if(Sources.SourcesPanel.WrapperView.isShowing()){return true;}
if(!UI.inspectorView.canSelectPanel('sources')){return false;}
UI.viewManager.showView('sources');return true;}
onResize(){if(Common.moduleSetting('sidebarPosition').get()==='auto'){this.element.window().requestAnimationFrame(this._updateSidebarPosition.bind(this));}}
searchableView(){return this._sourcesView.searchableView();}
_debuggerPaused(event){const debuggerModel=(event.data);const details=debuggerModel.debuggerPausedDetails();if(!this._paused){this._setAsCurrentPanel();}
if(UI.context.flavor(SDK.Target)===debuggerModel.target()){this._showDebuggerPausedDetails((details));}else if(!this._paused){UI.context.setFlavor(SDK.Target,debuggerModel.target());}}
_showDebuggerPausedDetails(details){this._paused=true;this._updateDebuggerButtonsAndStatus();UI.context.setFlavor(SDK.DebuggerPausedDetails,details);this._toggleDebuggerSidebarButton.setEnabled(false);this._revealDebuggerSidebar();window.focus();Host.InspectorFrontendHost.bringToFront();}
_debuggerResumed(debuggerModel){const target=debuggerModel.target();if(UI.context.flavor(SDK.Target)!==target){return;}
this._paused=false;this._clearInterface();this._toggleDebuggerSidebarButton.setEnabled(true);this._switchToPausedTargetTimeout=setTimeout(this._switchToPausedTarget.bind(this,debuggerModel),500);}
_debuggerWasEnabled(event){const debuggerModel=(event.data);if(UI.context.flavor(SDK.Target)!==debuggerModel.target()){return;}
this._updateDebuggerButtonsAndStatus();}
get visibleView(){return this._sourcesView.visibleView();}
showUISourceCode(uiSourceCode,lineNumber,columnNumber,omitFocus){if(omitFocus){const wrapperShowing=Sources.SourcesPanel.WrapperView._instance&&Sources.SourcesPanel.WrapperView._instance.isShowing();if(!this.isShowing()&&!wrapperShowing){return;}}else{this._showEditor();}
this._sourcesView.showSourceLocation(uiSourceCode,lineNumber,columnNumber,omitFocus);}
_showEditor(){if(Sources.SourcesPanel.WrapperView._instance&&Sources.SourcesPanel.WrapperView._instance.isShowing()){return;}
this._setAsCurrentPanel();}
showUILocation(uiLocation,omitFocus){this.showUISourceCode(uiLocation.uiSourceCode,uiLocation.lineNumber,uiLocation.columnNumber,omitFocus);}
_revealInNavigator(uiSourceCode,skipReveal){const extensions=self.runtime.extensions(Sources.NavigatorView);Promise.all(extensions.map(extension=>extension.instance())).then(filterNavigators.bind(this));function filterNavigators(objects){for(let i=0;i<objects.length;++i){const navigatorView=(objects[i]);const viewId=extensions[i].descriptor()['viewId'];if(navigatorView.acceptProject(uiSourceCode.project())){navigatorView.revealUISourceCode(uiSourceCode,true);if(skipReveal){this._navigatorTabbedLocation.tabbedPane().selectTab(viewId);}else{UI.viewManager.showView(viewId);}}}}}
_populateNavigatorMenu(contextMenu){const groupByFolderSetting=Common.moduleSetting('navigatorGroupByFolder');contextMenu.appendItemsAtLocation('navigatorMenu');contextMenu.viewSection().appendCheckboxItem(Common.UIString('Group by folder'),()=>groupByFolderSetting.set(!groupByFolderSetting.get()),groupByFolderSetting.get());}
setIgnoreExecutionLineEvents(ignoreExecutionLineEvents){this._ignoreExecutionLineEvents=ignoreExecutionLineEvents;}
updateLastModificationTime(){this._lastModificationTime=window.performance.now();}
_executionLineChanged(liveLocation){const uiLocation=liveLocation.uiLocation();if(!uiLocation){return;}
if(window.performance.now()-this._lastModificationTime<Sources.SourcesPanel._lastModificationTimeout){return;}
this._sourcesView.showSourceLocation(uiLocation.uiSourceCode,uiLocation.lineNumber,uiLocation.columnNumber,undefined,true);}
_lastModificationTimeoutPassedForTest(){Sources.SourcesPanel._lastModificationTimeout=Number.MIN_VALUE;}
_updateLastModificationTimeForTest(){Sources.SourcesPanel._lastModificationTimeout=Number.MAX_VALUE;}
_callFrameChanged(){const callFrame=UI.context.flavor(SDK.DebuggerModel.CallFrame);if(!callFrame){return;}
if(this._executionLineLocation){this._executionLineLocation.dispose();}
this._executionLineLocation=Bindings.debuggerWorkspaceBinding.createCallFrameLiveLocation(callFrame.location(),this._executionLineChanged.bind(this),this._liveLocationPool);}
_pauseOnExceptionEnabledChanged(){const enabled=Common.moduleSetting('pauseOnExceptionEnabled').get();this._pauseOnExceptionButton.setToggled(enabled);this._pauseOnExceptionButton.setTitle(enabled?ls`Don't pause on exceptions`:ls`Pause on exceptions`);this._debugToolbarDrawer.classList.toggle('expanded',enabled);}
async _updateDebuggerButtonsAndStatus(){const currentTarget=UI.context.flavor(SDK.Target);const currentDebuggerModel=currentTarget?currentTarget.model(SDK.DebuggerModel):null;if(!currentDebuggerModel){this._togglePauseAction.setEnabled(false);this._stepOverAction.setEnabled(false);this._stepIntoAction.setEnabled(false);this._stepOutAction.setEnabled(false);this._stepAction.setEnabled(false);}else if(this._paused){this._togglePauseAction.setToggled(true);this._togglePauseAction.setEnabled(true);this._stepOverAction.setEnabled(true);this._stepIntoAction.setEnabled(true);this._stepOutAction.setEnabled(true);this._stepAction.setEnabled(true);}else{this._togglePauseAction.setToggled(false);this._togglePauseAction.setEnabled(!currentDebuggerModel.isPausing());this._stepOverAction.setEnabled(false);this._stepIntoAction.setEnabled(false);this._stepOutAction.setEnabled(false);this._stepAction.setEnabled(false);}
const details=currentDebuggerModel?currentDebuggerModel.debuggerPausedDetails():null;await this._debuggerPausedMessage.render(details,Bindings.debuggerWorkspaceBinding,Bindings.breakpointManager);if(details){this._updateDebuggerButtonsAndStatusForTest();}}
_updateDebuggerButtonsAndStatusForTest(){}
_clearInterface(){this._updateDebuggerButtonsAndStatus();UI.context.setFlavor(SDK.DebuggerPausedDetails,null);if(this._switchToPausedTargetTimeout){clearTimeout(this._switchToPausedTargetTimeout);}
this._liveLocationPool.disposeAll();}
_switchToPausedTarget(debuggerModel){delete this._switchToPausedTargetTimeout;if(this._paused){return;}
if(debuggerModel.isPaused()){return;}
const debuggerModels=SDK.targetManager.models(SDK.DebuggerModel);for(let i=0;i<debuggerModels.length;++i){if(debuggerModels[i].isPaused()){UI.context.setFlavor(SDK.Target,debuggerModels[i].target());break;}}}
_togglePauseOnExceptions(){Common.moduleSetting('pauseOnExceptionEnabled').set(!this._pauseOnExceptionButton.toggled());}
_runSnippet(){const uiSourceCode=this._sourcesView.currentUISourceCode();if(!uiSourceCode){return;}
Snippets.evaluateScriptSnippet(uiSourceCode);}
_editorSelected(event){const uiSourceCode=(event.data);if(this.editorView.mainWidget()&&Common.moduleSetting('autoRevealInNavigator').get()){this._revealInNavigator(uiSourceCode,true);}}
_togglePause(){const target=UI.context.flavor(SDK.Target);if(!target){return true;}
const debuggerModel=target.model(SDK.DebuggerModel);if(!debuggerModel){return true;}
if(this._paused){this._paused=false;debuggerModel.resume();}else{debuggerModel.pause();}
this._clearInterface();return true;}
_prepareToResume(){if(!this._paused){return null;}
this._paused=false;this._clearInterface();const target=UI.context.flavor(SDK.Target);return target?target.model(SDK.DebuggerModel):null;}
_longResume(event){const debuggerModel=this._prepareToResume();if(!debuggerModel){return;}
debuggerModel.skipAllPausesUntilReloadOrTimeout(500);debuggerModel.resume();}
_terminateExecution(event){const debuggerModel=this._prepareToResume();if(!debuggerModel){return;}
debuggerModel.runtimeModel().terminateExecution();debuggerModel.resume();}
_stepOver(){const debuggerModel=this._prepareToResume();if(!debuggerModel){return true;}
debuggerModel.stepOver();return true;}
_stepInto(){const debuggerModel=this._prepareToResume();if(!debuggerModel){return true;}
debuggerModel.stepInto();return true;}
_stepIntoAsync(){const debuggerModel=this._prepareToResume();if(!debuggerModel){return true;}
debuggerModel.scheduleStepIntoAsync();return true;}
_stepOut(){const debuggerModel=this._prepareToResume();if(!debuggerModel){return true;}
debuggerModel.stepOut();return true;}
_continueToLocation(uiLocation){const executionContext=UI.context.flavor(SDK.ExecutionContext);if(!executionContext){return;}
const rawLocations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(uiLocation.uiSourceCode,uiLocation.lineNumber,0);const rawLocation=rawLocations.find(location=>location.debuggerModel===executionContext.debuggerModel);if(!rawLocation){return;}
if(!this._prepareToResume()){return;}
rawLocation.continueToLocation();}
_toggleBreakpointsActive(){Common.moduleSetting('breakpointsActive').set(!Common.moduleSetting('breakpointsActive').get());}
_breakpointsActiveStateChanged(){const active=Common.moduleSetting('breakpointsActive').get();this._toggleBreakpointsActiveAction.setToggled(!active);this._sourcesView.toggleBreakpointsActiveState(active);}
_createDebugToolbar(){const debugToolbar=new UI.Toolbar('scripts-debug-toolbar');const longResumeButton=new UI.ToolbarButton(Common.UIString('Resume with all pauses blocked for 500 ms'),'largeicon-play');longResumeButton.addEventListener(UI.ToolbarButton.Events.Click,this._longResume,this);const terminateExecutionButton=new UI.ToolbarButton(ls`Terminate current JavaScript call`,'largeicon-terminate-execution');terminateExecutionButton.addEventListener(UI.ToolbarButton.Events.Click,this._terminateExecution,this);debugToolbar.appendToolbarItem(UI.Toolbar.createLongPressActionButton(this._togglePauseAction,[terminateExecutionButton,longResumeButton],[]));debugToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._stepOverAction));debugToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._stepIntoAction));debugToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._stepOutAction));debugToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._stepAction));debugToolbar.appendSeparator();debugToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._toggleBreakpointsActiveAction));this._pauseOnExceptionButton=new UI.ToolbarToggle('','largeicon-pause-on-exceptions');this._pauseOnExceptionButton.addEventListener(UI.ToolbarButton.Events.Click,this._togglePauseOnExceptions,this);debugToolbar.appendToolbarItem(this._pauseOnExceptionButton);return debugToolbar;}
_createDebugToolbarDrawer(){const debugToolbarDrawer=createElementWithClass('div','scripts-debug-toolbar-drawer');const label=Common.UIString('Pause on caught exceptions');const setting=Common.moduleSetting('pauseOnCaughtException');debugToolbarDrawer.appendChild(UI.SettingsUI.createSettingCheckbox(label,setting,true));return debugToolbarDrawer;}
appendApplicableItems(event,contextMenu,target){this._appendUISourceCodeItems(event,contextMenu,target);this._appendUISourceCodeFrameItems(event,contextMenu,target);this.appendUILocationItems(contextMenu,target);this._appendRemoteObjectItems(contextMenu,target);this._appendNetworkRequestItems(contextMenu,target);}
_appendUISourceCodeItems(event,contextMenu,target){if(!(target instanceof Workspace.UISourceCode)){return;}
const uiSourceCode=(target);if(!uiSourceCode.project().isServiceProject()&&!event.target.isSelfOrDescendant(this._navigatorTabbedLocation.widget().element)){contextMenu.revealSection().appendItem(Common.UIString('Reveal in sidebar'),this._handleContextMenuReveal.bind(this,uiSourceCode));}}
_appendUISourceCodeFrameItems(event,contextMenu,target){if(!(target instanceof Sources.UISourceCodeFrame)){return;}
if(target.uiSourceCode().contentType().isFromSourceMap()||target.textEditor.selection().isEmpty()){return;}
contextMenu.debugSection().appendAction('debugger.evaluate-selection');}
appendUILocationItems(contextMenu,object){if(!(object instanceof Workspace.UILocation)){return;}
const uiLocation=(object);const uiSourceCode=uiLocation.uiSourceCode;const contentType=uiSourceCode.contentType();if(contentType.hasScripts()){const target=UI.context.flavor(SDK.Target);const debuggerModel=target?target.model(SDK.DebuggerModel):null;if(debuggerModel&&debuggerModel.isPaused()){contextMenu.debugSection().appendItem(Common.UIString('Continue to here'),this._continueToLocation.bind(this,uiLocation));}
this._callstackPane.appendBlackboxURLContextMenuItems(contextMenu,uiSourceCode);}}
_handleContextMenuReveal(uiSourceCode){this.editorView.showBoth();this._revealInNavigator(uiSourceCode);}
_appendRemoteObjectItems(contextMenu,target){if(!(target instanceof SDK.RemoteObject)){return;}
const remoteObject=(target);const executionContext=UI.context.flavor(SDK.ExecutionContext);contextMenu.debugSection().appendItem(ls`Store as global variable`,()=>SDK.consoleModel.saveToTempVariable(executionContext,remoteObject));if(remoteObject.type==='function'){contextMenu.debugSection().appendItem(ls`Show function definition`,this._showFunctionDefinition.bind(this,remoteObject));}}
_appendNetworkRequestItems(contextMenu,target){if(!(target instanceof SDK.NetworkRequest)){return;}
const request=(target);const uiSourceCode=this._workspace.uiSourceCodeForURL(request.url());if(!uiSourceCode){return;}
const openText=Common.UIString('Open in Sources panel');contextMenu.revealSection().appendItem(openText,this.showUILocation.bind(this,uiSourceCode.uiLocation(0,0)));}
_showFunctionDefinition(remoteObject){remoteObject.debuggerModel().functionDetailsPromise(remoteObject).then(this._didGetFunctionDetails.bind(this));}
_didGetFunctionDetails(response){if(!response||!response.location){return;}
const location=response.location;if(!location){return;}
const uiLocation=Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(location);if(uiLocation){this.showUILocation(uiLocation);}}
_revealNavigatorSidebar(){this._setAsCurrentPanel();this.editorView.showBoth(true);}
_revealDebuggerSidebar(){this._setAsCurrentPanel();this._splitWidget.showBoth(true);}
_updateSidebarPosition(){let vertically;const position=Common.moduleSetting('sidebarPosition').get();if(position==='right'){vertically=false;}else if(position==='bottom'){vertically=true;}else{vertically=UI.inspectorView.element.offsetWidth<680;}
if(this.sidebarPaneView&&vertically===!this._splitWidget.isVertical()){return;}
if(this.sidebarPaneView&&this.sidebarPaneView.shouldHideOnDetach()){return;}
if(this.sidebarPaneView){this.sidebarPaneView.detach();}
this._splitWidget.setVertical(!vertically);this._splitWidget.element.classList.toggle('sources-split-view-vertical',vertically);Sources.SourcesPanel.updateResizerAndSidebarButtons(this);const vbox=new UI.VBox();vbox.element.appendChild(this._debugToolbar.element);vbox.element.appendChild(this._debugToolbarDrawer);vbox.setMinimumAndPreferredSizes(Sources.SourcesPanel.minToolbarWidth,25,Sources.SourcesPanel.minToolbarWidth,100);this._sidebarPaneStack=UI.viewManager.createStackLocation(this._revealDebuggerSidebar.bind(this));this._sidebarPaneStack.widget().element.classList.add('overflow-auto');this._sidebarPaneStack.widget().show(vbox.element);this._sidebarPaneStack.widget().element.appendChild(this._debuggerPausedMessage.element());this._sidebarPaneStack.appendApplicableItems('sources.sidebar-top');if(this._threadsSidebarPane){this._sidebarPaneStack.showView(this._threadsSidebarPane);}
if(!vertically){this._sidebarPaneStack.appendView(this._watchSidebarPane);}
this._sidebarPaneStack.showView(this._callstackPane);const jsBreakpoints=(UI.viewManager.view('sources.jsBreakpoints'));const scopeChainView=(UI.viewManager.view('sources.scopeChain'));if(this._tabbedLocationHeader){this._splitWidget.uninstallResizer(this._tabbedLocationHeader);this._tabbedLocationHeader=null;}
if(!vertically){this._sidebarPaneStack.showView(scopeChainView);this._sidebarPaneStack.showView(jsBreakpoints);this._extensionSidebarPanesContainer=this._sidebarPaneStack;this.sidebarPaneView=vbox;this._splitWidget.uninstallResizer(this._debugToolbar.gripElementForResize());}else{const splitWidget=new UI.SplitWidget(true,true,'sourcesPanelDebuggerSidebarSplitViewState',0.5);splitWidget.setMainWidget(vbox);this._sidebarPaneStack.showView(jsBreakpoints);const tabbedLocation=UI.viewManager.createTabbedLocation(this._revealDebuggerSidebar.bind(this));splitWidget.setSidebarWidget(tabbedLocation.tabbedPane());this._tabbedLocationHeader=tabbedLocation.tabbedPane().headerElement();this._splitWidget.installResizer(this._tabbedLocationHeader);this._splitWidget.installResizer(this._debugToolbar.gripElementForResize());tabbedLocation.appendView(scopeChainView);tabbedLocation.appendView(this._watchSidebarPane);tabbedLocation.appendApplicableItems('sources.sidebar-tabs');this._extensionSidebarPanesContainer=tabbedLocation;this.sidebarPaneView=splitWidget;}
this._sidebarPaneStack.appendApplicableItems('sources.sidebar-bottom');const extensionSidebarPanes=Extensions.extensionServer.sidebarPanes();for(let i=0;i<extensionSidebarPanes.length;++i){this._addExtensionSidebarPane(extensionSidebarPanes[i]);}
this._splitWidget.setSidebarWidget(this.sidebarPaneView);}
_setAsCurrentPanel(){return UI.viewManager.showView('sources');}
_extensionSidebarPaneAdded(event){const pane=(event.data);this._addExtensionSidebarPane(pane);}
_addExtensionSidebarPane(pane){if(pane.panelName()===this.name){this._extensionSidebarPanesContainer.appendView(pane);}}
sourcesView(){return this._sourcesView;}
_handleDrop(dataTransfer){const items=dataTransfer.items;if(!items.length){return;}
const entry=items[0].webkitGetAsEntry();if(!entry.isDirectory){return;}
Host.InspectorFrontendHost.upgradeDraggedFileSystemPermissions(entry.filesystem);}};Sources.SourcesPanel._lastModificationTimeout=200;Sources.SourcesPanel.minToolbarWidth=215;Sources.SourcesPanel.UILocationRevealer=class{reveal(uiLocation,omitFocus){if(!(uiLocation instanceof Workspace.UILocation)){return Promise.reject(new Error('Internal error: not a ui location'));}
Sources.SourcesPanel.instance().showUILocation(uiLocation,omitFocus);return Promise.resolve();}};Sources.SourcesPanel.DebuggerLocationRevealer=class{reveal(rawLocation,omitFocus){if(!(rawLocation instanceof SDK.DebuggerModel.Location)){return Promise.reject(new Error('Internal error: not a debugger location'));}
const uiLocation=Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(rawLocation);if(!uiLocation){return Promise.resolve();}
Sources.SourcesPanel.instance().showUILocation(uiLocation,omitFocus);return Promise.resolve();}};Sources.SourcesPanel.UISourceCodeRevealer=class{reveal(uiSourceCode,omitFocus){if(!(uiSourceCode instanceof Workspace.UISourceCode)){return Promise.reject(new Error('Internal error: not a ui source code'));}
Sources.SourcesPanel.instance().showUISourceCode(uiSourceCode,undefined,undefined,omitFocus);return Promise.resolve();}};Sources.SourcesPanel.DebuggerPausedDetailsRevealer=class{reveal(object){return Sources.SourcesPanel.instance()._setAsCurrentPanel();}};Sources.SourcesPanel.RevealingActionDelegate=class{handleAction(context,actionId){const panel=Sources.SourcesPanel.instance();if(!panel._ensureSourcesViewVisible()){return false;}
switch(actionId){case'debugger.toggle-pause':panel._togglePause();return true;}
return false;}};Sources.SourcesPanel.DebuggingActionDelegate=class{handleAction(context,actionId){const panel=Sources.SourcesPanel.instance();switch(actionId){case'debugger.step-over':panel._stepOver();return true;case'debugger.step-into':panel._stepIntoAsync();return true;case'debugger.step':panel._stepInto();return true;case'debugger.step-out':panel._stepOut();return true;case'debugger.run-snippet':panel._runSnippet();return true;case'debugger.toggle-breakpoints-active':panel._toggleBreakpointsActive();return true;case'debugger.evaluate-selection':const frame=UI.context.flavor(Sources.UISourceCodeFrame);if(frame){let text=frame.textEditor.text(frame.textEditor.selection());const executionContext=UI.context.flavor(SDK.ExecutionContext);if(executionContext){const message=SDK.consoleModel.addCommandMessage(executionContext,text);text=ObjectUI.JavaScriptREPL.wrapObjectLiteral(text);SDK.consoleModel.evaluateCommandInConsole(executionContext,message,text,true,false);}}
return true;}
return false;}};Sources.SourcesPanel.WrapperView=class extends UI.VBox{constructor(){super();this.element.classList.add('sources-view-wrapper');Sources.SourcesPanel.WrapperView._instance=this;this._view=Sources.SourcesPanel.instance()._sourcesView;}
static isShowing(){return!!Sources.SourcesPanel.WrapperView._instance&&Sources.SourcesPanel.WrapperView._instance.isShowing();}
wasShown(){if(!Sources.SourcesPanel.instance().isShowing()){this._showViewInWrapper();}else{UI.inspectorView.setDrawerMinimized(true);}
Sources.SourcesPanel.updateResizerAndSidebarButtons(Sources.SourcesPanel.instance());}
willHide(){UI.inspectorView.setDrawerMinimized(false);setImmediate(()=>Sources.SourcesPanel.updateResizerAndSidebarButtons(Sources.SourcesPanel.instance()));}
_showViewInWrapper(){this._view.show(this.element);}};;Sources.JavaScriptCompilerPlugin=class extends Sources.UISourceCodeFrame.Plugin{constructor(textEditor,uiSourceCode){super();this._textEditor=textEditor;this._uiSourceCode=uiSourceCode;this._compiling=false;this._recompileScheduled=false;this._timeout=null;this._message=null;this._disposed=false;this._textEditor.addEventListener(UI.TextEditor.Events.TextChanged,this._scheduleCompile,this);if(this._uiSourceCode.hasCommits()||this._uiSourceCode.isDirty()){this._scheduleCompile();}}
static accepts(uiSourceCode){if(uiSourceCode.extension()==='js'){return true;}
if(Snippets.isSnippetsUISourceCode(uiSourceCode)){return true;}
for(const debuggerModel of SDK.targetManager.models(SDK.DebuggerModel)){if(Bindings.debuggerWorkspaceBinding.scriptFile(uiSourceCode,debuggerModel)){return true;}}
return false;}
_scheduleCompile(){if(this._compiling){this._recompileScheduled=true;return;}
if(this._timeout){clearTimeout(this._timeout);}
this._timeout=setTimeout(this._compile.bind(this),Sources.JavaScriptCompilerPlugin.CompileDelay);}
_findRuntimeModel(){const debuggerModels=SDK.targetManager.models(SDK.DebuggerModel);for(let i=0;i<debuggerModels.length;++i){const scriptFile=Bindings.debuggerWorkspaceBinding.scriptFile(this._uiSourceCode,debuggerModels[i]);if(scriptFile){return debuggerModels[i].runtimeModel();}}
return SDK.targetManager.mainTarget()?SDK.targetManager.mainTarget().model(SDK.RuntimeModel):null;}
async _compile(){const runtimeModel=this._findRuntimeModel();if(!runtimeModel){return;}
const currentExecutionContext=UI.context.flavor(SDK.ExecutionContext);if(!currentExecutionContext){return;}
const code=this._textEditor.text();if(code.length>1024*100){return;}
this._compiling=true;const result=await runtimeModel.compileScript(code,'',false,currentExecutionContext.id);this._compiling=false;if(this._recompileScheduled){this._recompileScheduled=false;this._scheduleCompile();return;}
if(this._message){this._uiSourceCode.removeMessage(this._message);}
if(this._disposed||!result||!result.exceptionDetails){return;}
const exceptionDetails=result.exceptionDetails;const text=SDK.RuntimeModel.simpleTextFromException(exceptionDetails);this._message=this._uiSourceCode.addLineMessage(Workspace.UISourceCode.Message.Level.Error,text,exceptionDetails.lineNumber,exceptionDetails.columnNumber);this._compilationFinishedForTest();}
_compilationFinishedForTest(){}
dispose(){this._textEditor.removeEventListener(UI.TextEditor.Events.TextChanged,this._scheduleCompile,this);if(this._message){this._uiSourceCode.removeMessage(this._message);}
this._disposed=true;if(this._timeout){clearTimeout(this._timeout);}}};Sources.JavaScriptCompilerPlugin.CompileDelay=1000;;Sources.SnippetsPlugin=class extends Sources.UISourceCodeFrame.Plugin{constructor(textEditor,uiSourceCode){super();this._textEditor=textEditor;this._uiSourceCode=uiSourceCode;}
static accepts(uiSourceCode){return Snippets.isSnippetsUISourceCode(uiSourceCode);}
rightToolbarItems(){const runSnippet=UI.Toolbar.createActionButtonForId('debugger.run-snippet');runSnippet.setText(Host.isMac()?Common.UIString('\u2318+Enter'):Common.UIString('Ctrl+Enter'));return[runSnippet];}};;Sources.ScriptOriginPlugin=class extends Sources.UISourceCodeFrame.Plugin{constructor(textEditor,uiSourceCode){super();this._textEditor=textEditor;this._uiSourceCode=uiSourceCode;}
static accepts(uiSourceCode){return uiSourceCode.contentType().hasScripts()||!!Sources.ScriptOriginPlugin._script(uiSourceCode);}
rightToolbarItems(){const originURL=Bindings.CompilerScriptMapping.uiSourceCodeOrigin(this._uiSourceCode);if(originURL){const item=UI.formatLocalized('(source mapped from %s)',[Components.Linkifier.linkifyURL(originURL)]);return[new UI.ToolbarItem(item)];}
const script=Sources.ScriptOriginPlugin._script(this._uiSourceCode);if(!script||!script.originStackTrace){return[];}
const link=Sources.ScriptOriginPlugin._linkifier.linkifyStackTraceTopFrame(script.debuggerModel.target(),script.originStackTrace);return[new UI.ToolbarItem(link)];}
static _script(uiSourceCode){const locations=Bindings.debuggerWorkspaceBinding.uiLocationToRawLocations(uiSourceCode,0,0);for(const location of locations){const script=location.script();if(script&&script.originStackTrace){return script;}}
return null;}};Sources.ScriptOriginPlugin._linkifier=new Components.Linkifier();;Root.Runtime.cachedResources["sources/breakpointEditDialog.css"]="/*\n * Copyright 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n  z-index: 30;\n  padding: 4px;\n  background-color: #e6e6e6;\n  border-radius: 7px;\n  border: 2px solid #bababa;\n  width: 90%;\n  pointer-events: auto;\n}\n\n:host(.sources-edit-breakpoint-dialog) {\n  border: none;\n  border-radius: 0;\n  z-index: 30;\n  background-color: var(--toolbar-bg-color);\n  width: 555px;\n  pointer-events: auto;\n  margin: 2px 0 2px -1px;\n  padding: 0 10px 10px 5px;\n  border: 1px solid var(--divider-color);\n}\n\n:host-context(.sources-edit-breakpoint-dialog) .condition-editor {\n  background-color: #fff;\n  margin-left: 3px;\n}\n\n:host-context(.sources-edit-breakpoint-dialog) .source-frame-breakpoint-toolbar {\n  font-family: sans-serif;\n  font-size: 12px;\n}\n\n/*# sourceURL=sources/breakpointEditDialog.css */";Root.Runtime.cachedResources["sources/callStackSidebarPane.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.blackboxed-message {\n    text-align: center;\n    font-style: italic;\n    padding: 4px;\n    color: #888;\n    background-color: #FFFFC2;\n}\n\n.blackboxed-message > .link {\n    margin-left: 5px;\n}\n\n.show-more-message {\n    text-align: center;\n    font-style: italic;\n    padding: 4px;\n    border-top: 1px solid #d8d8d8;\n}\n\n.show-more-message > .link {\n    margin-left: 5px;\n}\n\n.call-frame-item {\n    padding: 3px 8px 3px 20px;\n    position: relative;\n    min-height: 18px;\n    line-height: 15px;\n    display: flex;\n    flex-wrap: wrap;\n}\n\n.call-frame-title-text {\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.call-frame-item:not(.async-header) {\n    border-top: 1px solid #efefef;\n}\n\n.call-frame-item:not(.async-header):hover {\n    background-color: #eee;\n}\n\n.async-header + .call-frame-item {\n    border-top: 0;\n}\n\n.call-frame-item-title,\n.call-frame-location {\n    display: flex;\n    white-space: nowrap;\n}\n\n.call-frame-location {\n    color: #888;\n    margin-left: auto;\n    padding: 0 10px 0 10px;\n}\n\n.async-header::before {\n    content: \" \";\n    width: 100%;\n    border-top: 1px solid #d8d8d8;\n    margin-top: 8px;\n    position: absolute;\n    z-index: -1;\n    left: 0;\n}\n\n.async-header .call-frame-item-title {\n    font-weight: bold;\n    color: #999;\n    background-color: white;\n    margin-left: -5px;\n    padding: 0 5px;\n}\n\n.blackboxed-call-frame {\n    opacity: 0.6;\n    font-style: italic;\n}\n\n.selected-call-frame-icon {\n    display: none;\n    position: absolute;\n    top: 5px;\n    left: 4px;\n}\n\n.call-frame-item.selected .selected-call-frame-icon {\n    display: block;\n}\n\n:host-context(.-theme-with-dark-background) .blackboxed-message {\n    background-color: hsl(46, 98%, 22%);\n    color: #aaa;\n}\n\n:host-context(.-theme-with-dark-background) .blackboxed-message > .link {\n    color: hsl(0, 0%, 67%);\n}\n\n/*# sourceURL=sources/callStackSidebarPane.css */";Root.Runtime.cachedResources["sources/debuggerPausedMessage.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.paused-status {\n    padding: 6px;\n    border-bottom: 1px solid transparent;\n    border-top: 1px solid rgb(189, 189, 189);\n    background-color: hsl(50, 100%, 95%);\n    color: rgb(107, 97, 48);\n}\n\n.-theme-with-dark-background .paused-status {\n    background-color: hsl(46, 98%, 22%);\n    color: #ccc;\n}\n\n.paused-status.error-reason {\n    background-color: hsl(0, 100%, 97%);\n    color: #6b3b3b;\n}\n\n.status-main {\n    font-weight: bold;\n    padding-left: 15px;\n    position: relative;\n}\n\n.status-sub:not(:empty) {\n    padding-left: 15px;\n    padding-top: 5px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.paused-status.error-reason .status-sub {\n    color: red;\n    line-height: 11px;\n    max-height: 27px;\n    -webkit-user-select: text;\n}\n\n.status-icon {\n    -webkit-filter: hue-rotate(190deg);\n    position: absolute;\n    left: 0;\n    top: calc(50% - 5px);\n}\n\n.paused-status.error-reason .status-icon {\n    -webkit-filter: none;\n}\n\n/*# sourceURL=sources/debuggerPausedMessage.css */";Root.Runtime.cachedResources["sources/javaScriptBreakpointsSidebarPane.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.breakpoint-entry {\n    padding: 3px 8px 3px 8px;\n    min-height: 18px;\n    line-height: 15px;\n    border-top: 1px solid #efefef;\n}\n\n.breakpoint-entry [is=dt-checkbox] {\n    max-width: 100%;\n    white-space: nowrap;\n}\n\n:not(.breakpoints-list-deactivated) > .breakpoint-entry:hover {\n    background-color: #eee;\n}\n\n.breakpoint-entry > .source-text {\n    cursor: pointer;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n    margin-left: 22px;\n}\n\n.breakpoints-list-deactivated {\n    background-color: #eee;\n    opacity: 0.3;\n}\n\n.breakpoint-hit {\n    background-color: rgb(255, 255, 194);\n    border-right: 3px solid rgb(107, 97, 48);\n}\n\n:host-context(.-theme-with-dark-background) .breakpoint-hit {\n    background-color: hsl(46, 98%, 22%);\n    color: #ccc;\n}\n\n/*# sourceURL=sources/javaScriptBreakpointsSidebarPane.css */";Root.Runtime.cachedResources["sources/navigatorTree.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.icon, .icon-badge {\n    margin: -3px -5px -3px -5px;\n}\n\n.icon-stack {\n    position: relative;\n    display: inline-flex;\n}\n\n.icon-stack > [is=ui-icon]:not(:first-child) {\n    position: absolute;\n    left: 0;\n    top: 0;\n}\n\n.navigator-file-tree-item .icon {\n    background: linear-gradient(45deg, hsl(0, 0%, 50%), hsl(0, 0%, 70%));\n}\n\n.navigator-fs-tree-item:not(.has-mapped-files):not(.selected) > :not(.selection),\n.navigator-fs-folder-tree-item:not(.has-mapped-files):not(.selected) > :not(.selection) {\n    filter: grayscale(50%);\n    opacity: 0.5;\n}\n\n.tree-outline li {\n    min-height: 20px;\n}\n\n.tree-outline li:hover:not(.selected) .selection {\n    display: block;\n    background-color: var(--item-hover-color);\n}\n\n.navigator-folder-tree-item .icon {\n    background-color: #555;\n}\n\n.navigator-sm-folder-tree-item .icon,\n.navigator-fs-tree-item .icon,\n.navigator-fs-folder-tree-item .icon {\n    background: linear-gradient(45deg, hsl(28, 75%, 50%), hsl(28, 75%, 70%));\n}\n\n.navigator-nw-folder-tree-item .icon {\n    background: linear-gradient(45deg, hsl(210, 82%, 65%), hsl(210, 82%, 80%));\n}\n\n.navigator-sm-script-tree-item .icon,\n.navigator-script-tree-item .icon,\n.navigator-snippet-tree-item .icon {\n    background: linear-gradient(45deg, hsl(48, 70%, 50%), hsl(48, 70%, 70%));\n}\n\n.navigator-sm-stylesheet-tree-item .icon,\n.navigator-stylesheet-tree-item .icon {\n    background: linear-gradient(45deg, hsl(256, 50%, 50%), hsl(256, 50%, 70%));\n}\n\n.navigator-image-tree-item .icon,\n.navigator-font-tree-item .icon {\n    background: linear-gradient(45deg, hsl(109, 33%, 50%), hsl(109, 33%, 70%));\n}\n\n.navigator-sm-folder-tree-item .tree-element-title,\n.navigator-sm-script-tree-item .tree-element-title,\n.navigator-sm-stylesheet-tree-item .tree-element-title {\n    font-style: italic;\n}\n\n:host{\n    overflow-y: auto;\n}\n\n/*# sourceURL=sources/navigatorTree.css */";Root.Runtime.cachedResources["sources/navigatorView.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.navigator-toolbar {\n    border-bottom: 1px solid #ccc;\n    padding-left: 8px;\n}\n\n/*# sourceURL=sources/navigatorView.css */";Root.Runtime.cachedResources["sources/scopeChainSidebarPane.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.scope-chain-sidebar-pane-section-header {\n    flex: auto;\n}\n\n.scope-chain-sidebar-pane-section-subtitle {\n    float: right;\n    margin-left: 5px;\n    max-width: 55%;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.scope-chain-sidebar-pane-section-title {\n    font-weight: normal;\n    word-wrap: break-word;\n    white-space: normal;\n}\n\n.scope-chain-sidebar-pane-section {\n    padding: 2px 4px;\n    flex: none;\n}\n\n/*# sourceURL=sources/scopeChainSidebarPane.css */";Root.Runtime.cachedResources["sources/sourcesPanel.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.scripts-debug-toolbar {\n    position: absolute;\n    top: 0;\n    width: 100%;\n    background-color: var(--toolbar-bg-color);\n    border-bottom: 1px solid #ccc;\n    overflow: hidden;\n}\n\n.scripts-debug-toolbar-drawer {\n    flex: 0 0 52px;\n    -webkit-transition: margin-top 0.1s ease-in-out;\n    margin-top: -26px;\n    padding-top: 25px;\n    background-color: white;\n    overflow: hidden;\n    white-space: nowrap;\n}\n\n.scripts-debug-toolbar-drawer.expanded {\n    margin-top: 0;\n}\n\n.scripts-debug-toolbar-drawer > [is=dt-checkbox] {\n    display: none;\n    padding-left: 3px;\n    height: 28px;\n}\n\n.scripts-debug-toolbar-drawer.expanded > [is=dt-checkbox] {\n    display: flex;\n}\n\n.cursor-auto {\n    cursor: auto;\n}\n\n.navigator-tabbed-pane {\n    background-color: var(--toolbar-bg-color);\n}\n\n/*# sourceURL=sources/sourcesPanel.css */";Root.Runtime.cachedResources["sources/sourcesView.css"]="/*\n * Copyright (C) 2013 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n *     * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n#sources-panel-sources-view {\n    flex: auto;\n    position: relative;\n}\n\n#sources-panel-sources-view .sources-toolbar {\n    display: flex;\n    flex: 0 0 27px;\n    background-color: var(--toolbar-bg-color);\n    border-top: var(--divider-border);\n    overflow: hidden;\n    z-index: 0;\n}\n\n.sources-toolbar .toolbar {\n    cursor: default;\n}\n\n.source-frame-debugger-script {\n    background-color: rgba(255, 255, 194, 0.5);\n}\n\n.-theme-with-dark-background .source-frame-debugger-script {\n    background-color: #444;\n}\n\n@-webkit-keyframes source-frame-value-update-highlight-animation {\n    from {\n        background-color: inherit;\n        color: inherit;\n    }\n    10% {\n        background-color: rgb(158, 54, 153);\n        color: white;\n    }\n    to {\n        background-color: inherit;\n        color: inherit;\n    }\n}\n\n.source-frame-value-update-highlight {\n    -webkit-animation: source-frame-value-update-highlight-animation 0.8s 1 cubic-bezier(0, 0, 0.2, 1);\n    border-radius: 2px;\n}\n\n.diff-entry-insert .diff-marker {\n    border-left: 4px solid hsla(144, 55%, 37%, 1);\n}\n\n.diff-entry-insert .CodeMirror-gutter-background {\n    background-color: hsla(144,55%,49%,.2);\n}\n\n.diff-entry-modify .diff-marker {\n    border-left: 4px solid #9C27B0;\n}\n\n.diff-entry-modify .CodeMirror-gutter-background {\n    background-color: rgba(186,104,200,0.2);\n}\n\n.diff-entry-delete .diff-marker {\n    width: 0;\n    height: 0;\n    border-top: 6px solid transparent;\n    border-bottom: 6px solid transparent;\n    border-left: 6px solid #D32F2F;\n    position: relative;\n    top: 6px;\n    cursor: pointer;\n    left: 0px;\n}\n\n.diff-entry-delete .CodeMirror-gutter-background {\n    border-bottom: 2px solid #D32F2F;\n}\n\n.CodeMirror-gutter-diff {\n    width: 4px;\n}\n\n.highlight-line-modification {\n    animation: source-line-modification-background-fadeout 0.4s 0s;\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n}\n\n.highlight-line-modification span {\n    animation: source-line-modification-foreground-fadeout 0.4s 0s;\n    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n}\n\n@keyframes source-line-modification-background-fadeout {\n    from { background-color: rgba(158, 54, 153, 0.5); }\n    50% { background-color: rgba(158, 54, 153, 0.5); }\n    90% { background-color: rgba(158, 54, 153, 0); }\n    to { background-color: transparent; }\n}\n\n@keyframes source-line-modification-foreground-fadeout {\n    from { color: white; }\n    50% { color: white; }\n    90% { color: initial; }\n    to { color: initial; }\n}\n\n/*# sourceURL=sources/sourcesView.css */";Root.Runtime.cachedResources["sources/threadsSidebarPane.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.thread-item {\n    padding: 3px 8px 3px 20px;\n    position: relative;\n    min-height: 18px;\n    line-height: 15px;\n    display: flex;\n    flex-wrap: wrap;\n}\n\n.thread-item + .thread-item {\n    border-top: 1px solid #efefef;\n}\n\n.thread-item:hover {\n    background-color: #eee;\n}\n\n.thread-item-title,\n.thread-item-paused-state {\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n}\n\n.thread-item-paused-state {\n    color: #888;\n    margin-left: auto;\n    padding: 0 10px 0 10px;\n}\n\n.selected-thread-icon {\n    display: none;\n    position: absolute;\n    top: 5px;\n    left: 4px;\n}\n\n.thread-item.selected .selected-thread-icon {\n    display: block;\n}\n\n\n/*# sourceURL=sources/threadsSidebarPane.css */";Root.Runtime.cachedResources["sources/watchExpressionsSidebarPane.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.watch-expression-delete-button {\n    position: absolute;\n    top: 5px;\n    right: 6px;\n    cursor: pointer;\n    opacity: 0;\n    min-width: 20px;\n}\n\n.watch-expression-header:hover .watch-expression-delete-button {\n    opacity: 0.5;\n}\n\n.watch-expression-header:hover .watch-expression-delete-button:hover {\n    opacity: 1;\n}\n\n.watch-expressions {\n    overflow-x: hidden;\n    min-height: 26px;\n}\n\n.watch-expressions .dimmed {\n    opacity: 0.6;\n}\n\n.watch-expression-title {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    line-height: 20px;\n}\n\n.watch-expression-object-header .watch-expression-title {\n    margin-left: 1px;\n}\n\n.watch-expression {\n    position: relative;\n    flex: auto;\n    min-height: 20px;\n}\n\n.watch-expressions .name {\n    color: rgb(136, 19, 145);\n    flex: none;\n    white-space: nowrap;\n    text-overflow: ellipsis ;\n    overflow: hidden;\n}\n\n.watch-expression-error {\n    color: red;\n}\n\n:host-context(.-theme-with-dark-background) .watch-expression-error {\n    color: hsl(0, 100%, 65%);\n}\n\n.watch-expressions-separator {\n    flex: none;\n}\n\n.watch-expressions .value {\n    white-space: nowrap;\n    display: inline;\n}\n\n.watch-expression .text-prompt {\n    text-overflow: clip;\n    overflow: hidden;\n    white-space: nowrap;\n    padding-left: 4px;\n    min-height: 18px;\n    line-height: 18px;\n    -webkit-user-select: text;\n}\n\n.watch-expression-text-prompt-proxy {\n    margin: 2px 12px 2px -4px;\n    padding-bottom: 3px;\n}\n\n.watch-expression-header {\n    flex: auto;\n    margin-left: -16px;\n    padding-left: 15px;\n}\n\nli.watch-expression-tree-item:hover {\n    background-color: #F0F0F0;\n}\n\nli.watch-expression-tree-item {\n    padding-left: 4px;\n}\n\n.watch-expression-header:focus[data-keyboard-focus=\"true\"] {\n    background: var(--focus-bg-color);\n}\n\nli.watch-expression-editing::before {\n    background-color: transparent;\n}\n\n/*# sourceURL=sources/watchExpressionsSidebarPane.css */";Root.Runtime.cachedResources["sources/dialog.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n    padding: 10px;\n}\n\n.widget {\n    align-items: center;\n}\n\nlabel {\n    white-space: nowrap;\n}\n\ninput[type=text].add-source-map {\n    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);\n    font-size: inherit;\n    margin: 0 8px 0 5px;\n}\n\n/*# sourceURL=sources/dialog.css */";Root.Runtime.cachedResources["text_editor/autocompleteTooltip.css"]="/*\n * Copyright (c) 2018 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n.autocomplete-tooltip {\n  pointer-events: none;\n  margin-left: -3px;\n}\n\n.autocomplete-tooltip > div > * {\n  padding: 0px 4px;\n  white-space: nowrap;\n  vertical-align: middle;\n  line-height: 20px;\n  box-shadow: var(--drop-shadow);\n  background-color: #FFFFFF;\n  width: fit-content;\n}\n/*# sourceURL=text_editor/autocompleteTooltip.css */";Root.Runtime.cachedResources["text_editor/cmdevtools.css"]=".CodeMirror {\n    line-height: 1.2em !important;\n    background-color: transparent !important;\n    color: #222;\n    height: 300px;\n}\n\n.CodeMirror-linewidget {\n    overflow: visible !important;\n}\n\n.CodeMirror-gutter-performance {\n    width: 60px;\n    background-color: white;\n    margin-left: 3px;\n}\n\n.CodeMirror-gutter-memory {\n    width: 48px;\n    background-color: white;\n    margin-left: 3px;\n}\n\n.CodeMirror-gutter-coverage {\n    width: 5px;\n    background-color: white;\n    margin-left: 3px;\n}\n\n.CodeMirror .source-frame-eval-expression {\n    outline: 0;\n    border: 1px solid rgb(163, 41, 34);\n    border-left-width: 0;\n    border-right-width: 0;\n    background-color: rgb(255, 255, 194);\n}\n\n.CodeMirror .source-frame-eval-expression-start {\n    border-left-width: 1px;\n    margin-left: -1px;\n}\n\n.CodeMirror .source-frame-eval-expression-end {\n    border-right-width: 1px;\n    margin-right: -1px;\n}\n\n.CodeMirror .source-frame-continue-to-location {\n    outline: 0;\n    border: 1px solid transparent;\n    border-left-width: 0;\n    border-right-width: 0;\n    background-color: rgb(230, 236, 255);\n    cursor: pointer;\n}\n\n.CodeMirror .source-frame-continue-to-location:hover {\n    border: 1px solid rgb(121, 141, 254);\n    background-color: rgb(171, 191, 254);\n}\n\n:host-context(.-theme-with-dark-background) .CodeMirror .source-frame-continue-to-location,\n.-theme-with-dark-background .CodeMirror .source-frame-continue-to-location {\n    background-color: #14522b;\n}\n\n:host-context(.-theme-with-dark-background) .CodeMirror .source-frame-continue-to-location:hover,\n.-theme-with-dark-background .CodeMirror .source-frame-continue-to-location:hover {\n    border: 1px solid #33cc6b;\n    background-color: #14522b;\n}\n\n.CodeMirror .source-frame-continue-to-location-start {\n    border-left-width: 1px;\n    margin-left: -1px;\n}\n\n.CodeMirror .source-frame-continue-to-location-end {\n    border-right-width: 1px;\n    margin-right: -1px;\n}\n\n.CodeMirror .source-frame-async-step-in {\n    outline: 0;\n    background-color: hsla(100, 46%, 80%, 1);\n    cursor: pointer;\n    border: 1px solid transparent;\n    border-left-width: 0;\n    border-right-width: 0;\n}\n\n.source-frame-async-step-in-hovered .source-frame-async-step-in {\n    background-color: hsl(96, 53%, 65%);\n    border-color: rgb(100, 154, 100);\n}\n\n.source-frame-async-step-in-hovered .source-frame-async-step-in-start {\n    border-left-width: 1px;\n    margin-left: -1px;\n}\n\n.source-frame-async-step-in-hovered .source-frame-async-step-in-end {\n    border-right-width: 1px;\n    margin-right: -1px;\n}\n\n.CodeMirror-readonly .CodeMirror-cursor {\n    display: none;\n}\n\n.CodeMirror-gutters {\n    border-right: 1px solid var(--divider-color);\n    white-space: nowrap;\n    background-color: white;\n}\n\n.CodeMirror-linenumber {\n    color: hsl(0, 0%, 46%);\n    padding: 0 3px 0 5px;\n    min-width: 22px;\n    text-align: right;\n    white-space: nowrap;\n}\n\n.pretty-printed .CodeMirror-linenumber {\n    color: var(--accent-color);\n}\n\n.cm-highlight {\n    -webkit-animation: fadeout 2s 0s;\n}\n:host-context(.-theme-with-dark-background) .cm-highlight,\n.-theme-with-dark-background .cm-highlight {\n    -webkit-animation: fadeout-dark 2s 0s;\n}\n@-webkit-keyframes fadeout {\n    from {background-color: rgb(255, 255, 120); }\n    to { background-color: white; }\n}\n@-webkit-keyframes fadeout-dark {\n    from {background-color: hsla(133, 100%, 30%, 0.5); }\n    to { background-color: transparent; }\n}\n\n.cm-readonly-highlight {\n    background-color: rgb(255, 255, 120);\n}\n:host-context(.-theme-with-dark-background) .cm-readonly-highlight,\n.-theme-with-dark-background .cm-readonly-highlight {\n    background-color: hsla(133, 100%, 30%, 0.5);\n}\n\n.cm-highlight.cm-execution-line {\n    -webkit-animation: fadeout-execution-line 1s 0s;\n}\n:host-context(.-theme-with-dark-background) .cm-highlight.cm-execution-line,\n.-theme-with-dark-background .cm-highlight.cm-execution-line {\n    -webkit-animation: fadeout-execution-line-dark 1s 0s;\n}\n\n@-webkit-keyframes fadeout-execution-line {\n    from {background-color: rgb(121, 141, 254); }\n    to { background-color: rgb(171, 191, 254); }\n}\n@-webkit-keyframes fadeout-execution-line-dark {\n    from {background-color: #208043; }\n    to { background-color: #14522b; }\n}\n\n.cm-breakpoint .CodeMirror-gutter-wrapper .CodeMirror-linenumber, -theme-preserve {\n    color: white;\n    border-width: 1px 4px 1px 1px !important;\n    -webkit-border-image: url(Images/breakpoint.svg) 1 4 1 1;\n    margin: 0 0 0 3px !important;\n    padding-right: 3px;\n    padding-left: 1px;\n    height: 11px;\n    line-height: 12px !important;\n    border-style: solid;\n}\n\n.cm-line-without-source-mapping .CodeMirror-linenumber {\n    color: rgba(128, 128, 128, 0.4);\n}\n\n.cm-breakpoint.cm-breakpoint-conditional .CodeMirror-linenumber {\n    -webkit-border-image: url(Images/breakpointConditional.svg) 1 4 1 1;\n}\n\n:host-context(.-theme-with-dark-background) .cm-breakpoint:not(.cm-breakpoint-conditional) .CodeMirror-gutter-wrapper .CodeMirror-linenumber,\n.-theme-with-dark-background .cm-breakpoint:not(.cm-breakpoint-conditional) .CodeMirror-gutter-wrapper .CodeMirror-linenumber {\n    filter: hue-rotate(-139deg);\n}\n\n.cm-breakpoint-disabled .CodeMirror-linenumber {\n    opacity: 0.5;\n}\n\n.breakpoints-deactivated .cm-breakpoint .CodeMirror-linenumber {\n    opacity: 0.5;\n}\n\n.breakpoints-deactivated .cm-breakpoint-disabled .CodeMirror-linenumber {\n    opacity: 0.3;\n}\n\n.cm-inline-breakpoint {\n    position:relative;\n    top: 2px;\n    cursor: pointer;\n}\n\n.cm-execution-line-tail + .CodeMirror-widget {\n    background-color: #abbffe;\n}\n\n.source-frame-eval-expression + .CodeMirror-widget {\n    border: 1px solid rgb(163, 41, 34);\n    border-left-width: 0;\n    border-right-width: 0;\n    background-color: rgb(255, 255, 194);\n}\n\n.cm-inline-breakpoint.cm-execution-line-tail {\n    background-color: #698cfe;\n}\n\n.cm-execution-line-tail .cm-inline-breakpoint {\n    background-color: white\n}\n\n.cm-inline-breakpoint.cm-inline-conditional {\n    background-color: #ef9d0d;\n}\n\n.cm-inline-breakpoint.cm-inline-disabled {\n    opacity: 0.5;\n}\n\n.cm-continue-to-location {\n    cursor: pointer;\n    opacity: 0.8;\n    position: relative;\n    top: 2px;\n}\n\n.cm-continue-to-location:hover {\n    opacity: 1;\n}\n\ndiv.CodeMirror:focus-within span.CodeMirror-matchingbracket {\n    background-color: rgba(0, 0, 0, 0.07);\n    border-bottom: 1px solid rgba(0, 0, 0, 0.5);\n}\n\ndiv.CodeMirror:focus-within span.CodeMirror-nonmatchingbracket {\n    background-color: rgba(255, 0, 0, 0.07);\n    border-bottom: 1px solid rgba(255, 0, 0, 0.5);\n}\n\n:host-context(.-theme-with-dark-background) div.CodeMirror:focus-within span.CodeMirror-matchingbracket,\n.-theme-with-dark-background div.CodeMirror:focus-within span.CodeMirror-matchingbracket {\n    border-bottom: 1px solid rgb(217,217,217);\n    background-color:initial;\n}\n\n:host-context(.-theme-with-dark-background) div.CodeMirror:focus-within span.CodeMirror-nonmatchingbracket,\n.-theme-with-dark-background div.CodeMirror:focus-within span.CodeMirror-nonmatchingbracket {\n    border-bottom: 1px solid rgb(255, 26, 26);\n    background-color:initial;\n}\n\n.cm-whitespace::before {\n    position: absolute;\n    pointer-events: none;\n    color: rgb(175, 175, 175);\n}\n\n.cm-tab {\n    display: inline-block;\n    text-decoration: inherit;\n    position: relative;\n}\n\n.cm-tab:before {\n    display: none;\n    content: \".\";\n    color: transparent;\n    border-bottom: 1px solid rgb(175, 175, 175);\n    position: absolute;\n    width: 90%;\n    bottom: 50%;\n    left: 5%;\n}\n\n.show-whitespaces .CodeMirror .cm-tab:before {\n    display: block !important;\n}\n\n.cm-execution-line {\n    background-color: rgba(0, 59, 255, 0.10);\n}\n\n.cm-execution-line-outline {\n    outline: 1px solid rgb(64, 115, 244);\n}\n\n.cm-execution-line-tail {\n    background-color: rgb(171, 191, 254);\n}\n\n:host-context(.-theme-with-dark-background) .cm-execution-line,\n.-theme-with-dark-background .cm-execution-line {\n    background-color: #14522b;\n}\n\n:host-context(.-theme-with-dark-background) .cm-execution-line-outline,\n.-theme-with-dark-background .cm-execution-line-outline {\n    outline: 1px solid #33cc6b;\n}\n\n:host-context(.-theme-with-dark-background) .cm-execution-line-tail,\n.-theme-with-dark-background .cm-execution-line-tail {\n    background-color: #347132;\n}\n\n.cm-token-highlight {\n    position: relative;\n}\n\n.cm-token-highlight:before {\n    position: absolute;\n    border: 1px solid gray;\n    border-radius: 3px;\n    top: 0;\n    bottom: -1px;\n    left: 0;\n    right: 0;\n    content: \"\";\n}\n\n.cm-line-with-selection .cm-column-with-selection:before {\n    border: none;\n}\n\n.cm-search-highlight {\n    position: relative;\n}\n\n.cm-search-highlight:before {\n    position: absolute;\n    border-top-style: solid;\n    border-bottom-style: solid;\n    border-top-color: gray;\n    border-bottom-color: gray;\n    border-top-width: 1px;\n    border-bottom-width: 1px;\n    top: -1px;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    content: \"\";\n}\n\n.cm-search-highlight-full:before {\n    border: 1px solid gray;\n    border-radius: 3px;\n}\n\n.cm-search-highlight-start:before {\n    border-left-width: 1px;\n    border-top-left-radius: 2px;\n    border-bottom-left-radius: 2px;\n    border-left-style: solid;\n    border-left-color: gray;\n}\n\n.cm-search-highlight-end:before {\n    border-right-width: 1px;\n    border-top-right-radius: 2px;\n    border-bottom-right-radius: 2px;\n    border-right-style: solid;\n    border-right-color: gray;\n}\n\n.cm-line-with-selection .cm-column-with-selection.cm-search-highlight-full:before {\n    border-radius: 1px;\n}\n\n.cm-line-with-selection .cm-column-with-selection.cm-search-highlight-start:before {\n    border-top-left-radius: 1px;\n    border-bottom-left-radius: 1px;\n}\n\n.cm-line-with-selection .cm-column-with-selection.cm-search-highlight-end:before {\n    border-top-right-radius: 1px;\n    border-bottom-right-radius: 1px;\n}\n\n.cm-line-with-selection .cm-column-with-selection.cm-search-highlight:before {\n    margin: -1px -1px -1px -1px;\n    background-color: rgb(241, 234, 0);\n    z-index: -1;\n}\n\n:host-context(.-theme-with-dark-background) .cm-line-with-selection .cm-column-with-selection.cm-search-highlight:before,\n.-theme-with-dark-background .cm-line-with-selection .cm-column-with-selection.cm-search-highlight:before {\n    background-color: hsl(133, 100%, 30%);\n}\n\n:host-context(.-theme-with-dark-background) .cm-line-with-selection .cm-search-highlight,\n.-theme-with-dark-background .cm-line-with-selection .cm-search-highlight {\n    color: #eee;\n}\n\n.CodeMirror .text-editor-line-marker-text {\n    text-align: right;\n    padding-right: 3px;\n    height: 12px;\n}\n\n.CodeMirror .text-editor-line-marker-text span.line-marker-units {\n    color: #555;\n    font-size: 75%;\n    margin-left: 3px;\n}\n\n.CodeMirror .text-editor-coverage-unused-marker {\n    text-align: right;\n    padding-right: 2px;\n    background-color: #EE442F;\n}\n\n.CodeMirror .text-editor-coverage-unused-marker::after {\n    content: \"\\200B\";\n}\n\n.CodeMirror .text-editor-coverage-used-marker {\n    text-align: right;\n    padding-right: 2px;\n    background-color: #63ACBE;\n}\n\n.CodeMirror .text-editor-coverage-used-marker::after {\n    content: \"\\200B\";\n}\n\n.CodeMirror .text-editor-line-decoration {\n    position: absolute;\n}\n\n.CodeMirror .text-editor-line-decoration-wave {\n    position: absolute;\n    top: -2px;\n    right: -4px;\n    left: 4px;\n    cursor: pointer;\n    height: 4px;\n}\n\n.CodeMirror .text-editor-value-decoration {\n    position: absolute;\n    bottom: 0;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    max-width: 1000px;\n    opacity: 0.8;\n    background-color: #FFE3C7;\n    margin-left: 10px;\n    padding-left: 5px;\n    color: #222;\n    -webkit-user-select: text;\n}\n\n.CodeMirror .cm-execution-line .text-editor-value-decoration {\n    background-color: transparent;\n    opacity: 0.5;\n}\n\n.CodeMirror .text-editor-line-decoration-icon {\n    position: absolute;\n    cursor: pointer;\n    right: -16px;\n    top: -9px;\n}\n\n.CodeMirror .text-editor-line-with-warning:not(.cm-execution-line):not(.cm-readonly-highlight) {\n    background-color: rgba(241, 230, 0, 0.1);\n}\n\n.CodeMirror .text-editor-line-with-error:not(.cm-execution-line):not(.cm-readonly-highlight) {\n    background-color: rgba(255, 0, 0, 0.05);\n}\n\n.CodeMirror .text-editor-line-decoration-wave {\n    background-image: url(Images/errorWave.svg);\n    background-repeat: repeat-x;\n    background-size: contain;\n}\n\n/** @see crbug.com/358161 */\n.CodeMirror .CodeMirror-vscrollbar, .CodeMirror .CodeMirror-hscrollbar {\n    transform: translateZ(0);\n}\n\n.cm-trailing-whitespace {\n    background-color: rgba(255, 0, 0, 0.05);\n}\n\n.CodeMirror-activeline .cm-trailing-whitespace {\n    background-color: transparent;\n}\n\n:host-context(.-theme-with-dark-background) .CodeMirror .CodeMirror-selected,\n.-theme-with-dark-background .CodeMirror .CodeMirror-selected {\n    background-color: #454545;\n}\n\n.CodeMirror .auto-complete-text {\n    color: rgb(128,128,128);\n}\n\n.CodeMirror .placeholder-text {\n    height: 0;\n    color: rgb(128,128,128);\n}\n\n/** Prevent the codemirror textarea from stealing PageUp events **/\n.CodeMirror textarea {\n    resize: none;\n    overflow: hidden;\n}\n\n.CodeMirror-lines {\n    padding: 4px 0; /* Vertical padding around content */\n}\n\n.CodeMirror pre {\n    padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n    background-color: white; /* The little square between H and V scrollbars */\n}\n\n.CodeMirror-cursor {\n    border-left: 1px solid black;\n    border-right: none;\n    width: 0;\n}\n\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n    border-left: 1px solid silver;\n}\n\n.CodeMirror-composing {\n    border-bottom: 2px solid;\n}\n\n.pretty-printed .CodeMirror-linenumber {\n    color: var(--accent-color);\n}\n\n.CodeMirror-foldmarker {\n    cursor: pointer;\n    font-size: 0;\n    line-height: 0;\n    height:0px;\n}\n\n.CodeMirror-foldmarker::before {\n    content: '\\2026';\n    font-size: 13px;\n    color: #666;\n}\n\n.CodeMirror-foldgutter {\n    width: 1.5em;\n}\n\n.CodeMirror-gutters:hover .CodeMirror-foldgutter {\n    background-color: transparent;\n}\n\n.CodeMirror-foldgutter-open,\n.CodeMirror-foldgutter-folded {\n    cursor: pointer;\n    position: relative;\n}\n\n.CodeMirror-foldgutter-open {\n    transition: opacity .2s;\n    opacity: 0;\n}\n\n.CodeMirror-gutter-hovered .CodeMirror-foldgutter-open {\n    opacity: 1;\n}\n\n.CodeMirror-foldgutter-open::before,\n.CodeMirror-foldgutter-folded::before {\n    background-color: #727272;\n    -webkit-user-select: none;\n    -webkit-mask-image: url(Images/treeoutlineTriangles.svg);\n    -webkit-mask-size: 32px 24px;\n    content: \"\";\n    display:block;\n    width: 8px;\n    color: transparent;\n    text-shadow: none;\n    height: 12px;\n    position: absolute;\n    right: 4px;\n}\n\n.CodeMirror-foldgutter-open::before {\n    -webkit-mask-position: -16px 0;\n}\n\n.CodeMirror-foldgutter-folded::before {\n    -webkit-mask-position: 0 0;\n}\n\n.CodeMirror .CodeMirror-selected {\n    background-color: var(--item-selection-inactive-bg-color);\n}\n\n.CodeMirror-focused .CodeMirror-selected {\n    background-color: var(--item-selection-bg-color);\n}\n\n.CodeMirror .CodeMirror-line::selection,\n.CodeMirror .CodeMirror-line > span::selection,\n.CodeMirror .CodeMirror-line > span > span::selection {\n    background: var(--item-selection-bg-color);\n}\n\n/*# sourceURL=text_editor/cmdevtools.css */";Timeline.CountersGraph=class extends UI.VBox{constructor(delegate){super();this.element.id='memory-graphs-container';this._delegate=delegate;this._calculator=new Timeline.CountersGraph.Calculator();this._header=new UI.HBox();this._header.element.classList.add('timeline-memory-header');this._header.show(this.element);this._toolbar=new UI.Toolbar('timeline-memory-toolbar');this._header.element.appendChild(this._toolbar.element);this._graphsContainer=new UI.VBox();this._graphsContainer.show(this.element);const canvasWidget=new UI.VBoxWithResizeCallback(this._resize.bind(this));canvasWidget.show(this._graphsContainer.element);this._createCurrentValuesBar();this._canvasContainer=canvasWidget.element;this._canvasContainer.id='memory-graphs-canvas-container';this._canvas=this._canvasContainer.createChild('canvas');this._canvas.id='memory-counters-graph';this._canvasContainer.addEventListener('mouseover',this._onMouseMove.bind(this),true);this._canvasContainer.addEventListener('mousemove',this._onMouseMove.bind(this),true);this._canvasContainer.addEventListener('mouseleave',this._onMouseLeave.bind(this),true);this._canvasContainer.addEventListener('click',this._onClick.bind(this),true);this._timelineGrid=new PerfUI.TimelineGrid();this._canvasContainer.appendChild(this._timelineGrid.dividersElement);this._counters=[];this._counterUI=[];this._countersByName={};this._countersByName['jsHeapSizeUsed']=this._createCounter(Common.UIString('JS Heap'),Common.UIString('JS Heap: %s'),'hsl(220, 90%, 43%)',Number.bytesToString);this._countersByName['documents']=this._createCounter(Common.UIString('Documents'),Common.UIString('Documents: %s'),'hsl(0, 90%, 43%)');this._countersByName['nodes']=this._createCounter(Common.UIString('Nodes'),Common.UIString('Nodes: %s'),'hsl(120, 90%, 43%)');this._countersByName['jsEventListeners']=this._createCounter(Common.UIString('Listeners'),Common.UIString('Listeners: %s'),'hsl(38, 90%, 43%)');this._gpuMemoryCounter=this._createCounter(Common.UIString('GPU Memory'),Common.UIString('GPU Memory [KB]: %s'),'hsl(300, 90%, 43%)',Number.bytesToString);this._countersByName['gpuMemoryUsedKB']=this._gpuMemoryCounter;}
setModel(model,track){if(this._model!==model){if(this._model){this._model.removeEventListener(Timeline.PerformanceModel.Events.WindowChanged,this._onWindowChanged,this);}
this._model=model;if(this._model){this._model.addEventListener(Timeline.PerformanceModel.Events.WindowChanged,this._onWindowChanged,this);}}
this._calculator.setZeroTime(model?model.timelineModel().minimumRecordTime():0);for(let i=0;i<this._counters.length;++i){this._counters[i].reset();this._counterUI[i].reset();}
this.scheduleRefresh();this._track=track;if(!track){return;}
const events=track.syncEvents();for(let i=0;i<events.length;++i){const event=events[i];if(event.name!==TimelineModel.TimelineModel.RecordType.UpdateCounters){continue;}
const counters=event.args.data;if(!counters){return;}
for(const name in counters){const counter=this._countersByName[name];if(counter){counter.appendSample(event.startTime,counters[name]);}}
const gpuMemoryLimitCounterName='gpuMemoryLimitKB';if(gpuMemoryLimitCounterName in counters){this._gpuMemoryCounter.setLimit(counters[gpuMemoryLimitCounterName]);}}}
_createCurrentValuesBar(){this._currentValuesBar=this._graphsContainer.element.createChild('div');this._currentValuesBar.id='counter-values-bar';}
_createCounter(uiName,uiValueTemplate,color,formatter){const counter=new Timeline.CountersGraph.Counter();this._counters.push(counter);this._counterUI.push(new Timeline.CountersGraph.CounterUI(this,uiName,uiValueTemplate,color,counter,formatter));return counter;}
resizerElement(){return this._header.element;}
_resize(){const parentElement=this._canvas.parentElement;this._canvas.width=parentElement.clientWidth*window.devicePixelRatio;this._canvas.height=parentElement.clientHeight*window.devicePixelRatio;this._calculator.setDisplayWidth(this._canvas.width);this.refresh();}
_onWindowChanged(event){const window=(event.data.window);this._calculator.setWindow(window.left,window.right);this.scheduleRefresh();}
scheduleRefresh(){UI.invokeOnceAfterBatchUpdate(this,this.refresh);}
draw(){this._clear();for(const counter of this._counters){counter._calculateVisibleIndexes(this._calculator);counter._calculateXValues(this._canvas.width);}
for(const counterUI of this._counterUI){counterUI._drawGraph(this._canvas);}}
_onClick(event){const x=event.x-this._canvasContainer.totalOffsetLeft();let minDistance=Infinity;let bestTime;for(const counterUI of this._counterUI){if(!counterUI.counter.times.length){continue;}
const index=counterUI._recordIndexAt(x);const distance=Math.abs(x*window.devicePixelRatio-counterUI.counter.x[index]);if(distance<minDistance){minDistance=distance;bestTime=counterUI.counter.times[index];}}
if(bestTime!==undefined){this._delegate.selectEntryAtTime(this._track.events.length?this._track.events:this._track.asyncEvents,bestTime);}}
_onMouseLeave(event){delete this._markerXPosition;this._clearCurrentValueAndMarker();}
_clearCurrentValueAndMarker(){for(let i=0;i<this._counterUI.length;i++){this._counterUI[i]._clearCurrentValueAndMarker();}}
_onMouseMove(event){const x=event.x-this._canvasContainer.totalOffsetLeft();this._markerXPosition=x;this._refreshCurrentValues();}
_refreshCurrentValues(){if(this._markerXPosition===undefined){return;}
for(let i=0;i<this._counterUI.length;++i){this._counterUI[i].updateCurrentValue(this._markerXPosition);}}
refresh(){this._timelineGrid.updateDividers(this._calculator);this.draw();this._refreshCurrentValues();}
_clear(){const ctx=this._canvas.getContext('2d');ctx.clearRect(0,0,ctx.canvas.width,ctx.canvas.height);}};Timeline.CountersGraph.Counter=class{constructor(){this.times=[];this.values=[];}
appendSample(time,value){if(this.values.length&&this.values.peekLast()===value){return;}
this.times.push(time);this.values.push(value);}
reset(){this.times=[];this.values=[];}
setLimit(value){this._limitValue=value;}
_calculateBounds(){let maxValue;let minValue;for(let i=this._minimumIndex;i<=this._maximumIndex;i++){const value=this.values[i];if(minValue===undefined||value<minValue){minValue=value;}
if(maxValue===undefined||value>maxValue){maxValue=value;}}
minValue=minValue||0;maxValue=maxValue||1;if(this._limitValue){if(maxValue>this._limitValue*0.5){maxValue=Math.max(maxValue,this._limitValue);}
minValue=Math.min(minValue,this._limitValue);}
return{min:minValue,max:maxValue};}
_calculateVisibleIndexes(calculator){const start=calculator.minimumBoundary();const end=calculator.maximumBoundary();this._minimumIndex=Number.constrain(this.times.upperBound(start)-1,0,this.times.length-1);this._maximumIndex=Number.constrain(this.times.lowerBound(end),0,this.times.length-1);this._minTime=start;this._maxTime=end;}
_calculateXValues(width){if(!this.values.length){return;}
const xFactor=width/(this._maxTime-this._minTime);this.x=new Array(this.values.length);for(let i=this._minimumIndex+1;i<=this._maximumIndex;i++){this.x[i]=xFactor*(this.times[i]-this._minTime);}}};Timeline.CountersGraph.CounterUI=class{constructor(countersPane,title,currentValueLabel,graphColor,counter,formatter){this._countersPane=countersPane;this.counter=counter;this._formatter=formatter||Number.withThousandsSeparator;this._setting=Common.settings.createSetting('timelineCountersGraph-'+title,true);this._setting.setTitle(title);this._filter=new UI.ToolbarSettingCheckbox(this._setting,title);this._filter.inputElement.classList.add('-theme-preserve');const color=Common.Color.parse(graphColor).setAlpha(0.5).asString(Common.Color.Format.RGBA);if(color){this._filter.element.backgroundColor=color;this._filter.element.borderColor='transparent';}
this._filter.inputElement.addEventListener('click',this._toggleCounterGraph.bind(this));countersPane._toolbar.appendToolbarItem(this._filter);this._range=this._filter.element.createChild('span','range');this._value=countersPane._currentValuesBar.createChild('span','memory-counter-value');this._value.style.color=graphColor;this.graphColor=graphColor;this.limitColor=Common.Color.parse(graphColor).setAlpha(0.3).asString(Common.Color.Format.RGBA);this.graphYValues=[];this._verticalPadding=10;this._currentValueLabel=currentValueLabel;this._marker=countersPane._canvasContainer.createChild('div','memory-counter-marker');this._marker.style.backgroundColor=graphColor;this._clearCurrentValueAndMarker();}
reset(){this._range.textContent='';}
setRange(minValue,maxValue){const min=this._formatter(minValue);const max=this._formatter(maxValue);this._range.textContent=Common.UIString('[%s\xa0\u2013\xa0%s]',min,max);}
_toggleCounterGraph(event){this._value.classList.toggle('hidden',!this._filter.checked());this._countersPane.refresh();}
_recordIndexAt(x){return this.counter.x.upperBound(x*window.devicePixelRatio,null,this.counter._minimumIndex+1,this.counter._maximumIndex+1)-
1;}
updateCurrentValue(x){if(!this.visible()||!this.counter.values.length||!this.counter.x){return;}
const index=this._recordIndexAt(x);const value=Number.withThousandsSeparator(this.counter.values[index]);this._value.textContent=Common.UIString(this._currentValueLabel,value);const y=this.graphYValues[index]/window.devicePixelRatio;this._marker.style.left=x+'px';this._marker.style.top=y+'px';this._marker.classList.remove('hidden');}
_clearCurrentValueAndMarker(){this._value.textContent='';this._marker.classList.add('hidden');}
_drawGraph(canvas){const ctx=canvas.getContext('2d');const width=canvas.width;const height=canvas.height-2*this._verticalPadding;if(height<=0){this.graphYValues=[];return;}
const originY=this._verticalPadding;const counter=this.counter;const values=counter.values;if(!values.length){return;}
const bounds=counter._calculateBounds();const minValue=bounds.min;const maxValue=bounds.max;this.setRange(minValue,maxValue);if(!this.visible()){return;}
const yValues=this.graphYValues;const maxYRange=maxValue-minValue;const yFactor=maxYRange?height/(maxYRange):1;ctx.save();ctx.lineWidth=window.devicePixelRatio;if(ctx.lineWidth%2){ctx.translate(0.5,0.5);}
ctx.beginPath();let value=values[counter._minimumIndex];let currentY=Math.round(originY+height-(value-minValue)*yFactor);ctx.moveTo(0,currentY);let i=counter._minimumIndex;for(;i<=counter._maximumIndex;i++){const x=Math.round(counter.x[i]);ctx.lineTo(x,currentY);const currentValue=values[i];if(typeof currentValue!=='undefined'){value=currentValue;}
currentY=Math.round(originY+height-(value-minValue)*yFactor);ctx.lineTo(x,currentY);yValues[i]=currentY;}
yValues.length=i;ctx.lineTo(width,currentY);ctx.strokeStyle=this.graphColor;ctx.stroke();if(counter._limitValue){const limitLineY=Math.round(originY+height-(counter._limitValue-minValue)*yFactor);ctx.moveTo(0,limitLineY);ctx.lineTo(width,limitLineY);ctx.strokeStyle=this.limitColor;ctx.stroke();}
ctx.closePath();ctx.restore();}
visible(){return this._filter.checked();}};Timeline.CountersGraph.Calculator=class{setZeroTime(time){this._zeroTime=time;}
computePosition(time){return(time-this._minimumBoundary)/this.boundarySpan()*this._workingArea;}
setWindow(minimumBoundary,maximumBoundary){this._minimumBoundary=minimumBoundary;this._maximumBoundary=maximumBoundary;}
setDisplayWidth(clientWidth){this._workingArea=clientWidth;}
formatValue(value,precision){return Number.preciseMillisToString(value-this.zeroTime(),precision);}
maximumBoundary(){return this._maximumBoundary;}
minimumBoundary(){return this._minimumBoundary;}
zeroTime(){return this._zeroTime;}
boundarySpan(){return this._maximumBoundary-this._minimumBoundary;}};;Timeline.ExtensionTracingSession=class{constructor(provider,performanceModel){this._provider=provider;this._performanceModel=performanceModel;this._completionCallback;this._completionPromise=new Promise(fulfill=>{this._completionCallback=fulfill;});this._timeOffset=0;}
loadingStarted(){}
processingStarted(){}
loadingProgress(progress){}
loadingComplete(tracingModel){if(!tracingModel){return;}
this._performanceModel.addExtensionEvents(this._provider.longDisplayName(),tracingModel,this._timeOffset);this._completionCallback();}
complete(url,timeOffsetMicroseconds){if(!url){this._completionCallback();return;}
this._timeOffset=timeOffsetMicroseconds;Timeline.TimelineLoader.loadFromURL(url,this);}
start(){this._provider.start(this);}
stop(){this._provider.stop();return this._completionPromise;}};;Timeline.PerformanceModel=class extends Common.Object{constructor(){super();this._mainTarget=null;this._tracingModel=null;this._filters=[];this._timelineModel=new TimelineModel.TimelineModel();this._frameModel=new TimelineModel.TimelineFrameModel(event=>Timeline.TimelineUIUtils.eventStyle(event).category.name);this._filmStripModel=null;this._irModel=new TimelineModel.TimelineIRModel();this._window={left:0,right:Infinity};this._extensionTracingModels=[];this._recordStartTime=undefined;}
setMainTarget(target){this._mainTarget=target;}
mainTarget(){return this._mainTarget;}
setRecordStartTime(time){this._recordStartTime=time;}
recordStartTime(){return this._recordStartTime;}
setFilters(filters){this._filters=filters;}
filters(){return this._filters;}
isVisible(event){return this._filters.every(f=>f.accept(event));}
setTracingModel(model){this._tracingModel=model;this._timelineModel.setEvents(model);let inputEvents=null;let animationEvents=null;for(const track of this._timelineModel.tracks()){if(track.type===TimelineModel.TimelineModel.TrackType.Input){inputEvents=track.asyncEvents;}
if(track.type===TimelineModel.TimelineModel.TrackType.Animation){animationEvents=track.asyncEvents;}}
if(inputEvents||animationEvents){this._irModel.populate(inputEvents||[],animationEvents||[]);}
const mainTracks=this._timelineModel.tracks().filter(track=>track.type===TimelineModel.TimelineModel.TrackType.MainThread&&track.forMainFrame&&track.events.length);const threadData=mainTracks.map(track=>{const event=track.events[0];return{thread:event.thread,time:event.startTime};});this._frameModel.addTraceEvents(this._mainTarget,this._timelineModel.inspectedTargetEvents(),threadData);for(const entry of this._extensionTracingModels){entry.model.adjustTime(this._tracingModel.minimumRecordTime()+(entry.timeOffset/1000)-this._recordStartTime);}
this._autoWindowTimes();}
addExtensionEvents(title,model,timeOffset){this._extensionTracingModels.push({model:model,title:title,timeOffset:timeOffset});if(!this._tracingModel){return;}
model.adjustTime(this._tracingModel.minimumRecordTime()+(timeOffset/1000)-this._recordStartTime);this.dispatchEventToListeners(Timeline.PerformanceModel.Events.ExtensionDataAdded);}
tracingModel(){if(!this._tracingModel){throw'call setTracingModel before accessing PerformanceModel';}
return this._tracingModel;}
timelineModel(){return this._timelineModel;}
filmStripModel(){if(this._filmStripModel){return this._filmStripModel;}
if(!this._tracingModel){throw'call setTracingModel before accessing PerformanceModel';}
this._filmStripModel=new SDK.FilmStripModel(this._tracingModel);return this._filmStripModel;}
frames(){return this._frameModel.frames();}
frameModel(){return this._frameModel;}
interactionRecords(){return this._irModel.interactionRecords();}
extensionInfo(){return this._extensionTracingModels;}
dispose(){if(this._tracingModel){this._tracingModel.dispose();}
for(const extensionEntry of this._extensionTracingModels){extensionEntry.model.dispose();}}
filmStripModelFrame(frame){const screenshotTime=frame.idle?frame.startTime:frame.endTime;const filmStripFrame=this._filmStripModel.frameByTimestamp(screenshotTime);return filmStripFrame&&filmStripFrame.timestamp-frame.endTime<10?filmStripFrame:null;}
save(stream){const backingStorage=(this._tracingModel.backingStorage());return backingStorage.writeToStream(stream);}
setWindow(window,animate){this._window=window;this.dispatchEventToListeners(Timeline.PerformanceModel.Events.WindowChanged,{window,animate});}
window(){return this._window;}
_autoWindowTimes(){const timelineModel=this._timelineModel;let tasks=[];for(const track of timelineModel.tracks()){if(track.type===TimelineModel.TimelineModel.TrackType.MainThread&&track.forMainFrame){tasks=track.tasks;}}
if(!tasks.length){this.setWindow({left:timelineModel.minimumRecordTime(),right:timelineModel.maximumRecordTime()});return;}
function findLowUtilizationRegion(startIndex,stopIndex){const threshold=0.1;let cutIndex=startIndex;let cutTime=(tasks[cutIndex].startTime+tasks[cutIndex].endTime)/2;let usedTime=0;const step=Math.sign(stopIndex-startIndex);for(let i=startIndex;i!==stopIndex;i+=step){const task=tasks[i];const taskTime=(task.startTime+task.endTime)/2;const interval=Math.abs(cutTime-taskTime);if(usedTime<threshold*interval){cutIndex=i;cutTime=taskTime;usedTime=0;}
usedTime+=task.duration;}
return cutIndex;}
const rightIndex=findLowUtilizationRegion(tasks.length-1,0);const leftIndex=findLowUtilizationRegion(0,rightIndex);let leftTime=tasks[leftIndex].startTime;let rightTime=tasks[rightIndex].endTime;const span=rightTime-leftTime;const totalSpan=timelineModel.maximumRecordTime()-timelineModel.minimumRecordTime();if(span<totalSpan*0.1){leftTime=timelineModel.minimumRecordTime();rightTime=timelineModel.maximumRecordTime();}else{leftTime=Math.max(leftTime-0.05*span,timelineModel.minimumRecordTime());rightTime=Math.min(rightTime+0.05*span,timelineModel.maximumRecordTime());}
this.setWindow({left:leftTime,right:rightTime});}};Timeline.PerformanceModel.Events={ExtensionDataAdded:Symbol('ExtensionDataAdded'),WindowChanged:Symbol('WindowChanged')};Timeline.PerformanceModel.Window;;Timeline.TimelineController=class{constructor(target,client){this._target=target;this._tracingManager=target.model(SDK.TracingManager);this._performanceModel=new Timeline.PerformanceModel();this._performanceModel.setMainTarget(target);this._client=client;const backingStorage=new Bindings.TempFileBackingStorage();this._tracingModel=new SDK.TracingModel(backingStorage);this._extensionSessions=[];SDK.targetManager.observeModels(SDK.CPUProfilerModel,this);}
dispose(){SDK.targetManager.unobserveModels(SDK.CPUProfilerModel,this);}
mainTarget(){return this._target;}
async startRecording(options,providers){this._extensionTraceProviders=Extensions.extensionServer.traceProviders().slice();function disabledByDefault(category){return'disabled-by-default-'+category;}
const categoriesArray=['-*','devtools.timeline',disabledByDefault('devtools.timeline'),disabledByDefault('devtools.timeline.frame'),'v8.execute',TimelineModel.TimelineModel.Category.Console,TimelineModel.TimelineModel.Category.UserTiming];categoriesArray.push(TimelineModel.TimelineModel.Category.LatencyInfo);if(Root.Runtime.experiments.isEnabled('timelineFlowEvents')){categoriesArray.push('devtools.timeline.async');}
if(Root.Runtime.experiments.isEnabled('timelineV8RuntimeCallStats')&&options.enableJSSampling){categoriesArray.push(disabledByDefault('v8.runtime_stats_sampling'));}
if(!Root.Runtime.queryParam('timelineTracingJSProfileDisabled')&&options.enableJSSampling){categoriesArray.push(disabledByDefault('v8.cpu_profiler'));if(Common.moduleSetting('highResolutionCpuProfiling').get()){categoriesArray.push(disabledByDefault('v8.cpu_profiler.hires'));}}
categoriesArray.push(disabledByDefault('devtools.timeline.stack'));if(Root.Runtime.experiments.isEnabled('timelineInvalidationTracking')){categoriesArray.push(disabledByDefault('devtools.timeline.invalidationTracking'));}
if(options.capturePictures){categoriesArray.push(disabledByDefault('devtools.timeline.layers'),disabledByDefault('devtools.timeline.picture'),disabledByDefault('blink.graphics_context_annotations'));}
if(options.captureFilmStrip){categoriesArray.push(disabledByDefault('devtools.screenshot'));}
this._extensionSessions=providers.map(provider=>new Timeline.ExtensionTracingSession(provider,this._performanceModel));this._extensionSessions.forEach(session=>session.start());this._performanceModel.setRecordStartTime(Date.now());const response=await this._startRecordingWithCategories(categoriesArray.join(','),options.enableJSSampling);if(response[Protocol.Error]){await this._waitForTracingToStop(false);}
return response;}
async stopRecording(){if(this._tracingManager){this._tracingManager.stop();}
this._client.loadingStarted();await this._waitForTracingToStop(true);this._allSourcesFinished();return this._performanceModel;}
_waitForTracingToStop(awaitTracingCompleteCallback){const tracingStoppedPromises=[];if(this._tracingManager&&awaitTracingCompleteCallback){tracingStoppedPromises.push(new Promise(resolve=>this._tracingCompleteCallback=resolve));}
tracingStoppedPromises.push(this._stopProfilingOnAllModels());const extensionCompletionPromises=this._extensionSessions.map(session=>session.stop());if(extensionCompletionPromises.length){tracingStoppedPromises.push(Promise.race([Promise.all(extensionCompletionPromises),new Promise(r=>setTimeout(r,5000))]));}
return Promise.all(tracingStoppedPromises);}
modelAdded(cpuProfilerModel){if(this._profiling){cpuProfilerModel.startRecording();}}
modelRemoved(cpuProfilerModel){}
_startProfilingOnAllModels(){this._profiling=true;const models=SDK.targetManager.models(SDK.CPUProfilerModel);return Promise.all(models.map(model=>model.startRecording()));}
_addCpuProfile(targetId,cpuProfile){if(!cpuProfile){Common.console.warn(Common.UIString('CPU profile for a target is not available.'));return;}
if(!this._cpuProfiles){this._cpuProfiles=new Map();}
this._cpuProfiles.set(targetId,cpuProfile);}
_stopProfilingOnAllModels(){const models=this._profiling?SDK.targetManager.models(SDK.CPUProfilerModel):[];this._profiling=false;const promises=[];for(const model of models){const targetId=model.target().id();const modelPromise=model.stopRecording().then(this._addCpuProfile.bind(this,targetId));promises.push(modelPromise);}
return Promise.all(promises);}
async _startRecordingWithCategories(categories,enableJSSampling){await SDK.targetManager.suspendAllTargets('performance-timeline');if(enableJSSampling&&Root.Runtime.queryParam('timelineTracingJSProfileDisabled')){await this._startProfilingOnAllModels();}
if(!this._tracingManager){return;}
const samplingFrequencyHz=Common.moduleSetting('highResolutionCpuProfiling').get()?10000:1000;const options='sampling-frequency='+samplingFrequencyHz;return this._tracingManager.start(this,categories,options);}
traceEventsCollected(events){this._tracingModel.addEvents(events);}
tracingComplete(){this._tracingCompleteCallback();this._tracingCompleteCallback=null;}
_allSourcesFinished(){this._client.processingStarted();setTimeout(()=>this._finalizeTrace(),0);}
async _finalizeTrace(){this._injectCpuProfileEvents();await SDK.targetManager.resumeAllTargets();this._tracingModel.tracingComplete();this._client.loadingComplete(this._tracingModel);}
_injectCpuProfileEvent(pid,tid,cpuProfile){if(!cpuProfile){return;}
const cpuProfileEvent=({cat:SDK.TracingModel.DevToolsMetadataEventCategory,ph:SDK.TracingModel.Phase.Instant,ts:this._tracingModel.maximumRecordTime()*1000,pid:pid,tid:tid,name:TimelineModel.TimelineModel.RecordType.CpuProfile,args:{data:{cpuProfile:cpuProfile}}});this._tracingModel.addEvents([cpuProfileEvent]);}
_buildTargetToProcessIdMap(){const metadataEventTypes=TimelineModel.TimelineModel.DevToolsMetadataEvent;const metadataEvents=this._tracingModel.devToolsMetadataEvents();const browserMetaEvent=metadataEvents.find(e=>e.name===metadataEventTypes.TracingStartedInBrowser);if(!browserMetaEvent){return null;}
const pseudoPidToFrames=new Platform.Multimap();const targetIdToPid=new Map();const frames=browserMetaEvent.args.data['frames'];for(const frameInfo of frames){targetIdToPid.set(frameInfo.frame,frameInfo.processId);}
for(const event of metadataEvents){const data=event.args.data;switch(event.name){case metadataEventTypes.FrameCommittedInBrowser:if(data.processId){targetIdToPid.set(data.frame,data.processId);}else{pseudoPidToFrames.set(data.processPseudoId,data.frame);}
break;case metadataEventTypes.ProcessReadyInBrowser:for(const frame of pseudoPidToFrames.get(data.processPseudoId)||[]){targetIdToPid.set(frame,data.processId);}
break;}}
const mainFrame=frames.find(frame=>!frame.parent);const mainRendererProcessId=mainFrame.processId;const mainProcess=this._tracingModel.processById(mainRendererProcessId);if(mainProcess){targetIdToPid.set(SDK.targetManager.mainTarget().id(),mainProcess.id());}
return targetIdToPid;}
_injectCpuProfileEvents(){if(!this._cpuProfiles){return;}
const metadataEventTypes=TimelineModel.TimelineModel.DevToolsMetadataEvent;const metadataEvents=this._tracingModel.devToolsMetadataEvents();const targetIdToPid=this._buildTargetToProcessIdMap();if(targetIdToPid){for(const[id,profile]of this._cpuProfiles){const pid=targetIdToPid.get(id);if(!pid){continue;}
const process=this._tracingModel.processById(pid);const thread=process&&process.threadByName(TimelineModel.TimelineModel.RendererMainThreadName);if(thread){this._injectCpuProfileEvent(pid,thread.id(),profile);}}}else{const mainMetaEvent=metadataEvents.filter(event=>event.name===metadataEventTypes.TracingStartedInPage).peekLast();if(mainMetaEvent){const pid=mainMetaEvent.thread.process().id();const mainCpuProfile=this._cpuProfiles.get(this._tracingManager.target().id());this._injectCpuProfileEvent(pid,mainMetaEvent.thread.id(),mainCpuProfile);}else{let tid=0;for(const pair of this._cpuProfiles){const target=SDK.targetManager.targetById(pair[0]);const name=target&&target.name();this._tracingModel.addEvents(TimelineModel.TimelineJSProfileProcessor.buildTraceProfileFromCpuProfile(pair[1],++tid,tid===1,name));}}}
const workerMetaEvents=metadataEvents.filter(event=>event.name===metadataEventTypes.TracingSessionIdForWorker);for(const metaEvent of workerMetaEvents){const workerId=metaEvent.args['data']['workerId'];const cpuProfile=this._cpuProfiles.get(workerId);this._injectCpuProfileEvent(metaEvent.thread.process().id(),metaEvent.args['data']['workerThreadId'],cpuProfile);}
this._cpuProfiles=null;}
tracingBufferUsage(usage){this._client.recordingProgress(usage);}
eventsRetrievalProgress(progress){this._client.loadingProgress(progress);}};Timeline.TimelineController.Client=function(){};Timeline.TimelineController.Client.prototype={recordingProgress(usage){},};Timeline.TimelineController.RecordingOptions;;Timeline.TimelineDetailsView=class extends UI.VBox{constructor(delegate){super();this.element.classList.add('timeline-details');this._detailsLinkifier=new Components.Linkifier();this._tabbedPane=new UI.TabbedPane();this._tabbedPane.show(this.element);const tabIds=Timeline.TimelineDetailsView.Tab;this._defaultDetailsWidget=new UI.VBox();this._defaultDetailsWidget.element.classList.add('timeline-details-view');this._defaultDetailsContentElement=this._defaultDetailsWidget.element.createChild('div','timeline-details-view-body vbox');this._defaultDetailsContentElement.tabIndex=0;this._appendTab(tabIds.Details,Common.UIString('Summary'),this._defaultDetailsWidget);this.setPreferredTab(tabIds.Details);this._rangeDetailViews=new Map();const bottomUpView=new Timeline.BottomUpTimelineTreeView();this._appendTab(tabIds.BottomUp,Common.UIString('Bottom-Up'),bottomUpView);this._rangeDetailViews.set(tabIds.BottomUp,bottomUpView);const callTreeView=new Timeline.CallTreeTimelineTreeView();this._appendTab(tabIds.CallTree,Common.UIString('Call Tree'),callTreeView);this._rangeDetailViews.set(tabIds.CallTree,callTreeView);const eventsView=new Timeline.EventsTimelineTreeView(delegate);this._appendTab(tabIds.EventLog,Common.UIString('Event Log'),eventsView);this._rangeDetailViews.set(tabIds.EventLog,eventsView);this._tabbedPane.addEventListener(UI.TabbedPane.Events.TabSelected,this._tabSelected,this);}
setModel(model,track){if(this._model!==model){if(this._model){this._model.removeEventListener(Timeline.PerformanceModel.Events.WindowChanged,this._onWindowChanged,this);}
this._model=model;if(this._model){this._model.addEventListener(Timeline.PerformanceModel.Events.WindowChanged,this._onWindowChanged,this);}}
this._track=track;this._tabbedPane.closeTabs([Timeline.TimelineDetailsView.Tab.PaintProfiler,Timeline.TimelineDetailsView.Tab.LayerViewer],false);for(const view of this._rangeDetailViews.values()){view.setModel(model,track);}
this._lazyPaintProfilerView=null;this._lazyLayersView=null;this.setSelection(null);}
_setContent(node){const allTabs=this._tabbedPane.otherTabs(Timeline.TimelineDetailsView.Tab.Details);for(let i=0;i<allTabs.length;++i){if(!this._rangeDetailViews.has(allTabs[i])){this._tabbedPane.closeTab(allTabs[i]);}}
this._defaultDetailsContentElement.removeChildren();this._defaultDetailsContentElement.appendChild(node);}
_updateContents(){const view=this._rangeDetailViews.get(this._tabbedPane.selectedTabId||'');if(view){const window=this._model.window();view.updateContents(this._selection||Timeline.TimelineSelection.fromRange(window.left,window.right));}}
_appendTab(id,tabTitle,view,isCloseable){this._tabbedPane.appendTab(id,tabTitle,view,undefined,undefined,isCloseable);if(this._preferredTabId!==this._tabbedPane.selectedTabId){this._tabbedPane.selectTab(id);}}
headerElement(){return this._tabbedPane.headerElement();}
setPreferredTab(tabId){this._preferredTabId=tabId;}
_onWindowChanged(event){if(!this._selection){this._updateContentsFromWindow();}}
_updateContentsFromWindow(){if(!this._model){this._setContent(UI.html`<div/>`);return;}
const window=this._model.window();this._updateSelectedRangeStats(window.left,window.right);this._updateContents();}
setSelection(selection){this._detailsLinkifier.reset();this._selection=selection;if(!this._selection){this._updateContentsFromWindow();return;}
switch(this._selection.type()){case Timeline.TimelineSelection.Type.TraceEvent:const event=(this._selection.object());Timeline.TimelineUIUtils.buildTraceEventDetails(event,this._model.timelineModel(),this._detailsLinkifier,true).then(fragment=>this._appendDetailsTabsForTraceEventAndShowDetails(event,fragment));break;case Timeline.TimelineSelection.Type.Frame:const frame=(this._selection.object());const filmStripFrame=this._model.filmStripModelFrame(frame);this._setContent(Timeline.TimelineUIUtils.generateDetailsContentForFrame(frame,filmStripFrame));if(frame.layerTree){const layersView=this._layersView();layersView.showLayerTree(frame.layerTree);if(!this._tabbedPane.hasTab(Timeline.TimelineDetailsView.Tab.LayerViewer)){this._appendTab(Timeline.TimelineDetailsView.Tab.LayerViewer,Common.UIString('Layers'),layersView);}}
break;case Timeline.TimelineSelection.Type.NetworkRequest:const request=(this._selection.object());Timeline.TimelineUIUtils.buildNetworkRequestDetails(request,this._model.timelineModel(),this._detailsLinkifier).then(this._setContent.bind(this));break;case Timeline.TimelineSelection.Type.Range:this._updateSelectedRangeStats(this._selection.startTime(),this._selection.endTime());break;}
this._updateContents();}
_tabSelected(event){if(!event.data.isUserGesture){return;}
this.setPreferredTab(event.data.tabId);this._updateContents();}
_layersView(){if(this._lazyLayersView){return this._lazyLayersView;}
this._lazyLayersView=new Timeline.TimelineLayersView(this._model.timelineModel(),this._showSnapshotInPaintProfiler.bind(this));return this._lazyLayersView;}
_paintProfilerView(){if(this._lazyPaintProfilerView){return this._lazyPaintProfilerView;}
this._lazyPaintProfilerView=new Timeline.TimelinePaintProfilerView(this._model.frameModel());return this._lazyPaintProfilerView;}
_showSnapshotInPaintProfiler(snapshot){const paintProfilerView=this._paintProfilerView();paintProfilerView.setSnapshot(snapshot);if(!this._tabbedPane.hasTab(Timeline.TimelineDetailsView.Tab.PaintProfiler)){this._appendTab(Timeline.TimelineDetailsView.Tab.PaintProfiler,Common.UIString('Paint Profiler'),paintProfilerView,true);}
this._tabbedPane.selectTab(Timeline.TimelineDetailsView.Tab.PaintProfiler,true);}
_appendDetailsTabsForTraceEventAndShowDetails(event,content){this._setContent(content);if(event.name===TimelineModel.TimelineModel.RecordType.Paint||event.name===TimelineModel.TimelineModel.RecordType.RasterTask){this._showEventInPaintProfiler(event);}}
_showEventInPaintProfiler(event){const paintProfilerModel=SDK.targetManager.models(SDK.PaintProfilerModel)[0];if(!paintProfilerModel){return;}
const paintProfilerView=this._paintProfilerView();const hasProfileData=paintProfilerView.setEvent(paintProfilerModel,event);if(!hasProfileData){return;}
if(this._tabbedPane.hasTab(Timeline.TimelineDetailsView.Tab.PaintProfiler)){return;}
this._appendTab(Timeline.TimelineDetailsView.Tab.PaintProfiler,Common.UIString('Paint Profiler'),paintProfilerView);}
_updateSelectedRangeStats(startTime,endTime){if(!this._model||!this._track){return;}
const aggregatedStats=Timeline.TimelineUIUtils.statsForTimeRange(this._track.syncEvents(),startTime,endTime);const startOffset=startTime-this._model.timelineModel().minimumRecordTime();const endOffset=endTime-this._model.timelineModel().minimumRecordTime();const contentHelper=new Timeline.TimelineDetailsContentHelper(null,null);contentHelper.addSection(ls`Range:  ${Number.millisToString(startOffset)} \u2013 ${Number.millisToString(endOffset)}`);const pieChart=Timeline.TimelineUIUtils.generatePieChart(aggregatedStats);contentHelper.appendElementRow('',pieChart);this._setContent(contentHelper.fragment);}};Timeline.TimelineDetailsView.Tab={Details:'Details',EventLog:'EventLog',CallTree:'CallTree',BottomUp:'BottomUp',PaintProfiler:'PaintProfiler',LayerViewer:'LayerViewer'};;Timeline.TimelineLoader=class{constructor(client){this._client=client;this._backingStorage=new Bindings.TempFileBackingStorage();this._tracingModel=new SDK.TracingModel(this._backingStorage);this._canceledCallback=null;this._state=Timeline.TimelineLoader.State.Initial;this._buffer='';this._firstRawChunk=true;this._firstChunk=true;this._loadedBytes=0;this._totalSize;this._jsonTokenizer=new TextUtils.BalancedJSONTokenizer(this._writeBalancedJSON.bind(this),true);}
static loadFromFile(file,client){const loader=new Timeline.TimelineLoader(client);const fileReader=new Bindings.ChunkedFileReader(file,Timeline.TimelineLoader.TransferChunkLengthBytes);loader._canceledCallback=fileReader.cancel.bind(fileReader);loader._totalSize=file.size;fileReader.read(loader).then(success=>{if(!success){loader._reportErrorAndCancelLoading(fileReader.error().message);}});return loader;}
static loadFromEvents(events,client){const loader=new Timeline.TimelineLoader(client);setTimeout(async()=>{const eventsPerChunk=5000;client.loadingStarted();for(let i=0;i<events.length;i+=eventsPerChunk){const chunk=events.slice(i,i+eventsPerChunk);loader._tracingModel.addEvents(chunk);client.loadingProgress((i+chunk.length)/events.length);await new Promise(r=>setTimeout(r));}
loader.close();});return loader;}
static loadFromURL(url,client){const loader=new Timeline.TimelineLoader(client);Host.ResourceLoader.loadAsStream(url,null,loader);return loader;}
cancel(){this._tracingModel=null;this._backingStorage.reset();this._client.loadingComplete(null);this._client=null;if(this._canceledCallback){this._canceledCallback();}}
write(chunk){if(!this._client){return Promise.resolve();}
this._loadedBytes+=chunk.length;if(this._firstRawChunk){this._client.loadingStarted();}else{this._client.loadingProgress(this._totalSize?this._loadedBytes/this._totalSize:undefined);}
this._firstRawChunk=false;if(this._state===Timeline.TimelineLoader.State.Initial){if(chunk.startsWith('{"nodes":[')){this._state=Timeline.TimelineLoader.State.LoadingCPUProfileFormat;}else if(chunk[0]==='{'){this._state=Timeline.TimelineLoader.State.LookingForEvents;}else if(chunk[0]==='['){this._state=Timeline.TimelineLoader.State.ReadingEvents;}else{this._reportErrorAndCancelLoading(Common.UIString('Malformed timeline data: Unknown JSON format'));return Promise.resolve();}}
if(this._state===Timeline.TimelineLoader.State.LoadingCPUProfileFormat){this._buffer+=chunk;return Promise.resolve();}
if(this._state===Timeline.TimelineLoader.State.LookingForEvents){const objectName='"traceEvents":';const startPos=this._buffer.length-objectName.length;this._buffer+=chunk;const pos=this._buffer.indexOf(objectName,startPos);if(pos===-1){return Promise.resolve();}
chunk=this._buffer.slice(pos+objectName.length);this._state=Timeline.TimelineLoader.State.ReadingEvents;}
if(this._state!==Timeline.TimelineLoader.State.ReadingEvents){return Promise.resolve();}
if(this._jsonTokenizer.write(chunk)){return Promise.resolve();}
this._state=Timeline.TimelineLoader.State.SkippingTail;if(this._firstChunk){this._reportErrorAndCancelLoading(Common.UIString('Malformed timeline input, wrong JSON brackets balance'));}
return Promise.resolve();}
_writeBalancedJSON(data){let json=data+']';if(!this._firstChunk){const commaIndex=json.indexOf(',');if(commaIndex!==-1){json=json.slice(commaIndex+1);}
json='['+json;}
let items;try{items=(JSON.parse(json));}catch(e){this._reportErrorAndCancelLoading(Common.UIString('Malformed timeline data: %s',e.toString()));return;}
if(this._firstChunk){this._firstChunk=false;if(this._looksLikeAppVersion(items[0])){this._reportErrorAndCancelLoading(Common.UIString('Legacy Timeline format is not supported.'));return;}}
try{this._tracingModel.addEvents(items);}catch(e){this._reportErrorAndCancelLoading(Common.UIString('Malformed timeline data: %s',e.toString()));}}
_reportErrorAndCancelLoading(message){if(message){Common.console.error(message);}
this.cancel();}
_looksLikeAppVersion(item){return typeof item==='string'&&item.indexOf('Chrome')!==-1;}
async close(){if(!this._client){return;}
this._client.processingStarted();setTimeout(()=>this._finalizeTrace(),0);}
_finalizeTrace(){if(this._state===Timeline.TimelineLoader.State.LoadingCPUProfileFormat){this._parseCPUProfileFormat(this._buffer);this._buffer='';}
this._tracingModel.tracingComplete();this._client.loadingComplete(this._tracingModel);}
_parseCPUProfileFormat(text){let traceEvents;try{const profile=JSON.parse(text);traceEvents=TimelineModel.TimelineJSProfileProcessor.buildTraceProfileFromCpuProfile(profile,1,true);}catch(e){this._reportErrorAndCancelLoading(Common.UIString('Malformed CPU profile format'));return;}
this._tracingModel.addEvents(traceEvents);}};Timeline.TimelineLoader.TransferChunkLengthBytes=5000000;Timeline.TimelineLoader.Client=function(){};Timeline.TimelineLoader.Client.prototype={loadingStarted(){},loadingProgress(progress){},processingStarted(){},loadingComplete(tracingModel){},};Timeline.TimelineLoader.State={Initial:Symbol('Initial'),LookingForEvents:Symbol('LookingForEvents'),ReadingEvents:Symbol('ReadingEvents'),SkippingTail:Symbol('SkippingTail'),LoadingCPUProfileFormat:Symbol('LoadingCPUProfileFormat')};;Timeline.TimelineEventOverview=class extends PerfUI.TimelineOverviewBase{constructor(id,title){super();this.element.id='timeline-overview-'+id;this.element.classList.add('overview-strip');this._model=null;if(title){this.element.createChild('div','timeline-overview-strip-title').textContent=title;}}
setModel(model){this._model=model;}
_renderBar(begin,end,position,height,color){const x=begin;const width=end-begin;const ctx=this.context();ctx.fillStyle=color;ctx.fillRect(x,position,width,height);}};Timeline.TimelineEventOverviewInput=class extends Timeline.TimelineEventOverview{constructor(){super('input',null);}
update(){super.update();if(!this._model){return;}
const height=this.height();const descriptors=Timeline.TimelineUIUtils.eventDispatchDesciptors();const descriptorsByType=new Map();let maxPriority=-1;for(const descriptor of descriptors){for(const type of descriptor.eventTypes){descriptorsByType.set(type,descriptor);}
maxPriority=Math.max(maxPriority,descriptor.priority);}
const minWidth=2*window.devicePixelRatio;const timeOffset=this._model.timelineModel().minimumRecordTime();const timeSpan=this._model.timelineModel().maximumRecordTime()-timeOffset;const canvasWidth=this.width();const scale=canvasWidth/timeSpan;for(let priority=0;priority<=maxPriority;++priority){for(const track of this._model.timelineModel().tracks()){for(let i=0;i<track.events.length;++i){const event=track.events[i];if(event.name!==TimelineModel.TimelineModel.RecordType.EventDispatch){continue;}
const descriptor=descriptorsByType.get(event.args['data']['type']);if(!descriptor||descriptor.priority!==priority){continue;}
const start=Number.constrain(Math.floor((event.startTime-timeOffset)*scale),0,canvasWidth);const end=Number.constrain(Math.ceil((event.endTime-timeOffset)*scale),0,canvasWidth);const width=Math.max(end-start,minWidth);this._renderBar(start,start+width,0,height,descriptor.color);}}}}};Timeline.TimelineEventOverviewNetwork=class extends Timeline.TimelineEventOverview{constructor(){super('network',Common.UIString('NET'));}
update(){super.update();if(!this._model){return;}
const timelineModel=this._model.timelineModel();const bandHeight=this.height()/2;const timeOffset=timelineModel.minimumRecordTime();const timeSpan=timelineModel.maximumRecordTime()-timeOffset;const canvasWidth=this.width();const scale=canvasWidth/timeSpan;const highPath=new Path2D();const lowPath=new Path2D();const priorities=Protocol.Network.ResourcePriority;const highPrioritySet=new Set([priorities.VeryHigh,priorities.High,priorities.Medium]);for(const request of timelineModel.networkRequests()){const path=highPrioritySet.has(request.priority)?highPath:lowPath;const s=Math.max(Math.floor((request.startTime-timeOffset)*scale),0);const e=Math.min(Math.ceil((request.endTime-timeOffset)*scale+1),canvasWidth);path.rect(s,0,e-s,bandHeight-1);}
const ctx=this.context();ctx.save();ctx.fillStyle='hsl(214, 60%, 60%)';ctx.fill((highPath));ctx.translate(0,bandHeight);ctx.fillStyle='hsl(214, 80%, 80%)';ctx.fill((lowPath));ctx.restore();}};Timeline.TimelineEventOverviewCPUActivity=class extends Timeline.TimelineEventOverview{constructor(){super('cpu-activity',Common.UIString('CPU'));this._backgroundCanvas=this.element.createChild('canvas','fill background');}
resetCanvas(){super.resetCanvas();this._backgroundCanvas.width=this.element.clientWidth*window.devicePixelRatio;this._backgroundCanvas.height=this.element.clientHeight*window.devicePixelRatio;}
update(){super.update();if(!this._model){return;}
const timelineModel=this._model.timelineModel();const quantSizePx=4*window.devicePixelRatio;const width=this.width();const height=this.height();const baseLine=height;const timeOffset=timelineModel.minimumRecordTime();const timeSpan=timelineModel.maximumRecordTime()-timeOffset;const scale=width/timeSpan;const quantTime=quantSizePx/scale;const categories=Timeline.TimelineUIUtils.categories();const categoryOrder=Timeline.TimelineUIUtils.getTimelineMainEventCategories();const otherIndex=categoryOrder.indexOf('other');const idleIndex=0;console.assert(idleIndex===categoryOrder.indexOf('idle'));for(let i=idleIndex+1;i<categoryOrder.length;++i){categories[categoryOrder[i]]._overviewIndex=i;}
const backgroundContext=this._backgroundCanvas.getContext('2d');for(const track of timelineModel.tracks()){if(track.type===TimelineModel.TimelineModel.TrackType.MainThread&&track.forMainFrame){drawThreadEvents(this.context(),track.events);}else{drawThreadEvents(backgroundContext,track.events);}}
applyPattern(backgroundContext);function drawThreadEvents(ctx,events){const quantizer=new Timeline.Quantizer(timeOffset,quantTime,drawSample);let x=0;const categoryIndexStack=[];const paths=[];const lastY=[];for(let i=0;i<categoryOrder.length;++i){paths[i]=new Path2D();paths[i].moveTo(0,height);lastY[i]=height;}
function drawSample(counters){let y=baseLine;for(let i=idleIndex+1;i<categoryOrder.length;++i){const h=(counters[i]||0)/quantTime*height;y-=h;paths[i].bezierCurveTo(x,lastY[i],x,y,x+quantSizePx/2,y);lastY[i]=y;}
x+=quantSizePx;}
function onEventStart(e){const index=categoryIndexStack.length?categoryIndexStack.peekLast():idleIndex;quantizer.appendInterval(e.startTime,index);categoryIndexStack.push(Timeline.TimelineUIUtils.eventStyle(e).category._overviewIndex||otherIndex);}
function onEventEnd(e){quantizer.appendInterval(e.endTime,categoryIndexStack.pop());}
TimelineModel.TimelineModel.forEachEvent(events,onEventStart,onEventEnd);quantizer.appendInterval(timeOffset+timeSpan+quantTime,idleIndex);for(let i=categoryOrder.length-1;i>0;--i){paths[i].lineTo(width,height);ctx.fillStyle=categories[categoryOrder[i]].color;ctx.fill(paths[i]);}}
function applyPattern(ctx){const step=4*window.devicePixelRatio;ctx.save();ctx.lineWidth=step/Math.sqrt(8);for(let x=0.5;x<width+height;x+=step){ctx.moveTo(x,0);ctx.lineTo(x-height,height);}
ctx.globalCompositeOperation='destination-out';ctx.stroke();ctx.restore();}}};Timeline.TimelineEventOverviewResponsiveness=class extends Timeline.TimelineEventOverview{constructor(){super('responsiveness',null);}
update(){super.update();if(!this._model){return;}
const height=this.height();const timeOffset=this._model.timelineModel().minimumRecordTime();const timeSpan=this._model.timelineModel().maximumRecordTime()-timeOffset;const scale=this.width()/timeSpan;const frames=this._model.frames();const ctx=(this.context());const fillPath=new Path2D();const markersPath=new Path2D();for(let i=0;i<frames.length;++i){const frame=frames[i];if(!frame.hasWarnings()){continue;}
paintWarningDecoration(frame.startTime,frame.duration);}
for(const track of this._model.timelineModel().tracks()){const events=track.events;for(let i=0;i<events.length;++i){if(!TimelineModel.TimelineData.forEvent(events[i]).warning){continue;}
paintWarningDecoration(events[i].startTime,events[i].duration);}}
ctx.fillStyle='hsl(0, 80%, 90%)';ctx.strokeStyle='red';ctx.lineWidth=2*window.devicePixelRatio;ctx.fill(fillPath);ctx.stroke(markersPath);function paintWarningDecoration(time,duration){const x=Math.round(scale*(time-timeOffset));const w=Math.round(scale*duration);fillPath.rect(x,0,w,height);markersPath.moveTo(x+w,0);markersPath.lineTo(x+w,height);}}};Timeline.TimelineFilmStripOverview=class extends Timeline.TimelineEventOverview{constructor(){super('filmstrip',null);this.reset();}
update(){super.update();const frames=this._model?this._model.filmStripModel().frames():[];if(!frames.length){return;}
const drawGeneration=Symbol('drawGeneration');this._drawGeneration=drawGeneration;this._imageByFrame(frames[0]).then(image=>{if(this._drawGeneration!==drawGeneration){return;}
if(!image||!image.naturalWidth||!image.naturalHeight){return;}
const imageHeight=this.height()-2*Timeline.TimelineFilmStripOverview.Padding;const imageWidth=Math.ceil(imageHeight*image.naturalWidth/image.naturalHeight);const popoverScale=Math.min(200/image.naturalWidth,1);this._emptyImage=new Image(image.naturalWidth*popoverScale,image.naturalHeight*popoverScale);this._drawFrames(imageWidth,imageHeight);});}
_imageByFrame(frame){let imagePromise=this._frameToImagePromise.get(frame);if(!imagePromise){imagePromise=frame.imageDataPromise().then(data=>UI.loadImageFromData(data));this._frameToImagePromise.set(frame,imagePromise);}
return imagePromise;}
_drawFrames(imageWidth,imageHeight){if(!imageWidth||!this._model){return;}
const filmStripModel=this._model.filmStripModel();if(!filmStripModel.frames().length){return;}
const padding=Timeline.TimelineFilmStripOverview.Padding;const width=this.width();const zeroTime=filmStripModel.zeroTime();const spanTime=filmStripModel.spanTime();const scale=spanTime/width;const context=this.context();const drawGeneration=this._drawGeneration;context.beginPath();for(let x=padding;x<width;x+=imageWidth+2*padding){const time=zeroTime+(x+imageWidth/2)*scale;const frame=filmStripModel.frameByTimestamp(time);if(!frame){continue;}
context.rect(x-0.5,0.5,imageWidth+1,imageHeight+1);this._imageByFrame(frame).then(drawFrameImage.bind(this,x));}
context.strokeStyle='#ddd';context.stroke();function drawFrameImage(x,image){if(this._drawGeneration!==drawGeneration||!image){return;}
context.drawImage(image,x,1,imageWidth,imageHeight);}}
overviewInfoPromise(x){if(!this._model||!this._model.filmStripModel().frames().length){return Promise.resolve((null));}
const time=this.calculator().positionToTime(x);const frame=this._model.filmStripModel().frameByTimestamp(time);if(frame===this._lastFrame){return Promise.resolve(this._lastElement);}
const imagePromise=frame?this._imageByFrame(frame):Promise.resolve(this._emptyImage);return imagePromise.then(createFrameElement.bind(this));function createFrameElement(image){const element=createElementWithClass('div','frame');if(image){element.createChild('div','thumbnail').appendChild(image);}
this._lastFrame=frame;this._lastElement=element;return element;}}
reset(){this._lastFrame=undefined;this._lastElement=null;this._frameToImagePromise=new Map();this._imageWidth=0;}};Timeline.TimelineFilmStripOverview.Padding=2;Timeline.TimelineEventOverviewFrames=class extends Timeline.TimelineEventOverview{constructor(){super('framerate',Common.UIString('FPS'));}
update(){super.update();if(!this._model){return;}
const frames=this._model.frames();if(!frames.length){return;}
const height=this.height();const padding=1*window.devicePixelRatio;const baseFrameDurationMs=1e3/60;const visualHeight=height-2*padding;const timeOffset=this._model.timelineModel().minimumRecordTime();const timeSpan=this._model.timelineModel().maximumRecordTime()-timeOffset;const scale=this.width()/timeSpan;const baseY=height-padding;const ctx=this.context();const bottomY=baseY+10*window.devicePixelRatio;let x=0;let y=bottomY;const lineWidth=window.devicePixelRatio;const offset=lineWidth&1?0.5:0;const tickDepth=1.5*window.devicePixelRatio;ctx.beginPath();ctx.moveTo(0,y);for(let i=0;i<frames.length;++i){const frame=frames[i];x=Math.round((frame.startTime-timeOffset)*scale)+offset;ctx.lineTo(x,y);ctx.lineTo(x,y+tickDepth);y=frame.idle?bottomY:Math.round(baseY-visualHeight*Math.min(baseFrameDurationMs/frame.duration,1))-offset;ctx.lineTo(x,y+tickDepth);ctx.lineTo(x,y);}
const lastFrame=frames.peekLast();x=Math.round((lastFrame.startTime+lastFrame.duration-timeOffset)*scale)+offset;ctx.lineTo(x,y);ctx.lineTo(x,bottomY);ctx.fillStyle='hsl(110, 50%, 88%)';ctx.strokeStyle='hsl(110, 50%, 60%)';ctx.lineWidth=lineWidth;ctx.fill();ctx.stroke();}};Timeline.TimelineEventOverviewMemory=class extends Timeline.TimelineEventOverview{constructor(){super('memory',Common.UIString('HEAP'));this._heapSizeLabel=this.element.createChild('div','memory-graph-label');}
resetHeapSizeLabels(){this._heapSizeLabel.textContent='';}
update(){super.update();const ratio=window.devicePixelRatio;if(!this._model){this.resetHeapSizeLabels();return;}
const tracks=this._model.timelineModel().tracks().filter(track=>track.type===TimelineModel.TimelineModel.TrackType.MainThread&&track.forMainFrame);const trackEvents=tracks.map(track=>track.events);const lowerOffset=3*ratio;let maxUsedHeapSize=0;let minUsedHeapSize=100000000000;const minTime=this._model.timelineModel().minimumRecordTime();const maxTime=this._model.timelineModel().maximumRecordTime();function isUpdateCountersEvent(event){return event.name===TimelineModel.TimelineModel.RecordType.UpdateCounters;}
for(let i=0;i<trackEvents.length;i++){trackEvents[i]=trackEvents[i].filter(isUpdateCountersEvent);}
function calculateMinMaxSizes(event){const counters=event.args.data;if(!counters||!counters.jsHeapSizeUsed){return;}
maxUsedHeapSize=Math.max(maxUsedHeapSize,counters.jsHeapSizeUsed);minUsedHeapSize=Math.min(minUsedHeapSize,counters.jsHeapSizeUsed);}
for(let i=0;i<trackEvents.length;i++){trackEvents[i].forEach(calculateMinMaxSizes);}
minUsedHeapSize=Math.min(minUsedHeapSize,maxUsedHeapSize);const lineWidth=1;const width=this.width();const height=this.height()-lowerOffset;const xFactor=width/(maxTime-minTime);const yFactor=(height-lineWidth)/Math.max(maxUsedHeapSize-minUsedHeapSize,1);const histogram=new Array(width);function buildHistogram(event){const counters=event.args.data;if(!counters||!counters.jsHeapSizeUsed){return;}
const x=Math.round((event.startTime-minTime)*xFactor);const y=Math.round((counters.jsHeapSizeUsed-minUsedHeapSize)*yFactor);histogram[x]=Math.max(histogram[x]||0,y);}
for(let i=0;i<trackEvents.length;i++){trackEvents[i].forEach(buildHistogram);}
const ctx=this.context();const heightBeyondView=height+lowerOffset+lineWidth;ctx.translate(0.5,0.5);ctx.beginPath();ctx.moveTo(-lineWidth,heightBeyondView);let y=0;let isFirstPoint=true;let lastX=0;for(let x=0;x<histogram.length;x++){if(typeof histogram[x]==='undefined'){continue;}
if(isFirstPoint){isFirstPoint=false;y=histogram[x];ctx.lineTo(-lineWidth,height-y);}
const nextY=histogram[x];if(Math.abs(nextY-y)>2&&Math.abs(x-lastX)>1){ctx.lineTo(x,height-y);}
y=nextY;ctx.lineTo(x,height-y);lastX=x;}
ctx.lineTo(width+lineWidth,height-y);ctx.lineTo(width+lineWidth,heightBeyondView);ctx.closePath();ctx.fillStyle='hsla(220, 90%, 70%, 0.2)';ctx.fill();ctx.lineWidth=lineWidth;ctx.strokeStyle='hsl(220, 90%, 70%)';ctx.stroke();this._heapSizeLabel.textContent=Common.UIString('%s \u2013 %s',Number.bytesToString(minUsedHeapSize),Number.bytesToString(maxUsedHeapSize));}};Timeline.Quantizer=class{constructor(startTime,quantDuration,callback){this._lastTime=startTime;this._quantDuration=quantDuration;this._callback=callback;this._counters=[];this._remainder=quantDuration;}
appendInterval(time,group){let interval=time-this._lastTime;if(interval<=this._remainder){this._counters[group]=(this._counters[group]||0)+interval;this._remainder-=interval;this._lastTime=time;return;}
this._counters[group]=(this._counters[group]||0)+this._remainder;this._callback(this._counters);interval-=this._remainder;while(interval>=this._quantDuration){const counters=[];counters[group]=this._quantDuration;this._callback(counters);interval-=this._quantDuration;}
this._counters=[];this._counters[group]=interval;this._lastTime=time;this._remainder=this._quantDuration-interval;}};Timeline.TimelineEventOverviewCoverage=class extends Timeline.TimelineEventOverview{constructor(){super('coverage',Common.UIString('COVERAGE'));this._heapSizeLabel=this.element.createChild('div','timeline-overview-coverage-label');}
resetHeapSizeLabels(){this._heapSizeLabel.textContent='';}
setModel(model){super.setModel(model);if(this._model){this._coverageModel=model.mainTarget().model(Coverage.CoverageModel);}}
update(){super.update();const ratio=window.devicePixelRatio;if(!this._coverageModel){return;}
let total=0;let total_used=0;const usedByTimestamp=new Map();const totalByTimestamp=new Map();for(const urlInfo of this._coverageModel.entries()){for(const info of urlInfo.entries()){total+=info.size();for(const[stamp,used]of info.usedByTimestamp()){total_used+=used;if(!totalByTimestamp.has(stamp)){totalByTimestamp.set(stamp,new Set());}
totalByTimestamp.get(stamp).add(info);if(!usedByTimestamp.has(stamp)){usedByTimestamp.set(stamp,used);}else{usedByTimestamp.set(stamp,usedByTimestamp.get(stamp)+used);}}}}
const seen=new Set();const coverageByTimestamp=new Map();let sumTotal=0,sumUsed=0;const sortedByTimestamp=Array.from(totalByTimestamp.entries()).sort((a,b)=>a[0]-b[0]);for(const[stamp,infos]of sortedByTimestamp){for(const info of infos.values()){if(seen.has(info)){continue;}
seen.add(info);sumTotal+=info.size();}
sumUsed+=usedByTimestamp.get(stamp);coverageByTimestamp.set(stamp,sumUsed/sumTotal);}
const percentUsed=total?Math.round(100*total_used/total):0;const lowerOffset=3*ratio;const minTime=this._model.recordStartTime();const maxTime=minTime+(this._model.timelineModel().maximumRecordTime()-this._model.timelineModel().minimumRecordTime());const lineWidth=1;const width=this.width();const height=this.height()-lowerOffset;const xFactor=width/(maxTime-minTime);const yFactor=height-lineWidth;let yOffset=0;const ctx=this.context();const heightBeyondView=height+lowerOffset+lineWidth;ctx.translate(0.5,0.5);ctx.beginPath();ctx.moveTo(-lineWidth,heightBeyondView);ctx.lineTo(-lineWidth,height-yOffset);for(const[stamp,coverage]of coverageByTimestamp){if(stamp>maxTime){break;}
const x=(stamp-minTime)*xFactor;yOffset=coverage*yFactor;ctx.lineTo(x,height-yOffset);}
ctx.lineTo(width+lineWidth,height-yOffset);ctx.lineTo(width+lineWidth,heightBeyondView);ctx.closePath();ctx.fillStyle='hsla(220, 90%, 70%, 0.2)';ctx.fill();ctx.lineWidth=lineWidth;ctx.strokeStyle='hsl(220, 90%, 70%)';ctx.stroke();for(const[stamp,coverage]of coverageByTimestamp){if(stamp>maxTime){break;}
ctx.beginPath();const x=(stamp-minTime)*xFactor;const y=height-coverage*yFactor;ctx.arc(x,y,2*lineWidth,0,2*Math.PI,false);ctx.closePath();ctx.stroke();ctx.fill();}
this._heapSizeLabel.textContent=`${percentUsed}% used`;}};;Timeline.TimelineFilters={};Timeline.TimelineFilters.IsLong=class extends TimelineModel.TimelineModelFilter{constructor(){super();this._minimumRecordDuration=0;}
setMinimumRecordDuration(value){this._minimumRecordDuration=value;}
accept(event){const duration=event.endTime?event.endTime-event.startTime:0;return duration>=this._minimumRecordDuration;}};Timeline.TimelineFilters.Category=class extends TimelineModel.TimelineModelFilter{constructor(){super();}
accept(event){return!Timeline.TimelineUIUtils.eventStyle(event).category.hidden;}};Timeline.TimelineFilters.RegExp=class extends TimelineModel.TimelineModelFilter{constructor(regExp){super();this._regExp;this.setRegExp(regExp||null);}
setRegExp(regExp){this._regExp=regExp;}
regExp(){return this._regExp;}
accept(event){return!this._regExp||Timeline.TimelineUIUtils.testContentMatching(event,this._regExp);}};;Timeline.TimelineFlameChartDataProvider=class extends Common.Object{constructor(){super();this.reset();this._font='11px '+Host.fontFamily();this._timelineData=null;this._currentLevel=0;this._performanceModel=null;this._model=null;this._minimumBoundary=0;this._maximumBoundary=0;this._timeSpan=0;this._consoleColorGenerator=new Common.Color.Generator({min:30,max:55},{min:70,max:100,count:6},50,0.7);this._extensionColorGenerator=new Common.Color.Generator({min:210,max:300},{min:70,max:100,count:6},70,0.7);this._headerLevel1=this._buildGroupStyle({shareHeaderLine:false});this._headerLevel2=this._buildGroupStyle({padding:2,nestingLevel:1,collapsible:false});this._staticHeader=this._buildGroupStyle({collapsible:false});this._framesHeader=this._buildGroupStyle({useFirstLineForOverview:true});this._timingsHeader=this._buildGroupStyle({shareHeaderLine:true,useFirstLineForOverview:true});this._screenshotsHeader=this._buildGroupStyle({useFirstLineForOverview:true,nestingLevel:1,collapsible:false,itemsHeight:150});this._interactionsHeaderLevel1=this._buildGroupStyle({useFirstLineForOverview:true});this._interactionsHeaderLevel2=this._buildGroupStyle({padding:2,nestingLevel:1});this._flowEventIndexById=new Map();}
_buildGroupStyle(extra){const defaultGroupStyle={padding:4,height:17,collapsible:true,color:UI.themeSupport.patchColorText('#222',UI.ThemeSupport.ColorUsage.Foreground),backgroundColor:UI.themeSupport.patchColorText('white',UI.ThemeSupport.ColorUsage.Background),font:this._font,nestingLevel:0,shareHeaderLine:true};return(Object.assign(defaultGroupStyle,extra));}
setModel(performanceModel){this.reset();this._performanceModel=performanceModel;this._model=performanceModel&&performanceModel.timelineModel();}
groupTrack(group){return group._track||null;}
entryTitle(entryIndex){const entryTypes=Timeline.TimelineFlameChartDataProvider.EntryType;const entryType=this._entryType(entryIndex);if(entryType===entryTypes.Event){const event=(this._entryData[entryIndex]);if(event.phase===SDK.TracingModel.Phase.AsyncStepInto||event.phase===SDK.TracingModel.Phase.AsyncStepPast){return event.name+':'+event.args['step'];}
if(event._blackboxRoot){return Common.UIString('Blackboxed');}
if(this._performanceModel.timelineModel().isMarkerEvent(event)){return Timeline.TimelineUIUtils.markerShortTitle(event);}
return Timeline.TimelineUIUtils.eventTitle(event);}
if(entryType===entryTypes.ExtensionEvent){const event=(this._entryData[entryIndex]);return event.name;}
if(entryType===entryTypes.Screenshot){return'';}
let title=this._entryIndexToTitle[entryIndex];if(!title){title=Common.UIString('Unexpected entryIndex %d',entryIndex);console.error(title);}
return title;}
textColor(index){const event=this._entryData[index];return event&&event._blackboxRoot?'#888':Timeline.FlameChartStyle.textColor;}
entryFont(index){return this._font;}
reset(){this._currentLevel=0;this._timelineData=null;this._entryData=[];this._entryParent=[];this._entryTypeByLevel=[];this._entryIndexToTitle=[];this._markers=[];this._asyncColorByCategory=new Map();this._asyncColorByInteractionPhase=new Map();this._extensionInfo=[];this._screenshotImageCache=new Map();}
maxStackDepth(){return this._currentLevel;}
timelineData(){if(this._timelineData){return this._timelineData;}
this._timelineData=new PerfUI.FlameChart.TimelineData([],[],[],[]);if(!this._model){return this._timelineData;}
this._flowEventIndexById.clear();this._minimumBoundary=this._model.minimumRecordTime();this._timeSpan=this._model.isEmpty()?1000:this._model.maximumRecordTime()-this._minimumBoundary;this._currentLevel=0;if(this._model.isGenericTrace()){this._processGenericTrace();}else{this._processInspectorTrace();}
return this._timelineData;}
_processGenericTrace(){const processGroupStyle=this._buildGroupStyle({shareHeaderLine:false});const threadGroupStyle=this._buildGroupStyle({padding:2,nestingLevel:1,shareHeaderLine:false});const eventEntryType=Timeline.TimelineFlameChartDataProvider.EntryType.Event;const tracksByProcess=new Platform.Multimap();for(const track of this._model.tracks()){if(track.thread!==null){tracksByProcess.set(track.thread.process(),track);}else{console.error('Failed to process track');}}
for(const process of tracksByProcess.keysArray()){if(tracksByProcess.size>1){const name=`${process.name()} ${process.id()}`;this._appendHeader(name,processGroupStyle,false);}
for(const track of tracksByProcess.get(process)){const group=this._appendSyncEvents(track,track.events,track.name,threadGroupStyle,eventEntryType,true);if(!this._timelineData.selectedGroup||track.name===TimelineModel.TimelineModel.BrowserMainThreadName){this._timelineData.selectedGroup=group;}}}}
_processInspectorTrace(){this._appendFrames();this._appendInteractionRecords();const eventEntryType=Timeline.TimelineFlameChartDataProvider.EntryType.Event;const weight=track=>{switch(track.type){case TimelineModel.TimelineModel.TrackType.Input:return 0;case TimelineModel.TimelineModel.TrackType.Animation:return 1;case TimelineModel.TimelineModel.TrackType.Timings:return 2;case TimelineModel.TimelineModel.TrackType.Console:return 3;case TimelineModel.TimelineModel.TrackType.MainThread:return track.forMainFrame?4:5;case TimelineModel.TimelineModel.TrackType.Worker:return 6;case TimelineModel.TimelineModel.TrackType.Raster:return 7;case TimelineModel.TimelineModel.TrackType.GPU:return 8;case TimelineModel.TimelineModel.TrackType.Other:return 9;}};const tracks=this._model.tracks().slice();tracks.sort((a,b)=>weight(a)-weight(b));let rasterCount=0;for(const track of tracks){switch(track.type){case TimelineModel.TimelineModel.TrackType.Input:this._appendAsyncEventsGroup(track,ls`Input`,track.asyncEvents,this._interactionsHeaderLevel2,eventEntryType,false);break;case TimelineModel.TimelineModel.TrackType.Animation:this._appendAsyncEventsGroup(track,ls`Animation`,track.asyncEvents,this._interactionsHeaderLevel2,eventEntryType,false);break;case TimelineModel.TimelineModel.TrackType.Timings:const group=this._appendHeader(ls`Timings`,this._timingsHeader,true);group._track=track;this._appendPageMetrics();this._appendAsyncEventsGroup(track,null,track.asyncEvents,this._timingsHeader,eventEntryType,true);break;case TimelineModel.TimelineModel.TrackType.Console:this._appendAsyncEventsGroup(track,ls`Console`,track.asyncEvents,this._headerLevel1,eventEntryType,true);break;case TimelineModel.TimelineModel.TrackType.MainThread:if(track.forMainFrame){const group=this._appendSyncEvents(track,track.events,track.url?ls`Main \u2014 ${track.url}`:ls`Main`,this._headerLevel1,eventEntryType,true);if(group){this._timelineData.selectedGroup=group;}}else{this._appendSyncEvents(track,track.events,track.url?ls`Frame \u2014 ${track.url}`:ls`Subframe`,this._headerLevel1,eventEntryType,true);}
break;case TimelineModel.TimelineModel.TrackType.Worker:this._appendSyncEvents(track,track.events,track.url?ls`Worker \u2014 ${track.url}`:ls`Dedicated Worker`,this._headerLevel1,eventEntryType,true);break;case TimelineModel.TimelineModel.TrackType.Raster:if(!rasterCount){this._appendHeader(ls`Raster`,this._headerLevel1,false);}
++rasterCount;this._appendSyncEvents(track,track.events,ls`Rasterizer Thread ${rasterCount}`,this._headerLevel2,eventEntryType,true);break;case TimelineModel.TimelineModel.TrackType.GPU:this._appendSyncEvents(track,track.events,ls`GPU`,this._headerLevel1,eventEntryType,true);break;case TimelineModel.TimelineModel.TrackType.Other:this._appendSyncEvents(track,track.events,track.name||ls`Thread`,this._headerLevel1,eventEntryType,true);this._appendAsyncEventsGroup(track,track.name,track.asyncEvents,this._headerLevel1,eventEntryType,true);break;}}
if(this._timelineData.selectedGroup){this._timelineData.selectedGroup.expanded=true;}
for(let extensionIndex=0;extensionIndex<this._extensionInfo.length;extensionIndex++){this._innerAppendExtensionEvents(extensionIndex);}
this._markers.sort((a,b)=>a.startTime()-b.startTime());this._timelineData.markers=this._markers;this._flowEventIndexById.clear();}
minimumBoundary(){return this._minimumBoundary;}
totalTime(){return this._timeSpan;}
search(startTime,endTime,filter){const result=[];const entryTypes=Timeline.TimelineFlameChartDataProvider.EntryType;this.timelineData();for(let i=0;i<this._entryData.length;++i){if(this._entryType(i)!==entryTypes.Event){continue;}
const event=(this._entryData[i]);if(event.startTime>endTime){continue;}
if((event.endTime||event.startTime)<startTime){continue;}
if(filter.accept(event)){result.push(i);}}
result.sort((a,b)=>SDK.TracingModel.Event.compareStartTime((this._entryData[a]),(this._entryData[b])));return result;}
_appendSyncEvents(track,events,title,style,entryType,selectable){if(!events.length){return null;}
const isExtension=entryType===Timeline.TimelineFlameChartDataProvider.EntryType.ExtensionEvent;const openEvents=[];const flowEventsEnabled=Root.Runtime.experiments.isEnabled('timelineFlowEvents');const blackboxingEnabled=!isExtension&&Root.Runtime.experiments.isEnabled('blackboxJSFramesOnTimeline');let maxStackDepth=0;let group=null;if(track&&track.type===TimelineModel.TimelineModel.TrackType.MainThread){group=this._appendHeader(title,style,selectable);group._track=track;}
for(let i=0;i<events.length;++i){const e=events[i];if(!isExtension&&this._performanceModel.timelineModel().isMarkerEvent(e)){this._markers.push(new Timeline.TimelineFlameChartMarker(e.startTime,e.startTime-this._model.minimumRecordTime(),Timeline.TimelineUIUtils.markerStyleForEvent(e)));}
if(!SDK.TracingModel.isFlowPhase(e.phase)){if(!e.endTime&&e.phase!==SDK.TracingModel.Phase.Instant){continue;}
if(SDK.TracingModel.isAsyncPhase(e.phase)){continue;}
if(!isExtension&&!this._performanceModel.isVisible(e)){continue;}}
while(openEvents.length&&openEvents.peekLast().endTime<=e.startTime){openEvents.pop();}
e._blackboxRoot=false;if(blackboxingEnabled&&this._isBlackboxedEvent(e)){const parent=openEvents.peekLast();if(parent&&parent._blackboxRoot){continue;}
e._blackboxRoot=true;}
if(!group){group=this._appendHeader(title,style,selectable);if(selectable){group._track=track;}}
const level=this._currentLevel+openEvents.length;if(flowEventsEnabled){this._appendFlowEvent(e,level);}
const index=this._appendEvent(e,level);if(openEvents.length){this._entryParent[index]=openEvents.peekLast();}
if(!isExtension&&this._performanceModel.timelineModel().isMarkerEvent(e)){this._timelineData.entryTotalTimes[this._entryData.length]=undefined;}
maxStackDepth=Math.max(maxStackDepth,openEvents.length+1);if(e.endTime){openEvents.push(e);}}
this._entryTypeByLevel.length=this._currentLevel+maxStackDepth;this._entryTypeByLevel.fill(entryType,this._currentLevel);this._currentLevel+=maxStackDepth;return group;}
_isBlackboxedEvent(event){if(event.name!==TimelineModel.TimelineModel.RecordType.JSFrame){return false;}
const url=event.args['data']['url'];return url&&this._isBlackboxedURL(url);}
_isBlackboxedURL(url){return Bindings.blackboxManager.isBlackboxedURL(url);}
_appendAsyncEventsGroup(track,header,events,style,entryType,selectable){if(!events.length){return null;}
const lastUsedTimeByLevel=[];let group=null;for(let i=0;i<events.length;++i){const asyncEvent=events[i];if(!this._performanceModel.isVisible(asyncEvent)){continue;}
if(!group&&header){group=this._appendHeader(header,style,selectable);if(selectable){group._track=track;}}
const startTime=asyncEvent.startTime;let level;for(level=0;level<lastUsedTimeByLevel.length&&lastUsedTimeByLevel[level]>startTime;++level){}
this._appendAsyncEvent(asyncEvent,this._currentLevel+level);lastUsedTimeByLevel[level]=asyncEvent.endTime;}
this._entryTypeByLevel.length=this._currentLevel+lastUsedTimeByLevel.length;this._entryTypeByLevel.fill(entryType,this._currentLevel);this._currentLevel+=lastUsedTimeByLevel.length;return group;}
_appendInteractionRecords(){const interactionRecords=this._performanceModel.interactionRecords();if(!interactionRecords.length){return;}
this._appendHeader(ls`Interactions`,this._interactionsHeaderLevel1,false);for(const segment of interactionRecords){const index=this._entryData.length;this._entryData.push((segment.data));this._entryIndexToTitle[index]=(segment.data);this._timelineData.entryLevels[index]=this._currentLevel;this._timelineData.entryTotalTimes[index]=segment.end-segment.begin;this._timelineData.entryStartTimes[index]=segment.begin;}
this._entryTypeByLevel[this._currentLevel++]=Timeline.TimelineFlameChartDataProvider.EntryType.InteractionRecord;}
_appendPageMetrics(){this._entryTypeByLevel[this._currentLevel]=Timeline.TimelineFlameChartDataProvider.EntryType.Event;const metricEvents=[];const lcpEvents=[];const timelineModel=this._performanceModel.timelineModel();for(const track of this._model.tracks()){for(const event of track.events){if(!timelineModel.isMarkerEvent(event)){continue;}
if(timelineModel.isLCPCandidateEvent(event)||timelineModel.isLCPInvalidateEvent(event)){lcpEvents.push(event);}else{metricEvents.push(event);}}}
if(lcpEvents.length>0){const lcpEventsByNavigationId=new Map();for(const e of lcpEvents){const key=e.args['data']['navigationId'];const previousLastEvent=lcpEventsByNavigationId.get(key);if(!previousLastEvent||previousLastEvent.args['data']['candidateIndex']<e.args['data']['candidateIndex']){lcpEventsByNavigationId.set(key,e);}}
const latestCandidates=Array.from(lcpEventsByNavigationId.values());const latestEvents=latestCandidates.filter(e=>timelineModel.isLCPCandidateEvent(e));metricEvents.push(...latestEvents);}
metricEvents.sort(SDK.TracingModel.Event.compareStartTime);const totalTimes=this._timelineData.entryTotalTimes;for(const event of metricEvents){this._appendEvent(event,this._currentLevel);totalTimes[totalTimes.length-1]=Number.NaN;}
++this._currentLevel;}
_appendFrames(){const screenshots=this._performanceModel.filmStripModel().frames();const hasFilmStrip=!!screenshots.length;this._framesHeader.collapsible=hasFilmStrip;this._appendHeader(Common.UIString('Frames'),this._framesHeader,false);this._frameGroup=this._timelineData.groups.peekLast();const style=Timeline.TimelineUIUtils.markerStyleForFrame();this._entryTypeByLevel[this._currentLevel]=Timeline.TimelineFlameChartDataProvider.EntryType.Frame;for(const frame of this._performanceModel.frames()){this._markers.push(new Timeline.TimelineFlameChartMarker(frame.startTime,frame.startTime-this._model.minimumRecordTime(),style));this._appendFrame(frame);}
++this._currentLevel;if(!hasFilmStrip){return;}
this._appendHeader('',this._screenshotsHeader,false);this._entryTypeByLevel[this._currentLevel]=Timeline.TimelineFlameChartDataProvider.EntryType.Screenshot;let prevTimestamp;for(const screenshot of screenshots){this._entryData.push(screenshot);this._timelineData.entryLevels.push(this._currentLevel);this._timelineData.entryStartTimes.push(screenshot.timestamp);if(prevTimestamp){this._timelineData.entryTotalTimes.push(screenshot.timestamp-prevTimestamp);}
prevTimestamp=screenshot.timestamp;}
if(screenshots.length){this._timelineData.entryTotalTimes.push(this._model.maximumRecordTime()-prevTimestamp);}
++this._currentLevel;}
_entryType(entryIndex){return this._entryTypeByLevel[this._timelineData.entryLevels[entryIndex]];}
prepareHighlightedEntryInfo(entryIndex){let time='';let title;let warning;const type=this._entryType(entryIndex);if(type===Timeline.TimelineFlameChartDataProvider.EntryType.Event){const event=(this._entryData[entryIndex]);const totalTime=event.duration;const selfTime=event.selfTime;const eps=1e-6;if(typeof totalTime==='number'){time=Math.abs(totalTime-selfTime)>eps&&selfTime>eps?Common.UIString('%s (self %s)',Number.millisToString(totalTime,true),Number.millisToString(selfTime,true)):Number.millisToString(totalTime,true);}
if(this._performanceModel.timelineModel().isMarkerEvent(event)){title=Timeline.TimelineUIUtils.eventTitle(event);}else{title=this.entryTitle(entryIndex);}
warning=Timeline.TimelineUIUtils.eventWarning(event);}else if(type===Timeline.TimelineFlameChartDataProvider.EntryType.Frame){const frame=(this._entryData[entryIndex]);time=Common.UIString('%s ~ %.0f\xa0fps',Number.preciseMillisToString(frame.duration,1),(1000/frame.duration));title=frame.idle?Common.UIString('Idle Frame'):Common.UIString('Frame');if(frame.hasWarnings()){warning=createElement('span');warning.textContent=Common.UIString('Long frame');}}else{return null;}
const element=createElement('div');const root=UI.createShadowRootWithCoreStyles(element,'timeline/timelineFlamechartPopover.css');const contents=root.createChild('div','timeline-flamechart-popover');contents.createChild('span','timeline-info-time').textContent=time;contents.createChild('span','timeline-info-title').textContent=title;if(warning){warning.classList.add('timeline-info-warning');contents.appendChild(warning);}
return element;}
entryColor(entryIndex){function patchColorAndCache(cache,key,lookupColor){let color=cache.get(key);if(color){return color;}
const parsedColor=Common.Color.parse(lookupColor(key));color=parsedColor.setAlpha(0.7).asString(Common.Color.Format.RGBA)||'';cache.set(key,color);return color;}
const entryTypes=Timeline.TimelineFlameChartDataProvider.EntryType;const type=this._entryType(entryIndex);if(type===entryTypes.Event){const event=(this._entryData[entryIndex]);if(this._model.isGenericTrace()){return this._genericTraceEventColor(event);}
if(this._performanceModel.timelineModel().isMarkerEvent(event)){return Timeline.TimelineUIUtils.markerStyleForEvent(event).color;}
if(!SDK.TracingModel.isAsyncPhase(event.phase)){return this._colorForEvent(event);}
if(event.hasCategory(TimelineModel.TimelineModel.Category.Console)||event.hasCategory(TimelineModel.TimelineModel.Category.UserTiming)){return this._consoleColorGenerator.colorForID(event.name);}
if(event.hasCategory(TimelineModel.TimelineModel.Category.LatencyInfo)){const phase=TimelineModel.TimelineIRModel.phaseForEvent(event)||TimelineModel.TimelineIRModel.Phases.Uncategorized;return patchColorAndCache(this._asyncColorByInteractionPhase,phase,Timeline.TimelineUIUtils.interactionPhaseColor);}
const category=Timeline.TimelineUIUtils.eventStyle(event).category;return patchColorAndCache(this._asyncColorByCategory,category,()=>category.color);}
if(type===entryTypes.Frame){return'white';}
if(type===entryTypes.InteractionRecord){return'transparent';}
if(type===entryTypes.ExtensionEvent){const event=(this._entryData[entryIndex]);return this._extensionColorGenerator.colorForID(event.name);}
return'';}
_genericTraceEventColor(event){const key=event.categoriesString||event.name;return key?`hsl(${String.hashCode(key) % 300 + 30}, 40%, 70%)`:'#ccc';}
_drawFrame(entryIndex,context,text,barX,barY,barWidth,barHeight){const hPadding=1;const frame=(this._entryData[entryIndex]);barX+=hPadding;barWidth-=2*hPadding;context.fillStyle=frame.idle?'white':(frame.hasWarnings()?'#fad1d1':'#d7f0d1');context.fillRect(barX,barY,barWidth,barHeight);const frameDurationText=Number.preciseMillisToString(frame.duration,1);const textWidth=context.measureText(frameDurationText).width;if(textWidth<=barWidth){context.fillStyle=this.textColor(entryIndex);context.fillText(frameDurationText,barX+(barWidth-textWidth)/2,barY+barHeight-4);}}
async _drawScreenshot(entryIndex,context,barX,barY,barWidth,barHeight){const screenshot=(this._entryData[entryIndex]);if(!this._screenshotImageCache.has(screenshot)){this._screenshotImageCache.set(screenshot,null);const data=await screenshot.imageDataPromise();const image=await UI.loadImageFromData(data);this._screenshotImageCache.set(screenshot,image);this.dispatchEventToListeners(Timeline.TimelineFlameChartDataProvider.Events.DataChanged);return;}
const image=this._screenshotImageCache.get(screenshot);if(!image){return;}
const imageX=barX+1;const imageY=barY+1;const imageHeight=barHeight-2;const scale=imageHeight/image.naturalHeight;const imageWidth=Math.floor(image.naturalWidth*scale);context.save();context.beginPath();context.rect(barX,barY,barWidth,barHeight);context.clip();context.drawImage(image,imageX,imageY,imageWidth,imageHeight);context.strokeStyle='#ccc';context.strokeRect(imageX-0.5,imageY-0.5,Math.min(barWidth-1,imageWidth+1),imageHeight);context.restore();}
decorateEntry(entryIndex,context,text,barX,barY,barWidth,barHeight,unclippedBarX,timeToPixels){const data=this._entryData[entryIndex];const type=this._entryType(entryIndex);const entryTypes=Timeline.TimelineFlameChartDataProvider.EntryType;if(type===entryTypes.Frame){this._drawFrame(entryIndex,context,text,barX,barY,barWidth,barHeight);return true;}
if(type===entryTypes.Screenshot){this._drawScreenshot(entryIndex,context,barX,barY,barWidth,barHeight);return true;}
if(type===entryTypes.InteractionRecord){const color=Timeline.TimelineUIUtils.interactionPhaseColor((data));context.fillStyle=color;context.fillRect(barX,barY,barWidth-1,2);context.fillRect(barX,barY-3,2,3);context.fillRect(barX+barWidth-3,barY-3,2,3);return false;}
if(type===entryTypes.Event){const event=(data);if(event.hasCategory(TimelineModel.TimelineModel.Category.LatencyInfo)){const timeWaitingForMainThread=TimelineModel.TimelineData.forEvent(event).timeWaitingForMainThread;if(timeWaitingForMainThread){context.fillStyle='hsla(0, 70%, 60%, 1)';const width=Math.floor(unclippedBarX-barX+timeWaitingForMainThread*timeToPixels);context.fillRect(barX,barY+barHeight-3,width,2);}}
if(TimelineModel.TimelineData.forEvent(event).warning){paintWarningDecoration(barX,barWidth-1.5);}}
function paintWarningDecoration(x,width){const triangleSize=8;context.save();context.beginPath();context.rect(x,barY,width,barHeight);context.clip();context.beginPath();context.fillStyle='red';context.moveTo(x+width-triangleSize,barY);context.lineTo(x+width,barY);context.lineTo(x+width,barY+triangleSize);context.fill();context.restore();}
return false;}
forceDecoration(entryIndex){const entryTypes=Timeline.TimelineFlameChartDataProvider.EntryType;const type=this._entryType(entryIndex);if(type===entryTypes.Frame){return true;}
if(type===entryTypes.Screenshot){return true;}
if(type===entryTypes.Event){const event=(this._entryData[entryIndex]);return!!TimelineModel.TimelineData.forEvent(event).warning;}
return false;}
appendExtensionEvents(entry){this._extensionInfo.push(entry);if(this._timelineData){this._innerAppendExtensionEvents(this._extensionInfo.length-1);}}
_innerAppendExtensionEvents(index){const entry=this._extensionInfo[index];const entryType=Timeline.TimelineFlameChartDataProvider.EntryType.ExtensionEvent;const allThreads=[].concat(...entry.model.sortedProcesses().map(process=>process.sortedThreads()));if(!allThreads.length){return;}
const singleTrack=allThreads.length===1&&(!allThreads[0].events().length||!allThreads[0].asyncEvents().length);if(!singleTrack){this._appendHeader(entry.title,this._headerLevel1,false);}
const style=singleTrack?this._headerLevel2:this._headerLevel1;let threadIndex=0;for(const thread of allThreads){const title=singleTrack?entry.title:thread.name()||ls`Thread ${++threadIndex}`;this._appendAsyncEventsGroup(null,title,thread.asyncEvents(),style,entryType,false);this._appendSyncEvents(null,thread.events(),title,style,entryType,false);}}
_appendHeader(title,style,selectable){const group={startLevel:this._currentLevel,name:title,style:style,selectable:selectable};this._timelineData.groups.push(group);return group;}
_appendEvent(event,level){const index=this._entryData.length;this._entryData.push(event);this._timelineData.entryLevels[index]=level;this._timelineData.entryTotalTimes[index]=event.duration||Timeline.TimelineFlameChartDataProvider.InstantEventVisibleDurationMs;this._timelineData.entryStartTimes[index]=event.startTime;event[Timeline.TimelineFlameChartDataProvider._indexSymbol]=index;return index;}
_appendAsyncEvent(asyncEvent,level){if(SDK.TracingModel.isNestableAsyncPhase(asyncEvent.phase)){this._appendEvent(asyncEvent,level);return;}
const steps=asyncEvent.steps;const eventOffset=steps.length>1&&steps[1].phase===SDK.TracingModel.Phase.AsyncStepPast?1:0;for(let i=0;i<steps.length-1;++i){const index=this._entryData.length;this._entryData.push(steps[i+eventOffset]);const startTime=steps[i].startTime;this._timelineData.entryLevels[index]=level;this._timelineData.entryTotalTimes[index]=steps[i+1].startTime-startTime;this._timelineData.entryStartTimes[index]=startTime;}}
_appendFlowEvent(event,level){const timelineData=this._timelineData;function pushStartFlow(event){const flowIndex=timelineData.flowStartTimes.length;timelineData.flowStartTimes.push(event.startTime);timelineData.flowStartLevels.push(level);return flowIndex;}
function pushEndFlow(event,flowIndex){timelineData.flowEndTimes[flowIndex]=event.startTime;timelineData.flowEndLevels[flowIndex]=level;}
switch(event.phase){case SDK.TracingModel.Phase.FlowBegin:this._flowEventIndexById.set(event.id,pushStartFlow(event));break;case SDK.TracingModel.Phase.FlowStep:pushEndFlow(event,this._flowEventIndexById.get(event.id));this._flowEventIndexById.set(event.id,pushStartFlow(event));break;case SDK.TracingModel.Phase.FlowEnd:pushEndFlow(event,this._flowEventIndexById.get(event.id));this._flowEventIndexById.delete(event.id);break;}}
_appendFrame(frame){const index=this._entryData.length;this._entryData.push(frame);this._entryIndexToTitle[index]=Number.millisToString(frame.duration,true);this._timelineData.entryLevels[index]=this._currentLevel;this._timelineData.entryTotalTimes[index]=frame.duration;this._timelineData.entryStartTimes[index]=frame.startTime;}
createSelection(entryIndex){const type=this._entryType(entryIndex);let timelineSelection=null;if(type===Timeline.TimelineFlameChartDataProvider.EntryType.Event){timelineSelection=Timeline.TimelineSelection.fromTraceEvent((this._entryData[entryIndex]));}else if(type===Timeline.TimelineFlameChartDataProvider.EntryType.Frame){timelineSelection=Timeline.TimelineSelection.fromFrame((this._entryData[entryIndex]));}
if(timelineSelection){this._lastSelection=new Timeline.TimelineFlameChartView.Selection(timelineSelection,entryIndex);}
return timelineSelection;}
formatValue(value,precision){return Number.preciseMillisToString(value,precision);}
canJumpToEntry(entryIndex){return false;}
entryIndexForSelection(selection){if(!selection||selection.type()===Timeline.TimelineSelection.Type.Range){return-1;}
if(this._lastSelection&&this._lastSelection.timelineSelection.object()===selection.object()){return this._lastSelection.entryIndex;}
const index=this._entryData.indexOf((selection.object()));if(index!==-1){this._lastSelection=new Timeline.TimelineFlameChartView.Selection(selection,index);}
return index;}
buildFlowForInitiator(entryIndex){if(this._lastInitiatorEntry===entryIndex){return false;}
this._lastInitiatorEntry=entryIndex;let event=this.eventByIndex(entryIndex);const td=this._timelineData;td.flowStartTimes=[];td.flowStartLevels=[];td.flowEndTimes=[];td.flowEndLevels=[];while(event){let initiator;for(;event;event=this._eventParent(event)){initiator=TimelineModel.TimelineData.forEvent(event).initiator();if(initiator){break;}}
if(!initiator){break;}
const eventIndex=event[Timeline.TimelineFlameChartDataProvider._indexSymbol];const initiatorIndex=initiator[Timeline.TimelineFlameChartDataProvider._indexSymbol];td.flowStartTimes.push(initiator.endTime||initiator.startTime);td.flowStartLevels.push(td.entryLevels[initiatorIndex]);td.flowEndTimes.push(event.startTime);td.flowEndLevels.push(td.entryLevels[eventIndex]);event=initiator;}
return true;}
_eventParent(event){return this._entryParent[event[Timeline.TimelineFlameChartDataProvider._indexSymbol]]||null;}
eventByIndex(entryIndex){return entryIndex>=0&&this._entryType(entryIndex)===Timeline.TimelineFlameChartDataProvider.EntryType.Event?(this._entryData[entryIndex]):null;}
setEventColorMapping(colorForEvent){this._colorForEvent=colorForEvent;}};Timeline.TimelineFlameChartDataProvider.InstantEventVisibleDurationMs=0.001;Timeline.TimelineFlameChartDataProvider._indexSymbol=Symbol('index');Timeline.TimelineFlameChartDataProvider.Events={DataChanged:Symbol('DataChanged')};Timeline.TimelineFlameChartDataProvider.EntryType={Frame:Symbol('Frame'),Event:Symbol('Event'),InteractionRecord:Symbol('InteractionRecord'),ExtensionEvent:Symbol('ExtensionEvent'),Screenshot:Symbol('Screenshot'),};;Timeline.TimelineFlameChartNetworkDataProvider=class{constructor(){this._font='11px '+Host.fontFamily();this.setModel(null);this._style={padding:4,height:17,collapsible:true,color:UI.themeSupport.patchColorText('#222',UI.ThemeSupport.ColorUsage.Foreground),font:this._font,backgroundColor:UI.themeSupport.patchColorText('white',UI.ThemeSupport.ColorUsage.Background),nestingLevel:0,useFirstLineForOverview:false,useDecoratorsForOverview:true,shareHeaderLine:false};this._group={startLevel:0,name:Common.UIString('Network'),expanded:false,style:this._style};this._minimumBoundary=0;this._maximumBoundary=0;this._timeSpan=0;}
setModel(performanceModel){this._model=performanceModel&&performanceModel.timelineModel();this._maxLevel=0;this._timelineData=null;this._requests=[];}
isEmpty(){this.timelineData();return!this._requests.length;}
maxStackDepth(){return this._maxLevel;}
timelineData(){if(this._timelineData){return this._timelineData;}
this._requests=[];this._timelineData=new PerfUI.FlameChart.TimelineData([],[],[],[]);if(this._model){this._appendTimelineData();}
return this._timelineData;}
minimumBoundary(){return this._minimumBoundary;}
totalTime(){return this._timeSpan;}
setWindowTimes(startTime,endTime){this._startTime=startTime;this._endTime=endTime;this._updateTimelineData();}
createSelection(index){if(index===-1){return null;}
const request=this._requests[index];this._lastSelection=new Timeline.TimelineFlameChartView.Selection(Timeline.TimelineSelection.fromNetworkRequest(request),index);return this._lastSelection.timelineSelection;}
entryIndexForSelection(selection){if(!selection){return-1;}
if(this._lastSelection&&this._lastSelection.timelineSelection.object()===selection.object()){return this._lastSelection.entryIndex;}
if(selection.type()!==Timeline.TimelineSelection.Type.NetworkRequest){return-1;}
const request=(selection.object());const index=this._requests.indexOf(request);if(index!==-1){this._lastSelection=new Timeline.TimelineFlameChartView.Selection(Timeline.TimelineSelection.fromNetworkRequest(request),index);}
return index;}
entryColor(index){const request=(this._requests[index]);const category=Timeline.TimelineUIUtils.networkRequestCategory(request);return Timeline.TimelineUIUtils.networkCategoryColor(category);}
textColor(index){return Timeline.FlameChartStyle.textColor;}
entryTitle(index){const request=(this._requests[index]);const parsedURL=new Common.ParsedURL(request.url||'');return parsedURL.isValid?`${parsedURL.displayName} (${parsedURL.host})`:request.url||null;}
entryFont(index){return this._font;}
decorateEntry(index,context,text,barX,barY,barWidth,barHeight,unclippedBarX,timeToPixelRatio){const request=(this._requests[index]);if(!request.timing){return false;}
const beginTime=request.beginTime();const timeToPixel=time=>Math.floor(unclippedBarX+(time-beginTime)*timeToPixelRatio);const minBarWidthPx=2;const startTime=request.getStartTime();const endTime=request.endTime;const{sendStartTime,headersEndTime}=request.getSendReceiveTiming();const sendStart=Math.max(timeToPixel(sendStartTime),unclippedBarX);const headersEnd=Math.max(timeToPixel(headersEndTime),sendStart);const finish=Math.max(timeToPixel(request.finishTime||endTime),headersEnd+minBarWidthPx);const start=timeToPixel(startTime);const end=Math.max(timeToPixel(endTime),finish);context.fillStyle='hsla(0, 100%, 100%, 0.8)';context.fillRect(sendStart+0.5,barY+0.5,headersEnd-sendStart-0.5,barHeight-2);context.fillStyle=UI.themeSupport.patchColorText('white',UI.ThemeSupport.ColorUsage.Background);context.fillRect(barX,barY-0.5,sendStart-barX,barHeight);context.fillRect(finish,barY-0.5,barX+barWidth-finish,barHeight);if(!request.cached()&&request.timing.pushStart){const pushStart=timeToPixel(request.timing.pushStart*1000);const pushEnd=request.timing.pushEnd?timeToPixel(request.timing.pushEnd*1000):start;const dentSize=Number.constrain(pushEnd-pushStart-2,0,4);const padding=1;context.save();context.beginPath();context.moveTo(pushStart+dentSize,barY+barHeight/2);context.lineTo(pushStart,barY+padding);context.lineTo(pushEnd-dentSize,barY+padding);context.lineTo(pushEnd,barY+barHeight/2);context.lineTo(pushEnd-dentSize,barY+barHeight-padding);context.lineTo(pushStart,barY+barHeight-padding);context.closePath();if(request.timing.pushEnd){context.fillStyle=this.entryColor(index);}else{const gradient=context.createLinearGradient(pushStart,0,pushEnd,0);gradient.addColorStop(0,this.entryColor(index));gradient.addColorStop(1,'white');context.fillStyle=gradient;}
context.globalAlpha=0.3;context.fill();context.restore();}
function drawTick(begin,end,y){const tickHeightPx=6;context.moveTo(begin,y-tickHeightPx/2);context.lineTo(begin,y+tickHeightPx/2);context.moveTo(begin,y);context.lineTo(end,y);}
context.beginPath();context.lineWidth=1;context.strokeStyle='#ccc';const lineY=Math.floor(barY+barHeight/2)+0.5;const leftTick=start+0.5;const rightTick=end-0.5;drawTick(leftTick,sendStart,lineY);drawTick(rightTick,finish,lineY);context.stroke();if(typeof request.priority==='string'){const color=this._colorForPriority(request.priority);if(color){context.fillStyle=color;context.fillRect(sendStart+0.5,barY+0.5,3.5,3.5);}}
const textStart=Math.max(sendStart,0);const textWidth=finish-textStart;const minTextWidthPx=20;if(textWidth>=minTextWidthPx){text=this.entryTitle(index)||'';if(request.fromServiceWorker){text='⚙ '+text;}
if(text){const textPadding=4;const textBaseline=5;const textBaseHeight=barHeight-textBaseline;const trimmedText=UI.trimTextEnd(context,text,textWidth-2*textPadding);context.fillStyle='#333';context.fillText(trimmedText,textStart+textPadding,barY+textBaseHeight);}}
return true;}
forceDecoration(index){return true;}
prepareHighlightedEntryInfo(index){const maxURLChars=80;const request=(this._requests[index]);if(!request.url){return null;}
const element=createElement('div');const root=UI.createShadowRootWithCoreStyles(element,'timeline/timelineFlamechartPopover.css');const contents=root.createChild('div','timeline-flamechart-popover');const startTime=request.getStartTime();const duration=request.endTime-startTime;if(startTime&&isFinite(duration)){contents.createChild('span','timeline-info-network-time').textContent=Number.millisToString(duration,true);}
if(typeof request.priority==='string'){const div=contents.createChild('span');div.textContent=PerfUI.uiLabelForNetworkPriority((request.priority));div.style.color=this._colorForPriority(request.priority)||'black';}
contents.createChild('span').textContent=request.url.trimMiddle(maxURLChars);return element;}
_colorForPriority(priority){if(!this._priorityToValue){const priorities=Protocol.Network.ResourcePriority;this._priorityToValue=new Map([[priorities.VeryLow,1],[priorities.Low,2],[priorities.Medium,3],[priorities.High,4],[priorities.VeryHigh,5]]);}
const value=this._priorityToValue.get(priority);return value?`hsla(214, 80%, 50%, ${value / 5})`:null;}
_appendTimelineData(){this._minimumBoundary=this._model.minimumRecordTime();this._maximumBoundary=this._model.maximumRecordTime();this._timeSpan=this._model.isEmpty()?1000:this._maximumBoundary-this._minimumBoundary;this._model.networkRequests().forEach(this._appendEntry.bind(this));this._updateTimelineData();}
_updateTimelineData(){if(!this._timelineData){return;}
const lastTimeByLevel=[];let maxLevel=0;for(let i=0;i<this._requests.length;++i){const r=this._requests[i];const beginTime=r.beginTime();const visible=beginTime<this._endTime&&r.endTime>this._startTime;if(!visible){this._timelineData.entryLevels[i]=-1;continue;}
while(lastTimeByLevel.length&&lastTimeByLevel.peekLast()<=beginTime){lastTimeByLevel.pop();}
this._timelineData.entryLevels[i]=lastTimeByLevel.length;lastTimeByLevel.push(r.endTime);maxLevel=Math.max(maxLevel,lastTimeByLevel.length);}
for(let i=0;i<this._requests.length;++i){if(this._timelineData.entryLevels[i]===-1){this._timelineData.entryLevels[i]=maxLevel;}}
this._timelineData=new PerfUI.FlameChart.TimelineData(this._timelineData.entryLevels,this._timelineData.entryTotalTimes,this._timelineData.entryStartTimes,[this._group]);this._maxLevel=maxLevel;}
_appendEntry(request){this._requests.push(request);this._timelineData.entryStartTimes.push(request.beginTime());this._timelineData.entryTotalTimes.push(request.endTime-request.beginTime());this._timelineData.entryLevels.push(this._requests.length-1);}
preferredHeight(){return this._style.height*(this._group.expanded?Number.constrain(this._maxLevel+1,4,8.5):1);}
isExpanded(){return this._group.expanded;}
formatValue(value,precision){return Number.preciseMillisToString(value,precision);}
canJumpToEntry(entryIndex){return false;}};;Timeline.TimelineFlameChartView=class extends UI.VBox{constructor(delegate){super();this.element.classList.add('timeline-flamechart');this._delegate=delegate;this._model=null;this._searchResults;this._eventListeners=[];this._showMemoryGraphSetting=Common.settings.createSetting('timelineShowMemory',false);this._networkSplitWidget=new UI.SplitWidget(false,false,'timelineFlamechartMainView',150);const mainViewGroupExpansionSetting=Common.settings.createSetting('timelineFlamechartMainViewGroupExpansion',{});this._mainDataProvider=new Timeline.TimelineFlameChartDataProvider();this._mainDataProvider.addEventListener(Timeline.TimelineFlameChartDataProvider.Events.DataChanged,()=>this._mainFlameChart.scheduleUpdate());this._mainFlameChart=new PerfUI.FlameChart(this._mainDataProvider,this,mainViewGroupExpansionSetting);this._mainFlameChart.alwaysShowVerticalScroll();this._mainFlameChart.enableRuler(false);this._networkFlameChartGroupExpansionSetting=Common.settings.createSetting('timelineFlamechartNetworkViewGroupExpansion',{});this._networkDataProvider=new Timeline.TimelineFlameChartNetworkDataProvider();this._networkFlameChart=new PerfUI.FlameChart(this._networkDataProvider,this,this._networkFlameChartGroupExpansionSetting);this._networkFlameChart.alwaysShowVerticalScroll();this._networkFlameChart.disableRangeSelection();this._networkPane=new UI.VBox();this._networkPane.setMinimumSize(23,23);this._networkFlameChart.show(this._networkPane.element);this._splitResizer=this._networkPane.element.createChild('div','timeline-flamechart-resizer');this._networkSplitWidget.hideDefaultResizer(true);this._networkSplitWidget.installResizer(this._splitResizer);this._networkSplitWidget.setMainWidget(this._mainFlameChart);this._networkSplitWidget.setSidebarWidget(this._networkPane);this._chartSplitWidget=new UI.SplitWidget(false,true,'timelineCountersSplitViewState');this._countersView=new Timeline.CountersGraph(this._delegate);this._chartSplitWidget.setMainWidget(this._networkSplitWidget);this._chartSplitWidget.setSidebarWidget(this._countersView);this._chartSplitWidget.hideDefaultResizer();this._chartSplitWidget.installResizer((this._countersView.resizerElement()));this._updateCountersGraphToggle();this._detailsSplitWidget=new UI.SplitWidget(false,true,'timelinePanelDetailsSplitViewState');this._detailsSplitWidget.element.classList.add('timeline-details-split');this._detailsView=new Timeline.TimelineDetailsView(delegate);this._detailsSplitWidget.installResizer(this._detailsView.headerElement());this._detailsSplitWidget.setMainWidget(this._chartSplitWidget);this._detailsSplitWidget.setSidebarWidget(this._detailsView);this._detailsSplitWidget.show(this.element);this._onMainEntrySelected=this._onEntrySelected.bind(this,this._mainDataProvider);this._onNetworkEntrySelected=this._onEntrySelected.bind(this,this._networkDataProvider);this._mainFlameChart.addEventListener(PerfUI.FlameChart.Events.EntrySelected,this._onMainEntrySelected,this);this._mainFlameChart.addEventListener(PerfUI.FlameChart.Events.EntryInvoked,this._onMainEntrySelected,this);this._networkFlameChart.addEventListener(PerfUI.FlameChart.Events.EntrySelected,this._onNetworkEntrySelected,this);this._networkFlameChart.addEventListener(PerfUI.FlameChart.Events.EntryInvoked,this._onNetworkEntrySelected,this);this._mainFlameChart.addEventListener(PerfUI.FlameChart.Events.EntryHighlighted,this._onEntryHighlighted,this);this._nextExtensionIndex=0;this._boundRefresh=this._refresh.bind(this);this._selectedTrack=null;this._mainDataProvider.setEventColorMapping(Timeline.TimelineUIUtils.eventColor);this._groupBySetting=Common.settings.createSetting('timelineTreeGroupBy',Timeline.AggregatedTimelineTreeView.GroupBy.None);this._groupBySetting.addChangeListener(this._updateColorMapper,this);this._updateColorMapper();}
_updateColorMapper(){this._urlToColorCache=new Map();if(!this._model){return;}
this._mainDataProvider.setEventColorMapping(Timeline.TimelineUIUtils.eventColor);this._mainFlameChart.update();}
_onWindowChanged(event){const window=(event.data.window);const animate=!!event.data.animate;this._mainFlameChart.setWindowTimes(window.left,window.right,animate);this._networkFlameChart.setWindowTimes(window.left,window.right,animate);this._networkDataProvider.setWindowTimes(window.left,window.right);this._updateSearchResults(false,false);}
windowChanged(windowStartTime,windowEndTime,animate){this._model.setWindow({left:windowStartTime,right:windowEndTime},animate);}
updateRangeSelection(startTime,endTime){this._delegate.select(Timeline.TimelineSelection.fromRange(startTime,endTime));}
updateSelectedGroup(flameChart,group){if(flameChart!==this._mainFlameChart){return;}
const track=group?this._mainDataProvider.groupTrack(group):null;this._selectedTrack=track;this._updateTrack();}
setModel(model){if(model===this._model){return;}
Common.EventTarget.removeEventListeners(this._eventListeners);this._model=model;this._selectedTrack=null;this._mainDataProvider.setModel(this._model);this._networkDataProvider.setModel(this._model);if(this._model){this._eventListeners=[this._model.addEventListener(Timeline.PerformanceModel.Events.WindowChanged,this._onWindowChanged,this),this._model.addEventListener(Timeline.PerformanceModel.Events.ExtensionDataAdded,this._appendExtensionData,this)];const window=model.window();this._mainFlameChart.setWindowTimes(window.left,window.right);this._networkFlameChart.setWindowTimes(window.left,window.right);this._networkDataProvider.setWindowTimes(window.left,window.right);this._updateSearchResults(false,false);}
this._updateColorMapper();this._updateTrack();this._nextExtensionIndex=0;this._appendExtensionData();this._refresh();}
_updateTrack(){this._countersView.setModel(this._model,this._selectedTrack);this._detailsView.setModel(this._model,this._selectedTrack);}
_refresh(){if(this._networkDataProvider.isEmpty()){this._mainFlameChart.enableRuler(true);this._networkSplitWidget.hideSidebar();}else{this._mainFlameChart.enableRuler(false);this._networkSplitWidget.showBoth();this.resizeToPreferredHeights();}
this._mainFlameChart.reset();this._networkFlameChart.reset();this._updateSearchResults(false,false);}
_appendExtensionData(){if(!this._model){return;}
const extensions=this._model.extensionInfo();while(this._nextExtensionIndex<extensions.length){this._mainDataProvider.appendExtensionEvents(extensions[this._nextExtensionIndex++]);}
this._mainFlameChart.scheduleUpdate();}
_onEntryHighlighted(commonEvent){SDK.OverlayModel.hideDOMNodeHighlight();const entryIndex=(commonEvent.data);const event=this._mainDataProvider.eventByIndex(entryIndex);if(!event){return;}
const target=this._model&&this._model.timelineModel().targetByEvent(event);if(!target){return;}
const timelineData=TimelineModel.TimelineData.forEvent(event);const backendNodeId=timelineData.backendNodeId;if(!backendNodeId){return;}
new SDK.DeferredDOMNode(target,backendNodeId).highlight();}
highlightEvent(event){const entryIndex=event?this._mainDataProvider.entryIndexForSelection(Timeline.TimelineSelection.fromTraceEvent(event)):-1;if(entryIndex>=0){this._mainFlameChart.highlightEntry(entryIndex);}else{this._mainFlameChart.hideHighlight();}}
willHide(){this._networkFlameChartGroupExpansionSetting.removeChangeListener(this.resizeToPreferredHeights,this);this._showMemoryGraphSetting.removeChangeListener(this._updateCountersGraphToggle,this);Bindings.blackboxManager.removeChangeListener(this._boundRefresh);}
wasShown(){this._networkFlameChartGroupExpansionSetting.addChangeListener(this.resizeToPreferredHeights,this);this._showMemoryGraphSetting.addChangeListener(this._updateCountersGraphToggle,this);Bindings.blackboxManager.addChangeListener(this._boundRefresh);if(this._needsResizeToPreferredHeights){this.resizeToPreferredHeights();}
this._mainFlameChart.scheduleUpdate();this._networkFlameChart.scheduleUpdate();}
_updateCountersGraphToggle(){if(this._showMemoryGraphSetting.get()){this._chartSplitWidget.showBoth();}else{this._chartSplitWidget.hideSidebar();}}
setSelection(selection){let index=this._mainDataProvider.entryIndexForSelection(selection);this._mainFlameChart.setSelectedEntry(index);index=this._networkDataProvider.entryIndexForSelection(selection);this._networkFlameChart.setSelectedEntry(index);if(this._detailsView){this._detailsView.setSelection(selection);}}
_onEntrySelected(dataProvider,event){const entryIndex=(event.data);if(Root.Runtime.experiments.isEnabled('timelineEventInitiators')&&dataProvider===this._mainDataProvider){if(this._mainDataProvider.buildFlowForInitiator(entryIndex)){this._mainFlameChart.scheduleUpdate();}}
this._delegate.select(dataProvider.createSelection(entryIndex));}
resizeToPreferredHeights(){if(!this.isShowing()){this._needsResizeToPreferredHeights=true;return;}
this._needsResizeToPreferredHeights=false;this._networkPane.element.classList.toggle('timeline-network-resizer-disabled',!this._networkDataProvider.isExpanded());this._networkSplitWidget.setSidebarSize(this._networkDataProvider.preferredHeight()+this._splitResizer.clientHeight+PerfUI.FlameChart.HeaderHeight+
2);}
setSearchableView(searchableView){this._searchableView=searchableView;}
jumpToNextSearchResult(){if(!this._searchResults||!this._searchResults.length){return;}
const index=typeof this._selectedSearchResult!=='undefined'?this._searchResults.indexOf(this._selectedSearchResult):-1;this._selectSearchResult(mod(index+1,this._searchResults.length));}
jumpToPreviousSearchResult(){if(!this._searchResults||!this._searchResults.length){return;}
const index=typeof this._selectedSearchResult!=='undefined'?this._searchResults.indexOf(this._selectedSearchResult):0;this._selectSearchResult(mod(index-1,this._searchResults.length));}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return true;}
_selectSearchResult(index){this._searchableView.updateCurrentMatchIndex(index);this._selectedSearchResult=this._searchResults[index];this._delegate.select(this._mainDataProvider.createSelection(this._selectedSearchResult));}
_updateSearchResults(shouldJump,jumpBackwards){const oldSelectedSearchResult=this._selectedSearchResult;delete this._selectedSearchResult;this._searchResults=[];if(!this._searchRegex||!this._model){return;}
const regExpFilter=new Timeline.TimelineFilters.RegExp(this._searchRegex);const window=this._model.window();this._searchResults=this._mainDataProvider.search(window.left,window.right,regExpFilter);this._searchableView.updateSearchMatchesCount(this._searchResults.length);if(!shouldJump||!this._searchResults.length){return;}
let selectedIndex=this._searchResults.indexOf(oldSelectedSearchResult);if(selectedIndex===-1){selectedIndex=jumpBackwards?this._searchResults.length-1:0;}
this._selectSearchResult(selectedIndex);}
searchCanceled(){if(typeof this._selectedSearchResult!=='undefined'){this._delegate.select(null);}
delete this._searchResults;delete this._selectedSearchResult;delete this._searchRegex;}
performSearch(searchConfig,shouldJump,jumpBackwards){this._searchRegex=searchConfig.toSearchRegex();this._updateSearchResults(shouldJump,jumpBackwards);}};Timeline.TimelineFlameChartView.Selection=class{constructor(selection,entryIndex){this.timelineSelection=selection;this.entryIndex=entryIndex;}};Timeline.FlameChartStyle={textColor:'#333'};Timeline.TimelineFlameChartMarker=class{constructor(startTime,startOffset,style){this._startTime=startTime;this._startOffset=startOffset;this._style=style;}
startTime(){return this._startTime;}
color(){return this._style.color;}
title(){if(this._style.lowPriority){return null;}
const startTime=Number.millisToString(this._startOffset);return ls`${this._style.title} at ${startTime}`;}
draw(context,x,height,pixelsPerMillisecond){const lowPriorityVisibilityThresholdInPixelsPerMs=4;if(this._style.lowPriority&&pixelsPerMillisecond<lowPriorityVisibilityThresholdInPixelsPerMs){return;}
context.save();if(this._style.tall){context.strokeStyle=this._style.color;context.lineWidth=this._style.lineWidth;context.translate(this._style.lineWidth<1||(this._style.lineWidth&1)?0.5:0,0.5);context.beginPath();context.moveTo(x,0);context.setLineDash(this._style.dashStyle);context.lineTo(x,context.canvas.height);context.stroke();}
context.restore();}};Timeline.TimelineFlameChartView._ColorBy={URL:'URL',};;Timeline.TimelineHistoryManager=class{constructor(){this._recordings=[];this._action=(UI.actionRegistry.action('timeline.show-history'));this._nextNumberByDomain=new Map();this._button=new Timeline.TimelineHistoryManager.ToolbarButton(this._action);UI.ARIAUtils.markAsMenuButton(this._button.element);this.clear();this._allOverviews=[{constructor:Timeline.TimelineEventOverviewResponsiveness,height:3},{constructor:Timeline.TimelineEventOverviewFrames,height:16},{constructor:Timeline.TimelineEventOverviewCPUActivity,height:20},{constructor:Timeline.TimelineEventOverviewNetwork,height:8}];this._totalHeight=this._allOverviews.reduce((acc,entry)=>acc+entry.height,0);this._enabled=true;this._lastActiveModel=null;}
addRecording(performanceModel){this._lastActiveModel=performanceModel;this._recordings.unshift(performanceModel);this._buildPreview(performanceModel);const modelTitle=this._title(performanceModel);this._button.setText(modelTitle);const buttonTitle=this._action.title();UI.ARIAUtils.setAccessibleName(this._button.element,ls`Current Session: ${modelTitle}. ${buttonTitle}`);this._updateState();if(this._recordings.length<=Timeline.TimelineHistoryManager._maxRecordings){return;}
const lruModel=this._recordings.reduce((a,b)=>lastUsedTime(a)<lastUsedTime(b)?a:b);this._recordings.splice(this._recordings.indexOf(lruModel),1);lruModel.dispose();function lastUsedTime(model){return Timeline.TimelineHistoryManager._dataForModel(model).lastUsed;}}
setEnabled(enabled){this._enabled=enabled;this._updateState();}
button(){return this._button;}
clear(){this._recordings.forEach(model=>model.dispose());this._recordings=[];this._lastActiveModel=null;this._updateState();this._button.setText(Common.UIString('(no recordings)'));this._nextNumberByDomain.clear();}
async showHistoryDropDown(){if(this._recordings.length<2||!this._enabled){return null;}
const model=await Timeline.TimelineHistoryManager.DropDown.show(this._recordings,(this._lastActiveModel),this._button.element);if(!model){return null;}
const index=this._recordings.indexOf(model);if(index<0){console.assert(false,`selected recording not found`);return null;}
this._setCurrentModel(model);return model;}
cancelIfShowing(){Timeline.TimelineHistoryManager.DropDown.cancelIfShowing();}
navigate(direction){if(!this._enabled||!this._lastActiveModel){return null;}
const index=this._recordings.indexOf(this._lastActiveModel);if(index<0){return null;}
const newIndex=Number.constrain(index+direction,0,this._recordings.length-1);const model=this._recordings[newIndex];this._setCurrentModel(model);return model;}
_setCurrentModel(model){Timeline.TimelineHistoryManager._dataForModel(model).lastUsed=Date.now();this._lastActiveModel=model;const modelTitle=this._title(model);const buttonTitle=this._action.title();this._button.setText(modelTitle);UI.ARIAUtils.setAccessibleName(this._button.element,ls`Current Session: ${modelTitle}. ${buttonTitle}`);}
_updateState(){this._action.setEnabled(this._recordings.length>1&&this._enabled);}
static _previewElement(performanceModel){const data=Timeline.TimelineHistoryManager._dataForModel(performanceModel);const startedAt=performanceModel.recordStartTime();data.time.textContent=startedAt?Common.UIString('(%s ago)',Timeline.TimelineHistoryManager._coarseAge(startedAt)):'';return data.preview;}
static _coarseAge(time){const seconds=Math.round((Date.now()-time)/1000);if(seconds<50){return Common.UIString('moments');}
const minutes=Math.round(seconds/60);if(minutes<50){return Common.UIString('%s m',minutes);}
const hours=Math.round(minutes/60);return Common.UIString('%s h',hours);}
_title(performanceModel){return Timeline.TimelineHistoryManager._dataForModel(performanceModel).title;}
_buildPreview(performanceModel){const parsedURL=performanceModel.timelineModel().pageURL().asParsedURL();const domain=parsedURL?parsedURL.host:'';const sequenceNumber=this._nextNumberByDomain.get(domain)||1;const title=Common.UIString('%s #%d',domain,sequenceNumber);this._nextNumberByDomain.set(domain,sequenceNumber+1);const timeElement=createElement('span');const preview=createElementWithClass('div','preview-item vbox');const data={preview:preview,title:title,time:timeElement,lastUsed:Date.now()};performanceModel[Timeline.TimelineHistoryManager._previewDataSymbol]=data;preview.appendChild(this._buildTextDetails(performanceModel,title,timeElement));const screenshotAndOverview=preview.createChild('div','hbox');screenshotAndOverview.appendChild(this._buildScreenshotThumbnail(performanceModel));screenshotAndOverview.appendChild(this._buildOverview(performanceModel));return data.preview;}
_buildTextDetails(performanceModel,title,timeElement){const container=createElementWithClass('div','text-details hbox');const nameSpan=container.createChild('span','name');nameSpan.textContent=title;UI.ARIAUtils.setAccessibleName(nameSpan,title);const tracingModel=performanceModel.tracingModel();const duration=Number.millisToString(tracingModel.maximumRecordTime()-tracingModel.minimumRecordTime(),false);const timeContainer=container.createChild('span','time');timeContainer.appendChild(createTextNode(duration));timeContainer.appendChild(timeElement);return container;}
_buildScreenshotThumbnail(performanceModel){const container=createElementWithClass('div','screenshot-thumb');const thumbnailAspectRatio=3/2;container.style.width=this._totalHeight*thumbnailAspectRatio+'px';container.style.height=this._totalHeight+'px';const filmStripModel=performanceModel.filmStripModel();const lastFrame=filmStripModel.frames().peekLast();if(!lastFrame){return container;}
lastFrame.imageDataPromise().then(data=>UI.loadImageFromData(data)).then(image=>image&&container.appendChild(image));return container;}
_buildOverview(performanceModel){const container=createElement('div');container.style.width=Timeline.TimelineHistoryManager._previewWidth+'px';container.style.height=this._totalHeight+'px';const canvas=container.createChild('canvas');canvas.width=window.devicePixelRatio*Timeline.TimelineHistoryManager._previewWidth;canvas.height=window.devicePixelRatio*this._totalHeight;const ctx=canvas.getContext('2d');let yOffset=0;for(const overview of this._allOverviews){const timelineOverview=new overview.constructor();timelineOverview.setCanvasSize(Timeline.TimelineHistoryManager._previewWidth,overview.height);timelineOverview.setModel(performanceModel);timelineOverview.update();const sourceContext=timelineOverview.context();const imageData=sourceContext.getImageData(0,0,sourceContext.canvas.width,sourceContext.canvas.height);ctx.putImageData(imageData,0,yOffset);yOffset+=overview.height*window.devicePixelRatio;}
return container;}
static _dataForModel(model){return model[Timeline.TimelineHistoryManager._previewDataSymbol]||null;}};Timeline.TimelineHistoryManager.PreviewData;Timeline.TimelineHistoryManager._maxRecordings=5;Timeline.TimelineHistoryManager._previewWidth=450;Timeline.TimelineHistoryManager._previewDataSymbol=Symbol('previewData');Timeline.TimelineHistoryManager.DropDown=class{constructor(models){this._glassPane=new UI.GlassPane();this._glassPane.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent);this._glassPane.setOutsideClickCallback(()=>this._close(null));this._glassPane.setPointerEventsBehavior(UI.GlassPane.PointerEventsBehavior.BlockedByGlassPane);this._glassPane.setAnchorBehavior(UI.GlassPane.AnchorBehavior.PreferBottom);this._glassPane.element.addEventListener('blur',()=>this._close(null));const shadowRoot=UI.createShadowRootWithCoreStyles(this._glassPane.contentElement,'timeline/timelineHistoryManager.css');const contentElement=shadowRoot.createChild('div','drop-down');const listModel=new UI.ListModel();this._listControl=new UI.ListControl(listModel,this,UI.ListMode.NonViewport);this._listControl.element.addEventListener('mousemove',this._onMouseMove.bind(this),false);listModel.replaceAll(models);UI.ARIAUtils.markAsMenu(this._listControl.element);UI.ARIAUtils.setAccessibleName(this._listControl.element,ls`Select Timeline Session`);contentElement.appendChild(this._listControl.element);contentElement.addEventListener('keydown',this._onKeyDown.bind(this),false);contentElement.addEventListener('click',this._onClick.bind(this),false);this._focusRestorer=new UI.ElementFocusRestorer(this._listControl.element);this._selectionDone=null;}
static show(models,currentModel,anchor){if(Timeline.TimelineHistoryManager.DropDown._instance){return Promise.resolve((null));}
const instance=new Timeline.TimelineHistoryManager.DropDown(models);return instance._show(anchor,currentModel);}
static cancelIfShowing(){if(!Timeline.TimelineHistoryManager.DropDown._instance){return;}
Timeline.TimelineHistoryManager.DropDown._instance._close(null);}
_show(anchor,currentModel){Timeline.TimelineHistoryManager.DropDown._instance=this;this._glassPane.setContentAnchorBox(anchor.boxInWindow());this._glassPane.show((this._glassPane.contentElement.ownerDocument));this._listControl.element.focus();this._listControl.selectItem(currentModel);return new Promise(fulfill=>this._selectionDone=fulfill);}
_onMouseMove(event){const node=event.target.enclosingNodeOrSelfWithClass('preview-item');const listItem=node&&this._listControl.itemForNode(node);if(!listItem){return;}
this._listControl.selectItem(listItem);}
_onClick(event){if(!event.target.enclosingNodeOrSelfWithClass('preview-item')){return;}
this._close(this._listControl.selectedItem());}
_onKeyDown(event){switch(event.key){case'Tab':case'Escape':this._close(null);break;case'Enter':this._close(this._listControl.selectedItem());break;default:return;}
event.consume(true);}
_close(model){this._selectionDone(model);this._focusRestorer.restore();this._glassPane.hide();Timeline.TimelineHistoryManager.DropDown._instance=null;}
createElementForItem(item){const element=Timeline.TimelineHistoryManager._previewElement(item);UI.ARIAUtils.markAsMenuItem(element);element.classList.remove('selected');return element;}
heightForItem(item){console.assert(false,'Should not be called');return 0;}
isItemSelectable(item){return true;}
selectedItemChanged(from,to,fromElement,toElement){if(fromElement){fromElement.classList.remove('selected');}
if(toElement){toElement.classList.add('selected');}}};Timeline.TimelineHistoryManager.DropDown._instance=null;Timeline.TimelineHistoryManager.ToolbarButton=class extends UI.ToolbarItem{constructor(action){super(createElementWithClass('button','history-dropdown-button'));UI.appendStyle(this.element,'timeline/historyToolbarButton.css');this._contentElement=this.element.createChild('span','content');const dropdownArrowIcon=UI.Icon.create('smallicon-triangle-down');this.element.appendChild(dropdownArrowIcon);this.element.addEventListener('click',()=>void action.execute(),false);this.setEnabled(action.enabled());action.addEventListener(UI.Action.Events.Enabled,event=>this.setEnabled((event.data)));this.setTitle(action.title());}
setText(text){this._contentElement.textContent=text;}};;Timeline.TimelineTreeView=class extends UI.VBox{constructor(){super();this._model=null;this._track=null;this._tree=null;this.element.classList.add('timeline-tree-view');}
static eventNameForSorting(event){if(event.name===TimelineModel.TimelineModel.RecordType.JSFrame){const data=event.args['data'];return data['functionName']+'@'+(data['scriptId']||data['url']||'');}
return event.name+':@'+TimelineModel.TimelineProfileTree.eventURL(event);}
setSearchableView(searchableView){this._searchableView=searchableView;}
setModel(model,track){this._model=model;this._track=track;this.refreshTree();}
getToolbarInputAccessiblePlaceHolder(){return'';}
model(){return this._model;}
init(){this._linkifier=new Components.Linkifier();this._taskFilter=new TimelineModel.ExclusiveNameFilter([TimelineModel.TimelineModel.RecordType.Task]);this._textFilter=new Timeline.TimelineFilters.RegExp();this._currentThreadSetting=Common.settings.createSetting('timelineTreeCurrentThread',0);this._currentThreadSetting.addChangeListener(this.refreshTree,this);const columns=([]);this.populateColumns(columns);this._splitWidget=new UI.SplitWidget(true,true,'timelineTreeViewDetailsSplitWidget');const mainView=new UI.VBox();const toolbar=new UI.Toolbar('',mainView.element);this.populateToolbar(toolbar);this._dataGrid=new DataGrid.SortableDataGrid(columns);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged,this._sortingChanged,this);this._dataGrid.element.addEventListener('mousemove',this._onMouseMove.bind(this),true);this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last);this._dataGrid.setRowContextMenuCallback(this._onContextMenu.bind(this));this._dataGrid.asWidget().show(mainView.element);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._updateDetailsForSelection,this);this._detailsView=new UI.VBox();this._detailsView.element.classList.add('timeline-details-view','timeline-details-view-body');this._splitWidget.setMainWidget(mainView);this._splitWidget.setSidebarWidget(this._detailsView);this._splitWidget.hideSidebar();this._splitWidget.show(this.element);this._splitWidget.addEventListener(UI.SplitWidget.Events.ShowModeChanged,this._onShowModeChanged,this);this._lastSelectedNode;}
lastSelectedNode(){return this._lastSelectedNode;}
updateContents(selection){this.setRange(selection.startTime(),selection.endTime());}
setRange(startTime,endTime){this._startTime=startTime;this._endTime=endTime;this.refreshTree();}
filters(){return[this._taskFilter,this._textFilter,...this._model.filters()];}
filtersWithoutTextFilter(){return[this._taskFilter,...this._model.filters()];}
textFilter(){return this._textFilter;}
_exposePercentages(){return false;}
populateToolbar(toolbar){this._textFilterUI=new UI.ToolbarInput(Common.UIString('Filter'),this.getToolbarInputAccessiblePlaceHolder());this._textFilterUI.addEventListener(UI.ToolbarInput.Event.TextChanged,textFilterChanged,this);toolbar.appendToolbarItem(this._textFilterUI);function textFilterChanged(){const searchQuery=this._textFilterUI.value();this._textFilter.setRegExp(searchQuery?createPlainTextSearchRegex(searchQuery,'i'):null);this.refreshTree();}}
_modelEvents(){return this._track?this._track.syncEvents():[];}
_onHover(node){}
_appendContextMenuItems(contextMenu,node){}
_linkifyLocation(event){const target=this._model.timelineModel().targetByEvent(event);if(!target){return null;}
const frame=TimelineModel.TimelineProfileTree.eventStackFrame(event);if(!frame){return null;}
return this._linkifier.maybeLinkifyConsoleCallFrame(target,frame);}
selectProfileNode(treeNode,suppressSelectedEvent){const pathToRoot=[];for(let node=treeNode;node;node=node.parent){pathToRoot.push(node);}
for(let i=pathToRoot.length-1;i>0;--i){const gridNode=this.dataGridNodeForTreeNode(pathToRoot[i]);if(gridNode&&gridNode.dataGrid){gridNode.expand();}}
const gridNode=this.dataGridNodeForTreeNode(treeNode);if(gridNode.dataGrid){gridNode.reveal();gridNode.select(suppressSelectedEvent);}}
refreshTree(){this._linkifier.reset();this._dataGrid.rootNode().removeChildren();if(!this._model){this._updateDetailsForSelection();return;}
this._root=this._buildTree();const children=this._root.children();let maxSelfTime=0;let maxTotalTime=0;const totalUsedTime=this._root.totalTime-this._root.selfTime;for(const child of children.values()){maxSelfTime=Math.max(maxSelfTime,child.selfTime);maxTotalTime=Math.max(maxTotalTime,child.totalTime);}
for(const child of children.values()){const gridNode=new Timeline.TimelineTreeView.TreeGridNode(child,totalUsedTime,maxSelfTime,maxTotalTime,this);this._dataGrid.insertChild(gridNode);}
this._sortingChanged();this._updateDetailsForSelection();if(this._searchableView){this._searchableView.refreshSearch();}
const rootNode=this._dataGrid.rootNode();if(rootNode.children.length>0){rootNode.children[0].select();}}
_buildTree(){throw new Error('Not Implemented');}
buildTopDownTree(doNotAggregate,groupIdCallback){return new TimelineModel.TimelineProfileTree.TopDownRootNode(this._modelEvents(),this.filters(),this._startTime,this._endTime,doNotAggregate,groupIdCallback);}
populateColumns(columns){columns.push({id:'self',title:Common.UIString('Self Time'),width:'120px',fixedWidth:true,sortable:true});columns.push({id:'total',title:Common.UIString('Total Time'),width:'120px',fixedWidth:true,sortable:true});columns.push({id:'activity',title:Common.UIString('Activity'),disclosure:true,sortable:true});}
_sortingChanged(){const columnId=this._dataGrid.sortColumnId();if(!columnId){return;}
let sortFunction;switch(columnId){case'startTime':sortFunction=compareStartTime;break;case'self':sortFunction=compareNumericField.bind(null,'selfTime');break;case'total':sortFunction=compareNumericField.bind(null,'totalTime');break;case'activity':sortFunction=compareName;break;default:console.assert(false,'Unknown sort field: '+columnId);return;}
this._dataGrid.sortNodes(sortFunction,!this._dataGrid.isSortOrderAscending());function compareNumericField(field,a,b){const nodeA=(a);const nodeB=(b);return nodeA._profileNode[field]-nodeB._profileNode[field];}
function compareStartTime(a,b){const nodeA=(a);const nodeB=(b);return nodeA._profileNode.event.startTime-nodeB._profileNode.event.startTime;}
function compareName(a,b){const nodeA=(a);const nodeB=(b);const nameA=Timeline.TimelineTreeView.eventNameForSorting(nodeA._profileNode.event);const nameB=Timeline.TimelineTreeView.eventNameForSorting(nodeB._profileNode.event);return nameA.localeCompare(nameB);}}
_onShowModeChanged(){if(this._splitWidget.showMode()===UI.SplitWidget.ShowMode.OnlyMain){return;}
this._lastSelectedNode=undefined;this._updateDetailsForSelection();}
_updateDetailsForSelection(){const selectedNode=this._dataGrid.selectedNode?(this._dataGrid.selectedNode)._profileNode:null;if(selectedNode===this._lastSelectedNode){return;}
this._lastSelectedNode=selectedNode;if(this._splitWidget.showMode()===UI.SplitWidget.ShowMode.OnlyMain){return;}
this._detailsView.detachChildWidgets();this._detailsView.element.removeChildren();if(selectedNode&&this._showDetailsForNode(selectedNode)){return;}
const banner=this._detailsView.element.createChild('div','full-widget-dimmed-banner');banner.createTextChild(Common.UIString('Select item for details.'));}
_showDetailsForNode(node){return false;}
_onMouseMove(event){const gridNode=event.target&&(event.target instanceof Node)?(this._dataGrid.dataGridNodeFromNode((event.target))):null;const profileNode=gridNode&&gridNode._profileNode;if(profileNode===this._lastHoveredProfileNode){return;}
this._lastHoveredProfileNode=profileNode;this._onHover(profileNode);}
_onContextMenu(contextMenu,gridNode){if(gridNode._linkElement&&!contextMenu.containsTarget(gridNode._linkElement)){contextMenu.appendApplicableItems(gridNode._linkElement);}
const profileNode=gridNode._profileNode;if(profileNode){this._appendContextMenuItems(contextMenu,profileNode);}}
dataGridNodeForTreeNode(treeNode){return treeNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol]||null;}
searchCanceled(){this._searchResults=[];this._currentResult=0;}
performSearch(searchConfig,shouldJump,jumpBackwards){this._searchResults=[];this._currentResult=0;if(!this._root){return;}
const searchRegex=searchConfig.toSearchRegex();this._searchResults=this._root.searchTree(event=>Timeline.TimelineUIUtils.testContentMatching(event,searchRegex));this._searchableView.updateSearchMatchesCount(this._searchResults.length);}
jumpToNextSearchResult(){if(!this._searchResults.length){return;}
this.selectProfileNode(this._searchResults[this._currentResult],false);this._currentResult=mod(this._currentResult+1,this._searchResults.length);}
jumpToPreviousSearchResult(){if(!this._searchResults.length){return;}
this.selectProfileNode(this._searchResults[this._currentResult],false);this._currentResult=mod(this._currentResult-1,this._searchResults.length);}
supportsCaseSensitiveSearch(){return true;}
supportsRegexSearch(){return true;}};Timeline.TimelineTreeView.GridNode=class extends DataGrid.SortableDataGridNode{constructor(profileNode,grandTotalTime,maxSelfTime,maxTotalTime,treeView){super(null,false);this._populated=false;this._profileNode=profileNode;this._treeView=treeView;this._grandTotalTime=grandTotalTime;this._maxSelfTime=maxSelfTime;this._maxTotalTime=maxTotalTime;this._linkElement=null;}
createCell(columnId){if(columnId==='activity'){return this._createNameCell(columnId);}
return this._createValueCell(columnId)||super.createCell(columnId);}
_createNameCell(columnId){const cell=this.createTD(columnId);const container=cell.createChild('div','name-container');const iconContainer=container.createChild('div','activity-icon-container');const icon=iconContainer.createChild('div','activity-icon');const name=container.createChild('div','activity-name');const event=this._profileNode.event;if(this._profileNode.isGroupNode()){const treeView=(this._treeView);const info=treeView._displayInfoForGroupNode(this._profileNode);name.textContent=info.name;icon.style.backgroundColor=info.color;if(info.icon){iconContainer.insertBefore(info.icon,icon);}}else if(event){const data=event.args['data'];const deoptReason=data&&data['deoptReason'];if(deoptReason){container.createChild('div','activity-warning').title=Common.UIString('Not optimized: %s',deoptReason);}
name.textContent=Timeline.TimelineUIUtils.eventTitle(event);this._linkElement=this._treeView._linkifyLocation(event);if(this._linkElement){container.createChild('div','activity-link').appendChild(this._linkElement);}
const eventStyle=Timeline.TimelineUIUtils.eventStyle(event);const eventCategory=eventStyle.category;UI.ARIAUtils.setAccessibleName(icon,eventCategory.title);icon.style.backgroundColor=eventCategory.color;}
return cell;}
_createValueCell(columnId){if(columnId!=='self'&&columnId!=='total'&&columnId!=='startTime'){return null;}
let showPercents=false;let value;let maxTime;switch(columnId){case'startTime':value=this._profileNode.event.startTime-this._treeView._model.timelineModel().minimumRecordTime();break;case'self':value=this._profileNode.selfTime;maxTime=this._maxSelfTime;showPercents=true;break;case'total':value=this._profileNode.totalTime;maxTime=this._maxTotalTime;showPercents=true;break;default:return null;}
const cell=this.createTD(columnId);cell.className='numeric-column';const textDiv=cell.createChild('div');textDiv.createChild('span').textContent=Common.UIString('%.1f\xa0ms',value);if(showPercents&&this._treeView._exposePercentages()){textDiv.createChild('span','percent-column').textContent=Common.UIString('%.1f\xa0%%',value/this._grandTotalTime*100);}
if(maxTime){textDiv.classList.add('background-percent-bar');cell.createChild('div','background-bar-container').createChild('div','background-bar').style.width=(value*100/maxTime).toFixed(1)+'%';}
return cell;}};Timeline.TimelineTreeView.TreeGridNode=class extends Timeline.TimelineTreeView.GridNode{constructor(profileNode,grandTotalTime,maxSelfTime,maxTotalTime,treeView){super(profileNode,grandTotalTime,maxSelfTime,maxTotalTime,treeView);this.setHasChildren(this._profileNode.hasChildren());profileNode[Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol]=this;}
populate(){if(this._populated){return;}
this._populated=true;if(!this._profileNode.children){return;}
for(const node of this._profileNode.children().values()){const gridNode=new Timeline.TimelineTreeView.TreeGridNode(node,this._grandTotalTime,this._maxSelfTime,this._maxTotalTime,this._treeView);this.insertChildOrdered(gridNode);}}};Timeline.TimelineTreeView.TreeGridNode._gridNodeSymbol=Symbol('treeGridNode');Timeline.AggregatedTimelineTreeView=class extends Timeline.TimelineTreeView{constructor(){super();this._groupBySetting=Common.settings.createSetting('timelineTreeGroupBy',Timeline.AggregatedTimelineTreeView.GroupBy.None);this._groupBySetting.addChangeListener(this.refreshTree.bind(this));this.init();this._stackView=new Timeline.TimelineStackView(this);this._stackView.addEventListener(Timeline.TimelineStackView.Events.SelectionChanged,this._onStackViewSelectionChanged,this);this._productByURLCache=new Map();this._colorByURLCache=new Map();}
setModel(model,track){super.setModel(model,track);}
updateContents(selection){this._updateExtensionResolver();super.updateContents(selection);const rootNode=this._dataGrid.rootNode();if(rootNode.children.length){rootNode.children[0].select();}}
_updateExtensionResolver(){this._executionContextNamesByOrigin=new Map();for(const runtimeModel of SDK.targetManager.models(SDK.RuntimeModel)){for(const context of runtimeModel.executionContexts()){this._executionContextNamesByOrigin.set(context.origin,context.name);}}}
_beautifyDomainName(name){if(Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(name)){name=Common.UIString('[Chrome extensions overhead]');}else if(Timeline.AggregatedTimelineTreeView._isV8NativeURL(name)){name=Common.UIString('[V8 Runtime]');}else if(name.startsWith('chrome-extension')){name=this._executionContextNamesByOrigin.get(name)||name;}
return name;}
_displayInfoForGroupNode(node){const categories=Timeline.TimelineUIUtils.categories();const color=node.id?Timeline.TimelineUIUtils.eventColor((node.event)):categories['other'].color;const unattributed=Common.UIString('[unattributed]');const id=typeof node.id==='symbol'?undefined:node.id;switch(this._groupBySetting.get()){case Timeline.AggregatedTimelineTreeView.GroupBy.Category:{const category=id?categories[id]||categories['other']:unattributed;return{name:category.title,color:category.color};}
case Timeline.AggregatedTimelineTreeView.GroupBy.Domain:case Timeline.AggregatedTimelineTreeView.GroupBy.Subdomain:{const domainName=id?this._beautifyDomainName(id):undefined;return{name:domainName||unattributed,color:color};}
case Timeline.AggregatedTimelineTreeView.GroupBy.EventName:{const name=node.event.name===TimelineModel.TimelineModel.RecordType.JSFrame?Common.UIString('JavaScript'):Timeline.TimelineUIUtils.eventTitle(node.event);return{name:name,color:node.event.name===TimelineModel.TimelineModel.RecordType.JSFrame?Timeline.TimelineUIUtils.eventStyle(node.event).category.color:color};}
case Timeline.AggregatedTimelineTreeView.GroupBy.URL:break;case Timeline.AggregatedTimelineTreeView.GroupBy.Frame:{const frame=id?this._model.timelineModel().pageFrameById(id):undefined;const frameName=frame?Timeline.TimelineUIUtils.displayNameForFrame(frame,80):Common.UIString('Page');return{name:frameName,color:color};}
default:console.assert(false,'Unexpected grouping type');}
return{name:id||unattributed,color:color};}
populateToolbar(toolbar){super.populateToolbar(toolbar);const groupBy=Timeline.AggregatedTimelineTreeView.GroupBy;const options=[{label:Common.UIString('No Grouping'),value:groupBy.None},{label:Common.UIString('Group by Activity'),value:groupBy.EventName},{label:Common.UIString('Group by Category'),value:groupBy.Category},{label:Common.UIString('Group by Domain'),value:groupBy.Domain},{label:Common.UIString('Group by Frame'),value:groupBy.Frame},{label:Common.UIString('Group by Subdomain'),value:groupBy.Subdomain},{label:Common.UIString('Group by URL'),value:groupBy.URL},];toolbar.appendToolbarItem(new UI.ToolbarSettingComboBox(options,this._groupBySetting,ls`Group by`));toolbar.appendSpacer();toolbar.appendToolbarItem(this._splitWidget.createShowHideSidebarButton(Common.UIString('heaviest stack')));}
_buildHeaviestStack(treeNode){console.assert(!!treeNode.parent,'Attempt to build stack for tree root');let result=[];for(let node=treeNode;node&&node.parent;node=node.parent){result.push(node);}
result=result.reverse();for(let node=treeNode;node&&node.children()&&node.children().size;){const children=Array.from(node.children().values());node=children.reduce((a,b)=>a.totalTime>b.totalTime?a:b);result.push(node);}
return result;}
_exposePercentages(){return true;}
_onStackViewSelectionChanged(){const treeNode=this._stackView.selectedTreeNode();if(treeNode){this.selectProfileNode(treeNode,true);}}
_showDetailsForNode(node){const stack=this._buildHeaviestStack(node);this._stackView.setStack(stack,node);this._stackView.show(this._detailsView.element);return true;}
_groupingFunction(groupBy){const GroupBy=Timeline.AggregatedTimelineTreeView.GroupBy;switch(groupBy){case GroupBy.None:return null;case GroupBy.EventName:return event=>Timeline.TimelineUIUtils.eventStyle(event).title;case GroupBy.Category:return event=>Timeline.TimelineUIUtils.eventStyle(event).category.name;case GroupBy.Subdomain:return this._domainByEvent.bind(this,false);case GroupBy.Domain:return this._domainByEvent.bind(this,true);case GroupBy.URL:return event=>TimelineModel.TimelineProfileTree.eventURL(event)||'';case GroupBy.Frame:return event=>TimelineModel.TimelineData.forEvent(event).frameId;default:console.assert(false,`Unexpected aggregation setting: ${groupBy}`);return null;}}
_domainByEvent(groupSubdomains,event){const url=TimelineModel.TimelineProfileTree.eventURL(event);if(!url){return'';}
if(Timeline.AggregatedTimelineTreeView._isExtensionInternalURL(url)){return Timeline.AggregatedTimelineTreeView._extensionInternalPrefix;}
if(Timeline.AggregatedTimelineTreeView._isV8NativeURL(url)){return Timeline.AggregatedTimelineTreeView._v8NativePrefix;}
const parsedURL=url.asParsedURL();if(!parsedURL){return'';}
if(parsedURL.scheme==='chrome-extension'){return parsedURL.scheme+'://'+parsedURL.host;}
if(!groupSubdomains){return parsedURL.host;}
if(/^[.0-9]+$/.test(parsedURL.host)){return parsedURL.host;}
const domainMatch=/([^.]*\.)?[^.]*$/.exec(parsedURL.host);return domainMatch&&domainMatch[0]||'';}
_appendContextMenuItems(contextMenu,node){if(this._groupBySetting.get()!==Timeline.AggregatedTimelineTreeView.GroupBy.Frame){return;}
if(!node.isGroupNode()){return;}
const frame=this._model.timelineModel().pageFrameById((node.id));if(!frame||!frame.ownerNode){return;}
contextMenu.appendApplicableItems(frame.ownerNode);}
static _isExtensionInternalURL(url){return url.startsWith(Timeline.AggregatedTimelineTreeView._extensionInternalPrefix);}
static _isV8NativeURL(url){return url.startsWith(Timeline.AggregatedTimelineTreeView._v8NativePrefix);}};Timeline.AggregatedTimelineTreeView._extensionInternalPrefix='extensions::';Timeline.AggregatedTimelineTreeView._v8NativePrefix='native ';Timeline.AggregatedTimelineTreeView.GroupBy={None:'None',EventName:'EventName',Category:'Category',Domain:'Domain',Subdomain:'Subdomain',URL:'URL',Frame:'Frame'};Timeline.CallTreeTimelineTreeView=class extends Timeline.AggregatedTimelineTreeView{constructor(){super();this._dataGrid.markColumnAsSortedBy('total',DataGrid.DataGrid.Order.Descending);}
getToolbarInputAccessiblePlaceHolder(){return ls`Filter call tree`;}
_buildTree(){const grouping=this._groupBySetting.get();return this.buildTopDownTree(false,this._groupingFunction(grouping));}};Timeline.BottomUpTimelineTreeView=class extends Timeline.AggregatedTimelineTreeView{constructor(){super();this._dataGrid.markColumnAsSortedBy('self',DataGrid.DataGrid.Order.Descending);}
getToolbarInputAccessiblePlaceHolder(){return ls`Filter bottom-up`;}
_buildTree(){return new TimelineModel.TimelineProfileTree.BottomUpRootNode(this._modelEvents(),this.textFilter(),this.filtersWithoutTextFilter(),this._startTime,this._endTime,this._groupingFunction(this._groupBySetting.get()));}};Timeline.TimelineStackView=class extends UI.VBox{constructor(treeView){super();const header=this.element.createChild('div','timeline-stack-view-header');header.textContent=Common.UIString('Heaviest stack');this._treeView=treeView;const columns=([{id:'total',title:Common.UIString('Total Time'),fixedWidth:true,width:'110px'},{id:'activity',title:Common.UIString('Activity')}]);this._dataGrid=new DataGrid.ViewportDataGrid(columns);this._dataGrid.setResizeMethod(DataGrid.DataGrid.ResizeMethod.Last);this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SelectedNode,this._onSelectionChanged,this);this._dataGrid.asWidget().show(this.element);}
setStack(stack,selectedNode){const rootNode=this._dataGrid.rootNode();rootNode.removeChildren();let nodeToReveal=null;const totalTime=Math.max.apply(Math,stack.map(node=>node.totalTime));for(const node of stack){const gridNode=new Timeline.TimelineTreeView.GridNode(node,totalTime,totalTime,totalTime,this._treeView);rootNode.appendChild(gridNode);if(node===selectedNode){nodeToReveal=gridNode;}}
nodeToReveal.revealAndSelect();}
selectedTreeNode(){const selectedNode=this._dataGrid.selectedNode;return selectedNode&&(selectedNode)._profileNode;}
_onSelectionChanged(){this.dispatchEventToListeners(Timeline.TimelineStackView.Events.SelectionChanged);}};Timeline.TimelineStackView.Events={SelectionChanged:Symbol('SelectionChanged')};;Timeline.EventsTimelineTreeView=class extends Timeline.TimelineTreeView{constructor(delegate){super();this._filtersControl=new Timeline.EventsTimelineTreeView.Filters();this._filtersControl.addEventListener(Timeline.EventsTimelineTreeView.Filters.Events.FilterChanged,this._onFilterChanged,this);this.init();this._delegate=delegate;this._dataGrid.markColumnAsSortedBy('startTime',DataGrid.DataGrid.Order.Ascending);this._splitWidget.showBoth();}
filters(){return[...super.filters(),...this._filtersControl.filters()];}
updateContents(selection){super.updateContents(selection);if(selection.type()===Timeline.TimelineSelection.Type.TraceEvent){const event=(selection.object());this._selectEvent(event,true);}}
getToolbarInputAccessiblePlaceHolder(){return ls`Filter event log`;}
_buildTree(){this._currentTree=this.buildTopDownTree(true,null);return this._currentTree;}
_onFilterChanged(){const selectedEvent=this.lastSelectedNode()&&this.lastSelectedNode().event;this.refreshTree();if(selectedEvent){this._selectEvent(selectedEvent,false);}}
_findNodeWithEvent(event){const iterators=[this._currentTree.children().values()];while(iterators.length){const iterator=iterators.peekLast().next();if(iterator.done){iterators.pop();continue;}
const child=(iterator.value);if(child.event===event){return child;}
iterators.push(child.children().values());}
return null;}
_selectEvent(event,expand){const node=this._findNodeWithEvent(event);if(!node){return;}
this.selectProfileNode(node,false);if(expand){this.dataGridNodeForTreeNode(node).expand();}}
populateColumns(columns){columns.push({id:'startTime',title:Common.UIString('Start Time'),width:'80px',fixedWidth:true,sortable:true});super.populateColumns(columns);columns.filter(c=>c.fixedWidth).forEach(c=>c.width='80px');}
populateToolbar(toolbar){super.populateToolbar(toolbar);this._filtersControl.populateToolbar(toolbar);}
_showDetailsForNode(node){const traceEvent=node.event;if(!traceEvent){return false;}
Timeline.TimelineUIUtils.buildTraceEventDetails(traceEvent,this.model().timelineModel(),this._linkifier,false).then(fragment=>this._detailsView.element.appendChild(fragment));return true;}
_onHover(node){this._delegate.highlightEvent(node&&node.event);}};Timeline.EventsTimelineTreeView.Filters=class extends Common.Object{constructor(){super();this._categoryFilter=new Timeline.TimelineFilters.Category();this._durationFilter=new Timeline.TimelineFilters.IsLong();this._filters=[this._categoryFilter,this._durationFilter];}
filters(){return this._filters;}
populateToolbar(toolbar){const durationFilterUI=new UI.ToolbarComboBox(durationFilterChanged.bind(this),ls`Duration filter`);for(const durationMs of Timeline.EventsTimelineTreeView.Filters._durationFilterPresetsMs){durationFilterUI.addOption(durationFilterUI.createOption(durationMs?Common.UIString('\u2265 %d\xa0ms',durationMs):Common.UIString('All'),String(durationMs)));}
toolbar.appendToolbarItem(durationFilterUI);const categoryFiltersUI={};const categories=Timeline.TimelineUIUtils.categories();for(const categoryName in categories){const category=categories[categoryName];if(!category.visible){continue;}
const checkbox=new UI.ToolbarCheckbox(category.title,undefined,categoriesFilterChanged.bind(this,categoryName));checkbox.setChecked(true);checkbox.inputElement.style.backgroundColor=category.color;categoryFiltersUI[category.name]=checkbox;toolbar.appendToolbarItem(checkbox);}
function durationFilterChanged(){const duration=durationFilterUI.selectedOption().value;const minimumRecordDuration=parseInt(duration,10);this._durationFilter.setMinimumRecordDuration(minimumRecordDuration);this._notifyFiltersChanged();}
function categoriesFilterChanged(name){const categories=Timeline.TimelineUIUtils.categories();categories[name].hidden=!categoryFiltersUI[name].checked();this._notifyFiltersChanged();}}
_notifyFiltersChanged(){this.dispatchEventToListeners(Timeline.EventsTimelineTreeView.Filters.Events.FilterChanged);}};Timeline.EventsTimelineTreeView.Filters._durationFilterPresetsMs=[0,1,15];Timeline.EventsTimelineTreeView.Filters.Events={FilterChanged:Symbol('FilterChanged')};;Timeline.TimelineUIUtils=class{static _initEventStyles(){if(Timeline.TimelineUIUtils._eventStylesMap){return Timeline.TimelineUIUtils._eventStylesMap;}
const type=TimelineModel.TimelineModel.RecordType;const categories=Timeline.TimelineUIUtils.categories();const rendering=categories['rendering'];const scripting=categories['scripting'];const loading=categories['loading'];const painting=categories['painting'];const other=categories['other'];const idle=categories['idle'];const eventStyles={};eventStyles[type.Task]=new Timeline.TimelineRecordStyle(ls`Task`,other);eventStyles[type.Program]=new Timeline.TimelineRecordStyle(ls`Other`,other);eventStyles[type.Animation]=new Timeline.TimelineRecordStyle(ls`Animation`,rendering);eventStyles[type.EventDispatch]=new Timeline.TimelineRecordStyle(ls`Event`,scripting);eventStyles[type.RequestMainThreadFrame]=new Timeline.TimelineRecordStyle(ls`Request Main Thread Frame`,rendering,true);eventStyles[type.BeginFrame]=new Timeline.TimelineRecordStyle(ls`Frame Start`,rendering,true);eventStyles[type.BeginMainThreadFrame]=new Timeline.TimelineRecordStyle(ls`Frame Start (main thread)`,rendering,true);eventStyles[type.DrawFrame]=new Timeline.TimelineRecordStyle(ls`Draw Frame`,rendering,true);eventStyles[type.HitTest]=new Timeline.TimelineRecordStyle(ls`Hit Test`,rendering);eventStyles[type.ScheduleStyleRecalculation]=new Timeline.TimelineRecordStyle(ls`Schedule Style Recalculation`,rendering);eventStyles[type.RecalculateStyles]=new Timeline.TimelineRecordStyle(ls`Recalculate Style`,rendering);eventStyles[type.UpdateLayoutTree]=new Timeline.TimelineRecordStyle(ls`Recalculate Style`,rendering);eventStyles[type.InvalidateLayout]=new Timeline.TimelineRecordStyle(ls`Invalidate Layout`,rendering,true);eventStyles[type.Layout]=new Timeline.TimelineRecordStyle(ls`Layout`,rendering);eventStyles[type.PaintSetup]=new Timeline.TimelineRecordStyle(ls`Paint Setup`,painting);eventStyles[type.PaintImage]=new Timeline.TimelineRecordStyle(ls`Paint Image`,painting,true);eventStyles[type.UpdateLayer]=new Timeline.TimelineRecordStyle(ls`Update Layer`,painting,true);eventStyles[type.UpdateLayerTree]=new Timeline.TimelineRecordStyle(ls`Update Layer Tree`,rendering);eventStyles[type.Paint]=new Timeline.TimelineRecordStyle(ls`Paint`,painting);eventStyles[type.RasterTask]=new Timeline.TimelineRecordStyle(ls`Rasterize Paint`,painting);eventStyles[type.ScrollLayer]=new Timeline.TimelineRecordStyle(ls`Scroll`,rendering);eventStyles[type.CompositeLayers]=new Timeline.TimelineRecordStyle(ls`Composite Layers`,painting);eventStyles[type.ParseHTML]=new Timeline.TimelineRecordStyle(ls`Parse HTML`,loading);eventStyles[type.ParseAuthorStyleSheet]=new Timeline.TimelineRecordStyle(ls`Parse Stylesheet`,loading);eventStyles[type.TimerInstall]=new Timeline.TimelineRecordStyle(ls`Install Timer`,scripting);eventStyles[type.TimerRemove]=new Timeline.TimelineRecordStyle(ls`Remove Timer`,scripting);eventStyles[type.TimerFire]=new Timeline.TimelineRecordStyle(ls`Timer Fired`,scripting);eventStyles[type.XHRReadyStateChange]=new Timeline.TimelineRecordStyle(ls`XHR Ready State Change`,scripting);eventStyles[type.XHRLoad]=new Timeline.TimelineRecordStyle(ls`XHR Load`,scripting);eventStyles[type.CompileScript]=new Timeline.TimelineRecordStyle(ls`Compile Script`,scripting);eventStyles[type.EvaluateScript]=new Timeline.TimelineRecordStyle(ls`Evaluate Script`,scripting);eventStyles[type.CompileModule]=new Timeline.TimelineRecordStyle(ls`Compile Module`,scripting);eventStyles[type.EvaluateModule]=new Timeline.TimelineRecordStyle(ls`Evaluate Module`,scripting);eventStyles[type.StreamingCompileScript]=new Timeline.TimelineRecordStyle(ls`Streaming Compile Task`,other);eventStyles[type.StreamingCompileScriptWaiting]=new Timeline.TimelineRecordStyle(ls`Waiting for Network`,idle);eventStyles[type.StreamingCompileScriptParsing]=new Timeline.TimelineRecordStyle(ls`Parse and Compile`,scripting);eventStyles[type.WasmStreamFromResponseCallback]=new Timeline.TimelineRecordStyle(ls`Streaming Wasm Response`,scripting);eventStyles[type.WasmCompiledModule]=new Timeline.TimelineRecordStyle(ls`Compiled Wasm Module`,scripting);eventStyles[type.WasmCachedModule]=new Timeline.TimelineRecordStyle(ls`Cached Wasm Module`,scripting);eventStyles[type.WasmModuleCacheHit]=new Timeline.TimelineRecordStyle(ls`Wasm Module Cache Hit`,scripting);eventStyles[type.WasmModuleCacheInvalid]=new Timeline.TimelineRecordStyle(ls`Wasm Module Cache Invalid`,scripting);eventStyles[type.FrameStartedLoading]=new Timeline.TimelineRecordStyle(ls`Frame Started Loading`,loading,true);eventStyles[type.MarkLoad]=new Timeline.TimelineRecordStyle(ls`Onload Event`,scripting,true);eventStyles[type.MarkDOMContent]=new Timeline.TimelineRecordStyle(ls`DOMContentLoaded Event`,scripting,true);eventStyles[type.MarkFirstPaint]=new Timeline.TimelineRecordStyle(ls`First Paint`,painting,true);eventStyles[type.MarkFCP]=new Timeline.TimelineRecordStyle(ls`First Contentful Paint`,rendering,true);eventStyles[type.MarkFMP]=new Timeline.TimelineRecordStyle(ls`First Meaningful Paint`,rendering,true);eventStyles[type.MarkLCPCandidate]=new Timeline.TimelineRecordStyle(ls`Largest Contentful Paint`,rendering,true);eventStyles[type.TimeStamp]=new Timeline.TimelineRecordStyle(ls`Timestamp`,scripting);eventStyles[type.ConsoleTime]=new Timeline.TimelineRecordStyle(ls`Console Time`,scripting);eventStyles[type.UserTiming]=new Timeline.TimelineRecordStyle(ls`User Timing`,scripting);eventStyles[type.ResourceWillSendRequest]=new Timeline.TimelineRecordStyle(ls`Will Send Request`,loading);eventStyles[type.ResourceSendRequest]=new Timeline.TimelineRecordStyle(ls`Send Request`,loading);eventStyles[type.ResourceReceiveResponse]=new Timeline.TimelineRecordStyle(ls`Receive Response`,loading);eventStyles[type.ResourceFinish]=new Timeline.TimelineRecordStyle(ls`Finish Loading`,loading);eventStyles[type.ResourceReceivedData]=new Timeline.TimelineRecordStyle(ls`Receive Data`,loading);eventStyles[type.RunMicrotasks]=new Timeline.TimelineRecordStyle(ls`Run Microtasks`,scripting);eventStyles[type.FunctionCall]=new Timeline.TimelineRecordStyle(ls`Function Call`,scripting);eventStyles[type.GCEvent]=new Timeline.TimelineRecordStyle(ls`GC Event`,scripting);eventStyles[type.MajorGC]=new Timeline.TimelineRecordStyle(ls`Major GC`,scripting);eventStyles[type.MinorGC]=new Timeline.TimelineRecordStyle(ls`Minor GC`,scripting);eventStyles[type.JSFrame]=new Timeline.TimelineRecordStyle(ls`JS Frame`,scripting);eventStyles[type.RequestAnimationFrame]=new Timeline.TimelineRecordStyle(ls`Request Animation Frame`,scripting);eventStyles[type.CancelAnimationFrame]=new Timeline.TimelineRecordStyle(ls`Cancel Animation Frame`,scripting);eventStyles[type.FireAnimationFrame]=new Timeline.TimelineRecordStyle(ls`Animation Frame Fired`,scripting);eventStyles[type.RequestIdleCallback]=new Timeline.TimelineRecordStyle(ls`Request Idle Callback`,scripting);eventStyles[type.CancelIdleCallback]=new Timeline.TimelineRecordStyle(ls`Cancel Idle Callback`,scripting);eventStyles[type.FireIdleCallback]=new Timeline.TimelineRecordStyle(ls`Fire Idle Callback`,scripting);eventStyles[type.WebSocketCreate]=new Timeline.TimelineRecordStyle(ls`Create WebSocket`,scripting);eventStyles[type.WebSocketSendHandshakeRequest]=new Timeline.TimelineRecordStyle(ls`Send WebSocket Handshake`,scripting);eventStyles[type.WebSocketReceiveHandshakeResponse]=new Timeline.TimelineRecordStyle(ls`Receive WebSocket Handshake`,scripting);eventStyles[type.WebSocketDestroy]=new Timeline.TimelineRecordStyle(ls`Destroy WebSocket`,scripting);eventStyles[type.EmbedderCallback]=new Timeline.TimelineRecordStyle(ls`Embedder Callback`,scripting);eventStyles[type.DecodeImage]=new Timeline.TimelineRecordStyle(ls`Image Decode`,painting);eventStyles[type.ResizeImage]=new Timeline.TimelineRecordStyle(ls`Image Resize`,painting);eventStyles[type.GPUTask]=new Timeline.TimelineRecordStyle(ls`GPU`,categories['gpu']);eventStyles[type.LatencyInfo]=new Timeline.TimelineRecordStyle(ls`Input Latency`,scripting);eventStyles[type.GCCollectGarbage]=new Timeline.TimelineRecordStyle(ls`DOM GC`,scripting);eventStyles[type.CryptoDoEncrypt]=new Timeline.TimelineRecordStyle(ls`Encrypt`,scripting);eventStyles[type.CryptoDoEncryptReply]=new Timeline.TimelineRecordStyle(ls`Encrypt Reply`,scripting);eventStyles[type.CryptoDoDecrypt]=new Timeline.TimelineRecordStyle(ls`Decrypt`,scripting);eventStyles[type.CryptoDoDecryptReply]=new Timeline.TimelineRecordStyle(ls`Decrypt Reply`,scripting);eventStyles[type.CryptoDoDigest]=new Timeline.TimelineRecordStyle(ls`Digest`,scripting);eventStyles[type.CryptoDoDigestReply]=new Timeline.TimelineRecordStyle(ls`Digest Reply`,scripting);eventStyles[type.CryptoDoSign]=new Timeline.TimelineRecordStyle(ls`Sign`,scripting);eventStyles[type.CryptoDoSignReply]=new Timeline.TimelineRecordStyle(ls`Sign Reply`,scripting);eventStyles[type.CryptoDoVerify]=new Timeline.TimelineRecordStyle(ls`Verify`,scripting);eventStyles[type.CryptoDoVerifyReply]=new Timeline.TimelineRecordStyle(ls`Verify Reply`,scripting);eventStyles[type.AsyncTask]=new Timeline.TimelineRecordStyle(ls`Async Task`,categories['async']);Timeline.TimelineUIUtils._eventStylesMap=eventStyles;return eventStyles;}
static setEventStylesMap(eventStyles){Timeline.TimelineUIUtils._eventStylesMap=eventStyles;}
static inputEventDisplayName(inputEventType){if(!Timeline.TimelineUIUtils._inputEventToDisplayName){const inputEvent=TimelineModel.TimelineIRModel.InputEvents;Timeline.TimelineUIUtils._inputEventToDisplayName=new Map([[inputEvent.Char,ls`Key Character`],[inputEvent.KeyDown,ls`Key Down`],[inputEvent.KeyDownRaw,ls`Key Down`],[inputEvent.KeyUp,ls`Key Up`],[inputEvent.Click,ls`Click`],[inputEvent.ContextMenu,ls`Context Menu`],[inputEvent.MouseDown,ls`Mouse Down`],[inputEvent.MouseMove,ls`Mouse Move`],[inputEvent.MouseUp,ls`Mouse Up`],[inputEvent.MouseWheel,ls`Mouse Wheel`],[inputEvent.ScrollBegin,ls`Scroll Begin`],[inputEvent.ScrollEnd,ls`Scroll End`],[inputEvent.ScrollUpdate,ls`Scroll Update`],[inputEvent.FlingStart,ls`Fling Start`],[inputEvent.FlingCancel,ls`Fling Halt`],[inputEvent.Tap,ls`Tap`],[inputEvent.TapCancel,ls`Tap Halt`],[inputEvent.ShowPress,ls`Tap Begin`],[inputEvent.TapDown,ls`Tap Down`],[inputEvent.TouchCancel,ls`Touch Cancel`],[inputEvent.TouchEnd,ls`Touch End`],[inputEvent.TouchMove,ls`Touch Move`],[inputEvent.TouchStart,ls`Touch Start`],[inputEvent.PinchBegin,ls`Pinch Begin`],[inputEvent.PinchEnd,ls`Pinch End`],[inputEvent.PinchUpdate,ls`Pinch Update`]]);}
return Timeline.TimelineUIUtils._inputEventToDisplayName.get(inputEventType)||null;}
static frameDisplayName(frame){if(!TimelineModel.TimelineJSProfileProcessor.isNativeRuntimeFrame(frame)){return UI.beautifyFunctionName(frame.functionName);}
const nativeGroup=TimelineModel.TimelineJSProfileProcessor.nativeGroup(frame.functionName);const groups=TimelineModel.TimelineJSProfileProcessor.NativeGroups;switch(nativeGroup){case groups.Compile:return ls`Compile`;case groups.Parse:return ls`Parse`;}
return frame.functionName;}
static testContentMatching(traceEvent,regExp){const title=Timeline.TimelineUIUtils.eventStyle(traceEvent).title;const tokens=[title];const url=TimelineModel.TimelineData.forEvent(traceEvent).url;if(url){tokens.push(url);}
appendObjectProperties(traceEvent.args,2);return regExp.test(tokens.join('|'));function appendObjectProperties(object,depth){if(!depth){return;}
for(const key in object){const value=object[key];const type=typeof value;if(type==='string'){tokens.push(value);}else if(type==='number'){tokens.push(String(value));}else if(type==='object'){appendObjectProperties(value,depth-1);}}}}
static eventURL(event){const data=event.args['data']||event.args['beginData'];const url=data&&data.url;if(url){return url;}
const stackTrace=data&&data['stackTrace'];const frame=stackTrace&&stackTrace.length&&stackTrace[0]||TimelineModel.TimelineData.forEvent(event).topFrame();return frame&&frame.url||null;}
static eventStyle(event){const eventStyles=Timeline.TimelineUIUtils._initEventStyles();if(event.hasCategory(TimelineModel.TimelineModel.Category.Console)||event.hasCategory(TimelineModel.TimelineModel.Category.UserTiming)){return new Timeline.TimelineRecordStyle(event.name,Timeline.TimelineUIUtils.categories()['scripting']);}
if(event.hasCategory(TimelineModel.TimelineModel.Category.LatencyInfo)){const prefix='InputLatency::';const inputEventType=event.name.startsWith(prefix)?event.name.substr(prefix.length):event.name;const displayName=Timeline.TimelineUIUtils.inputEventDisplayName((inputEventType));return new Timeline.TimelineRecordStyle(displayName||inputEventType,Timeline.TimelineUIUtils.categories()['scripting']);}
let result=eventStyles[event.name];if(!result){result=new Timeline.TimelineRecordStyle(event.name,Timeline.TimelineUIUtils.categories()['other'],true);eventStyles[event.name]=result;}
return result;}
static eventColor(event){if(event.name===TimelineModel.TimelineModel.RecordType.JSFrame){const frame=event.args['data'];if(Timeline.TimelineUIUtils.isUserFrame(frame)){return Timeline.TimelineUIUtils.colorForId(frame.url);}}
const color=Timeline.TimelineUIUtils.eventStyle(event).category.color;if(event.name===TimelineModel.TimelineModel.RecordType.StreamingCompileScriptWaiting){return(Common.Color.parse(Timeline.TimelineUIUtils.categories().scripting.color).setAlpha(0.3).asString(null));}
return color;}
static eventColorByProduct(model,urlToColorCache,event){const url=Timeline.TimelineUIUtils.eventURL(event)||'';let color=urlToColorCache.get(url);if(color){return color;}
const defaultColor='#f2ecdc';const parsedURL=url.asParsedURL();if(!parsedURL){return defaultColor;}
const name=parsedURL.host;const rootFrames=model.rootFrames();if(rootFrames.some(pageFrame=>new Common.ParsedURL(pageFrame.url).host===name)){color=defaultColor;}
if(!color){color=defaultColor;}
urlToColorCache.set(url,color);return color;}
static eventTitle(event){const recordType=TimelineModel.TimelineModel.RecordType;const eventData=event.args['data'];if(event.name===recordType.JSFrame){return Timeline.TimelineUIUtils.frameDisplayName(eventData);}
const title=Timeline.TimelineUIUtils.eventStyle(event).title;if(event.hasCategory(TimelineModel.TimelineModel.Category.Console)){return title;}
if(event.name===recordType.TimeStamp){return ls`${title}: ${eventData['message']}`;}
if(event.name===recordType.Animation&&eventData&&eventData['name']){return ls`${title}: ${eventData['name']}`;}
if(event.name===recordType.EventDispatch&&eventData&&eventData['type']){return ls`${title}: ${eventData['type']}`;}
return title;}
static _interactionPhaseStyles(){let map=Timeline.TimelineUIUtils._interactionPhaseStylesMap;if(!map){map=new Map([[TimelineModel.TimelineIRModel.Phases.Idle,{color:'white',label:'Idle'}],[TimelineModel.TimelineIRModel.Phases.Response,{color:'hsl(43, 83%, 64%)',label:ls`Response`}],[TimelineModel.TimelineIRModel.Phases.Scroll,{color:'hsl(256, 67%, 70%)',label:ls`Scroll`}],[TimelineModel.TimelineIRModel.Phases.Fling,{color:'hsl(256, 67%, 70%)',label:ls`Fling`}],[TimelineModel.TimelineIRModel.Phases.Drag,{color:'hsl(256, 67%, 70%)',label:ls`Drag`}],[TimelineModel.TimelineIRModel.Phases.Animation,{color:'hsl(256, 67%, 70%)',label:ls`Animation`}],[TimelineModel.TimelineIRModel.Phases.Uncategorized,{color:'hsl(0, 0%, 87%)',label:ls`Uncategorized`}]]);Timeline.TimelineUIUtils._interactionPhaseStylesMap=map;}
return map;}
static interactionPhaseColor(phase){return Timeline.TimelineUIUtils._interactionPhaseStyles().get(phase).color;}
static interactionPhaseLabel(phase){return Timeline.TimelineUIUtils._interactionPhaseStyles().get(phase).label;}
static isUserFrame(frame){return frame.scriptId!=='0'&&!(frame.url&&frame.url.startsWith('native '));}
static networkRequestCategory(request){const categories=Timeline.TimelineUIUtils.NetworkCategory;switch(request.mimeType){case'text/html':return categories.HTML;case'application/javascript':case'application/x-javascript':case'text/javascript':return categories.Script;case'text/css':return categories.Style;case'audio/ogg':case'image/gif':case'image/jpeg':case'image/png':case'image/svg+xml':case'image/webp':case'image/x-icon':case'font/opentype':case'font/woff2':case'application/font-woff':return categories.Media;default:return categories.Other;}}
static networkCategoryColor(category){const categories=Timeline.TimelineUIUtils.NetworkCategory;switch(category){case categories.HTML:return'hsl(214, 67%, 66%)';case categories.Script:return'hsl(43, 83%, 64%)';case categories.Style:return'hsl(256, 67%, 70%)';case categories.Media:return'hsl(109, 33%, 55%)';default:return'hsl(0, 0%, 70%)';}}
static buildDetailsTextForTraceEvent(event,target){const recordType=TimelineModel.TimelineModel.RecordType;let detailsText;const eventData=event.args['data'];switch(event.name){case recordType.GCEvent:case recordType.MajorGC:case recordType.MinorGC:{const delta=event.args['usedHeapSizeBefore']-event.args['usedHeapSizeAfter'];detailsText=Common.UIString('%s collected',Number.bytesToString(delta));break;}
case recordType.FunctionCall:if(eventData){detailsText=linkifyLocationAsText(eventData['scriptId'],eventData['lineNumber'],eventData['columnNumber']);}
break;case recordType.JSFrame:detailsText=Timeline.TimelineUIUtils.frameDisplayName(eventData);break;case recordType.EventDispatch:detailsText=eventData?eventData['type']:null;break;case recordType.Paint:{const width=Timeline.TimelineUIUtils.quadWidth(eventData.clip);const height=Timeline.TimelineUIUtils.quadHeight(eventData.clip);if(width&&height){detailsText=Common.UIString('%d\xa0\u00d7\xa0%d',width,height);}
break;}
case recordType.ParseHTML:{const startLine=event.args['beginData']['startLine'];const endLine=event.args['endData']&&event.args['endData']['endLine'];const url=Bindings.displayNameForURL(event.args['beginData']['url']);if(endLine>=0){detailsText=Common.UIString('%s [%s\u2026%s]',url,startLine+1,endLine+1);}else{detailsText=Common.UIString('%s [%s\u2026]',url,startLine+1);}
break;}
case recordType.CompileModule:detailsText=Bindings.displayNameForURL(event.args['fileName']);break;case recordType.CompileScript:case recordType.EvaluateScript:{const url=eventData&&eventData['url'];if(url){detailsText=Bindings.displayNameForURL(url)+':'+(eventData['lineNumber']+1);}
break;}
case recordType.WasmCompiledModule:case recordType.WasmModuleCacheHit:{const url=event.args['url'];if(url){detailsText=Bindings.displayNameForURL(url);}
break;}
case recordType.StreamingCompileScript:case recordType.XHRReadyStateChange:case recordType.XHRLoad:{const url=eventData['url'];if(url){detailsText=Bindings.displayNameForURL(url);}
break;}
case recordType.TimeStamp:detailsText=eventData['message'];break;case recordType.WebSocketCreate:case recordType.WebSocketSendHandshakeRequest:case recordType.WebSocketReceiveHandshakeResponse:case recordType.WebSocketDestroy:case recordType.ResourceWillSendRequest:case recordType.ResourceSendRequest:case recordType.ResourceReceivedData:case recordType.ResourceReceiveResponse:case recordType.ResourceFinish:case recordType.PaintImage:case recordType.DecodeImage:case recordType.ResizeImage:case recordType.DecodeLazyPixelRef:{const url=TimelineModel.TimelineData.forEvent(event).url;if(url){detailsText=Bindings.displayNameForURL(url);}
break;}
case recordType.EmbedderCallback:detailsText=eventData['callbackName'];break;case recordType.Animation:detailsText=eventData&&eventData['name'];break;case recordType.AsyncTask:detailsText=eventData?eventData['name']:null;break;default:if(event.hasCategory(TimelineModel.TimelineModel.Category.Console)){detailsText=null;}else{detailsText=linkifyTopCallFrameAsText();}
break;}
return detailsText;function linkifyLocationAsText(scriptId,lineNumber,columnNumber){const debuggerModel=target?target.model(SDK.DebuggerModel):null;if(!target||target.isDisposed()||!scriptId||!debuggerModel){return null;}
const rawLocation=debuggerModel.createRawLocationByScriptId(scriptId,lineNumber,columnNumber);if(!rawLocation){return null;}
const uiLocation=Bindings.debuggerWorkspaceBinding.rawLocationToUILocation(rawLocation);return uiLocation?uiLocation.linkText():null;}
function linkifyTopCallFrameAsText(){const frame=TimelineModel.TimelineData.forEvent(event).topFrame();if(!frame){return null;}
let text=linkifyLocationAsText(frame.scriptId,frame.lineNumber,frame.columnNumber);if(!text){text=frame.url;if(typeof frame.lineNumber==='number'){text+=':'+(frame.lineNumber+1);}}
return text;}}
static buildDetailsNodeForTraceEvent(event,target,linkifier){const recordType=TimelineModel.TimelineModel.RecordType;let details=null;let detailsText;const eventData=event.args['data'];switch(event.name){case recordType.GCEvent:case recordType.MajorGC:case recordType.MinorGC:case recordType.EventDispatch:case recordType.Paint:case recordType.Animation:case recordType.EmbedderCallback:case recordType.ParseHTML:case recordType.WasmStreamFromResponseCallback:case recordType.WasmCompiledModule:case recordType.WasmModuleCacheHit:case recordType.WasmCachedModule:case recordType.WasmModuleCacheInvalid:case recordType.WebSocketCreate:case recordType.WebSocketSendHandshakeRequest:case recordType.WebSocketReceiveHandshakeResponse:case recordType.WebSocketDestroy:detailsText=Timeline.TimelineUIUtils.buildDetailsTextForTraceEvent(event,target);break;case recordType.PaintImage:case recordType.DecodeImage:case recordType.ResizeImage:case recordType.DecodeLazyPixelRef:case recordType.XHRReadyStateChange:case recordType.XHRLoad:case recordType.ResourceWillSendRequest:case recordType.ResourceSendRequest:case recordType.ResourceReceivedData:case recordType.ResourceReceiveResponse:case recordType.ResourceFinish:{const url=TimelineModel.TimelineData.forEvent(event).url;if(url){details=Components.Linkifier.linkifyURL(url);}
break;}
case recordType.FunctionCall:case recordType.JSFrame:details=createElement('span');details.createTextChild(Timeline.TimelineUIUtils.frameDisplayName(eventData));const location=linkifyLocation(eventData['scriptId'],eventData['url'],eventData['lineNumber'],eventData['columnNumber']);if(location){details.createTextChild(' @ ');details.appendChild(location);}
break;case recordType.CompileModule:details=linkifyLocation('',event.args['fileName'],0,0);break;case recordType.CompileScript:case recordType.EvaluateScript:{const url=eventData['url'];if(url){details=linkifyLocation('',url,eventData['lineNumber'],0);}
break;}
case recordType.StreamingCompileScript:{const url=eventData['url'];if(url){details=linkifyLocation('',url,0,0);}
break;}
default:if(event.hasCategory(TimelineModel.TimelineModel.Category.Console)){detailsText=null;}else{details=linkifyTopCallFrame();}
break;}
if(!details&&detailsText){details=createTextNode(detailsText);}
return details;function linkifyLocation(scriptId,url,lineNumber,columnNumber){return linkifier.linkifyScriptLocation(target,scriptId,url,lineNumber,columnNumber,'timeline-details');}
function linkifyTopCallFrame(){const frame=TimelineModel.TimelineData.forEvent(event).topFrame();return frame?linkifier.maybeLinkifyConsoleCallFrame(target,frame,'timeline-details'):null;}}
static buildDetailsNodeForPerformanceEvent(event){let link='https://developers.google.com/web/fundamentals/performance/user-centric-performance-metrics#user-centric_performance_metrics';let name='page performance metrics';const recordType=TimelineModel.TimelineModel.RecordType;switch(event.name){case recordType.MarkLCPCandidate:link='https://web.dev/largest-contentful-paint';name='largest contentful paint';break;case recordType.MarkFCP:link='https://web.dev/first-contentful-paint';name='first contentful paint';break;case recordType.MarkFMP:link='https://web.dev/first-meaningful-paint/';name='first meaningful paint';break;default:break;}
return UI.html`<div>${UI.XLink.create(link, ls`Learn more`)} about ${name}.</div>`;}
static async buildTraceEventDetails(event,model,linkifier,detailed){const maybeTarget=model.targetByEvent(event);let relatedNodesMap=null;if(maybeTarget){const target=(maybeTarget);if(typeof event[Timeline.TimelineUIUtils._previewElementSymbol]==='undefined'){let previewElement=null;const url=TimelineModel.TimelineData.forEvent(event).url;if(url){previewElement=await Components.ImagePreview.build(target,url,false,{imageAltText:Components.ImagePreview.defaultAltTextForImageURL(url)});}else if(TimelineModel.TimelineData.forEvent(event).picture){previewElement=await Timeline.TimelineUIUtils.buildPicturePreviewContent(event,target);}
event[Timeline.TimelineUIUtils._previewElementSymbol]=previewElement;}
const nodeIdsToResolve=new Set();const timelineData=TimelineModel.TimelineData.forEvent(event);if(timelineData.backendNodeId){nodeIdsToResolve.add(timelineData.backendNodeId);}
const invalidationTrackingEvents=TimelineModel.InvalidationTracker.invalidationEventsFor(event);if(invalidationTrackingEvents){Timeline.TimelineUIUtils._collectInvalidationNodeIds(nodeIdsToResolve,invalidationTrackingEvents);}
if(nodeIdsToResolve.size){const domModel=target.model(SDK.DOMModel);if(domModel){relatedNodesMap=await domModel.pushNodesByBackendIdsToFrontend(nodeIdsToResolve);}}}
const recordTypes=TimelineModel.TimelineModel.RecordType;let relatedNodeLabel;const contentHelper=new Timeline.TimelineDetailsContentHelper(model.targetByEvent(event),linkifier);const color=model.isMarkerEvent(event)?Timeline.TimelineUIUtils.markerStyleForEvent(event).color:Timeline.TimelineUIUtils.eventStyle(event).category.color;contentHelper.addSection(Timeline.TimelineUIUtils.eventTitle(event),color);const eventData=event.args['data'];const timelineData=TimelineModel.TimelineData.forEvent(event);const initiator=timelineData.initiator();let url=null;if(timelineData.warning){contentHelper.appendWarningRow(event);}
if(event.name===recordTypes.JSFrame&&eventData['deoptReason']){contentHelper.appendWarningRow(event,TimelineModel.TimelineModel.WarningType.V8Deopt);}
if(detailed&&!Number.isNaN(event.duration+0)){contentHelper.appendTextRow(ls`Total Time`,Number.millisToString(event.duration,true));contentHelper.appendTextRow(ls`Self Time`,Number.millisToString(event.selfTime,true));}
if(model.isGenericTrace()){for(const key in event.args){try{contentHelper.appendTextRow(key,JSON.stringify(event.args[key]));}catch(e){contentHelper.appendTextRow(key,`<${typeof event.args[key]}>`);}}
return contentHelper.fragment;}
switch(event.name){case recordTypes.GCEvent:case recordTypes.MajorGC:case recordTypes.MinorGC:const delta=event.args['usedHeapSizeBefore']-event.args['usedHeapSizeAfter'];contentHelper.appendTextRow(ls`Collected`,Number.bytesToString(delta));break;case recordTypes.JSFrame:case recordTypes.FunctionCall:const detailsNode=Timeline.TimelineUIUtils.buildDetailsNodeForTraceEvent(event,model.targetByEvent(event),linkifier);if(detailsNode){contentHelper.appendElementRow(ls`Function`,detailsNode);}
break;case recordTypes.TimerFire:case recordTypes.TimerInstall:case recordTypes.TimerRemove:contentHelper.appendTextRow(ls`Timer ID`,eventData['timerId']);if(event.name===recordTypes.TimerInstall){contentHelper.appendTextRow(ls`Timeout`,Number.millisToString(eventData['timeout']));contentHelper.appendTextRow(ls`Repeats`,!eventData['singleShot']);}
break;case recordTypes.FireAnimationFrame:contentHelper.appendTextRow(ls`Callback ID`,eventData['id']);break;case recordTypes.ResourceWillSendRequest:case recordTypes.ResourceSendRequest:case recordTypes.ResourceReceiveResponse:case recordTypes.ResourceReceivedData:case recordTypes.ResourceFinish:url=timelineData.url;if(url){contentHelper.appendElementRow(ls`Resource`,Components.Linkifier.linkifyURL(url));}
if(eventData['requestMethod']){contentHelper.appendTextRow(ls`Request Method`,eventData['requestMethod']);}
if(typeof eventData['statusCode']==='number'){contentHelper.appendTextRow(ls`Status Code`,eventData['statusCode']);}
if(eventData['mimeType']){contentHelper.appendTextRow(ls`MIME Type`,eventData['mimeType']);}
if('priority'in eventData){const priority=PerfUI.uiLabelForNetworkPriority(eventData['priority']);contentHelper.appendTextRow(ls`Priority`,priority);}
if(eventData['encodedDataLength']){contentHelper.appendTextRow(ls`Encoded Data`,ls`${eventData['encodedDataLength']} Bytes`);}
if(eventData['decodedBodyLength']){contentHelper.appendTextRow(ls`Decoded Body`,ls`${eventData['decodedBodyLength']} Bytes`);}
break;case recordTypes.CompileModule:contentHelper.appendLocationRow(ls`Module`,event.args['fileName'],0);break;case recordTypes.CompileScript:url=eventData&&eventData['url'];if(url){contentHelper.appendLocationRow(ls`Script`,url,eventData['lineNumber'],eventData['columnNumber']);}
contentHelper.appendTextRow(ls`Streamed`,eventData['streamed']);const producedCacheSize=eventData&&eventData['producedCacheSize'];if(producedCacheSize){contentHelper.appendTextRow(ls`Produced Cache Size`,producedCacheSize);}
const cacheConsumeOptions=eventData&&eventData['cacheConsumeOptions'];if(cacheConsumeOptions){contentHelper.appendTextRow(ls`Cache Consume Options`,cacheConsumeOptions);contentHelper.appendTextRow(ls`Consumed Cache Size`,eventData['consumedCacheSize']);contentHelper.appendTextRow(ls`Cache Rejected`,eventData['cacheRejected']);}
break;case recordTypes.EvaluateScript:url=eventData&&eventData['url'];if(url){contentHelper.appendLocationRow(ls`Script`,url,eventData['lineNumber'],eventData['columnNumber']);}
break;case recordTypes.WasmStreamFromResponseCallback:case recordTypes.WasmCompiledModule:case recordTypes.WasmCachedModule:case recordTypes.WasmModuleCacheHit:case recordTypes.WasmModuleCacheInvalid:if(eventData){url=event.args['url'];if(url){contentHelper.appendTextRow(ls`Url`,url);}
const producedCachedSize=event.args['producedCachedSize'];if(producedCachedSize){contentHelper.appendTextRow(ls`Produced Cache Size`,producedCachedSize);}
const consumedCachedSize=event.args['consumedCachedSize'];if(consumedCachedSize){contentHelper.appendTextRow(ls`Consumed Cache Size`,consumedCachedSize);}}
break;case recordTypes.Paint:const clip=eventData['clip'];contentHelper.appendTextRow(ls`Location`,ls`(${clip[0]}, ${clip[1]})`);const clipWidth=Timeline.TimelineUIUtils.quadWidth(clip);const clipHeight=Timeline.TimelineUIUtils.quadHeight(clip);contentHelper.appendTextRow(ls`Dimensions`,ls`${clipWidth} × ${clipHeight}`);case recordTypes.PaintSetup:case recordTypes.Rasterize:case recordTypes.ScrollLayer:relatedNodeLabel=ls`Layer Root`;break;case recordTypes.PaintImage:case recordTypes.DecodeLazyPixelRef:case recordTypes.DecodeImage:case recordTypes.ResizeImage:case recordTypes.DrawLazyPixelRef:relatedNodeLabel=ls`Owner Element`;url=timelineData.url;if(url){contentHelper.appendElementRow(ls`Image URL`,Components.Linkifier.linkifyURL(url));}
break;case recordTypes.ParseAuthorStyleSheet:url=eventData['styleSheetUrl'];if(url){contentHelper.appendElementRow(ls`Stylesheet URL`,Components.Linkifier.linkifyURL(url));}
break;case recordTypes.UpdateLayoutTree:case recordTypes.RecalculateStyles:contentHelper.appendTextRow(ls`Elements Affected`,event.args['elementCount']);break;case recordTypes.Layout:const beginData=event.args['beginData'];contentHelper.appendTextRow(ls`Nodes That Need Layout`,ls`${beginData['dirtyObjects']} of ${beginData['totalObjects']}`);relatedNodeLabel=ls`Layout root`;break;case recordTypes.ConsoleTime:contentHelper.appendTextRow(ls`Message`,event.name);break;case recordTypes.WebSocketCreate:case recordTypes.WebSocketSendHandshakeRequest:case recordTypes.WebSocketReceiveHandshakeResponse:case recordTypes.WebSocketDestroy:const initiatorData=initiator?initiator.args['data']:eventData;if(typeof initiatorData['webSocketURL']!=='undefined'){contentHelper.appendTextRow(ls`URL`,initiatorData['webSocketURL']);}
if(typeof initiatorData['webSocketProtocol']!=='undefined'){contentHelper.appendTextRow(ls`WebSocket Protocol`,initiatorData['webSocketProtocol']);}
if(typeof eventData['message']!=='undefined'){contentHelper.appendTextRow(ls`Message`,eventData['message']);}
break;case recordTypes.EmbedderCallback:contentHelper.appendTextRow(ls`Callback Function`,eventData['callbackName']);break;case recordTypes.Animation:if(event.phase===SDK.TracingModel.Phase.NestableAsyncInstant){contentHelper.appendTextRow(ls`State`,eventData['state']);}
break;case recordTypes.ParseHTML:{const beginData=event.args['beginData'];const startLine=beginData['startLine']-1;const endLine=event.args['endData']?event.args['endData']['endLine']-1:undefined;url=beginData['url'];if(url){contentHelper.appendLocationRange(ls`Range`,url,startLine,endLine);}
break;}
case recordTypes.FireIdleCallback:contentHelper.appendTextRow(ls`Allotted Time`,Number.millisToString(eventData['allottedMilliseconds']));contentHelper.appendTextRow(ls`Invoked by Timeout`,eventData['timedOut']);case recordTypes.RequestIdleCallback:case recordTypes.CancelIdleCallback:contentHelper.appendTextRow(ls`Callback ID`,eventData['id']);break;case recordTypes.EventDispatch:contentHelper.appendTextRow(ls`Type`,eventData['type']);break;case recordTypes.MarkLCPCandidate:contentHelper.appendTextRow(ls`Type`,String(eventData['type']));contentHelper.appendTextRow(ls`Size`,String(eventData['size']));case recordTypes.MarkFirstPaint:case recordTypes.MarkFCP:case recordTypes.MarkFMP:case recordTypes.MarkLoad:case recordTypes.MarkDOMContent:contentHelper.appendTextRow(ls`Timestamp`,Number.preciseMillisToString(event.startTime-model.minimumRecordTime(),1));contentHelper.appendElementRow(ls`Details`,Timeline.TimelineUIUtils.buildDetailsNodeForPerformanceEvent(event));break;default:{const detailsNode=Timeline.TimelineUIUtils.buildDetailsNodeForTraceEvent(event,model.targetByEvent(event),linkifier);if(detailsNode){contentHelper.appendElementRow(ls`Details`,detailsNode);}
break;}}
if(timelineData.timeWaitingForMainThread){contentHelper.appendTextRow(ls`Time Waiting for Main Thread`,Number.millisToString(timelineData.timeWaitingForMainThread,true));}
const relatedNode=relatedNodesMap&&relatedNodesMap.get(timelineData.backendNodeId);if(relatedNode){const nodeSpan=await Common.Linkifier.linkify(relatedNode);contentHelper.appendElementRow(relatedNodeLabel||ls`Related Node`,nodeSpan);}
if(event[Timeline.TimelineUIUtils._previewElementSymbol]){contentHelper.addSection(ls`Preview`);contentHelper.appendElementRow('',event[Timeline.TimelineUIUtils._previewElementSymbol]);}
if(initiator||timelineData.stackTraceForSelfOrInitiator()||TimelineModel.InvalidationTracker.invalidationEventsFor(event)){Timeline.TimelineUIUtils._generateCauses(event,model.targetByEvent(event),relatedNodesMap,contentHelper);}
const stats={};const showPieChart=detailed&&Timeline.TimelineUIUtils._aggregatedStatsForTraceEvent(stats,model,event);if(showPieChart){contentHelper.addSection(ls`Aggregated Time`);const pieChart=Timeline.TimelineUIUtils.generatePieChart(stats,Timeline.TimelineUIUtils.eventStyle(event).category,event.selfTime);contentHelper.appendElementRow('',pieChart);}
return contentHelper.fragment;}
static statsForTimeRange(events,startTime,endTime){if(!events.length){return{'idle':endTime-startTime};}
buildRangeStatsCacheIfNeeded(events);const aggregatedStats=subtractStats(aggregatedStatsAtTime(endTime),aggregatedStatsAtTime(startTime));const aggregatedTotal=Object.values(aggregatedStats).reduce((a,b)=>a+b,0);aggregatedStats['idle']=Math.max(0,endTime-startTime-aggregatedTotal);return aggregatedStats;function aggregatedStatsAtTime(time){const stats={};const cache=events[Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol];for(const category in cache){const categoryCache=cache[category];const index=categoryCache.time.upperBound(time);let value;if(index===0){value=0;}else if(index===categoryCache.time.length){value=categoryCache.value.peekLast();}else{const t0=categoryCache.time[index-1];const t1=categoryCache.time[index];const v0=categoryCache.value[index-1];const v1=categoryCache.value[index];value=v0+(v1-v0)*(time-t0)/(t1-t0);}
stats[category]=value;}
return stats;}
function subtractStats(a,b){const result=Object.assign({},a);for(const key in b){result[key]-=b[key];}
return result;}
function buildRangeStatsCacheIfNeeded(events){if(events[Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol]){return;}
const aggregatedStats={};const categoryStack=[];let lastTime=0;TimelineModel.TimelineModel.forEachEvent(events,onStartEvent,onEndEvent,undefined,undefined,undefined,filterForStats());function filterForStats(){const visibleEventsFilter=Timeline.TimelineUIUtils.visibleEventsFilter();return event=>visibleEventsFilter.accept(event)||SDK.TracingModel.isTopLevelEvent(event);}
function updateCategory(category,time){let statsArrays=aggregatedStats[category];if(!statsArrays){statsArrays={time:[],value:[]};aggregatedStats[category]=statsArrays;}
if(statsArrays.time.length&&statsArrays.time.peekLast()===time){return;}
const lastValue=statsArrays.value.length?statsArrays.value.peekLast():0;statsArrays.value.push(lastValue+time-lastTime);statsArrays.time.push(time);}
function categoryChange(from,to,time){if(from){updateCategory(from,time);}
lastTime=time;if(to){updateCategory(to,time);}}
function onStartEvent(e){const category=Timeline.TimelineUIUtils.eventStyle(e).category.name;const parentCategory=categoryStack.length?categoryStack.peekLast():null;if(category!==parentCategory){categoryChange(parentCategory,category,e.startTime);}
categoryStack.push(category);}
function onEndEvent(e){const category=categoryStack.pop();const parentCategory=categoryStack.length?categoryStack.peekLast():null;if(category!==parentCategory){categoryChange(category,parentCategory,e.endTime);}}
const obj=(events);obj[Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol]=aggregatedStats;}}
static async buildNetworkRequestDetails(request,model,linkifier){const target=model.targetByEvent(request.children[0]);const contentHelper=new Timeline.TimelineDetailsContentHelper(target,linkifier);const category=Timeline.TimelineUIUtils.networkRequestCategory(request);const color=Timeline.TimelineUIUtils.networkCategoryColor(category);contentHelper.addSection(ls`Network request`,color);if(request.url){contentHelper.appendElementRow(ls`URL`,Components.Linkifier.linkifyURL(request.url));}
const fullDuration=request.endTime-(request.getStartTime()||-Infinity);if(isFinite(fullDuration)){let textRow=Number.millisToString(fullDuration,true);const networkDuration=request.finishTime-request.getStartTime();const processingDuration=request.endTime-request.finishTime;if(isFinite(networkDuration)&&isFinite(processingDuration)){const networkDurationStr=Number.millisToString(networkDuration,true);const processingDurationStr=Number.millisToString(processingDuration,true);const cacheOrNetworkLabel=request.cached()?ls`load from cache`:ls`network transfer`;textRow+=ls` (${networkDurationStr} ${cacheOrNetworkLabel} + ${processingDurationStr} resource loading)`;}
contentHelper.appendTextRow(ls`Duration`,textRow);}
if(request.requestMethod){contentHelper.appendTextRow(ls`Request Method`,request.requestMethod);}
if(typeof request.priority==='string'){const priority=PerfUI.uiLabelForNetworkPriority((request.priority));contentHelper.appendTextRow(ls`Priority`,priority);}
if(request.mimeType){contentHelper.appendTextRow(ls`Mime Type`,request.mimeType);}
let lengthText='';if(request.memoryCached()){lengthText+=ls` (from memory cache)`;}else if(request.cached()){lengthText+=ls` (from cache)`;}else if(request.timing&&request.timing.pushStart){lengthText+=ls` (from push)`;}
if(request.fromServiceWorker){lengthText+=ls` (from service worker)`;}
if(request.encodedDataLength||!lengthText){lengthText=`${Number.bytesToString(request.encodedDataLength)}${lengthText}`;}
contentHelper.appendTextRow(ls`Encoded Data`,lengthText);if(request.decodedBodyLength){contentHelper.appendTextRow(ls`Decoded Body`,Number.bytesToString(request.decodedBodyLength));}
const title=ls`Initiator`;const sendRequest=request.children[0];const topFrame=TimelineModel.TimelineData.forEvent(sendRequest).topFrame();if(topFrame){const link=linkifier.maybeLinkifyConsoleCallFrame(target,topFrame);if(link){contentHelper.appendElementRow(title,link);}}else{const initiator=TimelineModel.TimelineData.forEvent(sendRequest).initiator();if(initiator){const initiatorURL=TimelineModel.TimelineData.forEvent(initiator).url;if(initiatorURL){const link=linkifier.maybeLinkifyScriptLocation(target,null,initiatorURL,0);if(link){contentHelper.appendElementRow(title,link);}}}}
if(!request.previewElement&&request.url&&target){request.previewElement=await Components.ImagePreview.build(target,request.url,false,{imageAltText:Components.ImagePreview.defaultAltTextForImageURL(request.url)});}
if(request.previewElement){contentHelper.appendElementRow(ls`Preview`,request.previewElement);}
return contentHelper.fragment;}
static _stackTraceFromCallFrames(callFrames){return({callFrames:callFrames});}
static _generateCauses(event,target,relatedNodesMap,contentHelper){const recordTypes=TimelineModel.TimelineModel.RecordType;let callSiteStackLabel;let stackLabel;switch(event.name){case recordTypes.TimerFire:callSiteStackLabel=ls`Timer Installed`;break;case recordTypes.FireAnimationFrame:callSiteStackLabel=ls`Animation Frame Requested`;break;case recordTypes.FireIdleCallback:callSiteStackLabel=ls`Idle Callback Requested`;break;case recordTypes.UpdateLayoutTree:case recordTypes.RecalculateStyles:stackLabel=ls`Recalculation Forced`;break;case recordTypes.Layout:callSiteStackLabel=ls`First Layout Invalidation`;stackLabel=ls`Layout Forced`;break;}
const timelineData=TimelineModel.TimelineData.forEvent(event);if(timelineData.stackTrace&&timelineData.stackTrace.length){contentHelper.addSection(ls`Call Stacks`);contentHelper.appendStackTrace(stackLabel||ls`Stack Trace`,Timeline.TimelineUIUtils._stackTraceFromCallFrames(timelineData.stackTrace));}
const initiator=TimelineModel.TimelineData.forEvent(event).initiator();if(TimelineModel.InvalidationTracker.invalidationEventsFor(event)&&target){contentHelper.addSection(ls`Invalidations`);Timeline.TimelineUIUtils._generateInvalidations(event,target,relatedNodesMap,contentHelper);}else if(initiator){const delay=event.startTime-initiator.startTime;contentHelper.appendTextRow(ls`Pending for`,Number.preciseMillisToString(delay,1));const link=createElementWithClass('span','devtools-link');link.textContent=ls`Reveal`;link.addEventListener('click',()=>{Timeline.TimelinePanel.instance().select(Timeline.TimelineSelection.fromTraceEvent((initiator)));});contentHelper.appendElementRow(ls`Initiator`,link);const initiatorStackTrace=TimelineModel.TimelineData.forEvent(initiator).stackTrace;if(initiatorStackTrace){contentHelper.appendStackTrace(callSiteStackLabel||ls`First Invalidated`,Timeline.TimelineUIUtils._stackTraceFromCallFrames(initiatorStackTrace));}}}
static _generateInvalidations(event,target,relatedNodesMap,contentHelper){const invalidationTrackingEvents=TimelineModel.InvalidationTracker.invalidationEventsFor(event);const invalidations={};invalidationTrackingEvents.forEach(function(invalidation){if(!invalidations[invalidation.type]){invalidations[invalidation.type]=[invalidation];}else{invalidations[invalidation.type].push(invalidation);}});Object.keys(invalidations).forEach(function(type){Timeline.TimelineUIUtils._generateInvalidationsForType(type,target,invalidations[type],relatedNodesMap,contentHelper);});}
static _generateInvalidationsForType(type,target,invalidations,relatedNodesMap,contentHelper){let title;switch(type){case TimelineModel.TimelineModel.RecordType.StyleRecalcInvalidationTracking:title=ls`Style Invalidations`;break;case TimelineModel.TimelineModel.RecordType.LayoutInvalidationTracking:title=ls`Layout Invalidations`;break;default:title=ls`Other Invalidations`;break;}
const invalidationsTreeOutline=new UI.TreeOutlineInShadow();invalidationsTreeOutline.registerRequiredCSS('timeline/invalidationsTree.css');invalidationsTreeOutline.element.classList.add('invalidations-tree');const invalidationGroups=groupInvalidationsByCause(invalidations);invalidationGroups.forEach(function(group){const groupElement=new Timeline.TimelineUIUtils.InvalidationsGroupElement(target,relatedNodesMap,contentHelper,group);invalidationsTreeOutline.appendChild(groupElement);});contentHelper.appendElementRow(title,invalidationsTreeOutline.element,false,true);function groupInvalidationsByCause(invalidations){const causeToInvalidationMap=new Map();for(let index=0;index<invalidations.length;index++){const invalidation=invalidations[index];let causeKey='';if(invalidation.cause.reason){causeKey+=invalidation.cause.reason+'.';}
if(invalidation.cause.stackTrace){invalidation.cause.stackTrace.forEach(function(stackFrame){causeKey+=stackFrame['functionName']+'.';causeKey+=stackFrame['scriptId']+'.';causeKey+=stackFrame['url']+'.';causeKey+=stackFrame['lineNumber']+'.';causeKey+=stackFrame['columnNumber']+'.';});}
if(causeToInvalidationMap.has(causeKey)){causeToInvalidationMap.get(causeKey).push(invalidation);}else{causeToInvalidationMap.set(causeKey,[invalidation]);}}
return causeToInvalidationMap.valuesArray();}}
static _collectInvalidationNodeIds(nodeIds,invalidations){nodeIds.addAll(invalidations.map(invalidation=>invalidation.nodeId).filter(id=>id));}
static _aggregatedStatsForTraceEvent(total,model,event){const events=model.inspectedTargetEvents();function eventComparator(startTime,e){return startTime-e.startTime;}
const index=events.binaryIndexOf(event.startTime,eventComparator);if(index<0){return false;}
let hasChildren=false;const endTime=event.endTime;if(endTime){for(let i=index;i<events.length;i++){const nextEvent=events[i];if(nextEvent.startTime>=endTime){break;}
if(!nextEvent.selfTime){continue;}
if(nextEvent.thread!==event.thread){continue;}
if(i>index){hasChildren=true;}
const categoryName=Timeline.TimelineUIUtils.eventStyle(nextEvent).category.name;total[categoryName]=(total[categoryName]||0)+nextEvent.selfTime;}}
if(SDK.TracingModel.isAsyncPhase(event.phase)){if(event.endTime){let aggregatedTotal=0;for(const categoryName in total){aggregatedTotal+=total[categoryName];}
total['idle']=Math.max(0,event.endTime-event.startTime-aggregatedTotal);}
return false;}
return hasChildren;}
static async buildPicturePreviewContent(event,target){const snapshotWithRect=await new TimelineModel.LayerPaintEvent(event,target).snapshotPromise();if(!snapshotWithRect){return null;}
const imageURLPromise=snapshotWithRect.snapshot.replay();snapshotWithRect.snapshot.release();const imageURL=await imageURLPromise;if(!imageURL){return null;}
const container=createElement('div');UI.appendStyle(container,'components/imagePreview.css');container.classList.add('image-preview-container','vbox','link');const img=container.createChild('img');img.src=imageURL;img.alt=Components.ImagePreview.defaultAltTextForImageURL(imageURL);const paintProfilerButton=container.createChild('a');paintProfilerButton.textContent=ls`Paint Profiler`;container.addEventListener('click',()=>Timeline.TimelinePanel.instance().select(Timeline.TimelineSelection.fromTraceEvent(event)),false);return container;}
static createEventDivider(event,zeroTime){const eventDivider=createElementWithClass('div','resources-event-divider');const startTime=Number.millisToString(event.startTime-zeroTime);eventDivider.title=Common.UIString('%s at %s',Timeline.TimelineUIUtils.eventTitle(event),startTime);const style=Timeline.TimelineUIUtils.markerStyleForEvent(event);if(style.tall){eventDivider.style.backgroundColor=style.color;}
return eventDivider;}
static _visibleTypes(){const eventStyles=Timeline.TimelineUIUtils._initEventStyles();const result=[];for(const name in eventStyles){if(!eventStyles[name].hidden){result.push(name);}}
return result;}
static visibleEventsFilter(){return new TimelineModel.TimelineVisibleEventsFilter(Timeline.TimelineUIUtils._visibleTypes());}
static categories(){if(Timeline.TimelineUIUtils._categories){return Timeline.TimelineUIUtils._categories;}
Timeline.TimelineUIUtils._categories={loading:new Timeline.TimelineCategory('loading',ls`Loading`,true,'hsl(214, 67%, 74%)','hsl(214, 67%, 66%)'),scripting:new Timeline.TimelineCategory('scripting',ls`Scripting`,true,'hsl(43, 83%, 72%)','hsl(43, 83%, 64%) '),rendering:new Timeline.TimelineCategory('rendering',ls`Rendering`,true,'hsl(256, 67%, 76%)','hsl(256, 67%, 70%)'),painting:new Timeline.TimelineCategory('painting',ls`Painting`,true,'hsl(109, 33%, 64%)','hsl(109, 33%, 55%)'),gpu:new Timeline.TimelineCategory('gpu',ls`GPU`,false,'hsl(109, 33%, 64%)','hsl(109, 33%, 55%)'),async:new Timeline.TimelineCategory('async',ls`Async`,false,'hsl(0, 100%, 50%)','hsl(0, 100%, 40%)'),other:new Timeline.TimelineCategory('other',ls`System`,false,'hsl(0, 0%, 87%)','hsl(0, 0%, 79%)'),idle:new Timeline.TimelineCategory('idle',ls`Idle`,false,'hsl(0, 0%, 98%)','hsl(0, 0%, 98%)')};return Timeline.TimelineUIUtils._categories;}
static setCategories(categories){Timeline.TimelineUIUtils._categories=categories;}
static getTimelineMainEventCategories(){if(Timeline.TimelineUIUtils._eventCategories){return Timeline.TimelineUIUtils._eventCategories;}
Timeline.TimelineUIUtils._eventCategories=['idle','loading','painting','rendering','scripting','other'];return Timeline.TimelineUIUtils._eventCategories;}
static setTimelineMainEventCategories(categories){Timeline.TimelineUIUtils._eventCategories=categories;}
static generatePieChart(aggregatedStats,selfCategory,selfTime){let total=0;for(const categoryName in aggregatedStats){total+=aggregatedStats[categoryName];}
const element=createElementWithClass('div','timeline-details-view-pie-chart-wrapper hbox');const pieChart=new PerfUI.PieChart({chartName:ls`Time spent in rendering`,size:110,formatter:value=>Number.preciseMillisToString(value),showLegend:true,});pieChart.element.classList.add('timeline-details-view-pie-chart');pieChart.setTotal(total);const pieChartContainer=element.createChild('div','vbox');pieChartContainer.appendChild(pieChart.element);function appendLegendRow(name,title,value,color){if(!value){return;}
pieChart.addSlice(value,color,title);}
if(selfCategory){if(selfTime){appendLegendRow(selfCategory.name,Common.UIString('%s (self)',selfCategory.title),selfTime,selfCategory.color);}
const categoryTime=aggregatedStats[selfCategory.name];const value=categoryTime-selfTime;if(value>0){appendLegendRow(selfCategory.name,Common.UIString('%s (children)',selfCategory.title),value,selfCategory.childColor);}}
for(const categoryName in Timeline.TimelineUIUtils.categories()){const category=Timeline.TimelineUIUtils.categories()[categoryName];if(category===selfCategory){continue;}
appendLegendRow(category.name,category.title,aggregatedStats[category.name],category.childColor);}
return element;}
static generateDetailsContentForFrame(frame,filmStripFrame){const contentHelper=new Timeline.TimelineDetailsContentHelper(null,null);contentHelper.addSection(ls`Frame`);const duration=Timeline.TimelineUIUtils.frameDuration(frame);contentHelper.appendElementRow(ls`Duration`,duration,frame.hasWarnings());const durationInMillis=frame.endTime-frame.startTime;contentHelper.appendTextRow(ls`FPS`,Math.floor(1000/durationInMillis));contentHelper.appendTextRow(ls`CPU time`,Number.millisToString(frame.cpuTime,true));if(filmStripFrame){const filmStripPreview=createElementWithClass('div','timeline-filmstrip-preview');filmStripFrame.imageDataPromise().then(data=>UI.loadImageFromData(data)).then(image=>image&&filmStripPreview.appendChild(image));contentHelper.appendElementRow('',filmStripPreview);filmStripPreview.addEventListener('click',frameClicked.bind(null,filmStripFrame),false);}
if(frame.layerTree){contentHelper.appendElementRow(ls`Layer tree`,Components.Linkifier.linkifyRevealable(frame.layerTree,ls`Show`));}
function frameClicked(filmStripFrame){new PerfUI.FilmStripView.Dialog(filmStripFrame,0);}
return contentHelper.fragment;}
static frameDuration(frame){const durationText=Common.UIString('%s (at %s)',Number.millisToString(frame.endTime-frame.startTime,true),Number.millisToString(frame.startTimeOffset,true));if(!frame.hasWarnings()){return UI.formatLocalized('%s',[durationText]);}
const link=UI.XLink.create('https://developers.google.com/web/fundamentals/performance/rendering/',ls`jank`);return UI.formatLocalized('%s. Long frame times are an indication of %s',[durationText,link]);}
static createFillStyle(context,width,height,color0,color1,color2){const gradient=context.createLinearGradient(0,0,width,height);gradient.addColorStop(0,color0);gradient.addColorStop(0.25,color1);gradient.addColorStop(0.75,color1);gradient.addColorStop(1,color2);return gradient;}
static quadWidth(quad){return Math.round(Math.sqrt(Math.pow(quad[0]-quad[2],2)+Math.pow(quad[1]-quad[3],2)));}
static quadHeight(quad){return Math.round(Math.sqrt(Math.pow(quad[0]-quad[6],2)+Math.pow(quad[1]-quad[7],2)));}
static eventDispatchDesciptors(){if(Timeline.TimelineUIUtils._eventDispatchDesciptors){return Timeline.TimelineUIUtils._eventDispatchDesciptors;}
const lightOrange='hsl(40,100%,80%)';const orange='hsl(40,100%,50%)';const green='hsl(90,100%,40%)';const purple='hsl(256,100%,75%)';Timeline.TimelineUIUtils._eventDispatchDesciptors=[new Timeline.TimelineUIUtils.EventDispatchTypeDescriptor(1,lightOrange,['mousemove','mouseenter','mouseleave','mouseout','mouseover']),new Timeline.TimelineUIUtils.EventDispatchTypeDescriptor(1,lightOrange,['pointerover','pointerout','pointerenter','pointerleave','pointermove']),new Timeline.TimelineUIUtils.EventDispatchTypeDescriptor(2,green,['wheel']),new Timeline.TimelineUIUtils.EventDispatchTypeDescriptor(3,orange,['click','mousedown','mouseup']),new Timeline.TimelineUIUtils.EventDispatchTypeDescriptor(3,orange,['touchstart','touchend','touchmove','touchcancel']),new Timeline.TimelineUIUtils.EventDispatchTypeDescriptor(3,orange,['pointerdown','pointerup','pointercancel','gotpointercapture','lostpointercapture']),new Timeline.TimelineUIUtils.EventDispatchTypeDescriptor(3,purple,['keydown','keyup','keypress'])];return Timeline.TimelineUIUtils._eventDispatchDesciptors;}
static markerShortTitle(event){const recordTypes=TimelineModel.TimelineModel.RecordType;switch(event.name){case recordTypes.MarkDOMContent:return ls`DCL`;case recordTypes.MarkLoad:return ls`L`;case recordTypes.MarkFirstPaint:return ls`FP`;case recordTypes.MarkFCP:return ls`FCP`;case recordTypes.MarkFMP:return ls`FMP`;case recordTypes.MarkLCPCandidate:return ls`LCP`;}
return null;}
static markerStyleForEvent(event){const tallMarkerDashStyle=[6,4];const title=Timeline.TimelineUIUtils.eventTitle(event);if(event.hasCategory(TimelineModel.TimelineModel.Category.Console)||event.hasCategory(TimelineModel.TimelineModel.Category.UserTiming)){return{title:title,dashStyle:tallMarkerDashStyle,lineWidth:0.5,color:event.hasCategory(TimelineModel.TimelineModel.Category.UserTiming)?'purple':'orange',tall:false,lowPriority:false,};}
const recordTypes=TimelineModel.TimelineModel.RecordType;let tall=false;let color='grey';switch(event.name){case recordTypes.FrameStartedLoading:color='green';tall=true;break;case recordTypes.MarkDOMContent:color='#0867CB';tall=true;break;case recordTypes.MarkLoad:color='#B31412';tall=true;break;case recordTypes.MarkFirstPaint:color='#228847';tall=true;break;case recordTypes.MarkFCP:color='#1A6937';tall=true;break;case recordTypes.MarkFMP:color='#134A26';tall=true;break;case recordTypes.MarkLCPCandidate:color='#1A3422';tall=true;break;case recordTypes.TimeStamp:color='orange';break;}
return{title:title,dashStyle:tallMarkerDashStyle,lineWidth:0.5,color:color,tall:tall,lowPriority:false,};}
static markerStyleForFrame(){return{title:ls`Frame`,color:'rgba(100, 100, 100, 0.4)',lineWidth:3,dashStyle:[3],tall:true,lowPriority:true};}
static colorForId(id){if(!Timeline.TimelineUIUtils.colorForId._colorGenerator){Timeline.TimelineUIUtils.colorForId._colorGenerator=new Common.Color.Generator({min:30,max:330},{min:50,max:80,count:3},85);Timeline.TimelineUIUtils.colorForId._colorGenerator.setColorForID('','#f2ecdc');}
return Timeline.TimelineUIUtils.colorForId._colorGenerator.colorForID(id);}
static eventWarning(event,warningType){const timelineData=TimelineModel.TimelineData.forEvent(event);const warning=warningType||timelineData.warning;if(!warning){return null;}
const warnings=TimelineModel.TimelineModel.WarningType;const span=createElement('span');const eventData=event.args['data'];switch(warning){case warnings.ForcedStyle:case warnings.ForcedLayout:const forcedReflowLink=UI.createDocumentationLink('../../fundamentals/performance/rendering/avoid-large-complex-layouts-and-layout-thrashing#avoid-forced-synchronous-layouts',ls`Forced reflow`);span.appendChild(UI.formatLocalized('%s is a likely performance bottleneck.',[forcedReflowLink]));break;case warnings.IdleDeadlineExceeded:const exceededMs=Number.millisToString(event.duration-eventData['allottedMilliseconds'],true);span.textContent=ls`Idle callback execution extended beyond deadline by ${exceededMs}`;break;case warnings.LongHandler:span.textContent=Common.UIString('Handler took %s',Number.millisToString(event.duration,true));break;case warnings.LongRecurringHandler:span.textContent=Common.UIString('Recurring handler took %s',Number.millisToString(event.duration,true));break;case warnings.LongTask:const longTaskLink=UI.createDocumentationLink('../../fundamentals/performance/rail#goals-and-guidelines',ls`Long task`);span.appendChild(UI.formatLocalized('%s took %s.',[longTaskLink,Number.millisToString(event.duration,true)]));break;case warnings.V8Deopt:span.appendChild(UI.XLink.create('https://github.com/GoogleChrome/devtools-docs/issues/53',Common.UIString('Not optimized')));span.createTextChild(Common.UIString(': %s',eventData['deoptReason']));break;default:console.assert(false,'Unhandled TimelineModel.WarningType');}
return span;}
static displayNameForFrame(frame,trimAt){const url=frame.url;if(!trimAt){trimAt=30;}
return url.startsWith('about:')?`"${frame.name.trimMiddle(trimAt)}"`:frame.url.trimEnd(trimAt);}};Timeline.TimelineRecordStyle=class{constructor(title,category,hidden=false){this.title=title;this.category=category;this.hidden=hidden;}};Timeline.TimelineUIUtils.NetworkCategory={HTML:Symbol('HTML'),Script:Symbol('Script'),Style:Symbol('Style'),Media:Symbol('Media'),Other:Symbol('Other')};Timeline.TimelineUIUtils._aggregatedStatsKey=Symbol('aggregatedStats');Timeline.TimelineUIUtils.InvalidationsGroupElement=class extends UI.TreeElement{constructor(target,relatedNodesMap,contentHelper,invalidations){super('',true);this.listItemElement.classList.add('header');this.selectable=false;this.toggleOnClick=true;this._relatedNodesMap=relatedNodesMap;this._contentHelper=contentHelper;this._invalidations=invalidations;this.title=this._createTitle(target);}
_createTitle(target){const first=this._invalidations[0];const reason=first.cause.reason||ls`Unknown cause`;const topFrame=first.cause.stackTrace&&first.cause.stackTrace[0];const truncatedNodesElement=this._getTruncatedNodesElement(this._invalidations);if(truncatedNodesElement===null){return UI.formatLocalized(reason,[]);}
const title=UI.formatLocalized('%s for %s',[reason,truncatedNodesElement]);if(topFrame&&this._contentHelper.linkifier()){const stack=createElementWithClass('span','monospace');const completeTitle=UI.formatLocalized('%s. %s',[title,stack]);stack.createChild('span').textContent=Timeline.TimelineUIUtils.frameDisplayName(topFrame);const link=this._contentHelper.linkifier().maybeLinkifyConsoleCallFrame(target,topFrame);if(link){stack.createChild('span').textContent=' @ ';stack.createChild('span').appendChild(link);}
return completeTitle;}
return title;}
async onpopulate(){const content=createElementWithClass('div','content');const first=this._invalidations[0];if(first.cause.stackTrace){const stack=content.createChild('div');stack.createTextChild(ls`Stack trace:`);this._contentHelper.createChildStackTraceElement(stack,Timeline.TimelineUIUtils._stackTraceFromCallFrames(first.cause.stackTrace));}
content.createTextChild(this._invalidations.length!==1?ls`Nodes:`:ls`Node:`);const nodeList=content.createChild('div','node-list');let firstNode=true;for(let i=0;i<this._invalidations.length;i++){const invalidation=this._invalidations[i];const invalidationNode=this._createInvalidationNode(invalidation,true);if(invalidationNode){if(!firstNode){nodeList.createTextChild(ls`, `);}
firstNode=false;nodeList.appendChild(invalidationNode);const extraData=invalidation.extraData?', '+invalidation.extraData:'';if(invalidation.changedId){nodeList.createTextChild(Common.UIString('(changed id to "%s"%s)',invalidation.changedId,extraData));}else if(invalidation.changedClass){nodeList.createTextChild(Common.UIString('(changed class to "%s"%s)',invalidation.changedClass,extraData));}else if(invalidation.changedAttribute){nodeList.createTextChild(Common.UIString('(changed attribute to "%s"%s)',invalidation.changedAttribute,extraData));}else if(invalidation.changedPseudo){nodeList.createTextChild(Common.UIString('(changed pesudo to "%s"%s)',invalidation.changedPseudo,extraData));}else if(invalidation.selectorPart){nodeList.createTextChild(Common.UIString('(changed "%s"%s)',invalidation.selectorPart,extraData));}}}
const contentTreeElement=new UI.TreeElement(content,false);contentTreeElement.selectable=false;this.appendChild(contentTreeElement);}
_getTruncatedNodesElement(invalidations){const invalidationNodes=[];const invalidationNodeIdMap={};for(let i=0;i<invalidations.length;i++){const invalidation=invalidations[i];const invalidationNode=this._createInvalidationNode(invalidation,false);invalidationNode.addEventListener('click',e=>e.consume(),false);if(invalidationNode&&!invalidationNodeIdMap[invalidation.nodeId]){invalidationNodes.push(invalidationNode);invalidationNodeIdMap[invalidation.nodeId]=true;}}
if(invalidationNodes.length===1){return invalidationNodes[0];}else if(invalidationNodes.length===2){return UI.formatLocalized('%s and %s',invalidationNodes);}else if(invalidationNodes.length===3){return UI.formatLocalized('%s, %s, and 1 other',invalidationNodes.slice(0,2));}else if(invalidationNodes.length>=4){return UI.formatLocalized('%s, %s, and %s others',[...invalidationNodes.slice(0,2),(invalidationNodes.length-2).toString()]);}
return null;}
_createInvalidationNode(invalidation,showUnknownNodes){const node=(invalidation.nodeId&&this._relatedNodesMap)?this._relatedNodesMap.get(invalidation.nodeId):null;if(node){const nodeSpan=createElement('span');Common.Linkifier.linkify(node).then(link=>nodeSpan.appendChild(link));return nodeSpan;}
if(invalidation.nodeName){const nodeSpan=createElement('span');nodeSpan.textContent=Common.UIString('[ %s ]',invalidation.nodeName);return nodeSpan;}
if(showUnknownNodes){const nodeSpan=createElement('span');return nodeSpan.createTextChild(Common.UIString('[ unknown node ]'));}}};Timeline.TimelineUIUtils._previewElementSymbol=Symbol('previewElement');Timeline.TimelineUIUtils.EventDispatchTypeDescriptor=class{constructor(priority,color,eventTypes){this.priority=priority;this.color=color;this.eventTypes=eventTypes;}};Timeline.TimelineCategory=class extends Common.Object{constructor(name,title,visible,childColor,color){super();this.name=name;this.title=title;this.visible=visible;this.childColor=childColor;this.color=color;this.hidden=false;}
get hidden(){return this._hidden;}
set hidden(hidden){this._hidden=hidden;this.dispatchEventToListeners(Timeline.TimelineCategory.Events.VisibilityChanged,this);}};Timeline.TimelineCategory.Events={VisibilityChanged:Symbol('VisibilityChanged')};Timeline.TimelineMarkerStyle;Timeline.TimelinePopupContentHelper=class{constructor(title){this._contentTable=createElement('table');const titleCell=this._createCell(Common.UIString('%s - Details',title),'timeline-details-title');titleCell.colSpan=2;const titleRow=createElement('tr');titleRow.appendChild(titleCell);this._contentTable.appendChild(titleRow);}
contentTable(){return this._contentTable;}
_createCell(content,styleName){const text=createElement('label');text.createTextChild(String(content));const cell=createElement('td');cell.className='timeline-details';if(styleName){cell.className+=' '+styleName;}
cell.textContent=content;return cell;}
appendTextRow(title,content){const row=createElement('tr');row.appendChild(this._createCell(title,'timeline-details-row-title'));row.appendChild(this._createCell(content,'timeline-details-row-data'));this._contentTable.appendChild(row);}
appendElementRow(title,content){const row=createElement('tr');const titleCell=this._createCell(title,'timeline-details-row-title');row.appendChild(titleCell);const cell=createElement('td');cell.className='details';if(content instanceof Node){cell.appendChild(content);}else{cell.createTextChild(content||'');}
row.appendChild(cell);this._contentTable.appendChild(row);}};Timeline.TimelineDetailsContentHelper=class{constructor(target,linkifier){this.fragment=createDocumentFragment();this._linkifier=linkifier;this._target=target;this.element=createElementWithClass('div','timeline-details-view-block');this._tableElement=this.element.createChild('div','vbox timeline-details-chip-body');this.fragment.appendChild(this.element);}
addSection(title,swatchColor){if(!this._tableElement.hasChildNodes()){this.element.removeChildren();}else{this.element=createElementWithClass('div','timeline-details-view-block');this.fragment.appendChild(this.element);}
if(title){const titleElement=this.element.createChild('div','timeline-details-chip-title');if(swatchColor){titleElement.createChild('div').style.backgroundColor=swatchColor;}
titleElement.createTextChild(title);}
this._tableElement=this.element.createChild('div','vbox timeline-details-chip-body');this.fragment.appendChild(this.element);}
linkifier(){return this._linkifier;}
appendTextRow(title,value){const rowElement=this._tableElement.createChild('div','timeline-details-view-row');rowElement.createChild('div','timeline-details-view-row-title').textContent=title;rowElement.createChild('div','timeline-details-view-row-value').textContent=value;}
appendElementRow(title,content,isWarning,isStacked){const rowElement=this._tableElement.createChild('div','timeline-details-view-row');if(isWarning){rowElement.classList.add('timeline-details-warning');}
if(isStacked){rowElement.classList.add('timeline-details-stack-values');}
const titleElement=rowElement.createChild('div','timeline-details-view-row-title');titleElement.textContent=title;const valueElement=rowElement.createChild('div','timeline-details-view-row-value');if(content instanceof Node){valueElement.appendChild(content);}else{valueElement.createTextChild(content||'');}}
appendLocationRow(title,url,startLine,startColumn){if(!this._linkifier||!this._target){return;}
const link=this._linkifier.maybeLinkifyScriptLocation(this._target,null,url,startLine,startColumn);if(!link){return;}
this.appendElementRow(title,link);}
appendLocationRange(title,url,startLine,endLine){if(!this._linkifier||!this._target){return;}
const locationContent=createElement('span');const link=this._linkifier.maybeLinkifyScriptLocation(this._target,null,url,startLine);if(!link){return;}
locationContent.appendChild(link);locationContent.createTextChild(String.sprintf(' [%s\u2026%s]',startLine+1,endLine+1||''));this.appendElementRow(title,locationContent);}
appendStackTrace(title,stackTrace){if(!this._linkifier||!this._target){return;}
const rowElement=this._tableElement.createChild('div','timeline-details-view-row');rowElement.createChild('div','timeline-details-view-row-title').textContent=title;this.createChildStackTraceElement(rowElement,stackTrace);}
createChildStackTraceElement(parentElement,stackTrace){if(!this._linkifier||!this._target){return;}
parentElement.classList.add('timeline-details-stack-values');const stackTraceElement=parentElement.createChild('div','timeline-details-view-row-value timeline-details-view-row-stack-trace');const callFrameContents=Components.JSPresentationUtils.buildStackTracePreviewContents(this._target,this._linkifier,stackTrace);stackTraceElement.appendChild(callFrameContents.element);}
appendWarningRow(event,warningType){const warning=Timeline.TimelineUIUtils.eventWarning(event,warningType);if(warning){this.appendElementRow(ls`Warning`,warning,true);}}};Timeline.TimelineUIUtils._categoryBreakdownCacheSymbol=Symbol('categoryBreakdownCache');;Timeline.TimelineLayersView=class extends UI.SplitWidget{constructor(model,showPaintProfilerCallback){super(true,false,'timelineLayersView');this._model=model;this._showPaintProfilerCallback=showPaintProfilerCallback;this.element.classList.add('timeline-layers-view');this._rightSplitWidget=new UI.SplitWidget(true,true,'timelineLayersViewDetails');this._rightSplitWidget.element.classList.add('timeline-layers-view-properties');this.setMainWidget(this._rightSplitWidget);const vbox=new UI.VBox();this.setSidebarWidget(vbox);this._layerViewHost=new LayerViewer.LayerViewHost();const layerTreeOutline=new LayerViewer.LayerTreeOutline(this._layerViewHost);vbox.element.appendChild(layerTreeOutline.element);this._layers3DView=new LayerViewer.Layers3DView(this._layerViewHost);this._layers3DView.addEventListener(LayerViewer.Layers3DView.Events.PaintProfilerRequested,this._onPaintProfilerRequested,this);this._rightSplitWidget.setMainWidget(this._layers3DView);const layerDetailsView=new LayerViewer.LayerDetailsView(this._layerViewHost);this._rightSplitWidget.setSidebarWidget(layerDetailsView);layerDetailsView.addEventListener(LayerViewer.LayerDetailsView.Events.PaintProfilerRequested,this._onPaintProfilerRequested,this);}
showLayerTree(frameLayerTree){this._frameLayerTree=frameLayerTree;if(this.isShowing()){this._update();}else{this._updateWhenVisible=true;}}
wasShown(){if(this._updateWhenVisible){this._updateWhenVisible=false;this._update();}}
_onPaintProfilerRequested(event){const selection=(event.data);this._layers3DView.snapshotForSelection(selection).then(snapshotWithRect=>{if(snapshotWithRect){this._showPaintProfilerCallback(snapshotWithRect.snapshot);}});}
_update(){this._frameLayerTree.layerTreePromise().then(layerTree=>this._layerViewHost.setLayerTree(layerTree));}};;Timeline.TimelinePaintProfilerView=class extends UI.SplitWidget{constructor(frameModel){super(false,false);this.element.classList.add('timeline-paint-profiler-view');this.setSidebarSize(60);this.setResizable(false);this._frameModel=frameModel;this._logAndImageSplitWidget=new UI.SplitWidget(true,false);this._logAndImageSplitWidget.element.classList.add('timeline-paint-profiler-log-split');this.setMainWidget(this._logAndImageSplitWidget);this._imageView=new Timeline.TimelinePaintImageView();this._logAndImageSplitWidget.setMainWidget(this._imageView);this._paintProfilerView=new LayerViewer.PaintProfilerView(this._imageView.showImage.bind(this._imageView));this._paintProfilerView.addEventListener(LayerViewer.PaintProfilerView.Events.WindowChanged,this._onWindowChanged,this);this.setSidebarWidget(this._paintProfilerView);this._logTreeView=new LayerViewer.PaintProfilerCommandLogView();this._logAndImageSplitWidget.setSidebarWidget(this._logTreeView);this._needsUpdateWhenVisible=false;this._pendingSnapshot=null;this._event=null;this._paintProfilerModel=null;this._lastLoadedSnapshot=null;}
wasShown(){if(this._needsUpdateWhenVisible){this._needsUpdateWhenVisible=false;this._update();}}
setSnapshot(snapshot){this._releaseSnapshot();this._pendingSnapshot=snapshot;this._event=null;this._updateWhenVisible();}
setEvent(paintProfilerModel,event){this._releaseSnapshot();this._paintProfilerModel=paintProfilerModel;this._pendingSnapshot=null;this._event=event;this._updateWhenVisible();if(this._event.name===TimelineModel.TimelineModel.RecordType.Paint){return!!TimelineModel.TimelineData.forEvent(event).picture;}
if(this._event.name===TimelineModel.TimelineModel.RecordType.RasterTask){return this._frameModel.hasRasterTile(this._event);}
return false;}
_updateWhenVisible(){if(this.isShowing()){this._update();}else{this._needsUpdateWhenVisible=true;}}
_update(){this._logTreeView.setCommandLog([]);this._paintProfilerView.setSnapshotAndLog(null,[],null);let snapshotPromise;if(this._pendingSnapshot){snapshotPromise=Promise.resolve({rect:null,snapshot:this._pendingSnapshot});}else if(this._event.name===TimelineModel.TimelineModel.RecordType.Paint){const picture=TimelineModel.TimelineData.forEvent(this._event).picture;snapshotPromise=picture.objectPromise().then(data=>this._paintProfilerModel.loadSnapshot(data['skp64'])).then(snapshot=>snapshot&&{rect:null,snapshot:snapshot});}else if(this._event.name===TimelineModel.TimelineModel.RecordType.RasterTask){snapshotPromise=this._frameModel.rasterTilePromise(this._event);}else{console.assert(false,'Unexpected event type or no snapshot');return;}
snapshotPromise.then(snapshotWithRect=>{this._releaseSnapshot();if(!snapshotWithRect){this._imageView.showImage();return;}
const snapshot=snapshotWithRect.snapshot;this._lastLoadedSnapshot=snapshot;this._imageView.setMask(snapshotWithRect.rect);snapshot.commandLog().then(log=>onCommandLogDone.call(this,snapshot,snapshotWithRect.rect,log));});function onCommandLogDone(snapshot,clipRect,log){this._logTreeView.setCommandLog(log||[]);this._paintProfilerView.setSnapshotAndLog(snapshot,log||[],clipRect);}}
_releaseSnapshot(){if(!this._lastLoadedSnapshot){return;}
this._lastLoadedSnapshot.release();this._lastLoadedSnapshot=null;}
_onWindowChanged(){this._logTreeView.updateWindow(this._paintProfilerView.selectionWindow());}};Timeline.TimelinePaintImageView=class extends UI.Widget{constructor(){super(true);this.registerRequiredCSS('timeline/timelinePaintProfiler.css');this.contentElement.classList.add('fill','paint-profiler-image-view');this._imageContainer=this.contentElement.createChild('div','paint-profiler-image-container');this._imageElement=this._imageContainer.createChild('img');this._maskElement=this._imageContainer.createChild('div');this._imageElement.addEventListener('load',this._updateImagePosition.bind(this),false);this._transformController=new LayerViewer.TransformController(this.contentElement,true);this._transformController.addEventListener(LayerViewer.TransformController.Events.TransformChanged,this._updateImagePosition,this);}
onResize(){if(this._imageElement.src){this._updateImagePosition();}}
_updateImagePosition(){const width=this._imageElement.naturalWidth;const height=this._imageElement.naturalHeight;const clientWidth=this.contentElement.clientWidth;const clientHeight=this.contentElement.clientHeight;const paddingFraction=0.1;const paddingX=clientWidth*paddingFraction;const paddingY=clientHeight*paddingFraction;const scaleX=(clientWidth-paddingX)/width;const scaleY=(clientHeight-paddingY)/height;const scale=Math.min(scaleX,scaleY);if(this._maskRectangle){const style=this._maskElement.style;style.width=width+'px';style.height=height+'px';style.borderLeftWidth=this._maskRectangle.x+'px';style.borderTopWidth=this._maskRectangle.y+'px';style.borderRightWidth=(width-this._maskRectangle.x-this._maskRectangle.width)+'px';style.borderBottomWidth=(height-this._maskRectangle.y-this._maskRectangle.height)+'px';}
this._transformController.setScaleConstraints(0.5,10/scale);let matrix=new WebKitCSSMatrix().scale(this._transformController.scale(),this._transformController.scale()).translate(clientWidth/2,clientHeight/2).scale(scale,scale).translate(-width/2,-height/2);const bounds=UI.Geometry.boundsForTransformedPoints(matrix,[0,0,0,width,height,0]);this._transformController.clampOffsets(paddingX-bounds.maxX,clientWidth-paddingX-bounds.minX,paddingY-bounds.maxY,clientHeight-paddingY-bounds.minY);matrix=new WebKitCSSMatrix().translate(this._transformController.offsetX(),this._transformController.offsetY()).multiply(matrix);this._imageContainer.style.webkitTransform=matrix.toString();}
showImage(imageURL){this._imageContainer.classList.toggle('hidden',!imageURL);if(imageURL){this._imageElement.src=imageURL;}}
setMask(maskRectangle){this._maskRectangle=maskRectangle;this._maskElement.classList.toggle('hidden',!maskRectangle);}};;Timeline.TimelinePanel=class extends UI.Panel{constructor(){super('timeline');this.registerRequiredCSS('timeline/timelinePanel.css');this.element.addEventListener('contextmenu',this._contextMenu.bind(this),false);this._dropTarget=new UI.DropTarget(this.element,[UI.DropTarget.Type.File,UI.DropTarget.Type.URI],Common.UIString('Drop timeline file or URL here'),this._handleDrop.bind(this));this._recordingOptionUIControls=[];this._state=Timeline.TimelinePanel.State.Idle;this._recordingPageReload=false;this._millisecondsToRecordAfterLoadEvent=3000;this._toggleRecordAction=(UI.actionRegistry.action('timeline.toggle-recording'));this._recordReloadAction=(UI.actionRegistry.action('timeline.record-reload'));this._historyManager=new Timeline.TimelineHistoryManager();this._performanceModel=null;this._viewModeSetting=Common.settings.createSetting('timelineViewMode',Timeline.TimelinePanel.ViewMode.FlameChart);this._disableCaptureJSProfileSetting=Common.settings.createSetting('timelineDisableJSSampling',false);this._disableCaptureJSProfileSetting.setTitle(Common.UIString('Disable JavaScript samples'));this._captureLayersAndPicturesSetting=Common.settings.createSetting('timelineCaptureLayersAndPictures',false);this._captureLayersAndPicturesSetting.setTitle(Common.UIString('Enable advanced paint instrumentation (slow)'));this._showScreenshotsSetting=Common.settings.createSetting('timelineShowScreenshots',true);this._showScreenshotsSetting.setTitle(Common.UIString('Screenshots'));this._showScreenshotsSetting.addChangeListener(this._updateOverviewControls,this);this._startCoverage=Common.settings.createSetting('timelineStartCoverage',false);this._startCoverage.setTitle(ls`Coverage`);if(!Root.Runtime.experiments.isEnabled('recordCoverageWithPerformanceTracing')){this._startCoverage.set(false);}
this._showMemorySetting=Common.settings.createSetting('timelineShowMemory',false);this._showMemorySetting.setTitle(Common.UIString('Memory'));this._showMemorySetting.addChangeListener(this._onModeChanged,this);const timelineToolbarContainer=this.element.createChild('div','timeline-toolbar-container');this._panelToolbar=new UI.Toolbar('timeline-main-toolbar',timelineToolbarContainer);this._panelRightToolbar=new UI.Toolbar('',timelineToolbarContainer);this._createSettingsPane();this._updateShowSettingsToolbarButton();this._timelinePane=new UI.VBox();this._timelinePane.show(this.element);const topPaneElement=this._timelinePane.element.createChild('div','hbox');topPaneElement.id='timeline-overview-panel';this._overviewPane=new PerfUI.TimelineOverviewPane('timeline');this._overviewPane.addEventListener(PerfUI.TimelineOverviewPane.Events.WindowChanged,this._onOverviewWindowChanged.bind(this));this._overviewPane.show(topPaneElement);this._overviewControls=[];this._statusPaneContainer=this._timelinePane.element.createChild('div','status-pane-container fill');this._createFileSelector();SDK.targetManager.addModelListener(SDK.ResourceTreeModel,SDK.ResourceTreeModel.Events.Load,this._loadEventFired,this);this._flameChart=new Timeline.TimelineFlameChartView(this);this._searchableView=new UI.SearchableView(this._flameChart);this._searchableView.setMinimumSize(0,100);this._searchableView.element.classList.add('searchable-view');this._searchableView.show(this._timelinePane.element);this._flameChart.show(this._searchableView.element);this._flameChart.setSearchableView(this._searchableView);this._onModeChanged();this._populateToolbar();this._showLandingPage();this._updateTimelineControls();Extensions.extensionServer.addEventListener(Extensions.ExtensionServer.Events.TraceProviderAdded,this._appendExtensionsToToolbar,this);SDK.targetManager.addEventListener(SDK.TargetManager.Events.SuspendStateChanged,this._onSuspendStateChanged,this);}
static instance(){return(self.runtime.sharedInstance(Timeline.TimelinePanel));}
searchableView(){return this._searchableView;}
wasShown(){UI.context.setFlavor(Timeline.TimelinePanel,this);}
willHide(){UI.context.setFlavor(Timeline.TimelinePanel,null);this._historyManager.cancelIfShowing();}
loadFromEvents(events){if(this._state!==Timeline.TimelinePanel.State.Idle){return;}
this._prepareToLoadTimeline();this._loader=Timeline.TimelineLoader.loadFromEvents(events,this);}
_onOverviewWindowChanged(event){const left=event.data.startTime;const right=event.data.endTime;this._performanceModel.setWindow({left,right},true);}
_onModelWindowChanged(event){const window=(event.data.window);this._overviewPane.setWindowTimes(window.left,window.right);}
_setState(state){this._state=state;this._updateTimelineControls();}
_createSettingCheckbox(setting,tooltip){const checkboxItem=new UI.ToolbarSettingCheckbox(setting,tooltip);this._recordingOptionUIControls.push(checkboxItem);return checkboxItem;}
_populateToolbar(){this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._toggleRecordAction));this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButton(this._recordReloadAction));this._clearButton=new UI.ToolbarButton(Common.UIString('Clear'),'largeicon-clear');this._clearButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._onClearButton());this._panelToolbar.appendToolbarItem(this._clearButton);this._loadButton=new UI.ToolbarButton(Common.UIString('Load profile...'),'largeicon-load');this._loadButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._selectFileToLoad());this._saveButton=new UI.ToolbarButton(Common.UIString('Save profile...'),'largeicon-download');this._saveButton.addEventListener(UI.ToolbarButton.Events.Click,()=>this._saveToFile());this._panelToolbar.appendSeparator();this._panelToolbar.appendToolbarItem(this._loadButton);this._panelToolbar.appendToolbarItem(this._saveButton);this._panelToolbar.appendSeparator();this._panelToolbar.appendToolbarItem(this._historyManager.button());this._panelToolbar.appendSeparator();this._panelToolbar.appendSeparator();this._showScreenshotsToolbarCheckbox=this._createSettingCheckbox(this._showScreenshotsSetting,Common.UIString('Capture screenshots'));this._panelToolbar.appendToolbarItem(this._showScreenshotsToolbarCheckbox);this._showMemoryToolbarCheckbox=this._createSettingCheckbox(this._showMemorySetting,Common.UIString('Show memory timeline'));this._panelToolbar.appendToolbarItem(this._showMemoryToolbarCheckbox);if(Root.Runtime.experiments.isEnabled('recordCoverageWithPerformanceTracing')){this._startCoverageCheckbox=this._createSettingCheckbox(this._startCoverage,ls`Record coverage with performance trace`);this._panelToolbar.appendToolbarItem(this._startCoverageCheckbox);}
this._panelToolbar.appendToolbarItem(UI.Toolbar.createActionButtonForId('components.collect-garbage'));this._panelRightToolbar.appendSeparator();this._panelRightToolbar.appendToolbarItem(this._showSettingsPaneButton);}
_createSettingsPane(){this._showSettingsPaneSetting=Common.settings.createSetting('timelineShowSettingsToolbar',false);this._showSettingsPaneButton=new UI.ToolbarSettingToggle(this._showSettingsPaneSetting,'largeicon-settings-gear',Common.UIString('Capture settings'));SDK.multitargetNetworkManager.addEventListener(SDK.MultitargetNetworkManager.Events.ConditionsChanged,this._updateShowSettingsToolbarButton,this);MobileThrottling.throttlingManager().addEventListener(MobileThrottling.ThrottlingManager.Events.RateChanged,this._updateShowSettingsToolbarButton,this);this._disableCaptureJSProfileSetting.addChangeListener(this._updateShowSettingsToolbarButton,this);this._captureLayersAndPicturesSetting.addChangeListener(this._updateShowSettingsToolbarButton,this);this._settingsPane=new UI.HBox();this._settingsPane.element.classList.add('timeline-settings-pane');this._settingsPane.show(this.element);const captureToolbar=new UI.Toolbar('',this._settingsPane.element);captureToolbar.element.classList.add('flex-auto');captureToolbar.makeVertical();captureToolbar.appendToolbarItem(this._createSettingCheckbox(this._disableCaptureJSProfileSetting,Common.UIString('Disables JavaScript sampling, reduces overhead when running against mobile devices')));captureToolbar.appendToolbarItem(this._createSettingCheckbox(this._captureLayersAndPicturesSetting,Common.UIString('Captures advanced paint instrumentation, introduces significant performance overhead')));const throttlingPane=new UI.VBox();throttlingPane.element.classList.add('flex-auto');throttlingPane.show(this._settingsPane.element);const networkThrottlingToolbar=new UI.Toolbar('',throttlingPane.element);networkThrottlingToolbar.appendText(Common.UIString('Network:'));this._networkThrottlingSelect=this._createNetworkConditionsSelect();networkThrottlingToolbar.appendToolbarItem(this._networkThrottlingSelect);const cpuThrottlingToolbar=new UI.Toolbar('',throttlingPane.element);cpuThrottlingToolbar.appendText(Common.UIString('CPU:'));this._cpuThrottlingSelect=MobileThrottling.throttlingManager().createCPUThrottlingSelector();cpuThrottlingToolbar.appendToolbarItem(this._cpuThrottlingSelect);this._showSettingsPaneSetting.addChangeListener(this._updateSettingsPaneVisibility.bind(this));this._updateSettingsPaneVisibility();}
_appendExtensionsToToolbar(event){const provider=(event.data);const setting=Timeline.TimelinePanel._settingForTraceProvider(provider);const checkbox=this._createSettingCheckbox(setting,provider.longDisplayName());this._panelToolbar.appendToolbarItem(checkbox);}
static _settingForTraceProvider(traceProvider){let setting=traceProvider[Timeline.TimelinePanel._traceProviderSettingSymbol];if(!setting){const providerId=traceProvider.persistentIdentifier();setting=Common.settings.createSetting(providerId,false);setting.setTitle(traceProvider.shortDisplayName());traceProvider[Timeline.TimelinePanel._traceProviderSettingSymbol]=setting;}
return setting;}
_createNetworkConditionsSelect(){const toolbarItem=new UI.ToolbarComboBox(null,ls`Network conditions`);toolbarItem.setMaxWidth(140);MobileThrottling.throttlingManager().decorateSelectWithNetworkThrottling(toolbarItem.selectElement());return toolbarItem;}
_prepareToLoadTimeline(){console.assert(this._state===Timeline.TimelinePanel.State.Idle);this._setState(Timeline.TimelinePanel.State.Loading);if(this._performanceModel){this._performanceModel.dispose();this._performanceModel=null;}}
_createFileSelector(){if(this._fileSelectorElement){this._fileSelectorElement.remove();}
this._fileSelectorElement=UI.createFileSelectorElement(this._loadFromFile.bind(this));this._timelinePane.element.appendChild(this._fileSelectorElement);}
_contextMenu(event){const contextMenu=new UI.ContextMenu(event);contextMenu.appendItemsAtLocation('timelineMenu');contextMenu.show();}
async _saveToFile(){if(this._state!==Timeline.TimelinePanel.State.Idle){return;}
const performanceModel=this._performanceModel;if(!performanceModel){return;}
const now=new Date();const fileName='Profile-'+now.toISO8601Compact()+'.json';const stream=new Bindings.FileOutputStream();const accepted=await stream.open(fileName);if(!accepted){return;}
const error=await performanceModel.save(stream);if(!error){return;}
Common.console.error(Common.UIString('Failed to save timeline: %s (%s, %s)',error.message,error.name,error.code));}
async _showHistory(){const model=await this._historyManager.showHistoryDropDown();if(model&&model!==this._performanceModel){this._setModel(model);}}
_navigateHistory(direction){const model=this._historyManager.navigate(direction);if(model&&model!==this._performanceModel){this._setModel(model);}
return true;}
_selectFileToLoad(){this._fileSelectorElement.click();}
_loadFromFile(file){if(this._state!==Timeline.TimelinePanel.State.Idle){return;}
this._prepareToLoadTimeline();this._loader=Timeline.TimelineLoader.loadFromFile(file,this);this._createFileSelector();}
_loadFromURL(url){if(this._state!==Timeline.TimelinePanel.State.Idle){return;}
this._prepareToLoadTimeline();this._loader=Timeline.TimelineLoader.loadFromURL(url,this);}
_updateOverviewControls(){this._overviewControls=[];this._overviewControls.push(new Timeline.TimelineEventOverviewResponsiveness());if(Root.Runtime.experiments.isEnabled('inputEventsOnTimelineOverview')){this._overviewControls.push(new Timeline.TimelineEventOverviewInput());}
this._overviewControls.push(new Timeline.TimelineEventOverviewFrames());this._overviewControls.push(new Timeline.TimelineEventOverviewCPUActivity());this._overviewControls.push(new Timeline.TimelineEventOverviewNetwork());if(this._showScreenshotsSetting.get()&&this._performanceModel&&this._performanceModel.filmStripModel().frames().length){this._overviewControls.push(new Timeline.TimelineFilmStripOverview());}
if(this._showMemorySetting.get()){this._overviewControls.push(new Timeline.TimelineEventOverviewMemory());}
if(this._startCoverage.get()){this._overviewControls.push(new Timeline.TimelineEventOverviewCoverage());}
for(const control of this._overviewControls){control.setModel(this._performanceModel);}
this._overviewPane.setOverviewControls(this._overviewControls);}
_onModeChanged(){this._updateOverviewControls();this.doResize();this.select(null);}
_updateSettingsPaneVisibility(){if(this._showSettingsPaneSetting.get()){this._settingsPane.showWidget();}else{this._settingsPane.hideWidget();}}
_updateShowSettingsToolbarButton(){const messages=[];if(MobileThrottling.throttlingManager().cpuThrottlingRate()!==1){messages.push(Common.UIString('- CPU throttling is enabled'));}
if(SDK.multitargetNetworkManager.isThrottling()){messages.push(Common.UIString('- Network throttling is enabled'));}
if(this._captureLayersAndPicturesSetting.get()){messages.push(Common.UIString('- Significant overhead due to paint instrumentation'));}
if(this._disableCaptureJSProfileSetting.get()){messages.push(Common.UIString('- JavaScript sampling is disabled'));}
this._showSettingsPaneButton.setDefaultWithRedColor(messages.length);this._showSettingsPaneButton.setToggleWithRedColor(messages.length);if(messages.length){const tooltipElement=createElement('div');messages.forEach(message=>{tooltipElement.createChild('div').textContent=message;});this._showSettingsPaneButton.setTitle(tooltipElement);}else{this._showSettingsPaneButton.setTitle(Common.UIString('Capture settings'));}}
_setUIControlsEnabled(enabled){this._recordingOptionUIControls.forEach(control=>control.setEnabled(enabled));}
async _startRecording(){console.assert(!this._statusPane,'Status pane is already opened.');this._setState(Timeline.TimelinePanel.State.StartPending);const recordingOptions={enableJSSampling:!this._disableCaptureJSProfileSetting.get(),capturePictures:this._captureLayersAndPicturesSetting.get(),captureFilmStrip:this._showScreenshotsSetting.get(),startCoverage:this._startCoverage.get()};if(recordingOptions.startCoverage){await UI.viewManager.showView('coverage').then(()=>UI.viewManager.view('coverage').widget()).then(widget=>widget.ensureRecordingStarted());}
this._showRecordingStarted();const enabledTraceProviders=Extensions.extensionServer.traceProviders().filter(provider=>Timeline.TimelinePanel._settingForTraceProvider(provider).get());const mainTarget=(SDK.targetManager.mainTarget());if(Timeline.UIDevtoolsUtils.isUiDevTools()){this._controller=new Timeline.UIDevtoolsController(mainTarget,this);}else{this._controller=new Timeline.TimelineController(mainTarget,this);}
this._setUIControlsEnabled(false);this._hideLandingPage();const response=await this._controller.startRecording(recordingOptions,enabledTraceProviders);if(response[Protocol.Error]){this._recordingFailed(response[Protocol.Error]);}else{this._recordingStarted();}}
async _stopRecording(){if(this._statusPane){this._statusPane.finish();this._statusPane.updateStatus(Common.UIString('Stopping timeline\u2026'));this._statusPane.updateProgressBar(Common.UIString('Received'),0);}
this._setState(Timeline.TimelinePanel.State.StopPending);const model=await this._controller.stopRecording();this._performanceModel=model;this._setUIControlsEnabled(true);this._controller.dispose();this._controller=null;}
_recordingFailed(error){if(this._statusPane){this._statusPane.hide();}
this._statusPane=new Timeline.TimelinePanel.StatusPane({description:error},()=>this.loadingComplete(null));this._statusPane.showPane(this._statusPaneContainer);this._statusPane.updateStatus(ls`Recording failed`);this._statusPane.updateButton(ls`Close`);this._setState(Timeline.TimelinePanel.State.RecordingFailed);this._performanceModel=null;this._setUIControlsEnabled(false);this._controller.dispose();this._controller=null;}
_onSuspendStateChanged(){this._updateTimelineControls();}
_updateTimelineControls(){const state=Timeline.TimelinePanel.State;this._toggleRecordAction.setToggled(this._state===state.Recording);this._toggleRecordAction.setEnabled(this._state===state.Recording||this._state===state.Idle);this._recordReloadAction.setEnabled(this._state===state.Idle);this._historyManager.setEnabled(this._state===state.Idle);this._clearButton.setEnabled(this._state===state.Idle);this._panelToolbar.setEnabled(this._state!==state.Loading);this._panelRightToolbar.setEnabled(this._state!==state.Loading);this._dropTarget.setEnabled(this._state===state.Idle);this._loadButton.setEnabled(this._state===state.Idle);this._saveButton.setEnabled(this._state===state.Idle&&!!this._performanceModel);}
_toggleRecording(){if(this._state===Timeline.TimelinePanel.State.Idle){this._recordingPageReload=false;this._startRecording();Host.userMetrics.actionTaken(Host.UserMetrics.Action.TimelineStarted);}else if(this._state===Timeline.TimelinePanel.State.Recording){this._stopRecording();}}
_recordReload(){if(this._state!==Timeline.TimelinePanel.State.Idle){return;}
this._recordingPageReload=true;this._startRecording();Host.userMetrics.actionTaken(Host.UserMetrics.Action.TimelinePageReloadStarted);}
_onClearButton(){this._historyManager.clear();this._clear();}
_clear(){this._showLandingPage();this._reset();}
_reset(){self.runtime.sharedInstance(PerfUI.LineLevelProfile.Performance).reset();this._setModel(null);}
_applyFilters(model){if(model.timelineModel().isGenericTrace()||Root.Runtime.experiments.isEnabled('timelineShowAllEvents')){return;}
model.setFilters([Timeline.TimelineUIUtils.visibleEventsFilter()]);}
_setModel(model){if(this._performanceModel){this._performanceModel.removeEventListener(Timeline.PerformanceModel.Events.WindowChanged,this._onModelWindowChanged,this);}
this._performanceModel=model;if(model){this._applyFilters(model);}
this._flameChart.setModel(model);this._updateOverviewControls();this._overviewPane.reset();if(model){this._performanceModel.addEventListener(Timeline.PerformanceModel.Events.WindowChanged,this._onModelWindowChanged,this);this._overviewPane.setBounds(model.timelineModel().minimumRecordTime(),model.timelineModel().maximumRecordTime());const lineLevelProfile=self.runtime.sharedInstance(PerfUI.LineLevelProfile.Performance);lineLevelProfile.reset();for(const profile of model.timelineModel().cpuProfiles()){lineLevelProfile.appendCPUProfile(profile);}
this._setMarkers(model.timelineModel());this._flameChart.setSelection(null);this._overviewPane.setWindowTimes(model.window().left,model.window().right);}
for(const control of this._overviewControls){control.setModel(model);}
if(this._flameChart){this._flameChart.resizeToPreferredHeights();}
this._updateTimelineControls();}
_recordingStarted(){if(this._recordingPageReload){const target=this._controller.mainTarget();const resourceModel=target.model(SDK.ResourceTreeModel);if(resourceModel){resourceModel.reloadPage();}}
this._reset();this._setState(Timeline.TimelinePanel.State.Recording);this._showRecordingStarted();this._statusPane.updateStatus(Common.UIString('Profiling\u2026'));this._statusPane.updateProgressBar(Common.UIString('Buffer usage'),0);this._statusPane.startTimer();this._hideLandingPage();}
recordingProgress(usage){this._statusPane.updateProgressBar(Common.UIString('Buffer usage'),usage*100);}
_showLandingPage(){if(this._landingPage){this._landingPage.show(this._statusPaneContainer);return;}
function encloseWithTag(tagName,contents){const e=createElement(tagName);e.textContent=contents;return e;}
const learnMoreNode=UI.XLink.create('https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/',Common.UIString('Learn\xa0more'));const recordKey=encloseWithTag('b',UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.toggle-recording')[0].name);const reloadKey=encloseWithTag('b',UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.record-reload')[0].name);const navigateNode=encloseWithTag('b',Common.UIString('WASD'));this._landingPage=new UI.VBox();this._landingPage.contentElement.classList.add('timeline-landing-page','fill');const centered=this._landingPage.contentElement.createChild('div');const recordButton=UI.createInlineButton(UI.Toolbar.createActionButton(this._toggleRecordAction));const reloadButton=UI.createInlineButton(UI.Toolbar.createActionButtonForId('timeline.record-reload'));centered.createChild('p').appendChild(UI.formatLocalized('Click the record button %s or hit %s to start a new recording.\nClick the reload button %s or hit %s to record the page load.',[recordButton,recordKey,reloadButton,reloadKey]));centered.createChild('p').appendChild(UI.formatLocalized('After recording, select an area of interest in the overview by dragging.\nThen, zoom and pan the timeline with the mousewheel or %s keys.\n%s',[navigateNode,learnMoreNode]));this._landingPage.show(this._statusPaneContainer);}
_hideLandingPage(){this._landingPage.detach();}
loadingStarted(){this._hideLandingPage();if(this._statusPane){this._statusPane.hide();}
this._statusPane=new Timeline.TimelinePanel.StatusPane({showProgress:true},this._cancelLoading.bind(this));this._statusPane.showPane(this._statusPaneContainer);this._statusPane.updateStatus(Common.UIString('Loading profile\u2026'));if(!this._loader){this._statusPane.finish();}
this.loadingProgress(0);}
loadingProgress(progress){if(typeof progress==='number'){this._statusPane.updateProgressBar(Common.UIString('Received'),progress*100);}}
processingStarted(){this._statusPane.updateStatus(Common.UIString('Processing profile\u2026'));}
loadingComplete(tracingModel){delete this._loader;this._setState(Timeline.TimelinePanel.State.Idle);if(this._statusPane){this._statusPane.hide();}
delete this._statusPane;if(!tracingModel){this._clear();return;}
if(!this._performanceModel){this._performanceModel=new Timeline.PerformanceModel();}
this._performanceModel.setTracingModel(tracingModel);this._setModel(this._performanceModel);this._historyManager.addRecording(this._performanceModel);if(this._startCoverage.get()){UI.viewManager.showView('coverage').then(()=>UI.viewManager.view('coverage').widget()).then(widget=>widget.stopRecording()).then(()=>this._updateOverviewControls());}}
_showRecordingStarted(){if(this._statusPane){return;}
this._statusPane=new Timeline.TimelinePanel.StatusPane({showTimer:true,showProgress:true},this._stopRecording.bind(this));this._statusPane.showPane(this._statusPaneContainer);this._statusPane.updateStatus(Common.UIString('Initializing profiler\u2026'));}
_cancelLoading(){if(this._loader){this._loader.cancel();}}
_setMarkers(timelineModel){const markers=new Map();const recordTypes=TimelineModel.TimelineModel.RecordType;const zeroTime=timelineModel.minimumRecordTime();for(const event of timelineModel.timeMarkerEvents()){if(event.name===recordTypes.TimeStamp||event.name===recordTypes.ConsoleTime){continue;}
markers.set(event.startTime,Timeline.TimelineUIUtils.createEventDivider(event,zeroTime));}
this._overviewPane.setMarkers(markers);}
async _loadEventFired(event){if(this._state!==Timeline.TimelinePanel.State.Recording||!this._recordingPageReload||this._controller.mainTarget()!==event.data.resourceTreeModel.target()){return;}
const controller=this._controller;await new Promise(r=>setTimeout(r,this._millisecondsToRecordAfterLoadEvent));if(controller!==this._controller||this._state!==Timeline.TimelinePanel.State.Recording){return;}
this._stopRecording();}
_frameForSelection(selection){switch(selection.type()){case Timeline.TimelineSelection.Type.Frame:return(selection.object());case Timeline.TimelineSelection.Type.Range:return null;case Timeline.TimelineSelection.Type.TraceEvent:return this._performanceModel.frameModel().frames(selection._endTime,selection._endTime)[0];default:console.assert(false,'Should never be reached');return null;}}
_jumpToFrame(offset){const currentFrame=this._selection&&this._frameForSelection(this._selection);if(!currentFrame){return;}
const frames=this._performanceModel.frames();let index=frames.indexOf(currentFrame);console.assert(index>=0,'Can\'t find current frame in the frame list');index=Number.constrain(index+offset,0,frames.length-1);const frame=frames[index];this._revealTimeRange(frame.startTime,frame.endTime);this.select(Timeline.TimelineSelection.fromFrame(frame));return true;}
select(selection){this._selection=selection;this._flameChart.setSelection(selection);}
selectEntryAtTime(events,time){if(!events){return;}
for(let index=events.upperBound(time,(time,event)=>time-event.startTime)-1;index>=0;--index){const event=events[index];const endTime=event.endTime||event.startTime;if(SDK.TracingModel.isTopLevelEvent(event)&&endTime<time){break;}
if(this._performanceModel.isVisible(event)&&endTime>=time){this.select(Timeline.TimelineSelection.fromTraceEvent(event));return;}}
this.select(null);}
highlightEvent(event){this._flameChart.highlightEvent(event);}
_revealTimeRange(startTime,endTime){const window=this._performanceModel.window();let offset=0;if(window.right<endTime){offset=endTime-window.right;}else if(window.left>startTime){offset=startTime-window.left;}
this._performanceModel.setWindow({left:window.left+offset,right:window.right+offset},true);}
_handleDrop(dataTransfer){const items=dataTransfer.items;if(!items.length){return;}
const item=items[0];if(item.kind==='string'){const url=dataTransfer.getData('text/uri-list');if(new Common.ParsedURL(url).isValid){this._loadFromURL(url);}}else if(item.kind==='file'){const entry=items[0].webkitGetAsEntry();if(!entry.isFile){return;}
entry.file(this._loadFromFile.bind(this));}}};Timeline.TimelinePanel.State={Idle:Symbol('Idle'),StartPending:Symbol('StartPending'),Recording:Symbol('Recording'),StopPending:Symbol('StopPending'),Loading:Symbol('Loading'),RecordingFailed:Symbol('RecordingFailed')};Timeline.TimelinePanel.ViewMode={FlameChart:'FlameChart',BottomUp:'BottomUp',CallTree:'CallTree',EventLog:'EventLog'};Timeline.TimelinePanel.rowHeight=18;Timeline.TimelinePanel.headerHeight=20;Timeline.TimelinePanel.ModelSelectionData;Timeline.TimelineSelection=class{constructor(type,startTime,endTime,object){this._type=type;this._startTime=startTime;this._endTime=endTime;this._object=object||null;}
static fromFrame(frame){return new Timeline.TimelineSelection(Timeline.TimelineSelection.Type.Frame,frame.startTime,frame.endTime,frame);}
static fromNetworkRequest(request){return new Timeline.TimelineSelection(Timeline.TimelineSelection.Type.NetworkRequest,request.startTime,request.endTime||request.startTime,request);}
static fromTraceEvent(event){return new Timeline.TimelineSelection(Timeline.TimelineSelection.Type.TraceEvent,event.startTime,event.endTime||(event.startTime+1),event);}
static fromRange(startTime,endTime){return new Timeline.TimelineSelection(Timeline.TimelineSelection.Type.Range,startTime,endTime);}
type(){return this._type;}
object(){return this._object;}
startTime(){return this._startTime;}
endTime(){return this._endTime;}};Timeline.TimelineSelection.Type={Frame:'Frame',NetworkRequest:'NetworkRequest',TraceEvent:'TraceEvent',Range:'Range'};Timeline.TimelineModeViewDelegate=function(){};Timeline.TimelineModeViewDelegate.prototype={select(selection){},selectEntryAtTime(events,time){},highlightEvent(event){},};Timeline.TimelinePanel.StatusPane=class extends UI.VBox{constructor(options,stopCallback){super(true);this.registerRequiredCSS('timeline/timelineStatusDialog.css');this.contentElement.classList.add('timeline-status-dialog');const statusLine=this.contentElement.createChild('div','status-dialog-line status');statusLine.createChild('div','label').textContent=Common.UIString('Status');this._status=statusLine.createChild('div','content');UI.ARIAUtils.markAsStatus(this._status);if(options.showTimer){const timeLine=this.contentElement.createChild('div','status-dialog-line time');timeLine.createChild('div','label').textContent=Common.UIString('Time');this._time=timeLine.createChild('div','content');}
if(options.showProgress){const progressLine=this.contentElement.createChild('div','status-dialog-line progress');this._progressLabel=progressLine.createChild('div','label');this._progressBar=progressLine.createChild('div','indicator-container').createChild('div','indicator');UI.ARIAUtils.markAsProgressBar(this._progressBar);}
if(typeof options.description==='string'){const descriptionLine=this.contentElement.createChild('div','status-dialog-line description');descriptionLine.createChild('div','label').textContent=ls`Description`;this._description=descriptionLine.createChild('div','content');this._description.innerText=options.description;}
this._stopButton=UI.createTextButton(Common.UIString('Stop'),stopCallback,'',true);this.contentElement.createChild('div','stop-button').appendChild(this._stopButton);}
finish(){this._stopTimer();this._stopButton.disabled=true;}
hide(){this.element.parentNode.classList.remove('tinted');this.element.remove();}
showPane(parent){this.show(parent);parent.classList.add('tinted');this._stopButton.focus();}
updateStatus(text){this._status.textContent=text;}
updateProgressBar(activity,percent){this._progressLabel.textContent=activity;this._progressBar.style.width=percent.toFixed(1)+'%';UI.ARIAUtils.setValueNow(this._progressBar,percent);this._updateTimer();}
updateButton(caption){this._stopButton.innerText=caption;}
startTimer(){this._startTime=Date.now();this._timeUpdateTimer=setInterval(this._updateTimer.bind(this,false),1000);this._updateTimer();}
_stopTimer(){if(!this._timeUpdateTimer){return;}
clearInterval(this._timeUpdateTimer);this._updateTimer(true);delete this._timeUpdateTimer;}
_updateTimer(precise){if(!this._timeUpdateTimer){return;}
const elapsed=(Date.now()-this._startTime)/1000;this._time.textContent=Common.UIString('%s\xa0sec',elapsed.toFixed(precise?1:0));}};Timeline.LoadTimelineHandler=class{handleQueryParam(value){UI.viewManager.showView('timeline').then(()=>{Timeline.TimelinePanel.instance()._loadFromURL(window.decodeURIComponent(value));});}};Timeline.TimelinePanel.ActionDelegate=class{handleAction(context,actionId){const panel=UI.context.flavor(Timeline.TimelinePanel);console.assert(panel&&panel instanceof Timeline.TimelinePanel);switch(actionId){case'timeline.toggle-recording':panel._toggleRecording();return true;case'timeline.record-reload':panel._recordReload();return true;case'timeline.save-to-file':panel._saveToFile();return true;case'timeline.load-from-file':panel._selectFileToLoad();return true;case'timeline.jump-to-previous-frame':panel._jumpToFrame(-1);return true;case'timeline.jump-to-next-frame':panel._jumpToFrame(1);return true;case'timeline.show-history':panel._showHistory();return true;case'timeline.previous-recording':panel._navigateHistory(1);return true;case'timeline.next-recording':panel._navigateHistory(-1);return true;}
return false;}};Timeline.TimelinePanel._traceProviderSettingSymbol=Symbol('traceProviderSetting');;Timeline.UIDevtoolsUtils=class{static isUiDevTools(){return Root.Runtime.queryParam('uiDevTools')==='true';}
static categorizeEvents(){if(Timeline.UIDevtoolsUtils._eventStylesMap){return Timeline.UIDevtoolsUtils._eventStylesMap;}
const type=Timeline.UIDevtoolsUtils.RecordType;const categories=Timeline.UIDevtoolsUtils.categories();const drawing=categories['drawing'];const rasterizing=categories['rasterizing'];const layout=categories['layout'];const painting=categories['painting'];const other=categories['other'];const eventStyles={};eventStyles[type.ViewPaint]=new Timeline.TimelineRecordStyle(ls`View::Paint`,painting);eventStyles[type.ViewOnPaint]=new Timeline.TimelineRecordStyle(ls`View::OnPaint`,painting);eventStyles[type.ViewPaintChildren]=new Timeline.TimelineRecordStyle(ls`View::PaintChildren`,painting);eventStyles[type.ViewOnPaintBackground]=new Timeline.TimelineRecordStyle(ls`View::OnPaintBackground`,painting);eventStyles[type.ViewOnPaintBorder]=new Timeline.TimelineRecordStyle(ls`View::OnPaintBorder`,painting);eventStyles[type.LayerPaintContentsToDisplayList]=new Timeline.TimelineRecordStyle(ls`Layer::PaintContentsToDisplayList`,painting);eventStyles[type.ViewLayout]=new Timeline.TimelineRecordStyle(ls`View::Layout`,layout);eventStyles[type.ViewLayoutBoundsChanged]=new Timeline.TimelineRecordStyle(ls`View::Layout(bounds_changed)`,layout);eventStyles[type.RasterTask]=new Timeline.TimelineRecordStyle(ls`RasterTask`,rasterizing);eventStyles[type.RasterizerTaskImplRunOnWorkerThread]=new Timeline.TimelineRecordStyle(ls`RasterizerTaskImpl::RunOnWorkerThread`,rasterizing);eventStyles[type.DirectRendererDrawFrame]=new Timeline.TimelineRecordStyle(ls`DirectRenderer::DrawFrame`,drawing);eventStyles[type.BeginFrame]=new Timeline.TimelineRecordStyle(ls`Frame Start`,drawing,true);eventStyles[type.DrawFrame]=new Timeline.TimelineRecordStyle(ls`Draw Frame`,drawing,true);eventStyles[type.NeedsBeginFrameChanged]=new Timeline.TimelineRecordStyle(ls`NeedsBeginFrameChanged`,drawing,true);eventStyles[type.ThreadControllerImplRunTask]=new Timeline.TimelineRecordStyle(ls`ThreadControllerImpl::RunTask`,other);Timeline.UIDevtoolsUtils._eventStylesMap=eventStyles;return eventStyles;}
static categories(){if(Timeline.UIDevtoolsUtils._categories){return Timeline.UIDevtoolsUtils._categories;}
Timeline.UIDevtoolsUtils._categories={layout:new Timeline.TimelineCategory('layout',ls`Layout`,true,'hsl(214, 67%, 74%)','hsl(214, 67%, 66%)'),rasterizing:new Timeline.TimelineCategory('rasterizing',ls`Rasterizing`,true,'hsl(43, 83%, 72%)','hsl(43, 83%, 64%) '),drawing:new Timeline.TimelineCategory('drawing',ls`Drawing`,true,'hsl(256, 67%, 76%)','hsl(256, 67%, 70%)'),painting:new Timeline.TimelineCategory('painting',ls`Painting`,true,'hsl(109, 33%, 64%)','hsl(109, 33%, 55%)'),other:new Timeline.TimelineCategory('other',ls`System`,false,'hsl(0, 0%, 87%)','hsl(0, 0%, 79%)'),idle:new Timeline.TimelineCategory('idle',ls`Idle`,false,'hsl(0, 0%, 98%)','hsl(0, 0%, 98%)')};return Timeline.UIDevtoolsUtils._categories;}
static getMainCategoriesList(){return['idle','drawing','painting','rasterizing','layout','other'];}};Timeline.UIDevtoolsUtils.RecordType={ViewPaint:'View::Paint',ViewOnPaint:'View::OnPaint',ViewPaintChildren:'View::PaintChildren',ViewOnPaintBackground:'View::OnPaintBackground',ViewOnPaintBorder:'View::OnPaintBorder',ViewLayout:'View::Layout',ViewLayoutBoundsChanged:'View::Layout(bounds_changed)',LayerPaintContentsToDisplayList:'Layer::PaintContentsToDisplayList',DirectRendererDrawFrame:'DirectRenderer::DrawFrame',RasterTask:'RasterTask',RasterizerTaskImplRunOnWorkerThread:'RasterizerTaskImpl::RunOnWorkerThread',BeginFrame:'BeginFrame',DrawFrame:'DrawFrame',NeedsBeginFrameChanged:'NeedsBeginFrameChanged',ThreadControllerImplRunTask:'ThreadControllerImpl::RunTask',};;Timeline.UIDevtoolsController=class extends Timeline.TimelineController{constructor(target,client){super(target,client);Timeline.TimelineUIUtils.setEventStylesMap(Timeline.UIDevtoolsUtils.categorizeEvents());Timeline.TimelineUIUtils.setCategories(Timeline.UIDevtoolsUtils.categories());Timeline.TimelineUIUtils.setTimelineMainEventCategories(Timeline.UIDevtoolsUtils.getMainCategoriesList());}};;Root.Runtime.cachedResources["timeline/historyToolbarButton.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.content {\n  margin-left: 5px;\n}\n\n.history-dropdown-button {\n  width: 160px;\n  height: 26px;\n  text-align: left;\n  display: flex;\n}\n\n.history-dropdown-button[disabled] {\n  opacity: .5;\n}\n\n.history-dropdown-button > .content {\n  padding-right: 5px;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  flex: 1 1;\n  min-width: 35px;\n}\n\n.history-dropdown-button[data-keyboard-focus=\"true\"]:focus::before {\n  content: \"\";\n  position: absolute;\n  top: 2px;\n  left: 0px;\n  right: 0px;\n  bottom: 2px;\n  border-radius: 2px;\n  background: rgba(0, 0, 0, 0.08);\n}\n\n/*# sourceURL=timeline/historyToolbarButton.css */";Root.Runtime.cachedResources["timeline/invalidationsTree.css"]="/*\n * Copyright 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.header, .children, .content {\n    min-height: initial;\n    line-height: initial;\n}\n\n/* This TreeElement is always expanded and has no arrow.   */\n/* FIXME(crbug.com/475618): Implement this in TreeElement. */\n.children li::before {\n    display: none;\n}\n\n.content {\n    margin-bottom: 4px;\n}\n\n.content .stack-preview-container {\n    margin-left: 8px;\n}\n\n.content .node-list {\n    margin-left: 10px;\n}\n\n/*# sourceURL=timeline/invalidationsTree.css */";Root.Runtime.cachedResources["timeline/timelineFlamechartPopover.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.timeline-flamechart-popover {\n    overflow: hidden;\n}\n\n.timeline-flamechart-popover span {\n    margin-right: 5px;\n}\n\n.timeline-flamechart-popover span.timeline-info-network-time {\n    color: #009;\n}\n\n.timeline-flamechart-popover span.timeline-info-time {\n    color: #282;\n}\n\n.timeline-flamechart-popover span.timeline-info-warning {\n    color: #e44;\n}\n\n.timeline-flamechart-popover span.timeline-info-warning * {\n    color: inherit;\n}\n\n/*# sourceURL=timeline/timelineFlamechartPopover.css */";Root.Runtime.cachedResources["timeline/timelineHistoryManager.css"]="/*\n * Copyright 2017 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.drop-down {\n  padding: 1px;\n  box-shadow: var(--drop-shadow);\n  background: white;\n}\n\n.preview-item {\n  border-color: transparent;\n  border-style: solid;\n  border-width: 1px 5px;\n  padding: 2px 0px;\n  margin: 2px 1px;\n}\n\n.preview-item.selected {\n  border-color: var(--selection-bg-color);\n}\n\n.preview-item canvas {\n  width: 100%;\n  height: 100%;\n}\n\n.text-details {\n  font-size: 11px;\n  padding: 3px;\n}\n\n.text-details span {\n  flex: 1 0;\n  padding-left: 8px;\n  padding-right: 8px;\n}\n\n.text-details .name {\n  font-weight: bold;\n}\n\n.text-details span.time {\n  color: #555;\n  text-align: right;\n}\n\n.screenshot-thumb {\n  display: flex;\n  border: 1px solid #ccc;\n  margin: 2px 4px;\n}\n\n.screenshot-thumb img {\n  margin: auto;\n  max-width: 100%;\n  max-height: 100%;\n}\n\n/*# sourceURL=timeline/timelineHistoryManager.css */";Root.Runtime.cachedResources["timeline/timelinePanel.css"]="/*\n * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.\n * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n *\n * 1.  Redistributions of source code must retain the above copyright\n *     notice, this list of conditions and the following disclaimer.\n * 2.  Redistributions in binary form must reproduce the above copyright\n *     notice, this list of conditions and the following disclaimer in the\n *     documentation and/or other materials provided with the distribution.\n * 3.  Neither the name of Apple Computer, Inc. (\"Apple\") nor the names of\n *     its contributors may be used to endorse or promote products derived\n *     from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.timeline-toolbar-container {\n    display: flex;\n    flex: none;\n}\n\n.timeline-toolbar-container > .toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n.timeline-main-toolbar {\n    flex: 1 1 auto;\n}\n\n.timeline-settings-pane {\n    flex: none;\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n#timeline-overview-panel {\n    flex: none;\n    position: relative;\n    border-bottom: 1px solid #bbb;\n}\n\n#timeline-overview-grid {\n    background-color: rgb(255, 255, 255);\n}\n\n#timeline-overview-grid .timeline-grid-header {\n    height: 12px;\n}\n\n#timeline-overview-grid .resources-dividers-label-bar {\n    pointer-events: auto;\n    height: 12px;\n}\n\n#timeline-overview-grid .resources-divider-label {\n    top: 1px;\n}\n\n.timeline-details-split {\n    flex: auto;\n}\n\n.timeline.panel .status-pane-container {\n    z-index: 1000;\n    display: flex;\n    align-items: center;\n    pointer-events: none;\n}\n\n.timeline.panel .status-pane-container.tinted {\n    background-color: lightgray;\n    pointer-events: auto;\n}\n\n.timeline.panel .status-pane-container > div {\n    pointer-events: auto;\n}\n\n#timeline-overview-panel .overview-strip {\n    margin-top: 2px;\n    justify-content: center;\n}\n\n#timeline-overview-panel .overview-strip .timeline-overview-strip-title {\n    color: #666;\n    font-size: 10px;\n    font-weight: bold;\n    z-index: 100;\n    background-color: rgba(255, 255, 255, 0.7);\n    padding: 0 4px;\n    position: absolute;\n    top: -2px;\n    right: 0;\n}\n\n#timeline-overview-cpu-activity {\n    flex-basis: 20px;\n}\n\n#timeline-overview-network {\n    flex-basis: 8px;\n}\n\n#timeline-overview-framerate {\n    flex-basis: 16px;\n    margin-top: 0 !important;\n}\n\n#timeline-overview-filmstrip {\n    flex-basis: 30px;\n}\n\n#timeline-overview-memory {\n    flex-basis: 20px;\n}\n\n#timeline-overview-framerate::before,\n#timeline-overview-network::before,\n#timeline-overview-cpu-activity::before {\n    content: \"\";\n    position: absolute;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    border-bottom: 1px solid hsla(0, 0%, 0%, 0.06);\n    z-index: -200;\n}\n\n.overview-strip .background {\n    z-index: -10;\n}\n\n#timeline-overview-responsiveness {\n    flex-basis: 5px;\n    margin-top: 0 !important;\n}\n\n#timeline-overview-input {\n    flex-basis: 6px;\n}\n\n#timeline-overview-pane {\n    flex: auto;\n    position: relative;\n    overflow: hidden;\n}\n\n#timeline-overview-container {\n    display: flex;\n    flex-direction: column;\n    flex: none;\n    position: relative;\n    overflow: hidden;\n}\n\n#timeline-overview-container canvas {\n    width: 100%;\n    height: 100%;\n}\n\n.popover ul {\n    margin: 0;\n    padding: 0;\n    list-style-type: none;\n}\n\n.memory-graph-label {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    font-size: 9px;\n    color: #888;\n    white-space: nowrap;\n    padding: 0 4px;\n    background-color: hsla(0, 0%, 100%, 0.8);\n}\n\n#memory-graphs-canvas-container {\n    overflow: hidden;\n    flex: auto;\n    position: relative;\n}\n\n#memory-counters-graph {\n    flex: auto;\n}\n\n#memory-graphs-canvas-container .memory-counter-marker {\n    position: absolute;\n    border-radius: 3px;\n    width: 5px;\n    height: 5px;\n    margin-left: -3px;\n    margin-top: -2px;\n}\n\n#memory-graphs-container .timeline-memory-header {\n    flex: 0 0 26px;\n    background-color: #eee;\n    border-bottom: 1px solid #ddd;\n    justify-content: space-between;\n}\n\n#memory-graphs-container .timeline-memory-header::after {\n    content: \"\";\n    background-image: url(Images/toolbarResizerVertical.png);\n    background-repeat: no-repeat;\n    background-position: right center, center;\n    flex: 20px 0 0;\n    margin: 0 4px;\n}\n\n.timeline-memory-toolbar {\n    flex-shrink: 1;\n}\n\n.memory-counter-value {\n    margin: 8px;\n}\n\n#counter-values-bar {\n    flex: 0 0 20px;\n    border-top: solid 1px lightgray;\n    width: 100%;\n    overflow: hidden;\n    line-height: 18px;\n}\n\n#timeline-overview-coverage {\n    flex-basis: 20px;\n}\n\n.timeline-overview-coverage-label {\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    font-size: 9px;\n    color: #888;\n    white-space: nowrap;\n    padding: 0 4px;\n    background-color: hsla(0, 0%, 100%, 0.8);\n}\n\n.timeline-details {\n    vertical-align: top;\n}\n\n.timeline-details-title {\n    border-bottom: 1px solid #B8B8B8;\n    font-weight: bold;\n    padding-bottom: 5px;\n    padding-top: 0;\n    white-space: nowrap;\n}\n\n.timeline-details-row-title {\n    font-weight: bold;\n    text-align: right;\n    white-space: nowrap;\n}\n\n.timeline-details-row-data {\n    white-space: nowrap;\n}\n\n.timeline-details-view {\n    color: #333;\n    overflow: hidden;\n}\n\n.timeline-details-view-body {\n    flex: auto;\n    overflow: auto;\n    position: relative;\n    background-color: var(--toolbar-bg-color);\n    -webkit-user-select: text;\n}\n\n.timeline-details-view-body > div {\n    overflow: hidden;\n}\n\n.timeline-details-view-block {\n    flex: none;\n    display: flex;\n    background-color: white;\n    flex-direction: column;\n    padding-bottom: 5px;\n    border-bottom: var(--divider-border);\n}\n\n.timeline-details-view-row {\n    padding-left: 10px;\n    flex-direction: row;\n    display: flex;\n    line-height: 20px;\n}\n\n.timeline-details-view-block .timeline-details-stack-values {\n    flex-direction: column !important;\n}\n\n.timeline-details-chip-title {\n    font-size: 13px;\n    padding: 8px;\n    display: flex;\n    align-items: center;\n}\n\n.timeline-details-chip-title > div {\n    width: 12px;\n    height: 12px;\n    border: 1px solid rgba(0, 0, 0, 0.2);\n    display: inline-block;\n    margin-right: 4px;\n    content: \" \";\n}\n\n.timeline-details-view-row-title:not(:empty) {\n    color: rgb(152, 152, 152);\n    overflow: hidden;\n    padding-right: 10px;\n}\n\n.timeline-details-warning {\n    background-color: rgba(250, 209, 209, 0.48);\n}\n\n.timeline-details-warning .timeline-details-view-row-title {\n    color: red;\n}\n\n.timeline-details-warning .timeline-details-view-row-value {\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.timeline-details-view-row-value {\n    -webkit-user-select: text;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    overflow: hidden;\n}\n\n.timeline-details-view-row-value .stack-preview-container {\n    line-height: 11px;\n}\n\n.timeline-details-view-pie-chart-wrapper {\n    margin: 4px 0;\n}\n\n.timeline-details-view-pie-chart {\n    margin-top: 5px;\n}\n\n.timeline-details-view-row-stack-trace {\n    padding: 4px 0;\n    line-height: inherit;\n}\n\n.timeline-details-view-row-stack-trace div {\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    line-height: 12px;\n}\n\n.timeline-flamechart {\n    overflow: hidden;\n}\n\n.timeline-flamechart-resizer {\n    flex: 8px 0 0;\n    background-color: var(--toolbar-bg-color);\n    border: 1px #a3a3a3;\n    border-style: solid none;\n    display: flex;\n    flex-direction: row;\n    align-items: flex-end;\n    justify-content: center;\n}\n\n.timeline-network-resizer-disabled > .timeline-flamechart-resizer {\n    display: none;\n}\n\n.timeline-flamechart-resizer:after {\n    content: \"...\";\n    font-size: 14px;\n    margin-bottom: -1px;\n}\n\n.timeline-layers-view > div:last-child,\n.timeline-layers-view-properties > div:last-child {\n    background-color: #eee;\n}\n\n.timeline-layers-view-properties table {\n    width: 100%;\n    border-collapse: collapse;\n}\n\n.timeline-layers-view-properties td {\n    border: 1px solid #e1e1e1;\n    line-height: 22px;\n}\n\n.timeline-paint-profiler-log-split > div:last-child {\n    background-color: #eee;\n    z-index: 0;\n}\n\n.timeline-filmstrip-preview > img {\n    margin-top: 5px;\n    max-width: 500px;\n    max-height: 300px;\n    cursor: pointer;\n    border: 1px solid #ddd;\n}\n\n.timeline-tree-view {\n    display: flex;\n    overflow: hidden;\n}\n\n.timeline-tree-view .toolbar {\n    background-color: var(--toolbar-bg-color);\n    border-bottom: var(--divider-border);\n}\n\n.timeline-tree-view .data-grid {\n    border: none;\n    flex: auto;\n}\n\n.timeline-tree-view .data-grid .data-container {\n    overflow-y: scroll;\n}\n\n.timeline-tree-view .data-grid.data-grid-fits-viewport .corner {\n    display: table-cell;\n}\n\n.timeline-tree-view .data-grid table.data {\n    background: white;\n}\n\n.timeline-tree-view .data-grid tr:not(.selected) .highlight {\n    background-color: rgb(255, 230, 179);\n}\n\n.timeline-tree-view .data-grid tr:hover td:not(.bottom-filler-td) {\n    background-color: rgba(0, 0, 0, 0.1);\n}\n\n.timeline-tree-view .data-grid td.numeric-column {\n    text-align: right;\n    position: relative;\n}\n\n.timeline-tree-view .data-grid div.background-percent-bar {\n    float: right;\n}\n\n.timeline-tree-view .data-grid span.percent-column {\n    color: #888;\n    width: 45px;\n    display: inline-block;\n}\n\n.timeline-tree-view .data-grid tr.selected span {\n    color: inherit;\n}\n\n.timeline-tree-view .data-grid .name-container {\n    display: flex;\n    align-items: center;\n    padding-left: 2px;\n}\n\n.timeline-tree-view .data-grid .name-container div {\n    flex: none;\n}\n\n.timeline-tree-view .data-grid .name-container .activity-icon {\n    width: 12px;\n    height: 12px;\n    border: 1px solid rgba(0, 0, 0, 0.05);\n    margin: 3px 0;\n}\n\n.timeline-tree-view .data-grid .name-container .activity-icon-container {\n    margin-right: 3px;\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: center;\n    width: 18px;\n    height: 18px;\n    overflow: hidden;\n}\n\n.timeline-tree-view .data-grid .name-container .activity-warning::after {\n    content: \"[deopt]\";\n    margin: 0 4px;\n    line-height: 12px;\n    font-size: 10px;\n    color: #777;\n}\n\n.timeline-tree-view .data-grid tr.selected .name-container .activity-warning::after {\n    color: white;\n}\n\n.timeline-tree-view .data-grid .name-container .activity-link {\n    flex: auto;\n    text-align: right;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    margin-left: 5px;\n}\n\n.timeline-tree-view .data-grid .background-bar-container {\n    position: absolute;\n    left: 3px;\n    right: 0;\n}\n\n.timeline-tree-view .data-grid .background-bar {\n    float: right;\n    height: 18px;\n    background-color: hsla(43, 84%, 64%, 0.2);\n    border-bottom: 1px solid hsl(43, 84%, 64%);\n}\n\n.timeline-tree-view .data-grid .selected .background-bar {\n    background-color: rgba(255, 255, 255, 0.3);\n    border-bottom-color: rgba(255, 255, 255, 0.9);\n}\n\n.timeline-tree-view .timeline-details-view-body .full-widget-dimmed-banner {\n    background-color: inherit;\n}\n\n.timeline-details .filter-input-field {\n    width: 120px;\n}\n\n.timeline-tree-view .data-grid .header-container {\n    height: 21px;\n}\n\n.timeline-tree-view .data-grid .data-container {\n    top: 21px;\n}\n\n.timeline-stack-view-header {\n    height: 27px;\n    background-color: var(--toolbar-bg-color);\n    padding: 6px 10px;\n    color: #5a5a5a;\n    white-space: nowrap;\n    border-bottom: var(--divider-border);\n}\n\n.timeline-landing-page {\n    position: absolute;\n    background-color: white;\n    justify-content: center;\n    align-items: center;\n    overflow: auto;\n    font-size: 13px;\n    color: #777;\n}\n\n.timeline-landing-page > div {\n    max-width: 450px;\n    margin: 10px;\n}\n\n.timeline-landing-page > div > p {\n    flex: none;\n    white-space: pre-line;\n}\n\n/*# sourceURL=timeline/timelinePanel.css */";Root.Runtime.cachedResources["timeline/timelinePaintProfiler.css"]="/*\n * Copyright 2016 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.paint-profiler-image-view {\n    overflow: hidden;\n}\n\n.paint-profiler-image-view .paint-profiler-image-container {\n    -webkit-transform-origin: 0 0;\n}\n\n.paint-profiler-image-view .paint-profiler-image-container div {\n    border-color: rgba(100, 100, 100, 0.4);\n    border-style: solid;\n    z-index: 100;\n    position: absolute;\n    top: 0;\n    left: 0;\n}\n\n.paint-profiler-image-view img {\n    border: solid 1px black;\n}\n\n/*# sourceURL=timeline/timelinePaintProfiler.css */";Root.Runtime.cachedResources["timeline/timelineStatusDialog.css"]="/*\n * Copyright (c) 2015 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n.timeline-status-dialog {\n    display: flex;\n    flex-direction: column;\n    padding: 16px 16px 12px 16px;\n    align-self: center;\n    background-color: white;\n    box-shadow: var(--drop-shadow);\n}\n\n.status-dialog-line {\n    margin: 2px;\n    height: 14px;\n    display: flex;\n    align-items: baseline;\n}\n\n.status-dialog-line .label {\n    display: inline-block;\n    width: 80px;\n    text-align: right;\n    color: #aaa;\n    margin-right: 10px;\n}\n\n.timeline-status-dialog .progress .indicator-container {\n    display: inline-block;\n    width: 200px;\n    height: 8px;\n    background-color: #f4f4f4;\n    display: inline-block;\n}\n\n.timeline-status-dialog .progress .indicator {\n    background-color: rgb(112, 166, 255);\n    height: 100%;\n    width: 0;\n    margin: 0;\n}\n\n.timeline-status-dialog .stop-button {\n    margin-top: 8px;\n    height: 100%;\n    align-self: flex-end;\n}\n\n.timeline-status-dialog .stop-button button {\n    min-width: 80px;\n}\n\n/*# sourceURL=timeline/timelineStatusDialog.css */";Root.Runtime.cachedResources["web_audio/webAudio.css"]="/*\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n  overflow: hidden;\n}\n\n.web-audio-toolbar-container {\n  background-color: var(--toolbar-bg-color);\n  border-bottom: var(--divider-border);\n}\n\n.web-audio-toolbar {\n  display: inline-block;\n}\n\n.web-audio-landing-page {\n  position: absolute;\n  background-color: white;\n  justify-content: center;\n  align-items: center;\n  overflow: auto;\n  font-size: 13px;\n  color: #777;\n}\n\n.web-audio-landing-page > div {\n  max-width: 500px;\n  margin: 10px;\n}\n\n.web-audio-landing-page > div > p {\n  flex: none;\n  white-space: pre-line;\n}\n\n.context-detail-container {\n  flex: none;\n  display: flex;\n  background-color: white;\n  flex-direction: column;\n}\n\n.context-detail-header {\n  border-bottom: 1px solid rgb(230, 230, 230);\n  padding: 12px 24px;\n  margin-bottom: 10px;\n}\n\n.context-detail-title {\n  font-size: 15px;\n  font-weight: 400;\n}\n\n.context-detail-subtitle {\n  font-size: 12px;\n  margin-top: 10px;\n  user-select: text;\n}\n\n.context-detail-row {\n  flex-direction: row;\n  display: flex;\n  line-height: 18px;\n  padding-left: 24px;\n}\n\n.context-detail-row-entry:not(:empty) {\n  color: hsla(0, 0%, 46%, 1);\n  overflow: hidden;\n  width: 130px;\n}\n\n.context-detail-row-value {\n  user-select: text;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n\n.context-summary-container {\n  flex: 0 0 27px;\n  line-height: 27px;\n  padding-left: 5px;\n  background-color: #eee;\n  border-top: 1px solid #ccc;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n  overflow: hidden;\n}\n\n.context-summary-container span {\n  margin-right: 6px;\n}\n\n/*# sourceURL=web_audio/webAudio.css */";Root.Runtime.cachedResources["web_audio/audioContextSelector.css"]="/*\n * Copyright 2019 The Chromium Authors. All rights reserved.\n * Use of this source code is governed by a BSD-style license that can be\n * found in the LICENSE file.\n */\n\n:host {\n  padding: 2px 1px 2px 2px;\n  white-space: nowrap;\n  display: flex;\n  flex-direction: column;\n  height: 36px;\n  justify-content: center;\n}\n\n.title {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  flex-grow: 0;\n}\n/*# sourceURL=web_audio/audioContextSelector.css */";// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/* eslint-disable indent */
(function(window) {

  // DevToolsAPI ----------------------------------------------------------------

  /**
   * @unrestricted
   */
  const DevToolsAPIImpl = class {
    constructor() {
      /**
       * @type {number}
       */
      this._lastCallId = 0;

      /**
       * @type {!Object.<number, function(?Object)>}
       */
      this._callbacks = {};

      /**
       * @type {!Array.<!ExtensionDescriptor>}
       */
      this._pendingExtensionDescriptors = [];

      /**
       * @type {?function(!ExtensionDescriptor)}
       */
      this._addExtensionCallback = null;
    }

    /**
     * @param {number} id
     * @param {?Object} arg
     */
    embedderMessageAck(id, arg) {
      const callback = this._callbacks[id];
      delete this._callbacks[id];
      if (callback) {
        callback(arg);
      }
    }

    /**
     * @param {string} method
     * @param {!Array.<*>} args
     * @param {?function(?Object)} callback
     */
    sendMessageToEmbedder(method, args, callback) {
      const callId = ++this._lastCallId;
      if (callback) {
        this._callbacks[callId] = callback;
      }
      const message = {'id': callId, 'method': method};
      if (args.length) {
        message.params = args;
      }
      DevToolsHost.sendMessageToEmbedder(JSON.stringify(message));
    }

    /**
     * @param {string} method
     * @param {!Array<*>} args
     */
    _dispatchOnInspectorFrontendAPI(method, args) {
      const inspectorFrontendAPI = /** @type {!Object<string, function()>} */ (window['InspectorFrontendAPI']);
      inspectorFrontendAPI[method].apply(inspectorFrontendAPI, args);
    }

    // API methods below this line --------------------------------------------

    /**
     * @param {!Array.<!ExtensionDescriptor>} extensions
     */
    addExtensions(extensions) {
      // Support for legacy front-ends (<M41).
      if (window['WebInspector'] && window['WebInspector']['addExtensions']) {
        window['WebInspector']['addExtensions'](extensions);
      } else {
        // The addExtensions command is sent as the onload event happens for
        // DevTools front-end. We should buffer this command until the frontend
        // is ready for it.
        if (this._addExtensionCallback) {
          extensions.forEach(this._addExtensionCallback);
        } else {
          this._pendingExtensionDescriptors.pushAll(extensions);
        }
      }
    }

    /**
     * @param {string} url
     */
    appendedToURL(url) {
      this._dispatchOnInspectorFrontendAPI('appendedToURL', [url]);
    }

    /**
     * @param {string} url
     */
    canceledSaveURL(url) {
      this._dispatchOnInspectorFrontendAPI('canceledSaveURL', [url]);
    }

    contextMenuCleared() {
      this._dispatchOnInspectorFrontendAPI('contextMenuCleared', []);
    }

    /**
     * @param {string} id
     */
    contextMenuItemSelected(id) {
      this._dispatchOnInspectorFrontendAPI('contextMenuItemSelected', [id]);
    }

    /**
     * @param {number} count
     */
    deviceCountUpdated(count) {
      this._dispatchOnInspectorFrontendAPI('deviceCountUpdated', [count]);
    }

    /**
     * @param {!Adb.Config} config
     */
    devicesDiscoveryConfigChanged(config) {
      this._dispatchOnInspectorFrontendAPI('devicesDiscoveryConfigChanged', [config]);
    }

    /**
     * @param {!Adb.PortForwardingStatus} status
     */
    devicesPortForwardingStatusChanged(status) {
      this._dispatchOnInspectorFrontendAPI('devicesPortForwardingStatusChanged', [status]);
    }

    /**
     * @param {!Array.<!Adb.Device>} devices
     */
    devicesUpdated(devices) {
      this._dispatchOnInspectorFrontendAPI('devicesUpdated', [devices]);
    }

    /**
     * @param {string} message
     */
    dispatchMessage(message) {
      this._dispatchOnInspectorFrontendAPI('dispatchMessage', [message]);
    }

    /**
     * @param {string} messageChunk
     * @param {number} messageSize
     */
    dispatchMessageChunk(messageChunk, messageSize) {
      this._dispatchOnInspectorFrontendAPI('dispatchMessageChunk', [messageChunk, messageSize]);
    }

    enterInspectElementMode() {
      this._dispatchOnInspectorFrontendAPI('enterInspectElementMode', []);
    }

    /**
     * @param {!{r: number, g: number, b: number, a: number}} color
     */
    eyeDropperPickedColor(color) {
      this._dispatchOnInspectorFrontendAPI('eyeDropperPickedColor', [color]);
    }

    /**
     * @param {!Array.<!{fileSystemName: string, rootURL: string, fileSystemPath: string}>} fileSystems
     */
    fileSystemsLoaded(fileSystems) {
      this._dispatchOnInspectorFrontendAPI('fileSystemsLoaded', [fileSystems]);
    }

    /**
     * @param {string} fileSystemPath
     */
    fileSystemRemoved(fileSystemPath) {
      this._dispatchOnInspectorFrontendAPI('fileSystemRemoved', [fileSystemPath]);
    }

    /**
     * @param {?string} error
     * @param {?{type: string, fileSystemName: string, rootURL: string, fileSystemPath: string}} fileSystem
     */
    fileSystemAdded(error, fileSystem) {
      this._dispatchOnInspectorFrontendAPI('fileSystemAdded', [error, fileSystem]);
    }

    /**
     * @param {!Array<string>} changedPaths
     * @param {!Array<string>} addedPaths
     * @param {!Array<string>} removedPaths
     */
    fileSystemFilesChangedAddedRemoved(changedPaths, addedPaths, removedPaths) {
      // Support for legacy front-ends (<M58)
      if (window['InspectorFrontendAPI'] && window['InspectorFrontendAPI']['fileSystemFilesChanged']) {
        this._dispatchOnInspectorFrontendAPI(
            'fileSystemFilesChanged', [changedPaths.concat(addedPaths).concat(removedPaths)]);
      } else {
        this._dispatchOnInspectorFrontendAPI(
            'fileSystemFilesChangedAddedRemoved', [changedPaths, addedPaths, removedPaths]);
      }
    }

    /**
     * @param {number} requestId
     * @param {string} fileSystemPath
     * @param {number} totalWork
     */
    indexingTotalWorkCalculated(requestId, fileSystemPath, totalWork) {
      this._dispatchOnInspectorFrontendAPI('indexingTotalWorkCalculated', [requestId, fileSystemPath, totalWork]);
    }

    /**
     * @param {number} requestId
     * @param {string} fileSystemPath
     * @param {number} worked
     */
    indexingWorked(requestId, fileSystemPath, worked) {
      this._dispatchOnInspectorFrontendAPI('indexingWorked', [requestId, fileSystemPath, worked]);
    }

    /**
     * @param {number} requestId
     * @param {string} fileSystemPath
     */
    indexingDone(requestId, fileSystemPath) {
      this._dispatchOnInspectorFrontendAPI('indexingDone', [requestId, fileSystemPath]);
    }

    /**
     * @param {{type: string, key: string, code: string, keyCode: number, modifiers: number}} event
     */
    keyEventUnhandled(event) {
      event.keyIdentifier = keyCodeToKeyIdentifier(event.keyCode);
      this._dispatchOnInspectorFrontendAPI('keyEventUnhandled', [event]);
    }

    /**
     * @param {function(!ExtensionDescriptor)} callback
     */
    setAddExtensionCallback(callback) {
      this._addExtensionCallback = callback;
      if (this._pendingExtensionDescriptors.length) {
        this._pendingExtensionDescriptors.forEach(this._addExtensionCallback);
        this._pendingExtensionDescriptors = [];
      }
    }

    reattachMainTarget() {
      this._dispatchOnInspectorFrontendAPI('reattachMainTarget', []);
    }

    /**
     * @param {boolean} hard
     */
    reloadInspectedPage(hard) {
      this._dispatchOnInspectorFrontendAPI('reloadInspectedPage', [hard]);
    }

    /**
     * @param {string} url
     * @param {number} lineNumber
     * @param {number} columnNumber
     */
    revealSourceLine(url, lineNumber, columnNumber) {
      this._dispatchOnInspectorFrontendAPI('revealSourceLine', [url, lineNumber, columnNumber]);
    }

    /**
     * @param {string} url
     * @param {string=} fileSystemPath
     */
    savedURL(url, fileSystemPath) {
      this._dispatchOnInspectorFrontendAPI('savedURL', [url, fileSystemPath]);
    }

    /**
     * @param {number} requestId
     * @param {string} fileSystemPath
     * @param {!Array.<string>} files
     */
    searchCompleted(requestId, fileSystemPath, files) {
      this._dispatchOnInspectorFrontendAPI('searchCompleted', [requestId, fileSystemPath, files]);
    }

    /**
     * @param {string} tabId
     */
    setInspectedTabId(tabId) {
      this._inspectedTabIdValue = tabId;

      // Support for legacy front-ends (<M41).
      if (window['WebInspector'] && window['WebInspector']['setInspectedTabId']) {
        window['WebInspector']['setInspectedTabId'](tabId);
      } else {
        this._dispatchOnInspectorFrontendAPI('setInspectedTabId', [tabId]);
      }
    }

    /**
     * @return {string|undefined}
     */
    getInspectedTabId() {
      return this._inspectedTabIdValue;
    }

    /**
     * @param {boolean} useSoftMenu
     */
    setUseSoftMenu(useSoftMenu) {
      this._dispatchOnInspectorFrontendAPI('setUseSoftMenu', [useSoftMenu]);
    }

    /**
     * @param {string} panelName
     */
    showPanel(panelName) {
      this._dispatchOnInspectorFrontendAPI('showPanel', [panelName]);
    }

    /**
     * @param {number} id
     * @param {string} chunk
     * @param {boolean} encoded
     */
    streamWrite(id, chunk, encoded) {
      this._dispatchOnInspectorFrontendAPI('streamWrite', [id, encoded ? this._decodeBase64(chunk) : chunk]);
    }

    /**
     * @param {string} chunk
     * @return {string}
     */
    _decodeBase64(chunk) {
      const request = new XMLHttpRequest();
      request.open('GET', 'data:text/plain;base64,' + chunk, false);
      request.send(null);
      if (request.status === 200) {
        return request.responseText;
      } else {
        console.error('Error while decoding chunk in streamWrite');
        return '';
      }
    }
  };

  const DevToolsAPI = new DevToolsAPIImpl();
  window.DevToolsAPI = DevToolsAPI;

  // InspectorFrontendHostImpl --------------------------------------------------

  /**
   * @implements {InspectorFrontendHostAPI}
   * @unrestricted
   */
  const InspectorFrontendHostImpl = class {
    /**
     * @return {string}
     */
    getSelectionBackgroundColor() {
      return '#6e86ff';
    }

    /**
     * @return {string}
     */
    getSelectionForegroundColor() {
      return '#ffffff';
    }

    /**
     * @return {string}
     */
    getInactiveSelectionBackgroundColor() {
      return '#c9c8c8';
    }

    /**
     * @return {string}
     */
    getInactiveSelectionForegroundColor() {
      return '#323232';
    }

    /**
     * @override
     * @return {string}
     */
    platform() {
      return DevToolsHost.platform();
    }

    /**
     * @override
     */
    loadCompleted() {
      DevToolsAPI.sendMessageToEmbedder('loadCompleted', [], null);
      // Support for legacy (<57) frontends.
      if (window.Runtime && window.Runtime.queryParam) {
        const panelToOpen = window.Runtime.queryParam('panel');
        if (panelToOpen) {
          window.DevToolsAPI.showPanel(panelToOpen);
        }
      }
    }

    /**
     * @override
     */
    bringToFront() {
      DevToolsAPI.sendMessageToEmbedder('bringToFront', [], null);
    }

    /**
     * @override
     */
    closeWindow() {
      DevToolsAPI.sendMessageToEmbedder('closeWindow', [], null);
    }

    /**
     * @override
     * @param {boolean} isDocked
     * @param {function()} callback
     */
    setIsDocked(isDocked, callback) {
      DevToolsAPI.sendMessageToEmbedder('setIsDocked', [isDocked], callback);
    }

    /**
     * Requests inspected page to be placed atop of the inspector frontend with specified bounds.
     * @override
     * @param {{x: number, y: number, width: number, height: number}} bounds
     */
    setInspectedPageBounds(bounds) {
      DevToolsAPI.sendMessageToEmbedder('setInspectedPageBounds', [bounds], null);
    }

    /**
     * @override
     */
    inspectElementCompleted() {
      DevToolsAPI.sendMessageToEmbedder('inspectElementCompleted', [], null);
    }

    /**
     * @override
     * @param {string} url
     * @param {string} headers
     * @param {number} streamId
     * @param {function(!InspectorFrontendHostAPI.LoadNetworkResourceResult)} callback
     */
    loadNetworkResource(url, headers, streamId, callback) {
      DevToolsAPI.sendMessageToEmbedder(
          'loadNetworkResource', [url, headers, streamId], /** @type {function(?Object)} */ (callback));
    }

    /**
     * @override
     * @param {function(!Object<string, string>)} callback
     */
    getPreferences(callback) {
      DevToolsAPI.sendMessageToEmbedder('getPreferences', [], /** @type {function(?Object)} */ (callback));
    }

    /**
     * @override
     * @param {string} name
     * @param {string} value
     */
    setPreference(name, value) {
      DevToolsAPI.sendMessageToEmbedder('setPreference', [name, value], null);
    }

    /**
     * @override
     * @param {string} name
     */
    removePreference(name) {
      DevToolsAPI.sendMessageToEmbedder('removePreference', [name], null);
    }

    /**
     * @override
     */
    clearPreferences() {
      DevToolsAPI.sendMessageToEmbedder('clearPreferences', [], null);
    }

    /**
     * @override
     * @param {string} origin
     * @param {string} script
     */
    setInjectedScriptForOrigin(origin, script) {
      DevToolsAPI.sendMessageToEmbedder('registerExtensionsAPI', [origin, script], null);
    }

    /**
     * @override
     * @param {string} url
     */
    inspectedURLChanged(url) {
      DevToolsAPI.sendMessageToEmbedder('inspectedURLChanged', [url], null);
    }

    /**
     * @override
     * @param {string} text
     */
    copyText(text) {
      DevToolsHost.copyText(text);
    }

    /**
     * @override
     * @param {string} url
     */
    openInNewTab(url) {
      DevToolsAPI.sendMessageToEmbedder('openInNewTab', [url], null);
    }

    /**
     * @override
     * @param {string} fileSystemPath
     */
    showItemInFolder(fileSystemPath) {
      DevToolsAPI.sendMessageToEmbedder('showItemInFolder', [fileSystemPath], null);
    }

    /**
     * @override
     * @param {string} url
     * @param {string} content
     * @param {boolean} forceSaveAs
     */
    save(url, content, forceSaveAs) {
      DevToolsAPI.sendMessageToEmbedder('save', [url, content, forceSaveAs], null);
    }

    /**
     * @override
     * @param {string} url
     * @param {string} content
     */
    append(url, content) {
      DevToolsAPI.sendMessageToEmbedder('append', [url, content], null);
    }

    /**
     * @override
     * @param {string} url
     */
    close(url) {
    }

    /**
     * @override
     * @param {string} message
     */
    sendMessageToBackend(message) {
      DevToolsAPI.sendMessageToEmbedder('dispatchProtocolMessage', [message], null);
    }

    /**
     * @override
     * @param {string} actionName
     * @param {number} actionCode
     * @param {number} bucketSize
     */
    recordEnumeratedHistogram(actionName, actionCode, bucketSize) {
      // Support for M49 frontend.
      if (actionName === 'DevTools.DrawerShown') {
        return;
      }
      DevToolsAPI.sendMessageToEmbedder('recordEnumeratedHistogram', [actionName, actionCode, bucketSize], null);
    }

    /**
     * @override
     * @param {string} histogramName
     * @param {number} duration
     */
    recordPerformanceHistogram(histogramName, duration) {
      DevToolsAPI.sendMessageToEmbedder('recordPerformanceHistogram', [histogramName, duration], null);
    }

    /**
     * @override
     * @param {string} umaName
     */
    recordUserMetricsAction(umaName) {
      DevToolsAPI.sendMessageToEmbedder('recordUserMetricsAction', [umaName], null);
    }

    /**
     * @override
     */
    requestFileSystems() {
      DevToolsAPI.sendMessageToEmbedder('requestFileSystems', [], null);
    }

    /**
     * @override
     * @param {string=} type
     */
    addFileSystem(type) {
      DevToolsAPI.sendMessageToEmbedder('addFileSystem', [type || ''], null);
    }

    /**
     * @override
     * @param {string} fileSystemPath
     */
    removeFileSystem(fileSystemPath) {
      DevToolsAPI.sendMessageToEmbedder('removeFileSystem', [fileSystemPath], null);
    }

    /**
     * @override
     * @param {string} fileSystemId
     * @param {string} registeredName
     * @return {?DOMFileSystem}
     */
    isolatedFileSystem(fileSystemId, registeredName) {
      return DevToolsHost.isolatedFileSystem(fileSystemId, registeredName);
    }

    /**
     * @override
     * @param {!FileSystem} fileSystem
     */
    upgradeDraggedFileSystemPermissions(fileSystem) {
      DevToolsHost.upgradeDraggedFileSystemPermissions(fileSystem);
    }

    /**
     * @override
     * @param {number} requestId
     * @param {string} fileSystemPath
     * @param {string} excludedFolders
     */
    indexPath(requestId, fileSystemPath, excludedFolders) {
      // |excludedFolders| added in M67. For backward compatibility,
      // pass empty array.
      excludedFolders = excludedFolders || '[]';
      DevToolsAPI.sendMessageToEmbedder('indexPath', [requestId, fileSystemPath, excludedFolders], null);
    }

    /**
     * @override
     * @param {number} requestId
     */
    stopIndexing(requestId) {
      DevToolsAPI.sendMessageToEmbedder('stopIndexing', [requestId], null);
    }

    /**
     * @override
     * @param {number} requestId
     * @param {string} fileSystemPath
     * @param {string} query
     */
    searchInPath(requestId, fileSystemPath, query) {
      DevToolsAPI.sendMessageToEmbedder('searchInPath', [requestId, fileSystemPath, query], null);
    }

    /**
     * @override
     * @return {number}
     */
    zoomFactor() {
      return DevToolsHost.zoomFactor();
    }

    /**
     * @override
     */
    zoomIn() {
      DevToolsAPI.sendMessageToEmbedder('zoomIn', [], null);
    }

    /**
     * @override
     */
    zoomOut() {
      DevToolsAPI.sendMessageToEmbedder('zoomOut', [], null);
    }

    /**
     * @override
     */
    resetZoom() {
      DevToolsAPI.sendMessageToEmbedder('resetZoom', [], null);
    }

    /**
     * @override
     * @param {string} shortcuts
     */
    setWhitelistedShortcuts(shortcuts) {
      DevToolsAPI.sendMessageToEmbedder('setWhitelistedShortcuts', [shortcuts], null);
    }

    /**
     * @override
     * @param {boolean} active
     */
    setEyeDropperActive(active) {
      DevToolsAPI.sendMessageToEmbedder('setEyeDropperActive', [active], null);
    }

    /**
     * @override
     * @param {!Array<string>} certChain
     */
    showCertificateViewer(certChain) {
      DevToolsAPI.sendMessageToEmbedder('showCertificateViewer', [JSON.stringify(certChain)], null);
    }

    /**
     * Only needed to run Lighthouse on old devtools.
     * @override
     * @param {function()} callback
     */
    reattach(callback) {
      DevToolsAPI.sendMessageToEmbedder('reattach', [], callback);
    }

    /**
     * @override
     */
    readyForTest() {
      DevToolsAPI.sendMessageToEmbedder('readyForTest', [], null);
    }

    /**
     * @override
     */
    connectionReady() {
      DevToolsAPI.sendMessageToEmbedder('connectionReady', [], null);
    }

    /**
     * @override
     * @param {boolean} value
     */
    setOpenNewWindowForPopups(value) {
      DevToolsAPI.sendMessageToEmbedder('setOpenNewWindowForPopups', [value], null);
    }

    /**
     * @override
     * @param {!Adb.Config} config
     */
    setDevicesDiscoveryConfig(config) {
      DevToolsAPI.sendMessageToEmbedder(
          'setDevicesDiscoveryConfig',
          [
            config.discoverUsbDevices, config.portForwardingEnabled, JSON.stringify(config.portForwardingConfig),
            config.networkDiscoveryEnabled, JSON.stringify(config.networkDiscoveryConfig)
          ],
          null);
    }

    /**
     * @override
     * @param {boolean} enabled
     */
    setDevicesUpdatesEnabled(enabled) {
      DevToolsAPI.sendMessageToEmbedder('setDevicesUpdatesEnabled', [enabled], null);
    }

    /**
     * @override
     * @param {string} pageId
     * @param {string} action
     */
    performActionOnRemotePage(pageId, action) {
      DevToolsAPI.sendMessageToEmbedder('performActionOnRemotePage', [pageId, action], null);
    }

    /**
     * @override
     * @param {string} browserId
     * @param {string} url
     */
    openRemotePage(browserId, url) {
      DevToolsAPI.sendMessageToEmbedder('openRemotePage', [browserId, url], null);
    }

    /**
     * @override
     */
    openNodeFrontend() {
      DevToolsAPI.sendMessageToEmbedder('openNodeFrontend', [], null);
    }

    /**
     * @override
     * @param {number} x
     * @param {number} y
     * @param {!Array.<!InspectorFrontendHostAPI.ContextMenuDescriptor>} items
     * @param {!Document} document
     */
    showContextMenuAtPoint(x, y, items, document) {
      DevToolsHost.showContextMenuAtPoint(x, y, items, document);
    }

    /**
     * @override
     * @return {boolean}
     */
    isHostedMode() {
      return DevToolsHost.isHostedMode();
    }

    /**
     * @override
     * @param {function(!ExtensionDescriptor)} callback
     */
    setAddExtensionCallback(callback) {
      DevToolsAPI.setAddExtensionCallback(callback);
    }

    // Backward-compatible methods below this line --------------------------------------------

    /**
     * Support for legacy front-ends (<M65).
     * @return {boolean}
     */
    isUnderTest() {
      return false;
    }

    /**
     * Support for legacy front-ends (<M50).
     * @param {string} message
     */
    sendFrontendAPINotification(message) {
    }

    /**
     * Support for legacy front-ends (<M41).
     * @return {string}
     */
    port() {
      return 'unknown';
    }

    /**
     * Support for legacy front-ends (<M38).
     * @param {number} zoomFactor
     */
    setZoomFactor(zoomFactor) {
    }

    /**
     * Support for legacy front-ends (<M34).
     */
    sendMessageToEmbedder() {
    }

    /**
     * Support for legacy front-ends (<M34).
     * @param {string} dockSide
     */
    requestSetDockSide(dockSide) {
      DevToolsAPI.sendMessageToEmbedder('setIsDocked', [dockSide !== 'undocked'], null);
    }

    /**
     * Support for legacy front-ends (<M34).
     * @return {boolean}
     */
    supportsFileSystems() {
      return true;
    }

    /**
     * Support for legacy front-ends (<M44).
     * @param {number} actionCode
     */
    recordActionTaken(actionCode) {
      this.recordEnumeratedHistogram('DevTools.ActionTaken', actionCode, 100);
    }

    /**
     * Support for legacy front-ends (<M44).
     * @param {number} panelCode
     */
    recordPanelShown(panelCode) {
      this.recordEnumeratedHistogram('DevTools.PanelShown', panelCode, 20);
    }
  };

  window.InspectorFrontendHost = new InspectorFrontendHostImpl();

  // DevToolsApp ---------------------------------------------------------------

  function installObjectObserve() {
    /** @type {!Array<string>} */
    const properties = [
      'advancedSearchConfig',
      'auditsPanelSplitViewState',
      'auditsSidebarWidth',
      'blockedURLs',
      'breakpoints',
      'cacheDisabled',
      'colorFormat',
      'consoleHistory',
      'consoleTimestampsEnabled',
      'cpuProfilerView',
      'cssSourceMapsEnabled',
      'currentDockState',
      'customColorPalette',
      'customDevicePresets',
      'customEmulatedDeviceList',
      'customFormatters',
      'customUserAgent',
      'databaseTableViewVisibleColumns',
      'dataGrid-cookiesTable',
      'dataGrid-DOMStorageItemsView',
      'debuggerSidebarHidden',
      'disableDataSaverInfobar',
      'disablePausedStateOverlay',
      'domBreakpoints',
      'domWordWrap',
      'elementsPanelSplitViewState',
      'elementsSidebarWidth',
      'emulation.deviceHeight',
      'emulation.deviceModeValue',
      'emulation.deviceOrientationOverride',
      'emulation.deviceScale',
      'emulation.deviceScaleFactor',
      'emulation.deviceUA',
      'emulation.deviceWidth',
      'emulation.geolocationOverride',
      'emulation.showDeviceMode',
      'emulation.showRulers',
      'enableAsyncStackTraces',
      'eventListenerBreakpoints',
      'fileMappingEntries',
      'fileSystemMapping',
      'FileSystemViewSidebarWidth',
      'fileSystemViewSplitViewState',
      'filterBar-consoleView',
      'filterBar-networkPanel',
      'filterBar-promisePane',
      'filterBar-timelinePanel',
      'frameViewerHideChromeWindow',
      'heapSnapshotRetainersViewSize',
      'heapSnapshotSplitViewState',
      'hideCollectedPromises',
      'hideNetworkMessages',
      'highlightNodeOnHoverInOverlay',
      'highResolutionCpuProfiling',
      'inlineVariableValues',
      'Inspector.drawerSplitView',
      'Inspector.drawerSplitViewState',
      'InspectorView.panelOrder',
      'InspectorView.screencastSplitView',
      'InspectorView.screencastSplitViewState',
      'InspectorView.splitView',
      'InspectorView.splitViewState',
      'javaScriptDisabled',
      'jsSourceMapsEnabled',
      'lastActivePanel',
      'lastDockState',
      'lastSelectedSourcesSidebarPaneTab',
      'lastSnippetEvaluationIndex',
      'layerDetailsSplitView',
      'layerDetailsSplitViewState',
      'layersPanelSplitViewState',
      'layersShowInternalLayers',
      'layersSidebarWidth',
      'messageLevelFilters',
      'messageURLFilters',
      'monitoringXHREnabled',
      'navigatorGroupByFolder',
      'navigatorHidden',
      'networkColorCodeResourceTypes',
      'networkConditions',
      'networkConditionsCustomProfiles',
      'networkHideDataURL',
      'networkLogColumnsVisibility',
      'networkLogLargeRows',
      'networkLogShowOverview',
      'networkPanelSplitViewState',
      'networkRecordFilmStripSetting',
      'networkResourceTypeFilters',
      'networkShowPrimaryLoadWaterfall',
      'networkSidebarWidth',
      'openLinkHandler',
      'pauseOnCaughtException',
      'pauseOnExceptionEnabled',
      'preserveConsoleLog',
      'prettyPrintInfobarDisabled',
      'previouslyViewedFiles',
      'profilesPanelSplitViewState',
      'profilesSidebarWidth',
      'promiseStatusFilters',
      'recordAllocationStacks',
      'requestHeaderFilterSetting',
      'request-info-formData-category-expanded',
      'request-info-general-category-expanded',
      'request-info-queryString-category-expanded',
      'request-info-requestHeaders-category-expanded',
      'request-info-requestPayload-category-expanded',
      'request-info-responseHeaders-category-expanded',
      'resources',
      'resourcesLastSelectedItem',
      'resourcesPanelSplitViewState',
      'resourcesSidebarWidth',
      'resourceViewTab',
      'savedURLs',
      'screencastEnabled',
      'scriptsPanelNavigatorSidebarWidth',
      'searchInContentScripts',
      'selectedAuditCategories',
      'selectedColorPalette',
      'selectedProfileType',
      'shortcutPanelSwitch',
      'showAdvancedHeapSnapshotProperties',
      'showEventListenersForAncestors',
      'showFrameowkrListeners',
      'showHeaSnapshotObjectsHiddenProperties',
      'showInheritedComputedStyleProperties',
      'showMediaQueryInspector',
      'showNativeFunctionsInJSProfile',
      'showUAShadowDOM',
      'showWhitespacesInEditor',
      'sidebarPosition',
      'skipContentScripts',
      'skipStackFramesPattern',
      'sourceMapInfobarDisabled',
      'sourcesPanelDebuggerSidebarSplitViewState',
      'sourcesPanelNavigatorSplitViewState',
      'sourcesPanelSplitSidebarRatio',
      'sourcesPanelSplitViewState',
      'sourcesSidebarWidth',
      'standardEmulatedDeviceList',
      'StylesPaneSplitRatio',
      'stylesPaneSplitViewState',
      'textEditorAutocompletion',
      'textEditorAutoDetectIndent',
      'textEditorBracketMatching',
      'textEditorIndent',
      'textEditorTabMovesFocus',
      'timelineCaptureFilmStrip',
      'timelineCaptureLayersAndPictures',
      'timelineCaptureMemory',
      'timelineCaptureNetwork',
      'timeline-details',
      'timelineEnableJSSampling',
      'timelineOverviewMode',
      'timelinePanelDetailsSplitViewState',
      'timelinePanelRecorsSplitViewState',
      'timelinePanelTimelineStackSplitViewState',
      'timelinePerspective',
      'timeline-split',
      'timelineTreeGroupBy',
      'timeline-view',
      'timelineViewMode',
      'uiTheme',
      'watchExpressions',
      'WebInspector.Drawer.lastSelectedView',
      'WebInspector.Drawer.showOnLoad',
      'workspaceExcludedFolders',
      'workspaceFolderExcludePattern',
      'workspaceInfobarDisabled',
      'workspaceMappingInfobarDisabled',
      'xhrBreakpoints'
    ];

    /**
     * @this {!{_storage: Object, _name: string}}
     */
    function settingRemove() {
      this._storage[this._name] = undefined;
    }

    /**
     * @param {!Object} object
     * @param {function(!Array<!{name: string}>)} observer
     */
    function objectObserve(object, observer) {
      if (window['WebInspector']) {
        const settingPrototype = /** @type {!Object} */ (window['WebInspector']['Setting']['prototype']);
        if (typeof settingPrototype['remove'] === 'function') {
          settingPrototype['remove'] = settingRemove;
        }
      }
      /** @type {!Set<string>} */
      const changedProperties = new Set();
      let scheduled = false;

      function scheduleObserver() {
        if (scheduled) {
          return;
        }
        scheduled = true;
        setImmediate(callObserver);
      }

      function callObserver() {
        scheduled = false;
        const changes = /** @type {!Array<!{name: string}>} */ ([]);
        changedProperties.forEach(function(name) {
          changes.push({name: name});
        });
        changedProperties.clear();
        observer.call(null, changes);
      }

      /** @type {!Map<string, *>} */
      const storage = new Map();

      /**
       * @param {string} property
       */
      function defineProperty(property) {
        if (property in object) {
          storage.set(property, object[property]);
          delete object[property];
        }

        Object.defineProperty(object, property, {
          /**
           * @return {*}
           */
          get: function() {
            return storage.get(property);
          },

          /**
           * @param {*} value
           */
          set: function(value) {
            storage.set(property, value);
            changedProperties.add(property);
            scheduleObserver();
          }
        });
      }

      for (let i = 0; i < properties.length; ++i) {
        defineProperty(properties[i]);
      }
    }

    window.Object.observe = objectObserve;
  }

  /** @type {!Map<number, string>} */
  const staticKeyIdentifiers = new Map([
    [0x12, 'Alt'],
    [0x11, 'Control'],
    [0x10, 'Shift'],
    [0x14, 'CapsLock'],
    [0x5b, 'Win'],
    [0x5c, 'Win'],
    [0x0c, 'Clear'],
    [0x28, 'Down'],
    [0x23, 'End'],
    [0x0a, 'Enter'],
    [0x0d, 'Enter'],
    [0x2b, 'Execute'],
    [0x70, 'F1'],
    [0x71, 'F2'],
    [0x72, 'F3'],
    [0x73, 'F4'],
    [0x74, 'F5'],
    [0x75, 'F6'],
    [0x76, 'F7'],
    [0x77, 'F8'],
    [0x78, 'F9'],
    [0x79, 'F10'],
    [0x7a, 'F11'],
    [0x7b, 'F12'],
    [0x7c, 'F13'],
    [0x7d, 'F14'],
    [0x7e, 'F15'],
    [0x7f, 'F16'],
    [0x80, 'F17'],
    [0x81, 'F18'],
    [0x82, 'F19'],
    [0x83, 'F20'],
    [0x84, 'F21'],
    [0x85, 'F22'],
    [0x86, 'F23'],
    [0x87, 'F24'],
    [0x2f, 'Help'],
    [0x24, 'Home'],
    [0x2d, 'Insert'],
    [0x25, 'Left'],
    [0x22, 'PageDown'],
    [0x21, 'PageUp'],
    [0x13, 'Pause'],
    [0x2c, 'PrintScreen'],
    [0x27, 'Right'],
    [0x91, 'Scroll'],
    [0x29, 'Select'],
    [0x26, 'Up'],
    [0x2e, 'U+007F'],  // Standard says that DEL becomes U+007F.
    [0xb0, 'MediaNextTrack'],
    [0xb1, 'MediaPreviousTrack'],
    [0xb2, 'MediaStop'],
    [0xb3, 'MediaPlayPause'],
    [0xad, 'VolumeMute'],
    [0xae, 'VolumeDown'],
    [0xaf, 'VolumeUp'],
  ]);

  /**
   * @param {number} keyCode
   * @return {string}
   */
  function keyCodeToKeyIdentifier(keyCode) {
    let result = staticKeyIdentifiers.get(keyCode);
    if (result !== undefined) {
      return result;
    }
    result = 'U+';
    const hexString = keyCode.toString(16).toUpperCase();
    for (let i = hexString.length; i < 4; ++i) {
      result += '0';
    }
    result += hexString;
    return result;
  }

  function installBackwardsCompatibility() {
    const majorVersion = getRemoteMajorVersion();
    if (!majorVersion) {
      return;
    }

    /** @type {!Array<string>} */
    const styleRules = [];
    // Shadow DOM V0 polyfill
    if (majorVersion <= 73 && !Element.prototype.createShadowRoot) {
      Element.prototype.createShadowRoot = function() {
        try {
          return this.attachShadow({mode: 'open'});
        } catch (e) {
          // some elements we use to add shadow roots can no
          // longer have shadow roots.
          const fakeShadowHost = document.createElement('span');
          this.appendChild(fakeShadowHost);
          fakeShadowHost.className = 'fake-shadow-host';
          return fakeShadowHost.createShadowRoot();
        }
      };

      const origAdd = DOMTokenList.prototype.add;
      DOMTokenList.prototype.add = function(...tokens) {
        if (tokens[0].startsWith('insertion-point') || tokens[0].startsWith('tabbed-pane-header')) {
          this._myElement.slot = '.' + tokens[0];
        }
        return origAdd.apply(this, tokens);
      };

      const origCreateElement = Document.prototype.createElement;
      Document.prototype.createElement = function(tagName, ...rest) {
        if (tagName === 'content') {
          tagName = 'slot';
        }
        const element = origCreateElement.call(this, tagName, ...rest);
        element.classList._myElement = element;
        return element;
      };

      Object.defineProperty(HTMLSlotElement.prototype, 'select', {
        async set(selector) {
          this.name = selector;
        }
      });

      function overrideCreateElementWithClass() {
        window.removeEventListener('DOMContentLoaded', overrideCreateElementWithClass);

        const origCreateElementWithClass = Document.prototype.createElementWithClass;
        Document.prototype.createElementWithClass = function(tagName, className, ...rest) {
          if (tagName !== 'button' || (className !== 'soft-dropdown' && className !== 'dropdown-button')) {
            return origCreateElementWithClass.call(this, tagName, className, ...rest);
          }
          const element = origCreateElementWithClass.call(this, 'div', className, ...rest);
          element.tabIndex = 0;
          element.role = 'button';
          return element;
        };
      }

      // Document.prototype.createElementWithClass is a DevTools method, so we
      // need to wait for DOMContentLoaded in order to override it.
      if (window.document.head &&
          (window.document.readyState === 'complete' || window.document.readyState === 'interactive')) {
        overrideCreateElementWithClass();
      } else {
        window.addEventListener('DOMContentLoaded', overrideCreateElementWithClass);
      }
    }

    // Custom Elements V0 polyfill
    if (majorVersion <= 73 && !Document.prototype.hasOwnProperty('registerElement')) {
      const fakeRegistry = new Map();
      Document.prototype.registerElement = function(typeExtension, options) {
        const {prototype, extends: localName} = options;
        const document = this;
        const callback = function() {
          const element = document.createElement(localName || typeExtension);
          const skip = new Set(['constructor', '__proto__']);
          for (const key of Object.keys(Object.getOwnPropertyDescriptors(prototype.__proto__ || {}))) {
            if (skip.has(key)) {
              continue;
            }
            element[key] = prototype[key];
          }
          element.setAttribute('is', typeExtension);
          if (element['createdCallback']) {
            element['createdCallback']();
          }
          return element;
        };
        fakeRegistry.set(typeExtension, callback);
        return callback;
      };

      const origCreateElement = Document.prototype.createElement;
      Document.prototype.createElement = function(tagName, fakeCustomElementType) {
        const fakeConstructor = fakeRegistry.get(fakeCustomElementType);
        if (fakeConstructor) {
          return fakeConstructor();
        }
        return origCreateElement.call(this, tagName, fakeCustomElementType);
      };

      // DevTools front-ends mistakenly assume that
      //   classList.toggle('a', undefined) works as
      //   classList.toggle('a', false) rather than as
      //   classList.toggle('a');
      const originalDOMTokenListToggle = DOMTokenList.prototype.toggle;
      DOMTokenList.prototype.toggle = function(token, force) {
        if (arguments.length === 1) {
          force = !this.contains(token);
        }
        return originalDOMTokenListToggle.call(this, token, !!force);
      };
    }

    if (majorVersion <= 66) {
      /** @type {(!function(number, number):Element|undefined)} */
      ShadowRoot.prototype.__originalShadowRootElementFromPoint;

      if (!ShadowRoot.prototype.__originalShadowRootElementFromPoint) {
        ShadowRoot.prototype.__originalShadowRootElementFromPoint = ShadowRoot.prototype.elementFromPoint;
        /**
         *  @param {number} x
         *  @param {number} y
         *  @return {Element}
         */
        ShadowRoot.prototype.elementFromPoint = function(x, y) {
          const originalResult = ShadowRoot.prototype.__originalShadowRootElementFromPoint.apply(this, arguments);
          if (this.host && originalResult === this.host) {
            return null;
          }
          return originalResult;
        };
      }
    }

    if (majorVersion <= 53) {
      Object.defineProperty(window.KeyboardEvent.prototype, 'keyIdentifier', {
        /**
         * @return {string}
         * @this {KeyboardEvent}
         */
        get: function() {
          return keyCodeToKeyIdentifier(this.keyCode);
        }
      });
    }

    if (majorVersion <= 50) {
      installObjectObserve();
    }

    if (majorVersion <= 45) {
      /**
       * @param {string} property
       * @return {!CSSValue|null}
       * @this {CSSStyleDeclaration}
       */
      function getValue(property) {
        // Note that |property| comes from another context, so we can't use === here.
        // eslint-disable-next-line eqeqeq
        if (property == 'padding-left') {
          return /** @type {!CSSValue} */ ({
            /**
             * @return {number}
             * @this {!{__paddingLeft: number}}
             */
            getFloatValue: function() {
              return this.__paddingLeft;
            },
            __paddingLeft: parseFloat(this.paddingLeft)
          });
        }
        throw new Error('getPropertyCSSValue is undefined');
      }

      window.CSSStyleDeclaration.prototype.getPropertyCSSValue = getValue;

      function CSSPrimitiveValue() {
      }
      CSSPrimitiveValue.CSS_PX = 5;
      window.CSSPrimitiveValue = CSSPrimitiveValue;
    }

    if (majorVersion <= 45) {
      styleRules.push('* { min-width: 0; min-height: 0; }');
    }

    if (majorVersion <= 51) {
      // Support for quirky border-image behavior (<M51), see:
      // https://bugs.chromium.org/p/chromium/issues/detail?id=559258
      styleRules.push('.cm-breakpoint .CodeMirror-linenumber { border-style: solid !important; }');
      styleRules.push(
          '.cm-breakpoint.cm-breakpoint-conditional .CodeMirror-linenumber { border-style: solid !important; }');
    }
    if (majorVersion <= 71) {
      styleRules.push(
          '.coverage-toolbar-container, .animation-timeline-toolbar-container, .computed-properties { flex-basis: auto; }');
    }

    if (majorVersion <= 50) {
      Event.prototype.deepPath = undefined;
    }

    if (majorVersion <= 54) {
      window.FileError = /** @type {!function (new: FileError) : ?} */ ({
        NOT_FOUND_ERR: DOMException.NOT_FOUND_ERR,
        ABORT_ERR: DOMException.ABORT_ERR,
        INVALID_MODIFICATION_ERR: DOMException.INVALID_MODIFICATION_ERR,
        NOT_READABLE_ERR: 0  // No matching DOMException, so code will be 0.
      });
    }

    installExtraStyleRules(styleRules);
  }

  /**
   * @return {?number}
   */
  function getRemoteMajorVersion() {
    try {
      const remoteVersion = new URLSearchParams(window.location.search).get('remoteVersion');
      if (!remoteVersion) {
        return null;
      }
      const majorVersion = parseInt(remoteVersion.split('.')[0], 10);
      return majorVersion;
    } catch (e) {
      return null;
    }
  }

  /**
   * @param {!Array<string>} styleRules
   */
  function installExtraStyleRules(styleRules) {
    if (!styleRules.length) {
      return;
    }
    const styleText = styleRules.join('\n');
    document.head.appendChild(createStyleElement(styleText));

    const origCreateShadowRoot = HTMLElement.prototype.createShadowRoot;
    HTMLElement.prototype.createShadowRoot = function(...args) {
      const shadowRoot = origCreateShadowRoot.call(this, ...args);
      shadowRoot.appendChild(createStyleElement(styleText));
      return shadowRoot;
    };
  }

  /**
   * @param {string} styleText
   * @return {!Element}
   */
  function createStyleElement(styleText) {
    const style = document.createElement('style');
    style.textContent = styleText;
    return style;
  }

  installBackwardsCompatibility();

})(window);
/*
 * Copyright (C) 2010 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
/* eslint-disable indent */

/**
 * @fileoverview This file contains small testing framework along with the
 * test suite for the frontend. These tests are a part of the continues build
 * and are executed by the devtools_sanity_unittest.cc as a part of the
 * Interactive UI Test suite.
 * FIXME: change field naming style to use trailing underscore.
 */

(function createTestSuite(window) {

  /**
   * @unrestricted
   */
  const TestSuite = class {
    /**
     * Test suite for interactive UI tests.
     * @param {Object} domAutomationController DomAutomationController instance.
     */
    constructor(domAutomationController) {
      this.domAutomationController_ = domAutomationController;
      this.controlTaken_ = false;
      this.timerId_ = -1;
      this._asyncInvocationId = 0;
    }

    /**
     * Key event with given key identifier.
     */
    static createKeyEvent(key) {
      return new KeyboardEvent('keydown', {bubbles: true, cancelable: true, key: key});
    }
  };

  /**
   * Reports test failure.
   * @param {string} message Failure description.
   */
  TestSuite.prototype.fail = function(message) {
    if (this.controlTaken_) {
      this.reportFailure_(message);
    } else {
      throw message;
    }
  };

  /**
   * Equals assertion tests that expected === actual.
   * @param {!Object|boolean} expected Expected object.
   * @param {!Object|boolean} actual Actual object.
   * @param {string} opt_message User message to print if the test fails.
   */
  TestSuite.prototype.assertEquals = function(expected, actual, opt_message) {
    if (expected !== actual) {
      let message = 'Expected: \'' + expected + '\', but was \'' + actual + '\'';
      if (opt_message) {
        message = opt_message + '(' + message + ')';
      }
      this.fail(message);
    }
  };

  /**
   * True assertion tests that value == true.
   * @param {!Object} value Actual object.
   * @param {string} opt_message User message to print if the test fails.
   */
  TestSuite.prototype.assertTrue = function(value, opt_message) {
    this.assertEquals(true, !!value, opt_message);
  };

  /**
   * Takes control over execution.
   */
  TestSuite.prototype.takeControl = function() {
    this.controlTaken_ = true;
    // Set up guard timer.
    const self = this;
    this.timerId_ = setTimeout(function() {
      self.reportFailure_('Timeout exceeded: 20 sec');
    }, 20000);
  };

  /**
   * Releases control over execution.
   */
  TestSuite.prototype.releaseControl = function() {
    if (this.timerId_ !== -1) {
      clearTimeout(this.timerId_);
      this.timerId_ = -1;
    }
    this.controlTaken_ = false;
    this.reportOk_();
  };

  /**
   * Async tests use this one to report that they are completed.
   */
  TestSuite.prototype.reportOk_ = function() {
    this.domAutomationController_.send('[OK]');
  };

  /**
   * Async tests use this one to report failures.
   */
  TestSuite.prototype.reportFailure_ = function(error) {
    if (this.timerId_ !== -1) {
      clearTimeout(this.timerId_);
      this.timerId_ = -1;
    }
    this.domAutomationController_.send('[FAILED] ' + error);
  };

  /**
   * Run specified test on a fresh instance of the test suite.
   * @param {Array<string>} args method name followed by its parameters.
   */
  TestSuite.prototype.dispatchOnTestSuite = function(args) {
    const methodName = args.shift();
    try {
      this[methodName].apply(this, args);
      if (!this.controlTaken_) {
        this.reportOk_();
      }
    } catch (e) {
      this.reportFailure_(e);
    }
  };

  /**
   * Wrap an async method with TestSuite.{takeControl(), releaseControl()}
   * and invoke TestSuite.reportOk_ upon completion.
   * @param {Array<string>} args method name followed by its parameters.
   */
  TestSuite.prototype.waitForAsync = function(var_args) {
    const args = Array.prototype.slice.call(arguments);
    this.takeControl();
    args.push(this.releaseControl.bind(this));
    this.dispatchOnTestSuite(args);
  };

  /**
   * Overrides the method with specified name until it's called first time.
   * @param {!Object} receiver An object whose method to override.
   * @param {string} methodName Name of the method to override.
   * @param {!Function} override A function that should be called right after the
   *     overridden method returns.
   * @param {?boolean} opt_sticky Whether restore original method after first run
   *     or not.
   */
  TestSuite.prototype.addSniffer = function(receiver, methodName, override, opt_sticky) {
    const orig = receiver[methodName];
    if (typeof orig !== 'function') {
      this.fail('Cannot find method to override: ' + methodName);
    }
    const test = this;
    receiver[methodName] = function(var_args) {
      let result;
      try {
        result = orig.apply(this, arguments);
      } finally {
        if (!opt_sticky) {
          receiver[methodName] = orig;
        }
      }
      // In case of exception the override won't be called.
      try {
        override.apply(this, arguments);
      } catch (e) {
        test.fail('Exception in overriden method \'' + methodName + '\': ' + e);
      }
      return result;
    };
  };

  /**
   * Waits for current throttler invocations, if any.
   * @param {!Common.Throttler} throttler
   * @param {function()} callback
   */
  TestSuite.prototype.waitForThrottler = function(throttler, callback) {
    const test = this;
    let scheduleShouldFail = true;
    test.addSniffer(throttler, 'schedule', onSchedule);

    function hasSomethingScheduled() {
      return throttler._isRunningProcess || throttler._process;
    }

    function checkState() {
      if (!hasSomethingScheduled()) {
        scheduleShouldFail = false;
        callback();
        return;
      }

      test.addSniffer(throttler, '_processCompletedForTests', checkState);
    }

    function onSchedule() {
      if (scheduleShouldFail) {
        test.fail('Unexpected Throttler.schedule');
      }
    }

    checkState();
  };

  /**
   * @param {string} panelName Name of the panel to show.
   */
  TestSuite.prototype.showPanel = function(panelName) {
    return UI.inspectorView.showPanel(panelName);
  };

  // UI Tests

  /**
   * Tests that scripts tab can be open and populated with inspected scripts.
   */
  TestSuite.prototype.testShowScriptsTab = function() {
    const test = this;
    this.showPanel('sources').then(function() {
      // There should be at least main page script.
      this._waitUntilScriptsAreParsed(['debugger_test_page.html'], function() {
        test.releaseControl();
      });
    }.bind(this));
    // Wait until all scripts are added to the debugger.
    this.takeControl();
  };

  /**
   * Tests that scripts tab is populated with inspected scripts even if it
   * hadn't been shown by the moment inspected paged refreshed.
   * @see http://crbug.com/26312
   */
  TestSuite.prototype.testScriptsTabIsPopulatedOnInspectedPageRefresh = function() {
    const test = this;
    const debuggerModel = SDK.targetManager.mainTarget().model(SDK.DebuggerModel);
    debuggerModel.addEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, waitUntilScriptIsParsed);

    this.showPanel('elements').then(function() {
      // Reload inspected page. It will reset the debugger agent.
      test.evaluateInConsole_('window.location.reload(true);', function(resultText) {});
    });

    function waitUntilScriptIsParsed() {
      debuggerModel.removeEventListener(SDK.DebuggerModel.Events.GlobalObjectCleared, waitUntilScriptIsParsed);
      test.showPanel('sources').then(function() {
        test._waitUntilScriptsAreParsed(['debugger_test_page.html'], function() {
          test.releaseControl();
        });
      });
    }

    // Wait until all scripts are added to the debugger.
    this.takeControl();
  };

  /**
   * Tests that scripts list contains content scripts.
   */
  TestSuite.prototype.testContentScriptIsPresent = function() {
    const test = this;
    this.showPanel('sources').then(function() {
      test._waitUntilScriptsAreParsed(['page_with_content_script.html', 'simple_content_script.js'], function() {
        test.releaseControl();
      });
    });

    // Wait until all scripts are added to the debugger.
    this.takeControl();
  };

  /**
   * Tests that scripts are not duplicaed on Scripts tab switch.
   */
  TestSuite.prototype.testNoScriptDuplicatesOnPanelSwitch = function() {
    const test = this;

    function switchToElementsTab() {
      test.showPanel('elements').then(function() {
        setTimeout(switchToScriptsTab, 0);
      });
    }

    function switchToScriptsTab() {
      test.showPanel('sources').then(function() {
        setTimeout(checkScriptsPanel, 0);
      });
    }

    function checkScriptsPanel() {
      test.assertTrue(test._scriptsAreParsed(['debugger_test_page.html']), 'Some scripts are missing.');
      checkNoDuplicates();
      test.releaseControl();
    }

    function checkNoDuplicates() {
      const uiSourceCodes = test.nonAnonymousUISourceCodes_();
      for (let i = 0; i < uiSourceCodes.length; i++) {
        for (let j = i + 1; j < uiSourceCodes.length; j++) {
          test.assertTrue(
              uiSourceCodes[i].url() !== uiSourceCodes[j].url(),
              'Found script duplicates: ' + test.uiSourceCodesToString_(uiSourceCodes));
        }
      }
    }

    this.showPanel('sources').then(function() {
      test._waitUntilScriptsAreParsed(['debugger_test_page.html'], function() {
        checkNoDuplicates();
        setTimeout(switchToElementsTab, 0);
      });
    });

    // Wait until all scripts are added to the debugger.
    this.takeControl();
  };

  // Tests that debugger works correctly if pause event occurs when DevTools
  // frontend is being loaded.
  TestSuite.prototype.testPauseWhenLoadingDevTools = function() {
    const debuggerModel = SDK.targetManager.mainTarget().model(SDK.DebuggerModel);
    if (debuggerModel.debuggerPausedDetails) {
      return;
    }

    this.showPanel('sources').then(function() {
      // Script execution can already be paused.

      this._waitForScriptPause(this.releaseControl.bind(this));
    }.bind(this));

    this.takeControl();
  };

  // Tests that pressing "Pause" will pause script execution if the script
  // is already running.
  TestSuite.prototype.testPauseWhenScriptIsRunning = function() {
    this.showPanel('sources').then(function() {
      this.evaluateInConsole_('setTimeout("handleClick()", 0)', didEvaluateInConsole.bind(this));
    }.bind(this));

    function didEvaluateInConsole(resultText) {
      this.assertTrue(!isNaN(resultText), 'Failed to get timer id: ' + resultText);
      // Wait for some time to make sure that inspected page is running the
      // infinite loop.
      setTimeout(testScriptPause.bind(this), 300);
    }

    function testScriptPause() {
      // The script should be in infinite loop. Click "Pause" button to
      // pause it and wait for the result.
      UI.panels.sources._togglePause();

      this._waitForScriptPause(this.releaseControl.bind(this));
    }

    this.takeControl();
  };

  /**
   * Tests network size.
   */
  TestSuite.prototype.testNetworkSize = function() {
    const test = this;

    function finishRequest(request, finishTime) {
      test.assertEquals(25, request.resourceSize, 'Incorrect total data length');
      test.releaseControl();
    }

    this.addSniffer(SDK.NetworkDispatcher.prototype, '_finishNetworkRequest', finishRequest);

    // Reload inspected page to sniff network events
    test.evaluateInConsole_('window.location.reload(true);', function(resultText) {});

    this.takeControl();
  };

  /**
   * Tests network sync size.
   */
  TestSuite.prototype.testNetworkSyncSize = function() {
    const test = this;

    function finishRequest(request, finishTime) {
      test.assertEquals(25, request.resourceSize, 'Incorrect total data length');
      test.releaseControl();
    }

    this.addSniffer(SDK.NetworkDispatcher.prototype, '_finishNetworkRequest', finishRequest);

    // Send synchronous XHR to sniff network events
    test.evaluateInConsole_(
        'let xhr = new XMLHttpRequest(); xhr.open("GET", "chunked", false); xhr.send(null);', function() {});

    this.takeControl();
  };

  /**
   * Tests network raw headers text.
   */
  TestSuite.prototype.testNetworkRawHeadersText = function() {
    const test = this;

    function finishRequest(request, finishTime) {
      if (!request.responseHeadersText) {
        test.fail('Failure: resource does not have response headers text');
      }
      const index = request.responseHeadersText.indexOf('Date:');
      test.assertEquals(
          112, request.responseHeadersText.substring(index).length, 'Incorrect response headers text length');
      test.releaseControl();
    }

    this.addSniffer(SDK.NetworkDispatcher.prototype, '_finishNetworkRequest', finishRequest);

    // Reload inspected page to sniff network events
    test.evaluateInConsole_('window.location.reload(true);', function(resultText) {});

    this.takeControl();
  };

  /**
   * Tests network timing.
   */
  TestSuite.prototype.testNetworkTiming = function() {
    const test = this;

    function finishRequest(request, finishTime) {
      // Setting relaxed expectations to reduce flakiness.
      // Server sends headers after 100ms, then sends data during another 100ms.
      // We expect these times to be measured at least as 70ms.
      test.assertTrue(
          request.timing.receiveHeadersEnd - request.timing.connectStart >= 70,
          'Time between receiveHeadersEnd and connectStart should be >=70ms, but was ' +
              'receiveHeadersEnd=' + request.timing.receiveHeadersEnd + ', connectStart=' +
              request.timing.connectStart + '.');
      test.assertTrue(
          request.responseReceivedTime - request.startTime >= 0.07,
          'Time between responseReceivedTime and startTime should be >=0.07s, but was ' +
              'responseReceivedTime=' + request.responseReceivedTime + ', startTime=' + request.startTime + '.');
      test.assertTrue(
          request.endTime - request.startTime >= 0.14,
          'Time between endTime and startTime should be >=0.14s, but was ' +
              'endtime=' + request.endTime + ', startTime=' + request.startTime + '.');

      test.releaseControl();
    }

    this.addSniffer(SDK.NetworkDispatcher.prototype, '_finishNetworkRequest', finishRequest);

    // Reload inspected page to sniff network events
    test.evaluateInConsole_('window.location.reload(true);', function(resultText) {});

    this.takeControl();
  };

  TestSuite.prototype.testPushTimes = function(url) {
    const test = this;
    let pendingRequestCount = 2;

    function finishRequest(request, finishTime) {
      test.assertTrue(
          typeof request.timing.pushStart === 'number' && request.timing.pushStart > 0,
          `pushStart is invalid: ${request.timing.pushStart}`);
      test.assertTrue(typeof request.timing.pushEnd === 'number', `pushEnd is invalid: ${request.timing.pushEnd}`);
      test.assertTrue(request.timing.pushStart < request.startTime, 'pushStart should be before startTime');
      if (request.url().endsWith('?pushUseNullEndTime')) {
        test.assertTrue(request.timing.pushEnd === 0, `pushEnd should be 0 but is ${request.timing.pushEnd}`);
      } else {
        test.assertTrue(
            request.timing.pushStart < request.timing.pushEnd,
            `pushStart should be before pushEnd (${request.timing.pushStart} >= ${request.timing.pushEnd})`);
        // The below assertion is just due to the way we generate times in the moch URLRequestJob and is not generally an invariant.
        test.assertTrue(request.timing.pushEnd < request.endTime, 'pushEnd should be before endTime');
        test.assertTrue(request.startTime < request.timing.pushEnd, 'pushEnd should be after startTime');
      }
      if (!--pendingRequestCount) {
        test.releaseControl();
      }
    }

    this.addSniffer(SDK.NetworkDispatcher.prototype, '_finishNetworkRequest', finishRequest, true);

    test.evaluateInConsole_('addImage(\'' + url + '\')', function(resultText) {});
    test.evaluateInConsole_('addImage(\'' + url + '?pushUseNullEndTime\')', function(resultText) {});
    this.takeControl();
  };

  TestSuite.prototype.testConsoleOnNavigateBack = function() {

    function filteredMessages() {
      return SDK.consoleModel.messages().filter(a => a.source !== SDK.ConsoleMessage.MessageSource.Violation);
    }

    if (filteredMessages().length === 1) {
      firstConsoleMessageReceived.call(this, null);
    } else {
      SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, firstConsoleMessageReceived, this);
    }


    function firstConsoleMessageReceived(event) {
      if (event && event.data.source === SDK.ConsoleMessage.MessageSource.Violation) {
        return;
      }
      SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, firstConsoleMessageReceived, this);
      this.evaluateInConsole_('clickLink();', didClickLink.bind(this));
    }

    function didClickLink() {
      // Check that there are no new messages(command is not a message).
      this.assertEquals(3, filteredMessages().length);
      this.evaluateInConsole_('history.back();', didNavigateBack.bind(this));
    }

    function didNavigateBack() {
      // Make sure navigation completed and possible console messages were pushed.
      this.evaluateInConsole_('void 0;', didCompleteNavigation.bind(this));
    }

    function didCompleteNavigation() {
      this.assertEquals(7, filteredMessages().length);
      this.releaseControl();
    }

    this.takeControl();
  };

  TestSuite.prototype.testSharedWorker = function() {
    function didEvaluateInConsole(resultText) {
      this.assertEquals('2011', resultText);
      this.releaseControl();
    }
    this.evaluateInConsole_('globalVar', didEvaluateInConsole.bind(this));
    this.takeControl();
  };

  TestSuite.prototype.testPauseInSharedWorkerInitialization1 = function() {
    // Make sure the worker is loaded.
    this.takeControl();
    this._waitForTargets(1, callback.bind(this));

    function callback() {
      Protocol.test.deprecatedRunAfterPendingDispatches(this.releaseControl.bind(this));
    }
  };

  TestSuite.prototype.testPauseInSharedWorkerInitialization2 = function() {
    this.takeControl();
    this._waitForTargets(1, callback.bind(this));

    function callback() {
      const debuggerModel = SDK.targetManager.models(SDK.DebuggerModel)[0];
      if (debuggerModel.isPaused()) {
        SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
        debuggerModel.resume();
        return;
      }
      this._waitForScriptPause(callback.bind(this));
    }

    function onConsoleMessage(event) {
      const message = event.data.messageText;
      if (message !== 'connected') {
        this.fail('Unexpected message: ' + message);
      }
      this.releaseControl();
    }
  };

  TestSuite.prototype.testSharedWorkerNetworkPanel = function() {
    this.takeControl();
    this.showPanel('network').then(() => {
      if (!document.querySelector('#network-container')) {
        this.fail('unable to find #network-container');
      }
      this.releaseControl();
    });
  };

  TestSuite.prototype.enableTouchEmulation = function() {
    const deviceModeModel = new Emulation.DeviceModeModel(function() {});
    deviceModeModel._target = SDK.targetManager.mainTarget();
    deviceModeModel._applyTouch(true, true);
  };

  TestSuite.prototype.waitForDebuggerPaused = function() {
    const debuggerModel = SDK.targetManager.mainTarget().model(SDK.DebuggerModel);
    if (debuggerModel.debuggerPausedDetails) {
      return;
    }

    this.takeControl();
    this._waitForScriptPause(this.releaseControl.bind(this));
  };

  TestSuite.prototype.switchToPanel = function(panelName) {
    this.showPanel(panelName).then(this.releaseControl.bind(this));
    this.takeControl();
  };

  // Regression test for crbug.com/370035.
  TestSuite.prototype.testDeviceMetricsOverrides = function() {
    function dumpPageMetrics() {
      return JSON.stringify(
          {width: window.innerWidth, height: window.innerHeight, deviceScaleFactor: window.devicePixelRatio});
    }

    const test = this;

    async function testOverrides(params, metrics, callback) {
      await SDK.targetManager.mainTarget().emulationAgent().invoke_setDeviceMetricsOverride(params);
      test.evaluateInConsole_('(' + dumpPageMetrics.toString() + ')()', checkMetrics);

      function checkMetrics(consoleResult) {
        test.assertEquals(
            '"' + JSON.stringify(metrics) + '"', consoleResult, 'Wrong metrics for params: ' + JSON.stringify(params));
        callback();
      }
    }

    function step1() {
      testOverrides(
          {width: 1200, height: 1000, deviceScaleFactor: 1, mobile: false, fitWindow: true},
          {width: 1200, height: 1000, deviceScaleFactor: 1}, step2);
    }

    function step2() {
      testOverrides(
          {width: 1200, height: 1000, deviceScaleFactor: 1, mobile: false, fitWindow: false},
          {width: 1200, height: 1000, deviceScaleFactor: 1}, step3);
    }

    function step3() {
      testOverrides(
          {width: 1200, height: 1000, deviceScaleFactor: 3, mobile: false, fitWindow: true},
          {width: 1200, height: 1000, deviceScaleFactor: 3}, step4);
    }

    function step4() {
      testOverrides(
          {width: 1200, height: 1000, deviceScaleFactor: 3, mobile: false, fitWindow: false},
          {width: 1200, height: 1000, deviceScaleFactor: 3}, finish);
    }

    function finish() {
      test.releaseControl();
    }

    test.takeControl();
    step1();
  };

  TestSuite.prototype.testDispatchKeyEventShowsAutoFill = function() {
    const test = this;
    let receivedReady = false;

    function signalToShowAutofill() {
      SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
          {type: 'rawKeyDown', key: 'Down', windowsVirtualKeyCode: 40, nativeVirtualKeyCode: 40});
      SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
          {type: 'keyUp', key: 'Down', windowsVirtualKeyCode: 40, nativeVirtualKeyCode: 40});
    }

    function selectTopAutoFill() {
      SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
          {type: 'rawKeyDown', key: 'Down', windowsVirtualKeyCode: 40, nativeVirtualKeyCode: 40});
      SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
          {type: 'keyUp', key: 'Down', windowsVirtualKeyCode: 40, nativeVirtualKeyCode: 40});
      SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
          {type: 'rawKeyDown', key: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13});
      SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
          {type: 'keyUp', key: 'Enter', windowsVirtualKeyCode: 13, nativeVirtualKeyCode: 13});

      test.evaluateInConsole_('document.getElementById("name").value', onResultOfInput);
    }

    function onResultOfInput(value) {
      // Console adds "" around the response.
      test.assertEquals('"Abbf"', value);
      test.releaseControl();
    }

    function onConsoleMessage(event) {
      const message = event.data.messageText;
      if (message === 'ready' && !receivedReady) {
        receivedReady = true;
        signalToShowAutofill();
      }
      // This log comes from the browser unittest code.
      if (message === 'didShowSuggestions') {
        selectTopAutoFill();
      }
    }

    this.takeControl();

    // It is possible for the ready console messagage to be already received but not handled
    // or received later. This ensures we can catch both cases.
    SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);

    const messages = SDK.consoleModel.messages();
    if (messages.length) {
      const text = messages[0].messageText;
      this.assertEquals('ready', text);
      signalToShowAutofill();
    }
  };

  TestSuite.prototype.testKeyEventUnhandled = function() {
    function onKeyEventUnhandledKeyDown(event) {
      this.assertEquals('keydown', event.data.type);
      this.assertEquals('F8', event.data.key);
      this.assertEquals(119, event.data.keyCode);
      this.assertEquals(0, event.data.modifiers);
      this.assertEquals('', event.data.code);
      Host.InspectorFrontendHost.events.removeEventListener(
          Host.InspectorFrontendHostAPI.Events.KeyEventUnhandled, onKeyEventUnhandledKeyDown, this);
      Host.InspectorFrontendHost.events.addEventListener(
          Host.InspectorFrontendHostAPI.Events.KeyEventUnhandled, onKeyEventUnhandledKeyUp, this);
      SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
          {type: 'keyUp', key: 'F8', code: 'F8', windowsVirtualKeyCode: 119, nativeVirtualKeyCode: 119});
    }
    function onKeyEventUnhandledKeyUp(event) {
      this.assertEquals('keyup', event.data.type);
      this.assertEquals('F8', event.data.key);
      this.assertEquals(119, event.data.keyCode);
      this.assertEquals(0, event.data.modifiers);
      this.assertEquals('F8', event.data.code);
      this.releaseControl();
    }
    this.takeControl();
    Host.InspectorFrontendHost.events.addEventListener(
        Host.InspectorFrontendHostAPI.Events.KeyEventUnhandled, onKeyEventUnhandledKeyDown, this);
    SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
        {type: 'rawKeyDown', key: 'F8', windowsVirtualKeyCode: 119, nativeVirtualKeyCode: 119});
  };

  TestSuite.prototype.testDispatchKeyEventDoesNotCrash = function() {
    SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
        {type: 'rawKeyDown', windowsVirtualKeyCode: 0x23, key: 'End'});
    SDK.targetManager.mainTarget().inputAgent().invoke_dispatchKeyEvent(
        {type: 'keyUp', windowsVirtualKeyCode: 0x23, key: 'End'});
  };

  // Check that showing the certificate viewer does not crash, crbug.com/954874
  TestSuite.prototype.testShowCertificate = function() {
    Host.InspectorFrontendHost.showCertificateViewer([
      'MIIFIDCCBAigAwIBAgIQE0TsEu6R8FUHQv+9fE7j8TANBgkqhkiG9w0BAQsF' +
          'ADBUMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZp' +
          'Y2VzMSUwIwYDVQQDExxHb29nbGUgSW50ZXJuZXQgQXV0aG9yaXR5IEczMB4X' +
          'DTE5MDMyNjEzNDEwMVoXDTE5MDYxODEzMjQwMFowZzELMAkGA1UEBhMCVVMx' +
          'EzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDU1vdW50YWluIFZpZXcx' +
          'EzARBgNVBAoMCkdvb2dsZSBMTEMxFjAUBgNVBAMMDSouYXBwc3BvdC5jb20w' +
          'ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCwca7hj0kyoJVxcvyA' +
          'a8zNKMIXcoPM3aU1KVe7mxZITtwC6/D/D/q4Oe8fBQLeZ3c6qR5Sr3M+611k' +
          'Ab15AcGUgh1Xi0jZqERvd/5+P0aVCFJYeoLrPBzwSMZBStkoiO2CwtV8x06e' +
          'X7qUz7Hvr3oeG+Ma9OUMmIebl//zHtC82mE0mCRBQAW0MWEgT5nOWey74tJR' +
          'GRqUEI8ftV9grAshD5gY8kxxUoMfqrreaXVqcRF58ZPiwUJ0+SbtC5q9cJ+K' +
          'MuYM4TCetEuk/WQsa+1EnSa40dhGRtZjxbwEwQAJ1vLOcIA7AVR/Ck22Uj8X' +
          'UOECercjUrKdDyaAPcLp2TThAgMBAAGjggHZMIIB1TATBgNVHSUEDDAKBggr' +
          'BgEFBQcDATCBrwYDVR0RBIGnMIGkgg0qLmFwcHNwb3QuY29tggsqLmEucnVu' +
          'LmFwcIIVKi50aGlua3dpdGhnb29nbGUuY29tghAqLndpdGhnb29nbGUuY29t' +
          'ghEqLndpdGh5b3V0dWJlLmNvbYILYXBwc3BvdC5jb22CB3J1bi5hcHCCE3Ro' +
          'aW5rd2l0aGdvb2dsZS5jb22CDndpdGhnb29nbGUuY29tgg93aXRoeW91dHVi' +
          'ZS5jb20waAYIKwYBBQUHAQEEXDBaMC0GCCsGAQUFBzAChiFodHRwOi8vcGtp' +
          'Lmdvb2cvZ3NyMi9HVFNHSUFHMy5jcnQwKQYIKwYBBQUHMAGGHWh0dHA6Ly9v' +
          'Y3NwLnBraS5nb29nL0dUU0dJQUczMB0GA1UdDgQWBBTGkpE5o0H9+Wjc05rF' +
          'hNQiYDjBFjAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFHfCuFCaZ3Z2sS3C' +
          'htCDoH6mfrpLMCEGA1UdIAQaMBgwDAYKKwYBBAHWeQIFAzAIBgZngQwBAgIw' +
          'MQYDVR0fBCowKDAmoCSgIoYgaHR0cDovL2NybC5wa2kuZ29vZy9HVFNHSUFH' +
          'My5jcmwwDQYJKoZIhvcNAQELBQADggEBALqoYGqWtJW/6obEzY+ehsgfyXb+' +
          'qNIuV09wt95cRF93HlLbBlSZ/Iz8HXX44ZT1/tGAkwKnW0gDKSSab3I8U+e9' +
          'LHbC9VXrgAFENzu89MNKNmK5prwv+MPA2HUQPu4Pad3qXmd4+nKc/EUjtg1d' +
          '/xKGK1Vn6JX3i5ly/rduowez3LxpSAJuIwseum331aQaKC2z2ri++96B8MPU' +
          'KFXzvV2gVGOe3ZYqmwPaG8y38Tba+OzEh59ygl8ydJJhoI6+R3itPSy0aXUU' +
          'lMvvAbfCobXD5kBRQ28ysgbDSDOPs3fraXpAKL92QUjsABs58XBz5vka4swu' +
          'gg/u+ZxaKOqfIm8=',
      'MIIEXDCCA0SgAwIBAgINAeOpMBz8cgY4P5pTHTANBgkqhkiG9w0BAQsFADBM' +
          'MSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMK' +
          'R2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0xNzA2MTUwMDAw' +
          'NDJaFw0yMTEyMTUwMDAwNDJaMFQxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVH' +
          'b29nbGUgVHJ1c3QgU2VydmljZXMxJTAjBgNVBAMTHEdvb2dsZSBJbnRlcm5l' +
          'dCBBdXRob3JpdHkgRzMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB' +
          'AQDKUkvqHv/OJGuo2nIYaNVWXQ5IWi01CXZaz6TIHLGp/lOJ+600/4hbn7vn' +
          '6AAB3DVzdQOts7G5pH0rJnnOFUAK71G4nzKMfHCGUksW/mona+Y2emJQ2N+a' +
          'icwJKetPKRSIgAuPOB6Aahh8Hb2XO3h9RUk2T0HNouB2VzxoMXlkyW7XUR5m' +
          'w6JkLHnA52XDVoRTWkNty5oCINLvGmnRsJ1zouAqYGVQMc/7sy+/EYhALrVJ' +
          'EA8KbtyX+r8snwU5C1hUrwaW6MWOARa8qBpNQcWTkaIeoYvy/sGIJEmjR0vF' +
          'EwHdp1cSaWIr6/4g72n7OqXwfinu7ZYW97EfoOSQJeAzAgMBAAGjggEzMIIB' +
          'LzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF' +
          'BwMCMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHfCuFCaZ3Z2sS3C' +
          'htCDoH6mfrpLMB8GA1UdIwQYMBaAFJviB1dnHB7AagbeWbSaLd/cGYYuMDUG' +
          'CCsGAQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AucGtpLmdv' +
          'b2cvZ3NyMjAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8vY3JsLnBraS5nb29n' +
          'L2dzcjIvZ3NyMi5jcmwwPwYDVR0gBDgwNjA0BgZngQwBAgIwKjAoBggrBgEF' +
          'BQcCARYcaHR0cHM6Ly9wa2kuZ29vZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0B' +
          'AQsFAAOCAQEAHLeJluRT7bvs26gyAZ8so81trUISd7O45skDUmAge1cnxhG1' +
          'P2cNmSxbWsoiCt2eux9LSD+PAj2LIYRFHW31/6xoic1k4tbWXkDCjir37xTT' +
          'NqRAMPUyFRWSdvt+nlPqwnb8Oa2I/maSJukcxDjNSfpDh/Bd1lZNgdd/8cLd' +
          'sE3+wypufJ9uXO1iQpnh9zbuFIwsIONGl1p3A8CgxkqI/UAih3JaGOqcpcda' +
          'CIzkBaR9uYQ1X4k2Vg5APRLouzVy7a8IVk6wuy6pm+T7HT4LY8ibS5FEZlfA' +
          'FLSW8NwsVz9SBK2Vqn1N0PIMn5xA6NZVc7o835DLAFshEWfC7TIe3g==',
      'MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEg' +
          'MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkds' +
          'b2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAw' +
          'WhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3Qg' +
          'Q0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs' +
          'U2lnbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8o' +
          'mUVCxKs+IVSbC9N/hHD6ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe' +
          '+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1' +
          'AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjNS7SgfQx5' +
          'TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo' +
          '4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99y' +
          'qWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8E' +
          'BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IHV2ccHsBqBt5Z' +
          'tJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxz' +
          'aWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0' +
          'mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs' +
          'J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4' +
          'h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRD' +
          'LenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7' +
          '9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmg' +
          'QWpzU/qlULRuJQ/7TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq' +
          '/H5COEBkEveegeGTLg=='
    ]);
  };

  // Simple sanity check to make sure network throttling is wired up
  // See crbug.com/747724
  TestSuite.prototype.testOfflineNetworkConditions = async function() {
    const test = this;
    SDK.multitargetNetworkManager.setNetworkConditions(SDK.NetworkManager.OfflineConditions);

    function finishRequest(request) {
      test.assertEquals(
          'net::ERR_INTERNET_DISCONNECTED', request.localizedFailDescription, 'Request should have failed');
      test.releaseControl();
    }

    this.addSniffer(SDK.NetworkDispatcher.prototype, '_finishNetworkRequest', finishRequest);

    test.takeControl();
    test.evaluateInConsole_('window.location.reload(true);', function(resultText) {});
  };

  TestSuite.prototype.testEmulateNetworkConditions = function() {
    const test = this;

    function testPreset(preset, messages, next) {
      function onConsoleMessage(event) {
        const index = messages.indexOf(event.data.messageText);
        if (index === -1) {
          test.fail('Unexpected message: ' + event.data.messageText);
          return;
        }

        messages.splice(index, 1);
        if (!messages.length) {
          SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
          next();
        }
      }

      SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
      SDK.multitargetNetworkManager.setNetworkConditions(preset);
    }

    test.takeControl();
    step1();

    function step1() {
      testPreset(
          MobileThrottling.networkPresets[2],
          [
            'offline event: online = false', 'connection change event: type = none; downlinkMax = 0; effectiveType = 4g'
          ],
          step2);
    }

    function step2() {
      testPreset(
          MobileThrottling.networkPresets[1],
          [
            'online event: online = true',
            'connection change event: type = cellular; downlinkMax = 0.390625; effectiveType = 2g'
          ],
          step3);
    }

    function step3() {
      testPreset(
          MobileThrottling.networkPresets[0],
          ['connection change event: type = cellular; downlinkMax = 1.4400000000000002; effectiveType = 3g'],
          test.releaseControl.bind(test));
    }
  };

  TestSuite.prototype.testScreenshotRecording = function() {
    const test = this;

    function performActionsInPage(callback) {
      let count = 0;
      const div = document.createElement('div');
      div.setAttribute('style', 'left: 0px; top: 0px; width: 100px; height: 100px; position: absolute;');
      document.body.appendChild(div);
      requestAnimationFrame(frame);
      function frame() {
        const color = [0, 0, 0];
        color[count % 3] = 255;
        div.style.backgroundColor = 'rgb(' + color.join(',') + ')';
        if (++count > 10) {
          requestAnimationFrame(callback);
        } else {
          requestAnimationFrame(frame);
        }
      }
    }

    const captureFilmStripSetting = Common.settings.createSetting('timelineCaptureFilmStrip', false);
    captureFilmStripSetting.set(true);
    test.evaluateInConsole_(performActionsInPage.toString(), function() {});
    test.invokeAsyncWithTimeline_('performActionsInPage', onTimelineDone);

    function onTimelineDone() {
      captureFilmStripSetting.set(false);
      const filmStripModel = UI.panels.timeline._performanceModel.filmStripModel();
      const frames = filmStripModel.frames();
      test.assertTrue(frames.length > 4 && typeof frames.length === 'number');
      loadFrameImages(frames);
    }

    function loadFrameImages(frames) {
      const readyImages = [];
      for (const frame of frames) {
        frame.imageDataPromise().then(onGotImageData);
      }

      function onGotImageData(data) {
        const image = new Image();
        test.assertTrue(!!data, 'No image data for frame');
        image.addEventListener('load', onLoad);
        image.src = 'data:image/jpg;base64,' + data;
      }

      function onLoad(event) {
        readyImages.push(event.target);
        if (readyImages.length === frames.length) {
          validateImagesAndCompleteTest(readyImages);
        }
      }
    }

    function validateImagesAndCompleteTest(images) {
      let redCount = 0;
      let greenCount = 0;
      let blueCount = 0;

      const canvas = document.createElement('canvas');
      const ctx = canvas.getContext('2d');
      for (const image of images) {
        test.assertTrue(image.naturalWidth > 10);
        test.assertTrue(image.naturalHeight > 10);
        canvas.width = image.naturalWidth;
        canvas.height = image.naturalHeight;
        ctx.drawImage(image, 0, 0);
        const data = ctx.getImageData(0, 0, 1, 1);
        const color = Array.prototype.join.call(data.data, ',');
        if (data.data[0] > 200) {
          redCount++;
        } else if (data.data[1] > 200) {
          greenCount++;
        } else if (data.data[2] > 200) {
          blueCount++;
        } else {
          test.fail('Unexpected color: ' + color);
        }
      }
      test.assertTrue(redCount && greenCount && blueCount, 'Color sanity check failed');
      test.releaseControl();
    }

    test.takeControl();
  };

  TestSuite.prototype.testSettings = function() {
    const test = this;

    createSettings();
    test.takeControl();
    setTimeout(reset, 0);

    function createSettings() {
      const localSetting = Common.settings.createLocalSetting('local', undefined);
      localSetting.set({s: 'local', n: 1});
      const globalSetting = Common.settings.createSetting('global', undefined);
      globalSetting.set({s: 'global', n: 2});
    }

    function reset() {
      Root.Runtime.experiments.clearForTest();
      Host.InspectorFrontendHost.getPreferences(gotPreferences);
    }

    function gotPreferences(prefs) {
      Main.Main._instanceForTest._createSettings(prefs);

      const localSetting = Common.settings.createLocalSetting('local', undefined);
      test.assertEquals('object', typeof localSetting.get());
      test.assertEquals('local', localSetting.get().s);
      test.assertEquals(1, localSetting.get().n);
      const globalSetting = Common.settings.createSetting('global', undefined);
      test.assertEquals('object', typeof globalSetting.get());
      test.assertEquals('global', globalSetting.get().s);
      test.assertEquals(2, globalSetting.get().n);
      test.releaseControl();
    }
  };

  TestSuite.prototype.testWindowInitializedOnNavigateBack = function() {
    const test = this;
    test.takeControl();
    const messages = SDK.consoleModel.messages();
    if (messages.length === 1) {
      checkMessages();
    } else {
      SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, checkMessages.bind(this), this);
    }

    function checkMessages() {
      const messages = SDK.consoleModel.messages();
      test.assertEquals(1, messages.length);
      test.assertTrue(messages[0].messageText.indexOf('Uncaught') === -1);
      test.releaseControl();
    }
  };

  TestSuite.prototype.testConsoleContextNames = function() {
    const test = this;
    test.takeControl();
    this.showPanel('console').then(() => this._waitForExecutionContexts(2, onExecutionContexts.bind(this)));

    function onExecutionContexts() {
      const consoleView = Console.ConsoleView.instance();
      const selector = consoleView._consoleContextSelector;
      const values = [];
      for (const item of selector._items) {
        values.push(selector.titleFor(item));
      }
      test.assertEquals('top', values[0]);
      test.assertEquals('Simple content script', values[1]);
      test.releaseControl();
    }
  };

  TestSuite.prototype.testRawHeadersWithHSTS = function(url) {
    const test = this;
    test.takeControl();
    SDK.targetManager.addModelListener(
        SDK.NetworkManager, SDK.NetworkManager.Events.ResponseReceived, onResponseReceived);

    this.evaluateInConsole_(`
      let img = document.createElement('img');
      img.src = "${url}";
      document.body.appendChild(img);
    `, () => {});

    let count = 0;
    function onResponseReceived(event) {
      const networkRequest = event.data;
      if (!networkRequest.url().startsWith('http')) {
        return;
      }
      switch (++count) {
        case 1:  // Original redirect
          test.assertEquals(301, networkRequest.statusCode);
          test.assertEquals('Moved Permanently', networkRequest.statusText);
          test.assertTrue(url.endsWith(networkRequest.responseHeaderValue('Location')));
          break;

        case 2:  // HSTS internal redirect
          test.assertTrue(networkRequest.url().startsWith('http://'));
          test.assertEquals(307, networkRequest.statusCode);
          test.assertEquals('Internal Redirect', networkRequest.statusText);
          test.assertEquals('HSTS', networkRequest.responseHeaderValue('Non-Authoritative-Reason'));
          test.assertTrue(networkRequest.responseHeaderValue('Location').startsWith('https://'));
          break;

        case 3:  // Final response
          test.assertTrue(networkRequest.url().startsWith('https://'));
          test.assertTrue(networkRequest.requestHeaderValue('Referer').startsWith('http://127.0.0.1'));
          test.assertEquals(200, networkRequest.statusCode);
          test.assertEquals('OK', networkRequest.statusText);
          test.assertEquals('132', networkRequest.responseHeaderValue('Content-Length'));
          test.releaseControl();
      }
    }
  };

  TestSuite.prototype.testDOMWarnings = function() {
    const messages = SDK.consoleModel.messages();
    this.assertEquals(1, messages.length);
    const expectedPrefix = '[DOM] Found 2 elements with non-unique id #dup:';
    this.assertTrue(messages[0].messageText.startsWith(expectedPrefix));
  };

  TestSuite.prototype.waitForTestResultsInConsole = function() {
    const messages = SDK.consoleModel.messages();
    for (let i = 0; i < messages.length; ++i) {
      const text = messages[i].messageText;
      if (text === 'PASS') {
        return;
      } else if (/^FAIL/.test(text)) {
        this.fail(text);
      }  // This will throw.
    }
    // Neither PASS nor FAIL, so wait for more messages.
    function onConsoleMessage(event) {
      const text = event.data.messageText;
      if (text === 'PASS') {
        this.releaseControl();
      } else if (/^FAIL/.test(text)) {
        this.fail(text);
      }
    }

    SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage, this);
    this.takeControl();
  };

  TestSuite.prototype._overrideMethod = function(receiver, methodName, override) {
    const original = receiver[methodName];
    if (typeof original !== 'function') {
      this.fail(`TestSuite._overrideMethod: $[methodName] is not a function`);
      return;
    }
    receiver[methodName] = function() {
      let value;
      try {
        value = original.apply(receiver, arguments);
      } finally {
        receiver[methodName] = original;
      }
      override.apply(original, arguments);
      return value;
    };
  };

  TestSuite.prototype.startTimeline = function(callback) {
    const test = this;
    this.showPanel('timeline').then(function() {
      const timeline = UI.panels.timeline;
      test._overrideMethod(timeline, '_recordingStarted', callback);
      timeline._toggleRecording();
    });
  };

  TestSuite.prototype.stopTimeline = function(callback) {
    const timeline = UI.panels.timeline;
    this._overrideMethod(timeline, 'loadingComplete', callback);
    timeline._toggleRecording();
  };

  TestSuite.prototype.invokePageFunctionAsync = function(functionName, opt_args, callback_is_always_last) {
    const callback = arguments[arguments.length - 1];
    const doneMessage = `DONE: ${functionName}.${++this._asyncInvocationId}`;
    const argsString = arguments.length < 3 ?
        '' :
        Array.prototype.slice.call(arguments, 1, -1).map(arg => JSON.stringify(arg)).join(',') + ',';
    this.evaluateInConsole_(
        `${functionName}(${argsString} function() { console.log('${doneMessage}'); });`, function() {});
    SDK.consoleModel.addEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage);

    function onConsoleMessage(event) {
      const text = event.data.messageText;
      if (text === doneMessage) {
        SDK.consoleModel.removeEventListener(SDK.ConsoleModel.Events.MessageAdded, onConsoleMessage);
        callback();
      }
    }
  };

  TestSuite.prototype.invokeAsyncWithTimeline_ = function(functionName, callback) {
    const test = this;

    this.startTimeline(onRecordingStarted);

    function onRecordingStarted() {
      test.invokePageFunctionAsync(functionName, pageActionsDone);
    }

    function pageActionsDone() {
      test.stopTimeline(callback);
    }
  };

  TestSuite.prototype.enableExperiment = function(name) {
    Root.Runtime.experiments.enableForTest(name);
  };

  TestSuite.prototype.checkInputEventsPresent = function() {
    const expectedEvents = new Set(arguments);
    const model = UI.panels.timeline._performanceModel.timelineModel();
    const asyncEvents = model.virtualThreads().find(thread => thread.isMainFrame).asyncEventsByGroup;
    const input = asyncEvents.get(TimelineModel.TimelineModel.AsyncEventGroup.input) || [];
    const prefix = 'InputLatency::';
    for (const e of input) {
      if (!e.name.startsWith(prefix)) {
        continue;
      }
      if (e.steps.length < 2) {
        continue;
      }
      if (e.name.startsWith(prefix + 'Mouse') &&
          typeof TimelineModel.TimelineData.forEvent(e.steps[0]).timeWaitingForMainThread !== 'number') {
        throw `Missing timeWaitingForMainThread on ${e.name}`;
      }
      expectedEvents.delete(e.name.substr(prefix.length));
    }
    if (expectedEvents.size) {
      throw 'Some expected events are not found: ' + Array.from(expectedEvents.keys()).join(',');
    }
  };

  TestSuite.prototype.testInspectedElementIs = async function(nodeName) {
    this.takeControl();
    await self.runtime.loadModulePromise('elements');
    if (!Elements.ElementsPanel._firstInspectElementNodeNameForTest) {
      await new Promise(f => this.addSniffer(Elements.ElementsPanel, '_firstInspectElementCompletedForTest', f));
    }
    this.assertEquals(nodeName, Elements.ElementsPanel._firstInspectElementNodeNameForTest);
    this.releaseControl();
  };

  TestSuite.prototype.testDisposeEmptyBrowserContext = async function(url) {
    this.takeControl();
    const targetAgent = SDK.targetManager.mainTarget().targetAgent();
    const {browserContextId} = await targetAgent.invoke_createBrowserContext();
    const response1 = await targetAgent.invoke_getBrowserContexts();
    this.assertEquals(response1.browserContextIds.length, 1);
    await targetAgent.invoke_disposeBrowserContext({browserContextId});
    const response2 = await targetAgent.invoke_getBrowserContexts();
    this.assertEquals(response2.browserContextIds.length, 0);
    this.releaseControl();
  };

  TestSuite.prototype.testCreateBrowserContext = async function(url) {
    this.takeControl();
    const browserContextIds = [];
    const targetAgent = SDK.targetManager.mainTarget().targetAgent();

    const target1 = await createIsolatedTarget(url);
    const target2 = await createIsolatedTarget(url);

    const response = await targetAgent.invoke_getBrowserContexts();
    this.assertEquals(response.browserContextIds.length, 2);
    this.assertTrue(response.browserContextIds.includes(browserContextIds[0]));
    this.assertTrue(response.browserContextIds.includes(browserContextIds[1]));

    await evalCode(target1, 'localStorage.setItem("page1", "page1")');
    await evalCode(target2, 'localStorage.setItem("page2", "page2")');

    this.assertEquals(await evalCode(target1, 'localStorage.getItem("page1")'), 'page1');
    this.assertEquals(await evalCode(target1, 'localStorage.getItem("page2")'), null);
    this.assertEquals(await evalCode(target2, 'localStorage.getItem("page1")'), null);
    this.assertEquals(await evalCode(target2, 'localStorage.getItem("page2")'), 'page2');

    const removedTargets = [];
    SDK.targetManager.observeTargets({targetAdded: () => {}, targetRemoved: target => removedTargets.push(target)});
    await Promise.all([disposeBrowserContext(browserContextIds[0]), disposeBrowserContext(browserContextIds[1])]);
    this.assertEquals(removedTargets.length, 2);
    this.assertEquals(removedTargets.indexOf(target1) !== -1, true);
    this.assertEquals(removedTargets.indexOf(target2) !== -1, true);

    this.releaseControl();

    /**
     * @param {string} url
     * @return {!Promise<!SDK.Target>}
     */
    async function createIsolatedTarget(url) {
      const {browserContextId} = await targetAgent.invoke_createBrowserContext();
      browserContextIds.push(browserContextId);

      const {targetId} = await targetAgent.invoke_createTarget({url: 'about:blank', browserContextId});
      await targetAgent.invoke_attachToTarget({targetId, flatten: true});

      const target = SDK.targetManager.targets().find(target => target.id() === targetId);
      const pageAgent = target.pageAgent();
      await pageAgent.invoke_enable();
      await pageAgent.invoke_navigate({url});
      return target;
    }

    async function disposeBrowserContext(browserContextId) {
      const targetAgent = SDK.targetManager.mainTarget().targetAgent();
      await targetAgent.invoke_disposeBrowserContext({browserContextId});
    }

    async function evalCode(target, code) {
      return (await target.runtimeAgent().invoke_evaluate({expression: code})).result.value;
    }
  };

  TestSuite.prototype.testInputDispatchEventsToOOPIF = async function() {
    this.takeControl();

    await new Promise(callback => this._waitForTargets(2, callback));

    async function takeLogs(target) {
      const code = `
        (function() {
          var result = window.logs.join(' ');
          window.logs = [];
          return result;
        })()
      `;
      return (await target.runtimeAgent().invoke_evaluate({expression: code})).result.value;
    }

    let parentFrameOutput;
    let childFrameOutput;

    const inputAgent = SDK.targetManager.mainTarget().inputAgent();
    const runtimeAgent = SDK.targetManager.mainTarget().runtimeAgent();
    await inputAgent.invoke_dispatchMouseEvent({type: 'mousePressed', button: 'left', clickCount: 1, x: 10, y: 10});
    await inputAgent.invoke_dispatchMouseEvent({type: 'mouseMoved', button: 'left', clickCount: 1, x: 10, y: 20});
    await inputAgent.invoke_dispatchMouseEvent({type: 'mouseReleased', button: 'left', clickCount: 1, x: 10, y: 20});
    await inputAgent.invoke_dispatchMouseEvent({type: 'mousePressed', button: 'left', clickCount: 1, x: 230, y: 140});
    await inputAgent.invoke_dispatchMouseEvent({type: 'mouseMoved', button: 'left', clickCount: 1, x: 230, y: 150});
    await inputAgent.invoke_dispatchMouseEvent({type: 'mouseReleased', button: 'left', clickCount: 1, x: 230, y: 150});
    parentFrameOutput = 'Event type: mousedown button: 0 x: 10 y: 10 Event type: mouseup button: 0 x: 10 y: 20';
    this.assertEquals(parentFrameOutput, await takeLogs(SDK.targetManager.targets()[0]));
    childFrameOutput = 'Event type: mousedown button: 0 x: 30 y: 40 Event type: mouseup button: 0 x: 30 y: 50';
    this.assertEquals(childFrameOutput, await takeLogs(SDK.targetManager.targets()[1]));


    await inputAgent.invoke_dispatchKeyEvent({type: 'keyDown', key: 'a'});
    await runtimeAgent.invoke_evaluate({expression: `document.querySelector('iframe').focus()`});
    await inputAgent.invoke_dispatchKeyEvent({type: 'keyDown', key: 'a'});
    parentFrameOutput = 'Event type: keydown';
    this.assertEquals(parentFrameOutput, await takeLogs(SDK.targetManager.targets()[0]));
    childFrameOutput = 'Event type: keydown';
    this.assertEquals(childFrameOutput, await takeLogs(SDK.targetManager.targets()[1]));

    await inputAgent.invoke_dispatchTouchEvent({type: 'touchStart', touchPoints: [{x: 10, y: 10}]});
    await inputAgent.invoke_dispatchTouchEvent({type: 'touchEnd', touchPoints: []});
    await inputAgent.invoke_dispatchTouchEvent({type: 'touchStart', touchPoints: [{x: 230, y: 140}]});
    await inputAgent.invoke_dispatchTouchEvent({type: 'touchEnd', touchPoints: []});
    parentFrameOutput = 'Event type: touchstart touch x: 10 touch y: 10';
    this.assertEquals(parentFrameOutput, await takeLogs(SDK.targetManager.targets()[0]));
    childFrameOutput = 'Event type: touchstart touch x: 30 touch y: 40';
    this.assertEquals(childFrameOutput, await takeLogs(SDK.targetManager.targets()[1]));

    this.releaseControl();
  };

  TestSuite.prototype.testLoadResourceForFrontend = async function(baseURL, fileURL) {
    const test = this;
    const loggedHeaders = new Set(['cache-control', 'pragma']);
    function testCase(url, headers, expectedStatus, expectedHeaders, expectedContent) {
      return new Promise(fulfill => {
        Host.ResourceLoader.load(url, headers, callback);

        function callback(statusCode, headers, content) {
          test.assertEquals(expectedStatus, statusCode);

          const headersArray = [];
          for (const name in headers) {
            const nameLower = name.toLowerCase();
            if (loggedHeaders.has(nameLower)) {
              headersArray.push(nameLower);
            }
          }
          headersArray.sort();
          test.assertEquals(expectedHeaders.join(', '), headersArray.join(', '));
          test.assertEquals(expectedContent, content);
          fulfill();
        }
      });
    }

    this.takeControl();
    await testCase(baseURL + 'non-existent.html', undefined, 404, [], '');
    await testCase(baseURL + 'hello.html', undefined, 200, [], '<!doctype html>\n<p>hello</p>\n');
    await testCase(baseURL + 'echoheader?x-devtools-test', {'x-devtools-test': 'Foo'}, 200, ['cache-control'], 'Foo');
    await testCase(baseURL + 'set-header?pragma:%20no-cache', undefined, 200, ['pragma'], 'pragma: no-cache');

    await SDK.targetManager.mainTarget().runtimeAgent().invoke_evaluate({
      expression: `fetch("/set-cookie?devtools-test-cookie=Bar",
                         {credentials: 'include'})`,
      awaitPromise: true
    });
    await testCase(baseURL + 'echoheader?Cookie', undefined, 200, ['cache-control'], 'devtools-test-cookie=Bar');

    await SDK.targetManager.mainTarget().runtimeAgent().invoke_evaluate({
      expression: `fetch("/set-cookie?devtools-test-cookie=same-site-cookie;SameSite=Lax",
                         {credentials: 'include'})`,
      awaitPromise: true
    });
    await testCase(
        baseURL + 'echoheader?Cookie', undefined, 200, ['cache-control'], 'devtools-test-cookie=same-site-cookie');
    await testCase('data:text/html,<body>hello</body>', undefined, 200, [], '<body>hello</body>');
    await testCase(fileURL, undefined, 200, [], '<html>\n<body>\nDummy page.\n</body>\n</html>\n');
    await testCase(fileURL + 'thisfileshouldnotbefound', undefined, 404, [], '');

    this.releaseControl();
  };

  TestSuite.prototype.testExtensionWebSocketUserAgentOverride = async function(websocketPort) {
    this.takeControl();

    const testUserAgent = 'test user agent';
    SDK.multitargetNetworkManager.setUserAgentOverride(testUserAgent);

    function onRequestUpdated(event) {
      const request = event.data;
      if (request.resourceType() !== Common.resourceTypes.WebSocket) {
        return;
      }
      if (!request.requestHeadersText()) {
        return;
      }

      let actualUserAgent = 'no user-agent header';
      for (const {name, value} of request.requestHeaders()) {
        if (name.toLowerCase() === 'user-agent') {
          actualUserAgent = value;
        }
      }
      this.assertEquals(testUserAgent, actualUserAgent);
      this.releaseControl();
    }
    SDK.targetManager.addModelListener(
        SDK.NetworkManager, SDK.NetworkManager.Events.RequestUpdated, onRequestUpdated.bind(this));

    this.evaluateInConsole_(`new WebSocket('ws://127.0.0.1:${websocketPort}')`, () => {});
  };

  /**
   * Serializes array of uiSourceCodes to string.
   * @param {!Array.<!Workspace.UISourceCode>} uiSourceCodes
   * @return {string}
   */
  TestSuite.prototype.uiSourceCodesToString_ = function(uiSourceCodes) {
    const names = [];
    for (let i = 0; i < uiSourceCodes.length; i++) {
      names.push('"' + uiSourceCodes[i].url() + '"');
    }
    return names.join(',');
  };

  /**
   * Returns all loaded non anonymous uiSourceCodes.
   * @return {!Array.<!Workspace.UISourceCode>}
   */
  TestSuite.prototype.nonAnonymousUISourceCodes_ = function() {
    /**
     * @param {!Workspace.UISourceCode} uiSourceCode
     */
    function filterOutService(uiSourceCode) {
      return !uiSourceCode.project().isServiceProject();
    }

    const uiSourceCodes = Workspace.workspace.uiSourceCodes();
    return uiSourceCodes.filter(filterOutService);
  };

  /*
 * Evaluates the code in the console as if user typed it manually and invokes
 * the callback when the result message is received and added to the console.
 * @param {string} code
 * @param {function(string)} callback
 */
  TestSuite.prototype.evaluateInConsole_ = function(code, callback) {
    function innerEvaluate() {
      UI.context.removeFlavorChangeListener(SDK.ExecutionContext, showConsoleAndEvaluate, this);
      const consoleView = Console.ConsoleView.instance();
      consoleView._prompt._appendCommand(code);

      this.addSniffer(Console.ConsoleView.prototype, '_consoleMessageAddedForTest', function(viewMessage) {
        callback(viewMessage.toMessageElement().deepTextContent());
      }.bind(this));
    }

    function showConsoleAndEvaluate() {
      Common.console.showPromise().then(innerEvaluate.bind(this));
    }

    if (!UI.context.flavor(SDK.ExecutionContext)) {
      UI.context.addFlavorChangeListener(SDK.ExecutionContext, showConsoleAndEvaluate, this);
      return;
    }
    showConsoleAndEvaluate.call(this);
  };

  /**
   * Checks that all expected scripts are present in the scripts list
   * in the Scripts panel.
   * @param {!Array.<string>} expected Regular expressions describing
   *     expected script names.
   * @return {boolean} Whether all the scripts are in "scripts-files" select
   *     box
   */
  TestSuite.prototype._scriptsAreParsed = function(expected) {
    const uiSourceCodes = this.nonAnonymousUISourceCodes_();
    // Check that at least all the expected scripts are present.
    const missing = expected.slice(0);
    for (let i = 0; i < uiSourceCodes.length; ++i) {
      for (let j = 0; j < missing.length; ++j) {
        if (uiSourceCodes[i].name().search(missing[j]) !== -1) {
          missing.splice(j, 1);
          break;
        }
      }
    }
    return missing.length === 0;
  };

  /**
   * Waits for script pause, checks expectations, and invokes the callback.
   * @param {function():void} callback
   */
  TestSuite.prototype._waitForScriptPause = function(callback) {
    this.addSniffer(SDK.DebuggerModel.prototype, '_pausedScript', callback);
  };

  /**
   * Waits until all the scripts are parsed and invokes the callback.
   */
  TestSuite.prototype._waitUntilScriptsAreParsed = function(expectedScripts, callback) {
    const test = this;

    function waitForAllScripts() {
      if (test._scriptsAreParsed(expectedScripts)) {
        callback();
      } else {
        test.addSniffer(UI.panels.sources.sourcesView(), '_addUISourceCode', waitForAllScripts);
      }
    }

    waitForAllScripts();
  };

  TestSuite.prototype._waitForTargets = function(n, callback) {
    checkTargets.call(this);

    function checkTargets() {
      if (SDK.targetManager.targets().length >= n) {
        callback.call(null);
      } else {
        this.addSniffer(SDK.TargetManager.prototype, 'createTarget', checkTargets.bind(this));
      }
    }
  };

  TestSuite.prototype._waitForExecutionContexts = function(n, callback) {
    const runtimeModel = SDK.targetManager.mainTarget().model(SDK.RuntimeModel);
    checkForExecutionContexts.call(this);

    function checkForExecutionContexts() {
      if (runtimeModel.executionContexts().length >= n) {
        callback.call(null);
      } else {
        this.addSniffer(SDK.RuntimeModel.prototype, '_executionContextCreated', checkForExecutionContexts.bind(this));
      }
    }
  };


  window.uiTests = new TestSuite(window.domAutomationController);
})(window);
// File is generated by src/scripts/build/code_generator_frontend.py

// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.


// Accessibility.
Protocol.inspectorBackend.registerEnum("Accessibility.AXValueType", {Boolean: "boolean", Tristate: "tristate", BooleanOrUndefined: "booleanOrUndefined", Idref: "idref", IdrefList: "idrefList", Integer: "integer", Node: "node", NodeList: "nodeList", Number: "number", String: "string", ComputedString: "computedString", Token: "token", TokenList: "tokenList", DomRelation: "domRelation", Role: "role", InternalRole: "internalRole", ValueUndefined: "valueUndefined"});
Protocol.inspectorBackend.registerEnum("Accessibility.AXValueSourceType", {Attribute: "attribute", Implicit: "implicit", Style: "style", Contents: "contents", Placeholder: "placeholder", RelatedElement: "relatedElement"});
Protocol.inspectorBackend.registerEnum("Accessibility.AXValueNativeSourceType", {Figcaption: "figcaption", Label: "label", Labelfor: "labelfor", Labelwrapped: "labelwrapped", Legend: "legend", Tablecaption: "tablecaption", Title: "title", Other: "other"});
Protocol.inspectorBackend.registerEnum("Accessibility.AXPropertyName", {Busy: "busy", Disabled: "disabled", Editable: "editable", Focusable: "focusable", Focused: "focused", Hidden: "hidden", HiddenRoot: "hiddenRoot", Invalid: "invalid", Keyshortcuts: "keyshortcuts", Settable: "settable", Roledescription: "roledescription", Live: "live", Atomic: "atomic", Relevant: "relevant", Root: "root", Autocomplete: "autocomplete", HasPopup: "hasPopup", Level: "level", Multiselectable: "multiselectable", Orientation: "orientation", Multiline: "multiline", Readonly: "readonly", Required: "required", Valuemin: "valuemin", Valuemax: "valuemax", Valuetext: "valuetext", Checked: "checked", Expanded: "expanded", Modal: "modal", Pressed: "pressed", Selected: "selected", Activedescendant: "activedescendant", Controls: "controls", Describedby: "describedby", Details: "details", Errormessage: "errormessage", Flowto: "flowto", Labelledby: "labelledby", Owns: "owns"});
Protocol.inspectorBackend.registerCommand("Accessibility.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Accessibility.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Accessibility.getPartialAXTree", [{"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}, {"name": "fetchRelatives", "type": "boolean", "optional": true}], ["nodes"], false);
Protocol.inspectorBackend.registerCommand("Accessibility.getFullAXTree", [], ["nodes"], false);

// Animation.
Protocol.inspectorBackend.registerEnum("Animation.AnimationType", {CSSTransition: "CSSTransition", CSSAnimation: "CSSAnimation", WebAnimation: "WebAnimation"});
Protocol.inspectorBackend.registerEvent("Animation.animationCanceled", ["id"]);
Protocol.inspectorBackend.registerEvent("Animation.animationCreated", ["id"]);
Protocol.inspectorBackend.registerEvent("Animation.animationStarted", ["animation"]);
Protocol.inspectorBackend.registerCommand("Animation.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Animation.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Animation.getCurrentTime", [{"name": "id", "type": "string", "optional": false}], ["currentTime"], false);
Protocol.inspectorBackend.registerCommand("Animation.getPlaybackRate", [], ["playbackRate"], false);
Protocol.inspectorBackend.registerCommand("Animation.releaseAnimations", [{"name": "animations", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Animation.resolveAnimation", [{"name": "animationId", "type": "string", "optional": false}], ["remoteObject"], false);
Protocol.inspectorBackend.registerCommand("Animation.seekAnimations", [{"name": "animations", "type": "object", "optional": false}, {"name": "currentTime", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Animation.setPaused", [{"name": "animations", "type": "object", "optional": false}, {"name": "paused", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Animation.setPlaybackRate", [{"name": "playbackRate", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Animation.setTiming", [{"name": "animationId", "type": "string", "optional": false}, {"name": "duration", "type": "number", "optional": false}, {"name": "delay", "type": "number", "optional": false}], [], false);

// ApplicationCache.
Protocol.inspectorBackend.registerEvent("ApplicationCache.applicationCacheStatusUpdated", ["frameId", "manifestURL", "status"]);
Protocol.inspectorBackend.registerEvent("ApplicationCache.networkStateUpdated", ["isNowOnline"]);
Protocol.inspectorBackend.registerCommand("ApplicationCache.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("ApplicationCache.getApplicationCacheForFrame", [{"name": "frameId", "type": "string", "optional": false}], ["applicationCache"], false);
Protocol.inspectorBackend.registerCommand("ApplicationCache.getFramesWithManifests", [], ["frameIds"], false);
Protocol.inspectorBackend.registerCommand("ApplicationCache.getManifestForFrame", [{"name": "frameId", "type": "string", "optional": false}], ["manifestURL"], false);

// Audits.
Protocol.inspectorBackend.registerCommand("Audits.getEncodedResponse", [{"name": "requestId", "type": "string", "optional": false}, {"name": "encoding", "type": "string", "optional": false}, {"name": "quality", "type": "number", "optional": true}, {"name": "sizeOnly", "type": "boolean", "optional": true}], ["body", "originalSize", "encodedSize"], false);

// BackgroundService.
Protocol.inspectorBackend.registerEnum("BackgroundService.ServiceName", {BackgroundFetch: "backgroundFetch", BackgroundSync: "backgroundSync", PushMessaging: "pushMessaging", Notifications: "notifications", PaymentHandler: "paymentHandler", PeriodicBackgroundSync: "periodicBackgroundSync"});
Protocol.inspectorBackend.registerEvent("BackgroundService.recordingStateChanged", ["isRecording", "service"]);
Protocol.inspectorBackend.registerEvent("BackgroundService.backgroundServiceEventReceived", ["backgroundServiceEvent"]);
Protocol.inspectorBackend.registerCommand("BackgroundService.startObserving", [{"name": "service", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("BackgroundService.stopObserving", [{"name": "service", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("BackgroundService.setRecording", [{"name": "shouldRecord", "type": "boolean", "optional": false}, {"name": "service", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("BackgroundService.clearEvents", [{"name": "service", "type": "string", "optional": false}], [], false);

// Browser.
Protocol.inspectorBackend.registerEnum("Browser.WindowState", {Normal: "normal", Minimized: "minimized", Maximized: "maximized", Fullscreen: "fullscreen"});
Protocol.inspectorBackend.registerEnum("Browser.PermissionType", {AccessibilityEvents: "accessibilityEvents", AudioCapture: "audioCapture", BackgroundSync: "backgroundSync", BackgroundFetch: "backgroundFetch", ClipboardRead: "clipboardRead", ClipboardWrite: "clipboardWrite", DurableStorage: "durableStorage", Flash: "flash", Geolocation: "geolocation", Midi: "midi", MidiSysex: "midiSysex", Nfc: "nfc", Notifications: "notifications", PaymentHandler: "paymentHandler", PeriodicBackgroundSync: "periodicBackgroundSync", ProtectedMediaIdentifier: "protectedMediaIdentifier", Sensors: "sensors", VideoCapture: "videoCapture", IdleDetection: "idleDetection", WakeLockScreen: "wakeLockScreen", WakeLockSystem: "wakeLockSystem"});
Protocol.inspectorBackend.registerEnum("Browser.PermissionSetting", {Granted: "granted", Denied: "denied", Prompt: "prompt"});
Protocol.inspectorBackend.registerCommand("Browser.setPermission", [{"name": "origin", "type": "string", "optional": false}, {"name": "permission", "type": "object", "optional": false}, {"name": "setting", "type": "string", "optional": false}, {"name": "browserContextId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Browser.grantPermissions", [{"name": "origin", "type": "string", "optional": false}, {"name": "permissions", "type": "object", "optional": false}, {"name": "browserContextId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Browser.resetPermissions", [{"name": "browserContextId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Browser.close", [], [], false);
Protocol.inspectorBackend.registerCommand("Browser.crash", [], [], false);
Protocol.inspectorBackend.registerCommand("Browser.crashGpuProcess", [], [], false);
Protocol.inspectorBackend.registerCommand("Browser.getVersion", [], ["protocolVersion", "product", "revision", "userAgent", "jsVersion"], false);
Protocol.inspectorBackend.registerCommand("Browser.getBrowserCommandLine", [], ["arguments"], false);
Protocol.inspectorBackend.registerCommand("Browser.getHistograms", [{"name": "query", "type": "string", "optional": true}, {"name": "delta", "type": "boolean", "optional": true}], ["histograms"], false);
Protocol.inspectorBackend.registerCommand("Browser.getHistogram", [{"name": "name", "type": "string", "optional": false}, {"name": "delta", "type": "boolean", "optional": true}], ["histogram"], false);
Protocol.inspectorBackend.registerCommand("Browser.getWindowBounds", [{"name": "windowId", "type": "number", "optional": false}], ["bounds"], false);
Protocol.inspectorBackend.registerCommand("Browser.getWindowForTarget", [{"name": "targetId", "type": "string", "optional": true}], ["windowId", "bounds"], false);
Protocol.inspectorBackend.registerCommand("Browser.setWindowBounds", [{"name": "windowId", "type": "number", "optional": false}, {"name": "bounds", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Browser.setDockTile", [{"name": "badgeLabel", "type": "string", "optional": true}, {"name": "image", "type": "string", "optional": true}], [], false);

// CSS.
Protocol.inspectorBackend.registerEnum("CSS.StyleSheetOrigin", {Injected: "injected", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
Protocol.inspectorBackend.registerEnum("CSS.CSSMediaSource", {MediaRule: "mediaRule", ImportRule: "importRule", LinkedSheet: "linkedSheet", InlineSheet: "inlineSheet"});
Protocol.inspectorBackend.registerEvent("CSS.fontsUpdated", ["font"]);
Protocol.inspectorBackend.registerEvent("CSS.mediaQueryResultChanged", []);
Protocol.inspectorBackend.registerEvent("CSS.styleSheetAdded", ["header"]);
Protocol.inspectorBackend.registerEvent("CSS.styleSheetChanged", ["styleSheetId"]);
Protocol.inspectorBackend.registerEvent("CSS.styleSheetRemoved", ["styleSheetId"]);
Protocol.inspectorBackend.registerCommand("CSS.addRule", [{"name": "styleSheetId", "type": "string", "optional": false}, {"name": "ruleText", "type": "string", "optional": false}, {"name": "location", "type": "object", "optional": false}], ["rule"], false);
Protocol.inspectorBackend.registerCommand("CSS.collectClassNames", [{"name": "styleSheetId", "type": "string", "optional": false}], ["classNames"], false);
Protocol.inspectorBackend.registerCommand("CSS.createStyleSheet", [{"name": "frameId", "type": "string", "optional": false}], ["styleSheetId"], false);
Protocol.inspectorBackend.registerCommand("CSS.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("CSS.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("CSS.forcePseudoState", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "forcedPseudoClasses", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("CSS.getBackgroundColors", [{"name": "nodeId", "type": "number", "optional": false}], ["backgroundColors", "computedFontSize", "computedFontWeight"], false);
Protocol.inspectorBackend.registerCommand("CSS.getComputedStyleForNode", [{"name": "nodeId", "type": "number", "optional": false}], ["computedStyle"], false);
Protocol.inspectorBackend.registerCommand("CSS.getInlineStylesForNode", [{"name": "nodeId", "type": "number", "optional": false}], ["inlineStyle", "attributesStyle"], false);
Protocol.inspectorBackend.registerCommand("CSS.getMatchedStylesForNode", [{"name": "nodeId", "type": "number", "optional": false}], ["inlineStyle", "attributesStyle", "matchedCSSRules", "pseudoElements", "inherited", "cssKeyframesRules"], false);
Protocol.inspectorBackend.registerCommand("CSS.getMediaQueries", [], ["medias"], false);
Protocol.inspectorBackend.registerCommand("CSS.getPlatformFontsForNode", [{"name": "nodeId", "type": "number", "optional": false}], ["fonts"], false);
Protocol.inspectorBackend.registerCommand("CSS.getStyleSheetText", [{"name": "styleSheetId", "type": "string", "optional": false}], ["text"], false);
Protocol.inspectorBackend.registerCommand("CSS.setEffectivePropertyValueForNode", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "propertyName", "type": "string", "optional": false}, {"name": "value", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("CSS.setKeyframeKey", [{"name": "styleSheetId", "type": "string", "optional": false}, {"name": "range", "type": "object", "optional": false}, {"name": "keyText", "type": "string", "optional": false}], ["keyText"], false);
Protocol.inspectorBackend.registerCommand("CSS.setMediaText", [{"name": "styleSheetId", "type": "string", "optional": false}, {"name": "range", "type": "object", "optional": false}, {"name": "text", "type": "string", "optional": false}], ["media"], false);
Protocol.inspectorBackend.registerCommand("CSS.setRuleSelector", [{"name": "styleSheetId", "type": "string", "optional": false}, {"name": "range", "type": "object", "optional": false}, {"name": "selector", "type": "string", "optional": false}], ["selectorList"], false);
Protocol.inspectorBackend.registerCommand("CSS.setStyleSheetText", [{"name": "styleSheetId", "type": "string", "optional": false}, {"name": "text", "type": "string", "optional": false}], ["sourceMapURL"], false);
Protocol.inspectorBackend.registerCommand("CSS.setStyleTexts", [{"name": "edits", "type": "object", "optional": false}], ["styles"], false);
Protocol.inspectorBackend.registerCommand("CSS.startRuleUsageTracking", [], [], false);
Protocol.inspectorBackend.registerCommand("CSS.stopRuleUsageTracking", [], ["ruleUsage"], false);
Protocol.inspectorBackend.registerCommand("CSS.takeCoverageDelta", [], ["coverage"], false);

// CacheStorage.
Protocol.inspectorBackend.registerEnum("CacheStorage.CachedResponseType", {Basic: "basic", Cors: "cors", Default: "default", Error: "error", OpaqueResponse: "opaqueResponse", OpaqueRedirect: "opaqueRedirect"});
Protocol.inspectorBackend.registerCommand("CacheStorage.deleteCache", [{"name": "cacheId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("CacheStorage.deleteEntry", [{"name": "cacheId", "type": "string", "optional": false}, {"name": "request", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("CacheStorage.requestCacheNames", [{"name": "securityOrigin", "type": "string", "optional": false}], ["caches"], false);
Protocol.inspectorBackend.registerCommand("CacheStorage.requestCachedResponse", [{"name": "cacheId", "type": "string", "optional": false}, {"name": "requestURL", "type": "string", "optional": false}, {"name": "requestHeaders", "type": "object", "optional": false}], ["response"], false);
Protocol.inspectorBackend.registerCommand("CacheStorage.requestEntries", [{"name": "cacheId", "type": "string", "optional": false}, {"name": "skipCount", "type": "number", "optional": true}, {"name": "pageSize", "type": "number", "optional": true}, {"name": "pathFilter", "type": "string", "optional": true}], ["cacheDataEntries", "returnCount"], false);

// Cast.
Protocol.inspectorBackend.registerEvent("Cast.sinksUpdated", ["sinks"]);
Protocol.inspectorBackend.registerEvent("Cast.issueUpdated", ["issueMessage"]);
Protocol.inspectorBackend.registerCommand("Cast.enable", [{"name": "presentationUrl", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Cast.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Cast.setSinkToUse", [{"name": "sinkName", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Cast.startTabMirroring", [{"name": "sinkName", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Cast.stopCasting", [{"name": "sinkName", "type": "string", "optional": false}], [], false);

// DOM.
Protocol.inspectorBackend.registerEnum("DOM.PseudoType", {FirstLine: "first-line", FirstLetter: "first-letter", Before: "before", After: "after", Backdrop: "backdrop", Selection: "selection", FirstLineInherited: "first-line-inherited", Scrollbar: "scrollbar", ScrollbarThumb: "scrollbar-thumb", ScrollbarButton: "scrollbar-button", ScrollbarTrack: "scrollbar-track", ScrollbarTrackPiece: "scrollbar-track-piece", ScrollbarCorner: "scrollbar-corner", Resizer: "resizer", InputListButton: "input-list-button"});
Protocol.inspectorBackend.registerEnum("DOM.ShadowRootType", {UserAgent: "user-agent", Open: "open", Closed: "closed"});
Protocol.inspectorBackend.registerEvent("DOM.attributeModified", ["nodeId", "name", "value"]);
Protocol.inspectorBackend.registerEvent("DOM.attributeRemoved", ["nodeId", "name"]);
Protocol.inspectorBackend.registerEvent("DOM.characterDataModified", ["nodeId", "characterData"]);
Protocol.inspectorBackend.registerEvent("DOM.childNodeCountUpdated", ["nodeId", "childNodeCount"]);
Protocol.inspectorBackend.registerEvent("DOM.childNodeInserted", ["parentNodeId", "previousNodeId", "node"]);
Protocol.inspectorBackend.registerEvent("DOM.childNodeRemoved", ["parentNodeId", "nodeId"]);
Protocol.inspectorBackend.registerEvent("DOM.distributedNodesUpdated", ["insertionPointId", "distributedNodes"]);
Protocol.inspectorBackend.registerEvent("DOM.documentUpdated", []);
Protocol.inspectorBackend.registerEvent("DOM.inlineStyleInvalidated", ["nodeIds"]);
Protocol.inspectorBackend.registerEvent("DOM.pseudoElementAdded", ["parentId", "pseudoElement"]);
Protocol.inspectorBackend.registerEvent("DOM.pseudoElementRemoved", ["parentId", "pseudoElementId"]);
Protocol.inspectorBackend.registerEvent("DOM.setChildNodes", ["parentId", "nodes"]);
Protocol.inspectorBackend.registerEvent("DOM.shadowRootPopped", ["hostId", "rootId"]);
Protocol.inspectorBackend.registerEvent("DOM.shadowRootPushed", ["hostId", "root"]);
Protocol.inspectorBackend.registerCommand("DOM.collectClassNamesFromSubtree", [{"name": "nodeId", "type": "number", "optional": false}], ["classNames"], false);
Protocol.inspectorBackend.registerCommand("DOM.copyTo", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "targetNodeId", "type": "number", "optional": false}, {"name": "insertBeforeNodeId", "type": "number", "optional": true}], ["nodeId"], false);
Protocol.inspectorBackend.registerCommand("DOM.describeNode", [{"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}, {"name": "depth", "type": "number", "optional": true}, {"name": "pierce", "type": "boolean", "optional": true}], ["node"], false);
Protocol.inspectorBackend.registerCommand("DOM.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("DOM.discardSearchResults", [{"name": "searchId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("DOM.focus", [{"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.getAttributes", [{"name": "nodeId", "type": "number", "optional": false}], ["attributes"], false);
Protocol.inspectorBackend.registerCommand("DOM.getBoxModel", [{"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], ["model"], false);
Protocol.inspectorBackend.registerCommand("DOM.getContentQuads", [{"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], ["quads"], false);
Protocol.inspectorBackend.registerCommand("DOM.getDocument", [{"name": "depth", "type": "number", "optional": true}, {"name": "pierce", "type": "boolean", "optional": true}], ["root"], false);
Protocol.inspectorBackend.registerCommand("DOM.getFlattenedDocument", [{"name": "depth", "type": "number", "optional": true}, {"name": "pierce", "type": "boolean", "optional": true}], ["nodes"], false);
Protocol.inspectorBackend.registerCommand("DOM.getNodeForLocation", [{"name": "x", "type": "number", "optional": false}, {"name": "y", "type": "number", "optional": false}, {"name": "includeUserAgentShadowDOM", "type": "boolean", "optional": true}, {"name": "ignorePointerEventsNone", "type": "boolean", "optional": true}], ["backendNodeId", "frameId", "nodeId"], false);
Protocol.inspectorBackend.registerCommand("DOM.getOuterHTML", [{"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], ["outerHTML"], false);
Protocol.inspectorBackend.registerCommand("DOM.getRelayoutBoundary", [{"name": "nodeId", "type": "number", "optional": false}], ["nodeId"], false);
Protocol.inspectorBackend.registerCommand("DOM.getSearchResults", [{"name": "searchId", "type": "string", "optional": false}, {"name": "fromIndex", "type": "number", "optional": false}, {"name": "toIndex", "type": "number", "optional": false}], ["nodeIds"], false);
Protocol.inspectorBackend.registerCommand("DOM.hideHighlight", [], [], false);
Protocol.inspectorBackend.registerCommand("DOM.highlightNode", [], [], false);
Protocol.inspectorBackend.registerCommand("DOM.highlightRect", [], [], false);
Protocol.inspectorBackend.registerCommand("DOM.markUndoableState", [], [], false);
Protocol.inspectorBackend.registerCommand("DOM.moveTo", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "targetNodeId", "type": "number", "optional": false}, {"name": "insertBeforeNodeId", "type": "number", "optional": true}], ["nodeId"], false);
Protocol.inspectorBackend.registerCommand("DOM.performSearch", [{"name": "query", "type": "string", "optional": false}, {"name": "includeUserAgentShadowDOM", "type": "boolean", "optional": true}], ["searchId", "resultCount"], false);
Protocol.inspectorBackend.registerCommand("DOM.pushNodeByPathToFrontend", [{"name": "path", "type": "string", "optional": false}], ["nodeId"], false);
Protocol.inspectorBackend.registerCommand("DOM.pushNodesByBackendIdsToFrontend", [{"name": "backendNodeIds", "type": "object", "optional": false}], ["nodeIds"], false);
Protocol.inspectorBackend.registerCommand("DOM.querySelector", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "selector", "type": "string", "optional": false}], ["nodeId"], false);
Protocol.inspectorBackend.registerCommand("DOM.querySelectorAll", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "selector", "type": "string", "optional": false}], ["nodeIds"], false);
Protocol.inspectorBackend.registerCommand("DOM.redo", [], [], false);
Protocol.inspectorBackend.registerCommand("DOM.removeAttribute", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "name", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.removeNode", [{"name": "nodeId", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.requestChildNodes", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "depth", "type": "number", "optional": true}, {"name": "pierce", "type": "boolean", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.requestNode", [{"name": "objectId", "type": "string", "optional": false}], ["nodeId"], false);
Protocol.inspectorBackend.registerCommand("DOM.resolveNode", [{"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectGroup", "type": "string", "optional": true}, {"name": "executionContextId", "type": "number", "optional": true}], ["object"], false);
Protocol.inspectorBackend.registerCommand("DOM.setAttributeValue", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "name", "type": "string", "optional": false}, {"name": "value", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.setAttributesAsText", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "text", "type": "string", "optional": false}, {"name": "name", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.setFileInputFiles", [{"name": "files", "type": "object", "optional": false}, {"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.setNodeStackTracesEnabled", [{"name": "enable", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.getNodeStackTraces", [{"name": "nodeId", "type": "number", "optional": false}], ["creation"], false);
Protocol.inspectorBackend.registerCommand("DOM.getFileInfo", [{"name": "objectId", "type": "string", "optional": false}], ["path"], false);
Protocol.inspectorBackend.registerCommand("DOM.setInspectedNode", [{"name": "nodeId", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.setNodeName", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "name", "type": "string", "optional": false}], ["nodeId"], false);
Protocol.inspectorBackend.registerCommand("DOM.setNodeValue", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "value", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.setOuterHTML", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "outerHTML", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOM.undo", [], [], false);
Protocol.inspectorBackend.registerCommand("DOM.getFrameOwner", [{"name": "frameId", "type": "string", "optional": false}], ["backendNodeId", "nodeId"], false);

// DOMDebugger.
Protocol.inspectorBackend.registerEnum("DOMDebugger.DOMBreakpointType", {SubtreeModified: "subtree-modified", AttributeModified: "attribute-modified", NodeRemoved: "node-removed"});
Protocol.inspectorBackend.registerCommand("DOMDebugger.getEventListeners", [{"name": "objectId", "type": "string", "optional": false}, {"name": "depth", "type": "number", "optional": true}, {"name": "pierce", "type": "boolean", "optional": true}], ["listeners"], false);
Protocol.inspectorBackend.registerCommand("DOMDebugger.removeDOMBreakpoint", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "type", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOMDebugger.removeEventListenerBreakpoint", [{"name": "eventName", "type": "string", "optional": false}, {"name": "targetName", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("DOMDebugger.removeInstrumentationBreakpoint", [{"name": "eventName", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOMDebugger.removeXHRBreakpoint", [{"name": "url", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOMDebugger.setDOMBreakpoint", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "type", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOMDebugger.setEventListenerBreakpoint", [{"name": "eventName", "type": "string", "optional": false}, {"name": "targetName", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("DOMDebugger.setInstrumentationBreakpoint", [{"name": "eventName", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOMDebugger.setXHRBreakpoint", [{"name": "url", "type": "string", "optional": false}], [], false);

// DOMSnapshot.
Protocol.inspectorBackend.registerCommand("DOMSnapshot.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("DOMSnapshot.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("DOMSnapshot.getSnapshot", [{"name": "computedStyleWhitelist", "type": "object", "optional": false}, {"name": "includeEventListeners", "type": "boolean", "optional": true}, {"name": "includePaintOrder", "type": "boolean", "optional": true}, {"name": "includeUserAgentShadowTree", "type": "boolean", "optional": true}], ["domNodes", "layoutTreeNodes", "computedStyles"], false);
Protocol.inspectorBackend.registerCommand("DOMSnapshot.captureSnapshot", [{"name": "computedStyles", "type": "object", "optional": false}, {"name": "includePaintOrder", "type": "boolean", "optional": true}, {"name": "includeDOMRects", "type": "boolean", "optional": true}], ["documents", "strings"], false);

// DOMStorage.
Protocol.inspectorBackend.registerEvent("DOMStorage.domStorageItemAdded", ["storageId", "key", "newValue"]);
Protocol.inspectorBackend.registerEvent("DOMStorage.domStorageItemRemoved", ["storageId", "key"]);
Protocol.inspectorBackend.registerEvent("DOMStorage.domStorageItemUpdated", ["storageId", "key", "oldValue", "newValue"]);
Protocol.inspectorBackend.registerEvent("DOMStorage.domStorageItemsCleared", ["storageId"]);
Protocol.inspectorBackend.registerCommand("DOMStorage.clear", [{"name": "storageId", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOMStorage.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("DOMStorage.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("DOMStorage.getDOMStorageItems", [{"name": "storageId", "type": "object", "optional": false}], ["entries"], false);
Protocol.inspectorBackend.registerCommand("DOMStorage.removeDOMStorageItem", [{"name": "storageId", "type": "object", "optional": false}, {"name": "key", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("DOMStorage.setDOMStorageItem", [{"name": "storageId", "type": "object", "optional": false}, {"name": "key", "type": "string", "optional": false}, {"name": "value", "type": "string", "optional": false}], [], false);

// Database.
Protocol.inspectorBackend.registerEvent("Database.addDatabase", ["database"]);
Protocol.inspectorBackend.registerCommand("Database.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Database.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Database.executeSQL", [{"name": "databaseId", "type": "string", "optional": false}, {"name": "query", "type": "string", "optional": false}], ["columnNames", "values", "sqlError"], false);
Protocol.inspectorBackend.registerCommand("Database.getDatabaseTableNames", [{"name": "databaseId", "type": "string", "optional": false}], ["tableNames"], false);

// DeviceOrientation.
Protocol.inspectorBackend.registerCommand("DeviceOrientation.clearDeviceOrientationOverride", [], [], false);
Protocol.inspectorBackend.registerCommand("DeviceOrientation.setDeviceOrientationOverride", [{"name": "alpha", "type": "number", "optional": false}, {"name": "beta", "type": "number", "optional": false}, {"name": "gamma", "type": "number", "optional": false}], [], false);

// Emulation.
Protocol.inspectorBackend.registerEnum("Emulation.ScreenOrientationType", {PortraitPrimary: "portraitPrimary", PortraitSecondary: "portraitSecondary", LandscapePrimary: "landscapePrimary", LandscapeSecondary: "landscapeSecondary"});
Protocol.inspectorBackend.registerEnum("Emulation.VirtualTimePolicy", {Advance: "advance", Pause: "pause", PauseIfNetworkFetchesPending: "pauseIfNetworkFetchesPending"});
Protocol.inspectorBackend.registerEvent("Emulation.virtualTimeBudgetExpired", []);
Protocol.inspectorBackend.registerCommand("Emulation.canEmulate", [], ["result"], false);
Protocol.inspectorBackend.registerCommand("Emulation.clearDeviceMetricsOverride", [], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.clearGeolocationOverride", [], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.resetPageScaleFactor", [], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setFocusEmulationEnabled", [{"name": "enabled", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setCPUThrottlingRate", [{"name": "rate", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setDefaultBackgroundColorOverride", [{"name": "color", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setDeviceMetricsOverride", [{"name": "width", "type": "number", "optional": false}, {"name": "height", "type": "number", "optional": false}, {"name": "deviceScaleFactor", "type": "number", "optional": false}, {"name": "mobile", "type": "boolean", "optional": false}, {"name": "scale", "type": "number", "optional": true}, {"name": "screenWidth", "type": "number", "optional": true}, {"name": "screenHeight", "type": "number", "optional": true}, {"name": "positionX", "type": "number", "optional": true}, {"name": "positionY", "type": "number", "optional": true}, {"name": "dontSetVisibleSize", "type": "boolean", "optional": true}, {"name": "screenOrientation", "type": "object", "optional": true}, {"name": "viewport", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setScrollbarsHidden", [{"name": "hidden", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setDocumentCookieDisabled", [{"name": "disabled", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setEmitTouchEventsForMouse", [{"name": "enabled", "type": "boolean", "optional": false}, {"name": "configuration", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setEmulatedMedia", [{"name": "media", "type": "string", "optional": true}, {"name": "features", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setGeolocationOverride", [{"name": "latitude", "type": "number", "optional": true}, {"name": "longitude", "type": "number", "optional": true}, {"name": "accuracy", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setNavigatorOverrides", [{"name": "platform", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setPageScaleFactor", [{"name": "pageScaleFactor", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setScriptExecutionDisabled", [{"name": "value", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setTouchEmulationEnabled", [{"name": "enabled", "type": "boolean", "optional": false}, {"name": "maxTouchPoints", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setVirtualTimePolicy", [{"name": "policy", "type": "string", "optional": false}, {"name": "budget", "type": "number", "optional": true}, {"name": "maxVirtualTimeTaskStarvationCount", "type": "number", "optional": true}, {"name": "waitForNavigation", "type": "boolean", "optional": true}, {"name": "initialVirtualTime", "type": "number", "optional": true}], ["virtualTimeTicksBase"], false);
Protocol.inspectorBackend.registerCommand("Emulation.setTimezoneOverride", [{"name": "timezoneId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setVisibleSize", [{"name": "width", "type": "number", "optional": false}, {"name": "height", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Emulation.setUserAgentOverride", [{"name": "userAgent", "type": "string", "optional": false}, {"name": "acceptLanguage", "type": "string", "optional": true}, {"name": "platform", "type": "string", "optional": true}], [], false);

// HeadlessExperimental.
Protocol.inspectorBackend.registerEnum("HeadlessExperimental.ScreenshotParamsFormat", {Jpeg: "jpeg", Png: "png"});
Protocol.inspectorBackend.registerEvent("HeadlessExperimental.needsBeginFramesChanged", ["needsBeginFrames"]);
Protocol.inspectorBackend.registerCommand("HeadlessExperimental.beginFrame", [{"name": "frameTimeTicks", "type": "number", "optional": true}, {"name": "interval", "type": "number", "optional": true}, {"name": "noDisplayUpdates", "type": "boolean", "optional": true}, {"name": "screenshot", "type": "object", "optional": true}], ["hasDamage", "screenshotData"], false);
Protocol.inspectorBackend.registerCommand("HeadlessExperimental.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("HeadlessExperimental.enable", [], [], false);

// IO.
Protocol.inspectorBackend.registerCommand("IO.close", [{"name": "handle", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("IO.read", [{"name": "handle", "type": "string", "optional": false}, {"name": "offset", "type": "number", "optional": true}, {"name": "size", "type": "number", "optional": true}], ["base64Encoded", "data", "eof"], false);
Protocol.inspectorBackend.registerCommand("IO.resolveBlob", [{"name": "objectId", "type": "string", "optional": false}], ["uuid"], false);

// IndexedDB.
Protocol.inspectorBackend.registerEnum("IndexedDB.KeyType", {Number: "number", String: "string", Date: "date", Array: "array"});
Protocol.inspectorBackend.registerEnum("IndexedDB.KeyPathType", {Null: "null", String: "string", Array: "array"});
Protocol.inspectorBackend.registerCommand("IndexedDB.clearObjectStore", [{"name": "securityOrigin", "type": "string", "optional": false}, {"name": "databaseName", "type": "string", "optional": false}, {"name": "objectStoreName", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("IndexedDB.deleteDatabase", [{"name": "securityOrigin", "type": "string", "optional": false}, {"name": "databaseName", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("IndexedDB.deleteObjectStoreEntries", [{"name": "securityOrigin", "type": "string", "optional": false}, {"name": "databaseName", "type": "string", "optional": false}, {"name": "objectStoreName", "type": "string", "optional": false}, {"name": "keyRange", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("IndexedDB.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("IndexedDB.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("IndexedDB.requestData", [{"name": "securityOrigin", "type": "string", "optional": false}, {"name": "databaseName", "type": "string", "optional": false}, {"name": "objectStoreName", "type": "string", "optional": false}, {"name": "indexName", "type": "string", "optional": false}, {"name": "skipCount", "type": "number", "optional": false}, {"name": "pageSize", "type": "number", "optional": false}, {"name": "keyRange", "type": "object", "optional": true}], ["objectStoreDataEntries", "hasMore"], false);
Protocol.inspectorBackend.registerCommand("IndexedDB.getMetadata", [{"name": "securityOrigin", "type": "string", "optional": false}, {"name": "databaseName", "type": "string", "optional": false}, {"name": "objectStoreName", "type": "string", "optional": false}], ["entriesCount", "keyGeneratorValue"], false);
Protocol.inspectorBackend.registerCommand("IndexedDB.requestDatabase", [{"name": "securityOrigin", "type": "string", "optional": false}, {"name": "databaseName", "type": "string", "optional": false}], ["databaseWithObjectStores"], false);
Protocol.inspectorBackend.registerCommand("IndexedDB.requestDatabaseNames", [{"name": "securityOrigin", "type": "string", "optional": false}], ["databaseNames"], false);

// Input.
Protocol.inspectorBackend.registerEnum("Input.GestureSourceType", {Default: "default", Touch: "touch", Mouse: "mouse"});
Protocol.inspectorBackend.registerCommand("Input.dispatchKeyEvent", [{"name": "type", "type": "string", "optional": false}, {"name": "modifiers", "type": "number", "optional": true}, {"name": "timestamp", "type": "number", "optional": true}, {"name": "text", "type": "string", "optional": true}, {"name": "unmodifiedText", "type": "string", "optional": true}, {"name": "keyIdentifier", "type": "string", "optional": true}, {"name": "code", "type": "string", "optional": true}, {"name": "key", "type": "string", "optional": true}, {"name": "windowsVirtualKeyCode", "type": "number", "optional": true}, {"name": "nativeVirtualKeyCode", "type": "number", "optional": true}, {"name": "autoRepeat", "type": "boolean", "optional": true}, {"name": "isKeypad", "type": "boolean", "optional": true}, {"name": "isSystemKey", "type": "boolean", "optional": true}, {"name": "location", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Input.insertText", [{"name": "text", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Input.dispatchMouseEvent", [{"name": "type", "type": "string", "optional": false}, {"name": "x", "type": "number", "optional": false}, {"name": "y", "type": "number", "optional": false}, {"name": "modifiers", "type": "number", "optional": true}, {"name": "timestamp", "type": "number", "optional": true}, {"name": "button", "type": "string", "optional": true}, {"name": "buttons", "type": "number", "optional": true}, {"name": "clickCount", "type": "number", "optional": true}, {"name": "deltaX", "type": "number", "optional": true}, {"name": "deltaY", "type": "number", "optional": true}, {"name": "pointerType", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Input.dispatchTouchEvent", [{"name": "type", "type": "string", "optional": false}, {"name": "touchPoints", "type": "object", "optional": false}, {"name": "modifiers", "type": "number", "optional": true}, {"name": "timestamp", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Input.emulateTouchFromMouseEvent", [{"name": "type", "type": "string", "optional": false}, {"name": "x", "type": "number", "optional": false}, {"name": "y", "type": "number", "optional": false}, {"name": "button", "type": "string", "optional": false}, {"name": "timestamp", "type": "number", "optional": true}, {"name": "deltaX", "type": "number", "optional": true}, {"name": "deltaY", "type": "number", "optional": true}, {"name": "modifiers", "type": "number", "optional": true}, {"name": "clickCount", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Input.setIgnoreInputEvents", [{"name": "ignore", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Input.synthesizePinchGesture", [{"name": "x", "type": "number", "optional": false}, {"name": "y", "type": "number", "optional": false}, {"name": "scaleFactor", "type": "number", "optional": false}, {"name": "relativeSpeed", "type": "number", "optional": true}, {"name": "gestureSourceType", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Input.synthesizeScrollGesture", [{"name": "x", "type": "number", "optional": false}, {"name": "y", "type": "number", "optional": false}, {"name": "xDistance", "type": "number", "optional": true}, {"name": "yDistance", "type": "number", "optional": true}, {"name": "xOverscroll", "type": "number", "optional": true}, {"name": "yOverscroll", "type": "number", "optional": true}, {"name": "preventFling", "type": "boolean", "optional": true}, {"name": "speed", "type": "number", "optional": true}, {"name": "gestureSourceType", "type": "string", "optional": true}, {"name": "repeatCount", "type": "number", "optional": true}, {"name": "repeatDelayMs", "type": "number", "optional": true}, {"name": "interactionMarkerName", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Input.synthesizeTapGesture", [{"name": "x", "type": "number", "optional": false}, {"name": "y", "type": "number", "optional": false}, {"name": "duration", "type": "number", "optional": true}, {"name": "tapCount", "type": "number", "optional": true}, {"name": "gestureSourceType", "type": "string", "optional": true}], [], false);

// Inspector.
Protocol.inspectorBackend.registerEvent("Inspector.detached", ["reason"]);
Protocol.inspectorBackend.registerEvent("Inspector.targetCrashed", []);
Protocol.inspectorBackend.registerEvent("Inspector.targetReloadedAfterCrash", []);
Protocol.inspectorBackend.registerCommand("Inspector.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Inspector.enable", [], [], false);

// LayerTree.
Protocol.inspectorBackend.registerEnum("LayerTree.ScrollRectType", {RepaintsOnScroll: "RepaintsOnScroll", TouchEventHandler: "TouchEventHandler", WheelEventHandler: "WheelEventHandler"});
Protocol.inspectorBackend.registerEvent("LayerTree.layerPainted", ["layerId", "clip"]);
Protocol.inspectorBackend.registerEvent("LayerTree.layerTreeDidChange", ["layers"]);
Protocol.inspectorBackend.registerCommand("LayerTree.compositingReasons", [{"name": "layerId", "type": "string", "optional": false}], ["compositingReasons"], false);
Protocol.inspectorBackend.registerCommand("LayerTree.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("LayerTree.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("LayerTree.loadSnapshot", [{"name": "tiles", "type": "object", "optional": false}], ["snapshotId"], false);
Protocol.inspectorBackend.registerCommand("LayerTree.makeSnapshot", [{"name": "layerId", "type": "string", "optional": false}], ["snapshotId"], false);
Protocol.inspectorBackend.registerCommand("LayerTree.profileSnapshot", [{"name": "snapshotId", "type": "string", "optional": false}, {"name": "minRepeatCount", "type": "number", "optional": true}, {"name": "minDuration", "type": "number", "optional": true}, {"name": "clipRect", "type": "object", "optional": true}], ["timings"], false);
Protocol.inspectorBackend.registerCommand("LayerTree.releaseSnapshot", [{"name": "snapshotId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("LayerTree.replaySnapshot", [{"name": "snapshotId", "type": "string", "optional": false}, {"name": "fromStep", "type": "number", "optional": true}, {"name": "toStep", "type": "number", "optional": true}, {"name": "scale", "type": "number", "optional": true}], ["dataURL"], false);
Protocol.inspectorBackend.registerCommand("LayerTree.snapshotCommandLog", [{"name": "snapshotId", "type": "string", "optional": false}], ["commandLog"], false);

// Log.
Protocol.inspectorBackend.registerEnum("Log.LogEntrySource", {XML: "xml", Javascript: "javascript", Network: "network", Storage: "storage", Appcache: "appcache", Rendering: "rendering", Security: "security", Deprecation: "deprecation", Worker: "worker", Violation: "violation", Intervention: "intervention", Recommendation: "recommendation", Other: "other"});
Protocol.inspectorBackend.registerEnum("Log.LogEntryLevel", {Verbose: "verbose", Info: "info", Warning: "warning", Error: "error"});
Protocol.inspectorBackend.registerEnum("Log.ViolationSettingName", {LongTask: "longTask", LongLayout: "longLayout", BlockedEvent: "blockedEvent", BlockedParser: "blockedParser", DiscouragedAPIUse: "discouragedAPIUse", Handler: "handler", RecurringHandler: "recurringHandler"});
Protocol.inspectorBackend.registerEvent("Log.entryAdded", ["entry"]);
Protocol.inspectorBackend.registerCommand("Log.clear", [], [], false);
Protocol.inspectorBackend.registerCommand("Log.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Log.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Log.startViolationsReport", [{"name": "config", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Log.stopViolationsReport", [], [], false);

// Memory.
Protocol.inspectorBackend.registerEnum("Memory.PressureLevel", {Moderate: "moderate", Critical: "critical"});
Protocol.inspectorBackend.registerCommand("Memory.getDOMCounters", [], ["documents", "nodes", "jsEventListeners"], false);
Protocol.inspectorBackend.registerCommand("Memory.prepareForLeakDetection", [], [], false);
Protocol.inspectorBackend.registerCommand("Memory.forciblyPurgeJavaScriptMemory", [], [], false);
Protocol.inspectorBackend.registerCommand("Memory.setPressureNotificationsSuppressed", [{"name": "suppressed", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Memory.simulatePressureNotification", [{"name": "level", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Memory.startSampling", [{"name": "samplingInterval", "type": "number", "optional": true}, {"name": "suppressRandomness", "type": "boolean", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Memory.stopSampling", [], [], false);
Protocol.inspectorBackend.registerCommand("Memory.getAllTimeSamplingProfile", [], ["profile"], false);
Protocol.inspectorBackend.registerCommand("Memory.getBrowserSamplingProfile", [], ["profile"], false);
Protocol.inspectorBackend.registerCommand("Memory.getSamplingProfile", [], ["profile"], false);

// Network.
Protocol.inspectorBackend.registerEnum("Network.ResourceType", {Document: "Document", Stylesheet: "Stylesheet", Image: "Image", Media: "Media", Font: "Font", Script: "Script", TextTrack: "TextTrack", XHR: "XHR", Fetch: "Fetch", EventSource: "EventSource", WebSocket: "WebSocket", Manifest: "Manifest", SignedExchange: "SignedExchange", Ping: "Ping", CSPViolationReport: "CSPViolationReport", Other: "Other"});
Protocol.inspectorBackend.registerEnum("Network.ErrorReason", {Failed: "Failed", Aborted: "Aborted", TimedOut: "TimedOut", AccessDenied: "AccessDenied", ConnectionClosed: "ConnectionClosed", ConnectionReset: "ConnectionReset", ConnectionRefused: "ConnectionRefused", ConnectionAborted: "ConnectionAborted", ConnectionFailed: "ConnectionFailed", NameNotResolved: "NameNotResolved", InternetDisconnected: "InternetDisconnected", AddressUnreachable: "AddressUnreachable", BlockedByClient: "BlockedByClient", BlockedByResponse: "BlockedByResponse"});
Protocol.inspectorBackend.registerEnum("Network.ConnectionType", {None: "none", Cellular2g: "cellular2g", Cellular3g: "cellular3g", Cellular4g: "cellular4g", Bluetooth: "bluetooth", Ethernet: "ethernet", Wifi: "wifi", Wimax: "wimax", Other: "other"});
Protocol.inspectorBackend.registerEnum("Network.CookieSameSite", {Strict: "Strict", Lax: "Lax", None: "None"});
Protocol.inspectorBackend.registerEnum("Network.ResourcePriority", {VeryLow: "VeryLow", Low: "Low", Medium: "Medium", High: "High", VeryHigh: "VeryHigh"});
Protocol.inspectorBackend.registerEnum("Network.RequestReferrerPolicy", {UnsafeUrl: "unsafe-url", NoReferrerWhenDowngrade: "no-referrer-when-downgrade", NoReferrer: "no-referrer", Origin: "origin", OriginWhenCrossOrigin: "origin-when-cross-origin", SameOrigin: "same-origin", StrictOrigin: "strict-origin", StrictOriginWhenCrossOrigin: "strict-origin-when-cross-origin"});
Protocol.inspectorBackend.registerEnum("Network.CertificateTransparencyCompliance", {Unknown: "unknown", NotCompliant: "not-compliant", Compliant: "compliant"});
Protocol.inspectorBackend.registerEnum("Network.BlockedReason", {Other: "other", Csp: "csp", MixedContent: "mixed-content", Origin: "origin", Inspector: "inspector", SubresourceFilter: "subresource-filter", ContentType: "content-type", CollapsedByClient: "collapsed-by-client"});
Protocol.inspectorBackend.registerEnum("Network.InitiatorType", {Parser: "parser", Script: "script", Preload: "preload", SignedExchange: "SignedExchange", Other: "other"});
Protocol.inspectorBackend.registerEnum("Network.SetCookieBlockedReason", {SecureOnly: "SecureOnly", SameSiteStrict: "SameSiteStrict", SameSiteLax: "SameSiteLax", SameSiteUnspecifiedTreatedAsLax: "SameSiteUnspecifiedTreatedAsLax", SameSiteNoneInsecure: "SameSiteNoneInsecure", UserPreferences: "UserPreferences", SyntaxError: "SyntaxError", SchemeNotSupported: "SchemeNotSupported", OverwriteSecure: "OverwriteSecure", InvalidDomain: "InvalidDomain", InvalidPrefix: "InvalidPrefix", UnknownError: "UnknownError"});
Protocol.inspectorBackend.registerEnum("Network.CookieBlockedReason", {SecureOnly: "SecureOnly", NotOnPath: "NotOnPath", DomainMismatch: "DomainMismatch", SameSiteStrict: "SameSiteStrict", SameSiteLax: "SameSiteLax", SameSiteUnspecifiedTreatedAsLax: "SameSiteUnspecifiedTreatedAsLax", SameSiteNoneInsecure: "SameSiteNoneInsecure", UserPreferences: "UserPreferences", UnknownError: "UnknownError"});
Protocol.inspectorBackend.registerEnum("Network.AuthChallengeSource", {Server: "Server", Proxy: "Proxy"});
Protocol.inspectorBackend.registerEnum("Network.AuthChallengeResponseResponse", {Default: "Default", CancelAuth: "CancelAuth", ProvideCredentials: "ProvideCredentials"});
Protocol.inspectorBackend.registerEnum("Network.InterceptionStage", {Request: "Request", HeadersReceived: "HeadersReceived"});
Protocol.inspectorBackend.registerEnum("Network.SignedExchangeErrorField", {SignatureSig: "signatureSig", SignatureIntegrity: "signatureIntegrity", SignatureCertUrl: "signatureCertUrl", SignatureCertSha256: "signatureCertSha256", SignatureValidityUrl: "signatureValidityUrl", SignatureTimestamps: "signatureTimestamps"});
Protocol.inspectorBackend.registerEvent("Network.dataReceived", ["requestId", "timestamp", "dataLength", "encodedDataLength"]);
Protocol.inspectorBackend.registerEvent("Network.eventSourceMessageReceived", ["requestId", "timestamp", "eventName", "eventId", "data"]);
Protocol.inspectorBackend.registerEvent("Network.loadingFailed", ["requestId", "timestamp", "type", "errorText", "canceled", "blockedReason"]);
Protocol.inspectorBackend.registerEvent("Network.loadingFinished", ["requestId", "timestamp", "encodedDataLength", "shouldReportCorbBlocking"]);
Protocol.inspectorBackend.registerEvent("Network.requestIntercepted", ["interceptionId", "request", "frameId", "resourceType", "isNavigationRequest", "isDownload", "redirectUrl", "authChallenge", "responseErrorReason", "responseStatusCode", "responseHeaders", "requestId"]);
Protocol.inspectorBackend.registerEvent("Network.requestServedFromCache", ["requestId"]);
Protocol.inspectorBackend.registerEvent("Network.requestWillBeSent", ["requestId", "loaderId", "documentURL", "request", "timestamp", "wallTime", "initiator", "redirectResponse", "type", "frameId", "hasUserGesture"]);
Protocol.inspectorBackend.registerEvent("Network.resourceChangedPriority", ["requestId", "newPriority", "timestamp"]);
Protocol.inspectorBackend.registerEvent("Network.signedExchangeReceived", ["requestId", "info"]);
Protocol.inspectorBackend.registerEvent("Network.responseReceived", ["requestId", "loaderId", "timestamp", "type", "response", "frameId"]);
Protocol.inspectorBackend.registerEvent("Network.webSocketClosed", ["requestId", "timestamp"]);
Protocol.inspectorBackend.registerEvent("Network.webSocketCreated", ["requestId", "url", "initiator"]);
Protocol.inspectorBackend.registerEvent("Network.webSocketFrameError", ["requestId", "timestamp", "errorMessage"]);
Protocol.inspectorBackend.registerEvent("Network.webSocketFrameReceived", ["requestId", "timestamp", "response"]);
Protocol.inspectorBackend.registerEvent("Network.webSocketFrameSent", ["requestId", "timestamp", "response"]);
Protocol.inspectorBackend.registerEvent("Network.webSocketHandshakeResponseReceived", ["requestId", "timestamp", "response"]);
Protocol.inspectorBackend.registerEvent("Network.webSocketWillSendHandshakeRequest", ["requestId", "timestamp", "wallTime", "request"]);
Protocol.inspectorBackend.registerEvent("Network.requestWillBeSentExtraInfo", ["requestId", "blockedCookies", "headers"]);
Protocol.inspectorBackend.registerEvent("Network.responseReceivedExtraInfo", ["requestId", "blockedCookies", "headers", "headersText"]);
Protocol.inspectorBackend.registerCommand("Network.canClearBrowserCache", [], ["result"], false);
Protocol.inspectorBackend.registerCommand("Network.canClearBrowserCookies", [], ["result"], false);
Protocol.inspectorBackend.registerCommand("Network.canEmulateNetworkConditions", [], ["result"], false);
Protocol.inspectorBackend.registerCommand("Network.clearBrowserCache", [], [], false);
Protocol.inspectorBackend.registerCommand("Network.clearBrowserCookies", [], [], false);
Protocol.inspectorBackend.registerCommand("Network.continueInterceptedRequest", [{"name": "interceptionId", "type": "string", "optional": false}, {"name": "errorReason", "type": "string", "optional": true}, {"name": "rawResponse", "type": "string", "optional": true}, {"name": "url", "type": "string", "optional": true}, {"name": "method", "type": "string", "optional": true}, {"name": "postData", "type": "string", "optional": true}, {"name": "headers", "type": "object", "optional": true}, {"name": "authChallengeResponse", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Network.deleteCookies", [{"name": "name", "type": "string", "optional": false}, {"name": "url", "type": "string", "optional": true}, {"name": "domain", "type": "string", "optional": true}, {"name": "path", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Network.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Network.emulateNetworkConditions", [{"name": "offline", "type": "boolean", "optional": false}, {"name": "latency", "type": "number", "optional": false}, {"name": "downloadThroughput", "type": "number", "optional": false}, {"name": "uploadThroughput", "type": "number", "optional": false}, {"name": "connectionType", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Network.enable", [{"name": "maxTotalBufferSize", "type": "number", "optional": true}, {"name": "maxResourceBufferSize", "type": "number", "optional": true}, {"name": "maxPostDataSize", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Network.getAllCookies", [], ["cookies"], false);
Protocol.inspectorBackend.registerCommand("Network.getCertificate", [{"name": "origin", "type": "string", "optional": false}], ["tableNames"], false);
Protocol.inspectorBackend.registerCommand("Network.getCookies", [{"name": "urls", "type": "object", "optional": true}], ["cookies"], false);
Protocol.inspectorBackend.registerCommand("Network.getResponseBody", [{"name": "requestId", "type": "string", "optional": false}], ["body", "base64Encoded"], false);
Protocol.inspectorBackend.registerCommand("Network.getRequestPostData", [{"name": "requestId", "type": "string", "optional": false}], ["postData"], false);
Protocol.inspectorBackend.registerCommand("Network.getResponseBodyForInterception", [{"name": "interceptionId", "type": "string", "optional": false}], ["body", "base64Encoded"], false);
Protocol.inspectorBackend.registerCommand("Network.takeResponseBodyForInterceptionAsStream", [{"name": "interceptionId", "type": "string", "optional": false}], ["stream"], false);
Protocol.inspectorBackend.registerCommand("Network.replayXHR", [{"name": "requestId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Network.searchInResponseBody", [{"name": "requestId", "type": "string", "optional": false}, {"name": "query", "type": "string", "optional": false}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"], false);
Protocol.inspectorBackend.registerCommand("Network.setBlockedURLs", [{"name": "urls", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Network.setBypassServiceWorker", [{"name": "bypass", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Network.setCacheDisabled", [{"name": "cacheDisabled", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Network.setCookie", [{"name": "name", "type": "string", "optional": false}, {"name": "value", "type": "string", "optional": false}, {"name": "url", "type": "string", "optional": true}, {"name": "domain", "type": "string", "optional": true}, {"name": "path", "type": "string", "optional": true}, {"name": "secure", "type": "boolean", "optional": true}, {"name": "httpOnly", "type": "boolean", "optional": true}, {"name": "sameSite", "type": "string", "optional": true}, {"name": "expires", "type": "number", "optional": true}], ["success"], false);
Protocol.inspectorBackend.registerCommand("Network.setCookies", [{"name": "cookies", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Network.setDataSizeLimitsForTest", [{"name": "maxTotalSize", "type": "number", "optional": false}, {"name": "maxResourceSize", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Network.setExtraHTTPHeaders", [{"name": "headers", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Network.setRequestInterception", [{"name": "patterns", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Network.setUserAgentOverride", [{"name": "userAgent", "type": "string", "optional": false}, {"name": "acceptLanguage", "type": "string", "optional": true}, {"name": "platform", "type": "string", "optional": true}], [], false);

// Overlay.
Protocol.inspectorBackend.registerEnum("Overlay.InspectMode", {SearchForNode: "searchForNode", SearchForUAShadowDOM: "searchForUAShadowDOM", CaptureAreaScreenshot: "captureAreaScreenshot", ShowDistances: "showDistances", None: "none"});
Protocol.inspectorBackend.registerEvent("Overlay.inspectNodeRequested", ["backendNodeId"]);
Protocol.inspectorBackend.registerEvent("Overlay.nodeHighlightRequested", ["nodeId"]);
Protocol.inspectorBackend.registerEvent("Overlay.screenshotRequested", ["viewport"]);
Protocol.inspectorBackend.registerEvent("Overlay.inspectModeCanceled", []);
Protocol.inspectorBackend.registerCommand("Overlay.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.getHighlightObjectForTest", [{"name": "nodeId", "type": "number", "optional": false}, {"name": "includeDistance", "type": "boolean", "optional": true}, {"name": "includeStyle", "type": "boolean", "optional": true}], ["highlight"], false);
Protocol.inspectorBackend.registerCommand("Overlay.hideHighlight", [], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.highlightFrame", [{"name": "frameId", "type": "string", "optional": false}, {"name": "contentColor", "type": "object", "optional": true}, {"name": "contentOutlineColor", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.highlightNode", [{"name": "highlightConfig", "type": "object", "optional": false}, {"name": "nodeId", "type": "number", "optional": true}, {"name": "backendNodeId", "type": "number", "optional": true}, {"name": "objectId", "type": "string", "optional": true}, {"name": "selector", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.highlightQuad", [{"name": "quad", "type": "object", "optional": false}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.highlightRect", [{"name": "x", "type": "number", "optional": false}, {"name": "y", "type": "number", "optional": false}, {"name": "width", "type": "number", "optional": false}, {"name": "height", "type": "number", "optional": false}, {"name": "color", "type": "object", "optional": true}, {"name": "outlineColor", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setInspectMode", [{"name": "mode", "type": "string", "optional": false}, {"name": "highlightConfig", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setShowAdHighlights", [{"name": "show", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setPausedInDebuggerMessage", [{"name": "message", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setShowDebugBorders", [{"name": "show", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setShowFPSCounter", [{"name": "show", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setShowPaintRects", [{"name": "result", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setShowLayoutShiftRegions", [{"name": "result", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setShowScrollBottleneckRects", [{"name": "show", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setShowHitTestBorders", [{"name": "show", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Overlay.setShowViewportSizeOnResize", [{"name": "show", "type": "boolean", "optional": false}], [], false);

// Page.
Protocol.inspectorBackend.registerEnum("Page.TransitionType", {Link: "link", Typed: "typed", Address_bar: "address_bar", Auto_bookmark: "auto_bookmark", Auto_subframe: "auto_subframe", Manual_subframe: "manual_subframe", Generated: "generated", Auto_toplevel: "auto_toplevel", Form_submit: "form_submit", Reload: "reload", Keyword: "keyword", Keyword_generated: "keyword_generated", Other: "other"});
Protocol.inspectorBackend.registerEnum("Page.DialogType", {Alert: "alert", Confirm: "confirm", Prompt: "prompt", Beforeunload: "beforeunload"});
Protocol.inspectorBackend.registerEnum("Page.ClientNavigationReason", {FormSubmissionGet: "formSubmissionGet", FormSubmissionPost: "formSubmissionPost", HttpHeaderRefresh: "httpHeaderRefresh", ScriptInitiated: "scriptInitiated", MetaTagRefresh: "metaTagRefresh", PageBlockInterstitial: "pageBlockInterstitial", Reload: "reload"});
Protocol.inspectorBackend.registerEvent("Page.domContentEventFired", ["timestamp"]);
Protocol.inspectorBackend.registerEvent("Page.fileChooserOpened", ["frameId", "backendNodeId", "mode"]);
Protocol.inspectorBackend.registerEvent("Page.frameAttached", ["frameId", "parentFrameId", "stack"]);
Protocol.inspectorBackend.registerEvent("Page.frameClearedScheduledNavigation", ["frameId"]);
Protocol.inspectorBackend.registerEvent("Page.frameDetached", ["frameId"]);
Protocol.inspectorBackend.registerEvent("Page.frameNavigated", ["frame"]);
Protocol.inspectorBackend.registerEvent("Page.frameResized", []);
Protocol.inspectorBackend.registerEvent("Page.frameRequestedNavigation", ["frameId", "reason", "url"]);
Protocol.inspectorBackend.registerEvent("Page.frameScheduledNavigation", ["frameId", "delay", "reason", "url"]);
Protocol.inspectorBackend.registerEvent("Page.frameStartedLoading", ["frameId"]);
Protocol.inspectorBackend.registerEvent("Page.frameStoppedLoading", ["frameId"]);
Protocol.inspectorBackend.registerEvent("Page.downloadWillBegin", ["frameId", "url"]);
Protocol.inspectorBackend.registerEvent("Page.interstitialHidden", []);
Protocol.inspectorBackend.registerEvent("Page.interstitialShown", []);
Protocol.inspectorBackend.registerEvent("Page.javascriptDialogClosed", ["result", "userInput"]);
Protocol.inspectorBackend.registerEvent("Page.javascriptDialogOpening", ["url", "message", "type", "hasBrowserHandler", "defaultPrompt"]);
Protocol.inspectorBackend.registerEvent("Page.lifecycleEvent", ["frameId", "loaderId", "name", "timestamp"]);
Protocol.inspectorBackend.registerEvent("Page.loadEventFired", ["timestamp"]);
Protocol.inspectorBackend.registerEvent("Page.navigatedWithinDocument", ["frameId", "url"]);
Protocol.inspectorBackend.registerEvent("Page.screencastFrame", ["data", "metadata", "sessionId"]);
Protocol.inspectorBackend.registerEvent("Page.screencastVisibilityChanged", ["visible"]);
Protocol.inspectorBackend.registerEvent("Page.windowOpen", ["url", "windowName", "windowFeatures", "userGesture"]);
Protocol.inspectorBackend.registerEvent("Page.compilationCacheProduced", ["url", "data"]);
Protocol.inspectorBackend.registerCommand("Page.addScriptToEvaluateOnLoad", [{"name": "scriptSource", "type": "string", "optional": false}], ["identifier"], false);
Protocol.inspectorBackend.registerCommand("Page.addScriptToEvaluateOnNewDocument", [{"name": "source", "type": "string", "optional": false}, {"name": "worldName", "type": "string", "optional": true}], ["identifier"], false);
Protocol.inspectorBackend.registerCommand("Page.bringToFront", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.captureScreenshot", [{"name": "format", "type": "string", "optional": true}, {"name": "quality", "type": "number", "optional": true}, {"name": "clip", "type": "object", "optional": true}, {"name": "fromSurface", "type": "boolean", "optional": true}], ["data"], false);
Protocol.inspectorBackend.registerCommand("Page.captureSnapshot", [{"name": "format", "type": "string", "optional": true}], ["data"], false);
Protocol.inspectorBackend.registerCommand("Page.clearDeviceMetricsOverride", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.clearDeviceOrientationOverride", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.clearGeolocationOverride", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.createIsolatedWorld", [{"name": "frameId", "type": "string", "optional": false}, {"name": "worldName", "type": "string", "optional": true}, {"name": "grantUniveralAccess", "type": "boolean", "optional": true}], ["executionContextId"], false);
Protocol.inspectorBackend.registerCommand("Page.deleteCookie", [{"name": "cookieName", "type": "string", "optional": false}, {"name": "url", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.getAppManifest", [], ["url", "errors", "data"], false);
Protocol.inspectorBackend.registerCommand("Page.getInstallabilityErrors", [], ["errors"], false);
Protocol.inspectorBackend.registerCommand("Page.getCookies", [], ["cookies"], false);
Protocol.inspectorBackend.registerCommand("Page.getFrameTree", [], ["frameTree"], false);
Protocol.inspectorBackend.registerCommand("Page.getLayoutMetrics", [], ["layoutViewport", "visualViewport", "contentSize"], false);
Protocol.inspectorBackend.registerCommand("Page.getNavigationHistory", [], ["currentIndex", "entries"], false);
Protocol.inspectorBackend.registerCommand("Page.resetNavigationHistory", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.getResourceContent", [{"name": "frameId", "type": "string", "optional": false}, {"name": "url", "type": "string", "optional": false}], ["content", "base64Encoded"], false);
Protocol.inspectorBackend.registerCommand("Page.getResourceTree", [], ["frameTree"], false);
Protocol.inspectorBackend.registerCommand("Page.handleJavaScriptDialog", [{"name": "accept", "type": "boolean", "optional": false}, {"name": "promptText", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Page.navigate", [{"name": "url", "type": "string", "optional": false}, {"name": "referrer", "type": "string", "optional": true}, {"name": "transitionType", "type": "string", "optional": true}, {"name": "frameId", "type": "string", "optional": true}], ["frameId", "loaderId", "errorText"], false);
Protocol.inspectorBackend.registerCommand("Page.navigateToHistoryEntry", [{"name": "entryId", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.printToPDF", [{"name": "landscape", "type": "boolean", "optional": true}, {"name": "displayHeaderFooter", "type": "boolean", "optional": true}, {"name": "printBackground", "type": "boolean", "optional": true}, {"name": "scale", "type": "number", "optional": true}, {"name": "paperWidth", "type": "number", "optional": true}, {"name": "paperHeight", "type": "number", "optional": true}, {"name": "marginTop", "type": "number", "optional": true}, {"name": "marginBottom", "type": "number", "optional": true}, {"name": "marginLeft", "type": "number", "optional": true}, {"name": "marginRight", "type": "number", "optional": true}, {"name": "pageRanges", "type": "string", "optional": true}, {"name": "ignoreInvalidPageRanges", "type": "boolean", "optional": true}, {"name": "headerTemplate", "type": "string", "optional": true}, {"name": "footerTemplate", "type": "string", "optional": true}, {"name": "preferCSSPageSize", "type": "boolean", "optional": true}, {"name": "transferMode", "type": "string", "optional": true}], ["data", "stream"], false);
Protocol.inspectorBackend.registerCommand("Page.reload", [{"name": "ignoreCache", "type": "boolean", "optional": true}, {"name": "scriptToEvaluateOnLoad", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Page.removeScriptToEvaluateOnLoad", [{"name": "identifier", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.removeScriptToEvaluateOnNewDocument", [{"name": "identifier", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.screencastFrameAck", [{"name": "sessionId", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.searchInResource", [{"name": "frameId", "type": "string", "optional": false}, {"name": "url", "type": "string", "optional": false}, {"name": "query", "type": "string", "optional": false}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"], false);
Protocol.inspectorBackend.registerCommand("Page.setAdBlockingEnabled", [{"name": "enabled", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setBypassCSP", [{"name": "enabled", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setDeviceMetricsOverride", [{"name": "width", "type": "number", "optional": false}, {"name": "height", "type": "number", "optional": false}, {"name": "deviceScaleFactor", "type": "number", "optional": false}, {"name": "mobile", "type": "boolean", "optional": false}, {"name": "scale", "type": "number", "optional": true}, {"name": "screenWidth", "type": "number", "optional": true}, {"name": "screenHeight", "type": "number", "optional": true}, {"name": "positionX", "type": "number", "optional": true}, {"name": "positionY", "type": "number", "optional": true}, {"name": "dontSetVisibleSize", "type": "boolean", "optional": true}, {"name": "screenOrientation", "type": "object", "optional": true}, {"name": "viewport", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setDeviceOrientationOverride", [{"name": "alpha", "type": "number", "optional": false}, {"name": "beta", "type": "number", "optional": false}, {"name": "gamma", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setFontFamilies", [{"name": "fontFamilies", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setFontSizes", [{"name": "fontSizes", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setDocumentContent", [{"name": "frameId", "type": "string", "optional": false}, {"name": "html", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setDownloadBehavior", [{"name": "behavior", "type": "string", "optional": false}, {"name": "downloadPath", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setGeolocationOverride", [{"name": "latitude", "type": "number", "optional": true}, {"name": "longitude", "type": "number", "optional": true}, {"name": "accuracy", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setLifecycleEventsEnabled", [{"name": "enabled", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.setTouchEmulationEnabled", [{"name": "enabled", "type": "boolean", "optional": false}, {"name": "configuration", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Page.startScreencast", [{"name": "format", "type": "string", "optional": true}, {"name": "quality", "type": "number", "optional": true}, {"name": "maxWidth", "type": "number", "optional": true}, {"name": "maxHeight", "type": "number", "optional": true}, {"name": "everyNthFrame", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Page.stopLoading", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.crash", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.close", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.setWebLifecycleState", [{"name": "state", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.stopScreencast", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.setProduceCompilationCache", [{"name": "enabled", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.addCompilationCache", [{"name": "url", "type": "string", "optional": false}, {"name": "data", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Page.clearCompilationCache", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.generateTestReport", [{"name": "message", "type": "string", "optional": false}, {"name": "group", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Page.waitForDebugger", [], [], false);
Protocol.inspectorBackend.registerCommand("Page.setInterceptFileChooserDialog", [{"name": "enabled", "type": "boolean", "optional": false}], [], false);

// Performance.
Protocol.inspectorBackend.registerEvent("Performance.metrics", ["metrics", "title"]);
Protocol.inspectorBackend.registerCommand("Performance.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Performance.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Performance.setTimeDomain", [{"name": "timeDomain", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Performance.getMetrics", [], ["metrics"], false);

// Security.
Protocol.inspectorBackend.registerEnum("Security.MixedContentType", {Blockable: "blockable", OptionallyBlockable: "optionally-blockable", None: "none"});
Protocol.inspectorBackend.registerEnum("Security.SecurityState", {Unknown: "unknown", Neutral: "neutral", Insecure: "insecure", Secure: "secure", Info: "info", InsecureBroken: "insecure-broken"});
Protocol.inspectorBackend.registerEnum("Security.SafetyTipStatus", {BadReputation: "badReputation", Lookalike: "lookalike"});
Protocol.inspectorBackend.registerEnum("Security.CertificateErrorAction", {Continue: "continue", Cancel: "cancel"});
Protocol.inspectorBackend.registerEvent("Security.certificateError", ["eventId", "errorType", "requestURL"]);
Protocol.inspectorBackend.registerEvent("Security.visibleSecurityStateChanged", ["visibleSecurityState"]);
Protocol.inspectorBackend.registerEvent("Security.securityStateChanged", ["securityState", "schemeIsCryptographic", "explanations", "insecureContentStatus", "summary"]);
Protocol.inspectorBackend.registerCommand("Security.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Security.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Security.setIgnoreCertificateErrors", [{"name": "ignore", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Security.handleCertificateError", [{"name": "eventId", "type": "number", "optional": false}, {"name": "action", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Security.setOverrideCertificateErrors", [{"name": "override", "type": "boolean", "optional": false}], [], false);

// ServiceWorker.
Protocol.inspectorBackend.registerEnum("ServiceWorker.ServiceWorkerVersionRunningStatus", {Stopped: "stopped", Starting: "starting", Running: "running", Stopping: "stopping"});
Protocol.inspectorBackend.registerEnum("ServiceWorker.ServiceWorkerVersionStatus", {New: "new", Installing: "installing", Installed: "installed", Activating: "activating", Activated: "activated", Redundant: "redundant"});
Protocol.inspectorBackend.registerEvent("ServiceWorker.workerErrorReported", ["errorMessage"]);
Protocol.inspectorBackend.registerEvent("ServiceWorker.workerRegistrationUpdated", ["registrations"]);
Protocol.inspectorBackend.registerEvent("ServiceWorker.workerVersionUpdated", ["versions"]);
Protocol.inspectorBackend.registerCommand("ServiceWorker.deliverPushMessage", [{"name": "origin", "type": "string", "optional": false}, {"name": "registrationId", "type": "string", "optional": false}, {"name": "data", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.dispatchSyncEvent", [{"name": "origin", "type": "string", "optional": false}, {"name": "registrationId", "type": "string", "optional": false}, {"name": "tag", "type": "string", "optional": false}, {"name": "lastChance", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.dispatchPeriodicSyncEvent", [{"name": "origin", "type": "string", "optional": false}, {"name": "registrationId", "type": "string", "optional": false}, {"name": "tag", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.inspectWorker", [{"name": "versionId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.setForceUpdateOnPageLoad", [{"name": "forceUpdateOnPageLoad", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.skipWaiting", [{"name": "scopeURL", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.startWorker", [{"name": "scopeURL", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.stopAllWorkers", [], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.stopWorker", [{"name": "versionId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.unregister", [{"name": "scopeURL", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("ServiceWorker.updateRegistration", [{"name": "scopeURL", "type": "string", "optional": false}], [], false);

// Storage.
Protocol.inspectorBackend.registerEnum("Storage.StorageType", {Appcache: "appcache", Cookies: "cookies", File_systems: "file_systems", Indexeddb: "indexeddb", Local_storage: "local_storage", Shader_cache: "shader_cache", Websql: "websql", Service_workers: "service_workers", Cache_storage: "cache_storage", All: "all", Other: "other"});
Protocol.inspectorBackend.registerEvent("Storage.cacheStorageContentUpdated", ["origin", "cacheName"]);
Protocol.inspectorBackend.registerEvent("Storage.cacheStorageListUpdated", ["origin"]);
Protocol.inspectorBackend.registerEvent("Storage.indexedDBContentUpdated", ["origin", "databaseName", "objectStoreName"]);
Protocol.inspectorBackend.registerEvent("Storage.indexedDBListUpdated", ["origin"]);
Protocol.inspectorBackend.registerCommand("Storage.clearDataForOrigin", [{"name": "origin", "type": "string", "optional": false}, {"name": "storageTypes", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Storage.getCookies", [{"name": "browserContextId", "type": "string", "optional": true}], ["cookies"], false);
Protocol.inspectorBackend.registerCommand("Storage.setCookies", [{"name": "cookies", "type": "object", "optional": false}, {"name": "browserContextId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Storage.clearCookies", [{"name": "browserContextId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Storage.getUsageAndQuota", [{"name": "origin", "type": "string", "optional": false}], ["usage", "quota", "usageBreakdown"], false);
Protocol.inspectorBackend.registerCommand("Storage.trackCacheStorageForOrigin", [{"name": "origin", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Storage.trackIndexedDBForOrigin", [{"name": "origin", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Storage.untrackCacheStorageForOrigin", [{"name": "origin", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Storage.untrackIndexedDBForOrigin", [{"name": "origin", "type": "string", "optional": false}], [], false);

// SystemInfo.
Protocol.inspectorBackend.registerEnum("SystemInfo.SubsamplingFormat", {Yuv420: "yuv420", Yuv422: "yuv422", Yuv444: "yuv444"});
Protocol.inspectorBackend.registerEnum("SystemInfo.ImageType", {Jpeg: "jpeg", Webp: "webp", Unknown: "unknown"});
Protocol.inspectorBackend.registerCommand("SystemInfo.getInfo", [], ["gpu", "modelName", "modelVersion", "commandLine"], false);
Protocol.inspectorBackend.registerCommand("SystemInfo.getProcessInfo", [], ["processInfo"], false);

// Target.
Protocol.inspectorBackend.registerEvent("Target.attachedToTarget", ["sessionId", "targetInfo", "waitingForDebugger"]);
Protocol.inspectorBackend.registerEvent("Target.detachedFromTarget", ["sessionId", "targetId"]);
Protocol.inspectorBackend.registerEvent("Target.receivedMessageFromTarget", ["sessionId", "message", "targetId"]);
Protocol.inspectorBackend.registerEvent("Target.targetCreated", ["targetInfo"]);
Protocol.inspectorBackend.registerEvent("Target.targetDestroyed", ["targetId"]);
Protocol.inspectorBackend.registerEvent("Target.targetCrashed", ["targetId", "status", "errorCode"]);
Protocol.inspectorBackend.registerEvent("Target.targetInfoChanged", ["targetInfo"]);
Protocol.inspectorBackend.registerCommand("Target.activateTarget", [{"name": "targetId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Target.attachToTarget", [{"name": "targetId", "type": "string", "optional": false}, {"name": "flatten", "type": "boolean", "optional": true}], ["sessionId"], false);
Protocol.inspectorBackend.registerCommand("Target.attachToBrowserTarget", [], ["sessionId"], false);
Protocol.inspectorBackend.registerCommand("Target.closeTarget", [{"name": "targetId", "type": "string", "optional": false}], ["success"], false);
Protocol.inspectorBackend.registerCommand("Target.exposeDevToolsProtocol", [{"name": "targetId", "type": "string", "optional": false}, {"name": "bindingName", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Target.createBrowserContext", [], ["browserContextId"], false);
Protocol.inspectorBackend.registerCommand("Target.getBrowserContexts", [], ["browserContextIds"], false);
Protocol.inspectorBackend.registerCommand("Target.createTarget", [{"name": "url", "type": "string", "optional": false}, {"name": "width", "type": "number", "optional": true}, {"name": "height", "type": "number", "optional": true}, {"name": "browserContextId", "type": "string", "optional": true}, {"name": "enableBeginFrameControl", "type": "boolean", "optional": true}, {"name": "newWindow", "type": "boolean", "optional": true}, {"name": "background", "type": "boolean", "optional": true}], ["targetId"], false);
Protocol.inspectorBackend.registerCommand("Target.detachFromTarget", [{"name": "sessionId", "type": "string", "optional": true}, {"name": "targetId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Target.disposeBrowserContext", [{"name": "browserContextId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Target.getTargetInfo", [{"name": "targetId", "type": "string", "optional": true}], ["targetInfo"], false);
Protocol.inspectorBackend.registerCommand("Target.getTargets", [], ["targetInfos"], false);
Protocol.inspectorBackend.registerCommand("Target.sendMessageToTarget", [{"name": "message", "type": "string", "optional": false}, {"name": "sessionId", "type": "string", "optional": true}, {"name": "targetId", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Target.setAutoAttach", [{"name": "autoAttach", "type": "boolean", "optional": false}, {"name": "waitForDebuggerOnStart", "type": "boolean", "optional": false}, {"name": "flatten", "type": "boolean", "optional": true}, {"name": "windowOpen", "type": "boolean", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Target.setDiscoverTargets", [{"name": "discover", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Target.setRemoteLocations", [{"name": "locations", "type": "object", "optional": false}], [], false);

// Tethering.
Protocol.inspectorBackend.registerEvent("Tethering.accepted", ["port", "connectionId"]);
Protocol.inspectorBackend.registerCommand("Tethering.bind", [{"name": "port", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Tethering.unbind", [{"name": "port", "type": "number", "optional": false}], [], false);

// Tracing.
Protocol.inspectorBackend.registerEnum("Tracing.TraceConfigRecordMode", {RecordUntilFull: "recordUntilFull", RecordContinuously: "recordContinuously", RecordAsMuchAsPossible: "recordAsMuchAsPossible", EchoToConsole: "echoToConsole"});
Protocol.inspectorBackend.registerEnum("Tracing.StreamFormat", {Json: "json", Proto: "proto"});
Protocol.inspectorBackend.registerEnum("Tracing.StreamCompression", {None: "none", Gzip: "gzip"});
Protocol.inspectorBackend.registerEvent("Tracing.bufferUsage", ["percentFull", "eventCount", "value"]);
Protocol.inspectorBackend.registerEvent("Tracing.dataCollected", ["value"]);
Protocol.inspectorBackend.registerEvent("Tracing.tracingComplete", ["dataLossOccurred", "stream", "traceFormat", "streamCompression"]);
Protocol.inspectorBackend.registerCommand("Tracing.end", [], [], false);
Protocol.inspectorBackend.registerCommand("Tracing.getCategories", [], ["categories"], false);
Protocol.inspectorBackend.registerCommand("Tracing.recordClockSyncMarker", [{"name": "syncId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Tracing.requestMemoryDump", [{"name": "deterministic", "type": "boolean", "optional": true}], ["dumpGuid", "success"], false);
Protocol.inspectorBackend.registerCommand("Tracing.start", [{"name": "categories", "type": "string", "optional": true}, {"name": "options", "type": "string", "optional": true}, {"name": "bufferUsageReportingInterval", "type": "number", "optional": true}, {"name": "transferMode", "type": "string", "optional": true}, {"name": "streamFormat", "type": "string", "optional": true}, {"name": "streamCompression", "type": "string", "optional": true}, {"name": "traceConfig", "type": "object", "optional": true}], [], false);

// Fetch.
Protocol.inspectorBackend.registerEnum("Fetch.RequestStage", {Request: "Request", Response: "Response"});
Protocol.inspectorBackend.registerEnum("Fetch.AuthChallengeSource", {Server: "Server", Proxy: "Proxy"});
Protocol.inspectorBackend.registerEnum("Fetch.AuthChallengeResponseResponse", {Default: "Default", CancelAuth: "CancelAuth", ProvideCredentials: "ProvideCredentials"});
Protocol.inspectorBackend.registerEvent("Fetch.requestPaused", ["requestId", "request", "frameId", "resourceType", "responseErrorReason", "responseStatusCode", "responseHeaders", "networkId"]);
Protocol.inspectorBackend.registerEvent("Fetch.authRequired", ["requestId", "request", "frameId", "resourceType", "authChallenge"]);
Protocol.inspectorBackend.registerCommand("Fetch.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Fetch.enable", [{"name": "patterns", "type": "object", "optional": true}, {"name": "handleAuthRequests", "type": "boolean", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Fetch.failRequest", [{"name": "requestId", "type": "string", "optional": false}, {"name": "errorReason", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Fetch.fulfillRequest", [{"name": "requestId", "type": "string", "optional": false}, {"name": "responseCode", "type": "number", "optional": false}, {"name": "responseHeaders", "type": "object", "optional": true}, {"name": "binaryResponseHeaders", "type": "string", "optional": true}, {"name": "body", "type": "string", "optional": true}, {"name": "responsePhrase", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Fetch.continueRequest", [{"name": "requestId", "type": "string", "optional": false}, {"name": "url", "type": "string", "optional": true}, {"name": "method", "type": "string", "optional": true}, {"name": "postData", "type": "string", "optional": true}, {"name": "headers", "type": "object", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Fetch.continueWithAuth", [{"name": "requestId", "type": "string", "optional": false}, {"name": "authChallengeResponse", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Fetch.getResponseBody", [{"name": "requestId", "type": "string", "optional": false}], ["body", "base64Encoded"], false);
Protocol.inspectorBackend.registerCommand("Fetch.takeResponseBodyAsStream", [{"name": "requestId", "type": "string", "optional": false}], ["stream"], false);

// WebAudio.
Protocol.inspectorBackend.registerEnum("WebAudio.ContextType", {Realtime: "realtime", Offline: "offline"});
Protocol.inspectorBackend.registerEnum("WebAudio.ContextState", {Suspended: "suspended", Running: "running", Closed: "closed"});
Protocol.inspectorBackend.registerEnum("WebAudio.ChannelCountMode", {ClampedMax: "clamped-max", Explicit: "explicit", Max: "max"});
Protocol.inspectorBackend.registerEnum("WebAudio.ChannelInterpretation", {Discrete: "discrete", Speakers: "speakers"});
Protocol.inspectorBackend.registerEnum("WebAudio.AutomationRate", {ARate: "a-rate", KRate: "k-rate"});
Protocol.inspectorBackend.registerEvent("WebAudio.contextCreated", ["context"]);
Protocol.inspectorBackend.registerEvent("WebAudio.contextWillBeDestroyed", ["contextId"]);
Protocol.inspectorBackend.registerEvent("WebAudio.contextChanged", ["context"]);
Protocol.inspectorBackend.registerEvent("WebAudio.audioListenerCreated", ["listener"]);
Protocol.inspectorBackend.registerEvent("WebAudio.audioListenerWillBeDestroyed", ["contextId", "listenerId"]);
Protocol.inspectorBackend.registerEvent("WebAudio.audioNodeCreated", ["node"]);
Protocol.inspectorBackend.registerEvent("WebAudio.audioNodeWillBeDestroyed", ["contextId", "nodeId"]);
Protocol.inspectorBackend.registerEvent("WebAudio.audioParamCreated", ["param"]);
Protocol.inspectorBackend.registerEvent("WebAudio.audioParamWillBeDestroyed", ["contextId", "nodeId", "paramId"]);
Protocol.inspectorBackend.registerEvent("WebAudio.nodesConnected", ["contextId", "sourceId", "destinationId", "sourceOutputIndex", "destinationInputIndex"]);
Protocol.inspectorBackend.registerEvent("WebAudio.nodesDisconnected", ["contextId", "sourceId", "destinationId", "sourceOutputIndex", "destinationInputIndex"]);
Protocol.inspectorBackend.registerEvent("WebAudio.nodeParamConnected", ["contextId", "sourceId", "destinationId", "sourceOutputIndex"]);
Protocol.inspectorBackend.registerEvent("WebAudio.nodeParamDisconnected", ["contextId", "sourceId", "destinationId", "sourceOutputIndex"]);
Protocol.inspectorBackend.registerCommand("WebAudio.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("WebAudio.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("WebAudio.getRealtimeData", [{"name": "contextId", "type": "string", "optional": false}], ["realtimeData"], false);

// WebAuthn.
Protocol.inspectorBackend.registerEnum("WebAuthn.AuthenticatorProtocol", {U2f: "u2f", Ctap2: "ctap2"});
Protocol.inspectorBackend.registerEnum("WebAuthn.AuthenticatorTransport", {Usb: "usb", Nfc: "nfc", Ble: "ble", Cable: "cable", Internal: "internal"});
Protocol.inspectorBackend.registerCommand("WebAuthn.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.addVirtualAuthenticator", [{"name": "options", "type": "object", "optional": false}], ["authenticatorId"], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.removeVirtualAuthenticator", [{"name": "authenticatorId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.addCredential", [{"name": "authenticatorId", "type": "string", "optional": false}, {"name": "credential", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.getCredential", [{"name": "authenticatorId", "type": "string", "optional": false}, {"name": "credentialId", "type": "string", "optional": false}], ["credential"], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.getCredentials", [{"name": "authenticatorId", "type": "string", "optional": false}], ["credentials"], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.removeCredential", [{"name": "authenticatorId", "type": "string", "optional": false}, {"name": "credentialId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.clearCredentials", [{"name": "authenticatorId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("WebAuthn.setUserVerified", [{"name": "authenticatorId", "type": "string", "optional": false}, {"name": "isUserVerified", "type": "boolean", "optional": false}], [], false);

// Media.
Protocol.inspectorBackend.registerEnum("Media.PlayerEventType", {PlaybackEvent: "playbackEvent", SystemEvent: "systemEvent", MessageEvent: "messageEvent"});
Protocol.inspectorBackend.registerEvent("Media.playerPropertiesChanged", ["playerId", "properties"]);
Protocol.inspectorBackend.registerEvent("Media.playerEventsAdded", ["playerId", "events"]);
Protocol.inspectorBackend.registerEvent("Media.playersCreated", ["players"]);
Protocol.inspectorBackend.registerCommand("Media.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Media.disable", [], [], false);

// Debugger.
Protocol.inspectorBackend.registerEnum("Debugger.ScopeType", {Global: "global", Local: "local", With: "with", Closure: "closure", Catch: "catch", Block: "block", Script: "script", Eval: "eval", Module: "module"});
Protocol.inspectorBackend.registerEnum("Debugger.BreakLocationType", {DebuggerStatement: "debuggerStatement", Call: "call", Return: "return"});
Protocol.inspectorBackend.registerEvent("Debugger.breakpointResolved", ["breakpointId", "location"]);
Protocol.inspectorBackend.registerEvent("Debugger.paused", ["callFrames", "reason", "data", "hitBreakpoints", "asyncStackTrace", "asyncStackTraceId", "asyncCallStackTraceId"]);
Protocol.inspectorBackend.registerEvent("Debugger.resumed", []);
Protocol.inspectorBackend.registerEvent("Debugger.scriptFailedToParse", ["scriptId", "url", "startLine", "startColumn", "endLine", "endColumn", "executionContextId", "hash", "executionContextAuxData", "sourceMapURL", "hasSourceURL", "isModule", "length", "stackTrace"]);
Protocol.inspectorBackend.registerEvent("Debugger.scriptParsed", ["scriptId", "url", "startLine", "startColumn", "endLine", "endColumn", "executionContextId", "hash", "executionContextAuxData", "isLiveEdit", "sourceMapURL", "hasSourceURL", "isModule", "length", "stackTrace"]);
Protocol.inspectorBackend.registerCommand("Debugger.continueToLocation", [{"name": "location", "type": "object", "optional": false}, {"name": "targetCallFrames", "type": "string", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.enable", [{"name": "maxScriptsCacheSize", "type": "number", "optional": true}], ["debuggerId"], false);
Protocol.inspectorBackend.registerCommand("Debugger.evaluateOnCallFrame", [{"name": "callFrameId", "type": "string", "optional": false}, {"name": "expression", "type": "string", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true}, {"name": "silent", "type": "boolean", "optional": true}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}, {"name": "throwOnSideEffect", "type": "boolean", "optional": true}, {"name": "timeout", "type": "number", "optional": true}], ["result", "exceptionDetails"], false);
Protocol.inspectorBackend.registerCommand("Debugger.getPossibleBreakpoints", [{"name": "start", "type": "object", "optional": false}, {"name": "end", "type": "object", "optional": true}, {"name": "restrictToFunction", "type": "boolean", "optional": true}], ["locations"], false);
Protocol.inspectorBackend.registerCommand("Debugger.getScriptSource", [{"name": "scriptId", "type": "string", "optional": false}], ["scriptSource", "bytecode"], false);
Protocol.inspectorBackend.registerCommand("Debugger.getWasmBytecode", [{"name": "scriptId", "type": "string", "optional": false}], ["bytecode"], false);
Protocol.inspectorBackend.registerCommand("Debugger.getStackTrace", [{"name": "stackTraceId", "type": "object", "optional": false}], ["stackTrace"], false);
Protocol.inspectorBackend.registerCommand("Debugger.pause", [], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.pauseOnAsyncCall", [{"name": "parentStackTraceId", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.removeBreakpoint", [{"name": "breakpointId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.restartFrame", [{"name": "callFrameId", "type": "string", "optional": false}], ["callFrames", "asyncStackTrace", "asyncStackTraceId"], false);
Protocol.inspectorBackend.registerCommand("Debugger.resume", [], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.searchInContent", [{"name": "scriptId", "type": "string", "optional": false}, {"name": "query", "type": "string", "optional": false}, {"name": "caseSensitive", "type": "boolean", "optional": true}, {"name": "isRegex", "type": "boolean", "optional": true}], ["result"], false);
Protocol.inspectorBackend.registerCommand("Debugger.setAsyncCallStackDepth", [{"name": "maxDepth", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.setBlackboxPatterns", [{"name": "patterns", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.setBlackboxedRanges", [{"name": "scriptId", "type": "string", "optional": false}, {"name": "positions", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.setBreakpoint", [{"name": "location", "type": "object", "optional": false}, {"name": "condition", "type": "string", "optional": true}], ["breakpointId", "actualLocation"], false);
Protocol.inspectorBackend.registerCommand("Debugger.setInstrumentationBreakpoint", [{"name": "instrumentation", "type": "string", "optional": false}], ["breakpointId"], false);
Protocol.inspectorBackend.registerCommand("Debugger.setBreakpointByUrl", [{"name": "lineNumber", "type": "number", "optional": false}, {"name": "url", "type": "string", "optional": true}, {"name": "urlRegex", "type": "string", "optional": true}, {"name": "scriptHash", "type": "string", "optional": true}, {"name": "columnNumber", "type": "number", "optional": true}, {"name": "condition", "type": "string", "optional": true}], ["breakpointId", "locations"], false);
Protocol.inspectorBackend.registerCommand("Debugger.setBreakpointOnFunctionCall", [{"name": "objectId", "type": "string", "optional": false}, {"name": "condition", "type": "string", "optional": true}], ["breakpointId"], false);
Protocol.inspectorBackend.registerCommand("Debugger.setBreakpointsActive", [{"name": "active", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.setPauseOnExceptions", [{"name": "state", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.setReturnValue", [{"name": "newValue", "type": "object", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.setScriptSource", [{"name": "scriptId", "type": "string", "optional": false}, {"name": "scriptSource", "type": "string", "optional": false}, {"name": "dryRun", "type": "boolean", "optional": true}], ["callFrames", "stackChanged", "asyncStackTrace", "asyncStackTraceId", "exceptionDetails"], false);
Protocol.inspectorBackend.registerCommand("Debugger.setSkipAllPauses", [{"name": "skip", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.setVariableValue", [{"name": "scopeNumber", "type": "number", "optional": false}, {"name": "variableName", "type": "string", "optional": false}, {"name": "newValue", "type": "object", "optional": false}, {"name": "callFrameId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.stepInto", [{"name": "breakOnAsyncCall", "type": "boolean", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.stepOut", [], [], false);
Protocol.inspectorBackend.registerCommand("Debugger.stepOver", [], [], false);

// HeapProfiler.
Protocol.inspectorBackend.registerEvent("HeapProfiler.addHeapSnapshotChunk", ["chunk"]);
Protocol.inspectorBackend.registerEvent("HeapProfiler.heapStatsUpdate", ["statsUpdate"]);
Protocol.inspectorBackend.registerEvent("HeapProfiler.lastSeenObjectId", ["lastSeenObjectId", "timestamp"]);
Protocol.inspectorBackend.registerEvent("HeapProfiler.reportHeapSnapshotProgress", ["done", "total", "finished"]);
Protocol.inspectorBackend.registerEvent("HeapProfiler.resetProfiles", []);
Protocol.inspectorBackend.registerCommand("HeapProfiler.addInspectedHeapObject", [{"name": "heapObjectId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.collectGarbage", [], [], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.getHeapObjectId", [{"name": "objectId", "type": "string", "optional": false}], ["heapSnapshotObjectId"], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.getObjectByHeapObjectId", [{"name": "objectId", "type": "string", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}], ["result"], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.getSamplingProfile", [], ["profile"], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.startSampling", [{"name": "samplingInterval", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.startTrackingHeapObjects", [{"name": "trackAllocations", "type": "boolean", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.stopSampling", [], ["profile"], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.stopTrackingHeapObjects", [{"name": "reportProgress", "type": "boolean", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("HeapProfiler.takeHeapSnapshot", [{"name": "reportProgress", "type": "boolean", "optional": true}], [], false);

// Profiler.
Protocol.inspectorBackend.registerEvent("Profiler.consoleProfileFinished", ["id", "location", "profile", "title"]);
Protocol.inspectorBackend.registerEvent("Profiler.consoleProfileStarted", ["id", "location", "title"]);
Protocol.inspectorBackend.registerCommand("Profiler.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.getBestEffortCoverage", [], ["result"], false);
Protocol.inspectorBackend.registerCommand("Profiler.setSamplingInterval", [{"name": "interval", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.start", [], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.startPreciseCoverage", [{"name": "callCount", "type": "boolean", "optional": true}, {"name": "detailed", "type": "boolean", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.startTypeProfile", [], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.stop", [], ["profile"], false);
Protocol.inspectorBackend.registerCommand("Profiler.stopPreciseCoverage", [], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.stopTypeProfile", [], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.takePreciseCoverage", [], ["result"], false);
Protocol.inspectorBackend.registerCommand("Profiler.takeTypeProfile", [], ["result"], false);
Protocol.inspectorBackend.registerCommand("Profiler.enableRuntimeCallStats", [], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.disableRuntimeCallStats", [], [], false);
Protocol.inspectorBackend.registerCommand("Profiler.getRuntimeCallStats", [], ["result"], false);

// Runtime.
Protocol.inspectorBackend.registerEnum("Runtime.RemoteObjectType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol", Bigint: "bigint"});
Protocol.inspectorBackend.registerEnum("Runtime.RemoteObjectSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Generator: "generator", Error: "error", Proxy: "proxy", Promise: "promise", Typedarray: "typedarray", Arraybuffer: "arraybuffer", Dataview: "dataview"});
Protocol.inspectorBackend.registerEnum("Runtime.ObjectPreviewType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol", Bigint: "bigint"});
Protocol.inspectorBackend.registerEnum("Runtime.ObjectPreviewSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Generator: "generator", Error: "error"});
Protocol.inspectorBackend.registerEnum("Runtime.PropertyPreviewType", {Object: "object", Function: "function", Undefined: "undefined", String: "string", Number: "number", Boolean: "boolean", Symbol: "symbol", Accessor: "accessor", Bigint: "bigint"});
Protocol.inspectorBackend.registerEnum("Runtime.PropertyPreviewSubtype", {Array: "array", Null: "null", Node: "node", Regexp: "regexp", Date: "date", Map: "map", Set: "set", Weakmap: "weakmap", Weakset: "weakset", Iterator: "iterator", Generator: "generator", Error: "error"});
Protocol.inspectorBackend.registerEvent("Runtime.bindingCalled", ["name", "payload", "executionContextId"]);
Protocol.inspectorBackend.registerEvent("Runtime.consoleAPICalled", ["type", "args", "executionContextId", "timestamp", "stackTrace", "context"]);
Protocol.inspectorBackend.registerEvent("Runtime.exceptionRevoked", ["reason", "exceptionId"]);
Protocol.inspectorBackend.registerEvent("Runtime.exceptionThrown", ["timestamp", "exceptionDetails"]);
Protocol.inspectorBackend.registerEvent("Runtime.executionContextCreated", ["context"]);
Protocol.inspectorBackend.registerEvent("Runtime.executionContextDestroyed", ["executionContextId"]);
Protocol.inspectorBackend.registerEvent("Runtime.executionContextsCleared", []);
Protocol.inspectorBackend.registerEvent("Runtime.inspectRequested", ["object", "hints"]);
Protocol.inspectorBackend.registerCommand("Runtime.awaitPromise", [{"name": "promiseObjectId", "type": "string", "optional": false}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}], ["result", "exceptionDetails"], false);
Protocol.inspectorBackend.registerCommand("Runtime.callFunctionOn", [{"name": "functionDeclaration", "type": "string", "optional": false}, {"name": "objectId", "type": "string", "optional": true}, {"name": "arguments", "type": "object", "optional": true}, {"name": "silent", "type": "boolean", "optional": true}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}, {"name": "userGesture", "type": "boolean", "optional": true}, {"name": "awaitPromise", "type": "boolean", "optional": true}, {"name": "executionContextId", "type": "number", "optional": true}, {"name": "objectGroup", "type": "string", "optional": true}], ["result", "exceptionDetails"], false);
Protocol.inspectorBackend.registerCommand("Runtime.compileScript", [{"name": "expression", "type": "string", "optional": false}, {"name": "sourceURL", "type": "string", "optional": false}, {"name": "persistScript", "type": "boolean", "optional": false}, {"name": "executionContextId", "type": "number", "optional": true}], ["scriptId", "exceptionDetails"], false);
Protocol.inspectorBackend.registerCommand("Runtime.disable", [], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.discardConsoleEntries", [], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.enable", [], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.evaluate", [{"name": "expression", "type": "string", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true}, {"name": "silent", "type": "boolean", "optional": true}, {"name": "contextId", "type": "number", "optional": true}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}, {"name": "userGesture", "type": "boolean", "optional": true}, {"name": "awaitPromise", "type": "boolean", "optional": true}, {"name": "throwOnSideEffect", "type": "boolean", "optional": true}, {"name": "timeout", "type": "number", "optional": true}, {"name": "disableBreaks", "type": "boolean", "optional": true}, {"name": "replMode", "type": "boolean", "optional": true}], ["result", "exceptionDetails"], false);
Protocol.inspectorBackend.registerCommand("Runtime.getIsolateId", [], ["id"], false);
Protocol.inspectorBackend.registerCommand("Runtime.getHeapUsage", [], ["usedSize", "totalSize"], false);
Protocol.inspectorBackend.registerCommand("Runtime.getProperties", [{"name": "objectId", "type": "string", "optional": false}, {"name": "ownProperties", "type": "boolean", "optional": true}, {"name": "accessorPropertiesOnly", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}], ["result", "internalProperties", "privateProperties", "exceptionDetails"], false);
Protocol.inspectorBackend.registerCommand("Runtime.globalLexicalScopeNames", [{"name": "executionContextId", "type": "number", "optional": true}], ["names"], false);
Protocol.inspectorBackend.registerCommand("Runtime.queryObjects", [{"name": "prototypeObjectId", "type": "string", "optional": false}, {"name": "objectGroup", "type": "string", "optional": true}], ["objects"], false);
Protocol.inspectorBackend.registerCommand("Runtime.releaseObject", [{"name": "objectId", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.releaseObjectGroup", [{"name": "objectGroup", "type": "string", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.runIfWaitingForDebugger", [], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.runScript", [{"name": "scriptId", "type": "string", "optional": false}, {"name": "executionContextId", "type": "number", "optional": true}, {"name": "objectGroup", "type": "string", "optional": true}, {"name": "silent", "type": "boolean", "optional": true}, {"name": "includeCommandLineAPI", "type": "boolean", "optional": true}, {"name": "returnByValue", "type": "boolean", "optional": true}, {"name": "generatePreview", "type": "boolean", "optional": true}, {"name": "awaitPromise", "type": "boolean", "optional": true}], ["result", "exceptionDetails"], false);
Protocol.inspectorBackend.registerCommand("Runtime.setAsyncCallStackDepth", [{"name": "maxDepth", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.setCustomObjectFormatterEnabled", [{"name": "enabled", "type": "boolean", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.setMaxCallStackSizeToCapture", [{"name": "size", "type": "number", "optional": false}], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.terminateExecution", [], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.addBinding", [{"name": "name", "type": "string", "optional": false}, {"name": "executionContextId", "type": "number", "optional": true}], [], false);
Protocol.inspectorBackend.registerCommand("Runtime.removeBinding", [{"name": "name", "type": "string", "optional": false}], [], false);

// Schema.
Protocol.inspectorBackend.registerCommand("Schema.getDomains", [], ["domains"], false);


SDK.CSSMetadata._generatedProperties = [{"name": "-internal-effective-zoom", "inherited": true}, {"name": "-internal-visited-background-color"}, {"name": "-internal-visited-border-block-end-color"}, {"name": "-internal-visited-border-block-start-color"}, {"name": "-internal-visited-border-bottom-color"}, {"name": "-internal-visited-border-inline-end-color"}, {"name": "-internal-visited-border-inline-start-color"}, {"name": "-internal-visited-border-left-color"}, {"name": "-internal-visited-border-right-color"}, {"name": "-internal-visited-border-top-color"}, {"name": "-internal-visited-caret-color", "inherited": true}, {"name": "-internal-visited-color", "inherited": true}, {"name": "-internal-visited-column-rule-color"}, {"name": "-internal-visited-fill", "svg": true, "inherited": true}, {"name": "-internal-visited-outline-color"}, {"name": "-internal-visited-stroke", "svg": true, "inherited": true}, {"name": "-internal-visited-text-decoration-color"}, {"name": "-internal-visited-text-emphasis-color", "inherited": true}, {"name": "-internal-visited-text-fill-color", "inherited": true}, {"name": "-internal-visited-text-stroke-color", "inherited": true}, {"name": "-webkit-app-region"}, {"name": "-webkit-appearance"}, {"name": "-webkit-border-horizontal-spacing", "inherited": true}, {"name": "-webkit-border-image"}, {"name": "-webkit-border-vertical-spacing", "inherited": true}, {"name": "-webkit-box-align"}, {"name": "-webkit-box-decoration-break"}, {"name": "-webkit-box-direction", "inherited": true}, {"name": "-webkit-box-flex"}, {"name": "-webkit-box-ordinal-group"}, {"name": "-webkit-box-orient"}, {"name": "-webkit-box-pack"}, {"name": "-webkit-box-reflect"}, {"longhands": ["break-after"], "name": "-webkit-column-break-after"}, {"longhands": ["break-before"], "name": "-webkit-column-break-before"}, {"longhands": ["break-inside"], "name": "-webkit-column-break-inside"}, {"name": "-webkit-font-size-delta"}, {"name": "-webkit-font-smoothing", "inherited": true}, {"name": "-webkit-highlight", "inherited": true}, {"name": "-webkit-hyphenate-character", "inherited": true}, {"name": "-webkit-line-break", "inherited": true}, {"name": "-webkit-line-clamp"}, {"name": "-webkit-locale", "inherited": true}, {"name": "-webkit-margin-after-collapse"}, {"name": "-webkit-margin-before-collapse"}, {"name": "-webkit-margin-bottom-collapse"}, {"longhands": ["-webkit-margin-before-collapse", "-webkit-margin-after-collapse"], "name": "-webkit-margin-collapse"}, {"name": "-webkit-margin-top-collapse"}, {"longhands": ["-webkit-mask-image", "-webkit-mask-position-x", "-webkit-mask-position-y", "-webkit-mask-size", "-webkit-mask-repeat-x", "-webkit-mask-repeat-y", "-webkit-mask-origin", "-webkit-mask-clip"], "name": "-webkit-mask"}, {"longhands": ["-webkit-mask-box-image-source", "-webkit-mask-box-image-slice", "-webkit-mask-box-image-width", "-webkit-mask-box-image-outset", "-webkit-mask-box-image-repeat"], "name": "-webkit-mask-box-image"}, {"name": "-webkit-mask-box-image-outset"}, {"name": "-webkit-mask-box-image-repeat"}, {"name": "-webkit-mask-box-image-slice"}, {"name": "-webkit-mask-box-image-source"}, {"name": "-webkit-mask-box-image-width"}, {"name": "-webkit-mask-clip"}, {"name": "-webkit-mask-composite"}, {"name": "-webkit-mask-image"}, {"name": "-webkit-mask-origin"}, {"longhands": ["-webkit-mask-position-x", "-webkit-mask-position-y"], "name": "-webkit-mask-position"}, {"name": "-webkit-mask-position-x"}, {"name": "-webkit-mask-position-y"}, {"longhands": ["-webkit-mask-repeat-x", "-webkit-mask-repeat-y"], "name": "-webkit-mask-repeat"}, {"name": "-webkit-mask-repeat-x"}, {"name": "-webkit-mask-repeat-y"}, {"name": "-webkit-mask-size"}, {"name": "-webkit-perspective-origin-x"}, {"name": "-webkit-perspective-origin-y"}, {"name": "-webkit-print-color-adjust", "inherited": true}, {"name": "-webkit-rtl-ordering", "inherited": true}, {"name": "-webkit-ruby-position", "inherited": true}, {"name": "-webkit-tap-highlight-color", "inherited": true}, {"name": "-webkit-text-combine", "inherited": true}, {"name": "-webkit-text-decorations-in-effect", "inherited": true}, {"longhands": ["-webkit-text-emphasis-style", "-webkit-text-emphasis-color"], "name": "-webkit-text-emphasis", "inherited": true}, {"name": "-webkit-text-emphasis-color", "inherited": true}, {"name": "-webkit-text-emphasis-position", "inherited": true}, {"name": "-webkit-text-emphasis-style", "inherited": true}, {"name": "-webkit-text-fill-color", "inherited": true}, {"name": "-webkit-text-orientation", "inherited": true}, {"name": "-webkit-text-security", "inherited": true}, {"longhands": ["-webkit-text-stroke-width", "-webkit-text-stroke-color"], "name": "-webkit-text-stroke", "inherited": true}, {"name": "-webkit-text-stroke-color", "inherited": true}, {"name": "-webkit-text-stroke-width", "inherited": true}, {"name": "-webkit-transform-origin-x"}, {"name": "-webkit-transform-origin-y"}, {"name": "-webkit-transform-origin-z"}, {"name": "-webkit-user-drag"}, {"name": "-webkit-user-modify", "inherited": true}, {"name": "-webkit-writing-mode", "inherited": true}, {"name": "align-content"}, {"name": "align-items"}, {"name": "align-self"}, {"svg": true, "name": "alignment-baseline"}, {"name": "all"}, {"longhands": ["animation-duration", "animation-timing-function", "animation-delay", "animation-iteration-count", "animation-direction", "animation-fill-mode", "animation-play-state", "animation-name"], "name": "animation"}, {"name": "animation-delay"}, {"name": "animation-direction"}, {"name": "animation-duration"}, {"name": "animation-fill-mode"}, {"name": "animation-iteration-count"}, {"name": "animation-name"}, {"name": "animation-play-state"}, {"name": "animation-timing-function"}, {"name": "backdrop-filter"}, {"name": "backface-visibility"}, {"longhands": ["background-image", "background-position-x", "background-position-y", "background-size", "background-repeat-x", "background-repeat-y", "background-attachment", "background-origin", "background-clip", "background-color"], "name": "background"}, {"name": "background-attachment"}, {"name": "background-blend-mode"}, {"name": "background-clip"}, {"name": "background-color"}, {"name": "background-image"}, {"name": "background-origin"}, {"longhands": ["background-position-x", "background-position-y"], "name": "background-position"}, {"name": "background-position-x"}, {"name": "background-position-y"}, {"longhands": ["background-repeat-x", "background-repeat-y"], "name": "background-repeat"}, {"name": "background-repeat-x"}, {"name": "background-repeat-y"}, {"name": "background-size"}, {"name": "baseline-shift", "svg": true}, {"name": "block-size"}, {"longhands": ["border-top-color", "border-top-style", "border-top-width", "border-right-color", "border-right-style", "border-right-width", "border-bottom-color", "border-bottom-style", "border-bottom-width", "border-left-color", "border-left-style", "border-left-width", "border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"], "name": "border"}, {"longhands": ["border-block-start-color", "border-block-start-style", "border-block-start-width", "border-block-end-color", "border-block-end-style", "border-block-end-width"], "name": "border-block"}, {"longhands": ["border-block-start-color", "border-block-end-color"], "name": "border-block-color"}, {"longhands": ["border-block-end-width", "border-block-end-style", "border-block-end-color"], "name": "border-block-end"}, {"name": "border-block-end-color"}, {"name": "border-block-end-style"}, {"name": "border-block-end-width"}, {"longhands": ["border-block-start-width", "border-block-start-style", "border-block-start-color"], "name": "border-block-start"}, {"name": "border-block-start-color"}, {"name": "border-block-start-style"}, {"name": "border-block-start-width"}, {"longhands": ["border-block-start-style", "border-block-end-style"], "name": "border-block-style"}, {"longhands": ["border-block-start-width", "border-block-end-width"], "name": "border-block-width"}, {"longhands": ["border-bottom-width", "border-bottom-style", "border-bottom-color"], "name": "border-bottom"}, {"name": "border-bottom-color"}, {"name": "border-bottom-left-radius"}, {"name": "border-bottom-right-radius"}, {"name": "border-bottom-style"}, {"name": "border-bottom-width"}, {"name": "border-collapse", "inherited": true}, {"longhands": ["border-top-color", "border-right-color", "border-bottom-color", "border-left-color"], "name": "border-color"}, {"longhands": ["border-image-source", "border-image-slice", "border-image-width", "border-image-outset", "border-image-repeat"], "name": "border-image"}, {"name": "border-image-outset"}, {"name": "border-image-repeat"}, {"name": "border-image-slice"}, {"name": "border-image-source"}, {"name": "border-image-width"}, {"longhands": ["border-inline-start-color", "border-inline-start-style", "border-inline-start-width", "border-inline-end-color", "border-inline-end-style", "border-inline-end-width"], "name": "border-inline"}, {"longhands": ["border-inline-start-color", "border-inline-end-color"], "name": "border-inline-color"}, {"longhands": ["border-inline-end-width", "border-inline-end-style", "border-inline-end-color"], "name": "border-inline-end"}, {"name": "border-inline-end-color"}, {"name": "border-inline-end-style"}, {"name": "border-inline-end-width"}, {"longhands": ["border-inline-start-width", "border-inline-start-style", "border-inline-start-color"], "name": "border-inline-start"}, {"name": "border-inline-start-color"}, {"name": "border-inline-start-style"}, {"name": "border-inline-start-width"}, {"longhands": ["border-inline-start-style", "border-inline-end-style"], "name": "border-inline-style"}, {"longhands": ["border-inline-start-width", "border-inline-end-width"], "name": "border-inline-width"}, {"longhands": ["border-left-width", "border-left-style", "border-left-color"], "name": "border-left"}, {"name": "border-left-color"}, {"name": "border-left-style"}, {"name": "border-left-width"}, {"longhands": ["border-top-left-radius", "border-top-right-radius", "border-bottom-right-radius", "border-bottom-left-radius"], "name": "border-radius"}, {"longhands": ["border-right-width", "border-right-style", "border-right-color"], "name": "border-right"}, {"name": "border-right-color"}, {"name": "border-right-style"}, {"name": "border-right-width"}, {"longhands": ["-webkit-border-horizontal-spacing", "-webkit-border-vertical-spacing"], "name": "border-spacing", "inherited": true}, {"longhands": ["border-top-style", "border-right-style", "border-bottom-style", "border-left-style"], "name": "border-style"}, {"longhands": ["border-top-width", "border-top-style", "border-top-color"], "name": "border-top"}, {"name": "border-top-color"}, {"name": "border-top-left-radius"}, {"name": "border-top-right-radius"}, {"name": "border-top-style"}, {"name": "border-top-width"}, {"longhands": ["border-top-width", "border-right-width", "border-bottom-width", "border-left-width"], "name": "border-width"}, {"name": "bottom"}, {"name": "box-shadow"}, {"name": "box-sizing"}, {"name": "break-after"}, {"name": "break-before"}, {"name": "break-inside"}, {"svg": true, "name": "buffered-rendering"}, {"name": "caption-side", "inherited": true}, {"name": "caret-color", "inherited": true}, {"name": "clear"}, {"name": "clip"}, {"name": "clip-path"}, {"name": "clip-rule", "svg": true, "inherited": true}, {"name": "color", "inherited": true}, {"name": "color-interpolation", "svg": true, "inherited": true}, {"svg": true, "name": "color-interpolation-filters", "inherited": true}, {"name": "color-rendering", "svg": true, "inherited": true}, {"name": "color-scheme", "inherited": true}, {"name": "column-count"}, {"name": "column-fill"}, {"name": "column-gap"}, {"longhands": ["column-rule-width", "column-rule-style", "column-rule-color"], "name": "column-rule"}, {"name": "column-rule-color"}, {"name": "column-rule-style"}, {"name": "column-rule-width"}, {"name": "column-span"}, {"name": "column-width"}, {"longhands": ["column-width", "column-count"], "name": "columns"}, {"name": "contain"}, {"name": "content"}, {"name": "counter-increment"}, {"name": "counter-reset"}, {"name": "cursor", "inherited": true}, {"svg": true, "name": "cx"}, {"svg": true, "name": "cy"}, {"name": "d", "svg": true}, {"name": "direction", "inherited": true}, {"name": "display"}, {"name": "dominant-baseline", "svg": true, "inherited": true}, {"name": "empty-cells", "inherited": true}, {"name": "fill", "svg": true, "inherited": true}, {"svg": true, "inherited": true, "name": "fill-opacity"}, {"name": "fill-rule", "svg": true, "inherited": true}, {"name": "filter"}, {"longhands": ["flex-grow", "flex-shrink", "flex-basis"], "name": "flex"}, {"name": "flex-basis"}, {"name": "flex-direction"}, {"longhands": ["flex-direction", "flex-wrap"], "name": "flex-flow"}, {"name": "flex-grow"}, {"name": "flex-shrink"}, {"name": "flex-wrap"}, {"name": "float"}, {"name": "flood-color", "svg": true}, {"name": "flood-opacity", "svg": true}, {"longhands": ["font-style", "font-variant-ligatures", "font-variant-caps", "font-variant-numeric", "font-variant-east-asian", "font-weight", "font-stretch", "font-size", "line-height", "font-family"], "name": "font", "inherited": true}, {"name": "font-display"}, {"name": "font-family", "inherited": true}, {"name": "font-feature-settings", "inherited": true}, {"name": "font-kerning", "inherited": true}, {"name": "font-optical-sizing", "inherited": true}, {"name": "font-size", "inherited": true}, {"name": "font-size-adjust", "inherited": true}, {"name": "font-stretch", "inherited": true}, {"name": "font-style", "inherited": true}, {"longhands": ["font-variant-ligatures", "font-variant-caps", "font-variant-numeric", "font-variant-east-asian"], "name": "font-variant", "inherited": true}, {"inherited": true, "name": "font-variant-caps"}, {"inherited": true, "name": "font-variant-east-asian"}, {"name": "font-variant-ligatures", "inherited": true}, {"inherited": true, "name": "font-variant-numeric"}, {"name": "font-variation-settings", "inherited": true}, {"name": "font-weight", "inherited": true}, {"name": "forced-color-adjust", "inherited": true}, {"longhands": ["row-gap", "column-gap"], "name": "gap"}, {"longhands": ["grid-template-rows", "grid-template-columns", "grid-template-areas", "grid-auto-flow", "grid-auto-rows", "grid-auto-columns"], "name": "grid"}, {"longhands": ["grid-row-start", "grid-column-start", "grid-row-end", "grid-column-end"], "name": "grid-area"}, {"name": "grid-auto-columns"}, {"name": "grid-auto-flow"}, {"name": "grid-auto-rows"}, {"longhands": ["grid-column-start", "grid-column-end"], "name": "grid-column"}, {"name": "grid-column-end"}, {"longhands": ["column-gap"], "name": "grid-column-gap"}, {"name": "grid-column-start"}, {"longhands": ["row-gap", "column-gap"], "name": "grid-gap"}, {"longhands": ["grid-row-start", "grid-row-end"], "name": "grid-row"}, {"name": "grid-row-end"}, {"longhands": ["row-gap"], "name": "grid-row-gap"}, {"name": "grid-row-start"}, {"longhands": ["grid-template-rows", "grid-template-columns", "grid-template-areas"], "name": "grid-template"}, {"name": "grid-template-areas"}, {"name": "grid-template-columns"}, {"name": "grid-template-rows"}, {"name": "height"}, {"name": "hyphens", "inherited": true}, {"name": "image-orientation", "inherited": true}, {"name": "image-rendering", "inherited": true}, {"name": "inherits"}, {"name": "initial-value"}, {"name": "inline-size"}, {"longhands": ["top", "right", "bottom", "left"], "name": "inset"}, {"longhands": ["inset-block-start", "inset-block-end"], "name": "inset-block"}, {"name": "inset-block-end"}, {"name": "inset-block-start"}, {"longhands": ["inset-inline-start", "inset-inline-end"], "name": "inset-inline"}, {"name": "inset-inline-end"}, {"name": "inset-inline-start"}, {"name": "intrinsic-block-size"}, {"name": "intrinsic-height"}, {"name": "intrinsic-inline-size"}, {"longhands": ["intrinsic-width", "intrinsic-height"], "name": "intrinsic-size"}, {"name": "intrinsic-width"}, {"name": "isolation"}, {"name": "justify-content"}, {"name": "justify-items"}, {"name": "justify-self"}, {"name": "left"}, {"inherited": true, "name": "letter-spacing"}, {"name": "lighting-color", "svg": true}, {"name": "line-break", "inherited": true}, {"name": "line-height", "inherited": true}, {"name": "line-height-step", "inherited": true}, {"longhands": ["list-style-position", "list-style-image", "list-style-type"], "name": "list-style", "inherited": true}, {"name": "list-style-image", "inherited": true}, {"name": "list-style-position", "inherited": true}, {"name": "list-style-type", "inherited": true}, {"longhands": ["margin-top", "margin-right", "margin-bottom", "margin-left"], "name": "margin"}, {"longhands": ["margin-block-start", "margin-block-end"], "name": "margin-block"}, {"name": "margin-block-end"}, {"name": "margin-block-start"}, {"name": "margin-bottom"}, {"longhands": ["margin-inline-start", "margin-inline-end"], "name": "margin-inline"}, {"name": "margin-inline-end"}, {"name": "margin-inline-start"}, {"name": "margin-left"}, {"name": "margin-right"}, {"name": "margin-top"}, {"longhands": ["marker-start", "marker-mid", "marker-end"], "inherited": true, "name": "marker", "svg": true}, {"svg": true, "inherited": true, "name": "marker-end"}, {"svg": true, "inherited": true, "name": "marker-mid"}, {"svg": true, "inherited": true, "name": "marker-start"}, {"svg": true, "name": "mask"}, {"name": "mask-source-type"}, {"svg": true, "name": "mask-type"}, {"name": "max-block-size"}, {"name": "max-height"}, {"name": "max-inline-size"}, {"name": "max-width"}, {"name": "max-zoom"}, {"name": "min-block-size"}, {"name": "min-height"}, {"name": "min-inline-size"}, {"name": "min-width"}, {"name": "min-zoom"}, {"name": "mix-blend-mode"}, {"name": "object-fit"}, {"name": "object-position"}, {"longhands": ["offset-position", "offset-path", "offset-distance", "offset-rotate", "offset-anchor"], "name": "offset"}, {"name": "offset-anchor"}, {"name": "offset-distance"}, {"name": "offset-path"}, {"name": "offset-position"}, {"name": "offset-rotate"}, {"name": "opacity"}, {"name": "order"}, {"name": "orientation"}, {"name": "orphans", "inherited": true}, {"longhands": ["outline-color", "outline-style", "outline-width"], "name": "outline"}, {"name": "outline-color"}, {"name": "outline-offset"}, {"name": "outline-style"}, {"name": "outline-width"}, {"longhands": ["overflow-x", "overflow-y"], "name": "overflow"}, {"name": "overflow-anchor", "inherited": false}, {"name": "overflow-block"}, {"name": "overflow-inline"}, {"name": "overflow-wrap", "inherited": true}, {"name": "overflow-x"}, {"name": "overflow-y"}, {"longhands": ["overscroll-behavior-x", "overscroll-behavior-y"], "name": "overscroll-behavior"}, {"name": "overscroll-behavior-block"}, {"name": "overscroll-behavior-inline"}, {"name": "overscroll-behavior-x"}, {"name": "overscroll-behavior-y"}, {"longhands": ["padding-top", "padding-right", "padding-bottom", "padding-left"], "name": "padding"}, {"longhands": ["padding-block-start", "padding-block-end"], "name": "padding-block"}, {"name": "padding-block-end"}, {"name": "padding-block-start"}, {"name": "padding-bottom"}, {"longhands": ["padding-inline-start", "padding-inline-end"], "name": "padding-inline"}, {"name": "padding-inline-end"}, {"name": "padding-inline-start"}, {"name": "padding-left"}, {"name": "padding-right"}, {"name": "padding-top"}, {"name": "page"}, {"longhands": ["break-after"], "name": "page-break-after"}, {"longhands": ["break-before"], "name": "page-break-before"}, {"longhands": ["break-inside"], "name": "page-break-inside"}, {"svg": true, "inherited": true, "name": "paint-order"}, {"name": "perspective"}, {"name": "perspective-origin"}, {"longhands": ["align-content", "justify-content"], "name": "place-content"}, {"longhands": ["align-items", "justify-items"], "name": "place-items"}, {"longhands": ["align-self", "justify-self"], "name": "place-self"}, {"name": "pointer-events", "inherited": true}, {"name": "position"}, {"name": "quotes", "inherited": true}, {"svg": true, "name": "r"}, {"name": "render-subtree"}, {"name": "resize"}, {"name": "right"}, {"name": "rotate"}, {"name": "row-gap"}, {"name": "rx", "svg": true}, {"name": "ry", "svg": true}, {"name": "scale"}, {"name": "scroll-behavior"}, {"name": "scroll-customization"}, {"longhands": ["scroll-margin-top", "scroll-margin-right", "scroll-margin-bottom", "scroll-margin-left"], "name": "scroll-margin"}, {"longhands": ["scroll-margin-block-start", "scroll-margin-block-end"], "name": "scroll-margin-block"}, {"name": "scroll-margin-block-end"}, {"name": "scroll-margin-block-start"}, {"name": "scroll-margin-bottom"}, {"longhands": ["scroll-margin-inline-start", "scroll-margin-inline-end"], "name": "scroll-margin-inline"}, {"name": "scroll-margin-inline-end"}, {"name": "scroll-margin-inline-start"}, {"name": "scroll-margin-left"}, {"name": "scroll-margin-right"}, {"name": "scroll-margin-top"}, {"longhands": ["scroll-padding-top", "scroll-padding-right", "scroll-padding-bottom", "scroll-padding-left"], "name": "scroll-padding"}, {"longhands": ["scroll-padding-block-start", "scroll-padding-block-end"], "name": "scroll-padding-block"}, {"name": "scroll-padding-block-end"}, {"name": "scroll-padding-block-start"}, {"name": "scroll-padding-bottom"}, {"longhands": ["scroll-padding-inline-start", "scroll-padding-inline-end"], "name": "scroll-padding-inline"}, {"name": "scroll-padding-inline-end"}, {"name": "scroll-padding-inline-start"}, {"name": "scroll-padding-left"}, {"name": "scroll-padding-right"}, {"name": "scroll-padding-top"}, {"name": "scroll-snap-align"}, {"name": "scroll-snap-stop"}, {"name": "scroll-snap-type"}, {"name": "shape-image-threshold"}, {"name": "shape-margin"}, {"name": "shape-outside"}, {"name": "shape-rendering", "svg": true, "inherited": true}, {"name": "size"}, {"name": "speak", "inherited": true}, {"name": "src"}, {"name": "stop-color", "svg": true}, {"name": "stop-opacity", "svg": true}, {"name": "stroke", "svg": true, "inherited": true}, {"name": "stroke-dasharray", "svg": true, "inherited": true}, {"name": "stroke-dashoffset", "svg": true, "inherited": true}, {"name": "stroke-linecap", "svg": true, "inherited": true}, {"name": "stroke-linejoin", "svg": true, "inherited": true}, {"name": "stroke-miterlimit", "svg": true, "inherited": true}, {"svg": true, "inherited": true, "name": "stroke-opacity"}, {"svg": true, "inherited": true, "name": "stroke-width"}, {"name": "syntax"}, {"name": "tab-size", "inherited": true}, {"name": "table-layout"}, {"name": "text-align", "inherited": true}, {"name": "text-align-last", "inherited": true}, {"name": "text-anchor", "svg": true, "inherited": true}, {"name": "text-combine-upright", "inherited": true}, {"longhands": ["text-decoration-line", "text-decoration-style", "text-decoration-color"], "name": "text-decoration"}, {"name": "text-decoration-color"}, {"name": "text-decoration-line"}, {"name": "text-decoration-skip-ink", "inherited": true}, {"name": "text-decoration-style"}, {"name": "text-indent", "inherited": true}, {"name": "text-justify", "inherited": true}, {"name": "text-orientation", "inherited": true}, {"name": "text-overflow"}, {"name": "text-rendering", "inherited": true}, {"name": "text-shadow", "inherited": true}, {"name": "text-size-adjust", "inherited": true}, {"name": "text-transform", "inherited": true}, {"name": "text-underline-position", "inherited": true}, {"name": "top"}, {"name": "touch-action"}, {"name": "transform"}, {"name": "transform-box"}, {"name": "transform-origin"}, {"name": "transform-style"}, {"longhands": ["transition-property", "transition-duration", "transition-timing-function", "transition-delay"], "name": "transition"}, {"name": "transition-delay"}, {"name": "transition-duration"}, {"name": "transition-property"}, {"name": "transition-timing-function"}, {"name": "translate"}, {"name": "unicode-bidi"}, {"name": "unicode-range"}, {"name": "user-select", "inherited": true}, {"name": "user-zoom"}, {"svg": true, "name": "vector-effect"}, {"name": "vertical-align"}, {"name": "viewport-fit"}, {"name": "visibility", "inherited": true}, {"name": "white-space", "inherited": true}, {"name": "widows", "inherited": true}, {"name": "width"}, {"name": "will-change"}, {"name": "word-break", "inherited": true}, {"inherited": true, "name": "word-spacing"}, {"name": "writing-mode", "inherited": true}, {"svg": true, "name": "x"}, {"svg": true, "name": "y"}, {"name": "z-index"}, {"name": "zoom"}];const _loadedScripts={};(function(){const baseUrl=self.location?self.location.origin+self.location.pathname:'';self._importScriptPathPrefix=baseUrl.substring(0,baseUrl.lastIndexOf('/')+1);})();const REMOTE_MODULE_FALLBACK_REVISION='@010ddcfda246975d194964ccf20038ebbdec6084';class Runtime{constructor(descriptors){this._modules=[];this._modulesMap={};this._extensions=[];this._cachedTypeClasses={};this._descriptorsMap={};for(let i=0;i<descriptors.length;++i){this._registerModule(descriptors[i]);}}
static _loadResourcePromise(url,asBinary){return new Promise(load);function load(fulfill,reject){const xhr=new XMLHttpRequest();xhr.open('GET',url,true);if(asBinary){xhr.responseType='arraybuffer';}
xhr.onreadystatechange=onreadystatechange;function onreadystatechange(e){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
const{response}=e.target;const text=asBinary?new TextDecoder().decode(response):response;const status=/^HTTP\/1.1 404/.test(text)?404:xhr.status;if([0,200,304].indexOf(status)===-1)
{reject(new Error('While loading from url '+url+' server responded with a status of '+status));}else{fulfill(response);}}
xhr.send(null);}}
static loadResourcePromise(url){return Runtime._loadResourcePromise(url,false);}
static loadBinaryResourcePromise(url){return Runtime._loadResourcePromise(url,true);}
static loadResourcePromiseWithFallback(url){return Runtime.loadResourcePromise(url).catch(err=>{const urlWithFallbackVersion=url.replace(/@[0-9a-f]{40}/,REMOTE_MODULE_FALLBACK_REVISION);if(urlWithFallbackVersion===url||!url.includes('audits_worker_module')){throw err;}
return Runtime.loadResourcePromise(urlWithFallbackVersion);});}
static normalizePath(path){if(path.indexOf('..')===-1&&path.indexOf('.')===-1){return path;}
const normalizedSegments=[];const segments=path.split('/');for(let i=0;i<segments.length;i++){const segment=segments[i];if(segment==='.'){continue;}else if(segment==='..'){normalizedSegments.pop();}else if(segment){normalizedSegments.push(segment);}}
let normalizedPath=normalizedSegments.join('/');if(normalizedPath[normalizedPath.length-1]==='/'){return normalizedPath;}
if(path[0]==='/'&&normalizedPath){normalizedPath='/'+normalizedPath;}
if((path[path.length-1]==='/')||(segments[segments.length-1]==='.')||(segments[segments.length-1]==='..')){normalizedPath=normalizedPath+'/';}
return normalizedPath;}
static getResourceURL(scriptName,base){const sourceURL=(base||self._importScriptPathPrefix)+scriptName;const schemaIndex=sourceURL.indexOf('://')+3;let pathIndex=sourceURL.indexOf('/',schemaIndex);if(pathIndex===-1){pathIndex=sourceURL.length;}
return sourceURL.substring(0,pathIndex)+Runtime.normalizePath(sourceURL.substring(pathIndex));}
static _loadScriptsPromise(scriptNames,base){const promises=[];const urls=[];const sources=new Array(scriptNames.length);let scriptToEval=0;for(let i=0;i<scriptNames.length;++i){const scriptName=scriptNames[i];const sourceURL=Runtime.getResourceURL(scriptName,base);if(_loadedScripts[sourceURL]){continue;}
urls.push(sourceURL);const loadResourcePromise=base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);promises.push(loadResourcePromise.then(scriptSourceLoaded.bind(null,i),scriptSourceLoaded.bind(null,i,undefined)));}
return Promise.all(promises).then(undefined);function scriptSourceLoaded(scriptNumber,scriptSource){sources[scriptNumber]=scriptSource||'';while(typeof sources[scriptToEval]!=='undefined'){evaluateScript(urls[scriptToEval],sources[scriptToEval]);++scriptToEval;}}
function evaluateScript(sourceURL,scriptSource){_loadedScripts[sourceURL]=true;if(!scriptSource){console.error('Empty response arrived for script \''+sourceURL+'\'');return;}
self.eval(scriptSource+'\n//# sourceURL='+sourceURL);}}
static _loadResourceIntoCache(url,appendSourceURL){return Runtime.loadResourcePromise(url).then(cacheResource.bind(this,url),cacheResource.bind(this,url,undefined));function cacheResource(path,content){if(!content){console.error('Failed to load resource: '+path);return;}
const sourceURL=appendSourceURL?Runtime.resolveSourceURL(path):'';Runtime.cachedResources[path]=content+sourceURL;}}
static async appStarted(){return Runtime._appStartedPromise;}
static async startApplication(appName){console.timeStamp('Root.Runtime.startApplication');const allDescriptorsByName={};for(let i=0;i<Root.allDescriptors.length;++i){const d=Root.allDescriptors[i];allDescriptorsByName[d['name']]=d;}
if(!Root.applicationDescriptor){let data=await Runtime.loadResourcePromise(appName+'.json');Root.applicationDescriptor=JSON.parse(data);let descriptor=Root.applicationDescriptor;while(descriptor.extends){data=await Runtime.loadResourcePromise(descriptor.extends+'.json');descriptor=JSON.parse(data);Root.applicationDescriptor.modules=descriptor.modules.concat(Root.applicationDescriptor.modules);}}
const configuration=Root.applicationDescriptor.modules;const moduleJSONPromises=[];const coreModuleNames=[];for(let i=0;i<configuration.length;++i){const descriptor=configuration[i];const name=descriptor['name'];const moduleJSON=allDescriptorsByName[name];if(moduleJSON){moduleJSONPromises.push(Promise.resolve(moduleJSON));}else{moduleJSONPromises.push(Runtime.loadResourcePromise(name+'/module.json').then(JSON.parse.bind(JSON)));}
if(descriptor['type']==='autostart'){coreModuleNames.push(name);}}
const moduleDescriptors=await Promise.all(moduleJSONPromises);for(let i=0;i<moduleDescriptors.length;++i){moduleDescriptors[i].name=configuration[i]['name'];moduleDescriptors[i].condition=configuration[i]['condition'];moduleDescriptors[i].remote=configuration[i]['type']==='remote';}
self.runtime=new Runtime(moduleDescriptors);if(coreModuleNames){await self.runtime._loadAutoStartModules(coreModuleNames);}
Runtime._appStartedPromiseCallback();}
static startWorker(appName){return Root.Runtime.startApplication(appName).then(sendWorkerReady);function sendWorkerReady(){self.postMessage('workerReady');}}
static queryParam(name){return Runtime._queryParamsObject.get(name);}
static queryParamsString(){return location.search;}
static _experimentsSetting(){try{return(JSON.parse(self.localStorage&&self.localStorage['experiments']?self.localStorage['experiments']:'{}'));}catch(e){console.error('Failed to parse localStorage[\'experiments\']');return{};}}
static _assert(value,message){if(value){return;}
Runtime._originalAssert.call(Runtime._console,value,message+' '+new Error().stack);}
static setPlatform(platform){Runtime._platform=platform;}
static _isDescriptorEnabled(descriptor){const activatorExperiment=descriptor['experiment'];if(activatorExperiment==='*'){return Runtime.experiments.supportEnabled();}
if(activatorExperiment&&activatorExperiment.startsWith('!')&&Runtime.experiments.isEnabled(activatorExperiment.substring(1))){return false;}
if(activatorExperiment&&!activatorExperiment.startsWith('!')&&!Runtime.experiments.isEnabled(activatorExperiment)){return false;}
const condition=descriptor['condition'];if(condition&&!condition.startsWith('!')&&!Runtime.queryParam(condition)){return false;}
if(condition&&condition.startsWith('!')&&Runtime.queryParam(condition.substring(1))){return false;}
return true;}
static resolveSourceURL(path){let sourceURL=self.location.href;if(self.location.search){sourceURL=sourceURL.replace(self.location.search,'');}
sourceURL=sourceURL.substring(0,sourceURL.lastIndexOf('/')+1)+path;return'\n/*# sourceURL='+sourceURL+' */';}
static setL10nCallback(localizationFunction){Runtime._l10nCallback=localizationFunction;}
useTestBase(){Runtime._remoteBase='http://localhost:8000/inspector-sources/';if(Runtime.queryParam('debugFrontend')){Runtime._remoteBase+='debug/';}}
module(moduleName){return this._modulesMap[moduleName];}
_registerModule(descriptor){const module=new Runtime.Module(this,descriptor);this._modules.push(module);this._modulesMap[descriptor['name']]=module;}
loadModulePromise(moduleName){return this._modulesMap[moduleName]._loadPromise();}
_loadAutoStartModules(moduleNames){const promises=[];for(let i=0;i<moduleNames.length;++i){promises.push(this.loadModulePromise(moduleNames[i]));}
return Promise.all(promises);}
_checkExtensionApplicability(extension,predicate){if(!predicate){return false;}
const contextTypes=extension.descriptor().contextTypes;if(!contextTypes){return true;}
for(let i=0;i<contextTypes.length;++i){const contextType=this._resolve(contextTypes[i]);const isMatching=!!contextType&&predicate(contextType);if(isMatching){return true;}}
return false;}
isExtensionApplicableToContext(extension,context){if(!context){return true;}
return this._checkExtensionApplicability(extension,isInstanceOf);function isInstanceOf(targetType){return context instanceof targetType;}}
isExtensionApplicableToContextTypes(extension,currentContextTypes){if(!extension.descriptor().contextTypes){return true;}
return this._checkExtensionApplicability(extension,currentContextTypes?isContextTypeKnown:null);function isContextTypeKnown(targetType){return currentContextTypes.has(targetType);}}
extensions(type,context,sortByTitle){return this._extensions.filter(filter).sort(sortByTitle?titleComparator:orderComparator);function filter(extension){if(extension._type!==type&&extension._typeClass()!==type){return false;}
if(!extension.enabled()){return false;}
return!context||extension.isApplicable(context);}
function orderComparator(extension1,extension2){const order1=extension1.descriptor()['order']||0;const order2=extension2.descriptor()['order']||0;return order1-order2;}
function titleComparator(extension1,extension2){const title1=extension1.title()||'';const title2=extension2.title()||'';return title1.localeCompare(title2);}}
extension(type,context){return this.extensions(type,context)[0]||null;}
allInstances(type,context){return Promise.all(this.extensions(type,context).map(extension=>extension.instance()));}
_resolve(typeName){if(!this._cachedTypeClasses[typeName]){const path=typeName.split('.');let object=self;for(let i=0;object&&(i<path.length);++i){object=object[path[i]];}
if(object){this._cachedTypeClasses[typeName]=(object);}}
return this._cachedTypeClasses[typeName]||null;}
sharedInstance(constructorFunction){if(Runtime._instanceSymbol in constructorFunction&&Object.getOwnPropertySymbols(constructorFunction).includes(Runtime._instanceSymbol)){return constructorFunction[Runtime._instanceSymbol];}
const instance=new constructorFunction();constructorFunction[Runtime._instanceSymbol]=instance;return instance;}}
Runtime._queryParamsObject=new URLSearchParams(Runtime.queryParamsString());Runtime._instanceSymbol=Symbol('instance');Runtime.cachedResources={__proto__:null};Runtime._console=console;Runtime._originalAssert=console.assert;Runtime._platform='';class ModuleDescriptor{constructor(){this.name;this.extensions;this.dependencies;this.scripts;this.modules;this.condition;this.remote;}}
class RuntimeExtensionDescriptor{constructor(){this.type;this.className;this.factoryName;this.contextTypes;}}
const specialCases={'sdk':'SDK','js_sdk':'JSSDK','browser_sdk':'BrowserSDK','ui':'UI','object_ui':'ObjectUI','javascript_metadata':'JavaScriptMetadata','perf_ui':'PerfUI','har_importer':'HARImporter','sdk_test_runner':'SDKTestRunner','cpu_profiler_test_runner':'CPUProfilerTestRunner'};class Module{constructor(manager,descriptor){this._manager=manager;this._descriptor=descriptor;this._name=descriptor.name;this._extensions=[];this._extensionsByClassName=new Map();const extensions=(descriptor.extensions);for(let i=0;extensions&&i<extensions.length;++i){const extension=new Extension(this,extensions[i]);this._manager._extensions.push(extension);this._extensions.push(extension);}
this._loadedForTest=false;}
name(){return this._name;}
enabled(){return Runtime._isDescriptorEnabled(this._descriptor);}
resource(name){const fullName=this._name+'/'+name;const content=Runtime.cachedResources[fullName];if(!content){throw new Error(fullName+' not preloaded. Check module.json');}
return content;}
_loadPromise(){if(!this.enabled()){return Promise.reject(new Error('Module '+this._name+' is not enabled'));}
if(this._pendingLoadPromise){return this._pendingLoadPromise;}
const dependencies=this._descriptor.dependencies;const dependencyPromises=[];for(let i=0;dependencies&&i<dependencies.length;++i){dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());}
this._pendingLoadPromise=Promise.all(dependencyPromises).then(this._loadResources.bind(this)).then(this._loadModules.bind(this)).then(this._loadScripts.bind(this)).then(()=>this._loadedForTest=true);return this._pendingLoadPromise;}
_loadResources(){const resources=this._descriptor['resources'];if(!resources||!resources.length){return Promise.resolve();}
const promises=[];for(let i=0;i<resources.length;++i){const url=this._modularizeURL(resources[i]);const isHtml=url.endsWith('.html');promises.push(Runtime._loadResourceIntoCache(url,!isHtml));}
return Promise.all(promises).then(undefined);}
_loadModules(){if(!this._descriptor.modules||!this._descriptor.modules.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};if(typeof WorkerGlobalScope!=='undefined'&&self instanceof WorkerGlobalScope){return Promise.resolve();}
return eval(`import('./${this._name}/${this._name}.js')`);}
_loadScripts(){if(!this._descriptor.scripts||!this._descriptor.scripts.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};return Runtime._loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL,this),this._remoteBase());}
_computeNamespace(){return specialCases[this._name]||this._name.split('_').map(a=>a.substring(0,1).toUpperCase()+a.substring(1)).join('');}
_modularizeURL(resourceName){return Runtime.normalizePath(this._name+'/'+resourceName);}
_remoteBase(){return!Runtime.queryParam('debugFrontend')&&this._descriptor.remote&&Runtime._remoteBase||undefined;}
fetchResource(resourceName){const base=this._remoteBase();const sourceURL=Runtime.getResourceURL(this._modularizeURL(resourceName),base);return base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);}
substituteURL(value){const base=this._remoteBase()||'';return value.replace(/@url\(([^\)]*?)\)/g,convertURL.bind(this));function convertURL(match,url){return base+this._modularizeURL(url);}}}
class Extension{constructor(module,descriptor){this._module=module;this._descriptor=descriptor;this._type=descriptor.type;this._hasTypeClass=this._type.charAt(0)==='@';this._className=descriptor.className||null;this._factoryName=descriptor.factoryName||null;}
descriptor(){return this._descriptor;}
module(){return this._module;}
enabled(){return this._module.enabled()&&Runtime._isDescriptorEnabled(this.descriptor());}
_typeClass(){if(!this._hasTypeClass){return null;}
return this._module._manager._resolve(this._type.substring(1));}
isApplicable(context){return this._module._manager.isExtensionApplicableToContext(this,context);}
instance(){return this._module._loadPromise().then(this._createInstance.bind(this));}
canInstantiate(){return!!(this._className||this._factoryName);}
_createInstance(){const className=this._className||this._factoryName;if(!className){throw new Error('Could not instantiate extension with no class');}
const constructorFunction=self.eval((className));if(!(constructorFunction instanceof Function)){throw new Error('Could not instantiate: '+className);}
if(this._className){return this._module._manager.sharedInstance(constructorFunction);}
return new constructorFunction(this);}
title(){const title=this._descriptor['title-'+Runtime._platform]||this._descriptor['title'];if(title&&Runtime._l10nCallback){return Runtime._l10nCallback(title);}
return title;}
hasContextType(contextType){const contextTypes=this.descriptor().contextTypes;if(!contextTypes){return false;}
for(let i=0;i<contextTypes.length;++i){if(contextType===this._module._manager._resolve(contextTypes[i])){return true;}}
return false;}}
class ExperimentsSupport{constructor(){this._supportEnabled=Runtime.queryParam('experiments')!==null;this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled=new Set();}
allConfigurableExperiments(){const result=[];for(let i=0;i<this._experiments.length;i++){const experiment=this._experiments[i];if(!this._enabledTransiently[experiment.name]){result.push(experiment);}}
return result;}
supportEnabled(){return this._supportEnabled;}
_setExperimentsSetting(value){if(!self.localStorage){return;}
self.localStorage['experiments']=JSON.stringify(value);}
register(experimentName,experimentTitle,hidden){Runtime._assert(!this._experimentNames[experimentName],'Duplicate registration of experiment '+experimentName);this._experimentNames[experimentName]=true;this._experiments.push(new Runtime.Experiment(this,experimentName,experimentTitle,!!hidden));}
isEnabled(experimentName){this._checkExperiment(experimentName);if(Runtime._experimentsSetting()[experimentName]===false){return false;}
if(this._enabledTransiently[experimentName]){return true;}
if(this._serverEnabled.has(experimentName)){return true;}
if(!this.supportEnabled()){return false;}
return!!Runtime._experimentsSetting()[experimentName];}
setEnabled(experimentName,enabled){this._checkExperiment(experimentName);const experimentsSetting=Runtime._experimentsSetting();experimentsSetting[experimentName]=enabled;this._setExperimentsSetting(experimentsSetting);}
setDefaultExperiments(experimentNames){for(let i=0;i<experimentNames.length;++i){this._checkExperiment(experimentNames[i]);this._enabledTransiently[experimentNames[i]]=true;}}
setServerEnabledExperiments(experimentNames){for(const experiment of experimentNames){this._checkExperiment(experiment);this._serverEnabled.add(experiment);}}
enableForTest(experimentName){this._checkExperiment(experimentName);this._enabledTransiently[experimentName]=true;}
clearForTest(){this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled.clear();}
cleanUpStaleExperiments(){const experimentsSetting=Runtime._experimentsSetting();const cleanedUpExperimentSetting={};for(let i=0;i<this._experiments.length;++i){const experimentName=this._experiments[i].name;if(experimentsSetting[experimentName]){cleanedUpExperimentSetting[experimentName]=true;}}
this._setExperimentsSetting(cleanedUpExperimentSetting);}
_checkExperiment(experimentName){Runtime._assert(this._experimentNames[experimentName],'Unknown experiment '+experimentName);}}
class Experiment{constructor(experiments,name,title,hidden){this.name=name;this.title=title;this.hidden=hidden;this._experiments=experiments;}
isEnabled(){return this._experiments.isEnabled(this.name);}
setEnabled(enabled){this._experiments.setEnabled(this.name,enabled);}}
Runtime.experiments=new ExperimentsSupport();Runtime._appStartedPromiseCallback;Runtime._appStartedPromise=new Promise(fulfil=>Runtime._appStartedPromiseCallback=fulfil);Runtime._l10nCallback;Runtime._remoteBase;(function validateRemoteBase(){if(location.href.startsWith('devtools://devtools/bundled/')&&Runtime.queryParam('remoteBase')){const versionMatch=/\/serve_file\/(@[0-9a-zA-Z]+)\/?$/.exec(Runtime.queryParam('remoteBase'));if(versionMatch){Runtime._remoteBase=`${location.origin}/remote/serve_file/${versionMatch[1]}/`;}}})();self.Root=self.Root||{};Root=Root||{};Root.allDescriptors=[];Root.applicationDescriptor=undefined;Root.Runtime=Runtime;Root.runtime;Root.Runtime.ModuleDescriptor=ModuleDescriptor;Root.Runtime.ExtensionDescriptor=RuntimeExtensionDescriptor;Root.Runtime.Extension=Extension;Root.Runtime.Module=Module;Root.Runtime.ExperimentsSupport=ExperimentsSupport;Root.Runtime.Experiment=Experiment;Root.allDescriptors.push(...[{"dependencies":[],"modules":["platform.js","utilities.js"],"name":"platform","scripts":[]},{"skip_compilation":["css.js","javascript.js","xml.js","htmlmixed.js","htmlembedded.js"],"dependencies":[],"modules":["cm_web_modes.js","cm_web_modes_cm.js","cm_web_modes_headless.js","css.js","javascript.js","xml.js","htmlmixed.js","htmlembedded.js"],"name":"cm_web_modes","scripts":[]},{"skip_compilation":["acorn/acorn.js","acorn/acorn_loose.js"],"dependencies":["platform","text_utils","cm_headless","cm_web_modes"],"modules":["formatter_worker.js","ESTreeWalker.js","FormatterWorker.js","acorn/acorn.js","acorn/acorn_loose.js","CSSFormatter.js","AcornTokenizer.js","JavaScriptFormatter.js","FormattedContentBuilder.js","CSSRuleParser.js","HTMLFormatter.js","IdentityFormatter.js","JavaScriptOutline.js","RelaxedJSONParser.js"],"name":"formatter_worker","scripts":[]},{"dependencies":["platform"],"modules":["text_utils.js","Text.js","TextUtils.js","TextRange.js"],"name":"text_utils","scripts":[]},{"skip_compilation":["headlesscodemirror.js"],"modules":["cm_headless.js","headlesscodemirror.js"],"name":"cm_headless","scripts":[]}]);Root.applicationDescriptor={"has_html":false,"modules":[{"type":"autostart","name":"platform"},{"type":"autostart","name":"cm_web_modes"},{"type":"autostart","name":"formatter_worker"},{"type":"autostart","name":"text_utils"},{"type":"autostart","name":"cm_headless"}]};(function(){'use strict';self.mod=function(m,n){return((m%n)+n)%n;};String.prototype.findAll=function(string){const matches=[];let i=this.indexOf(string);while(i!==-1){matches.push(i);i=this.indexOf(string,i+string.length);}
return matches;};String.prototype.reverse=function(){return this.split('').reverse().join('');};String.prototype.replaceControlCharacters=function(){return this.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u0080-\u009f]/g,'�');};String.prototype.isWhitespace=function(){return/^\s*$/.test(this);};String.prototype.computeLineEndings=function(){const endings=this.findAll('\n');endings.push(this.length);return endings;};String.prototype.escapeCharacters=function(chars){let foundChar=false;for(let i=0;i<chars.length;++i){if(this.indexOf(chars.charAt(i))!==-1){foundChar=true;break;}}
if(!foundChar){return String(this);}
let result='';for(let i=0;i<this.length;++i){if(chars.indexOf(this.charAt(i))!==-1){result+='\\';}
result+=this.charAt(i);}
return result;};String.regexSpecialCharacters=function(){return'^[]{}()\\.^$*+?|-,';};String.prototype.escapeForRegExp=function(){return this.escapeCharacters(String.regexSpecialCharacters());};String.filterRegex=function(query){const toEscape=String.regexSpecialCharacters();let regexString='';for(let i=0;i<query.length;++i){let c=query.charAt(i);if(toEscape.indexOf(c)!==-1){c='\\'+c;}
if(i){regexString+='[^\\0'+c+']*';}
regexString+=c;}
return new RegExp(regexString,'i');};String.escapeInvalidUnicodeCharacters=function(text){if(!String._invalidCharactersRegExp){let invalidCharacters='';for(let i=0xfffe;i<=0x10ffff;i+=0x10000){invalidCharacters+=String.fromCodePoint(i,i+1);}
String._invalidCharactersRegExp=new RegExp(`[${invalidCharacters}\uD800-\uDFFF\uFDD0-\uFDEF]`,'gu');}
let result='';let lastPos=0;while(true){const match=String._invalidCharactersRegExp.exec(text);if(!match){break;}
result+=text.substring(lastPos,match.index)+'\\u'+text.charCodeAt(match.index).toString(16);if(match.index+1<String._invalidCharactersRegExp.lastIndex){result+='\\u'+text.charCodeAt(match.index+1).toString(16);}
lastPos=String._invalidCharactersRegExp.lastIndex;}
return result+text.substring(lastPos);};String.prototype.escapeHTML=function(){return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');};String.prototype.unescapeHTML=function(){return this.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&#58;/g,':').replace(/&quot;/g,'"').replace(/&#60;/g,'<').replace(/&#62;/g,'>').replace(/&amp;/g,'&');};String.prototype.collapseWhitespace=function(){return this.replace(/[\s\xA0]+/g,' ');};String.prototype.trimMiddle=function(maxLength){if(this.length<=maxLength){return String(this);}
let leftHalf=maxLength>>1;let rightHalf=maxLength-leftHalf-1;if(this.codePointAt(this.length-rightHalf-1)>=0x10000){--rightHalf;++leftHalf;}
if(leftHalf>0&&this.codePointAt(leftHalf-1)>=0x10000){--leftHalf;}
return this.substr(0,leftHalf)+'\u2026'+this.substr(this.length-rightHalf,rightHalf);};String.prototype.trimEndWithMaxLength=function(maxLength){if(this.length<=maxLength){return String(this);}
return this.substr(0,maxLength-1)+'\u2026';};String.prototype.trimURL=function(baseURLDomain){let result=this.replace(/^(https|http|file):\/\//i,'');if(baseURLDomain){if(result.toLowerCase().startsWith(baseURLDomain.toLowerCase())){result=result.substr(baseURLDomain.length);}}
return result;};String.prototype.toTitleCase=function(){return this.substring(0,1).toUpperCase()+this.substring(1);};String.prototype.compareTo=function(other){if(this>other){return 1;}
if(this<other){return-1;}
return 0;};String.prototype.removeURLFragment=function(){let fragmentIndex=this.indexOf('#');if(fragmentIndex===-1){fragmentIndex=this.length;}
return this.substring(0,fragmentIndex);};String.hashCode=function(string){if(!string){return 0;}
const p=((1<<30)*4-5);const z=0x5033d967;const z2=0x59d2f15d;let s=0;let zi=1;for(let i=0;i<string.length;i++){const xi=string.charCodeAt(i)*z2;s=(s+zi*xi)%p;zi=(zi*z)%p;}
s=(s+zi*(p-1))%p;return Math.abs(s|0);};String.isDigitAt=function(string,index){const c=string.charCodeAt(index);return(48<=c&&c<=57);};String.prototype.toBase64=function(){function encodeBits(b){return b<26?b+65:b<52?b+71:b<62?b-4:b===62?43:b===63?47:65;}
const encoder=new TextEncoder();const data=encoder.encode(this.toString());const n=data.length;let encoded='';if(n===0){return encoded;}
let shift;let v=0;for(let i=0;i<n;i++){shift=i%3;v|=data[i]<<(16>>>shift&24);if(shift===2){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),encodeBits(v>>>6&63),encodeBits(v&63));v=0;}}
if(shift===0){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),61,61);}else if(shift===1){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),encodeBits(v>>>6&63),61);}
return encoded;};String.naturalOrderComparator=function(a,b){const chunk=/^\d+|^\D+/;let chunka,chunkb,anum,bnum;while(1){if(a){if(!b){return 1;}}else{if(b){return-1;}else{return 0;}}
chunka=a.match(chunk)[0];chunkb=b.match(chunk)[0];anum=!isNaN(chunka);bnum=!isNaN(chunkb);if(anum&&!bnum){return-1;}
if(bnum&&!anum){return 1;}
if(anum&&bnum){const diff=chunka-chunkb;if(diff){return diff;}
if(chunka.length!==chunkb.length){if(!+chunka&&!+chunkb)
{return chunka.length-chunkb.length;}else{return chunkb.length-chunka.length;}}}else if(chunka!==chunkb){return(chunka<chunkb)?-1:1;}
a=a.substring(chunka.length);b=b.substring(chunkb.length);}};String.caseInsensetiveComparator=function(a,b){a=a.toUpperCase();b=b.toUpperCase();if(a===b){return 0;}
return a>b?1:-1;};Number.constrain=function(num,min,max){if(num<min){num=min;}else if(num>max){num=max;}
return num;};Number.gcd=function(a,b){if(b===0){return a;}else{return Number.gcd(b,a%b);}};Number.toFixedIfFloating=function(value){if(!value||isNaN(value)){return value;}
const number=Number(value);return number%1?number.toFixed(3):String(number);};Date.prototype.isValid=function(){return!isNaN(this.getTime());};Date.prototype.toISO8601Compact=function(){function leadZero(x){return(x>9?'':'0')+x;}
return this.getFullYear()+leadZero(this.getMonth()+1)+leadZero(this.getDate())+'T'+
leadZero(this.getHours())+leadZero(this.getMinutes())+leadZero(this.getSeconds());};Object.defineProperty(Array.prototype,'remove',{value:function(value,firstOnly){let index=this.indexOf(value);if(index===-1){return false;}
if(firstOnly){this.splice(index,1);return true;}
for(let i=index+1,n=this.length;i<n;++i){if(this[i]!==value){this[index++]=this[i];}}
this.length=index;return true;}});Object.defineProperty(Array.prototype,'pushAll',{value:function(array){for(let i=0;i<array.length;++i){this.push(array[i]);}}});Object.defineProperty(Array.prototype,'rotate',{value:function(index){const result=[];for(let i=index;i<index+this.length;++i){result.push(this[i%this.length]);}
return result;}});Object.defineProperty(Array.prototype,'sortNumbers',{value:function(){function numericComparator(a,b){return a-b;}
this.sort(numericComparator);}});(function(){const partition={value:function(comparator,left,right,pivotIndex){function swap(array,i1,i2){const temp=array[i1];array[i1]=array[i2];array[i2]=temp;}
const pivotValue=this[pivotIndex];swap(this,right,pivotIndex);let storeIndex=left;for(let i=left;i<right;++i){if(comparator(this[i],pivotValue)<0){swap(this,storeIndex,i);++storeIndex;}}
swap(this,right,storeIndex);return storeIndex;}};Object.defineProperty(Array.prototype,'partition',partition);Object.defineProperty(Uint32Array.prototype,'partition',partition);const sortRange={value:function(comparator,leftBound,rightBound,sortWindowLeft,sortWindowRight){function quickSortRange(array,comparator,left,right,sortWindowLeft,sortWindowRight){if(right<=left){return;}
const pivotIndex=Math.floor(Math.random()*(right-left))+left;const pivotNewIndex=array.partition(comparator,left,right,pivotIndex);if(sortWindowLeft<pivotNewIndex){quickSortRange(array,comparator,left,pivotNewIndex-1,sortWindowLeft,sortWindowRight);}
if(pivotNewIndex<sortWindowRight){quickSortRange(array,comparator,pivotNewIndex+1,right,sortWindowLeft,sortWindowRight);}}
if(leftBound===0&&rightBound===(this.length-1)&&sortWindowLeft===0&&sortWindowRight>=rightBound){this.sort(comparator);}else{quickSortRange(this,comparator,leftBound,rightBound,sortWindowLeft,sortWindowRight);}
return this;}};Object.defineProperty(Array.prototype,'sortRange',sortRange);Object.defineProperty(Uint32Array.prototype,'sortRange',sortRange);})();Object.defineProperty(Array.prototype,'lowerBound',{value:function(object,comparator,left,right){function defaultComparator(a,b){return a<b?-1:(a>b?1:0);}
comparator=comparator||defaultComparator;let l=left||0;let r=right!==undefined?right:this.length;while(l<r){const m=(l+r)>>1;if(comparator(object,this[m])>0){l=m+1;}else{r=m;}}
return r;}});Object.defineProperty(Array.prototype,'upperBound',{value:function(object,comparator,left,right){function defaultComparator(a,b){return a<b?-1:(a>b?1:0);}
comparator=comparator||defaultComparator;let l=left||0;let r=right!==undefined?right:this.length;while(l<r){const m=(l+r)>>1;if(comparator(object,this[m])>=0){l=m+1;}else{r=m;}}
return r;}});Object.defineProperty(Uint32Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Uint32Array.prototype,'upperBound',{value:Array.prototype.upperBound});Object.defineProperty(Int32Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Int32Array.prototype,'upperBound',{value:Array.prototype.upperBound});Object.defineProperty(Float64Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Array.prototype,'binaryIndexOf',{value:function(value,comparator){const index=this.lowerBound(value,comparator);return index<this.length&&comparator(value,this[index])===0?index:-1;}});Object.defineProperty(Array.prototype,'select',{value:function(field){const result=new Array(this.length);for(let i=0;i<this.length;++i){result[i]=this[i][field];}
return result;}});Object.defineProperty(Array.prototype,'peekLast',{value:function(){return this[this.length-1];}});(function(){function mergeOrIntersect(array1,array2,comparator,mergeNotIntersect){const result=[];let i=0;let j=0;while(i<array1.length&&j<array2.length){const compareValue=comparator(array1[i],array2[j]);if(mergeNotIntersect||!compareValue){result.push(compareValue<=0?array1[i]:array2[j]);}
if(compareValue<=0){i++;}
if(compareValue>=0){j++;}}
if(mergeNotIntersect){while(i<array1.length){result.push(array1[i++]);}
while(j<array2.length){result.push(array2[j++]);}}
return result;}
Object.defineProperty(Array.prototype,'intersectOrdered',{value:function(array,comparator){return mergeOrIntersect(this,array,comparator,false);}});Object.defineProperty(Array.prototype,'mergeOrdered',{value:function(array,comparator){return mergeOrIntersect(this,array,comparator,true);}});})();String.sprintf=function(format,var_arg){return String.vsprintf(format,Array.prototype.slice.call(arguments,1));};String.tokenizeFormatString=function(format,formatters){const tokens=[];function addStringToken(str){if(!str){return;}
if(tokens.length&&tokens[tokens.length-1].type==='string'){tokens[tokens.length-1].value+=str;}else{tokens.push({type:'string',value:str});}}
function addSpecifierToken(specifier,precision,substitutionIndex){tokens.push({type:'specifier',specifier:specifier,precision:precision,substitutionIndex:substitutionIndex});}
function addAnsiColor(code){const types={3:'color',9:'colorLight',4:'bgColor',10:'bgColorLight'};const colorCodes=['black','red','green','yellow','blue','magenta','cyan','lightGray','','default'];const colorCodesLight=['darkGray','lightRed','lightGreen','lightYellow','lightBlue','lightMagenta','lightCyan','white',''];const colors={color:colorCodes,colorLight:colorCodesLight,bgColor:colorCodes,bgColorLight:colorCodesLight};const type=types[Math.floor(code/10)];if(!type){return;}
const color=colors[type][code%10];if(!color){return;}
tokens.push({type:'specifier',specifier:'c',value:{description:(type.startsWith('bg')?'background : ':'color: ')+color}});}
let textStart=0;let substitutionIndex=0;const re=new RegExp(`%%|%(?:(\\d+)\\$)?(?:\\.(\\d*))?([${Object.keys(formatters).join('')}])|\\u001b\\[(\\d+)m`,'g');for(let match=re.exec(format);!!match;match=re.exec(format)){const matchStart=match.index;if(matchStart>textStart){addStringToken(format.substring(textStart,matchStart));}
if(match[0]==='%%'){addStringToken('%');}else if(match[0].startsWith('%')){const[_,substitionString,precisionString,specifierString]=match;if(substitionString&&Number(substitionString)>0){substitutionIndex=Number(substitionString)-1;}
const precision=precisionString?Number(precisionString):-1;addSpecifierToken(specifierString,precision,substitutionIndex);++substitutionIndex;}else{const code=Number(match[4]);addAnsiColor(code);}
textStart=matchStart+match[0].length;}
addStringToken(format.substring(textStart));return tokens;};String.standardFormatters={d:function(substitution){return!isNaN(substitution)?substitution:0;},f:function(substitution,token){if(substitution&&token.precision>-1){substitution=substitution.toFixed(token.precision);}
return!isNaN(substitution)?substitution:(token.precision>-1?Number(0).toFixed(token.precision):0);},s:function(substitution){return substitution;}};String.vsprintf=function(format,substitutions){return String.format(format,substitutions,String.standardFormatters,'',function(a,b){return a+b;}).formattedResult;};String.format=function(format,substitutions,formatters,initialValue,append,tokenizedFormat){if(!format||((!substitutions||!substitutions.length)&&format.search(/\u001b\[(\d+)m/)===-1)){return{formattedResult:append(initialValue,format),unusedSubstitutions:substitutions};}
function prettyFunctionName(){return'String.format("'+format+'", "'+Array.prototype.join.call(substitutions,'", "')+'")';}
function warn(msg){console.warn(prettyFunctionName()+': '+msg);}
function error(msg){console.error(prettyFunctionName()+': '+msg);}
let result=initialValue;const tokens=tokenizedFormat||String.tokenizeFormatString(format,formatters);const usedSubstitutionIndexes={};for(let i=0;i<tokens.length;++i){const token=tokens[i];if(token.type==='string'){result=append(result,token.value);continue;}
if(token.type!=='specifier'){error('Unknown token type "'+token.type+'" found.');continue;}
if(!token.value&&token.substitutionIndex>=substitutions.length){error('not enough substitution arguments. Had '+substitutions.length+' but needed '+
(token.substitutionIndex+1)+', so substitution was skipped.');result=append(result,'%'+(token.precision>-1?token.precision:'')+token.specifier);continue;}
if(!token.value){usedSubstitutionIndexes[token.substitutionIndex]=true;}
if(!(token.specifier in formatters)){warn('unsupported format character \u201C'+token.specifier+'\u201D. Treating as a string.');result=append(result,token.value?'':substitutions[token.substitutionIndex]);continue;}
result=append(result,formatters[token.specifier](token.value||substitutions[token.substitutionIndex],token));}
const unusedSubstitutions=[];for(let i=0;i<substitutions.length;++i){if(i in usedSubstitutionIndexes){continue;}
unusedSubstitutions.push(substitutions[i]);}
return{formattedResult:result,unusedSubstitutions:unusedSubstitutions};};self.createSearchRegex=function(query,caseSensitive,isRegex){const regexFlags=caseSensitive?'g':'gi';let regexObject;if(isRegex){try{regexObject=new RegExp(query,regexFlags);}catch(e){}}
if(!regexObject){regexObject=self.createPlainTextSearchRegex(query,regexFlags);}
return regexObject;};self.createPlainTextSearchRegex=function(query,flags){const regexSpecialCharacters=String.regexSpecialCharacters();let regex='';for(let i=0;i<query.length;++i){const c=query.charAt(i);if(regexSpecialCharacters.indexOf(c)!==-1){regex+='\\';}
regex+=c;}
return new RegExp(regex,flags||'');};self.countRegexMatches=function(regex,content){let text=content;let result=0;let match;while(text&&(match=regex.exec(text))){if(match[0].length>0){++result;}
text=text.substring(match.index+1);}
return result;};self.spacesPadding=function(spacesCount){return'\xA0'.repeat(spacesCount);};self.numberToStringWithSpacesPadding=function(value,symbolsCount){const numberString=value.toString();const paddingLength=Math.max(0,symbolsCount-numberString.length);return self.spacesPadding(paddingLength)+numberString;};Set.prototype.valuesArray=function(){return Array.from(this.values());};Set.prototype.firstValue=function(){if(!this.size){return null;}
return this.values().next().value;};Set.prototype.addAll=function(iterable){for(const e of iterable){this.add(e);}};Set.prototype.containsAll=function(iterable){for(const e of iterable){if(!this.has(e)){return false;}}
return true;};Map.prototype.remove=function(key){const value=this.get(key);this.delete(key);return value;};Map.prototype.valuesArray=function(){return Array.from(this.values());};Map.prototype.keysArray=function(){return Array.from(this.keys());};Map.prototype.inverse=function(){const result=new Platform.Multimap();for(const key of this.keys()){const value=this.get(key);result.set(value,key);}
return result;};const Multimap=class{constructor(){this._map=new Map();}
set(key,value){let set=this._map.get(key);if(!set){set=new Set();this._map.set(key,set);}
set.add(value);}
get(key){return this._map.get(key)||new Set();}
has(key){return this._map.has(key);}
hasValue(key,value){const set=this._map.get(key);if(!set){return false;}
return set.has(value);}
get size(){return this._map.size;}
delete(key,value){const values=this.get(key);if(!values){return false;}
const result=values.delete(value);if(!values.size){this._map.delete(key);}
return result;}
deleteAll(key){this._map.delete(key);}
keysArray(){return this._map.keysArray();}
valuesArray(){const result=[];const keys=this.keysArray();for(let i=0;i<keys.length;++i){result.pushAll(this.get(keys[i]).valuesArray());}
return result;}
clear(){this._map.clear();}};self.loadXHR=function(url){return new Promise(load);function load(successCallback,failureCallback){function onReadyStateChanged(){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
if(xhr.status!==200){xhr.onreadystatechange=null;failureCallback(new Error(xhr.status));return;}
xhr.onreadystatechange=null;successCallback(xhr.responseText);}
const xhr=new XMLHttpRequest();xhr.withCredentials=false;xhr.open('GET',url,true);xhr.onreadystatechange=onReadyStateChanged;xhr.send(null);}};self.suppressUnused=function(value){};self.setImmediate=function(callback){const args=[...arguments].slice(1);Promise.resolve().then(()=>callback(...args));return 0;};Promise.prototype.spread=function(callback){return this.then(spreadPromise);function spreadPromise(arg){return callback.apply(null,arg);}};Promise.prototype.catchException=function(defaultValue){return this.catch(function(error){console.error(error);return defaultValue;});};Map.prototype.diff=function(other,isEqual){const leftKeys=this.keysArray();const rightKeys=other.keysArray();leftKeys.sort((a,b)=>a-b);rightKeys.sort((a,b)=>a-b);const removed=[];const added=[];const equal=[];let leftIndex=0;let rightIndex=0;while(leftIndex<leftKeys.length&&rightIndex<rightKeys.length){const leftKey=leftKeys[leftIndex];const rightKey=rightKeys[rightIndex];if(leftKey===rightKey&&isEqual(this.get(leftKey),other.get(rightKey))){equal.push(this.get(leftKey));++leftIndex;++rightIndex;continue;}
if(leftKey<=rightKey){removed.push(this.get(leftKey));++leftIndex;continue;}
added.push(other.get(rightKey));++rightIndex;}
while(leftIndex<leftKeys.length){const leftKey=leftKeys[leftIndex++];removed.push(this.get(leftKey));}
while(rightIndex<rightKeys.length){const rightKey=rightKeys[rightIndex++];added.push(other.get(rightKey));}
return{added:added,removed:removed,equal:equal};};self.runOnWindowLoad=function(callback){function windowLoaded(){self.removeEventListener('DOMContentLoaded',windowLoaded,false);callback();}
if(document.readyState==='complete'||document.readyState==='interactive'){callback();}else{self.addEventListener('DOMContentLoaded',windowLoaded,false);}};const _singletonSymbol=Symbol('singleton');self.singleton=function(constructorFunction){if(_singletonSymbol in constructorFunction){return constructorFunction[_singletonSymbol];}
const instance=new constructorFunction();constructorFunction[_singletonSymbol]=instance;return instance;};self.base64ToSize=function(content){if(!content){return 0;}
let size=content.length*3/4;if(content[content.length-1]==='='){size--;}
if(content.length>1&&content[content.length-2]==='='){size--;}
return size;};self.Platform=self.Platform||{};Platform=Platform||{};Platform.Multimap=Multimap;class Text{constructor(value){this._value=value;}
lineEndings(){if(!this._lineEndings){this._lineEndings=this._value.computeLineEndings();}
return this._lineEndings;}
value(){return this._value;}
lineCount(){const lineEndings=this.lineEndings();return lineEndings.length;}
offsetFromPosition(lineNumber,columnNumber){return(lineNumber?this.lineEndings()[lineNumber-1]+1:0)+columnNumber;}
positionFromOffset(offset){const lineEndings=this.lineEndings();const lineNumber=lineEndings.lowerBound(offset);return{lineNumber:lineNumber,columnNumber:offset-(lineNumber&&(lineEndings[lineNumber-1]+1))};}
lineAt(lineNumber){const lineEndings=this.lineEndings();const lineStart=lineNumber>0?lineEndings[lineNumber-1]+1:0;const lineEnd=lineEndings[lineNumber];let lineContent=this._value.substring(lineStart,lineEnd);if(lineContent.length>0&&lineContent.charAt(lineContent.length-1)==='\r'){lineContent=lineContent.substring(0,lineContent.length-1);}
return lineContent;}
toSourceRange(range){const start=this.offsetFromPosition(range.startLine,range.startColumn);const end=this.offsetFromPosition(range.endLine,range.endColumn);return new TextUtils.SourceRange(start,end-start);}
toTextRange(sourceRange){const cursor=new TextCursor(this.lineEndings());const result=TextUtils.TextRange.createFromLocation(0,0);cursor.resetTo(sourceRange.offset);result.startLine=cursor.lineNumber();result.startColumn=cursor.columnNumber();cursor.advance(sourceRange.offset+sourceRange.length);result.endLine=cursor.lineNumber();result.endColumn=cursor.columnNumber();return result;}
replaceRange(range,replacement){const sourceRange=this.toSourceRange(range);return this._value.substring(0,sourceRange.offset)+replacement+
this._value.substring(sourceRange.offset+sourceRange.length);}
extract(range){const sourceRange=this.toSourceRange(range);return this._value.substr(sourceRange.offset,sourceRange.length);}}
class TextCursor{constructor(lineEndings){this._lineEndings=lineEndings;this._offset=0;this._lineNumber=0;this._columnNumber=0;}
advance(offset){this._offset=offset;while(this._lineNumber<this._lineEndings.length&&this._lineEndings[this._lineNumber]<this._offset){++this._lineNumber;}
this._columnNumber=this._lineNumber?this._offset-this._lineEndings[this._lineNumber-1]-1:this._offset;}
offset(){return this._offset;}
resetTo(offset){this._offset=offset;this._lineNumber=this._lineEndings.lowerBound(offset);this._columnNumber=this._lineNumber?this._offset-this._lineEndings[this._lineNumber-1]-1:this._offset;}
lineNumber(){return this._lineNumber;}
columnNumber(){return this._columnNumber;}}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.Text=Text;TextUtils.TextCursor=TextCursor;TextUtils.Text.Position;class TextRange{constructor(startLine,startColumn,endLine,endColumn){this.startLine=startLine;this.startColumn=startColumn;this.endLine=endLine;this.endColumn=endColumn;}
static createFromLocation(line,column){return new TextRange(line,column,line,column);}
static fromObject(serializedTextRange){return new TextRange(serializedTextRange.startLine,serializedTextRange.startColumn,serializedTextRange.endLine,serializedTextRange.endColumn);}
static comparator(range1,range2){return range1.compareTo(range2);}
static fromEdit(oldRange,newText){let endLine=oldRange.startLine;let endColumn=oldRange.startColumn+newText.length;const lineEndings=newText.computeLineEndings();if(lineEndings.length>1){endLine=oldRange.startLine+lineEndings.length-1;const len=lineEndings.length;endColumn=lineEndings[len-1]-lineEndings[len-2]-1;}
return new TextRange(oldRange.startLine,oldRange.startColumn,endLine,endColumn);}
isEmpty(){return this.startLine===this.endLine&&this.startColumn===this.endColumn;}
immediatelyPrecedes(range){if(!range){return false;}
return this.endLine===range.startLine&&this.endColumn===range.startColumn;}
immediatelyFollows(range){if(!range){return false;}
return range.immediatelyPrecedes(this);}
follows(range){return(range.endLine===this.startLine&&range.endColumn<=this.startColumn)||range.endLine<this.startLine;}
get linesCount(){return this.endLine-this.startLine;}
collapseToEnd(){return new TextRange(this.endLine,this.endColumn,this.endLine,this.endColumn);}
collapseToStart(){return new TextRange(this.startLine,this.startColumn,this.startLine,this.startColumn);}
normalize(){if(this.startLine>this.endLine||(this.startLine===this.endLine&&this.startColumn>this.endColumn)){return new TextRange(this.endLine,this.endColumn,this.startLine,this.startColumn);}else{return this.clone();}}
clone(){return new TextRange(this.startLine,this.startColumn,this.endLine,this.endColumn);}
serializeToObject(){const serializedTextRange={};serializedTextRange.startLine=this.startLine;serializedTextRange.startColumn=this.startColumn;serializedTextRange.endLine=this.endLine;serializedTextRange.endColumn=this.endColumn;return serializedTextRange;}
compareTo(other){if(this.startLine>other.startLine){return 1;}
if(this.startLine<other.startLine){return-1;}
if(this.startColumn>other.startColumn){return 1;}
if(this.startColumn<other.startColumn){return-1;}
return 0;}
compareToPosition(lineNumber,columnNumber){if(lineNumber<this.startLine||(lineNumber===this.startLine&&columnNumber<this.startColumn)){return-1;}
if(lineNumber>this.endLine||(lineNumber===this.endLine&&columnNumber>this.endColumn)){return 1;}
return 0;}
equal(other){return this.startLine===other.startLine&&this.endLine===other.endLine&&this.startColumn===other.startColumn&&this.endColumn===other.endColumn;}
relativeTo(line,column){const relative=this.clone();if(this.startLine===line){relative.startColumn-=column;}
if(this.endLine===line){relative.endColumn-=column;}
relative.startLine-=line;relative.endLine-=line;return relative;}
relativeFrom(line,column){const relative=this.clone();if(this.startLine===0){relative.startColumn+=column;}
if(this.endLine===0){relative.endColumn+=column;}
relative.startLine+=line;relative.endLine+=line;return relative;}
rebaseAfterTextEdit(originalRange,editedRange){console.assert(originalRange.startLine===editedRange.startLine);console.assert(originalRange.startColumn===editedRange.startColumn);const rebase=this.clone();if(!this.follows(originalRange)){return rebase;}
const lineDelta=editedRange.endLine-originalRange.endLine;const columnDelta=editedRange.endColumn-originalRange.endColumn;rebase.startLine+=lineDelta;rebase.endLine+=lineDelta;if(rebase.startLine===editedRange.endLine){rebase.startColumn+=columnDelta;}
if(rebase.endLine===editedRange.endLine){rebase.endColumn+=columnDelta;}
return rebase;}
toString(){return JSON.stringify(this);}
containsLocation(lineNumber,columnNumber){if(this.startLine===this.endLine){return this.startLine===lineNumber&&this.startColumn<=columnNumber&&columnNumber<=this.endColumn;}
if(this.startLine===lineNumber){return this.startColumn<=columnNumber;}
if(this.endLine===lineNumber){return columnNumber<=this.endColumn;}
return this.startLine<lineNumber&&lineNumber<this.endLine;}}
class SourceRange{constructor(offset,length){this.offset=offset;this.length=length;}}
class SourceEdit{constructor(sourceURL,oldRange,newText){this.sourceURL=sourceURL;this.oldRange=oldRange;this.newText=newText;}
static comparator(edit1,edit2){return TextRange.comparator(edit1.oldRange,edit2.oldRange);}
newRange(){return TextRange.fromEdit(this.oldRange,this.newText);}}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.TextRange=TextRange;TextUtils.SourceRange=SourceRange;TextUtils.SourceEdit=SourceEdit;const Utils={isStopChar:function(char){return(char>' '&&char<'0')||(char>'9'&&char<'A')||(char>'Z'&&char<'_')||(char>'_'&&char<'a')||(char>'z'&&char<='~');},isWordChar:function(char){return!TextUtils.TextUtils.isStopChar(char)&&!TextUtils.TextUtils.isSpaceChar(char);},isSpaceChar:function(char){return TextUtils.TextUtils._SpaceCharRegex.test(char);},isWord:function(word){for(let i=0;i<word.length;++i){if(!TextUtils.TextUtils.isWordChar(word.charAt(i))){return false;}}
return true;},isOpeningBraceChar:function(char){return char==='('||char==='{';},isClosingBraceChar:function(char){return char===')'||char==='}';},isBraceChar:function(char){return TextUtils.TextUtils.isOpeningBraceChar(char)||TextUtils.TextUtils.isClosingBraceChar(char);},textToWords:function(text,isWordChar,wordCallback){let startWord=-1;for(let i=0;i<text.length;++i){if(!isWordChar(text.charAt(i))){if(startWord!==-1){wordCallback(text.substring(startWord,i));}
startWord=-1;}else if(startWord===-1){startWord=i;}}
if(startWord!==-1){wordCallback(text.substring(startWord));}},lineIndent:function(line){let indentation=0;while(indentation<line.length&&TextUtils.TextUtils.isSpaceChar(line.charAt(indentation))){++indentation;}
return line.substr(0,indentation);},isUpperCase:function(text){return text===text.toUpperCase();},isLowerCase:function(text){return text===text.toLowerCase();},splitStringByRegexes(text,regexes){const matches=[];const globalRegexes=[];for(let i=0;i<regexes.length;i++){const regex=regexes[i];if(!regex.global){globalRegexes.push(new RegExp(regex.source,regex.flags?regex.flags+'g':'g'));}else{globalRegexes.push(regex);}}
doSplit(text,0,0);return matches;function doSplit(text,regexIndex,startIndex){if(regexIndex>=globalRegexes.length){matches.push({value:text,position:startIndex,regexIndex:-1,captureGroups:[]});return;}
const regex=globalRegexes[regexIndex];let currentIndex=0;let result;regex.lastIndex=0;while((result=regex.exec(text))!==null){const stringBeforeMatch=text.substring(currentIndex,result.index);if(stringBeforeMatch){doSplit(stringBeforeMatch,regexIndex+1,startIndex+currentIndex);}
const match=result[0];matches.push({value:match,position:startIndex+result.index,regexIndex:regexIndex,captureGroups:result.slice(1)});currentIndex=result.index+match.length;}
const stringAfterMatches=text.substring(currentIndex);if(stringAfterMatches){doSplit(stringAfterMatches,regexIndex+1,startIndex+currentIndex);}}}};class FilterParser{constructor(keys){this._keys=keys;}
static cloneFilter(filter){return{key:filter.key,text:filter.text,regex:filter.regex,negative:filter.negative};}
parse(query){const splitResult=TextUtils.TextUtils.splitStringByRegexes(query,[TextUtils.TextUtils._keyValueFilterRegex,TextUtils.TextUtils._regexFilterRegex,TextUtils.TextUtils._textFilterRegex]);const filters=[];for(let i=0;i<splitResult.length;i++){const regexIndex=splitResult[i].regexIndex;if(regexIndex===-1){continue;}
const result=splitResult[i].captureGroups;if(regexIndex===0){if(this._keys.indexOf((result[1]))!==-1){filters.push({key:result[1],text:result[2],negative:!!result[0]});}else{filters.push({text:result[1]+':'+result[2],negative:!!result[0]});}}else if(regexIndex===1){try{filters.push({regex:new RegExp(result[1],'i'),negative:!!result[0]});}catch(e){filters.push({text:'/'+result[1]+'/',negative:!!result[0]});}}else if(regexIndex===2){filters.push({text:result[1],negative:!!result[0]});}}
return filters;}}
Utils._keyValueFilterRegex=/(?:^|\s)(\-)?([\w\-]+):([^\s]+)/;Utils._regexFilterRegex=/(?:^|\s)(\-)?\/([^\s]+)\//;Utils._textFilterRegex=/(?:^|\s)(\-)?([^\s]+)/;Utils._SpaceCharRegex=/\s/;Utils.Indent={TwoSpaces:'  ',FourSpaces:'    ',EightSpaces:'        ',TabCharacter:'\t'};class BalancedJSONTokenizer{constructor(callback,findMultiple){this._callback=callback;this._index=0;this._balance=0;this._buffer='';this._findMultiple=findMultiple||false;this._closingDoubleQuoteRegex=/[^\\](?:\\\\)*"/g;}
write(chunk){this._buffer+=chunk;const lastIndex=this._buffer.length;const buffer=this._buffer;let index;for(index=this._index;index<lastIndex;++index){const character=buffer[index];if(character==='"'){this._closingDoubleQuoteRegex.lastIndex=index;if(!this._closingDoubleQuoteRegex.test(buffer)){break;}
index=this._closingDoubleQuoteRegex.lastIndex-1;}else if(character==='{'){++this._balance;}else if(character==='}'){--this._balance;if(this._balance<0){this._reportBalanced();return false;}
if(!this._balance){this._lastBalancedIndex=index+1;if(!this._findMultiple){break;}}}else if(character===']'&&!this._balance){this._reportBalanced();return false;}}
this._index=index;this._reportBalanced();return true;}
_reportBalanced(){if(!this._lastBalancedIndex){return;}
this._callback(this._buffer.slice(0,this._lastBalancedIndex));this._buffer=this._buffer.slice(this._lastBalancedIndex);this._index-=this._lastBalancedIndex;this._lastBalancedIndex=0;}
remainder(){return this._buffer;}}
class TokenizerFactory{createTokenizer(mimeType){}}
function isMinified(text){const kMaxNonMinifiedLength=500;let linesToCheck=10;let lastPosition=0;do{let eolIndex=text.indexOf('\n',lastPosition);if(eolIndex<0){eolIndex=text.length;}
if(eolIndex-lastPosition>kMaxNonMinifiedLength&&text.substr(lastPosition,3)!=='//#'){return true;}
lastPosition=eolIndex+1;}while(--linesToCheck>=0&&lastPosition<text.length);linesToCheck=10;lastPosition=text.length;do{let eolIndex=text.lastIndexOf('\n',lastPosition);if(eolIndex<0){eolIndex=0;}
if(lastPosition-eolIndex>kMaxNonMinifiedLength&&text.substr(lastPosition,3)!=='//#'){return true;}
lastPosition=eolIndex-1;}while(--linesToCheck>=0&&lastPosition>0);return false;}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.TextUtils=Utils;TextUtils.FilterParser=FilterParser;TextUtils.BalancedJSONTokenizer=BalancedJSONTokenizer;TextUtils.TokenizerFactory=TokenizerFactory;TextUtils.isMinified=isMinified;TextUtils.FilterParser.ParsedFilter;(function(window){window.CodeMirror={};(function(){"use strict";function splitLines(string){return string.split(/\r?\n|\r/);};function StringStream(string){this.pos=this.start=0;this.string=string;this.lineStart=0;}
StringStream.prototype={eol:function(){return this.pos>=this.string.length;},sol:function(){return this.pos==0;},peek:function(){return this.string.charAt(this.pos)||null;},next:function(){if(this.pos<this.string.length)
return this.string.charAt(this.pos++);},eat:function(match){var ch=this.string.charAt(this.pos);if(typeof match=="string")var ok=ch==match;else var ok=ch&&(match.test?match.test(ch):match(ch));if(ok){++this.pos;return ch;}},eatWhile:function(match){var start=this.pos;while(this.eat(match)){}
return this.pos>start;},eatSpace:function(){var start=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>start;},skipToEnd:function(){this.pos=this.string.length;},skipTo:function(ch){var found=this.string.indexOf(ch,this.pos);if(found>-1){this.pos=found;return true;}},backUp:function(n){this.pos-=n;},column:function(){return this.start-this.lineStart;},indentation:function(){return 0;},match:function(pattern,consume,caseInsensitive){if(typeof pattern=="string"){var cased=function(str){return caseInsensitive?str.toLowerCase():str;};var substr=this.string.substr(this.pos,pattern.length);if(cased(substr)==cased(pattern)){if(consume!==false)this.pos+=pattern.length;return true;}}else{var match=this.string.slice(this.pos).match(pattern);if(match&&match.index>0)return null;if(match&&consume!==false)this.pos+=match[0].length;return match;}},current:function(){return this.string.slice(this.start,this.pos);},hideFirstChars:function(n,inner){this.lineStart+=n;try{return inner();}
finally{this.lineStart-=n;}},lookAhead:function(){return null}};CodeMirror.StringStream=StringStream;CodeMirror.startState=function(mode,a1,a2){return mode.startState?mode.startState(a1,a2):true;};var modes=CodeMirror.modes={},mimeModes=CodeMirror.mimeModes={};CodeMirror.defineMode=function(name,mode){if(arguments.length>2)
mode.dependencies=Array.prototype.slice.call(arguments,2);modes[name]=mode;};CodeMirror.defineMIME=function(mime,spec){mimeModes[mime]=spec;};CodeMirror.resolveMode=function(spec){if(typeof spec=="string"&&mimeModes.hasOwnProperty(spec)){spec=mimeModes[spec];}else if(spec&&typeof spec.name=="string"&&mimeModes.hasOwnProperty(spec.name)){spec=mimeModes[spec.name];}
if(typeof spec=="string")return{name:spec};else return spec||{name:"null"};};CodeMirror.getMode=function(options,spec){spec=CodeMirror.resolveMode(spec);var mfactory=modes[spec.name];if(!mfactory)throw new Error("Unknown mode: "+spec);return mfactory(options,spec);};CodeMirror.registerHelper=CodeMirror.registerGlobalHelper=Math.min;CodeMirror.defineMode("null",function(){return{token:function(stream){stream.skipToEnd();}};});CodeMirror.defineMIME("text/plain","null");CodeMirror.runMode=function(string,modespec,callback,options){var mode=CodeMirror.getMode({indentUnit:2},modespec);if(callback.nodeType==1){var tabSize=(options&&options.tabSize)||4;var node=callback,col=0;node.innerHTML="";callback=function(text,style){if(text=="\n"){node.appendChild(document.createElement("br"));col=0;return;}
var content="";for(var pos=0;;){var idx=text.indexOf("\t",pos);if(idx==-1){content+=text.slice(pos);col+=text.length-pos;break;}else{col+=idx-pos;content+=text.slice(pos,idx);var size=tabSize-col%tabSize;col+=size;for(var i=0;i<size;++i)content+=" ";pos=idx+1;}}
if(style){var sp=node.appendChild(document.createElement("span"));sp.className="cm-"+style.replace(/ +/g," cm-");sp.appendChild(document.createTextNode(content));}else{node.appendChild(document.createTextNode(content));}};}
var lines=splitLines(string),state=(options&&options.state)||CodeMirror.startState(mode);for(var i=0,e=lines.length;i<e;++i){if(i)callback("\n");var stream=new CodeMirror.StringStream(lines[i]);if(!stream.string&&mode.blankLine)mode.blankLine(state);while(!stream.eol()){var style=mode.token(stream,state);callback(stream.current(),style,i,stream.start,state);stream.start=stream.pos;}}};})();}(self));(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?factory(exports):typeof define==='function'&&define.amd?define(['exports'],factory):(global=global||self,factory(global.acorn={}));}(self,function(exports){'use strict';var reservedWords={3:"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",5:"class enum extends super const export import",6:"enum",strict:"implements interface let package private protected public static yield",strictBind:"eval arguments"};var ecma5AndLessKeywords="break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";var keywords={5:ecma5AndLessKeywords,"5module":ecma5AndLessKeywords+" export import",6:ecma5AndLessKeywords+" const class extends export import super"};var keywordRelationalOperator=/^in(stanceof)?$/;var nonASCIIidentifierStartChars="\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u08a0-\u08b4\u08b6-\u08bd\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fef\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7bf\ua7c2-\ua7c6\ua7f7-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab67\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";var nonASCIIidentifierChars="\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08d3-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1df9\u1dfb-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";var nonASCIIidentifierStart=new RegExp("["+nonASCIIidentifierStartChars+"]");var nonASCIIidentifier=new RegExp("["+nonASCIIidentifierStartChars+nonASCIIidentifierChars+"]");nonASCIIidentifierStartChars=nonASCIIidentifierChars=null;var astralIdentifierStartCodes=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,157,310,10,21,11,7,153,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,477,28,11,0,9,21,155,22,13,52,76,44,33,24,27,35,30,0,12,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,85,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,0,33,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,230,43,117,63,32,0,161,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,35,56,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,270,921,103,110,18,195,2749,1070,4050,582,8634,568,8,30,114,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,754,9486,286,50,2,18,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,2357,44,11,6,17,0,370,43,1301,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42710,42,4148,12,221,3,5761,15,7472,3104,541];var astralIdentifierCodes=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,525,10,176,2,54,14,32,9,16,3,46,10,54,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,4,9,83,11,7,0,161,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,232,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,19306,9,135,4,60,6,26,9,1014,0,2,54,8,3,19723,1,5319,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,262,6,10,9,419,13,1495,6,110,6,6,9,792487,239];function isInAstralSet(code,set){var pos=0x10000;for(var i=0;i<set.length;i+=2){pos+=set[i];if(pos>code){return false}
pos+=set[i+1];if(pos>=code){return true}}}
function isIdentifierStart(code,astral){if(code<65){return code===36}
if(code<91){return true}
if(code<97){return code===95}
if(code<123){return true}
if(code<=0xffff){return code>=0xaa&&nonASCIIidentifierStart.test(String.fromCharCode(code))}
if(astral===false){return false}
return isInAstralSet(code,astralIdentifierStartCodes)}
function isIdentifierChar(code,astral){if(code<48){return code===36}
if(code<58){return true}
if(code<65){return false}
if(code<91){return true}
if(code<97){return code===95}
if(code<123){return true}
if(code<=0xffff){return code>=0xaa&&nonASCIIidentifier.test(String.fromCharCode(code))}
if(astral===false){return false}
return isInAstralSet(code,astralIdentifierStartCodes)||isInAstralSet(code,astralIdentifierCodes)}
var TokenType=function TokenType(label,conf){if(conf===void 0)conf={};this.label=label;this.keyword=conf.keyword;this.beforeExpr=!!conf.beforeExpr;this.startsExpr=!!conf.startsExpr;this.isLoop=!!conf.isLoop;this.isAssign=!!conf.isAssign;this.prefix=!!conf.prefix;this.postfix=!!conf.postfix;this.binop=conf.binop||null;this.updateContext=null;};function binop(name,prec){return new TokenType(name,{beforeExpr:true,binop:prec})}
var beforeExpr={beforeExpr:true},startsExpr={startsExpr:true};var keywords$1={};function kw(name,options){if(options===void 0)options={};options.keyword=name;return keywords$1[name]=new TokenType(name,options)}
var types={num:new TokenType("num",startsExpr),regexp:new TokenType("regexp",startsExpr),string:new TokenType("string",startsExpr),name:new TokenType("name",startsExpr),eof:new TokenType("eof"),bracketL:new TokenType("[",{beforeExpr:true,startsExpr:true}),bracketR:new TokenType("]"),braceL:new TokenType("{",{beforeExpr:true,startsExpr:true}),braceR:new TokenType("}"),parenL:new TokenType("(",{beforeExpr:true,startsExpr:true}),parenR:new TokenType(")"),comma:new TokenType(",",beforeExpr),semi:new TokenType(";",beforeExpr),colon:new TokenType(":",beforeExpr),dot:new TokenType("."),question:new TokenType("?",beforeExpr),arrow:new TokenType("=>",beforeExpr),template:new TokenType("template"),invalidTemplate:new TokenType("invalidTemplate"),ellipsis:new TokenType("...",beforeExpr),backQuote:new TokenType("`",startsExpr),dollarBraceL:new TokenType("${",{beforeExpr:true,startsExpr:true}),eq:new TokenType("=",{beforeExpr:true,isAssign:true}),assign:new TokenType("_=",{beforeExpr:true,isAssign:true}),incDec:new TokenType("++/--",{prefix:true,postfix:true,startsExpr:true}),prefix:new TokenType("!/~",{beforeExpr:true,prefix:true,startsExpr:true}),logicalOR:binop("||",1),logicalAND:binop("&&",2),bitwiseOR:binop("|",3),bitwiseXOR:binop("^",4),bitwiseAND:binop("&",5),equality:binop("==/!=/===/!==",6),relational:binop("</>/<=/>=",7),bitShift:binop("<</>>/>>>",8),plusMin:new TokenType("+/-",{beforeExpr:true,binop:9,prefix:true,startsExpr:true}),modulo:binop("%",10),star:binop("*",10),slash:binop("/",10),starstar:new TokenType("**",{beforeExpr:true}),_break:kw("break"),_case:kw("case",beforeExpr),_catch:kw("catch"),_continue:kw("continue"),_debugger:kw("debugger"),_default:kw("default",beforeExpr),_do:kw("do",{isLoop:true,beforeExpr:true}),_else:kw("else",beforeExpr),_finally:kw("finally"),_for:kw("for",{isLoop:true}),_function:kw("function",startsExpr),_if:kw("if"),_return:kw("return",beforeExpr),_switch:kw("switch"),_throw:kw("throw",beforeExpr),_try:kw("try"),_var:kw("var"),_const:kw("const"),_while:kw("while",{isLoop:true}),_with:kw("with"),_new:kw("new",{beforeExpr:true,startsExpr:true}),_this:kw("this",startsExpr),_super:kw("super",startsExpr),_class:kw("class",startsExpr),_extends:kw("extends",beforeExpr),_export:kw("export"),_import:kw("import",startsExpr),_null:kw("null",startsExpr),_true:kw("true",startsExpr),_false:kw("false",startsExpr),_in:kw("in",{beforeExpr:true,binop:7}),_instanceof:kw("instanceof",{beforeExpr:true,binop:7}),_typeof:kw("typeof",{beforeExpr:true,prefix:true,startsExpr:true}),_void:kw("void",{beforeExpr:true,prefix:true,startsExpr:true}),_delete:kw("delete",{beforeExpr:true,prefix:true,startsExpr:true})};var lineBreak=/\r\n?|\n|\u2028|\u2029/;var lineBreakG=new RegExp(lineBreak.source,"g");function isNewLine(code,ecma2019String){return code===10||code===13||(!ecma2019String&&(code===0x2028||code===0x2029))}
var nonASCIIwhitespace=/[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;var skipWhiteSpace=/(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;var ref=Object.prototype;var hasOwnProperty=ref.hasOwnProperty;var toString=ref.toString;function has(obj,propName){return hasOwnProperty.call(obj,propName)}
var isArray=Array.isArray||(function(obj){return(toString.call(obj)==="[object Array]");});function wordsRegexp(words){return new RegExp("^(?:"+words.replace(/ /g,"|")+")$")}
var Position=function Position(line,col){this.line=line;this.column=col;};Position.prototype.offset=function offset(n){return new Position(this.line,this.column+n)};var SourceLocation=function SourceLocation(p,start,end){this.start=start;this.end=end;if(p.sourceFile!==null){this.source=p.sourceFile;}};function getLineInfo(input,offset){for(var line=1,cur=0;;){lineBreakG.lastIndex=cur;var match=lineBreakG.exec(input);if(match&&match.index<offset){++line;cur=match.index+match[0].length;}else{return new Position(line,offset-cur)}}}
var defaultOptions={ecmaVersion:10,sourceType:"script",onInsertedSemicolon:null,onTrailingComma:null,allowReserved:null,allowReturnOutsideFunction:false,allowImportExportEverywhere:false,allowAwaitOutsideFunction:false,allowHashBang:false,locations:false,onToken:null,onComment:null,ranges:false,program:null,sourceFile:null,directSourceFile:null,preserveParens:false};function getOptions(opts){var options={};for(var opt in defaultOptions)
{options[opt]=opts&&has(opts,opt)?opts[opt]:defaultOptions[opt];}
if(options.ecmaVersion>=2015)
{options.ecmaVersion-=2009;}
if(options.allowReserved==null)
{options.allowReserved=options.ecmaVersion<5;}
if(isArray(options.onToken)){var tokens=options.onToken;options.onToken=function(token){return tokens.push(token);};}
if(isArray(options.onComment))
{options.onComment=pushComment(options,options.onComment);}
return options}
function pushComment(options,array){return function(block,text,start,end,startLoc,endLoc){var comment={type:block?"Block":"Line",value:text,start:start,end:end};if(options.locations)
{comment.loc=new SourceLocation(this,startLoc,endLoc);}
if(options.ranges)
{comment.range=[start,end];}
array.push(comment);}}
var
SCOPE_TOP=1,SCOPE_FUNCTION=2,SCOPE_VAR=SCOPE_TOP|SCOPE_FUNCTION,SCOPE_ASYNC=4,SCOPE_GENERATOR=8,SCOPE_ARROW=16,SCOPE_SIMPLE_CATCH=32,SCOPE_SUPER=64,SCOPE_DIRECT_SUPER=128;function functionFlags(async,generator){return SCOPE_FUNCTION|(async?SCOPE_ASYNC:0)|(generator?SCOPE_GENERATOR:0)}
var
BIND_NONE=0,BIND_VAR=1,BIND_LEXICAL=2,BIND_FUNCTION=3,BIND_SIMPLE_CATCH=4,BIND_OUTSIDE=5;var Parser=function Parser(options,input,startPos){this.options=options=getOptions(options);this.sourceFile=options.sourceFile;this.keywords=wordsRegexp(keywords[options.ecmaVersion>=6?6:options.sourceType==="module"?"5module":5]);var reserved="";if(options.allowReserved!==true){for(var v=options.ecmaVersion;;v--)
{if(reserved=reservedWords[v]){break}}
if(options.sourceType==="module"){reserved+=" await";}}
this.reservedWords=wordsRegexp(reserved);var reservedStrict=(reserved?reserved+" ":"")+reservedWords.strict;this.reservedWordsStrict=wordsRegexp(reservedStrict);this.reservedWordsStrictBind=wordsRegexp(reservedStrict+" "+reservedWords.strictBind);this.input=String(input);this.containsEsc=false;if(startPos){this.pos=startPos;this.lineStart=this.input.lastIndexOf("\n",startPos-1)+1;this.curLine=this.input.slice(0,this.lineStart).split(lineBreak).length;}else{this.pos=this.lineStart=0;this.curLine=1;}
this.type=types.eof;this.value=null;this.start=this.end=this.pos;this.startLoc=this.endLoc=this.curPosition();this.lastTokEndLoc=this.lastTokStartLoc=null;this.lastTokStart=this.lastTokEnd=this.pos;this.context=this.initialContext();this.exprAllowed=true;this.inModule=options.sourceType==="module";this.strict=this.inModule||this.strictDirective(this.pos);this.potentialArrowAt=-1;this.yieldPos=this.awaitPos=this.awaitIdentPos=0;this.labels=[];this.undefinedExports={};if(this.pos===0&&options.allowHashBang&&this.input.slice(0,2)==="#!")
{this.skipLineComment(2);}
this.scopeStack=[];this.enterScope(SCOPE_TOP);this.regexpState=null;};var prototypeAccessors={inFunction:{configurable:true},inGenerator:{configurable:true},inAsync:{configurable:true},allowSuper:{configurable:true},allowDirectSuper:{configurable:true},treatFunctionsAsVar:{configurable:true}};Parser.prototype.parse=function parse(){var node=this.options.program||this.startNode();this.nextToken();return this.parseTopLevel(node)};prototypeAccessors.inFunction.get=function(){return(this.currentVarScope().flags&SCOPE_FUNCTION)>0};prototypeAccessors.inGenerator.get=function(){return(this.currentVarScope().flags&SCOPE_GENERATOR)>0};prototypeAccessors.inAsync.get=function(){return(this.currentVarScope().flags&SCOPE_ASYNC)>0};prototypeAccessors.allowSuper.get=function(){return(this.currentThisScope().flags&SCOPE_SUPER)>0};prototypeAccessors.allowDirectSuper.get=function(){return(this.currentThisScope().flags&SCOPE_DIRECT_SUPER)>0};prototypeAccessors.treatFunctionsAsVar.get=function(){return this.treatFunctionsAsVarInScope(this.currentScope())};Parser.prototype.inNonArrowFunction=function inNonArrowFunction(){return(this.currentThisScope().flags&SCOPE_FUNCTION)>0};Parser.extend=function extend(){var plugins=[],len=arguments.length;while(len--)plugins[len]=arguments[len];var cls=this;for(var i=0;i<plugins.length;i++){cls=plugins[i](cls);}
return cls};Parser.parse=function parse(input,options){return new this(options,input).parse()};Parser.parseExpressionAt=function parseExpressionAt(input,pos,options){var parser=new this(options,input,pos);parser.nextToken();return parser.parseExpression()};Parser.tokenizer=function tokenizer(input,options){return new this(options,input)};Object.defineProperties(Parser.prototype,prototypeAccessors);var pp=Parser.prototype;var literal=/^(?:'((?:\\.|[^'])*?)'|"((?:\\.|[^"])*?)")/;pp.strictDirective=function(start){for(;;){skipWhiteSpace.lastIndex=start;start+=skipWhiteSpace.exec(this.input)[0].length;var match=literal.exec(this.input.slice(start));if(!match){return false}
if((match[1]||match[2])==="use strict"){return true}
start+=match[0].length;skipWhiteSpace.lastIndex=start;start+=skipWhiteSpace.exec(this.input)[0].length;if(this.input[start]===";")
{start++;}}};pp.eat=function(type){if(this.type===type){this.next();return true}else{return false}};pp.isContextual=function(name){return this.type===types.name&&this.value===name&&!this.containsEsc};pp.eatContextual=function(name){if(!this.isContextual(name)){return false}
this.next();return true};pp.expectContextual=function(name){if(!this.eatContextual(name)){this.unexpected();}};pp.canInsertSemicolon=function(){return this.type===types.eof||this.type===types.braceR||lineBreak.test(this.input.slice(this.lastTokEnd,this.start))};pp.insertSemicolon=function(){if(this.canInsertSemicolon()){if(this.options.onInsertedSemicolon)
{this.options.onInsertedSemicolon(this.lastTokEnd,this.lastTokEndLoc);}
return true}};pp.semicolon=function(){if(!this.eat(types.semi)&&!this.insertSemicolon()){this.unexpected();}};pp.afterTrailingComma=function(tokType,notNext){if(this.type===tokType){if(this.options.onTrailingComma)
{this.options.onTrailingComma(this.lastTokStart,this.lastTokStartLoc);}
if(!notNext)
{this.next();}
return true}};pp.expect=function(type){this.eat(type)||this.unexpected();};pp.unexpected=function(pos){this.raise(pos!=null?pos:this.start,"Unexpected token");};function DestructuringErrors(){this.shorthandAssign=this.trailingComma=this.parenthesizedAssign=this.parenthesizedBind=this.doubleProto=-1;}
pp.checkPatternErrors=function(refDestructuringErrors,isAssign){if(!refDestructuringErrors){return}
if(refDestructuringErrors.trailingComma>-1)
{this.raiseRecoverable(refDestructuringErrors.trailingComma,"Comma is not permitted after the rest element");}
var parens=isAssign?refDestructuringErrors.parenthesizedAssign:refDestructuringErrors.parenthesizedBind;if(parens>-1){this.raiseRecoverable(parens,"Parenthesized pattern");}};pp.checkExpressionErrors=function(refDestructuringErrors,andThrow){if(!refDestructuringErrors){return false}
var shorthandAssign=refDestructuringErrors.shorthandAssign;var doubleProto=refDestructuringErrors.doubleProto;if(!andThrow){return shorthandAssign>=0||doubleProto>=0}
if(shorthandAssign>=0)
{this.raise(shorthandAssign,"Shorthand property assignments are valid only in destructuring patterns");}
if(doubleProto>=0)
{this.raiseRecoverable(doubleProto,"Redefinition of __proto__ property");}};pp.checkYieldAwaitInDefaultParams=function(){if(this.yieldPos&&(!this.awaitPos||this.yieldPos<this.awaitPos))
{this.raise(this.yieldPos,"Yield expression cannot be a default value");}
if(this.awaitPos)
{this.raise(this.awaitPos,"Await expression cannot be a default value");}};pp.isSimpleAssignTarget=function(expr){if(expr.type==="ParenthesizedExpression")
{return this.isSimpleAssignTarget(expr.expression)}
return expr.type==="Identifier"||expr.type==="MemberExpression"};var pp$1=Parser.prototype;pp$1.parseTopLevel=function(node){var exports={};if(!node.body){node.body=[];}
while(this.type!==types.eof){var stmt=this.parseStatement(null,true,exports);node.body.push(stmt);}
if(this.inModule)
{for(var i=0,list=Object.keys(this.undefinedExports);i<list.length;i+=1)
{var name=list[i];this.raiseRecoverable(this.undefinedExports[name].start,("Export '"+name+"' is not defined"));}}
this.adaptDirectivePrologue(node.body);this.next();node.sourceType=this.options.sourceType;return this.finishNode(node,"Program")};var loopLabel={kind:"loop"},switchLabel={kind:"switch"};pp$1.isLet=function(context){if(this.options.ecmaVersion<6||!this.isContextual("let")){return false}
skipWhiteSpace.lastIndex=this.pos;var skip=skipWhiteSpace.exec(this.input);var next=this.pos+skip[0].length,nextCh=this.input.charCodeAt(next);if(nextCh===91){return true}
if(context){return false}
if(nextCh===123){return true}
if(isIdentifierStart(nextCh,true)){var pos=next+1;while(isIdentifierChar(this.input.charCodeAt(pos),true)){++pos;}
var ident=this.input.slice(next,pos);if(!keywordRelationalOperator.test(ident)){return true}}
return false};pp$1.isAsyncFunction=function(){if(this.options.ecmaVersion<8||!this.isContextual("async"))
{return false}
skipWhiteSpace.lastIndex=this.pos;var skip=skipWhiteSpace.exec(this.input);var next=this.pos+skip[0].length;return!lineBreak.test(this.input.slice(this.pos,next))&&this.input.slice(next,next+8)==="function"&&(next+8===this.input.length||!isIdentifierChar(this.input.charAt(next+8)))};pp$1.parseStatement=function(context,topLevel,exports){var starttype=this.type,node=this.startNode(),kind;if(this.isLet(context)){starttype=types._var;kind="let";}
switch(starttype){case types._break:case types._continue:return this.parseBreakContinueStatement(node,starttype.keyword)
case types._debugger:return this.parseDebuggerStatement(node)
case types._do:return this.parseDoStatement(node)
case types._for:return this.parseForStatement(node)
case types._function:if((context&&(this.strict||context!=="if"&&context!=="label"))&&this.options.ecmaVersion>=6){this.unexpected();}
return this.parseFunctionStatement(node,false,!context)
case types._class:if(context){this.unexpected();}
return this.parseClass(node,true)
case types._if:return this.parseIfStatement(node)
case types._return:return this.parseReturnStatement(node)
case types._switch:return this.parseSwitchStatement(node)
case types._throw:return this.parseThrowStatement(node)
case types._try:return this.parseTryStatement(node)
case types._const:case types._var:kind=kind||this.value;if(context&&kind!=="var"){this.unexpected();}
return this.parseVarStatement(node,kind)
case types._while:return this.parseWhileStatement(node)
case types._with:return this.parseWithStatement(node)
case types.braceL:return this.parseBlock(true,node)
case types.semi:return this.parseEmptyStatement(node)
case types._export:case types._import:if(this.options.ecmaVersion>10&&starttype===types._import){skipWhiteSpace.lastIndex=this.pos;var skip=skipWhiteSpace.exec(this.input);var next=this.pos+skip[0].length,nextCh=this.input.charCodeAt(next);if(nextCh===40)
{return this.parseExpressionStatement(node,this.parseExpression())}}
if(!this.options.allowImportExportEverywhere){if(!topLevel)
{this.raise(this.start,"'import' and 'export' may only appear at the top level");}
if(!this.inModule)
{this.raise(this.start,"'import' and 'export' may appear only with 'sourceType: module'");}}
return starttype===types._import?this.parseImport(node):this.parseExport(node,exports)
default:if(this.isAsyncFunction()){if(context){this.unexpected();}
this.next();return this.parseFunctionStatement(node,true,!context)}
var maybeName=this.value,expr=this.parseExpression();if(starttype===types.name&&expr.type==="Identifier"&&this.eat(types.colon))
{return this.parseLabeledStatement(node,maybeName,expr,context)}
else{return this.parseExpressionStatement(node,expr)}}};pp$1.parseBreakContinueStatement=function(node,keyword){var isBreak=keyword==="break";this.next();if(this.eat(types.semi)||this.insertSemicolon()){node.label=null;}
else if(this.type!==types.name){this.unexpected();}
else{node.label=this.parseIdent();this.semicolon();}
var i=0;for(;i<this.labels.length;++i){var lab=this.labels[i];if(node.label==null||lab.name===node.label.name){if(lab.kind!=null&&(isBreak||lab.kind==="loop")){break}
if(node.label&&isBreak){break}}}
if(i===this.labels.length){this.raise(node.start,"Unsyntactic "+keyword);}
return this.finishNode(node,isBreak?"BreakStatement":"ContinueStatement")};pp$1.parseDebuggerStatement=function(node){this.next();this.semicolon();return this.finishNode(node,"DebuggerStatement")};pp$1.parseDoStatement=function(node){this.next();this.labels.push(loopLabel);node.body=this.parseStatement("do");this.labels.pop();this.expect(types._while);node.test=this.parseParenExpression();if(this.options.ecmaVersion>=6)
{this.eat(types.semi);}
else
{this.semicolon();}
return this.finishNode(node,"DoWhileStatement")};pp$1.parseForStatement=function(node){this.next();var awaitAt=(this.options.ecmaVersion>=9&&(this.inAsync||(!this.inFunction&&this.options.allowAwaitOutsideFunction))&&this.eatContextual("await"))?this.lastTokStart:-1;this.labels.push(loopLabel);this.enterScope(0);this.expect(types.parenL);if(this.type===types.semi){if(awaitAt>-1){this.unexpected(awaitAt);}
return this.parseFor(node,null)}
var isLet=this.isLet();if(this.type===types._var||this.type===types._const||isLet){var init$1=this.startNode(),kind=isLet?"let":this.value;this.next();this.parseVar(init$1,true,kind);this.finishNode(init$1,"VariableDeclaration");if((this.type===types._in||(this.options.ecmaVersion>=6&&this.isContextual("of")))&&init$1.declarations.length===1){if(this.options.ecmaVersion>=9){if(this.type===types._in){if(awaitAt>-1){this.unexpected(awaitAt);}}else{node.await=awaitAt>-1;}}
return this.parseForIn(node,init$1)}
if(awaitAt>-1){this.unexpected(awaitAt);}
return this.parseFor(node,init$1)}
var refDestructuringErrors=new DestructuringErrors;var init=this.parseExpression(true,refDestructuringErrors);if(this.type===types._in||(this.options.ecmaVersion>=6&&this.isContextual("of"))){if(this.options.ecmaVersion>=9){if(this.type===types._in){if(awaitAt>-1){this.unexpected(awaitAt);}}else{node.await=awaitAt>-1;}}
this.toAssignable(init,false,refDestructuringErrors);this.checkLVal(init);return this.parseForIn(node,init)}else{this.checkExpressionErrors(refDestructuringErrors,true);}
if(awaitAt>-1){this.unexpected(awaitAt);}
return this.parseFor(node,init)};pp$1.parseFunctionStatement=function(node,isAsync,declarationPosition){this.next();return this.parseFunction(node,FUNC_STATEMENT|(declarationPosition?0:FUNC_HANGING_STATEMENT),false,isAsync)};pp$1.parseIfStatement=function(node){this.next();node.test=this.parseParenExpression();node.consequent=this.parseStatement("if");node.alternate=this.eat(types._else)?this.parseStatement("if"):null;return this.finishNode(node,"IfStatement")};pp$1.parseReturnStatement=function(node){if(!this.inFunction&&!this.options.allowReturnOutsideFunction)
{this.raise(this.start,"'return' outside of function");}
this.next();if(this.eat(types.semi)||this.insertSemicolon()){node.argument=null;}
else{node.argument=this.parseExpression();this.semicolon();}
return this.finishNode(node,"ReturnStatement")};pp$1.parseSwitchStatement=function(node){this.next();node.discriminant=this.parseParenExpression();node.cases=[];this.expect(types.braceL);this.labels.push(switchLabel);this.enterScope(0);var cur;for(var sawDefault=false;this.type!==types.braceR;){if(this.type===types._case||this.type===types._default){var isCase=this.type===types._case;if(cur){this.finishNode(cur,"SwitchCase");}
node.cases.push(cur=this.startNode());cur.consequent=[];this.next();if(isCase){cur.test=this.parseExpression();}else{if(sawDefault){this.raiseRecoverable(this.lastTokStart,"Multiple default clauses");}
sawDefault=true;cur.test=null;}
this.expect(types.colon);}else{if(!cur){this.unexpected();}
cur.consequent.push(this.parseStatement(null));}}
this.exitScope();if(cur){this.finishNode(cur,"SwitchCase");}
this.next();this.labels.pop();return this.finishNode(node,"SwitchStatement")};pp$1.parseThrowStatement=function(node){this.next();if(lineBreak.test(this.input.slice(this.lastTokEnd,this.start)))
{this.raise(this.lastTokEnd,"Illegal newline after throw");}
node.argument=this.parseExpression();this.semicolon();return this.finishNode(node,"ThrowStatement")};var empty=[];pp$1.parseTryStatement=function(node){this.next();node.block=this.parseBlock();node.handler=null;if(this.type===types._catch){var clause=this.startNode();this.next();if(this.eat(types.parenL)){clause.param=this.parseBindingAtom();var simple=clause.param.type==="Identifier";this.enterScope(simple?SCOPE_SIMPLE_CATCH:0);this.checkLVal(clause.param,simple?BIND_SIMPLE_CATCH:BIND_LEXICAL);this.expect(types.parenR);}else{if(this.options.ecmaVersion<10){this.unexpected();}
clause.param=null;this.enterScope(0);}
clause.body=this.parseBlock(false);this.exitScope();node.handler=this.finishNode(clause,"CatchClause");}
node.finalizer=this.eat(types._finally)?this.parseBlock():null;if(!node.handler&&!node.finalizer)
{this.raise(node.start,"Missing catch or finally clause");}
return this.finishNode(node,"TryStatement")};pp$1.parseVarStatement=function(node,kind){this.next();this.parseVar(node,false,kind);this.semicolon();return this.finishNode(node,"VariableDeclaration")};pp$1.parseWhileStatement=function(node){this.next();node.test=this.parseParenExpression();this.labels.push(loopLabel);node.body=this.parseStatement("while");this.labels.pop();return this.finishNode(node,"WhileStatement")};pp$1.parseWithStatement=function(node){if(this.strict){this.raise(this.start,"'with' in strict mode");}
this.next();node.object=this.parseParenExpression();node.body=this.parseStatement("with");return this.finishNode(node,"WithStatement")};pp$1.parseEmptyStatement=function(node){this.next();return this.finishNode(node,"EmptyStatement")};pp$1.parseLabeledStatement=function(node,maybeName,expr,context){for(var i$1=0,list=this.labels;i$1<list.length;i$1+=1)
{var label=list[i$1];if(label.name===maybeName)
{this.raise(expr.start,"Label '"+maybeName+"' is already declared");}}
var kind=this.type.isLoop?"loop":this.type===types._switch?"switch":null;for(var i=this.labels.length-1;i>=0;i--){var label$1=this.labels[i];if(label$1.statementStart===node.start){label$1.statementStart=this.start;label$1.kind=kind;}else{break}}
this.labels.push({name:maybeName,kind:kind,statementStart:this.start});node.body=this.parseStatement(context?context.indexOf("label")===-1?context+"label":context:"label");this.labels.pop();node.label=expr;return this.finishNode(node,"LabeledStatement")};pp$1.parseExpressionStatement=function(node,expr){node.expression=expr;this.semicolon();return this.finishNode(node,"ExpressionStatement")};pp$1.parseBlock=function(createNewLexicalScope,node){if(createNewLexicalScope===void 0)createNewLexicalScope=true;if(node===void 0)node=this.startNode();node.body=[];this.expect(types.braceL);if(createNewLexicalScope){this.enterScope(0);}
while(!this.eat(types.braceR)){var stmt=this.parseStatement(null);node.body.push(stmt);}
if(createNewLexicalScope){this.exitScope();}
return this.finishNode(node,"BlockStatement")};pp$1.parseFor=function(node,init){node.init=init;this.expect(types.semi);node.test=this.type===types.semi?null:this.parseExpression();this.expect(types.semi);node.update=this.type===types.parenR?null:this.parseExpression();this.expect(types.parenR);node.body=this.parseStatement("for");this.exitScope();this.labels.pop();return this.finishNode(node,"ForStatement")};pp$1.parseForIn=function(node,init){var isForIn=this.type===types._in;this.next();if(init.type==="VariableDeclaration"&&init.declarations[0].init!=null&&(!isForIn||this.options.ecmaVersion<8||this.strict||init.kind!=="var"||init.declarations[0].id.type!=="Identifier")){this.raise(init.start,((isForIn?"for-in":"for-of")+" loop variable declaration may not have an initializer"));}else if(init.type==="AssignmentPattern"){this.raise(init.start,"Invalid left-hand side in for-loop");}
node.left=init;node.right=isForIn?this.parseExpression():this.parseMaybeAssign();this.expect(types.parenR);node.body=this.parseStatement("for");this.exitScope();this.labels.pop();return this.finishNode(node,isForIn?"ForInStatement":"ForOfStatement")};pp$1.parseVar=function(node,isFor,kind){node.declarations=[];node.kind=kind;for(;;){var decl=this.startNode();this.parseVarId(decl,kind);if(this.eat(types.eq)){decl.init=this.parseMaybeAssign(isFor);}else if(kind==="const"&&!(this.type===types._in||(this.options.ecmaVersion>=6&&this.isContextual("of")))){this.unexpected();}else if(decl.id.type!=="Identifier"&&!(isFor&&(this.type===types._in||this.isContextual("of")))){this.raise(this.lastTokEnd,"Complex binding patterns require an initialization value");}else{decl.init=null;}
node.declarations.push(this.finishNode(decl,"VariableDeclarator"));if(!this.eat(types.comma)){break}}
return node};pp$1.parseVarId=function(decl,kind){decl.id=this.parseBindingAtom();this.checkLVal(decl.id,kind==="var"?BIND_VAR:BIND_LEXICAL,false);};var FUNC_STATEMENT=1,FUNC_HANGING_STATEMENT=2,FUNC_NULLABLE_ID=4;pp$1.parseFunction=function(node,statement,allowExpressionBody,isAsync){this.initFunction(node);if(this.options.ecmaVersion>=9||this.options.ecmaVersion>=6&&!isAsync){if(this.type===types.star&&(statement&FUNC_HANGING_STATEMENT))
{this.unexpected();}
node.generator=this.eat(types.star);}
if(this.options.ecmaVersion>=8)
{node.async=!!isAsync;}
if(statement&FUNC_STATEMENT){node.id=(statement&FUNC_NULLABLE_ID)&&this.type!==types.name?null:this.parseIdent();if(node.id&&!(statement&FUNC_HANGING_STATEMENT))
{this.checkLVal(node.id,(this.strict||node.generator||node.async)?this.treatFunctionsAsVar?BIND_VAR:BIND_LEXICAL:BIND_FUNCTION);}}
var oldYieldPos=this.yieldPos,oldAwaitPos=this.awaitPos,oldAwaitIdentPos=this.awaitIdentPos;this.yieldPos=0;this.awaitPos=0;this.awaitIdentPos=0;this.enterScope(functionFlags(node.async,node.generator));if(!(statement&FUNC_STATEMENT))
{node.id=this.type===types.name?this.parseIdent():null;}
this.parseFunctionParams(node);this.parseFunctionBody(node,allowExpressionBody,false);this.yieldPos=oldYieldPos;this.awaitPos=oldAwaitPos;this.awaitIdentPos=oldAwaitIdentPos;return this.finishNode(node,(statement&FUNC_STATEMENT)?"FunctionDeclaration":"FunctionExpression")};pp$1.parseFunctionParams=function(node){this.expect(types.parenL);node.params=this.parseBindingList(types.parenR,false,this.options.ecmaVersion>=8);this.checkYieldAwaitInDefaultParams();};pp$1.parseClass=function(node,isStatement){this.next();var oldStrict=this.strict;this.strict=true;this.parseClassId(node,isStatement);this.parseClassSuper(node);var classBody=this.startNode();var hadConstructor=false;classBody.body=[];this.expect(types.braceL);while(!this.eat(types.braceR)){var element=this.parseClassElement(node.superClass!==null);if(element){classBody.body.push(element);if(element.type==="MethodDefinition"&&element.kind==="constructor"){if(hadConstructor){this.raise(element.start,"Duplicate constructor in the same class");}
hadConstructor=true;}}}
node.body=this.finishNode(classBody,"ClassBody");this.strict=oldStrict;return this.finishNode(node,isStatement?"ClassDeclaration":"ClassExpression")};pp$1.parseClassElement=function(constructorAllowsSuper){var this$1=this;if(this.eat(types.semi)){return null}
var method=this.startNode();var tryContextual=function(k,noLineBreak){if(noLineBreak===void 0)noLineBreak=false;var start=this$1.start,startLoc=this$1.startLoc;if(!this$1.eatContextual(k)){return false}
if(this$1.type!==types.parenL&&(!noLineBreak||!this$1.canInsertSemicolon())){return true}
if(method.key){this$1.unexpected();}
method.computed=false;method.key=this$1.startNodeAt(start,startLoc);method.key.name=k;this$1.finishNode(method.key,"Identifier");return false};method.kind="method";method.static=tryContextual("static");var isGenerator=this.eat(types.star);var isAsync=false;if(!isGenerator){if(this.options.ecmaVersion>=8&&tryContextual("async",true)){isAsync=true;isGenerator=this.options.ecmaVersion>=9&&this.eat(types.star);}else if(tryContextual("get")){method.kind="get";}else if(tryContextual("set")){method.kind="set";}}
if(!method.key){this.parsePropertyName(method);}
var key=method.key;var allowsDirectSuper=false;if(!method.computed&&!method.static&&(key.type==="Identifier"&&key.name==="constructor"||key.type==="Literal"&&key.value==="constructor")){if(method.kind!=="method"){this.raise(key.start,"Constructor can't have get/set modifier");}
if(isGenerator){this.raise(key.start,"Constructor can't be a generator");}
if(isAsync){this.raise(key.start,"Constructor can't be an async method");}
method.kind="constructor";allowsDirectSuper=constructorAllowsSuper;}else if(method.static&&key.type==="Identifier"&&key.name==="prototype"){this.raise(key.start,"Classes may not have a static property named prototype");}
this.parseClassMethod(method,isGenerator,isAsync,allowsDirectSuper);if(method.kind==="get"&&method.value.params.length!==0)
{this.raiseRecoverable(method.value.start,"getter should have no params");}
if(method.kind==="set"&&method.value.params.length!==1)
{this.raiseRecoverable(method.value.start,"setter should have exactly one param");}
if(method.kind==="set"&&method.value.params[0].type==="RestElement")
{this.raiseRecoverable(method.value.params[0].start,"Setter cannot use rest params");}
return method};pp$1.parseClassMethod=function(method,isGenerator,isAsync,allowsDirectSuper){method.value=this.parseMethod(isGenerator,isAsync,allowsDirectSuper);return this.finishNode(method,"MethodDefinition")};pp$1.parseClassId=function(node,isStatement){if(this.type===types.name){node.id=this.parseIdent();if(isStatement)
{this.checkLVal(node.id,BIND_LEXICAL,false);}}else{if(isStatement===true)
{this.unexpected();}
node.id=null;}};pp$1.parseClassSuper=function(node){node.superClass=this.eat(types._extends)?this.parseExprSubscripts():null;};pp$1.parseExport=function(node,exports){this.next();if(this.eat(types.star)){this.expectContextual("from");if(this.type!==types.string){this.unexpected();}
node.source=this.parseExprAtom();this.semicolon();return this.finishNode(node,"ExportAllDeclaration")}
if(this.eat(types._default)){this.checkExport(exports,"default",this.lastTokStart);var isAsync;if(this.type===types._function||(isAsync=this.isAsyncFunction())){var fNode=this.startNode();this.next();if(isAsync){this.next();}
node.declaration=this.parseFunction(fNode,FUNC_STATEMENT|FUNC_NULLABLE_ID,false,isAsync);}else if(this.type===types._class){var cNode=this.startNode();node.declaration=this.parseClass(cNode,"nullableID");}else{node.declaration=this.parseMaybeAssign();this.semicolon();}
return this.finishNode(node,"ExportDefaultDeclaration")}
if(this.shouldParseExportStatement()){node.declaration=this.parseStatement(null);if(node.declaration.type==="VariableDeclaration")
{this.checkVariableExport(exports,node.declaration.declarations);}
else
{this.checkExport(exports,node.declaration.id.name,node.declaration.id.start);}
node.specifiers=[];node.source=null;}else{node.declaration=null;node.specifiers=this.parseExportSpecifiers(exports);if(this.eatContextual("from")){if(this.type!==types.string){this.unexpected();}
node.source=this.parseExprAtom();}else{for(var i=0,list=node.specifiers;i<list.length;i+=1){var spec=list[i];this.checkUnreserved(spec.local);this.checkLocalExport(spec.local);}
node.source=null;}
this.semicolon();}
return this.finishNode(node,"ExportNamedDeclaration")};pp$1.checkExport=function(exports,name,pos){if(!exports){return}
if(has(exports,name))
{this.raiseRecoverable(pos,"Duplicate export '"+name+"'");}
exports[name]=true;};pp$1.checkPatternExport=function(exports,pat){var type=pat.type;if(type==="Identifier")
{this.checkExport(exports,pat.name,pat.start);}
else if(type==="ObjectPattern")
{for(var i=0,list=pat.properties;i<list.length;i+=1)
{var prop=list[i];this.checkPatternExport(exports,prop);}}
else if(type==="ArrayPattern")
{for(var i$1=0,list$1=pat.elements;i$1<list$1.length;i$1+=1){var elt=list$1[i$1];if(elt){this.checkPatternExport(exports,elt);}}}
else if(type==="Property")
{this.checkPatternExport(exports,pat.value);}
else if(type==="AssignmentPattern")
{this.checkPatternExport(exports,pat.left);}
else if(type==="RestElement")
{this.checkPatternExport(exports,pat.argument);}
else if(type==="ParenthesizedExpression")
{this.checkPatternExport(exports,pat.expression);}};pp$1.checkVariableExport=function(exports,decls){if(!exports){return}
for(var i=0,list=decls;i<list.length;i+=1)
{var decl=list[i];this.checkPatternExport(exports,decl.id);}};pp$1.shouldParseExportStatement=function(){return this.type.keyword==="var"||this.type.keyword==="const"||this.type.keyword==="class"||this.type.keyword==="function"||this.isLet()||this.isAsyncFunction()};pp$1.parseExportSpecifiers=function(exports){var nodes=[],first=true;this.expect(types.braceL);while(!this.eat(types.braceR)){if(!first){this.expect(types.comma);if(this.afterTrailingComma(types.braceR)){break}}else{first=false;}
var node=this.startNode();node.local=this.parseIdent(true);node.exported=this.eatContextual("as")?this.parseIdent(true):node.local;this.checkExport(exports,node.exported.name,node.exported.start);nodes.push(this.finishNode(node,"ExportSpecifier"));}
return nodes};pp$1.parseImport=function(node){this.next();if(this.type===types.string){node.specifiers=empty;node.source=this.parseExprAtom();}else{node.specifiers=this.parseImportSpecifiers();this.expectContextual("from");node.source=this.type===types.string?this.parseExprAtom():this.unexpected();}
this.semicolon();return this.finishNode(node,"ImportDeclaration")};pp$1.parseImportSpecifiers=function(){var nodes=[],first=true;if(this.type===types.name){var node=this.startNode();node.local=this.parseIdent();this.checkLVal(node.local,BIND_LEXICAL);nodes.push(this.finishNode(node,"ImportDefaultSpecifier"));if(!this.eat(types.comma)){return nodes}}
if(this.type===types.star){var node$1=this.startNode();this.next();this.expectContextual("as");node$1.local=this.parseIdent();this.checkLVal(node$1.local,BIND_LEXICAL);nodes.push(this.finishNode(node$1,"ImportNamespaceSpecifier"));return nodes}
this.expect(types.braceL);while(!this.eat(types.braceR)){if(!first){this.expect(types.comma);if(this.afterTrailingComma(types.braceR)){break}}else{first=false;}
var node$2=this.startNode();node$2.imported=this.parseIdent(true);if(this.eatContextual("as")){node$2.local=this.parseIdent();}else{this.checkUnreserved(node$2.imported);node$2.local=node$2.imported;}
this.checkLVal(node$2.local,BIND_LEXICAL);nodes.push(this.finishNode(node$2,"ImportSpecifier"));}
return nodes};pp$1.adaptDirectivePrologue=function(statements){for(var i=0;i<statements.length&&this.isDirectiveCandidate(statements[i]);++i){statements[i].directive=statements[i].expression.raw.slice(1,-1);}};pp$1.isDirectiveCandidate=function(statement){return(statement.type==="ExpressionStatement"&&statement.expression.type==="Literal"&&typeof statement.expression.value==="string"&&(this.input[statement.start]==="\""||this.input[statement.start]==="'"))};var pp$2=Parser.prototype;pp$2.toAssignable=function(node,isBinding,refDestructuringErrors){if(this.options.ecmaVersion>=6&&node){switch(node.type){case"Identifier":if(this.inAsync&&node.name==="await")
{this.raise(node.start,"Cannot use 'await' as identifier inside an async function");}
break
case"ObjectPattern":case"ArrayPattern":case"RestElement":break
case"ObjectExpression":node.type="ObjectPattern";if(refDestructuringErrors){this.checkPatternErrors(refDestructuringErrors,true);}
for(var i=0,list=node.properties;i<list.length;i+=1){var prop=list[i];this.toAssignable(prop,isBinding);if(prop.type==="RestElement"&&(prop.argument.type==="ArrayPattern"||prop.argument.type==="ObjectPattern")){this.raise(prop.argument.start,"Unexpected token");}}
break
case"Property":if(node.kind!=="init"){this.raise(node.key.start,"Object pattern can't contain getter or setter");}
this.toAssignable(node.value,isBinding);break
case"ArrayExpression":node.type="ArrayPattern";if(refDestructuringErrors){this.checkPatternErrors(refDestructuringErrors,true);}
this.toAssignableList(node.elements,isBinding);break
case"SpreadElement":node.type="RestElement";this.toAssignable(node.argument,isBinding);if(node.argument.type==="AssignmentPattern")
{this.raise(node.argument.start,"Rest elements cannot have a default value");}
break
case"AssignmentExpression":if(node.operator!=="="){this.raise(node.left.end,"Only '=' operator can be used for specifying default value.");}
node.type="AssignmentPattern";delete node.operator;this.toAssignable(node.left,isBinding);case"AssignmentPattern":break
case"ParenthesizedExpression":this.toAssignable(node.expression,isBinding,refDestructuringErrors);break
case"MemberExpression":if(!isBinding){break}
default:this.raise(node.start,"Assigning to rvalue");}}else if(refDestructuringErrors){this.checkPatternErrors(refDestructuringErrors,true);}
return node};pp$2.toAssignableList=function(exprList,isBinding){var end=exprList.length;for(var i=0;i<end;i++){var elt=exprList[i];if(elt){this.toAssignable(elt,isBinding);}}
if(end){var last=exprList[end-1];if(this.options.ecmaVersion===6&&isBinding&&last&&last.type==="RestElement"&&last.argument.type!=="Identifier")
{this.unexpected(last.argument.start);}}
return exprList};pp$2.parseSpread=function(refDestructuringErrors){var node=this.startNode();this.next();node.argument=this.parseMaybeAssign(false,refDestructuringErrors);return this.finishNode(node,"SpreadElement")};pp$2.parseRestBinding=function(){var node=this.startNode();this.next();if(this.options.ecmaVersion===6&&this.type!==types.name)
{this.unexpected();}
node.argument=this.parseBindingAtom();return this.finishNode(node,"RestElement")};pp$2.parseBindingAtom=function(){if(this.options.ecmaVersion>=6){switch(this.type){case types.bracketL:var node=this.startNode();this.next();node.elements=this.parseBindingList(types.bracketR,true,true);return this.finishNode(node,"ArrayPattern")
case types.braceL:return this.parseObj(true)}}
return this.parseIdent()};pp$2.parseBindingList=function(close,allowEmpty,allowTrailingComma){var elts=[],first=true;while(!this.eat(close)){if(first){first=false;}
else{this.expect(types.comma);}
if(allowEmpty&&this.type===types.comma){elts.push(null);}else if(allowTrailingComma&&this.afterTrailingComma(close)){break}else if(this.type===types.ellipsis){var rest=this.parseRestBinding();this.parseBindingListItem(rest);elts.push(rest);if(this.type===types.comma){this.raise(this.start,"Comma is not permitted after the rest element");}
this.expect(close);break}else{var elem=this.parseMaybeDefault(this.start,this.startLoc);this.parseBindingListItem(elem);elts.push(elem);}}
return elts};pp$2.parseBindingListItem=function(param){return param};pp$2.parseMaybeDefault=function(startPos,startLoc,left){left=left||this.parseBindingAtom();if(this.options.ecmaVersion<6||!this.eat(types.eq)){return left}
var node=this.startNodeAt(startPos,startLoc);node.left=left;node.right=this.parseMaybeAssign();return this.finishNode(node,"AssignmentPattern")};pp$2.checkLVal=function(expr,bindingType,checkClashes){if(bindingType===void 0)bindingType=BIND_NONE;switch(expr.type){case"Identifier":if(bindingType===BIND_LEXICAL&&expr.name==="let")
{this.raiseRecoverable(expr.start,"let is disallowed as a lexically bound name");}
if(this.strict&&this.reservedWordsStrictBind.test(expr.name))
{this.raiseRecoverable(expr.start,(bindingType?"Binding ":"Assigning to ")+expr.name+" in strict mode");}
if(checkClashes){if(has(checkClashes,expr.name))
{this.raiseRecoverable(expr.start,"Argument name clash");}
checkClashes[expr.name]=true;}
if(bindingType!==BIND_NONE&&bindingType!==BIND_OUTSIDE){this.declareName(expr.name,bindingType,expr.start);}
break
case"MemberExpression":if(bindingType){this.raiseRecoverable(expr.start,"Binding member expression");}
break
case"ObjectPattern":for(var i=0,list=expr.properties;i<list.length;i+=1)
{var prop=list[i];this.checkLVal(prop,bindingType,checkClashes);}
break
case"Property":this.checkLVal(expr.value,bindingType,checkClashes);break
case"ArrayPattern":for(var i$1=0,list$1=expr.elements;i$1<list$1.length;i$1+=1){var elem=list$1[i$1];if(elem){this.checkLVal(elem,bindingType,checkClashes);}}
break
case"AssignmentPattern":this.checkLVal(expr.left,bindingType,checkClashes);break
case"RestElement":this.checkLVal(expr.argument,bindingType,checkClashes);break
case"ParenthesizedExpression":this.checkLVal(expr.expression,bindingType,checkClashes);break
default:this.raise(expr.start,(bindingType?"Binding":"Assigning to")+" rvalue");}};var pp$3=Parser.prototype;pp$3.checkPropClash=function(prop,propHash,refDestructuringErrors){if(this.options.ecmaVersion>=9&&prop.type==="SpreadElement")
{return}
if(this.options.ecmaVersion>=6&&(prop.computed||prop.method||prop.shorthand))
{return}
var key=prop.key;var name;switch(key.type){case"Identifier":name=key.name;break
case"Literal":name=String(key.value);break
default:return}
var kind=prop.kind;if(this.options.ecmaVersion>=6){if(name==="__proto__"&&kind==="init"){if(propHash.proto){if(refDestructuringErrors&&refDestructuringErrors.doubleProto<0){refDestructuringErrors.doubleProto=key.start;}
else{this.raiseRecoverable(key.start,"Redefinition of __proto__ property");}}
propHash.proto=true;}
return}
name="$"+name;var other=propHash[name];if(other){var redefinition;if(kind==="init"){redefinition=this.strict&&other.init||other.get||other.set;}else{redefinition=other.init||other[kind];}
if(redefinition)
{this.raiseRecoverable(key.start,"Redefinition of property");}}else{other=propHash[name]={init:false,get:false,set:false};}
other[kind]=true;};pp$3.parseExpression=function(noIn,refDestructuringErrors){var startPos=this.start,startLoc=this.startLoc;var expr=this.parseMaybeAssign(noIn,refDestructuringErrors);if(this.type===types.comma){var node=this.startNodeAt(startPos,startLoc);node.expressions=[expr];while(this.eat(types.comma)){node.expressions.push(this.parseMaybeAssign(noIn,refDestructuringErrors));}
return this.finishNode(node,"SequenceExpression")}
return expr};pp$3.parseMaybeAssign=function(noIn,refDestructuringErrors,afterLeftParse){if(this.isContextual("yield")){if(this.inGenerator){return this.parseYield(noIn)}
else{this.exprAllowed=false;}}
var ownDestructuringErrors=false,oldParenAssign=-1,oldTrailingComma=-1,oldShorthandAssign=-1;if(refDestructuringErrors){oldParenAssign=refDestructuringErrors.parenthesizedAssign;oldTrailingComma=refDestructuringErrors.trailingComma;oldShorthandAssign=refDestructuringErrors.shorthandAssign;refDestructuringErrors.parenthesizedAssign=refDestructuringErrors.trailingComma=refDestructuringErrors.shorthandAssign=-1;}else{refDestructuringErrors=new DestructuringErrors;ownDestructuringErrors=true;}
var startPos=this.start,startLoc=this.startLoc;if(this.type===types.parenL||this.type===types.name)
{this.potentialArrowAt=this.start;}
var left=this.parseMaybeConditional(noIn,refDestructuringErrors);if(afterLeftParse){left=afterLeftParse.call(this,left,startPos,startLoc);}
if(this.type.isAssign){var node=this.startNodeAt(startPos,startLoc);node.operator=this.value;node.left=this.type===types.eq?this.toAssignable(left,false,refDestructuringErrors):left;if(!ownDestructuringErrors){DestructuringErrors.call(refDestructuringErrors);}
refDestructuringErrors.shorthandAssign=-1;this.checkLVal(left);this.next();node.right=this.parseMaybeAssign(noIn);return this.finishNode(node,"AssignmentExpression")}else{if(ownDestructuringErrors){this.checkExpressionErrors(refDestructuringErrors,true);}}
if(oldParenAssign>-1){refDestructuringErrors.parenthesizedAssign=oldParenAssign;}
if(oldTrailingComma>-1){refDestructuringErrors.trailingComma=oldTrailingComma;}
if(oldShorthandAssign>-1){refDestructuringErrors.shorthandAssign=oldShorthandAssign;}
return left};pp$3.parseMaybeConditional=function(noIn,refDestructuringErrors){var startPos=this.start,startLoc=this.startLoc;var expr=this.parseExprOps(noIn,refDestructuringErrors);if(this.checkExpressionErrors(refDestructuringErrors)){return expr}
if(this.eat(types.question)){var node=this.startNodeAt(startPos,startLoc);node.test=expr;node.consequent=this.parseMaybeAssign();this.expect(types.colon);node.alternate=this.parseMaybeAssign(noIn);return this.finishNode(node,"ConditionalExpression")}
return expr};pp$3.parseExprOps=function(noIn,refDestructuringErrors){var startPos=this.start,startLoc=this.startLoc;var expr=this.parseMaybeUnary(refDestructuringErrors,false);if(this.checkExpressionErrors(refDestructuringErrors)){return expr}
return expr.start===startPos&&expr.type==="ArrowFunctionExpression"?expr:this.parseExprOp(expr,startPos,startLoc,-1,noIn)};pp$3.parseExprOp=function(left,leftStartPos,leftStartLoc,minPrec,noIn){var prec=this.type.binop;if(prec!=null&&(!noIn||this.type!==types._in)){if(prec>minPrec){var logical=this.type===types.logicalOR||this.type===types.logicalAND;var op=this.value;this.next();var startPos=this.start,startLoc=this.startLoc;var right=this.parseExprOp(this.parseMaybeUnary(null,false),startPos,startLoc,prec,noIn);var node=this.buildBinary(leftStartPos,leftStartLoc,left,right,op,logical);return this.parseExprOp(node,leftStartPos,leftStartLoc,minPrec,noIn)}}
return left};pp$3.buildBinary=function(startPos,startLoc,left,right,op,logical){var node=this.startNodeAt(startPos,startLoc);node.left=left;node.operator=op;node.right=right;return this.finishNode(node,logical?"LogicalExpression":"BinaryExpression")};pp$3.parseMaybeUnary=function(refDestructuringErrors,sawUnary){var startPos=this.start,startLoc=this.startLoc,expr;if(this.isContextual("await")&&(this.inAsync||(!this.inFunction&&this.options.allowAwaitOutsideFunction))){expr=this.parseAwait();sawUnary=true;}else if(this.type.prefix){var node=this.startNode(),update=this.type===types.incDec;node.operator=this.value;node.prefix=true;this.next();node.argument=this.parseMaybeUnary(null,true);this.checkExpressionErrors(refDestructuringErrors,true);if(update){this.checkLVal(node.argument);}
else if(this.strict&&node.operator==="delete"&&node.argument.type==="Identifier")
{this.raiseRecoverable(node.start,"Deleting local variable in strict mode");}
else{sawUnary=true;}
expr=this.finishNode(node,update?"UpdateExpression":"UnaryExpression");}else{expr=this.parseExprSubscripts(refDestructuringErrors);if(this.checkExpressionErrors(refDestructuringErrors)){return expr}
while(this.type.postfix&&!this.canInsertSemicolon()){var node$1=this.startNodeAt(startPos,startLoc);node$1.operator=this.value;node$1.prefix=false;node$1.argument=expr;this.checkLVal(expr);this.next();expr=this.finishNode(node$1,"UpdateExpression");}}
if(!sawUnary&&this.eat(types.starstar))
{return this.buildBinary(startPos,startLoc,expr,this.parseMaybeUnary(null,false),"**",false)}
else
{return expr}};pp$3.parseExprSubscripts=function(refDestructuringErrors){var startPos=this.start,startLoc=this.startLoc;var expr=this.parseExprAtom(refDestructuringErrors);var skipArrowSubscripts=expr.type==="ArrowFunctionExpression"&&this.input.slice(this.lastTokStart,this.lastTokEnd)!==")";if(this.checkExpressionErrors(refDestructuringErrors)||skipArrowSubscripts){return expr}
var result=this.parseSubscripts(expr,startPos,startLoc);if(refDestructuringErrors&&result.type==="MemberExpression"){if(refDestructuringErrors.parenthesizedAssign>=result.start){refDestructuringErrors.parenthesizedAssign=-1;}
if(refDestructuringErrors.parenthesizedBind>=result.start){refDestructuringErrors.parenthesizedBind=-1;}}
return result};pp$3.parseSubscripts=function(base,startPos,startLoc,noCalls){var maybeAsyncArrow=this.options.ecmaVersion>=8&&base.type==="Identifier"&&base.name==="async"&&this.lastTokEnd===base.end&&!this.canInsertSemicolon()&&this.input.slice(base.start,base.end)==="async";while(true){var element=this.parseSubscript(base,startPos,startLoc,noCalls,maybeAsyncArrow);if(element===base||element.type==="ArrowFunctionExpression"){return element}
base=element;}};pp$3.parseSubscript=function(base,startPos,startLoc,noCalls,maybeAsyncArrow){var computed=this.eat(types.bracketL);if(computed||this.eat(types.dot)){var node=this.startNodeAt(startPos,startLoc);node.object=base;node.property=computed?this.parseExpression():this.parseIdent(this.options.allowReserved!=="never");node.computed=!!computed;if(computed){this.expect(types.bracketR);}
base=this.finishNode(node,"MemberExpression");}else if(!noCalls&&this.eat(types.parenL)){var refDestructuringErrors=new DestructuringErrors,oldYieldPos=this.yieldPos,oldAwaitPos=this.awaitPos,oldAwaitIdentPos=this.awaitIdentPos;this.yieldPos=0;this.awaitPos=0;this.awaitIdentPos=0;var exprList=this.parseExprList(types.parenR,this.options.ecmaVersion>=8,false,refDestructuringErrors);if(maybeAsyncArrow&&!this.canInsertSemicolon()&&this.eat(types.arrow)){this.checkPatternErrors(refDestructuringErrors,false);this.checkYieldAwaitInDefaultParams();if(this.awaitIdentPos>0)
{this.raise(this.awaitIdentPos,"Cannot use 'await' as identifier inside an async function");}
this.yieldPos=oldYieldPos;this.awaitPos=oldAwaitPos;this.awaitIdentPos=oldAwaitIdentPos;return this.parseArrowExpression(this.startNodeAt(startPos,startLoc),exprList,true)}
this.checkExpressionErrors(refDestructuringErrors,true);this.yieldPos=oldYieldPos||this.yieldPos;this.awaitPos=oldAwaitPos||this.awaitPos;this.awaitIdentPos=oldAwaitIdentPos||this.awaitIdentPos;var node$1=this.startNodeAt(startPos,startLoc);node$1.callee=base;node$1.arguments=exprList;base=this.finishNode(node$1,"CallExpression");}else if(this.type===types.backQuote){var node$2=this.startNodeAt(startPos,startLoc);node$2.tag=base;node$2.quasi=this.parseTemplate({isTagged:true});base=this.finishNode(node$2,"TaggedTemplateExpression");}
return base};pp$3.parseExprAtom=function(refDestructuringErrors){if(this.type===types.slash){this.readRegexp();}
var node,canBeArrow=this.potentialArrowAt===this.start;switch(this.type){case types._super:if(!this.allowSuper)
{this.raise(this.start,"'super' keyword outside a method");}
node=this.startNode();this.next();if(this.type===types.parenL&&!this.allowDirectSuper)
{this.raise(node.start,"super() call outside constructor of a subclass");}
if(this.type!==types.dot&&this.type!==types.bracketL&&this.type!==types.parenL)
{this.unexpected();}
return this.finishNode(node,"Super")
case types._this:node=this.startNode();this.next();return this.finishNode(node,"ThisExpression")
case types.name:var startPos=this.start,startLoc=this.startLoc,containsEsc=this.containsEsc;var id=this.parseIdent(false);if(this.options.ecmaVersion>=8&&!containsEsc&&id.name==="async"&&!this.canInsertSemicolon()&&this.eat(types._function))
{return this.parseFunction(this.startNodeAt(startPos,startLoc),0,false,true)}
if(canBeArrow&&!this.canInsertSemicolon()){if(this.eat(types.arrow))
{return this.parseArrowExpression(this.startNodeAt(startPos,startLoc),[id],false)}
if(this.options.ecmaVersion>=8&&id.name==="async"&&this.type===types.name&&!containsEsc){id=this.parseIdent(false);if(this.canInsertSemicolon()||!this.eat(types.arrow))
{this.unexpected();}
return this.parseArrowExpression(this.startNodeAt(startPos,startLoc),[id],true)}}
return id
case types.regexp:var value=this.value;node=this.parseLiteral(value.value);node.regex={pattern:value.pattern,flags:value.flags};return node
case types.num:case types.string:return this.parseLiteral(this.value)
case types._null:case types._true:case types._false:node=this.startNode();node.value=this.type===types._null?null:this.type===types._true;node.raw=this.type.keyword;this.next();return this.finishNode(node,"Literal")
case types.parenL:var start=this.start,expr=this.parseParenAndDistinguishExpression(canBeArrow);if(refDestructuringErrors){if(refDestructuringErrors.parenthesizedAssign<0&&!this.isSimpleAssignTarget(expr))
{refDestructuringErrors.parenthesizedAssign=start;}
if(refDestructuringErrors.parenthesizedBind<0)
{refDestructuringErrors.parenthesizedBind=start;}}
return expr
case types.bracketL:node=this.startNode();this.next();node.elements=this.parseExprList(types.bracketR,true,true,refDestructuringErrors);return this.finishNode(node,"ArrayExpression")
case types.braceL:return this.parseObj(false,refDestructuringErrors)
case types._function:node=this.startNode();this.next();return this.parseFunction(node,0)
case types._class:return this.parseClass(this.startNode(),false)
case types._new:return this.parseNew()
case types.backQuote:return this.parseTemplate()
case types._import:if(this.options.ecmaVersion>=11){return this.parseExprImport()}else{return this.unexpected()}
default:this.unexpected();}};pp$3.parseExprImport=function(){var node=this.startNode();this.next();switch(this.type){case types.parenL:return this.parseDynamicImport(node)
default:this.unexpected();}};pp$3.parseDynamicImport=function(node){this.next();node.source=this.parseMaybeAssign();if(!this.eat(types.parenR)){var errorPos=this.start;if(this.eat(types.comma)&&this.eat(types.parenR)){this.raiseRecoverable(errorPos,"Trailing comma is not allowed in import()");}else{this.unexpected(errorPos);}}
return this.finishNode(node,"ImportExpression")};pp$3.parseLiteral=function(value){var node=this.startNode();node.value=value;node.raw=this.input.slice(this.start,this.end);if(node.raw.charCodeAt(node.raw.length-1)===110){node.bigint=node.raw.slice(0,-1);}
this.next();return this.finishNode(node,"Literal")};pp$3.parseParenExpression=function(){this.expect(types.parenL);var val=this.parseExpression();this.expect(types.parenR);return val};pp$3.parseParenAndDistinguishExpression=function(canBeArrow){var startPos=this.start,startLoc=this.startLoc,val,allowTrailingComma=this.options.ecmaVersion>=8;if(this.options.ecmaVersion>=6){this.next();var innerStartPos=this.start,innerStartLoc=this.startLoc;var exprList=[],first=true,lastIsComma=false;var refDestructuringErrors=new DestructuringErrors,oldYieldPos=this.yieldPos,oldAwaitPos=this.awaitPos,spreadStart;this.yieldPos=0;this.awaitPos=0;while(this.type!==types.parenR){first?first=false:this.expect(types.comma);if(allowTrailingComma&&this.afterTrailingComma(types.parenR,true)){lastIsComma=true;break}else if(this.type===types.ellipsis){spreadStart=this.start;exprList.push(this.parseParenItem(this.parseRestBinding()));if(this.type===types.comma){this.raise(this.start,"Comma is not permitted after the rest element");}
break}else{exprList.push(this.parseMaybeAssign(false,refDestructuringErrors,this.parseParenItem));}}
var innerEndPos=this.start,innerEndLoc=this.startLoc;this.expect(types.parenR);if(canBeArrow&&!this.canInsertSemicolon()&&this.eat(types.arrow)){this.checkPatternErrors(refDestructuringErrors,false);this.checkYieldAwaitInDefaultParams();this.yieldPos=oldYieldPos;this.awaitPos=oldAwaitPos;return this.parseParenArrowList(startPos,startLoc,exprList)}
if(!exprList.length||lastIsComma){this.unexpected(this.lastTokStart);}
if(spreadStart){this.unexpected(spreadStart);}
this.checkExpressionErrors(refDestructuringErrors,true);this.yieldPos=oldYieldPos||this.yieldPos;this.awaitPos=oldAwaitPos||this.awaitPos;if(exprList.length>1){val=this.startNodeAt(innerStartPos,innerStartLoc);val.expressions=exprList;this.finishNodeAt(val,"SequenceExpression",innerEndPos,innerEndLoc);}else{val=exprList[0];}}else{val=this.parseParenExpression();}
if(this.options.preserveParens){var par=this.startNodeAt(startPos,startLoc);par.expression=val;return this.finishNode(par,"ParenthesizedExpression")}else{return val}};pp$3.parseParenItem=function(item){return item};pp$3.parseParenArrowList=function(startPos,startLoc,exprList){return this.parseArrowExpression(this.startNodeAt(startPos,startLoc),exprList)};var empty$1=[];pp$3.parseNew=function(){var node=this.startNode();var meta=this.parseIdent(true);if(this.options.ecmaVersion>=6&&this.eat(types.dot)){node.meta=meta;var containsEsc=this.containsEsc;node.property=this.parseIdent(true);if(node.property.name!=="target"||containsEsc)
{this.raiseRecoverable(node.property.start,"The only valid meta property for new is new.target");}
if(!this.inNonArrowFunction())
{this.raiseRecoverable(node.start,"new.target can only be used in functions");}
return this.finishNode(node,"MetaProperty")}
var startPos=this.start,startLoc=this.startLoc,isImport=this.type===types._import;node.callee=this.parseSubscripts(this.parseExprAtom(),startPos,startLoc,true);if(isImport&&node.callee.type==="ImportExpression"){this.raise(startPos,"Cannot use new with import()");}
if(this.eat(types.parenL)){node.arguments=this.parseExprList(types.parenR,this.options.ecmaVersion>=8,false);}
else{node.arguments=empty$1;}
return this.finishNode(node,"NewExpression")};pp$3.parseTemplateElement=function(ref){var isTagged=ref.isTagged;var elem=this.startNode();if(this.type===types.invalidTemplate){if(!isTagged){this.raiseRecoverable(this.start,"Bad escape sequence in untagged template literal");}
elem.value={raw:this.value,cooked:null};}else{elem.value={raw:this.input.slice(this.start,this.end).replace(/\r\n?/g,"\n"),cooked:this.value};}
this.next();elem.tail=this.type===types.backQuote;return this.finishNode(elem,"TemplateElement")};pp$3.parseTemplate=function(ref){if(ref===void 0)ref={};var isTagged=ref.isTagged;if(isTagged===void 0)isTagged=false;var node=this.startNode();this.next();node.expressions=[];var curElt=this.parseTemplateElement({isTagged:isTagged});node.quasis=[curElt];while(!curElt.tail){if(this.type===types.eof){this.raise(this.pos,"Unterminated template literal");}
this.expect(types.dollarBraceL);node.expressions.push(this.parseExpression());this.expect(types.braceR);node.quasis.push(curElt=this.parseTemplateElement({isTagged:isTagged}));}
this.next();return this.finishNode(node,"TemplateLiteral")};pp$3.isAsyncProp=function(prop){return!prop.computed&&prop.key.type==="Identifier"&&prop.key.name==="async"&&(this.type===types.name||this.type===types.num||this.type===types.string||this.type===types.bracketL||this.type.keyword||(this.options.ecmaVersion>=9&&this.type===types.star))&&!lineBreak.test(this.input.slice(this.lastTokEnd,this.start))};pp$3.parseObj=function(isPattern,refDestructuringErrors){var node=this.startNode(),first=true,propHash={};node.properties=[];this.next();while(!this.eat(types.braceR)){if(!first){this.expect(types.comma);if(this.options.ecmaVersion>=5&&this.afterTrailingComma(types.braceR)){break}}else{first=false;}
var prop=this.parseProperty(isPattern,refDestructuringErrors);if(!isPattern){this.checkPropClash(prop,propHash,refDestructuringErrors);}
node.properties.push(prop);}
return this.finishNode(node,isPattern?"ObjectPattern":"ObjectExpression")};pp$3.parseProperty=function(isPattern,refDestructuringErrors){var prop=this.startNode(),isGenerator,isAsync,startPos,startLoc;if(this.options.ecmaVersion>=9&&this.eat(types.ellipsis)){if(isPattern){prop.argument=this.parseIdent(false);if(this.type===types.comma){this.raise(this.start,"Comma is not permitted after the rest element");}
return this.finishNode(prop,"RestElement")}
if(this.type===types.parenL&&refDestructuringErrors){if(refDestructuringErrors.parenthesizedAssign<0){refDestructuringErrors.parenthesizedAssign=this.start;}
if(refDestructuringErrors.parenthesizedBind<0){refDestructuringErrors.parenthesizedBind=this.start;}}
prop.argument=this.parseMaybeAssign(false,refDestructuringErrors);if(this.type===types.comma&&refDestructuringErrors&&refDestructuringErrors.trailingComma<0){refDestructuringErrors.trailingComma=this.start;}
return this.finishNode(prop,"SpreadElement")}
if(this.options.ecmaVersion>=6){prop.method=false;prop.shorthand=false;if(isPattern||refDestructuringErrors){startPos=this.start;startLoc=this.startLoc;}
if(!isPattern)
{isGenerator=this.eat(types.star);}}
var containsEsc=this.containsEsc;this.parsePropertyName(prop);if(!isPattern&&!containsEsc&&this.options.ecmaVersion>=8&&!isGenerator&&this.isAsyncProp(prop)){isAsync=true;isGenerator=this.options.ecmaVersion>=9&&this.eat(types.star);this.parsePropertyName(prop,refDestructuringErrors);}else{isAsync=false;}
this.parsePropertyValue(prop,isPattern,isGenerator,isAsync,startPos,startLoc,refDestructuringErrors,containsEsc);return this.finishNode(prop,"Property")};pp$3.parsePropertyValue=function(prop,isPattern,isGenerator,isAsync,startPos,startLoc,refDestructuringErrors,containsEsc){if((isGenerator||isAsync)&&this.type===types.colon)
{this.unexpected();}
if(this.eat(types.colon)){prop.value=isPattern?this.parseMaybeDefault(this.start,this.startLoc):this.parseMaybeAssign(false,refDestructuringErrors);prop.kind="init";}else if(this.options.ecmaVersion>=6&&this.type===types.parenL){if(isPattern){this.unexpected();}
prop.kind="init";prop.method=true;prop.value=this.parseMethod(isGenerator,isAsync);}else if(!isPattern&&!containsEsc&&this.options.ecmaVersion>=5&&!prop.computed&&prop.key.type==="Identifier"&&(prop.key.name==="get"||prop.key.name==="set")&&(this.type!==types.comma&&this.type!==types.braceR)){if(isGenerator||isAsync){this.unexpected();}
prop.kind=prop.key.name;this.parsePropertyName(prop);prop.value=this.parseMethod(false);var paramCount=prop.kind==="get"?0:1;if(prop.value.params.length!==paramCount){var start=prop.value.start;if(prop.kind==="get")
{this.raiseRecoverable(start,"getter should have no params");}
else
{this.raiseRecoverable(start,"setter should have exactly one param");}}else{if(prop.kind==="set"&&prop.value.params[0].type==="RestElement")
{this.raiseRecoverable(prop.value.params[0].start,"Setter cannot use rest params");}}}else if(this.options.ecmaVersion>=6&&!prop.computed&&prop.key.type==="Identifier"){if(isGenerator||isAsync){this.unexpected();}
this.checkUnreserved(prop.key);if(prop.key.name==="await"&&!this.awaitIdentPos)
{this.awaitIdentPos=startPos;}
prop.kind="init";if(isPattern){prop.value=this.parseMaybeDefault(startPos,startLoc,prop.key);}else if(this.type===types.eq&&refDestructuringErrors){if(refDestructuringErrors.shorthandAssign<0)
{refDestructuringErrors.shorthandAssign=this.start;}
prop.value=this.parseMaybeDefault(startPos,startLoc,prop.key);}else{prop.value=prop.key;}
prop.shorthand=true;}else{this.unexpected();}};pp$3.parsePropertyName=function(prop){if(this.options.ecmaVersion>=6){if(this.eat(types.bracketL)){prop.computed=true;prop.key=this.parseMaybeAssign();this.expect(types.bracketR);return prop.key}else{prop.computed=false;}}
return prop.key=this.type===types.num||this.type===types.string?this.parseExprAtom():this.parseIdent(this.options.allowReserved!=="never")};pp$3.initFunction=function(node){node.id=null;if(this.options.ecmaVersion>=6){node.generator=node.expression=false;}
if(this.options.ecmaVersion>=8){node.async=false;}};pp$3.parseMethod=function(isGenerator,isAsync,allowDirectSuper){var node=this.startNode(),oldYieldPos=this.yieldPos,oldAwaitPos=this.awaitPos,oldAwaitIdentPos=this.awaitIdentPos;this.initFunction(node);if(this.options.ecmaVersion>=6)
{node.generator=isGenerator;}
if(this.options.ecmaVersion>=8)
{node.async=!!isAsync;}
this.yieldPos=0;this.awaitPos=0;this.awaitIdentPos=0;this.enterScope(functionFlags(isAsync,node.generator)|SCOPE_SUPER|(allowDirectSuper?SCOPE_DIRECT_SUPER:0));this.expect(types.parenL);node.params=this.parseBindingList(types.parenR,false,this.options.ecmaVersion>=8);this.checkYieldAwaitInDefaultParams();this.parseFunctionBody(node,false,true);this.yieldPos=oldYieldPos;this.awaitPos=oldAwaitPos;this.awaitIdentPos=oldAwaitIdentPos;return this.finishNode(node,"FunctionExpression")};pp$3.parseArrowExpression=function(node,params,isAsync){var oldYieldPos=this.yieldPos,oldAwaitPos=this.awaitPos,oldAwaitIdentPos=this.awaitIdentPos;this.enterScope(functionFlags(isAsync,false)|SCOPE_ARROW);this.initFunction(node);if(this.options.ecmaVersion>=8){node.async=!!isAsync;}
this.yieldPos=0;this.awaitPos=0;this.awaitIdentPos=0;node.params=this.toAssignableList(params,true);this.parseFunctionBody(node,true,false);this.yieldPos=oldYieldPos;this.awaitPos=oldAwaitPos;this.awaitIdentPos=oldAwaitIdentPos;return this.finishNode(node,"ArrowFunctionExpression")};pp$3.parseFunctionBody=function(node,isArrowFunction,isMethod){var isExpression=isArrowFunction&&this.type!==types.braceL;var oldStrict=this.strict,useStrict=false;if(isExpression){node.body=this.parseMaybeAssign();node.expression=true;this.checkParams(node,false);}else{var nonSimple=this.options.ecmaVersion>=7&&!this.isSimpleParamList(node.params);if(!oldStrict||nonSimple){useStrict=this.strictDirective(this.end);if(useStrict&&nonSimple)
{this.raiseRecoverable(node.start,"Illegal 'use strict' directive in function with non-simple parameter list");}}
var oldLabels=this.labels;this.labels=[];if(useStrict){this.strict=true;}
this.checkParams(node,!oldStrict&&!useStrict&&!isArrowFunction&&!isMethod&&this.isSimpleParamList(node.params));node.body=this.parseBlock(false);node.expression=false;this.adaptDirectivePrologue(node.body.body);this.labels=oldLabels;}
this.exitScope();if(this.strict&&node.id){this.checkLVal(node.id,BIND_OUTSIDE);}
this.strict=oldStrict;};pp$3.isSimpleParamList=function(params){for(var i=0,list=params;i<list.length;i+=1)
{var param=list[i];if(param.type!=="Identifier"){return false}}
return true};pp$3.checkParams=function(node,allowDuplicates){var nameHash={};for(var i=0,list=node.params;i<list.length;i+=1)
{var param=list[i];this.checkLVal(param,BIND_VAR,allowDuplicates?null:nameHash);}};pp$3.parseExprList=function(close,allowTrailingComma,allowEmpty,refDestructuringErrors){var elts=[],first=true;while(!this.eat(close)){if(!first){this.expect(types.comma);if(allowTrailingComma&&this.afterTrailingComma(close)){break}}else{first=false;}
var elt=(void 0);if(allowEmpty&&this.type===types.comma)
{elt=null;}
else if(this.type===types.ellipsis){elt=this.parseSpread(refDestructuringErrors);if(refDestructuringErrors&&this.type===types.comma&&refDestructuringErrors.trailingComma<0)
{refDestructuringErrors.trailingComma=this.start;}}else{elt=this.parseMaybeAssign(false,refDestructuringErrors);}
elts.push(elt);}
return elts};pp$3.checkUnreserved=function(ref){var start=ref.start;var end=ref.end;var name=ref.name;if(this.inGenerator&&name==="yield")
{this.raiseRecoverable(start,"Cannot use 'yield' as identifier inside a generator");}
if(this.inAsync&&name==="await")
{this.raiseRecoverable(start,"Cannot use 'await' as identifier inside an async function");}
if(this.keywords.test(name))
{this.raise(start,("Unexpected keyword '"+name+"'"));}
if(this.options.ecmaVersion<6&&this.input.slice(start,end).indexOf("\\")!==-1){return}
var re=this.strict?this.reservedWordsStrict:this.reservedWords;if(re.test(name)){if(!this.inAsync&&name==="await")
{this.raiseRecoverable(start,"Cannot use keyword 'await' outside an async function");}
this.raiseRecoverable(start,("The keyword '"+name+"' is reserved"));}};pp$3.parseIdent=function(liberal,isBinding){var node=this.startNode();if(this.type===types.name){node.name=this.value;}else if(this.type.keyword){node.name=this.type.keyword;if((node.name==="class"||node.name==="function")&&(this.lastTokEnd!==this.lastTokStart+1||this.input.charCodeAt(this.lastTokStart)!==46)){this.context.pop();}}else{this.unexpected();}
this.next();this.finishNode(node,"Identifier");if(!liberal){this.checkUnreserved(node);if(node.name==="await"&&!this.awaitIdentPos)
{this.awaitIdentPos=node.start;}}
return node};pp$3.parseYield=function(noIn){if(!this.yieldPos){this.yieldPos=this.start;}
var node=this.startNode();this.next();if(this.type===types.semi||this.canInsertSemicolon()||(this.type!==types.star&&!this.type.startsExpr)){node.delegate=false;node.argument=null;}else{node.delegate=this.eat(types.star);node.argument=this.parseMaybeAssign(noIn);}
return this.finishNode(node,"YieldExpression")};pp$3.parseAwait=function(){if(!this.awaitPos){this.awaitPos=this.start;}
var node=this.startNode();this.next();node.argument=this.parseMaybeUnary(null,true);return this.finishNode(node,"AwaitExpression")};var pp$4=Parser.prototype;pp$4.raise=function(pos,message){var loc=getLineInfo(this.input,pos);message+=" ("+loc.line+":"+loc.column+")";var err=new SyntaxError(message);err.pos=pos;err.loc=loc;err.raisedAt=this.pos;throw err};pp$4.raiseRecoverable=pp$4.raise;pp$4.curPosition=function(){if(this.options.locations){return new Position(this.curLine,this.pos-this.lineStart)}};var pp$5=Parser.prototype;var Scope=function Scope(flags){this.flags=flags;this.var=[];this.lexical=[];this.functions=[];};pp$5.enterScope=function(flags){this.scopeStack.push(new Scope(flags));};pp$5.exitScope=function(){this.scopeStack.pop();};pp$5.treatFunctionsAsVarInScope=function(scope){return(scope.flags&SCOPE_FUNCTION)||!this.inModule&&(scope.flags&SCOPE_TOP)};pp$5.declareName=function(name,bindingType,pos){var redeclared=false;if(bindingType===BIND_LEXICAL){var scope=this.currentScope();redeclared=scope.lexical.indexOf(name)>-1||scope.functions.indexOf(name)>-1||scope.var.indexOf(name)>-1;scope.lexical.push(name);if(this.inModule&&(scope.flags&SCOPE_TOP))
{delete this.undefinedExports[name];}}else if(bindingType===BIND_SIMPLE_CATCH){var scope$1=this.currentScope();scope$1.lexical.push(name);}else if(bindingType===BIND_FUNCTION){var scope$2=this.currentScope();if(this.treatFunctionsAsVar)
{redeclared=scope$2.lexical.indexOf(name)>-1;}
else
{redeclared=scope$2.lexical.indexOf(name)>-1||scope$2.var.indexOf(name)>-1;}
scope$2.functions.push(name);}else{for(var i=this.scopeStack.length-1;i>=0;--i){var scope$3=this.scopeStack[i];if(scope$3.lexical.indexOf(name)>-1&&!((scope$3.flags&SCOPE_SIMPLE_CATCH)&&scope$3.lexical[0]===name)||!this.treatFunctionsAsVarInScope(scope$3)&&scope$3.functions.indexOf(name)>-1){redeclared=true;break}
scope$3.var.push(name);if(this.inModule&&(scope$3.flags&SCOPE_TOP))
{delete this.undefinedExports[name];}
if(scope$3.flags&SCOPE_VAR){break}}}
if(redeclared){this.raiseRecoverable(pos,("Identifier '"+name+"' has already been declared"));}};pp$5.checkLocalExport=function(id){if(this.scopeStack[0].lexical.indexOf(id.name)===-1&&this.scopeStack[0].var.indexOf(id.name)===-1){this.undefinedExports[id.name]=id;}};pp$5.currentScope=function(){return this.scopeStack[this.scopeStack.length-1]};pp$5.currentVarScope=function(){for(var i=this.scopeStack.length-1;;i--){var scope=this.scopeStack[i];if(scope.flags&SCOPE_VAR){return scope}}};pp$5.currentThisScope=function(){for(var i=this.scopeStack.length-1;;i--){var scope=this.scopeStack[i];if(scope.flags&SCOPE_VAR&&!(scope.flags&SCOPE_ARROW)){return scope}}};var Node=function Node(parser,pos,loc){this.type="";this.start=pos;this.end=0;if(parser.options.locations)
{this.loc=new SourceLocation(parser,loc);}
if(parser.options.directSourceFile)
{this.sourceFile=parser.options.directSourceFile;}
if(parser.options.ranges)
{this.range=[pos,0];}};var pp$6=Parser.prototype;pp$6.startNode=function(){return new Node(this,this.start,this.startLoc)};pp$6.startNodeAt=function(pos,loc){return new Node(this,pos,loc)};function finishNodeAt(node,type,pos,loc){node.type=type;node.end=pos;if(this.options.locations)
{node.loc.end=loc;}
if(this.options.ranges)
{node.range[1]=pos;}
return node}
pp$6.finishNode=function(node,type){return finishNodeAt.call(this,node,type,this.lastTokEnd,this.lastTokEndLoc)};pp$6.finishNodeAt=function(node,type,pos,loc){return finishNodeAt.call(this,node,type,pos,loc)};var TokContext=function TokContext(token,isExpr,preserveSpace,override,generator){this.token=token;this.isExpr=!!isExpr;this.preserveSpace=!!preserveSpace;this.override=override;this.generator=!!generator;};var types$1={b_stat:new TokContext("{",false),b_expr:new TokContext("{",true),b_tmpl:new TokContext("${",false),p_stat:new TokContext("(",false),p_expr:new TokContext("(",true),q_tmpl:new TokContext("`",true,true,function(p){return p.tryReadTemplateToken();}),f_stat:new TokContext("function",false),f_expr:new TokContext("function",true),f_expr_gen:new TokContext("function",true,false,null,true),f_gen:new TokContext("function",false,false,null,true)};var pp$7=Parser.prototype;pp$7.initialContext=function(){return[types$1.b_stat]};pp$7.braceIsBlock=function(prevType){var parent=this.curContext();if(parent===types$1.f_expr||parent===types$1.f_stat)
{return true}
if(prevType===types.colon&&(parent===types$1.b_stat||parent===types$1.b_expr))
{return!parent.isExpr}
if(prevType===types._return||prevType===types.name&&this.exprAllowed)
{return lineBreak.test(this.input.slice(this.lastTokEnd,this.start))}
if(prevType===types._else||prevType===types.semi||prevType===types.eof||prevType===types.parenR||prevType===types.arrow)
{return true}
if(prevType===types.braceL)
{return parent===types$1.b_stat}
if(prevType===types._var||prevType===types._const||prevType===types.name)
{return false}
return!this.exprAllowed};pp$7.inGeneratorContext=function(){for(var i=this.context.length-1;i>=1;i--){var context=this.context[i];if(context.token==="function")
{return context.generator}}
return false};pp$7.updateContext=function(prevType){var update,type=this.type;if(type.keyword&&prevType===types.dot)
{this.exprAllowed=false;}
else if(update=type.updateContext)
{update.call(this,prevType);}
else
{this.exprAllowed=type.beforeExpr;}};types.parenR.updateContext=types.braceR.updateContext=function(){if(this.context.length===1){this.exprAllowed=true;return}
var out=this.context.pop();if(out===types$1.b_stat&&this.curContext().token==="function"){out=this.context.pop();}
this.exprAllowed=!out.isExpr;};types.braceL.updateContext=function(prevType){this.context.push(this.braceIsBlock(prevType)?types$1.b_stat:types$1.b_expr);this.exprAllowed=true;};types.dollarBraceL.updateContext=function(){this.context.push(types$1.b_tmpl);this.exprAllowed=true;};types.parenL.updateContext=function(prevType){var statementParens=prevType===types._if||prevType===types._for||prevType===types._with||prevType===types._while;this.context.push(statementParens?types$1.p_stat:types$1.p_expr);this.exprAllowed=true;};types.incDec.updateContext=function(){};types._function.updateContext=types._class.updateContext=function(prevType){if(prevType.beforeExpr&&prevType!==types.semi&&prevType!==types._else&&!(prevType===types._return&&lineBreak.test(this.input.slice(this.lastTokEnd,this.start)))&&!((prevType===types.colon||prevType===types.braceL)&&this.curContext()===types$1.b_stat))
{this.context.push(types$1.f_expr);}
else
{this.context.push(types$1.f_stat);}
this.exprAllowed=false;};types.backQuote.updateContext=function(){if(this.curContext()===types$1.q_tmpl)
{this.context.pop();}
else
{this.context.push(types$1.q_tmpl);}
this.exprAllowed=false;};types.star.updateContext=function(prevType){if(prevType===types._function){var index=this.context.length-1;if(this.context[index]===types$1.f_expr)
{this.context[index]=types$1.f_expr_gen;}
else
{this.context[index]=types$1.f_gen;}}
this.exprAllowed=true;};types.name.updateContext=function(prevType){var allowed=false;if(this.options.ecmaVersion>=6&&prevType!==types.dot){if(this.value==="of"&&!this.exprAllowed||this.value==="yield"&&this.inGeneratorContext())
{allowed=true;}}
this.exprAllowed=allowed;};var ecma9BinaryProperties="ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS";var ecma10BinaryProperties=ecma9BinaryProperties+" Extended_Pictographic";var ecma11BinaryProperties=ecma10BinaryProperties;var unicodeBinaryProperties={9:ecma9BinaryProperties,10:ecma10BinaryProperties,11:ecma11BinaryProperties};var unicodeGeneralCategoryValues="Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu";var ecma9ScriptValues="Adlam Adlm Ahom Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb";var ecma10ScriptValues=ecma9ScriptValues+" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd";var ecma11ScriptValues=ecma10ScriptValues+" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";var unicodeScriptValues={9:ecma9ScriptValues,10:ecma10ScriptValues,11:ecma11ScriptValues};var data={};function buildUnicodeData(ecmaVersion){var d=data[ecmaVersion]={binary:wordsRegexp(unicodeBinaryProperties[ecmaVersion]+" "+unicodeGeneralCategoryValues),nonBinary:{General_Category:wordsRegexp(unicodeGeneralCategoryValues),Script:wordsRegexp(unicodeScriptValues[ecmaVersion])}};d.nonBinary.Script_Extensions=d.nonBinary.Script;d.nonBinary.gc=d.nonBinary.General_Category;d.nonBinary.sc=d.nonBinary.Script;d.nonBinary.scx=d.nonBinary.Script_Extensions;}
buildUnicodeData(9);buildUnicodeData(10);buildUnicodeData(11);var pp$8=Parser.prototype;var RegExpValidationState=function RegExpValidationState(parser){this.parser=parser;this.validFlags="gim"+(parser.options.ecmaVersion>=6?"uy":"")+(parser.options.ecmaVersion>=9?"s":"");this.unicodeProperties=data[parser.options.ecmaVersion>=11?11:parser.options.ecmaVersion];this.source="";this.flags="";this.start=0;this.switchU=false;this.switchN=false;this.pos=0;this.lastIntValue=0;this.lastStringValue="";this.lastAssertionIsQuantifiable=false;this.numCapturingParens=0;this.maxBackReference=0;this.groupNames=[];this.backReferenceNames=[];};RegExpValidationState.prototype.reset=function reset(start,pattern,flags){var unicode=flags.indexOf("u")!==-1;this.start=start|0;this.source=pattern+"";this.flags=flags;this.switchU=unicode&&this.parser.options.ecmaVersion>=6;this.switchN=unicode&&this.parser.options.ecmaVersion>=9;};RegExpValidationState.prototype.raise=function raise(message){this.parser.raiseRecoverable(this.start,("Invalid regular expression: /"+(this.source)+"/: "+message));};RegExpValidationState.prototype.at=function at(i){var s=this.source;var l=s.length;if(i>=l){return-1}
var c=s.charCodeAt(i);if(!this.switchU||c<=0xD7FF||c>=0xE000||i+1>=l){return c}
return(c<<10)+s.charCodeAt(i+1)-0x35FDC00};RegExpValidationState.prototype.nextIndex=function nextIndex(i){var s=this.source;var l=s.length;if(i>=l){return l}
var c=s.charCodeAt(i);if(!this.switchU||c<=0xD7FF||c>=0xE000||i+1>=l){return i+1}
return i+2};RegExpValidationState.prototype.current=function current(){return this.at(this.pos)};RegExpValidationState.prototype.lookahead=function lookahead(){return this.at(this.nextIndex(this.pos))};RegExpValidationState.prototype.advance=function advance(){this.pos=this.nextIndex(this.pos);};RegExpValidationState.prototype.eat=function eat(ch){if(this.current()===ch){this.advance();return true}
return false};function codePointToString(ch){if(ch<=0xFFFF){return String.fromCharCode(ch)}
ch-=0x10000;return String.fromCharCode((ch>>10)+0xD800,(ch&0x03FF)+0xDC00)}
pp$8.validateRegExpFlags=function(state){var validFlags=state.validFlags;var flags=state.flags;for(var i=0;i<flags.length;i++){var flag=flags.charAt(i);if(validFlags.indexOf(flag)===-1){this.raise(state.start,"Invalid regular expression flag");}
if(flags.indexOf(flag,i+1)>-1){this.raise(state.start,"Duplicate regular expression flag");}}};pp$8.validateRegExpPattern=function(state){this.regexp_pattern(state);if(!state.switchN&&this.options.ecmaVersion>=9&&state.groupNames.length>0){state.switchN=true;this.regexp_pattern(state);}};pp$8.regexp_pattern=function(state){state.pos=0;state.lastIntValue=0;state.lastStringValue="";state.lastAssertionIsQuantifiable=false;state.numCapturingParens=0;state.maxBackReference=0;state.groupNames.length=0;state.backReferenceNames.length=0;this.regexp_disjunction(state);if(state.pos!==state.source.length){if(state.eat(0x29)){state.raise("Unmatched ')'");}
if(state.eat(0x5D)||state.eat(0x7D)){state.raise("Lone quantifier brackets");}}
if(state.maxBackReference>state.numCapturingParens){state.raise("Invalid escape");}
for(var i=0,list=state.backReferenceNames;i<list.length;i+=1){var name=list[i];if(state.groupNames.indexOf(name)===-1){state.raise("Invalid named capture referenced");}}};pp$8.regexp_disjunction=function(state){this.regexp_alternative(state);while(state.eat(0x7C)){this.regexp_alternative(state);}
if(this.regexp_eatQuantifier(state,true)){state.raise("Nothing to repeat");}
if(state.eat(0x7B)){state.raise("Lone quantifier brackets");}};pp$8.regexp_alternative=function(state){while(state.pos<state.source.length&&this.regexp_eatTerm(state))
{}};pp$8.regexp_eatTerm=function(state){if(this.regexp_eatAssertion(state)){if(state.lastAssertionIsQuantifiable&&this.regexp_eatQuantifier(state)){if(state.switchU){state.raise("Invalid quantifier");}}
return true}
if(state.switchU?this.regexp_eatAtom(state):this.regexp_eatExtendedAtom(state)){this.regexp_eatQuantifier(state);return true}
return false};pp$8.regexp_eatAssertion=function(state){var start=state.pos;state.lastAssertionIsQuantifiable=false;if(state.eat(0x5E)||state.eat(0x24)){return true}
if(state.eat(0x5C)){if(state.eat(0x42)||state.eat(0x62)){return true}
state.pos=start;}
if(state.eat(0x28)&&state.eat(0x3F)){var lookbehind=false;if(this.options.ecmaVersion>=9){lookbehind=state.eat(0x3C);}
if(state.eat(0x3D)||state.eat(0x21)){this.regexp_disjunction(state);if(!state.eat(0x29)){state.raise("Unterminated group");}
state.lastAssertionIsQuantifiable=!lookbehind;return true}}
state.pos=start;return false};pp$8.regexp_eatQuantifier=function(state,noError){if(noError===void 0)noError=false;if(this.regexp_eatQuantifierPrefix(state,noError)){state.eat(0x3F);return true}
return false};pp$8.regexp_eatQuantifierPrefix=function(state,noError){return(state.eat(0x2A)||state.eat(0x2B)||state.eat(0x3F)||this.regexp_eatBracedQuantifier(state,noError))};pp$8.regexp_eatBracedQuantifier=function(state,noError){var start=state.pos;if(state.eat(0x7B)){var min=0,max=-1;if(this.regexp_eatDecimalDigits(state)){min=state.lastIntValue;if(state.eat(0x2C)&&this.regexp_eatDecimalDigits(state)){max=state.lastIntValue;}
if(state.eat(0x7D)){if(max!==-1&&max<min&&!noError){state.raise("numbers out of order in {} quantifier");}
return true}}
if(state.switchU&&!noError){state.raise("Incomplete quantifier");}
state.pos=start;}
return false};pp$8.regexp_eatAtom=function(state){return(this.regexp_eatPatternCharacters(state)||state.eat(0x2E)||this.regexp_eatReverseSolidusAtomEscape(state)||this.regexp_eatCharacterClass(state)||this.regexp_eatUncapturingGroup(state)||this.regexp_eatCapturingGroup(state))};pp$8.regexp_eatReverseSolidusAtomEscape=function(state){var start=state.pos;if(state.eat(0x5C)){if(this.regexp_eatAtomEscape(state)){return true}
state.pos=start;}
return false};pp$8.regexp_eatUncapturingGroup=function(state){var start=state.pos;if(state.eat(0x28)){if(state.eat(0x3F)&&state.eat(0x3A)){this.regexp_disjunction(state);if(state.eat(0x29)){return true}
state.raise("Unterminated group");}
state.pos=start;}
return false};pp$8.regexp_eatCapturingGroup=function(state){if(state.eat(0x28)){if(this.options.ecmaVersion>=9){this.regexp_groupSpecifier(state);}else if(state.current()===0x3F){state.raise("Invalid group");}
this.regexp_disjunction(state);if(state.eat(0x29)){state.numCapturingParens+=1;return true}
state.raise("Unterminated group");}
return false};pp$8.regexp_eatExtendedAtom=function(state){return(state.eat(0x2E)||this.regexp_eatReverseSolidusAtomEscape(state)||this.regexp_eatCharacterClass(state)||this.regexp_eatUncapturingGroup(state)||this.regexp_eatCapturingGroup(state)||this.regexp_eatInvalidBracedQuantifier(state)||this.regexp_eatExtendedPatternCharacter(state))};pp$8.regexp_eatInvalidBracedQuantifier=function(state){if(this.regexp_eatBracedQuantifier(state,true)){state.raise("Nothing to repeat");}
return false};pp$8.regexp_eatSyntaxCharacter=function(state){var ch=state.current();if(isSyntaxCharacter(ch)){state.lastIntValue=ch;state.advance();return true}
return false};function isSyntaxCharacter(ch){return(ch===0x24||ch>=0x28&&ch<=0x2B||ch===0x2E||ch===0x3F||ch>=0x5B&&ch<=0x5E||ch>=0x7B&&ch<=0x7D)}
pp$8.regexp_eatPatternCharacters=function(state){var start=state.pos;var ch=0;while((ch=state.current())!==-1&&!isSyntaxCharacter(ch)){state.advance();}
return state.pos!==start};pp$8.regexp_eatExtendedPatternCharacter=function(state){var ch=state.current();if(ch!==-1&&ch!==0x24&&!(ch>=0x28&&ch<=0x2B)&&ch!==0x2E&&ch!==0x3F&&ch!==0x5B&&ch!==0x5E&&ch!==0x7C){state.advance();return true}
return false};pp$8.regexp_groupSpecifier=function(state){if(state.eat(0x3F)){if(this.regexp_eatGroupName(state)){if(state.groupNames.indexOf(state.lastStringValue)!==-1){state.raise("Duplicate capture group name");}
state.groupNames.push(state.lastStringValue);return}
state.raise("Invalid group");}};pp$8.regexp_eatGroupName=function(state){state.lastStringValue="";if(state.eat(0x3C)){if(this.regexp_eatRegExpIdentifierName(state)&&state.eat(0x3E)){return true}
state.raise("Invalid capture group name");}
return false};pp$8.regexp_eatRegExpIdentifierName=function(state){state.lastStringValue="";if(this.regexp_eatRegExpIdentifierStart(state)){state.lastStringValue+=codePointToString(state.lastIntValue);while(this.regexp_eatRegExpIdentifierPart(state)){state.lastStringValue+=codePointToString(state.lastIntValue);}
return true}
return false};pp$8.regexp_eatRegExpIdentifierStart=function(state){var start=state.pos;var ch=state.current();state.advance();if(ch===0x5C&&this.regexp_eatRegExpUnicodeEscapeSequence(state)){ch=state.lastIntValue;}
if(isRegExpIdentifierStart(ch)){state.lastIntValue=ch;return true}
state.pos=start;return false};function isRegExpIdentifierStart(ch){return isIdentifierStart(ch,true)||ch===0x24||ch===0x5F}
pp$8.regexp_eatRegExpIdentifierPart=function(state){var start=state.pos;var ch=state.current();state.advance();if(ch===0x5C&&this.regexp_eatRegExpUnicodeEscapeSequence(state)){ch=state.lastIntValue;}
if(isRegExpIdentifierPart(ch)){state.lastIntValue=ch;return true}
state.pos=start;return false};function isRegExpIdentifierPart(ch){return isIdentifierChar(ch,true)||ch===0x24||ch===0x5F||ch===0x200C||ch===0x200D}
pp$8.regexp_eatAtomEscape=function(state){if(this.regexp_eatBackReference(state)||this.regexp_eatCharacterClassEscape(state)||this.regexp_eatCharacterEscape(state)||(state.switchN&&this.regexp_eatKGroupName(state))){return true}
if(state.switchU){if(state.current()===0x63){state.raise("Invalid unicode escape");}
state.raise("Invalid escape");}
return false};pp$8.regexp_eatBackReference=function(state){var start=state.pos;if(this.regexp_eatDecimalEscape(state)){var n=state.lastIntValue;if(state.switchU){if(n>state.maxBackReference){state.maxBackReference=n;}
return true}
if(n<=state.numCapturingParens){return true}
state.pos=start;}
return false};pp$8.regexp_eatKGroupName=function(state){if(state.eat(0x6B)){if(this.regexp_eatGroupName(state)){state.backReferenceNames.push(state.lastStringValue);return true}
state.raise("Invalid named reference");}
return false};pp$8.regexp_eatCharacterEscape=function(state){return(this.regexp_eatControlEscape(state)||this.regexp_eatCControlLetter(state)||this.regexp_eatZero(state)||this.regexp_eatHexEscapeSequence(state)||this.regexp_eatRegExpUnicodeEscapeSequence(state)||(!state.switchU&&this.regexp_eatLegacyOctalEscapeSequence(state))||this.regexp_eatIdentityEscape(state))};pp$8.regexp_eatCControlLetter=function(state){var start=state.pos;if(state.eat(0x63)){if(this.regexp_eatControlLetter(state)){return true}
state.pos=start;}
return false};pp$8.regexp_eatZero=function(state){if(state.current()===0x30&&!isDecimalDigit(state.lookahead())){state.lastIntValue=0;state.advance();return true}
return false};pp$8.regexp_eatControlEscape=function(state){var ch=state.current();if(ch===0x74){state.lastIntValue=0x09;state.advance();return true}
if(ch===0x6E){state.lastIntValue=0x0A;state.advance();return true}
if(ch===0x76){state.lastIntValue=0x0B;state.advance();return true}
if(ch===0x66){state.lastIntValue=0x0C;state.advance();return true}
if(ch===0x72){state.lastIntValue=0x0D;state.advance();return true}
return false};pp$8.regexp_eatControlLetter=function(state){var ch=state.current();if(isControlLetter(ch)){state.lastIntValue=ch%0x20;state.advance();return true}
return false};function isControlLetter(ch){return((ch>=0x41&&ch<=0x5A)||(ch>=0x61&&ch<=0x7A))}
pp$8.regexp_eatRegExpUnicodeEscapeSequence=function(state){var start=state.pos;if(state.eat(0x75)){if(this.regexp_eatFixedHexDigits(state,4)){var lead=state.lastIntValue;if(state.switchU&&lead>=0xD800&&lead<=0xDBFF){var leadSurrogateEnd=state.pos;if(state.eat(0x5C)&&state.eat(0x75)&&this.regexp_eatFixedHexDigits(state,4)){var trail=state.lastIntValue;if(trail>=0xDC00&&trail<=0xDFFF){state.lastIntValue=(lead-0xD800)*0x400+(trail-0xDC00)+0x10000;return true}}
state.pos=leadSurrogateEnd;state.lastIntValue=lead;}
return true}
if(state.switchU&&state.eat(0x7B)&&this.regexp_eatHexDigits(state)&&state.eat(0x7D)&&isValidUnicode(state.lastIntValue)){return true}
if(state.switchU){state.raise("Invalid unicode escape");}
state.pos=start;}
return false};function isValidUnicode(ch){return ch>=0&&ch<=0x10FFFF}
pp$8.regexp_eatIdentityEscape=function(state){if(state.switchU){if(this.regexp_eatSyntaxCharacter(state)){return true}
if(state.eat(0x2F)){state.lastIntValue=0x2F;return true}
return false}
var ch=state.current();if(ch!==0x63&&(!state.switchN||ch!==0x6B)){state.lastIntValue=ch;state.advance();return true}
return false};pp$8.regexp_eatDecimalEscape=function(state){state.lastIntValue=0;var ch=state.current();if(ch>=0x31&&ch<=0x39){do{state.lastIntValue=10*state.lastIntValue+(ch-0x30);state.advance();}while((ch=state.current())>=0x30&&ch<=0x39)
return true}
return false};pp$8.regexp_eatCharacterClassEscape=function(state){var ch=state.current();if(isCharacterClassEscape(ch)){state.lastIntValue=-1;state.advance();return true}
if(state.switchU&&this.options.ecmaVersion>=9&&(ch===0x50||ch===0x70)){state.lastIntValue=-1;state.advance();if(state.eat(0x7B)&&this.regexp_eatUnicodePropertyValueExpression(state)&&state.eat(0x7D)){return true}
state.raise("Invalid property name");}
return false};function isCharacterClassEscape(ch){return(ch===0x64||ch===0x44||ch===0x73||ch===0x53||ch===0x77||ch===0x57)}
pp$8.regexp_eatUnicodePropertyValueExpression=function(state){var start=state.pos;if(this.regexp_eatUnicodePropertyName(state)&&state.eat(0x3D)){var name=state.lastStringValue;if(this.regexp_eatUnicodePropertyValue(state)){var value=state.lastStringValue;this.regexp_validateUnicodePropertyNameAndValue(state,name,value);return true}}
state.pos=start;if(this.regexp_eatLoneUnicodePropertyNameOrValue(state)){var nameOrValue=state.lastStringValue;this.regexp_validateUnicodePropertyNameOrValue(state,nameOrValue);return true}
return false};pp$8.regexp_validateUnicodePropertyNameAndValue=function(state,name,value){if(!has(state.unicodeProperties.nonBinary,name))
{state.raise("Invalid property name");}
if(!state.unicodeProperties.nonBinary[name].test(value))
{state.raise("Invalid property value");}};pp$8.regexp_validateUnicodePropertyNameOrValue=function(state,nameOrValue){if(!state.unicodeProperties.binary.test(nameOrValue))
{state.raise("Invalid property name");}};pp$8.regexp_eatUnicodePropertyName=function(state){var ch=0;state.lastStringValue="";while(isUnicodePropertyNameCharacter(ch=state.current())){state.lastStringValue+=codePointToString(ch);state.advance();}
return state.lastStringValue!==""};function isUnicodePropertyNameCharacter(ch){return isControlLetter(ch)||ch===0x5F}
pp$8.regexp_eatUnicodePropertyValue=function(state){var ch=0;state.lastStringValue="";while(isUnicodePropertyValueCharacter(ch=state.current())){state.lastStringValue+=codePointToString(ch);state.advance();}
return state.lastStringValue!==""};function isUnicodePropertyValueCharacter(ch){return isUnicodePropertyNameCharacter(ch)||isDecimalDigit(ch)}
pp$8.regexp_eatLoneUnicodePropertyNameOrValue=function(state){return this.regexp_eatUnicodePropertyValue(state)};pp$8.regexp_eatCharacterClass=function(state){if(state.eat(0x5B)){state.eat(0x5E);this.regexp_classRanges(state);if(state.eat(0x5D)){return true}
state.raise("Unterminated character class");}
return false};pp$8.regexp_classRanges=function(state){while(this.regexp_eatClassAtom(state)){var left=state.lastIntValue;if(state.eat(0x2D)&&this.regexp_eatClassAtom(state)){var right=state.lastIntValue;if(state.switchU&&(left===-1||right===-1)){state.raise("Invalid character class");}
if(left!==-1&&right!==-1&&left>right){state.raise("Range out of order in character class");}}}};pp$8.regexp_eatClassAtom=function(state){var start=state.pos;if(state.eat(0x5C)){if(this.regexp_eatClassEscape(state)){return true}
if(state.switchU){var ch$1=state.current();if(ch$1===0x63||isOctalDigit(ch$1)){state.raise("Invalid class escape");}
state.raise("Invalid escape");}
state.pos=start;}
var ch=state.current();if(ch!==0x5D){state.lastIntValue=ch;state.advance();return true}
return false};pp$8.regexp_eatClassEscape=function(state){var start=state.pos;if(state.eat(0x62)){state.lastIntValue=0x08;return true}
if(state.switchU&&state.eat(0x2D)){state.lastIntValue=0x2D;return true}
if(!state.switchU&&state.eat(0x63)){if(this.regexp_eatClassControlLetter(state)){return true}
state.pos=start;}
return(this.regexp_eatCharacterClassEscape(state)||this.regexp_eatCharacterEscape(state))};pp$8.regexp_eatClassControlLetter=function(state){var ch=state.current();if(isDecimalDigit(ch)||ch===0x5F){state.lastIntValue=ch%0x20;state.advance();return true}
return false};pp$8.regexp_eatHexEscapeSequence=function(state){var start=state.pos;if(state.eat(0x78)){if(this.regexp_eatFixedHexDigits(state,2)){return true}
if(state.switchU){state.raise("Invalid escape");}
state.pos=start;}
return false};pp$8.regexp_eatDecimalDigits=function(state){var start=state.pos;var ch=0;state.lastIntValue=0;while(isDecimalDigit(ch=state.current())){state.lastIntValue=10*state.lastIntValue+(ch-0x30);state.advance();}
return state.pos!==start};function isDecimalDigit(ch){return ch>=0x30&&ch<=0x39}
pp$8.regexp_eatHexDigits=function(state){var start=state.pos;var ch=0;state.lastIntValue=0;while(isHexDigit(ch=state.current())){state.lastIntValue=16*state.lastIntValue+hexToInt(ch);state.advance();}
return state.pos!==start};function isHexDigit(ch){return((ch>=0x30&&ch<=0x39)||(ch>=0x41&&ch<=0x46)||(ch>=0x61&&ch<=0x66))}
function hexToInt(ch){if(ch>=0x41&&ch<=0x46){return 10+(ch-0x41)}
if(ch>=0x61&&ch<=0x66){return 10+(ch-0x61)}
return ch-0x30}
pp$8.regexp_eatLegacyOctalEscapeSequence=function(state){if(this.regexp_eatOctalDigit(state)){var n1=state.lastIntValue;if(this.regexp_eatOctalDigit(state)){var n2=state.lastIntValue;if(n1<=3&&this.regexp_eatOctalDigit(state)){state.lastIntValue=n1*64+n2*8+state.lastIntValue;}else{state.lastIntValue=n1*8+n2;}}else{state.lastIntValue=n1;}
return true}
return false};pp$8.regexp_eatOctalDigit=function(state){var ch=state.current();if(isOctalDigit(ch)){state.lastIntValue=ch-0x30;state.advance();return true}
state.lastIntValue=0;return false};function isOctalDigit(ch){return ch>=0x30&&ch<=0x37}
pp$8.regexp_eatFixedHexDigits=function(state,length){var start=state.pos;state.lastIntValue=0;for(var i=0;i<length;++i){var ch=state.current();if(!isHexDigit(ch)){state.pos=start;return false}
state.lastIntValue=16*state.lastIntValue+hexToInt(ch);state.advance();}
return true};var Token=function Token(p){this.type=p.type;this.value=p.value;this.start=p.start;this.end=p.end;if(p.options.locations)
{this.loc=new SourceLocation(p,p.startLoc,p.endLoc);}
if(p.options.ranges)
{this.range=[p.start,p.end];}};var pp$9=Parser.prototype;pp$9.next=function(){if(this.options.onToken)
{this.options.onToken(new Token(this));}
this.lastTokEnd=this.end;this.lastTokStart=this.start;this.lastTokEndLoc=this.endLoc;this.lastTokStartLoc=this.startLoc;this.nextToken();};pp$9.getToken=function(){this.next();return new Token(this)};if(typeof Symbol!=="undefined")
{pp$9[Symbol.iterator]=function(){var this$1=this;return{next:function(){var token=this$1.getToken();return{done:token.type===types.eof,value:token}}}};}
pp$9.curContext=function(){return this.context[this.context.length-1]};pp$9.nextToken=function(){var curContext=this.curContext();if(!curContext||!curContext.preserveSpace){this.skipSpace();}
this.start=this.pos;if(this.options.locations){this.startLoc=this.curPosition();}
if(this.pos>=this.input.length){return this.finishToken(types.eof)}
if(curContext.override){return curContext.override(this)}
else{this.readToken(this.fullCharCodeAtPos());}};pp$9.readToken=function(code){if(isIdentifierStart(code,this.options.ecmaVersion>=6)||code===92)
{return this.readWord()}
return this.getTokenFromCode(code)};pp$9.fullCharCodeAtPos=function(){var code=this.input.charCodeAt(this.pos);if(code<=0xd7ff||code>=0xe000){return code}
var next=this.input.charCodeAt(this.pos+1);return(code<<10)+next-0x35fdc00};pp$9.skipBlockComment=function(){var startLoc=this.options.onComment&&this.curPosition();var start=this.pos,end=this.input.indexOf("*/",this.pos+=2);if(end===-1){this.raise(this.pos-2,"Unterminated comment");}
this.pos=end+2;if(this.options.locations){lineBreakG.lastIndex=start;var match;while((match=lineBreakG.exec(this.input))&&match.index<this.pos){++this.curLine;this.lineStart=match.index+match[0].length;}}
if(this.options.onComment)
{this.options.onComment(true,this.input.slice(start+2,end),start,this.pos,startLoc,this.curPosition());}};pp$9.skipLineComment=function(startSkip){var start=this.pos;var startLoc=this.options.onComment&&this.curPosition();var ch=this.input.charCodeAt(this.pos+=startSkip);while(this.pos<this.input.length&&!isNewLine(ch)){ch=this.input.charCodeAt(++this.pos);}
if(this.options.onComment)
{this.options.onComment(false,this.input.slice(start+startSkip,this.pos),start,this.pos,startLoc,this.curPosition());}};pp$9.skipSpace=function(){loop:while(this.pos<this.input.length){var ch=this.input.charCodeAt(this.pos);switch(ch){case 32:case 160:++this.pos;break
case 13:if(this.input.charCodeAt(this.pos+1)===10){++this.pos;}
case 10:case 8232:case 8233:++this.pos;if(this.options.locations){++this.curLine;this.lineStart=this.pos;}
break
case 47:switch(this.input.charCodeAt(this.pos+1)){case 42:this.skipBlockComment();break
case 47:this.skipLineComment(2);break
default:break loop}
break
default:if(ch>8&&ch<14||ch>=5760&&nonASCIIwhitespace.test(String.fromCharCode(ch))){++this.pos;}else{break loop}}}};pp$9.finishToken=function(type,val){this.end=this.pos;if(this.options.locations){this.endLoc=this.curPosition();}
var prevType=this.type;this.type=type;this.value=val;this.updateContext(prevType);};pp$9.readToken_dot=function(){var next=this.input.charCodeAt(this.pos+1);if(next>=48&&next<=57){return this.readNumber(true)}
var next2=this.input.charCodeAt(this.pos+2);if(this.options.ecmaVersion>=6&&next===46&&next2===46){this.pos+=3;return this.finishToken(types.ellipsis)}else{++this.pos;return this.finishToken(types.dot)}};pp$9.readToken_slash=function(){var next=this.input.charCodeAt(this.pos+1);if(this.exprAllowed){++this.pos;return this.readRegexp()}
if(next===61){return this.finishOp(types.assign,2)}
return this.finishOp(types.slash,1)};pp$9.readToken_mult_modulo_exp=function(code){var next=this.input.charCodeAt(this.pos+1);var size=1;var tokentype=code===42?types.star:types.modulo;if(this.options.ecmaVersion>=7&&code===42&&next===42){++size;tokentype=types.starstar;next=this.input.charCodeAt(this.pos+2);}
if(next===61){return this.finishOp(types.assign,size+1)}
return this.finishOp(tokentype,size)};pp$9.readToken_pipe_amp=function(code){var next=this.input.charCodeAt(this.pos+1);if(next===code){return this.finishOp(code===124?types.logicalOR:types.logicalAND,2)}
if(next===61){return this.finishOp(types.assign,2)}
return this.finishOp(code===124?types.bitwiseOR:types.bitwiseAND,1)};pp$9.readToken_caret=function(){var next=this.input.charCodeAt(this.pos+1);if(next===61){return this.finishOp(types.assign,2)}
return this.finishOp(types.bitwiseXOR,1)};pp$9.readToken_plus_min=function(code){var next=this.input.charCodeAt(this.pos+1);if(next===code){if(next===45&&!this.inModule&&this.input.charCodeAt(this.pos+2)===62&&(this.lastTokEnd===0||lineBreak.test(this.input.slice(this.lastTokEnd,this.pos)))){this.skipLineComment(3);this.skipSpace();return this.nextToken()}
return this.finishOp(types.incDec,2)}
if(next===61){return this.finishOp(types.assign,2)}
return this.finishOp(types.plusMin,1)};pp$9.readToken_lt_gt=function(code){var next=this.input.charCodeAt(this.pos+1);var size=1;if(next===code){size=code===62&&this.input.charCodeAt(this.pos+2)===62?3:2;if(this.input.charCodeAt(this.pos+size)===61){return this.finishOp(types.assign,size+1)}
return this.finishOp(types.bitShift,size)}
if(next===33&&code===60&&!this.inModule&&this.input.charCodeAt(this.pos+2)===45&&this.input.charCodeAt(this.pos+3)===45){this.skipLineComment(4);this.skipSpace();return this.nextToken()}
if(next===61){size=2;}
return this.finishOp(types.relational,size)};pp$9.readToken_eq_excl=function(code){var next=this.input.charCodeAt(this.pos+1);if(next===61){return this.finishOp(types.equality,this.input.charCodeAt(this.pos+2)===61?3:2)}
if(code===61&&next===62&&this.options.ecmaVersion>=6){this.pos+=2;return this.finishToken(types.arrow)}
return this.finishOp(code===61?types.eq:types.prefix,1)};pp$9.getTokenFromCode=function(code){switch(code){case 46:return this.readToken_dot()
case 40:++this.pos;return this.finishToken(types.parenL)
case 41:++this.pos;return this.finishToken(types.parenR)
case 59:++this.pos;return this.finishToken(types.semi)
case 44:++this.pos;return this.finishToken(types.comma)
case 91:++this.pos;return this.finishToken(types.bracketL)
case 93:++this.pos;return this.finishToken(types.bracketR)
case 123:++this.pos;return this.finishToken(types.braceL)
case 125:++this.pos;return this.finishToken(types.braceR)
case 58:++this.pos;return this.finishToken(types.colon)
case 63:++this.pos;return this.finishToken(types.question)
case 96:if(this.options.ecmaVersion<6){break}
++this.pos;return this.finishToken(types.backQuote)
case 48:var next=this.input.charCodeAt(this.pos+1);if(next===120||next===88){return this.readRadixNumber(16)}
if(this.options.ecmaVersion>=6){if(next===111||next===79){return this.readRadixNumber(8)}
if(next===98||next===66){return this.readRadixNumber(2)}}
case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.readNumber(false)
case 34:case 39:return this.readString(code)
case 47:return this.readToken_slash()
case 37:case 42:return this.readToken_mult_modulo_exp(code)
case 124:case 38:return this.readToken_pipe_amp(code)
case 94:return this.readToken_caret()
case 43:case 45:return this.readToken_plus_min(code)
case 60:case 62:return this.readToken_lt_gt(code)
case 61:case 33:return this.readToken_eq_excl(code)
case 126:return this.finishOp(types.prefix,1)}
this.raise(this.pos,"Unexpected character '"+codePointToString$1(code)+"'");};pp$9.finishOp=function(type,size){var str=this.input.slice(this.pos,this.pos+size);this.pos+=size;return this.finishToken(type,str)};pp$9.readRegexp=function(){var escaped,inClass,start=this.pos;for(;;){if(this.pos>=this.input.length){this.raise(start,"Unterminated regular expression");}
var ch=this.input.charAt(this.pos);if(lineBreak.test(ch)){this.raise(start,"Unterminated regular expression");}
if(!escaped){if(ch==="["){inClass=true;}
else if(ch==="]"&&inClass){inClass=false;}
else if(ch==="/"&&!inClass){break}
escaped=ch==="\\";}else{escaped=false;}
++this.pos;}
var pattern=this.input.slice(start,this.pos);++this.pos;var flagsStart=this.pos;var flags=this.readWord1();if(this.containsEsc){this.unexpected(flagsStart);}
var state=this.regexpState||(this.regexpState=new RegExpValidationState(this));state.reset(start,pattern,flags);this.validateRegExpFlags(state);this.validateRegExpPattern(state);var value=null;try{value=new RegExp(pattern,flags);}catch(e){}
return this.finishToken(types.regexp,{pattern:pattern,flags:flags,value:value})};pp$9.readInt=function(radix,len){var start=this.pos,total=0;for(var i=0,e=len==null?Infinity:len;i<e;++i){var code=this.input.charCodeAt(this.pos),val=(void 0);if(code>=97){val=code-97+10;}
else if(code>=65){val=code-65+10;}
else if(code>=48&&code<=57){val=code-48;}
else{val=Infinity;}
if(val>=radix){break}
++this.pos;total=total*radix+val;}
if(this.pos===start||len!=null&&this.pos-start!==len){return null}
return total};pp$9.readRadixNumber=function(radix){var start=this.pos;this.pos+=2;var val=this.readInt(radix);if(val==null){this.raise(this.start+2,"Expected number in radix "+radix);}
if(this.options.ecmaVersion>=11&&this.input.charCodeAt(this.pos)===110){val=typeof BigInt!=="undefined"?BigInt(this.input.slice(start,this.pos)):null;++this.pos;}else if(isIdentifierStart(this.fullCharCodeAtPos())){this.raise(this.pos,"Identifier directly after number");}
return this.finishToken(types.num,val)};pp$9.readNumber=function(startsWithDot){var start=this.pos;if(!startsWithDot&&this.readInt(10)===null){this.raise(start,"Invalid number");}
var octal=this.pos-start>=2&&this.input.charCodeAt(start)===48;if(octal&&this.strict){this.raise(start,"Invalid number");}
if(octal&&/[89]/.test(this.input.slice(start,this.pos))){octal=false;}
var next=this.input.charCodeAt(this.pos);if(!octal&&!startsWithDot&&this.options.ecmaVersion>=11&&next===110){var str$1=this.input.slice(start,this.pos);var val$1=typeof BigInt!=="undefined"?BigInt(str$1):null;++this.pos;if(isIdentifierStart(this.fullCharCodeAtPos())){this.raise(this.pos,"Identifier directly after number");}
return this.finishToken(types.num,val$1)}
if(next===46&&!octal){++this.pos;this.readInt(10);next=this.input.charCodeAt(this.pos);}
if((next===69||next===101)&&!octal){next=this.input.charCodeAt(++this.pos);if(next===43||next===45){++this.pos;}
if(this.readInt(10)===null){this.raise(start,"Invalid number");}}
if(isIdentifierStart(this.fullCharCodeAtPos())){this.raise(this.pos,"Identifier directly after number");}
var str=this.input.slice(start,this.pos);var val=octal?parseInt(str,8):parseFloat(str);return this.finishToken(types.num,val)};pp$9.readCodePoint=function(){var ch=this.input.charCodeAt(this.pos),code;if(ch===123){if(this.options.ecmaVersion<6){this.unexpected();}
var codePos=++this.pos;code=this.readHexChar(this.input.indexOf("}",this.pos)-this.pos);++this.pos;if(code>0x10FFFF){this.invalidStringToken(codePos,"Code point out of bounds");}}else{code=this.readHexChar(4);}
return code};function codePointToString$1(code){if(code<=0xFFFF){return String.fromCharCode(code)}
code-=0x10000;return String.fromCharCode((code>>10)+0xD800,(code&1023)+0xDC00)}
pp$9.readString=function(quote){var out="",chunkStart=++this.pos;for(;;){if(this.pos>=this.input.length){this.raise(this.start,"Unterminated string constant");}
var ch=this.input.charCodeAt(this.pos);if(ch===quote){break}
if(ch===92){out+=this.input.slice(chunkStart,this.pos);out+=this.readEscapedChar(false);chunkStart=this.pos;}else{if(isNewLine(ch,this.options.ecmaVersion>=10)){this.raise(this.start,"Unterminated string constant");}
++this.pos;}}
out+=this.input.slice(chunkStart,this.pos++);return this.finishToken(types.string,out)};var INVALID_TEMPLATE_ESCAPE_ERROR={};pp$9.tryReadTemplateToken=function(){this.inTemplateElement=true;try{this.readTmplToken();}catch(err){if(err===INVALID_TEMPLATE_ESCAPE_ERROR){this.readInvalidTemplateToken();}else{throw err}}
this.inTemplateElement=false;};pp$9.invalidStringToken=function(position,message){if(this.inTemplateElement&&this.options.ecmaVersion>=9){throw INVALID_TEMPLATE_ESCAPE_ERROR}else{this.raise(position,message);}};pp$9.readTmplToken=function(){var out="",chunkStart=this.pos;for(;;){if(this.pos>=this.input.length){this.raise(this.start,"Unterminated template");}
var ch=this.input.charCodeAt(this.pos);if(ch===96||ch===36&&this.input.charCodeAt(this.pos+1)===123){if(this.pos===this.start&&(this.type===types.template||this.type===types.invalidTemplate)){if(ch===36){this.pos+=2;return this.finishToken(types.dollarBraceL)}else{++this.pos;return this.finishToken(types.backQuote)}}
out+=this.input.slice(chunkStart,this.pos);return this.finishToken(types.template,out)}
if(ch===92){out+=this.input.slice(chunkStart,this.pos);out+=this.readEscapedChar(true);chunkStart=this.pos;}else if(isNewLine(ch)){out+=this.input.slice(chunkStart,this.pos);++this.pos;switch(ch){case 13:if(this.input.charCodeAt(this.pos)===10){++this.pos;}
case 10:out+="\n";break
default:out+=String.fromCharCode(ch);break}
if(this.options.locations){++this.curLine;this.lineStart=this.pos;}
chunkStart=this.pos;}else{++this.pos;}}};pp$9.readInvalidTemplateToken=function(){for(;this.pos<this.input.length;this.pos++){switch(this.input[this.pos]){case"\\":++this.pos;break
case"$":if(this.input[this.pos+1]!=="{"){break}
case"`":return this.finishToken(types.invalidTemplate,this.input.slice(this.start,this.pos))}}
this.raise(this.start,"Unterminated template");};pp$9.readEscapedChar=function(inTemplate){var ch=this.input.charCodeAt(++this.pos);++this.pos;switch(ch){case 110:return"\n"
case 114:return"\r"
case 120:return String.fromCharCode(this.readHexChar(2))
case 117:return codePointToString$1(this.readCodePoint())
case 116:return"\t"
case 98:return"\b"
case 118:return"\u000b"
case 102:return"\f"
case 13:if(this.input.charCodeAt(this.pos)===10){++this.pos;}
case 10:if(this.options.locations){this.lineStart=this.pos;++this.curLine;}
return""
default:if(ch>=48&&ch<=55){var octalStr=this.input.substr(this.pos-1,3).match(/^[0-7]+/)[0];var octal=parseInt(octalStr,8);if(octal>255){octalStr=octalStr.slice(0,-1);octal=parseInt(octalStr,8);}
this.pos+=octalStr.length-1;ch=this.input.charCodeAt(this.pos);if((octalStr!=="0"||ch===56||ch===57)&&(this.strict||inTemplate)){this.invalidStringToken(this.pos-1-octalStr.length,inTemplate?"Octal literal in template string":"Octal literal in strict mode");}
return String.fromCharCode(octal)}
if(isNewLine(ch)){return""}
return String.fromCharCode(ch)}};pp$9.readHexChar=function(len){var codePos=this.pos;var n=this.readInt(16,len);if(n===null){this.invalidStringToken(codePos,"Bad character escape sequence");}
return n};pp$9.readWord1=function(){this.containsEsc=false;var word="",first=true,chunkStart=this.pos;var astral=this.options.ecmaVersion>=6;while(this.pos<this.input.length){var ch=this.fullCharCodeAtPos();if(isIdentifierChar(ch,astral)){this.pos+=ch<=0xffff?1:2;}else if(ch===92){this.containsEsc=true;word+=this.input.slice(chunkStart,this.pos);var escStart=this.pos;if(this.input.charCodeAt(++this.pos)!==117)
{this.invalidStringToken(this.pos,"Expecting Unicode escape sequence \\uXXXX");}
++this.pos;var esc=this.readCodePoint();if(!(first?isIdentifierStart:isIdentifierChar)(esc,astral))
{this.invalidStringToken(escStart,"Invalid Unicode escape");}
word+=codePointToString$1(esc);chunkStart=this.pos;}else{break}
first=false;}
return word+this.input.slice(chunkStart,this.pos)};pp$9.readWord=function(){var word=this.readWord1();var type=types.name;if(this.keywords.test(word)){if(this.containsEsc){this.raiseRecoverable(this.start,"Escape sequence in keyword "+word);}
type=keywords$1[word];}
return this.finishToken(type,word)};var version="7.1.0";Parser.acorn={Parser:Parser,version:version,defaultOptions:defaultOptions,Position:Position,SourceLocation:SourceLocation,getLineInfo:getLineInfo,Node:Node,TokenType:TokenType,tokTypes:types,keywordTypes:keywords$1,TokContext:TokContext,tokContexts:types$1,isIdentifierChar:isIdentifierChar,isIdentifierStart:isIdentifierStart,Token:Token,isNewLine:isNewLine,lineBreak:lineBreak,lineBreakG:lineBreakG,nonASCIIwhitespace:nonASCIIwhitespace};function parse(input,options){return Parser.parse(input,options)}
function parseExpressionAt(input,pos,options){return Parser.parseExpressionAt(input,pos,options)}
function tokenizer(input,options){return Parser.tokenizer(input,options)}
exports.Node=Node;exports.Parser=Parser;exports.Position=Position;exports.SourceLocation=SourceLocation;exports.TokContext=TokContext;exports.Token=Token;exports.TokenType=TokenType;exports.defaultOptions=defaultOptions;exports.getLineInfo=getLineInfo;exports.isIdentifierChar=isIdentifierChar;exports.isIdentifierStart=isIdentifierStart;exports.isNewLine=isNewLine;exports.keywordTypes=keywords$1;exports.lineBreak=lineBreak;exports.lineBreakG=lineBreakG;exports.nonASCIIwhitespace=nonASCIIwhitespace;exports.parse=parse;exports.parseExpressionAt=parseExpressionAt;exports.tokContexts=types$1;exports.tokTypes=types;exports.tokenizer=tokenizer;exports.version=version;Object.defineProperty(exports,'__esModule',{value:true});}));(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?factory(exports,require('acorn')):typeof define==='function'&&define.amd?define(['exports','acorn'],factory):(global=global||self,factory((global.acorn=global.acorn||{},global.acorn.loose={}),global.acorn));}(self,function(exports,acorn){'use strict';function noop(){}
var LooseParser=function LooseParser(input,options){if(options===void 0)options={};this.toks=this.constructor.BaseParser.tokenizer(input,options);this.options=this.toks.options;this.input=this.toks.input;this.tok=this.last={type:acorn.tokTypes.eof,start:0,end:0};this.tok.validateRegExpFlags=noop;this.tok.validateRegExpPattern=noop;if(this.options.locations){var here=this.toks.curPosition();this.tok.loc=new acorn.SourceLocation(this.toks,here,here);}
this.ahead=[];this.context=[];this.curIndent=0;this.curLineStart=0;this.nextLineStart=this.lineEnd(this.curLineStart)+1;this.inAsync=false;this.inFunction=false;};LooseParser.prototype.startNode=function startNode(){return new acorn.Node(this.toks,this.tok.start,this.options.locations?this.tok.loc.start:null)};LooseParser.prototype.storeCurrentPos=function storeCurrentPos(){return this.options.locations?[this.tok.start,this.tok.loc.start]:this.tok.start};LooseParser.prototype.startNodeAt=function startNodeAt(pos){if(this.options.locations){return new acorn.Node(this.toks,pos[0],pos[1])}else{return new acorn.Node(this.toks,pos)}};LooseParser.prototype.finishNode=function finishNode(node,type){node.type=type;node.end=this.last.end;if(this.options.locations)
{node.loc.end=this.last.loc.end;}
if(this.options.ranges)
{node.range[1]=this.last.end;}
return node};LooseParser.prototype.dummyNode=function dummyNode(type){var dummy=this.startNode();dummy.type=type;dummy.end=dummy.start;if(this.options.locations)
{dummy.loc.end=dummy.loc.start;}
if(this.options.ranges)
{dummy.range[1]=dummy.start;}
this.last={type:acorn.tokTypes.name,start:dummy.start,end:dummy.start,loc:dummy.loc};return dummy};LooseParser.prototype.dummyIdent=function dummyIdent(){var dummy=this.dummyNode("Identifier");dummy.name="✖";return dummy};LooseParser.prototype.dummyString=function dummyString(){var dummy=this.dummyNode("Literal");dummy.value=dummy.raw="✖";return dummy};LooseParser.prototype.eat=function eat(type){if(this.tok.type===type){this.next();return true}else{return false}};LooseParser.prototype.isContextual=function isContextual(name){return this.tok.type===acorn.tokTypes.name&&this.tok.value===name};LooseParser.prototype.eatContextual=function eatContextual(name){return this.tok.value===name&&this.eat(acorn.tokTypes.name)};LooseParser.prototype.canInsertSemicolon=function canInsertSemicolon(){return this.tok.type===acorn.tokTypes.eof||this.tok.type===acorn.tokTypes.braceR||acorn.lineBreak.test(this.input.slice(this.last.end,this.tok.start))};LooseParser.prototype.semicolon=function semicolon(){return this.eat(acorn.tokTypes.semi)};LooseParser.prototype.expect=function expect(type){if(this.eat(type)){return true}
for(var i=1;i<=2;i++){if(this.lookAhead(i).type===type){for(var j=0;j<i;j++){this.next();}
return true}}};LooseParser.prototype.pushCx=function pushCx(){this.context.push(this.curIndent);};LooseParser.prototype.popCx=function popCx(){this.curIndent=this.context.pop();};LooseParser.prototype.lineEnd=function lineEnd(pos){while(pos<this.input.length&&!acorn.isNewLine(this.input.charCodeAt(pos))){++pos;}
return pos};LooseParser.prototype.indentationAfter=function indentationAfter(pos){for(var count=0;;++pos){var ch=this.input.charCodeAt(pos);if(ch===32){++count;}
else if(ch===9){count+=this.options.tabSize;}
else{return count}}};LooseParser.prototype.closes=function closes(closeTok,indent,line,blockHeuristic){if(this.tok.type===closeTok||this.tok.type===acorn.tokTypes.eof){return true}
return line!==this.curLineStart&&this.curIndent<indent&&this.tokenStartsLine()&&(!blockHeuristic||this.nextLineStart>=this.input.length||this.indentationAfter(this.nextLineStart)<indent)};LooseParser.prototype.tokenStartsLine=function tokenStartsLine(){for(var p=this.tok.start-1;p>=this.curLineStart;--p){var ch=this.input.charCodeAt(p);if(ch!==9&&ch!==32){return false}}
return true};LooseParser.prototype.extend=function extend(name,f){this[name]=f(this[name]);};LooseParser.prototype.parse=function parse(){this.next();return this.parseTopLevel()};LooseParser.extend=function extend(){var plugins=[],len=arguments.length;while(len--)plugins[len]=arguments[len];var cls=this;for(var i=0;i<plugins.length;i++){cls=plugins[i](cls);}
return cls};LooseParser.parse=function parse(input,options){return new this(input,options).parse()};LooseParser.BaseParser=acorn.Parser;var lp=LooseParser.prototype;function isSpace(ch){return(ch<14&&ch>8)||ch===32||ch===160||acorn.isNewLine(ch)}
lp.next=function(){this.last=this.tok;if(this.ahead.length)
{this.tok=this.ahead.shift();}
else
{this.tok=this.readToken();}
if(this.tok.start>=this.nextLineStart){while(this.tok.start>=this.nextLineStart){this.curLineStart=this.nextLineStart;this.nextLineStart=this.lineEnd(this.curLineStart)+1;}
this.curIndent=this.indentationAfter(this.curLineStart);}};lp.readToken=function(){for(;;){try{this.toks.next();if(this.toks.type===acorn.tokTypes.dot&&this.input.substr(this.toks.end,1)==="."&&this.options.ecmaVersion>=6){this.toks.end++;this.toks.type=acorn.tokTypes.ellipsis;}
return new acorn.Token(this.toks)}catch(e){if(!(e instanceof SyntaxError)){throw e}
var msg=e.message,pos=e.raisedAt,replace=true;if(/unterminated/i.test(msg)){pos=this.lineEnd(e.pos+1);if(/string/.test(msg)){replace={start:e.pos,end:pos,type:acorn.tokTypes.string,value:this.input.slice(e.pos+1,pos)};}else if(/regular expr/i.test(msg)){var re=this.input.slice(e.pos,pos);try{re=new RegExp(re);}catch(e){}
replace={start:e.pos,end:pos,type:acorn.tokTypes.regexp,value:re};}else if(/template/.test(msg)){replace={start:e.pos,end:pos,type:acorn.tokTypes.template,value:this.input.slice(e.pos,pos)};}else{replace=false;}}else if(/invalid (unicode|regexp|number)|expecting unicode|octal literal|is reserved|directly after number|expected number in radix/i.test(msg)){while(pos<this.input.length&&!isSpace(this.input.charCodeAt(pos))){++pos;}}else if(/character escape|expected hexadecimal/i.test(msg)){while(pos<this.input.length){var ch=this.input.charCodeAt(pos++);if(ch===34||ch===39||acorn.isNewLine(ch)){break}}}else if(/unexpected character/i.test(msg)){pos++;replace=false;}else if(/regular expression/i.test(msg)){replace=true;}else{throw e}
this.resetTo(pos);if(replace===true){replace={start:pos,end:pos,type:acorn.tokTypes.name,value:"✖"};}
if(replace){if(this.options.locations)
{replace.loc=new acorn.SourceLocation(this.toks,acorn.getLineInfo(this.input,replace.start),acorn.getLineInfo(this.input,replace.end));}
return replace}}}};lp.resetTo=function(pos){this.toks.pos=pos;var ch=this.input.charAt(pos-1);this.toks.exprAllowed=!ch||/[[{(,;:?/*=+\-~!|&%^<>]/.test(ch)||/[enwfd]/.test(ch)&&/\b(case|else|return|throw|new|in|(instance|type)?of|delete|void)$/.test(this.input.slice(pos-10,pos));if(this.options.locations){this.toks.curLine=1;this.toks.lineStart=acorn.lineBreakG.lastIndex=0;var match;while((match=acorn.lineBreakG.exec(this.input))&&match.index<pos){++this.toks.curLine;this.toks.lineStart=match.index+match[0].length;}}};lp.lookAhead=function(n){while(n>this.ahead.length)
{this.ahead.push(this.readToken());}
return this.ahead[n-1]};function isDummy(node){return node.name==="✖"}
var lp$1=LooseParser.prototype;lp$1.parseTopLevel=function(){var node=this.startNodeAt(this.options.locations?[0,acorn.getLineInfo(this.input,0)]:0);node.body=[];while(this.tok.type!==acorn.tokTypes.eof){node.body.push(this.parseStatement());}
this.toks.adaptDirectivePrologue(node.body);this.last=this.tok;node.sourceType=this.options.sourceType;return this.finishNode(node,"Program")};lp$1.parseStatement=function(){var starttype=this.tok.type,node=this.startNode(),kind;if(this.toks.isLet()){starttype=acorn.tokTypes._var;kind="let";}
switch(starttype){case acorn.tokTypes._break:case acorn.tokTypes._continue:this.next();var isBreak=starttype===acorn.tokTypes._break;if(this.semicolon()||this.canInsertSemicolon()){node.label=null;}else{node.label=this.tok.type===acorn.tokTypes.name?this.parseIdent():null;this.semicolon();}
return this.finishNode(node,isBreak?"BreakStatement":"ContinueStatement")
case acorn.tokTypes._debugger:this.next();this.semicolon();return this.finishNode(node,"DebuggerStatement")
case acorn.tokTypes._do:this.next();node.body=this.parseStatement();node.test=this.eat(acorn.tokTypes._while)?this.parseParenExpression():this.dummyIdent();this.semicolon();return this.finishNode(node,"DoWhileStatement")
case acorn.tokTypes._for:this.next();var isAwait=this.options.ecmaVersion>=9&&this.inAsync&&this.eatContextual("await");this.pushCx();this.expect(acorn.tokTypes.parenL);if(this.tok.type===acorn.tokTypes.semi){return this.parseFor(node,null)}
var isLet=this.toks.isLet();if(isLet||this.tok.type===acorn.tokTypes._var||this.tok.type===acorn.tokTypes._const){var init$1=this.parseVar(this.startNode(),true,isLet?"let":this.tok.value);if(init$1.declarations.length===1&&(this.tok.type===acorn.tokTypes._in||this.isContextual("of"))){if(this.options.ecmaVersion>=9&&this.tok.type!==acorn.tokTypes._in){node.await=isAwait;}
return this.parseForIn(node,init$1)}
return this.parseFor(node,init$1)}
var init=this.parseExpression(true);if(this.tok.type===acorn.tokTypes._in||this.isContextual("of")){if(this.options.ecmaVersion>=9&&this.tok.type!==acorn.tokTypes._in){node.await=isAwait;}
return this.parseForIn(node,this.toAssignable(init))}
return this.parseFor(node,init)
case acorn.tokTypes._function:this.next();return this.parseFunction(node,true)
case acorn.tokTypes._if:this.next();node.test=this.parseParenExpression();node.consequent=this.parseStatement();node.alternate=this.eat(acorn.tokTypes._else)?this.parseStatement():null;return this.finishNode(node,"IfStatement")
case acorn.tokTypes._return:this.next();if(this.eat(acorn.tokTypes.semi)||this.canInsertSemicolon()){node.argument=null;}
else{node.argument=this.parseExpression();this.semicolon();}
return this.finishNode(node,"ReturnStatement")
case acorn.tokTypes._switch:var blockIndent=this.curIndent,line=this.curLineStart;this.next();node.discriminant=this.parseParenExpression();node.cases=[];this.pushCx();this.expect(acorn.tokTypes.braceL);var cur;while(!this.closes(acorn.tokTypes.braceR,blockIndent,line,true)){if(this.tok.type===acorn.tokTypes._case||this.tok.type===acorn.tokTypes._default){var isCase=this.tok.type===acorn.tokTypes._case;if(cur){this.finishNode(cur,"SwitchCase");}
node.cases.push(cur=this.startNode());cur.consequent=[];this.next();if(isCase){cur.test=this.parseExpression();}
else{cur.test=null;}
this.expect(acorn.tokTypes.colon);}else{if(!cur){node.cases.push(cur=this.startNode());cur.consequent=[];cur.test=null;}
cur.consequent.push(this.parseStatement());}}
if(cur){this.finishNode(cur,"SwitchCase");}
this.popCx();this.eat(acorn.tokTypes.braceR);return this.finishNode(node,"SwitchStatement")
case acorn.tokTypes._throw:this.next();node.argument=this.parseExpression();this.semicolon();return this.finishNode(node,"ThrowStatement")
case acorn.tokTypes._try:this.next();node.block=this.parseBlock();node.handler=null;if(this.tok.type===acorn.tokTypes._catch){var clause=this.startNode();this.next();if(this.eat(acorn.tokTypes.parenL)){clause.param=this.toAssignable(this.parseExprAtom(),true);this.expect(acorn.tokTypes.parenR);}else{clause.param=null;}
clause.body=this.parseBlock();node.handler=this.finishNode(clause,"CatchClause");}
node.finalizer=this.eat(acorn.tokTypes._finally)?this.parseBlock():null;if(!node.handler&&!node.finalizer){return node.block}
return this.finishNode(node,"TryStatement")
case acorn.tokTypes._var:case acorn.tokTypes._const:return this.parseVar(node,false,kind||this.tok.value)
case acorn.tokTypes._while:this.next();node.test=this.parseParenExpression();node.body=this.parseStatement();return this.finishNode(node,"WhileStatement")
case acorn.tokTypes._with:this.next();node.object=this.parseParenExpression();node.body=this.parseStatement();return this.finishNode(node,"WithStatement")
case acorn.tokTypes.braceL:return this.parseBlock()
case acorn.tokTypes.semi:this.next();return this.finishNode(node,"EmptyStatement")
case acorn.tokTypes._class:return this.parseClass(true)
case acorn.tokTypes._import:if(this.options.ecmaVersion>10&&this.lookAhead(1).type===acorn.tokTypes.parenL){node.expression=this.parseExpression();this.semicolon();return this.finishNode(node,"ExpressionStatement")}
return this.parseImport()
case acorn.tokTypes._export:return this.parseExport()
default:if(this.toks.isAsyncFunction()){this.next();this.next();return this.parseFunction(node,true,true)}
var expr=this.parseExpression();if(isDummy(expr)){this.next();if(this.tok.type===acorn.tokTypes.eof){return this.finishNode(node,"EmptyStatement")}
return this.parseStatement()}else if(starttype===acorn.tokTypes.name&&expr.type==="Identifier"&&this.eat(acorn.tokTypes.colon)){node.body=this.parseStatement();node.label=expr;return this.finishNode(node,"LabeledStatement")}else{node.expression=expr;this.semicolon();return this.finishNode(node,"ExpressionStatement")}}};lp$1.parseBlock=function(){var node=this.startNode();this.pushCx();this.expect(acorn.tokTypes.braceL);var blockIndent=this.curIndent,line=this.curLineStart;node.body=[];while(!this.closes(acorn.tokTypes.braceR,blockIndent,line,true))
{node.body.push(this.parseStatement());}
this.popCx();this.eat(acorn.tokTypes.braceR);return this.finishNode(node,"BlockStatement")};lp$1.parseFor=function(node,init){node.init=init;node.test=node.update=null;if(this.eat(acorn.tokTypes.semi)&&this.tok.type!==acorn.tokTypes.semi){node.test=this.parseExpression();}
if(this.eat(acorn.tokTypes.semi)&&this.tok.type!==acorn.tokTypes.parenR){node.update=this.parseExpression();}
this.popCx();this.expect(acorn.tokTypes.parenR);node.body=this.parseStatement();return this.finishNode(node,"ForStatement")};lp$1.parseForIn=function(node,init){var type=this.tok.type===acorn.tokTypes._in?"ForInStatement":"ForOfStatement";this.next();node.left=init;node.right=this.parseExpression();this.popCx();this.expect(acorn.tokTypes.parenR);node.body=this.parseStatement();return this.finishNode(node,type)};lp$1.parseVar=function(node,noIn,kind){node.kind=kind;this.next();node.declarations=[];do{var decl=this.startNode();decl.id=this.options.ecmaVersion>=6?this.toAssignable(this.parseExprAtom(),true):this.parseIdent();decl.init=this.eat(acorn.tokTypes.eq)?this.parseMaybeAssign(noIn):null;node.declarations.push(this.finishNode(decl,"VariableDeclarator"));}while(this.eat(acorn.tokTypes.comma))
if(!node.declarations.length){var decl$1=this.startNode();decl$1.id=this.dummyIdent();node.declarations.push(this.finishNode(decl$1,"VariableDeclarator"));}
if(!noIn){this.semicolon();}
return this.finishNode(node,"VariableDeclaration")};lp$1.parseClass=function(isStatement){var node=this.startNode();this.next();if(this.tok.type===acorn.tokTypes.name){node.id=this.parseIdent();}
else if(isStatement===true){node.id=this.dummyIdent();}
else{node.id=null;}
node.superClass=this.eat(acorn.tokTypes._extends)?this.parseExpression():null;node.body=this.startNode();node.body.body=[];this.pushCx();var indent=this.curIndent+1,line=this.curLineStart;this.eat(acorn.tokTypes.braceL);if(this.curIndent+1<indent){indent=this.curIndent;line=this.curLineStart;}
while(!this.closes(acorn.tokTypes.braceR,indent,line)){if(this.semicolon()){continue}
var method=this.startNode(),isGenerator=(void 0),isAsync=(void 0);if(this.options.ecmaVersion>=6){method.static=false;isGenerator=this.eat(acorn.tokTypes.star);}
this.parsePropertyName(method);if(isDummy(method.key)){if(isDummy(this.parseMaybeAssign())){this.next();}this.eat(acorn.tokTypes.comma);continue}
if(method.key.type==="Identifier"&&!method.computed&&method.key.name==="static"&&(this.tok.type!==acorn.tokTypes.parenL&&this.tok.type!==acorn.tokTypes.braceL)){method.static=true;isGenerator=this.eat(acorn.tokTypes.star);this.parsePropertyName(method);}else{method.static=false;}
if(!method.computed&&method.key.type==="Identifier"&&method.key.name==="async"&&this.tok.type!==acorn.tokTypes.parenL&&!this.canInsertSemicolon()){isAsync=true;isGenerator=this.options.ecmaVersion>=9&&this.eat(acorn.tokTypes.star);this.parsePropertyName(method);}else{isAsync=false;}
if(this.options.ecmaVersion>=5&&method.key.type==="Identifier"&&!method.computed&&(method.key.name==="get"||method.key.name==="set")&&this.tok.type!==acorn.tokTypes.parenL&&this.tok.type!==acorn.tokTypes.braceL){method.kind=method.key.name;this.parsePropertyName(method);method.value=this.parseMethod(false);}else{if(!method.computed&&!method.static&&!isGenerator&&!isAsync&&(method.key.type==="Identifier"&&method.key.name==="constructor"||method.key.type==="Literal"&&method.key.value==="constructor")){method.kind="constructor";}else{method.kind="method";}
method.value=this.parseMethod(isGenerator,isAsync);}
node.body.body.push(this.finishNode(method,"MethodDefinition"));}
this.popCx();if(!this.eat(acorn.tokTypes.braceR)){this.last.end=this.tok.start;if(this.options.locations){this.last.loc.end=this.tok.loc.start;}}
this.semicolon();this.finishNode(node.body,"ClassBody");return this.finishNode(node,isStatement?"ClassDeclaration":"ClassExpression")};lp$1.parseFunction=function(node,isStatement,isAsync){var oldInAsync=this.inAsync,oldInFunction=this.inFunction;this.initFunction(node);if(this.options.ecmaVersion>=6){node.generator=this.eat(acorn.tokTypes.star);}
if(this.options.ecmaVersion>=8){node.async=!!isAsync;}
if(this.tok.type===acorn.tokTypes.name){node.id=this.parseIdent();}
else if(isStatement===true){node.id=this.dummyIdent();}
this.inAsync=node.async;this.inFunction=true;node.params=this.parseFunctionParams();node.body=this.parseBlock();this.toks.adaptDirectivePrologue(node.body.body);this.inAsync=oldInAsync;this.inFunction=oldInFunction;return this.finishNode(node,isStatement?"FunctionDeclaration":"FunctionExpression")};lp$1.parseExport=function(){var node=this.startNode();this.next();if(this.eat(acorn.tokTypes.star)){node.source=this.eatContextual("from")?this.parseExprAtom():this.dummyString();return this.finishNode(node,"ExportAllDeclaration")}
if(this.eat(acorn.tokTypes._default)){var isAsync;if(this.tok.type===acorn.tokTypes._function||(isAsync=this.toks.isAsyncFunction())){var fNode=this.startNode();this.next();if(isAsync){this.next();}
node.declaration=this.parseFunction(fNode,"nullableID",isAsync);}else if(this.tok.type===acorn.tokTypes._class){node.declaration=this.parseClass("nullableID");}else{node.declaration=this.parseMaybeAssign();this.semicolon();}
return this.finishNode(node,"ExportDefaultDeclaration")}
if(this.tok.type.keyword||this.toks.isLet()||this.toks.isAsyncFunction()){node.declaration=this.parseStatement();node.specifiers=[];node.source=null;}else{node.declaration=null;node.specifiers=this.parseExportSpecifierList();node.source=this.eatContextual("from")?this.parseExprAtom():null;this.semicolon();}
return this.finishNode(node,"ExportNamedDeclaration")};lp$1.parseImport=function(){var node=this.startNode();this.next();if(this.tok.type===acorn.tokTypes.string){node.specifiers=[];node.source=this.parseExprAtom();}else{var elt;if(this.tok.type===acorn.tokTypes.name&&this.tok.value!=="from"){elt=this.startNode();elt.local=this.parseIdent();this.finishNode(elt,"ImportDefaultSpecifier");this.eat(acorn.tokTypes.comma);}
node.specifiers=this.parseImportSpecifiers();node.source=this.eatContextual("from")&&this.tok.type===acorn.tokTypes.string?this.parseExprAtom():this.dummyString();if(elt){node.specifiers.unshift(elt);}}
this.semicolon();return this.finishNode(node,"ImportDeclaration")};lp$1.parseImportSpecifiers=function(){var elts=[];if(this.tok.type===acorn.tokTypes.star){var elt=this.startNode();this.next();elt.local=this.eatContextual("as")?this.parseIdent():this.dummyIdent();elts.push(this.finishNode(elt,"ImportNamespaceSpecifier"));}else{var indent=this.curIndent,line=this.curLineStart,continuedLine=this.nextLineStart;this.pushCx();this.eat(acorn.tokTypes.braceL);if(this.curLineStart>continuedLine){continuedLine=this.curLineStart;}
while(!this.closes(acorn.tokTypes.braceR,indent+(this.curLineStart<=continuedLine?1:0),line)){var elt$1=this.startNode();if(this.eat(acorn.tokTypes.star)){elt$1.local=this.eatContextual("as")?this.parseIdent():this.dummyIdent();this.finishNode(elt$1,"ImportNamespaceSpecifier");}else{if(this.isContextual("from")){break}
elt$1.imported=this.parseIdent();if(isDummy(elt$1.imported)){break}
elt$1.local=this.eatContextual("as")?this.parseIdent():elt$1.imported;this.finishNode(elt$1,"ImportSpecifier");}
elts.push(elt$1);this.eat(acorn.tokTypes.comma);}
this.eat(acorn.tokTypes.braceR);this.popCx();}
return elts};lp$1.parseExportSpecifierList=function(){var elts=[];var indent=this.curIndent,line=this.curLineStart,continuedLine=this.nextLineStart;this.pushCx();this.eat(acorn.tokTypes.braceL);if(this.curLineStart>continuedLine){continuedLine=this.curLineStart;}
while(!this.closes(acorn.tokTypes.braceR,indent+(this.curLineStart<=continuedLine?1:0),line)){if(this.isContextual("from")){break}
var elt=this.startNode();elt.local=this.parseIdent();if(isDummy(elt.local)){break}
elt.exported=this.eatContextual("as")?this.parseIdent():elt.local;this.finishNode(elt,"ExportSpecifier");elts.push(elt);this.eat(acorn.tokTypes.comma);}
this.eat(acorn.tokTypes.braceR);this.popCx();return elts};var lp$2=LooseParser.prototype;lp$2.checkLVal=function(expr){if(!expr){return expr}
switch(expr.type){case"Identifier":case"MemberExpression":return expr
case"ParenthesizedExpression":expr.expression=this.checkLVal(expr.expression);return expr
default:return this.dummyIdent()}};lp$2.parseExpression=function(noIn){var start=this.storeCurrentPos();var expr=this.parseMaybeAssign(noIn);if(this.tok.type===acorn.tokTypes.comma){var node=this.startNodeAt(start);node.expressions=[expr];while(this.eat(acorn.tokTypes.comma)){node.expressions.push(this.parseMaybeAssign(noIn));}
return this.finishNode(node,"SequenceExpression")}
return expr};lp$2.parseParenExpression=function(){this.pushCx();this.expect(acorn.tokTypes.parenL);var val=this.parseExpression();this.popCx();this.expect(acorn.tokTypes.parenR);return val};lp$2.parseMaybeAssign=function(noIn){if(this.toks.isContextual("yield")){var node=this.startNode();this.next();if(this.semicolon()||this.canInsertSemicolon()||(this.tok.type!==acorn.tokTypes.star&&!this.tok.type.startsExpr)){node.delegate=false;node.argument=null;}else{node.delegate=this.eat(acorn.tokTypes.star);node.argument=this.parseMaybeAssign();}
return this.finishNode(node,"YieldExpression")}
var start=this.storeCurrentPos();var left=this.parseMaybeConditional(noIn);if(this.tok.type.isAssign){var node$1=this.startNodeAt(start);node$1.operator=this.tok.value;node$1.left=this.tok.type===acorn.tokTypes.eq?this.toAssignable(left):this.checkLVal(left);this.next();node$1.right=this.parseMaybeAssign(noIn);return this.finishNode(node$1,"AssignmentExpression")}
return left};lp$2.parseMaybeConditional=function(noIn){var start=this.storeCurrentPos();var expr=this.parseExprOps(noIn);if(this.eat(acorn.tokTypes.question)){var node=this.startNodeAt(start);node.test=expr;node.consequent=this.parseMaybeAssign();node.alternate=this.expect(acorn.tokTypes.colon)?this.parseMaybeAssign(noIn):this.dummyIdent();return this.finishNode(node,"ConditionalExpression")}
return expr};lp$2.parseExprOps=function(noIn){var start=this.storeCurrentPos();var indent=this.curIndent,line=this.curLineStart;return this.parseExprOp(this.parseMaybeUnary(false),start,-1,noIn,indent,line)};lp$2.parseExprOp=function(left,start,minPrec,noIn,indent,line){if(this.curLineStart!==line&&this.curIndent<indent&&this.tokenStartsLine()){return left}
var prec=this.tok.type.binop;if(prec!=null&&(!noIn||this.tok.type!==acorn.tokTypes._in)){if(prec>minPrec){var node=this.startNodeAt(start);node.left=left;node.operator=this.tok.value;this.next();if(this.curLineStart!==line&&this.curIndent<indent&&this.tokenStartsLine()){node.right=this.dummyIdent();}else{var rightStart=this.storeCurrentPos();node.right=this.parseExprOp(this.parseMaybeUnary(false),rightStart,prec,noIn,indent,line);}
this.finishNode(node,/&&|\|\|/.test(node.operator)?"LogicalExpression":"BinaryExpression");return this.parseExprOp(node,start,minPrec,noIn,indent,line)}}
return left};lp$2.parseMaybeUnary=function(sawUnary){var start=this.storeCurrentPos(),expr;if(this.options.ecmaVersion>=8&&this.toks.isContextual("await")&&(this.inAsync||(!this.inFunction&&this.options.allowAwaitOutsideFunction))){expr=this.parseAwait();sawUnary=true;}else if(this.tok.type.prefix){var node=this.startNode(),update=this.tok.type===acorn.tokTypes.incDec;if(!update){sawUnary=true;}
node.operator=this.tok.value;node.prefix=true;this.next();node.argument=this.parseMaybeUnary(true);if(update){node.argument=this.checkLVal(node.argument);}
expr=this.finishNode(node,update?"UpdateExpression":"UnaryExpression");}else if(this.tok.type===acorn.tokTypes.ellipsis){var node$1=this.startNode();this.next();node$1.argument=this.parseMaybeUnary(sawUnary);expr=this.finishNode(node$1,"SpreadElement");}else{expr=this.parseExprSubscripts();while(this.tok.type.postfix&&!this.canInsertSemicolon()){var node$2=this.startNodeAt(start);node$2.operator=this.tok.value;node$2.prefix=false;node$2.argument=this.checkLVal(expr);this.next();expr=this.finishNode(node$2,"UpdateExpression");}}
if(!sawUnary&&this.eat(acorn.tokTypes.starstar)){var node$3=this.startNodeAt(start);node$3.operator="**";node$3.left=expr;node$3.right=this.parseMaybeUnary(false);return this.finishNode(node$3,"BinaryExpression")}
return expr};lp$2.parseExprSubscripts=function(){var start=this.storeCurrentPos();return this.parseSubscripts(this.parseExprAtom(),start,false,this.curIndent,this.curLineStart)};lp$2.parseSubscripts=function(base,start,noCalls,startIndent,line){for(;;){if(this.curLineStart!==line&&this.curIndent<=startIndent&&this.tokenStartsLine()){if(this.tok.type===acorn.tokTypes.dot&&this.curIndent===startIndent)
{--startIndent;}
else
{return base}}
var maybeAsyncArrow=base.type==="Identifier"&&base.name==="async"&&!this.canInsertSemicolon();if(this.eat(acorn.tokTypes.dot)){var node=this.startNodeAt(start);node.object=base;if(this.curLineStart!==line&&this.curIndent<=startIndent&&this.tokenStartsLine())
{node.property=this.dummyIdent();}
else
{node.property=this.parsePropertyAccessor()||this.dummyIdent();}
node.computed=false;base=this.finishNode(node,"MemberExpression");}else if(this.tok.type===acorn.tokTypes.bracketL){this.pushCx();this.next();var node$1=this.startNodeAt(start);node$1.object=base;node$1.property=this.parseExpression();node$1.computed=true;this.popCx();this.expect(acorn.tokTypes.bracketR);base=this.finishNode(node$1,"MemberExpression");}else if(!noCalls&&this.tok.type===acorn.tokTypes.parenL){var exprList=this.parseExprList(acorn.tokTypes.parenR);if(maybeAsyncArrow&&this.eat(acorn.tokTypes.arrow))
{return this.parseArrowExpression(this.startNodeAt(start),exprList,true)}
var node$2=this.startNodeAt(start);node$2.callee=base;node$2.arguments=exprList;base=this.finishNode(node$2,"CallExpression");}else if(this.tok.type===acorn.tokTypes.backQuote){var node$3=this.startNodeAt(start);node$3.tag=base;node$3.quasi=this.parseTemplate();base=this.finishNode(node$3,"TaggedTemplateExpression");}else{return base}}};lp$2.parseExprAtom=function(){var node;switch(this.tok.type){case acorn.tokTypes._this:case acorn.tokTypes._super:var type=this.tok.type===acorn.tokTypes._this?"ThisExpression":"Super";node=this.startNode();this.next();return this.finishNode(node,type)
case acorn.tokTypes.name:var start=this.storeCurrentPos();var id=this.parseIdent();var isAsync=false;if(id.name==="async"&&!this.canInsertSemicolon()){if(this.eat(acorn.tokTypes._function))
{return this.parseFunction(this.startNodeAt(start),false,true)}
if(this.tok.type===acorn.tokTypes.name){id=this.parseIdent();isAsync=true;}}
return this.eat(acorn.tokTypes.arrow)?this.parseArrowExpression(this.startNodeAt(start),[id],isAsync):id
case acorn.tokTypes.regexp:node=this.startNode();var val=this.tok.value;node.regex={pattern:val.pattern,flags:val.flags};node.value=val.value;node.raw=this.input.slice(this.tok.start,this.tok.end);this.next();return this.finishNode(node,"Literal")
case acorn.tokTypes.num:case acorn.tokTypes.string:node=this.startNode();node.value=this.tok.value;node.raw=this.input.slice(this.tok.start,this.tok.end);if(this.tok.type===acorn.tokTypes.num&&node.raw.charCodeAt(node.raw.length-1)===110){node.bigint=node.raw.slice(0,-1);}
this.next();return this.finishNode(node,"Literal")
case acorn.tokTypes._null:case acorn.tokTypes._true:case acorn.tokTypes._false:node=this.startNode();node.value=this.tok.type===acorn.tokTypes._null?null:this.tok.type===acorn.tokTypes._true;node.raw=this.tok.type.keyword;this.next();return this.finishNode(node,"Literal")
case acorn.tokTypes.parenL:var parenStart=this.storeCurrentPos();this.next();var inner=this.parseExpression();this.expect(acorn.tokTypes.parenR);if(this.eat(acorn.tokTypes.arrow)){var params=inner.expressions||[inner];if(params.length&&isDummy(params[params.length-1]))
{params.pop();}
return this.parseArrowExpression(this.startNodeAt(parenStart),params)}
if(this.options.preserveParens){var par=this.startNodeAt(parenStart);par.expression=inner;inner=this.finishNode(par,"ParenthesizedExpression");}
return inner
case acorn.tokTypes.bracketL:node=this.startNode();node.elements=this.parseExprList(acorn.tokTypes.bracketR,true);return this.finishNode(node,"ArrayExpression")
case acorn.tokTypes.braceL:return this.parseObj()
case acorn.tokTypes._class:return this.parseClass(false)
case acorn.tokTypes._function:node=this.startNode();this.next();return this.parseFunction(node,false)
case acorn.tokTypes._new:return this.parseNew()
case acorn.tokTypes.backQuote:return this.parseTemplate()
case acorn.tokTypes._import:if(this.options.ecmaVersion>=11){return this.parseExprImport()}else{return this.dummyIdent()}
default:return this.dummyIdent()}};lp$2.parseExprImport=function(){var node=this.startNode();this.next();switch(this.tok.type){case acorn.tokTypes.parenL:return this.parseDynamicImport(node)
default:node.name="import";return this.finishNode(node,"Identifier")}};lp$2.parseDynamicImport=function(node){node.source=this.parseExprList(acorn.tokTypes.parenR)[0]||this.dummyString();return this.finishNode(node,"ImportExpression")};lp$2.parseNew=function(){var node=this.startNode(),startIndent=this.curIndent,line=this.curLineStart;var meta=this.parseIdent(true);if(this.options.ecmaVersion>=6&&this.eat(acorn.tokTypes.dot)){node.meta=meta;node.property=this.parseIdent(true);return this.finishNode(node,"MetaProperty")}
var start=this.storeCurrentPos();node.callee=this.parseSubscripts(this.parseExprAtom(),start,true,startIndent,line);if(this.tok.type===acorn.tokTypes.parenL){node.arguments=this.parseExprList(acorn.tokTypes.parenR);}else{node.arguments=[];}
return this.finishNode(node,"NewExpression")};lp$2.parseTemplateElement=function(){var elem=this.startNode();if(this.tok.type===acorn.tokTypes.invalidTemplate){elem.value={raw:this.tok.value,cooked:null};}else{elem.value={raw:this.input.slice(this.tok.start,this.tok.end).replace(/\r\n?/g,"\n"),cooked:this.tok.value};}
this.next();elem.tail=this.tok.type===acorn.tokTypes.backQuote;return this.finishNode(elem,"TemplateElement")};lp$2.parseTemplate=function(){var node=this.startNode();this.next();node.expressions=[];var curElt=this.parseTemplateElement();node.quasis=[curElt];while(!curElt.tail){this.next();node.expressions.push(this.parseExpression());if(this.expect(acorn.tokTypes.braceR)){curElt=this.parseTemplateElement();}else{curElt=this.startNode();curElt.value={cooked:"",raw:""};curElt.tail=true;this.finishNode(curElt,"TemplateElement");}
node.quasis.push(curElt);}
this.expect(acorn.tokTypes.backQuote);return this.finishNode(node,"TemplateLiteral")};lp$2.parseObj=function(){var node=this.startNode();node.properties=[];this.pushCx();var indent=this.curIndent+1,line=this.curLineStart;this.eat(acorn.tokTypes.braceL);if(this.curIndent+1<indent){indent=this.curIndent;line=this.curLineStart;}
while(!this.closes(acorn.tokTypes.braceR,indent,line)){var prop=this.startNode(),isGenerator=(void 0),isAsync=(void 0),start=(void 0);if(this.options.ecmaVersion>=9&&this.eat(acorn.tokTypes.ellipsis)){prop.argument=this.parseMaybeAssign();node.properties.push(this.finishNode(prop,"SpreadElement"));this.eat(acorn.tokTypes.comma);continue}
if(this.options.ecmaVersion>=6){start=this.storeCurrentPos();prop.method=false;prop.shorthand=false;isGenerator=this.eat(acorn.tokTypes.star);}
this.parsePropertyName(prop);if(this.toks.isAsyncProp(prop)){isAsync=true;isGenerator=this.options.ecmaVersion>=9&&this.eat(acorn.tokTypes.star);this.parsePropertyName(prop);}else{isAsync=false;}
if(isDummy(prop.key)){if(isDummy(this.parseMaybeAssign())){this.next();}this.eat(acorn.tokTypes.comma);continue}
if(this.eat(acorn.tokTypes.colon)){prop.kind="init";prop.value=this.parseMaybeAssign();}else if(this.options.ecmaVersion>=6&&(this.tok.type===acorn.tokTypes.parenL||this.tok.type===acorn.tokTypes.braceL)){prop.kind="init";prop.method=true;prop.value=this.parseMethod(isGenerator,isAsync);}else if(this.options.ecmaVersion>=5&&prop.key.type==="Identifier"&&!prop.computed&&(prop.key.name==="get"||prop.key.name==="set")&&(this.tok.type!==acorn.tokTypes.comma&&this.tok.type!==acorn.tokTypes.braceR&&this.tok.type!==acorn.tokTypes.eq)){prop.kind=prop.key.name;this.parsePropertyName(prop);prop.value=this.parseMethod(false);}else{prop.kind="init";if(this.options.ecmaVersion>=6){if(this.eat(acorn.tokTypes.eq)){var assign=this.startNodeAt(start);assign.operator="=";assign.left=prop.key;assign.right=this.parseMaybeAssign();prop.value=this.finishNode(assign,"AssignmentExpression");}else{prop.value=prop.key;}}else{prop.value=this.dummyIdent();}
prop.shorthand=true;}
node.properties.push(this.finishNode(prop,"Property"));this.eat(acorn.tokTypes.comma);}
this.popCx();if(!this.eat(acorn.tokTypes.braceR)){this.last.end=this.tok.start;if(this.options.locations){this.last.loc.end=this.tok.loc.start;}}
return this.finishNode(node,"ObjectExpression")};lp$2.parsePropertyName=function(prop){if(this.options.ecmaVersion>=6){if(this.eat(acorn.tokTypes.bracketL)){prop.computed=true;prop.key=this.parseExpression();this.expect(acorn.tokTypes.bracketR);return}else{prop.computed=false;}}
var key=(this.tok.type===acorn.tokTypes.num||this.tok.type===acorn.tokTypes.string)?this.parseExprAtom():this.parseIdent();prop.key=key||this.dummyIdent();};lp$2.parsePropertyAccessor=function(){if(this.tok.type===acorn.tokTypes.name||this.tok.type.keyword){return this.parseIdent()}};lp$2.parseIdent=function(){var name=this.tok.type===acorn.tokTypes.name?this.tok.value:this.tok.type.keyword;if(!name){return this.dummyIdent()}
var node=this.startNode();this.next();node.name=name;return this.finishNode(node,"Identifier")};lp$2.initFunction=function(node){node.id=null;node.params=[];if(this.options.ecmaVersion>=6){node.generator=false;node.expression=false;}
if(this.options.ecmaVersion>=8)
{node.async=false;}};lp$2.toAssignable=function(node,binding){if(!node||node.type==="Identifier"||(node.type==="MemberExpression"&&!binding));else if(node.type==="ParenthesizedExpression"){this.toAssignable(node.expression,binding);}else if(this.options.ecmaVersion<6){return this.dummyIdent()}else if(node.type==="ObjectExpression"){node.type="ObjectPattern";for(var i=0,list=node.properties;i<list.length;i+=1)
{var prop=list[i];this.toAssignable(prop,binding);}}else if(node.type==="ArrayExpression"){node.type="ArrayPattern";this.toAssignableList(node.elements,binding);}else if(node.type==="Property"){this.toAssignable(node.value,binding);}else if(node.type==="SpreadElement"){node.type="RestElement";this.toAssignable(node.argument,binding);}else if(node.type==="AssignmentExpression"){node.type="AssignmentPattern";delete node.operator;}else{return this.dummyIdent()}
return node};lp$2.toAssignableList=function(exprList,binding){for(var i=0,list=exprList;i<list.length;i+=1)
{var expr=list[i];this.toAssignable(expr,binding);}
return exprList};lp$2.parseFunctionParams=function(params){params=this.parseExprList(acorn.tokTypes.parenR);return this.toAssignableList(params,true)};lp$2.parseMethod=function(isGenerator,isAsync){var node=this.startNode(),oldInAsync=this.inAsync,oldInFunction=this.inFunction;this.initFunction(node);if(this.options.ecmaVersion>=6)
{node.generator=!!isGenerator;}
if(this.options.ecmaVersion>=8)
{node.async=!!isAsync;}
this.inAsync=node.async;this.inFunction=true;node.params=this.parseFunctionParams();node.body=this.parseBlock();this.toks.adaptDirectivePrologue(node.body.body);this.inAsync=oldInAsync;this.inFunction=oldInFunction;return this.finishNode(node,"FunctionExpression")};lp$2.parseArrowExpression=function(node,params,isAsync){var oldInAsync=this.inAsync,oldInFunction=this.inFunction;this.initFunction(node);if(this.options.ecmaVersion>=8)
{node.async=!!isAsync;}
this.inAsync=node.async;this.inFunction=true;node.params=this.toAssignableList(params,true);node.expression=this.tok.type!==acorn.tokTypes.braceL;if(node.expression){node.body=this.parseMaybeAssign();}else{node.body=this.parseBlock();this.toks.adaptDirectivePrologue(node.body.body);}
this.inAsync=oldInAsync;this.inFunction=oldInFunction;return this.finishNode(node,"ArrowFunctionExpression")};lp$2.parseExprList=function(close,allowEmpty){this.pushCx();var indent=this.curIndent,line=this.curLineStart,elts=[];this.next();while(!this.closes(close,indent+1,line)){if(this.eat(acorn.tokTypes.comma)){elts.push(allowEmpty?null:this.dummyIdent());continue}
var elt=this.parseMaybeAssign();if(isDummy(elt)){if(this.closes(close,indent,line)){break}
this.next();}else{elts.push(elt);}
this.eat(acorn.tokTypes.comma);}
this.popCx();if(!this.eat(close)){this.last.end=this.tok.start;if(this.options.locations){this.last.loc.end=this.tok.loc.start;}}
return elts};lp$2.parseAwait=function(){var node=this.startNode();this.next();node.argument=this.parseMaybeUnary();return this.finishNode(node,"AwaitExpression")};acorn.defaultOptions.tabSize=4;function parse(input,options){return LooseParser.parse(input,options)}
exports.LooseParser=LooseParser;exports.parse=parse;Object.defineProperty(exports,'__esModule',{value:true});}));(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("css",function(config,parserConfig){var inline=parserConfig.inline;if(!parserConfig.propertyKeywords)parserConfig=CodeMirror.resolveMode("text/css");var indentUnit=config.indentUnit,tokenHooks=parserConfig.tokenHooks,documentTypes=parserConfig.documentTypes||{},mediaTypes=parserConfig.mediaTypes||{},mediaFeatures=parserConfig.mediaFeatures||{},mediaValueKeywords=parserConfig.mediaValueKeywords||{},propertyKeywords=parserConfig.propertyKeywords||{},nonStandardPropertyKeywords=parserConfig.nonStandardPropertyKeywords||{},fontProperties=parserConfig.fontProperties||{},counterDescriptors=parserConfig.counterDescriptors||{},colorKeywords=parserConfig.colorKeywords||{},valueKeywords=parserConfig.valueKeywords||{},allowNested=parserConfig.allowNested,lineComment=parserConfig.lineComment,supportsAtComponent=parserConfig.supportsAtComponent===true;var type,override;function ret(style,tp){type=tp;return style;}
function tokenBase(stream,state){var ch=stream.next();if(tokenHooks[ch]){var result=tokenHooks[ch](stream,state);if(result!==false)return result;}
if(ch=="@"){stream.eatWhile(/[\w\\\-]/);return ret("def",stream.current());}else if(ch=="="||(ch=="~"||ch=="|")&&stream.eat("=")){return ret(null,"compare");}else if(ch=="\""||ch=="'"){state.tokenize=tokenString(ch);return state.tokenize(stream,state);}else if(ch=="#"){stream.eatWhile(/[\w\\\-]/);return ret("atom","hash");}else if(ch=="!"){stream.match(/^\s*\w*/);return ret("keyword","important");}else if(/\d/.test(ch)||ch=="."&&stream.eat(/\d/)){stream.eatWhile(/[\w.%]/);return ret("number","unit");}else if(ch==="-"){if(/[\d.]/.test(stream.peek())){stream.eatWhile(/[\w.%]/);return ret("number","unit");}else if(stream.match(/^-[\w\\\-]*/)){stream.eatWhile(/[\w\\\-]/);if(stream.match(/^\s*:/,false))
return ret("variable-2","variable-definition");return ret("variable-2","variable");}else if(stream.match(/^\w+-/)){return ret("meta","meta");}}else if(/[,+>*\/]/.test(ch)){return ret(null,"select-op");}else if(ch=="."&&stream.match(/^-?[_a-z][_a-z0-9-]*/i)){return ret("qualifier","qualifier");}else if(/[:;{}\[\]\(\)]/.test(ch)){return ret(null,ch);}else if(stream.match(/[\w-.]+(?=\()/)){if(/^(url(-prefix)?|domain|regexp)$/.test(stream.current().toLowerCase())){state.tokenize=tokenParenthesized;}
return ret("variable callee","variable");}else if(/[\w\\\-]/.test(ch)){stream.eatWhile(/[\w\\\-]/);return ret("property","word");}else{return ret(null,null);}}
function tokenString(quote){return function(stream,state){var escaped=false,ch;while((ch=stream.next())!=null){if(ch==quote&&!escaped){if(quote==")")stream.backUp(1);break;}
escaped=!escaped&&ch=="\\";}
if(ch==quote||!escaped&&quote!=")")state.tokenize=null;return ret("string","string");};}
function tokenParenthesized(stream,state){stream.next();if(!stream.match(/\s*[\"\')]/,false))
state.tokenize=tokenString(")");else
state.tokenize=null;return ret(null,"(");}
function Context(type,indent,prev){this.type=type;this.indent=indent;this.prev=prev;}
function pushContext(state,stream,type,indent){state.context=new Context(type,stream.indentation()+(indent===false?0:indentUnit),state.context);return type;}
function popContext(state){if(state.context.prev)
state.context=state.context.prev;return state.context.type;}
function pass(type,stream,state){return states[state.context.type](type,stream,state);}
function popAndPass(type,stream,state,n){for(var i=n||1;i>0;i--)
state.context=state.context.prev;return pass(type,stream,state);}
function wordAsValue(stream){var word=stream.current().toLowerCase();if(valueKeywords.hasOwnProperty(word))
override="atom";else if(colorKeywords.hasOwnProperty(word))
override="keyword";else
override="variable";}
var states={};states.top=function(type,stream,state){if(type=="{"){return pushContext(state,stream,"block");}else if(type=="}"&&state.context.prev){return popContext(state);}else if(supportsAtComponent&&/@component/i.test(type)){return pushContext(state,stream,"atComponentBlock");}else if(/^@(-moz-)?document$/i.test(type)){return pushContext(state,stream,"documentTypes");}else if(/^@(media|supports|(-moz-)?document|import)$/i.test(type)){return pushContext(state,stream,"atBlock");}else if(/^@(font-face|counter-style)/i.test(type)){state.stateArg=type;return"restricted_atBlock_before";}else if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)){return"keyframes";}else if(type&&type.charAt(0)=="@"){return pushContext(state,stream,"at");}else if(type=="hash"){override="builtin";}else if(type=="word"){override="tag";}else if(type=="variable-definition"){return"maybeprop";}else if(type=="interpolation"){return pushContext(state,stream,"interpolation");}else if(type==":"){return"pseudo";}else if(allowNested&&type=="("){return pushContext(state,stream,"parens");}
return state.context.type;};states.block=function(type,stream,state){if(type=="word"){var word=stream.current().toLowerCase();if(propertyKeywords.hasOwnProperty(word)){override="property";return"maybeprop";}else if(nonStandardPropertyKeywords.hasOwnProperty(word)){override="string-2";return"maybeprop";}else if(allowNested){override=stream.match(/^\s*:(?:\s|$)/,false)?"property":"tag";return"block";}else{override+=" error";return"maybeprop";}}else if(type=="meta"){return"block";}else if(!allowNested&&(type=="hash"||type=="qualifier")){override="error";return"block";}else{return states.top(type,stream,state);}};states.maybeprop=function(type,stream,state){if(type==":")return pushContext(state,stream,"prop");return pass(type,stream,state);};states.prop=function(type,stream,state){if(type==";")return popContext(state);if(type=="{"&&allowNested)return pushContext(state,stream,"propBlock");if(type=="}"||type=="{")return popAndPass(type,stream,state);if(type=="(")return pushContext(state,stream,"parens");if(type=="hash"&&!/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(stream.current())){override+=" error";}else if(type=="word"){wordAsValue(stream);}else if(type=="interpolation"){return pushContext(state,stream,"interpolation");}
return"prop";};states.propBlock=function(type,_stream,state){if(type=="}")return popContext(state);if(type=="word"){override="property";return"maybeprop";}
return state.context.type;};states.parens=function(type,stream,state){if(type=="{"||type=="}")return popAndPass(type,stream,state);if(type==")")return popContext(state);if(type=="(")return pushContext(state,stream,"parens");if(type=="interpolation")return pushContext(state,stream,"interpolation");if(type=="word")wordAsValue(stream);return"parens";};states.pseudo=function(type,stream,state){if(type=="meta")return"pseudo";if(type=="word"){override="variable-3";return state.context.type;}
return pass(type,stream,state);};states.documentTypes=function(type,stream,state){if(type=="word"&&documentTypes.hasOwnProperty(stream.current())){override="tag";return state.context.type;}else{return states.atBlock(type,stream,state);}};states.atBlock=function(type,stream,state){if(type=="(")return pushContext(state,stream,"atBlock_parens");if(type=="}"||type==";")return popAndPass(type,stream,state);if(type=="{")return popContext(state)&&pushContext(state,stream,allowNested?"block":"top");if(type=="interpolation")return pushContext(state,stream,"interpolation");if(type=="word"){var word=stream.current().toLowerCase();if(word=="only"||word=="not"||word=="and"||word=="or")
override="keyword";else if(mediaTypes.hasOwnProperty(word))
override="attribute";else if(mediaFeatures.hasOwnProperty(word))
override="property";else if(mediaValueKeywords.hasOwnProperty(word))
override="keyword";else if(propertyKeywords.hasOwnProperty(word))
override="property";else if(nonStandardPropertyKeywords.hasOwnProperty(word))
override="string-2";else if(valueKeywords.hasOwnProperty(word))
override="atom";else if(colorKeywords.hasOwnProperty(word))
override="keyword";else
override="error";}
return state.context.type;};states.atComponentBlock=function(type,stream,state){if(type=="}")
return popAndPass(type,stream,state);if(type=="{")
return popContext(state)&&pushContext(state,stream,allowNested?"block":"top",false);if(type=="word")
override="error";return state.context.type;};states.atBlock_parens=function(type,stream,state){if(type==")")return popContext(state);if(type=="{"||type=="}")return popAndPass(type,stream,state,2);return states.atBlock(type,stream,state);};states.restricted_atBlock_before=function(type,stream,state){if(type=="{")
return pushContext(state,stream,"restricted_atBlock");if(type=="word"&&state.stateArg=="@counter-style"){override="variable";return"restricted_atBlock_before";}
return pass(type,stream,state);};states.restricted_atBlock=function(type,stream,state){if(type=="}"){state.stateArg=null;return popContext(state);}
if(type=="word"){if((state.stateArg=="@font-face"&&!fontProperties.hasOwnProperty(stream.current().toLowerCase()))||(state.stateArg=="@counter-style"&&!counterDescriptors.hasOwnProperty(stream.current().toLowerCase())))
override="error";else
override="property";return"maybeprop";}
return"restricted_atBlock";};states.keyframes=function(type,stream,state){if(type=="word"){override="variable";return"keyframes";}
if(type=="{")return pushContext(state,stream,"top");return pass(type,stream,state);};states.at=function(type,stream,state){if(type==";")return popContext(state);if(type=="{"||type=="}")return popAndPass(type,stream,state);if(type=="word")override="tag";else if(type=="hash")override="builtin";return"at";};states.interpolation=function(type,stream,state){if(type=="}")return popContext(state);if(type=="{"||type==";")return popAndPass(type,stream,state);if(type=="word")override="variable";else if(type!="variable"&&type!="("&&type!=")")override="error";return"interpolation";};return{startState:function(base){return{tokenize:null,state:inline?"block":"top",stateArg:null,context:new Context(inline?"block":"top",base||0,null)};},token:function(stream,state){if(!state.tokenize&&stream.eatSpace())return null;var style=(state.tokenize||tokenBase)(stream,state);if(style&&typeof style=="object"){type=style[1];style=style[0];}
override=style;if(type!="comment")
state.state=states[state.state](type,stream,state);return override;},indent:function(state,textAfter){var cx=state.context,ch=textAfter&&textAfter.charAt(0);var indent=cx.indent;if(cx.type=="prop"&&(ch=="}"||ch==")"))cx=cx.prev;if(cx.prev){if(ch=="}"&&(cx.type=="block"||cx.type=="top"||cx.type=="interpolation"||cx.type=="restricted_atBlock")){cx=cx.prev;indent=cx.indent;}else if(ch==")"&&(cx.type=="parens"||cx.type=="atBlock_parens")||ch=="{"&&(cx.type=="at"||cx.type=="atBlock")){indent=Math.max(0,cx.indent-indentUnit);}}
return indent;},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:lineComment,fold:"brace"};});function keySet(array){var keys={};for(var i=0;i<array.length;++i){keys[array[i].toLowerCase()]=true;}
return keys;}
var documentTypes_=["domain","regexp","url","url-prefix"],documentTypes=keySet(documentTypes_);var mediaTypes_=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],mediaTypes=keySet(mediaTypes_);var mediaFeatures_=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],mediaFeatures=keySet(mediaFeatures_);var mediaValueKeywords_=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],mediaValueKeywords=keySet(mediaValueKeywords_);var propertyKeywords_=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],propertyKeywords=keySet(propertyKeywords_);var nonStandardPropertyKeywords_=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],nonStandardPropertyKeywords=keySet(nonStandardPropertyKeywords_);var fontProperties_=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],fontProperties=keySet(fontProperties_);var counterDescriptors_=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],counterDescriptors=keySet(counterDescriptors_);var colorKeywords_=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],colorKeywords=keySet(colorKeywords_);var valueKeywords_=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","linktext","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visitedtext","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],valueKeywords=keySet(valueKeywords_);var allWords=documentTypes_.concat(mediaTypes_).concat(mediaFeatures_).concat(mediaValueKeywords_).concat(propertyKeywords_).concat(nonStandardPropertyKeywords_).concat(colorKeywords_).concat(valueKeywords_);CodeMirror.registerHelper("hintWords","css",allWords);function tokenCComment(stream,state){var maybeEnd=false,ch;while((ch=stream.next())!=null){if(maybeEnd&&ch=="/"){state.tokenize=null;break;}
maybeEnd=(ch=="*");}
return["comment","comment"];}
CodeMirror.defineMIME("text/css",{documentTypes:documentTypes,mediaTypes:mediaTypes,mediaFeatures:mediaFeatures,mediaValueKeywords:mediaValueKeywords,propertyKeywords:propertyKeywords,nonStandardPropertyKeywords:nonStandardPropertyKeywords,fontProperties:fontProperties,counterDescriptors:counterDescriptors,colorKeywords:colorKeywords,valueKeywords:valueKeywords,tokenHooks:{"/":function(stream,state){if(!stream.eat("*"))return false;state.tokenize=tokenCComment;return tokenCComment(stream,state);}},name:"css"});CodeMirror.defineMIME("text/x-scss",{mediaTypes:mediaTypes,mediaFeatures:mediaFeatures,mediaValueKeywords:mediaValueKeywords,propertyKeywords:propertyKeywords,nonStandardPropertyKeywords:nonStandardPropertyKeywords,colorKeywords:colorKeywords,valueKeywords:valueKeywords,fontProperties:fontProperties,allowNested:true,lineComment:"//",tokenHooks:{"/":function(stream,state){if(stream.eat("/")){stream.skipToEnd();return["comment","comment"];}else if(stream.eat("*")){state.tokenize=tokenCComment;return tokenCComment(stream,state);}else{return["operator","operator"];}},":":function(stream){if(stream.match(/\s*\{/,false))
return[null,null]
return false;},"$":function(stream){stream.match(/^[\w-]+/);if(stream.match(/^\s*:/,false))
return["variable-2","variable-definition"];return["variable-2","variable"];},"#":function(stream){if(!stream.eat("{"))return false;return[null,"interpolation"];}},name:"css",helperType:"scss"});CodeMirror.defineMIME("text/x-less",{mediaTypes:mediaTypes,mediaFeatures:mediaFeatures,mediaValueKeywords:mediaValueKeywords,propertyKeywords:propertyKeywords,nonStandardPropertyKeywords:nonStandardPropertyKeywords,colorKeywords:colorKeywords,valueKeywords:valueKeywords,fontProperties:fontProperties,allowNested:true,lineComment:"//",tokenHooks:{"/":function(stream,state){if(stream.eat("/")){stream.skipToEnd();return["comment","comment"];}else if(stream.eat("*")){state.tokenize=tokenCComment;return tokenCComment(stream,state);}else{return["operator","operator"];}},"@":function(stream){if(stream.eat("{"))return[null,"interpolation"];if(stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,false))return false;stream.eatWhile(/[\w\\\-]/);if(stream.match(/^\s*:/,false))
return["variable-2","variable-definition"];return["variable-2","variable"];},"&":function(){return["atom","atom"];}},name:"css",helperType:"less"});CodeMirror.defineMIME("text/x-gss",{documentTypes:documentTypes,mediaTypes:mediaTypes,mediaFeatures:mediaFeatures,propertyKeywords:propertyKeywords,nonStandardPropertyKeywords:nonStandardPropertyKeywords,fontProperties:fontProperties,counterDescriptors:counterDescriptors,colorKeywords:colorKeywords,valueKeywords:valueKeywords,supportsAtComponent:true,tokenHooks:{"/":function(stream,state){if(!stream.eat("*"))return false;state.tokenize=tokenCComment;return tokenCComment(stream,state);}},name:"css",helperType:"gss"});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("javascript",function(config,parserConfig){var indentUnit=config.indentUnit;var statementIndent=parserConfig.statementIndent;var jsonldMode=parserConfig.jsonld;var jsonMode=parserConfig.json||jsonldMode;var isTS=parserConfig.typescript;var wordRE=parserConfig.wordCharacters||/[\w$\xa1-\uffff]/;var keywords=function(){function kw(type){return{type:type,style:"keyword"};}
var A=kw("keyword a"),B=kw("keyword b"),C=kw("keyword c"),D=kw("keyword d");var operator=kw("operator"),atom={type:"atom",style:"atom"};return{"if":kw("if"),"while":A,"with":A,"else":B,"do":B,"try":B,"finally":B,"return":D,"break":D,"continue":D,"new":kw("new"),"delete":C,"void":C,"throw":C,"debugger":kw("debugger"),"var":kw("var"),"const":kw("var"),"let":kw("var"),"function":kw("function"),"catch":kw("catch"),"for":kw("for"),"switch":kw("switch"),"case":kw("case"),"default":kw("default"),"in":operator,"typeof":operator,"instanceof":operator,"true":atom,"false":atom,"null":atom,"undefined":atom,"NaN":atom,"Infinity":atom,"this":kw("this"),"class":kw("class"),"super":kw("atom"),"yield":C,"export":kw("export"),"import":kw("import"),"extends":C,"await":C};}();var isOperatorChar=/[+\-*&%=<>!?|~^@]/;var isJsonldKeyword=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function readRegexp(stream){var escaped=false,next,inSet=false;while((next=stream.next())!=null){if(!escaped){if(next=="/"&&!inSet)return;if(next=="[")inSet=true;else if(inSet&&next=="]")inSet=false;}
escaped=!escaped&&next=="\\";}}
var type,content;function ret(tp,style,cont){type=tp;content=cont;return style;}
function tokenBase(stream,state){var ch=stream.next();if(ch=='"'||ch=="'"){state.tokenize=tokenString(ch);return state.tokenize(stream,state);}else if(ch=="."&&stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)){return ret("number","number");}else if(ch=="."&&stream.match("..")){return ret("spread","meta");}else if(/[\[\]{}\(\),;\:\.]/.test(ch)){return ret(ch);}else if(ch=="="&&stream.eat(">")){return ret("=>","operator");}else if(ch=="0"&&stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)){return ret("number","number");}else if(/\d/.test(ch)){stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/);return ret("number","number");}else if(ch=="/"){if(stream.eat("*")){state.tokenize=tokenComment;return tokenComment(stream,state);}else if(stream.eat("/")){stream.skipToEnd();return ret("comment","comment");}else if(expressionAllowed(stream,state,1)){readRegexp(stream);stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);return ret("regexp","string-2");}else{stream.eat("=");return ret("operator","operator",stream.current());}}else if(ch=="`"){state.tokenize=tokenQuasi;return tokenQuasi(stream,state);}else if(ch=="#"){stream.skipToEnd();return ret("error","error");}else if(isOperatorChar.test(ch)){if(ch!=">"||!state.lexical||state.lexical.type!=">"){if(stream.eat("=")){if(ch=="!"||ch=="=")stream.eat("=");}else if(/[<>*+\-]/.test(ch)){stream.eat(ch);if(ch==">")stream.eat(ch);}}
return ret("operator","operator",stream.current());}else if(wordRE.test(ch)){stream.eatWhile(wordRE);var word=stream.current();if(state.lastType!="."){if(keywords.propertyIsEnumerable(word)){var kw=keywords[word];return ret(kw.type,kw.style,word)}
if(word=="async"&&stream.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/,false))
return ret("async","keyword",word)}
return ret("variable","variable",word)}}
function tokenString(quote){return function(stream,state){var escaped=false,next;if(jsonldMode&&stream.peek()=="@"&&stream.match(isJsonldKeyword)){state.tokenize=tokenBase;return ret("jsonld-keyword","meta");}
while((next=stream.next())!=null){if(next==quote&&!escaped)break;escaped=!escaped&&next=="\\";}
if(!escaped)state.tokenize=tokenBase;return ret("string","string");};}
function tokenComment(stream,state){var maybeEnd=false,ch;while(ch=stream.next()){if(ch=="/"&&maybeEnd){state.tokenize=tokenBase;break;}
maybeEnd=(ch=="*");}
return ret("comment","comment");}
function tokenQuasi(stream,state){var escaped=false,next;while((next=stream.next())!=null){if(!escaped&&(next=="`"||next=="$"&&stream.eat("{"))){state.tokenize=tokenBase;break;}
escaped=!escaped&&next=="\\";}
return ret("quasi","string-2",stream.current());}
var brackets="([{}])";function findFatArrow(stream,state){if(state.fatArrowAt)state.fatArrowAt=null;var arrow=stream.string.indexOf("=>",stream.start);if(arrow<0)return;if(isTS){var m=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start,arrow));if(m)arrow=m.index;}
var depth=0,sawSomething=false;for(var pos=arrow-1;pos>=0;--pos){var ch=stream.string.charAt(pos);var bracket=brackets.indexOf(ch);if(bracket>=0&&bracket<3){if(!depth){++pos;break;}
if(--depth==0){if(ch=="(")sawSomething=true;break;}}else if(bracket>=3&&bracket<6){++depth;}else if(wordRE.test(ch)){sawSomething=true;}else if(/["'\/`]/.test(ch)){for(;;--pos){if(pos==0)return
var next=stream.string.charAt(pos-1);if(next==ch&&stream.string.charAt(pos-2)!="\\"){pos--;break}}}else if(sawSomething&&!depth){++pos;break;}}
if(sawSomething&&!depth)state.fatArrowAt=pos;}
var atomicTypes={"atom":true,"number":true,"variable":true,"string":true,"regexp":true,"this":true,"jsonld-keyword":true};function JSLexical(indented,column,type,align,prev,info){this.indented=indented;this.column=column;this.type=type;this.prev=prev;this.info=info;if(align!=null)this.align=align;}
function inScope(state,varname){for(var v=state.localVars;v;v=v.next)
if(v.name==varname)return true;for(var cx=state.context;cx;cx=cx.prev){for(var v=cx.vars;v;v=v.next)
if(v.name==varname)return true;}}
function parseJS(state,style,type,content,stream){var cc=state.cc;cx.state=state;cx.stream=stream;cx.marked=null,cx.cc=cc;cx.style=style;if(!state.lexical.hasOwnProperty("align"))
state.lexical.align=true;while(true){var combinator=cc.length?cc.pop():jsonMode?expression:statement;if(combinator(type,content)){while(cc.length&&cc[cc.length-1].lex)
cc.pop()();if(cx.marked)return cx.marked;if(type=="variable"&&inScope(state,content))return"variable-2";return style;}}}
var cx={state:null,column:null,marked:null,cc:null};function pass(){for(var i=arguments.length-1;i>=0;i--)cx.cc.push(arguments[i]);}
function cont(){pass.apply(null,arguments);return true;}
function inList(name,list){for(var v=list;v;v=v.next)if(v.name==name)return true
return false;}
function register(varname){var state=cx.state;cx.marked="def";if(state.context){if(state.lexical.info=="var"&&state.context&&state.context.block){var newContext=registerVarScoped(varname,state.context);if(newContext!=null){state.context=newContext;return}}else if(!inList(varname,state.localVars)){state.localVars=new Var(varname,state.localVars);return}}
if(parserConfig.globalVars&&!inList(varname,state.globalVars))
state.globalVars=new Var(varname,state.globalVars);}
function registerVarScoped(varname,context){if(!context){return null}else if(context.block){var inner=registerVarScoped(varname,context.prev);if(!inner)return null
if(inner==context.prev)return context
return new Context(inner,context.vars,true)}else if(inList(varname,context.vars)){return context}else{return new Context(context.prev,new Var(varname,context.vars),false)}}
function isModifier(name){return name=="public"||name=="private"||name=="protected"||name=="abstract"||name=="readonly"}
function Context(prev,vars,block){this.prev=prev;this.vars=vars;this.block=block;}
function Var(name,next){this.name=name;this.next=next;}
var defaultVars=new Var("this",new Var("arguments",null));function pushcontext(){cx.state.context=new Context(cx.state.context,cx.state.localVars,false);cx.state.localVars=defaultVars;}
function pushblockcontext(){cx.state.context=new Context(cx.state.context,cx.state.localVars,true);cx.state.localVars=null;}
function popcontext(){cx.state.localVars=cx.state.context.vars;cx.state.context=cx.state.context.prev;}
popcontext.lex=true;function pushlex(type,info){var result=function(){var state=cx.state,indent=state.indented;if(state.lexical.type=="stat")indent=state.lexical.indented;else for(var outer=state.lexical;outer&&outer.type==")"&&outer.align;outer=outer.prev)
indent=outer.indented;state.lexical=new JSLexical(indent,cx.stream.column(),type,null,state.lexical,info);};result.lex=true;return result;}
function poplex(){var state=cx.state;if(state.lexical.prev){if(state.lexical.type==")")
state.indented=state.lexical.indented;state.lexical=state.lexical.prev;}}
poplex.lex=true;function expect(wanted){function exp(type){if(type==wanted)return cont();else if(wanted==";"||type=="}"||type==")"||type=="]")return pass();else return cont(exp);};return exp;}
function statement(type,value){if(type=="var")return cont(pushlex("vardef",value),vardef,expect(";"),poplex);if(type=="keyword a")return cont(pushlex("form"),parenExpr,statement,poplex);if(type=="keyword b")return cont(pushlex("form"),statement,poplex);if(type=="keyword d")return cx.stream.match(/^\s*$/,false)?cont():cont(pushlex("stat"),maybeexpression,expect(";"),poplex);if(type=="debugger")return cont(expect(";"));if(type=="{")return cont(pushlex("}"),pushblockcontext,block,poplex,popcontext);if(type==";")return cont();if(type=="if"){if(cx.state.lexical.info=="else"&&cx.state.cc[cx.state.cc.length-1]==poplex)
cx.state.cc.pop()();return cont(pushlex("form"),parenExpr,statement,poplex,maybeelse);}
if(type=="function")return cont(functiondef);if(type=="for")return cont(pushlex("form"),forspec,statement,poplex);if(type=="class"||(isTS&&value=="interface")){cx.marked="keyword";return cont(pushlex("form",type=="class"?type:value),className,poplex)}
if(type=="variable"){if(isTS&&value=="declare"){cx.marked="keyword";return cont(statement)}else if(isTS&&(value=="module"||value=="enum"||value=="type")&&cx.stream.match(/^\s*\w/,false)){cx.marked="keyword";if(value=="enum")return cont(enumdef);else if(value=="type")return cont(typename,expect("operator"),typeexpr,expect(";"));else return cont(pushlex("form"),pattern,expect("{"),pushlex("}"),block,poplex,poplex)}else if(isTS&&value=="namespace"){cx.marked="keyword";return cont(pushlex("form"),expression,statement,poplex)}else if(isTS&&value=="abstract"){cx.marked="keyword";return cont(statement)}else{return cont(pushlex("stat"),maybelabel);}}
if(type=="switch")return cont(pushlex("form"),parenExpr,expect("{"),pushlex("}","switch"),pushblockcontext,block,poplex,poplex,popcontext);if(type=="case")return cont(expression,expect(":"));if(type=="default")return cont(expect(":"));if(type=="catch")return cont(pushlex("form"),pushcontext,maybeCatchBinding,statement,poplex,popcontext);if(type=="export")return cont(pushlex("stat"),afterExport,poplex);if(type=="import")return cont(pushlex("stat"),afterImport,poplex);if(type=="async")return cont(statement)
if(value=="@")return cont(expression,statement)
return pass(pushlex("stat"),expression,expect(";"),poplex);}
function maybeCatchBinding(type){if(type=="(")return cont(funarg,expect(")"))}
function expression(type,value){return expressionInner(type,value,false);}
function expressionNoComma(type,value){return expressionInner(type,value,true);}
function parenExpr(type){if(type!="(")return pass()
return cont(pushlex(")"),expression,expect(")"),poplex)}
function expressionInner(type,value,noComma){if(cx.state.fatArrowAt==cx.stream.start){var body=noComma?arrowBodyNoComma:arrowBody;if(type=="(")return cont(pushcontext,pushlex(")"),commasep(funarg,")"),poplex,expect("=>"),body,popcontext);else if(type=="variable")return pass(pushcontext,pattern,expect("=>"),body,popcontext);}
var maybeop=noComma?maybeoperatorNoComma:maybeoperatorComma;if(atomicTypes.hasOwnProperty(type))return cont(maybeop);if(type=="function")return cont(functiondef,maybeop);if(type=="class"||(isTS&&value=="interface")){cx.marked="keyword";return cont(pushlex("form"),classExpression,poplex);}
if(type=="keyword c"||type=="async")return cont(noComma?expressionNoComma:expression);if(type=="(")return cont(pushlex(")"),maybeexpression,expect(")"),poplex,maybeop);if(type=="operator"||type=="spread")return cont(noComma?expressionNoComma:expression);if(type=="[")return cont(pushlex("]"),arrayLiteral,poplex,maybeop);if(type=="{")return contCommasep(objprop,"}",null,maybeop);if(type=="quasi")return pass(quasi,maybeop);if(type=="new")return cont(maybeTarget(noComma));if(type=="import")return cont(expression);return cont();}
function maybeexpression(type){if(type.match(/[;\}\)\],]/))return pass();return pass(expression);}
function maybeoperatorComma(type,value){if(type==",")return cont(expression);return maybeoperatorNoComma(type,value,false);}
function maybeoperatorNoComma(type,value,noComma){var me=noComma==false?maybeoperatorComma:maybeoperatorNoComma;var expr=noComma==false?expression:expressionNoComma;if(type=="=>")return cont(pushcontext,noComma?arrowBodyNoComma:arrowBody,popcontext);if(type=="operator"){if(/\+\+|--/.test(value)||isTS&&value=="!")return cont(me);if(isTS&&value=="<"&&cx.stream.match(/^([^>]|<.*?>)*>\s*\(/,false))
return cont(pushlex(">"),commasep(typeexpr,">"),poplex,me);if(value=="?")return cont(expression,expect(":"),expr);return cont(expr);}
if(type=="quasi"){return pass(quasi,me);}
if(type==";")return;if(type=="(")return contCommasep(expressionNoComma,")","call",me);if(type==".")return cont(property,me);if(type=="[")return cont(pushlex("]"),maybeexpression,expect("]"),poplex,me);if(isTS&&value=="as"){cx.marked="keyword";return cont(typeexpr,me)}
if(type=="regexp"){cx.state.lastType=cx.marked="operator";cx.stream.backUp(cx.stream.pos-cx.stream.start-1);return cont(expr)}}
function quasi(type,value){if(type!="quasi")return pass();if(value.slice(value.length-2)!="${")return cont(quasi);return cont(expression,continueQuasi);}
function continueQuasi(type){if(type=="}"){cx.marked="string-2";cx.state.tokenize=tokenQuasi;return cont(quasi);}}
function arrowBody(type){findFatArrow(cx.stream,cx.state);return pass(type=="{"?statement:expression);}
function arrowBodyNoComma(type){findFatArrow(cx.stream,cx.state);return pass(type=="{"?statement:expressionNoComma);}
function maybeTarget(noComma){return function(type){if(type==".")return cont(noComma?targetNoComma:target);else if(type=="variable"&&isTS)return cont(maybeTypeArgs,noComma?maybeoperatorNoComma:maybeoperatorComma)
else return pass(noComma?expressionNoComma:expression);};}
function target(_,value){if(value=="target"){cx.marked="keyword";return cont(maybeoperatorComma);}}
function targetNoComma(_,value){if(value=="target"){cx.marked="keyword";return cont(maybeoperatorNoComma);}}
function maybelabel(type){if(type==":")return cont(poplex,statement);return pass(maybeoperatorComma,expect(";"),poplex);}
function property(type){if(type=="variable"){cx.marked="property";return cont();}}
function objprop(type,value){if(type=="async"){cx.marked="property";return cont(objprop);}else if(type=="variable"||cx.style=="keyword"){cx.marked="property";if(value=="get"||value=="set")return cont(getterSetter);var m;if(isTS&&cx.state.fatArrowAt==cx.stream.start&&(m=cx.stream.match(/^\s*:\s*/,false)))
cx.state.fatArrowAt=cx.stream.pos+m[0].length;return cont(afterprop);}else if(type=="number"||type=="string"){cx.marked=jsonldMode?"property":(cx.style+" property");return cont(afterprop);}else if(type=="jsonld-keyword"){return cont(afterprop);}else if(isTS&&isModifier(value)){cx.marked="keyword";return cont(objprop)}else if(type=="["){return cont(expression,maybetype,expect("]"),afterprop);}else if(type=="spread"){return cont(expressionNoComma,afterprop);}else if(value=="*"){cx.marked="keyword";return cont(objprop);}else if(type==":"){return pass(afterprop)}}
function getterSetter(type){if(type!="variable")return pass(afterprop);cx.marked="property";return cont(functiondef);}
function afterprop(type){if(type==":")return cont(expressionNoComma);if(type=="(")return pass(functiondef);}
function commasep(what,end,sep){function proceed(type,value){if(sep?sep.indexOf(type)>-1:type==","){var lex=cx.state.lexical;if(lex.info=="call")lex.pos=(lex.pos||0)+1;return cont(function(type,value){if(type==end||value==end)return pass()
return pass(what)},proceed);}
if(type==end||value==end)return cont();if(sep&&sep.indexOf(";")>-1)return pass(what)
return cont(expect(end));}
return function(type,value){if(type==end||value==end)return cont();return pass(what,proceed);};}
function contCommasep(what,end,info){for(var i=3;i<arguments.length;i++)
cx.cc.push(arguments[i]);return cont(pushlex(end,info),commasep(what,end),poplex);}
function block(type){if(type=="}")return cont();return pass(statement,block);}
function maybetype(type,value){if(isTS){if(type==":")return cont(typeexpr);if(value=="?")return cont(maybetype);}}
function maybetypeOrIn(type,value){if(isTS&&(type==":"||value=="in"))return cont(typeexpr)}
function mayberettype(type){if(isTS&&type==":"){if(cx.stream.match(/^\s*\w+\s+is\b/,false))return cont(expression,isKW,typeexpr)
else return cont(typeexpr)}}
function isKW(_,value){if(value=="is"){cx.marked="keyword";return cont()}}
function typeexpr(type,value){if(value=="keyof"||value=="typeof"||value=="infer"){cx.marked="keyword";return cont(value=="typeof"?expressionNoComma:typeexpr)}
if(type=="variable"||value=="void"){cx.marked="type";return cont(afterType)}
if(value=="|"||value=="&")return cont(typeexpr)
if(type=="string"||type=="number"||type=="atom")return cont(afterType);if(type=="[")return cont(pushlex("]"),commasep(typeexpr,"]",","),poplex,afterType)
if(type=="{")return cont(pushlex("}"),commasep(typeprop,"}",",;"),poplex,afterType)
if(type=="(")return cont(commasep(typearg,")"),maybeReturnType,afterType)
if(type=="<")return cont(commasep(typeexpr,">"),typeexpr)}
function maybeReturnType(type){if(type=="=>")return cont(typeexpr)}
function typeprop(type,value){if(type=="variable"||cx.style=="keyword"){cx.marked="property";return cont(typeprop)}else if(value=="?"||type=="number"||type=="string"){return cont(typeprop)}else if(type==":"){return cont(typeexpr)}else if(type=="["){return cont(expect("variable"),maybetypeOrIn,expect("]"),typeprop)}else if(type=="("){return pass(functiondecl,typeprop)}}
function typearg(type,value){if(type=="variable"&&cx.stream.match(/^\s*[?:]/,false)||value=="?")return cont(typearg)
if(type==":")return cont(typeexpr)
if(type=="spread")return cont(typearg)
return pass(typeexpr)}
function afterType(type,value){if(value=="<")return cont(pushlex(">"),commasep(typeexpr,">"),poplex,afterType)
if(value=="|"||type=="."||value=="&")return cont(typeexpr)
if(type=="[")return cont(typeexpr,expect("]"),afterType)
if(value=="extends"||value=="implements"){cx.marked="keyword";return cont(typeexpr)}
if(value=="?")return cont(typeexpr,expect(":"),typeexpr)}
function maybeTypeArgs(_,value){if(value=="<")return cont(pushlex(">"),commasep(typeexpr,">"),poplex,afterType)}
function typeparam(){return pass(typeexpr,maybeTypeDefault)}
function maybeTypeDefault(_,value){if(value=="=")return cont(typeexpr)}
function vardef(_,value){if(value=="enum"){cx.marked="keyword";return cont(enumdef)}
return pass(pattern,maybetype,maybeAssign,vardefCont);}
function pattern(type,value){if(isTS&&isModifier(value)){cx.marked="keyword";return cont(pattern)}
if(type=="variable"){register(value);return cont();}
if(type=="spread")return cont(pattern);if(type=="[")return contCommasep(eltpattern,"]");if(type=="{")return contCommasep(proppattern,"}");}
function proppattern(type,value){if(type=="variable"&&!cx.stream.match(/^\s*:/,false)){register(value);return cont(maybeAssign);}
if(type=="variable")cx.marked="property";if(type=="spread")return cont(pattern);if(type=="}")return pass();if(type=="[")return cont(expression,expect(']'),expect(':'),proppattern);return cont(expect(":"),pattern,maybeAssign);}
function eltpattern(){return pass(pattern,maybeAssign)}
function maybeAssign(_type,value){if(value=="=")return cont(expressionNoComma);}
function vardefCont(type){if(type==",")return cont(vardef);}
function maybeelse(type,value){if(type=="keyword b"&&value=="else")return cont(pushlex("form","else"),statement,poplex);}
function forspec(type,value){if(value=="await")return cont(forspec);if(type=="(")return cont(pushlex(")"),forspec1,poplex);}
function forspec1(type){if(type=="var")return cont(vardef,forspec2);if(type=="variable")return cont(forspec2);return pass(forspec2)}
function forspec2(type,value){if(type==")")return cont()
if(type==";")return cont(forspec2)
if(value=="in"||value=="of"){cx.marked="keyword";return cont(expression,forspec2)}
return pass(expression,forspec2)}
function functiondef(type,value){if(value=="*"){cx.marked="keyword";return cont(functiondef);}
if(type=="variable"){register(value);return cont(functiondef);}
if(type=="(")return cont(pushcontext,pushlex(")"),commasep(funarg,")"),poplex,mayberettype,statement,popcontext);if(isTS&&value=="<")return cont(pushlex(">"),commasep(typeparam,">"),poplex,functiondef)}
function functiondecl(type,value){if(value=="*"){cx.marked="keyword";return cont(functiondecl);}
if(type=="variable"){register(value);return cont(functiondecl);}
if(type=="(")return cont(pushcontext,pushlex(")"),commasep(funarg,")"),poplex,mayberettype,popcontext);if(isTS&&value=="<")return cont(pushlex(">"),commasep(typeparam,">"),poplex,functiondecl)}
function typename(type,value){if(type=="keyword"||type=="variable"){cx.marked="type";return cont(typename)}else if(value=="<"){return cont(pushlex(">"),commasep(typeparam,">"),poplex)}}
function funarg(type,value){if(value=="@")cont(expression,funarg);if(type=="spread")return cont(funarg);if(isTS&&isModifier(value)){cx.marked="keyword";return cont(funarg);}
if(isTS&&type=="this")return cont(maybetype,maybeAssign)
return pass(pattern,maybetype,maybeAssign);}
function classExpression(type,value){if(type=="variable")return className(type,value);return classNameAfter(type,value);}
function className(type,value){if(type=="variable"){register(value);return cont(classNameAfter);}}
function classNameAfter(type,value){if(value=="<")return cont(pushlex(">"),commasep(typeparam,">"),poplex,classNameAfter)
if(value=="extends"||value=="implements"||(isTS&&type==",")){if(value=="implements")cx.marked="keyword";return cont(isTS?typeexpr:expression,classNameAfter);}
if(type=="{")return cont(pushlex("}"),classBody,poplex);}
function classBody(type,value){if(type=="async"||(type=="variable"&&(value=="static"||value=="get"||value=="set"||(isTS&&isModifier(value)))&&cx.stream.match(/^\s+[\w$\xa1-\uffff]/,false))){cx.marked="keyword";return cont(classBody);}
if(type=="variable"||cx.style=="keyword"){cx.marked="property";return cont(isTS?classfield:functiondef,classBody);}
if(type=="number"||type=="string")return cont(isTS?classfield:functiondef,classBody);if(type=="[")
return cont(expression,maybetype,expect("]"),isTS?classfield:functiondef,classBody)
if(value=="*"){cx.marked="keyword";return cont(classBody);}
if(isTS&&type=="(")return pass(functiondecl,classBody)
if(type==";"||type==",")return cont(classBody);if(type=="}")return cont();if(value=="@")return cont(expression,classBody)}
function classfield(type,value){if(value=="?")return cont(classfield)
if(type==":")return cont(typeexpr,maybeAssign)
if(value=="=")return cont(expressionNoComma)
var context=cx.state.lexical.prev,isInterface=context&&context.info=="interface";return pass(isInterface?functiondecl:functiondef)}
function afterExport(type,value){if(value=="*"){cx.marked="keyword";return cont(maybeFrom,expect(";"));}
if(value=="default"){cx.marked="keyword";return cont(expression,expect(";"));}
if(type=="{")return cont(commasep(exportField,"}"),maybeFrom,expect(";"));return pass(statement);}
function exportField(type,value){if(value=="as"){cx.marked="keyword";return cont(expect("variable"));}
if(type=="variable")return pass(expressionNoComma,exportField);}
function afterImport(type){if(type=="string")return cont();if(type=="(")return pass(expression);return pass(importSpec,maybeMoreImports,maybeFrom);}
function importSpec(type,value){if(type=="{")return contCommasep(importSpec,"}");if(type=="variable")register(value);if(value=="*")cx.marked="keyword";return cont(maybeAs);}
function maybeMoreImports(type){if(type==",")return cont(importSpec,maybeMoreImports)}
function maybeAs(_type,value){if(value=="as"){cx.marked="keyword";return cont(importSpec);}}
function maybeFrom(_type,value){if(value=="from"){cx.marked="keyword";return cont(expression);}}
function arrayLiteral(type){if(type=="]")return cont();return pass(commasep(expressionNoComma,"]"));}
function enumdef(){return pass(pushlex("form"),pattern,expect("{"),pushlex("}"),commasep(enummember,"}"),poplex,poplex)}
function enummember(){return pass(pattern,maybeAssign);}
function isContinuedStatement(state,textAfter){return state.lastType=="operator"||state.lastType==","||isOperatorChar.test(textAfter.charAt(0))||/[,.]/.test(textAfter.charAt(0));}
function expressionAllowed(stream,state,backUp){return state.tokenize==tokenBase&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType)||(state.lastType=="quasi"&&/\{\s*$/.test(stream.string.slice(0,stream.pos-(backUp||0))))}
return{startState:function(basecolumn){var state={tokenize:tokenBase,lastType:"sof",cc:[],lexical:new JSLexical((basecolumn||0)-indentUnit,0,"block",false),localVars:parserConfig.localVars,context:parserConfig.localVars&&new Context(null,null,false),indented:basecolumn||0};if(parserConfig.globalVars&&typeof parserConfig.globalVars=="object")
state.globalVars=parserConfig.globalVars;return state;},token:function(stream,state){if(stream.sol()){if(!state.lexical.hasOwnProperty("align"))
state.lexical.align=false;state.indented=stream.indentation();findFatArrow(stream,state);}
if(state.tokenize!=tokenComment&&stream.eatSpace())return null;var style=state.tokenize(stream,state);if(type=="comment")return style;state.lastType=type=="operator"&&(content=="++"||content=="--")?"incdec":type;return parseJS(state,style,type,content,stream);},indent:function(state,textAfter){if(state.tokenize==tokenComment)return CodeMirror.Pass;if(state.tokenize!=tokenBase)return 0;var firstChar=textAfter&&textAfter.charAt(0),lexical=state.lexical,top;if(!/^\s*else\b/.test(textAfter))for(var i=state.cc.length-1;i>=0;--i){var c=state.cc[i];if(c==poplex)lexical=lexical.prev;else if(c!=maybeelse)break;}
while((lexical.type=="stat"||lexical.type=="form")&&(firstChar=="}"||((top=state.cc[state.cc.length-1])&&(top==maybeoperatorComma||top==maybeoperatorNoComma)&&!/^[,\.=+\-*:?[\(]/.test(textAfter))))
lexical=lexical.prev;if(statementIndent&&lexical.type==")"&&lexical.prev.type=="stat")
lexical=lexical.prev;var type=lexical.type,closing=firstChar==type;if(type=="vardef")return lexical.indented+(state.lastType=="operator"||state.lastType==","?lexical.info.length+1:0);else if(type=="form"&&firstChar=="{")return lexical.indented;else if(type=="form")return lexical.indented+indentUnit;else if(type=="stat")
return lexical.indented+(isContinuedStatement(state,textAfter)?statementIndent||indentUnit:0);else if(lexical.info=="switch"&&!closing&&parserConfig.doubleIndentSwitch!=false)
return lexical.indented+(/^(?:case|default)\b/.test(textAfter)?indentUnit:2*indentUnit);else if(lexical.align)return lexical.column+(closing?0:1);else return lexical.indented+(closing?0:indentUnit);},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:jsonMode?null:"/*",blockCommentEnd:jsonMode?null:"*/",blockCommentContinue:jsonMode?null:" * ",lineComment:jsonMode?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:jsonMode?"json":"javascript",jsonldMode:jsonldMode,jsonMode:jsonMode,expressionAllowed:expressionAllowed,skipExpression:function(state){var top=state.cc[state.cc.length-1];if(top==expression||top==expressionNoComma)state.cc.pop();}};});CodeMirror.registerHelper("wordChars","javascript",/[\w$]/);CodeMirror.defineMIME("text/javascript","javascript");CodeMirror.defineMIME("text/ecmascript","javascript");CodeMirror.defineMIME("application/javascript","javascript");CodeMirror.defineMIME("application/x-javascript","javascript");CodeMirror.defineMIME("application/ecmascript","javascript");CodeMirror.defineMIME("application/json",{name:"javascript",json:true});CodeMirror.defineMIME("application/x-json",{name:"javascript",json:true});CodeMirror.defineMIME("application/ld+json",{name:"javascript",jsonld:true});CodeMirror.defineMIME("text/typescript",{name:"javascript",typescript:true});CodeMirror.defineMIME("application/typescript",{name:"javascript",typescript:true});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";var htmlConfig={autoSelfClosers:{'area':true,'base':true,'br':true,'col':true,'command':true,'embed':true,'frame':true,'hr':true,'img':true,'input':true,'keygen':true,'link':true,'meta':true,'param':true,'source':true,'track':true,'wbr':true,'menuitem':true},implicitlyClosed:{'dd':true,'li':true,'optgroup':true,'option':true,'p':true,'rp':true,'rt':true,'tbody':true,'td':true,'tfoot':true,'th':true,'tr':true},contextGrabbers:{'dd':{'dd':true,'dt':true},'dt':{'dd':true,'dt':true},'li':{'li':true},'option':{'option':true,'optgroup':true},'optgroup':{'optgroup':true},'p':{'address':true,'article':true,'aside':true,'blockquote':true,'dir':true,'div':true,'dl':true,'fieldset':true,'footer':true,'form':true,'h1':true,'h2':true,'h3':true,'h4':true,'h5':true,'h6':true,'header':true,'hgroup':true,'hr':true,'menu':true,'nav':true,'ol':true,'p':true,'pre':true,'section':true,'table':true,'ul':true},'rp':{'rp':true,'rt':true},'rt':{'rp':true,'rt':true},'tbody':{'tbody':true,'tfoot':true},'td':{'td':true,'th':true},'tfoot':{'tbody':true},'th':{'td':true,'th':true},'thead':{'tbody':true,'tfoot':true},'tr':{'tr':true}},doNotIndent:{"pre":true},allowUnquoted:true,allowMissing:true,caseFold:true};var xmlConfig={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:false,allowMissing:false,allowMissingTagName:false,caseFold:false};CodeMirror.defineMode("xml",function(editorConf,config_){var indentUnit=editorConf.indentUnit;var config={};var defaults=config_.htmlMode?htmlConfig:xmlConfig;for(var prop in defaults)config[prop]=defaults[prop];for(var prop in config_)config[prop]=config_[prop];var type,setStyle;function inText(stream,state){function chain(parser){state.tokenize=parser;return parser(stream,state);}
var ch=stream.next();if(ch=="<"){if(stream.eat("!")){if(stream.eat("[")){if(stream.match("CDATA["))return chain(inBlock("atom","]]>"));else return null;}else if(stream.match("--")){return chain(inBlock("comment","-->"));}else if(stream.match("DOCTYPE",true,true)){stream.eatWhile(/[\w\._\-]/);return chain(doctype(1));}else{return null;}}else if(stream.eat("?")){stream.eatWhile(/[\w\._\-]/);state.tokenize=inBlock("meta","?>");return"meta";}else{type=stream.eat("/")?"closeTag":"openTag";state.tokenize=inTag;return"tag bracket";}}else if(ch=="&"){var ok;if(stream.eat("#")){if(stream.eat("x")){ok=stream.eatWhile(/[a-fA-F\d]/)&&stream.eat(";");}else{ok=stream.eatWhile(/[\d]/)&&stream.eat(";");}}else{ok=stream.eatWhile(/[\w\.\-:]/)&&stream.eat(";");}
return ok?"atom":"error";}else{stream.eatWhile(/[^&<]/);return null;}}
inText.isInText=true;function inTag(stream,state){var ch=stream.next();if(ch==">"||(ch=="/"&&stream.eat(">"))){state.tokenize=inText;type=ch==">"?"endTag":"selfcloseTag";return"tag bracket";}else if(ch=="="){type="equals";return null;}else if(ch=="<"){state.tokenize=inText;state.state=baseState;state.tagName=state.tagStart=null;var next=state.tokenize(stream,state);return next?next+" tag error":"tag error";}else if(/[\'\"]/.test(ch)){state.tokenize=inAttribute(ch);state.stringStartCol=stream.column();return state.tokenize(stream,state);}else{stream.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/);return"word";}}
function inAttribute(quote){var closure=function(stream,state){while(!stream.eol()){if(stream.next()==quote){state.tokenize=inTag;break;}}
return"string";};closure.isInAttribute=true;return closure;}
function inBlock(style,terminator){return function(stream,state){while(!stream.eol()){if(stream.match(terminator)){state.tokenize=inText;break;}
stream.next();}
return style;}}
function doctype(depth){return function(stream,state){var ch;while((ch=stream.next())!=null){if(ch=="<"){state.tokenize=doctype(depth+1);return state.tokenize(stream,state);}else if(ch==">"){if(depth==1){state.tokenize=inText;break;}else{state.tokenize=doctype(depth-1);return state.tokenize(stream,state);}}}
return"meta";};}
function Context(state,tagName,startOfLine){this.prev=state.context;this.tagName=tagName;this.indent=state.indented;this.startOfLine=startOfLine;if(config.doNotIndent.hasOwnProperty(tagName)||(state.context&&state.context.noIndent))
this.noIndent=true;}
function popContext(state){if(state.context)state.context=state.context.prev;}
function maybePopContext(state,nextTagName){var parentTagName;while(true){if(!state.context){return;}
parentTagName=state.context.tagName;if(!config.contextGrabbers.hasOwnProperty(parentTagName)||!config.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)){return;}
popContext(state);}}
function baseState(type,stream,state){if(type=="openTag"){state.tagStart=stream.column();return tagNameState;}else if(type=="closeTag"){return closeTagNameState;}else{return baseState;}}
function tagNameState(type,stream,state){if(type=="word"){state.tagName=stream.current();setStyle="tag";return attrState;}else if(config.allowMissingTagName&&type=="endTag"){setStyle="tag bracket";return attrState(type,stream,state);}else{setStyle="error";return tagNameState;}}
function closeTagNameState(type,stream,state){if(type=="word"){var tagName=stream.current();if(state.context&&state.context.tagName!=tagName&&config.implicitlyClosed.hasOwnProperty(state.context.tagName))
popContext(state);if((state.context&&state.context.tagName==tagName)||config.matchClosing===false){setStyle="tag";return closeState;}else{setStyle="tag error";return closeStateErr;}}else if(config.allowMissingTagName&&type=="endTag"){setStyle="tag bracket";return closeState(type,stream,state);}else{setStyle="error";return closeStateErr;}}
function closeState(type,_stream,state){if(type!="endTag"){setStyle="error";return closeState;}
popContext(state);return baseState;}
function closeStateErr(type,stream,state){setStyle="error";return closeState(type,stream,state);}
function attrState(type,_stream,state){if(type=="word"){setStyle="attribute";return attrEqState;}else if(type=="endTag"||type=="selfcloseTag"){var tagName=state.tagName,tagStart=state.tagStart;state.tagName=state.tagStart=null;if(type=="selfcloseTag"||config.autoSelfClosers.hasOwnProperty(tagName)){maybePopContext(state,tagName);}else{maybePopContext(state,tagName);state.context=new Context(state,tagName,tagStart==state.indented);}
return baseState;}
setStyle="error";return attrState;}
function attrEqState(type,stream,state){if(type=="equals")return attrValueState;if(!config.allowMissing)setStyle="error";return attrState(type,stream,state);}
function attrValueState(type,stream,state){if(type=="string")return attrContinuedState;if(type=="word"&&config.allowUnquoted){setStyle="string";return attrState;}
setStyle="error";return attrState(type,stream,state);}
function attrContinuedState(type,stream,state){if(type=="string")return attrContinuedState;return attrState(type,stream,state);}
return{startState:function(baseIndent){var state={tokenize:inText,state:baseState,indented:baseIndent||0,tagName:null,tagStart:null,context:null};if(baseIndent!=null)state.baseIndent=baseIndent;return state},token:function(stream,state){if(!state.tagName&&stream.sol())
state.indented=stream.indentation();if(stream.eatSpace())return null;type=null;var style=state.tokenize(stream,state);if((style||type)&&style!="comment"){setStyle=null;state.state=state.state(type||style,stream,state);if(setStyle)
style=setStyle=="error"?style+" error":setStyle;}
return style;},indent:function(state,textAfter,fullLine){var context=state.context;if(state.tokenize.isInAttribute){if(state.tagStart==state.indented)
return state.stringStartCol+1;else
return state.indented+indentUnit;}
if(context&&context.noIndent)return CodeMirror.Pass;if(state.tokenize!=inTag&&state.tokenize!=inText)
return fullLine?fullLine.match(/^(\s*)/)[0].length:0;if(state.tagName){if(config.multilineTagIndentPastTag!==false)
return state.tagStart+state.tagName.length+2;else
return state.tagStart+indentUnit*(config.multilineTagIndentFactor||1);}
if(config.alignCDATA&&/<!\[CDATA\[/.test(textAfter))return 0;var tagAfter=textAfter&&/^<(\/)?([\w_:\.-]*)/.exec(textAfter);if(tagAfter&&tagAfter[1]){while(context){if(context.tagName==tagAfter[2]){context=context.prev;break;}else if(config.implicitlyClosed.hasOwnProperty(context.tagName)){context=context.prev;}else{break;}}}else if(tagAfter){while(context){var grabbers=config.contextGrabbers[context.tagName];if(grabbers&&grabbers.hasOwnProperty(tagAfter[2]))
context=context.prev;else
break;}}
while(context&&context.prev&&!context.startOfLine)
context=context.prev;if(context)return context.indent+indentUnit;else return state.baseIndent||0;},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:config.htmlMode?"html":"xml",helperType:config.htmlMode?"html":"xml",skipAttribute:function(state){if(state.state==attrValueState)
state.state=attrState;}};});CodeMirror.defineMIME("text/xml","xml");CodeMirror.defineMIME("application/xml","xml");if(!CodeMirror.mimeModes.hasOwnProperty("text/html"))
CodeMirror.defineMIME("text/html",{name:"xml",htmlMode:true});});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"),require("../css/css"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";var defaultTags={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};function maybeBackup(stream,pat,style){var cur=stream.current(),close=cur.search(pat);if(close>-1){stream.backUp(cur.length-close);}else if(cur.match(/<\/?$/)){stream.backUp(cur.length);if(!stream.match(pat,false))stream.match(cur);}
return style;}
var attrRegexpCache={};function getAttrRegexp(attr){var regexp=attrRegexpCache[attr];if(regexp)return regexp;return attrRegexpCache[attr]=new RegExp("\\s+"+attr+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*");}
function getAttrValue(text,attr){var match=text.match(getAttrRegexp(attr));return match?/^\s*(.*?)\s*$/.exec(match[2])[1]:""}
function getTagRegexp(tagName,anchored){return new RegExp((anchored?"^":"")+"<\/\s*"+tagName+"\s*>","i");}
function addTags(from,to){for(var tag in from){var dest=to[tag]||(to[tag]=[]);var source=from[tag];for(var i=source.length-1;i>=0;i--)
dest.unshift(source[i]);}}
function findMatchingMode(tagInfo,tagText){for(var i=0;i<tagInfo.length;i++){var spec=tagInfo[i];if(!spec[0]||spec[1].test(getAttrValue(tagText,spec[0])))return spec[2];}}
CodeMirror.defineMode("htmlmixed",function(config,parserConfig){var htmlMode=CodeMirror.getMode(config,{name:"xml",htmlMode:true,multilineTagIndentFactor:parserConfig.multilineTagIndentFactor,multilineTagIndentPastTag:parserConfig.multilineTagIndentPastTag});var tags={};var configTags=parserConfig&&parserConfig.tags,configScript=parserConfig&&parserConfig.scriptTypes;addTags(defaultTags,tags);if(configTags)addTags(configTags,tags);if(configScript)for(var i=configScript.length-1;i>=0;i--)
tags.script.unshift(["type",configScript[i].matches,configScript[i].mode]);function html(stream,state){var style=htmlMode.token(stream,state.htmlState),tag=/\btag\b/.test(style),tagName;if(tag&&!/[<>\s\/]/.test(stream.current())&&(tagName=state.htmlState.tagName&&state.htmlState.tagName.toLowerCase())&&tags.hasOwnProperty(tagName)){state.inTag=tagName+" ";}else if(state.inTag&&tag&&/>$/.test(stream.current())){var inTag=/^([\S]+) (.*)/.exec(state.inTag);state.inTag=null;var modeSpec=stream.current()==">"&&findMatchingMode(tags[inTag[1]],inTag[2]);var mode=CodeMirror.getMode(config,modeSpec);var endTagA=getTagRegexp(inTag[1],true),endTag=getTagRegexp(inTag[1],false);state.token=function(stream,state){if(stream.match(endTagA,false)){state.token=html;state.localState=state.localMode=null;return null;}
return maybeBackup(stream,endTag,state.localMode.token(stream,state.localState));};state.localMode=mode;state.localState=CodeMirror.startState(mode,htmlMode.indent(state.htmlState,"",""));}else if(state.inTag){state.inTag+=stream.current();if(stream.eol())state.inTag+=" ";}
return style;};return{startState:function(){var state=CodeMirror.startState(htmlMode);return{token:html,inTag:null,localMode:null,localState:null,htmlState:state};},copyState:function(state){var local;if(state.localState){local=CodeMirror.copyState(state.localMode,state.localState);}
return{token:state.token,inTag:state.inTag,localMode:state.localMode,localState:local,htmlState:CodeMirror.copyState(htmlMode,state.htmlState)};},token:function(stream,state){return state.token(stream,state);},indent:function(state,textAfter,line){if(!state.localMode||/^\s*<\//.test(textAfter))
return htmlMode.indent(state.htmlState,textAfter,line);else if(state.localMode.indent)
return state.localMode.indent(state.localState,textAfter,line);else
return CodeMirror.Pass;},innerMode:function(state){return{state:state.localState||state.htmlState,mode:state.localMode||htmlMode};}};},"xml","javascript","css");CodeMirror.defineMIME("text/html","htmlmixed");});(function(mod){if(typeof exports=="object"&&typeof module=="object")
mod(require("../../lib/codemirror"),require("../htmlmixed/htmlmixed"),require("../../addon/mode/multiplex"));else if(typeof define=="function"&&define.amd)
define(["../../lib/codemirror","../htmlmixed/htmlmixed","../../addon/mode/multiplex"],mod);else
mod(CodeMirror);})(function(CodeMirror){"use strict";CodeMirror.defineMode("htmlembedded",function(config,parserConfig){var closeComment=parserConfig.closeComment||"--%>";return CodeMirror.multiplexingMode(CodeMirror.getMode(config,"htmlmixed"),{open:parserConfig.openComment||"<%--",close:closeComment,delimStyle:"comment",mode:{token:function(stream){stream.skipTo(closeComment)||stream.skipToEnd();return"comment"}}},{open:parserConfig.open||parserConfig.scriptStartRegex||"<%",close:parserConfig.close||parserConfig.scriptEndRegex||"%>",mode:CodeMirror.getMode(config,parserConfig.scriptingModeSpec)});},"htmlmixed");CodeMirror.defineMIME("application/x-ejs",{name:"htmlembedded",scriptingModeSpec:"javascript"});CodeMirror.defineMIME("application/x-aspx",{name:"htmlembedded",scriptingModeSpec:"text/x-csharp"});CodeMirror.defineMIME("application/x-jsp",{name:"htmlembedded",scriptingModeSpec:"text/x-java"});CodeMirror.defineMIME("application/x-erb",{name:"htmlembedded",scriptingModeSpec:"ruby"});});class AcornTokenizer{constructor(content){this._content=content;this._comments=[];this._tokenizer=acorn.tokenizer(this._content,{onComment:this._comments});this._textCursor=new TextUtils.TextCursor(this._content.computeLineEndings());this._tokenLineStart=0;this._tokenLineEnd=0;this._nextTokenInternal();}
static punctuator(token,values){return token.type!==acorn.tokTypes.num&&token.type!==acorn.tokTypes.regexp&&token.type!==acorn.tokTypes.string&&token.type!==acorn.tokTypes.name&&!token.type.keyword&&(!values||(token.type.label.length===1&&values.indexOf(token.type.label)!==-1));}
static keyword(token,keyword){return!!token.type.keyword&&token.type!==acorn.tokTypes['_true']&&token.type!==acorn.tokTypes['_false']&&token.type!==acorn.tokTypes['_null']&&(!keyword||token.type.keyword===keyword);}
static identifier(token,identifier){return token.type===acorn.tokTypes.name&&(!identifier||token.value===identifier);}
static lineComment(token){return token.type==='Line';}
static blockComment(token){return token.type==='Block';}
_nextTokenInternal(){if(this._comments.length){return this._comments.shift();}
const token=this._bufferedToken;this._bufferedToken=this._tokenizer.getToken();return token;}
nextToken(){const token=this._nextTokenInternal();if(token.type===acorn.tokTypes.eof){return null;}
this._textCursor.advance(token.start);this._tokenLineStart=this._textCursor.lineNumber();this._tokenColumnStart=this._textCursor.columnNumber();this._textCursor.advance(token.end);this._tokenLineEnd=this._textCursor.lineNumber();return token;}
peekToken(){if(this._comments.length){return this._comments[0];}
return this._bufferedToken.type!==acorn.tokTypes.eof?this._bufferedToken:null;}
tokenLineStart(){return this._tokenLineStart;}
tokenLineEnd(){return this._tokenLineEnd;}
tokenColumnStart(){return this._tokenColumnStart;}}
self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.AcornTokenizer=AcornTokenizer;class CSSFormatter{constructor(builder){this._builder=builder;}
format(text,lineEndings,fromOffset,toOffset){this._lineEndings=lineEndings;this._fromOffset=fromOffset;this._toOffset=toOffset;this._lastLine=-1;this._state={};const tokenize=FormatterWorker.createTokenizer('text/css');const oldEnforce=this._builder.setEnforceSpaceBetweenWords(false);tokenize(text.substring(this._fromOffset,this._toOffset),this._tokenCallback.bind(this));this._builder.setEnforceSpaceBetweenWords(oldEnforce);}
_tokenCallback(token,type,startPosition){startPosition+=this._fromOffset;const startLine=this._lineEndings.lowerBound(startPosition);if(startLine!==this._lastLine){this._state.eatWhitespace=true;}
if(/^property/.test(type)&&!this._state.inPropertyValue){this._state.seenProperty=true;}
this._lastLine=startLine;const isWhitespace=/^\s+$/.test(token);if(isWhitespace){if(!this._state.eatWhitespace){this._builder.addSoftSpace();}
return;}
this._state.eatWhitespace=false;if(token==='\n'){return;}
if(token!=='}'){if(this._state.afterClosingBrace){this._builder.addNewLine(true);}
this._state.afterClosingBrace=false;}
if(token==='}'){if(this._state.inPropertyValue){this._builder.addNewLine();}
this._builder.decreaseNestingLevel();this._state.afterClosingBrace=true;this._state.inPropertyValue=false;}else if(token===':'&&!this._state.inPropertyValue&&this._state.seenProperty){this._builder.addToken(token,startPosition);this._builder.addSoftSpace();this._state.eatWhitespace=true;this._state.inPropertyValue=true;this._state.seenProperty=false;return;}else if(token==='{'){this._builder.addSoftSpace();this._builder.addToken(token,startPosition);this._builder.addNewLine();this._builder.increaseNestingLevel();return;}
this._builder.addToken(token,startPosition);if(type==='comment'&&!this._state.inPropertyValue&&!this._state.seenProperty){this._builder.addNewLine();}
if(token===';'&&this._state.inPropertyValue){this._state.inPropertyValue=false;this._builder.addNewLine();}else if(token==='}'){this._builder.addNewLine();}}}
self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.CSSFormatter=CSSFormatter;const CSSParserStates={Initial:'Initial',Selector:'Selector',Style:'Style',PropertyName:'PropertyName',PropertyValue:'PropertyValue',AtRule:'AtRule'};function parseCSS(text){_innerParseCSS(text,postMessage);}
function _innerParseCSS(text,chunkCallback){const chunkSize=100000;const lines=text.split('\n');let rules=[];let processedChunkCharacters=0;let state=CSSParserStates.Initial;let rule;let property;const UndefTokenType=new Set();let disabledRules=[];function disabledRulesCallback(chunk){disabledRules=disabledRules.concat(chunk.chunk);}
function processToken(tokenValue,tokenTypes,column,newColumn){const tokenType=tokenTypes?new Set(tokenTypes.split(' ')):UndefTokenType;switch(state){case CSSParserStates.Initial:if(tokenType.has('qualifier')||tokenType.has('builtin')||tokenType.has('tag')){rule={selectorText:tokenValue,lineNumber:lineNumber,columnNumber:column,properties:[],};state=CSSParserStates.Selector;}else if(tokenType.has('def')){rule={atRule:tokenValue,lineNumber:lineNumber,columnNumber:column,};state=CSSParserStates.AtRule;}
break;case CSSParserStates.Selector:if(tokenValue==='{'&&tokenType===UndefTokenType){rule.selectorText=rule.selectorText.trim();rule.styleRange=createRange(lineNumber,newColumn);state=CSSParserStates.Style;}else{rule.selectorText+=tokenValue;}
break;case CSSParserStates.AtRule:if((tokenValue===';'||tokenValue==='{')&&tokenType===UndefTokenType){rule.atRule=rule.atRule.trim();rules.push(rule);state=CSSParserStates.Initial;}else{rule.atRule+=tokenValue;}
break;case CSSParserStates.Style:if(tokenType.has('meta')||tokenType.has('property')){property={name:tokenValue,value:'',range:createRange(lineNumber,column),nameRange:createRange(lineNumber,column)};state=CSSParserStates.PropertyName;}else if(tokenValue==='}'&&tokenType===UndefTokenType){rule.styleRange.endLine=lineNumber;rule.styleRange.endColumn=column;rules.push(rule);state=CSSParserStates.Initial;}else if(tokenType.has('comment')){if(tokenValue.substring(0,2)!=='/*'||tokenValue.substring(tokenValue.length-2)!=='*/'){break;}
const uncommentedText=tokenValue.substring(2,tokenValue.length-2);const fakeRule='a{\n'+uncommentedText+'}';disabledRules=[];_innerParseCSS(fakeRule,disabledRulesCallback);if(disabledRules.length===1&&disabledRules[0].properties.length===1){const disabledProperty=disabledRules[0].properties[0];disabledProperty.disabled=true;disabledProperty.range=createRange(lineNumber,column);disabledProperty.range.endColumn=newColumn;const lineOffset=lineNumber-1;const columnOffset=column+2;disabledProperty.nameRange.startLine+=lineOffset;disabledProperty.nameRange.startColumn+=columnOffset;disabledProperty.nameRange.endLine+=lineOffset;disabledProperty.nameRange.endColumn+=columnOffset;disabledProperty.valueRange.startLine+=lineOffset;disabledProperty.valueRange.startColumn+=columnOffset;disabledProperty.valueRange.endLine+=lineOffset;disabledProperty.valueRange.endColumn+=columnOffset;rule.properties.push(disabledProperty);}}
break;case CSSParserStates.PropertyName:if(tokenValue===':'&&tokenType===UndefTokenType){property.name=property.name;property.nameRange.endLine=lineNumber;property.nameRange.endColumn=column;property.valueRange=createRange(lineNumber,newColumn);state=CSSParserStates.PropertyValue;}else if(tokenType.has('property')){property.name+=tokenValue;}
break;case CSSParserStates.PropertyValue:if((tokenValue===';'||tokenValue==='}')&&tokenType===UndefTokenType){property.value=property.value;property.valueRange.endLine=lineNumber;property.valueRange.endColumn=column;property.range.endLine=lineNumber;property.range.endColumn=tokenValue===';'?newColumn:column;rule.properties.push(property);if(tokenValue==='}'){rule.styleRange.endLine=lineNumber;rule.styleRange.endColumn=column;rules.push(rule);state=CSSParserStates.Initial;}else{state=CSSParserStates.Style;}}else if(!tokenType.has('comment')){property.value+=tokenValue;}
break;default:console.assert(false,'Unknown CSS parser state.');}
processedChunkCharacters+=newColumn-column;if(processedChunkCharacters>chunkSize){chunkCallback({chunk:rules,isLastChunk:false});rules=[];processedChunkCharacters=0;}}
const tokenizer=FormatterWorker.createTokenizer('text/css');let lineNumber;for(lineNumber=0;lineNumber<lines.length;++lineNumber){const line=lines[lineNumber];tokenizer(line,processToken);processToken('\n',null,line.length,line.length+1);}
chunkCallback({chunk:rules,isLastChunk:true});function createRange(lineNumber,columnNumber){return{startLine:lineNumber,startColumn:columnNumber,endLine:lineNumber,endColumn:columnNumber};}}
self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.CSSParserStates=CSSParserStates;FormatterWorker.parseCSS=parseCSS;FormatterWorker._innerParseCSS=_innerParseCSS;class ESTreeWalker{constructor(beforeVisit,afterVisit){this._beforeVisit=beforeVisit;this._afterVisit=afterVisit||new Function();this._walkNulls=false;}
setWalkNulls(value){this._walkNulls=value;}
walk(ast){this._innerWalk(ast,null);}
_innerWalk(node,parent){if(!node&&parent&&this._walkNulls){const result=({raw:'null',value:null});result.type='Literal';node=(result);}
if(!node){return;}
node.parent=parent;if(this._beforeVisit.call(null,node)===FormatterWorker.ESTreeWalker.SkipSubtree){this._afterVisit.call(null,node);return;}
const walkOrder=_walkOrder[node.type];if(!walkOrder){console.error('Walk order not defined for '+node.type);return;}
if(node.type==='TemplateLiteral'){const templateLiteral=(node);const expressionsLength=templateLiteral.expressions.length;for(let i=0;i<expressionsLength;++i){this._innerWalk(templateLiteral.quasis[i],templateLiteral);this._innerWalk(templateLiteral.expressions[i],templateLiteral);}
this._innerWalk(templateLiteral.quasis[expressionsLength],templateLiteral);}else{for(let i=0;i<walkOrder.length;++i){const entity=node[walkOrder[i]];if(Array.isArray(entity)){this._walkArray(entity,node);}else{this._innerWalk(entity,node);}}}
this._afterVisit.call(null,node);}
_walkArray(nodeArray,parentNode){for(let i=0;i<nodeArray.length;++i){this._innerWalk(nodeArray[i],parentNode);}}}
const _walkOrder={'AwaitExpression':['arguments'],'ArrayExpression':['elements'],'ArrayPattern':['elements'],'ArrowFunctionExpression':['params','body'],'AssignmentExpression':['left','right'],'AssignmentPattern':['left','right'],'BinaryExpression':['left','right'],'BlockStatement':['body'],'BreakStatement':['label'],'CallExpression':['callee','arguments'],'CatchClause':['param','body'],'ClassBody':['body'],'ClassDeclaration':['id','superClass','body'],'ClassExpression':['id','superClass','body'],'ConditionalExpression':['test','consequent','alternate'],'ContinueStatement':['label'],'DebuggerStatement':[],'DoWhileStatement':['body','test'],'EmptyStatement':[],'ExpressionStatement':['expression'],'ForInStatement':['left','right','body'],'ForOfStatement':['left','right','body'],'ForStatement':['init','test','update','body'],'FunctionDeclaration':['id','params','body'],'FunctionExpression':['id','params','body'],'Identifier':[],'ImportDeclaration':['specifiers','source'],'ImportExpression':['source'],'ExportAllDeclaration':['source'],'ExportDefaultDeclaration':['declaration'],'ExportNamedDeclaration':['specifiers','source','declaration'],'IfStatement':['test','consequent','alternate'],'LabeledStatement':['label','body'],'Literal':[],'LogicalExpression':['left','right'],'MemberExpression':['object','property'],'MethodDefinition':['key','value'],'NewExpression':['callee','arguments'],'ObjectExpression':['properties'],'ObjectPattern':['properties'],'ParenthesizedExpression':['expression'],'Program':['body'],'Property':['key','value'],'RestElement':['argument'],'ReturnStatement':['argument'],'SequenceExpression':['expressions'],'SpreadElement':['argument'],'Super':[],'SwitchCase':['test','consequent'],'SwitchStatement':['discriminant','cases'],'TaggedTemplateExpression':['tag','quasi'],'TemplateElement':[],'TemplateLiteral':['quasis','expressions'],'ThisExpression':[],'ThrowStatement':['argument'],'TryStatement':['block','handler','finalizer'],'UnaryExpression':['argument'],'UpdateExpression':['argument'],'VariableDeclaration':['declarations'],'VariableDeclarator':['id','init'],'WhileStatement':['test','body'],'WithStatement':['object','body'],'YieldExpression':['argument']};self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.ESTreeWalker=ESTreeWalker;FormatterWorker.ESTreeWalker.SkipSubtree={};class FormattedContentBuilder{constructor(indentString){this._lastOriginalPosition=0;this._formattedContent=[];this._formattedContentLength=0;this._lastFormattedPosition=0;this._mapping={original:[0],formatted:[0]};this._nestingLevel=0;this._indentString=indentString;this._cachedIndents=new Map();this._newLines=0;this._softSpace=false;this._hardSpaces=0;this._enforceSpaceBetweenWords=true;}
setEnforceSpaceBetweenWords(value){const oldValue=this._enforceSpaceBetweenWords;this._enforceSpaceBetweenWords=value;return oldValue;}
addToken(token,offset){const last=this._formattedContent.peekLast();if(this._enforceSpaceBetweenWords&&last&&/\w/.test(last[last.length-1])&&/\w/.test(token)){this.addSoftSpace();}
this._appendFormatting();this._addMappingIfNeeded(offset);this._addText(token);}
addSoftSpace(){if(!this._hardSpaces){this._softSpace=true;}}
addHardSpace(){this._softSpace=false;++this._hardSpaces;}
addNewLine(noSquash){if(!this._formattedContentLength){return;}
if(noSquash){++this._newLines;}else{this._newLines=this._newLines||1;}}
increaseNestingLevel(){this._nestingLevel+=1;}
decreaseNestingLevel(){if(this._nestingLevel>0){this._nestingLevel-=1;}}
_appendFormatting(){if(this._newLines){for(let i=0;i<this._newLines;++i){this._addText('\n');}
this._addText(this._indent());}else if(this._softSpace){this._addText(' ');}
if(this._hardSpaces){for(let i=0;i<this._hardSpaces;++i){this._addText(' ');}}
this._newLines=0;this._softSpace=false;this._hardSpaces=0;}
content(){return this._formattedContent.join('')+(this._newLines?'\n':'');}
mapping(){return this._mapping;}
_indent(){const cachedValue=this._cachedIndents.get(this._nestingLevel);if(cachedValue){return cachedValue;}
let fullIndent='';for(let i=0;i<this._nestingLevel;++i){fullIndent+=this._indentString;}
if(this._nestingLevel<=20){this._cachedIndents.set(this._nestingLevel,fullIndent);}
return fullIndent;}
_addText(text){this._formattedContent.push(text);this._formattedContentLength+=text.length;}
_addMappingIfNeeded(originalPosition){if(originalPosition-this._lastOriginalPosition===this._formattedContentLength-this._lastFormattedPosition){return;}
this._mapping.original.push(originalPosition);this._lastOriginalPosition=originalPosition;this._mapping.formatted.push(this._formattedContentLength);this._lastFormattedPosition=this._formattedContentLength;}}
self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.FormattedContentBuilder=FormattedContentBuilder;function createTokenizer(mimeType){const mode=CodeMirror.getMode({indentUnit:2},mimeType);const state=CodeMirror.startState(mode);function tokenize(line,callback){const stream=new CodeMirror.StringStream(line);while(!stream.eol()){const style=mode.token(stream,state);const value=stream.current();if(callback(value,style,stream.start,stream.start+value.length)===AbortTokenization){return;}
stream.start=stream.pos;}}
return tokenize;}
const AbortTokenization={};self.onmessage=function(event){const method=(event.data.method);const params=(event.data.params);if(!method){return;}
switch(method){case'format':format(params.mimeType,params.content,params.indentString);break;case'parseCSS':FormatterWorker.parseCSS(params.content);break;case'parseSCSS':FormatterWorkerContentParser.parse(params.content,'text/x-scss');break;case'javaScriptOutline':FormatterWorker.javaScriptOutline(params.content);break;case'javaScriptIdentifiers':javaScriptIdentifiers(params.content);break;case'evaluatableJavaScriptSubstring':evaluatableJavaScriptSubstring(params.content);break;case'parseJSONRelaxed':parseJSONRelaxed(params.content);break;case'preprocessTopLevelAwaitExpressions':preprocessTopLevelAwaitExpressions(params.content);break;case'findLastExpression':postMessage(findLastExpression(params.content));break;case'findLastFunctionCall':postMessage(findLastFunctionCall(params.content));break;case'argumentsList':postMessage(argumentsList(params.content));break;default:console.error('Unsupport method name: '+method);}};function parseJSONRelaxed(content){postMessage(FormatterWorker.RelaxedJSONParser.parse(content));}
function evaluatableJavaScriptSubstring(content){const tokenizer=acorn.tokenizer(content,{});let result='';try{let token=tokenizer.getToken();while(token.type!==acorn.tokTypes.eof&&FormatterWorker.AcornTokenizer.punctuator(token)){token=tokenizer.getToken();}
const startIndex=token.start;let endIndex=token.end;let openBracketsCounter=0;while(token.type!==acorn.tokTypes.eof){const isIdentifier=FormatterWorker.AcornTokenizer.identifier(token);const isThis=FormatterWorker.AcornTokenizer.keyword(token,'this');const isString=token.type===acorn.tokTypes.string;if(!isThis&&!isIdentifier&&!isString){break;}
endIndex=token.end;token=tokenizer.getToken();while(FormatterWorker.AcornTokenizer.punctuator(token,'.[]')){if(FormatterWorker.AcornTokenizer.punctuator(token,'[')){openBracketsCounter++;}
if(FormatterWorker.AcornTokenizer.punctuator(token,']')){endIndex=openBracketsCounter>0?token.end:endIndex;openBracketsCounter--;}
token=tokenizer.getToken();}}
result=content.substring(startIndex,endIndex);}catch(e){console.error(e);}
postMessage(result);}
function preprocessTopLevelAwaitExpressions(content){let wrapped='(async () => {'+content+'\n})()';let root;let body;try{root=acorn.parse(wrapped,{});body=root.body[0].expression.callee.body;}catch(e){postMessage('');return;}
const changes=[];let containsAwait=false;let containsReturn=false;class Visitor{ClassDeclaration(node){if(node.parent===body){changes.push({text:node.id.name+'=',start:node.start,end:node.start});}}
FunctionDeclaration(node){changes.push({text:node.id.name+'=',start:node.start,end:node.start});return FormatterWorker.ESTreeWalker.SkipSubtree;}
FunctionExpression(node){return FormatterWorker.ESTreeWalker.SkipSubtree;}
ArrowFunctionExpression(node){return FormatterWorker.ESTreeWalker.SkipSubtree;}
MethodDefinition(node){return FormatterWorker.ESTreeWalker.SkipSubtree;}
AwaitExpression(node){containsAwait=true;}
ForOfStatement(node){if(node.await){containsAwait=true;}}
ReturnStatement(node){containsReturn=true;}
VariableDeclaration(node){if(node.kind!=='var'&&node.parent!==body){return;}
if(node.parent.type==='ForOfStatement'&&node.parent.left===node){return;}
const onlyOneDeclaration=node.declarations.length===1;changes.push({text:onlyOneDeclaration?'void':'void (',start:node.start,end:node.start+node.kind.length});for(const declaration of node.declarations){if(!declaration.init){changes.push({text:'(',start:declaration.start,end:declaration.start});changes.push({text:'=undefined)',start:declaration.end,end:declaration.end});continue;}
changes.push({text:'(',start:declaration.start,end:declaration.start});changes.push({text:')',start:declaration.end,end:declaration.end});}
if(!onlyOneDeclaration){const last=node.declarations.peekLast();changes.push({text:')',start:last.end,end:last.end});}}}
const walker=new FormatterWorker.ESTreeWalker(visit.bind(new Visitor()));walker.walk(body);function visit(node){if(node.type in this){return this[node.type](node);}}
if(!containsAwait||containsReturn){postMessage('');return;}
const last=body.body[body.body.length-1];if(last.type==='ExpressionStatement'){changes.push({text:'return (',start:last.start,end:last.start});if(wrapped[last.end-1]!==';'){changes.push({text:')',start:last.end,end:last.end});}else{changes.push({text:')',start:last.end-1,end:last.end-1});}}
while(changes.length){const change=changes.pop();wrapped=wrapped.substr(0,change.start)+change.text+wrapped.substr(change.end);}
postMessage(wrapped);}
function javaScriptIdentifiers(content){let root=null;try{root=acorn.parse(content,{ranges:false});}catch(e){}
const identifiers=[];const walker=new FormatterWorker.ESTreeWalker(beforeVisit);function isFunction(node){return node.type==='FunctionDeclaration'||node.type==='FunctionExpression'||node.type==='ArrowFunctionExpression';}
function beforeVisit(node){if(isFunction(node)){if(node.id){identifiers.push(node.id);}
return FormatterWorker.ESTreeWalker.SkipSubtree;}
if(node.type!=='Identifier'){return;}
if(node.parent&&node.parent.type==='MemberExpression'&&node.parent.property===node&&!node.parent.computed){return;}
identifiers.push(node);}
if(!root||root.type!=='Program'||root.body.length!==1||!isFunction(root.body[0])){postMessage([]);return;}
const functionNode=root.body[0];for(const param of functionNode.params){walker.walk(param);}
walker.walk(functionNode.body);const reduced=identifiers.map(id=>({name:id.name,offset:id.start}));postMessage(reduced);}
function format(mimeType,text,indentString){indentString=indentString||'    ';const result={};const builder=new FormatterWorker.FormattedContentBuilder(indentString);const lineEndings=text.computeLineEndings();try{switch(mimeType){case'text/html':{const formatter=new FormatterWorker.HTMLFormatter(builder);formatter.format(text,lineEndings);break;}
case'text/css':{const formatter=new FormatterWorker.CSSFormatter(builder);formatter.format(text,lineEndings,0,text.length);break;}
case'text/javascript':{const formatter=new FormatterWorker.JavaScriptFormatter(builder);formatter.format(text,lineEndings,0,text.length);break;}
default:{const formatter=new FormatterWorker.IdentityFormatter(builder);formatter.format(text,lineEndings,0,text.length);}}
result.mapping=builder.mapping();result.content=builder.content();}catch(e){console.error(e);result.mapping={original:[0],formatted:[0]};result.content=text;}
postMessage(result);}
function findLastFunctionCall(content){if(content.length>10000){return null;}
try{const tokenizer=acorn.tokenizer(content,{});while(tokenizer.getToken().type!==acorn.tokTypes.eof){}}catch(e){return null;}
const suffix='000)';const base=_lastCompleteExpression(content,suffix,new Set(['CallExpression','NewExpression']));if(!base){return null;}
const callee=base.baseNode['callee'];let functionName='';const functionProperty=callee.type==='Identifier'?callee:callee.property;if(functionProperty){if(functionProperty.type==='Identifier'){functionName=functionProperty.name;}else if(functionProperty.type==='Literal'){functionName=functionProperty.value;}}
const argumentIndex=base.baseNode['arguments'].length-1;const baseExpression=`(${base.baseExpression.substring(callee.start - base.baseNode.start, callee.end - base.baseNode.start)})`;const possibleSideEffects=_nodeHasPossibleSideEffects(callee);let receiver='(function(){return this})()';if(callee.type==='MemberExpression'){const receiverBase=callee['object'];receiver=base.baseExpression.substring(receiverBase.start-base.baseNode.start,receiverBase.end-base.baseNode.start);}
return{baseExpression,receiver,possibleSideEffects,argumentIndex,functionName};}
function argumentsList(content){if(content.length>10000){return[];}
let parsed=null;try{parsed=acorn.parse(`(${content})`,{});}catch(e){}
if(!parsed){try{parsed=acorn.parse(`({${content}})`,{});}catch(e){}}
if(!parsed||!parsed.body||!parsed.body[0]||!parsed.body[0].expression){return[];}
const expression=parsed.body[0].expression;let params=null;switch(expression.type){case'ClassExpression':if(!expression.body.body){break;}
const constructor=expression.body.body.find(method=>method.kind==='constructor');if(constructor){params=constructor.value.params;}
break;case'ObjectExpression':if(!expression.properties[0]||!expression.properties[0].value){break;}
params=expression.properties[0].value.params;break;case'FunctionExpression':case'ArrowFunctionExpression':params=expression.params;break;}
if(!params){return[];}
return params.map(paramName);function paramName(param){switch(param.type){case'Identifier':return param.name;case'AssignmentPattern':return'?'+paramName(param.left);case'ObjectPattern':return'obj';case'ArrayPattern':return'arr';case'RestElement':return'...'+paramName(param.argument);}
return'?';}}
function findLastExpression(content){if(content.length>10000){return null;}
try{const tokenizer=acorn.tokenizer(content,{});while(tokenizer.getToken().type!==acorn.tokTypes.eof){}}catch(e){return null;}
const suffix='.DEVTOOLS';try{acorn.parse(content+suffix,{});}catch(parseError){if(parseError.message.startsWith('Unexpected token')&&parseError.pos===content.length){return null;}}
const base=_lastCompleteExpression(content,suffix,new Set(['MemberExpression','Identifier']));if(!base){return null;}
const{baseExpression,baseNode}=base;const possibleSideEffects=_nodeHasPossibleSideEffects(baseNode);return{baseExpression,possibleSideEffects};}
function _lastCompleteExpression(content,suffix,types){let ast;let parsedContent='';for(let i=0;i<content.length;i++){try{parsedContent=content[i]==='{'?`(${content.substring(i)})${suffix}`:`${content.substring(i)}${suffix}`;ast=acorn.parse(parsedContent,{});break;}catch(e){}}
if(!ast){return null;}
let baseNode=null;const walker=new FormatterWorker.ESTreeWalker(node=>{if(baseNode||node.end<ast.end){return FormatterWorker.ESTreeWalker.SkipSubtree;}
if(types.has(node.type)){baseNode=node;}});walker.walk(ast);if(!baseNode){return null;}
let baseExpression=parsedContent.substring(baseNode.start,parsedContent.length-suffix.length);if(baseExpression.startsWith('{')){baseExpression=`(${baseExpression})`;}
return{baseNode,baseExpression};}
function _nodeHasPossibleSideEffects(baseNode){const sideEffectFreeTypes=new Set(['MemberExpression','Identifier','BinaryExpression','Literal','TemplateLiteral','TemplateElement','ObjectExpression','ArrayExpression','Property','ThisExpression']);let possibleSideEffects=false;const sideEffectwalker=new FormatterWorker.ESTreeWalker(node=>{if(!possibleSideEffects&&!sideEffectFreeTypes.has(node.type)){possibleSideEffects=true;}
if(possibleSideEffects){return FormatterWorker.ESTreeWalker.SkipSubtree;}});sideEffectwalker.walk((baseNode));return possibleSideEffects;}
class FormatterWorkerContentParser{parse(content){}}
FormatterWorkerContentParser.parse=function(content,mimeType){const extension=self.runtime.extensions(FormatterWorkerContentParser).find(findExtension);console.assert(extension);extension.instance().then(instance=>instance.parse(content)).catchException(null).then(postMessage);function findExtension(extension){return extension.descriptor()['mimeType']===mimeType;}};(function disableLoggingForTest(){if(Root.Runtime.queryParam('test')){console.error=()=>undefined;}})();self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.AbortTokenization=AbortTokenization;FormatterWorker.createTokenizer=createTokenizer;FormatterWorker.parseJSONRelaxed=parseJSONRelaxed;FormatterWorker.evaluatableJavaScriptSubstring=evaluatableJavaScriptSubstring;FormatterWorker.preprocessTopLevelAwaitExpressions=preprocessTopLevelAwaitExpressions;FormatterWorker.javaScriptIdentifiers=javaScriptIdentifiers;FormatterWorker.format=format;FormatterWorker.findLastFunctionCall=findLastFunctionCall;FormatterWorker.argumentsList=argumentsList;FormatterWorker.findLastExpression=findLastExpression;FormatterWorker._lastCompleteExpression=_lastCompleteExpression;FormatterWorker._nodeHasPossibleSideEffects=_nodeHasPossibleSideEffects;FormatterWorker.FormatterWorkerContentParser=FormatterWorkerContentParser;class HTMLFormatter{constructor(builder){this._builder=builder;this._jsFormatter=new FormatterWorker.JavaScriptFormatter(builder);this._cssFormatter=new FormatterWorker.CSSFormatter(builder);}
format(text,lineEndings){this._text=text;this._lineEndings=lineEndings;this._model=new FormatterWorker.HTMLModel(text);this._walk(this._model.document());}
_formatTokensTill(element,offset){while(this._model.peekToken()&&this._model.peekToken().startOffset<offset){const token=this._model.nextToken();this._formatToken(element,token);}}
_walk(element){if(element.parent){this._formatTokensTill(element.parent,element.openTag.startOffset);}
this._beforeOpenTag(element);this._formatTokensTill(element,element.openTag.endOffset);this._afterOpenTag(element);for(let i=0;i<element.children.length;++i){this._walk(element.children[i]);}
this._formatTokensTill(element,element.closeTag.startOffset);this._beforeCloseTag(element);this._formatTokensTill(element,element.closeTag.endOffset);this._afterCloseTag(element);}
_beforeOpenTag(element){if(!element.children.length||element===this._model.document()){return;}
this._builder.addNewLine();}
_afterOpenTag(element){if(!element.children.length||element===this._model.document()){return;}
this._builder.increaseNestingLevel();this._builder.addNewLine();}
_beforeCloseTag(element){if(!element.children.length||element===this._model.document()){return;}
this._builder.decreaseNestingLevel();this._builder.addNewLine();}
_afterCloseTag(element){this._builder.addNewLine();}
_formatToken(element,token){if(token.value.isWhitespace()){return;}
if(token.type.has('comment')||token.type.has('meta')){this._builder.addNewLine();this._builder.addToken(token.value.trim(),token.startOffset);this._builder.addNewLine();return;}
const isBodyToken=element.openTag.endOffset<=token.startOffset&&token.startOffset<element.closeTag.startOffset;if(isBodyToken&&element.name==='style'){this._builder.addNewLine();this._builder.increaseNestingLevel();this._cssFormatter.format(this._text,this._lineEndings,token.startOffset,token.endOffset);this._builder.decreaseNestingLevel();return;}
if(isBodyToken&&element.name==='script'){this._builder.addNewLine();this._builder.increaseNestingLevel();if(this._scriptTagIsJavaScript(element)){this._jsFormatter.format(this._text,this._lineEndings,token.startOffset,token.endOffset);}else{this._builder.addToken(token.value,token.startOffset);this._builder.addNewLine();}
this._builder.decreaseNestingLevel();return;}
if(!isBodyToken&&token.type.has('attribute')){this._builder.addSoftSpace();}
this._builder.addToken(token.value,token.startOffset);}
_scriptTagIsJavaScript(element){if(!element.openTag.attributes.has('type')){return true;}
let type=element.openTag.attributes.get('type').toLowerCase();if(!type){return true;}
const isWrappedInQuotes=/^(["\'])(.*)\1$/.exec(type.trim());if(isWrappedInQuotes){type=isWrappedInQuotes[2];}
return FormatterWorker.HTMLFormatter.SupportedJavaScriptMimeTypes.has(type.trim());}}
HTMLFormatter.SupportedJavaScriptMimeTypes=new Set(['application/ecmascript','application/javascript','application/x-ecmascript','application/x-javascript','text/ecmascript','text/javascript','text/javascript1.0','text/javascript1.1','text/javascript1.2','text/javascript1.3','text/javascript1.4','text/javascript1.5','text/jscript','text/livescript','text/x-ecmascript','text/x-javascript']);class HTMLModel{constructor(text){this._state=ParseState.Initial;this._document=new Element('document');this._document.openTag=new Tag('document',0,0,new Map(),true,false);this._document.closeTag=new Tag('document',text.length,text.length,new Map(),false,false);this._stack=[this._document];this._tokens=[];this._tokenIndex=0;this._build(text);}
_build(text){const tokenizer=FormatterWorker.createTokenizer('text/html');let lastOffset=0;const lowerCaseText=text.toLowerCase();while(true){tokenizer(text.substring(lastOffset),processToken.bind(this,lastOffset));if(lastOffset>=text.length){break;}
const element=this._stack.peekLast();lastOffset=lowerCaseText.indexOf('</'+element.name,lastOffset);if(lastOffset===-1){lastOffset=text.length;}
const tokenStart=element.openTag.endOffset;const tokenEnd=lastOffset;const tokenValue=text.substring(tokenStart,tokenEnd);this._tokens.push(new Token(tokenValue,new Set(),tokenStart,tokenEnd));}
while(this._stack.length>1){const element=this._stack.peekLast();this._popElement(new Tag(element.name,text.length,text.length,new Map(),false,false));}
function processToken(baseOffset,tokenValue,type,tokenStart,tokenEnd){tokenStart+=baseOffset;tokenEnd+=baseOffset;lastOffset=tokenEnd;const tokenType=type?new Set(type.split(' ')):new Set();const token=new Token(tokenValue,tokenType,tokenStart,tokenEnd);this._tokens.push(token);this._updateDOM(token);const element=this._stack.peekLast();if(element&&(element.name==='script'||element.name==='style')&&element.openTag.endOffset===lastOffset){return FormatterWorker.AbortTokenization;}}}
_updateDOM(token){const S=ParseState;const value=token.value;const type=token.type;switch(this._state){case S.Initial:if(type.has('bracket')&&(value==='<'||value==='</')){this._onStartTag(token);this._state=S.Tag;}
return;case S.Tag:if(type.has('tag')&&!type.has('bracket')){this._tagName=value.trim().toLowerCase();}else if(type.has('attribute')){this._attributeName=value.trim().toLowerCase();this._attributes.set(this._attributeName,'');this._state=S.AttributeName;}else if(type.has('bracket')&&(value==='>'||value==='/>')){this._onEndTag(token);this._state=S.Initial;}
return;case S.AttributeName:if(!type.size&&value==='='){this._state=S.AttributeValue;}else if(type.has('bracket')&&(value==='>'||value==='/>')){this._onEndTag(token);this._state=S.Initial;}
return;case S.AttributeValue:if(type.has('string')){this._attributes.set(this._attributeName,value);this._state=S.Tag;}else if(type.has('bracket')&&(value==='>'||value==='/>')){this._onEndTag(token);this._state=S.Initial;}
return;}}
_onStartTag(token){this._tagName='';this._tagStartOffset=token.startOffset;this._tagEndOffset=null;this._attributes=new Map();this._attributeName='';this._isOpenTag=token.value==='<';}
_onEndTag(token){this._tagEndOffset=token.endOffset;const selfClosingTag=token.value==='/>'||SelfClosingTags.has(this._tagName);const tag=new Tag(this._tagName,this._tagStartOffset,this._tagEndOffset,this._attributes,this._isOpenTag,selfClosingTag);this._onTagComplete(tag);}
_onTagComplete(tag){if(tag.isOpenTag){const topElement=this._stack.peekLast();if(topElement!==this._document&&topElement.openTag.selfClosingTag){this._popElement(autocloseTag(topElement,topElement.openTag.endOffset));}else if((topElement.name in AutoClosingTags)&&AutoClosingTags[topElement.name].has(tag.name)){this._popElement(autocloseTag(topElement,tag.startOffset));}
this._pushElement(tag);return;}
while(this._stack.length>1&&this._stack.peekLast().name!==tag.name){this._popElement(autocloseTag(this._stack.peekLast(),tag.startOffset));}
if(this._stack.length===1){return;}
this._popElement(tag);function autocloseTag(element,offset){return new Tag(element.name,offset,offset,new Map(),false,false);}}
_popElement(closeTag){const element=this._stack.pop();element.closeTag=closeTag;}
_pushElement(openTag){const topElement=this._stack.peekLast();const newElement=new Element(openTag.name);newElement.parent=topElement;topElement.children.push(newElement);newElement.openTag=openTag;this._stack.push(newElement);}
peekToken(){return this._tokenIndex<this._tokens.length?this._tokens[this._tokenIndex]:null;}
nextToken(){return this._tokens[this._tokenIndex++];}
document(){return this._document;}}
const SelfClosingTags=new Set(['area','base','br','col','command','embed','hr','img','input','keygen','link','meta','param','source','track','wbr']);const AutoClosingTags={'head':new Set(['body']),'li':new Set(['li']),'dt':new Set(['dt','dd']),'dd':new Set(['dt','dd']),'p':new Set(['address','article','aside','blockquote','div','dl','fieldset','footer','form','h1','h2','h3','h4','h5','h6','header','hgroup','hr','main','nav','ol','p','pre','section','table','ul']),'rb':new Set(['rb','rt','rtc','rp']),'rt':new Set(['rb','rt','rtc','rp']),'rtc':new Set(['rb','rtc','rp']),'rp':new Set(['rb','rt','rtc','rp']),'optgroup':new Set(['optgroup']),'option':new Set(['option','optgroup']),'colgroup':new Set(['colgroup']),'thead':new Set(['tbody','tfoot']),'tbody':new Set(['tbody','tfoot']),'tfoot':new Set(['tbody']),'tr':new Set(['tr']),'td':new Set(['td','th']),'th':new Set(['td','th']),};const ParseState={Initial:'Initial',Tag:'Tag',AttributeName:'AttributeName',AttributeValue:'AttributeValue'};const Token=class{constructor(value,type,startOffset,endOffset){this.value=value;this.type=type;this.startOffset=startOffset;this.endOffset=endOffset;}};const Tag=class{constructor(name,startOffset,endOffset,attributes,isOpenTag,selfClosingTag){this.name=name;this.startOffset=startOffset;this.endOffset=endOffset;this.attributes=attributes;this.isOpenTag=isOpenTag;this.selfClosingTag=selfClosingTag;}};const Element=class{constructor(name){this.name=name;this.children=[];this.parent=null;this.openTag=null;this.closeTag=null;}};self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.HTMLFormatter=HTMLFormatter;FormatterWorker.HTMLModel=HTMLModel;class IdentityFormatter{constructor(builder){this._builder=builder;}
format(text,lineEndings,fromOffset,toOffset){const content=text.substring(fromOffset,toOffset);this._builder.addToken(content,fromOffset);}}
self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.IdentityFormatter=IdentityFormatter;class JavaScriptFormatter{constructor(builder){this._builder=builder;}
format(text,lineEndings,fromOffset,toOffset){this._fromOffset=fromOffset;this._toOffset=toOffset;this._content=text.substring(this._fromOffset,this._toOffset);this._lastLineNumber=0;this._tokenizer=new FormatterWorker.AcornTokenizer(this._content);const options={ranges:false,preserveParens:true,allowImportExportEverywhere:true,ecmaVersion:2020};const ast=acorn.parse(this._content,options);const walker=new FormatterWorker.ESTreeWalker(this._beforeVisit.bind(this),this._afterVisit.bind(this));walker.walk(ast);}
_push(token,format){for(let i=0;i<format.length;++i){if(format[i]==='s'){this._builder.addSoftSpace();}else if(format[i]==='S'){this._builder.addHardSpace();}else if(format[i]==='n'){this._builder.addNewLine();}else if(format[i]==='>'){this._builder.increaseNestingLevel();}else if(format[i]==='<'){this._builder.decreaseNestingLevel();}else if(format[i]==='t'){if(this._tokenizer.tokenLineStart()-this._lastLineNumber>1){this._builder.addNewLine(true);}
this._lastLineNumber=this._tokenizer.tokenLineEnd();this._builder.addToken(this._content.substring(token.start,token.end),this._fromOffset+token.start);}}}
_beforeVisit(node){if(!node.parent){return;}
while(this._tokenizer.peekToken()&&this._tokenizer.peekToken().start<node.start){const token=(this._tokenizer.nextToken());const format=this._formatToken(node.parent,token);this._push(token,format);}}
_afterVisit(node){while(this._tokenizer.peekToken()&&this._tokenizer.peekToken().start<node.end){const token=(this._tokenizer.nextToken());const format=this._formatToken(node,token);this._push(token,format);}
this._push(null,this._finishNode(node));}
_inForLoopHeader(node){const parent=node.parent;if(!parent){return false;}
if(parent.type==='ForStatement'){return node===parent.init||node===parent.test||node===parent.update;}
if(parent.type==='ForInStatement'||parent.type==='ForOfStatement'){return node===parent.left||parent.right;}
return false;}
_formatToken(node,token){const AT=FormatterWorker.AcornTokenizer;if(AT.lineComment(token)){return'tn';}
if(AT.blockComment(token)){return'tn';}
if(node.type==='ContinueStatement'||node.type==='BreakStatement'){return node.label&&AT.keyword(token)?'ts':'t';}else if(node.type==='Identifier'){return't';}else if(node.type==='ReturnStatement'){if(AT.punctuator(token,';')){return't';}
return node.argument?'ts':'t';}else if(node.type==='Property'){if(AT.punctuator(token,':')){return'ts';}
return't';}else if(node.type==='ArrayExpression'){if(AT.punctuator(token,',')){return'ts';}
return't';}else if(node.type==='LabeledStatement'){if(AT.punctuator(token,':')){return'ts';}}else if(node.type==='LogicalExpression'||node.type==='AssignmentExpression'||node.type==='BinaryExpression'){if(AT.punctuator(token)&&!AT.punctuator(token,'()')){return'sts';}}else if(node.type==='ConditionalExpression'){if(AT.punctuator(token,'?:')){return'sts';}}else if(node.type==='VariableDeclarator'){if(AT.punctuator(token,'=')){return'sts';}}else if(node.type==='ObjectPattern'){if(node.parent&&node.parent.type==='VariableDeclarator'&&AT.punctuator(token,'{')){return'st';}
if(AT.punctuator(token,',')){return'ts';}}else if(node.type==='FunctionDeclaration'){if(AT.punctuator(token,',)')){return'ts';}}else if(node.type==='FunctionExpression'){if(AT.punctuator(token,',)')){return'ts';}
if(AT.keyword(token,'function')){return node.id?'ts':'t';}}else if(node.type==='WithStatement'){if(AT.punctuator(token,')')){return node.body&&node.body.type==='BlockStatement'?'ts':'tn>';}}else if(node.type==='SwitchStatement'){if(AT.punctuator(token,'{')){return'tn>';}
if(AT.punctuator(token,'}')){return'n<tn';}
if(AT.punctuator(token,')')){return'ts';}}else if(node.type==='SwitchCase'){if(AT.keyword(token,'case')){return'n<ts';}
if(AT.keyword(token,'default')){return'n<t';}
if(AT.punctuator(token,':')){return'tn>';}}else if(node.type==='VariableDeclaration'){if(AT.punctuator(token,',')){let allVariablesInitialized=true;const declarations=(node.declarations);for(let i=0;i<declarations.length;++i){allVariablesInitialized=allVariablesInitialized&&!!declarations[i].init;}
return!this._inForLoopHeader(node)&&allVariablesInitialized?'nSSts':'ts';}}else if(node.type==='BlockStatement'){if(AT.punctuator(token,'{')){return node.body.length?'tn>':'t';}
if(AT.punctuator(token,'}')){return node.body.length?'n<t':'t';}}else if(node.type==='CatchClause'){if(AT.punctuator(token,')')){return'ts';}}else if(node.type==='ObjectExpression'){if(!node.properties.length){return't';}
if(AT.punctuator(token,'{')){return'tn>';}
if(AT.punctuator(token,'}')){return'n<t';}
if(AT.punctuator(token,',')){return'tn';}}else if(node.type==='IfStatement'){if(AT.punctuator(token,')')){return node.consequent&&node.consequent.type==='BlockStatement'?'ts':'tn>';}
if(AT.keyword(token,'else')){const preFormat=node.consequent&&node.consequent.type==='BlockStatement'?'st':'n<t';let postFormat='n>';if(node.alternate&&(node.alternate.type==='BlockStatement'||node.alternate.type==='IfStatement')){postFormat='s';}
return preFormat+postFormat;}}else if(node.type==='CallExpression'){if(AT.punctuator(token,',')){return'ts';}}else if(node.type==='SequenceExpression'&&AT.punctuator(token,',')){return node.parent&&node.parent.type==='SwitchCase'?'ts':'tn';}else if(node.type==='ForStatement'||node.type==='ForOfStatement'||node.type==='ForInStatement'){if(AT.punctuator(token,';')){return'ts';}
if(AT.keyword(token,'in')||AT.identifier(token,'of')){return'sts';}
if(AT.punctuator(token,')')){return node.body&&node.body.type==='BlockStatement'?'ts':'tn>';}}else if(node.type==='WhileStatement'){if(AT.punctuator(token,')')){return node.body&&node.body.type==='BlockStatement'?'ts':'tn>';}}else if(node.type==='DoWhileStatement'){const blockBody=node.body&&node.body.type==='BlockStatement';if(AT.keyword(token,'do')){return blockBody?'ts':'tn>';}
if(AT.keyword(token,'while')){return blockBody?'sts':'n<ts';}}else if(node.type==='ClassBody'){if(AT.punctuator(token,'{')){return'stn>';}
if(AT.punctuator(token,'}')){return'<ntn';}
return't';}else if(node.type==='YieldExpression'){return't';}else if(node.type==='Super'){return't';}else if(node.type==='ImportExpression'){return't';}else if(node.type==='ExportAllDeclaration'){if(AT.punctuator(token,'*')){return'sts';}
return't';}else if(node.type==='ExportNamedDeclaration'||node.type==='ImportDeclaration'){if(AT.punctuator(token,'{')){return'st';}
if(AT.punctuator(token,',')){return'ts';}
if(AT.punctuator(token,'}')){return node.source?'ts':'t';}
if(AT.punctuator(token,'*')){return'sts';}
return't';}
return AT.keyword(token)&&!AT.keyword(token,'this')?'ts':'t';}
_finishNode(node){if(node.type==='WithStatement'){if(node.body&&node.body.type!=='BlockStatement'){return'n<';}}else if(node.type==='VariableDeclaration'){if(!this._inForLoopHeader(node)){return'n';}}else if(node.type==='ForStatement'||node.type==='ForOfStatement'||node.type==='ForInStatement'){if(node.body&&node.body.type!=='BlockStatement'){return'n<';}}else if(node.type==='BlockStatement'){if(node.parent&&node.parent.type==='IfStatement'&&node.parent.alternate&&node.parent.consequent===node){return'';}
if(node.parent&&node.parent.type==='FunctionExpression'&&node.parent.parent&&node.parent.parent.type==='Property'){return'';}
if(node.parent&&node.parent.type==='FunctionExpression'&&node.parent.parent&&node.parent.parent.type==='VariableDeclarator'){return'';}
if(node.parent&&node.parent.type==='FunctionExpression'&&node.parent.parent&&node.parent.parent.type==='CallExpression'){return'';}
if(node.parent&&node.parent.type==='DoWhileStatement'){return'';}
if(node.parent&&node.parent.type==='TryStatement'&&node.parent.block===node){return's';}
if(node.parent&&node.parent.type==='CatchClause'&&node.parent.parent.finalizer){return's';}
return'n';}else if(node.type==='WhileStatement'){if(node.body&&node.body.type!=='BlockStatement'){return'n<';}}else if(node.type==='IfStatement'){if(node.alternate){if(node.alternate.type!=='BlockStatement'&&node.alternate.type!=='IfStatement'){return'<';}}else if(node.consequent){if(node.consequent.type!=='BlockStatement'){return'<';}}}else if(node.type==='BreakStatement'||node.type==='ContinueStatement'||node.type==='ThrowStatement'||node.type==='ReturnStatement'||node.type==='ExpressionStatement'){return'n';}else if(node.type==='ImportDeclaration'||node.type==='ExportAllDeclaration'||node.type==='ExportDefaultDeclaration'||node.type==='ExportNamedDeclaration'){return'n';}
return'';}}
self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.JavaScriptFormatter=JavaScriptFormatter;function javaScriptOutline(content){const chunkSize=100000;let outlineChunk=[];let lastReportedOffset=0;let ast;try{ast=acorn.parse(content,{ranges:false});}catch(e){ast=acorn.loose.parse(content,{ranges:false});}
const textCursor=new TextUtils.TextCursor(content.computeLineEndings());const walker=new FormatterWorker.ESTreeWalker(beforeVisit);walker.walk(ast);postMessage({chunk:outlineChunk,isLastChunk:true});function beforeVisit(node){if(node.type==='ClassDeclaration'){reportClass((node.id));}else if(node.type==='VariableDeclarator'&&isClassNode(node.init)){reportClass((node.id));}else if(node.type==='AssignmentExpression'&&isNameNode(node.left)&&isClassNode(node.right)){reportClass((node.left));}else if(node.type==='Property'&&isNameNode(node.key)&&isClassNode(node.value)){reportClass((node.key));}else if(node.type==='FunctionDeclaration'){reportFunction((node.id),node);}else if(node.type==='VariableDeclarator'&&isFunctionNode(node.init)){reportFunction((node.id),(node.init));}else if(node.type==='AssignmentExpression'&&isNameNode(node.left)&&isFunctionNode(node.right)){reportFunction((node.left),(node.right));}else if((node.type==='MethodDefinition'||node.type==='Property')&&isNameNode(node.key)&&isFunctionNode(node.value)){const namePrefix=[];if(node.kind==='get'||node.kind==='set'){namePrefix.push(node.kind);}
if(node.static){namePrefix.push('static');}
reportFunction(node.key,node.value,namePrefix.join(' '));}}
function reportClass(nameNode){const name='class '+stringifyNameNode(nameNode);textCursor.advance(nameNode.start);addOutlineItem({name:name,line:textCursor.lineNumber(),column:textCursor.columnNumber(),});}
function reportFunction(nameNode,functionNode,namePrefix){let name=stringifyNameNode(nameNode);if(functionNode.generator){name='*'+name;}
if(namePrefix){name=namePrefix+' '+name;}
if(functionNode.async){name='async '+name;}
textCursor.advance(nameNode.start);addOutlineItem({name:name,line:textCursor.lineNumber(),column:textCursor.columnNumber(),arguments:stringifyArguments((functionNode.params))});}
function isNameNode(node){if(!node){return false;}
if(node.type==='MemberExpression'){return!node.computed&&node.property.type==='Identifier';}
return node.type==='Identifier';}
function isFunctionNode(node){if(!node){return false;}
return node.type==='FunctionExpression'||node.type==='ArrowFunctionExpression';}
function isClassNode(node){return!!node&&node.type==='ClassExpression';}
function stringifyNameNode(node){if(node.type==='MemberExpression'){node=(node.property);}
console.assert(node.type==='Identifier','Cannot extract identifier from unknown type: '+node.type);return(node.name);}
function stringifyArguments(params){const result=[];for(const param of params){if(param.type==='Identifier'){result.push(param.name);}else if(param.type==='RestElement'&&param.argument.type==='Identifier'){result.push('...'+param.argument.name);}else{console.error('Error: unexpected function parameter type: '+param.type);}}
return'('+result.join(', ')+')';}
function addOutlineItem(item){outlineChunk.push(item);if(textCursor.offset()-lastReportedOffset<chunkSize){return;}
postMessage({chunk:outlineChunk,isLastChunk:false});outlineChunk=[];lastReportedOffset=textCursor.offset();}}
self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.javaScriptOutline=javaScriptOutline;const RelaxedJSONParser={parse(content){content='('+content+')';let root;try{root=acorn.parse(content,{});}catch(e){return null;}
const walker=new FormatterWorker.ESTreeWalker(beforeVisit,afterVisit);const rootTip=[];const stack=[];let stackData=({key:0,tip:rootTip,state:States.ExpectValue,parentIsArray:true});walker.setWalkNulls(true);let hasExpression=false;walker.walk(root);if(hasExpression){return null;}
return rootTip.length?rootTip[0]:null;function pushStack(newStack){stack.push(stackData);stackData=newStack;}
function popStack(){stackData=stack.pop();}
function applyValue(value){stackData.tip[stackData.key]=value;if(stackData.parentIsArray){stackData.key++;}else{stackData.state=null;}}
function beforeVisit(node){switch(node.type){case'ObjectExpression':{const newTip={};applyValue(newTip);pushStack(({key:null,tip:newTip,state:null,parentIsArray:false}));break;}
case'ArrayExpression':{const newTip=[];applyValue(newTip);pushStack(({key:0,tip:newTip,state:States.ExpectValue,parentIsArray:true}));break;}
case'Property':stackData.state=States.ExpectKey;break;case'Literal':if(stackData.state===States.ExpectKey){stackData.key=node.value;stackData.state=States.ExpectValue;}else if(stackData.state===States.ExpectValue){applyValue(extractValue(node));return FormatterWorker.ESTreeWalker.SkipSubtree;}
break;case'Identifier':if(stackData.state===States.ExpectKey){stackData.key=(node.name);stackData.state=States.ExpectValue;}else if(stackData.state===States.ExpectValue){applyValue(extractValue(node));return FormatterWorker.ESTreeWalker.SkipSubtree;}
break;case'UnaryExpression':if(stackData.state===States.ExpectValue){applyValue(extractValue(node));return FormatterWorker.ESTreeWalker.SkipSubtree;}
break;case'Program':case'ExpressionStatement':break;default:if(stackData.state===States.ExpectValue){applyValue(extractValue(node));}
return FormatterWorker.ESTreeWalker.SkipSubtree;}}
function afterVisit(node){if(node.type==='ObjectExpression'||node.type==='ArrayExpression'){popStack();}}
function extractValue(node){let isNegative=false;const originalNode=node;let value;if(node.type==='UnaryExpression'&&(node.operator==='-'||node.operator==='+')){if(node.operator==='-'){isNegative=true;}
node=(node.argument);}
if(node.type==='Literal'){value=node.value;}else if(node.type==='Identifier'&&Keywords.hasOwnProperty(node.name)){value=Keywords[node.name];}else{hasExpression=true;return content.substring(originalNode.start,originalNode.end);}
if(isNegative){if(typeof value!=='number'){hasExpression=true;return content.substring(originalNode.start,originalNode.end);}
value=-(value);}
return value;}}};const States={ExpectKey:'ExpectKey',ExpectValue:'ExpectValue'};const Keywords={'NaN':NaN,'true':true,'false':false,'Infinity':Infinity,'undefined':undefined,'null':null};self.FormatterWorker=self.FormatterWorker||{};FormatterWorker=FormatterWorker||{};FormatterWorker.RelaxedJSONParser=RelaxedJSONParser;FormatterWorker.RelaxedJSONParser.Context;if(!self.Root||!self.Root.Runtime){self.importScripts('Runtime.js');}
Root.Runtime.startWorker('formatter_worker');}());;const _loadedScripts={};(function(){const baseUrl=self.location?self.location.origin+self.location.pathname:'';self._importScriptPathPrefix=baseUrl.substring(0,baseUrl.lastIndexOf('/')+1);})();const REMOTE_MODULE_FALLBACK_REVISION='@010ddcfda246975d194964ccf20038ebbdec6084';class Runtime{constructor(descriptors){this._modules=[];this._modulesMap={};this._extensions=[];this._cachedTypeClasses={};this._descriptorsMap={};for(let i=0;i<descriptors.length;++i){this._registerModule(descriptors[i]);}}
static _loadResourcePromise(url,asBinary){return new Promise(load);function load(fulfill,reject){const xhr=new XMLHttpRequest();xhr.open('GET',url,true);if(asBinary){xhr.responseType='arraybuffer';}
xhr.onreadystatechange=onreadystatechange;function onreadystatechange(e){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
const{response}=e.target;const text=asBinary?new TextDecoder().decode(response):response;const status=/^HTTP\/1.1 404/.test(text)?404:xhr.status;if([0,200,304].indexOf(status)===-1)
{reject(new Error('While loading from url '+url+' server responded with a status of '+status));}else{fulfill(response);}}
xhr.send(null);}}
static loadResourcePromise(url){return Runtime._loadResourcePromise(url,false);}
static loadBinaryResourcePromise(url){return Runtime._loadResourcePromise(url,true);}
static loadResourcePromiseWithFallback(url){return Runtime.loadResourcePromise(url).catch(err=>{const urlWithFallbackVersion=url.replace(/@[0-9a-f]{40}/,REMOTE_MODULE_FALLBACK_REVISION);if(urlWithFallbackVersion===url||!url.includes('audits_worker_module')){throw err;}
return Runtime.loadResourcePromise(urlWithFallbackVersion);});}
static normalizePath(path){if(path.indexOf('..')===-1&&path.indexOf('.')===-1){return path;}
const normalizedSegments=[];const segments=path.split('/');for(let i=0;i<segments.length;i++){const segment=segments[i];if(segment==='.'){continue;}else if(segment==='..'){normalizedSegments.pop();}else if(segment){normalizedSegments.push(segment);}}
let normalizedPath=normalizedSegments.join('/');if(normalizedPath[normalizedPath.length-1]==='/'){return normalizedPath;}
if(path[0]==='/'&&normalizedPath){normalizedPath='/'+normalizedPath;}
if((path[path.length-1]==='/')||(segments[segments.length-1]==='.')||(segments[segments.length-1]==='..')){normalizedPath=normalizedPath+'/';}
return normalizedPath;}
static getResourceURL(scriptName,base){const sourceURL=(base||self._importScriptPathPrefix)+scriptName;const schemaIndex=sourceURL.indexOf('://')+3;let pathIndex=sourceURL.indexOf('/',schemaIndex);if(pathIndex===-1){pathIndex=sourceURL.length;}
return sourceURL.substring(0,pathIndex)+Runtime.normalizePath(sourceURL.substring(pathIndex));}
static _loadScriptsPromise(scriptNames,base){const promises=[];const urls=[];const sources=new Array(scriptNames.length);let scriptToEval=0;for(let i=0;i<scriptNames.length;++i){const scriptName=scriptNames[i];const sourceURL=Runtime.getResourceURL(scriptName,base);if(_loadedScripts[sourceURL]){continue;}
urls.push(sourceURL);const loadResourcePromise=base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);promises.push(loadResourcePromise.then(scriptSourceLoaded.bind(null,i),scriptSourceLoaded.bind(null,i,undefined)));}
return Promise.all(promises).then(undefined);function scriptSourceLoaded(scriptNumber,scriptSource){sources[scriptNumber]=scriptSource||'';while(typeof sources[scriptToEval]!=='undefined'){evaluateScript(urls[scriptToEval],sources[scriptToEval]);++scriptToEval;}}
function evaluateScript(sourceURL,scriptSource){_loadedScripts[sourceURL]=true;if(!scriptSource){console.error('Empty response arrived for script \''+sourceURL+'\'');return;}
self.eval(scriptSource+'\n//# sourceURL='+sourceURL);}}
static _loadResourceIntoCache(url,appendSourceURL){return Runtime.loadResourcePromise(url).then(cacheResource.bind(this,url),cacheResource.bind(this,url,undefined));function cacheResource(path,content){if(!content){console.error('Failed to load resource: '+path);return;}
const sourceURL=appendSourceURL?Runtime.resolveSourceURL(path):'';Runtime.cachedResources[path]=content+sourceURL;}}
static async appStarted(){return Runtime._appStartedPromise;}
static async startApplication(appName){console.timeStamp('Root.Runtime.startApplication');const allDescriptorsByName={};for(let i=0;i<Root.allDescriptors.length;++i){const d=Root.allDescriptors[i];allDescriptorsByName[d['name']]=d;}
if(!Root.applicationDescriptor){let data=await Runtime.loadResourcePromise(appName+'.json');Root.applicationDescriptor=JSON.parse(data);let descriptor=Root.applicationDescriptor;while(descriptor.extends){data=await Runtime.loadResourcePromise(descriptor.extends+'.json');descriptor=JSON.parse(data);Root.applicationDescriptor.modules=descriptor.modules.concat(Root.applicationDescriptor.modules);}}
const configuration=Root.applicationDescriptor.modules;const moduleJSONPromises=[];const coreModuleNames=[];for(let i=0;i<configuration.length;++i){const descriptor=configuration[i];const name=descriptor['name'];const moduleJSON=allDescriptorsByName[name];if(moduleJSON){moduleJSONPromises.push(Promise.resolve(moduleJSON));}else{moduleJSONPromises.push(Runtime.loadResourcePromise(name+'/module.json').then(JSON.parse.bind(JSON)));}
if(descriptor['type']==='autostart'){coreModuleNames.push(name);}}
const moduleDescriptors=await Promise.all(moduleJSONPromises);for(let i=0;i<moduleDescriptors.length;++i){moduleDescriptors[i].name=configuration[i]['name'];moduleDescriptors[i].condition=configuration[i]['condition'];moduleDescriptors[i].remote=configuration[i]['type']==='remote';}
self.runtime=new Runtime(moduleDescriptors);if(coreModuleNames){await self.runtime._loadAutoStartModules(coreModuleNames);}
Runtime._appStartedPromiseCallback();}
static startWorker(appName){return Root.Runtime.startApplication(appName).then(sendWorkerReady);function sendWorkerReady(){self.postMessage('workerReady');}}
static queryParam(name){return Runtime._queryParamsObject.get(name);}
static queryParamsString(){return location.search;}
static _experimentsSetting(){try{return(JSON.parse(self.localStorage&&self.localStorage['experiments']?self.localStorage['experiments']:'{}'));}catch(e){console.error('Failed to parse localStorage[\'experiments\']');return{};}}
static _assert(value,message){if(value){return;}
Runtime._originalAssert.call(Runtime._console,value,message+' '+new Error().stack);}
static setPlatform(platform){Runtime._platform=platform;}
static _isDescriptorEnabled(descriptor){const activatorExperiment=descriptor['experiment'];if(activatorExperiment==='*'){return Runtime.experiments.supportEnabled();}
if(activatorExperiment&&activatorExperiment.startsWith('!')&&Runtime.experiments.isEnabled(activatorExperiment.substring(1))){return false;}
if(activatorExperiment&&!activatorExperiment.startsWith('!')&&!Runtime.experiments.isEnabled(activatorExperiment)){return false;}
const condition=descriptor['condition'];if(condition&&!condition.startsWith('!')&&!Runtime.queryParam(condition)){return false;}
if(condition&&condition.startsWith('!')&&Runtime.queryParam(condition.substring(1))){return false;}
return true;}
static resolveSourceURL(path){let sourceURL=self.location.href;if(self.location.search){sourceURL=sourceURL.replace(self.location.search,'');}
sourceURL=sourceURL.substring(0,sourceURL.lastIndexOf('/')+1)+path;return'\n/*# sourceURL='+sourceURL+' */';}
static setL10nCallback(localizationFunction){Runtime._l10nCallback=localizationFunction;}
useTestBase(){Runtime._remoteBase='http://localhost:8000/inspector-sources/';if(Runtime.queryParam('debugFrontend')){Runtime._remoteBase+='debug/';}}
module(moduleName){return this._modulesMap[moduleName];}
_registerModule(descriptor){const module=new Runtime.Module(this,descriptor);this._modules.push(module);this._modulesMap[descriptor['name']]=module;}
loadModulePromise(moduleName){return this._modulesMap[moduleName]._loadPromise();}
_loadAutoStartModules(moduleNames){const promises=[];for(let i=0;i<moduleNames.length;++i){promises.push(this.loadModulePromise(moduleNames[i]));}
return Promise.all(promises);}
_checkExtensionApplicability(extension,predicate){if(!predicate){return false;}
const contextTypes=extension.descriptor().contextTypes;if(!contextTypes){return true;}
for(let i=0;i<contextTypes.length;++i){const contextType=this._resolve(contextTypes[i]);const isMatching=!!contextType&&predicate(contextType);if(isMatching){return true;}}
return false;}
isExtensionApplicableToContext(extension,context){if(!context){return true;}
return this._checkExtensionApplicability(extension,isInstanceOf);function isInstanceOf(targetType){return context instanceof targetType;}}
isExtensionApplicableToContextTypes(extension,currentContextTypes){if(!extension.descriptor().contextTypes){return true;}
return this._checkExtensionApplicability(extension,currentContextTypes?isContextTypeKnown:null);function isContextTypeKnown(targetType){return currentContextTypes.has(targetType);}}
extensions(type,context,sortByTitle){return this._extensions.filter(filter).sort(sortByTitle?titleComparator:orderComparator);function filter(extension){if(extension._type!==type&&extension._typeClass()!==type){return false;}
if(!extension.enabled()){return false;}
return!context||extension.isApplicable(context);}
function orderComparator(extension1,extension2){const order1=extension1.descriptor()['order']||0;const order2=extension2.descriptor()['order']||0;return order1-order2;}
function titleComparator(extension1,extension2){const title1=extension1.title()||'';const title2=extension2.title()||'';return title1.localeCompare(title2);}}
extension(type,context){return this.extensions(type,context)[0]||null;}
allInstances(type,context){return Promise.all(this.extensions(type,context).map(extension=>extension.instance()));}
_resolve(typeName){if(!this._cachedTypeClasses[typeName]){const path=typeName.split('.');let object=self;for(let i=0;object&&(i<path.length);++i){object=object[path[i]];}
if(object){this._cachedTypeClasses[typeName]=(object);}}
return this._cachedTypeClasses[typeName]||null;}
sharedInstance(constructorFunction){if(Runtime._instanceSymbol in constructorFunction&&Object.getOwnPropertySymbols(constructorFunction).includes(Runtime._instanceSymbol)){return constructorFunction[Runtime._instanceSymbol];}
const instance=new constructorFunction();constructorFunction[Runtime._instanceSymbol]=instance;return instance;}}
Runtime._queryParamsObject=new URLSearchParams(Runtime.queryParamsString());Runtime._instanceSymbol=Symbol('instance');Runtime.cachedResources={__proto__:null};Runtime._console=console;Runtime._originalAssert=console.assert;Runtime._platform='';class ModuleDescriptor{constructor(){this.name;this.extensions;this.dependencies;this.scripts;this.modules;this.condition;this.remote;}}
class RuntimeExtensionDescriptor{constructor(){this.type;this.className;this.factoryName;this.contextTypes;}}
const specialCases={'sdk':'SDK','js_sdk':'JSSDK','browser_sdk':'BrowserSDK','ui':'UI','object_ui':'ObjectUI','javascript_metadata':'JavaScriptMetadata','perf_ui':'PerfUI','har_importer':'HARImporter','sdk_test_runner':'SDKTestRunner','cpu_profiler_test_runner':'CPUProfilerTestRunner'};class Module{constructor(manager,descriptor){this._manager=manager;this._descriptor=descriptor;this._name=descriptor.name;this._extensions=[];this._extensionsByClassName=new Map();const extensions=(descriptor.extensions);for(let i=0;extensions&&i<extensions.length;++i){const extension=new Extension(this,extensions[i]);this._manager._extensions.push(extension);this._extensions.push(extension);}
this._loadedForTest=false;}
name(){return this._name;}
enabled(){return Runtime._isDescriptorEnabled(this._descriptor);}
resource(name){const fullName=this._name+'/'+name;const content=Runtime.cachedResources[fullName];if(!content){throw new Error(fullName+' not preloaded. Check module.json');}
return content;}
_loadPromise(){if(!this.enabled()){return Promise.reject(new Error('Module '+this._name+' is not enabled'));}
if(this._pendingLoadPromise){return this._pendingLoadPromise;}
const dependencies=this._descriptor.dependencies;const dependencyPromises=[];for(let i=0;dependencies&&i<dependencies.length;++i){dependencyPromises.push(this._manager._modulesMap[dependencies[i]]._loadPromise());}
this._pendingLoadPromise=Promise.all(dependencyPromises).then(this._loadResources.bind(this)).then(this._loadModules.bind(this)).then(this._loadScripts.bind(this)).then(()=>this._loadedForTest=true);return this._pendingLoadPromise;}
_loadResources(){const resources=this._descriptor['resources'];if(!resources||!resources.length){return Promise.resolve();}
const promises=[];for(let i=0;i<resources.length;++i){const url=this._modularizeURL(resources[i]);const isHtml=url.endsWith('.html');promises.push(Runtime._loadResourceIntoCache(url,!isHtml));}
return Promise.all(promises).then(undefined);}
_loadModules(){if(!this._descriptor.modules||!this._descriptor.modules.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};if(typeof WorkerGlobalScope!=='undefined'&&self instanceof WorkerGlobalScope){return Promise.resolve();}
return eval(`import('./${this._name}/${this._name}.js')`);}
_loadScripts(){if(!this._descriptor.scripts||!this._descriptor.scripts.length){return Promise.resolve();}
const namespace=this._computeNamespace();self[namespace]=self[namespace]||{};return Runtime._loadScriptsPromise(this._descriptor.scripts.map(this._modularizeURL,this),this._remoteBase());}
_computeNamespace(){return specialCases[this._name]||this._name.split('_').map(a=>a.substring(0,1).toUpperCase()+a.substring(1)).join('');}
_modularizeURL(resourceName){return Runtime.normalizePath(this._name+'/'+resourceName);}
_remoteBase(){return!Runtime.queryParam('debugFrontend')&&this._descriptor.remote&&Runtime._remoteBase||undefined;}
fetchResource(resourceName){const base=this._remoteBase();const sourceURL=Runtime.getResourceURL(this._modularizeURL(resourceName),base);return base?Runtime.loadResourcePromiseWithFallback(sourceURL):Runtime.loadResourcePromise(sourceURL);}
substituteURL(value){const base=this._remoteBase()||'';return value.replace(/@url\(([^\)]*?)\)/g,convertURL.bind(this));function convertURL(match,url){return base+this._modularizeURL(url);}}}
class Extension{constructor(module,descriptor){this._module=module;this._descriptor=descriptor;this._type=descriptor.type;this._hasTypeClass=this._type.charAt(0)==='@';this._className=descriptor.className||null;this._factoryName=descriptor.factoryName||null;}
descriptor(){return this._descriptor;}
module(){return this._module;}
enabled(){return this._module.enabled()&&Runtime._isDescriptorEnabled(this.descriptor());}
_typeClass(){if(!this._hasTypeClass){return null;}
return this._module._manager._resolve(this._type.substring(1));}
isApplicable(context){return this._module._manager.isExtensionApplicableToContext(this,context);}
instance(){return this._module._loadPromise().then(this._createInstance.bind(this));}
canInstantiate(){return!!(this._className||this._factoryName);}
_createInstance(){const className=this._className||this._factoryName;if(!className){throw new Error('Could not instantiate extension with no class');}
const constructorFunction=self.eval((className));if(!(constructorFunction instanceof Function)){throw new Error('Could not instantiate: '+className);}
if(this._className){return this._module._manager.sharedInstance(constructorFunction);}
return new constructorFunction(this);}
title(){const title=this._descriptor['title-'+Runtime._platform]||this._descriptor['title'];if(title&&Runtime._l10nCallback){return Runtime._l10nCallback(title);}
return title;}
hasContextType(contextType){const contextTypes=this.descriptor().contextTypes;if(!contextTypes){return false;}
for(let i=0;i<contextTypes.length;++i){if(contextType===this._module._manager._resolve(contextTypes[i])){return true;}}
return false;}}
class ExperimentsSupport{constructor(){this._supportEnabled=Runtime.queryParam('experiments')!==null;this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled=new Set();}
allConfigurableExperiments(){const result=[];for(let i=0;i<this._experiments.length;i++){const experiment=this._experiments[i];if(!this._enabledTransiently[experiment.name]){result.push(experiment);}}
return result;}
supportEnabled(){return this._supportEnabled;}
_setExperimentsSetting(value){if(!self.localStorage){return;}
self.localStorage['experiments']=JSON.stringify(value);}
register(experimentName,experimentTitle,hidden){Runtime._assert(!this._experimentNames[experimentName],'Duplicate registration of experiment '+experimentName);this._experimentNames[experimentName]=true;this._experiments.push(new Runtime.Experiment(this,experimentName,experimentTitle,!!hidden));}
isEnabled(experimentName){this._checkExperiment(experimentName);if(Runtime._experimentsSetting()[experimentName]===false){return false;}
if(this._enabledTransiently[experimentName]){return true;}
if(this._serverEnabled.has(experimentName)){return true;}
if(!this.supportEnabled()){return false;}
return!!Runtime._experimentsSetting()[experimentName];}
setEnabled(experimentName,enabled){this._checkExperiment(experimentName);const experimentsSetting=Runtime._experimentsSetting();experimentsSetting[experimentName]=enabled;this._setExperimentsSetting(experimentsSetting);}
setDefaultExperiments(experimentNames){for(let i=0;i<experimentNames.length;++i){this._checkExperiment(experimentNames[i]);this._enabledTransiently[experimentNames[i]]=true;}}
setServerEnabledExperiments(experimentNames){for(const experiment of experimentNames){this._checkExperiment(experiment);this._serverEnabled.add(experiment);}}
enableForTest(experimentName){this._checkExperiment(experimentName);this._enabledTransiently[experimentName]=true;}
clearForTest(){this._experiments=[];this._experimentNames={};this._enabledTransiently={};this._serverEnabled.clear();}
cleanUpStaleExperiments(){const experimentsSetting=Runtime._experimentsSetting();const cleanedUpExperimentSetting={};for(let i=0;i<this._experiments.length;++i){const experimentName=this._experiments[i].name;if(experimentsSetting[experimentName]){cleanedUpExperimentSetting[experimentName]=true;}}
this._setExperimentsSetting(cleanedUpExperimentSetting);}
_checkExperiment(experimentName){Runtime._assert(this._experimentNames[experimentName],'Unknown experiment '+experimentName);}}
class Experiment{constructor(experiments,name,title,hidden){this.name=name;this.title=title;this.hidden=hidden;this._experiments=experiments;}
isEnabled(){return this._experiments.isEnabled(this.name);}
setEnabled(enabled){this._experiments.setEnabled(this.name,enabled);}}
Runtime.experiments=new ExperimentsSupport();Runtime._appStartedPromiseCallback;Runtime._appStartedPromise=new Promise(fulfil=>Runtime._appStartedPromiseCallback=fulfil);Runtime._l10nCallback;Runtime._remoteBase;(function validateRemoteBase(){if(location.href.startsWith('devtools://devtools/bundled/')&&Runtime.queryParam('remoteBase')){const versionMatch=/\/serve_file\/(@[0-9a-zA-Z]+)\/?$/.exec(Runtime.queryParam('remoteBase'));if(versionMatch){Runtime._remoteBase=`${location.origin}/remote/serve_file/${versionMatch[1]}/`;}}})();self.Root=self.Root||{};Root=Root||{};Root.allDescriptors=[];Root.applicationDescriptor=undefined;Root.Runtime=Runtime;Root.runtime;Root.Runtime.ModuleDescriptor=ModuleDescriptor;Root.Runtime.ExtensionDescriptor=RuntimeExtensionDescriptor;Root.Runtime.Extension=Extension;Root.Runtime.Module=Module;Root.Runtime.ExperimentsSupport=ExperimentsSupport;Root.Runtime.Experiment=Experiment;Root.allDescriptors.push(...[{"dependencies":[],"modules":["heap_snapshot_model.js","HeapSnapshotModel.js"],"name":"heap_snapshot_model","scripts":[]},{"dependencies":[],"modules":["platform.js","utilities.js"],"name":"platform","scripts":[]},{"dependencies":["heap_snapshot_model","platform","common"],"modules":["heap_snapshot_worker.js","AllocationProfile.js","HeapSnapshot.js","HeapSnapshotLoader.js","HeapSnapshotWorkerDispatcher.js","HeapSnapshotWorker.js"],"name":"heap_snapshot_worker","scripts":[]},{"dependencies":["platform"],"modules":["text_utils.js","Text.js","TextUtils.js","TextRange.js"],"name":"text_utils","scripts":[]},{"dependencies":["text_utils","platform"],"modules":["common.js","common-legacy.js","EventTarget.js","Object.js","Worker.js","TextDictionary.js","Color.js","Console.js","ContentProvider.js","ParsedURL.js","Progress.js","UIString.js","ResourceType.js","Settings.js","StaticContentProvider.js","SegmentedRange.js","Throttler.js","Trie.js","Revealer.js","App.js","AppProvider.js","JavaScriptMetaData.js","Linkifier.js","QueryParamHandler.js","Revealer.js","Runnable.js","StringOutputStream.js","CharacterIdMap.js"],"name":"common","scripts":[]}]);Root.applicationDescriptor={"has_html":false,"modules":[{"type":"autostart","name":"heap_snapshot_model"},{"type":"autostart","name":"platform"},{"type":"autostart","name":"heap_snapshot_worker"},{"type":"autostart","name":"text_utils"},{"type":"autostart","name":"common"}]};(function(){'use strict';self.mod=function(m,n){return((m%n)+n)%n;};String.prototype.findAll=function(string){const matches=[];let i=this.indexOf(string);while(i!==-1){matches.push(i);i=this.indexOf(string,i+string.length);}
return matches;};String.prototype.reverse=function(){return this.split('').reverse().join('');};String.prototype.replaceControlCharacters=function(){return this.replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u0080-\u009f]/g,'�');};String.prototype.isWhitespace=function(){return/^\s*$/.test(this);};String.prototype.computeLineEndings=function(){const endings=this.findAll('\n');endings.push(this.length);return endings;};String.prototype.escapeCharacters=function(chars){let foundChar=false;for(let i=0;i<chars.length;++i){if(this.indexOf(chars.charAt(i))!==-1){foundChar=true;break;}}
if(!foundChar){return String(this);}
let result='';for(let i=0;i<this.length;++i){if(chars.indexOf(this.charAt(i))!==-1){result+='\\';}
result+=this.charAt(i);}
return result;};String.regexSpecialCharacters=function(){return'^[]{}()\\.^$*+?|-,';};String.prototype.escapeForRegExp=function(){return this.escapeCharacters(String.regexSpecialCharacters());};String.filterRegex=function(query){const toEscape=String.regexSpecialCharacters();let regexString='';for(let i=0;i<query.length;++i){let c=query.charAt(i);if(toEscape.indexOf(c)!==-1){c='\\'+c;}
if(i){regexString+='[^\\0'+c+']*';}
regexString+=c;}
return new RegExp(regexString,'i');};String.escapeInvalidUnicodeCharacters=function(text){if(!String._invalidCharactersRegExp){let invalidCharacters='';for(let i=0xfffe;i<=0x10ffff;i+=0x10000){invalidCharacters+=String.fromCodePoint(i,i+1);}
String._invalidCharactersRegExp=new RegExp(`[${invalidCharacters}\uD800-\uDFFF\uFDD0-\uFDEF]`,'gu');}
let result='';let lastPos=0;while(true){const match=String._invalidCharactersRegExp.exec(text);if(!match){break;}
result+=text.substring(lastPos,match.index)+'\\u'+text.charCodeAt(match.index).toString(16);if(match.index+1<String._invalidCharactersRegExp.lastIndex){result+='\\u'+text.charCodeAt(match.index+1).toString(16);}
lastPos=String._invalidCharactersRegExp.lastIndex;}
return result+text.substring(lastPos);};String.prototype.escapeHTML=function(){return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');};String.prototype.unescapeHTML=function(){return this.replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&#58;/g,':').replace(/&quot;/g,'"').replace(/&#60;/g,'<').replace(/&#62;/g,'>').replace(/&amp;/g,'&');};String.prototype.collapseWhitespace=function(){return this.replace(/[\s\xA0]+/g,' ');};String.prototype.trimMiddle=function(maxLength){if(this.length<=maxLength){return String(this);}
let leftHalf=maxLength>>1;let rightHalf=maxLength-leftHalf-1;if(this.codePointAt(this.length-rightHalf-1)>=0x10000){--rightHalf;++leftHalf;}
if(leftHalf>0&&this.codePointAt(leftHalf-1)>=0x10000){--leftHalf;}
return this.substr(0,leftHalf)+'\u2026'+this.substr(this.length-rightHalf,rightHalf);};String.prototype.trimEndWithMaxLength=function(maxLength){if(this.length<=maxLength){return String(this);}
return this.substr(0,maxLength-1)+'\u2026';};String.prototype.trimURL=function(baseURLDomain){let result=this.replace(/^(https|http|file):\/\//i,'');if(baseURLDomain){if(result.toLowerCase().startsWith(baseURLDomain.toLowerCase())){result=result.substr(baseURLDomain.length);}}
return result;};String.prototype.toTitleCase=function(){return this.substring(0,1).toUpperCase()+this.substring(1);};String.prototype.compareTo=function(other){if(this>other){return 1;}
if(this<other){return-1;}
return 0;};String.prototype.removeURLFragment=function(){let fragmentIndex=this.indexOf('#');if(fragmentIndex===-1){fragmentIndex=this.length;}
return this.substring(0,fragmentIndex);};String.hashCode=function(string){if(!string){return 0;}
const p=((1<<30)*4-5);const z=0x5033d967;const z2=0x59d2f15d;let s=0;let zi=1;for(let i=0;i<string.length;i++){const xi=string.charCodeAt(i)*z2;s=(s+zi*xi)%p;zi=(zi*z)%p;}
s=(s+zi*(p-1))%p;return Math.abs(s|0);};String.isDigitAt=function(string,index){const c=string.charCodeAt(index);return(48<=c&&c<=57);};String.prototype.toBase64=function(){function encodeBits(b){return b<26?b+65:b<52?b+71:b<62?b-4:b===62?43:b===63?47:65;}
const encoder=new TextEncoder();const data=encoder.encode(this.toString());const n=data.length;let encoded='';if(n===0){return encoded;}
let shift;let v=0;for(let i=0;i<n;i++){shift=i%3;v|=data[i]<<(16>>>shift&24);if(shift===2){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),encodeBits(v>>>6&63),encodeBits(v&63));v=0;}}
if(shift===0){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),61,61);}else if(shift===1){encoded+=String.fromCharCode(encodeBits(v>>>18&63),encodeBits(v>>>12&63),encodeBits(v>>>6&63),61);}
return encoded;};String.naturalOrderComparator=function(a,b){const chunk=/^\d+|^\D+/;let chunka,chunkb,anum,bnum;while(1){if(a){if(!b){return 1;}}else{if(b){return-1;}else{return 0;}}
chunka=a.match(chunk)[0];chunkb=b.match(chunk)[0];anum=!isNaN(chunka);bnum=!isNaN(chunkb);if(anum&&!bnum){return-1;}
if(bnum&&!anum){return 1;}
if(anum&&bnum){const diff=chunka-chunkb;if(diff){return diff;}
if(chunka.length!==chunkb.length){if(!+chunka&&!+chunkb)
{return chunka.length-chunkb.length;}else{return chunkb.length-chunka.length;}}}else if(chunka!==chunkb){return(chunka<chunkb)?-1:1;}
a=a.substring(chunka.length);b=b.substring(chunkb.length);}};String.caseInsensetiveComparator=function(a,b){a=a.toUpperCase();b=b.toUpperCase();if(a===b){return 0;}
return a>b?1:-1;};Number.constrain=function(num,min,max){if(num<min){num=min;}else if(num>max){num=max;}
return num;};Number.gcd=function(a,b){if(b===0){return a;}else{return Number.gcd(b,a%b);}};Number.toFixedIfFloating=function(value){if(!value||isNaN(value)){return value;}
const number=Number(value);return number%1?number.toFixed(3):String(number);};Date.prototype.isValid=function(){return!isNaN(this.getTime());};Date.prototype.toISO8601Compact=function(){function leadZero(x){return(x>9?'':'0')+x;}
return this.getFullYear()+leadZero(this.getMonth()+1)+leadZero(this.getDate())+'T'+
leadZero(this.getHours())+leadZero(this.getMinutes())+leadZero(this.getSeconds());};Object.defineProperty(Array.prototype,'remove',{value:function(value,firstOnly){let index=this.indexOf(value);if(index===-1){return false;}
if(firstOnly){this.splice(index,1);return true;}
for(let i=index+1,n=this.length;i<n;++i){if(this[i]!==value){this[index++]=this[i];}}
this.length=index;return true;}});Object.defineProperty(Array.prototype,'pushAll',{value:function(array){for(let i=0;i<array.length;++i){this.push(array[i]);}}});Object.defineProperty(Array.prototype,'rotate',{value:function(index){const result=[];for(let i=index;i<index+this.length;++i){result.push(this[i%this.length]);}
return result;}});Object.defineProperty(Array.prototype,'sortNumbers',{value:function(){function numericComparator(a,b){return a-b;}
this.sort(numericComparator);}});(function(){const partition={value:function(comparator,left,right,pivotIndex){function swap(array,i1,i2){const temp=array[i1];array[i1]=array[i2];array[i2]=temp;}
const pivotValue=this[pivotIndex];swap(this,right,pivotIndex);let storeIndex=left;for(let i=left;i<right;++i){if(comparator(this[i],pivotValue)<0){swap(this,storeIndex,i);++storeIndex;}}
swap(this,right,storeIndex);return storeIndex;}};Object.defineProperty(Array.prototype,'partition',partition);Object.defineProperty(Uint32Array.prototype,'partition',partition);const sortRange={value:function(comparator,leftBound,rightBound,sortWindowLeft,sortWindowRight){function quickSortRange(array,comparator,left,right,sortWindowLeft,sortWindowRight){if(right<=left){return;}
const pivotIndex=Math.floor(Math.random()*(right-left))+left;const pivotNewIndex=array.partition(comparator,left,right,pivotIndex);if(sortWindowLeft<pivotNewIndex){quickSortRange(array,comparator,left,pivotNewIndex-1,sortWindowLeft,sortWindowRight);}
if(pivotNewIndex<sortWindowRight){quickSortRange(array,comparator,pivotNewIndex+1,right,sortWindowLeft,sortWindowRight);}}
if(leftBound===0&&rightBound===(this.length-1)&&sortWindowLeft===0&&sortWindowRight>=rightBound){this.sort(comparator);}else{quickSortRange(this,comparator,leftBound,rightBound,sortWindowLeft,sortWindowRight);}
return this;}};Object.defineProperty(Array.prototype,'sortRange',sortRange);Object.defineProperty(Uint32Array.prototype,'sortRange',sortRange);})();Object.defineProperty(Array.prototype,'lowerBound',{value:function(object,comparator,left,right){function defaultComparator(a,b){return a<b?-1:(a>b?1:0);}
comparator=comparator||defaultComparator;let l=left||0;let r=right!==undefined?right:this.length;while(l<r){const m=(l+r)>>1;if(comparator(object,this[m])>0){l=m+1;}else{r=m;}}
return r;}});Object.defineProperty(Array.prototype,'upperBound',{value:function(object,comparator,left,right){function defaultComparator(a,b){return a<b?-1:(a>b?1:0);}
comparator=comparator||defaultComparator;let l=left||0;let r=right!==undefined?right:this.length;while(l<r){const m=(l+r)>>1;if(comparator(object,this[m])>=0){l=m+1;}else{r=m;}}
return r;}});Object.defineProperty(Uint32Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Uint32Array.prototype,'upperBound',{value:Array.prototype.upperBound});Object.defineProperty(Int32Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Int32Array.prototype,'upperBound',{value:Array.prototype.upperBound});Object.defineProperty(Float64Array.prototype,'lowerBound',{value:Array.prototype.lowerBound});Object.defineProperty(Array.prototype,'binaryIndexOf',{value:function(value,comparator){const index=this.lowerBound(value,comparator);return index<this.length&&comparator(value,this[index])===0?index:-1;}});Object.defineProperty(Array.prototype,'select',{value:function(field){const result=new Array(this.length);for(let i=0;i<this.length;++i){result[i]=this[i][field];}
return result;}});Object.defineProperty(Array.prototype,'peekLast',{value:function(){return this[this.length-1];}});(function(){function mergeOrIntersect(array1,array2,comparator,mergeNotIntersect){const result=[];let i=0;let j=0;while(i<array1.length&&j<array2.length){const compareValue=comparator(array1[i],array2[j]);if(mergeNotIntersect||!compareValue){result.push(compareValue<=0?array1[i]:array2[j]);}
if(compareValue<=0){i++;}
if(compareValue>=0){j++;}}
if(mergeNotIntersect){while(i<array1.length){result.push(array1[i++]);}
while(j<array2.length){result.push(array2[j++]);}}
return result;}
Object.defineProperty(Array.prototype,'intersectOrdered',{value:function(array,comparator){return mergeOrIntersect(this,array,comparator,false);}});Object.defineProperty(Array.prototype,'mergeOrdered',{value:function(array,comparator){return mergeOrIntersect(this,array,comparator,true);}});})();String.sprintf=function(format,var_arg){return String.vsprintf(format,Array.prototype.slice.call(arguments,1));};String.tokenizeFormatString=function(format,formatters){const tokens=[];function addStringToken(str){if(!str){return;}
if(tokens.length&&tokens[tokens.length-1].type==='string'){tokens[tokens.length-1].value+=str;}else{tokens.push({type:'string',value:str});}}
function addSpecifierToken(specifier,precision,substitutionIndex){tokens.push({type:'specifier',specifier:specifier,precision:precision,substitutionIndex:substitutionIndex});}
function addAnsiColor(code){const types={3:'color',9:'colorLight',4:'bgColor',10:'bgColorLight'};const colorCodes=['black','red','green','yellow','blue','magenta','cyan','lightGray','','default'];const colorCodesLight=['darkGray','lightRed','lightGreen','lightYellow','lightBlue','lightMagenta','lightCyan','white',''];const colors={color:colorCodes,colorLight:colorCodesLight,bgColor:colorCodes,bgColorLight:colorCodesLight};const type=types[Math.floor(code/10)];if(!type){return;}
const color=colors[type][code%10];if(!color){return;}
tokens.push({type:'specifier',specifier:'c',value:{description:(type.startsWith('bg')?'background : ':'color: ')+color}});}
let textStart=0;let substitutionIndex=0;const re=new RegExp(`%%|%(?:(\\d+)\\$)?(?:\\.(\\d*))?([${Object.keys(formatters).join('')}])|\\u001b\\[(\\d+)m`,'g');for(let match=re.exec(format);!!match;match=re.exec(format)){const matchStart=match.index;if(matchStart>textStart){addStringToken(format.substring(textStart,matchStart));}
if(match[0]==='%%'){addStringToken('%');}else if(match[0].startsWith('%')){const[_,substitionString,precisionString,specifierString]=match;if(substitionString&&Number(substitionString)>0){substitutionIndex=Number(substitionString)-1;}
const precision=precisionString?Number(precisionString):-1;addSpecifierToken(specifierString,precision,substitutionIndex);++substitutionIndex;}else{const code=Number(match[4]);addAnsiColor(code);}
textStart=matchStart+match[0].length;}
addStringToken(format.substring(textStart));return tokens;};String.standardFormatters={d:function(substitution){return!isNaN(substitution)?substitution:0;},f:function(substitution,token){if(substitution&&token.precision>-1){substitution=substitution.toFixed(token.precision);}
return!isNaN(substitution)?substitution:(token.precision>-1?Number(0).toFixed(token.precision):0);},s:function(substitution){return substitution;}};String.vsprintf=function(format,substitutions){return String.format(format,substitutions,String.standardFormatters,'',function(a,b){return a+b;}).formattedResult;};String.format=function(format,substitutions,formatters,initialValue,append,tokenizedFormat){if(!format||((!substitutions||!substitutions.length)&&format.search(/\u001b\[(\d+)m/)===-1)){return{formattedResult:append(initialValue,format),unusedSubstitutions:substitutions};}
function prettyFunctionName(){return'String.format("'+format+'", "'+Array.prototype.join.call(substitutions,'", "')+'")';}
function warn(msg){console.warn(prettyFunctionName()+': '+msg);}
function error(msg){console.error(prettyFunctionName()+': '+msg);}
let result=initialValue;const tokens=tokenizedFormat||String.tokenizeFormatString(format,formatters);const usedSubstitutionIndexes={};for(let i=0;i<tokens.length;++i){const token=tokens[i];if(token.type==='string'){result=append(result,token.value);continue;}
if(token.type!=='specifier'){error('Unknown token type "'+token.type+'" found.');continue;}
if(!token.value&&token.substitutionIndex>=substitutions.length){error('not enough substitution arguments. Had '+substitutions.length+' but needed '+
(token.substitutionIndex+1)+', so substitution was skipped.');result=append(result,'%'+(token.precision>-1?token.precision:'')+token.specifier);continue;}
if(!token.value){usedSubstitutionIndexes[token.substitutionIndex]=true;}
if(!(token.specifier in formatters)){warn('unsupported format character \u201C'+token.specifier+'\u201D. Treating as a string.');result=append(result,token.value?'':substitutions[token.substitutionIndex]);continue;}
result=append(result,formatters[token.specifier](token.value||substitutions[token.substitutionIndex],token));}
const unusedSubstitutions=[];for(let i=0;i<substitutions.length;++i){if(i in usedSubstitutionIndexes){continue;}
unusedSubstitutions.push(substitutions[i]);}
return{formattedResult:result,unusedSubstitutions:unusedSubstitutions};};self.createSearchRegex=function(query,caseSensitive,isRegex){const regexFlags=caseSensitive?'g':'gi';let regexObject;if(isRegex){try{regexObject=new RegExp(query,regexFlags);}catch(e){}}
if(!regexObject){regexObject=self.createPlainTextSearchRegex(query,regexFlags);}
return regexObject;};self.createPlainTextSearchRegex=function(query,flags){const regexSpecialCharacters=String.regexSpecialCharacters();let regex='';for(let i=0;i<query.length;++i){const c=query.charAt(i);if(regexSpecialCharacters.indexOf(c)!==-1){regex+='\\';}
regex+=c;}
return new RegExp(regex,flags||'');};self.countRegexMatches=function(regex,content){let text=content;let result=0;let match;while(text&&(match=regex.exec(text))){if(match[0].length>0){++result;}
text=text.substring(match.index+1);}
return result;};self.spacesPadding=function(spacesCount){return'\xA0'.repeat(spacesCount);};self.numberToStringWithSpacesPadding=function(value,symbolsCount){const numberString=value.toString();const paddingLength=Math.max(0,symbolsCount-numberString.length);return self.spacesPadding(paddingLength)+numberString;};Set.prototype.valuesArray=function(){return Array.from(this.values());};Set.prototype.firstValue=function(){if(!this.size){return null;}
return this.values().next().value;};Set.prototype.addAll=function(iterable){for(const e of iterable){this.add(e);}};Set.prototype.containsAll=function(iterable){for(const e of iterable){if(!this.has(e)){return false;}}
return true;};Map.prototype.remove=function(key){const value=this.get(key);this.delete(key);return value;};Map.prototype.valuesArray=function(){return Array.from(this.values());};Map.prototype.keysArray=function(){return Array.from(this.keys());};Map.prototype.inverse=function(){const result=new Platform.Multimap();for(const key of this.keys()){const value=this.get(key);result.set(value,key);}
return result;};const Multimap=class{constructor(){this._map=new Map();}
set(key,value){let set=this._map.get(key);if(!set){set=new Set();this._map.set(key,set);}
set.add(value);}
get(key){return this._map.get(key)||new Set();}
has(key){return this._map.has(key);}
hasValue(key,value){const set=this._map.get(key);if(!set){return false;}
return set.has(value);}
get size(){return this._map.size;}
delete(key,value){const values=this.get(key);if(!values){return false;}
const result=values.delete(value);if(!values.size){this._map.delete(key);}
return result;}
deleteAll(key){this._map.delete(key);}
keysArray(){return this._map.keysArray();}
valuesArray(){const result=[];const keys=this.keysArray();for(let i=0;i<keys.length;++i){result.pushAll(this.get(keys[i]).valuesArray());}
return result;}
clear(){this._map.clear();}};self.loadXHR=function(url){return new Promise(load);function load(successCallback,failureCallback){function onReadyStateChanged(){if(xhr.readyState!==XMLHttpRequest.DONE){return;}
if(xhr.status!==200){xhr.onreadystatechange=null;failureCallback(new Error(xhr.status));return;}
xhr.onreadystatechange=null;successCallback(xhr.responseText);}
const xhr=new XMLHttpRequest();xhr.withCredentials=false;xhr.open('GET',url,true);xhr.onreadystatechange=onReadyStateChanged;xhr.send(null);}};self.suppressUnused=function(value){};self.setImmediate=function(callback){const args=[...arguments].slice(1);Promise.resolve().then(()=>callback(...args));return 0;};Promise.prototype.spread=function(callback){return this.then(spreadPromise);function spreadPromise(arg){return callback.apply(null,arg);}};Promise.prototype.catchException=function(defaultValue){return this.catch(function(error){console.error(error);return defaultValue;});};Map.prototype.diff=function(other,isEqual){const leftKeys=this.keysArray();const rightKeys=other.keysArray();leftKeys.sort((a,b)=>a-b);rightKeys.sort((a,b)=>a-b);const removed=[];const added=[];const equal=[];let leftIndex=0;let rightIndex=0;while(leftIndex<leftKeys.length&&rightIndex<rightKeys.length){const leftKey=leftKeys[leftIndex];const rightKey=rightKeys[rightIndex];if(leftKey===rightKey&&isEqual(this.get(leftKey),other.get(rightKey))){equal.push(this.get(leftKey));++leftIndex;++rightIndex;continue;}
if(leftKey<=rightKey){removed.push(this.get(leftKey));++leftIndex;continue;}
added.push(other.get(rightKey));++rightIndex;}
while(leftIndex<leftKeys.length){const leftKey=leftKeys[leftIndex++];removed.push(this.get(leftKey));}
while(rightIndex<rightKeys.length){const rightKey=rightKeys[rightIndex++];added.push(other.get(rightKey));}
return{added:added,removed:removed,equal:equal};};self.runOnWindowLoad=function(callback){function windowLoaded(){self.removeEventListener('DOMContentLoaded',windowLoaded,false);callback();}
if(document.readyState==='complete'||document.readyState==='interactive'){callback();}else{self.addEventListener('DOMContentLoaded',windowLoaded,false);}};const _singletonSymbol=Symbol('singleton');self.singleton=function(constructorFunction){if(_singletonSymbol in constructorFunction){return constructorFunction[_singletonSymbol];}
const instance=new constructorFunction();constructorFunction[_singletonSymbol]=instance;return instance;};self.base64ToSize=function(content){if(!content){return 0;}
let size=content.length*3/4;if(content[content.length-1]==='='){size--;}
if(content.length>1&&content[content.length-2]==='='){size--;}
return size;};self.Platform=self.Platform||{};Platform=Platform||{};Platform.Multimap=Multimap;class Text{constructor(value){this._value=value;}
lineEndings(){if(!this._lineEndings){this._lineEndings=this._value.computeLineEndings();}
return this._lineEndings;}
value(){return this._value;}
lineCount(){const lineEndings=this.lineEndings();return lineEndings.length;}
offsetFromPosition(lineNumber,columnNumber){return(lineNumber?this.lineEndings()[lineNumber-1]+1:0)+columnNumber;}
positionFromOffset(offset){const lineEndings=this.lineEndings();const lineNumber=lineEndings.lowerBound(offset);return{lineNumber:lineNumber,columnNumber:offset-(lineNumber&&(lineEndings[lineNumber-1]+1))};}
lineAt(lineNumber){const lineEndings=this.lineEndings();const lineStart=lineNumber>0?lineEndings[lineNumber-1]+1:0;const lineEnd=lineEndings[lineNumber];let lineContent=this._value.substring(lineStart,lineEnd);if(lineContent.length>0&&lineContent.charAt(lineContent.length-1)==='\r'){lineContent=lineContent.substring(0,lineContent.length-1);}
return lineContent;}
toSourceRange(range){const start=this.offsetFromPosition(range.startLine,range.startColumn);const end=this.offsetFromPosition(range.endLine,range.endColumn);return new TextUtils.SourceRange(start,end-start);}
toTextRange(sourceRange){const cursor=new TextCursor(this.lineEndings());const result=TextUtils.TextRange.createFromLocation(0,0);cursor.resetTo(sourceRange.offset);result.startLine=cursor.lineNumber();result.startColumn=cursor.columnNumber();cursor.advance(sourceRange.offset+sourceRange.length);result.endLine=cursor.lineNumber();result.endColumn=cursor.columnNumber();return result;}
replaceRange(range,replacement){const sourceRange=this.toSourceRange(range);return this._value.substring(0,sourceRange.offset)+replacement+
this._value.substring(sourceRange.offset+sourceRange.length);}
extract(range){const sourceRange=this.toSourceRange(range);return this._value.substr(sourceRange.offset,sourceRange.length);}}
class TextCursor{constructor(lineEndings){this._lineEndings=lineEndings;this._offset=0;this._lineNumber=0;this._columnNumber=0;}
advance(offset){this._offset=offset;while(this._lineNumber<this._lineEndings.length&&this._lineEndings[this._lineNumber]<this._offset){++this._lineNumber;}
this._columnNumber=this._lineNumber?this._offset-this._lineEndings[this._lineNumber-1]-1:this._offset;}
offset(){return this._offset;}
resetTo(offset){this._offset=offset;this._lineNumber=this._lineEndings.lowerBound(offset);this._columnNumber=this._lineNumber?this._offset-this._lineEndings[this._lineNumber-1]-1:this._offset;}
lineNumber(){return this._lineNumber;}
columnNumber(){return this._columnNumber;}}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.Text=Text;TextUtils.TextCursor=TextCursor;TextUtils.Text.Position;class TextRange{constructor(startLine,startColumn,endLine,endColumn){this.startLine=startLine;this.startColumn=startColumn;this.endLine=endLine;this.endColumn=endColumn;}
static createFromLocation(line,column){return new TextRange(line,column,line,column);}
static fromObject(serializedTextRange){return new TextRange(serializedTextRange.startLine,serializedTextRange.startColumn,serializedTextRange.endLine,serializedTextRange.endColumn);}
static comparator(range1,range2){return range1.compareTo(range2);}
static fromEdit(oldRange,newText){let endLine=oldRange.startLine;let endColumn=oldRange.startColumn+newText.length;const lineEndings=newText.computeLineEndings();if(lineEndings.length>1){endLine=oldRange.startLine+lineEndings.length-1;const len=lineEndings.length;endColumn=lineEndings[len-1]-lineEndings[len-2]-1;}
return new TextRange(oldRange.startLine,oldRange.startColumn,endLine,endColumn);}
isEmpty(){return this.startLine===this.endLine&&this.startColumn===this.endColumn;}
immediatelyPrecedes(range){if(!range){return false;}
return this.endLine===range.startLine&&this.endColumn===range.startColumn;}
immediatelyFollows(range){if(!range){return false;}
return range.immediatelyPrecedes(this);}
follows(range){return(range.endLine===this.startLine&&range.endColumn<=this.startColumn)||range.endLine<this.startLine;}
get linesCount(){return this.endLine-this.startLine;}
collapseToEnd(){return new TextRange(this.endLine,this.endColumn,this.endLine,this.endColumn);}
collapseToStart(){return new TextRange(this.startLine,this.startColumn,this.startLine,this.startColumn);}
normalize(){if(this.startLine>this.endLine||(this.startLine===this.endLine&&this.startColumn>this.endColumn)){return new TextRange(this.endLine,this.endColumn,this.startLine,this.startColumn);}else{return this.clone();}}
clone(){return new TextRange(this.startLine,this.startColumn,this.endLine,this.endColumn);}
serializeToObject(){const serializedTextRange={};serializedTextRange.startLine=this.startLine;serializedTextRange.startColumn=this.startColumn;serializedTextRange.endLine=this.endLine;serializedTextRange.endColumn=this.endColumn;return serializedTextRange;}
compareTo(other){if(this.startLine>other.startLine){return 1;}
if(this.startLine<other.startLine){return-1;}
if(this.startColumn>other.startColumn){return 1;}
if(this.startColumn<other.startColumn){return-1;}
return 0;}
compareToPosition(lineNumber,columnNumber){if(lineNumber<this.startLine||(lineNumber===this.startLine&&columnNumber<this.startColumn)){return-1;}
if(lineNumber>this.endLine||(lineNumber===this.endLine&&columnNumber>this.endColumn)){return 1;}
return 0;}
equal(other){return this.startLine===other.startLine&&this.endLine===other.endLine&&this.startColumn===other.startColumn&&this.endColumn===other.endColumn;}
relativeTo(line,column){const relative=this.clone();if(this.startLine===line){relative.startColumn-=column;}
if(this.endLine===line){relative.endColumn-=column;}
relative.startLine-=line;relative.endLine-=line;return relative;}
relativeFrom(line,column){const relative=this.clone();if(this.startLine===0){relative.startColumn+=column;}
if(this.endLine===0){relative.endColumn+=column;}
relative.startLine+=line;relative.endLine+=line;return relative;}
rebaseAfterTextEdit(originalRange,editedRange){console.assert(originalRange.startLine===editedRange.startLine);console.assert(originalRange.startColumn===editedRange.startColumn);const rebase=this.clone();if(!this.follows(originalRange)){return rebase;}
const lineDelta=editedRange.endLine-originalRange.endLine;const columnDelta=editedRange.endColumn-originalRange.endColumn;rebase.startLine+=lineDelta;rebase.endLine+=lineDelta;if(rebase.startLine===editedRange.endLine){rebase.startColumn+=columnDelta;}
if(rebase.endLine===editedRange.endLine){rebase.endColumn+=columnDelta;}
return rebase;}
toString(){return JSON.stringify(this);}
containsLocation(lineNumber,columnNumber){if(this.startLine===this.endLine){return this.startLine===lineNumber&&this.startColumn<=columnNumber&&columnNumber<=this.endColumn;}
if(this.startLine===lineNumber){return this.startColumn<=columnNumber;}
if(this.endLine===lineNumber){return columnNumber<=this.endColumn;}
return this.startLine<lineNumber&&lineNumber<this.endLine;}}
class SourceRange{constructor(offset,length){this.offset=offset;this.length=length;}}
class SourceEdit{constructor(sourceURL,oldRange,newText){this.sourceURL=sourceURL;this.oldRange=oldRange;this.newText=newText;}
static comparator(edit1,edit2){return TextRange.comparator(edit1.oldRange,edit2.oldRange);}
newRange(){return TextRange.fromEdit(this.oldRange,this.newText);}}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.TextRange=TextRange;TextUtils.SourceRange=SourceRange;TextUtils.SourceEdit=SourceEdit;const Utils={isStopChar:function(char){return(char>' '&&char<'0')||(char>'9'&&char<'A')||(char>'Z'&&char<'_')||(char>'_'&&char<'a')||(char>'z'&&char<='~');},isWordChar:function(char){return!TextUtils.TextUtils.isStopChar(char)&&!TextUtils.TextUtils.isSpaceChar(char);},isSpaceChar:function(char){return TextUtils.TextUtils._SpaceCharRegex.test(char);},isWord:function(word){for(let i=0;i<word.length;++i){if(!TextUtils.TextUtils.isWordChar(word.charAt(i))){return false;}}
return true;},isOpeningBraceChar:function(char){return char==='('||char==='{';},isClosingBraceChar:function(char){return char===')'||char==='}';},isBraceChar:function(char){return TextUtils.TextUtils.isOpeningBraceChar(char)||TextUtils.TextUtils.isClosingBraceChar(char);},textToWords:function(text,isWordChar,wordCallback){let startWord=-1;for(let i=0;i<text.length;++i){if(!isWordChar(text.charAt(i))){if(startWord!==-1){wordCallback(text.substring(startWord,i));}
startWord=-1;}else if(startWord===-1){startWord=i;}}
if(startWord!==-1){wordCallback(text.substring(startWord));}},lineIndent:function(line){let indentation=0;while(indentation<line.length&&TextUtils.TextUtils.isSpaceChar(line.charAt(indentation))){++indentation;}
return line.substr(0,indentation);},isUpperCase:function(text){return text===text.toUpperCase();},isLowerCase:function(text){return text===text.toLowerCase();},splitStringByRegexes(text,regexes){const matches=[];const globalRegexes=[];for(let i=0;i<regexes.length;i++){const regex=regexes[i];if(!regex.global){globalRegexes.push(new RegExp(regex.source,regex.flags?regex.flags+'g':'g'));}else{globalRegexes.push(regex);}}
doSplit(text,0,0);return matches;function doSplit(text,regexIndex,startIndex){if(regexIndex>=globalRegexes.length){matches.push({value:text,position:startIndex,regexIndex:-1,captureGroups:[]});return;}
const regex=globalRegexes[regexIndex];let currentIndex=0;let result;regex.lastIndex=0;while((result=regex.exec(text))!==null){const stringBeforeMatch=text.substring(currentIndex,result.index);if(stringBeforeMatch){doSplit(stringBeforeMatch,regexIndex+1,startIndex+currentIndex);}
const match=result[0];matches.push({value:match,position:startIndex+result.index,regexIndex:regexIndex,captureGroups:result.slice(1)});currentIndex=result.index+match.length;}
const stringAfterMatches=text.substring(currentIndex);if(stringAfterMatches){doSplit(stringAfterMatches,regexIndex+1,startIndex+currentIndex);}}}};class FilterParser{constructor(keys){this._keys=keys;}
static cloneFilter(filter){return{key:filter.key,text:filter.text,regex:filter.regex,negative:filter.negative};}
parse(query){const splitResult=TextUtils.TextUtils.splitStringByRegexes(query,[TextUtils.TextUtils._keyValueFilterRegex,TextUtils.TextUtils._regexFilterRegex,TextUtils.TextUtils._textFilterRegex]);const filters=[];for(let i=0;i<splitResult.length;i++){const regexIndex=splitResult[i].regexIndex;if(regexIndex===-1){continue;}
const result=splitResult[i].captureGroups;if(regexIndex===0){if(this._keys.indexOf((result[1]))!==-1){filters.push({key:result[1],text:result[2],negative:!!result[0]});}else{filters.push({text:result[1]+':'+result[2],negative:!!result[0]});}}else if(regexIndex===1){try{filters.push({regex:new RegExp(result[1],'i'),negative:!!result[0]});}catch(e){filters.push({text:'/'+result[1]+'/',negative:!!result[0]});}}else if(regexIndex===2){filters.push({text:result[1],negative:!!result[0]});}}
return filters;}}
Utils._keyValueFilterRegex=/(?:^|\s)(\-)?([\w\-]+):([^\s]+)/;Utils._regexFilterRegex=/(?:^|\s)(\-)?\/([^\s]+)\//;Utils._textFilterRegex=/(?:^|\s)(\-)?([^\s]+)/;Utils._SpaceCharRegex=/\s/;Utils.Indent={TwoSpaces:'  ',FourSpaces:'    ',EightSpaces:'        ',TabCharacter:'\t'};class BalancedJSONTokenizer{constructor(callback,findMultiple){this._callback=callback;this._index=0;this._balance=0;this._buffer='';this._findMultiple=findMultiple||false;this._closingDoubleQuoteRegex=/[^\\](?:\\\\)*"/g;}
write(chunk){this._buffer+=chunk;const lastIndex=this._buffer.length;const buffer=this._buffer;let index;for(index=this._index;index<lastIndex;++index){const character=buffer[index];if(character==='"'){this._closingDoubleQuoteRegex.lastIndex=index;if(!this._closingDoubleQuoteRegex.test(buffer)){break;}
index=this._closingDoubleQuoteRegex.lastIndex-1;}else if(character==='{'){++this._balance;}else if(character==='}'){--this._balance;if(this._balance<0){this._reportBalanced();return false;}
if(!this._balance){this._lastBalancedIndex=index+1;if(!this._findMultiple){break;}}}else if(character===']'&&!this._balance){this._reportBalanced();return false;}}
this._index=index;this._reportBalanced();return true;}
_reportBalanced(){if(!this._lastBalancedIndex){return;}
this._callback(this._buffer.slice(0,this._lastBalancedIndex));this._buffer=this._buffer.slice(this._lastBalancedIndex);this._index-=this._lastBalancedIndex;this._lastBalancedIndex=0;}
remainder(){return this._buffer;}}
class TokenizerFactory{createTokenizer(mimeType){}}
function isMinified(text){const kMaxNonMinifiedLength=500;let linesToCheck=10;let lastPosition=0;do{let eolIndex=text.indexOf('\n',lastPosition);if(eolIndex<0){eolIndex=text.length;}
if(eolIndex-lastPosition>kMaxNonMinifiedLength&&text.substr(lastPosition,3)!=='//#'){return true;}
lastPosition=eolIndex+1;}while(--linesToCheck>=0&&lastPosition<text.length);linesToCheck=10;lastPosition=text.length;do{let eolIndex=text.lastIndexOf('\n',lastPosition);if(eolIndex<0){eolIndex=0;}
if(lastPosition-eolIndex>kMaxNonMinifiedLength&&text.substr(lastPosition,3)!=='//#'){return true;}
lastPosition=eolIndex-1;}while(--linesToCheck>=0&&lastPosition>0);return false;}
self.TextUtils=self.TextUtils||{};TextUtils=TextUtils||{};TextUtils.TextUtils=Utils;TextUtils.FilterParser=FilterParser;TextUtils.BalancedJSONTokenizer=BalancedJSONTokenizer;TextUtils.TokenizerFactory=TokenizerFactory;TextUtils.isMinified=isMinified;TextUtils.FilterParser.ParsedFilter;class App{presentUI(document){}}
self.Common=self.Common||{};Common=Common||{};Common.App=App;class AppProvider{createApp(){}}
self.Common=self.Common||{};Common=Common||{};Common.AppProvider=AppProvider;class CharacterIdMap{constructor(){this._elementToCharacter=new Map();this._characterToElement=new Map();this._charCode=33;}
toChar(object){let character=this._elementToCharacter.get(object);if(!character){if(this._charCode>=0xFFFF){throw new Error('CharacterIdMap ran out of capacity!');}
character=String.fromCharCode(this._charCode++);this._elementToCharacter.set(object,character);this._characterToElement.set(character,object);}
return character;}
fromChar(character){const object=this._characterToElement.get(character);if(object===undefined){return null;}
return object;}}
self.Common=self.Common||{};Common=Common||{};Common.CharacterIdMap=CharacterIdMap;class Color{constructor(rgba,format,originalText){this._rgba=rgba;this._originalText=originalText||null;this._originalTextIsValid=!!this._originalText;this._format=format;if(typeof this._rgba[3]==='undefined'){this._rgba[3]=1;}
for(let i=0;i<4;++i){if(this._rgba[i]<0){this._rgba[i]=0;this._originalTextIsValid=false;}
if(this._rgba[i]>1){this._rgba[i]=1;this._originalTextIsValid=false;}}}
static parse(text){const value=text.toLowerCase().replace(/\s+/g,'');const simple=/^(?:#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})|(\w+))$/i;let match=value.match(simple);if(match){if(match[1]){let hex=match[1].toLowerCase();let format;if(hex.length===3){format=Format.ShortHEX;hex=hex.charAt(0)+hex.charAt(0)+hex.charAt(1)+hex.charAt(1)+hex.charAt(2)+hex.charAt(2);}else if(hex.length===4){format=Format.ShortHEXA;hex=hex.charAt(0)+hex.charAt(0)+hex.charAt(1)+hex.charAt(1)+hex.charAt(2)+hex.charAt(2)+
hex.charAt(3)+hex.charAt(3);}else if(hex.length===6){format=Format.HEX;}else{format=Format.HEXA;}
const r=parseInt(hex.substring(0,2),16);const g=parseInt(hex.substring(2,4),16);const b=parseInt(hex.substring(4,6),16);let a=1;if(hex.length===8){a=parseInt(hex.substring(6,8),16)/255;}
return new Color([r/255,g/255,b/255,a],format,text);}
if(match[2]){const nickname=match[2].toLowerCase();if(nickname in Nicknames){const rgba=Nicknames[nickname];const color=Color.fromRGBA(rgba);color._format=Format.Nickname;color._originalText=text;return color;}
return null;}
return null;}
match=text.toLowerCase().match(/^\s*(?:(rgba?)|(hsla?))\((.*)\)\s*$/);if(match){const components=match[3].trim();let values=components.split(/\s*,\s*/);if(values.length===1){values=components.split(/\s+/);if(values[3]==='/'){values.splice(3,1);if(values.length!==4){return null;}}else if((values.length>2&&values[2].indexOf('/')!==-1)||(values.length>3&&values[3].indexOf('/')!==-1)){const alpha=values.slice(2,4).join('');values=values.slice(0,2).concat(alpha.split(/\//)).concat(values.slice(4));}else if(values.length>=4){return null;}}
if(values.length!==3&&values.length!==4||values.indexOf('')>-1){return null;}
const hasAlpha=(values[3]!==undefined);if(match[1]){const rgba=[Color._parseRgbNumeric(values[0]),Color._parseRgbNumeric(values[1]),Color._parseRgbNumeric(values[2]),hasAlpha?Color._parseAlphaNumeric(values[3]):1];if(rgba.indexOf(null)>-1){return null;}
return new Color(rgba,hasAlpha?Format.RGBA:Format.RGB,text);}
if(match[2]){const hsla=[Color._parseHueNumeric(values[0]),Color._parseSatLightNumeric(values[1]),Color._parseSatLightNumeric(values[2]),hasAlpha?Color._parseAlphaNumeric(values[3]):1];if(hsla.indexOf(null)>-1){return null;}
const rgba=[];Color.hsl2rgb(hsla,rgba);return new Color(rgba,hasAlpha?Format.HSLA:Format.HSL,text);}}
return null;}
static fromRGBA(rgba){return new Color([rgba[0]/255,rgba[1]/255,rgba[2]/255,rgba[3]],Format.RGBA);}
static fromHSVA(hsva){const rgba=[];Color.hsva2rgba(hsva,rgba);return new Color(rgba,Format.HSLA);}
static _parsePercentOrNumber(value){if(isNaN(value.replace('%',''))){return null;}
const parsed=parseFloat(value);if(value.indexOf('%')!==-1){if(value.indexOf('%')!==value.length-1){return null;}
return parsed/100;}
return parsed;}
static _parseRgbNumeric(value){const parsed=Color._parsePercentOrNumber(value);if(parsed===null){return null;}
if(value.indexOf('%')!==-1){return parsed;}
return parsed/255;}
static _parseHueNumeric(value){const angle=value.replace(/(deg|g?rad|turn)$/,'');if(isNaN(angle)||value.match(/\s+(deg|g?rad|turn)/)){return null;}
const number=parseFloat(angle);if(value.indexOf('turn')!==-1){return number%1;}else if(value.indexOf('grad')!==-1){return(number/400)%1;}else if(value.indexOf('rad')!==-1){return(number/(2*Math.PI))%1;}
return(number/360)%1;}
static _parseSatLightNumeric(value){if(value.indexOf('%')!==value.length-1||isNaN(value.replace('%',''))){return null;}
const parsed=parseFloat(value);return Math.min(1,parsed/100);}
static _parseAlphaNumeric(value){return Color._parsePercentOrNumber(value);}
static _hsva2hsla(hsva,out_hsla){const h=hsva[0];let s=hsva[1];const v=hsva[2];const t=(2-s)*v;if(v===0||s===0){s=0;}else{s*=v/(t<1?t:2-t);}
out_hsla[0]=h;out_hsla[1]=s;out_hsla[2]=t/2;out_hsla[3]=hsva[3];}
static hsl2rgb(hsl,out_rgb){const h=hsl[0];let s=hsl[1];const l=hsl[2];function hue2rgb(p,q,h){if(h<0){h+=1;}else if(h>1){h-=1;}
if((h*6)<1){return p+(q-p)*h*6;}else if((h*2)<1){return q;}else if((h*3)<2){return p+(q-p)*((2/3)-h)*6;}else{return p;}}
if(s<0){s=0;}
let q;if(l<=0.5){q=l*(1+s);}else{q=l+s-(l*s);}
const p=2*l-q;const tr=h+(1/3);const tg=h;const tb=h-(1/3);out_rgb[0]=hue2rgb(p,q,tr);out_rgb[1]=hue2rgb(p,q,tg);out_rgb[2]=hue2rgb(p,q,tb);out_rgb[3]=hsl[3];}
static hsva2rgba(hsva,out_rgba){Color._hsva2hsla(hsva,Color.hsva2rgba._tmpHSLA);Color.hsl2rgb(Color.hsva2rgba._tmpHSLA,out_rgba);for(let i=0;i<Color.hsva2rgba._tmpHSLA.length;i++){Color.hsva2rgba._tmpHSLA[i]=0;}}
static luminance(rgba){const rSRGB=rgba[0];const gSRGB=rgba[1];const bSRGB=rgba[2];const r=rSRGB<=0.03928?rSRGB/12.92:Math.pow(((rSRGB+0.055)/1.055),2.4);const g=gSRGB<=0.03928?gSRGB/12.92:Math.pow(((gSRGB+0.055)/1.055),2.4);const b=bSRGB<=0.03928?bSRGB/12.92:Math.pow(((bSRGB+0.055)/1.055),2.4);return 0.2126*r+0.7152*g+0.0722*b;}
static blendColors(fgRGBA,bgRGBA,out_blended){const alpha=fgRGBA[3];out_blended[0]=((1-alpha)*bgRGBA[0])+(alpha*fgRGBA[0]);out_blended[1]=((1-alpha)*bgRGBA[1])+(alpha*fgRGBA[1]);out_blended[2]=((1-alpha)*bgRGBA[2])+(alpha*fgRGBA[2]);out_blended[3]=alpha+(bgRGBA[3]*(1-alpha));}
static calculateContrastRatio(fgRGBA,bgRGBA){Color.blendColors(fgRGBA,bgRGBA,Color.calculateContrastRatio._blendedFg);const fgLuminance=Color.luminance(Color.calculateContrastRatio._blendedFg);const bgLuminance=Color.luminance(bgRGBA);const contrastRatio=(Math.max(fgLuminance,bgLuminance)+0.05)/(Math.min(fgLuminance,bgLuminance)+0.05);for(let i=0;i<Color.calculateContrastRatio._blendedFg.length;i++){Color.calculateContrastRatio._blendedFg[i]=0;}
return contrastRatio;}
static desiredLuminance(luminance,contrast,lighter){function computeLuminance(){if(lighter){return(luminance+0.05)*contrast-0.05;}else{return(luminance+0.05)/contrast-0.05;}}
let desiredLuminance=computeLuminance();if(desiredLuminance<0||desiredLuminance>1){lighter=!lighter;desiredLuminance=computeLuminance();}
return desiredLuminance;}
static detectColorFormat(color){const cf=Format;let format;const formatSetting=Common.moduleSetting('colorFormat').get();if(formatSetting===cf.Original){format=cf.Original;}else if(formatSetting===cf.RGB){format=(color.hasAlpha()?cf.RGBA:cf.RGB);}else if(formatSetting===cf.HSL){format=(color.hasAlpha()?cf.HSLA:cf.HSL);}else if(formatSetting===cf.HEX){format=color.detectHEXFormat();}else{format=cf.RGBA;}
return format;}
format(){return this._format;}
hsla(){if(this._hsla){return this._hsla;}
const r=this._rgba[0];const g=this._rgba[1];const b=this._rgba[2];const max=Math.max(r,g,b);const min=Math.min(r,g,b);const diff=max-min;const add=max+min;let h;if(min===max){h=0;}else if(r===max){h=((1/6*(g-b)/diff)+1)%1;}else if(g===max){h=(1/6*(b-r)/diff)+1/3;}else{h=(1/6*(r-g)/diff)+2/3;}
const l=0.5*add;let s;if(l===0){s=0;}else if(l===1){s=0;}else if(l<=0.5){s=diff/add;}else{s=diff/(2-add);}
this._hsla=[h,s,l,this._rgba[3]];return this._hsla;}
canonicalHSLA(){const hsla=this.hsla();return[Math.round(hsla[0]*360),Math.round(hsla[1]*100),Math.round(hsla[2]*100),hsla[3]];}
hsva(){const hsla=this.hsla();const h=hsla[0];let s=hsla[1];const l=hsla[2];s*=l<0.5?l:1-l;return[h,s!==0?2*s/(l+s):0,(l+s),hsla[3]];}
hasAlpha(){return this._rgba[3]!==1;}
detectHEXFormat(){let canBeShort=true;for(let i=0;i<4;++i){const c=Math.round(this._rgba[i]*255);if(c%17){canBeShort=false;break;}}
const hasAlpha=this.hasAlpha();const cf=Format;if(canBeShort){return hasAlpha?cf.ShortHEXA:cf.ShortHEX;}
return hasAlpha?cf.HEXA:cf.HEX;}
asString(format){if(format===this._format&&this._originalTextIsValid){return this._originalText;}
if(!format){format=this._format;}
function toRgbValue(value){return Math.round(value*255);}
function toHexValue(value){const hex=Math.round(value*255).toString(16);return hex.length===1?'0'+hex:hex;}
function toShortHexValue(value){return(Math.round(value*255)/17).toString(16);}
switch(format){case Format.Original:return this._originalText;case Format.RGB:if(this.hasAlpha()){return null;}
return String.sprintf('rgb(%d, %d, %d)',toRgbValue(this._rgba[0]),toRgbValue(this._rgba[1]),toRgbValue(this._rgba[2]));case Format.RGBA:return String.sprintf('rgba(%d, %d, %d, %f)',toRgbValue(this._rgba[0]),toRgbValue(this._rgba[1]),toRgbValue(this._rgba[2]),this._rgba[3]);case Format.HSL:if(this.hasAlpha()){return null;}
const hsl=this.hsla();return String.sprintf('hsl(%d, %d%, %d%)',Math.round(hsl[0]*360),Math.round(hsl[1]*100),Math.round(hsl[2]*100));case Format.HSLA:const hsla=this.hsla();return String.sprintf('hsla(%d, %d%, %d%, %f)',Math.round(hsla[0]*360),Math.round(hsla[1]*100),Math.round(hsla[2]*100),hsla[3]);case Format.HEXA:return String.sprintf('#%s%s%s%s',toHexValue(this._rgba[0]),toHexValue(this._rgba[1]),toHexValue(this._rgba[2]),toHexValue(this._rgba[3])).toLowerCase();case Format.HEX:if(this.hasAlpha()){return null;}
return String.sprintf('#%s%s%s',toHexValue(this._rgba[0]),toHexValue(this._rgba[1]),toHexValue(this._rgba[2])).toLowerCase();case Format.ShortHEXA:const hexFormat=this.detectHEXFormat();if(hexFormat!==Format.ShortHEXA&&hexFormat!==Format.ShortHEX){return null;}
return String.sprintf('#%s%s%s%s',toShortHexValue(this._rgba[0]),toShortHexValue(this._rgba[1]),toShortHexValue(this._rgba[2]),toShortHexValue(this._rgba[3])).toLowerCase();case Format.ShortHEX:if(this.hasAlpha()){return null;}
if(this.detectHEXFormat()!==Format.ShortHEX){return null;}
return String.sprintf('#%s%s%s',toShortHexValue(this._rgba[0]),toShortHexValue(this._rgba[1]),toShortHexValue(this._rgba[2])).toLowerCase();case Format.Nickname:return this.nickname();}
return this._originalText;}
rgba(){return this._rgba.slice();}
canonicalRGBA(){const rgba=new Array(4);for(let i=0;i<3;++i){rgba[i]=Math.round(this._rgba[i]*255);}
rgba[3]=this._rgba[3];return rgba;}
nickname(){if(!Color._rgbaToNickname){Color._rgbaToNickname={};for(const nickname in Nicknames){let rgba=Nicknames[nickname];if(rgba.length!==4){rgba=rgba.concat(1);}
Color._rgbaToNickname[rgba]=nickname;}}
return Color._rgbaToNickname[this.canonicalRGBA()]||null;}
toProtocolRGBA(){const rgba=this.canonicalRGBA();const result={r:rgba[0],g:rgba[1],b:rgba[2]};if(rgba[3]!==1){result.a=rgba[3];}
return result;}
invert(){const rgba=[];rgba[0]=1-this._rgba[0];rgba[1]=1-this._rgba[1];rgba[2]=1-this._rgba[2];rgba[3]=this._rgba[3];return new Color(rgba,Format.RGBA);}
setAlpha(alpha){const rgba=this._rgba.slice();rgba[3]=alpha;return new Color(rgba,Format.RGBA);}
blendWith(fgColor){const rgba=[];Color.blendColors(fgColor._rgba,this._rgba,rgba);return new Color(rgba,Format.RGBA);}}
const Regex=/((?:rgb|hsl)a?\([^)]+\)|#[0-9a-fA-F]{8}|#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3,4}|\b[a-zA-Z]+\b(?!-))/g;const Format={Original:'original',Nickname:'nickname',HEX:'hex',ShortHEX:'shorthex',HEXA:'hexa',ShortHEXA:'shorthexa',RGB:'rgb',RGBA:'rgba',HSL:'hsl',HSLA:'hsla'};const Nicknames={'aliceblue':[240,248,255],'antiquewhite':[250,235,215],'aqua':[0,255,255],'aquamarine':[127,255,212],'azure':[240,255,255],'beige':[245,245,220],'bisque':[255,228,196],'black':[0,0,0],'blanchedalmond':[255,235,205],'blue':[0,0,255],'blueviolet':[138,43,226],'brown':[165,42,42],'burlywood':[222,184,135],'cadetblue':[95,158,160],'chartreuse':[127,255,0],'chocolate':[210,105,30],'coral':[255,127,80],'cornflowerblue':[100,149,237],'cornsilk':[255,248,220],'crimson':[237,20,61],'cyan':[0,255,255],'darkblue':[0,0,139],'darkcyan':[0,139,139],'darkgoldenrod':[184,134,11],'darkgray':[169,169,169],'darkgrey':[169,169,169],'darkgreen':[0,100,0],'darkkhaki':[189,183,107],'darkmagenta':[139,0,139],'darkolivegreen':[85,107,47],'darkorange':[255,140,0],'darkorchid':[153,50,204],'darkred':[139,0,0],'darksalmon':[233,150,122],'darkseagreen':[143,188,143],'darkslateblue':[72,61,139],'darkslategray':[47,79,79],'darkslategrey':[47,79,79],'darkturquoise':[0,206,209],'darkviolet':[148,0,211],'deeppink':[255,20,147],'deepskyblue':[0,191,255],'dimgray':[105,105,105],'dimgrey':[105,105,105],'dodgerblue':[30,144,255],'firebrick':[178,34,34],'floralwhite':[255,250,240],'forestgreen':[34,139,34],'fuchsia':[255,0,255],'gainsboro':[220,220,220],'ghostwhite':[248,248,255],'gold':[255,215,0],'goldenrod':[218,165,32],'gray':[128,128,128],'grey':[128,128,128],'green':[0,128,0],'greenyellow':[173,255,47],'honeydew':[240,255,240],'hotpink':[255,105,180],'indianred':[205,92,92],'indigo':[75,0,130],'ivory':[255,255,240],'khaki':[240,230,140],'lavender':[230,230,250],'lavenderblush':[255,240,245],'lawngreen':[124,252,0],'lemonchiffon':[255,250,205],'lightblue':[173,216,230],'lightcoral':[240,128,128],'lightcyan':[224,255,255],'lightgoldenrodyellow':[250,250,210],'lightgreen':[144,238,144],'lightgray':[211,211,211],'lightgrey':[211,211,211],'lightpink':[255,182,193],'lightsalmon':[255,160,122],'lightseagreen':[32,178,170],'lightskyblue':[135,206,250],'lightslategray':[119,136,153],'lightslategrey':[119,136,153],'lightsteelblue':[176,196,222],'lightyellow':[255,255,224],'lime':[0,255,0],'limegreen':[50,205,50],'linen':[250,240,230],'magenta':[255,0,255],'maroon':[128,0,0],'mediumaquamarine':[102,205,170],'mediumblue':[0,0,205],'mediumorchid':[186,85,211],'mediumpurple':[147,112,219],'mediumseagreen':[60,179,113],'mediumslateblue':[123,104,238],'mediumspringgreen':[0,250,154],'mediumturquoise':[72,209,204],'mediumvioletred':[199,21,133],'midnightblue':[25,25,112],'mintcream':[245,255,250],'mistyrose':[255,228,225],'moccasin':[255,228,181],'navajowhite':[255,222,173],'navy':[0,0,128],'oldlace':[253,245,230],'olive':[128,128,0],'olivedrab':[107,142,35],'orange':[255,165,0],'orangered':[255,69,0],'orchid':[218,112,214],'palegoldenrod':[238,232,170],'palegreen':[152,251,152],'paleturquoise':[175,238,238],'palevioletred':[219,112,147],'papayawhip':[255,239,213],'peachpuff':[255,218,185],'peru':[205,133,63],'pink':[255,192,203],'plum':[221,160,221],'powderblue':[176,224,230],'purple':[128,0,128],'rebeccapurple':[102,51,153],'red':[255,0,0],'rosybrown':[188,143,143],'royalblue':[65,105,225],'saddlebrown':[139,69,19],'salmon':[250,128,114],'sandybrown':[244,164,96],'seagreen':[46,139,87],'seashell':[255,245,238],'sienna':[160,82,45],'silver':[192,192,192],'skyblue':[135,206,235],'slateblue':[106,90,205],'slategray':[112,128,144],'slategrey':[112,128,144],'snow':[255,250,250],'springgreen':[0,255,127],'steelblue':[70,130,180],'tan':[210,180,140],'teal':[0,128,128],'thistle':[216,191,216],'tomato':[255,99,71],'turquoise':[64,224,208],'violet':[238,130,238],'wheat':[245,222,179],'white':[255,255,255],'whitesmoke':[245,245,245],'yellow':[255,255,0],'yellowgreen':[154,205,50],'transparent':[0,0,0,0],};const PageHighlight={Content:Color.fromRGBA([111,168,220,.66]),ContentLight:Color.fromRGBA([111,168,220,.5]),ContentOutline:Color.fromRGBA([9,83,148]),Padding:Color.fromRGBA([147,196,125,.55]),PaddingLight:Color.fromRGBA([147,196,125,.4]),Border:Color.fromRGBA([255,229,153,.66]),BorderLight:Color.fromRGBA([255,229,153,.5]),Margin:Color.fromRGBA([246,178,107,.66]),MarginLight:Color.fromRGBA([246,178,107,.5]),EventTarget:Color.fromRGBA([255,196,196,.66]),Shape:Color.fromRGBA([96,82,177,0.8]),ShapeMargin:Color.fromRGBA([96,82,127,.6]),CssGrid:Color.fromRGBA([0x4b,0,0x82,1])};class Generator{constructor(hueSpace,satSpace,lightnessSpace,alphaSpace){this._hueSpace=hueSpace||{min:0,max:360};this._satSpace=satSpace||67;this._lightnessSpace=lightnessSpace||80;this._alphaSpace=alphaSpace||1;this._colors=new Map();}
setColorForID(id,color){this._colors.set(id,color);}
colorForID(id){let color=this._colors.get(id);if(!color){color=this._generateColorForID(id);this._colors.set(id,color);}
return color;}
_generateColorForID(id){const hash=String.hashCode(id);const h=this._indexToValueInSpace(hash,this._hueSpace);const s=this._indexToValueInSpace(hash>>8,this._satSpace);const l=this._indexToValueInSpace(hash>>16,this._lightnessSpace);const a=this._indexToValueInSpace(hash>>24,this._alphaSpace);return`hsla(${h}, ${s}%, ${l}%, ${a})`;}
_indexToValueInSpace(index,space){if(typeof space==='number'){return space;}
const count=space.count||space.max-space.min;index%=count;return space.min+Math.floor(index/(count-1)*(space.max-space.min));}}
Color.hsva2rgba._tmpHSLA=[0,0,0,0];Color.calculateContrastRatio._blendedFg=[0,0,0,0];self.Common=self.Common||{};Common=Common||{};Common.Color=Color;Common.Color.Regex=Regex;Common.Color.Format=Format;Common.Color.Nicknames=Nicknames;Common.Color.PageHighlight=PageHighlight;Common.Color.Generator=Generator;function removeEventListeners(eventList){for(const eventInfo of eventList){eventInfo.eventTarget.removeEventListener(eventInfo.eventType,eventInfo.listener,eventInfo.thisObject);}
eventList.splice(0);}
class EventTarget{addEventListener(eventType,listener,thisObject){}
once(eventType){}
removeEventListener(eventType,listener,thisObject){}
hasEventListeners(eventType){}
dispatchEventToListeners(eventType,eventData){}}
self.Common=self.Common||{};Common=Common||{};Common.EventTarget=EventTarget;EventTarget.removeEventListeners=removeEventListeners;Common.EventTarget.EventDescriptor;Common.Event;class ObjectWrapper{constructor(){this._listeners;}
addEventListener(eventType,listener,thisObject){if(!listener){console.assert(false);}
if(!this._listeners){this._listeners=new Map();}
if(!this._listeners.has(eventType)){this._listeners.set(eventType,[]);}
this._listeners.get(eventType).push({thisObject:thisObject,listener:listener});return{eventTarget:this,eventType:eventType,thisObject:thisObject,listener:listener};}
once(eventType){return new Promise(resolve=>{const descriptor=this.addEventListener(eventType,event=>{this.removeEventListener(eventType,descriptor.listener);resolve(event.data);});});}
removeEventListener(eventType,listener,thisObject){console.assert(listener);if(!this._listeners||!this._listeners.has(eventType)){return;}
const listeners=this._listeners.get(eventType);for(let i=0;i<listeners.length;++i){if(listeners[i].listener===listener&&listeners[i].thisObject===thisObject){listeners[i].disposed=true;listeners.splice(i--,1);}}
if(!listeners.length){this._listeners.delete(eventType);}}
hasEventListeners(eventType){return!!(this._listeners&&this._listeners.has(eventType));}
dispatchEventToListeners(eventType,eventData){if(!this._listeners||!this._listeners.has(eventType)){return;}
const event=({data:eventData});const listeners=this._listeners.get(eventType).slice(0);for(let i=0;i<listeners.length;++i){if(!listeners[i].disposed){listeners[i].listener.call(listeners[i].thisObject,event);}}}}
self.Common=self.Common||{};Common=Common||{};Common.Object=ObjectWrapper;Common.Object._listenerCallbackTuple;class Console extends ObjectWrapper{constructor(){super();this._messages=[];}
addMessage(text,level,show){const message=new Message(text,level||MessageLevel.Info,Date.now(),show||false);this._messages.push(message);this.dispatchEventToListeners(Events.MessageAdded,message);}
log(text){this.addMessage(text,MessageLevel.Info);}
warn(text){this.addMessage(text,MessageLevel.Warning);}
error(text){this.addMessage(text,MessageLevel.Error,true);}
messages(){return this._messages;}
show(){this.showPromise();}
showPromise(){return Common.Revealer.reveal(this);}}
const Events={MessageAdded:Symbol('messageAdded')};const MessageLevel={Info:'info',Warning:'warning',Error:'error'};class Message{constructor(text,level,timestamp,show){this.text=text;this.level=level;this.timestamp=(typeof timestamp==='number')?timestamp:Date.now();this.show=show;}}
self.Common=self.Common||{};Common=Common||{};Common.console=new Console();Common.Console=Console;Common.Console.Events=Events;Common.Console.MessageLevel=MessageLevel;Common.Console.Message=Message;class ParsedURL{constructor(url){this.isValid=false;this.url=url;this.scheme='';this.user='';this.host='';this.port='';this.path='';this.queryParams='';this.fragment='';this.folderPathComponents='';this.lastPathComponent='';const isBlobUrl=this.url.startsWith('blob:');const urlToMatch=isBlobUrl?url.substring(5):url;const match=urlToMatch.match(ParsedURL._urlRegex());if(match){this.isValid=true;if(isBlobUrl){this._blobInnerScheme=match[2].toLowerCase();this.scheme='blob';}else{this.scheme=match[2].toLowerCase();}
this.user=match[3];this.host=match[4];this.port=match[5];this.path=match[6]||'/';this.queryParams=match[7]||'';this.fragment=match[8];}else{if(this.url.startsWith('data:')){this.scheme='data';return;}
if(this.url.startsWith('blob:')){this.scheme='blob';return;}
if(this.url==='about:blank'){this.scheme='about';return;}
this.path=this.url;}
const lastSlashIndex=this.path.lastIndexOf('/');if(lastSlashIndex!==-1){this.folderPathComponents=this.path.substring(0,lastSlashIndex);this.lastPathComponent=this.path.substring(lastSlashIndex+1);}else{this.lastPathComponent=this.path;}}
static platformPathToURL(fileSystemPath){fileSystemPath=fileSystemPath.replace(/\\/g,'/');if(!fileSystemPath.startsWith('file://')){if(fileSystemPath.startsWith('/')){fileSystemPath='file://'+fileSystemPath;}else{fileSystemPath='file:///'+fileSystemPath;}}
return fileSystemPath;}
static urlToPlatformPath(fileURL,isWindows){console.assert(fileURL.startsWith('file://'),'This must be a file URL.');if(isWindows){return fileURL.substr('file:///'.length).replace(/\//g,'\\');}
return fileURL.substr('file://'.length);}
static urlWithoutHash(url){const hashIndex=url.indexOf('#');if(hashIndex!==-1){return url.substr(0,hashIndex);}
return url;}
static _urlRegex(){if(ParsedURL._urlRegexInstance){return ParsedURL._urlRegexInstance;}
const schemeRegex=/([A-Za-z][A-Za-z0-9+.-]*):\/\//;const userRegex=/(?:([A-Za-z0-9\-._~%!$&'()*+,;=:]*)@)?/;const hostRegex=/((?:\[::\d?\])|(?:[^\s\/:]*))/;const portRegex=/(?::([\d]+))?/;const pathRegex=/(\/[^#?]*)?/;const queryRegex=/(?:\?([^#]*))?/;const fragmentRegex=/(?:#(.*))?/;ParsedURL._urlRegexInstance=new RegExp('^('+schemeRegex.source+userRegex.source+hostRegex.source+portRegex.source+')'+pathRegex.source+
queryRegex.source+fragmentRegex.source+'$');return ParsedURL._urlRegexInstance;}
static extractPath(url){const parsedURL=url.asParsedURL();return parsedURL?parsedURL.path:'';}
static extractOrigin(url){const parsedURL=url.asParsedURL();return parsedURL?parsedURL.securityOrigin():'';}
static extractExtension(url){url=ParsedURL.urlWithoutHash(url);const indexOfQuestionMark=url.indexOf('?');if(indexOfQuestionMark!==-1){url=url.substr(0,indexOfQuestionMark);}
const lastIndexOfSlash=url.lastIndexOf('/');if(lastIndexOfSlash!==-1){url=url.substr(lastIndexOfSlash+1);}
const lastIndexOfDot=url.lastIndexOf('.');if(lastIndexOfDot!==-1){url=url.substr(lastIndexOfDot+1);const lastIndexOfPercent=url.indexOf('%');if(lastIndexOfPercent!==-1){return url.substr(0,lastIndexOfPercent);}
return url;}
return'';}
static extractName(url){let index=url.lastIndexOf('/');const pathAndQuery=index!==-1?url.substr(index+1):url;index=pathAndQuery.indexOf('?');return index<0?pathAndQuery:pathAndQuery.substr(0,index);}
static completeURL(baseURL,href){const trimmedHref=href.trim();if(trimmedHref.startsWith('data:')||trimmedHref.startsWith('blob:')||trimmedHref.startsWith('javascript:')||trimmedHref.startsWith('mailto:')){return href;}
const parsedHref=trimmedHref.asParsedURL();if(parsedHref&&parsedHref.scheme){return trimmedHref;}
const parsedURL=baseURL.asParsedURL();if(!parsedURL){return null;}
if(parsedURL.isDataURL()){return href;}
if(href.length>1&&href.charAt(0)==='/'&&href.charAt(1)==='/'){return parsedURL.scheme+':'+href;}
const securityOrigin=parsedURL.securityOrigin();const pathText=parsedURL.path;const queryText=parsedURL.queryParams?'?'+parsedURL.queryParams:'';if(!href.length){return securityOrigin+pathText+queryText;}
if(href.charAt(0)==='#'){return securityOrigin+pathText+queryText+href;}
if(href.charAt(0)==='?'){return securityOrigin+pathText+href;}
let hrefPath=href.match(/^[^#?]*/)[0];const hrefSuffix=href.substring(hrefPath.length);if(hrefPath.charAt(0)!=='/'){hrefPath=parsedURL.folderPathComponents+'/'+hrefPath;}
return securityOrigin+Root.Runtime.normalizePath(hrefPath)+hrefSuffix;}
static splitLineAndColumn(string){const beforePathMatch=string.match(ParsedURL._urlRegex());let beforePath='';let pathAndAfter=string;if(beforePathMatch){beforePath=beforePathMatch[1];pathAndAfter=string.substring(beforePathMatch[1].length);}
const lineColumnRegEx=/(?::(\d+))?(?::(\d+))?$/;const lineColumnMatch=lineColumnRegEx.exec(pathAndAfter);let lineNumber;let columnNumber;console.assert(lineColumnMatch);if(typeof(lineColumnMatch[1])==='string'){lineNumber=parseInt(lineColumnMatch[1],10);lineNumber=isNaN(lineNumber)?undefined:lineNumber-1;}
if(typeof(lineColumnMatch[2])==='string'){columnNumber=parseInt(lineColumnMatch[2],10);columnNumber=isNaN(columnNumber)?undefined:columnNumber-1;}
return{url:beforePath+pathAndAfter.substring(0,pathAndAfter.length-lineColumnMatch[0].length),lineNumber:lineNumber,columnNumber:columnNumber};}
static isRelativeURL(url){return!(/^[A-Za-z][A-Za-z0-9+.-]*:/.test(url));}
get displayName(){if(this._displayName){return this._displayName;}
if(this.isDataURL()){return this.dataURLDisplayName();}
if(this.isBlobURL()){return this.url;}
if(this.isAboutBlank()){return this.url;}
this._displayName=this.lastPathComponent;if(!this._displayName){this._displayName=(this.host||'')+'/';}
if(this._displayName==='/'){this._displayName=this.url;}
return this._displayName;}
dataURLDisplayName(){if(this._dataURLDisplayName){return this._dataURLDisplayName;}
if(!this.isDataURL()){return'';}
this._dataURLDisplayName=this.url.trimEndWithMaxLength(20);return this._dataURLDisplayName;}
isAboutBlank(){return this.url==='about:blank';}
isDataURL(){return this.scheme==='data';}
isBlobURL(){return this.url.startsWith('blob:');}
lastPathComponentWithFragment(){return this.lastPathComponent+(this.fragment?'#'+this.fragment:'');}
domain(){if(this.isDataURL()){return'data:';}
return this.host+(this.port?':'+this.port:'');}
securityOrigin(){if(this.isDataURL()){return'data:';}
const scheme=this.isBlobURL()?this._blobInnerScheme:this.scheme;return scheme+'://'+this.domain();}
urlWithoutScheme(){if(this.scheme&&this.url.startsWith(this.scheme+'://')){return this.url.substring(this.scheme.length+3);}
return this.url;}}
String.prototype.asParsedURL=function(){const parsedURL=new ParsedURL(this.toString());if(parsedURL.isValid){return parsedURL;}
return null;};self.Common=self.Common||{};Common=Common||{};Common.ParsedURL=ParsedURL;function UIString(string,vararg){return String.vsprintf(Common.localize(string),Array.prototype.slice.call(arguments,1));}
function serializeUIString(string,values=[]){const messageParts=[string];const serializedMessage={messageParts,values};return JSON.stringify(serializedMessage);}
function deserializeUIString(serializedMessage){if(!serializedMessage){return{};}
return JSON.parse(serializedMessage);}
function localize(string){return string;}
class UIStringFormat{constructor(format){this._localizedFormat=localize(format);this._tokenizedFormat=String.tokenizeFormatString(this._localizedFormat,String.standardFormatters);}
static _append(a,b){return a+b;}
format(vararg){return String.format(this._localizedFormat,arguments,String.standardFormatters,'',UIStringFormat._append,this._tokenizedFormat).formattedResult;}}
const _substitutionStrings=new WeakMap();function ls$1(strings,vararg){if(typeof strings==='string'){return strings;}
let substitutionString=_substitutionStrings.get(strings);if(!substitutionString){substitutionString=strings.join('%s');_substitutionStrings.set(strings,substitutionString);}
return UIString(substitutionString,...Array.prototype.slice.call(arguments,1));}
self.ls=ls$1;self.Common=self.Common||{};Common=Common||{};Common.UIStringFormat=UIStringFormat;Common.UIString=UIString;Common.serializeUIString=serializeUIString;Common.deserializeUIString=deserializeUIString;Common.localize=localize;class ResourceType{constructor(name,title,category,isTextType){this._name=name;this._title=title;this._category=category;this._isTextType=isTextType;}
static fromMimeType(mimeType){if(!mimeType){return resourceTypes.Other;}
if(mimeType.startsWith('text/html')){return resourceTypes.Document;}
if(mimeType.startsWith('text/css')){return resourceTypes.Stylesheet;}
if(mimeType.startsWith('image/')){return resourceTypes.Image;}
if(mimeType.startsWith('text/')){return resourceTypes.Script;}
if(mimeType.includes('font')){return resourceTypes.Font;}
if(mimeType.includes('script')){return resourceTypes.Script;}
if(mimeType.includes('octet')){return resourceTypes.Other;}
if(mimeType.includes('application')){return resourceTypes.Script;}
return resourceTypes.Other;}
static fromURL(url){return ResourceType._resourceTypeByExtension.get(ParsedURL.extractExtension(url))||null;}
static fromName(name){for(const resourceTypeId in resourceTypes){const resourceType=resourceTypes[resourceTypeId];if(resourceType.name()===name){return resourceType;}}
return null;}
static mimeFromURL(url){const name=ParsedURL.extractName(url);if(ResourceType._mimeTypeByName.has(name)){return ResourceType._mimeTypeByName.get(name);}
const ext=ParsedURL.extractExtension(url).toLowerCase();return ResourceType._mimeTypeByExtension.get(ext);}
static mimeFromExtension(ext){return ResourceType._mimeTypeByExtension.get(ext);}
name(){return this._name;}
title(){return this._title;}
category(){return this._category;}
isTextType(){return this._isTextType;}
isScript(){return this._name==='script'||this._name==='sm-script';}
hasScripts(){return this.isScript()||this.isDocument();}
isStyleSheet(){return this._name==='stylesheet'||this._name==='sm-stylesheet';}
isDocument(){return this._name==='document';}
isDocumentOrScriptOrStyleSheet(){return this.isDocument()||this.isScript()||this.isStyleSheet();}
isFromSourceMap(){return this._name.startsWith('sm-');}
toString(){return this._name;}
canonicalMimeType(){if(this.isDocument()){return'text/html';}
if(this.isScript()){return'text/javascript';}
if(this.isStyleSheet()){return'text/css';}
return'';}}
class ResourceCategory{constructor(title,shortTitle){this.title=title;this.shortTitle=shortTitle;}}
const resourceCategories={XHR:new ResourceCategory(ls$1`XHR and Fetch`,ls$1`XHR`),Script:new ResourceCategory(ls$1`Scripts`,ls$1`JS`),Stylesheet:new ResourceCategory(ls$1`Stylesheets`,ls$1`CSS`),Image:new ResourceCategory(ls$1`Images`,ls$1`Img`),Media:new ResourceCategory(ls$1`Media`,ls$1`Media`),Font:new ResourceCategory(ls$1`Fonts`,ls$1`Font`),Document:new ResourceCategory(ls$1`Documents`,ls$1`Doc`),WebSocket:new ResourceCategory(ls$1`WebSockets`,ls$1`WS`),Manifest:new ResourceCategory(ls$1`Manifest`,ls$1`Manifest`),Other:new ResourceCategory(ls$1`Other`,ls$1`Other`)};const resourceTypes={XHR:new ResourceType('xhr',ls$1`XHR`,resourceCategories.XHR,true),Fetch:new ResourceType('fetch',ls$1`Fetch`,resourceCategories.XHR,true),EventSource:new ResourceType('eventsource',ls$1`EventSource`,resourceCategories.XHR,true),Script:new ResourceType('script',ls$1`Script`,resourceCategories.Script,true),Stylesheet:new ResourceType('stylesheet',ls$1`Stylesheet`,resourceCategories.Stylesheet,true),Image:new ResourceType('image',ls$1`Image`,resourceCategories.Image,false),Media:new ResourceType('media',ls$1`Media`,resourceCategories.Media,false),Font:new ResourceType('font',ls$1`Font`,resourceCategories.Font,false),Document:new ResourceType('document',ls$1`Document`,resourceCategories.Document,true),TextTrack:new ResourceType('texttrack',ls$1`TextTrack`,resourceCategories.Other,true),WebSocket:new ResourceType('websocket',ls$1`WebSocket`,resourceCategories.WebSocket,false),Other:new ResourceType('other',ls$1`Other`,resourceCategories.Other,false),SourceMapScript:new ResourceType('sm-script',ls$1`Script`,resourceCategories.Script,true),SourceMapStyleSheet:new ResourceType('sm-stylesheet',ls$1`Stylesheet`,resourceCategories.Stylesheet,true),Manifest:new ResourceType('manifest',ls$1`Manifest`,resourceCategories.Manifest,true),SignedExchange:new ResourceType('signed-exchange',ls$1`SignedExchange`,resourceCategories.Other,false)};const _mimeTypeByName=new Map([['Cakefile','text/x-coffeescript']]);const _resourceTypeByExtension=new Map([['js',resourceTypes.Script],['mjs',resourceTypes.Script],['css',resourceTypes.Stylesheet],['xsl',resourceTypes.Stylesheet],['jpeg',resourceTypes.Image],['jpg',resourceTypes.Image],['svg',resourceTypes.Image],['gif',resourceTypes.Image],['png',resourceTypes.Image],['ico',resourceTypes.Image],['tiff',resourceTypes.Image],['tif',resourceTypes.Image],['bmp',resourceTypes.Image],['webp',resourceTypes.Media],['ttf',resourceTypes.Font],['otf',resourceTypes.Font],['ttc',resourceTypes.Font],['woff',resourceTypes.Font]]);const _mimeTypeByExtension=new Map([['js','text/javascript'],['mjs','text/javascript'],['css','text/css'],['html','text/html'],['htm','text/html'],['xml','application/xml'],['xsl','application/xml'],['asp','application/x-aspx'],['aspx','application/x-aspx'],['jsp','application/x-jsp'],['c','text/x-c++src'],['cc','text/x-c++src'],['cpp','text/x-c++src'],['h','text/x-c++src'],['m','text/x-c++src'],['mm','text/x-c++src'],['coffee','text/x-coffeescript'],['dart','text/javascript'],['ts','text/typescript'],['tsx','text/typescript-jsx'],['json','application/json'],['gyp','application/json'],['gypi','application/json'],['cs','text/x-csharp'],['java','text/x-java'],['less','text/x-less'],['php','text/x-php'],['phtml','application/x-httpd-php'],['py','text/x-python'],['sh','text/x-sh'],['scss','text/x-scss'],['vtt','text/vtt'],['ls','text/x-livescript'],['md','text/markdown'],['cljs','text/x-clojure'],['cljc','text/x-clojure'],['cljx','text/x-clojure'],['styl','text/x-styl'],['jsx','text/jsx'],['jpeg','image/jpeg'],['jpg','image/jpeg'],['svg','image/svg+xml'],['gif','image/gif'],['webp','image/webp'],['png','image/png'],['ico','image/ico'],['tiff','image/tiff'],['tif','image/tif'],['bmp','image/bmp'],['ttf','font/opentype'],['otf','font/opentype'],['ttc','font/opentype'],['woff','application/font-woff']]);self.Common=self.Common||{};Common=Common||{};Common.resourceTypes=resourceTypes;Common.resourceCategories=resourceCategories;Common.ResourceCategory=ResourceCategory;Common.ResourceType=ResourceType;Common.ResourceType._mimeTypeByName=_mimeTypeByName;Common.ResourceType._resourceTypeByExtension=_resourceTypeByExtension;Common.ResourceType._mimeTypeByExtension=_mimeTypeByExtension;class ContentProvider{contentURL(){}
contentType(){}
contentEncoded(){}
requestContent(){}
searchInContent(query,caseSensitive,isRegex){}}
class SearchMatch{constructor(lineNumber,lineContent){this.lineNumber=lineNumber;this.lineContent=lineContent;}}
const performSearchInContent=function(content,query,caseSensitive,isRegex){const regex=createSearchRegex(query,caseSensitive,isRegex);const text=new TextUtils.Text(content);const result=[];for(let i=0;i<text.lineCount();++i){const lineContent=text.lineAt(i);regex.lastIndex=0;if(regex.exec(lineContent)){result.push(new SearchMatch(i,lineContent));}}
return result;};const contentAsDataURL=function(content,mimeType,contentEncoded,charset){const maxDataUrlSize=1024*1024;if(content===null||content.length>maxDataUrlSize){return null;}
return'data:'+mimeType+(charset?';charset='+charset:'')+(contentEncoded?';base64':'')+','+
content;};self.Common=self.Common||{};Common=Common||{};Common.ContentProvider=ContentProvider;Common.ContentProvider.SearchMatch=SearchMatch;Common.ContentProvider.performSearchInContent=performSearchInContent;Common.ContentProvider.contentAsDataURL=contentAsDataURL;Common.DeferredContent;class JavaScriptMetaData{signaturesForNativeFunction(name){}
signaturesForInstanceMethod(name,receiverClassName){}
signaturesForStaticMethod(name,receiverConstructorName){}}
self.Common=self.Common||{};Common=Common||{};Common.JavaScriptMetadata=JavaScriptMetaData;class Linkifier{linkify(object,options){}
static linkify(object,options){if(!object){return Promise.reject(new Error('Can\'t linkify '+object));}
return self.runtime.extension(Linkifier,object).instance().then(linkifier=>linkifier.linkify(object,options));}}
self.Common=self.Common||{};Common=Common||{};Common.Linkifier=Linkifier;Common.Linkifier.Options;class Progress{setTotalWork(totalWork){}
setTitle(title){}
setWorked(worked,title){}
worked(worked){}
done(){}
isCanceled(){return false;}}
class CompositeProgress{constructor(parent){this._parent=parent;this._children=[];this._childrenDone=0;this._parent.setTotalWork(1);this._parent.setWorked(0);}
_childDone(){if(++this._childrenDone!==this._children.length){return;}
this._parent.done();}
createSubProgress(weight){const child=new SubProgress(this,weight);this._children.push(child);return child;}
_update(){let totalWeights=0;let done=0;for(let i=0;i<this._children.length;++i){const child=this._children[i];if(child._totalWork){done+=child._weight*child._worked/child._totalWork;}
totalWeights+=child._weight;}
this._parent.setWorked(done/totalWeights);}}
class SubProgress{constructor(composite,weight){this._composite=composite;this._weight=weight||1;this._worked=0;}
isCanceled(){return this._composite._parent.isCanceled();}
setTitle(title){this._composite._parent.setTitle(title);}
done(){this.setWorked(this._totalWork);this._composite._childDone();}
setTotalWork(totalWork){this._totalWork=totalWork;this._composite._update();}
setWorked(worked,title){this._worked=worked;if(typeof title!=='undefined'){this.setTitle(title);}
this._composite._update();}
worked(worked){this.setWorked(this._worked+(worked||1));}}
class ProgressProxy{constructor(delegate,doneCallback){this._delegate=delegate;this._doneCallback=doneCallback;}
isCanceled(){return this._delegate?this._delegate.isCanceled():false;}
setTitle(title){if(this._delegate){this._delegate.setTitle(title);}}
done(){if(this._delegate){this._delegate.done();}
if(this._doneCallback){this._doneCallback();}}
setTotalWork(totalWork){if(this._delegate){this._delegate.setTotalWork(totalWork);}}
setWorked(worked,title){if(this._delegate){this._delegate.setWorked(worked,title);}}
worked(worked){if(this._delegate){this._delegate.worked(worked);}}}
self.Common=self.Common||{};Common=Common||{};Common.Progress=Progress;Common.CompositeProgress=CompositeProgress;Common.SubProgress=SubProgress;Common.ProgressProxy=ProgressProxy;class QueryParamHandler{handleQueryParam(value){}}
self.Common=self.Common||{};Common=Common||{};Common.QueryParamHandler=QueryParamHandler;class Revealer{reveal(object,omitFocus){}}
const reveal=function(revealable,omitFocus){if(!revealable){return Promise.reject(new Error('Can\'t reveal '+revealable));}
return self.runtime.allInstances(Revealer,revealable).then(reveal);function reveal(revealers){const promises=[];for(let i=0;i<revealers.length;++i){promises.push(revealers[i].reveal((revealable),omitFocus));}
return Promise.race(promises);}};const revealDestination=function(revealable){const extension=self.runtime.extension(Revealer,revealable);if(!extension){return null;}
return extension.descriptor()['destination'];};self.Common=self.Common||{};Common=Common||{};Common.Revealer=Revealer;Common.Revealer.reveal=reveal;Common.Revealer.revealDestination=revealDestination;class Runnable{run(){}}
self.Common=self.Common||{};Common=Common||{};Common.Runnable=Runnable;class Segment{constructor(begin,end,data){if(begin>end){throw new Error('Invalid segment');}
this.begin=begin;this.end=end;this.data=data;}
intersects(that){return this.begin<that.end&&that.begin<this.end;}}
class SegmentedRange{constructor(mergeCallback){this._segments=[];this._mergeCallback=mergeCallback;}
append(newSegment){let startIndex=this._segments.lowerBound(newSegment,(a,b)=>a.begin-b.begin);let endIndex=startIndex;let merged=null;if(startIndex>0){const precedingSegment=this._segments[startIndex-1];merged=this._tryMerge(precedingSegment,newSegment);if(merged){--startIndex;newSegment=merged;}else if(this._segments[startIndex-1].end>=newSegment.begin){if(newSegment.end<precedingSegment.end){this._segments.splice(startIndex,0,new Segment(newSegment.end,precedingSegment.end,precedingSegment.data));}
precedingSegment.end=newSegment.begin;}}
while(endIndex<this._segments.length&&this._segments[endIndex].end<=newSegment.end){++endIndex;}
if(endIndex<this._segments.length){merged=this._tryMerge(newSegment,this._segments[endIndex]);if(merged){endIndex++;newSegment=merged;}else if(newSegment.intersects(this._segments[endIndex])){this._segments[endIndex].begin=newSegment.end;}}
this._segments.splice(startIndex,endIndex-startIndex,newSegment);}
appendRange(that){that.segments().forEach(segment=>this.append(segment));}
segments(){return this._segments;}
_tryMerge(first,second){const merged=this._mergeCallback&&this._mergeCallback(first,second);if(!merged){return null;}
merged.begin=first.begin;merged.end=Math.max(first.end,second.end);return merged;}}
self.Common=self.Common||{};Common=Common||{};Common.Segment=Segment;Common.SegmentedRange=SegmentedRange;class Settings{constructor(globalStorage,localStorage){this._globalStorage=globalStorage;this._localStorage=localStorage;this._sessionStorage=new SettingsStorage({});this._eventSupport=new ObjectWrapper();this._registry=new Map();this._moduleSettings=new Map();self.runtime.extensions('setting').forEach(this._registerModuleSetting.bind(this));}
_registerModuleSetting(extension){const descriptor=extension.descriptor();const settingName=descriptor['settingName'];const isRegex=descriptor['settingType']==='regex';const defaultValue=descriptor['defaultValue'];let storageType;switch(descriptor['storageType']){case('local'):storageType=SettingStorageType.Local;break;case('session'):storageType=SettingStorageType.Session;break;case('global'):storageType=SettingStorageType.Global;break;default:storageType=SettingStorageType.Global;}
const setting=isRegex?this.createRegExpSetting(settingName,defaultValue,undefined,storageType):this.createSetting(settingName,defaultValue,storageType);if(extension.title()){setting.setTitle(extension.title());}
if(descriptor['userActionCondition']){setting.setRequiresUserAction(!!Root.Runtime.queryParam(descriptor['userActionCondition']));}
setting._extension=extension;this._moduleSettings.set(settingName,setting);}
moduleSetting(settingName){const setting=this._moduleSettings.get(settingName);if(!setting){throw new Error('No setting registered: '+settingName);}
return setting;}
settingForTest(settingName){const setting=this._registry.get(settingName);if(!setting){throw new Error('No setting registered: '+settingName);}
return setting;}
createSetting(key,defaultValue,storageType){const storage=this._storageFromType(storageType);if(!this._registry.get(key)){this._registry.set(key,new Setting(this,key,defaultValue,this._eventSupport,storage));}
return(this._registry.get(key));}
createLocalSetting(key,defaultValue){return this.createSetting(key,defaultValue,SettingStorageType.Local);}
createRegExpSetting(key,defaultValue,regexFlags,storageType){if(!this._registry.get(key)){this._registry.set(key,new RegExpSetting(this,key,defaultValue,this._eventSupport,this._storageFromType(storageType),regexFlags));}
return(this._registry.get(key));}
clearAll(){this._globalStorage.removeAll();this._localStorage.removeAll();const versionSetting=Common.settings.createSetting(VersionController._currentVersionName,0);versionSetting.set(VersionController.currentVersion);}
_storageFromType(storageType){switch(storageType){case(SettingStorageType.Local):return this._localStorage;case(SettingStorageType.Session):return this._sessionStorage;case(SettingStorageType.Global):return this._globalStorage;}
return this._globalStorage;}}
class SettingsStorage{constructor(object,setCallback,removeCallback,removeAllCallback,storagePrefix){this._object=object;this._setCallback=setCallback||function(){};this._removeCallback=removeCallback||function(){};this._removeAllCallback=removeAllCallback||function(){};this._storagePrefix=storagePrefix||'';}
set(name,value){name=this._storagePrefix+name;this._object[name]=value;this._setCallback(name,value);}
has(name){name=this._storagePrefix+name;return name in this._object;}
get(name){name=this._storagePrefix+name;return this._object[name];}
remove(name){name=this._storagePrefix+name;delete this._object[name];this._removeCallback(name);}
removeAll(){this._object={};this._removeAllCallback();}
_dumpSizes(){Common.console.log('Ten largest settings: ');const sizes={__proto__:null};for(const key in this._object){sizes[key]=this._object[key].length;}
const keys=Object.keys(sizes);function comparator(key1,key2){return sizes[key2]-sizes[key1];}
keys.sort(comparator);for(let i=0;i<10&&i<keys.length;++i){Common.console.log('Setting: \''+keys[i]+'\', size: '+sizes[keys[i]]);}}}
class Setting{constructor(settings,name,defaultValue,eventSupport,storage){this._settings=settings;this._name=name;this._defaultValue=defaultValue;this._eventSupport=eventSupport;this._storage=storage;this._title='';this._extension=null;}
addChangeListener(listener,thisObject){return this._eventSupport.addEventListener(this._name,listener,thisObject);}
removeChangeListener(listener,thisObject){this._eventSupport.removeEventListener(this._name,listener,thisObject);}
get name(){return this._name;}
title(){return this._title;}
setTitle(title){this._title=title;}
setRequiresUserAction(requiresUserAction){this._requiresUserAction=requiresUserAction;}
get(){if(this._requiresUserAction&&!this._hadUserAction){return this._defaultValue;}
if(typeof this._value!=='undefined'){return this._value;}
this._value=this._defaultValue;if(this._storage.has(this._name)){try{this._value=JSON.parse(this._storage.get(this._name));}catch(e){this._storage.remove(this._name);}}
return this._value;}
set(value){this._hadUserAction=true;this._value=value;try{const settingString=JSON.stringify(value);try{this._storage.set(this._name,settingString);}catch(e){this._printSettingsSavingError(e.message,this._name,settingString);}}catch(e){Common.console.error('Cannot stringify setting with name: '+this._name+', error: '+e.message);}
this._eventSupport.dispatchEventToListeners(this._name,value);}
remove(){this._settings._registry.delete(this._name);this._settings._moduleSettings.delete(this._name);this._storage.remove(this._name);}
extension(){return this._extension;}
_printSettingsSavingError(message,name,value){const errorMessage='Error saving setting with name: '+this._name+', value length: '+value.length+'. Error: '+message;console.error(errorMessage);Common.console.error(errorMessage);this._storage._dumpSizes();}}
class RegExpSetting extends Setting{constructor(settings,name,defaultValue,eventSupport,storage,regexFlags){super(settings,name,defaultValue?[{pattern:defaultValue}]:[],eventSupport,storage);this._regexFlags=regexFlags;}
get(){const result=[];const items=this.getAsArray();for(let i=0;i<items.length;++i){const item=items[i];if(item.pattern&&!item.disabled){result.push(item.pattern);}}
return result.join('|');}
getAsArray(){return super.get();}
set(value){this.setAsArray([{pattern:value}]);}
setAsArray(value){delete this._regex;super.set(value);}
asRegExp(){if(typeof this._regex!=='undefined'){return this._regex;}
this._regex=null;try{const pattern=this.get();if(pattern){this._regex=new RegExp(pattern,this._regexFlags||'');}}catch(e){}
return this._regex;}}
class VersionController{static get _currentVersionName(){return'inspectorVersion';}
static get currentVersion(){return 28;}
updateVersion(){const localStorageVersion=window.localStorage?window.localStorage[VersionController._currentVersionName]:0;const versionSetting=Common.settings.createSetting(VersionController._currentVersionName,0);const currentVersion=VersionController.currentVersion;const oldVersion=versionSetting.get()||parseInt(localStorageVersion||'0',10);if(oldVersion===0){versionSetting.set(currentVersion);return;}
const methodsToRun=this._methodsToRunToUpdateVersion(oldVersion,currentVersion);for(let i=0;i<methodsToRun.length;++i){this[methodsToRun[i]].call(this);}
versionSetting.set(currentVersion);}
_methodsToRunToUpdateVersion(oldVersion,currentVersion){const result=[];for(let i=oldVersion;i<currentVersion;++i){result.push('_updateVersionFrom'+i+'To'+(i+1));}
return result;}
_updateVersionFrom0To1(){this._clearBreakpointsWhenTooMany(Common.settings.createLocalSetting('breakpoints',[]),500000);}
_updateVersionFrom1To2(){Common.settings.createSetting('previouslyViewedFiles',[]).set([]);}
_updateVersionFrom2To3(){Common.settings.createSetting('fileSystemMapping',{}).set({});Common.settings.createSetting('fileMappingEntries',[]).remove();}
_updateVersionFrom3To4(){const advancedMode=Common.settings.createSetting('showHeaSnapshotObjectsHiddenProperties',false);Common.moduleSetting('showAdvancedHeapSnapshotProperties').set(advancedMode.get());advancedMode.remove();}
_updateVersionFrom4To5(){const settingNames={'FileSystemViewSidebarWidth':'fileSystemViewSplitViewState','elementsSidebarWidth':'elementsPanelSplitViewState','StylesPaneSplitRatio':'stylesPaneSplitViewState','heapSnapshotRetainersViewSize':'heapSnapshotSplitViewState','InspectorView.splitView':'InspectorView.splitViewState','InspectorView.screencastSplitView':'InspectorView.screencastSplitViewState','Inspector.drawerSplitView':'Inspector.drawerSplitViewState','layerDetailsSplitView':'layerDetailsSplitViewState','networkSidebarWidth':'networkPanelSplitViewState','sourcesSidebarWidth':'sourcesPanelSplitViewState','scriptsPanelNavigatorSidebarWidth':'sourcesPanelNavigatorSplitViewState','sourcesPanelSplitSidebarRatio':'sourcesPanelDebuggerSidebarSplitViewState','timeline-details':'timelinePanelDetailsSplitViewState','timeline-split':'timelinePanelRecorsSplitViewState','timeline-view':'timelinePanelTimelineStackSplitViewState','auditsSidebarWidth':'auditsPanelSplitViewState','layersSidebarWidth':'layersPanelSplitViewState','profilesSidebarWidth':'profilesPanelSplitViewState','resourcesSidebarWidth':'resourcesPanelSplitViewState'};const empty={};for(const oldName in settingNames){const newName=settingNames[oldName];const oldNameH=oldName+'H';let newValue=null;const oldSetting=Common.settings.createSetting(oldName,empty);if(oldSetting.get()!==empty){newValue=newValue||{};newValue.vertical={};newValue.vertical.size=oldSetting.get();oldSetting.remove();}
const oldSettingH=Common.settings.createSetting(oldNameH,empty);if(oldSettingH.get()!==empty){newValue=newValue||{};newValue.horizontal={};newValue.horizontal.size=oldSettingH.get();oldSettingH.remove();}
if(newValue){Common.settings.createSetting(newName,{}).set(newValue);}}}
_updateVersionFrom5To6(){const settingNames={'debuggerSidebarHidden':'sourcesPanelSplitViewState','navigatorHidden':'sourcesPanelNavigatorSplitViewState','WebInspector.Drawer.showOnLoad':'Inspector.drawerSplitViewState'};for(const oldName in settingNames){const oldSetting=Common.settings.createSetting(oldName,null);if(oldSetting.get()===null){oldSetting.remove();continue;}
const newName=settingNames[oldName];const invert=oldName==='WebInspector.Drawer.showOnLoad';const hidden=oldSetting.get()!==invert;oldSetting.remove();const showMode=hidden?'OnlyMain':'Both';const newSetting=Common.settings.createSetting(newName,{});const newValue=newSetting.get()||{};newValue.vertical=newValue.vertical||{};newValue.vertical.showMode=showMode;newValue.horizontal=newValue.horizontal||{};newValue.horizontal.showMode=showMode;newSetting.set(newValue);}}
_updateVersionFrom6To7(){const settingNames={'sourcesPanelNavigatorSplitViewState':'sourcesPanelNavigatorSplitViewState','elementsPanelSplitViewState':'elementsPanelSplitViewState','stylesPaneSplitViewState':'stylesPaneSplitViewState','sourcesPanelDebuggerSidebarSplitViewState':'sourcesPanelDebuggerSidebarSplitViewState'};const empty={};for(const name in settingNames){const setting=Common.settings.createSetting(name,empty);const value=setting.get();if(value===empty){continue;}
if(value.vertical&&value.vertical.size&&value.vertical.size<1){value.vertical.size=0;}
if(value.horizontal&&value.horizontal.size&&value.horizontal.size<1){value.horizontal.size=0;}
setting.set(value);}}
_updateVersionFrom7To8(){}
_updateVersionFrom8To9(){const settingNames=['skipStackFramesPattern','workspaceFolderExcludePattern'];for(let i=0;i<settingNames.length;++i){const setting=Common.settings.createSetting(settingNames[i],'');let value=setting.get();if(!value){return;}
if(typeof value==='string'){value=[value];}
for(let j=0;j<value.length;++j){if(typeof value[j]==='string'){value[j]={pattern:value[j]};}}
setting.set(value);}}
_updateVersionFrom9To10(){if(!window.localStorage){return;}
for(const key in window.localStorage){if(key.startsWith('revision-history')){window.localStorage.removeItem(key);}}}
_updateVersionFrom10To11(){const oldSettingName='customDevicePresets';const newSettingName='customEmulatedDeviceList';const oldSetting=Common.settings.createSetting(oldSettingName,undefined);const list=oldSetting.get();if(!Array.isArray(list)){return;}
const newList=[];for(let i=0;i<list.length;++i){const value=list[i];const device={};device['title']=value['title'];device['type']='unknown';device['user-agent']=value['userAgent'];device['capabilities']=[];if(value['touch']){device['capabilities'].push('touch');}
if(value['mobile']){device['capabilities'].push('mobile');}
device['screen']={};device['screen']['vertical']={width:value['width'],height:value['height']};device['screen']['horizontal']={width:value['height'],height:value['width']};device['screen']['device-pixel-ratio']=value['deviceScaleFactor'];device['modes']=[];device['show-by-default']=true;device['show']='Default';newList.push(device);}
if(newList.length){Common.settings.createSetting(newSettingName,[]).set(newList);}
oldSetting.remove();}
_updateVersionFrom11To12(){this._migrateSettingsFromLocalStorage();}
_updateVersionFrom12To13(){this._migrateSettingsFromLocalStorage();Common.settings.createSetting('timelineOverviewMode','').remove();}
_updateVersionFrom13To14(){const defaultValue={'throughput':-1,'latency':0};Common.settings.createSetting('networkConditions',defaultValue).set(defaultValue);}
_updateVersionFrom14To15(){const setting=Common.settings.createLocalSetting('workspaceExcludedFolders',{});const oldValue=setting.get();const newValue={};for(const fileSystemPath in oldValue){newValue[fileSystemPath]=[];for(const entry of oldValue[fileSystemPath]){newValue[fileSystemPath].push(entry.path);}}
setting.set(newValue);}
_updateVersionFrom15To16(){const setting=Common.settings.createSetting('InspectorView.panelOrder',{});const tabOrders=setting.get();for(const key of Object.keys(tabOrders)){tabOrders[key]=(tabOrders[key]+1)*10;}
setting.set(tabOrders);}
_updateVersionFrom16To17(){const setting=Common.settings.createSetting('networkConditionsCustomProfiles',[]);const oldValue=setting.get();const newValue=[];if(Array.isArray(oldValue)){for(const preset of oldValue){if(typeof preset.title==='string'&&typeof preset.value==='object'&&typeof preset.value.throughput==='number'&&typeof preset.value.latency==='number'){newValue.push({title:preset.title,value:{download:preset.value.throughput,upload:preset.value.throughput,latency:preset.value.latency}});}}}
setting.set(newValue);}
_updateVersionFrom17To18(){const setting=Common.settings.createLocalSetting('workspaceExcludedFolders',{});const oldValue=setting.get();const newValue={};for(const oldKey in oldValue){let newKey=oldKey.replace(/\\/g,'/');if(!newKey.startsWith('file://')){if(newKey.startsWith('/')){newKey='file://'+newKey;}else{newKey='file:///'+newKey;}}
newValue[newKey]=oldValue[oldKey];}
setting.set(newValue);}
_updateVersionFrom18To19(){const defaultColumns={status:true,type:true,initiator:true,size:true,time:true};const visibleColumnSettings=Common.settings.createSetting('networkLogColumnsVisibility',defaultColumns);const visibleColumns=visibleColumnSettings.get();visibleColumns.name=true;visibleColumns.timeline=true;const configs={};for(const columnId in visibleColumns){if(!visibleColumns.hasOwnProperty(columnId)){continue;}
configs[columnId.toLowerCase()]={visible:visibleColumns[columnId]};}
const newSetting=Common.settings.createSetting('networkLogColumns',{});newSetting.set(configs);visibleColumnSettings.remove();}
_updateVersionFrom19To20(){const oldSetting=Common.settings.createSetting('InspectorView.panelOrder',{});const newSetting=Common.settings.createSetting('panel-tabOrder',{});newSetting.set(oldSetting.get());oldSetting.remove();}
_updateVersionFrom20To21(){const networkColumns=Common.settings.createSetting('networkLogColumns',{});const columns=(networkColumns.get());delete columns['timeline'];delete columns['waterfall'];networkColumns.set(columns);}
_updateVersionFrom21To22(){const breakpointsSetting=Common.settings.createLocalSetting('breakpoints',[]);const breakpoints=breakpointsSetting.get();for(const breakpoint of breakpoints){breakpoint['url']=breakpoint['sourceFileId'];delete breakpoint['sourceFileId'];}
breakpointsSetting.set(breakpoints);}
_updateVersionFrom22To23(){}
_updateVersionFrom23To24(){const oldSetting=Common.settings.createSetting('searchInContentScripts',false);const newSetting=Common.settings.createSetting('searchInAnonymousAndContentScripts',false);newSetting.set(oldSetting.get());oldSetting.remove();}
_updateVersionFrom24To25(){const defaultColumns={status:true,type:true,initiator:true,size:true,time:true};const networkLogColumnsSetting=Common.settings.createSetting('networkLogColumns',defaultColumns);const columns=networkLogColumnsSetting.get();delete columns.product;networkLogColumnsSetting.set(columns);}
_updateVersionFrom25To26(){const oldSetting=Common.settings.createSetting('messageURLFilters',{});const urls=Object.keys(oldSetting.get());const textFilter=urls.map(url=>`-url:${url}`).join(' ');if(textFilter){const textFilterSetting=Common.settings.createSetting('console.textFilter','');const suffix=textFilterSetting.get()?` ${textFilterSetting.get()}`:'';textFilterSetting.set(`${textFilter}${suffix}`);}
oldSetting.remove();}
_updateVersionFrom26To27(){function renameKeyInObjectSetting(settingName,from,to){const setting=Common.settings.createSetting(settingName,{});const value=setting.get();if(from in value){value[to]=value[from];delete value[from];setting.set(value);}}
function renameInStringSetting(settingName,from,to){const setting=Common.settings.createSetting(settingName,'');const value=setting.get();if(value===from){setting.set(to);}}
renameKeyInObjectSetting('panel-tabOrder','audits2','audits');renameKeyInObjectSetting('panel-closeableTabs','audits2','audits');renameInStringSetting('panel-selectedTab','audits2','audits');}
_updateVersionFrom27To28(){const setting=Common.settings.createSetting('uiTheme','systemPreferred');if(setting.get()==='default'){setting.set('systemPreferred');}}
_migrateSettingsFromLocalStorage(){const localSettings=new Set(['advancedSearchConfig','breakpoints','consoleHistory','domBreakpoints','eventListenerBreakpoints','fileSystemMapping','lastSelectedSourcesSidebarPaneTab','previouslyViewedFiles','savedURLs','watchExpressions','workspaceExcludedFolders','xhrBreakpoints']);if(!window.localStorage){return;}
for(const key in window.localStorage){if(localSettings.has(key)){continue;}
const value=window.localStorage[key];window.localStorage.removeItem(key);Common.settings._globalStorage[key]=value;}}
_clearBreakpointsWhenTooMany(breakpointsSetting,maxBreakpointsCount){if(breakpointsSetting.get().length>maxBreakpointsCount){breakpointsSetting.set([]);}}}
const SettingStorageType={Global:Symbol('Global'),Local:Symbol('Local'),Session:Symbol('Session')};function moduleSetting(settingName){return Common.settings.moduleSetting(settingName);}
function settingForTest(settingName){return Common.settings.settingForTest(settingName);}
self.Common=self.Common||{};Common=Common||{};Common.Settings=Settings;Common.SettingsStorage=SettingsStorage;Common.Setting=Setting;Common.RegExpSetting=RegExpSetting;Common.settingForTest=settingForTest;Common.VersionController=VersionController;Common.moduleSetting=moduleSetting;Common.SettingStorageType=SettingStorageType;Common.settings;class StaticContentProvider{constructor(contentURL,contentType,lazyContent){this._contentURL=contentURL;this._contentType=contentType;this._lazyContent=lazyContent;}
static fromString(contentURL,contentType,content){const lazyContent=()=>Promise.resolve({content,isEncoded:false});return new StaticContentProvider(contentURL,contentType,lazyContent);}
contentURL(){return this._contentURL;}
contentType(){return this._contentType;}
contentEncoded(){return Promise.resolve(false);}
requestContent(){return this._lazyContent();}
async searchInContent(query,caseSensitive,isRegex){const{content}=(await this._lazyContent());return content?ContentProvider.performSearchInContent(content,query,caseSensitive,isRegex):[];}}
self.Common=self.Common||{};Common=Common||{};Common.StaticContentProvider=StaticContentProvider;class OutputStream{async write(data){}
async close(){}}
class StringOutputStream{constructor(){this._data='';}
async write(chunk){this._data+=chunk;}
async close(){}
data(){return this._data;}}
self.Common=self.Common||{};Common=Common||{};Common.OutputStream=OutputStream;Common.StringOutputStream=StringOutputStream;class Trie{constructor(){this.clear();}
add(word){let node=this._root;++this._wordsInSubtree[this._root];for(let i=0;i<word.length;++i){const edge=word[i];let next=this._edges[node][edge];if(!next){if(this._freeNodes.length){next=this._freeNodes.pop();}else{next=this._size++;this._isWord.push(false);this._wordsInSubtree.push(0);this._edges.push({__proto__:null});}
this._edges[node][edge]=next;}
++this._wordsInSubtree[next];node=next;}
this._isWord[node]=true;}
remove(word){if(!this.has(word)){return false;}
let node=this._root;--this._wordsInSubtree[this._root];for(let i=0;i<word.length;++i){const edge=word[i];const next=this._edges[node][edge];if(!--this._wordsInSubtree[next]){delete this._edges[node][edge];this._freeNodes.push(next);}
node=next;}
this._isWord[node]=false;return true;}
has(word){let node=this._root;for(let i=0;i<word.length;++i){node=this._edges[node][word[i]];if(!node){return false;}}
return this._isWord[node];}
words(prefix){prefix=prefix||'';let node=this._root;for(let i=0;i<prefix.length;++i){node=this._edges[node][prefix[i]];if(!node){return[];}}
const results=[];this._dfs(node,prefix,results);return results;}
_dfs(node,prefix,results){if(this._isWord[node]){results.push(prefix);}
const edges=this._edges[node];for(const edge in edges){this._dfs(edges[edge],prefix+edge,results);}}
longestPrefix(word,fullWordOnly){let node=this._root;let wordIndex=0;for(let i=0;i<word.length;++i){node=this._edges[node][word[i]];if(!node){break;}
if(!fullWordOnly||this._isWord[node]){wordIndex=i+1;}}
return word.substring(0,wordIndex);}
clear(){this._size=1;this._root=0;this._edges=[{__proto__:null}];this._isWord=[false];this._wordsInSubtree=[0];this._freeNodes=[];}}
self.Common=self.Common||{};Common=Common||{};Common.Trie=Trie;class TextDictionary{constructor(){this._words=new Map();this._index=new Trie();}
addWord(word){let count=this._words.get(word)||0;++count;this._words.set(word,count);this._index.add(word);}
removeWord(word){let count=this._words.get(word)||0;if(!count){return;}
if(count===1){this._words.delete(word);this._index.remove(word);return;}
--count;this._words.set(word,count);}
wordsWithPrefix(prefix){return this._index.words(prefix);}
hasWord(word){return this._words.has(word);}
wordCount(word){return this._words.get(word)||0;}
reset(){this._words.clear();this._index.clear();}}
self.Common=self.Common||{};Common=Common||{};Common.TextDictionary=TextDictionary;class Throttler{constructor(timeout){this._timeout=timeout;this._isRunningProcess=false;this._asSoonAsPossible=false;this._process=null;this._lastCompleteTime=0;this._schedulePromise=new Promise(fulfill=>{this._scheduleResolve=fulfill;});}
_processCompleted(){this._lastCompleteTime=this._getTime();this._isRunningProcess=false;if(this._process){this._innerSchedule(false);}
this._processCompletedForTests();}
_processCompletedForTests(){}
_onTimeout(){delete this._processTimeout;this._asSoonAsPossible=false;this._isRunningProcess=true;Promise.resolve().then(this._process).catch(console.error.bind(console)).then(this._processCompleted.bind(this)).then(this._scheduleResolve);this._schedulePromise=new Promise(fulfill=>{this._scheduleResolve=fulfill;});this._process=null;}
schedule(process,asSoonAsPossible){this._process=process;const hasScheduledTasks=!!this._processTimeout||this._isRunningProcess;const okToFire=this._getTime()-this._lastCompleteTime>this._timeout;asSoonAsPossible=!!asSoonAsPossible||(!hasScheduledTasks&&okToFire);const forceTimerUpdate=asSoonAsPossible&&!this._asSoonAsPossible;this._asSoonAsPossible=this._asSoonAsPossible||asSoonAsPossible;this._innerSchedule(forceTimerUpdate);return this._schedulePromise;}
_innerSchedule(forceTimerUpdate){if(this._isRunningProcess){return;}
if(this._processTimeout&&!forceTimerUpdate){return;}
if(this._processTimeout){this._clearTimeout(this._processTimeout);}
const timeout=this._asSoonAsPossible?0:this._timeout;this._processTimeout=this._setTimeout(this._onTimeout.bind(this),timeout);}
_clearTimeout(timeoutId){clearTimeout(timeoutId);}
_setTimeout(operation,timeout){return setTimeout(operation,timeout);}
_getTime(){return window.performance.now();}}
self.Common=self.Common||{};Common=Common||{};Common.Throttler=Throttler;Common.Throttler.FinishCallback;class WorkerWrapper{constructor(appName){let url=appName+'.js';url+=Root.Runtime.queryParamsString();this._workerPromise=new Promise(fulfill=>{this._worker=new Worker(url);this._worker.onmessage=onMessage.bind(this);function onMessage(event){console.assert(event.data==='workerReady');this._worker.onmessage=null;fulfill(this._worker);this._worker=null;}});}
postMessage(message){this._workerPromise.then(worker=>{if(!this._disposed){worker.postMessage(message);}});}
dispose(){this._disposed=true;this._workerPromise.then(worker=>worker.terminate());}
terminate(){this.dispose();}
set onmessage(listener){this._workerPromise.then(worker=>worker.onmessage=listener);}
set onerror(listener){this._workerPromise.then(worker=>worker.onerror=listener);}}
self.Common=self.Common||{};Common=Common||{};Common.Worker=WorkerWrapper;const HeapSnapshotProgressEvent={Update:'ProgressUpdate',BrokenSnapshot:'BrokenSnapshot'};const baseSystemDistance=100000000;class AllocationNodeCallers{constructor(nodesWithSingleCaller,branchingCallers){this.nodesWithSingleCaller=nodesWithSingleCaller;this.branchingCallers=branchingCallers;}}
class SerializedAllocationNode{constructor(nodeId,functionName,scriptName,scriptId,line,column,count,size,liveCount,liveSize,hasChildren){this.id=nodeId;this.name=functionName;this.scriptName=scriptName;this.scriptId=scriptId;this.line=line;this.column=column;this.count=count;this.size=size;this.liveCount=liveCount;this.liveSize=liveSize;this.hasChildren=hasChildren;}}
class AllocationStackFrame{constructor(functionName,scriptName,scriptId,line,column){this.functionName=functionName;this.scriptName=scriptName;this.scriptId=scriptId;this.line=line;this.column=column;}}
class Node{constructor(id,name,distance,nodeIndex,retainedSize,selfSize,type){this.id=id;this.name=name;this.distance=distance;this.nodeIndex=nodeIndex;this.retainedSize=retainedSize;this.selfSize=selfSize;this.type=type;this.canBeQueried=false;this.detachedDOMTreeNode=false;}}
class Edge{constructor(name,node,type,edgeIndex){this.name=name;this.node=node;this.type=type;this.edgeIndex=edgeIndex;}}
class Aggregate{constructor(){this.count;this.distance;this.self;this.maxRet;this.type;this.name;this.idxs;}}
class AggregateForDiff{constructor(){this.indexes=[];this.ids=[];this.selfSizes=[];}}
class Diff{constructor(){this.addedCount=0;this.removedCount=0;this.addedSize=0;this.removedSize=0;this.deletedIndexes=[];this.addedIndexes=[];}}
class DiffForClass{constructor(){this.addedCount;this.removedCount;this.addedSize;this.removedSize;this.deletedIndexes;this.addedIndexes;this.countDelta;this.sizeDelta;}}
class ComparatorConfig{constructor(){this.fieldName1;this.ascending1;this.fieldName2;this.ascending2;}}
class WorkerCommand{constructor(){this.callId;this.disposition;this.objectId;this.newObjectId;this.methodName;this.methodArguments;this.source;}}
class ItemsRange{constructor(startPosition,endPosition,totalLength,items){this.startPosition=startPosition;this.endPosition=endPosition;this.totalLength=totalLength;this.items=items;}}
class StaticData{constructor(nodeCount,rootNodeIndex,totalSize,maxJSObjectId){this.nodeCount=nodeCount;this.rootNodeIndex=rootNodeIndex;this.totalSize=totalSize;this.maxJSObjectId=maxJSObjectId;}}
class Statistics{constructor(){this.total;this.v8heap;this.native;this.code;this.jsArrays;this.strings;this.system;}}
class NodeFilter{constructor(minNodeId,maxNodeId){this.minNodeId=minNodeId;this.maxNodeId=maxNodeId;this.allocationNodeId;}
equals(o){return this.minNodeId===o.minNodeId&&this.maxNodeId===o.maxNodeId&&this.allocationNodeId===o.allocationNodeId;}}
class SearchConfig{constructor(query,caseSensitive,isRegex,shouldJump,jumpBackward){this.query=query;this.caseSensitive=caseSensitive;this.isRegex=isRegex;this.shouldJump=shouldJump;this.jumpBackward=jumpBackward;}}
class Samples{constructor(timestamps,lastAssignedIds,sizes){this.timestamps=timestamps;this.lastAssignedIds=lastAssignedIds;this.sizes=sizes;}}
class Location{constructor(scriptId,lineNumber,columnNumber){this.scriptId=scriptId;this.lineNumber=lineNumber;this.columnNumber=columnNumber;}}
self.HeapSnapshotModel=self.HeapSnapshotModel||{};HeapSnapshotModel=HeapSnapshotModel||{};HeapSnapshotModel.HeapSnapshotProgressEvent=HeapSnapshotProgressEvent;HeapSnapshotModel.baseSystemDistance=baseSystemDistance;HeapSnapshotModel.AllocationNodeCallers=AllocationNodeCallers;HeapSnapshotModel.SerializedAllocationNode=SerializedAllocationNode;HeapSnapshotModel.AllocationStackFrame=AllocationStackFrame;HeapSnapshotModel.Node=Node;HeapSnapshotModel.Edge=Edge;HeapSnapshotModel.Aggregate=Aggregate;HeapSnapshotModel.AggregateForDiff=AggregateForDiff;HeapSnapshotModel.Diff=Diff;HeapSnapshotModel.DiffForClass=DiffForClass;HeapSnapshotModel.ComparatorConfig=ComparatorConfig;HeapSnapshotModel.WorkerCommand=WorkerCommand;HeapSnapshotModel.ItemsRange=ItemsRange;HeapSnapshotModel.StaticData=StaticData;HeapSnapshotModel.Statistics=Statistics;HeapSnapshotModel.NodeFilter=NodeFilter;HeapSnapshotModel.SearchConfig=SearchConfig;HeapSnapshotModel.Samples=Samples;HeapSnapshotModel.Location=Location;class AllocationProfile{constructor(profile,liveObjectStats){this._strings=profile.strings;this._liveObjectStats=liveObjectStats;this._nextNodeId=1;this._functionInfos=[];this._idToNode={};this._idToTopDownNode={};this._collapsedTopNodeIdToFunctionInfo={};this._traceTops=null;this._buildFunctionAllocationInfos(profile);this._traceTree=this._buildAllocationTree(profile,liveObjectStats);}
_buildFunctionAllocationInfos(profile){const strings=this._strings;const functionInfoFields=profile.snapshot.meta.trace_function_info_fields;const functionNameOffset=functionInfoFields.indexOf('name');const scriptNameOffset=functionInfoFields.indexOf('script_name');const scriptIdOffset=functionInfoFields.indexOf('script_id');const lineOffset=functionInfoFields.indexOf('line');const columnOffset=functionInfoFields.indexOf('column');const functionInfoFieldCount=functionInfoFields.length;const rawInfos=profile.trace_function_infos;const infoLength=rawInfos.length;const functionInfos=this._functionInfos=new Array(infoLength/functionInfoFieldCount);let index=0;for(let i=0;i<infoLength;i+=functionInfoFieldCount){functionInfos[index++]=new FunctionAllocationInfo(strings[rawInfos[i+functionNameOffset]],strings[rawInfos[i+scriptNameOffset]],rawInfos[i+scriptIdOffset],rawInfos[i+lineOffset],rawInfos[i+columnOffset]);}}
_buildAllocationTree(profile,liveObjectStats){const traceTreeRaw=profile.trace_tree;const functionInfos=this._functionInfos;const idToTopDownNode=this._idToTopDownNode;const traceNodeFields=profile.snapshot.meta.trace_node_fields;const nodeIdOffset=traceNodeFields.indexOf('id');const functionInfoIndexOffset=traceNodeFields.indexOf('function_info_index');const allocationCountOffset=traceNodeFields.indexOf('count');const allocationSizeOffset=traceNodeFields.indexOf('size');const childrenOffset=traceNodeFields.indexOf('children');const nodeFieldCount=traceNodeFields.length;function traverseNode(rawNodeArray,nodeOffset,parent){const functionInfo=functionInfos[rawNodeArray[nodeOffset+functionInfoIndexOffset]];const id=rawNodeArray[nodeOffset+nodeIdOffset];const stats=liveObjectStats[id];const liveCount=stats?stats.count:0;const liveSize=stats?stats.size:0;const result=new TopDownAllocationNode(id,functionInfo,rawNodeArray[nodeOffset+allocationCountOffset],rawNodeArray[nodeOffset+allocationSizeOffset],liveCount,liveSize,parent);idToTopDownNode[id]=result;functionInfo.addTraceTopNode(result);const rawChildren=rawNodeArray[nodeOffset+childrenOffset];for(let i=0;i<rawChildren.length;i+=nodeFieldCount){result.children.push(traverseNode(rawChildren,i,result));}
return result;}
return traverseNode(traceTreeRaw,0,null);}
serializeTraceTops(){if(this._traceTops){return this._traceTops;}
const result=this._traceTops=[];const functionInfos=this._functionInfos;for(let i=0;i<functionInfos.length;i++){const info=functionInfos[i];if(info.totalCount===0){continue;}
const nodeId=this._nextNodeId++;const isRoot=i===0;result.push(this._serializeNode(nodeId,info,info.totalCount,info.totalSize,info.totalLiveCount,info.totalLiveSize,!isRoot));this._collapsedTopNodeIdToFunctionInfo[nodeId]=info;}
result.sort(function(a,b){return b.size-a.size;});return result;}
serializeCallers(nodeId){let node=this._ensureBottomUpNode(nodeId);const nodesWithSingleCaller=[];while(node.callers().length===1){node=node.callers()[0];nodesWithSingleCaller.push(this._serializeCaller(node));}
const branchingCallers=[];const callers=node.callers();for(let i=0;i<callers.length;i++){branchingCallers.push(this._serializeCaller(callers[i]));}
return new HeapSnapshotModel.AllocationNodeCallers(nodesWithSingleCaller,branchingCallers);}
serializeAllocationStack(traceNodeId){let node=this._idToTopDownNode[traceNodeId];const result=[];while(node){const functionInfo=node.functionInfo;result.push(new HeapSnapshotModel.AllocationStackFrame(functionInfo.functionName,functionInfo.scriptName,functionInfo.scriptId,functionInfo.line,functionInfo.column));node=node.parent;}
return result;}
traceIds(allocationNodeId){return this._ensureBottomUpNode(allocationNodeId).traceTopIds;}
_ensureBottomUpNode(nodeId){let node=this._idToNode[nodeId];if(!node){const functionInfo=this._collapsedTopNodeIdToFunctionInfo[nodeId];node=functionInfo.bottomUpRoot();delete this._collapsedTopNodeIdToFunctionInfo[nodeId];this._idToNode[nodeId]=node;}
return node;}
_serializeCaller(node){const callerId=this._nextNodeId++;this._idToNode[callerId]=node;return this._serializeNode(callerId,node.functionInfo,node.allocationCount,node.allocationSize,node.liveCount,node.liveSize,node.hasCallers());}
_serializeNode(nodeId,functionInfo,count,size,liveCount,liveSize,hasChildren){return new HeapSnapshotModel.SerializedAllocationNode(nodeId,functionInfo.functionName,functionInfo.scriptName,functionInfo.scriptId,functionInfo.line,functionInfo.column,count,size,liveCount,liveSize,hasChildren);}}
class TopDownAllocationNode{constructor(id,functionInfo,count,size,liveCount,liveSize,parent){this.id=id;this.functionInfo=functionInfo;this.allocationCount=count;this.allocationSize=size;this.liveCount=liveCount;this.liveSize=liveSize;this.parent=parent;this.children=[];}}
class BottomUpAllocationNode{constructor(functionInfo){this.functionInfo=functionInfo;this.allocationCount=0;this.allocationSize=0;this.liveCount=0;this.liveSize=0;this.traceTopIds=[];this._callers=[];}
addCaller(traceNode){const functionInfo=traceNode.functionInfo;let result;for(let i=0;i<this._callers.length;i++){const caller=this._callers[i];if(caller.functionInfo===functionInfo){result=caller;break;}}
if(!result){result=new BottomUpAllocationNode(functionInfo);this._callers.push(result);}
return result;}
callers(){return this._callers;}
hasCallers(){return this._callers.length>0;}}
class FunctionAllocationInfo{constructor(functionName,scriptName,scriptId,line,column){this.functionName=functionName;this.scriptName=scriptName;this.scriptId=scriptId;this.line=line;this.column=column;this.totalCount=0;this.totalSize=0;this.totalLiveCount=0;this.totalLiveSize=0;this._traceTops=[];}
addTraceTopNode(node){if(node.allocationCount===0){return;}
this._traceTops.push(node);this.totalCount+=node.allocationCount;this.totalSize+=node.allocationSize;this.totalLiveCount+=node.liveCount;this.totalLiveSize+=node.liveSize;}
bottomUpRoot(){if(!this._traceTops.length){return null;}
if(!this._bottomUpTree){this._buildAllocationTraceTree();}
return this._bottomUpTree;}
_buildAllocationTraceTree(){this._bottomUpTree=new BottomUpAllocationNode(this);for(let i=0;i<this._traceTops.length;i++){let node=this._traceTops[i];let bottomUpNode=this._bottomUpTree;const count=node.allocationCount;const size=node.allocationSize;const liveCount=node.liveCount;const liveSize=node.liveSize;const traceId=node.id;while(true){bottomUpNode.allocationCount+=count;bottomUpNode.allocationSize+=size;bottomUpNode.liveCount+=liveCount;bottomUpNode.liveSize+=liveSize;bottomUpNode.traceTopIds.push(traceId);node=node.parent;if(node===null){break;}
bottomUpNode=bottomUpNode.addCaller(node);}}}}
self.HeapSnapshotWorker=self.HeapSnapshotWorker||{};HeapSnapshotWorker=HeapSnapshotWorker||{};HeapSnapshotWorker.AllocationProfile=AllocationProfile;HeapSnapshotWorker.TopDownAllocationNode=TopDownAllocationNode;HeapSnapshotWorker.BottomUpAllocationNode=BottomUpAllocationNode;HeapSnapshotWorker.FunctionAllocationInfo=FunctionAllocationInfo;class HeapSnapshotItem{itemIndex(){}
serialize(){}}
class HeapSnapshotEdge{constructor(snapshot,edgeIndex){this._snapshot=snapshot;this._edges=snapshot.containmentEdges;this.edgeIndex=edgeIndex||0;}
clone(){return new HeapSnapshotEdge(this._snapshot,this.edgeIndex);}
hasStringName(){throw new Error('Not implemented');}
name(){throw new Error('Not implemented');}
node(){return this._snapshot.createNode(this.nodeIndex());}
nodeIndex(){return this._edges[this.edgeIndex+this._snapshot._edgeToNodeOffset];}
toString(){return'HeapSnapshotEdge: '+this.name();}
type(){return this._snapshot._edgeTypes[this.rawType()];}
itemIndex(){return this.edgeIndex;}
serialize(){return new HeapSnapshotModel.Edge(this.name(),this.node().serialize(),this.type(),this.edgeIndex);}
rawType(){return this._edges[this.edgeIndex+this._snapshot._edgeTypeOffset];}}
class HeapSnapshotItemIterator{hasNext(){}
item(){}
next(){}}
class HeapSnapshotItemIndexProvider{itemForIndex(newIndex){}}
class HeapSnapshotNodeIndexProvider{constructor(snapshot){this._node=snapshot.createNode();}
itemForIndex(index){this._node.nodeIndex=index;return this._node;}}
class HeapSnapshotEdgeIndexProvider{constructor(snapshot){this._edge=snapshot.createEdge(0);}
itemForIndex(index){this._edge.edgeIndex=index;return this._edge;}}
class HeapSnapshotRetainerEdgeIndexProvider{constructor(snapshot){this._retainerEdge=snapshot.createRetainingEdge(0);}
itemForIndex(index){this._retainerEdge.setRetainerIndex(index);return this._retainerEdge;}}
class HeapSnapshotEdgeIterator{constructor(node){this._sourceNode=node;this.edge=node._snapshot.createEdge(node.edgeIndexesStart());}
hasNext(){return this.edge.edgeIndex<this._sourceNode.edgeIndexesEnd();}
item(){return this.edge;}
next(){this.edge.edgeIndex+=this.edge._snapshot._edgeFieldsCount;}}
class HeapSnapshotRetainerEdge{constructor(snapshot,retainerIndex){this._snapshot=snapshot;this.setRetainerIndex(retainerIndex);}
clone(){return new HeapSnapshotRetainerEdge(this._snapshot,this.retainerIndex());}
hasStringName(){return this._edge().hasStringName();}
name(){return this._edge().name();}
node(){return this._node();}
nodeIndex(){return this._retainingNodeIndex;}
retainerIndex(){return this._retainerIndex;}
setRetainerIndex(retainerIndex){if(retainerIndex===this._retainerIndex){return;}
this._retainerIndex=retainerIndex;this._globalEdgeIndex=this._snapshot._retainingEdges[retainerIndex];this._retainingNodeIndex=this._snapshot._retainingNodes[retainerIndex];this._edgeInstance=null;this._nodeInstance=null;}
set edgeIndex(edgeIndex){this.setRetainerIndex(edgeIndex);}
_node(){if(!this._nodeInstance){this._nodeInstance=this._snapshot.createNode(this._retainingNodeIndex);}
return this._nodeInstance;}
_edge(){if(!this._edgeInstance){this._edgeInstance=this._snapshot.createEdge(this._globalEdgeIndex);}
return this._edgeInstance;}
toString(){return this._edge().toString();}
itemIndex(){return this._retainerIndex;}
serialize(){return new HeapSnapshotModel.Edge(this.name(),this.node().serialize(),this.type(),this._globalEdgeIndex);}
type(){return this._edge().type();}}
class HeapSnapshotRetainerEdgeIterator{constructor(retainedNode){const snapshot=retainedNode._snapshot;const retainedNodeOrdinal=retainedNode.ordinal();const retainerIndex=snapshot._firstRetainerIndex[retainedNodeOrdinal];this._retainersEnd=snapshot._firstRetainerIndex[retainedNodeOrdinal+1];this.retainer=snapshot.createRetainingEdge(retainerIndex);}
hasNext(){return this.retainer.retainerIndex()<this._retainersEnd;}
item(){return this.retainer;}
next(){this.retainer.setRetainerIndex(this.retainer.retainerIndex()+1);}}
class HeapSnapshotNode{constructor(snapshot,nodeIndex){this._snapshot=snapshot;this.nodeIndex=nodeIndex||0;}
distance(){return this._snapshot._nodeDistances[this.nodeIndex/this._snapshot._nodeFieldCount];}
className(){throw new Error('Not implemented');}
classIndex(){throw new Error('Not implemented');}
dominatorIndex(){const nodeFieldCount=this._snapshot._nodeFieldCount;return this._snapshot._dominatorsTree[this.nodeIndex/this._snapshot._nodeFieldCount]*nodeFieldCount;}
edges(){return new HeapSnapshotEdgeIterator(this);}
edgesCount(){return(this.edgeIndexesEnd()-this.edgeIndexesStart())/this._snapshot._edgeFieldsCount;}
id(){throw new Error('Not implemented');}
isRoot(){return this.nodeIndex===this._snapshot._rootNodeIndex;}
name(){return this._snapshot.strings[this._name()];}
retainedSize(){return this._snapshot._retainedSizes[this.ordinal()];}
retainers(){return new HeapSnapshotRetainerEdgeIterator(this);}
retainersCount(){const snapshot=this._snapshot;const ordinal=this.ordinal();return snapshot._firstRetainerIndex[ordinal+1]-snapshot._firstRetainerIndex[ordinal];}
selfSize(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeSelfSizeOffset];}
type(){return this._snapshot._nodeTypes[this.rawType()];}
traceNodeId(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeTraceNodeIdOffset];}
itemIndex(){return this.nodeIndex;}
serialize(){return new HeapSnapshotModel.Node(this.id(),this.name(),this.distance(),this.nodeIndex,this.retainedSize(),this.selfSize(),this.type());}
_name(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeNameOffset];}
edgeIndexesStart(){return this._snapshot._firstEdgeIndexes[this.ordinal()];}
edgeIndexesEnd(){return this._snapshot._firstEdgeIndexes[this.ordinal()+1];}
ordinal(){return this.nodeIndex/this._snapshot._nodeFieldCount;}
_nextNodeIndex(){return this.nodeIndex+this._snapshot._nodeFieldCount;}
rawType(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeTypeOffset];}}
class HeapSnapshotNodeIterator{constructor(node){this.node=node;this._nodesLength=node._snapshot.nodes.length;}
hasNext(){return this.node.nodeIndex<this._nodesLength;}
item(){return this.node;}
next(){this.node.nodeIndex=this.node._nextNodeIndex();}}
class HeapSnapshotIndexRangeIterator{constructor(itemProvider,indexes){this._itemProvider=itemProvider;this._indexes=indexes;this._position=0;}
hasNext(){return this._position<this._indexes.length;}
item(){const index=this._indexes[this._position];return this._itemProvider.itemForIndex(index);}
next(){++this._position;}}
class HeapSnapshotFilteredIterator{constructor(iterator,filter){this._iterator=iterator;this._filter=filter;this._skipFilteredItems();}
hasNext(){return this._iterator.hasNext();}
item(){return this._iterator.item();}
next(){this._iterator.next();this._skipFilteredItems();}
_skipFilteredItems(){while(this._iterator.hasNext()&&!this._filter(this._iterator.item())){this._iterator.next();}}}
class HeapSnapshotProgress{constructor(dispatcher){this._dispatcher=dispatcher;}
updateStatus(status){this._sendUpdateEvent(Common.serializeUIString(status));}
updateProgress(title,value,total){const percentValue=((total?(value/total):0)*100).toFixed(0);this._sendUpdateEvent(Common.serializeUIString(title,[percentValue]));}
reportProblem(error){if(this._dispatcher){this._dispatcher.sendEvent(HeapSnapshotModel.HeapSnapshotProgressEvent.BrokenSnapshot,error);}}
_sendUpdateEvent(serializedText){if(this._dispatcher){this._dispatcher.sendEvent(HeapSnapshotModel.HeapSnapshotProgressEvent.Update,serializedText);}}}
class HeapSnapshotProblemReport{constructor(title){this._errors=[title];}
addError(error){if(this._errors.length>100){return;}
this._errors.push(error);}
toString(){return this._errors.join('\n  ');}}
class HeapSnapshot{constructor(profile,progress){this.nodes=profile.nodes;this.containmentEdges=profile.edges;this._metaNode=profile.snapshot.meta;this._rawSamples=profile.samples;this._samples=null;this.strings=profile.strings;this._locations=profile.locations;this._progress=progress;this._noDistance=-5;this._rootNodeIndex=0;if(profile.snapshot.root_index){this._rootNodeIndex=profile.snapshot.root_index;}
this._snapshotDiffs={};this._aggregatesForDiff=null;this._aggregates={};this._aggregatesSortedFlags={};this._profile=profile;}
initialize(){const meta=this._metaNode;this._nodeTypeOffset=meta.node_fields.indexOf('type');this._nodeNameOffset=meta.node_fields.indexOf('name');this._nodeIdOffset=meta.node_fields.indexOf('id');this._nodeSelfSizeOffset=meta.node_fields.indexOf('self_size');this._nodeEdgeCountOffset=meta.node_fields.indexOf('edge_count');this._nodeTraceNodeIdOffset=meta.node_fields.indexOf('trace_node_id');this._nodeFieldCount=meta.node_fields.length;this._nodeTypes=meta.node_types[this._nodeTypeOffset];this._nodeArrayType=this._nodeTypes.indexOf('array');this._nodeHiddenType=this._nodeTypes.indexOf('hidden');this._nodeObjectType=this._nodeTypes.indexOf('object');this._nodeNativeType=this._nodeTypes.indexOf('native');this._nodeConsStringType=this._nodeTypes.indexOf('concatenated string');this._nodeSlicedStringType=this._nodeTypes.indexOf('sliced string');this._nodeCodeType=this._nodeTypes.indexOf('code');this._nodeSyntheticType=this._nodeTypes.indexOf('synthetic');this._edgeFieldsCount=meta.edge_fields.length;this._edgeTypeOffset=meta.edge_fields.indexOf('type');this._edgeNameOffset=meta.edge_fields.indexOf('name_or_index');this._edgeToNodeOffset=meta.edge_fields.indexOf('to_node');this._edgeTypes=meta.edge_types[this._edgeTypeOffset];this._edgeTypes.push('invisible');this._edgeElementType=this._edgeTypes.indexOf('element');this._edgeHiddenType=this._edgeTypes.indexOf('hidden');this._edgeInternalType=this._edgeTypes.indexOf('internal');this._edgeShortcutType=this._edgeTypes.indexOf('shortcut');this._edgeWeakType=this._edgeTypes.indexOf('weak');this._edgeInvisibleType=this._edgeTypes.indexOf('invisible');const location_fields=meta.location_fields||[];this._locationIndexOffset=location_fields.indexOf('object_index');this._locationScriptIdOffset=location_fields.indexOf('script_id');this._locationLineOffset=location_fields.indexOf('line');this._locationColumnOffset=location_fields.indexOf('column');this._locationFieldCount=location_fields.length;this.nodeCount=this.nodes.length/this._nodeFieldCount;this._edgeCount=this.containmentEdges.length/this._edgeFieldsCount;this._retainedSizes=new Float64Array(this.nodeCount);this._firstEdgeIndexes=new Uint32Array(this.nodeCount+1);this._retainingNodes=new Uint32Array(this._edgeCount);this._retainingEdges=new Uint32Array(this._edgeCount);this._firstRetainerIndex=new Uint32Array(this.nodeCount+1);this._nodeDistances=new Int32Array(this.nodeCount);this._firstDominatedNodeIndex=new Uint32Array(this.nodeCount+1);this._dominatedNodes=new Uint32Array(this.nodeCount-1);this._progress.updateStatus(ls`Building edge indexes\u2026`);this._buildEdgeIndexes();this._progress.updateStatus(ls`Building retainers\u2026`);this._buildRetainers();this._progress.updateStatus(ls`Calculating node flags\u2026`);this.calculateFlags();this._progress.updateStatus(ls`Calculating distances\u2026`);this.calculateDistances();this._progress.updateStatus(ls`Building postorder index\u2026`);const result=this._buildPostOrderIndex();this._progress.updateStatus(ls`Building dominator tree\u2026`);this._dominatorsTree=this._buildDominatorTree(result.postOrderIndex2NodeOrdinal,result.nodeOrdinal2PostOrderIndex);this._progress.updateStatus(ls`Calculating retained sizes\u2026`);this._calculateRetainedSizes(result.postOrderIndex2NodeOrdinal);this._progress.updateStatus(ls`Building dominated nodes\u2026`);this._buildDominatedNodes();this._progress.updateStatus(ls`Calculating statistics\u2026`);this.calculateStatistics();this._progress.updateStatus(ls`Calculating samples\u2026`);this._buildSamples();this._progress.updateStatus(ls`Building locations\u2026`);this._buildLocationMap();this._progress.updateStatus(ls`Finished processing.`);if(this._profile.snapshot.trace_function_count){this._progress.updateStatus(ls`Building allocation statistics\u2026`);const nodes=this.nodes;const nodesLength=nodes.length;const nodeFieldCount=this._nodeFieldCount;const node=this.rootNode();const liveObjects={};for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){node.nodeIndex=nodeIndex;const traceNodeId=node.traceNodeId();let stats=liveObjects[traceNodeId];if(!stats){liveObjects[traceNodeId]=stats={count:0,size:0,ids:[]};}
stats.count++;stats.size+=node.selfSize();stats.ids.push(node.id());}
this._allocationProfile=new HeapSnapshotWorker.AllocationProfile(this._profile,liveObjects);this._progress.updateStatus(ls`Done`);}}
_buildEdgeIndexes(){const nodes=this.nodes;const nodeCount=this.nodeCount;const firstEdgeIndexes=this._firstEdgeIndexes;const nodeFieldCount=this._nodeFieldCount;const edgeFieldsCount=this._edgeFieldsCount;const nodeEdgeCountOffset=this._nodeEdgeCountOffset;firstEdgeIndexes[nodeCount]=this.containmentEdges.length;for(let nodeOrdinal=0,edgeIndex=0;nodeOrdinal<nodeCount;++nodeOrdinal){firstEdgeIndexes[nodeOrdinal]=edgeIndex;edgeIndex+=nodes[nodeOrdinal*nodeFieldCount+nodeEdgeCountOffset]*edgeFieldsCount;}}
_buildRetainers(){const retainingNodes=this._retainingNodes;const retainingEdges=this._retainingEdges;const firstRetainerIndex=this._firstRetainerIndex;const containmentEdges=this.containmentEdges;const edgeFieldsCount=this._edgeFieldsCount;const nodeFieldCount=this._nodeFieldCount;const edgeToNodeOffset=this._edgeToNodeOffset;const firstEdgeIndexes=this._firstEdgeIndexes;const nodeCount=this.nodeCount;for(let toNodeFieldIndex=edgeToNodeOffset,l=containmentEdges.length;toNodeFieldIndex<l;toNodeFieldIndex+=edgeFieldsCount){const toNodeIndex=containmentEdges[toNodeFieldIndex];if(toNodeIndex%nodeFieldCount){throw new Error('Invalid toNodeIndex '+toNodeIndex);}
++firstRetainerIndex[toNodeIndex/nodeFieldCount];}
for(let i=0,firstUnusedRetainerSlot=0;i<nodeCount;i++){const retainersCount=firstRetainerIndex[i];firstRetainerIndex[i]=firstUnusedRetainerSlot;retainingNodes[firstUnusedRetainerSlot]=retainersCount;firstUnusedRetainerSlot+=retainersCount;}
firstRetainerIndex[nodeCount]=retainingNodes.length;let nextNodeFirstEdgeIndex=firstEdgeIndexes[0];for(let srcNodeOrdinal=0;srcNodeOrdinal<nodeCount;++srcNodeOrdinal){const firstEdgeIndex=nextNodeFirstEdgeIndex;nextNodeFirstEdgeIndex=firstEdgeIndexes[srcNodeOrdinal+1];const srcNodeIndex=srcNodeOrdinal*nodeFieldCount;for(let edgeIndex=firstEdgeIndex;edgeIndex<nextNodeFirstEdgeIndex;edgeIndex+=edgeFieldsCount){const toNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];if(toNodeIndex%nodeFieldCount){throw new Error('Invalid toNodeIndex '+toNodeIndex);}
const firstRetainerSlotIndex=firstRetainerIndex[toNodeIndex/nodeFieldCount];const nextUnusedRetainerSlotIndex=firstRetainerSlotIndex+(--retainingNodes[firstRetainerSlotIndex]);retainingNodes[nextUnusedRetainerSlotIndex]=srcNodeIndex;retainingEdges[nextUnusedRetainerSlotIndex]=edgeIndex;}}}
createNode(nodeIndex){throw new Error('Not implemented');}
createEdge(edgeIndex){throw new Error('Not implemented');}
createRetainingEdge(retainerIndex){throw new Error('Not implemented');}
_allNodes(){return new HeapSnapshotNodeIterator(this.rootNode());}
rootNode(){return this.createNode(this._rootNodeIndex);}
get rootNodeIndex(){return this._rootNodeIndex;}
get totalSize(){return this.rootNode().retainedSize();}
_getDominatedIndex(nodeIndex){if(nodeIndex%this._nodeFieldCount){throw new Error('Invalid nodeIndex: '+nodeIndex);}
return this._firstDominatedNodeIndex[nodeIndex/this._nodeFieldCount];}
_createFilter(nodeFilter){const minNodeId=nodeFilter.minNodeId;const maxNodeId=nodeFilter.maxNodeId;const allocationNodeId=nodeFilter.allocationNodeId;let filter;if(typeof allocationNodeId==='number'){filter=this._createAllocationStackFilter(allocationNodeId);filter.key='AllocationNodeId: '+allocationNodeId;}else if(typeof minNodeId==='number'&&typeof maxNodeId==='number'){filter=this._createNodeIdFilter(minNodeId,maxNodeId);filter.key='NodeIdRange: '+minNodeId+'..'+maxNodeId;}
return filter;}
search(searchConfig,nodeFilter){const query=searchConfig.query;function filterString(matchedStringIndexes,string,index){if(string.indexOf(query)!==-1){matchedStringIndexes.add(index);}
return matchedStringIndexes;}
const regexp=searchConfig.isRegex?new RegExp(query):createPlainTextSearchRegex(query,'i');function filterRegexp(matchedStringIndexes,string,index){if(regexp.test(string)){matchedStringIndexes.add(index);}
return matchedStringIndexes;}
const stringFilter=(searchConfig.isRegex||!searchConfig.caseSensitive)?filterRegexp:filterString;const stringIndexes=this.strings.reduce(stringFilter,new Set());if(!stringIndexes.size){return[];}
const filter=this._createFilter(nodeFilter);const nodeIds=[];const nodesLength=this.nodes.length;const nodes=this.nodes;const nodeNameOffset=this._nodeNameOffset;const nodeIdOffset=this._nodeIdOffset;const nodeFieldCount=this._nodeFieldCount;const node=this.rootNode();for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){node.nodeIndex=nodeIndex;if(filter&&!filter(node)){continue;}
if(stringIndexes.has(nodes[nodeIndex+nodeNameOffset])){nodeIds.push(nodes[nodeIndex+nodeIdOffset]);}}
return nodeIds;}
aggregatesWithFilter(nodeFilter){const filter=this._createFilter(nodeFilter);const key=filter?filter.key:'allObjects';return this.aggregates(false,key,filter);}
_createNodeIdFilter(minNodeId,maxNodeId){function nodeIdFilter(node){const id=node.id();return id>minNodeId&&id<=maxNodeId;}
return nodeIdFilter;}
_createAllocationStackFilter(bottomUpAllocationNodeId){const traceIds=this._allocationProfile.traceIds(bottomUpAllocationNodeId);if(!traceIds.length){return undefined;}
const set={};for(let i=0;i<traceIds.length;i++){set[traceIds[i]]=true;}
function traceIdFilter(node){return!!set[node.traceNodeId()];}
return traceIdFilter;}
aggregates(sortedIndexes,key,filter){let aggregatesByClassName=key&&this._aggregates[key];if(!aggregatesByClassName){const aggregates=this._buildAggregates(filter);this._calculateClassesRetainedSize(aggregates.aggregatesByClassIndex,filter);aggregatesByClassName=aggregates.aggregatesByClassName;if(key){this._aggregates[key]=aggregatesByClassName;}}
if(sortedIndexes&&(!key||!this._aggregatesSortedFlags[key])){this._sortAggregateIndexes(aggregatesByClassName);if(key){this._aggregatesSortedFlags[key]=sortedIndexes;}}
return aggregatesByClassName;}
allocationTracesTops(){return this._allocationProfile.serializeTraceTops();}
allocationNodeCallers(nodeId){return this._allocationProfile.serializeCallers(nodeId);}
allocationStack(nodeIndex){const node=this.createNode(nodeIndex);const allocationNodeId=node.traceNodeId();if(!allocationNodeId){return null;}
return this._allocationProfile.serializeAllocationStack(allocationNodeId);}
aggregatesForDiff(){if(this._aggregatesForDiff){return this._aggregatesForDiff;}
const aggregatesByClassName=this.aggregates(true,'allObjects');this._aggregatesForDiff={};const node=this.createNode();for(const className in aggregatesByClassName){const aggregate=aggregatesByClassName[className];const indexes=aggregate.idxs;const ids=new Array(indexes.length);const selfSizes=new Array(indexes.length);for(let i=0;i<indexes.length;i++){node.nodeIndex=indexes[i];ids[i]=node.id();selfSizes[i]=node.selfSize();}
this._aggregatesForDiff[className]={indexes:indexes,ids:ids,selfSizes:selfSizes};}
return this._aggregatesForDiff;}
isUserRoot(node){return true;}
calculateDistances(filter){const nodeCount=this.nodeCount;const distances=this._nodeDistances;const noDistance=this._noDistance;for(let i=0;i<nodeCount;++i){distances[i]=noDistance;}
const nodesToVisit=new Uint32Array(this.nodeCount);let nodesToVisitLength=0;for(let iter=this.rootNode().edges();iter.hasNext();iter.next()){const node=iter.edge.node();if(this.isUserRoot(node)){distances[node.ordinal()]=1;nodesToVisit[nodesToVisitLength++]=node.nodeIndex;}}
this._bfs(nodesToVisit,nodesToVisitLength,distances,filter);distances[this.rootNode().ordinal()]=nodesToVisitLength>0?HeapSnapshotModel.baseSystemDistance:0;nodesToVisit[0]=this.rootNode().nodeIndex;nodesToVisitLength=1;this._bfs(nodesToVisit,nodesToVisitLength,distances,filter);}
_bfs(nodesToVisit,nodesToVisitLength,distances,filter){const edgeFieldsCount=this._edgeFieldsCount;const nodeFieldCount=this._nodeFieldCount;const containmentEdges=this.containmentEdges;const firstEdgeIndexes=this._firstEdgeIndexes;const edgeToNodeOffset=this._edgeToNodeOffset;const edgeTypeOffset=this._edgeTypeOffset;const nodeCount=this.nodeCount;const edgeWeakType=this._edgeWeakType;const noDistance=this._noDistance;let index=0;const edge=this.createEdge(0);const node=this.createNode(0);while(index<nodesToVisitLength){const nodeIndex=nodesToVisit[index++];const nodeOrdinal=nodeIndex/nodeFieldCount;const distance=distances[nodeOrdinal]+1;const firstEdgeIndex=firstEdgeIndexes[nodeOrdinal];const edgesEnd=firstEdgeIndexes[nodeOrdinal+1];node.nodeIndex=nodeIndex;for(let edgeIndex=firstEdgeIndex;edgeIndex<edgesEnd;edgeIndex+=edgeFieldsCount){const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];if(edgeType===edgeWeakType){continue;}
const childNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];const childNodeOrdinal=childNodeIndex/nodeFieldCount;if(distances[childNodeOrdinal]!==noDistance){continue;}
edge.edgeIndex=edgeIndex;if(filter&&!filter(node,edge)){continue;}
distances[childNodeOrdinal]=distance;nodesToVisit[nodesToVisitLength++]=childNodeIndex;}}
if(nodesToVisitLength>nodeCount){throw new Error('BFS failed. Nodes to visit ('+nodesToVisitLength+') is more than nodes count ('+nodeCount+')');}}
_buildAggregates(filter){const aggregates={};const aggregatesByClassName={};const classIndexes=[];const nodes=this.nodes;const nodesLength=nodes.length;const nodeNativeType=this._nodeNativeType;const nodeFieldCount=this._nodeFieldCount;const selfSizeOffset=this._nodeSelfSizeOffset;const nodeTypeOffset=this._nodeTypeOffset;const node=this.rootNode();const nodeDistances=this._nodeDistances;for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){node.nodeIndex=nodeIndex;if(filter&&!filter(node)){continue;}
const selfSize=nodes[nodeIndex+selfSizeOffset];if(!selfSize&&nodes[nodeIndex+nodeTypeOffset]!==nodeNativeType){continue;}
const classIndex=node.classIndex();const nodeOrdinal=nodeIndex/nodeFieldCount;const distance=nodeDistances[nodeOrdinal];if(!(classIndex in aggregates)){const nodeType=node.type();const nameMatters=nodeType==='object'||nodeType==='native';const value={count:1,distance:distance,self:selfSize,maxRet:0,type:nodeType,name:nameMatters?node.name():null,idxs:[nodeIndex]};aggregates[classIndex]=value;classIndexes.push(classIndex);aggregatesByClassName[node.className()]=value;}else{const clss=aggregates[classIndex];clss.distance=Math.min(clss.distance,distance);++clss.count;clss.self+=selfSize;clss.idxs.push(nodeIndex);}}
for(let i=0,l=classIndexes.length;i<l;++i){const classIndex=classIndexes[i];aggregates[classIndex].idxs=aggregates[classIndex].idxs.slice();}
return{aggregatesByClassName:aggregatesByClassName,aggregatesByClassIndex:aggregates};}
_calculateClassesRetainedSize(aggregates,filter){const rootNodeIndex=this._rootNodeIndex;const node=this.createNode(rootNodeIndex);const list=[rootNodeIndex];const sizes=[-1];const classes=[];const seenClassNameIndexes={};const nodeFieldCount=this._nodeFieldCount;const nodeTypeOffset=this._nodeTypeOffset;const nodeNativeType=this._nodeNativeType;const dominatedNodes=this._dominatedNodes;const nodes=this.nodes;const firstDominatedNodeIndex=this._firstDominatedNodeIndex;while(list.length){const nodeIndex=list.pop();node.nodeIndex=nodeIndex;let classIndex=node.classIndex();const seen=!!seenClassNameIndexes[classIndex];const nodeOrdinal=nodeIndex/nodeFieldCount;const dominatedIndexFrom=firstDominatedNodeIndex[nodeOrdinal];const dominatedIndexTo=firstDominatedNodeIndex[nodeOrdinal+1];if(!seen&&(!filter||filter(node))&&(node.selfSize()||nodes[nodeIndex+nodeTypeOffset]===nodeNativeType)){aggregates[classIndex].maxRet+=node.retainedSize();if(dominatedIndexFrom!==dominatedIndexTo){seenClassNameIndexes[classIndex]=true;sizes.push(list.length);classes.push(classIndex);}}
for(let i=dominatedIndexFrom;i<dominatedIndexTo;i++){list.push(dominatedNodes[i]);}
const l=list.length;while(sizes[sizes.length-1]===l){sizes.pop();classIndex=classes.pop();seenClassNameIndexes[classIndex]=false;}}}
_sortAggregateIndexes(aggregates){const nodeA=this.createNode();const nodeB=this.createNode();for(const clss in aggregates){aggregates[clss].idxs.sort((idxA,idxB)=>{nodeA.nodeIndex=idxA;nodeB.nodeIndex=idxB;return nodeA.id()<nodeB.id()?-1:1;});}}
_isEssentialEdge(nodeIndex,edgeType){return edgeType!==this._edgeWeakType&&(edgeType!==this._edgeShortcutType||nodeIndex===this._rootNodeIndex);}
_buildPostOrderIndex(){const nodeFieldCount=this._nodeFieldCount;const nodeCount=this.nodeCount;const rootNodeOrdinal=this._rootNodeIndex/nodeFieldCount;const edgeFieldsCount=this._edgeFieldsCount;const edgeTypeOffset=this._edgeTypeOffset;const edgeToNodeOffset=this._edgeToNodeOffset;const firstEdgeIndexes=this._firstEdgeIndexes;const containmentEdges=this.containmentEdges;const mapAndFlag=this.userObjectsMapAndFlag();const flags=mapAndFlag?mapAndFlag.map:null;const flag=mapAndFlag?mapAndFlag.flag:0;const stackNodes=new Uint32Array(nodeCount);const stackCurrentEdge=new Uint32Array(nodeCount);const postOrderIndex2NodeOrdinal=new Uint32Array(nodeCount);const nodeOrdinal2PostOrderIndex=new Uint32Array(nodeCount);const visited=new Uint8Array(nodeCount);let postOrderIndex=0;let stackTop=0;stackNodes[0]=rootNodeOrdinal;stackCurrentEdge[0]=firstEdgeIndexes[rootNodeOrdinal];visited[rootNodeOrdinal]=1;let iteration=0;while(true){++iteration;while(stackTop>=0){const nodeOrdinal=stackNodes[stackTop];const edgeIndex=stackCurrentEdge[stackTop];const edgesEnd=firstEdgeIndexes[nodeOrdinal+1];if(edgeIndex<edgesEnd){stackCurrentEdge[stackTop]+=edgeFieldsCount;const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];if(!this._isEssentialEdge(nodeOrdinal*nodeFieldCount,edgeType)){continue;}
const childNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];const childNodeOrdinal=childNodeIndex/nodeFieldCount;if(visited[childNodeOrdinal]){continue;}
const nodeFlag=!flags||(flags[nodeOrdinal]&flag);const childNodeFlag=!flags||(flags[childNodeOrdinal]&flag);if(nodeOrdinal!==rootNodeOrdinal&&childNodeFlag&&!nodeFlag){continue;}
++stackTop;stackNodes[stackTop]=childNodeOrdinal;stackCurrentEdge[stackTop]=firstEdgeIndexes[childNodeOrdinal];visited[childNodeOrdinal]=1;}else{nodeOrdinal2PostOrderIndex[nodeOrdinal]=postOrderIndex;postOrderIndex2NodeOrdinal[postOrderIndex++]=nodeOrdinal;--stackTop;}}
if(postOrderIndex===nodeCount||iteration>1){break;}
const errors=new HeapSnapshotProblemReport(`Heap snapshot: ${
          nodeCount - postOrderIndex} nodes are unreachable from the root. Following nodes have only weak retainers:`);const dumpNode=this.rootNode();--postOrderIndex;stackTop=0;stackNodes[0]=rootNodeOrdinal;stackCurrentEdge[0]=firstEdgeIndexes[rootNodeOrdinal+1];for(let i=0;i<nodeCount;++i){if(visited[i]||!this._hasOnlyWeakRetainers(i)){continue;}
stackNodes[++stackTop]=i;stackCurrentEdge[stackTop]=firstEdgeIndexes[i];visited[i]=1;dumpNode.nodeIndex=i*nodeFieldCount;const retainers=[];for(let it=dumpNode.retainers();it.hasNext();it.next()){retainers.push(`${it.item().node().name()}@${it.item().node().id()}.${it.item().name()}`);}
errors.addError(`${dumpNode.name()} @${dumpNode.id()}  weak retainers: ${retainers.join(', ')}`);}
console.warn(errors.toString());}
if(postOrderIndex!==nodeCount){const errors=new HeapSnapshotProblemReport('Still found '+(nodeCount-postOrderIndex)+' unreachable nodes in heap snapshot:');const dumpNode=this.rootNode();--postOrderIndex;for(let i=0;i<nodeCount;++i){if(visited[i]){continue;}
dumpNode.nodeIndex=i*nodeFieldCount;errors.addError(dumpNode.name()+' @'+dumpNode.id());nodeOrdinal2PostOrderIndex[i]=postOrderIndex;postOrderIndex2NodeOrdinal[postOrderIndex++]=i;}
nodeOrdinal2PostOrderIndex[rootNodeOrdinal]=postOrderIndex;postOrderIndex2NodeOrdinal[postOrderIndex++]=rootNodeOrdinal;console.warn(errors.toString());}
return{postOrderIndex2NodeOrdinal:postOrderIndex2NodeOrdinal,nodeOrdinal2PostOrderIndex:nodeOrdinal2PostOrderIndex};}
_hasOnlyWeakRetainers(nodeOrdinal){const edgeTypeOffset=this._edgeTypeOffset;const edgeWeakType=this._edgeWeakType;const edgeShortcutType=this._edgeShortcutType;const containmentEdges=this.containmentEdges;const retainingEdges=this._retainingEdges;const beginRetainerIndex=this._firstRetainerIndex[nodeOrdinal];const endRetainerIndex=this._firstRetainerIndex[nodeOrdinal+1];for(let retainerIndex=beginRetainerIndex;retainerIndex<endRetainerIndex;++retainerIndex){const retainerEdgeIndex=retainingEdges[retainerIndex];const retainerEdgeType=containmentEdges[retainerEdgeIndex+edgeTypeOffset];if(retainerEdgeType!==edgeWeakType&&retainerEdgeType!==edgeShortcutType){return false;}}
return true;}
_buildDominatorTree(postOrderIndex2NodeOrdinal,nodeOrdinal2PostOrderIndex){const nodeFieldCount=this._nodeFieldCount;const firstRetainerIndex=this._firstRetainerIndex;const retainingNodes=this._retainingNodes;const retainingEdges=this._retainingEdges;const edgeFieldsCount=this._edgeFieldsCount;const edgeTypeOffset=this._edgeTypeOffset;const edgeToNodeOffset=this._edgeToNodeOffset;const firstEdgeIndexes=this._firstEdgeIndexes;const containmentEdges=this.containmentEdges;const rootNodeIndex=this._rootNodeIndex;const mapAndFlag=this.userObjectsMapAndFlag();const flags=mapAndFlag?mapAndFlag.map:null;const flag=mapAndFlag?mapAndFlag.flag:0;const nodesCount=postOrderIndex2NodeOrdinal.length;const rootPostOrderedIndex=nodesCount-1;const noEntry=nodesCount;const dominators=new Uint32Array(nodesCount);for(let i=0;i<rootPostOrderedIndex;++i){dominators[i]=noEntry;}
dominators[rootPostOrderedIndex]=rootPostOrderedIndex;const affected=new Uint8Array(nodesCount);let nodeOrdinal;{nodeOrdinal=this._rootNodeIndex/nodeFieldCount;const endEdgeIndex=firstEdgeIndexes[nodeOrdinal+1];for(let edgeIndex=firstEdgeIndexes[nodeOrdinal];edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];if(!this._isEssentialEdge(this._rootNodeIndex,edgeType)){continue;}
const childNodeOrdinal=containmentEdges[edgeIndex+edgeToNodeOffset]/nodeFieldCount;affected[nodeOrdinal2PostOrderIndex[childNodeOrdinal]]=1;}}
let changed=true;while(changed){changed=false;for(let postOrderIndex=rootPostOrderedIndex-1;postOrderIndex>=0;--postOrderIndex){if(affected[postOrderIndex]===0){continue;}
affected[postOrderIndex]=0;if(dominators[postOrderIndex]===rootPostOrderedIndex){continue;}
nodeOrdinal=postOrderIndex2NodeOrdinal[postOrderIndex];const nodeFlag=!flags||(flags[nodeOrdinal]&flag);let newDominatorIndex=noEntry;const beginRetainerIndex=firstRetainerIndex[nodeOrdinal];const endRetainerIndex=firstRetainerIndex[nodeOrdinal+1];let orphanNode=true;for(let retainerIndex=beginRetainerIndex;retainerIndex<endRetainerIndex;++retainerIndex){const retainerEdgeIndex=retainingEdges[retainerIndex];const retainerEdgeType=containmentEdges[retainerEdgeIndex+edgeTypeOffset];const retainerNodeIndex=retainingNodes[retainerIndex];if(!this._isEssentialEdge(retainerNodeIndex,retainerEdgeType)){continue;}
orphanNode=false;const retainerNodeOrdinal=retainerNodeIndex/nodeFieldCount;const retainerNodeFlag=!flags||(flags[retainerNodeOrdinal]&flag);if(retainerNodeIndex!==rootNodeIndex&&nodeFlag&&!retainerNodeFlag){continue;}
let retanerPostOrderIndex=nodeOrdinal2PostOrderIndex[retainerNodeOrdinal];if(dominators[retanerPostOrderIndex]!==noEntry){if(newDominatorIndex===noEntry){newDominatorIndex=retanerPostOrderIndex;}else{while(retanerPostOrderIndex!==newDominatorIndex){while(retanerPostOrderIndex<newDominatorIndex){retanerPostOrderIndex=dominators[retanerPostOrderIndex];}
while(newDominatorIndex<retanerPostOrderIndex){newDominatorIndex=dominators[newDominatorIndex];}}}
if(newDominatorIndex===rootPostOrderedIndex){break;}}}
if(orphanNode){newDominatorIndex=rootPostOrderedIndex;}
if(newDominatorIndex!==noEntry&&dominators[postOrderIndex]!==newDominatorIndex){dominators[postOrderIndex]=newDominatorIndex;changed=true;nodeOrdinal=postOrderIndex2NodeOrdinal[postOrderIndex];const beginEdgeToNodeFieldIndex=firstEdgeIndexes[nodeOrdinal]+edgeToNodeOffset;const endEdgeToNodeFieldIndex=firstEdgeIndexes[nodeOrdinal+1];for(let toNodeFieldIndex=beginEdgeToNodeFieldIndex;toNodeFieldIndex<endEdgeToNodeFieldIndex;toNodeFieldIndex+=edgeFieldsCount){const childNodeOrdinal=containmentEdges[toNodeFieldIndex]/nodeFieldCount;affected[nodeOrdinal2PostOrderIndex[childNodeOrdinal]]=1;}}}}
const dominatorsTree=new Uint32Array(nodesCount);for(let postOrderIndex=0,l=dominators.length;postOrderIndex<l;++postOrderIndex){nodeOrdinal=postOrderIndex2NodeOrdinal[postOrderIndex];dominatorsTree[nodeOrdinal]=postOrderIndex2NodeOrdinal[dominators[postOrderIndex]];}
return dominatorsTree;}
_calculateRetainedSizes(postOrderIndex2NodeOrdinal){const nodeCount=this.nodeCount;const nodes=this.nodes;const nodeSelfSizeOffset=this._nodeSelfSizeOffset;const nodeFieldCount=this._nodeFieldCount;const dominatorsTree=this._dominatorsTree;const retainedSizes=this._retainedSizes;for(let nodeOrdinal=0;nodeOrdinal<nodeCount;++nodeOrdinal){retainedSizes[nodeOrdinal]=nodes[nodeOrdinal*nodeFieldCount+nodeSelfSizeOffset];}
for(let postOrderIndex=0;postOrderIndex<nodeCount-1;++postOrderIndex){const nodeOrdinal=postOrderIndex2NodeOrdinal[postOrderIndex];const dominatorOrdinal=dominatorsTree[nodeOrdinal];retainedSizes[dominatorOrdinal]+=retainedSizes[nodeOrdinal];}}
_buildDominatedNodes(){const indexArray=this._firstDominatedNodeIndex;const dominatedNodes=this._dominatedNodes;const nodeFieldCount=this._nodeFieldCount;const dominatorsTree=this._dominatorsTree;let fromNodeOrdinal=0;let toNodeOrdinal=this.nodeCount;const rootNodeOrdinal=this._rootNodeIndex/nodeFieldCount;if(rootNodeOrdinal===fromNodeOrdinal){fromNodeOrdinal=1;}else if(rootNodeOrdinal===toNodeOrdinal-1){toNodeOrdinal=toNodeOrdinal-1;}else{throw new Error('Root node is expected to be either first or last');}
for(let nodeOrdinal=fromNodeOrdinal;nodeOrdinal<toNodeOrdinal;++nodeOrdinal){++indexArray[dominatorsTree[nodeOrdinal]];}
let firstDominatedNodeIndex=0;for(let i=0,l=this.nodeCount;i<l;++i){const dominatedCount=dominatedNodes[firstDominatedNodeIndex]=indexArray[i];indexArray[i]=firstDominatedNodeIndex;firstDominatedNodeIndex+=dominatedCount;}
indexArray[this.nodeCount]=dominatedNodes.length;for(let nodeOrdinal=fromNodeOrdinal;nodeOrdinal<toNodeOrdinal;++nodeOrdinal){const dominatorOrdinal=dominatorsTree[nodeOrdinal];let dominatedRefIndex=indexArray[dominatorOrdinal];dominatedRefIndex+=(--dominatedNodes[dominatedRefIndex]);dominatedNodes[dominatedRefIndex]=nodeOrdinal*nodeFieldCount;}}
_buildSamples(){const samples=this._rawSamples;if(!samples||!samples.length){return;}
const sampleCount=samples.length/2;const sizeForRange=new Array(sampleCount);const timestamps=new Array(sampleCount);const lastAssignedIds=new Array(sampleCount);const timestampOffset=this._metaNode.sample_fields.indexOf('timestamp_us');const lastAssignedIdOffset=this._metaNode.sample_fields.indexOf('last_assigned_id');for(let i=0;i<sampleCount;i++){sizeForRange[i]=0;timestamps[i]=(samples[2*i+timestampOffset])/1000;lastAssignedIds[i]=samples[2*i+lastAssignedIdOffset];}
const nodes=this.nodes;const nodesLength=nodes.length;const nodeFieldCount=this._nodeFieldCount;const node=this.rootNode();for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){node.nodeIndex=nodeIndex;const nodeId=node.id();if(nodeId%2===0){continue;}
const rangeIndex=lastAssignedIds.lowerBound(nodeId);if(rangeIndex===sampleCount){continue;}
sizeForRange[rangeIndex]+=node.selfSize();}
this._samples=new HeapSnapshotModel.Samples(timestamps,lastAssignedIds,sizeForRange);}
_buildLocationMap(){const map=new Map();const locations=this._locations;for(let i=0;i<locations.length;i+=this._locationFieldCount){const nodeIndex=locations[i+this._locationIndexOffset];const scriptId=locations[i+this._locationScriptIdOffset];const line=locations[i+this._locationLineOffset];const col=locations[i+this._locationColumnOffset];map.set(nodeIndex,new HeapSnapshotModel.Location(scriptId,line,col));}
this._locationMap=map;}
getLocation(nodeIndex){return this._locationMap.get(nodeIndex)||null;}
getSamples(){return this._samples;}
calculateFlags(){throw new Error('Not implemented');}
calculateStatistics(){throw new Error('Not implemented');}
userObjectsMapAndFlag(){throw new Error('Not implemented');}
calculateSnapshotDiff(baseSnapshotId,baseSnapshotAggregates){let snapshotDiff=this._snapshotDiffs[baseSnapshotId];if(snapshotDiff){return snapshotDiff;}
snapshotDiff={};const aggregates=this.aggregates(true,'allObjects');for(const className in baseSnapshotAggregates){const baseAggregate=baseSnapshotAggregates[className];const diff=this._calculateDiffForClass(baseAggregate,aggregates[className]);if(diff){snapshotDiff[className]=diff;}}
const emptyBaseAggregate=new HeapSnapshotModel.AggregateForDiff();for(const className in aggregates){if(className in baseSnapshotAggregates){continue;}
snapshotDiff[className]=this._calculateDiffForClass(emptyBaseAggregate,aggregates[className]);}
this._snapshotDiffs[baseSnapshotId]=snapshotDiff;return snapshotDiff;}
_calculateDiffForClass(baseAggregate,aggregate){const baseIds=baseAggregate.ids;const baseIndexes=baseAggregate.indexes;const baseSelfSizes=baseAggregate.selfSizes;const indexes=aggregate?aggregate.idxs:[];let i=0;let j=0;const l=baseIds.length;const m=indexes.length;const diff=new HeapSnapshotModel.Diff();const nodeB=this.createNode(indexes[j]);while(i<l&&j<m){const nodeAId=baseIds[i];if(nodeAId<nodeB.id()){diff.deletedIndexes.push(baseIndexes[i]);diff.removedCount++;diff.removedSize+=baseSelfSizes[i];++i;}else if(nodeAId>nodeB.id()){diff.addedIndexes.push(indexes[j]);diff.addedCount++;diff.addedSize+=nodeB.selfSize();nodeB.nodeIndex=indexes[++j];}else{++i;nodeB.nodeIndex=indexes[++j];}}
while(i<l){diff.deletedIndexes.push(baseIndexes[i]);diff.removedCount++;diff.removedSize+=baseSelfSizes[i];++i;}
while(j<m){diff.addedIndexes.push(indexes[j]);diff.addedCount++;diff.addedSize+=nodeB.selfSize();nodeB.nodeIndex=indexes[++j];}
diff.countDelta=diff.addedCount-diff.removedCount;diff.sizeDelta=diff.addedSize-diff.removedSize;if(!diff.addedCount&&!diff.removedCount){return null;}
return diff;}
_nodeForSnapshotObjectId(snapshotObjectId){for(let it=this._allNodes();it.hasNext();it.next()){if(it.node.id()===snapshotObjectId){return it.node;}}
return null;}
nodeClassName(snapshotObjectId){const node=this._nodeForSnapshotObjectId(snapshotObjectId);if(node){return node.className();}
return null;}
idsOfObjectsWithName(name){const ids=[];for(let it=this._allNodes();it.hasNext();it.next()){if(it.item().name()===name){ids.push(it.item().id());}}
return ids;}
createEdgesProvider(nodeIndex){const node=this.createNode(nodeIndex);const filter=this.containmentEdgesFilter();const indexProvider=new HeapSnapshotEdgeIndexProvider(this);return new HeapSnapshotEdgesProvider(this,filter,node.edges(),indexProvider);}
createEdgesProviderForTest(nodeIndex,filter){const node=this.createNode(nodeIndex);const indexProvider=new HeapSnapshotEdgeIndexProvider(this);return new HeapSnapshotEdgesProvider(this,filter,node.edges(),indexProvider);}
retainingEdgesFilter(){return null;}
containmentEdgesFilter(){return null;}
createRetainingEdgesProvider(nodeIndex){const node=this.createNode(nodeIndex);const filter=this.retainingEdgesFilter();const indexProvider=new HeapSnapshotRetainerEdgeIndexProvider(this);return new HeapSnapshotEdgesProvider(this,filter,node.retainers(),indexProvider);}
createAddedNodesProvider(baseSnapshotId,className){const snapshotDiff=this._snapshotDiffs[baseSnapshotId];const diffForClass=snapshotDiff[className];return new HeapSnapshotNodesProvider(this,diffForClass.addedIndexes);}
createDeletedNodesProvider(nodeIndexes){return new HeapSnapshotNodesProvider(this,nodeIndexes);}
createNodesProviderForClass(className,nodeFilter){return new HeapSnapshotNodesProvider(this,this.aggregatesWithFilter(nodeFilter)[className].idxs);}
_maxJsNodeId(){const nodeFieldCount=this._nodeFieldCount;const nodes=this.nodes;const nodesLength=nodes.length;let id=0;for(let nodeIndex=this._nodeIdOffset;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){const nextId=nodes[nodeIndex];if(nextId%2===0){continue;}
if(id<nextId){id=nextId;}}
return id;}
updateStaticData(){return new HeapSnapshotModel.StaticData(this.nodeCount,this._rootNodeIndex,this.totalSize,this._maxJsNodeId());}}
const HeapSnapshotMetainfo=class{constructor(){this.node_fields=[];this.node_types=[];this.edge_fields=[];this.edge_types=[];this.trace_function_info_fields=[];this.trace_node_fields=[];this.sample_fields=[];this.type_strings={};}};class HeapSnapshotHeader{constructor(){this.title='';this.meta=new HeapSnapshotMetainfo();this.node_count=0;this.edge_count=0;this.trace_function_count=0;}}
class HeapSnapshotItemProvider{constructor(iterator,indexProvider){this._iterator=iterator;this._indexProvider=indexProvider;this._isEmpty=!iterator.hasNext();this._iterationOrder=null;this._currentComparator=null;this._sortedPrefixLength=0;this._sortedSuffixLength=0;}
_createIterationOrder(){if(this._iterationOrder){return;}
this._iterationOrder=[];for(let iterator=this._iterator;iterator.hasNext();iterator.next()){this._iterationOrder.push(iterator.item().itemIndex());}}
isEmpty(){return this._isEmpty;}
serializeItemsRange(begin,end){this._createIterationOrder();if(begin>end){throw new Error('Start position > end position: '+begin+' > '+end);}
if(end>this._iterationOrder.length){end=this._iterationOrder.length;}
if(this._sortedPrefixLength<end&&begin<this._iterationOrder.length-this._sortedSuffixLength){this.sort(this._currentComparator,this._sortedPrefixLength,this._iterationOrder.length-1-this._sortedSuffixLength,begin,end-1);if(begin<=this._sortedPrefixLength){this._sortedPrefixLength=end;}
if(end>=this._iterationOrder.length-this._sortedSuffixLength){this._sortedSuffixLength=this._iterationOrder.length-begin;}}
let position=begin;const count=end-begin;const result=new Array(count);for(let i=0;i<count;++i){const itemIndex=this._iterationOrder[position++];const item=this._indexProvider.itemForIndex(itemIndex);result[i]=item.serialize();}
return new HeapSnapshotModel.ItemsRange(begin,end,this._iterationOrder.length,result);}
sortAndRewind(comparator){this._currentComparator=comparator;this._sortedPrefixLength=0;this._sortedSuffixLength=0;}}
class HeapSnapshotEdgesProvider extends HeapSnapshotItemProvider{constructor(snapshot,filter,edgesIter,indexProvider){const iter=filter?new HeapSnapshotFilteredIterator(edgesIter,(filter)):edgesIter;super(iter,indexProvider);this.snapshot=snapshot;}
sort(comparator,leftBound,rightBound,windowLeft,windowRight){const fieldName1=comparator.fieldName1;const fieldName2=comparator.fieldName2;const ascending1=comparator.ascending1;const ascending2=comparator.ascending2;const edgeA=(this._iterator.item()).clone();const edgeB=edgeA.clone();const nodeA=this.snapshot.createNode();const nodeB=this.snapshot.createNode();function compareEdgeFieldName(ascending,indexA,indexB){edgeA.edgeIndex=indexA;edgeB.edgeIndex=indexB;if(edgeB.name()==='__proto__'){return-1;}
if(edgeA.name()==='__proto__'){return 1;}
const result=edgeA.hasStringName()===edgeB.hasStringName()?(edgeA.name()<edgeB.name()?-1:(edgeA.name()>edgeB.name()?1:0)):(edgeA.hasStringName()?-1:1);return ascending?result:-result;}
function compareNodeField(fieldName,ascending,indexA,indexB){edgeA.edgeIndex=indexA;nodeA.nodeIndex=edgeA.nodeIndex();const valueA=nodeA[fieldName]();edgeB.edgeIndex=indexB;nodeB.nodeIndex=edgeB.nodeIndex();const valueB=nodeB[fieldName]();const result=valueA<valueB?-1:(valueA>valueB?1:0);return ascending?result:-result;}
function compareEdgeAndNode(indexA,indexB){let result=compareEdgeFieldName(ascending1,indexA,indexB);if(result===0){result=compareNodeField(fieldName2,ascending2,indexA,indexB);}
if(result===0){return indexA-indexB;}
return result;}
function compareNodeAndEdge(indexA,indexB){let result=compareNodeField(fieldName1,ascending1,indexA,indexB);if(result===0){result=compareEdgeFieldName(ascending2,indexA,indexB);}
if(result===0){return indexA-indexB;}
return result;}
function compareNodeAndNode(indexA,indexB){let result=compareNodeField(fieldName1,ascending1,indexA,indexB);if(result===0){result=compareNodeField(fieldName2,ascending2,indexA,indexB);}
if(result===0){return indexA-indexB;}
return result;}
if(fieldName1==='!edgeName'){this._iterationOrder.sortRange(compareEdgeAndNode,leftBound,rightBound,windowLeft,windowRight);}else if(fieldName2==='!edgeName'){this._iterationOrder.sortRange(compareNodeAndEdge,leftBound,rightBound,windowLeft,windowRight);}else{this._iterationOrder.sortRange(compareNodeAndNode,leftBound,rightBound,windowLeft,windowRight);}}}
class HeapSnapshotNodesProvider extends HeapSnapshotItemProvider{constructor(snapshot,nodeIndexes){const indexProvider=new HeapSnapshotNodeIndexProvider(snapshot);const it=new HeapSnapshotIndexRangeIterator(indexProvider,nodeIndexes);super(it,indexProvider);this.snapshot=snapshot;}
nodePosition(snapshotObjectId){this._createIterationOrder();const node=this.snapshot.createNode();let i=0;for(;i<this._iterationOrder.length;i++){node.nodeIndex=this._iterationOrder[i];if(node.id()===snapshotObjectId){break;}}
if(i===this._iterationOrder.length){return-1;}
const targetNodeIndex=this._iterationOrder[i];let smallerCount=0;const compare=this._buildCompareFunction(this._currentComparator);for(let i=0;i<this._iterationOrder.length;i++){if(compare(this._iterationOrder[i],targetNodeIndex)<0){++smallerCount;}}
return smallerCount;}
_buildCompareFunction(comparator){const nodeA=this.snapshot.createNode();const nodeB=this.snapshot.createNode();const fieldAccessor1=nodeA[comparator.fieldName1];const fieldAccessor2=nodeA[comparator.fieldName2];const ascending1=comparator.ascending1?1:-1;const ascending2=comparator.ascending2?1:-1;function sortByNodeField(fieldAccessor,ascending){const valueA=fieldAccessor.call(nodeA);const valueB=fieldAccessor.call(nodeB);return valueA<valueB?-ascending:(valueA>valueB?ascending:0);}
function sortByComparator(indexA,indexB){nodeA.nodeIndex=indexA;nodeB.nodeIndex=indexB;let result=sortByNodeField(fieldAccessor1,ascending1);if(result===0){result=sortByNodeField(fieldAccessor2,ascending2);}
return result||indexA-indexB;}
return sortByComparator;}
sort(comparator,leftBound,rightBound,windowLeft,windowRight){this._iterationOrder.sortRange(this._buildCompareFunction(comparator),leftBound,rightBound,windowLeft,windowRight);}}
class JSHeapSnapshot extends HeapSnapshot{constructor(profile,progress){super(profile,progress);this._nodeFlags={canBeQueried:1,detachedDOMTreeNode:2,pageObject:4};this._lazyStringCache={};this.initialize();}
createNode(nodeIndex){return new JSHeapSnapshotNode(this,nodeIndex===undefined?-1:nodeIndex);}
createEdge(edgeIndex){return new JSHeapSnapshotEdge(this,edgeIndex);}
createRetainingEdge(retainerIndex){return new JSHeapSnapshotRetainerEdge(this,retainerIndex);}
containmentEdgesFilter(){return edge=>!edge.isInvisible();}
retainingEdgesFilter(){const containmentEdgesFilter=this.containmentEdgesFilter();function filter(edge){return containmentEdgesFilter(edge)&&!edge.node().isRoot()&&!edge.isWeak();}
return filter;}
calculateFlags(){this._flags=new Uint32Array(this.nodeCount);this._markDetachedDOMTreeNodes();this._markQueriableHeapObjects();this._markPageOwnedNodes();}
calculateDistances(){function filter(node,edge){if(node.isHidden()){return edge.name()!=='sloppy_function_map'||node.rawName()!=='system / NativeContext';}
if(node.isArray()){if(node.rawName()!=='(map descriptors)'){return true;}
const index=edge.name();return index<2||(index%3)!==1;}
return true;}
super.calculateDistances(filter);}
isUserRoot(node){return node.isUserRoot()||node.isDocumentDOMTreesRoot();}
userObjectsMapAndFlag(){return{map:this._flags,flag:this._nodeFlags.pageObject};}
_flagsOfNode(node){return this._flags[node.nodeIndex/this._nodeFieldCount];}
_markDetachedDOMTreeNodes(){const nodes=this.nodes;const nodesLength=nodes.length;const nodeFieldCount=this._nodeFieldCount;const nodeNativeType=this._nodeNativeType;const nodeTypeOffset=this._nodeTypeOffset;const flag=this._nodeFlags.detachedDOMTreeNode;const node=this.rootNode();for(let nodeIndex=0,ordinal=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount,ordinal++){const nodeType=nodes[nodeIndex+nodeTypeOffset];if(nodeType!==nodeNativeType){continue;}
node.nodeIndex=nodeIndex;if(node.name().startsWith('Detached ')){this._flags[ordinal]|=flag;}}}
_markQueriableHeapObjects(){const flag=this._nodeFlags.canBeQueried;const hiddenEdgeType=this._edgeHiddenType;const internalEdgeType=this._edgeInternalType;const invisibleEdgeType=this._edgeInvisibleType;const weakEdgeType=this._edgeWeakType;const edgeToNodeOffset=this._edgeToNodeOffset;const edgeTypeOffset=this._edgeTypeOffset;const edgeFieldsCount=this._edgeFieldsCount;const containmentEdges=this.containmentEdges;const nodeFieldCount=this._nodeFieldCount;const firstEdgeIndexes=this._firstEdgeIndexes;const flags=this._flags;const list=[];for(let iter=this.rootNode().edges();iter.hasNext();iter.next()){if(iter.edge.node().isUserRoot()){list.push(iter.edge.node().nodeIndex/nodeFieldCount);}}
while(list.length){const nodeOrdinal=list.pop();if(flags[nodeOrdinal]&flag){continue;}
flags[nodeOrdinal]|=flag;const beginEdgeIndex=firstEdgeIndexes[nodeOrdinal];const endEdgeIndex=firstEdgeIndexes[nodeOrdinal+1];for(let edgeIndex=beginEdgeIndex;edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const childNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];const childNodeOrdinal=childNodeIndex/nodeFieldCount;if(flags[childNodeOrdinal]&flag){continue;}
const type=containmentEdges[edgeIndex+edgeTypeOffset];if(type===hiddenEdgeType||type===invisibleEdgeType||type===internalEdgeType||type===weakEdgeType){continue;}
list.push(childNodeOrdinal);}}}
_markPageOwnedNodes(){const edgeShortcutType=this._edgeShortcutType;const edgeElementType=this._edgeElementType;const edgeToNodeOffset=this._edgeToNodeOffset;const edgeTypeOffset=this._edgeTypeOffset;const edgeFieldsCount=this._edgeFieldsCount;const edgeWeakType=this._edgeWeakType;const firstEdgeIndexes=this._firstEdgeIndexes;const containmentEdges=this.containmentEdges;const nodeFieldCount=this._nodeFieldCount;const nodesCount=this.nodeCount;const flags=this._flags;const pageObjectFlag=this._nodeFlags.pageObject;const nodesToVisit=new Uint32Array(nodesCount);let nodesToVisitLength=0;const rootNodeOrdinal=this._rootNodeIndex/nodeFieldCount;const node=this.rootNode();for(let edgeIndex=firstEdgeIndexes[rootNodeOrdinal],endEdgeIndex=firstEdgeIndexes[rootNodeOrdinal+1];edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];const nodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];if(edgeType===edgeElementType){node.nodeIndex=nodeIndex;if(!node.isDocumentDOMTreesRoot()){continue;}}else if(edgeType!==edgeShortcutType){continue;}
const nodeOrdinal=nodeIndex/nodeFieldCount;nodesToVisit[nodesToVisitLength++]=nodeOrdinal;flags[nodeOrdinal]|=pageObjectFlag;}
while(nodesToVisitLength){const nodeOrdinal=nodesToVisit[--nodesToVisitLength];const beginEdgeIndex=firstEdgeIndexes[nodeOrdinal];const endEdgeIndex=firstEdgeIndexes[nodeOrdinal+1];for(let edgeIndex=beginEdgeIndex;edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const childNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];const childNodeOrdinal=childNodeIndex/nodeFieldCount;if(flags[childNodeOrdinal]&pageObjectFlag){continue;}
const type=containmentEdges[edgeIndex+edgeTypeOffset];if(type===edgeWeakType){continue;}
nodesToVisit[nodesToVisitLength++]=childNodeOrdinal;flags[childNodeOrdinal]|=pageObjectFlag;}}}
calculateStatistics(){const nodeFieldCount=this._nodeFieldCount;const nodes=this.nodes;const nodesLength=nodes.length;const nodeTypeOffset=this._nodeTypeOffset;const nodeSizeOffset=this._nodeSelfSizeOffset;const nodeNativeType=this._nodeNativeType;const nodeCodeType=this._nodeCodeType;const nodeConsStringType=this._nodeConsStringType;const nodeSlicedStringType=this._nodeSlicedStringType;const distances=this._nodeDistances;let sizeNative=0;let sizeCode=0;let sizeStrings=0;let sizeJSArrays=0;let sizeSystem=0;const node=this.rootNode();for(let nodeIndex=0;nodeIndex<nodesLength;nodeIndex+=nodeFieldCount){const nodeSize=nodes[nodeIndex+nodeSizeOffset];const ordinal=nodeIndex/nodeFieldCount;if(distances[ordinal]>=HeapSnapshotModel.baseSystemDistance){sizeSystem+=nodeSize;continue;}
const nodeType=nodes[nodeIndex+nodeTypeOffset];node.nodeIndex=nodeIndex;if(nodeType===nodeNativeType){sizeNative+=nodeSize;}else if(nodeType===nodeCodeType){sizeCode+=nodeSize;}else if(nodeType===nodeConsStringType||nodeType===nodeSlicedStringType||node.type()==='string'){sizeStrings+=nodeSize;}else if(node.name()==='Array'){sizeJSArrays+=this._calculateArraySize(node);}}
this._statistics=new HeapSnapshotModel.Statistics();this._statistics.total=this.totalSize;this._statistics.v8heap=this.totalSize-sizeNative;this._statistics.native=sizeNative;this._statistics.code=sizeCode;this._statistics.jsArrays=sizeJSArrays;this._statistics.strings=sizeStrings;this._statistics.system=sizeSystem;}
_calculateArraySize(node){let size=node.selfSize();const beginEdgeIndex=node.edgeIndexesStart();const endEdgeIndex=node.edgeIndexesEnd();const containmentEdges=this.containmentEdges;const strings=this.strings;const edgeToNodeOffset=this._edgeToNodeOffset;const edgeTypeOffset=this._edgeTypeOffset;const edgeNameOffset=this._edgeNameOffset;const edgeFieldsCount=this._edgeFieldsCount;const edgeInternalType=this._edgeInternalType;for(let edgeIndex=beginEdgeIndex;edgeIndex<endEdgeIndex;edgeIndex+=edgeFieldsCount){const edgeType=containmentEdges[edgeIndex+edgeTypeOffset];if(edgeType!==edgeInternalType){continue;}
const edgeName=strings[containmentEdges[edgeIndex+edgeNameOffset]];if(edgeName!=='elements'){continue;}
const elementsNodeIndex=containmentEdges[edgeIndex+edgeToNodeOffset];node.nodeIndex=elementsNodeIndex;if(node.retainersCount()===1){size+=node.selfSize();}
break;}
return size;}
getStatistics(){return this._statistics;}}
class JSHeapSnapshotNode extends HeapSnapshotNode{constructor(snapshot,nodeIndex){super(snapshot,nodeIndex);}
canBeQueried(){const flags=this._snapshot._flagsOfNode(this);return!!(flags&this._snapshot._nodeFlags.canBeQueried);}
rawName(){return super.name();}
name(){const snapshot=this._snapshot;if(this.rawType()===snapshot._nodeConsStringType){let string=snapshot._lazyStringCache[this.nodeIndex];if(typeof string==='undefined'){string=this._consStringName();snapshot._lazyStringCache[this.nodeIndex]=string;}
return string;}
return this.rawName();}
_consStringName(){const snapshot=this._snapshot;const consStringType=snapshot._nodeConsStringType;const edgeInternalType=snapshot._edgeInternalType;const edgeFieldsCount=snapshot._edgeFieldsCount;const edgeToNodeOffset=snapshot._edgeToNodeOffset;const edgeTypeOffset=snapshot._edgeTypeOffset;const edgeNameOffset=snapshot._edgeNameOffset;const strings=snapshot.strings;const edges=snapshot.containmentEdges;const firstEdgeIndexes=snapshot._firstEdgeIndexes;const nodeFieldCount=snapshot._nodeFieldCount;const nodeTypeOffset=snapshot._nodeTypeOffset;const nodeNameOffset=snapshot._nodeNameOffset;const nodes=snapshot.nodes;const nodesStack=[];nodesStack.push(this.nodeIndex);let name='';while(nodesStack.length&&name.length<1024){const nodeIndex=nodesStack.pop();if(nodes[nodeIndex+nodeTypeOffset]!==consStringType){name+=strings[nodes[nodeIndex+nodeNameOffset]];continue;}
const nodeOrdinal=nodeIndex/nodeFieldCount;const beginEdgeIndex=firstEdgeIndexes[nodeOrdinal];const endEdgeIndex=firstEdgeIndexes[nodeOrdinal+1];let firstNodeIndex=0;let secondNodeIndex=0;for(let edgeIndex=beginEdgeIndex;edgeIndex<endEdgeIndex&&(!firstNodeIndex||!secondNodeIndex);edgeIndex+=edgeFieldsCount){const edgeType=edges[edgeIndex+edgeTypeOffset];if(edgeType===edgeInternalType){const edgeName=strings[edges[edgeIndex+edgeNameOffset]];if(edgeName==='first'){firstNodeIndex=edges[edgeIndex+edgeToNodeOffset];}else if(edgeName==='second'){secondNodeIndex=edges[edgeIndex+edgeToNodeOffset];}}}
nodesStack.push(secondNodeIndex);nodesStack.push(firstNodeIndex);}
return name;}
className(){const type=this.type();switch(type){case'hidden':return'(system)';case'object':case'native':return this.name();case'code':return'(compiled code)';default:return'('+type+')';}}
classIndex(){const snapshot=this._snapshot;const nodes=snapshot.nodes;const type=nodes[this.nodeIndex+snapshot._nodeTypeOffset];if(type===snapshot._nodeObjectType||type===snapshot._nodeNativeType){return nodes[this.nodeIndex+snapshot._nodeNameOffset];}
return-1-type;}
id(){const snapshot=this._snapshot;return snapshot.nodes[this.nodeIndex+snapshot._nodeIdOffset];}
isHidden(){return this.rawType()===this._snapshot._nodeHiddenType;}
isArray(){return this.rawType()===this._snapshot._nodeArrayType;}
isSynthetic(){return this.rawType()===this._snapshot._nodeSyntheticType;}
isUserRoot(){return!this.isSynthetic();}
isDocumentDOMTreesRoot(){return this.isSynthetic()&&this.name()==='(Document DOM trees)';}
serialize(){const result=super.serialize();const flags=this._snapshot._flagsOfNode(this);if(flags&this._snapshot._nodeFlags.canBeQueried){result.canBeQueried=true;}
if(flags&this._snapshot._nodeFlags.detachedDOMTreeNode){result.detachedDOMTreeNode=true;}
return result;}}
class JSHeapSnapshotEdge extends HeapSnapshotEdge{constructor(snapshot,edgeIndex){super(snapshot,edgeIndex);}
clone(){const snapshot=(this._snapshot);return new JSHeapSnapshotEdge(snapshot,this.edgeIndex);}
hasStringName(){if(!this.isShortcut()){return this._hasStringName();}
return isNaN(parseInt(this._name(),10));}
isElement(){return this.rawType()===this._snapshot._edgeElementType;}
isHidden(){return this.rawType()===this._snapshot._edgeHiddenType;}
isWeak(){return this.rawType()===this._snapshot._edgeWeakType;}
isInternal(){return this.rawType()===this._snapshot._edgeInternalType;}
isInvisible(){return this.rawType()===this._snapshot._edgeInvisibleType;}
isShortcut(){return this.rawType()===this._snapshot._edgeShortcutType;}
name(){const name=this._name();if(!this.isShortcut()){return String(name);}
const numName=parseInt(name,10);return String(isNaN(numName)?name:numName);}
toString(){const name=this.name();switch(this.type()){case'context':return'->'+name;case'element':return'['+name+']';case'weak':return'[['+name+']]';case'property':return name.indexOf(' ')===-1?'.'+name:'["'+name+'"]';case'shortcut':if(typeof name==='string'){return name.indexOf(' ')===-1?'.'+name:'["'+name+'"]';}else{return'['+name+']';}
case'internal':case'hidden':case'invisible':return'{'+name+'}';}
return'?'+name+'?';}
_hasStringName(){const type=this.rawType();const snapshot=this._snapshot;return type!==snapshot._edgeElementType&&type!==snapshot._edgeHiddenType;}
_name(){return this._hasStringName()?this._snapshot.strings[this._nameOrIndex()]:this._nameOrIndex();}
_nameOrIndex(){return this._edges[this.edgeIndex+this._snapshot._edgeNameOffset];}
rawType(){return this._edges[this.edgeIndex+this._snapshot._edgeTypeOffset];}}
class JSHeapSnapshotRetainerEdge extends HeapSnapshotRetainerEdge{constructor(snapshot,retainerIndex){super(snapshot,retainerIndex);}
clone(){const snapshot=(this._snapshot);return new JSHeapSnapshotRetainerEdge(snapshot,this.retainerIndex());}
isHidden(){return this._edge().isHidden();}
isInternal(){return this._edge().isInternal();}
isInvisible(){return this._edge().isInvisible();}
isShortcut(){return this._edge().isShortcut();}
isWeak(){return this._edge().isWeak();}}
(function disableLoggingForTest(){if(self.Root&&self.Root.Runtime&&Root.Runtime.queryParam('test')){console.warn=()=>undefined;}})();self.HeapSnapshotWorker=self.HeapSnapshotWorker||{};HeapSnapshotWorker=HeapSnapshotWorker||{};HeapSnapshotWorker.HeapSnapshotItem=HeapSnapshotItem;HeapSnapshotWorker.HeapSnapshotEdge=HeapSnapshotEdge;HeapSnapshotWorker.HeapSnapshotItemIterator=HeapSnapshotItemIterator;HeapSnapshotWorker.HeapSnapshotItemIndexProvider=HeapSnapshotItemIndexProvider;HeapSnapshotWorker.HeapSnapshotNodeIndexProvider=HeapSnapshotNodeIndexProvider;HeapSnapshotWorker.HeapSnapshotEdgeIndexProvider=HeapSnapshotEdgeIndexProvider;HeapSnapshotWorker.HeapSnapshotRetainerEdgeIndexProvider=HeapSnapshotRetainerEdgeIndexProvider;HeapSnapshotWorker.HeapSnapshotEdgeIterator=HeapSnapshotEdgeIterator;HeapSnapshotWorker.HeapSnapshotRetainerEdge=HeapSnapshotRetainerEdge;HeapSnapshotWorker.HeapSnapshotRetainerEdgeIterator=HeapSnapshotRetainerEdgeIterator;HeapSnapshotWorker.HeapSnapshotNode=HeapSnapshotNode;HeapSnapshotWorker.HeapSnapshotNodeIterator=HeapSnapshotNodeIterator;HeapSnapshotWorker.HeapSnapshotIndexRangeIterator=HeapSnapshotIndexRangeIterator;HeapSnapshotWorker.HeapSnapshotFilteredIterator=HeapSnapshotFilteredIterator;HeapSnapshotWorker.HeapSnapshotProgress=HeapSnapshotProgress;HeapSnapshotWorker.HeapSnapshotProblemReport=HeapSnapshotProblemReport;HeapSnapshotWorker.HeapSnapshot=HeapSnapshot;HeapSnapshotWorker.HeapSnapshotHeader=HeapSnapshotHeader;HeapSnapshotWorker.HeapSnapshotItemProvider=HeapSnapshotItemProvider;HeapSnapshotWorker.HeapSnapshotEdgesProvider=HeapSnapshotEdgesProvider;HeapSnapshotWorker.HeapSnapshotNodesProvider=HeapSnapshotNodesProvider;HeapSnapshotWorker.JSHeapSnapshot=JSHeapSnapshot;HeapSnapshotWorker.JSHeapSnapshotNode=JSHeapSnapshotNode;HeapSnapshotWorker.JSHeapSnapshotEdge=JSHeapSnapshotEdge;HeapSnapshotWorker.JSHeapSnapshotRetainerEdge=JSHeapSnapshotRetainerEdge;HeapSnapshotWorker.HeapSnapshot.AggregatedInfo;class HeapSnapshotLoader{constructor(dispatcher){this._reset();this._progress=new HeapSnapshotWorker.HeapSnapshotProgress(dispatcher);this._buffer='';this._dataCallback=null;this._done=false;this._parseInput();}
dispose(){this._reset();}
_reset(){this._json='';this._snapshot={};}
close(){this._done=true;if(this._dataCallback){this._dataCallback('');}}
buildSnapshot(){this._progress.updateStatus(ls`Processing snapshot\u2026`);const result=new HeapSnapshotWorker.JSHeapSnapshot(this._snapshot,this._progress);this._reset();return result;}
_parseUintArray(){let index=0;const char0='0'.charCodeAt(0);const char9='9'.charCodeAt(0);const closingBracket=']'.charCodeAt(0);const length=this._json.length;while(true){while(index<length){const code=this._json.charCodeAt(index);if(char0<=code&&code<=char9){break;}else if(code===closingBracket){this._json=this._json.slice(index+1);return false;}
++index;}
if(index===length){this._json='';return true;}
let nextNumber=0;const startIndex=index;while(index<length){const code=this._json.charCodeAt(index);if(char0>code||code>char9){break;}
nextNumber*=10;nextNumber+=(code-char0);++index;}
if(index===length){this._json=this._json.slice(startIndex);return true;}
this._array[this._arrayIndex++]=nextNumber;}}
_parseStringsArray(){this._progress.updateStatus(ls`Parsing strings\u2026`);const closingBracketIndex=this._json.lastIndexOf(']');if(closingBracketIndex===-1){throw new Error('Incomplete JSON');}
this._json=this._json.slice(0,closingBracketIndex+1);this._snapshot.strings=JSON.parse(this._json);}
write(chunk){this._buffer+=chunk;if(!this._dataCallback){return;}
this._dataCallback(this._buffer);this._dataCallback=null;this._buffer='';}
_fetchChunk(){return this._done?Promise.resolve(this._buffer):new Promise(r=>this._dataCallback=r);}
async _findToken(token,startIndex){while(true){const pos=this._json.indexOf(token,startIndex||0);if(pos!==-1){return pos;}
startIndex=this._json.length-token.length+1;this._json+=await this._fetchChunk();}}
async _parseArray(name,title,length){const nameIndex=await this._findToken(name);const bracketIndex=await this._findToken('[',nameIndex);this._json=this._json.slice(bracketIndex+1);this._array=length?new Uint32Array(length):[];this._arrayIndex=0;while(this._parseUintArray()){this._progress.updateProgress(title,this._arrayIndex,this._array.length);this._json+=await this._fetchChunk();}
const result=this._array;this._array=null;return result;}
async _parseInput(){const snapshotToken='"snapshot"';const snapshotTokenIndex=await this._findToken(snapshotToken);if(snapshotTokenIndex===-1){throw new Error('Snapshot token not found');}
this._progress.updateStatus(ls`Loading snapshot info\u2026`);const json=this._json.slice(snapshotTokenIndex+snapshotToken.length+1);this._jsonTokenizer=new TextUtils.BalancedJSONTokenizer(metaJSON=>{this._json=this._jsonTokenizer.remainder();this._jsonTokenizer=null;this._snapshot.snapshot=(JSON.parse(metaJSON));});this._jsonTokenizer.write(json);while(this._jsonTokenizer){this._jsonTokenizer.write(await this._fetchChunk());}
this._snapshot.nodes=await this._parseArray('"nodes"',ls`Loading nodes\u2026 %d%%`,this._snapshot.snapshot.meta.node_fields.length*this._snapshot.snapshot.node_count);this._snapshot.edges=await this._parseArray('"edges"',ls`Loading edges\u2026 %d%%`,this._snapshot.snapshot.meta.edge_fields.length*this._snapshot.snapshot.edge_count);if(this._snapshot.snapshot.trace_function_count){this._snapshot.trace_function_infos=await this._parseArray('"trace_function_infos"',ls`Loading allocation traces\u2026 %d%%`,this._snapshot.snapshot.meta.trace_function_info_fields.length*this._snapshot.snapshot.trace_function_count);const thisTokenEndIndex=await this._findToken(':');const nextTokenIndex=await this._findToken('"',thisTokenEndIndex);const openBracketIndex=this._json.indexOf('[');const closeBracketIndex=this._json.lastIndexOf(']',nextTokenIndex);this._snapshot.trace_tree=JSON.parse(this._json.substring(openBracketIndex,closeBracketIndex+1));this._json=this._json.slice(closeBracketIndex+1);}
if(this._snapshot.snapshot.meta.sample_fields){this._snapshot.samples=await this._parseArray('"samples"',ls`Loading samples\u2026`);}
if(this._snapshot.snapshot.meta['location_fields']){this._snapshot.locations=await this._parseArray('"locations"',ls`Loading locations\u2026`);}else{this._snapshot.locations=[];}
this._progress.updateStatus(ls`Loading strings\u2026`);const stringsTokenIndex=await this._findToken('"strings"');const bracketIndex=await this._findToken('[',stringsTokenIndex);this._json=this._json.slice(bracketIndex);while(!this._done){this._json+=await this._fetchChunk();}
this._parseStringsArray();}}
self.HeapSnapshotWorker=self.HeapSnapshotWorker||{};HeapSnapshotWorker=HeapSnapshotWorker||{};HeapSnapshotWorker.HeapSnapshotLoader=HeapSnapshotLoader;class HeapSnapshotWorkerDispatcher{constructor(globalObject,postMessage){this._objects=[];this._global=globalObject;this._postMessage=postMessage;}
_findFunction(name){const path=name.split('.');let result=this._global;for(let i=0;i<path.length;++i){result=result[path[i]];}
return result;}
sendEvent(name,data){this._postMessage({eventName:name,data:data});}
dispatchMessage(event){const data=(event.data);const response={callId:data.callId};try{switch(data.disposition){case'create':const constructorFunction=this._findFunction(data.methodName);this._objects[data.objectId]=new constructorFunction(this);break;case'dispose':delete this._objects[data.objectId];break;case'getter':{const object=this._objects[data.objectId];const result=object[data.methodName];response.result=result;break;}
case'factory':{const object=this._objects[data.objectId];const result=object[data.methodName].apply(object,data.methodArguments);if(result){this._objects[data.newObjectId]=result;}
response.result=!!result;break;}
case'method':{const object=this._objects[data.objectId];response.result=object[data.methodName].apply(object,data.methodArguments);break;}
case'evaluateForTest':try{response.result=self.eval(data.source);}catch(e){response.result=e.toString();}
break;}}catch(e){response.error=e.toString();response.errorCallStack=e.stack;if(data.methodName){response.errorMethodName=data.methodName;}}
this._postMessage(response);}}
self.HeapSnapshotWorker=self.HeapSnapshotWorker||{};HeapSnapshotWorker=HeapSnapshotWorker||{};HeapSnapshotWorker.HeapSnapshotWorkerDispatcher=HeapSnapshotWorkerDispatcher;function postMessageWrapper(message){postMessage(message);}
const dispatcher=new HeapSnapshotWorker.HeapSnapshotWorkerDispatcher(self,postMessageWrapper);function installMessageEventListener(listener){self.addEventListener('message',listener,false);}
installMessageEventListener(dispatcher.dispatchMessage.bind(dispatcher));if(!self.Root||!self.Root.Runtime){self.importScripts('Runtime.js');}
Root.Runtime.startWorker('heap_snapshot_worker');}());;(function() {
    /*
 * Copyright (C) 2012 Google Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above
 * copyright notice, this list of conditions and the following disclaimer
 * in the documentation and/or other materials provided with the
 * distribution.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

function defineCommonExtensionSymbols(apiPrivate) {
  if (!apiPrivate.panels) {
    apiPrivate.panels = {};
  }
  apiPrivate.panels.SearchAction = {
    CancelSearch: 'cancelSearch',
    PerformSearch: 'performSearch',
    NextSearchResult: 'nextSearchResult',
    PreviousSearchResult: 'previousSearchResult'
  };

  /** @enum {string} */
  apiPrivate.Events = {
    ButtonClicked: 'button-clicked-',
    PanelObjectSelected: 'panel-objectSelected-',
    NetworkRequestFinished: 'network-request-finished',
    OpenResource: 'open-resource',
    PanelSearch: 'panel-search-',
    RecordingStarted: 'trace-recording-started-',
    RecordingStopped: 'trace-recording-stopped-',
    ResourceAdded: 'resource-added',
    ResourceContentCommitted: 'resource-content-committed',
    ViewShown: 'view-shown-',
    ViewHidden: 'view-hidden-'
  };

  /** @enum {string} */
  apiPrivate.Commands = {
    AddRequestHeaders: 'addRequestHeaders',
    AddTraceProvider: 'addTraceProvider',
    ApplyStyleSheet: 'applyStyleSheet',
    CompleteTraceSession: 'completeTraceSession',
    CreatePanel: 'createPanel',
    CreateSidebarPane: 'createSidebarPane',
    CreateToolbarButton: 'createToolbarButton',
    EvaluateOnInspectedPage: 'evaluateOnInspectedPage',
    ForwardKeyboardEvent: '_forwardKeyboardEvent',
    GetHAR: 'getHAR',
    GetPageResources: 'getPageResources',
    GetRequestContent: 'getRequestContent',
    GetResourceContent: 'getResourceContent',
    InspectedURLChanged: 'inspectedURLChanged',
    OpenResource: 'openResource',
    Reload: 'Reload',
    Subscribe: 'subscribe',
    SetOpenResourceHandler: 'setOpenResourceHandler',
    SetResourceContent: 'setResourceContent',
    SetSidebarContent: 'setSidebarContent',
    SetSidebarHeight: 'setSidebarHeight',
    SetSidebarPage: 'setSidebarPage',
    ShowPanel: 'showPanel',
    Unsubscribe: 'unsubscribe',
    UpdateButton: 'updateButton'
  };
}

/**
 * @param {!ExtensionDescriptor} extensionInfo
 * @param {string} inspectedTabId
 * @param {string} themeName
 * @param {!Array<number>} keysToForward
 * @param {number} injectedScriptId
 * @param {function(!Object, !Object)} testHook
 * @suppressGlobalPropertiesCheck
 */
self.injectedExtensionAPI = function(
    extensionInfo, inspectedTabId, themeName, keysToForward, testHook, injectedScriptId) {
  const keysToForwardSet = new Set(keysToForward);
  const chrome = window.chrome || {};
  const devtools_descriptor = Object.getOwnPropertyDescriptor(chrome, 'devtools');
  if (devtools_descriptor) {
    return;
  }

  const apiPrivate = {};

  defineCommonExtensionSymbols(apiPrivate);

  const commands = apiPrivate.Commands;
  const events = apiPrivate.Events;
  let userAction = false;

  // Here and below, all constructors are private to API implementation.
  // For a public type Foo, if internal fields are present, these are on
  // a private FooImpl type, an instance of FooImpl is used in a closure
  // by Foo consutrctor to re-bind publicly exported members to an instance
  // of Foo.

  /**
   * @constructor
   */
  function EventSinkImpl(type, customDispatch) {
    this._type = type;
    this._listeners = [];
    this._customDispatch = customDispatch;
  }

  EventSinkImpl.prototype = {
    addListener: function(callback) {
      if (typeof callback !== 'function') {
        throw 'addListener: callback is not a function';
      }
      if (this._listeners.length === 0) {
        extensionServer.sendRequest({command: commands.Subscribe, type: this._type});
      }
      this._listeners.push(callback);
      extensionServer.registerHandler('notify-' + this._type, this._dispatch.bind(this));
    },

    removeListener: function(callback) {
      const listeners = this._listeners;

      for (let i = 0; i < listeners.length; ++i) {
        if (listeners[i] === callback) {
          listeners.splice(i, 1);
          break;
        }
      }
      if (this._listeners.length === 0) {
        extensionServer.sendRequest({command: commands.Unsubscribe, type: this._type});
      }
    },

    /**
     * @param {...} vararg
     */
    _fire: function(vararg) {
      const listeners = this._listeners.slice();
      for (let i = 0; i < listeners.length; ++i) {
        listeners[i].apply(null, arguments);
      }
    },

    _dispatch: function(request) {
      if (this._customDispatch) {
        this._customDispatch.call(this, request);
      } else {
        this._fire.apply(this, request.arguments);
      }
    }
  };

  /**
   * @constructor
   */
  function InspectorExtensionAPI() {
    this.inspectedWindow = new InspectedWindow();
    this.panels = new Panels();
    this.network = new Network();
    this.timeline = new Timeline();
    defineDeprecatedProperty(this, 'webInspector', 'resources', 'network');
  }

  /**
   * @constructor
   */
  function Network() {
    /**
     * @this {EventSinkImpl}
     */
    function dispatchRequestEvent(message) {
      const request = message.arguments[1];
      request.__proto__ = new Request(message.arguments[0]);
      this._fire(request);
    }
    this.onRequestFinished = new EventSink(events.NetworkRequestFinished, dispatchRequestEvent);
    defineDeprecatedProperty(this, 'network', 'onFinished', 'onRequestFinished');
    this.onNavigated = new EventSink(events.InspectedURLChanged);
  }

  Network.prototype = {
    getHAR: function(callback) {
      function callbackWrapper(result) {
        const entries = (result && result.entries) || [];
        for (let i = 0; i < entries.length; ++i) {
          entries[i].__proto__ = new Request(entries[i]._requestId);
          delete entries[i]._requestId;
        }
        callback(result);
      }
      extensionServer.sendRequest({command: commands.GetHAR}, callback && callbackWrapper);
    },

    addRequestHeaders: function(headers) {
      extensionServer.sendRequest(
          {command: commands.AddRequestHeaders, headers: headers, extensionId: window.location.hostname});
    }
  };

  /**
   * @constructor
   */
  function RequestImpl(id) {
    this._id = id;
  }

  RequestImpl.prototype = {
    getContent: function(callback) {
      function callbackWrapper(response) {
        callback(response.content, response.encoding);
      }
      extensionServer.sendRequest({command: commands.GetRequestContent, id: this._id}, callback && callbackWrapper);
    }
  };

  /**
   * @constructor
   */
  function Panels() {
    const panels = {
      elements: new ElementsPanel(),
      sources: new SourcesPanel(),
    };

    function panelGetter(name) {
      return panels[name];
    }
    for (const panel in panels) {
      Object.defineProperty(this, panel, {get: panelGetter.bind(null, panel), enumerable: true});
    }
    this.applyStyleSheet = function(styleSheet) {
      extensionServer.sendRequest({command: commands.ApplyStyleSheet, styleSheet: styleSheet});
    };
  }

  Panels.prototype = {
    create: function(title, icon, page, callback) {
      const id = 'extension-panel-' + extensionServer.nextObjectId();
      const request = {command: commands.CreatePanel, id: id, title: title, icon: icon, page: page};
      extensionServer.sendRequest(request, callback && callback.bind(this, new ExtensionPanel(id)));
    },

    setOpenResourceHandler: function(callback) {
      const hadHandler = extensionServer.hasHandler(events.OpenResource);

      function callbackWrapper(message) {
        // Allow the panel to show itself when handling the event.
        userAction = true;
        try {
          callback.call(null, new Resource(message.resource), message.lineNumber);
        } finally {
          userAction = false;
        }
      }

      if (!callback) {
        extensionServer.unregisterHandler(events.OpenResource);
      } else {
        extensionServer.registerHandler(events.OpenResource, callbackWrapper);
      }

      // Only send command if we either removed an existing handler or added handler and had none before.
      if (hadHandler === !callback) {
        extensionServer.sendRequest({command: commands.SetOpenResourceHandler, 'handlerPresent': !!callback});
      }
    },

    openResource: function(url, lineNumber, callback) {
      extensionServer.sendRequest({command: commands.OpenResource, 'url': url, 'lineNumber': lineNumber}, callback);
    },

    get SearchAction() {
      return apiPrivate.panels.SearchAction;
    }
  };

  /**
   * @constructor
   */
  function ExtensionViewImpl(id) {
    this._id = id;

    /**
     * @this {EventSinkImpl}
     */
    function dispatchShowEvent(message) {
      const frameIndex = message.arguments[0];
      if (typeof frameIndex === 'number') {
        this._fire(window.parent.frames[frameIndex]);
      } else {
        this._fire();
      }
    }

    if (id) {
      this.onShown = new EventSink(events.ViewShown + id, dispatchShowEvent);
      this.onHidden = new EventSink(events.ViewHidden + id);
    }
  }

  /**
   * @constructor
   * @extends {ExtensionViewImpl}
   * @param {string} hostPanelName
   */
  function PanelWithSidebarImpl(hostPanelName) {
    ExtensionViewImpl.call(this, null);
    this._hostPanelName = hostPanelName;
    this.onSelectionChanged = new EventSink(events.PanelObjectSelected + hostPanelName);
  }

  PanelWithSidebarImpl.prototype = {
    createSidebarPane: function(title, callback) {
      const id = 'extension-sidebar-' + extensionServer.nextObjectId();
      const request = {command: commands.CreateSidebarPane, panel: this._hostPanelName, id: id, title: title};
      function callbackWrapper() {
        callback(new ExtensionSidebarPane(id));
      }
      extensionServer.sendRequest(request, callback && callbackWrapper);
    },

    __proto__: ExtensionViewImpl.prototype
  };

  function declareInterfaceClass(implConstructor) {
    return function() {
      const impl = {__proto__: implConstructor.prototype};
      implConstructor.apply(impl, arguments);
      populateInterfaceClass(this, impl);
    };
  }

  function defineDeprecatedProperty(object, className, oldName, newName) {
    let warningGiven = false;
    function getter() {
      if (!warningGiven) {
        console.warn(className + '.' + oldName + ' is deprecated. Use ' + className + '.' + newName + ' instead');
        warningGiven = true;
      }
      return object[newName];
    }
    object.__defineGetter__(oldName, getter);
  }

  function extractCallbackArgument(args) {
    const lastArgument = args[args.length - 1];
    return typeof lastArgument === 'function' ? lastArgument : undefined;
  }

  const Button = declareInterfaceClass(ButtonImpl);
  const EventSink = declareInterfaceClass(EventSinkImpl);
  const ExtensionPanel = declareInterfaceClass(ExtensionPanelImpl);
  const ExtensionSidebarPane = declareInterfaceClass(ExtensionSidebarPaneImpl);
  /**
   * @constructor
   * @param {string} hostPanelName
   */
  const PanelWithSidebarClass = declareInterfaceClass(PanelWithSidebarImpl);
  const Request = declareInterfaceClass(RequestImpl);
  const Resource = declareInterfaceClass(ResourceImpl);
  const TraceSession = declareInterfaceClass(TraceSessionImpl);

  class ElementsPanel extends PanelWithSidebarClass {
    constructor() {
      super('elements');
    }
  }

  class SourcesPanel extends PanelWithSidebarClass {
    constructor() {
      super('sources');
    }
  }

  /**
   * @constructor
   * @extends {ExtensionViewImpl}
   */
  function ExtensionPanelImpl(id) {
    ExtensionViewImpl.call(this, id);
    this.onSearch = new EventSink(events.PanelSearch + id);
  }

  ExtensionPanelImpl.prototype = {
    /**
     * @return {!Object}
     */
    createStatusBarButton: function(iconPath, tooltipText, disabled) {
      const id = 'button-' + extensionServer.nextObjectId();
      const request = {
        command: commands.CreateToolbarButton,
        panel: this._id,
        id: id,
        icon: iconPath,
        tooltip: tooltipText,
        disabled: !!disabled
      };
      extensionServer.sendRequest(request);
      return new Button(id);
    },

    show: function() {
      if (!userAction) {
        return;
      }

      const request = {command: commands.ShowPanel, id: this._id};
      extensionServer.sendRequest(request);
    },

    __proto__: ExtensionViewImpl.prototype
  };

  /**
   * @constructor
   * @extends {ExtensionViewImpl}
   */
  function ExtensionSidebarPaneImpl(id) {
    ExtensionViewImpl.call(this, id);
  }

  ExtensionSidebarPaneImpl.prototype = {
    setHeight: function(height) {
      extensionServer.sendRequest({command: commands.SetSidebarHeight, id: this._id, height: height});
    },

    setExpression: function(expression, rootTitle, evaluateOptions) {
      const request = {
        command: commands.SetSidebarContent,
        id: this._id,
        expression: expression,
        rootTitle: rootTitle,
        evaluateOnPage: true,
      };
      if (typeof evaluateOptions === 'object') {
        request.evaluateOptions = evaluateOptions;
      }
      extensionServer.sendRequest(request, extractCallbackArgument(arguments));
    },

    setObject: function(jsonObject, rootTitle, callback) {
      extensionServer.sendRequest(
          {command: commands.SetSidebarContent, id: this._id, expression: jsonObject, rootTitle: rootTitle}, callback);
    },

    setPage: function(page) {
      extensionServer.sendRequest({command: commands.SetSidebarPage, id: this._id, page: page});
    },

    __proto__: ExtensionViewImpl.prototype
  };

  /**
   * @constructor
   */
  function ButtonImpl(id) {
    this._id = id;
    this.onClicked = new EventSink(events.ButtonClicked + id);
  }

  ButtonImpl.prototype = {
    update: function(iconPath, tooltipText, disabled) {
      const request =
          {command: commands.UpdateButton, id: this._id, icon: iconPath, tooltip: tooltipText, disabled: !!disabled};
      extensionServer.sendRequest(request);
    }
  };

  /**
   * @constructor
   */
  function Timeline() {
  }

  Timeline.prototype = {
    /**
     * @param {string} categoryName
     * @param {string} categoryTooltip
     * @return {!TraceProvider}
     */
    addTraceProvider: function(categoryName, categoryTooltip) {
      const id = 'extension-trace-provider-' + extensionServer.nextObjectId();
      extensionServer.sendRequest(
          {command: commands.AddTraceProvider, id: id, categoryName: categoryName, categoryTooltip: categoryTooltip});
      return new TraceProvider(id);
    }
  };

  /**
   * @constructor
   * @param {string} id
   */
  function TraceSessionImpl(id) {
    this._id = id;
  }

  TraceSessionImpl.prototype = {
    /**
     * @param {string=} url
     * @param {number=} timeOffset
     */
    complete: function(url, timeOffset) {
      const request =
          {command: commands.CompleteTraceSession, id: this._id, url: url || '', timeOffset: timeOffset || 0};
      extensionServer.sendRequest(request);
    }
  };

  /**
   * @constructor
   * @param {string} id
   */
  function TraceProvider(id) {
    /**
     * @this {EventSinkImpl}
     */
    function dispatchRecordingStarted(message) {
      const sessionId = message.arguments[0];
      this._fire(new TraceSession(sessionId));
    }

    this.onRecordingStarted = new EventSink(events.RecordingStarted + id, dispatchRecordingStarted);
    this.onRecordingStopped = new EventSink(events.RecordingStopped + id);
  }

  /**
   * @constructor
   */
  function InspectedWindow() {
    /**
     * @this {EventSinkImpl}
     */
    function dispatchResourceEvent(message) {
      this._fire(new Resource(message.arguments[0]));
    }

    /**
     * @this {EventSinkImpl}
     */
    function dispatchResourceContentEvent(message) {
      this._fire(new Resource(message.arguments[0]), message.arguments[1]);
    }

    this.onResourceAdded = new EventSink(events.ResourceAdded, dispatchResourceEvent);
    this.onResourceContentCommitted = new EventSink(events.ResourceContentCommitted, dispatchResourceContentEvent);
  }

  InspectedWindow.prototype = {
    reload: function(optionsOrUserAgent) {
      let options = null;
      if (typeof optionsOrUserAgent === 'object') {
        options = optionsOrUserAgent;
      } else if (typeof optionsOrUserAgent === 'string') {
        options = {userAgent: optionsOrUserAgent};
        console.warn(
            'Passing userAgent as string parameter to inspectedWindow.reload() is deprecated. ' +
            'Use inspectedWindow.reload({ userAgent: value}) instead.');
      }
      extensionServer.sendRequest({command: commands.Reload, options: options});
    },

    /**
     * @return {?Object}
     */
    eval: function(expression, evaluateOptions) {
      const callback = extractCallbackArgument(arguments);
      function callbackWrapper(result) {
        if (result.isError || result.isException) {
          callback(undefined, result);
        } else {
          callback(result.value);
        }
      }
      const request = {command: commands.EvaluateOnInspectedPage, expression: expression};
      if (typeof evaluateOptions === 'object') {
        request.evaluateOptions = evaluateOptions;
      }
      extensionServer.sendRequest(request, callback && callbackWrapper);
      return null;
    },

    getResources: function(callback) {
      function wrapResource(resourceData) {
        return new Resource(resourceData);
      }
      function callbackWrapper(resources) {
        callback(resources.map(wrapResource));
      }
      extensionServer.sendRequest({command: commands.GetPageResources}, callback && callbackWrapper);
    }
  };

  /**
   * @constructor
   */
  function ResourceImpl(resourceData) {
    this._url = resourceData.url;
    this._type = resourceData.type;
  }

  ResourceImpl.prototype = {
    get url() {
      return this._url;
    },

    get type() {
      return this._type;
    },

    getContent: function(callback) {
      function callbackWrapper(response) {
        callback(response.content, response.encoding);
      }

      extensionServer.sendRequest({command: commands.GetResourceContent, url: this._url}, callback && callbackWrapper);
    },

    setContent: function(content, commit, callback) {
      extensionServer.sendRequest(
          {command: commands.SetResourceContent, url: this._url, content: content, commit: commit}, callback);
    }
  };

  function getTabId() {
    return inspectedTabId;
  }

  let keyboardEventRequestQueue = [];
  let forwardTimer = null;

  /**
   * @suppressGlobalPropertiesCheck
   */
  function forwardKeyboardEvent(event) {
    // Check if the event should be forwarded.
    // This is a workaround for crbug.com/923338.
    const focused = document.activeElement;
    if (focused) {
      const isInput = focused.nodeName === 'INPUT' || focused.nodeName === 'TEXTAREA';
      if (isInput && !(event.ctrlKey || event.altKey || event.metaKey)) {
        return;
      }
    }

    let modifiers = 0;
    if (event.shiftKey) {
      modifiers |= 1;
    }
    if (event.ctrlKey) {
      modifiers |= 2;
    }
    if (event.altKey) {
      modifiers |= 4;
    }
    if (event.metaKey) {
      modifiers |= 8;
    }
    const num = (event.keyCode & 255) | (modifiers << 8);
    // We only care about global hotkeys, not about random text
    if (!keysToForwardSet.has(num)) {
      return;
    }
    event.preventDefault();
    const requestPayload = {
      eventType: event.type,
      ctrlKey: event.ctrlKey,
      altKey: event.altKey,
      metaKey: event.metaKey,
      shiftKey: event.shiftKey,
      keyIdentifier: event.keyIdentifier,
      key: event.key,
      code: event.code,
      location: event.location,
      keyCode: event.keyCode
    };
    keyboardEventRequestQueue.push(requestPayload);
    if (!forwardTimer) {
      forwardTimer = setTimeout(forwardEventQueue, 0);
    }
  }

  function forwardEventQueue() {
    forwardTimer = null;
    const request = {command: commands.ForwardKeyboardEvent, entries: keyboardEventRequestQueue};
    extensionServer.sendRequest(request);
    keyboardEventRequestQueue = [];
  }

  document.addEventListener('keydown', forwardKeyboardEvent, false);

  /**
   * @constructor
   */
  function ExtensionServerClient() {
    this._callbacks = {};
    this._handlers = {};
    this._lastRequestId = 0;
    this._lastObjectId = 0;

    this.registerHandler('callback', this._onCallback.bind(this));

    const channel = new MessageChannel();
    this._port = channel.port1;
    this._port.addEventListener('message', this._onMessage.bind(this), false);
    this._port.start();

    window.parent.postMessage('registerExtension', '*', [channel.port2]);
  }

  ExtensionServerClient.prototype = {
    /**
     * @param {!Object} message
     * @param {function()=} callback
     */
    sendRequest: function(message, callback) {
      if (typeof callback === 'function') {
        message.requestId = this._registerCallback(callback);
      }
      this._port.postMessage(message);
    },

    /**
     * @return {boolean}
     */
    hasHandler: function(command) {
      return !!this._handlers[command];
    },

    registerHandler: function(command, handler) {
      this._handlers[command] = handler;
    },

    unregisterHandler: function(command) {
      delete this._handlers[command];
    },

    /**
     * @return {string}
     */
    nextObjectId: function() {
      return injectedScriptId.toString() + '_' + ++this._lastObjectId;
    },

    _registerCallback: function(callback) {
      const id = ++this._lastRequestId;
      this._callbacks[id] = callback;
      return id;
    },

    _onCallback: function(request) {
      if (request.requestId in this._callbacks) {
        const callback = this._callbacks[request.requestId];
        delete this._callbacks[request.requestId];
        callback(request.result);
      }
    },

    _onMessage: function(event) {
      const request = event.data;
      const handler = this._handlers[request.command];
      if (handler) {
        handler.call(this, request);
      }
    }
  };

  function populateInterfaceClass(interfaze, implementation) {
    for (const member in implementation) {
      if (member.charAt(0) === '_') {
        continue;
      }
      let descriptor = null;
      // Traverse prototype chain until we find the owner.
      for (let owner = implementation; owner && !descriptor; owner = owner.__proto__) {
        descriptor = Object.getOwnPropertyDescriptor(owner, member);
      }
      if (!descriptor) {
        continue;
      }
      if (typeof descriptor.value === 'function') {
        interfaze[member] = descriptor.value.bind(implementation);
      } else if (typeof descriptor.get === 'function') {
        interfaze.__defineGetter__(member, descriptor.get.bind(implementation));
      } else {
        Object.defineProperty(interfaze, member, descriptor);
      }
    }
  }

  const extensionServer = new ExtensionServerClient();
  const coreAPI = new InspectorExtensionAPI();

  Object.defineProperty(chrome, 'devtools', {value: {}, enumerable: true});

  // Only expose tabId on chrome.devtools.inspectedWindow, not webInspector.inspectedWindow.
  chrome.devtools.inspectedWindow = {};
  Object.defineProperty(chrome.devtools.inspectedWindow, 'tabId', {get: getTabId});
  chrome.devtools.inspectedWindow.__proto__ = coreAPI.inspectedWindow;
  chrome.devtools.network = coreAPI.network;
  chrome.devtools.panels = coreAPI.panels;
  chrome.devtools.panels.themeName = themeName;

  // default to expose experimental APIs for now.
  if (extensionInfo.exposeExperimentalAPIs !== false) {
    chrome.experimental = chrome.experimental || {};
    chrome.experimental.devtools = chrome.experimental.devtools || {};

    const properties = Object.getOwnPropertyNames(coreAPI);
    for (let i = 0; i < properties.length; ++i) {
      const descriptor = Object.getOwnPropertyDescriptor(coreAPI, properties[i]);
      if (descriptor) {
        Object.defineProperty(chrome.experimental.devtools, properties[i], descriptor);
      }
    }
    chrome.experimental.devtools.inspectedWindow = chrome.devtools.inspectedWindow;
  }

  if (extensionInfo.exposeWebInspectorNamespace) {
    window.webInspector = coreAPI;
  }
  testHook(extensionServer, coreAPI);
};

/**
 * @param {!ExtensionDescriptor} extensionInfo
 * @param {string} inspectedTabId
 * @param {string} themeName
 * @param {!Array<number>} keysToForward
 * @param {function(!Object, !Object)|undefined} testHook
 * @return {string}
 */
self.buildExtensionAPIInjectedScript = function(extensionInfo, inspectedTabId, themeName, keysToForward, testHook) {
  const argumentsJSON = [extensionInfo, inspectedTabId || null, themeName, keysToForward].map(_ => JSON.stringify(_)).join(',');
  if (!testHook) {
    testHook = () => {};
  }
  return '(function(injectedScriptId){ ' + defineCommonExtensionSymbols.toString() + ';' +
      '(' + self.injectedExtensionAPI.toString() + ')(' + argumentsJSON + ',' + testHook + ', injectedScriptId);' +
      '})';
};

/* Legacy exported object */
self.Extensions = self.Extensions || {};

/* Legacy exported object */
Extensions = Extensions || {};

Extensions.extensionAPI = {};
defineCommonExtensionSymbols(Extensions.extensionAPI);

        var tabId;
        var extensionInfo = {};
        var extensionServer;
        platformExtensionAPI(self.injectedExtensionAPI("remote-" + window.parent.frames.length));
    })();asmҁ��`````~```~```````````~`~`~`~`}`|`~`~~`}`|`~`~����	wbg__wbindgen_object_drop_refwbg__wbg_new_8e4c496df8c98a76
wbg__wbindgen_object_clone_refwbg__wbindgen_string_newwbg__wbg_new_951e889c56bc7e3cwbg__wbg_push_36cde80dfc256d1dwbg__wbg_new_4d5ae649984849e5wbg__wbindgen_throwwbg__wbindgen_rethrow쁀��
		

		
			


			
		
		


				����pOO��������A�������	memory__wbg_resolver_free@resolver_from_slice	resolver_listFiles`resolver_listMappingsQresolver_resolve=resolver_resolveReverse3__wbindgen_malloc�__wbindgen_realloc�	����AN��;{��������y����S��]�������������a������������E|���K\�����~���q8�����4X�����
������</~#"! A�kA`q"$@@@@@@@�"E
 A8jA6 AjAjB7 AjAjA���6  )"1B|7 A6(  17  Aj)7  A�j  [ A�jAj! A�jAj(!@ (�AG
 A�j(! A�jAj(! (! A�jAj(!	 A�jAj(!
 (�!	  6�  	6� A�j A�j@ (�AF
 A�j!A!@@ -�"AG
@ 
A! A�j Aj A�jAj(! A�j(! A�jAj(! A�j(!	 A�jAj(!
 A�j(! (�!
 (�! A�j A�jA�� AF
 A�jAj 6 A�jAj 	6  6X  6P  
6H  6D  
6@ A�jAj A�jA��@A(��@"E
  )"1B|7 A�jA jB7 A�jAj"B�����7 Aj)!2 A�jA0jA6 B�����7�  17�  27� B7� A6�  )P7� A�j A�j& A�jAj/! A�jAj"(! A�jAj(! A�jAj"(!	 -�!
 -�!@@ (�AF
 A�jAj"(! (�!
 A�j! A�j! A�j! A�j! A�jA�j! A�j! A�j! A�j! A�j! A�j"Aj! A�j! A�j! A�j! A�jA�j! A�jA�j!  A�j!! A�jA8j!" A�jA0j!# A�jA j!$ A�jAj!% A�j!& A�jA(j!'A!(@@@@@@@@ A�qAF
  
:�  :�  ;�  6�  6�  	6�  
6� A�j A�jA  A�j@ )�BR
 A�j(! (�! (�! (�!	
 A�j A�� A�jAj" Aj-:  )7�  )7�  (6� )�!1 B-7� 1B-Q
 )!2 )!3 )!4 A�jA�j)!5 )!6  )!7 !)!8 ")!9 #)!: $)!; %)!< A�jAj)!= )�!> )�!? )�!@ -�! (�!	 A�jAj" -:  )�7�  )�7�  (�6� A6� A6�  6�  6�  )�7� A�j A�j -�AF
 (� (� A�j@@@@@ (�"AI
 (�"Aj!A!A!	@@ ("
( 	At j"A|j((F
@  	F
  (6  
6 	Aj!	 Aj!  Aj"G
 	 K
 	 (�"O
 At (�jA|j!@ c A|j! 	 Aj"G
 	!  6� (�"	E
 (�" 	Atj! Aj! A j!AЄ��@ ( ( A�j@ ("AI
 ("
Aj!A!A!	@@@ ("( 	At 
j"A|j("
(G
 ( 
(F
@  	F
  (6  6 	Aj!	 Aj!  Aj"G
 	 K
 	 ("O
 ( AtjA|j!@ c A|j! 	 Aj"G
 	!  6  F
 Aj! A j! A�jAj Aj)7 A�jAj Aj)7 A�jAj Aj)7  )7� A�j(!	 (�! (�! (�! (�!
 (�! AjJA!AЄ��@@@@@ (�AF
 A�j BH /�!
@ )�BR
 (�! (�!) (�!	 /�At 
r! >B ��!
 7B ��! 3B ��! 5B ��! (�"E
 )�!A A�j A "( (�@ (�E
 (Ar!	 >B ��!
 7B ��! 3B ��! 5B ��! 4�!
 3�! 6�! 5�! (�")E
@ (�"-"A/F
@ A�F
 )AF
 A�qA�jA�qAK
 -A:F
 )AF
 -A�G
 & 77 ' :7  >7 Aj 47  )�7 Aj )�7 A�jA�j 67 A�jA0j 97 Aj 37 A�jA�j 57 A�jA8j 87  ;7 Aj 2>  ?7�  @7�  17�  	6�  47�  >7�  =7�  37�  <7�  27�  2B ��"6� B7 AjB7 B7 AjB7 AjB7  (�6 Aj -:  :� B7� B7� A6�  6�  	6�  :� A�j A�j (�!	 (�AF
 A�~q!( (�! AB%R 
AGr�!2A!@@@@@@@ 
@ (�"E
 (� AtA�@ (�"E
 (� AtA�@ (�"E
 (� AtA�@ (�"E
 (� A8lA� A�jV A�j A�j& (�! -�!
 -�! /�! (�! (�! (�!	 (�!
 (�AG
@@@@@@@@@@ A�q"AK
@ A! 	)P
 	Aj)!1@@ /�AI
 (x 1�"M
 (p A8lj!
@ 1P
 (x 1�Aj"M
 (p A8lj!
 !
 )B,Q
 	Aj)"1P
 1B|"3B����Z
 	A j)"1PE
A!
 	A:j-E! A�j A�j (�!	 (�! (�AF
 1 2}"1B����Z
 1�!
 	)">B����Z
  )6�  6� A6� 
)!1@ /�AI
 (` 1�"K! (X Atj!@ 1P
 (` 1�Aj"K! (X Atj!@@ (�"
B,!1  6�  A�j(6�B!1  17�A���A+ A�jA���pA���A+ A�jA���pA���A+ A�jA���p A�j A  )�!1@ 1B,Q
 A�jAj A�jAj)7  )�7� A�j A�j A�j A�j) (�! (�! (�!@ (�AG
 (�! !		 A�j (� �@ (�E
 *AtAr!	 +!	  (�"+6�  (�":� A6�  Av:�  Av"*;� A�j A�j A�j 
' A�j A�j A�j A�j) (�!@ (�AG
 (�! (�! (�! !	 A�j (� �@ (�E
 ,AtAr!	 -!  (�"-6�  (�":� A6�  Av:�  Av",;� A�j A�j A�j A�j2 A�jAj A�jAj(6  )�7� A�j A�j A�j%@@@ (�AF
 (�"Aj(" (�"M
 ( AtjAj! (�"E
 (� A� )�!1 (�! (�! (�"
 (�".�!/@AA�"
AA�  /6 B����7  17�  .6�  6�  
6�  6� A6� B7�  6� A�j A�j<! ("(Aj"AM
  6A A�"E
 A6  
6  3�6  6  0 >�j6 B����7@ (�" (�G
 Aj"
 I
 At"
 
 
 
I"
A����q 
G
 
At"
AH
@@ 
 
A�! (� AtA 
�! E
  
6�  6� (�! (� Atj 6  (�Aj6�@ Aj(" Aj"
(G
 Aj"
 I
 At". 
 
 .I"
A����q 
G
 
At".AH
@@ 
 .A�! ( AtA .�! E
  6 
 
6 (! ( Atj 6  (Aj6 	A:j-!@ (�E
 (�"	E
 (� 	A�A  ! A�j A�j (�!	 (�! (�AF
	A�  vA A� 
A� .A��A؏�� (�E
 (�"E
 (� A� (�! (�! (�!@ (�"E
 (� AtA�@ (�"E
 (� AtA�@ (�"E
 (� AtA� (�"E
 (� A8lA�A܈�A!Ä�� (�! (�! (�!) (�!	 >B ��!
 7B ��! 3B ��! 5B ��! 4�!
 3�! 6�! 5�!@ E
  AtA�@ E
  AtA�@ 
E
 
 
AtA�@ E
  A8lA� )! A�jV A�jV A�j A�j& (�! -�!
 -�! /�! (�! (�! (�!	 (�!
 (�AG
 A�qAt A��qr 
Atr! A�jA(j!@ (�"
E
 (�! 
At!
@ c Aj! 
A|j"

@ Aj("E
 ( AtA� A�jAj!@ (�At"
E
 A�j( 
A� W (�"E
 (� AtA�A�A9 A�jA���p (�!
@@ AG
 
 k 0 -�A�qA
F"!0A  ! (�! (�! (�!@@@ (�"AF
 AI
 ,A@H
@ A���F
A��� A�
 )!1 ) !2 B7 AjB7  2B���˧�ٲ��7�  2B�ޑ��ܷ��7�  1B�����ټ��7�  1B��̓׬۷��7�  27�  17� A�j  . A�:@ A�j A�jA. 5�B8� )��"1 )��"2B� 2 )�|"2�"3 )�"> )�|"4B �|"5 1� 2 >B
� 4�"1|"2 1B��"1|"> 1B
��"1 3B� 5�"3 2B �B��|"2|"4 1B��"1B
� 1 3B� 2�"2 >B �|"3|"1�">B� > 2B� 3�"2 4B �|"3|">�"4B
� 4 2B� 3�"2 1B �|"1|�"3 2B� 1�"1 >B �|"2|"> 1B� 2�B�� 3B�� >B ��"1B��A�q"At r"At r!
A! (0! (,! ((" 1�")q"	!@@  j(" 
s"As A���wjqA����xq"E
@@@   hAv j qAlj"(G
 (" F
   �E
 Aj q"E
  6  
6 
 Aj" j q!  AtqA����xqE
  Aj6�@ (4
 AjAjA A�jA ((" )q!	 (,!A!@ 	" j q!	 Aj!  j(A����xq"
E
@  
hAv j q"j,"	AH
  (A����xqhAv"j-!	  (4 	Aqk64 (0!	  j : A|j q jAj : 	 Alj" 6  
6  6  6  6  (8Aj68 E
  A� A�j A�j (�AG
 (�!	 (�! (�! (�!A�A9 A�jA���pA! AjJ A�jAj 6 A�jAj 6 A�jAj 6 A�jAj 	6  
6�  6�  A�j6� A6H B7@ A6�  A�j6�  A�j6 A6 B7� A؎�6�  A�j6� AjA��� A�j
@@ (D" (H"	G
 (@!  	I
@ 	
@ E
 (@ A� B7@A!A! (@ A 	�"E
  	6D  6@ 	!  (H�!@ E
  A�A!@ E
  A� A�jAj"
 A�jAj)7 A�jAj" A�jAj)7 A�jAj" A�jAj)7  )�7�@@ 
 A�jAj 
)7 A�jAj )7 A�jAj )7  )�7�A�A�"
A�A� �  	6  6  6  6  
6  6 A6  )�7  A(j A�j)7 A0j A�j)7 A8j A�j)7 $ A�A7 A�jA�pA���� 	A��4~#A�k"$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E
 Aj! Aj! )! )!	 )"
!@@@ BQ
 B|"B+X
 B�A|"B V
+ �!
+++++++++++++++++++++++++++++
 A(j N )0! )(BR
 )8!	  7 B7 Aj 	7* A(j  Aj-T AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7* (,"A��|q! A��q!B!!A���AAv@@@@@@@ �,+-)(#"!'*$- 

	+B	!A!A!$ A(j N@@@ )(BR
  )17  A8j)7  )7  )7 -0!  )7  Aj)7A4! )0"B����T
  :  )7	 B7 Aj )7- �"A��|q! A��q!B!$ A(j N@@@ )(BR
  )17  A8j)7  )7  )7 -0!  )7  Aj)7A4! )0"B����T
  :  )7	 B7 Aj )7, �"A��|q! A��q!B!#@ ("AK
 A: B7 AjA: A	jA; Aj 57+  A|j6  ("Aj6 ("A��|q! A��q!B!" B7@ ("AI
  A}j6  ("Aj6  Aj-":
 / Atr"A���q! A��q!B!" 5! A6( 5)!	 3-! Aj 1/< A
j = A	j 	> Aj 7 A: B7)@ ("AK
 A: B7 AjA: A	jA; Aj 57)  A~j6  ("Aj6 /"A�~q!B!@ ("
 A: B7 AjA: A	jA; Aj 57(  Aj6  ("Aj6 -!B!A! A(j N@@@ )(BR
  )17  A8j)7  )7  )7 -0!  )7  Aj)7A4! )0"B����T
  :  )7	 B7 Aj )7' �"A��|q! A��q!B!@ ("AK
 A: B7 AjA: A	jA; Aj 57&  A|j6  ("Aj6 ("A��|q! A��q!B! B7@ ("AI
  A}j6  ("Aj6  Aj-":
 / Atr"A���q! A��q!B! 5! A6( 5)!	 3-! Aj 1/< A
j = A	j 	> Aj 7 A: B7$@ ("AK
 A: B7 AjA: A	jA; Aj 57$  A~j6  ("Aj6 /"A�~q!B!@ ("
 A: B7 AjA: A	jA; Aj 57#  Aj6  ("Aj6 -!B!A! A(j N@@@ )(BR
  )17  A8j)7  )7  )7 -0!  )7  Aj)7A4! )0"B����T
  :  )7	 B7 Aj )7" �"A��|q! A��q!B!@ 
B!R
 �"A��|q! A��q! B ��!B!A�A�A���� A(j  Aj-T AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7  (,"A��|q! A��q!B! A(j  Aj-T AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7 (,"A��|q! A��q!B! A(j  Aj-T AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7 (,"A��|q! A��q!B! A(j 5 AjAj" A(jAj(6  A4j)7 A(jAj(!@ ((AG
  6  )7 B7 Aj (6 (,"A��|q! A��q!B!@@@ ("AK
 5!A!A!  Axj6  ("Aj6 )"B����T
 B ��! B��!A4!  : B7 Aj Av: A	j ; Aj 7 Aj 6 �"A��|q! A��q!B!@ ("AK
 A: B7 AjA: A	jA; Aj 57  A|j6  ("Aj6 ("A��|q! A��q!B!@ ("AK
 B7 B7 Aj 57  Axj6  ("Aj6 )"�"A��|q! A��q! B ��!B!@@@ Aj/AF
 A(j  Aj-T AjAj" A(jAj)7  A(jAj)7 ((AF
 A(j  Aj-0 AjAj" A(jAj)7  A(jAj)7 ((AG
  )7 B7 Aj )7  )7 B7 Aj )7 (,"A��|q! A��q!B! A(j N@@@ )(BR
  )17  A8j)7  )7  )7 -0!  )7  Aj)7A4! )0"B����T
  :  )7	 B7 Aj )7 �"A��|q! A��q!B
!@@@ ("AK
 5!A!A!  Axj6  ("Aj6 )"B����T
 B ��! B��!A4!  : B7 Aj Av: A	j ; Aj 7 Aj 6 �"A��|q! A��q!B
!@ ("AK
 A: B7 AjA: A	jA; Aj 57  A|j6  ("Aj6 ("A��|q! A��q!B
!
@ ("AK
 A: B7 AjA: A	jA; Aj 57  A~j6  ("Aj6 /"A�~q!B
!@ ("
 A: B7 AjA: A	jA; Aj 57  Aj6  ("Aj6 -!B
!A!
 A(j  Aj-T AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7 (,"A��|q! A��q!B
!
@ ("
 A: B7 AjA: A	jA; Aj 57  Aj6  ("Aj6A! -AG!B	! A(j N@@@@@ )(BR
 51 A5j3 A7j1B��B ��! A8j)!	 -0! )0"B����T
A4!  :(  >) B��! ((! (" �"O
 5!	A!  6  6 B7 Aj 	7   k6  (" j6 A��|q! A��q!B! A(j Y (4! (0!@ )(BR
 A(jAj)!  6 B7 Aj 7 Aj 6 A��|q! A��q!B!
 A(j N (4! (0!@ )(BR
 A(jAj)!  6 B7 Aj 7 Aj 6 A��|q! A��q!B!@ ("AK
 A6 B7 Aj 57  Apj6A!  ("Aj6 A��|q! A��q!B!@@@ Aj-
 	 Aj/�E
 A(j AT AjAj" A(jAj)7  A(jAj)7 ((AG
  )7 B7 Aj )7@ ("AI
  Axj6  ("Aj6 )"B ��! �!B! A6 B7 Aj 57 (,!B
! A��q! A��|q!
@@ Aj-E
 	 Aj/�E
 A(j AT AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7 (,!B
!@ ("AO
 A: B7 AjA: A	jA; Aj 57
  A|j6  ("Aj6 (!B! A��q! A��|q!@ ("AK
 A: B7 AjA: A	jA; Aj 57  A~j6  ("Aj6 /"A�~q!B!@ ("
 A: B7 AjA: A	jA; Aj 57
  Aj6  ("Aj6 -!B!A!A! A(j N@@@@@ )(BR
 51 A5j3 A7j1B��B ��! A8j)!	 -0! )0"B����T
A4!  :(  >) B��! ((! (" �"O
 5!	A!  6  6 B7 Aj 	7   k6  (" j6 A��|q! A��q!B!@@@ ("AK
 (!  A|j"6  ("Aj"6  ("O
 A6 B7 Aj �7   k6   j6 A��|q! A��q!B!@@@ ("AK
 (!  A~j"6  ("Aj"6  /"O
 A6 B7 Aj �7   k6   j6 A��|q! A��q!B!@@@ ("
 (!  Aj"6  ("Aj"6  -"O
 A6 B7 Aj �7   k6   j6 A��|q! A��q!B! A(j  Aj-: (4! (0!@ )(BR
 A(jAj)!  6 B7 Aj 7 Aj 6 A��|q! A��q!B!  	7 B7 A$j 6 A j 6 Aj 6 Aj 7 Aj A�q A��qr r6 B7 A: A�j$�,!	~#A�k"$  ("	6  Aj("6@@  O
  (�6�  A�j(6� A:  (�6	 Aj (�6 Aj 	�7 B7   k6  	 j6 A�j BA!	 A�j-!
 (�!@@ (�AG
 A�j(! A�j(! 5� A�j3 A�j1B��B ��B�") 
��!*@ (" O
 (!B!)B!*A!A!	  ("	6x  6|   k6  	 j6@ AK
 A6� 5� 3� 1�B��B ��B�")B�!*A! 	!A!	  A~j"6|  	Aj"
6x@@@@@@@@@@@@@@@@@@@@ 	/"A~jA��qAK
@ AM
@ 
 A6� 5� 3� 1�B��B ��B�")B�!*A! 
!A!	  A}j"6|  	Aj"6x@ 
 A6� 5� 3� 1�B��B ��B�")B�!*A! !A!	 	-!  A|j6|  	Aj6x 	-E
B!)B�!*A!	 A�j A�j 
AGT@ (�AG
 A�j(! A�j(! A�j)"*B�~�!)A!	B!)B!* (x!	 (|" (�"I
  6|@ 
 A6� 5� 3� 1�B��B ��B�")B�!*  Aj"6|A!
  	Aj"6x@ 	-"
B!*A!	@ AI
@ 
 A6� 5� 3� 1�B��B ��B�")B�!*  A~j"6|  	Aj"6x 	-"

B!*A!	@ 
 A6� 5� 3� 1�B��B ��B�")B�!*  Aj"6|  Aj"6x@ 
 A6� 5� 3� 1�B��B ��B�")B�!* !A!A!	 -!  A~j"6|  Aj"6x@ 
 A6� 5� 3� 1�B��B ��B�")B�!* !A!A!	 -!  A}j"6|  Aj"6x@ -"
B!*A!	@ 
 A6� 5� 3� 1�B��B ��B�")B�!* !A!A!	  A|j"6|  Aj"6x@ -"
B!*A!	@  AjA�q"O
A! !A!	   k6|   j6x@@ AI
 A�j A�j/ (�AG
 A�j(! A�j(! )�!* A�j A�j5 A�jAj(! (�AF
 (�!A!A!A!A!A!@@ 
A!A!@  G
 Aj" I
 At"   I"A����q G
 At"AH
@@ 
 A�!  AtA �! E
 !  j" 6 Aj 6 AxjB7 Aj! Aj! A�j A�j5 (�! (�! (�AF
 A�j(! (�! (�! A�j A�jN )�!+ )�BR
 A�j)"*B ��! *�!
B!)B!*A! !A!	 A�@ +PE
A!A!A!A! E
 
At r Atr!  Atj!B!,A!A!A!@ ,B|!,B,!* !@@@ A�j A�j  ) )�!) )�!- )�BQ
 ) . Aj/AF"!. - * !* Aj" G
 *B,R
 )B ��! )�!@ E
  AtA� -!+@  G
 Aj" I
 At"   I"A����q G
 At"AH
@@ 
 A�!  AtA �! E
 !  Atj" .7  *7 Aj!A! , +R
 A6� B7�@@ AI
 A�j A�j/ (�AG
 A�j(! A�j(! )�!+
@@ 
B,!* A�jB7 A�jB7 A�jB7 A�jB7 B7�B!* A�jA j A�jA j)7 A�jAj A�jAj)7 A�jAj A�jAj")7 A�jAj A�jAj")7  )�7� A�j A�j5 (!@ (�AG
 A�j(! (! A�jAj5B � ��!+
 (�!A! A!!A!A!"@@ E
 A�j A�jN )�!+@@@ )�BR
 (�! (�! A�j A�jN )�!)@ )�BR
 (�! (�! )!+ A�j A�jN )�!. )�BR
 (�! (�! .!+  6�  "6� E
 ! A8lA� A�jAj"#B7 B7�@ " G
 Aj" I
	 At"$   $I"�B8~"-B ��
	 -�"$AH
	@@ 
 $A�!! ! A8lA $�!! !E
  !6� ! !  j"B7 A j .7 Aj )7 Aj +7 Aj 6 Aj 6 A(j )�7 A0j #)7  A8j!  "Aj!" A�j A�j5 (�! (�! (�AF
  6�  "6�A!A!A! A�j(! (�! (�! A�j A�jN )�!+ )�BR
 A�j)"*B ��! *�!  A� $A�@ +PE
B,!* 
At r Atr!#  Atj!$A!%A!&A!'B!/@ A�jAj"(B7 B7�@@ E
 /B|!/B!*B,!-B!0B!1 !"@@@ *!) A�j A�j # ") (�! (�!  )�!. )�BQ
@@ "Aj/Aj"!AK
@@@@@ ! �B �  ��!, )!* .!- .B~|"*BV
@@@@@@ *�  A��q�!*	  �!* �B �  ��!* �B �  ��!* �B �  ��"*BS
  A�q�!* .B~|"*BV
@@@@@@@ *�  A��q�!0  �!0 �B �  ��!0 �B �  ��!0 �B �  ��"*BY
  A�q�!* *!0 .B~|"*BV
@@@@@@@ *�  A��q�!1  �!1 �B �  ��!1 �B �  ��!1 �B �  ��"*BY
  A�q�!* *!1 .BR
 AG
   )7�   -	:�   /
;�   -:�   /
;�   -:�  -!  A�jAj"! )�7   :�  )�7� ( !)7  )�7� )!* "Aj"" $F
@ &E
 % &A8lA� .!+ -B,R
A�� A�jAj"  ()7  )�7�@ & 'G
 &Aj"" &I
 &At"! " " !I""�B8~")B ��
 )�"!AH
@@ &
 !A�!% % &A8lA !�!% %E
  "6�  %6� "!& % 'A8lj"" 17  " 07 " *7 " ,7 " -7 " )�7( "A0j  )7  'Aj"'6� / +R
B,!*  k!" 	 j!  A�qAG! A�jA j A�jA j)7 A�jAj A�jAj)7 A�jAj A�jAj)7 A�jAj A�jAj)7 A�jAj A�jAj(6  )�7�  )�7�B!)A!	 !A��@ E
  AtA�  ! ! (�! (�! 5�!*  6�  "6� *B � ��!+ E
 ! A8lA� E
  AtA�@ 
 +!*  AtA� +!*A�� (�! (�! 5�B � ��!* E
  AtA� A�j(! A�jAj(! A�j5B � ��!* *B�~�!)A!	 !A!A!	 	!A!A!	 A�jA j" A�jA j)7 A�jAj"! A�jAj)7 A�jAj" A�jAj)7 A�jAj"# A�jAj)7 A�jAj"$ A�jAj(6  )�7P  )�7@ ) *B���!*@ 	E
  *7 B7 Aj 6 Aj 6 AjA j"	 )7 AjAj" !)7 AjAj"! )7 AjAj" #)7 AjAj"# $(6  )P7  )@7 Aj 6 Aj 6  *7  6t A�j 6  6l A�j 6 A�j 6 A�j 6  6\ A�j 6  6T A�j 6 A�j 6 A�j 6 A�j 6 A�j 6 Aj )7 A j )7 A(j !)7 A0j )7 A8j 	)7 A�j ;  
:�  :� A�j :  
:�  :�  :�  :�  :� A�j 6 A�j 6 A�j "6 A�j  6 B7 A�j #(6 A�j )7 A�j$ A�j$�.~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ )B~|"B�V
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ��---------------------	-------
--
------------- !"---#-$%&----'------(------------)*+-----------------------, )"B|"B	V
-@@ �
///////  Aj)7W  Aj(6 B7 )"B~|"BV
,@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
/ B�V
-  < B*7 )"B|"BV
+@@@@@@@ � Aj1!Y Aj3!X Aj5!W Aj)!V Aj)!U Aj)"BS
-T  Aj)7T )"B
R
*  Aj(6 B7 )"B~|"BV
)@@@@@@ � Aj1!V Aj3!U Aj5!T Aj)!S Aj)!R Aj)"BY
Q* )"B~|"BV
(@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
+ B��V
)  = B%7 )"B~|"BV
'@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
* B�V
(  < B#7 )"B|"B	V
&@@ �
(((((((  Aj)7P  Aj(6 B7 )"B~|"BV
%@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
( B�V
&  < B)7 )"B|"BV
$@ �%%%%%%  Aj)7M )"B|"B	V
#@@ �
%%%%%%%  Aj)7M  Aj(6 B7 )"B
R
"  Aj(6 B7 )"B|"BV
!@@@@@@@ � Aj1!O Aj3!N Aj5!M Aj)!L Aj)!K Aj)"BY
J#  Aj)7J )"B|"BV
 @ �!!!!!!  Aj)7I )"B~|"BV
@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
" B�V
   < B"7 )"B~|"BV
@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
   7 B&7 )"B~|"BV
@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
  B�V
  < B(7 )"B|"BV
@ �  Aj)7E )"B|"B	V
@@@@@@@@ �
# Aj1!J Aj3!I Aj5!H Aj)!G Aj)!F Aj)"BY
E  Aj)7E  Aj(6 B7 )"B~|"BV
@@@@@@ � Aj1!G Aj3!F Aj5!E Aj)!D Aj)!C Aj)"BY
B )"B~|"BV
@@@@@@ � Aj1!E Aj3!D Aj5!C Aj)!B Aj)!A Aj)"BS
@ )"B~|"BV
@@@@@@ � Aj1!E Aj3!D Aj5!C Aj)!B Aj)!A Aj)"BY
@ )"B~|"BV
@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
 B�V
  < B7 )"B|"B	V
@@ �
  Aj)7@  Aj(6 B7 )"B~|"BV
@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
 B�V
  < B'7 )"B
R
  Aj(6 B7 )"B|"B	V
@@ �
  Aj)7=  Aj(6 B7 )"B|"B	V
@@ �
  Aj)7<  Aj(6 B7 )"B|"B	V
@@ �
  Aj)7;  Aj(6 B7 )"B~|"BV
@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
 B�V
  < B$7 )"B|"B	V
@@ �
  Aj)79  Aj(6 B7 )"B|"BV
@ �  Aj)77 )"B|"BV

@ �  Aj)76 )"B|"BV
@ �





  Aj)75 )"B|"BV
@@@@@@@ � Aj1!9 Aj3!8 Aj5!7 Aj)!6 Aj)!5 Aj)"BY
4
  Aj)74 )"B
R
  Aj(6 B7 )"B~|"BV
	@@@@@@ � Aj1!6 Aj3!5 Aj5!4 Aj)!3 Aj)!2 Aj)"BY
1
 )"B~|"BV
@@@@@@ � Aj1!4 Aj3!3 Aj5!2 Aj)!1 Aj)!0 Aj)"BY
/	 )"B~|"BV
@@@@@@ � Aj1!4 Aj3!3 Aj5!2 Aj)!1 Aj)!0 Aj)"BY
/ )"B~|"BV
@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
	 B�V
  < B 7 )"B~|"BV
@@@@@@@@ � Aj1! Aj3! Aj5! Aj)! Aj)! Aj)"BS
 B�V
  < B!7 )"B
R
  Aj(6 B7 )"B
R
  Aj(6 B7 )"B
R
  Aj(6 B7 )"B
R
  Aj(6 B7 )!@@@@@@@ �,	

 !"#$%&'()*+,  Aj)7 B7  Aj)7 B7  Aj-: B7  Aj/; B7  Aj(6 B7  Aj)7 B7 Aj)!  7 B7  Aj)7 B7  Aj)7%  Aj-AG: B	7  Aj(6 B
7  Aj(6 B7  Aj(6 B7  Aj(6 B
7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj)7 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj(6 B7  Aj)7 B7  Aj-: B7  Aj-: B 7  Aj-: B!7  Aj-: B"7  Aj-: B#7  Aj-: B$7  Aj/; B%7  Aj)7 B&7  Aj-: B'7  Aj-: B(7  Aj-: B)7  Aj-: B*7  Aj)7 B+7  7 B+7  7 B7 B7�~@@@ A�I
A! A�{O
 Aj"Axq! ("E
A!@ Av"E
A! A���K
 A g"kAqvAq AtkA>j!A k!@@@  AtjA�j("E
A! AA AvkAq AFt!A!@@ (Axq"	 I
 	 k"	 O
 	! ! 	
A! ! Aj("	  	  AvAqjAj("G  	! At! 
@ E
 ! 
A!A Aqt"A kr q"E
  A kqhAtjA�j("E
@ (Axq" O  k"	 Iq!@ ("
 Aj(!   ! 	  ! ! 
 E
@ (�" I
   kO
  L@@ AI
  Ar6  j" Ar6  j 6@ A�I
   D  Av"AtjAj!@@ ("A Aqt"qE
 (!   r6 !  6  6  6  6   j"Ar6  j" (Ar6 Aj@@@ ("A AjAxq AI"Av"Aq"v"Aq
  (�M
 
 ("E
  A kqhAtjA�j("(Axq k! !@@ ("
 Aj("E
 (Axq k"   I"!   ! !  AsAq j"Atj"Aj("Aj!@@ (" Aj"F
  6  6  A~ wq6  At"Ar6  j" (Ar6@@   tA t"A krq"A kqh"Atj"Aj("(" Aj"F
  6  6  A~ wq6 Aj!  Ar6  j" At" k"Ar6  j 6@ (�"E
  Av"AtjAj! (�!@@ ("	A Aqt"qE
 (!  	 r6 !  6  6  6  6  6�  6�   L@@ AI
  Ar6  j" Ar6  j 6@ (�"E
  Av"AtjAj! (�!@@ ("	A Aqt"qE
 (!  	 r6 !  6  6  6  6  6�  6�   j"Ar6  j" (Ar6 Aj@@@@@@ (�" O
 (�" K
A! A��j"Av@"AF
 At"E
  (� A��|q"j"6�  (�"   I6� (�"E
 A�j"!@ (" ("	j F
 ("
 (�!@@  k"AK
 A6� A6�  Ar6  j"Aj! (Ar!  6�   j"6�  Ar6  j 6 Ar! Aj!  6 Aj@@ (�"E
  M
  6� A�6�  6�A! A�jA6 A�j 6@  j"Aj Aj"6 Aj 6 Aj"A�G
  6�  AXj"6�  Ar6  jA(6 A���6� (
  M
  K
  	 j6  (�"AjAxq"Axj6�   k (� j"jAj"6� A|j Ar6  jA(6 A���6�   k"6�  (�" j"6�  Ar6  Ar6 Aj  (�"   I6�  j! !@@@ ( F
 ("
 (
  6  ( j6  Ar6  j!  k k!@@@ (� F
 (� F
@ ("AqAG
@@ Axq"A�I
  L@ ("	 ("F
  	6 	 6  (A~ Avwq6  j!  j!  (A~q6  Ar6  j 6@ A�I
   D  Av"AtjAj!@@ ("A Aqt"qE
 (!   r6 !  6  6  6  6  6�  (� j"6�  Ar6  6�  (� j"6�  Ar6  j 6 Aj !@@@ (" K
  (j" K
 (!  6�  AXj"6�  Ar6  jA(6 A���6�  A`jAxqAxj"  AjI"	A6 )!
 	Aj Aj)7 	 
7 A�jA6 A�j 6  6� A�j 	Aj6 	Aj!@ A6  Aj"K
 	 F
 	 	(A~q6  	 k"Ar6 	 6@ A�I
   D  Av"AtjAj!@@ ("A Aqt"qE
 (!   r6 !  6  6  6  6 (�" M
   k"6�  (�" j"6�  Ar6  Ar6 Aj �~#A�k"$@@@@@@@@@@@@@@@@@@@@@@@@ B}|"B%X
 B�>Q
 B�>Q
@@@@ �&	

@ ("AK
 A: B7 AjA: A	jA; Aj 57  A|j6  ("Aj6 ("A��|q! A��q! B7@ ("AI
  A}j6  ("Aj6  Aj-":
 / Atr"A���q! A��q! 5! A6( 5)! 3-! Aj 1/< A
j = A	j > Aj 7 A: B7@ ("AK
 A: B7 AjA: A	jA; Aj 57  A~j6  ("Aj6 /"A�~q!A!@ ("E
  Aj6  ("Aj6 -!A!B!A! A: B7 AjA: A	jA; Aj 57 A(j N@@@ )(BR
  )17  A8j)7  )7  )7 -0!  )7  Aj)7A4! )0"B����T
  :  )7	 B7 Aj )7 �"A��|q! A��q!B! A(j  A��qAvT AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7 (,"A��|q! A��q!B! A(j  A��qAvT AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7 (,"A��|q! A��q!B!
 A(j  A��qAvT AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7 (,"A��|q! A��q!B!	 A(j 5 AjAj" A(jAj(6  A4j)7 A(jAj(!@ ((AG
  6  )7 B7 Aj (6 (,"A��|q! A��q!B! A(j  A��qAvT AjAj" A(jAj)7  A(jAj)7@ ((AG
  )7 B7 Aj )7 (,"A��|q! A��q!B
!@ ("E
  Aj6  ("Aj6A! -AG!B	!A!
 A: B7 AjA: A	jA; Aj 57 A(j Y (4! (0!@ )(BR
 A(jAj)!  6 B7 Aj 7 Aj 6 A��|q! A��q!B! A(j N (4! (0!@ )(BR
 A(jAj)!  6 B7 Aj 7 Aj 6
 A��|q! A��q!B!
@ ("AK
 A6 B7 Aj 57  Apj6A!  ("Aj6 A��|q! A��q!B!	@ ("AK
 5! A6( 3-! 1/!	 5)! Aj 7 B7  �AtAr6 Aj   	B��B ��B�>  Axj6  ("Aj6 )"�"A��|q! A��q! B ��!B!@ ("AK
 A: B7 AjA: A	jA; Aj 57
  A|j6  ("Aj6 ("A��|q! A��q!B!@ ("AK
 A: B7 AjA: A	jA; Aj 57	  A~j6  ("Aj6 /"A�~q!A!B!@ ("E
  Aj6  ("Aj6 -!A!B!A! A: B7 AjA: A	jA; Aj 57 A(j N@@@ )(BR
  )17  A8j)7  )7  )7 -0!  )7  Aj)7A4! )0"B����T
  :  )7	 B7 Aj )7@ (" �"O
 A6 B7 Aj 57   k6  (" j6 A��|q! A��q!B!@ ("AK
 A: B7 AjA: A	jA; Aj 57  A|j"6  ("Aj"6@  ("O
 A6 B7 Aj �7   k6   j6 A��|q! A��q!B!@ ("AK
 A: B7 AjA: A	jA; Aj 57  A~j"6  ("Aj"6@  /"O
 A6 B7 Aj �7   k6   j6 A��|q! A��q!B!@@ ("E
  Aj"6  ("Aj"6  -"O
 A6 B7 Aj �7 A;	 A: B7 AjA: Aj 57   k6   j6 A��|q! A��q!B!  7 B7 Aj 6 Aj  A�qr A��qr6 B7 A: A�j$�~#A�k"$  6 A�j AjA	(A!@@ (�AF
 A�j(!A! (�! A�jAj A�j)7 A�j A�j(6  A�j)7� A�jAj(! A�jAj" A�jAj)7 A�jAj" A�jAj(6  )�7�@@ E
 A6 Aj 6 Aj )�7 Aj )7 Aj (6 A�j AjA
(A!@@ (�AF
 A�j(!A! (�! A�jAj A�j)7 A�j A�j(6  A�j)7� A�jAj(! A�jAj" A�jAj)7 A�jAj" A�jAj(6  )�7�@ E
 A6 Aj 6 Aj )�7 Aj )7 Aj (6 A�j AjA(A!@@ (�AF
 A�j(!A! (�!	 A�jAj A�j)7 A�j A�j(6  A�j)7� A�jAj(! A�jAj" A�jAj)7 A�jAj"
 A�jAj(6  )�7�@ E
 A6 Aj 6 Aj )�7 Aj )7 Aj 
(6 A�j AjA(A!@@ (�AF
 A�j(!A! (�! A�jAj A�j)7 A�j A�j(6  A�j)7� A�jAj(! A�jAj"
 A�jAj)7 A�jAj" A�jAj(6  )�7�@ E
 A6 Aj 6 Aj )�7 Aj 
)7 Aj (6 A�j AjA(@ (�AG
 AjAj A�jAj)"7 Aj A�jAj("6  A�jAj)"7 Aj A�jAj(6 Aj 7 Aj 7 Aj 6 A6 AjAj A�jAj"
)7 AjAj A�jAj"(6  )�7 A�jAj"(!
 (�! A�j AjA(@ (�AG
 A jAj A�jAj)"7 A jAj A�jAj("6  A�jAj)"7  Aj (6 Aj 7 Aj 7 Aj 6 A6 A jAj 
)7 A jAj (6  )�7  (! (�!
 A�j AjA(@ (�AG
 A8jAj A�jAj)"7 A�j A�jAj("6  A�jAj)"78 Aj A�jAj(6 Aj 7 Aj 7 Aj 6 A6 A8jAj A�jAj")7 A8jAj A�jAj"(6  )�78 A�jAj"(! (�! A�j AjA(@ (�AG
 A�jAj A�jAj)"7 A�jAj A�jAj("6  A�jAj)"7P Aj (6 Aj 7 Aj 7 Aj 6 A6 A�jAj )7 A�jAj (6  )�7P (! (�! A�j AjA(@ (�AG
 A�jAj A�jAj)"7 A�j A�jAj("6  A�jAj)"7h Aj A�jAj(6 Aj 7 Aj 7 Aj 6 A6 A�jAj A�jAj")7 A�jAj A�jAj"(6  )�7h A�jAj"(! (�! A�j AjA(@ (�AG
 A�jAj A�jAj)"7 A�jAj A�jAj("6  A�jAj)"7� Aj (6 Aj 7 Aj 7 Aj 6 A6 A�jAj )7 A�jAj (6  )�7� (! (�! A�j AjA(@ (�AG
 A�jAj A�jAj)"7 A�j A�jAj("6  A�jAj)"7� Aj A�jAj(6 Aj 7 Aj 7 Aj 6 A6 A�jAj A�jAj)7 A�jAj A�jAj(6  )�7� A�jAj"(! (�! A�j AjA(@ (�AG
 A�jAj A�jAj)"7 A�jAj A�jAj("6  A�jAj)"7� Aj (6 Aj 7 Aj 7 Aj 6 A6 )�! A�j 6 A�j 6 A�j 6 A�j 	6 A�j 6 A�j 6 A�j 6 A�j 6 A�j 7 A�jA6 A<jA���6 A8j 6 A4j 6 A0j 6 A,j 6 A(j 6 A$j 6 A j 6 Aj 6 Aj 6 Aj 6 Aj 6 Aj 
6 Aj 
6  6 A6 A�j$�@@ AI
@ Av"A����q G
@ At"AL
@@@ 
A!A! A�"E
 ! A|j! Atj! Axj!	A!
A!A! !
@ 
!A!
A!@ Aj"E
  A~j"Atj("(!@@@@@@  Atj("(" ("F
AA  I! (" F
AA  I! AG
A! 	 Atj!@@ ! ! "E
  Aj"Atj("(!@@  ("F
AA  I!  F
AA  I! A|j! Aj! ! ! AF
@  I
  K
  k"AvE
 Av!  Atj!@ (!  (6  6 Aj! A|j! Aj"
  xA!@ 
A!
  Atj!@@ ("(!@@@  ("F
AA  I!  F
AA  I! AF
 A|j! ! !  Aj"G
A!
 !  k!@ 
 !
@ A	M
 !
@  K
  Atj!@  Aj"
I
@  
k"AI
@@  Atj"("("  
Atj"("("F
AA  I! (" ("F
AA  I! AG
  6 ! !@ AI
@@@@ Aj"("(" ("F
AA  I! (" ("F
AA  I!@ AG
  6 !  Aj"F
 ! !  6 
E
 A|j! 
! A
O
  Aj"
I
  w 
 x@@@  G
@@ Aj" I
 At"   I"A����q G
 At"AN
�@@ 
 A�!
 
 AtA �!
 
E
 ! 
 Atj" 6  
6 Aj"! AI
@@@@@@ 
 "Aj"Atj"(E
 At 
j"Atj(" ("K
 AI
 (! 
 A}j"Atj(!A! AM
 
 A}j"Atj("  jM
A! AM
 Adj(  jM
 !  I
 A~j!@@@@@@  Aj"M
  M
 
 Atj"(" (j" 
 Atj"("I
  K
 Aj!  Atj" ("At"j! At!  k" k" O
   At"�  j!@@ AH
 AN
 ! !  j!@@@@@ A|j"("(" A|j"("("F
AA  I! (" ("F
AA  I! ! AF
 ! ! !  (6@  I
 ! A|j! ! !  I
AȎ�  vAȎ�  v  x  w   �  j!@@ AH
  J
 ! !  j! ! ! !@@@@@@ ("(" ("("F
AA  I! (" ("F
AA  I! AF
 Aj! ! Aj! !  (6 Aj!  O
 ! !  K
    kA|q�   j6  6  Aj As jAtr ! AM
 A� 

@ E
 
 AtA� E
  AtA� A��� AI
  Aj"Atj!A!@@@@@ "Aj" K
  k"AI
@@  Atj"("("  Atj"("("F
AA  I! (" ("F
AA  I! AG
  6 ! ! AI
@@@ Aj"("(" ("F
AA  I! (" ("F
AA  I!@ AG
  6 ! Aj"E
 !  x !  6 Aj! A|j! 
�~#A k"$ A�j!@@ A�j-
 A�jA; A�jA: A�jB7 B7 AjB7 A�jB7 A�jB7 A�jB7 A�jB7 A�jB7 A�jA6 A�j A�j-:@@@@@ A�j"(E
 A�j! (! A�j! A�j! AjAj!	 A�j!
 A�j! A�j! A�j!
 A�j!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E
  Aj"6  (�"Aj"6�@ -"E
  -"O
 Aj"AK
	  Aj N@ )BR
 Aj)!$@ )"B����X
A4!& (" �"O
 5!#   k6  (�" j6�  6  6@@@@ E
  Aj6  Aj6 -Aj"AK
"  �!% Aj  -: )! )BR
 )! B ��! B��! B��! �!% /AK
 Aj 5 (!@ (AG
 )! (! Av! Av!% (! Aj N )!@@ )BR
 (! (! Aj N )!@ )BR
 (! (! ! Aj N )! )BR
 (! (! ! �B � ��! B ��! B��! B��! �!$ Aj N )! )BR
 )! B ��! B��! B��! �!# Aj N )! )BR
 )! B ��! B��! B��! �!" Aj Y )! )BR
 )! B ��! B��! B��! �!! Aj N )! )BR
 )! B ��! B��! B��! �!  Aj N )! )BR
 )! B ��! B��! B��! �! AK
 �! Aj N )! )BR
 )! B ��! B��! B��! �! (D!@ (" A�q"O
 �!A!  j!@@@  F
 -"AK
  �! Aj N )BR
 )! )"B ��! B��! B��! �!A!@ Aj N@ )BR
 )! Aj" I
  ( kO
 �!A!@ -�"E
  A�j0  k" A�q n" lk�B��|� �! 1�! A�j-"AF
@ E
  )� |"  �"�" ~}7�  )�  ~|7�A��A���� 1! 
-"AF
@ E
  )� |"  �"�" ~}7�  )�  ~|7�A��  �  7�  7�  -�As:� A:� -�"E
 1! A�s n�! 
-"AF
@ E
  )� |"  �"�" ~}7�  )�  ~|7�A��  A}j6  Aj6� 3! B7�   )�|7� A:�
 A:�  7� A:� B7�  7�	 	B7 B7@ (x" 
(G
 Aj" I
 At"   I"�B8~"B ��
 �"AH
@@ 
 A�! (p A8lA �! E
  6p 
 6 (x! (p A8lj" 7  6 B7 A j 7 Aj 7 Aj 6 A(j )7 A0j 	)7  (xAj6x  7�A���� B7�  )�  ~|7� B7�  )�  ~|7�  6 Aj 6A!	 B7�  )�  ~|7� A�� ("
A! A6 (! /! -! -!A!A!A! A���6�  :	 A�jA6 Aj 7 Aj 6 A
j ; Aj :A!  6 A j$�#A k"$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -E	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCD Aj A�A� Aj!D Aj A���A� Aj!C Aj A���A*� Aj!B Aj A�A)� Aj!A Aj A���A)� Aj!@ Aj A���A� Aj!? Aj A���A� Aj!> Aj A�A� Aj!= Aj A�A� Aj!< Aj Aќ�A� Aj!; Aj A���A� Aj!: Aj A���A� Aj!9 Aj A���A	� Aj!8 Aj A���A� Aj!7 Aj A���A� Aj!6 Aj A���A� Aj!5 Aj A�A� Aj!4 Aj A՛�A� Aj!3 Aj AǛ�A�  Aj6 Aj AjAД�G Aj!2 Aj A���A� Aj!1 Aj A���A
�  Aj6 Aj AjA���G Aj!0 Aj A���A� Aj!/ Aj A�A�  Aj6 Aj AjA���G Aj!. Aj A���A�  Aj6 Aj AjAК�G Aj!- Aj A���A�  Aj6 Aj AjA���G Aj!, Aj A���A�  Aj6 Aj AjA���G Aj!+ Aj A�A�  Aj6 Aj AjA���G Aj!* Aj AΙ�A� Aj!) Aj A���A#� Aj!( Aj A���A
� Aj!' Aj A���A� Aj!& Aj A���A� Aj!% Aj A���A� Aj!$ Aj A�A
� Aj!# Aj A�A
� Aj!" Aj Aؘ�A�  Aj6 Aj AjAД�G Aj!! Aj A���A� Aj!  Aj A���A� Aj! Aj A���A� Aj! Aj A���A�  Aj6 Aj AjA���G Aj! Aj A�A� Aj! Aj Aԗ�A�  Aj6 Aj AjAД�G Aj! Aj AƗ�A� Aj! Aj A���A� Aj! Aj A���A� Aj! Aj A���A� Aj! Aj A���A� Aj! Aj A̖�A�  Aj6 Aj AjA�G Aj! Aj A���A� Aj! Aj A���A� Aj! Aj A���A� Aj! Aj A�A� Aj! Aj Aٕ�A� Aj! Aj Aȕ�A� Aj! Aj A���A� Aj! Aj A���A� Aj!
 Aj A���A� Aj! Aj A���A� Aj! Aj A�A� Aj!
 Aj A���A�  Aj6 Aj AjAД�G Aj!	 Aj A���A� Aj! Aj A���A� Aj! Aj A���A� Aj! Aj A�A� Aj! Aj Aؓ�A� Aj! Aj A“�A� Aj! Aj A���A� Aj! Aj A���A� Aj! Aj A���A� Aj! l! A j$ �~#A�k"$ A j  Aj(@@ ( AG
 B7 Aj A jAj)7  A(j)7 AjAj A jAj)"	7 AjAj A jAj)"
7  )$"7 A�j 6 A�j 
7 A�j 	7 A�jB7 A�j Aj)"	7 A�j Aj(6  6�  7� A6� A6� B7� B7  B-7(  )7� A�jA6 A6�  A�j6�  A�j6�  	7� A�j A�j A�jAj" A�jAj(6  A�jAj")7�@@@@@@ -�AG
 A�jAj(! -�! A jAj!@ (�! A�qAG
 AG
 A�j A�j  Aj(6  )7� -�! -�AG
 (�! A�jAj ("6  )�"	7�  6  	7 Aj 6 B7@ AG
  )�7�  A�j)7� A�:  )�7	 Aj )�7 B7 A�j A�j("Aj("6  A�j"6�  A�j)7�  ("6�@@@ 
A!B,!B,! A�j A�j A�j(  
@ )�BQ
A!B,!B,!@  )�7� )�"
B,Q
 )�!	  )�7�  
7�  	7�@@ 	B}|"
BX
 	B�|"	BV
@@@@ 	� A�j A�j )�BR
  (�6� A�j A�j )�BR
  (�6� A�j A�j )�BR
  (�6� A�j A�j )�BR
  (�6�@@@@ 
� A�j A�j (�  )�BQ"!A  ! A�j A�j )�BR
  )�7  A�j A�j )�!
 )�! A�j A�j )�! )�! (�! (�"E
 A�j A�j ( (� 
 )�BR
 )�!	 Aj )�7  	7 B7 (AF
  (� Aj(k�B �B�7A!A!@ B,Q
  7�  7� A�j  A j A�j) A�jAj" A�jAj(6  A�j)7� A�jAj(!@ (�AG
  6  )�7 B7 Aj (6 (�!  6�  6�@ B,Q
  
7�  7� A�j  A j A�j) A�jAj" A�jAj(6  A�j)7� A�jAj(!@ (�AG
  6  )�7 B7 Aj (6 (�!  6�  6�B-!	 E
 A�j Aj  A�j-   (� (� )�BR
  )�7 B7 Aj A�jAj)7@ A�j("E
 At! (�Aj!@@ Aj("E
 ( AlA� A j! A`j"
@ A�j("E
 (� AtA� A�j6 )(B-Q
@ A�j("E
 (t AtA�@ A�j("E
 (� AtA�@ A�j("E
 (� AtA� A�j("E
 (� A8lA� )�!	 A�j A�jA��@ )(B-Q
@ A�j("E
 (t AtA�@ A�j("E
 (� AtA�@ A�j("E
 (� AtA� A�j("E
 (� A8lA�  	7(  A�jA�� Aj A jA�� B7 A�j$�@@ AI
@ Av"A����q G
@ At"AL
@@@ 
A!A! A�"E
 ! A|j! Axj! Atj!	A!
A!A! !
@ 
!A!
A!@ Aj"E
@@@@@@  Atj((  A~j"Atj(("I
 A~j! 	 Atj!A!
A!@@  G
 ! Aj!  (("O! A|j! ! 
 Aj! As j!A!  Atj!@@ ! ! "E
 A|j! Aj!   Aj"Atj(("I! ! 
  I
  K
  k"AvE
 Av!  Atj!@ (!  (6  6 Aj! A|j! Aj"
@ 
 !
@ A	M
 !
  K
  Atj!@  Aj"
I
@  
k"AI
  Atj"("(  
Atj"("(O
  6@ AI
 ! ! ("( (O
@  6 Aj!  Aj"F
 Aj! ! ("( (I
  6 
E
 A|j! 
! A
O
  x  Aj"
I
  w 
 x@@@  G
@@ Aj" I
 At"   I"A����q G
 At"AN
�@@ 
 A�!
 
 AtA �!
 
E
 ! 
 Atj" 6  
6 Aj"! AI
@@@@@@ 
 "Aj"Atj"(E
 At 
j"Atj(" ("K
 AI
 (! 
 A}j"Atj(!A! AM
 
 A}j"Atj("  jM
A! AM
 Adj(  jM
 !  I
 A~j!@@@@@@  Aj"M
  M
 
 Atj"(" (j" 
 Atj"("I
  K
 Aj!  Atj" ("At"j! At!  k" k" O
   At"�  j!@@ AH
 AN
 ! !  j! !@  A|j" A|j" (( ((I"(6   !@    "I
 ! A|j! !  I
AȎ�  vAȎ�  v  x  w   �  j!@@ AH
  J
 ! !  j! ! !@    (( ((I"(6  Aj ! Aj! Aj  " O
  K
    kA|q�   j6  6  Aj As jAtr ! AM
 A� 

@ E
 
 AtA� E
  AtA� A��� AI
  Aj"Atj!A!@@@@ "Aj" K
  k"AI
  Atj"("(  Atj"("(O
  6 AI
 ! ! ("( (O
@  6 Aj! Aj"E
 Aj! ! ("( (O
  x  6 Aj! A|j! 
�~#A�k"$@@@@@@@ Aj("/"AI
 (!	 (!
 A�jArAA�� A�j A�jA�� AA��!A�A�"E
 A6 Aj A�jA�� A�j A��!
A��� Aj" A���F")0! Aj" A�j)7 Aj" A�j)7 Aj A�j)7  )�7 Aj" A8j /"Ayj"At� 
 A�j At�! A�j A�j Azj"At�! A;  ;@ E
A! !
@ 
(" ;  6 
Aj!
  Aj"G
 A�jAj )"7 A�jAj )"7 A�jAj Aj"
)"7  )"7� A�jAj 7 A�jAj 7 A�jAj 7  7� ("AI
 Aj" Aj)7 Aj" Aj)7 
 Aj)7  )7 Ayj!
A���! A���G
A���!A!A��� Aj A���F"" ("
Aj"Atj  
Atj"A   
kAtr  7 A�j" Atj  
Atj" / 
kAtr Aj Aj)7 Aj Aj)7 Aj Aj)7  )7  /Aj"; 
At A�j"jAj  At"j" A��q kAtr  6@  /"K
  jA�j(" ;  6@  O
 
Aj! 
AtA�j!
@ Aj(" 
j(" ;  6 
Aj!
  I! Aj! 
 (!
 A6  )7 Aj 
6 Aj Aj(6 /! !  Azj"Atj  
Atj"  
kAtr  7  Atj  
Atj" / 
kAtr Aj )7 Aj )7 Aj Aj)7  )7  /Aj"
; At" jAlj  Atj" 
A��q kAtr  6  /"K
 Ayj!  jA�j!
@ 
(" Aj";  6 
Aj!
  I
 A�j! A�j! Aj" Aj)7 Aj" Aj)7 
 Aj)7  )7@@ A���G
A���!A!
 /!
  Aj"Atj  Atj" 
 kAtr  7  Atj  Atj"
 / kAtr 
Aj )7 
Aj )7 
Aj Aj)7 
 )7  /Aj"
; At" jAj  Atj" 
A��q kAtr  6  /"O
  jA�j!
@ 
(" Aj";  6 
Aj!
  G
  
6 A6 Aj 7 Aj 	6 Aj 6 A j )�7 Aj 
6 Aj 6 A(j A�jAj)7 A0j A�jAj)7 A8j A�jAj)7 A�j$A�A��
~#A k"$@@@@@ (" j" O
 
A!  I
 ("!@ AI
 AjAvAl!@  AvI
  6@@ 
AІ�!A!A!	A!@@ AI
@ A����q G
 AtAn!A! E
A���� Aj!@@A Ajgv"Aj"�B~"B ��
 AjA|q"
 Aj"I
 
 �j" 
I
 A}I
A! E
A����@ A�"
A! E
 A�  AvAl AI! A� � 
j!	 ("Aj!  jAj!
 (AsA����xq! (!@@@ 
@  
O
 A�j! (! Aj"! A����xq"A����xF
 A����xs! ! Aj  hAvAlj"7"�!A!@ Aj"  q"j!  j(A����xq"
E
 Aj!@  
hAv j q"j,AH
 (A����xqhAv!  q!  j �Av": A|j q jAj : 	 Alj"Aj Aj(6 Aj Aj)7  )7  6  	6   k6 (!  6 (!  6A! E
A!@ Aj�B~"B ��E
 AA�@ AjA|q"
 AjI
A 
 �j"A}IAt  
I!   �  6 Aj!A!A!@@@@ Aq
  O
 ! Aj! Aj" I"
  I"E
  Aj   ! Aj( j" ("AvAsA���q A����rj6A! Aj(! (Aj"AO
 Aj  rA����  j (6A!@@ ("Aj" I
 Aj!
 Aj!A!@ "Aj!@  
(j-A�G
@@ Aj ( Alj"	7! 
(! (!A! �"!@ Aj"  q"j!  j(A����xq"
E
@  
hAv j q"j,AH
 (A����xqhAv!   q"k  ks qAI
  j"-!  �Av"
: A|j q jAj 
:@ A�F
 ( Alj")!  	)7 Aj"(!  	Aj"(6 Aj")!  	Aj")7 	 7  6  7 
(" jA�:  ( A|jqjAjA�: ( Alj" 	)7 Aj 	Aj)7 Aj 	Aj(6  j �Av":  A|jq jAj :  G
 ("AI
 AjAvAl!   (k6A! A j$ �#Ak"$ (!@@@ Aj( Aj(" ("AF"E
 -"A/F
@ A�F
 AF
 A�qA�jA�qAK
 -A:G
 AF
 -A�F
 (!@@@@@@@@@@@@@@@@@ (AG
 Aj(! ! Aj("AL
@@ 
A! A�"E
   �!@ (E
 Aj("	E
 ( 	A�  6 A6 Aj 6 Aj 6 E
  j!@ ,"	AL
 	A�q!	A!
 !@ AF
 Aj! -A?q!
 	Aq!@ 	A�qA�K
 
 Atr!	@@  G
A! !
 Aj!
 -A?q!  
Atr!@ 	A�qA�O
  Atr!	@@ 
 G
A!	 
-A?q!	 At AtA���qr 	rA/F
� A� 	A/G
A! Aj"
,"	AH
 	A/G
A!@ Aj"
,"	AH
 	A�G
@  
F
@ A~j"
-"A�qA�F
 Aq!@@  
G
A!@ A}j"-"
A�qA�F
 
Aq!@@  G
A! A|j-AqAt!  
A?qr! At A?qr! At 	A?qrA�F
  Aj(G
 Aj" I
 At"	   	I"AN
@  
F
@ A~j"
-"A�qA�F
 Aq!@@  
G
A!@ A}j"-"
A�qA�F
 
Aq!@@  G
A! A|j-AqAt!  
A?qr! At A?qr! At 	A?qrA/F
@  Aj(G
 Aj" I
 At"	   	I"AH
  A �"E
  6 Aj 6 Aj(!  jA/: Aj" (Aj"6@@ 
 A�!  A �! E
  6 Aj 6 Aj(!  jA�: Aj" (Aj"6@@ Aj(" k I
 (!  j" I
 At"   I"AH
@@ 
 A�! ( A �! E
  6 Aj 6 Aj(! Aj  j6  j  � E
 E
  A� A� A� A�� Aj" Aj)7  )7@ (E
 Aj("E
 ( A�  )7 Aj )7 Aj$�~#A�k"$  ("6  Aj("6@@  O
  (@6  A�j(6 AjA:  (6	 Aj (6 Aj �7 A6   k6   j6 Aj� A�j!@@@ A�j N )H!@@ )@BR
 )P! B ��! B��! �!A!@@@ PE
A! A�j N )P! )H!
@@@ )@BR
 
B��! 
B�~�!B! 
BR
B! B ��! B��! �!A!@ ("
A!A!A! 5!  Aj6A!  ("Aj6@ -"	AM
A
!A!@@ 	A!	 A�j N )H!@ )@BR
 )P!A!B! B�~�!A!B!@@@@ PE
@@ ! A�j N )P! )H!@ )@BR
 B�� B�~�"�!@@ B!Q
B! PE
 B	�! A�j Y )H! )@BQ
@@@ � B �"�"F
 ! Aj" I
 �"At"
   
I�"B~"B ��
 �"AH
@@ 
 A�!  AlA �! E
 B����p� �!  Alj" 7  7  7 B����|! A�j N )H! )@BQ
 P
 A�� A�j N )H! )@BR
 )P! B�~�!@ P
B
!B! !  7d  6` A�j  
 	 A�jd A�jAj Aj(6  )7` )@"B ��! B��! )H! (P! �!A!  �!@ �"E
  AlA� B ��! B��! �! A0jAj" A�jAj(6  )`70 �B����B� �B �� �B���!@ E
 Aj 7 Aj 7 A jAj" (6  )07  E
  ) 7 Aj (6  6P  7H  7@ Aj A�j#E
 AjA:  )7 A6 Aj Aj)7 Aj Aj)7 A6@ ("E
 At! (Aj!@@ Aj("E
 ( AlA� A j! A`j"
@ ("E
 ( AtA� Aj6 A�j$�~#A�k"$@@ Aj(E
 A(j u@@@@ -(AG
 A8j)!
 A0j)! -)!A!B!B!@@ A�qAI
 A?G
B!
 �B�� A?q�� �! AtAuAJ
 A(j u Aj! -)! -(AG
 )8!
 )0! B��!
 B�~�! A6 Aj 
7 Aj 
 �7  )7  A j)7@ B�T
  )7	 A6 AjA: Aj )7 A(j u@@@@ -(AG
 A8j)!
 A0j)! �! -)!A!B!B!@@ A�qAI
 A?G
B!
 �B�� A?q�� �! AtAuAJ
 A(j u Aj! -)! -(AG
 )8!
 )0! B��!
 B�~�! A6 Aj 
7 Aj 
 �7@ B����T
  )7  A j)7 AjA4:  )7	 Aj )7 A6@ Aj"(" �"O
 A6 Aj 57 AjA6  6   k6  (" j6  6@@@@ A�qE
A! A(j u@@@@ -(AG
 A8j)!
 A0j)! -)!A!B!B!@@ A�qAI
 A?G
B!
 �B�� A?q�� �! AtAuAJ
 Aj! A(j u -)! -(AG
 )8!
 )0! B��!
 B�~�! A6 Aj 
7 Aj  
�7@ B����T
  )7  A j)7 AjA4:  )7	 Aj )7 A6@ (" �"O
 A6 Aj 57 AjA6   k"6  (" j"6 A(j  �@ ((E
 A6 AjA6 A0j("AL
 (,!A!@@ 
A!A!	 !	 A�"E
 A60  6,  6( A(jA m  (0" j60  ((j   	^ (0! (,! ((!  : A6 Aj 6 Aj 6 Aj 6 Aj 6 Aj 6 Aj :� A� A6 A: A�j$�~@ 
 B,7@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ (,	

 !"#$%&'()*+ ("A��|q! A��q! (!B!, ("A��|q! A��q! Aj(!B!+ -!B!) /"A�~q!B!A!) ("A��|q! A��q!B!( ("A��|q! A��q! (!B!' ("A��|q! A��q! (!B!& ("A��|q! A��q! (!B!% ("A��|q! A��q! Aj(!B!$A! -AG!B	!A!# ("A��|q! A��q!B
!" ("A��|q! A��q!B!! ("A��|q! A��q!B!  ("A��|q! A��q!B
! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q! (!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q!B! ("A��|q! A��q! Aj(!B! -!B! -!B ! -!B!!
 -!B"!	 -!B#! -!B$! /"A�~q!B%!A! ("A��|q! A��q! (!B&! -!B'! -!B(! -!B)! -!B*! ("A��|q! A��q! (!B+!A!A!  6  7  A�q A��qr r6�	~#A�k"$@@ Aj("/"AI
 (! (! A�jArAA�� AA��!	@A�A�"E
 A6 Aj 	A�jA�� A�j 	A��!
 	Aj" A�j)7 	Aj" A�j)7 	Aj"
 A�j)7 	 )�7A���!A��� Aj" A���F"")0! Aj A8j /Ayj"At�! 
 A�j At�! A;  ; 	A�jAj 
)7 	A�jAj )7 	A�jAj )7 	 	)7�@@ ("
AI
A���  A���F"" 
Azj"
Atj  
Ayj"
Atj"A A��q  
kAtr  7  
Atj  
Atj" / 
kAtr Aj Aj)7 Aj Aj)7 Aj Aj)7  )7  /Aj; A�j! 
 Aj)7  Aj)7 	Aj" Aj)7 	 )7@@ E
A! /! !  
Aj"Atj  
Atj"
  
kAtr 
 7  Atj  
Atj" / 
kAtr Aj 	Aj)7 Aj 	Aj)7 Aj )7  	)7  /Aj;  6 A6  6@ Aj 7 AjA6 Aj 6 Aj 6 Aj 6 A j 	)�7 A(j 	A�jAj)7 A0j 	A�jAj)7 A8j 	A�jAj)7A�A�A��� Aj A���F"
" ("	Aj"Atj  	Atj"A  
 	kAtr  7 A�j" Atj  	Atj" / 	kAtr Aj Aj)7 Aj Aj)7 Aj Aj)7  )7 A6  6@ Aj 	6  )7 Aj Aj(6  /Aj; A�j$�#A�k"$  6  6A! !@ A�I
A k!A�!@@  O
  j,A�L
A! ! Aj!A! AF
  j!	 ! 	AG
  6  6 AA 6 A���AӬ� 6@@@@  K"
  K
  K
@@ E
  F
  M
  j,A@H
 !  6  E
  F
 Aj!	@@  O
  j,A@N
 Aj! AF
 	 F! ! E
    6( A0jAjA6 A�jAjA?6 A�jA?6 B74 A���60 A>6L  A�j6@  Aj6X  Aj6P  A(j6H A0jA���� A�jA?6 A�jAjA?6 A�jA>6 A0jAjA6 B74 Aȭ�60 A>6L  A�j6@  Aj6`  Aj6X  Aj6P  Aj6H A0jA�� !@  F
A!@@@@  j"	,"AJ
A!  j"!@ 	Aj F
 	Aj! 	-A?q! Aq!	 A�qA�K
  	Atr!  A�q6$ A(j!A! !@  F
 Aj! -A?q!  Atr!@ A�qA�O
  	Atr!A!@  F
 -A?q! At 	AtA���qr r"A���F
  6$A! A(j! A�I
A! A�I
AA A��I!  6(   j6, A0jAjA6 A�jA?6 A�jA?6 A�jAjA�6 A�jA�6 B74 A���60  6X A>6L  A�j6@  Aj6h  Aj6`  A$j6P  A j6H A0jAԮ��AĨ���~#Ak"$@@@@@@@@@@@@@@ Aj("E
 At! Aj! Aj(! (! (! (!A!	@@@ )"
BQ
  
�"
M
 	  
Atj( qk qE
 	Aj!	 Aj! Axj"
A!	 At"A����q G
 At"AL
 
A! A6A�A�"E
 B7 B78  6 A0jB7 A(jB7 A jB7 AjB7 AjB7 AjB7 AjA6A�A�"E
 Aj"W@ Aj("E
 ( AtA�  6 AjB7 A�"E
 A6  6  6  BM (!@@ (" ("G
 !
 !  I
@ 
A!@ 
A!
A!
  AtA�  AtA At"�"
E
 (!  
6  Aj6 Aj"(!  6  	I
  	Atj! 	 F
	  Atj! !@ Aj!@ )"
BQ
 ( 
B ��q! Aj(! (!
@ !A!  O
@ 
 Atj")BQ
 Aj!  
7 !  G

A�A�A�A��� A�A���� A� 	 xA؍� 
 v@ 	E
 !@ Aj!	@ )"
BQ
 ( 
B ��q! Aj(! (!
@ !A!  O
@ 
 Atj")BQ
 Aj!  
7 	! 	 G
@@  Aj(" Aj(" Avk kA_"A�qAF
 Aq
� At"E
  A�A���� Aj$�#A�k"$ A$j 6 A4j Aj("6 A:8 A,j (" Atj6 B�����7  6 A! A6 A6  60  6(@@@@@ ("
 (! ("	   	K"
E
A!  ( ( (	
 Aj!A!@@ ( Aj Aj(E
A!  
O
 A|j! (! Aj! Aj!A! Aj! (  (  ($(	E
 (! ("	 Aj("  	K"
E
A!  ( ( (	
 Aj! Aj!A!@  Axj(6  Aj-:8  A|j(6A!A!@@@@ Aj( Aj(!A!@ Aj(" (4"O
A! (0 Atj"(A�G
 ((!A!A���  vA! ((" (,F
  Aj6(A! (A�G
 ((!A!  6  6@@@@@@@ ( ((" (,G
 Aj(" (4"O
 (0 Atj"(A�G
 ((!  Aj6( (A�G
 ((!A���  v Aj(!A!  6  6@@ Apj(AF
 ((" (,F
  Aj6( Atj(" (4"O
 (0 Atj!@ ( Aj Aj(E
A!  
O
 A|j! (! Aj! A$j!A! Aj! (  (  ($(	E
@ 	 M
A! (   Atj"( ( ($(	
A!AĨ��A���  v A�j$ �
~#A�k"$@@@@ Aj("AG
 Aj(!@@@@@@ AF
 Aj A$j("Aj("6  Aj"6  Aj)7  ("6 E
 Aj(! Aj(" A j("O
 �!A!@ A j Aj (  
@ ) BR
 )("
B ��! )0! 
�!  (D"6  (@"6 )0B,Q
 (! 
 (AF
  ( Aj(k�B �B�7 (! (!  j!  k!  6  6@@@@@@ E
 ("Aj(! Aj(! Aj-! (! (!	 (!
 A j N (,!@ ) BR
 ((! A0j)"B ��! �! )("P
  7H@ B����V
 �Aj" Aj(I
  Aj6  (6  Aj(6 A j Aj A�jP ( AF
 A(j( A jAj(AtjA�j!A! A6, A: AjA6 ( Atj! A: Aj-! A(j 6 A$j 6A! AjA6 Aj )7  
 kAA j k 	j6  AF6, A6, A: AjA6A!A! A6, Aފ�6 AjA6 AjA6 Aj 6 Aj 6 Aj 6 Aj 6A! Aj 7 Aj 6 Aj 6A!  : A�j$�~#A�k"$ (" (Aj6 A�jAj Aj)7  )7� )!	 A�jAj Aj)7 A�jAj Aj)7 A�jAj Aj)7  )7� A j A�j 	 A�j@@@@ ( AG
 Aj A�j)7 Aj A�j)7 Aj A�j)7  A�j")7 A,j(! A jAj(! A jAj)!	 (`! A jAj("("E
 A4j(! /! ($!@  A��q6�  6�  6�  Aj6� A�jAj Aj")7 A�jAj Aj")7 A�jAj Aj")7  )7� A j A�j 	 A�j   ( AG
  Aj)7  Aj)7  Aj)7  )7 (,! (0! )8!	 (("("E
 (4! /! ($! A jAj( A jAj(AtjA�j! A�jArAA�� A�j A�jA�� A jAA��A�A�"E
 A6 Aj A�jA�� A�j A jA��!  ("6�  6  (Aj6 A;  6A��� Aj A���F /"Atj 	7  Atj"Aj Aj)7 Aj Aj)7 Aj Aj)7  )7 A�j Aj"Atj 6  /Aj;  ;  6 A�j$ A�A��@@@ E
A kA Aq! AyjA AK!A!@@@@@@  j-"AtAu"AJ
@@@@ A���j-A~j"AK
  A�;  6@ Aj" I
 A:  6  j-A�qA�F
 A�;  6@ Aj" I
 A:  6  j-!@@ A�~j"A
K
@@  A�qA�G
 AtAuAJ
 A�qA�I
@ AjA�qAK
 AtAuAJ
 A�qA�O
 A�qA�K
 A�qA�G
 AtAuAJ
@ Aj" I
 A:  6  j-A�qA�F
 A�;  6@ Aj" I
 A:  6  j-!@@ A�~j"AK
@@  A�jA�qA0O
 AtAuAJ
	 A�qA�I
	 A�qA�K
 AjA�qAK
 AtAuAJ
@ Aj" I
 A:  6  j-A�qA�G
@ Aj" I
 A:  6  j-A�qA�F
 A�;  6  kAq
@  O
@  j"Aj( (rA����xq
 Aj" I
  O
@  j,AH
  Aj"G
 Aj! A�;  6 Aj!  I
 A: A�;  6 A�;  6� (!@@@@ ("AF
 
 (   Aj((	! E
@@ 
A!  j! Aj(Aj!A! ! !@ Aj!	@@@ ,"
AJ
@@ 	 G
A! ! -A?q! Aj"	! 
Aq!@ 
A�q"
A�K
  Atr!
@@  G
A!
 ! -A?q!
 Aj"	! 
 Atr!@ 
A�O
  Atr!
@@  G
A!
 	! Aj! -A?q!
 At AtA���qr 
r"
A���G
 
A�q!
 	!@ Aj"E
  k j! !  G
 
A���F
@@ E
  F
A!  O
  j,A@H
 !   !   ! 
 (   Aj((	A!	@ E
 !
 !@ 	 -A�qA�Fj!	 Aj! 
Aj"

@  	k ("I
 (   Aj((	A!A!	@ E
A!	 !
 !@ 	 -A�qA�Fj!	 Aj! 
Aj"

 	 k j!
@@@A -0" AF 
!A!
 
Av! 
AjAv!
 Aj!@@ Aj"E
 ( ( ((E
A (!	A! (   ((	
 
Aj! (!
 (!@@ Aj"
A  	 
(E
A �~#A�k"$@@@@@@ )"B����V
 �Aj" Aj("I
  G
@ Aj(E
  Aj6�  (6�  Aj(6� Aj A�j R (AG
 Aj(! AjAj" Aj)7 AjAj" Aj)7 AjAj" Aj)7  )7@@  Aj(G
 Aj" I
 At"   I"A���?q G
 At"AH
@@ 
 A�! ( AtA �! E
  6 Aj 6 Aj(! ( Atj" )7 Aj )7 Aj )7 Aj )7 Aj" (Aj6A!�  7@@ ("A���F
 Aj(!A! A�jArAA�� AjAA��A�A�"E
 A6 Aj A�jA�� A�j AjA�� AjA6  6  Aj6�  6�  6� Aj A�j AjRA! (AG
 )! )!	 A�jAj Aj)7  Aj6�  	7�  7� AjAj Aj)7 AjAj Aj)7 AjAj Aj)7  )7 A�j Aj A!A! Aj("E
 ( AlA� Aj("E
 ( AlA� A�j$  A�A�A�� Axj" A|j("Axq"j!@@@@ Aq
 AqE
 (" j!@ (�  k"G
 (AqAG
  6�  (A~q6  Ar6  j 6@ A�I
  L@ (" ("F
  6  6  (A~ Avwq6@@ ("AqE
  A~q6  Ar6  j 6@@ (� F
 (� G
  6�  (� j"6�  Ar6  j 6  6�  (� j"6�  Ar6@  (�G
 A6� A6� (�" O
 (�"E
@ (�"A)I
 A�j!@@ (" K
  (j K
 ("
@@ A�j("
A�!A!@ Aj! ("
 A� A�K!  6�  M
 A6� Axq" j!@@ A�I
  L@ (" ("F
  6  6  (A~ Avwq6  Ar6  j 6  (�G
  6� A�I
   D  (�Aj"6� 
 A�j("
 A�6�  Av"AtjAj!@@ ("A Aqt"qE
 (!   r6 !  6  6  6  6A!@ Aj! ("
  A� A�K6��~#A�k"$@ A$j"( Aj"(" AvkG
 Aj (! (! (!	 )! A0j" Aj)"B���˧�ٲ��7 A(j"
 B�ޑ��ܷ��7 AjAj" B�����ټ��7 B78  B��̓׬۷��7  7  7 B7@ Aj 	 . A�:O Aj A�jA. (" 5@B8� )8�" )�"B�  )|"�" 
)" )|"B �|" �  B
� �"|" B��"|" B
��" B� �" B �B��|"|" B��"B
�  B� �" B �|"|"�"B�  B� �" B �|"|"�"B
�  B� �" B �|"|�" B� �" B �|"|" B� �B�� B�� B ���"q! Aj! (!
 Aj(! Aj(! (!A!@@@@@@  I"
 E
A!
  A "Atj)"BQ
   B ��"qk q I
@  G
 
 �"M
  Atj"Aj( G
A!
 (" 	F
  	 �E
 Aj! Aj!@A؍�  
v ! !  6  
6 Aj 6 Aj 6 Aj 6 Aj 6 Aj 	6 A�j$�	~#A k"$@@@@@@@@@@ Aj("E
 (! Aj B AjAj-!@ (AG
 AjAj)! Aj(! / Aj-AtrAt" r!	@ Aj"(" ("O
 5!  6   k6  (" j6  6@@@ AI
  A~j"	6  Aj"
6 /"�B���! A~jA��qAI
 A��qAF
A!A!
 �! Aj  AGT@ (AG
 Aj("A�~q! Aj)! Aj(!
@ ("E
 (!  Aj"	6  ("Aj"
6 -!A!A! 5!@@ 	E
  A}j"	6  Aj"
6A! -AF
A>!	 
�! 	E
  A|j6  Aj6 -! Aj  AGT (AG
 Aj("A�~q! Aj)! Aj(! AjA: (!B! (!	 (!
  6 Aj 6 Aj 
6 Aj 6   Aj(k (j6 Aj  �B�� At��B � 	��7A! 
�!A!A! Aފ�6 AjA6 Aj 7 Aj 6 Aj  A�qr6A!  6 A j$�@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ (,	

 !"#$%&'()*+  )7 B7  )7 B7  -: B7  /; B7  (6 B7  )7 B7  )7 B7  )7 B7  )7 B7  -AG: B	7  (6 B
7  (6 B7  (6 B7  (6 B
7  (6 B7  (6 B7  (6 B7  (6 B7  (6 B7  (6 B7  (6 B7  (6 B7  (6 B7  (6 B7  )7 B7  (6 B7  (6 B7  (6 B7  (6 B7  (6 B7  )7 B7  -: B7  -: B 7  -: B!7  -: B"7  -: B#7  -: B$7  /; B%7  )7 B&7  -: B'7  -: B(7  -: B)7  -: B*7  )7 B+7�~#A�k"$ (!  Z )! (! (! A0j" Aj)"B���˧�ٲ��7 A(j" B�ޑ��ܷ��7 AjAj" B�����ټ��7 B78  B��̓׬۷��7  7  7 B7@ Aj  . A�:O Aj A�jA. 5@B8� )8�" )�"B�  )|"�" )" )|"B �|" �  B
� �"|" B��"|" B
��" B� �" B �B��|"|" B��"B
�  B� �" B �|"|"�"B�  B� �" B �|"|"�"B
�  B� �" B �|"|�" B� �" B �|"|" B� �B�� B�� B ���"Av"At r"At r! (" q! Aj(! Aj(!	A!
@@@@ 	 j(" s"As A���wjqA����xq"E
@@@   hAv j q"
Alj"(G
  ("F
   �E
 Aj q"E
 E
  
Alj"(! Aj(! 
Aj"
 j q!  AtqA����xqE
A!A���!  6 A6 Aj 6 A�j$�~#A0k"$@@@@@@@ )Bg|"BV
 � A6 AjA�: A6  )7 (!  A,j("6  (("6@  O
  (6(  Aj(6+ AjA:  ((6	 Aj (+6 Aj �7 A6   k6   j6  Aj5 (!  A<j("6  (8"6@  O
  (6(  Aj(6+ AjA:  ((6	 Aj (+6 Aj �7 A6   k6   j6  Aj5 (!  A$j("6  ( "6@  O
  (6(  Aj(6+ AjA:  ((6	 Aj (+6 Aj �7 A6   k6   j6  Aj5 Aj A0j A�j- (� (9 Aj" AjAj)7  AjAj)7@ (AG
 A6 Aj )7 Aj )7 (!  A,j("6  (("6@  O
  (6(  Aj(6+ AjA:  ((6	 Aj (+6 Aj �7 A6   k6   j6  Aj5 A0j$�A!@@ Aq"E
A k"E
     K"j!A! A�q! ! !	@@@  	kAK
A! A�q!@ E
 	 j!
 Aj! Aj! 
-"
 G
  
 A�qFAjAqj jAj!  	-"
 Gj! 
 F
  	Aj-"
 Gj! 
 F
  	Aj-"
 Gj! 
 F
  	Aj-"
 Gj! A|j! 	Aj!	 
 G
A!	 A�q!@@ AI
  Axj"
K
 A���l!@@  j"	Aj( s"As A���wjq 	( s"	As 	A���wjqrA����xq
 Aj" 
M
  K
  j!	  j!  k!A!@@@@  	kAK
A! A�q!@ E
 	 j!
 Aj! Aj! 
-"
 G
 
 A�qFAjAq j jAj!  	-"
 Gj! 
 F
  	Aj-"
 Gj! 
 F
  	Aj-"
 Gj! 
 F
  	Aj-"
 Gj! A|j! 	Aj!	 
 G
A!	  j!A!	  j j!  x  6  	6�
~#A�k"$@@@@ A$j"(
A! )!
 A0j" Aj)"B���˧�ٲ��7 A(j" B�ޑ��ܷ��7 AjAj" 
B�����ټ��7 B78  
B��̓׬۷��7  7  
7 B7@ Aj  . A�:O Aj A�jA. (" 5@B8� )8�"
 )�"B�  )|"�" )" )|"B �|" 
�  B
� �"
|" 
B��"
|" 
B
��"
 B� �" B �B��|"|" 
B��"
B
� 
 B� �" B �|"|"
�"B�  B� �" B �|"|"�"B
�  B� �" 
B �|"
|�" B� 
�"
 B �|"|" 
B� �B�� B�� B ���"	q! (!
 Aj(! Aj(! Aj(!A!@@  I"
 E
A!  A "Atj)"
BQ
    
B ��"qk qK
@@  	G
 
 
�"M
  Atj"Aj( G
 (" F
   �E
 Aj! Aj!  AtjAj! A�j$ @A؍�  
v�A!@ A�{K
A AjAxq AI! A|j"("Axq!@@@@@@@ AqE
 Axj" j!	  O
 (� 	F
 (� 	F
 	("Aq
 Axq"
 j" O
 A�I
  ArI
  kA��O
  k"AI
   AqrAr6  j" Ar6 	 	(Ar6   1 (� j" M
   AqrAr6  j"  k"Ar6  6�  6� (� j" I
@@  k"AK
  Aq rAr6  j" (Ar6A!A!   AqrAr6  j" Ar6  j" 6  (A~q6  6�  6�  k!@@ 
A�I
  	L@ 	(" 	("	F
 	 6  	6  (A~ Avwq6@ AI
   (AqrAr6  j" Ar6  j" (Ar6   1   (AqrAr6  j" (Ar6 !  
"E
    ("AxqAA Aqk"  K�!  $  �@@ E
A+A��� ("Aq"!  j! Aj! (!A-!@@ Aq
A!A!	@ E
 !
 !@ 	 -A�qA�Fj!	 Aj! 
Aj"

  j 	k!A!@@ (AF
    �
 (   Aj((	@ Aj("	 K
    �
 (   Aj((	@@ Aq
 	 k!	A!@@@A -0"
 
AF 	!A!	 	Av! 	AjAv!	 Aj!@ Aj"E
 ( ( ((E
AA! A:0 A06    �
 	 k!	A!@@@A -0"
 
AF 	!A!	 	Av! 	AjAv!	 Aj!@@ Aj"E
 ( ( ((E
A (!
A! (   ((	
 	Aj!	 (! (!@@ 	Aj"	
AA!  
 (E
 (!
A!    �
 (   ((	
 	Aj!	 (! (!@@ 	Aj"	
AA!  
 (E
 �~  (8 j68@@@ (<"
A!A!@@A k"   I"AO
B!A! 5!@ Ar O
  j3 At�� �! Ar!@  O
  j1 At�� �!  )0  AtA8q���"70  K
 A6< A j" Aj") A(j") �"|"	 )"
B
� 
 )|"
�"|" B��7  B �7  	 B��"B�  
B �|"�7   �7@   k" Aq"k"O
 Aj)! A j)! A(j)!	 )!
@  j)" 	�"	 |" 
 |"
 B
��"|" B��! 	B� �"B�  
B �|"
�!	 B �! 
 �!
 Aj" I
  7   
7  	7(  7A!@@ AO
B!A!  j5!@ Ar O
   jj3 At�� �! Ar!@  O
   jj1 At�� �!  70  6<   j6<�
~#A0k"$@@@@@ ("E
  Aj6  ("Aj6 -"
 A6  6 A6 Aj! A;	 A6 AjA: Aj 57 AjA:@ At"A�"E
 A6  6  6A! !A!A!@@@ Aj N ) !@ )BR
 Aj )(7 Aj 7  6  6 Aj!A��!	@ B��V
  �"	A��qAFj! Aj N ) !@ )BR
 Aj )(7 Aj 7  6  6 Aj!@  G
 Aj"
 I
 At" 
 
 I"
A����q 
G
 
At"AH
@@ 
 A�!  AtA �! E
  6 
!  j"
 	; 
Axj 7 Aj!  Aj"G
  6  6 Aj! AG
  )7 A6 Aj Aj(6 A�� A� AjA�: A6 Aj("E
 ( AtA� A0j$�~#Ak!B!B!@@@ A�qAj"AM
@@@@@@  ("E
  Aj6  ("Aj6 -!B!B!@ ("AI
  A~j6  ("Aj6 /"Av�!B! 5! A6 5	" 3
 1B��B ��B�"B��|�! B�! �!@ ("AI
  A|j6  ("Aj6 ("�"B�����! B�! 5! A6 5	" 3
 1B��B ��B�"B��|�! B�! �!@ ("AK
 5! A6 5	" 3
 1B��B ��B�"B��|�! B�! �!  Axj6  ("Aj6 )"B��|�! B�! �!@ B�B��� � �B���"B����T
 AjA4:  > A6 5! A6 5	" 3
 1B��B ��B�"B��|�! B�! �! Aj 7 Aj �B��B� � B���7 A6�  j!@@@ ("Aq
 AqE
 (" j!@ (�  k"G
 (AqAG
  6�  (A~q6  Ar6  6@ A�I
  L@ (" ("F
  6  6  (A~ Avwq6@ ("AqE
  A~q6  Ar6  j 6@@ (� F
 (� G
  6�  (� j"6�  Ar6  j 6  6�  (� j"6�  Ar6  (�G
 A6� A6� Axq" j!@@ A�I
  L@ (" ("F
  6  6  (A~ Avwq6  Ar6  j 6  (�G
  6�@ A�I
   D  Av"AtjAj!@@ ("A Aqt"qE
 (!   r6 !  6  6  6  6�#A0k"$  6A! (!@@@@@ Aj Aj (AF("AF
 AI
 ,A@H
 !  6  6@ A���F
A��� A�
  Ayj6  Aj6 A$jA6 B7 A؉�6 A6,  A(j6   Aj6(  Aj? E
@@@ ,"AL
 A�q!A!  j"!@ AF
 Aj! -A?q! Aq!@ A�qA�K
  Atr!@@  G
A! ! Aj! -A?q!  Atr!@ A�qA�O
  Atr!@@  G
A! -A?q! At AtA���qr rA/F
 A/G
 A$jA6 B7 A���6 A6,  A(j6   Aj6(  Aj? A$jA6 B7 A���6 A6,  A(j6   Aj6(  Aj? A0j$�@@@@ E
 ("AF
  Aj6@ Aj  +"
A! (!@ ("AK
A!  !A!@@@  Av"	 j"
Atj("(" F
AA  I!AAA (" I  F!  
 AF!  	k"AM
��@@@  Atj("("	 F
AA 	 I! (" F
AA  I!  AFj!  M!A!@ E
  Atj("( G
 (!@@ Aj"	E
 (E
 	(!A ( ((  !@ ("
AF
@ 
E
 	("	A$I
 	 A6 Aj 6@ A$I
 AЊ�AA���� !A!@ E
  A�  (Aj6 A �#A0k"$@@ 
A! A(j!@@@@@@ (-E
 (AȰ�A ((	
 A
6( B����7   6 A6  6  6 AjA
  *@@@@ (AG
 (!@   (jAj"6@@  ($"O
 (! (" I
 AO
 (  k"j"	 F
 	  �E
 ("	 I
  	I
   AjjAj- ( j 	 k* (! (AF
  (6 (A: ! (A: Aj! (!	 (!@ E  Fr"
  M
  j,A�L
    	(	
@ 
  M
  j,A�L
  j!  k"
A! Aw  A     A! A0j$ �#Ak! (" ("j!A! !A!@@@  j!	@  kAK
  k!A!@ E
 	 j! Aj! Aj! -"
  EAjAqj jAj!  	-"AGj! E
  	Aj-"AGj! E
  	Aj-"AGj! E
 Aj! 	Aj!  	Aj-"	AGj! 	
  (	6  Aj(6 AjA:  (6	 Aj (6 Aj �7 A6@  O
 A6 Aj �7 AjA6   k"	6   j"6@ 	
  (	6  Aj(6 AjA:  (6	 Aj (6 Aj �7 A6  	Aj6  Aj6 Aj 6  6 A6�~ (! (!@ ("E
@ (�! Aj"
@ E
A!A!@@@  /O
  Atj"A�j(! A�j(! Aj!@@ ("
 �!A!A! 3B � ��!A! A�A� �!@@ B ��" /O
 !@@@ ("
 �!A! Aj! 3B � ��! A�A� �! ! B ��" /O
 At jA�j(!  Atj"A�j(! A�j(!@ Aj"E
@ (�! Aj"
A! E
 Aj!@ E
  AlA� 
@ A���F
 (! A�A� E
 (! A�A� E
@ ("E
@ A�A� "! ("
 ! A�A��~#A�k"$ ((")! A0j" Aj)"B���˧�ٲ��7 A(j" B�ޑ��ܷ��7 A j" B�����ټ��7 B78  B��̓׬۷��7  7  7 B7@ Aj ( (. A�:O Aj A�jA. 5@! )8! )! )!	 )! )!
 A�j$   B8��"�"B�  	|"�"  
|"	B �|"
 �  B
� 	�"|" B��"|" B
��" B� 
�" B �B��|"|"	 B��"B
�  B� �" B �|"|"�"B�  B� �" 	B �|"|"�"	B
� 	 B� �" B �|"|�" B� �" B �|"|" B� �B�� B�� B ���~A!@ (A' Aj((
A!@@@@@ ("Awj"AM
 A�G
A�!@@ A�!A�!@@@A�� O
 eE
A! ArgAvAs�B������! ArgAvAs�B������!A! !@ !A�!A!A!@@@@ @@@@@ B ��A�q B�����`�B������!A! B�����`�B����0�!A�!A! B�����`�B���� �!A�!A!  �"AtAqvAq"A0r A�j A
I!@ E
 B|B����� B����p��!A! B�����`�B�����!A! B�����`�!A�!A! (A' ((A! ! (  ((E
 �~#A�k"$  ("6  Aj("6@@  O
  ((6  A+j(6 AjA:  (6	 Aj (6 Aj �7 A6   k"6   j"6@BB  �~"B����T
  )(7  A/j)7 AjA4:  )7	 Aj )7 A6  )(7  A/j)7@  �"O
  (6  Aj(6 AjA:  (6	 Aj (6 Aj �7 A6   k6   j6 A(j  T@ ((AF
  (,6 A6 Aj A(jAj)7 Aj A(jAj)7 A6 A�j$�@@ A�qAj"AK
@@@@ @ ("E
  Aj6  ("Aj6  17 B7 A;	 A: AjA: Aj 57@ ("AI
  A~j6  ("Aj6  37 B7 A: AjA: A	jA; Aj 57@ ("AI
  A|j6  ("Aj6  57 B7 A;	 A: AjA: Aj 57@ ("AI
  Axj6  ("Aj6  )7 B7 A;	 A: AjA: Aj 57 A: A	j : B7�#Ak"$ (!@@@@@@ A�I
 A6 A�I
@ A��O
  A?qA�r:  AvA?qA�r:
  AvAqA�r:A!  A?qA�r:  AvA�r:  AvA?qA�r:  AvA?qA�r:
A!@ (" Aj(G
 Aj" I
 At"   I"AH
@@ 
 A�! ( A �! E
  6 Aj 6 (! ( j :  (Aj6  A?qA�r:
  AvAqA�r:A! A��  Aj b Aj$A�~#A k"$ ("Aj"(! (! (! AjAj" Aj(6 Aj"	 Aj)7  )7  )7 Aj! !@@@@  Aj(G
  AA_"A�qAG
 Aj(! ( Atj" )7  6  )7 Aj (6 Aj 	)7  (Aj6 �B � ��!
@@  (I
 (!@ E
A! ( Atj")!  
7 BQ
 Aj! !
 Aq
�@ Aj(" K
A�  v (! A j$  AtjAjA�����@@@@@@ E
 ("AF
  Aj"6 A0j(!A!@ A8j("AK
 !  !@  Av" j"  Atj(( K!  k"AK
��  Atj((" F
   Ij!A! Aj" K
@@  M
@  Atj("Aj"E
 (E
 (!A ( (( ( (!@ ("AF
@ E
 ("A$I
  A6 Aj 6@ A$I
 AЊ�AA����A���  v ! (!  Aj6 �A!@A�{ A AK"k M
  A AjAxq AI"jAj
"E
 Axj!@@ Aj" q
 ! A|j"("Axq  jA kqAxj"  j  kAK" k"k!@ AqE
   (AqrAr6  j" (Ar6   (AqrAr6  (Ar6   1 (!  6   j6@ ("AqE
 Axq" AjM
   AqrAr6  j"  k"Ar6  j" (Ar6   1 Aj! �#A0k"$ (!@@ ("At"
A! Aj!A!@ ( j! Aj! Axj"
@@@@@@ Aj(
 !@ 
A���AAv@@ AK
 (E
  j" O
A!A! Aj! AL
 Aj!@ 
A!A! A�"E
 A6  6  6  Aj6 AjAj Aj)7 AjAj Aj)7  )7 AjA��� Aj
  )7 Aj Aj(6 A0j$� A�A�A3 AjA���p�~#A�k"$@@ E
 (
 A6 Aj)! A8j)! A0j)! A(j)! A j)!	 Aj)!
 AjAj Aj)7 AjAj 
7 AjAj 	7 AjA j 7 AjA(j" 7 AjA0j" 7  7 A�A� (!@ ("E
 At! !@ c Aj! A|j"
@ A4j("E
  AtA�@ A j(At"E
 Aj( A� A$jW@ A(j("E
 ($ AtA� A�j$���A!@@ E
  Atj! A��qAv!	A!
 A�q!@@ Aj! 
 -"j!
@ -" 	F
  	K
 
!
 !  G
@ 
 
I
 
 K
  
j!@@ E
 Aj! -!
 Aj! 
 G
A! 
!
 !  G
 
 
x 
 w E
  j! A��q!A!@@ Aj!
@@ -"AtAu"
AH
 
! 
 F
 
A�qAt -r! Aj!  k"AH
 As!  G
AĨ�� Aq�~#Ak!@@@@ ("AI
  A|j"6  ("Aj"6 ("ApI
 AF
 AjA: A;	 AjA: Aj 57 AjA:  6 AjA: A6@@@ AI
  Atj6  Aj6 )"B����T
A4!A! A6 5	 3
 1B��B ��B�B�! �!	 Aj B8�< A
j B(�= A	j B�> Aj 	7 Aj :  > AjA: A6 A6�~#A0k"$A'!@@ B��Z
 !A'!@ A	j j"A|j  B���"B��~}�"A��qA�n"AtA�j/; A~j  A�lkA��qAtA�j/; A|j! B���/V! ! 
@ �"A�L
 A	j A~j"j �" A��qA�n"A�lkA��qAtA�j/;@@ A
H
 A	j A~j"j AtA�j/; A	j Aj"j A0j:  A���A A	j jA' k-! A0j$ �@@ Av"
A!A! A���K
 A g"kAqvAq AtkA>j! B7  6  AtjA�j!@@@@@ ("A Aqt"qE
 ("(Axq G
 !   r6  6  6 AA AvkAq AFt!@  AvAqjAj"("E
 At! ! (Axq G
 (" 6  6 A6  6  6  6  6  6  6�#Ak"$ (!@@@@ A�I
 A6 A�I
@ A��O
  A?qA�r:  AvA?qA�r:
  AvAqA�r:A!  A?qA�r:  AvA�r:  AvA?qA�r:  AvA?qA�r:
A!@ (" (G
 An (! ( j :  (Aj6  A?qA�r:
  AvAqA�r:A!  n  (" j6  (j Aj � Aj$A�#Ak"$@@@@ A�I
 A6 A�I
@ A��O
  A?qA�r:  AvA?qA�r:
  AvAqA�r:A!  A?qA�r:  AvA�r:  AvA?qA�r:  AvA?qA�r:
A!@ (" (G
 Ao (! ( j :  (Aj6  A?qA�r:
  AvAqA�r:A!  o  (" j6  (j Aj � Aj$�~#A�k"$A!@ -
 (!@ ("-Aq
A! (Aΰ�Aհ� AA  Aj((	
  ( (!@ 
A! (AӰ�A Aj((	
 (!A! A:  Aj6 )! )! A4jA���6  )7 ) !	 )(!
  -0:H )!  
7@  	78  7(  7   7  Aj60  Aj (
 (0A̰�A (4(	!  :  (Aj6 A�j$ �~#A�k"$ Aj ("Aj("6  6  )7  ("6@@@@ E
@@ Aj  (  
 )BQ
  (<"6  (8"6 )("B,Q
@ )  Q
 (! 
 A(j )07  7   7  Aj ) ! Aj )(7  7 B7 (AF
  ( Aj(k�B �B�7 B,7 B7  ")7 Aj Aj)7 A�j$�#A�k"$@@@@@ ("Aq
 (! A q
 �A C! (!A!@  jA�j Aq"A0r A�j A
I: Aj! Av"
 A�j"A�O
 AA�A  jA�jA k-!A!@  jA�j Aq"A0r A7j A
I: Aj! Av"
 A�j"A�O
 AA�A  jA�jA k-! A�j$  A�x A�x�~@ ("E
 Aj("Aj!  jAj! (AsA����xq! Aj(!@@@@ E
 !@  O
 A�j! (! Aj"! A����xq"A����xF
 A����xs! ! Aj q!  hAvAlj"Aj("E
 ( A�A!@@ ("Aj�B~"B ��E
@ AjA|q" AjO
  �j" I
 A}IAt! (  ��#A�k"$@ ("
 Aj! (! A6  B7  Aj6$ A(jAj Aj)7 A(jAj Aj)7  )7( A$jA��� A(j AjAj" ( 6  )7@ ("E
 Aj("E
  A�  )7 Aj (6 (! A6 Aj(! Aj"(! B7@AA�"
AA�  6  6  6 A���6  6 A�j$� (!@@@ (" G
 AA Aj"("j("
A! (" 6  6  Aj !@ !@ "Aj"("
 Aj! (! 
 A6@ E
@@  (AtjA�j"( G
  6 
  (A~ (wq6 AA ( Fj 6 E
  6@ ("E
  6  6 Aj("E
 Aj 6  6�@@@@@@@ Aj(" Aj("k I
 (!  j" I
 At"   I"A����q G
 At"AH
@@ 
 A�! ( AtA �! E
  6 Aj 6 Aj(!  Atj! AI
 Aj!  j!@  7 Aj! Aj"
 Aj! A�� E
  7 Aj! Aj 6�	~@@@@ ("
 (!  Aj"6  ("Aj6 -!B!A!A~!A!@@ �B�� A?q�� �! AtAuAJ
  j!  F
   j6  Aj6 Aj! Aj! A8G!	 Aj-! Aj"
! 	
 
! A�qAM
 A: Aj! A: AjA: A	jA; Aj �7 B7  7 B7�@@ A�I
@@@@@@ A��I
 AvApj"A�I
A� A�v AvA`j"A�K
 A�j("  jA�j-"M
 (� Atj!  jA�	j-At AvA?qr" A�j("O
 A�j(" (� j-"M
 (� Atj!Aб� A�vA�  vA���  vA���  v  AvA����qj! )B A?q���BR�~ (! (! (! )!	@@@ A���F"E
A؎�!A! Aj! /! At!A!@@@@@ 
@ E
A! /! )!
 Axj! Aj! Aj!@AAA 
 	V 
 	QAjA! 
A!A!  6  6 Aj 6 Aj 6 Aj 6  6  Aj"6   AtjA�j("6�#Ak"$@@ E
 ("AF
  Aj6 �"6@@ A8j("E
 A0j(! At!@@@ ("Aj"E
 (
A ( (( ( (! ("AF
@ E
 ("A$I
  A6  6 Aj! Aj � A|j"
 (!  (Aj6 Aj$ @ A$I
 AЊ�AA�������~ (! (! (! )!	@@@ A���F"E
A���!A! Aj! /! At!A!@@@@@ 
@ E
A! /! )!
 Axj! Aj! Aj!@AAA 
 	V 
 	QAjA! 
A!A!  6  6 Aj 6 Aj 6 Aj 6  6  Aj"6   AtjA�j("6�#A0k"$@@@@@ ("( A$jA6 A���6  B7 A���6  Ajz!  Aj6 A$jA6 B7 A�6 A6,  A(j6   Aj6(  Ajz! A$jA6 A���6  B7 Ađ�6  Ajz!  Aj6 A$jA6 B7 A���6 A6,  A(j6   Aj6(  Ajz! A0j$ �~#Ak! (!@@ 
@ AI
  Axj6  ("Aj6@ )"B����T
 AjA4:  > A6 5! A6 5	! 3
! 1! Aj 7 Aj   B��B ��B�B�7@ AI
  A|j6  ("Aj6  (6 A6 A;	 AjA: Aj 57 AjA: A6�#A�k"$A! (! (! (! (!@@@@A(��@AF
AB����7��@AA(��@Aj"6��@ AK
 A0j    � A$j A8j)7  6 A���6 A���6  )07A(��@"AL
A Aj"6��@@A(��@"E
A(��@! Aj  (  )7  Aj (A(��@!A Aj6��@ AM
  ��@ A�j("E
 At! (�Aj!@@ Aj("E
 ( AlA� A j! A`j"
@ A�j("E
 (� AtA� A�j6@ )B-Q
@ A�j("E
 (T AtA�@ A�j("E
 (` AtA�@ A�j("E
 (l AtA� A�j("E
 (x A8lA��@ ("E
 (" Atj!@@ Aj("E
 ( A� (" (Aj6@ ("(
@ Aj("A$I
  (!  (Aj6 ("(
 AA�@ Aj("E
 Aj(! At!@ c Aj! A|j"
 A j!@ Aj("E
 ( AtA� !  G
�#Ak"$ A6@@@ A�I
 A�I
@ A��O
  A?qA�r:  AvA?qA�r:
  AvAqA�r:A!  A?qA�r:  AvA�r:  AvA?qA�r:  AvA?qA�r:
A!  :A!  A?qA�r:
  AvAqA�r:A!  Aj 4! Aj$ �~ (Aj!B!A!@@@@ AG
 A: AjA: A	jA; Aj 57  6  ("Aj6 -!@ A?G
 A�F
 
 AtAu"�B�� A?q�� �! Aj! Aj! AL
@ A?J
 A�qE
 B A?q���!  7 B7 A: B7�A!A���!@@@@@@@@@@@@@@@@@@@ A�q	

A
!A���!A!A���!A!A���!A���!A	!A���!
A
!A�!A!A�!A!Aן�!
A!Aȟ�!	A
!A���!A!A���!A!A���!A!A���!A!A���!A
!A���!A!A�!A
!Aݞ�!A!A˞�!  6  6�@@@ AI
 (A����F
 AjA6 A; AjA: Aj �7 AjA: AjA6 Aj!@ A|qAF
@ ("AG
 Aj Axj6  Aj6 A6 Aj 6 AjA6 A6 A; AjA: Aj �7 AjA: AjA6 A6�#A�k"$ Aj!@ (
 (! A6  B7  Aj6$ A(jAj Aj)7 A(jAj Aj)7  )7( A$jA��� A(j AjAj" ( 6  )7@ ("E
 Aj("E
  A�  )7 Aj (6 A���6  6 A�j$�#Ak"$  (A��A Aj((	:  6 A:	 A6  6  AjA��G -!@ ("E
 A�q!A!@ 
@ AG
 -	A�qE
 ("-Aq
A! (Aְ�A Aj((	
 ("(A���A Aj((	!  : Aj$ A�qAG�#A�k"$  6  6@  G
   � A�j$ A(jAjA
6 A4jA6 AjAjA6  Aj6@  Aj6D A�jAjA6 B7 A܇�6 A6, A���6X B7L A���6H  A(j6   A�j68  A�j60  A�j6( AjA�����A!@@ Aj(" k O
  j" I!@@ E
A! 
 At"   I!A! 
A! A���?q G
A! At"AH
@@ 
 A�! ( AtA �! E
  6 Aj 6A!  A��#Ak"$@@ E
 ("AF
  Aj6 �"6@ A,j("E
 Aj A$j("(Aj�@ AF
 A0j! AtA`j!@ Aj (Aj� A j! A`j"
 (!  (Aj6 Aj$ ���#Ak"$@@@ E
      ( (!@@ (" ("G
 ! !  I
@ 
A!@ 
A!A!  AtA�  AtA At"�"E
  6  6 Aj$A���A0�A�� A��@@@@ Aj(" Aj("k I
 (!  j" I
 At"   I"AH
@@ 
 A�! ( A �! E
  6 Aj 6 Aj(! Aj  j6  j  � A��� (" (Aj6@ ("(
 (" (Aj6@ ("(
@ Aj("A$I
  (!  (Aj6 ("(
 AA�@ Aj(E
 Aj("A$I
  (" (Aj6 ("(
 A A��#A�k"$  7@ P
  :  7  7  )7 Aj Aj(6 A�j$ A4jA6 A$jA6 B7 A���6 A6,  Aj68 A���6<  A(j6   A<j60  A8j6( AjA�����@ A��I
@@ A��I
A! A�tjA�,I
 A��tjA�I
 A��tjAI
 A���qA��
F
 A��ujA)I
 AˑujAI
 A��GjA��K Aѷ�A#A���A�A���A�A!  A���A)A�A�A���A�A�~#A�k"$ )!A!@  jA�j �Aq"A0r A�j A
I: Aj! B�"BR
@ A�j"A�I
 A�x AA�A  jA�jA k-! A�j$ �~#A�k"$ )!A!@  jA�j �Aq"A0r A7j A
I: Aj! B�"BR
@ A�j"A�I
 A�x AA�A  jA�jA k-! A�j$ �#A�k"$ -!A!@  jA�j Aq"A0r A�j A
I: Aj! AvAq"
@ A�j"A�I
 A�x AA�A  jA�jA k-! A�j$ �#A�k"$ -!A!@  jA�j Aq"A0r A7j A
I: Aj! AvAq"
@ A�j"A�I
 A�x AA�A  jA�jA k-! A�j$ �#A�k"$ (!A!@  jA�j Aq"A0r A�j A
I: Aj! Av"
@ A�j"A�I
 A�x AA�A  jA�jA k-! A�j$ �#A�k"$ (!A!@  jA�j Aq"A0r A7j A
I: Aj! Av"
@ A�j"A�I
 A�x AA�A  jA�jA k-! A�j$ � -!@ ("E
 A�q!A!@ 
@ AG
 -	E
 ("-Aq
A! (Aְ�A Aj((	
 ("(A���A Aj((	!  : A�qAG�@@@ Aj(" k O
  j" I
 At"   I"AH
@@ 
 A�! ( A �! E
  6 Aj 6 A���@@@ (" ("k O
  j" I
 At"   I"AH
@@ 
 A�! ( A �! E
  6  6 A���@@@ (" ("k O
  j" I
 At"   I"AH
@@ 
 A�! ( A �! E
  6  6 A���#A�k"$  6  6  6  6 A,jA6 A<jA�6 B7 A�6 A?64  A0j6(  Aj68  Aj60 AjA����y#A k"$@  I
 Aj(! (! AjA6 A���6 B7 A���6   Aj
 Aj I! A j$  A j$Aq@@  I
 E
 !@  -: Aj! Aj! Aj"
 E
 Aj! Aj!@  j  j-: Aj"
 � -!@ -E
 A�q!A!@ 
 ("Aj((! (!@ -Aq
 AѰ�A 	! Aа�A 	!  : A�qAGx~#A0k"$ ��! ��! Aj � )! �!  �6  6  7 A6$  6  A jA��� � AjUn@ ("E
  Aj6  ("Aj6  -: A: AjA: A	jA; Aj 57 AjA: A:m#A0k"$  6  6 AjA6 A,jA>6 B7 A�6 A>6$  A j6  6(  Aj6  Aj �p#A0k"$  6  6 AjA6 A,jA>6 B7 Aة�6 A>6$  A j6  Aj6(  6  AjA��p#A0k"$  6  6 AjA6 A,jA>6 B7 A���6 A>6$  A j6  Aj6(  6  AjA����d#A k"$ Aj(! (! AjAj Aj)7 AjAj Aj)7  )7   Aj! A j$ d#A k"$ Aj(! (! AjAj Aj)7 AjAj Aj)7  )7   Aj! A j$ c#A k"$  (6 AjAj Aj)7 AjAj Aj)7  )7 AjA��� Aj! A j$ c#A k"$  (6 AjAj Aj)7 AjAj Aj)7  )7 AjA��� Aj! A j$ s@@A��� O
@@A��� O
A��  >!A�� 
! 
AA��  ,      K�!A�� $ c#A k"$  (6 AjAj Aj)7 AjAj Aj)7  )7 AjA��� Aj! A j$ c#A k"$  (6 AjAj Aj)7 AjAj Aj)7  )7 AjAذ� Aj! A j$ `#A k"$  6 AjAj Aj)7 AjAj Aj)7  )7 AjAذ� Aj! A j$ i~#A0k"$ )! )! )! AjA6 A���6 B7  7  Aj6  7(  7   A j�k (! A6@@@ 
A!A���! (!AA�"E
  6  6A�!  6  6AA�h~#Ak"$ Aj  !@@ )"B������B���� Q
  7A!  6 Aj 6A!  6 Aj$c#A0k"$ A j ( ( ( (� Aj A(j)7  6 A���6 A���6  ) 7 tJA!@ E
@@ -" -"G
 Aj! Aj! Aj"E
  k! T@@ A���F
A! (  Aj((
@ 
A (   Aj((	! G#Ak"$ (!  A���A�  6  AjA���G l! Aj$ G#Ak"$ (!  A���A�  6  AjA���G l! Aj$ G#Ak"$ (!  A���A�  6  AjA���G l! Aj$ G#Ak"$ (!  AÒ�A�  6  AjA���G l! Aj$ G#Ak"$ (!  Aؒ�A�  6  AjAȒ�G l! Aj$ @~@ BS
  ) |7@ )"B }Z
 B7   |7K~#A k"$ )! Aj )7  7  6 A���6 A���6 �6@ E
 !@  -: Aj! Aj! Aj"
 �A!@ B~|"B�V
@@ �TA A��qAF! /@ A|K
@ 
A  A}IAt�"E
 �2 (!@ �
@ �
  �  k  j2 (!@ �
@ �
  �  g  f2 (!@ �
@ �
  �  i  h0#Ak"$ Aj A���A� Ajs! Aj$ 4  (   Aj((	:  6  E:	 A60 (" n  (" j6  (j  �A0 (" o  (" j6  (j  �A0 (   Aj((	! A:  :  6,@ E
 !@  : Aj! Aj"
 ,#Ak"$  6  6 AjAԆ�A U(@ E
      (
A���A0�#@ A|K
  A �"E
 �'@ ("E
 Aj("E
  A�%#Ak"$  6  6 Aj�$ ("( AA (AFj( �&@ E
     (
A���A0�&@ E
     (A���A0�&@ E
     (
A���A0�&@ E
     (A���A0�&@ E
     (A���A0�&@ E
     (
A���A0�&@ E
     (A���A0�1@A)��@BQ
AB7��@AB7��@AB7��@A��$@ E
    (A���A0�* A�A��� ("6  A��� 6$ A���6 A6 B7 AjB7"@ E
   (A���A0�'@A��� O
A��  >A�� 
  6  6  6  6@ ("E
 ( A�  A(��@"A-  (A��A Aj((	    }! @ 
A�� @ 
A��  (  (( (  bA ( ( �  �!   ( ("
 -AqAv
 -A qAv   � ( (
 ( FA
 5A C
 1A C
 (  4
 5A C
 )A C (  ( �
A���A�A���A��	  
  �  )7 ( X
   "
 A���A"     A�� $ tAئ�� Aj��� ( ( (B�…����
B��ہ����
B�ɀ�����Bԋ�젒͆PABԋ�젒͆P�ـ�A����Uinternal error: entered unreachable codesrc/liballoc/raw_vec.rs((�Tried to shrink to a larger capacityX$(D	((�called `Option::unwrap()` on a `None` valuesrc/libcore/option.rs�+�zC:\Users\rreverser\.cargo\registry\src\github.com-1ecc6299db9ec823\gimli-0.19.0\src\read\line.rsattempt to calculate the remainder with a divisor of zerop9`�attempt to divide by zero�`��`W)src/libcore/slice/mod.rsassertion failed: mid <= len4�
cannot access a TLS value during or after it is destroyed/cargo/registry/src/github.com-1ecc6299db9ec823/hashbrown-0.4.0/src/raw/mod.rsHash table capacity overflow�NN(����	
src/libcore/slice/mod.rsassertion failed: `(left == right)`
  left: ``,
 right: ``: �-��destination and source slices have different lengths�4�X	src\path.rs@$assertion failed: is_absolute(&s)/rustc/file://�file:///�https://raw.githubusercontent.com/rust-lang/rust/�1C:\Users\rreverser\.cargo\registry\src\github.com-1ecc6299db9ec823\once_cell-1.2.0\src\lib.rs�]�
reentrant initC:\Users\rreverser\.cargo\registry\src\github.com-1ecc6299db9ec823\gimli-0.19.0\src\read\unit.rs``CC:\Users\rreverser\.cargo\registry\src\github.com-1ecc6299db9ec823\gimli-0.19.0\src\read\abbrev.rs�bD	assertion failed: self.form == constants::DW_FORM_implicit_const/rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/libcore/slice/mod.rs�H�

�H�
/rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/libcore/slice/mod.rsH�

Xa Display implementation returned an error unexpectedlycalled `Option::unwrap()` on a `None` valuesrc/libcore/option.rs�+�zcalled `Result::unwrap()` on an `Err` value/rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/libcore/slice/mod.rs@H�

����.debug_�Missing code section.�Unsupported WebAssembly version .� �WebAssembly magic mismatch.	DwCfaDwLnsDwLneDwOpReaderOffsetIdExpectedStringAttributeValueMissingFileEntryFormatPathUnsupportedAttributeFormMissingUnitDieUnsupportedSegmentSizeUnsupportedAddressIndexUnsupportedUnitTypeVariableLengthSearchTableCfiStackFullTooManyRegisterRulesUnsupportedRegisterUnsupportedPointerEncodingUnknownAugmentationOffsetOutOfBoundsNoEntryAtGivenOffsetUnknownPointerEncodingUnsupportedOffsetNoUnwindInfoForAddressPopWithEmptyStackCfiInstructionInInvalidContextInvalidLocationAddressRangeInvalidAddressRangeUnknownCallFrameInstructionInvalidShiftExpressionUnsupportedTypeOperationIntegralTypeRequiredTypeMismatchDivisionByZeroInvalidExpressionTerminatorInvalidPieceInvalidExpressionTooManyIterationsNotEnoughStackItemsInvalidPushObjectAddressBadBranchTargetNotFdePointerNotCiePointerNotCieIdBadUtf8OpcodeBaseZeroLineRangeZeroMaximumOperationsPerInstructionZeroMinimumInstructionLengthZeroUnsupportedFieldSizeUnsupportedOffsetSizeUnsupportedAddressSizeUnknownExtendedOpcodeUnknownStandardOpcode UnexpectedNullUnexpectedEof!UnknownAbbreviationUnknownVersionUnknownReservedLengthDuplicateArangeDuplicateAbbreviationCodeExpectedZeroUnknownFormBadLengthBadHasChildrenAttributeFormZeroAbbreviationTagZeroBadSignedLeb128BadUnsignedLeb128CannotParseOmitPointerEncodingFuncRelativePointerInBadContextDataRelativePointerButDataBaseIsUndefinedTextRelativePointerButTextBaseIsUndefinedPcRelativePointerButSectionBaseIsUndefinedIo.debug_types.debug_str_offsets.debug_str.debug_rnglists.debug_ranges.debug_pubtypes.debug_pubnames.debug_macinfo.debug_loclists.debug_loc.debug_line_str.debug_line.debug_info.eh_frame_hdr.eh_frame.debug_frame.debug_aranges.debug_addr.debug_abbrevassertion failed: `(left != right)`
  left: ``,
 right: ``@-myC:\Users\rreverser\.cargo\registry\src\github.com-1ecc6299db9ec823\gimli-0.19.0\src\read\abbrev.rs�b�	closure invoked recursively or destroyed alreadyTried to shrink to a larger capacitysrc/liballoc/raw_vec.rs8$\D	null pointer passed to rustrecursive use of an object detected which would lead to unsafe aliasing in rust./0123called `Option::unwrap()` on a `None` valuesrc/libcore/option.rs +KzAccessError456789:;</rustc/625451e376bb2e5283fc4741caa0a3e8a2ca4d54/src/libcore/fmt/mod.rs�Fc=src/liballoc/raw_vec.rscapacity overflowG0�a formatting trait implementation returned an error`..�DEindex out of bounds: the len is  but the index is � �called `Option::unwrap()` on a `None` valuesrc/libcore/option.rs+/z: �\src/libcore/result.rsp<src/libcore/slice/mod.rsindex  out of range for slice of length ��"�
slice index starts at  but ends at �
�
)src/libcore/str/mod.rs[...]byte index  is out of bounds of `Xc�=	begin <= end ( <= ) when slicing `����= is not a char boundary; it is inside  (bytes ) of `X�&&�=0x00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899FGHI    ,
, } }(
(,JKLMsrc/libcore/fmt/mod.rspW(pc()src/libcore/unicode/bool_trie.rs� '� ( � *� +� , 	


	 +,-.012���������	�xy���0WX����KL��./?\]_�ℍ��������������)147:;=IJ]��������������
)14:;EFIJ^de�������
)EIWde������������
EIde����������񃅋����������H������INOWY^_�����������[\�����
mq��no_}~�����FGNOXZ\^~�������rs�tu��/_&./�������ߚ@��0����NOZ['/��no7=?BE����Sgu������� _"���D����5��/4
PU
	:W
PC-:%_ mj%������Y	j
Y+F
,1,��
AL-t<<8+��/- !������/;	��0t������$��
�0��7	�\����05
8FtZY	��
	H����1���&���mx(*L����
	
$jk����	������� ���';>NO����	6=>V���67VW�5�������
)14:EFIJNOdeZ\������	7���
;>fi��o_��Zb��'(U�����������:?EQ���͠"%>?�� #%&(38:HJLPSUVXZ\^`cefksx}�������r����no^"{-e/.��1$	+D*��$$(4���7	
��9c	0!@8K/
	@ '	6:PI73
3.
�&��(*��	NC
G	'	u?A*;
Q��` H
��^"E

9
6,��<dS��EHS9�F
GI7
9
�6��2
��fu�Ċ��/�тG���9*`&
F
(��[eK9@����
�1���k
	�`��
snF��W	���G�B�P+��-�p:���)L
�DL=��<U4�,dV

]=9
,	����

tY8
(Rw1��
�j���>�������!�P �@�9#�!�� �@ ���=`�D0`X ��\����?�������@�f�d  ��?@� 8`��	@������<;@������!���������������������?�D`0����?���3 ~f��0@ !@����	

 !"#$%&'()*+,-./0123)456788889 �n��`�����x�����@��X���\@��
�<�0��(�������y�~������m~�����`����<������������ ��������������������������������������������������������=������ XJ� �":	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI;TryFromIntErrorJNErrorA����쀀name�쀀�__wbindgen_object_drop_ref__wbg_new_8e4c496df8c98a76__wbindgen_object_clone_ref__wbindgen_string_new__wbg_new_951e889c56bc7e3c__wbg_push_36cde80dfc256d1d__wbg_new_4d5ae649984849e5__wbindgen_throw__wbindgen_rethrow	resolver_from_slice
5gimli::read::unit::parse_attribute::hac3ee5935e0230e9;gimli::read::line::DebugLine<R>::program::hcc6982a97e958b319gimli::read::unit::Attribute<R>::value::hf2ced94888faaf3d
7dlmalloc::dlmalloc::Dlmalloc::malloc::hdeb1d8a00336bd7d5gimli::read::line::parse_attribute::h155e3c16c07a9ec55gimli::read::dwarf::Dwarf<T>::load::h9de3d3b7fc916237+alloc::slice::merge_sort::h3415fe75574fa0ecJgimli::read::line::LineRows<R,Program,Offset>::next_row::h4ae5945496437066@<gimli::read::Error as core::fmt::Debug>::fmt::h5e2315013c81dcdb<gimli::read::dwarf::Unit<R>::new_internal::h94842cbdc8e6ba85+alloc::slice::merge_sort::h00946ba9dde97ab5�alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>,alloc::collections::btree::node::marker::Edge>::insert::h5137357b74647901>hashbrown::raw::RawTable<T>::reserve_rehash::h9d5cf335b8d749884wasm_source_map::path::Path::push::hbd26af8d206b38cbEgimli::read::abbrev::DebugAbbrev<R>::abbreviations::hfe17ee33aa83cd90t<wasm_source_map::wasm::parse_sections::Iterator<R> as fallible_iterator::FallibleIterator>::next::h2bb496e0e637561f3core::option::Option<&T>::cloned::h155aa9240b7f820e�alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert::h56f0a00b3588dcd8.core::str::slice_error_fail::hc68cd9f1686cb91dDindexmap::map::OrderMapCore<K,V>::double_capacity::hffd15abc63f01fa7#core::fmt::write::h039a8b266859393dBgimli::read::unit::EntriesCursor<R>::next_entry::h22a522ff2872ead2 Kalloc::collections::btree::map::VacantEntry<K,V>::insert::h6532905935e9bcc6!1core::str::run_utf8_validation::hdd66d14dd85fd253",core::fmt::Formatter::pad::hc783db844e0d594f#=gimli::read::abbrev::Abbreviations::insert::he52382929cf89f71$5dlmalloc::dlmalloc::Dlmalloc::free::hfc40c24e95d91aa8%8indexmap::map::IndexMap<K,V,S>::entry::he52a1e07ced09672&Igimli::read::unit::CompilationUnitHeadersIter<R>::next::hf32b991c4e00ce6c'Dgimli::read::line::FileEntry<R,Offset>::path_name::ha8587a73eccb7405(jcore::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once::h40b8712671b0d4dd)<gimli::read::dwarf::Dwarf<R>::attr_string::h46064b8dfcaab47e*.core::slice::memchr::memchr::h969dd85bd844921c+6indexmap::map::IndexMap<K,V,S>::get::h7746ab0377e461a4,8dlmalloc::dlmalloc::Dlmalloc::realloc::hee455b5a48d76572-5core::fmt::Formatter::pad_integral::h3418db47adb1815e.\<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::write::h1bf5b84ab4432fa1/<gimli::read::line::FileEntryFormat::parse::h1c9fc2af758380350Agimli::read::reader::Reader::read_sized_offset::hb061d0160a22ae931>dlmalloc::dlmalloc::Dlmalloc::dispose_chunk::h27e6938f6b52d57f26wasm_source_map::path::Path::to_uri::hf46d09c53cef605a3resolver_resolveReverse4S<core::fmt::builders::PadAdapter as core::fmt::Write>::write_str::hc203d0d8458706df5Jgimli::read::reader::Reader::read_null_terminated_slice::he63ee8e477f6df206a<alloc::collections::btree::map::BTreeMap<K,V> as core::ops::drop::Drop>::drop::haf6d35d7c2e9e3af7Fhashbrown::map::HashMap<K,V,S>::insert::{{closure}}::h9ffc701f1a65b8cd82<char as core::fmt::Debug>::fmt::h67bbfda59d0b33639Ggimli::read::str::DebugStrOffsets<R>::get_str_offset::h99e4f4bfa830b25f:<gimli::read::reader::Reader::read_address::h8fec998e7d96f8a3;;<&mut W as core::fmt::Write>::write_char::h54b032c07c589df7<:indexmap::map::VacantEntry<K,V>::insert::h253731929fd0be1b=resolver_resolve>9dlmalloc::dlmalloc::Dlmalloc::memalign::h837f7ea7457f7e5d?%alloc::fmt::format::hd1da9e7f5bcc0447@__wbg_resolver_freeA2core::unicode::printable::check::hb556b767389e6c5cBCgimli::read::reader::Reader::read_initial_length::hbd347e7a903b92d4C/core::fmt::num::imp::fmt_u64::h825efd0b938f9c1fDCdlmalloc::dlmalloc::Dlmalloc::insert_large_chunk::hc962aecbd3996b32E;<&mut W as core::fmt::Write>::write_char::hf79e7be0b2671f4eF.alloc::string::String::push::hd1942728a388e722G9core::fmt::builders::DebugTuple::field::h6bf3adbd0035fa76HUgimli::read::unit::DebuggingInformationEntry<R,Offset>::attr_value::h55d751ef6568fc2eIIcore::fmt::num::<impl core::fmt::Debug for usize>::fmt::h1f8c6c680f12ec3aJ0core::ptr::real_drop_in_place::h44ee5efd46cc2e22Kh<std::panicking::continue_panic_fmt::PanicPayload as core::panic::BoxMeUp>::box_me_up::h6906e16029c1d34fLCdlmalloc::dlmalloc::Dlmalloc::unlink_large_chunk::hc6d7cfd22918caecM2alloc::vec::Vec<T>::extend_with::h53b6100242c6b4e8N0gimli::leb128::read::unsigned::hb036451949a76bb0O=core::unicode::bool_trie::BoolTrie::lookup::h69475374b28dcc9ePAalloc::collections::btree::search::search_tree::h442a6bb067734a28Qresolver_listMappingsRAalloc::collections::btree::search::search_tree::h8c1f2788d19eb37cS2<&T as core::fmt::Display>::fmt::h2d58b1f38fbf7238T9gimli::read::reader::Reader::read_word::h5682b296c949d3a9U7std::panicking::rust_panic_with_hook::h38e55c6f9a9b5d9fV0core::ptr::real_drop_in_place::h4848a181a59255dfWF<alloc::vec::Vec<T> as core::ops::drop::Drop>::drop::h7dfe5db4f51272efX/core::fmt::Write::write_char::h8cb8a51b95a13894Y.gimli::leb128::read::signed::h4bfd550693b74a55Z1gimli::common::SectionId::name::haa0dfbc668ede7aa[8wasm_source_map::wasm::parse_sections::h817196a0c79b51f8\b<std::panicking::continue_panic_fmt::PanicPayload as core::panic::BoxMeUp>::get::h27c5725f17b0649e]H<core::num::TryFromIntError as core::fmt::Debug>::fmt::h4d06072b13f2074c^;core::slice::<impl [T]>::copy_from_slice::h39a7256ae73acc81_@alloc::raw_vec::RawVec<T,A>::reserve_internal::hd8dcb7f6edae8323`resolver_listFilesa?wasm_bindgen::convert::closures::invoke3_mut::h78e753f387ca3667b8alloc::vec::Vec<T>::extend_from_slice::hda8ecfbbaf539515cD<alloc::rc::Rc<T> as core::ops::drop::Drop>::drop::hab2d94ab18daa7bcd9gimli::read::abbrev::Abbreviation::new::hc8ddbfbc8707eca2e9core::unicode::printable::is_printable::hb1a55d915d836b3ffJcore::fmt::num::<impl core::fmt::LowerHex for i64>::fmt::hbfd185df5ec5673dgJcore::fmt::num::<impl core::fmt::UpperHex for i64>::fmt::h688d31228b1c8081hIcore::fmt::num::<impl core::fmt::LowerHex for i8>::fmt::h3e0cb1074c6cc73aiIcore::fmt::num::<impl core::fmt::UpperHex for i8>::fmt::hea46156bce3ac310jJcore::fmt::num::<impl core::fmt::LowerHex for i32>::fmt::h28cf5946b2bfe734kJcore::fmt::num::<impl core::fmt::UpperHex for i32>::fmt::hdd7281b62fc3629bl:core::fmt::builders::DebugTuple::finish::h4a21d9c0a2da9f86m7alloc::raw_vec::RawVec<T,A>::reserve::hc96ad29f4cfddd64n.alloc::vec::Vec<T>::reserve::he54c814da3e7df5fo.alloc::vec::Vec<T>::reserve::hb077759c17742483p.core::result::unwrap_failed::hf7591c1dd9412006qJ<core::ops::range::Range<Idx> as core::fmt::Debug>::fmt::hbf7f9c895959a36armemmoves;core::fmt::builders::DebugStruct::finish::ha8c543083b0bf3b3t5std::panicking::continue_panic_fmt::hbdab1a44e1ebdad7u7gimli::read::reader::Reader::read_u8::h78cd81e8567fcac6v6core::panicking::panic_bounds_check::hf0c95c4cc84d34caw4core::slice::slice_index_len_fail::hb127c44fd7796150x6core::slice::slice_index_order_fail::h6fd8dc7590d931d7yD<core::fmt::Arguments as core::fmt::Display>::fmt::hed4a532dcce75876z2core::fmt::Formatter::write_fmt::hb345e3d6fc015b78{:<&mut W as core::fmt::Write>::write_fmt::he2ee86ce5ae3ac8f|:<&mut W as core::fmt::Write>::write_fmt::hdb5f24520a9044a3}
__rdl_realloc~:<&mut W as core::fmt::Write>::write_fmt::h79f4c7e7c5498e29:<&mut W as core::fmt::Write>::write_fmt::hb756c42387c5d4dd�.core::fmt::Write::write_fmt::h7d3a20f659b4c3d3�)core::panicking::panic::hda536e6f3accfb91�d<std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::box_me_up::h00ee73bf1fd8bbd1�'core::str::from_utf8::hb22bcd87296c7386�2std::panicking::begin_panic_fmt::h27bc29fa4b43b915�memcmp�Ccore::fmt::Formatter::pad_integral::write_prefix::h79dd01e27253f501�0<&T as core::fmt::Debug>::fmt::h5e836e5dbe761253�0<&T as core::fmt::Debug>::fmt::h65f9fc571af45106�0<&T as core::fmt::Debug>::fmt::h96fc76b2726093c7�0<&T as core::fmt::Debug>::fmt::hafba166e22b15147�0<&T as core::fmt::Debug>::fmt::hd041383b5cc7a57f�Agimli::read::line::LineRow::apply_line_advance::hc2efc372e40e77d0�-core::panicking::panic_fmt::h7e9f94035af782b3�memcpy�:gimli::read::unit::allow_section_offset::h6d4761871f94c0aa�__wbindgen_malloc�0<&T as core::fmt::Debug>::fmt::h455087387a251c00�0<&T as core::fmt::Debug>::fmt::h38139c141d9b0272�0<&T as core::fmt::Debug>::fmt::h3a46eb8c92cfd633�M<std::thread::local::AccessError as core::fmt::Debug>::fmt::hb64e977eb396fdab�4core::fmt::Formatter::debug_tuple::h2f1956e838e4c38d�:<&mut W as core::fmt::Write>::write_str::h79d132e639ecef13�:<&mut W as core::fmt::Write>::write_str::h67fa8c6425e48b74�5core::fmt::Formatter::debug_struct::h660ee819bb4bfbc1�memset�.std::panicking::begin_panic::h2328e2b8f997bf87�?wasm_bindgen::convert::closures::invoke4_mut::hb25236779dc5058f�__wbindgen_realloc�0core::ptr::real_drop_in_place::hda488e3219adbc30�
rust_panic�2<&T as core::fmt::Display>::fmt::hf9500086a70daea7�?wasm_bindgen::convert::closures::invoke3_mut::h1fb11696f2c7d1ee�?wasm_bindgen::convert::closures::invoke3_mut::h256c071b724483a7�?wasm_bindgen::convert::closures::invoke3_mut::h4f835d84730bbd45�?wasm_bindgen::convert::closures::invoke3_mut::h4fc478c5789c52f7�?wasm_bindgen::convert::closures::invoke3_mut::h600fe11085f4f314�?wasm_bindgen::convert::closures::invoke3_mut::h68b71d27eb7bb8c9�?wasm_bindgen::convert::closures::invoke3_mut::hccd6f22ece032839�Ostd::collections::hash::map::RandomState::new::KEYS::__getit::h15aae49ea8bc6566�?wasm_bindgen::convert::closures::invoke2_mut::h7b6b8ef08c172ad6�^<std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get::hc1249d76d80ea78a�<gimli::read::abbrev::Abbreviations::empty::h71859f35899e7b34�?wasm_bindgen::convert::closures::invoke1_mut::hf8e0c486807144c7�__rdl_alloc�>core::panic::Location::internal_constructor::hd21474e074c7e563�0core::ptr::real_drop_in_place::h083228b3d901f291�rust_oom�><core::fmt::Error as core::fmt::Debug>::fmt::h017b4820581c30e7�__rust_realloc�2core::option::Option<T>::unwrap::h50755bde21cc7f78�2core::option::Option<T>::unwrap::h81ce31ed3a1a3d97�0<&T as core::fmt::Debug>::fmt::h540f6178a3252695�:<&mut W as core::fmt::Write>::write_str::hd7ba8f16b1bddb99�2<&T as core::fmt::Display>::fmt::hbace60505cb287e9�__rust_alloc�2<&T as core::fmt::Display>::fmt::h0fdfdf4c5d13c3d7�8core::fmt::Formatter::debug_lower_hex::h8b198eaac103306d�8core::fmt::Formatter::debug_upper_hex::hbbb4ff5072922eda�__rust_dealloc�&js_sys::Array::push::hb07e22e53924d992�;<&mut W as core::fmt::Write>::write_char::h052129d4bddd5363�Ncore::fmt::num::imp::<impl core::fmt::Display for u32>::fmt::hdb61e904953178a5�Mcore::fmt::num::imp::<impl core::fmt::Display for u8>::fmt::h0989238cdb3ff0d8�:<&mut W as core::fmt::Write>::write_str::he9d827b3e6ba972d�4core::fmt::ArgumentV1::show_usize::h9d578b98798712e6�Ncore::fmt::num::imp::<impl core::fmt::Display for u64>::fmt::he67f9553d685845c�2<&T as core::fmt::Display>::fmt::h8bc157c726ffc60e�2<&T as core::fmt::Display>::fmt::ha170b229fa1c7daf�1wasm_bindgen::__rt::throw_null::h4a04b904fb598936�2wasm_bindgen::__rt::borrow_fail::h40627d6ca183b084�*wasm_bindgen::throw_str::hd735c9e8eadfed8f�3alloc::alloc::handle_alloc_error::h6d7830aaa265d6a6�.core::panic::Location::file::hab11959838c22d68�;<&mut W as core::fmt::Write>::write_char::hf9cc1f67ddee6120�3<str as core::fmt::Display>::fmt::h834a483aa76be9d3�0<&T as core::fmt::Debug>::fmt::hd1075060bd965693�H<js_sys::JsString as core::convert::From<&str>>::from::h34b3b42871f18461�%js_sys::Error::new::h694b6dd0eeef5463�*wasm_bindgen::throw_val::h1341d12199f145fe�
__rdl_dealloc�rust_begin_unwind�4alloc::raw_vec::capacity_overflow::h25594a7affbe56e3�3core::panic::PanicInfo::location::h9a2c26108062870c�Halloc::raw_vec::RawVec<T,A>::allocate_in::{{closure}}::h0a79ba1fbd862de2�5wasm_bindgen::__rt::malloc_failure::h5218b510645689b7�Halloc::raw_vec::RawVec<T,A>::allocate_in::{{closure}}::h87a5be7415d301ae�2core::panic::PanicInfo::message::ha1835e3d922715cd�.core::panic::Location::line::hfaa3b309c5816a08�0core::panic::Location::column::h7cdb7eb4fe5b9900�1<T as core::any::Any>::type_id::h099222f8f96e76e3�1<T as core::any::Any>::type_id::h9c5be8649f4be2b6�%js_sys::Array::new::h83f05e8276149dfc�1<T as core::any::Any>::type_id::h4f7ecb5eb9d68fa3�1<T as core::any::Any>::type_id::hee776b18a2dfe318�&std::process::abort::h3edf1fdca439f4e0�__rust_start_panic�Adlmalloc::dlmalloc::Dlmalloc::malloc_alignment::hfefe9e82fec6fcfc�1<T as core::any::Any>::type_id::h12e5f4bf396133f0�0core::ptr::real_drop_in_place::h03cf9287339dce18�0core::ptr::real_drop_in_place::hda5c7ddfa8549703�0core::ptr::real_drop_in_place::h4054589c9eebb571�0core::ptr::real_drop_in_place::h7c308f0678a1ee51�0core::ptr::real_drop_in_place::h2c8ef1d905fa5d97�0core::ptr::real_drop_in_place::h5c70fcfb67de58b0�0core::ptr::real_drop_in_place::h49797c669b48e5e7�0core::ptr::real_drop_in_place::h0d0b61b15539a668�0core::ptr::real_drop_in_place::h0013443f3db7bf55�V<std::sys_common::thread_local::Key as core::ops::drop::Drop>::drop::h20a0c873f20d21a0�7std::alloc::default_alloc_error_hook::hf2524c1e0a907f27�0core::ptr::real_drop_in_place::h50030056623bce3a�0core::ptr::real_drop_in_place::hb58f73545654bc22�0core::ptr::real_drop_in_place::h45caf5de69db1af1�0core::ptr::real_drop_in_place::ha96412348601f3a2�I<core::ffi::VaListImpl as core::ops::drop::Drop>::drop::h583c769bb6dca444����	producerslanguageRustprocessed-byrustc1.38.0 (625451e37 2019-09-23)walrus0.12.0wasm-bindgen0.2.51 (6d1dc813c)<svg xmlns="http://www.w3.org/2000/svg" width="770" height="1580"><path d="M4.5 366v100" fill="none" stroke="#f80" stroke-width="9"/><path d="M4.5 768V568" fill="none" stroke="#888" stroke-width="9"/><rect width="767" height="1580" ry="80" rx="80" fill="#222" fill-rule="evenodd" transform="matrix(-1 0 0 1 770.5 0)"/><g fill="#fff" fill-rule="evenodd" transform="matrix(-1 0 0 1 770.5 0)"><rect x="273.5" y="1526" width="220" height="15" ry="5" rx="5" fill-opacity=".133"/><path d="M70.363 6.95C28.333 5.754 4.808 47.982 4.838 83.222l1.194 1424.49c.026 30.952 32.038 68.279 64.634 68.216l622.086-1.194c30.873-.06 68.216-37.263 68.216-64.634V76.057c0-31.282-24.689-66.72-63.137-70.302C456.898 4.61 269.722 6.95 70.363 6.95z" fill-opacity=".867"/></g></svg>�PNG


IHDR���H�!PLTE��ཽ�!!!444ddd������eee333...///��Xe\IDATx^�ԡ
�0���]�A�@��jqhl7�]�9k���=G�?���9������<-�$.��$���I���zb�	$q��Ib�_a=�˾5��3!��܄IEND�B`�<svg xmlns="http://www.w3.org/2000/svg" height="1580" width="770"><path d="M766 366v100" stroke="#f80" stroke-width="9" fill="none"/><path d="M766 768V568" stroke="#888" stroke-width="9" fill="none"/><g fill-rule="evenodd"><rect rx="80" ry="80" height="1580" width="767" fill="#222"/><rect fill-opacity=".133" rx="5" ry="5" height="18" width="80" y="80" x="343.5" fill="#fff"/><circle cx="459" fill-opacity=".267" cy="76.25" r="15" fill="#00f"/><circle cx="297.25" fill-opacity=".267" cy="74" r="17.5" fill="#00f"/></g><g fill-rule="evenodd" fill="#fff"><rect fill-opacity=".133" rx="10" ry="10" height="25" width="50" y="34" x="358.5"/><rect fill-opacity=".133" rx="5" ry="5" height="15" width="220" y="1526" x="273.5"/><path d="M83.5 38c-27.7 0-50 22.3-50 50v1360c0 16.62 13.38 30 30 30h640c16.62 0 30-13.38 30-30V88c0-27.7-22.3-50-50-50h-140c-19.39 0-35 15.61-35 35v4c0 24.93-20.07 45-45 45h-160c-24.93 0-45-20.07-45-45v-4c0-19.39-15.61-35-35-35h-70z" fill-opacity=".867"/></g></svg>�PNG


IHDR��?tBPLTE��ཽ�d�V-IDATx^��1�@ؿ���1<%$
DT�
C�j-IEND�B`��PNG


IHDR�s�2PLTE��ཽ������������آ����٥��7d/�eIDATx^�ԡ
�@��3�~��tn�m@�(`r��\��W�ɶy/��s̾	��
,���}�
B�́��,�+?�#��?��
�rw�	� ��v27�IEND�B`��PNG


IHDR�.��PLTE��ཽ�d�V-"IDATx^�С��?-P�@pH^F�(kZ���1���IEND�B`�<svg viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="49.994%" y1=".226%" x2="49.994%" y2="99.725%" id="c"><stop stop-color="#212121" stop-opacity=".04" offset="0%"/><stop stop-color="#212121" stop-opacity="0" offset="66%"/></linearGradient><linearGradient x1="36.626%" y1="20.358%" x2="64.01%" y2="100.652%" id="g"><stop stop-color="#FFF" stop-opacity=".1" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="68.935%" y1="65.756%" x2="31.065%" y2="35.799%" id="h"><stop stop-color="#262626" stop-opacity=".1" offset="0%"/><stop stop-color="#262626" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="62.531%" y1="13.086%" x2="24.779%" y2="100.996%" id="i"><stop stop-color="#262626" stop-opacity=".1" offset="0%"/><stop stop-color="#262626" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="0%" y1="50%" y2="50%" id="j"><stop stop-color="#262626" stop-opacity=".1" offset="0%"/><stop stop-color="#262626" stop-opacity="0" offset="100%"/></linearGradient><linearGradient x1="49.994%" y1=".226%" x2="49.994%" y2="99.725%" id="n"><stop stop-color="#212121" stop-opacity=".04" offset="0%"/><stop stop-color="#212121" stop-opacity="0" offset="66%"/></linearGradient><path d="M24.556 7.222h-3.51C19.558 3.012 15.549 0 10.833 0 4.853 0 0 4.853 0 10.833s4.853 10.834 10.833 10.834h13.723a7.225 7.225 0 007.222-7.223 7.225 7.225 0 00-7.222-7.222z" id="a"/><path d="M13.722 0H0v14.444h13.722a7.225 7.225 0 007.222-7.222A7.225 7.225 0 0013.722 0z" id="d"/><path d="M28.333 8.333h-4.05C22.567 3.475 17.942 0 12.5 0 5.6 0 0 5.6 0 12.5S5.6 25 12.5 25h15.833c4.6 0 8.334-3.733 8.334-8.333s-3.734-8.334-8.334-8.334z" id="l"/><path d="M15.833 0H0v16.667h15.833c4.6 0 8.334-3.734 8.334-8.334S20.433 0 15.833 0z" id="o"/><radialGradient cx="10.128%" cy="14.269%" fx="10.128%" fy="14.269%" r="144.566%" gradientTransform="matrix(.68182 0 0 1 .032 0)" id="f"><stop stop-color="#FFF" stop-opacity=".1" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></radialGradient><radialGradient cx="14.489%" cy="14.584%" fx="14.489%" fy="14.584%" r="99.973%" id="k"><stop stop-color="#FFF" stop-opacity=".1" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></radialGradient><radialGradient cx="10.128%" cy="14.269%" fx="10.128%" fy="14.269%" r="144.566%" gradientTransform="matrix(.68182 0 0 1 .032 0)" id="q"><stop stop-color="#FFF" stop-opacity=".1" offset="0%"/><stop stop-color="#FFF" stop-opacity="0" offset="100%"/></radialGradient></defs><g fill="none" fill-rule="evenodd"><path d="M0 0h128v128H0z"/><g transform="translate(5.333 5.333)"><circle fill="#0535C1" fill-rule="nonzero" cx="58.667" cy="58.667" r="58.667"/><path d="M71.333 26.667H106v34.667H71.333z"/><g transform="translate(72.778 33.889)"><mask id="b" fill="#fff"><use href="#a"/></mask><g mask="url(#b)"><path d="M24.556 7.222h-3.51C19.558 3.012 15.549 0 10.833 0 4.853 0 0 4.853 0 10.833s4.853 10.834 10.833 10.834h13.723a7.225 7.225 0 007.222-7.223 7.225 7.225 0 00-7.222-7.222z" fill="#EAEAEA" fill-rule="nonzero"/><path d="M31.778 14.531v-.087a7.225 7.225 0 00-7.222-7.222h-3.612v.18h3.612a7.224 7.224 0 017.222 7.13z" fill-opacity=".2" fill="#FFF" fill-rule="nonzero"/><path fill="url(#c)" fill-rule="nonzero" d="M35.497 21.667H10.833l10.22-14.445z"/><g transform="translate(10.833 7.222)"><mask id="e" fill="#fff"><use href="#d"/></mask><g mask="url(#e)"><g transform="translate(-2.167 -9.389)"><image opacity=".1" width="15.167" height="23.111" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAgCAYAAAD9oDOIAAAABGdBTUEAALGN5fIAKQAAA7ZJREFUSA2dlttvEkEYxdnlWqhQoEWrlRq1xqQv+qLP9f82fdamvmhjVBJbSnrjUtoCheWy/s6ERagsBSc5+WZnvzl75sxtrcDfYg2rXvTeuMOKF7123+gR2Nvb26FOpxNrt9uheDxuq0ez2XSXlpa6VDuFQqFHHIB7yUVqQRhuNBpZy7LyrutmiBHaA7Zt93i+5vksEonUer1eA3J9ROS+JcgbK5VKJej8EpIdCD4Q3xHf0rbN+01icjAYhLvdbn9jY8Mpl8t9X0ZeiNReX1+PO46zBdEOz+/BK7AJngq0PyZmg8GgjVpnbW2tl06n+7VaTVb8Y4dRmsvlYpDmUfgGVVvEVZITQzwQIVBbkvcRIPJeLBZz8F2qJ4hFGmD4YUIaPENVnpgEIaAJU04MLAP5nQNpMED5FapbKJ7w2ChNJpPkWB6xhi1VmiwzkUSR6yNSn0HpCqNxQQXiy2q12qF9pNYordfrLh7ZTEaaxOckyMM4MEuLqKIPBPl4lCgMIL8ElVAo1Gi1WlpyhtiQ8mBlMhl1kH+anCdAdTMSolc85VIdIt8FN1KLDU3PBo9UvgZIULK8vWuBR6ooYptc2SPFXUgvwuFwrVKpGBtGpHNaAIcpxgpqEqENUsa602w2eyO1455pKG08LZN0QnIdaPeMJoD6eFFfrYg8/V7T5xF1KZ+YCJevSf45+DWME7NK23iR2jBkWn4P6ZtkwrSCrAmlh4eHUlYn4YSvl6m3gZ9SXmkarDCIKtJPH5pQqudFLQig1Cimb5QJM0pHEyVGlQVWgclHodan/C/2+/3SysrKzfjwleT+hwVaWtq6LxTxNXKX1BCTMO8qINXSaLX7UlgR51APTiVdYBXA4+qUakJeB63b29v+VNIFLND+b0J6DH5AekbsTCOlfa5VoKXWhagKcUHQlaO7zJfUs0DJdL4ADhgvOkMb4Ihd+BXyIy5NqZ7YpuMdzCrgZL+mUTvsCvLxLSvCFjgF38FPVFaHtrk6EPwKPK6DiiZRChzUyEMN+xaUeN4nfuJm+U2eVJsbYCYpyV04rkg+h+Caeoq6ZrsE9njeBV+Y8YtisTgaiZ+n9OFM4+YkyE/5egqxTnrN9B74iO97iUSixJUt5aN7SgvXt4ydsSkI10mUym/Ud0W4vLx8fHBwIEK1j8pMUrKs1dVVG3UxPNMxp4n5DPYhLE0jFPMsT/XejUajbf5MdFjo2giisMyQK36E6mTOP1VmFPPzxvsIHluQO/f9T81Dqu/dzZt1cAf+AMymEnybyIybAAAAAElFTkSuQmCC"/><path d="M2.167 2.167l5.857 18.496C9.98 18.698 13 15.99 13 13 13 7.02 8.147 2.167 2.167 2.167z" fill="#E1E1E1" fill-rule="nonzero"/></g></g></g><circle fill="#EEE" fill-rule="nonzero" cx="10.833" cy="10.833" r="10.833"/><path d="M10.833.18c5.951 0 10.783 4.803 10.834 10.747v-.086c0-5.98-4.854-10.834-10.834-10.834C4.853.007 0 4.853 0 10.833v.087C.05 4.983 4.882.18 10.833.18z" fill-opacity=".2" fill="#FFF" fill-rule="nonzero"/><path d="M24.556 21.486H10.833C4.883 21.486.051 16.683 0 10.74v.087c0 5.98 4.853 10.833 10.833 10.833h13.723a7.225 7.225 0 007.222-7.222v-.086a7.226 7.226 0 01-7.222 7.135z" fill-opacity=".1" fill="#212121" fill-rule="nonzero"/></g></g><path d="M24.556 7.222h-3.51C19.558 3.012 15.549 0 10.833 0 4.853 0 0 4.853 0 10.833s4.853 10.834 10.833 10.834h13.723a7.225 7.225 0 007.222-7.223 7.225 7.225 0 00-7.222-7.222z" fill="url(#f)" fill-rule="nonzero" transform="translate(72.778 33.889)"/><path fill="#FFF176" fill-rule="nonzero" d="M42.667 24.667h30.667v26.667H42.667z"/><path fill="#FFF" fill-rule="nonzero" d="M39.333 65.333H76V102H39.333z"/><path d="M80 48.667h5.333v10.666H32V48.667h5.333V27.333L58.667 14 80 27.333v21.334zm-10.667 0V33.245L58.667 26.58 48 33.245v15.422h21.333z" fill="#F4481E" fill-rule="nonzero"/><path d="M29.631 109.656l9.036-60.99h40l9.035 60.99c-8.561 4.886-18.472 7.677-29.035 7.677-10.563 0-20.474-2.791-29.036-7.677zM70.61 67.067l-25.094 8.154-3.05 20.585L73.38 85.76l-2.77-18.694z" fill="#F4481E" fill-rule="nonzero"/><path d="M79.949 59.333l7.455 50.323c-8.561 4.886-18.472 7.677-29.035 7.677-10.563 0-20.474-2.791-29.036-7.677l7.456-50.323H32V48.667h5.333V27.333L58.667 14 80 27.333v21.334h5.333v10.666H79.95z" fill="url(#g)" fill-rule="nonzero"/><path fill="url(#h)" fill-rule="nonzero" d="M58.667 48.667H37.333V27.333L58.667 14z"/><path d="M58.667 117.333a58.62 58.62 0 01-29.036-7.677l6.685-50.323h22.35v58z" fill="url(#i)" fill-rule="nonzero"/><path fill="url(#j)" fill-rule="nonzero" transform="matrix(-1 0 0 1 90.667 0)" d="M32 48.667h26.667v10.667H32z"/><circle fill="url(#k)" fill-rule="nonzero" cx="58.667" cy="58.667" r="58.667"/><path d="M12.667 38h40v40h-40z"/><g transform="translate(14.333 46.333)"><mask id="m" fill="#fff"><use href="#l"/></mask><g mask="url(#m)"><path d="M28.333 8.333h-4.05C22.567 3.475 17.942 0 12.5 0 5.6 0 0 5.6 0 12.5S5.6 25 12.5 25h15.833c4.6 0 8.334-3.733 8.334-8.333s-3.734-8.334-8.334-8.334z" fill="#FAFAFA" fill-rule="nonzero"/><path d="M36.667 16.767v-.1c0-4.6-3.734-8.334-8.334-8.334h-4.166v.209h4.166a8.335 8.335 0 018.334 8.225z" fill-opacity=".2" fill="#FFF" fill-rule="nonzero"/><path fill="url(#n)" fill-rule="nonzero" d="M40.958 25H12.5L24.292 8.333z"/><g transform="translate(12.5 8.333)"><mask id="p" fill="#fff"><use href="#o"/></mask><g mask="url(#p)"><g transform="translate(-2.5 -10.833)"><image opacity=".1" width="17.5" height="26.667" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAgCAYAAAD9oDOIAAAABGdBTUEAALGN5fIAKQAAA7ZJREFUSA2dlttvEkEYxdnlWqhQoEWrlRq1xqQv+qLP9f82fdamvmhjVBJbSnrjUtoCheWy/s6ERagsBSc5+WZnvzl75sxtrcDfYg2rXvTeuMOKF7123+gR2Nvb26FOpxNrt9uheDxuq0ez2XSXlpa6VDuFQqFHHIB7yUVqQRhuNBpZy7LyrutmiBHaA7Zt93i+5vksEonUer1eA3J9ROS+JcgbK5VKJej8EpIdCD4Q3xHf0rbN+01icjAYhLvdbn9jY8Mpl8t9X0ZeiNReX1+PO46zBdEOz+/BK7AJngq0PyZmg8GgjVpnbW2tl06n+7VaTVb8Y4dRmsvlYpDmUfgGVVvEVZITQzwQIVBbkvcRIPJeLBZz8F2qJ4hFGmD4YUIaPENVnpgEIaAJU04MLAP5nQNpMED5FapbKJ7w2ChNJpPkWB6xhi1VmiwzkUSR6yNSn0HpCqNxQQXiy2q12qF9pNYordfrLh7ZTEaaxOckyMM4MEuLqKIPBPl4lCgMIL8ElVAo1Gi1WlpyhtiQ8mBlMhl1kH+anCdAdTMSolc85VIdIt8FN1KLDU3PBo9UvgZIULK8vWuBR6ooYptc2SPFXUgvwuFwrVKpGBtGpHNaAIcpxgpqEqENUsa602w2eyO1455pKG08LZN0QnIdaPeMJoD6eFFfrYg8/V7T5xF1KZ+YCJevSf45+DWME7NK23iR2jBkWn4P6ZtkwrSCrAmlh4eHUlYn4YSvl6m3gZ9SXmkarDCIKtJPH5pQqudFLQig1Cimb5QJM0pHEyVGlQVWgclHodan/C/2+/3SysrKzfjwleT+hwVaWtq6LxTxNXKX1BCTMO8qINXSaLX7UlgR51APTiVdYBXA4+qUakJeB63b29v+VNIFLND+b0J6DH5AekbsTCOlfa5VoKXWhagKcUHQlaO7zJfUs0DJdL4ADhgvOkMb4Ihd+BXyIy5NqZ7YpuMdzCrgZL+mUTvsCvLxLSvCFjgF38FPVFaHtrk6EPwKPK6DiiZRChzUyEMN+xaUeN4nfuJm+U2eVJsbYCYpyV04rkg+h+Caeoq6ZrsE9njeBV+Y8YtisTgaiZ+n9OFM4+YkyE/5egqxTnrN9B74iO97iUSixJUt5aN7SgvXt4ydsSkI10mUym/Ud0W4vLx8fHBwIEK1j8pMUrKs1dVVG3UxPNMxp4n5DPYhLE0jFPMsT/XejUajbf5MdFjo2giisMyQK36E6mTOP1VmFPPzxvsIHluQO/f9T81Dqu/dzZt1cAf+AMymEnybyIybAAAAAElFTkSuQmCC"/><path d="M2.5 2.5l6.758 21.342C11.517 21.575 15 18.45 15 15 15 8.1 9.4 2.5 2.5 2.5z" fill="#E1E1E1" fill-rule="nonzero"/></g></g></g><circle fill="#FFF" fill-rule="nonzero" cx="12.5" cy="12.5" r="12.5"/><path d="M12.5.208c6.867 0 12.442 5.542 12.5 12.4v-.1c0-6.9-5.6-12.5-12.5-12.5S0 5.6 0 12.5v.1C.058 5.75 5.633.208 12.5.208z" fill-opacity=".2" fill="#FFF" fill-rule="nonzero"/><path d="M28.333 24.792H12.5c-6.867 0-12.442-5.542-12.5-12.4v.1c0 6.9 5.6 12.5 12.5 12.5h15.833c4.6 0 8.334-3.734 8.334-8.334v-.1c-.059 4.559-3.767 8.234-8.334 8.234z" fill-opacity=".1" fill="#212121" fill-rule="nonzero"/></g></g><path d="M28.333 8.333h-4.05C22.567 3.475 17.942 0 12.5 0 5.6 0 0 5.6 0 12.5S5.6 25 12.5 25h15.833c4.6 0 8.334-3.733 8.334-8.333s-3.734-8.334-8.334-8.334z" fill="url(#q)" fill-rule="nonzero" transform="translate(14.333 46.333)"/><g fill-rule="nonzero" opacity=".1"><path d="M58.667.613c32.3 0 58.493 26.1 58.66 58.36 0-.1.006-.2.006-.306C117.333 26.267 91.067 0 58.667 0S0 26.267 0 58.667c0 .1.007.2.007.306.166-32.26 26.36-58.36 58.66-58.36z" fill="#FFF"/><path d="M117.327 58.36c-.167 32.26-26.36 58.36-58.66 58.36S.173 90.62.007 58.36c0 .107-.007.207-.007.307 0 32.4 26.267 58.666 58.667 58.666 32.4 0 58.666-26.266 58.666-58.666 0-.1-.006-.2-.006-.307z" fill="#263238"/></g><circle fill="url(#k)" fill-rule="nonzero" cx="58.667" cy="58.667" r="58.667"/></g></g></svg><svg height="11" width="26" xmlns="http://www.w3.org/2000/svg"><path d="M22.8.5l2.7 5-2.7 5H.5V.5z" fill="#698cfe" stroke="#4073f4"/></svg><svg height="11" width="26" xmlns="http://www.w3.org/2000/svg"><path d="M22.8.5l2.7 5-2.7 5H.5V.5z" fill="#ef9d0d" stroke="#a36c01"/></svg><svg xmlns="http://www.w3.org/2000/svg" width="11" height="11"><path d="M3.65 7.21L2.21 5.18 1 6.39 3.55 10 10 2.33 8.88 1z"/></svg>�PNG


IHDR�˰IDATWc8��c�!�SSېU�̓X�{��IEND�B`�<svg xmlns="http://www.w3.org/2000/svg" width="30" height="10"><path d="M0 2.75l.965-.965 4.108 4.107L.965 10 0 9.035l3.135-3.143zM27.25 2.927l.965.965L24.108 8 20 3.892l.965-.965 3.143 3.136z"/></svg>�PNG


IHDR�HJIDAT�c��@DfF1���(���#��D��+,X�P�`��"))b��6�B�"<�@
�6A�Ua�������=�IEND�B`��PNG


IHDR&�ŕDIDATx^�̱
 ��~���J�:����π��<�uP癝5��d�dv�
3;�0��J3a�g�j�e~�[x�^�J DIEND�B`��PNG


IHDR<I/�
�sRGB���	pHYs��tIME�
%6j�� IDATx��i���U�<{���CUݚK�Ri�,K�l��&���`�XBw�t��^�4�V:�IH�L:
Ħ��!��`+@����A�5�R�4T�T*�t�=߻��?ޫ��sK ���-�ֹ�|ӳ�i�g/���3���?q�D�u�P�	��H!)%" �$�H��H$`�
$dP#���!3͈d���	"$3e �K$�܏��yl[���>��c�k�{��޾m���$�Ó�7��_�o&�m'�����%��W]�U�&.��2sB���̆z����l��[�ߒ?������E�����s�ε[�{���kf�l(����D0���f�����'����g5oۿ���{�ğfր�gf������L������/gΜ޽g���lD� %�Z��#�R���zH���7O/��-��a�,8|��z�s{PD�Y�����R�\����/(�d&x(�~�B�~��P,�ߒ���_Y�e���K�1<l��g�T÷���������87�V����ϡ���a>�ݹ�7��o8��?h(�h�θ��~v���~ڬ�5�N�����%�-�)�/����~h�g�Z�
pA�m�ީ�����Ą1�M4g����n7ާo��3_�u��\��v����؋��}���[q�u'g�s�KnV���%�/]�%2�ev�A<��]^�?�h��D.hX_p~��	�o���ڐ���jDC���p��-��	}?���P�ʪ?yx��CM�}ؒ����D��*�C;{�h�73
�ʟ�?��m��	�	�~8�^���;���~���濡�'�p����Ӑ�v�	�'�U�B�C�rK�[��_jv��SEO*L�
Cx��r�S?U�o��/lx��=�>�S�!����fӥ��g{��|�P�p&x¡���qAm��r��M�x{�n�K�_��K$�����U��wH3�S���#y�������QJiO�O�m���U��طq�E�$}�ډ9~8�o8<mh�-�	�ɖ���$��Cm���݇V~�Ӑ�j>C�Y������6�0t�STk����4�}�^o�49N0���?�'����	�D��ټ�����}������ٻ�%�-����K�:t�o0᡾ ׿k�{�'|_�g�	sb��W����4�)��{�=�6�5'n�K����fAO�a�;}!C��\�}��%�-�)�/�? هzO^��e?���i]׵'m��z5�D����Mן��7$��\6�C�i�<*'搤�'O>����Νk.����/%�nsЄ��$��Q4�Nȉ_'���͎��_�i¡?D�r���a�w�r1��~��`|�k.�R���Ҟ={v��5�}��	Eo��m�[k��h7jZАo�Ѱa&"`�L����ϣ��{AL�QS�0`��~�!a��C����t��n�4�$E�d 
��&@P��	��;�1����H�^Q�A  �?���t30���@)I@%�4@fTK��K�_J�H�M�Q[�x�"p��{������+��xm�Ɉ��õg�$�}�o���;?�G�=|��n���-��=���_�_|���ɇ?��Cv����7^�����j��K�u$O<�3w�������Oqh��W_r�W����V��&��R��7�
���3Ϭ�Xy�޸�����b �*��DҘ�)��j�4	
nD��!
��p�5INDP�'T@Y�ҀNi���4"p��:H�����,EO%ӈtτ!)4XM����H�%,��Omzv�Ͻ�Mw|�O=�ԁ���u�f?����1�̇����!������}��	�P}�Չ���sۿ��{o�����;��x�������=w���]K�wO�=��'���~⧞���)g�x��Kwͭ{���v�g�vm۹w���7�|��_��~�S_�5n��\�wǁ�gO����g��X\ٹc�fchDm�����{즛ߚ�*-�
�)�G�2���DzZ*�3���H�A0DC�<�N2c�4X2��1�J��HedՖ�4�	��PD9,!�$c�����BY�&W&���[���U�����qǝ�v��FMX�/�'b�7۷�����%2z�����e�@�x��g~��_���o���Soy3�����������,���ҏ�	������G��m���w������`w�����~����W���,C��N|����ο�W�y�_ص���~�W�Ŀ���u{n߶s׎�á8�+������{�k�1�z���
+
��.Ӽ��,��!!�P����bK7o�d�����BϨ䙉�$Ȫ ��`�D�2ݬ&���5�2f�V�#"��j@h�4U�,^�ɵ�?��FW_}��'����1�p�}N�=w0tb�R&b�.�{����"�{��'{���?���^wվC���>��_r�W_�o>��G~�wn|�{zC��ѻ~'��_��kW����^?�a,���������/����
���G�Q{�>t��>w��>�ܝ7��:t��O<`�L��k�MO��;?���-�|Aj��L����g�}��n�1�0�c�: ����s���1��ez
%��bL)������z
I:���!�QRZB0�3"� �])���"aT�&tQ�S*���"�0&�,R� HK� Ӊ�Q.�4̡p���0PBa.nA� �.��<���J)�w����<y��~���=��m�M�������/,,��0躟Jd��pJ��}��;����]��d3�rm��>�'���f�����=�Z=�l:y���.�_�������65 ��8����u�?����3�{�����?}��+w�/��쾅�����[?�zfnin�U;~�ޯ织�%���d�~b:��������z�F�@V< ��,(�?0�ԭ�wyvʌ���7L�����Z���`4�4"����( �Jz����Z}���	�qV@֦�
�j���̒Eeͤ�F7
�z�� aU�sT�	�ׂ���[�*�Вl�IW6s�)��+%+�p�u�#E)�ɔ�Ă�VG�b�`0�$fg���N�!�@������������\[c2���/:4=7��d8��ђ`�,B)�*C&h��0x�z���'�;s�̞={��?���yIe�F4�>��O^17��z~��s����X_+��km���ѱ�O��D@r|��o��a�9Z���*uvz��/��3OL��v��c����Y��v>�u#]tc��L�;��g��I���;�>v��
7�PQ��`Uٚ��������+ۗ�ggmjJ���j����}�gf�7���{��_�:#�[K �V7�F�W	��B�&��JZ� ep�
#gfps���t	�d&�}鄐2���92JR��2G'Kɥ�N �)32ϐ��g�h%��M5����;���.�<��8{��a������$BQ��,�ժ��ld�0;=5�G�<y�������6�Q���ڻqG�QSVG��̔/M��.,��9��az$���,�ά��
�¯���������mi��hӳ,3T��L������g䆁i�>5���s3�3>=�Ӓ�9�����8~qvu�����}՞��'O�ܹse<�f��� ,g~�_؇xji��0^��
9����k����v|��C�9haP���C2�jAY���d�����KȐ�A���D�, ���3�$�LB K���$���afa�̔���t��0�Jz�d&�<#U`Ja٦=�Q�^Sh��ꏆ�ܱ�r����QJrvv���R᲌�إ
�{e���S*��A�*�T �D ���qݷo���ݻ���3MCEzá#l04��i}�w����^vzj�۸k/:��.�e���ܹ��N��/\zi���^A]�y�Ŝ��E�[��\�å=���m~�4fV.i��	b-3w�8�g9�ӋS�;f��ٽ{vώ��S�3>��g���ڏ�m����6��ĉ׽�uD�"jJ!�BIݝ��̝?6z��a�ȑ��'g��m����k�An�u���~��ݲ��^͊^�HR�QȂ��j�*jg��-��a�]03Ra!��!D�L"3᪪)""���Y3/U)e$ъv�*Y&�$��c��pKx0�MM*iIE2�{M��z���/:Ԡ%��㏥x!hx�5�>���877w���0�)P�%���TV��u[�!2*ީSuR���uՌ\^Zz������a�_Q�x<n��D�B�l���u�?�;�]���l��}���4<B>�Z��=u~��뇬�0$cy�'N��z�����%Mo@��^��j]�{}[f�a��nf�V�|�䧧��q~y�<7��t^�x5ί=�~��{=3��1
��4�9"�?�7�8Ϊ
9hd-����?�w���?�3Or��;���ܷ|��Zz��}_�85���N��>
��Z�/
%k���ݬR���;;��"��6C#3aP�M0O��b
��V��m���"LNV�Q�HC�
+,#	7�� �1=�e���!L%=���h���Q�	O���Z`��#~�����_s�[-���>�����<th34+:|��}�޷��Җ���iI��֦eQP��d�yf*�"�CU����Œ�Q뙖�G�<5����?���mۆ�۽���ο�_vY��'����xn��sǞ=�>�q�R۹��˚����;�~����(eH�[�3�۟?��gw��aS��iA���_;����:x�|4;��/�����O;s慽�vΏ��}�`�s��>xד���_y�ۦ��0�|�V��|�12smmm<_}��9�XD­d�H�\��d�Gǫ_{�3{~�?��3W���}�����o�ƅ�O�����b���J���JhT�37(+�&�[��"�	����g��A2��%���)�
�%RanH����4�%6�m�H�$�N�y�D1됥*�f�9Y!�L��0Q�,H�k-w��=5���g>���#O|��;���]w͵��-ds�SG��F���;����2�2*%(0ݡ�d�3-K�H�(������ǧ��F�Q߁�Œ���{祇sے5�95=�0���'�:q|mz&���t�'�=v�C������_7�{O�5-��ӳ���;v��g]�k�z�ܩ#O>q�}Gά��7�-m8�6'1�N��X�u����uf�̙�G?z��Oו���+K{z�rϥ�a��X�v=z��_?;�Ѕ<�4+�2��\����r����g.y��o��']p�8>���������;V�v�Mͽ����
�%`�KU�nd"a!n���fV6֐�@Ҫ���I��r���C1�p���F4��uiI�h�0��465Fҙ	�N&��H�)Ü�4K���As���;v��Moy�W}�W�G}9h�-.,<��cKKKmtLMM=ztǮ=��bV�Y
HJÒ=Ou��j�B4e��(+F����/���A˽83���n[���>(*"�2�x�����'��Ï�{�v��y��ۯ~�fgWWW�l�6C���c�w^���/<�ǟ��޻�`~�ж��p�d��ǽ�>�hoJ�����ѧ�z�ه��@ۗ�\��͇�_7�s]�M�55}�Y���P�N�ڳoO��LJ��NTAWQ�*F�ӿ��]7�uO�xn����S�ƵG�L�5�U;*�EM�U�@M�Ɏa�9-��@G#��L8Y=��y�i	�f��'��4�hdPB8dfe&�]��f�4�+*��;���HS�*�@���F^%^Ch]B�s󂺬�f|9hQs���'?ur߾}��enn��S'�Eɑ�H�)��sc��(T5�qT'TE��BEj�VKZ�xyy��]YY�H�؈�ʗ���SSS} e�C^{}}}4=��-o=��w6�ֺ��~��ٵ�g��H�Z]]-e���_���8��j�u]�����-�#�QS���7^��?7����n׾�����
WԆ�'�'|\�����_s����3
f���fP�Ls�t.N��=�w}�N��3˿z��f��ګ���'�c(#d�F��P�*Zvc�L�fu�,E5�L���/-�LF��Q
��tX*�t˨��
;�"Q>V��Պgi���D2R��j
�["�k��#A�)X0I�H�@& �RDe�ZA���}�/�|�M	��o�����[�|�8��`	L_u�U'O�\YYi�k۶m�>�̎�׭�?g(25�h�Pk�d�<P!�,���0�Z
`�.�#�m�Μ9�}��a��Fa���Ir}}��i��N?���k#�7�sh�H6�{"i<�>}������Me���Z����^����V�lԍ7�8VUN��Ly*=�rN]�r��dfn����?���C_�4�����i��#�ߕ6oMC|Ն,D5*RE$�#̘mo�{hTg��d]�ai�0K�+MnDb��5�5�������UųY�5���%-̀P@�ѣz��l&�*X�4���41�iG�
4���w��Ͽ��7��
o�ed��m��Y�s��F��u��]v���~�-����܋�Y��N(GЉ�D��;&3� ��$��7'�R�t�[���ȣ�/,,��l�B��w\q��W}��DA��؈�6z��6��1t�5M5"�:�d���'7L$��t�se6g?�<%������]���J�fL�(�[ v��_��2g�3�ϟ��~�����#�{�v�P���S����������i��҈4��:�M!eJ���9�q2^7� � ��*�YZ]6���ja�(��2��Jzf-,(�nZ��A:�	{69<�d��$Ք��0�k�v�ZYٱ���_����۷��Ç\�rвjai������.$gΞYZZ3�wDZۛ*��@��T�9R��#�Kinv��ѧ�gZ/��.94A5�����R��BU��v��x�{��)�/0Q�g�{z�0�fo�'z�i�p<Q«����SO�����2�M�n��(*i�f�i��
�>��oҹ0����:��w���Ϗ��`���_f�~KXz�y��c��Ts�)Y��(f���AC�(f���)�LO�Y��lc��d������`��4�.&7��E�H"�F�D�����bJ��"J&E1$q�d�V�F�={vv�-#��ئ�W�Fqa~��YZZj�wzz�ȑ#{��E�Bi����'�&Y�
���� �PaL�!p��S��������>|I?l&�u
�8��f>5�Ծ�=���19��4o�H������Oi߷Ыa�a,T�]?��_�57E��P2)O6Ύpdn���{o�3s���+:
�X���N��g����+��
�xWZ�)A�*x@�`@��'�
�d�PP�6� !)���0#,-��è*�d��ZӁ4�T�jʕc�� 
@1%$��d��a�f1�m�Fz�5�&q-��#�e���O���d��y�ԩ�+�HQ�V<�.�Q0ܲ�M<��.�J:-���W��\X^z�Gv��=���o����/.�U &��О"�X?NZ�n�v���l&���'��a\�p��/�<��-'�Y��?���^t ��Ғ	3�4Y����.uo�Ư���?�W�}��S�=���e����Wm�*�j�i3T,e��q�����W�fb�R�%��[D��I��4%�ͱ��V�)���L���`	���dh�՜�H���
Q���Q*ӕ�16�3M��25��'O����k{aa��?v������;h�����p�$�fjAZ���)w���[?~�؞={&�Q��mT�z�DhѰ�MO�7>����ͅ��R�}u�f��}_�i��VOG
�4^�OqVy�i�f�e���{�W}��v�g�#)�OQ
¬����\u����T._�IDAT����tV'b45=��SA��Z�ꭴ�$�A�[�O+��/ZDKx�tp#�γ�$��4��23��β�/�������V-<k�V1Z��LK�`j]���i�#���E�_qŕ���l߾�u����K.��ĉ=t�ٳg�Y���a�|��fff.������y����IͲ��R6�Um`�A2�*�i����c�{=|��E�Ѩ��-��׮7�����Ys����J��3gJ-�,��['�@��4E-���(KRU�p:�ɻ�ũ��l�(�ar���a,��z#WE�(	��TšC�K��y�6�� i؀�졁-�p�Hb�<+PL5Z�Օ2�FP(�FwKcq�P˧c�j�o!�"ӡ4!�g�Xڹ�c45�K�WVV����a����G����������_��8L)�Cl�K�7�9��*�-���^/�W�>ڡ�������n	F=������-�B�G�y�[��]��
lInʠ���&�X)$`)�*c�B�����N$�x\
C0:	B.+@�e�H�3-rs(��VU!�%$�a��iR������º�zq���@ʹ��-7���TE ������"b$v�n�f�R&D"F*�&�J�{t2&��B��ozӛn��k���_BZ�T�'�
ټQذ����lf��:���P�oKW����~��>Np�<ԍ��ҟ�S���޲mW
k�6ORs��V�����{�������q{�s�x��>|h=:of��@�V�<̈́0s��ޕDq�j��_�!w��5�2��Z8Ҳ4�-@�	y4W~V[�w�Ê�NL4x�2�0�$��LW��3�)"��TK*u���-h�>���%�_|�x�����K(�^�z�ܵ��o:t�%���
#U��E���Ay�R�v_EB�	Q�"�0�I�o���lg`d2�E�9ڄp:��r��Ɋp��"�F�"���r�֑I�HX�,2+�"B�4��H��R����Zc�������G����9�j�BP�;��;�D��ǍġV�Vj��`K� (��h�u�XwI/͂Z��@#�JXn���
�4�O��~�h��쪍�_*g�R��V���i�y���ZJ����c����Υ�4H8Ti���+�Ų3��%#�P"�����d��V���`�LcƆӒ����K�k݈�O���(�QC)C&EI�A��\��s�j(�t���b�p���
Z(+��%�_~Y�i^�C�'k����B¬%7�Rԁ#e��
�RAc�`��Q:<K $����H�i� d���aa�L�ƿC$"27�T��*`HA�+�E&�V��i�pY� ��ZYPkyM�T�bL�B,#�3B���(FȘU0cIU��t5h�V�/G(\2� BG:�n.��
�ʌHs��I^�A�4&�/3	�V_�%�T����Hr ��-lA{͡��<����'k��7�W�|3C	
X!&�t /%#�B8GnL2�D6��HXi9��D��e2�U���'j�(�o�@�nD"<-�L�"����Ey!�OH%6�1��2P��"V��-h��A+�<�F˚pcʼ������;G	�{IT��![]
� bT� �HҢ���uJc��%�BT��Z]�*U���%F�X�dm{C���,�B�ܕD�V�Tu�����2���6�)�B�1R	�
a4y:
�*#%�d�e�LKK�,@0F�s��H�yҊ����6�+M��dN�	�����%��^,œ`A�=F�yqWU�"s$ӌ#]%�f#@�k*`�eµ�OZ�$�J�G�!�!B*�p����(`�0�B��z�("!���7�ʼn��v�N��ޱ��+��`9��R�b�(fA�:�\�B�5��L9L
X�H�WJ!:�;j�;��l��|9@�B�����<�D׍u�B��2�N��D!&a�	��D�!���@+���hEU�N5A]�l:_Dɠ[��2�[�e��M�!�B
J���2S��JH�˂d���)B+=�]�ZxuYJ�pB`�\�X�he�k
*�*Ǟ��j3�CRҌ�i�������n��l;��m�"PMӠ%��aUja�U���'pS�L3Tz�X9����h*TF��VX������|�W~��ₙa��:�x�q�(��Sa4�R�J�rD1��~��1�<P�@P�s�#X�(����04n�-�p���R&G�X���H)ELO�XҜ%/!"3i�/`lĻU��	-��	�A�Ϝ���k^|Q�:��?n!�i����
2�ު`z���R�jNXN�DCʑ��@��"���B��Y�* Q���A�-	�S锦��LJHR*��#h�,A��XM�D���F`�6�����ZJV|yiqk�n�A����l�%�2"�qޢ��%�a��#JZ�R
1�2+"�DQ�TVFD�j�I�*uJ��h�IB�j���.
lś:�F͠5,�l�li� TkM(�J�I�@�HU�Q�:�eM�ԭc���Q)���Ηr9G�sȑ]{E�P&Y�)�Hf2�	atdz"]�!0" eҼ���VP�`W���i	�ɼK��D#�5"]n�Ȱ���e:�E�R&"%���B)j��5��F0��N��w�
-�
�(�e�,�����ֱu��mZ��r�0a̮m?Fw%8B��cc��#D����P3A�g�LQDQ�!�-�["p��T���r�X �2Y�e03I�RT���Nk��Z�
�t���=��#�������9{fqq񪫮~�;��eW\�L��O�?���EBK��"���f�/�{�
o��A�������g�L/MFNRnPyc���s?�s����~����V�:.<h�.��U#2�e���J���d����o~�}��[nyVK�L�X��DX$P�[a&�DЋ�F�����p���x׳Ǟ9��k_w�B���Jj*ʘ�����U�+[^U&�p/x�̹��|�ӟ^XX���u�ӧO�S�����mo�����o������/����@K��0�mr���?�K���������[�W39;77=3���2�lT���/������[ny�����>�_������ָ�:.HDb…$Y����
HaY�.!����}�3�ۿ�'�r��2g��Ja��!UR�2@�X=)G�p$��G�6��QO�xvO�>}��`�l�q�(�<J�*�R*O�e�,HW�;������w��Ç��۷w��K.�d�޽�����K��ο������uϞ=ChI��)%k���fhp�����ȿ>|��/��G?��[I�x����d�͔�z�Vږ��u��������˭~�ֱuL��IEv��VX"k��;���H]���G��K.9Tk�馷@
T3�z��#	]�#E&S�e�l�$�
U�y�ɴTE��w�%�9wv߾]�<u��{���M��^��(�pE�V<��T�bE4����?{�쾽{w����o~��x���s<�읟���������������qۙ�YPC�t�i��r!����O�S?��]t������܇?�������7�y%����m#6���,�/U��,z��qˇ>���l��[�䠵�JY:�Z4ru(�tYV����瞻/��boy�[�근w}|�Q"�ԑ��Ci�20U���a�V� +J�^t�⧞~�����u�s��5W_]��U`��N�m7�H�n=�Н_���KK�o����jh�47����}�ӟ����3�v��0��Q��Q���1�9��w~����޽��o��l߾=3��\X\~߷�o���ɪ”���K	���x<��>�>�c�x�-��xl[G�0e�%��鉙�n��?�w�}��_��_�_�-����}
. ����D�']"�L�kr��eY�>r�fVBeґq�G"��Ww��u������ꫮP8,+5�D�ɝ\�&7���o�ֶm�|�7~����xL�B����nۿo�m�#@��`��b��2���hdy���؏���;w���0sA液cEҏ�����;���ځ��T�L^�H9��o�2�V�E����}뷾����[omeٷ:����6��T"���kQ��R�F���}��ع��~���#�ș�g�N�Ҿ���[n��ڙ%R�$(
�*�.�Q�`�C=�����V��gf�����Z��]�v�8~⡇�ˮ�.陁@�@��H���ѧ�ZXXȈ�^����V��d����'?�{�n/�F���L���L��$��D���`�E=��?��?�m۶�;w�9��ܭmv���?�����C��b�(�*`T�\E��J�j	�?gggfgg^�<�o�ul�V�� ҋX^�J!����q�E]4;;Ks*v��1???QJ�m��[����������L��Z�X-D����>�{�^3Z�n�
��S##�LM�\Yy���˯Ȯ��e%"��i�[*���(^P�h�NsW������ ��)���j]ˎRaf֢�!c5s*�:�����???�s�N/���������s�Z���?��׿�碋�]E���;+��U���l�L��:�ul��B�3�B��yD����]�z��w�mf��azjjc�xI㓴��x��7$�ԈQ����Y��	��e�/{����K[�iD֨���m�8*i]��m�`@
�C�Y��ŔUsss�Ξ{���ϯ�hAJ�j�����2M���1�ѢS�2I���΋�����}�;*#�kk��w��_��O�v����/����>����_�5j�"��8-Gf�W��5h��/�����b4��eѢw��ny���#����ggf��־�M_�m�}/h-}_e2Q���ٵ�/��݋��2�*���K��

3�"������*�ϳ��[�\z���ؚ�U�j�$H�-:rX �����P���02���:�RDB5�mm{�}��g��<�)��T1���3:'or��|w��k��|���濝�N.m����7�u�}����l�	tEd���ef���?��/?e����o~��G=�1B�����L	�H�#�nA' ��%��|�u�V����w�v��#��̧/]���ONNW!mH��f�6<�v^���L{��03���C���	V�|���_x�lw�m�g?�ُ}�oݼq���n�z���s�7n޸��[���C��2�,�)���PR�����twvzzvvzk����wg���ן}�۷mNN����}׮�j1'�6�	��0����x䑪�|��٧����
�%-����y����}���tI�q�[��
�	�HE:Fo&0�K{~~^�0:??_Is�=i#l���2�]��)pP�Y=�+_x	������(6
P��)�E���<��=�����;��_}�O<���0��[O1C���e7�dڅb
L��h�=$ľk��|�g��y����˷_~���5����IT�{Ȇ�`O�!K"�x���Fć?����s��1k����܇>�[7o>��O}��	.ita[mӐ܀�_*m���yQ�^�_[ZHH3V��km�_�L{�W�[����*�݈0���w����W�����'��ʤ�'�S�H����C���#64"jU}d9�D<����MW��yו7��}����@�iD�����zٹ�h��ׯ���4��O|����K�.���^�x��w���ŋ�����J��"�@t�b���*3�'�ee^�96�|�]#x�ä���<�#�Ӿ��c�全��N���J
��s$���>��Ǯ?v�۾��/��]���Lf6ڪ6�sa�"<���"y(�N�S�pg�L+��|˭�_���w��Y��V���8`G	���,�)��@�6�}������S_~�ۅ�G����~�=�~��}����,f��X���i^~Ԕ[�|雝�C�q1���k�Z��7ϴ��3m�F�A�C֪�Є#��=��߹~}�???=SF�lfnQ�(uE���2��(#\�e��Ys�����[���|��pq�Dw2p-�'v���'��H<���{�7�җ���7�yzvv�+>��ÿ��ko>��n��
�@�tƲ�9H��vgk�EE�������dد!���d¯~O{vv�я�����m�xy�����Q�04����z�9҂�@VxcN��4�ư���Zk����
m�h722�FN�7r&B�
D(@�;2W7S��m,G�����d�����]�1��[����Cڈ�t��5�ǭ[7�blWn�B�a�7�n��kK���.�_�W���'''�<�̂���Y�_�z����LJ��ϴTa���U������t�kuL� Q��m�1܅�8܅HȘ�X]��E$��#m��#��6�9�,���Pp;�H��\D��TƲI72�p6OE�ƀ+r��Cڎ��[+0��A�n>�\!26�;i�L�Jμx��իW_��i�q����z���iͰd�� ��R���ee �d�A�rG&Z���� J�j���=�%F��"\�\7"v�	�{b1���څ��1l'�FJ�f0'@L#��i �W9��1��c���|H% �f��=h�B@$A
� �K���$�kD�`
`z!����#�X�WVn^�-�R�"~����A�u(�4^�l7�#ѣ�i#Y�|�Hcwf�x��|���L�l&�D�����#��Ջ�	�NmAA�GF�<@g��
���!�"������5=��̲F��謩mtwb�	����-0�a�k>h��0�[�^���G�
�N��|�ҕo}�_@�y�G��c��gZR��L��
��Rw �6��
S������-){�gh�*�Ȥ����jF${U��aJ�(q�Z�K	�+��Q=Gr��8e
���f!,;P�@L2����i���{�����o�C�K��꺐�d8eA���BX
�(q��9�9��s�Cnn�SN
v�D�{�(���ta$-%���XdHY#�;�6TWDFS�-R�unMeb��0Tf�����uens�tDVE��=b�j(	ǂ��hpӢbd8rk7;�v��.��t���tE$&
�Q�@�DĀ:VqH�S�]�`�3��5�	�jxr�{ȈZ��׍4������o��޻��‹�^��X�5�a;j��5� �Ȱ�����(CV���b!�IB4��ȅk6���'�t�0+L��Wg����(�)mh75�ـ+1���(*F�%�s�5#�� O�"Y�n�jw1%�j�*
����I��n`C9h'z��M�TXM��@ɚ��`@�����G�&o괁
^hsb6G6���m
���h�D3F����
8<�f�31
4����f��r����h:`@=��S0������`ײ�#���͊��Y6����:J���6�����fVD#�а6��ك�n�)Ttv�H���B�Z��ɱ�8`$�-�&�	�� �-A6� ;����#
�+��l�m�@A�A�W���`XGiGi?c�@;��<K*��ȶ+����\�?bC�:K�VS�i�\�m	|����
��N���0��\px�vf�Qd��`���),8��KPL0�� *�閏Ҏ�~���~�X�;�1�������'IEND�B`��PNG


IHDRIz�{�sRGB���	pHYs��tIME�
-#x+tHIDAT8��S1N�@{����\Gq�'\E�H���C��&��d�hmώǓ]9���-���DHڲ,�H�2s��Bf����xU�"�t�?(H*��Y-�����n�Ԣ�M_<�[k�����{�:�$�TQUw�|���duJK�P�5��̾#��t����<Q�{�t���b���w����؊�X;Dl��l �������w�!"6�EDkͮ�����w@@���}/_�f��ԕ5jXf0�d�F�c�7=���;@3��n���~P���q[|�|��#��4M$T�"�i��dQTTL .�Z�	�4IMOi�d���=�'1p"-`8IEND�B`��PNG


IHDR@I�AsRGB���	pHYs��tIME�
%;Q�Z�IDATh��Z[�gUy���o�90����Mf��b.^b
b��̋����諗�݇jb_�s56�"�����BjG.��ń	$�Ј
&`�9����}�>��b�?gf�>���?kk��w�}ko~�{���E�4��4z�doXXXؼy�[��Z+����C%��ԉ�}���
h���6�F&�{X�v����=z��ѣ\p��;ʉ'2���yI�v�r�̜۶����i���kN��2�~�����/�����Nj$3�Ի�zm}[��Z��e�t����›�s:��-Թ���5=33��r����+e��T}�Ӈ� ;o����#v�ED翏_;������v�{�:��lV�}D����R{���:5�u���u�u����T�:$�lm�6Ui�u1L��5��s.8��t��0��Kj��&�u�C3�hWoDdf��\h�=I[��89��I� �Lv���Ks�	s�`Us�o3v��o�8�㹮.¾�~���~݆IvZ��n�S�ef{f�������i�m���n��8�gfs��p4g�S3�N���=b���Vѽ�C��N=g�h:�Ѭt3�ziO�As�7Bl�^w���)3_}�կ��G���K��ɓ�����?դ|�纨֊�;�Z���8'ڵ]Ә�X"������B�������)<i�4�D��O?m]��¦iu��qb���]��f�]'Qk��k���
[����s�mY�龭������N���\�|饗��K/�t��fZ�m&�`�8��L��\����v27�TE���ޝ;w��8�S[o^�3O�^#�v4^����z(���K\�k(����>��2��l6{���]k��f��f`s9��Qk�t�5����'N��ڮV�4l�L��k�=v�XD�ٳg�={��{�OJu�?��'�|��7����>�w�=#��]f���|�[nY\\\ZZ���>�{��ݻwo޼���q�}�fN}��(�t@u��A눪S;��;�o��E��m۶�u�]/��w޹}��w��O<�����K/�t���v��t�����:OM��v"��);=�5�骵n޼y�֭��K6o�<��.���)��Yδ&�z��y��wC��n�g$N��\W��s�9g׮]��q�������ȴ�5ܽ��iqӡ{�1W�L�㔾A���vM�1�q���֘��澍�)Lr�F_
��L[@���Z��"�j���;���;^}�Վ���ZNO��f��f����P��#��7Hl���رc�^ZZ:r��������7��cǎ��0ų�86~Z���&3y��n��N���7N�֜s]ozӛ�u�����,--��؁S��F8��6�c�=Vf�Y;M���q-}�
{~]w�_��sвW��i�m�]���Ki!���vkfMZ���d�0$NE�����P�dz������&ߦ���k�=5�;�:#�4�t�v����c��L��ӳ�.��n�q�>3��4�M�'v^۵����t�����d���d!~DŽ�$:�;��ȍ{=9���a�!r�1ԴZ��ˀ��e6����d�m#�#v�������{��b@G
��E�\iѵ��=��VS����횦�Y[�i�_YYi����Z��;�)FmD�F�¦��H{����ڶZ�
n�����4;lU���u_)�t�1�nKf��j����R{�[�
�t��qQ���t+�&��K��v��Q��җ�t���zY������̜��g�໰����n�K�ҢX��<��S���$���HA@h�/{�o��-��4Y2)������PJ ���:@"AD@�T�.�Nζ|kb[*A
4j;�ſ�b9�|<�S0� ���"��h��F�U
B)��������
	��2����r3(K��Z2N�óBB�<�$�`A8�J9$�$��*j���(C�j�Ȁ�H�[�,!"M����U����j$@�,3k�@XZ(YI�I!RNB�#)��C��4(Ӕ�*5搞��ʰ�	נ�94�h�t*U%�d����AKK�,@0lJ���5�Ɣy�����GG	�{IT��!AK&C�1D%:��(D�C�Qi,�d+'��w��,��dIQ�p2e0)a.&a�	��D�!٦�r��/�|�[�p�RQ����UV/E3�)2'���DQDBt#d�n�͒GU�WK%����h��G�}�g��s?�X&dRuYJ�pB`�\�X�@:=k
*�*g������4cf��ҥj2�q�7����6��P�g�y��ͳ�F�� ��Pj�#�Y4���Q�@�AH�E�*�:��@��I�̀["T�d��<���b6QT0XA��eR�3e� �
Vs�r�I4�d�4�Fy�R
Ɋg��XD����C��wl����� ����$�a�u$JZ�R
13+"��Q�TVF��j�I�*�J�$��d������;w�ֿ*�t�P�`T�s��+�c	�%HS&Q5�� f��+ӓ���e� 2+U2��VC0K���5���?����'�;���O��#�����c��A7�1��(c!|��.+$�X)���iS�&BDq,&H�d�H�2���;�u�С�.��
ox��_��S?�ꪫN�/�����2d%��.���v���9p@)a�OoJ)���}�PQ��&�DЋ���g�=t�W��+z�Z멬�$H�%t�U����Ly�}��s�9o���{��`��c�y�p�2	G2���#G^|��F۷���͛�}��]�v��o����LJdA
�pÍ7>��#����޽�G�Ĕd�5�X
I��q������p�e��m����y��{�?���MH�s�Ώ}���ޢ&Z�
��e��0����G>��)*M���P����ʸ�3�G!S5(�n���o�����g�f��yz]}��W_}�������?�%��6��̄JR43�(�"-0�e�GO�KwJ�XL5�Nd=D�����ja�2��kp7@O>��;������gѹ%��Y�{-*�c�Г�4�4H��/�}��w0sN|�M7�j;Ӏ����5��g��Ͽ��[��g�y��}�٧?>�݇��u�]�cǎI�gt�^�J!a��&2���f'~���о�p2PK0Y"k1c��pص벝;���{����o����ξ���o�q���>���۷�Np(��ZFUX
b
^f�F�����G;Ub�z���j�fY��	�N���?~��|�3k��/}颋.ڻw�8q��?~�ʫ޺���)�,�`Y��A𬅳�M$�F��d2� 0�g�����a�V��ir�L�_��?�2��رcn<ǎߵk�ZG'i,�����4��D;iS8�Ɠ�R�A��V�z*an��������d6$�d&�Y�����ʫ�>h'%W_��?��×^z麉��f4�V�#���e�H|���;J��t�M���Q[,27OUTB��4�e�O<������_����߿����-���Ͽ����`���9�h�3�a+G��K��=�ܭ�ڲ���:��:��~��2�ːn!
	�
�b�i
�:thaa��/<q������z׻��+�������}�y��o{��G�>%Ii�T�#d(h��T��n��?ٲe˖��ŭ[�,nٲ�uq˖Fٲ���m��>32�k;>˪�#�=pJ�կ^عs�/���o���o��?}��[w�x��nۻw��g�������Ґ@�XR鄒��bʛn���[o]=HԲ�� �O�X^)��ˆe��VSN�o{�[�����s�^��ݻw7W޴i�>��.��������={����a<�I�U,��L�+����(��h�@Q�!�J�J�@V�fa���NF����?��-W,�<�2K� �����DX�da��'

�J
�LVC��*`ZQT�����y�y�W���,)3��@�Q�8c���8�!E�*e%�9ILe
�9�ZQME!QE֠%��j�5SU���?g=��j�&�/sT�k0�U���*Ѐ4����A���*b�1�D�`n�� �7�)��t�u]��ѥ�����n9/�(��}��ՂPL���e�㘃1���[m#�$0Z�$DgIE���iAG���yYEk���u�s$��Ɣ��I5�\�Ȥ���<��[�l۶����ѡȡ($gɌ082D����nH:)C��cE��L�!5F��J0ksg
�!LYGk�,W^~�ڡ��D;�f�ܐ`l(rռW�$"�-��$H �zb�bT
�	���j^b�b�f-鄬B[	p�vh赂ŇP0��$�1Eè
��|U��G�0@"%'�`�`E�LJY�i0V�� ��h�2�S���c��"((��2
HB0����ckd4�)��!A&i��c
E�	�-f�+�5(��D��\�!1�bh��T�)S���hʰ��Z	�*�=�`Bf%�(�$�=Q-<L��f@�PQ{���hu�ef����:��e��&1��U�,Ӕ��𨉴��"�HCV��H�ܢ�ƚ��̲&R5��2&
�����&FWz�Z�2A�,�`�4��շ(����xߑ��_�j}����IEND�B`��PNG


IHDR�HRIDAT�c��@DfF1���(����!����*���`!�O��炅��[
WQĀ�mP�|_ ��()|�Q�WP�΂Cj���
�8VIEND�B`��PNG


IHDR'?ծ�AIDATx^�̱	�00�~�'��
>��zy��d'�!��.��:E�C��0��C��0��Pw���C-�|���IEND�B`��PNG


IHDR�4�q���IDATx��{\�w����7s�r�a��U�17f9�Sr����a��!�&��f"d�"uk+�1:�4�%
k+�:�몫������*5W꺌}��G��{�\����^߾�D"�H$�D"�H$�D"y�dov;�]�+��=]����OZ��u��M�q*7�۱{�_
�?7���N;L
hGɟ��'Uf|�gE-ړ�%�2���t8��c��4�]��/V���v|	��qt�)|3�8N�:uz�a�k���D�g�!���+\f�e��zg��Y��L,ڝ���ұ�#Z��4|�^'�y?`��s������Ѓ����.[}�j�Ք$�g�i�*�駕�3�gcֱl�ဎ���J���({8�"����!2p7~��=6�F��ɷ,?�#��Y���\���*�{�JL;���٘�M6|���3�2�tG��g���4���o�u�g����(��AX?\ys~��Zę/CB�Ś��\�{Q5�ׯ�;���wY���+�W22a;�&ړ�o�$�$�c�]�}���{�&�UbR�S9��'��/s8��|��`&�xd�i[�����"8���G�����[oõn���jĽ��m��������Lo�\X���n<OCDF�gջy�rr���XF��<#��>#��`Td�9���Ux/X�)<�V�Y��0.gG.ٛ�lW��g[��[���n�4�t��O�l�f;s<����x�q��&>tsEl��_������S�c:��-޻�i�����}��
H�����V��u]W�^��#)�'�Ð�<�!7sQЕ��P�>\��<�C��y����g��҂�$p��E�?��\�9b:���%���T��So��ۣ�d@�\d@5�7��G!��U,�O�aC���{|�l�޷�s�f�5DDâKB-f��QXNܴ �=&7����mQ\b��|�}(�O3Oi<�؁�������$��ud$��F����b�
S�ļd�_���cs�N�c�L4�U�4�j�h��8������c:�8

hk�Z'��2���M���tLE�ub2�;l3��U�>)*��IJ���<�rD~RG4�:xP�jt�U���]p��3��Ͼ�a��.�
h��ј0a¯0�	(ԝf�� T�X'�!#�ģ��B/�ʬgj��gr6�NV�o�6�j��h�mu��D4��F7
�+��_i<��B�63t@|9������������)��!\�]�b��Fl�G
(0^!�c[ÍGU�͌_V�HK�[i��VJ�R2�'Y�$��+2��7@=��lW�
�3����-Z��}��3P�6��@r3Azbx��ub�-����w_�EX���?U��w������i	x+5V��虢@��P/�[u)�����me�Q|�S@&Q��3%U�X'�ۊ}ȀT函��U�jDT��H_�eG��yodF�Kf4������fz<z+�ga���[��Ӟ�d_g_c__�*��Ç�����:���d��-A߀Ķb2 U�a��������tRF8v̺�NYW�9�*��!�@��;�d$@"A��mK�i-t4T@�6m����B�={Z233akk[龃�ڵk��燰�0����ԩS���/aoo�����b8��}Ȁ<N<���Z���}��鋥"��2+�!��
E��p�:).9/�6ΠV�d���ئBOC-�ϟ�…�˲e�*�o���P�ը�`ݺuO,�0wz'����}ľd �Ϥ�e�1zD�/�+O��8���ev 
�!診`c��Z۔
njm"2D@ӧO�.�V����
222�%44��g+-iii8q�������h0r��'Е�t���r@B�/���<W���T[�������m��E���7h��/�Ry��x515�[��X�XCt��h�ɠA���=zZ


0bĈ2����B�R��r���:u*tY�r��
�����~"G��rt��1�����O���ꈊEk�ڰ��Gц� S��)ǂ_(��PEzR��~�9�q�]7w�\���4e�]�b6n�X���c�ucƌ�.�7o6z@��P8�P&�s;L������2^W6 ��@%�9 �#"}i��J�<w'Z����q�2A*k: qn���ŋˬONN�����J�:t(�̙WWW�߿���{��n�w�!�(��	�=Q^��H�!ƒ�P��f�mh�v�զ���;��C��k�N{�Mw����C�Ke�߰a�����<�r�Х=t�x(��&�xl*���x��	/���NO��oj��o����]�Fyk�(�34�[c����f�ľXj�bk�"�8��6UA�/i�?x� t���DZc����.>|W�H@�;�s�פ�
G��Q^��M���XbL�A�w��W�H_�̳Q�4�_�l�O���|j��د�3ZМm�6e�[����lق�"����������˫���*^QQ�	��W�s�PY@�v� ;�Gh��bY���Ę���2v��厦��B�bv�,��
�n�G�d$Ѝ"�t`-Xs�m�5�A�;w�%))I�*�D�e�ҥ�/}�e��C��:�A��b��<�D?��������5/�< �S�-?H}
�I������E��Y��9d`Л,`E@W�����[yfΜ	]<==+�v����%88����.�2�����IHH�.|Xg��x��*3�T�򳐗��G�+�U�hj���h&����y��!�a�!�c���lO�M�ћI�3��.T*_((sw��wNܲ�_H�j_�9�۷o��:�����35�P�-�C�L�Ȁf��*��ME-�x���s<cQc�2��@`Y�����`vۗ}�8"ך
H���B�����8<*8�"����<t�֭[ųЅ�%""��E�]��	�P�&H	��P^�����{�_gx��lV�T/p4M0M1
m1���g��T���#��t�����pv�0�̪��������1o�<�5�܍�����Jg��Dx�L$�C�����GPv.
9���V��x�0�`k��¬�TC`��b
�B>dg���	�hv��g"�>��<E0t@��	�;i����G�cMy�I�t� �
���(��8��;�G�g"�����&�S�_���&S2H>T��xQ���"�\��
��C��|��Xb�]W��@آ/��6�c���8�%����1�Ya'�a+�Y�Rv��&
G$k��=)A��k�MpnG��:��%k�'�a�2��������AW��xV������O�X�� �,4~�St�����&������D"��$��'gݩ۵t%�0eR������p���LE��x�3��a��h���e��.�Ad�sV�o6��d�)R�D2/�N6E��\J����"?֗��,���fv��]N��G��h_<�W�=��C�x���h�mx��
��'a�����B�1A~!_A��Ixp���P�#I(c�9���s�=��aw�%���9ɇ�K����]\�R�����瀎�)��%\�x��y�r@�9m@	�E�W8�sl��{���f��B{H������&�g��x�n;�&{�%|��xh��P��ut��Q��E��8�%�bO�v(�C�O�`K��㍎�_���14S�C#\B}�s@I�QI@�lFE��9��ٓ���5����x���8��f�h�*��RP����|H]:���t���P0E�+N��#�I6�S��c�}�|�GA<������.�8���
*�&ϢK�K$�̽D"�H$�D"�H$�D"�H~���w�i�ݢ<IEND�B`�<svg xmlns="http://www.w3.org/2000/svg" width="6" height="4"><path d="M-.246.532l3.257 2.791L6.268.532" fill="none" stroke="red" stroke-width=".656" stroke-linecap="square"/></svg><svg xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 48 48" fill="#000000">
    <path d="M0 0h48v48H0z" fill="none"/>
    <path d="M24 4C12.95 4 4 12.95 4 24s8.95 20 20 20 20-8.95 20-20S35.05 4 24 4zm2 30h-4V22h4v12zm0-16h-4v-4h4v4z"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 18 18" fill="#000000">
    <path d="M0 0h18v18H0z" fill="none"/>
    <path d="M.5 16h17L9 1 .5 16zm9.5-2H8v-2h2v2zm0-3H8V7h2v4z"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="224" height="216"><g transform="translate(-322 -72)"><circle transform="translate(326 74)" cx="15" cy="17" r="3" fill="#009802"/><path d="M329 77h18v18h-18z" fill="none"/><path d="M327.25 75.25h20v20h-20z" fill="none"/><path d="M325.12 73.125h20v20h-20z" fill="none"/></g><path d="M51 12l-3.5-4H33v8h14.5M14.767 31h-1.534v4.233H9v1.534h4.233V41h1.534v-4.233H19v-1.534h-4.233V31z"/><path d="M33 27h18v18H33z" fill="none"/><path d="M45.42 33.7l-6.705-6.705-1.058 1.057 1.786 1.785L35.58 33.7a1.118 1.118 0 0 0 0 1.59l4.125 4.125c.218.217.51.33.795.33.285 0 .578-.113.795-.33l4.125-4.125a1.118 1.118 0 0 0 0-1.59zm-8.512.795l3.592-3.593 3.592 3.593h-7.184zm10.341 1.125s-1.5 1.627-1.5 2.625c0 .825.675 1.5 1.5 1.5s1.5-.675 1.5-1.5c0-.998-1.5-2.625-1.5-2.625z"/><path d="M33 42h18v3H33z" fill-opacity=".36"/><path d="M7 51h18v18H7z" fill="none"/><path d="M20 56h1.494c.832 0 1.506.672 1.506 1.506v7.987c0 .832-.672 1.507-1.506 1.507h-7.987A1.505 1.505 0 0 1 12 65.493V64h6.494c.835 0 1.506-.675 1.506-1.507V56z" fill-opacity=".36"/><path d="M10.5 53c-.831 0-1.5.669-1.5 1.5v8c0 .831.669 1.5 1.5 1.5h8c.831 0 1.5-.669 1.5-1.5v-8c0-.831-.669-1.5-1.5-1.5h-8zm0 1.5h8v8h-8v-8z" fill="#212121"/><path d="M37 57h8v6h-8z" stroke-miterlimit="4.2" stroke="#000" stroke-width="2"/><path d="M45 60l4-4v8"/><g stroke="#000"><path d="M70.58 12.5a1.08 1.08 0 1 1-2.16 0 1.08 1.08 0 1 1 2.16 0z" fill-rule="evenodd" stroke-width="1.00008"/><path d="M69.48 9.5l2.54-2h-1.524v-2h-2l-.016 2h-1.54zM72.5 12.5l2 2.5v-1.5h2v-2h-2V10zM69.5 15.5l-2.5 2h1.5v2h2v-2H72zM66.5 12.5l-2-2.5v1.5h-2v2h2V15z"/></g><g fill-rule="evenodd"><path d="M60.308 28.525H76.54v16.232H60.308z" fill="none"/><path d="M64.072 36.049l-1.275 1.275 3.826 3.825 7.652-7.651L73 32.222 66.623 38.6z"/></g><path d="M65.94 56l-.94.94L68.053 60 65 63.06l.94.94 4-4z"/><path d="M69.94 56l-.94.94L72.053 60 69 63.06l.94.94 4-4zM14.44 88.94c-2.48 0-4.5-2.02-4.5-4.5 0-.88.26-1.7.69-2.39l6.2 6.2c-.69.44-1.51.69-2.39.69m4.5-4.5c0 .88-.26 1.7-.69 2.39l-6.2-6.2c.69-.44 1.51-.69 2.39-.69 2.48 0 4.5 2.02 4.5 4.5M14.5 78a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13"/><g fill-rule="evenodd"><path d="M32.071 76.568h15.688v15.688H32.07z" fill="none"/><path d="M42.53 79.618a1.312 1.312 0 0 0-1.313-1.307h-5.219c-.723 0-1.312.587-1.312 1.313v6.961c0 .725.584 1.31 1.307 1.313v-8.28h6.536zm-5.23 2.62c0-.725.59-1.312 1.313-1.312h5.218c.726 0 1.313.585 1.313 1.312V89.2c0 .725-.59 1.312-1.313 1.312h-5.218A1.312 1.312 0 0 1 37.3 89.2v-6.962zm1.307-.005h5.23v6.972h-5.23v-6.972z"/></g><path d="M79 84l-3.64-4h-1.79L68 88h7.36L79 84zM61 80v8h2.05L68 80h-7zM63.67 92.55l-1.59-1.32 10.76-15.78 1.59 1.32-10.76 15.78z"/><path d="M54 72h24v24H54z" fill="none"/><path d="M54 72h24v24H54zm0 0h24v24H54zm0 0h24v24H54zm0 0h24v24H54z" fill="none"/><path d="M54 72h24v24H54z" fill="none"/><path d="M54 72h24v24H54z" fill="none"/><path d="M54 72h24v24H54z" fill="none"/><path d="M103 8.33L101.67 7 98 10.67 94.33 7 93 8.33 96.67 12 93 15.67 94.33 17 98 13.33l3.67 3.67 1.33-1.33L99.33 12 103 8.33zM103 37H93v-5h10v5zm-12 5h14V30H91v12zM96 64h7v-8h-7zm9 2H91V54h14zM100 88h-7v-8h7v8zm-9 2h14V78H91v12zM7 112.089v2.91h2.91l8.284-8.283-2.91-2.91L7 112.088zm13.769-7.939a.771.771 0 0 0 0-1.1l-1.82-1.82a.771.771 0 0 0-1.1 0l-1.52 1.53 2.91 2.91 1.53-1.52zM48.77 103.04l-1.816-1.816a.78.78 0 0 0-1.1 0l-2.43 2.43-1.49-1.493-1.1 1.1 1.104 1.105L35 111.301v3.695h3.694l6.938-6.939 1.1 1.105 1.1-1.1-1.492-1.494 2.43-2.431a.768.768 0 0 0 0-1.097zm-10.721 10.4l-1.493-1.493 6.272-6.274 1.493 1.493-6.272 6.274z"/><path d="M66 107l2 3v4h4v-4l2-3z" opacity=".5" fill="#424242"/><path d="M68.5 113.23c.32.13.84.24 1.47.24.59 0 1.14-.1 1.53-.26v-3.93l4-4.57v-.19h-11v.22l4 4.57v3.93zm1.47 1.77c-1.16-.09-2.15-.29-2.97-.99v-4.12l-4-4.57V103h14v2.35l-4 4.57v4.13c-.92.67-2.1.94-3.03.95"/><path d="M89 99h18v18H89z" fill="none"/><path d="M89 114h18v3H89z" fill-opacity=".36"/><path d="M97.25 101.25l-4.125 10.5h1.688l.84-2.25h4.687l.84 2.25h1.688l-4.118-10.5h-1.5zM96.215 108L98 103.252 99.785 108h-3.57z"/><path d="M120.5 19.5v-14h12v14z" fill="none" stroke="#000"/><path d="M126.5 13l-3.25-5h6.5M120 16v-1h13v1z"/><path d="M119.5 30.5h14v12h-14z" fill="none" stroke="#000"/><path d="M126 36.5l5-3.25v6.5M123 30h1v13h-1z"/><path d="M133.5 54.5h-14v12h14z" fill="none" stroke="#000"/><path d="M127 60.5l-5-3.25v6.5M130 54h-1v13h1z"/><path d="M120.5 77.5v14h12v-14z" fill="none" stroke="#000"/><path d="M126.5 84l-3.25 5h6.5M120 81v1h13v-1zM123 107h-4v-4h4v4zM133 105h-9v-2h9v2zM133 107h-9v-1h9v1zM133 111h-9v-2h9v2zM123 113h-4v-4h4v4zM133 113h-9v-1h9v1zM21 133h-2v2h2zM21 137h-2v2c1 0 2-1 2-2zM21 129h-2v2h2zM19 125v2h2c0-1-1-2-2-2zM9 139h4v-6H7v4c0 1.1.9 2 2 2zM9 129H7v2h2zM17 125h-2v2h2zM17 137h-2v2h2zM9 125c-1 0-2 1-2 2h2zM13 125h-2v2h2zM53 143v-5l-5 5h5z"/><g fill-rule="evenodd"><path d="M71.989 127.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 1 1 3 0zM71.989 132.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 1 1 3 0zM71.989 137.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 1 1 3 0z"/></g><path d="M88 123h18v18H88z" fill="none"/><path d="M103.52 130.53a5.625 5.625 0 0 0-5.516-4.526 5.63 5.63 0 0 0-4.988 3.026 4.499 4.499 0 0 0 .487 8.974h9.75c2.07 0 3.75-1.68 3.75-3.75 0-1.98-1.54-3.585-3.483-3.724zm-.266 5.974h-9.75a3 3 0 1 1 0-6h.532a4.127 4.127 0 0 1 3.968-3 4.123 4.123 0 0 1 4.125 4.125v.375h1.125a2.252 2.252 0 0 1 2.25 2.25 2.252 2.252 0 0 1-2.25 2.25zM121 124c-.55 0-.99.45-.99 1l-.01 14c0 .55.44 1 1 1h10c.55 0 1-.45 1-1v-10l-5-5h-6zm6 5v-4l4 4h-4z"/><path d="M117 123h18v18h-18zM147 5h18v18h-18z" fill="none"/><path d="M145.25 3.25h20v20h-20z" fill="none"/><path d="M143.12 1.125h20v20h-20z" fill="none"/><path d="M149 4c-.55 0-1 .45-1 1v14c0 .55.44 1 1 1h5.094a5.022 5.022 0 0 1-.094-1 5 5 0 0 1 5-5c.343 0 .677.028 1 .094V9l-5-5h-6zm6 1l4 4h-4V5z"/><path d="M145 28h18v18h-18z" fill="none"/><path d="M156 33l-2-2h-5c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-8c0-.55-.45-1-1-1h-5z"/><path d="M160 54h-10.5a1.5 1.5 0 0 0-1.5 1.5v9a1.5 1.5 0 0 0 1.5 1.5H160c.825 0 1.5-.675 1.5-1.5v-9A1.5 1.5 0 0 0 160 54zm0 10.5h-10.5V57H160v7.5z" fill="#010101"/><path d="M144.97 51.07h18v18h-18z" fill="none"/><path d="M155 76.9h-5.005c-.54 0-.995.45-.995 1.007v11.986a1 1 0 0 0 .995 1.007h8.01c.54 0 .995-.451.995-1.007V80.9l-4-4zm3 4h-3v-3l3 3zm-6 2l5 2.5-5 2.5v-5z"/><g stroke="#000"><path d="M151.343 105.675l-.712.23-.015.975.024.065.37.724-.882.641-.575-.577-.053-.041-.932-.287-.44.605.56.797.057.039.727.367-.338 1.039-.805-.129-.067-.003-.923.315v.75l.923.316.067-.003.805-.13.338 1.038-.727.369-.056.037-.562.798.44.605.933-.287.053-.043.575-.576.883.64-.372.727-.023.062.015.976.712.23.586-.778.018-.066.125-.805h1.092l.126.805.018.066.585.778.713-.23.014-.976-.022-.062-.372-.727.883-.64.575.576.052.043.933.287.44-.605-.562-.798-.055-.037-.726-.369.336-1.038.805.13.067.003.923-.317v-.749l-.923-.315-.067.003-.805.129-.336-1.039.726-.367.055-.039.562-.797-.44-.605-.933.288-.052.041-.575.577-.883-.641.372-.725.022-.064-.014-.975-.713-.23-.585.78-.018.064-.126.805h-1.092l-.125-.806-.02-.067-.584-.777m1.275 2.477a2.64 2.657 0 0 1 2.64 2.657 2.64 2.657 0 0 1-2.64 2.659 2.64 2.657 0 0 1-2.639-2.659 2.64 2.657 0 0 1 2.639-2.657z" stroke-width=".72907"/><path d="M156.08 100.757l-.516.287.136.935.023.029.542.554-.428.722-.746-.214-.037-.005-.887.323-.009.589.879.35.037-.005.751-.193.411.73-.56.541-.023.028-.16.931.503.302.74-.585.015-.035.214-.747.833.012.19.752.012.035.725.607.514-.288-.138-.933-.022-.03-.54-.558.427-.717.747.212.037.007.89-.325.007-.59-.88-.348-.037.004-.752.193-.408-.731.56-.54.022-.028.162-.932-.507-.302-.742.586-.014.036-.209.745-.833-.01-.193-.753-.012-.035-.725-.606zm1.322 1.558a1.413 1.413 0 0 1 1.413 1.413 1.413 1.413 0 0 1-1.413 1.412 1.413 1.413 0 0 1-1.412-1.412 1.413 1.413 0 0 1 1.412-1.413z" stroke-width=".65543393"/></g><g fill="none"><path d="M146 124h16v16h-16v-16z" opacity=".5"/><path d="M152 138h-2.5c-1 0-1.5-.5-1.5-1.5v-9c0-1 .5-1.5 1.5-1.5h9c1.5 0 1.5 1.468 1.5 1.5v2.5h-1v-3h-10v10h3v1zm9-5l-3 2 3 3-1 1-3-3-2 3-2-8 8 2z" fill="#000"/></g><path d="M12.5 151.5h-1l2-2 2 2h-1s-.035 4.638-.035 4.035l4.035-.034v-1l2 2-2 2v-1l-4.035-.034.035 4.034h1l-2 2-2-2h1l.034-4.034-4.034.034v1l-2-2 2-2v1l4.034.034z" stroke="#000"/><path d="M39.6 159.2h1.6v-6.4h-1.6v6.4zM42 148c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm0 14.4a6.408 6.408 0 0 1-6.4-6.4c0-3.528 2.872-6.4 6.4-6.4 3.528 0 6.4 2.872 6.4 6.4 0 3.528-2.872 6.4-6.4 6.4zm.8-3.2h1.6v-6.4h-1.6v6.4zM69 160h-3v-8h3v8zM75 160h-3v-8h3v8zM101 159h-2v-6h2zm-4 0h-2v-6h2zm4-10h-6l-4 4v6l4 4h6l4-4.12V153z"/><g font-weight="400" font-family="Sans"><path d="M121 149v5l3.343.531-.015 8.047L123 163c.006.593.44 1.011 1 1h8c.579.002.982-.427 1-1v-14c-.01-.535-.482-.997-1-1h-10a1.026 1.026 0 0 0-1 1zm1 0h10v14h-8l.718-.422.094-8.422L122 154v-1z" overflow="visible" style="text-indent:0;line-height:normal;text-transform:none;block-progression:tb"/><path d="M118 154v9c.006.593.44 1.011 1 1h5c.579.002.982-.427 1-1v-9c-.01-.535-.482-.997-1-1h-5a1.026 1.026 0 0 0-1 1zm1 1h5v7h-5z" overflow="visible" style="text-indent:0;line-height:normal;text-transform:none;block-progression:tb"/></g><path d="M146 156c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8-8 3.58-8 8zm8 6.4a6.408 6.408 0 0 1-6.4-6.4c0-3.528 2.872-6.4 6.4-6.4 3.528 0 6.4 2.872 6.4 6.4 0 3.528-2.872 6.4-6.4 6.4zm-1.493-2.971l4.571-3.429-4.571-3.429v6.857zM10 180l10-5v10M48 180l-10-5v10M66.01 179.99c.61.28 1.07.9 1.07 1.58.11.85-.05 1.72.12 2.57.27.54 1 .28 1.43.55.49.24.48 1.01-.06 1.18-.56.22-1.18.08-1.74-.05-.71-.2-1.41-.72-1.5-1.5-.18-.89.01-1.8-.16-2.68-.22-.64-.94-.9-1.57-.93-.58-.1-.83-.94-.35-1.3.51-.35 1.26-.14 1.69-.66.44-.48.29-1.18.32-1.78 0-.81-.02-1.77.65-2.34.66-.54 1.58-.71 2.41-.63.63 0 .98.87.4 1.22-.44.37-1.2.06-1.51.65-.14.56-.05 1.15-.07 1.73-.01.75-.05 1.64-.72 2.13-.12.1-.26.19-.4.26M74.98 179.99c-.67-.3-1.08-1.02-1.08-1.75-.07-.76.03-1.52-.06-2.28-.24-.58-.98-.4-1.46-.59-.59-.24-.48-1.18.14-1.31.73-.15 1.52-.01 2.18.32.56.28.95.86.99 1.48.13.83-.03 1.68.13 2.5.2.68.94.83 1.54.9.56.07.86.8.46 1.21-.44.46-1.2.2-1.65.66-.51.46-.4 1.21-.4 1.83-.03.78.06 1.69-.52 2.3-.74.65-1.8.86-2.75.68-.52-.16-.69-1.01-.15-1.25.44-.23 1.02-.08 1.41-.45.26-.45.09-.98.14-1.47.01-.76-.07-1.63.43-2.26.18-.21.42-.37.66-.51"/><g><path d="M82 168h24v24H82z" fill="none"/><path d="M98 174c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6h-2a4 4 0 1 1-4-4c1.276 0 2.393.601 3.125 1.531h2.344A6.004 6.004 0 0 0 98 174z"/><path d="M103.091 174.88v3.092h-3.092z" stroke="#000" stroke-width="1.068"/></g><g><path d="M120.586 185.891a7.978 7.978 0 0 1-2.586-5.89c0-4.42 3.58-8 8-8s8 3.58 8 8-3.58 8-8 8v-1.6c3.528 0 6.4-2.873 6.4-6.4 0-3.529-2.872-6.4-6.4-6.4a6.408 6.408 0 0 0-6.4 6.4c0 1.935.865 3.673 2.228 4.848l1.692-1.42.015 4.463-4.392-.79 1.443-1.21zm3.92-2.462l4.572-3.429-4.571-3.428v6.857z"/></g><g><path d="M161 180l-8-5v10M151 185h-3v-10h3v10z"/></g><g><path d="M175.2 10.15c.055-.113.153-.22.231-.306.546-.608 1.39-1.198 3.006-1.57V6.101c-1.294.252-2.315.669-3.304 1.56-.333.383-.506.624-.514 1.166-.007.443.177.886.581 1.322zm6.63 3.13c-1.616-.025-3.108-.257-4.622-.765-2.694-.903-3.029-2.17-3.17-2.593-.096 1.69.028 2.957.034 3.065.092 1.5 1.292 2.674 2.158 3.115a12.806 12.806 0 0 0 5.6 1.415v2.484l3.252-4.648-3.251-4.649v2.575zm-.322-5.297c1.616.01 3.453.339 5.245 1.113.735.318 1.328.79 1.808 1.305.332-.152.807-.73.741-1.292-.161-1.388-1.626-2.191-1.88-2.305-1.77-.79-3.975-1.035-5.914-1.058V4l-2.014 2.879 2.014 2.878V7.983zm8.423 1.866c-.082.648-.827 2.035-3.898 2.914v4.525c1.132-.368 2.465-1.296 3.18-2.2.29-.367.468-.874.576-1.241.333-1.123.187-3.314.142-3.998z"/></g><g><path d="M184.624 30.47a6.127 6.127 0 0 1 3.497 4.947H189C188.7 31.823 185.684 29 182 29l-.387.018 2.232 2.222.779-.77zm-3.661-.45a.876.876 0 0 0-1.242 0l-3.725 3.71a.867.867 0 0 0 0 1.238l7.04 7.011a.876.876 0 0 0 1.242 0l3.726-3.71a.867.867 0 0 0 0-1.236l-7.041-7.012zm2.694 11.34l-7.04-7.01 3.725-3.71 7.041 7.01-3.725 3.71zm-4.282.17a6.119 6.119 0 0 1-3.497-4.947H175c.298 3.594 3.315 6.417 7 6.417l.386-.018-2.231-2.222-.78.77z"/></g><g><path d="M171.96 50.013h20v20h-20z" fill="none"/><path d="M175 53h18v18h-18z" fill="none"/><path d="M173.25 51.25h20v20h-20z" fill="none"/><path d="M171.12 49.125h20v20h-20z" fill="none"/><path d="M166 48h24v24h-24z" fill="none"/><path d="M187.35 60.686c.029-.224.05-.448.05-.686 0-.238-.021-.462-.05-.686l1.518-1.155a.347.347 0 0 0 .087-.448l-1.44-2.422a.367.367 0 0 0-.439-.154l-1.791.7a5.295 5.295 0 0 0-1.217-.686l-.273-1.855a.348.348 0 0 0-.353-.294h-2.878a.348.348 0 0 0-.353.294l-.273 1.855a5.568 5.568 0 0 0-1.216.686l-1.792-.7a.356.356 0 0 0-.44.154l-1.439 2.422a.339.339 0 0 0 .087.448l1.518 1.155c-.029.224-.05.455-.05.686 0 .231.021.462.05.686l-1.518 1.155a.347.347 0 0 0-.087.448l1.44 2.422c.086.154.28.21.439.154l1.792-.7c.374.28.777.511 1.216.686l.273 1.855a.348.348 0 0 0 .353.294h2.878c.18 0 .331-.126.353-.294l.273-1.855a5.568 5.568 0 0 0 1.217-.686l1.792.7c.165.063.352 0 .438-.154l1.44-2.422a.347.347 0 0 0-.087-.448l-1.518-1.155zm-5.347 1.764c-1.389 0-2.519-1.099-2.519-2.45 0-1.351 1.13-2.45 2.52-2.45 1.388 0 2.518 1.099 2.518 2.45 0 1.351-1.13 2.45-2.519 2.45z"/></g><g><path d="M176.5 91.5v-14h12v14z" fill="none" stroke="#000"/><path d="M182.5 80l-3.25 5h6.5M176 88v-1h13v1z"/></g><g><path d="M174.5 102.5h14v12h-14z" fill="none" stroke="#000"/><path d="M186 108.5l-5-3.25v6.5M178 102h1v13h-1z"/></g><g><path d="M188.5 126.5h-14v12h14z" fill="none" stroke="#000"/><path d="M177 132.5l5-3.25v6.5M185 126h-1v13h1z"/></g><g><path d="M176.5 149.5v14h12v-14z" fill="none" stroke="#000"/><path d="M182.5 161l-3.25-5h6.5M176 153v1h13v-1z"/></g><g><path d="M176 180c0 3.31 2.69 6 6 6s6-2.69 6-6-2.69-6-6-6-6 2.69-6 6"/></g><g><path d="M12.5 209c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2M13 198v4h-3l4.5 4 4.5-4h-3v-4h-3z"/></g><g><path d="M40.5 209c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2M42.5 198l-4.5 4h3v4h3v-4h3l-4.5-4z"/></g><g><path d="M68 206.5c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2"/><path d="M63.25 207.03c2.55-8.43 11.4-8.73 13.94 0" fill="none" stroke="#000" stroke-width="2.5"/><path d="M77.68 209l-4.54-2.76 6.68-2.1"/></g><g transform="translate(82 192)"><path transform="translate(-288 -24)" d="M295 36a9 9 0 1 0 18.001-.001A9 9 0 0 0 295 36" fill="url(#a)"/><path d="M10 12c0 3.31 2.69 6 6 6s6-2.69 6-6-2.69-6-6-6-6 2.69-6 6"/><defs><radialGradient id="b" cx="0" cy="0" r="1" gradientTransform="matrix(18 0 0 -18 680 341)" gradientUnits="userSpaceOnUse"><stop offset="0"/><stop stop-opacity="0" offset="1"/></radialGradient><radialGradient id="a" cx="0" cy="0" r="1" gradientTransform="matrix(9 0 0 9 304 36)" gradientUnits="userSpaceOnUse" xlink:href="#b"/></defs></g><g><path d="M117 195h18v18h-18z" fill="none"/><path d="M132.25 203h.75v-3h-11v3h.75a1.5 1.5 0 0 1 1.5-1.5h2.5v7.25a1.5 1.5 0 0 1-1.5 1.5v.75h4.5v-.75a1.5 1.5 0 0 1-1.5-1.5v-7.25h2.5a1.5 1.5 0 0 1 1.5 1.5z" fill-opacity=".36"/><path d="M129.25 200h.75v-3h-11v3h.75a1.5 1.5 0 0 1 1.5-1.5h2.5v7.25a1.5 1.5 0 0 1-1.5 1.5v.75h4.5v-.75a1.5 1.5 0 0 1-1.5-1.5v-7.25h2.5a1.5 1.5 0 0 1 1.5 1.5z"/></g><g><path d="M149.5 201h9l-1.5 10h-6M157.5 198h-2v-1h-3v1h-2c-.55 0-1 .48-1 1v1h9v-1c0-.52-.45-1-1-1"/></g><g><path d="M178 201h-2v9h11v-2h-9z"/><path d="M181 200h7v5h-7zm-2-2v9h11v-9z"/></g><g><path d="M210 6.69c-3.636 0-6.742 2.263-8 5.455 1.258 3.193 4.364 5.455 8 5.455s6.742-2.262 8-5.455c-1.258-3.192-4.364-5.454-8-5.454zm0 9.092a3.638 3.638 0 0 1-3.636-3.637A3.638 3.638 0 0 1 210 8.51a3.638 3.638 0 0 1 3.636 3.636A3.638 3.638 0 0 1 210 15.782zm0-5.818a2.179 2.179 0 0 0-2.182 2.181c0 1.208.975 2.182 2.182 2.182a2.179 2.179 0 0 0 2.182-2.182A2.179 2.179 0 0 0 210 9.964z"/></g><g><path d="M219 33h-11v-2h11v2z" opacity=".2"/><path d="M208 33h-6v-2h6v2zM211 36h-6v-2h6v2zM216 39h-6v-2h6v2zM218 42h-6v-2h6v2z"/></g><text style="line-height:0%" x="12.356" y="231.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="12.356" y="231.559" style="line-height:1.25" font-size="12">a</tspan></text><text style="line-height:0%" x="40.356" y="231.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="40.356" y="231.559" style="line-height:1.25" font-size="12">b</tspan></text><text style="line-height:0%" x="68.356" y="231.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="68.356" y="231.559" style="line-height:1.25" font-size="12">c</tspan></text><text style="line-height:0%" x="96.356" y="231.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="96.356" y="231.559" style="line-height:1.25" font-size="12">d</tspan></text><text style="line-height:0%" x="124.356" y="231.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="124.356" y="231.559" style="line-height:1.25" font-size="12">e</tspan></text><text style="line-height:0%" x="152.356" y="231.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="152.356" y="231.559" style="line-height:1.25" font-size="12">f</tspan></text><text style="line-height:0%" x="180.356" y="231.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="180.356" y="231.559" style="line-height:1.25" font-size="12">g</tspan></text><text style="line-height:0%" x="208.356" y="231.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="208.356" y="231.559" style="line-height:1.25" font-size="12">h</tspan></text><text style="line-height:0%" x="-15.644" y="207.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="207.559" style="line-height:1.25" font-size="12">1</tspan></text><text style="line-height:0%" x="-15.644" y="183.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="183.559" style="line-height:1.25" font-size="12">2</tspan></text><text style="line-height:0%" x="-15.644" y="159.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="159.559" style="line-height:1.25" font-size="12">3</tspan></text><text style="line-height:0%" x="-15.644" y="135.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="135.559" style="line-height:1.25" font-size="12">4</tspan></text><text style="line-height:0%" x="-15.644" y="111.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="111.559" style="line-height:1.25" font-size="12">5</tspan></text><text style="line-height:0%" x="-15.644" y="87.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="87.559" style="line-height:1.25" font-size="12">6</tspan></text><text style="line-height:0%" x="-15.644" y="63.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="63.559" style="line-height:1.25" font-size="12">7</tspan></text><text style="line-height:0%" x="-15.644" y="39.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="39.559" style="line-height:1.25" font-size="12">8</tspan></text><text style="line-height:0%" x="-15.644" y="15.559" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-15.644" y="15.559" style="line-height:1.25" font-size="12">9</tspan></text><g fill="none"><path fill="none" d="M200 50h20v20h-20z"/><path d="M204.343 59.343a8.004 8.004 0 0 1 13.267 3.184l-1.455.473h-.496a6.002 6.002 0 0 0-9.902-2.243L208 63h-6v-6l2.343 2.343z" fill="#000"/></g><path d="M215 82h-3v-4h-4v4h-3l5 6zm-10 7v1h10v-1z"/><path d="M196 72h24v24h-24z" fill="none"/><path d="M210 102l-5 6h3v4h4v-4h3zm-5 11v1h10v-1zM206 176h8v8h-8z"/><g><path d="M212.857 134.628h-.62l-.22-.212a5.083 5.083 0 0 0 1.233-3.322 5.106 5.106 0 1 0-5.106 5.105 5.083 5.083 0 0 0 3.323-1.233l.212.22v.62l3.927 3.92 1.17-1.17zm-4.713 0a3.53 3.53 0 0 1-3.534-3.534 3.53 3.53 0 0 1 3.534-3.535 3.53 3.53 0 0 1 3.535 3.535 3.53 3.53 0 0 1-3.535 3.534z"/><path d="M200.682 123.632h18.852v18.851h-18.852z" fill="none"/></g><path d="M211.72 203.423c0 1.1.9 2 2 2s2-.9 2-2-.9-2-2-2-2 .9-2 2"/><g><path d="M211 203.5l-4-4.5v3h-4v3h4v3z"/></g></svg><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="96" height="96"><defs><linearGradient id="a"><stop offset="0" stop-color="#d7687d"/><stop offset="1" stop-color="#b21402"/></linearGradient><linearGradient id="b"><stop offset="0" stop-color="#606eda"/><stop offset="1" stop-color="#021db2"/></linearGradient><linearGradient xlink:href="#a" id="m" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0 -.41667 -.41667 0 25 10)" x2="24"/><linearGradient xlink:href="#b" id="k" gradientUnits="userSpaceOnUse" gradientTransform="translate(-.714 -69.286) scale(.71429)" x1="113" y1="104" x2="127" y2="104"/></defs><path d="M3 36h10v9.008A1.99 1.99 0 0111 47H5c-1.105 0-2-.9-2-1.992zm-1-2h12v1H2zm3-1h6v1H5zM29.526 38.25h-1.474v-.75c0-.414-.33-.75-.737-.75h-1.473V36c0-.414-.33-.75-.737-.75h-.737v-1.5a.743.743 0 00-.494-.7.494.494 0 00-.243-.05C19.968 33 17 36.022 17 39.75s2.968 6.75 6.631 6.75c3.663 0 6.632-3.022 6.632-6.75V39c0-.414-.33-.75-.737-.75zm-9.947 2.25c-.611 0-1.106-.503-1.106-1.125s.495-1.125 1.106-1.125c.61 0 1.105.503 1.105 1.125s-.495 1.125-1.105 1.125zm1.105-4.125c0-.622.495-1.125 1.105-1.125.611 0 1.105.503 1.105 1.125 0 .621-.494 1.125-1.105 1.125-.61 0-1.105-.504-1.105-1.125zM22.894 45c-.61 0-1.105-.503-1.105-1.125 0-.62.495-1.125 1.105-1.125.611 0 1.106.504 1.106 1.125 0 .622-.495 1.125-1.106 1.125zm.369-3.75c-.61 0-1.105-.504-1.105-1.125S22.653 39 23.263 39s1.105.504 1.105 1.125-.495 1.125-1.105 1.125zm3.684 1.5c-.61 0-1.105-.504-1.105-1.125s.495-1.125 1.105-1.125 1.105.504 1.105 1.125-.495 1.125-1.105 1.125z" fill="#212121"/><path d="M40 38c3.314 0 6-.895 6-2s-2.686-2-6-2-6 .895-6 2 2.686 2 6 2zm-6 7c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2zm0-3c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2zm0-3c0 1.105 2.686 2 6 2s6-.895 6-2v-2c0 1.105-2.686 2-6 2s-6-.895-6-2z"/><g fill="none"><path d="M48 32h16v16H48z"/><path d="M57 33h-5.005c-.54 0-.995.45-.995 1.007v11.986A1 1 0 0051.995 47h8.01c.54 0 .995-.451.995-1.007V37l-4-4zm3.29 4H57v-3.29z" fill="#000"/></g><path d="M6.5 51.229V49h3v2.229a4.994 4.994 0 011.88 1.087l1.932-1.115 1.5 2.598-1.93 1.115a5.018 5.018 0 010 2.173l1.93 1.114-1.5 2.598-1.931-1.115A4.995 4.995 0 019.5 60.771v2.23h-3v-2.23a4.994 4.994 0 01-1.88-1.087L2.687 60.8l-1.5-2.598 1.93-1.114a5.018 5.018 0 010-2.173l-1.93-1.115 1.5-2.598 1.931 1.115A4.995 4.995 0 016.5 51.23zM8 58.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM18 51.999a1 1 0 01.99-.999H24v3h-6v-2.001zM18 59h6v3h-5.01a.992.992 0 01-.99-.999V59zm0-4h6v3h-6zm7-4h5.01c.546 0 .99.443.99.999V54h-6v-3zm0 8h6v2.001a1 1 0 01-.99.999H25v-3zm0-4h6v3h-6z" fill="#212121"/><path d="M39.5 61a5.5 5.5 0 100-11 5.5 5.5 0 000 11zm0-2.2v-2.2h-3.3v-2.2h3.3v-2.2l3.3 3.3z"/><g transform="translate(-26 25)"><circle transform="matrix(1.2 0 0 1.2 72.4 21.2)" cx="10.5" cy="11.5" r="2.5" fill="#009802"/><path d="M78 25c-.544 0-1 .45-1 1v8c0 .54.45 1 1 1h3.031a3.533 3.533 0 01-.031-.5c0-.17.008-.337.031-.5H78v-8h3v3h3v1.5c.163-.023.33 0 .5 0 .17 0 .337-.023.5 0V28l-3-3zm4 1l2 2h-2z"/></g><path d="M8 66H3.997a1 1 0 00-.997.995v8.01c0 .54.446.995.997.995h6.006a1 1 0 00.997-.995V69l-3-3zm0 1l2 2H8zm-4 0h3v3h3v5H4z"/><path d="M17 71.5a6.5 6.5 0 1013 0 6.5 6.5 0 00-13 0" fill="#9f9f9f"/><path d="M27 69.43l-.93-.93-2.57 2.57-2.57-2.57-.93.93L22.57 72 20 74.57l.93.93 2.57-2.57 2.57 2.57.93-.93L24.43 72z" fill-opacity=".36"/><path d="M27 68.93l-.93-.93-2.57 2.57L20.93 68l-.93.93 2.57 2.57L20 74.07l.93.93 2.57-2.57L26.07 75l.93-.93-2.57-2.57z" fill="#fff"/><path d="M33 71.5a6.5 6.5 0 1013 0 6.5 6.5 0 00-13 0" fill="#bebebe"/><path d="M43 69.43l-.93-.93-2.57 2.57-2.57-2.57-.93.93L38.57 72 36 74.57l.93.93 2.57-2.57 2.57 2.57.93-.93L40.43 72z" fill-opacity=".37"/><path d="M43 68.93l-.93-.93-2.57 2.57L36.93 68l-.93.93 2.57 2.57L36 74.07l.93.93 2.57-2.57L42.07 75l.93-.93-2.57-2.57z" fill="#fff"/><g transform="translate(49 65)"><path transform="translate(-111 -96)" d="M118 96c-3.87 0-7 3.13-7 7s3.13 7 7 7 7-3.13 7-7-3.13-7-7-7" fill="url(#c)"/><path d="M.5 7a6.5 6.5 0 1013 0 6.5 6.5 0 00-13 0" fill="#f27d82"/><path d="M10.5 4.93L9.57 4 7 6.57 4.43 4l-.93.93L6.07 7.5 3.5 10.07l.93.93L7 8.43 9.57 11l.93-.93L7.93 7.5z" fill-opacity=".36"/><path d="M10.5 4.43l-.93-.93L7 6.07 4.43 3.5l-.93.93L6.07 7 3.5 9.57l.93.93L7 7.93l2.57 2.57.93-.93L7.93 7z" fill="#fff"/><defs><linearGradient id="d"><stop stop-color="#d7687d" offset="0"/><stop stop-color="#b21402" offset="1"/></linearGradient><linearGradient id="c" x2="24" gradientTransform="matrix(0 -.58333 -.58333 0 118 110)" gradientUnits="userSpaceOnUse" xlink:href="#d"/></defs></g><g transform="translate(1 81)"><path transform="translate(-96 -96)" d="M103 110c3.87 0 7-3.13 7-7s-3.13-7-7-7-7 3.13-7 7 3.13 7 7 7" fill="url(#e)"/><path transform="translate(-96 -96)" d="M103 96.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13" fill="url(#f)"/><path d="M10.5 4.93L9.57 4 7 6.57 4.43 4l-.93.93L6.07 7.5 3.5 10.07l.93.93L7 8.43 9.57 11l.93-.93L7.93 7.5z" fill="#993c35"/><path d="M10.5 4.43l-.93-.93L7 6.07 4.43 3.5l-.93.93L6.07 7 3.5 9.57l.93.93L7 7.93l2.57 2.57.93-.93L7.93 7z" fill="#fff"/><defs><linearGradient id="f" x1="96.5" x2="109.5" y1="103" y2="103" gradientTransform="rotate(90 103 103)" gradientUnits="userSpaceOnUse" xlink:href="#g"/><linearGradient id="g"><stop stop-color="#e59290" offset="0"/><stop stop-color="#e99890" offset="1"/></linearGradient><linearGradient id="e" x1="113" x2="127" y1="104" y2="104" gradientTransform="rotate(90 112 95)" gradientUnits="userSpaceOnUse" xlink:href="#h"/><linearGradient id="h"><stop stop-color="#c0544f" offset="0"/><stop stop-color="#d08481" offset="1"/></linearGradient></defs></g><path d="M26.27 90.92a4.5 4.5 0 11.73-.684l2.346 2.346-.707.707zm-2.692-.106a3.5 3.5 0 100-7 3.5 3.5 0 000 7z" fill="#5b5b5b"/><text style="line-height:0%" x="-11.403" y="91.208" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.403" y="91.208" style="line-height:1.25" font-size="10">1</tspan></text><text style="line-height:0%" x="-11.144" y="75.675" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.144" y="75.675" style="line-height:1.25" font-size="10">2</tspan></text><text style="line-height:0%" x="-11.066" y="60.143" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.066" y="60.143" style="line-height:1.25" font-size="10">3</tspan></text><text style="line-height:0%" x="-11.266" y="44.611" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="-11.266" y="44.611" style="line-height:1.25" font-size="10">4</tspan></text><text style="line-height:0%" x="5.935" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="5.935" y="108.082" style="line-height:1.25" font-size="10">a</tspan></text><text style="line-height:0%" x="21.659" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="21.659" y="108.082" style="line-height:1.25" font-size="10">b</tspan></text><text style="line-height:0%" x="37.384" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="37.384" y="108.082" style="line-height:1.25" font-size="10">c</tspan></text><text style="line-height:0%" x="53.108" y="108.082" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#b3b3b3"><tspan x="53.108" y="108.082" style="line-height:1.25" font-size="10">d</tspan></text><g fill="none"><path d="M48 96H32V80h16z"/><path d="M40 81c-3.864 0-7 3.136-7 7s3.136 7 7 7 7-3.136 7-7-3.136-7-7-7zm-5.5 7c0-3.032 2.468-5.5 5.5-5.5s5.5 2.468 5.5 5.5-2.468 5.5-5.5 5.5a5.507 5.507 0 01-5.5-5.5zm6.5 4v-5h-2v5zm-2-6h2v-2h-2z" fill="#000"/></g><g transform="matrix(1.39974 0 0 1.39343 65.054 81.02)" mask="url(#i)"><path d="M1 9l4-8 4 8z" stroke="#c19600" stroke-width="2" stroke-linejoin="round"/><path d="M1 9l4-8 4 8z" fill="#f4bd00" stroke="#f5bd00" stroke-width="1.5" stroke-linejoin="round"/><path d="M3.75 2.75h2.5v2.5L5.75 7h-1.5l-.5-1.75v-2.5m0 5.25h2.5v1.25h-2.5" fill="#ad8601"/><mask id="i"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-60)" d="M64 3h2v2.25L65.5 7h-1L64 5.25V3m0 5h2v1h-2"/></mask></g><g transform="matrix(1.36 0 0 1.34 65.3 65.5)" mask="url(#j)"><path transform="translate(-80)" d="M85 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#k)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#2a53cd"/><mask id="j"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-80)" d="M83.93 2.14c-.03-.53.55-.97 1.06-.83.5.12.79.73.56 1.18-.2.44-.79.61-1.2.36a.812.812 0 01-.42-.71zm1.7 5.46h.67v.53h-2.89V7.6h.66V3.99h-.66v-.53h2.22z"/></mask></g><g transform="matrix(1.37 0 0 1.36 65.2 49.3)" mask="url(#l)"><path transform="translate(-20)" d="M25 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#m)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#eb3941"/><mask id="l"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-20)" d="M23 3l4 4M27 3l-4 4" stroke="#000"/></mask></g><path d="M72 33.333A6.67 6.67 0 0065.333 40 6.67 6.67 0 0072 46.667 6.67 6.67 0 0078.667 40 6.67 6.67 0 0072 33.333zm0 2c1.107 0 2 .894 2 2 0 1.107-.893 2-2 2s-2-.893-2-2c0-1.106.893-2 2-2zm0 9.467a4.8 4.8 0 01-4-2.147c.02-1.326 2.667-2.053 4-2.053 1.327 0 3.98.727 4 2.053a4.8 4.8 0 01-4 2.147z"/><path d="M64 32h16v16H64z" fill="none"/><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="-10.738" y="28.118" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".373"><tspan x="-10.738" y="28.118" style="line-height:1.25" font-size="10">5</tspan></text><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="68.649" y="107.697" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".351"><tspan x="68.649" y="107.697" style="line-height:1.25" font-size="10">e</tspan></text><path d="M65.25 24.75h1.5v-1.5h-1.5zm0 3h1.5v-1.5h-1.5zm0-6h1.5v-1.5h-1.5zm3 3h10.5v-1.5h-10.5zm0 3h10.5v-1.5h-10.5zm0-7.5v1.5h10.5v-1.5z"/><path d="M63 15h18v18H63zM47 79h18v18H47z" fill="none"/><path d="M62 85h-2.107a4.489 4.489 0 00-1.366-1.47l1.223-1.222-1.058-1.058-1.627 1.627a4.439 4.439 0 00-2.122 0l-1.635-1.627-1.058 1.058 1.215 1.222A4.547 4.547 0 0052.108 85H50v1.5h1.568a4.978 4.978 0 00-.068.75V88H50v1.5h1.5v.75c0 .255.03.503.068.75H50v1.5h2.108A4.498 4.498 0 0056 94.75a4.498 4.498 0 003.893-2.25H62V91h-1.567c.037-.248.067-.495.067-.75v-.75H62V88h-1.5v-.75c0-.255-.03-.503-.067-.75H62zm-4.5 6h-3v-1.5h3zm0-3h-3v-1.5h3z"/><g fill="none"><path opacity=".2" d="M48 16h16v16H48z"/><path d="M48.5 30h15L56 17zm8.5-2h-2v-2h2zm0-3h-2v-3h2z" fill="#000"/></g><text style="line-height:0%" x="32.47" y="23.902" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0"><tspan x="32.47" y="23.902" style="line-height:1.25" font-weight="700" font-size="10">A</tspan></text><text style="line-height:0%" x="40.363" y="31.525" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0"><tspan x="40.363" y="31.525" style="line-height:1.25" font-weight="700" font-size="10">B</tspan></text><path d="M37.955 29.089c-1.915-.292-2.12-.9-2.237-4.13h-1.22c.047 3.856.062 5.297 5.736 5.258l.316-.014-2.595-2.996a39.95 39.95 0 000 1.882z"/><g fill="none" fill-rule="evenodd"><path d="M0 16h16v16H0z"/><g fill="#000" fill-rule="nonzero"><path d="M9.58 27.313l1.417 1.294c-.86.577-1.89.913-2.997.913-3.004 0-5.44-2.471-5.44-5.52 0-.917.22-1.782.61-2.543l1.417 1.294c-.138.39-.214.81-.214 1.249 0 2.032 1.624 3.68 3.627 3.68.567 0 1.103-.132 1.58-.367zm1.826-2.046c.143-.395.22-.822.22-1.267 0-2.032-1.623-3.68-3.626-3.68-.573 0-1.116.135-1.598.375l-1.414-1.292A5.36 5.36 0 018 18.48c3.004 0 5.44 2.471 5.44 5.52 0 .924-.224 1.795-.619 2.56z"/><path d="M8 25.84v5.52l3.022-2.76zM8 22.16v-5.52L4.978 19.4z"/></g></g><g fill="none" fill-rule="evenodd"><path fill="#000" d="M20 20h2v6h-2zM26 22h2v6h-2z"/><path fill="#000" fill-rule="nonzero" d="M24.667 20.667l-3.667-4-3.667 4h4.584zM23.333 27.333l3.667 4 3.667-4h-4.584z"/><path d="M16 16h16v16H16z"/></g><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="-10.547" y="11.352" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".373"><tspan x="-10.547" y="11.352" style="line-height:1.25" font-size="10">6</tspan></text><text style="line-height:0%;-inkscape-font-specification:Sans;text-align:start" x="85.725" y="108.235" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill-opacity=".351"><tspan x="85.725" y="108.235" style="line-height:1.25" font-size="10">f</tspan></text><g><path d="M1 1h14v14H1z" fill="none"/><path d="M12.287 6.857A4.37 4.37 0 004.121 5.69 3.497 3.497 0 001 9.167c0 1.93 1.57 3.5 3.5 3.5h7.583A2.918 2.918 0 0015 9.75a2.903 2.903 0 00-2.713-2.893z"/></g><g><path d="M24.044 15a1.44 1.44 0 001.435-1.436h-2.871c0 .79.639 1.436 1.436 1.436zm4.307-4.308v-3.59c0-2.204-1.177-4.049-3.23-4.537v-.488C25.12 1.48 24.639 1 24.044 1c-.596 0-1.077.481-1.077 1.077v.488c-2.06.488-3.231 2.326-3.231 4.538v3.59L18.3 12.127v.718h11.487v-.718z"/></g><g><path d="M32 0h16v16H32z" fill="none"/><path d="M45.333 2.667H34.667c-.74 0-1.327.593-1.327 1.333l-.007 8c0 .74.594 1.333 1.334 1.333h10.666c.74 0 1.334-.593 1.334-1.333V4c0-.74-.594-1.333-1.334-1.333zm0 9.333H34.667V8h10.666zm0-6.667H34.667V4h10.666z"/></g><g><path d="M55.993 1.333A6.663 6.663 0 0049.333 8c0 3.68 2.98 6.667 6.66 6.667A6.67 6.67 0 0062.667 8a6.67 6.67 0 00-6.674-6.667zm.007 12A5.332 5.332 0 0150.667 8 5.332 5.332 0 0156 2.667 5.332 5.332 0 0161.333 8 5.332 5.332 0 0156 13.333z"/><path d="M48 0h16v16H48z" fill="none"/><path d="M56.333 4.667h-1v4l3.5 2.1.5-.82-3-1.78z"/></g></svg>�PNG


IHDR6�q�v�IDATx^���K�`�#6�Rӊ#%���`��2��ZRI�5�;�
�C=xY �q���DAţ2vЊ؁�X�-|��wO4MC��.ʗ������<o��-ꆶ��s���e��~D���)+iq|�F��RV\�g^Ln�G����������_B�V�`��8������Ӑ0�f!ӧ6FQ�M� j��*4�iF������K�CP�zvx����)(^��Bi0��=��H�d�p���Ǎ<��Ūl��hU��С�E���eT.Qµ
 ��
���b7��%���;�>�,�܅��L;O��P !�{���8��)kЏ�UQȽ�<2�3�<ŷ?w��v��~g��M��Ӄ�k9��
J(��!a��:�j�@�DN׿��且����o-�5_�=XcYs潇�*Cs�G9��^n�w���a3XR��ګ�{��c5ٯ�v�

l'���C���,c�_C�k&h�|I�<PQ���v��J�m��*6�(R�]�8=����Y-#�[*ʘtK�G��|�=IN�-V��7w�F1P�tee�#��X�`a\��$���B�Zs(@BiZ
��V�	>,�3���A�G�U<m��B�Z
L���q^���57����i���=��g��٧�n�/�^�){I+j���_m��{a��IEND�B`��PNG


IHDRl$�dG�IDATx^�OoG���zcBl�q�PH@�
	�	5$�1���lR"UJ�T�!�j���jUT�Ym8�ҤPN�9pSE\���JI#Q+�ՄZϡ�Z�/�}45Y�kgY�B�e4;����y=�~M{I�
�Ő�x��N).%�4�`���©:��`�_JJ9iI��*N�����+%�9��딇%�9z�V�Z��q���騝w�o�FV�`�j=]�F��2�3^�s����R�Xje
�r��1<؍s)ml{0b��Ўnta?:���ӥ�nM��gMr�i7v��q�A�T��0k��
9�V��s�d�f�jA'�`1����i���7s�.Ct�D�	Zy>@�(P�4�����c�K�����f�:ʮ�8K���m����OC��0�Z@s��q������͇+�O<y��|���&����%^˧J�̰�۫ڂ����x��2�+�̶1B�h!�J�Y-(����R`&XwhIu�ʋ]wV���_�����?��!-��P���F�aj�"�9w�ME������V��	N$�̕��e�{�z�\7}#�j-�-<��P��6لN�ċ5���6�b�	�*h�m��M�X���A�*T�X>F?�E�E'�2�j�I�pRAe����@��h>�&+�5�E.ķY1���n�Xm‡C�B�z�g�>4���|�U��W�}3݂8��"���0��@�s,-ks���㟤��^/�L����!�c	��>��*��h3�>Ϭ	U�QL�#eho�n۟�1�Nj"T�"�B%��0�H,�]�D���g����}��M��ݞ�
�^l,j�
X5��@X0��Z2�b�$ֵ}���Y���S�b���e����'�ӲVg�կ��f�E]^��A	�����hjуF��`�����I����Pw��M5Ub8�}�"ݗbQƥ���!�"���e~��a	4�}�VM�jJ�vh�V#�t?�c��1�t�`��SW��r�]؉:�3��?�MO��Ӧ�U�&7��+cQ�_����V�S��s���^4`;0�-�!�@�@�F�R{0����:t������G뢳"��[?���o�Pz���H����=�Y}!��
Dc��<r�,u�V7[��"���-l+l����[cA��!/I�L�S���]ų�g���J034qb�m�3�s�U,
1
�>�w�G��6%S.��gm��n+3ASi�{y;Ͷt�.�5,��S���%���pm�E��t�51�x>/�
����bn�Χ���(�X��^ˊO���S[��qo�&`:ڕ�����l�0#�ͽ���•uX:�4Sk�C��Zâ��6:�Η�h������E�11,�,_Ϧ�.�/�Sk׳+�E�L�ӿ�|M���lOct��'��㱋peʰ��e��%��e��d)��@���FpI�z��XIEND�B`��PNG


IHDR"":G�bKGD�������	pHYs��~�tIME�
x{=IDATXõ�k�UW�k�s�f��08ֶ &�|���CA	+
����ZT	6Ŗ���a�V)���J���h�1��XR�cIkSӤ�(3�qߏs���w��pf\�;9ɽg����Y�
�]��X�h�z��r��*Q��I�y�k��5��ί���f6.�<!��e�#����ֿ�&୧P�P
�:k��
�V<ph�>'����kJ���ը��;�8�Y�jB���������tӗ���K�����7��Ǜ�{f͞�r�˕���o�0��YG��[9�?�ʝO����מ���'��/�|��w0�0�x�++z��Tm�sλ+��=�T���#v��U�������/ؼ����x�_]zh�����B���Zw�:Eŀ3���g=�A��E�`DP5A���ͳ��Zֽ���o��w���=��g����R\X*��"�Ӌ�Xk)�"��5��R��6��>��ko�/�������nQd!8�H���b��>��7��4E�uDQBl-����Q!S�0vnYqo�������k�sf>��
UE��^j ^j�^E�ཀvy���y� "P� ��K[�,~��o����=��5���Q&m�wx���Y�����K%2��{ϫ�T8�$�t�����-�;��8<ށ��srhpT��	T0�P�k��)j�"57���"��B-lcAT����e�ʜ�X7��s����B1��1����TRS��Ֆ��L���'���U����"SSI���|���rNe�
��`T�@��!.�)R�SMb�y��o�,�|QЀZ���P��eW�X+E��2�!F
Jm�: �"�2��&��eN-cT��R*(�jP?4�ǛZVU2�<�j��-��0i�OOh�PS?G"b�ПBU(c�*S�n=T�#`��q�A"��3C�9
��k^��ab��#��:}Ċū'r1�bi��l�l.��r�V�	0j�$XM8vj?��F���z�r�a�Q�+�ak,H��<�jR���:����ˑs��T�z}�`�d�+���@��=��r�Ȑ>�/�I5J�O��H9ON�b�?�yێ6:o^��xEW:L�8�"��T�.?U<��T������U]��tȇ�|�u��Tr�G6l����{DžQ�_'/��y��;�w\���lY0��d��v>۳z鉁�U�h�S-"‚�shJ�q��s�8g�G��T�A���ܾy��=�/��/�n�GW���Ҷx��KSA�0v�y��)�����TWwN�ֺd��=�o���#��� 7_w�]�6����<~�O�=����{�	r��G����u��FM�!���=+7�i��w������|q�m�Do}�+s��Ã�����4�x��בQ���Æ'Sa��[Vm;��[b�c��w����$~��L{s΁x}��i��m=2Q�~������[{]�oh�޶�o(�������똿p㲭Gv�:��ђ��UnIEND�B`��PNG


IHDRL�V|�TPLTE�����������������і����������������������Н�������������������Ė�������������������itRNS+T
^c�Wa�Q)\�OB0}��IDATx^��I�0�o��8��gD�V	H��{S��9��64��|��!G4�bL}0�2�A�f�@�d�����;��
BN��5�0�>a�F���������k�@q�0�&��F��ȄI�]��-��)^F@T��ە����
�E11��][��7Vh#� �n�0�¾�����IEND�B`��PNG


IHDR  szz� IDATx^�W�k\E�ݛd����6F�4�d7��m�Ə
�(�>X}�O-��@�OR�[UP(�X�� V-��"��f���n�ۢɦjR�К4�3�9́{a�]�Y&3s��~�sΜ�q�ָ��Q&�r����v5���<�����FC����)��:N�R��F�ǡ��'s3��=giii��O��>��5\��ַ>���ӕ�vn�"��ݳ�������<6ҵ������PJq�L�4�y�ZF�������[�G��rW޵��"Q�Α#'��}~�Gh4��\l�A)�����͵�dc̊ؠj	w�����֙�����c��6W����=�uo�y�)����l�e��x�%�u8�ڐ��ĒX�\im�B���a���R��b`�q]�JW|��^\c8�g�+!�_����!m||�Ԡ$�Y�LFٞ��@"�gO��|PP�������x;�Cl����g�6��9[h��HD�)�c��
�Iy�V�@*��	�&C�,�/��f�"��L&�E	�`i>�np�4033k�kԧs��4�y�p�A&3�6���zb�"��a@�U�C ��IR)�<�j��2'��A~&��G�?��y�
]�'���,%���H��o�����B��n�1�J�@th@���H�ZT3�(��&�[�액(���`U�Y�2���C@�k�@�99���nkk��0oRS/�~`&��y?+絧k�{�M�s,,�m�=��˅j�B-��v��W�ϮM@�^��E> C�:3I#��/�"9 ��Ÿ���m{���
���z��^��= ���2�:،`�����⾖����Ϗ��w����Cav��	�Lm�%e��$1���yt�������k���E~�g���h,iԯ����W��s�q�"��t�T1RJvRM
8d�/�ނ����'�Fy�l�w��#ر�J�Y�N2{�3R�y^�-!�%�zm�>�~òQ>�F�<�՛kx}�˒�PuTBQ��D�Kv+{%E�����x�����1�*>��$J��ض�3�j�	�E9@�	�(�L��8��H��9_|lf
�m�gSv'�q��N�\p��څHi_	�wG�<�����߽��y"�����Ki����J5������ҏN��k;�8}��ɓ_����RUR���r��O�g0���9t�j}]��H�q���|��_�mp\w�):��'g�U+D*
�8` c��Yy�v�=�(/ U@�:IEND�B`��PNG


IHDR  szz��IDATx^�W�k\U��7I����6F�4��Lf&�1�¢VD	�����v�…�u%u[�+�n�"�|5_�d�E'Iմ����s��p�Q�oJ��0y��w���9�{�$���V��xtl7��z q[w����P,:��|_��(A'�MHx��_����}�> �g����|�թ�!���ɓ�&��Z�82�/��,���9v}vh�|�C�l��fMD�G��l��w3�б�8���{d�^��z"��������?�)$�;R�����'2'�e�$�ČO@���j�E�a�f�¶
++�#
n159�0$�E��sI蘝�B��T�9��|>\��&s�^�Z��
0HĞ���`~B�u/:x�---��I�&'ӎ�<r�$��µE�P�jIxفgAd]�	�M��s`i/8+d��q���6�T��뮼.�bU�~���a�9���$s�����s�ͥ!�%  �|Z��dG۲&C��3�%eM&����y�_4!ac�S�+Pa�I֋K5�X���[���Vk��5)����

��Uz�Y�fl-ؖ��T�$U��H�A>k�C�0.�۪�����Ċ��n�������I�j�F�yy���l�׀�cQ4��ٔ����} ��2Al�l|��*�I��S�e�4'WXrh�&9���ʯ?c�w�T���.��F��*�_͘Hz(D �+~\H�yu��{
w�������oQ�/2Ҋ�*�"��s$$j�癉$ʕy��&�ȶÏ���Ǟ�k���Cټ�~��ێ����z�!e8k	��H�?��K~g���>�8V/��}w��:j�ƈhPq���\*�{u�z���rZ�|�+?��l���j�]�+G^�x�X�f��L�3Vu�ߒ�K��Zē���Ɖc/�O?Bs����$t��冤ܬ�Z�k����e�]����E�g���Ӌ;v���N��6��,�s�p�e�H��n�J�����blh��yd���s��G{�w�?&6Z��t�	�G�����ߌG@��(�����k�[/��%����/�i����a"W�0X��
PWWW����bG���lmٯ�����H:$yW)qIEND�B`��PNG


IHDR�a�IDATxڍQ�/A�f�mV��
���D�\�.��܃D����]�D$W!�ġ'$~�B+ďD#-[��3]�����̼�6�}�{o	c�3
~���@�co�]�^[O��Z�W�J�WWW�� ʘLN/X�&h�
��E7YJ�Ș���z�T������!NO���C<�*D���о��#-���
^K%��%�65s)"F�Dm�^J6��R莙�}0�@�P�dyT��%M��-��rWx������[@v�.I��\}���lCè7.�)�.I�n!hBd3���p�z���@�݌vȼ7n��3�˿v@��d%�"U���^bWW���(���B���q�ډ$�NJ����ho��T]ܹ\4!�!��ӹ��%Z�Qx��i��0Y�wuF`�R�O���u]/�'��<��ƒ�IEND�B`��PNG


IHDR		J�ΛfIDAT�c���AYS�By�r��)�D�q���@a!PHWO�
tc0�59���'Y�A�+�+�Ϡ�>/=�3(�hc@d���3P�v��͐�Y!!F ��Il�˰�IEND�B`��PNG


IHDR

r��|gAMA���a�IDAT(��A
�0E�ĝ��7p����d�K�w+.q#��ԉ�$���������Ďh�.�F����]��K�FfVn�e�S��~]��|Y����˓j�@�G�2��v�{�F��{:�l���wr�N���p���]QD�3��}�W�
�1,���~�IEND�B`��PNG


IHDR�JL�gAMA���a2IDATH
͖�j�@F�?m��K��
�-�o�F�;_@�εؖ��YFƠc�:/�L&����dZY�Q�^a{�Z:$�jI�O0�%dM�$����Ew�Ҟ�Z�b)D�$S$'j�c��~�[D�%ZEQ�(Zb�$�"�D���;Vң�V�cT��C�0����"�2$�b�:	�:�į��c����[�s�Q*�ֺ\EYT��,�M�j�H��o|��Xp���w�P��$zH�$]r5�����uhC�=����_�W�!�ҖH��Vp)�uB4g�Cm���y�Ic��;	;IEND�B`��PNG


IHDR��-�gAMA���a7IDAT(cd``��@|�A�g2��\�3!���Q	���F�#H@��)�(��lt�,�}IEND�B`��PNG


IHDR4�\�'gAMA���a�IDATH
�1
�0D���E������^���Y!�S,h�,���1�#E��Rz`5������Ԡ
��/�H��\�ܸ/�v�U�]�$K�]�@�e�tY
��X�HG�����	�]�[��E����p+�E�	����ӊ�IEND�B`��PNG


IHDR�^�.gAMA���a#IDAT(cd``�bi �%x�4���6_�A�6��c���VIEND�B`��PNG


IHDR4-Q�+gAMA���a^IDATH
cd``�bS ����H�1�P�	�ۿ1!q��?3���X�Y�����z��a��!0�!*�G�����p��ˀ�!m.w����IEND�B`��PNG


IHDR  szz��IDATx��iHTQ��(6���:j�d�2�N�	�Mc�6����/E� a�T�Z)���ʡ��C�(�p�R�%���+T�L�^z�ɩW�1QЁ˽�����9��7�v����&��P(*�V�%''GQ�gq�\*�R�Gk:�|��Fj�������p8΋E@IR������!sX�5�?�~Q"���D���$����AVs��������'�R,	 ##�K��|ONN� !�iii|D�M<�F������D$EB�P��,�Z�z����hhh��tQ�
y?`2�D$�D��!�>��}	����$}�I�Zo�E���� K���5�x�x
j�tf,����wއ���Ǣ�,,�]�	�����,M���+��讼.�6�N��3(J=BIQf?!��6�C����t��)bv!]�JH�$�gmw�1�L1f!��_��2
�04� $F�>-� �y
4~! �m���0�������{0C#�9B�D�@�{8�b�0I"G_cd&�+q�a/��'�Y1�?R8��C0�yD���6_6s-NfU�s�M��뱠��:v,<��%��mAː
�އx�yEIG%�!c���*"88?����8r��qk�Ԃ��א={3:G�ٜ���:�����q�& �����'�AŻ��h���ي�qk�$����l�f�.H,f�p���n�ϛnD~�>�u0
�C�ww;@�MIQ�P�u�7�ۏ�s�y�2��vy����=44�)))hll�n���P�>�-����A�{�8����l6K}r�1�X��l��Q�z~A�c����aaal�K��K)�%d%55U����L�����y�哄��7Sd�Wn"N��p@
|#JRzI��+�Z�n���('��Y�|#
���d��������W���`7%�TIEND�B`��PNG


IHDR  szz�~IDATx��VKHQ��̽7嫋�KY֦P�{�.�E�B��1���E�t������&�\A=�V*d��P�H�Z��3s�st�;3��>���3������� 0B���񗕕�p���(� N�	!�Z?�Z;|L���O{��(�9���ݰunDSIp����$�#�NBE
Lp 
����������c||\k[���|ڸ��>//�{΄TUU������r���n���}t�VTT�G��0�z�
�U�"}aaa�h#�fK���bB���N�A-_�AM�.**J�


�h��뙏^z�=@씡���������
K�`vX�>#��9\�?�?"�
�w�p��2�B&"&c�79�'%��	aa������K��(.uI؛�9d�XS���C�0��	m�`��QϿ�`p��alhyx���*��T����Ⲃs��`��#x����t%�t��g��!���c)N�ǖ���+��Ek��6���	������2��\A8B+B��7�4�b��co�(l�E��'��t���T����&�l]"�O�z&�)G�kE5��Gqh�j
:�
x��Ka����Edl�J2~u�#��f���'R]���#{��a����2Z�p��<��d[e��Ϡj~)~�R���(�2�#ۗ/�ԁ%�8,s5����-�e��X�S�V��h�Y�d[b�pX��̔�z/�;���������}���2��YYYl�?���bddD����dU5���O���DR[[5����h
�D�;_W����xxxL���m��=�����ʘw}MMM�q���P<b�Z%4n��X��yu���ab 9cP�gI��!�<g�a�x��0�/��QiW]IEND�B`��PNG


IHDR��7�TIDAT(�c` �8bB!G���X�P"BA(!@�!��e�) �dS�3�:n��C�	����&�D�B�@�S����+!
`4�{�yIEND�B`��PNG


IHDR  szz��IDATx^�WMhQ���m��n/&�"�"6.I�${(*=	
E�^ī=�w��Ѓ�$E�BZH���!UH�ؤ�Қ�f�}�>H��&�Tz�afvvw���n�qα�0�ǰ�Ƙi۶�8����L�0B��K���ئ6����B!_*�$ι��d^@�o+�$����DR	��#��UJ
�����)���Ԯ�X,*�G`dddG-�t����k��	}t'T�T*�:��4ēɤЂ��y$�N���H��cL��Q}?���� n��ض�����	���/���ߒ����vE�]P_�?q)�񉴱��ۛ�&.�|7�4G��!вR�=6�R���%��nH��(um�#h�n5WH�-��}��QT�[����� I(
H����E�U]�+`�Y�Zt`~��Sq������勳X=���1t���2��n�xX���@�|�x�����U�Z���G�h��[�'��}{��xT�\T,��;�j)<���CăH�@#	� Vώ�4��y�
�kL�/����R'�߁l6+�J�"�x<�\.�PQ(�����Aoo/���"ຮ�����T%�Rk�233#�肺��U�|^�===���I۶mE�iH$;V;44D�;%�B�-�I�x~�"�7�����v�p�B+�eY�766�1�ș��(�$���Te���IEND�B`��PNG


IHDR  �s��IDATx^��?
�0�?ѭ����y(���G�#���N]
�}*
!	�QT�J�oȯ/4�LJ�5�����u���8�����W2��˝��:�����@1^
ڂ@� ��T)��ǀ�^|(`��Q���A�$�0e ]g��!������͉�������yN�-p�� '�$N��$r�6���R!����|�|,t) �tۚ	|��8d@ע�˿����%��IEND�B`��PNG


IHDR��7�9IDAT(�c` �8bB!G���X�P"BA(!��
��@$��	B"�(�%\	Qsp�56�%IEND�B`��PNG


IHDR  szz�BIDATx^�{K#gƳ_�O����'PP�h��J�ƈ��u�4&n�T3�4�"��Z/t��1�F���V\�	��S��8&�S聗y�9��9yg����+�˕�t��]��]S4��G��s8�_5okk/p8\���H$Vp||���K�����9ߓg�ù����v�+ϡ:��hf{{���8<<��:���0;;Kc��|��I�FU
�H�͝�U�g���NOO������i�|>����l6�����?�����m~f=�ܞg�����E����Ux�^4[��hfff������k<�{�ǃ�f+�F���i�bf�(J��q�#NN~�ev�w���F<��19��Up�侧AZa���9��lJA ��M ZZ��(� ���a�0��Lfgm5k�-�X^�������.�'�52���t�V'����	X����-��ؘ���}�OL��$|���� w���B��b�����l�0,����<99�d�|H}}}�6�����&���L���aX��b�pO�����t���>����b.!��)Wf[,u�޾5�xC��bhii������Ygg'��S�G�Gx��N���<������������pss��~{{�P($E<f��F�����ð����+�b��(l6������"�J�(�1K���<�����‚T�p8��
����N�IPੴf	��UUUƯ��7o"���all]]]X�/�ceH��%�g�0GGG��TTT�5͋�X�[G�����Vlj
�����Ҹ
�����_�� z~����K�E��Ӄ`0�1���'�U�7e�ׇ�0W�chhggg���9����J��eee�0=�������p8�p8�G��t_�1�~}!s��I�A8Ĝ0��lS.Q\\��F�D��i��0��v��h���Fg�0��LS�QRR�WTT�W���!���(G�_gER�l��i<��)���E�h��,f��$z]XX误����'  ǫ�k�4<����4�=����?;+����0��C�
�"q)�����b�$�	$&���E��]s������,<�x��3�f|#!+�|�#×��!C�$y�F�b����q�0��_�Ž*�RUU��z"}�4z�|��O�R>z�w�,��L�!�6��]�&�7\!��3��ZE��bU�e�T�,SZ��m�)����r�.Z��Cpb݋S�o]�}B��(�����@���׎�p���G�!�V'@;&�L�e�)�'��>*F�>��]
�k`QD����7Т:d�0�
b��z
M�|췝�C��W��IEND�B`��PNG


IHDR	=Z�'IDAT�cx͠�_�k��D�b@0aRH`j�M����-�2^˓IEND�B`��PNG


IHDR	=Z�"IDAT�cx��J���CXH0A� \!�b
�
k�-��jP�IEND�B`�<svg xmlns="http://www.w3.org/2000/svg" width="80" height="32"><g fill="none"><path d="M50 19.732A1.73 1.73 0 0 1 51.726 18h9.548c.953 0 1.726.769 1.726 1.732v8.536A1.73 1.73 0 0 1 61.274 30h-9.548A1.725 1.725 0 0 1 50 28.268v-8.536zM56 22h1v-1h-1v1zm0 5h1v-4h-1v4z" fill="#000"/><path d="M64 32V16h16v16z"/><path d="M67.719 18c-.952 0-1.719.762-1.719 1.719v8.562c0 .963.765 1.719 1.719 1.719h9.562c.952 0 1.719-.762 1.719-1.719V19.72c0-.963-.765-1.719-1.719-1.719H67.72zm4.781 2a2 2 0 0 1 2 2c0 .44-.184.84-.469 1.125l-.437.469c-.36.365-.594.656-.594 1.406h-1v-.25a2 2 0 0 1 .594-1.406l.625-.625A.998.998 0 0 0 73.5 22c0-.55-.45-1-1-1s-1 .45-1 1h-1a2 2 0 0 1 2-2zm-.5 6h1v1h-1v-1z" fill="#000"/><g transform="translate(0 16)"><path opacity=".2" d="M0 0h16v16H0z"/><rect rx="1" height="8" width="8" y="4" x="4" fill="#000"/></g><g transform="translate(16 16)"><path opacity=".2" d="M0 0h16v16H0z"/><rect rx="4" height="8" width="8" y="4" x="4" fill="#000"/></g><path opacity=".2" d="M32 16h16v16H32z"/><path fill="#000" d="M35 28l5-9 5 9z"/><path opacity=".2" d="M32 0h16v16H32z"/><path d="M32.5 14h15L40 1l-7.5 13zm8.5-2h-2v-2h2v2zm0-3h-2V6h2v3z" fill="#000"/><path d="M32 0v16H16V0z"/><path d="M24 1c-3.864 0-7 3.136-7 7s3.136 7 7 7 7-3.136 7-7-3.136-7-7-7zm-5.5 7c0-3.032 2.468-5.5 5.5-5.5s5.5 2.468 5.5 5.5-2.468 5.5-5.5 5.5A5.507 5.507 0 0 1 18.5 8zm6.5 4V7h-2v5h2zm-2-6h2V4h-2v2z" fill="#000"/><path d="M16 0v16H0V0z"/><path d="M10.5 6.5v-1A2.5 2.5 0 0 0 8 3c-1.38.01-2.5 1.12-2.5 2.5v1H5c-.55 0-1 .45-1 .996V12.5c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-5c0-.528-.45-1-1-1h-.5zm-4 .01V5.5C6.5 4.67 7.17 4 8 4s1.5.67 1.5 1.5v1.01h-3z" fill="#000"/><path d="M160-32V0h-32v-32z"/><path opacity=".2" d="M0-32h32V0H0z"/><g><path opacity=".2" d="M32-32h32V0H32z"/></g><g><path opacity=".2" d="M64-32h32V0H64z"/></g><g><path opacity=".2" d="M64-64h32v32H64z"/></g><g><path d="M64-64v32H32v-32z"/></g><g><path d="M32-64v32H0v-32z"/></g></g></svg><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="130" height="110"><defs><linearGradient id="y" x1="113" x2="127" y1="104" y2="104" gradientTransform="translate(-.714 -69.286) scale(.71429)" gradientUnits="userSpaceOnUse" xlink:href="#a"/><linearGradient id="a"><stop stop-color="#606eda" offset="0"/><stop stop-color="#021db2" offset="1"/></linearGradient><linearGradient id="A" x2="24" gradientTransform="matrix(0 -.41667 -.41667 0 25 10)" gradientUnits="userSpaceOnUse" xlink:href="#b"/><linearGradient id="b"><stop stop-color="#d7687d" offset="0"/><stop stop-color="#b21402" offset="1"/></linearGradient></defs><path d="M0 20.995c0-.55.456-.995.995-.995h8.01c.55 0 .995.455.995.995v8.01c0 .549-.456.995-.995.995H.995C.445 30 0 29.544 0 29.004zm5.123 4.744C7.691 25.312 8.75 24.546 8.75 22h-1.5c0 1.62-.44 1.939-2.373 2.26-2.568.429-3.627 1.194-3.627 3.74h1.5c0-1.62.44-1.937 2.373-2.26zM23.65 27.21l-1.44-2.03L21 26.39 23.55 30 30 22.33 28.88 21z"/><path d="M6.5 46c0 .55.45 1 1 1s1-.45 1-1-.45-1-1-1-1 .45-1 1" fill="#bababa"/><path d="M5.75 42.75L2.25 46l3.5 3.25" fill="none" stroke="#bababa" stroke-width="1.5"/><path d="M27.5 42.43l-.93-.93L24 44.07l-2.57-2.57-.93.93L23.07 45l-2.57 2.57.93.93L24 45.93l2.57 2.57.93-.93L24.93 45l2.57-2.57z" fill-opacity=".24"/><path d="M27.5 41.93l-.93-.93L24 43.57 21.43 41l-.93.93 2.57 2.57-2.57 2.57.93.93L24 45.43 26.57 48l.93-.93-2.57-2.57 2.57-2.57z" fill="#676767"/><path d="M43.25 20c-.7 0-1.25.5-1.25 1.25v7.5c0 .7.5 1.25 1.25 1.25h3.5c.7 0 1.25-.5 1.25-1.25v-7.5c0-.7-.5-1.25-1.25-1.25zM43 21h4v7h-4zm2 7.25c.4 0 .75.3.75.75 0 .4-.3.75-.75.75-.4 0-.75-.3-.75-.75 0-.4.3-.75.75-.75z"/><g transform="translate(40 40)"><path transform="translate(-20)" d="M25 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#c)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#eb3941"/><path d="M3 3l4 4M7 3L3 7" stroke="#fff"/><defs><linearGradient id="d"><stop stop-color="#d7687d" offset="0"/><stop stop-color="#b21402" offset="1"/></linearGradient><linearGradient id="c" x2="24" gradientTransform="matrix(0 -.41667 -.41667 0 25 10)" gradientUnits="userSpaceOnUse" xlink:href="#d"/></defs></g><path d="M4.5 61.3l4 3.7-4 3.7v-1.2H1.425l.075-5h3z" fill="#adf2ad" stroke="#007200"/><g transform="translate(20 60)"><path transform="translate(-140)" d="M144.95 10A5.002 5.002 0 01140 4.95 5.002 5.002 0 01145.05 0c2.76.03 4.98 2.29 4.95 5.05a5.002 5.002 0 01-5.05 4.95z" fill="url(#e)"/><path d="M9.5 5.05A4.494 4.494 0 014.95 9.5 4.494 4.494 0 01.5 4.95 4.494 4.494 0 015.05.5C7.54.53 9.53 2.56 9.5 5.05z" fill="#00be00"/><path transform="translate(-140)" d="M145.08.53c1.97.02 3.55 1.06 3.54 2.32-.01 1.26-1.62 2.26-3.59 2.24-1.97-.02-3.55-1.06-3.54-2.32.01-1.26 1.62-2.26 3.59-2.24z" fill="url(#f)"/><path transform="translate(-140)" d="M144.98 9.41c1.66.02 3.01-.68 3.02-1.56.01-.88-1.33-1.61-2.98-1.63-1.66-.02-3.01.68-3.02 1.56-.01.88 1.33 1.61 2.98 1.63z" fill="url(#g)"/><defs><linearGradient id="h"><stop stop-color="#00d600" stop-opacity="0" offset="0"/><stop stop-color="#d8fc7b" stop-opacity=".81" offset="1"/></linearGradient><linearGradient id="i"><stop stop-color="#00ba00" offset="0"/><stop stop-color="#fff" stop-opacity=".91" offset="1"/></linearGradient><linearGradient id="j"><stop stop-color="#00a104" offset="0"/><stop stop-color="#00c605" offset="1"/></linearGradient><linearGradient id="g" x1="227.88" x2="235.12" y1="103.16" y2="103.16" gradientTransform="matrix(-.0048 .4396 .78038 .00853 65.608 -94.834)" gradientUnits="userSpaceOnUse" xlink:href="#h"/><linearGradient id="f" x1="227.88" x2="235.12" y1="103.16" y2="103.16" gradientTransform="matrix(.00687 -.62923 .9267 .01012 47.871 147.44)" gradientUnits="userSpaceOnUse" xlink:href="#i"/><linearGradient id="e" x1="227.88" x2="235.12" y1="103.16" y2="103.16" gradientTransform="matrix(-.01507 1.3791 -1.3006 -.0142 282.66 -312.8)" gradientUnits="userSpaceOnUse" xlink:href="#j"/></defs></g><g transform="translate(40 60)"><path transform="translate(-80)" d="M85 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#k)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#2a53cd"/><path d="M3.93 2.14c-.03-.53.55-.97 1.06-.83.5.12.79.73.56 1.18-.2.44-.79.61-1.2.36a.812.812 0 01-.42-.71zm1.7 5.46h.67v.53H3.41V7.6h.66V3.99h-.66v-.53h2.22V7.6z" fill="#fff"/><defs><linearGradient id="l"><stop stop-color="#606eda" offset="0"/><stop stop-color="#021db2" offset="1"/></linearGradient><linearGradient id="k" x1="113" x2="127" y1="104" y2="104" gradientTransform="translate(-.714 -69.286) scale(.71429)" gradientUnits="userSpaceOnUse" xlink:href="#l"/></defs></g><path d="M60.45 20.467v9.079h5.373l3.582-4.54-3.582-4.539z" fill="#698cfe" stroke="#4073f4" stroke-width=".908"/><path d="M60.45 40.467v9.08h5.372l3.581-4.54-3.581-4.54z" fill="#ef9d0d" stroke="#a36c01" stroke-width=".908"/><g transform="translate(60 60)"><path d="M5 10c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z" fill="#e5a600"/><path d="M9.5 5c0 2.49-2.01 4.5-4.5 4.5S.5 7.49.5 5 2.51.5 5 .5 9.5 2.51 9.5 5z" fill="#ffbd00"/><path transform="translate(-160)" d="M165.03.53c1.97 0 3.56 1.02 3.56 2.28 0 1.26-1.59 2.28-3.56 2.28s-3.56-1.02-3.56-2.28c0-1.26 1.59-2.28 3.56-2.28z" fill="url(#m)"/><path transform="translate(-160)" d="M164.99 9.42c1.66 0 3-.71 3-1.59 0-.88-1.34-1.59-3-1.59s-3 .71-3 1.59c0 .88 1.34 1.59 3 1.59z" fill="url(#n)"/><defs><linearGradient id="o"><stop stop-color="#ffa801" stop-opacity="0" offset="0"/><stop stop-color="#f0fb3d" offset="1"/></linearGradient><linearGradient id="p"><stop stop-color="#ffbd00" stop-opacity=".65" offset="0"/><stop stop-color="#fff" stop-opacity=".91" offset="1"/></linearGradient><linearGradient id="n" x1="227.88" x2="235.12" y1="103.16" y2="103.16" gradientTransform="matrix(0 .43966 .78049 0 84.444 -93.924)" gradientUnits="userSpaceOnUse" xlink:href="#o"/><linearGradient id="m" x1="227.88" x2="235.12" y1="103.16" y2="103.16" gradientTransform="matrix(0 -.62931 .92683 0 69.47 148.53)" gradientUnits="userSpaceOnUse" xlink:href="#p"/></defs></g><g transform="translate(0 80)"><path transform="translate(-120)" d="M125 10c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z" fill="url(#q)"/><path d="M9.5 5c0 2.49-2.01 4.5-4.5 4.5S.5 7.49.5 5 2.51.5 5 .5 9.5 2.51 9.5 5z" fill="#d00"/><path transform="translate(-120)" d="M125.03.53c1.97 0 3.56 1.02 3.56 2.28 0 1.26-1.59 2.28-3.56 2.28s-3.56-1.02-3.56-2.28c0-1.26 1.59-2.28 3.56-2.28z" fill="url(#r)"/><path transform="translate(-120)" d="M125.03 9.47c1.66 0 3-.71 3-1.59 0-.88-1.34-1.59-3-1.59s-3 .71-3 1.59c0 .88 1.34 1.59 3 1.59z" fill="url(#s)"/><defs><linearGradient id="t"><stop stop-color="red" stop-opacity="0" offset="0"/><stop stop-color="#f0cb68" stop-opacity=".71" offset="1"/></linearGradient><linearGradient id="u"><stop stop-color="#e60000" stop-opacity=".65" offset="0"/><stop stop-color="#fff" stop-opacity=".91" offset="1"/></linearGradient><linearGradient id="v"><stop stop-color="#a10000" offset="0"/><stop stop-color="#c60000" offset="1"/></linearGradient><linearGradient id="s" x1="227.88" x2="235.12" y1="103.16" y2="103.16" gradientTransform="matrix(0 .43966 .78049 0 44.488 -93.88)" gradientUnits="userSpaceOnUse" xlink:href="#t"/><linearGradient id="r" x1="227.88" x2="235.12" y1="103.16" y2="103.16" gradientTransform="matrix(0 -.62931 .92683 0 29.47 148.53)" gradientUnits="userSpaceOnUse" xlink:href="#u"/><linearGradient id="q" x1="227.88" x2="235.12" y1="103.16" y2="103.16" gradientTransform="matrix(0 1.3793 -1.3008 0 259.08 -314.35)" gradientUnits="userSpaceOnUse" xlink:href="#v"/></defs></g><path d="M20 80h10v10H20z" fill="none"/><path d="M27.5 82.5V80H20v7.5h2.5V90H30v-7.5zM21 81h5.5v5.5H21zm2.5 6.5h4v-4H29V89h-5.5z"/><path d="M23.5 87.5h4v-4H29V89h-5.5z" fill-opacity=".25"/><g fill="#acf2ae" stroke="#007200" stroke-width="2.577"><path transform="matrix(.29356 0 0 .2909 2.65 86.864)" d="M144.95 10A5.002 5.002 0 01140 4.95 5.002 5.002 0 01145.05 0c2.76.03 4.98 2.29 4.95 5.05a5.002 5.002 0 01-5.05 4.95z"/><path transform="matrix(.29356 0 0 .2909 2.65 86.864)" d="M149.5 5.05a4.494 4.494 0 01-4.55 4.45 4.494 4.494 0 01-4.45-4.55A4.494 4.494 0 01145.05.5c2.49.03 4.48 2.06 4.45 4.55z"/></g><path d="M48.313 82.5L45.21 86l-3.102-3.5h1.24v-1.92h3.723v1.92z" fill="#adf2ad" stroke="#007200"/><path d="M66.537 88.514a1.314 1.314 0 01-1.335 1.295 1.313 1.313 0 01-1.306-1.324 1.314 1.314 0 011.335-1.294c.731.009 1.315.6 1.307 1.323z" fill="#acf2ae" stroke="#007200" stroke-width=".753"/><path d="M62.108 83.5l3.102-2.982 3.102 2.982h-1.24v2h-3.723v-2z" fill="#adf2ad" stroke="#007200"/><path d="M83.25 21.75l3.5 3.25-3.5 3.25" fill="none" stroke="#367cf1" stroke-width="1.5"/><path d="M86 40l-5 5 5 5v-2h3v-6h-3zM84 60l5 5-5 5.022v-2.045L81 68v-6h3z" fill="#4688f1"/><path d="M84.5 88l3.5-6h-7M7 104.5L2 101v7M24 100l4 7h-8"/><path d="M43.25 102.75l3.5 3.25-3.5 3.25" fill="none" stroke="#939393" stroke-width="1.5"/><path d="M61 109l4-8 4 8z" stroke="#c19600" stroke-width="2" stroke-linejoin="round"/><path d="M61 109l4-8 4 8z" fill="#f4bd00" stroke="#f5bd00" stroke-width="1.5" stroke-linejoin="round"/><path d="M63.75 102.75h2.5v2.5l-.5 1.75h-1.5l-.5-1.75v-2.5m0 5.25h2.5v1.25h-2.5" fill="#ad8601"/><path d="M64 103h2v2.25l-.5 1.75h-1l-.5-1.75V103m0 5h2v1h-2" fill="#fff"/><text style="line-height:0%" x="3.051" y="118.387" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="3.051" y="118.387" style="line-height:1.25" font-size="8">a</tspan></text><text style="line-height:0%" x="23.051" y="118.387" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="23.051" y="118.387" style="line-height:1.25" font-size="8">b</tspan></text><text style="line-height:0%" x="43.051" y="118.387" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="43.051" y="118.387" style="line-height:1.25" font-size="8">c</tspan></text><text style="line-height:0%" x="63.051" y="118.387" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="63.051" y="118.387" style="line-height:1.25" font-size="8">d</tspan></text><text style="line-height:0%" x="83.051" y="118.387" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="83.051" y="118.387" style="line-height:1.25" font-size="8">e</tspan></text><text style="line-height:0%" x="-7.026" y="107.818" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="-7.026" y="107.818" style="line-height:1.25" font-size="8">1</tspan></text><text style="line-height:0%" x="-6.819" y="87.88" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="-6.819" y="87.88" style="line-height:1.25" font-size="8">2</tspan></text><text style="line-height:0%" x="-6.756" y="67.992" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="-6.756" y="67.992" style="line-height:1.25" font-size="8">3</tspan></text><text style="line-height:0%" x="-6.917" y="47.994" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="-6.917" y="47.994" style="line-height:1.25" font-size="8">4</tspan></text><text style="line-height:0%" x="-7.108" y="28.056" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="-7.108" y="28.056" style="line-height:1.25" font-size="8">5</tspan></text><circle cx="3" cy="3" r="2.5" transform="matrix(1.13208 0 0 1.13208 81.604 102.604)" fill="#00bcd4" stroke="#000" stroke-width=".3"/><path d="M5 0a5 5 0 100 10A5 5 0 005 0zm.048.721c1.083 0 2.179.4 3.005 1.226a4.234 4.234 0 010 5.986L5.048 4.952l-2.98-3.005A4.18 4.18 0 015.047.721z"/><text style="line-height:0%" x="-6.68" y="8" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="-6.68" y="8" style="line-height:1.25" font-size="8">6</tspan></text><path d="M17.601-2.913h16.232v16.232H17.601z" fill="none"/><path d="M21.11 5.556L20 6.667 23.334 10 30 3.334l-1.11-1.111-5.556 5.555z" fill-rule="evenodd"/><path d="M44.954 8.42a3.467 3.467 0 01-3.462-3.46c0-.678.2-1.309.531-1.84l4.77 4.77c-.531.338-1.162.53-1.84.53m3.462-3.46c0 .676-.2 1.307-.53 1.838l-4.77-4.77a3.405 3.405 0 011.839-.53 3.467 3.467 0 013.461 3.461M45 .005a5 5 0 100 10 5 5 0 000-10"/><path d="M68.875 2.219L63.344 7.78l-.407-.406L61.844 8.5l1.5 1.5L70 3.344l-1.125-1.125z" fill-rule="evenodd"/><text style="line-height:0%" x="103.739" y="118.482" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="103.739" y="118.482" style="line-height:1.25" font-size="8">f</tspan></text><g transform="translate(100 100)" mask="url(#w)"><path d="M1 9l4-8 4 8z" stroke="#c19600" stroke-width="2" stroke-linejoin="round"/><path d="M1 9l4-8 4 8z" fill="#f4bd00" stroke="#f5bd00" stroke-width="1.5" stroke-linejoin="round"/><path d="M3.75 2.75h2.5v2.5L5.75 7h-1.5l-.5-1.75v-2.5m0 5.25h2.5v1.25h-2.5" fill="#ad8601"/><mask id="w"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-60)" d="M64 3h2v2.25L65.5 7h-1L64 5.25V3m0 5h2v1h-2"/></mask></g><g transform="translate(100 80)" mask="url(#x)"><path transform="translate(-80)" d="M85 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#y)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#2a53cd"/><mask id="x"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-80)" d="M83.93 2.14c-.03-.53.55-.97 1.06-.83.5.12.79.73.56 1.18-.2.44-.79.61-1.2.36a.812.812 0 01-.42-.71zm1.7 5.46h.67v.53h-2.89V7.6h.66V3.99h-.66v-.53h2.22V7.6z"/></mask></g><g transform="translate(100 60)" mask="url(#z)"><path transform="translate(-20)" d="M25 0c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5" fill="url(#A)"/><path d="M.36 5C.36 7.56 2.44 9.64 5 9.64c2.56 0 4.64-2.08 4.64-4.64C9.64 2.44 7.56.36 5 .36 2.44.36.36 2.44.36 5" fill="#eb3941"/><mask id="z"><path fill="#fff" d="M0 0h10v10H0z"/><path transform="translate(-20)" d="M23 3l4 4M27 3l-4 4" stroke="#000"/></mask></g><g><path d="M105.1 40.267a4.835 4.835 0 00-4.833 4.833 4.835 4.835 0 004.833 4.833 4.835 4.835 0 004.833-4.833 4.835 4.835 0 00-4.833-4.833zm0 1.45c.802 0 1.45.647 1.45 1.45 0 .802-.648 1.45-1.45 1.45-.802 0-1.45-.648-1.45-1.45 0-.803.648-1.45 1.45-1.45zm0 6.863a3.48 3.48 0 01-2.9-1.556c.014-.962 1.933-1.489 2.9-1.489.962 0 2.885.527 2.9 1.489a3.48 3.48 0 01-2.9 1.556z"/><path d="M99.3 39.3h11.6v11.6H99.3z" fill="none"/></g><path d="M105 22.528l-4 4.43.94 1.042 3.06-3.382L108.06 28l.94-1.041z"/><path d="M76.448 14.99h17.528v19.416H76.448z" fill="none"/><path d="M88.06 3.06L85 6.113 81.94 3.06 81 4l4 4 4-4zM102 2h2v6h-2z"/><a><path d="M106 2h2v6h-2z"/></a><text style="line-height:0%" x="122.66" y="117.219" font-weight="400" font-family="sans-serif" letter-spacing="0" word-spacing="0" fill="#ccc"><tspan x="122.66" y="117.219" style="line-height:1.25" font-size="8">g</tspan></text><path d="M128 5l-6 3V2zM128 26.5l-1.5 1.5-1.5-1.5-1.5 1.5-1.5-1.5 1.5-1.5-1.5-1.5 1.5-1.5 1.5 1.5 1.5-1.5 1.5 1.5-1.5 1.5z"/></svg>�PNG


IHDR�atEXtSoftwareAdobe ImageReadyq�e<-IDATxڄS��@�dR@:@t@������_��� Q�������of�./���%1�E��˪��揥��'�-�
�����
��éG&q\l�`�P����H����!���w]V����V��Q�65��w
<I#�o6#�V[W�5�g'&�"�)PG=��8��:�y=���	��i|�HA��v��~��'�z;�$�ס
��s�`Ti��\.NOA�$�Gf�Zc,�Kv��^��j0�%�/l"۹�x��4�l"3�l]!!��L\";�̎MB�5�Q��-����C�n��IEND�B`��PNG


IHDR_��#IDAT(�c`�LLL"	aR�����	a�AF�?���dy0��KwIEND�B`��PNG


IHDRJ#+�IDATx^��1��0Ec���{���v*a�A&^��we1k�p	��C����iO���8r*:z&<=Un�rÌ
fJ��Na_ǭ�㶯G8����B�W�ON?/�x���|'��b��<�����$�bN1J)'Eb�rt�T��6�Bt��
�����{}_�cA�v��bqxT�{��o�ݘ�8�܍�jꌩ���۷ɾ�Ɵ�ף�+9�IEND�B`��PNG


IHDR..����IDATx^��O��0���t)�v�M=A�e�ҝ(�B[-��hT��U����|3Ц�k�L�&��%|yyyO�z�G�%�-���=�ܦ/�p�#�E18\���
x���6psd-4��7�����%�2���}�&�.�s�e�)L��LMx��d�3�A�����U_b�	>�B���8&���I
���7��Џ������cU�[?�Me�=�P�����1���1����v�)��+�Q�����:�\z�`�֜�9�䚚c����>B|L�OU`��pW^}\�㾺Vn���<a����9CO&�ɮ�dW%��H�'St7E��F~1��Lt�KZ���(�
e�u���MWp�)�ò��]���d(��]��s	OIᤶ�(i(�^"��O��S.�cA��>Ф�aQDXΑ��%4a�OضP6\�"}�Kߞ����b���J��gIEND�B`�<svg xmlns="http://www.w3.org/2000/svg" width="32" height="24"><path d="M7.5 6L2 2.25v7.5M20.5 9.5L24.25 4h-7.5"/></svg>�PNG


IHDR��ᢜ`PLTE(y����,|�.}��*{�0~�5��2�:��8��=��7��A��?��'x�"v�1x�E��C��%w�N��J��X��0z�1}�4z�k�.|�G�� t�0y�5|�2w���Q��3~�4}�L����5y�U��S��2z�A��d����,u�)x�,y�p�n�/{��i�,w�3v�1|�1u�+u�6��4�7|�%q�a�g��#g�7���
f�&s�&v�8�$n�y��'u�*w�)s�#k�#h�%f���.y�"c�b��X��)t�!d�e��0}�_�7��D�����g����r�9��0u�[��^��V��*v�`��I��(p閶���}��M��&k���A����H��d���[�`��'m�j����#r�;��.w�8z�&hו��t��[����_��;~�G��c��a����O��������\�G��$m��<������� k�o��X��H��)r�
_����d�7q���a�&p�������������d�y��p����g����������	[�������k���ҡ�
`����W�4u�4s�"o�������h������l��m����=xڑ��w�����_�����R��[�A~�Sڶ����d��v��H{�X�����[Կ�V��b�����O��L��(���dF��tt�77��᩺�r��}:t�RR���D���{������^��FS��%@w�����d�敭���R@�6`ß,R�&Gx�*',�IDATxڼ�Ow��]�ZhK[mWKs��!7�0��8t,n?@���hK��Ì��A
�	aZ�݃s���HLLh�ɖ`b����_��we�E�wО �~>����0D��D56c���H+��@ �mv��j
vE��b��d9�Yx��X}85��H�G��e��I�huq�1L�#�`xm	:@�;��N��G@�A{����c�$�m���8�Ӽ�`Pr�=^�b��s >ѳ��`�1�D}���`����
�E�c%!��P²�[P��U��^ӭgA|�T%�&S`0�`�|�x��x^4p?�7�/(�h-P��V�]�`$���bw+YI�".�YQ�;�<'�Jt�0C�9`g���5/^�y1�v� :�.�b`�"�b�����ey�WSb%%�>��*�s
S����mV(���JV��:%}��&��a��ո��.)�;��`��5.����)��`M�oi��w
��Rz
��4/;�4�j`���3��	�ud%��X�b|�Ǣ���-�E�2K�a����2�� ��m�ʂ� �y���y��/۱��[
�nI��Pd
�h��H\��{��ʁ5ql�xG����RQni��;d�T��/x�`��A��节���0k������`\d��
�{y������1�ZS�
+bK�����"�?��Ƹ��/	�b`�k=M�!+.Č�~#+����R�m�m���^ީ�vE+7hyPv˜��Y�B@���"�a8�
��-|��@ꑤ>4�(��V�o�A��r���|��S�G������hC���D��/a-;�����xQN��q��US<,���zu�� ��g�mAG�P<�&��Y����|p��_�_�z���r��z51�å3�kN���l�m)�`�b�Z�&^�^l/�[�q�ar����/,(n�P]m=w��N�L�)l��b�Z��b(����>'w��V�b�(I����64r�L&ʙ��j���c�ߨ�_��E}؀�-��y�G,m���p�-�/_�<˭>�垭�xy|�@�ӣ���r�������n�>����"<A��pwi���=�1�G����������������w#���������G�d�S�tz,���]Z4?�}qq��|~�R�ϩ�q�����ڻD����+�`��(_W�+�MI�|����|�Ϧf�wS�n_Q�/�<�jꅌ%�/o���׷$�z��{<���[�l�|�7�'�A��{q2�P9�`�2��/3�9!�Ң�"oc̥��Lr��W�|<?����`j��	�U��e ղ�}�s�;܉��d*j�
��R`^賱���G]-�l24��]��!M� 0��LͯM�Ǎ=
E0xg�;l�`���NZm��ĭ?Óꪮ�
:��������	�xy:�4G�JT���4}:??�=YIf�/�/�x�O�@m��4Yn��hܒ�*�����A,��g]Ɠ ؗ[�:#+��r2���{����^6��[�"�4���۰"z�6�
�����<��n��O:q&�8<)��p���Z��'�c��g���l5�$�������E2\^p�Imh=�MK9ym�}�sd9���`�S�zg���Kkk�c7k^�Lf��<�L�w���-��n}T��U%��Š��ȶ%I�<���Fэ~Q�.do�1e�Ϩ�gC����Q2�43�<��`5�|�Jsrm�iD���H�:V�''Ҿ�'�94�qB����,�
��0Mm
��$��b��9&�6�`?�X{_�ݦ�W���>{409���G���'�j��x�:�<5rEKbi��ϓ��/X`7����/ƒU�.�8|�l7��Xx�5��\��O����dy�5�F��l�6��]k*ɝ!��3����νJ�i?���6���d��K54�*|� n���\ð�Ą��1�U������φkk��7�Z9�������y��ǗG�~l�0�'k���qF���BZoBO�j��x/�%0�b5�/��I�"v.�]�����ީ�#Iز��?Sj���P�M��A�&�j`Z
z�&��
_Ht�<�$�,2
��l��� �DR{にcuf
�����+�{{wOe�3���ޅ��Yor�s���6m.Y�x�ε����%��1�ְz��e��qjiis/Ϧ�z��䝙��6��&�܁��L���z�X�)gL[�HY�K�ɺ	�v]9�3O�̓�HL��ņ ��x�8�
��Gͣ�lď�*�b��ég��g3�P�z�9�J����b9��i&�*���_�m]��D�^_r��#���TCg��]۳���g/��{a���(`/N���RF���8��K�N�S�ctfHFfɒ^2�,���`����dX V���:U��=��+^U��^}2�h�O���as*�LF��lc���%���J���;p0��|��@��%��
�ܞ��ZH���i�s���=|�j\�t��6���0T�i�F���w	b����`b��8���֞��jف�������P<�0�^IN-918����nK�50E�6�.
n�Ë�m�r�w���U1x��ݹ�p{��:(.�&=��F.���1z%�9�C�Vd�Ram�rW��Q���U>�a�8�v��%t$�|���.\��
�]����Z��gKü5����`��"�(=��Yz
��r��|�/�<�pM��l��4������-zj'A҉�
��k��a�U?<�F��Ȇ�%F
Z�q,)J�@��0M����ӭ�o���ׅZ�A�;t}�v}ۅ�[~@�P{�"ց��f���\��f'>��d[��x��«��6���r[�Jx!uʮU6px��X����m��5�C�*�^9��
;��o=\8ӧ�\L%<��"�k�͞�0�c0�
%�4I��_7l+X`�B	�|��][��w�>��}
�^��H1�0��\.�p�9p�+hJT��"�YE�B��}�E��l`7o%`��!. �}�<�om݅�s�d=�Юk-�,�+���*��A�!�ksȐC6q	/%a�s������|t�>��:���V�u��+������Wp��b1�#�o�^�Ŀċ'	��2�U�`��h�J�������e[5uTs�{`�ɎJ>��C��=�}�8�p�yQB�I��ߎ�08�4�I�5/��Cq.Ā��{�e-ږ�?b�x+ڣ����\W�|���Zx+�0�^ϻY��'�y�}'q��.�v��W�?�0Jl�����^~]��8�O;��f�)m���A҇�Ht�Io�hB�!m�iC�\]h<�x%tQ�`�;AW�F�=Vw����;��j�|o1s�����9�33�z���+��5�ߺ��l��b����:�7�\�o�=��x��]	^;��y�F�sj��8��iYS��z����v{vO.b�*"\��I|�C�5�Bʛ�Fץ�#�ib�:�ހ�xF/�sWܵC�qO�B3i��^�'^@3�l��s�A����Nw֯cޥ���̻�
�7�_>`��c��7s��k����y�Bu��~<����uto#X��Z�\y��k���%޴nޥM\���=:��)v3x�?Lo��v$-$,�0u�9�F�@�:Λ��A0$�=�Q
�mT{����u�������R�=G{9�f�z(��ł&/��迣���>AG�VB�<��a�UX�s3�yq�:���M�.�sjT�5[-��0�ˁ�῀5���8��Av��H-�;���UHl�a���d&�<��<����P�^kU��wi�����%Qu�׆Յ�t:K�I����R�"�ocl�
5�o�����zN��9������Q�0�S��������VkiQ����?e�Sj.u�-"�T;qg�2�8��q	�[4�_��;��T*iZBl�e�r'Pd�F	���R><�L������N��)���<�`ۇo���u�=��������D�K��na�}^���GY�apI*�.��I�?�9q 1�әgut��Q�ϙl�<���gнĒv� c��F.e>�6�8�sI&�y��̮
��a�%�b�p�
��U���x�91ܳ�J��'�o?7>�J��^�4��Ge�"�LsO.׺]�gT����J�H����q��0w����K<��5h!~)��<��,4��{n|gu2-�O9�
Z���ǤA�&r��IeqZn=`�C��
�],�#�Be|�@
`�܀�����'�F�����ALK�Ӵ�;Vu�]Q��`����O��8M⿸��]�[�%�>aK��Ml�S��1��H
I�h�X�5���=3,�3{(gk	,dea�j<6��x(�j�1'a96P���B���E.4țjL:�T�sZ��)+̛Ic�%W_���b�~�jh0wSU�E���M'�4��T�1a�G��
g*�����\9��?�:�k~i!�O��-B?š���,y,�"��<?��ۆY���h���`N�XV�NM=���dgU�+,�~]:�/�]�8�h��A�yc��N��`��>`�]7�_������&qM}����JF�W��������E\�/�c�N�~�������3���زɺo�@�ɸ@`]��bb�
̳�0�Er��h�T��"�]�q���ݻē�|���A/qp��Ǫ8��Nl��bx��s8F�Y�G!��
��k�
o�~�L�����B�Z߉Q�=���Z`�P�����~V����a^�}��4X~mB��n�)+�pVDepތa�*6��iXr$Jwӎmv
����}�B��r��-y���3��`��5.��?-�����h�G�I�?�a ���ꮁ�r��% ����U
��x����6�=�u�^����*�`Q��h;
=��y+-c�O��$���ݞ���k`_>��+��?����0p�~{�z���3b�`�B7��
sb�Ի��J�
�"�EG�ʳ�/?����l{�Lhי�Q��E+�A�5�X*�ؗ�DQ�}���~���=q����8��t��k^��z���tH�S�۫W���w�g.�O^�o/σKD�����{�}<�;/��b����j����J4�z���	BK����#��N{�gE��w��3�4�y��!wV�=#�<���s5B}sI�'��s��y�{۷O�]\�ZjY`hJ���"˫�H�b0
���%�~-A^S�D�j5֟NI�9rb�������:
:�M�Z`Fbq8��!j`��P�W�̈́{L*�����\��5X	��޳a�ȳ�B���9ii�4_8��<Oͅ�����6�'l��-e�Pa`^@�p��S��*��v���J|p<��uG�j����p�����56\��x@(�/]��*0ڰa��ӼA���vT�F��R���N��iNB�6�s����W6��*G��ӅQ}[���%z,nS�h����.j1:�h�E��`nޡ�;��a��s�F`��!42C��q(8z{)�O�ѩ#<ϩ�8X������r �9���'�L��'[�(OZ�
d�����;gˆh�)��
s.�n-�E�|��_ [E�snq5nK����U�1��ʅ���WYC��;y���`�O��V���̈|�X�έ��h�ق�AfmD/F
Q�fT�DBd����k�2����4f
ܦѰe	��3e�Η��kʵV0PŇ����	����ۢ
��V֙��/lk91��b�nH�]�)�G0���t(Z�:���R�jђӧ|����6���ww�TW?��}�@���?�v�U�
��h�-�#cݷ~C+@�
���%�X5��D���$d�K���ޖ�6�'|�Ǭ���^��G��c��
ey=��0~��5K�X���o��PBD�d��bi�4er˂v�F2t;�r�z<���	�����穯^��{�Ջͪ�
�b*P*0�f'�PF
�%�I�J\j�ln�PP�Wai�Pe%2<��Č)sL��O�$�}�����k����Pb+v3ţh
]Q=�X�J8�hN$�̚W��u[�ן7�TR?��%�U1n�{�y�W�f=�L��p�it��4��x$�i���a):�$-���5�cFNҋ��)Q��a9tƂ�Q��>�Lu��
���B^.Ky�=������M�'-Y�®]2�Waх�X_m}�?x�~�C𗤌��K�7��sܿ+���gy5b��C���e�
�,]��['������8�,ߚ=��yߨ�~T�k��|�Ij��E5'���C���h��	�q���0���Z�NKQ��]�-H2��dIr����B��$�JIC�ǭZ]�C�ǩ�n�,W��$����9�?J��ւ�� ����M��8� �
Y��j������^C�N�8���c��<{�3pjjꐛ�=hGwJ����l��)=ǚ��B�t�,�
��0����^����k&���UVҵ|*�r�3�gRS?f�P��:i}_�0�C`�v+5�l"!K,��Y5��ù�ׂڕ�˗��GC�[%�>O�/�|�iڪ'08����!"ώ�%xv0�d9�>	�9mL�7'�j[=_0"G?��_`���(����`�c��Ȑ��if��Z�k�t%�'����w�pDpD2��f
��T�P��	��&L3��� �o$Q{�6Y�N:>�i�i�f�4�D�u|勫pҺ�s0�̓|��}�-��u�*�ASC�&S��-=;J�:�zr�_�A\��Io&������<\�l>�B�Y�	�%�S�����=�lA��vJ��݇"�#��<�S/_���S�9u�^�1���A{�&1�4ه�q�������ݢ�5a�d��O>ېT�zӺI['^=y2����f��Ǐ,8�����5�I~��*7���{�
������Hq$�S��N:��U����V��A�㱑�Ca���z	����%�F$,8R�����t��C��~	>�|Ǘ��G��řT�d�J�a���.Y�P�pVBCeNOu�n����"�5a�}��NC��8��Lkj��i��N�]�R�e�vlZ��ѱ��fT��ݷ%$}*��S3+��>DV�DZA}�> �����lӌJ�7�C�kv��[q��y��-���q�qs���
Z���G���e;:�8���!eeᵙ���k�~�3�,���]�֢.�2���<�	2�JdlPm���'٬/b��"`cGT\-.�cw)Gs��9�ÉE\+�[�m艹;��߻m�3��>ک��;��vW�ֆ�M�a3.����pU�n,��2�U��,��-8Dr��F�16?�OY�Y�YD]l<3���b�%7�q�-�)jP�y�e�Ym)�#�Hm����s���Kw�����e䙶as.�ٓ#mX�%�Jw�Y�T�ʴ�vO�_�
�8ry�y�v�cGA���):,��/��ӹ��^U\��׾=�?P�𖆁��
N�m:+�T�4�ϯwV�'[�$��Y$b
6�x����\db57}3�$��
�vU�%l�D"�H�t`B�I1��?4�Ts0!�2��W��)`�v��)�"�`O\�cV��V���_��Pe�ЋѱW�iQ[�#���\�S�H�����W'�_���{�S���-��2�?�8̦a<���u���i��6`1�.m�F��\/�ț�w�i���Ù�{����fR�R�#�
����W�`s��X��kO��d��
(�V�Z+���W��j(8��Tc����(h����`�$,3#�*\�珷G�͕��B�,�k25��a`d�ڊ�+
�cY�r�g�k���8:0v��s�"!S�8ɫ0]�#�
��(ϫ��>9���i�dO��!���Squ]���n(R�3�k^=!K%�%�0��l%�3x.�W�[����zXf��F�h�Y%t�c'�E��W߬垌E4�l�I�\X�NL����^�Bn����ӷ�WV�q�s����m7�R���a4~�::�'
R���3��J�C���.a�B��㜎M]ˇ([N�oU��5�)��������W	�-��7c$��Є=��w�&X��.�=)4�XC�(�/����z��7R����p���L�S8I�u:\�8�a�HI	�E�	8���Kf	w�l�D��֬�[^0bdKq�-�5�Q�'܉~WGv���
Xj2���(t$�#��N� &
B��w������>[�p��	nw���2gk�b�WW�:.��ܔ��鼐0o##qq�����A�<�����pI�m�Jj>!b��y{�L d2�C��&���ϟg�#e��R�MV�jQ�Z�c[L|B�I��•윿d�����1����<GC�x̪"O�������^����������U�(���58�H�)�)�{jt�!�1ܻ-���U���J. �s�6<�ф��G����_���9��IR��aZ��0H�
m��pz.Vs8IVd�4T�<p_.��$;2�Վ�ƍ���!~�5�_c�ҙ3�XD�l8�B
�&�{NC�������"��AB'��	�HI?���\o cHI	�Uec�
�}�{���ș�ݯ�]��ziz^ȩ�?��N��>p���!1�ݤ�鐔0���!�L��&�Q̕=�ٴ��8�ۭ[���T�l�\ū�{�دqu�zJy����bp��RhfT�����g�g|��.����{߹�ʀr��Kh
\df�)�����[�mCE1
�
�X3���I���8�D
���f�L/BN:4}Lh�>���\r��g	wTJQ>:��d��7/К�_�b)^�ʉ0�L�V�߼��k�P���֬�K�������>�xK���RPЧs�TF��z�<��"�]T�8�/��I��5����e�I����f��~ߏ,}]����^z�20������Շ��i?��;w)�������_�J�$��,�����,G�[�p����X�pCZd�^�y��Ά �N�"�iE+�Yeq����M����8�������&�P}B1Ǿ�΃'wj1n@���zXx�L��\9#%�[_�`G�/�
&�O�>(�����G����[r���Ͷ@c�y�ט��M�;���nD���׬L*�L;K�[�~
��%A�7�0ĵMz*�O��[�L��d��ƑS�	�t��e2�V
�mJ"+��#7$��K��>�L���*�`".UcF�d���V+0%�2�f���$wȰf�\9?3���O-r(����SS,��@ҷ-L"wc+y�U<����s|Ţ����*���,=��B�'@� ���l��n�&� ���G{Z�5-�A�ì��b]pPJ�#�W��K
�a0���K:}ʮ��&�mb+��%��c*^�\c�
�*��|����y��\���X�'l8kN���ADV��xw�P�\������W۶�;0#�?_]g/5H{�T���mz��쾚8�-���1�K	3��q��&��+��5(��y)	=��O��~���v�5[(�}yp�-�r�u���HN�_�yr����y�E�f^šo=%�el1�����G�d�}l�zy�\*G�8�8ؓ⟣��վ@�Mc�<f�C��Nh0l�o���]��w��2��,�8~&���$ͭ�Di:8���u��
�0�p3[�;�g�7���ܬ���I��r���+[�����J��������Pwy�)��;�X���-�Qbn�5�u;veO�q�<�M>�U�0%��pW�w�[�>8����w��x�O+>K�=U��M��xg9g�U-)j�������ÚS��j���'�X"?{�PFv-�?u���ZJ q�Q��{b�-�u~DE�W@.��@`��N7��^�V3��υ@Ѱ��3X�WH��"c��������J�6�<��n�������d�4jy2K�-�^J=o0�Uda$�=iz��8fa�Kˤ	W�-���/I���:��N=^�[idYZ�Z�2��Ɲ߯'Vk��������E�n<ج&V������fA�v�g^V�[�Dd9��:���]27��_����B���5\�[E#@⃓*�p����Lj֭�1��$ˣ���9�#�H/��cY
�0G޸�w���ZC� �OSa������R:��sk����������mu7���^-�ᆸ�Ā�Tc��~lz�f<�w`	���e�I�/���v�
��5�K'��[W�^��J��0x�߂I��q�T\�Gƪ�g�m|\/��q�k�Nj
֌�H�s�¥�ۄ�d&��`�W�v��6�\�H�dqb��..Ll(&�'�;�	�u/�Ļv_ȹϱ����CM�V?��V$T����[Q��H��;������������{<>��?̓�
�����F�j z�`�e�W��o<?<��G�[A=��`HuWƦ�7#��v�V�Ճ�.O&�3^��e�nq#
�l�`&�o�+亽{�׆.(T>!��P�)���Yg��ӈ��]����z��w�|yƿ��
nU�p��m�����r��PZ��^\����7�xwa����X5�"�5ܒVz�^|u}0ޔ��GQ�m��<�+m�?g^��7�-�|h�Ǿ.8��c���hVC��AtzSm�T�MB�u����V=�Z�P
��'D�K�K%��%����.����+]0Tb��P}��s��Il��j��l�V1�"�Y	�H��8Q5����`��U=�c�G�(����"�W��bK�1�ĝg'A�������`t.�ALa�;*Ub)�ά@</�*�]S>��4��u�����NU�|d��
���"�T��F
R��,�;�u��SFZ�9�M�Y��E)��!�3
����5r'�j�ס1В�����M�m������\��%:i_(�q��6Z�>��`�Y��)�ë
"F�R���R��"1z�V�����I��"u�Ɏ����ހyX�|2�IY�)hbR�*�$��X�Z��Q�Q�b��B�X����j�X���[`!v,����[`!v,�n�M���Lv3�IEND�B`�

Выполнить команду


Для локальной разработки. Не используйте в интернете!